/ Hex Artifact Content
Login

Artifact 26e48f0c823844fcce67bd2a11ad1ad3468aaed32fd8864bc69c4147cb608728:


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 6f 77 53 65 74 20 52 6f 77 53 65 74 3b 0a 74  RowSet RowSet;.t
9060: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 61  ypedef struct Sa
9070: 76 65 70 6f 69 6e 74 20 53 61 76 65 70 6f 69 6e  vepoint Savepoin
9080: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
9090: 74 20 53 65 6c 65 63 74 20 53 65 6c 65 63 74 3b  t Select Select;
90a0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
90b0: 53 51 4c 69 74 65 54 68 72 65 61 64 20 53 51 4c  SQLiteThread SQL
90c0: 69 74 65 54 68 72 65 61 64 3b 0a 74 79 70 65 64  iteThread;.typed
90d0: 65 66 20 73 74 72 75 63 74 20 53 65 6c 65 63 74  ef struct Select
90e0: 44 65 73 74 20 53 65 6c 65 63 74 44 65 73 74 3b  Dest SelectDest;
90f0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9100: 53 72 63 4c 69 73 74 20 53 72 63 4c 69 73 74 3b  SrcList SrcList;
9110: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9120: 73 71 6c 69 74 65 33 5f 73 74 72 20 53 74 72 41  sqlite3_str StrA
9130: 63 63 75 6d 3b 20 2f 2a 20 49 6e 74 65 72 6e 61  ccum; /* Interna
9140: 6c 20 61 6c 69 61 73 20 66 6f 72 20 73 71 6c 69  l alias for sqli
9150: 74 65 33 5f 73 74 72 20 2a 2f 0a 74 79 70 65 64  te3_str */.typed
9160: 65 66 20 73 74 72 75 63 74 20 54 61 62 6c 65 20  ef struct Table 
9170: 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73  Table;.typedef s
9180: 74 72 75 63 74 20 54 61 62 6c 65 4c 6f 63 6b 20  truct TableLock 
9190: 54 61 62 6c 65 4c 6f 63 6b 3b 0a 74 79 70 65 64  TableLock;.typed
91a0: 65 66 20 73 74 72 75 63 74 20 54 6f 6b 65 6e 20  ef struct Token 
91b0: 54 6f 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20 73  Token;.typedef s
91c0: 74 72 75 63 74 20 54 72 65 65 56 69 65 77 20 54  truct TreeView T
91d0: 72 65 65 56 69 65 77 3b 0a 74 79 70 65 64 65 66  reeView;.typedef
91e0: 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20   struct Trigger 
91f0: 54 72 69 67 67 65 72 3b 0a 74 79 70 65 64 65 66  Trigger;.typedef
9200: 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 50   struct TriggerP
9210: 72 67 20 54 72 69 67 67 65 72 50 72 67 3b 0a 74  rg TriggerPrg;.t
9220: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72  ypedef struct Tr
9230: 69 67 67 65 72 53 74 65 70 20 54 72 69 67 67 65  iggerStep Trigge
9240: 72 53 74 65 70 3b 0a 74 79 70 65 64 65 66 20 73  rStep;.typedef s
9250: 74 72 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65  truct UnpackedRe
9260: 63 6f 72 64 20 55 6e 70 61 63 6b 65 64 52 65 63  cord UnpackedRec
9270: 6f 72 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ord;.typedef str
9280: 75 63 74 20 55 70 73 65 72 74 20 55 70 73 65 72  uct Upsert Upser
9290: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
92a0: 74 20 56 54 61 62 6c 65 20 56 54 61 62 6c 65 3b  t VTable VTable;
92b0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
92c0: 56 74 61 62 43 74 78 20 56 74 61 62 43 74 78 3b  VtabCtx VtabCtx;
92d0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
92e0: 57 61 6c 6b 65 72 20 57 61 6c 6b 65 72 3b 0a 74  Walker Walker;.t
92f0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57 68  ypedef struct Wh
9300: 65 72 65 49 6e 66 6f 20 57 68 65 72 65 49 6e 66  ereInfo WhereInf
9310: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
9320: 74 20 57 69 6e 64 6f 77 20 57 69 6e 64 6f 77 3b  t Window Window;
9330: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
9340: 57 69 74 68 20 57 69 74 68 3b 0a 0a 0a 2f 2a 0a  With With;.../*.
9350: 2a 2a 20 54 68 65 20 62 69 74 6d 61 73 6b 20 64  ** The bitmask d
9360: 61 74 61 74 79 70 65 20 64 65 66 69 6e 65 64 20  atatype defined 
9370: 62 65 6c 6f 77 20 69 73 20 75 73 65 64 20 66 6f  below is used fo
9380: 72 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69  r various optimi
9390: 7a 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43  zations..**.** C
93a0: 68 61 6e 67 69 6e 67 20 74 68 69 73 20 66 72 6f  hanging this fro
93b0: 6d 20 61 20 36 34 2d 62 69 74 20 74 6f 20 61 20  m a 64-bit to a 
93c0: 33 32 2d 62 69 74 20 74 79 70 65 20 6c 69 6d 69  32-bit type limi
93d0: 74 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ts the number of
93e0: 0a 2a 2a 20 74 61 62 6c 65 73 20 69 6e 20 61 20  .** tables in a 
93f0: 6a 6f 69 6e 20 74 6f 20 33 32 20 69 6e 73 74 65  join to 32 inste
9400: 61 64 20 6f 66 20 36 34 2e 20 20 42 75 74 20 69  ad of 64.  But i
9410: 74 20 61 6c 73 6f 20 72 65 64 75 63 65 73 20 74  t also reduces t
9420: 68 65 20 73 69 7a 65 0a 2a 2a 20 6f 66 20 74 68  he size.** of th
9430: 65 20 6c 69 62 72 61 72 79 20 62 79 20 37 33 38  e library by 738
9440: 20 62 79 74 65 73 20 6f 6e 20 69 78 38 36 2e 0a   bytes on ix86..
9450: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
9460: 5f 42 49 54 4d 41 53 4b 5f 54 59 50 45 0a 20 20  _BITMASK_TYPE.  
9470: 74 79 70 65 64 65 66 20 53 51 4c 49 54 45 5f 42  typedef SQLITE_B
9480: 49 54 4d 41 53 4b 5f 54 59 50 45 20 42 69 74 6d  ITMASK_TYPE Bitm
9490: 61 73 6b 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70  ask;.#else.  typ
94a0: 65 64 65 66 20 75 36 34 20 42 69 74 6d 61 73 6b  edef u64 Bitmask
94b0: 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
94c0: 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 69  The number of bi
94d0: 74 73 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 2e  ts in a Bitmask.
94e0: 20 20 22 42 4d 53 22 20 6d 65 61 6e 73 20 22 42    "BMS" means "B
94f0: 69 74 4d 61 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f  itMask Size"..*/
9500: 0a 23 64 65 66 69 6e 65 20 42 4d 53 20 20 28 28  .#define BMS  ((
9510: 69 6e 74 29 28 73 69 7a 65 6f 66 28 42 69 74 6d  int)(sizeof(Bitm
9520: 61 73 6b 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20  ask)*8))../*.** 
9530: 41 20 62 69 74 20 69 6e 20 61 20 42 69 74 6d 61  A bit in a Bitma
9540: 73 6b 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41  sk.*/.#define MA
9550: 53 4b 42 49 54 28 6e 29 20 20 20 28 28 28 42 69  SKBIT(n)   (((Bi
9560: 74 6d 61 73 6b 29 31 29 3c 3c 28 6e 29 29 0a 23  tmask)1)<<(n)).#
9570: 64 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 33 32  define MASKBIT32
9580: 28 6e 29 20 28 28 28 75 6e 73 69 67 6e 65 64 20  (n) (((unsigned 
9590: 69 6e 74 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65  int)1)<<(n)).#de
95a0: 66 69 6e 65 20 41 4c 4c 42 49 54 53 20 20 20 20  fine ALLBITS    
95b0: 20 20 28 28 42 69 74 6d 61 73 6b 29 2d 31 29 0a    ((Bitmask)-1).
95c0: 0a 2f 2a 20 41 20 56 4c 69 73 74 20 6f 62 6a 65  ./* A VList obje
95d0: 63 74 20 72 65 63 6f 72 64 73 20 61 20 6d 61 70  ct records a map
95e0: 70 69 6e 67 20 62 65 74 77 65 65 6e 20 70 61 72  ping between par
95f0: 61 6d 65 74 65 72 73 2f 76 61 72 69 61 62 6c 65  ameters/variable
9600: 73 2f 77 69 6c 64 63 61 72 64 73 0a 2a 2a 20 69  s/wildcards.** i
9610: 6e 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d  n the SQL statem
9620: 65 6e 74 20 28 73 75 63 68 20 61 73 20 24 61 62  ent (such as $ab
9630: 63 2c 20 40 70 71 72 2c 20 6f 72 20 3a 78 79 7a  c, @pqr, or :xyz
9640: 29 20 61 6e 64 20 74 68 65 20 69 6e 74 65 67 65  ) and the intege
9650: 72 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 75  r.** variable nu
9660: 6d 62 65 72 20 61 73 73 6f 63 69 61 74 65 64 20  mber associated 
9670: 77 69 74 68 20 74 68 61 74 20 70 61 72 61 6d 65  with that parame
9680: 74 65 72 2e 20 20 53 65 65 20 74 68 65 20 66 6f  ter.  See the fo
9690: 72 6d 61 74 20 64 65 73 63 72 69 70 74 69 6f 6e  rmat description
96a0: 0a 2a 2a 20 6f 6e 20 74 68 65 20 73 71 6c 69 74  .** on the sqlit
96b0: 65 33 56 4c 69 73 74 41 64 64 28 29 20 72 6f 75  e3VListAdd() rou
96c0: 74 69 6e 65 20 66 6f 72 20 6d 6f 72 65 20 69 6e  tine for more in
96d0: 66 6f 72 6d 61 74 69 6f 6e 2e 20 20 41 20 56 4c  formation.  A VL
96e0: 69 73 74 20 69 73 20 72 65 61 6c 6c 79 0a 2a 2a  ist is really.**
96f0: 20 6a 75 73 74 20 61 6e 20 61 72 72 61 79 20 6f   just an array o
9700: 66 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2f 0a 74  f integers..*/.t
9710: 79 70 65 64 65 66 20 69 6e 74 20 56 4c 69 73 74  ypedef int VList
9720: 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 65 72 20 73  ;../*.** Defer s
9730: 6f 75 72 63 69 6e 67 20 76 64 62 65 2e 68 20 61  ourcing vdbe.h a
9740: 6e 64 20 62 74 72 65 65 2e 68 20 75 6e 74 69 6c  nd btree.h until
9750: 20 61 66 74 65 72 20 74 68 65 20 22 75 38 22 20   after the "u8" 
9760: 61 6e 64 0a 2a 2a 20 22 42 75 73 79 48 61 6e 64  and.** "BusyHand
9770: 6c 65 72 22 20 74 79 70 65 64 65 66 73 2e 20 76  ler" typedefs. v
9780: 64 62 65 2e 68 20 61 6c 73 6f 20 72 65 71 75 69  dbe.h also requi
9790: 72 65 73 20 61 20 66 65 77 20 6f 66 20 74 68 65  res a few of the
97a0: 20 6f 70 61 71 75 65 0a 2a 2a 20 70 6f 69 6e 74   opaque.** point
97b0: 65 72 20 74 79 70 65 73 20 28 69 2e 65 2e 20 46  er types (i.e. F
97c0: 75 6e 63 44 65 66 29 20 64 65 66 69 6e 65 64 20  uncDef) defined 
97d0: 61 62 6f 76 65 2e 0a 2a 2f 0a 23 69 6e 63 6c 75  above..*/.#inclu
97e0: 64 65 20 22 62 74 72 65 65 2e 68 22 0a 23 69 6e  de "btree.h".#in
97f0: 63 6c 75 64 65 20 22 76 64 62 65 2e 68 22 0a 23  clude "vdbe.h".#
9800: 69 6e 63 6c 75 64 65 20 22 70 61 67 65 72 2e 68  include "pager.h
9810: 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 63 61 63  ".#include "pcac
9820: 68 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  he.h".#include "
9830: 6f 73 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  os.h".#include "
9840: 6d 75 74 65 78 2e 68 22 0a 0a 2f 2a 20 54 68 65  mutex.h"../* The
9850: 20 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44 55   SQLITE_EXTRA_DU
9860: 52 41 42 4c 45 20 63 6f 6d 70 69 6c 65 2d 74 69  RABLE compile-ti
9870: 6d 65 20 6f 70 74 69 6f 6e 20 75 73 65 64 20 74  me option used t
9880: 6f 20 73 65 74 20 74 68 65 20 64 65 66 61 75 6c  o set the defaul
9890: 74 0a 2a 2a 20 73 79 6e 63 68 72 6f 6e 6f 75 73  t.** synchronous
98a0: 20 73 65 74 74 69 6e 67 20 74 6f 20 45 58 54 52   setting to EXTR
98b0: 41 2e 20 20 49 74 20 69 73 20 6e 6f 20 6c 6f 6e  A.  It is no lon
98c0: 67 65 72 20 73 75 70 70 6f 72 74 65 64 2e 0a 2a  ger supported..*
98d0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
98e0: 45 58 54 52 41 5f 44 55 52 41 42 4c 45 0a 23 20  EXTRA_DURABLE.# 
98f0: 77 61 72 6e 69 6e 67 20 55 73 65 20 53 51 4c 49  warning Use SQLI
9900: 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48  TE_DEFAULT_SYNCH
9910: 52 4f 4e 4f 55 53 3d 33 20 69 6e 73 74 65 61 64  RONOUS=3 instead
9920: 20 6f 66 20 53 51 4c 49 54 45 5f 45 58 54 52 41   of SQLITE_EXTRA
9930: 5f 44 55 52 41 42 4c 45 0a 23 20 64 65 66 69 6e  _DURABLE.# defin
9940: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
9950: 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 33 0a 23  _SYNCHRONOUS 3.#
9960: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 66  endif../*.** Def
9970: 61 75 6c 74 20 73 79 6e 63 68 72 6f 6e 6f 75 73  ault synchronous
9980: 20 6c 65 76 65 6c 73 2e 0a 2a 2a 0a 2a 2a 20 4e   levels..**.** N
9990: 6f 74 65 20 74 68 61 74 20 28 66 6f 72 20 68 69  ote that (for hi
99a0: 73 74 6f 72 63 61 6c 20 72 65 61 73 6f 6e 73 29  storcal reasons)
99b0: 20 74 68 65 20 50 41 47 45 52 5f 53 59 4e 43 48   the PAGER_SYNCH
99c0: 52 4f 4e 4f 55 53 5f 2a 20 6d 61 63 72 6f 73 20  RONOUS_* macros 
99d0: 64 69 66 66 65 72 0a 2a 2a 20 66 72 6f 6d 20 74  differ.** from t
99e0: 68 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  he SQLITE_DEFAUL
99f0: 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 76 61  T_SYNCHRONOUS va
9a00: 6c 75 65 20 62 79 20 31 2e 0a 2a 2a 0a 2a 2a 20  lue by 1..**.** 
9a10: 20 20 20 20 20 20 20 20 20 20 50 41 47 45 52 5f            PAGER_
9a20: 53 59 4e 43 48 52 4f 4e 4f 55 53 20 20 20 20 20  SYNCHRONOUS     
9a30: 20 20 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52    DEFAULT_SYNCHR
9a40: 4f 4e 4f 55 53 0a 2a 2a 20 20 20 4f 46 46 20 20  ONOUS.**   OFF  
9a50: 20 20 20 20 20 20 20 20 20 31 20 20 20 20 20 20           1      
9a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a70: 20 20 20 30 0a 2a 2a 20 20 20 4e 4f 52 4d 41 4c     0.**   NORMAL
9a80: 20 20 20 20 20 20 20 20 32 20 20 20 20 20 20 20          2       
9a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9aa0: 20 20 31 0a 2a 2a 20 20 20 46 55 4c 4c 20 20 20    1.**   FULL   
9ab0: 20 20 20 20 20 20 20 33 20 20 20 20 20 20 20 20         3        
9ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ad0: 20 32 0a 2a 2a 20 20 20 45 58 54 52 41 20 20 20   2.**   EXTRA   
9ae0: 20 20 20 20 20 20 34 20 20 20 20 20 20 20 20 20        4         
9af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b00: 33 0a 2a 2a 0a 2a 2a 20 54 68 65 20 22 50 52 41  3.**.** The "PRA
9b10: 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 22  GMA synchronous"
9b20: 20 73 74 61 74 65 6d 65 6e 74 20 61 6c 73 6f 20   statement also 
9b30: 75 73 65 73 20 74 68 65 20 7a 65 72 6f 2d 62 61  uses the zero-ba
9b40: 73 65 64 20 6e 75 6d 62 65 72 73 2e 0a 2a 2a 20  sed numbers..** 
9b50: 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
9b60: 74 68 65 20 7a 65 72 6f 2d 62 61 73 65 64 20 6e  the zero-based n
9b70: 75 6d 62 65 72 73 20 61 72 65 20 75 73 65 64 20  umbers are used 
9b80: 66 6f 72 20 61 6c 6c 20 65 78 74 65 72 6e 61 6c  for all external
9b90: 20 69 6e 74 65 72 66 61 63 65 73 0a 2a 2a 20 61   interfaces.** a
9ba0: 6e 64 20 74 68 65 20 6f 6e 65 2d 62 61 73 65 64  nd the one-based
9bb0: 20 76 61 6c 75 65 73 20 61 72 65 20 75 73 65 64   values are used
9bc0: 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 0a 2a 2f 0a   internally..*/.
9bd0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
9be0: 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f  EFAULT_SYNCHRONO
9bf0: 55 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  US.# define SQLI
9c00: 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48  TE_DEFAULT_SYNCH
9c10: 52 4f 4e 4f 55 53 20 32 0a 23 65 6e 64 69 66 0a  RONOUS 2.#endif.
9c20: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
9c30: 45 46 41 55 4c 54 5f 57 41 4c 5f 53 59 4e 43 48  EFAULT_WAL_SYNCH
9c40: 52 4f 4e 4f 55 53 0a 23 20 64 65 66 69 6e 65 20  RONOUS.# define 
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 20 53  AL_SYNCHRONOUS S
9c70: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59  QLITE_DEFAULT_SY
9c80: 4e 43 48 52 4f 4e 4f 55 53 0a 23 65 6e 64 69 66  NCHRONOUS.#endif
9c90: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74  ../*.** Each dat
9ca0: 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62 65  abase file to be
9cb0: 20 61 63 63 65 73 73 65 64 20 62 79 20 74 68 65   accessed by the
9cc0: 20 73 79 73 74 65 6d 20 69 73 20 61 6e 20 69 6e   system is an in
9cd0: 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65  stance.** of the
9ce0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
9cf0: 74 75 72 65 2e 20 20 54 68 65 72 65 20 61 72 65  ture.  There are
9d00: 20 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66   normally two of
9d10: 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72 65   these structure
9d20: 73 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c 69  s.** in the sqli
9d30: 74 65 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e 20  te.aDb[] array. 
9d40: 20 61 44 62 5b 30 5d 20 69 73 20 74 68 65 20 6d   aDb[0] is the m
9d50: 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
9d60: 65 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20  e and.** aDb[1] 
9d70: 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
9d80: 66 69 6c 65 20 75 73 65 64 20 74 6f 20 68 6f 6c  file used to hol
9d90: 64 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  d temporary tabl
9da0: 65 73 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a  es.  Additional.
9db0: 2a 2a 20 64 61 74 61 62 61 73 65 73 20 6d 61 79  ** databases may
9dc0: 20 62 65 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f   be attached..*/
9dd0: 0a 73 74 72 75 63 74 20 44 62 20 7b 0a 20 20 63  .struct Db {.  c
9de0: 68 61 72 20 2a 7a 44 62 53 4e 61 6d 65 3b 20 20  har *zDbSName;  
9df0: 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
9e00: 68 69 73 20 64 61 74 61 62 61 73 65 2e 20 28 73  his database. (s
9e10: 63 68 65 6d 61 20 6e 61 6d 65 2c 20 6e 6f 74 20  chema name, not 
9e20: 66 69 6c 65 6e 61 6d 65 29 20 2a 2f 0a 20 20 42  filename) */.  B
9e30: 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20 20  tree *pBt;      
9e40: 20 20 20 20 2f 2a 20 54 68 65 20 42 2a 54 72 65      /* The B*Tre
9e50: 65 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20  e structure for 
9e60: 74 68 69 73 20 64 61 74 61 62 61 73 65 20 66 69  this database fi
9e70: 6c 65 20 2a 2f 0a 20 20 75 38 20 73 61 66 65 74  le */.  u8 safet
9e80: 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20  y_level;     /* 
9e90: 48 6f 77 20 61 67 67 72 65 73 73 69 76 65 20 61  How aggressive a
9ea0: 74 20 73 79 6e 63 69 6e 67 20 64 61 74 61 20 74  t syncing data t
9eb0: 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 75 38 20 62  o disk */.  u8 b
9ec0: 53 79 6e 63 53 65 74 3b 20 20 20 20 20 20 20 20  SyncSet;        
9ed0: 20 2f 2a 20 54 72 75 65 20 69 66 20 22 50 52 41   /* True if "PRA
9ee0: 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d  GMA synchronous=
9ef0: 4e 22 20 68 61 73 20 62 65 65 6e 20 72 75 6e 20  N" has been run 
9f00: 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
9f10: 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 50 6f 69  hema;     /* Poi
9f20: 6e 74 65 72 20 74 6f 20 64 61 74 61 62 61 73 65  nter to database
9f30: 20 73 63 68 65 6d 61 20 28 70 6f 73 73 69 62 6c   schema (possibl
9f40: 79 20 73 68 61 72 65 64 29 20 2a 2f 0a 7d 3b 0a  y shared) */.};.
9f50: 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
9f60: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
9f70: 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 73 74  ing structure st
9f80: 6f 72 65 73 20 61 20 64 61 74 61 62 61 73 65 20  ores a database 
9f90: 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f  schema..**.** Mo
9fa0: 73 74 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74  st Schema object
9fb0: 73 20 61 72 65 20 61 73 73 6f 63 69 61 74 65 64  s are associated
9fc0: 20 77 69 74 68 20 61 20 42 74 72 65 65 2e 20 20   with a Btree.  
9fd0: 54 68 65 20 65 78 63 65 70 74 69 6f 6e 20 69 73  The exception is
9fe0: 0a 2a 2a 20 74 68 65 20 53 63 68 65 6d 61 20 66  .** the Schema f
9ff0: 6f 72 20 74 68 65 20 54 45 4d 50 20 64 61 74 61  or the TEMP data
a000: 62 61 65 73 20 28 73 71 6c 69 74 65 33 2e 61 44  baes (sqlite3.aD
a010: 62 5b 31 5d 29 20 77 68 69 63 68 20 69 73 20 66  b[1]) which is f
a020: 72 65 65 2d 73 74 61 6e 64 69 6e 67 2e 0a 2a 2a  ree-standing..**
a030: 20 49 6e 20 73 68 61 72 65 64 20 63 61 63 68 65   In shared cache
a040: 20 6d 6f 64 65 2c 20 61 20 73 69 6e 67 6c 65 20   mode, a single 
a050: 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 20 63 61  Schema object ca
a060: 6e 20 62 65 20 73 68 61 72 65 64 20 62 79 20 6d  n be shared by m
a070: 75 6c 74 69 70 6c 65 0a 2a 2a 20 42 74 72 65 65  ultiple.** Btree
a080: 73 20 74 68 61 74 20 72 65 66 65 72 20 74 6f 20  s that refer to 
a090: 74 68 65 20 73 61 6d 65 20 75 6e 64 65 72 6c 79  the same underly
a0a0: 69 6e 67 20 42 74 53 68 61 72 65 64 20 6f 62 6a  ing BtShared obj
a0b0: 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 53 63 68 65 6d  ect..**.** Schem
a0c0: 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 75  a objects are au
a0d0: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 61 6c  tomatically deal
a0e0: 6c 6f 63 61 74 65 64 20 77 68 65 6e 20 74 68 65  located when the
a0f0: 20 6c 61 73 74 20 42 74 72 65 65 20 74 68 61 74   last Btree that
a100: 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 73 20 74  .** references t
a110: 68 65 6d 20 69 73 20 64 65 73 74 72 6f 79 65 64  hem is destroyed
a120: 2e 20 20 20 54 68 65 20 54 45 4d 50 20 53 63 68  .   The TEMP Sch
a130: 65 6d 61 20 69 73 20 6d 61 6e 75 61 6c 6c 79 20  ema is manually 
a140: 66 72 65 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69  freed by.** sqli
a150: 74 65 33 5f 63 6c 6f 73 65 28 29 2e 0a 2a 0a 2a  te3_close()..*.*
a160: 2a 20 41 20 74 68 72 65 61 64 20 6d 75 73 74 20  * A thread must 
a170: 62 65 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74  be holding a mut
a180: 65 78 20 6f 6e 20 74 68 65 20 63 6f 72 72 65 73  ex on the corres
a190: 70 6f 6e 64 69 6e 67 20 42 74 72 65 65 20 69 6e  ponding Btree in
a1a0: 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 61 63 63   order.** to acc
a1b0: 65 73 73 20 53 63 68 65 6d 61 20 63 6f 6e 74 65  ess Schema conte
a1c0: 6e 74 2e 20 20 54 68 69 73 20 69 6d 70 6c 69 65  nt.  This implie
a1d0: 73 20 74 68 61 74 20 74 68 65 20 74 68 72 65 61  s that the threa
a1e0: 64 20 6d 75 73 74 20 61 6c 73 6f 20 62 65 0a 2a  d must also be.*
a1f0: 2a 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65  * holding a mute
a200: 78 20 6f 6e 20 74 68 65 20 73 71 6c 69 74 65 33  x on the sqlite3
a210: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e   connection poin
a220: 74 65 72 20 74 68 61 74 20 6f 77 6e 73 20 74 68  ter that owns th
a230: 65 20 42 74 72 65 65 2e 0a 2a 2a 20 46 6f 72 20  e Btree..** For 
a240: 61 20 54 45 4d 50 20 53 63 68 65 6d 61 2c 20 6f  a TEMP Schema, o
a250: 6e 6c 79 20 74 68 65 20 63 6f 6e 6e 65 63 74 69  nly the connecti
a260: 6f 6e 20 6d 75 74 65 78 20 69 73 20 72 65 71 75  on mutex is requ
a270: 69 72 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ired..*/.struct 
a280: 53 63 68 65 6d 61 20 7b 0a 20 20 69 6e 74 20 73  Schema {.  int s
a290: 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20 20  chema_cookie;   
a2a0: 2f 2a 20 44 61 74 61 62 61 73 65 20 73 63 68 65  /* Database sche
a2b0: 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65  ma version numbe
a2c0: 72 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20  r for this file 
a2d0: 2a 2f 0a 20 20 69 6e 74 20 69 47 65 6e 65 72 61  */.  int iGenera
a2e0: 74 69 6f 6e 3b 20 20 20 20 20 2f 2a 20 47 65 6e  tion;     /* Gen
a2f0: 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2e  eration counter.
a300: 20 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69    Incremented wi
a310: 74 68 20 65 61 63 68 20 63 68 61 6e 67 65 20 2a  th each change *
a320: 2f 0a 20 20 48 61 73 68 20 74 62 6c 48 61 73 68  /.  Hash tblHash
a330: 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  ;        /* All 
a340: 74 61 62 6c 65 73 20 69 6e 64 65 78 65 64 20 62  tables indexed b
a350: 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68  y name */.  Hash
a360: 20 69 64 78 48 61 73 68 3b 20 20 20 20 20 20 20   idxHash;       
a370: 20 2f 2a 20 41 6c 6c 20 28 6e 61 6d 65 64 29 20   /* All (named) 
a380: 69 6e 64 69 63 65 73 20 69 6e 64 65 78 65 64 20  indices indexed 
a390: 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73  by name */.  Has
a3a0: 68 20 74 72 69 67 48 61 73 68 3b 20 20 20 20 20  h trigHash;     
a3b0: 20 20 2f 2a 20 41 6c 6c 20 74 72 69 67 67 65 72    /* All trigger
a3c0: 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d  s indexed by nam
a3d0: 65 20 2a 2f 0a 20 20 48 61 73 68 20 66 6b 65 79  e */.  Hash fkey
a3e0: 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41  Hash;       /* A
a3f0: 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20  ll foreign keys 
a400: 62 79 20 72 65 66 65 72 65 6e 63 65 64 20 74 61  by referenced ta
a410: 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 61  ble name */.  Ta
a420: 62 6c 65 20 2a 70 53 65 71 54 61 62 3b 20 20 20  ble *pSeqTab;   
a430: 20 20 20 2f 2a 20 54 68 65 20 73 71 6c 69 74 65     /* The sqlite
a440: 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65 20  _sequence table 
a450: 75 73 65 64 20 62 79 20 41 55 54 4f 49 4e 43 52  used by AUTOINCR
a460: 45 4d 45 4e 54 20 2a 2f 0a 20 20 75 38 20 66 69  EMENT */.  u8 fi
a470: 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20 20  le_format;      
a480: 2f 2a 20 53 63 68 65 6d 61 20 66 6f 72 6d 61 74  /* Schema format
a490: 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 74 68 69   version for thi
a4a0: 73 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 65  s file */.  u8 e
a4b0: 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nc;             
a4c0: 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e   /* Text encodin
a4d0: 67 20 75 73 65 64 20 62 79 20 74 68 69 73 20 64  g used by this d
a4e0: 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 31 36  atabase */.  u16
a4f0: 20 73 63 68 65 6d 61 46 6c 61 67 73 3b 20 20 20   schemaFlags;   
a500: 20 20 2f 2a 20 46 6c 61 67 73 20 61 73 73 6f 63    /* Flags assoc
a510: 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20  iated with this 
a520: 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20  schema */.  int 
a530: 63 61 63 68 65 5f 73 69 7a 65 3b 20 20 20 20 20  cache_size;     
a540: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61   /* Number of pa
a550: 67 65 73 20 74 6f 20 75 73 65 20 69 6e 20 74 68  ges to use in th
a560: 65 20 63 61 63 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f  e cache */.};../
a570: 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f  *.** These macro
a580: 73 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  s can be used to
a590: 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63   test, set, or c
a5a0: 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74 68 65  lear bits in the
a5b0: 0a 2a 2a 20 44 62 2e 70 53 63 68 65 6d 61 2d 3e  .** Db.pSchema->
a5c0: 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a  flags field..*/.
a5d0: 23 64 65 66 69 6e 65 20 44 62 48 61 73 50 72 6f  #define DbHasPro
a5e0: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20  perty(D,I,P)    
a5f0: 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70   (((D)->aDb[I].p
a600: 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c  Schema->schemaFl
a610: 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23  ags&(P))==(P)).#
a620: 64 65 66 69 6e 65 20 44 62 48 61 73 41 6e 79 50  define DbHasAnyP
a630: 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20  roperty(D,I,P)  
a640: 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53  (((D)->aDb[I].pS
a650: 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61  chema->schemaFla
a660: 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66  gs&(P))!=0).#def
a670: 69 6e 65 20 44 62 53 65 74 50 72 6f 70 65 72 74  ine DbSetPropert
a680: 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28 44 29  y(D,I,P)     (D)
a690: 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61  ->aDb[I].pSchema
a6a0: 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 7c 3d 28  ->schemaFlags|=(
a6b0: 50 29 0a 23 64 65 66 69 6e 65 20 44 62 43 6c 65  P).#define DbCle
a6c0: 61 72 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50  arProperty(D,I,P
a6d0: 29 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e  )   (D)->aDb[I].
a6e0: 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46  pSchema->schemaF
a6f0: 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a  lags&=~(P)../*.*
a700: 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
a710: 20 66 6f 72 20 74 68 65 20 44 42 2e 70 53 63 68   for the DB.pSch
a720: 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64  ema->flags field
a730: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 44 42 5f 53  ..**.** The DB_S
a740: 63 68 65 6d 61 4c 6f 61 64 65 64 20 66 6c 61 67  chemaLoaded flag
a750: 20 69 73 20 73 65 74 20 61 66 74 65 72 20 74 68   is set after th
a760: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
a770: 61 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 72 65  a has been.** re
a780: 61 64 20 69 6e 74 6f 20 69 6e 74 65 72 6e 61 6c  ad into internal
a790: 20 68 61 73 68 20 74 61 62 6c 65 73 2e 0a 2a 2a   hash tables..**
a7a0: 0a 2a 2a 20 44 42 5f 55 6e 72 65 73 65 74 56 69  .** DB_UnresetVi
a7b0: 65 77 73 20 6d 65 61 6e 73 20 74 68 61 74 20 6f  ews means that o
a7c0: 6e 65 20 6f 72 20 6d 6f 72 65 20 76 69 65 77 73  ne or more views
a7d0: 20 68 61 76 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d   have column nam
a7e0: 65 73 20 74 68 61 74 0a 2a 2a 20 68 61 76 65 20  es that.** have 
a7f0: 62 65 65 6e 20 66 69 6c 6c 65 64 20 6f 75 74 2e  been filled out.
a800: 20 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 20    If the schema 
a810: 63 68 61 6e 67 65 73 2c 20 74 68 65 73 65 20 63  changes, these c
a820: 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6d 69 67 68  olumn names migh
a830: 74 0a 2a 2a 20 63 68 61 6e 67 65 73 20 61 6e 64  t.** changes and
a840: 20 73 6f 20 74 68 65 20 76 69 65 77 20 77 69 6c   so the view wil
a850: 6c 20 6e 65 65 64 20 74 6f 20 62 65 20 72 65 73  l need to be res
a860: 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44  et..*/.#define D
a870: 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 20  B_SchemaLoaded  
a880: 20 20 30 78 30 30 30 31 20 20 2f 2a 20 54 68 65    0x0001  /* The
a890: 20 73 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e   schema has been
a8a0: 20 6c 6f 61 64 65 64 20 2a 2f 0a 23 64 65 66 69   loaded */.#defi
a8b0: 6e 65 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65  ne DB_UnresetVie
a8c0: 77 73 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a  ws    0x0002  /*
a8d0: 20 53 6f 6d 65 20 76 69 65 77 73 20 68 61 76 65   Some views have
a8e0: 20 64 65 66 69 6e 65 64 20 63 6f 6c 75 6d 6e 20   defined column 
a8f0: 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  names */.#define
a900: 20 44 42 5f 45 6d 70 74 79 20 20 20 20 20 20 20   DB_Empty       
a910: 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20 54      0x0004  /* T
a920: 68 65 20 66 69 6c 65 20 69 73 20 65 6d 70 74 79  he file is empty
a930: 20 28 6c 65 6e 67 74 68 20 30 20 62 79 74 65 73   (length 0 bytes
a940: 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f  ) */.#define DB_
a950: 52 65 73 65 74 57 61 6e 74 65 64 20 20 20 20 20  ResetWanted     
a960: 30 78 30 30 30 38 20 20 2f 2a 20 52 65 73 65 74  0x0008  /* Reset
a970: 20 74 68 65 20 73 63 68 65 6d 61 20 77 68 65 6e   the schema when
a980: 20 6e 53 63 68 65 6d 61 4c 6f 63 6b 3d 3d 30 20   nSchemaLock==0 
a990: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75  */../*.** The nu
a9a0: 6d 62 65 72 20 6f 66 20 64 69 66 66 65 72 65 6e  mber of differen
a9b0: 74 20 6b 69 6e 64 73 20 6f 66 20 74 68 69 6e 67  t kinds of thing
a9c0: 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 6c 69  s that can be li
a9d0: 6d 69 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 74  mited.** using t
a9e0: 68 65 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74  he sqlite3_limit
a9f0: 28 29 20 69 6e 74 65 72 66 61 63 65 2e 0a 2a 2f  () interface..*/
aa00: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
aa10: 4e 5f 4c 49 4d 49 54 20 28 53 51 4c 49 54 45 5f  N_LIMIT (SQLITE_
aa20: 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52  LIMIT_WORKER_THR
aa30: 45 41 44 53 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c  EADS+1)../*.** L
aa40: 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20  ookaside malloc 
aa50: 69 73 20 61 20 73 65 74 20 6f 66 20 66 69 78 65  is a set of fixe
aa60: 64 2d 73 69 7a 65 20 62 75 66 66 65 72 73 20 74  d-size buffers t
aa70: 68 61 74 20 63 61 6e 20 62 65 20 75 73 65 64 0a  hat can be used.
aa80: 2a 2a 20 74 6f 20 73 61 74 69 73 66 79 20 73 6d  ** to satisfy sm
aa90: 61 6c 6c 20 74 72 61 6e 73 69 65 6e 74 20 6d 65  all transient me
aaa0: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
aab0: 72 65 71 75 65 73 74 73 20 66 6f 72 20 6f 62 6a  requests for obj
aac0: 65 63 74 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74  ects.** associat
aad0: 65 64 20 77 69 74 68 20 61 20 70 61 72 74 69 63  ed with a partic
aae0: 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 63 6f  ular database co
aaf0: 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 75  nnection.  The u
ab00: 73 65 20 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61 73 69  se of.** lookasi
ab10: 64 65 20 6d 61 6c 6c 6f 63 20 70 72 6f 76 69 64  de malloc provid
ab20: 65 73 20 61 20 73 69 67 6e 69 66 69 63 61 6e 74  es a significant
ab30: 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 65 6e 68   performance enh
ab40: 61 6e 63 65 6d 65 6e 74 0a 2a 2a 20 28 61 70 70  ancement.** (app
ab50: 72 6f 78 20 31 30 25 29 20 62 79 20 61 76 6f 69  rox 10%) by avoi
ab60: 64 69 6e 67 20 6e 75 6d 65 72 6f 75 73 20 6d 61  ding numerous ma
ab70: 6c 6c 6f 63 2f 66 72 65 65 20 72 65 71 75 65 73  lloc/free reques
ab80: 74 73 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67  ts while parsing
ab90: 0a 2a 2a 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  .** SQL statemen
aba0: 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f  ts..**.** The Lo
abb0: 6f 6b 61 73 69 64 65 20 73 74 72 75 63 74 75 72  okaside structur
abc0: 65 20 68 6f 6c 64 73 20 63 6f 6e 66 69 67 75 72  e holds configur
abd0: 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f  ation informatio
abe0: 6e 20 61 62 6f 75 74 20 74 68 65 0a 2a 2a 20 6c  n about the.** l
abf0: 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20  ookaside malloc 
ac00: 73 75 62 73 79 73 74 65 6d 2e 20 20 45 61 63 68  subsystem.  Each
ac10: 20 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72   available memor
ac20: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 0a  y allocation in.
ac30: 2a 2a 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65  ** the lookaside
ac40: 20 73 75 62 73 79 73 74 65 6d 20 69 73 20 73 74   subsystem is st
ac50: 6f 72 65 64 20 6f 6e 20 61 20 6c 69 6e 6b 65 64  ored on a linked
ac60: 20 6c 69 73 74 20 6f 66 20 4c 6f 6f 6b 61 73 69   list of Lookasi
ac70: 64 65 53 6c 6f 74 0a 2a 2a 20 6f 62 6a 65 63 74  deSlot.** object
ac80: 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69  s..**.** Lookasi
ac90: 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61  de allocations a
aca0: 72 65 20 6f 6e 6c 79 20 61 6c 6c 6f 77 65 64 20  re only allowed 
acb0: 66 6f 72 20 6f 62 6a 65 63 74 73 20 74 68 61 74  for objects that
acc0: 20 61 72 65 20 61 73 73 6f 63 69 61 74 65 64 0a   are associated.
acd0: 2a 2a 20 77 69 74 68 20 61 20 70 61 72 74 69 63  ** with a partic
ace0: 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 63 6f  ular database co
acf0: 6e 6e 65 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65  nnection.  Hence
ad00: 2c 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61  , schema informa
ad10: 74 69 6f 6e 20 63 61 6e 6e 6f 74 0a 2a 2a 20 62  tion cannot.** b
ad20: 65 20 73 74 6f 72 65 64 20 69 6e 20 6c 6f 6f 6b  e stored in look
ad30: 61 73 69 64 65 20 62 65 63 61 75 73 65 20 69 6e  aside because in
ad40: 20 73 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f   shared cache mo
ad50: 64 65 20 74 68 65 20 73 63 68 65 6d 61 20 69 6e  de the schema in
ad60: 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 69 73 20  formation.** is 
ad70: 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70  shared by multip
ad80: 6c 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  le database conn
ad90: 65 63 74 69 6f 6e 73 2e 20 20 54 68 65 72 65 66  ections.  Theref
ada0: 6f 72 65 2c 20 77 68 69 6c 65 20 70 61 72 73 69  ore, while parsi
adb0: 6e 67 0a 2a 2a 20 73 63 68 65 6d 61 20 69 6e 66  ng.** schema inf
adc0: 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20 4c 6f  ormation, the Lo
add0: 6f 6b 61 73 69 64 65 2e 62 45 6e 61 62 6c 65 64  okaside.bEnabled
ade0: 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 65 64   flag is cleared
adf0: 20 73 6f 20 74 68 61 74 0a 2a 2a 20 6c 6f 6f 6b   so that.** look
ae00: 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e  aside allocation
ae10: 73 20 61 72 65 20 6e 6f 74 20 75 73 65 64 20 74  s are not used t
ae20: 6f 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20  o construct the 
ae30: 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 2e 0a  schema objects..
ae40: 2a 2f 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  */.struct Lookas
ae50: 69 64 65 20 7b 0a 20 20 75 33 32 20 62 44 69 73  ide {.  u32 bDis
ae60: 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
ae70: 2f 2a 20 4f 6e 6c 79 20 6f 70 65 72 61 74 65 20  /* Only operate 
ae80: 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20 77 68  the lookaside wh
ae90: 65 6e 20 7a 65 72 6f 20 2a 2f 0a 20 20 75 31 36  en zero */.  u16
aea0: 20 73 7a 3b 20 20 20 20 20 20 20 20 20 20 20 20   sz;            
aeb0: 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
aec0: 65 61 63 68 20 62 75 66 66 65 72 20 69 6e 20 62  each buffer in b
aed0: 79 74 65 73 20 2a 2f 0a 20 20 75 38 20 62 4d 61  ytes */.  u8 bMa
aee0: 6c 6c 6f 63 65 64 3b 20 20 20 20 20 20 20 20 20  lloced;         
aef0: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70 53 74    /* True if pSt
af00: 61 72 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f  art obtained fro
af10: 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  m sqlite3_malloc
af20: 28 29 20 2a 2f 0a 20 20 75 33 32 20 6e 53 6c 6f  () */.  u32 nSlo
af30: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
af40: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 6f  /* Number of loo
af50: 6b 61 73 69 64 65 20 73 6c 6f 74 73 20 61 6c 6c  kaside slots all
af60: 6f 63 61 74 65 64 20 2a 2f 0a 20 20 75 33 32 20  ocated */.  u32 
af70: 61 6e 53 74 61 74 5b 33 5d 3b 20 20 20 20 20 20  anStat[3];      
af80: 20 20 20 20 2f 2a 20 30 3a 20 68 69 74 73 2e 20      /* 0: hits. 
af90: 20 31 3a 20 73 69 7a 65 20 6d 69 73 73 65 73 2e   1: size misses.
afa0: 20 20 32 3a 20 66 75 6c 6c 20 6d 69 73 73 65 73    2: full misses
afb0: 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53   */.  LookasideS
afc0: 6c 6f 74 20 2a 70 49 6e 69 74 3b 20 20 20 2f 2a  lot *pInit;   /*
afd0: 20 4c 69 73 74 20 6f 66 20 62 75 66 66 65 72 73   List of buffers
afe0: 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20   not previously 
aff0: 75 73 65 64 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73  used */.  Lookas
b000: 69 64 65 53 6c 6f 74 20 2a 70 46 72 65 65 3b 20  ideSlot *pFree; 
b010: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 76 61    /* List of ava
b020: 69 6c 61 62 6c 65 20 62 75 66 66 65 72 73 20 2a  ilable buffers *
b030: 2f 0a 20 20 76 6f 69 64 20 2a 70 53 74 61 72 74  /.  void *pStart
b040: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  ;           /* F
b050: 69 72 73 74 20 62 79 74 65 20 6f 66 20 61 76 61  irst byte of ava
b060: 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 70  ilable memory sp
b070: 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ace */.  void *p
b080: 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  End;            
b090: 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65 20 70   /* First byte p
b0a0: 61 73 74 20 65 6e 64 20 6f 66 20 61 76 61 69 6c  ast end of avail
b0b0: 61 62 6c 65 20 73 70 61 63 65 20 2a 2f 0a 7d 3b  able space */.};
b0c0: 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64  .struct Lookasid
b0d0: 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f 6f 6b 61 73  eSlot {.  Lookas
b0e0: 69 64 65 53 6c 6f 74 20 2a 70 4e 65 78 74 3b 20  ideSlot *pNext; 
b0f0: 20 20 20 2f 2a 20 4e 65 78 74 20 62 75 66 66 65     /* Next buffe
b100: 72 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 66  r in the list of
b110: 20 66 72 65 65 20 62 75 66 66 65 72 73 20 2a 2f   free buffers */
b120: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 68 61 73  .};../*.** A has
b130: 68 20 74 61 62 6c 65 20 66 6f 72 20 62 75 69 6c  h table for buil
b140: 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 20 64 65  t-in function de
b150: 66 69 6e 69 74 69 6f 6e 73 2e 20 20 28 41 70 70  finitions.  (App
b160: 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64  lication-defined
b170: 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 75 73  .** functions us
b180: 65 20 61 20 72 65 67 75 6c 61 72 20 74 61 62 6c  e a regular tabl
b190: 65 20 74 61 62 6c 65 20 66 72 6f 6d 20 68 61 73  e table from has
b1a0: 68 2e 68 2e 29 0a 2a 2a 0a 2a 2a 20 48 61 73 68  h.h.).**.** Hash
b1b0: 20 65 61 63 68 20 46 75 6e 63 44 65 66 20 73 74   each FuncDef st
b1c0: 72 75 63 74 75 72 65 20 69 6e 74 6f 20 6f 6e 65  ructure into one
b1d0: 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66 48   of the FuncDefH
b1e0: 61 73 68 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a  ash.a[] slots..*
b1f0: 2a 20 43 6f 6c 6c 69 73 69 6f 6e 73 20 61 72 65  * Collisions are
b200: 20 6f 6e 20 74 68 65 20 46 75 6e 63 44 65 66 2e   on the FuncDef.
b210: 75 2e 70 48 61 73 68 20 63 68 61 69 6e 2e 0a 2a  u.pHash chain..*
b220: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b230: 5f 46 55 4e 43 5f 48 41 53 48 5f 53 5a 20 32 33  _FUNC_HASH_SZ 23
b240: 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 48  .struct FuncDefH
b250: 61 73 68 20 7b 0a 20 20 46 75 6e 63 44 65 66 20  ash {.  FuncDef 
b260: 2a 61 5b 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48  *a[SQLITE_FUNC_H
b270: 41 53 48 5f 53 5a 5d 3b 20 20 20 20 20 20 20 2f  ASH_SZ];       /
b280: 2a 20 48 61 73 68 20 74 61 62 6c 65 20 66 6f 72  * Hash table for
b290: 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b   functions */.};
b2a0: 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
b2b0: 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54  USER_AUTHENTICAT
b2c0: 49 4f 4e 0a 2f 2a 0a 2a 2a 20 49 6e 66 6f 72 6d  ION./*.** Inform
b2d0: 61 74 69 6f 6e 20 68 65 6c 64 20 69 6e 20 74 68  ation held in th
b2e0: 65 20 22 73 71 6c 69 74 65 33 22 20 64 61 74 61  e "sqlite3" data
b2f0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
b300: 6f 62 6a 65 63 74 20 61 6e 64 20 75 73 65 64 0a  object and used.
b310: 2a 2a 20 74 6f 20 6d 61 6e 61 67 65 20 75 73 65  ** to manage use
b320: 72 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e  r authentication
b330: 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72  ..*/.typedef str
b340: 75 63 74 20 73 71 6c 69 74 65 33 5f 75 73 65 72  uct sqlite3_user
b350: 61 75 74 68 20 73 71 6c 69 74 65 33 5f 75 73 65  auth sqlite3_use
b360: 72 61 75 74 68 3b 0a 73 74 72 75 63 74 20 73 71  rauth;.struct sq
b370: 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 20 7b  lite3_userauth {
b380: 0a 20 20 75 38 20 61 75 74 68 4c 65 76 65 6c 3b  .  u8 authLevel;
b390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b3a0: 20 2f 2a 20 43 75 72 72 65 6e 74 20 61 75 74 68   /* Current auth
b3b0: 65 6e 74 69 63 61 74 69 6f 6e 20 6c 65 76 65 6c  entication level
b3c0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 75 74 68 50   */.  int nAuthP
b3d0: 57 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  W;              
b3e0: 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74      /* Size of t
b3f0: 68 65 20 7a 41 75 74 68 50 57 20 69 6e 20 62 79  he zAuthPW in by
b400: 74 65 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  tes */.  char *z
b410: 41 75 74 68 50 57 3b 20 20 20 20 20 20 20 20 20  AuthPW;         
b420: 20 20 20 20 20 20 20 2f 2a 20 50 61 73 73 77 6f         /* Passwo
b430: 72 64 20 75 73 65 64 20 74 6f 20 61 75 74 68 65  rd used to authe
b440: 6e 74 69 63 61 74 65 20 2a 2f 0a 20 20 63 68 61  nticate */.  cha
b450: 72 20 2a 7a 41 75 74 68 55 73 65 72 3b 20 20 20  r *zAuthUser;   
b460: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73             /* Us
b470: 65 72 20 6e 61 6d 65 20 75 73 65 64 20 74 6f 20  er name used to 
b480: 61 75 74 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a  authenticate */.
b490: 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76  };../* Allowed v
b4a0: 61 6c 75 65 73 20 66 6f 72 20 73 71 6c 69 74 65  alues for sqlite
b4b0: 33 5f 75 73 65 72 61 75 74 68 2e 61 75 74 68 4c  3_userauth.authL
b4c0: 65 76 65 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  evel */.#define 
b4d0: 55 41 55 54 48 5f 55 6e 6b 6e 6f 77 6e 20 20 20  UAUTH_Unknown   
b4e0: 20 20 30 20 20 20 20 20 2f 2a 20 41 75 74 68 65    0     /* Authe
b4f0: 6e 74 69 63 61 74 69 6f 6e 20 6e 6f 74 20 79 65  ntication not ye
b500: 74 20 63 68 65 63 6b 65 64 20 2a 2f 0a 23 64 65  t checked */.#de
b510: 66 69 6e 65 20 55 41 55 54 48 5f 46 61 69 6c 20  fine UAUTH_Fail 
b520: 20 20 20 20 20 20 20 31 20 20 20 20 20 2f 2a 20         1     /* 
b530: 55 73 65 72 20 61 75 74 68 65 6e 74 69 63 61 74  User authenticat
b540: 69 6f 6e 20 66 61 69 6c 65 64 20 2a 2f 0a 23 64  ion failed */.#d
b550: 65 66 69 6e 65 20 55 41 55 54 48 5f 55 73 65 72  efine UAUTH_User
b560: 20 20 20 20 20 20 20 20 32 20 20 20 20 20 2f 2a          2     /*
b570: 20 41 75 74 68 65 6e 74 69 63 61 74 65 64 20 61   Authenticated a
b580: 73 20 61 20 6e 6f 72 6d 61 6c 20 75 73 65 72 20  s a normal user 
b590: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48  */.#define UAUTH
b5a0: 5f 41 64 6d 69 6e 20 20 20 20 20 20 20 33 20 20  _Admin       3  
b5b0: 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61     /* Authentica
b5c0: 74 65 64 20 61 73 20 61 6e 20 61 64 6d 69 6e 69  ted as an admini
b5d0: 73 74 72 61 74 6f 72 20 2a 2f 0a 0a 2f 2a 20 46  strator */../* F
b5e0: 75 6e 63 74 69 6f 6e 73 20 75 73 65 64 20 6f 6e  unctions used on
b5f0: 6c 79 20 62 79 20 75 73 65 72 20 61 75 74 68 6f  ly by user autho
b600: 72 69 7a 61 74 69 6f 6e 20 6c 6f 67 69 63 20 2a  rization logic *
b610: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 73 65  /.int sqlite3Use
b620: 72 41 75 74 68 54 61 62 6c 65 28 63 6f 6e 73 74  rAuthTable(const
b630: 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   char*);.int sql
b640: 69 74 65 33 55 73 65 72 41 75 74 68 43 68 65 63  ite3UserAuthChec
b650: 6b 4c 6f 67 69 6e 28 73 71 6c 69 74 65 33 2a 2c  kLogin(sqlite3*,
b660: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 38 2a 29  const char*,u8*)
b670: 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 73  ;.void sqlite3Us
b680: 65 72 41 75 74 68 49 6e 69 74 28 73 71 6c 69 74  erAuthInit(sqlit
b690: 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e3*);.void sqlit
b6a0: 65 33 43 72 79 70 74 46 75 6e 63 28 73 71 6c 69  e3CryptFunc(sqli
b6b0: 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
b6c0: 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a  ,sqlite3_value**
b6d0: 29 3b 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  );..#endif /* SQ
b6e0: 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e  LITE_USER_AUTHEN
b6f0: 54 49 43 41 54 49 4f 4e 20 2a 2f 0a 0a 2f 2a 0a  TICATION */../*.
b700: 2a 2a 20 74 79 70 65 64 65 66 20 66 6f 72 20 74  ** typedef for t
b710: 68 65 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e  he authorization
b720: 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69   callback functi
b730: 6f 6e 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  on..*/.#ifdef SQ
b740: 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e  LITE_USER_AUTHEN
b750: 54 49 43 41 54 49 4f 4e 0a 20 20 74 79 70 65 64  TICATION.  typed
b760: 65 66 20 69 6e 74 20 28 2a 73 71 6c 69 74 65 33  ef int (*sqlite3
b770: 5f 78 61 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e  _xauth)(void*,in
b780: 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  t,const char*,co
b790: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
b7a0: 63 68 61 72 2a 2c 0a 20 20 20 20 20 20 20 20 20  char*,.         
b7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b7c0: 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
b7d0: 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
b7e0: 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66  .#else.  typedef
b7f0: 20 69 6e 74 20 28 2a 73 71 6c 69 74 65 33 5f 78   int (*sqlite3_x
b800: 61 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  auth)(void*,int,
b810: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
b820: 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
b830: 61 72 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ar*,.           
b840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b850: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 29      const char*)
b860: 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  ;.#endif..#ifnde
b870: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45  f SQLITE_OMIT_DE
b880: 50 52 45 43 41 54 45 44 0a 2f 2a 20 54 68 69 73  PRECATED./* This
b890: 20 69 73 20 61 6e 20 65 78 74 72 61 20 53 51 4c   is an extra SQL
b8a0: 49 54 45 5f 54 52 41 43 45 20 6d 61 63 72 6f 20  ITE_TRACE macro 
b8b0: 74 68 61 74 20 69 6e 64 69 63 61 74 65 73 20 22  that indicates "
b8c0: 6c 65 67 61 63 79 22 20 74 72 61 63 69 6e 67 0a  legacy" tracing.
b8d0: 2a 2a 20 69 6e 20 74 68 65 20 73 74 79 6c 65 20  ** in the style 
b8e0: 6f 66 20 73 71 6c 69 74 65 33 5f 74 72 61 63 65  of sqlite3_trace
b8f0: 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ().*/.#define SQ
b900: 4c 49 54 45 5f 54 52 41 43 45 5f 4c 45 47 41 43  LITE_TRACE_LEGAC
b910: 59 20 20 30 78 38 30 0a 23 65 6c 73 65 0a 23 64  Y  0x80.#else.#d
b920: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 52 41  efine SQLITE_TRA
b930: 43 45 5f 4c 45 47 41 43 59 20 20 30 0a 23 65 6e  CE_LEGACY  0.#en
b940: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
b950: 49 54 5f 44 45 50 52 45 43 41 54 45 44 20 2a 2f  IT_DEPRECATED */
b960: 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61  .../*.** Each da
b970: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
b980: 6e 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  n is an instance
b990: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
b9a0: 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a  g structure..*/.
b9b0: 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 20 7b  struct sqlite3 {
b9c0: 0a 20 20 73 71 6c 69 74 65 33 5f 76 66 73 20 2a  .  sqlite3_vfs *
b9d0: 70 56 66 73 3b 20 20 20 20 20 20 20 20 20 20 20  pVfs;           
b9e0: 20 2f 2a 20 4f 53 20 49 6e 74 65 72 66 61 63 65   /* OS Interface
b9f0: 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 56 64 62   */.  struct Vdb
ba00: 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20  e *pVdbe;       
ba10: 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61      /* List of a
ba20: 63 74 69 76 65 20 76 69 72 74 75 61 6c 20 6d 61  ctive virtual ma
ba30: 63 68 69 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c  chines */.  Coll
ba40: 53 65 71 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20  Seq *pDfltColl; 
ba50: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
ba60: 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69   default collati
ba70: 6e 67 20 73 65 71 75 65 6e 63 65 20 28 42 49 4e  ng sequence (BIN
ba80: 41 52 59 29 20 2a 2f 0a 20 20 73 71 6c 69 74 65  ARY) */.  sqlite
ba90: 33 5f 6d 75 74 65 78 20 2a 6d 75 74 65 78 3b 20  3_mutex *mutex; 
baa0: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65          /* Conne
bab0: 63 74 69 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a 20  ction mutex */. 
bac0: 20 44 62 20 2a 61 44 62 3b 20 20 20 20 20 20 20   Db *aDb;       
bad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
bae0: 2a 20 41 6c 6c 20 62 61 63 6b 65 6e 64 73 20 2a  * All backends *
baf0: 2f 0a 20 20 69 6e 74 20 6e 44 62 3b 20 20 20 20  /.  int nDb;    
bb00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bb10: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
bb20: 61 63 6b 65 6e 64 73 20 63 75 72 72 65 6e 74 6c  ackends currentl
bb30: 79 20 69 6e 20 75 73 65 20 2a 2f 0a 20 20 75 33  y in use */.  u3
bb40: 32 20 6d 44 62 46 6c 61 67 73 3b 20 20 20 20 20  2 mDbFlags;     
bb50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 66              /* f
bb60: 6c 61 67 73 20 72 65 63 6f 72 64 69 6e 67 20 69  lags recording i
bb70: 6e 74 65 72 6e 61 6c 20 73 74 61 74 65 20 2a 2f  nternal state */
bb80: 0a 20 20 75 33 32 20 66 6c 61 67 73 3b 20 20 20  .  u32 flags;   
bb90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bba0: 20 2f 2a 20 66 6c 61 67 73 20 73 65 74 74 61 62   /* flags settab
bbb0: 6c 65 20 62 79 20 70 72 61 67 6d 61 73 2e 20 53  le by pragmas. S
bbc0: 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 36  ee below */.  i6
bbd0: 34 20 6c 61 73 74 52 6f 77 69 64 3b 20 20 20 20  4 lastRowid;    
bbe0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
bbf0: 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20 72 65 63  OWID of most rec
bc00: 65 6e 74 20 69 6e 73 65 72 74 20 28 73 65 65 20  ent insert (see 
bc10: 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69 36 34 20  above) */.  i64 
bc20: 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20  szMmap;         
bc30: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
bc40: 61 75 6c 74 20 6d 6d 61 70 5f 73 69 7a 65 20 73  ault mmap_size s
bc50: 65 74 74 69 6e 67 20 2a 2f 0a 20 20 75 33 32 20  etting */.  u32 
bc60: 6e 53 63 68 65 6d 61 4c 6f 63 6b 3b 20 20 20 20  nSchemaLock;    
bc70: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20            /* Do 
bc80: 6e 6f 74 20 72 65 73 65 74 20 74 68 65 20 73 63  not reset the sc
bc90: 68 65 6d 61 20 77 68 65 6e 20 6e 6f 6e 2d 7a 65  hema when non-ze
bca0: 72 6f 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ro */.  unsigned
bcb0: 20 69 6e 74 20 6f 70 65 6e 46 6c 61 67 73 3b 20   int openFlags; 
bcc0: 20 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 70        /* Flags p
bcd0: 61 73 73 65 64 20 74 6f 20 73 71 6c 69 74 65 33  assed to sqlite3
bce0: 5f 76 66 73 2e 78 4f 70 65 6e 28 29 20 2a 2f 0a  _vfs.xOpen() */.
bcf0: 20 20 69 6e 74 20 65 72 72 43 6f 64 65 3b 20 20    int errCode;  
bd00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bd10: 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65  /* Most recent e
bd20: 72 72 6f 72 20 63 6f 64 65 20 28 53 51 4c 49 54  rror code (SQLIT
bd30: 45 5f 2a 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72  E_*) */.  int er
bd40: 72 4d 61 73 6b 3b 20 20 20 20 20 20 20 20 20 20  rMask;          
bd50: 20 20 20 20 20 20 20 20 2f 2a 20 26 20 72 65 73          /* & res
bd60: 75 6c 74 20 63 6f 64 65 73 20 77 69 74 68 20 74  ult codes with t
bd70: 68 69 73 20 62 65 66 6f 72 65 20 72 65 74 75 72  his before retur
bd80: 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 53  ning */.  int iS
bd90: 79 73 45 72 72 6e 6f 3b 20 20 20 20 20 20 20 20  ysErrno;        
bda0: 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6e 6f          /* Errno
bdb0: 20 76 61 6c 75 65 20 66 72 6f 6d 20 6c 61 73 74   value from last
bdc0: 20 73 79 73 74 65 6d 20 65 72 72 6f 72 20 2a 2f   system error */
bdd0: 0a 20 20 75 31 36 20 64 62 4f 70 74 46 6c 61 67  .  u16 dbOptFlag
bde0: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
bdf0: 20 2f 2a 20 46 6c 61 67 73 20 74 6f 20 65 6e 61   /* Flags to ena
be00: 62 6c 65 2f 64 69 73 61 62 6c 65 20 6f 70 74 69  ble/disable opti
be10: 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75  mizations */.  u
be20: 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20  8 enc;          
be30: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
be40: 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f  Text encoding */
be50: 0a 20 20 75 38 20 61 75 74 6f 43 6f 6d 6d 69 74  .  u8 autoCommit
be60: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
be70: 20 2f 2a 20 54 68 65 20 61 75 74 6f 2d 63 6f 6d   /* The auto-com
be80: 6d 69 74 20 66 6c 61 67 2e 20 2a 2f 0a 20 20 75  mit flag. */.  u
be90: 38 20 74 65 6d 70 5f 73 74 6f 72 65 3b 20 20 20  8 temp_store;   
bea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
beb0: 31 3a 20 66 69 6c 65 20 32 3a 20 6d 65 6d 6f 72  1: file 2: memor
bec0: 79 20 30 3a 20 64 65 66 61 75 6c 74 20 2a 2f 0a  y 0: default */.
bed0: 20 20 75 38 20 6d 61 6c 6c 6f 63 46 61 69 6c 65    u8 mallocFaile
bee0: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
bef0: 2f 2a 20 54 72 75 65 20 69 66 20 77 65 20 68 61  /* True if we ha
bf00: 76 65 20 73 65 65 6e 20 61 20 6d 61 6c 6c 6f 63  ve seen a malloc
bf10: 20 66 61 69 6c 75 72 65 20 2a 2f 0a 20 20 75 38   failure */.  u8
bf20: 20 62 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 3b 20   bBenignMalloc; 
bf30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
bf40: 6f 20 6e 6f 74 20 72 65 71 75 69 72 65 20 4f 4f  o not require OO
bf50: 4d 73 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20  Ms if true */.  
bf60: 75 38 20 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b  u8 dfltLockMode;
bf70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
bf80: 20 44 65 66 61 75 6c 74 20 6c 6f 63 6b 69 6e 67   Default locking
bf90: 2d 6d 6f 64 65 20 66 6f 72 20 61 74 74 61 63 68  -mode for attach
bfa0: 65 64 20 64 62 73 20 2a 2f 0a 20 20 73 69 67 6e  ed dbs */.  sign
bfb0: 65 64 20 63 68 61 72 20 6e 65 78 74 41 75 74 6f  ed char nextAuto
bfc0: 76 61 63 3b 20 20 20 20 20 20 2f 2a 20 41 75 74  vac;      /* Aut
bfd0: 6f 76 61 63 20 73 65 74 74 69 6e 67 20 61 66 74  ovac setting aft
bfe0: 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e 3d 30  er VACUUM if >=0
bff0: 20 2a 2f 0a 20 20 75 38 20 73 75 70 70 72 65 73   */.  u8 suppres
c000: 73 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20  sErr;           
c010: 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 69 73      /* Do not is
c020: 73 75 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67  sue error messag
c030: 65 73 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20  es if true */.  
c040: 75 38 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63  u8 vtabOnConflic
c050: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  t;            /*
c060: 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e   Value to return
c070: 20 66 6f 72 20 73 33 5f 76 74 61 62 5f 6f 6e 5f   for s3_vtab_on_
c080: 63 6f 6e 66 6c 69 63 74 28 29 20 2a 2f 0a 20 20  conflict() */.  
c090: 75 38 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  u8 isTransaction
c0a0: 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 2f 2a  Savepoint;    /*
c0b0: 20 54 72 75 65 20 69 66 20 74 68 65 20 6f 75 74   True if the out
c0c0: 65 72 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e 74  ermost savepoint
c0d0: 20 69 73 20 61 20 54 53 20 2a 2f 0a 20 20 75 38   is a TS */.  u8
c0e0: 20 6d 54 72 61 63 65 3b 20 20 20 20 20 20 20 20   mTrace;        
c0f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 7a              /* z
c100: 65 72 6f 20 6f 72 20 6d 6f 72 65 20 53 51 4c 49  ero or more SQLI
c110: 54 45 5f 54 52 41 43 45 20 66 6c 61 67 73 20 2a  TE_TRACE flags *
c120: 2f 0a 20 20 75 38 20 6e 6f 53 68 61 72 65 64 43  /.  u8 noSharedC
c130: 61 63 68 65 3b 20 20 20 20 20 20 20 20 20 20 20  ache;           
c140: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 6e 6f 20    /* True if no 
c150: 73 68 61 72 65 64 2d 63 61 63 68 65 20 62 61 63  shared-cache bac
c160: 6b 65 6e 64 73 20 2a 2f 0a 20 20 75 38 20 6e 53  kends */.  u8 nS
c170: 71 6c 45 78 65 63 3b 20 20 20 20 20 20 20 20 20  qlExec;         
c180: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
c190: 65 72 20 6f 66 20 70 65 6e 64 69 6e 67 20 4f 50  er of pending OP
c1a0: 5f 53 71 6c 45 78 65 63 20 6f 70 63 6f 64 65 73  _SqlExec opcodes
c1b0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 78 74 50 61   */.  int nextPa
c1c0: 67 65 73 69 7a 65 3b 20 20 20 20 20 20 20 20 20  gesize;         
c1d0: 20 20 20 20 2f 2a 20 50 61 67 65 73 69 7a 65 20      /* Pagesize 
c1e0: 61 66 74 65 72 20 56 41 43 55 55 4d 20 69 66 20  after VACUUM if 
c1f0: 3e 30 20 2a 2f 0a 20 20 75 33 32 20 6d 61 67 69  >0 */.  u32 magi
c200: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
c210: 20 20 20 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e        /* Magic n
c220: 75 6d 62 65 72 20 66 6f 72 20 64 65 74 65 63 74  umber for detect
c230: 20 6c 69 62 72 61 72 79 20 6d 69 73 75 73 65 20   library misuse 
c240: 2a 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65  */.  int nChange
c250: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
c260: 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75     /* Value retu
c270: 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  rned by sqlite3_
c280: 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69  changes() */.  i
c290: 6e 74 20 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b  nt nTotalChange;
c2a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c2b0: 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62  Value returned b
c2c0: 79 20 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f  y sqlite3_total_
c2d0: 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69  changes() */.  i
c2e0: 6e 74 20 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  nt aLimit[SQLITE
c2f0: 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a 20  _N_LIMIT];   /* 
c300: 4c 69 6d 69 74 73 20 2a 2f 0a 20 20 69 6e 74 20  Limits */.  int 
c310: 6e 4d 61 78 53 6f 72 74 65 72 4d 6d 61 70 3b 20  nMaxSorterMmap; 
c320: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78            /* Max
c330: 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20 72 65 67  imum size of reg
c340: 69 6f 6e 73 20 6d 61 70 70 65 64 20 62 79 20 73  ions mapped by s
c350: 6f 72 74 65 72 20 2a 2f 0a 20 20 73 74 72 75 63  orter */.  struc
c360: 74 20 73 71 6c 69 74 65 33 49 6e 69 74 49 6e 66  t sqlite3InitInf
c370: 6f 20 7b 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f  o {      /* Info
c380: 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 64 75 72  rmation used dur
c390: 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ing initializati
c3a0: 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 65  on */.    int ne
c3b0: 77 54 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20  wTnum;          
c3c0: 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61 67        /* Rootpag
c3d0: 65 20 6f 66 20 74 61 62 6c 65 20 62 65 69 6e 67  e of table being
c3e0: 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
c3f0: 20 20 20 20 75 38 20 69 44 62 3b 20 20 20 20 20      u8 iDb;     
c400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c410: 2f 2a 20 57 68 69 63 68 20 64 62 20 66 69 6c 65  /* Which db file
c420: 20 69 73 20 62 65 69 6e 67 20 69 6e 69 74 69 61   is being initia
c430: 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20  lized */.    u8 
c440: 62 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20  busy;           
c450: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 52 55 45           /* TRUE
c460: 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e   if currently in
c470: 69 74 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20  itializing */.  
c480: 20 20 75 6e 73 69 67 6e 65 64 20 6f 72 70 68 61    unsigned orpha
c490: 6e 54 72 69 67 67 65 72 20 3a 20 31 3b 20 2f 2a  nTrigger : 1; /*
c4a0: 20 4c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20   Last statement 
c4b0: 69 73 20 6f 72 70 68 61 6e 65 64 20 54 45 4d 50  is orphaned TEMP
c4c0: 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 20 20   trigger */.    
c4d0: 75 6e 73 69 67 6e 65 64 20 69 6d 70 6f 73 74 65  unsigned imposte
c4e0: 72 54 61 62 6c 65 20 3a 20 31 3b 20 2f 2a 20 42  rTable : 1; /* B
c4f0: 75 69 6c 64 69 6e 67 20 61 6e 20 69 6d 70 6f 73  uilding an impos
c500: 74 65 72 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  ter table */.   
c510: 20 75 6e 73 69 67 6e 65 64 20 72 65 6f 70 65 6e   unsigned reopen
c520: 4d 65 6d 64 62 20 3a 20 31 3b 20 20 20 2f 2a 20  Memdb : 1;   /* 
c530: 41 54 54 41 43 48 20 69 73 20 72 65 61 6c 6c 79  ATTACH is really
c540: 20 61 20 72 65 6f 70 65 6e 20 75 73 69 6e 67 20   a reopen using 
c550: 4d 65 6d 44 42 20 2a 2f 0a 20 20 7d 20 69 6e 69  MemDB */.  } ini
c560: 74 3b 0a 20 20 69 6e 74 20 6e 56 64 62 65 41 63  t;.  int nVdbeAc
c570: 74 69 76 65 3b 20 20 20 20 20 20 20 20 20 20 20  tive;           
c580: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
c590: 56 44 42 45 73 20 63 75 72 72 65 6e 74 6c 79 20  VDBEs currently 
c5a0: 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  running */.  int
c5b0: 20 6e 56 64 62 65 52 65 61 64 3b 20 20 20 20 20   nVdbeRead;     
c5c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
c5d0: 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 56  mber of active V
c5e0: 44 42 45 73 20 74 68 61 74 20 72 65 61 64 20 6f  DBEs that read o
c5f0: 72 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74  r write */.  int
c600: 20 6e 56 64 62 65 57 72 69 74 65 3b 20 20 20 20   nVdbeWrite;    
c610: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
c620: 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 56  mber of active V
c630: 44 42 45 73 20 74 68 61 74 20 72 65 61 64 20 61  DBEs that read a
c640: 6e 64 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e  nd write */.  in
c650: 74 20 6e 56 64 62 65 45 78 65 63 3b 20 20 20 20  t nVdbeExec;    
c660: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
c670: 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20  umber of nested 
c680: 63 61 6c 6c 73 20 74 6f 20 56 64 62 65 45 78 65  calls to VdbeExe
c690: 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 44  c() */.  int nVD
c6a0: 65 73 74 72 6f 79 3b 20 20 20 20 20 20 20 20 20  estroy;         
c6b0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
c6c0: 20 6f 66 20 61 63 74 69 76 65 20 4f 50 5f 56 44   of active OP_VD
c6d0: 65 73 74 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e  estroy operation
c6e0: 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 78 74 65  s */.  int nExte
c6f0: 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20  nsion;          
c700: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
c710: 66 20 6c 6f 61 64 65 64 20 65 78 74 65 6e 73 69  f loaded extensi
c720: 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 2a  ons */.  void **
c730: 61 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20  aExtension;     
c740: 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20         /* Array 
c750: 6f 66 20 73 68 61 72 65 64 20 6c 69 62 72 61 72  of shared librar
c760: 79 20 68 61 6e 64 6c 65 73 20 2a 2f 0a 20 20 69  y handles */.  i
c770: 6e 74 20 28 2a 78 54 72 61 63 65 29 28 75 33 32  nt (*xTrace)(u32
c780: 2c 76 6f 69 64 2a 2c 76 6f 69 64 2a 2c 76 6f 69  ,void*,void*,voi
c790: 64 2a 29 3b 20 20 20 20 20 2f 2a 20 54 72 61 63  d*);     /* Trac
c7a0: 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  e function */.  
c7b0: 76 6f 69 64 20 2a 70 54 72 61 63 65 41 72 67 3b  void *pTraceArg;
c7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c7d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
c7e0: 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 74 72 61  ument to the tra
c7f0: 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  ce function */. 
c800: 20 76 6f 69 64 20 28 2a 78 50 72 6f 66 69 6c 65   void (*xProfile
c810: 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68  )(void*,const ch
c820: 61 72 2a 2c 75 36 34 29 3b 20 20 2f 2a 20 50 72  ar*,u64);  /* Pr
c830: 6f 66 69 6c 69 6e 67 20 66 75 6e 63 74 69 6f 6e  ofiling function
c840: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f   */.  void *pPro
c850: 66 69 6c 65 41 72 67 3b 20 20 20 20 20 20 20 20  fileArg;        
c860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c870: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 70  /* Argument to p
c880: 72 6f 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e 20  rofile function 
c890: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6d 6d  */.  void *pComm
c8a0: 69 74 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  itArg;          
c8b0: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
c8c0: 6e 74 20 74 6f 20 78 43 6f 6d 6d 69 74 43 61 6c  nt to xCommitCal
c8d0: 6c 62 61 63 6b 28 29 20 2a 2f 0a 20 20 69 6e 74  lback() */.  int
c8e0: 20 28 2a 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61   (*xCommitCallba
c8f0: 63 6b 29 28 76 6f 69 64 2a 29 3b 20 20 20 20 2f  ck)(void*);    /
c900: 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65 76 65  * Invoked at eve
c910: 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20  ry commit. */.  
c920: 76 6f 69 64 20 2a 70 52 6f 6c 6c 62 61 63 6b 41  void *pRollbackA
c930: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
c940: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
c950: 20 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61   xRollbackCallba
c960: 63 6b 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28  ck() */.  void (
c970: 2a 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61  *xRollbackCallba
c980: 63 6b 29 28 76 6f 69 64 2a 29 3b 20 2f 2a 20 49  ck)(void*); /* I
c990: 6e 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20  nvoked at every 
c9a0: 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69  commit. */.  voi
c9b0: 64 20 2a 70 55 70 64 61 74 65 41 72 67 3b 0a 20  d *pUpdateArg;. 
c9c0: 20 76 6f 69 64 20 28 2a 78 55 70 64 61 74 65 43   void (*xUpdateC
c9d0: 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69  allback)(void*,i
c9e0: 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nt, const char*,
c9f0: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 73 71 6c 69  const char*,sqli
ca00: 74 65 5f 69 6e 74 36 34 29 3b 0a 23 69 66 64 65  te_int64);.#ifde
ca10: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
ca20: 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20  PREUPDATE_HOOK. 
ca30: 20 76 6f 69 64 20 2a 70 50 72 65 55 70 64 61 74   void *pPreUpdat
ca40: 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 2f  eArg;          /
ca50: 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74  * First argument
ca60: 20 74 6f 20 78 50 72 65 55 70 64 61 74 65 43 61   to xPreUpdateCa
ca70: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64  llback */.  void
ca80: 20 28 2a 78 50 72 65 55 70 64 61 74 65 43 61 6c   (*xPreUpdateCal
ca90: 6c 62 61 63 6b 29 28 20 20 20 2f 2a 20 52 65 67  lback)(   /* Reg
caa0: 69 73 74 65 72 65 64 20 75 73 69 6e 67 20 73 71  istered using sq
cab0: 6c 69 74 65 33 5f 70 72 65 75 70 64 61 74 65 5f  lite3_preupdate_
cac0: 68 6f 6f 6b 28 29 20 2a 2f 0a 20 20 20 20 76 6f  hook() */.    vo
cad0: 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74  id*,sqlite3*,int
cae0: 2c 63 68 61 72 20 63 6f 6e 73 74 2a 2c 63 68 61  ,char const*,cha
caf0: 72 20 63 6f 6e 73 74 2a 2c 73 71 6c 69 74 65 33  r const*,sqlite3
cb00: 5f 69 6e 74 36 34 2c 73 71 6c 69 74 65 33 5f 69  _int64,sqlite3_i
cb10: 6e 74 36 34 0a 20 20 29 3b 0a 20 20 50 72 65 55  nt64.  );.  PreU
cb20: 70 64 61 74 65 20 2a 70 50 72 65 55 70 64 61 74  pdate *pPreUpdat
cb30: 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e  e;        /* Con
cb40: 74 65 78 74 20 66 6f 72 20 61 63 74 69 76 65 20  text for active 
cb50: 70 72 65 2d 75 70 64 61 74 65 20 63 61 6c 6c 62  pre-update callb
cb60: 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a  ack */.#endif /*
cb70: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50   SQLITE_ENABLE_P
cb80: 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 20 2a 2f  REUPDATE_HOOK */
cb90: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
cba0: 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 28  OMIT_WAL.  int (
cbb0: 2a 78 57 61 6c 43 61 6c 6c 62 61 63 6b 29 28 76  *xWalCallback)(v
cbc0: 6f 69 64 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a  oid *, sqlite3 *
cbd0: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
cbe0: 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 57  int);.  void *pW
cbf0: 61 6c 41 72 67 3b 0a 23 65 6e 64 69 66 0a 20 20  alArg;.#endif.  
cc00: 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65  void(*xCollNeede
cc10: 64 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33  d)(void*,sqlite3
cc20: 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63  *,int eTextRep,c
cc30: 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76  onst char*);.  v
cc40: 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64  oid(*xCollNeeded
cc50: 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65  16)(void*,sqlite
cc60: 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c  3*,int eTextRep,
cc70: 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20  const void*);.  
cc80: 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65  void *pCollNeede
cc90: 64 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f  dArg;.  sqlite3_
cca0: 76 61 6c 75 65 20 2a 70 45 72 72 3b 20 20 20 20  value *pErr;    
ccb0: 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65        /* Most re
ccc0: 63 65 6e 74 20 65 72 72 6f 72 20 6d 65 73 73 61  cent error messa
ccd0: 67 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a  ge */.  union {.
cce0: 20 20 20 20 76 6f 6c 61 74 69 6c 65 20 69 6e 74      volatile int
ccf0: 20 69 73 49 6e 74 65 72 72 75 70 74 65 64 3b 20   isInterrupted; 
cd00: 2f 2a 20 54 72 75 65 20 69 66 20 73 71 6c 69 74  /* True if sqlit
cd10: 65 33 5f 69 6e 74 65 72 72 75 70 74 20 68 61 73  e3_interrupt has
cd20: 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a   been called */.
cd30: 20 20 20 20 64 6f 75 62 6c 65 20 6e 6f 74 55 73      double notUs
cd40: 65 64 31 3b 20 20 20 20 20 20 20 20 20 20 20 20  ed1;            
cd50: 2f 2a 20 53 70 61 63 65 72 20 2a 2f 0a 20 20 7d  /* Spacer */.  }
cd60: 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65   u1;.  Lookaside
cd70: 20 6c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20   lookaside;     
cd80: 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69 64       /* Lookasid
cd90: 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69 67 75  e malloc configu
cda0: 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65  ration */.#ifnde
cdb0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
cdc0: 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 73 71  THORIZATION.  sq
cdd0: 6c 69 74 65 33 5f 78 61 75 74 68 20 78 41 75 74  lite3_xauth xAut
cde0: 68 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41  h;          /* A
cdf0: 63 63 65 73 73 20 61 75 74 68 6f 72 69 7a 61 74  ccess authorizat
ce00: 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ion function */.
ce10: 20 20 76 6f 69 64 20 2a 70 41 75 74 68 41 72 67    void *pAuthArg
ce20: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
ce30: 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20  /* 1st argument 
ce40: 74 6f 20 74 68 65 20 61 63 63 65 73 73 20 61 75  to the access au
ce50: 74 68 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  th function */.#
ce60: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
ce70: 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45  LITE_OMIT_PROGRE
ce80: 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e  SS_CALLBACK.  in
ce90: 74 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76  t (*xProgress)(v
cea0: 6f 69 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54  oid *);     /* T
ceb0: 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  he progress call
cec0: 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  back */.  void *
ced0: 70 50 72 6f 67 72 65 73 73 41 72 67 3b 20 20 20  pProgressArg;   
cee0: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
cef0: 65 6e 74 20 74 6f 20 74 68 65 20 70 72 6f 67 72  ent to the progr
cf00: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  ess callback */.
cf10: 20 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67    unsigned nProg
cf20: 72 65 73 73 4f 70 73 3b 20 20 20 20 20 20 20 20  ressOps;        
cf30: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63  /* Number of opc
cf40: 6f 64 65 73 20 66 6f 72 20 70 72 6f 67 72 65 73  odes for progres
cf50: 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65  s callback */.#e
cf60: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
cf70: 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
cf80: 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72  TABLE.  int nVTr
cf90: 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ans;            
cfa0: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74        /* Allocat
cfb0: 65 64 20 73 69 7a 65 20 6f 66 20 61 56 54 72 61  ed size of aVTra
cfc0: 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f  ns */.  Hash aMo
cfd0: 64 75 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  dule;           
cfe0: 20 20 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74        /* populat
cff0: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 72  ed by sqlite3_cr
d000: 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f  eate_module() */
d010: 0a 20 20 56 74 61 62 43 74 78 20 2a 70 56 74 61  .  VtabCtx *pVta
d020: 62 43 74 78 3b 20 20 20 20 20 20 20 20 20 20 20  bCtx;           
d030: 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20   /* Context for 
d040: 61 63 74 69 76 65 20 76 74 61 62 20 63 6f 6e 6e  active vtab conn
d050: 65 63 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20  ect/create */.  
d060: 56 54 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73  VTable **aVTrans
d070: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
d080: 20 56 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20   Virtual tables 
d090: 77 69 74 68 20 6f 70 65 6e 20 74 72 61 6e 73 61  with open transa
d0a0: 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62  ctions */.  VTab
d0b0: 6c 65 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b  le *pDisconnect;
d0c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 69 73            /* Dis
d0d0: 63 6f 6e 6e 65 63 74 20 74 68 65 73 65 20 69 6e  connect these in
d0e0: 20 6e 65 78 74 20 73 71 6c 69 74 65 33 5f 70 72   next sqlite3_pr
d0f0: 65 70 61 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69  epare() */.#endi
d100: 66 0a 20 20 48 61 73 68 20 61 46 75 6e 63 3b 20  f.  Hash aFunc; 
d110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d120: 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20    /* Hash table 
d130: 6f 66 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75  of connection fu
d140: 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73  nctions */.  Has
d150: 68 20 61 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20  h aCollSeq;     
d160: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
d170: 6c 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  l collating sequ
d180: 65 6e 63 65 73 20 2a 2f 0a 20 20 42 75 73 79 48  ences */.  BusyH
d190: 61 6e 64 6c 65 72 20 62 75 73 79 48 61 6e 64 6c  andler busyHandl
d1a0: 65 72 3b 20 20 20 20 20 20 2f 2a 20 42 75 73 79  er;      /* Busy
d1b0: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44   callback */.  D
d1c0: 62 20 61 44 62 53 74 61 74 69 63 5b 32 5d 3b 20  b aDbStatic[2]; 
d1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d1e0: 53 74 61 74 69 63 20 73 70 61 63 65 20 66 6f 72  Static space for
d1f0: 20 74 68 65 20 32 20 64 65 66 61 75 6c 74 20 62   the 2 default b
d200: 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76  ackends */.  Sav
d210: 65 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69  epoint *pSavepoi
d220: 6e 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69  nt;        /* Li
d230: 73 74 20 6f 66 20 61 63 74 69 76 65 20 73 61 76  st of active sav
d240: 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74  epoints */.  int
d250: 20 62 75 73 79 54 69 6d 65 6f 75 74 3b 20 20 20   busyTimeout;   
d260: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 75             /* Bu
d270: 73 79 20 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f  sy handler timeo
d280: 75 74 2c 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20  ut, in msec */. 
d290: 20 69 6e 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b   int nSavepoint;
d2a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d2b0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d  * Number of non-
d2c0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65  transaction save
d2d0: 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20  points */.  int 
d2e0: 6e 53 74 61 74 65 6d 65 6e 74 3b 20 20 20 20 20  nStatement;     
d2f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
d300: 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 73 74  ber of nested st
d310: 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74  atement-transact
d320: 69 6f 6e 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e  ions  */.  i64 n
d330: 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20  DeferredCons;   
d340: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20           /* Net 
d350: 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61  deferred constra
d360: 69 6e 74 73 20 74 68 69 73 20 74 72 61 6e 73 61  ints this transa
d370: 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20  ction. */.  i64 
d380: 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
d390: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74  ;         /* Net
d3a0: 20 64 65 66 65 72 72 65 64 20 69 6d 6d 65 64 69   deferred immedi
d3b0: 61 74 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  ate constraints 
d3c0: 2a 2f 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74 65  */.  int *pnByte
d3d0: 73 46 72 65 65 64 3b 20 20 20 20 20 20 20 20 20  sFreed;         
d3e0: 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c     /* If not NUL
d3f0: 4c 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 69  L, increment thi
d400: 73 20 69 6e 20 44 62 46 72 65 65 28 29 20 2a 2f  s in DbFree() */
d410: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
d420: 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54  NABLE_UNLOCK_NOT
d430: 49 46 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c  IFY.  /* The fol
d440: 6c 6f 77 69 6e 67 20 76 61 72 69 61 62 6c 65 73  lowing variables
d450: 20 61 72 65 20 61 6c 6c 20 70 72 6f 74 65 63 74   are all protect
d460: 65 64 20 62 79 20 74 68 65 20 53 54 41 54 49 43  ed by the STATIC
d470: 5f 4d 41 53 54 45 52 0a 20 20 2a 2a 20 6d 75 74  _MASTER.  ** mut
d480: 65 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69 74  ex, not by sqlit
d490: 65 33 2e 6d 75 74 65 78 2e 20 54 68 65 79 20 61  e3.mutex. They a
d4a0: 72 65 20 75 73 65 64 20 62 79 20 63 6f 64 65 20  re used by code 
d4b0: 69 6e 20 6e 6f 74 69 66 79 2e 63 2e 0a 20 20 2a  in notify.c..  *
d4c0: 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 55  *.  ** When X.pU
d4d0: 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d  nlockConnection=
d4e0: 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74  =Y, that means t
d4f0: 68 61 74 20 58 20 69 73 20 77 61 69 74 69 6e 67  hat X is waiting
d500: 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a 2a 20 75   for Y to.  ** u
d510: 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74 20 69 74  nlock so that it
d520: 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 0a 20 20   can proceed..  
d530: 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70  **.  ** When X.p
d540: 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69  BlockingConnecti
d550: 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e  on==Y, that mean
d560: 73 20 74 68 61 74 20 73 6f 6d 65 74 68 69 6e 67  s that something
d570: 20 74 68 61 74 20 58 20 74 72 69 65 64 0a 20 20   that X tried.  
d580: 2a 2a 20 74 72 69 65 64 20 74 6f 20 64 6f 20 72  ** tried to do r
d590: 65 63 65 6e 74 6c 79 20 66 61 69 6c 65 64 20 77  ecently failed w
d5a0: 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 4c 4f  ith an SQLITE_LO
d5b0: 43 4b 45 44 20 65 72 72 6f 72 20 64 75 65 20 74  CKED error due t
d5c0: 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68 65 6c  o locks.  ** hel
d5d0: 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a 20 20 73  d by Y..  */.  s
d5e0: 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63 6b 69 6e  qlite3 *pBlockin
d5f0: 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20  gConnection; /* 
d600: 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74 20  Connection that 
d610: 63 61 75 73 65 64 20 53 51 4c 49 54 45 5f 4c 4f  caused SQLITE_LO
d620: 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c 69 74 65  CKED */.  sqlite
d630: 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63  3 *pUnlockConnec
d640: 74 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20  tion;           
d650: 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f  /* Connection to
d660: 20 77 61 74 63 68 20 66 6f 72 20 75 6e 6c 6f 63   watch for unloc
d670: 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 6e  k */.  void *pUn
d680: 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20  lockArg;        
d690: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d6a0: 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 55 6e 6c  Argument to xUnl
d6b0: 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20 20 76  ockNotify */.  v
d6c0: 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74  oid (*xUnlockNot
d6d0: 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c 20 69 6e  ify)(void **, in
d6e0: 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e  t);  /* Unlock n
d6f0: 6f 74 69 66 79 20 63 61 6c 6c 62 61 63 6b 20 2a  otify callback *
d700: 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 4e 65  /.  sqlite3 *pNe
d710: 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20 20 20 20  xtBlocked;      
d720: 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 73    /* Next in lis
d730: 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b 65 64  t of all blocked
d740: 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a   connections */.
d750: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
d760: 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e  LITE_USER_AUTHEN
d770: 54 49 43 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74  TICATION.  sqlit
d780: 65 33 5f 75 73 65 72 61 75 74 68 20 61 75 74 68  e3_userauth auth
d790: 3b 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 72  ;        /* User
d7a0: 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20   authentication 
d7b0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 23  information */.#
d7c0: 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  endif.};../*.** 
d7d0: 41 20 6d 61 63 72 6f 20 74 6f 20 64 69 73 63 6f  A macro to disco
d7e0: 76 65 72 20 74 68 65 20 65 6e 63 6f 64 69 6e 67  ver the encoding
d7f0: 20 6f 66 20 61 20 64 61 74 61 62 61 73 65 2e 0a   of a database..
d800: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48 45 4d  */.#define SCHEM
d810: 41 5f 45 4e 43 28 64 62 29 20 28 28 64 62 29 2d  A_ENC(db) ((db)-
d820: 3e 61 44 62 5b 30 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[0].pSchema-
d830: 3e 65 6e 63 29 0a 23 64 65 66 69 6e 65 20 45 4e  >enc).#define EN
d840: 43 28 64 62 29 20 20 20 20 20 20 20 20 28 28 64  C(db)        ((d
d850: 62 29 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20  b)->enc)../*.** 
d860: 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20  Possible values 
d870: 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33 2e  for the sqlite3.
d880: 66 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c  flags..**.** Val
d890: 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28  ue constraints (
d8a0: 65 6e 66 6f 72 63 65 64 20 76 69 61 20 61 73 73  enforced via ass
d8b0: 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20 20  ert()):.**      
d8c0: 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63  SQLITE_FullFSync
d8d0: 20 20 20 20 20 3d 3d 20 50 41 47 45 52 5f 46 55       == PAGER_FU
d8e0: 4c 4c 46 53 59 4e 43 0a 2a 2a 20 20 20 20 20 20  LLFSYNC.**      
d8f0: 53 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46  SQLITE_CkptFullF
d900: 53 79 6e 63 20 3d 3d 20 50 41 47 45 52 5f 43 4b  Sync == PAGER_CK
d910: 50 54 5f 46 55 4c 4c 46 53 59 4e 43 0a 2a 2a 20  PT_FULLFSYNC.** 
d920: 20 20 20 20 20 53 51 4c 49 54 45 5f 43 61 63 68       SQLITE_Cach
d930: 65 53 70 69 6c 6c 20 20 20 20 3d 3d 20 50 41 47  eSpill    == PAG
d940: 45 52 5f 43 41 43 48 45 5f 53 50 49 4c 4c 0a 2a  ER_CACHE_SPILL.*
d950: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d960: 5f 57 72 69 74 65 53 63 68 65 6d 61 20 20 20 20  _WriteSchema    
d970: 30 78 30 30 30 30 30 30 30 31 20 20 2f 2a 20 4f  0x00000001  /* O
d980: 4b 20 74 6f 20 75 70 64 61 74 65 20 53 51 4c 49  K to update SQLI
d990: 54 45 5f 4d 41 53 54 45 52 20 2a 2f 0a 23 64 65  TE_MASTER */.#de
d9a0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67 61  fine SQLITE_Lega
d9b0: 63 79 46 69 6c 65 46 6d 74 20 20 30 78 30 30 30  cyFileFmt  0x000
d9c0: 30 30 30 30 32 20 20 2f 2a 20 43 72 65 61 74 65  00002  /* Create
d9d0: 20 6e 65 77 20 64 61 74 61 62 61 73 65 73 20 69   new databases i
d9e0: 6e 20 66 6f 72 6d 61 74 20 31 20 2a 2f 0a 23 64  n format 1 */.#d
d9f0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c  efine SQLITE_Ful
da00: 6c 43 6f 6c 4e 61 6d 65 73 20 20 20 30 78 30 30  lColNames   0x00
da10: 30 30 30 30 30 34 20 20 2f 2a 20 53 68 6f 77 20  000004  /* Show 
da20: 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  full column name
da30: 73 20 6f 6e 20 53 45 4c 45 43 54 20 2a 2f 0a 23  s on SELECT */.#
da40: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75  define SQLITE_Fu
da50: 6c 6c 46 53 79 6e 63 20 20 20 20 20 20 30 78 30  llFSync      0x0
da60: 30 30 30 30 30 30 38 20 20 2f 2a 20 55 73 65 20  0000008  /* Use 
da70: 66 75 6c 6c 20 66 73 79 6e 63 20 6f 6e 20 74 68  full fsync on th
da80: 65 20 62 61 63 6b 65 6e 64 20 2a 2f 0a 23 64 65  e backend */.#de
da90: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6b 70 74  fine SQLITE_Ckpt
daa0: 46 75 6c 6c 46 53 79 6e 63 20 20 30 78 30 30 30  FullFSync  0x000
dab0: 30 30 30 31 30 20 20 2f 2a 20 55 73 65 20 66 75  00010  /* Use fu
dac0: 6c 6c 20 66 73 79 6e 63 20 66 6f 72 20 63 68 65  ll fsync for che
dad0: 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64 65 66 69  ckpoint */.#defi
dae0: 6e 65 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53  ne SQLITE_CacheS
daf0: 70 69 6c 6c 20 20 20 20 20 30 78 30 30 30 30 30  pill     0x00000
db00: 30 32 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 73 70  020  /* OK to sp
db10: 69 6c 6c 20 70 61 67 65 72 20 63 61 63 68 65 20  ill pager cache 
db20: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
db30: 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20  E_ShortColNames 
db40: 20 30 78 30 30 30 30 30 30 34 30 20 20 2f 2a 20   0x00000040  /* 
db50: 53 68 6f 77 20 73 68 6f 72 74 20 63 6f 6c 75 6d  Show short colum
db60: 6e 73 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66  ns names */.#def
db70: 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74  ine SQLITE_Count
db80: 52 6f 77 73 20 20 20 20 20 20 30 78 30 30 30 30  Rows      0x0000
db90: 30 30 38 30 20 20 2f 2a 20 43 6f 75 6e 74 20 72  0080  /* Count r
dba0: 6f 77 73 20 63 68 61 6e 67 65 64 20 62 79 20 49  ows changed by I
dbb0: 4e 53 45 52 54 2c 20 2a 2f 0a 20 20 20 20 20 20  NSERT, */.      
dbc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dbd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dbe0: 20 20 20 20 2f 2a 20 20 20 44 45 4c 45 54 45 2c      /*   DELETE,
dbf0: 20 6f 72 20 55 50 44 41 54 45 20 61 6e 64 20 72   or UPDATE and r
dc00: 65 74 75 72 6e 20 2a 2f 0a 20 20 20 20 20 20 20  eturn */.       
dc10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc30: 20 20 20 2f 2a 20 20 20 74 68 65 20 63 6f 75 6e     /*   the coun
dc40: 74 20 75 73 69 6e 67 20 61 20 63 61 6c 6c 62 61  t using a callba
dc50: 63 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ck. */.#define S
dc60: 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61  QLITE_NullCallba
dc70: 63 6b 20 20 20 30 78 30 30 30 30 30 31 30 30 20  ck   0x00000100 
dc80: 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 63   /* Invoke the c
dc90: 61 6c 6c 62 61 63 6b 20 6f 6e 63 65 20 69 66 20  allback once if 
dca0: 74 68 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  the */.         
dcb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dcc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dcd0: 20 2f 2a 20 20 20 72 65 73 75 6c 74 20 73 65 74   /*   result set
dce0: 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65   is empty */.#de
dcf0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 67 6e 6f  fine SQLITE_Igno
dd00: 72 65 43 68 65 63 6b 73 20 20 20 30 78 30 30 30  reChecks   0x000
dd10: 30 30 32 30 30 20 20 2f 2a 20 44 6f 20 6e 6f 74  00200  /* Do not
dd20: 20 65 6e 66 6f 72 63 65 20 63 68 65 63 6b 20 63   enforce check c
dd30: 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64  onstraints */.#d
dd40: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 61  efine SQLITE_Rea
dd50: 64 55 6e 63 6f 6d 6d 69 74 20 20 20 30 78 30 30  dUncommit   0x00
dd60: 30 30 30 34 30 30 20 20 2f 2a 20 52 45 41 44 20  000400  /* READ 
dd70: 55 4e 43 4f 4d 4d 49 54 54 45 44 20 69 6e 20 73  UNCOMMITTED in s
dd80: 68 61 72 65 64 2d 63 61 63 68 65 20 2a 2f 0a 23  hared-cache */.#
dd90: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 6f  define SQLITE_No
dda0: 43 6b 70 74 4f 6e 43 6c 6f 73 65 20 20 30 78 30  CkptOnClose  0x0
ddb0: 30 30 30 30 38 30 30 20 20 2f 2a 20 4e 6f 20 63  0000800  /* No c
ddc0: 68 65 63 6b 70 6f 69 6e 74 20 6f 6e 20 63 6c 6f  heckpoint on clo
ddd0: 73 65 28 29 2f 44 45 54 41 43 48 20 2a 2f 0a 23  se()/DETACH */.#
dde0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65  define SQLITE_Re
ddf0: 76 65 72 73 65 4f 72 64 65 72 20 20 20 30 78 30  verseOrder   0x0
de00: 30 30 30 31 30 30 30 20 20 2f 2a 20 52 65 76 65  0001000  /* Reve
de10: 72 73 65 20 75 6e 6f 72 64 65 72 65 64 20 53 45  rse unordered SE
de20: 4c 45 43 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65  LECTs */.#define
de30: 20 53 51 4c 49 54 45 5f 52 65 63 54 72 69 67 67   SQLITE_RecTrigg
de40: 65 72 73 20 20 20 20 30 78 30 30 30 30 32 30 30  ers    0x0000200
de50: 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63  0  /* Enable rec
de60: 75 72 73 69 76 65 20 74 72 69 67 67 65 72 73 20  ursive triggers 
de70: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
de80: 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73 20 20 20  E_ForeignKeys   
de90: 20 30 78 30 30 30 30 34 30 30 30 20 20 2f 2a 20   0x00004000  /* 
dea0: 45 6e 66 6f 72 63 65 20 66 6f 72 65 69 67 6e 20  Enforce foreign 
deb0: 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  key constraints 
dec0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
ded0: 54 45 5f 41 75 74 6f 49 6e 64 65 78 20 20 20 20  TE_AutoIndex    
dee0: 20 20 30 78 30 30 30 30 38 30 30 30 20 20 2f 2a    0x00008000  /*
def0: 20 45 6e 61 62 6c 65 20 61 75 74 6f 6d 61 74 69   Enable automati
df00: 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65  c indexes */.#de
df10: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64  fine SQLITE_Load
df20: 45 78 74 65 6e 73 69 6f 6e 20 20 30 78 30 30 30  Extension  0x000
df30: 31 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65  10000  /* Enable
df40: 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20   load_extension 
df50: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
df60: 45 5f 4c 6f 61 64 45 78 74 46 75 6e 63 20 20 20  E_LoadExtFunc   
df70: 20 30 78 30 30 30 32 30 30 30 30 20 20 2f 2a 20   0x00020000  /* 
df80: 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65  Enable load_exte
df90: 6e 73 69 6f 6e 28 29 20 53 51 4c 20 66 75 6e 63  nsion() SQL func
dfa0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
dfb0: 54 45 5f 45 6e 61 62 6c 65 54 72 69 67 67 65 72  TE_EnableTrigger
dfc0: 20 20 30 78 30 30 30 34 30 30 30 30 20 20 2f 2a    0x00040000  /*
dfd0: 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20   True to enable 
dfe0: 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66  triggers */.#def
dff0: 69 6e 65 20 53 51 4c 49 54 45 5f 44 65 66 65 72  ine SQLITE_Defer
e000: 46 4b 73 20 20 20 20 20 20 20 30 78 30 30 30 38  FKs       0x0008
e010: 30 30 30 30 20 20 2f 2a 20 44 65 66 65 72 20 61  0000  /* Defer a
e020: 6c 6c 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74  ll FK constraint
e030: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
e040: 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79 20 20 20  ITE_QueryOnly   
e050: 20 20 20 30 78 30 30 31 30 30 30 30 30 20 20 2f     0x00100000  /
e060: 2a 20 44 69 73 61 62 6c 65 20 64 61 74 61 62 61  * Disable databa
e070: 73 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64  se changes */.#d
e080: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 65 6c  efine SQLITE_Cel
e090: 6c 53 69 7a 65 43 6b 20 20 20 20 20 30 78 30 30  lSizeCk     0x00
e0a0: 32 30 30 30 30 30 20 20 2f 2a 20 43 68 65 63 6b  200000  /* Check
e0b0: 20 62 74 72 65 65 20 63 65 6c 6c 20 73 69 7a 65   btree cell size
e0c0: 73 20 6f 6e 20 6c 6f 61 64 20 2a 2f 0a 23 64 65  s on load */.#de
e0d0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 74 73 33  fine SQLITE_Fts3
e0e0: 54 6f 6b 65 6e 69 7a 65 72 20 20 30 78 30 30 34  Tokenizer  0x004
e0f0: 30 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65  00000  /* Enable
e100: 20 66 74 73 33 5f 74 6f 6b 65 6e 69 7a 65 72 28   fts3_tokenizer(
e110: 32 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  2) */.#define SQ
e120: 4c 49 54 45 5f 45 6e 61 62 6c 65 51 50 53 47 20  LITE_EnableQPSG 
e130: 20 20 20 20 30 78 30 30 38 30 30 30 30 30 20 20      0x00800000  
e140: 2f 2a 20 51 75 65 72 79 20 50 6c 61 6e 6e 65 72  /* Query Planner
e150: 20 53 74 61 62 69 6c 69 74 79 20 47 75 61 72 61   Stability Guara
e160: 6e 74 65 65 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ntee*/.#define S
e170: 51 4c 49 54 45 5f 54 72 69 67 67 65 72 45 51 50  QLITE_TriggerEQP
e180: 20 20 20 20 20 30 78 30 31 30 30 30 30 30 30 20       0x01000000 
e190: 20 2f 2a 20 53 68 6f 77 20 74 72 69 67 67 65 72   /* Show trigger
e1a0: 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50   EXPLAIN QUERY P
e1b0: 4c 41 4e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  LAN */.#define S
e1c0: 51 4c 49 54 45 5f 52 65 73 65 74 44 61 74 61 62  QLITE_ResetDatab
e1d0: 61 73 65 20 20 30 78 30 32 30 30 30 30 30 30 20  ase  0x02000000 
e1e0: 20 2f 2a 20 52 65 73 65 74 20 74 68 65 20 64 61   /* Reset the da
e1f0: 74 61 62 61 73 65 20 2a 2f 0a 0a 2f 2a 20 46 6c  tabase */../* Fl
e200: 61 67 73 20 75 73 65 64 20 6f 6e 6c 79 20 69 66  ags used only if
e210: 20 64 65 62 75 67 67 69 6e 67 20 2a 2f 0a 23 69   debugging */.#i
e220: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
e230: 47 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  G.#define SQLITE
e240: 5f 53 71 6c 54 72 61 63 65 20 20 20 20 20 20 20  _SqlTrace       
e250: 30 78 30 38 30 30 30 30 30 30 20 20 2f 2a 20 44  0x08000000  /* D
e260: 65 62 75 67 20 70 72 69 6e 74 20 53 51 4c 20 61  ebug print SQL a
e270: 73 20 69 74 20 65 78 65 63 75 74 65 73 20 2a 2f  s it executes */
e280: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e290: 56 64 62 65 4c 69 73 74 69 6e 67 20 20 20 20 30  VdbeListing    0
e2a0: 78 31 30 30 30 30 30 30 30 20 20 2f 2a 20 44 65  x10000000  /* De
e2b0: 62 75 67 20 6c 69 73 74 69 6e 67 73 20 6f 66 20  bug listings of 
e2c0: 56 44 42 45 20 70 72 6f 67 72 61 6d 73 20 2a 2f  VDBE programs */
e2d0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e2e0: 56 64 62 65 54 72 61 63 65 20 20 20 20 20 20 30  VdbeTrace      0
e2f0: 78 32 30 30 30 30 30 30 30 20 20 2f 2a 20 54 72  x20000000  /* Tr
e300: 75 65 20 74 6f 20 74 72 61 63 65 20 56 44 42 45  ue to trace VDBE
e310: 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 23 64   execution */.#d
e320: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62  efine SQLITE_Vdb
e330: 65 41 64 64 6f 70 54 72 61 63 65 20 30 78 34 30  eAddopTrace 0x40
e340: 30 30 30 30 30 30 20 20 2f 2a 20 54 72 61 63 65  000000  /* Trace
e350: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
e360: 70 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 23 64 65  p() calls */.#de
e370: 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65  fine SQLITE_Vdbe
e380: 45 51 50 20 20 20 20 20 20 20 20 30 78 38 30 30  EQP        0x800
e390: 30 30 30 30 30 20 20 2f 2a 20 44 65 62 75 67 20  00000  /* Debug 
e3a0: 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c  EXPLAIN QUERY PL
e3b0: 41 4e 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a  AN */.#endif../*
e3c0: 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
e3d0: 65 73 20 66 6f 72 20 73 71 6c 69 74 65 33 2e 6d  es for sqlite3.m
e3e0: 44 62 46 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69  DbFlags.*/.#defi
e3f0: 6e 65 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61  ne DBFLAG_Schema
e400: 43 68 61 6e 67 65 20 20 20 30 78 30 30 30 31 20  Change   0x0001 
e410: 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74 65 64 20   /* Uncommitted 
e420: 48 61 73 68 20 74 61 62 6c 65 20 63 68 61 6e 67  Hash table chang
e430: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42  es */.#define DB
e440: 46 4c 41 47 5f 50 72 65 66 65 72 42 75 69 6c 74  FLAG_PreferBuilt
e450: 69 6e 20 20 30 78 30 30 30 32 20 20 2f 2a 20 50  in  0x0002  /* P
e460: 72 65 66 65 72 65 6e 63 65 20 74 6f 20 62 75 69  reference to bui
e470: 6c 74 2d 69 6e 20 66 75 6e 63 73 20 2a 2f 0a 23  lt-in funcs */.#
e480: 64 65 66 69 6e 65 20 44 42 46 4c 41 47 5f 56 61  define DBFLAG_Va
e490: 63 75 75 6d 20 20 20 20 20 20 20 20 20 30 78 30  cuum         0x0
e4a0: 30 30 34 20 20 2f 2a 20 43 75 72 72 65 6e 74 6c  004  /* Currentl
e4b0: 79 20 69 6e 20 61 20 56 41 43 55 55 4d 20 2a 2f  y in a VACUUM */
e4c0: 0a 23 64 65 66 69 6e 65 20 44 42 46 4c 41 47 5f  .#define DBFLAG_
e4d0: 53 63 68 65 6d 61 4b 6e 6f 77 6e 4f 6b 20 20 30  SchemaKnownOk  0
e4e0: 78 30 30 30 38 20 20 2f 2a 20 53 63 68 65 6d 61  x0008  /* Schema
e4f0: 20 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 62 65 20   is known to be 
e500: 76 61 6c 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  valid */../*.** 
e510: 42 69 74 73 20 6f 66 20 74 68 65 20 73 71 6c 69  Bits of the sqli
e520: 74 65 33 2e 64 62 4f 70 74 46 6c 61 67 73 20 66  te3.dbOptFlags f
e530: 69 65 6c 64 20 74 68 61 74 20 61 72 65 20 75 73  ield that are us
e540: 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c  ed by the.** sql
e550: 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f  ite3_test_contro
e560: 6c 28 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52  l(SQLITE_TESTCTR
e570: 4c 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 53 2c  L_OPTIMIZATIONS,
e580: 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63 65 20 74  ...) interface t
e590: 6f 0a 2a 2a 20 73 65 6c 65 63 74 69 76 65 6c 79  o.** selectively
e5a0: 20 64 69 73 61 62 6c 65 20 76 61 72 69 6f 75 73   disable various
e5b0: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a   optimizations..
e5c0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e5d0: 45 5f 51 75 65 72 79 46 6c 61 74 74 65 6e 65 72  E_QueryFlattener
e5e0: 20 30 78 30 30 30 31 20 20 20 2f 2a 20 51 75 65   0x0001   /* Que
e5f0: 72 79 20 66 6c 61 74 74 65 6e 69 6e 67 20 2a 2f  ry flattening */
e600: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e610: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 30             /*  0
e620: 78 30 30 30 32 20 20 20 61 76 61 69 6c 61 62 6c  x0002   availabl
e630: 65 20 66 6f 72 20 72 65 75 73 65 20 2a 2f 0a 23  e for reuse */.#
e640: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 47 72  define SQLITE_Gr
e650: 6f 75 70 42 79 4f 72 64 65 72 20 20 20 30 78 30  oupByOrder   0x0
e660: 30 30 34 20 20 20 2f 2a 20 47 52 4f 55 50 42 59  004   /* GROUPBY
e670: 20 63 6f 76 65 72 20 6f 66 20 4f 52 44 45 52 42   cover of ORDERB
e680: 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  Y */.#define SQL
e690: 49 54 45 5f 46 61 63 74 6f 72 4f 75 74 43 6f 6e  ITE_FactorOutCon
e6a0: 73 74 20 30 78 30 30 30 38 20 20 20 2f 2a 20 43  st 0x0008   /* C
e6b0: 6f 6e 73 74 61 6e 74 20 66 61 63 74 6f 72 69 6e  onstant factorin
e6c0: 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  g */.#define SQL
e6d0: 49 54 45 5f 44 69 73 74 69 6e 63 74 4f 70 74 20  ITE_DistinctOpt 
e6e0: 20 20 20 30 78 30 30 31 30 20 20 20 2f 2a 20 44     0x0010   /* D
e6f0: 49 53 54 49 4e 43 54 20 75 73 69 6e 67 20 69 6e  ISTINCT using in
e700: 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  dexes */.#define
e710: 20 53 51 4c 49 54 45 5f 43 6f 76 65 72 49 64 78   SQLITE_CoverIdx
e720: 53 63 61 6e 20 20 20 30 78 30 30 32 30 20 20 20  Scan   0x0020   
e730: 2f 2a 20 43 6f 76 65 72 69 6e 67 20 69 6e 64 65  /* Covering inde
e740: 78 20 73 63 61 6e 73 20 2a 2f 0a 23 64 65 66 69  x scans */.#defi
e750: 6e 65 20 53 51 4c 49 54 45 5f 4f 72 64 65 72 42  ne SQLITE_OrderB
e760: 79 49 64 78 4a 6f 69 6e 20 30 78 30 30 34 30 20  yIdxJoin 0x0040 
e770: 20 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 6f 66    /* ORDER BY of
e780: 20 6a 6f 69 6e 73 20 76 69 61 20 69 6e 64 65 78   joins via index
e790: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e7a0: 54 45 5f 54 72 61 6e 73 69 74 69 76 65 20 20 20  TE_Transitive   
e7b0: 20 20 30 78 30 30 38 30 20 20 20 2f 2a 20 54 72    0x0080   /* Tr
e7c0: 61 6e 73 69 74 69 76 65 20 63 6f 6e 73 74 72 61  ansitive constra
e7d0: 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ints */.#define 
e7e0: 53 51 4c 49 54 45 5f 4f 6d 69 74 4e 6f 6f 70 4a  SQLITE_OmitNoopJ
e7f0: 6f 69 6e 20 20 20 30 78 30 31 30 30 20 20 20 2f  oin   0x0100   /
e800: 2a 20 4f 6d 69 74 20 75 6e 75 73 65 64 20 74 61  * Omit unused ta
e810: 62 6c 65 73 20 69 6e 20 6a 6f 69 6e 73 20 2a 2f  bles in joins */
e820: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e830: 43 6f 75 6e 74 4f 66 56 69 65 77 20 20 20 20 30  CountOfView    0
e840: 78 30 32 30 30 20 20 20 2f 2a 20 54 68 65 20 63  x0200   /* The c
e850: 6f 75 6e 74 2d 6f 66 2d 76 69 65 77 20 6f 70 74  ount-of-view opt
e860: 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65  imization */.#de
e870: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 75 72 73  fine SQLITE_Curs
e880: 6f 72 48 69 6e 74 73 20 20 20 20 30 78 30 34 30  orHints    0x040
e890: 30 20 20 20 2f 2a 20 41 64 64 20 4f 50 5f 43 75  0   /* Add OP_Cu
e8a0: 72 73 6f 72 48 69 6e 74 20 6f 70 63 6f 64 65 73  rsorHint opcodes
e8b0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e8c0: 54 45 5f 53 74 61 74 33 34 20 20 20 20 20 20 20  TE_Stat34       
e8d0: 20 20 30 78 30 38 30 30 20 20 20 2f 2a 20 55 73    0x0800   /* Us
e8e0: 65 20 53 54 41 54 33 20 6f 72 20 53 54 41 54 34  e STAT3 or STAT4
e8f0: 20 64 61 74 61 20 2a 2f 0a 20 20 20 2f 2a 20 54   data */.   /* T
e900: 48 33 20 65 78 70 65 63 74 73 20 74 68 65 20 53  H3 expects the S
e910: 74 61 74 33 34 20 20 5e 5e 5e 5e 5e 5e 20 76 61  tat34  ^^^^^^ va
e920: 6c 75 65 20 74 6f 20 62 65 20 30 78 30 38 30 30  lue to be 0x0800
e930: 2e 20 20 44 6f 6e 27 74 20 63 68 61 6e 67 65 20  .  Don't change 
e940: 69 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  it */.#define SQ
e950: 4c 49 54 45 5f 50 75 73 68 44 6f 77 6e 20 20 20  LITE_PushDown   
e960: 20 20 20 20 30 78 31 30 30 30 20 20 20 2f 2a 20      0x1000   /* 
e970: 54 68 65 20 70 75 73 68 2d 64 6f 77 6e 20 6f 70  The push-down op
e980: 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64  timization */.#d
e990: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 69 6d  efine SQLITE_Sim
e9a0: 70 6c 69 66 79 4a 6f 69 6e 20 20 20 30 78 32 30  plifyJoin   0x20
e9b0: 30 30 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74 20  00   /* Convert 
e9c0: 4c 45 46 54 20 4a 4f 49 4e 20 74 6f 20 4a 4f 49  LEFT JOIN to JOI
e9d0: 4e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  N */.#define SQL
e9e0: 49 54 45 5f 53 6b 69 70 53 63 61 6e 20 20 20 20  ITE_SkipScan    
e9f0: 20 20 20 30 78 34 30 30 30 20 20 20 2f 2a 20 53     0x4000   /* S
ea00: 6b 69 70 2d 73 63 61 6e 73 20 2a 2f 0a 23 64 65  kip-scans */.#de
ea10: 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 72 6f 70  fine SQLITE_Prop
ea20: 61 67 61 74 65 43 6f 6e 73 74 20 30 78 38 30 30  agateConst 0x800
ea30: 30 20 20 20 2f 2a 20 54 68 65 20 63 6f 6e 73 74  0   /* The const
ea40: 61 6e 74 20 70 72 6f 70 61 67 61 74 69 6f 6e 20  ant propagation 
ea50: 6f 70 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  opt */.#define S
ea60: 51 4c 49 54 45 5f 41 6c 6c 4f 70 74 73 20 20 20  QLITE_AllOpts   
ea70: 20 20 20 20 20 30 78 66 66 66 66 20 20 20 2f 2a       0xffff   /*
ea80: 20 41 6c 6c 20 6f 70 74 69 6d 69 7a 61 74 69 6f   All optimizatio
ea90: 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63  ns */../*.** Mac
eaa0: 72 6f 73 20 66 6f 72 20 74 65 73 74 69 6e 67 20  ros for testing 
eab0: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 6f  whether or not o
eac0: 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 61 72 65  ptimizations are
ead0: 20 65 6e 61 62 6c 65 64 20 6f 72 20 64 69 73 61   enabled or disa
eae0: 62 6c 65 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  bled..*/.#define
eaf0: 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73   OptimizationDis
eb00: 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20  abled(db, mask) 
eb10: 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c   (((db)->dbOptFl
eb20: 61 67 73 26 28 6d 61 73 6b 29 29 21 3d 30 29 0a  ags&(mask))!=0).
eb30: 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61  #define Optimiza
eb40: 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20  tionEnabled(db, 
eb50: 6d 61 73 6b 29 20 20 20 28 28 28 64 62 29 2d 3e  mask)   (((db)->
eb60: 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b  dbOptFlags&(mask
eb70: 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 52 65  ))==0)../*.** Re
eb80: 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 74 20  turn true if it 
eb90: 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 63 6f 6e  OK to factor con
eba0: 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e  stant expression
ebb0: 73 20 69 6e 74 6f 20 74 68 65 20 69 6e 69 74 69  s into the initi
ebc0: 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 63 6f 64  alization.** cod
ebd0: 65 2e 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20  e. The argument 
ebe0: 69 73 20 61 20 50 61 72 73 65 20 6f 62 6a 65 63  is a Parse objec
ebf0: 74 20 66 6f 72 20 74 68 65 20 63 6f 64 65 20 67  t for the code g
ec00: 65 6e 65 72 61 74 6f 72 2e 0a 2a 2f 0a 23 64 65  enerator..*/.#de
ec10: 66 69 6e 65 20 43 6f 6e 73 74 46 61 63 74 6f 72  fine ConstFactor
ec20: 4f 6b 28 50 29 20 28 28 50 29 2d 3e 6f 6b 43 6f  Ok(P) ((P)->okCo
ec30: 6e 73 74 46 61 63 74 6f 72 29 0a 0a 2f 2a 0a 2a  nstFactor)../*.*
ec40: 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65  * Possible value
ec50: 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65  s for the sqlite
ec60: 2e 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a 2a 2a  .magic field..**
ec70: 20 54 68 65 20 6e 75 6d 62 65 72 73 20 61 72 65   The numbers are
ec80: 20 6f 62 74 61 69 6e 65 64 20 61 74 20 72 61 6e   obtained at ran
ec90: 64 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e 6f 20  dom and have no 
eca0: 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 2c  special meaning,
ecb0: 20 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e 20 62   other.** than b
ecc0: 65 69 6e 67 20 64 69 73 74 69 6e 63 74 20 66 72  eing distinct fr
ecd0: 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a  om one another..
ece0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ecf0: 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20 20 20  E_MAGIC_OPEN    
ed00: 20 30 78 61 30 32 39 61 36 39 37 20 20 2f 2a 20   0xa029a697  /* 
ed10: 44 61 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e  Database is open
ed20: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
ed30: 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20  TE_MAGIC_CLOSED 
ed40: 20 20 30 78 39 66 33 63 32 64 33 33 20 20 2f 2a    0x9f3c2d33  /*
ed50: 20 44 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f   Database is clo
ed60: 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  sed */.#define S
ed70: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49 43 4b  QLITE_MAGIC_SICK
ed80: 20 20 20 20 20 30 78 34 62 37 37 31 32 39 30 20       0x4b771290 
ed90: 20 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20 61 77   /* Error and aw
eda0: 61 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a 2f 0a  aiting close */.
edb0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
edc0: 41 47 49 43 5f 42 55 53 59 20 20 20 20 20 30 78  AGIC_BUSY     0x
edd0: 66 30 33 62 37 39 30 36 20 20 2f 2a 20 44 61 74  f03b7906  /* Dat
ede0: 61 62 61 73 65 20 63 75 72 72 65 6e 74 6c 79 20  abase currently 
edf0: 69 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e  in use */.#defin
ee00: 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45  e SQLITE_MAGIC_E
ee10: 52 52 4f 52 20 20 20 20 30 78 62 35 33 35 37 39  RROR    0xb53579
ee20: 33 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49 54 45  30  /* An SQLITE
ee30: 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 20 6f 63  _MISUSE error oc
ee40: 63 75 72 72 65 64 20 2a 2f 0a 23 64 65 66 69 6e  curred */.#defin
ee50: 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 5a  e SQLITE_MAGIC_Z
ee60: 4f 4d 42 49 45 20 20 20 30 78 36 34 63 66 66 63  OMBIE   0x64cffc
ee70: 37 66 20 20 2f 2a 20 43 6c 6f 73 65 20 77 69 74  7f  /* Close wit
ee80: 68 20 6c 61 73 74 20 73 74 61 74 65 6d 65 6e 74  h last statement
ee90: 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   close */../*.**
eea0: 20 45 61 63 68 20 53 51 4c 20 66 75 6e 63 74 69   Each SQL functi
eeb0: 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20 62 79  on is defined by
eec0: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
eed0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a  the following.**
eee0: 20 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f 72   structure.  For
eef0: 20 67 6c 6f 62 61 6c 20 62 75 69 6c 74 2d 69 6e   global built-in
ef00: 20 66 75 6e 63 74 69 6f 6e 73 20 28 65 78 3a 20   functions (ex: 
ef10: 73 75 62 73 74 72 28 29 2c 20 6d 61 78 28 29 2c  substr(), max(),
ef20: 20 63 6f 75 6e 74 28 29 29 0a 2a 2a 20 61 20 70   count()).** a p
ef30: 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73  ointer to this s
ef40: 74 72 75 63 74 75 72 65 20 69 73 20 68 65 6c 64  tructure is held
ef50: 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33 42   in the sqlite3B
ef60: 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 20  uiltinFunctions 
ef70: 6f 62 6a 65 63 74 2e 0a 2a 2a 20 46 6f 72 20 70  object..** For p
ef80: 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 70  er-connection ap
ef90: 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65  plication-define
efa0: 64 20 66 75 6e 63 74 69 6f 6e 73 2c 20 61 20 70  d functions, a p
efb0: 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 0a 2a  ointer to this.*
efc0: 2a 20 73 74 72 75 63 74 75 72 65 20 69 73 20 68  * structure is h
efd0: 65 6c 64 20 69 6e 20 74 68 65 20 64 62 2d 3e 61  eld in the db->a
efe0: 48 61 73 68 20 68 61 73 68 20 74 61 62 6c 65 2e  Hash hash table.
eff0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 75 2e 70 48 61  .**.** The u.pHa
f000: 73 68 20 66 69 65 6c 64 20 69 73 20 75 73 65 64  sh field is used
f010: 20 62 79 20 74 68 65 20 67 6c 6f 62 61 6c 20 62   by the global b
f020: 75 69 6c 74 2d 69 6e 73 2e 20 20 54 68 65 20 75  uilt-ins.  The u
f030: 2e 70 44 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20  .pDestructor.** 
f040: 66 69 65 6c 64 20 69 73 20 75 73 65 64 20 62 79  field is used by
f050: 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20   per-connection 
f060: 61 70 70 2d 64 65 66 20 66 75 6e 63 74 69 6f 6e  app-def function
f070: 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e  s..*/.struct Fun
f080: 63 44 65 66 20 7b 0a 20 20 69 38 20 6e 41 72 67  cDef {.  i8 nArg
f090: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
f0a0: 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
f0b0: 65 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e 73 20  ents.  -1 means 
f0c0: 75 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20 20 75  unlimited */.  u
f0d0: 33 32 20 66 75 6e 63 46 6c 61 67 73 3b 20 20 20  32 funcFlags;   
f0e0: 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62      /* Some comb
f0f0: 69 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c 49 54  ination of SQLIT
f100: 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f  E_FUNC_* */.  vo
f110: 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b 20 20  id *pUserData;  
f120: 20 20 20 2f 2a 20 55 73 65 72 20 64 61 74 61 20     /* User data 
f130: 70 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20 46  parameter */.  F
f140: 75 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b 20 20  uncDef *pNext;  
f150: 20 20 20 20 2f 2a 20 4e 65 78 74 20 66 75 6e 63      /* Next func
f160: 74 69 6f 6e 20 77 69 74 68 20 73 61 6d 65 20 6e  tion with same n
f170: 61 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ame */.  void (*
f180: 78 53 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f  xSFunc)(sqlite3_
f190: 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
f1a0: 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f  ite3_value**); /
f1b0: 2a 20 66 75 6e 63 20 6f 72 20 61 67 67 2d 73 74  * func or agg-st
f1c0: 65 70 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  ep */.  void (*x
f1d0: 46 69 6e 61 6c 69 7a 65 29 28 73 71 6c 69 74 65  Finalize)(sqlite
f1e0: 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20 20  3_context*);    
f1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
f200: 20 41 67 67 20 66 69 6e 61 6c 69 7a 65 72 20 2a   Agg finalizer *
f210: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 56 61 6c 75  /.  void (*xValu
f220: 65 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  e)(sqlite3_conte
f230: 78 74 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20  xt*);           
f240: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72            /* Cur
f250: 72 65 6e 74 20 61 67 67 20 76 61 6c 75 65 20 2a  rent agg value *
f260: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 49 6e 76 65  /.  void (*xInve
f270: 72 73 65 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  rse)(sqlite3_con
f280: 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
f290: 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 69  3_value**); /* i
f2a0: 6e 76 65 72 73 65 20 61 67 67 2d 73 74 65 70 20  nverse agg-step 
f2b0: 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
f2c0: 2a 7a 4e 61 6d 65 3b 20 20 20 2f 2a 20 53 51 4c  *zName;   /* SQL
f2d0: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e   name of the fun
f2e0: 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 75 6e 69 6f  ction. */.  unio
f2f0: 6e 20 7b 0a 20 20 20 20 46 75 6e 63 44 65 66 20  n {.    FuncDef 
f300: 2a 70 48 61 73 68 3b 20 20 20 20 20 20 2f 2a 20  *pHash;      /* 
f310: 4e 65 78 74 20 77 69 74 68 20 61 20 64 69 66 66  Next with a diff
f320: 65 72 65 6e 74 20 6e 61 6d 65 20 62 75 74 20 74  erent name but t
f330: 68 65 20 73 61 6d 65 20 68 61 73 68 20 2a 2f 0a  he same hash */.
f340: 20 20 20 20 46 75 6e 63 44 65 73 74 72 75 63 74      FuncDestruct
f350: 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 3b  or *pDestructor;
f360: 20 20 20 2f 2a 20 52 65 66 65 72 65 6e 63 65 20     /* Reference 
f370: 63 6f 75 6e 74 65 64 20 64 65 73 74 72 75 63 74  counted destruct
f380: 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  or function */. 
f390: 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20   } u;.};../*.** 
f3a0: 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20 65  This structure e
f3b0: 6e 63 61 70 73 75 6c 61 74 65 73 20 61 20 75 73  ncapsulates a us
f3c0: 65 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65 73 74  er-function dest
f3d0: 72 75 63 74 6f 72 20 63 61 6c 6c 62 61 63 6b 20  ructor callback 
f3e0: 28 61 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65  (as.** configure
f3f0: 64 20 75 73 69 6e 67 20 63 72 65 61 74 65 5f 66  d using create_f
f400: 75 6e 63 74 69 6f 6e 5f 76 32 28 29 29 20 61 6e  unction_v2()) an
f410: 64 20 61 20 72 65 66 65 72 65 6e 63 65 20 63 6f  d a reference co
f420: 75 6e 74 65 72 2e 20 57 68 65 6e 0a 2a 2a 20 63  unter. When.** c
f430: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76  reate_function_v
f440: 32 28 29 20 69 73 20 63 61 6c 6c 65 64 20 74 6f  2() is called to
f450: 20 63 72 65 61 74 65 20 61 20 66 75 6e 63 74 69   create a functi
f460: 6f 6e 20 77 69 74 68 20 61 20 64 65 73 74 72 75  on with a destru
f470: 63 74 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c  ctor,.** a singl
f480: 65 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73  e object of this
f490: 20 74 79 70 65 20 69 73 20 61 6c 6c 6f 63 61 74   type is allocat
f4a0: 65 64 2e 20 46 75 6e 63 44 65 73 74 72 75 63 74  ed. FuncDestruct
f4b0: 6f 72 2e 6e 52 65 66 20 69 73 20 73 65 74 20 74  or.nRef is set t
f4c0: 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20  o.** the number 
f4d0: 6f 66 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63  of FuncDef objec
f4e0: 74 73 20 63 72 65 61 74 65 64 20 28 65 69 74 68  ts created (eith
f4f0: 65 72 20 31 20 6f 72 20 33 2c 20 64 65 70 65 6e  er 1 or 3, depen
f500: 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a  ding on whether.
f510: 2a 2a 20 6f 72 20 6e 6f 74 20 74 68 65 20 73 70  ** or not the sp
f520: 65 63 69 66 69 65 64 20 65 6e 63 6f 64 69 6e 67  ecified encoding
f530: 20 69 73 20 53 51 4c 49 54 45 5f 41 4e 59 29 2e   is SQLITE_ANY).
f540: 20 54 68 65 20 46 75 6e 63 44 65 66 2e 70 44 65   The FuncDef.pDe
f550: 73 74 72 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d 62  structor.** memb
f560: 65 72 20 6f 66 20 65 61 63 68 20 6f 66 20 74 68  er of each of th
f570: 65 20 6e 65 77 20 46 75 6e 63 44 65 66 20 6f 62  e new FuncDef ob
f580: 6a 65 63 74 73 20 69 73 20 73 65 74 20 74 6f 20  jects is set to 
f590: 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 61 6c 6c  point to the all
f5a0: 6f 63 61 74 65 64 0a 2a 2a 20 46 75 6e 63 44 65  ocated.** FuncDe
f5b0: 73 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20  structor..**.** 
f5c0: 54 68 65 72 65 61 66 74 65 72 2c 20 77 68 65 6e  Thereafter, when
f5d0: 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63   one of the Func
f5e0: 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20 64  Def objects is d
f5f0: 65 6c 65 74 65 64 2c 20 74 68 65 20 72 65 66 65  eleted, the refe
f600: 72 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74 20 6f  rence.** count o
f610: 6e 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 73  n this object is
f620: 20 64 65 63 72 65 6d 65 6e 74 65 64 2e 20 57 68   decremented. Wh
f630: 65 6e 20 69 74 20 72 65 61 63 68 65 73 20 30 2c  en it reaches 0,
f640: 20 74 68 65 20 64 65 73 74 72 75 63 74 6f 72 0a   the destructor.
f650: 2a 2a 20 69 73 20 69 6e 76 6f 6b 65 64 20 61 6e  ** is invoked an
f660: 64 20 74 68 65 20 46 75 6e 63 44 65 73 74 72 75  d the FuncDestru
f670: 63 74 6f 72 20 73 74 72 75 63 74 75 72 65 20 66  ctor structure f
f680: 72 65 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  reed..*/.struct 
f690: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 7b  FuncDestructor {
f6a0: 0a 20 20 69 6e 74 20 6e 52 65 66 3b 0a 20 20 76  .  int nRef;.  v
f6b0: 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28  oid (*xDestroy)(
f6c0: 76 6f 69 64 20 2a 29 3b 0a 20 20 76 6f 69 64 20  void *);.  void 
f6d0: 2a 70 55 73 65 72 44 61 74 61 3b 0a 7d 3b 0a 0a  *pUserData;.};..
f6e0: 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76  /*.** Possible v
f6f0: 61 6c 75 65 73 20 66 6f 72 20 46 75 6e 63 44 65  alues for FuncDe
f700: 66 2e 66 6c 61 67 73 2e 20 20 4e 6f 74 65 20 74  f.flags.  Note t
f710: 68 61 74 20 74 68 65 20 5f 4c 45 4e 47 54 48 20  hat the _LENGTH 
f720: 61 6e 64 20 5f 54 59 50 45 4f 46 0a 2a 2a 20 76  and _TYPEOF.** v
f730: 61 6c 75 65 73 20 6d 75 73 74 20 63 6f 72 72 65  alues must corre
f740: 73 70 6f 6e 64 20 74 6f 20 4f 50 46 4c 41 47 5f  spond to OPFLAG_
f750: 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50  LENGTHARG and OP
f760: 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 2e 20  FLAG_TYPEOFARG. 
f770: 20 41 6e 64 0a 2a 2a 20 53 51 4c 49 54 45 5f 46   And.** SQLITE_F
f780: 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 6d 75 73  UNC_CONSTANT mus
f790: 74 20 62 65 20 74 68 65 20 73 61 6d 65 20 61 73  t be the same as
f7a0: 20 53 51 4c 49 54 45 5f 44 45 54 45 52 4d 49 4e   SQLITE_DETERMIN
f7b0: 49 53 54 49 43 2e 20 20 54 68 65 72 65 0a 2a 2a  ISTIC.  There.**
f7c0: 20 61 72 65 20 61 73 73 65 72 74 28 29 20 73 74   are assert() st
f7d0: 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  atements in the 
f7e0: 63 6f 64 65 20 74 6f 20 76 65 72 69 66 79 20 74  code to verify t
f7f0: 68 69 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65  his..**.** Value
f800: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e   constraints (en
f810: 66 6f 72 63 65 64 20 76 69 61 20 61 73 73 65 72  forced via asser
f820: 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20 53 51 4c  t()):.**     SQL
f830: 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 20  ITE_FUNC_MINMAX 
f840: 20 20 20 3d 3d 20 20 4e 43 5f 4d 69 6e 4d 61 78     ==  NC_MinMax
f850: 41 67 67 20 20 20 20 20 20 3d 3d 20 53 46 5f 4d  Agg      == SF_M
f860: 69 6e 4d 61 78 41 67 67 0a 2a 2a 20 20 20 20 20  inMaxAgg.**     
f870: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47  SQLITE_FUNC_LENG
f880: 54 48 20 20 20 20 3d 3d 20 20 4f 50 46 4c 41 47  TH    ==  OPFLAG
f890: 5f 4c 45 4e 47 54 48 41 52 47 0a 2a 2a 20 20 20  _LENGTHARG.**   
f8a0: 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59    SQLITE_FUNC_TY
f8b0: 50 45 4f 46 20 20 20 20 3d 3d 20 20 4f 50 46 4c  PEOF    ==  OPFL
f8c0: 41 47 5f 54 59 50 45 4f 46 41 52 47 0a 2a 2a 20  AG_TYPEOFARG.** 
f8d0: 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f      SQLITE_FUNC_
f8e0: 43 4f 4e 53 54 41 4e 54 20 20 3d 3d 20 20 53 51  CONSTANT  ==  SQ
f8f0: 4c 49 54 45 5f 44 45 54 45 52 4d 49 4e 49 53 54  LITE_DETERMINIST
f900: 49 43 20 66 72 6f 6d 20 74 68 65 20 41 50 49 0a  IC from the API.
f910: 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55  **     SQLITE_FU
f920: 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 20 64 65 70  NC_ENCMASK   dep
f930: 65 6e 64 73 20 6f 6e 20 53 51 4c 49 54 45 5f 55  ends on SQLITE_U
f940: 54 46 2a 20 6d 61 63 72 6f 73 20 69 6e 20 74 68  TF* macros in th
f950: 65 20 41 50 49 0a 2a 2f 0a 23 64 65 66 69 6e 65  e API.*/.#define
f960: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43   SQLITE_FUNC_ENC
f970: 4d 41 53 4b 20 20 30 78 30 30 30 33 20 2f 2a 20  MASK  0x0003 /* 
f980: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c  SQLITE_UTF8, SQL
f990: 49 54 45 5f 55 54 46 31 36 42 45 20 6f 72 20 55  ITE_UTF16BE or U
f9a0: 54 46 31 36 4c 45 20 2a 2f 0a 23 64 65 66 69 6e  TF16LE */.#defin
f9b0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 49  e SQLITE_FUNC_LI
f9c0: 4b 45 20 20 20 20 20 30 78 30 30 30 34 20 2f 2a  KE     0x0004 /*
f9d0: 20 43 61 6e 64 69 64 61 74 65 20 66 6f 72 20 74   Candidate for t
f9e0: 68 65 20 4c 49 4b 45 20 6f 70 74 69 6d 69 7a 61  he LIKE optimiza
f9f0: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
fa00: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 41 53 45  SQLITE_FUNC_CASE
fa10: 20 20 20 20 20 30 78 30 30 30 38 20 2f 2a 20 43       0x0008 /* C
fa20: 61 73 65 2d 73 65 6e 73 69 74 69 76 65 20 4c 49  ase-sensitive LI
fa30: 4b 45 2d 74 79 70 65 20 66 75 6e 63 74 69 6f 6e  KE-type function
fa40: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
fa50: 54 45 5f 46 55 4e 43 5f 45 50 48 45 4d 20 20 20  TE_FUNC_EPHEM   
fa60: 20 30 78 30 30 31 30 20 2f 2a 20 45 70 68 65 6d   0x0010 /* Ephem
fa70: 65 72 61 6c 2e 20 20 44 65 6c 65 74 65 20 77 69  eral.  Delete wi
fa80: 74 68 20 56 44 42 45 20 2a 2f 0a 23 64 65 66 69  th VDBE */.#defi
fa90: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  ne SQLITE_FUNC_N
faa0: 45 45 44 43 4f 4c 4c 20 30 78 30 30 32 30 20 2f  EEDCOLL 0x0020 /
fab0: 2a 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e 63  * sqlite3GetFunc
fac0: 43 6f 6c 6c 53 65 71 28 29 20 6d 69 67 68 74 20  CollSeq() might 
fad0: 62 65 20 63 61 6c 6c 65 64 2a 2f 0a 23 64 65 66  be called*/.#def
fae0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
faf0: 4c 45 4e 47 54 48 20 20 20 30 78 30 30 34 30 20  LENGTH   0x0040 
fb00: 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 6c 65 6e 67  /* Built-in leng
fb10: 74 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  th() function */
fb20: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
fb30: 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20 30 78  FUNC_TYPEOF   0x
fb40: 30 30 38 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  0080 /* Built-in
fb50: 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69   typeof() functi
fb60: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
fb70: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e 54 20  LITE_FUNC_COUNT 
fb80: 20 20 20 30 78 30 31 30 30 20 2f 2a 20 42 75 69     0x0100 /* Bui
fb90: 6c 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29 20 61  lt-in count(*) a
fba0: 67 67 72 65 67 61 74 65 20 2a 2f 0a 23 64 65 66  ggregate */.#def
fbb0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
fbc0: 43 4f 41 4c 45 53 43 45 20 30 78 30 32 30 30 20  COALESCE 0x0200 
fbd0: 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 61 6c  /* Built-in coal
fbe0: 65 73 63 65 28 29 20 6f 72 20 69 66 6e 75 6c 6c  esce() or ifnull
fbf0: 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  () */.#define SQ
fc00: 4c 49 54 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b 45  LITE_FUNC_UNLIKE
fc10: 4c 59 20 30 78 30 34 30 30 20 2f 2a 20 42 75 69  LY 0x0400 /* Bui
fc20: 6c 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79 28 29  lt-in unlikely()
fc30: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
fc40: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
fc50: 5f 43 4f 4e 53 54 41 4e 54 20 30 78 30 38 30 30  _CONSTANT 0x0800
fc60: 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 69 6e 70   /* Constant inp
fc70: 75 74 73 20 67 69 76 65 20 61 20 63 6f 6e 73 74  uts give a const
fc80: 61 6e 74 20 6f 75 74 70 75 74 20 2a 2f 0a 23 64  ant output */.#d
fc90: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
fca0: 43 5f 4d 49 4e 4d 41 58 20 20 20 30 78 31 30 30  C_MINMAX   0x100
fcb0: 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 6d 69  0 /* True for mi
fcc0: 6e 28 29 20 61 6e 64 20 6d 61 78 28 29 20 61 67  n() and max() ag
fcd0: 67 72 65 67 61 74 65 73 20 2a 2f 0a 23 64 65 66  gregates */.#def
fce0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
fcf0: 53 4c 4f 43 48 4e 47 20 20 30 78 32 30 30 30 20  SLOCHNG  0x2000 
fd00: 2f 2a 20 22 53 6c 6f 77 20 43 68 61 6e 67 65 22  /* "Slow Change"
fd10: 2e 20 56 61 6c 75 65 20 63 6f 6e 73 74 61 6e 74  . Value constant
fd20: 20 64 75 72 69 6e 67 20 61 0a 20 20 20 20 20 20   during a.      
fd30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fd40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
fd50: 20 73 69 6e 67 6c 65 20 71 75 65 72 79 20 2d 20   single query - 
fd60: 6d 69 67 68 74 20 63 68 61 6e 67 65 20 6f 76 65  might change ove
fd70: 72 20 74 69 6d 65 20 2a 2f 0a 23 64 65 66 69 6e  r time */.#defin
fd80: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 41 46  e SQLITE_FUNC_AF
fd90: 46 49 4e 49 54 59 20 30 78 34 30 30 30 20 2f 2a  FINITY 0x4000 /*
fda0: 20 42 75 69 6c 74 2d 69 6e 20 61 66 66 69 6e 69   Built-in affini
fdb0: 74 79 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  ty() function */
fdc0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
fdd0: 46 55 4e 43 5f 4f 46 46 53 45 54 20 20 20 30 78  FUNC_OFFSET   0x
fde0: 38 30 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  8000 /* Built-in
fdf0: 20 73 71 6c 69 74 65 5f 6f 66 66 73 65 74 28 29   sqlite_offset()
fe00: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
fe10: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
fe20: 5f 57 49 4e 44 4f 57 20 20 30 78 31 30 30 30 30  _WINDOW  0x10000
fe30: 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 77 69 6e   /* Built-in win
fe40: 64 6f 77 2d 6f 6e 6c 79 20 66 75 6e 63 74 69 6f  dow-only functio
fe50: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
fe60: 49 54 45 5f 46 55 4e 43 5f 57 49 4e 44 4f 57 5f  ITE_FUNC_WINDOW_
fe70: 53 49 5a 45 20 20 30 78 32 30 30 30 30 20 20 2f  SIZE  0x20000  /
fe80: 2a 20 52 65 71 75 69 72 65 73 20 70 61 72 74 69  * Requires parti
fe90: 74 69 6f 6e 20 73 69 7a 65 20 61 73 20 61 72 67  tion size as arg
fea0: 2e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  . */../*.** The 
feb0: 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 72 65 65 20  following three 
fec0: 6d 61 63 72 6f 73 2c 20 46 55 4e 43 54 49 4f 4e  macros, FUNCTION
fed0: 28 29 2c 20 4c 49 4b 45 46 55 4e 43 28 29 20 61  (), LIKEFUNC() a
fee0: 6e 64 20 41 47 47 52 45 47 41 54 45 28 29 20 61  nd AGGREGATE() a
fef0: 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 72  re.** used to cr
ff00: 65 61 74 65 20 74 68 65 20 69 6e 69 74 69 61 6c  eate the initial
ff10: 69 7a 65 72 73 20 66 6f 72 20 74 68 65 20 46 75  izers for the Fu
ff20: 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65 73  ncDef structures
ff30: 2e 0a 2a 2a 0a 2a 2a 20 20 20 46 55 4e 43 54 49  ..**.**   FUNCTI
ff40: 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  ON(zName, nArg, 
ff50: 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
ff60: 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f  ).**     Used to
ff70: 20 63 72 65 61 74 65 20 61 20 73 63 61 6c 61 72   create a scalar
ff80: 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69   function defini
ff90: 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69  tion of a functi
ffa0: 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20 20  on zName.**     
ffb0: 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 43  implemented by C
ffc0: 20 66 75 6e 63 74 69 6f 6e 20 78 46 75 6e 63 20   function xFunc 
ffd0: 74 68 61 74 20 61 63 63 65 70 74 73 20 6e 41 72  that accepts nAr
ffe0: 67 20 61 72 67 75 6d 65 6e 74 73 2e 20 54 68 65  g arguments. The
fff0: 0a 2a 2a 20 20 20 20 20 76 61 6c 75 65 20 70 61  .**     value pa
10000 73 73 65 64 20 61 73 20 69 41 72 67 20 69 73 20  ssed as iArg is 
10010 63 61 73 74 20 74 6f 20 61 20 28 76 6f 69 64 2a  cast to a (void*
10020 29 20 61 6e 64 20 6d 61 64 65 20 61 76 61 69 6c  ) and made avail
10030 61 62 6c 65 0a 2a 2a 20 20 20 20 20 61 73 20 74  able.**     as t
10040 68 65 20 75 73 65 72 2d 64 61 74 61 20 28 73 71  he user-data (sq
10050 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28  lite3_user_data(
10060 29 29 20 66 6f 72 20 74 68 65 20 66 75 6e 63 74  )) for the funct
10070 69 6f 6e 2e 20 49 66 0a 2a 2a 20 20 20 20 20 61  ion. If.**     a
10080 72 67 75 6d 65 6e 74 20 62 4e 43 20 69 73 20 74  rgument bNC is t
10090 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20 53 51  rue, then the SQ
100a0 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
100b0 4c 4c 20 66 6c 61 67 20 69 73 20 73 65 74 2e 0a  LL flag is set..
100c0 2a 2a 0a 2a 2a 20 20 20 56 46 55 4e 43 54 49 4f  **.**   VFUNCTIO
100d0 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  N(zName, nArg, i
100e0 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
100f0 0a 2a 2a 20 20 20 20 20 4c 69 6b 65 20 46 55 4e  .**     Like FUN
10100 43 54 49 4f 4e 20 65 78 63 65 70 74 20 69 74 20  CTION except it 
10110 6f 6d 69 74 73 20 74 68 65 20 53 51 4c 49 54 45  omits the SQLITE
10120 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66  _FUNC_CONSTANT f
10130 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 44 46 55  lag..**.**   DFU
10140 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
10150 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
10160 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b  Func).**     Lik
10170 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63 65 70  e FUNCTION excep
10180 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65 20 53  t it omits the S
10190 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
101a0 41 4e 54 20 66 6c 61 67 20 61 6e 64 0a 2a 2a 20  ANT flag and.** 
101b0 20 20 20 20 61 64 64 73 20 74 68 65 20 53 51 4c      adds the SQL
101c0 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47  ITE_FUNC_SLOCHNG
101d0 20 66 6c 61 67 2e 20 20 55 73 65 64 20 66 6f 72   flag.  Used for
101e0 20 64 61 74 65 20 26 20 74 69 6d 65 20 66 75 6e   date & time fun
101f0 63 74 69 6f 6e 73 0a 2a 2a 20 20 20 20 20 61 6e  ctions.**     an
10200 64 20 66 75 6e 63 74 69 6f 6e 73 20 6c 69 6b 65  d functions like
10210 20 73 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28   sqlite_version(
10220 29 20 74 68 61 74 20 63 61 6e 20 63 68 61 6e 67  ) that can chang
10230 65 2c 20 62 75 74 20 6e 6f 74 20 64 75 72 69 6e  e, but not durin
10240 67 0a 2a 2a 20 20 20 20 20 61 20 73 69 6e 67 6c  g.**     a singl
10250 65 20 71 75 65 72 79 2e 20 20 54 68 65 20 69 41  e query.  The iA
10260 72 67 20 69 73 20 69 67 6e 6f 72 65 64 2e 20 20  rg is ignored.  
10270 54 68 65 20 75 73 65 72 2d 64 61 74 61 20 69 73  The user-data is
10280 20 61 6c 77 61 79 73 20 73 65 74 0a 2a 2a 20 20   always set.**  
10290 20 20 20 74 6f 20 61 20 4e 55 4c 4c 20 70 6f 69     to a NULL poi
102a0 6e 74 65 72 2e 20 20 54 68 65 20 62 4e 43 20 70  nter.  The bNC p
102b0 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20  arameter is not 
102c0 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 55  used..**.**   PU
102d0 52 45 5f 44 41 54 45 28 7a 4e 61 6d 65 2c 20 6e  RE_DATE(zName, n
102e0 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
102f0 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73  xFunc).**     Us
10300 65 64 20 66 6f 72 20 22 70 75 72 65 22 20 64 61  ed for "pure" da
10310 74 65 2f 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e  te/time function
10320 73 2c 20 74 68 69 73 20 6d 61 63 72 6f 20 69 73  s, this macro is
10330 20 6c 69 6b 65 20 44 46 55 4e 43 54 49 4f 4e 0a   like DFUNCTION.
10340 2a 2a 20 20 20 20 20 65 78 63 65 70 74 20 74 68  **     except th
10350 61 74 20 69 74 20 64 6f 65 73 20 73 65 74 20 74  at it does set t
10360 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  he SQLITE_FUNC_C
10370 4f 4e 53 54 41 4e 54 20 66 6c 61 67 73 2e 20 20  ONSTANT flags.  
10380 69 41 72 67 20 69 73 0a 2a 2a 20 20 20 20 20 69  iArg is.**     i
10390 67 6e 6f 72 65 64 20 61 6e 64 20 74 68 65 20 75  gnored and the u
103a0 73 65 72 2d 64 61 74 61 20 66 6f 72 20 74 68 65  ser-data for the
103b0 73 65 20 66 75 6e 63 74 69 6f 6e 73 20 69 73 20  se functions is 
103c0 73 65 74 20 74 6f 20 61 6e 20 0a 2a 2a 20 20 20  set to an .**   
103d0 20 20 61 72 62 69 74 72 61 72 79 20 6e 6f 6e 2d    arbitrary non-
103e0 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 2e 20 20 54  NULL pointer.  T
103f0 68 65 20 62 4e 43 20 70 61 72 61 6d 65 74 65 72  he bNC parameter
10400 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a   is not used..**
10410 0a 2a 2a 20 20 20 41 47 47 52 45 47 41 54 45 28  .**   AGGREGATE(
10420 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
10430 67 2c 20 62 4e 43 2c 20 78 53 74 65 70 2c 20 78  g, bNC, xStep, x
10440 46 69 6e 61 6c 29 0a 2a 2a 20 20 20 20 20 55 73  Final).**     Us
10450 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20  ed to create an 
10460 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
10470 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d  on definition im
10480 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20  plemented by.** 
10490 20 20 20 20 74 68 65 20 43 20 66 75 6e 63 74 69      the C functi
104a0 6f 6e 73 20 78 53 74 65 70 20 61 6e 64 20 78 46  ons xStep and xF
104b0 69 6e 61 6c 2e 20 54 68 65 20 66 69 72 73 74 20  inal. The first 
104c0 66 6f 75 72 20 70 61 72 61 6d 65 74 65 72 73 0a  four parameters.
104d0 2a 2a 20 20 20 20 20 61 72 65 20 69 6e 74 65 72  **     are inter
104e0 70 72 65 74 65 64 20 69 6e 20 74 68 65 20 73 61  preted in the sa
104f0 6d 65 20 77 61 79 20 61 73 20 74 68 65 20 66 69  me way as the fi
10500 72 73 74 20 34 20 70 61 72 61 6d 65 74 65 72 73  rst 4 parameters
10510 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54   to.**     FUNCT
10520 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 57  ION()..**.**   W
10530 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
10540 6e 41 72 67 2c 20 69 41 72 67 2c 20 78 53 74 65  nArg, iArg, xSte
10550 70 2c 20 78 46 69 6e 61 6c 2c 20 78 56 61 6c 75  p, xFinal, xValu
10560 65 2c 20 78 49 6e 76 65 72 73 65 29 0a 2a 2a 20  e, xInverse).** 
10570 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61      Used to crea
10580 74 65 20 61 6e 20 61 67 67 72 65 67 61 74 65 20  te an aggregate 
10590 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74  function definit
105a0 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20  ion implemented 
105b0 62 79 0a 2a 2a 20 20 20 20 20 74 68 65 20 43 20  by.**     the C 
105c0 66 75 6e 63 74 69 6f 6e 73 20 78 53 74 65 70 20  functions xStep 
105d0 61 6e 64 20 78 46 69 6e 61 6c 2e 20 54 68 65 20  and xFinal. The 
105e0 66 69 72 73 74 20 66 6f 75 72 20 70 61 72 61 6d  first four param
105f0 65 74 65 72 73 0a 2a 2a 20 20 20 20 20 61 72 65  eters.**     are
10600 20 69 6e 74 65 72 70 72 65 74 65 64 20 69 6e 20   interpreted in 
10610 74 68 65 20 73 61 6d 65 20 77 61 79 20 61 73 20  the same way as 
10620 74 68 65 20 66 69 72 73 74 20 34 20 70 61 72 61  the first 4 para
10630 6d 65 74 65 72 73 20 74 6f 0a 2a 2a 20 20 20 20  meters to.**    
10640 20 46 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a 2a 0a   FUNCTION()..**.
10650 2a 2a 20 20 20 4c 49 4b 45 46 55 4e 43 28 7a 4e  **   LIKEFUNC(zN
10660 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c  ame, nArg, pArg,
10670 20 66 6c 61 67 73 29 0a 2a 2a 20 20 20 20 20 55   flags).**     U
10680 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20  sed to create a 
10690 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20  scalar function 
106a0 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20  definition of a 
106b0 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 0a 2a  function zName.*
106c0 2a 20 20 20 20 20 74 68 61 74 20 61 63 63 65 70  *     that accep
106d0 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74  ts nArg argument
106e0 73 20 61 6e 64 20 69 73 20 69 6d 70 6c 65 6d 65  s and is impleme
106f0 6e 74 65 64 20 62 79 20 61 20 63 61 6c 6c 20 74  nted by a call t
10700 6f 20 43 0a 2a 2a 20 20 20 20 20 66 75 6e 63 74  o C.**     funct
10710 69 6f 6e 20 6c 69 6b 65 46 75 6e 63 2e 20 41 72  ion likeFunc. Ar
10720 67 75 6d 65 6e 74 20 70 41 72 67 20 69 73 20 63  gument pArg is c
10730 61 73 74 20 74 6f 20 61 20 28 76 6f 69 64 20 2a  ast to a (void *
10740 29 20 61 6e 64 20 6d 61 64 65 0a 2a 2a 20 20 20  ) and made.**   
10750 20 20 61 76 61 69 6c 61 62 6c 65 20 61 73 20 74    available as t
10760 68 65 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 72  he function user
10770 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75  -data (sqlite3_u
10780 73 65 72 5f 64 61 74 61 28 29 29 2e 20 54 68 65  ser_data()). The
10790 0a 2a 2a 20 20 20 20 20 46 75 6e 63 44 65 66 2e  .**     FuncDef.
107a0 66 6c 61 67 73 20 76 61 72 69 61 62 6c 65 20 69  flags variable i
107b0 73 20 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c  s set to the val
107c0 75 65 20 70 61 73 73 65 64 20 61 73 20 74 68 65  ue passed as the
107d0 20 66 6c 61 67 73 0a 2a 2a 20 20 20 20 20 70 61   flags.**     pa
107e0 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a 23 64 65 66  rameter..*/.#def
107f0 69 6e 65 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61  ine FUNCTION(zNa
10800 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
10810 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20  bNC, xFunc) \.  
10820 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55  {nArg, SQLITE_FU
10830 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49  NC_CONSTANT|SQLI
10840 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c  TE_UTF8|(bNC*SQL
10850 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
10860 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f  L), \.   SQLITE_
10870 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29  INT_TO_PTR(iArg)
10880 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 30  , 0, xFunc, 0, 0
10890 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d  , 0, #zName, {0}
108a0 20 7d 0a 23 64 65 66 69 6e 65 20 56 46 55 4e 43   }.#define VFUNC
108b0 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
108c0 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
108d0 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
108e0 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a  QLITE_UTF8|(bNC*
108f0 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
10900 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49  COLL), \.   SQLI
10910 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41  TE_INT_TO_PTR(iA
10920 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30  rg), 0, xFunc, 0
10930 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  , 0, 0, #zName, 
10940 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 44 46  {0} }.#define DF
10950 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
10960 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
10970 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67  xFunc) \.  {nArg
10980 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c  , SQLITE_FUNC_SL
10990 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46  OCHNG|SQLITE_UTF
109a0 38 2c 20 5c 0a 20 20 20 30 2c 20 30 2c 20 78 46  8, \.   0, 0, xF
109b0 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a  unc, 0, 0, 0, #z
109c0 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66  Name, {0} }.#def
109d0 69 6e 65 20 50 55 52 45 5f 44 41 54 45 28 7a 4e  ine PURE_DATE(zN
109e0 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
109f0 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20   bNC, xFunc) \. 
10a00 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46   {nArg, SQLITE_F
10a10 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49  UNC_SLOCHNG|SQLI
10a20 54 45 5f 55 54 46 38 7c 53 51 4c 49 54 45 5f 46  TE_UTF8|SQLITE_F
10a30 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 2c 20 5c 0a  UNC_CONSTANT, \.
10a40 20 20 20 28 76 6f 69 64 2a 29 26 73 71 6c 69 74     (void*)&sqlit
10a50 65 33 43 6f 6e 66 69 67 2c 20 30 2c 20 78 46 75  e3Config, 0, xFu
10a60 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e  nc, 0, 0, 0, #zN
10a70 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69  ame, {0} }.#defi
10a80 6e 65 20 46 55 4e 43 54 49 4f 4e 32 28 7a 4e 61  ne FUNCTION2(zNa
10a90 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
10aa0 62 4e 43 2c 20 78 46 75 6e 63 2c 20 65 78 74 72  bNC, xFunc, extr
10ab0 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72  aFlags) \.  {nAr
10ac0 67 2c 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  g,SQLITE_FUNC_CO
10ad0 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54  NSTANT|SQLITE_UT
10ae0 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46  F8|(bNC*SQLITE_F
10af0 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78  UNC_NEEDCOLL)|ex
10b00 74 72 61 46 6c 61 67 73 2c 5c 0a 20 20 20 53 51  traFlags,\.   SQ
10b10 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28  LITE_INT_TO_PTR(
10b20 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c  iArg), 0, xFunc,
10b30 20 30 2c 20 30 2c 20 30 2c 20 23 7a 4e 61 6d 65   0, 0, 0, #zName
10b40 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20  , {0} }.#define 
10b50 53 54 52 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e 61  STR_FUNCTION(zNa
10b60 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20  me, nArg, pArg, 
10b70 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20  bNC, xFunc) \.  
10b80 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55  {nArg, SQLITE_FU
10b90 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49 54  NC_SLOCHNG|SQLIT
10ba0 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49  E_UTF8|(bNC*SQLI
10bb0 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
10bc0 29 2c 20 5c 0a 20 20 20 70 41 72 67 2c 20 30 2c  ), \.   pArg, 0,
10bd0 20 78 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c   xFunc, 0, 0, 0,
10be0 20 23 7a 4e 61 6d 65 2c 20 7d 0a 23 64 65 66 69   #zName, }.#defi
10bf0 6e 65 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d  ne LIKEFUNC(zNam
10c00 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c  e, nArg, arg, fl
10c10 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  ags) \.  {nArg, 
10c20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
10c30 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38  TANT|SQLITE_UTF8
10c40 7c 66 6c 61 67 73 2c 20 5c 0a 20 20 20 28 76 6f  |flags, \.   (vo
10c50 69 64 20 2a 29 61 72 67 2c 20 30 2c 20 6c 69 6b  id *)arg, 0, lik
10c60 65 46 75 6e 63 2c 20 30 2c 20 30 2c 20 30 2c 20  eFunc, 0, 0, 0, 
10c70 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64  #zName, {0} }.#d
10c80 65 66 69 6e 65 20 41 47 47 52 45 47 41 54 45 28  efine AGGREGATE(
10c90 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67  zName, nArg, arg
10ca0 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69  , nc, xStep, xFi
10cb0 6e 61 6c 2c 20 78 56 61 6c 75 65 29 20 5c 0a 20  nal, xValue) \. 
10cc0 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55   {nArg, SQLITE_U
10cd0 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46  TF8|(nc*SQLITE_F
10ce0 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c  UNC_NEEDCOLL), \
10cf0 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  .   SQLITE_INT_T
10d00 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20 78  O_PTR(arg), 0, x
10d10 53 74 65 70 2c 78 46 69 6e 61 6c 2c 78 56 61 6c  Step,xFinal,xVal
10d20 75 65 2c 30 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d  ue,0,#zName, {0}
10d30 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45 47  }.#define AGGREG
10d40 41 54 45 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  ATE2(zName, nArg
10d50 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70  , arg, nc, xStep
10d60 2c 20 78 46 69 6e 61 6c 2c 20 65 78 74 72 61 46  , xFinal, extraF
10d70 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  lags) \.  {nArg,
10d80 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63   SQLITE_UTF8|(nc
10d90 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
10da0 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67  DCOLL)|extraFlag
10db0 73 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49  s, \.   SQLITE_I
10dc0 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c 20  NT_TO_PTR(arg), 
10dd0 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c  0, xStep,xFinal,
10de0 78 46 69 6e 61 6c 2c 30 2c 23 7a 4e 61 6d 65 2c  xFinal,0,#zName,
10df0 20 7b 30 7d 7d 0a 0a 23 64 65 66 69 6e 65 20 57   {0}}..#define W
10e00 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c  AGGREGATE(zName,
10e10 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20   nArg, arg, nc, 
10e20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20 78  xStep, xFinal, x
10e30 56 61 6c 75 65 2c 20 78 49 6e 76 65 72 73 65 2c  Value, xInverse,
10e40 20 66 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53   f) \.  {nArg, S
10e50 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53  QLITE_UTF8|(nc*S
10e60 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
10e70 4f 4c 4c 29 7c 66 2c 20 5c 0a 20 20 20 53 51 4c  OLL)|f, \.   SQL
10e80 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61  ITE_INT_TO_PTR(a
10e90 72 67 29 2c 20 30 2c 20 78 53 74 65 70 2c 78 46  rg), 0, xStep,xF
10ea0 69 6e 61 6c 2c 78 56 61 6c 75 65 2c 78 49 6e 76  inal,xValue,xInv
10eb0 65 72 73 65 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d  erse,#zName, {0}
10ec0 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20 63 75 72  }../*.** All cur
10ed0 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 73 20  rent savepoints 
10ee0 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20  are stored in a 
10ef0 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72  linked list star
10f00 74 69 6e 67 20 61 74 0a 2a 2a 20 73 71 6c 69 74  ting at.** sqlit
10f10 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 20 54  e3.pSavepoint. T
10f20 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74  he first element
10f30 20 69 6e 20 74 68 65 20 6c 69 73 74 20 69 73 20   in the list is 
10f40 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 6c  the most recentl
10f50 79 0a 2a 2a 20 6f 70 65 6e 65 64 20 73 61 76 65  y.** opened save
10f60 70 6f 69 6e 74 2e 20 53 61 76 65 70 6f 69 6e 74  point. Savepoint
10f70 73 20 61 72 65 20 61 64 64 65 64 20 74 6f 20 74  s are added to t
10f80 68 65 20 6c 69 73 74 20 62 79 20 74 68 65 20 76  he list by the v
10f90 64 62 65 0a 2a 2a 20 4f 50 5f 53 61 76 65 70 6f  dbe.** OP_Savepo
10fa0 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  int instruction.
10fb0 0a 2a 2f 0a 73 74 72 75 63 74 20 53 61 76 65 70  .*/.struct Savep
10fc0 6f 69 6e 74 20 7b 0a 20 20 63 68 61 72 20 2a 7a  oint {.  char *z
10fd0 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
10fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
10ff0 53 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65 20 28  Savepoint name (
11000 6e 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64 29 20  nul-terminated) 
11010 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72  */.  i64 nDeferr
11020 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20  edCons;         
11030 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
11040 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 66  er of deferred f
11050 6b 20 76 69 6f 6c 61 74 69 6f 6e 73 20 2a 2f 0a  k violations */.
11060 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 49    i64 nDeferredI
11070 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20  mmCons;         
11080 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
11090 6f 66 20 64 65 66 65 72 72 65 64 20 69 6d 6d 20  of deferred imm 
110a0 66 6b 2e 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69  fk. */.  Savepoi
110b0 6e 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  nt *pNext;      
110c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
110d0 50 61 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74  Parent savepoint
110e0 20 28 69 66 20 61 6e 79 29 20 2a 2f 0a 7d 3b 0a   (if any) */.};.
110f0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
11100 77 69 6e 67 20 61 72 65 20 75 73 65 64 20 61 73  wing are used as
11110 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72 61   the second para
11120 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33  meter to sqlite3
11130 53 61 76 65 70 6f 69 6e 74 28 29 2c 0a 2a 2a 20  Savepoint(),.** 
11140 61 6e 64 20 61 73 20 74 68 65 20 50 31 20 61 72  and as the P1 ar
11150 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 4f 50  gument to the OP
11160 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72  _Savepoint instr
11170 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69  uction..*/.#defi
11180 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47  ne SAVEPOINT_BEG
11190 49 4e 20 20 20 20 20 20 30 0a 23 64 65 66 69 6e  IN      0.#defin
111a0 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45  e SAVEPOINT_RELE
111b0 41 53 45 20 20 20 20 31 0a 23 64 65 66 69 6e 65  ASE    1.#define
111c0 20 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42   SAVEPOINT_ROLLB
111d0 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20  ACK   2.../*.** 
111e0 45 61 63 68 20 53 51 4c 69 74 65 20 6d 6f 64 75  Each SQLite modu
111f0 6c 65 20 28 76 69 72 74 75 61 6c 20 74 61 62 6c  le (virtual tabl
11200 65 20 64 65 66 69 6e 69 74 69 6f 6e 29 20 69 73  e definition) is
11210 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 0a 2a   defined by an.*
11220 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  * instance of th
11230 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
11240 63 74 75 72 65 2c 20 73 74 6f 72 65 64 20 69 6e  cture, stored in
11250 20 74 68 65 20 73 71 6c 69 74 65 33 2e 61 4d 6f   the sqlite3.aMo
11260 64 75 6c 65 0a 2a 2a 20 68 61 73 68 20 74 61 62  dule.** hash tab
11270 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4d 6f  le..*/.struct Mo
11280 64 75 6c 65 20 7b 0a 20 20 63 6f 6e 73 74 20 73  dule {.  const s
11290 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
112a0 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 2f 2a  Module;       /*
112b0 20 43 61 6c 6c 62 61 63 6b 20 70 6f 69 6e 74 65   Callback pointe
112c0 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  rs */.  const ch
112d0 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
112e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
112f0 4e 61 6d 65 20 70 61 73 73 65 64 20 74 6f 20 63  Name passed to c
11300 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a  reate_module() *
11310 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 78 3b 20  /.  void *pAux; 
11320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11330 20 20 20 20 20 20 20 20 20 2f 2a 20 70 41 75 78           /* pAux
11340 20 70 61 73 73 65 64 20 74 6f 20 63 72 65 61 74   passed to creat
11350 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20  e_module() */.  
11360 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29  void (*xDestroy)
11370 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 20 20  (void *);       
11380 20 20 20 20 20 2f 2a 20 4d 6f 64 75 6c 65 20 64       /* Module d
11390 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69  estructor functi
113a0 6f 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  on */.  Table *p
113b0 45 70 6f 54 61 62 3b 20 20 20 20 20 20 20 20 20  EpoTab;         
113c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
113d0 45 70 6f 6e 79 6d 6f 75 73 20 74 61 62 6c 65 20  Eponymous table 
113e0 66 6f 72 20 74 68 69 73 20 6d 6f 64 75 6c 65 20  for this module 
113f0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66  */.};../*.** inf
11400 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65  ormation about e
11410 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e  ach column of an
11420 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20 68 65   SQL table is he
11430 6c 64 20 69 6e 20 61 6e 20 69 6e 73 74 61 6e 63  ld in an instanc
11440 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72  e.** of this str
11450 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63  ucture..*/.struc
11460 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20 63 68 61  t Column {.  cha
11470 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 2f 2a  r *zName;     /*
11480 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 63 6f   Name of this co
11490 6c 75 6d 6e 2c 20 5c 30 30 30 2c 20 74 68 65 6e  lumn, \000, then
114a0 20 74 68 65 20 74 79 70 65 20 2a 2f 0a 20 20 45   the type */.  E
114b0 78 70 72 20 2a 70 44 66 6c 74 3b 20 20 20 20 20  xpr *pDflt;     
114c0 2f 2a 20 44 65 66 61 75 6c 74 20 76 61 6c 75 65  /* Default value
114d0 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20   of this column 
114e0 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 6c  */.  char *zColl
114f0 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69  ;     /* Collati
11500 6e 67 20 73 65 71 75 65 6e 63 65 2e 20 20 49 66  ng sequence.  If
11510 20 4e 55 4c 4c 2c 20 75 73 65 20 74 68 65 20 64   NULL, use the d
11520 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6e  efault */.  u8 n
11530 6f 74 4e 75 6c 6c 3b 20 20 20 20 20 20 2f 2a 20  otNull;      /* 
11540 41 6e 20 4f 45 5f 20 63 6f 64 65 20 66 6f 72 20  An OE_ code for 
11550 68 61 6e 64 6c 69 6e 67 20 61 20 4e 4f 54 20 4e  handling a NOT N
11560 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a  ULL constraint *
11570 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74  /.  char affinit
11580 79 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74  y;   /* One of t
11590 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 2e 2e  he SQLITE_AFF_..
115a0 2e 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38  . values */.  u8
115b0 20 73 7a 45 73 74 3b 20 20 20 20 20 20 20 20 2f   szEst;        /
115c0 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65  * Estimated size
115d0 20 6f 66 20 76 61 6c 75 65 20 69 6e 20 74 68 69   of value in thi
115e0 73 20 63 6f 6c 75 6d 6e 2e 20 73 69 7a 65 6f 66  s column. sizeof
115f0 28 49 4e 54 29 3d 3d 31 20 2a 2f 0a 20 20 75 38  (INT)==1 */.  u8
11600 20 63 6f 6c 46 6c 61 67 73 3b 20 20 20 20 20 2f   colFlags;     /
11610 2a 20 42 6f 6f 6c 65 61 6e 20 70 72 6f 70 65 72  * Boolean proper
11620 74 69 65 73 2e 20 20 53 65 65 20 43 4f 4c 46 4c  ties.  See COLFL
11630 41 47 5f 20 64 65 66 69 6e 65 73 20 62 65 6c 6f  AG_ defines belo
11640 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f  w */.};../* Allo
11650 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 43  wed values for C
11660 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61 67 73 3a 0a  olumn.colFlags:.
11670 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c  */.#define COLFL
11680 41 47 5f 50 52 49 4d 4b 45 59 20 20 30 78 30 30  AG_PRIMKEY  0x00
11690 30 31 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20  01    /* Column 
116a0 69 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 70  is part of the p
116b0 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64  rimary key */.#d
116c0 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 49  efine COLFLAG_HI
116d0 44 44 45 4e 20 20 20 30 78 30 30 30 32 20 20 20  DDEN   0x0002   
116e0 20 2f 2a 20 41 20 68 69 64 64 65 6e 20 63 6f 6c   /* A hidden col
116f0 75 6d 6e 20 69 6e 20 61 20 76 69 72 74 75 61 6c  umn in a virtual
11700 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e   table */.#defin
11710 65 20 43 4f 4c 46 4c 41 47 5f 48 41 53 54 59 50  e COLFLAG_HASTYP
11720 45 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20  E  0x0004    /* 
11730 54 79 70 65 20 6e 61 6d 65 20 66 6f 6c 6c 6f 77  Type name follow
11740 73 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 2a 2f  s column name */
11750 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47  .#define COLFLAG
11760 5f 55 4e 49 51 55 45 20 20 20 30 78 30 30 30 38  _UNIQUE   0x0008
11770 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 64 65      /* Column de
11780 66 20 63 6f 6e 74 61 69 6e 73 20 22 55 4e 49 51  f contains "UNIQ
11790 55 45 22 20 6f 72 20 22 50 4b 22 20 2a 2f 0a 23  UE" or "PK" */.#
117a0 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 53  define COLFLAG_S
117b0 4f 52 54 45 52 52 45 46 20 30 78 30 30 31 30 20  ORTERREF 0x0010 
117c0 20 20 2f 2a 20 55 73 65 20 73 6f 72 74 65 72 2d    /* Use sorter-
117d0 72 65 66 73 20 77 69 74 68 20 74 68 69 73 20 63  refs with this c
117e0 6f 6c 75 6d 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  olumn */../*.** 
117f0 41 20 22 43 6f 6c 6c 61 74 69 6e 67 20 53 65 71  A "Collating Seq
11800 75 65 6e 63 65 22 20 69 73 20 64 65 66 69 6e 65  uence" is define
11810 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65  d by an instance
11820 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
11830 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20  g.** structure. 
11840 43 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20 61 20  Conceptually, a 
11850 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
11860 63 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61  ce consists of a
11870 20 6e 61 6d 65 20 61 6e 64 0a 2a 2a 20 61 20 63   name and.** a c
11880 6f 6d 70 61 72 69 73 6f 6e 20 72 6f 75 74 69 6e  omparison routin
11890 65 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 74  e that defines t
118a0 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68 61 74  he order of that
118b0 20 73 65 71 75 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a   sequence..**.**
118c0 20 49 66 20 43 6f 6c 6c 53 65 71 2e 78 43 6d 70   If CollSeq.xCmp
118d0 20 69 73 20 4e 55 4c 4c 2c 20 69 74 20 6d 65 61   is NULL, it mea
118e0 6e 73 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 63  ns that the.** c
118f0 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
11900 65 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 20  e is undefined. 
11910 20 49 6e 64 69 63 65 73 20 62 75 69 6c 74 20 6f   Indices built o
11920 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 0a 2a  n an undefined.*
11930 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * collating sequ
11940 65 6e 63 65 20 6d 61 79 20 6e 6f 74 20 62 65 20  ence may not be 
11950 72 65 61 64 20 6f 72 20 77 72 69 74 74 65 6e 2e  read or written.
11960 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 6c 53  .*/.struct CollS
11970 65 71 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  eq {.  char *zNa
11980 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  me;          /* 
11990 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 6c  Name of the coll
119a0 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2c 20  ating sequence, 
119b0 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 2a 2f  UTF-8 encoded */
119c0 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20  .  u8 enc;      
119d0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
119e0 20 65 6e 63 6f 64 69 6e 67 20 68 61 6e 64 6c 65   encoding handle
119f0 64 20 62 79 20 78 43 6d 70 28 29 20 2a 2f 0a 20  d by xCmp() */. 
11a00 20 76 6f 69 64 20 2a 70 55 73 65 72 3b 20 20 20   void *pUser;   
11a10 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
11a20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6d 70  argument to xCmp
11a30 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43  () */.  int (*xC
11a40 6d 70 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63  mp)(void*,int, c
11a50 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c  onst void*, int,
11a60 20 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20   const void*);. 
11a70 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f   void (*xDel)(vo
11a80 69 64 2a 29 3b 20 20 2f 2a 20 44 65 73 74 72 75  id*);  /* Destru
11a90 63 74 6f 72 20 66 6f 72 20 70 55 73 65 72 20 2a  ctor for pUser *
11aa0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 6f  /.};../*.** A so
11ab0 72 74 20 6f 72 64 65 72 20 63 61 6e 20 62 65 20  rt order can be 
11ac0 65 69 74 68 65 72 20 41 53 43 20 6f 72 20 44 45  either ASC or DE
11ad0 53 43 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  SC..*/.#define S
11ae0 51 4c 49 54 45 5f 53 4f 5f 41 53 43 20 20 20 20  QLITE_SO_ASC    
11af0 20 20 20 30 20 20 2f 2a 20 53 6f 72 74 20 69 6e     0  /* Sort in
11b00 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72   ascending order
11b10 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
11b20 54 45 5f 53 4f 5f 44 45 53 43 20 20 20 20 20 20  TE_SO_DESC      
11b30 31 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73  1  /* Sort in as
11b40 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f  cending order */
11b50 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
11b60 53 4f 5f 55 4e 44 45 46 49 4e 45 44 20 2d 31 20  SO_UNDEFINED -1 
11b70 2f 2a 20 4e 6f 20 73 6f 72 74 20 6f 72 64 65 72  /* No sort order
11b80 20 73 70 65 63 69 66 69 65 64 20 2a 2f 0a 0a 2f   specified */../
11b90 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20 61 66 66 69  *.** Column affi
11ba0 6e 69 74 79 20 74 79 70 65 73 2e 0a 2a 2a 0a 2a  nity types..**.*
11bb0 2a 20 54 68 65 73 65 20 75 73 65 64 20 74 6f 20  * These used to 
11bc0 68 61 76 65 20 6d 6e 65 6d 6f 6e 69 63 20 6e 61  have mnemonic na
11bd0 6d 65 20 6c 69 6b 65 20 27 69 27 20 66 6f 72 20  me like 'i' for 
11be0 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47  SQLITE_AFF_INTEG
11bf0 45 52 20 61 6e 64 0a 2a 2a 20 27 74 27 20 66 6f  ER and.** 't' fo
11c00 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  r SQLITE_AFF_TEX
11c10 54 2e 20 20 42 75 74 20 77 65 20 63 61 6e 20 73  T.  But we can s
11c20 61 76 65 20 61 20 6c 69 74 74 6c 65 20 73 70 61  ave a little spa
11c30 63 65 20 61 6e 64 20 69 6d 70 72 6f 76 65 0a 2a  ce and improve.*
11c40 2a 20 74 68 65 20 73 70 65 65 64 20 61 20 6c 69  * the speed a li
11c50 74 74 6c 65 20 62 79 20 6e 75 6d 62 65 72 69 6e  ttle by numberin
11c60 67 20 74 68 65 20 76 61 6c 75 65 73 20 63 6f 6e  g the values con
11c70 73 65 63 75 74 69 76 65 6c 79 2e 0a 2a 2a 0a 2a  secutively..**.*
11c80 2a 20 42 75 74 20 72 61 74 68 65 72 20 74 68 61  * But rather tha
11c90 6e 20 73 74 61 72 74 20 77 69 74 68 20 30 20 6f  n start with 0 o
11ca0 72 20 31 2c 20 77 65 20 62 65 67 69 6e 20 77 69  r 1, we begin wi
11cb0 74 68 20 27 41 27 2e 20 20 54 68 61 74 20 77 61  th 'A'.  That wa
11cc0 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d 75 6c 74 69  y,.** when multi
11cd0 70 6c 65 20 61 66 66 69 6e 69 74 79 20 74 79 70  ple affinity typ
11ce0 65 73 20 61 72 65 20 63 6f 6e 63 61 74 65 6e 61  es are concatena
11cf0 74 65 64 20 69 6e 74 6f 20 61 20 73 74 72 69 6e  ted into a strin
11d00 67 20 61 6e 64 0a 2a 2a 20 75 73 65 64 20 61 73  g and.** used as
11d10 20 74 68 65 20 50 34 20 6f 70 65 72 61 6e 64 2c   the P4 operand,
11d20 20 74 68 65 79 20 77 69 6c 6c 20 62 65 20 6d 6f   they will be mo
11d30 72 65 20 72 65 61 64 61 62 6c 65 2e 0a 2a 2a 0a  re readable..**.
11d40 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f 20 74 68 61  ** Note also tha
11d50 74 20 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79  t the numeric ty
11d60 70 65 73 20 61 72 65 20 67 72 6f 75 70 65 64 20  pes are grouped 
11d70 74 6f 67 65 74 68 65 72 20 73 6f 20 74 68 61 74  together so that
11d80 20 74 65 73 74 69 6e 67 0a 2a 2a 20 66 6f 72 20   testing.** for 
11d90 61 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20 69  a numeric type i
11da0 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6d 70 61  s a single compa
11db0 72 69 73 6f 6e 2e 20 20 41 6e 64 20 74 68 65 20  rison.  And the 
11dc0 42 4c 4f 42 20 74 79 70 65 20 69 73 20 66 69 72  BLOB type is fir
11dd0 73 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  st..*/.#define S
11de0 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42 20 20  QLITE_AFF_BLOB  
11df0 20 20 20 27 41 27 0a 23 64 65 66 69 6e 65 20 53     'A'.#define S
11e00 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20 20  QLITE_AFF_TEXT  
11e10 20 20 20 27 42 27 0a 23 64 65 66 69 6e 65 20 53     'B'.#define S
11e20 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
11e30 43 20 20 27 43 27 0a 23 64 65 66 69 6e 65 20 53  C  'C'.#define S
11e40 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45  QLITE_AFF_INTEGE
11e50 52 20 20 27 44 27 0a 23 64 65 66 69 6e 65 20 53  R  'D'.#define S
11e60 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 20  QLITE_AFF_REAL  
11e70 20 20 20 27 45 27 0a 0a 23 64 65 66 69 6e 65 20     'E'..#define 
11e80 73 71 6c 69 74 65 33 49 73 4e 75 6d 65 72 69 63  sqlite3IsNumeric
11e90 41 66 66 69 6e 69 74 79 28 58 29 20 20 28 28 58  Affinity(X)  ((X
11ea0 29 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  )>=SQLITE_AFF_NU
11eb0 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a 2a 20 54 68  MERIC)../*.** Th
11ec0 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53  e SQLITE_AFF_MAS
11ed0 4b 20 76 61 6c 75 65 73 20 6d 61 73 6b 73 20 6f  K values masks o
11ee0 66 66 20 74 68 65 20 73 69 67 6e 69 66 69 63 61  ff the significa
11ef0 6e 74 20 62 69 74 73 20 6f 66 20 61 6e 0a 2a 2a  nt bits of an.**
11f00 20 61 66 66 69 6e 69 74 79 20 76 61 6c 75 65 2e   affinity value.
11f10 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
11f20 54 45 5f 41 46 46 5f 4d 41 53 4b 20 20 20 20 20  TE_AFF_MASK     
11f30 30 78 34 37 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 69  0x47../*.** Addi
11f40 74 69 6f 6e 61 6c 20 62 69 74 20 76 61 6c 75 65  tional bit value
11f50 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 4f 52  s that can be OR
11f60 65 64 20 77 69 74 68 20 61 6e 20 61 66 66 69 6e  ed with an affin
11f70 69 74 79 20 77 69 74 68 6f 75 74 0a 2a 2a 20 63  ity without.** c
11f80 68 61 6e 67 69 6e 67 20 74 68 65 20 61 66 66 69  hanging the affi
11f90 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  nity..**.** The 
11fa0 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 66  SQLITE_NOTNULL f
11fb0 6c 61 67 20 69 73 20 61 20 63 6f 6d 62 69 6e 61  lag is a combina
11fc0 74 69 6f 6e 20 6f 66 20 4e 55 4c 4c 45 51 20 61  tion of NULLEQ a
11fd0 6e 64 20 4a 55 4d 50 49 46 4e 55 4c 4c 2e 0a 2a  nd JUMPIFNULL..*
11fe0 2a 20 49 74 20 63 61 75 73 65 73 20 61 6e 20 61  * It causes an a
11ff0 73 73 65 72 74 28 29 20 74 6f 20 66 69 72 65 20  ssert() to fire 
12000 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e  if either operan
12010 64 20 74 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f  d to a compariso
12020 6e 0a 2a 2a 20 6f 70 65 72 61 74 6f 72 20 69 73  n.** operator is
12030 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20 61 64   NULL.  It is ad
12040 64 65 64 20 74 6f 20 63 65 72 74 61 69 6e 20 63  ded to certain c
12050 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72 61 74  omparison operat
12060 6f 72 73 20 74 6f 0a 2a 2a 20 70 72 6f 76 65 20  ors to.** prove 
12070 74 68 61 74 20 74 68 65 20 6f 70 65 72 61 6e 64  that the operand
12080 73 20 61 72 65 20 61 6c 77 61 79 73 20 4e 4f 54  s are always NOT
12090 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23 64 65 66 69 6e   NULL..*/.#defin
120a0 65 20 53 51 4c 49 54 45 5f 4b 45 45 50 4e 55 4c  e SQLITE_KEEPNUL
120b0 4c 20 20 20 20 20 30 78 30 38 20 20 2f 2a 20 55  L     0x08  /* U
120c0 73 65 64 20 62 79 20 76 65 63 74 6f 72 20 3d 3d  sed by vector ==
120d0 20 6f 72 20 3c 3e 20 2a 2f 0a 23 64 65 66 69 6e   or <> */.#defin
120e0 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e  e SQLITE_JUMPIFN
120f0 55 4c 4c 20 20 20 30 78 31 30 20 20 2f 2a 20 6a  ULL   0x10  /* j
12100 75 6d 70 73 20 69 66 20 65 69 74 68 65 72 20 6f  umps if either o
12110 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 2a  perand is NULL *
12120 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
12130 5f 53 54 4f 52 45 50 32 20 20 20 20 20 20 30 78  _STOREP2      0x
12140 32 30 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73  20  /* Store res
12150 75 6c 74 20 69 6e 20 72 65 67 5b 50 32 5d 20 72  ult in reg[P2] r
12160 61 74 68 65 72 20 74 68 61 6e 20 6a 75 6d 70 20  ather than jump 
12170 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
12180 45 5f 4e 55 4c 4c 45 51 20 20 20 20 20 20 20 30  E_NULLEQ       0
12190 78 38 30 20 20 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c  x80  /* NULL=NUL
121a0 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  L */.#define SQL
121b0 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 20 20 20 20  ITE_NOTNULL     
121c0 20 30 78 39 30 20 20 2f 2a 20 41 73 73 65 72 74   0x90  /* Assert
121d0 20 74 68 61 74 20 6f 70 65 72 61 6e 64 73 20 61   that operands a
121e0 72 65 20 6e 65 76 65 72 20 4e 55 4c 4c 20 2a 2f  re never NULL */
121f0 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63  ../*.** An objec
12200 74 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69  t of this type i
12210 73 20 63 72 65 61 74 65 64 20 66 6f 72 20 65 61  s created for ea
12220 63 68 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ch virtual table
12230 20 70 72 65 73 65 6e 74 20 69 6e 0a 2a 2a 20 74   present in.** t
12240 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
12250 6d 61 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ma..**.** If the
12260 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
12270 20 69 73 20 73 68 61 72 65 64 2c 20 74 68 65 6e   is shared, then
12280 20 74 68 65 72 65 20 69 73 20 6f 6e 65 20 69 6e   there is one in
12290 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 0a 2a  stance of this.*
122a0 2a 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20  * structure for 
122b0 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f  each database co
122c0 6e 6e 65 63 74 69 6f 6e 20 28 73 71 6c 69 74 65  nnection (sqlite
122d0 33 2a 29 20 74 68 61 74 20 75 73 65 73 20 74 68  3*) that uses th
122e0 65 20 73 68 61 72 65 64 0a 2a 2a 20 73 63 68 65  e shared.** sche
122f0 6d 61 2e 20 54 68 69 73 20 69 73 20 62 65 63 61  ma. This is beca
12300 75 73 65 20 65 61 63 68 20 64 61 74 61 62 61 73  use each databas
12310 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 72 65 71  e connection req
12320 75 69 72 65 73 20 69 74 73 20 6f 77 6e 20 75 6e  uires its own un
12330 69 71 75 65 0a 2a 2a 20 69 6e 73 74 61 6e 63 65  ique.** instance
12340 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f   of the sqlite3_
12350 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 75 73 65  vtab* handle use
12360 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20  d to access the 
12370 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0a 2a 2a  virtual table.**
12380 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e   implementation.
12390 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68   sqlite3_vtab* h
123a0 61 6e 64 6c 65 73 20 63 61 6e 20 6e 6f 74 20 62  andles can not b
123b0 65 20 73 68 61 72 65 64 20 62 65 74 77 65 65 6e  e shared between
123c0 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e  .** database con
123d0 6e 65 63 74 69 6f 6e 73 2c 20 65 76 65 6e 20 77  nections, even w
123e0 68 65 6e 20 74 68 65 20 72 65 73 74 20 6f 66 20  hen the rest of 
123f0 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61  the in-memory da
12400 74 61 62 61 73 65 0a 2a 2a 20 73 63 68 65 6d 61  tabase.** schema
12410 20 69 73 20 73 68 61 72 65 64 2c 20 61 73 20 74   is shared, as t
12420 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
12430 6e 20 6f 66 74 65 6e 20 73 74 6f 72 65 73 20 74  n often stores t
12440 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63  he database.** c
12450 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
12460 20 70 61 73 73 65 64 20 74 6f 20 69 74 20 76 69   passed to it vi
12470 61 20 74 68 65 20 78 43 6f 6e 6e 65 63 74 28 29  a the xConnect()
12480 20 6f 72 20 78 43 72 65 61 74 65 28 29 20 6d 65   or xCreate() me
12490 74 68 6f 64 0a 2a 2a 20 64 75 72 69 6e 67 20 69  thod.** during i
124a0 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e  nitialization in
124b0 74 65 72 6e 61 6c 6c 79 2e 20 54 68 69 73 20 64  ternally. This d
124c0 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
124d0 6f 6e 20 68 61 6e 64 6c 65 20 6d 61 79 0a 2a 2a  on handle may.**
124e0 20 74 68 65 6e 20 62 65 20 75 73 65 64 20 62 79   then be used by
124f0 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
12500 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  le implementatio
12510 6e 20 74 6f 20 61 63 63 65 73 73 20 72 65 61 6c  n to access real
12520 20 74 61 62 6c 65 73 0a 2a 2a 20 77 69 74 68 69   tables.** withi
12530 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20  n the database. 
12540 53 6f 20 74 68 61 74 20 74 68 65 79 20 61 70 70  So that they app
12550 65 61 72 20 61 73 20 70 61 72 74 20 6f 66 20 74  ear as part of t
12560 68 65 20 63 61 6c 6c 65 72 73 0a 2a 2a 20 74 72  he callers.** tr
12570 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 73 65  ansaction, these
12580 20 61 63 63 65 73 73 65 73 20 6e 65 65 64 20 74   accesses need t
12590 6f 20 62 65 20 6d 61 64 65 20 76 69 61 20 74 68  o be made via th
125a0 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 0a  e same database.
125b0 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73  ** connection as
125c0 20 74 68 61 74 20 75 73 65 64 20 74 6f 20 65 78   that used to ex
125d0 65 63 75 74 65 20 53 51 4c 20 6f 70 65 72 61 74  ecute SQL operat
125e0 69 6f 6e 73 20 6f 6e 20 74 68 65 20 76 69 72 74  ions on the virt
125f0 75 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a  ual table..**.**
12600 20 41 6c 6c 20 56 54 61 62 6c 65 20 6f 62 6a 65   All VTable obje
12610 63 74 73 20 74 68 61 74 20 63 6f 72 72 65 73 70  cts that corresp
12620 6f 6e 64 20 74 6f 20 61 20 73 69 6e 67 6c 65 20  ond to a single 
12630 74 61 62 6c 65 20 69 6e 20 61 20 73 68 61 72 65  table in a share
12640 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 73 63  d.** database sc
12650 68 65 6d 61 20 61 72 65 20 69 6e 69 74 69 61 6c  hema are initial
12660 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6c  ly stored in a l
12670 69 6e 6b 65 64 2d 6c 69 73 74 20 70 6f 69 6e 74  inked-list point
12680 65 64 20 74 6f 20 62 79 0a 2a 2a 20 74 68 65 20  ed to by.** the 
12690 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20 6d 65  Table.pVTable me
126a0 6d 62 65 72 20 76 61 72 69 61 62 6c 65 20 6f 66  mber variable of
126b0 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
126c0 6e 67 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 2e  ng Table object.
126d0 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 73 71 6c 69  .** When an sqli
126e0 74 65 33 5f 70 72 65 70 61 72 65 28 29 20 6f 70  te3_prepare() op
126f0 65 72 61 74 69 6f 6e 20 69 73 20 72 65 71 75 69  eration is requi
12700 72 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68  red to access th
12710 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62  e virtual.** tab
12720 6c 65 2c 20 69 74 20 73 65 61 72 63 68 65 73 20  le, it searches 
12730 74 68 65 20 6c 69 73 74 20 66 6f 72 20 74 68 65  the list for the
12740 20 56 54 61 62 6c 65 20 74 68 61 74 20 63 6f 72   VTable that cor
12750 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 0a  responds to the.
12760 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ** database conn
12770 65 63 74 69 6f 6e 20 64 6f 69 6e 67 20 74 68 65  ection doing the
12780 20 70 72 65 70 61 72 69 6e 67 20 73 6f 20 61 73   preparing so as
12790 20 74 6f 20 75 73 65 20 74 68 65 20 63 6f 72 72   to use the corr
127a0 65 63 74 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 76  ect.** sqlite3_v
127b0 74 61 62 2a 20 68 61 6e 64 6c 65 20 69 6e 20 74  tab* handle in t
127c0 68 65 20 63 6f 6d 70 69 6c 65 64 20 71 75 65 72  he compiled quer
127d0 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61 6e  y..**.** When an
127e0 20 69 6e 2d 6d 65 6d 6f 72 79 20 54 61 62 6c 65   in-memory Table
127f0 20 6f 62 6a 65 63 74 20 69 73 20 64 65 6c 65 74   object is delet
12800 65 64 20 28 66 6f 72 20 65 78 61 6d 70 6c 65 20  ed (for example 
12810 77 68 65 6e 20 74 68 65 0a 2a 2a 20 73 63 68 65  when the.** sche
12820 6d 61 20 69 73 20 62 65 69 6e 67 20 72 65 6c 6f  ma is being relo
12830 61 64 65 64 20 66 6f 72 20 73 6f 6d 65 20 72 65  aded for some re
12840 61 73 6f 6e 29 2c 20 74 68 65 20 56 54 61 62 6c  ason), the VTabl
12850 65 20 6f 62 6a 65 63 74 73 20 61 72 65 20 6e 6f  e objects are no
12860 74 0a 2a 2a 20 64 65 6c 65 74 65 64 20 61 6e 64  t.** deleted and
12870 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61   the sqlite3_vta
12880 62 2a 20 68 61 6e 64 6c 65 73 20 61 72 65 20 6e  b* handles are n
12890 6f 74 20 78 44 69 73 63 6f 6e 6e 65 63 74 28 29  ot xDisconnect()
128a0 65 64 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c  ed.** immediatel
128b0 79 2e 20 49 6e 73 74 65 61 64 2c 20 74 68 65 79  y. Instead, they
128c0 20 61 72 65 20 6d 6f 76 65 64 20 66 72 6f 6d 20   are moved from 
128d0 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c  the Table.pVTabl
128e0 65 20 6c 69 73 74 20 74 6f 0a 2a 2a 20 61 6e 6f  e list to.** ano
128f0 74 68 65 72 20 6c 69 6e 6b 65 64 20 6c 69 73 74  ther linked list
12900 20 68 65 61 64 65 64 20 62 79 20 74 68 65 20 73   headed by the s
12910 71 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65  qlite3.pDisconne
12920 63 74 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65  ct member of the
12930 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  .** correspondin
12940 67 20 73 71 6c 69 74 65 33 20 73 74 72 75 63 74  g sqlite3 struct
12950 75 72 65 2e 20 54 68 65 79 20 61 72 65 20 74 68  ure. They are th
12960 65 6e 20 64 65 6c 65 74 65 64 2f 78 44 69 73 63  en deleted/xDisc
12970 6f 6e 6e 65 63 74 65 64 0a 2a 2a 20 6e 65 78 74  onnected.** next
12980 20 74 69 6d 65 20 61 20 73 74 61 74 65 6d 65 6e   time a statemen
12990 74 20 69 73 20 70 72 65 70 61 72 65 64 20 75 73  t is prepared us
129a0 69 6e 67 20 73 61 69 64 20 73 71 6c 69 74 65 33  ing said sqlite3
129b0 2a 2e 20 54 68 69 73 20 69 73 20 64 6f 6e 65 0a  *. This is done.
129c0 2a 2a 20 74 6f 20 61 76 6f 69 64 20 64 65 61 64  ** to avoid dead
129d0 6c 6f 63 6b 20 69 73 73 75 65 73 20 69 6e 76 6f  lock issues invo
129e0 6c 76 69 6e 67 20 6d 75 6c 74 69 70 6c 65 20 73  lving multiple s
129f0 71 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75 74  qlite3.mutex mut
12a00 65 78 65 73 2e 0a 2a 2a 20 52 65 66 65 72 20 74  exes..** Refer t
12a10 6f 20 63 6f 6d 6d 65 6e 74 73 20 61 62 6f 76 65  o comments above
12a20 20 66 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65   function sqlite
12a30 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28  3VtabUnlockList(
12a40 29 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 6c  ) for an.** expl
12a50 61 6e 61 74 69 6f 6e 20 61 73 20 74 6f 20 77 68  anation as to wh
12a60 79 20 69 74 20 69 73 20 73 61 66 65 20 74 6f 20  y it is safe to 
12a70 61 64 64 20 61 6e 20 65 6e 74 72 79 20 74 6f 20  add an entry to 
12a80 61 6e 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63  an sqlite3.pDisc
12a90 6f 6e 6e 65 63 74 0a 2a 2a 20 6c 69 73 74 20 77  onnect.** list w
12aa0 69 74 68 6f 75 74 20 68 6f 6c 64 69 6e 67 20 74  ithout holding t
12ab0 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
12ac0 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d   sqlite3.mutex m
12ad0 75 74 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  utex..**.** The 
12ae0 6d 65 6d 6f 72 79 20 66 6f 72 20 6f 62 6a 65 63  memory for objec
12af0 74 73 20 6f 66 20 74 68 69 73 20 74 79 70 65 20  ts of this type 
12b00 69 73 20 61 6c 77 61 79 73 20 61 6c 6c 6f 63 61  is always alloca
12b10 74 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65  ted by.** sqlite
12b20 33 44 62 4d 61 6c 6c 6f 63 28 29 2c 20 75 73 69  3DbMalloc(), usi
12b30 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  ng the connectio
12b40 6e 20 68 61 6e 64 6c 65 20 73 74 6f 72 65 64 20  n handle stored 
12b50 69 6e 20 56 54 61 62 6c 65 2e 64 62 20 61 73 0a  in VTable.db as.
12b60 2a 2a 20 74 68 65 20 66 69 72 73 74 20 61 72 67  ** the first arg
12b70 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74  ument..*/.struct
12b80 20 56 54 61 62 6c 65 20 7b 0a 20 20 73 71 6c 69   VTable {.  sqli
12b90 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
12ba0 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73        /* Databas
12bb0 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 73  e connection ass
12bc0 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69  ociated with thi
12bd0 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4d 6f 64  s table */.  Mod
12be0 75 6c 65 20 2a 70 4d 6f 64 3b 20 20 20 20 20 20  ule *pMod;      
12bf0 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
12c00 72 20 74 6f 20 6d 6f 64 75 6c 65 20 69 6d 70 6c  r to module impl
12c10 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20  ementation */.  
12c20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
12c30 74 61 62 3b 20 20 20 20 20 20 2f 2a 20 50 6f 69  tab;      /* Poi
12c40 6e 74 65 72 20 74 6f 20 76 74 61 62 20 69 6e 73  nter to vtab ins
12c50 74 61 6e 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  tance */.  int n
12c60 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20  Ref;            
12c70 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
12c80 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74 68  f pointers to th
12c90 69 73 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a  is structure */.
12ca0 20 20 75 38 20 62 43 6f 6e 73 74 72 61 69 6e 74    u8 bConstraint
12cb0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
12cc0 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e  rue if constrain
12cd0 74 73 20 61 72 65 20 73 75 70 70 6f 72 74 65 64  ts are supported
12ce0 20 2a 2f 0a 20 20 69 6e 74 20 69 53 61 76 65 70   */.  int iSavep
12cf0 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  oint;           
12d00 2f 2a 20 44 65 70 74 68 20 6f 66 20 74 68 65 20  /* Depth of the 
12d10 53 41 56 45 50 4f 49 4e 54 20 73 74 61 63 6b 20  SAVEPOINT stack 
12d20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 4e 65  */.  VTable *pNe
12d30 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  xt;            /
12d40 2a 20 4e 65 78 74 20 69 6e 20 6c 69 6e 6b 65 64  * Next in linked
12d50 20 6c 69 73 74 20 28 73 65 65 20 61 62 6f 76 65   list (see above
12d60 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  ) */.};../*.** T
12d70 68 65 20 73 63 68 65 6d 61 20 66 6f 72 20 65 61  he schema for ea
12d80 63 68 20 53 51 4c 20 74 61 62 6c 65 20 61 6e 64  ch SQL table and
12d90 20 76 69 65 77 20 69 73 20 72 65 70 72 65 73 65   view is represe
12da0 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 0a 2a  nted in memory.*
12db0 2a 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65  * by an instance
12dc0 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
12dd0 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a  g structure..*/.
12de0 73 74 72 75 63 74 20 54 61 62 6c 65 20 7b 0a 20  struct Table {. 
12df0 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
12e00 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
12e10 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69   the table or vi
12e20 65 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d 6e 20 2a  ew */.  Column *
12e30 61 43 6f 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20  aCol;        /* 
12e40 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  Information abou
12e50 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f  t each column */
12e60 0a 20 20 49 6e 64 65 78 20 2a 70 49 6e 64 65 78  .  Index *pIndex
12e70 3b 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20  ;       /* List 
12e80 6f 66 20 53 51 4c 20 69 6e 64 65 78 65 73 20 6f  of SQL indexes o
12e90 6e 20 74 68 69 73 20 74 61 62 6c 65 2e 20 2a 2f  n this table. */
12ea0 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65  .  Select *pSele
12eb0 63 74 3b 20 20 20 20 20 2f 2a 20 4e 55 4c 4c 20  ct;     /* NULL 
12ec0 66 6f 72 20 74 61 62 6c 65 73 2e 20 20 50 6f 69  for tables.  Poi
12ed0 6e 74 73 20 74 6f 20 64 65 66 69 6e 69 74 69 6f  nts to definitio
12ee0 6e 20 69 66 20 61 20 76 69 65 77 2e 20 2a 2f 0a  n if a view. */.
12ef0 20 20 46 4b 65 79 20 2a 70 46 4b 65 79 3b 20 20    FKey *pFKey;  
12f00 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 65 64         /* Linked
12f10 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 66 6f 72   list of all for
12f20 65 69 67 6e 20 6b 65 79 73 20 69 6e 20 74 68 69  eign keys in thi
12f30 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 63 68 61  s table */.  cha
12f40 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20  r *zColAff;     
12f50 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69    /* String defi
12f60 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74  ning the affinit
12f70 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e  y of each column
12f80 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
12f90 70 43 68 65 63 6b 3b 20 20 20 20 2f 2a 20 41 6c  pCheck;    /* Al
12fa0 6c 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69  l CHECK constrai
12fb0 6e 74 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  nts */.         
12fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
12fd0 20 20 20 2e 2e 2e 20 61 6c 73 6f 20 75 73 65 64     ... also used
12fe0 20 61 73 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20   as column name 
12ff0 6c 69 73 74 20 69 6e 20 61 20 56 49 45 57 20 2a  list in a VIEW *
13000 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20  /.  int tnum;   
13010 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74           /* Root
13020 20 42 54 72 65 65 20 70 61 67 65 20 66 6f 72 20   BTree page for 
13030 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
13040 75 33 32 20 6e 54 61 62 52 65 66 3b 20 20 20 20  u32 nTabRef;    
13050 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
13060 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74 68  f pointers to th
13070 69 73 20 54 61 62 6c 65 20 2a 2f 0a 20 20 75 33  is Table */.  u3
13080 32 20 74 61 62 46 6c 61 67 73 3b 20 20 20 20 20  2 tabFlags;     
13090 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 54 46     /* Mask of TF
130a0 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69  _* values */.  i
130b0 31 36 20 69 50 4b 65 79 3b 20 20 20 20 20 20 20  16 iPKey;       
130c0 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20 6e 65      /* If not ne
130d0 67 61 74 69 76 65 2c 20 75 73 65 20 61 43 6f 6c  gative, use aCol
130e0 5b 69 50 4b 65 79 5d 20 61 73 20 74 68 65 20 72  [iPKey] as the r
130f0 6f 77 69 64 20 2a 2f 0a 20 20 69 31 36 20 6e 43  owid */.  i16 nC
13100 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ol;            /
13110 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
13120 6d 6e 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c  mns in this tabl
13130 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 6e 52  e */.  LogEst nR
13140 6f 77 4c 6f 67 45 73 74 3b 20 20 20 2f 2a 20 45  owLogEst;   /* E
13150 73 74 69 6d 61 74 65 64 20 72 6f 77 73 20 69 6e  stimated rows in
13160 20 74 61 62 6c 65 20 2d 20 66 72 6f 6d 20 73 71   table - from sq
13170 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65  lite_stat1 table
13180 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a 54   */.  LogEst szT
13190 61 62 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73  abRow;     /* Es
131a0 74 69 6d 61 74 65 64 20 73 69 7a 65 20 6f 66 20  timated size of 
131b0 65 61 63 68 20 74 61 62 6c 65 20 72 6f 77 20 69  each table row i
131c0 6e 20 62 79 74 65 73 20 2a 2f 0a 23 69 66 64 65  n bytes */.#ifde
131d0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
131e0 43 4f 53 54 4d 55 4c 54 0a 20 20 4c 6f 67 45 73  COSTMULT.  LogEs
131f0 74 20 63 6f 73 74 4d 75 6c 74 3b 20 20 20 20 20  t costMult;     
13200 2f 2a 20 43 6f 73 74 20 6d 75 6c 74 69 70 6c 69  /* Cost multipli
13210 65 72 20 66 6f 72 20 75 73 69 6e 67 20 74 68 69  er for using thi
13220 73 20 74 61 62 6c 65 20 2a 2f 0a 23 65 6e 64 69  s table */.#endi
13230 66 0a 20 20 75 38 20 6b 65 79 43 6f 6e 66 3b 20  f.  u8 keyConf; 
13240 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 61 74           /* What
13250 20 74 6f 20 64 6f 20 69 6e 20 63 61 73 65 20 6f   to do in case o
13260 66 20 75 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e  f uniqueness con
13270 66 6c 69 63 74 20 6f 6e 20 69 50 4b 65 79 20 2a  flict on iPKey *
13280 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
13290 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45  _OMIT_ALTERTABLE
132a0 0a 20 20 69 6e 74 20 61 64 64 43 6f 6c 4f 66 66  .  int addColOff
132b0 73 65 74 3b 20 20 20 20 2f 2a 20 4f 66 66 73 65  set;    /* Offse
132c0 74 20 69 6e 20 43 52 45 41 54 45 20 54 41 42 4c  t in CREATE TABL
132d0 45 20 73 74 6d 74 20 74 6f 20 61 64 64 20 61 20  E stmt to add a 
132e0 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65  new column */.#e
132f0 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
13300 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
13310 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f 64  TABLE.  int nMod
13320 75 6c 65 41 72 67 3b 20 20 20 20 20 20 2f 2a 20  uleArg;      /* 
13330 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
13340 6e 74 73 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c  nts to the modul
13350 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a  e */.  char **az
13360 4d 6f 64 75 6c 65 41 72 67 3b 20 20 2f 2a 20 30  ModuleArg;  /* 0
13370 3a 20 6d 6f 64 75 6c 65 20 31 3a 20 73 63 68 65  : module 1: sche
13380 6d 61 20 32 3a 20 76 74 61 62 20 6e 61 6d 65 20  ma 2: vtab name 
13390 33 2e 2e 2e 3a 20 61 72 67 73 20 2a 2f 0a 20 20  3...: args */.  
133a0 56 54 61 62 6c 65 20 2a 70 56 54 61 62 6c 65 3b  VTable *pVTable;
133b0 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
133c0 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 2e 20  VTable objects. 
133d0 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 72 69 67  */.#endif.  Trig
133e0 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20  ger *pTrigger;  
133f0 20 2f 2a 20 4c 69 73 74 20 6f 66 20 74 72 69 67   /* List of trig
13400 67 65 72 73 20 73 74 6f 72 65 64 20 69 6e 20 70  gers stored in p
13410 53 63 68 65 6d 61 20 2a 2f 0a 20 20 53 63 68 65  Schema */.  Sche
13420 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20  ma *pSchema;    
13430 20 2f 2a 20 53 63 68 65 6d 61 20 74 68 61 74 20   /* Schema that 
13440 63 6f 6e 74 61 69 6e 73 20 74 68 69 73 20 74 61  contains this ta
13450 62 6c 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ble */.  Table *
13460 70 4e 65 78 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a  pNextZombie;  /*
13470 20 4e 65 78 74 20 6f 6e 20 74 68 65 20 50 61 72   Next on the Par
13480 73 65 2e 70 5a 6f 6d 62 69 65 54 61 62 20 6c 69  se.pZombieTab li
13490 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  st */.};../*.** 
134a0 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
134b0 6f 72 20 54 61 62 6c 65 2e 74 61 62 46 6c 61 67  or Table.tabFlag
134c0 73 2e 0a 2a 2a 0a 2a 2a 20 54 46 5f 4f 4f 4f 48  s..**.** TF_OOOH
134d0 69 64 64 65 6e 20 61 70 70 6c 69 65 73 20 74 6f  idden applies to
134e0 20 74 61 62 6c 65 73 20 6f 72 20 76 69 65 77 20   tables or view 
134f0 74 68 61 74 20 68 61 76 65 20 68 69 64 64 65 6e  that have hidden
13500 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 61 72   columns that ar
13510 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 65 64 20 62 79  e.** followed by
13520 20 6e 6f 6e 2d 68 69 64 64 65 6e 20 63 6f 6c 75   non-hidden colu
13530 6d 6e 73 2e 20 20 45 78 61 6d 70 6c 65 3a 20 20  mns.  Example:  
13540 22 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20  "CREATE VIRTUAL 
13550 54 41 42 4c 45 20 78 20 55 53 49 4e 47 0a 2a 2a  TABLE x USING.**
13560 20 76 74 61 62 31 28 61 20 48 49 44 44 45 4e 2c   vtab1(a HIDDEN,
13570 20 62 29 3b 22 2e 20 20 53 69 6e 63 65 20 22 62   b);".  Since "b
13580 22 20 69 73 20 61 20 6e 6f 6e 2d 68 69 64 64 65  " is a non-hidde
13590 6e 20 63 6f 6c 75 6d 6e 20 62 75 74 20 22 61 22  n column but "a"
135a0 20 69 73 20 68 69 64 64 65 6e 2c 0a 2a 2a 20 74   is hidden,.** t
135b0 68 65 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20  he TF_OOOHidden 
135c0 61 74 74 72 69 62 75 74 65 20 77 6f 75 6c 64 20  attribute would 
135d0 61 70 70 6c 79 20 69 6e 20 74 68 69 73 20 63 61  apply in this ca
135e0 73 65 2e 20 20 53 75 63 68 20 74 61 62 6c 65 73  se.  Such tables
135f0 20 72 65 71 75 69 72 65 0a 2a 2a 20 73 70 65 63   require.** spec
13600 69 61 6c 20 68 61 6e 64 6c 69 6e 67 20 64 75 72  ial handling dur
13610 69 6e 67 20 49 4e 53 45 52 54 20 70 72 6f 63 65  ing INSERT proce
13620 73 73 69 6e 67 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ssing..*/.#defin
13630 65 20 54 46 5f 52 65 61 64 6f 6e 6c 79 20 20 20  e TF_Readonly   
13640 20 20 20 20 20 30 78 30 30 30 31 20 20 20 20 2f       0x0001    /
13650 2a 20 52 65 61 64 2d 6f 6e 6c 79 20 73 79 73 74  * Read-only syst
13660 65 6d 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66  em table */.#def
13670 69 6e 65 20 54 46 5f 45 70 68 65 6d 65 72 61 6c  ine TF_Ephemeral
13680 20 20 20 20 20 20 20 30 78 30 30 30 32 20 20 20         0x0002   
13690 20 2f 2a 20 41 6e 20 65 70 68 65 6d 65 72 61 6c   /* An ephemeral
136a0 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e   table */.#defin
136b0 65 20 54 46 5f 48 61 73 50 72 69 6d 61 72 79 4b  e TF_HasPrimaryK
136c0 65 79 20 20 20 30 78 30 30 30 34 20 20 20 20 2f  ey   0x0004    /
136d0 2a 20 54 61 62 6c 65 20 68 61 73 20 61 20 70 72  * Table has a pr
136e0 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65  imary key */.#de
136f0 66 69 6e 65 20 54 46 5f 41 75 74 6f 69 6e 63 72  fine TF_Autoincr
13700 65 6d 65 6e 74 20 20 20 30 78 30 30 30 38 20 20  ement   0x0008  
13710 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 70 72 69    /* Integer pri
13720 6d 61 72 79 20 6b 65 79 20 69 73 20 61 75 74 6f  mary key is auto
13730 69 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a 23 64 65  increment */.#de
13740 66 69 6e 65 20 54 46 5f 48 61 73 53 74 61 74 31  fine TF_HasStat1
13750 20 20 20 20 20 20 20 20 30 78 30 30 31 30 20 20          0x0010  
13760 20 20 2f 2a 20 6e 52 6f 77 4c 6f 67 45 73 74 20    /* nRowLogEst 
13770 73 65 74 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f  set from sqlite_
13780 73 74 61 74 31 20 2a 2f 0a 23 64 65 66 69 6e 65  stat1 */.#define
13790 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77 69 64   TF_WithoutRowid
137a0 20 20 20 20 30 78 30 30 32 30 20 20 20 20 2f 2a      0x0020    /*
137b0 20 4e 6f 20 72 6f 77 69 64 2e 20 20 50 52 49 4d   No rowid.  PRIM
137c0 41 52 59 20 4b 45 59 20 69 73 20 74 68 65 20 6b  ARY KEY is the k
137d0 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  ey */.#define TF
137e0 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69 64 20  _NoVisibleRowid 
137f0 20 30 78 30 30 34 30 20 20 20 20 2f 2a 20 4e 6f   0x0040    /* No
13800 20 75 73 65 72 2d 76 69 73 69 62 6c 65 20 22 72   user-visible "r
13810 6f 77 69 64 22 20 63 6f 6c 75 6d 6e 20 2a 2f 0a  owid" column */.
13820 23 64 65 66 69 6e 65 20 54 46 5f 4f 4f 4f 48 69  #define TF_OOOHi
13830 64 64 65 6e 20 20 20 20 20 20 20 30 78 30 30 38  dden       0x008
13840 30 20 20 20 20 2f 2a 20 4f 75 74 2d 6f 66 2d 4f  0    /* Out-of-O
13850 72 64 65 72 20 68 69 64 64 65 6e 20 63 6f 6c 75  rder hidden colu
13860 6d 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  mns */.#define T
13870 46 5f 53 74 61 74 73 55 73 65 64 20 20 20 20 20  F_StatsUsed     
13880 20 20 30 78 30 31 30 30 20 20 20 20 2f 2a 20 51    0x0100    /* Q
13890 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 64 65 63  uery planner dec
138a0 69 73 69 6f 6e 73 20 61 66 66 65 63 74 65 64 20  isions affected 
138b0 62 79 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  by.             
138c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
138d0 20 20 20 20 20 20 20 20 2a 2a 20 49 6e 64 65 78          ** Index
138e0 2e 61 69 52 6f 77 4c 6f 67 45 73 74 5b 5d 20 76  .aiRowLogEst[] v
138f0 61 6c 75 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  alues */.#define
13900 20 54 46 5f 48 61 73 4e 6f 74 4e 75 6c 6c 20 20   TF_HasNotNull  
13910 20 20 20 20 30 78 30 32 30 30 20 20 20 20 2f 2a      0x0200    /*
13920 20 43 6f 6e 74 61 69 6e 73 20 4e 4f 54 20 4e 55   Contains NOT NU
13930 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  LL constraints *
13940 2f 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 74 6f  /../*.** Test to
13950 20 73 65 65 20 77 68 65 74 68 65 72 20 6f 72 20   see whether or 
13960 6e 6f 74 20 61 20 74 61 62 6c 65 20 69 73 20 61  not a table is a
13970 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20   virtual table. 
13980 20 54 68 69 73 20 69 73 0a 2a 2a 20 64 6f 6e 65   This is.** done
13990 20 61 73 20 61 20 6d 61 63 72 6f 20 73 6f 20 74   as a macro so t
139a0 68 61 74 20 69 74 20 77 69 6c 6c 20 62 65 20 6f  hat it will be o
139b0 70 74 69 6d 69 7a 65 64 20 6f 75 74 20 77 68 65  ptimized out whe
139c0 6e 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62  n virtual.** tab
139d0 6c 65 20 73 75 70 70 6f 72 74 20 69 73 20 6f 6d  le support is om
139e0 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 62  itted from the b
139f0 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  uild..*/.#ifndef
13a00 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
13a10 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65 66  TUALTABLE.#  def
13a20 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58 29  ine IsVirtual(X)
13a30 20 20 20 20 20 20 28 28 58 29 2d 3e 6e 4d 6f 64        ((X)->nMod
13a40 75 6c 65 41 72 67 29 0a 23 65 6c 73 65 0a 23 20  uleArg).#else.# 
13a50 20 64 65 66 69 6e 65 20 49 73 56 69 72 74 75 61   define IsVirtua
13a60 6c 28 58 29 20 20 20 20 20 20 30 0a 23 65 6e 64  l(X)      0.#end
13a70 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  if../*.** Macros
13a80 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66   to determine if
13a90 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20 68 69 64   a column is hid
13aa0 64 65 6e 2e 20 20 49 73 4f 72 64 69 6e 61 72 79  den.  IsOrdinary
13ab0 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 29 0a 2a  HiddenColumn().*
13ac0 2a 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72  * only works for
13ad0 20 6e 6f 6e 2d 76 69 72 74 75 61 6c 20 74 61 62   non-virtual tab
13ae0 6c 65 73 20 28 6f 72 64 69 6e 61 72 79 20 74 61  les (ordinary ta
13af0 62 6c 65 73 20 61 6e 64 20 76 69 65 77 73 29 20  bles and views) 
13b00 61 6e 64 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73  and is.** always
13b10 20 66 61 6c 73 65 20 75 6e 6c 65 73 73 20 53 51   false unless SQ
13b20 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44  LITE_ENABLE_HIDD
13b30 45 4e 5f 43 4f 4c 55 4d 4e 53 20 69 73 20 64 65  EN_COLUMNS is de
13b40 66 69 6e 65 64 2e 20 20 54 68 65 0a 2a 2a 20 49  fined.  The.** I
13b50 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 29 20  sHiddenColumn() 
13b60 6d 61 63 72 6f 20 69 73 20 67 65 6e 65 72 61 6c  macro is general
13b70 20 70 75 72 70 6f 73 65 2e 0a 2a 2f 0a 23 69 66   purpose..*/.#if
13b80 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
13b90 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f  ENABLE_HIDDEN_CO
13ba0 4c 55 4d 4e 53 29 0a 23 20 20 64 65 66 69 6e 65  LUMNS).#  define
13bb0 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28   IsHiddenColumn(
13bc0 58 29 20 20 20 20 20 20 20 20 20 28 28 28 58 29  X)         (((X)
13bd0 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c  ->colFlags & COL
13be0 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29  FLAG_HIDDEN)!=0)
13bf0 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f 72 64  .#  define IsOrd
13c00 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d  inaryHiddenColum
13c10 6e 28 58 29 20 28 28 28 58 29 2d 3e 63 6f 6c 46  n(X) (((X)->colF
13c20 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48  lags & COLFLAG_H
13c30 49 44 44 45 4e 29 21 3d 30 29 0a 23 65 6c 69 66  IDDEN)!=0).#elif
13c40 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
13c50 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
13c60 4c 45 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73  LE).#  define Is
13c70 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20  HiddenColumn(X) 
13c80 20 20 20 20 20 20 20 20 28 28 28 58 29 2d 3e 63          (((X)->c
13c90 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41  olFlags & COLFLA
13ca0 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 20  G_HIDDEN)!=0).# 
13cb0 20 64 65 66 69 6e 65 20 49 73 4f 72 64 69 6e 61   define IsOrdina
13cc0 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58  ryHiddenColumn(X
13cd0 29 20 30 0a 23 65 6c 73 65 0a 23 20 20 64 65 66  ) 0.#else.#  def
13ce0 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75  ine IsHiddenColu
13cf0 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20 30 0a  mn(X)         0.
13d00 23 20 20 64 65 66 69 6e 65 20 49 73 4f 72 64 69  #  define IsOrdi
13d10 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  naryHiddenColumn
13d20 28 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a 0a 2f  (X) 0.#endif.../
13d30 2a 20 44 6f 65 73 20 74 68 65 20 74 61 62 6c 65  * Does the table
13d40 20 68 61 76 65 20 61 20 72 6f 77 69 64 20 2a 2f   have a rowid */
13d50 0a 23 64 65 66 69 6e 65 20 48 61 73 52 6f 77 69  .#define HasRowi
13d60 64 28 58 29 20 20 20 20 20 28 28 28 58 29 2d 3e  d(X)     (((X)->
13d70 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f 57 69  tabFlags & TF_Wi
13d80 74 68 6f 75 74 52 6f 77 69 64 29 3d 3d 30 29 0a  thoutRowid)==0).
13d90 23 64 65 66 69 6e 65 20 56 69 73 69 62 6c 65 52  #define VisibleR
13da0 6f 77 69 64 28 58 29 20 28 28 28 58 29 2d 3e 74  owid(X) (((X)->t
13db0 61 62 46 6c 61 67 73 20 26 20 54 46 5f 4e 6f 56  abFlags & TF_NoV
13dc0 69 73 69 62 6c 65 52 6f 77 69 64 29 3d 3d 30 29  isibleRowid)==0)
13dd0 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 66 6f 72  ../*.** Each for
13de0 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
13df0 69 6e 74 20 69 73 20 61 6e 20 69 6e 73 74 61 6e  int is an instan
13e00 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
13e10 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  ing structure..*
13e20 2a 0a 2a 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b  *.** A foreign k
13e30 65 79 20 69 73 20 61 73 73 6f 63 69 61 74 65 64  ey is associated
13e40 20 77 69 74 68 20 74 77 6f 20 74 61 62 6c 65 73   with two tables
13e50 2e 20 20 54 68 65 20 22 66 72 6f 6d 22 20 74 61  .  The "from" ta
13e60 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20 74 61  ble is.** the ta
13e70 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ble that contain
13e80 73 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53  s the REFERENCES
13e90 20 63 6c 61 75 73 65 20 74 68 61 74 20 63 72 65   clause that cre
13ea0 61 74 65 73 20 74 68 65 20 66 6f 72 65 69 67 6e  ates the foreign
13eb0 0a 2a 2a 20 6b 65 79 2e 20 20 54 68 65 20 22 74  .** key.  The "t
13ec0 6f 22 20 74 61 62 6c 65 20 69 73 20 74 68 65 20  o" table is the 
13ed0 74 61 62 6c 65 20 74 68 61 74 20 69 73 20 6e 61  table that is na
13ee0 6d 65 64 20 69 6e 20 74 68 65 20 52 45 46 45 52  med in the REFER
13ef0 45 4e 43 45 53 20 63 6c 61 75 73 65 2e 0a 2a 2a  ENCES clause..**
13f00 20 43 6f 6e 73 69 64 65 72 20 74 68 69 73 20 65   Consider this e
13f10 78 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20  xample:.**.**   
13f20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 65    CREATE TABLE e
13f30 78 31 28 0a 2a 2a 20 20 20 20 20 20 20 61 20 49  x1(.**       a I
13f40 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
13f50 45 59 2c 0a 2a 2a 20 20 20 20 20 20 20 62 20 49  EY,.**       b I
13f60 4e 54 45 47 45 52 20 43 4f 4e 53 54 52 41 49 4e  NTEGER CONSTRAIN
13f70 54 20 66 6b 31 20 52 45 46 45 52 45 4e 43 45 53  T fk1 REFERENCES
13f80 20 65 78 32 28 78 29 0a 2a 2a 20 20 20 20 20 29   ex2(x).**     )
13f90 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 66 6f 72 65  ;.**.** For fore
13fa0 69 67 6e 20 6b 65 79 20 22 66 6b 31 22 2c 20 74  ign key "fk1", t
13fb0 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73  he from-table is
13fc0 20 22 65 78 31 22 20 61 6e 64 20 74 68 65 20 74   "ex1" and the t
13fd0 6f 2d 74 61 62 6c 65 20 69 73 20 22 65 78 32 22  o-table is "ex2"
13fe0 2e 0a 2a 2a 20 45 71 75 69 76 61 6c 65 6e 74 20  ..** Equivalent 
13ff0 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  names:.**.**    
14000 20 66 72 6f 6d 2d 74 61 62 6c 65 20 3d 3d 20 63   from-table == c
14010 68 69 6c 64 2d 74 61 62 6c 65 0a 2a 2a 20 20 20  hild-table.**   
14020 20 20 20 20 74 6f 2d 74 61 62 6c 65 20 3d 3d 20      to-table == 
14030 70 61 72 65 6e 74 2d 74 61 62 6c 65 0a 2a 2a 0a  parent-table.**.
14040 2a 2a 20 45 61 63 68 20 52 45 46 45 52 45 4e 43  ** Each REFERENC
14050 45 53 20 63 6c 61 75 73 65 20 67 65 6e 65 72 61  ES clause genera
14060 74 65 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20  tes an instance 
14070 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
14080 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 77 68   structure.** wh
14090 69 63 68 20 69 73 20 61 74 74 61 63 68 65 64 20  ich is attached 
140a0 74 6f 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c  to the from-tabl
140b0 65 2e 20 20 54 68 65 20 74 6f 2d 74 61 62 6c 65  e.  The to-table
140c0 20 6e 65 65 64 20 6e 6f 74 20 65 78 69 73 74 20   need not exist 
140d0 77 68 65 6e 0a 2a 2a 20 74 68 65 20 66 72 6f 6d  when.** the from
140e0 2d 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65  -table is create
140f0 64 2e 20 20 54 68 65 20 65 78 69 73 74 65 6e 63  d.  The existenc
14100 65 20 6f 66 20 74 68 65 20 74 6f 2d 74 61 62 6c  e of the to-tabl
14110 65 20 69 73 20 6e 6f 74 20 63 68 65 63 6b 65 64  e is not checked
14120 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6c 69 73 74  ..**.** The list
14130 20 6f 66 20 61 6c 6c 20 70 61 72 65 6e 74 73 20   of all parents 
14140 66 6f 72 20 63 68 69 6c 64 20 54 61 62 6c 65 20  for child Table 
14150 58 20 69 73 20 68 65 6c 64 20 61 74 20 58 2e 70  X is held at X.p
14160 46 4b 65 79 2e 0a 2a 2a 0a 2a 2a 20 41 20 6c 69  FKey..**.** A li
14170 73 74 20 6f 66 20 61 6c 6c 20 63 68 69 6c 64 72  st of all childr
14180 65 6e 20 66 6f 72 20 61 20 74 61 62 6c 65 20 6e  en for a table n
14190 61 6d 65 64 20 5a 20 28 77 68 69 63 68 20 6d 69  amed Z (which mi
141a0 67 68 74 20 6e 6f 74 20 65 76 65 6e 20 65 78 69  ght not even exi
141b0 73 74 29 0a 2a 2a 20 69 73 20 68 65 6c 64 20 69  st).** is held i
141c0 6e 20 53 63 68 65 6d 61 2e 66 6b 65 79 48 61 73  n Schema.fkeyHas
141d0 68 20 77 69 74 68 20 61 20 68 61 73 68 20 6b 65  h with a hash ke
141e0 79 20 6f 66 20 5a 2e 0a 2a 2f 0a 73 74 72 75 63  y of Z..*/.struc
141f0 74 20 46 4b 65 79 20 7b 0a 20 20 54 61 62 6c 65  t FKey {.  Table
14200 20 2a 70 46 72 6f 6d 3b 20 20 20 20 20 2f 2a 20   *pFrom;     /* 
14210 54 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67  Table containing
14220 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20   the REFERENCES 
14230 63 6c 61 75 73 65 20 28 61 6b 61 3a 20 43 68 69  clause (aka: Chi
14240 6c 64 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70  ld) */.  FKey *p
14250 4e 65 78 74 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65  NextFrom;  /* Ne
14260 78 74 20 46 4b 65 79 20 77 69 74 68 20 74 68 65  xt FKey with the
14270 20 73 61 6d 65 20 69 6e 20 70 46 72 6f 6d 2e 20   same in pFrom. 
14280 4e 65 78 74 20 70 61 72 65 6e 74 20 6f 66 20 70  Next parent of p
14290 46 72 6f 6d 20 2a 2f 0a 20 20 63 68 61 72 20 2a  From */.  char *
142a0 7a 54 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  zTo;        /* N
142b0 61 6d 65 20 6f 66 20 74 61 62 6c 65 20 74 68 61  ame of table tha
142c0 74 20 74 68 65 20 6b 65 79 20 70 6f 69 6e 74 73  t the key points
142d0 20 74 6f 20 28 61 6b 61 3a 20 50 61 72 65 6e 74   to (aka: Parent
142e0 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65  ) */.  FKey *pNe
142f0 78 74 54 6f 3b 20 20 20 20 2f 2a 20 4e 65 78 74  xtTo;    /* Next
14300 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 7a   with the same z
14310 54 6f 2e 20 4e 65 78 74 20 63 68 69 6c 64 20 6f  To. Next child o
14320 66 20 7a 54 6f 2e 20 2a 2f 0a 20 20 46 4b 65 79  f zTo. */.  FKey
14330 20 2a 70 50 72 65 76 54 6f 3b 20 20 20 20 2f 2a   *pPrevTo;    /*
14340 20 50 72 65 76 69 6f 75 73 20 77 69 74 68 20 74   Previous with t
14350 68 65 20 73 61 6d 65 20 7a 54 6f 20 2a 2f 0a 20  he same zTo */. 
14360 20 69 6e 74 20 6e 43 6f 6c 3b 20 20 20 20 20 20   int nCol;      
14370 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
14380 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20  columns in this 
14390 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20 45 56 3a 20  key */.  /* EV: 
143a0 52 2d 33 30 33 32 33 2d 32 31 39 31 37 20 2a 2f  R-30323-21917 */
143b0 0a 20 20 75 38 20 69 73 44 65 66 65 72 72 65 64  .  u8 isDeferred
143c0 3b 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20  ;       /* True 
143d0 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 68  if constraint ch
143e0 65 63 6b 69 6e 67 20 69 73 20 64 65 66 65 72 72  ecking is deferr
143f0 65 64 20 74 69 6c 6c 20 43 4f 4d 4d 49 54 20 2a  ed till COMMIT *
14400 2f 0a 20 20 75 38 20 61 41 63 74 69 6f 6e 5b 32  /.  u8 aAction[2
14410 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 20  ];        /* ON 
14420 44 45 4c 45 54 45 20 61 6e 64 20 4f 4e 20 55 50  DELETE and ON UP
14430 44 41 54 45 20 61 63 74 69 6f 6e 73 2c 20 72 65  DATE actions, re
14440 73 70 65 63 74 69 76 65 6c 79 20 2a 2f 0a 20 20  spectively */.  
14450 54 72 69 67 67 65 72 20 2a 61 70 54 72 69 67 67  Trigger *apTrigg
14460 65 72 5b 32 5d 3b 2f 2a 20 54 72 69 67 67 65 72  er[2];/* Trigger
14470 73 20 66 6f 72 20 61 41 63 74 69 6f 6e 5b 5d 20  s for aAction[] 
14480 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72  actions */.  str
14490 75 63 74 20 73 43 6f 6c 4d 61 70 20 7b 20 20 20  uct sColMap {   
144a0 20 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20 6f 66     /* Mapping of
144b0 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70 46 72 6f   columns in pFro
144c0 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  m to columns in 
144d0 7a 54 6f 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  zTo */.    int i
144e0 46 72 6f 6d 3b 20 20 20 20 20 20 20 20 20 20 20  From;           
144f0 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 63 6f 6c   /* Index of col
14500 75 6d 6e 20 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a  umn in pFrom */.
14510 20 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c 3b 20      char *zCol; 
14520 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
14530 65 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a  e of column in z
14540 54 6f 2e 20 20 49 66 20 4e 55 4c 4c 20 75 73 65  To.  If NULL use
14550 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a   PRIMARY KEY */.
14560 20 20 7d 20 61 43 6f 6c 5b 31 5d 3b 20 20 20 20    } aCol[1];    
14570 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65          /* One e
14580 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20 6f 66  ntry for each of
14590 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f   nCol columns */
145a0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 69 74  .};../*.** SQLit
145b0 65 20 73 75 70 70 6f 72 74 73 20 6d 61 6e 79 20  e supports many 
145c0 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20 74  different ways t
145d0 6f 20 72 65 73 6f 6c 76 65 20 61 20 63 6f 6e 73  o resolve a cons
145e0 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e  traint.** error.
145f0 20 20 52 4f 4c 4c 42 41 43 4b 20 70 72 6f 63 65    ROLLBACK proce
14600 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74  ssing means that
14610 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69   a constraint vi
14620 6f 6c 61 74 69 6f 6e 0a 2a 2a 20 63 61 75 73 65  olation.** cause
14630 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  s the operation 
14640 69 6e 20 70 72 6f 63 65 73 73 20 74 6f 20 66 61  in process to fa
14650 69 6c 20 61 6e 64 20 66 6f 72 20 74 68 65 20 63  il and for the c
14660 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69  urrent transacti
14670 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 72 6f 6c 6c  on.** to be roll
14680 65 64 20 62 61 63 6b 2e 20 20 41 42 4f 52 54 20  ed back.  ABORT 
14690 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73  processing means
146a0 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69   the operation i
146b0 6e 20 70 72 6f 63 65 73 73 0a 2a 2a 20 66 61 69  n process.** fai
146c0 6c 73 20 61 6e 64 20 61 6e 79 20 70 72 69 6f 72  ls and any prior
146d0 20 63 68 61 6e 67 65 73 20 66 72 6f 6d 20 74 68   changes from th
146e0 61 74 20 6f 6e 65 20 6f 70 65 72 61 74 69 6f 6e  at one operation
146f0 20 61 72 65 20 62 61 63 6b 65 64 20 6f 75 74 2c   are backed out,
14700 0a 2a 2a 20 62 75 74 20 74 68 65 20 74 72 61 6e  .** but the tran
14710 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 72  saction is not r
14720 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 46 41 49  olled back.  FAI
14730 4c 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61  L processing mea
14740 6e 73 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 6f  ns that.** the o
14750 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67  peration in prog
14760 72 65 73 73 20 73 74 6f 70 73 20 61 6e 64 20 72  ress stops and r
14770 65 74 75 72 6e 73 20 61 6e 20 65 72 72 6f 72 20  eturns an error 
14780 63 6f 64 65 2e 20 20 42 75 74 20 70 72 69 6f 72  code.  But prior
14790 0a 2a 2a 20 63 68 61 6e 67 65 73 20 64 75 65 20  .** changes due 
147a0 74 6f 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72  to the same oper
147b0 61 74 69 6f 6e 20 61 72 65 20 6e 6f 74 20 62 61  ation are not ba
147c0 63 6b 65 64 20 6f 75 74 20 61 6e 64 20 6e 6f 20  cked out and no 
147d0 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 63 63 75  rollback.** occu
147e0 72 73 2e 20 20 49 47 4e 4f 52 45 20 6d 65 61 6e  rs.  IGNORE mean
147f0 73 20 74 68 61 74 20 74 68 65 20 70 61 72 74 69  s that the parti
14800 63 75 6c 61 72 20 72 6f 77 20 74 68 61 74 20 63  cular row that c
14810 61 75 73 65 64 20 74 68 65 20 63 6f 6e 73 74 72  aused the constr
14820 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 20 69 73  aint.** error is
14830 20 6e 6f 74 20 69 6e 73 65 72 74 65 64 20 6f 72   not inserted or
14840 20 75 70 64 61 74 65 64 2e 20 20 50 72 6f 63 65   updated.  Proce
14850 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20  ssing continues 
14860 61 6e 64 20 6e 6f 20 65 72 72 6f 72 0a 2a 2a 20  and no error.** 
14870 69 73 20 72 65 74 75 72 6e 65 64 2e 20 20 52 45  is returned.  RE
14880 50 4c 41 43 45 20 6d 65 61 6e 73 20 74 68 61 74  PLACE means that
14890 20 70 72 65 65 78 69 73 74 69 6e 67 20 64 61 74   preexisting dat
148a0 61 62 61 73 65 20 72 6f 77 73 20 74 68 61 74 20  abase rows that 
148b0 63 61 75 73 65 64 0a 2a 2a 20 61 20 55 4e 49 51  caused.** a UNIQ
148c0 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  UE constraint vi
148d0 6f 6c 61 74 69 6f 6e 20 61 72 65 20 72 65 6d 6f  olation are remo
148e0 76 65 64 20 73 6f 20 74 68 61 74 20 74 68 65 20  ved so that the 
148f0 6e 65 77 20 69 6e 73 65 72 74 20 6f 72 0a 2a 2a  new insert or.**
14900 20 75 70 64 61 74 65 20 63 61 6e 20 70 72 6f 63   update can proc
14910 65 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e 67  eed.  Processing
14920 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e   continues and n
14930 6f 20 65 72 72 6f 72 20 69 73 20 72 65 70 6f 72  o error is repor
14940 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 52 45 53 54 52  ted..**.** RESTR
14950 49 43 54 2c 20 53 45 54 4e 55 4c 4c 2c 20 61 6e  ICT, SETNULL, an
14960 64 20 43 41 53 43 41 44 45 20 61 63 74 69 6f 6e  d CASCADE action
14970 73 20 61 70 70 6c 79 20 6f 6e 6c 79 20 74 6f 20  s apply only to 
14980 66 6f 72 65 69 67 6e 20 6b 65 79 73 2e 0a 2a 2a  foreign keys..**
14990 20 52 45 53 54 52 49 43 54 20 69 73 20 74 68 65   RESTRICT is the
149a0 20 73 61 6d 65 20 61 73 20 41 42 4f 52 54 20 66   same as ABORT f
149b0 6f 72 20 49 4d 4d 45 44 49 41 54 45 20 66 6f 72  or IMMEDIATE for
149c0 65 69 67 6e 20 6b 65 79 73 20 61 6e 64 20 74 68  eign keys and th
149d0 65 0a 2a 2a 20 73 61 6d 65 20 61 73 20 52 4f 4c  e.** same as ROL
149e0 4c 42 41 43 4b 20 66 6f 72 20 44 45 46 45 52 52  LBACK for DEFERR
149f0 45 44 20 6b 65 79 73 2e 20 20 53 45 54 4e 55 4c  ED keys.  SETNUL
14a00 4c 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  L means that the
14a10 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20   foreign.** key 
14a20 69 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 20  is set to NULL. 
14a30 20 43 41 53 43 41 44 45 20 6d 65 61 6e 73 20 74   CASCADE means t
14a40 68 61 74 20 61 20 44 45 4c 45 54 45 20 6f 72 20  hat a DELETE or 
14a50 55 50 44 41 54 45 20 6f 66 20 74 68 65 0a 2a 2a  UPDATE of the.**
14a60 20 72 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c   referenced tabl
14a70 65 20 72 6f 77 20 69 73 20 70 72 6f 70 61 67 61  e row is propaga
14a80 74 65 64 20 69 6e 74 6f 20 74 68 65 20 72 6f 77  ted into the row
14a90 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 0a   that holds the.
14aa0 2a 2a 20 66 6f 72 65 69 67 6e 20 6b 65 79 2e 0a  ** foreign key..
14ab0 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  **.** The follow
14ac0 69 6e 67 20 73 79 6d 62 6f 6c 69 63 20 76 61 6c  ing symbolic val
14ad0 75 65 73 20 61 72 65 20 75 73 65 64 20 74 6f 20  ues are used to 
14ae0 72 65 63 6f 72 64 20 77 68 69 63 68 20 74 79 70  record which typ
14af0 65 0a 2a 2a 20 6f 66 20 61 63 74 69 6f 6e 20 74  e.** of action t
14b00 6f 20 74 61 6b 65 2e 0a 2a 2f 0a 23 64 65 66 69  o take..*/.#defi
14b10 6e 65 20 4f 45 5f 4e 6f 6e 65 20 20 20 20 20 30  ne OE_None     0
14b20 20 20 20 2f 2a 20 54 68 65 72 65 20 69 73 20 6e     /* There is n
14b30 6f 20 63 6f 6e 73 74 72 61 69 6e 74 20 74 6f 20  o constraint to 
14b40 63 68 65 63 6b 20 2a 2f 0a 23 64 65 66 69 6e 65  check */.#define
14b50 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 31 20 20   OE_Rollback 1  
14b60 20 2f 2a 20 46 61 69 6c 20 74 68 65 20 6f 70 65   /* Fail the ope
14b70 72 61 74 69 6f 6e 20 61 6e 64 20 72 6f 6c 6c 62  ration and rollb
14b80 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61 63 74  ack the transact
14b90 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ion */.#define O
14ba0 45 5f 41 62 6f 72 74 20 20 20 20 32 20 20 20 2f  E_Abort    2   /
14bb0 2a 20 42 61 63 6b 20 6f 75 74 20 63 68 61 6e 67  * Back out chang
14bc0 65 73 20 62 75 74 20 64 6f 20 6e 6f 20 72 6f 6c  es but do no rol
14bd0 6c 62 61 63 6b 20 74 72 61 6e 73 61 63 74 69 6f  lback transactio
14be0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  n */.#define OE_
14bf0 46 61 69 6c 20 20 20 20 20 33 20 20 20 2f 2a 20  Fail     3   /* 
14c00 53 74 6f 70 20 74 68 65 20 6f 70 65 72 61 74 69  Stop the operati
14c10 6f 6e 20 62 75 74 20 6c 65 61 76 65 20 61 6c 6c  on but leave all
14c20 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 2a   prior changes *
14c30 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 49 67 6e  /.#define OE_Ign
14c40 6f 72 65 20 20 20 34 20 20 20 2f 2a 20 49 67 6e  ore   4   /* Ign
14c50 6f 72 65 20 74 68 65 20 65 72 72 6f 72 2e 20 44  ore the error. D
14c60 6f 20 6e 6f 74 20 64 6f 20 74 68 65 20 49 4e 53  o not do the INS
14c70 45 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a 2f  ERT or UPDATE */
14c80 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65 70 6c  .#define OE_Repl
14c90 61 63 65 20 20 35 20 20 20 2f 2a 20 44 65 6c 65  ace  5   /* Dele
14ca0 74 65 20 65 78 69 73 74 69 6e 67 20 72 65 63 6f  te existing reco
14cb0 72 64 2c 20 74 68 65 6e 20 64 6f 20 49 4e 53 45  rd, then do INSE
14cc0 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a  RT or UPDATE */.
14cd0 23 64 65 66 69 6e 65 20 4f 45 5f 55 70 64 61 74  #define OE_Updat
14ce0 65 20 20 20 36 20 20 20 2f 2a 20 50 72 6f 63 65  e   6   /* Proce
14cf0 73 73 20 61 73 20 61 20 44 4f 20 55 50 44 41 54  ss as a DO UPDAT
14d00 45 20 69 6e 20 61 6e 20 75 70 73 65 72 74 20 2a  E in an upsert *
14d10 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65 73  /.#define OE_Res
14d20 74 72 69 63 74 20 37 20 20 20 2f 2a 20 4f 45 5f  trict 7   /* OE_
14d30 41 62 6f 72 74 20 66 6f 72 20 49 4d 4d 45 44 49  Abort for IMMEDI
14d40 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b  ATE, OE_Rollback
14d50 20 66 6f 72 20 44 45 46 45 52 52 45 44 20 2a 2f   for DEFERRED */
14d60 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74 4e  .#define OE_SetN
14d70 75 6c 6c 20 20 38 20 20 20 2f 2a 20 53 65 74 20  ull  8   /* Set 
14d80 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  the foreign key 
14d90 76 61 6c 75 65 20 74 6f 20 4e 55 4c 4c 20 2a 2f  value to NULL */
14da0 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74 44  .#define OE_SetD
14db0 66 6c 74 20 20 39 20 20 20 2f 2a 20 53 65 74 20  flt  9   /* Set 
14dc0 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  the foreign key 
14dd0 76 61 6c 75 65 20 74 6f 20 69 74 73 20 64 65 66  value to its def
14de0 61 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ault */.#define 
14df0 4f 45 5f 43 61 73 63 61 64 65 20 20 31 30 20 20  OE_Cascade  10  
14e00 2f 2a 20 43 61 73 63 61 64 65 20 74 68 65 20 63  /* Cascade the c
14e10 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e  hanges */.#defin
14e20 65 20 4f 45 5f 44 65 66 61 75 6c 74 20 20 31 31  e OE_Default  11
14e30 20 20 2f 2a 20 44 6f 20 77 68 61 74 65 76 65 72    /* Do whatever
14e40 20 74 68 65 20 64 65 66 61 75 6c 74 20 61 63 74   the default act
14e50 69 6f 6e 20 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a  ion is */.../*.*
14e60 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
14e70 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
14e80 74 72 75 63 74 75 72 65 20 69 73 20 70 61 73 73  tructure is pass
14e90 65 64 20 61 73 20 74 68 65 20 66 69 72 73 74 0a  ed as the first.
14ea0 2a 2a 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 73  ** argument to s
14eb0 71 6c 69 74 65 33 56 64 62 65 4b 65 79 43 6f 6d  qlite3VdbeKeyCom
14ec0 70 61 72 65 20 61 6e 64 20 69 73 20 75 73 65 64  pare and is used
14ed0 20 74 6f 20 63 6f 6e 74 72 6f 6c 20 74 68 65 0a   to control the.
14ee0 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66  ** comparison of
14ef0 20 74 68 65 20 74 77 6f 20 69 6e 64 65 78 20 6b   the two index k
14f00 65 79 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20  eys..**.** Note 
14f10 74 68 61 74 20 61 53 6f 72 74 4f 72 64 65 72 5b  that aSortOrder[
14f20 5d 20 61 6e 64 20 61 43 6f 6c 6c 5b 5d 20 68 61  ] and aColl[] ha
14f30 76 65 20 6e 46 69 65 6c 64 2b 31 20 73 6c 6f 74  ve nField+1 slot
14f40 73 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65  s.  There.** are
14f50 20 6e 46 69 65 6c 64 20 73 6c 6f 74 73 20 66 6f   nField slots fo
14f60 72 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66  r the columns of
14f70 20 61 6e 20 69 6e 64 65 78 20 74 68 65 6e 20 6f   an index then o
14f80 6e 65 20 65 78 74 72 61 20 73 6c 6f 74 0a 2a 2a  ne extra slot.**
14f90 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64 20 61   for the rowid a
14fa0 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74  t the end..*/.st
14fb0 72 75 63 74 20 4b 65 79 49 6e 66 6f 20 7b 0a 20  ruct KeyInfo {. 
14fc0 20 75 33 32 20 6e 52 65 66 3b 20 20 20 20 20 20   u32 nRef;      
14fd0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
14fe0 66 20 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20  f references to 
14ff0 74 68 69 73 20 4b 65 79 49 6e 66 6f 20 6f 62 6a  this KeyInfo obj
15000 65 63 74 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b  ect */.  u8 enc;
15010 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
15020 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2d 20  Text encoding - 
15030 6f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54  one of the SQLIT
15040 45 5f 55 54 46 2a 20 76 61 6c 75 65 73 20 2a 2f  E_UTF* values */
15050 0a 20 20 75 31 36 20 6e 4b 65 79 46 69 65 6c 64  .  u16 nKeyField
15060 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
15070 20 6f 66 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20   of key columns 
15080 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a  in the index */.
15090 20 20 75 31 36 20 6e 41 6c 6c 46 69 65 6c 64 3b    u16 nAllField;
150a0 20 20 20 20 20 20 2f 2a 20 54 6f 74 61 6c 20 63        /* Total c
150b0 6f 6c 75 6d 6e 73 2c 20 69 6e 63 6c 75 64 69 6e  olumns, includin
150c0 67 20 6b 65 79 20 70 6c 75 73 20 6f 74 68 65 72  g key plus other
150d0 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a  s */.  sqlite3 *
150e0 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  db;        /* Th
150f0 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
15100 63 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 2a 61  ction */.  u8 *a
15110 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 2f  SortOrder;     /
15120 2a 20 53 6f 72 74 20 6f 72 64 65 72 20 66 6f 72  * Sort order for
15130 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 20 2a 2f   each column. */
15140 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 61 43 6f 6c  .  CollSeq *aCol
15150 6c 5b 31 5d 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74  l[1];  /* Collat
15160 69 6e 67 20 73 65 71 75 65 6e 63 65 20 66 6f 72  ing sequence for
15170 20 65 61 63 68 20 74 65 72 6d 20 6f 66 20 74 68   each term of th
15180 65 20 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  e key */.};../*.
15190 2a 2a 20 54 68 69 73 20 6f 62 6a 65 63 74 20 68  ** This object h
151a0 6f 6c 64 73 20 61 20 72 65 63 6f 72 64 20 77 68  olds a record wh
151b0 69 63 68 20 68 61 73 20 62 65 65 6e 20 70 61 72  ich has been par
151c0 73 65 64 20 6f 75 74 20 69 6e 74 6f 20 69 6e 64  sed out into ind
151d0 69 76 69 64 75 61 6c 0a 2a 2a 20 66 69 65 6c 64  ividual.** field
151e0 73 2c 20 66 6f 72 20 74 68 65 20 70 75 72 70 6f  s, for the purpo
151f0 73 65 73 20 6f 66 20 64 6f 69 6e 67 20 61 20 63  ses of doing a c
15200 6f 6d 70 61 72 69 73 6f 6e 2e 0a 2a 2a 0a 2a 2a  omparison..**.**
15210 20 41 20 72 65 63 6f 72 64 20 69 73 20 61 6e 20   A record is an 
15220 6f 62 6a 65 63 74 20 74 68 61 74 20 63 6f 6e 74  object that cont
15230 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  ains one or more
15240 20 66 69 65 6c 64 73 20 6f 66 20 64 61 74 61 2e   fields of data.
15250 0a 2a 2a 20 52 65 63 6f 72 64 73 20 61 72 65 20  .** Records are 
15260 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
15270 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20 74  e content of a t
15280 61 62 6c 65 20 72 6f 77 20 61 6e 64 20 74 6f 20  able row and to 
15290 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20 6b 65 79  store.** the key
152a0 20 6f 66 20 61 6e 20 69 6e 64 65 78 2e 20 20 41   of an index.  A
152b0 20 62 6c 6f 62 20 65 6e 63 6f 64 69 6e 67 20 6f   blob encoding o
152c0 66 20 61 20 72 65 63 6f 72 64 20 69 73 20 63 72  f a record is cr
152d0 65 61 74 65 64 20 62 79 0a 2a 2a 20 74 68 65 20  eated by.** the 
152e0 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70  OP_MakeRecord op
152f0 63 6f 64 65 20 6f 66 20 74 68 65 20 56 44 42 45  code of the VDBE
15300 20 61 6e 64 20 69 73 20 64 69 73 61 73 73 65 6d   and is disassem
15310 62 6c 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 4f  bled by the.** O
15320 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e  P_Column opcode.
15330 0a 2a 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  .**.** An instan
15340 63 65 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63  ce of this objec
15350 74 20 73 65 72 76 65 73 20 61 73 20 61 20 22 6b  t serves as a "k
15360 65 79 22 20 66 6f 72 20 64 6f 69 6e 67 20 61 20  ey" for doing a 
15370 73 65 61 72 63 68 20 6f 6e 0a 2a 2a 20 61 6e 20  search on.** an 
15380 69 6e 64 65 78 20 62 2b 74 72 65 65 2e 20 54 68  index b+tree. Th
15390 65 20 67 6f 61 6c 20 6f 66 20 74 68 65 20 73 65  e goal of the se
153a0 61 72 63 68 20 69 73 20 74 6f 20 66 69 6e 64 20  arch is to find 
153b0 74 68 65 20 65 6e 74 72 79 20 74 68 61 74 0a 2a  the entry that.*
153c0 2a 20 69 73 20 63 6c 6f 73 65 64 20 74 6f 20 74  * is closed to t
153d0 68 65 20 6b 65 79 20 64 65 73 63 72 69 62 65 64  he key described
153e0 20 62 79 20 74 68 69 73 20 6f 62 6a 65 63 74 2e   by this object.
153f0 20 20 54 68 69 73 20 6f 62 6a 65 63 74 20 6d 69    This object mi
15400 67 68 74 20 68 6f 6c 64 0a 2a 2a 20 6a 75 73 74  ght hold.** just
15410 20 61 20 70 72 65 66 69 78 20 6f 66 20 74 68 65   a prefix of the
15420 20 6b 65 79 2e 20 20 54 68 65 20 6e 75 6d 62 65   key.  The numbe
15430 72 20 6f 66 20 66 69 65 6c 64 73 20 69 73 20 67  r of fields is g
15440 69 76 65 6e 20 62 79 0a 2a 2a 20 70 4b 65 79 49  iven by.** pKeyI
15450 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2e 0a 2a 2a 0a  nfo->nField..**.
15460 2a 2a 20 54 68 65 20 72 31 20 61 6e 64 20 72 32  ** The r1 and r2
15470 20 66 69 65 6c 64 73 20 61 72 65 20 74 68 65 20   fields are the 
15480 76 61 6c 75 65 73 20 74 6f 20 72 65 74 75 72 6e  values to return
15490 20 69 66 20 74 68 69 73 20 6b 65 79 20 69 73 20   if this key is 
154a0 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 6f 72 20  less than.** or 
154b0 67 72 65 61 74 65 72 20 74 68 61 6e 20 61 20 6b  greater than a k
154c0 65 79 20 69 6e 20 74 68 65 20 62 74 72 65 65 2c  ey in the btree,
154d0 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20   respectively.  
154e0 54 68 65 73 65 20 61 72 65 20 6e 6f 72 6d 61 6c  These are normal
154f0 6c 79 0a 2a 2a 20 2d 31 20 61 6e 64 20 2b 31 20  ly.** -1 and +1 
15500 72 65 73 70 65 63 74 69 76 65 6c 79 2c 20 62 75  respectively, bu
15510 74 20 6d 69 67 68 74 20 62 65 20 69 6e 76 65 72  t might be inver
15520 74 65 64 20 74 6f 20 2b 31 20 61 6e 64 20 2d 31  ted to +1 and -1
15530 20 69 66 20 74 68 65 20 62 2d 74 72 65 65 0a 2a   if the b-tree.*
15540 2a 20 69 73 20 69 6e 20 44 45 53 43 20 6f 72 64  * is in DESC ord
15550 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6b 65  er..**.** The ke
15560 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66 75 6e  y comparison fun
15570 63 74 69 6f 6e 73 20 61 63 74 75 61 6c 6c 79 20  ctions actually 
15580 72 65 74 75 72 6e 20 64 65 66 61 75 6c 74 5f 72  return default_r
15590 63 20 77 68 65 6e 20 74 68 65 79 20 66 69 6e 64  c when they find
155a0 0a 2a 2a 20 61 6e 20 65 71 75 61 6c 73 20 63 6f  .** an equals co
155b0 6d 70 61 72 69 73 6f 6e 2e 20 20 64 65 66 61 75  mparison.  defau
155c0 6c 74 5f 72 63 20 63 61 6e 20 62 65 20 2d 31 2c  lt_rc can be -1,
155d0 20 30 2c 20 6f 72 20 2b 31 2e 20 20 49 66 20 74   0, or +1.  If t
155e0 68 65 72 65 20 61 72 65 0a 2a 2a 20 6d 75 6c 74  here are.** mult
155f0 69 70 6c 65 20 65 6e 74 72 69 65 73 20 69 6e 20  iple entries in 
15600 74 68 65 20 62 2d 74 72 65 65 20 77 69 74 68 20  the b-tree with 
15610 74 68 65 20 73 61 6d 65 20 6b 65 79 20 28 77 68  the same key (wh
15620 65 6e 20 6f 6e 6c 79 20 6c 6f 6f 6b 69 6e 67 0a  en only looking.
15630 2a 2a 20 61 74 20 74 68 65 20 66 69 72 73 74 20  ** at the first 
15640 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64  pKeyInfo->nField
15650 73 2c 29 20 74 68 65 6e 20 64 65 66 61 75 6c 74  s,) then default
15660 5f 72 63 20 63 61 6e 20 62 65 20 73 65 74 20 74  _rc can be set t
15670 6f 20 2d 31 20 74 6f 0a 2a 2a 20 63 61 75 73 65  o -1 to.** cause
15680 20 74 68 65 20 73 65 61 72 63 68 20 74 6f 20 66   the search to f
15690 69 6e 64 20 74 68 65 20 6c 61 73 74 20 6d 61 74  ind the last mat
156a0 63 68 2c 20 6f 72 20 2b 31 20 74 6f 20 63 61 75  ch, or +1 to cau
156b0 73 65 20 74 68 65 20 73 65 61 72 63 68 20 74 6f  se the search to
156c0 0a 2a 2a 20 66 69 6e 64 20 74 68 65 20 66 69 72  .** find the fir
156d0 73 74 20 6d 61 74 63 68 2e 0a 2a 2a 0a 2a 2a 20  st match..**.** 
156e0 54 68 65 20 6b 65 79 20 63 6f 6d 70 61 72 69 73  The key comparis
156f0 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 77 69 6c  on functions wil
15700 6c 20 73 65 74 20 65 71 53 65 65 6e 20 74 6f 20  l set eqSeen to 
15710 74 72 75 65 20 69 66 20 74 68 65 79 20 65 76 65  true if they eve
15720 72 0a 2a 2a 20 67 65 74 20 61 6e 64 20 65 71 75  r.** get and equ
15730 61 6c 20 72 65 73 75 6c 74 73 20 77 68 65 6e 20  al results when 
15740 63 6f 6d 70 61 72 69 6e 67 20 74 68 69 73 20 73  comparing this s
15750 74 72 75 63 74 75 72 65 20 74 6f 20 61 20 62 2d  tructure to a b-
15760 74 72 65 65 20 72 65 63 6f 72 64 2e 0a 2a 2a 20  tree record..** 
15770 57 68 65 6e 20 64 65 66 61 75 6c 74 5f 72 63 21  When default_rc!
15780 3d 30 2c 20 74 68 65 20 73 65 61 72 63 68 20 6d  =0, the search m
15790 69 67 68 74 20 65 6e 64 20 75 70 20 6f 6e 20 74  ight end up on t
157a0 68 65 20 72 65 63 6f 72 64 20 69 6d 6d 65 64 69  he record immedi
157b0 61 74 65 6c 79 0a 2a 2a 20 62 65 66 6f 72 65 20  ately.** before 
157c0 74 68 65 20 66 69 72 73 74 20 6d 61 74 63 68 20  the first match 
157d0 6f 72 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 61  or immediately a
157e0 66 74 65 72 20 74 68 65 20 6c 61 73 74 20 6d 61  fter the last ma
157f0 74 63 68 2e 20 20 54 68 65 0a 2a 2a 20 65 71 53  tch.  The.** eqS
15800 65 65 6e 20 66 69 65 6c 64 20 77 69 6c 6c 20 69  een field will i
15810 6e 64 69 63 61 74 65 20 77 68 65 74 68 65 72 20  ndicate whether 
15820 6f 72 20 6e 6f 74 20 61 6e 20 65 78 61 63 74 20  or not an exact 
15830 6d 61 74 63 68 20 65 78 69 73 74 73 20 69 6e 20  match exists in 
15840 74 68 65 0a 2a 2a 20 62 2d 74 72 65 65 2e 0a 2a  the.** b-tree..*
15850 2f 0a 73 74 72 75 63 74 20 55 6e 70 61 63 6b 65  /.struct Unpacke
15860 64 52 65 63 6f 72 64 20 7b 0a 20 20 4b 65 79 49  dRecord {.  KeyI
15870 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 20 20  nfo *pKeyInfo;  
15880 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20 61 6e 64  /* Collation and
15890 20 73 6f 72 74 2d 6f 72 64 65 72 20 69 6e 66 6f   sort-order info
158a0 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20 4d 65 6d  rmation */.  Mem
158b0 20 2a 61 4d 65 6d 3b 20 20 20 20 20 20 20 20 20   *aMem;         
158c0 20 2f 2a 20 56 61 6c 75 65 73 20 2a 2f 0a 20 20   /* Values */.  
158d0 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20 20  u16 nField;     
158e0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
158f0 20 65 6e 74 72 69 65 73 20 69 6e 20 61 70 4d 65   entries in apMe
15900 6d 5b 5d 20 2a 2f 0a 20 20 69 38 20 64 65 66 61  m[] */.  i8 defa
15910 75 6c 74 5f 72 63 3b 20 20 20 20 20 20 2f 2a 20  ult_rc;      /* 
15920 43 6f 6d 70 61 72 69 73 6f 6e 20 72 65 73 75 6c  Comparison resul
15930 74 20 69 66 20 6b 65 79 73 20 61 72 65 20 65 71  t if keys are eq
15940 75 61 6c 20 2a 2f 0a 20 20 75 38 20 65 72 72 43  ual */.  u8 errC
15950 6f 64 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ode;         /* 
15960 45 72 72 6f 72 20 64 65 74 65 63 74 65 64 20 62  Error detected b
15970 79 20 78 52 65 63 6f 72 64 43 6f 6d 70 61 72 65  y xRecordCompare
15980 20 28 43 4f 52 52 55 50 54 20 6f 72 20 4e 4f 4d   (CORRUPT or NOM
15990 45 4d 29 20 2a 2f 0a 20 20 69 38 20 72 31 3b 20  EM) */.  i8 r1; 
159a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
159b0 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20  Value to return 
159c0 69 66 20 28 6c 68 73 20 3c 20 72 68 73 29 20 2a  if (lhs < rhs) *
159d0 2f 0a 20 20 69 38 20 72 32 3b 20 20 20 20 20 20  /.  i8 r2;      
159e0 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
159f0 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20 28 6c   to return if (l
15a00 68 73 20 3e 20 72 68 73 29 20 2a 2f 0a 20 20 75  hs > rhs) */.  u
15a10 38 20 65 71 53 65 65 6e 3b 20 20 20 20 20 20 20  8 eqSeen;       
15a20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61 6e     /* True if an
15a30 20 65 71 75 61 6c 69 74 79 20 63 6f 6d 70 61 72   equality compar
15a40 69 73 6f 6e 20 68 61 73 20 62 65 65 6e 20 73 65  ison has been se
15a50 65 6e 20 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a  en */.};.../*.**
15a60 20 45 61 63 68 20 53 51 4c 20 69 6e 64 65 78 20   Each SQL index 
15a70 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69  is represented i
15a80 6e 20 6d 65 6d 6f 72 79 20 62 79 20 61 6e 0a 2a  n memory by an.*
15a90 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  * instance of th
15aa0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
15ab0 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  cture..**.** The
15ac0 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20   columns of the 
15ad0 74 61 62 6c 65 20 74 68 61 74 20 61 72 65 20 74  table that are t
15ae0 6f 20 62 65 20 69 6e 64 65 78 65 64 20 61 72 65  o be indexed are
15af0 20 64 65 73 63 72 69 62 65 64 0a 2a 2a 20 62 79   described.** by
15b00 20 74 68 65 20 61 69 43 6f 6c 75 6d 6e 5b 5d 20   the aiColumn[] 
15b10 66 69 65 6c 64 20 6f 66 20 74 68 69 73 20 73 74  field of this st
15b20 72 75 63 74 75 72 65 2e 20 20 46 6f 72 20 65 78  ructure.  For ex
15b30 61 6d 70 6c 65 2c 20 73 75 70 70 6f 73 65 0a 2a  ample, suppose.*
15b40 2a 20 77 65 20 68 61 76 65 20 74 68 65 20 66 6f  * we have the fo
15b50 6c 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20 61 6e  llowing table an
15b60 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a 2a 2a 20 20  d index:.**.**  
15b70 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
15b80 45 78 31 28 63 31 20 69 6e 74 2c 20 63 32 20 69  Ex1(c1 int, c2 i
15b90 6e 74 2c 20 63 33 20 74 65 78 74 29 3b 0a 2a 2a  nt, c3 text);.**
15ba0 20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45       CREATE INDE
15bb0 58 20 45 78 32 20 4f 4e 20 45 78 31 28 63 33 2c  X Ex2 ON Ex1(c3,
15bc0 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68  c1);.**.** In th
15bd0 65 20 54 61 62 6c 65 20 73 74 72 75 63 74 75 72  e Table structur
15be0 65 20 64 65 73 63 72 69 62 69 6e 67 20 45 78 31  e describing Ex1
15bf0 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65 63 61 75 73  , nCol==3 becaus
15c00 65 20 74 68 65 72 65 20 61 72 65 0a 2a 2a 20 74  e there are.** t
15c10 68 72 65 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  hree columns in 
15c20 74 68 65 20 74 61 62 6c 65 2e 20 20 49 6e 20 74  the table.  In t
15c30 68 65 20 49 6e 64 65 78 20 73 74 72 75 63 74 75  he Index structu
15c40 72 65 20 64 65 73 63 72 69 62 69 6e 67 0a 2a 2a  re describing.**
15c50 20 45 78 32 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d 32   Ex2, nColumn==2
15c60 20 73 69 6e 63 65 20 32 20 6f 66 20 74 68 65 20   since 2 of the 
15c70 33 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 45 78 31  3 columns of Ex1
15c80 20 61 72 65 20 69 6e 64 65 78 65 64 2e 0a 2a 2a   are indexed..**
15c90 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20 61 69   The value of ai
15ca0 43 6f 6c 75 6d 6e 20 69 73 20 7b 32 2c 20 30 7d  Column is {2, 0}
15cb0 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d  .  aiColumn[0]==
15cc0 32 20 62 65 63 61 75 73 65 20 74 68 65 0a 2a 2a  2 because the.**
15cd0 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 74 6f   first column to
15ce0 20 62 65 20 69 6e 64 65 78 65 64 20 28 63 33 29   be indexed (c3)
15cf0 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66   has an index of
15d00 20 32 20 69 6e 20 45 78 31 2e 61 43 6f 6c 5b 5d   2 in Ex1.aCol[]
15d10 2e 0a 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20  ..** The second 
15d20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64  column to be ind
15d30 65 78 65 64 20 28 63 31 29 20 68 61 73 20 61 6e  exed (c1) has an
15d40 20 69 6e 64 65 78 20 6f 66 20 30 20 69 6e 0a 2a   index of 0 in.*
15d50 2a 20 45 78 31 2e 61 43 6f 6c 5b 5d 2c 20 68 65  * Ex1.aCol[], he
15d60 6e 63 65 20 45 78 32 2e 61 69 43 6f 6c 75 6d 6e  nce Ex2.aiColumn
15d70 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54 68  [1]==0..**.** Th
15d80 65 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20  e Index.onError 
15d90 66 69 65 6c 64 20 64 65 74 65 72 6d 69 6e 65 73  field determines
15da0 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
15db0 74 68 65 20 69 6e 64 65 78 65 64 20 63 6f 6c 75  the indexed colu
15dc0 6d 6e 73 0a 2a 2a 20 6d 75 73 74 20 62 65 20 75  mns.** must be u
15dd0 6e 69 71 75 65 20 61 6e 64 20 77 68 61 74 20 74  nique and what t
15de0 6f 20 64 6f 20 69 66 20 74 68 65 79 20 61 72 65  o do if they are
15df0 20 6e 6f 74 2e 20 20 57 68 65 6e 20 49 6e 64 65   not.  When Inde
15e00 78 2e 6f 6e 45 72 72 6f 72 3d 4f 45 5f 4e 6f 6e  x.onError=OE_Non
15e10 65 2c 0a 2a 2a 20 69 74 20 6d 65 61 6e 73 20 74  e,.** it means t
15e20 68 69 73 20 69 73 20 6e 6f 74 20 61 20 75 6e 69  his is not a uni
15e30 71 75 65 20 69 6e 64 65 78 2e 20 20 4f 74 68 65  que index.  Othe
15e40 72 77 69 73 65 20 69 74 20 69 73 20 61 20 75 6e  rwise it is a un
15e50 69 71 75 65 20 69 6e 64 65 78 0a 2a 2a 20 61 6e  ique index.** an
15e60 64 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 49  d the value of I
15e70 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 69 6e 64  ndex.onError ind
15e80 69 63 61 74 65 20 74 68 65 20 77 68 69 63 68 20  icate the which 
15e90 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74  conflict resolut
15ea0 69 6f 6e 0a 2a 2a 20 61 6c 67 6f 72 69 74 68 6d  ion.** algorithm
15eb0 20 74 6f 20 65 6d 70 6c 6f 79 20 77 68 65 6e 65   to employ whene
15ec0 76 65 72 20 61 6e 20 61 74 74 65 6d 70 74 20 69  ver an attempt i
15ed0 73 20 6d 61 64 65 20 74 6f 20 69 6e 73 65 72 74  s made to insert
15ee0 20 61 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a 2a 2a   a non-unique.**
15ef0 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20   element..**.** 
15f00 57 68 69 6c 65 20 70 61 72 73 69 6e 67 20 61 20  While parsing a 
15f10 43 52 45 41 54 45 20 54 41 42 4c 45 20 6f 72 20  CREATE TABLE or 
15f20 43 52 45 41 54 45 20 49 4e 44 45 58 20 73 74 61  CREATE INDEX sta
15f30 74 65 6d 65 6e 74 20 69 6e 20 6f 72 64 65 72 20  tement in order 
15f40 74 6f 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 56  to.** generate V
15f50 44 42 45 20 63 6f 64 65 20 28 61 73 20 6f 70 70  DBE code (as opp
15f60 6f 73 65 64 20 74 6f 20 70 61 72 73 69 6e 67 20  osed to parsing 
15f70 6f 6e 65 20 72 65 61 64 20 66 72 6f 6d 20 61 6e  one read from an
15f80 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 0a 2a   sqlite_master.*
15f90 2a 20 74 61 62 6c 65 20 61 73 20 70 61 72 74 20  * table as part 
15fa0 6f 66 20 70 61 72 73 69 6e 67 20 61 6e 20 65 78  of parsing an ex
15fb0 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20  isting database 
15fc0 73 63 68 65 6d 61 29 2c 20 74 72 61 6e 73 69 65  schema), transie
15fd0 6e 74 20 69 6e 73 74 61 6e 63 65 73 0a 2a 2a 20  nt instances.** 
15fe0 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
15ff0 65 20 6d 61 79 20 62 65 20 63 72 65 61 74 65 64  e may be created
16000 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 74  . In this case t
16010 68 65 20 49 6e 64 65 78 2e 74 6e 75 6d 20 76 61  he Index.tnum va
16020 72 69 61 62 6c 65 20 69 73 0a 2a 2a 20 75 73 65  riable is.** use
16030 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 61  d to store the a
16040 64 64 72 65 73 73 20 6f 66 20 61 20 56 44 42 45  ddress of a VDBE
16050 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c 20 6e 6f   instruction, no
16060 74 20 61 20 64 61 74 61 62 61 73 65 20 70 61 67  t a database pag
16070 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 28 69 74 20  e.** number (it 
16080 63 61 6e 6e 6f 74 20 2d 20 74 68 65 20 64 61 74  cannot - the dat
16090 61 62 61 73 65 20 70 61 67 65 20 69 73 20 6e 6f  abase page is no
160a0 74 20 61 6c 6c 6f 63 61 74 65 64 20 75 6e 74 69  t allocated unti
160b0 6c 20 74 68 65 20 56 44 42 45 0a 2a 2a 20 70 72  l the VDBE.** pr
160c0 6f 67 72 61 6d 20 69 73 20 65 78 65 63 75 74 65  ogram is execute
160d0 64 29 2e 20 53 65 65 20 63 6f 6e 76 65 72 74 54  d). See convertT
160e0 6f 57 69 74 68 6f 75 74 52 6f 77 69 64 54 61 62  oWithoutRowidTab
160f0 6c 65 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73  le() for details
16100 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65  ..*/.struct Inde
16110 78 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  x {.  char *zNam
16120 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
16130 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 69  * Name of this i
16140 6e 64 65 78 20 2a 2f 0a 20 20 69 31 36 20 2a 61  ndex */.  i16 *a
16150 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  iColumn;        
16160 20 20 20 2f 2a 20 57 68 69 63 68 20 63 6f 6c 75     /* Which colu
16170 6d 6e 73 20 61 72 65 20 75 73 65 64 20 62 79 20  mns are used by 
16180 74 68 69 73 20 69 6e 64 65 78 2e 20 20 31 73 74  this index.  1st
16190 20 69 73 20 30 20 2a 2f 0a 20 20 4c 6f 67 45 73   is 0 */.  LogEs
161a0 74 20 2a 61 69 52 6f 77 4c 6f 67 45 73 74 3b 20  t *aiRowLogEst; 
161b0 20 20 20 20 2f 2a 20 46 72 6f 6d 20 41 4e 41 4c      /* From ANAL
161c0 59 5a 45 3a 20 45 73 74 2e 20 72 6f 77 73 20 73  YZE: Est. rows s
161d0 65 6c 65 63 74 65 64 20 62 79 20 65 61 63 68 20  elected by each 
161e0 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 54 61 62 6c  column */.  Tabl
161f0 65 20 2a 70 54 61 62 6c 65 3b 20 20 20 20 20 20  e *pTable;      
16200 20 20 20 20 20 2f 2a 20 54 68 65 20 53 51 4c 20       /* The SQL 
16210 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 64 65  table being inde
16220 78 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  xed */.  char *z
16230 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 20 20  ColAff;         
16240 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69    /* String defi
16250 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74  ning the affinit
16260 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e  y of each column
16270 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 4e 65   */.  Index *pNe
16280 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  xt;            /
16290 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 64 65 78  * The next index
162a0 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
162b0 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65 20   the same table 
162c0 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
162d0 68 65 6d 61 3b 20 20 20 20 20 20 20 20 20 2f 2a  hema;         /*
162e0 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69   Schema containi
162f0 6e 67 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f  ng this index */
16300 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65  .  u8 *aSortOrde
16310 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 66  r;          /* f
16320 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 3a 20  or each column: 
16330 54 72 75 65 3d 3d 44 45 53 43 2c 20 46 61 6c 73  True==DESC, Fals
16340 65 3d 3d 41 53 43 20 2a 2f 0a 20 20 63 6f 6e 73  e==ASC */.  cons
16350 74 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 6c 3b  t char **azColl;
16360 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66       /* Array of
16370 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
16380 6e 63 65 20 6e 61 6d 65 73 20 66 6f 72 20 69 6e  nce names for in
16390 64 65 78 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  dex */.  Expr *p
163a0 50 61 72 74 49 64 78 57 68 65 72 65 3b 20 20 20  PartIdxWhere;   
163b0 20 20 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73    /* WHERE claus
163c0 65 20 66 6f 72 20 70 61 72 74 69 61 6c 20 69 6e  e for partial in
163d0 64 69 63 65 73 20 2a 2f 0a 20 20 45 78 70 72 4c  dices */.  ExprL
163e0 69 73 74 20 2a 61 43 6f 6c 45 78 70 72 3b 20 20  ist *aColExpr;  
163f0 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 65 78      /* Column ex
16400 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69  pressions */.  i
16410 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20  nt tnum;        
16420 20 20 20 20 20 20 20 20 2f 2a 20 44 42 20 50 61          /* DB Pa
16430 67 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 72 6f  ge containing ro
16440 6f 74 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78  ot of this index
16450 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a 49   */.  LogEst szI
16460 64 78 52 6f 77 3b 20 20 20 20 20 20 20 20 20 2f  dxRow;         /
16470 2a 20 45 73 74 69 6d 61 74 65 64 20 61 76 65 72  * Estimated aver
16480 61 67 65 20 72 6f 77 20 73 69 7a 65 20 69 6e 20  age row size in 
16490 62 79 74 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e  bytes */.  u16 n
164a0 4b 65 79 43 6f 6c 3b 20 20 20 20 20 20 20 20 20  KeyCol;         
164b0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
164c0 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 6d 69 6e 67   columns forming
164d0 20 74 68 65 20 6b 65 79 20 2a 2f 0a 20 20 75 31   the key */.  u1
164e0 36 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  6 nColumn;      
164f0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
16500 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 73 74 6f 72   of columns stor
16510 65 64 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20  ed in the index 
16520 2a 2f 0a 20 20 75 38 20 6f 6e 45 72 72 6f 72 3b  */.  u8 onError;
16530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
16540 20 4f 45 5f 41 62 6f 72 74 2c 20 4f 45 5f 49 67   OE_Abort, OE_Ig
16550 6e 6f 72 65 2c 20 4f 45 5f 52 65 70 6c 61 63 65  nore, OE_Replace
16560 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a  , or OE_None */.
16570 20 20 75 6e 73 69 67 6e 65 64 20 69 64 78 54 79    unsigned idxTy
16580 70 65 3a 32 3b 20 20 20 20 20 20 2f 2a 20 31 3d  pe:2;      /* 1=
16590 3d 55 4e 49 51 55 45 2c 20 32 3d 3d 50 52 49 4d  =UNIQUE, 2==PRIM
165a0 41 52 59 20 4b 45 59 2c 20 30 3d 3d 43 52 45 41  ARY KEY, 0==CREA
165b0 54 45 20 49 4e 44 45 58 20 2a 2f 0a 20 20 75 6e  TE INDEX */.  un
165c0 73 69 67 6e 65 64 20 62 55 6e 6f 72 64 65 72 65  signed bUnordere
165d0 64 3a 31 3b 20 20 20 2f 2a 20 55 73 65 20 74 68  d:1;   /* Use th
165e0 69 73 20 69 6e 64 65 78 20 66 6f 72 20 3d 3d 20  is index for == 
165f0 6f 72 20 49 4e 20 71 75 65 72 69 65 73 20 6f 6e  or IN queries on
16600 6c 79 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ly */.  unsigned
16610 20 75 6e 69 71 4e 6f 74 4e 75 6c 6c 3a 31 3b 20   uniqNotNull:1; 
16620 20 2f 2a 20 54 72 75 65 20 69 66 20 55 4e 49 51   /* True if UNIQ
16630 55 45 20 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20  UE and NOT NULL 
16640 66 6f 72 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20  for all columns 
16650 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 73  */.  unsigned is
16660 52 65 73 69 7a 65 64 3a 31 3b 20 20 20 20 2f 2a  Resized:1;    /*
16670 20 54 72 75 65 20 69 66 20 72 65 73 69 7a 65 49   True if resizeI
16680 6e 64 65 78 4f 62 6a 65 63 74 28 29 20 68 61 73  ndexObject() has
16690 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a   been called */.
166a0 20 20 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 76    unsigned isCov
166b0 65 72 69 6e 67 3a 31 3b 20 20 20 2f 2a 20 54 72  ering:1;   /* Tr
166c0 75 65 20 69 66 20 74 68 69 73 20 69 73 20 61 20  ue if this is a 
166d0 63 6f 76 65 72 69 6e 67 20 69 6e 64 65 78 20 2a  covering index *
166e0 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f 53  /.  unsigned noS
166f0 6b 69 70 53 63 61 6e 3a 31 3b 20 20 20 2f 2a 20  kipScan:1;   /* 
16700 44 6f 20 6e 6f 74 20 74 72 79 20 74 6f 20 75 73  Do not try to us
16710 65 20 73 6b 69 70 2d 73 63 61 6e 20 69 66 20 74  e skip-scan if t
16720 72 75 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  rue */.  unsigne
16730 64 20 68 61 73 53 74 61 74 31 3a 31 3b 20 20 20  d hasStat1:1;   
16740 20 20 2f 2a 20 61 69 52 6f 77 4c 6f 67 45 73 74    /* aiRowLogEst
16750 20 76 61 6c 75 65 73 20 63 6f 6d 65 20 66 72 6f   values come fro
16760 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 2a  m sqlite_stat1 *
16770 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 62 4e 6f  /.  unsigned bNo
16780 51 75 65 72 79 3a 31 3b 20 20 20 20 20 2f 2a 20  Query:1;     /* 
16790 44 6f 20 6e 6f 74 20 75 73 65 20 74 68 69 73 20  Do not use this 
167a0 69 6e 64 65 78 20 74 6f 20 6f 70 74 69 6d 69 7a  index to optimiz
167b0 65 20 71 75 65 72 69 65 73 20 2a 2f 0a 23 69 66  e queries */.#if
167c0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
167d0 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34  E_STAT3_OR_STAT4
167e0 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 3b 20  .  int nSample; 
167f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
16800 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74  umber of element
16810 73 20 69 6e 20 61 53 61 6d 70 6c 65 5b 5d 20 2a  s in aSample[] *
16820 2f 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 43  /.  int nSampleC
16830 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ol;          /* 
16840 53 69 7a 65 20 6f 66 20 49 6e 64 65 78 53 61 6d  Size of IndexSam
16850 70 6c 65 2e 61 6e 45 71 5b 5d 20 61 6e 64 20 73  ple.anEq[] and s
16860 6f 20 6f 6e 20 2a 2f 0a 20 20 74 52 6f 77 63 6e  o on */.  tRowcn
16870 74 20 2a 61 41 76 67 45 71 3b 20 20 20 20 20 20  t *aAvgEq;      
16880 20 20 20 2f 2a 20 41 76 65 72 61 67 65 20 6e 45     /* Average nE
16890 71 20 76 61 6c 75 65 73 20 66 6f 72 20 6b 65 79  q values for key
168a0 73 20 6e 6f 74 20 69 6e 20 61 53 61 6d 70 6c 65  s not in aSample
168b0 20 2a 2f 0a 20 20 49 6e 64 65 78 53 61 6d 70 6c   */.  IndexSampl
168c0 65 20 2a 61 53 61 6d 70 6c 65 3b 20 20 20 20 2f  e *aSample;    /
168d0 2a 20 53 61 6d 70 6c 65 73 20 6f 66 20 74 68 65  * Samples of the
168e0 20 6c 65 66 74 2d 6d 6f 73 74 20 6b 65 79 20 2a   left-most key *
168f0 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 69 52  /.  tRowcnt *aiR
16900 6f 77 45 73 74 3b 20 20 20 20 20 20 20 2f 2a 20  owEst;       /* 
16910 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20  Non-logarithmic 
16920 73 74 61 74 31 20 64 61 74 61 20 66 6f 72 20 74  stat1 data for t
16930 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 74  his index */.  t
16940 52 6f 77 63 6e 74 20 6e 52 6f 77 45 73 74 30 3b  Rowcnt nRowEst0;
16950 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c          /* Non-l
16960 6f 67 61 72 69 74 68 6d 69 63 20 6e 75 6d 62 65  ogarithmic numbe
16970 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65  r of rows in the
16980 20 69 6e 64 65 78 20 2a 2f 0a 23 65 6e 64 69 66   index */.#endif
16990 0a 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c 4e 6f  .  Bitmask colNo
169a0 74 49 64 78 65 64 3b 20 20 20 20 20 2f 2a 20 30  tIdxed;     /* 0
169b0 20 66 6f 72 20 75 6e 69 6e 64 65 78 65 64 20 63   for unindexed c
169c0 6f 6c 75 6d 6e 73 20 69 6e 20 70 54 61 62 20 2a  olumns in pTab *
169d0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  /.};../*.** Allo
169e0 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 49  wed values for I
169f0 6e 64 65 78 2e 69 64 78 54 79 70 65 0a 2a 2f 0a  ndex.idxType.*/.
16a00 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
16a10 44 58 54 59 50 45 5f 41 50 50 44 45 46 20 20 20  DXTYPE_APPDEF   
16a20 20 20 20 30 20 20 20 2f 2a 20 43 72 65 61 74 65     0   /* Create
16a30 64 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 49  d using CREATE I
16a40 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NDEX */.#define 
16a50 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 55  SQLITE_IDXTYPE_U
16a60 4e 49 51 55 45 20 20 20 20 20 20 31 20 20 20 2f  NIQUE      1   /
16a70 2a 20 49 6d 70 6c 65 6d 65 6e 74 73 20 61 20 55  * Implements a U
16a80 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74  NIQUE constraint
16a90 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
16aa0 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d 41  TE_IDXTYPE_PRIMA
16ab0 52 59 4b 45 59 20 20 32 20 20 20 2f 2a 20 49 73  RYKEY  2   /* Is
16ac0 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
16ad0 20 66 6f 72 20 74 68 65 20 74 61 62 6c 65 20 2a   for the table *
16ae0 2f 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72 75  /../* Return tru
16af0 65 20 69 66 20 69 6e 64 65 78 20 58 20 69 73 20  e if index X is 
16b00 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 6e  a PRIMARY KEY in
16b10 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  dex */.#define I
16b20 73 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78  sPrimaryKeyIndex
16b30 28 58 29 20 20 28 28 58 29 2d 3e 69 64 78 54 79  (X)  ((X)->idxTy
16b40 70 65 3d 3d 53 51 4c 49 54 45 5f 49 44 58 54 59  pe==SQLITE_IDXTY
16b50 50 45 5f 50 52 49 4d 41 52 59 4b 45 59 29 0a 0a  PE_PRIMARYKEY)..
16b60 2f 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69  /* Return true i
16b70 66 20 69 6e 64 65 78 20 58 20 69 73 20 61 20 55  f index X is a U
16b80 4e 49 51 55 45 20 69 6e 64 65 78 20 2a 2f 0a 23  NIQUE index */.#
16b90 64 65 66 69 6e 65 20 49 73 55 6e 69 71 75 65 49  define IsUniqueI
16ba0 6e 64 65 78 28 58 29 20 20 20 20 20 20 28 28 58  ndex(X)      ((X
16bb0 29 2d 3e 6f 6e 45 72 72 6f 72 21 3d 4f 45 5f 4e  )->onError!=OE_N
16bc0 6f 6e 65 29 0a 0a 2f 2a 20 54 68 65 20 49 6e 64  one)../* The Ind
16bd0 65 78 2e 61 69 43 6f 6c 75 6d 6e 5b 5d 20 76 61  ex.aiColumn[] va
16be0 6c 75 65 73 20 61 72 65 20 6e 6f 72 6d 61 6c 6c  lues are normall
16bf0 79 20 70 6f 73 69 74 69 76 65 20 69 6e 74 65 67  y positive integ
16c00 65 72 2e 20 20 42 75 74 0a 2a 2a 20 74 68 65 72  er.  But.** ther
16c10 65 20 61 72 65 20 73 6f 6d 65 20 6e 65 67 61 74  e are some negat
16c20 69 76 65 20 76 61 6c 75 65 73 20 74 68 61 74 20  ive values that 
16c30 68 61 76 65 20 73 70 65 63 69 61 6c 20 6d 65 61  have special mea
16c40 6e 69 6e 67 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65  ning:.*/.#define
16c50 20 58 4e 5f 52 4f 57 49 44 20 20 20 20 20 28 2d   XN_ROWID     (-
16c60 31 29 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 65  1)     /* Indexe
16c70 64 20 63 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20  d column is the 
16c80 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65  rowid */.#define
16c90 20 58 4e 5f 45 58 50 52 20 20 20 20 20 20 28 2d   XN_EXPR      (-
16ca0 32 29 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 65  2)     /* Indexe
16cb0 64 20 63 6f 6c 75 6d 6e 20 69 73 20 61 6e 20 65  d column is an e
16cc0 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 0a 2f 2a  xpression */../*
16cd0 0a 2a 2a 20 45 61 63 68 20 73 61 6d 70 6c 65 20  .** Each sample 
16ce0 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71  stored in the sq
16cf0 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65  lite_stat3 table
16d00 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20   is represented 
16d10 69 6e 20 6d 65 6d 6f 72 79 0a 2a 2a 20 75 73 69  in memory.** usi
16d20 6e 67 20 61 20 73 74 72 75 63 74 75 72 65 20 6f  ng a structure o
16d30 66 20 74 68 69 73 20 74 79 70 65 2e 20 20 53 65  f this type.  Se
16d40 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20  e documentation 
16d50 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68  at the top of th
16d60 65 0a 2a 2a 20 61 6e 61 6c 79 7a 65 2e 63 20 73  e.** analyze.c s
16d70 6f 75 72 63 65 20 66 69 6c 65 20 66 6f 72 20 61  ource file for a
16d80 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
16d90 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ation..*/.struct
16da0 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 7b 0a 20   IndexSample {. 
16db0 20 76 6f 69 64 20 2a 70 3b 20 20 20 20 20 20 20   void *p;       
16dc0 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
16dd0 20 73 61 6d 70 6c 65 64 20 72 65 63 6f 72 64 20   sampled record 
16de0 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20 20  */.  int n;     
16df0 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
16e00 66 20 72 65 63 6f 72 64 20 69 6e 20 62 79 74 65  f record in byte
16e10 73 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a  s */.  tRowcnt *
16e20 61 6e 45 71 3b 20 20 20 20 2f 2a 20 45 73 74 2e  anEq;    /* Est.
16e30 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
16e40 77 68 65 72 65 20 74 68 65 20 6b 65 79 20 65 71  where the key eq
16e50 75 61 6c 73 20 74 68 69 73 20 73 61 6d 70 6c 65  uals this sample
16e60 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61   */.  tRowcnt *a
16e70 6e 4c 74 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20  nLt;    /* Est. 
16e80 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 77  number of rows w
16e90 68 65 72 65 20 6b 65 79 20 69 73 20 6c 65 73 73  here key is less
16ea0 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70 6c   than this sampl
16eb0 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a  e */.  tRowcnt *
16ec0 61 6e 44 4c 74 3b 20 20 20 2f 2a 20 45 73 74 2e  anDLt;   /* Est.
16ed0 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 73 74 69   number of disti
16ee0 6e 63 74 20 6b 65 79 73 20 6c 65 73 73 20 74 68  nct keys less th
16ef0 61 6e 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a  an this sample *
16f00 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  /.};../*.** Each
16f10 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f 75   token coming ou
16f20 74 20 6f 66 20 74 68 65 20 6c 65 78 65 72 20 69  t of the lexer i
16f30 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
16f40 0a 2a 2a 20 74 68 69 73 20 73 74 72 75 63 74 75  .** this structu
16f50 72 65 2e 20 20 54 6f 6b 65 6e 73 20 61 72 65 20  re.  Tokens are 
16f60 61 6c 73 6f 20 75 73 65 64 20 61 73 20 70 61 72  also used as par
16f70 74 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69  t of an expressi
16f80 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 69  on..**.** Note i
16f90 66 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 20 74 68 65  f Token.z==0 the
16fa0 6e 20 54 6f 6b 65 6e 2e 64 79 6e 20 61 6e 64 20  n Token.dyn and 
16fb0 54 6f 6b 65 6e 2e 6e 20 61 72 65 20 75 6e 64 65  Token.n are unde
16fc0 66 69 6e 65 64 20 61 6e 64 0a 2a 2a 20 6d 61 79  fined and.** may
16fd0 20 63 6f 6e 74 61 69 6e 20 72 61 6e 64 6f 6d 20   contain random 
16fe0 76 61 6c 75 65 73 2e 20 20 44 6f 20 6e 6f 74 20  values.  Do not 
16ff0 6d 61 6b 65 20 61 6e 79 20 61 73 73 75 6d 70 74  make any assumpt
17000 69 6f 6e 73 20 61 62 6f 75 74 20 54 6f 6b 65 6e  ions about Token
17010 2e 64 79 6e 0a 2a 2a 20 61 6e 64 20 54 6f 6b 65  .dyn.** and Toke
17020 6e 2e 6e 20 77 68 65 6e 20 54 6f 6b 65 6e 2e 7a  n.n when Token.z
17030 3d 3d 30 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54  ==0..*/.struct T
17040 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73 74 20 63  oken {.  const c
17050 68 61 72 20 2a 7a 3b 20 20 20 20 20 2f 2a 20 54  har *z;     /* T
17060 65 78 74 20 6f 66 20 74 68 65 20 74 6f 6b 65 6e  ext of the token
17070 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74 65 72 6d  .  Not NULL-term
17080 69 6e 61 74 65 64 21 20 2a 2f 0a 20 20 75 6e 73  inated! */.  uns
17090 69 67 6e 65 64 20 69 6e 74 20 6e 3b 20 20 20 20  igned int n;    
170a0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 68 61  /* Number of cha
170b0 72 61 63 74 65 72 73 20 69 6e 20 74 68 69 73 20  racters in this 
170c0 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  token */.};../*.
170d0 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
170e0 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
170f0 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d   contains inform
17100 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20  ation needed to 
17110 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65  generate.** code
17120 20 66 6f 72 20 61 20 53 45 4c 45 43 54 20 74 68   for a SELECT th
17130 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 67 67 72  at contains aggr
17140 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 2e  egate functions.
17150 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78 70 72 2e 6f  .**.** If Expr.o
17160 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e  p==TK_AGG_COLUMN
17170 20 6f 72 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54   or TK_AGG_FUNCT
17180 49 4f 4e 20 74 68 65 6e 20 45 78 70 72 2e 70 41  ION then Expr.pA
17190 67 67 49 6e 66 6f 20 69 73 20 61 0a 2a 2a 20 70  ggInfo is a.** p
171a0 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73  ointer to this s
171b0 74 72 75 63 74 75 72 65 2e 20 20 54 68 65 20 45  tructure.  The E
171c0 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 66 69 65 6c  xpr.iColumn fiel
171d0 64 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 69  d is the index i
171e0 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 61 43 6f  n.** AggInfo.aCo
171f0 6c 5b 5d 20 6f 72 20 41 67 67 49 6e 66 6f 2e 61  l[] or AggInfo.a
17200 46 75 6e 63 5b 5d 20 6f 66 20 69 6e 66 6f 72 6d  Func[] of inform
17210 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20  ation needed to 
17220 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65  generate.** code
17230 20 66 6f 72 20 74 68 61 74 20 6e 6f 64 65 2e 0a   for that node..
17240 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 70 47  **.** AggInfo.pG
17250 72 6f 75 70 42 79 20 61 6e 64 20 41 67 67 49 6e  roupBy and AggIn
17260 66 6f 2e 61 46 75 6e 63 2e 70 45 78 70 72 20 70  fo.aFunc.pExpr p
17270 6f 69 6e 74 20 74 6f 20 66 69 65 6c 64 73 20 77  oint to fields w
17280 69 74 68 69 6e 20 74 68 65 0a 2a 2a 20 6f 72 69  ithin the.** ori
17290 67 69 6e 61 6c 20 53 65 6c 65 63 74 20 73 74 72  ginal Select str
172a0 75 63 74 75 72 65 20 74 68 61 74 20 64 65 73 63  ucture that desc
172b0 72 69 62 65 73 20 74 68 65 20 53 45 4c 45 43 54  ribes the SELECT
172c0 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65   statement.  The
172d0 73 65 0a 2a 2a 20 66 69 65 6c 64 73 20 64 6f 20  se.** fields do 
172e0 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62 65 20 66  not need to be f
172f0 72 65 65 64 20 77 68 65 6e 20 64 65 61 6c 6c 6f  reed when deallo
17300 63 61 74 69 6e 67 20 74 68 65 20 41 67 67 49 6e  cating the AggIn
17310 66 6f 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f  fo structure..*/
17320 0a 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20  .struct AggInfo 
17330 7b 0a 20 20 75 38 20 64 69 72 65 63 74 4d 6f 64  {.  u8 directMod
17340 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44  e;          /* D
17350 69 72 65 63 74 20 72 65 6e 64 65 72 69 6e 67 20  irect rendering 
17360 6d 6f 64 65 20 6d 65 61 6e 73 20 74 61 6b 65 20  mode means take 
17370 64 61 74 61 20 64 69 72 65 63 74 6c 79 0a 20 20  data directly.  
17380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17390 20 20 20 20 20 20 20 20 2a 2a 20 66 72 6f 6d 20          ** from 
173a0 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 72 61  source tables ra
173b0 74 68 65 72 20 74 68 61 6e 20 66 72 6f 6d 20 61  ther than from a
173c0 63 63 75 6d 75 6c 61 74 6f 72 73 20 2a 2f 0a 20  ccumulators */. 
173d0 20 75 38 20 75 73 65 53 6f 72 74 69 6e 67 49 64   u8 useSortingId
173e0 78 3b 20 20 20 20 20 20 20 2f 2a 20 49 6e 20 64  x;       /* In d
173f0 69 72 65 63 74 20 6d 6f 64 65 2c 20 72 65 66 65  irect mode, refe
17400 72 65 6e 63 65 20 74 68 65 20 73 6f 72 74 69 6e  rence the sortin
17410 67 20 69 6e 64 65 78 20 72 61 74 68 65 72 0a 20  g index rather. 
17420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17430 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68 61 6e           ** than
17440 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c   the source tabl
17450 65 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69  e */.  int sorti
17460 6e 67 49 64 78 3b 20 20 20 20 20 20 20 20 20 2f  ngIdx;         /
17470 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  * Cursor number 
17480 6f 66 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69  of the sorting i
17490 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 73 6f  ndex */.  int so
174a0 72 74 69 6e 67 49 64 78 50 54 61 62 3b 20 20 20  rtingIdxPTab;   
174b0 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62    /* Cursor numb
174c0 65 72 20 6f 66 20 70 73 65 75 64 6f 2d 74 61 62  er of pseudo-tab
174d0 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 6f 72  le */.  int nSor
174e0 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  tingColumn;     
174f0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
17500 75 6d 6e 73 20 69 6e 20 74 68 65 20 73 6f 72 74  umns in the sort
17510 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69  ing index */.  i
17520 6e 74 20 6d 6e 52 65 67 2c 20 6d 78 52 65 67 3b  nt mnReg, mxReg;
17530 20 20 20 20 20 20 20 2f 2a 20 52 61 6e 67 65 20         /* Range 
17540 6f 66 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c  of registers all
17550 6f 63 61 74 65 64 20 66 6f 72 20 61 43 6f 6c 20  ocated for aCol 
17560 61 6e 64 20 61 46 75 6e 63 20 2a 2f 0a 20 20 45  and aFunc */.  E
17570 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42  xprList *pGroupB
17580 79 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 67 72  y;     /* The gr
17590 6f 75 70 20 62 79 20 63 6c 61 75 73 65 20 2a 2f  oup by clause */
175a0 0a 20 20 73 74 72 75 63 74 20 41 67 67 49 6e 66  .  struct AggInf
175b0 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f 2a 20 46 6f  o_col {    /* Fo
175c0 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 75 73  r each column us
175d0 65 64 20 69 6e 20 73 6f 75 72 63 65 20 74 61 62  ed in source tab
175e0 6c 65 73 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65  les */.    Table
175f0 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20   *pTab;         
17600 20 20 20 20 2f 2a 20 53 6f 75 72 63 65 20 74 61      /* Source ta
17610 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ble */.    int i
17620 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  Table;          
17630 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75      /* Cursor nu
17640 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f 75 72  mber of the sour
17650 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  ce table */.    
17660 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20  int iColumn;    
17670 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75           /* Colu
17680 6d 6e 20 6e 75 6d 62 65 72 20 77 69 74 68 69 6e  mn number within
17690 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c   the source tabl
176a0 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 53 6f  e */.    int iSo
176b0 72 74 65 72 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  rterColumn;     
176c0 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62    /* Column numb
176d0 65 72 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e  er in the sortin
176e0 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 69  g index */.    i
176f0 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20  nt iMem;        
17700 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72          /* Memor
17710 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20  y location that 
17720 61 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61  acts as accumula
17730 74 6f 72 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  tor */.    Expr 
17740 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20  *pExpr;         
17750 20 20 20 20 2f 2a 20 54 68 65 20 6f 72 69 67 69      /* The origi
17760 6e 61 6c 20 65 78 70 72 65 73 73 69 6f 6e 20 2a  nal expression *
17770 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b 0a 20 20 69  /.  } *aCol;.  i
17780 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  nt nColumn;     
17790 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
177a0 20 6f 66 20 75 73 65 64 20 65 6e 74 72 69 65 73   of used entries
177b0 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a 2f 0a 20 20   in aCol[] */.  
177c0 69 6e 74 20 6e 41 63 63 75 6d 75 6c 61 74 6f 72  int nAccumulator
177d0 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  ;       /* Numbe
177e0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68 61  r of columns tha
177f0 74 20 73 68 6f 77 20 74 68 72 6f 75 67 68 20 74  t show through t
17800 6f 20 74 68 65 20 6f 75 74 70 75 74 2e 0a 20 20  o the output..  
17810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17820 20 20 20 20 20 20 20 20 2a 2a 20 41 64 64 69 74          ** Addit
17830 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73 20 61 72  ional columns ar
17840 65 20 75 73 65 64 20 6f 6e 6c 79 20 61 73 20 70  e used only as p
17850 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 20 20 20  arameters to.   
17860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17870 20 20 20 20 20 20 20 2a 2a 20 61 67 67 72 65 67         ** aggreg
17880 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  ate functions */
17890 0a 20 20 73 74 72 75 63 74 20 41 67 67 49 6e 66  .  struct AggInf
178a0 6f 5f 66 75 6e 63 20 7b 20 20 20 2f 2a 20 46 6f  o_func {   /* Fo
178b0 72 20 65 61 63 68 20 61 67 67 72 65 67 61 74 65  r each aggregate
178c0 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20   function */.   
178d0 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20   Expr *pExpr;   
178e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70            /* Exp
178f0 72 65 73 73 69 6f 6e 20 65 6e 63 6f 64 69 6e 67  ression encoding
17900 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f   the function */
17910 0a 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70 46  .    FuncDef *pF
17920 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  unc;          /*
17930 20 54 68 65 20 61 67 67 72 65 67 61 74 65 20 66   The aggregate f
17940 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e  unction implemen
17950 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e  tation */.    in
17960 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20  t iMem;         
17970 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79         /* Memory
17980 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61   location that a
17990 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74  cts as accumulat
179a0 6f 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 44  or */.    int iD
179b0 69 73 74 69 6e 63 74 3b 20 20 20 20 20 20 20 20  istinct;        
179c0 20 20 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 20     /* Ephemeral 
179d0 74 61 62 6c 65 20 75 73 65 64 20 74 6f 20 65 6e  table used to en
179e0 66 6f 72 63 65 20 44 49 53 54 49 4e 43 54 20 2a  force DISTINCT *
179f0 2f 0a 20 20 7d 20 2a 61 46 75 6e 63 3b 0a 20 20  /.  } *aFunc;.  
17a00 69 6e 74 20 6e 46 75 6e 63 3b 20 20 20 20 20 20  int nFunc;      
17a10 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
17a20 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  r of entries in 
17a30 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f  aFunc[] */.};../
17a40 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70  *.** The datatyp
17a50 65 20 79 6e 56 61 72 20 69 73 20 61 20 73 69 67  e ynVar is a sig
17a60 6e 65 64 20 69 6e 74 65 67 65 72 2c 20 65 69 74  ned integer, eit
17a70 68 65 72 20 31 36 2d 62 69 74 20 6f 72 20 33 32  her 16-bit or 32
17a80 2d 62 69 74 2e 0a 2a 2a 20 55 73 75 61 6c 6c 79  -bit..** Usually
17a90 20 69 74 20 69 73 20 31 36 2d 62 69 74 73 2e 20   it is 16-bits. 
17aa0 20 42 75 74 20 69 66 20 53 51 4c 49 54 45 5f 4d   But if SQLITE_M
17ab0 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42  AX_VARIABLE_NUMB
17ac0 45 52 20 69 73 20 67 72 65 61 74 65 72 0a 2a 2a  ER is greater.**
17ad0 20 74 68 61 6e 20 33 32 37 36 37 20 77 65 20 68   than 32767 we h
17ae0 61 76 65 20 74 6f 20 6d 61 6b 65 20 69 74 20 33  ave to make it 3
17af0 32 2d 62 69 74 2e 20 20 31 36 2d 62 69 74 20 69  2-bit.  16-bit i
17b00 73 20 70 72 65 66 65 72 72 65 64 20 62 65 63 61  s preferred beca
17b10 75 73 65 0a 2a 2a 20 69 74 20 75 73 65 73 20 6c  use.** it uses l
17b20 65 73 73 20 6d 65 6d 6f 72 79 20 69 6e 20 74 68  ess memory in th
17b30 65 20 45 78 70 72 20 6f 62 6a 65 63 74 2c 20 77  e Expr object, w
17b40 68 69 63 68 20 69 73 20 61 20 62 69 67 20 6d 65  hich is a big me
17b50 6d 6f 72 79 20 75 73 65 72 0a 2a 2a 20 69 6e 20  mory user.** in 
17b60 73 79 73 74 65 6d 73 20 77 69 74 68 20 6c 6f 74  systems with lot
17b70 73 20 6f 66 20 70 72 65 70 61 72 65 64 20 73 74  s of prepared st
17b80 61 74 65 6d 65 6e 74 73 2e 20 20 41 6e 64 20 66  atements.  And f
17b90 65 77 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 0a  ew applications.
17ba0 2a 2a 20 6e 65 65 64 20 6d 6f 72 65 20 74 68 61  ** need more tha
17bb0 6e 20 61 62 6f 75 74 20 31 30 20 6f 72 20 32 30  n about 10 or 20
17bc0 20 76 61 72 69 61 62 6c 65 73 2e 20 20 42 75 74   variables.  But
17bd0 20 73 6f 6d 65 20 65 78 74 72 65 6d 65 20 75 73   some extreme us
17be0 65 72 73 20 77 61 6e 74 0a 2a 2a 20 74 6f 20 68  ers want.** to h
17bf0 61 76 65 20 70 72 65 70 61 72 65 64 20 73 74 61  ave prepared sta
17c00 74 65 6d 65 6e 74 73 20 77 69 74 68 20 6f 76 65  tements with ove
17c10 72 20 33 32 37 36 37 20 76 61 72 69 61 62 6c 65  r 32767 variable
17c20 73 2c 20 61 6e 64 20 66 6f 72 20 74 68 65 6d 0a  s, and for them.
17c30 2a 2a 20 74 68 65 20 6f 70 74 69 6f 6e 20 69 73  ** the option is
17c40 20 61 76 61 69 6c 61 62 6c 65 20 28 61 74 20 63   available (at c
17c50 6f 6d 70 69 6c 65 2d 74 69 6d 65 29 2e 0a 2a 2f  ompile-time)..*/
17c60 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
17c70 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 3c  VARIABLE_NUMBER<
17c80 3d 33 32 37 36 37 0a 74 79 70 65 64 65 66 20 69  =32767.typedef i
17c90 31 36 20 79 6e 56 61 72 3b 0a 23 65 6c 73 65 0a  16 ynVar;.#else.
17ca0 74 79 70 65 64 65 66 20 69 6e 74 20 79 6e 56 61  typedef int ynVa
17cb0 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  r;.#endif../*.**
17cc0 20 45 61 63 68 20 6e 6f 64 65 20 6f 66 20 61 6e   Each node of an
17cd0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74   expression in t
17ce0 68 65 20 70 61 72 73 65 20 74 72 65 65 20 69 73  he parse tree is
17cf0 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20   an instance.** 
17d00 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
17d10 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 6f 70  e..**.** Expr.op
17d20 20 69 73 20 74 68 65 20 6f 70 63 6f 64 65 2e 20   is the opcode. 
17d30 54 68 65 20 69 6e 74 65 67 65 72 20 70 61 72 73  The integer pars
17d40 65 72 20 74 6f 6b 65 6e 20 63 6f 64 65 73 20 61  er token codes a
17d50 72 65 20 72 65 75 73 65 64 0a 2a 2a 20 61 73 20  re reused.** as 
17d60 6f 70 63 6f 64 65 73 20 68 65 72 65 2e 20 46 6f  opcodes here. Fo
17d70 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 70  r example, the p
17d80 61 72 73 65 72 20 64 65 66 69 6e 65 73 20 54 4b  arser defines TK
17d90 5f 47 45 20 74 6f 20 62 65 20 61 6e 20 69 6e 74  _GE to be an int
17da0 65 67 65 72 0a 2a 2a 20 63 6f 64 65 20 72 65 70  eger.** code rep
17db0 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20 22 3e  resenting the ">
17dc0 3d 22 20 6f 70 65 72 61 74 6f 72 2e 20 54 68 69  =" operator. Thi
17dd0 73 20 73 61 6d 65 20 69 6e 74 65 67 65 72 20 63  s same integer c
17de0 6f 64 65 20 69 73 20 72 65 75 73 65 64 0a 2a 2a  ode is reused.**
17df0 20 74 6f 20 72 65 70 72 65 73 65 6e 74 20 74 68   to represent th
17e00 65 20 67 72 65 61 74 65 72 2d 74 68 61 6e 2d 6f  e greater-than-o
17e10 72 2d 65 71 75 61 6c 2d 74 6f 20 6f 70 65 72 61  r-equal-to opera
17e20 74 6f 72 20 69 6e 20 74 68 65 20 65 78 70 72 65  tor in the expre
17e30 73 73 69 6f 6e 0a 2a 2a 20 74 72 65 65 2e 0a 2a  ssion.** tree..*
17e40 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72  *.** If the expr
17e50 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c  ession is an SQL
17e60 20 6c 69 74 65 72 61 6c 20 28 54 4b 5f 49 4e 54   literal (TK_INT
17e70 45 47 45 52 2c 20 54 4b 5f 46 4c 4f 41 54 2c 20  EGER, TK_FLOAT, 
17e80 54 4b 5f 42 4c 4f 42 2c 0a 2a 2a 20 6f 72 20 54  TK_BLOB,.** or T
17e90 4b 5f 53 54 52 49 4e 47 29 2c 20 74 68 65 6e 20  K_STRING), then 
17ea0 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61  Expr.token conta
17eb0 69 6e 73 20 74 68 65 20 74 65 78 74 20 6f 66 20  ins the text of 
17ec0 74 68 65 20 53 51 4c 20 6c 69 74 65 72 61 6c 2e  the SQL literal.
17ed0 20 49 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65   If.** the expre
17ee0 73 73 69 6f 6e 20 69 73 20 61 20 76 61 72 69 61  ssion is a varia
17ef0 62 6c 65 20 28 54 4b 5f 56 41 52 49 41 42 4c 45  ble (TK_VARIABLE
17f00 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b  ), then Expr.tok
17f10 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 0a  en contains the.
17f20 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65  ** variable name
17f30 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20 74 68  . Finally, if th
17f40 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
17f50 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20  an SQL function 
17f60 28 54 4b 5f 46 55 4e 43 54 49 4f 4e 29 2c 0a 2a  (TK_FUNCTION),.*
17f70 2a 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65  * then Expr.toke
17f80 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6e  n contains the n
17f90 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ame of the funct
17fa0 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e  ion..**.** Expr.
17fb0 70 52 69 67 68 74 20 61 6e 64 20 45 78 70 72 2e  pRight and Expr.
17fc0 70 4c 65 66 74 20 61 72 65 20 74 68 65 20 6c 65  pLeft are the le
17fd0 66 74 20 61 6e 64 20 72 69 67 68 74 20 73 75 62  ft and right sub
17fe0 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 66 20 61  expressions of a
17ff0 0a 2a 2a 20 62 69 6e 61 72 79 20 6f 70 65 72 61  .** binary opera
18000 74 6f 72 2e 20 45 69 74 68 65 72 20 6f 72 20 62  tor. Either or b
18010 6f 74 68 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e  oth may be NULL.
18020 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 4c  .**.** Expr.x.pL
18030 69 73 74 20 69 73 20 61 20 6c 69 73 74 20 6f 66  ist is a list of
18040 20 61 72 67 75 6d 65 6e 74 73 20 69 66 20 74 68   arguments if th
18050 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
18060 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2c  an SQL function,
18070 0a 2a 2a 20 61 20 43 41 53 45 20 65 78 70 72 65  .** a CASE expre
18080 73 73 69 6f 6e 20 6f 72 20 61 6e 20 49 4e 20 65  ssion or an IN e
18090 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65  xpression of the
180a0 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20   form "<lhs> IN 
180b0 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a  (<y>, <z>...)"..
180c0 2a 2a 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63  ** Expr.x.pSelec
180d0 74 20 69 73 20 75 73 65 64 20 69 66 20 74 68 65  t is used if the
180e0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
180f0 20 73 75 62 2d 73 65 6c 65 63 74 20 6f 72 20 61   sub-select or a
18100 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 0a  n expression of.
18110 2a 2a 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68  ** the form "<lh
18120 73 3e 20 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e  s> IN (SELECT ..
18130 2e 29 22 2e 20 49 66 20 74 68 65 20 45 50 5f 78  .)". If the EP_x
18140 49 73 53 65 6c 65 63 74 20 62 69 74 20 69 73 20  IsSelect bit is 
18150 73 65 74 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78  set in the.** Ex
18160 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74  pr.flags mask, t
18170 68 65 6e 20 45 78 70 72 2e 78 2e 70 53 65 6c 65  hen Expr.x.pSele
18180 63 74 20 69 73 20 76 61 6c 69 64 2e 20 4f 74 68  ct is valid. Oth
18190 65 72 77 69 73 65 2c 20 45 78 70 72 2e 78 2e 70  erwise, Expr.x.p
181a0 4c 69 73 74 20 69 73 0a 2a 2a 20 76 61 6c 69 64  List is.** valid
181b0 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 78 70 72 65  ..**.** An expre
181c0 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72  ssion of the for
181d0 6d 20 49 44 20 6f 72 20 49 44 2e 49 44 20 72 65  m ID or ID.ID re
181e0 66 65 72 73 20 74 6f 20 61 20 63 6f 6c 75 6d 6e  fers to a column
181f0 20 69 6e 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20   in a table..** 
18200 46 6f 72 20 73 75 63 68 20 65 78 70 72 65 73 73  For such express
18210 69 6f 6e 73 2c 20 45 78 70 72 2e 6f 70 20 69 73  ions, Expr.op is
18220 20 73 65 74 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d   set to TK_COLUM
18230 4e 20 61 6e 64 20 45 78 70 72 2e 69 54 61 62 6c  N and Expr.iTabl
18240 65 20 69 73 0a 2a 2a 20 74 68 65 20 69 6e 74 65  e is.** the inte
18250 67 65 72 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  ger cursor numbe
18260 72 20 6f 66 20 61 20 56 44 42 45 20 63 75 72 73  r of a VDBE curs
18270 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74  or pointing to t
18280 68 61 74 20 74 61 62 6c 65 20 61 6e 64 0a 2a 2a  hat table and.**
18290 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 69 73   Expr.iColumn is
182a0 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62   the column numb
182b0 65 72 20 66 6f 72 20 74 68 65 20 73 70 65 63 69  er for the speci
182c0 66 69 63 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20  fic column.  If 
182d0 74 68 65 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f  the.** expressio
182e0 6e 20 69 73 20 75 73 65 64 20 61 73 20 61 20 72  n is used as a r
182f0 65 73 75 6c 74 20 69 6e 20 61 6e 20 61 67 67 72  esult in an aggr
18300 65 67 61 74 65 20 53 45 4c 45 43 54 2c 20 74 68  egate SELECT, th
18310 65 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20  en the.** value 
18320 69 73 20 61 6c 73 6f 20 73 74 6f 72 65 64 20 69  is also stored i
18330 6e 20 74 68 65 20 45 78 70 72 2e 69 41 67 67 20  n the Expr.iAgg 
18340 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 61 67  column in the ag
18350 67 72 65 67 61 74 65 20 73 6f 20 74 68 61 74 0a  gregate so that.
18360 2a 2a 20 69 74 20 63 61 6e 20 62 65 20 61 63 63  ** it can be acc
18370 65 73 73 65 64 20 61 66 74 65 72 20 61 6c 6c 20  essed after all 
18380 61 67 67 72 65 67 61 74 65 73 20 61 72 65 20 63  aggregates are c
18390 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49  omputed..**.** I
183a0 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
183b0 20 69 73 20 61 6e 20 75 6e 62 6f 75 6e 64 20 76   is an unbound v
183c0 61 72 69 61 62 6c 65 20 6d 61 72 6b 65 72 20 28  ariable marker (
183d0 61 20 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 0a  a question mark.
183e0 2a 2a 20 63 68 61 72 61 63 74 65 72 20 27 3f 27  ** character '?'
183f0 20 69 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   in the original
18400 20 53 51 4c 29 20 74 68 65 6e 20 74 68 65 20 45   SQL) then the E
18410 78 70 72 2e 69 54 61 62 6c 65 20 68 6f 6c 64 73  xpr.iTable holds
18420 20 74 68 65 20 69 6e 64 65 78 0a 2a 2a 20 6e 75   the index.** nu
18430 6d 62 65 72 20 66 6f 72 20 74 68 61 74 20 76 61  mber for that va
18440 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  riable..**.** If
18450 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
18460 69 73 20 61 20 73 75 62 71 75 65 72 79 20 74 68  is a subquery th
18470 65 6e 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20  en Expr.iColumn 
18480 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72  holds an integer
18490 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 6e 75 6d  .** register num
184a0 62 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ber containing t
184b0 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
184c0 20 73 75 62 71 75 65 72 79 2e 20 20 49 66 20 74   subquery.  If t
184d0 68 65 0a 2a 2a 20 73 75 62 71 75 65 72 79 20 67  he.** subquery g
184e0 69 76 65 73 20 61 20 63 6f 6e 73 74 61 6e 74 20  ives a constant 
184f0 72 65 73 75 6c 74 2c 20 74 68 65 6e 20 69 54 61  result, then iTa
18500 62 6c 65 20 69 73 20 2d 31 2e 20 20 49 66 20 74  ble is -1.  If t
18510 68 65 20 73 75 62 71 75 65 72 79 0a 2a 2a 20 67  he subquery.** g
18520 69 76 65 73 20 61 20 64 69 66 66 65 72 65 6e 74  ives a different
18530 20 61 6e 73 77 65 72 20 61 74 20 64 69 66 66 65   answer at diffe
18540 72 65 6e 74 20 74 69 6d 65 73 20 64 75 72 69 6e  rent times durin
18550 67 20 73 74 61 74 65 6d 65 6e 74 20 70 72 6f 63  g statement proc
18560 65 73 73 69 6e 67 0a 2a 2a 20 74 68 65 6e 20 69  essing.** then i
18570 54 61 62 6c 65 20 69 73 20 74 68 65 20 61 64 64  Table is the add
18580 72 65 73 73 20 6f 66 20 61 20 73 75 62 72 6f 75  ress of a subrou
18590 74 69 6e 65 20 74 68 61 74 20 63 6f 6d 70 75 74  tine that comput
185a0 65 73 20 74 68 65 20 73 75 62 71 75 65 72 79 2e  es the subquery.
185b0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 78  .**.** If the Ex
185c0 70 72 20 69 73 20 6f 66 20 74 79 70 65 20 4f 50  pr is of type OP
185d0 5f 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65  _Column, and the
185e0 20 74 61 62 6c 65 20 69 74 20 69 73 20 73 65 6c   table it is sel
185f0 65 63 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69  ecting from.** i
18600 73 20 61 20 64 69 73 6b 20 74 61 62 6c 65 20 6f  s a disk table o
18610 72 20 74 68 65 20 22 6f 6c 64 2e 2a 22 20 70 73  r the "old.*" ps
18620 65 75 64 6f 2d 74 61 62 6c 65 2c 20 74 68 65 6e  eudo-table, then
18630 20 70 54 61 62 20 70 6f 69 6e 74 73 20 74 6f 20   pTab points to 
18640 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e  the.** correspon
18650 64 69 6e 67 20 74 61 62 6c 65 20 64 65 66 69 6e  ding table defin
18660 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c  ition..**.** ALL
18670 4f 43 41 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a  OCATION NOTES:.*
18680 2a 0a 2a 2a 20 45 78 70 72 20 6f 62 6a 65 63 74  *.** Expr object
18690 73 20 63 61 6e 20 75 73 65 20 61 20 6c 6f 74 20  s can use a lot 
186a0 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20  of memory space 
186b0 69 6e 20 64 61 74 61 62 61 73 65 20 73 63 68 65  in database sche
186c0 6d 61 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c 70 20  ma.  To.** help 
186d0 72 65 64 75 63 65 20 6d 65 6d 6f 72 79 20 72 65  reduce memory re
186e0 71 75 69 72 65 6d 65 6e 74 73 2c 20 73 6f 6d 65  quirements, some
186f0 74 69 6d 65 73 20 61 6e 20 45 78 70 72 20 6f 62  times an Expr ob
18700 6a 65 63 74 20 77 69 6c 6c 20 62 65 0a 2a 2a 20  ject will be.** 
18710 74 72 75 6e 63 61 74 65 64 2e 20 20 41 6e 64 20  truncated.  And 
18720 74 6f 20 72 65 64 75 63 65 20 74 68 65 20 6e 75  to reduce the nu
18730 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 61  mber of memory a
18740 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20 73 6f 6d 65  llocations, some
18750 74 69 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f 72 20  times.** two or 
18760 6d 6f 72 65 20 45 78 70 72 20 6f 62 6a 65 63 74  more Expr object
18770 73 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64  s will be stored
18780 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 6d 65 6d   in a single mem
18790 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a  ory allocation,.
187a0 2a 2a 20 74 6f 67 65 74 68 65 72 20 77 69 74 68  ** together with
187b0 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 73 74 72   Expr.zToken str
187c0 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ings..**.** If t
187d0 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 61 6e  he EP_Reduced an
187e0 64 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66  d EP_TokenOnly f
187f0 6c 61 67 73 20 61 72 65 20 73 65 74 20 77 68 65  lags are set whe
18800 6e 0a 2a 2a 20 61 6e 20 45 78 70 72 20 6f 62 6a  n.** an Expr obj
18810 65 63 74 20 69 73 20 74 72 75 6e 63 61 74 65 64  ect is truncated
18820 2e 20 20 57 68 65 6e 20 45 50 5f 52 65 64 75 63  .  When EP_Reduc
18830 65 64 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  ed is set, then 
18840 61 6c 6c 0a 2a 2a 20 74 68 65 20 63 68 69 6c 64  all.** the child
18850 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 69 6e   Expr objects in
18860 20 74 68 65 20 45 78 70 72 2e 70 4c 65 66 74 20   the Expr.pLeft 
18870 61 6e 64 20 45 78 70 72 2e 70 52 69 67 68 74 20  and Expr.pRight 
18880 73 75 62 74 72 65 65 73 0a 2a 2a 20 61 72 65 20  subtrees.** are 
18890 63 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e  contained within
188a0 20 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72 79   the same memory
188b0 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f   allocation.  No
188c0 74 65 2c 20 68 6f 77 65 76 65 72 2c 20 74 68 61  te, however, tha
188d0 74 0a 2a 2a 20 74 68 65 20 73 75 62 74 72 65 65  t.** the subtree
188e0 73 20 69 6e 20 45 78 70 72 2e 78 2e 70 4c 69 73  s in Expr.x.pLis
188f0 74 20 6f 72 20 45 78 70 72 2e 78 2e 70 53 65 6c  t or Expr.x.pSel
18900 65 63 74 20 61 72 65 20 61 6c 77 61 79 73 20 73  ect are always s
18910 65 70 61 72 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c  eparately.** all
18920 6f 63 61 74 65 64 2c 20 72 65 67 61 72 64 6c 65  ocated, regardle
18930 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72  ss of whether or
18940 20 6e 6f 74 20 45 50 5f 52 65 64 75 63 65 64 20   not EP_Reduced 
18950 69 73 20 73 65 74 2e 0a 2a 2f 0a 73 74 72 75 63  is set..*/.struc
18960 74 20 45 78 70 72 20 7b 0a 20 20 75 38 20 6f 70  t Expr {.  u8 op
18970 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
18980 20 20 2f 2a 20 4f 70 65 72 61 74 69 6f 6e 20 70    /* Operation p
18990 65 72 66 6f 72 6d 65 64 20 62 79 20 74 68 69 73  erformed by this
189a0 20 6e 6f 64 65 20 2a 2f 0a 20 20 63 68 61 72 20   node */.  char 
189b0 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20  affinity;       
189c0 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74    /* The affinit
189d0 79 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  y of the column 
189e0 6f 72 20 30 20 69 66 20 6e 6f 74 20 61 20 63 6f  or 0 if not a co
189f0 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 66 6c  lumn */.  u32 fl
18a00 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
18a10 20 2f 2a 20 56 61 72 69 6f 75 73 20 66 6c 61 67   /* Various flag
18a20 73 2e 20 20 45 50 5f 2a 20 53 65 65 20 62 65 6c  s.  EP_* See bel
18a30 6f 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a  ow */.  union {.
18a40 20 20 20 20 63 68 61 72 20 2a 7a 54 6f 6b 65 6e      char *zToken
18a50 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f  ;          /* To
18a60 6b 65 6e 20 76 61 6c 75 65 2e 20 5a 65 72 6f 20  ken value. Zero 
18a70 74 65 72 6d 69 6e 61 74 65 64 20 61 6e 64 20 64  terminated and d
18a80 65 71 75 6f 74 65 64 20 2a 2f 0a 20 20 20 20 69  equoted */.    i
18a90 6e 74 20 69 56 61 6c 75 65 3b 20 20 20 20 20 20  nt iValue;      
18aa0 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67        /* Non-neg
18ab0 61 74 69 76 65 20 69 6e 74 65 67 65 72 20 76 61  ative integer va
18ac0 6c 75 65 20 69 66 20 45 50 5f 49 6e 74 56 61 6c  lue if EP_IntVal
18ad0 75 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20  ue */.  } u;..  
18ae0 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 54 6f 6b  /* If the EP_Tok
18af0 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 69 73 20 73  enOnly flag is s
18b00 65 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66  et in the Expr.f
18b10 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20  lags mask, then 
18b20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73  no.  ** space is
18b30 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74   allocated for t
18b40 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20  he fields below 
18b50 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61  this point. An a
18b60 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61  ttempt to.  ** a
18b70 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20  ccess them will 
18b80 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66  result in a segf
18b90 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74  ault or malfunct
18ba0 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a  ion..  *********
18bb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18bc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18bd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18be0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20  ************/.. 
18bf0 20 45 78 70 72 20 2a 70 4c 65 66 74 3b 20 20 20   Expr *pLeft;   
18c00 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 66 74 20          /* Left 
18c10 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 45 78 70  subnode */.  Exp
18c20 72 20 2a 70 52 69 67 68 74 3b 20 20 20 20 20 20  r *pRight;      
18c30 20 20 20 20 2f 2a 20 52 69 67 68 74 20 73 75 62      /* Right sub
18c40 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  node */.  union 
18c50 7b 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a  {.    ExprList *
18c60 70 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 6f 70  pList;     /* op
18c70 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53   = IN, EXISTS, S
18c80 45 4c 45 43 54 2c 20 43 41 53 45 2c 20 46 55 4e  ELECT, CASE, FUN
18c90 43 54 49 4f 4e 2c 20 42 45 54 57 45 45 4e 20 2a  CTION, BETWEEN *
18ca0 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53  /.    Select *pS
18cb0 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 45 50  elect;     /* EP
18cc0 5f 78 49 73 53 65 6c 65 63 74 20 61 6e 64 20 6f  _xIsSelect and o
18cd0 70 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20  p = IN, EXISTS, 
18ce0 53 45 4c 45 43 54 20 2a 2f 0a 20 20 7d 20 78 3b  SELECT */.  } x;
18cf0 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50  ..  /* If the EP
18d00 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20 69 73  _Reduced flag is
18d10 20 73 65 74 20 69 6e 20 74 68 65 20 45 78 70 72   set in the Expr
18d20 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65  .flags mask, the
18d30 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20  n no.  ** space 
18d40 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72  is allocated for
18d50 20 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f   the fields belo
18d60 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e  w this point. An
18d70 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a   attempt to.  **
18d80 20 61 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c   access them wil
18d90 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65  l result in a se
18da0 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e  gfault or malfun
18db0 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a  ction..  *******
18dc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18dd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18de0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18df0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
18e00 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
18e10 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69  EXPR_DEPTH>0.  i
18e20 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20  nt nHeight;     
18e30 20 20 20 20 20 20 2f 2a 20 48 65 69 67 68 74 20        /* Height 
18e40 6f 66 20 74 68 65 20 74 72 65 65 20 68 65 61 64  of the tree head
18e50 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20  ed by this node 
18e60 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20  */.#endif.  int 
18e70 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  iTable;         
18e80 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a     /* TK_COLUMN:
18e90 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   cursor number o
18ea0 66 20 74 61 62 6c 65 20 68 6f 6c 64 69 6e 67 20  f table holding 
18eb0 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20  column.         
18ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ed0 2a 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20  ** TK_REGISTER: 
18ee0 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 0a  register number.
18ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f00 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 54           ** TK_T
18f10 52 49 47 47 45 52 3a 20 31 20 2d 3e 20 6e 65 77  RIGGER: 1 -> new
18f20 2c 20 30 20 2d 3e 20 6f 6c 64 0a 20 20 20 20 20  , 0 -> old.     
18f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f40 20 20 20 20 2a 2a 20 45 50 5f 55 6e 6c 69 6b 65      ** EP_Unlike
18f50 6c 79 3a 20 20 31 33 34 32 31 37 37 32 38 20 74  ly:  134217728 t
18f60 69 6d 65 73 20 6c 69 6b 65 6c 69 68 6f 6f 64 0a  imes likelihood.
18f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f80 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 53           ** TK_S
18f90 45 4c 45 43 54 3a 20 31 73 74 20 72 65 67 69 73  ELECT: 1st regis
18fa0 74 65 72 20 6f 66 20 72 65 73 75 6c 74 20 76 65  ter of result ve
18fb0 63 74 6f 72 20 2a 2f 0a 20 20 79 6e 56 61 72 20  ctor */.  ynVar 
18fc0 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  iColumn;        
18fd0 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63   /* TK_COLUMN: c
18fe0 6f 6c 75 6d 6e 20 69 6e 64 65 78 2e 20 20 2d 31  olumn index.  -1
18ff0 20 66 6f 72 20 72 6f 77 69 64 2e 0a 20 20 20 20   for rowid..    
19000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19010 20 20 20 20 20 2a 2a 20 54 4b 5f 56 41 52 49 41       ** TK_VARIA
19020 42 4c 45 3a 20 76 61 72 69 61 62 6c 65 20 6e 75  BLE: variable nu
19030 6d 62 65 72 20 28 61 6c 77 61 79 73 20 3e 3d 20  mber (always >= 
19040 31 29 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  1)..            
19050 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
19060 54 4b 5f 53 45 4c 45 43 54 5f 43 4f 4c 55 4d 4e  TK_SELECT_COLUMN
19070 3a 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20  : column of the 
19080 72 65 73 75 6c 74 20 76 65 63 74 6f 72 20 2a 2f  result vector */
19090 0a 20 20 69 31 36 20 69 41 67 67 3b 20 20 20 20  .  i16 iAgg;    
190a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69            /* Whi
190b0 63 68 20 65 6e 74 72 79 20 69 6e 20 70 41 67 67  ch entry in pAgg
190c0 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20  Info->aCol[] or 
190d0 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69  ->aFunc[] */.  i
190e0 31 36 20 69 52 69 67 68 74 4a 6f 69 6e 54 61 62  16 iRightJoinTab
190f0 6c 65 3b 20 20 20 2f 2a 20 49 66 20 45 50 5f 46  le;   /* If EP_F
19100 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20 72 69 67  romJoin, the rig
19110 68 74 20 74 61 62 6c 65 20 6f 66 20 74 68 65 20  ht table of the 
19120 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38 20 6f 70 32  join */.  u8 op2
19130 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
19140 20 2f 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a   /* TK_REGISTER:
19150 20 6f 72 69 67 69 6e 61 6c 20 76 61 6c 75 65 20   original value 
19160 6f 66 20 45 78 70 72 2e 6f 70 0a 20 20 20 20 20  of Expr.op.     
19170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19180 20 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55 4d 4e      ** TK_COLUMN
19190 3a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 70  : the value of p
191a0 35 20 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e 0a  5 for OP_Column.
191b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191c0 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 41           ** TK_A
191d0 47 47 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e 65 73  GG_FUNCTION: nes
191e0 74 69 6e 67 20 64 65 70 74 68 20 2a 2f 0a 20 20  ting depth */.  
191f0 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66  AggInfo *pAggInf
19200 6f 3b 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62  o;     /* Used b
19210 79 20 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20  y TK_AGG_COLUMN 
19220 61 6e 64 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54  and TK_AGG_FUNCT
19230 49 4f 4e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ION */.  Table *
19240 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20  pTab;           
19250 2f 2a 20 54 61 62 6c 65 20 66 6f 72 20 54 4b 5f  /* Table for TK_
19260 43 4f 4c 55 4d 4e 20 65 78 70 72 65 73 73 69 6f  COLUMN expressio
19270 6e 73 2e 20 20 43 61 6e 20 62 65 20 4e 55 4c 4c  ns.  Can be NULL
19280 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19290 20 20 20 20 20 20 20 20 20 20 2a 2a 20 66 6f 72            ** for
192a0 20 61 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20   a column of an 
192b0 69 6e 64 65 78 20 6f 6e 20 61 6e 20 65 78 70 72  index on an expr
192c0 65 73 73 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65  ession */.#ifnde
192d0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 49  f SQLITE_OMIT_WI
192e0 4e 44 4f 57 46 55 4e 43 0a 20 20 57 69 6e 64 6f  NDOWFUNC.  Windo
192f0 77 20 2a 70 57 69 6e 3b 20 20 20 20 20 20 20 20  w *pWin;        
19300 20 20 2f 2a 20 57 69 6e 64 6f 77 20 64 65 66 69    /* Window defi
19310 6e 69 74 69 6f 6e 20 66 6f 72 20 77 69 6e 64 6f  nition for windo
19320 77 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23  w functions */.#
19330 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  endif.};../*.** 
19340 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72  The following ar
19350 65 20 74 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f  e the meanings o
19360 66 20 62 69 74 73 20 69 6e 20 74 68 65 20 45 78  f bits in the Ex
19370 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a  pr.flags field..
19380 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 46 72  */.#define EP_Fr
19390 6f 6d 4a 6f 69 6e 20 20 30 78 30 30 30 30 30 31  omJoin  0x000001
193a0 20 2f 2a 20 4f 72 69 67 69 6e 61 74 65 73 20 69   /* Originates i
193b0 6e 20 4f 4e 2f 55 53 49 4e 47 20 63 6c 61 75 73  n ON/USING claus
193c0 65 20 6f 66 20 6f 75 74 65 72 20 6a 6f 69 6e 20  e of outer join 
193d0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 67  */.#define EP_Ag
193e0 67 20 20 20 20 20 20 20 30 78 30 30 30 30 30 32  g       0x000002
193f0 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65   /* Contains one
19400 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61   or more aggrega
19410 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a  te functions */.
19420 23 64 65 66 69 6e 65 20 45 50 5f 48 61 73 46 75  #define EP_HasFu
19430 6e 63 20 20 20 30 78 30 30 30 30 30 34 20 2f 2a  nc   0x000004 /*
19440 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72   Contains one or
19450 20 6d 6f 72 65 20 66 75 6e 63 74 69 6f 6e 73 20   more functions 
19460 6f 66 20 61 6e 79 20 6b 69 6e 64 20 2a 2f 0a 23  of any kind */.#
19470 64 65 66 69 6e 65 20 45 50 5f 46 69 78 65 64 43  define EP_FixedC
19480 6f 6c 20 20 30 78 30 30 30 30 30 38 20 2f 2a 20  ol  0x000008 /* 
19490 54 4b 5f 43 6f 6c 75 6d 6e 20 77 69 74 68 20 61  TK_Column with a
194a0 20 6b 6e 6f 77 6e 20 66 69 78 65 64 20 76 61 6c   known fixed val
194b0 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ue */.#define EP
194c0 5f 44 69 73 74 69 6e 63 74 20 20 30 78 30 30 30  _Distinct  0x000
194d0 30 31 30 20 2f 2a 20 41 67 67 72 65 67 61 74 65  010 /* Aggregate
194e0 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 44   function with D
194f0 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20  ISTINCT keyword 
19500 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 56 61  */.#define EP_Va
19510 72 53 65 6c 65 63 74 20 30 78 30 30 30 30 32 30  rSelect 0x000020
19520 20 2f 2a 20 70 53 65 6c 65 63 74 20 69 73 20 63   /* pSelect is c
19530 6f 72 72 65 6c 61 74 65 64 2c 20 6e 6f 74 20 63  orrelated, not c
19540 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23 64 65 66 69  onstant */.#defi
19550 6e 65 20 45 50 5f 44 62 6c 51 75 6f 74 65 64 20  ne EP_DblQuoted 
19560 30 78 30 30 30 30 34 30 20 2f 2a 20 74 6f 6b 65  0x000040 /* toke
19570 6e 2e 7a 20 77 61 73 20 6f 72 69 67 69 6e 61 6c  n.z was original
19580 6c 79 20 69 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23  ly in "..." */.#
19590 64 65 66 69 6e 65 20 45 50 5f 49 6e 66 69 78 46  define EP_InfixF
195a0 75 6e 63 20 30 78 30 30 30 30 38 30 20 2f 2a 20  unc 0x000080 /* 
195b0 54 72 75 65 20 66 6f 72 20 61 6e 20 69 6e 66 69  True for an infi
195c0 78 20 66 75 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45  x function: LIKE
195d0 2c 20 47 4c 4f 42 2c 20 65 74 63 20 2a 2f 0a 23  , GLOB, etc */.#
195e0 64 65 66 69 6e 65 20 45 50 5f 43 6f 6c 6c 61 74  define EP_Collat
195f0 65 20 20 20 30 78 30 30 30 31 30 30 20 2f 2a 20  e   0x000100 /* 
19600 54 72 65 65 20 63 6f 6e 74 61 69 6e 73 20 61 20  Tree contains a 
19610 54 4b 5f 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61  TK_COLLATE opera
19620 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  tor */.#define E
19630 50 5f 47 65 6e 65 72 69 63 20 20 20 30 78 30 30  P_Generic   0x00
19640 30 32 30 30 20 2f 2a 20 49 67 6e 6f 72 65 20 43  0200 /* Ignore C
19650 4f 4c 4c 41 54 45 20 6f 72 20 61 66 66 69 6e 69  OLLATE or affini
19660 74 79 20 6f 6e 20 74 68 69 73 20 74 72 65 65 20  ty on this tree 
19670 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e  */.#define EP_In
19680 74 56 61 6c 75 65 20 20 30 78 30 30 30 34 30 30  tValue  0x000400
19690 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75   /* Integer valu
196a0 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 75  e contained in u
196b0 2e 69 56 61 6c 75 65 20 2a 2f 0a 23 64 65 66 69  .iValue */.#defi
196c0 6e 65 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20  ne EP_xIsSelect 
196d0 30 78 30 30 30 38 30 30 20 2f 2a 20 78 2e 70 53  0x000800 /* x.pS
196e0 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64 20 28  elect is valid (
196f0 6f 74 68 65 72 77 69 73 65 20 78 2e 70 4c 69 73  otherwise x.pLis
19700 74 20 69 73 29 20 2a 2f 0a 23 64 65 66 69 6e 65  t is) */.#define
19710 20 45 50 5f 53 6b 69 70 20 20 20 20 20 20 30 78   EP_Skip      0x
19720 30 30 31 30 30 30 20 2f 2a 20 43 4f 4c 4c 41 54  001000 /* COLLAT
19730 45 2c 20 41 53 2c 20 6f 72 20 55 4e 4c 49 4b 45  E, AS, or UNLIKE
19740 4c 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  LY */.#define EP
19750 5f 52 65 64 75 63 65 64 20 20 20 30 78 30 30 32  _Reduced   0x002
19760 30 30 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75  000 /* Expr stru
19770 63 74 20 45 58 50 52 5f 52 45 44 55 43 45 44 53  ct EXPR_REDUCEDS
19780 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a  IZE bytes only *
19790 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 54 6f 6b  /.#define EP_Tok
197a0 65 6e 4f 6e 6c 79 20 30 78 30 30 34 30 30 30 20  enOnly 0x004000 
197b0 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74 20 45  /* Expr struct E
197c0 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a  XPR_TOKENONLYSIZ
197d0 45 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a  E bytes only */.
197e0 23 64 65 66 69 6e 65 20 45 50 5f 53 74 61 74 69  #define EP_Stati
197f0 63 20 20 20 20 30 78 30 30 38 30 30 30 20 2f 2a  c    0x008000 /*
19800 20 48 65 6c 64 20 69 6e 20 6d 65 6d 6f 72 79 20   Held in memory 
19810 6e 6f 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f  not obtained fro
19820 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 23 64  m malloc() */.#d
19830 65 66 69 6e 65 20 45 50 5f 4d 65 6d 54 6f 6b 65  efine EP_MemToke
19840 6e 20 20 30 78 30 31 30 30 30 30 20 2f 2a 20 4e  n  0x010000 /* N
19850 65 65 64 20 74 6f 20 73 71 6c 69 74 65 33 44 62  eed to sqlite3Db
19860 46 72 65 65 28 29 20 45 78 70 72 2e 7a 54 6f 6b  Free() Expr.zTok
19870 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  en */.#define EP
19880 5f 4e 6f 52 65 64 75 63 65 20 20 30 78 30 32 30  _NoReduce  0x020
19890 30 30 30 20 2f 2a 20 43 61 6e 6e 6f 74 20 45 58  000 /* Cannot EX
198a0 50 52 44 55 50 5f 52 45 44 55 43 45 20 74 68 69  PRDUP_REDUCE thi
198b0 73 20 45 78 70 72 20 2a 2f 0a 23 64 65 66 69 6e  s Expr */.#defin
198c0 65 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 20 20 30  e EP_Unlikely  0
198d0 78 30 34 30 30 30 30 20 2f 2a 20 75 6e 6c 69 6b  x040000 /* unlik
198e0 65 6c 79 28 29 20 6f 72 20 6c 69 6b 65 6c 69 68  ely() or likelih
198f0 6f 6f 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a  ood() function *
19900 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 6f 6e  /.#define EP_Con
19910 73 74 46 75 6e 63 20 30 78 30 38 30 30 30 30 20  stFunc 0x080000 
19920 2f 2a 20 41 20 53 51 4c 49 54 45 5f 46 55 4e 43  /* A SQLITE_FUNC
19930 5f 43 4f 4e 53 54 41 4e 54 20 6f 72 20 5f 53 4c  _CONSTANT or _SL
19940 4f 43 48 4e 47 20 66 75 6e 63 74 69 6f 6e 20 2a  OCHNG function *
19950 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 61 6e  /.#define EP_Can
19960 42 65 4e 75 6c 6c 20 30 78 31 30 30 30 30 30 20  BeNull 0x100000 
19970 2f 2a 20 43 61 6e 20 62 65 20 6e 75 6c 6c 20 64  /* Can be null d
19980 65 73 70 69 74 65 20 4e 4f 54 20 4e 55 4c 4c 20  espite NOT NULL 
19990 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64  constraint */.#d
199a0 65 66 69 6e 65 20 45 50 5f 53 75 62 71 75 65 72  efine EP_Subquer
199b0 79 20 20 30 78 32 30 30 30 30 30 20 2f 2a 20 54  y  0x200000 /* T
199c0 72 65 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54  ree contains a T
199d0 4b 5f 53 45 4c 45 43 54 20 6f 70 65 72 61 74 6f  K_SELECT operato
199e0 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  r */.#define EP_
199f0 41 6c 69 61 73 20 20 20 20 20 30 78 34 30 30 30  Alias     0x4000
19a00 30 30 20 2f 2a 20 49 73 20 61 6e 20 61 6c 69 61  00 /* Is an alia
19a10 73 20 66 6f 72 20 61 20 72 65 73 75 6c 74 20 73  s for a result s
19a20 65 74 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65  et column */.#de
19a30 66 69 6e 65 20 45 50 5f 4c 65 61 66 20 20 20 20  fine EP_Leaf    
19a40 20 20 30 78 38 30 30 30 30 30 20 2f 2a 20 45 78    0x800000 /* Ex
19a50 70 72 2e 70 4c 65 66 74 2c 20 2e 70 52 69 67 68  pr.pLeft, .pRigh
19a60 74 2c 20 2e 75 2e 70 53 65 6c 65 63 74 20 61 6c  t, .u.pSelect al
19a70 6c 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  l NULL */../*.**
19a80 20 54 68 65 20 45 50 5f 50 72 6f 70 61 67 61 74   The EP_Propagat
19a90 65 20 6d 61 73 6b 20 69 73 20 61 20 73 65 74 20  e mask is a set 
19aa0 6f 66 20 70 72 6f 70 65 72 74 69 65 73 20 74 68  of properties th
19ab0 61 74 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  at automatically
19ac0 20 70 72 6f 70 61 67 61 74 65 0a 2a 2a 20 75 70   propagate.** up
19ad0 77 61 72 64 73 20 69 6e 74 6f 20 70 61 72 65 6e  wards into paren
19ae0 74 20 6e 6f 64 65 73 2e 0a 2a 2f 0a 23 64 65 66  t nodes..*/.#def
19af0 69 6e 65 20 45 50 5f 50 72 6f 70 61 67 61 74 65  ine EP_Propagate
19b00 20 28 45 50 5f 43 6f 6c 6c 61 74 65 7c 45 50 5f   (EP_Collate|EP_
19b10 53 75 62 71 75 65 72 79 7c 45 50 5f 48 61 73 46  Subquery|EP_HasF
19b20 75 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73  unc)../*.** Thes
19b30 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65 20  e macros can be 
19b40 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73 65  used to test, se
19b50 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74 73  t, or clear bits
19b60 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e   in the.** Expr.
19b70 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a  flags field..*/.
19b80 23 64 65 66 69 6e 65 20 45 78 70 72 48 61 73 50  #define ExprHasP
19b90 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 20  roperty(E,P)    
19ba0 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50   (((E)->flags&(P
19bb0 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 45  ))!=0).#define E
19bc0 78 70 72 48 61 73 41 6c 6c 50 72 6f 70 65 72 74  xprHasAllPropert
19bd0 79 28 45 2c 50 29 20 20 28 28 28 45 29 2d 3e 66  y(E,P)  (((E)->f
19be0 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a  lags&(P))==(P)).
19bf0 23 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 50  #define ExprSetP
19c00 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20 20  roperty(E,P)    
19c10 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29   (E)->flags|=(P)
19c20 0a 23 64 65 66 69 6e 65 20 45 78 70 72 43 6c 65  .#define ExprCle
19c30 61 72 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20  arProperty(E,P) 
19c40 20 20 28 45 29 2d 3e 66 6c 61 67 73 26 3d 7e 28    (E)->flags&=~(
19c50 50 29 0a 0a 2f 2a 20 54 68 65 20 45 78 70 72 53  P)../* The ExprS
19c60 65 74 56 56 41 50 72 6f 70 65 72 74 79 28 29 20  etVVAProperty() 
19c70 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 66 6f  macro is used fo
19c80 72 20 56 65 72 69 66 69 63 61 74 69 6f 6e 2c 20  r Verification, 
19c90 56 61 6c 69 64 61 74 69 6f 6e 2c 0a 2a 2a 20 61  Validation,.** a
19ca0 6e 64 20 41 63 63 72 65 64 69 74 61 74 69 6f 6e  nd Accreditation
19cb0 20 6f 6e 6c 79 2e 20 20 49 74 20 77 6f 72 6b 73   only.  It works
19cc0 20 6c 69 6b 65 20 45 78 70 72 53 65 74 50 72 6f   like ExprSetPro
19cd0 70 65 72 74 79 28 29 20 64 75 72 69 6e 67 20 56  perty() during V
19ce0 56 41 0a 2a 2a 20 70 72 6f 63 65 73 73 65 73 20  VA.** processes 
19cf0 62 75 74 20 69 73 20 61 20 6e 6f 2d 6f 70 20 66  but is a no-op f
19d00 6f 72 20 64 65 6c 69 76 65 72 79 2e 0a 2a 2f 0a  or delivery..*/.
19d10 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
19d20 42 55 47 0a 23 20 64 65 66 69 6e 65 20 45 78 70  BUG.# define Exp
19d30 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28  rSetVVAProperty(
19d40 45 2c 50 29 20 20 28 45 29 2d 3e 66 6c 61 67 73  E,P)  (E)->flags
19d50 7c 3d 28 50 29 0a 23 65 6c 73 65 0a 23 20 64 65  |=(P).#else.# de
19d60 66 69 6e 65 20 45 78 70 72 53 65 74 56 56 41 50  fine ExprSetVVAP
19d70 72 6f 70 65 72 74 79 28 45 2c 50 29 0a 23 65 6e  roperty(E,P).#en
19d80 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f  dif../*.** Macro
19d90 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74  s to determine t
19da0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74  he number of byt
19db0 65 73 20 72 65 71 75 69 72 65 64 20 62 79 20 61  es required by a
19dc0 20 6e 6f 72 6d 61 6c 20 45 78 70 72 0a 2a 2a 20   normal Expr.** 
19dd0 73 74 72 75 63 74 2c 20 61 6e 20 45 78 70 72 20  struct, an Expr 
19de0 73 74 72 75 63 74 20 77 69 74 68 20 74 68 65 20  struct with the 
19df0 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20  EP_Reduced flag 
19e00 73 65 74 20 69 6e 20 45 78 70 72 2e 66 6c 61 67  set in Expr.flag
19e10 73 0a 2a 2a 20 61 6e 64 20 61 6e 20 45 78 70 72  s.** and an Expr
19e20 20 73 74 72 75 63 74 20 77 69 74 68 20 74 68 65   struct with the
19e30 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c   EP_TokenOnly fl
19e40 61 67 20 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69  ag set..*/.#defi
19e50 6e 65 20 45 58 50 52 5f 46 55 4c 4c 53 49 5a 45  ne EXPR_FULLSIZE
19e60 20 20 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f             sizeo
19e70 66 28 45 78 70 72 29 20 20 20 20 20 20 20 20 20  f(Expr)         
19e80 20 20 2f 2a 20 46 75 6c 6c 20 73 69 7a 65 20 2a    /* Full size *
19e90 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 52  /.#define EXPR_R
19ea0 45 44 55 43 45 44 53 49 5a 45 20 20 20 20 20 20  EDUCEDSIZE      
19eb0 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c    offsetof(Expr,
19ec0 69 54 61 62 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d  iTable)  /* Comm
19ed0 6f 6e 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 23  on features */.#
19ee0 64 65 66 69 6e 65 20 45 58 50 52 5f 54 4f 4b 45  define EXPR_TOKE
19ef0 4e 4f 4e 4c 59 53 49 5a 45 20 20 20 20 20 20 6f  NONLYSIZE      o
19f00 66 66 73 65 74 6f 66 28 45 78 70 72 2c 70 4c 65  ffsetof(Expr,pLe
19f10 66 74 29 20 20 20 2f 2a 20 46 65 77 65 72 20 66  ft)   /* Fewer f
19f20 65 61 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a  eatures */../*.*
19f30 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64 20 74  * Flags passed t
19f40 6f 20 74 68 65 20 73 71 6c 69 74 65 33 45 78 70  o the sqlite3Exp
19f50 72 44 75 70 28 29 20 66 75 6e 63 74 69 6f 6e 2e  rDup() function.
19f60 20 53 65 65 20 74 68 65 20 68 65 61 64 65 72 20   See the header 
19f70 63 6f 6d 6d 65 6e 74 0a 2a 2a 20 61 62 6f 76 65  comment.** above
19f80 20 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28   sqlite3ExprDup(
19f90 29 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a  ) for details..*
19fa0 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 44 55  /.#define EXPRDU
19fb0 50 5f 52 45 44 55 43 45 20 20 20 20 20 20 20 20  P_REDUCE        
19fc0 20 30 78 30 30 30 31 20 20 2f 2a 20 55 73 65 64   0x0001  /* Used
19fd0 20 72 65 64 75 63 65 64 2d 73 69 7a 65 20 45 78   reduced-size Ex
19fe0 70 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a 0a  pr nodes */../*.
19ff0 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70  ** A list of exp
1a000 72 65 73 73 69 6f 6e 73 2e 20 20 45 61 63 68 20  ressions.  Each 
1a010 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 6f  expression may o
1a020 70 74 69 6f 6e 61 6c 6c 79 20 68 61 76 65 20 61  ptionally have a
1a030 0a 2a 2a 20 6e 61 6d 65 2e 20 20 41 6e 20 65 78  .** name.  An ex
1a040 70 72 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e 61 74  pr/name combinat
1a050 69 6f 6e 20 63 61 6e 20 62 65 20 75 73 65 64 20  ion can be used 
1a060 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c  in several ways,
1a070 20 73 75 63 68 0a 2a 2a 20 61 73 20 74 68 65 20   such.** as the 
1a080 6c 69 73 74 20 6f 66 20 22 65 78 70 72 20 41 53  list of "expr AS
1a090 20 49 44 22 20 66 69 65 6c 64 73 20 66 6f 6c 6c   ID" fields foll
1a0a0 6f 77 69 6e 67 20 61 20 22 53 45 4c 45 43 54 22  owing a "SELECT"
1a0b0 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 6c 69   or in the.** li
1a0c0 73 74 20 6f 66 20 22 49 44 20 3d 20 65 78 70 72  st of "ID = expr
1a0d0 22 20 69 74 65 6d 73 20 69 6e 20 61 6e 20 55 50  " items in an UP
1a0e0 44 41 54 45 2e 20 20 41 20 6c 69 73 74 20 6f 66  DATE.  A list of
1a0f0 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63 61 6e   expressions can
1a100 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 73 65 64  .** also be used
1a110 20 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74   as the argument
1a120 20 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e 2c 20   to a function, 
1a130 69 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68  in which case th
1a140 65 20 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65  e a.zName.** fie
1a150 6c 64 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a  ld is not used..
1a160 2a 2a 0a 2a 2a 20 42 79 20 64 65 66 61 75 6c 74  **.** By default
1a170 20 74 68 65 20 45 78 70 72 2e 7a 53 70 61 6e 20   the Expr.zSpan 
1a180 66 69 65 6c 64 20 68 6f 6c 64 73 20 61 20 68 75  field holds a hu
1a190 6d 61 6e 2d 72 65 61 64 61 62 6c 65 20 64 65 73  man-readable des
1a1a0 63 72 69 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74  cription of.** t
1a1b0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68  he expression th
1a1c0 61 74 20 69 73 20 75 73 65 64 20 69 6e 20 74 68  at is used in th
1a1d0 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20  e generation of 
1a1e0 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 61  error messages a
1a1f0 6e 64 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61 62  nd.** column lab
1a200 65 6c 73 2e 20 20 49 6e 20 74 68 69 73 20 63 61  els.  In this ca
1a210 73 65 2c 20 45 78 70 72 2e 7a 53 70 61 6e 20 69  se, Expr.zSpan i
1a220 73 20 74 79 70 69 63 61 6c 6c 79 20 74 68 65 20  s typically the 
1a230 74 65 78 74 20 6f 66 20 61 0a 2a 2a 20 63 6f 6c  text of a.** col
1a240 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61  umn expression a
1a250 73 20 69 74 20 65 78 69 73 74 73 20 69 6e 20 61  s it exists in a
1a260 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1a270 74 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 66 0a  t.  However, if.
1a280 2a 2a 20 74 68 65 20 62 53 70 61 6e 49 73 54 61  ** the bSpanIsTa
1a290 62 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74  b flag is set, t
1a2a0 68 65 6e 20 7a 53 70 61 6e 20 69 73 20 6f 76 65  hen zSpan is ove
1a2b0 72 6c 6f 61 64 65 64 20 74 6f 20 6d 65 61 6e 20  rloaded to mean 
1a2c0 74 68 65 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20 74  the name.** of t
1a2d0 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e  he result column
1a2e0 20 69 6e 20 74 68 65 20 66 6f 72 6d 3a 20 44 41   in the form: DA
1a2f0 54 41 42 41 53 45 2e 54 41 42 4c 45 2e 43 4f 4c  TABASE.TABLE.COL
1a300 55 4d 4e 2e 20 20 54 68 69 73 20 6c 61 74 65 72  UMN.  This later
1a310 0a 2a 2a 20 66 6f 72 6d 20 69 73 20 75 73 65 64  .** form is used
1a320 20 66 6f 72 20 6e 61 6d 65 20 72 65 73 6f 6c 75   for name resolu
1a330 74 69 6f 6e 20 77 69 74 68 20 6e 65 73 74 65 64  tion with nested
1a340 20 46 52 4f 4d 20 63 6c 61 75 73 65 73 2e 0a 2a   FROM clauses..*
1a350 2f 0a 73 74 72 75 63 74 20 45 78 70 72 4c 69 73  /.struct ExprLis
1a360 74 20 7b 0a 20 20 69 6e 74 20 6e 45 78 70 72 3b  t {.  int nExpr;
1a370 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1a380 4e 75 6d 62 65 72 20 6f 66 20 65 78 70 72 65 73  Number of expres
1a390 73 69 6f 6e 73 20 6f 6e 20 74 68 65 20 6c 69 73  sions on the lis
1a3a0 74 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 45 78  t */.  struct Ex
1a3b0 70 72 4c 69 73 74 5f 69 74 65 6d 20 7b 20 2f 2a  prList_item { /*
1a3c0 20 46 6f 72 20 65 61 63 68 20 65 78 70 72 65 73   For each expres
1a3d0 73 69 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73 74  sion in the list
1a3e0 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45   */.    Expr *pE
1a3f0 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  xpr;            
1a400 2f 2a 20 54 68 65 20 70 61 72 73 65 20 74 72 65  /* The parse tre
1a410 65 20 66 6f 72 20 74 68 69 73 20 65 78 70 72 65  e for this expre
1a420 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61  ssion */.    cha
1a430 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
1a440 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 61 73       /* Token as
1a450 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
1a460 69 73 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  is expression */
1a470 0a 20 20 20 20 63 68 61 72 20 2a 7a 53 70 61 6e  .    char *zSpan
1a480 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1a490 4f 72 69 67 69 6e 61 6c 20 74 65 78 74 20 6f 66  Original text of
1a4a0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
1a4b0 2a 2f 0a 20 20 20 20 75 38 20 73 6f 72 74 4f 72  */.    u8 sortOr
1a4c0 64 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f  der;           /
1a4d0 2a 20 31 20 66 6f 72 20 44 45 53 43 20 6f 72 20  * 1 for DESC or 
1a4e0 30 20 66 6f 72 20 41 53 43 20 2a 2f 0a 20 20 20  0 for ASC */.   
1a4f0 20 75 6e 73 69 67 6e 65 64 20 64 6f 6e 65 20 3a   unsigned done :
1a500 31 3b 20 20 20 20 20 20 20 2f 2a 20 41 20 66 6c  1;       /* A fl
1a510 61 67 20 74 6f 20 69 6e 64 69 63 61 74 65 20 77  ag to indicate w
1a520 68 65 6e 20 70 72 6f 63 65 73 73 69 6e 67 20 69  hen processing i
1a530 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20  s finished */.  
1a540 20 20 75 6e 73 69 67 6e 65 64 20 62 53 70 61 6e    unsigned bSpan
1a550 49 73 54 61 62 20 3a 31 3b 20 2f 2a 20 7a 53 70  IsTab :1; /* zSp
1a560 61 6e 20 68 6f 6c 64 73 20 44 42 2e 54 41 42 4c  an holds DB.TABL
1a570 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20 20 20  E.COLUMN */.    
1a580 75 6e 73 69 67 6e 65 64 20 72 65 75 73 61 62 6c  unsigned reusabl
1a590 65 20 3a 31 3b 20 20 20 2f 2a 20 43 6f 6e 73 74  e :1;   /* Const
1a5a0 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ant expression i
1a5b0 73 20 72 65 75 73 61 62 6c 65 20 2a 2f 0a 20 20  s reusable */.  
1a5c0 20 20 75 6e 73 69 67 6e 65 64 20 62 53 6f 72 74    unsigned bSort
1a5d0 65 72 52 65 66 20 3a 31 3b 20 2f 2a 20 44 65 66  erRef :1; /* Def
1a5e0 65 72 20 65 76 61 6c 75 61 74 69 6f 6e 20 75 6e  er evaluation un
1a5f0 74 69 6c 20 61 66 74 65 72 20 73 6f 72 74 69 6e  til after sortin
1a600 67 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b  g */.    union {
1a610 0a 20 20 20 20 20 20 73 74 72 75 63 74 20 7b 0a  .      struct {.
1a620 20 20 20 20 20 20 20 20 75 31 36 20 69 4f 72 64          u16 iOrd
1a630 65 72 42 79 43 6f 6c 3b 20 20 20 20 20 20 2f 2a  erByCol;      /*
1a640 20 46 6f 72 20 4f 52 44 45 52 20 42 59 2c 20 63   For ORDER BY, c
1a650 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20  olumn number in 
1a660 72 65 73 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20  result set */.  
1a670 20 20 20 20 20 20 75 31 36 20 69 41 6c 69 61 73        u16 iAlias
1a680 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  ;           /* I
1a690 6e 64 65 78 20 69 6e 74 6f 20 50 61 72 73 65 2e  ndex into Parse.
1a6a0 61 41 6c 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61  aAlias[] for zNa
1a6b0 6d 65 20 2a 2f 0a 20 20 20 20 20 20 7d 20 78 3b  me */.      } x;
1a6c0 0a 20 20 20 20 20 20 69 6e 74 20 69 43 6f 6e 73  .      int iCons
1a6d0 74 45 78 70 72 52 65 67 3b 20 20 20 20 20 20 2f  tExprReg;      /
1a6e0 2a 20 52 65 67 69 73 74 65 72 20 69 6e 20 77 68  * Register in wh
1a6f0 69 63 68 20 45 78 70 72 20 76 61 6c 75 65 20 69  ich Expr value i
1a700 73 20 63 61 63 68 65 64 20 2a 2f 0a 20 20 20 20  s cached */.    
1a710 7d 20 75 3b 0a 20 20 7d 20 61 5b 31 5d 3b 20 20  } u;.  } a[1];  
1a720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a730 2f 2a 20 4f 6e 65 20 73 6c 6f 74 20 66 6f 72 20  /* One slot for 
1a740 65 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20  each expression 
1a750 69 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d  in the list */.}
1a760 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  ;../*.** An inst
1a770 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72  ance of this str
1a780 75 63 74 75 72 65 20 63 61 6e 20 68 6f 6c 64 20  ucture can hold 
1a790 61 20 73 69 6d 70 6c 65 20 6c 69 73 74 20 6f 66  a simple list of
1a7a0 20 69 64 65 6e 74 69 66 69 65 72 73 2c 0a 2a 2a   identifiers,.**
1a7b0 20 73 75 63 68 20 61 73 20 74 68 65 20 6c 69 73   such as the lis
1a7c0 74 20 22 61 2c 62 2c 63 22 20 69 6e 20 74 68 65  t "a,b,c" in the
1a7d0 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65   following state
1a7e0 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  ments:.**.**    
1a7f0 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28    INSERT INTO t(
1a800 61 2c 62 2c 63 29 20 56 41 4c 55 45 53 20 2e 2e  a,b,c) VALUES ..
1a810 2e 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54  .;.**      CREAT
1a820 45 20 49 4e 44 45 58 20 69 64 78 20 4f 4e 20 74  E INDEX idx ON t
1a830 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20 20 20  (a,b,c);.**     
1a840 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20   CREATE TRIGGER 
1a850 74 72 69 67 20 42 45 46 4f 52 45 20 55 50 44 41  trig BEFORE UPDA
1a860 54 45 20 4f 4e 20 74 28 61 2c 62 2c 63 29 20 2e  TE ON t(a,b,c) .
1a870 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 64  ..;.**.** The Id
1a880 4c 69 73 74 2e 61 2e 69 64 78 20 66 69 65 6c 64  List.a.idx field
1a890 20 69 73 20 75 73 65 64 20 77 68 65 6e 20 74 68   is used when th
1a8a0 65 20 49 64 4c 69 73 74 20 72 65 70 72 65 73 65  e IdList represe
1a8b0 6e 74 73 20 74 68 65 20 6c 69 73 74 20 6f 66 0a  nts the list of.
1a8c0 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  ** column names 
1a8d0 61 66 74 65 72 20 61 20 74 61 62 6c 65 20 6e 61  after a table na
1a8e0 6d 65 20 69 6e 20 61 6e 20 49 4e 53 45 52 54 20  me in an INSERT 
1a8f0 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 74  statement.  In t
1a900 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a  he statement.**.
1a910 2a 2a 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e  **     INSERT IN
1a920 54 4f 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a  TO t(a,b,c) ....
1a930 2a 2a 0a 2a 2a 20 49 66 20 22 61 22 20 69 73 20  **.** If "a" is 
1a940 74 68 65 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20  the k-th column 
1a950 6f 66 20 74 61 62 6c 65 20 22 74 22 2c 20 74 68  of table "t", th
1a960 65 6e 20 49 64 4c 69 73 74 2e 61 5b 30 5d 2e 69  en IdList.a[0].i
1a970 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74  dx==k..*/.struct
1a980 20 49 64 4c 69 73 74 20 7b 0a 20 20 73 74 72 75   IdList {.  stru
1a990 63 74 20 49 64 4c 69 73 74 5f 69 74 65 6d 20 7b  ct IdList_item {
1a9a0 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65  .    char *zName
1a9b0 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f  ;      /* Name o
1a9c0 66 20 74 68 65 20 69 64 65 6e 74 69 66 69 65 72  f the identifier
1a9d0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 64 78 3b   */.    int idx;
1a9e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
1a9f0 65 78 20 69 6e 20 73 6f 6d 65 20 54 61 62 6c 65  ex in some Table
1aa00 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c  .aCol[] of a col
1aa10 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d 65 20  umn named zName 
1aa20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20 69 6e 74  */.  } *a;.  int
1aa30 20 6e 49 64 3b 20 20 20 20 20 20 20 20 20 2f 2a   nId;         /*
1aa40 20 4e 75 6d 62 65 72 20 6f 66 20 69 64 65 6e 74   Number of ident
1aa50 69 66 69 65 72 73 20 6f 6e 20 74 68 65 20 6c 69  ifiers on the li
1aa60 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  st */.};../*.** 
1aa70 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  The following st
1aa80 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62 65  ructure describe
1aa90 73 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  s the FROM claus
1aaa0 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73 74  e of a SELECT st
1aab0 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63 68  atement..** Each
1aac0 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75 65   table or subque
1aad0 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63  ry in the FROM c
1aae0 6c 61 75 73 65 20 69 73 20 61 20 73 65 70 61 72  lause is a separ
1aaf0 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f 66 0a 2a  ate element of.*
1ab00 2a 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61 5b  * the SrcList.a[
1ab10 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20 57  ] array..**.** W
1ab20 69 74 68 20 74 68 65 20 61 64 64 69 74 69 6f 6e  ith the addition
1ab30 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20 64 61 74   of multiple dat
1ab40 61 62 61 73 65 20 73 75 70 70 6f 72 74 2c 20 74  abase support, t
1ab50 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
1ab60 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e 20 61 6c  ucture.** can al
1ab70 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20 64 65  so be used to de
1ab80 73 63 72 69 62 65 20 61 20 70 61 72 74 69 63 75  scribe a particu
1ab90 6c 61 72 20 74 61 62 6c 65 20 73 75 63 68 20 61  lar table such a
1aba0 73 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  s the table that
1abb0 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69 65 64 20  .** is modified 
1abc0 62 79 20 61 6e 20 49 4e 53 45 52 54 2c 20 44 45  by an INSERT, DE
1abd0 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20  LETE, or UPDATE 
1abe0 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 73  statement.  In s
1abf0 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a 2a 2a 20  tandard SQL,.** 
1ac00 73 75 63 68 20 61 20 74 61 62 6c 65 20 6d 75 73  such a table mus
1ac10 74 20 62 65 20 61 20 73 69 6d 70 6c 65 20 6e 61  t be a simple na
1ac20 6d 65 3a 20 49 44 2e 20 20 42 75 74 20 69 6e 20  me: ID.  But in 
1ac30 53 51 4c 69 74 65 2c 20 74 68 65 20 74 61 62 6c  SQLite, the tabl
1ac40 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65 20  e can.** now be 
1ac50 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 61 20  identified by a 
1ac60 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2c 20 61  database name, a
1ac70 20 64 6f 74 2c 20 74 68 65 6e 20 74 68 65 20 74   dot, then the t
1ac80 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 49 44  able name: ID.ID
1ac90 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69 6e  ..**.** The join
1aca0 74 79 70 65 20 73 74 61 72 74 73 20 6f 75 74 20  type starts out 
1acb0 73 68 6f 77 69 6e 67 20 74 68 65 20 6a 6f 69 6e  showing the join
1acc0 20 74 79 70 65 20 62 65 74 77 65 65 6e 20 74 68   type between th
1acd0 65 20 63 75 72 72 65 6e 74 20 74 61 62 6c 65 0a  e current table.
1ace0 2a 2a 20 61 6e 64 20 74 68 65 20 6e 65 78 74 20  ** and the next 
1acf0 74 61 62 6c 65 20 6f 6e 20 74 68 65 20 6c 69 73  table on the lis
1ad00 74 2e 20 20 54 68 65 20 70 61 72 73 65 72 20 62  t.  The parser b
1ad10 75 69 6c 64 73 20 74 68 65 20 6c 69 73 74 20 74  uilds the list t
1ad20 68 69 73 20 77 61 79 2e 0a 2a 2a 20 42 75 74 20  his way..** But 
1ad30 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68  sqlite3SrcListSh
1ad40 69 66 74 4a 6f 69 6e 54 79 70 65 28 29 20 6c 61  iftJoinType() la
1ad50 74 65 72 20 73 68 69 66 74 73 20 74 68 65 20 6a  ter shifts the j
1ad60 6f 69 6e 74 79 70 65 73 20 73 6f 20 74 68 61 74  ointypes so that
1ad70 20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79 70   each.** jointyp
1ad80 65 20 65 78 70 72 65 73 73 65 73 20 74 68 65 20  e expresses the 
1ad90 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68 65  join between the
1ada0 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70   table and the p
1adb0 72 65 76 69 6f 75 73 20 74 61 62 6c 65 2e 0a 2a  revious table..*
1adc0 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 63 6f 6c 55  *.** In the colU
1add0 73 65 64 20 66 69 65 6c 64 2c 20 74 68 65 20 68  sed field, the h
1ade0 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20 28 62  igh-order bit (b
1adf0 69 74 20 36 33 29 20 69 73 20 73 65 74 20 69 66  it 63) is set if
1ae00 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 63 6f   the table.** co
1ae10 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74 68 61 6e  ntains more than
1ae20 20 36 33 20 63 6f 6c 75 6d 6e 73 20 61 6e 64 20   63 columns and 
1ae30 74 68 65 20 36 34 2d 74 68 20 6f 72 20 6c 61 74  the 64-th or lat
1ae40 65 72 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65  er column is use
1ae50 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 72 63  d..*/.struct Src
1ae60 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 53 72  List {.  int nSr
1ae70 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  c;        /* Num
1ae80 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20 6f 72  ber of tables or
1ae90 20 73 75 62 71 75 65 72 69 65 73 20 69 6e 20 74   subqueries in t
1aea0 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a  he FROM clause *
1aeb0 2f 0a 20 20 75 33 32 20 6e 41 6c 6c 6f 63 3b 20  /.  u32 nAlloc; 
1aec0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1aed0 66 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f 63 61  f entries alloca
1aee0 74 65 64 20 69 6e 20 61 5b 5d 20 62 65 6c 6f 77  ted in a[] below
1aef0 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 53 72 63   */.  struct Src
1af00 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20  List_item {.    
1af10 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
1af20 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 6f 20 77    /* Schema to w
1af30 68 69 63 68 20 74 68 69 73 20 69 74 65 6d 20 69  hich this item i
1af40 73 20 66 69 78 65 64 20 2a 2f 0a 20 20 20 20 63  s fixed */.    c
1af50 68 61 72 20 2a 7a 44 61 74 61 62 61 73 65 3b 20  har *zDatabase; 
1af60 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74 61   /* Name of data
1af70 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 74 68 69  base holding thi
1af80 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63  s table */.    c
1af90 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
1afa0 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
1afb0 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61  table */.    cha
1afc0 72 20 2a 7a 41 6c 69 61 73 3b 20 20 20 20 20 2f  r *zAlias;     /
1afd0 2a 20 54 68 65 20 22 42 22 20 70 61 72 74 20 6f  * The "B" part o
1afe0 66 20 61 20 22 41 20 41 53 20 42 22 20 70 68 72  f a "A AS B" phr
1aff0 61 73 65 2e 20 20 7a 4e 61 6d 65 20 69 73 20 74  ase.  zName is t
1b000 68 65 20 22 41 22 20 2a 2f 0a 20 20 20 20 54 61  he "A" */.    Ta
1b010 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20  ble *pTab;      
1b020 2f 2a 20 41 6e 20 53 51 4c 20 74 61 62 6c 65 20  /* An SQL table 
1b030 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f  corresponding to
1b040 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 53 65   zName */.    Se
1b050 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20  lect *pSelect;  
1b060 2f 2a 20 41 20 53 45 4c 45 43 54 20 73 74 61 74  /* A SELECT stat
1b070 65 6d 65 6e 74 20 75 73 65 64 20 69 6e 20 70 6c  ement used in pl
1b080 61 63 65 20 6f 66 20 61 20 74 61 62 6c 65 20 6e  ace of a table n
1b090 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61  ame */.    int a
1b0a0 64 64 72 46 69 6c 6c 53 75 62 3b 20 20 2f 2a 20  ddrFillSub;  /* 
1b0b0 41 64 64 72 65 73 73 20 6f 66 20 73 75 62 72 6f  Address of subro
1b0c0 75 74 69 6e 65 20 74 6f 20 6d 61 6e 69 66 65 73  utine to manifes
1b0d0 74 20 61 20 73 75 62 71 75 65 72 79 20 2a 2f 0a  t a subquery */.
1b0e0 20 20 20 20 69 6e 74 20 72 65 67 52 65 74 75 72      int regRetur
1b0f0 6e 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65  n;    /* Registe
1b100 72 20 68 6f 6c 64 69 6e 67 20 72 65 74 75 72 6e  r holding return
1b110 20 61 64 64 72 65 73 73 20 6f 66 20 61 64 64 72   address of addr
1b120 46 69 6c 6c 53 75 62 20 2a 2f 0a 20 20 20 20 69  FillSub */.    i
1b130 6e 74 20 72 65 67 52 65 73 75 6c 74 3b 20 20 20  nt regResult;   
1b140 20 2f 2a 20 52 65 67 69 73 74 65 72 73 20 68 6f   /* Registers ho
1b150 6c 64 69 6e 67 20 72 65 73 75 6c 74 73 20 6f 66  lding results of
1b160 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f   a co-routine */
1b170 0a 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20  .    struct {.  
1b180 20 20 20 20 75 38 20 6a 6f 69 6e 74 79 70 65 3b      u8 jointype;
1b190 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20 6f 66        /* Type of
1b1a0 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68   join between th
1b1b0 69 73 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65  is table and the
1b1c0 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20 20   previous */.   
1b1d0 20 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f 74 49     unsigned notI
1b1e0 6e 64 65 78 65 64 20 3a 31 3b 20 20 20 20 2f 2a  ndexed :1;    /*
1b1f0 20 54 72 75 65 20 69 66 20 74 68 65 72 65 20 69   True if there i
1b200 73 20 61 20 4e 4f 54 20 49 4e 44 45 58 45 44 20  s a NOT INDEXED 
1b210 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20  clause */.      
1b220 75 6e 73 69 67 6e 65 64 20 69 73 49 6e 64 65 78  unsigned isIndex
1b230 65 64 42 79 20 3a 31 3b 20 20 20 2f 2a 20 54 72  edBy :1;   /* Tr
1b240 75 65 20 69 66 20 74 68 65 72 65 20 69 73 20 61  ue if there is a
1b250 6e 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61  n INDEXED BY cla
1b260 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73  use */.      uns
1b270 69 67 6e 65 64 20 69 73 54 61 62 46 75 6e 63 20  igned isTabFunc 
1b280 3a 31 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20  :1;     /* True 
1b290 69 66 20 74 61 62 6c 65 2d 76 61 6c 75 65 64 2d  if table-valued-
1b2a0 66 75 6e 63 74 69 6f 6e 20 73 79 6e 74 61 78 20  function syntax 
1b2b0 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65  */.      unsigne
1b2c0 64 20 69 73 43 6f 72 72 65 6c 61 74 65 64 20 3a  d isCorrelated :
1b2d0 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73  1;  /* True if s
1b2e0 75 62 2d 71 75 65 72 79 20 69 73 20 63 6f 72 72  ub-query is corr
1b2f0 65 6c 61 74 65 64 20 2a 2f 0a 20 20 20 20 20 20  elated */.      
1b300 75 6e 73 69 67 6e 65 64 20 76 69 61 43 6f 72 6f  unsigned viaCoro
1b310 75 74 69 6e 65 20 3a 31 3b 20 20 2f 2a 20 49 6d  utine :1;  /* Im
1b320 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20 63  plemented as a c
1b330 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20  o-routine */.   
1b340 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65     unsigned isRe
1b350 63 75 72 73 69 76 65 20 3a 31 3b 20 20 20 2f 2a  cursive :1;   /*
1b360 20 54 72 75 65 20 66 6f 72 20 72 65 63 75 72 73   True for recurs
1b370 69 76 65 20 72 65 66 65 72 65 6e 63 65 20 69 6e  ive reference in
1b380 20 57 49 54 48 20 2a 2f 0a 20 20 20 20 7d 20 66   WITH */.    } f
1b390 67 3b 0a 20 20 20 20 69 6e 74 20 69 43 75 72 73  g;.    int iCurs
1b3a0 6f 72 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  or;      /* The 
1b3b0 56 44 42 45 20 63 75 72 73 6f 72 20 6e 75 6d 62  VDBE cursor numb
1b3c0 65 72 20 75 73 65 64 20 74 6f 20 61 63 63 65 73  er used to acces
1b3d0 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  s this table */.
1b3e0 20 20 20 20 45 78 70 72 20 2a 70 4f 6e 3b 20 20      Expr *pOn;  
1b3f0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 4f 4e 20        /* The ON 
1b400 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e  clause of a join
1b410 20 2a 2f 0a 20 20 20 20 49 64 4c 69 73 74 20 2a   */.    IdList *
1b420 70 55 73 69 6e 67 3b 20 20 20 2f 2a 20 54 68 65  pUsing;   /* The
1b430 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66   USING clause of
1b440 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 42   a join */.    B
1b450 69 74 6d 61 73 6b 20 63 6f 6c 55 73 65 64 3b 20  itmask colUsed; 
1b460 20 2f 2a 20 42 69 74 20 4e 20 28 31 3c 3c 4e 29   /* Bit N (1<<N)
1b470 20 73 65 74 20 69 66 20 63 6f 6c 75 6d 6e 20 4e   set if column N
1b480 20 6f 66 20 70 54 61 62 20 69 73 20 75 73 65 64   of pTab is used
1b490 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a   */.    union {.
1b4a0 20 20 20 20 20 20 63 68 61 72 20 2a 7a 49 6e 64        char *zInd
1b4b0 65 78 65 64 42 79 3b 20 20 20 20 2f 2a 20 49 64  exedBy;    /* Id
1b4c0 65 6e 74 69 66 69 65 72 20 66 72 6f 6d 20 22 49  entifier from "I
1b4d0 4e 44 45 58 45 44 20 42 59 20 3c 7a 49 6e 64 65  NDEXED BY <zInde
1b4e0 78 3e 22 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  x>" clause */.  
1b4f0 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 46      ExprList *pF
1b500 75 6e 63 41 72 67 3b 20 20 2f 2a 20 41 72 67 75  uncArg;  /* Argu
1b510 6d 65 6e 74 73 20 74 6f 20 74 61 62 6c 65 2d 76  ments to table-v
1b520 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f 6e 20 2a  alued-function *
1b530 2f 0a 20 20 20 20 7d 20 75 31 3b 0a 20 20 20 20  /.    } u1;.    
1b540 49 6e 64 65 78 20 2a 70 49 42 49 6e 64 65 78 3b  Index *pIBIndex;
1b550 20 20 2f 2a 20 49 6e 64 65 78 20 73 74 72 75 63    /* Index struc
1b560 74 75 72 65 20 63 6f 72 72 65 73 70 6f 6e 64 69  ture correspondi
1b570 6e 67 20 74 6f 20 75 31 2e 7a 49 6e 64 65 78 65  ng to u1.zIndexe
1b580 64 42 79 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b  dBy */.  } a[1];
1b590 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1b5a0 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61  One entry for ea
1b5b0 63 68 20 69 64 65 6e 74 69 66 69 65 72 20 6f 6e  ch identifier on
1b5c0 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a   the list */.};.
1b5d0 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69 74 74 65 64  ./*.** Permitted
1b5e0 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20 53   values of the S
1b5f0 72 63 4c 69 73 74 2e 61 2e 6a 6f 69 6e 74 79 70  rcList.a.jointyp
1b600 65 20 66 69 65 6c 64 0a 2a 2f 0a 23 64 65 66 69  e field.*/.#defi
1b610 6e 65 20 4a 54 5f 49 4e 4e 45 52 20 20 20 20 20  ne JT_INNER     
1b620 30 78 30 30 30 31 20 20 20 20 2f 2a 20 41 6e 79  0x0001    /* Any
1b630 20 6b 69 6e 64 20 6f 66 20 69 6e 6e 65 72 20 6f   kind of inner o
1b640 72 20 63 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f 0a  r cross join */.
1b650 23 64 65 66 69 6e 65 20 4a 54 5f 43 52 4f 53 53  #define JT_CROSS
1b660 20 20 20 20 20 30 78 30 30 30 32 20 20 20 20 2f       0x0002    /
1b670 2a 20 45 78 70 6c 69 63 69 74 20 75 73 65 20 6f  * Explicit use o
1b680 66 20 74 68 65 20 43 52 4f 53 53 20 6b 65 79 77  f the CROSS keyw
1b690 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  ord */.#define J
1b6a0 54 5f 4e 41 54 55 52 41 4c 20 20 20 30 78 30 30  T_NATURAL   0x00
1b6b0 30 34 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f  04    /* True fo
1b6c0 72 20 61 20 22 6e 61 74 75 72 61 6c 22 20 6a 6f  r a "natural" jo
1b6d0 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  in */.#define JT
1b6e0 5f 4c 45 46 54 20 20 20 20 20 20 30 78 30 30 30  _LEFT      0x000
1b6f0 38 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 75 74  8    /* Left out
1b700 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  er join */.#defi
1b710 6e 65 20 4a 54 5f 52 49 47 48 54 20 20 20 20 20  ne JT_RIGHT     
1b720 30 78 30 30 31 30 20 20 20 20 2f 2a 20 52 69 67  0x0010    /* Rig
1b730 68 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f  ht outer join */
1b740 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4f 55 54 45  .#define JT_OUTE
1b750 52 20 20 20 20 20 30 78 30 30 32 30 20 20 20 20  R     0x0020    
1b760 2f 2a 20 54 68 65 20 22 4f 55 54 45 52 22 20 6b  /* The "OUTER" k
1b770 65 79 77 6f 72 64 20 69 73 20 70 72 65 73 65 6e  eyword is presen
1b780 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  t */.#define JT_
1b790 45 52 52 4f 52 20 20 20 20 20 30 78 30 30 34 30  ERROR     0x0040
1b7a0 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 6f      /* unknown o
1b7b0 72 20 75 6e 73 75 70 70 6f 72 74 65 64 20 6a 6f  r unsupported jo
1b7c0 69 6e 20 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a  in type */.../*.
1b7d0 2a 2a 20 46 6c 61 67 73 20 61 70 70 72 6f 70 72  ** Flags appropr
1b7e0 69 61 74 65 20 66 6f 72 20 74 68 65 20 77 63 74  iate for the wct
1b7f0 72 6c 46 6c 61 67 73 20 70 61 72 61 6d 65 74 65  rlFlags paramete
1b800 72 20 6f 66 20 73 71 6c 69 74 65 33 57 68 65 72  r of sqlite3Wher
1b810 65 42 65 67 69 6e 28 29 0a 2a 2a 20 61 6e 64 20  eBegin().** and 
1b820 74 68 65 20 57 68 65 72 65 49 6e 66 6f 2e 77 63  the WhereInfo.wc
1b830 74 72 6c 46 6c 61 67 73 20 6d 65 6d 62 65 72 2e  trlFlags member.
1b840 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e  .**.** Value con
1b850 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72 63  straints (enforc
1b860 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29  ed via assert())
1b870 3a 0a 2a 2a 20 20 20 20 20 57 48 45 52 45 5f 55  :.**     WHERE_U
1b880 53 45 5f 4c 49 4d 49 54 20 20 3d 3d 20 53 46 5f  SE_LIMIT  == SF_
1b890 46 69 78 65 64 4c 69 6d 69 74 0a 2a 2f 0a 23 64  FixedLimit.*/.#d
1b8a0 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45  efine WHERE_ORDE
1b8b0 52 42 59 5f 4e 4f 52 4d 41 4c 20 20 20 30 78 30  RBY_NORMAL   0x0
1b8c0 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a  000 /* No-op */.
1b8d0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52  #define WHERE_OR
1b8e0 44 45 52 42 59 5f 4d 49 4e 20 20 20 20 20 20 30  DERBY_MIN      0
1b8f0 78 30 30 30 31 20 2f 2a 20 4f 52 44 45 52 20 42  x0001 /* ORDER B
1b900 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72  Y processing for
1b910 20 6d 69 6e 28 29 20 66 75 6e 63 20 2a 2f 0a 23   min() func */.#
1b920 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44  define WHERE_ORD
1b930 45 52 42 59 5f 4d 41 58 20 20 20 20 20 20 30 78  ERBY_MAX      0x
1b940 30 30 30 32 20 2f 2a 20 4f 52 44 45 52 20 42 59  0002 /* ORDER BY
1b950 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20   processing for 
1b960 6d 61 78 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64  max() func */.#d
1b970 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50  efine WHERE_ONEP
1b980 41 53 53 5f 44 45 53 49 52 45 44 20 20 30 78 30  ASS_DESIRED  0x0
1b990 30 30 34 20 2f 2a 20 57 61 6e 74 20 74 6f 20 64  004 /* Want to d
1b9a0 6f 20 6f 6e 65 2d 70 61 73 73 20 55 50 44 41 54  o one-pass UPDAT
1b9b0 45 2f 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66  E/DELETE */.#def
1b9c0 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50 41 53  ine WHERE_ONEPAS
1b9d0 53 5f 4d 55 4c 54 49 52 4f 57 20 30 78 30 30 30  S_MULTIROW 0x000
1b9e0 38 20 2f 2a 20 4f 4e 45 50 41 53 53 20 69 73 20  8 /* ONEPASS is 
1b9f0 6f 6b 20 77 69 74 68 20 6d 75 6c 74 69 70 6c 65  ok with multiple
1ba00 20 72 6f 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65   rows */.#define
1ba10 20 57 48 45 52 45 5f 44 55 50 4c 49 43 41 54 45   WHERE_DUPLICATE
1ba20 53 5f 4f 4b 20 20 20 20 30 78 30 30 31 30 20 2f  S_OK    0x0010 /
1ba30 2a 20 4f 6b 20 74 6f 20 72 65 74 75 72 6e 20 61  * Ok to return a
1ba40 20 72 6f 77 20 6d 6f 72 65 20 74 68 61 6e 20 6f   row more than o
1ba50 6e 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  nce */.#define W
1ba60 48 45 52 45 5f 4f 52 5f 53 55 42 43 4c 41 55 53  HERE_OR_SUBCLAUS
1ba70 45 20 20 20 20 20 30 78 30 30 32 30 20 2f 2a 20  E     0x0020 /* 
1ba80 50 72 6f 63 65 73 73 69 6e 67 20 61 20 73 75 62  Processing a sub
1ba90 2d 57 48 45 52 45 20 61 73 20 70 61 72 74 20 6f  -WHERE as part o
1baa0 66 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  f.              
1bab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bac0 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 20 4f          ** the O
1bad0 52 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 20  R optimization  
1bae0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1baf0 5f 47 52 4f 55 50 42 59 20 20 20 20 20 20 20 20  _GROUPBY        
1bb00 20 20 30 78 30 30 34 30 20 2f 2a 20 70 4f 72 64    0x0040 /* pOrd
1bb10 65 72 42 79 20 69 73 20 72 65 61 6c 6c 79 20 61  erBy is really a
1bb20 20 47 52 4f 55 50 20 42 59 20 2a 2f 0a 23 64 65   GROUP BY */.#de
1bb30 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49  fine WHERE_DISTI
1bb40 4e 43 54 42 59 20 20 20 20 20 20 20 30 78 30 30  NCTBY       0x00
1bb50 38 30 20 2f 2a 20 70 4f 72 64 65 72 62 79 20 69  80 /* pOrderby i
1bb60 73 20 72 65 61 6c 6c 79 20 61 20 44 49 53 54 49  s really a DISTI
1bb70 4e 43 54 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64  NCT clause */.#d
1bb80 65 66 69 6e 65 20 57 48 45 52 45 5f 57 41 4e 54  efine WHERE_WANT
1bb90 5f 44 49 53 54 49 4e 43 54 20 20 20 20 30 78 30  _DISTINCT    0x0
1bba0 31 30 30 20 2f 2a 20 41 6c 6c 20 6f 75 74 70 75  100 /* All outpu
1bbb0 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 64 69  t needs to be di
1bbc0 73 74 69 6e 63 74 20 2a 2f 0a 23 64 65 66 69 6e  stinct */.#defin
1bbd0 65 20 57 48 45 52 45 5f 53 4f 52 54 42 59 47 52  e WHERE_SORTBYGR
1bbe0 4f 55 50 20 20 20 20 20 20 30 78 30 32 30 30 20  OUP      0x0200 
1bbf0 2f 2a 20 53 75 70 70 6f 72 74 20 73 71 6c 69 74  /* Support sqlit
1bc00 65 33 57 68 65 72 65 49 73 53 6f 72 74 65 64 28  e3WhereIsSorted(
1bc10 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  ) */.#define WHE
1bc20 52 45 5f 53 45 45 4b 5f 54 41 42 4c 45 20 20 20  RE_SEEK_TABLE   
1bc30 20 20 20 20 30 78 30 34 30 30 20 2f 2a 20 44 6f      0x0400 /* Do
1bc40 20 6e 6f 74 20 64 65 66 65 72 20 73 65 65 6b 73   not defer seeks
1bc50 20 6f 6e 20 6d 61 69 6e 20 74 61 62 6c 65 20 2a   on main table *
1bc60 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1bc70 4f 52 44 45 52 42 59 5f 4c 49 4d 49 54 20 20 20  ORDERBY_LIMIT   
1bc80 20 30 78 30 38 30 30 20 2f 2a 20 4f 52 44 45 52   0x0800 /* ORDER
1bc90 42 59 2b 4c 49 4d 49 54 20 6f 6e 20 74 68 65 20  BY+LIMIT on the 
1bca0 69 6e 6e 65 72 20 6c 6f 6f 70 20 2a 2f 0a 23 64  inner loop */.#d
1bcb0 65 66 69 6e 65 20 57 48 45 52 45 5f 53 45 45 4b  efine WHERE_SEEK
1bcc0 5f 55 4e 49 51 5f 54 41 42 4c 45 20 20 30 78 31  _UNIQ_TABLE  0x1
1bcd0 30 30 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 64 65  000 /* Do not de
1bce0 66 65 72 20 73 65 65 6b 73 20 69 66 20 75 6e 69  fer seeks if uni
1bcf0 71 75 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  que */.         
1bd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1bd10 2a 20 20 20 20 20 30 78 32 30 30 30 20 20 20 20  *     0x2000    
1bd20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 75 73  not currently us
1bd30 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ed */.#define WH
1bd40 45 52 45 5f 55 53 45 5f 4c 49 4d 49 54 20 20 20  ERE_USE_LIMIT   
1bd50 20 20 20 20 20 30 78 34 30 30 30 20 2f 2a 20 55       0x4000 /* U
1bd60 73 65 20 74 68 65 20 4c 49 4d 49 54 20 69 6e 20  se the LIMIT in 
1bd70 63 6f 73 74 20 65 73 74 69 6d 61 74 65 73 20 2a  cost estimates *
1bd80 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
1bd90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 20            /*    
1bda0 20 30 78 38 30 30 30 20 20 20 20 6e 6f 74 20 63   0x8000    not c
1bdb0 75 72 72 65 6e 74 6c 79 20 75 73 65 64 20 2a 2f  urrently used */
1bdc0 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74  ../* Allowed ret
1bdd0 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20  urn values from 
1bde0 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 44 69  sqlite3WhereIsDi
1bdf0 73 74 69 6e 63 74 28 29 0a 2a 2f 0a 23 64 65 66  stinct().*/.#def
1be00 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
1be10 43 54 5f 4e 4f 4f 50 20 20 20 20 20 20 30 20 20  CT_NOOP      0  
1be20 2f 2a 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77  /* DISTINCT keyw
1be30 6f 72 64 20 6e 6f 74 20 75 73 65 64 20 2a 2f 0a  ord not used */.
1be40 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
1be50 53 54 49 4e 43 54 5f 55 4e 49 51 55 45 20 20 20  STINCT_UNIQUE   
1be60 20 31 20 20 2f 2a 20 4e 6f 20 64 75 70 6c 69 63   1  /* No duplic
1be70 61 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ates */.#define 
1be80 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4f  WHERE_DISTINCT_O
1be90 52 44 45 52 45 44 20 20 20 32 20 20 2f 2a 20 41  RDERED   2  /* A
1bea0 6c 6c 20 64 75 70 6c 69 63 61 74 65 73 20 61 72  ll duplicates ar
1beb0 65 20 61 64 6a 61 63 65 6e 74 20 2a 2f 0a 23 64  e adjacent */.#d
1bec0 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54  efine WHERE_DIST
1bed0 49 4e 43 54 5f 55 4e 4f 52 44 45 52 45 44 20 33  INCT_UNORDERED 3
1bee0 20 20 2f 2a 20 44 75 70 6c 69 63 61 74 65 73 20    /* Duplicates 
1bef0 61 72 65 20 73 63 61 74 74 65 72 65 64 20 2a 2f  are scattered */
1bf00 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f  ../*.** A NameCo
1bf10 6e 74 65 78 74 20 64 65 66 69 6e 65 73 20 61 20  ntext defines a 
1bf20 63 6f 6e 74 65 78 74 20 69 6e 20 77 68 69 63 68  context in which
1bf30 20 74 6f 20 72 65 73 6f 6c 76 65 20 74 61 62 6c   to resolve tabl
1bf40 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20  e and column.** 
1bf50 6e 61 6d 65 73 2e 20 20 54 68 65 20 63 6f 6e 74  names.  The cont
1bf60 65 78 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  ext consists of 
1bf70 61 20 6c 69 73 74 20 6f 66 20 74 61 62 6c 65 73  a list of tables
1bf80 20 28 74 68 65 20 70 53 72 63 4c 69 73 74 29 20   (the pSrcList) 
1bf90 66 69 65 6c 64 20 61 6e 64 0a 2a 2a 20 61 20 6c  field and.** a l
1bfa0 69 73 74 20 6f 66 20 6e 61 6d 65 64 20 65 78 70  ist of named exp
1bfb0 72 65 73 73 69 6f 6e 20 28 70 45 4c 69 73 74 29  ression (pEList)
1bfc0 2e 20 20 54 68 65 20 6e 61 6d 65 64 20 65 78 70  .  The named exp
1bfd0 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 6d 61 79  ression list may
1bfe0 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20 20 54 68  .** be NULL.  Th
1bff0 65 20 70 53 72 63 20 63 6f 72 72 65 73 70 6f 6e  e pSrc correspon
1c000 64 73 20 74 6f 20 74 68 65 20 46 52 4f 4d 20 63  ds to the FROM c
1c010 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43  lause of a SELEC
1c020 54 20 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20 74  T or.** to the t
1c030 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65 72 61  able being opera
1c040 74 65 64 20 6f 6e 20 62 79 20 49 4e 53 45 52 54  ted on by INSERT
1c050 2c 20 55 50 44 41 54 45 2c 20 6f 72 20 44 45 4c  , UPDATE, or DEL
1c060 45 54 45 2e 20 20 54 68 65 0a 2a 2a 20 70 45 4c  ETE.  The.** pEL
1c070 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  ist corresponds 
1c080 74 6f 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  to the result se
1c090 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20 61 6e  t of a SELECT an
1c0a0 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a  d is NULL for.**
1c0b0 20 6f 74 68 65 72 20 73 74 61 74 65 6d 65 6e 74   other statement
1c0c0 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e  s..**.** NameCon
1c0d0 74 65 78 74 73 20 63 61 6e 20 62 65 20 6e 65 73  texts can be nes
1c0e0 74 65 64 2e 20 20 57 68 65 6e 20 72 65 73 6f 6c  ted.  When resol
1c0f0 76 69 6e 67 20 6e 61 6d 65 73 2c 20 74 68 65 20  ving names, the 
1c100 69 6e 6e 65 72 2d 6d 6f 73 74 0a 2a 2a 20 63 6f  inner-most.** co
1c110 6e 74 65 78 74 20 69 73 20 73 65 61 72 63 68 65  ntext is searche
1c120 64 20 66 69 72 73 74 2e 20 20 49 66 20 6e 6f 20  d first.  If no 
1c130 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20  match is found, 
1c140 74 68 65 20 6e 65 78 74 20 6f 75 74 65 72 0a 2a  the next outer.*
1c150 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 63 68 65  * context is che
1c160 63 6b 65 64 2e 20 20 49 66 20 74 68 65 72 65 20  cked.  If there 
1c170 69 73 20 73 74 69 6c 6c 20 6e 6f 20 6d 61 74 63  is still no matc
1c180 68 2c 20 74 68 65 20 6e 65 78 74 20 63 6f 6e 74  h, the next cont
1c190 65 78 74 0a 2a 2a 20 69 73 20 63 68 65 63 6b 65  ext.** is checke
1c1a0 64 2e 20 20 54 68 69 73 20 70 72 6f 63 65 73 73  d.  This process
1c1b0 20 63 6f 6e 74 69 6e 75 65 73 20 75 6e 74 69 6c   continues until
1c1c0 20 65 69 74 68 65 72 20 61 20 6d 61 74 63 68 20   either a match 
1c1d0 69 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61  is found.** or a
1c1e0 6c 6c 20 63 6f 6e 74 65 78 74 73 20 61 72 65 20  ll contexts are 
1c1f0 63 68 65 63 6b 2e 20 20 57 68 65 6e 20 61 20 6d  check.  When a m
1c200 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74  atch is found, t
1c210 68 65 20 6e 52 65 66 20 6d 65 6d 62 65 72 20 6f  he nRef member o
1c220 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 78 74  f.** the context
1c230 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
1c240 6d 61 74 63 68 20 69 73 20 69 6e 63 72 65 6d 65  match is increme
1c250 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 45 61 63 68  nted..**.** Each
1c260 20 73 75 62 71 75 65 72 79 20 67 65 74 73 20 61   subquery gets a
1c270 20 6e 65 77 20 4e 61 6d 65 43 6f 6e 74 65 78 74   new NameContext
1c280 2e 20 20 54 68 65 20 70 4e 65 78 74 20 66 69 65  .  The pNext fie
1c290 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  ld points to the
1c2a0 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  .** NameContext 
1c2b0 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 71 75  in the parent qu
1c2c0 65 72 79 2e 20 20 54 68 75 73 20 74 68 65 20 70  ery.  Thus the p
1c2d0 72 6f 63 65 73 73 20 6f 66 20 73 63 61 6e 6e 69  rocess of scanni
1c2e0 6e 67 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f  ng the.** NameCo
1c2f0 6e 74 65 78 74 20 6c 69 73 74 20 63 6f 72 72 65  ntext list corre
1c300 73 70 6f 6e 64 73 20 74 6f 20 73 65 61 72 63 68  sponds to search
1c310 69 6e 67 20 74 68 72 6f 75 67 68 20 73 75 63 63  ing through succ
1c320 65 73 73 69 76 65 6c 79 20 6f 75 74 65 72 0a 2a  essively outer.*
1c330 2a 20 73 75 62 71 75 65 72 69 65 73 20 6c 6f 6f  * subqueries loo
1c340 6b 69 6e 67 20 66 6f 72 20 61 20 6d 61 74 63 68  king for a match
1c350 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4e 61 6d 65  ..*/.struct Name
1c360 43 6f 6e 74 65 78 74 20 7b 0a 20 20 50 61 72 73  Context {.  Pars
1c370 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20  e *pParse;      
1c380 20 2f 2a 20 54 68 65 20 70 61 72 73 65 72 20 2a   /* The parser *
1c390 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72  /.  SrcList *pSr
1c3a0 63 4c 69 73 74 3b 20 20 20 2f 2a 20 4f 6e 65 20  cList;   /* One 
1c3b0 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73 20 75  or more tables u
1c3c0 73 65 64 20 74 6f 20 72 65 73 6f 6c 76 65 20 6e  sed to resolve n
1c3d0 61 6d 65 73 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  ames */.  union 
1c3e0 7b 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a  {.    ExprList *
1c3f0 70 45 4c 69 73 74 3b 20 20 20 20 2f 2a 20 4f 70  pEList;    /* Op
1c400 74 69 6f 6e 61 6c 20 6c 69 73 74 20 6f 66 20 72  tional list of r
1c410 65 73 75 6c 74 2d 73 65 74 20 63 6f 6c 75 6d 6e  esult-set column
1c420 73 20 2a 2f 0a 20 20 20 20 41 67 67 49 6e 66 6f  s */.    AggInfo
1c430 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 2f 2a   *pAggInfo;   /*
1c440 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   Information abo
1c450 75 74 20 61 67 67 72 65 67 61 74 65 73 20 61 74  ut aggregates at
1c460 20 74 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a 20   this level */. 
1c470 20 20 20 55 70 73 65 72 74 20 2a 70 55 70 73 65     Upsert *pUpse
1c480 72 74 3b 20 20 20 20 20 2f 2a 20 4f 4e 20 43 4f  rt;     /* ON CO
1c490 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 69 6e  NFLICT clause in
1c4a0 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 61  formation from a
1c4b0 6e 20 75 70 73 65 72 74 20 2a 2f 0a 20 20 7d 20  n upsert */.  } 
1c4c0 75 4e 43 3b 0a 20 20 4e 61 6d 65 43 6f 6e 74 65  uNC;.  NameConte
1c4d0 78 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e  xt *pNext;  /* N
1c4e0 65 78 74 20 6f 75 74 65 72 20 6e 61 6d 65 20 63  ext outer name c
1c4f0 6f 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66 6f  ontext.  NULL fo
1c500 72 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a 20  r outermost */. 
1c510 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20   int nRef;      
1c520 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1c530 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76 65  of names resolve
1c540 64 20 62 79 20 74 68 69 73 20 63 6f 6e 74 65 78  d by this contex
1c550 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b  t */.  int nErr;
1c560 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1c570 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20  umber of errors 
1c580 65 6e 63 6f 75 6e 74 65 72 65 64 20 77 68 69 6c  encountered whil
1c590 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65  e resolving name
1c5a0 73 20 2a 2f 0a 20 20 75 31 36 20 6e 63 46 6c 61  s */.  u16 ncFla
1c5b0 67 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 5a  gs;         /* Z
1c5c0 65 72 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a  ero or more NC_*
1c5d0 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64 20 62   flags defined b
1c5e0 65 6c 6f 77 20 2a 2f 0a 20 20 53 65 6c 65 63 74  elow */.  Select
1c5f0 20 2a 70 57 69 6e 53 65 6c 65 63 74 3b 20 20 2f   *pWinSelect;  /
1c600 2a 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  * SELECT stateme
1c610 6e 74 20 66 6f 72 20 61 6e 79 20 77 69 6e 64 6f  nt for any windo
1c620 77 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d  w functions */.}
1c630 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  ;../*.** Allowed
1c640 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20   values for the 
1c650 4e 61 6d 65 43 6f 6e 74 65 78 74 2c 20 6e 63 46  NameContext, ncF
1c660 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a  lags field..**.*
1c670 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69  * Value constrai
1c680 6e 74 73 20 28 61 6c 6c 20 63 68 65 63 6b 65 64  nts (all checked
1c690 20 76 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a   via assert()):.
1c6a0 2a 2a 20 20 20 20 4e 43 5f 48 61 73 41 67 67 20  **    NC_HasAgg 
1c6b0 20 20 20 3d 3d 20 53 46 5f 48 61 73 41 67 67 0a     == SF_HasAgg.
1c6c0 2a 2a 20 20 20 20 4e 43 5f 4d 69 6e 4d 61 78 41  **    NC_MinMaxA
1c6d0 67 67 20 3d 3d 20 53 46 5f 4d 69 6e 4d 61 78 41  gg == SF_MinMaxA
1c6e0 67 67 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e  gg == SQLITE_FUN
1c6f0 43 5f 4d 49 4e 4d 41 58 0a 2a 2a 0a 2a 2f 0a 23  C_MINMAX.**.*/.#
1c700 64 65 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77 41  define NC_AllowA
1c710 67 67 20 20 30 78 30 30 30 31 20 20 2f 2a 20 41  gg  0x0001  /* A
1c720 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
1c730 6e 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 68  ns are allowed h
1c740 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  ere */.#define N
1c750 43 5f 50 61 72 74 49 64 78 20 20 20 30 78 30 30  C_PartIdx   0x00
1c760 30 32 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72  02  /* True if r
1c770 65 73 6f 6c 76 69 6e 67 20 61 20 70 61 72 74 69  esolving a parti
1c780 61 6c 20 69 6e 64 65 78 20 57 48 45 52 45 20 2a  al index WHERE *
1c790 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 73 43  /.#define NC_IsC
1c7a0 68 65 63 6b 20 20 20 30 78 30 30 30 34 20 20 2f  heck   0x0004  /
1c7b0 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76  * True if resolv
1c7c0 69 6e 67 20 6e 61 6d 65 73 20 69 6e 20 61 20 43  ing names in a C
1c7d0 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20  HECK constraint 
1c7e0 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 6e  */.#define NC_In
1c7f0 41 67 67 46 75 6e 63 20 30 78 30 30 30 38 20 20  AggFunc 0x0008  
1c800 2f 2a 20 54 72 75 65 20 69 66 20 61 6e 61 6c 79  /* True if analy
1c810 7a 69 6e 67 20 61 72 67 75 6d 65 6e 74 73 20 74  zing arguments t
1c820 6f 20 61 6e 20 61 67 67 20 66 75 6e 63 20 2a 2f  o an agg func */
1c830 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48 61 73 41  .#define NC_HasA
1c840 67 67 20 20 20 20 30 78 30 30 31 30 20 20 2f 2a  gg    0x0010  /*
1c850 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67   One or more agg
1c860 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
1c870 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   seen */.#define
1c880 20 4e 43 5f 49 64 78 45 78 70 72 20 20 20 30 78   NC_IdxExpr   0x
1c890 30 30 32 30 20 20 2f 2a 20 54 72 75 65 20 69 66  0020  /* True if
1c8a0 20 72 65 73 6f 6c 76 69 6e 67 20 63 6f 6c 75 6d   resolving colum
1c8b0 6e 73 20 6f 66 20 43 52 45 41 54 45 20 49 4e 44  ns of CREATE IND
1c8c0 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  EX */.#define NC
1c8d0 5f 56 61 72 53 65 6c 65 63 74 20 30 78 30 30 34  _VarSelect 0x004
1c8e0 30 20 20 2f 2a 20 41 20 63 6f 72 72 65 6c 61 74  0  /* A correlat
1c8f0 65 64 20 73 75 62 71 75 65 72 79 20 68 61 73 20  ed subquery has 
1c900 62 65 65 6e 20 73 65 65 6e 20 2a 2f 0a 23 64 65  been seen */.#de
1c910 66 69 6e 65 20 4e 43 5f 55 45 4c 69 73 74 20 20  fine NC_UEList  
1c920 20 20 30 78 30 30 38 30 20 20 2f 2a 20 54 72 75    0x0080  /* Tru
1c930 65 20 69 66 20 75 4e 43 2e 70 45 4c 69 73 74 20  e if uNC.pEList 
1c940 69 73 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69  is used */.#defi
1c950 6e 65 20 4e 43 5f 55 41 67 67 49 6e 66 6f 20 20  ne NC_UAggInfo  
1c960 30 78 30 31 30 30 20 20 2f 2a 20 54 72 75 65 20  0x0100  /* True 
1c970 69 66 20 75 4e 43 2e 70 41 67 67 49 6e 66 6f 20  if uNC.pAggInfo 
1c980 69 73 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69  is used */.#defi
1c990 6e 65 20 4e 43 5f 55 55 70 73 65 72 74 20 20 20  ne NC_UUpsert   
1c9a0 30 78 30 32 30 30 20 20 2f 2a 20 54 72 75 65 20  0x0200  /* True 
1c9b0 69 66 20 75 4e 43 2e 70 55 70 73 65 72 74 20 69  if uNC.pUpsert i
1c9c0 73 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e  s used */.#defin
1c9d0 65 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 30  e NC_MinMaxAgg 0
1c9e0 78 31 30 30 30 20 20 2f 2a 20 6d 69 6e 2f 6d 61  x1000  /* min/ma
1c9f0 78 20 61 67 67 72 65 67 61 74 65 73 20 73 65 65  x aggregates see
1ca00 6e 2e 20 20 53 65 65 20 6e 6f 74 65 20 61 62 6f  n.  See note abo
1ca10 76 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  ve */.#define NC
1ca20 5f 43 6f 6d 70 6c 65 78 20 20 20 30 78 32 30 30  _Complex   0x200
1ca30 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61 20  0  /* True if a 
1ca40 66 75 6e 63 74 69 6f 6e 20 6f 72 20 73 75 62 71  function or subq
1ca50 75 65 72 79 20 73 65 65 6e 20 2a 2f 0a 23 64 65  uery seen */.#de
1ca60 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77 57 69 6e  fine NC_AllowWin
1ca70 20 20 30 78 34 30 30 30 20 20 2f 2a 20 57 69 6e    0x4000  /* Win
1ca80 64 6f 77 20 66 75 6e 63 74 69 6f 6e 73 20 61 72  dow functions ar
1ca90 65 20 61 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a  e allowed here *
1caa0 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  /../*.** An inst
1cab0 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
1cac0 6f 77 69 6e 67 20 6f 62 6a 65 63 74 20 64 65 73  owing object des
1cad0 63 72 69 62 65 73 20 61 20 73 69 6e 67 6c 65 20  cribes a single 
1cae0 4f 4e 20 43 4f 4e 46 4c 49 43 54 0a 2a 2a 20 63  ON CONFLICT.** c
1caf0 6c 61 75 73 65 20 69 6e 20 61 6e 20 75 70 73 65  lause in an upse
1cb00 72 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 55  rt..**.** The pU
1cb10 70 73 65 72 74 54 61 72 67 65 74 20 66 69 65 6c  psertTarget fiel
1cb20 64 20 69 73 20 6f 6e 6c 79 20 73 65 74 20 69 66  d is only set if
1cb30 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54   the ON CONFLICT
1cb40 20 63 6c 61 75 73 65 20 69 6e 63 6c 75 64 65 73   clause includes
1cb50 0a 2a 2a 20 63 6f 6e 66 6c 69 63 74 2d 74 61 72  .** conflict-tar
1cb60 67 65 74 20 63 6c 61 75 73 65 2e 20 20 28 49 6e  get clause.  (In
1cb70 20 22 4f 4e 20 43 4f 4e 46 4c 49 43 54 28 61 2c   "ON CONFLICT(a,
1cb80 62 29 22 20 74 68 65 20 22 28 61 2c 62 29 22 20  b)" the "(a,b)" 
1cb90 69 73 20 74 68 65 0a 2a 2a 20 63 6f 6e 66 6c 69  is the.** confli
1cba0 63 74 2d 74 61 72 67 65 74 20 63 6c 61 75 73 65  ct-target clause
1cbb0 2e 29 20 20 54 68 65 20 70 55 70 73 65 72 74 54  .)  The pUpsertT
1cbc0 61 72 67 65 74 57 68 65 72 65 20 69 73 20 74 68  argetWhere is th
1cbd0 65 20 6f 70 74 69 6f 6e 61 6c 0a 2a 2a 20 57 48  e optional.** WH
1cbe0 45 52 45 20 63 6c 61 75 73 65 20 75 73 65 64 20  ERE clause used 
1cbf0 74 6f 20 69 64 65 6e 74 69 66 79 20 70 61 72 74  to identify part
1cc00 69 61 6c 20 75 6e 69 71 75 65 20 69 6e 64 65 78  ial unique index
1cc10 65 73 2e 0a 2a 2a 0a 2a 2a 20 70 55 70 73 65 72  es..**.** pUpser
1cc20 74 53 65 74 20 69 73 20 74 68 65 20 6c 69 73 74  tSet is the list
1cc30 20 6f 66 20 63 6f 6c 75 6d 6e 3d 65 78 70 72 20   of column=expr 
1cc40 74 65 72 6d 73 20 6f 66 20 74 68 65 20 55 50 44  terms of the UPD
1cc50 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 0a  ATE statement. .
1cc60 2a 2a 20 54 68 65 20 70 55 70 73 65 72 74 53 65  ** The pUpsertSe
1cc70 74 20 66 69 65 6c 64 20 69 73 20 4e 55 4c 4c 20  t field is NULL 
1cc80 66 6f 72 20 61 20 4f 4e 20 43 4f 4e 46 4c 49 43  for a ON CONFLIC
1cc90 54 20 44 4f 20 4e 4f 54 48 49 4e 47 2e 20 20 54  T DO NOTHING.  T
1cca0 68 65 0a 2a 2a 20 70 55 70 73 65 72 74 57 68 65  he.** pUpsertWhe
1ccb0 72 65 20 69 73 20 74 68 65 20 57 48 45 52 45 20  re is the WHERE 
1ccc0 63 6c 61 75 73 65 20 66 6f 72 20 74 68 65 20 55  clause for the U
1ccd0 50 44 41 54 45 20 61 6e 64 20 69 73 20 4e 55 4c  PDATE and is NUL
1cce0 4c 20 69 66 20 74 68 65 0a 2a 2a 20 57 48 45 52  L if the.** WHER
1ccf0 45 20 63 6c 61 75 73 65 20 69 73 20 6f 6d 69 74  E clause is omit
1cd00 74 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55  ted..*/.struct U
1cd10 70 73 65 72 74 20 7b 0a 20 20 45 78 70 72 4c 69  psert {.  ExprLi
1cd20 73 74 20 2a 70 55 70 73 65 72 74 54 61 72 67 65  st *pUpsertTarge
1cd30 74 3b 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20  t;  /* Optional 
1cd40 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 20 63  description of c
1cd50 6f 6e 66 6c 69 63 74 69 6e 67 20 69 6e 64 65 78  onflicting index
1cd60 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 55 70 73   */.  Expr *pUps
1cd70 65 72 74 54 61 72 67 65 74 57 68 65 72 65 3b 20  ertTargetWhere; 
1cd80 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  /* WHERE clause 
1cd90 66 6f 72 20 70 61 72 74 69 61 6c 20 69 6e 64 65  for partial inde
1cda0 78 20 74 61 72 67 65 74 73 20 2a 2f 0a 20 20 45  x targets */.  E
1cdb0 78 70 72 4c 69 73 74 20 2a 70 55 70 73 65 72 74  xprList *pUpsert
1cdc0 53 65 74 3b 20 20 20 20 20 2f 2a 20 54 68 65 20  Set;     /* The 
1cdd0 53 45 54 20 63 6c 61 75 73 65 20 66 72 6f 6d 20  SET clause from 
1cde0 61 6e 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 55  an ON CONFLICT U
1cdf0 50 44 41 54 45 20 2a 2f 0a 20 20 45 78 70 72 20  PDATE */.  Expr 
1ce00 2a 70 55 70 73 65 72 74 57 68 65 72 65 3b 20 20  *pUpsertWhere;  
1ce10 20 20 20 20 20 2f 2a 20 57 48 45 52 45 20 63 6c       /* WHERE cl
1ce20 61 75 73 65 20 66 6f 72 20 74 68 65 20 4f 4e 20  ause for the ON 
1ce30 43 4f 4e 46 4c 49 43 54 20 55 50 44 41 54 45 20  CONFLICT UPDATE 
1ce40 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 66 69 65 6c  */.  /* The fiel
1ce50 64 73 20 61 62 6f 76 65 20 63 6f 6d 70 72 69 73  ds above compris
1ce60 65 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65  e the parse tree
1ce70 20 66 6f 72 20 74 68 65 20 75 70 73 65 72 74 20   for the upsert 
1ce80 63 6c 61 75 73 65 2e 0a 20 20 2a 2a 20 54 68 65  clause..  ** The
1ce90 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 61 72   fields below ar
1cea0 65 20 75 73 65 64 20 74 6f 20 74 72 61 6e 73 66  e used to transf
1ceb0 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66  er information f
1cec0 72 6f 6d 20 74 68 65 20 49 4e 53 45 52 54 0a 20  rom the INSERT. 
1ced0 20 2a 2a 20 70 72 6f 63 65 73 73 69 6e 67 20 64   ** processing d
1cee0 6f 77 6e 20 69 6e 74 6f 20 74 68 65 20 55 50 44  own into the UPD
1cef0 41 54 45 20 70 72 6f 63 65 73 73 69 6e 67 20 77  ATE processing w
1cf00 68 69 6c 65 20 67 65 6e 65 72 61 74 69 6e 67 20  hile generating 
1cf10 63 6f 64 65 2e 0a 20 20 2a 2a 20 55 70 73 65 72  code..  ** Upser
1cf20 74 20 6f 77 6e 73 20 74 68 65 20 6d 65 6d 6f 72  t owns the memor
1cf30 79 20 61 6c 6c 6f 63 61 74 65 64 20 61 62 6f 76  y allocated abov
1cf40 65 2c 20 62 75 74 20 6e 6f 74 20 74 68 65 20 6d  e, but not the m
1cf50 65 6d 6f 72 79 20 62 65 6c 6f 77 2e 20 2a 2f 0a  emory below. */.
1cf60 20 20 49 6e 64 65 78 20 2a 70 55 70 73 65 72 74    Index *pUpsert
1cf70 49 64 78 3b 20 20 20 20 20 20 20 20 2f 2a 20 43  Idx;        /* C
1cf80 6f 6e 73 74 72 61 69 6e 74 20 74 68 61 74 20 70  onstraint that p
1cf90 55 70 73 65 72 74 54 61 72 67 65 74 20 69 64 65  UpsertTarget ide
1cfa0 6e 74 69 66 69 65 73 20 2a 2f 0a 20 20 53 72 63  ntifies */.  Src
1cfb0 4c 69 73 74 20 2a 70 55 70 73 65 72 74 53 72 63  List *pUpsertSrc
1cfc0 3b 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20  ;      /* Table 
1cfd0 74 6f 20 62 65 20 75 70 64 61 74 65 64 20 2a 2f  to be updated */
1cfe0 0a 20 20 69 6e 74 20 72 65 67 44 61 74 61 3b 20  .  int regData; 
1cff0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1d000 46 69 72 73 74 20 72 65 67 69 73 74 65 72 20 68  First register h
1d010 6f 6c 64 69 6e 67 20 61 72 72 61 79 20 6f 66 20  olding array of 
1d020 56 41 4c 55 45 53 20 2a 2f 0a 20 20 69 6e 74 20  VALUES */.  int 
1d030 69 44 61 74 61 43 75 72 3b 20 20 20 20 20 20 20  iDataCur;       
1d040 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f        /* Index o
1d050 66 20 74 68 65 20 64 61 74 61 20 63 75 72 73 6f  f the data curso
1d060 72 20 2a 2f 0a 20 20 69 6e 74 20 69 49 64 78 43  r */.  int iIdxC
1d070 75 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ur;             
1d080 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65   /* Index of the
1d090 20 66 69 72 73 74 20 69 6e 64 65 78 20 63 75 72   first index cur
1d0a0 73 6f 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  sor */.};../*.**
1d0b0 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
1d0c0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
1d0d0 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73  ructure contains
1d0e0 20 61 6c 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e   all information
1d0f0 0a 2a 2a 20 6e 65 65 64 65 64 20 74 6f 20 67 65  .** needed to ge
1d100 6e 65 72 61 74 65 20 63 6f 64 65 20 66 6f 72 20  nerate code for 
1d110 61 20 73 69 6e 67 6c 65 20 53 45 4c 45 43 54 20  a single SELECT 
1d120 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  statement..**.**
1d130 20 53 65 65 20 74 68 65 20 68 65 61 64 65 72 20   See the header 
1d140 63 6f 6d 6d 65 6e 74 20 6f 6e 20 74 68 65 20 63  comment on the c
1d150 6f 6d 70 75 74 65 4c 69 6d 69 74 52 65 67 69 73  omputeLimitRegis
1d160 74 65 72 73 28 29 20 72 6f 75 74 69 6e 65 20 66  ters() routine f
1d170 6f 72 20 61 0a 2a 2a 20 64 65 74 61 69 6c 65 64  or a.** detailed
1d180 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 20   description of 
1d190 74 68 65 20 6d 65 61 6e 69 6e 67 20 6f 66 20 74  the meaning of t
1d1a0 68 65 20 69 4c 69 6d 69 74 20 61 6e 64 20 69 4f  he iLimit and iO
1d1b0 66 66 73 65 74 20 66 69 65 6c 64 73 2e 0a 2a 2a  ffset fields..**
1d1c0 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70 68 6d  .** addrOpenEphm
1d1d0 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e 74 61  [] entries conta
1d1e0 69 6e 20 74 68 65 20 61 64 64 72 65 73 73 20 6f  in the address o
1d1f0 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  f OP_OpenEphemer
1d200 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20 54  al opcodes..** T
1d210 68 65 73 65 20 61 64 64 72 65 73 73 65 73 20 6d  hese addresses m
1d220 75 73 74 20 62 65 20 73 74 6f 72 65 64 20 73 6f  ust be stored so
1d230 20 74 68 61 74 20 77 65 20 63 61 6e 20 67 6f 20   that we can go 
1d240 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20 69 6e  back and fill in
1d250 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59 49 4e  .** the P4_KEYIN
1d260 46 4f 20 61 6e 64 20 50 32 20 70 61 72 61 6d 65  FO and P2 parame
1d270 74 65 72 73 20 6c 61 74 65 72 2e 20 20 4e 65 69  ters later.  Nei
1d280 74 68 65 72 20 74 68 65 20 4b 65 79 49 6e 66 6f  ther the KeyInfo
1d290 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75 6d 62   nor.** the numb
1d2a0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
1d2b0 20 50 32 20 63 61 6e 20 62 65 20 63 6f 6d 70 75   P2 can be compu
1d2c0 74 65 64 20 61 74 20 74 68 65 20 73 61 6d 65 20  ted at the same 
1d2d0 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65 20 4f  time.** as the O
1d2e0 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73 74 72  P_OpenEphm instr
1d2f0 75 63 74 69 6f 6e 20 69 73 20 63 6f 64 65 64 20  uction is coded 
1d300 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a 20 65  because not.** e
1d310 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74 69 6f  nough informatio
1d320 6e 20 61 62 6f 75 74 20 74 68 65 20 63 6f 6d 70  n about the comp
1d330 6f 75 6e 64 20 71 75 65 72 79 20 69 73 20 6b 6e  ound query is kn
1d340 6f 77 6e 20 61 74 20 74 68 61 74 20 70 6f 69 6e  own at that poin
1d350 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49 6e 66  t..** The KeyInf
1d360 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 54 72  o for addrOpenTr
1d370 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20 63 6f  an[0] and [1] co
1d380 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67  ntains collating
1d390 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20 66 6f   sequences.** fo
1d3a0 72 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  r the result set
1d3b0 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66  .  The KeyInfo f
1d3c0 6f 72 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b  or addrOpenEphm[
1d3d0 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c  2] contains coll
1d3e0 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65 6e 63  ating.** sequenc
1d3f0 65 73 20 66 6f 72 20 74 68 65 20 4f 52 44 45 52  es for the ORDER
1d400 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73   BY clause..*/.s
1d410 74 72 75 63 74 20 53 65 6c 65 63 74 20 7b 0a 20  truct Select {. 
1d420 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73   ExprList *pELis
1d430 74 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 66  t;      /* The f
1d440 69 65 6c 64 73 20 6f 66 20 74 68 65 20 72 65 73  ields of the res
1d450 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20  ult */.  u8 op; 
1d460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d470 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55 4e  /* One of: TK_UN
1d480 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49 4e  ION TK_ALL TK_IN
1d490 54 45 52 53 45 43 54 20 54 4b 5f 45 58 43 45 50  TERSECT TK_EXCEP
1d4a0 54 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 6e 53  T */.  LogEst nS
1d4b0 65 6c 65 63 74 52 6f 77 3b 20 20 20 20 20 2f 2a  electRow;     /*
1d4c0 20 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65   Estimated numbe
1d4d0 72 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73  r of result rows
1d4e0 20 2a 2f 0a 20 20 75 33 32 20 73 65 6c 46 6c 61   */.  u32 selFla
1d4f0 67 73 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  gs;          /* 
1d500 56 61 72 69 6f 75 73 20 53 46 5f 2a 20 76 61 6c  Various SF_* val
1d510 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4c 69  ues */.  int iLi
1d520 6d 69 74 2c 20 69 4f 66 66 73 65 74 3b 20 20 20  mit, iOffset;   
1d530 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74  /* Memory regist
1d540 65 72 73 20 68 6f 6c 64 69 6e 67 20 4c 49 4d 49  ers holding LIMI
1d550 54 20 26 20 4f 46 46 53 45 54 20 63 6f 75 6e 74  T & OFFSET count
1d560 65 72 73 20 2a 2f 0a 20 20 75 33 32 20 73 65 6c  ers */.  u32 sel
1d570 49 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Id;             
1d580 2f 2a 20 55 6e 69 71 75 65 20 69 64 65 6e 74 69  /* Unique identi
1d590 66 69 65 72 20 6e 75 6d 62 65 72 20 66 6f 72 20  fier number for 
1d5a0 74 68 69 73 20 53 45 4c 45 43 54 20 2a 2f 0a 20  this SELECT */. 
1d5b0 20 69 6e 74 20 61 64 64 72 4f 70 65 6e 45 70 68   int addrOpenEph
1d5c0 6d 5b 32 5d 3b 20 20 20 2f 2a 20 4f 50 5f 4f 70  m[2];   /* OP_Op
1d5d0 65 6e 45 70 68 65 6d 20 6f 70 63 6f 64 65 73 20  enEphem opcodes 
1d5e0 72 65 6c 61 74 65 64 20 74 6f 20 74 68 69 73 20  related to this 
1d5f0 73 65 6c 65 63 74 20 2a 2f 0a 20 20 53 72 63 4c  select */.  SrcL
1d600 69 73 74 20 2a 70 53 72 63 3b 20 20 20 20 20 20  ist *pSrc;      
1d610 20 20 20 2f 2a 20 54 68 65 20 46 52 4f 4d 20 63     /* The FROM c
1d620 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20  lause */.  Expr 
1d630 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20 20 20  *pWhere;        
1d640 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20 63    /* The WHERE c
1d650 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c  lause */.  ExprL
1d660 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20  ist *pGroupBy;  
1d670 20 20 2f 2a 20 54 68 65 20 47 52 4f 55 50 20 42    /* The GROUP B
1d680 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78  Y clause */.  Ex
1d690 70 72 20 2a 70 48 61 76 69 6e 67 3b 20 20 20 20  pr *pHaving;    
1d6a0 20 20 20 20 20 2f 2a 20 54 68 65 20 48 41 56 49       /* The HAVI
1d6b0 4e 47 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45  NG clause */.  E
1d6c0 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42  xprList *pOrderB
1d6d0 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 4f 52 44  y;    /* The ORD
1d6e0 45 52 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a  ER BY clause */.
1d6f0 20 20 53 65 6c 65 63 74 20 2a 70 50 72 69 6f 72    Select *pPrior
1d700 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 72 69 6f  ;        /* Prio
1d710 72 20 73 65 6c 65 63 74 20 69 6e 20 61 20 63 6f  r select in a co
1d720 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 20 73 74  mpound select st
1d730 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 53 65 6c  atement */.  Sel
1d740 65 63 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  ect *pNext;     
1d750 20 20 20 20 2f 2a 20 4e 65 78 74 20 73 65 6c 65      /* Next sele
1d760 63 74 20 74 6f 20 74 68 65 20 6c 65 66 74 20 69  ct to the left i
1d770 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 2a 2f 0a  n a compound */.
1d780 20 20 45 78 70 72 20 2a 70 4c 69 6d 69 74 3b 20    Expr *pLimit; 
1d790 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 49 4d 49           /* LIMI
1d7a0 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55  T expression. NU
1d7b0 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65  LL means not use
1d7c0 64 2e 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57  d. */.  With *pW
1d7d0 69 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ith;           /
1d7e0 2a 20 57 49 54 48 20 63 6c 61 75 73 65 20 61 74  * WITH clause at
1d7f0 74 61 63 68 65 64 20 74 6f 20 74 68 69 73 20 73  tached to this s
1d800 65 6c 65 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e 20  elect. Or NULL. 
1d810 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
1d820 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57 46 55 4e  E_OMIT_WINDOWFUN
1d830 43 0a 20 20 57 69 6e 64 6f 77 20 2a 70 57 69 6e  C.  Window *pWin
1d840 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69  ;          /* Li
1d850 73 74 20 6f 66 20 77 69 6e 64 6f 77 20 66 75 6e  st of window fun
1d860 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 57 69 6e 64  ctions */.  Wind
1d870 6f 77 20 2a 70 57 69 6e 44 65 66 6e 3b 20 20 20  ow *pWinDefn;   
1d880 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 6e 61     /* List of na
1d890 6d 65 64 20 77 69 6e 64 6f 77 20 64 65 66 69 6e  med window defin
1d8a0 69 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69 66  itions */.#endif
1d8b0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  .};../*.** Allow
1d8c0 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 53 65  ed values for Se
1d8d0 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e 20 20  lect.selFlags.  
1d8e0 54 68 65 20 22 53 46 22 20 70 72 65 66 69 78 20  The "SF" prefix 
1d8f0 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 53  stands for.** "S
1d900 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a 2a 0a  elect Flag"..**.
1d910 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61  ** Value constra
1d920 69 6e 74 73 20 28 61 6c 6c 20 63 68 65 63 6b 65  ints (all checke
1d930 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29 0a  d via assert()).
1d940 2a 2a 20 20 20 20 20 53 46 5f 48 61 73 41 67 67  **     SF_HasAgg
1d950 20 20 20 20 20 3d 3d 20 4e 43 5f 48 61 73 41 67       == NC_HasAg
1d960 67 0a 2a 2a 20 20 20 20 20 53 46 5f 4d 69 6e 4d  g.**     SF_MinM
1d970 61 78 41 67 67 20 20 3d 3d 20 4e 43 5f 4d 69 6e  axAgg  == NC_Min
1d980 4d 61 78 41 67 67 20 20 20 20 20 3d 3d 20 53 51  MaxAgg     == SQ
1d990 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58  LITE_FUNC_MINMAX
1d9a0 0a 2a 2a 20 20 20 20 20 53 46 5f 46 69 78 65 64  .**     SF_Fixed
1d9b0 4c 69 6d 69 74 20 3d 3d 20 57 48 45 52 45 5f 55  Limit == WHERE_U
1d9c0 53 45 5f 4c 49 4d 49 54 0a 2a 2f 0a 23 64 65 66  SE_LIMIT.*/.#def
1d9d0 69 6e 65 20 53 46 5f 44 69 73 74 69 6e 63 74 20  ine SF_Distinct 
1d9e0 20 20 20 20 20 20 30 78 30 30 30 30 31 20 20 2f        0x00001  /
1d9f0 2a 20 4f 75 74 70 75 74 20 73 68 6f 75 6c 64 20  * Output should 
1da00 62 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 23  be DISTINCT */.#
1da10 64 65 66 69 6e 65 20 53 46 5f 41 6c 6c 20 20 20  define SF_All   
1da20 20 20 20 20 20 20 20 20 20 30 78 30 30 30 30 32           0x00002
1da30 20 20 2f 2a 20 49 6e 63 6c 75 64 65 73 20 74 68    /* Includes th
1da40 65 20 41 4c 4c 20 6b 65 79 77 6f 72 64 20 2a 2f  e ALL keyword */
1da50 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65 73 6f  .#define SF_Reso
1da60 6c 76 65 64 20 20 20 20 20 20 20 30 78 30 30 30  lved       0x000
1da70 30 34 20 20 2f 2a 20 49 64 65 6e 74 69 66 69 65  04  /* Identifie
1da80 72 73 20 68 61 76 65 20 62 65 65 6e 20 72 65 73  rs have been res
1da90 6f 6c 76 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  olved */.#define
1daa0 20 53 46 5f 41 67 67 72 65 67 61 74 65 20 20 20   SF_Aggregate   
1dab0 20 20 20 30 78 30 30 30 30 38 20 20 2f 2a 20 43     0x00008  /* C
1dac0 6f 6e 74 61 69 6e 73 20 61 67 67 20 66 75 6e 63  ontains agg func
1dad0 74 69 6f 6e 73 20 6f 72 20 61 20 47 52 4f 55 50  tions or a GROUP
1dae0 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53   BY */.#define S
1daf0 46 5f 48 61 73 41 67 67 20 20 20 20 20 20 20 20  F_HasAgg        
1db00 20 30 78 30 30 30 31 30 20 20 2f 2a 20 43 6f 6e   0x00010  /* Con
1db10 74 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20  tains aggregate 
1db20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65  functions */.#de
1db30 66 69 6e 65 20 53 46 5f 55 73 65 73 45 70 68 65  fine SF_UsesEphe
1db40 6d 65 72 61 6c 20 20 30 78 30 30 30 32 30 20 20  meral  0x00020  
1db50 2f 2a 20 55 73 65 73 20 74 68 65 20 4f 70 65 6e  /* Uses the Open
1db60 45 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65  Ephemeral opcode
1db70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 45   */.#define SF_E
1db80 78 70 61 6e 64 65 64 20 20 20 20 20 20 20 30 78  xpanded       0x
1db90 30 30 30 34 30 20 20 2f 2a 20 73 71 6c 69 74 65  00040  /* sqlite
1dba0 33 53 65 6c 65 63 74 45 78 70 61 6e 64 28 29 20  3SelectExpand() 
1dbb0 63 61 6c 6c 65 64 20 6f 6e 20 74 68 69 73 20 2a  called on this *
1dbc0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 48 61 73  /.#define SF_Has
1dbd0 54 79 70 65 49 6e 66 6f 20 20 20 20 30 78 30 30  TypeInfo    0x00
1dbe0 30 38 30 20 20 2f 2a 20 46 52 4f 4d 20 73 75 62  080  /* FROM sub
1dbf0 71 75 65 72 69 65 73 20 68 61 76 65 20 54 61 62  queries have Tab
1dc00 6c 65 20 6d 65 74 61 64 61 74 61 20 2a 2f 0a 23  le metadata */.#
1dc10 64 65 66 69 6e 65 20 53 46 5f 43 6f 6d 70 6f 75  define SF_Compou
1dc20 6e 64 20 20 20 20 20 20 20 30 78 30 30 31 30 30  nd       0x00100
1dc30 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 63    /* Part of a c
1dc40 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 2a 2f  ompound query */
1dc50 0a 23 64 65 66 69 6e 65 20 53 46 5f 56 61 6c 75  .#define SF_Valu
1dc60 65 73 20 20 20 20 20 20 20 20 20 30 78 30 30 32  es         0x002
1dc70 30 30 20 20 2f 2a 20 53 79 6e 74 68 65 73 69 7a  00  /* Synthesiz
1dc80 65 64 20 66 72 6f 6d 20 56 41 4c 55 45 53 20 63  ed from VALUES c
1dc90 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65  lause */.#define
1dca0 20 53 46 5f 4d 75 6c 74 69 56 61 6c 75 65 20 20   SF_MultiValue  
1dcb0 20 20 20 30 78 30 30 34 30 30 20 20 2f 2a 20 53     0x00400  /* S
1dcc0 69 6e 67 6c 65 20 56 41 4c 55 45 53 20 74 65 72  ingle VALUES ter
1dcd0 6d 20 77 69 74 68 20 6d 75 6c 74 69 70 6c 65 20  m with multiple 
1dce0 72 6f 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rows */.#define 
1dcf0 53 46 5f 4e 65 73 74 65 64 46 72 6f 6d 20 20 20  SF_NestedFrom   
1dd00 20 20 30 78 30 30 38 30 30 20 20 2f 2a 20 50 61    0x00800  /* Pa
1dd10 72 74 20 6f 66 20 61 20 70 61 72 65 6e 74 68 65  rt of a parenthe
1dd20 73 69 7a 65 64 20 46 52 4f 4d 20 63 6c 61 75 73  sized FROM claus
1dd30 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  e */.#define SF_
1dd40 4d 69 6e 4d 61 78 41 67 67 20 20 20 20 20 20 30  MinMaxAgg      0
1dd50 78 30 31 30 30 30 20 20 2f 2a 20 41 67 67 72 65  x01000  /* Aggre
1dd60 67 61 74 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  gate containing 
1dd70 6d 69 6e 28 29 20 6f 72 20 6d 61 78 28 29 20 2a  min() or max() *
1dd80 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65 63  /.#define SF_Rec
1dd90 75 72 73 69 76 65 20 20 20 20 20 20 30 78 30 32  ursive      0x02
1dda0 30 30 30 20 20 2f 2a 20 54 68 65 20 72 65 63 75  000  /* The recu
1ddb0 72 73 69 76 65 20 70 61 72 74 20 6f 66 20 61 20  rsive part of a 
1ddc0 72 65 63 75 72 73 69 76 65 20 43 54 45 20 2a 2f  recursive CTE */
1ddd0 0a 23 64 65 66 69 6e 65 20 53 46 5f 46 69 78 65  .#define SF_Fixe
1dde0 64 4c 69 6d 69 74 20 20 20 20 20 30 78 30 34 30  dLimit     0x040
1ddf0 30 30 20 20 2f 2a 20 6e 53 65 6c 65 63 74 52 6f  00  /* nSelectRo
1de00 77 20 73 65 74 20 62 79 20 61 20 63 6f 6e 73 74  w set by a const
1de10 61 6e 74 20 4c 49 4d 49 54 20 2a 2f 0a 23 64 65  ant LIMIT */.#de
1de20 66 69 6e 65 20 53 46 5f 4d 61 79 62 65 43 6f 6e  fine SF_MaybeCon
1de30 76 65 72 74 20 20 20 30 78 30 38 30 30 30 20 20  vert   0x08000  
1de40 2f 2a 20 4e 65 65 64 20 63 6f 6e 76 65 72 74 43  /* Need convertC
1de50 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53  ompoundSelectToS
1de60 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 23 64 65  ubquery() */.#de
1de70 66 69 6e 65 20 53 46 5f 43 6f 6e 76 65 72 74 65  fine SF_Converte
1de80 64 20 20 20 20 20 20 30 78 31 30 30 30 30 20 20  d      0x10000  
1de90 2f 2a 20 42 79 20 63 6f 6e 76 65 72 74 43 6f 6d  /* By convertCom
1dea0 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62  poundSelectToSub
1deb0 71 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66 69  query() */.#defi
1dec0 6e 65 20 53 46 5f 49 6e 63 6c 75 64 65 48 69 64  ne SF_IncludeHid
1ded0 64 65 6e 20 20 30 78 32 30 30 30 30 20 20 2f 2a  den  0x20000  /*
1dee0 20 49 6e 63 6c 75 64 65 20 68 69 64 64 65 6e 20   Include hidden 
1def0 63 6f 6c 75 6d 6e 73 20 69 6e 20 6f 75 74 70 75  columns in outpu
1df00 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  t */.#define SF_
1df10 43 6f 6d 70 6c 65 78 52 65 73 75 6c 74 20 20 30  ComplexResult  0
1df20 78 34 30 30 30 30 20 20 2f 2a 20 52 65 73 75 6c  x40000  /* Resul
1df30 74 20 63 6f 6e 74 61 69 6e 73 20 73 75 62 71 75  t contains subqu
1df40 65 72 79 20 6f 72 20 66 75 6e 63 74 69 6f 6e 20  ery or function 
1df50 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 65  */../*.** The re
1df60 73 75 6c 74 73 20 6f 66 20 61 20 53 45 4c 45 43  sults of a SELEC
1df70 54 20 63 61 6e 20 62 65 20 64 69 73 74 72 69 62  T can be distrib
1df80 75 74 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20  uted in several 
1df90 77 61 79 73 2c 20 61 73 20 64 65 66 69 6e 65 64  ways, as defined
1dfa0 0a 2a 2a 20 62 79 20 6f 6e 65 20 6f 66 20 74 68  .** by one of th
1dfb0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
1dfc0 6f 73 2e 20 20 54 68 65 20 22 53 52 54 22 20 70  os.  The "SRT" p
1dfd0 72 65 66 69 78 20 6d 65 61 6e 73 20 22 53 45 4c  refix means "SEL
1dfe0 45 43 54 20 52 65 73 75 6c 74 0a 2a 2a 20 54 79  ECT Result.** Ty
1dff0 70 65 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  pe"..**.**     S
1e000 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 53  RT_Union       S
1e010 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73 20  tore results as 
1e020 61 20 6b 65 79 20 69 6e 20 61 20 74 65 6d 70 6f  a key in a tempo
1e030 72 61 72 79 20 69 6e 64 65 78 0a 2a 2a 20 20 20  rary index.**   
1e040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e050 20 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20    identified by 
1e060 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a  pDest->iSDParm..
1e070 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 78  **.**     SRT_Ex
1e080 63 65 70 74 20 20 20 20 20 20 52 65 6d 6f 76 65  cept      Remove
1e090 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 74 68   results from th
1e0a0 65 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64 65  e temporary inde
1e0b0 78 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  x pDest->iSDParm
1e0c0 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1e0d0 45 78 69 73 74 73 20 20 20 20 20 20 53 74 6f 72  Exists      Stor
1e0e0 65 20 61 20 31 20 69 6e 20 6d 65 6d 6f 72 79 20  e a 1 in memory 
1e0f0 63 65 6c 6c 20 70 44 65 73 74 2d 3e 69 53 44 50  cell pDest->iSDP
1e100 61 72 6d 20 69 66 20 74 68 65 20 72 65 73 75 6c  arm if the resul
1e110 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  t.**            
1e120 20 20 20 20 20 20 20 20 20 73 65 74 20 69 73 20           set is 
1e130 6e 6f 74 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a  not empty..**.**
1e140 20 20 20 20 20 53 52 54 5f 44 69 73 63 61 72 64       SRT_Discard
1e150 20 20 20 20 20 54 68 72 6f 77 20 74 68 65 20 72       Throw the r
1e160 65 73 75 6c 74 73 20 61 77 61 79 2e 20 20 54 68  esults away.  Th
1e170 69 73 20 69 73 20 75 73 65 64 20 62 79 20 53 45  is is used by SE
1e180 4c 45 43 54 0a 2a 2a 20 20 20 20 20 20 20 20 20  LECT.**         
1e190 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74              stat
1e1a0 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72  ements within tr
1e1b0 69 67 67 65 72 73 20 77 68 6f 73 65 20 6f 6e 6c  iggers whose onl
1e1c0 79 20 70 75 72 70 6f 73 65 20 69 73 0a 2a 2a 20  y purpose is.** 
1e1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e1e0 20 20 20 20 74 68 65 20 73 69 64 65 2d 65 66 66      the side-eff
1e1f0 65 63 74 73 20 6f 66 20 66 75 6e 63 74 69 6f 6e  ects of function
1e200 73 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20  s..**.** All of 
1e210 74 68 65 20 61 62 6f 76 65 20 61 72 65 20 66 72  the above are fr
1e220 65 65 20 74 6f 20 69 67 6e 6f 72 65 20 74 68 65  ee to ignore the
1e230 69 72 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  ir ORDER BY clau
1e240 73 65 2e 20 54 68 6f 73 65 20 74 68 61 74 0a 2a  se. Those that.*
1e250 2a 20 66 6f 6c 6c 6f 77 20 6d 75 73 74 20 68 6f  * follow must ho
1e260 6e 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42 59  nor the ORDER BY
1e270 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20   clause..**.**  
1e280 20 20 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20     SRT_Output   
1e290 20 20 20 47 65 6e 65 72 61 74 65 20 61 20 72 6f     Generate a ro
1e2a0 77 20 6f 66 20 6f 75 74 70 75 74 20 28 75 73 69  w of output (usi
1e2b0 6e 67 20 74 68 65 20 4f 50 5f 52 65 73 75 6c 74  ng the OP_Result
1e2c0 52 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  Row.**          
1e2d0 20 20 20 20 20 20 20 20 20 20 20 6f 70 63 6f 64             opcod
1e2e0 65 29 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20  e) for each row 
1e2f0 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  in the result se
1e300 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  t..**.**     SRT
1e310 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 4f 6e 6c  _Mem         Onl
1e320 79 20 76 61 6c 69 64 20 69 66 20 74 68 65 20 72  y valid if the r
1e330 65 73 75 6c 74 20 69 73 20 61 20 73 69 6e 67 6c  esult is a singl
1e340 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 20 20 20  e column..**    
1e350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e360 20 53 74 6f 72 65 20 74 68 65 20 66 69 72 73 74   Store the first
1e370 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 66   column of the f
1e380 69 72 73 74 20 72 65 73 75 6c 74 20 72 6f 77 0a  irst result row.
1e390 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1e3a0 20 20 20 20 20 20 20 69 6e 20 72 65 67 69 73 74         in regist
1e3b0 65 72 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  er pDest->iSDPar
1e3c0 6d 20 74 68 65 6e 20 61 62 61 6e 64 6f 6e 20 74  m then abandon t
1e3d0 68 65 20 72 65 73 74 0a 2a 2a 20 20 20 20 20 20  he rest.**      
1e3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
1e3f0 66 20 74 68 65 20 71 75 65 72 79 2e 20 20 54 68  f the query.  Th
1e400 69 73 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 69  is destination i
1e410 6d 70 6c 69 65 73 20 22 4c 49 4d 49 54 20 31 22  mplies "LIMIT 1"
1e420 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1e430 53 65 74 20 20 20 20 20 20 20 20 20 54 68 65 20  Set         The 
1e440 72 65 73 75 6c 74 20 6d 75 73 74 20 62 65 20 61  result must be a
1e450 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20   single column. 
1e460 20 53 74 6f 72 65 20 65 61 63 68 0a 2a 2a 20 20   Store each.**  
1e470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e480 20 20 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74     row of result
1e490 20 61 73 20 74 68 65 20 6b 65 79 20 69 6e 20 74   as the key in t
1e4a0 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50  able pDest->iSDP
1e4b0 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20  arm..**         
1e4c0 20 20 20 20 20 20 20 20 20 20 20 20 41 70 70 6c              Appl
1e4d0 79 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 70  y the affinity p
1e4e0 44 65 73 74 2d 3e 61 66 66 53 64 73 74 20 62 65  Dest->affSdst be
1e4f0 66 6f 72 65 20 73 74 6f 72 69 6e 67 0a 2a 2a 20  fore storing.** 
1e500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e510 20 20 20 20 72 65 73 75 6c 74 73 2e 20 20 55 73      results.  Us
1e520 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20  ed to implement 
1e530 22 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29  "IN (SELECT ...)
1e540 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  "..**.**     SRT
1e550 5f 45 70 68 65 6d 54 61 62 20 20 20 20 43 72 65  _EphemTab    Cre
1e560 61 74 65 20 61 6e 20 74 65 6d 70 6f 72 61 72 79  ate an temporary
1e570 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53   table pDest->iS
1e580 44 50 61 72 6d 20 61 6e 64 20 73 74 6f 72 65 0a  DParm and store.
1e590 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1e5a0 20 20 20 20 20 20 20 74 68 65 20 72 65 73 75 6c         the resul
1e5b0 74 20 74 68 65 72 65 2e 20 54 68 65 20 63 75 72  t there. The cur
1e5c0 73 6f 72 20 69 73 20 6c 65 66 74 20 6f 70 65 6e  sor is left open
1e5d0 20 61 66 74 65 72 0a 2a 2a 20 20 20 20 20 20 20   after.**       
1e5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1e5f0 74 75 72 6e 69 6e 67 2e 20 20 54 68 69 73 20 69  turning.  This i
1e600 73 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65  s like SRT_Table
1e610 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a 2a 20   except that.** 
1e620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e630 20 20 20 20 74 68 69 73 20 64 65 73 74 69 6e 61      this destina
1e640 74 69 6f 6e 20 75 73 65 73 20 4f 50 5f 4f 70 65  tion uses OP_Ope
1e650 6e 45 70 68 65 6d 65 72 61 6c 20 74 6f 20 63 72  nEphemeral to cr
1e660 65 61 74 65 0a 2a 2a 20 20 20 20 20 20 20 20 20  eate.**         
1e670 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
1e680 74 61 62 6c 65 20 66 69 72 73 74 2e 0a 2a 2a 0a  table first..**.
1e690 2a 2a 20 20 20 20 20 53 52 54 5f 43 6f 72 6f 75  **     SRT_Corou
1e6a0 74 69 6e 65 20 20 20 47 65 6e 65 72 61 74 65 20  tine   Generate 
1e6b0 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 74 68 61  a co-routine tha
1e6c0 74 20 72 65 74 75 72 6e 73 20 61 20 6e 65 77 20  t returns a new 
1e6d0 72 6f 77 20 6f 66 0a 2a 2a 20 20 20 20 20 20 20  row of.**       
1e6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1e6f0 73 75 6c 74 73 20 65 61 63 68 20 74 69 6d 65 20  sults each time 
1e700 69 74 20 69 73 20 69 6e 76 6f 6b 65 64 2e 20 20  it is invoked.  
1e710 54 68 65 20 65 6e 74 72 79 20 70 6f 69 6e 74 0a  The entry point.
1e720 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1e730 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f         of the co
1e740 2d 72 6f 75 74 69 6e 65 20 69 73 20 73 74 6f 72  -routine is stor
1e750 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 70  ed in register p
1e760 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 0a 2a 2a  Dest->iSDParm.**
1e770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e780 20 20 20 20 20 61 6e 64 20 74 68 65 20 72 65 73       and the res
1e790 75 6c 74 20 72 6f 77 20 69 73 20 73 74 6f 72 65  ult row is store
1e7a0 64 20 69 6e 20 70 44 65 73 74 2d 3e 6e 44 65 73  d in pDest->nDes
1e7b0 74 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 20  t registers.**  
1e7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e7d0 20 20 20 73 74 61 72 74 69 6e 67 20 77 69 74 68     starting with
1e7e0 20 70 44 65 73 74 2d 3e 69 53 64 73 74 2e 0a 2a   pDest->iSdst..*
1e7f0 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 54 61 62  *.**     SRT_Tab
1e800 6c 65 20 20 20 20 20 20 20 53 74 6f 72 65 20 72  le       Store r
1e810 65 73 75 6c 74 73 20 69 6e 20 74 65 6d 70 6f 72  esults in tempor
1e820 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d  ary table pDest-
1e830 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20  >iSDParm..**    
1e840 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20   SRT_Fifo       
1e850 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53 52   This is like SR
1e860 54 5f 45 70 68 65 6d 54 61 62 20 65 78 63 65 70  T_EphemTab excep
1e870 74 20 74 68 61 74 20 74 68 65 20 74 61 62 6c 65  t that the table
1e880 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1e890 20 20 20 20 20 20 20 20 69 73 20 61 73 73 75 6d          is assum
1e8a0 65 64 20 74 6f 20 61 6c 72 65 61 64 79 20 62 65  ed to already be
1e8b0 20 6f 70 65 6e 2e 20 20 53 52 54 5f 46 69 66 6f   open.  SRT_Fifo
1e8c0 20 68 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20   has.**         
1e8d0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
1e8e0 61 64 64 69 74 69 6f 6e 61 6c 20 70 72 6f 70 65  additional prope
1e8f0 72 74 79 20 6f 66 20 62 65 69 6e 67 20 61 62 6c  rty of being abl
1e900 65 20 74 6f 20 69 67 6e 6f 72 65 0a 2a 2a 20 20  e to ignore.**  
1e910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e920 20 20 20 74 68 65 20 4f 52 44 45 52 20 42 59 20     the ORDER BY 
1e930 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20  clause..**.**   
1e940 20 20 53 52 54 5f 44 69 73 74 46 69 66 6f 20 20    SRT_DistFifo  
1e950 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20    Store results 
1e960 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79 20 74  in a temporary t
1e970 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50  able pDest->iSDP
1e980 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20  arm..**         
1e990 20 20 20 20 20 20 20 20 20 20 20 20 42 75 74 20              But 
1e9a0 61 6c 73 6f 20 75 73 65 20 74 65 6d 70 6f 72 61  also use tempora
1e9b0 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e  ry table pDest->
1e9c0 69 53 44 50 61 72 6d 2b 31 20 61 73 0a 2a 2a 20  iSDParm+1 as.** 
1e9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e9e0 20 20 20 20 61 20 72 65 63 6f 72 64 20 6f 66 20      a record of 
1e9f0 61 6c 6c 20 70 72 69 6f 72 20 72 65 73 75 6c 74  all prior result
1ea00 73 20 61 6e 64 20 69 67 6e 6f 72 65 20 61 6e 79  s and ignore any
1ea10 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20 20 20   duplicate.**   
1ea20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea30 20 20 72 6f 77 73 2e 20 20 4e 61 6d 65 20 6d 65    rows.  Name me
1ea40 61 6e 73 3a 20 20 22 44 69 73 74 69 6e 63 74 20  ans:  "Distinct 
1ea50 46 69 66 6f 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  Fifo"..**.**    
1ea60 20 53 52 54 5f 51 75 65 75 65 20 20 20 20 20 20   SRT_Queue      
1ea70 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69   Store results i
1ea80 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65 75 65  n priority queue
1ea90 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20   pDest->iSDParm 
1eaa0 28 72 65 61 6c 6c 79 0a 2a 2a 20 20 20 20 20 20  (really.**      
1eab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
1eac0 6e 20 69 6e 64 65 78 29 2e 20 20 41 70 70 65 6e  n index).  Appen
1ead0 64 20 61 20 73 65 71 75 65 6e 63 65 20 6e 75 6d  d a sequence num
1eae0 62 65 72 20 73 6f 20 74 68 61 74 20 61 6c 6c 20  ber so that all 
1eaf0 65 6e 74 72 69 65 73 0a 2a 2a 20 20 20 20 20 20  entries.**      
1eb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
1eb10 72 65 20 64 69 73 74 69 6e 63 74 2e 0a 2a 2a 0a  re distinct..**.
1eb20 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 74 51  **     SRT_DistQ
1eb30 75 65 75 65 20 20 20 53 74 6f 72 65 20 72 65 73  ueue   Store res
1eb40 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69 74 79  ults in priority
1eb50 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e 69 53   queue pDest->iS
1eb60 44 50 61 72 6d 20 6f 6e 6c 79 20 69 66 0a 2a 2a  DParm only if.**
1eb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb80 20 20 20 20 20 74 68 65 20 73 61 6d 65 20 72 65       the same re
1eb90 63 6f 72 64 20 68 61 73 20 6e 65 76 65 72 20 62  cord has never b
1eba0 65 65 6e 20 73 74 6f 72 65 64 20 62 65 66 6f 72  een stored befor
1ebb0 65 2e 20 20 54 68 65 0a 2a 2a 20 20 20 20 20 20  e.  The.**      
1ebc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1ebd0 6e 64 65 78 20 61 74 20 70 44 65 73 74 2d 3e 69  ndex at pDest->i
1ebe0 53 44 50 61 72 6d 2b 31 20 68 6f 6c 64 20 61 6c  SDParm+1 hold al
1ebf0 6c 20 70 72 69 6f 72 20 73 74 6f 72 65 73 2e 0a  l prior stores..
1ec00 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 55  */.#define SRT_U
1ec10 6e 69 6f 6e 20 20 20 20 20 20 20 20 31 20 20 2f  nion        1  /
1ec20 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61  * Store result a
1ec30 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64  s keys in an ind
1ec40 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ex */.#define SR
1ec50 54 5f 45 78 63 65 70 74 20 20 20 20 20 20 20 32  T_Except       2
1ec60 20 20 2f 2a 20 52 65 6d 6f 76 65 20 72 65 73 75    /* Remove resu
1ec70 6c 74 20 66 72 6f 6d 20 61 20 55 4e 49 4f 4e 20  lt from a UNION 
1ec80 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65  index */.#define
1ec90 20 53 52 54 5f 45 78 69 73 74 73 20 20 20 20 20   SRT_Exists     
1eca0 20 20 33 20 20 2f 2a 20 53 74 6f 72 65 20 31 20    3  /* Store 1 
1ecb0 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  if the result is
1ecc0 20 6e 6f 74 20 65 6d 70 74 79 20 2a 2f 0a 23 64   not empty */.#d
1ecd0 65 66 69 6e 65 20 53 52 54 5f 44 69 73 63 61 72  efine SRT_Discar
1ece0 64 20 20 20 20 20 20 34 20 20 2f 2a 20 44 6f 20  d      4  /* Do 
1ecf0 6e 6f 74 20 73 61 76 65 20 74 68 65 20 72 65 73  not save the res
1ed00 75 6c 74 73 20 61 6e 79 77 68 65 72 65 20 2a 2f  ults anywhere */
1ed10 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 46 69 66  .#define SRT_Fif
1ed20 6f 20 20 20 20 20 20 20 20 20 35 20 20 2f 2a 20  o         5  /* 
1ed30 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20  Store result as 
1ed40 64 61 74 61 20 77 69 74 68 20 61 6e 20 61 75 74  data with an aut
1ed50 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a  omatic rowid */.
1ed60 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 74  #define SRT_Dist
1ed70 46 69 66 6f 20 20 20 20 20 36 20 20 2f 2a 20 4c  Fifo     6  /* L
1ed80 69 6b 65 20 53 52 54 5f 46 69 66 6f 2c 20 62 75  ike SRT_Fifo, bu
1ed90 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c 74 73  t unique results
1eda0 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65   only */.#define
1edb0 20 53 52 54 5f 51 75 65 75 65 20 20 20 20 20 20   SRT_Queue      
1edc0 20 20 37 20 20 2f 2a 20 53 74 6f 72 65 20 72 65    7  /* Store re
1edd0 73 75 6c 74 20 69 6e 20 61 6e 20 71 75 65 75 65  sult in an queue
1ede0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1edf0 44 69 73 74 51 75 65 75 65 20 20 20 20 38 20 20  DistQueue    8  
1ee00 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 51 75 65 75  /* Like SRT_Queu
1ee10 65 2c 20 62 75 74 20 75 6e 69 71 75 65 20 72 65  e, but unique re
1ee20 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f  sults only */../
1ee30 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59 20 63  * The ORDER BY c
1ee40 6c 61 75 73 65 20 69 73 20 69 67 6e 6f 72 65 64  lause is ignored
1ee50 20 66 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65 20   for all of the 
1ee60 61 62 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e 65  above */.#define
1ee70 20 49 67 6e 6f 72 61 62 6c 65 4f 72 64 65 72 62   IgnorableOrderb
1ee80 79 28 58 29 20 28 28 58 2d 3e 65 44 65 73 74 29  y(X) ((X->eDest)
1ee90 3c 3d 53 52 54 5f 44 69 73 74 51 75 65 75 65 29  <=SRT_DistQueue)
1eea0 0a 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4f 75  ..#define SRT_Ou
1eeb0 74 70 75 74 20 20 20 20 20 20 20 39 20 20 2f 2a  tput       9  /*
1eec0 20 4f 75 74 70 75 74 20 65 61 63 68 20 72 6f 77   Output each row
1eed0 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64   of result */.#d
1eee0 65 66 69 6e 65 20 53 52 54 5f 4d 65 6d 20 20 20  efine SRT_Mem   
1eef0 20 20 20 20 20 20 31 30 20 20 2f 2a 20 53 74 6f        10  /* Sto
1ef00 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61 20 6d  re result in a m
1ef10 65 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a 23 64  emory cell */.#d
1ef20 65 66 69 6e 65 20 53 52 54 5f 53 65 74 20 20 20  efine SRT_Set   
1ef30 20 20 20 20 20 20 31 31 20 20 2f 2a 20 53 74 6f        11  /* Sto
1ef40 72 65 20 72 65 73 75 6c 74 73 20 61 73 20 6b 65  re results as ke
1ef50 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a  ys in an index *
1ef60 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 70  /.#define SRT_Ep
1ef70 68 65 6d 54 61 62 20 20 20 20 31 32 20 20 2f 2a  hemTab    12  /*
1ef80 20 43 72 65 61 74 65 20 74 72 61 6e 73 69 65 6e   Create transien
1ef90 74 20 74 61 62 20 61 6e 64 20 73 74 6f 72 65 20  t tab and store 
1efa0 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 2a  like SRT_Table *
1efb0 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 43 6f  /.#define SRT_Co
1efc0 72 6f 75 74 69 6e 65 20 20 20 31 33 20 20 2f 2a  routine   13  /*
1efd0 20 47 65 6e 65 72 61 74 65 20 61 20 73 69 6e 67   Generate a sing
1efe0 6c 65 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74  le row of result
1eff0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1f000 54 61 62 6c 65 20 20 20 20 20 20 20 31 34 20 20  Table       14  
1f010 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
1f020 61 73 20 64 61 74 61 20 77 69 74 68 20 61 6e 20  as data with an 
1f030 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69 64 20  automatic rowid 
1f040 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  */../*.** An ins
1f050 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 62  tance of this ob
1f060 6a 65 63 74 20 64 65 73 63 72 69 62 65 73 20 77  ject describes w
1f070 68 65 72 65 20 74 6f 20 70 75 74 20 6f 66 20 74  here to put of t
1f080 68 65 20 72 65 73 75 6c 74 73 20 6f 66 0a 2a 2a  he results of.**
1f090 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   a SELECT statem
1f0a0 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  ent..*/.struct S
1f0b0 65 6c 65 63 74 44 65 73 74 20 7b 0a 20 20 75 38  electDest {.  u8
1f0c0 20 65 44 65 73 74 3b 20 20 20 20 20 20 20 20 20   eDest;         
1f0d0 20 20 20 2f 2a 20 48 6f 77 20 74 6f 20 64 69 73     /* How to dis
1f0e0 70 6f 73 65 20 6f 66 20 74 68 65 20 72 65 73 75  pose of the resu
1f0f0 6c 74 73 2e 20 20 4f 6e 20 6f 66 20 53 52 54 5f  lts.  On of SRT_
1f100 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a 20 20 69 6e  * above. */.  in
1f110 74 20 69 53 44 50 61 72 6d 3b 20 20 20 20 20 20  t iSDParm;      
1f120 20 20 20 2f 2a 20 41 20 70 61 72 61 6d 65 74 65     /* A paramete
1f130 72 20 75 73 65 64 20 62 79 20 74 68 65 20 65 44  r used by the eD
1f140 65 73 74 20 64 69 73 70 6f 73 61 6c 20 6d 65 74  est disposal met
1f150 68 6f 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 64  hod */.  int iSd
1f160 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  st;           /*
1f170 20 42 61 73 65 20 72 65 67 69 73 74 65 72 20 77   Base register w
1f180 68 65 72 65 20 72 65 73 75 6c 74 73 20 61 72 65  here results are
1f190 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e   written */.  in
1f1a0 74 20 6e 53 64 73 74 3b 20 20 20 20 20 20 20 20  t nSdst;        
1f1b0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1f1c0 72 65 67 69 73 74 65 72 73 20 61 6c 6c 6f 63 61  registers alloca
1f1d0 74 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ted */.  char *z
1f1e0 41 66 66 53 64 73 74 3b 20 20 20 20 20 20 2f 2a  AffSdst;      /*
1f1f0 20 41 66 66 69 6e 69 74 79 20 75 73 65 64 20 77   Affinity used w
1f200 68 65 6e 20 65 44 65 73 74 3d 3d 53 52 54 5f 53  hen eDest==SRT_S
1f210 65 74 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  et */.  ExprList
1f220 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 2f 2a 20   *pOrderBy;  /* 
1f230 4b 65 79 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20  Key columns for 
1f240 53 52 54 5f 51 75 65 75 65 20 61 6e 64 20 53 52  SRT_Queue and SR
1f250 54 5f 44 69 73 74 51 75 65 75 65 20 2a 2f 0a 7d  T_DistQueue */.}
1f260 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67 20  ;../*.** During 
1f270 63 6f 64 65 20 67 65 6e 65 72 61 74 69 6f 6e 20  code generation 
1f280 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68  of statements th
1f290 61 74 20 64 6f 20 69 6e 73 65 72 74 73 20 69 6e  at do inserts in
1f2a0 74 6f 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  to AUTOINCREMENT
1f2b0 0a 2a 2a 20 74 61 62 6c 65 73 2c 20 74 68 65 20  .** tables, the 
1f2c0 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f 72 6d  following inform
1f2d0 61 74 69 6f 6e 20 69 73 20 61 74 74 61 63 68 65  ation is attache
1f2e0 64 20 74 6f 20 74 68 65 20 54 61 62 6c 65 2e 75  d to the Table.u
1f2f0 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f  .autoInc.p.** po
1f300 69 6e 74 65 72 20 6f 66 20 65 61 63 68 20 61 75  inter of each au
1f310 74 6f 69 6e 63 72 65 6d 65 6e 74 20 74 61 62 6c  toincrement tabl
1f320 65 20 74 6f 20 72 65 63 6f 72 64 20 73 6f 6d 65  e to record some
1f330 20 73 69 64 65 20 69 6e 66 6f 72 6d 61 74 69 6f   side informatio
1f340 6e 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 63 6f  n that.** the co
1f350 64 65 20 67 65 6e 65 72 61 74 6f 72 20 6e 65 65  de generator nee
1f360 64 73 2e 20 20 57 65 20 68 61 76 65 20 74 6f 20  ds.  We have to 
1f370 6b 65 65 70 20 70 65 72 2d 74 61 62 6c 65 20 61  keep per-table a
1f380 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20  utoincrement.** 
1f390 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 63  information in c
1f3a0 61 73 65 20 69 6e 73 65 72 74 73 20 61 72 65 20  ase inserts are 
1f3b0 64 6f 6e 65 20 77 69 74 68 69 6e 20 74 72 69 67  done within trig
1f3c0 67 65 72 73 2e 20 20 54 72 69 67 67 65 72 73 20  gers.  Triggers 
1f3d0 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c  do not.** normal
1f3e0 6c 79 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68  ly coordinate th
1f3f0 65 69 72 20 61 63 74 69 76 69 74 69 65 73 2c 20  eir activities, 
1f400 62 75 74 20 77 65 20 64 6f 20 6e 65 65 64 20 74  but we do need t
1f410 6f 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65  o coordinate the
1f420 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20 61 6e 64 20  .** loading and 
1f430 73 61 76 69 6e 67 20 6f 66 20 61 75 74 6f 69 6e  saving of autoin
1f440 63 72 65 6d 65 6e 74 20 69 6e 66 6f 72 6d 61 74  crement informat
1f450 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41  ion..*/.struct A
1f460 75 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20 20 41  utoincInfo {.  A
1f470 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e 65 78  utoincInfo *pNex
1f480 74 3b 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 66  t;   /* Next inf
1f490 6f 20 62 6c 6f 63 6b 20 69 6e 20 61 20 6c 69 73  o block in a lis
1f4a0 74 20 6f 66 20 74 68 65 6d 20 61 6c 6c 20 2a 2f  t of them all */
1f4b0 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20  .  Table *pTab; 
1f4c0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c           /* Tabl
1f4d0 65 20 74 68 69 73 20 69 6e 66 6f 20 62 6c 6f 63  e this info bloc
1f4e0 6b 20 72 65 66 65 72 73 20 74 6f 20 2a 2f 0a 20  k refers to */. 
1f4f0 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20   int iDb;       
1f500 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
1f510 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d  in sqlite3.aDb[]
1f520 20 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c   of database hol
1f530 64 69 6e 67 20 70 54 61 62 20 2a 2f 0a 20 20 69  ding pTab */.  i
1f540 6e 74 20 72 65 67 43 74 72 3b 20 20 20 20 20 20  nt regCtr;      
1f550 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72       /* Memory r
1f560 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
1f570 74 68 65 20 72 6f 77 69 64 20 63 6f 75 6e 74 65  the rowid counte
1f580 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  r */.};../*.** A
1f590 74 20 6c 65 61 73 74 20 6f 6e 65 20 69 6e 73 74  t least one inst
1f5a0 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
1f5b0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
1f5c0 69 73 20 63 72 65 61 74 65 64 20 66 6f 72 20 65  is created for e
1f5d0 61 63 68 0a 2a 2a 20 74 72 69 67 67 65 72 20 74  ach.** trigger t
1f5e0 68 61 74 20 6d 61 79 20 62 65 20 66 69 72 65 64  hat may be fired
1f5f0 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 20 61   while parsing a
1f600 6e 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45  n INSERT, UPDATE
1f610 20 6f 72 20 44 45 4c 45 54 45 0a 2a 2a 20 73 74   or DELETE.** st
1f620 61 74 65 6d 65 6e 74 2e 20 41 6c 6c 20 73 75 63  atement. All suc
1f630 68 20 6f 62 6a 65 63 74 73 20 61 72 65 20 73 74  h objects are st
1f640 6f 72 65 64 20 69 6e 20 74 68 65 20 6c 69 6e 6b  ored in the link
1f650 65 64 20 6c 69 73 74 20 68 65 61 64 65 64 20 61  ed list headed a
1f660 74 0a 2a 2a 20 50 61 72 73 65 2e 70 54 72 69 67  t.** Parse.pTrig
1f670 67 65 72 50 72 67 20 61 6e 64 20 64 65 6c 65 74  gerPrg and delet
1f680 65 64 20 6f 6e 63 65 20 73 74 61 74 65 6d 65 6e  ed once statemen
1f690 74 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 68 61  t compilation ha
1f6a0 73 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65  s been.** comple
1f6b0 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62  ted..**.** A Vdb
1f6c0 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68  e sub-program th
1f6d0 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68  at implements th
1f6e0 65 20 62 6f 64 79 20 61 6e 64 20 57 48 45 4e 20  e body and WHEN 
1f6f0 63 6c 61 75 73 65 20 6f 66 20 74 72 69 67 67 65  clause of trigge
1f700 72 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e  r.** TriggerPrg.
1f710 70 54 72 69 67 67 65 72 2c 20 61 73 73 75 6d 69  pTrigger, assumi
1f720 6e 67 20 61 20 64 65 66 61 75 6c 74 20 4f 4e 20  ng a default ON 
1f730 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20  CONFLICT clause 
1f740 6f 66 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67  of.** TriggerPrg
1f750 2e 6f 72 63 6f 6e 66 2c 20 69 73 20 73 74 6f 72  .orconf, is stor
1f760 65 64 20 69 6e 20 74 68 65 20 54 72 69 67 67 65  ed in the Trigge
1f770 72 50 72 67 2e 70 50 72 6f 67 72 61 6d 20 76 61  rPrg.pProgram va
1f780 72 69 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 50  riable..** The P
1f790 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67  arse.pTriggerPrg
1f7a0 20 6c 69 73 74 20 6e 65 76 65 72 20 63 6f 6e 74   list never cont
1f7b0 61 69 6e 73 20 74 77 6f 20 65 6e 74 72 69 65 73  ains two entries
1f7c0 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 0a 2a   with the same.*
1f7d0 2a 20 76 61 6c 75 65 73 20 66 6f 72 20 62 6f 74  * values for bot
1f7e0 68 20 70 54 72 69 67 67 65 72 20 61 6e 64 20 6f  h pTrigger and o
1f7f0 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  rconf..**.** The
1f800 20 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c   TriggerPrg.aCol
1f810 6d 61 73 6b 5b 30 5d 20 76 61 72 69 61 62 6c 65  mask[0] variable
1f820 20 69 73 20 73 65 74 20 74 6f 20 61 20 6d 61 73   is set to a mas
1f830 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d  k of old.* colum
1f840 6e 73 0a 2a 2a 20 61 63 63 65 73 73 65 64 20 28  ns.** accessed (
1f850 6f 72 20 73 65 74 20 74 6f 20 30 20 66 6f 72 20  or set to 0 for 
1f860 74 72 69 67 67 65 72 73 20 66 69 72 65 64 20 61  triggers fired a
1f870 73 20 61 20 72 65 73 75 6c 74 20 6f 66 20 49 4e  s a result of IN
1f880 53 45 52 54 0a 2a 2a 20 73 74 61 74 65 6d 65 6e  SERT.** statemen
1f890 74 73 29 2e 20 53 69 6d 69 6c 61 72 6c 79 2c 20  ts). Similarly, 
1f8a0 74 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 61  the TriggerPrg.a
1f8b0 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61 72 69 61  Colmask[1] varia
1f8c0 62 6c 65 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a  ble is set to.**
1f8d0 20 61 20 6d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a   a mask of new.*
1f8e0 20 63 6f 6c 75 6d 6e 73 20 75 73 65 64 20 62 79   columns used by
1f8f0 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f   the program..*/
1f900 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72 50  .struct TriggerP
1f910 72 67 20 7b 0a 20 20 54 72 69 67 67 65 72 20 2a  rg {.  Trigger *
1f920 70 54 72 69 67 67 65 72 3b 20 20 20 20 20 20 2f  pTrigger;      /
1f930 2a 20 54 72 69 67 67 65 72 20 74 68 69 73 20 70  * Trigger this p
1f940 72 6f 67 72 61 6d 20 77 61 73 20 63 6f 64 65 64  rogram was coded
1f950 20 66 72 6f 6d 20 2a 2f 0a 20 20 54 72 69 67 67   from */.  Trigg
1f960 65 72 50 72 67 20 2a 70 4e 65 78 74 3b 20 20 20  erPrg *pNext;   
1f970 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79     /* Next entry
1f980 20 69 6e 20 50 61 72 73 65 2e 70 54 72 69 67 67   in Parse.pTrigg
1f990 65 72 50 72 67 20 6c 69 73 74 20 2a 2f 0a 20 20  erPrg list */.  
1f9a0 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f  SubProgram *pPro
1f9b0 67 72 61 6d 3b 20 20 20 2f 2a 20 50 72 6f 67 72  gram;   /* Progr
1f9c0 61 6d 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20  am implementing 
1f9d0 70 54 72 69 67 67 65 72 2f 6f 72 63 6f 6e 66 20  pTrigger/orconf 
1f9e0 2a 2f 0a 20 20 69 6e 74 20 6f 72 63 6f 6e 66 3b  */.  int orconf;
1f9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1fa00 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c  Default ON CONFL
1fa10 49 43 54 20 70 6f 6c 69 63 79 20 2a 2f 0a 20 20  ICT policy */.  
1fa20 75 33 32 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d 3b  u32 aColmask[2];
1fa30 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 73          /* Masks
1fa40 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e 2a   of old.*, new.*
1fa50 20 63 6f 6c 75 6d 6e 73 20 61 63 63 65 73 73 65   columns accesse
1fa60 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  d */.};../*.** T
1fa70 68 65 20 79 44 62 4d 61 73 6b 20 64 61 74 61 74  he yDbMask datat
1fa80 79 70 65 20 66 6f 72 20 74 68 65 20 62 69 74 6d  ype for the bitm
1fa90 61 73 6b 20 6f 66 20 61 6c 6c 20 61 74 74 61 63  ask of all attac
1faa0 68 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a  hed databases..*
1fab0 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  /.#if SQLITE_MAX
1fac0 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20 74  _ATTACHED>30.  t
1fad0 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20  ypedef unsigned 
1fae0 63 68 61 72 20 79 44 62 4d 61 73 6b 5b 28 53 51  char yDbMask[(SQ
1faf0 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45  LITE_MAX_ATTACHE
1fb00 44 2b 39 29 2f 38 5d 3b 0a 23 20 64 65 66 69 6e  D+9)/8];.# defin
1fb10 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49  e DbMaskTest(M,I
1fb20 29 20 20 20 20 28 28 28 4d 29 5b 28 49 29 2f 38  )    (((M)[(I)/8
1fb30 5d 26 28 31 3c 3c 28 28 49 29 26 37 29 29 29 21  ]&(1<<((I)&7)))!
1fb40 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  =0).# define DbM
1fb50 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20 20  askZero(M)      
1fb60 6d 65 6d 73 65 74 28 28 4d 29 2c 30 2c 73 69 7a  memset((M),0,siz
1fb70 65 6f 66 28 4d 29 29 0a 23 20 64 65 66 69 6e 65  eof(M)).# define
1fb80 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20   DbMaskSet(M,I) 
1fb90 20 20 20 20 28 4d 29 5b 28 49 29 2f 38 5d 7c 3d      (M)[(I)/8]|=
1fba0 28 31 3c 3c 28 28 49 29 26 37 29 29 0a 23 20 64  (1<<((I)&7)).# d
1fbb0 65 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a  efine DbMaskAllZ
1fbc0 65 72 6f 28 4d 29 20 20 20 73 71 6c 69 74 65 33  ero(M)   sqlite3
1fbd0 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29  DbMaskAllZero(M)
1fbe0 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1fbf0 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 73 71  NonZero(M)   (sq
1fc00 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65  lite3DbMaskAllZe
1fc10 72 6f 28 4d 29 3d 3d 30 29 0a 23 65 6c 73 65 0a  ro(M)==0).#else.
1fc20 20 20 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e    typedef unsign
1fc30 65 64 20 69 6e 74 20 79 44 62 4d 61 73 6b 3b 0a  ed int yDbMask;.
1fc40 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 54  # define DbMaskT
1fc50 65 73 74 28 4d 2c 49 29 20 20 20 20 28 28 28 4d  est(M,I)    (((M
1fc60 29 26 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c  )&(((yDbMask)1)<
1fc70 3c 28 49 29 29 29 21 3d 30 29 0a 23 20 64 65 66  <(I)))!=0).# def
1fc80 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d  ine DbMaskZero(M
1fc90 29 20 20 20 20 20 20 28 4d 29 3d 30 0a 23 20 64  )      (M)=0.# d
1fca0 65 66 69 6e 65 20 44 62 4d 61 73 6b 53 65 74 28  efine DbMaskSet(
1fcb0 4d 2c 49 29 20 20 20 20 20 28 4d 29 7c 3d 28 28  M,I)     (M)|=((
1fcc0 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29  (yDbMask)1)<<(I)
1fcd0 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ).# define DbMas
1fce0 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 28 4d  kAllZero(M)   (M
1fcf0 29 3d 3d 30 0a 23 20 64 65 66 69 6e 65 20 44 62  )==0.# define Db
1fd00 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20  MaskNonZero(M)  
1fd10 20 28 4d 29 21 3d 30 0a 23 65 6e 64 69 66 0a 0a   (M)!=0.#endif..
1fd20 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20 70 61 72  /*.** An SQL par
1fd30 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 41 20  ser context.  A 
1fd40 63 6f 70 79 20 6f 66 20 74 68 69 73 20 73 74 72  copy of this str
1fd50 75 63 74 75 72 65 20 69 73 20 70 61 73 73 65 64  ucture is passed
1fd60 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 68 65 20   through.** the 
1fd70 70 61 72 73 65 72 20 61 6e 64 20 64 6f 77 6e 20  parser and down 
1fd80 69 6e 74 6f 20 61 6c 6c 20 74 68 65 20 70 61 72  into all the par
1fd90 73 65 72 20 61 63 74 69 6f 6e 20 72 6f 75 74 69  ser action routi
1fda0 6e 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a  ne in order to.*
1fdb0 2a 20 63 61 72 72 79 20 61 72 6f 75 6e 64 20 69  * carry around i
1fdc0 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20  nformation that 
1fdd0 69 73 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68 65  is global to the
1fde0 20 65 6e 74 69 72 65 20 70 61 72 73 65 2e 0a 2a   entire parse..*
1fdf0 2a 0a 2a 2a 20 54 68 65 20 73 74 72 75 63 74 75  *.** The structu
1fe00 72 65 20 69 73 20 64 69 76 69 64 65 64 20 69 6e  re is divided in
1fe10 74 6f 20 74 77 6f 20 70 61 72 74 73 2e 20 20 57  to two parts.  W
1fe20 68 65 6e 20 74 68 65 20 70 61 72 73 65 72 20 61  hen the parser a
1fe30 6e 64 20 63 6f 64 65 0a 2a 2a 20 67 65 6e 65 72  nd code.** gener
1fe40 61 74 65 20 63 61 6c 6c 20 74 68 65 6d 73 65 6c  ate call themsel
1fe50 76 65 73 20 72 65 63 75 72 73 69 76 65 6c 79 2c  ves recursively,
1fe60 20 74 68 65 20 66 69 72 73 74 20 70 61 72 74 20   the first part 
1fe70 6f 66 20 74 68 65 20 73 74 72 75 63 74 75 72 65  of the structure
1fe80 0a 2a 2a 20 69 73 20 63 6f 6e 73 74 61 6e 74 20  .** is constant 
1fe90 62 75 74 20 74 68 65 20 73 65 63 6f 6e 64 20 70  but the second p
1fea0 61 72 74 20 69 73 20 72 65 73 65 74 20 61 74 20  art is reset at 
1feb0 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 61 6e  the beginning an
1fec0 64 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 61 63 68  d end of.** each
1fed0 20 72 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a   recursion..**.*
1fee0 2a 20 54 68 65 20 6e 54 61 62 6c 65 4c 6f 63 6b  * The nTableLock
1fef0 20 61 6e 64 20 61 54 61 62 6c 65 4c 6f 63 6b 20   and aTableLock 
1ff00 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 6f 6e  variables are on
1ff10 6c 79 20 75 73 65 64 20 69 66 20 74 68 65 20 73  ly used if the s
1ff20 68 61 72 65 64 2d 63 61 63 68 65 0a 2a 2a 20 66  hared-cache.** f
1ff30 65 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65  eature is enable
1ff40 64 20 28 69 66 20 73 71 6c 69 74 65 33 54 73 64  d (if sqlite3Tsd
1ff50 28 29 2d 3e 75 73 65 53 68 61 72 65 64 44 61 74  ()->useSharedDat
1ff60 61 20 69 73 20 74 72 75 65 29 2e 20 54 68 65 79  a is true). They
1ff70 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20   are.** used to 
1ff80 73 74 6f 72 65 20 74 68 65 20 73 65 74 20 6f 66  store the set of
1ff90 20 74 61 62 6c 65 2d 6c 6f 63 6b 73 20 72 65 71   table-locks req
1ffa0 75 69 72 65 64 20 62 79 20 74 68 65 20 73 74 61  uired by the sta
1ffb0 74 65 6d 65 6e 74 20 62 65 69 6e 67 0a 2a 2a 20  tement being.** 
1ffc0 63 6f 6d 70 69 6c 65 64 2e 20 46 75 6e 63 74 69  compiled. Functi
1ffd0 6f 6e 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c  on sqlite3TableL
1ffe0 6f 63 6b 28 29 20 69 73 20 75 73 65 64 20 74 6f  ock() is used to
1fff0 20 61 64 64 20 65 6e 74 72 69 65 73 20 74 6f 20   add entries to 
20000 74 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a  the.** list..*/.
20010 73 74 72 75 63 74 20 50 61 72 73 65 20 7b 0a 20  struct Parse {. 
20020 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
20030 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6d 61 69        /* The mai
20040 6e 20 64 61 74 61 62 61 73 65 20 73 74 72 75 63  n database struc
20050 74 75 72 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ture */.  char *
20060 7a 45 72 72 4d 73 67 3b 20 20 20 20 20 20 20 2f  zErrMsg;       /
20070 2a 20 41 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  * An error messa
20080 67 65 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 56  ge */.  Vdbe *pV
20090 64 62 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  dbe;         /* 
200a0 41 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20 65 78  An engine for ex
200b0 65 63 75 74 69 6e 67 20 64 61 74 61 62 61 73 65  ecuting database
200c0 20 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20 20 69   bytecode */.  i
200d0 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20 20 20  nt rc;          
200e0 20 20 20 20 2f 2a 20 52 65 74 75 72 6e 20 63 6f      /* Return co
200f0 64 65 20 66 72 6f 6d 20 65 78 65 63 75 74 69 6f  de from executio
20100 6e 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e 61 6d  n */.  u8 colNam
20110 65 73 53 65 74 3b 20 20 20 20 20 20 2f 2a 20 54  esSet;      /* T
20120 52 55 45 20 61 66 74 65 72 20 4f 50 5f 43 6f 6c  RUE after OP_Col
20130 75 6d 6e 4e 61 6d 65 20 68 61 73 20 62 65 65 6e  umnName has been
20140 20 69 73 73 75 65 64 20 74 6f 20 70 56 64 62 65   issued to pVdbe
20150 20 2a 2f 0a 20 20 75 38 20 63 68 65 63 6b 53 63   */.  u8 checkSc
20160 68 65 6d 61 3b 20 20 20 20 20 20 2f 2a 20 43 61  hema;      /* Ca
20170 75 73 65 73 20 73 63 68 65 6d 61 20 63 6f 6f 6b  uses schema cook
20180 69 65 20 63 68 65 63 6b 20 61 66 74 65 72 20 61  ie check after a
20190 6e 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75 38 20  n error */.  u8 
201a0 6e 65 73 74 65 64 3b 20 20 20 20 20 20 20 20 20  nested;         
201b0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
201c0 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 74  ested calls to t
201d0 68 65 20 70 61 72 73 65 72 2f 63 6f 64 65 20 67  he parser/code g
201e0 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20 75 38  enerator */.  u8
201f0 20 6e 54 65 6d 70 52 65 67 3b 20 20 20 20 20 20   nTempReg;      
20200 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
20210 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74  temporary regist
20220 65 72 73 20 69 6e 20 61 54 65 6d 70 52 65 67 5b  ers in aTempReg[
20230 5d 20 2a 2f 0a 20 20 75 38 20 69 73 4d 75 6c 74  ] */.  u8 isMult
20240 69 57 72 69 74 65 3b 20 20 20 20 20 2f 2a 20 54  iWrite;     /* T
20250 72 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74  rue if statement
20260 20 6d 61 79 20 6d 6f 64 69 66 79 2f 69 6e 73 65   may modify/inse
20270 72 74 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73  rt multiple rows
20280 20 2a 2f 0a 20 20 75 38 20 6d 61 79 41 62 6f 72   */.  u8 mayAbor
20290 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72  t;         /* Tr
202a0 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20  ue if statement 
202b0 6d 61 79 20 74 68 72 6f 77 20 61 6e 20 41 42 4f  may throw an ABO
202c0 52 54 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a  RT exception */.
202d0 20 20 75 38 20 68 61 73 43 6f 6d 70 6f 75 6e 64    u8 hasCompound
202e0 3b 20 20 20 20 20 20 2f 2a 20 4e 65 65 64 20 74  ;      /* Need t
202f0 6f 20 69 6e 76 6f 6b 65 20 63 6f 6e 76 65 72 74  o invoke convert
20300 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f  CompoundSelectTo
20310 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 20 20  Subquery() */.  
20320 75 38 20 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72  u8 okConstFactor
20330 3b 20 20 20 20 2f 2a 20 4f 4b 20 74 6f 20 66 61  ;    /* OK to fa
20340 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e  ctor out constan
20350 74 73 20 2a 2f 0a 20 20 75 38 20 64 69 73 61 62  ts */.  u8 disab
20360 6c 65 4c 6f 6f 6b 61 73 69 64 65 3b 20 2f 2a 20  leLookaside; /* 
20370 4e 75 6d 62 65 72 20 6f 66 20 74 69 6d 65 73 20  Number of times 
20380 6c 6f 6f 6b 61 73 69 64 65 20 68 61 73 20 62 65  lookaside has be
20390 65 6e 20 64 69 73 61 62 6c 65 64 20 2a 2f 0a 20  en disabled */. 
203a0 20 69 6e 74 20 6e 52 61 6e 67 65 52 65 67 3b 20   int nRangeReg; 
203b0 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
203c0 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 72   the temporary r
203d0 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f  egister block */
203e0 0a 20 20 69 6e 74 20 69 52 61 6e 67 65 52 65 67  .  int iRangeReg
203f0 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74  ;       /* First
20400 20 72 65 67 69 73 74 65 72 20 69 6e 20 74 65 6d   register in tem
20410 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 20  porary register 
20420 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e  block */.  int n
20430 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Err;            
20440 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72  /* Number of err
20450 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e  ors seen */.  in
20460 74 20 6e 54 61 62 3b 20 20 20 20 20 20 20 20 20  t nTab;         
20470 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
20480 70 72 65 76 69 6f 75 73 6c 79 20 61 6c 6c 6f 63  previously alloc
20490 61 74 65 64 20 56 44 42 45 20 63 75 72 73 6f 72  ated VDBE cursor
204a0 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b  s */.  int nMem;
204b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
204c0 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20  umber of memory 
204d0 63 65 6c 6c 73 20 75 73 65 64 20 73 6f 20 66 61  cells used so fa
204e0 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 70 41 6c  r */.  int nOpAl
204f0 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  loc;        /* N
20500 75 6d 62 65 72 20 6f 66 20 73 6c 6f 74 73 20 61  umber of slots a
20510 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 56 64 62  llocated for Vdb
20520 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74  e.aOp[] */.  int
20530 20 73 7a 4f 70 41 6c 6c 6f 63 3b 20 20 20 20 20   szOpAlloc;     
20540 20 20 2f 2a 20 42 79 74 65 73 20 6f 66 20 6d 65    /* Bytes of me
20550 6d 6f 72 79 20 73 70 61 63 65 20 61 6c 6c 6f 63  mory space alloc
20560 61 74 65 64 20 66 6f 72 20 56 64 62 65 2e 61 4f  ated for Vdbe.aO
20570 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65  p[] */.  int iSe
20580 6c 66 54 61 62 3b 20 20 20 20 20 20 20 20 2f 2a  lfTab;        /*
20590 20 54 61 62 6c 65 20 61 73 73 6f 63 69 61 74 65   Table associate
205a0 64 20 77 69 74 68 20 61 6e 20 69 6e 64 65 78 20  d with an index 
205b0 6f 6e 20 65 78 70 72 2c 20 6f 72 20 6e 65 67 61  on expr, or nega
205c0 74 69 76 65 0a 20 20 20 20 20 20 20 20 20 20 20  tive.           
205d0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 6f              ** o
205e0 66 20 74 68 65 20 62 61 73 65 20 72 65 67 69 73  f the base regis
205f0 74 65 72 20 64 75 72 69 6e 67 20 63 68 65 63 6b  ter during check
20600 2d 63 6f 6e 73 74 72 61 69 6e 74 20 65 76 61 6c  -constraint eval
20610 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61 62 65 6c   */.  int nLabel
20620 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  ;          /* Nu
20630 6d 62 65 72 20 6f 66 20 6c 61 62 65 6c 73 20 75  mber of labels u
20640 73 65 64 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 4c  sed */.  int *aL
20650 61 62 65 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a  abel;         /*
20660 20 53 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 74   Space to hold t
20670 68 65 20 6c 61 62 65 6c 73 20 2a 2f 0a 20 20 45  he labels */.  E
20680 78 70 72 4c 69 73 74 20 2a 70 43 6f 6e 73 74 45  xprList *pConstE
20690 78 70 72 3b 2f 2a 20 43 6f 6e 73 74 61 6e 74 20  xpr;/* Constant 
206a0 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20  expressions */. 
206b0 20 54 6f 6b 65 6e 20 63 6f 6e 73 74 72 61 69 6e   Token constrain
206c0 74 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f 66  tName;/* Name of
206d0 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20   the constraint 
206e0 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20  currently being 
206f0 70 61 72 73 65 64 20 2a 2f 0a 20 20 79 44 62 4d  parsed */.  yDbM
20700 61 73 6b 20 77 72 69 74 65 4d 61 73 6b 3b 20 20  ask writeMask;  
20710 20 2f 2a 20 53 74 61 72 74 20 61 20 77 72 69 74   /* Start a writ
20720 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e  e transaction on
20730 20 74 68 65 73 65 20 64 61 74 61 62 61 73 65 73   these databases
20740 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 63 6f   */.  yDbMask co
20750 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a 20 42 69  okieMask;  /* Bi
20760 74 6d 61 73 6b 20 6f 66 20 73 63 68 65 6d 61 20  tmask of schema 
20770 76 65 72 69 66 69 65 64 20 64 61 74 61 62 61 73  verified databas
20780 65 73 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52  es */.  int regR
20790 6f 77 69 64 3b 20 20 20 20 20 20 20 20 2f 2a 20  owid;        /* 
207a0 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  Register holding
207b0 20 72 6f 77 69 64 20 6f 66 20 43 52 45 41 54 45   rowid of CREATE
207c0 20 54 41 42 4c 45 20 65 6e 74 72 79 20 2a 2f 0a   TABLE entry */.
207d0 20 20 69 6e 74 20 72 65 67 52 6f 6f 74 3b 20 20    int regRoot;  
207e0 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
207f0 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 6f 74 20  er holding root 
20800 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20  page number for 
20810 6e 65 77 20 6f 62 6a 65 63 74 73 20 2a 2f 0a 20  new objects */. 
20820 20 69 6e 74 20 6e 4d 61 78 41 72 67 3b 20 20 20   int nMaxArg;   
20830 20 20 20 20 20 20 2f 2a 20 4d 61 78 20 61 72 67        /* Max arg
20840 73 20 70 61 73 73 65 64 20 74 6f 20 75 73 65 72  s passed to user
20850 20 66 75 6e 63 74 69 6f 6e 20 62 79 20 73 75 62   function by sub
20860 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 69 6e  -program */.  in
20870 74 20 6e 53 65 6c 65 63 74 3b 20 20 20 20 20 20  t nSelect;      
20880 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
20890 53 45 4c 45 43 54 20 73 74 6d 74 73 2e 20 43 6f  SELECT stmts. Co
208a0 75 6e 74 65 72 20 66 6f 72 20 53 65 6c 65 63 74  unter for Select
208b0 2e 73 65 6c 49 64 20 2a 2f 0a 23 69 66 6e 64 65  .selId */.#ifnde
208c0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  f SQLITE_OMIT_SH
208d0 41 52 45 44 5f 43 41 43 48 45 0a 20 20 69 6e 74  ARED_CACHE.  int
208e0 20 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20 20 20 20   nTableLock;    
208f0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
20900 20 6c 6f 63 6b 73 20 69 6e 20 61 54 61 62 6c 65   locks in aTable
20910 4c 6f 63 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 4c  Lock */.  TableL
20920 6f 63 6b 20 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b  ock *aTableLock;
20930 20 2f 2a 20 52 65 71 75 69 72 65 64 20 74 61 62   /* Required tab
20940 6c 65 20 6c 6f 63 6b 73 20 66 6f 72 20 73 68 61  le locks for sha
20950 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a  red-cache mode *
20960 2f 0a 23 65 6e 64 69 66 0a 20 20 41 75 74 6f 69  /.#endif.  Autoi
20970 6e 63 49 6e 66 6f 20 2a 70 41 69 6e 63 3b 20 20  ncInfo *pAinc;  
20980 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  /* Information a
20990 62 6f 75 74 20 41 55 54 4f 49 4e 43 52 45 4d 45  bout AUTOINCREME
209a0 4e 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20  NT counters */. 
209b0 20 50 61 72 73 65 20 2a 70 54 6f 70 6c 65 76 65   Parse *pTopleve
209c0 6c 3b 20 20 20 20 2f 2a 20 50 61 72 73 65 20 73  l;    /* Parse s
209d0 74 72 75 63 74 75 72 65 20 66 6f 72 20 6d 61 69  tructure for mai
209e0 6e 20 70 72 6f 67 72 61 6d 20 28 6f 72 20 4e 55  n program (or NU
209f0 4c 4c 29 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  LL) */.  Table *
20a00 70 54 72 69 67 67 65 72 54 61 62 3b 20 20 2f 2a  pTriggerTab;  /*
20a10 20 54 61 62 6c 65 20 74 72 69 67 67 65 72 73 20   Table triggers 
20a20 61 72 65 20 62 65 69 6e 67 20 63 6f 64 65 64 20  are being coded 
20a30 66 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64  for */.  int add
20a40 72 43 72 54 61 62 3b 20 20 20 20 20 20 20 2f 2a  rCrTab;       /*
20a50 20 41 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 43   Address of OP_C
20a60 72 65 61 74 65 42 74 72 65 65 20 6f 70 63 6f 64  reateBtree opcod
20a70 65 20 6f 6e 20 43 52 45 41 54 45 20 54 41 42 4c  e on CREATE TABL
20a80 45 20 2a 2f 0a 20 20 75 33 32 20 6e 51 75 65 72  E */.  u32 nQuer
20a90 79 4c 6f 6f 70 3b 20 20 20 20 20 20 2f 2a 20 45  yLoop;      /* E
20aa0 73 74 20 6e 75 6d 62 65 72 20 6f 66 20 69 74 65  st number of ite
20ab0 72 61 74 69 6f 6e 73 20 6f 66 20 61 20 71 75 65  rations of a que
20ac0 72 79 20 28 31 30 2a 6c 6f 67 32 28 4e 29 29 20  ry (10*log2(N)) 
20ad0 2a 2f 0a 20 20 75 33 32 20 6f 6c 64 6d 61 73 6b  */.  u32 oldmask
20ae0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73  ;         /* Mas
20af0 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d  k of old.* colum
20b00 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f  ns referenced */
20b10 0a 20 20 75 33 32 20 6e 65 77 6d 61 73 6b 3b 20  .  u32 newmask; 
20b20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20          /* Mask 
20b30 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73  of new.* columns
20b40 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20   referenced */. 
20b50 20 75 38 20 65 54 72 69 67 67 65 72 4f 70 3b 20   u8 eTriggerOp; 
20b60 20 20 20 20 20 20 2f 2a 20 54 4b 5f 55 50 44 41        /* TK_UPDA
20b70 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 6f 72  TE, TK_INSERT or
20b80 20 54 4b 5f 44 45 4c 45 54 45 20 2a 2f 0a 20 20   TK_DELETE */.  
20b90 75 38 20 65 4f 72 63 6f 6e 66 3b 20 20 20 20 20  u8 eOrconf;     
20ba0 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
20bb0 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69  ON CONFLICT poli
20bc0 63 79 20 66 6f 72 20 74 72 69 67 67 65 72 20 73  cy for trigger s
20bd0 74 65 70 73 20 2a 2f 0a 20 20 75 38 20 64 69 73  teps */.  u8 dis
20be0 61 62 6c 65 54 72 69 67 67 65 72 73 3b 20 20 2f  ableTriggers;  /
20bf0 2a 20 54 72 75 65 20 74 6f 20 64 69 73 61 62 6c  * True to disabl
20c00 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 0a 20  e triggers */.. 
20c10 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   /**************
20c20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20c30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20c40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20c50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a  ************.  *
20c60 2a 20 46 69 65 6c 64 73 20 61 62 6f 76 65 20 6d  * Fields above m
20c70 75 73 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a  ust be initializ
20c80 65 64 20 74 6f 20 7a 65 72 6f 2e 20 20 54 68 65  ed to zero.  The
20c90 20 66 69 65 6c 64 73 20 74 68 61 74 20 66 6f 6c   fields that fol
20ca0 6c 6f 77 2c 0a 20 20 2a 2a 20 64 6f 77 6e 20 74  low,.  ** down t
20cb0 6f 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  o the beginning 
20cc0 6f 66 20 74 68 65 20 72 65 63 75 72 73 69 76 65  of the recursive
20cd0 20 73 65 63 74 69 6f 6e 2c 20 64 6f 20 6e 6f 74   section, do not
20ce0 20 6e 65 65 64 20 74 6f 20 62 65 0a 20 20 2a 2a   need to be.  **
20cf0 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 61 73 20   initialized as 
20d00 74 68 65 79 20 77 69 6c 6c 20 62 65 20 73 65 74  they will be set
20d10 20 62 65 66 6f 72 65 20 62 65 69 6e 67 20 75 73   before being us
20d20 65 64 2e 20 20 54 68 65 20 62 6f 75 6e 64 61 72  ed.  The boundar
20d30 79 20 69 73 0a 20 20 2a 2a 20 64 65 74 65 72 6d  y is.  ** determ
20d40 69 6e 65 64 20 62 79 20 6f 66 66 73 65 74 6f 66  ined by offsetof
20d50 28 50 61 72 73 65 2c 61 54 65 6d 70 52 65 67 29  (Parse,aTempReg)
20d60 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..  ************
20d70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20d80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20d90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20da0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
20db0 0a 20 20 69 6e 74 20 61 54 65 6d 70 52 65 67 5b  .  int aTempReg[
20dc0 38 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 48 6f  8];        /* Ho
20dd0 6c 64 69 6e 67 20 61 72 65 61 20 66 6f 72 20 74  lding area for t
20de0 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65  emporary registe
20df0 72 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e  rs */.  Token sN
20e00 61 6d 65 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20  ameToken;       
20e10 2f 2a 20 54 6f 6b 65 6e 20 77 69 74 68 20 75 6e  /* Token with un
20e20 71 75 61 6c 69 66 69 65 64 20 73 63 68 65 6d 61  qualified schema
20e30 20 6f 62 6a 65 63 74 20 6e 61 6d 65 20 2a 2f 0a   object name */.
20e40 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .  /************
20e50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20e60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20e70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20e80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a  ************.  *
20e90 2a 20 41 62 6f 76 65 20 69 73 20 63 6f 6e 73 74  * Above is const
20ea0 61 6e 74 20 62 65 74 77 65 65 6e 20 72 65 63 75  ant between recu
20eb0 72 73 69 6f 6e 73 2e 20 20 42 65 6c 6f 77 20 69  rsions.  Below i
20ec0 73 20 72 65 73 65 74 20 62 65 66 6f 72 65 20 61  s reset before a
20ed0 6e 64 20 61 66 74 65 72 0a 20 20 2a 2a 20 65 61  nd after.  ** ea
20ee0 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 20 20 54  ch recursion.  T
20ef0 68 65 20 62 6f 75 6e 64 61 72 79 20 62 65 74 77  he boundary betw
20f00 65 65 6e 20 74 68 65 73 65 20 74 77 6f 20 72 65  een these two re
20f10 67 69 6f 6e 73 20 69 73 20 64 65 74 65 72 6d 69  gions is determi
20f20 6e 65 64 0a 20 20 2a 2a 20 75 73 69 6e 67 20 6f  ned.  ** using o
20f30 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c 73 4c  ffsetof(Parse,sL
20f40 61 73 74 54 6f 6b 65 6e 29 20 73 6f 20 74 68 65  astToken) so the
20f50 20 73 4c 61 73 74 54 6f 6b 65 6e 20 66 69 65 6c   sLastToken fiel
20f60 64 20 6d 75 73 74 20 62 65 20 74 68 65 0a 20 20  d must be the.  
20f70 2a 2a 20 66 69 72 73 74 20 66 69 65 6c 64 20 69  ** first field i
20f80 6e 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20  n the recursive 
20f90 72 65 67 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a  region..  ******
20fa0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20fb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20fc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20fd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20fe0 2a 2a 2f 0a 0a 20 20 54 6f 6b 65 6e 20 73 4c 61  **/..  Token sLa
20ff0 73 74 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 2f  stToken;       /
21000 2a 20 54 68 65 20 6c 61 73 74 20 74 6f 6b 65 6e  * The last token
21010 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 79 6e 56   parsed */.  ynV
21020 61 72 20 6e 56 61 72 3b 20 20 20 20 20 20 20 20  ar nVar;        
21030 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
21040 20 6f 66 20 27 3f 27 20 76 61 72 69 61 62 6c 65   of '?' variable
21050 73 20 73 65 65 6e 20 69 6e 20 74 68 65 20 53 51  s seen in the SQ
21060 4c 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75 38  L so far */.  u8
21070 20 69 50 6b 53 6f 72 74 4f 72 64 65 72 3b 20 20   iPkSortOrder;  
21080 20 20 20 20 20 20 20 20 2f 2a 20 41 53 43 20 6f          /* ASC o
21090 72 20 44 45 53 43 20 66 6f 72 20 49 4e 54 45 47  r DESC for INTEG
210a0 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a  ER PRIMARY KEY *
210b0 2f 0a 20 20 75 38 20 65 78 70 6c 61 69 6e 3b 20  /.  u8 explain; 
210c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
210d0 20 54 72 75 65 20 69 66 20 74 68 65 20 45 58 50   True if the EXP
210e0 4c 41 49 4e 20 66 6c 61 67 20 69 73 20 66 6f 75  LAIN flag is fou
210f0 6e 64 20 6f 6e 20 74 68 65 20 71 75 65 72 79 20  nd on the query 
21100 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
21110 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
21120 42 4c 45 0a 20 20 75 38 20 64 65 63 6c 61 72 65  BLE.  u8 declare
21130 56 74 61 62 3b 20 20 20 20 20 20 20 20 20 20 20  Vtab;           
21140 2f 2a 20 54 72 75 65 20 69 66 20 69 6e 73 69 64  /* True if insid
21150 65 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72  e sqlite3_declar
21160 65 5f 76 74 61 62 28 29 20 2a 2f 0a 20 20 69 6e  e_vtab() */.  in
21170 74 20 6e 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20  t nVtabLock;    
21180 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
21190 72 20 6f 66 20 76 69 72 74 75 61 6c 20 74 61 62  r of virtual tab
211a0 6c 65 73 20 74 6f 20 6c 6f 63 6b 20 2a 2f 0a 23  les to lock */.#
211b0 65 6e 64 69 66 0a 20 20 69 6e 74 20 6e 48 65 69  endif.  int nHei
211c0 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ght;            
211d0 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20    /* Expression 
211e0 74 72 65 65 20 68 65 69 67 68 74 20 6f 66 20 63  tree height of c
211f0 75 72 72 65 6e 74 20 73 75 62 2d 73 65 6c 65 63  urrent sub-selec
21200 74 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  t */.#ifndef SQL
21210 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e  ITE_OMIT_EXPLAIN
21220 0a 20 20 69 6e 74 20 61 64 64 72 45 78 70 6c 61  .  int addrExpla
21230 69 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  in;          /* 
21240 41 64 64 72 65 73 73 20 6f 66 20 63 75 72 72 65  Address of curre
21250 6e 74 20 4f 50 5f 45 78 70 6c 61 69 6e 20 6f 70  nt OP_Explain op
21260 63 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  code */.#endif. 
21270 20 56 4c 69 73 74 20 2a 70 56 4c 69 73 74 3b 20   VList *pVList; 
21280 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
21290 70 70 69 6e 67 20 62 65 74 77 65 65 6e 20 76 61  pping between va
212a0 72 69 61 62 6c 65 20 6e 61 6d 65 73 20 61 6e 64  riable names and
212b0 20 6e 75 6d 62 65 72 73 20 2a 2f 0a 20 20 56 64   numbers */.  Vd
212c0 62 65 20 2a 70 52 65 70 72 65 70 61 72 65 3b 20  be *pReprepare; 
212d0 20 20 20 20 20 20 20 20 2f 2a 20 56 4d 20 62 65          /* VM be
212e0 69 6e 67 20 72 65 70 72 65 70 61 72 65 64 20 28  ing reprepared (
212f0 73 71 6c 69 74 65 33 52 65 70 72 65 70 61 72 65  sqlite3Reprepare
21300 28 29 29 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ()) */.  const c
21310 68 61 72 20 2a 7a 54 61 69 6c 3b 20 20 20 20 20  har *zTail;     
21320 20 20 20 2f 2a 20 41 6c 6c 20 53 51 4c 20 74 65     /* All SQL te
21330 78 74 20 70 61 73 74 20 74 68 65 20 6c 61 73 74  xt past the last
21340 20 73 65 6d 69 63 6f 6c 6f 6e 20 70 61 72 73 65   semicolon parse
21350 64 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e  d */.  Table *pN
21360 65 77 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20  ewTable;        
21370 20 2f 2a 20 41 20 74 61 62 6c 65 20 62 65 69 6e   /* A table bein
21380 67 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79  g constructed by
21390 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f   CREATE TABLE */
213a0 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65 77  .  Trigger *pNew
213b0 54 72 69 67 67 65 72 3b 20 20 20 20 20 2f 2a 20  Trigger;     /* 
213c0 54 72 69 67 67 65 72 20 75 6e 64 65 72 20 63 6f  Trigger under co
213d0 6e 73 74 72 75 63 74 20 62 79 20 61 20 43 52 45  nstruct by a CRE
213e0 41 54 45 20 54 52 49 47 47 45 52 20 2a 2f 0a 20  ATE TRIGGER */. 
213f0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75   const char *zAu
21400 74 68 43 6f 6e 74 65 78 74 3b 20 2f 2a 20 54 68  thContext; /* Th
21410 65 20 36 74 68 20 70 61 72 61 6d 65 74 65 72 20  e 6th parameter 
21420 74 6f 20 64 62 2d 3e 78 41 75 74 68 20 63 61 6c  to db->xAuth cal
21430 6c 62 61 63 6b 73 20 2a 2f 0a 23 69 66 6e 64 65  lbacks */.#ifnde
21440 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
21450 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 54 6f 6b  RTUALTABLE.  Tok
21460 65 6e 20 73 41 72 67 3b 20 20 20 20 20 20 20 20  en sArg;        
21470 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 6c 65         /* Comple
21480 74 65 20 74 65 78 74 20 6f 66 20 61 20 6d 6f 64  te text of a mod
21490 75 6c 65 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a  ule argument */.
214a0 20 20 54 61 62 6c 65 20 2a 2a 61 70 56 74 61 62    Table **apVtab
214b0 4c 6f 63 6b 3b 20 20 20 20 20 20 20 2f 2a 20 50  Lock;       /* P
214c0 6f 69 6e 74 65 72 20 74 6f 20 76 69 72 74 75 61  ointer to virtua
214d0 6c 20 74 61 62 6c 65 73 20 6e 65 65 64 69 6e 67  l tables needing
214e0 20 6c 6f 63 6b 69 6e 67 20 2a 2f 0a 23 65 6e 64   locking */.#end
214f0 69 66 0a 20 20 54 61 62 6c 65 20 2a 70 5a 6f 6d  if.  Table *pZom
21500 62 69 65 54 61 62 3b 20 20 20 20 20 20 20 20 2f  bieTab;        /
21510 2a 20 4c 69 73 74 20 6f 66 20 54 61 62 6c 65 20  * List of Table 
21520 6f 62 6a 65 63 74 73 20 74 6f 20 64 65 6c 65 74  objects to delet
21530 65 20 61 66 74 65 72 20 63 6f 64 65 20 67 65 6e  e after code gen
21540 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67   */.  TriggerPrg
21550 20 2a 70 54 72 69 67 67 65 72 50 72 67 3b 20 20   *pTriggerPrg;  
21560 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f  /* Linked list o
21570 66 20 63 6f 64 65 64 20 74 72 69 67 67 65 72 73  f coded triggers
21580 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74   */.  With *pWit
21590 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  h;              
215a0 2f 2a 20 43 75 72 72 65 6e 74 20 57 49 54 48 20  /* Current WITH 
215b0 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20  clause, or NULL 
215c0 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68  */.  With *pWith
215d0 54 6f 46 72 65 65 3b 20 20 20 20 20 20 20 20 2f  ToFree;        /
215e0 2a 20 46 72 65 65 20 74 68 69 73 20 57 49 54 48  * Free this WITH
215f0 20 6f 62 6a 65 63 74 20 61 74 20 74 68 65 20 65   object at the e
21600 6e 64 20 6f 66 20 74 68 65 20 70 61 72 73 65 20  nd of the parse 
21610 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a  */.};../*.** Siz
21620 65 73 20 61 6e 64 20 70 6f 69 6e 74 65 72 73 20  es and pointers 
21630 6f 66 20 76 61 72 69 6f 75 73 20 70 61 72 74 73  of various parts
21640 20 6f 66 20 74 68 65 20 50 61 72 73 65 20 6f 62   of the Parse ob
21650 6a 65 63 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ject..*/.#define
21660 20 50 41 52 53 45 5f 48 44 52 5f 53 5a 20 6f 66   PARSE_HDR_SZ of
21670 66 73 65 74 6f 66 28 50 61 72 73 65 2c 61 54 65  fsetof(Parse,aTe
21680 6d 70 52 65 67 29 20 2f 2a 20 52 65 63 75 72 73  mpReg) /* Recurs
21690 69 76 65 20 70 61 72 74 20 77 2f 6f 20 61 43 6f  ive part w/o aCo
216a0 6c 43 61 63 68 65 2a 2f 0a 23 64 65 66 69 6e 65  lCache*/.#define
216b0 20 50 41 52 53 45 5f 52 45 43 55 52 53 45 5f 53   PARSE_RECURSE_S
216c0 5a 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65  Z offsetof(Parse
216d0 2c 73 4c 61 73 74 54 6f 6b 65 6e 29 20 20 20 20  ,sLastToken)    
216e0 2f 2a 20 52 65 63 75 72 73 69 76 65 20 70 61 72  /* Recursive par
216f0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41 52  t */.#define PAR
21700 53 45 5f 54 41 49 4c 5f 53 5a 20 28 73 69 7a 65  SE_TAIL_SZ (size
21710 6f 66 28 50 61 72 73 65 29 2d 50 41 52 53 45 5f  of(Parse)-PARSE_
21720 52 45 43 55 52 53 45 5f 53 5a 29 20 2f 2a 20 4e  RECURSE_SZ) /* N
21730 6f 6e 2d 72 65 63 75 72 73 69 76 65 20 70 61 72  on-recursive par
21740 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41 52  t */.#define PAR
21750 53 45 5f 54 41 49 4c 28 58 29 20 28 28 28 63 68  SE_TAIL(X) (((ch
21760 61 72 2a 29 28 58 29 29 2b 50 41 52 53 45 5f 52  ar*)(X))+PARSE_R
21770 45 43 55 52 53 45 5f 53 5a 29 20 20 2f 2a 20 50  ECURSE_SZ)  /* P
21780 6f 69 6e 74 65 72 20 74 6f 20 74 61 69 6c 20 2a  ointer to tail *
21790 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  /../*.** Return 
217a0 74 72 75 65 20 69 66 20 63 75 72 72 65 6e 74 6c  true if currentl
217b0 79 20 69 6e 73 69 64 65 20 61 6e 20 73 71 6c 69  y inside an sqli
217c0 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62  te3_declare_vtab
217d0 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64  () call..*/.#ifd
217e0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
217f0 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 23 64  IRTUALTABLE.  #d
21800 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45  efine IN_DECLARE
21810 5f 56 54 41 42 20 30 0a 23 65 6c 73 65 0a 20 20  _VTAB 0.#else.  
21820 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41  #define IN_DECLA
21830 52 45 5f 56 54 41 42 20 28 70 50 61 72 73 65 2d  RE_VTAB (pParse-
21840 3e 64 65 63 6c 61 72 65 56 74 61 62 29 0a 23 65  >declareVtab).#e
21850 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  ndif../*.** An i
21860 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
21870 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
21880 72 65 20 63 61 6e 20 62 65 20 64 65 63 6c 61 72  re can be declar
21890 65 64 20 6f 6e 20 61 20 73 74 61 63 6b 20 61 6e  ed on a stack an
218a0 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 76  d used.** to sav
218b0 65 20 74 68 65 20 50 61 72 73 65 2e 7a 41 75 74  e the Parse.zAut
218c0 68 43 6f 6e 74 65 78 74 20 76 61 6c 75 65 20 73  hContext value s
218d0 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 62 65  o that it can be
218e0 20 72 65 73 74 6f 72 65 64 20 6c 61 74 65 72 2e   restored later.
218f0 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 68 43  .*/.struct AuthC
21900 6f 6e 74 65 78 74 20 7b 0a 20 20 63 6f 6e 73 74  ontext {.  const
21910 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74   char *zAuthCont
21920 65 78 74 3b 20 20 20 2f 2a 20 50 75 74 20 73 61  ext;   /* Put sa
21930 76 65 64 20 50 61 72 73 65 2e 7a 41 75 74 68 43  ved Parse.zAuthC
21940 6f 6e 74 65 78 74 20 68 65 72 65 20 2a 2f 0a 20  ontext here */. 
21950 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20   Parse *pParse; 
21960 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
21970 54 68 65 20 50 61 72 73 65 20 73 74 72 75 63 74  The Parse struct
21980 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ure */.};../*.**
21990 20 42 69 74 66 69 65 6c 64 20 66 6c 61 67 73 20   Bitfield flags 
219a0 66 6f 72 20 50 35 20 76 61 6c 75 65 20 69 6e 20  for P5 value in 
219b0 76 61 72 69 6f 75 73 20 6f 70 63 6f 64 65 73 2e  various opcodes.
219c0 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e  .**.** Value con
219d0 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72 63  straints (enforc
219e0 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29  ed via assert())
219f0 3a 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 4c  :.**    OPFLAG_L
21a00 45 4e 47 54 48 41 52 47 20 20 20 20 3d 3d 20 53  ENGTHARG    == S
21a10 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54  QLITE_FUNC_LENGT
21a20 48 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 54  H.**    OPFLAG_T
21a30 59 50 45 4f 46 41 52 47 20 20 20 20 3d 3d 20 53  YPEOFARG    == S
21a40 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f  QLITE_FUNC_TYPEO
21a50 46 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 42  F.**    OPFLAG_B
21a60 55 4c 4b 43 53 52 20 20 20 20 20 20 3d 3d 20 42  ULKCSR      == B
21a70 54 52 45 45 5f 42 55 4c 4b 4c 4f 41 44 0a 2a 2a  TREE_BULKLOAD.**
21a80 20 20 20 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45      OPFLAG_SEEKE
21a90 51 20 20 20 20 20 20 20 3d 3d 20 42 54 52 45 45  Q       == BTREE
21aa0 5f 53 45 45 4b 5f 45 51 0a 2a 2a 20 20 20 20 4f  _SEEK_EQ.**    O
21ab0 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 20  PFLAG_FORDELETE 
21ac0 20 20 20 3d 3d 20 42 54 52 45 45 5f 46 4f 52 44     == BTREE_FORD
21ad0 45 4c 45 54 45 0a 2a 2a 20 20 20 20 4f 50 46 4c  ELETE.**    OPFL
21ae0 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 20  AG_SAVEPOSITION 
21af0 3d 3d 20 42 54 52 45 45 5f 53 41 56 45 50 4f 53  == BTREE_SAVEPOS
21b00 49 54 49 4f 4e 0a 2a 2a 20 20 20 20 4f 50 46 4c  ITION.**    OPFL
21b10 41 47 5f 41 55 58 44 45 4c 45 54 45 20 20 20 20  AG_AUXDELETE    
21b20 3d 3d 20 42 54 52 45 45 5f 41 55 58 44 45 4c 45  == BTREE_AUXDELE
21b30 54 45 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  TE.*/.#define OP
21b40 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 20 20 20  FLAG_NCHANGE    
21b50 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50     0x01    /* OP
21b60 5f 49 6e 73 65 72 74 3a 20 53 65 74 20 74 6f 20  _Insert: Set to 
21b70 75 70 64 61 74 65 20 64 62 2d 3e 6e 43 68 61 6e  update db->nChan
21b80 67 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  ge */.          
21b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ba0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
21bb0 73 6f 20 75 73 65 64 20 69 6e 20 50 32 20 28 6e  so used in P2 (n
21bc0 6f 74 20 50 35 29 20 6f 66 20 4f 50 5f 44 65 6c  ot P5) of OP_Del
21bd0 65 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ete */.#define O
21be0 50 46 4c 41 47 5f 45 50 48 45 4d 20 20 20 20 20  PFLAG_EPHEM     
21bf0 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f      0x01    /* O
21c00 50 5f 43 6f 6c 75 6d 6e 3a 20 45 70 68 65 6d 65  P_Column: Epheme
21c10 72 61 6c 20 6f 75 74 70 75 74 20 69 73 20 6f 6b  ral output is ok
21c20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
21c30 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 20 20 20  AG_LASTROWID    
21c40 20 30 78 32 30 20 20 20 20 2f 2a 20 53 65 74 20   0x20    /* Set 
21c50 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6c 61  to update db->la
21c60 73 74 52 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69  stRowid */.#defi
21c70 6e 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41  ne OPFLAG_ISUPDA
21c80 54 45 20 20 20 20 20 20 30 78 30 34 20 20 20 20  TE      0x04    
21c90 2f 2a 20 54 68 69 73 20 4f 50 5f 49 6e 73 65 72  /* This OP_Inser
21ca0 74 20 69 73 20 61 6e 20 73 71 6c 20 55 50 44 41  t is an sql UPDA
21cb0 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  TE */.#define OP
21cc0 46 4c 41 47 5f 41 50 50 45 4e 44 20 20 20 20 20  FLAG_APPEND     
21cd0 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20 54 68     0x08    /* Th
21ce0 69 73 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20  is is likely to 
21cf0 62 65 20 61 6e 20 61 70 70 65 6e 64 20 2a 2f 0a  be an append */.
21d00 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 55  #define OPFLAG_U
21d10 53 45 53 45 45 4b 52 45 53 55 4c 54 20 30 78 31  SESEEKRESULT 0x1
21d20 30 20 20 20 20 2f 2a 20 54 72 79 20 74 6f 20 61  0    /* Try to a
21d30 76 6f 69 64 20 61 20 73 65 65 6b 20 69 6e 20 42  void a seek in B
21d40 74 72 65 65 49 6e 73 65 72 74 28 29 20 2a 2f 0a  treeInsert() */.
21d50 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49  #define OPFLAG_I
21d60 53 4e 4f 4f 50 20 20 20 20 20 20 20 20 30 78 34  SNOOP        0x4
21d70 30 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74  0    /* OP_Delet
21d80 65 20 64 6f 65 73 20 70 72 65 2d 75 70 64 61 74  e does pre-updat
21d90 65 2d 68 6f 6f 6b 20 6f 6e 6c 79 20 2a 2f 0a 23  e-hook only */.#
21da0 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 45  define OPFLAG_LE
21db0 4e 47 54 48 41 52 47 20 20 20 20 20 30 78 34 30  NGTHARG     0x40
21dc0 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e      /* OP_Column
21dd0 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 6c   only used for l
21de0 65 6e 67 74 68 28 29 20 2a 2f 0a 23 64 65 66 69  ength() */.#defi
21df0 6e 65 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46  ne OPFLAG_TYPEOF
21e00 41 52 47 20 20 20 20 20 30 78 38 30 20 20 20 20  ARG     0x80    
21e10 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c  /* OP_Column onl
21e20 79 20 75 73 65 64 20 66 6f 72 20 74 79 70 65 6f  y used for typeo
21e30 66 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  f() */.#define O
21e40 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20 20  PFLAG_BULKCSR   
21e50 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f      0x01    /* O
21e60 50 5f 4f 70 65 6e 2a 2a 20 75 73 65 64 20 74 6f  P_Open** used to
21e70 20 6f 70 65 6e 20 62 75 6c 6b 20 63 75 72 73 6f   open bulk curso
21e80 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  r */.#define OPF
21e90 4c 41 47 5f 53 45 45 4b 45 51 20 20 20 20 20 20  LAG_SEEKEQ      
21ea0 20 20 30 78 30 32 20 20 20 20 2f 2a 20 4f 50 5f    0x02    /* OP_
21eb0 4f 70 65 6e 2a 2a 20 63 75 72 73 6f 72 20 75 73  Open** cursor us
21ec0 65 73 20 45 51 20 73 65 65 6b 20 6f 6e 6c 79 20  es EQ seek only 
21ed0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
21ee0 47 5f 46 4f 52 44 45 4c 45 54 45 20 20 20 20 20  G_FORDELETE     
21ef0 30 78 30 38 20 20 20 20 2f 2a 20 4f 50 5f 4f 70  0x08    /* OP_Op
21f00 65 6e 20 73 68 6f 75 6c 64 20 75 73 65 20 42 54  en should use BT
21f10 52 45 45 5f 46 4f 52 44 45 4c 45 54 45 20 2a 2f  REE_FORDELETE */
21f20 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
21f30 50 32 49 53 52 45 47 20 20 20 20 20 20 20 30 78  P2ISREG       0x
21f40 31 30 20 20 20 20 2f 2a 20 50 32 20 74 6f 20 4f  10    /* P2 to O
21f50 50 5f 4f 70 65 6e 2a 2a 20 69 73 20 61 20 72 65  P_Open** is a re
21f60 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20 2a 2f  gister number */
21f70 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
21f80 50 45 52 4d 55 54 45 20 20 20 20 20 20 20 30 78  PERMUTE       0x
21f90 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6d 70  01    /* OP_Comp
21fa0 61 72 65 3a 20 75 73 65 20 74 68 65 20 70 65 72  are: use the per
21fb0 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  mutation */.#def
21fc0 69 6e 65 20 4f 50 46 4c 41 47 5f 53 41 56 45 50  ine OPFLAG_SAVEP
21fd0 4f 53 49 54 49 4f 4e 20 20 30 78 30 32 20 20 20  OSITION  0x02   
21fe0 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 2f 49 6e   /* OP_Delete/In
21ff0 73 65 72 74 3a 20 73 61 76 65 20 63 75 72 73 6f  sert: save curso
22000 72 20 70 6f 73 20 2a 2f 0a 23 64 65 66 69 6e 65  r pos */.#define
22010 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54   OPFLAG_AUXDELET
22020 45 20 20 20 20 20 30 78 30 34 20 20 20 20 2f 2a  E     0x04    /*
22030 20 4f 50 5f 44 65 6c 65 74 65 3a 20 69 6e 64 65   OP_Delete: inde
22040 78 20 69 6e 20 61 20 44 45 4c 45 54 45 20 6f 70  x in a DELETE op
22050 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
22060 41 47 5f 4e 4f 43 48 4e 47 5f 4d 41 47 49 43 20  AG_NOCHNG_MAGIC 
22070 20 30 78 36 64 20 20 20 20 2f 2a 20 4f 50 5f 4d   0x6d    /* OP_M
22080 61 6b 65 52 65 63 6f 72 64 3a 20 73 65 72 69 61  akeRecord: seria
22090 6c 74 79 70 65 20 31 30 20 69 73 20 6f 6b 20 2a  ltype 10 is ok *
220a0 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63 68 20 74 72  /../*. * Each tr
220b0 69 67 67 65 72 20 70 72 65 73 65 6e 74 20 69 6e  igger present in
220c0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
220d0 68 65 6d 61 20 69 73 20 73 74 6f 72 65 64 20 61  hema is stored a
220e0 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
220f0 0a 20 2a 20 73 74 72 75 63 74 20 54 72 69 67 67  . * struct Trigg
22100 65 72 2e 0a 20 2a 0a 20 2a 20 50 6f 69 6e 74 65  er.. *. * Pointe
22110 72 73 20 74 6f 20 69 6e 73 74 61 6e 63 65 73 20  rs to instances 
22120 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  of struct Trigge
22130 72 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20  r are stored in 
22140 74 77 6f 20 77 61 79 73 2e 0a 20 2a 20 31 2e 20  two ways.. * 1. 
22150 49 6e 20 74 68 65 20 22 74 72 69 67 48 61 73 68  In the "trigHash
22160 22 20 68 61 73 68 20 74 61 62 6c 65 20 28 70 61  " hash table (pa
22170 72 74 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  rt of the sqlite
22180 33 2a 20 74 68 61 74 20 72 65 70 72 65 73 65 6e  3* that represen
22190 74 73 20 74 68 65 0a 20 2a 20 20 20 20 64 61 74  ts the. *    dat
221a0 61 62 61 73 65 29 2e 20 54 68 69 73 20 61 6c 6c  abase). This all
221b0 6f 77 73 20 54 72 69 67 67 65 72 20 73 74 72 75  ows Trigger stru
221c0 63 74 75 72 65 73 20 74 6f 20 62 65 20 72 65 74  ctures to be ret
221d0 72 69 65 76 65 64 20 62 79 20 6e 61 6d 65 2e 0a  rieved by name..
221e0 20 2a 20 32 2e 20 41 6c 6c 20 74 72 69 67 67 65   * 2. All trigge
221f0 72 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  rs associated wi
22200 74 68 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c  th a single tabl
22210 65 20 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 20  e form a linked 
22220 6c 69 73 74 2c 20 75 73 69 6e 67 20 74 68 65 0a  list, using the.
22230 20 2a 20 20 20 20 70 4e 65 78 74 20 6d 65 6d 62   *    pNext memb
22240 65 72 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  er of struct Tri
22250 67 67 65 72 2e 20 41 20 70 6f 69 6e 74 65 72 20  gger. A pointer 
22260 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c 65  to the first ele
22270 6d 65 6e 74 20 6f 66 20 74 68 65 0a 20 2a 20 20  ment of the. *  
22280 20 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73    linked list is
22290 20 73 74 6f 72 65 64 20 61 73 20 74 68 65 20 22   stored as the "
222a0 70 54 72 69 67 67 65 72 22 20 6d 65 6d 62 65 72  pTrigger" member
222b0 20 6f 66 20 74 68 65 20 61 73 73 6f 63 69 61 74   of the associat
222c0 65 64 0a 20 2a 20 20 20 20 73 74 72 75 63 74 20  ed. *    struct 
222d0 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68 65  Table.. *. * The
222e0 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d   "step_list" mem
222f0 62 65 72 20 70 6f 69 6e 74 73 20 74 6f 20 74 68  ber points to th
22300 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20  e first element 
22310 6f 66 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  of a linked list
22320 0a 20 2a 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  . * containing t
22330 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  he SQL statement
22340 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20 74  s specified as t
22350 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  he trigger progr
22360 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54  am.. */.struct T
22370 72 69 67 67 65 72 20 7b 0a 20 20 63 68 61 72 20  rigger {.  char 
22380 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
22390 20 20 20 2f 2a 20 54 68 65 20 6e 61 6d 65 20 6f     /* The name o
223a0 66 20 74 68 65 20 74 72 69 67 67 65 72 20 20 20  f the trigger   
223b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
223c0 20 20 20 20 20 2a 2f 0a 20 20 63 68 61 72 20 2a       */.  char *
223d0 74 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  table;          
223e0 20 20 2f 2a 20 54 68 65 20 74 61 62 6c 65 20 6f    /* The table o
223f0 72 20 76 69 65 77 20 74 6f 20 77 68 69 63 68 20  r view to which 
22400 74 68 65 20 74 72 69 67 67 65 72 20 61 70 70 6c  the trigger appl
22410 69 65 73 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20  ies */.  u8 op; 
22420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22430 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45   /* One of TK_DE
22440 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c  LETE, TK_UPDATE,
22450 20 54 4b 5f 49 4e 53 45 52 54 20 20 20 20 20 20   TK_INSERT      
22460 20 20 20 2a 2f 0a 20 20 75 38 20 74 72 5f 74 6d     */.  u8 tr_tm
22470 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
22480 2f 2a 20 4f 6e 65 20 6f 66 20 54 52 49 47 47 45  /* One of TRIGGE
22490 52 5f 42 45 46 4f 52 45 2c 20 54 52 49 47 47 45  R_BEFORE, TRIGGE
224a0 52 5f 41 46 54 45 52 20 2a 2f 0a 20 20 45 78 70  R_AFTER */.  Exp
224b0 72 20 2a 70 57 68 65 6e 3b 20 20 20 20 20 20 20  r *pWhen;       
224c0 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 4e       /* The WHEN
224d0 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 65   clause of the e
224e0 78 70 72 65 73 73 69 6f 6e 20 28 6d 61 79 20 62  xpression (may b
224f0 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c  e NULL) */.  IdL
22500 69 73 74 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20  ist *pColumns;  
22510 20 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20       /* If this 
22520 69 73 20 61 6e 20 55 50 44 41 54 45 20 4f 46 20  is an UPDATE OF 
22530 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74 72  <column-list> tr
22540 69 67 67 65 72 2c 0a 20 20 20 20 20 20 20 20 20  igger,.         
22550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22560 20 20 20 20 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d      the <column-
22570 6c 69 73 74 3e 20 69 73 20 73 74 6f 72 65 64 20  list> is stored 
22580 68 65 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61  here */.  Schema
22590 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20   *pSchema;      
225a0 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74    /* Schema cont
225b0 61 69 6e 69 6e 67 20 74 68 65 20 74 72 69 67 67  aining the trigg
225c0 65 72 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  er */.  Schema *
225d0 70 54 61 62 53 63 68 65 6d 61 3b 20 20 20 20 20  pTabSchema;     
225e0 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69  /* Schema contai
225f0 6e 69 6e 67 20 74 68 65 20 74 61 62 6c 65 20 2a  ning the table *
22600 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  /.  TriggerStep 
22610 2a 73 74 65 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c  *step_list; /* L
22620 69 6e 6b 20 6c 69 73 74 20 6f 66 20 74 72 69 67  ink list of trig
22630 67 65 72 20 70 72 6f 67 72 61 6d 20 73 74 65 70  ger program step
22640 73 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f  s             */
22650 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65 78  .  Trigger *pNex
22660 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65  t;         /* Ne
22670 78 74 20 74 72 69 67 67 65 72 20 61 73 73 6f 63  xt trigger assoc
22680 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 74  iated with the t
22690 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  able */.};../*.*
226a0 2a 20 41 20 74 72 69 67 67 65 72 20 69 73 20 65  * A trigger is e
226b0 69 74 68 65 72 20 61 20 42 45 46 4f 52 45 20 6f  ither a BEFORE o
226c0 72 20 61 6e 20 41 46 54 45 52 20 74 72 69 67 67  r an AFTER trigg
226d0 65 72 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69  er.  The followi
226e0 6e 67 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20  ng constants.** 
226f0 64 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68 2e  determine which.
22700 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 72 65 20  .**.** If there 
22710 61 72 65 20 6d 75 6c 74 69 70 6c 65 20 74 72 69  are multiple tri
22720 67 67 65 72 73 2c 20 79 6f 75 20 6d 69 67 68 74  ggers, you might
22730 20 6f 66 20 73 6f 6d 65 20 42 45 46 4f 52 45 20   of some BEFORE 
22740 61 6e 64 20 73 6f 6d 65 20 41 46 54 45 52 2e 0a  and some AFTER..
22750 2a 2a 20 49 6e 20 74 68 61 74 20 63 61 73 65 73  ** In that cases
22760 2c 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 73 20  , the constants 
22770 62 65 6c 6f 77 20 63 61 6e 20 62 65 20 4f 52 65  below can be ORe
22780 64 20 74 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a 23  d together..*/.#
22790 64 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f 42  define TRIGGER_B
227a0 45 46 4f 52 45 20 20 31 0a 23 64 65 66 69 6e 65  EFORE  1.#define
227b0 20 54 52 49 47 47 45 52 5f 41 46 54 45 52 20 20   TRIGGER_AFTER  
227c0 20 32 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73   2../*. * An ins
227d0 74 61 6e 63 65 20 6f 66 20 73 74 72 75 63 74 20  tance of struct 
227e0 54 72 69 67 67 65 72 53 74 65 70 20 69 73 20 75  TriggerStep is u
227f0 73 65 64 20 74 6f 20 73 74 6f 72 65 20 61 20 73  sed to store a s
22800 69 6e 67 6c 65 20 53 51 4c 20 73 74 61 74 65 6d  ingle SQL statem
22810 65 6e 74 0a 20 2a 20 74 68 61 74 20 69 73 20 61  ent. * that is a
22820 20 70 61 72 74 20 6f 66 20 61 20 74 72 69 67 67   part of a trigg
22830 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20  er-program.. *. 
22840 2a 20 49 6e 73 74 61 6e 63 65 73 20 6f 66 20 73  * Instances of s
22850 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
22860 70 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20  p are stored in 
22870 61 20 73 69 6e 67 6c 79 20 6c 69 6e 6b 65 64 20  a singly linked 
22880 6c 69 73 74 20 28 6c 69 6e 6b 65 64 0a 20 2a 20  list (linked. * 
22890 75 73 69 6e 67 20 74 68 65 20 22 70 4e 65 78 74  using the "pNext
228a0 22 20 6d 65 6d 62 65 72 29 20 72 65 66 65 72 65  " member) refere
228b0 6e 63 65 64 20 62 79 20 74 68 65 20 22 73 74 65  nced by the "ste
228c0 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 6f  p_list" member o
228d0 66 20 74 68 65 0a 20 2a 20 61 73 73 6f 63 69 61  f the. * associa
228e0 74 65 64 20 73 74 72 75 63 74 20 54 72 69 67 67  ted struct Trigg
228f0 65 72 20 69 6e 73 74 61 6e 63 65 2e 20 54 68 65  er instance. The
22900 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f   first element o
22910 66 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73  f the linked lis
22920 74 20 69 73 0a 20 2a 20 74 68 65 20 66 69 72 73  t is. * the firs
22930 74 20 73 74 65 70 20 6f 66 20 74 68 65 20 74 72  t step of the tr
22940 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20  igger-program.. 
22950 2a 0a 20 2a 20 54 68 65 20 22 6f 70 22 20 6d 65  *. * The "op" me
22960 6d 62 65 72 20 69 6e 64 69 63 61 74 65 73 20 77  mber indicates w
22970 68 65 74 68 65 72 20 74 68 69 73 20 69 73 20 61  hether this is a
22980 20 22 44 45 4c 45 54 45 22 2c 20 22 49 4e 53 45   "DELETE", "INSE
22990 52 54 22 2c 20 22 55 50 44 41 54 45 22 20 6f 72  RT", "UPDATE" or
229a0 0a 20 2a 20 22 53 45 4c 45 43 54 22 20 73 74 61  . * "SELECT" sta
229b0 74 65 6d 65 6e 74 2e 20 54 68 65 20 6d 65 61 6e  tement. The mean
229c0 69 6e 67 73 20 6f 66 20 74 68 65 20 6f 74 68 65  ings of the othe
229d0 72 20 6d 65 6d 62 65 72 73 20 69 73 20 64 65 74  r members is det
229e0 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 0a 20  ermined by the. 
229f0 2a 20 76 61 6c 75 65 20 6f 66 20 22 6f 70 22 20  * value of "op" 
22a00 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20  as follows:. *. 
22a10 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53 45  * (op == TK_INSE
22a20 52 54 29 0a 20 2a 20 6f 72 63 6f 6e 66 20 20 20  RT). * orconf   
22a30 20 2d 3e 20 73 74 6f 72 65 73 20 74 68 65 20 4f   -> stores the O
22a40 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72  N CONFLICT algor
22a50 69 74 68 6d 0a 20 2a 20 70 53 65 6c 65 63 74 20  ithm. * pSelect 
22a60 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20    -> If this is 
22a70 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e  an INSERT INTO .
22a80 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20 73 74  .. SELECT ... st
22a90 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a  atement, then. *
22aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
22ab0 69 73 20 73 74 6f 72 65 73 20 61 20 70 6f 69 6e  is stores a poin
22ac0 74 65 72 20 74 6f 20 74 68 65 20 53 45 4c 45 43  ter to the SELEC
22ad0 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 4f 74 68  T statement. Oth
22ae0 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20  erwise NULL.. * 
22af0 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71  zTarget   -> Deq
22b00 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68  uoted name of th
22b10 65 20 74 61 62 6c 65 20 74 6f 20 69 6e 73 65 72  e table to inser
22b20 74 20 69 6e 74 6f 2e 0a 20 2a 20 70 45 78 70 72  t into.. * pExpr
22b30 4c 69 73 74 20 2d 3e 20 49 66 20 74 68 69 73 20  List -> If this 
22b40 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54  is an INSERT INT
22b50 4f 20 2e 2e 2e 20 56 41 4c 55 45 53 20 2e 2e 2e  O ... VALUES ...
22b60 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e   statement, then
22b70 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
22b80 20 74 68 69 73 20 73 74 6f 72 65 73 20 76 61 6c   this stores val
22b90 75 65 73 20 74 6f 20 62 65 20 69 6e 73 65 72 74  ues to be insert
22ba0 65 64 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55  ed. Otherwise NU
22bb0 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69 73 74 20 20  LL.. * pIdList  
22bc0 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61   -> If this is a
22bd0 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e  n INSERT INTO ..
22be0 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73  . (<column-names
22bf0 3e 29 20 56 41 4c 55 45 53 20 2e 2e 2e 0a 20 2a  >) VALUES .... *
22c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
22c10 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68  atement, then th
22c20 69 73 20 73 74 6f 72 65 73 20 74 68 65 20 63 6f  is stores the co
22c30 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74 6f 20 62 65  lumn-names to be
22c40 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
22c50 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 2e 0a   inserted into..
22c60 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f   *. * (op == TK_
22c70 44 45 4c 45 54 45 29 0a 20 2a 20 7a 54 61 72 67  DELETE). * zTarg
22c80 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64  et   -> Dequoted
22c90 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
22ca0 6c 65 20 74 6f 20 64 65 6c 65 74 65 20 66 72 6f  le to delete fro
22cb0 6d 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20  m.. * pWhere    
22cc0 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c 61  -> The WHERE cla
22cd0 75 73 65 20 6f 66 20 74 68 65 20 44 45 4c 45 54  use of the DELET
22ce0 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f  E statement if o
22cf0 6e 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e  ne is specified.
22d00 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
22d10 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e   Otherwise NULL.
22d20 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b  . *. * (op == TK
22d30 5f 55 50 44 41 54 45 29 0a 20 2a 20 7a 54 61 72  _UPDATE). * zTar
22d40 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74 65  get   -> Dequote
22d50 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  d name of the ta
22d60 62 6c 65 20 74 6f 20 75 70 64 61 74 65 2e 0a 20  ble to update.. 
22d70 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54  * pWhere    -> T
22d80 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
22d90 6f 66 20 74 68 65 20 55 50 44 41 54 45 20 73 74  of the UPDATE st
22da0 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69  atement if one i
22db0 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20  s specified.. * 
22dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 74 68               Oth
22dd0 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20  erwise NULL.. * 
22de0 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 41 20 6c  pExprList -> A l
22df0 69 73 74 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ist of the colum
22e00 6e 73 20 74 6f 20 75 70 64 61 74 65 20 61 6e 64  ns to update and
22e10 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73   the expressions
22e20 20 74 6f 20 75 70 64 61 74 65 0a 20 2a 20 20 20   to update. *   
22e30 20 20 20 20 20 20 20 20 20 20 20 74 68 65 6d 20             them 
22e40 74 6f 2e 20 53 65 65 20 73 71 6c 69 74 65 33 55  to. See sqlite3U
22e50 70 64 61 74 65 28 29 20 64 6f 63 75 6d 65 6e 74  pdate() document
22e60 61 74 69 6f 6e 20 6f 66 20 22 70 43 68 61 6e 67  ation of "pChang
22e70 65 73 22 0a 20 2a 20 20 20 20 20 20 20 20 20 20  es". *          
22e80 20 20 20 20 61 72 67 75 6d 65 6e 74 2e 0a 20 2a      argument.. *
22e90 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67  . */.struct Trig
22ea0 67 65 72 53 74 65 70 20 7b 0a 20 20 75 38 20 6f  gerStep {.  u8 o
22eb0 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
22ec0 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45   /* One of TK_DE
22ed0 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c  LETE, TK_UPDATE,
22ee0 20 54 4b 5f 49 4e 53 45 52 54 2c 20 54 4b 5f 53   TK_INSERT, TK_S
22ef0 45 4c 45 43 54 20 2a 2f 0a 20 20 75 38 20 6f 72  ELECT */.  u8 or
22f00 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20  conf;           
22f10 2f 2a 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 65  /* OE_Rollback e
22f20 74 63 2e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  tc. */.  Trigger
22f30 20 2a 70 54 72 69 67 3b 20 20 20 20 20 20 2f 2a   *pTrig;      /*
22f40 20 54 68 65 20 74 72 69 67 67 65 72 20 74 68 61   The trigger tha
22f50 74 20 74 68 69 73 20 73 74 65 70 20 69 73 20 61  t this step is a
22f60 20 70 61 72 74 20 6f 66 20 2a 2f 0a 20 20 53 65   part of */.  Se
22f70 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20  lect *pSelect;  
22f80 20 20 20 2f 2a 20 53 45 4c 45 43 54 20 73 74 61     /* SELECT sta
22f90 74 65 6d 65 6e 74 20 6f 72 20 52 48 53 20 6f 66  tement or RHS of
22fa0 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 53 45 4c   INSERT INTO SEL
22fb0 45 43 54 20 2e 2e 2e 20 2a 2f 0a 20 20 63 68 61  ECT ... */.  cha
22fc0 72 20 2a 7a 54 61 72 67 65 74 3b 20 20 20 20 20  r *zTarget;     
22fd0 20 20 2f 2a 20 54 61 72 67 65 74 20 74 61 62 6c    /* Target tabl
22fe0 65 20 66 6f 72 20 44 45 4c 45 54 45 2c 20 55 50  e for DELETE, UP
22ff0 44 41 54 45 2c 20 49 4e 53 45 52 54 20 2a 2f 0a  DATE, INSERT */.
23000 20 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20    Expr *pWhere; 
23010 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48         /* The WH
23020 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 44  ERE clause for D
23030 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20  ELETE or UPDATE 
23040 73 74 65 70 73 20 2a 2f 0a 20 20 45 78 70 72 4c  steps */.  ExprL
23050 69 73 74 20 2a 70 45 78 70 72 4c 69 73 74 3b 20  ist *pExprList; 
23060 2f 2a 20 53 45 54 20 63 6c 61 75 73 65 20 66 6f  /* SET clause fo
23070 72 20 55 50 44 41 54 45 20 2a 2f 0a 20 20 49 64  r UPDATE */.  Id
23080 4c 69 73 74 20 2a 70 49 64 4c 69 73 74 3b 20 20  List *pIdList;  
23090 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d     /* Column nam
230a0 65 73 20 66 6f 72 20 49 4e 53 45 52 54 20 2a 2f  es for INSERT */
230b0 0a 20 20 55 70 73 65 72 74 20 2a 70 55 70 73 65  .  Upsert *pUpse
230c0 72 74 3b 20 20 20 20 20 2f 2a 20 55 70 73 65 72  rt;     /* Upser
230d0 74 20 63 6c 61 75 73 65 73 20 6f 6e 20 61 6e 20  t clauses on an 
230e0 49 4e 53 45 52 54 20 2a 2f 0a 20 20 63 68 61 72  INSERT */.  char
230f0 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20 20 20   *zSpan;        
23100 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 53 51 4c   /* Original SQL
23110 20 74 65 78 74 20 6f 66 20 74 68 69 73 20 63 6f   text of this co
23120 6d 6d 61 6e 64 20 2a 2f 0a 20 20 54 72 69 67 67  mmand */.  Trigg
23130 65 72 53 74 65 70 20 2a 70 4e 65 78 74 3b 20 20  erStep *pNext;  
23140 2f 2a 20 4e 65 78 74 20 69 6e 20 74 68 65 20 6c  /* Next in the l
23150 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20 54 72  ink-list */.  Tr
23160 69 67 67 65 72 53 74 65 70 20 2a 70 4c 61 73 74  iggerStep *pLast
23170 3b 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65 6d 65  ;  /* Last eleme
23180 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e  nt in link-list.
23190 20 56 61 6c 69 64 20 66 6f 72 20 31 73 74 20 65   Valid for 1st e
231a0 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a  lem only */.};..
231b0 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
231c0 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 6f  ing structure co
231d0 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69  ntains informati
231e0 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65 20 73  on used by the s
231f0 71 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72  qliteFix....** r
23200 6f 75 74 69 6e 65 73 20 61 73 20 74 68 65 79 20  outines as they 
23210 77 61 6c 6b 20 74 68 65 20 70 61 72 73 65 20 74  walk the parse t
23220 72 65 65 20 74 6f 20 6d 61 6b 65 20 64 61 74 61  ree to make data
23230 62 61 73 65 20 72 65 66 65 72 65 6e 63 65 73 0a  base references.
23240 2a 2a 20 65 78 70 6c 69 63 69 74 2e 0a 2a 2f 0a  ** explicit..*/.
23250 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44  typedef struct D
23260 62 46 69 78 65 72 20 44 62 46 69 78 65 72 3b 0a  bFixer DbFixer;.
23270 73 74 72 75 63 74 20 44 62 46 69 78 65 72 20 7b  struct DbFixer {
23280 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65  .  Parse *pParse
23290 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61  ;      /* The pa
232a0 72 73 69 6e 67 20 63 6f 6e 74 65 78 74 2e 20 20  rsing context.  
232b0 45 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 77  Error messages w
232c0 72 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a 20  ritten here */. 
232d0 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
232e0 3b 20 20 20 20 2f 2a 20 46 69 78 20 69 74 65 6d  ;    /* Fix item
232f0 73 20 74 6f 20 74 68 69 73 20 73 63 68 65 6d 61  s to this schema
23300 20 2a 2f 0a 20 20 69 6e 74 20 62 56 61 72 4f 6e   */.  int bVarOn
23310 6c 79 3b 20 20 20 20 20 20 20 2f 2a 20 43 68 65  ly;       /* Che
23320 63 6b 20 66 6f 72 20 76 61 72 69 61 62 6c 65 20  ck for variable 
23330 72 65 66 65 72 65 6e 63 65 73 20 6f 6e 6c 79 20  references only 
23340 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
23350 2a 7a 44 62 3b 20 20 20 20 2f 2a 20 4d 61 6b 65  *zDb;    /* Make
23360 20 73 75 72 65 20 61 6c 6c 20 6f 62 6a 65 63 74   sure all object
23370 73 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20  s are contained 
23380 69 6e 20 74 68 69 73 20 64 61 74 61 62 61 73 65  in this database
23390 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
233a0 20 2a 7a 54 79 70 65 3b 20 20 2f 2a 20 54 79 70   *zType;  /* Typ
233b0 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e  e of the contain
233c0 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72  er - used for er
233d0 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a  ror messages */.
233e0 20 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a 70    const Token *p
233f0 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66  Name; /* Name of
23400 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d   the container -
23410 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20   used for error 
23420 6d 65 73 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a  messages */.};..
23430 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 65  /*.** An objecte
23440 64 20 75 73 65 64 20 74 6f 20 61 63 63 75 6d 75  d used to accumu
23450 6c 61 74 65 20 74 68 65 20 74 65 78 74 20 6f 66  late the text of
23460 20 61 20 73 74 72 69 6e 67 20 77 68 65 72 65 20   a string where 
23470 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65 63  we.** do not nec
23480 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20 68 6f  essarily know ho
23490 77 20 62 69 67 20 74 68 65 20 73 74 72 69 6e 67  w big the string
234a0 20 77 69 6c 6c 20 62 65 20 69 6e 20 74 68 65 20   will be in the 
234b0 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 73  end..*/.struct s
234c0 71 6c 69 74 65 33 5f 73 74 72 20 7b 0a 20 20 73  qlite3_str {.  s
234d0 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
234e0 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20      /* Optional 
234f0 64 61 74 61 62 61 73 65 20 66 6f 72 20 6c 6f 6f  database for loo
23500 6b 61 73 69 64 65 2e 20 20 43 61 6e 20 62 65 20  kaside.  Can be 
23510 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72 20 2a  NULL */.  char *
23520 7a 54 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f  zText;         /
23530 2a 20 54 68 65 20 73 74 72 69 6e 67 20 63 6f 6c  * The string col
23540 6c 65 63 74 65 64 20 73 6f 20 66 61 72 20 2a 2f  lected so far */
23550 0a 20 20 75 33 32 20 20 6e 41 6c 6c 6f 63 3b 20  .  u32  nAlloc; 
23560 20 20 20 20 20 20 20 20 2f 2a 20 41 6d 6f 75 6e          /* Amoun
23570 74 20 6f 66 20 73 70 61 63 65 20 61 6c 6c 6f 63  t of space alloc
23580 61 74 65 64 20 69 6e 20 7a 54 65 78 74 20 2a 2f  ated in zText */
23590 0a 20 20 75 33 32 20 20 6d 78 41 6c 6c 6f 63 3b  .  u32  mxAlloc;
235a0 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d          /* Maxim
235b0 75 6d 20 61 6c 6c 6f 77 65 64 20 61 6c 6c 6f 63  um allowed alloc
235c0 61 74 69 6f 6e 2e 20 20 30 20 66 6f 72 20 6e 6f  ation.  0 for no
235d0 20 6d 61 6c 6c 6f 63 20 75 73 61 67 65 20 2a 2f   malloc usage */
235e0 0a 20 20 75 33 32 20 20 6e 43 68 61 72 3b 20 20  .  u32  nChar;  
235f0 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74          /* Lengt
23600 68 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20  h of the string 
23610 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75 38 20 20  so far */.  u8  
23620 20 61 63 63 45 72 72 6f 72 3b 20 20 20 20 20 20   accError;      
23630 20 2f 2a 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d   /* SQLITE_NOMEM
23640 20 6f 72 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49   or SQLITE_TOOBI
23650 47 20 2a 2f 0a 20 20 75 38 20 20 20 70 72 69 6e  G */.  u8   prin
23660 74 66 46 6c 61 67 73 3b 20 20 20 20 2f 2a 20 53  tfFlags;    /* S
23670 51 4c 49 54 45 5f 50 52 49 4e 54 46 20 66 6c 61  QLITE_PRINTF fla
23680 67 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 23  gs below */.};.#
23690 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52  define SQLITE_PR
236a0 49 4e 54 46 5f 49 4e 54 45 52 4e 41 4c 20 30 78  INTF_INTERNAL 0x
236b0 30 31 20 20 2f 2a 20 49 6e 74 65 72 6e 61 6c 2d  01  /* Internal-
236c0 75 73 65 2d 6f 6e 6c 79 20 63 6f 6e 76 65 72 74  use-only convert
236d0 65 72 73 20 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23  ers allowed */.#
236e0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52  define SQLITE_PR
236f0 49 4e 54 46 5f 53 51 4c 46 55 4e 43 20 20 30 78  INTF_SQLFUNC  0x
23700 30 32 20 20 2f 2a 20 53 51 4c 20 66 75 6e 63 74  02  /* SQL funct
23710 69 6f 6e 20 61 72 67 75 6d 65 6e 74 73 20 74 6f  ion arguments to
23720 20 56 58 50 72 69 6e 74 66 20 2a 2f 0a 23 64 65   VXPrintf */.#de
23730 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e  fine SQLITE_PRIN
23740 54 46 5f 4d 41 4c 4c 4f 43 45 44 20 30 78 30 34  TF_MALLOCED 0x04
23750 20 20 2f 2a 20 54 72 75 65 20 69 66 20 78 54 65    /* True if xTe
23760 78 74 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20  xt is allocated 
23770 73 70 61 63 65 20 2a 2f 0a 0a 23 64 65 66 69 6e  space */..#defin
23780 65 20 69 73 4d 61 6c 6c 6f 63 65 64 28 58 29 20  e isMalloced(X) 
23790 20 28 28 28 58 29 2d 3e 70 72 69 6e 74 66 46 6c   (((X)->printfFl
237a0 61 67 73 20 26 20 53 51 4c 49 54 45 5f 50 52 49  ags & SQLITE_PRI
237b0 4e 54 46 5f 4d 41 4c 4c 4f 43 45 44 29 21 3d 30  NTF_MALLOCED)!=0
237c0 29 0a 0a 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69 6e  ).../*.** A poin
237d0 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72 75  ter to this stru
237e0 63 74 75 72 65 20 69 73 20 75 73 65 64 20 74 6f  cture is used to
237f0 20 63 6f 6d 6d 75 6e 69 63 61 74 65 20 69 6e 66   communicate inf
23800 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f 6d  ormation.** from
23810 20 73 71 6c 69 74 65 33 49 6e 69 74 20 61 6e 64   sqlite3Init and
23820 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61 20   OP_ParseSchema 
23830 69 6e 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33  into the sqlite3
23840 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f  InitCallback..*/
23850 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
23860 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
23870 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64          /* The d
23880 61 74 61 62 61 73 65 20 62 65 69 6e 67 20 69 6e  atabase being in
23890 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 63  itialized */.  c
238a0 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67 3b 20  har **pzErrMsg; 
238b0 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73     /* Error mess
238c0 61 67 65 20 73 74 6f 72 65 64 20 68 65 72 65 20  age stored here 
238d0 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20  */.  int iDb;   
238e0 20 20 20 20 20 20 20 20 20 2f 2a 20 30 20 66 6f           /* 0 fo
238f0 72 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e  r main database.
23900 20 20 31 20 66 6f 72 20 54 45 4d 50 2c 20 32 2e    1 for TEMP, 2.
23910 2e 20 66 6f 72 20 41 54 54 41 43 48 65 64 20 2a  . for ATTACHed *
23920 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20  /.  int rc;     
23930 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c          /* Resul
23940 74 20 63 6f 64 65 20 73 74 6f 72 65 64 20 68 65  t code stored he
23950 72 65 20 2a 2f 0a 7d 20 49 6e 69 74 44 61 74 61  re */.} InitData
23960 3b 0a 0a 2f 2a 0a 2a 2a 20 53 74 72 75 63 74 75  ;../*.** Structu
23970 72 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 67 6c  re containing gl
23980 6f 62 61 6c 20 63 6f 6e 66 69 67 75 72 61 74 69  obal configurati
23990 6f 6e 20 64 61 74 61 20 66 6f 72 20 74 68 65 20  on data for the 
239a0 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 0a  SQLite library..
239b0 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63  **.** This struc
239c0 74 75 72 65 20 61 6c 73 6f 20 63 6f 6e 74 61 69  ture also contai
239d0 6e 73 20 73 6f 6d 65 20 73 74 61 74 65 20 69 6e  ns some state in
239e0 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74  formation..*/.st
239f0 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66  ruct Sqlite3Conf
23a00 69 67 20 7b 0a 20 20 69 6e 74 20 62 4d 65 6d 73  ig {.  int bMems
23a10 74 61 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  tat;            
23a20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
23a30 20 74 6f 20 65 6e 61 62 6c 65 20 6d 65 6d 6f 72   to enable memor
23a40 79 20 73 74 61 74 75 73 20 2a 2f 0a 20 20 69 6e  y status */.  in
23a50 74 20 62 43 6f 72 65 4d 75 74 65 78 3b 20 20 20  t bCoreMutex;   
23a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a70 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c  /* True to enabl
23a80 65 20 63 6f 72 65 20 6d 75 74 65 78 69 6e 67 20  e core mutexing 
23a90 2a 2f 0a 20 20 69 6e 74 20 62 46 75 6c 6c 4d 75  */.  int bFullMu
23aa0 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  tex;            
23ab0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
23ac0 6f 20 65 6e 61 62 6c 65 20 66 75 6c 6c 20 6d 75  o enable full mu
23ad0 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  texing */.  int 
23ae0 62 4f 70 65 6e 55 72 69 3b 20 20 20 20 20 20 20  bOpenUri;       
23af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
23b00 20 54 72 75 65 20 74 6f 20 69 6e 74 65 72 70 72   True to interpr
23b10 65 74 20 66 69 6c 65 6e 61 6d 65 73 20 61 73 20  et filenames as 
23b20 55 52 49 73 20 2a 2f 0a 20 20 69 6e 74 20 62 55  URIs */.  int bU
23b30 73 65 43 69 73 3b 20 20 20 20 20 20 20 20 20 20  seCis;          
23b40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55              /* U
23b50 73 65 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 69  se covering indi
23b60 63 65 73 20 66 6f 72 20 66 75 6c 6c 2d 73 63 61  ces for full-sca
23b70 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 62 53 6d 61  ns */.  int bSma
23b80 6c 6c 4d 61 6c 6c 6f 63 3b 20 20 20 20 20 20 20  llMalloc;       
23b90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 76 6f            /* Avo
23ba0 69 64 20 6c 61 72 67 65 20 6d 65 6d 6f 72 79 20  id large memory 
23bb0 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 69 66 20 74  allocations if t
23bc0 72 75 65 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 53  rue */.  int mxS
23bd0 74 72 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20  trlen;          
23be0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
23bf0 78 69 6d 75 6d 20 73 74 72 69 6e 67 20 6c 65 6e  ximum string len
23c00 67 74 68 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 76  gth */.  int nev
23c10 65 72 43 6f 72 72 75 70 74 3b 20 20 20 20 20 20  erCorrupt;      
23c20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61             /* Da
23c30 74 61 62 61 73 65 20 69 73 20 61 6c 77 61 79 73  tabase is always
23c40 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 2a 2f 0a   well-formed */.
23c50 20 20 69 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69 64    int szLookasid
23c60 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
23c70 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c      /* Default l
23c80 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72 20  ookaside buffer 
23c90 73 69 7a 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c  size */.  int nL
23ca0 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20  ookaside;       
23cb0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
23cc0 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65  efault lookaside
23cd0 20 62 75 66 66 65 72 20 63 6f 75 6e 74 20 2a 2f   buffer count */
23ce0 0a 20 20 69 6e 74 20 6e 53 74 6d 74 53 70 69 6c  .  int nStmtSpil
23cf0 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  l;              
23d00 20 20 20 20 20 2f 2a 20 53 74 6d 74 2d 6a 6f 75       /* Stmt-jou
23d10 72 6e 61 6c 20 73 70 69 6c 6c 2d 74 6f 2d 64 69  rnal spill-to-di
23d20 73 6b 20 74 68 72 65 73 68 6f 6c 64 20 2a 2f 0a  sk threshold */.
23d30 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65    sqlite3_mem_me
23d40 74 68 6f 64 73 20 6d 3b 20 20 20 20 20 20 20 20  thods m;        
23d50 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c      /* Low-level
23d60 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
23d70 6f 6e 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a  on interface */.
23d80 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
23d90 6d 65 74 68 6f 64 73 20 6d 75 74 65 78 3b 20 20  methods mutex;  
23da0 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c      /* Low-level
23db0 20 6d 75 74 65 78 20 69 6e 74 65 72 66 61 63 65   mutex interface
23dc0 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 70 63   */.  sqlite3_pc
23dd0 61 63 68 65 5f 6d 65 74 68 6f 64 73 32 20 70 63  ache_methods2 pc
23de0 61 63 68 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c  ache2;  /* Low-l
23df0 65 76 65 6c 20 70 61 67 65 2d 63 61 63 68 65 20  evel page-cache 
23e00 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 76  interface */.  v
23e10 6f 69 64 20 2a 70 48 65 61 70 3b 20 20 20 20 20  oid *pHeap;     
23e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e30 20 2f 2a 20 48 65 61 70 20 73 74 6f 72 61 67 65   /* Heap storage
23e40 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20   space */.  int 
23e50 6e 48 65 61 70 3b 20 20 20 20 20 20 20 20 20 20  nHeap;          
23e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
23e70 20 53 69 7a 65 20 6f 66 20 70 48 65 61 70 5b 5d   Size of pHeap[]
23e80 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 71 2c   */.  int mnReq,
23e90 20 6d 78 52 65 71 3b 20 20 20 20 20 20 20 20 20   mxReq;         
23ea0 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20 61          /* Min a
23eb0 6e 64 20 6d 61 78 20 68 65 61 70 20 72 65 71 75  nd max heap requ
23ec0 65 73 74 73 20 73 69 7a 65 73 20 2a 2f 0a 20 20  ests sizes */.  
23ed0 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 7a  sqlite3_int64 sz
23ee0 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Mmap;           
23ef0 20 20 2f 2a 20 6d 6d 61 70 28 29 20 73 70 61 63    /* mmap() spac
23f00 65 20 70 65 72 20 6f 70 65 6e 20 66 69 6c 65 20  e per open file 
23f10 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74  */.  sqlite3_int
23f20 36 34 20 6d 78 4d 6d 61 70 3b 20 20 20 20 20 20  64 mxMmap;      
23f30 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75         /* Maximu
23f40 6d 20 76 61 6c 75 65 20 66 6f 72 20 73 7a 4d 6d  m value for szMm
23f50 61 70 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50  ap */.  void *pP
23f60 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  age;            
23f70 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67            /* Pag
23f80 65 20 63 61 63 68 65 20 6d 65 6d 6f 72 79 20 2a  e cache memory *
23f90 2f 0a 20 20 69 6e 74 20 73 7a 50 61 67 65 3b 20  /.  int szPage; 
23fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23fb0 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
23fc0 20 65 61 63 68 20 70 61 67 65 20 69 6e 20 70 50   each page in pP
23fd0 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e  age[] */.  int n
23fe0 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20  Page;           
23ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24000 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  Number of pages 
24010 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20  in pPage[] */.  
24020 69 6e 74 20 6d 78 50 61 72 73 65 72 53 74 61 63  int mxParserStac
24030 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  k;              
24040 20 20 2f 2a 20 6d 61 78 69 6d 75 6d 20 64 65 70    /* maximum dep
24050 74 68 20 6f 66 20 74 68 65 20 70 61 72 73 65 72  th of the parser
24060 20 73 74 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20   stack */.  int 
24070 73 68 61 72 65 64 43 61 63 68 65 45 6e 61 62 6c  sharedCacheEnabl
24080 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ed;           /*
24090 20 74 72 75 65 20 69 66 20 73 68 61 72 65 64 2d   true if shared-
240a0 63 61 63 68 65 20 6d 6f 64 65 20 65 6e 61 62 6c  cache mode enabl
240b0 65 64 20 2a 2f 0a 20 20 75 33 32 20 73 7a 50 6d  ed */.  u32 szPm
240c0 61 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  a;              
240d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78            /* Max
240e0 69 6d 75 6d 20 53 6f 72 74 65 72 20 50 4d 41 20  imum Sorter PMA 
240f0 73 69 7a 65 20 2a 2f 0a 20 20 2f 2a 20 54 68 65  size */.  /* The
24100 20 61 62 6f 76 65 20 6d 69 67 68 74 20 62 65 20   above might be 
24110 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 6e  initialized to n
24120 6f 6e 2d 7a 65 72 6f 2e 20 20 54 68 65 20 66 6f  on-zero.  The fo
24130 6c 6c 6f 77 69 6e 67 20 6e 65 65 64 20 74 6f 20  llowing need to 
24140 61 6c 77 61 79 73 0a 20 20 2a 2a 20 69 6e 69 74  always.  ** init
24150 69 61 6c 6c 79 20 62 65 20 7a 65 72 6f 2c 20 68  ially be zero, h
24160 6f 77 65 76 65 72 2e 20 2a 2f 0a 20 20 69 6e 74  owever. */.  int
24170 20 69 73 49 6e 69 74 3b 20 20 20 20 20 20 20 20   isInit;        
24180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
24190 2a 20 54 72 75 65 20 61 66 74 65 72 20 69 6e 69  * True after ini
241a0 74 69 61 6c 69 7a 61 74 69 6f 6e 20 68 61 73 20  tialization has 
241b0 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 69 6e  finished */.  in
241c0 74 20 69 6e 50 72 6f 67 72 65 73 73 3b 20 20 20  t inProgress;   
241d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
241e0 2f 2a 20 54 72 75 65 20 77 68 69 6c 65 20 69 6e  /* True while in
241f0 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 20  itialization in 
24200 70 72 6f 67 72 65 73 73 20 2a 2f 0a 20 20 69 6e  progress */.  in
24210 74 20 69 73 4d 75 74 65 78 49 6e 69 74 3b 20 20  t isMutexInit;  
24220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24230 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 75  /* True after mu
24240 74 65 78 65 73 20 61 72 65 20 69 6e 69 74 69 61  texes are initia
24250 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69  lized */.  int i
24260 73 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20 20 20 20  sMallocInit;    
24270 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24280 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f  True after mallo
24290 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64  c is initialized
242a0 20 2a 2f 0a 20 20 69 6e 74 20 69 73 50 43 61 63   */.  int isPCac
242b0 68 65 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20  heInit;         
242c0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
242d0 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20  after malloc is 
242e0 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
242f0 20 69 6e 74 20 6e 52 65 66 49 6e 69 74 4d 75 74   int nRefInitMut
24300 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ex;             
24310 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
24320 75 73 65 72 73 20 6f 66 20 70 49 6e 69 74 4d 75  users of pInitMu
24330 74 65 78 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  tex */.  sqlite3
24340 5f 6d 75 74 65 78 20 2a 70 49 6e 69 74 4d 75 74  _mutex *pInitMut
24350 65 78 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 75  ex;        /* Mu
24360 74 65 78 20 75 73 65 64 20 62 79 20 73 71 6c 69  tex used by sqli
24370 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29  te3_initialize()
24380 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 4c 6f   */.  void (*xLo
24390 67 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e  g)(void*,int,con
243a0 73 74 20 63 68 61 72 2a 29 3b 20 2f 2a 20 46 75  st char*); /* Fu
243b0 6e 63 74 69 6f 6e 20 66 6f 72 20 6c 6f 67 67 69  nction for loggi
243c0 6e 67 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 4c  ng */.  void *pL
243d0 6f 67 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  ogArg;          
243e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
243f0 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74  First argument t
24400 6f 20 78 4c 6f 67 28 29 20 2a 2f 0a 23 69 66 64  o xLog() */.#ifd
24410 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
24420 5f 53 51 4c 4c 4f 47 0a 20 20 76 6f 69 64 28 2a  _SQLLOG.  void(*
24430 78 53 71 6c 6c 6f 67 29 28 76 6f 69 64 2a 2c 73  xSqllog)(void*,s
24440 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
24450 61 72 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  ar*, int);.  voi
24460 64 20 2a 70 53 71 6c 6c 6f 67 41 72 67 3b 0a 23  d *pSqllogArg;.#
24470 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
24480 49 54 45 5f 56 44 42 45 5f 43 4f 56 45 52 41 47  ITE_VDBE_COVERAG
24490 45 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f  E.  /* The follo
244a0 77 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20 28 69  wing callback (i
244b0 66 20 6e 6f 74 20 4e 55 4c 4c 29 20 69 73 20 69  f not NULL) is i
244c0 6e 76 6f 6b 65 64 20 6f 6e 20 65 76 65 72 79 20  nvoked on every 
244d0 56 44 42 45 20 62 72 61 6e 63 68 0a 20 20 2a 2a  VDBE branch.  **
244e0 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 53 65 74   operation.  Set
244f0 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 75 73   the callback us
24500 69 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 43  ing SQLITE_TESTC
24510 54 52 4c 5f 56 44 42 45 5f 43 4f 56 45 52 41 47  TRL_VDBE_COVERAG
24520 45 2e 0a 20 20 2a 2f 0a 20 20 76 6f 69 64 20 28  E..  */.  void (
24530 2a 78 56 64 62 65 42 72 61 6e 63 68 29 28 76 6f  *xVdbeBranch)(vo
24540 69 64 2a 2c 75 6e 73 69 67 6e 65 64 20 69 53 72  id*,unsigned iSr
24550 63 4c 69 6e 65 2c 75 38 20 65 54 68 69 73 2c 75  cLine,u8 eThis,u
24560 38 20 65 4d 78 29 3b 20 20 2f 2a 20 43 61 6c 6c  8 eMx);  /* Call
24570 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  back */.  void *
24580 70 56 64 62 65 42 72 61 6e 63 68 41 72 67 3b 20  pVdbeBranchArg; 
24590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
245a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
245b0 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75 6d      /* 1st argum
245c0 65 6e 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  ent */.#endif.#i
245d0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54  fndef SQLITE_UNT
245e0 45 53 54 41 42 4c 45 0a 20 20 69 6e 74 20 28 2a  ESTABLE.  int (*
245f0 78 54 65 73 74 43 61 6c 6c 62 61 63 6b 29 28 69  xTestCallback)(i
24600 6e 74 29 3b 20 20 20 20 20 20 20 20 2f 2a 20 49  nt);        /* I
24610 6e 76 6f 6b 65 64 20 62 79 20 73 71 6c 69 74 65  nvoked by sqlite
24620 33 46 61 75 6c 74 53 69 6d 28 29 20 2a 2f 0a 23  3FaultSim() */.#
24630 65 6e 64 69 66 0a 20 20 69 6e 74 20 62 4c 6f 63  endif.  int bLoc
24640 61 6c 74 69 6d 65 46 61 75 6c 74 3b 20 20 20 20  altimeFault;    
24650 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
24660 65 20 74 6f 20 66 61 69 6c 20 6c 6f 63 61 6c 74  e to fail localt
24670 69 6d 65 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 20  ime() calls */. 
24680 20 69 6e 74 20 69 4f 6e 63 65 52 65 73 65 74 54   int iOnceResetT
24690 68 72 65 73 68 6f 6c 64 3b 20 20 20 20 20 20 20  hreshold;       
246a0 20 20 20 2f 2a 20 57 68 65 6e 20 74 6f 20 72 65     /* When to re
246b0 73 65 74 20 4f 50 5f 4f 6e 63 65 20 63 6f 75 6e  set OP_Once coun
246c0 74 65 72 73 20 2a 2f 0a 20 20 75 33 32 20 73 7a  ters */.  u32 sz
246d0 53 6f 72 74 65 72 52 65 66 3b 20 20 20 20 20 20  SorterRef;      
246e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
246f0 69 6e 20 73 69 7a 65 20 69 6e 20 62 79 74 65 73  in size in bytes
24700 20 74 6f 20 75 73 65 20 73 6f 72 74 65 72 2d 72   to use sorter-r
24710 65 66 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  efs */.};../*.**
24720 20 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75   This macro is u
24730 73 65 64 20 69 6e 73 69 64 65 20 6f 66 20 61 73  sed inside of as
24740 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
24750 73 20 74 6f 20 69 6e 64 69 63 61 74 65 20 74 68  s to indicate th
24760 61 74 0a 2a 2a 20 74 68 65 20 61 73 73 65 72 74  at.** the assert
24770 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 6f   is only valid o
24780 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20  n a well-formed 
24790 64 61 74 61 62 61 73 65 2e 20 20 49 6e 73 74 65  database.  Inste
247a0 61 64 20 6f 66 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  ad of:.**.**    
247b0 20 61 73 73 65 72 74 28 20 58 20 29 3b 0a 2a 2a   assert( X );.**
247c0 0a 2a 2a 20 4f 6e 65 20 77 72 69 74 65 73 3a 0a  .** One writes:.
247d0 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74  **.**     assert
247e0 28 20 58 20 7c 7c 20 43 4f 52 52 55 50 54 5f 44  ( X || CORRUPT_D
247f0 42 20 29 3b 0a 2a 2a 0a 2a 2a 20 43 4f 52 52 55  B );.**.** CORRU
24800 50 54 5f 44 42 20 69 73 20 74 72 75 65 20 64 75  PT_DB is true du
24810 72 69 6e 67 20 6e 6f 72 6d 61 6c 20 6f 70 65 72  ring normal oper
24820 61 74 69 6f 6e 2e 20 20 43 4f 52 52 55 50 54 5f  ation.  CORRUPT_
24830 44 42 20 64 6f 65 73 20 6e 6f 74 20 69 6e 64 69  DB does not indi
24840 63 61 74 65 0a 2a 2a 20 74 68 61 74 20 74 68 65  cate.** that the
24850 20 64 61 74 61 62 61 73 65 20 69 73 20 64 65 66   database is def
24860 69 6e 69 74 65 6c 79 20 63 6f 72 72 75 70 74 2c  initely corrupt,
24870 20 6f 6e 6c 79 20 74 68 61 74 20 69 74 20 6d 69   only that it mi
24880 67 68 74 20 62 65 20 63 6f 72 72 75 70 74 2e 0a  ght be corrupt..
24890 2a 2a 20 46 6f 72 20 6d 6f 73 74 20 74 65 73 74  ** For most test
248a0 20 63 61 73 65 73 2c 20 43 4f 52 52 55 50 54 5f   cases, CORRUPT_
248b0 44 42 20 69 73 20 73 65 74 20 74 6f 20 66 61 6c  DB is set to fal
248c0 73 65 20 75 73 69 6e 67 20 61 20 73 70 65 63 69  se using a speci
248d0 61 6c 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65  al.** sqlite3_te
248e0 73 74 5f 63 6f 6e 74 72 6f 6c 28 29 2e 20 20 54  st_control().  T
248f0 68 69 73 20 65 6e 61 62 6c 65 73 20 61 73 73 65  his enables asse
24900 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20  rt() statements 
24910 74 6f 20 70 72 6f 76 65 0a 2a 2a 20 74 68 69 6e  to prove.** thin
24920 67 73 20 74 68 61 74 20 61 72 65 20 61 6c 77 61  gs that are alwa
24930 79 73 20 74 72 75 65 20 66 6f 72 20 77 65 6c 6c  ys true for well
24940 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65  -formed database
24950 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f  s..*/.#define CO
24960 52 52 55 50 54 5f 44 42 20 20 28 73 71 6c 69 74  RRUPT_DB  (sqlit
24970 65 33 43 6f 6e 66 69 67 2e 6e 65 76 65 72 43 6f  e3Config.neverCo
24980 72 72 75 70 74 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a  rrupt==0)../*.**
24990 20 43 6f 6e 74 65 78 74 20 70 6f 69 6e 74 65 72   Context pointer
249a0 20 70 61 73 73 65 64 20 64 6f 77 6e 20 74 68 72   passed down thr
249b0 6f 75 67 68 20 74 68 65 20 74 72 65 65 2d 77 61  ough the tree-wa
249c0 6c 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 61  lk..*/.struct Wa
249d0 6c 6b 65 72 20 7b 0a 20 20 50 61 72 73 65 20 2a  lker {.  Parse *
249e0 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 20 20  pParse;         
249f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a00 20 20 20 2f 2a 20 50 61 72 73 65 72 20 63 6f 6e     /* Parser con
24a10 74 65 78 74 2e 20 20 2a 2f 0a 20 20 69 6e 74 20  text.  */.  int 
24a20 28 2a 78 45 78 70 72 43 61 6c 6c 62 61 63 6b 29  (*xExprCallback)
24a30 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29  (Walker*, Expr*)
24a40 3b 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63  ;     /* Callbac
24a50 6b 20 66 6f 72 20 65 78 70 72 65 73 73 69 6f 6e  k for expression
24a60 73 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 53 65  s */.  int (*xSe
24a70 6c 65 63 74 43 61 6c 6c 62 61 63 6b 29 28 57 61  lectCallback)(Wa
24a80 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 20  lker*,Select*); 
24a90 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72   /* Callback for
24aa0 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20 76 6f   SELECTs */.  vo
24ab0 69 64 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c  id (*xSelectCall
24ac0 62 61 63 6b 32 29 28 57 61 6c 6b 65 72 2a 2c 53  back2)(Walker*,S
24ad0 65 6c 65 63 74 2a 29 3b 2f 2a 20 53 65 63 6f 6e  elect*);/* Secon
24ae0 64 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53  d callback for S
24af0 45 4c 45 43 54 73 20 2a 2f 0a 20 20 69 6e 74 20  ELECTs */.  int 
24b00 77 61 6c 6b 65 72 44 65 70 74 68 3b 20 20 20 20  walkerDepth;    
24b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
24b30 6f 66 20 73 75 62 71 75 65 72 69 65 73 20 2a 2f  of subqueries */
24b40 0a 20 20 75 38 20 65 43 6f 64 65 3b 20 20 20 20  .  u8 eCode;    
24b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b60 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24b70 41 20 73 6d 61 6c 6c 20 70 72 6f 63 65 73 73 69  A small processi
24b80 6e 67 20 63 6f 64 65 20 2a 2f 0a 20 20 75 6e 69  ng code */.  uni
24b90 6f 6e 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  on {            
24ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24bb0 20 20 20 20 20 20 20 2f 2a 20 45 78 74 72 61 20         /* Extra 
24bc0 64 61 74 61 20 66 6f 72 20 63 61 6c 6c 62 61 63  data for callbac
24bd0 6b 20 2a 2f 0a 20 20 20 20 4e 61 6d 65 43 6f 6e  k */.    NameCon
24be0 74 65 78 74 20 2a 70 4e 43 3b 20 20 20 20 20 20  text *pNC;      
24bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c00 20 20 20 2f 2a 20 4e 61 6d 69 6e 67 20 63 6f 6e     /* Naming con
24c10 74 65 78 74 20 2a 2f 0a 20 20 20 20 69 6e 74 20  text */.    int 
24c20 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n;              
24c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c40 20 20 20 20 20 20 2f 2a 20 41 20 63 6f 75 6e 74        /* A count
24c50 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43  er */.    int iC
24c60 75 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ur;             
24c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c80 20 20 20 20 2f 2a 20 41 20 63 75 72 73 6f 72 20      /* A cursor 
24c90 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 53 72  number */.    Sr
24ca0 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b  cList *pSrcList;
24cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24cc0 20 20 20 20 20 20 20 20 2f 2a 20 46 52 4f 4d 20          /* FROM 
24cd0 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 73 74  clause */.    st
24ce0 72 75 63 74 20 53 72 63 43 6f 75 6e 74 20 2a 70  ruct SrcCount *p
24cf0 53 72 63 43 6f 75 6e 74 3b 20 20 20 20 20 20 20  SrcCount;       
24d00 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74          /* Count
24d10 69 6e 67 20 63 6f 6c 75 6d 6e 20 72 65 66 65 72  ing column refer
24d20 65 6e 63 65 73 20 2a 2f 0a 20 20 20 20 73 74 72  ences */.    str
24d30 75 63 74 20 43 43 75 72 48 69 6e 74 20 2a 70 43  uct CCurHint *pC
24d40 43 75 72 48 69 6e 74 3b 20 20 20 20 20 20 20 20  CurHint;        
24d50 20 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62         /* Used b
24d60 79 20 63 6f 64 65 43 75 72 73 6f 72 48 69 6e 74  y codeCursorHint
24d70 28 29 20 2a 2f 0a 20 20 20 20 69 6e 74 20 2a 61  () */.    int *a
24d80 69 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20  iCol;           
24d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24da0 20 20 20 20 2f 2a 20 61 72 72 61 79 20 6f 66 20      /* array of 
24db0 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 65 73 20 2a  column indexes *
24dc0 2f 0a 20 20 20 20 73 74 72 75 63 74 20 49 64 78  /.    struct Idx
24dd0 43 6f 76 65 72 20 2a 70 49 64 78 43 6f 76 65 72  Cover *pIdxCover
24de0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
24df0 2f 2a 20 43 68 65 63 6b 20 66 6f 72 20 69 6e 64  /* Check for ind
24e00 65 78 20 63 6f 76 65 72 61 67 65 20 2a 2f 0a 20  ex coverage */. 
24e10 20 20 20 73 74 72 75 63 74 20 49 64 78 45 78 70     struct IdxExp
24e20 72 54 72 61 6e 73 20 2a 70 49 64 78 54 72 61 6e  rTrans *pIdxTran
24e30 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  s;           /* 
24e40 43 6f 6e 76 65 72 74 20 69 64 78 65 64 20 65 78  Convert idxed ex
24e50 70 72 20 74 6f 20 63 6f 6c 75 6d 6e 20 2a 2f 0a  pr to column */.
24e60 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47      ExprList *pG
24e70 72 6f 75 70 42 79 3b 20 20 20 20 20 20 20 20 20  roupBy;         
24e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
24e90 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65   GROUP BY clause
24ea0 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a   */.    Select *
24eb0 70 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20  pSelect;        
24ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ed0 20 20 2f 2a 20 48 41 56 49 4e 47 20 74 6f 20 57    /* HAVING to W
24ee0 48 45 52 45 20 63 6c 61 75 73 65 20 63 74 78 20  HERE clause ctx 
24ef0 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 57 69  */.    struct Wi
24f00 6e 64 6f 77 52 65 77 72 69 74 65 20 2a 70 52 65  ndowRewrite *pRe
24f10 77 72 69 74 65 3b 20 20 20 20 20 20 20 20 20 20  write;          
24f20 20 2f 2a 20 57 69 6e 64 6f 77 20 72 65 77 72 69   /* Window rewri
24f30 74 65 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20  te context */.  
24f40 20 20 73 74 72 75 63 74 20 57 68 65 72 65 43 6f    struct WhereCo
24f50 6e 73 74 20 2a 70 43 6f 6e 73 74 3b 20 20 20 20  nst *pConst;    
24f60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57              /* W
24f70 48 45 52 45 20 63 6c 61 75 73 65 20 63 6f 6e 73  HERE clause cons
24f80 74 61 6e 74 73 20 2a 2f 0a 20 20 7d 20 75 3b 0a  tants */.  } u;.
24f90 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72 64 20 64  };../* Forward d
24fa0 65 63 6c 61 72 61 74 69 6f 6e 73 20 2a 2f 0a 69  eclarations */.i
24fb0 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78  nt sqlite3WalkEx
24fc0 70 72 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72  pr(Walker*, Expr
24fd0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
24fe0 61 6c 6b 45 78 70 72 4c 69 73 74 28 57 61 6c 6b  alkExprList(Walk
24ff0 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  er*, ExprList*);
25000 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b  .int sqlite3Walk
25010 53 65 6c 65 63 74 28 57 61 6c 6b 65 72 2a 2c 20  Select(Walker*, 
25020 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
25030 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 45  lite3WalkSelectE
25040 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c  xpr(Walker*, Sel
25050 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
25060 65 33 57 61 6c 6b 53 65 6c 65 63 74 46 72 6f 6d  e3WalkSelectFrom
25070 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74  (Walker*, Select
25080 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
25090 78 70 72 57 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b  xprWalkNoop(Walk
250a0 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74  er*, Expr*);.int
250b0 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57 61   sqlite3SelectWa
250c0 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65 72 2a 2c 20  lkNoop(Walker*, 
250d0 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
250e0 6c 69 74 65 33 53 65 6c 65 63 74 57 61 6c 6b 46  lite3SelectWalkF
250f0 61 69 6c 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c  ail(Walker*, Sel
25100 65 63 74 2a 29 3b 0a 23 69 66 64 65 66 20 53 51  ect*);.#ifdef SQ
25110 4c 49 54 45 5f 44 45 42 55 47 0a 76 6f 69 64 20  LITE_DEBUG.void 
25120 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57 61 6c  sqlite3SelectWal
25130 6b 41 73 73 65 72 74 32 28 57 61 6c 6b 65 72 2a  kAssert2(Walker*
25140 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 23 65 6e 64  , Select*);.#end
25150 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  if../*.** Return
25160 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20 70   code from the p
25170 61 72 73 65 2d 74 72 65 65 20 77 61 6c 6b 69 6e  arse-tree walkin
25180 67 20 70 72 69 6d 69 74 69 76 65 73 20 61 6e 64  g primitives and
25190 20 74 68 65 69 72 0a 2a 2a 20 63 61 6c 6c 62 61   their.** callba
251a0 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  cks..*/.#define 
251b0 57 52 43 5f 43 6f 6e 74 69 6e 75 65 20 20 20 20  WRC_Continue    
251c0 30 20 20 20 2f 2a 20 43 6f 6e 74 69 6e 75 65 20  0   /* Continue 
251d0 64 6f 77 6e 20 69 6e 74 6f 20 63 68 69 6c 64 72  down into childr
251e0 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52  en */.#define WR
251f0 43 5f 50 72 75 6e 65 20 20 20 20 20 20 20 31 20  C_Prune       1 
25200 20 20 2f 2a 20 4f 6d 69 74 20 63 68 69 6c 64 72    /* Omit childr
25210 65 6e 20 62 75 74 20 63 6f 6e 74 69 6e 75 65 20  en but continue 
25220 77 61 6c 6b 69 6e 67 20 73 69 62 6c 69 6e 67 73  walking siblings
25230 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f   */.#define WRC_
25240 41 62 6f 72 74 20 20 20 20 20 20 20 32 20 20 20  Abort       2   
25250 2f 2a 20 41 62 61 6e 64 6f 6e 20 74 68 65 20 74  /* Abandon the t
25260 72 65 65 20 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a  ree walk */../*.
25270 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
25280 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
25290 20 72 65 70 72 65 73 65 6e 74 73 20 61 20 73 65   represents a se
252a0 74 20 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  t of one or more
252b0 20 43 54 45 73 0a 2a 2a 20 28 63 6f 6d 6d 6f 6e   CTEs.** (common
252c0 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f   table expressio
252d0 6e 73 29 20 63 72 65 61 74 65 64 20 62 79 20 61  ns) created by a
252e0 20 73 69 6e 67 6c 65 20 57 49 54 48 20 63 6c 61   single WITH cla
252f0 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57  use..*/.struct W
25300 69 74 68 20 7b 0a 20 20 69 6e 74 20 6e 43 74 65  ith {.  int nCte
25310 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
25320 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
25330 72 20 6f 66 20 43 54 45 73 20 69 6e 20 74 68 65  r of CTEs in the
25340 20 57 49 54 48 20 63 6c 61 75 73 65 20 2a 2f 0a   WITH clause */.
25350 20 20 57 69 74 68 20 2a 70 4f 75 74 65 72 3b 20    With *pOuter; 
25360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25370 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 69 6e 67 20    /* Containing 
25380 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72 20  WITH clause, or 
25390 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74 72 75 63 74  NULL */.  struct
253a0 20 43 74 65 20 7b 20 20 20 20 20 20 20 20 20 20   Cte {          
253b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72            /* For
253c0 20 65 61 63 68 20 43 54 45 20 69 6e 20 74 68 65   each CTE in the
253d0 20 57 49 54 48 20 63 6c 61 75 73 65 2e 2e 2e 2e   WITH clause....
253e0 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e   */.    char *zN
253f0 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
25400 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
25410 6f 66 20 74 68 69 73 20 43 54 45 20 2a 2f 0a 20  of this CTE */. 
25420 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43 6f     ExprList *pCo
25430 6c 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ls;             
25440 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 65 78     /* List of ex
25450 70 6c 69 63 69 74 20 63 6f 6c 75 6d 6e 20 6e 61  plicit column na
25460 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a  mes, or NULL */.
25470 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c      Select *pSel
25480 65 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ect;            
25490 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66 69 6e      /* The defin
254a0 69 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 43 54  ition of this CT
254b0 45 20 2a 2f 0a 20 20 20 20 63 6f 6e 73 74 20 63  E */.    const c
254c0 68 61 72 20 2a 7a 43 74 65 45 72 72 3b 20 20 20  har *zCteErr;   
254d0 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6f           /* Erro
254e0 72 20 6d 65 73 73 61 67 65 20 66 6f 72 20 63 69  r message for ci
254f0 72 63 75 6c 61 72 20 72 65 66 65 72 65 6e 63 65  rcular reference
25500 73 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 0a 7d  s */.  } a[1];.}
25510 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
25520 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 41 6e 20  _DEBUG./*.** An 
25530 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
25540 54 72 65 65 56 69 65 77 20 6f 62 6a 65 63 74 20  TreeView object 
25550 69 73 20 75 73 65 64 20 66 6f 72 20 70 72 69 6e  is used for prin
25560 74 69 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e 74  ting the content
25570 20 6f 66 0a 2a 2a 20 64 61 74 61 20 73 74 72 75   of.** data stru
25580 63 74 75 72 65 73 20 6f 6e 20 73 71 6c 69 74 65  ctures on sqlite
25590 33 44 65 62 75 67 50 72 69 6e 74 66 28 29 20 75  3DebugPrintf() u
255a0 73 69 6e 67 20 61 20 74 72 65 65 2d 6c 69 6b 65  sing a tree-like
255b0 20 76 69 65 77 2e 0a 2a 2f 0a 73 74 72 75 63 74   view..*/.struct
255c0 20 54 72 65 65 56 69 65 77 20 7b 0a 20 20 69 6e   TreeView {.  in
255d0 74 20 69 4c 65 76 65 6c 3b 20 20 20 20 20 20 20  t iLevel;       
255e0 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 6c        /* Which l
255f0 65 76 65 6c 20 6f 66 20 74 68 65 20 74 72 65 65  evel of the tree
25600 20 77 65 20 61 72 65 20 6f 6e 20 2a 2f 0a 20 20   we are on */.  
25610 75 38 20 20 62 4c 69 6e 65 5b 31 30 30 5d 3b 20  u8  bLine[100]; 
25620 20 20 20 20 20 20 20 20 2f 2a 20 44 72 61 77 20          /* Draw 
25630 76 65 72 74 69 63 61 6c 20 69 6e 20 63 6f 6c 75  vertical in colu
25640 6d 6e 20 69 20 69 66 20 62 4c 69 6e 65 5b 69 5d  mn i if bLine[i]
25650 20 69 73 20 74 72 75 65 20 2a 2f 0a 7d 3b 0a 23   is true */.};.#
25660 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
25670 44 45 42 55 47 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  DEBUG */../*.** 
25680 54 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20 75  This object is u
25690 73 65 64 20 69 6e 20 76 61 72 69 6f 69 75 73 20  sed in varioius 
256a0 77 61 79 73 2c 20 61 6c 6c 20 72 65 6c 61 74 65  ways, all relate
256b0 64 20 74 6f 20 77 69 6e 64 6f 77 20 66 75 6e 63  d to window func
256c0 74 69 6f 6e 73 0a 2a 2a 0a 2a 2a 20 20 20 28 31  tions.**.**   (1
256d0 29 20 41 20 73 69 6e 67 6c 65 20 69 6e 73 74 61  ) A single insta
256e0 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75  nce of this stru
256f0 63 74 75 72 65 20 69 73 20 61 74 74 61 63 68 65  cture is attache
25700 64 20 74 6f 20 74 68 65 0a 2a 2a 20 20 20 20 20  d to the.**     
25710 20 20 74 68 65 20 45 78 70 72 2e 70 57 69 6e 20    the Expr.pWin 
25720 66 69 65 6c 64 20 66 6f 72 20 65 61 63 68 20 77  field for each w
25730 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 20 69  indow function i
25740 6e 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  n an expression 
25750 74 72 65 65 2e 0a 2a 2a 20 20 20 20 20 20 20 54  tree..**       T
25760 68 69 73 20 6f 62 6a 65 63 74 20 68 6f 6c 64 73  his object holds
25770 20 74 68 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e   the information
25780 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68   contained in th
25790 65 20 4f 56 45 52 20 63 6c 61 75 73 65 2c 0a 2a  e OVER clause,.*
257a0 2a 20 20 20 20 20 20 20 70 6c 75 73 20 61 64 64  *       plus add
257b0 69 74 69 6f 6e 61 6c 20 66 69 65 6c 64 73 20 75  itional fields u
257c0 73 65 64 20 64 75 72 69 6e 67 20 63 6f 64 65 20  sed during code 
257d0 67 65 6e 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a  generation..**.*
257e0 2a 20 20 20 28 32 29 20 41 6c 6c 20 77 69 6e 64  *   (2) All wind
257f0 6f 77 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20  ow functions in 
25800 61 20 73 69 6e 67 6c 65 20 53 45 4c 45 43 54 20  a single SELECT 
25810 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 2d 6c 69  form a linked-li
25820 73 74 0a 2a 2a 20 20 20 20 20 20 20 61 74 74 61  st.**       atta
25830 63 68 65 64 20 74 6f 20 53 65 6c 65 63 74 2e 70  ched to Select.p
25840 57 69 6e 2e 20 20 54 68 65 20 57 69 6e 64 6f 77  Win.  The Window
25850 2e 70 46 75 6e 63 20 61 6e 64 20 57 69 6e 64 6f  .pFunc and Windo
25860 77 2e 70 45 78 70 72 0a 2a 2a 20 20 20 20 20 20  w.pExpr.**      
25870 20 66 69 65 6c 64 73 20 70 6f 69 6e 74 20 62 61   fields point ba
25880 63 6b 20 74 6f 20 74 68 65 20 65 78 70 72 65 73  ck to the expres
25890 73 69 6f 6e 20 74 68 61 74 20 69 73 20 74 68 65  sion that is the
258a0 20 77 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e   window function
258b0 2e 0a 2a 2a 0a 2a 2a 20 20 20 28 33 29 20 54 68  ..**.**   (3) Th
258c0 65 20 74 65 72 6d 73 20 6f 66 20 74 68 65 20 57  e terms of the W
258d0 49 4e 44 4f 57 20 63 6c 61 75 73 65 20 6f 66 20  INDOW clause of 
258e0 61 20 53 45 4c 45 43 54 20 61 72 65 20 69 6e 73  a SELECT are ins
258f0 74 61 6e 63 65 73 20 6f 66 20 74 68 69 73 0a 2a  tances of this.*
25900 2a 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 6f  *       object o
25910 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  n a linked list 
25920 61 74 74 61 63 68 65 64 20 74 6f 20 53 65 6c 65  attached to Sele
25930 63 74 2e 70 57 69 6e 44 65 66 6e 2e 0a 2a 2a 0a  ct.pWinDefn..**.
25940 2a 2a 20 54 68 65 20 75 73 65 73 20 28 31 29 20  ** The uses (1) 
25950 61 6e 64 20 28 32 29 20 61 72 65 20 72 65 61 6c  and (2) are real
25960 6c 79 20 74 68 65 20 73 61 6d 65 20 57 69 6e 64  ly the same Wind
25970 6f 77 20 6f 62 6a 65 63 74 20 74 68 61 74 20 6a  ow object that j
25980 75 73 74 20 68 61 70 70 65 6e 73 0a 2a 2a 20 74  ust happens.** t
25990 6f 20 62 65 20 61 63 63 65 73 73 69 62 6c 65 20  o be accessible 
259a0 69 6e 20 74 77 6f 20 64 69 66 66 65 72 65 6e 74  in two different
259b0 20 77 61 79 73 2e 20 20 55 73 65 20 28 33 29 20   ways.  Use (3) 
259c0 69 73 20 61 72 65 20 73 65 70 61 72 61 74 65 20  is are separate 
259d0 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74 72 75  objects..*/.stru
259e0 63 74 20 57 69 6e 64 6f 77 20 7b 0a 20 20 63 68  ct Window {.  ch
259f0 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
25a00 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
25a10 20 77 69 6e 64 6f 77 20 28 6d 61 79 20 62 65 20   window (may be 
25a20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 45 78 70 72 4c  NULL) */.  ExprL
25a30 69 73 74 20 2a 70 50 61 72 74 69 74 69 6f 6e 3b  ist *pPartition;
25a40 20 20 20 2f 2a 20 50 41 52 54 49 54 49 4f 4e 20     /* PARTITION 
25a50 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45  BY clause */.  E
25a60 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42  xprList *pOrderB
25a70 79 3b 20 20 20 20 20 2f 2a 20 4f 52 44 45 52 20  y;     /* ORDER 
25a80 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75  BY clause */.  u
25a90 38 20 65 54 79 70 65 3b 20 20 20 20 20 20 20 20  8 eType;        
25aa0 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 52 41 4e         /* TK_RAN
25ab0 47 45 20 6f 72 20 54 4b 5f 52 4f 57 53 20 2a 2f  GE or TK_ROWS */
25ac0 0a 20 20 75 38 20 65 53 74 61 72 74 3b 20 20 20  .  u8 eStart;   
25ad0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 4e             /* UN
25ae0 42 4f 55 4e 44 45 44 2c 20 43 55 52 52 45 4e 54  BOUNDED, CURRENT
25af0 2c 20 50 52 45 43 45 44 49 4e 47 20 6f 72 20 46  , PRECEDING or F
25b00 4f 4c 4c 4f 57 49 4e 47 20 2a 2f 0a 20 20 75 38  OLLOWING */.  u8
25b10 20 65 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20   eEnd;          
25b20 20 20 20 20 20 20 2f 2a 20 55 4e 42 4f 55 4e 44        /* UNBOUND
25b30 45 44 2c 20 43 55 52 52 45 4e 54 2c 20 50 52 45  ED, CURRENT, PRE
25b40 43 45 44 49 4e 47 20 6f 72 20 46 4f 4c 4c 4f 57  CEDING or FOLLOW
25b50 49 4e 47 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  ING */.  Expr *p
25b60 53 74 61 72 74 3b 20 20 20 20 20 20 20 20 20 20  Start;          
25b70 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 66   /* Expression f
25b80 6f 72 20 22 3c 65 78 70 72 3e 20 50 52 45 43 45  or "<expr> PRECE
25b90 44 49 4e 47 22 20 2a 2f 0a 20 20 45 78 70 72 20  DING" */.  Expr 
25ba0 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20  *pEnd;          
25bb0 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e     /* Expression
25bc0 20 66 6f 72 20 22 3c 65 78 70 72 3e 20 46 4f 4c   for "<expr> FOL
25bd0 4c 4f 57 49 4e 47 22 20 2a 2f 0a 20 20 57 69 6e  LOWING" */.  Win
25be0 64 6f 77 20 2a 70 4e 65 78 74 57 69 6e 3b 20 20  dow *pNextWin;  
25bf0 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 6e       /* Next win
25c00 64 6f 77 20 66 75 6e 63 74 69 6f 6e 20 62 65 6c  dow function bel
25c10 6f 6e 67 69 6e 67 20 74 6f 20 74 68 69 73 20 53  onging to this S
25c20 45 4c 45 43 54 20 2a 2f 0a 20 20 45 78 70 72 20  ELECT */.  Expr 
25c30 2a 70 46 69 6c 74 65 72 3b 20 20 20 20 20 20 20  *pFilter;       
25c40 20 20 20 2f 2a 20 54 68 65 20 46 49 4c 54 45 52     /* The FILTER
25c50 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20   expression */. 
25c60 20 46 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b   FuncDef *pFunc;
25c70 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
25c80 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e  function */.  in
25c90 74 20 69 45 70 68 43 73 72 3b 20 20 20 20 20 20  t iEphCsr;      
25ca0 20 20 20 20 20 20 2f 2a 20 50 61 72 74 69 74 69        /* Partiti
25cb0 6f 6e 20 62 75 66 66 65 72 20 6f 72 20 50 65 65  on buffer or Pee
25cc0 72 20 62 75 66 66 65 72 20 2a 2f 0a 20 20 69 6e  r buffer */.  in
25cd0 74 20 72 65 67 41 63 63 75 6d 3b 0a 20 20 69 6e  t regAccum;.  in
25ce0 74 20 72 65 67 52 65 73 75 6c 74 3b 0a 20 20 69  t regResult;.  i
25cf0 6e 74 20 63 73 72 41 70 70 3b 20 20 20 20 20 20  nt csrApp;      
25d00 20 20 20 20 20 20 20 2f 2a 20 46 75 6e 63 74 69         /* Functi
25d10 6f 6e 20 63 75 72 73 6f 72 20 28 75 73 65 64 20  on cursor (used 
25d20 62 79 20 6d 69 6e 2f 6d 61 78 29 20 2a 2f 0a 20  by min/max) */. 
25d30 20 69 6e 74 20 72 65 67 41 70 70 3b 20 20 20 20   int regApp;    
25d40 20 20 20 20 20 20 20 20 20 2f 2a 20 46 75 6e 63           /* Func
25d50 74 69 6f 6e 20 72 65 67 69 73 74 65 72 20 28 61  tion register (a
25d60 6c 73 6f 20 75 73 65 64 20 62 79 20 6d 69 6e 2f  lso used by min/
25d70 6d 61 78 29 20 2a 2f 0a 20 20 69 6e 74 20 72 65  max) */.  int re
25d80 67 50 61 72 74 3b 20 20 20 20 20 20 20 20 20 20  gPart;          
25d90 20 20 2f 2a 20 46 69 72 73 74 20 69 6e 20 61 20    /* First in a 
25da0 73 65 74 20 6f 66 20 72 65 67 69 73 74 65 72 73  set of registers
25db0 20 68 6f 6c 64 69 6e 67 20 50 41 52 54 49 54 49   holding PARTITI
25dc0 4f 4e 20 42 59 0a 20 20 20 20 20 20 20 20 20 20  ON BY.          
25dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25de0 2a 2a 20 61 6e 64 20 4f 52 44 45 52 20 42 59 20  ** and ORDER BY 
25df0 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 77  values for the w
25e00 69 6e 64 6f 77 20 2a 2f 0a 20 20 45 78 70 72 20  indow */.  Expr 
25e10 2a 70 4f 77 6e 65 72 3b 20 20 20 20 20 20 20 20  *pOwner;        
25e20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e     /* Expression
25e30 20 6f 62 6a 65 63 74 20 74 68 69 73 20 77 69 6e   object this win
25e40 64 6f 77 20 69 73 20 61 74 74 61 63 68 65 64 20  dow is attached 
25e50 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75 66  to */.  int nBuf
25e60 66 65 72 43 6f 6c 3b 20 20 20 20 20 20 20 20 20  ferCol;         
25e70 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
25e80 75 6d 6e 73 20 69 6e 20 62 75 66 66 65 72 20 74  umns in buffer t
25e90 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 69 41  able */.  int iA
25ea0 72 67 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20  rgCol;          
25eb0 20 20 2f 2a 20 4f 66 66 73 65 74 20 6f 66 20 66    /* Offset of f
25ec0 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 66 6f  irst argument fo
25ed0 72 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  r this function 
25ee0 2a 2f 0a 7d 3b 0a 0a 23 69 66 6e 64 65 66 20 53  */.};..#ifndef S
25ef0 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f  QLITE_OMIT_WINDO
25f00 57 46 55 4e 43 0a 76 6f 69 64 20 73 71 6c 69 74  WFUNC.void sqlit
25f10 65 33 57 69 6e 64 6f 77 44 65 6c 65 74 65 28 73  e3WindowDelete(s
25f20 71 6c 69 74 65 33 2a 2c 20 57 69 6e 64 6f 77 2a  qlite3*, Window*
25f30 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57  );.void sqlite3W
25f40 69 6e 64 6f 77 4c 69 73 74 44 65 6c 65 74 65 28  indowListDelete(
25f50 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 57 69 6e  sqlite3 *db, Win
25f60 64 6f 77 20 2a 70 29 3b 0a 57 69 6e 64 6f 77 20  dow *p);.Window 
25f70 2a 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 41 6c  *sqlite3WindowAl
25f80 6c 6f 63 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  loc(Parse*, int,
25f90 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20 69 6e 74   int, Expr*, int
25fa0 20 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20   , Expr*);.void 
25fb0 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 41 74 74  sqlite3WindowAtt
25fc0 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ach(Parse*, Expr
25fd0 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a 69 6e 74  *, Window*);.int
25fe0 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77 43 6f   sqlite3WindowCo
25ff0 6d 70 61 72 65 28 50 61 72 73 65 2a 2c 20 57 69  mpare(Parse*, Wi
26000 6e 64 6f 77 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b  ndow*, Window*);
26010 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 6e  .void sqlite3Win
26020 64 6f 77 43 6f 64 65 49 6e 69 74 28 50 61 72 73  dowCodeInit(Pars
26030 65 2a 2c 20 57 69 6e 64 6f 77 2a 29 3b 0a 76 6f  e*, Window*);.vo
26040 69 64 20 73 71 6c 69 74 65 33 57 69 6e 64 6f 77  id sqlite3Window
26050 43 6f 64 65 53 74 65 70 28 50 61 72 73 65 2a 2c  CodeStep(Parse*,
26060 20 53 65 6c 65 63 74 2a 2c 20 57 68 65 72 65 49   Select*, WhereI
26070 6e 66 6f 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  nfo*, int, int);
26080 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 69 6e 64  .int sqlite3Wind
26090 6f 77 52 65 77 72 69 74 65 28 50 61 72 73 65 2a  owRewrite(Parse*
260a0 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  , Select*);.int 
260b0 73 71 6c 69 74 65 33 45 78 70 61 6e 64 53 75 62  sqlite3ExpandSub
260c0 71 75 65 72 79 28 50 61 72 73 65 2a 2c 20 73 74  query(Parse*, st
260d0 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65  ruct SrcList_ite
260e0 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  m*);.void sqlite
260f0 33 57 69 6e 64 6f 77 55 70 64 61 74 65 28 50 61  3WindowUpdate(Pa
26100 72 73 65 2a 2c 20 57 69 6e 64 6f 77 2a 2c 20 57  rse*, Window*, W
26110 69 6e 64 6f 77 2a 2c 20 46 75 6e 63 44 65 66 2a  indow*, FuncDef*
26120 29 3b 0a 57 69 6e 64 6f 77 20 2a 73 71 6c 69 74  );.Window *sqlit
26130 65 33 57 69 6e 64 6f 77 44 75 70 28 73 71 6c 69  e3WindowDup(sqli
26140 74 65 33 20 2a 64 62 2c 20 45 78 70 72 20 2a 70  te3 *db, Expr *p
26150 4f 77 6e 65 72 2c 20 57 69 6e 64 6f 77 20 2a 70  Owner, Window *p
26160 29 3b 0a 57 69 6e 64 6f 77 20 2a 73 71 6c 69 74  );.Window *sqlit
26170 65 33 57 69 6e 64 6f 77 4c 69 73 74 44 75 70 28  e3WindowListDup(
26180 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 57 69 6e  sqlite3 *db, Win
26190 64 6f 77 20 2a 70 29 3b 0a 76 6f 69 64 20 73 71  dow *p);.void sq
261a0 6c 69 74 65 33 57 69 6e 64 6f 77 46 75 6e 63 74  lite3WindowFunct
261b0 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 23 65 6c 73  ions(void);.#els
261c0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
261d0 65 33 57 69 6e 64 6f 77 44 65 6c 65 74 65 28 61  e3WindowDelete(a
261e0 2c 62 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,b).# define sql
261f0 69 74 65 33 57 69 6e 64 6f 77 46 75 6e 63 74 69  ite3WindowFuncti
26200 6f 6e 73 28 29 0a 23 20 64 65 66 69 6e 65 20 73  ons().# define s
26210 71 6c 69 74 65 33 57 69 6e 64 6f 77 41 74 74 61  qlite3WindowAtta
26220 63 68 28 61 2c 62 2c 63 29 0a 23 65 6e 64 69 66  ch(a,b,c).#endif
26230 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e 67  ../*.** Assuming
26240 20 7a 49 6e 20 70 6f 69 6e 74 73 20 74 6f 20 74   zIn points to t
26250 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f 66  he first byte of
26260 20 61 20 55 54 46 2d 38 20 63 68 61 72 61 63 74   a UTF-8 charact
26270 65 72 2c 0a 2a 2a 20 61 64 76 61 6e 63 65 20 7a  er,.** advance z
26280 49 6e 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74  In to point to t
26290 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f 66  he first byte of
262a0 20 74 68 65 20 6e 65 78 74 20 55 54 46 2d 38 20   the next UTF-8 
262b0 63 68 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 23 64  character..*/.#d
262c0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4b 49  efine SQLITE_SKI
262d0 50 5f 55 54 46 38 28 7a 49 6e 29 20 7b 20 20 20  P_UTF8(zIn) {   
262e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
262f0 20 20 20 20 20 5c 0a 20 20 69 66 28 20 28 2a 28       \.  if( (*(
26300 7a 49 6e 2b 2b 29 29 3e 3d 30 78 63 30 20 29 7b  zIn++))>=0xc0 ){
26310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a                \.
26330 20 20 20 20 77 68 69 6c 65 28 20 28 2a 7a 49 6e      while( (*zIn
26340 20 26 20 30 78 63 30 29 3d 3d 30 78 38 30 20 29   & 0xc0)==0x80 )
26350 7b 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20 20 20  { zIn++; }      
26360 20 20 20 20 20 20 20 5c 0a 20 20 7d 20 20 20 20         \.  }    
26370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
263a0 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53  \.}../*.** The S
263b0 51 4c 49 54 45 5f 2a 5f 42 4b 50 54 20 6d 61 63  QLITE_*_BKPT mac
263c0 72 6f 73 20 61 72 65 20 73 75 62 73 74 69 74 75  ros are substitu
263d0 74 65 73 20 66 6f 72 20 74 68 65 20 65 72 72 6f  tes for the erro
263e0 72 20 63 6f 64 65 73 20 77 69 74 68 0a 2a 2a 20  r codes with.** 
263f0 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 62 75  the same name bu
26400 74 20 77 69 74 68 6f 75 74 20 74 68 65 20 5f 42  t without the _B
26410 4b 50 54 20 73 75 66 66 69 78 2e 20 20 54 68 65  KPT suffix.  The
26420 73 65 20 6d 61 63 72 6f 73 20 69 6e 76 6f 6b 65  se macros invoke
26430 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 74 68 61  .** routines tha
26440 74 20 72 65 70 6f 72 74 20 74 68 65 20 6c 69 6e  t report the lin
26450 65 2d 6e 75 6d 62 65 72 20 6f 6e 20 77 68 69 63  e-number on whic
26460 68 20 74 68 65 20 65 72 72 6f 72 20 6f 72 69 67  h the error orig
26470 69 6e 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20  inated.** using 
26480 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29 2e 20 20  sqlite3_log().  
26490 54 68 65 20 72 6f 75 74 69 6e 65 73 20 61 6c 73  The routines als
264a0 6f 20 70 72 6f 76 69 64 65 20 61 20 63 6f 6e 76  o provide a conv
264b0 65 6e 69 65 6e 74 20 70 6c 61 63 65 0a 2a 2a 20  enient place.** 
264c0 74 6f 20 73 65 74 20 61 20 64 65 62 75 67 67 65  to set a debugge
264d0 72 20 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f  r breakpoint..*/
264e0 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 70 6f  .int sqlite3Repo
264f0 72 74 45 72 72 6f 72 28 69 6e 74 20 69 45 72 72  rtError(int iErr
26500 2c 20 69 6e 74 20 6c 69 6e 65 6e 6f 2c 20 63 6f  , int lineno, co
26510 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65 29  nst char *zType)
26520 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72  ;.int sqlite3Cor
26530 72 75 70 74 45 72 72 6f 72 28 69 6e 74 29 3b 0a  ruptError(int);.
26540 69 6e 74 20 73 71 6c 69 74 65 33 4d 69 73 75 73  int sqlite3Misus
26550 65 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74  eError(int);.int
26560 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e   sqlite3Cantopen
26570 45 72 72 6f 72 28 69 6e 74 29 3b 0a 23 64 65 66  Error(int);.#def
26580 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  ine SQLITE_CORRU
26590 50 54 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43  PT_BKPT sqlite3C
265a0 6f 72 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49  orruptError(__LI
265b0 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51  NE__).#define SQ
265c0 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54  LITE_MISUSE_BKPT
265d0 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72   sqlite3MisuseEr
265e0 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64  ror(__LINE__).#d
265f0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 41 4e  efine SQLITE_CAN
26600 54 4f 50 45 4e 5f 42 4b 50 54 20 73 71 6c 69 74  TOPEN_BKPT sqlit
26610 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28  e3CantopenError(
26620 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 69 66 64 65 66  __LINE__).#ifdef
26630 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
26640 69 6e 74 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d  int sqlite3Nomem
26650 45 72 72 6f 72 28 69 6e 74 29 3b 0a 20 20 69 6e  Error(int);.  in
26660 74 20 73 71 6c 69 74 65 33 49 6f 65 72 72 6e 6f  t sqlite3Ioerrno
26670 6d 65 6d 45 72 72 6f 72 28 69 6e 74 29 3b 0a 20  memError(int);. 
26680 20 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72   int sqlite3Corr
26690 75 70 74 50 67 6e 6f 45 72 72 6f 72 28 69 6e 74  uptPgnoError(int
266a0 2c 50 67 6e 6f 29 3b 0a 23 20 64 65 66 69 6e 65  ,Pgno);.# define
266b0 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b   SQLITE_NOMEM_BK
266c0 50 54 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d 45  PT sqlite3NomemE
266d0 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23  rror(__LINE__).#
266e0 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49   define SQLITE_I
266f0 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20  OERR_NOMEM_BKPT 
26700 73 71 6c 69 74 65 33 49 6f 65 72 72 6e 6f 6d 65  sqlite3Ioerrnome
26710 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29  mError(__LINE__)
26720 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
26730 5f 43 4f 52 52 55 50 54 5f 50 47 4e 4f 28 50 29  _CORRUPT_PGNO(P)
26740 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 50   sqlite3CorruptP
26750 67 6e 6f 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f  gnoError(__LINE_
26760 5f 2c 28 50 29 29 0a 23 65 6c 73 65 0a 23 20 64  _,(P)).#else.# d
26770 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 4d  efine SQLITE_NOM
26780 45 4d 5f 42 4b 50 54 20 53 51 4c 49 54 45 5f 4e  EM_BKPT SQLITE_N
26790 4f 4d 45 4d 0a 23 20 64 65 66 69 6e 65 20 53 51  OMEM.# define SQ
267a0 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d  LITE_IOERR_NOMEM
267b0 5f 42 4b 50 54 20 53 51 4c 49 54 45 5f 49 4f 45  _BKPT SQLITE_IOE
267c0 52 52 5f 4e 4f 4d 45 4d 0a 23 20 64 65 66 69 6e  RR_NOMEM.# defin
267d0 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  e SQLITE_CORRUPT
267e0 5f 50 47 4e 4f 28 50 29 20 73 71 6c 69 74 65 33  _PGNO(P) sqlite3
267f0 43 6f 72 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c  CorruptError(__L
26800 49 4e 45 5f 5f 29 0a 23 65 6e 64 69 66 0a 0a 2f  INE__).#endif../
26810 2a 0a 2a 2a 20 46 54 53 33 20 61 6e 64 20 46 54  *.** FTS3 and FT
26820 53 34 20 62 6f 74 68 20 72 65 71 75 69 72 65 20  S4 both require 
26830 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73 75  virtual table su
26840 70 70 6f 72 74 0a 2a 2f 0a 23 69 66 20 64 65 66  pport.*/.#if def
26850 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
26860 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 23  _VIRTUALTABLE).#
26870 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e   undef SQLITE_EN
26880 41 42 4c 45 5f 46 54 53 33 0a 23 20 75 6e 64 65  ABLE_FTS3.# unde
26890 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
268a0 46 54 53 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  FTS4.#endif../*.
268b0 2a 2a 20 46 54 53 34 20 69 73 20 72 65 61 6c 6c  ** FTS4 is reall
268c0 79 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 66  y an extension f
268d0 6f 72 20 46 54 53 33 2e 20 20 49 74 20 69 73 20  or FTS3.  It is 
268e0 65 6e 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68  enabled using th
268f0 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42  e.** SQLITE_ENAB
26900 4c 45 5f 46 54 53 33 20 6d 61 63 72 6f 2e 20 20  LE_FTS3 macro.  
26910 42 75 74 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e  But to avoid con
26920 66 75 73 69 6f 6e 20 77 65 20 61 6c 73 6f 20 63  fusion we also c
26930 61 6c 6c 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54  all.** the SQLIT
26940 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 20 6d 61  E_ENABLE_FTS4 ma
26950 63 72 6f 20 74 6f 20 73 65 72 76 65 20 61 73 20  cro to serve as 
26960 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 53 51 4c  an alias for SQL
26970 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 2e  ITE_ENABLE_FTS3.
26980 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
26990 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
269a0 53 34 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  S4) && !defined(
269b0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
269c0 53 33 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  S3).# define SQL
269d0 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20  ITE_ENABLE_FTS3 
269e0 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
269f0 54 68 65 20 63 74 79 70 65 2e 68 20 68 65 61 64  The ctype.h head
26a00 65 72 20 69 73 20 6e 65 65 64 65 64 20 66 6f 72  er is needed for
26a10 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79 73 74 65   non-ASCII syste
26a20 6d 73 2e 20 20 49 74 20 69 73 20 61 6c 73 6f 0a  ms.  It is also.
26a30 2a 2a 20 6e 65 65 64 65 64 20 62 79 20 46 54 53  ** needed by FTS
26a40 33 20 77 68 65 6e 20 46 54 53 33 20 69 73 20 69  3 when FTS3 is i
26a50 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65 20 61  ncluded in the a
26a60 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  malgamation..*/.
26a70 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
26a80 49 54 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c 0a  ITE_ASCII) || \.
26a90 20 20 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c      (defined(SQL
26aa0 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29  ITE_ENABLE_FTS3)
26ab0 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49   && defined(SQLI
26ac0 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 29  TE_AMALGAMATION)
26ad0 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c 63 74 79  ).# include <cty
26ae0 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a  pe.h>.#endif../*
26af0 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
26b00 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20 74  g macros mimic t
26b10 68 65 20 73 74 61 6e 64 61 72 64 20 6c 69 62 72  he standard libr
26b20 61 72 79 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f  ary functions to
26b30 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73 70  upper(),.** issp
26b40 61 63 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28 29  ace(), isalnum()
26b50 2c 20 69 73 64 69 67 69 74 28 29 20 61 6e 64 20  , isdigit() and 
26b60 69 73 78 64 69 67 69 74 28 29 2c 20 72 65 73 70  isxdigit(), resp
26b70 65 63 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a 2a  ectively. The.**
26b80 20 73 71 6c 69 74 65 20 76 65 72 73 69 6f 6e 73   sqlite versions
26b90 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20 41   only work for A
26ba0 53 43 49 49 20 63 68 61 72 61 63 74 65 72 73 2c  SCII characters,
26bb0 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 6c   regardless of l
26bc0 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66  ocale..*/.#ifdef
26bd0 20 53 51 4c 49 54 45 5f 41 53 43 49 49 0a 23 20   SQLITE_ASCII.# 
26be0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f  define sqlite3To
26bf0 75 70 70 65 72 28 78 29 20 20 28 28 78 29 26 7e  upper(x)  ((x)&~
26c00 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
26c10 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
26c20 28 78 29 5d 26 30 78 32 30 29 29 0a 23 20 64 65  (x)]&0x20)).# de
26c30 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70  fine sqlite3Issp
26c40 61 63 65 28 78 29 20 20 20 28 73 71 6c 69 74 65  ace(x)   (sqlite
26c50 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
26c60 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
26c70 30 31 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  01).# define sql
26c80 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20  ite3Isalnum(x)  
26c90 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61   (sqlite3CtypeMa
26ca0 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
26cb0 29 28 78 29 5d 26 30 78 30 36 29 0a 23 20 64 65  )(x)]&0x06).# de
26cc0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c  fine sqlite3Isal
26cd0 70 68 61 28 78 29 20 20 20 28 73 71 6c 69 74 65  pha(x)   (sqlite
26ce0 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
26cf0 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
26d00 30 32 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  02).# define sql
26d10 69 74 65 33 49 73 64 69 67 69 74 28 78 29 20 20  ite3Isdigit(x)  
26d20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61   (sqlite3CtypeMa
26d30 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
26d40 29 28 78 29 5d 26 30 78 30 34 29 0a 23 20 64 65  )(x)]&0x04).# de
26d50 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64  fine sqlite3Isxd
26d60 69 67 69 74 28 78 29 20 20 28 73 71 6c 69 74 65  igit(x)  (sqlite
26d70 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
26d80 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
26d90 30 38 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  08).# define sql
26da0 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20  ite3Tolower(x)  
26db0 20 28 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f   (sqlite3UpperTo
26dc0 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e 65 64 20  Lower[(unsigned 
26dd0 63 68 61 72 29 28 78 29 5d 29 0a 23 20 64 65 66  char)(x)]).# def
26de0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 71 75 6f  ine sqlite3Isquo
26df0 74 65 28 78 29 20 20 20 28 73 71 6c 69 74 65 33  te(x)   (sqlite3
26e00 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
26e10 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 38  ed char)(x)]&0x8
26e20 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  0).#else.# defin
26e30 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72  e sqlite3Toupper
26e40 28 78 29 20 20 20 74 6f 75 70 70 65 72 28 28 75  (x)   toupper((u
26e50 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
26e60 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
26e70 65 33 49 73 73 70 61 63 65 28 78 29 20 20 20 69  e3Isspace(x)   i
26e80 73 73 70 61 63 65 28 28 75 6e 73 69 67 6e 65 64  sspace((unsigned
26e90 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
26ea0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e  ine sqlite3Isaln
26eb0 75 6d 28 78 29 20 20 20 69 73 61 6c 6e 75 6d 28  um(x)   isalnum(
26ec0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
26ed0 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
26ee0 69 74 65 33 49 73 61 6c 70 68 61 28 78 29 20 20  ite3Isalpha(x)  
26ef0 20 69 73 61 6c 70 68 61 28 28 75 6e 73 69 67 6e   isalpha((unsign
26f00 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
26f10 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 64  efine sqlite3Isd
26f20 69 67 69 74 28 78 29 20 20 20 69 73 64 69 67 69  igit(x)   isdigi
26f30 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  t((unsigned char
26f40 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
26f50 71 6c 69 74 65 33 49 73 78 64 69 67 69 74 28 78  qlite3Isxdigit(x
26f60 29 20 20 69 73 78 64 69 67 69 74 28 28 75 6e 73  )  isxdigit((uns
26f70 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
26f80 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
26f90 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 74 6f 6c  Tolower(x)   tol
26fa0 6f 77 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63  ower((unsigned c
26fb0 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
26fc0 65 20 73 71 6c 69 74 65 33 49 73 71 75 6f 74 65  e sqlite3Isquote
26fd0 28 78 29 20 20 20 28 28 78 29 3d 3d 27 22 27 7c  (x)   ((x)=='"'|
26fe0 7c 28 78 29 3d 3d 27 5c 27 27 7c 7c 28 78 29 3d  |(x)=='\''||(x)=
26ff0 3d 27 5b 27 7c 7c 28 78 29 3d 3d 27 60 27 29 0a  ='['||(x)=='`').
27000 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
27010 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49  QLITE_OMIT_COMPI
27020 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53 0a 69  LEOPTION_DIAGS.i
27030 6e 74 20 73 71 6c 69 74 65 33 49 73 49 64 43 68  nt sqlite3IsIdCh
27040 61 72 28 75 38 29 3b 0a 23 65 6e 64 69 66 0a 0a  ar(u8);.#endif..
27050 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c 20 66  /*.** Internal f
27060 75 6e 63 74 69 6f 6e 20 70 72 6f 74 6f 74 79 70  unction prototyp
27070 65 73 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  es.*/.int sqlite
27080 33 53 74 72 49 43 6d 70 28 63 6f 6e 73 74 20 63  3StrICmp(const c
27090 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
270a0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74  );.int sqlite3St
270b0 72 6c 65 6e 33 30 28 63 6f 6e 73 74 20 63 68 61  rlen30(const cha
270c0 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  r*);.char *sqlit
270d0 65 33 43 6f 6c 75 6d 6e 54 79 70 65 28 43 6f 6c  e3ColumnType(Col
270e0 75 6d 6e 2a 2c 63 68 61 72 2a 29 3b 0a 23 64 65  umn*,char*);.#de
270f0 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 72 4e  fine sqlite3StrN
27100 49 43 6d 70 20 73 71 6c 69 74 65 33 5f 73 74 72  ICmp sqlite3_str
27110 6e 69 63 6d 70 0a 0a 69 6e 74 20 73 71 6c 69 74  nicmp..int sqlit
27120 65 33 4d 61 6c 6c 6f 63 49 6e 69 74 28 76 6f 69  e3MallocInit(voi
27130 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
27140 4d 61 6c 6c 6f 63 45 6e 64 28 76 6f 69 64 29 3b  MallocEnd(void);
27150 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61  .void *sqlite3Ma
27160 6c 6c 6f 63 28 75 36 34 29 3b 0a 76 6f 69 64 20  lloc(u64);.void 
27170 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65  *sqlite3MallocZe
27180 72 6f 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  ro(u64);.void *s
27190 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65  qlite3DbMallocZe
271a0 72 6f 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34  ro(sqlite3*, u64
271b0 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
271c0 44 62 4d 61 6c 6c 6f 63 52 61 77 28 73 71 6c 69  DbMallocRaw(sqli
271d0 74 65 33 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64  te3*, u64);.void
271e0 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f   *sqlite3DbMallo
271f0 63 52 61 77 4e 4e 28 73 71 6c 69 74 65 33 2a 2c  cRawNN(sqlite3*,
27200 20 75 36 34 29 3b 0a 63 68 61 72 20 2a 73 71 6c   u64);.char *sql
27210 69 74 65 33 44 62 53 74 72 44 75 70 28 73 71 6c  ite3DbStrDup(sql
27220 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
27230 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  *);.char *sqlite
27240 33 44 62 53 74 72 4e 44 75 70 28 73 71 6c 69 74  3DbStrNDup(sqlit
27250 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
27260 20 75 36 34 29 3b 0a 63 68 61 72 20 2a 73 71 6c   u64);.char *sql
27270 69 74 65 33 44 62 53 70 61 6e 44 75 70 28 73 71  ite3DbSpanDup(sq
27280 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
27290 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  r*,const char*);
272a0 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 52 65  .void *sqlite3Re
272b0 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20 75 36 34  alloc(void*, u64
272c0 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
272d0 44 62 52 65 61 6c 6c 6f 63 4f 72 46 72 65 65 28  DbReallocOrFree(
272e0 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64 20  sqlite3 *, void 
272f0 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  *, u64);.void *s
27300 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 28  qlite3DbRealloc(
27310 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64 20  sqlite3 *, void 
27320 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 73 71  *, u64);.void sq
27330 6c 69 74 65 33 44 62 46 72 65 65 28 73 71 6c 69  lite3DbFree(sqli
27340 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f  te3*, void*);.vo
27350 69 64 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  id sqlite3DbFree
27360 4e 4e 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69  NN(sqlite3*, voi
27370 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  d*);.int sqlite3
27380 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f 69 64 2a  MallocSize(void*
27390 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62  );.int sqlite3Db
273a0 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71 6c 69 74  MallocSize(sqlit
273b0 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69  e3*, void*);.voi
273c0 64 20 2a 73 71 6c 69 74 65 33 50 61 67 65 4d 61  d *sqlite3PageMa
273d0 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20  lloc(int);.void 
273e0 73 71 6c 69 74 65 33 50 61 67 65 46 72 65 65 28  sqlite3PageFree(
273f0 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  void*);.void sql
27400 69 74 65 33 4d 65 6d 53 65 74 44 65 66 61 75 6c  ite3MemSetDefaul
27410 74 28 76 6f 69 64 29 3b 0a 23 69 66 6e 64 65 66  t(void);.#ifndef
27420 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42   SQLITE_UNTESTAB
27430 4c 45 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  LE.void sqlite3B
27440 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b 73  enignMallocHooks
27450 28 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 2c  (void (*)(void),
27460 20 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 29   void (*)(void))
27470 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c  ;.#endif.int sql
27480 69 74 65 33 48 65 61 70 4e 65 61 72 6c 79 46 75  ite3HeapNearlyFu
27490 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a  ll(void);../*.**
274a0 20 4f 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68   On systems with
274b0 20 61 6d 70 6c 65 20 73 74 61 63 6b 20 73 70 61   ample stack spa
274c0 63 65 20 61 6e 64 20 74 68 61 74 20 73 75 70 70  ce and that supp
274d0 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c 20 6d 61  ort alloca(), ma
274e0 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20 61 6c 6c  ke.** use of all
274f0 6f 63 61 28 29 20 74 6f 20 6f 62 74 61 69 6e 20  oca() to obtain 
27500 73 70 61 63 65 20 66 6f 72 20 6c 61 72 67 65 20  space for large 
27510 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a 65 63 74  automatic object
27520 73 2e 20 20 42 79 20 64 65 66 61 75 6c 74 2c 0a  s.  By default,.
27530 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20  ** obtain space 
27540 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e 0a 2a  from malloc()..*
27550 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f 63 61 28  *.** The alloca(
27560 29 20 72 6f 75 74 69 6e 65 20 6e 65 76 65 72 20  ) routine never 
27570 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e 20 20 54  returns NULL.  T
27580 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65 20 63  his will cause c
27590 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20 74 68 61  ode paths.** tha
275a0 74 20 64 65 61 6c 20 77 69 74 68 20 73 71 6c 69  t deal with sqli
275b0 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 28 29 20  te3StackAlloc() 
275c0 66 61 69 6c 75 72 65 73 20 74 6f 20 62 65 20 75  failures to be u
275d0 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a 2f 0a 23  nreachable..*/.#
275e0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45  ifdef SQLITE_USE
275f0 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66 69 6e 65  _ALLOCA.# define
27600 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
27610 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 61 6c 6c  ocRaw(D,N)   all
27620 6f 63 61 28 4e 29 0a 23 20 64 65 66 69 6e 65 20  oca(N).# define 
27630 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f  sqlite3StackAllo
27640 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d 65 6d 73  cZero(D,N)  mems
27650 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c 20 30 2c  et(alloca(N), 0,
27660 20 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c   N).# define sql
27670 69 74 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c  ite3StackFree(D,
27680 50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  P).#else.# defin
27690 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  e sqlite3StackAl
276a0 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 73 71  locRaw(D,N)   sq
276b0 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
276c0 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73  (D,N).# define s
276d0 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
276e0 5a 65 72 6f 28 44 2c 4e 29 20 20 73 71 6c 69 74  Zero(D,N)  sqlit
276f0 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 44  e3DbMallocZero(D
27700 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,N).# define sql
27710 69 74 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c  ite3StackFree(D,
27720 50 29 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  P)       sqlite3
27730 44 62 46 72 65 65 28 44 2c 50 29 0a 23 65 6e 64  DbFree(D,P).#end
27740 69 66 0a 0a 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c  if../* Do not al
27750 6c 6f 77 20 62 6f 74 68 20 4d 45 4d 53 59 53 35  low both MEMSYS5
27760 20 61 6e 64 20 4d 45 4d 53 59 53 33 20 74 6f 20   and MEMSYS3 to 
27770 62 65 20 64 65 66 69 6e 65 64 20 74 6f 67 65 74  be defined toget
27780 68 65 72 2e 20 20 49 66 20 74 68 65 79 0a 2a 2a  her.  If they.**
27790 20 61 72 65 2c 20 64 69 73 61 62 6c 65 20 4d 45   are, disable ME
277a0 4d 53 59 53 33 0a 2a 2f 0a 23 69 66 64 65 66 20  MSYS3.*/.#ifdef 
277b0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45  SQLITE_ENABLE_ME
277c0 4d 53 59 53 35 0a 63 6f 6e 73 74 20 73 71 6c 69  MSYS5.const sqli
277d0 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20  te3_mem_methods 
277e0 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65  *sqlite3MemGetMe
277f0 6d 73 79 73 35 28 76 6f 69 64 29 3b 0a 23 75 6e  msys5(void);.#un
27800 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
27810 45 5f 4d 45 4d 53 59 53 33 0a 23 65 6e 64 69 66  E_MEMSYS3.#endif
27820 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
27830 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 63 6f  NABLE_MEMSYS3.co
27840 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f  nst sqlite3_mem_
27850 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33  methods *sqlite3
27860 4d 65 6d 47 65 74 4d 65 6d 73 79 73 33 28 76 6f  MemGetMemsys3(vo
27870 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 23 69  id);.#endif...#i
27880 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 55 54  fndef SQLITE_MUT
27890 45 58 5f 4f 4d 49 54 0a 20 20 73 71 6c 69 74 65  EX_OMIT.  sqlite
278a0 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20  3_mutex_methods 
278b0 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 44 65  const *sqlite3De
278c0 66 61 75 6c 74 4d 75 74 65 78 28 76 6f 69 64 29  faultMutex(void)
278d0 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  ;.  sqlite3_mute
278e0 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20  x_methods const 
278f0 2a 73 71 6c 69 74 65 33 4e 6f 6f 70 4d 75 74 65  *sqlite3NoopMute
27900 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74  x(void);.  sqlit
27910 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65  e3_mutex *sqlite
27920 33 4d 75 74 65 78 41 6c 6c 6f 63 28 69 6e 74 29  3MutexAlloc(int)
27930 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
27940 75 74 65 78 49 6e 69 74 28 76 6f 69 64 29 3b 0a  utexInit(void);.
27950 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74    int sqlite3Mut
27960 65 78 45 6e 64 28 76 6f 69 64 29 3b 0a 23 65 6e  exEnd(void);.#en
27970 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64  dif.#if !defined
27980 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d  (SQLITE_MUTEX_OM
27990 49 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  IT) && !defined(
279a0 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4e 4f 4f  SQLITE_MUTEX_NOO
279b0 50 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  P).  void sqlite
279c0 33 4d 65 6d 6f 72 79 42 61 72 72 69 65 72 28 76  3MemoryBarrier(v
279d0 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  oid);.#else.# de
279e0 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 6f  fine sqlite3Memo
279f0 72 79 42 61 72 72 69 65 72 28 29 0a 23 65 6e 64  ryBarrier().#end
27a00 69 66 0a 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36  if..sqlite3_int6
27a10 34 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 56  4 sqlite3StatusV
27a20 61 6c 75 65 28 69 6e 74 29 3b 0a 76 6f 69 64 20  alue(int);.void 
27a30 73 71 6c 69 74 65 33 53 74 61 74 75 73 55 70 28  sqlite3StatusUp(
27a40 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
27a50 73 71 6c 69 74 65 33 53 74 61 74 75 73 44 6f 77  sqlite3StatusDow
27a60 6e 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  n(int, int);.voi
27a70 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 48  d sqlite3StatusH
27a80 69 67 68 77 61 74 65 72 28 69 6e 74 2c 20 69 6e  ighwater(int, in
27a90 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4c  t);.int sqlite3L
27aa0 6f 6f 6b 61 73 69 64 65 55 73 65 64 28 73 71 6c  ookasideUsed(sql
27ab0 69 74 65 33 2a 2c 69 6e 74 2a 29 3b 0a 0a 2f 2a  ite3*,int*);../*
27ac0 20 41 63 63 65 73 73 20 74 6f 20 6d 75 74 65 78   Access to mutex
27ad0 65 73 20 75 73 65 64 20 62 79 20 73 71 6c 69 74  es used by sqlit
27ae0 65 33 5f 73 74 61 74 75 73 28 29 20 2a 2f 0a 73  e3_status() */.s
27af0 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71  qlite3_mutex *sq
27b00 6c 69 74 65 33 50 63 61 63 68 65 31 4d 75 74 65  lite3Pcache1Mute
27b10 78 28 76 6f 69 64 29 3b 0a 73 71 6c 69 74 65 33  x(void);.sqlite3
27b20 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33 4d  _mutex *sqlite3M
27b30 61 6c 6c 6f 63 4d 75 74 65 78 28 76 6f 69 64 29  allocMutex(void)
27b40 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  ;..#if defined(S
27b50 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 55 4c  QLITE_ENABLE_MUL
27b60 54 49 54 48 52 45 41 44 45 44 5f 43 48 45 43 4b  TITHREADED_CHECK
27b70 53 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  S) && !defined(S
27b80 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54  QLITE_MUTEX_OMIT
27b90 29 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 75  ).void sqlite3Mu
27ba0 74 65 78 57 61 72 6e 4f 6e 43 6f 6e 74 65 6e 74  texWarnOnContent
27bb0 69 6f 6e 28 73 71 6c 69 74 65 33 5f 6d 75 74 65  ion(sqlite3_mute
27bc0 78 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  x*);.#else.# def
27bd0 69 6e 65 20 73 71 6c 69 74 65 33 4d 75 74 65 78  ine sqlite3Mutex
27be0 57 61 72 6e 4f 6e 43 6f 6e 74 65 6e 74 69 6f 6e  WarnOnContention
27bf0 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  (x).#endif..#ifn
27c00 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
27c10 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20  FLOATING_POINT. 
27c20 20 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4e 61   int sqlite3IsNa
27c30 4e 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6c 73 65  N(double);.#else
27c40 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
27c50 33 49 73 4e 61 4e 28 58 29 20 20 30 0a 23 65 6e  3IsNaN(X)  0.#en
27c60 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  dif../*.** An in
27c70 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
27c80 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
27c90 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74  e holds informat
27ca0 69 6f 6e 20 61 62 6f 75 74 20 53 51 4c 0a 2a 2a  ion about SQL.**
27cb0 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 67 75 6d   functions argum
27cc0 65 6e 74 73 20 74 68 61 74 20 61 72 65 20 74 68  ents that are th
27cd0 65 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 20  e parameters to 
27ce0 74 68 65 20 70 72 69 6e 74 66 28 29 20 66 75 6e  the printf() fun
27cf0 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ction..*/.struct
27d00 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73   PrintfArguments
27d10 20 7b 0a 20 20 69 6e 74 20 6e 41 72 67 3b 20 20   {.  int nArg;  
27d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
27d30 20 54 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   Total number of
27d40 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20   arguments */.  
27d50 69 6e 74 20 6e 55 73 65 64 3b 20 20 20 20 20 20  int nUsed;      
27d60 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
27d70 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
27d80 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20  used so far */. 
27d90 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
27da0 2a 61 70 41 72 67 3b 20 20 20 2f 2a 20 54 68 65  *apArg;   /* The
27db0 20 61 72 67 75 6d 65 6e 74 20 76 61 6c 75 65 73   argument values
27dc0 20 2a 2f 0a 7d 3b 0a 0a 63 68 61 72 20 2a 73 71   */.};..char *sq
27dd0 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 73 71 6c  lite3MPrintf(sql
27de0 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
27df0 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73  *, ...);.char *s
27e00 71 6c 69 74 65 33 56 4d 50 72 69 6e 74 66 28 73  qlite3VMPrintf(s
27e10 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
27e20 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 23  ar*, va_list);.#
27e30 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
27e40 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69  E_DEBUG) || defi
27e50 6e 65 64 28 53 51 4c 49 54 45 5f 48 41 56 45 5f  ned(SQLITE_HAVE_
27e60 4f 53 5f 54 52 41 43 45 29 0a 20 20 76 6f 69 64  OS_TRACE).  void
27e70 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69   sqlite3DebugPri
27e80 6e 74 66 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ntf(const char*,
27e90 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a 23 69   ...);.#endif.#i
27ea0 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
27eb0 5f 54 45 53 54 29 0a 20 20 76 6f 69 64 20 2a 73  _TEST).  void *s
27ec0 71 6c 69 74 65 33 54 65 73 74 54 65 78 74 54 6f  qlite3TestTextTo
27ed0 50 74 72 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  Ptr(const char*)
27ee0 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65  ;.#endif..#if de
27ef0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
27f00 55 47 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  UG).  void sqlit
27f10 65 33 54 72 65 65 56 69 65 77 45 78 70 72 28 54  e3TreeViewExpr(T
27f20 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20  reeView*, const 
27f30 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20 76 6f  Expr*, u8);.  vo
27f40 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69  id sqlite3TreeVi
27f50 65 77 42 61 72 65 45 78 70 72 4c 69 73 74 28 54  ewBareExprList(T
27f60 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20  reeView*, const 
27f70 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74  ExprList*, const
27f80 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20   char*);.  void 
27f90 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 45  sqlite3TreeViewE
27fa0 78 70 72 4c 69 73 74 28 54 72 65 65 56 69 65 77  xprList(TreeView
27fb0 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 4c 69 73  *, const ExprLis
27fc0 74 2a 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63 68  t*, u8, const ch
27fd0 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  ar*);.  void sql
27fe0 69 74 65 33 54 72 65 65 56 69 65 77 53 65 6c 65  ite3TreeViewSele
27ff0 63 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f  ct(TreeView*, co
28000 6e 73 74 20 53 65 6c 65 63 74 2a 2c 20 75 38 29  nst Select*, u8)
28010 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
28020 54 72 65 65 56 69 65 77 57 69 74 68 28 54 72 65  TreeViewWith(Tre
28030 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 57 69  eView*, const Wi
28040 74 68 2a 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65  th*, u8);.#ifnde
28050 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 49  f SQLITE_OMIT_WI
28060 4e 44 4f 57 46 55 4e 43 0a 20 20 76 6f 69 64 20  NDOWFUNC.  void 
28070 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 57  sqlite3TreeViewW
28080 69 6e 64 6f 77 28 54 72 65 65 56 69 65 77 2a 2c  indow(TreeView*,
28090 20 63 6f 6e 73 74 20 57 69 6e 64 6f 77 2a 2c 20   const Window*, 
280a0 75 38 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  u8);.  void sqli
280b0 74 65 33 54 72 65 65 56 69 65 77 57 69 6e 46 75  te3TreeViewWinFu
280c0 6e 63 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f  nc(TreeView*, co
280d0 6e 73 74 20 57 69 6e 64 6f 77 2a 2c 20 75 38 29  nst Window*, u8)
280e0 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  ;.#endif.#endif.
280f0 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ..void sqlite3Se
28100 74 53 74 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c  tString(char **,
28110 20 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74   sqlite3*, const
28120 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
28130 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 50 61  lite3ErrorMsg(Pa
28140 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
28150 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71  *, ...);.void sq
28160 6c 69 74 65 33 44 65 71 75 6f 74 65 28 63 68 61  lite3Dequote(cha
28170 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
28180 33 54 6f 6b 65 6e 49 6e 69 74 28 54 6f 6b 65 6e  3TokenInit(Token
28190 2a 2c 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71  *,char*);.int sq
281a0 6c 69 74 65 33 4b 65 79 77 6f 72 64 43 6f 64 65  lite3KeywordCode
281b0 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
281c0 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  char*, int);.int
281d0 20 73 71 6c 69 74 65 33 52 75 6e 50 61 72 73 65   sqlite3RunParse
281e0 72 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  r(Parse*, const 
281f0 63 68 61 72 2a 2c 20 63 68 61 72 20 2a 2a 29 3b  char*, char **);
28200 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e  .void sqlite3Fin
28210 69 73 68 43 6f 64 69 6e 67 28 50 61 72 73 65 2a  ishCoding(Parse*
28220 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
28230 74 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a 29  tTempReg(Parse*)
28240 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
28250 6c 65 61 73 65 54 65 6d 70 52 65 67 28 50 61 72  leaseTempReg(Par
28260 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71  se*,int);.int sq
28270 6c 69 74 65 33 47 65 74 54 65 6d 70 52 61 6e 67  lite3GetTempRang
28280 65 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76  e(Parse*,int);.v
28290 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61  oid sqlite3Relea
282a0 73 65 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73  seTempRange(Pars
282b0 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69  e*,int,int);.voi
282c0 64 20 73 71 6c 69 74 65 33 43 6c 65 61 72 54 65  d sqlite3ClearTe
282d0 6d 70 52 65 67 43 61 63 68 65 28 50 61 72 73 65  mpRegCache(Parse
282e0 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  *);.#ifdef SQLIT
282f0 45 5f 44 45 42 55 47 0a 69 6e 74 20 73 71 6c 69  E_DEBUG.int sqli
28300 74 65 33 4e 6f 54 65 6d 70 73 49 6e 52 61 6e 67  te3NoTempsInRang
28310 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74  e(Parse*,int,int
28320 29 3b 0a 23 65 6e 64 69 66 0a 45 78 70 72 20 2a  );.#endif.Expr *
28330 73 71 6c 69 74 65 33 45 78 70 72 41 6c 6c 6f 63  sqlite3ExprAlloc
28340 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f  (sqlite3*,int,co
28350 6e 73 74 20 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b  nst Token*,int);
28360 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
28370 70 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  pr(sqlite3*,int,
28380 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
28390 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 74  id sqlite3ExprAt
283a0 74 61 63 68 53 75 62 74 72 65 65 73 28 73 71 6c  tachSubtrees(sql
283b0 69 74 65 33 2a 2c 45 78 70 72 2a 2c 45 78 70 72  ite3*,Expr*,Expr
283c0 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a  *,Expr*);.Expr *
283d0 73 71 6c 69 74 65 33 50 45 78 70 72 28 50 61 72  sqlite3PExpr(Par
283e0 73 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 2a 2c  se*, int, Expr*,
283f0 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
28400 6c 69 74 65 33 50 45 78 70 72 41 64 64 53 65 6c  lite3PExprAddSel
28410 65 63 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ect(Parse*, Expr
28420 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 45 78 70  *, Select*);.Exp
28430 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6e  r *sqlite3ExprAn
28440 64 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a  d(sqlite3*,Expr*
28450 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a  , Expr*);.Expr *
28460 73 71 6c 69 74 65 33 45 78 70 72 46 75 6e 63 74  sqlite3ExprFunct
28470 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  ion(Parse*,ExprL
28480 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e  ist*, Token*, in
28490 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
284a0 45 78 70 72 41 73 73 69 67 6e 56 61 72 4e 75 6d  ExprAssignVarNum
284b0 62 65 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ber(Parse*, Expr
284c0 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20 73 71  *, u32);.void sq
284d0 6c 69 74 65 33 45 78 70 72 44 65 6c 65 74 65 28  lite3ExprDelete(
284e0 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 2a 29  sqlite3*, Expr*)
284f0 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69  ;.ExprList *sqli
28500 74 65 33 45 78 70 72 4c 69 73 74 41 70 70 65 6e  te3ExprListAppen
28510 64 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73  d(Parse*,ExprLis
28520 74 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c  t*,Expr*);.ExprL
28530 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72  ist *sqlite3Expr
28540 4c 69 73 74 41 70 70 65 6e 64 56 65 63 74 6f 72  ListAppendVector
28550 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
28560 2a 2c 49 64 4c 69 73 74 2a 2c 45 78 70 72 2a 29  *,IdList*,Expr*)
28570 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
28580 70 72 4c 69 73 74 53 65 74 53 6f 72 74 4f 72 64  prListSetSortOrd
28590 65 72 28 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74  er(ExprList*,int
285a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
285b0 78 70 72 4c 69 73 74 53 65 74 4e 61 6d 65 28 50  xprListSetName(P
285c0 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
285d0 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Token*,int);.voi
285e0 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  d sqlite3ExprLis
285f0 74 53 65 74 53 70 61 6e 28 50 61 72 73 65 2a 2c  tSetSpan(Parse*,
28600 45 78 70 72 4c 69 73 74 2a 2c 63 6f 6e 73 74 20  ExprList*,const 
28610 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
28620 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
28630 45 78 70 72 4c 69 73 74 44 65 6c 65 74 65 28 73  ExprListDelete(s
28640 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 4c 69 73  qlite3*, ExprLis
28650 74 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33  t*);.u32 sqlite3
28660 45 78 70 72 4c 69 73 74 46 6c 61 67 73 28 63 6f  ExprListFlags(co
28670 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  nst ExprList*);.
28680 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74 28  int sqlite3Init(
28690 73 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a 2a  sqlite3*, char**
286a0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
286b0 69 74 43 61 6c 6c 62 61 63 6b 28 76 6f 69 64 2a  itCallback(void*
286c0 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2a 2c 20 63  , int, char**, c
286d0 68 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  har**);.void sql
286e0 69 74 65 33 50 72 61 67 6d 61 28 50 61 72 73 65  ite3Pragma(Parse
286f0 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
28700 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 23 69 66  Token*,int);.#if
28710 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
28720 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 4d 6f  _VIRTUALTABLE.Mo
28730 64 75 6c 65 20 2a 73 71 6c 69 74 65 33 50 72 61  dule *sqlite3Pra
28740 67 6d 61 56 74 61 62 52 65 67 69 73 74 65 72 28  gmaVtabRegister(
28750 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
28760 68 61 72 20 2a 7a 4e 61 6d 65 29 3b 0a 23 65 6e  har *zName);.#en
28770 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
28780 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f  ResetAllSchemasO
28790 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c 69  fConnection(sqli
287a0 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
287b0 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d  te3ResetOneSchem
287c0 61 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b  a(sqlite3*,int);
287d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c  .void sqlite3Col
287e0 6c 61 70 73 65 44 61 74 61 62 61 73 65 41 72 72  lapseDatabaseArr
287f0 61 79 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  ay(sqlite3*);.vo
28800 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74  id sqlite3Commit
28810 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65 73 28  InternalChanges(
28820 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
28830 73 71 6c 69 74 65 33 44 65 6c 65 74 65 43 6f 6c  sqlite3DeleteCol
28840 75 6d 6e 4e 61 6d 65 73 28 73 71 6c 69 74 65 33  umnNames(sqlite3
28850 2a 2c 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73  *,Table*);.int s
28860 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 73 46 72 6f  qlite3ColumnsFro
28870 6d 45 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a  mExprList(Parse*
28880 2c 45 78 70 72 4c 69 73 74 2a 2c 69 31 36 2a 2c  ,ExprList*,i16*,
28890 43 6f 6c 75 6d 6e 2a 2a 29 3b 0a 76 6f 69 64 20  Column**);.void 
288a0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 41 64 64  sqlite3SelectAdd
288b0 43 6f 6c 75 6d 6e 54 79 70 65 41 6e 64 43 6f 6c  ColumnTypeAndCol
288c0 6c 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61  lation(Parse*,Ta
288d0 62 6c 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 54  ble*,Select*);.T
288e0 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 52 65 73  able *sqlite3Res
288f0 75 6c 74 53 65 74 4f 66 53 65 6c 65 63 74 28 50  ultSetOfSelect(P
28900 61 72 73 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a  arse*,Select*);.
28910 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e  void sqlite3Open
28920 4d 61 73 74 65 72 54 61 62 6c 65 28 50 61 72 73  MasterTable(Pars
28930 65 20 2a 2c 20 69 6e 74 29 3b 0a 49 6e 64 65 78  e *, int);.Index
28940 20 2a 73 71 6c 69 74 65 33 50 72 69 6d 61 72 79   *sqlite3Primary
28950 4b 65 79 49 6e 64 65 78 28 54 61 62 6c 65 2a 29  KeyIndex(Table*)
28960 3b 0a 69 31 36 20 73 71 6c 69 74 65 33 43 6f 6c  ;.i16 sqlite3Col
28970 75 6d 6e 4f 66 49 6e 64 65 78 28 49 6e 64 65 78  umnOfIndex(Index
28980 2a 2c 20 69 31 36 29 3b 0a 76 6f 69 64 20 73 71  *, i16);.void sq
28990 6c 69 74 65 33 53 74 61 72 74 54 61 62 6c 65 28  lite3StartTable(
289a0 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
289b0 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  ken*,int,int,int
289c0 2c 69 6e 74 29 3b 0a 23 69 66 20 53 51 4c 49 54  ,int);.#if SQLIT
289d0 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f  E_ENABLE_HIDDEN_
289e0 43 4f 4c 55 4d 4e 53 0a 20 20 76 6f 69 64 20 73  COLUMNS.  void s
289f0 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 50 72 6f 70  qlite3ColumnProp
28a00 65 72 74 69 65 73 46 72 6f 6d 4e 61 6d 65 28 54  ertiesFromName(T
28a10 61 62 6c 65 2a 2c 20 43 6f 6c 75 6d 6e 2a 29 3b  able*, Column*);
28a20 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
28a30 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 50 72 6f  sqlite3ColumnPro
28a40 70 65 72 74 69 65 73 46 72 6f 6d 4e 61 6d 65 28  pertiesFromName(
28a50 54 2c 43 29 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f  T,C) /* no-op */
28a60 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
28a70 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 28 50 61  ite3AddColumn(Pa
28a80 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
28a90 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
28aa0 33 41 64 64 4e 6f 74 4e 75 6c 6c 28 50 61 72 73  3AddNotNull(Pars
28ab0 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
28ac0 71 6c 69 74 65 33 41 64 64 50 72 69 6d 61 72 79  qlite3AddPrimary
28ad0 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72  Key(Parse*, Expr
28ae0 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  List*, int, int,
28af0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
28b00 74 65 33 41 64 64 43 68 65 63 6b 43 6f 6e 73 74  te3AddCheckConst
28b10 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 45 78  raint(Parse*, Ex
28b20 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
28b30 65 33 41 64 64 44 65 66 61 75 6c 74 56 61 6c 75  e3AddDefaultValu
28b40 65 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63  e(Parse*,Expr*,c
28b50 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
28b60 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
28b70 6c 69 74 65 33 41 64 64 43 6f 6c 6c 61 74 65 54  lite3AddCollateT
28b80 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  ype(Parse*, Toke
28b90 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
28ba0 33 45 6e 64 54 61 62 6c 65 28 50 61 72 73 65 2a  3EndTable(Parse*
28bb0 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75  ,Token*,Token*,u
28bc0 38 2c 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  8,Select*);.int 
28bd0 73 71 6c 69 74 65 33 50 61 72 73 65 55 72 69 28  sqlite3ParseUri(
28be0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
28bf0 74 20 63 68 61 72 2a 2c 75 6e 73 69 67 6e 65 64  t char*,unsigned
28c00 20 69 6e 74 2a 2c 0a 20 20 20 20 20 20 20 20 20   int*,.         
28c10 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
28c20 65 33 5f 76 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c  e3_vfs**,char**,
28c30 63 68 61 72 20 2a 2a 29 3b 0a 42 74 72 65 65 20  char **);.Btree 
28c40 2a 73 71 6c 69 74 65 33 44 62 4e 61 6d 65 54 6f  *sqlite3DbNameTo
28c50 42 74 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 63  Btree(sqlite3*,c
28c60 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 0a 23 69  onst char*);..#i
28c70 66 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45  fdef SQLITE_UNTE
28c80 53 54 41 42 4c 45 0a 23 20 64 65 66 69 6e 65 20  STABLE.# define 
28c90 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28  sqlite3FaultSim(
28ca0 58 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 65 6c  X) SQLITE_OK.#el
28cb0 73 65 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  se.  int sqlite3
28cc0 46 61 75 6c 74 53 69 6d 28 69 6e 74 29 3b 0a 23  FaultSim(int);.#
28cd0 65 6e 64 69 66 0a 0a 42 69 74 76 65 63 20 2a 73  endif..Bitvec *s
28ce0 71 6c 69 74 65 33 42 69 74 76 65 63 43 72 65 61  qlite3BitvecCrea
28cf0 74 65 28 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c  te(u32);.int sql
28d00 69 74 65 33 42 69 74 76 65 63 54 65 73 74 28 42  ite3BitvecTest(B
28d10 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e  itvec*, u32);.in
28d20 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 54  t sqlite3BitvecT
28d30 65 73 74 4e 6f 74 4e 75 6c 6c 28 42 69 74 76 65  estNotNull(Bitve
28d40 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73 71  c*, u32);.int sq
28d50 6c 69 74 65 33 42 69 74 76 65 63 53 65 74 28 42  lite3BitvecSet(B
28d60 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 76 6f  itvec*, u32);.vo
28d70 69 64 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  id sqlite3Bitvec
28d80 43 6c 65 61 72 28 42 69 74 76 65 63 2a 2c 20 75  Clear(Bitvec*, u
28d90 33 32 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64  32, void*);.void
28da0 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 44 65   sqlite3BitvecDe
28db0 73 74 72 6f 79 28 42 69 74 76 65 63 2a 29 3b 0a  stroy(Bitvec*);.
28dc0 75 33 32 20 73 71 6c 69 74 65 33 42 69 74 76 65  u32 sqlite3Bitve
28dd0 63 53 69 7a 65 28 42 69 74 76 65 63 2a 29 3b 0a  cSize(Bitvec*);.
28de0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55  #ifndef SQLITE_U
28df0 4e 54 45 53 54 41 42 4c 45 0a 69 6e 74 20 73 71  NTESTABLE.int sq
28e00 6c 69 74 65 33 42 69 74 76 65 63 42 75 69 6c 74  lite3BitvecBuilt
28e10 69 6e 54 65 73 74 28 69 6e 74 2c 69 6e 74 2a 29  inTest(int,int*)
28e20 3b 0a 23 65 6e 64 69 66 0a 0a 52 6f 77 53 65 74  ;.#endif..RowSet
28e30 20 2a 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49   *sqlite3RowSetI
28e40 6e 69 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  nit(sqlite3*);.v
28e50 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65  oid sqlite3RowSe
28e60 74 44 65 6c 65 74 65 28 76 6f 69 64 2a 29 3b 0a  tDelete(void*);.
28e70 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53  void sqlite3RowS
28e80 65 74 43 6c 65 61 72 28 76 6f 69 64 2a 29 3b 0a  etClear(void*);.
28e90 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53  void sqlite3RowS
28ea0 65 74 49 6e 73 65 72 74 28 52 6f 77 53 65 74 2a  etInsert(RowSet*
28eb0 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  , i64);.int sqli
28ec0 74 65 33 52 6f 77 53 65 74 54 65 73 74 28 52 6f  te3RowSetTest(Ro
28ed0 77 53 65 74 2a 2c 20 69 6e 74 20 69 42 61 74 63  wSet*, int iBatc
28ee0 68 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c  h, i64);.int sql
28ef0 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74 28 52  ite3RowSetNext(R
28f00 6f 77 53 65 74 2a 2c 20 69 36 34 2a 29 3b 0a 0a  owSet*, i64*);..
28f10 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65 61  void sqlite3Crea
28f20 74 65 56 69 65 77 28 50 61 72 73 65 2a 2c 54 6f  teView(Parse*,To
28f30 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  ken*,Token*,Toke
28f40 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 65 6c  n*,ExprList*,Sel
28f50 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 0a  ect*,int,int);..
28f60 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
28f70 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 7c  ITE_OMIT_VIEW) |
28f80 7c 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  | !defined(SQLIT
28f90 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
28fa0 42 4c 45 29 0a 20 20 69 6e 74 20 73 71 6c 69 74  BLE).  int sqlit
28fb0 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e  e3ViewGetColumnN
28fc0 61 6d 65 73 28 50 61 72 73 65 2a 2c 54 61 62 6c  ames(Parse*,Tabl
28fd0 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  e*);.#else.# def
28fe0 69 6e 65 20 73 71 6c 69 74 65 33 56 69 65 77 47  ine sqlite3ViewG
28ff0 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 41 2c  etColumnNames(A,
29000 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a 23 69 66  B) 0.#endif..#if
29010 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41   SQLITE_MAX_ATTA
29020 43 48 45 44 3e 33 30 0a 20 20 69 6e 74 20 73 71  CHED>30.  int sq
29030 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65  lite3DbMaskAllZe
29040 72 6f 28 79 44 62 4d 61 73 6b 29 3b 0a 23 65 6e  ro(yDbMask);.#en
29050 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
29060 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a  DropTable(Parse*
29070 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c  , SrcList*, int,
29080 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
29090 74 65 33 43 6f 64 65 44 72 6f 70 54 61 62 6c 65  te3CodeDropTable
290a0 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
290b0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
290c0 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 61   sqlite3DeleteTa
290d0 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61  ble(sqlite3*, Ta
290e0 62 6c 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53  ble*);.#ifndef S
290f0 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49  QLITE_OMIT_AUTOI
29100 4e 43 52 45 4d 45 4e 54 0a 20 20 76 6f 69 64 20  NCREMENT.  void 
29110 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65  sqlite3Autoincre
29120 6d 65 6e 74 42 65 67 69 6e 28 50 61 72 73 65 20  mentBegin(Parse 
29130 2a 70 50 61 72 73 65 29 3b 0a 20 20 76 6f 69 64  *pParse);.  void
29140 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72   sqlite3Autoincr
29150 65 6d 65 6e 74 45 6e 64 28 50 61 72 73 65 20 2a  ementEnd(Parse *
29160 70 50 61 72 73 65 29 3b 0a 23 65 6c 73 65 0a 23  pParse);.#else.#
29170 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
29180 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69  utoincrementBegi
29190 6e 28 58 29 0a 23 20 64 65 66 69 6e 65 20 73 71  n(X).# define sq
291a0 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65  lite3Autoincreme
291b0 6e 74 45 6e 64 28 58 29 0a 23 65 6e 64 69 66 0a  ntEnd(X).#endif.
291c0 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 73 65  void sqlite3Inse
291d0 72 74 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  rt(Parse*, SrcLi
291e0 73 74 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 49 64  st*, Select*, Id
291f0 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 55 70 73 65  List*, int, Upse
29200 72 74 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  rt*);.void *sqli
29210 74 65 33 41 72 72 61 79 41 6c 6c 6f 63 61 74 65  te3ArrayAllocate
29220 28 73 71 6c 69 74 65 33 2a 2c 76 6f 69 64 2a 2c  (sqlite3*,void*,
29230 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a  int,int*,int*);.
29240 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49  IdList *sqlite3I
29250 64 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69  dListAppend(sqli
29260 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 54  te3*, IdList*, T
29270 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
29280 74 65 33 49 64 4c 69 73 74 49 6e 64 65 78 28 49  te3IdListIndex(I
29290 64 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61  dList*,const cha
292a0 72 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71  r*);.SrcList *sq
292b0 6c 69 74 65 33 53 72 63 4c 69 73 74 45 6e 6c 61  lite3SrcListEnla
292c0 72 67 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72  rge(sqlite3*, Sr
292d0 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74  cList*, int, int
292e0 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69  );.SrcList *sqli
292f0 74 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64  te3SrcListAppend
29300 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69  (sqlite3*, SrcLi
29310 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  st*, Token*, Tok
29320 65 6e 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73  en*);.SrcList *s
29330 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70 70  qlite3SrcListApp
29340 65 6e 64 46 72 6f 6d 54 65 72 6d 28 50 61 72 73  endFromTerm(Pars
29350 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f  e*, SrcList*, To
29360 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20  ken*, Token*,.  
29370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29390 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65      Token*, Sele
293a0 63 74 2a 2c 20 45 78 70 72 2a 2c 20 49 64 4c 69  ct*, Expr*, IdLi
293b0 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
293c0 65 33 53 72 63 4c 69 73 74 49 6e 64 65 78 65 64  e3SrcListIndexed
293d0 42 79 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c  By(Parse *, SrcL
293e0 69 73 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b  ist *, Token *);
293f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63  .void sqlite3Src
29400 4c 69 73 74 46 75 6e 63 41 72 67 73 28 50 61 72  ListFuncArgs(Par
29410 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45  se*, SrcList*, E
29420 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
29430 71 6c 69 74 65 33 49 6e 64 65 78 65 64 42 79 4c  qlite3IndexedByL
29440 6f 6f 6b 75 70 28 50 61 72 73 65 20 2a 2c 20 73  ookup(Parse *, s
29450 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74  truct SrcList_it
29460 65 6d 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  em *);.void sqli
29470 74 65 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a  te3SrcListShiftJ
29480 6f 69 6e 54 79 70 65 28 53 72 63 4c 69 73 74 2a  oinType(SrcList*
29490 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
294a0 72 63 4c 69 73 74 41 73 73 69 67 6e 43 75 72 73  rcListAssignCurs
294b0 6f 72 73 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ors(Parse*, SrcL
294c0 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
294d0 74 65 33 49 64 4c 69 73 74 44 65 6c 65 74 65 28  te3IdListDelete(
294e0 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73 74  sqlite3*, IdList
294f0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
29500 53 72 63 4c 69 73 74 44 65 6c 65 74 65 28 73 71  SrcListDelete(sq
29510 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a  lite3*, SrcList*
29520 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65  );.Index *sqlite
29530 33 41 6c 6c 6f 63 61 74 65 49 6e 64 65 78 4f 62  3AllocateIndexOb
29540 6a 65 63 74 28 73 71 6c 69 74 65 33 2a 2c 69 31  ject(sqlite3*,i1
29550 36 2c 69 6e 74 2c 63 68 61 72 2a 2a 29 3b 0a 76  6,int,char**);.v
29560 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65 61 74  oid sqlite3Creat
29570 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 6f  eIndex(Parse*,To
29580 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63 4c  ken*,Token*,SrcL
29590 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69  ist*,ExprList*,i
295a0 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20  nt,Token*,.     
295b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
295c0 20 20 20 20 20 45 78 70 72 2a 2c 20 69 6e 74 2c       Expr*, int,
295d0 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20   int, u8);.void 
295e0 73 71 6c 69 74 65 33 44 72 6f 70 49 6e 64 65 78  sqlite3DropIndex
295f0 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
29600 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
29610 69 74 65 33 53 65 6c 65 63 74 28 50 61 72 73 65  ite3Select(Parse
29620 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53 65 6c 65  *, Select*, Sele
29630 63 74 44 65 73 74 2a 29 3b 0a 53 65 6c 65 63 74  ctDest*);.Select
29640 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74 4e   *sqlite3SelectN
29650 65 77 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  ew(Parse*,ExprLi
29660 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70  st*,SrcList*,Exp
29670 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 0a 20 20  r*,ExprList*,.  
29680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29690 20 20 20 20 20 20 20 45 78 70 72 2a 2c 45 78 70         Expr*,Exp
296a0 72 4c 69 73 74 2a 2c 75 33 32 2c 45 78 70 72 2a  rList*,u32,Expr*
296b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
296c0 65 6c 65 63 74 44 65 6c 65 74 65 28 73 71 6c 69  electDelete(sqli
296d0 74 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  te3*, Select*);.
296e0 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 53 72  Table *sqlite3Sr
296f0 63 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61 72 73  cListLookup(Pars
29700 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69  e*, SrcList*);.i
29710 6e 74 20 73 71 6c 69 74 65 33 49 73 52 65 61 64  nt sqlite3IsRead
29720 4f 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54 61 62  Only(Parse*, Tab
29730 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  le*, int);.void 
29740 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65  sqlite3OpenTable
29750 28 50 61 72 73 65 2a 2c 20 69 6e 74 20 69 43 75  (Parse*, int iCu
29760 72 2c 20 69 6e 74 20 69 44 62 2c 20 54 61 62 6c  r, int iDb, Tabl
29770 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20 64 65  e*, int);.#if de
29780 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
29790 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54  BLE_UPDATE_DELET
297a0 45 5f 4c 49 4d 49 54 29 20 26 26 20 21 64 65 66  E_LIMIT) && !def
297b0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
297c0 5f 53 55 42 51 55 45 52 59 29 0a 45 78 70 72 20  _SUBQUERY).Expr 
297d0 2a 73 71 6c 69 74 65 33 4c 69 6d 69 74 57 68 65  *sqlite3LimitWhe
297e0 72 65 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73  re(Parse*,SrcLis
297f0 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73  t*,Expr*,ExprLis
29800 74 2a 2c 45 78 70 72 2a 2c 63 68 61 72 2a 29 3b  t*,Expr*,char*);
29810 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
29820 69 74 65 33 44 65 6c 65 74 65 46 72 6f 6d 28 50  ite3DeleteFrom(P
29830 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
29840 20 45 78 70 72 2a 2c 20 45 78 70 72 4c 69 73 74   Expr*, ExprList
29850 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
29860 73 71 6c 69 74 65 33 55 70 64 61 74 65 28 50 61  sqlite3Update(Pa
29870 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
29880 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ExprList*,Expr*,
29890 69 6e 74 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78  int,ExprList*,Ex
298a0 70 72 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  pr*,.           
298b0 20 20 20 20 20 20 20 20 55 70 73 65 72 74 2a 29          Upsert*)
298c0 3b 0a 57 68 65 72 65 49 6e 66 6f 20 2a 73 71 6c  ;.WhereInfo *sql
298d0 69 74 65 33 57 68 65 72 65 42 65 67 69 6e 28 50  ite3WhereBegin(P
298e0 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45  arse*,SrcList*,E
298f0 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45  xpr*,ExprList*,E
29900 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 69 6e 74  xprList*,u16,int
29910 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57  );.void sqlite3W
29920 68 65 72 65 45 6e 64 28 57 68 65 72 65 49 6e 66  hereEnd(WhereInf
29930 6f 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69  o*);.LogEst sqli
29940 74 65 33 57 68 65 72 65 4f 75 74 70 75 74 52 6f  te3WhereOutputRo
29950 77 43 6f 75 6e 74 28 57 68 65 72 65 49 6e 66 6f  wCount(WhereInfo
29960 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
29970 68 65 72 65 49 73 44 69 73 74 69 6e 63 74 28 57  hereIsDistinct(W
29980 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
29990 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 4f 72  sqlite3WhereIsOr
299a0 64 65 72 65 64 28 57 68 65 72 65 49 6e 66 6f 2a  dered(WhereInfo*
299b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
299c0 65 72 65 4f 72 64 65 72 65 64 49 6e 6e 65 72 4c  ereOrderedInnerL
299d0 6f 6f 70 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  oop(WhereInfo*);
299e0 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
299f0 65 49 73 53 6f 72 74 65 64 28 57 68 65 72 65 49  eIsSorted(WhereI
29a00 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
29a10 65 33 57 68 65 72 65 43 6f 6e 74 69 6e 75 65 4c  e3WhereContinueL
29a20 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29  abel(WhereInfo*)
29a30 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
29a40 72 65 42 72 65 61 6b 4c 61 62 65 6c 28 57 68 65  reBreakLabel(Whe
29a50 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
29a60 6c 69 74 65 33 57 68 65 72 65 4f 6b 4f 6e 65 50  lite3WhereOkOneP
29a70 61 73 73 28 57 68 65 72 65 49 6e 66 6f 2a 2c 20  ass(WhereInfo*, 
29a80 69 6e 74 2a 29 3b 0a 23 64 65 66 69 6e 65 20 4f  int*);.#define O
29a90 4e 45 50 41 53 53 5f 4f 46 46 20 20 20 20 20 20  NEPASS_OFF      
29aa0 30 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20  0        /* Use 
29ab0 6f 66 20 4f 4e 45 50 41 53 53 20 6e 6f 74 20 61  of ONEPASS not a
29ac0 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64 65 66 69 6e  llowed */.#defin
29ad0 65 20 4f 4e 45 50 41 53 53 5f 53 49 4e 47 4c 45  e ONEPASS_SINGLE
29ae0 20 20 20 31 20 20 20 20 20 20 20 20 2f 2a 20 4f     1        /* O
29af0 4e 45 50 41 53 53 20 76 61 6c 69 64 20 66 6f 72  NEPASS valid for
29b00 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 75 70   a single row up
29b10 64 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  date */.#define 
29b20 4f 4e 45 50 41 53 53 5f 4d 55 4c 54 49 20 20 20  ONEPASS_MULTI   
29b30 20 32 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 45   2        /* ONE
29b40 50 41 53 53 20 69 73 20 76 61 6c 69 64 20 66 6f  PASS is valid fo
29b50 72 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20  r multiple rows 
29b60 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  */.void sqlite3E
29b70 78 70 72 43 6f 64 65 4c 6f 61 64 49 6e 64 65 78  xprCodeLoadIndex
29b80 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 49  Column(Parse*, I
29b90 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  ndex*, int, int,
29ba0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
29bb0 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c  e3ExprCodeGetCol
29bc0 75 6d 6e 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  umn(Parse*, Tabl
29bd0 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
29be0 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c  t, u8);.void sql
29bf0 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43  ite3ExprCodeGetC
29c00 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 56 64 62  olumnOfTable(Vdb
29c10 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
29c20 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
29c30 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
29c40 4d 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  Move(Parse*, int
29c50 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
29c60 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
29c70 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
29c80 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
29c90 74 65 33 45 78 70 72 43 6f 64 65 43 6f 70 79 28  te3ExprCodeCopy(
29ca0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
29cb0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
29cc0 33 45 78 70 72 43 6f 64 65 46 61 63 74 6f 72 61  3ExprCodeFactora
29cd0 62 6c 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ble(Parse*, Expr
29ce0 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
29cf0 69 74 65 33 45 78 70 72 43 6f 64 65 41 74 49 6e  ite3ExprCodeAtIn
29d00 69 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  it(Parse*, Expr*
29d10 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
29d20 74 65 33 45 78 70 72 43 6f 64 65 54 65 6d 70 28  te3ExprCodeTemp(
29d30 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
29d40 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
29d50 33 45 78 70 72 43 6f 64 65 54 61 72 67 65 74 28  3ExprCodeTarget(
29d60 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
29d70 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
29d80 33 45 78 70 72 43 6f 64 65 41 6e 64 43 61 63 68  3ExprCodeAndCach
29d90 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
29da0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
29db0 65 33 45 78 70 72 43 6f 64 65 45 78 70 72 4c 69  e3ExprCodeExprLi
29dc0 73 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c  st(Parse*, ExprL
29dd0 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ist*, int, int, 
29de0 75 38 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c  u8);.#define SQL
29df0 49 54 45 5f 45 43 45 4c 5f 44 55 50 20 20 20 20  ITE_ECEL_DUP    
29e00 20 20 30 78 30 31 20 20 2f 2a 20 44 65 65 70 2c    0x01  /* Deep,
29e10 20 6e 6f 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70   not shallow cop
29e20 69 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ies */.#define S
29e30 51 4c 49 54 45 5f 45 43 45 4c 5f 46 41 43 54 4f  QLITE_ECEL_FACTO
29e40 52 20 20 20 30 78 30 32 20 20 2f 2a 20 46 61 63  R   0x02  /* Fac
29e50 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74  tor out constant
29e60 20 74 65 72 6d 73 20 2a 2f 0a 23 64 65 66 69 6e   terms */.#defin
29e70 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 52 45  e SQLITE_ECEL_RE
29e80 46 20 20 20 20 20 20 30 78 30 34 20 20 2f 2a 20  F      0x04  /* 
29e90 55 73 65 20 45 78 70 72 4c 69 73 74 2e 75 2e 78  Use ExprList.u.x
29ea0 2e 69 4f 72 64 65 72 42 79 43 6f 6c 20 2a 2f 0a  .iOrderByCol */.
29eb0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45  #define SQLITE_E
29ec0 43 45 4c 5f 4f 4d 49 54 52 45 46 20 20 30 78 30  CEL_OMITREF  0x0
29ed0 38 20 20 2f 2a 20 4f 6d 69 74 20 69 66 20 45 78  8  /* Omit if Ex
29ee0 70 72 4c 69 73 74 2e 75 2e 78 2e 69 4f 72 64 65  prList.u.x.iOrde
29ef0 72 42 79 43 6f 6c 20 2a 2f 0a 76 6f 69 64 20 73  rByCol */.void s
29f00 71 6c 69 74 65 33 45 78 70 72 49 66 54 72 75 65  qlite3ExprIfTrue
29f10 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
29f20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
29f30 73 71 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c  sqlite3ExprIfFal
29f40 73 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  se(Parse*, Expr*
29f50 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
29f60 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 46  d sqlite3ExprIfF
29f70 61 6c 73 65 44 75 70 28 50 61 72 73 65 2a 2c 20  alseDup(Parse*, 
29f80 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  Expr*, int, int)
29f90 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  ;.Table *sqlite3
29fa0 46 69 6e 64 54 61 62 6c 65 28 73 71 6c 69 74 65  FindTable(sqlite
29fb0 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
29fc0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 64  const char*);.#d
29fd0 65 66 69 6e 65 20 4c 4f 43 41 54 45 5f 56 49 45  efine LOCATE_VIE
29fe0 57 20 20 20 20 30 78 30 31 0a 23 64 65 66 69 6e  W    0x01.#defin
29ff0 65 20 4c 4f 43 41 54 45 5f 4e 4f 45 52 52 20 20  e LOCATE_NOERR  
2a000 20 30 78 30 32 0a 54 61 62 6c 65 20 2a 73 71 6c   0x02.Table *sql
2a010 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 28  ite3LocateTable(
2a020 50 61 72 73 65 2a 2c 75 33 32 20 66 6c 61 67 73  Parse*,u32 flags
2a030 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f  ,const char*, co
2a040 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c  nst char*);.Tabl
2a050 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65  e *sqlite3Locate
2a060 54 61 62 6c 65 49 74 65 6d 28 50 61 72 73 65 2a  TableItem(Parse*
2a070 2c 75 33 32 20 66 6c 61 67 73 2c 73 74 72 75 63  ,u32 flags,struc
2a080 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a  t SrcList_item *
2a090 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65  );.Index *sqlite
2a0a0 33 46 69 6e 64 49 6e 64 65 78 28 73 71 6c 69 74  3FindIndex(sqlit
2a0b0 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
2a0c0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76   const char*);.v
2a0d0 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  oid sqlite3Unlin
2a0e0 6b 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28  kAndDeleteTable(
2a0f0 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e  sqlite3*,int,con
2a100 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
2a110 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
2a120 44 65 6c 65 74 65 49 6e 64 65 78 28 73 71 6c 69  DeleteIndex(sqli
2a130 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  te3*,int,const c
2a140 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
2a150 74 65 33 56 61 63 75 75 6d 28 50 61 72 73 65 2a  te3Vacuum(Parse*
2a160 2c 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71  ,Token*);.int sq
2a170 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28 63  lite3RunVacuum(c
2a180 68 61 72 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 2c  har**, sqlite3*,
2a190 20 69 6e 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c   int);.char *sql
2a1a0 69 74 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65  ite3NameFromToke
2a1b0 6e 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65  n(sqlite3*, Toke
2a1c0 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
2a1d0 45 78 70 72 43 6f 6d 70 61 72 65 28 50 61 72 73  ExprCompare(Pars
2a1e0 65 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c  e*,Expr*, Expr*,
2a1f0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
2a200 65 33 45 78 70 72 43 6f 6d 70 61 72 65 53 6b 69  e3ExprCompareSki
2a210 70 28 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20  p(Expr*, Expr*, 
2a220 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2a230 33 45 78 70 72 4c 69 73 74 43 6f 6d 70 61 72 65  3ExprListCompare
2a240 28 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72  (ExprList*, Expr
2a250 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  List*, int);.int
2a260 20 73 71 6c 69 74 65 33 45 78 70 72 49 6d 70 6c   sqlite3ExprImpl
2a270 69 65 73 45 78 70 72 28 50 61 72 73 65 2a 2c 45  iesExpr(Parse*,E
2a280 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  xpr*, Expr*, int
2a290 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2a2a0 70 72 49 6d 70 6c 69 65 73 4e 6f 6e 4e 75 6c 6c  prImpliesNonNull
2a2b0 52 6f 77 28 45 78 70 72 2a 2c 69 6e 74 29 3b 0a  Row(Expr*,int);.
2a2c0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
2a2d0 41 6e 61 6c 79 7a 65 41 67 67 72 65 67 61 74 65  AnalyzeAggregate
2a2e0 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20  s(NameContext*, 
2a2f0 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
2a300 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41  ite3ExprAnalyzeA
2a310 67 67 4c 69 73 74 28 4e 61 6d 65 43 6f 6e 74 65  ggList(NameConte
2a320 78 74 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a  xt*,ExprList*);.
2a330 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
2a340 6f 76 65 72 65 64 42 79 49 6e 64 65 78 28 45 78  overedByIndex(Ex
2a350 70 72 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20 49  pr*, int iCur, I
2a360 6e 64 65 78 20 2a 70 49 64 78 29 3b 0a 69 6e 74  ndex *pIdx);.int
2a370 20 73 71 6c 69 74 65 33 46 75 6e 63 74 69 6f 6e   sqlite3Function
2a380 55 73 65 73 54 68 69 73 53 72 63 28 45 78 70 72  UsesThisSrc(Expr
2a390 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 56 64  *, SrcList*);.Vd
2a3a0 62 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56 64  be *sqlite3GetVd
2a3b0 62 65 28 50 61 72 73 65 2a 29 3b 0a 23 69 66 6e  be(Parse*);.#ifn
2a3c0 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53  def SQLITE_UNTES
2a3d0 54 41 42 4c 45 0a 76 6f 69 64 20 73 71 6c 69 74  TABLE.void sqlit
2a3e0 65 33 50 72 6e 67 53 61 76 65 53 74 61 74 65 28  e3PrngSaveState(
2a3f0 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69  void);.void sqli
2a400 74 65 33 50 72 6e 67 52 65 73 74 6f 72 65 53 74  te3PrngRestoreSt
2a410 61 74 65 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69  ate(void);.#endi
2a420 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  f.void sqlite3Ro
2a430 6c 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74 65  llbackAll(sqlite
2a440 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  3*,int);.void sq
2a450 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53  lite3CodeVerifyS
2a460 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 69 6e  chema(Parse*, in
2a470 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2a480 43 6f 64 65 56 65 72 69 66 79 4e 61 6d 65 64 53  CodeVerifyNamedS
2a490 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 63 6f  chema(Parse*, co
2a4a0 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 29 3b 0a  nst char *zDb);.
2a4b0 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69  void sqlite3Begi
2a4c0 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72  nTransaction(Par
2a4d0 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  se*, int);.void 
2a4e0 73 71 6c 69 74 65 33 45 6e 64 54 72 61 6e 73 61  sqlite3EndTransa
2a4f0 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 69 6e 74  ction(Parse*,int
2a500 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
2a510 61 76 65 70 6f 69 6e 74 28 50 61 72 73 65 2a 2c  avepoint(Parse*,
2a520 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76   int, Token*);.v
2a530 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65  oid sqlite3Close
2a540 53 61 76 65 70 6f 69 6e 74 73 28 73 71 6c 69 74  Savepoints(sqlit
2a550 65 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  e3 *);.void sqli
2a560 74 65 33 4c 65 61 76 65 4d 75 74 65 78 41 6e 64  te3LeaveMutexAnd
2a570 43 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71 6c 69  CloseZombie(sqli
2a580 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  te3*);.int sqlit
2a590 65 33 45 78 70 72 49 64 54 6f 54 72 75 65 46 61  e3ExprIdToTrueFa
2a5a0 6c 73 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20  lse(Expr*);.int 
2a5b0 73 71 6c 69 74 65 33 45 78 70 72 54 72 75 74 68  sqlite3ExprTruth
2a5c0 56 61 6c 75 65 28 63 6f 6e 73 74 20 45 78 70 72  Value(const Expr
2a5d0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
2a5e0 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 28 45 78  xprIsConstant(Ex
2a5f0 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
2a600 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4e  3ExprIsConstantN
2a610 6f 74 4a 6f 69 6e 28 45 78 70 72 2a 29 3b 0a 69  otJoin(Expr*);.i
2a620 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
2a630 43 6f 6e 73 74 61 6e 74 4f 72 46 75 6e 63 74 69  ConstantOrFuncti
2a640 6f 6e 28 45 78 70 72 2a 2c 20 75 38 29 3b 0a 69  on(Expr*, u8);.i
2a650 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
2a660 43 6f 6e 73 74 61 6e 74 4f 72 47 72 6f 75 70 42  ConstantOrGroupB
2a670 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  y(Parse*, Expr*,
2a680 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74   ExprList*);.int
2a690 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 54 61   sqlite3ExprIsTa
2a6a0 62 6c 65 43 6f 6e 73 74 61 6e 74 28 45 78 70 72  bleConstant(Expr
2a6b0 2a 2c 69 6e 74 29 3b 0a 23 69 66 64 65 66 20 53  *,int);.#ifdef S
2a6c0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55 52  QLITE_ENABLE_CUR
2a6d0 53 4f 52 5f 48 49 4e 54 53 0a 69 6e 74 20 73 71  SOR_HINTS.int sq
2a6e0 6c 69 74 65 33 45 78 70 72 43 6f 6e 74 61 69 6e  lite3ExprContain
2a6f0 73 53 75 62 71 75 65 72 79 28 45 78 70 72 2a 29  sSubquery(Expr*)
2a700 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c  ;.#endif.int sql
2a710 69 74 65 33 45 78 70 72 49 73 49 6e 74 65 67 65  ite3ExprIsIntege
2a720 72 28 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a  r(Expr*, int*);.
2a730 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
2a740 61 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73 74 20 45  anBeNull(const E
2a750 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
2a760 65 33 45 78 70 72 4e 65 65 64 73 4e 6f 41 66 66  e3ExprNeedsNoAff
2a770 69 6e 69 74 79 43 68 61 6e 67 65 28 63 6f 6e 73  inityChange(cons
2a780 74 20 45 78 70 72 2a 2c 20 63 68 61 72 29 3b 0a  t Expr*, char);.
2a790 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 6f 77  int sqlite3IsRow
2a7a0 69 64 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  id(const char*);
2a7b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e  .void sqlite3Gen
2a7c0 65 72 61 74 65 52 6f 77 44 65 6c 65 74 65 28 0a  erateRowDelete(.
2a7d0 20 20 20 20 50 61 72 73 65 2a 2c 54 61 62 6c 65      Parse*,Table
2a7e0 2a 2c 54 72 69 67 67 65 72 2a 2c 69 6e 74 2c 69  *,Trigger*,int,i
2a7f0 6e 74 2c 69 6e 74 2c 69 31 36 2c 75 38 2c 75 38  nt,int,i16,u8,u8
2a800 2c 75 38 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  ,u8,int);.void s
2a810 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52 6f  qlite3GenerateRo
2a820 77 49 6e 64 65 78 44 65 6c 65 74 65 28 50 61 72  wIndexDelete(Par
2a830 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
2a840 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74  , int, int*, int
2a850 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
2a860 6e 65 72 61 74 65 49 6e 64 65 78 4b 65 79 28 50  nerateIndexKey(P
2a870 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69  arse*, Index*, i
2a880 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  nt, int, int, in
2a890 74 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a  t*,Index*,int);.
2a8a0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f  void sqlite3Reso
2a8b0 6c 76 65 50 61 72 74 49 64 78 4c 61 62 65 6c 28  lvePartIdxLabel(
2a8c0 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Parse*,int);.voi
2a8d0 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  d sqlite3Generat
2a8e0 65 43 6f 6e 73 74 72 61 69 6e 74 43 68 65 63 6b  eConstraintCheck
2a8f0 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c  s(Parse*,Table*,
2a900 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  int*,int,int,int
2a910 2c 69 6e 74 2c 0a 20 20 20 20 20 20 20 20 20 20  ,int,.          
2a920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a930 20 20 20 20 20 20 20 20 20 20 20 75 38 2c 75 38             u8,u8
2a940 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 2c 55  ,int,int*,int*,U
2a950 70 73 65 72 74 2a 29 3b 0a 23 69 66 64 65 66 20  psert*);.#ifdef 
2a960 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4e 55  SQLITE_ENABLE_NU
2a970 4c 4c 5f 54 52 49 4d 0a 20 20 76 6f 69 64 20 73  LL_TRIM.  void s
2a980 71 6c 69 74 65 33 53 65 74 4d 61 6b 65 52 65 63  qlite3SetMakeRec
2a990 6f 72 64 50 35 28 56 64 62 65 2a 2c 54 61 62 6c  ordP5(Vdbe*,Tabl
2a9a0 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  e*);.#else.# def
2a9b0 69 6e 65 20 73 71 6c 69 74 65 33 53 65 74 4d 61  ine sqlite3SetMa
2a9c0 6b 65 52 65 63 6f 72 64 50 35 28 41 2c 42 29 0a  keRecordP5(A,B).
2a9d0 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
2a9e0 74 65 33 43 6f 6d 70 6c 65 74 65 49 6e 73 65 72  te3CompleteInser
2a9f0 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62 6c  tion(Parse*,Tabl
2aa00 65 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69  e*,int,int,int,i
2aa10 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29  nt*,int,int,int)
2aa20 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70 65  ;.int sqlite3Ope
2aa30 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69 63 65 73  nTableAndIndices
2aa40 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
2aa50 20 69 6e 74 2c 20 75 38 2c 20 69 6e 74 2c 20 75   int, u8, int, u
2aa60 38 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b  8*, int*, int*);
2aa70 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67  .void sqlite3Beg
2aa80 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e  inWriteOperation
2aa90 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
2aaa0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2aab0 4d 75 6c 74 69 57 72 69 74 65 28 50 61 72 73 65  MultiWrite(Parse
2aac0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2aad0 4d 61 79 41 62 6f 72 74 28 50 61 72 73 65 2a 29  MayAbort(Parse*)
2aae0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 48 61  ;.void sqlite3Ha
2aaf0 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72  ltConstraint(Par
2ab00 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 63  se*, int, int, c
2ab10 68 61 72 2a 2c 20 69 38 2c 20 75 38 29 3b 0a 76  har*, i8, u8);.v
2ab20 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 69 71 75  oid sqlite3Uniqu
2ab30 65 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73  eConstraint(Pars
2ab40 65 2a 2c 20 69 6e 74 2c 20 49 6e 64 65 78 2a 29  e*, int, Index*)
2ab50 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  ;.void sqlite3Ro
2ab60 77 69 64 43 6f 6e 73 74 72 61 69 6e 74 28 50 61  widConstraint(Pa
2ab70 72 73 65 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65  rse*, int, Table
2ab80 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
2ab90 33 45 78 70 72 44 75 70 28 73 71 6c 69 74 65 33  3ExprDup(sqlite3
2aba0 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 45 78  *,Expr*,int);.Ex
2abb0 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45  prList *sqlite3E
2abc0 78 70 72 4c 69 73 74 44 75 70 28 73 71 6c 69 74  xprListDup(sqlit
2abd0 65 33 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e  e3*,ExprList*,in
2abe0 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c  t);.SrcList *sql
2abf0 69 74 65 33 53 72 63 4c 69 73 74 44 75 70 28 73  ite3SrcListDup(s
2ac00 71 6c 69 74 65 33 2a 2c 53 72 63 4c 69 73 74 2a  qlite3*,SrcList*
2ac10 2c 69 6e 74 29 3b 0a 49 64 4c 69 73 74 20 2a 73  ,int);.IdList *s
2ac20 71 6c 69 74 65 33 49 64 4c 69 73 74 44 75 70 28  qlite3IdListDup(
2ac30 73 71 6c 69 74 65 33 2a 2c 49 64 4c 69 73 74 2a  sqlite3*,IdList*
2ac40 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74  );.Select *sqlit
2ac50 65 33 53 65 6c 65 63 74 44 75 70 28 73 71 6c 69  e3SelectDup(sqli
2ac60 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74  te3*,Select*,int
2ac70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49  );.void sqlite3I
2ac80 6e 73 65 72 74 42 75 69 6c 74 69 6e 46 75 6e 63  nsertBuiltinFunc
2ac90 73 28 46 75 6e 63 44 65 66 2a 2c 69 6e 74 29 3b  s(FuncDef*,int);
2aca0 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65  .FuncDef *sqlite
2acb0 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71  3FindFunction(sq
2acc0 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
2acd0 72 2a 2c 69 6e 74 2c 75 38 2c 75 38 29 3b 0a 76  r*,int,u8,u8);.v
2ace0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73  oid sqlite3Regis
2acf0 74 65 72 42 75 69 6c 74 69 6e 46 75 6e 63 74 69  terBuiltinFuncti
2ad00 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  ons(void);.void 
2ad10 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 44  sqlite3RegisterD
2ad20 61 74 65 54 69 6d 65 46 75 6e 63 74 69 6f 6e 73  ateTimeFunctions
2ad30 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
2ad40 69 74 65 33 52 65 67 69 73 74 65 72 50 65 72 43  ite3RegisterPerC
2ad50 6f 6e 6e 65 63 74 69 6f 6e 42 75 69 6c 74 69 6e  onnectionBuiltin
2ad60 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65  Functions(sqlite
2ad70 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  3*);.int sqlite3
2ad80 53 61 66 65 74 79 43 68 65 63 6b 4f 6b 28 73 71  SafetyCheckOk(sq
2ad90 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c  lite3*);.int sql
2ada0 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 53  ite3SafetyCheckS
2adb0 69 63 6b 4f 72 4f 6b 28 73 71 6c 69 74 65 33 2a  ickOrOk(sqlite3*
2adc0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
2add0 68 61 6e 67 65 43 6f 6f 6b 69 65 28 50 61 72 73  hangeCookie(Pars
2ade0 65 2a 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 20 21  e*, int);..#if !
2adf0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
2ae00 4d 49 54 5f 56 49 45 57 29 20 26 26 20 21 64 65  MIT_VIEW) && !de
2ae10 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
2ae20 54 5f 54 52 49 47 47 45 52 29 0a 76 6f 69 64 20  T_TRIGGER).void 
2ae30 73 71 6c 69 74 65 33 4d 61 74 65 72 69 61 6c 69  sqlite3Materiali
2ae40 7a 65 56 69 65 77 28 50 61 72 73 65 2a 2c 20 54  zeView(Parse*, T
2ae50 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78  able*, Expr*, Ex
2ae60 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 69 6e  prList*,Expr*,in
2ae70 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  t);.#endif..#ifn
2ae80 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2ae90 54 52 49 47 47 45 52 0a 20 20 76 6f 69 64 20 73  TRIGGER.  void s
2aea0 71 6c 69 74 65 33 42 65 67 69 6e 54 72 69 67 67  qlite3BeginTrigg
2aeb0 65 72 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  er(Parse*, Token
2aec0 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74  *,Token*,int,int
2aed0 2c 49 64 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74  ,IdList*,SrcList
2aee0 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
2aef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78                Ex
2af00 70 72 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b 0a 20  pr*,int, int);. 
2af10 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e   void sqlite3Fin
2af20 69 73 68 54 72 69 67 67 65 72 28 50 61 72 73 65  ishTrigger(Parse
2af30 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 2c  *, TriggerStep*,
2af40 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f 69 64   Token*);.  void
2af50 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67   sqlite3DropTrig
2af60 67 65 72 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ger(Parse*, SrcL
2af70 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f  ist*, int);.  vo
2af80 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72  id sqlite3DropTr
2af90 69 67 67 65 72 50 74 72 28 50 61 72 73 65 2a 2c  iggerPtr(Parse*,
2afa0 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 54 72   Trigger*);.  Tr
2afb0 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72  igger *sqlite3Tr
2afc0 69 67 67 65 72 73 45 78 69 73 74 28 50 61 72 73  iggersExist(Pars
2afd0 65 20 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  e *, Table*, int
2afe0 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
2aff0 20 2a 70 4d 61 73 6b 29 3b 0a 20 20 54 72 69 67   *pMask);.  Trig
2b000 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67  ger *sqlite3Trig
2b010 67 65 72 4c 69 73 74 28 50 61 72 73 65 20 2a 2c  gerList(Parse *,
2b020 20 54 61 62 6c 65 20 2a 29 3b 0a 20 20 76 6f 69   Table *);.  voi
2b030 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77  d sqlite3CodeRow
2b040 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20  Trigger(Parse*, 
2b050 54 72 69 67 67 65 72 20 2a 2c 20 69 6e 74 2c 20  Trigger *, int, 
2b060 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20  ExprList*, int, 
2b070 54 61 62 6c 65 20 2a 2c 0a 20 20 20 20 20 20 20  Table *,.       
2b080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b090 20 20 20 20 20 69 6e 74 2c 20 69 6e 74 2c 20 69       int, int, i
2b0a0 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
2b0b0 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65  te3CodeRowTrigge
2b0c0 72 44 69 72 65 63 74 28 50 61 72 73 65 20 2a 2c  rDirect(Parse *,
2b0d0 20 54 72 69 67 67 65 72 20 2a 2c 20 54 61 62 6c   Trigger *, Tabl
2b0e0 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  e *, int, int, i
2b0f0 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
2b100 74 65 56 69 65 77 54 72 69 67 67 65 72 73 28 50  teViewTriggers(P
2b110 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45  arse*, Table*, E
2b120 78 70 72 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c  xpr*, int, ExprL
2b130 69 73 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ist*);.  void sq
2b140 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67  lite3DeleteTrigg
2b150 65 72 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c  erStep(sqlite3*,
2b160 20 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a   TriggerStep*);.
2b170 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
2b180 71 6c 69 74 65 33 54 72 69 67 67 65 72 53 65 6c  qlite3TriggerSel
2b190 65 63 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a  ectStep(sqlite3*
2b1a0 2c 53 65 6c 65 63 74 2a 2c 0a 20 20 20 20 20 20  ,Select*,.      
2b1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b1d0 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f    const char*,co
2b1e0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 54 72  nst char*);.  Tr
2b1f0 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74  iggerStep *sqlit
2b200 65 33 54 72 69 67 67 65 72 49 6e 73 65 72 74 53  e3TriggerInsertS
2b210 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b  tep(sqlite3*,Tok
2b220 65 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c 0a 20 20  en*, IdList*,.  
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 20 20 53 65 6c 65 63 74 2a 2c 75 38        Select*,u8
2b260 2c 55 70 73 65 72 74 2a 2c 0a 20 20 20 20 20 20  ,Upsert*,.      
2b270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b290 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f    const char*,co
2b2a0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 54 72  nst char*);.  Tr
2b2b0 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74  iggerStep *sqlit
2b2c0 65 33 54 72 69 67 67 65 72 55 70 64 61 74 65 53  e3TriggerUpdateS
2b2d0 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b  tep(sqlite3*,Tok
2b2e0 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 45  en*,ExprList*, E
2b2f0 78 70 72 2a 2c 20 75 38 2c 0a 20 20 20 20 20 20  xpr*, u8,.      
2b300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b320 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f    const char*,co
2b330 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 54 72  nst char*);.  Tr
2b340 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74  iggerStep *sqlit
2b350 65 33 54 72 69 67 67 65 72 44 65 6c 65 74 65 53  e3TriggerDeleteS
2b360 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b  tep(sqlite3*,Tok
2b370 65 6e 2a 2c 20 45 78 70 72 2a 2c 0a 20 20 20 20  en*, Expr*,.    
2b380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b3a0 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c      const char*,
2b3b0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
2b3c0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
2b3d0 74 65 54 72 69 67 67 65 72 28 73 71 6c 69 74 65  teTrigger(sqlite
2b3e0 33 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20  3*, Trigger*);. 
2b3f0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c   void sqlite3Unl
2b400 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67  inkAndDeleteTrig
2b410 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  ger(sqlite3*,int
2b420 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20  ,const char*);. 
2b430 20 75 33 32 20 73 71 6c 69 74 65 33 54 72 69 67   u32 sqlite3Trig
2b440 67 65 72 43 6f 6c 6d 61 73 6b 28 50 61 72 73 65  gerColmask(Parse
2b450 2a 2c 54 72 69 67 67 65 72 2a 2c 45 78 70 72 4c  *,Trigger*,ExprL
2b460 69 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61 62  ist*,int,int,Tab
2b470 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20 64 65 66 69  le*,int);.# defi
2b480 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73 65 54  ne sqlite3ParseT
2b490 6f 70 6c 65 76 65 6c 28 70 29 20 28 28 70 29 2d  oplevel(p) ((p)-
2b4a0 3e 70 54 6f 70 6c 65 76 65 6c 20 3f 20 28 70 29  >pToplevel ? (p)
2b4b0 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3a 20 28 70  ->pToplevel : (p
2b4c0 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
2b4d0 74 65 33 49 73 54 6f 70 6c 65 76 65 6c 28 70 29  te3IsToplevel(p)
2b4e0 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c   ((p)->pToplevel
2b4f0 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  ==0).#else.# def
2b500 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67  ine sqlite3Trigg
2b510 65 72 73 45 78 69 73 74 28 42 2c 43 2c 44 2c 45  ersExist(B,C,D,E
2b520 2c 46 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73  ,F) 0.# define s
2b530 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67  qlite3DeleteTrig
2b540 67 65 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e  ger(A,B).# defin
2b550 65 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69  e sqlite3DropTri
2b560 67 67 65 72 50 74 72 28 41 2c 42 29 0a 23 20 64  ggerPtr(A,B).# d
2b570 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55 6e 6c  efine sqlite3Unl
2b580 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67  inkAndDeleteTrig
2b590 67 65 72 28 41 2c 42 2c 43 29 0a 23 20 64 65 66  ger(A,B,C).# def
2b5a0 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52  ine sqlite3CodeR
2b5b0 6f 77 54 72 69 67 67 65 72 28 41 2c 42 2c 43 2c  owTrigger(A,B,C,
2b5c0 44 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23 20 64  D,E,F,G,H,I).# d
2b5d0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64  efine sqlite3Cod
2b5e0 65 52 6f 77 54 72 69 67 67 65 72 44 69 72 65 63  eRowTriggerDirec
2b5f0 74 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a 23  t(A,B,C,D,E,F).#
2b600 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
2b610 72 69 67 67 65 72 4c 69 73 74 28 58 2c 20 59 29  riggerList(X, Y)
2b620 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69   0.# define sqli
2b630 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c  te3ParseToplevel
2b640 28 70 29 20 70 0a 23 20 64 65 66 69 6e 65 20 73  (p) p.# define s
2b650 71 6c 69 74 65 33 49 73 54 6f 70 6c 65 76 65 6c  qlite3IsToplevel
2b660 28 70 29 20 31 0a 23 20 64 65 66 69 6e 65 20 73  (p) 1.# define s
2b670 71 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c  qlite3TriggerCol
2b680 6d 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c 46  mask(A,B,C,D,E,F
2b690 2c 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a 69 6e  ,G) 0.#endif..in
2b6a0 74 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54 79 70  t sqlite3JoinTyp
2b6b0 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  e(Parse*, Token*
2b6c0 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
2b6d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
2b6e0 72 65 61 74 65 46 6f 72 65 69 67 6e 4b 65 79 28  reateForeignKey(
2b6f0 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74  Parse*, ExprList
2b700 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c  *, Token*, ExprL
2b710 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  ist*, int);.void
2b720 20 73 71 6c 69 74 65 33 44 65 66 65 72 46 6f 72   sqlite3DeferFor
2b730 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20  eignKey(Parse*, 
2b740 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  int);.#ifndef SQ
2b750 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52  LITE_OMIT_AUTHOR
2b760 49 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20 73  IZATION.  void s
2b770 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 28 50  qlite3AuthRead(P
2b780 61 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63 68 65  arse*,Expr*,Sche
2b790 6d 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b 0a 20  ma*,SrcList*);. 
2b7a0 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68   int sqlite3Auth
2b7b0 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 69 6e 74  Check(Parse*,int
2b7c0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
2b7d0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
2b7e0 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64  t char*);.  void
2b7f0 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74   sqlite3AuthCont
2b800 65 78 74 50 75 73 68 28 50 61 72 73 65 2a 2c 20  extPush(Parse*, 
2b810 41 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20 63 6f  AuthContext*, co
2b820 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
2b830 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f  id sqlite3AuthCo
2b840 6e 74 65 78 74 50 6f 70 28 41 75 74 68 43 6f 6e  ntextPop(AuthCon
2b850 74 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71  text*);.  int sq
2b860 6c 69 74 65 33 41 75 74 68 52 65 61 64 43 6f 6c  lite3AuthReadCol
2b870 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
2b880 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  har *, const cha
2b890 72 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65  r *, int);.#else
2b8a0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2b8b0 33 41 75 74 68 52 65 61 64 28 61 2c 62 2c 63 2c  3AuthRead(a,b,c,
2b8c0 64 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  d).# define sqli
2b8d0 74 65 33 41 75 74 68 43 68 65 63 6b 28 61 2c 62  te3AuthCheck(a,b
2b8e0 2c 63 2c 64 2c 65 29 20 20 20 20 53 51 4c 49 54  ,c,d,e)    SQLIT
2b8f0 45 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20 73 71  E_OK.# define sq
2b900 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74  lite3AuthContext
2b910 50 75 73 68 28 61 2c 62 2c 63 29 0a 23 20 64 65  Push(a,b,c).# de
2b920 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68  fine sqlite3Auth
2b930 43 6f 6e 74 65 78 74 50 6f 70 28 61 29 20 20 28  ContextPop(a)  (
2b940 28 76 6f 69 64 29 28 61 29 29 0a 23 65 6e 64 69  (void)(a)).#endi
2b950 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 74  f.void sqlite3At
2b960 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70  tach(Parse*, Exp
2b970 72 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a  r*, Expr*, Expr*
2b980 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
2b990 65 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78  etach(Parse*, Ex
2b9a0 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
2b9b0 65 33 46 69 78 49 6e 69 74 28 44 62 46 69 78 65  e3FixInit(DbFixe
2b9c0 72 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e 74 2c  r*, Parse*, int,
2b9d0 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
2b9e0 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  nst Token*);.int
2b9f0 20 73 71 6c 69 74 65 33 46 69 78 53 72 63 4c 69   sqlite3FixSrcLi
2ba00 73 74 28 44 62 46 69 78 65 72 2a 2c 20 53 72 63  st(DbFixer*, Src
2ba10 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
2ba20 74 65 33 46 69 78 53 65 6c 65 63 74 28 44 62 46  te3FixSelect(DbF
2ba30 69 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  ixer*, Select*);
2ba40 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45  .int sqlite3FixE
2ba50 78 70 72 28 44 62 46 69 78 65 72 2a 2c 20 45 78  xpr(DbFixer*, Ex
2ba60 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
2ba70 33 46 69 78 45 78 70 72 4c 69 73 74 28 44 62 46  3FixExprList(DbF
2ba80 69 78 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a  ixer*, ExprList*
2ba90 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
2baa0 78 54 72 69 67 67 65 72 53 74 65 70 28 44 62 46  xTriggerStep(DbF
2bab0 69 78 65 72 2a 2c 20 54 72 69 67 67 65 72 53 74  ixer*, TriggerSt
2bac0 65 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ep*);.int sqlite
2bad0 33 41 74 6f 46 28 63 6f 6e 73 74 20 63 68 61 72  3AtoF(const char
2bae0 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20 69 6e   *z, double*, in
2baf0 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69  t, u8);.int sqli
2bb00 74 65 33 47 65 74 49 6e 74 33 32 28 63 6f 6e 73  te3GetInt32(cons
2bb10 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a 29 3b  t char *, int*);
2bb20 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69  .int sqlite3Atoi
2bb30 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23  (const char*);.#
2bb40 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2bb50 49 54 5f 55 54 46 31 36 0a 69 6e 74 20 73 71 6c  IT_UTF16.int sql
2bb60 69 74 65 33 55 74 66 31 36 42 79 74 65 4c 65 6e  ite3Utf16ByteLen
2bb70 28 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 44 61  (const void *pDa
2bb80 74 61 2c 20 69 6e 74 20 6e 43 68 61 72 29 3b 0a  ta, int nChar);.
2bb90 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74  #endif.int sqlit
2bba0 65 33 55 74 66 38 43 68 61 72 4c 65 6e 28 63 6f  e3Utf8CharLen(co
2bbb0 6e 73 74 20 63 68 61 72 20 2a 70 44 61 74 61 2c  nst char *pData,
2bbc0 20 69 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33 32   int nByte);.u32
2bbd0 20 73 71 6c 69 74 65 33 55 74 66 38 52 65 61 64   sqlite3Utf8Read
2bbe0 28 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 4c 6f  (const u8**);.Lo
2bbf0 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45  gEst sqlite3LogE
2bc00 73 74 28 75 36 34 29 3b 0a 4c 6f 67 45 73 74 20  st(u64);.LogEst 
2bc10 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 41 64 64  sqlite3LogEstAdd
2bc20 28 4c 6f 67 45 73 74 2c 4c 6f 67 45 73 74 29 3b  (LogEst,LogEst);
2bc30 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2bc40 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2bc50 45 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33  E.LogEst sqlite3
2bc60 4c 6f 67 45 73 74 46 72 6f 6d 44 6f 75 62 6c 65  LogEstFromDouble
2bc70 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6e 64 69 66  (double);.#endif
2bc80 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
2bc90 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f  ITE_ENABLE_STMT_
2bca0 53 43 41 4e 53 54 41 54 55 53 29 20 7c 7c 20 5c  SCANSTATUS) || \
2bcb0 0a 20 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c  .    defined(SQL
2bcc0 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
2bcd0 5f 4f 52 5f 53 54 41 54 34 29 20 7c 7c 20 5c 0a  _OR_STAT4) || \.
2bce0 20 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c 49      defined(SQLI
2bcf0 54 45 5f 45 58 50 4c 41 49 4e 5f 45 53 54 49 4d  TE_EXPLAIN_ESTIM
2bd00 41 54 45 44 5f 52 4f 57 53 29 0a 75 36 34 20 73  ATED_ROWS).u64 s
2bd10 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e  qlite3LogEstToIn
2bd20 74 28 4c 6f 67 45 73 74 29 3b 0a 23 65 6e 64 69  t(LogEst);.#endi
2bd30 66 0a 56 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  f.VList *sqlite3
2bd40 56 4c 69 73 74 41 64 64 28 73 71 6c 69 74 65 33  VListAdd(sqlite3
2bd50 2a 2c 56 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63  *,VList*,const c
2bd60 68 61 72 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 63  har*,int,int);.c
2bd70 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
2bd80 65 33 56 4c 69 73 74 4e 75 6d 54 6f 4e 61 6d 65  e3VListNumToName
2bd90 28 56 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 69 6e  (VList*,int);.in
2bda0 74 20 73 71 6c 69 74 65 33 56 4c 69 73 74 4e 61  t sqlite3VListNa
2bdb0 6d 65 54 6f 4e 75 6d 28 56 4c 69 73 74 2a 2c 63  meToNum(VList*,c
2bdc0 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b  onst char*,int);
2bdd0 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73  ../*.** Routines
2bde0 20 74 6f 20 72 65 61 64 20 61 6e 64 20 77 72 69   to read and wri
2bdf0 74 65 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67  te variable-leng
2be00 74 68 20 69 6e 74 65 67 65 72 73 2e 20 20 54 68  th integers.  Th
2be10 65 73 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62  ese used to.** b
2be20 65 20 64 65 66 69 6e 65 64 20 6c 6f 63 61 6c 6c  e defined locall
2be30 79 2c 20 62 75 74 20 6e 6f 77 20 77 65 20 75 73  y, but now we us
2be40 65 20 74 68 65 20 76 61 72 69 6e 74 20 72 6f 75  e the varint rou
2be50 74 69 6e 65 73 20 69 6e 20 74 68 65 20 75 74 69  tines in the uti
2be60 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2f 0a  l.c.** file..*/.
2be70 69 6e 74 20 73 71 6c 69 74 65 33 50 75 74 56 61  int sqlite3PutVa
2be80 72 69 6e 74 28 75 6e 73 69 67 6e 65 64 20 63 68  rint(unsigned ch
2be90 61 72 2a 2c 20 75 36 34 29 3b 0a 75 38 20 73 71  ar*, u64);.u8 sq
2bea0 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 28 63  lite3GetVarint(c
2beb0 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
2bec0 61 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a 75 38  ar *, u64 *);.u8
2bed0 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e   sqlite3GetVarin
2bee0 74 33 32 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e  t32(const unsign
2bef0 65 64 20 63 68 61 72 20 2a 2c 20 75 33 32 20 2a  ed char *, u32 *
2bf00 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61  );.int sqlite3Va
2bf10 72 69 6e 74 4c 65 6e 28 75 36 34 20 76 29 3b 0a  rintLen(u64 v);.
2bf20 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 6d 6f  ./*.** The commo
2bf30 6e 20 63 61 73 65 20 69 73 20 66 6f 72 20 61 20  n case is for a 
2bf40 76 61 72 69 6e 74 20 74 6f 20 62 65 20 61 20 73  varint to be a s
2bf50 69 6e 67 6c 65 20 62 79 74 65 2e 20 20 54 68 65  ingle byte.  The
2bf60 79 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 6d  y following.** m
2bf70 61 63 72 6f 73 20 68 61 6e 64 6c 65 20 74 68 65  acros handle the
2bf80 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 69 74   common case wit
2bf90 68 6f 75 74 20 61 20 70 72 6f 63 65 64 75 72 65  hout a procedure
2bfa0 20 63 61 6c 6c 2c 20 62 75 74 20 74 68 65 6e 20   call, but then 
2bfb0 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 70 72 6f 63  call.** the proc
2bfc0 65 64 75 72 65 20 66 6f 72 20 6c 61 72 67 65 72  edure for larger
2bfd0 20 76 61 72 69 6e 74 73 2e 0a 2a 2f 0a 23 64 65   varints..*/.#de
2bfe0 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74 33 32  fine getVarint32
2bff0 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28  (A,B)  \.  (u8)(
2c000 28 2a 28 41 29 3c 28 75 38 29 30 78 38 30 29 3f  (*(A)<(u8)0x80)?
2c010 28 28 42 29 3d 28 75 33 32 29 2a 28 41 29 29 2c  ((B)=(u32)*(A)),
2c020 31 3a 73 71 6c 69 74 65 33 47 65 74 56 61 72 69  1:sqlite3GetVari
2c030 6e 74 33 32 28 28 41 29 2c 28 75 33 32 20 2a 29  nt32((A),(u32 *)
2c040 26 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20 70  &(B))).#define p
2c050 75 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20  utVarint32(A,B) 
2c060 20 5c 0a 20 20 28 75 38 29 28 28 28 75 33 32 29   \.  (u8)(((u32)
2c070 28 42 29 3c 28 75 33 32 29 30 78 38 30 29 3f 28  (B)<(u32)0x80)?(
2c080 2a 28 41 29 3d 28 75 6e 73 69 67 6e 65 64 20 63  *(A)=(unsigned c
2c090 68 61 72 29 28 42 29 29 2c 31 3a 5c 0a 20 20 73  har)(B)),1:\.  s
2c0a0 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 28  qlite3PutVarint(
2c0b0 28 41 29 2c 28 42 29 29 29 0a 23 64 65 66 69 6e  (A),(B))).#defin
2c0c0 65 20 67 65 74 56 61 72 69 6e 74 20 20 20 20 73  e getVarint    s
2c0d0 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 0a  qlite3GetVarint.
2c0e0 23 64 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e  #define putVarin
2c0f0 74 20 20 20 20 73 71 6c 69 74 65 33 50 75 74 56  t    sqlite3PutV
2c100 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63 68  arint...const ch
2c110 61 72 20 2a 73 71 6c 69 74 65 33 49 6e 64 65 78  ar *sqlite3Index
2c120 41 66 66 69 6e 69 74 79 53 74 72 28 73 71 6c 69  AffinityStr(sqli
2c130 74 65 33 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 76  te3*, Index*);.v
2c140 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65  oid sqlite3Table
2c150 41 66 66 69 6e 69 74 79 28 56 64 62 65 2a 2c 20  Affinity(Vdbe*, 
2c160 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 63 68  Table*, int);.ch
2c170 61 72 20 73 71 6c 69 74 65 33 43 6f 6d 70 61 72  ar sqlite3Compar
2c180 65 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a  eAffinity(Expr *
2c190 70 45 78 70 72 2c 20 63 68 61 72 20 61 66 66 32  pExpr, char aff2
2c1a0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
2c1b0 64 65 78 41 66 66 69 6e 69 74 79 4f 6b 28 45 78  dexAffinityOk(Ex
2c1c0 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20  pr *pExpr, char 
2c1d0 69 64 78 5f 61 66 66 69 6e 69 74 79 29 3b 0a 63  idx_affinity);.c
2c1e0 68 61 72 20 73 71 6c 69 74 65 33 54 61 62 6c 65  har sqlite3Table
2c1f0 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 54  ColumnAffinity(T
2c200 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 63 68 61 72  able*,int);.char
2c210 20 73 71 6c 69 74 65 33 45 78 70 72 41 66 66 69   sqlite3ExprAffi
2c220 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78 70 72  nity(Expr *pExpr
2c230 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74  );.int sqlite3At
2c240 6f 69 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a  oi64(const char*
2c250 2c 20 69 36 34 2a 2c 20 69 6e 74 2c 20 75 38 29  , i64*, int, u8)
2c260 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 65 63  ;.int sqlite3Dec
2c270 4f 72 48 65 78 54 6f 49 36 34 28 63 6f 6e 73 74  OrHexToI64(const
2c280 20 63 68 61 72 2a 2c 20 69 36 34 2a 29 3b 0a 76   char*, i64*);.v
2c290 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72  oid sqlite3Error
2c2a0 57 69 74 68 4d 73 67 28 73 71 6c 69 74 65 33 2a  WithMsg(sqlite3*
2c2b0 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  , int, const cha
2c2c0 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71  r*,...);.void sq
2c2d0 6c 69 74 65 33 45 72 72 6f 72 28 73 71 6c 69 74  lite3Error(sqlit
2c2e0 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e3*,int);.void s
2c2f0 71 6c 69 74 65 33 53 79 73 74 65 6d 45 72 72 6f  qlite3SystemErro
2c300 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b  r(sqlite3*,int);
2c310 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 48 65  .void *sqlite3He
2c320 78 54 6f 42 6c 6f 62 28 73 71 6c 69 74 65 33 2a  xToBlob(sqlite3*
2c330 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c  , const char *z,
2c340 20 69 6e 74 20 6e 29 3b 0a 75 38 20 73 71 6c 69   int n);.u8 sqli
2c350 74 65 33 48 65 78 54 6f 49 6e 74 28 69 6e 74 20  te3HexToInt(int 
2c360 68 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  h);.int sqlite3T
2c370 77 6f 50 61 72 74 4e 61 6d 65 28 50 61 72 73 65  woPartName(Parse
2c380 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b   *, Token *, Tok
2c390 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b  en *, Token **);
2c3a0 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ..#if defined(SQ
2c3b0 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41  LITE_NEED_ERR_NA
2c3c0 4d 45 29 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  ME).const char *
2c3d0 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 69  sqlite3ErrName(i
2c3e0 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  nt);.#endif..#if
2c3f0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
2c400 45 5f 44 45 53 45 52 49 41 4c 49 5a 45 0a 69 6e  E_DESERIALIZE.in
2c410 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 62 49 6e  t sqlite3MemdbIn
2c420 69 74 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66  it(void);.#endif
2c430 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  ..const char *sq
2c440 6c 69 74 65 33 45 72 72 53 74 72 28 69 6e 74 29  lite3ErrStr(int)
2c450 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 61  ;.int sqlite3Rea
2c460 64 53 63 68 65 6d 61 28 50 61 72 73 65 20 2a 70  dSchema(Parse *p
2c470 50 61 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71 20  Parse);.CollSeq 
2c480 2a 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c  *sqlite3FindColl
2c490 53 65 71 28 73 71 6c 69 74 65 33 2a 2c 75 38 20  Seq(sqlite3*,u8 
2c4a0 65 6e 63 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  enc, const char*
2c4b0 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,int);.int sqlit
2c4c0 65 33 49 73 42 69 6e 61 72 79 28 63 6f 6e 73 74  e3IsBinary(const
2c4d0 20 43 6f 6c 6c 53 65 71 2a 29 3b 0a 43 6f 6c 6c   CollSeq*);.Coll
2c4e0 53 65 71 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61  Seq *sqlite3Loca
2c4f0 74 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20  teCollSeq(Parse 
2c500 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63  *pParse, const c
2c510 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a 43 6f 6c 6c  har*zName);.Coll
2c520 53 65 71 20 2a 73 71 6c 69 74 65 33 45 78 70 72  Seq *sqlite3Expr
2c530 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70  CollSeq(Parse *p
2c540 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70 45 78  Parse, Expr *pEx
2c550 70 72 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  pr);.CollSeq *sq
2c560 6c 69 74 65 33 45 78 70 72 4e 4e 43 6f 6c 6c 53  lite3ExprNNCollS
2c570 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  eq(Parse *pParse
2c580 2c 20 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a  , Expr *pExpr);.
2c590 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
2c5a0 6f 6c 6c 53 65 71 4d 61 74 63 68 28 50 61 72 73  ollSeqMatch(Pars
2c5b0 65 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b  e*,Expr*,Expr*);
2c5c0 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
2c5d0 70 72 41 64 64 43 6f 6c 6c 61 74 65 54 6f 6b 65  prAddCollateToke
2c5e0 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  n(Parse *pParse,
2c5f0 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f   Expr*, const To
2c600 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 45 78 70 72  ken*, int);.Expr
2c610 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64 64   *sqlite3ExprAdd
2c620 43 6f 6c 6c 61 74 65 53 74 72 69 6e 67 28 50 61  CollateString(Pa
2c630 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74  rse*,Expr*,const
2c640 20 63 68 61 72 2a 29 3b 0a 45 78 70 72 20 2a 73   char*);.Expr *s
2c650 71 6c 69 74 65 33 45 78 70 72 53 6b 69 70 43 6f  qlite3ExprSkipCo
2c660 6c 6c 61 74 65 28 45 78 70 72 2a 29 3b 0a 69 6e  llate(Expr*);.in
2c670 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 43 6f  t sqlite3CheckCo
2c680 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20 43  llSeq(Parse *, C
2c690 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e 74 20 73  ollSeq *);.int s
2c6a0 71 6c 69 74 65 33 43 68 65 63 6b 4f 62 6a 65 63  qlite3CheckObjec
2c6b0 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 63  tName(Parse *, c
2c6c0 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 76 6f  onst char *);.vo
2c6d0 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  id sqlite3VdbeSe
2c6e0 74 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33  tChanges(sqlite3
2c6f0 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71   *, int);.int sq
2c700 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28 69 36  lite3AddInt64(i6
2c710 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c  4*,i64);.int sql
2c720 69 74 65 33 53 75 62 49 6e 74 36 34 28 69 36 34  ite3SubInt64(i64
2c730 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  *,i64);.int sqli
2c740 74 65 33 4d 75 6c 49 6e 74 36 34 28 69 36 34 2a  te3MulInt64(i64*
2c750 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,i64);.int sqlit
2c760 65 33 41 62 73 49 6e 74 33 32 28 69 6e 74 29 3b  e3AbsInt32(int);
2c770 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
2c780 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a  NABLE_8_3_NAMES.
2c790 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6c 65  void sqlite3File
2c7a0 53 75 66 66 69 78 33 28 63 6f 6e 73 74 20 63 68  Suffix3(const ch
2c7b0 61 72 2a 2c 20 63 68 61 72 2a 29 3b 0a 23 65 6c  ar*, char*);.#el
2c7c0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
2c7d0 74 65 33 46 69 6c 65 53 75 66 66 69 78 33 28 58  te3FileSuffix3(X
2c7e0 2c 59 29 0a 23 65 6e 64 69 66 0a 75 38 20 73 71  ,Y).#endif.u8 sq
2c7f0 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28  lite3GetBoolean(
2c800 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 75 38  const char *z,u8
2c810 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a  );..const void *
2c820 73 71 6c 69 74 65 33 56 61 6c 75 65 54 65 78 74  sqlite3ValueText
2c830 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c  (sqlite3_value*,
2c840 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   u8);.int sqlite
2c850 33 56 61 6c 75 65 42 79 74 65 73 28 73 71 6c 69  3ValueBytes(sqli
2c860 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b  te3_value*, u8);
2c870 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c  .void sqlite3Val
2c880 75 65 53 65 74 53 74 72 28 73 71 6c 69 74 65 33  ueSetStr(sqlite3
2c890 5f 76 61 6c 75 65 2a 2c 20 69 6e 74 2c 20 63 6f  _value*, int, co
2c8a0 6e 73 74 20 76 6f 69 64 20 2a 2c 75 38 2c 0a 20  nst void *,u8,. 
2c8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c8c0 20 20 20 20 20 20 20 76 6f 69 64 28 2a 29 28 76         void(*)(v
2c8d0 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c  oid*));.void sql
2c8e0 69 74 65 33 56 61 6c 75 65 53 65 74 4e 75 6c 6c  ite3ValueSetNull
2c8f0 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29  (sqlite3_value*)
2c900 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  ;.void sqlite3Va
2c910 6c 75 65 46 72 65 65 28 73 71 6c 69 74 65 33 5f  lueFree(sqlite3_
2c920 76 61 6c 75 65 2a 29 3b 0a 73 71 6c 69 74 65 33  value*);.sqlite3
2c930 5f 76 61 6c 75 65 20 2a 73 71 6c 69 74 65 33 56  _value *sqlite3V
2c940 61 6c 75 65 4e 65 77 28 73 71 6c 69 74 65 33 20  alueNew(sqlite3 
2c950 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  *);.#ifndef SQLI
2c960 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 63 68  TE_OMIT_UTF16.ch
2c970 61 72 20 2a 73 71 6c 69 74 65 33 55 74 66 31 36  ar *sqlite3Utf16
2c980 74 6f 38 28 73 71 6c 69 74 65 33 20 2a 2c 20 63  to8(sqlite3 *, c
2c990 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c  onst void*, int,
2c9a0 20 75 38 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74   u8);.#endif.int
2c9b0 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 6f   sqlite3ValueFro
2c9c0 6d 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c  mExpr(sqlite3 *,
2c9d0 20 45 78 70 72 20 2a 2c 20 75 38 2c 20 75 38 2c   Expr *, u8, u8,
2c9e0 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
2c9f0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2ca00 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69  ValueApplyAffini
2ca10 74 79 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ty(sqlite3_value
2ca20 20 2a 2c 20 75 38 2c 20 75 38 29 3b 0a 23 69 66   *, u8, u8);.#if
2ca30 6e 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c  ndef SQLITE_AMAL
2ca40 47 41 4d 41 54 49 4f 4e 0a 65 78 74 65 72 6e 20  GAMATION.extern 
2ca50 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
2ca60 68 61 72 20 73 71 6c 69 74 65 33 4f 70 63 6f 64  har sqlite3Opcod
2ca70 65 50 72 6f 70 65 72 74 79 5b 5d 3b 0a 65 78 74  eProperty[];.ext
2ca80 65 72 6e 20 63 6f 6e 73 74 20 63 68 61 72 20 73  ern const char s
2ca90 71 6c 69 74 65 33 53 74 72 42 49 4e 41 52 59 5b  qlite3StrBINARY[
2caa0 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  ];.extern const 
2cab0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71  unsigned char sq
2cac0 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65  lite3UpperToLowe
2cad0 72 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73  r[];.extern cons
2cae0 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
2caf0 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
2cb00 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  ];.extern const 
2cb10 54 6f 6b 65 6e 20 73 71 6c 69 74 65 33 49 6e 74  Token sqlite3Int
2cb20 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78 74 65 72 6e  Tokens[];.extern
2cb30 20 53 51 4c 49 54 45 5f 57 53 44 20 73 74 72 75   SQLITE_WSD stru
2cb40 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67  ct Sqlite3Config
2cb50 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 3b 0a   sqlite3Config;.
2cb60 65 78 74 65 72 6e 20 46 75 6e 63 44 65 66 48 61  extern FuncDefHa
2cb70 73 68 20 73 71 6c 69 74 65 33 42 75 69 6c 74 69  sh sqlite3Builti
2cb80 6e 46 75 6e 63 74 69 6f 6e 73 3b 0a 23 69 66 6e  nFunctions;.#ifn
2cb90 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2cba0 57 53 44 0a 65 78 74 65 72 6e 20 69 6e 74 20 73  WSD.extern int s
2cbb0 71 6c 69 74 65 33 50 65 6e 64 69 6e 67 42 79 74  qlite3PendingByt
2cbc0 65 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66  e;.#endif.#endif
2cbd0 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f  .#ifdef VDBE_PRO
2cbe0 46 49 4c 45 0a 65 78 74 65 72 6e 20 73 71 6c 69  FILE.extern sqli
2cbf0 74 65 33 5f 75 69 6e 74 36 34 20 73 71 6c 69 74  te3_uint64 sqlit
2cc00 65 33 4e 50 72 6f 66 69 6c 65 43 6e 74 3b 0a 23  e3NProfileCnt;.#
2cc10 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
2cc20 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28  e3RootPageMoved(
2cc30 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69  sqlite3*, int, i
2cc40 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
2cc50 71 6c 69 74 65 33 52 65 69 6e 64 65 78 28 50 61  qlite3Reindex(Pa
2cc60 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  rse*, Token*, To
2cc70 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
2cc80 74 65 33 41 6c 74 65 72 46 75 6e 63 74 69 6f 6e  te3AlterFunction
2cc90 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  s(void);.void sq
2cca0 6c 69 74 65 33 41 6c 74 65 72 52 65 6e 61 6d 65  lite3AlterRename
2ccb0 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72  Table(Parse*, Sr
2ccc0 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  cList*, Token*);
2ccd0 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54  .int sqlite3GetT
2cce0 6f 6b 65 6e 28 63 6f 6e 73 74 20 75 6e 73 69 67  oken(const unsig
2ccf0 6e 65 64 20 63 68 61 72 20 2a 2c 20 69 6e 74 20  ned char *, int 
2cd00 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2cd10 4e 65 73 74 65 64 50 61 72 73 65 28 50 61 72 73  NestedParse(Pars
2cd20 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e*, const char*,
2cd30 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69   ...);.void sqli
2cd40 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65  te3ExpirePrepare
2cd50 64 53 74 61 74 65 6d 65 6e 74 73 28 73 71 6c 69  dStatements(sqli
2cd60 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  te3*, int);.int 
2cd70 73 71 6c 69 74 65 33 43 6f 64 65 53 75 62 73 65  sqlite3CodeSubse
2cd80 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 45 78 70  lect(Parse*, Exp
2cd90 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  r *, int, int);.
2cda0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65  void sqlite3Sele
2cdb0 63 74 50 72 65 70 28 50 61 72 73 65 2a 2c 20 53  ctPrep(Parse*, S
2cdc0 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74  elect*, NameCont
2cdd0 65 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ext*);.void sqli
2cde0 74 65 33 53 65 6c 65 63 74 57 72 6f 6e 67 4e 75  te3SelectWrongNu
2cdf0 6d 54 65 72 6d 73 45 72 72 6f 72 28 50 61 72 73  mTermsError(Pars
2ce00 65 20 2a 70 50 61 72 73 65 2c 20 53 65 6c 65 63  e *pParse, Selec
2ce10 74 20 2a 70 29 3b 0a 69 6e 74 20 73 71 6c 69 74  t *p);.int sqlit
2ce20 65 33 4d 61 74 63 68 53 70 61 6e 4e 61 6d 65 28  e3MatchSpanName(
2ce30 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
2ce40 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
2ce50 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
2ce60 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
2ce70 52 65 73 6f 6c 76 65 45 78 70 72 4e 61 6d 65 73  ResolveExprNames
2ce80 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45  (NameContext*, E
2ce90 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
2cea0 65 33 52 65 73 6f 6c 76 65 45 78 70 72 4c 69 73  e3ResolveExprLis
2ceb0 74 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65  tNames(NameConte
2cec0 78 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  xt*, ExprList*);
2ced0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
2cee0 6f 6c 76 65 53 65 6c 65 63 74 4e 61 6d 65 73 28  olveSelectNames(
2cef0 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c  Parse*, Select*,
2cf00 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a   NameContext*);.
2cf10 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f  void sqlite3Reso
2cf20 6c 76 65 53 65 6c 66 52 65 66 65 72 65 6e 63 65  lveSelfReference
2cf30 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69  (Parse*,Table*,i
2cf40 6e 74 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73  nt,Expr*,ExprLis
2cf50 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
2cf60 52 65 73 6f 6c 76 65 4f 72 64 65 72 47 72 6f 75  ResolveOrderGrou
2cf70 70 42 79 28 50 61 72 73 65 2a 2c 20 53 65 6c 65  pBy(Parse*, Sele
2cf80 63 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  ct*, ExprList*, 
2cf90 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
2cfa0 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e  id sqlite3Column
2cfb0 44 65 66 61 75 6c 74 28 56 64 62 65 20 2a 2c 20  Default(Vdbe *, 
2cfc0 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e  Table *, int, in
2cfd0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2cfe0 41 6c 74 65 72 46 69 6e 69 73 68 41 64 64 43 6f  AlterFinishAddCo
2cff0 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 54 6f  lumn(Parse *, To
2d000 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ken *);.void sql
2d010 69 74 65 33 41 6c 74 65 72 42 65 67 69 6e 41 64  ite3AlterBeginAd
2d020 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c  dColumn(Parse *,
2d030 20 53 72 63 4c 69 73 74 20 2a 29 3b 0a 43 6f 6c   SrcList *);.Col
2d040 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 47 65 74  lSeq *sqlite3Get
2d050 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 2a 2c 20  CollSeq(Parse*, 
2d060 75 38 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c 20 63  u8, CollSeq *, c
2d070 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61  onst char*);.cha
2d080 72 20 73 71 6c 69 74 65 33 41 66 66 69 6e 69 74  r sqlite3Affinit
2d090 79 54 79 70 65 28 63 6f 6e 73 74 20 63 68 61 72  yType(const char
2d0a0 2a 2c 20 43 6f 6c 75 6d 6e 2a 29 3b 0a 76 6f 69  *, Column*);.voi
2d0b0 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65  d sqlite3Analyze
2d0c0 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c  (Parse*, Token*,
2d0d0 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
2d0e0 6c 69 74 65 33 49 6e 76 6f 6b 65 42 75 73 79 48  lite3InvokeBusyH
2d0f0 61 6e 64 6c 65 72 28 42 75 73 79 48 61 6e 64 6c  andler(BusyHandl
2d100 65 72 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69 6c  er*, sqlite3_fil
2d110 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  e*);.int sqlite3
2d120 46 69 6e 64 44 62 28 73 71 6c 69 74 65 33 2a 2c  FindDb(sqlite3*,
2d130 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
2d140 6c 69 74 65 33 46 69 6e 64 44 62 4e 61 6d 65 28  lite3FindDbName(
2d150 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74  sqlite3 *, const
2d160 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71   char *);.int sq
2d170 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61  lite3AnalysisLoa
2d180 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 69  d(sqlite3*,int i
2d190 44 42 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  DB);.void sqlite
2d1a0 33 44 65 6c 65 74 65 49 6e 64 65 78 53 61 6d 70  3DeleteIndexSamp
2d1b0 6c 65 73 28 73 71 6c 69 74 65 33 2a 2c 49 6e 64  les(sqlite3*,Ind
2d1c0 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ex*);.void sqlit
2d1d0 65 33 44 65 66 61 75 6c 74 52 6f 77 45 73 74 28  e3DefaultRowEst(
2d1e0 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71  Index*);.void sq
2d1f0 6c 69 74 65 33 52 65 67 69 73 74 65 72 4c 69 6b  lite3RegisterLik
2d200 65 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74  eFunctions(sqlit
2d210 65 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  e3*, int);.int s
2d220 71 6c 69 74 65 33 49 73 4c 69 6b 65 46 75 6e 63  qlite3IsLikeFunc
2d230 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 45 78  tion(sqlite3*,Ex
2d240 70 72 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a 29 3b  pr*,int*,char*);
2d250 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63 68  .void sqlite3Sch
2d260 65 6d 61 43 6c 65 61 72 28 76 6f 69 64 20 2a 29  emaClear(void *)
2d270 3b 0a 53 63 68 65 6d 61 20 2a 73 71 6c 69 74 65  ;.Schema *sqlite
2d280 33 53 63 68 65 6d 61 47 65 74 28 73 71 6c 69 74  3SchemaGet(sqlit
2d290 65 33 20 2a 2c 20 42 74 72 65 65 20 2a 29 3b 0a  e3 *, Btree *);.
2d2a0 69 6e 74 20 73 71 6c 69 74 65 33 53 63 68 65 6d  int sqlite3Schem
2d2b0 61 54 6f 49 6e 64 65 78 28 73 71 6c 69 74 65 33  aToIndex(sqlite3
2d2c0 20 2a 64 62 2c 20 53 63 68 65 6d 61 20 2a 29 3b   *db, Schema *);
2d2d0 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65  .KeyInfo *sqlite
2d2e0 33 4b 65 79 49 6e 66 6f 41 6c 6c 6f 63 28 73 71  3KeyInfoAlloc(sq
2d2f0 6c 69 74 65 33 2a 2c 69 6e 74 2c 69 6e 74 29 3b  lite3*,int,int);
2d300 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4b 65 79  .void sqlite3Key
2d310 49 6e 66 6f 55 6e 72 65 66 28 4b 65 79 49 6e 66  InfoUnref(KeyInf
2d320 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71  o*);.KeyInfo *sq
2d330 6c 69 74 65 33 4b 65 79 49 6e 66 6f 52 65 66 28  lite3KeyInfoRef(
2d340 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e  KeyInfo*);.KeyIn
2d350 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e  fo *sqlite3KeyIn
2d360 66 6f 4f 66 49 6e 64 65 78 28 50 61 72 73 65 2a  foOfIndex(Parse*
2d370 2c 20 49 6e 64 65 78 2a 29 3b 0a 4b 65 79 49 6e  , Index*);.KeyIn
2d380 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e  fo *sqlite3KeyIn
2d390 66 6f 46 72 6f 6d 45 78 70 72 4c 69 73 74 28 50  foFromExprList(P
2d3a0 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  arse*, ExprList*
2d3b0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 23 69  , int, int);..#i
2d3c0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
2d3d0 47 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b 65 79  G.int sqlite3Key
2d3e0 49 6e 66 6f 49 73 57 72 69 74 65 61 62 6c 65 28  InfoIsWriteable(
2d3f0 4b 65 79 49 6e 66 6f 2a 29 3b 0a 23 65 6e 64 69  KeyInfo*);.#endi
2d400 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 72 65  f.int sqlite3Cre
2d410 61 74 65 46 75 6e 63 28 73 71 6c 69 74 65 33 20  ateFunc(sqlite3 
2d420 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
2d430 20 69 6e 74 2c 20 69 6e 74 2c 20 76 6f 69 64 20   int, int, void 
2d440 2a 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71  *,.  void (*)(sq
2d450 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
2d460 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
2d470 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29   **),.  void (*)
2d480 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
2d490 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
2d4a0 6c 75 65 20 2a 2a 29 2c 20 0a 20 20 76 6f 69 64  lue **), .  void
2d4b0 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e   (*)(sqlite3_con
2d4c0 74 65 78 74 2a 29 2c 0a 20 20 76 6f 69 64 20 28  text*),.  void (
2d4d0 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  *)(sqlite3_conte
2d4e0 78 74 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29  xt*),.  void (*)
2d4f0 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
2d500 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
2d510 6c 75 65 20 2a 2a 29 2c 20 0a 20 20 46 75 6e 63  lue **), .  Func
2d520 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73  Destructor *pDes
2d530 74 72 75 63 74 6f 72 0a 29 3b 0a 76 6f 69 64 20  tructor.);.void 
2d540 73 71 6c 69 74 65 33 4e 6f 6f 70 44 65 73 74 72  sqlite3NoopDestr
2d550 75 63 74 6f 72 28 76 6f 69 64 2a 29 3b 0a 76 6f  uctor(void*);.vo
2d560 69 64 20 73 71 6c 69 74 65 33 4f 6f 6d 46 61 75  id sqlite3OomFau
2d570 6c 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  lt(sqlite3*);.vo
2d580 69 64 20 73 71 6c 69 74 65 33 4f 6f 6d 43 6c 65  id sqlite3OomCle
2d590 61 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e  ar(sqlite3*);.in
2d5a0 74 20 73 71 6c 69 74 65 33 41 70 69 45 78 69 74  t sqlite3ApiExit
2d5b0 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e  (sqlite3 *db, in
2d5c0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f  t);.int sqlite3O
2d5d0 70 65 6e 54 65 6d 70 44 61 74 61 62 61 73 65 28  penTempDatabase(
2d5e0 50 61 72 73 65 20 2a 29 3b 0a 0a 76 6f 69 64 20  Parse *);..void 
2d5f0 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 49  sqlite3StrAccumI
2d600 6e 69 74 28 53 74 72 41 63 63 75 6d 2a 2c 20 73  nit(StrAccum*, s
2d610 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a 2c 20  qlite3*, char*, 
2d620 69 6e 74 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20  int, int);.char 
2d630 2a 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d  *sqlite3StrAccum
2d640 46 69 6e 69 73 68 28 53 74 72 41 63 63 75 6d 2a  Finish(StrAccum*
2d650 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
2d660 65 6c 65 63 74 44 65 73 74 49 6e 69 74 28 53 65  electDestInit(Se
2d670 6c 65 63 74 44 65 73 74 2a 2c 69 6e 74 2c 69 6e  lectDest*,int,in
2d680 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  t);.Expr *sqlite
2d690 33 43 72 65 61 74 65 43 6f 6c 75 6d 6e 45 78 70  3CreateColumnExp
2d6a0 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 53 72 63  r(sqlite3 *, Src
2d6b0 4c 69 73 74 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  List *, int, int
2d6c0 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  );..void sqlite3
2d6d0 42 61 63 6b 75 70 52 65 73 74 61 72 74 28 73 71  BackupRestart(sq
2d6e0 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 29 3b  lite3_backup *);
2d6f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63  .void sqlite3Bac
2d700 6b 75 70 55 70 64 61 74 65 28 73 71 6c 69 74 65  kupUpdate(sqlite
2d710 33 5f 62 61 63 6b 75 70 20 2a 2c 20 50 67 6e 6f  3_backup *, Pgno
2d720 2c 20 63 6f 6e 73 74 20 75 38 20 2a 29 3b 0a 0a  , const u8 *);..
2d730 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2d740 4d 49 54 5f 53 55 42 51 55 45 52 59 0a 69 6e 74  MIT_SUBQUERY.int
2d750 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63   sqlite3ExprChec
2d760 6b 49 4e 28 50 61 72 73 65 2a 2c 20 45 78 70 72  kIN(Parse*, Expr
2d770 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
2d780 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72 43 68  ne sqlite3ExprCh
2d790 65 63 6b 49 4e 28 78 2c 79 29 20 53 51 4c 49 54  eckIN(x,y) SQLIT
2d7a0 45 5f 4f 4b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  E_OK.#endif..#if
2d7b0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
2d7c0 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34  E_STAT3_OR_STAT4
2d7d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e 61  .void sqlite3Ana
2d7e0 6c 79 7a 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f  lyzeFunctions(vo
2d7f0 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  id);.int sqlite3
2d800 53 74 61 74 34 50 72 6f 62 65 53 65 74 56 61 6c  Stat4ProbeSetVal
2d810 75 65 28 0a 20 20 20 20 50 61 72 73 65 2a 2c 49  ue(.    Parse*,I
2d820 6e 64 65 78 2a 2c 55 6e 70 61 63 6b 65 64 52 65  ndex*,UnpackedRe
2d830 63 6f 72 64 2a 2a 2c 45 78 70 72 2a 2c 69 6e 74  cord**,Expr*,int
2d840 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 69 6e 74 20  ,int,int*);.int 
2d850 73 71 6c 69 74 65 33 53 74 61 74 34 56 61 6c 75  sqlite3Stat4Valu
2d860 65 46 72 6f 6d 45 78 70 72 28 50 61 72 73 65 2a  eFromExpr(Parse*
2d870 2c 20 45 78 70 72 2a 2c 20 75 38 2c 20 73 71 6c  , Expr*, u8, sql
2d880 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 76  ite3_value**);.v
2d890 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 34  oid sqlite3Stat4
2d8a0 50 72 6f 62 65 46 72 65 65 28 55 6e 70 61 63 6b  ProbeFree(Unpack
2d8b0 65 64 52 65 63 6f 72 64 2a 29 3b 0a 69 6e 74 20  edRecord*);.int 
2d8c0 73 71 6c 69 74 65 33 53 74 61 74 34 43 6f 6c 75  sqlite3Stat4Colu
2d8d0 6d 6e 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e  mn(sqlite3*, con
2d8e0 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 69  st void*, int, i
2d8f0 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  nt, sqlite3_valu
2d900 65 2a 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74  e**);.char sqlit
2d910 65 33 49 6e 64 65 78 43 6f 6c 75 6d 6e 41 66 66  e3IndexColumnAff
2d920 69 6e 69 74 79 28 73 71 6c 69 74 65 33 2a 2c 20  inity(sqlite3*, 
2d930 49 6e 64 65 78 2a 2c 20 69 6e 74 29 3b 0a 23 65  Index*, int);.#e
2d940 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
2d950 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68 65  interface to the
2d960 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61 74 65 64   LEMON-generated
2d970 20 70 61 72 73 65 72 0a 2a 2f 0a 23 69 66 6e 64   parser.*/.#ifnd
2d980 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41  ef SQLITE_AMALGA
2d990 4d 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20 2a 73  MATION.  void *s
2d9a0 71 6c 69 74 65 33 50 61 72 73 65 72 41 6c 6c 6f  qlite3ParserAllo
2d9b0 63 28 76 6f 69 64 2a 28 2a 29 28 75 36 34 29 2c  c(void*(*)(u64),
2d9c0 20 50 61 72 73 65 2a 29 3b 0a 20 20 76 6f 69 64   Parse*);.  void
2d9d0 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 46 72   sqlite3ParserFr
2d9e0 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69 64 28 2a  ee(void*, void(*
2d9f0 29 28 76 6f 69 64 2a 29 29 3b 0a 23 65 6e 64 69  )(void*));.#endi
2da00 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61  f.void sqlite3Pa
2da10 72 73 65 72 28 76 6f 69 64 2a 2c 20 69 6e 74 2c  rser(void*, int,
2da20 20 54 6f 6b 65 6e 29 3b 0a 69 6e 74 20 73 71 6c   Token);.int sql
2da30 69 74 65 33 50 61 72 73 65 72 46 61 6c 6c 62 61  ite3ParserFallba
2da40 63 6b 28 69 6e 74 29 3b 0a 23 69 66 64 65 66 20  ck(int);.#ifdef 
2da50 59 59 54 52 41 43 4b 4d 41 58 53 54 41 43 4b 44  YYTRACKMAXSTACKD
2da60 45 50 54 48 0a 20 20 69 6e 74 20 73 71 6c 69 74  EPTH.  int sqlit
2da70 65 33 50 61 72 73 65 72 53 74 61 63 6b 50 65 61  e3ParserStackPea
2da80 6b 28 76 6f 69 64 2a 29 3b 0a 23 65 6e 64 69 66  k(void*);.#endif
2da90 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75  ..void sqlite3Au
2daa0 74 6f 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 73  toLoadExtensions
2dab0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 69 66 6e  (sqlite3*);.#ifn
2dac0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2dad0 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20  LOAD_EXTENSION. 
2dae0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f   void sqlite3Clo
2daf0 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c  seExtensions(sql
2db00 69 74 65 33 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  ite3*);.#else.# 
2db10 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6c  define sqlite3Cl
2db20 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 58 29  oseExtensions(X)
2db30 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
2db40 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41   SQLITE_OMIT_SHA
2db50 52 45 44 5f 43 41 43 48 45 0a 20 20 76 6f 69 64  RED_CACHE.  void
2db60 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63   sqlite3TableLoc
2db70 6b 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 2c 20  k(Parse *, int, 
2db80 69 6e 74 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63  int, u8, const c
2db90 68 61 72 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20  har *);.#else.  
2dba0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54  #define sqlite3T
2dbb0 61 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c 79  ableLock(v,w,x,y
2dbc0 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  ,z).#endif..#ifd
2dbd0 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
2dbe0 20 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38   int sqlite3Utf8
2dbf0 54 6f 38 28 75 6e 73 69 67 6e 65 64 20 63 68 61  To8(unsigned cha
2dc00 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  r*);.#endif..#if
2dc10 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2dc20 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20  VIRTUALTABLE.#  
2dc30 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
2dc40 61 62 43 6c 65 61 72 28 59 29 0a 23 20 20 64 65  abClear(Y).#  de
2dc50 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
2dc60 53 79 6e 63 28 58 2c 59 29 20 53 51 4c 49 54 45  Sync(X,Y) SQLITE
2dc70 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73 71  _OK.#  define sq
2dc80 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63  lite3VtabRollbac
2dc90 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73  k(X).#  define s
2dca0 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74  qlite3VtabCommit
2dcb0 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (X).#  define sq
2dcc0 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28  lite3VtabInSync(
2dcd0 64 62 29 20 30 0a 23 20 20 64 65 66 69 6e 65 20  db) 0.#  define 
2dce0 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28  sqlite3VtabLock(
2dcf0 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  X).#  define sql
2dd00 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 58  ite3VtabUnlock(X
2dd10 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
2dd20 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73  te3VtabUnlockLis
2dd30 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73  t(X).#  define s
2dd40 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f  qlite3VtabSavepo
2dd50 69 6e 74 28 58 2c 20 59 2c 20 5a 29 20 53 51 4c  int(X, Y, Z) SQL
2dd60 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65  ITE_OK.#  define
2dd70 20 73 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c   sqlite3GetVTabl
2dd80 65 28 58 2c 59 29 20 20 28 28 56 54 61 62 6c 65  e(X,Y)  ((VTable
2dd90 2a 29 30 29 0a 23 65 6c 73 65 0a 20 20 20 76 6f  *)0).#else.   vo
2dda0 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c  id sqlite3VtabCl
2ddb0 65 61 72 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  ear(sqlite3 *db,
2ddc0 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20 76 6f 69   Table*);.   voi
2ddd0 64 20 73 71 6c 69 74 65 33 56 74 61 62 44 69 73  d sqlite3VtabDis
2dde0 63 6f 6e 6e 65 63 74 28 73 71 6c 69 74 65 33 20  connect(sqlite3 
2ddf0 2a 64 62 2c 20 54 61 62 6c 65 20 2a 70 29 3b 0a  *db, Table *p);.
2de00 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74     int sqlite3Vt
2de10 61 62 53 79 6e 63 28 73 71 6c 69 74 65 33 20 2a  abSync(sqlite3 *
2de20 64 62 2c 20 56 64 62 65 2a 29 3b 0a 20 20 20 69  db, Vdbe*);.   i
2de30 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f  nt sqlite3VtabRo
2de40 6c 6c 62 61 63 6b 28 73 71 6c 69 74 65 33 20 2a  llback(sqlite3 *
2de50 64 62 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69  db);.   int sqli
2de60 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 73 71  te3VtabCommit(sq
2de70 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 76  lite3 *db);.   v
2de80 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 4c  oid sqlite3VtabL
2de90 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20  ock(VTable *);. 
2dea0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
2deb0 61 62 55 6e 6c 6f 63 6b 28 56 54 61 62 6c 65 20  abUnlock(VTable 
2dec0 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  *);.   void sqli
2ded0 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73  te3VtabUnlockLis
2dee0 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20 20  t(sqlite3*);.   
2def0 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 53  int sqlite3VtabS
2df00 61 76 65 70 6f 69 6e 74 28 73 71 6c 69 74 65 33  avepoint(sqlite3
2df10 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20   *, int, int);. 
2df20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
2df30 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 56  abImportErrmsg(V
2df40 64 62 65 2a 2c 20 73 71 6c 69 74 65 33 5f 76 74  dbe*, sqlite3_vt
2df50 61 62 2a 29 3b 0a 20 20 20 56 54 61 62 6c 65 20  ab*);.   VTable 
2df60 2a 73 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c  *sqlite3GetVTabl
2df70 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c  e(sqlite3*, Tabl
2df80 65 2a 29 3b 0a 20 20 20 4d 6f 64 75 6c 65 20 2a  e*);.   Module *
2df90 73 71 6c 69 74 65 33 56 74 61 62 43 72 65 61 74  sqlite3VtabCreat
2dfa0 65 4d 6f 64 75 6c 65 28 0a 20 20 20 20 20 73 71  eModule(.     sq
2dfb0 6c 69 74 65 33 2a 2c 0a 20 20 20 20 20 63 6f 6e  lite3*,.     con
2dfc0 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 63  st char*,.     c
2dfd0 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64  onst sqlite3_mod
2dfe0 75 6c 65 2a 2c 0a 20 20 20 20 20 76 6f 69 64 2a  ule*,.     void*
2dff0 2c 0a 20 20 20 20 20 76 6f 69 64 28 2a 29 28 76  ,.     void(*)(v
2e000 6f 69 64 2a 29 0a 20 20 20 29 3b 0a 23 20 20 64  oid*).   );.#  d
2e010 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
2e020 62 49 6e 53 79 6e 63 28 64 62 29 20 28 28 64 62  bInSync(db) ((db
2e030 29 2d 3e 6e 56 54 72 61 6e 73 3e 30 20 26 26 20  )->nVTrans>0 && 
2e040 28 64 62 29 2d 3e 61 56 54 72 61 6e 73 3d 3d 30  (db)->aVTrans==0
2e050 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c  ).#endif.int sql
2e060 69 74 65 33 56 74 61 62 45 70 6f 6e 79 6d 6f 75  ite3VtabEponymou
2e070 73 54 61 62 6c 65 49 6e 69 74 28 50 61 72 73 65  sTableInit(Parse
2e080 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69 64  *,Module*);.void
2e090 20 73 71 6c 69 74 65 33 56 74 61 62 45 70 6f 6e   sqlite3VtabEpon
2e0a0 79 6d 6f 75 73 54 61 62 6c 65 43 6c 65 61 72 28  ymousTableClear(
2e0b0 73 71 6c 69 74 65 33 2a 2c 4d 6f 64 75 6c 65 2a  sqlite3*,Module*
2e0c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
2e0d0 74 61 62 4d 61 6b 65 57 72 69 74 61 62 6c 65 28  tabMakeWritable(
2e0e0 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a  Parse*,Table*);.
2e0f0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
2e100 42 65 67 69 6e 50 61 72 73 65 28 50 61 72 73 65  BeginParse(Parse
2e110 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
2e120 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b  *, Token*, int);
2e130 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
2e140 62 46 69 6e 69 73 68 50 61 72 73 65 28 50 61 72  bFinishParse(Par
2e150 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  se*, Token*);.vo
2e160 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 41 72  id sqlite3VtabAr
2e170 67 49 6e 69 74 28 50 61 72 73 65 2a 29 3b 0a 76  gInit(Parse*);.v
2e180 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 41  oid sqlite3VtabA
2e190 72 67 45 78 74 65 6e 64 28 50 61 72 73 65 2a 2c  rgExtend(Parse*,
2e1a0 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
2e1b0 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65  lite3VtabCallCre
2e1c0 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  ate(sqlite3*, in
2e1d0 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  t, const char *,
2e1e0 20 63 68 61 72 20 2a 2a 29 3b 0a 69 6e 74 20 73   char **);.int s
2e1f0 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 6f  qlite3VtabCallCo
2e200 6e 6e 65 63 74 28 50 61 72 73 65 2a 2c 20 54 61  nnect(Parse*, Ta
2e210 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ble*);.int sqlit
2e220 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72 6f  e3VtabCallDestro
2e230 79 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  y(sqlite3*, int,
2e240 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a   const char *);.
2e250 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 42  int sqlite3VtabB
2e260 65 67 69 6e 28 73 71 6c 69 74 65 33 20 2a 2c 20  egin(sqlite3 *, 
2e270 56 54 61 62 6c 65 20 2a 29 3b 0a 46 75 6e 63 44  VTable *);.FuncD
2e280 65 66 20 2a 73 71 6c 69 74 65 33 56 74 61 62 4f  ef *sqlite3VtabO
2e290 76 65 72 6c 6f 61 64 46 75 6e 63 74 69 6f 6e 28  verloadFunction(
2e2a0 73 71 6c 69 74 65 33 20 2a 2c 46 75 6e 63 44 65  sqlite3 *,FuncDe
2e2b0 66 2a 2c 20 69 6e 74 20 6e 41 72 67 2c 20 45 78  f*, int nArg, Ex
2e2c0 70 72 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 69 6e  pr*);.sqlite3_in
2e2d0 74 36 34 20 73 71 6c 69 74 65 33 53 74 6d 74 43  t64 sqlite3StmtC
2e2e0 75 72 72 65 6e 74 54 69 6d 65 28 73 71 6c 69 74  urrentTime(sqlit
2e2f0 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e  e3_context*);.in
2e300 74 20 73 71 6c 69 74 65 33 56 64 62 65 50 61 72  t sqlite3VdbePar
2e310 61 6d 65 74 65 72 49 6e 64 65 78 28 56 64 62 65  ameterIndex(Vdbe
2e320 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
2e330 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2e340 33 54 72 61 6e 73 66 65 72 42 69 6e 64 69 6e 67  3TransferBinding
2e350 73 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  s(sqlite3_stmt *
2e360 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a  , sqlite3_stmt *
2e370 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
2e380 61 72 73 65 72 52 65 73 65 74 28 50 61 72 73 65  arserReset(Parse
2e390 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
2e3a0 65 70 72 65 70 61 72 65 28 56 64 62 65 2a 29 3b  eprepare(Vdbe*);
2e3b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
2e3c0 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e 67 74 68  rListCheckLength
2e3d0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
2e3e0 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  t*, const char*)
2e3f0 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
2e400 65 33 42 69 6e 61 72 79 43 6f 6d 70 61 72 65 43  e3BinaryCompareC
2e410 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c 20  ollSeq(Parse *, 
2e420 45 78 70 72 20 2a 2c 20 45 78 70 72 20 2a 29 3b  Expr *, Expr *);
2e430 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 65 6d 70  .int sqlite3Temp
2e440 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73 74 20 73  InMemory(const s
2e450 71 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e 73 74 20  qlite3*);.const 
2e460 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75  char *sqlite3Jou
2e470 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74  rnalModename(int
2e480 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
2e490 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74  E_OMIT_WAL.  int
2e4a0 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69   sqlite3Checkpoi
2e4b0 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  nt(sqlite3*, int
2e4c0 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74  , int, int*, int
2e4d0 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
2e4e0 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 28  3WalDefaultHook(
2e4f0 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63  void*,sqlite3*,c
2e500 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b  onst char*,int);
2e510 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
2e520 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 54 45 0a  SQLITE_OMIT_CTE.
2e530 20 20 57 69 74 68 20 2a 73 71 6c 69 74 65 33 57    With *sqlite3W
2e540 69 74 68 41 64 64 28 50 61 72 73 65 2a 2c 57 69  ithAdd(Parse*,Wi
2e550 74 68 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c  th*,Token*,ExprL
2e560 69 73 74 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20  ist*,Select*);. 
2e570 20 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 74   void sqlite3Wit
2e580 68 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  hDelete(sqlite3*
2e590 2c 57 69 74 68 2a 29 3b 0a 20 20 76 6f 69 64 20  ,With*);.  void 
2e5a0 73 71 6c 69 74 65 33 57 69 74 68 50 75 73 68 28  sqlite3WithPush(
2e5b0 50 61 72 73 65 2a 2c 20 57 69 74 68 2a 2c 20 75  Parse*, With*, u
2e5c0 38 29 3b 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e  8);.#else.#defin
2e5d0 65 20 73 71 6c 69 74 65 33 57 69 74 68 50 75 73  e sqlite3WithPus
2e5e0 68 28 78 2c 79 2c 7a 29 0a 23 64 65 66 69 6e 65  h(x,y,z).#define
2e5f0 20 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c 65   sqlite3WithDele
2e600 74 65 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 23  te(x,y).#endif.#
2e610 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2e620 49 54 5f 55 50 53 45 52 54 0a 20 20 55 70 73 65  IT_UPSERT.  Upse
2e630 72 74 20 2a 73 71 6c 69 74 65 33 55 70 73 65 72  rt *sqlite3Upser
2e640 74 4e 65 77 28 73 71 6c 69 74 65 33 2a 2c 45 78  tNew(sqlite3*,Ex
2e650 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78  prList*,Expr*,Ex
2e660 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a  prList*,Expr*);.
2e670 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 55 70    void sqlite3Up
2e680 73 65 72 74 44 65 6c 65 74 65 28 73 71 6c 69 74  sertDelete(sqlit
2e690 65 33 2a 2c 55 70 73 65 72 74 2a 29 3b 0a 20 20  e3*,Upsert*);.  
2e6a0 55 70 73 65 72 74 20 2a 73 71 6c 69 74 65 33 55  Upsert *sqlite3U
2e6b0 70 73 65 72 74 44 75 70 28 73 71 6c 69 74 65 33  psertDup(sqlite3
2e6c0 2a 2c 55 70 73 65 72 74 2a 29 3b 0a 20 20 69 6e  *,Upsert*);.  in
2e6d0 74 20 73 71 6c 69 74 65 33 55 70 73 65 72 74 41  t sqlite3UpsertA
2e6e0 6e 61 6c 79 7a 65 54 61 72 67 65 74 28 50 61 72  nalyzeTarget(Par
2e6f0 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 55 70 73  se*,SrcList*,Ups
2e700 65 72 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ert*);.  void sq
2e710 6c 69 74 65 33 55 70 73 65 72 74 44 6f 55 70 64  lite3UpsertDoUpd
2e720 61 74 65 28 50 61 72 73 65 2a 2c 55 70 73 65 72  ate(Parse*,Upser
2e730 74 2a 2c 54 61 62 6c 65 2a 2c 49 6e 64 65 78 2a  t*,Table*,Index*
2e740 2c 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 23 64 65  ,int);.#else.#de
2e750 66 69 6e 65 20 73 71 6c 69 74 65 33 55 70 73 65  fine sqlite3Upse
2e760 72 74 4e 65 77 28 76 2c 77 2c 78 2c 79 2c 7a 29  rtNew(v,w,x,y,z)
2e770 20 28 28 55 70 73 65 72 74 2a 29 30 29 0a 23 64   ((Upsert*)0).#d
2e780 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55 70 73  efine sqlite3Ups
2e790 65 72 74 44 65 6c 65 74 65 28 78 2c 79 29 0a 23  ertDelete(x,y).#
2e7a0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55 70  define sqlite3Up
2e7b0 73 65 72 74 44 75 70 28 78 2c 79 29 20 20 20 20  sertDup(x,y)    
2e7c0 20 20 20 28 28 55 70 73 65 72 74 2a 29 30 29 0a     ((Upsert*)0).
2e7d0 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 44 65 63 6c  #endif.../* Decl
2e7e0 61 72 61 74 69 6f 6e 73 20 66 6f 72 20 66 75 6e  arations for fun
2e7f0 63 74 69 6f 6e 73 20 69 6e 20 66 6b 65 79 2e 63  ctions in fkey.c
2e800 2e 20 41 6c 6c 20 6f 66 20 74 68 65 73 65 20 61  . All of these a
2e810 72 65 20 72 65 70 6c 61 63 65 64 20 62 79 0a 2a  re replaced by.*
2e820 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72 6f 73 20 69  * no-op macros i
2e830 66 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  f OMIT_FOREIGN_K
2e840 45 59 20 69 73 20 64 65 66 69 6e 65 64 2e 20 49  EY is defined. I
2e850 6e 20 74 68 69 73 20 63 61 73 65 20 6e 6f 20 66  n this case no f
2e860 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 66 75  oreign.** key fu
2e870 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20 61  nctionality is a
2e880 76 61 69 6c 61 62 6c 65 2e 20 49 66 20 4f 4d 49  vailable. If OMI
2e890 54 5f 54 52 49 47 47 45 52 20 69 73 20 64 65 66  T_TRIGGER is def
2e8a0 69 6e 65 64 20 62 75 74 0a 2a 2a 20 4f 4d 49 54  ined but.** OMIT
2e8b0 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73 20  _FOREIGN_KEY is 
2e8c0 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f 6d 65 20 6f  not, only some o
2e8d0 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 73 20  f the functions 
2e8e0 61 72 65 20 6e 6f 2d 6f 70 65 64 2e 20 49 6e 0a  are no-oped. In.
2e8f0 2a 2a 20 74 68 69 73 20 63 61 73 65 20 66 6f 72  ** this case for
2e900 65 69 67 6e 20 6b 65 79 73 20 61 72 65 20 70 61  eign keys are pa
2e910 72 73 65 64 2c 20 62 75 74 20 6e 6f 20 6f 74 68  rsed, but no oth
2e920 65 72 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79  er functionality
2e930 20 69 73 0a 2a 2a 20 70 72 6f 76 69 64 65 64 20   is.** provided 
2e940 28 65 6e 66 6f 72 63 65 6d 65 6e 74 20 6f 66 20  (enforcement of 
2e950 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 72  FK constraints r
2e960 65 71 75 69 72 65 73 20 74 68 65 20 74 72 69 67  equires the trig
2e970 67 65 72 73 20 73 75 62 2d 73 79 73 74 65 6d 29  gers sub-system)
2e980 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  ..*/.#if !define
2e990 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  d(SQLITE_OMIT_FO
2e9a0 52 45 49 47 4e 5f 4b 45 59 29 20 26 26 20 21 64  REIGN_KEY) && !d
2e9b0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
2e9c0 49 54 5f 54 52 49 47 47 45 52 29 0a 20 20 76 6f  IT_TRIGGER).  vo
2e9d0 69 64 20 73 71 6c 69 74 65 33 46 6b 43 68 65 63  id sqlite3FkChec
2e9e0 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  k(Parse*, Table*
2e9f0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a  , int, int, int*
2ea00 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73  , int);.  void s
2ea10 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c  qlite3FkDropTabl
2ea20 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  e(Parse*, SrcLis
2ea30 74 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20  t *, Table*);.  
2ea40 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 41 63  void sqlite3FkAc
2ea50 74 69 6f 6e 73 28 50 61 72 73 65 2a 2c 20 54 61  tions(Parse*, Ta
2ea60 62 6c 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ble*, ExprList*,
2ea70 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29   int, int*, int)
2ea80 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46  ;.  int sqlite3F
2ea90 6b 52 65 71 75 69 72 65 64 28 50 61 72 73 65 2a  kRequired(Parse*
2eaa0 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2a 2c 20  , Table*, int*, 
2eab0 69 6e 74 29 3b 0a 20 20 75 33 32 20 73 71 6c 69  int);.  u32 sqli
2eac0 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 50 61 72  te3FkOldmask(Par
2ead0 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20  se*, Table*);.  
2eae0 46 4b 65 79 20 2a 73 71 6c 69 74 65 33 46 6b 52  FKey *sqlite3FkR
2eaf0 65 66 65 72 65 6e 63 65 73 28 54 61 62 6c 65 20  eferences(Table 
2eb00 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  *);.#else.  #def
2eb10 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 41 63 74  ine sqlite3FkAct
2eb20 69 6f 6e 73 28 61 2c 62 2c 63 2c 64 2c 65 2c 66  ions(a,b,c,d,e,f
2eb30 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
2eb40 74 65 33 46 6b 43 68 65 63 6b 28 61 2c 62 2c 63  te3FkCheck(a,b,c
2eb50 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65 66 69 6e  ,d,e,f).  #defin
2eb60 65 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54  e sqlite3FkDropT
2eb70 61 62 6c 65 28 61 2c 62 2c 63 29 0a 20 20 23 64  able(a,b,c).  #d
2eb80 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4f  efine sqlite3FkO
2eb90 6c 64 6d 61 73 6b 28 61 2c 62 29 20 20 20 20 20  ldmask(a,b)     
2eba0 20 20 20 20 30 0a 20 20 23 64 65 66 69 6e 65 20      0.  #define 
2ebb0 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65  sqlite3FkRequire
2ebc0 64 28 61 2c 62 2c 63 2c 64 29 20 20 20 20 30 0a  d(a,b,c,d)    0.
2ebd0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
2ebe0 33 46 6b 52 65 66 65 72 65 6e 63 65 73 28 61 29  3FkReferences(a)
2ebf0 20 20 20 20 20 20 20 20 30 0a 23 65 6e 64 69 66          0.#endif
2ec00 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2ec10 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
2ec20 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46  .  void sqlite3F
2ec30 6b 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 20  kDelete(sqlite3 
2ec40 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 69 6e  *, Table*);.  in
2ec50 74 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74  t sqlite3FkLocat
2ec60 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 61  eIndex(Parse*,Ta
2ec70 62 6c 65 2a 2c 46 4b 65 79 2a 2c 49 6e 64 65 78  ble*,FKey*,Index
2ec80 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a 23 65 6c 73 65  **,int**);.#else
2ec90 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
2eca0 65 33 46 6b 44 65 6c 65 74 65 28 61 2c 62 29 0a  e3FkDelete(a,b).
2ecb0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
2ecc0 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 61  3FkLocateIndex(a
2ecd0 2c 62 2c 63 2c 64 2c 65 29 0a 23 65 6e 64 69 66  ,b,c,d,e).#endif
2ece0 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61 69 6c 61 62  .../*.** Availab
2ecf0 6c 65 20 66 61 75 6c 74 20 69 6e 6a 65 63 74 6f  le fault injecto
2ed00 72 73 2e 20 20 53 68 6f 75 6c 64 20 62 65 20 6e  rs.  Should be n
2ed10 75 6d 62 65 72 65 64 20 62 65 67 69 6e 6e 69 6e  umbered beginnin
2ed20 67 20 77 69 74 68 20 30 2e 0a 2a 2f 0a 23 64 65  g with 0..*/.#de
2ed30 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c  fine SQLITE_FAUL
2ed40 54 49 4e 4a 45 43 54 4f 52 5f 4d 41 4c 4c 4f 43  TINJECTOR_MALLOC
2ed50 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53       0.#define S
2ed60 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43  QLITE_FAULTINJEC
2ed70 54 4f 52 5f 43 4f 55 4e 54 20 20 20 20 20 20 31  TOR_COUNT      1
2ed80 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65  ../*.** The inte
2ed90 72 66 61 63 65 20 74 6f 20 74 68 65 20 63 6f 64  rface to the cod
2eda0 65 20 69 6e 20 66 61 75 6c 74 2e 63 20 75 73 65  e in fault.c use
2edb0 64 20 66 6f 72 20 69 64 65 6e 74 69 66 79 69 6e  d for identifyin
2edc0 67 20 22 62 65 6e 69 67 6e 22 0a 2a 2a 20 6d 61  g "benign".** ma
2edd0 6c 6c 6f 63 20 66 61 69 6c 75 72 65 73 2e 20 54  lloc failures. T
2ede0 68 69 73 20 69 73 20 6f 6e 6c 79 20 70 72 65 73  his is only pres
2edf0 65 6e 74 20 69 66 20 53 51 4c 49 54 45 5f 55 4e  ent if SQLITE_UN
2ee00 54 45 53 54 41 42 4c 45 0a 2a 2a 20 69 73 20 6e  TESTABLE.** is n
2ee10 6f 74 20 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 23  ot defined..*/.#
2ee20 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e  ifndef SQLITE_UN
2ee30 54 45 53 54 41 42 4c 45 0a 20 20 76 6f 69 64 20  TESTABLE.  void 
2ee40 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69  sqlite3BeginBeni
2ee50 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a  gnMalloc(void);.
2ee60 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e    void sqlite3En
2ee70 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f  dBenignMalloc(vo
2ee80 69 64 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65  id);.#else.  #de
2ee90 66 69 6e 65 20 73 71 6c 69 74 65 33 42 65 67 69  fine sqlite3Begi
2eea0 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a  nBenignMalloc().
2eeb0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
2eec0 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  3EndBenignMalloc
2eed0 28 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  ().#endif../*.**
2eee0 20 41 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e 20   Allowed return 
2eef0 76 61 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c 69  values from sqli
2ef00 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 29  te3FindInIndex()
2ef10 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49  .*/.#define IN_I
2ef20 4e 44 45 58 5f 52 4f 57 49 44 20 20 20 20 20 20  NDEX_ROWID      
2ef30 20 20 31 20 20 20 2f 2a 20 53 65 61 72 63 68 20    1   /* Search 
2ef40 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65  the rowid of the
2ef50 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e   table */.#defin
2ef60 65 20 49 4e 5f 49 4e 44 45 58 5f 45 50 48 20 20  e IN_INDEX_EPH  
2ef70 20 20 20 20 20 20 20 20 32 20 20 20 2f 2a 20 53          2   /* S
2ef80 65 61 72 63 68 20 61 6e 20 65 70 68 65 6d 65 72  earch an ephemer
2ef90 61 6c 20 62 2d 74 72 65 65 20 2a 2f 0a 23 64 65  al b-tree */.#de
2efa0 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e  fine IN_INDEX_IN
2efb0 44 45 58 5f 41 53 43 20 20 20 20 33 20 20 20 2f  DEX_ASC    3   /
2efc0 2a 20 45 78 69 73 74 69 6e 67 20 69 6e 64 65 78  * Existing index
2efd0 20 41 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64   ASCENDING */.#d
2efe0 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49  efine IN_INDEX_I
2eff0 4e 44 45 58 5f 44 45 53 43 20 20 20 34 20 20 20  NDEX_DESC   4   
2f000 2f 2a 20 45 78 69 73 74 69 6e 67 20 69 6e 64 65  /* Existing inde
2f010 78 20 44 45 53 43 45 4e 44 49 4e 47 20 2a 2f 0a  x DESCENDING */.
2f020 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
2f030 5f 4e 4f 4f 50 20 20 20 20 20 20 20 20 20 35 20  _NOOP         5 
2f040 20 20 2f 2a 20 4e 6f 20 74 61 62 6c 65 20 61 76    /* No table av
2f050 61 69 6c 61 62 6c 65 2e 20 55 73 65 20 63 6f 6d  ailable. Use com
2f060 70 61 72 69 73 6f 6e 73 20 2a 2f 0a 2f 2a 0a 2a  parisons */./*.*
2f070 2a 20 41 6c 6c 6f 77 65 64 20 66 6c 61 67 73 20  * Allowed flags 
2f080 66 6f 72 20 74 68 65 20 33 72 64 20 70 61 72 61  for the 3rd para
2f090 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33  meter to sqlite3
2f0a0 46 69 6e 64 49 6e 49 6e 64 65 78 28 29 2e 0a 2a  FindInIndex()..*
2f0b0 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
2f0c0 45 58 5f 4e 4f 4f 50 5f 4f 4b 20 20 20 20 20 30  EX_NOOP_OK     0
2f0d0 78 30 30 30 31 20 20 2f 2a 20 4f 4b 20 74 6f 20  x0001  /* OK to 
2f0e0 72 65 74 75 72 6e 20 49 4e 5f 49 4e 44 45 58 5f  return IN_INDEX_
2f0f0 4e 4f 4f 50 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NOOP */.#define 
2f100 49 4e 5f 49 4e 44 45 58 5f 4d 45 4d 42 45 52 53  IN_INDEX_MEMBERS
2f110 48 49 50 20 20 30 78 30 30 30 32 20 20 2f 2a 20  HIP  0x0002  /* 
2f120 49 4e 20 6f 70 65 72 61 74 6f 72 20 75 73 65 64  IN operator used
2f130 20 66 6f 72 20 6d 65 6d 62 65 72 73 68 69 70 20   for membership 
2f140 74 65 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  test */.#define 
2f150 49 4e 5f 49 4e 44 45 58 5f 4c 4f 4f 50 20 20 20  IN_INDEX_LOOP   
2f160 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20       0x0004  /* 
2f170 49 4e 20 6f 70 65 72 61 74 6f 72 20 75 73 65 64  IN operator used
2f180 20 61 73 20 61 20 6c 6f 6f 70 20 2a 2f 0a 69 6e   as a loop */.in
2f190 74 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49  t sqlite3FindInI
2f1a0 6e 64 65 78 28 50 61 72 73 65 20 2a 2c 20 45 78  ndex(Parse *, Ex
2f1b0 70 72 20 2a 2c 20 75 33 32 2c 20 69 6e 74 2a 2c  pr *, u32, int*,
2f1c0 20 69 6e 74 2a 29 3b 0a 0a 69 6e 74 20 73 71 6c   int*);..int sql
2f1d0 69 74 65 33 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28  ite3JournalOpen(
2f1e0 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c 20 63  sqlite3_vfs *, c
2f1f0 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 73 71 6c  onst char *, sql
2f200 69 74 65 33 5f 66 69 6c 65 20 2a 2c 20 69 6e 74  ite3_file *, int
2f210 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
2f220 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 73  te3JournalSize(s
2f230 71 6c 69 74 65 33 5f 76 66 73 20 2a 29 3b 0a 23  qlite3_vfs *);.#
2f240 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
2f250 45 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d 49 43 5f  E_ENABLE_ATOMIC_
2f260 57 52 49 54 45 29 20 5c 0a 20 7c 7c 20 64 65 66  WRITE) \. || def
2f270 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
2f280 4c 45 5f 42 41 54 43 48 5f 41 54 4f 4d 49 43 5f  LE_BATCH_ATOMIC_
2f290 57 52 49 54 45 29 0a 20 20 69 6e 74 20 73 71 6c  WRITE).  int sql
2f2a0 69 74 65 33 4a 6f 75 72 6e 61 6c 43 72 65 61 74  ite3JournalCreat
2f2b0 65 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a  e(sqlite3_file *
2f2c0 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73  );.#endif..int s
2f2d0 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 49 73 49  qlite3JournalIsI
2f2e0 6e 4d 65 6d 6f 72 79 28 73 71 6c 69 74 65 33 5f  nMemory(sqlite3_
2f2f0 66 69 6c 65 20 2a 70 29 3b 0a 76 6f 69 64 20 73  file *p);.void s
2f300 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c  qlite3MemJournal
2f310 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 66 69 6c  Open(sqlite3_fil
2f320 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69  e *);..void sqli
2f330 74 65 33 45 78 70 72 53 65 74 48 65 69 67 68 74  te3ExprSetHeight
2f340 41 6e 64 46 6c 61 67 73 28 50 61 72 73 65 20 2a  AndFlags(Parse *
2f350 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70 29  pParse, Expr *p)
2f360 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  ;.#if SQLITE_MAX
2f370 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20  _EXPR_DEPTH>0.  
2f380 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63  int sqlite3Selec
2f390 74 45 78 70 72 48 65 69 67 68 74 28 53 65 6c 65  tExprHeight(Sele
2f3a0 63 74 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  ct *);.  int sql
2f3b0 69 74 65 33 45 78 70 72 43 68 65 63 6b 48 65 69  ite3ExprCheckHei
2f3c0 67 68 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  ght(Parse*, int)
2f3d0 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
2f3e0 65 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45  e sqlite3SelectE
2f3f0 78 70 72 48 65 69 67 68 74 28 78 29 20 30 0a 20  xprHeight(x) 0. 
2f400 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2f410 45 78 70 72 43 68 65 63 6b 48 65 69 67 68 74 28  ExprCheckHeight(
2f420 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 75 33 32  x,y).#endif..u32
2f430 20 73 71 6c 69 74 65 33 47 65 74 34 62 79 74 65   sqlite3Get4byte
2f440 28 63 6f 6e 73 74 20 75 38 2a 29 3b 0a 76 6f 69  (const u8*);.voi
2f450 64 20 73 71 6c 69 74 65 33 50 75 74 34 62 79 74  d sqlite3Put4byt
2f460 65 28 75 38 2a 2c 20 75 33 32 29 3b 0a 0a 23 69  e(u8*, u32);..#i
2f470 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
2f480 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59  LE_UNLOCK_NOTIFY
2f490 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
2f4a0 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64  onnectionBlocked
2f4b0 28 73 71 6c 69 74 65 33 20 2a 2c 20 73 71 6c 69  (sqlite3 *, sqli
2f4c0 74 65 33 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73  te3 *);.  void s
2f4d0 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
2f4e0 55 6e 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33  Unlocked(sqlite3
2f4f0 20 2a 64 62 29 3b 0a 20 20 76 6f 69 64 20 73 71   *db);.  void sq
2f500 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43  lite3ConnectionC
2f510 6c 6f 73 65 64 28 73 71 6c 69 74 65 33 20 2a 64  losed(sqlite3 *d
2f520 62 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  b);.#else.  #def
2f530 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  ine sqlite3Conne
2f540 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 78 2c 79  ctionBlocked(x,y
2f550 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
2f560 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c  te3ConnectionUnl
2f570 6f 63 6b 65 64 28 78 29 0a 20 20 23 64 65 66 69  ocked(x).  #defi
2f580 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  ne sqlite3Connec
2f590 74 69 6f 6e 43 6c 6f 73 65 64 28 78 29 0a 23 65  tionClosed(x).#e
2f5a0 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
2f5b0 49 54 45 5f 44 45 42 55 47 0a 20 20 76 6f 69 64  ITE_DEBUG.  void
2f5c0 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 54 72   sqlite3ParserTr
2f5d0 61 63 65 28 46 49 4c 45 2a 2c 20 63 68 61 72 20  ace(FILE*, char 
2f5e0 2a 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64  *);.#endif.#if d
2f5f0 65 66 69 6e 65 64 28 59 59 43 4f 56 45 52 41 47  efined(YYCOVERAG
2f600 45 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  E).  int sqlite3
2f610 50 61 72 73 65 72 43 6f 76 65 72 61 67 65 28 46  ParserCoverage(F
2f620 49 4c 45 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f  ILE*);.#endif../
2f630 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49  *.** If the SQLI
2f640 54 45 5f 45 4e 41 42 4c 45 20 49 4f 54 52 41 43  TE_ENABLE IOTRAC
2f650 45 20 65 78 69 73 74 73 20 74 68 65 6e 20 74 68  E exists then th
2f660 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  e global variabl
2f670 65 0a 2a 2a 20 73 71 6c 69 74 65 33 49 6f 54 72  e.** sqlite3IoTr
2f680 61 63 65 20 69 73 20 61 20 70 6f 69 6e 74 65 72  ace is a pointer
2f690 20 74 6f 20 61 20 70 72 69 6e 74 66 2d 6c 69 6b   to a printf-lik
2f6a0 65 20 72 6f 75 74 69 6e 65 20 75 73 65 64 20 74  e routine used t
2f6b0 6f 0a 2a 2a 20 70 72 69 6e 74 20 49 2f 4f 20 74  o.** print I/O t
2f6c0 72 61 63 69 6e 67 20 6d 65 73 73 61 67 65 73 2e  racing messages.
2f6d0 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
2f6e0 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45  E_ENABLE_IOTRACE
2f6f0 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43  .# define IOTRAC
2f700 45 28 41 29 20 20 69 66 28 20 73 71 6c 69 74 65  E(A)  if( sqlite
2f710 33 49 6f 54 72 61 63 65 20 29 7b 20 73 71 6c 69  3IoTrace ){ sqli
2f720 74 65 33 49 6f 54 72 61 63 65 20 41 3b 20 7d 0a  te3IoTrace A; }.
2f730 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64    void sqlite3Vd
2f740 62 65 49 4f 54 72 61 63 65 53 71 6c 28 56 64 62  beIOTraceSql(Vdb
2f750 65 2a 29 3b 0a 53 51 4c 49 54 45 5f 41 50 49 20  e*);.SQLITE_API 
2f760 53 51 4c 49 54 45 5f 45 58 54 45 52 4e 20 76 6f  SQLITE_EXTERN vo
2f770 69 64 20 28 53 51 4c 49 54 45 5f 43 44 45 43 4c  id (SQLITE_CDECL
2f780 20 2a 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65   *sqlite3IoTrace
2f790 29 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e  )(const char*,..
2f7a0 2e 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  .);.#else.# defi
2f7b0 6e 65 20 49 4f 54 52 41 43 45 28 41 29 0a 23 20  ne IOTRACE(A).# 
2f7c0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 64  define sqlite3Vd
2f7d0 62 65 49 4f 54 72 61 63 65 53 71 6c 28 58 29 0a  beIOTraceSql(X).
2f7e0 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
2f7f0 65 73 65 20 72 6f 75 74 69 6e 65 73 20 61 72 65  ese routines are
2f800 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 74   available for t
2f810 68 65 20 6d 65 6d 32 2e 63 20 64 65 62 75 67 67  he mem2.c debugg
2f820 69 6e 67 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ing memory alloc
2f830 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54  ator.** only.  T
2f840 68 65 79 20 61 72 65 20 75 73 65 64 20 74 6f 20  hey are used to 
2f850 76 65 72 69 66 79 20 74 68 61 74 20 64 69 66 66  verify that diff
2f860 65 72 65 6e 74 20 22 74 79 70 65 73 22 20 6f 66  erent "types" of
2f870 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f 63   memory.** alloc
2f880 61 74 69 6f 6e 73 20 61 72 65 20 70 72 6f 70 65  ations are prope
2f890 72 6c 79 20 74 72 61 63 6b 65 64 20 62 79 20 74  rly tracked by t
2f8a0 68 65 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a  he system..**.**
2f8b0 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
2f8c0 53 65 74 54 79 70 65 28 29 20 73 65 74 73 20 74  SetType() sets t
2f8d0 68 65 20 22 74 79 70 65 22 20 6f 66 20 61 6e 20  he "type" of an 
2f8e0 61 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f 20 6f 6e  allocation to on
2f8f0 65 20 6f 66 0a 2a 2a 20 74 68 65 20 4d 45 4d 54  e of.** the MEMT
2f900 59 50 45 5f 2a 20 6d 61 63 72 6f 73 20 64 65 66  YPE_* macros def
2f910 69 6e 65 64 20 62 65 6c 6f 77 2e 20 20 54 68 65  ined below.  The
2f920 20 74 79 70 65 20 6d 75 73 74 20 62 65 20 61 20   type must be a 
2f930 62 69 74 6d 61 73 6b 20 77 69 74 68 0a 2a 2a 20  bitmask with.** 
2f940 61 20 73 69 6e 67 6c 65 20 62 69 74 20 73 65 74  a single bit set
2f950 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d  ..**.** sqlite3M
2f960 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 29  emdebugHasType()
2f970 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69 66   returns true if
2f980 20 61 6e 79 20 6f 66 20 74 68 65 20 62 69 74 73   any of the bits
2f990 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a   in its second.*
2f9a0 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63 68  * argument match
2f9b0 20 74 68 65 20 74 79 70 65 20 73 65 74 20 62 79   the type set by
2f9c0 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 73 71   the previous sq
2f9d0 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74  lite3MemdebugSet
2f9e0 54 79 70 65 28 29 2e 0a 2a 2a 20 73 71 6c 69 74  Type()..** sqlit
2f9f0 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70  e3MemdebugHasTyp
2fa00 65 28 29 20 69 73 20 69 6e 74 65 6e 64 65 64 20  e() is intended 
2fa10 66 6f 72 20 75 73 65 20 69 6e 73 69 64 65 20 61  for use inside a
2fa20 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
2fa30 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65  ts..**.** sqlite
2fa40 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28  3MemdebugNoType(
2fa50 29 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69  ) returns true i
2fa60 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 62 69  f none of the bi
2fa70 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64  ts in its second
2fa80 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74  .** argument mat
2fa90 63 68 20 74 68 65 20 74 79 70 65 20 73 65 74 20  ch the type set 
2faa0 62 79 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  by the previous 
2fab0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
2fac0 65 74 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a 20  etType()..**.** 
2fad0 50 65 72 68 61 70 73 20 74 68 65 20 6d 6f 73 74  Perhaps the most
2fae0 20 69 6d 70 6f 72 74 61 6e 74 20 70 6f 69 6e 74   important point
2faf0 20 69 73 20 74 68 65 20 64 69 66 66 65 72 65 6e   is the differen
2fb00 63 65 20 62 65 74 77 65 65 6e 20 4d 45 4d 54 59  ce between MEMTY
2fb10 50 45 5f 48 45 41 50 0a 2a 2a 20 61 6e 64 20 4d  PE_HEAP.** and M
2fb20 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45  EMTYPE_LOOKASIDE
2fb30 2e 20 20 49 66 20 61 6e 20 61 6c 6c 6f 63 61 74  .  If an allocat
2fb40 69 6f 6e 20 69 73 20 4d 45 4d 54 59 50 45 5f 4c  ion is MEMTYPE_L
2fb50 4f 4f 4b 41 53 49 44 45 2c 20 74 68 61 74 20 6d  OOKASIDE, that m
2fb60 65 61 6e 73 0a 2a 2a 20 69 74 20 6d 69 67 68 74  eans.** it might
2fb70 20 68 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f 63   have been alloc
2fb80 61 74 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64  ated by lookasid
2fb90 65 2c 20 65 78 63 65 70 74 20 74 68 65 20 61 6c  e, except the al
2fba0 6c 6f 63 61 74 69 6f 6e 20 77 61 73 0a 2a 2a 20  location was.** 
2fbb0 74 6f 6f 20 6c 61 72 67 65 20 6f 72 20 6c 6f 6f  too large or loo
2fbc0 6b 61 73 69 64 65 20 77 61 73 20 61 6c 72 65 61  kaside was alrea
2fbd0 64 79 20 66 75 6c 6c 2e 20 20 49 74 20 69 73 20  dy full.  It is 
2fbe0 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 76 65 72  important to ver
2fbf0 69 66 79 0a 2a 2a 20 74 68 61 74 20 61 6c 6c 6f  ify.** that allo
2fc00 63 61 74 69 6f 6e 73 20 74 68 61 74 20 6d 69 67  cations that mig
2fc10 68 74 20 68 61 76 65 20 62 65 65 6e 20 73 61 74  ht have been sat
2fc20 69 73 66 69 65 64 20 62 79 20 6c 6f 6f 6b 61 73  isfied by lookas
2fc30 69 64 65 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 70  ide are not.** p
2fc40 61 73 73 65 64 20 62 61 63 6b 20 74 6f 20 6e 6f  assed back to no
2fc50 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65  n-lookaside free
2fc60 28 29 20 72 6f 75 74 69 6e 65 73 2e 20 20 41 73  () routines.  As
2fc70 73 65 72 74 73 20 73 75 63 68 20 61 73 20 74 68  serts such as th
2fc80 65 0a 2a 2a 20 65 78 61 6d 70 6c 65 20 61 62 6f  e.** example abo
2fc90 76 65 20 61 72 65 20 70 6c 61 63 65 64 20 6f 6e  ve are placed on
2fca0 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69   the non-lookasi
2fcb0 64 65 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e  de free() routin
2fcc0 65 73 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20  es to verify.** 
2fcd0 74 68 69 73 20 63 6f 6e 73 74 72 61 69 6e 74 2e  this constraint.
2fce0 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68  .**.** All of th
2fcf0 69 73 20 69 73 20 6e 6f 2d 6f 70 20 66 6f 72 20  is is no-op for 
2fd00 61 20 70 72 6f 64 75 63 74 69 6f 6e 20 62 75 69  a production bui
2fd10 6c 64 2e 20 20 49 74 20 6f 6e 6c 79 20 63 6f 6d  ld.  It only com
2fd20 65 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79 20  es into.** play 
2fd30 77 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f  when the SQLITE_
2fd40 4d 45 4d 44 45 42 55 47 20 63 6f 6d 70 69 6c 65  MEMDEBUG compile
2fd50 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20  -time option is 
2fd60 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  used..*/.#ifdef 
2fd70 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a  SQLITE_MEMDEBUG.
2fd80 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65    void sqlite3Me
2fd90 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 76 6f  mdebugSetType(vo
2fda0 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73  id*,u8);.  int s
2fdb0 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61  qlite3MemdebugHa
2fdc0 73 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b  sType(void*,u8);
2fdd0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65  .  int sqlite3Me
2fde0 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 76 6f 69  mdebugNoType(voi
2fdf0 64 2a 2c 75 38 29 3b 0a 23 65 6c 73 65 0a 23 20  d*,u8);.#else.# 
2fe00 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65  define sqlite3Me
2fe10 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 58 2c  mdebugSetType(X,
2fe20 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a  Y)  /* no-op */.
2fe30 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2fe40 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28  MemdebugHasType(
2fe50 58 2c 59 29 20 20 31 0a 23 20 64 65 66 69 6e 65  X,Y)  1.# define
2fe60 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
2fe70 4e 6f 54 79 70 65 28 58 2c 59 29 20 20 20 31 0a  NoType(X,Y)   1.
2fe80 23 65 6e 64 69 66 0a 23 64 65 66 69 6e 65 20 4d  #endif.#define M
2fe90 45 4d 54 59 50 45 5f 48 45 41 50 20 20 20 20 20  EMTYPE_HEAP     
2fea0 20 20 30 78 30 31 20 20 2f 2a 20 47 65 6e 65 72    0x01  /* Gener
2feb0 61 6c 20 68 65 61 70 20 61 6c 6c 6f 63 61 74 69  al heap allocati
2fec0 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  ons */.#define M
2fed0 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45  EMTYPE_LOOKASIDE
2fee0 20 20 30 78 30 32 20 20 2f 2a 20 48 65 61 70 20    0x02  /* Heap 
2fef0 74 68 61 74 20 6d 69 67 68 74 20 68 61 76 65 20  that might have 
2ff00 62 65 65 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 2a  been lookaside *
2ff10 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50  /.#define MEMTYP
2ff20 45 5f 50 43 41 43 48 45 20 20 20 20 20 30 78 30  E_PCACHE     0x0
2ff30 34 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65  4  /* Page cache
2ff40 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a   allocations */.
2ff50 0a 2f 2a 0a 2a 2a 20 54 68 72 65 61 64 69 6e 67  ./*.** Threading
2ff60 20 69 6e 74 65 72 66 61 63 65 0a 2a 2f 0a 23 69   interface.*/.#i
2ff70 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  f SQLITE_MAX_WOR
2ff80 4b 45 52 5f 54 48 52 45 41 44 53 3e 30 0a 69 6e  KER_THREADS>0.in
2ff90 74 20 73 71 6c 69 74 65 33 54 68 72 65 61 64 43  t sqlite3ThreadC
2ffa0 72 65 61 74 65 28 53 51 4c 69 74 65 54 68 72 65  reate(SQLiteThre
2ffb0 61 64 2a 2a 2c 76 6f 69 64 2a 28 2a 29 28 76 6f  ad**,void*(*)(vo
2ffc0 69 64 2a 29 2c 76 6f 69 64 2a 29 3b 0a 69 6e 74  id*),void*);.int
2ffd0 20 73 71 6c 69 74 65 33 54 68 72 65 61 64 4a 6f   sqlite3ThreadJo
2ffe0 69 6e 28 53 51 4c 69 74 65 54 68 72 65 61 64 2a  in(SQLiteThread*
2fff0 2c 20 76 6f 69 64 2a 2a 29 3b 0a 23 65 6e 64 69  , void**);.#endi
30000 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  f..#if defined(S
30010 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44 42 50  QLITE_ENABLE_DBP
30020 41 47 45 5f 56 54 41 42 29 20 7c 7c 20 64 65 66  AGE_VTAB) || def
30030 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54  ined(SQLITE_TEST
30040 29 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62 70  ).int sqlite3Dbp
30050 61 67 65 52 65 67 69 73 74 65 72 28 73 71 6c 69  ageRegister(sqli
30060 74 65 33 2a 29 3b 0a 23 65 6e 64 69 66 0a 23 69  te3*);.#endif.#i
30070 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
30080 5f 45 4e 41 42 4c 45 5f 44 42 53 54 41 54 5f 56  _ENABLE_DBSTAT_V
30090 54 41 42 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  TAB) || defined(
300a0 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 69 6e 74  SQLITE_TEST).int
300b0 20 73 71 6c 69 74 65 33 44 62 73 74 61 74 52 65   sqlite3DbstatRe
300c0 67 69 73 74 65 72 28 73 71 6c 69 74 65 33 2a 29  gister(sqlite3*)
300d0 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71  ;.#endif..int sq
300e0 6c 69 74 65 33 45 78 70 72 56 65 63 74 6f 72 53  lite3ExprVectorS
300f0 69 7a 65 28 45 78 70 72 20 2a 70 45 78 70 72 29  ize(Expr *pExpr)
30100 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
30110 72 49 73 56 65 63 74 6f 72 28 45 78 70 72 20 2a  rIsVector(Expr *
30120 70 45 78 70 72 29 3b 0a 45 78 70 72 20 2a 73 71  pExpr);.Expr *sq
30130 6c 69 74 65 33 56 65 63 74 6f 72 46 69 65 6c 64  lite3VectorField
30140 53 75 62 65 78 70 72 28 45 78 70 72 2a 2c 20 69  Subexpr(Expr*, i
30150 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  nt);.Expr *sqlit
30160 65 33 45 78 70 72 46 6f 72 56 65 63 74 6f 72 46  e3ExprForVectorF
30170 69 65 6c 64 28 50 61 72 73 65 2a 2c 45 78 70 72  ield(Parse*,Expr
30180 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
30190 69 74 65 33 56 65 63 74 6f 72 45 72 72 6f 72 4d  ite3VectorErrorM
301a0 73 67 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  sg(Parse*, Expr*
301b0 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  );..#ifndef SQLI
301c0 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f  TE_OMIT_COMPILEO
301d0 50 54 49 4f 4e 5f 44 49 41 47 53 0a 63 6f 6e 73  PTION_DIAGS.cons
301e0 74 20 63 68 61 72 20 2a 2a 73 71 6c 69 74 65 33  t char **sqlite3
301f0 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 28 69  CompileOptions(i
30200 6e 74 20 2a 70 6e 4f 70 74 29 3b 0a 23 65 6e 64  nt *pnOpt);.#end
30210 69 66 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  if..#endif /* SQ
30220 4c 49 54 45 49 4e 54 5f 48 20 2a 2f 0a           LITEINT_H */.