/ Hex Artifact Content
Login

Artifact bdc181e371ea618c85f30b4c5ee4d80f4ada6ad7:


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 4d 61 6b 65 20 73 75 72  ../*.** Make sur
0770: 65 20 74 68 61 74 20 72 61 6e 64 5f 73 28 29 20  e that rand_s() 
0780: 69 73 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e 20  is available on 
0790: 57 69 6e 64 6f 77 73 20 73 79 73 74 65 6d 73 20  Windows systems 
07a0: 77 69 74 68 20 4d 53 56 43 20 32 30 30 35 0a 2a  with MSVC 2005.*
07b0: 2a 20 6f 72 20 68 69 67 68 65 72 2e 0a 2a 2f 0a  * or higher..*/.
07c0: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 4d 53 43  #if defined(_MSC
07d0: 5f 56 45 52 29 20 26 26 20 5f 4d 53 43 5f 56 45  _VER) && _MSC_VE
07e0: 52 3e 3d 31 34 30 30 0a 23 20 20 64 65 66 69 6e  R>=1400.#  defin
07f0: 65 20 5f 43 52 54 5f 52 41 4e 44 5f 53 0a 23 65  e _CRT_RAND_S.#e
0800: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  ndif../*.** Incl
0810: 75 64 65 20 74 68 65 20 68 65 61 64 65 72 20 66  ude the header f
0820: 69 6c 65 20 75 73 65 64 20 74 6f 20 63 75 73 74  ile used to cust
0830: 6f 6d 69 7a 65 20 74 68 65 20 63 6f 6d 70 69 6c  omize the compil
0840: 65 72 20 6f 70 74 69 6f 6e 73 20 66 6f 72 20 4d  er options for M
0850: 53 56 43 2e 0a 2a 2a 20 54 68 69 73 20 73 68 6f  SVC..** This sho
0860: 75 6c 64 20 62 65 20 64 6f 6e 65 20 66 69 72 73  uld be done firs
0870: 74 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e  t so that it can
0880: 20 73 75 63 63 65 73 73 66 75 6c 6c 79 20 70 72   successfully pr
0890: 65 76 65 6e 74 20 73 70 75 72 69 6f 75 73 0a 2a  event spurious.*
08a0: 2a 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69  * compiler warni
08b0: 6e 67 73 20 64 75 65 20 74 6f 20 73 75 62 73 65  ngs due to subse
08c0: 71 75 65 6e 74 20 63 6f 6e 74 65 6e 74 20 69 6e  quent content in
08d0: 20 74 68 69 73 20 66 69 6c 65 20 61 6e 64 20 6f   this file and o
08e0: 74 68 65 72 20 66 69 6c 65 73 0a 2a 2a 20 74 68  ther files.** th
08f0: 61 74 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20  at are included 
0900: 62 79 20 74 68 69 73 20 66 69 6c 65 2e 0a 2a 2f  by this file..*/
0910: 0a 23 69 6e 63 6c 75 64 65 20 22 6d 73 76 63 2e  .#include "msvc.
0920: 68 22 0a 0a 2f 2a 0a 2a 2a 20 53 70 65 63 69 61  h"../*.** Specia
0930: 6c 20 73 65 74 75 70 20 66 6f 72 20 56 78 57 6f  l setup for VxWo
0940: 72 6b 73 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20  rks.*/.#include 
0950: 22 76 78 77 6f 72 6b 73 2e 68 22 0a 0a 2f 2a 0a  "vxworks.h"../*.
0960: 2a 2a 20 54 68 65 73 65 20 23 64 65 66 69 6e 65  ** These #define
0970: 73 20 73 68 6f 75 6c 64 20 65 6e 61 62 6c 65 20  s should enable 
0980: 3e 32 47 42 20 66 69 6c 65 20 73 75 70 70 6f 72  >2GB file suppor
0990: 74 20 6f 6e 20 50 4f 53 49 58 20 69 66 20 74 68  t on POSIX if th
09a0: 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20  e.** underlying 
09b0: 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d  operating system
09c0: 20 73 75 70 70 6f 72 74 73 20 69 74 2e 20 20 49   supports it.  I
09d0: 66 20 74 68 65 20 4f 53 20 6c 61 63 6b 73 0a 2a  f the OS lacks.*
09e0: 2a 20 6c 61 72 67 65 20 66 69 6c 65 20 73 75 70  * large file sup
09f0: 70 6f 72 74 2c 20 6f 72 20 69 66 20 74 68 65 20  port, or if the 
0a00: 4f 53 20 69 73 20 77 69 6e 64 6f 77 73 2c 20 74  OS is windows, t
0a10: 68 65 73 65 20 73 68 6f 75 6c 64 20 62 65 20 6e  hese should be n
0a20: 6f 2d 6f 70 73 2e 0a 2a 2a 0a 2a 2a 20 54 69 63  o-ops..**.** Tic
0a30: 6b 65 74 20 23 32 37 33 39 3a 20 20 54 68 65 20  ket #2739:  The 
0a40: 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55 52 43  _LARGEFILE_SOURC
0a50: 45 20 6d 61 63 72 6f 20 6d 75 73 74 20 61 70 70  E macro must app
0a60: 65 61 72 20 62 65 66 6f 72 65 20 61 6e 79 0a 2a  ear before any.*
0a70: 2a 20 73 79 73 74 65 6d 20 23 69 6e 63 6c 75 64  * system #includ
0a80: 65 73 2e 20 20 48 65 6e 63 65 2c 20 74 68 69 73  es.  Hence, this
0a90: 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 20 6d   block of code m
0aa0: 75 73 74 20 62 65 20 74 68 65 20 76 65 72 79 20  ust be the very 
0ab0: 66 69 72 73 74 0a 2a 2a 20 63 6f 64 65 20 69 6e  first.** code in
0ac0: 20 61 6c 6c 20 73 6f 75 72 63 65 20 66 69 6c 65   all source file
0ad0: 73 2e 0a 2a 2a 0a 2a 2a 20 4c 61 72 67 65 20 66  s..**.** Large f
0ae0: 69 6c 65 20 73 75 70 70 6f 72 74 20 63 61 6e 20  ile support can 
0af0: 62 65 20 64 69 73 61 62 6c 65 64 20 75 73 69 6e  be disabled usin
0b00: 67 20 74 68 65 20 2d 44 53 51 4c 49 54 45 5f 44  g the -DSQLITE_D
0b10: 49 53 41 42 4c 45 5f 4c 46 53 20 73 77 69 74 63  ISABLE_LFS switc
0b20: 68 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f 6d 70  h.** on the comp
0b30: 69 6c 65 72 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e  iler command lin
0b40: 65 2e 20 20 54 68 69 73 20 69 73 20 6e 65 63 65  e.  This is nece
0b50: 73 73 61 72 79 20 69 66 20 79 6f 75 20 61 72 65  ssary if you are
0b60: 20 63 6f 6d 70 69 6c 69 6e 67 0a 2a 2a 20 6f 6e   compiling.** on
0b70: 20 61 20 72 65 63 65 6e 74 20 6d 61 63 68 69 6e   a recent machin
0b80: 65 20 28 65 78 3a 20 52 65 64 20 48 61 74 20 37  e (ex: Red Hat 7
0b90: 2e 32 29 20 62 75 74 20 79 6f 75 20 77 61 6e 74  .2) but you want
0ba0: 20 79 6f 75 72 20 63 6f 64 65 20 74 6f 20 77 6f   your code to wo
0bb0: 72 6b 0a 2a 2a 20 6f 6e 20 61 6e 20 6f 6c 64 65  rk.** on an olde
0bc0: 72 20 6d 61 63 68 69 6e 65 20 28 65 78 3a 20 52  r machine (ex: R
0bd0: 65 64 20 48 61 74 20 36 2e 30 29 2e 20 20 49 66  ed Hat 6.0).  If
0be0: 20 79 6f 75 20 63 6f 6d 70 69 6c 65 20 6f 6e 20   you compile on 
0bf0: 52 65 64 20 48 61 74 20 37 2e 32 0a 2a 2a 20 77  Red Hat 7.2.** w
0c00: 69 74 68 6f 75 74 20 74 68 69 73 20 6f 70 74 69  ithout this opti
0c10: 6f 6e 2c 20 4c 46 53 20 69 73 20 65 6e 61 62 6c  on, LFS is enabl
0c20: 65 2e 20 20 42 75 74 20 4c 46 53 20 64 6f 65 73  e.  But LFS does
0c30: 20 6e 6f 74 20 65 78 69 73 74 20 69 6e 20 74 68   not exist in th
0c40: 65 20 6b 65 72 6e 65 6c 0a 2a 2a 20 69 6e 20 52  e kernel.** in R
0c50: 65 64 20 48 61 74 20 36 2e 30 2c 20 73 6f 20 74  ed Hat 6.0, so t
0c60: 68 65 20 63 6f 64 65 20 77 6f 6e 27 74 20 77 6f  he code won't wo
0c70: 72 6b 2e 20 20 48 65 6e 63 65 2c 20 66 6f 72 20  rk.  Hence, for 
0c80: 6d 61 78 69 6d 75 6d 20 62 69 6e 61 72 79 0a 2a  maximum binary.*
0c90: 2a 20 70 6f 72 74 61 62 69 6c 69 74 79 20 79 6f  * portability yo
0ca0: 75 20 73 68 6f 75 6c 64 20 6f 6d 69 74 20 4c 46  u should omit LF
0cb0: 53 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 72 65  S..**.** The pre
0cc0: 76 69 6f 75 73 20 70 61 72 61 67 72 61 70 68 20  vious paragraph 
0cd0: 77 61 73 20 77 72 69 74 74 65 6e 20 69 6e 20 32  was written in 2
0ce0: 30 30 35 2e 20 20 28 54 68 69 73 20 70 61 72 61  005.  (This para
0cf0: 67 72 61 70 68 20 69 73 20 77 72 69 74 74 65 6e  graph is written
0d00: 0a 2a 2a 20 6f 6e 20 32 30 30 38 2d 31 31 2d 32  .** on 2008-11-2
0d10: 38 2e 29 20 54 68 65 73 65 20 64 61 79 73 2c 20  8.) These days, 
0d20: 61 6c 6c 20 4c 69 6e 75 78 20 6b 65 72 6e 65 6c  all Linux kernel
0d30: 73 20 73 75 70 70 6f 72 74 20 6c 61 72 67 65 20  s support large 
0d40: 66 69 6c 65 73 2c 20 73 6f 0a 2a 2a 20 79 6f 75  files, so.** you
0d50: 20 73 68 6f 75 6c 64 20 70 72 6f 62 61 62 6c 79   should probably
0d60: 20 6c 65 61 76 65 20 4c 46 53 20 65 6e 61 62 6c   leave LFS enabl
0d70: 65 64 2e 20 20 42 75 74 20 73 6f 6d 65 20 65 6d  ed.  But some em
0d80: 62 65 64 64 65 64 20 70 6c 61 74 66 6f 72 6d 73  bedded platforms
0d90: 20 6d 69 67 68 74 0a 2a 2a 20 6c 61 63 6b 20 4c   might.** lack L
0da0: 46 53 20 69 6e 20 77 68 69 63 68 20 63 61 73 65  FS in which case
0db0: 20 74 68 65 20 53 51 4c 49 54 45 5f 44 49 53 41   the SQLITE_DISA
0dc0: 42 4c 45 5f 4c 46 53 20 6d 61 63 72 6f 20 6d 69  BLE_LFS macro mi
0dd0: 67 68 74 20 73 74 69 6c 6c 20 62 65 20 75 73 65  ght still be use
0de0: 66 75 6c 2e 0a 2a 2a 0a 2a 2a 20 53 69 6d 69 6c  ful..**.** Simil
0df0: 61 72 20 69 73 20 74 72 75 65 20 66 6f 72 20 4d  ar is true for M
0e00: 61 63 20 4f 53 20 58 2e 20 20 4c 46 53 20 69 73  ac OS X.  LFS is
0e10: 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74 65 64 20   only supported 
0e20: 6f 6e 20 4d 61 63 20 4f 53 20 58 20 39 20 61 6e  on Mac OS X 9 an
0e30: 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 23 69 66 6e  d later..*/.#ifn
0e40: 64 65 66 20 53 51 4c 49 54 45 5f 44 49 53 41 42  def SQLITE_DISAB
0e50: 4c 45 5f 4c 46 53 0a 23 20 64 65 66 69 6e 65 20  LE_LFS.# define 
0e60: 5f 4c 41 52 47 45 5f 46 49 4c 45 20 20 20 20 20  _LARGE_FILE     
0e70: 20 20 31 0a 23 20 69 66 6e 64 65 66 20 5f 46 49    1.# ifndef _FI
0e80: 4c 45 5f 4f 46 46 53 45 54 5f 42 49 54 53 0a 23  LE_OFFSET_BITS.#
0e90: 20 20 20 64 65 66 69 6e 65 20 5f 46 49 4c 45 5f     define _FILE_
0ea0: 4f 46 46 53 45 54 5f 42 49 54 53 20 36 34 0a 23  OFFSET_BITS 64.#
0eb0: 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20   endif.# define 
0ec0: 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55 52 43  _LARGEFILE_SOURC
0ed0: 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 54  E 1.#endif../* T
0ee0: 68 65 20 47 43 43 5f 56 45 52 53 49 4f 4e 20 61  he GCC_VERSION a
0ef0: 6e 64 20 4d 53 56 43 5f 56 45 52 53 49 4f 4e 20  nd MSVC_VERSION 
0f00: 6d 61 63 72 6f 73 20 61 72 65 20 75 73 65 64 20  macros are used 
0f10: 74 6f 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 61  to.** conditiona
0f20: 6c 6c 79 20 69 6e 63 6c 75 64 65 20 6f 70 74 69  lly include opti
0f30: 6d 69 7a 61 74 69 6f 6e 73 20 66 6f 72 20 65 61  mizations for ea
0f40: 63 68 20 6f 66 20 74 68 65 73 65 20 63 6f 6d 70  ch of these comp
0f50: 69 6c 65 72 73 2e 20 20 41 0a 2a 2a 20 76 61 6c  ilers.  A.** val
0f60: 75 65 20 6f 66 20 30 20 6d 65 61 6e 73 20 74 68  ue of 0 means th
0f70: 61 74 20 63 6f 6d 70 69 6c 65 72 20 69 73 20 6e  at compiler is n
0f80: 6f 74 20 62 65 69 6e 67 20 75 73 65 64 2e 20 20  ot being used.  
0f90: 54 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 44 49  The.** SQLITE_DI
0fa0: 53 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 20  SABLE_INTRINSIC 
0fb0: 6d 61 63 72 6f 20 6d 65 61 6e 73 20 64 6f 20 6e  macro means do n
0fc0: 6f 74 20 75 73 65 20 61 6e 79 20 63 6f 6d 70 69  ot use any compi
0fd0: 6c 65 72 2d 73 70 65 63 69 66 69 63 0a 2a 2a 20  ler-specific.** 
0fe0: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2c 20 61  optimizations, a
0ff0: 6e 64 20 68 65 6e 63 65 20 73 65 74 20 61 6c 6c  nd hence set all
1000: 20 63 6f 6d 70 69 6c 65 72 20 6d 61 63 72 6f 73   compiler macros
1010: 20 74 6f 20 30 0a 2a 2a 0a 2a 2a 20 54 68 65 72   to 0.**.** Ther
1020: 65 20 77 61 73 20 6f 6e 63 65 20 61 6c 73 6f 20  e was once also 
1030: 61 20 43 4c 41 4e 47 5f 56 45 52 53 49 4f 4e 20  a CLANG_VERSION 
1040: 6d 61 63 72 6f 2e 20 20 48 6f 77 65 76 65 72 2c  macro.  However,
1050: 20 77 65 20 6c 65 61 72 6e 20 74 68 61 74 20 74   we learn that t
1060: 68 65 0a 2a 2a 20 76 65 72 73 69 6f 6e 20 6e 75  he.** version nu
1070: 6d 62 65 72 73 20 69 6e 20 63 6c 61 6e 67 20 61  mbers in clang a
1080: 72 65 20 66 6f 72 20 22 6d 61 72 6b 65 74 69 6e  re for "marketin
1090: 67 22 20 6f 6e 6c 79 20 61 6e 64 20 61 72 65 20  g" only and are 
10a0: 69 6e 63 6f 6e 73 69 73 74 65 6e 74 0a 2a 2a 20  inconsistent.** 
10b0: 61 6e 64 20 75 6e 72 65 6c 69 61 62 6c 65 2e 20  and unreliable. 
10c0: 20 46 6f 72 74 75 6e 61 74 65 6c 79 2c 20 61 6c   Fortunately, al
10d0: 6c 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 63 6c  l versions of cl
10e0: 61 6e 67 20 61 6c 73 6f 20 72 65 63 6f 67 6e 69  ang also recogni
10f0: 7a 65 20 74 68 65 0a 2a 2a 20 67 63 63 20 76 65  ze the.** gcc ve
1100: 72 73 69 6f 6e 20 6e 75 6d 62 65 72 73 20 61 6e  rsion numbers an
1110: 64 20 68 61 76 65 20 72 65 61 73 6f 6e 61 62 6c  d have reasonabl
1120: 65 20 73 65 74 74 69 6e 67 73 20 66 6f 72 20 67  e settings for g
1130: 63 63 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65  cc version numbe
1140: 72 73 2c 0a 2a 2a 20 73 6f 20 74 68 65 20 47 43  rs,.** so the GC
1150: 43 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72 6f 20  C_VERSION macro 
1160: 77 69 6c 6c 20 62 65 20 73 65 74 20 74 6f 20 61  will be set to a
1170: 20 63 6f 72 72 65 63 74 20 6e 6f 6e 2d 7a 65 72   correct non-zer
1180: 6f 20 76 61 6c 75 65 20 65 76 65 6e 0a 2a 2a 20  o value even.** 
1190: 77 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 77  when compiling w
11a0: 69 74 68 20 63 6c 61 6e 67 2e 0a 2a 2f 0a 23 69  ith clang..*/.#i
11b0: 66 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43  f defined(__GNUC
11c0: 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  __) && !defined(
11d0: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 49  SQLITE_DISABLE_I
11e0: 4e 54 52 49 4e 53 49 43 29 0a 23 20 64 65 66 69  NTRINSIC).# defi
11f0: 6e 65 20 47 43 43 5f 56 45 52 53 49 4f 4e 20 28  ne GCC_VERSION (
1200: 5f 5f 47 4e 55 43 5f 5f 2a 31 30 30 30 30 30 30  __GNUC__*1000000
1210: 2b 5f 5f 47 4e 55 43 5f 4d 49 4e 4f 52 5f 5f 2a  +__GNUC_MINOR__*
1220: 31 30 30 30 2b 5f 5f 47 4e 55 43 5f 50 41 54 43  1000+__GNUC_PATC
1230: 48 4c 45 56 45 4c 5f 5f 29 0a 23 65 6c 73 65 0a  HLEVEL__).#else.
1240: 23 20 64 65 66 69 6e 65 20 47 43 43 5f 56 45 52  # define GCC_VER
1250: 53 49 4f 4e 20 30 0a 23 65 6e 64 69 66 0a 23 69  SION 0.#endif.#i
1260: 66 20 64 65 66 69 6e 65 64 28 5f 4d 53 43 5f 56  f defined(_MSC_V
1270: 45 52 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  ER) && !defined(
1280: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 49  SQLITE_DISABLE_I
1290: 4e 54 52 49 4e 53 49 43 29 0a 23 20 64 65 66 69  NTRINSIC).# defi
12a0: 6e 65 20 4d 53 56 43 5f 56 45 52 53 49 4f 4e 20  ne MSVC_VERSION 
12b0: 5f 4d 53 43 5f 56 45 52 0a 23 65 6c 73 65 0a 23  _MSC_VER.#else.#
12c0: 20 64 65 66 69 6e 65 20 4d 53 56 43 5f 56 45 52   define MSVC_VER
12d0: 53 49 4f 4e 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  SION 0.#endif../
12e0: 2a 20 4e 65 65 64 65 64 20 66 6f 72 20 76 61 72  * Needed for var
12f0: 69 6f 75 73 20 64 65 66 69 6e 69 74 69 6f 6e 73  ious definitions
1300: 2e 2e 2e 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e  ... */.#if defin
1310: 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 26 26 20  ed(__GNUC__) && 
1320: 21 64 65 66 69 6e 65 64 28 5f 47 4e 55 5f 53 4f  !defined(_GNU_SO
1330: 55 52 43 45 29 0a 23 20 64 65 66 69 6e 65 20 5f  URCE).# define _
1340: 47 4e 55 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69  GNU_SOURCE.#endi
1350: 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  f..#if defined(_
1360: 5f 4f 70 65 6e 42 53 44 5f 5f 29 20 26 26 20 21  _OpenBSD__) && !
1370: 64 65 66 69 6e 65 64 28 5f 42 53 44 5f 53 4f 55  defined(_BSD_SOU
1380: 52 43 45 29 0a 23 20 64 65 66 69 6e 65 20 5f 42  RCE).# define _B
1390: 53 44 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69 66  SD_SOURCE.#endif
13a0: 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47  ../*.** For MinG
13b0: 57 2c 20 63 68 65 63 6b 20 74 6f 20 73 65 65 20  W, check to see 
13c0: 69 66 20 77 65 20 63 61 6e 20 69 6e 63 6c 75 64  if we can includ
13d0: 65 20 74 68 65 20 68 65 61 64 65 72 20 66 69 6c  e the header fil
13e0: 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 69 74 73  e containing its
13f0: 0a 2a 2a 20 76 65 72 73 69 6f 6e 20 69 6e 66 6f  .** version info
1400: 72 6d 61 74 69 6f 6e 2c 20 61 6d 6f 6e 67 20 6f  rmation, among o
1410: 74 68 65 72 20 74 68 69 6e 67 73 2e 20 20 4e 6f  ther things.  No
1420: 72 6d 61 6c 6c 79 2c 20 74 68 69 73 20 69 6e 74  rmally, this int
1430: 65 72 6e 61 6c 20 4d 69 6e 47 57 0a 2a 2a 20 68  ernal MinGW.** h
1440: 65 61 64 65 72 20 66 69 6c 65 20 77 6f 75 6c 64  eader file would
1450: 20 5b 6f 6e 6c 79 5d 20 62 65 20 69 6e 63 6c 75   [only] be inclu
1460: 64 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ded automaticall
1470: 79 20 62 79 20 6f 74 68 65 72 20 4d 69 6e 47 57  y by other MinGW
1480: 20 68 65 61 64 65 72 0a 2a 2a 20 66 69 6c 65 73   header.** files
1490: 3b 20 68 6f 77 65 76 65 72 2c 20 74 68 65 20 63  ; however, the c
14a0: 6f 6e 74 61 69 6e 65 64 20 76 65 72 73 69 6f 6e  ontained version
14b0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20   information is 
14c0: 6e 6f 77 20 72 65 71 75 69 72 65 64 20 62 79 20  now required by 
14d0: 74 68 69 73 0a 2a 2a 20 68 65 61 64 65 72 20 66  this.** header f
14e0: 69 6c 65 20 74 6f 20 77 6f 72 6b 20 61 72 6f 75  ile to work arou
14f0: 6e 64 20 62 69 6e 61 72 79 20 63 6f 6d 70 61 74  nd binary compat
1500: 69 62 69 6c 69 74 79 20 69 73 73 75 65 73 20 28  ibility issues (
1510: 73 65 65 20 62 65 6c 6f 77 29 20 61 6e 64 0a 2a  see below) and.*
1520: 2a 20 74 68 69 73 20 69 73 20 74 68 65 20 6f 6e  * this is the on
1530: 6c 79 20 6b 6e 6f 77 6e 20 77 61 79 20 74 6f 20  ly known way to 
1540: 72 65 6c 69 61 62 6c 79 20 6f 62 74 61 69 6e 20  reliably obtain 
1550: 69 74 2e 20 20 54 68 69 73 20 65 6e 74 69 72 65  it.  This entire
1560: 20 23 69 66 20 62 6c 6f 63 6b 0a 2a 2a 20 77 6f   #if block.** wo
1570: 75 6c 64 20 62 65 20 63 6f 6d 70 6c 65 74 65 6c  uld be completel
1580: 79 20 75 6e 6e 65 63 65 73 73 61 72 79 20 69 66  y unnecessary if
1590: 20 74 68 65 72 65 20 77 61 73 20 61 6e 79 20 6f   there was any o
15a0: 74 68 65 72 20 77 61 79 20 6f 66 20 64 65 74 65  ther way of dete
15b0: 63 74 69 6e 67 0a 2a 2a 20 4d 69 6e 47 57 20 76  cting.** MinGW v
15c0: 69 61 20 74 68 65 69 72 20 70 72 65 70 72 6f 63  ia their preproc
15d0: 65 73 73 6f 72 20 28 65 2e 67 2e 20 69 66 20 74  essor (e.g. if t
15e0: 68 65 79 20 63 75 73 74 6f 6d 69 7a 65 64 20 74  hey customized t
15f0: 68 65 69 72 20 47 43 43 20 74 6f 20 64 65 66 69  heir GCC to defi
1600: 6e 65 0a 2a 2a 20 73 6f 6d 65 20 4d 69 6e 47 57  ne.** some MinGW
1610: 2d 73 70 65 63 69 66 69 63 20 6d 61 63 72 6f 73  -specific macros
1620: 29 2e 20 20 57 68 65 6e 20 63 6f 6d 70 69 6c 69  ).  When compili
1630: 6e 67 20 66 6f 72 20 4d 69 6e 47 57 2c 20 65 69  ng for MinGW, ei
1640: 74 68 65 72 20 74 68 65 0a 2a 2a 20 5f 48 41 56  ther the.** _HAV
1650: 45 5f 4d 49 4e 47 57 5f 48 20 6f 72 20 5f 48 41  E_MINGW_H or _HA
1660: 56 45 5f 5f 4d 49 4e 47 57 5f 48 20 28 6e 6f 74  VE__MINGW_H (not
1670: 65 20 74 68 65 20 65 78 74 72 61 20 75 6e 64 65  e the extra unde
1680: 72 73 63 6f 72 65 29 20 6d 61 63 72 6f 20 6d 75  rscore) macro mu
1690: 73 74 20 62 65 0a 2a 2a 20 64 65 66 69 6e 65 64  st be.** defined
16a0: 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 64 65 74  ; otherwise, det
16b0: 65 63 74 69 6f 6e 20 6f 66 20 63 6f 6e 64 69 74  ection of condit
16c0: 69 6f 6e 73 20 73 70 65 63 69 66 69 63 20 74 6f  ions specific to
16d0: 20 4d 69 6e 47 57 20 77 69 6c 6c 20 62 65 0a 2a   MinGW will be.*
16e0: 2a 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23  * disabled..*/.#
16f0: 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41 56 45  if defined(_HAVE
1700: 5f 4d 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63 6c  _MINGW_H).# incl
1710: 75 64 65 20 22 6d 69 6e 67 77 2e 68 22 0a 23 65  ude "mingw.h".#e
1720: 6c 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41 56  lif defined(_HAV
1730: 45 5f 5f 4d 49 4e 47 57 5f 48 29 0a 23 20 69 6e  E__MINGW_H).# in
1740: 63 6c 75 64 65 20 22 5f 6d 69 6e 67 77 2e 68 22  clude "_mingw.h"
1750: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46  .#endif../*.** F
1760: 6f 72 20 4d 69 6e 47 57 20 76 65 72 73 69 6f 6e  or MinGW version
1770: 20 34 2e 78 20 28 61 6e 64 20 68 69 67 68 65 72   4.x (and higher
1780: 29 2c 20 63 68 65 63 6b 20 74 6f 20 73 65 65 20  ), check to see 
1790: 69 66 20 74 68 65 20 5f 55 53 45 5f 33 32 42 49  if the _USE_32BI
17a0: 54 5f 54 49 4d 45 5f 54 0a 2a 2a 20 64 65 66 69  T_TIME_T.** defi
17b0: 6e 65 20 69 73 20 72 65 71 75 69 72 65 64 20 74  ne is required t
17c0: 6f 20 6d 61 69 6e 74 61 69 6e 20 62 69 6e 61 72  o maintain binar
17d0: 79 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20  y compatibility 
17e0: 77 69 74 68 20 74 68 65 20 4d 53 56 43 20 72 75  with the MSVC ru
17f0: 6e 74 69 6d 65 0a 2a 2a 20 6c 69 62 72 61 72 79  ntime.** library
1800: 20 69 6e 20 75 73 65 20 28 65 2e 67 2e 20 66 6f   in use (e.g. fo
1810: 72 20 57 69 6e 64 6f 77 73 20 58 50 29 2e 0a 2a  r Windows XP)..*
1820: 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f  /.#if !defined(_
1830: 55 53 45 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54  USE_32BIT_TIME_T
1840: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 55  ) && !defined(_U
1850: 53 45 5f 36 34 42 49 54 5f 54 49 4d 45 5f 54 29  SE_64BIT_TIME_T)
1860: 20 26 26 20 5c 0a 20 20 20 20 64 65 66 69 6e 65   && \.    define
1870: 64 28 5f 57 49 4e 33 32 29 20 26 26 20 21 64 65  d(_WIN32) && !de
1880: 66 69 6e 65 64 28 5f 57 49 4e 36 34 29 20 26 26  fined(_WIN64) &&
1890: 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f   \.    defined(_
18a0: 5f 4d 49 4e 47 57 5f 4d 41 4a 4f 52 5f 56 45 52  _MINGW_MAJOR_VER
18b0: 53 49 4f 4e 29 20 26 26 20 5f 5f 4d 49 4e 47 57  SION) && __MINGW
18c0: 5f 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e 20 3e  _MAJOR_VERSION >
18d0: 3d 20 34 20 26 26 20 5c 0a 20 20 20 20 64 65 66  = 4 && \.    def
18e0: 69 6e 65 64 28 5f 5f 4d 53 56 43 52 54 5f 5f 29  ined(__MSVCRT__)
18f0: 0a 23 20 64 65 66 69 6e 65 20 5f 55 53 45 5f 33  .# define _USE_3
1900: 32 42 49 54 5f 54 49 4d 45 5f 54 0a 23 65 6e 64  2BIT_TIME_T.#end
1910: 69 66 0a 0a 2f 2a 20 54 68 65 20 70 75 62 6c 69  if../* The publi
1920: 63 20 53 51 4c 69 74 65 20 69 6e 74 65 72 66 61  c SQLite interfa
1930: 63 65 2e 20 20 54 68 65 20 5f 46 49 4c 45 5f 4f  ce.  The _FILE_O
1940: 46 46 53 45 54 5f 42 49 54 53 20 6d 61 63 72 6f  FFSET_BITS macro
1950: 20 6d 75 73 74 20 61 70 70 65 61 72 0a 2a 2a 20   must appear.** 
1960: 66 69 72 73 74 20 69 6e 20 51 4e 58 2e 20 20 41  first in QNX.  A
1970: 6c 73 6f 2c 20 74 68 65 20 5f 55 53 45 5f 33 32  lso, the _USE_32
1980: 42 49 54 5f 54 49 4d 45 5f 54 20 6d 61 63 72 6f  BIT_TIME_T macro
1990: 20 6d 75 73 74 20 61 70 70 65 61 72 20 66 69 72   must appear fir
19a0: 73 74 20 66 6f 72 0a 2a 2a 20 4d 69 6e 47 57 2e  st for.** MinGW.
19b0: 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73 71  .*/.#include "sq
19c0: 6c 69 74 65 33 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20  lite3.h"../*.** 
19d0: 49 6e 63 6c 75 64 65 20 74 68 65 20 63 6f 6e 66  Include the conf
19e0: 69 67 75 72 61 74 69 6f 6e 20 68 65 61 64 65 72  iguration header
19f0: 20 6f 75 74 70 75 74 20 62 79 20 27 63 6f 6e 66   output by 'conf
1a00: 69 67 75 72 65 27 20 69 66 20 77 65 27 72 65 20  igure' if we're 
1a10: 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 61 75 74  using the.** aut
1a20: 6f 63 6f 6e 66 2d 62 61 73 65 64 20 62 75 69 6c  oconf-based buil
1a30: 64 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 48 41 56  d.*/.#ifdef _HAV
1a40: 45 5f 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f  E_SQLITE_CONFIG_
1a50: 48 0a 23 69 6e 63 6c 75 64 65 20 22 63 6f 6e 66  H.#include "conf
1a60: 69 67 2e 68 22 0a 23 65 6e 64 69 66 0a 0a 23 69  ig.h".#endif..#i
1a70: 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65 4c 69  nclude "sqliteLi
1a80: 6d 69 74 2e 68 22 0a 0a 2f 2a 20 44 69 73 61 62  mit.h"../* Disab
1a90: 6c 65 20 6e 75 69 73 61 6e 63 65 20 77 61 72 6e  le nuisance warn
1aa0: 69 6e 67 73 20 6f 6e 20 42 6f 72 6c 61 6e 64 20  ings on Borland 
1ab0: 63 6f 6d 70 69 6c 65 72 73 20 2a 2f 0a 23 69 66  compilers */.#if
1ac0: 20 64 65 66 69 6e 65 64 28 5f 5f 42 4f 52 4c 41   defined(__BORLA
1ad0: 4e 44 43 5f 5f 29 0a 23 70 72 61 67 6d 61 20 77  NDC__).#pragma w
1ae0: 61 72 6e 20 2d 72 63 68 20 2f 2a 20 75 6e 72 65  arn -rch /* unre
1af0: 61 63 68 61 62 6c 65 20 63 6f 64 65 20 2a 2f 0a  achable code */.
1b00: 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 63 63  #pragma warn -cc
1b10: 63 20 2f 2a 20 43 6f 6e 64 69 74 69 6f 6e 20 69  c /* Condition i
1b20: 73 20 61 6c 77 61 79 73 20 74 72 75 65 20 6f 72  s always true or
1b30: 20 66 61 6c 73 65 20 2a 2f 0a 23 70 72 61 67 6d   false */.#pragm
1b40: 61 20 77 61 72 6e 20 2d 61 75 73 20 2f 2a 20 41  a warn -aus /* A
1b50: 73 73 69 67 6e 65 64 20 76 61 6c 75 65 20 69 73  ssigned value is
1b60: 20 6e 65 76 65 72 20 75 73 65 64 20 2a 2f 0a 23   never used */.#
1b70: 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 63 73 75  pragma warn -csu
1b80: 20 2f 2a 20 43 6f 6d 70 61 72 69 6e 67 20 73 69   /* Comparing si
1b90: 67 6e 65 64 20 61 6e 64 20 75 6e 73 69 67 6e 65  gned and unsigne
1ba0: 64 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72  d */.#pragma war
1bb0: 6e 20 2d 73 70 61 20 2f 2a 20 53 75 73 70 69 63  n -spa /* Suspic
1bc0: 69 6f 75 73 20 70 6f 69 6e 74 65 72 20 61 72 69  ious pointer ari
1bd0: 74 68 6d 65 74 69 63 20 2a 2f 0a 23 65 6e 64 69  thmetic */.#endi
1be0: 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65  f../*.** Include
1bf0: 20 73 74 61 6e 64 61 72 64 20 68 65 61 64 65 72   standard header
1c00: 20 66 69 6c 65 73 20 61 73 20 6e 65 63 65 73 73   files as necess
1c10: 61 72 79 0a 2a 2f 0a 23 69 66 64 65 66 20 48 41  ary.*/.#ifdef HA
1c20: 56 45 5f 53 54 44 49 4e 54 5f 48 0a 23 69 6e 63  VE_STDINT_H.#inc
1c30: 6c 75 64 65 20 3c 73 74 64 69 6e 74 2e 68 3e 0a  lude <stdint.h>.
1c40: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 48 41  #endif.#ifdef HA
1c50: 56 45 5f 49 4e 54 54 59 50 45 53 5f 48 0a 23 69  VE_INTTYPES_H.#i
1c60: 6e 63 6c 75 64 65 20 3c 69 6e 74 74 79 70 65 73  nclude <inttypes
1c70: 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  .h>.#endif../*.*
1c80: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
1c90: 6d 61 63 72 6f 73 20 61 72 65 20 75 73 65 64 20  macros are used 
1ca0: 74 6f 20 63 61 73 74 20 70 6f 69 6e 74 65 72 73  to cast pointers
1cb0: 20 74 6f 20 69 6e 74 65 67 65 72 73 20 61 6e 64   to integers and
1cc0: 0a 2a 2a 20 69 6e 74 65 67 65 72 73 20 74 6f 20  .** integers to 
1cd0: 70 6f 69 6e 74 65 72 73 2e 20 20 54 68 65 20 77  pointers.  The w
1ce0: 61 79 20 79 6f 75 20 64 6f 20 74 68 69 73 20 76  ay you do this v
1cf0: 61 72 69 65 73 20 66 72 6f 6d 20 6f 6e 65 20 63  aries from one c
1d00: 6f 6d 70 69 6c 65 72 0a 2a 2a 20 74 6f 20 74 68  ompiler.** to th
1d10: 65 20 6e 65 78 74 2c 20 73 6f 20 77 65 20 68 61  e next, so we ha
1d20: 76 65 20 64 65 76 65 6c 6f 70 65 64 20 74 68 65  ve developed the
1d30: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 65 74 20 6f   following set o
1d40: 66 20 23 69 66 20 73 74 61 74 65 6d 65 6e 74 73  f #if statements
1d50: 0a 2a 2a 20 74 6f 20 67 65 6e 65 72 61 74 65 20  .** to generate 
1d60: 61 70 70 72 6f 70 72 69 61 74 65 20 6d 61 63 72  appropriate macr
1d70: 6f 73 20 66 6f 72 20 61 20 77 69 64 65 20 72 61  os for a wide ra
1d80: 6e 67 65 20 6f 66 20 63 6f 6d 70 69 6c 65 72 73  nge of compilers
1d90: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 72 72  ..**.** The corr
1da0: 65 63 74 20 22 41 4e 53 49 22 20 77 61 79 20 74  ect "ANSI" way t
1db0: 6f 20 64 6f 20 74 68 69 73 20 69 73 20 74 6f 20  o do this is to 
1dc0: 75 73 65 20 74 68 65 20 69 6e 74 70 74 72 5f 74  use the intptr_t
1dd0: 20 74 79 70 65 2e 0a 2a 2a 20 55 6e 66 6f 72 74   type..** Unfort
1de0: 75 6e 61 74 65 6c 79 2c 20 74 68 61 74 20 74 79  unately, that ty
1df0: 70 65 64 65 66 20 69 73 20 6e 6f 74 20 61 76 61  pedef is not ava
1e00: 69 6c 61 62 6c 65 20 6f 6e 20 61 6c 6c 20 63 6f  ilable on all co
1e10: 6d 70 69 6c 65 72 73 2c 20 6f 72 0a 2a 2a 20 69  mpilers, or.** i
1e20: 66 20 69 74 20 69 73 20 61 76 61 69 6c 61 62 6c  f it is availabl
1e30: 65 2c 20 69 74 20 72 65 71 75 69 72 65 73 20 61  e, it requires a
1e40: 6e 20 23 69 6e 63 6c 75 64 65 20 6f 66 20 73 70  n #include of sp
1e50: 65 63 69 66 69 63 20 68 65 61 64 65 72 73 0a 2a  ecific headers.*
1e60: 2a 20 74 68 61 74 20 76 61 72 79 20 66 72 6f 6d  * that vary from
1e70: 20 6f 6e 65 20 6d 61 63 68 69 6e 65 20 74 6f 20   one machine to 
1e80: 74 68 65 20 6e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20  the next..**.** 
1e90: 54 69 63 6b 65 74 20 23 33 38 36 30 3a 20 20 54  Ticket #3860:  T
1ea0: 68 65 20 6c 6c 76 6d 2d 67 63 63 2d 34 2e 32 20  he llvm-gcc-4.2 
1eb0: 63 6f 6d 70 69 6c 65 72 20 66 72 6f 6d 20 41 70  compiler from Ap
1ec0: 70 6c 65 20 63 68 6f 6b 65 73 20 6f 6e 0a 2a 2a  ple chokes on.**
1ed0: 20 74 68 65 20 28 28 76 6f 69 64 2a 29 26 28 28   the ((void*)&((
1ee0: 63 68 61 72 2a 29 30 29 5b 58 5d 29 20 63 6f 6e  char*)0)[X]) con
1ef0: 73 74 72 75 63 74 2e 20 20 42 75 74 20 4d 53 56  struct.  But MSV
1f00: 43 20 63 68 6f 6b 65 73 20 6f 6e 20 28 28 76 6f  C chokes on ((vo
1f10: 69 64 2a 29 28 58 29 29 2e 0a 2a 2a 20 53 6f 20  id*)(X))..** So 
1f20: 77 65 20 68 61 76 65 20 74 6f 20 64 65 66 69 6e  we have to defin
1f30: 65 20 74 68 65 20 6d 61 63 72 6f 73 20 69 6e 20  e the macros in 
1f40: 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20 64  different ways d
1f50: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 0a  epending on the.
1f60: 2a 2a 20 63 6f 6d 70 69 6c 65 72 2e 0a 2a 2f 0a  ** compiler..*/.
1f70: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 50 54  #if defined(__PT
1f80: 52 44 49 46 46 5f 54 59 50 45 5f 5f 29 20 20 2f  RDIFF_TYPE__)  /
1f90: 2a 20 54 68 69 73 20 63 61 73 65 20 73 68 6f 75  * This case shou
1fa0: 6c 64 20 77 6f 72 6b 20 66 6f 72 20 47 43 43 20  ld work for GCC 
1fb0: 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  */.# define SQLI
1fc0: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29  TE_INT_TO_PTR(X)
1fd0: 20 20 28 28 76 6f 69 64 2a 29 28 5f 5f 50 54 52    ((void*)(__PTR
1fe0: 44 49 46 46 5f 54 59 50 45 5f 5f 29 28 58 29 29  DIFF_TYPE__)(X))
1ff0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
2000: 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20  _PTR_TO_INT(X)  
2010: 28 28 69 6e 74 29 28 5f 5f 50 54 52 44 49 46 46  ((int)(__PTRDIFF
2020: 5f 54 59 50 45 5f 5f 29 28 58 29 29 0a 23 65 6c  _TYPE__)(X)).#el
2030: 69 66 20 21 64 65 66 69 6e 65 64 28 5f 5f 47 4e  if !defined(__GN
2040: 55 43 5f 5f 29 20 20 20 20 20 20 20 2f 2a 20 57  UC__)       /* W
2050: 6f 72 6b 73 20 66 6f 72 20 63 6f 6d 70 69 6c 65  orks for compile
2060: 72 73 20 6f 74 68 65 72 20 74 68 61 6e 20 4c 4c  rs other than LL
2070: 56 4d 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53  VM */.# define S
2080: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
2090: 28 58 29 20 20 28 28 76 6f 69 64 2a 29 26 28 28  (X)  ((void*)&((
20a0: 63 68 61 72 2a 29 30 29 5b 58 5d 29 0a 23 20 64  char*)0)[X]).# d
20b0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
20c0: 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e  _TO_INT(X)  ((in
20d0: 74 29 28 28 28 63 68 61 72 2a 29 58 29 2d 28 63  t)(((char*)X)-(c
20e0: 68 61 72 2a 29 30 29 29 0a 23 65 6c 69 66 20 64  har*)0)).#elif d
20f0: 65 66 69 6e 65 64 28 48 41 56 45 5f 53 54 44 49  efined(HAVE_STDI
2100: 4e 54 5f 48 29 20 20 20 2f 2a 20 55 73 65 20 74  NT_H)   /* Use t
2110: 68 69 73 20 63 61 73 65 20 69 66 20 77 65 20 68  his case if we h
2120: 61 76 65 20 41 4e 53 49 20 68 65 61 64 65 72 73  ave ANSI headers
2130: 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c   */.# define SQL
2140: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58  ITE_INT_TO_PTR(X
2150: 29 20 20 28 28 76 6f 69 64 2a 29 28 69 6e 74 70  )  ((void*)(intp
2160: 74 72 5f 74 29 28 58 29 29 0a 23 20 64 65 66 69  tr_t)(X)).# defi
2170: 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f  ne SQLITE_PTR_TO
2180: 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28  _INT(X)  ((int)(
2190: 69 6e 74 70 74 72 5f 74 29 28 58 29 29 0a 23 65  intptr_t)(X)).#e
21a0: 6c 73 65 20 20 20 20 20 20 20 20 20 20 20 20 20  lse             
21b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
21c0: 47 65 6e 65 72 61 74 65 73 20 61 20 77 61 72 6e  Generates a warn
21d0: 69 6e 67 20 2d 20 62 75 74 20 69 74 20 61 6c 77  ing - but it alw
21e0: 61 79 73 20 77 6f 72 6b 73 20 2a 2f 0a 23 20 64  ays works */.# d
21f0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54  efine SQLITE_INT
2200: 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f  _TO_PTR(X)  ((vo
2210: 69 64 2a 29 28 58 29 29 0a 23 20 64 65 66 69 6e  id*)(X)).# defin
2220: 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f  e SQLITE_PTR_TO_
2230: 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 58  INT(X)  ((int)(X
2240: 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  )).#endif../*.**
2250: 20 41 20 6d 61 63 72 6f 20 74 6f 20 68 69 6e 74   A macro to hint
2260: 20 74 6f 20 74 68 65 20 63 6f 6d 70 69 6c 65 72   to the compiler
2270: 20 74 68 61 74 20 61 20 66 75 6e 63 74 69 6f 6e   that a function
2280: 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 0a 2a   should not be.*
2290: 2a 20 69 6e 6c 69 6e 65 64 2e 0a 2a 2f 0a 23 69  * inlined..*/.#i
22a0: 66 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43  f defined(__GNUC
22b0: 5f 5f 29 0a 23 20 20 64 65 66 69 6e 65 20 53 51  __).#  define SQ
22c0: 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20 5f  LITE_NOINLINE  _
22d0: 5f 61 74 74 72 69 62 75 74 65 5f 5f 28 28 6e 6f  _attribute__((no
22e0: 69 6e 6c 69 6e 65 29 29 0a 23 65 6c 69 66 20 64  inline)).#elif d
22f0: 65 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29  efined(_MSC_VER)
2300: 20 26 26 20 5f 4d 53 43 5f 56 45 52 3e 3d 31 33   && _MSC_VER>=13
2310: 31 30 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c  10.#  define SQL
2320: 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20 5f 5f  ITE_NOINLINE  __
2330: 64 65 63 6c 73 70 65 63 28 6e 6f 69 6e 6c 69 6e  declspec(noinlin
2340: 65 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69  e).#else.#  defi
2350: 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49  ne SQLITE_NOINLI
2360: 4e 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  NE.#endif../*.**
2370: 20 4d 61 6b 65 20 73 75 72 65 20 74 68 61 74 20   Make sure that 
2380: 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 69 6e 74  the compiler int
2390: 72 69 6e 73 69 63 73 20 77 65 20 64 65 73 69 72  rinsics we desir
23a0: 65 20 61 72 65 20 65 6e 61 62 6c 65 64 20 77 68  e are enabled wh
23b0: 65 6e 0a 2a 2a 20 63 6f 6d 70 69 6c 69 6e 67 20  en.** compiling 
23c0: 77 69 74 68 20 61 6e 20 61 70 70 72 6f 70 72 69  with an appropri
23d0: 61 74 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 4d  ate version of M
23e0: 53 56 43 20 75 6e 6c 65 73 73 20 70 72 65 76 65  SVC unless preve
23f0: 6e 74 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 53  nted by.** the S
2400: 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e  QLITE_DISABLE_IN
2410: 54 52 49 4e 53 49 43 20 64 65 66 69 6e 65 2e 0a  TRINSIC define..
2420: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
2430: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 49  SQLITE_DISABLE_I
2440: 4e 54 52 49 4e 53 49 43 29 0a 23 20 20 69 66 20  NTRINSIC).#  if 
2450: 64 65 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52  defined(_MSC_VER
2460: 29 20 26 26 20 5f 4d 53 43 5f 56 45 52 3e 3d 31  ) && _MSC_VER>=1
2470: 34 30 30 0a 23 20 20 20 20 69 66 20 21 64 65 66  400.#    if !def
2480: 69 6e 65 64 28 5f 57 49 4e 33 32 5f 57 43 45 29  ined(_WIN32_WCE)
2490: 0a 23 20 20 20 20 20 20 69 6e 63 6c 75 64 65 20  .#      include 
24a0: 3c 69 6e 74 72 69 6e 2e 68 3e 0a 23 20 20 20 20  <intrin.h>.#    
24b0: 20 20 70 72 61 67 6d 61 20 69 6e 74 72 69 6e 73    pragma intrins
24c0: 69 63 28 5f 62 79 74 65 73 77 61 70 5f 75 73 68  ic(_byteswap_ush
24d0: 6f 72 74 29 0a 23 20 20 20 20 20 20 70 72 61 67  ort).#      prag
24e0: 6d 61 20 69 6e 74 72 69 6e 73 69 63 28 5f 62 79  ma intrinsic(_by
24f0: 74 65 73 77 61 70 5f 75 6c 6f 6e 67 29 0a 23 20  teswap_ulong).# 
2500: 20 20 20 20 20 70 72 61 67 6d 61 20 69 6e 74 72       pragma intr
2510: 69 6e 73 69 63 28 5f 62 79 74 65 73 77 61 70 5f  insic(_byteswap_
2520: 75 69 6e 74 36 34 29 0a 23 20 20 20 20 20 20 70  uint64).#      p
2530: 72 61 67 6d 61 20 69 6e 74 72 69 6e 73 69 63 28  ragma intrinsic(
2540: 5f 52 65 61 64 57 72 69 74 65 42 61 72 72 69 65  _ReadWriteBarrie
2550: 72 29 0a 23 20 20 20 20 65 6c 73 65 0a 23 20 20  r).#    else.#  
2560: 20 20 20 20 69 6e 63 6c 75 64 65 20 3c 63 6d 6e      include <cmn
2570: 69 6e 74 72 69 6e 2e 68 3e 0a 23 20 20 20 20 65  intrin.h>.#    e
2580: 6e 64 69 66 0a 23 20 20 65 6e 64 69 66 0a 23 65  ndif.#  endif.#e
2590: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
25a0: 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46  SQLITE_THREADSAF
25b0: 45 20 6d 61 63 72 6f 20 6d 75 73 74 20 62 65 20  E macro must be 
25c0: 64 65 66 69 6e 65 64 20 61 73 20 30 2c 20 31 2c  defined as 0, 1,
25d0: 20 6f 72 20 32 2e 0a 2a 2a 20 30 20 6d 65 61 6e   or 2..** 0 mean
25e0: 73 20 6d 75 74 65 78 65 73 20 61 72 65 20 70 65  s mutexes are pe
25f0: 72 6d 61 6e 65 6e 74 6c 79 20 64 69 73 61 62 6c  rmanently disabl
2600: 65 20 61 6e 64 20 74 68 65 20 6c 69 62 72 61 72  e and the librar
2610: 79 20 69 73 20 6e 65 76 65 72 0a 2a 2a 20 74 68  y is never.** th
2620: 72 65 61 64 73 61 66 65 2e 20 20 31 20 6d 65 61  readsafe.  1 mea
2630: 6e 73 20 74 68 65 20 6c 69 62 72 61 72 79 20 69  ns the library i
2640: 73 20 73 65 72 69 61 6c 69 7a 65 64 20 77 68 69  s serialized whi
2650: 63 68 20 69 73 20 74 68 65 20 68 69 67 68 65 73  ch is the highes
2660: 74 0a 2a 2a 20 6c 65 76 65 6c 20 6f 66 20 74 68  t.** level of th
2670: 72 65 61 64 73 61 66 65 74 79 2e 20 20 32 20 6d  readsafety.  2 m
2680: 65 61 6e 73 20 74 68 65 20 6c 69 62 72 61 72 79  eans the library
2690: 20 69 73 20 6d 75 6c 74 69 74 68 72 65 61 64 65   is multithreade
26a0: 64 20 2d 20 6d 75 6c 74 69 70 6c 65 0a 2a 2a 20  d - multiple.** 
26b0: 74 68 72 65 61 64 73 20 63 61 6e 20 75 73 65 20  threads can use 
26c0: 53 51 4c 69 74 65 20 61 73 20 6c 6f 6e 67 20 61  SQLite as long a
26d0: 73 20 6e 6f 20 74 77 6f 20 74 68 72 65 61 64 73  s no two threads
26e0: 20 74 72 79 20 74 6f 20 75 73 65 20 74 68 65 20   try to use the 
26f0: 73 61 6d 65 0a 2a 2a 20 64 61 74 61 62 61 73 65  same.** database
2700: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 74 20 74   connection at t
2710: 68 65 20 73 61 6d 65 20 74 69 6d 65 2e 0a 2a 2a  he same time..**
2720: 0a 2a 2a 20 4f 6c 64 65 72 20 76 65 72 73 69 6f  .** Older versio
2730: 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 75 73 65  ns of SQLite use
2740: 64 20 61 6e 20 6f 70 74 69 6f 6e 61 6c 20 54 48  d an optional TH
2750: 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f 2e 0a  READSAFE macro..
2760: 2a 2a 20 57 65 20 73 75 70 70 6f 72 74 20 74 68  ** We support th
2770: 61 74 20 66 6f 72 20 6c 65 67 61 63 79 2e 0a 2a  at for legacy..*
2780: 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  /.#if !defined(S
2790: 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45  QLITE_THREADSAFE
27a0: 29 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28 54  ).# if defined(T
27b0: 48 52 45 41 44 53 41 46 45 29 0a 23 20 20 20 64  HREADSAFE).#   d
27c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 48 52  efine SQLITE_THR
27d0: 45 41 44 53 41 46 45 20 54 48 52 45 41 44 53 41  EADSAFE THREADSA
27e0: 46 45 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65  FE.# else.#   de
27f0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 48 52 45  fine SQLITE_THRE
2800: 41 44 53 41 46 45 20 31 20 2f 2a 20 49 4d 50 3a  ADSAFE 1 /* IMP:
2810: 20 52 2d 30 37 32 37 32 2d 32 32 33 30 39 20 2a   R-07272-22309 *
2820: 2f 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  /.# endif.#endif
2830: 0a 0a 2f 2a 0a 2a 2a 20 50 6f 77 65 72 73 61 66  ../*.** Powersaf
2840: 65 20 6f 76 65 72 77 72 69 74 65 20 69 73 20 6f  e overwrite is o
2850: 6e 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20 42  n by default.  B
2860: 75 74 20 63 61 6e 20 62 65 20 74 75 72 6e 65 64  ut can be turned
2870: 20 6f 66 66 20 75 73 69 6e 67 0a 2a 2a 20 74 68   off using.** th
2880: 65 20 2d 44 53 51 4c 49 54 45 5f 50 4f 57 45 52  e -DSQLITE_POWER
2890: 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45 3d 30  SAFE_OVERWRITE=0
28a0: 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f 70   command-line op
28b0: 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  tion..*/.#ifndef
28c0: 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46   SQLITE_POWERSAF
28d0: 45 5f 4f 56 45 52 57 52 49 54 45 0a 23 20 64 65  E_OVERWRITE.# de
28e0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 4f 57 45  fine SQLITE_POWE
28f0: 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45 20  RSAFE_OVERWRITE 
2900: 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
2910: 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32  EVIDENCE-OF: R-2
2920: 35 37 31 35 2d 33 37 30 37 32 20 4d 65 6d 6f 72  5715-37072 Memor
2930: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61  y allocation sta
2940: 74 69 73 74 69 63 73 20 61 72 65 20 65 6e 61 62  tistics are enab
2950: 6c 65 64 20 62 79 0a 2a 2a 20 64 65 66 61 75 6c  led by.** defaul
2960: 74 20 75 6e 6c 65 73 73 20 53 51 4c 69 74 65 20  t unless SQLite 
2970: 69 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68  is compiled with
2980: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
2990: 4d 45 4d 53 54 41 54 55 53 3d 30 20 69 6e 0a 2a  MEMSTATUS=0 in.*
29a0: 2a 20 77 68 69 63 68 20 63 61 73 65 20 6d 65 6d  * which case mem
29b0: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73  ory allocation s
29c0: 74 61 74 69 73 74 69 63 73 20 61 72 65 20 64 69  tatistics are di
29d0: 73 61 62 6c 65 64 20 62 79 20 64 65 66 61 75 6c  sabled by defaul
29e0: 74 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  t..*/.#if !defin
29f0: 65 64 28 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ed(SQLITE_DEFAUL
2a00: 54 5f 4d 45 4d 53 54 41 54 55 53 29 0a 23 20 64  T_MEMSTATUS).# d
2a10: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
2a20: 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 20 31  AULT_MEMSTATUS 1
2a30: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45  .#endif../*.** E
2a40: 78 61 63 74 6c 79 20 6f 6e 65 20 6f 66 20 74 68  xactly one of th
2a50: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
2a60: 6f 73 20 6d 75 73 74 20 62 65 20 64 65 66 69 6e  os must be defin
2a70: 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a  ed in order to.*
2a80: 2a 20 73 70 65 63 69 66 79 20 77 68 69 63 68 20  * specify which 
2a90: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
2aa0: 6e 20 73 75 62 73 79 73 74 65 6d 20 74 6f 20 75  n subsystem to u
2ab0: 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 51  se..**.**     SQ
2ac0: 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c  LITE_SYSTEM_MALL
2ad0: 4f 43 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55  OC          // U
2ae0: 73 65 20 6e 6f 72 6d 61 6c 20 73 79 73 74 65 6d  se normal system
2af0: 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20 20   malloc().**    
2b00: 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41   SQLITE_WIN32_MA
2b10: 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20 20 2f  LLOC           /
2b20: 2f 20 55 73 65 20 57 69 6e 33 32 20 6e 61 74 69  / Use Win32 nati
2b30: 76 65 20 68 65 61 70 20 41 50 49 0a 2a 2a 20 20  ve heap API.**  
2b40: 20 20 20 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d     SQLITE_ZERO_M
2b50: 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20 20  ALLOC           
2b60: 20 2f 2f 20 55 73 65 20 61 20 73 74 75 62 20 61   // Use a stub a
2b70: 6c 6c 6f 63 61 74 6f 72 20 74 68 61 74 20 61 6c  llocator that al
2b80: 77 61 79 73 20 66 61 69 6c 73 0a 2a 2a 20 20 20  ways fails.**   
2b90: 20 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55    SQLITE_MEMDEBU
2ba0: 47 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  G               
2bb0: 2f 2f 20 44 65 62 75 67 67 69 6e 67 20 76 65 72  // Debugging ver
2bc0: 73 69 6f 6e 20 6f 66 20 73 79 73 74 65 6d 20 6d  sion of system m
2bd0: 61 6c 6c 6f 63 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e  alloc().**.** On
2be0: 20 57 69 6e 64 6f 77 73 2c 20 69 66 20 74 68 65   Windows, if the
2bf0: 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41   SQLITE_WIN32_MA
2c00: 4c 4c 4f 43 5f 56 41 4c 49 44 41 54 45 20 6d 61  LLOC_VALIDATE ma
2c10: 63 72 6f 20 69 73 20 64 65 66 69 6e 65 64 20 61  cro is defined a
2c20: 6e 64 20 74 68 65 0a 2a 2a 20 61 73 73 65 72 74  nd the.** assert
2c30: 28 29 20 6d 61 63 72 6f 20 69 73 20 65 6e 61 62  () macro is enab
2c40: 6c 65 64 2c 20 65 61 63 68 20 63 61 6c 6c 20 69  led, each call i
2c50: 6e 74 6f 20 74 68 65 20 57 69 6e 33 32 20 6e 61  nto the Win32 na
2c60: 74 69 76 65 20 68 65 61 70 20 73 75 62 73 79 73  tive heap subsys
2c70: 74 65 6d 0a 2a 2a 20 77 69 6c 6c 20 63 61 75 73  tem.** will caus
2c80: 65 20 48 65 61 70 56 61 6c 69 64 61 74 65 20 74  e HeapValidate t
2c90: 6f 20 62 65 20 63 61 6c 6c 65 64 2e 20 20 49 66  o be called.  If
2ca0: 20 68 65 61 70 20 76 61 6c 69 64 61 74 69 6f 6e   heap validation
2cb0: 20 73 68 6f 75 6c 64 20 66 61 69 6c 2c 20 61 6e   should fail, an
2cc0: 0a 2a 2a 20 61 73 73 65 72 74 69 6f 6e 20 77 69  .** assertion wi
2cd0: 6c 6c 20 62 65 20 74 72 69 67 67 65 72 65 64 2e  ll be triggered.
2ce0: 0a 2a 2a 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f  .**.** If none o
2cf0: 66 20 74 68 65 20 61 62 6f 76 65 20 61 72 65 20  f the above are 
2d00: 64 65 66 69 6e 65 64 2c 20 74 68 65 6e 20 73 65  defined, then se
2d10: 74 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  t SQLITE_SYSTEM_
2d20: 4d 41 4c 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65  MALLOC as.** the
2d30: 20 64 65 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66   default..*/.#if
2d40: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2d50: 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c  SYSTEM_MALLOC) \
2d60: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
2d70: 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43  ITE_WIN32_MALLOC
2d80: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
2d90: 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c  SQLITE_ZERO_MALL
2da0: 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65  OC) \.  + define
2db0: 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  d(SQLITE_MEMDEBU
2dc0: 47 29 3e 31 0a 23 20 65 72 72 6f 72 20 22 54 77  G)>1.# error "Tw
2dd0: 6f 20 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68 65  o or more of the
2de0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 69   following compi
2df0: 6c 65 2d 74 69 6d 65 20 63 6f 6e 66 69 67 75 72  le-time configur
2e00: 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20  ation options\. 
2e10: 61 72 65 20 64 65 66 69 6e 65 64 20 62 75 74 20  are defined but 
2e20: 61 74 20 6d 6f 73 74 20 6f 6e 65 20 69 73 20 61  at most one is a
2e30: 6c 6c 6f 77 65 64 3a 5c 0a 20 53 51 4c 49 54 45  llowed:\. SQLITE
2e40: 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20  _SYSTEM_MALLOC, 
2e50: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c  SQLITE_WIN32_MAL
2e60: 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 4d 45 4d 44  LOC, SQLITE_MEMD
2e70: 45 42 55 47 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a  EBUG,\. SQLITE_Z
2e80: 45 52 4f 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64  ERO_MALLOC".#end
2e90: 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  if.#if defined(S
2ea0: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
2eb0: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
2ec0: 65 64 28 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f  ed(SQLITE_WIN32_
2ed0: 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65  MALLOC) \.  + de
2ee0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 5a 45 52  fined(SQLITE_ZER
2ef0: 4f 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20  O_MALLOC) \.  + 
2f00: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d  defined(SQLITE_M
2f10: 45 4d 44 45 42 55 47 29 3d 3d 30 0a 23 20 64 65  EMDEBUG)==0.# de
2f20: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 59 53 54  fine SQLITE_SYST
2f30: 45 4d 5f 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64  EM_MALLOC 1.#end
2f40: 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c  if../*.** If SQL
2f50: 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f  ITE_MALLOC_SOFT_
2f60: 4c 49 4d 49 54 20 69 73 20 6e 6f 74 20 7a 65 72  LIMIT is not zer
2f70: 6f 2c 20 74 68 65 6e 20 74 72 79 20 74 6f 20 6b  o, then try to k
2f80: 65 65 70 20 74 68 65 0a 2a 2a 20 73 69 7a 65 73  eep the.** sizes
2f90: 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63   of memory alloc
2fa0: 61 74 69 6f 6e 73 20 62 65 6c 6f 77 20 74 68 69  ations below thi
2fb0: 73 20 76 61 6c 75 65 20 77 68 65 72 65 20 70 6f  s value where po
2fc0: 73 73 69 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21  ssible..*/.#if !
2fd0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d  defined(SQLITE_M
2fe0: 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54  ALLOC_SOFT_LIMIT
2ff0: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
3000: 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49  E_MALLOC_SOFT_LI
3010: 4d 49 54 20 31 30 32 34 0a 23 65 6e 64 69 66 0a  MIT 1024.#endif.
3020: 0a 2f 2a 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74  ./*.** We need t
3030: 6f 20 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f  o define _XOPEN_
3040: 53 4f 55 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77  SOURCE as follow
3050: 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e  s in order to en
3060: 61 62 6c 65 0a 2a 2a 20 72 65 63 75 72 73 69 76  able.** recursiv
3070: 65 20 6d 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73  e mutexes on mos
3080: 74 20 55 6e 69 78 20 73 79 73 74 65 6d 73 20 61  t Unix systems a
3090: 6e 64 20 66 63 68 6d 6f 64 28 29 20 6f 6e 20 4f  nd fchmod() on O
30a0: 70 65 6e 42 53 44 2e 0a 2a 2a 20 42 75 74 20 5f  penBSD..** But _
30b0: 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 64 65 66  XOPEN_SOURCE def
30c0: 69 6e 65 20 63 61 75 73 65 73 20 70 72 6f 62 6c  ine causes probl
30d0: 65 6d 73 20 66 6f 72 20 4d 61 63 20 4f 53 20 58  ems for Mac OS X
30e0: 2c 20 73 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74 2e  , so omit.** it.
30f0: 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
3100: 28 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 29 20  (_XOPEN_SOURCE) 
3110: 26 26 20 21 64 65 66 69 6e 65 64 28 5f 5f 44 41  && !defined(__DA
3120: 52 57 49 4e 5f 5f 29 20 26 26 20 21 64 65 66 69  RWIN__) && !defi
3130: 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 23  ned(__APPLE__).#
3140: 20 20 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f    define _XOPEN_
3150: 53 4f 55 52 43 45 20 36 30 30 0a 23 65 6e 64 69  SOURCE 600.#endi
3160: 66 0a 0a 2f 2a 0a 2a 2a 20 4e 44 45 42 55 47 20  f../*.** NDEBUG 
3170: 61 6e 64 20 53 51 4c 49 54 45 5f 44 45 42 55 47  and SQLITE_DEBUG
3180: 20 61 72 65 20 6f 70 70 6f 73 69 74 65 73 2e 20   are opposites. 
3190: 20 49 74 20 73 68 6f 75 6c 64 20 61 6c 77 61 79   It should alway
31a0: 73 20 62 65 20 74 72 75 65 20 74 68 61 74 0a 2a  s be true that.*
31b0: 2a 20 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47  * defined(NDEBUG
31c0: 29 3d 3d 21 64 65 66 69 6e 65 64 28 53 51 4c 49  )==!defined(SQLI
31d0: 54 45 5f 44 45 42 55 47 29 2e 20 20 49 66 20 74  TE_DEBUG).  If t
31e0: 68 69 73 20 69 73 20 6e 6f 74 20 63 75 72 72 65  his is not curre
31f0: 6e 74 6c 79 20 74 72 75 65 2c 0a 2a 2a 20 6d 61  ntly true,.** ma
3200: 6b 65 20 69 74 20 74 72 75 65 20 62 79 20 64 65  ke it true by de
3210: 66 69 6e 69 6e 67 20 6f 72 20 75 6e 64 65 66 69  fining or undefi
3220: 6e 69 6e 67 20 4e 44 45 42 55 47 2e 0a 2a 2a 0a  ning NDEBUG..**.
3230: 2a 2a 20 53 65 74 74 69 6e 67 20 4e 44 45 42 55  ** Setting NDEBU
3240: 47 20 6d 61 6b 65 73 20 74 68 65 20 63 6f 64 65  G makes the code
3250: 20 73 6d 61 6c 6c 65 72 20 61 6e 64 20 66 61 73   smaller and fas
3260: 74 65 72 20 62 79 20 64 69 73 61 62 6c 69 6e 67  ter by disabling
3270: 20 74 68 65 0a 2a 2a 20 61 73 73 65 72 74 28 29   the.** assert()
3280: 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74   statements in t
3290: 68 65 20 63 6f 64 65 2e 20 20 53 6f 20 77 65 20  he code.  So we 
32a0: 77 61 6e 74 20 74 68 65 20 64 65 66 61 75 6c 74  want the default
32b0: 20 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65   action.** to be
32c0: 20 66 6f 72 20 4e 44 45 42 55 47 20 74 6f 20 62   for NDEBUG to b
32d0: 65 20 73 65 74 20 61 6e 64 20 4e 44 45 42 55 47  e set and NDEBUG
32e0: 20 74 6f 20 62 65 20 75 6e 64 65 66 69 6e 65 64   to be undefined
32f0: 20 6f 6e 6c 79 20 69 66 20 53 51 4c 49 54 45 5f   only if SQLITE_
3300: 44 45 42 55 47 0a 2a 2a 20 69 73 20 73 65 74 2e  DEBUG.** is set.
3310: 20 20 54 68 75 73 20 4e 44 45 42 55 47 20 62 65    Thus NDEBUG be
3320: 63 6f 6d 65 73 20 61 6e 20 6f 70 74 2d 69 6e 20  comes an opt-in 
3330: 72 61 74 68 65 72 20 74 68 61 6e 20 61 6e 20 6f  rather than an o
3340: 70 74 2d 6f 75 74 0a 2a 2a 20 66 65 61 74 75 72  pt-out.** featur
3350: 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  e..*/.#if !defin
3360: 65 64 28 4e 44 45 42 55 47 29 20 26 26 20 21 64  ed(NDEBUG) && !d
3370: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
3380: 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 4e 44  BUG).# define ND
3390: 45 42 55 47 20 31 0a 23 65 6e 64 69 66 0a 23 69  EBUG 1.#endif.#i
33a0: 66 20 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47  f defined(NDEBUG
33b0: 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c  ) && defined(SQL
33c0: 49 54 45 5f 44 45 42 55 47 29 0a 23 20 75 6e 64  ITE_DEBUG).# und
33d0: 65 66 20 4e 44 45 42 55 47 0a 23 65 6e 64 69 66  ef NDEBUG.#endif
33e0: 0a 0a 2f 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20 53  ../*.** Enable S
33f0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50  QLITE_ENABLE_EXP
3400: 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69 66  LAIN_COMMENTS if
3410: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 69 73   SQLITE_DEBUG is
3420: 20 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23   turned on..*/.#
3430: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
3440: 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49  TE_ENABLE_EXPLAI
3450: 4e 5f 43 4f 4d 4d 45 4e 54 53 29 20 26 26 20 64  N_COMMENTS) && d
3460: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
3470: 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 53 51  BUG).# define SQ
3480: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c  LITE_ENABLE_EXPL
3490: 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 31 0a 23  AIN_COMMENTS 1.#
34a0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
34b0: 20 74 65 73 74 63 61 73 65 28 29 20 6d 61 63 72   testcase() macr
34c0: 6f 20 69 73 20 75 73 65 64 20 74 6f 20 61 69 64  o is used to aid
34d0: 20 69 6e 20 63 6f 76 65 72 61 67 65 20 74 65 73   in coverage tes
34e0: 74 69 6e 67 2e 20 20 57 68 65 6e 0a 2a 2a 20 64  ting.  When.** d
34f0: 6f 69 6e 67 20 63 6f 76 65 72 61 67 65 20 74 65  oing coverage te
3500: 73 74 69 6e 67 2c 20 74 68 65 20 63 6f 6e 64 69  sting, the condi
3510: 74 69 6f 6e 20 69 6e 73 69 64 65 20 74 68 65 20  tion inside the 
3520: 61 72 67 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20 74  argument to.** t
3530: 65 73 74 63 61 73 65 28 29 20 6d 75 73 74 20 62  estcase() must b
3540: 65 20 65 76 61 6c 75 61 74 65 64 20 62 6f 74 68  e evaluated both
3550: 20 74 72 75 65 20 61 6e 64 20 66 61 6c 73 65 20   true and false 
3560: 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67  in order to.** g
3570: 65 74 20 66 75 6c 6c 20 62 72 61 6e 63 68 20 63  et full branch c
3580: 6f 76 65 72 61 67 65 2e 20 20 54 68 65 20 74 65  overage.  The te
3590: 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f 20 69  stcase() macro i
35a0: 73 20 69 6e 73 65 72 74 65 64 0a 2a 2a 20 74 6f  s inserted.** to
35b0: 20 68 65 6c 70 20 65 6e 73 75 72 65 20 61 64 65   help ensure ade
35c0: 71 75 61 74 65 20 74 65 73 74 20 63 6f 76 65 72  quate test cover
35d0: 61 67 65 20 69 6e 20 70 6c 61 63 65 73 20 77 68  age in places wh
35e0: 65 72 65 20 73 69 6d 70 6c 65 0a 2a 2a 20 63 6f  ere simple.** co
35f0: 6e 64 69 74 69 6f 6e 2f 64 65 63 69 73 69 6f 6e  ndition/decision
3600: 20 63 6f 76 65 72 61 67 65 20 69 73 20 69 6e 61   coverage is ina
3610: 64 65 71 75 61 74 65 2e 20 20 46 6f 72 20 65 78  dequate.  For ex
3620: 61 6d 70 6c 65 2c 20 74 65 73 74 63 61 73 65 28  ample, testcase(
3630: 29 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64  ).** can be used
3640: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 62 6f   to make sure bo
3650: 75 6e 64 61 72 79 20 76 61 6c 75 65 73 20 61 72  undary values ar
3660: 65 20 74 65 73 74 65 64 2e 20 20 46 6f 72 0a 2a  e tested.  For.*
3670: 2a 20 62 69 74 6d 61 73 6b 20 74 65 73 74 73 2c  * bitmask tests,
3680: 20 74 65 73 74 63 61 73 65 28 29 20 63 61 6e 20   testcase() can 
3690: 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20  be used to make 
36a0: 73 75 72 65 20 65 61 63 68 20 62 69 74 0a 2a 2a  sure each bit.**
36b0: 20 69 73 20 73 69 67 6e 69 66 69 63 61 6e 74 20   is significant 
36c0: 61 6e 64 20 75 73 65 64 20 61 74 20 6c 65 61 73  and used at leas
36d0: 74 20 6f 6e 63 65 2e 20 20 4f 6e 20 73 77 69 74  t once.  On swit
36e0: 63 68 20 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a  ch statements.**
36f0: 20 77 68 65 72 65 20 6d 75 6c 74 69 70 6c 65 20   where multiple 
3700: 63 61 73 65 73 20 67 6f 20 74 6f 20 74 68 65 20  cases go to the 
3710: 73 61 6d 65 20 62 6c 6f 63 6b 20 6f 66 20 63 6f  same block of co
3720: 64 65 2c 20 74 65 73 74 63 61 73 65 28 29 0a 2a  de, testcase().*
3730: 2a 20 63 61 6e 20 69 6e 73 75 72 65 20 74 68 61  * can insure tha
3740: 74 20 61 6c 6c 20 63 61 73 65 73 20 61 72 65 20  t all cases are 
3750: 65 76 61 6c 75 61 74 65 64 2e 0a 2a 2a 0a 2a 2f  evaluated..**.*/
3760: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 43  .#ifdef SQLITE_C
3770: 4f 56 45 52 41 47 45 5f 54 45 53 54 0a 20 20 76  OVERAGE_TEST.  v
3780: 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 76 65 72  oid sqlite3Cover
3790: 61 67 65 28 69 6e 74 29 3b 0a 23 20 64 65 66 69  age(int);.# defi
37a0: 6e 65 20 74 65 73 74 63 61 73 65 28 58 29 20 20  ne testcase(X)  
37b0: 69 66 28 20 58 20 29 7b 20 73 71 6c 69 74 65 33  if( X ){ sqlite3
37c0: 43 6f 76 65 72 61 67 65 28 5f 5f 4c 49 4e 45 5f  Coverage(__LINE_
37d0: 5f 29 3b 20 7d 0a 23 65 6c 73 65 0a 23 20 64 65  _); }.#else.# de
37e0: 66 69 6e 65 20 74 65 73 74 63 61 73 65 28 58 29  fine testcase(X)
37f0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
3800: 68 65 20 54 45 53 54 4f 4e 4c 59 20 6d 61 63 72  he TESTONLY macr
3810: 6f 20 69 73 20 75 73 65 64 20 74 6f 20 65 6e 63  o is used to enc
3820: 6c 6f 73 65 20 76 61 72 69 61 62 6c 65 20 64 65  lose variable de
3830: 63 6c 61 72 61 74 69 6f 6e 73 20 6f 72 0a 2a 2a  clarations or.**
3840: 20 6f 74 68 65 72 20 62 69 74 73 20 6f 66 20 63   other bits of c
3850: 6f 64 65 20 74 68 61 74 20 61 72 65 20 6e 65 65  ode that are nee
3860: 64 65 64 20 74 6f 20 73 75 70 70 6f 72 74 20 74  ded to support t
3870: 68 65 20 61 72 67 75 6d 65 6e 74 73 0a 2a 2a 20  he arguments.** 
3880: 77 69 74 68 69 6e 20 74 65 73 74 63 61 73 65 28  within testcase(
3890: 29 20 61 6e 64 20 61 73 73 65 72 74 28 29 20 6d  ) and assert() m
38a0: 61 63 72 6f 73 2e 0a 2a 2f 0a 23 69 66 20 21 64  acros..*/.#if !d
38b0: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 7c  efined(NDEBUG) |
38c0: 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
38d0: 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54 29 0a  _COVERAGE_TEST).
38e0: 23 20 64 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c  # define TESTONL
38f0: 59 28 58 29 20 20 58 0a 23 65 6c 73 65 0a 23 20  Y(X)  X.#else.# 
3900: 64 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28  define TESTONLY(
3910: 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  X).#endif../*.**
3920: 20 53 6f 6d 65 74 69 6d 65 73 20 77 65 20 6e 65   Sometimes we ne
3930: 65 64 20 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e  ed a small amoun
3940: 74 20 6f 66 20 63 6f 64 65 20 73 75 63 68 20 61  t of code such a
3950: 73 20 61 20 76 61 72 69 61 62 6c 65 20 69 6e 69  s a variable ini
3960: 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74  tialization.** t
3970: 6f 20 73 65 74 75 70 20 66 6f 72 20 61 20 6c 61  o setup for a la
3980: 74 65 72 20 61 73 73 65 72 74 28 29 20 73 74 61  ter assert() sta
3990: 74 65 6d 65 6e 74 2e 20 20 57 65 20 64 6f 20 6e  tement.  We do n
39a0: 6f 74 20 77 61 6e 74 20 74 68 69 73 20 63 6f 64  ot want this cod
39b0: 65 20 74 6f 0a 2a 2a 20 61 70 70 65 61 72 20 77  e to.** appear w
39c0: 68 65 6e 20 61 73 73 65 72 74 28 29 20 69 73 20  hen assert() is 
39d0: 64 69 73 61 62 6c 65 64 2e 20 20 54 68 65 20 66  disabled.  The f
39e0: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 69  ollowing macro i
39f0: 73 20 74 68 65 72 65 66 6f 72 65 0a 2a 2a 20 75  s therefore.** u
3a00: 73 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74  sed to contain t
3a10: 68 61 74 20 73 65 74 75 70 20 63 6f 64 65 2e 20  hat setup code. 
3a20: 20 54 68 65 20 22 56 56 41 22 20 61 63 72 6f 6e   The "VVA" acron
3a30: 79 6d 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a  ym stands for.**
3a40: 20 22 56 65 72 69 66 69 63 61 74 69 6f 6e 2c 20   "Verification, 
3a50: 56 61 6c 69 64 61 74 69 6f 6e 2c 20 61 6e 64 20  Validation, and 
3a60: 41 63 63 72 65 64 69 74 61 74 69 6f 6e 22 2e 20  Accreditation". 
3a70: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
3a80: 20 74 68 65 0a 2a 2a 20 63 6f 64 65 20 77 69 74   the.** code wit
3a90: 68 69 6e 20 56 56 41 5f 4f 4e 4c 59 28 29 20 77  hin VVA_ONLY() w
3aa0: 69 6c 6c 20 6f 6e 6c 79 20 72 75 6e 20 64 75 72  ill only run dur
3ab0: 69 6e 67 20 76 65 72 69 66 69 63 61 74 69 6f 6e  ing verification
3ac0: 20 70 72 6f 63 65 73 73 65 73 2e 0a 2a 2f 0a 23   processes..*/.#
3ad0: 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 23 20  ifndef NDEBUG.# 
3ae0: 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28  define VVA_ONLY(
3af0: 58 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64 65  X)  X.#else.# de
3b00: 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29  fine VVA_ONLY(X)
3b10: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
3b20: 68 65 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45  he ALWAYS and NE
3b30: 56 45 52 20 6d 61 63 72 6f 73 20 73 75 72 72 6f  VER macros surro
3b40: 75 6e 64 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72  und boolean expr
3b50: 65 73 73 69 6f 6e 73 20 77 68 69 63 68 0a 2a 2a  essions which.**
3b60: 20 61 72 65 20 69 6e 74 65 6e 64 65 64 20 74 6f   are intended to
3b70: 20 61 6c 77 61 79 73 20 62 65 20 74 72 75 65 20   always be true 
3b80: 6f 72 20 66 61 6c 73 65 2c 20 72 65 73 70 65 63  or false, respec
3b90: 74 69 76 65 6c 79 2e 20 20 53 75 63 68 0a 2a 2a  tively.  Such.**
3ba0: 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63 6f 75   expressions cou
3bb0: 6c 64 20 62 65 20 6f 6d 69 74 74 65 64 20 66 72  ld be omitted fr
3bc0: 6f 6d 20 74 68 65 20 63 6f 64 65 20 63 6f 6d 70  om the code comp
3bd0: 6c 65 74 65 6c 79 2e 20 20 42 75 74 20 74 68 65  letely.  But the
3be0: 79 0a 2a 2a 20 61 72 65 20 69 6e 63 6c 75 64 65  y.** are include
3bf0: 64 20 69 6e 20 61 20 66 65 77 20 63 61 73 65 73  d in a few cases
3c00: 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e 68   in order to enh
3c10: 61 6e 63 65 20 74 68 65 20 72 65 73 69 6c 69 65  ance the resilie
3c20: 6e 63 65 0a 2a 2a 20 6f 66 20 53 51 4c 69 74 65  nce.** of SQLite
3c30: 20 74 6f 20 75 6e 65 78 70 65 63 74 65 64 20 62   to unexpected b
3c40: 65 68 61 76 69 6f 72 20 2d 20 74 6f 20 6d 61 6b  ehavior - to mak
3c50: 65 20 74 68 65 20 63 6f 64 65 20 22 73 65 6c 66  e the code "self
3c60: 2d 68 65 61 6c 69 6e 67 22 0a 2a 2a 20 6f 72 20  -healing".** or 
3c70: 22 64 75 63 74 69 6c 65 22 20 72 61 74 68 65 72  "ductile" rather
3c80: 20 74 68 61 6e 20 62 65 69 6e 67 20 22 62 72 69   than being "bri
3c90: 74 74 6c 65 22 20 61 6e 64 20 63 72 61 73 68 69  ttle" and crashi
3ca0: 6e 67 20 61 74 20 74 68 65 20 66 69 72 73 74 0a  ng at the first.
3cb0: 2a 2a 20 68 69 6e 74 20 6f 66 20 75 6e 70 6c 61  ** hint of unpla
3cc0: 6e 6e 65 64 20 62 65 68 61 76 69 6f 72 2e 0a 2a  nned behavior..*
3cd0: 2a 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f  *.** In other wo
3ce0: 72 64 73 2c 20 41 4c 57 41 59 53 20 61 6e 64 20  rds, ALWAYS and 
3cf0: 4e 45 56 45 52 20 61 72 65 20 61 64 64 65 64 20  NEVER are added 
3d00: 66 6f 72 20 64 65 66 65 6e 73 69 76 65 20 63 6f  for defensive co
3d10: 64 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 64  de..**.** When d
3d20: 6f 69 6e 67 20 63 6f 76 65 72 61 67 65 20 74 65  oing coverage te
3d30: 73 74 69 6e 67 20 41 4c 57 41 59 53 20 61 6e 64  sting ALWAYS and
3d40: 20 4e 45 56 45 52 20 61 72 65 20 68 61 72 64 2d   NEVER are hard-
3d50: 63 6f 64 65 64 20 74 6f 0a 2a 2a 20 62 65 20 74  coded to.** be t
3d60: 72 75 65 20 61 6e 64 20 66 61 6c 73 65 20 73 6f  rue and false so
3d70: 20 74 68 61 74 20 74 68 65 20 75 6e 72 65 61 63   that the unreac
3d80: 68 61 62 6c 65 20 63 6f 64 65 20 74 68 65 79 20  hable code they 
3d90: 73 70 65 63 69 66 79 20 77 69 6c 6c 0a 2a 2a 20  specify will.** 
3da0: 6e 6f 74 20 62 65 20 63 6f 75 6e 74 65 64 20 61  not be counted a
3db0: 73 20 75 6e 74 65 73 74 65 64 20 63 6f 64 65 2e  s untested code.
3dc0: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
3dd0: 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f  SQLITE_COVERAGE_
3de0: 54 45 53 54 29 20 7c 7c 20 64 65 66 69 6e 65 64  TEST) || defined
3df0: 28 53 51 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e  (SQLITE_MUTATION
3e00: 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20  _TEST).# define 
3e10: 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20 28  ALWAYS(X)      (
3e20: 31 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45  1).# define NEVE
3e30: 52 28 58 29 20 20 20 20 20 20 20 28 30 29 0a 23  R(X)       (0).#
3e40: 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44  elif !defined(ND
3e50: 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 41  EBUG).# define A
3e60: 4c 57 41 59 53 28 58 29 20 20 20 20 20 20 28 28  LWAYS(X)      ((
3e70: 58 29 3f 31 3a 28 61 73 73 65 72 74 28 30 29 2c  X)?1:(assert(0),
3e80: 30 29 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56  0)).# define NEV
3e90: 45 52 28 58 29 20 20 20 20 20 20 20 28 28 58 29  ER(X)       ((X)
3ea0: 3f 28 61 73 73 65 72 74 28 30 29 2c 31 29 3a 30  ?(assert(0),1):0
3eb0: 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
3ec0: 20 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20   ALWAYS(X)      
3ed0: 28 58 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56  (X).# define NEV
3ee0: 45 52 28 58 29 20 20 20 20 20 20 20 28 58 29 0a  ER(X)       (X).
3ef0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f  #endif../*.** So
3f00: 6d 65 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72  me malloc failur
3f10: 65 73 20 61 72 65 20 6f 6e 6c 79 20 70 6f 73 73  es are only poss
3f20: 69 62 6c 65 20 69 66 20 53 51 4c 49 54 45 5f 54  ible if SQLITE_T
3f30: 45 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45  EST_REALLOC_STRE
3f40: 53 53 20 69 73 0a 2a 2a 20 64 65 66 69 6e 65 64  SS is.** defined
3f50: 2e 20 20 57 65 20 6e 65 65 64 20 74 6f 20 64 65  .  We need to de
3f60: 66 65 6e 64 20 61 67 61 69 6e 73 74 20 74 68 6f  fend against tho
3f70: 73 65 20 66 61 69 6c 75 72 65 73 20 77 68 65 6e  se failures when
3f80: 20 74 65 73 74 69 6e 67 20 77 69 74 68 0a 2a 2a   testing with.**
3f90: 20 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41   SQLITE_TEST_REA
3fa0: 4c 4c 4f 43 5f 53 54 52 45 53 53 2c 20 62 75 74  LLOC_STRESS, but
3fb0: 20 77 65 20 64 6f 6e 27 74 20 77 61 6e 74 20 74   we don't want t
3fc0: 68 65 20 75 6e 72 65 61 63 68 61 62 6c 65 20 62  he unreachable b
3fd0: 72 61 6e 63 68 65 73 0a 2a 2a 20 64 75 72 69 6e  ranches.** durin
3fe0: 67 20 61 20 6e 6f 72 6d 61 6c 20 62 75 69 6c 64  g a normal build
3ff0: 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
4000: 20 6d 61 63 72 6f 20 63 61 6e 20 62 65 20 75 73   macro can be us
4010: 65 64 20 74 6f 20 64 69 73 61 62 6c 65 20 74 65  ed to disable te
4020: 73 74 73 0a 2a 2a 20 74 68 61 74 20 61 72 65 20  sts.** that are 
4030: 61 6c 77 61 79 73 20 66 61 6c 73 65 20 65 78 63  always false exc
4040: 65 70 74 20 77 68 65 6e 20 53 51 4c 49 54 45 5f  ept when SQLITE_
4050: 54 45 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52  TEST_REALLOC_STR
4060: 45 53 53 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 23  ESS is set..*/.#
4070: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
4080: 45 5f 54 45 53 54 5f 52 45 41 4c 4c 4f 43 5f 53  E_TEST_REALLOC_S
4090: 54 52 45 53 53 29 0a 23 20 64 65 66 69 6e 65 20  TRESS).# define 
40a0: 4f 4e 4c 59 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f  ONLY_IF_REALLOC_
40b0: 53 54 52 45 53 53 28 58 29 20 20 28 58 29 0a 23  STRESS(X)  (X).#
40c0: 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44  elif !defined(ND
40d0: 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 4f  EBUG).# define O
40e0: 4e 4c 59 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f 53  NLY_IF_REALLOC_S
40f0: 54 52 45 53 53 28 58 29 20 20 28 28 58 29 3f 28  TRESS(X)  ((X)?(
4100: 61 73 73 65 72 74 28 30 29 2c 31 29 3a 30 29 0a  assert(0),1):0).
4110: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 4f  #else.# define O
4120: 4e 4c 59 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f 53  NLY_IF_REALLOC_S
4130: 54 52 45 53 53 28 58 29 20 20 28 30 29 0a 23 65  TRESS(X)  (0).#e
4140: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 63 6c  ndif../*.** Decl
4150: 61 72 61 74 69 6f 6e 73 20 75 73 65 64 20 66 6f  arations used fo
4160: 72 20 74 72 61 63 69 6e 67 20 74 68 65 20 6f 70  r tracing the op
4170: 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d 20 69  erating system i
4180: 6e 74 65 72 66 61 63 65 73 2e 0a 2a 2f 0a 23 69  nterfaces..*/.#i
4190: 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
41a0: 5f 46 4f 52 43 45 5f 4f 53 5f 54 52 41 43 45 29  _FORCE_OS_TRACE)
41b0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
41c0: 54 45 5f 54 45 53 54 29 20 7c 7c 20 5c 0a 20 20  TE_TEST) || \.  
41d0: 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54    (defined(SQLIT
41e0: 45 5f 44 45 42 55 47 29 20 26 26 20 53 51 4c 49  E_DEBUG) && SQLI
41f0: 54 45 5f 4f 53 5f 57 49 4e 29 0a 20 20 65 78 74  TE_OS_WIN).  ext
4200: 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 4f  ern int sqlite3O
4210: 53 54 72 61 63 65 3b 0a 23 20 64 65 66 69 6e 65  STrace;.# define
4220: 20 4f 53 54 52 41 43 45 28 58 29 20 20 20 20 20   OSTRACE(X)     
4230: 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
4240: 4f 53 54 72 61 63 65 20 29 20 73 71 6c 69 74 65  OSTrace ) sqlite
4250: 33 44 65 62 75 67 50 72 69 6e 74 66 20 58 0a 23  3DebugPrintf X.#
4260: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 48   define SQLITE_H
4270: 41 56 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6c  AVE_OS_TRACE.#el
4280: 73 65 0a 23 20 64 65 66 69 6e 65 20 4f 53 54 52  se.# define OSTR
4290: 41 43 45 28 58 29 0a 23 20 75 6e 64 65 66 20 20  ACE(X).# undef  
42a0: 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54  SQLITE_HAVE_OS_T
42b0: 52 41 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  RACE.#endif../*.
42c0: 2a 2a 20 49 73 20 74 68 65 20 73 71 6c 69 74 65  ** Is the sqlite
42d0: 33 45 72 72 4e 61 6d 65 28 29 20 66 75 6e 63 74  3ErrName() funct
42e0: 69 6f 6e 20 6e 65 65 64 65 64 20 69 6e 20 74 68  ion needed in th
42f0: 65 20 62 75 69 6c 64 3f 20 20 43 75 72 72 65 6e  e build?  Curren
4300: 74 6c 79 2c 0a 2a 2a 20 69 74 20 69 73 20 6e 65  tly,.** it is ne
4310: 65 64 65 64 20 62 79 20 22 6d 75 74 65 78 5f 77  eded by "mutex_w
4320: 33 32 2e 63 22 20 28 77 68 65 6e 20 64 65 62 75  32.c" (when debu
4330: 67 67 69 6e 67 29 2c 20 22 6f 73 5f 77 69 6e 2e  gging), "os_win.
4340: 63 22 20 28 77 68 65 6e 0a 2a 2a 20 4f 53 54 52  c" (when.** OSTR
4350: 41 43 45 20 69 73 20 65 6e 61 62 6c 65 64 29 2c  ACE is enabled),
4360: 20 61 6e 64 20 62 79 20 73 65 76 65 72 61 6c 20   and by several 
4370: 22 74 65 73 74 2a 2e 63 22 20 66 69 6c 65 73 20  "test*.c" files 
4380: 28 77 68 69 63 68 20 61 72 65 0a 2a 2a 20 63 6f  (which are.** co
4390: 6d 70 69 6c 65 64 20 75 73 69 6e 67 20 53 51 4c  mpiled using SQL
43a0: 49 54 45 5f 54 45 53 54 29 2e 0a 2a 2f 0a 23 69  ITE_TEST)..*/.#i
43b0: 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
43c0: 5f 48 41 56 45 5f 4f 53 5f 54 52 41 43 45 29 20  _HAVE_OS_TRACE) 
43d0: 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
43e0: 45 5f 54 45 53 54 29 20 7c 7c 20 5c 0a 20 20 20  E_TEST) || \.   
43f0: 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   (defined(SQLITE
4400: 5f 44 45 42 55 47 29 20 26 26 20 53 51 4c 49 54  _DEBUG) && SQLIT
4410: 45 5f 4f 53 5f 57 49 4e 29 0a 23 20 64 65 66 69  E_OS_WIN).# defi
4420: 6e 65 20 53 51 4c 49 54 45 5f 4e 45 45 44 5f 45  ne SQLITE_NEED_E
4430: 52 52 5f 4e 41 4d 45 0a 23 65 6c 73 65 0a 23 20  RR_NAME.#else.# 
4440: 75 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 4e 45  undef  SQLITE_NE
4450: 45 44 5f 45 52 52 5f 4e 41 4d 45 0a 23 65 6e 64  ED_ERR_NAME.#end
4460: 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45  if../*.** SQLITE
4470: 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f  _ENABLE_EXPLAIN_
4480: 43 4f 4d 4d 45 4e 54 53 20 69 73 20 69 6e 63 6f  COMMENTS is inco
4490: 6d 70 61 74 69 62 6c 65 20 77 69 74 68 20 53 51  mpatible with SQ
44a0: 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49  LITE_OMIT_EXPLAI
44b0: 4e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  N.*/.#ifdef SQLI
44c0: 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a  TE_OMIT_EXPLAIN.
44d0: 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45  # undef SQLITE_E
44e0: 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f  NABLE_EXPLAIN_CO
44f0: 4d 4d 45 4e 54 53 0a 23 65 6e 64 69 66 0a 0a 2f  MMENTS.#endif../
4500: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65  *.** Return true
4510: 20 28 6e 6f 6e 2d 7a 65 72 6f 29 20 69 66 20 74   (non-zero) if t
4520: 68 65 20 69 6e 70 75 74 20 69 73 20 61 6e 20 69  he input is an i
4530: 6e 74 65 67 65 72 20 74 68 61 74 20 69 73 20 74  nteger that is t
4540: 6f 6f 20 6c 61 72 67 65 0a 2a 2a 20 74 6f 20 66  oo large.** to f
4550: 69 74 20 69 6e 20 33 32 2d 62 69 74 73 2e 20 20  it in 32-bits.  
4560: 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75 73  This macro is us
4570: 65 64 20 69 6e 73 69 64 65 20 6f 66 20 76 61 72  ed inside of var
4580: 69 6f 75 73 20 74 65 73 74 63 61 73 65 28 29 0a  ious testcase().
4590: 2a 2a 20 6d 61 63 72 6f 73 20 74 6f 20 76 65 72  ** macros to ver
45a0: 69 66 79 20 74 68 61 74 20 77 65 20 68 61 76 65  ify that we have
45b0: 20 74 65 73 74 65 64 20 53 51 4c 69 74 65 20 66   tested SQLite f
45c0: 6f 72 20 6c 61 72 67 65 2d 66 69 6c 65 20 73 75  or large-file su
45d0: 70 70 6f 72 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e  pport..*/.#defin
45e0: 65 20 49 53 5f 42 49 47 5f 49 4e 54 28 58 29 20  e IS_BIG_INT(X) 
45f0: 20 28 28 28 58 29 26 7e 28 69 36 34 29 30 78 66   (((X)&~(i64)0xf
4600: 66 66 66 66 66 66 66 29 21 3d 30 29 0a 0a 2f 2a  fffffff)!=0)../*
4610: 0a 2a 2a 20 54 68 65 20 6d 61 63 72 6f 20 75 6e  .** The macro un
4620: 6c 69 6b 65 6c 79 28 29 20 69 73 20 61 20 68 69  likely() is a hi
4630: 6e 74 20 74 68 61 74 20 73 75 72 72 6f 75 6e 64  nt that surround
4640: 73 20 61 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 65  s a boolean.** e
4650: 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69  xpression that i
4660: 73 20 75 73 75 61 6c 6c 79 20 66 61 6c 73 65 2e  s usually false.
4670: 20 20 4d 61 63 72 6f 20 6c 69 6b 65 6c 79 28 29    Macro likely()
4680: 20 73 75 72 72 6f 75 6e 64 73 0a 2a 2a 20 61 20   surrounds.** a 
4690: 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69  boolean expressi
46a0: 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75 61 6c  on that is usual
46b0: 6c 79 20 74 72 75 65 2e 20 20 54 68 65 73 65 20  ly true.  These 
46c0: 68 69 6e 74 73 20 63 6f 75 6c 64 2c 0a 2a 2a 20  hints could,.** 
46d0: 69 6e 20 74 68 65 6f 72 79 2c 20 62 65 20 75 73  in theory, be us
46e0: 65 64 20 62 79 20 74 68 65 20 63 6f 6d 70 69 6c  ed by the compil
46f0: 65 72 20 74 6f 20 67 65 6e 65 72 61 74 65 20 62  er to generate b
4700: 65 74 74 65 72 20 63 6f 64 65 2c 20 62 75 74 0a  etter code, but.
4710: 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 74 68 65  ** currently the
4720: 79 20 61 72 65 20 6a 75 73 74 20 63 6f 6d 6d 65  y are just comme
4730: 6e 74 73 20 66 6f 72 20 68 75 6d 61 6e 20 72 65  nts for human re
4740: 61 64 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  aders..*/.#defin
4750: 65 20 6c 69 6b 65 6c 79 28 58 29 20 20 20 20 28  e likely(X)    (
4760: 58 29 0a 23 64 65 66 69 6e 65 20 75 6e 6c 69 6b  X).#define unlik
4770: 65 6c 79 28 58 29 20 20 28 58 29 0a 0a 23 69 6e  ely(X)  (X)..#in
4780: 63 6c 75 64 65 20 22 68 61 73 68 2e 68 22 0a 23  clude "hash.h".#
4790: 69 6e 63 6c 75 64 65 20 22 70 61 72 73 65 2e 68  include "parse.h
47a0: 22 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 69  ".#include <stdi
47b0: 6f 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73  o.h>.#include <s
47c0: 74 64 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c 75 64  tdlib.h>.#includ
47d0: 65 20 3c 73 74 72 69 6e 67 2e 68 3e 0a 23 69 6e  e <string.h>.#in
47e0: 63 6c 75 64 65 20 3c 61 73 73 65 72 74 2e 68 3e  clude <assert.h>
47f0: 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 64 65  .#include <stdde
4800: 66 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 55 73 65 20  f.h>../*.** Use 
4810: 61 20 6d 61 63 72 6f 20 74 6f 20 72 65 70 6c 61  a macro to repla
4820: 63 65 20 6d 65 6d 63 70 79 28 29 20 69 66 20 63  ce memcpy() if c
4830: 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 53 51 4c  ompiled with SQL
4840: 49 54 45 5f 49 4e 4c 49 4e 45 5f 4d 45 4d 43 50  ITE_INLINE_MEMCP
4850: 59 2e 0a 2a 2a 20 54 68 69 73 20 61 6c 6c 6f 77  Y..** This allow
4860: 73 20 62 65 74 74 65 72 20 6d 65 61 73 75 72 65  s better measure
4870: 6d 65 6e 74 73 20 6f 66 20 77 68 65 72 65 20 6d  ments of where m
4880: 65 6d 63 70 79 28 29 20 69 73 20 75 73 65 64 20  emcpy() is used 
4890: 77 68 65 6e 20 72 75 6e 6e 69 6e 67 0a 2a 2a 20  when running.** 
48a0: 63 61 63 68 65 67 72 69 6e 64 2e 20 20 42 75 74  cachegrind.  But
48b0: 20 74 68 69 73 20 6d 61 63 72 6f 20 76 65 72 73   this macro vers
48c0: 69 6f 6e 20 6f 66 20 6d 65 6d 63 70 79 28 29 20  ion of memcpy() 
48d0: 69 73 20 76 65 72 79 20 73 6c 6f 77 20 73 6f 20  is very slow so 
48e0: 69 74 0a 2a 2a 20 73 68 6f 75 6c 64 20 6e 6f 74  it.** should not
48f0: 20 62 65 20 75 73 65 64 20 69 6e 20 70 72 6f 64   be used in prod
4900: 75 63 74 69 6f 6e 2e 20 20 54 68 69 73 20 69 73  uction.  This is
4910: 20 61 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 6d   a performance m
4920: 65 61 73 75 72 65 6d 65 6e 74 0a 2a 2a 20 68 61  easurement.** ha
4930: 63 6b 20 6f 6e 6c 79 2e 0a 2a 2f 0a 23 69 66 64  ck only..*/.#ifd
4940: 65 66 20 53 51 4c 49 54 45 5f 49 4e 4c 49 4e 45  ef SQLITE_INLINE
4950: 5f 4d 45 4d 43 50 59 0a 23 20 64 65 66 69 6e 65  _MEMCPY.# define
4960: 20 6d 65 6d 63 70 79 28 44 2c 53 2c 4e 29 20 7b   memcpy(D,S,N) {
4970: 63 68 61 72 2a 78 78 64 3d 28 63 68 61 72 2a 29  char*xxd=(char*)
4980: 28 44 29 3b 63 6f 6e 73 74 20 63 68 61 72 2a 78  (D);const char*x
4990: 78 73 3d 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  xs=(const char*)
49a0: 28 53 29 3b 5c 0a 20 20 20 20 20 20 20 20 20 20  (S);\.          
49b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
49c0: 74 20 78 78 6e 3d 28 4e 29 3b 77 68 69 6c 65 28  t xxn=(N);while(
49d0: 78 78 6e 2d 2d 3e 30 29 2a 28 78 78 64 2b 2b 29  xxn-->0)*(xxd++)
49e0: 3d 2a 28 78 78 73 2b 2b 29 3b 7d 0a 23 65 6e 64  =*(xxs++);}.#end
49f0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 63 6f 6d  if../*.** If com
4a00: 70 69 6c 69 6e 67 20 66 6f 72 20 61 20 70 72 6f  piling for a pro
4a10: 63 65 73 73 6f 72 20 74 68 61 74 20 6c 61 63 6b  cessor that lack
4a20: 73 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74  s floating point
4a30: 20 73 75 70 70 6f 72 74 2c 0a 2a 2a 20 73 75 62   support,.** sub
4a40: 73 74 69 74 75 74 65 20 69 6e 74 65 67 65 72 20  stitute integer 
4a50: 66 6f 72 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69  for floating-poi
4a60: 6e 74 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  nt.*/.#ifdef SQL
4a70: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
4a80: 47 5f 50 4f 49 4e 54 0a 23 20 64 65 66 69 6e 65  G_POINT.# define
4a90: 20 64 6f 75 62 6c 65 20 73 71 6c 69 74 65 5f 69   double sqlite_i
4aa0: 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20 66 6c  nt64.# define fl
4ab0: 6f 61 74 20 73 71 6c 69 74 65 5f 69 6e 74 36 34  oat sqlite_int64
4ac0: 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f  .# define LONGDO
4ad0: 55 42 4c 45 5f 54 59 50 45 20 73 71 6c 69 74 65  UBLE_TYPE sqlite
4ae0: 5f 69 6e 74 36 34 0a 23 20 69 66 6e 64 65 66 20  _int64.# ifndef 
4af0: 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23  SQLITE_BIG_DBL.#
4b00: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
4b10: 5f 42 49 47 5f 44 42 4c 20 28 28 28 73 71 6c 69  _BIG_DBL (((sqli
4b20: 74 65 33 5f 69 6e 74 36 34 29 31 29 3c 3c 35 30  te3_int64)1)<<50
4b30: 29 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69  ).# endif.# defi
4b40: 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44  ne SQLITE_OMIT_D
4b50: 41 54 45 54 49 4d 45 5f 46 55 4e 43 53 20 31 0a  ATETIME_FUNCS 1.
4b60: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
4b70: 4f 4d 49 54 5f 54 52 41 43 45 20 31 0a 23 20 75  OMIT_TRACE 1.# u
4b80: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 49 58 45  ndef SQLITE_MIXE
4b90: 44 5f 45 4e 44 49 41 4e 5f 36 34 42 49 54 5f 46  D_ENDIAN_64BIT_F
4ba0: 4c 4f 41 54 0a 23 20 75 6e 64 65 66 20 53 51 4c  LOAT.# undef SQL
4bb0: 49 54 45 5f 48 41 56 45 5f 49 53 4e 41 4e 0a 23  ITE_HAVE_ISNAN.#
4bc0: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
4bd0: 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20 64  LITE_BIG_DBL.# d
4be0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47  efine SQLITE_BIG
4bf0: 5f 44 42 4c 20 28 31 65 39 39 29 0a 23 65 6e 64  _DBL (1e99).#end
4c00: 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54 5f 54  if../*.** OMIT_T
4c10: 45 4d 50 44 42 20 69 73 20 73 65 74 20 74 6f 20  EMPDB is set to 
4c20: 31 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  1 if SQLITE_OMIT
4c30: 5f 54 45 4d 50 44 42 20 69 73 20 64 65 66 69 6e  _TEMPDB is defin
4c40: 65 64 2c 20 6f 72 20 30 0a 2a 2a 20 61 66 74 65  ed, or 0.** afte
4c50: 72 77 61 72 64 2e 20 48 61 76 69 6e 67 20 74 68  rward. Having th
4c60: 69 73 20 6d 61 63 72 6f 20 61 6c 6c 6f 77 73 20  is macro allows 
4c70: 75 73 20 74 6f 20 63 61 75 73 65 20 74 68 65 20  us to cause the 
4c80: 43 20 63 6f 6d 70 69 6c 65 72 0a 2a 2a 20 74 6f  C compiler.** to
4c90: 20 6f 6d 69 74 20 63 6f 64 65 20 75 73 65 64 20   omit code used 
4ca0: 62 79 20 54 45 4d 50 20 74 61 62 6c 65 73 20 77  by TEMP tables w
4cb0: 69 74 68 6f 75 74 20 6d 65 73 73 79 20 23 69 66  ithout messy #if
4cc0: 6e 64 65 66 20 73 74 61 74 65 6d 65 6e 74 73 2e  ndef statements.
4cd0: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
4ce0: 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 0a 23 64  E_OMIT_TEMPDB.#d
4cf0: 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44  efine OMIT_TEMPD
4d00: 42 20 31 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e  B 1.#else.#defin
4d10: 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 30 0a  e OMIT_TEMPDB 0.
4d20: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
4d30: 65 20 22 66 69 6c 65 20 66 6f 72 6d 61 74 22 20  e "file format" 
4d40: 6e 75 6d 62 65 72 20 69 73 20 61 6e 20 69 6e 74  number is an int
4d50: 65 67 65 72 20 74 68 61 74 20 69 73 20 69 6e 63  eger that is inc
4d60: 72 65 6d 65 6e 74 65 64 20 77 68 65 6e 65 76 65  remented wheneve
4d70: 72 0a 2a 2a 20 74 68 65 20 56 44 42 45 2d 6c 65  r.** the VDBE-le
4d80: 76 65 6c 20 66 69 6c 65 20 66 6f 72 6d 61 74 20  vel file format 
4d90: 63 68 61 6e 67 65 73 2e 20 20 54 68 65 20 66 6f  changes.  The fo
4da0: 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 64  llowing macros d
4db0: 65 66 69 6e 65 20 74 68 65 0a 2a 2a 20 74 68 65  efine the.** the
4dc0: 20 64 65 66 61 75 6c 74 20 66 69 6c 65 20 66 6f   default file fo
4dd0: 72 6d 61 74 20 66 6f 72 20 6e 65 77 20 64 61 74  rmat for new dat
4de0: 61 62 61 73 65 73 20 61 6e 64 20 74 68 65 20 6d  abases and the m
4df0: 61 78 69 6d 75 6d 20 66 69 6c 65 20 66 6f 72 6d  aximum file form
4e00: 61 74 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 6c  at.** that the l
4e10: 69 62 72 61 72 79 20 63 61 6e 20 72 65 61 64 2e  ibrary can read.
4e20: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
4e30: 54 45 5f 4d 41 58 5f 46 49 4c 45 5f 46 4f 52 4d  TE_MAX_FILE_FORM
4e40: 41 54 20 34 0a 23 69 66 6e 64 65 66 20 53 51 4c  AT 4.#ifndef SQL
4e50: 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45  ITE_DEFAULT_FILE
4e60: 5f 46 4f 52 4d 41 54 0a 23 20 64 65 66 69 6e 65  _FORMAT.# define
4e70: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
4e80: 46 49 4c 45 5f 46 4f 52 4d 41 54 20 34 0a 23 65  FILE_FORMAT 4.#e
4e90: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65  ndif../*.** Dete
4ea0: 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74 72  rmine whether tr
4eb0: 69 67 67 65 72 73 20 61 72 65 20 72 65 63 75 72  iggers are recur
4ec0: 73 69 76 65 20 62 79 20 64 65 66 61 75 6c 74 2e  sive by default.
4ed0: 20 20 54 68 69 73 20 63 61 6e 20 62 65 0a 2a 2a    This can be.**
4ee0: 20 63 68 61 6e 67 65 64 20 61 74 20 72 75 6e 2d   changed at run-
4ef0: 74 69 6d 65 20 75 73 69 6e 67 20 61 20 70 72 61  time using a pra
4f00: 67 6d 61 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  gma..*/.#ifndef 
4f10: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 52  SQLITE_DEFAULT_R
4f20: 45 43 55 52 53 49 56 45 5f 54 52 49 47 47 45 52  ECURSIVE_TRIGGER
4f30: 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  S.# define SQLIT
4f40: 45 5f 44 45 46 41 55 4c 54 5f 52 45 43 55 52 53  E_DEFAULT_RECURS
4f50: 49 56 45 5f 54 52 49 47 47 45 52 53 20 30 0a 23  IVE_TRIGGERS 0.#
4f60: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f  endif../*.** Pro
4f70: 76 69 64 65 20 61 20 64 65 66 61 75 6c 74 20 76  vide a default v
4f80: 61 6c 75 65 20 66 6f 72 20 53 51 4c 49 54 45 5f  alue for SQLITE_
4f90: 54 45 4d 50 5f 53 54 4f 52 45 20 69 6e 20 63 61  TEMP_STORE in ca
4fa0: 73 65 20 69 74 20 69 73 20 6e 6f 74 20 73 70 65  se it is not spe
4fb0: 63 69 66 69 65 64 0a 2a 2a 20 6f 6e 20 74 68 65  cified.** on the
4fc0: 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 0a 2a 2f   command-line.*/
4fd0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
4fe0: 54 45 4d 50 5f 53 54 4f 52 45 0a 23 20 64 65 66  TEMP_STORE.# def
4ff0: 69 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f  ine SQLITE_TEMP_
5000: 53 54 4f 52 45 20 31 0a 23 20 64 65 66 69 6e 65  STORE 1.# define
5010: 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f   SQLITE_TEMP_STO
5020: 52 45 5f 78 63 20 31 20 20 2f 2a 20 45 78 63 6c  RE_xc 1  /* Excl
5030: 75 64 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63  ude from ctime.c
5040: 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a   */.#endif../*.*
5050: 2a 20 49 66 20 6e 6f 20 76 61 6c 75 65 20 68 61  * If no value ha
5060: 73 20 62 65 65 6e 20 70 72 6f 76 69 64 65 64 20  s been provided 
5070: 66 6f 72 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57  for SQLITE_MAX_W
5080: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 2c 20 6f  ORKER_THREADS, o
5090: 72 20 69 66 0a 2a 2a 20 53 51 4c 49 54 45 5f 54  r if.** SQLITE_T
50a0: 45 4d 50 5f 53 54 4f 52 45 20 69 73 20 73 65 74  EMP_STORE is set
50b0: 20 74 6f 20 33 20 28 6e 65 76 65 72 20 75 73 65   to 3 (never use
50c0: 20 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65 73   temporary files
50d0: 29 2c 20 73 65 74 20 69 74 0a 2a 2a 20 74 6f 20  ), set it.** to 
50e0: 7a 65 72 6f 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c  zero..*/.#if SQL
50f0: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d  ITE_TEMP_STORE==
5100: 33 20 7c 7c 20 53 51 4c 49 54 45 5f 54 48 52 45  3 || SQLITE_THRE
5110: 41 44 53 41 46 45 3d 3d 30 0a 23 20 75 6e 64 65  ADSAFE==0.# unde
5120: 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  f SQLITE_MAX_WOR
5130: 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65  KER_THREADS.# de
5140: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
5150: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20 30  WORKER_THREADS 0
5160: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
5170: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
5180: 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66 69  R_THREADS.# defi
5190: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f  ne SQLITE_MAX_WO
51a0: 52 4b 45 52 5f 54 48 52 45 41 44 53 20 38 0a 23  RKER_THREADS 8.#
51b0: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
51c0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52  LITE_DEFAULT_WOR
51d0: 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65  KER_THREADS.# de
51e0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41  fine SQLITE_DEFA
51f0: 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  ULT_WORKER_THREA
5200: 44 53 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 20  DS 0.#endif.#if 
5210: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57  SQLITE_DEFAULT_W
5220: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 3e 53 51  ORKER_THREADS>SQ
5230: 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f  LITE_MAX_WORKER_
5240: 54 48 52 45 41 44 53 0a 23 20 75 6e 64 65 66 20  THREADS.# undef 
5250: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
5260: 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66 69  R_THREADS.# defi
5270: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f  ne SQLITE_MAX_WO
5280: 52 4b 45 52 5f 54 48 52 45 41 44 53 20 53 51 4c  RKER_THREADS SQL
5290: 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b  ITE_DEFAULT_WORK
52a0: 45 52 5f 54 48 52 45 41 44 53 0a 23 65 6e 64 69  ER_THREADS.#endi
52b0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 65 66  f../*.** The def
52c0: 61 75 6c 74 20 69 6e 69 74 69 61 6c 20 61 6c 6c  ault initial all
52d0: 6f 63 61 74 69 6f 6e 20 66 6f 72 20 74 68 65 20  ocation for the 
52e0: 70 61 67 65 63 61 63 68 65 20 77 68 65 6e 20 75  pagecache when u
52f0: 73 69 6e 67 20 73 65 70 61 72 61 74 65 0a 2a 2a  sing separate.**
5300: 20 70 61 67 65 63 61 63 68 65 73 20 66 6f 72 20   pagecaches for 
5310: 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f  each database co
5320: 6e 6e 65 63 74 69 6f 6e 2e 20 20 41 20 70 6f 73  nnection.  A pos
5330: 69 74 69 76 65 20 6e 75 6d 62 65 72 20 69 73 20  itive number is 
5340: 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66  the.** number of
5350: 20 70 61 67 65 73 2e 20 20 41 20 6e 65 67 61 74   pages.  A negat
5360: 69 76 65 20 6e 75 6d 62 65 72 20 4e 20 74 72 61  ive number N tra
5370: 6e 73 6c 61 74 69 6f 6e 73 20 6d 65 61 6e 73 20  nslations means 
5380: 74 68 61 74 20 61 20 62 75 66 66 65 72 0a 2a 2a  that a buffer.**
5390: 20 6f 66 20 2d 31 30 32 34 2a 4e 20 62 79 74 65   of -1024*N byte
53a0: 73 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 61  s is allocated a
53b0: 6e 64 20 75 73 65 64 20 66 6f 72 20 61 73 20 6d  nd used for as m
53c0: 61 6e 79 20 70 61 67 65 73 20 61 73 20 69 74 20  any pages as it 
53d0: 77 69 6c 6c 20 68 6f 6c 64 2e 0a 2a 2a 0a 2a 2a  will hold..**.**
53e0: 20 54 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c   The default val
53f0: 75 65 20 6f 66 20 22 32 30 22 20 77 61 73 20 63  ue of "20" was c
5400: 68 6f 6f 73 65 6e 20 74 6f 20 6d 69 6e 69 6d 69  hoosen to minimi
5410: 7a 65 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20  ze the run-time 
5420: 6f 66 20 74 68 65 0a 2a 2a 20 73 70 65 65 64 74  of the.** speedt
5430: 65 73 74 31 20 74 65 73 74 20 70 72 6f 67 72 61  est1 test progra
5440: 6d 20 77 69 74 68 20 6f 70 74 69 6f 6e 73 3a 20  m with options: 
5450: 2d 2d 73 68 72 69 6e 6b 2d 6d 65 6d 6f 72 79 20  --shrink-memory 
5460: 2d 2d 72 65 70 72 65 70 61 72 65 0a 2a 2f 0a 23  --reprepare.*/.#
5470: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45  ifndef SQLITE_DE
5480: 46 41 55 4c 54 5f 50 43 41 43 48 45 5f 49 4e 49  FAULT_PCACHE_INI
5490: 54 53 5a 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  TSZ.# define SQL
54a0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 50 43 41 43  ITE_DEFAULT_PCAC
54b0: 48 45 5f 49 4e 49 54 53 5a 20 32 30 0a 23 65 6e  HE_INITSZ 20.#en
54c0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64  dif../*.** GCC d
54d0: 6f 65 73 20 6e 6f 74 20 64 65 66 69 6e 65 20 74  oes not define t
54e0: 68 65 20 6f 66 66 73 65 74 6f 66 28 29 20 6d 61  he offsetof() ma
54f0: 63 72 6f 20 73 6f 20 77 65 27 6c 6c 20 68 61 76  cro so we'll hav
5500: 65 20 74 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75  e to do it.** ou
5510: 72 73 65 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e  rselves..*/.#ifn
5520: 64 65 66 20 6f 66 66 73 65 74 6f 66 0a 23 64 65  def offsetof.#de
5530: 66 69 6e 65 20 6f 66 66 73 65 74 6f 66 28 53 54  fine offsetof(ST
5540: 52 55 43 54 55 52 45 2c 46 49 45 4c 44 29 20 28  RUCTURE,FIELD) (
5550: 28 69 6e 74 29 28 28 63 68 61 72 2a 29 26 28 28  (int)((char*)&((
5560: 53 54 52 55 43 54 55 52 45 2a 29 30 29 2d 3e 46  STRUCTURE*)0)->F
5570: 49 45 4c 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f  IELD)).#endif../
5580: 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 63  *.** Macros to c
5590: 6f 6d 70 75 74 65 20 6d 69 6e 69 6d 75 6d 20 61  ompute minimum a
55a0: 6e 64 20 6d 61 78 69 6d 75 6d 20 6f 66 20 74 77  nd maximum of tw
55b0: 6f 20 6e 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23 69  o numbers..*/.#i
55c0: 66 6e 64 65 66 20 4d 49 4e 0a 23 20 64 65 66 69  fndef MIN.# defi
55d0: 6e 65 20 4d 49 4e 28 41 2c 42 29 20 28 28 41 29  ne MIN(A,B) ((A)
55e0: 3c 28 42 29 3f 28 41 29 3a 28 42 29 29 0a 23 65  <(B)?(A):(B)).#e
55f0: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 4d 41 58  ndif.#ifndef MAX
5600: 0a 23 20 64 65 66 69 6e 65 20 4d 41 58 28 41 2c  .# define MAX(A,
5610: 42 29 20 28 28 41 29 3e 28 42 29 3f 28 41 29 3a  B) ((A)>(B)?(A):
5620: 28 42 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  (B)).#endif../*.
5630: 2a 2a 20 53 77 61 70 20 74 77 6f 20 6f 62 6a 65  ** Swap two obje
5640: 63 74 73 20 6f 66 20 74 79 70 65 20 54 59 50 45  cts of type TYPE
5650: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 57 41  ..*/.#define SWA
5660: 50 28 54 59 50 45 2c 41 2c 42 29 20 7b 54 59 50  P(TYPE,A,B) {TYP
5670: 45 20 74 3d 41 3b 20 41 3d 42 3b 20 42 3d 74 3b  E t=A; A=B; B=t;
5680: 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74  }../*.** Check t
5690: 6f 20 73 65 65 20 69 66 20 74 68 69 73 20 6d 61  o see if this ma
56a0: 63 68 69 6e 65 20 75 73 65 73 20 45 42 43 44 49  chine uses EBCDI
56b0: 43 2e 20 20 28 59 65 73 2c 20 62 65 6c 69 65 76  C.  (Yes, believ
56c0: 65 20 69 74 20 6f 72 0a 2a 2a 20 6e 6f 74 2c 20  e it or.** not, 
56d0: 74 68 65 72 65 20 61 72 65 20 73 74 69 6c 6c 20  there are still 
56e0: 6d 61 63 68 69 6e 65 73 20 6f 75 74 20 74 68 65  machines out the
56f0: 72 65 20 74 68 61 74 20 75 73 65 20 45 42 43 44  re that use EBCD
5700: 49 43 2e 29 0a 2a 2f 0a 23 69 66 20 27 41 27 20  IC.).*/.#if 'A' 
5710: 3d 3d 20 27 5c 33 30 31 27 0a 23 20 64 65 66 69  == '\301'.# defi
5720: 6e 65 20 53 51 4c 49 54 45 5f 45 42 43 44 49 43  ne SQLITE_EBCDIC
5730: 20 31 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   1.#else.# defin
5740: 65 20 53 51 4c 49 54 45 5f 41 53 43 49 49 20 31  e SQLITE_ASCII 1
5750: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49  .#endif../*.** I
5760: 6e 74 65 67 65 72 73 20 6f 66 20 6b 6e 6f 77 6e  ntegers of known
5770: 20 73 69 7a 65 73 2e 20 20 54 68 65 73 65 20 74   sizes.  These t
5780: 79 70 65 64 65 66 73 20 6d 69 67 68 74 20 63 68  ypedefs might ch
5790: 61 6e 67 65 20 66 6f 72 20 61 72 63 68 69 74 65  ange for archite
57a0: 63 74 75 72 65 73 0a 2a 2a 20 77 68 65 72 65 20  ctures.** where 
57b0: 74 68 65 20 73 69 7a 65 73 20 76 65 72 79 2e 20  the sizes very. 
57c0: 20 50 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61   Preprocessor ma
57d0: 63 72 6f 73 20 61 72 65 20 61 76 61 69 6c 61 62  cros are availab
57e0: 6c 65 20 73 6f 20 74 68 61 74 20 74 68 65 0a 2a  le so that the.*
57f0: 2a 20 74 79 70 65 73 20 63 61 6e 20 62 65 20 63  * types can be c
5800: 6f 6e 76 65 6e 69 65 6e 74 6c 79 20 72 65 64 65  onveniently rede
5810: 66 69 6e 65 64 20 61 74 20 63 6f 6d 70 69 6c 65  fined at compile
5820: 2d 74 79 70 65 2e 20 20 4c 69 6b 65 20 74 68 69  -type.  Like thi
5830: 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20  s:.**.**        
5840: 20 63 63 20 27 2d 44 55 49 4e 54 50 54 52 5f 54   cc '-DUINTPTR_T
5850: 59 50 45 3d 6c 6f 6e 67 20 6c 6f 6e 67 20 69 6e  YPE=long long in
5860: 74 27 20 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e 64 65  t' ....*/.#ifnde
5870: 66 20 55 49 4e 54 33 32 5f 54 59 50 45 0a 23 20  f UINT32_TYPE.# 
5880: 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 33  ifdef HAVE_UINT3
5890: 32 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49  2_T.#  define UI
58a0: 4e 54 33 32 5f 54 59 50 45 20 75 69 6e 74 33 32  NT32_TYPE uint32
58b0: 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66  _t.# else.#  def
58c0: 69 6e 65 20 55 49 4e 54 33 32 5f 54 59 50 45 20  ine UINT32_TYPE 
58d0: 75 6e 73 69 67 6e 65 64 20 69 6e 74 0a 23 20 65  unsigned int.# e
58e0: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e  ndif.#endif.#ifn
58f0: 64 65 66 20 55 49 4e 54 31 36 5f 54 59 50 45 0a  def UINT16_TYPE.
5900: 23 20 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e  # ifdef HAVE_UIN
5910: 54 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65 20  T16_T.#  define 
5920: 55 49 4e 54 31 36 5f 54 59 50 45 20 75 69 6e 74  UINT16_TYPE uint
5930: 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64  16_t.# else.#  d
5940: 65 66 69 6e 65 20 55 49 4e 54 31 36 5f 54 59 50  efine UINT16_TYP
5950: 45 20 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74  E unsigned short
5960: 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e   int.# endif.#en
5970: 64 69 66 0a 23 69 66 6e 64 65 66 20 49 4e 54 31  dif.#ifndef INT1
5980: 36 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  6_TYPE.# ifdef H
5990: 41 56 45 5f 49 4e 54 31 36 5f 54 0a 23 20 20 64  AVE_INT16_T.#  d
59a0: 65 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50 45  efine INT16_TYPE
59b0: 20 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a   int16_t.# else.
59c0: 23 20 20 64 65 66 69 6e 65 20 49 4e 54 31 36 5f  #  define INT16_
59d0: 54 59 50 45 20 73 68 6f 72 74 20 69 6e 74 0a 23  TYPE short int.#
59e0: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69   endif.#endif.#i
59f0: 66 6e 64 65 66 20 55 49 4e 54 38 5f 54 59 50 45  fndef UINT8_TYPE
5a00: 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 55 49  .# ifdef HAVE_UI
5a10: 4e 54 38 5f 54 0a 23 20 20 64 65 66 69 6e 65 20  NT8_T.#  define 
5a20: 55 49 4e 54 38 5f 54 59 50 45 20 75 69 6e 74 38  UINT8_TYPE uint8
5a30: 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66  _t.# else.#  def
5a40: 69 6e 65 20 55 49 4e 54 38 5f 54 59 50 45 20 75  ine UINT8_TYPE u
5a50: 6e 73 69 67 6e 65 64 20 63 68 61 72 0a 23 20 65  nsigned char.# e
5a60: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e  ndif.#endif.#ifn
5a70: 64 65 66 20 49 4e 54 38 5f 54 59 50 45 0a 23 20  def INT8_TYPE.# 
5a80: 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54 38 5f  ifdef HAVE_INT8_
5a90: 54 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 38  T.#  define INT8
5aa0: 5f 54 59 50 45 20 69 6e 74 38 5f 74 0a 23 20 65  _TYPE int8_t.# e
5ab0: 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 4e  lse.#  define IN
5ac0: 54 38 5f 54 59 50 45 20 73 69 67 6e 65 64 20 63  T8_TYPE signed c
5ad0: 68 61 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  har.# endif.#end
5ae0: 69 66 0a 23 69 66 6e 64 65 66 20 4c 4f 4e 47 44  if.#ifndef LONGD
5af0: 4f 55 42 4c 45 5f 54 59 50 45 0a 23 20 64 65 66  OUBLE_TYPE.# def
5b00: 69 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54  ine LONGDOUBLE_T
5b10: 59 50 45 20 6c 6f 6e 67 20 64 6f 75 62 6c 65 0a  YPE long double.
5b20: 23 65 6e 64 69 66 0a 74 79 70 65 64 65 66 20 73  #endif.typedef s
5b30: 71 6c 69 74 65 5f 69 6e 74 36 34 20 69 36 34 3b  qlite_int64 i64;
5b40: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 38 2d 62            /* 8-b
5b50: 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67  yte signed integ
5b60: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 73 71  er */.typedef sq
5b70: 6c 69 74 65 5f 75 69 6e 74 36 34 20 75 36 34 3b  lite_uint64 u64;
5b80: 20 20 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79           /* 8-by
5b90: 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  te unsigned inte
5ba0: 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55  ger */.typedef U
5bb0: 49 4e 54 33 32 5f 54 59 50 45 20 75 33 32 3b 20  INT32_TYPE u32; 
5bc0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 34 2d 62            /* 4-b
5bd0: 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  yte unsigned int
5be0: 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20  eger */.typedef 
5bf0: 55 49 4e 54 31 36 5f 54 59 50 45 20 75 31 36 3b  UINT16_TYPE u16;
5c00: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d             /* 2-
5c10: 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e  byte unsigned in
5c20: 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66  teger */.typedef
5c30: 20 49 4e 54 31 36 5f 54 59 50 45 20 69 31 36 3b   INT16_TYPE i16;
5c40: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32              /* 2
5c50: 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74  -byte signed int
5c60: 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20  eger */.typedef 
5c70: 55 49 4e 54 38 5f 54 59 50 45 20 75 38 3b 20 20  UINT8_TYPE u8;  
5c80: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d             /* 1-
5c90: 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e  byte unsigned in
5ca0: 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66  teger */.typedef
5cb0: 20 49 4e 54 38 5f 54 59 50 45 20 69 38 3b 20 20   INT8_TYPE i8;  
5cc0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31              /* 1
5cd0: 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74  -byte signed int
5ce0: 65 67 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53  eger */../*.** S
5cf0: 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 69 73  QLITE_MAX_U32 is
5d00: 20 61 20 75 36 34 20 63 6f 6e 73 74 61 6e 74 20   a u64 constant 
5d10: 74 68 61 74 20 69 73 20 74 68 65 20 6d 61 78 69  that is the maxi
5d20: 6d 75 6d 20 75 36 34 20 76 61 6c 75 65 0a 2a 2a  mum u64 value.**
5d30: 20 74 68 61 74 20 63 61 6e 20 62 65 20 73 74 6f   that can be sto
5d40: 72 65 64 20 69 6e 20 61 20 75 33 32 20 77 69 74  red in a u32 wit
5d50: 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20 64 61 74  hout loss of dat
5d60: 61 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a  a.  The value.**
5d70: 20 69 73 20 30 78 30 30 30 30 30 30 30 30 66 66   is 0x00000000ff
5d80: 66 66 66 66 66 66 2e 20 20 42 75 74 20 62 65 63  ffffff.  But bec
5d90: 61 75 73 65 20 6f 66 20 71 75 69 72 6b 73 20 6f  ause of quirks o
5da0: 66 20 73 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73  f some compilers
5db0: 2c 20 77 65 0a 2a 2a 20 68 61 76 65 20 74 6f 20  , we.** have to 
5dc0: 73 70 65 63 69 66 79 20 74 68 65 20 76 61 6c 75  specify the valu
5dd0: 65 20 69 6e 20 74 68 65 20 6c 65 73 73 20 69 6e  e in the less in
5de0: 74 75 69 74 69 76 65 20 6d 61 6e 6e 65 72 20 73  tuitive manner s
5df0: 68 6f 77 6e 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65  hown:.*/.#define
5e00: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20   SQLITE_MAX_U32 
5e10: 20 28 28 28 28 75 36 34 29 31 29 3c 3c 33 32 29   ((((u64)1)<<32)
5e20: 2d 31 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64  -1)../*.** The d
5e30: 61 74 61 74 79 70 65 20 75 73 65 64 20 74 6f 20  atatype used to 
5e40: 73 74 6f 72 65 20 65 73 74 69 6d 61 74 65 73 20  store estimates 
5e50: 6f 66 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  of the number of
5e60: 20 72 6f 77 73 20 69 6e 20 61 0a 2a 2a 20 74 61   rows in a.** ta
5e70: 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 54  ble or index.  T
5e80: 68 69 73 20 69 73 20 61 6e 20 75 6e 73 69 67 6e  his is an unsign
5e90: 65 64 20 69 6e 74 65 67 65 72 20 74 79 70 65 2e  ed integer type.
5ea0: 20 20 46 6f 72 20 39 39 2e 39 25 20 6f 66 0a 2a    For 99.9% of.*
5eb0: 2a 20 74 68 65 20 77 6f 72 6c 64 2c 20 61 20 33  * the world, a 3
5ec0: 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20 69 73  2-bit integer is
5ed0: 20 73 75 66 66 69 63 69 65 6e 74 2e 20 20 42 75   sufficient.  Bu
5ee0: 74 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67  t a 64-bit integ
5ef0: 65 72 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73 65  er.** can be use
5f00: 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  d at compile-tim
5f10: 65 20 69 66 20 64 65 73 69 72 65 64 2e 0a 2a 2f  e if desired..*/
5f20: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 36  .#ifdef SQLITE_6
5f30: 34 42 49 54 5f 53 54 41 54 53 0a 20 74 79 70 65  4BIT_STATS. type
5f40: 64 65 66 20 75 36 34 20 74 52 6f 77 63 6e 74 3b  def u64 tRowcnt;
5f50: 20 20 20 20 2f 2a 20 36 34 2d 62 69 74 20 6f 6e      /* 64-bit on
5f60: 6c 79 20 69 66 20 72 65 71 75 65 73 74 65 64 20  ly if requested 
5f70: 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  at compile-time 
5f80: 2a 2f 0a 23 65 6c 73 65 0a 20 74 79 70 65 64 65  */.#else. typede
5f90: 66 20 75 33 32 20 74 52 6f 77 63 6e 74 3b 20 20  f u32 tRowcnt;  
5fa0: 20 20 2f 2a 20 33 32 2d 62 69 74 20 69 73 20 74    /* 32-bit is t
5fb0: 68 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 65  he default */.#e
5fc0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 73 74 69  ndif../*.** Esti
5fd0: 6d 61 74 65 64 20 71 75 61 6e 74 69 74 69 65 73  mated quantities
5fe0: 20 75 73 65 64 20 66 6f 72 20 71 75 65 72 79 20   used for query 
5ff0: 70 6c 61 6e 6e 69 6e 67 20 61 72 65 20 73 74 6f  planning are sto
6000: 72 65 64 20 61 73 20 31 36 2d 62 69 74 0a 2a 2a  red as 16-bit.**
6010: 20 6c 6f 67 61 72 69 74 68 6d 73 2e 20 20 46 6f   logarithms.  Fo
6020: 72 20 71 75 61 6e 74 69 74 79 20 58 2c 20 74 68  r quantity X, th
6030: 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20 69  e value stored i
6040: 73 20 31 30 2a 6c 6f 67 32 28 58 29 2e 20 20 54  s 10*log2(X).  T
6050: 68 69 73 0a 2a 2a 20 67 69 76 65 73 20 61 20 70  his.** gives a p
6060: 6f 73 73 69 62 6c 65 20 72 61 6e 67 65 20 6f 66  ossible range of
6070: 20 76 61 6c 75 65 73 20 6f 66 20 61 70 70 72 6f   values of appro
6080: 78 69 6d 61 74 65 6c 79 20 31 2e 30 65 39 38 36  ximately 1.0e986
6090: 20 74 6f 20 31 65 2d 39 38 36 2e 0a 2a 2a 20 42   to 1e-986..** B
60a0: 75 74 20 74 68 65 20 61 6c 6c 6f 77 65 64 20 76  ut the allowed v
60b0: 61 6c 75 65 73 20 61 72 65 20 22 67 72 61 69 6e  alues are "grain
60c0: 79 22 2e 20 20 4e 6f 74 20 65 76 65 72 79 20 76  y".  Not every v
60d0: 61 6c 75 65 20 69 73 20 72 65 70 72 65 73 65 6e  alue is represen
60e0: 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 65 78  table..** For ex
60f0: 61 6d 70 6c 65 2c 20 71 75 61 6e 74 69 74 69 65  ample, quantitie
6100: 73 20 31 36 20 61 6e 64 20 31 37 20 61 72 65 20  s 16 and 17 are 
6110: 62 6f 74 68 20 72 65 70 72 65 73 65 6e 74 65 64  both represented
6120: 20 62 79 20 61 20 4c 6f 67 45 73 74 0a 2a 2a 20   by a LogEst.** 
6130: 6f 66 20 34 30 2e 20 20 48 6f 77 65 76 65 72 2c  of 40.  However,
6140: 20 73 69 6e 63 65 20 4c 6f 67 45 73 74 20 71 75   since LogEst qu
6150: 61 6e 74 69 74 69 65 73 20 61 72 65 20 73 75 70  antities are sup
6160: 70 6f 73 65 20 74 6f 20 62 65 20 65 73 74 69 6d  pose to be estim
6170: 61 74 65 73 2c 0a 2a 2a 20 6e 6f 74 20 65 78 61  ates,.** not exa
6180: 63 74 20 76 61 6c 75 65 73 2c 20 74 68 69 73 20  ct values, this 
6190: 69 6d 70 72 65 63 69 73 69 6f 6e 20 69 73 20 6e  imprecision is n
61a0: 6f 74 20 61 20 70 72 6f 62 6c 65 6d 2e 0a 2a 2a  ot a problem..**
61b0: 0a 2a 2a 20 22 4c 6f 67 45 73 74 22 20 69 73 20  .** "LogEst" is 
61c0: 73 68 6f 72 74 20 66 6f 72 20 22 4c 6f 67 61 72  short for "Logar
61d0: 69 74 68 6d 69 63 20 45 73 74 69 6d 61 74 65 22  ithmic Estimate"
61e0: 2e 0a 2a 2a 0a 2a 2a 20 45 78 61 6d 70 6c 65 73  ..**.** Examples
61f0: 3a 0a 2a 2a 20 20 20 20 20 20 31 20 2d 3e 20 30  :.**      1 -> 0
6200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 32 30                20
6210: 20 2d 3e 20 34 33 20 20 20 20 20 20 20 20 20 20   -> 43          
6220: 31 30 30 30 30 20 2d 3e 20 31 33 32 0a 2a 2a 20  10000 -> 132.** 
6230: 20 20 20 20 20 32 20 2d 3e 20 31 30 20 20 20 20       2 -> 10    
6240: 20 20 20 20 20 20 20 20 20 32 35 20 2d 3e 20 34           25 -> 4
6250: 36 20 20 20 20 20 20 20 20 20 20 32 35 30 30 30  6          25000
6260: 20 2d 3e 20 31 34 36 0a 2a 2a 20 20 20 20 20 20   -> 146.**      
6270: 33 20 2d 3e 20 31 36 20 20 20 20 20 20 20 20 20  3 -> 16         
6280: 20 20 20 31 30 30 20 2d 3e 20 36 36 20 20 20 20     100 -> 66    
6290: 20 20 20 20 31 30 30 30 30 30 30 20 2d 3e 20 31      1000000 -> 1
62a0: 39 39 0a 2a 2a 20 20 20 20 20 20 34 20 2d 3e 20  99.**      4 -> 
62b0: 32 30 20 20 20 20 20 20 20 20 20 20 20 31 30 30  20           100
62c0: 30 20 2d 3e 20 39 39 20 20 20 20 20 20 20 20 31  0 -> 99        1
62d0: 30 34 38 35 37 36 20 2d 3e 20 32 30 30 0a 2a 2a  048576 -> 200.**
62e0: 20 20 20 20 20 31 30 20 2d 3e 20 33 33 20 20 20       10 -> 33   
62f0: 20 20 20 20 20 20 20 20 31 30 32 34 20 2d 3e 20          1024 -> 
6300: 31 30 30 20 20 20 20 34 32 39 34 39 36 37 32 39  100    429496729
6310: 36 20 2d 3e 20 33 32 30 0a 2a 2a 0a 2a 2a 20 54  6 -> 320.**.** T
6320: 68 65 20 4c 6f 67 45 73 74 20 63 61 6e 20 62 65  he LogEst can be
6330: 20 6e 65 67 61 74 69 76 65 20 74 6f 20 69 6e 64   negative to ind
6340: 69 63 61 74 65 20 66 72 61 63 74 69 6f 6e 61 6c  icate fractional
6350: 20 76 61 6c 75 65 73 2e 0a 2a 2a 20 45 78 61 6d   values..** Exam
6360: 70 6c 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 30  ples:.**.**    0
6370: 2e 35 20 2d 3e 20 2d 31 30 20 20 20 20 20 20 20  .5 -> -10       
6380: 20 20 20 20 30 2e 31 20 2d 3e 20 2d 33 33 20 20      0.1 -> -33  
6390: 20 20 20 20 20 20 30 2e 30 36 32 35 20 2d 3e 20        0.0625 -> 
63a0: 2d 34 30 0a 2a 2f 0a 74 79 70 65 64 65 66 20 49  -40.*/.typedef I
63b0: 4e 54 31 36 5f 54 59 50 45 20 4c 6f 67 45 73 74  NT16_TYPE LogEst
63c0: 3b 0a 0a 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65  ;../*.** Set the
63d0: 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 20   SQLITE_PTRSIZE 
63e0: 6d 61 63 72 6f 20 74 6f 20 74 68 65 20 6e 75 6d  macro to the num
63f0: 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20  ber of bytes in 
6400: 61 20 70 6f 69 6e 74 65 72 0a 2a 2f 0a 23 69 66  a pointer.*/.#if
6410: 6e 64 65 66 20 53 51 4c 49 54 45 5f 50 54 52 53  ndef SQLITE_PTRS
6420: 49 5a 45 0a 23 20 69 66 20 64 65 66 69 6e 65 64  IZE.# if defined
6430: 28 5f 5f 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45  (__SIZEOF_POINTE
6440: 52 5f 5f 29 0a 23 20 20 20 64 65 66 69 6e 65 20  R__).#   define 
6450: 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 5f  SQLITE_PTRSIZE _
6460: 5f 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f  _SIZEOF_POINTER_
6470: 5f 0a 23 20 65 6c 69 66 20 64 65 66 69 6e 65 64  _.# elif defined
6480: 28 69 33 38 36 29 20 20 20 20 20 7c 7c 20 64 65  (i386)     || de
6490: 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20  fined(__i386__) 
64a0: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f    || defined(_M_
64b0: 49 58 38 36 29 20 7c 7c 20 20 20 20 5c 0a 20 20  IX86) ||    \.  
64c0: 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f       defined(_M_
64d0: 41 52 4d 29 20 20 20 7c 7c 20 64 65 66 69 6e 65  ARM)   || define
64e0: 64 28 5f 5f 61 72 6d 5f 5f 29 20 20 20 20 7c 7c  d(__arm__)    ||
64f0: 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 29 0a   defined(__x86).
6500: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
6510: 45 5f 50 54 52 53 49 5a 45 20 34 0a 23 20 65 6c  E_PTRSIZE 4.# el
6520: 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  se.#   define SQ
6530: 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 38 0a 23  LITE_PTRSIZE 8.#
6540: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f   endif.#endif../
6550: 2a 20 54 68 65 20 75 70 74 72 20 74 79 70 65 20  * The uptr type 
6560: 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20 69  is an unsigned i
6570: 6e 74 65 67 65 72 20 6c 61 72 67 65 20 65 6e 6f  nteger large eno
6580: 75 67 68 20 74 6f 20 68 6f 6c 64 20 61 20 70 6f  ugh to hold a po
6590: 69 6e 74 65 72 0a 2a 2f 0a 23 69 66 20 64 65 66  inter.*/.#if def
65a0: 69 6e 65 64 28 48 41 56 45 5f 53 54 44 49 4e 54  ined(HAVE_STDINT
65b0: 5f 48 29 0a 20 20 74 79 70 65 64 65 66 20 75 69  _H).  typedef ui
65c0: 6e 74 70 74 72 5f 74 20 75 70 74 72 3b 0a 23 65  ntptr_t uptr;.#e
65d0: 6c 69 66 20 53 51 4c 49 54 45 5f 50 54 52 53 49  lif SQLITE_PTRSI
65e0: 5a 45 3d 3d 34 0a 20 20 74 79 70 65 64 65 66 20  ZE==4.  typedef 
65f0: 75 33 32 20 75 70 74 72 3b 0a 23 65 6c 73 65 0a  u32 uptr;.#else.
6600: 20 20 74 79 70 65 64 65 66 20 75 36 34 20 75 70    typedef u64 up
6610: 74 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  tr;.#endif../*.*
6620: 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 57 49 54  * The SQLITE_WIT
6630: 48 49 4e 28 50 2c 53 2c 45 29 20 6d 61 63 72 6f  HIN(P,S,E) macro
6640: 20 63 68 65 63 6b 73 20 74 6f 20 73 65 65 20 69   checks to see i
6650: 66 20 70 6f 69 6e 74 65 72 20 50 20 70 6f 69 6e  f pointer P poin
6660: 74 73 20 74 6f 0a 2a 2a 20 73 6f 6d 65 74 68 69  ts to.** somethi
6670: 6e 67 20 62 65 74 77 65 65 6e 20 53 20 28 69 6e  ng between S (in
6680: 63 6c 75 73 69 76 65 29 20 61 6e 64 20 45 20 28  clusive) and E (
6690: 65 78 63 6c 75 73 69 76 65 29 2e 0a 2a 2a 0a 2a  exclusive)..**.*
66a0: 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  * In other words
66b0: 2c 20 53 20 69 73 20 61 20 62 75 66 66 65 72 20  , S is a buffer 
66c0: 61 6e 64 20 45 20 69 73 20 61 20 70 6f 69 6e 74  and E is a point
66d0: 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  er to the first 
66e0: 62 79 74 65 20 61 66 74 65 72 0a 2a 2a 20 74 68  byte after.** th
66f0: 65 20 65 6e 64 20 6f 66 20 62 75 66 66 65 72 20  e end of buffer 
6700: 53 2e 20 20 54 68 69 73 20 6d 61 63 72 6f 20 72  S.  This macro r
6710: 65 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 50  eturns true if P
6720: 20 70 6f 69 6e 74 73 20 74 6f 20 73 6f 6d 65 74   points to somet
6730: 68 69 6e 67 0a 2a 2a 20 63 6f 6e 74 61 69 6e 65  hing.** containe
6740: 64 20 77 69 74 68 69 6e 20 74 68 65 20 62 75 66  d within the buf
6750: 66 65 72 20 53 2e 0a 2a 2f 0a 23 64 65 66 69 6e  fer S..*/.#defin
6760: 65 20 53 51 4c 49 54 45 5f 57 49 54 48 49 4e 28  e SQLITE_WITHIN(
6770: 50 2c 53 2c 45 29 20 28 28 28 75 70 74 72 29 28  P,S,E) (((uptr)(
6780: 50 29 3e 3d 28 75 70 74 72 29 28 53 29 29 26 26  P)>=(uptr)(S))&&
6790: 28 28 75 70 74 72 29 28 50 29 3c 28 75 70 74 72  ((uptr)(P)<(uptr
67a0: 29 28 45 29 29 29 0a 0a 0a 2f 2a 0a 2a 2a 20 4d  )(E))).../*.** M
67b0: 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69  acros to determi
67c0: 6e 65 20 77 68 65 74 68 65 72 20 74 68 65 20 6d  ne whether the m
67d0: 61 63 68 69 6e 65 20 69 73 20 62 69 67 20 6f 72  achine is big or
67e0: 20 6c 69 74 74 6c 65 20 65 6e 64 69 61 6e 2c 0a   little endian,.
67f0: 2a 2a 20 61 6e 64 20 77 68 65 74 68 65 72 20 6f  ** and whether o
6800: 72 20 6e 6f 74 20 74 68 61 74 20 64 65 74 65 72  r not that deter
6810: 6d 69 6e 61 74 69 6f 6e 20 69 73 20 72 75 6e 2d  mination is run-
6820: 74 69 6d 65 20 6f 72 20 63 6f 6d 70 69 6c 65 2d  time or compile-
6830: 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72 20  time..**.** For 
6840: 62 65 73 74 20 70 65 72 66 6f 72 6d 61 6e 63 65  best performance
6850: 2c 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20  , an attempt is 
6860: 6d 61 64 65 20 74 6f 20 67 75 65 73 73 20 61 74  made to guess at
6870: 20 74 68 65 20 62 79 74 65 2d 6f 72 64 65 72 0a   the byte-order.
6880: 2a 2a 20 75 73 69 6e 67 20 43 2d 70 72 65 70 72  ** using C-prepr
6890: 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 2e 20  ocessor macros. 
68a0: 20 49 66 20 74 68 61 74 20 69 73 20 75 6e 73 75   If that is unsu
68b0: 63 63 65 73 73 66 75 6c 2c 20 6f 72 20 69 66 0a  ccessful, or if.
68c0: 2a 2a 20 2d 44 53 51 4c 49 54 45 5f 42 59 54 45  ** -DSQLITE_BYTE
68d0: 4f 52 44 45 52 3d 30 20 69 73 20 73 65 74 2c 20  ORDER=0 is set, 
68e0: 74 68 65 6e 20 62 79 74 65 2d 6f 72 64 65 72 20  then byte-order 
68f0: 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 2a 2a  is determined.**
6900: 20 61 74 20 72 75 6e 2d 74 69 6d 65 2e 0a 2a 2f   at run-time..*/
6910: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
6920: 42 59 54 45 4f 52 44 45 52 0a 23 20 69 66 20 64  BYTEORDER.# if d
6930: 65 66 69 6e 65 64 28 69 33 38 36 29 20 20 20 20  efined(i386)    
6940: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69 33   || defined(__i3
6950: 38 36 5f 5f 29 20 20 20 7c 7c 20 64 65 66 69 6e  86__)   || defin
6960: 65 64 28 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20  ed(_M_IX86) ||  
6970: 20 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64    \.     defined
6980: 28 5f 5f 78 38 36 5f 36 34 29 20 7c 7c 20 64 65  (__x86_64) || de
6990: 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 5f 5f  fined(__x86_64__
69a0: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f  ) || defined(_M_
69b0: 58 36 34 29 20 20 7c 7c 20 20 20 20 5c 0a 20 20  X64)  ||    \.  
69c0: 20 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 4d     defined(_M_AM
69d0: 44 36 34 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  D64) || defined(
69e0: 5f 4d 5f 41 52 4d 29 20 20 20 20 20 7c 7c 20 64  _M_ARM)     || d
69f0: 65 66 69 6e 65 64 28 5f 5f 78 38 36 29 20 20 20  efined(__x86)   
6a00: 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65 66  ||    \.     def
6a10: 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f 29 0a 23 20  ined(__arm__).# 
6a20: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
6a30: 42 59 54 45 4f 52 44 45 52 20 20 20 20 31 32 33  BYTEORDER    123
6a40: 34 0a 23 20 65 6c 69 66 20 64 65 66 69 6e 65 64  4.# elif defined
6a50: 28 73 70 61 72 63 29 20 20 20 20 7c 7c 20 64 65  (sparc)    || de
6a60: 66 69 6e 65 64 28 5f 5f 70 70 63 5f 5f 29 0a 23  fined(__ppc__).#
6a70: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
6a80: 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20 34 33  _BYTEORDER    43
6a90: 32 31 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65  21.# else.#   de
6aa0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59 54 45  fine SQLITE_BYTE
6ab0: 4f 52 44 45 52 20 30 0a 23 20 65 6e 64 69 66 0a  ORDER 0.# endif.
6ac0: 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54  #endif.#if SQLIT
6ad0: 45 5f 42 59 54 45 4f 52 44 45 52 3d 3d 34 33 32  E_BYTEORDER==432
6ae0: 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  1.# define SQLIT
6af0: 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 31  E_BIGENDIAN    1
6b00: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
6b10: 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 30 0a  _LITTLEENDIAN 0.
6b20: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
6b30: 55 54 46 31 36 4e 41 54 49 56 45 20 20 53 51 4c  UTF16NATIVE  SQL
6b40: 49 54 45 5f 55 54 46 31 36 42 45 0a 23 65 6c 69  ITE_UTF16BE.#eli
6b50: 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44  f SQLITE_BYTEORD
6b60: 45 52 3d 3d 31 32 33 34 0a 23 20 64 65 66 69 6e  ER==1234.# defin
6b70: 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49  e SQLITE_BIGENDI
6b80: 41 4e 20 20 20 20 30 0a 23 20 64 65 66 69 6e 65  AN    0.# define
6b90: 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e   SQLITE_LITTLEEN
6ba0: 44 49 41 4e 20 31 0a 23 20 64 65 66 69 6e 65 20  DIAN 1.# define 
6bb0: 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49  SQLITE_UTF16NATI
6bc0: 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36  VE  SQLITE_UTF16
6bd0: 4c 45 0a 23 65 6c 73 65 0a 23 20 69 66 64 65 66  LE.#else.# ifdef
6be0: 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41   SQLITE_AMALGAMA
6bf0: 54 49 4f 4e 0a 20 20 63 6f 6e 73 74 20 69 6e 74  TION.  const int
6c00: 20 73 71 6c 69 74 65 33 6f 6e 65 20 3d 20 31 3b   sqlite3one = 1;
6c10: 0a 23 20 65 6c 73 65 0a 20 20 65 78 74 65 72 6e  .# else.  extern
6c20: 20 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74   const int sqlit
6c30: 65 33 6f 6e 65 3b 0a 23 20 65 6e 64 69 66 0a 23  e3one;.# endif.#
6c40: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42   define SQLITE_B
6c50: 49 47 45 4e 44 49 41 4e 20 20 20 20 28 2a 28 63  IGENDIAN    (*(c
6c60: 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65 33 6f  har *)(&sqlite3o
6c70: 6e 65 29 3d 3d 30 29 0a 23 20 64 65 66 69 6e 65  ne)==0).# define
6c80: 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e   SQLITE_LITTLEEN
6c90: 44 49 41 4e 20 28 2a 28 63 68 61 72 20 2a 29 28  DIAN (*(char *)(
6ca0: 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 31 29  &sqlite3one)==1)
6cb0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
6cc0: 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 28 53  _UTF16NATIVE  (S
6cd0: 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 3f  QLITE_BIGENDIAN?
6ce0: 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 3a 53  SQLITE_UTF16BE:S
6cf0: 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 29 0a 23  QLITE_UTF16LE).#
6d00: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e  endif../*.** Con
6d10: 73 74 61 6e 74 73 20 66 6f 72 20 74 68 65 20 6c  stants for the l
6d20: 61 72 67 65 73 74 20 61 6e 64 20 73 6d 61 6c 6c  argest and small
6d30: 65 73 74 20 70 6f 73 73 69 62 6c 65 20 36 34 2d  est possible 64-
6d40: 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67  bit signed integ
6d50: 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20 6d 61  ers..** These ma
6d60: 63 72 6f 73 20 61 72 65 20 64 65 73 69 67 6e 65  cros are designe
6d70: 64 20 74 6f 20 77 6f 72 6b 20 63 6f 72 72 65 63  d to work correc
6d80: 74 6c 79 20 6f 6e 20 62 6f 74 68 20 33 32 2d 62  tly on both 32-b
6d90: 69 74 20 61 6e 64 20 36 34 2d 62 69 74 0a 2a 2a  it and 64-bit.**
6da0: 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f 0a 23   compilers..*/.#
6db0: 64 65 66 69 6e 65 20 4c 41 52 47 45 53 54 5f 49  define LARGEST_I
6dc0: 4e 54 36 34 20 20 28 30 78 66 66 66 66 66 66 66  NT64  (0xfffffff
6dd0: 66 7c 28 28 28 69 36 34 29 30 78 37 66 66 66 66  f|(((i64)0x7ffff
6de0: 66 66 66 29 3c 3c 33 32 29 29 0a 23 64 65 66 69  fff)<<32)).#defi
6df0: 6e 65 20 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36  ne SMALLEST_INT6
6e00: 34 20 28 28 28 69 36 34 29 2d 31 29 20 2d 20 4c  4 (((i64)-1) - L
6e10: 41 52 47 45 53 54 5f 49 4e 54 36 34 29 0a 0a 2f  ARGEST_INT64)../
6e20: 2a 0a 2a 2a 20 52 6f 75 6e 64 20 75 70 20 61 20  *.** Round up a 
6e30: 6e 75 6d 62 65 72 20 74 6f 20 74 68 65 20 6e 65  number to the ne
6e40: 78 74 20 6c 61 72 67 65 72 20 6d 75 6c 74 69 70  xt larger multip
6e50: 6c 65 20 6f 66 20 38 2e 20 20 54 68 69 73 20 69  le of 8.  This i
6e60: 73 20 75 73 65 64 0a 2a 2a 20 74 6f 20 66 6f 72  s used.** to for
6e70: 63 65 20 38 2d 62 79 74 65 20 61 6c 69 67 6e 6d  ce 8-byte alignm
6e80: 65 6e 74 20 6f 6e 20 36 34 2d 62 69 74 20 61 72  ent on 64-bit ar
6e90: 63 68 69 74 65 63 74 75 72 65 73 2e 0a 2a 2f 0a  chitectures..*/.
6ea0: 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 38 28 78  #define ROUND8(x
6eb0: 29 20 20 20 20 20 28 28 28 78 29 2b 37 29 26 7e  )     (((x)+7)&~
6ec0: 37 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20  7)../*.** Round 
6ed0: 64 6f 77 6e 20 74 6f 20 74 68 65 20 6e 65 61 72  down to the near
6ee0: 65 73 74 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20  est multiple of 
6ef0: 38 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55  8.*/.#define ROU
6f00: 4e 44 44 4f 57 4e 38 28 78 29 20 28 28 78 29 26  NDDOWN8(x) ((x)&
6f10: 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65 72  ~7)../*.** Asser
6f20: 74 20 74 68 61 74 20 74 68 65 20 70 6f 69 6e 74  t that the point
6f30: 65 72 20 58 20 69 73 20 61 6c 69 67 6e 65 64 20  er X is aligned 
6f40: 74 6f 20 61 6e 20 38 2d 62 79 74 65 20 62 6f 75  to an 8-byte bou
6f50: 6e 64 61 72 79 2e 20 20 54 68 69 73 0a 2a 2a 20  ndary.  This.** 
6f60: 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 6f 6e  macro is used on
6f70: 6c 79 20 77 69 74 68 69 6e 20 61 73 73 65 72 74  ly within assert
6f80: 28 29 20 74 6f 20 76 65 72 69 66 79 20 74 68 61  () to verify tha
6f90: 74 20 74 68 65 20 63 6f 64 65 20 67 65 74 73 0a  t the code gets.
6fa0: 2a 2a 20 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e 74  ** all alignment
6fb0: 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20 63 6f   restrictions co
6fc0: 72 72 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78 63  rrect..**.** Exc
6fd0: 65 70 74 2c 20 69 66 20 53 51 4c 49 54 45 5f 34  ept, if SQLITE_4
6fe0: 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41  _BYTE_ALIGNED_MA
6ff0: 4c 4c 4f 43 20 69 73 20 64 65 66 69 6e 65 64 2c  LLOC is defined,
7000: 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 75 6e 64   then the.** und
7010: 65 72 6c 79 69 6e 67 20 6d 61 6c 6c 6f 63 28 29  erlying malloc()
7020: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
7030: 6d 69 67 68 74 20 72 65 74 75 72 6e 20 75 73 20  might return us 
7040: 34 2d 62 79 74 65 20 61 6c 69 67 6e 65 64 0a 2a  4-byte aligned.*
7050: 2a 20 70 6f 69 6e 74 65 72 73 2e 20 20 49 6e 20  * pointers.  In 
7060: 74 68 61 74 20 63 61 73 65 2c 20 6f 6e 6c 79 20  that case, only 
7070: 76 65 72 69 66 79 20 34 2d 62 79 74 65 20 61 6c  verify 4-byte al
7080: 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66 64  ignment..*/.#ifd
7090: 65 66 20 53 51 4c 49 54 45 5f 34 5f 42 59 54 45  ef SQLITE_4_BYTE
70a0: 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 0a  _ALIGNED_MALLOC.
70b0: 23 20 64 65 66 69 6e 65 20 45 49 47 48 54 5f 42  # define EIGHT_B
70c0: 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29  YTE_ALIGNMENT(X)
70d0: 20 20 20 28 28 28 28 63 68 61 72 2a 29 28 58 29     ((((char*)(X)
70e0: 20 2d 20 28 63 68 61 72 2a 29 30 29 26 33 29 3d   - (char*)0)&3)=
70f0: 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  =0).#else.# defi
7100: 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41 4c  ne EIGHT_BYTE_AL
7110: 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28 28  IGNMENT(X)   (((
7120: 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63 68  (char*)(X) - (ch
7130: 61 72 2a 29 30 29 26 37 29 3d 3d 30 29 0a 23 65  ar*)0)&7)==0).#e
7140: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 61  ndif../*.** Disa
7150: 62 6c 65 20 4d 4d 41 50 20 6f 6e 20 70 6c 61 74  ble MMAP on plat
7160: 66 6f 72 6d 73 20 77 68 65 72 65 20 69 74 20 69  forms where it i
7170: 73 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74 20 77  s known to not w
7180: 6f 72 6b 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  ork.*/.#if defin
7190: 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20  ed(__OpenBSD__) 
71a0: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 51 4e 58  || defined(__QNX
71b0: 4e 54 4f 5f 5f 29 0a 23 20 75 6e 64 65 66 20 53  NTO__).# undef S
71c0: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
71d0: 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  IZE.# define SQL
71e0: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
71f0: 45 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  E 0.#endif../*.*
7200: 2a 20 44 65 66 61 75 6c 74 20 6d 61 78 69 6d 75  * Default maximu
7210: 6d 20 73 69 7a 65 20 6f 66 20 6d 65 6d 6f 72 79  m size of memory
7220: 20 75 73 65 64 20 62 79 20 6d 65 6d 6f 72 79 2d   used by memory-
7230: 6d 61 70 70 65 64 20 49 2f 4f 20 69 6e 20 74 68  mapped I/O in th
7240: 65 20 56 46 53 0a 2a 2f 0a 23 69 66 64 65 66 20  e VFS.*/.#ifdef 
7250: 5f 5f 41 50 50 4c 45 5f 5f 0a 23 20 69 6e 63 6c  __APPLE__.# incl
7260: 75 64 65 20 3c 54 61 72 67 65 74 43 6f 6e 64 69  ude <TargetCondi
7270: 74 69 6f 6e 61 6c 73 2e 68 3e 0a 23 65 6e 64 69  tionals.h>.#endi
7280: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
7290: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23  _MAX_MMAP_SIZE.#
72a0: 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 6c 69   if defined(__li
72b0: 6e 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64 65  nux__) \.  || de
72c0: 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 5c 0a  fined(_WIN32) \.
72d0: 20 20 7c 7c 20 28 64 65 66 69 6e 65 64 28 5f 5f    || (defined(__
72e0: 41 50 50 4c 45 5f 5f 29 20 26 26 20 64 65 66 69  APPLE__) && defi
72f0: 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f 29 29 20 5c  ned(__MACH__)) \
7300: 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f  .  || defined(__
7310: 73 75 6e 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69  sun) \.  || defi
7320: 6e 65 64 28 5f 5f 46 72 65 65 42 53 44 5f 5f 29  ned(__FreeBSD__)
7330: 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28   \.  || defined(
7340: 5f 5f 44 72 61 67 6f 6e 46 6c 79 5f 5f 29 0a 23  __DragonFly__).#
7350: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
7360: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30  _MAX_MMAP_SIZE 0
7370: 78 37 66 66 66 30 30 30 30 20 20 2f 2a 20 32 31  x7fff0000  /* 21
7380: 34 37 34 31 38 31 31 32 20 2a 2f 0a 23 20 65 6c  47418112 */.# el
7390: 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  se.#   define SQ
73a0: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
73b0: 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23 20 64  ZE 0.# endif.# d
73c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
73d0: 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78 63 20 31 20  _MMAP_SIZE_xc 1 
73e0: 2f 2a 20 65 78 63 6c 75 64 65 20 66 72 6f 6d 20  /* exclude from 
73f0: 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69  ctime.c */.#endi
7400: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 65 66  f../*.** The def
7410: 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20 69  ault MMAP_SIZE i
7420: 73 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c 20 70 6c  s zero on all pl
7430: 61 74 66 6f 72 6d 73 2e 20 20 4f 72 2c 20 65 76  atforms.  Or, ev
7440: 65 6e 20 69 66 20 61 20 6c 61 72 67 65 72 0a 2a  en if a larger.*
7450: 2a 20 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53  * default MMAP_S
7460: 49 5a 45 20 69 73 20 73 70 65 63 69 66 69 65 64  IZE is specified
7470: 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65   at compile-time
7480: 2c 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61 74  , make sure that
7490: 20 69 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20   it does.** not 
74a0: 65 78 63 65 65 64 20 74 68 65 20 6d 61 78 69 6d  exceed the maxim
74b0: 75 6d 20 6d 6d 61 70 20 73 69 7a 65 2e 0a 2a 2f  um mmap size..*/
74c0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
74d0: 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a  DEFAULT_MMAP_SIZ
74e0: 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  E.# define SQLIT
74f0: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
7500: 49 5a 45 20 30 0a 23 20 64 65 66 69 6e 65 20 53  IZE 0.# define S
7510: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d  QLITE_DEFAULT_MM
7520: 41 50 5f 53 49 5a 45 5f 78 63 20 31 20 20 2f 2a  AP_SIZE_xc 1  /*
7530: 20 45 78 63 6c 75 64 65 20 66 72 6f 6d 20 63 74   Exclude from ct
7540: 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69 66 0a  ime.c */.#endif.
7550: 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  #if SQLITE_DEFAU
7560: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53 51 4c  LT_MMAP_SIZE>SQL
7570: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
7580: 45 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  E.# undef SQLITE
7590: 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49  _DEFAULT_MMAP_SI
75a0: 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  ZE.# define SQLI
75b0: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
75c0: 53 49 5a 45 20 53 51 4c 49 54 45 5f 4d 41 58 5f  SIZE SQLITE_MAX_
75d0: 4d 4d 41 50 5f 53 49 5a 45 0a 23 65 6e 64 69 66  MMAP_SIZE.#endif
75e0: 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 6c 79 20 6f 6e 65  ../*.** Only one
75f0: 20 6f 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c   of SQLITE_ENABL
7600: 45 5f 53 54 41 54 33 20 6f 72 20 53 51 4c 49 54  E_STAT3 or SQLIT
7610: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 20 63  E_ENABLE_STAT4 c
7620: 61 6e 20 62 65 20 64 65 66 69 6e 65 64 2e 0a 2a  an be defined..*
7630: 2a 20 50 72 69 6f 72 69 74 79 20 69 73 20 67 69  * Priority is gi
7640: 76 65 6e 20 74 6f 20 53 51 4c 49 54 45 5f 45 4e  ven to SQLITE_EN
7650: 41 42 4c 45 5f 53 54 41 54 34 2e 20 20 49 66 20  ABLE_STAT4.  If 
7660: 65 69 74 68 65 72 20 61 72 65 20 64 65 66 69 6e  either are defin
7670: 65 64 2c 20 61 6c 73 6f 0a 2a 2a 20 64 65 66 69  ed, also.** defi
7680: 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
7690: 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a  _STAT3_OR_STAT4.
76a0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
76b0: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 0a 23 20  _ENABLE_STAT4.# 
76c0: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  undef SQLITE_ENA
76d0: 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65 66 69  BLE_STAT3.# defi
76e0: 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
76f0: 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 20  _STAT3_OR_STAT4 
7700: 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 45  1.#elif SQLITE_E
7710: 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65  NABLE_STAT3.# de
7720: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  fine SQLITE_ENAB
7730: 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
7740: 34 20 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45  4 1.#elif SQLITE
7750: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
7760: 5f 53 54 41 54 34 0a 23 20 75 6e 64 65 66 20 53  _STAT4.# undef S
7770: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
7780: 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23 65 6e 64  T3_OR_STAT4.#end
7790: 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 45 4c 45 43 54  if../*.** SELECT
77a0: 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 77 69  TRACE_ENABLED wi
77b0: 6c 6c 20 62 65 20 65 69 74 68 65 72 20 31 20 6f  ll be either 1 o
77c0: 72 20 30 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  r 0 depending on
77d0: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 0a   whether or not.
77e0: 2a 2a 20 74 68 65 20 53 65 6c 65 63 74 20 71 75  ** the Select qu
77f0: 65 72 79 20 67 65 6e 65 72 61 74 6f 72 20 74 72  ery generator tr
7800: 61 63 69 6e 67 20 6c 6f 67 69 63 20 69 73 20 74  acing logic is t
7810: 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66  urned on..*/.#if
7820: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
7830: 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65  DEBUG) || define
7840: 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
7850: 53 45 4c 45 43 54 54 52 41 43 45 29 0a 23 20 64  SELECTTRACE).# d
7860: 65 66 69 6e 65 20 53 45 4c 45 43 54 54 52 41 43  efine SELECTTRAC
7870: 45 5f 45 4e 41 42 4c 45 44 20 31 0a 23 65 6c 73  E_ENABLED 1.#els
7880: 65 0a 23 20 64 65 66 69 6e 65 20 53 45 4c 45 43  e.# define SELEC
7890: 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 30  TTRACE_ENABLED 0
78a0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
78b0: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
78c0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
78d0: 63 74 75 72 65 20 69 73 20 75 73 65 64 20 74 6f  cture is used to
78e0: 20 73 74 6f 72 65 20 74 68 65 20 62 75 73 79 2d   store the busy-
78f0: 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62  handler.** callb
7900: 61 63 6b 20 66 6f 72 20 61 20 67 69 76 65 6e 20  ack for a given 
7910: 73 71 6c 69 74 65 20 68 61 6e 64 6c 65 2e 0a 2a  sqlite handle..*
7920: 2a 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 2e  *.** The sqlite.
7930: 62 75 73 79 48 61 6e 64 6c 65 72 20 6d 65 6d 62  busyHandler memb
7940: 65 72 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  er of the sqlite
7950: 20 73 74 72 75 63 74 20 63 6f 6e 74 61 69 6e 73   struct contains
7960: 20 74 68 65 20 62 75 73 79 0a 2a 2a 20 63 61 6c   the busy.** cal
7970: 6c 62 61 63 6b 20 66 6f 72 20 74 68 65 20 64 61  lback for the da
7980: 74 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 20 45  tabase handle. E
7990: 61 63 68 20 70 61 67 65 72 20 6f 70 65 6e 65 64  ach pager opened
79a0: 20 76 69 61 20 74 68 65 20 73 71 6c 69 74 65 0a   via the sqlite.
79b0: 2a 2a 20 68 61 6e 64 6c 65 20 69 73 20 70 61 73  ** handle is pas
79c0: 73 65 64 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  sed a pointer to
79d0: 20 73 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64   sqlite.busyHand
79e0: 6c 65 72 2e 20 54 68 65 20 62 75 73 79 2d 68 61  ler. The busy-ha
79f0: 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63  ndler.** callbac
7a00: 6b 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 69  k is currently i
7a10: 6e 76 6f 6b 65 64 20 6f 6e 6c 79 20 66 72 6f 6d  nvoked only from
7a20: 20 77 69 74 68 69 6e 20 70 61 67 65 72 2e 63 2e   within pager.c.
7a30: 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75  .*/.typedef stru
7a40: 63 74 20 42 75 73 79 48 61 6e 64 6c 65 72 20 42  ct BusyHandler B
7a50: 75 73 79 48 61 6e 64 6c 65 72 3b 0a 73 74 72 75  usyHandler;.stru
7a60: 63 74 20 42 75 73 79 48 61 6e 64 6c 65 72 20 7b  ct BusyHandler {
7a70: 0a 20 20 69 6e 74 20 28 2a 78 46 75 6e 63 29 28  .  int (*xFunc)(
7a80: 76 6f 69 64 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a  void *,int);  /*
7a90: 20 54 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61   The busy callba
7aa0: 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41  ck */.  void *pA
7ab0: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
7ac0: 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 20     /* First arg 
7ad0: 74 6f 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b  to busy callback
7ae0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75 73 79 3b   */.  int nBusy;
7af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b00: 20 2f 2a 20 49 6e 63 72 65 6d 65 6e 74 65 64 20   /* Incremented 
7b10: 77 69 74 68 20 65 61 63 68 20 62 75 73 79 20 63  with each busy c
7b20: 61 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  all */.};../*.**
7b30: 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 6d 61 73   Name of the mas
7b40: 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62  ter database tab
7b50: 6c 65 2e 20 20 54 68 65 20 6d 61 73 74 65 72 20  le.  The master 
7b60: 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 0a 2a  database table.*
7b70: 2a 20 69 73 20 61 20 73 70 65 63 69 61 6c 20 74  * is a special t
7b80: 61 62 6c 65 20 74 68 61 74 20 68 6f 6c 64 73 20  able that holds 
7b90: 74 68 65 20 6e 61 6d 65 73 20 61 6e 64 20 61 74  the names and at
7ba0: 74 72 69 62 75 74 65 73 20 6f 66 20 61 6c 6c 0a  tributes of all.
7bb0: 2a 2a 20 75 73 65 72 20 74 61 62 6c 65 73 20 61  ** user tables a
7bc0: 6e 64 20 69 6e 64 69 63 65 73 2e 0a 2a 2f 0a 23  nd indices..*/.#
7bd0: 64 65 66 69 6e 65 20 4d 41 53 54 45 52 5f 4e 41  define MASTER_NA
7be0: 4d 45 20 20 20 20 20 20 20 22 73 71 6c 69 74 65  ME       "sqlite
7bf0: 5f 6d 61 73 74 65 72 22 0a 23 64 65 66 69 6e 65  _master".#define
7c00: 20 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d   TEMP_MASTER_NAM
7c10: 45 20 20 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f  E  "sqlite_temp_
7c20: 6d 61 73 74 65 72 22 0a 0a 2f 2a 0a 2a 2a 20 54  master"../*.** T
7c30: 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20  he root-page of 
7c40: 74 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62  the master datab
7c50: 61 73 65 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64  ase table..*/.#d
7c60: 65 66 69 6e 65 20 4d 41 53 54 45 52 5f 52 4f 4f  efine MASTER_ROO
7c70: 54 20 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a  T       1../*.**
7c80: 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   The name of the
7c90: 20 73 63 68 65 6d 61 20 74 61 62 6c 65 2e 0a 2a   schema table..*
7ca0: 2f 0a 23 64 65 66 69 6e 65 20 53 43 48 45 4d 41  /.#define SCHEMA
7cb0: 5f 54 41 42 4c 45 28 78 29 20 20 28 28 21 4f 4d  _TABLE(x)  ((!OM
7cc0: 49 54 5f 54 45 4d 50 44 42 29 26 26 28 78 3d 3d  IT_TEMPDB)&&(x==
7cd0: 31 29 3f 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e  1)?TEMP_MASTER_N
7ce0: 41 4d 45 3a 4d 41 53 54 45 52 5f 4e 41 4d 45 29  AME:MASTER_NAME)
7cf0: 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 6f 6e 76 65 6e  ../*.** A conven
7d00: 69 65 6e 63 65 20 6d 61 63 72 6f 20 74 68 61 74  ience macro that
7d10: 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d   returns the num
7d20: 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20  ber of elements 
7d30: 69 6e 0a 2a 2a 20 61 6e 20 61 72 72 61 79 2e 0a  in.** an array..
7d40: 2a 2f 0a 23 64 65 66 69 6e 65 20 41 72 72 61 79  */.#define Array
7d50: 53 69 7a 65 28 58 29 20 20 20 20 28 28 69 6e 74  Size(X)    ((int
7d60: 29 28 73 69 7a 65 6f 66 28 58 29 2f 73 69 7a 65  )(sizeof(X)/size
7d70: 6f 66 28 58 5b 30 5d 29 29 29 0a 0a 2f 2a 0a 2a  of(X[0])))../*.*
7d80: 2a 20 44 65 74 65 72 6d 69 6e 65 20 69 66 20 74  * Determine if t
7d90: 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61  he argument is a
7da0: 20 70 6f 77 65 72 20 6f 66 20 74 77 6f 0a 2a 2f   power of two.*/
7db0: 0a 23 64 65 66 69 6e 65 20 49 73 50 6f 77 65 72  .#define IsPower
7dc0: 4f 66 54 77 6f 28 58 29 20 28 28 28 58 29 26 28  OfTwo(X) (((X)&(
7dd0: 28 58 29 2d 31 29 29 3d 3d 30 29 0a 0a 2f 2a 0a  (X)-1))==0)../*.
7de0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
7df0: 20 76 61 6c 75 65 20 61 73 20 61 20 64 65 73 74   value as a dest
7e00: 72 75 63 74 6f 72 20 6d 65 61 6e 73 20 74 6f 20  ructor means to 
7e10: 75 73 65 20 73 71 6c 69 74 65 33 44 62 46 72 65  use sqlite3DbFre
7e20: 65 28 29 2e 0a 2a 2a 20 54 68 65 20 73 71 6c 69  e()..** The sqli
7e30: 74 65 33 44 62 46 72 65 65 28 29 20 72 6f 75 74  te3DbFree() rout
7e40: 69 6e 65 20 72 65 71 75 69 72 65 73 20 74 77 6f  ine requires two
7e50: 20 70 61 72 61 6d 65 74 65 72 73 20 69 6e 73 74   parameters inst
7e60: 65 61 64 20 6f 66 20 74 68 65 0a 2a 2a 20 6f 6e  ead of the.** on
7e70: 65 20 70 61 72 61 6d 65 74 65 72 20 74 68 61 74  e parameter that
7e80: 20 64 65 73 74 72 75 63 74 6f 72 73 20 6e 6f 72   destructors nor
7e90: 6d 61 6c 6c 79 20 77 61 6e 74 2e 20 20 53 6f 20  mally want.  So 
7ea0: 77 65 20 68 61 76 65 20 74 6f 20 69 6e 74 72 6f  we have to intro
7eb0: 64 75 63 65 0a 2a 2a 20 74 68 69 73 20 6d 61 67  duce.** this mag
7ec0: 69 63 20 76 61 6c 75 65 20 74 68 61 74 20 74 68  ic value that th
7ed0: 65 20 63 6f 64 65 20 6b 6e 6f 77 73 20 74 6f 20  e code knows to 
7ee0: 68 61 6e 64 6c 65 20 64 69 66 66 65 72 65 6e 74  handle different
7ef0: 6c 79 2e 20 20 41 6e 79 0a 2a 2a 20 70 6f 69 6e  ly.  Any.** poin
7f00: 74 65 72 20 77 69 6c 6c 20 77 6f 72 6b 20 68 65  ter will work he
7f10: 72 65 20 61 73 20 6c 6f 6e 67 20 61 73 20 69 74  re as long as it
7f20: 20 69 73 20 64 69 73 74 69 6e 63 74 20 66 72 6f   is distinct fro
7f30: 6d 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 0a  m SQLITE_STATIC.
7f40: 2a 2a 20 61 6e 64 20 53 51 4c 49 54 45 5f 54 52  ** and SQLITE_TR
7f50: 41 4e 53 49 45 4e 54 2e 0a 2a 2f 0a 23 64 65 66  ANSIENT..*/.#def
7f60: 69 6e 65 20 53 51 4c 49 54 45 5f 44 59 4e 41 4d  ine SQLITE_DYNAM
7f70: 49 43 20 20 20 28 28 73 71 6c 69 74 65 33 5f 64  IC   ((sqlite3_d
7f80: 65 73 74 72 75 63 74 6f 72 5f 74 79 70 65 29 73  estructor_type)s
7f90: 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65  qlite3MallocSize
7fa0: 29 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 53 51  )../*.** When SQ
7fb0: 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20 69 73  LITE_OMIT_WSD is
7fc0: 20 64 65 66 69 6e 65 64 2c 20 69 74 20 6d 65 61   defined, it mea
7fd0: 6e 73 20 74 68 61 74 20 74 68 65 20 74 61 72 67  ns that the targ
7fe0: 65 74 20 70 6c 61 74 66 6f 72 6d 20 64 6f 65 73  et platform does
7ff0: 0a 2a 2a 20 6e 6f 74 20 73 75 70 70 6f 72 74 20  .** not support 
8000: 57 72 69 74 61 62 6c 65 20 53 74 61 74 69 63 20  Writable Static 
8010: 44 61 74 61 20 28 57 53 44 29 20 73 75 63 68 20  Data (WSD) such 
8020: 61 73 20 67 6c 6f 62 61 6c 20 61 6e 64 20 73 74  as global and st
8030: 61 74 69 63 20 76 61 72 69 61 62 6c 65 73 2e 0a  atic variables..
8040: 2a 2a 20 41 6c 6c 20 76 61 72 69 61 62 6c 65 73  ** All variables
8050: 20 6d 75 73 74 20 65 69 74 68 65 72 20 62 65 20   must either be 
8060: 6f 6e 20 74 68 65 20 73 74 61 63 6b 20 6f 72 20  on the stack or 
8070: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
8080: 63 61 74 65 64 20 66 72 6f 6d 0a 2a 2a 20 74 68  cated from.** th
8090: 65 20 68 65 61 70 2e 20 20 57 68 65 6e 20 57 53  e heap.  When WS
80a0: 44 20 69 73 20 75 6e 73 75 70 70 6f 72 74 65 64  D is unsupported
80b0: 2c 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 64  , the variable d
80c0: 65 63 6c 61 72 61 74 69 6f 6e 73 20 73 63 61 74  eclarations scat
80d0: 74 65 72 65 64 0a 2a 2a 20 74 68 72 6f 75 67 68  tered.** through
80e0: 6f 75 74 20 74 68 65 20 53 51 4c 69 74 65 20 63  out the SQLite c
80f0: 6f 64 65 20 6d 75 73 74 20 62 65 63 6f 6d 65 20  ode must become 
8100: 63 6f 6e 73 74 61 6e 74 73 20 69 6e 73 74 65 61  constants instea
8110: 64 2e 20 20 54 68 65 20 53 51 4c 49 54 45 5f 57  d.  The SQLITE_W
8120: 53 44 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75  SD.** macro is u
8130: 73 65 64 20 66 6f 72 20 74 68 69 73 20 70 75 72  sed for this pur
8140: 70 6f 73 65 2e 20 20 41 6e 64 20 69 6e 73 74 65  pose.  And inste
8150: 61 64 20 6f 66 20 72 65 66 65 72 65 6e 63 69 6e  ad of referencin
8160: 67 20 74 68 65 20 76 61 72 69 61 62 6c 65 0a 2a  g the variable.*
8170: 2a 20 64 69 72 65 63 74 6c 79 2c 20 77 65 20 75  * directly, we u
8180: 73 65 20 69 74 73 20 63 6f 6e 73 74 61 6e 74 20  se its constant 
8190: 61 73 20 61 20 6b 65 79 20 74 6f 20 6c 6f 6f 6b  as a key to look
81a0: 75 70 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20  up the run-time 
81b0: 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 62 75 66  allocated.** buf
81c0: 66 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20 72  fer that holds r
81d0: 65 61 6c 20 76 61 72 69 61 62 6c 65 2e 20 20 54  eal variable.  T
81e0: 68 65 20 63 6f 6e 73 74 61 6e 74 20 69 73 20 61  he constant is a
81f0: 6c 73 6f 20 74 68 65 20 69 6e 69 74 69 61 6c 69  lso the initiali
8200: 7a 65 72 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72  zer.** for the r
8210: 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65  un-time allocate
8220: 64 20 62 75 66 66 65 72 2e 0a 2a 2a 0a 2a 2a 20  d buffer..**.** 
8230: 49 6e 20 74 68 65 20 75 73 75 61 6c 20 63 61 73  In the usual cas
8240: 65 20 77 68 65 72 65 20 57 53 44 20 69 73 20 73  e where WSD is s
8250: 75 70 70 6f 72 74 65 64 2c 20 74 68 65 20 53 51  upported, the SQ
8260: 4c 49 54 45 5f 57 53 44 20 61 6e 64 20 47 4c 4f  LITE_WSD and GLO
8270: 42 41 4c 0a 2a 2a 20 6d 61 63 72 6f 73 20 62 65  BAL.** macros be
8280: 63 6f 6d 65 20 6e 6f 2d 6f 70 73 20 61 6e 64 20  come no-ops and 
8290: 68 61 76 65 20 7a 65 72 6f 20 70 65 72 66 6f 72  have zero perfor
82a0: 6d 61 6e 63 65 20 69 6d 70 61 63 74 2e 0a 2a 2f  mance impact..*/
82b0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
82c0: 4d 49 54 5f 57 53 44 0a 20 20 23 64 65 66 69 6e  MIT_WSD.  #defin
82d0: 65 20 53 51 4c 49 54 45 5f 57 53 44 20 63 6f 6e  e SQLITE_WSD con
82e0: 73 74 0a 20 20 23 64 65 66 69 6e 65 20 47 4c 4f  st.  #define GLO
82f0: 42 41 4c 28 74 2c 76 29 20 28 2a 28 74 2a 29 73  BAL(t,v) (*(t*)s
8300: 71 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64 28  qlite3_wsd_find(
8310: 28 76 6f 69 64 2a 29 26 28 76 29 2c 20 73 69 7a  (void*)&(v), siz
8320: 65 6f 66 28 76 29 29 29 0a 20 20 23 64 65 66 69  eof(v))).  #defi
8330: 6e 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c  ne sqlite3Global
8340: 43 6f 6e 66 69 67 20 47 4c 4f 42 41 4c 28 73 74  Config GLOBAL(st
8350: 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66  ruct Sqlite3Conf
8360: 69 67 2c 20 73 71 6c 69 74 65 33 43 6f 6e 66 69  ig, sqlite3Confi
8370: 67 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  g).  int sqlite3
8380: 5f 77 73 64 5f 69 6e 69 74 28 69 6e 74 20 4e 2c  _wsd_init(int N,
8390: 20 69 6e 74 20 4a 29 3b 0a 20 20 76 6f 69 64 20   int J);.  void 
83a0: 2a 73 71 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e  *sqlite3_wsd_fin
83b0: 64 28 76 6f 69 64 20 2a 4b 2c 20 69 6e 74 20 4c  d(void *K, int L
83c0: 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
83d0: 6e 65 20 53 51 4c 49 54 45 5f 57 53 44 0a 20 20  ne SQLITE_WSD.  
83e0: 23 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74  #define GLOBAL(t
83f0: 2c 76 29 20 76 0a 20 20 23 64 65 66 69 6e 65 20  ,v) v.  #define 
8400: 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e  sqlite3GlobalCon
8410: 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69  fig sqlite3Confi
8420: 67 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  g.#endif../*.** 
8430: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
8440: 63 72 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f  cros are used to
8450: 20 73 75 70 70 72 65 73 73 20 63 6f 6d 70 69 6c   suppress compil
8460: 65 72 20 77 61 72 6e 69 6e 67 73 20 61 6e 64 20  er warnings and 
8470: 74 6f 0a 2a 2a 20 6d 61 6b 65 20 69 74 20 63 6c  to.** make it cl
8480: 65 61 72 20 74 6f 20 68 75 6d 61 6e 20 72 65 61  ear to human rea
8490: 64 65 72 73 20 77 68 65 6e 20 61 20 66 75 6e 63  ders when a func
84a0: 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69  tion parameter i
84b0: 73 20 64 65 6c 69 62 65 72 61 74 65 6c 79 0a 2a  s deliberately.*
84c0: 2a 20 6c 65 66 74 20 75 6e 75 73 65 64 20 77 69  * left unused wi
84d0: 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f 66  thin the body of
84e0: 20 61 20 66 75 6e 63 74 69 6f 6e 2e 20 54 68 69   a function. Thi
84f0: 73 20 75 73 75 61 6c 6c 79 20 68 61 70 70 65 6e  s usually happen
8500: 73 20 77 68 65 6e 0a 2a 2a 20 61 20 66 75 6e 63  s when.** a func
8510: 74 69 6f 6e 20 69 73 20 63 61 6c 6c 65 64 20 76  tion is called v
8520: 69 61 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 6f  ia a function po
8530: 69 6e 74 65 72 2e 20 46 6f 72 20 65 78 61 6d 70  inter. For examp
8540: 6c 65 20 74 68 65 0a 2a 2a 20 69 6d 70 6c 65 6d  le the.** implem
8550: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61 6e 20 53  entation of an S
8560: 51 4c 20 61 67 67 72 65 67 61 74 65 20 73 74 65  QL aggregate ste
8570: 70 20 63 61 6c 6c 62 61 63 6b 20 6d 61 79 20 6e  p callback may n
8580: 6f 74 20 75 73 65 20 74 68 65 0a 2a 2a 20 70 61  ot use the.** pa
8590: 72 61 6d 65 74 65 72 20 69 6e 64 69 63 61 74 69  rameter indicati
85a0: 6e 67 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ng the number of
85b0: 20 61 72 67 75 6d 65 6e 74 73 20 70 61 73 73 65   arguments passe
85c0: 64 20 74 6f 20 74 68 65 20 61 67 67 72 65 67 61  d to the aggrega
85d0: 74 65 2c 0a 2a 2a 20 69 66 20 69 74 20 6b 6e 6f  te,.** if it kno
85e0: 77 73 20 74 68 61 74 20 74 68 69 73 20 69 73 20  ws that this is 
85f0: 65 6e 66 6f 72 63 65 64 20 65 6c 73 65 77 68 65  enforced elsewhe
8600: 72 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61  re..**.** When a
8610: 20 66 75 6e 63 74 69 6f 6e 20 70 61 72 61 6d 65   function parame
8620: 74 65 72 20 69 73 20 6e 6f 74 20 75 73 65 64 20  ter is not used 
8630: 61 74 20 61 6c 6c 20 77 69 74 68 69 6e 20 74 68  at all within th
8640: 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63  e body of a func
8650: 74 69 6f 6e 2c 0a 2a 2a 20 69 74 20 69 73 20 67  tion,.** it is g
8660: 65 6e 65 72 61 6c 6c 79 20 6e 61 6d 65 64 20 22  enerally named "
8670: 4e 6f 74 55 73 65 64 22 20 6f 72 20 22 4e 6f 74  NotUsed" or "Not
8680: 55 73 65 64 32 22 20 74 6f 20 6d 61 6b 65 20 74  Used2" to make t
8690: 68 69 6e 67 73 20 65 76 65 6e 20 63 6c 65 61 72  hings even clear
86a0: 65 72 2e 0a 2a 2a 20 48 6f 77 65 76 65 72 2c 20  er..** However, 
86b0: 74 68 65 73 65 20 6d 61 63 72 6f 73 20 6d 61 79  these macros may
86c0: 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f   also be used to
86d0: 20 73 75 70 70 72 65 73 73 20 77 61 72 6e 69 6e   suppress warnin
86e0: 67 73 20 72 65 6c 61 74 65 64 20 74 6f 0a 2a 2a  gs related to.**
86f0: 20 70 61 72 61 6d 65 74 65 72 73 20 74 68 61 74   parameters that
8700: 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20   may or may not 
8710: 62 65 20 75 73 65 64 20 64 65 70 65 6e 64 69 6e  be used dependin
8720: 67 20 6f 6e 20 63 6f 6d 70 69 6c 61 74 69 6f 6e  g on compilation
8730: 20 6f 70 74 69 6f 6e 73 2e 0a 2a 2a 20 46 6f 72   options..** For
8740: 20 65 78 61 6d 70 6c 65 20 74 68 6f 73 65 20 70   example those p
8750: 61 72 61 6d 65 74 65 72 73 20 6f 6e 6c 79 20 75  arameters only u
8760: 73 65 64 20 69 6e 20 61 73 73 65 72 74 28 29 20  sed in assert() 
8770: 73 74 61 74 65 6d 65 6e 74 73 2e 20 49 6e 20 74  statements. In t
8780: 68 65 73 65 0a 2a 2a 20 63 61 73 65 73 20 74 68  hese.** cases th
8790: 65 20 70 61 72 61 6d 65 74 65 72 73 20 61 72 65  e parameters are
87a0: 20 6e 61 6d 65 64 20 61 73 20 70 65 72 20 74 68   named as per th
87b0: 65 20 75 73 75 61 6c 20 63 6f 6e 76 65 6e 74 69  e usual conventi
87c0: 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ons..*/.#define 
87d0: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
87e0: 28 78 29 20 28 76 6f 69 64 29 28 78 29 0a 23 64  (x) (void)(x).#d
87f0: 65 66 69 6e 65 20 55 4e 55 53 45 44 5f 50 41 52  efine UNUSED_PAR
8800: 41 4d 45 54 45 52 32 28 78 2c 79 29 20 55 4e 55  AMETER2(x,y) UNU
8810: 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29  SED_PARAMETER(x)
8820: 2c 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45  ,UNUSED_PARAMETE
8830: 52 28 79 29 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 77  R(y)../*.** Forw
8840: 61 72 64 20 72 65 66 65 72 65 6e 63 65 73 20 74  ard references t
8850: 6f 20 73 74 72 75 63 74 75 72 65 73 0a 2a 2f 0a  o structures.*/.
8860: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 41  typedef struct A
8870: 67 67 49 6e 66 6f 20 41 67 67 49 6e 66 6f 3b 0a  ggInfo AggInfo;.
8880: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 41  typedef struct A
8890: 75 74 68 43 6f 6e 74 65 78 74 20 41 75 74 68 43  uthContext AuthC
88a0: 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64 65 66 20  ontext;.typedef 
88b0: 73 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e  struct AutoincIn
88c0: 66 6f 20 41 75 74 6f 69 6e 63 49 6e 66 6f 3b 0a  fo AutoincInfo;.
88d0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 42  typedef struct B
88e0: 69 74 76 65 63 20 42 69 74 76 65 63 3b 0a 74 79  itvec Bitvec;.ty
88f0: 70 65 64 65 66 20 73 74 72 75 63 74 20 43 6f 6c  pedef struct Col
8900: 6c 53 65 71 20 43 6f 6c 6c 53 65 71 3b 0a 74 79  lSeq CollSeq;.ty
8910: 70 65 64 65 66 20 73 74 72 75 63 74 20 43 6f 6c  pedef struct Col
8920: 75 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a 74 79 70 65  umn Column;.type
8930: 64 65 66 20 73 74 72 75 63 74 20 44 62 20 44 62  def struct Db Db
8940: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8950: 20 53 63 68 65 6d 61 20 53 63 68 65 6d 61 3b 0a   Schema Schema;.
8960: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 45  typedef struct E
8970: 78 70 72 20 45 78 70 72 3b 0a 74 79 70 65 64 65  xpr Expr;.typede
8980: 66 20 73 74 72 75 63 74 20 45 78 70 72 4c 69 73  f struct ExprLis
8990: 74 20 45 78 70 72 4c 69 73 74 3b 0a 74 79 70 65  t ExprList;.type
89a0: 64 65 66 20 73 74 72 75 63 74 20 45 78 70 72 53  def struct ExprS
89b0: 70 61 6e 20 45 78 70 72 53 70 61 6e 3b 0a 74 79  pan ExprSpan;.ty
89c0: 70 65 64 65 66 20 73 74 72 75 63 74 20 46 4b 65  pedef struct FKe
89d0: 79 20 46 4b 65 79 3b 0a 74 79 70 65 64 65 66 20  y FKey;.typedef 
89e0: 73 74 72 75 63 74 20 46 75 6e 63 44 65 73 74 72  struct FuncDestr
89f0: 75 63 74 6f 72 20 46 75 6e 63 44 65 73 74 72 75  uctor FuncDestru
8a00: 63 74 6f 72 3b 0a 74 79 70 65 64 65 66 20 73 74  ctor;.typedef st
8a10: 72 75 63 74 20 46 75 6e 63 44 65 66 20 46 75 6e  ruct FuncDef Fun
8a20: 63 44 65 66 3b 0a 74 79 70 65 64 65 66 20 73 74  cDef;.typedef st
8a30: 72 75 63 74 20 46 75 6e 63 44 65 66 48 61 73 68  ruct FuncDefHash
8a40: 20 46 75 6e 63 44 65 66 48 61 73 68 3b 0a 74 79   FuncDefHash;.ty
8a50: 70 65 64 65 66 20 73 74 72 75 63 74 20 49 64 4c  pedef struct IdL
8a60: 69 73 74 20 49 64 4c 69 73 74 3b 0a 74 79 70 65  ist IdList;.type
8a70: 64 65 66 20 73 74 72 75 63 74 20 49 6e 64 65 78  def struct Index
8a80: 20 49 6e 64 65 78 3b 0a 74 79 70 65 64 65 66 20   Index;.typedef 
8a90: 73 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70  struct IndexSamp
8aa0: 6c 65 20 49 6e 64 65 78 53 61 6d 70 6c 65 3b 0a  le IndexSample;.
8ab0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4b  typedef struct K
8ac0: 65 79 43 6c 61 73 73 20 4b 65 79 43 6c 61 73 73  eyClass KeyClass
8ad0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8ae0: 20 4b 65 79 49 6e 66 6f 20 4b 65 79 49 6e 66 6f   KeyInfo KeyInfo
8af0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8b00: 20 4c 6f 6f 6b 61 73 69 64 65 20 4c 6f 6f 6b 61   Lookaside Looka
8b10: 73 69 64 65 3b 0a 74 79 70 65 64 65 66 20 73 74  side;.typedef st
8b20: 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c  ruct LookasideSl
8b30: 6f 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  ot LookasideSlot
8b40: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8b50: 20 4d 6f 64 75 6c 65 20 4d 6f 64 75 6c 65 3b 0a   Module Module;.
8b60: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4e  typedef struct N
8b70: 61 6d 65 43 6f 6e 74 65 78 74 20 4e 61 6d 65 43  ameContext NameC
8b80: 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64 65 66 20  ontext;.typedef 
8b90: 73 74 72 75 63 74 20 50 61 72 73 65 20 50 61 72  struct Parse Par
8ba0: 73 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  se;.typedef stru
8bb0: 63 74 20 50 72 65 55 70 64 61 74 65 20 50 72 65  ct PreUpdate Pre
8bc0: 55 70 64 61 74 65 3b 0a 74 79 70 65 64 65 66 20  Update;.typedef 
8bd0: 73 74 72 75 63 74 20 50 72 69 6e 74 66 41 72 67  struct PrintfArg
8be0: 75 6d 65 6e 74 73 20 50 72 69 6e 74 66 41 72 67  uments PrintfArg
8bf0: 75 6d 65 6e 74 73 3b 0a 74 79 70 65 64 65 66 20  uments;.typedef 
8c00: 73 74 72 75 63 74 20 52 6f 77 53 65 74 20 52 6f  struct RowSet Ro
8c10: 77 53 65 74 3b 0a 74 79 70 65 64 65 66 20 73 74  wSet;.typedef st
8c20: 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20 53  ruct Savepoint S
8c30: 61 76 65 70 6f 69 6e 74 3b 0a 74 79 70 65 64 65  avepoint;.typede
8c40: 66 20 73 74 72 75 63 74 20 53 65 6c 65 63 74 20  f struct Select 
8c50: 53 65 6c 65 63 74 3b 0a 74 79 70 65 64 65 66 20  Select;.typedef 
8c60: 73 74 72 75 63 74 20 53 51 4c 69 74 65 54 68 72  struct SQLiteThr
8c70: 65 61 64 20 53 51 4c 69 74 65 54 68 72 65 61 64  ead SQLiteThread
8c80: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8c90: 20 53 65 6c 65 63 74 44 65 73 74 20 53 65 6c 65   SelectDest Sele
8ca0: 63 74 44 65 73 74 3b 0a 74 79 70 65 64 65 66 20  ctDest;.typedef 
8cb0: 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 53  struct SrcList S
8cc0: 72 63 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20  rcList;.typedef 
8cd0: 73 74 72 75 63 74 20 53 74 72 41 63 63 75 6d 20  struct StrAccum 
8ce0: 53 74 72 41 63 63 75 6d 3b 0a 74 79 70 65 64 65  StrAccum;.typede
8cf0: 66 20 73 74 72 75 63 74 20 54 61 62 6c 65 20 54  f struct Table T
8d00: 61 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74  able;.typedef st
8d10: 72 75 63 74 20 54 61 62 6c 65 4c 6f 63 6b 20 54  ruct TableLock T
8d20: 61 62 6c 65 4c 6f 63 6b 3b 0a 74 79 70 65 64 65  ableLock;.typede
8d30: 66 20 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 54  f struct Token T
8d40: 6f 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20 73 74  oken;.typedef st
8d50: 72 75 63 74 20 54 72 65 65 56 69 65 77 20 54 72  ruct TreeView Tr
8d60: 65 65 56 69 65 77 3b 0a 74 79 70 65 64 65 66 20  eeView;.typedef 
8d70: 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20 54  struct Trigger T
8d80: 72 69 67 67 65 72 3b 0a 74 79 70 65 64 65 66 20  rigger;.typedef 
8d90: 73 74 72 75 63 74 20 54 72 69 67 67 65 72 50 72  struct TriggerPr
8da0: 67 20 54 72 69 67 67 65 72 50 72 67 3b 0a 74 79  g TriggerPrg;.ty
8db0: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69  pedef struct Tri
8dc0: 67 67 65 72 53 74 65 70 20 54 72 69 67 67 65 72  ggerStep Trigger
8dd0: 53 74 65 70 3b 0a 74 79 70 65 64 65 66 20 73 74  Step;.typedef st
8de0: 72 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63  ruct UnpackedRec
8df0: 6f 72 64 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ord UnpackedReco
8e00: 72 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  rd;.typedef stru
8e10: 63 74 20 56 54 61 62 6c 65 20 56 54 61 62 6c 65  ct VTable VTable
8e20: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8e30: 20 56 74 61 62 43 74 78 20 56 74 61 62 43 74 78   VtabCtx VtabCtx
8e40: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8e50: 20 57 61 6c 6b 65 72 20 57 61 6c 6b 65 72 3b 0a   Walker Walker;.
8e60: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57  typedef struct W
8e70: 68 65 72 65 49 6e 66 6f 20 57 68 65 72 65 49 6e  hereInfo WhereIn
8e80: 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  fo;.typedef stru
8e90: 63 74 20 57 69 74 68 20 57 69 74 68 3b 0a 0a 2f  ct With With;../
8ea0: 2a 20 41 20 56 4c 69 73 74 20 6f 62 6a 65 63 74  * A VList object
8eb0: 20 72 65 63 6f 72 64 73 20 61 20 6d 61 70 70 69   records a mappi
8ec0: 6e 67 20 62 65 74 77 65 65 6e 20 70 61 72 61 6d  ng between param
8ed0: 65 74 65 72 73 2f 76 61 72 69 61 62 6c 65 73 2f  eters/variables/
8ee0: 77 69 6c 64 63 61 72 64 73 0a 2a 2a 20 69 6e 20  wildcards.** in 
8ef0: 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  the SQL statemen
8f00: 74 20 28 73 75 63 68 20 61 73 20 24 61 62 63 2c  t (such as $abc,
8f10: 20 40 70 71 72 2c 20 6f 72 20 3a 78 79 7a 29 20   @pqr, or :xyz) 
8f20: 61 6e 64 20 74 68 65 20 69 6e 74 65 67 65 72 0a  and the integer.
8f30: 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 75 6d 62  ** variable numb
8f40: 65 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  er associated wi
8f50: 74 68 20 74 68 61 74 20 70 61 72 61 6d 65 74 65  th that paramete
8f60: 72 2e 20 20 53 65 65 20 74 68 65 20 66 6f 72 6d  r.  See the form
8f70: 61 74 20 64 65 73 63 72 69 70 74 69 6f 6e 0a 2a  at description.*
8f80: 2a 20 6f 6e 20 74 68 65 20 73 71 6c 69 74 65 33  * on the sqlite3
8f90: 56 4c 69 73 74 41 64 64 28 29 20 72 6f 75 74 69  VListAdd() routi
8fa0: 6e 65 20 66 6f 72 20 6d 6f 72 65 20 69 6e 66 6f  ne for more info
8fb0: 72 6d 61 74 69 6f 6e 2e 20 20 41 20 56 4c 69 73  rmation.  A VLis
8fc0: 74 20 69 73 20 72 65 61 6c 6c 79 0a 2a 2a 20 6a  t is really.** j
8fd0: 75 73 74 20 61 6e 20 61 72 72 61 79 20 6f 66 20  ust an array of 
8fe0: 69 6e 74 65 67 65 72 73 2e 0a 2a 2f 0a 74 79 70  integers..*/.typ
8ff0: 65 64 65 66 20 69 6e 74 20 56 4c 69 73 74 3b 0a  edef int VList;.
9000: 0a 2f 2a 0a 2a 2a 20 44 65 66 65 72 20 73 6f 75  ./*.** Defer sou
9010: 72 63 69 6e 67 20 76 64 62 65 2e 68 20 61 6e 64  rcing vdbe.h and
9020: 20 62 74 72 65 65 2e 68 20 75 6e 74 69 6c 20 61   btree.h until a
9030: 66 74 65 72 20 74 68 65 20 22 75 38 22 20 61 6e  fter the "u8" an
9040: 64 0a 2a 2a 20 22 42 75 73 79 48 61 6e 64 6c 65  d.** "BusyHandle
9050: 72 22 20 74 79 70 65 64 65 66 73 2e 20 76 64 62  r" typedefs. vdb
9060: 65 2e 68 20 61 6c 73 6f 20 72 65 71 75 69 72 65  e.h also require
9070: 73 20 61 20 66 65 77 20 6f 66 20 74 68 65 20 6f  s a few of the o
9080: 70 61 71 75 65 0a 2a 2a 20 70 6f 69 6e 74 65 72  paque.** pointer
9090: 20 74 79 70 65 73 20 28 69 2e 65 2e 20 46 75 6e   types (i.e. Fun
90a0: 63 44 65 66 29 20 64 65 66 69 6e 65 64 20 61 62  cDef) defined ab
90b0: 6f 76 65 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65  ove..*/.#include
90c0: 20 22 62 74 72 65 65 2e 68 22 0a 23 69 6e 63 6c   "btree.h".#incl
90d0: 75 64 65 20 22 76 64 62 65 2e 68 22 0a 23 69 6e  ude "vdbe.h".#in
90e0: 63 6c 75 64 65 20 22 70 61 67 65 72 2e 68 22 0a  clude "pager.h".
90f0: 23 69 6e 63 6c 75 64 65 20 22 70 63 61 63 68 65  #include "pcache
9100: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 6f 73  .h".#include "os
9110: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 6d 75  .h".#include "mu
9120: 74 65 78 2e 68 22 0a 0a 2f 2a 20 54 68 65 20 53  tex.h"../* The S
9130: 51 4c 49 54 45 5f 45 58 54 52 41 5f 44 55 52 41  QLITE_EXTRA_DURA
9140: 42 4c 45 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  BLE compile-time
9150: 20 6f 70 74 69 6f 6e 20 75 73 65 64 20 74 6f 20   option used to 
9160: 73 65 74 20 74 68 65 20 64 65 66 61 75 6c 74 0a  set the default.
9170: 2a 2a 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 73  ** synchronous s
9180: 65 74 74 69 6e 67 20 74 6f 20 45 58 54 52 41 2e  etting to EXTRA.
9190: 20 20 49 74 20 69 73 20 6e 6f 20 6c 6f 6e 67 65    It is no longe
91a0: 72 20 73 75 70 70 6f 72 74 65 64 2e 0a 2a 2f 0a  r supported..*/.
91b0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 58  #ifdef SQLITE_EX
91c0: 54 52 41 5f 44 55 52 41 42 4c 45 0a 23 20 77 61  TRA_DURABLE.# wa
91d0: 72 6e 69 6e 67 20 55 73 65 20 53 51 4c 49 54 45  rning Use SQLITE
91e0: 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f  _DEFAULT_SYNCHRO
91f0: 4e 4f 55 53 3d 33 20 69 6e 73 74 65 61 64 20 6f  NOUS=3 instead o
9200: 66 20 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44  f SQLITE_EXTRA_D
9210: 55 52 41 42 4c 45 0a 23 20 64 65 66 69 6e 65 20  URABLE.# define 
9220: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53  SQLITE_DEFAULT_S
9230: 59 4e 43 48 52 4f 4e 4f 55 53 20 33 0a 23 65 6e  YNCHRONOUS 3.#en
9240: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 61 75  dif../*.** Defau
9250: 6c 74 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 6c  lt synchronous l
9260: 65 76 65 6c 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74  evels..**.** Not
9270: 65 20 74 68 61 74 20 28 66 6f 72 20 68 69 73 74  e that (for hist
9280: 6f 72 63 61 6c 20 72 65 61 73 6f 6e 73 29 20 74  orcal reasons) t
9290: 68 65 20 50 41 47 45 52 5f 53 59 4e 43 48 52 4f  he PAGER_SYNCHRO
92a0: 4e 4f 55 53 5f 2a 20 6d 61 63 72 6f 73 20 64 69  NOUS_* macros di
92b0: 66 66 65 72 0a 2a 2a 20 66 72 6f 6d 20 74 68 65  ffer.** from the
92c0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
92d0: 53 59 4e 43 48 52 4f 4e 4f 55 53 20 76 61 6c 75  SYNCHRONOUS valu
92e0: 65 20 62 79 20 31 2e 0a 2a 2a 0a 2a 2a 20 20 20  e by 1..**.**   
92f0: 20 20 20 20 20 20 20 20 50 41 47 45 52 5f 53 59          PAGER_SY
9300: 4e 43 48 52 4f 4e 4f 55 53 20 20 20 20 20 20 20  NCHRONOUS       
9310: 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e  DEFAULT_SYNCHRON
9320: 4f 55 53 0a 2a 2a 20 20 20 4f 46 46 20 20 20 20  OUS.**   OFF    
9330: 20 20 20 20 20 20 20 31 20 20 20 20 20 20 20 20         1        
9340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9350: 20 30 0a 2a 2a 20 20 20 4e 4f 52 4d 41 4c 20 20   0.**   NORMAL  
9360: 20 20 20 20 20 20 32 20 20 20 20 20 20 20 20 20        2         
9370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9380: 31 0a 2a 2a 20 20 20 46 55 4c 4c 20 20 20 20 20  1.**   FULL     
9390: 20 20 20 20 20 33 20 20 20 20 20 20 20 20 20 20       3          
93a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 32                 2
93b0: 0a 2a 2a 20 20 20 45 58 54 52 41 20 20 20 20 20  .**   EXTRA     
93c0: 20 20 20 20 34 20 20 20 20 20 20 20 20 20 20 20      4           
93d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 33 0a                3.
93e0: 2a 2a 0a 2a 2a 20 54 68 65 20 22 50 52 41 47 4d  **.** The "PRAGM
93f0: 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 22 20 73  A synchronous" s
9400: 74 61 74 65 6d 65 6e 74 20 61 6c 73 6f 20 75 73  tatement also us
9410: 65 73 20 74 68 65 20 7a 65 72 6f 2d 62 61 73 65  es the zero-base
9420: 64 20 6e 75 6d 62 65 72 73 2e 0a 2a 2a 20 49 6e  d numbers..** In
9430: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
9440: 65 20 7a 65 72 6f 2d 62 61 73 65 64 20 6e 75 6d  e zero-based num
9450: 62 65 72 73 20 61 72 65 20 75 73 65 64 20 66 6f  bers are used fo
9460: 72 20 61 6c 6c 20 65 78 74 65 72 6e 61 6c 20 69  r all external i
9470: 6e 74 65 72 66 61 63 65 73 0a 2a 2a 20 61 6e 64  nterfaces.** and
9480: 20 74 68 65 20 6f 6e 65 2d 62 61 73 65 64 20 76   the one-based v
9490: 61 6c 75 65 73 20 61 72 65 20 75 73 65 64 20 69  alues are used i
94a0: 6e 74 65 72 6e 61 6c 6c 79 2e 0a 2a 2f 0a 23 69  nternally..*/.#i
94b0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
94c0: 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53  AULT_SYNCHRONOUS
94d0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
94e0: 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f  _DEFAULT_SYNCHRO
94f0: 4e 4f 55 53 20 28 50 41 47 45 52 5f 53 59 4e 43  NOUS (PAGER_SYNC
9500: 48 52 4f 4e 4f 55 53 5f 46 55 4c 4c 2d 31 29 0a  HRONOUS_FULL-1).
9510: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
9520: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 41  QLITE_DEFAULT_WA
9530: 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 23 20  L_SYNCHRONOUS.# 
9540: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
9550: 46 41 55 4c 54 5f 57 41 4c 5f 53 59 4e 43 48 52  FAULT_WAL_SYNCHR
9560: 4f 4e 4f 55 53 20 53 51 4c 49 54 45 5f 44 45 46  ONOUS SQLITE_DEF
9570: 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53  AULT_SYNCHRONOUS
9580: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45  .#endif../*.** E
9590: 61 63 68 20 64 61 74 61 62 61 73 65 20 66 69 6c  ach database fil
95a0: 65 20 74 6f 20 62 65 20 61 63 63 65 73 73 65 64  e to be accessed
95b0: 20 62 79 20 74 68 65 20 73 79 73 74 65 6d 20 69   by the system i
95c0: 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a  s an instance.**
95d0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
95e0: 67 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 68  g structure.  Th
95f0: 65 72 65 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79  ere are normally
9600: 20 74 77 6f 20 6f 66 20 74 68 65 73 65 20 73 74   two of these st
9610: 72 75 63 74 75 72 65 73 0a 2a 2a 20 69 6e 20 74  ructures.** in t
9620: 68 65 20 73 71 6c 69 74 65 2e 61 44 62 5b 5d 20  he sqlite.aDb[] 
9630: 61 72 72 61 79 2e 20 20 61 44 62 5b 30 5d 20 69  array.  aDb[0] i
9640: 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  s the main datab
9650: 61 73 65 20 66 69 6c 65 20 61 6e 64 0a 2a 2a 20  ase file and.** 
9660: 61 44 62 5b 31 5d 20 69 73 20 74 68 65 20 64 61  aDb[1] is the da
9670: 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64  tabase file used
9680: 20 74 6f 20 68 6f 6c 64 20 74 65 6d 70 6f 72 61   to hold tempora
9690: 72 79 20 74 61 62 6c 65 73 2e 20 20 41 64 64 69  ry tables.  Addi
96a0: 74 69 6f 6e 61 6c 0a 2a 2a 20 64 61 74 61 62 61  tional.** databa
96b0: 73 65 73 20 6d 61 79 20 62 65 20 61 74 74 61 63  ses may be attac
96c0: 68 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 44  hed..*/.struct D
96d0: 62 20 7b 0a 20 20 63 68 61 72 20 2a 7a 44 62 53  b {.  char *zDbS
96e0: 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61  Name;      /* Na
96f0: 6d 65 20 6f 66 20 74 68 69 73 20 64 61 74 61 62  me of this datab
9700: 61 73 65 2e 20 28 73 63 68 65 6d 61 20 6e 61 6d  ase. (schema nam
9710: 65 2c 20 6e 6f 74 20 66 69 6c 65 6e 61 6d 65 29  e, not filename)
9720: 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74   */.  Btree *pBt
9730: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
9740: 65 20 42 2a 54 72 65 65 20 73 74 72 75 63 74 75  e B*Tree structu
9750: 72 65 20 66 6f 72 20 74 68 69 73 20 64 61 74 61  re for this data
9760: 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20 75  base file */.  u
9770: 38 20 73 61 66 65 74 79 5f 6c 65 76 65 6c 3b 20  8 safety_level; 
9780: 20 20 20 20 2f 2a 20 48 6f 77 20 61 67 67 72 65      /* How aggre
9790: 73 73 69 76 65 20 61 74 20 73 79 6e 63 69 6e 67  ssive at syncing
97a0: 20 64 61 74 61 20 74 6f 20 64 69 73 6b 20 2a 2f   data to disk */
97b0: 0a 20 20 75 38 20 62 53 79 6e 63 53 65 74 3b 20  .  u8 bSyncSet; 
97c0: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
97d0: 69 66 20 22 50 52 41 47 4d 41 20 73 79 6e 63 68  if "PRAGMA synch
97e0: 72 6f 6e 6f 75 73 3d 4e 22 20 68 61 73 20 62 65  ronous=N" has be
97f0: 65 6e 20 72 75 6e 20 2a 2f 0a 20 20 53 63 68 65  en run */.  Sche
9800: 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20  ma *pSchema;    
9810: 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 64   /* Pointer to d
9820: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 28  atabase schema (
9830: 70 6f 73 73 69 62 6c 79 20 73 68 61 72 65 64 29  possibly shared)
9840: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
9850: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
9860: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
9870: 74 75 72 65 20 73 74 6f 72 65 73 20 61 20 64 61  ture stores a da
9880: 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a  tabase schema..*
9890: 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63 68 65 6d 61  *.** Most Schema
98a0: 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61 73 73   objects are ass
98b0: 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20 42  ociated with a B
98c0: 74 72 65 65 2e 20 20 54 68 65 20 65 78 63 65 70  tree.  The excep
98d0: 74 69 6f 6e 20 69 73 0a 2a 2a 20 74 68 65 20 53  tion is.** the S
98e0: 63 68 65 6d 61 20 66 6f 72 20 74 68 65 20 54 45  chema for the TE
98f0: 4d 50 20 64 61 74 61 62 61 65 73 20 28 73 71 6c  MP databaes (sql
9900: 69 74 65 33 2e 61 44 62 5b 31 5d 29 20 77 68 69  ite3.aDb[1]) whi
9910: 63 68 20 69 73 20 66 72 65 65 2d 73 74 61 6e 64  ch is free-stand
9920: 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68 61 72 65  ing..** In share
9930: 64 20 63 61 63 68 65 20 6d 6f 64 65 2c 20 61 20  d cache mode, a 
9940: 73 69 6e 67 6c 65 20 53 63 68 65 6d 61 20 6f 62  single Schema ob
9950: 6a 65 63 74 20 63 61 6e 20 62 65 20 73 68 61 72  ject can be shar
9960: 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 0a 2a  ed by multiple.*
9970: 2a 20 42 74 72 65 65 73 20 74 68 61 74 20 72 65  * Btrees that re
9980: 66 65 72 20 74 6f 20 74 68 65 20 73 61 6d 65 20  fer to the same 
9990: 75 6e 64 65 72 6c 79 69 6e 67 20 42 74 53 68 61  underlying BtSha
99a0: 72 65 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a 0a 2a  red object..**.*
99b0: 2a 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 73  * Schema objects
99c0: 20 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c   are automatical
99d0: 6c 79 20 64 65 61 6c 6c 6f 63 61 74 65 64 20 77  ly deallocated w
99e0: 68 65 6e 20 74 68 65 20 6c 61 73 74 20 42 74 72  hen the last Btr
99f0: 65 65 20 74 68 61 74 0a 2a 2a 20 72 65 66 65 72  ee that.** refer
9a00: 65 6e 63 65 73 20 74 68 65 6d 20 69 73 20 64 65  ences them is de
9a10: 73 74 72 6f 79 65 64 2e 20 20 20 54 68 65 20 54  stroyed.   The T
9a20: 45 4d 50 20 53 63 68 65 6d 61 20 69 73 20 6d 61  EMP Schema is ma
9a30: 6e 75 61 6c 6c 79 20 66 72 65 65 64 20 62 79 0a  nually freed by.
9a40: 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65  ** sqlite3_close
9a50: 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74 68 72 65 61  ()..*.** A threa
9a60: 64 20 6d 75 73 74 20 62 65 20 68 6f 6c 64 69 6e  d must be holdin
9a70: 67 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68 65  g a mutex on the
9a80: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 42   corresponding B
9a90: 74 72 65 65 20 69 6e 20 6f 72 64 65 72 0a 2a 2a  tree in order.**
9aa0: 20 74 6f 20 61 63 63 65 73 73 20 53 63 68 65 6d   to access Schem
9ab0: 61 20 63 6f 6e 74 65 6e 74 2e 20 20 54 68 69 73  a content.  This
9ac0: 20 69 6d 70 6c 69 65 73 20 74 68 61 74 20 74 68   implies that th
9ad0: 65 20 74 68 72 65 61 64 20 6d 75 73 74 20 61 6c  e thread must al
9ae0: 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c 64 69 6e 67  so be.** holding
9af0: 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68 65 20   a mutex on the 
9b00: 73 71 6c 69 74 65 33 20 63 6f 6e 6e 65 63 74 69  sqlite3 connecti
9b10: 6f 6e 20 70 6f 69 6e 74 65 72 20 74 68 61 74 20  on pointer that 
9b20: 6f 77 6e 73 20 74 68 65 20 42 74 72 65 65 2e 0a  owns the Btree..
9b30: 2a 2a 20 46 6f 72 20 61 20 54 45 4d 50 20 53 63  ** For a TEMP Sc
9b40: 68 65 6d 61 2c 20 6f 6e 6c 79 20 74 68 65 20 63  hema, only the c
9b50: 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78 20  onnection mutex 
9b60: 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2f 0a  is required..*/.
9b70: 73 74 72 75 63 74 20 53 63 68 65 6d 61 20 7b 0a  struct Schema {.
9b80: 20 20 69 6e 74 20 73 63 68 65 6d 61 5f 63 6f 6f    int schema_coo
9b90: 6b 69 65 3b 20 20 20 2f 2a 20 44 61 74 61 62 61  kie;   /* Databa
9ba0: 73 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f  se schema versio
9bb0: 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 69  n number for thi
9bc0: 73 20 66 69 6c 65 20 2a 2f 0a 20 20 69 6e 74 20  s file */.  int 
9bd0: 69 47 65 6e 65 72 61 74 69 6f 6e 3b 20 20 20 20  iGeneration;    
9be0: 20 2f 2a 20 47 65 6e 65 72 61 74 69 6f 6e 20 63   /* Generation c
9bf0: 6f 75 6e 74 65 72 2e 20 20 49 6e 63 72 65 6d 65  ounter.  Increme
9c00: 6e 74 65 64 20 77 69 74 68 20 65 61 63 68 20 63  nted with each c
9c10: 68 61 6e 67 65 20 2a 2f 0a 20 20 48 61 73 68 20  hange */.  Hash 
9c20: 74 62 6c 48 61 73 68 3b 20 20 20 20 20 20 20 20  tblHash;        
9c30: 2f 2a 20 41 6c 6c 20 74 61 62 6c 65 73 20 69 6e  /* All tables in
9c40: 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f  dexed by name */
9c50: 0a 20 20 48 61 73 68 20 69 64 78 48 61 73 68 3b  .  Hash idxHash;
9c60: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 28          /* All (
9c70: 6e 61 6d 65 64 29 20 69 6e 64 69 63 65 73 20 69  named) indices i
9c80: 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a  ndexed by name *
9c90: 2f 0a 20 20 48 61 73 68 20 74 72 69 67 48 61 73  /.  Hash trigHas
9ca0: 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  h;       /* All 
9cb0: 74 72 69 67 67 65 72 73 20 69 6e 64 65 78 65 64  triggers indexed
9cc0: 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61   by name */.  Ha
9cd0: 73 68 20 66 6b 65 79 48 61 73 68 3b 20 20 20 20  sh fkeyHash;    
9ce0: 20 20 20 2f 2a 20 41 6c 6c 20 66 6f 72 65 69 67     /* All foreig
9cf0: 6e 20 6b 65 79 73 20 62 79 20 72 65 66 65 72 65  n keys by refere
9d00: 6e 63 65 64 20 74 61 62 6c 65 20 6e 61 6d 65 20  nced table name 
9d10: 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 53 65 71  */.  Table *pSeq
9d20: 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  Tab;      /* The
9d30: 20 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65   sqlite_sequence
9d40: 20 74 61 62 6c 65 20 75 73 65 64 20 62 79 20 41   table used by A
9d50: 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a  UTOINCREMENT */.
9d60: 20 20 75 38 20 66 69 6c 65 5f 66 6f 72 6d 61 74    u8 file_format
9d70: 3b 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61  ;      /* Schema
9d80: 20 66 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e 20   format version 
9d90: 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a 2f  for this file */
9da0: 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20  .  u8 enc;      
9db0: 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
9dc0: 65 6e 63 6f 64 69 6e 67 20 75 73 65 64 20 62 79  encoding used by
9dd0: 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a   this database *
9de0: 2f 0a 20 20 75 31 36 20 73 63 68 65 6d 61 46 6c  /.  u16 schemaFl
9df0: 61 67 73 3b 20 20 20 20 20 2f 2a 20 46 6c 61 67  ags;     /* Flag
9e00: 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
9e10: 68 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a 2f  h this schema */
9e20: 0a 20 20 69 6e 74 20 63 61 63 68 65 5f 73 69 7a  .  int cache_siz
9e30: 65 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  e;      /* Numbe
9e40: 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20 75 73  r of pages to us
9e50: 65 20 69 6e 20 74 68 65 20 63 61 63 68 65 20 2a  e in the cache *
9e60: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73  /.};../*.** Thes
9e70: 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65 20  e macros can be 
9e80: 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73 65  used to test, se
9e90: 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74 73  t, or clear bits
9ea0: 20 69 6e 20 74 68 65 0a 2a 2a 20 44 62 2e 70 53   in the.** Db.pS
9eb0: 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65  chema->flags fie
9ec0: 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44  ld..*/.#define D
9ed0: 62 48 61 73 50 72 6f 70 65 72 74 79 28 44 2c 49  bHasProperty(D,I
9ee0: 2c 50 29 20 20 20 20 20 28 28 28 44 29 2d 3e 61  ,P)     (((D)->a
9ef0: 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73  Db[I].pSchema->s
9f00: 63 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29 3d  chemaFlags&(P))=
9f10: 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20 44 62  =(P)).#define Db
9f20: 48 61 73 41 6e 79 50 72 6f 70 65 72 74 79 28 44  HasAnyProperty(D
9f30: 2c 49 2c 50 29 20 20 28 28 28 44 29 2d 3e 61 44  ,I,P)  (((D)->aD
9f40: 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63  b[I].pSchema->sc
9f50: 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29 21 3d  hemaFlags&(P))!=
9f60: 30 29 0a 23 64 65 66 69 6e 65 20 44 62 53 65 74  0).#define DbSet
9f70: 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20  Property(D,I,P) 
9f80: 20 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e      (D)->aDb[I].
9f90: 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46  pSchema->schemaF
9fa0: 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e  lags|=(P).#defin
9fb0: 65 20 44 62 43 6c 65 61 72 50 72 6f 70 65 72 74  e DbClearPropert
9fc0: 79 28 44 2c 49 2c 50 29 20 20 20 28 44 29 2d 3e  y(D,I,P)   (D)->
9fd0: 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[I].pSchema->
9fe0: 73 63 68 65 6d 61 46 6c 61 67 73 26 3d 7e 28 50  schemaFlags&=~(P
9ff0: 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  )../*.** Allowed
a000: 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20   values for the 
a010: 44 42 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67  DB.pSchema->flag
a020: 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54  s field..**.** T
a030: 68 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64  he DB_SchemaLoad
a040: 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20 61  ed flag is set a
a050: 66 74 65 72 20 74 68 65 20 64 61 74 61 62 61 73  fter the databas
a060: 65 20 73 63 68 65 6d 61 20 68 61 73 20 62 65 65  e schema has bee
a070: 6e 0a 2a 2a 20 72 65 61 64 20 69 6e 74 6f 20 69  n.** read into i
a080: 6e 74 65 72 6e 61 6c 20 68 61 73 68 20 74 61 62  nternal hash tab
a090: 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55 6e  les..**.** DB_Un
a0a0: 72 65 73 65 74 56 69 65 77 73 20 6d 65 61 6e 73  resetViews means
a0b0: 20 74 68 61 74 20 6f 6e 65 20 6f 72 20 6d 6f 72   that one or mor
a0c0: 65 20 76 69 65 77 73 20 68 61 76 65 20 63 6f 6c  e views have col
a0d0: 75 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74 0a 2a  umn names that.*
a0e0: 2a 20 68 61 76 65 20 62 65 65 6e 20 66 69 6c 6c  * have been fill
a0f0: 65 64 20 6f 75 74 2e 20 20 49 66 20 74 68 65 20  ed out.  If the 
a100: 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2c 20  schema changes, 
a110: 74 68 65 73 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d  these column nam
a120: 65 73 20 6d 69 67 68 74 0a 2a 2a 20 63 68 61 6e  es might.** chan
a130: 67 65 73 20 61 6e 64 20 73 6f 20 74 68 65 20 76  ges and so the v
a140: 69 65 77 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f  iew will need to
a150: 20 62 65 20 72 65 73 65 74 2e 0a 2a 2f 0a 23 64   be reset..*/.#d
a160: 65 66 69 6e 65 20 44 42 5f 53 63 68 65 6d 61 4c  efine DB_SchemaL
a170: 6f 61 64 65 64 20 20 20 20 30 78 30 30 30 31 20  oaded    0x0001 
a180: 20 2f 2a 20 54 68 65 20 73 63 68 65 6d 61 20 68   /* The schema h
a190: 61 73 20 62 65 65 6e 20 6c 6f 61 64 65 64 20 2a  as been loaded *
a1a0: 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 55 6e 72  /.#define DB_Unr
a1b0: 65 73 65 74 56 69 65 77 73 20 20 20 20 30 78 30  esetViews    0x0
a1c0: 30 30 32 20 20 2f 2a 20 53 6f 6d 65 20 76 69 65  002  /* Some vie
a1d0: 77 73 20 68 61 76 65 20 64 65 66 69 6e 65 64 20  ws have defined 
a1e0: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a  column names */.
a1f0: 23 64 65 66 69 6e 65 20 44 42 5f 45 6d 70 74 79  #define DB_Empty
a200: 20 20 20 20 20 20 20 20 20 20 20 30 78 30 30 30             0x000
a210: 34 20 20 2f 2a 20 54 68 65 20 66 69 6c 65 20 69  4  /* The file i
a220: 73 20 65 6d 70 74 79 20 28 6c 65 6e 67 74 68 20  s empty (length 
a230: 30 20 62 79 74 65 73 29 20 2a 2f 0a 0a 2f 2a 0a  0 bytes) */../*.
a240: 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  ** The number of
a250: 20 64 69 66 66 65 72 65 6e 74 20 6b 69 6e 64 73   different kinds
a260: 20 6f 66 20 74 68 69 6e 67 73 20 74 68 61 74 20   of things that 
a270: 63 61 6e 20 62 65 20 6c 69 6d 69 74 65 64 0a 2a  can be limited.*
a280: 2a 20 75 73 69 6e 67 20 74 68 65 20 73 71 6c 69  * using the sqli
a290: 74 65 33 5f 6c 69 6d 69 74 28 29 20 69 6e 74 65  te3_limit() inte
a2a0: 72 66 61 63 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e  rface..*/.#defin
a2b0: 65 20 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54  e SQLITE_N_LIMIT
a2c0: 20 28 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57   (SQLITE_LIMIT_W
a2d0: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 2b 31 29  ORKER_THREADS+1)
a2e0: 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64  ../*.** Lookasid
a2f0: 65 20 6d 61 6c 6c 6f 63 20 69 73 20 61 20 73 65  e malloc is a se
a300: 74 20 6f 66 20 66 69 78 65 64 2d 73 69 7a 65 20  t of fixed-size 
a310: 62 75 66 66 65 72 73 20 74 68 61 74 20 63 61 6e  buffers that can
a320: 20 62 65 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73   be used.** to s
a330: 61 74 69 73 66 79 20 73 6d 61 6c 6c 20 74 72 61  atisfy small tra
a340: 6e 73 69 65 6e 74 20 6d 65 6d 6f 72 79 20 61 6c  nsient memory al
a350: 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 65 73 74  location request
a360: 73 20 66 6f 72 20 6f 62 6a 65 63 74 73 0a 2a 2a  s for objects.**
a370: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
a380: 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 64 61   a particular da
a390: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
a3a0: 6e 2e 20 20 54 68 65 20 75 73 65 20 6f 66 0a 2a  n.  The use of.*
a3b0: 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c  * lookaside mall
a3c0: 6f 63 20 70 72 6f 76 69 64 65 73 20 61 20 73 69  oc provides a si
a3d0: 67 6e 69 66 69 63 61 6e 74 20 70 65 72 66 6f 72  gnificant perfor
a3e0: 6d 61 6e 63 65 20 65 6e 68 61 6e 63 65 6d 65 6e  mance enhancemen
a3f0: 74 0a 2a 2a 20 28 61 70 70 72 6f 78 20 31 30 25  t.** (approx 10%
a400: 29 20 62 79 20 61 76 6f 69 64 69 6e 67 20 6e 75  ) by avoiding nu
a410: 6d 65 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f 66 72  merous malloc/fr
a420: 65 65 20 72 65 71 75 65 73 74 73 20 77 68 69 6c  ee requests whil
a430: 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 53 51 4c  e parsing.** SQL
a440: 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a   statements..**.
a450: 2a 2a 20 54 68 65 20 4c 6f 6f 6b 61 73 69 64 65  ** The Lookaside
a460: 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73   structure holds
a470: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 69   configuration i
a480: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
a490: 20 74 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64   the.** lookasid
a4a0: 65 20 6d 61 6c 6c 6f 63 20 73 75 62 73 79 73 74  e malloc subsyst
a4b0: 65 6d 2e 20 20 45 61 63 68 20 61 76 61 69 6c 61  em.  Each availa
a4c0: 62 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ble memory alloc
a4d0: 61 74 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68 65 20  ation in.** the 
a4e0: 6c 6f 6f 6b 61 73 69 64 65 20 73 75 62 73 79 73  lookaside subsys
a4f0: 74 65 6d 20 69 73 20 73 74 6f 72 65 64 20 6f 6e  tem is stored on
a500: 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f   a linked list o
a510: 66 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 0a  f LookasideSlot.
a520: 2a 2a 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a  ** objects..**.*
a530: 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f  * Lookaside allo
a540: 63 61 74 69 6f 6e 73 20 61 72 65 20 6f 6e 6c 79  cations are only
a550: 20 61 6c 6c 6f 77 65 64 20 66 6f 72 20 6f 62 6a   allowed for obj
a560: 65 63 74 73 20 74 68 61 74 20 61 72 65 20 61 73  ects that are as
a570: 73 6f 63 69 61 74 65 64 0a 2a 2a 20 77 69 74 68  sociated.** with
a580: 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 64 61   a particular da
a590: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
a5a0: 6e 2e 20 20 48 65 6e 63 65 2c 20 73 63 68 65 6d  n.  Hence, schem
a5b0: 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 61  a information ca
a5c0: 6e 6e 6f 74 0a 2a 2a 20 62 65 20 73 74 6f 72 65  nnot.** be store
a5d0: 64 20 69 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 62  d in lookaside b
a5e0: 65 63 61 75 73 65 20 69 6e 20 73 68 61 72 65 64  ecause in shared
a5f0: 20 63 61 63 68 65 20 6d 6f 64 65 20 74 68 65 20   cache mode the 
a600: 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69  schema informati
a610: 6f 6e 0a 2a 2a 20 69 73 20 73 68 61 72 65 64 20  on.** is shared 
a620: 62 79 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61  by multiple data
a630: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73  base connections
a640: 2e 20 20 54 68 65 72 65 66 6f 72 65 2c 20 77 68  .  Therefore, wh
a650: 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 73  ile parsing.** s
a660: 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f  chema informatio
a670: 6e 2c 20 74 68 65 20 4c 6f 6f 6b 61 73 69 64 65  n, the Lookaside
a680: 2e 62 45 6e 61 62 6c 65 64 20 66 6c 61 67 20 69  .bEnabled flag i
a690: 73 20 63 6c 65 61 72 65 64 20 73 6f 20 74 68 61  s cleared so tha
a6a0: 74 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 61  t.** lookaside a
a6b0: 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6e  llocations are n
a6c0: 6f 74 20 75 73 65 64 20 74 6f 20 63 6f 6e 73 74  ot used to const
a6d0: 72 75 63 74 20 74 68 65 20 73 63 68 65 6d 61 20  ruct the schema 
a6e0: 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74 72 75  objects..*/.stru
a6f0: 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 7b 0a 20  ct Lookaside {. 
a700: 20 75 33 32 20 62 44 69 73 61 62 6c 65 3b 20 20   u32 bDisable;  
a710: 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79           /* Only
a720: 20 6f 70 65 72 61 74 65 20 74 68 65 20 6c 6f 6f   operate the loo
a730: 6b 61 73 69 64 65 20 77 68 65 6e 20 7a 65 72 6f  kaside when zero
a740: 20 2a 2f 0a 20 20 75 31 36 20 73 7a 3b 20 20 20   */.  u16 sz;   
a750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a760: 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 62 75   Size of each bu
a770: 66 66 65 72 20 69 6e 20 62 79 74 65 73 20 2a 2f  ffer in bytes */
a780: 0a 20 20 75 38 20 62 4d 61 6c 6c 6f 63 65 64 3b  .  u8 bMalloced;
a790: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
a7a0: 75 65 20 69 66 20 70 53 74 61 72 74 20 6f 62 74  ue if pStart obt
a7b0: 61 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74  ained from sqlit
a7c0: 65 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 20  e3_malloc() */. 
a7d0: 20 69 6e 74 20 6e 4f 75 74 3b 20 20 20 20 20 20   int nOut;      
a7e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
a7f0: 65 72 20 6f 66 20 62 75 66 66 65 72 73 20 63 75  er of buffers cu
a800: 72 72 65 6e 74 6c 79 20 63 68 65 63 6b 65 64 20  rrently checked 
a810: 6f 75 74 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 4f  out */.  int mxO
a820: 75 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ut;             
a830: 20 2f 2a 20 48 69 67 68 77 61 74 65 72 20 6d 61   /* Highwater ma
a840: 72 6b 20 66 6f 72 20 6e 4f 75 74 20 2a 2f 0a 20  rk for nOut */. 
a850: 20 69 6e 74 20 61 6e 53 74 61 74 5b 33 5d 3b 20   int anStat[3]; 
a860: 20 20 20 20 20 20 20 20 20 2f 2a 20 30 3a 20 68           /* 0: h
a870: 69 74 73 2e 20 20 31 3a 20 73 69 7a 65 20 6d 69  its.  1: size mi
a880: 73 73 65 73 2e 20 20 32 3a 20 66 75 6c 6c 20 6d  sses.  2: full m
a890: 69 73 73 65 73 20 2a 2f 0a 20 20 4c 6f 6f 6b 61  isses */.  Looka
a8a0: 73 69 64 65 53 6c 6f 74 20 2a 70 46 72 65 65 3b  sideSlot *pFree;
a8b0: 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 76     /* List of av
a8c0: 61 69 6c 61 62 6c 65 20 62 75 66 66 65 72 73 20  ailable buffers 
a8d0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 74 61 72  */.  void *pStar
a8e0: 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
a8f0: 46 69 72 73 74 20 62 79 74 65 20 6f 66 20 61 76  First byte of av
a900: 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73  ailable memory s
a910: 70 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  pace */.  void *
a920: 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20  pEnd;           
a930: 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65 20    /* First byte 
a940: 70 61 73 74 20 65 6e 64 20 6f 66 20 61 76 61 69  past end of avai
a950: 6c 61 62 6c 65 20 73 70 61 63 65 20 2a 2f 0a 7d  lable space */.}
a960: 3b 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69  ;.struct Lookasi
a970: 64 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f 6f 6b 61  deSlot {.  Looka
a980: 73 69 64 65 53 6c 6f 74 20 2a 70 4e 65 78 74 3b  sideSlot *pNext;
a990: 20 20 20 20 2f 2a 20 4e 65 78 74 20 62 75 66 66      /* Next buff
a9a0: 65 72 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f  er in the list o
a9b0: 66 20 66 72 65 65 20 62 75 66 66 65 72 73 20 2a  f free buffers *
a9c0: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 68 61  /.};../*.** A ha
a9d0: 73 68 20 74 61 62 6c 65 20 66 6f 72 20 62 75 69  sh table for bui
a9e0: 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 20 64  lt-in function d
a9f0: 65 66 69 6e 69 74 69 6f 6e 73 2e 20 20 28 41 70  efinitions.  (Ap
aa00: 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65  plication-define
aa10: 64 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 75  d.** functions u
aa20: 73 65 20 61 20 72 65 67 75 6c 61 72 20 74 61 62  se a regular tab
aa30: 6c 65 20 74 61 62 6c 65 20 66 72 6f 6d 20 68 61  le table from ha
aa40: 73 68 2e 68 2e 29 0a 2a 2a 0a 2a 2a 20 48 61 73  sh.h.).**.** Has
aa50: 68 20 65 61 63 68 20 46 75 6e 63 44 65 66 20 73  h each FuncDef s
aa60: 74 72 75 63 74 75 72 65 20 69 6e 74 6f 20 6f 6e  tructure into on
aa70: 65 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66  e of the FuncDef
aa80: 48 61 73 68 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a  Hash.a[] slots..
aa90: 2a 2a 20 43 6f 6c 6c 69 73 69 6f 6e 73 20 61 72  ** Collisions ar
aaa0: 65 20 6f 6e 20 74 68 65 20 46 75 6e 63 44 65 66  e on the FuncDef
aab0: 2e 75 2e 70 48 61 73 68 20 63 68 61 69 6e 2e 0a  .u.pHash chain..
aac0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
aad0: 45 5f 46 55 4e 43 5f 48 41 53 48 5f 53 5a 20 32  E_FUNC_HASH_SZ 2
aae0: 33 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 66  3.struct FuncDef
aaf0: 48 61 73 68 20 7b 0a 20 20 46 75 6e 63 44 65 66  Hash {.  FuncDef
ab00: 20 2a 61 5b 53 51 4c 49 54 45 5f 46 55 4e 43 5f   *a[SQLITE_FUNC_
ab10: 48 41 53 48 5f 53 5a 5d 3b 20 20 20 20 20 20 20  HASH_SZ];       
ab20: 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20 66 6f  /* Hash table fo
ab30: 72 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d  r functions */.}
ab40: 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
ab50: 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41  _USER_AUTHENTICA
ab60: 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20 49 6e 66 6f 72  TION./*.** Infor
ab70: 6d 61 74 69 6f 6e 20 68 65 6c 64 20 69 6e 20 74  mation held in t
ab80: 68 65 20 22 73 71 6c 69 74 65 33 22 20 64 61 74  he "sqlite3" dat
ab90: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
aba0: 20 6f 62 6a 65 63 74 20 61 6e 64 20 75 73 65 64   object and used
abb0: 0a 2a 2a 20 74 6f 20 6d 61 6e 61 67 65 20 75 73  .** to manage us
abc0: 65 72 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f  er authenticatio
abd0: 6e 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74  n..*/.typedef st
abe0: 72 75 63 74 20 73 71 6c 69 74 65 33 5f 75 73 65  ruct sqlite3_use
abf0: 72 61 75 74 68 20 73 71 6c 69 74 65 33 5f 75 73  rauth sqlite3_us
ac00: 65 72 61 75 74 68 3b 0a 73 74 72 75 63 74 20 73  erauth;.struct s
ac10: 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 20  qlite3_userauth 
ac20: 7b 0a 20 20 75 38 20 61 75 74 68 4c 65 76 65 6c  {.  u8 authLevel
ac30: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
ac40: 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 61 75 74    /* Current aut
ac50: 68 65 6e 74 69 63 61 74 69 6f 6e 20 6c 65 76 65  hentication leve
ac60: 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 75 74 68  l */.  int nAuth
ac70: 50 57 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  PW;             
ac80: 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
ac90: 74 68 65 20 7a 41 75 74 68 50 57 20 69 6e 20 62  the zAuthPW in b
aca0: 79 74 65 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ytes */.  char *
acb0: 7a 41 75 74 68 50 57 3b 20 20 20 20 20 20 20 20  zAuthPW;        
acc0: 20 20 20 20 20 20 20 20 2f 2a 20 50 61 73 73 77          /* Passw
acd0: 6f 72 64 20 75 73 65 64 20 74 6f 20 61 75 74 68  ord used to auth
ace0: 65 6e 74 69 63 61 74 65 20 2a 2f 0a 20 20 63 68  enticate */.  ch
acf0: 61 72 20 2a 7a 41 75 74 68 55 73 65 72 3b 20 20  ar *zAuthUser;  
ad00: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55              /* U
ad10: 73 65 72 20 6e 61 6d 65 20 75 73 65 64 20 74 6f  ser name used to
ad20: 20 61 75 74 68 65 6e 74 69 63 61 74 65 20 2a 2f   authenticate */
ad30: 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20  .};../* Allowed 
ad40: 76 61 6c 75 65 73 20 66 6f 72 20 73 71 6c 69 74  values for sqlit
ad50: 65 33 5f 75 73 65 72 61 75 74 68 2e 61 75 74 68  e3_userauth.auth
ad60: 4c 65 76 65 6c 20 2a 2f 0a 23 64 65 66 69 6e 65  Level */.#define
ad70: 20 55 41 55 54 48 5f 55 6e 6b 6e 6f 77 6e 20 20   UAUTH_Unknown  
ad80: 20 20 20 30 20 20 20 20 20 2f 2a 20 41 75 74 68     0     /* Auth
ad90: 65 6e 74 69 63 61 74 69 6f 6e 20 6e 6f 74 20 79  entication not y
ada0: 65 74 20 63 68 65 63 6b 65 64 20 2a 2f 0a 23 64  et checked */.#d
adb0: 65 66 69 6e 65 20 55 41 55 54 48 5f 46 61 69 6c  efine UAUTH_Fail
adc0: 20 20 20 20 20 20 20 20 31 20 20 20 20 20 2f 2a          1     /*
add0: 20 55 73 65 72 20 61 75 74 68 65 6e 74 69 63 61   User authentica
ade0: 74 69 6f 6e 20 66 61 69 6c 65 64 20 2a 2f 0a 23  tion failed */.#
adf0: 64 65 66 69 6e 65 20 55 41 55 54 48 5f 55 73 65  define UAUTH_Use
ae00: 72 20 20 20 20 20 20 20 20 32 20 20 20 20 20 2f  r        2     /
ae10: 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65 64 20  * Authenticated 
ae20: 61 73 20 61 20 6e 6f 72 6d 61 6c 20 75 73 65 72  as a normal user
ae30: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54   */.#define UAUT
ae40: 48 5f 41 64 6d 69 6e 20 20 20 20 20 20 20 33 20  H_Admin       3 
ae50: 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63      /* Authentic
ae60: 61 74 65 64 20 61 73 20 61 6e 20 61 64 6d 69 6e  ated as an admin
ae70: 69 73 74 72 61 74 6f 72 20 2a 2f 0a 0a 2f 2a 20  istrator */../* 
ae80: 46 75 6e 63 74 69 6f 6e 73 20 75 73 65 64 20 6f  Functions used o
ae90: 6e 6c 79 20 62 79 20 75 73 65 72 20 61 75 74 68  nly by user auth
aea0: 6f 72 69 7a 61 74 69 6f 6e 20 6c 6f 67 69 63 20  orization logic 
aeb0: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 73  */.int sqlite3Us
aec0: 65 72 41 75 74 68 54 61 62 6c 65 28 63 6f 6e 73  erAuthTable(cons
aed0: 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71  t char*);.int sq
aee0: 6c 69 74 65 33 55 73 65 72 41 75 74 68 43 68 65  lite3UserAuthChe
aef0: 63 6b 4c 6f 67 69 6e 28 73 71 6c 69 74 65 33 2a  ckLogin(sqlite3*
af00: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 38 2a  ,const char*,u8*
af10: 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
af20: 73 65 72 41 75 74 68 49 6e 69 74 28 73 71 6c 69  serAuthInit(sqli
af30: 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
af40: 74 65 33 43 72 79 70 74 46 75 6e 63 28 73 71 6c  te3CryptFunc(sql
af50: 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
af60: 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  t,sqlite3_value*
af70: 2a 29 3b 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53  *);..#endif /* S
af80: 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45  QLITE_USER_AUTHE
af90: 4e 54 49 43 41 54 49 4f 4e 20 2a 2f 0a 0a 2f 2a  NTICATION */../*
afa0: 0a 2a 2a 20 74 79 70 65 64 65 66 20 66 6f 72 20  .** typedef for 
afb0: 74 68 65 20 61 75 74 68 6f 72 69 7a 61 74 69 6f  the authorizatio
afc0: 6e 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74  n callback funct
afd0: 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ion..*/.#ifdef S
afe0: 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45  QLITE_USER_AUTHE
aff0: 4e 54 49 43 41 54 49 4f 4e 0a 20 20 74 79 70 65  NTICATION.  type
b000: 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69 74 65  def int (*sqlite
b010: 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a 2c 69  3_xauth)(void*,i
b020: 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  nt,const char*,c
b030: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
b040: 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20 20 20   char*,.        
b050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b060: 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61         const cha
b070: 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
b080: 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64 65  ;.#else.  typede
b090: 66 20 69 6e 74 20 28 2a 73 71 6c 69 74 65 33 5f  f int (*sqlite3_
b0a0: 78 61 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74  xauth)(void*,int
b0b0: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  ,const char*,con
b0c0: 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
b0d0: 68 61 72 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  har*,.          
b0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b0f0: 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a       const char*
b100: 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64  );.#endif..#ifnd
b110: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44  ef SQLITE_OMIT_D
b120: 45 50 52 45 43 41 54 45 44 0a 2f 2a 20 54 68 69  EPRECATED./* Thi
b130: 73 20 69 73 20 61 6e 20 65 78 74 72 61 20 53 51  s is an extra SQ
b140: 4c 49 54 45 5f 54 52 41 43 45 20 6d 61 63 72 6f  LITE_TRACE macro
b150: 20 74 68 61 74 20 69 6e 64 69 63 61 74 65 73 20   that indicates 
b160: 22 6c 65 67 61 63 79 22 20 74 72 61 63 69 6e 67  "legacy" tracing
b170: 0a 2a 2a 20 69 6e 20 74 68 65 20 73 74 79 6c 65  .** in the style
b180: 20 6f 66 20 73 71 6c 69 74 65 33 5f 74 72 61 63   of sqlite3_trac
b190: 65 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  e().*/.#define S
b1a0: 51 4c 49 54 45 5f 54 52 41 43 45 5f 4c 45 47 41  QLITE_TRACE_LEGA
b1b0: 43 59 20 20 30 78 38 30 0a 23 65 6c 73 65 0a 23  CY  0x80.#else.#
b1c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 52  define SQLITE_TR
b1d0: 41 43 45 5f 4c 45 47 41 43 59 20 20 30 0a 23 65  ACE_LEGACY  0.#e
b1e0: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
b1f0: 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44 20 2a  MIT_DEPRECATED *
b200: 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64  /.../*.** Each d
b210: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
b220: 6f 6e 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  on is an instanc
b230: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
b240: 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f  ng structure..*/
b250: 0a 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 20  .struct sqlite3 
b260: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 66 73 20  {.  sqlite3_vfs 
b270: 2a 70 56 66 73 3b 20 20 20 20 20 20 20 20 20 20  *pVfs;          
b280: 20 20 2f 2a 20 4f 53 20 49 6e 74 65 72 66 61 63    /* OS Interfac
b290: 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 56 64  e */.  struct Vd
b2a0: 62 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20  be *pVdbe;      
b2b0: 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
b2c0: 61 63 74 69 76 65 20 76 69 72 74 75 61 6c 20 6d  active virtual m
b2d0: 61 63 68 69 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c  achines */.  Col
b2e0: 6c 53 65 71 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b  lSeq *pDfltColl;
b2f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
b300: 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74  e default collat
b310: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 28 42 49  ing sequence (BI
b320: 4e 41 52 59 29 20 2a 2f 0a 20 20 73 71 6c 69 74  NARY) */.  sqlit
b330: 65 33 5f 6d 75 74 65 78 20 2a 6d 75 74 65 78 3b  e3_mutex *mutex;
b340: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e           /* Conn
b350: 65 63 74 69 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a  ection mutex */.
b360: 20 20 44 62 20 2a 61 44 62 3b 20 20 20 20 20 20    Db *aDb;      
b370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b380: 2f 2a 20 41 6c 6c 20 62 61 63 6b 65 6e 64 73 20  /* All backends 
b390: 2a 2f 0a 20 20 69 6e 74 20 6e 44 62 3b 20 20 20  */.  int nDb;   
b3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b3b0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
b3c0: 62 61 63 6b 65 6e 64 73 20 63 75 72 72 65 6e 74  backends current
b3d0: 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a 20 20 69  ly in use */.  i
b3e0: 6e 74 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20  nt flags;       
b3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b400: 4d 69 73 63 65 6c 6c 61 6e 65 6f 75 73 20 66 6c  Miscellaneous fl
b410: 61 67 73 2e 20 53 65 65 20 62 65 6c 6f 77 20 2a  ags. See below *
b420: 2f 0a 20 20 69 36 34 20 6c 61 73 74 52 6f 77 69  /.  i64 lastRowi
b430: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
b440: 20 20 2f 2a 20 52 4f 57 49 44 20 6f 66 20 6d 6f    /* ROWID of mo
b450: 73 74 20 72 65 63 65 6e 74 20 69 6e 73 65 72 74  st recent insert
b460: 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a   (see above) */.
b470: 20 20 69 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20    i64 szMmap;   
b480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b490: 2f 2a 20 44 65 66 61 75 6c 74 20 6d 6d 61 70 5f  /* Default mmap_
b4a0: 73 69 7a 65 20 73 65 74 74 69 6e 67 20 2a 2f 0a  size setting */.
b4b0: 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6f    unsigned int o
b4c0: 70 65 6e 46 6c 61 67 73 3b 20 20 20 20 20 20 20  penFlags;       
b4d0: 2f 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64 20  /* Flags passed 
b4e0: 74 6f 20 73 71 6c 69 74 65 33 5f 76 66 73 2e 78  to sqlite3_vfs.x
b4f0: 4f 70 65 6e 28 29 20 2a 2f 0a 20 20 69 6e 74 20  Open() */.  int 
b500: 65 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20  errCode;        
b510: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73            /* Mos
b520: 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 63  t recent error c
b530: 6f 64 65 20 28 53 51 4c 49 54 45 5f 2a 29 20 2a  ode (SQLITE_*) *
b540: 2f 0a 20 20 69 6e 74 20 65 72 72 4d 61 73 6b 3b  /.  int errMask;
b550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b560: 20 20 2f 2a 20 26 20 72 65 73 75 6c 74 20 63 6f    /* & result co
b570: 64 65 73 20 77 69 74 68 20 74 68 69 73 20 62 65  des with this be
b580: 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20 2a  fore returning *
b590: 2f 0a 20 20 69 6e 74 20 69 53 79 73 45 72 72 6e  /.  int iSysErrn
b5a0: 6f 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  o;              
b5b0: 20 20 2f 2a 20 45 72 72 6e 6f 20 76 61 6c 75 65    /* Errno value
b5c0: 20 66 72 6f 6d 20 6c 61 73 74 20 73 79 73 74 65   from last syste
b5d0: 6d 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75 31 36  m error */.  u16
b5e0: 20 64 62 4f 70 74 46 6c 61 67 73 3b 20 20 20 20   dbOptFlags;    
b5f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6c             /* Fl
b600: 61 67 73 20 74 6f 20 65 6e 61 62 6c 65 2f 64 69  ags to enable/di
b610: 73 61 62 6c 65 20 6f 70 74 69 6d 69 7a 61 74 69  sable optimizati
b620: 6f 6e 73 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b  ons */.  u8 enc;
b630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b640: 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65         /* Text e
b650: 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 75 38 20  ncoding */.  u8 
b660: 61 75 74 6f 43 6f 6d 6d 69 74 3b 20 20 20 20 20  autoCommit;     
b670: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
b680: 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c  e auto-commit fl
b690: 61 67 2e 20 2a 2f 0a 20 20 75 38 20 74 65 6d 70  ag. */.  u8 temp
b6a0: 5f 73 74 6f 72 65 3b 20 20 20 20 20 20 20 20 20  _store;         
b6b0: 20 20 20 20 20 20 20 2f 2a 20 31 3a 20 66 69 6c         /* 1: fil
b6c0: 65 20 32 3a 20 6d 65 6d 6f 72 79 20 30 3a 20 64  e 2: memory 0: d
b6d0: 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6d  efault */.  u8 m
b6e0: 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20 20  allocFailed;    
b6f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
b700: 65 20 69 66 20 77 65 20 68 61 76 65 20 73 65 65  e if we have see
b710: 6e 20 61 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75  n a malloc failu
b720: 72 65 20 2a 2f 0a 20 20 75 38 20 62 42 65 6e 69  re */.  u8 bBeni
b730: 67 6e 4d 61 6c 6c 6f 63 3b 20 20 20 20 20 20 20  gnMalloc;       
b740: 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20        /* Do not 
b750: 72 65 71 75 69 72 65 20 4f 4f 4d 73 20 69 66 20  require OOMs if 
b760: 74 72 75 65 20 2a 2f 0a 20 20 75 38 20 64 66 6c  true */.  u8 dfl
b770: 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20 20 20 20 20  tLockMode;      
b780: 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
b790: 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20  lt locking-mode 
b7a0: 66 6f 72 20 61 74 74 61 63 68 65 64 20 64 62 73  for attached dbs
b7b0: 20 2a 2f 0a 20 20 73 69 67 6e 65 64 20 63 68 61   */.  signed cha
b7c0: 72 20 6e 65 78 74 41 75 74 6f 76 61 63 3b 20 20  r nextAutovac;  
b7d0: 20 20 20 20 2f 2a 20 41 75 74 6f 76 61 63 20 73      /* Autovac s
b7e0: 65 74 74 69 6e 67 20 61 66 74 65 72 20 56 41 43  etting after VAC
b7f0: 55 55 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a 20 20  UUM if >=0 */.  
b800: 75 38 20 73 75 70 70 72 65 73 73 45 72 72 3b 20  u8 suppressErr; 
b810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b820: 20 44 6f 20 6e 6f 74 20 69 73 73 75 65 20 65 72   Do not issue er
b830: 72 6f 72 20 6d 65 73 73 61 67 65 73 20 69 66 20  ror messages if 
b840: 74 72 75 65 20 2a 2f 0a 20 20 75 38 20 76 74 61  true */.  u8 vta
b850: 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 20 20 20 20  bOnConflict;    
b860: 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
b870: 20 74 6f 20 72 65 74 75 72 6e 20 66 6f 72 20 73   to return for s
b880: 33 5f 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69  3_vtab_on_confli
b890: 63 74 28 29 20 2a 2f 0a 20 20 75 38 20 69 73 54  ct() */.  u8 isT
b8a0: 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f  ransactionSavepo
b8b0: 69 6e 74 3b 20 20 20 20 2f 2a 20 54 72 75 65 20  int;    /* True 
b8c0: 69 66 20 74 68 65 20 6f 75 74 65 72 6d 6f 73 74  if the outermost
b8d0: 20 73 61 76 65 70 6f 69 6e 74 20 69 73 20 61 20   savepoint is a 
b8e0: 54 53 20 2a 2f 0a 20 20 75 38 20 6d 54 72 61 63  TS */.  u8 mTrac
b8f0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
b900: 20 20 20 20 20 20 2f 2a 20 7a 65 72 6f 20 6f 72        /* zero or
b910: 20 6d 6f 72 65 20 53 51 4c 49 54 45 5f 54 52 41   more SQLITE_TRA
b920: 43 45 20 66 6c 61 67 73 20 2a 2f 0a 20 20 75 38  CE flags */.  u8
b930: 20 73 6b 69 70 42 74 72 65 65 4d 75 74 65 78 3b   skipBtreeMutex;
b940: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
b950: 72 75 65 20 69 66 20 6e 6f 20 73 68 61 72 65 64  rue if no shared
b960: 2d 63 61 63 68 65 20 62 61 63 6b 65 6e 64 73 20  -cache backends 
b970: 2a 2f 0a 20 20 69 6e 74 20 6e 65 78 74 50 61 67  */.  int nextPag
b980: 65 73 69 7a 65 3b 20 20 20 20 20 20 20 20 20 20  esize;          
b990: 20 20 20 2f 2a 20 50 61 67 65 73 69 7a 65 20 61     /* Pagesize a
b9a0: 66 74 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e  fter VACUUM if >
b9b0: 30 20 2a 2f 0a 20 20 75 33 32 20 6d 61 67 69 63  0 */.  u32 magic
b9c0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
b9d0: 20 20 20 20 20 2f 2a 20 4d 61 67 69 63 20 6e 75       /* Magic nu
b9e0: 6d 62 65 72 20 66 6f 72 20 64 65 74 65 63 74 20  mber for detect 
b9f0: 6c 69 62 72 61 72 79 20 6d 69 73 75 73 65 20 2a  library misuse *
ba00: 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b  /.  int nChange;
ba10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ba20: 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72    /* Value retur
ba30: 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63  ned by sqlite3_c
ba40: 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e  hanges() */.  in
ba50: 74 20 6e 54 6f 74 61 6c 43 68 61 6e 67 65 3b 20  t nTotalChange; 
ba60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
ba70: 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79  alue returned by
ba80: 20 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63   sqlite3_total_c
ba90: 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e  hanges() */.  in
baa0: 74 20 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  t aLimit[SQLITE_
bab0: 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c  N_LIMIT];   /* L
bac0: 69 6d 69 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  imits */.  int n
bad0: 4d 61 78 53 6f 72 74 65 72 4d 6d 61 70 3b 20 20  MaxSorterMmap;  
bae0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69           /* Maxi
baf0: 6d 75 6d 20 73 69 7a 65 20 6f 66 20 72 65 67 69  mum size of regi
bb00: 6f 6e 73 20 6d 61 70 70 65 64 20 62 79 20 73 6f  ons mapped by so
bb10: 72 74 65 72 20 2a 2f 0a 20 20 73 74 72 75 63 74  rter */.  struct
bb20: 20 73 71 6c 69 74 65 33 49 6e 69 74 49 6e 66 6f   sqlite3InitInfo
bb30: 20 7b 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72   {      /* Infor
bb40: 6d 61 74 69 6f 6e 20 75 73 65 64 20 64 75 72 69  mation used duri
bb50: 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  ng initializatio
bb60: 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 65 77  n */.    int new
bb70: 54 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20  Tnum;           
bb80: 20 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61 67 65       /* Rootpage
bb90: 20 6f 66 20 74 61 62 6c 65 20 62 65 69 6e 67 20   of table being 
bba0: 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
bbb0: 20 20 20 75 38 20 69 44 62 3b 20 20 20 20 20 20     u8 iDb;      
bbc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
bbd0: 2a 20 57 68 69 63 68 20 64 62 20 66 69 6c 65 20  * Which db file 
bbe0: 69 73 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c  is being initial
bbf0: 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 62  ized */.    u8 b
bc00: 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20  usy;            
bc10: 20 20 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20          /* TRUE 
bc20: 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 69  if currently ini
bc30: 74 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20 20  tializing */.   
bc40: 20 75 38 20 6f 72 70 68 61 6e 54 72 69 67 67 65   u8 orphanTrigge
bc50: 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  r;           /* 
bc60: 4c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20 69  Last statement i
bc70: 73 20 6f 72 70 68 61 6e 65 64 20 54 45 4d 50 20  s orphaned TEMP 
bc80: 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 20 20 75  trigger */.    u
bc90: 38 20 69 6d 70 6f 73 74 65 72 54 61 62 6c 65 3b  8 imposterTable;
bca0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 75             /* Bu
bcb0: 69 6c 64 69 6e 67 20 61 6e 20 69 6d 70 6f 73 74  ilding an impost
bcc0: 65 72 20 74 61 62 6c 65 20 2a 2f 0a 20 20 7d 20  er table */.  } 
bcd0: 69 6e 69 74 3b 0a 20 20 69 6e 74 20 6e 56 64 62  init;.  int nVdb
bce0: 65 41 63 74 69 76 65 3b 20 20 20 20 20 20 20 20  eActive;        
bcf0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
bd00: 6f 66 20 56 44 42 45 73 20 63 75 72 72 65 6e 74  of VDBEs current
bd10: 6c 79 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20  ly running */.  
bd20: 69 6e 74 20 6e 56 64 62 65 52 65 61 64 3b 20 20  int nVdbeRead;  
bd30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
bd40: 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76   Number of activ
bd50: 65 20 56 44 42 45 73 20 74 68 61 74 20 72 65 61  e VDBEs that rea
bd60: 64 20 6f 72 20 77 72 69 74 65 20 2a 2f 0a 20 20  d or write */.  
bd70: 69 6e 74 20 6e 56 64 62 65 57 72 69 74 65 3b 20  int nVdbeWrite; 
bd80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
bd90: 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76   Number of activ
bda0: 65 20 56 44 42 45 73 20 74 68 61 74 20 72 65 61  e VDBEs that rea
bdb0: 64 20 61 6e 64 20 77 72 69 74 65 20 2a 2f 0a 20  d and write */. 
bdc0: 20 69 6e 74 20 6e 56 64 62 65 45 78 65 63 3b 20   int nVdbeExec; 
bdd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
bde0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74  * Number of nest
bdf0: 65 64 20 63 61 6c 6c 73 20 74 6f 20 56 64 62 65  ed calls to Vdbe
be00: 45 78 65 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20  Exec() */.  int 
be10: 6e 56 44 65 73 74 72 6f 79 3b 20 20 20 20 20 20  nVDestroy;      
be20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
be30: 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 4f 50  ber of active OP
be40: 5f 56 44 65 73 74 72 6f 79 20 6f 70 65 72 61 74  _VDestroy operat
be50: 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 45  ions */.  int nE
be60: 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20  xtension;       
be70: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
be80: 72 20 6f 66 20 6c 6f 61 64 65 64 20 65 78 74 65  r of loaded exte
be90: 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69 64  nsions */.  void
bea0: 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b 20 20   **aExtension;  
beb0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 72            /* Arr
bec0: 61 79 20 6f 66 20 73 68 61 72 65 64 20 6c 69 62  ay of shared lib
bed0: 72 61 72 79 20 68 61 6e 64 6c 65 73 20 2a 2f 0a  rary handles */.
bee0: 20 20 69 6e 74 20 28 2a 78 54 72 61 63 65 29 28    int (*xTrace)(
bef0: 75 33 32 2c 76 6f 69 64 2a 2c 76 6f 69 64 2a 2c  u32,void*,void*,
bf00: 76 6f 69 64 2a 29 3b 20 20 20 20 20 2f 2a 20 54  void*);     /* T
bf10: 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  race function */
bf20: 0a 20 20 76 6f 69 64 20 2a 70 54 72 61 63 65 41  .  void *pTraceA
bf30: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
bf40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
bf50: 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  Argument to the 
bf60: 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a  trace function *
bf70: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72 6f 66  /.  void (*xProf
bf80: 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74  ile)(void*,const
bf90: 20 63 68 61 72 2a 2c 75 36 34 29 3b 20 20 2f 2a   char*,u64);  /*
bfa0: 20 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e 63 74   Profiling funct
bfb0: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ion */.  void *p
bfc0: 50 72 6f 66 69 6c 65 41 72 67 3b 20 20 20 20 20  ProfileArg;     
bfd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bfe0: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
bff0: 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e 63 74 69  o profile functi
c000: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 43  on */.  void *pC
c010: 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20 20 20 20  ommitArg;       
c020: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
c030: 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d 6d 69 74  ument to xCommit
c040: 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 0a 20 20  Callback() */.  
c050: 69 6e 74 20 28 2a 78 43 6f 6d 6d 69 74 43 61 6c  int (*xCommitCal
c060: 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20 20  lback)(void*);  
c070: 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20    /* Invoked at 
c080: 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f  every commit. */
c090: 0a 20 20 76 6f 69 64 20 2a 70 52 6f 6c 6c 62 61  .  void *pRollba
c0a0: 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  ckArg;          
c0b0: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
c0c0: 20 74 6f 20 78 52 6f 6c 6c 62 61 63 6b 43 61 6c   to xRollbackCal
c0d0: 6c 62 61 63 6b 28 29 20 2a 2f 0a 20 20 76 6f 69  lback() */.  voi
c0e0: 64 20 28 2a 78 52 6f 6c 6c 62 61 63 6b 43 61 6c  d (*xRollbackCal
c0f0: 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b 20 2f  lback)(void*); /
c100: 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65 76 65  * Invoked at eve
c110: 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20  ry commit. */.  
c120: 76 6f 69 64 20 2a 70 55 70 64 61 74 65 41 72 67  void *pUpdateArg
c130: 3b 0a 20 20 76 6f 69 64 20 28 2a 78 55 70 64 61  ;.  void (*xUpda
c140: 74 65 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64  teCallback)(void
c150: 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  *,int, const cha
c160: 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 73  r*,const char*,s
c170: 71 6c 69 74 65 5f 69 6e 74 36 34 29 3b 0a 23 69  qlite_int64);.#i
c180: 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
c190: 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f 4f  LE_PREUPDATE_HOO
c1a0: 4b 0a 20 20 76 6f 69 64 20 2a 70 50 72 65 55 70  K.  void *pPreUp
c1b0: 64 61 74 65 41 72 67 3b 20 20 20 20 20 20 20 20  dateArg;        
c1c0: 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d    /* First argum
c1d0: 65 6e 74 20 74 6f 20 78 50 72 65 55 70 64 61 74  ent to xPreUpdat
c1e0: 65 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76  eCallback */.  v
c1f0: 6f 69 64 20 28 2a 78 50 72 65 55 70 64 61 74 65  oid (*xPreUpdate
c200: 43 61 6c 6c 62 61 63 6b 29 28 20 20 20 2f 2a 20  Callback)(   /* 
c210: 52 65 67 69 73 74 65 72 65 64 20 75 73 69 6e 67  Registered using
c220: 20 73 71 6c 69 74 65 33 5f 70 72 65 75 70 64 61   sqlite3_preupda
c230: 74 65 5f 68 6f 6f 6b 28 29 20 2a 2f 0a 20 20 20  te_hook() */.   
c240: 20 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c   void*,sqlite3*,
c250: 69 6e 74 2c 63 68 61 72 20 63 6f 6e 73 74 2a 2c  int,char const*,
c260: 63 68 61 72 20 63 6f 6e 73 74 2a 2c 73 71 6c 69  char const*,sqli
c270: 74 65 33 5f 69 6e 74 36 34 2c 73 71 6c 69 74 65  te3_int64,sqlite
c280: 33 5f 69 6e 74 36 34 0a 20 20 29 3b 0a 20 20 50  3_int64.  );.  P
c290: 72 65 55 70 64 61 74 65 20 2a 70 50 72 65 55 70  reUpdate *pPreUp
c2a0: 64 61 74 65 3b 20 20 20 20 20 20 20 20 2f 2a 20  date;        /* 
c2b0: 43 6f 6e 74 65 78 74 20 66 6f 72 20 61 63 74 69  Context for acti
c2c0: 76 65 20 70 72 65 2d 75 70 64 61 74 65 20 63 61  ve pre-update ca
c2d0: 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66  llback */.#endif
c2e0: 20 2f 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c   /* SQLITE_ENABL
c2f0: 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b  E_PREUPDATE_HOOK
c300: 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
c310: 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e  TE_OMIT_WAL.  in
c320: 74 20 28 2a 78 57 61 6c 43 61 6c 6c 62 61 63 6b  t (*xWalCallback
c330: 29 28 76 6f 69 64 20 2a 2c 20 73 71 6c 69 74 65  )(void *, sqlite
c340: 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  3 *, const char 
c350: 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  *, int);.  void 
c360: 2a 70 57 61 6c 41 72 67 3b 0a 23 65 6e 64 69 66  *pWalArg;.#endif
c370: 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65  .  void(*xCollNe
c380: 65 64 65 64 29 28 76 6f 69 64 2a 2c 73 71 6c 69  eded)(void*,sqli
c390: 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65  te3*,int eTextRe
c3a0: 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  p,const char*);.
c3b0: 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65    void(*xCollNee
c3c0: 64 65 64 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c  ded16)(void*,sql
c3d0: 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74 52  ite3*,int eTextR
c3e0: 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b  ep,const void*);
c3f0: 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65  .  void *pCollNe
c400: 65 64 65 64 41 72 67 3b 0a 20 20 73 71 6c 69 74  ededArg;.  sqlit
c410: 65 33 5f 76 61 6c 75 65 20 2a 70 45 72 72 3b 20  e3_value *pErr; 
c420: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74           /* Most
c430: 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 6d 65   recent error me
c440: 73 73 61 67 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e  ssage */.  union
c450: 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69 6c 65 20   {.    volatile 
c460: 69 6e 74 20 69 73 49 6e 74 65 72 72 75 70 74 65  int isInterrupte
c470: 64 3b 20 2f 2a 20 54 72 75 65 20 69 66 20 73 71  d; /* True if sq
c480: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 20  lite3_interrupt 
c490: 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20  has been called 
c4a0: 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20 6e 6f  */.    double no
c4b0: 74 55 73 65 64 31 3b 20 20 20 20 20 20 20 20 20  tUsed1;         
c4c0: 20 20 20 2f 2a 20 53 70 61 63 65 72 20 2a 2f 0a     /* Spacer */.
c4d0: 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61 73    } u1;.  Lookas
c4e0: 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65 3b 20 20  ide lookaside;  
c4f0: 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b 61          /* Looka
c500: 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e 66  side malloc conf
c510: 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66  iguration */.#if
c520: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
c530: 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20  _AUTHORIZATION. 
c540: 20 73 71 6c 69 74 65 33 5f 78 61 75 74 68 20 78   sqlite3_xauth x
c550: 41 75 74 68 3b 20 20 20 20 20 20 20 20 20 20 2f  Auth;          /
c560: 2a 20 41 63 63 65 73 73 20 61 75 74 68 6f 72 69  * Access authori
c570: 7a 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20  zation function 
c580: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 74 68  */.  void *pAuth
c590: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
c5a0: 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65     /* 1st argume
c5b0: 6e 74 20 74 6f 20 74 68 65 20 61 63 63 65 73 73  nt to the access
c5c0: 20 61 75 74 68 20 66 75 6e 63 74 69 6f 6e 20 2a   auth function *
c5d0: 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
c5e0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
c5f0: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20  GRESS_CALLBACK. 
c600: 20 69 6e 74 20 28 2a 78 50 72 6f 67 72 65 73 73   int (*xProgress
c610: 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 2f  )(void *);     /
c620: 2a 20 54 68 65 20 70 72 6f 67 72 65 73 73 20 63  * The progress c
c630: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69  allback */.  voi
c640: 64 20 2a 70 50 72 6f 67 72 65 73 73 41 72 67 3b  d *pProgressArg;
c650: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
c660: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 70 72  gument to the pr
c670: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
c680: 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50  */.  unsigned nP
c690: 72 6f 67 72 65 73 73 4f 70 73 3b 20 20 20 20 20  rogressOps;     
c6a0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
c6b0: 6f 70 63 6f 64 65 73 20 66 6f 72 20 70 72 6f 67  opcodes for prog
c6c0: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  ress callback */
c6d0: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
c6e0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
c6f0: 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e  UALTABLE.  int n
c700: 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20  VTrans;         
c710: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f           /* Allo
c720: 63 61 74 65 64 20 73 69 7a 65 20 6f 66 20 61 56  cated size of aV
c730: 54 72 61 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20  Trans */.  Hash 
c740: 61 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 20  aModule;        
c750: 20 20 20 20 20 20 20 20 20 2f 2a 20 70 6f 70 75           /* popu
c760: 6c 61 74 65 64 20 62 79 20 73 71 6c 69 74 65 33  lated by sqlite3
c770: 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29  _create_module()
c780: 20 2a 2f 0a 20 20 56 74 61 62 43 74 78 20 2a 70   */.  VtabCtx *p
c790: 56 74 61 62 43 74 78 3b 20 20 20 20 20 20 20 20  VtabCtx;        
c7a0: 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66      /* Context f
c7b0: 6f 72 20 61 63 74 69 76 65 20 76 74 61 62 20 63  or active vtab c
c7c0: 6f 6e 6e 65 63 74 2f 63 72 65 61 74 65 20 2a 2f  onnect/create */
c7d0: 0a 20 20 56 54 61 62 6c 65 20 2a 2a 61 56 54 72  .  VTable **aVTr
c7e0: 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ans;            
c7f0: 20 2f 2a 20 56 69 72 74 75 61 6c 20 74 61 62 6c   /* Virtual tabl
c800: 65 73 20 77 69 74 68 20 6f 70 65 6e 20 74 72 61  es with open tra
c810: 6e 73 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 56  nsactions */.  V
c820: 54 61 62 6c 65 20 2a 70 44 69 73 63 6f 6e 6e 65  Table *pDisconne
c830: 63 74 3b 20 20 20 20 2f 2a 20 44 69 73 63 6f 6e  ct;    /* Discon
c840: 6e 65 63 74 20 74 68 65 73 65 20 69 6e 20 6e 65  nect these in ne
c850: 78 74 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  xt sqlite3_prepa
c860: 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  re() */.#endif. 
c870: 20 48 61 73 68 20 61 46 75 6e 63 3b 20 20 20 20   Hash aFunc;    
c880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c890: 2a 20 48 61 73 68 20 74 61 62 6c 65 20 6f 66 20  * Hash table of 
c8a0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75 6e 63 74  connection funct
c8b0: 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61  ions */.  Hash a
c8c0: 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20 20 20 20  CollSeq;        
c8d0: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 63          /* All c
c8e0: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
c8f0: 65 73 20 2a 2f 0a 20 20 42 75 73 79 48 61 6e 64  es */.  BusyHand
c900: 6c 65 72 20 62 75 73 79 48 61 6e 64 6c 65 72 3b  ler busyHandler;
c910: 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20 63 61        /* Busy ca
c920: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44 62 20 61  llback */.  Db a
c930: 44 62 53 74 61 74 69 63 5b 32 5d 3b 20 20 20 20  DbStatic[2];    
c940: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 61            /* Sta
c950: 74 69 63 20 73 70 61 63 65 20 66 6f 72 20 74 68  tic space for th
c960: 65 20 32 20 64 65 66 61 75 6c 74 20 62 61 63 6b  e 2 default back
c970: 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76 65 70 6f  ends */.  Savepo
c980: 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b  int *pSavepoint;
c990: 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20          /* List 
c9a0: 6f 66 20 61 63 74 69 76 65 20 73 61 76 65 70 6f  of active savepo
c9b0: 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 62 75  ints */.  int bu
c9c0: 73 79 54 69 6d 65 6f 75 74 3b 20 20 20 20 20 20  syTimeout;      
c9d0: 20 20 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20          /* Busy 
c9e0: 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f 75 74 2c  handler timeout,
c9f0: 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20 20 69 6e   in msec */.  in
ca00: 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20 20  t nSavepoint;   
ca10: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
ca20: 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61  umber of non-tra
ca30: 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69  nsaction savepoi
ca40: 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74  nts */.  int nSt
ca50: 61 74 65 6d 65 6e 74 3b 20 20 20 20 20 20 20 20  atement;        
ca60: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
ca70: 20 6f 66 20 6e 65 73 74 65 64 20 73 74 61 74 65   of nested state
ca80: 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e  ment-transaction
ca90: 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66  s  */.  i64 nDef
caa0: 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20  erredCons;      
cab0: 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65 66        /* Net def
cac0: 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74  erred constraint
cad0: 73 20 74 68 69 73 20 74 72 61 6e 73 61 63 74 69  s this transacti
cae0: 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  on. */.  i64 nDe
caf0: 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20  ferredImmCons;  
cb00: 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64 65         /* Net de
cb10: 66 65 72 72 65 64 20 69 6d 6d 65 64 69 61 74 65  ferred immediate
cb20: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
cb30: 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73 46 72    int *pnBytesFr
cb40: 65 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  eed;            
cb50: 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20  /* If not NULL, 
cb60: 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73 20 69  increment this i
cb70: 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a 23 69  n DbFree() */.#i
cb80: 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
cb90: 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59  LE_UNLOCK_NOTIFY
cba0: 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  .  /* The follow
cbb0: 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20 61 72  ing variables ar
cbc0: 65 20 61 6c 6c 20 70 72 6f 74 65 63 74 65 64 20  e all protected 
cbd0: 62 79 20 74 68 65 20 53 54 41 54 49 43 5f 4d 41  by the STATIC_MA
cbe0: 53 54 45 52 0a 20 20 2a 2a 20 6d 75 74 65 78 2c  STER.  ** mutex,
cbf0: 20 6e 6f 74 20 62 79 20 73 71 6c 69 74 65 33 2e   not by sqlite3.
cc00: 6d 75 74 65 78 2e 20 54 68 65 79 20 61 72 65 20  mutex. They are 
cc10: 75 73 65 64 20 62 79 20 63 6f 64 65 20 69 6e 20  used by code in 
cc20: 6e 6f 74 69 66 79 2e 63 2e 0a 20 20 2a 2a 0a 20  notify.c..  **. 
cc30: 20 2a 2a 20 57 68 65 6e 20 58 2e 70 55 6e 6c 6f   ** When X.pUnlo
cc40: 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c  ckConnection==Y,
cc50: 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74   that means that
cc60: 20 58 20 69 73 20 77 61 69 74 69 6e 67 20 66 6f   X is waiting fo
cc70: 72 20 59 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f  r Y to.  ** unlo
cc80: 63 6b 20 73 6f 20 74 68 61 74 20 69 74 20 63 61  ck so that it ca
cc90: 6e 20 70 72 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a  n proceed..  **.
cca0: 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 42 6c 6f    ** When X.pBlo
ccb0: 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d  ckingConnection=
ccc0: 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74  =Y, that means t
ccd0: 68 61 74 20 73 6f 6d 65 74 68 69 6e 67 20 74 68  hat something th
cce0: 61 74 20 58 20 74 72 69 65 64 0a 20 20 2a 2a 20  at X tried.  ** 
ccf0: 74 72 69 65 64 20 74 6f 20 64 6f 20 72 65 63 65  tried to do rece
cd00: 6e 74 6c 79 20 66 61 69 6c 65 64 20 77 69 74 68  ntly failed with
cd10: 20 61 6e 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45   an SQLITE_LOCKE
cd20: 44 20 65 72 72 6f 72 20 64 75 65 20 74 6f 20 6c  D error due to l
cd30: 6f 63 6b 73 0a 20 20 2a 2a 20 68 65 6c 64 20 62  ocks.  ** held b
cd40: 79 20 59 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69  y Y..  */.  sqli
cd50: 74 65 33 20 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f  te3 *pBlockingCo
cd60: 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e  nnection; /* Con
cd70: 6e 65 63 74 69 6f 6e 20 74 68 61 74 20 63 61 75  nection that cau
cd80: 73 65 64 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45  sed SQLITE_LOCKE
cd90: 44 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a  D */.  sqlite3 *
cda0: 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f  pUnlockConnectio
cdb0: 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  n;           /* 
cdc0: 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 77 61  Connection to wa
cdd0: 74 63 68 20 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a  tch for unlock *
cde0: 2f 0a 20 20 76 6f 69 64 20 2a 70 55 6e 6c 6f 63  /.  void *pUnloc
cdf0: 6b 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  kArg;           
ce00: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
ce10: 75 6d 65 6e 74 20 74 6f 20 78 55 6e 6c 6f 63 6b  ument to xUnlock
ce20: 4e 6f 74 69 66 79 20 2a 2f 0a 20 20 76 6f 69 64  Notify */.  void
ce30: 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79   (*xUnlockNotify
ce40: 29 28 76 6f 69 64 20 2a 2a 2c 20 69 6e 74 29 3b  )(void **, int);
ce50: 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69    /* Unlock noti
ce60: 66 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  fy callback */. 
ce70: 20 73 71 6c 69 74 65 33 20 2a 70 4e 65 78 74 42   sqlite3 *pNextB
ce80: 6c 6f 63 6b 65 64 3b 20 20 20 20 20 20 20 20 2f  locked;        /
ce90: 2a 20 4e 65 78 74 20 69 6e 20 6c 69 73 74 20 6f  * Next in list o
cea0: 66 20 61 6c 6c 20 62 6c 6f 63 6b 65 64 20 63 6f  f all blocked co
ceb0: 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e  nnections */.#en
cec0: 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
ced0: 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43  E_USER_AUTHENTIC
cee0: 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f  ATION.  sqlite3_
cef0: 75 73 65 72 61 75 74 68 20 61 75 74 68 3b 20 20  userauth auth;  
cf00: 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20 61 75        /* User au
cf10: 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 69 6e 66  thentication inf
cf20: 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64  ormation */.#end
cf30: 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d  if.};../*.** A m
cf40: 61 63 72 6f 20 74 6f 20 64 69 73 63 6f 76 65 72  acro to discover
cf50: 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66   the encoding of
cf60: 20 61 20 64 61 74 61 62 61 73 65 2e 0a 2a 2f 0a   a database..*/.
cf70: 23 64 65 66 69 6e 65 20 53 43 48 45 4d 41 5f 45  #define SCHEMA_E
cf80: 4e 43 28 64 62 29 20 28 28 64 62 29 2d 3e 61 44  NC(db) ((db)->aD
cf90: 62 5b 30 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e  b[0].pSchema->en
cfa0: 63 29 0a 23 64 65 66 69 6e 65 20 45 4e 43 28 64  c).#define ENC(d
cfb0: 62 29 20 20 20 20 20 20 20 20 28 28 64 62 29 2d  b)        ((db)-
cfc0: 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73  >enc)../*.** Pos
cfd0: 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72  sible values for
cfe0: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 66 6c 61   the sqlite3.fla
cff0: 67 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20  gs..**.** Value 
d000: 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66  constraints (enf
d010: 6f 72 63 65 64 20 76 69 61 20 61 73 73 65 72 74  orced via assert
d020: 28 29 29 3a 0a 2a 2a 20 20 20 20 20 20 53 51 4c  ()):.**      SQL
d030: 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20 20 20  ITE_FullFSync   
d040: 20 20 3d 3d 20 50 41 47 45 52 5f 46 55 4c 4c 46    == PAGER_FULLF
d050: 53 59 4e 43 0a 2a 2a 20 20 20 20 20 20 53 51 4c  SYNC.**      SQL
d060: 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e  ITE_CkptFullFSyn
d070: 63 20 3d 3d 20 50 41 47 45 52 5f 43 4b 50 54 5f  c == PAGER_CKPT_
d080: 46 55 4c 4c 46 53 59 4e 43 0a 2a 2a 20 20 20 20  FULLFSYNC.**    
d090: 20 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70    SQLITE_CacheSp
d0a0: 69 6c 6c 20 20 20 20 3d 3d 20 50 41 47 45 52 5f  ill    == PAGER_
d0b0: 43 41 43 48 45 5f 53 50 49 4c 4c 0a 2a 2f 0a 23  CACHE_SPILL.*/.#
d0c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64  define SQLITE_Vd
d0d0: 62 65 54 72 61 63 65 20 20 20 20 20 20 30 78 30  beTrace      0x0
d0e0: 30 30 30 30 30 30 31 20 20 2f 2a 20 54 72 75 65  0000001  /* True
d0f0: 20 74 6f 20 74 72 61 63 65 20 56 44 42 45 20 65   to trace VDBE e
d100: 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  xecution */.#def
d110: 69 6e 65 20 53 51 4c 49 54 45 5f 49 6e 74 65 72  ine SQLITE_Inter
d120: 6e 43 68 61 6e 67 65 73 20 20 30 78 30 30 30 30  nChanges  0x0000
d130: 30 30 30 32 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69  0002  /* Uncommi
d140: 74 74 65 64 20 48 61 73 68 20 74 61 62 6c 65 20  tted Hash table 
d150: 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69  changes */.#defi
d160: 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 43 6f  ne SQLITE_FullCo
d170: 6c 4e 61 6d 65 73 20 20 20 30 78 30 30 30 30 30  lNames   0x00000
d180: 30 30 34 20 20 2f 2a 20 53 68 6f 77 20 66 75 6c  004  /* Show ful
d190: 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f  l column names o
d1a0: 6e 20 53 45 4c 45 43 54 20 2a 2f 0a 23 64 65 66  n SELECT */.#def
d1b0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46  ine SQLITE_FullF
d1c0: 53 79 6e 63 20 20 20 20 20 20 30 78 30 30 30 30  Sync      0x0000
d1d0: 30 30 30 38 20 20 2f 2a 20 55 73 65 20 66 75 6c  0008  /* Use ful
d1e0: 6c 20 66 73 79 6e 63 20 6f 6e 20 74 68 65 20 62  l fsync on the b
d1f0: 61 63 6b 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e  ackend */.#defin
d200: 65 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c  e SQLITE_CkptFul
d210: 6c 46 53 79 6e 63 20 20 30 78 30 30 30 30 30 30  lFSync  0x000000
d220: 31 30 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20  10  /* Use full 
d230: 66 73 79 6e 63 20 66 6f 72 20 63 68 65 63 6b 70  fsync for checkp
d240: 6f 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  oint */.#define 
d250: 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c  SQLITE_CacheSpil
d260: 6c 20 20 20 20 20 30 78 30 30 30 30 30 30 32 30  l     0x00000020
d270: 20 20 2f 2a 20 4f 4b 20 74 6f 20 73 70 69 6c 6c    /* OK to spill
d280: 20 70 61 67 65 72 20 63 61 63 68 65 20 2a 2f 0a   pager cache */.
d290: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
d2a0: 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20 20 30 78  hortColNames  0x
d2b0: 30 30 30 30 30 30 34 30 20 20 2f 2a 20 53 68 6f  00000040  /* Sho
d2c0: 77 20 73 68 6f 72 74 20 63 6f 6c 75 6d 6e 73 20  w short columns 
d2d0: 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  names */.#define
d2e0: 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77   SQLITE_CountRow
d2f0: 73 20 20 20 20 20 20 30 78 30 30 30 30 30 30 38  s      0x0000008
d300: 30 20 20 2f 2a 20 43 6f 75 6e 74 20 72 6f 77 73  0  /* Count rows
d310: 20 63 68 61 6e 67 65 64 20 62 79 20 49 4e 53 45   changed by INSE
d320: 52 54 2c 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  RT, */.         
d330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d350: 20 2f 2a 20 20 20 44 45 4c 45 54 45 2c 20 6f 72   /*   DELETE, or
d360: 20 55 50 44 41 54 45 20 61 6e 64 20 72 65 74 75   UPDATE and retu
d370: 72 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  rn */.          
d380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d3a0: 2f 2a 20 20 20 74 68 65 20 63 6f 75 6e 74 20 75  /*   the count u
d3b0: 73 69 6e 67 20 61 20 63 61 6c 6c 62 61 63 6b 2e  sing a callback.
d3c0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
d3d0: 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 20  TE_NullCallback 
d3e0: 20 20 30 78 30 30 30 30 30 31 30 30 20 20 2f 2a    0x00000100  /*
d3f0: 20 49 6e 76 6f 6b 65 20 74 68 65 20 63 61 6c 6c   Invoke the call
d400: 62 61 63 6b 20 6f 6e 63 65 20 69 66 20 74 68 65  back once if the
d410: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
d420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
d440: 20 20 20 72 65 73 75 6c 74 20 73 65 74 20 69 73     result set is
d450: 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e   empty */.#defin
d460: 65 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63  e SQLITE_SqlTrac
d470: 65 20 20 20 20 20 20 20 30 78 30 30 30 30 30 32  e       0x000002
d480: 30 30 20 20 2f 2a 20 44 65 62 75 67 20 70 72 69  00  /* Debug pri
d490: 6e 74 20 53 51 4c 20 61 73 20 69 74 20 65 78 65  nt SQL as it exe
d4a0: 63 75 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  cutes */.#define
d4b0: 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74   SQLITE_VdbeList
d4c0: 69 6e 67 20 20 20 20 30 78 30 30 30 30 30 34 30  ing    0x0000040
d4d0: 30 20 20 2f 2a 20 44 65 62 75 67 20 6c 69 73 74  0  /* Debug list
d4e0: 69 6e 67 73 20 6f 66 20 56 44 42 45 20 70 72 6f  ings of VDBE pro
d4f0: 67 72 61 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65  grams */.#define
d500: 20 53 51 4c 49 54 45 5f 57 72 69 74 65 53 63 68   SQLITE_WriteSch
d510: 65 6d 61 20 20 20 20 30 78 30 30 30 30 30 38 30  ema    0x0000080
d520: 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 75 70 64 61  0  /* OK to upda
d530: 74 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52  te SQLITE_MASTER
d540: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
d550: 54 45 5f 56 64 62 65 41 64 64 6f 70 54 72 61 63  TE_VdbeAddopTrac
d560: 65 20 30 78 30 30 30 30 31 30 30 30 20 20 2f 2a  e 0x00001000  /*
d570: 20 54 72 61 63 65 20 73 71 6c 69 74 65 33 56 64   Trace sqlite3Vd
d580: 62 65 41 64 64 4f 70 28 29 20 63 61 6c 6c 73 20  beAddOp() calls 
d590: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d5a0: 45 5f 49 67 6e 6f 72 65 43 68 65 63 6b 73 20 20  E_IgnoreChecks  
d5b0: 20 30 78 30 30 30 30 32 30 30 30 20 20 2f 2a 20   0x00002000  /* 
d5c0: 44 6f 20 6e 6f 74 20 65 6e 66 6f 72 63 65 20 63  Do not enforce c
d5d0: 68 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73  heck constraints
d5e0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
d5f0: 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74  TE_ReadUncommitt
d600: 65 64 20 30 78 30 30 30 34 30 30 30 20 20 2f 2a  ed 0x0004000  /*
d610: 20 46 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68   For shared-cach
d620: 65 20 6d 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e  e mode */.#defin
d630: 65 20 53 51 4c 49 54 45 5f 4c 65 67 61 63 79 46  e SQLITE_LegacyF
d640: 69 6c 65 46 6d 74 20 20 30 78 30 30 30 30 38 30  ileFmt  0x000080
d650: 30 30 20 20 2f 2a 20 43 72 65 61 74 65 20 6e 65  00  /* Create ne
d660: 77 20 64 61 74 61 62 61 73 65 73 20 69 6e 20 66  w databases in f
d670: 6f 72 6d 61 74 20 31 20 2a 2f 0a 23 64 65 66 69  ormat 1 */.#defi
d680: 6e 65 20 53 51 4c 49 54 45 5f 52 65 63 6f 76 65  ne SQLITE_Recove
d690: 72 79 4d 6f 64 65 20 20 20 30 78 30 30 30 31 30  ryMode   0x00010
d6a0: 30 30 30 20 20 2f 2a 20 49 67 6e 6f 72 65 20 73  000  /* Ignore s
d6b0: 63 68 65 6d 61 20 65 72 72 6f 72 73 20 2a 2f 0a  chema errors */.
d6c0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52  #define SQLITE_R
d6d0: 65 76 65 72 73 65 4f 72 64 65 72 20 20 20 30 78  everseOrder   0x
d6e0: 30 30 30 32 30 30 30 30 20 20 2f 2a 20 52 65 76  00020000  /* Rev
d6f0: 65 72 73 65 20 75 6e 6f 72 64 65 72 65 64 20 53  erse unordered S
d700: 45 4c 45 43 54 73 20 2a 2f 0a 23 64 65 66 69 6e  ELECTs */.#defin
d710: 65 20 53 51 4c 49 54 45 5f 52 65 63 54 72 69 67  e SQLITE_RecTrig
d720: 67 65 72 73 20 20 20 20 30 78 30 30 30 34 30 30  gers    0x000400
d730: 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 72 65  00  /* Enable re
d740: 63 75 72 73 69 76 65 20 74 72 69 67 67 65 72 73  cursive triggers
d750: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
d760: 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73 20 20  TE_ForeignKeys  
d770: 20 20 30 78 30 30 30 38 30 30 30 30 20 20 2f 2a    0x00080000  /*
d780: 20 45 6e 66 6f 72 63 65 20 66 6f 72 65 69 67 6e   Enforce foreign
d790: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
d7a0: 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c    */.#define SQL
d7b0: 49 54 45 5f 41 75 74 6f 49 6e 64 65 78 20 20 20  ITE_AutoIndex   
d7c0: 20 20 20 30 78 30 30 31 30 30 30 30 30 20 20 2f     0x00100000  /
d7d0: 2a 20 45 6e 61 62 6c 65 20 61 75 74 6f 6d 61 74  * Enable automat
d7e0: 69 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64  ic indexes */.#d
d7f0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 72 65  efine SQLITE_Pre
d800: 66 65 72 42 75 69 6c 74 69 6e 20 20 30 78 30 30  ferBuiltin  0x00
d810: 32 30 30 30 30 30 20 20 2f 2a 20 50 72 65 66 65  200000  /* Prefe
d820: 72 65 6e 63 65 20 74 6f 20 62 75 69 6c 74 2d 69  rence to built-i
d830: 6e 20 66 75 6e 63 73 20 2a 2f 0a 23 64 65 66 69  n funcs */.#defi
d840: 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78  ne SQLITE_LoadEx
d850: 74 65 6e 73 69 6f 6e 20 20 30 78 30 30 34 30 30  tension  0x00400
d860: 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c  000  /* Enable l
d870: 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f  oad_extension */
d880: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d890: 4c 6f 61 64 45 78 74 46 75 6e 63 20 20 20 20 30  LoadExtFunc    0
d8a0: 78 30 30 38 30 30 30 30 30 20 20 2f 2a 20 45 6e  x00800000  /* En
d8b0: 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73  able load_extens
d8c0: 69 6f 6e 28 29 20 53 51 4c 20 66 75 6e 63 20 2a  ion() SQL func *
d8d0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d8e0: 5f 45 6e 61 62 6c 65 54 72 69 67 67 65 72 20 20  _EnableTrigger  
d8f0: 30 78 30 31 30 30 30 30 30 30 20 20 2f 2a 20 54  0x01000000  /* T
d900: 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 74 72  rue to enable tr
d910: 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e  iggers */.#defin
d920: 65 20 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b  e SQLITE_DeferFK
d930: 73 20 20 20 20 20 20 20 30 78 30 32 30 30 30 30  s       0x020000
d940: 30 30 20 20 2f 2a 20 44 65 66 65 72 20 61 6c 6c  00  /* Defer all
d950: 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20   FK constraints 
d960: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d970: 45 5f 51 75 65 72 79 4f 6e 6c 79 20 20 20 20 20  E_QueryOnly     
d980: 20 30 78 30 34 30 30 30 30 30 30 20 20 2f 2a 20   0x04000000  /* 
d990: 44 69 73 61 62 6c 65 20 64 61 74 61 62 61 73 65  Disable database
d9a0: 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66   changes */.#def
d9b0: 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 45  ine SQLITE_VdbeE
d9c0: 51 50 20 20 20 20 20 20 20 20 30 78 30 38 30 30  QP        0x0800
d9d0: 30 30 30 30 20 20 2f 2a 20 44 65 62 75 67 20 45  0000  /* Debug E
d9e0: 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41  XPLAIN QUERY PLA
d9f0: 4e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  N */.#define SQL
da00: 49 54 45 5f 56 61 63 75 75 6d 20 20 20 20 20 20  ITE_Vacuum      
da10: 20 20 20 30 78 31 30 30 30 30 30 30 30 20 20 2f     0x10000000  /
da20: 2a 20 43 75 72 72 65 6e 74 6c 79 20 69 6e 20 61  * Currently in a
da30: 20 56 41 43 55 55 4d 20 2a 2f 0a 23 64 65 66 69   VACUUM */.#defi
da40: 6e 65 20 53 51 4c 49 54 45 5f 43 65 6c 6c 53 69  ne SQLITE_CellSi
da50: 7a 65 43 6b 20 20 20 20 20 30 78 32 30 30 30 30  zeCk     0x20000
da60: 30 30 30 20 20 2f 2a 20 43 68 65 63 6b 20 62 74  000  /* Check bt
da70: 72 65 65 20 63 65 6c 6c 20 73 69 7a 65 73 20 6f  ree cell sizes o
da80: 6e 20 6c 6f 61 64 20 2a 2f 0a 23 64 65 66 69 6e  n load */.#defin
da90: 65 20 53 51 4c 49 54 45 5f 46 74 73 33 54 6f 6b  e SQLITE_Fts3Tok
daa0: 65 6e 69 7a 65 72 20 20 30 78 34 30 30 30 30 30  enizer  0x400000
dab0: 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 66 74  00  /* Enable ft
dac0: 73 33 5f 74 6f 6b 65 6e 69 7a 65 72 28 32 29 20  s3_tokenizer(2) 
dad0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
dae0: 45 5f 4e 6f 43 6b 70 74 4f 6e 43 6c 6f 73 65 20  E_NoCkptOnClose 
daf0: 20 30 78 38 30 30 30 30 30 30 30 20 20 2f 2a 20   0x80000000  /* 
db00: 4e 6f 20 63 68 65 63 6b 70 6f 69 6e 74 20 6f 6e  No checkpoint on
db10: 20 63 6c 6f 73 65 28 29 2f 44 45 54 41 43 48 20   close()/DETACH 
db20: 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20  */.../*.** Bits 
db30: 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 2e 64  of the sqlite3.d
db40: 62 4f 70 74 46 6c 61 67 73 20 66 69 65 6c 64 20  bOptFlags field 
db50: 74 68 61 74 20 61 72 65 20 75 73 65 64 20 62 79  that are used by
db60: 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f   the.** sqlite3_
db70: 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c  test_control(SQL
db80: 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54  ITE_TESTCTRL_OPT
db90: 49 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20  IMIZATIONS,...) 
dba0: 69 6e 74 65 72 66 61 63 65 20 74 6f 0a 2a 2a 20  interface to.** 
dbb0: 73 65 6c 65 63 74 69 76 65 6c 79 20 64 69 73 61  selectively disa
dbc0: 62 6c 65 20 76 61 72 69 6f 75 73 20 6f 70 74 69  ble various opti
dbd0: 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64  mizations..*/.#d
dbe0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65  efine SQLITE_Que
dbf0: 72 79 46 6c 61 74 74 65 6e 65 72 20 30 78 30 30  ryFlattener 0x00
dc00: 30 31 20 20 20 2f 2a 20 51 75 65 72 79 20 66 6c  01   /* Query fl
dc10: 61 74 74 65 6e 69 6e 67 20 2a 2f 0a 23 64 65 66  attening */.#def
dc20: 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 6c 75 6d  ine SQLITE_Colum
dc30: 6e 43 61 63 68 65 20 20 20 20 30 78 30 30 30 32  nCache    0x0002
dc40: 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 63 61 63     /* Column cac
dc50: 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  he */.#define SQ
dc60: 4c 49 54 45 5f 47 72 6f 75 70 42 79 4f 72 64 65  LITE_GroupByOrde
dc70: 72 20 20 20 30 78 30 30 30 34 20 20 20 2f 2a 20  r   0x0004   /* 
dc80: 47 52 4f 55 50 42 59 20 63 6f 76 65 72 20 6f 66  GROUPBY cover of
dc90: 20 4f 52 44 45 52 42 59 20 2a 2f 0a 23 64 65 66   ORDERBY */.#def
dca0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 61 63 74 6f  ine SQLITE_Facto
dcb0: 72 4f 75 74 43 6f 6e 73 74 20 30 78 30 30 30 38  rOutConst 0x0008
dcc0: 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 66     /* Constant f
dcd0: 61 63 74 6f 72 69 6e 67 20 2a 2f 0a 2f 2a 20 20  actoring */./*  
dce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 6f                no
dcf0: 74 20 75 73 65 64 20 20 20 20 30 78 30 30 31 30  t used    0x0010
dd00: 20 20 20 2f 2f 20 57 61 73 3a 20 53 51 4c 49 54     // Was: SQLIT
dd10: 45 5f 49 64 78 52 65 61 6c 41 73 49 6e 74 20 2a  E_IdxRealAsInt *
dd20: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
dd30: 5f 44 69 73 74 69 6e 63 74 4f 70 74 20 20 20 20  _DistinctOpt    
dd40: 30 78 30 30 32 30 20 20 20 2f 2a 20 44 49 53 54  0x0020   /* DIST
dd50: 49 4e 43 54 20 75 73 69 6e 67 20 69 6e 64 65 78  INCT using index
dd60: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
dd70: 4c 49 54 45 5f 43 6f 76 65 72 49 64 78 53 63 61  LITE_CoverIdxSca
dd80: 6e 20 20 20 30 78 30 30 34 30 20 20 20 2f 2a 20  n   0x0040   /* 
dd90: 43 6f 76 65 72 69 6e 67 20 69 6e 64 65 78 20 73  Covering index s
dda0: 63 61 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  cans */.#define 
ddb0: 53 51 4c 49 54 45 5f 4f 72 64 65 72 42 79 49 64  SQLITE_OrderById
ddc0: 78 4a 6f 69 6e 20 30 78 30 30 38 30 20 20 20 2f  xJoin 0x0080   /
ddd0: 2a 20 4f 52 44 45 52 20 42 59 20 6f 66 20 6a 6f  * ORDER BY of jo
dde0: 69 6e 73 20 76 69 61 20 69 6e 64 65 78 20 2a 2f  ins via index */
ddf0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
de00: 53 75 62 71 43 6f 72 6f 75 74 69 6e 65 20 20 30  SubqCoroutine  0
de10: 78 30 31 30 30 20 20 20 2f 2a 20 45 76 61 6c 75  x0100   /* Evalu
de20: 61 74 65 20 73 75 62 71 75 65 72 69 65 73 20 61  ate subqueries a
de30: 73 20 63 6f 72 6f 75 74 69 6e 65 73 20 2a 2f 0a  s coroutines */.
de40: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54  #define SQLITE_T
de50: 72 61 6e 73 69 74 69 76 65 20 20 20 20 20 30 78  ransitive     0x
de60: 30 32 30 30 20 20 20 2f 2a 20 54 72 61 6e 73 69  0200   /* Transi
de70: 74 69 76 65 20 63 6f 6e 73 74 72 61 69 6e 74 73  tive constraints
de80: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
de90: 54 45 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69 6e 20  TE_OmitNoopJoin 
dea0: 20 20 30 78 30 34 30 30 20 20 20 2f 2a 20 4f 6d    0x0400   /* Om
deb0: 69 74 20 75 6e 75 73 65 64 20 74 61 62 6c 65 73  it unused tables
dec0: 20 69 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23 64 65   in joins */.#de
ded0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 74 61 74  fine SQLITE_Stat
dee0: 33 34 20 20 20 20 20 20 20 20 20 30 78 30 38 30  34         0x080
def0: 30 20 20 20 2f 2a 20 55 73 65 20 53 54 41 54 33  0   /* Use STAT3
df00: 20 6f 72 20 53 54 41 54 34 20 64 61 74 61 20 2a   or STAT4 data *
df10: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
df20: 5f 43 75 72 73 6f 72 48 69 6e 74 73 20 20 20 20  _CursorHints    
df30: 30 78 32 30 30 30 20 20 20 2f 2a 20 41 64 64 20  0x2000   /* Add 
df40: 4f 50 5f 43 75 72 73 6f 72 48 69 6e 74 20 6f 70  OP_CursorHint op
df50: 63 6f 64 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  codes */.#define
df60: 20 53 51 4c 49 54 45 5f 41 6c 6c 4f 70 74 73 20   SQLITE_AllOpts 
df70: 20 20 20 20 20 20 20 30 78 66 66 66 66 20 20 20         0xffff   
df80: 2f 2a 20 41 6c 6c 20 6f 70 74 69 6d 69 7a 61 74  /* All optimizat
df90: 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d  ions */../*.** M
dfa0: 61 63 72 6f 73 20 66 6f 72 20 74 65 73 74 69 6e  acros for testin
dfb0: 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  g whether or not
dfc0: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 61   optimizations a
dfd0: 72 65 20 65 6e 61 62 6c 65 64 20 6f 72 20 64 69  re enabled or di
dfe0: 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 64 65 66 69  sabled..*/.#defi
dff0: 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44  ne OptimizationD
e000: 69 73 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b  isabled(db, mask
e010: 29 20 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74  )  (((db)->dbOpt
e020: 46 6c 61 67 73 26 28 6d 61 73 6b 29 29 21 3d 30  Flags&(mask))!=0
e030: 29 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69  ).#define Optimi
e040: 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62  zationEnabled(db
e050: 2c 20 6d 61 73 6b 29 20 20 20 28 28 28 64 62 29  , mask)   (((db)
e060: 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61  ->dbOptFlags&(ma
e070: 73 6b 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20  sk))==0)../*.** 
e080: 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69  Return true if i
e090: 74 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 63  t OK to factor c
e0a0: 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69  onstant expressi
e0b0: 6f 6e 73 20 69 6e 74 6f 20 74 68 65 20 69 6e 69  ons into the ini
e0c0: 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 63  tialization.** c
e0d0: 6f 64 65 2e 20 54 68 65 20 61 72 67 75 6d 65 6e  ode. The argumen
e0e0: 74 20 69 73 20 61 20 50 61 72 73 65 20 6f 62 6a  t is a Parse obj
e0f0: 65 63 74 20 66 6f 72 20 74 68 65 20 63 6f 64 65  ect for the code
e100: 20 67 65 6e 65 72 61 74 6f 72 2e 0a 2a 2f 0a 23   generator..*/.#
e110: 64 65 66 69 6e 65 20 43 6f 6e 73 74 46 61 63 74  define ConstFact
e120: 6f 72 4f 6b 28 50 29 20 28 28 50 29 2d 3e 6f 6b  orOk(P) ((P)->ok
e130: 43 6f 6e 73 74 46 61 63 74 6f 72 29 0a 0a 2f 2a  ConstFactor)../*
e140: 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c  .** Possible val
e150: 75 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69  ues for the sqli
e160: 74 65 2e 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a  te.magic field..
e170: 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 73 20 61  ** The numbers a
e180: 72 65 20 6f 62 74 61 69 6e 65 64 20 61 74 20 72  re obtained at r
e190: 61 6e 64 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e  andom and have n
e1a0: 6f 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  o special meanin
e1b0: 67 2c 20 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e  g, other.** than
e1c0: 20 62 65 69 6e 67 20 64 69 73 74 69 6e 63 74 20   being distinct 
e1d0: 66 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72  from one another
e1e0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
e1f0: 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20  ITE_MAGIC_OPEN  
e200: 20 20 20 30 78 61 30 32 39 61 36 39 37 20 20 2f     0xa029a697  /
e210: 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 6f 70  * Database is op
e220: 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  en */.#define SQ
e230: 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45  LITE_MAGIC_CLOSE
e240: 44 20 20 20 30 78 39 66 33 63 32 64 33 33 20 20  D   0x9f3c2d33  
e250: 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 63  /* Database is c
e260: 6c 6f 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  losed */.#define
e270: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49   SQLITE_MAGIC_SI
e280: 43 4b 20 20 20 20 20 30 78 34 62 37 37 31 32 39  CK     0x4b77129
e290: 30 20 20 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20  0  /* Error and 
e2a0: 61 77 61 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a  awaiting close *
e2b0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e2c0: 5f 4d 41 47 49 43 5f 42 55 53 59 20 20 20 20 20  _MAGIC_BUSY     
e2d0: 30 78 66 30 33 62 37 39 30 36 20 20 2f 2a 20 44  0xf03b7906  /* D
e2e0: 61 74 61 62 61 73 65 20 63 75 72 72 65 6e 74 6c  atabase currentl
e2f0: 79 20 69 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66  y in use */.#def
e300: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
e310: 5f 45 52 52 4f 52 20 20 20 20 30 78 62 35 33 35  _ERROR    0xb535
e320: 37 39 33 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49  7930  /* An SQLI
e330: 54 45 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 20  TE_MISUSE error 
e340: 6f 63 63 75 72 72 65 64 20 2a 2f 0a 23 64 65 66  occurred */.#def
e350: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
e360: 5f 5a 4f 4d 42 49 45 20 20 20 30 78 36 34 63 66  _ZOMBIE   0x64cf
e370: 66 63 37 66 20 20 2f 2a 20 43 6c 6f 73 65 20 77  fc7f  /* Close w
e380: 69 74 68 20 6c 61 73 74 20 73 74 61 74 65 6d 65  ith last stateme
e390: 6e 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a  nt close */../*.
e3a0: 2a 2a 20 45 61 63 68 20 53 51 4c 20 66 75 6e 63  ** Each SQL func
e3b0: 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20  tion is defined 
e3c0: 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  by an instance o
e3d0: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a  f the following.
e3e0: 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20 20 46  ** structure.  F
e3f0: 6f 72 20 67 6c 6f 62 61 6c 20 62 75 69 6c 74 2d  or global built-
e400: 69 6e 20 66 75 6e 63 74 69 6f 6e 73 20 28 65 78  in functions (ex
e410: 3a 20 73 75 62 73 74 72 28 29 2c 20 6d 61 78 28  : substr(), max(
e420: 29 2c 20 63 6f 75 6e 74 28 29 29 0a 2a 2a 20 61  ), count()).** a
e430: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73   pointer to this
e440: 20 73 74 72 75 63 74 75 72 65 20 69 73 20 68 65   structure is he
e450: 6c 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  ld in the sqlite
e460: 33 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e  3BuiltinFunction
e470: 73 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 46 6f 72  s object..** For
e480: 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20   per-connection 
e490: 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69  application-defi
e4a0: 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 2c 20 61  ned functions, a
e4b0: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73   pointer to this
e4c0: 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 69 73  .** structure is
e4d0: 20 68 65 6c 64 20 69 6e 20 74 68 65 20 64 62 2d   held in the db-
e4e0: 3e 61 48 61 73 68 20 68 61 73 68 20 74 61 62 6c  >aHash hash tabl
e4f0: 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 75 2e 70  e..**.** The u.p
e500: 48 61 73 68 20 66 69 65 6c 64 20 69 73 20 75 73  Hash field is us
e510: 65 64 20 62 79 20 74 68 65 20 67 6c 6f 62 61 6c  ed by the global
e520: 20 62 75 69 6c 74 2d 69 6e 73 2e 20 20 54 68 65   built-ins.  The
e530: 20 75 2e 70 44 65 73 74 72 75 63 74 6f 72 0a 2a   u.pDestructor.*
e540: 2a 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20  * field is used 
e550: 62 79 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f  by per-connectio
e560: 6e 20 61 70 70 2d 64 65 66 20 66 75 6e 63 74 69  n app-def functi
e570: 6f 6e 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46  ons..*/.struct F
e580: 75 6e 63 44 65 66 20 7b 0a 20 20 69 38 20 6e 41  uncDef {.  i8 nA
e590: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
e5a0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
e5b0: 75 6d 65 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e  uments.  -1 mean
e5c0: 73 20 75 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20  s unlimited */. 
e5d0: 20 75 31 36 20 66 75 6e 63 46 6c 61 67 73 3b 20   u16 funcFlags; 
e5e0: 20 20 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f        /* Some co
e5f0: 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c  mbination of SQL
e600: 49 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20  ITE_FUNC_* */.  
e610: 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b  void *pUserData;
e620: 20 20 20 20 20 2f 2a 20 55 73 65 72 20 64 61 74       /* User dat
e630: 61 20 70 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20  a parameter */. 
e640: 20 46 75 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b   FuncDef *pNext;
e650: 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 66 75        /* Next fu
e660: 6e 63 74 69 6f 6e 20 77 69 74 68 20 73 61 6d 65  nction with same
e670: 20 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20   name */.  void 
e680: 28 2a 78 53 46 75 6e 63 29 28 73 71 6c 69 74 65  (*xSFunc)(sqlite
e690: 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
e6a0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
e6b0: 20 2f 2a 20 66 75 6e 63 20 6f 72 20 61 67 67 2d   /* func or agg-
e6c0: 73 74 65 70 20 2a 2f 0a 20 20 76 6f 69 64 20 28  step */.  void (
e6d0: 2a 78 46 69 6e 61 6c 69 7a 65 29 28 73 71 6c 69  *xFinalize)(sqli
e6e0: 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20  te3_context*);  
e6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e700: 2f 2a 20 41 67 67 20 66 69 6e 61 6c 69 7a 65 72  /* Agg finalizer
e710: 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
e720: 20 2a 7a 4e 61 6d 65 3b 20 20 20 2f 2a 20 53 51   *zName;   /* SQ
e730: 4c 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75  L name of the fu
e740: 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 75 6e 69  nction. */.  uni
e750: 6f 6e 20 7b 0a 20 20 20 20 46 75 6e 63 44 65 66  on {.    FuncDef
e760: 20 2a 70 48 61 73 68 3b 20 20 20 20 20 20 2f 2a   *pHash;      /*
e770: 20 4e 65 78 74 20 77 69 74 68 20 61 20 64 69 66   Next with a dif
e780: 66 65 72 65 6e 74 20 6e 61 6d 65 20 62 75 74 20  ferent name but 
e790: 74 68 65 20 73 61 6d 65 20 68 61 73 68 20 2a 2f  the same hash */
e7a0: 0a 20 20 20 20 46 75 6e 63 44 65 73 74 72 75 63  .    FuncDestruc
e7b0: 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72  tor *pDestructor
e7c0: 3b 20 20 20 2f 2a 20 52 65 66 65 72 65 6e 63 65  ;   /* Reference
e7d0: 20 63 6f 75 6e 74 65 64 20 64 65 73 74 72 75 63   counted destruc
e7e0: 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  tor function */.
e7f0: 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a    } u;.};../*.**
e800: 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20   This structure 
e810: 65 6e 63 61 70 73 75 6c 61 74 65 73 20 61 20 75  encapsulates a u
e820: 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65 73  ser-function des
e830: 74 72 75 63 74 6f 72 20 63 61 6c 6c 62 61 63 6b  tructor callback
e840: 20 28 61 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72   (as.** configur
e850: 65 64 20 75 73 69 6e 67 20 63 72 65 61 74 65 5f  ed using create_
e860: 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 29 20 61  function_v2()) a
e870: 6e 64 20 61 20 72 65 66 65 72 65 6e 63 65 20 63  nd a reference c
e880: 6f 75 6e 74 65 72 2e 20 57 68 65 6e 0a 2a 2a 20  ounter. When.** 
e890: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f  create_function_
e8a0: 76 32 28 29 20 69 73 20 63 61 6c 6c 65 64 20 74  v2() is called t
e8b0: 6f 20 63 72 65 61 74 65 20 61 20 66 75 6e 63 74  o create a funct
e8c0: 69 6f 6e 20 77 69 74 68 20 61 20 64 65 73 74 72  ion with a destr
e8d0: 75 63 74 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e 67  uctor,.** a sing
e8e0: 6c 65 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69  le object of thi
e8f0: 73 20 74 79 70 65 20 69 73 20 61 6c 6c 6f 63 61  s type is alloca
e900: 74 65 64 2e 20 46 75 6e 63 44 65 73 74 72 75 63  ted. FuncDestruc
e910: 74 6f 72 2e 6e 52 65 66 20 69 73 20 73 65 74 20  tor.nRef is set 
e920: 74 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72  to.** the number
e930: 20 6f 66 20 46 75 6e 63 44 65 66 20 6f 62 6a 65   of FuncDef obje
e940: 63 74 73 20 63 72 65 61 74 65 64 20 28 65 69 74  cts created (eit
e950: 68 65 72 20 31 20 6f 72 20 33 2c 20 64 65 70 65  her 1 or 3, depe
e960: 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72  nding on whether
e970: 0a 2a 2a 20 6f 72 20 6e 6f 74 20 74 68 65 20 73  .** or not the s
e980: 70 65 63 69 66 69 65 64 20 65 6e 63 6f 64 69 6e  pecified encodin
e990: 67 20 69 73 20 53 51 4c 49 54 45 5f 41 4e 59 29  g is SQLITE_ANY)
e9a0: 2e 20 54 68 65 20 46 75 6e 63 44 65 66 2e 70 44  . The FuncDef.pD
e9b0: 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d  estructor.** mem
e9c0: 62 65 72 20 6f 66 20 65 61 63 68 20 6f 66 20 74  ber of each of t
e9d0: 68 65 20 6e 65 77 20 46 75 6e 63 44 65 66 20 6f  he new FuncDef o
e9e0: 62 6a 65 63 74 73 20 69 73 20 73 65 74 20 74 6f  bjects is set to
e9f0: 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 61 6c   point to the al
ea00: 6c 6f 63 61 74 65 64 0a 2a 2a 20 46 75 6e 63 44  located.** FuncD
ea10: 65 73 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a  estructor..**.**
ea20: 20 54 68 65 72 65 61 66 74 65 72 2c 20 77 68 65   Thereafter, whe
ea30: 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e  n one of the Fun
ea40: 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20  cDef objects is 
ea50: 64 65 6c 65 74 65 64 2c 20 74 68 65 20 72 65 66  deleted, the ref
ea60: 65 72 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74 20  erence.** count 
ea70: 6f 6e 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69  on this object i
ea80: 73 20 64 65 63 72 65 6d 65 6e 74 65 64 2e 20 57  s decremented. W
ea90: 68 65 6e 20 69 74 20 72 65 61 63 68 65 73 20 30  hen it reaches 0
eaa0: 2c 20 74 68 65 20 64 65 73 74 72 75 63 74 6f 72  , the destructor
eab0: 0a 2a 2a 20 69 73 20 69 6e 76 6f 6b 65 64 20 61  .** is invoked a
eac0: 6e 64 20 74 68 65 20 46 75 6e 63 44 65 73 74 72  nd the FuncDestr
ead0: 75 63 74 6f 72 20 73 74 72 75 63 74 75 72 65 20  uctor structure 
eae0: 66 72 65 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  freed..*/.struct
eaf0: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
eb00: 7b 0a 20 20 69 6e 74 20 6e 52 65 66 3b 0a 20 20  {.  int nRef;.  
eb10: 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29  void (*xDestroy)
eb20: 28 76 6f 69 64 20 2a 29 3b 0a 20 20 76 6f 69 64  (void *);.  void
eb30: 20 2a 70 55 73 65 72 44 61 74 61 3b 0a 7d 3b 0a   *pUserData;.};.
eb40: 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20  ./*.** Possible 
eb50: 76 61 6c 75 65 73 20 66 6f 72 20 46 75 6e 63 44  values for FuncD
eb60: 65 66 2e 66 6c 61 67 73 2e 20 20 4e 6f 74 65 20  ef.flags.  Note 
eb70: 74 68 61 74 20 74 68 65 20 5f 4c 45 4e 47 54 48  that the _LENGTH
eb80: 20 61 6e 64 20 5f 54 59 50 45 4f 46 0a 2a 2a 20   and _TYPEOF.** 
eb90: 76 61 6c 75 65 73 20 6d 75 73 74 20 63 6f 72 72  values must corr
eba0: 65 73 70 6f 6e 64 20 74 6f 20 4f 50 46 4c 41 47  espond to OPFLAG
ebb0: 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f  _LENGTHARG and O
ebc0: 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 2e  PFLAG_TYPEOFARG.
ebd0: 20 20 41 6e 64 0a 2a 2a 20 53 51 4c 49 54 45 5f    And.** SQLITE_
ebe0: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 6d 75  FUNC_CONSTANT mu
ebf0: 73 74 20 62 65 20 74 68 65 20 73 61 6d 65 20 61  st be the same a
ec00: 73 20 53 51 4c 49 54 45 5f 44 45 54 45 52 4d 49  s SQLITE_DETERMI
ec10: 4e 49 53 54 49 43 2e 20 20 54 68 65 72 65 0a 2a  NISTIC.  There.*
ec20: 2a 20 61 72 65 20 61 73 73 65 72 74 28 29 20 73  * are assert() s
ec30: 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65  tatements in the
ec40: 20 63 6f 64 65 20 74 6f 20 76 65 72 69 66 79 20   code to verify 
ec50: 74 68 69 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75  this..**.** Valu
ec60: 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65  e constraints (e
ec70: 6e 66 6f 72 63 65 64 20 76 69 61 20 61 73 73 65  nforced via asse
ec80: 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20 53 51  rt()):.**     SQ
ec90: 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58  LITE_FUNC_MINMAX
eca0: 20 20 20 20 3d 3d 20 20 4e 43 5f 4d 69 6e 4d 61      ==  NC_MinMa
ecb0: 78 41 67 67 20 20 20 20 20 20 3d 3d 20 53 46 5f  xAgg      == SF_
ecc0: 4d 69 6e 4d 61 78 41 67 67 0a 2a 2a 20 20 20 20  MinMaxAgg.**    
ecd0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e   SQLITE_FUNC_LEN
ece0: 47 54 48 20 20 20 20 3d 3d 20 20 4f 50 46 4c 41  GTH    ==  OPFLA
ecf0: 47 5f 4c 45 4e 47 54 48 41 52 47 0a 2a 2a 20 20  G_LENGTHARG.**  
ed00: 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54     SQLITE_FUNC_T
ed10: 59 50 45 4f 46 20 20 20 20 3d 3d 20 20 4f 50 46  YPEOF    ==  OPF
ed20: 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 0a 2a 2a  LAG_TYPEOFARG.**
ed30: 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43       SQLITE_FUNC
ed40: 5f 43 4f 4e 53 54 41 4e 54 20 20 3d 3d 20 20 53  _CONSTANT  ==  S
ed50: 51 4c 49 54 45 5f 44 45 54 45 52 4d 49 4e 49 53  QLITE_DETERMINIS
ed60: 54 49 43 20 66 72 6f 6d 20 74 68 65 20 41 50 49  TIC from the API
ed70: 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46  .**     SQLITE_F
ed80: 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 20 64 65  UNC_ENCMASK   de
ed90: 70 65 6e 64 73 20 6f 6e 20 53 51 4c 49 54 45 5f  pends on SQLITE_
eda0: 55 54 46 2a 20 6d 61 63 72 6f 73 20 69 6e 20 74  UTF* macros in t
edb0: 68 65 20 41 50 49 0a 2a 2f 0a 23 64 65 66 69 6e  he API.*/.#defin
edc0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e  e SQLITE_FUNC_EN
edd0: 43 4d 41 53 4b 20 20 30 78 30 30 30 33 20 2f 2a  CMASK  0x0003 /*
ede0: 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51   SQLITE_UTF8, SQ
edf0: 4c 49 54 45 5f 55 54 46 31 36 42 45 20 6f 72 20  LITE_UTF16BE or 
ee00: 55 54 46 31 36 4c 45 20 2a 2f 0a 23 64 65 66 69  UTF16LE */.#defi
ee10: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c  ne SQLITE_FUNC_L
ee20: 49 4b 45 20 20 20 20 20 30 78 30 30 30 34 20 2f  IKE     0x0004 /
ee30: 2a 20 43 61 6e 64 69 64 61 74 65 20 66 6f 72 20  * Candidate for 
ee40: 74 68 65 20 4c 49 4b 45 20 6f 70 74 69 6d 69 7a  the LIKE optimiz
ee50: 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ation */.#define
ee60: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 41 53   SQLITE_FUNC_CAS
ee70: 45 20 20 20 20 20 30 78 30 30 30 38 20 2f 2a 20  E     0x0008 /* 
ee80: 43 61 73 65 2d 73 65 6e 73 69 74 69 76 65 20 4c  Case-sensitive L
ee90: 49 4b 45 2d 74 79 70 65 20 66 75 6e 63 74 69 6f  IKE-type functio
eea0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
eeb0: 49 54 45 5f 46 55 4e 43 5f 45 50 48 45 4d 20 20  ITE_FUNC_EPHEM  
eec0: 20 20 30 78 30 30 31 30 20 2f 2a 20 45 70 68 65    0x0010 /* Ephe
eed0: 6d 65 72 61 6c 2e 20 20 44 65 6c 65 74 65 20 77  meral.  Delete w
eee0: 69 74 68 20 56 44 42 45 20 2a 2f 0a 23 64 65 66  ith VDBE */.#def
eef0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
ef00: 4e 45 45 44 43 4f 4c 4c 20 30 78 30 30 32 30 20  NEEDCOLL 0x0020 
ef10: 2f 2a 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e  /* sqlite3GetFun
ef20: 63 43 6f 6c 6c 53 65 71 28 29 20 6d 69 67 68 74  cCollSeq() might
ef30: 20 62 65 20 63 61 6c 6c 65 64 2a 2f 0a 23 64 65   be called*/.#de
ef40: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
ef50: 5f 4c 45 4e 47 54 48 20 20 20 30 78 30 30 34 30  _LENGTH   0x0040
ef60: 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 6c 65 6e   /* Built-in len
ef70: 67 74 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a  gth() function *
ef80: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ef90: 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20 30  _FUNC_TYPEOF   0
efa0: 78 30 30 38 30 20 2f 2a 20 42 75 69 6c 74 2d 69  x0080 /* Built-i
efb0: 6e 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74  n typeof() funct
efc0: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
efd0: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e 54  QLITE_FUNC_COUNT
efe0: 20 20 20 20 30 78 30 31 30 30 20 2f 2a 20 42 75      0x0100 /* Bu
eff0: 69 6c 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29 20  ilt-in count(*) 
f000: 61 67 67 72 65 67 61 74 65 20 2a 2f 0a 23 64 65  aggregate */.#de
f010: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
f020: 5f 43 4f 41 4c 45 53 43 45 20 30 78 30 32 30 30  _COALESCE 0x0200
f030: 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 61   /* Built-in coa
f040: 6c 65 73 63 65 28 29 20 6f 72 20 69 66 6e 75 6c  lesce() or ifnul
f050: 6c 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  l() */.#define S
f060: 51 4c 49 54 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b  QLITE_FUNC_UNLIK
f070: 45 4c 59 20 30 78 30 34 30 30 20 2f 2a 20 42 75  ELY 0x0400 /* Bu
f080: 69 6c 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79 28  ilt-in unlikely(
f090: 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
f0a0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
f0b0: 43 5f 43 4f 4e 53 54 41 4e 54 20 30 78 30 38 30  C_CONSTANT 0x080
f0c0: 30 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 69 6e  0 /* Constant in
f0d0: 70 75 74 73 20 67 69 76 65 20 61 20 63 6f 6e 73  puts give a cons
f0e0: 74 61 6e 74 20 6f 75 74 70 75 74 20 2a 2f 0a 23  tant output */.#
f0f0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
f100: 4e 43 5f 4d 49 4e 4d 41 58 20 20 20 30 78 31 30  NC_MINMAX   0x10
f110: 30 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 6d  00 /* True for m
f120: 69 6e 28 29 20 61 6e 64 20 6d 61 78 28 29 20 61  in() and max() a
f130: 67 67 72 65 67 61 74 65 73 20 2a 2f 0a 23 64 65  ggregates */.#de
f140: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
f150: 5f 53 4c 4f 43 48 4e 47 20 20 30 78 32 30 30 30  _SLOCHNG  0x2000
f160: 20 2f 2a 20 22 53 6c 6f 77 20 43 68 61 6e 67 65   /* "Slow Change
f170: 22 2e 20 56 61 6c 75 65 20 63 6f 6e 73 74 61 6e  ". Value constan
f180: 74 20 64 75 72 69 6e 67 20 61 0a 20 20 20 20 20  t during a.     
f190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
f1b0: 2a 20 73 69 6e 67 6c 65 20 71 75 65 72 79 20 2d  * single query -
f1c0: 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 6f 76   might change ov
f1d0: 65 72 20 74 69 6d 65 20 2a 2f 0a 23 64 65 66 69  er time */.#defi
f1e0: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 41  ne SQLITE_FUNC_A
f1f0: 46 46 49 4e 49 54 59 20 30 78 34 30 30 30 20 2f  FFINITY 0x4000 /
f200: 2a 20 42 75 69 6c 74 2d 69 6e 20 61 66 66 69 6e  * Built-in affin
f210: 69 74 79 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a  ity() function *
f220: 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  /../*.** The fol
f230: 6c 6f 77 69 6e 67 20 74 68 72 65 65 20 6d 61 63  lowing three mac
f240: 72 6f 73 2c 20 46 55 4e 43 54 49 4f 4e 28 29 2c  ros, FUNCTION(),
f250: 20 4c 49 4b 45 46 55 4e 43 28 29 20 61 6e 64 20   LIKEFUNC() and 
f260: 41 47 47 52 45 47 41 54 45 28 29 20 61 72 65 0a  AGGREGATE() are.
f270: 2a 2a 20 75 73 65 64 20 74 6f 20 63 72 65 61 74  ** used to creat
f280: 65 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 65  e the initialize
f290: 72 73 20 66 6f 72 20 74 68 65 20 46 75 6e 63 44  rs for the FuncD
f2a0: 65 66 20 73 74 72 75 63 74 75 72 65 73 2e 0a 2a  ef structures..*
f2b0: 2a 0a 2a 2a 20 20 20 46 55 4e 43 54 49 4f 4e 28  *.**   FUNCTION(
f2c0: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
f2d0: 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a  g, bNC, xFunc).*
f2e0: 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72  *     Used to cr
f2f0: 65 61 74 65 20 61 20 73 63 61 6c 61 72 20 66 75  eate a scalar fu
f300: 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f  nction definitio
f310: 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20  n of a function 
f320: 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20 20 69 6d 70  zName.**     imp
f330: 6c 65 6d 65 6e 74 65 64 20 62 79 20 43 20 66 75  lemented by C fu
f340: 6e 63 74 69 6f 6e 20 78 46 75 6e 63 20 74 68 61  nction xFunc tha
f350: 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20 61  t accepts nArg a
f360: 72 67 75 6d 65 6e 74 73 2e 20 54 68 65 0a 2a 2a  rguments. The.**
f370: 20 20 20 20 20 76 61 6c 75 65 20 70 61 73 73 65       value passe
f380: 64 20 61 73 20 69 41 72 67 20 69 73 20 63 61 73  d as iArg is cas
f390: 74 20 74 6f 20 61 20 28 76 6f 69 64 2a 29 20 61  t to a (void*) a
f3a0: 6e 64 20 6d 61 64 65 20 61 76 61 69 6c 61 62 6c  nd made availabl
f3b0: 65 0a 2a 2a 20 20 20 20 20 61 73 20 74 68 65 20  e.**     as the 
f3c0: 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69 74  user-data (sqlit
f3d0: 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29 20  e3_user_data()) 
f3e0: 66 6f 72 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  for the function
f3f0: 2e 20 49 66 0a 2a 2a 20 20 20 20 20 61 72 67 75  . If.**     argu
f400: 6d 65 6e 74 20 62 4e 43 20 69 73 20 74 72 75 65  ment bNC is true
f410: 2c 20 74 68 65 6e 20 74 68 65 20 53 51 4c 49 54  , then the SQLIT
f420: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20  E_FUNC_NEEDCOLL 
f430: 66 6c 61 67 20 69 73 20 73 65 74 2e 0a 2a 2a 0a  flag is set..**.
f440: 2a 2a 20 20 20 56 46 55 4e 43 54 49 4f 4e 28 7a  **   VFUNCTION(z
f450: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
f460: 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a  , bNC, xFunc).**
f470: 20 20 20 20 20 4c 69 6b 65 20 46 55 4e 43 54 49       Like FUNCTI
f480: 4f 4e 20 65 78 63 65 70 74 20 69 74 20 6f 6d 69  ON except it omi
f490: 74 73 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55  ts the SQLITE_FU
f4a0: 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67  NC_CONSTANT flag
f4b0: 2e 0a 2a 2a 0a 2a 2a 20 20 20 44 46 55 4e 43 54  ..**.**   DFUNCT
f4c0: 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ION(zName, nArg,
f4d0: 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   iArg, bNC, xFun
f4e0: 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b 65 20 46  c).**     Like F
f4f0: 55 4e 43 54 49 4f 4e 20 65 78 63 65 70 74 20 69  UNCTION except i
f500: 74 20 6f 6d 69 74 73 20 74 68 65 20 53 51 4c 49  t omits the SQLI
f510: 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
f520: 20 66 6c 61 67 20 61 6e 64 0a 2a 2a 20 20 20 20   flag and.**    
f530: 20 61 64 64 73 20 74 68 65 20 53 51 4c 49 54 45   adds the SQLITE
f540: 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 20 66 6c  _FUNC_SLOCHNG fl
f550: 61 67 2e 20 20 55 73 65 64 20 66 6f 72 20 64 61  ag.  Used for da
f560: 74 65 20 26 20 74 69 6d 65 20 66 75 6e 63 74 69  te & time functi
f570: 6f 6e 73 0a 2a 2a 20 20 20 20 20 61 6e 64 20 66  ons.**     and f
f580: 75 6e 63 74 69 6f 6e 73 20 6c 69 6b 65 20 73 71  unctions like sq
f590: 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 29 20 74  lite_version() t
f5a0: 68 61 74 20 63 61 6e 20 63 68 61 6e 67 65 2c 20  hat can change, 
f5b0: 62 75 74 20 6e 6f 74 20 64 75 72 69 6e 67 0a 2a  but not during.*
f5c0: 2a 20 20 20 20 20 61 20 73 69 6e 67 6c 65 20 71  *     a single q
f5d0: 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 20 20 41 47  uery..**.**   AG
f5e0: 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e  GREGATE(zName, n
f5f0: 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
f600: 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 0a 2a  xStep, xFinal).*
f610: 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72  *     Used to cr
f620: 65 61 74 65 20 61 6e 20 61 67 67 72 65 67 61 74  eate an aggregat
f630: 65 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e  e function defin
f640: 69 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65  ition implemente
f650: 64 20 62 79 0a 2a 2a 20 20 20 20 20 74 68 65 20  d by.**     the 
f660: 43 20 66 75 6e 63 74 69 6f 6e 73 20 78 53 74 65  C functions xSte
f670: 70 20 61 6e 64 20 78 46 69 6e 61 6c 2e 20 54 68  p and xFinal. Th
f680: 65 20 66 69 72 73 74 20 66 6f 75 72 20 70 61 72  e first four par
f690: 61 6d 65 74 65 72 73 0a 2a 2a 20 20 20 20 20 61  ameters.**     a
f6a0: 72 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 69  re interpreted i
f6b0: 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79 20 61  n the same way a
f6c0: 73 20 74 68 65 20 66 69 72 73 74 20 34 20 70 61  s the first 4 pa
f6d0: 72 61 6d 65 74 65 72 73 20 74 6f 0a 2a 2a 20 20  rameters to.**  
f6e0: 20 20 20 46 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a     FUNCTION()..*
f6f0: 2a 0a 2a 2a 20 20 20 4c 49 4b 45 46 55 4e 43 28  *.**   LIKEFUNC(
f700: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72  zName, nArg, pAr
f710: 67 2c 20 66 6c 61 67 73 29 0a 2a 2a 20 20 20 20  g, flags).**    
f720: 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20   Used to create 
f730: 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f  a scalar functio
f740: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20  n definition of 
f750: 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65  a function zName
f760: 0a 2a 2a 20 20 20 20 20 74 68 61 74 20 61 63 63  .**     that acc
f770: 65 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65  epts nArg argume
f780: 6e 74 73 20 61 6e 64 20 69 73 20 69 6d 70 6c 65  nts and is imple
f790: 6d 65 6e 74 65 64 20 62 79 20 61 20 63 61 6c 6c  mented by a call
f7a0: 20 74 6f 20 43 0a 2a 2a 20 20 20 20 20 66 75 6e   to C.**     fun
f7b0: 63 74 69 6f 6e 20 6c 69 6b 65 46 75 6e 63 2e 20  ction likeFunc. 
f7c0: 41 72 67 75 6d 65 6e 74 20 70 41 72 67 20 69 73  Argument pArg is
f7d0: 20 63 61 73 74 20 74 6f 20 61 20 28 76 6f 69 64   cast to a (void
f7e0: 20 2a 29 20 61 6e 64 20 6d 61 64 65 0a 2a 2a 20   *) and made.** 
f7f0: 20 20 20 20 61 76 61 69 6c 61 62 6c 65 20 61 73      available as
f800: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 75 73   the function us
f810: 65 72 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33  er-data (sqlite3
f820: 5f 75 73 65 72 5f 64 61 74 61 28 29 29 2e 20 54  _user_data()). T
f830: 68 65 0a 2a 2a 20 20 20 20 20 46 75 6e 63 44 65  he.**     FuncDe
f840: 66 2e 66 6c 61 67 73 20 76 61 72 69 61 62 6c 65  f.flags variable
f850: 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 76   is set to the v
f860: 61 6c 75 65 20 70 61 73 73 65 64 20 61 73 20 74  alue passed as t
f870: 68 65 20 66 6c 61 67 73 0a 2a 2a 20 20 20 20 20  he flags.**     
f880: 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a 23 64  parameter..*/.#d
f890: 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e 28 7a  efine FUNCTION(z
f8a0: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
f8b0: 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a  , bNC, xFunc) \.
f8c0: 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
f8d0: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51  FUNC_CONSTANT|SQ
f8e0: 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53  LITE_UTF8|(bNC*S
f8f0: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
f900: 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54  OLL), \.   SQLIT
f910: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72  E_INT_TO_PTR(iAr
f920: 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c  g), 0, xFunc, 0,
f930: 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23   #zName, {0} }.#
f940: 64 65 66 69 6e 65 20 56 46 55 4e 43 54 49 4f 4e  define VFUNCTION
f950: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
f960: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20  rg, bNC, xFunc) 
f970: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
f980: 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49  E_UTF8|(bNC*SQLI
f990: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
f9a0: 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49  ), \.   SQLITE_I
f9b0: 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c  NT_TO_PTR(iArg),
f9c0: 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23 7a   0, xFunc, 0, #z
f9d0: 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66  Name, {0} }.#def
f9e0: 69 6e 65 20 44 46 55 4e 43 54 49 4f 4e 28 7a 4e  ine DFUNCTION(zN
f9f0: 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
fa00: 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20   bNC, xFunc) \. 
fa10: 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46   {nArg, SQLITE_F
fa20: 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49  UNC_SLOCHNG|SQLI
fa30: 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c  TE_UTF8|(bNC*SQL
fa40: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
fa50: 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f  L), \.   SQLITE_
fa60: 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29  INT_TO_PTR(iArg)
fa70: 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23  , 0, xFunc, 0, #
fa80: 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65  zName, {0} }.#de
fa90: 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e 32 28 7a  fine FUNCTION2(z
faa0: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
fab0: 2c 20 62 4e 43 2c 20 78 46 75 6e 63 2c 20 65 78  , bNC, xFunc, ex
fac0: 74 72 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e  traFlags) \.  {n
fad0: 41 72 67 2c 53 51 4c 49 54 45 5f 46 55 4e 43 5f  Arg,SQLITE_FUNC_
fae0: 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f  CONSTANT|SQLITE_
faf0: 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45  UTF8|(bNC*SQLITE
fb00: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c  _FUNC_NEEDCOLL)|
fb10: 65 78 74 72 61 46 6c 61 67 73 2c 5c 0a 20 20 20  extraFlags,\.   
fb20: 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
fb30: 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e  R(iArg), 0, xFun
fb40: 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30  c, 0, #zName, {0
fb50: 7d 20 7d 0a 23 64 65 66 69 6e 65 20 53 54 52 5f  } }.#define STR_
fb60: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
fb70: 6e 41 72 67 2c 20 70 41 72 67 2c 20 62 4e 43 2c  nArg, pArg, bNC,
fb80: 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72   xFunc) \.  {nAr
fb90: 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53  g, SQLITE_FUNC_S
fba0: 4c 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54  LOCHNG|SQLITE_UT
fbb0: 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46  F8|(bNC*SQLITE_F
fbc0: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c  UNC_NEEDCOLL), \
fbd0: 0a 20 20 20 70 41 72 67 2c 20 30 2c 20 78 46 75  .   pArg, 0, xFu
fbe0: 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7d  nc, 0, #zName, }
fbf0: 0a 23 64 65 66 69 6e 65 20 4c 49 4b 45 46 55 4e  .#define LIKEFUN
fc00: 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61  C(zName, nArg, a
fc10: 72 67 2c 20 66 6c 61 67 73 29 20 5c 0a 20 20 7b  rg, flags) \.  {
fc20: 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e  nArg, SQLITE_FUN
fc30: 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54  C_CONSTANT|SQLIT
fc40: 45 5f 55 54 46 38 7c 66 6c 61 67 73 2c 20 5c 0a  E_UTF8|flags, \.
fc50: 20 20 20 28 76 6f 69 64 20 2a 29 61 72 67 2c 20     (void *)arg, 
fc60: 30 2c 20 6c 69 6b 65 46 75 6e 63 2c 20 30 2c 20  0, likeFunc, 0, 
fc70: 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64  #zName, {0} }.#d
fc80: 65 66 69 6e 65 20 41 47 47 52 45 47 41 54 45 28  efine AGGREGATE(
fc90: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67  zName, nArg, arg
fca0: 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69  , nc, xStep, xFi
fcb0: 6e 61 6c 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  nal) \.  {nArg, 
fcc0: 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a  SQLITE_UTF8|(nc*
fcd0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
fce0: 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49  COLL), \.   SQLI
fcf0: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72  TE_INT_TO_PTR(ar
fd00: 67 29 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69  g), 0, xStep,xFi
fd10: 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d  nal,#zName, {0}}
fd20: 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45 47 41  .#define AGGREGA
fd30: 54 45 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  TE2(zName, nArg,
fd40: 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c   arg, nc, xStep,
fd50: 20 78 46 69 6e 61 6c 2c 20 65 78 74 72 61 46 6c   xFinal, extraFl
fd60: 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  ags) \.  {nArg, 
fd70: 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a  SQLITE_UTF8|(nc*
fd80: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
fd90: 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73  COLL)|extraFlags
fda0: 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e  , \.   SQLITE_IN
fdb0: 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30  T_TO_PTR(arg), 0
fdc0: 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 23  , xStep,xFinal,#
fdd0: 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 0a 2f 2a 0a  zName, {0}}../*.
fde0: 2a 2a 20 41 6c 6c 20 63 75 72 72 65 6e 74 20 73  ** All current s
fdf0: 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20 73 74  avepoints are st
fe00: 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64  ored in a linked
fe10: 20 6c 69 73 74 20 73 74 61 72 74 69 6e 67 20 61   list starting a
fe20: 74 0a 2a 2a 20 73 71 6c 69 74 65 33 2e 70 53 61  t.** sqlite3.pSa
fe30: 76 65 70 6f 69 6e 74 2e 20 54 68 65 20 66 69 72  vepoint. The fir
fe40: 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68  st element in th
fe50: 65 20 6c 69 73 74 20 69 73 20 74 68 65 20 6d 6f  e list is the mo
fe60: 73 74 20 72 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f  st recently.** o
fe70: 70 65 6e 65 64 20 73 61 76 65 70 6f 69 6e 74 2e  pened savepoint.
fe80: 20 53 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20   Savepoints are 
fe90: 61 64 64 65 64 20 74 6f 20 74 68 65 20 6c 69 73  added to the lis
fea0: 74 20 62 79 20 74 68 65 20 76 64 62 65 0a 2a 2a  t by the vdbe.**
feb0: 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e   OP_Savepoint in
fec0: 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74  struction..*/.st
fed0: 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20 7b  ruct Savepoint {
fee0: 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
fef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ff00: 20 20 20 20 20 20 20 2f 2a 20 53 61 76 65 70 6f         /* Savepo
ff10: 69 6e 74 20 6e 61 6d 65 20 28 6e 75 6c 2d 74 65  int name (nul-te
ff20: 72 6d 69 6e 61 74 65 64 29 20 2a 2f 0a 20 20 69  rminated) */.  i
ff30: 36 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  64 nDeferredCons
ff40: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
ff50: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
ff60: 64 65 66 65 72 72 65 64 20 66 6b 20 76 69 6f 6c  deferred fk viol
ff70: 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 36 34 20  ations */.  i64 
ff80: 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
ff90: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
ffa0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66  /* Number of def
ffb0: 65 72 72 65 64 20 69 6d 6d 20 66 6b 2e 20 2a 2f  erred imm fk. */
ffc0: 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e  .  Savepoint *pN
ffd0: 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ext;            
ffe0: 20 20 20 20 20 20 20 2f 2a 20 50 61 72 65 6e 74         /* Parent
fff0: 20 73 61 76 65 70 6f 69 6e 74 20 28 69 66 20 61   savepoint (if a
10000 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ny) */.};../*.**
10010 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61   The following a
10020 72 65 20 75 73 65 64 20 61 73 20 74 68 65 20 73  re used as the s
10030 65 63 6f 6e 64 20 70 61 72 61 6d 65 74 65 72 20  econd parameter 
10040 74 6f 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f  to sqlite3Savepo
10050 69 6e 74 28 29 2c 0a 2a 2a 20 61 6e 64 20 61 73  int(),.** and as
10060 20 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74   the P1 argument
10070 20 74 6f 20 74 68 65 20 4f 50 5f 53 61 76 65 70   to the OP_Savep
10080 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  oint instruction
10090 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 41 56  ..*/.#define SAV
100a0 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 20 20 20  EPOINT_BEGIN    
100b0 20 20 30 0a 23 64 65 66 69 6e 65 20 53 41 56 45    0.#define SAVE
100c0 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 20 20  POINT_RELEASE   
100d0 20 31 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50   1.#define SAVEP
100e0 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 20 20  OINT_ROLLBACK   
100f0 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53  2.../*.** Each S
10100 51 4c 69 74 65 20 6d 6f 64 75 6c 65 20 28 76 69  QLite module (vi
10110 72 74 75 61 6c 20 74 61 62 6c 65 20 64 65 66 69  rtual table defi
10120 6e 69 74 69 6f 6e 29 20 69 73 20 64 65 66 69 6e  nition) is defin
10130 65 64 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74  ed by an.** inst
10140 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
10150 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2c  owing structure,
10160 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73   stored in the s
10170 71 6c 69 74 65 33 2e 61 4d 6f 64 75 6c 65 0a 2a  qlite3.aModule.*
10180 2a 20 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2f  * hash table..*/
10190 0a 73 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 7b  .struct Module {
101a0 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  .  const sqlite3
101b0 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
101c0 3b 20 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62  ;       /* Callb
101d0 61 63 6b 20 70 6f 69 6e 74 65 72 73 20 2a 2f 0a  ack pointers */.
101e0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e    const char *zN
101f0 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
10200 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 70         /* Name p
10210 61 73 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f  assed to create_
10220 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f  module() */.  vo
10230 69 64 20 2a 70 41 75 78 3b 20 20 20 20 20 20 20  id *pAux;       
10240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10250 20 20 20 2f 2a 20 70 41 75 78 20 70 61 73 73 65     /* pAux passe
10260 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75  d to create_modu
10270 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28  le() */.  void (
10280 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20  *xDestroy)(void 
10290 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  *);            /
102a0 2a 20 4d 6f 64 75 6c 65 20 64 65 73 74 72 75 63  * Module destruc
102b0 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  tor function */.
102c0 20 20 54 61 62 6c 65 20 2a 70 45 70 6f 54 61 62    Table *pEpoTab
102d0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
102e0 20 20 20 20 20 20 20 2f 2a 20 45 70 6f 6e 79 6d         /* Eponym
102f0 6f 75 73 20 74 61 62 6c 65 20 66 6f 72 20 74 68  ous table for th
10300 69 73 20 6d 6f 64 75 6c 65 20 2a 2f 0a 7d 3b 0a  is module */.};.
10310 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69  ./*.** informati
10320 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f  on about each co
10330 6c 75 6d 6e 20 6f 66 20 61 6e 20 53 51 4c 20 74  lumn of an SQL t
10340 61 62 6c 65 20 69 73 20 68 65 6c 64 20 69 6e 20  able is held in 
10350 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f  an instance.** o
10360 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
10370 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 75  ..*/.struct Colu
10380 6d 6e 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  mn {.  char *zNa
10390 6d 65 3b 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20  me;     /* Name 
103a0 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2c 20  of this column, 
103b0 5c 30 30 30 2c 20 74 68 65 6e 20 74 68 65 20 74  \000, then the t
103c0 79 70 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  ype */.  Expr *p
103d0 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20 44 65 66  Dflt;     /* Def
103e0 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 74 68  ault value of th
103f0 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63  is column */.  c
10400 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20 20  har *zColl;     
10410 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71  /* Collating seq
10420 75 65 6e 63 65 2e 20 20 49 66 20 4e 55 4c 4c 2c  uence.  If NULL,
10430 20 75 73 65 20 74 68 65 20 64 65 66 61 75 6c 74   use the default
10440 20 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e 75 6c 6c   */.  u8 notNull
10450 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 4f 45 5f  ;      /* An OE_
10460 20 63 6f 64 65 20 66 6f 72 20 68 61 6e 64 6c 69   code for handli
10470 6e 67 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f  ng a NOT NULL co
10480 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20 63 68  nstraint */.  ch
10490 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 2f  ar affinity;   /
104a0 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c  * One of the SQL
104b0 49 54 45 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c 75  ITE_AFF_... valu
104c0 65 73 20 2a 2f 0a 20 20 75 38 20 73 7a 45 73 74  es */.  u8 szEst
104d0 3b 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69  ;        /* Esti
104e0 6d 61 74 65 64 20 73 69 7a 65 20 6f 66 20 76 61  mated size of va
104f0 6c 75 65 20 69 6e 20 74 68 69 73 20 63 6f 6c 75  lue in this colu
10500 6d 6e 2e 20 73 69 7a 65 6f 66 28 49 4e 54 29 3d  mn. sizeof(INT)=
10510 3d 31 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 46 6c  =1 */.  u8 colFl
10520 61 67 73 3b 20 20 20 20 20 2f 2a 20 42 6f 6f 6c  ags;     /* Bool
10530 65 61 6e 20 70 72 6f 70 65 72 74 69 65 73 2e 20  ean properties. 
10540 20 53 65 65 20 43 4f 4c 46 4c 41 47 5f 20 64 65   See COLFLAG_ de
10550 66 69 6e 65 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d  fines below */.}
10560 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61  ;../* Allowed va
10570 6c 75 65 73 20 66 6f 72 20 43 6f 6c 75 6d 6e 2e  lues for Column.
10580 63 6f 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23 64 65  colFlags:.*/.#de
10590 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 50 52 49  fine COLFLAG_PRI
105a0 4d 4b 45 59 20 20 30 78 30 30 30 31 20 20 20 20  MKEY  0x0001    
105b0 2f 2a 20 43 6f 6c 75 6d 6e 20 69 73 20 70 61 72  /* Column is par
105c0 74 20 6f 66 20 74 68 65 20 70 72 69 6d 61 72 79  t of the primary
105d0 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20   key */.#define 
105e0 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 20 20  COLFLAG_HIDDEN  
105f0 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20 41 20   0x0002    /* A 
10600 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 69 6e  hidden column in
10610 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
10620 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46   */.#define COLF
10630 4c 41 47 5f 48 41 53 54 59 50 45 20 20 30 78 30  LAG_HASTYPE  0x0
10640 30 30 34 20 20 20 20 2f 2a 20 54 79 70 65 20 6e  004    /* Type n
10650 61 6d 65 20 66 6f 6c 6c 6f 77 73 20 63 6f 6c 75  ame follows colu
10660 6d 6e 20 6e 61 6d 65 20 2a 2f 0a 0a 2f 2a 0a 2a  mn name */../*.*
10670 2a 20 41 20 22 43 6f 6c 6c 61 74 69 6e 67 20 53  * A "Collating S
10680 65 71 75 65 6e 63 65 22 20 69 73 20 64 65 66 69  equence" is defi
10690 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e  ned by an instan
106a0 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
106b0 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  ing.** structure
106c0 2e 20 43 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20  . Conceptually, 
106d0 61 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  a collating sequ
106e0 65 6e 63 65 20 63 6f 6e 73 69 73 74 73 20 6f 66  ence consists of
106f0 20 61 20 6e 61 6d 65 20 61 6e 64 0a 2a 2a 20 61   a name and.** a
10700 20 63 6f 6d 70 61 72 69 73 6f 6e 20 72 6f 75 74   comparison rout
10710 69 6e 65 20 74 68 61 74 20 64 65 66 69 6e 65 73  ine that defines
10720 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68   the order of th
10730 61 74 20 73 65 71 75 65 6e 63 65 2e 0a 2a 2a 0a  at sequence..**.
10740 2a 2a 20 49 66 20 43 6f 6c 6c 53 65 71 2e 78 43  ** If CollSeq.xC
10750 6d 70 20 69 73 20 4e 55 4c 4c 2c 20 69 74 20 6d  mp is NULL, it m
10760 65 61 6e 73 20 74 68 61 74 20 74 68 65 0a 2a 2a  eans that the.**
10770 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
10780 6e 63 65 20 69 73 20 75 6e 64 65 66 69 6e 65 64  nce is undefined
10790 2e 20 20 49 6e 64 69 63 65 73 20 62 75 69 6c 74  .  Indices built
107a0 20 6f 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65 64   on an undefined
107b0 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  .** collating se
107c0 71 75 65 6e 63 65 20 6d 61 79 20 6e 6f 74 20 62  quence may not b
107d0 65 20 72 65 61 64 20 6f 72 20 77 72 69 74 74 65  e read or writte
107e0 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c  n..*/.struct Col
107f0 6c 53 65 71 20 7b 0a 20 20 63 68 61 72 20 2a 7a  lSeq {.  char *z
10800 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f  Name;          /
10810 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f  * Name of the co
10820 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
10830 2c 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20  , UTF-8 encoded 
10840 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20  */.  u8 enc;    
10850 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
10860 78 74 20 65 6e 63 6f 64 69 6e 67 20 68 61 6e 64  xt encoding hand
10870 6c 65 64 20 62 79 20 78 43 6d 70 28 29 20 2a 2f  led by xCmp() */
10880 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 3b 20  .  void *pUser; 
10890 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
108a0 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 43  t argument to xC
108b0 6d 70 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a  mp() */.  int (*
108c0 78 43 6d 70 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  xCmp)(void*,int,
108d0 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e   const void*, in
108e0 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b  t, const void*);
108f0 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28  .  void (*xDel)(
10900 76 6f 69 64 2a 29 3b 20 20 2f 2a 20 44 65 73 74  void*);  /* Dest
10910 72 75 63 74 6f 72 20 66 6f 72 20 70 55 73 65 72  ructor for pUser
10920 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20   */.};../*.** A 
10930 73 6f 72 74 20 6f 72 64 65 72 20 63 61 6e 20 62  sort order can b
10940 65 20 65 69 74 68 65 72 20 41 53 43 20 6f 72 20  e either ASC or 
10950 44 45 53 43 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  DESC..*/.#define
10960 20 53 51 4c 49 54 45 5f 53 4f 5f 41 53 43 20 20   SQLITE_SO_ASC  
10970 20 20 20 20 20 30 20 20 2f 2a 20 53 6f 72 74 20       0  /* Sort 
10980 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64  in ascending ord
10990 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  er */.#define SQ
109a0 4c 49 54 45 5f 53 4f 5f 44 45 53 43 20 20 20 20  LITE_SO_DESC    
109b0 20 20 31 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20    1  /* Sort in 
109c0 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20  ascending order 
109d0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
109e0 45 5f 53 4f 5f 55 4e 44 45 46 49 4e 45 44 20 2d  E_SO_UNDEFINED -
109f0 31 20 2f 2a 20 4e 6f 20 73 6f 72 74 20 6f 72 64  1 /* No sort ord
10a00 65 72 20 73 70 65 63 69 66 69 65 64 20 2a 2f 0a  er specified */.
10a10 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20 61 66  ./*.** Column af
10a20 66 69 6e 69 74 79 20 74 79 70 65 73 2e 0a 2a 2a  finity types..**
10a30 0a 2a 2a 20 54 68 65 73 65 20 75 73 65 64 20 74  .** These used t
10a40 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e 69 63 20  o have mnemonic 
10a50 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27 20 66 6f  name like 'i' fo
10a60 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  r SQLITE_AFF_INT
10a70 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27 74 27 20  EGER and.** 't' 
10a80 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 54  for SQLITE_AFF_T
10a90 45 58 54 2e 20 20 42 75 74 20 77 65 20 63 61 6e  EXT.  But we can
10aa0 20 73 61 76 65 20 61 20 6c 69 74 74 6c 65 20 73   save a little s
10ab0 70 61 63 65 20 61 6e 64 20 69 6d 70 72 6f 76 65  pace and improve
10ac0 0a 2a 2a 20 74 68 65 20 73 70 65 65 64 20 61 20  .** the speed a 
10ad0 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d 62 65 72  little by number
10ae0 69 6e 67 20 74 68 65 20 76 61 6c 75 65 73 20 63  ing the values c
10af0 6f 6e 73 65 63 75 74 69 76 65 6c 79 2e 0a 2a 2a  onsecutively..**
10b00 0a 2a 2a 20 42 75 74 20 72 61 74 68 65 72 20 74  .** But rather t
10b10 68 61 6e 20 73 74 61 72 74 20 77 69 74 68 20 30  han start with 0
10b20 20 6f 72 20 31 2c 20 77 65 20 62 65 67 69 6e 20   or 1, we begin 
10b30 77 69 74 68 20 27 41 27 2e 20 20 54 68 61 74 20  with 'A'.  That 
10b40 77 61 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d 75 6c  way,.** when mul
10b50 74 69 70 6c 65 20 61 66 66 69 6e 69 74 79 20 74  tiple affinity t
10b60 79 70 65 73 20 61 72 65 20 63 6f 6e 63 61 74 65  ypes are concate
10b70 6e 61 74 65 64 20 69 6e 74 6f 20 61 20 73 74 72  nated into a str
10b80 69 6e 67 20 61 6e 64 0a 2a 2a 20 75 73 65 64 20  ing and.** used 
10b90 61 73 20 74 68 65 20 50 34 20 6f 70 65 72 61 6e  as the P4 operan
10ba0 64 2c 20 74 68 65 79 20 77 69 6c 6c 20 62 65 20  d, they will be 
10bb0 6d 6f 72 65 20 72 65 61 64 61 62 6c 65 2e 0a 2a  more readable..*
10bc0 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f 20 74  *.** Note also t
10bd0 68 61 74 20 74 68 65 20 6e 75 6d 65 72 69 63 20  hat the numeric 
10be0 74 79 70 65 73 20 61 72 65 20 67 72 6f 75 70 65  types are groupe
10bf0 64 20 74 6f 67 65 74 68 65 72 20 73 6f 20 74 68  d together so th
10c00 61 74 20 74 65 73 74 69 6e 67 0a 2a 2a 20 66 6f  at testing.** fo
10c10 72 20 61 20 6e 75 6d 65 72 69 63 20 74 79 70 65  r a numeric type
10c20 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6d   is a single com
10c30 70 61 72 69 73 6f 6e 2e 20 20 41 6e 64 20 74 68  parison.  And th
10c40 65 20 42 4c 4f 42 20 74 79 70 65 20 69 73 20 66  e BLOB type is f
10c50 69 72 73 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  irst..*/.#define
10c60 20 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42   SQLITE_AFF_BLOB
10c70 20 20 20 20 20 27 41 27 0a 23 64 65 66 69 6e 65       'A'.#define
10c80 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54   SQLITE_AFF_TEXT
10c90 20 20 20 20 20 27 42 27 0a 23 64 65 66 69 6e 65       'B'.#define
10ca0 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45   SQLITE_AFF_NUME
10cb0 52 49 43 20 20 27 43 27 0a 23 64 65 66 69 6e 65  RIC  'C'.#define
10cc0 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45   SQLITE_AFF_INTE
10cd0 47 45 52 20 20 27 44 27 0a 23 64 65 66 69 6e 65  GER  'D'.#define
10ce0 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c   SQLITE_AFF_REAL
10cf0 20 20 20 20 20 27 45 27 0a 0a 23 64 65 66 69 6e       'E'..#defin
10d00 65 20 73 71 6c 69 74 65 33 49 73 4e 75 6d 65 72  e sqlite3IsNumer
10d10 69 63 41 66 66 69 6e 69 74 79 28 58 29 20 20 28  icAffinity(X)  (
10d20 28 58 29 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f  (X)>=SQLITE_AFF_
10d30 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a 2a 20  NUMERIC)../*.** 
10d40 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  The SQLITE_AFF_M
10d50 41 53 4b 20 76 61 6c 75 65 73 20 6d 61 73 6b 73  ASK values masks
10d60 20 6f 66 66 20 74 68 65 20 73 69 67 6e 69 66 69   off the signifi
10d70 63 61 6e 74 20 62 69 74 73 20 6f 66 20 61 6e 0a  cant bits of an.
10d80 2a 2a 20 61 66 66 69 6e 69 74 79 20 76 61 6c 75  ** affinity valu
10d90 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  e..*/.#define SQ
10da0 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 20 20  LITE_AFF_MASK   
10db0 20 20 30 78 34 37 0a 0a 2f 2a 0a 2a 2a 20 41 64    0x47../*.** Ad
10dc0 64 69 74 69 6f 6e 61 6c 20 62 69 74 20 76 61 6c  ditional bit val
10dd0 75 65 73 20 74 68 61 74 20 63 61 6e 20 62 65 20  ues that can be 
10de0 4f 52 65 64 20 77 69 74 68 20 61 6e 20 61 66 66  ORed with an aff
10df0 69 6e 69 74 79 20 77 69 74 68 6f 75 74 0a 2a 2a  inity without.**
10e00 20 63 68 61 6e 67 69 6e 67 20 74 68 65 20 61 66   changing the af
10e10 66 69 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a 20 54 68  finity..**.** Th
10e20 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c  e SQLITE_NOTNULL
10e30 20 66 6c 61 67 20 69 73 20 61 20 63 6f 6d 62 69   flag is a combi
10e40 6e 61 74 69 6f 6e 20 6f 66 20 4e 55 4c 4c 45 51  nation of NULLEQ
10e50 20 61 6e 64 20 4a 55 4d 50 49 46 4e 55 4c 4c 2e   and JUMPIFNULL.
10e60 0a 2a 2a 20 49 74 20 63 61 75 73 65 73 20 61 6e  .** It causes an
10e70 20 61 73 73 65 72 74 28 29 20 74 6f 20 66 69 72   assert() to fir
10e80 65 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72  e if either oper
10e90 61 6e 64 20 74 6f 20 61 20 63 6f 6d 70 61 72 69  and to a compari
10ea0 73 6f 6e 0a 2a 2a 20 6f 70 65 72 61 74 6f 72 20  son.** operator 
10eb0 69 73 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20  is NULL.  It is 
10ec0 61 64 64 65 64 20 74 6f 20 63 65 72 74 61 69 6e  added to certain
10ed0 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72   comparison oper
10ee0 61 74 6f 72 73 20 74 6f 0a 2a 2a 20 70 72 6f 76  ators to.** prov
10ef0 65 20 74 68 61 74 20 74 68 65 20 6f 70 65 72 61  e that the opera
10f00 6e 64 73 20 61 72 65 20 61 6c 77 61 79 73 20 4e  nds are always N
10f10 4f 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23 64 65 66  OT NULL..*/.#def
10f20 69 6e 65 20 53 51 4c 49 54 45 5f 4b 45 45 50 4e  ine SQLITE_KEEPN
10f30 55 4c 4c 20 20 20 20 20 30 78 30 38 20 20 2f 2a  ULL     0x08  /*
10f40 20 55 73 65 64 20 62 79 20 76 65 63 74 6f 72 20   Used by vector 
10f50 3d 3d 20 6f 72 20 3c 3e 20 2a 2f 0a 23 64 65 66  == or <> */.#def
10f60 69 6e 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  ine SQLITE_JUMPI
10f70 46 4e 55 4c 4c 20 20 20 30 78 31 30 20 20 2f 2a  FNULL   0x10  /*
10f80 20 6a 75 6d 70 73 20 69 66 20 65 69 74 68 65 72   jumps if either
10f90 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
10fa0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
10fb0 54 45 5f 53 54 4f 52 45 50 32 20 20 20 20 20 20  TE_STOREP2      
10fc0 30 78 32 30 20 20 2f 2a 20 53 74 6f 72 65 20 72  0x20  /* Store r
10fd0 65 73 75 6c 74 20 69 6e 20 72 65 67 5b 50 32 5d  esult in reg[P2]
10fe0 20 72 61 74 68 65 72 20 74 68 61 6e 20 6a 75 6d   rather than jum
10ff0 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  p */.#define SQL
11000 49 54 45 5f 4e 55 4c 4c 45 51 20 20 20 20 20 20  ITE_NULLEQ      
11010 20 30 78 38 30 20 20 2f 2a 20 4e 55 4c 4c 3d 4e   0x80  /* NULL=N
11020 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ULL */.#define S
11030 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 20 20  QLITE_NOTNULL   
11040 20 20 20 30 78 39 30 20 20 2f 2a 20 41 73 73 65     0x90  /* Asse
11050 72 74 20 74 68 61 74 20 6f 70 65 72 61 6e 64 73  rt that operands
11060 20 61 72 65 20 6e 65 76 65 72 20 4e 55 4c 4c 20   are never NULL 
11070 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a  */../*.** An obj
11080 65 63 74 20 6f 66 20 74 68 69 73 20 74 79 70 65  ect of this type
11090 20 69 73 20 63 72 65 61 74 65 64 20 66 6f 72 20   is created for 
110a0 65 61 63 68 20 76 69 72 74 75 61 6c 20 74 61 62  each virtual tab
110b0 6c 65 20 70 72 65 73 65 6e 74 20 69 6e 0a 2a 2a  le present in.**
110c0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
110d0 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  hema..**.** If t
110e0 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
110f0 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20 74 68  ma is shared, th
11100 65 6e 20 74 68 65 72 65 20 69 73 20 6f 6e 65 20  en there is one 
11110 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
11120 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 66 6f  .** structure fo
11130 72 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20  r each database 
11140 63 6f 6e 6e 65 63 74 69 6f 6e 20 28 73 71 6c 69  connection (sqli
11150 74 65 33 2a 29 20 74 68 61 74 20 75 73 65 73 20  te3*) that uses 
11160 74 68 65 20 73 68 61 72 65 64 0a 2a 2a 20 73 63  the shared.** sc
11170 68 65 6d 61 2e 20 54 68 69 73 20 69 73 20 62 65  hema. This is be
11180 63 61 75 73 65 20 65 61 63 68 20 64 61 74 61 62  cause each datab
11190 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 72  ase connection r
111a0 65 71 75 69 72 65 73 20 69 74 73 20 6f 77 6e 20  equires its own 
111b0 75 6e 69 71 75 65 0a 2a 2a 20 69 6e 73 74 61 6e  unique.** instan
111c0 63 65 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  ce of the sqlite
111d0 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 75  3_vtab* handle u
111e0 73 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68  sed to access th
111f0 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0a  e virtual table.
11200 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ** implementatio
11210 6e 2e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a  n. sqlite3_vtab*
11220 20 68 61 6e 64 6c 65 73 20 63 61 6e 20 6e 6f 74   handles can not
11230 20 62 65 20 73 68 61 72 65 64 20 62 65 74 77 65   be shared betwe
11240 65 6e 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63  en.** database c
11250 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20 65 76 65 6e  onnections, even
11260 20 77 68 65 6e 20 74 68 65 20 72 65 73 74 20 6f   when the rest o
11270 66 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20  f the in-memory 
11280 64 61 74 61 62 61 73 65 0a 2a 2a 20 73 63 68 65  database.** sche
11290 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20 61 73  ma is shared, as
112a0 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74   the implementat
112b0 69 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72 65 73  ion often stores
112c0 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a   the database.**
112d0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
112e0 6c 65 20 70 61 73 73 65 64 20 74 6f 20 69 74 20  le passed to it 
112f0 76 69 61 20 74 68 65 20 78 43 6f 6e 6e 65 63 74  via the xConnect
11300 28 29 20 6f 72 20 78 43 72 65 61 74 65 28 29 20  () or xCreate() 
11310 6d 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69 6e 67  method.** during
11320 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
11330 69 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68 69 73  internally. This
11340 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
11350 74 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61 79 0a  tion handle may.
11360 2a 2a 20 74 68 65 6e 20 62 65 20 75 73 65 64 20  ** then be used 
11370 62 79 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  by the virtual t
11380 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  able implementat
11390 69 6f 6e 20 74 6f 20 61 63 63 65 73 73 20 72 65  ion to access re
113a0 61 6c 20 74 61 62 6c 65 73 0a 2a 2a 20 77 69 74  al tables.** wit
113b0 68 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65  hin the database
113c0 2e 20 53 6f 20 74 68 61 74 20 74 68 65 79 20 61  . So that they a
113d0 70 70 65 61 72 20 61 73 20 70 61 72 74 20 6f 66  ppear as part of
113e0 20 74 68 65 20 63 61 6c 6c 65 72 73 0a 2a 2a 20   the callers.** 
113f0 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65  transaction, the
11400 73 65 20 61 63 63 65 73 73 65 73 20 6e 65 65 64  se accesses need
11410 20 74 6f 20 62 65 20 6d 61 64 65 20 76 69 61 20   to be made via 
11420 74 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73  the same databas
11430 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  e.** connection 
11440 61 73 20 74 68 61 74 20 75 73 65 64 20 74 6f 20  as that used to 
11450 65 78 65 63 75 74 65 20 53 51 4c 20 6f 70 65 72  execute SQL oper
11460 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 76 69  ations on the vi
11470 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a  rtual table..**.
11480 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20 6f 62  ** All VTable ob
11490 6a 65 63 74 73 20 74 68 61 74 20 63 6f 72 72 65  jects that corre
114a0 73 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e 67 6c  spond to a singl
114b0 65 20 74 61 62 6c 65 20 69 6e 20 61 20 73 68 61  e table in a sha
114c0 72 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  red.** database 
114d0 73 63 68 65 6d 61 20 61 72 65 20 69 6e 69 74 69  schema are initi
114e0 61 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61  ally stored in a
114f0 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70 6f 69   linked-list poi
11500 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20 74 68  nted to by.** th
11510 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20  e Table.pVTable 
11520 6d 65 6d 62 65 72 20 76 61 72 69 61 62 6c 65 20  member variable 
11530 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  of the correspon
11540 64 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a 65 63  ding Table objec
11550 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 73 71  t..** When an sq
11560 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 20  lite3_prepare() 
11570 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 72 65 71  operation is req
11580 75 69 72 65 64 20 74 6f 20 61 63 63 65 73 73 20  uired to access 
11590 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74  the virtual.** t
115a0 61 62 6c 65 2c 20 69 74 20 73 65 61 72 63 68 65  able, it searche
115b0 73 20 74 68 65 20 6c 69 73 74 20 66 6f 72 20 74  s the list for t
115c0 68 65 20 56 54 61 62 6c 65 20 74 68 61 74 20 63  he VTable that c
115d0 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68  orresponds to th
115e0 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f  e.** database co
115f0 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67 20 74  nnection doing t
11600 68 65 20 70 72 65 70 61 72 69 6e 67 20 73 6f 20  he preparing so 
11610 61 73 20 74 6f 20 75 73 65 20 74 68 65 20 63 6f  as to use the co
11620 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74 65 33  rrect.** sqlite3
11630 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 69 6e  _vtab* handle in
11640 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 71 75   the compiled qu
11650 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20  ery..**.** When 
11660 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54 61 62  an in-memory Tab
11670 6c 65 20 6f 62 6a 65 63 74 20 69 73 20 64 65 6c  le object is del
11680 65 74 65 64 20 28 66 6f 72 20 65 78 61 6d 70 6c  eted (for exampl
11690 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20 73 63  e when the.** sc
116a0 68 65 6d 61 20 69 73 20 62 65 69 6e 67 20 72 65  hema is being re
116b0 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d 65 20  loaded for some 
116c0 72 65 61 73 6f 6e 29 2c 20 74 68 65 20 56 54 61  reason), the VTa
116d0 62 6c 65 20 6f 62 6a 65 63 74 73 20 61 72 65 20  ble objects are 
116e0 6e 6f 74 0a 2a 2a 20 64 65 6c 65 74 65 64 20 61  not.** deleted a
116f0 6e 64 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76  nd the sqlite3_v
11700 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 61 72 65  tab* handles are
11710 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e 65 63 74   not xDisconnect
11720 28 29 65 64 0a 2a 2a 20 69 6d 6d 65 64 69 61 74  ()ed.** immediat
11730 65 6c 79 2e 20 49 6e 73 74 65 61 64 2c 20 74 68  ely. Instead, th
11740 65 79 20 61 72 65 20 6d 6f 76 65 64 20 66 72 6f  ey are moved fro
11750 6d 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61  m the Table.pVTa
11760 62 6c 65 20 6c 69 73 74 20 74 6f 0a 2a 2a 20 61  ble list to.** a
11770 6e 6f 74 68 65 72 20 6c 69 6e 6b 65 64 20 6c 69  nother linked li
11780 73 74 20 68 65 61 64 65 64 20 62 79 20 74 68 65  st headed by the
11790 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e   sqlite3.pDiscon
117a0 6e 65 63 74 20 6d 65 6d 62 65 72 20 6f 66 20 74  nect member of t
117b0 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64  he.** correspond
117c0 69 6e 67 20 73 71 6c 69 74 65 33 20 73 74 72 75  ing sqlite3 stru
117d0 63 74 75 72 65 2e 20 54 68 65 79 20 61 72 65 20  cture. They are 
117e0 74 68 65 6e 20 64 65 6c 65 74 65 64 2f 78 44 69  then deleted/xDi
117f0 73 63 6f 6e 6e 65 63 74 65 64 0a 2a 2a 20 6e 65  sconnected.** ne
11800 78 74 20 74 69 6d 65 20 61 20 73 74 61 74 65 6d  xt time a statem
11810 65 6e 74 20 69 73 20 70 72 65 70 61 72 65 64 20  ent is prepared 
11820 75 73 69 6e 67 20 73 61 69 64 20 73 71 6c 69 74  using said sqlit
11830 65 33 2a 2e 20 54 68 69 73 20 69 73 20 64 6f 6e  e3*. This is don
11840 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20 64 65  e.** to avoid de
11850 61 64 6c 6f 63 6b 20 69 73 73 75 65 73 20 69 6e  adlock issues in
11860 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69 70 6c 65  volving multiple
11870 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d   sqlite3.mutex m
11880 75 74 65 78 65 73 2e 0a 2a 2a 20 52 65 66 65 72  utexes..** Refer
11890 20 74 6f 20 63 6f 6d 6d 65 6e 74 73 20 61 62 6f   to comments abo
118a0 76 65 20 66 75 6e 63 74 69 6f 6e 20 73 71 6c 69  ve function sqli
118b0 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73  te3VtabUnlockLis
118c0 74 28 29 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78  t() for an.** ex
118d0 70 6c 61 6e 61 74 69 6f 6e 20 61 73 20 74 6f 20  planation as to 
118e0 77 68 79 20 69 74 20 69 73 20 73 61 66 65 20 74  why it is safe t
118f0 6f 20 61 64 64 20 61 6e 20 65 6e 74 72 79 20 74  o add an entry t
11900 6f 20 61 6e 20 73 71 6c 69 74 65 33 2e 70 44 69  o an sqlite3.pDi
11910 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c 69 73 74  sconnect.** list
11920 20 77 69 74 68 6f 75 74 20 68 6f 6c 64 69 6e 67   without holding
11930 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
11940 6e 67 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78  ng sqlite3.mutex
11950 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68   mutex..**.** Th
11960 65 20 6d 65 6d 6f 72 79 20 66 6f 72 20 6f 62 6a  e memory for obj
11970 65 63 74 73 20 6f 66 20 74 68 69 73 20 74 79 70  ects of this typ
11980 65 20 69 73 20 61 6c 77 61 79 73 20 61 6c 6c 6f  e is always allo
11990 63 61 74 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69  cated by.** sqli
119a0 74 65 33 44 62 4d 61 6c 6c 6f 63 28 29 2c 20 75  te3DbMalloc(), u
119b0 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74  sing the connect
119c0 69 6f 6e 20 68 61 6e 64 6c 65 20 73 74 6f 72 65  ion handle store
119d0 64 20 69 6e 20 56 54 61 62 6c 65 2e 64 62 20 61  d in VTable.db a
119e0 73 0a 2a 2a 20 74 68 65 20 66 69 72 73 74 20 61  s.** the first a
119f0 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75  rgument..*/.stru
11a00 63 74 20 56 54 61 62 6c 65 20 7b 0a 20 20 73 71  ct VTable {.  sq
11a10 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20  lite3 *db;      
11a20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62          /* Datab
11a30 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61  ase connection a
11a40 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
11a50 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4d  his table */.  M
11a60 6f 64 75 6c 65 20 2a 70 4d 6f 64 3b 20 20 20 20  odule *pMod;    
11a70 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e           /* Poin
11a80 74 65 72 20 74 6f 20 6d 6f 64 75 6c 65 20 69 6d  ter to module im
11a90 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a  plementation */.
11aa0 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
11ab0 70 56 74 61 62 3b 20 20 20 20 20 20 2f 2a 20 50  pVtab;      /* P
11ac0 6f 69 6e 74 65 72 20 74 6f 20 76 74 61 62 20 69  ointer to vtab i
11ad0 6e 73 74 61 6e 63 65 20 2a 2f 0a 20 20 69 6e 74  nstance */.  int
11ae0 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20   nRef;          
11af0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
11b00 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20   of pointers to 
11b10 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 2a  this structure *
11b20 2f 0a 20 20 75 38 20 62 43 6f 6e 73 74 72 61 69  /.  u8 bConstrai
11b30 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  nt;           /*
11b40 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61   True if constra
11b50 69 6e 74 73 20 61 72 65 20 73 75 70 70 6f 72 74  ints are support
11b60 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 61 76  ed */.  int iSav
11b70 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 20  epoint;         
11b80 20 20 2f 2a 20 44 65 70 74 68 20 6f 66 20 74 68    /* Depth of th
11b90 65 20 53 41 56 45 50 4f 49 4e 54 20 73 74 61 63  e SAVEPOINT stac
11ba0 6b 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70  k */.  VTable *p
11bb0 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20  Next;           
11bc0 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 6e 6b   /* Next in link
11bd0 65 64 20 6c 69 73 74 20 28 73 65 65 20 61 62 6f  ed list (see abo
11be0 76 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ve) */.};../*.**
11bf0 20 54 68 65 20 73 63 68 65 6d 61 20 66 6f 72 20   The schema for 
11c00 65 61 63 68 20 53 51 4c 20 74 61 62 6c 65 20 61  each SQL table a
11c10 6e 64 20 76 69 65 77 20 69 73 20 72 65 70 72 65  nd view is repre
11c20 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79  sented in memory
11c30 0a 2a 2a 20 62 79 20 61 6e 20 69 6e 73 74 61 6e  .** by an instan
11c40 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
11c50 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  ing structure..*
11c60 2f 0a 73 74 72 75 63 74 20 54 61 62 6c 65 20 7b  /.struct Table {
11c70 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
11c80 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
11c90 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  of the table or 
11ca0 76 69 65 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d 6e  view */.  Column
11cb0 20 2a 61 43 6f 6c 3b 20 20 20 20 20 20 20 20 2f   *aCol;        /
11cc0 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * Information ab
11cd0 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  out each column 
11ce0 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49 6e 64  */.  Index *pInd
11cf0 65 78 3b 20 20 20 20 20 20 20 2f 2a 20 4c 69 73  ex;       /* Lis
11d00 74 20 6f 66 20 53 51 4c 20 69 6e 64 65 78 65 73  t of SQL indexes
11d10 20 6f 6e 20 74 68 69 73 20 74 61 62 6c 65 2e 20   on this table. 
11d20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65  */.  Select *pSe
11d30 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 4e 55 4c  lect;     /* NUL
11d40 4c 20 66 6f 72 20 74 61 62 6c 65 73 2e 20 20 50  L for tables.  P
11d50 6f 69 6e 74 73 20 74 6f 20 64 65 66 69 6e 69 74  oints to definit
11d60 69 6f 6e 20 69 66 20 61 20 76 69 65 77 2e 20 2a  ion if a view. *
11d70 2f 0a 20 20 46 4b 65 79 20 2a 70 46 4b 65 79 3b  /.  FKey *pFKey;
11d80 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b           /* Link
11d90 65 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 66  ed list of all f
11da0 6f 72 65 69 67 6e 20 6b 65 79 73 20 69 6e 20 74  oreign keys in t
11db0 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 63  his table */.  c
11dc0 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20  har *zColAff;   
11dd0 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65      /* String de
11de0 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e  fining the affin
11df0 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75  ity of each colu
11e00 6d 6e 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  mn */.  ExprList
11e10 20 2a 70 43 68 65 63 6b 3b 20 20 20 20 2f 2a 20   *pCheck;    /* 
11e20 41 6c 6c 20 43 48 45 43 4b 20 63 6f 6e 73 74 72  All CHECK constr
11e30 61 69 6e 74 73 20 2a 2f 0a 20 20 20 20 20 20 20  aints */.       
11e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e50 2f 2a 20 20 20 2e 2e 2e 20 61 6c 73 6f 20 75 73  /*   ... also us
11e60 65 64 20 61 73 20 63 6f 6c 75 6d 6e 20 6e 61 6d  ed as column nam
11e70 65 20 6c 69 73 74 20 69 6e 20 61 20 56 49 45 57  e list in a VIEW
11e80 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20   */.  int tnum; 
11e90 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f             /* Ro
11ea0 6f 74 20 42 54 72 65 65 20 70 61 67 65 20 66 6f  ot BTree page fo
11eb0 72 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  r this table */.
11ec0 20 20 75 33 32 20 6e 54 61 62 52 65 66 3b 20 20    u32 nTabRef;  
11ed0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
11ee0 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20   of pointers to 
11ef0 74 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a 20 20  this Table */.  
11f00 75 33 32 20 74 61 62 46 6c 61 67 73 3b 20 20 20  u32 tabFlags;   
11f10 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20       /* Mask of 
11f20 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20  TF_* values */. 
11f30 20 69 31 36 20 69 50 4b 65 79 3b 20 20 20 20 20   i16 iPKey;     
11f40 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20        /* If not 
11f50 6e 65 67 61 74 69 76 65 2c 20 75 73 65 20 61 43  negative, use aC
11f60 6f 6c 5b 69 50 4b 65 79 5d 20 61 73 20 74 68 65  ol[iPKey] as the
11f70 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69 31 36 20   rowid */.  i16 
11f80 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20  nCol;           
11f90 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
11fa0 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 74 61  lumns in this ta
11fb0 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20  ble */.  LogEst 
11fc0 6e 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20 2f 2a  nRowLogEst;   /*
11fd0 20 45 73 74 69 6d 61 74 65 64 20 72 6f 77 73 20   Estimated rows 
11fe0 69 6e 20 74 61 62 6c 65 20 2d 20 66 72 6f 6d 20  in table - from 
11ff0 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62  sqlite_stat1 tab
12000 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73  le */.  LogEst s
12010 7a 54 61 62 52 6f 77 3b 20 20 20 20 20 2f 2a 20  zTabRow;     /* 
12020 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65 20 6f  Estimated size o
12030 66 20 65 61 63 68 20 74 61 62 6c 65 20 72 6f 77  f each table row
12040 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 23 69 66   in bytes */.#if
12050 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
12060 45 5f 43 4f 53 54 4d 55 4c 54 0a 20 20 4c 6f 67  E_COSTMULT.  Log
12070 45 73 74 20 63 6f 73 74 4d 75 6c 74 3b 20 20 20  Est costMult;   
12080 20 20 2f 2a 20 43 6f 73 74 20 6d 75 6c 74 69 70    /* Cost multip
12090 6c 69 65 72 20 66 6f 72 20 75 73 69 6e 67 20 74  lier for using t
120a0 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 23 65 6e  his table */.#en
120b0 64 69 66 0a 20 20 75 38 20 6b 65 79 43 6f 6e 66  dif.  u8 keyConf
120c0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68  ;          /* Wh
120d0 61 74 20 74 6f 20 64 6f 20 69 6e 20 63 61 73 65  at to do in case
120e0 20 6f 66 20 75 6e 69 71 75 65 6e 65 73 73 20 63   of uniqueness c
120f0 6f 6e 66 6c 69 63 74 20 6f 6e 20 69 50 4b 65 79  onflict on iPKey
12100 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
12110 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42  TE_OMIT_ALTERTAB
12120 4c 45 0a 20 20 69 6e 74 20 61 64 64 43 6f 6c 4f  LE.  int addColO
12130 66 66 73 65 74 3b 20 20 20 20 2f 2a 20 4f 66 66  ffset;    /* Off
12140 73 65 74 20 69 6e 20 43 52 45 41 54 45 20 54 41  set in CREATE TA
12150 42 4c 45 20 73 74 6d 74 20 74 6f 20 61 64 64 20  BLE stmt to add 
12160 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a  a new column */.
12170 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
12180 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
12190 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 4d  ALTABLE.  int nM
121a0 6f 64 75 6c 65 41 72 67 3b 20 20 20 20 20 20 2f  oduleArg;      /
121b0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
121c0 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 6d 6f 64  ments to the mod
121d0 75 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  ule */.  char **
121e0 61 7a 4d 6f 64 75 6c 65 41 72 67 3b 20 20 2f 2a  azModuleArg;  /*
121f0 20 30 3a 20 6d 6f 64 75 6c 65 20 31 3a 20 73 63   0: module 1: sc
12200 68 65 6d 61 20 32 3a 20 76 74 61 62 20 6e 61 6d  hema 2: vtab nam
12210 65 20 33 2e 2e 2e 3a 20 61 72 67 73 20 2a 2f 0a  e 3...: args */.
12220 20 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62 6c    VTable *pVTabl
12230 65 3b 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f  e;     /* List o
12240 66 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73  f VTable objects
12250 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 72  . */.#endif.  Tr
12260 69 67 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b  igger *pTrigger;
12270 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 74 72     /* List of tr
12280 69 67 67 65 72 73 20 73 74 6f 72 65 64 20 69 6e  iggers stored in
12290 20 70 53 63 68 65 6d 61 20 2a 2f 0a 20 20 53 63   pSchema */.  Sc
122a0 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
122b0 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 68 61     /* Schema tha
122c0 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 69 73 20  t contains this 
122d0 74 61 62 6c 65 20 2a 2f 0a 20 20 54 61 62 6c 65  table */.  Table
122e0 20 2a 70 4e 65 78 74 5a 6f 6d 62 69 65 3b 20 20   *pNextZombie;  
122f0 2f 2a 20 4e 65 78 74 20 6f 6e 20 74 68 65 20 50  /* Next on the P
12300 61 72 73 65 2e 70 5a 6f 6d 62 69 65 54 61 62 20  arse.pZombieTab 
12310 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  list */.};../*.*
12320 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
12330 20 66 6f 72 20 54 61 62 6c 65 2e 74 61 62 46 6c   for Table.tabFl
12340 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 54 46 5f 4f 4f  ags..**.** TF_OO
12350 4f 48 69 64 64 65 6e 20 61 70 70 6c 69 65 73 20  OHidden applies 
12360 74 6f 20 74 61 62 6c 65 73 20 6f 72 20 76 69 65  to tables or vie
12370 77 20 74 68 61 74 20 68 61 76 65 20 68 69 64 64  w that have hidd
12380 65 6e 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20  en columns that 
12390 61 72 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 65 64 20  are.** followed 
123a0 62 79 20 6e 6f 6e 2d 68 69 64 64 65 6e 20 63 6f  by non-hidden co
123b0 6c 75 6d 6e 73 2e 20 20 45 78 61 6d 70 6c 65 3a  lumns.  Example:
123c0 20 20 22 43 52 45 41 54 45 20 56 49 52 54 55 41    "CREATE VIRTUA
123d0 4c 20 54 41 42 4c 45 20 78 20 55 53 49 4e 47 0a  L TABLE x USING.
123e0 2a 2a 20 76 74 61 62 31 28 61 20 48 49 44 44 45  ** vtab1(a HIDDE
123f0 4e 2c 20 62 29 3b 22 2e 20 20 53 69 6e 63 65 20  N, b);".  Since 
12400 22 62 22 20 69 73 20 61 20 6e 6f 6e 2d 68 69 64  "b" is a non-hid
12410 64 65 6e 20 63 6f 6c 75 6d 6e 20 62 75 74 20 22  den column but "
12420 61 22 20 69 73 20 68 69 64 64 65 6e 2c 0a 2a 2a  a" is hidden,.**
12430 20 74 68 65 20 54 46 5f 4f 4f 4f 48 69 64 64 65   the TF_OOOHidde
12440 6e 20 61 74 74 72 69 62 75 74 65 20 77 6f 75 6c  n attribute woul
12450 64 20 61 70 70 6c 79 20 69 6e 20 74 68 69 73 20  d apply in this 
12460 63 61 73 65 2e 20 20 53 75 63 68 20 74 61 62 6c  case.  Such tabl
12470 65 73 20 72 65 71 75 69 72 65 0a 2a 2a 20 73 70  es require.** sp
12480 65 63 69 61 6c 20 68 61 6e 64 6c 69 6e 67 20 64  ecial handling d
12490 75 72 69 6e 67 20 49 4e 53 45 52 54 20 70 72 6f  uring INSERT pro
124a0 63 65 73 73 69 6e 67 2e 0a 2a 2f 0a 23 64 65 66  cessing..*/.#def
124b0 69 6e 65 20 54 46 5f 52 65 61 64 6f 6e 6c 79 20  ine TF_Readonly 
124c0 20 20 20 20 20 20 20 30 78 30 30 30 31 20 20 20         0x0001   
124d0 20 2f 2a 20 52 65 61 64 2d 6f 6e 6c 79 20 73 79   /* Read-only sy
124e0 73 74 65 6d 20 74 61 62 6c 65 20 2a 2f 0a 23 64  stem table */.#d
124f0 65 66 69 6e 65 20 54 46 5f 45 70 68 65 6d 65 72  efine TF_Ephemer
12500 61 6c 20 20 20 20 20 20 20 30 78 30 30 30 32 20  al       0x0002 
12510 20 20 20 2f 2a 20 41 6e 20 65 70 68 65 6d 65 72     /* An ephemer
12520 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66  al table */.#def
12530 69 6e 65 20 54 46 5f 48 61 73 50 72 69 6d 61 72  ine TF_HasPrimar
12540 79 4b 65 79 20 20 20 30 78 30 30 30 34 20 20 20  yKey   0x0004   
12550 20 2f 2a 20 54 61 62 6c 65 20 68 61 73 20 61 20   /* Table has a 
12560 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23  primary key */.#
12570 64 65 66 69 6e 65 20 54 46 5f 41 75 74 6f 69 6e  define TF_Autoin
12580 63 72 65 6d 65 6e 74 20 20 20 30 78 30 30 30 38  crement   0x0008
12590 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 70      /* Integer p
125a0 72 69 6d 61 72 79 20 6b 65 79 20 69 73 20 61 75  rimary key is au
125b0 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a 23  toincrement */.#
125c0 64 65 66 69 6e 65 20 54 46 5f 48 61 73 53 74 61  define TF_HasSta
125d0 74 31 20 20 20 20 20 20 20 20 30 78 30 30 31 30  t1        0x0010
125e0 20 20 20 20 2f 2a 20 6e 52 6f 77 4c 6f 67 45 73      /* nRowLogEs
125f0 74 20 73 65 74 20 66 72 6f 6d 20 73 71 6c 69 74  t set from sqlit
12600 65 5f 73 74 61 74 31 20 2a 2f 0a 23 64 65 66 69  e_stat1 */.#defi
12610 6e 65 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77  ne TF_WithoutRow
12620 69 64 20 20 20 20 30 78 30 30 32 30 20 20 20 20  id    0x0020    
12630 2f 2a 20 4e 6f 20 72 6f 77 69 64 2e 20 20 50 52  /* No rowid.  PR
12640 49 4d 41 52 59 20 4b 45 59 20 69 73 20 74 68 65  IMARY KEY is the
12650 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20   key */.#define 
12660 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69  TF_NoVisibleRowi
12670 64 20 20 30 78 30 30 34 30 20 20 20 20 2f 2a 20  d  0x0040    /* 
12680 4e 6f 20 75 73 65 72 2d 76 69 73 69 62 6c 65 20  No user-visible 
12690 22 72 6f 77 69 64 22 20 63 6f 6c 75 6d 6e 20 2a  "rowid" column *
126a0 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 4f 4f 4f  /.#define TF_OOO
126b0 48 69 64 64 65 6e 20 20 20 20 20 20 20 30 78 30  Hidden       0x0
126c0 30 38 30 20 20 20 20 2f 2a 20 4f 75 74 2d 6f 66  080    /* Out-of
126d0 2d 4f 72 64 65 72 20 68 69 64 64 65 6e 20 63 6f  -Order hidden co
126e0 6c 75 6d 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  lumns */.#define
126f0 20 54 46 5f 53 74 61 74 73 55 73 65 64 20 20 20   TF_StatsUsed   
12700 20 20 20 20 30 78 30 31 30 30 20 20 20 20 2f 2a      0x0100    /*
12710 20 51 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 64   Query planner d
12720 65 63 69 73 69 6f 6e 73 20 61 66 66 65 63 74 65  ecisions affecte
12730 64 20 62 79 0a 20 20 20 20 20 20 20 20 20 20 20  d by.           
12740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12750 20 20 20 20 20 20 20 20 20 20 2a 2a 20 49 6e 64            ** Ind
12760 65 78 2e 61 69 52 6f 77 4c 6f 67 45 73 74 5b 5d  ex.aiRowLogEst[]
12770 20 76 61 6c 75 65 73 20 2a 2f 0a 23 64 65 66 69   values */.#defi
12780 6e 65 20 54 46 5f 48 61 73 4e 6f 74 4e 75 6c 6c  ne TF_HasNotNull
12790 20 20 20 20 20 20 30 78 30 32 30 30 20 20 20 20        0x0200    
127a0 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 4e 4f 54 20  /* Contains NOT 
127b0 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 73  NULL constraints
127c0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20   */../*.** Test 
127d0 74 6f 20 73 65 65 20 77 68 65 74 68 65 72 20 6f  to see whether o
127e0 72 20 6e 6f 74 20 61 20 74 61 62 6c 65 20 69 73  r not a table is
127f0 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
12800 2e 20 20 54 68 69 73 20 69 73 0a 2a 2a 20 64 6f  .  This is.** do
12810 6e 65 20 61 73 20 61 20 6d 61 63 72 6f 20 73 6f  ne as a macro so
12820 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20 62 65   that it will be
12830 20 6f 70 74 69 6d 69 7a 65 64 20 6f 75 74 20 77   optimized out w
12840 68 65 6e 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74  hen virtual.** t
12850 61 62 6c 65 20 73 75 70 70 6f 72 74 20 69 73 20  able support is 
12860 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65  omitted from the
12870 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 6e 64   build..*/.#ifnd
12880 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
12890 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64  IRTUALTABLE.#  d
128a0 65 66 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28  efine IsVirtual(
128b0 58 29 20 20 20 20 20 20 28 28 58 29 2d 3e 6e 4d  X)      ((X)->nM
128c0 6f 64 75 6c 65 41 72 67 29 0a 23 65 6c 73 65 0a  oduleArg).#else.
128d0 23 20 20 64 65 66 69 6e 65 20 49 73 56 69 72 74  #  define IsVirt
128e0 75 61 6c 28 58 29 20 20 20 20 20 20 30 0a 23 65  ual(X)      0.#e
128f0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72  ndif../*.** Macr
12900 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  os to determine 
12910 69 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20 68  if a column is h
12920 69 64 64 65 6e 2e 20 20 49 73 4f 72 64 69 6e 61  idden.  IsOrdina
12930 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 29  ryHiddenColumn()
12940 0a 2a 2a 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66  .** only works f
12950 6f 72 20 6e 6f 6e 2d 76 69 72 74 75 61 6c 20 74  or non-virtual t
12960 61 62 6c 65 73 20 28 6f 72 64 69 6e 61 72 79 20  ables (ordinary 
12970 74 61 62 6c 65 73 20 61 6e 64 20 76 69 65 77 73  tables and views
12980 29 20 61 6e 64 20 69 73 0a 2a 2a 20 61 6c 77 61  ) and is.** alwa
12990 79 73 20 66 61 6c 73 65 20 75 6e 6c 65 73 73 20  ys false unless 
129a0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49  SQLITE_ENABLE_HI
129b0 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 20 69 73 20  DDEN_COLUMNS is 
129c0 64 65 66 69 6e 65 64 2e 20 20 54 68 65 0a 2a 2a  defined.  The.**
129d0 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28   IsHiddenColumn(
129e0 29 20 6d 61 63 72 6f 20 69 73 20 67 65 6e 65 72  ) macro is gener
129f0 61 6c 20 70 75 72 70 6f 73 65 2e 0a 2a 2f 0a 23  al purpose..*/.#
12a00 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
12a10 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f  E_ENABLE_HIDDEN_
12a20 43 4f 4c 55 4d 4e 53 29 0a 23 20 20 64 65 66 69  COLUMNS).#  defi
12a30 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d  ne IsHiddenColum
12a40 6e 28 58 29 20 20 20 20 20 20 20 20 20 28 28 28  n(X)         (((
12a50 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43  X)->colFlags & C
12a60 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d  OLFLAG_HIDDEN)!=
12a70 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f  0).#  define IsO
12a80 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c  rdinaryHiddenCol
12a90 75 6d 6e 28 58 29 20 28 28 28 58 29 2d 3e 63 6f  umn(X) (((X)->co
12aa0 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47  lFlags & COLFLAG
12ab0 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 65 6c  _HIDDEN)!=0).#el
12ac0 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
12ad0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
12ae0 41 42 4c 45 29 0a 23 20 20 64 65 66 69 6e 65 20  ABLE).#  define 
12af0 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58  IsHiddenColumn(X
12b00 29 20 20 20 20 20 20 20 20 20 28 28 28 58 29 2d  )         (((X)-
12b10 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46  >colFlags & COLF
12b20 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a  LAG_HIDDEN)!=0).
12b30 23 20 20 64 65 66 69 6e 65 20 49 73 4f 72 64 69  #  define IsOrdi
12b40 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  naryHiddenColumn
12b50 28 58 29 20 30 0a 23 65 6c 73 65 0a 23 20 20 64  (X) 0.#else.#  d
12b60 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f  efine IsHiddenCo
12b70 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20  lumn(X)         
12b80 30 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f 72  0.#  define IsOr
12b90 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75  dinaryHiddenColu
12ba0 6d 6e 28 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a  mn(X) 0.#endif..
12bb0 0a 2f 2a 20 44 6f 65 73 20 74 68 65 20 74 61 62  ./* Does the tab
12bc0 6c 65 20 68 61 76 65 20 61 20 72 6f 77 69 64 20  le have a rowid 
12bd0 2a 2f 0a 23 64 65 66 69 6e 65 20 48 61 73 52 6f  */.#define HasRo
12be0 77 69 64 28 58 29 20 20 20 20 20 28 28 28 58 29  wid(X)     (((X)
12bf0 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f  ->tabFlags & TF_
12c00 57 69 74 68 6f 75 74 52 6f 77 69 64 29 3d 3d 30  WithoutRowid)==0
12c10 29 0a 23 64 65 66 69 6e 65 20 56 69 73 69 62 6c  ).#define Visibl
12c20 65 52 6f 77 69 64 28 58 29 20 28 28 28 58 29 2d  eRowid(X) (((X)-
12c30 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f 4e  >tabFlags & TF_N
12c40 6f 56 69 73 69 62 6c 65 52 6f 77 69 64 29 3d 3d  oVisibleRowid)==
12c50 30 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 66  0)../*.** Each f
12c60 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
12c70 72 61 69 6e 74 20 69 73 20 61 6e 20 69 6e 73 74  raint is an inst
12c80 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
12c90 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e  owing structure.
12ca0 0a 2a 2a 0a 2a 2a 20 41 20 66 6f 72 65 69 67 6e  .**.** A foreign
12cb0 20 6b 65 79 20 69 73 20 61 73 73 6f 63 69 61 74   key is associat
12cc0 65 64 20 77 69 74 68 20 74 77 6f 20 74 61 62 6c  ed with two tabl
12cd0 65 73 2e 20 20 54 68 65 20 22 66 72 6f 6d 22 20  es.  The "from" 
12ce0 74 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20  table is.** the 
12cf0 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61  table that conta
12d00 69 6e 73 20 74 68 65 20 52 45 46 45 52 45 4e 43  ins the REFERENC
12d10 45 53 20 63 6c 61 75 73 65 20 74 68 61 74 20 63  ES clause that c
12d20 72 65 61 74 65 73 20 74 68 65 20 66 6f 72 65 69  reates the forei
12d30 67 6e 0a 2a 2a 20 6b 65 79 2e 20 20 54 68 65 20  gn.** key.  The 
12d40 22 74 6f 22 20 74 61 62 6c 65 20 69 73 20 74 68  "to" table is th
12d50 65 20 74 61 62 6c 65 20 74 68 61 74 20 69 73 20  e table that is 
12d60 6e 61 6d 65 64 20 69 6e 20 74 68 65 20 52 45 46  named in the REF
12d70 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 2e 0a  ERENCES clause..
12d80 2a 2a 20 43 6f 6e 73 69 64 65 72 20 74 68 69 73  ** Consider this
12d90 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20   example:.**.** 
12da0 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
12db0 20 65 78 31 28 0a 2a 2a 20 20 20 20 20 20 20 61   ex1(.**       a
12dc0 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
12dd0 20 4b 45 59 2c 0a 2a 2a 20 20 20 20 20 20 20 62   KEY,.**       b
12de0 20 49 4e 54 45 47 45 52 20 43 4f 4e 53 54 52 41   INTEGER CONSTRA
12df0 49 4e 54 20 66 6b 31 20 52 45 46 45 52 45 4e 43  INT fk1 REFERENC
12e00 45 53 20 65 78 32 28 78 29 0a 2a 2a 20 20 20 20  ES ex2(x).**    
12e10 20 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 66 6f   );.**.** For fo
12e20 72 65 69 67 6e 20 6b 65 79 20 22 66 6b 31 22 2c  reign key "fk1",
12e30 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20   the from-table 
12e40 69 73 20 22 65 78 31 22 20 61 6e 64 20 74 68 65  is "ex1" and the
12e50 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 22 65 78   to-table is "ex
12e60 32 22 2e 0a 2a 2a 20 45 71 75 69 76 61 6c 65 6e  2"..** Equivalen
12e70 74 20 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a 2a 20 20  t names:.**.**  
12e80 20 20 20 66 72 6f 6d 2d 74 61 62 6c 65 20 3d 3d     from-table ==
12e90 20 63 68 69 6c 64 2d 74 61 62 6c 65 0a 2a 2a 20   child-table.** 
12ea0 20 20 20 20 20 20 74 6f 2d 74 61 62 6c 65 20 3d        to-table =
12eb0 3d 20 70 61 72 65 6e 74 2d 74 61 62 6c 65 0a 2a  = parent-table.*
12ec0 2a 0a 2a 2a 20 45 61 63 68 20 52 45 46 45 52 45  *.** Each REFERE
12ed0 4e 43 45 53 20 63 6c 61 75 73 65 20 67 65 6e 65  NCES clause gene
12ee0 72 61 74 65 73 20 61 6e 20 69 6e 73 74 61 6e 63  rates an instanc
12ef0 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
12f00 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20  ng structure.** 
12f10 77 68 69 63 68 20 69 73 20 61 74 74 61 63 68 65  which is attache
12f20 64 20 74 6f 20 74 68 65 20 66 72 6f 6d 2d 74 61  d to the from-ta
12f30 62 6c 65 2e 20 20 54 68 65 20 74 6f 2d 74 61 62  ble.  The to-tab
12f40 6c 65 20 6e 65 65 64 20 6e 6f 74 20 65 78 69 73  le need not exis
12f50 74 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 66 72  t when.** the fr
12f60 6f 6d 2d 74 61 62 6c 65 20 69 73 20 63 72 65 61  om-table is crea
12f70 74 65 64 2e 20 20 54 68 65 20 65 78 69 73 74 65  ted.  The existe
12f80 6e 63 65 20 6f 66 20 74 68 65 20 74 6f 2d 74 61  nce of the to-ta
12f90 62 6c 65 20 69 73 20 6e 6f 74 20 63 68 65 63 6b  ble is not check
12fa0 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6c 69  ed..**.** The li
12fb0 73 74 20 6f 66 20 61 6c 6c 20 70 61 72 65 6e 74  st of all parent
12fc0 73 20 66 6f 72 20 63 68 69 6c 64 20 54 61 62 6c  s for child Tabl
12fd0 65 20 58 20 69 73 20 68 65 6c 64 20 61 74 20 58  e X is held at X
12fe0 2e 70 46 4b 65 79 2e 0a 2a 2a 0a 2a 2a 20 41 20  .pFKey..**.** A 
12ff0 6c 69 73 74 20 6f 66 20 61 6c 6c 20 63 68 69 6c  list of all chil
13000 64 72 65 6e 20 66 6f 72 20 61 20 74 61 62 6c 65  dren for a table
13010 20 6e 61 6d 65 64 20 5a 20 28 77 68 69 63 68 20   named Z (which 
13020 6d 69 67 68 74 20 6e 6f 74 20 65 76 65 6e 20 65  might not even e
13030 78 69 73 74 29 0a 2a 2a 20 69 73 20 68 65 6c 64  xist).** is held
13040 20 69 6e 20 53 63 68 65 6d 61 2e 66 6b 65 79 48   in Schema.fkeyH
13050 61 73 68 20 77 69 74 68 20 61 20 68 61 73 68 20  ash with a hash 
13060 6b 65 79 20 6f 66 20 5a 2e 0a 2a 2f 0a 73 74 72  key of Z..*/.str
13070 75 63 74 20 46 4b 65 79 20 7b 0a 20 20 54 61 62  uct FKey {.  Tab
13080 6c 65 20 2a 70 46 72 6f 6d 3b 20 20 20 20 20 2f  le *pFrom;     /
13090 2a 20 54 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69  * Table containi
130a0 6e 67 20 74 68 65 20 52 45 46 45 52 45 4e 43 45  ng the REFERENCE
130b0 53 20 63 6c 61 75 73 65 20 28 61 6b 61 3a 20 43  S clause (aka: C
130c0 68 69 6c 64 29 20 2a 2f 0a 20 20 46 4b 65 79 20  hild) */.  FKey 
130d0 2a 70 4e 65 78 74 46 72 6f 6d 3b 20 20 2f 2a 20  *pNextFrom;  /* 
130e0 4e 65 78 74 20 46 4b 65 79 20 77 69 74 68 20 74  Next FKey with t
130f0 68 65 20 73 61 6d 65 20 69 6e 20 70 46 72 6f 6d  he same in pFrom
13100 2e 20 4e 65 78 74 20 70 61 72 65 6e 74 20 6f 66  . Next parent of
13110 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 63 68 61 72   pFrom */.  char
13120 20 2a 7a 54 6f 3b 20 20 20 20 20 20 20 20 2f 2a   *zTo;        /*
13130 20 4e 61 6d 65 20 6f 66 20 74 61 62 6c 65 20 74   Name of table t
13140 68 61 74 20 74 68 65 20 6b 65 79 20 70 6f 69 6e  hat the key poin
13150 74 73 20 74 6f 20 28 61 6b 61 3a 20 50 61 72 65  ts to (aka: Pare
13160 6e 74 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70  nt) */.  FKey *p
13170 4e 65 78 74 54 6f 3b 20 20 20 20 2f 2a 20 4e 65  NextTo;    /* Ne
13180 78 74 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  xt with the same
13190 20 7a 54 6f 2e 20 4e 65 78 74 20 63 68 69 6c 64   zTo. Next child
131a0 20 6f 66 20 7a 54 6f 2e 20 2a 2f 0a 20 20 46 4b   of zTo. */.  FK
131b0 65 79 20 2a 70 50 72 65 76 54 6f 3b 20 20 20 20  ey *pPrevTo;    
131c0 2f 2a 20 50 72 65 76 69 6f 75 73 20 77 69 74 68  /* Previous with
131d0 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 20 2a 2f   the same zTo */
131e0 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b 20 20 20 20  .  int nCol;    
131f0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
13200 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69  f columns in thi
13210 73 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20 45 56  s key */.  /* EV
13220 3a 20 52 2d 33 30 33 32 33 2d 32 31 39 31 37 20  : R-30323-21917 
13230 2a 2f 0a 20 20 75 38 20 69 73 44 65 66 65 72 72  */.  u8 isDeferr
13240 65 64 3b 20 20 20 20 20 20 20 2f 2a 20 54 72 75  ed;       /* Tru
13250 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 20  e if constraint 
13260 63 68 65 63 6b 69 6e 67 20 69 73 20 64 65 66 65  checking is defe
13270 72 72 65 64 20 74 69 6c 6c 20 43 4f 4d 4d 49 54  rred till COMMIT
13280 20 2a 2f 0a 20 20 75 38 20 61 41 63 74 69 6f 6e   */.  u8 aAction
13290 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f  [2];        /* O
132a0 4e 20 44 45 4c 45 54 45 20 61 6e 64 20 4f 4e 20  N DELETE and ON 
132b0 55 50 44 41 54 45 20 61 63 74 69 6f 6e 73 2c 20  UPDATE actions, 
132c0 72 65 73 70 65 63 74 69 76 65 6c 79 20 2a 2f 0a  respectively */.
132d0 20 20 54 72 69 67 67 65 72 20 2a 61 70 54 72 69    Trigger *apTri
132e0 67 67 65 72 5b 32 5d 3b 2f 2a 20 54 72 69 67 67  gger[2];/* Trigg
132f0 65 72 73 20 66 6f 72 20 61 41 63 74 69 6f 6e 5b  ers for aAction[
13300 5d 20 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73  ] actions */.  s
13310 74 72 75 63 74 20 73 43 6f 6c 4d 61 70 20 7b 20  truct sColMap { 
13320 20 20 20 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20       /* Mapping 
13330 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70 46  of columns in pF
13340 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69  rom to columns i
13350 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20 20 69 6e 74  n zTo */.    int
13360 20 69 46 72 6f 6d 3b 20 20 20 20 20 20 20 20 20   iFrom;         
13370 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 63     /* Index of c
13380 6f 6c 75 6d 6e 20 69 6e 20 70 46 72 6f 6d 20 2a  olumn in pFrom *
13390 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c  /.    char *zCol
133a0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
133b0 61 6d 65 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e  ame of column in
133c0 20 7a 54 6f 2e 20 20 49 66 20 4e 55 4c 4c 20 75   zTo.  If NULL u
133d0 73 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a  se PRIMARY KEY *
133e0 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31 5d 3b 20 20  /.  } aCol[1];  
133f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
13400 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20   entry for each 
13410 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e 73 20  of nCol columns 
13420 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c  */.};../*.** SQL
13430 69 74 65 20 73 75 70 70 6f 72 74 73 20 6d 61 6e  ite supports man
13440 79 20 64 69 66 66 65 72 65 6e 74 20 77 61 79 73  y different ways
13450 20 74 6f 20 72 65 73 6f 6c 76 65 20 61 20 63 6f   to resolve a co
13460 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f  nstraint.** erro
13470 72 2e 20 20 52 4f 4c 4c 42 41 43 4b 20 70 72 6f  r.  ROLLBACK pro
13480 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68  cessing means th
13490 61 74 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20  at a constraint 
134a0 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20 63 61 75  violation.** cau
134b0 73 65 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f  ses the operatio
134c0 6e 20 69 6e 20 70 72 6f 63 65 73 73 20 74 6f 20  n in process to 
134d0 66 61 69 6c 20 61 6e 64 20 66 6f 72 20 74 68 65  fail and for the
134e0 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63   current transac
134f0 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 72 6f  tion.** to be ro
13500 6c 6c 65 64 20 62 61 63 6b 2e 20 20 41 42 4f 52  lled back.  ABOR
13510 54 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61  T processing mea
13520 6e 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  ns the operation
13530 20 69 6e 20 70 72 6f 63 65 73 73 0a 2a 2a 20 66   in process.** f
13540 61 69 6c 73 20 61 6e 64 20 61 6e 79 20 70 72 69  ails and any pri
13550 6f 72 20 63 68 61 6e 67 65 73 20 66 72 6f 6d 20  or changes from 
13560 74 68 61 74 20 6f 6e 65 20 6f 70 65 72 61 74 69  that one operati
13570 6f 6e 20 61 72 65 20 62 61 63 6b 65 64 20 6f 75  on are backed ou
13580 74 2c 0a 2a 2a 20 62 75 74 20 74 68 65 20 74 72  t,.** but the tr
13590 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74  ansaction is not
135a0 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 46   rolled back.  F
135b0 41 49 4c 20 70 72 6f 63 65 73 73 69 6e 67 20 6d  AIL processing m
135c0 65 61 6e 73 20 74 68 61 74 0a 2a 2a 20 74 68 65  eans that.** the
135d0 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72   operation in pr
135e0 6f 67 72 65 73 73 20 73 74 6f 70 73 20 61 6e 64  ogress stops and
135f0 20 72 65 74 75 72 6e 73 20 61 6e 20 65 72 72 6f   returns an erro
13600 72 20 63 6f 64 65 2e 20 20 42 75 74 20 70 72 69  r code.  But pri
13610 6f 72 0a 2a 2a 20 63 68 61 6e 67 65 73 20 64 75  or.** changes du
13620 65 20 74 6f 20 74 68 65 20 73 61 6d 65 20 6f 70  e to the same op
13630 65 72 61 74 69 6f 6e 20 61 72 65 20 6e 6f 74 20  eration are not 
13640 62 61 63 6b 65 64 20 6f 75 74 20 61 6e 64 20 6e  backed out and n
13650 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 63  o rollback.** oc
13660 63 75 72 73 2e 20 20 49 47 4e 4f 52 45 20 6d 65  curs.  IGNORE me
13670 61 6e 73 20 74 68 61 74 20 74 68 65 20 70 61 72  ans that the par
13680 74 69 63 75 6c 61 72 20 72 6f 77 20 74 68 61 74  ticular row that
13690 20 63 61 75 73 65 64 20 74 68 65 20 63 6f 6e 73   caused the cons
136a0 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 20  traint.** error 
136b0 69 73 20 6e 6f 74 20 69 6e 73 65 72 74 65 64 20  is not inserted 
136c0 6f 72 20 75 70 64 61 74 65 64 2e 20 20 50 72 6f  or updated.  Pro
136d0 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65  cessing continue
136e0 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 0a 2a  s and no error.*
136f0 2a 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 20  * is returned.  
13700 52 45 50 4c 41 43 45 20 6d 65 61 6e 73 20 74 68  REPLACE means th
13710 61 74 20 70 72 65 65 78 69 73 74 69 6e 67 20 64  at preexisting d
13720 61 74 61 62 61 73 65 20 72 6f 77 73 20 74 68 61  atabase rows tha
13730 74 20 63 61 75 73 65 64 0a 2a 2a 20 61 20 55 4e  t caused.** a UN
13740 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20  IQUE constraint 
13750 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20 72 65  violation are re
13760 6d 6f 76 65 64 20 73 6f 20 74 68 61 74 20 74 68  moved so that th
13770 65 20 6e 65 77 20 69 6e 73 65 72 74 20 6f 72 0a  e new insert or.
13780 2a 2a 20 75 70 64 61 74 65 20 63 61 6e 20 70 72  ** update can pr
13790 6f 63 65 65 64 2e 20 20 50 72 6f 63 65 73 73 69  oceed.  Processi
137a0 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64  ng continues and
137b0 20 6e 6f 20 65 72 72 6f 72 20 69 73 20 72 65 70   no error is rep
137c0 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 52 45 53  orted..**.** RES
137d0 54 52 49 43 54 2c 20 53 45 54 4e 55 4c 4c 2c 20  TRICT, SETNULL, 
137e0 61 6e 64 20 43 41 53 43 41 44 45 20 61 63 74 69  and CASCADE acti
137f0 6f 6e 73 20 61 70 70 6c 79 20 6f 6e 6c 79 20 74  ons apply only t
13800 6f 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 2e 0a  o foreign keys..
13810 2a 2a 20 52 45 53 54 52 49 43 54 20 69 73 20 74  ** RESTRICT is t
13820 68 65 20 73 61 6d 65 20 61 73 20 41 42 4f 52 54  he same as ABORT
13830 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 20 66   for IMMEDIATE f
13840 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 6e 64 20  oreign keys and 
13850 74 68 65 0a 2a 2a 20 73 61 6d 65 20 61 73 20 52  the.** same as R
13860 4f 4c 4c 42 41 43 4b 20 66 6f 72 20 44 45 46 45  OLLBACK for DEFE
13870 52 52 45 44 20 6b 65 79 73 2e 20 20 53 45 54 4e  RRED keys.  SETN
13880 55 4c 4c 20 6d 65 61 6e 73 20 74 68 61 74 20 74  ULL means that t
13890 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65  he foreign.** ke
138a0 79 20 69 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c  y is set to NULL
138b0 2e 20 20 43 41 53 43 41 44 45 20 6d 65 61 6e 73  .  CASCADE means
138c0 20 74 68 61 74 20 61 20 44 45 4c 45 54 45 20 6f   that a DELETE o
138d0 72 20 55 50 44 41 54 45 20 6f 66 20 74 68 65 0a  r UPDATE of the.
138e0 2a 2a 20 72 65 66 65 72 65 6e 63 65 64 20 74 61  ** referenced ta
138f0 62 6c 65 20 72 6f 77 20 69 73 20 70 72 6f 70 61  ble row is propa
13900 67 61 74 65 64 20 69 6e 74 6f 20 74 68 65 20 72  gated into the r
13910 6f 77 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68  ow that holds th
13920 65 0a 2a 2a 20 66 6f 72 65 69 67 6e 20 6b 65 79  e.** foreign key
13930 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ..**.** The foll
13940 6f 77 69 6e 67 20 73 79 6d 62 6f 6c 69 63 20 76  owing symbolic v
13950 61 6c 75 65 73 20 61 72 65 20 75 73 65 64 20 74  alues are used t
13960 6f 20 72 65 63 6f 72 64 20 77 68 69 63 68 20 74  o record which t
13970 79 70 65 0a 2a 2a 20 6f 66 20 61 63 74 69 6f 6e  ype.** of action
13980 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a 23 64 65   to take..*/.#de
13990 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20 20 20 20  fine OE_None    
139a0 20 30 20 20 20 2f 2a 20 54 68 65 72 65 20 69 73   0   /* There is
139b0 20 6e 6f 20 63 6f 6e 73 74 72 61 69 6e 74 20 74   no constraint t
139c0 6f 20 63 68 65 63 6b 20 2a 2f 0a 23 64 65 66 69  o check */.#defi
139d0 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 31  ne OE_Rollback 1
139e0 20 20 20 2f 2a 20 46 61 69 6c 20 74 68 65 20 6f     /* Fail the o
139f0 70 65 72 61 74 69 6f 6e 20 61 6e 64 20 72 6f 6c  peration and rol
13a00 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61  lback the transa
13a10 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
13a20 20 4f 45 5f 41 62 6f 72 74 20 20 20 20 32 20 20   OE_Abort    2  
13a30 20 2f 2a 20 42 61 63 6b 20 6f 75 74 20 63 68 61   /* Back out cha
13a40 6e 67 65 73 20 62 75 74 20 64 6f 20 6e 6f 20 72  nges but do no r
13a50 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61 63 74  ollback transact
13a60 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ion */.#define O
13a70 45 5f 46 61 69 6c 20 20 20 20 20 33 20 20 20 2f  E_Fail     3   /
13a80 2a 20 53 74 6f 70 20 74 68 65 20 6f 70 65 72 61  * Stop the opera
13a90 74 69 6f 6e 20 62 75 74 20 6c 65 61 76 65 20 61  tion but leave a
13aa0 6c 6c 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73  ll prior changes
13ab0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 49   */.#define OE_I
13ac0 67 6e 6f 72 65 20 20 20 34 20 20 20 2f 2a 20 49  gnore   4   /* I
13ad0 67 6e 6f 72 65 20 74 68 65 20 65 72 72 6f 72 2e  gnore the error.
13ae0 20 44 6f 20 6e 6f 74 20 64 6f 20 74 68 65 20 49   Do not do the I
13af0 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54 45 20  NSERT or UPDATE 
13b00 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65  */.#define OE_Re
13b10 70 6c 61 63 65 20 20 35 20 20 20 2f 2a 20 44 65  place  5   /* De
13b20 6c 65 74 65 20 65 78 69 73 74 69 6e 67 20 72 65  lete existing re
13b30 63 6f 72 64 2c 20 74 68 65 6e 20 64 6f 20 49 4e  cord, then do IN
13b40 53 45 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a  SERT or UPDATE *
13b50 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65  /..#define OE_Re
13b60 73 74 72 69 63 74 20 36 20 20 20 2f 2a 20 4f 45  strict 6   /* OE
13b70 5f 41 62 6f 72 74 20 66 6f 72 20 49 4d 4d 45 44  _Abort for IMMED
13b80 49 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c 62 61 63  IATE, OE_Rollbac
13b90 6b 20 66 6f 72 20 44 45 46 45 52 52 45 44 20 2a  k for DEFERRED *
13ba0 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74  /.#define OE_Set
13bb0 4e 75 6c 6c 20 20 37 20 20 20 2f 2a 20 53 65 74  Null  7   /* Set
13bc0 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79   the foreign key
13bd0 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c 4c 20 2a   value to NULL *
13be0 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74  /.#define OE_Set
13bf0 44 66 6c 74 20 20 38 20 20 20 2f 2a 20 53 65 74  Dflt  8   /* Set
13c00 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79   the foreign key
13c10 20 76 61 6c 75 65 20 74 6f 20 69 74 73 20 64 65   value to its de
13c20 66 61 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65  fault */.#define
13c30 20 4f 45 5f 43 61 73 63 61 64 65 20 20 39 20 20   OE_Cascade  9  
13c40 20 2f 2a 20 43 61 73 63 61 64 65 20 74 68 65 20   /* Cascade the 
13c50 63 68 61 6e 67 65 73 20 2a 2f 0a 0a 23 64 65 66  changes */..#def
13c60 69 6e 65 20 4f 45 5f 44 65 66 61 75 6c 74 20 20  ine OE_Default  
13c70 31 30 20 20 2f 2a 20 44 6f 20 77 68 61 74 65 76  10  /* Do whatev
13c80 65 72 20 74 68 65 20 64 65 66 61 75 6c 74 20 61  er the default a
13c90 63 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a 0a 2f 2a  ction is */.../*
13ca0 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
13cb0 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
13cc0 20 73 74 72 75 63 74 75 72 65 20 69 73 20 70 61   structure is pa
13cd0 73 73 65 64 20 61 73 20 74 68 65 20 66 69 72 73  ssed as the firs
13ce0 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 74 6f  t.** argument to
13cf0 20 73 71 6c 69 74 65 33 56 64 62 65 4b 65 79 43   sqlite3VdbeKeyC
13d00 6f 6d 70 61 72 65 20 61 6e 64 20 69 73 20 75 73  ompare and is us
13d10 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c 20 74 68  ed to control th
13d20 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20  e.** comparison 
13d30 6f 66 20 74 68 65 20 74 77 6f 20 69 6e 64 65 78  of the two index
13d40 20 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74   keys..**.** Not
13d50 65 20 74 68 61 74 20 61 53 6f 72 74 4f 72 64 65  e that aSortOrde
13d60 72 5b 5d 20 61 6e 64 20 61 43 6f 6c 6c 5b 5d 20  r[] and aColl[] 
13d70 68 61 76 65 20 6e 46 69 65 6c 64 2b 31 20 73 6c  have nField+1 sl
13d80 6f 74 73 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61  ots.  There.** a
13d90 72 65 20 6e 46 69 65 6c 64 20 73 6c 6f 74 73 20  re nField slots 
13da0 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20  for the columns 
13db0 6f 66 20 61 6e 20 69 6e 64 65 78 20 74 68 65 6e  of an index then
13dc0 20 6f 6e 65 20 65 78 74 72 61 20 73 6c 6f 74 0a   one extra slot.
13dd0 2a 2a 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64  ** for the rowid
13de0 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a   at the end..*/.
13df0 73 74 72 75 63 74 20 4b 65 79 49 6e 66 6f 20 7b  struct KeyInfo {
13e00 0a 20 20 75 33 32 20 6e 52 65 66 3b 20 20 20 20  .  u32 nRef;    
13e10 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
13e20 20 6f 66 20 72 65 66 65 72 65 6e 63 65 73 20 74   of references t
13e30 6f 20 74 68 69 73 20 4b 65 79 49 6e 66 6f 20 6f  o this KeyInfo o
13e40 62 6a 65 63 74 20 2a 2f 0a 20 20 75 38 20 65 6e  bject */.  u8 en
13e50 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  c;             /
13e60 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  * Text encoding 
13e70 2d 20 6f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c  - one of the SQL
13e80 49 54 45 5f 55 54 46 2a 20 76 61 6c 75 65 73 20  ITE_UTF* values 
13e90 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b  */.  u16 nField;
13ea0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
13eb0 65 72 20 6f 66 20 6b 65 79 20 63 6f 6c 75 6d 6e  er of key column
13ec0 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a  s in the index *
13ed0 2f 0a 20 20 75 31 36 20 6e 58 46 69 65 6c 64 3b  /.  u16 nXField;
13ee0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
13ef0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 62 65 79  r of columns bey
13f00 6f 6e 64 20 74 68 65 20 6b 65 79 20 63 6f 6c 75  ond the key colu
13f10 6d 6e 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  mns */.  sqlite3
13f20 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20   *db;        /* 
13f30 54 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  The database con
13f40 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20  nection */.  u8 
13f50 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20  *aSortOrder;    
13f60 20 2f 2a 20 53 6f 72 74 20 6f 72 64 65 72 20 66   /* Sort order f
13f70 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 20  or each column. 
13f80 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 61 43  */.  CollSeq *aC
13f90 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20 43 6f 6c 6c  oll[1];  /* Coll
13fa0 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 66  ating sequence f
13fb0 6f 72 20 65 61 63 68 20 74 65 72 6d 20 6f 66 20  or each term of 
13fc0 74 68 65 20 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f  the key */.};../
13fd0 2a 0a 2a 2a 20 54 68 69 73 20 6f 62 6a 65 63 74  *.** This object
13fe0 20 68 6f 6c 64 73 20 61 20 72 65 63 6f 72 64 20   holds a record 
13ff0 77 68 69 63 68 20 68 61 73 20 62 65 65 6e 20 70  which has been p
14000 61 72 73 65 64 20 6f 75 74 20 69 6e 74 6f 20 69  arsed out into i
14010 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20 66 69 65  ndividual.** fie
14020 6c 64 73 2c 20 66 6f 72 20 74 68 65 20 70 75 72  lds, for the pur
14030 70 6f 73 65 73 20 6f 66 20 64 6f 69 6e 67 20 61  poses of doing a
14040 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a 2a 2a 0a   comparison..**.
14050 2a 2a 20 41 20 72 65 63 6f 72 64 20 69 73 20 61  ** A record is a
14060 6e 20 6f 62 6a 65 63 74 20 74 68 61 74 20 63 6f  n object that co
14070 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f  ntains one or mo
14080 72 65 20 66 69 65 6c 64 73 20 6f 66 20 64 61 74  re fields of dat
14090 61 2e 0a 2a 2a 20 52 65 63 6f 72 64 73 20 61 72  a..** Records ar
140a0 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  e used to store 
140b0 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61  the content of a
140c0 20 74 61 62 6c 65 20 72 6f 77 20 61 6e 64 20 74   table row and t
140d0 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20 6b  o store.** the k
140e0 65 79 20 6f 66 20 61 6e 20 69 6e 64 65 78 2e 20  ey of an index. 
140f0 20 41 20 62 6c 6f 62 20 65 6e 63 6f 64 69 6e 67   A blob encoding
14100 20 6f 66 20 61 20 72 65 63 6f 72 64 20 69 73 20   of a record is 
14110 63 72 65 61 74 65 64 20 62 79 0a 2a 2a 20 74 68  created by.** th
14120 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 20  e OP_MakeRecord 
14130 6f 70 63 6f 64 65 20 6f 66 20 74 68 65 20 56 44  opcode of the VD
14140 42 45 20 61 6e 64 20 69 73 20 64 69 73 61 73 73  BE and is disass
14150 65 6d 62 6c 65 64 20 62 79 20 74 68 65 0a 2a 2a  embled by the.**
14160 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64   OP_Column opcod
14170 65 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  e..**.** An inst
14180 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 62 6a  ance of this obj
14190 65 63 74 20 73 65 72 76 65 73 20 61 73 20 61 20  ect serves as a 
141a0 22 6b 65 79 22 20 66 6f 72 20 64 6f 69 6e 67 20  "key" for doing 
141b0 61 20 73 65 61 72 63 68 20 6f 6e 0a 2a 2a 20 61  a search on.** a
141c0 6e 20 69 6e 64 65 78 20 62 2b 74 72 65 65 2e 20  n index b+tree. 
141d0 54 68 65 20 67 6f 61 6c 20 6f 66 20 74 68 65 20  The goal of the 
141e0 73 65 61 72 63 68 20 69 73 20 74 6f 20 66 69 6e  search is to fin
141f0 64 20 74 68 65 20 65 6e 74 72 79 20 74 68 61 74  d the entry that
14200 0a 2a 2a 20 69 73 20 63 6c 6f 73 65 64 20 74 6f  .** is closed to
14210 20 74 68 65 20 6b 65 79 20 64 65 73 63 72 69 62   the key describ
14220 65 64 20 62 79 20 74 68 69 73 20 6f 62 6a 65 63  ed by this objec
14230 74 2e 20 20 54 68 69 73 20 6f 62 6a 65 63 74 20  t.  This object 
14240 6d 69 67 68 74 20 68 6f 6c 64 0a 2a 2a 20 6a 75  might hold.** ju
14250 73 74 20 61 20 70 72 65 66 69 78 20 6f 66 20 74  st a prefix of t
14260 68 65 20 6b 65 79 2e 20 20 54 68 65 20 6e 75 6d  he key.  The num
14270 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 73  ber of fields is
14280 20 67 69 76 65 6e 20 62 79 0a 2a 2a 20 70 4b 65   given by.** pKe
14290 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2e 0a 2a  yInfo->nField..*
142a0 2a 0a 2a 2a 20 54 68 65 20 72 31 20 61 6e 64 20  *.** The r1 and 
142b0 72 32 20 66 69 65 6c 64 73 20 61 72 65 20 74 68  r2 fields are th
142c0 65 20 76 61 6c 75 65 73 20 74 6f 20 72 65 74 75  e values to retu
142d0 72 6e 20 69 66 20 74 68 69 73 20 6b 65 79 20 69  rn if this key i
142e0 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 6f  s less than.** o
142f0 72 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 61  r greater than a
14300 20 6b 65 79 20 69 6e 20 74 68 65 20 62 74 72 65   key in the btre
14310 65 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  e, respectively.
14320 20 20 54 68 65 73 65 20 61 72 65 20 6e 6f 72 6d    These are norm
14330 61 6c 6c 79 0a 2a 2a 20 2d 31 20 61 6e 64 20 2b  ally.** -1 and +
14340 31 20 72 65 73 70 65 63 74 69 76 65 6c 79 2c 20  1 respectively, 
14350 62 75 74 20 6d 69 67 68 74 20 62 65 20 69 6e 76  but might be inv
14360 65 72 74 65 64 20 74 6f 20 2b 31 20 61 6e 64 20  erted to +1 and 
14370 2d 31 20 69 66 20 74 68 65 20 62 2d 74 72 65 65  -1 if the b-tree
14380 0a 2a 2a 20 69 73 20 69 6e 20 44 45 53 43 20 6f  .** is in DESC o
14390 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  rder..**.** The 
143a0 6b 65 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66  key comparison f
143b0 75 6e 63 74 69 6f 6e 73 20 61 63 74 75 61 6c 6c  unctions actuall
143c0 79 20 72 65 74 75 72 6e 20 64 65 66 61 75 6c 74  y return default
143d0 5f 72 63 20 77 68 65 6e 20 74 68 65 79 20 66 69  _rc when they fi
143e0 6e 64 0a 2a 2a 20 61 6e 20 65 71 75 61 6c 73 20  nd.** an equals 
143f0 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 64 65 66  comparison.  def
14400 61 75 6c 74 5f 72 63 20 63 61 6e 20 62 65 20 2d  ault_rc can be -
14410 31 2c 20 30 2c 20 6f 72 20 2b 31 2e 20 20 49 66  1, 0, or +1.  If
14420 20 74 68 65 72 65 20 61 72 65 0a 2a 2a 20 6d 75   there are.** mu
14430 6c 74 69 70 6c 65 20 65 6e 74 72 69 65 73 20 69  ltiple entries i
14440 6e 20 74 68 65 20 62 2d 74 72 65 65 20 77 69 74  n the b-tree wit
14450 68 20 74 68 65 20 73 61 6d 65 20 6b 65 79 20 28  h the same key (
14460 77 68 65 6e 20 6f 6e 6c 79 20 6c 6f 6f 6b 69 6e  when only lookin
14470 67 0a 2a 2a 20 61 74 20 74 68 65 20 66 69 72 73  g.** at the firs
14480 74 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65  t pKeyInfo->nFie
14490 6c 64 73 2c 29 20 74 68 65 6e 20 64 65 66 61 75  lds,) then defau
144a0 6c 74 5f 72 63 20 63 61 6e 20 62 65 20 73 65 74  lt_rc can be set
144b0 20 74 6f 20 2d 31 20 74 6f 0a 2a 2a 20 63 61 75   to -1 to.** cau
144c0 73 65 20 74 68 65 20 73 65 61 72 63 68 20 74 6f  se the search to
144d0 20 66 69 6e 64 20 74 68 65 20 6c 61 73 74 20 6d   find the last m
144e0 61 74 63 68 2c 20 6f 72 20 2b 31 20 74 6f 20 63  atch, or +1 to c
144f0 61 75 73 65 20 74 68 65 20 73 65 61 72 63 68 20  ause the search 
14500 74 6f 0a 2a 2a 20 66 69 6e 64 20 74 68 65 20 66  to.** find the f
14510 69 72 73 74 20 6d 61 74 63 68 2e 0a 2a 2a 0a 2a  irst match..**.*
14520 2a 20 54 68 65 20 6b 65 79 20 63 6f 6d 70 61 72  * The key compar
14530 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 77  ison functions w
14540 69 6c 6c 20 73 65 74 20 65 71 53 65 65 6e 20 74  ill set eqSeen t
14550 6f 20 74 72 75 65 20 69 66 20 74 68 65 79 20 65  o true if they e
14560 76 65 72 0a 2a 2a 20 67 65 74 20 61 6e 64 20 65  ver.** get and e
14570 71 75 61 6c 20 72 65 73 75 6c 74 73 20 77 68 65  qual results whe
14580 6e 20 63 6f 6d 70 61 72 69 6e 67 20 74 68 69 73  n comparing this
14590 20 73 74 72 75 63 74 75 72 65 20 74 6f 20 61 20   structure to a 
145a0 62 2d 74 72 65 65 20 72 65 63 6f 72 64 2e 0a 2a  b-tree record..*
145b0 2a 20 57 68 65 6e 20 64 65 66 61 75 6c 74 5f 72  * When default_r
145c0 63 21 3d 30 2c 20 74 68 65 20 73 65 61 72 63 68  c!=0, the search
145d0 20 6d 69 67 68 74 20 65 6e 64 20 75 70 20 6f 6e   might end up on
145e0 20 74 68 65 20 72 65 63 6f 72 64 20 69 6d 6d 65   the record imme
145f0 64 69 61 74 65 6c 79 0a 2a 2a 20 62 65 66 6f 72  diately.** befor
14600 65 20 74 68 65 20 66 69 72 73 74 20 6d 61 74 63  e the first matc
14610 68 20 6f 72 20 69 6d 6d 65 64 69 61 74 65 6c 79  h or immediately
14620 20 61 66 74 65 72 20 74 68 65 20 6c 61 73 74 20   after the last 
14630 6d 61 74 63 68 2e 20 20 54 68 65 0a 2a 2a 20 65  match.  The.** e
14640 71 53 65 65 6e 20 66 69 65 6c 64 20 77 69 6c 6c  qSeen field will
14650 20 69 6e 64 69 63 61 74 65 20 77 68 65 74 68 65   indicate whethe
14660 72 20 6f 72 20 6e 6f 74 20 61 6e 20 65 78 61 63  r or not an exac
14670 74 20 6d 61 74 63 68 20 65 78 69 73 74 73 20 69  t match exists i
14680 6e 20 74 68 65 0a 2a 2a 20 62 2d 74 72 65 65 2e  n the.** b-tree.
14690 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e 70 61 63  .*/.struct Unpac
146a0 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20 20 4b 65  kedRecord {.  Ke
146b0 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b  yInfo *pKeyInfo;
146c0 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20 61    /* Collation a
146d0 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72 20 69 6e  nd sort-order in
146e0 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20 4d  formation */.  M
146f0 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20 20 20 20  em *aMem;       
14700 20 20 20 2f 2a 20 56 61 6c 75 65 73 20 2a 2f 0a     /* Values */.
14710 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20    u16 nField;   
14720 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
14730 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 70  of entries in ap
14740 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69 38 20 64 65  Mem[] */.  i8 de
14750 66 61 75 6c 74 5f 72 63 3b 20 20 20 20 20 20 2f  fault_rc;      /
14760 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20 72 65 73  * Comparison res
14770 75 6c 74 20 69 66 20 6b 65 79 73 20 61 72 65 20  ult if keys are 
14780 65 71 75 61 6c 20 2a 2f 0a 20 20 75 38 20 65 72  equal */.  u8 er
14790 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 2f  rCode;         /
147a0 2a 20 45 72 72 6f 72 20 64 65 74 65 63 74 65 64  * Error detected
147b0 20 62 79 20 78 52 65 63 6f 72 64 43 6f 6d 70 61   by xRecordCompa
147c0 72 65 20 28 43 4f 52 52 55 50 54 20 6f 72 20 4e  re (CORRUPT or N
147d0 4f 4d 45 4d 29 20 2a 2f 0a 20 20 69 38 20 72 31  OMEM) */.  i8 r1
147e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
147f0 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72  * Value to retur
14800 6e 20 69 66 20 28 6c 68 73 20 3e 20 72 68 73 29  n if (lhs > rhs)
14810 20 2a 2f 0a 20 20 69 38 20 72 32 3b 20 20 20 20   */.  i8 r2;    
14820 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
14830 75 65 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20  ue to return if 
14840 28 72 68 73 20 3c 20 6c 68 73 29 20 2a 2f 0a 20  (rhs < lhs) */. 
14850 20 75 38 20 65 71 53 65 65 6e 3b 20 20 20 20 20   u8 eqSeen;     
14860 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
14870 61 6e 20 65 71 75 61 6c 69 74 79 20 63 6f 6d 70  an equality comp
14880 61 72 69 73 6f 6e 20 68 61 73 20 62 65 65 6e 20  arison has been 
14890 73 65 65 6e 20 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a  seen */.};.../*.
148a0 2a 2a 20 45 61 63 68 20 53 51 4c 20 69 6e 64 65  ** Each SQL inde
148b0 78 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64  x is represented
148c0 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20 61 6e   in memory by an
148d0 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  .** instance of 
148e0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
148f0 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54  ructure..**.** T
14900 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68  he columns of th
14910 65 20 74 61 62 6c 65 20 74 68 61 74 20 61 72 65  e table that are
14920 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 61   to be indexed a
14930 72 65 20 64 65 73 63 72 69 62 65 64 0a 2a 2a 20  re described.** 
14940 62 79 20 74 68 65 20 61 69 43 6f 6c 75 6d 6e 5b  by the aiColumn[
14950 5d 20 66 69 65 6c 64 20 6f 66 20 74 68 69 73 20  ] field of this 
14960 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f 72 20  structure.  For 
14970 65 78 61 6d 70 6c 65 2c 20 73 75 70 70 6f 73 65  example, suppose
14980 0a 2a 2a 20 77 65 20 68 61 76 65 20 74 68 65 20  .** we have the 
14990 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20  following table 
149a0 61 6e 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a 2a 2a  and index:.**.**
149b0 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c       CREATE TABL
149c0 45 20 45 78 31 28 63 31 20 69 6e 74 2c 20 63 32  E Ex1(c1 int, c2
149d0 20 69 6e 74 2c 20 63 33 20 74 65 78 74 29 3b 0a   int, c3 text);.
149e0 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 49 4e  **     CREATE IN
149f0 44 45 58 20 45 78 32 20 4f 4e 20 45 78 31 28 63  DEX Ex2 ON Ex1(c
14a00 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49 6e 20  3,c1);.**.** In 
14a10 74 68 65 20 54 61 62 6c 65 20 73 74 72 75 63 74  the Table struct
14a20 75 72 65 20 64 65 73 63 72 69 62 69 6e 67 20 45  ure describing E
14a30 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65 63 61  x1, nCol==3 beca
14a40 75 73 65 20 74 68 65 72 65 20 61 72 65 0a 2a 2a  use there are.**
14a50 20 74 68 72 65 65 20 63 6f 6c 75 6d 6e 73 20 69   three columns i
14a60 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49 6e  n the table.  In
14a70 20 74 68 65 20 49 6e 64 65 78 20 73 74 72 75 63   the Index struc
14a80 74 75 72 65 20 64 65 73 63 72 69 62 69 6e 67 0a  ture describing.
14a90 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c 75 6d 6e 3d  ** Ex2, nColumn=
14aa0 3d 32 20 73 69 6e 63 65 20 32 20 6f 66 20 74 68  =2 since 2 of th
14ab0 65 20 33 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 45  e 3 columns of E
14ac0 78 31 20 61 72 65 20 69 6e 64 65 78 65 64 2e 0a  x1 are indexed..
14ad0 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20  ** The value of 
14ae0 61 69 43 6f 6c 75 6d 6e 20 69 73 20 7b 32 2c 20  aiColumn is {2, 
14af0 30 7d 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b 30 5d  0}.  aiColumn[0]
14b00 3d 3d 32 20 62 65 63 61 75 73 65 20 74 68 65 0a  ==2 because the.
14b10 2a 2a 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20  ** first column 
14b20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28 63  to be indexed (c
14b30 33 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20  3) has an index 
14b40 6f 66 20 32 20 69 6e 20 45 78 31 2e 61 43 6f 6c  of 2 in Ex1.aCol
14b50 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73 65 63 6f 6e  []..** The secon
14b60 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69  d column to be i
14b70 6e 64 65 78 65 64 20 28 63 31 29 20 68 61 73 20  ndexed (c1) has 
14b80 61 6e 20 69 6e 64 65 78 20 6f 66 20 30 20 69 6e  an index of 0 in
14b90 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b 5d 2c 20  .** Ex1.aCol[], 
14ba0 68 65 6e 63 65 20 45 78 32 2e 61 69 43 6f 6c 75  hence Ex2.aiColu
14bb0 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20  mn[1]==0..**.** 
14bc0 54 68 65 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f  The Index.onErro
14bd0 72 20 66 69 65 6c 64 20 64 65 74 65 72 6d 69 6e  r field determin
14be0 65 73 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  es whether or no
14bf0 74 20 74 68 65 20 69 6e 64 65 78 65 64 20 63 6f  t the indexed co
14c00 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74 20 62 65  lumns.** must be
14c10 20 75 6e 69 71 75 65 20 61 6e 64 20 77 68 61 74   unique and what
14c20 20 74 6f 20 64 6f 20 69 66 20 74 68 65 79 20 61   to do if they a
14c30 72 65 20 6e 6f 74 2e 20 20 57 68 65 6e 20 49 6e  re not.  When In
14c40 64 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f 45 5f 4e  dex.onError=OE_N
14c50 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65 61 6e 73  one,.** it means
14c60 20 74 68 69 73 20 69 73 20 6e 6f 74 20 61 20 75   this is not a u
14c70 6e 69 71 75 65 20 69 6e 64 65 78 2e 20 20 4f 74  nique index.  Ot
14c80 68 65 72 77 69 73 65 20 69 74 20 69 73 20 61 20  herwise it is a 
14c90 75 6e 69 71 75 65 20 69 6e 64 65 78 0a 2a 2a 20  unique index.** 
14ca0 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20 6f 66  and the value of
14cb0 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 69   Index.onError i
14cc0 6e 64 69 63 61 74 65 20 74 68 65 20 77 68 69 63  ndicate the whic
14cd0 68 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  h conflict resol
14ce0 75 74 69 6f 6e 0a 2a 2a 20 61 6c 67 6f 72 69 74  ution.** algorit
14cf0 68 6d 20 74 6f 20 65 6d 70 6c 6f 79 20 77 68 65  hm to employ whe
14d00 6e 65 76 65 72 20 61 6e 20 61 74 74 65 6d 70 74  never an attempt
14d10 20 69 73 20 6d 61 64 65 20 74 6f 20 69 6e 73 65   is made to inse
14d20 72 74 20 61 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a  rt a non-unique.
14d30 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a  ** element..**.*
14d40 2a 20 57 68 69 6c 65 20 70 61 72 73 69 6e 67 20  * While parsing 
14d50 61 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 6f  a CREATE TABLE o
14d60 72 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 73  r CREATE INDEX s
14d70 74 61 74 65 6d 65 6e 74 20 69 6e 20 6f 72 64 65  tatement in orde
14d80 72 20 74 6f 0a 2a 2a 20 67 65 6e 65 72 61 74 65  r to.** generate
14d90 20 56 44 42 45 20 63 6f 64 65 20 28 61 73 20 6f   VDBE code (as o
14da0 70 70 6f 73 65 64 20 74 6f 20 70 61 72 73 69 6e  pposed to parsin
14db0 67 20 6f 6e 65 20 72 65 61 64 20 66 72 6f 6d 20  g one read from 
14dc0 61 6e 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  an sqlite_master
14dd0 0a 2a 2a 20 74 61 62 6c 65 20 61 73 20 70 61 72  .** table as par
14de0 74 20 6f 66 20 70 61 72 73 69 6e 67 20 61 6e 20  t of parsing an 
14df0 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73  existing databas
14e00 65 20 73 63 68 65 6d 61 29 2c 20 74 72 61 6e 73  e schema), trans
14e10 69 65 6e 74 20 69 6e 73 74 61 6e 63 65 73 0a 2a  ient instances.*
14e20 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  * of this struct
14e30 75 72 65 20 6d 61 79 20 62 65 20 63 72 65 61 74  ure may be creat
14e40 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65  ed. In this case
14e50 20 74 68 65 20 49 6e 64 65 78 2e 74 6e 75 6d 20   the Index.tnum 
14e60 76 61 72 69 61 62 6c 65 20 69 73 0a 2a 2a 20 75  variable is.** u
14e70 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65  sed to store the
14e80 20 61 64 64 72 65 73 73 20 6f 66 20 61 20 56 44   address of a VD
14e90 42 45 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c 20  BE instruction, 
14ea0 6e 6f 74 20 61 20 64 61 74 61 62 61 73 65 20 70  not a database p
14eb0 61 67 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 28 69  age.** number (i
14ec0 74 20 63 61 6e 6e 6f 74 20 2d 20 74 68 65 20 64  t cannot - the d
14ed0 61 74 61 62 61 73 65 20 70 61 67 65 20 69 73 20  atabase page is 
14ee0 6e 6f 74 20 61 6c 6c 6f 63 61 74 65 64 20 75 6e  not allocated un
14ef0 74 69 6c 20 74 68 65 20 56 44 42 45 0a 2a 2a 20  til the VDBE.** 
14f00 70 72 6f 67 72 61 6d 20 69 73 20 65 78 65 63 75  program is execu
14f10 74 65 64 29 2e 20 53 65 65 20 63 6f 6e 76 65 72  ted). See conver
14f20 74 54 6f 57 69 74 68 6f 75 74 52 6f 77 69 64 54  tToWithoutRowidT
14f30 61 62 6c 65 28 29 20 66 6f 72 20 64 65 74 61 69  able() for detai
14f40 6c 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e  ls..*/.struct In
14f50 64 65 78 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  dex {.  char *zN
14f60 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
14f70 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73   /* Name of this
14f80 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 31 36 20   index */.  i16 
14f90 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  *aiColumn;      
14fa0 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 63 6f       /* Which co
14fb0 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20 62  lumns are used b
14fc0 79 20 74 68 69 73 20 69 6e 64 65 78 2e 20 20 31  y this index.  1
14fd0 73 74 20 69 73 20 30 20 2a 2f 0a 20 20 4c 6f 67  st is 0 */.  Log
14fe0 45 73 74 20 2a 61 69 52 6f 77 4c 6f 67 45 73 74  Est *aiRowLogEst
14ff0 3b 20 20 20 20 20 2f 2a 20 46 72 6f 6d 20 41 4e  ;     /* From AN
15000 41 4c 59 5a 45 3a 20 45 73 74 2e 20 72 6f 77 73  ALYZE: Est. rows
15010 20 73 65 6c 65 63 74 65 64 20 62 79 20 65 61 63   selected by eac
15020 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 54 61  h column */.  Ta
15030 62 6c 65 20 2a 70 54 61 62 6c 65 3b 20 20 20 20  ble *pTable;    
15040 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 53 51         /* The SQ
15050 4c 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e  L table being in
15060 64 65 78 65 64 20 2a 2f 0a 20 20 63 68 61 72 20  dexed */.  char 
15070 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20  *zColAff;       
15080 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65      /* String de
15090 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e  fining the affin
150a0 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75  ity of each colu
150b0 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70  mn */.  Index *p
150c0 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20  Next;           
150d0 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 64   /* The next ind
150e0 65 78 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ex associated wi
150f0 74 68 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c  th the same tabl
15100 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  e */.  Schema *p
15110 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20 20  Schema;         
15120 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69  /* Schema contai
15130 6e 69 6e 67 20 74 68 69 73 20 69 6e 64 65 78 20  ning this index 
15140 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72  */.  u8 *aSortOr
15150 64 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  der;          /*
15160 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
15170 3a 20 54 72 75 65 3d 3d 44 45 53 43 2c 20 46 61  : True==DESC, Fa
15180 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a 20 20 63 6f  lse==ASC */.  co
15190 6e 73 74 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c  nst char **azCol
151a0 6c 3b 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20  l;     /* Array 
151b0 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  of collation seq
151c0 75 65 6e 63 65 20 6e 61 6d 65 73 20 66 6f 72 20  uence names for 
151d0 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70 72 20  index */.  Expr 
151e0 2a 70 50 61 72 74 49 64 78 57 68 65 72 65 3b 20  *pPartIdxWhere; 
151f0 20 20 20 20 2f 2a 20 57 48 45 52 45 20 63 6c 61      /* WHERE cla
15200 75 73 65 20 66 6f 72 20 70 61 72 74 69 61 6c 20  use for partial 
15210 69 6e 64 69 63 65 73 20 2a 2f 0a 20 20 45 78 70  indices */.  Exp
15220 72 4c 69 73 74 20 2a 61 43 6f 6c 45 78 70 72 3b  rList *aColExpr;
15230 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20        /* Column 
15240 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20  expressions */. 
15250 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20   int tnum;      
15260 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 42 20            /* DB 
15270 50 61 67 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  Page containing 
15280 72 6f 6f 74 20 6f 66 20 74 68 69 73 20 69 6e 64  root of this ind
15290 65 78 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73  ex */.  LogEst s
152a0 7a 49 64 78 52 6f 77 3b 20 20 20 20 20 20 20 20  zIdxRow;        
152b0 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 61 76   /* Estimated av
152c0 65 72 61 67 65 20 72 6f 77 20 73 69 7a 65 20 69  erage row size i
152d0 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75 31 36  n bytes */.  u16
152e0 20 6e 4b 65 79 43 6f 6c 3b 20 20 20 20 20 20 20   nKeyCol;       
152f0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
15300 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 6d 69  of columns formi
15310 6e 67 20 74 68 65 20 6b 65 79 20 2a 2f 0a 20 20  ng the key */.  
15320 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20  u16 nColumn;    
15330 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
15340 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 73 74  er of columns st
15350 6f 72 65 64 20 69 6e 20 74 68 65 20 69 6e 64 65  ored in the inde
15360 78 20 2a 2f 0a 20 20 75 38 20 6f 6e 45 72 72 6f  x */.  u8 onErro
15370 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
15380 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c 20 4f 45 5f  /* OE_Abort, OE_
15390 49 67 6e 6f 72 65 2c 20 4f 45 5f 52 65 70 6c 61  Ignore, OE_Repla
153a0 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65 20 2a  ce, or OE_None *
153b0 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 64 78  /.  unsigned idx
153c0 54 79 70 65 3a 32 3b 20 20 20 20 20 20 2f 2a 20  Type:2;      /* 
153d0 31 3d 3d 55 4e 49 51 55 45 2c 20 32 3d 3d 50 52  1==UNIQUE, 2==PR
153e0 49 4d 41 52 59 20 4b 45 59 2c 20 30 3d 3d 43 52  IMARY KEY, 0==CR
153f0 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 20 20  EATE INDEX */.  
15400 75 6e 73 69 67 6e 65 64 20 62 55 6e 6f 72 64 65  unsigned bUnorde
15410 72 65 64 3a 31 3b 20 20 20 2f 2a 20 55 73 65 20  red:1;   /* Use 
15420 74 68 69 73 20 69 6e 64 65 78 20 66 6f 72 20 3d  this index for =
15430 3d 20 6f 72 20 49 4e 20 71 75 65 72 69 65 73 20  = or IN queries 
15440 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  only */.  unsign
15450 65 64 20 75 6e 69 71 4e 6f 74 4e 75 6c 6c 3a 31  ed uniqNotNull:1
15460 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20 55 4e  ;  /* True if UN
15470 49 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e 55 4c  IQUE and NOT NUL
15480 4c 20 66 6f 72 20 61 6c 6c 20 63 6f 6c 75 6d 6e  L for all column
15490 73 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  s */.  unsigned 
154a0 69 73 52 65 73 69 7a 65 64 3a 31 3b 20 20 20 20  isResized:1;    
154b0 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 69 7a  /* True if resiz
154c0 65 49 6e 64 65 78 4f 62 6a 65 63 74 28 29 20 68  eIndexObject() h
154d0 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a  as been called *
154e0 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 73 43  /.  unsigned isC
154f0 6f 76 65 72 69 6e 67 3a 31 3b 20 20 20 2f 2a 20  overing:1;   /* 
15500 54 72 75 65 20 69 66 20 74 68 69 73 20 69 73 20  True if this is 
15510 61 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 65 78  a covering index
15520 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e   */.  unsigned n
15530 6f 53 6b 69 70 53 63 61 6e 3a 31 3b 20 20 20 2f  oSkipScan:1;   /
15540 2a 20 44 6f 20 6e 6f 74 20 74 72 79 20 74 6f 20  * Do not try to 
15550 75 73 65 20 73 6b 69 70 2d 73 63 61 6e 20 69 66  use skip-scan if
15560 20 74 72 75 65 20 2a 2f 0a 20 20 75 6e 73 69 67   true */.  unsig
15570 6e 65 64 20 68 61 73 53 74 61 74 31 3a 31 3b 20  ned hasStat1:1; 
15580 20 20 20 20 2f 2a 20 61 69 52 6f 77 4c 6f 67 45      /* aiRowLogE
15590 73 74 20 76 61 6c 75 65 73 20 63 6f 6d 65 20 66  st values come f
155a0 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31  rom sqlite_stat1
155b0 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
155c0 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
155d0 52 5f 53 54 41 54 34 0a 20 20 69 6e 74 20 6e 53  R_STAT4.  int nS
155e0 61 6d 70 6c 65 3b 20 20 20 20 20 20 20 20 20 20  ample;          
155f0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
15600 65 6c 65 6d 65 6e 74 73 20 69 6e 20 61 53 61 6d  elements in aSam
15610 70 6c 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e  ple[] */.  int n
15620 53 61 6d 70 6c 65 43 6f 6c 3b 20 20 20 20 20 20  SampleCol;      
15630 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 49      /* Size of I
15640 6e 64 65 78 53 61 6d 70 6c 65 2e 61 6e 45 71 5b  ndexSample.anEq[
15650 5d 20 61 6e 64 20 73 6f 20 6f 6e 20 2a 2f 0a 20  ] and so on */. 
15660 20 74 52 6f 77 63 6e 74 20 2a 61 41 76 67 45 71   tRowcnt *aAvgEq
15670 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 76 65  ;         /* Ave
15680 72 61 67 65 20 6e 45 71 20 76 61 6c 75 65 73 20  rage nEq values 
15690 66 6f 72 20 6b 65 79 73 20 6e 6f 74 20 69 6e 20  for keys not in 
156a0 61 53 61 6d 70 6c 65 20 2a 2f 0a 20 20 49 6e 64  aSample */.  Ind
156b0 65 78 53 61 6d 70 6c 65 20 2a 61 53 61 6d 70 6c  exSample *aSampl
156c0 65 3b 20 20 20 20 2f 2a 20 53 61 6d 70 6c 65 73  e;    /* Samples
156d0 20 6f 66 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73   of the left-mos
156e0 74 20 6b 65 79 20 2a 2f 0a 20 20 74 52 6f 77 63  t key */.  tRowc
156f0 6e 74 20 2a 61 69 52 6f 77 45 73 74 3b 20 20 20  nt *aiRowEst;   
15700 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72      /* Non-logar
15710 69 74 68 6d 69 63 20 73 74 61 74 31 20 64 61 74  ithmic stat1 dat
15720 61 20 66 6f 72 20 74 68 69 73 20 69 6e 64 65 78  a for this index
15730 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 6e 52   */.  tRowcnt nR
15740 6f 77 45 73 74 30 3b 20 20 20 20 20 20 20 20 2f  owEst0;        /
15750 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69  * Non-logarithmi
15760 63 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  c number of rows
15770 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f   in the index */
15780 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a  .#endif.};../*.*
15790 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
157a0 20 66 6f 72 20 49 6e 64 65 78 2e 69 64 78 54 79   for Index.idxTy
157b0 70 65 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  pe.*/.#define SQ
157c0 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 41 50 50  LITE_IDXTYPE_APP
157d0 44 45 46 20 20 20 20 20 20 30 20 20 20 2f 2a 20  DEF      0   /* 
157e0 43 72 65 61 74 65 64 20 75 73 69 6e 67 20 43 52  Created using CR
157f0 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 23 64  EATE INDEX */.#d
15800 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58  efine SQLITE_IDX
15810 54 59 50 45 5f 55 4e 49 51 55 45 20 20 20 20 20  TYPE_UNIQUE     
15820 20 31 20 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e   1   /* Implemen
15830 74 73 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73  ts a UNIQUE cons
15840 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  traint */.#defin
15850 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45  e SQLITE_IDXTYPE
15860 5f 50 52 49 4d 41 52 59 4b 45 59 20 20 32 20 20  _PRIMARYKEY  2  
15870 20 2f 2a 20 49 73 20 74 68 65 20 50 52 49 4d 41   /* Is the PRIMA
15880 52 59 20 4b 45 59 20 66 6f 72 20 74 68 65 20 74  RY KEY for the t
15890 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 20 52 65 74 75  able */../* Retu
158a0 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64 65 78  rn true if index
158b0 20 58 20 69 73 20 61 20 50 52 49 4d 41 52 59 20   X is a PRIMARY 
158c0 4b 45 59 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65  KEY index */.#de
158d0 66 69 6e 65 20 49 73 50 72 69 6d 61 72 79 4b 65  fine IsPrimaryKe
158e0 79 49 6e 64 65 78 28 58 29 20 20 28 28 58 29 2d  yIndex(X)  ((X)-
158f0 3e 69 64 78 54 79 70 65 3d 3d 53 51 4c 49 54 45  >idxType==SQLITE
15900 5f 49 44 58 54 59 50 45 5f 50 52 49 4d 41 52 59  _IDXTYPE_PRIMARY
15910 4b 45 59 29 0a 0a 2f 2a 20 52 65 74 75 72 6e 20  KEY)../* Return 
15920 74 72 75 65 20 69 66 20 69 6e 64 65 78 20 58 20  true if index X 
15930 69 73 20 61 20 55 4e 49 51 55 45 20 69 6e 64 65  is a UNIQUE inde
15940 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 55  x */.#define IsU
15950 6e 69 71 75 65 49 6e 64 65 78 28 58 29 20 20 20  niqueIndex(X)   
15960 20 20 20 28 28 58 29 2d 3e 6f 6e 45 72 72 6f 72     ((X)->onError
15970 21 3d 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f 2a 20 54  !=OE_None)../* T
15980 68 65 20 49 6e 64 65 78 2e 61 69 43 6f 6c 75 6d  he Index.aiColum
15990 6e 5b 5d 20 76 61 6c 75 65 73 20 61 72 65 20 6e  n[] values are n
159a0 6f 72 6d 61 6c 6c 79 20 70 6f 73 69 74 69 76 65  ormally positive
159b0 20 69 6e 74 65 67 65 72 2e 20 20 42 75 74 0a 2a   integer.  But.*
159c0 2a 20 74 68 65 72 65 20 61 72 65 20 73 6f 6d 65  * there are some
159d0 20 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 73   negative values
159e0 20 74 68 61 74 20 68 61 76 65 20 73 70 65 63 69   that have speci
159f0 61 6c 20 6d 65 61 6e 69 6e 67 3a 0a 2a 2f 0a 23  al meaning:.*/.#
15a00 64 65 66 69 6e 65 20 58 4e 5f 52 4f 57 49 44 20  define XN_ROWID 
15a10 20 20 20 20 28 2d 31 29 20 20 20 20 20 2f 2a 20      (-1)     /* 
15a20 49 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20 69  Indexed column i
15a30 73 20 74 68 65 20 72 6f 77 69 64 20 2a 2f 0a 23  s the rowid */.#
15a40 64 65 66 69 6e 65 20 58 4e 5f 45 58 50 52 20 20  define XN_EXPR  
15a50 20 20 20 20 28 2d 32 29 20 20 20 20 20 2f 2a 20      (-2)     /* 
15a60 49 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20 69  Indexed column i
15a70 73 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  s an expression 
15a80 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 73  */../*.** Each s
15a90 61 6d 70 6c 65 20 73 74 6f 72 65 64 20 69 6e 20  ample stored in 
15aa0 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33  the sqlite_stat3
15ab0 20 74 61 62 6c 65 20 69 73 20 72 65 70 72 65 73   table is repres
15ac0 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 0a  ented in memory.
15ad0 2a 2a 20 75 73 69 6e 67 20 61 20 73 74 72 75 63  ** using a struc
15ae0 74 75 72 65 20 6f 66 20 74 68 69 73 20 74 79 70  ture of this typ
15af0 65 2e 20 20 53 65 65 20 64 6f 63 75 6d 65 6e 74  e.  See document
15b00 61 74 69 6f 6e 20 61 74 20 74 68 65 20 74 6f 70  ation at the top
15b10 20 6f 66 20 74 68 65 0a 2a 2a 20 61 6e 61 6c 79   of the.** analy
15b20 7a 65 2e 63 20 73 6f 75 72 63 65 20 66 69 6c 65  ze.c source file
15b30 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
15b40 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
15b50 73 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70  struct IndexSamp
15b60 6c 65 20 7b 0a 20 20 76 6f 69 64 20 2a 70 3b 20  le {.  void *p; 
15b70 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e           /* Poin
15b80 74 65 72 20 74 6f 20 73 61 6d 70 6c 65 64 20 72  ter to sampled r
15b90 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e  ecord */.  int n
15ba0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
15bb0 53 69 7a 65 20 6f 66 20 72 65 63 6f 72 64 20 69  Size of record i
15bc0 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 74 52 6f  n bytes */.  tRo
15bd0 77 63 6e 74 20 2a 61 6e 45 71 3b 20 20 20 20 2f  wcnt *anEq;    /
15be0 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66  * Est. number of
15bf0 20 72 6f 77 73 20 77 68 65 72 65 20 74 68 65 20   rows where the 
15c00 6b 65 79 20 65 71 75 61 6c 73 20 74 68 69 73 20  key equals this 
15c10 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77  sample */.  tRow
15c20 63 6e 74 20 2a 61 6e 4c 74 3b 20 20 20 20 2f 2a  cnt *anLt;    /*
15c30 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20   Est. number of 
15c40 72 6f 77 73 20 77 68 65 72 65 20 6b 65 79 20 69  rows where key i
15c50 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73  s less than this
15c60 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f   sample */.  tRo
15c70 77 63 6e 74 20 2a 61 6e 44 4c 74 3b 20 20 20 2f  wcnt *anDLt;   /
15c80 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66  * Est. number of
15c90 20 64 69 73 74 69 6e 63 74 20 6b 65 79 73 20 6c   distinct keys l
15ca0 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 73 61  ess than this sa
15cb0 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  mple */.};../*.*
15cc0 2a 20 45 61 63 68 20 74 6f 6b 65 6e 20 63 6f 6d  * Each token com
15cd0 69 6e 67 20 6f 75 74 20 6f 66 20 74 68 65 20 6c  ing out of the l
15ce0 65 78 65 72 20 69 73 20 61 6e 20 69 6e 73 74 61  exer is an insta
15cf0 6e 63 65 20 6f 66 0a 2a 2a 20 74 68 69 73 20 73  nce of.** this s
15d00 74 72 75 63 74 75 72 65 2e 20 20 54 6f 6b 65 6e  tructure.  Token
15d10 73 20 61 72 65 20 61 6c 73 6f 20 75 73 65 64 20  s are also used 
15d20 61 73 20 70 61 72 74 20 6f 66 20 61 6e 20 65 78  as part of an ex
15d30 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  pression..**.** 
15d40 4e 6f 74 65 20 69 66 20 54 6f 6b 65 6e 2e 7a 3d  Note if Token.z=
15d50 3d 30 20 74 68 65 6e 20 54 6f 6b 65 6e 2e 64 79  =0 then Token.dy
15d60 6e 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 61 72  n and Token.n ar
15d70 65 20 75 6e 64 65 66 69 6e 65 64 20 61 6e 64 0a  e undefined and.
15d80 2a 2a 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20 72  ** may contain r
15d90 61 6e 64 6f 6d 20 76 61 6c 75 65 73 2e 20 20 44  andom values.  D
15da0 6f 20 6e 6f 74 20 6d 61 6b 65 20 61 6e 79 20 61  o not make any a
15db0 73 73 75 6d 70 74 69 6f 6e 73 20 61 62 6f 75 74  ssumptions about
15dc0 20 54 6f 6b 65 6e 2e 64 79 6e 0a 2a 2a 20 61 6e   Token.dyn.** an
15dd0 64 20 54 6f 6b 65 6e 2e 6e 20 77 68 65 6e 20 54  d Token.n when T
15de0 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a 2f 0a 73 74  oken.z==0..*/.st
15df0 72 75 63 74 20 54 6f 6b 65 6e 20 7b 0a 20 20 63  ruct Token {.  c
15e00 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b 20 20 20  onst char *z;   
15e10 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65    /* Text of the
15e20 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74 20 4e 55 4c   token.  Not NUL
15e30 4c 2d 74 65 72 6d 69 6e 61 74 65 64 21 20 2a 2f  L-terminated! */
15e40 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20  .  unsigned int 
15e50 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20  n;    /* Number 
15e60 6f 66 20 63 68 61 72 61 63 74 65 72 73 20 69 6e  of characters in
15e70 20 74 68 69 73 20 74 6f 6b 65 6e 20 2a 2f 0a 7d   this token */.}
15e80 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  ;../*.** An inst
15e90 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72  ance of this str
15ea0 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20  ucture contains 
15eb0 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64  information need
15ec0 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a  ed to generate.*
15ed0 2a 20 63 6f 64 65 20 66 6f 72 20 61 20 53 45 4c  * code for a SEL
15ee0 45 43 54 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ECT that contain
15ef0 73 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  s aggregate func
15f00 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  tions..**.** If 
15f10 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f 41 47 47 5f  Expr.op==TK_AGG_
15f20 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b 5f 41 47 47  COLUMN or TK_AGG
15f30 5f 46 55 4e 43 54 49 4f 4e 20 74 68 65 6e 20 45  _FUNCTION then E
15f40 78 70 72 2e 70 41 67 67 49 6e 66 6f 20 69 73 20  xpr.pAggInfo is 
15f50 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20  a.** pointer to 
15f60 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20  this structure. 
15f70 20 54 68 65 20 45 78 70 72 2e 69 43 6f 6c 75 6d   The Expr.iColum
15f80 6e 20 66 69 65 6c 64 20 69 73 20 74 68 65 20 69  n field is the i
15f90 6e 64 65 78 20 69 6e 0a 2a 2a 20 41 67 67 49 6e  ndex in.** AggIn
15fa0 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72 20 41 67 67  fo.aCol[] or Agg
15fb0 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d 20 6f 66 20  Info.aFunc[] of 
15fc0 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64  information need
15fd0 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a  ed to generate.*
15fe0 2a 20 63 6f 64 65 20 66 6f 72 20 74 68 61 74 20  * code for that 
15ff0 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 67 67 49  node..**.** AggI
16000 6e 66 6f 2e 70 47 72 6f 75 70 42 79 20 61 6e 64  nfo.pGroupBy and
16010 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 2e 70   AggInfo.aFunc.p
16020 45 78 70 72 20 70 6f 69 6e 74 20 74 6f 20 66 69  Expr point to fi
16030 65 6c 64 73 20 77 69 74 68 69 6e 20 74 68 65 0a  elds within the.
16040 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 53 65 6c 65  ** original Sele
16050 63 74 20 73 74 72 75 63 74 75 72 65 20 74 68 61  ct structure tha
16060 74 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20  t describes the 
16070 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
16080 2e 20 20 54 68 65 73 65 0a 2a 2a 20 66 69 65 6c  .  These.** fiel
16090 64 73 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74  ds do not need t
160a0 6f 20 62 65 20 66 72 65 65 64 20 77 68 65 6e 20  o be freed when 
160b0 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68 65  deallocating the
160c0 20 41 67 67 49 6e 66 6f 20 73 74 72 75 63 74 75   AggInfo structu
160d0 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 67  re..*/.struct Ag
160e0 67 49 6e 66 6f 20 7b 0a 20 20 75 38 20 64 69 72  gInfo {.  u8 dir
160f0 65 63 74 4d 6f 64 65 3b 20 20 20 20 20 20 20 20  ectMode;        
16100 20 20 2f 2a 20 44 69 72 65 63 74 20 72 65 6e 64    /* Direct rend
16110 65 72 69 6e 67 20 6d 6f 64 65 20 6d 65 61 6e 73  ering mode means
16120 20 74 61 6b 65 20 64 61 74 61 20 64 69 72 65 63   take data direc
16130 74 6c 79 0a 20 20 20 20 20 20 20 20 20 20 20 20  tly.            
16140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
16150 20 66 72 6f 6d 20 73 6f 75 72 63 65 20 74 61 62   from source tab
16160 6c 65 73 20 72 61 74 68 65 72 20 74 68 61 6e 20  les rather than 
16170 66 72 6f 6d 20 61 63 63 75 6d 75 6c 61 74 6f 72  from accumulator
16180 73 20 2a 2f 0a 20 20 75 38 20 75 73 65 53 6f 72  s */.  u8 useSor
16190 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20 2f  tingIdx;       /
161a0 2a 20 49 6e 20 64 69 72 65 63 74 20 6d 6f 64 65  * In direct mode
161b0 2c 20 72 65 66 65 72 65 6e 63 65 20 74 68 65 20  , reference the 
161c0 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 72 61  sorting index ra
161d0 74 68 65 72 0a 20 20 20 20 20 20 20 20 20 20 20  ther.           
161e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
161f0 2a 20 74 68 61 6e 20 74 68 65 20 73 6f 75 72 63  * than the sourc
16200 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74  e table */.  int
16210 20 73 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20   sortingIdx;    
16220 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e       /* Cursor n
16230 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f 72  umber of the sor
16240 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20  ting index */.  
16250 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 50 54  int sortingIdxPT
16260 61 62 3b 20 20 20 20 20 2f 2a 20 43 75 72 73 6f  ab;     /* Curso
16270 72 20 6e 75 6d 62 65 72 20 6f 66 20 70 73 65 75  r number of pseu
16280 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e  do-table */.  in
16290 74 20 6e 53 6f 72 74 69 6e 67 43 6f 6c 75 6d 6e  t nSortingColumn
162a0 3b 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20  ;     /* Number 
162b0 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
162c0 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20  e sorting index 
162d0 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 67 2c 20  */.  int mnReg, 
162e0 6d 78 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20  mxReg;       /* 
162f0 52 61 6e 67 65 20 6f 66 20 72 65 67 69 73 74 65  Range of registe
16300 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72  rs allocated for
16310 20 61 43 6f 6c 20 61 6e 64 20 61 46 75 6e 63 20   aCol and aFunc 
16320 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
16330 47 72 6f 75 70 42 79 3b 20 20 20 20 20 2f 2a 20  GroupBy;     /* 
16340 54 68 65 20 67 72 6f 75 70 20 62 79 20 63 6c 61  The group by cla
16350 75 73 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  use */.  struct 
16360 41 67 67 49 6e 66 6f 5f 63 6f 6c 20 7b 20 20 20  AggInfo_col {   
16370 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 63 6f 6c   /* For each col
16380 75 6d 6e 20 75 73 65 64 20 69 6e 20 73 6f 75 72  umn used in sour
16390 63 65 20 74 61 62 6c 65 73 20 2a 2f 0a 20 20 20  ce tables */.   
163a0 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20   Table *pTab;   
163b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 6f 75            /* Sou
163c0 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  rce table */.   
163d0 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20   int iTable;    
163e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72            /* Cur
163f0 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68  sor number of th
16400 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a  e source table *
16410 2f 0a 20 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d  /.    int iColum
16420 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  n;             /
16430 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  * Column number 
16440 77 69 74 68 69 6e 20 74 68 65 20 73 6f 75 72 63  within the sourc
16450 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69  e table */.    i
16460 6e 74 20 69 53 6f 72 74 65 72 43 6f 6c 75 6d 6e  nt iSorterColumn
16470 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d  ;       /* Colum
16480 6e 20 6e 75 6d 62 65 72 20 69 6e 20 74 68 65 20  n number in the 
16490 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f  sorting index */
164a0 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20  .    int iMem;  
164b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
164c0 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e   Memory location
164d0 20 74 68 61 74 20 61 63 74 73 20 61 73 20 61 63   that acts as ac
164e0 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20  cumulator */.   
164f0 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20   Expr *pExpr;   
16500 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
16510 20 6f 72 69 67 69 6e 61 6c 20 65 78 70 72 65 73   original expres
16520 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f  sion */.  } *aCo
16530 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e  l;.  int nColumn
16540 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
16550 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 64 20 65  Number of used e
16560 6e 74 72 69 65 73 20 69 6e 20 61 43 6f 6c 5b 5d  ntries in aCol[]
16570 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 63 63 75 6d   */.  int nAccum
16580 75 6c 61 74 6f 72 3b 20 20 20 20 20 20 20 2f 2a  ulator;       /*
16590 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
165a0 6e 73 20 74 68 61 74 20 73 68 6f 77 20 74 68 72  ns that show thr
165b0 6f 75 67 68 20 74 6f 20 74 68 65 20 6f 75 74 70  ough to the outp
165c0 75 74 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  ut..            
165d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
165e0 20 41 64 64 69 74 69 6f 6e 61 6c 20 63 6f 6c 75   Additional colu
165f0 6d 6e 73 20 61 72 65 20 75 73 65 64 20 6f 6e 6c  mns are used onl
16600 79 20 61 73 20 70 61 72 61 6d 65 74 65 72 73 20  y as parameters 
16610 74 6f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  to.             
16620 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
16630 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
16640 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  ons */.  struct 
16650 41 67 67 49 6e 66 6f 5f 66 75 6e 63 20 7b 20 20  AggInfo_func {  
16660 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 61 67 67   /* For each agg
16670 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20  regate function 
16680 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78  */.    Expr *pEx
16690 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pr;             
166a0 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 65 6e  /* Expression en
166b0 63 6f 64 69 6e 67 20 74 68 65 20 66 75 6e 63 74  coding the funct
166c0 69 6f 6e 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44  ion */.    FuncD
166d0 65 66 20 2a 70 46 75 6e 63 3b 20 20 20 20 20 20  ef *pFunc;      
166e0 20 20 20 20 2f 2a 20 54 68 65 20 61 67 67 72 65      /* The aggre
166f0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 69 6d  gate function im
16700 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a  plementation */.
16710 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20      int iMem;   
16720 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
16730 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20  Memory location 
16740 74 68 61 74 20 61 63 74 73 20 61 73 20 61 63 63  that acts as acc
16750 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20  umulator */.    
16760 69 6e 74 20 69 44 69 73 74 69 6e 63 74 3b 20 20  int iDistinct;  
16770 20 20 20 20 20 20 20 20 20 2f 2a 20 45 70 68 65           /* Ephe
16780 6d 65 72 61 6c 20 74 61 62 6c 65 20 75 73 65 64  meral table used
16790 20 74 6f 20 65 6e 66 6f 72 63 65 20 44 49 53 54   to enforce DIST
167a0 49 4e 43 54 20 2a 2f 0a 20 20 7d 20 2a 61 46 75  INCT */.  } *aFu
167b0 6e 63 3b 0a 20 20 69 6e 74 20 6e 46 75 6e 63 3b  nc;.  int nFunc;
167c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
167d0 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69   Number of entri
167e0 65 73 20 69 6e 20 61 46 75 6e 63 5b 5d 20 2a 2f  es in aFunc[] */
167f0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64  .};../*.** The d
16800 61 74 61 74 79 70 65 20 79 6e 56 61 72 20 69 73  atatype ynVar is
16810 20 61 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65   a signed intege
16820 72 2c 20 65 69 74 68 65 72 20 31 36 2d 62 69 74  r, either 16-bit
16830 20 6f 72 20 33 32 2d 62 69 74 2e 0a 2a 2a 20 55   or 32-bit..** U
16840 73 75 61 6c 6c 79 20 69 74 20 69 73 20 31 36 2d  sually it is 16-
16850 62 69 74 73 2e 20 20 42 75 74 20 69 66 20 53 51  bits.  But if SQ
16860 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c  LITE_MAX_VARIABL
16870 45 5f 4e 55 4d 42 45 52 20 69 73 20 67 72 65 61  E_NUMBER is grea
16880 74 65 72 0a 2a 2a 20 74 68 61 6e 20 33 32 37 36  ter.** than 3276
16890 37 20 77 65 20 68 61 76 65 20 74 6f 20 6d 61 6b  7 we have to mak
168a0 65 20 69 74 20 33 32 2d 62 69 74 2e 20 20 31 36  e it 32-bit.  16
168b0 2d 62 69 74 20 69 73 20 70 72 65 66 65 72 72 65  -bit is preferre
168c0 64 20 62 65 63 61 75 73 65 0a 2a 2a 20 69 74 20  d because.** it 
168d0 75 73 65 73 20 6c 65 73 73 20 6d 65 6d 6f 72 79  uses less memory
168e0 20 69 6e 20 74 68 65 20 45 78 70 72 20 6f 62 6a   in the Expr obj
168f0 65 63 74 2c 20 77 68 69 63 68 20 69 73 20 61 20  ect, which is a 
16900 62 69 67 20 6d 65 6d 6f 72 79 20 75 73 65 72 0a  big memory user.
16910 2a 2a 20 69 6e 20 73 79 73 74 65 6d 73 20 77 69  ** in systems wi
16920 74 68 20 6c 6f 74 73 20 6f 66 20 70 72 65 70 61  th lots of prepa
16930 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 2e 20  red statements. 
16940 20 41 6e 64 20 66 65 77 20 61 70 70 6c 69 63 61   And few applica
16950 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65 64 20 6d 6f  tions.** need mo
16960 72 65 20 74 68 61 6e 20 61 62 6f 75 74 20 31 30  re than about 10
16970 20 6f 72 20 32 30 20 76 61 72 69 61 62 6c 65 73   or 20 variables
16980 2e 20 20 42 75 74 20 73 6f 6d 65 20 65 78 74 72  .  But some extr
16990 65 6d 65 20 75 73 65 72 73 20 77 61 6e 74 0a 2a  eme users want.*
169a0 2a 20 74 6f 20 68 61 76 65 20 70 72 65 70 61 72  * to have prepar
169b0 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69  ed statements wi
169c0 74 68 20 6f 76 65 72 20 33 32 37 36 37 20 76 61  th over 32767 va
169d0 72 69 61 62 6c 65 73 2c 20 61 6e 64 20 66 6f 72  riables, and for
169e0 20 74 68 65 6d 0a 2a 2a 20 74 68 65 20 6f 70 74   them.** the opt
169f0 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65  ion is available
16a00 20 28 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d   (at compile-tim
16a10 65 29 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54  e)..*/.#if SQLIT
16a20 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e  E_MAX_VARIABLE_N
16a30 55 4d 42 45 52 3c 3d 33 32 37 36 37 0a 74 79 70  UMBER<=32767.typ
16a40 65 64 65 66 20 69 31 36 20 79 6e 56 61 72 3b 0a  edef i16 ynVar;.
16a50 23 65 6c 73 65 0a 74 79 70 65 64 65 66 20 69 6e  #else.typedef in
16a60 74 20 79 6e 56 61 72 3b 0a 23 65 6e 64 69 66 0a  t ynVar;.#endif.
16a70 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f 64 65  ./*.** Each node
16a80 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f   of an expressio
16a90 6e 20 69 6e 20 74 68 65 20 70 61 72 73 65 20 74  n in the parse t
16aa0 72 65 65 20 69 73 20 61 6e 20 69 6e 73 74 61 6e  ree is an instan
16ab0 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74  ce.** of this st
16ac0 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45  ructure..**.** E
16ad0 78 70 72 2e 6f 70 20 69 73 20 74 68 65 20 6f 70  xpr.op is the op
16ae0 63 6f 64 65 2e 20 54 68 65 20 69 6e 74 65 67 65  code. The intege
16af0 72 20 70 61 72 73 65 72 20 74 6f 6b 65 6e 20 63  r parser token c
16b00 6f 64 65 73 20 61 72 65 20 72 65 75 73 65 64 0a  odes are reused.
16b10 2a 2a 20 61 73 20 6f 70 63 6f 64 65 73 20 68 65  ** as opcodes he
16b20 72 65 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c  re. For example,
16b30 20 74 68 65 20 70 61 72 73 65 72 20 64 65 66 69   the parser defi
16b40 6e 65 73 20 54 4b 5f 47 45 20 74 6f 20 62 65 20  nes TK_GE to be 
16b50 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63 6f  an integer.** co
16b60 64 65 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20  de representing 
16b70 74 68 65 20 22 3e 3d 22 20 6f 70 65 72 61 74 6f  the ">=" operato
16b80 72 2e 20 54 68 69 73 20 73 61 6d 65 20 69 6e 74  r. This same int
16b90 65 67 65 72 20 63 6f 64 65 20 69 73 20 72 65 75  eger code is reu
16ba0 73 65 64 0a 2a 2a 20 74 6f 20 72 65 70 72 65 73  sed.** to repres
16bb0 65 6e 74 20 74 68 65 20 67 72 65 61 74 65 72 2d  ent the greater-
16bc0 74 68 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74 6f  than-or-equal-to
16bd0 20 6f 70 65 72 61 74 6f 72 20 69 6e 20 74 68 65   operator in the
16be0 20 65 78 70 72 65 73 73 69 6f 6e 0a 2a 2a 20 74   expression.** t
16bf0 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ree..**.** If th
16c00 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
16c10 61 6e 20 53 51 4c 20 6c 69 74 65 72 61 6c 20 28  an SQL literal (
16c20 54 4b 5f 49 4e 54 45 47 45 52 2c 20 54 4b 5f 46  TK_INTEGER, TK_F
16c30 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f 42 2c 0a 2a  LOAT, TK_BLOB,.*
16c40 2a 20 6f 72 20 54 4b 5f 53 54 52 49 4e 47 29 2c  * or TK_STRING),
16c50 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e   then Expr.token
16c60 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 74 65   contains the te
16c70 78 74 20 6f 66 20 74 68 65 20 53 51 4c 20 6c 69  xt of the SQL li
16c80 74 65 72 61 6c 2e 20 49 66 0a 2a 2a 20 74 68 65  teral. If.** the
16c90 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
16ca0 20 76 61 72 69 61 62 6c 65 20 28 54 4b 5f 56 41   variable (TK_VA
16cb0 52 49 41 42 4c 45 29 2c 20 74 68 65 6e 20 45 78  RIABLE), then Ex
16cc0 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e  pr.token contain
16cd0 73 20 74 68 65 0a 2a 2a 20 76 61 72 69 61 62 6c  s the.** variabl
16ce0 65 20 6e 61 6d 65 2e 20 46 69 6e 61 6c 6c 79 2c  e name. Finally,
16cf0 20 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69   if the expressi
16d00 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e  on is an SQL fun
16d10 63 74 69 6f 6e 20 28 54 4b 5f 46 55 4e 43 54 49  ction (TK_FUNCTI
16d20 4f 4e 29 2c 0a 2a 2a 20 74 68 65 6e 20 45 78 70  ON),.** then Exp
16d30 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73  r.token contains
16d40 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
16d50 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a   function..**.**
16d60 20 45 78 70 72 2e 70 52 69 67 68 74 20 61 6e 64   Expr.pRight and
16d70 20 45 78 70 72 2e 70 4c 65 66 74 20 61 72 65 20   Expr.pLeft are 
16d80 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67  the left and rig
16d90 68 74 20 73 75 62 65 78 70 72 65 73 73 69 6f 6e  ht subexpression
16da0 73 20 6f 66 20 61 0a 2a 2a 20 62 69 6e 61 72 79  s of a.** binary
16db0 20 6f 70 65 72 61 74 6f 72 2e 20 45 69 74 68 65   operator. Eithe
16dc0 72 20 6f 72 20 62 6f 74 68 20 6d 61 79 20 62 65  r or both may be
16dd0 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78 70   NULL..**.** Exp
16de0 72 2e 78 2e 70 4c 69 73 74 20 69 73 20 61 20 6c  r.x.pList is a l
16df0 69 73 74 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ist of arguments
16e00 20 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69   if the expressi
16e10 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e  on is an SQL fun
16e20 63 74 69 6f 6e 2c 0a 2a 2a 20 61 20 43 41 53 45  ction,.** a CASE
16e30 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 72 20 61   expression or a
16e40 6e 20 49 4e 20 65 78 70 72 65 73 73 69 6f 6e 20  n IN expression 
16e50 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68  of the form "<lh
16e60 73 3e 20 49 4e 20 28 3c 79 3e 2c 20 3c 7a 3e 2e  s> IN (<y>, <z>.
16e70 2e 2e 29 22 2e 0a 2a 2a 20 45 78 70 72 2e 78 2e  ..)"..** Expr.x.
16e80 70 53 65 6c 65 63 74 20 69 73 20 75 73 65 64 20  pSelect is used 
16e90 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  if the expressio
16ea0 6e 20 69 73 20 61 20 73 75 62 2d 73 65 6c 65 63  n is a sub-selec
16eb0 74 20 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69  t or an expressi
16ec0 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 66 6f 72  on of.** the for
16ed0 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 53 45 4c  m "<lhs> IN (SEL
16ee0 45 43 54 20 2e 2e 2e 29 22 2e 20 49 66 20 74 68  ECT ...)". If th
16ef0 65 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 62  e EP_xIsSelect b
16f00 69 74 20 69 73 20 73 65 74 20 69 6e 20 74 68 65  it is set in the
16f10 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 6d  .** Expr.flags m
16f20 61 73 6b 2c 20 74 68 65 6e 20 45 78 70 72 2e 78  ask, then Expr.x
16f30 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69  .pSelect is vali
16f40 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 45 78  d. Otherwise, Ex
16f50 70 72 2e 78 2e 70 4c 69 73 74 20 69 73 0a 2a 2a  pr.x.pList is.**
16f60 20 76 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e   valid..**.** An
16f70 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74   expression of t
16f80 68 65 20 66 6f 72 6d 20 49 44 20 6f 72 20 49 44  he form ID or ID
16f90 2e 49 44 20 72 65 66 65 72 73 20 74 6f 20 61 20  .ID refers to a 
16fa0 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 74 61 62 6c  column in a tabl
16fb0 65 2e 0a 2a 2a 20 46 6f 72 20 73 75 63 68 20 65  e..** For such e
16fc0 78 70 72 65 73 73 69 6f 6e 73 2c 20 45 78 70 72  xpressions, Expr
16fd0 2e 6f 70 20 69 73 20 73 65 74 20 74 6f 20 54 4b  .op is set to TK
16fe0 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 45 78 70 72  _COLUMN and Expr
16ff0 2e 69 54 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68  .iTable is.** th
17000 65 20 69 6e 74 65 67 65 72 20 63 75 72 73 6f 72  e integer cursor
17010 20 6e 75 6d 62 65 72 20 6f 66 20 61 20 56 44 42   number of a VDB
17020 45 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e  E cursor pointin
17030 67 20 74 6f 20 74 68 61 74 20 74 61 62 6c 65 20  g to that table 
17040 61 6e 64 0a 2a 2a 20 45 78 70 72 2e 69 43 6f 6c  and.** Expr.iCol
17050 75 6d 6e 20 69 73 20 74 68 65 20 63 6f 6c 75 6d  umn is the colum
17060 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65  n number for the
17070 20 73 70 65 63 69 66 69 63 20 63 6f 6c 75 6d 6e   specific column
17080 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 65 78 70  .  If the.** exp
17090 72 65 73 73 69 6f 6e 20 69 73 20 75 73 65 64 20  ression is used 
170a0 61 73 20 61 20 72 65 73 75 6c 74 20 69 6e 20 61  as a result in a
170b0 6e 20 61 67 67 72 65 67 61 74 65 20 53 45 4c 45  n aggregate SELE
170c0 43 54 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20  CT, then the.** 
170d0 76 61 6c 75 65 20 69 73 20 61 6c 73 6f 20 73 74  value is also st
170e0 6f 72 65 64 20 69 6e 20 74 68 65 20 45 78 70 72  ored in the Expr
170f0 2e 69 41 67 67 20 63 6f 6c 75 6d 6e 20 69 6e 20  .iAgg column in 
17100 74 68 65 20 61 67 67 72 65 67 61 74 65 20 73 6f  the aggregate so
17110 20 74 68 61 74 0a 2a 2a 20 69 74 20 63 61 6e 20   that.** it can 
17120 62 65 20 61 63 63 65 73 73 65 64 20 61 66 74 65  be accessed afte
17130 72 20 61 6c 6c 20 61 67 67 72 65 67 61 74 65 73  r all aggregates
17140 20 61 72 65 20 63 6f 6d 70 75 74 65 64 2e 0a 2a   are computed..*
17150 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72  *.** If the expr
17160 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 75 6e 62  ession is an unb
17170 6f 75 6e 64 20 76 61 72 69 61 62 6c 65 20 6d 61  ound variable ma
17180 72 6b 65 72 20 28 61 20 71 75 65 73 74 69 6f 6e  rker (a question
17190 20 6d 61 72 6b 0a 2a 2a 20 63 68 61 72 61 63 74   mark.** charact
171a0 65 72 20 27 3f 27 20 69 6e 20 74 68 65 20 6f 72  er '?' in the or
171b0 69 67 69 6e 61 6c 20 53 51 4c 29 20 74 68 65 6e  iginal SQL) then
171c0 20 74 68 65 20 45 78 70 72 2e 69 54 61 62 6c 65   the Expr.iTable
171d0 20 68 6f 6c 64 73 20 74 68 65 20 69 6e 64 65 78   holds the index
171e0 0a 2a 2a 20 6e 75 6d 62 65 72 20 66 6f 72 20 74  .** number for t
171f0 68 61 74 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a  hat variable..**
17200 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65  .** If the expre
17210 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62 71 75  ssion is a subqu
17220 65 72 79 20 74 68 65 6e 20 45 78 70 72 2e 69 43  ery then Expr.iC
17230 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 6e 20 69  olumn holds an i
17240 6e 74 65 67 65 72 0a 2a 2a 20 72 65 67 69 73 74  nteger.** regist
17250 65 72 20 6e 75 6d 62 65 72 20 63 6f 6e 74 61 69  er number contai
17260 6e 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74 20  ning the result 
17270 6f 66 20 74 68 65 20 73 75 62 71 75 65 72 79 2e  of the subquery.
17280 20 20 49 66 20 74 68 65 0a 2a 2a 20 73 75 62 71    If the.** subq
17290 75 65 72 79 20 67 69 76 65 73 20 61 20 63 6f 6e  uery gives a con
172a0 73 74 61 6e 74 20 72 65 73 75 6c 74 2c 20 74 68  stant result, th
172b0 65 6e 20 69 54 61 62 6c 65 20 69 73 20 2d 31 2e  en iTable is -1.
172c0 20 20 49 66 20 74 68 65 20 73 75 62 71 75 65 72    If the subquer
172d0 79 0a 2a 2a 20 67 69 76 65 73 20 61 20 64 69 66  y.** gives a dif
172e0 66 65 72 65 6e 74 20 61 6e 73 77 65 72 20 61 74  ferent answer at
172f0 20 64 69 66 66 65 72 65 6e 74 20 74 69 6d 65 73   different times
17300 20 64 75 72 69 6e 67 20 73 74 61 74 65 6d 65 6e   during statemen
17310 74 20 70 72 6f 63 65 73 73 69 6e 67 0a 2a 2a 20  t processing.** 
17320 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20 74  then iTable is t
17330 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 61 20  he address of a 
17340 73 75 62 72 6f 75 74 69 6e 65 20 74 68 61 74 20  subroutine that 
17350 63 6f 6d 70 75 74 65 73 20 74 68 65 20 73 75 62  computes the sub
17360 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  query..**.** If 
17370 74 68 65 20 45 78 70 72 20 69 73 20 6f 66 20 74  the Expr is of t
17380 79 70 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 61  ype OP_Column, a
17390 6e 64 20 74 68 65 20 74 61 62 6c 65 20 69 74 20  nd the table it 
173a0 69 73 20 73 65 6c 65 63 74 69 6e 67 20 66 72 6f  is selecting fro
173b0 6d 0a 2a 2a 20 69 73 20 61 20 64 69 73 6b 20 74  m.** is a disk t
173c0 61 62 6c 65 20 6f 72 20 74 68 65 20 22 6f 6c 64  able or the "old
173d0 2e 2a 22 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  .*" pseudo-table
173e0 2c 20 74 68 65 6e 20 70 54 61 62 20 70 6f 69 6e  , then pTab poin
173f0 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 63 6f 72  ts to the.** cor
17400 72 65 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c 65  responding table
17410 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a   definition..**.
17420 2a 2a 20 41 4c 4c 4f 43 41 54 49 4f 4e 20 4e 4f  ** ALLOCATION NO
17430 54 45 53 3a 0a 2a 2a 0a 2a 2a 20 45 78 70 72 20  TES:.**.** Expr 
17440 6f 62 6a 65 63 74 73 20 63 61 6e 20 75 73 65 20  objects can use 
17450 61 20 6c 6f 74 20 6f 66 20 6d 65 6d 6f 72 79 20  a lot of memory 
17460 73 70 61 63 65 20 69 6e 20 64 61 74 61 62 61 73  space in databas
17470 65 20 73 63 68 65 6d 61 2e 20 20 54 6f 0a 2a 2a  e schema.  To.**
17480 20 68 65 6c 70 20 72 65 64 75 63 65 20 6d 65 6d   help reduce mem
17490 6f 72 79 20 72 65 71 75 69 72 65 6d 65 6e 74 73  ory requirements
174a0 2c 20 73 6f 6d 65 74 69 6d 65 73 20 61 6e 20 45  , sometimes an E
174b0 78 70 72 20 6f 62 6a 65 63 74 20 77 69 6c 6c 20  xpr object will 
174c0 62 65 0a 2a 2a 20 74 72 75 6e 63 61 74 65 64 2e  be.** truncated.
174d0 20 20 41 6e 64 20 74 6f 20 72 65 64 75 63 65 20    And to reduce 
174e0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65  the number of me
174f0 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  mory allocations
17500 2c 20 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20 74  , sometimes.** t
17510 77 6f 20 6f 72 20 6d 6f 72 65 20 45 78 70 72 20  wo or more Expr 
17520 6f 62 6a 65 63 74 73 20 77 69 6c 6c 20 62 65 20  objects will be 
17530 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67  stored in a sing
17540 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  le memory alloca
17550 74 69 6f 6e 2c 0a 2a 2a 20 74 6f 67 65 74 68 65  tion,.** togethe
17560 72 20 77 69 74 68 20 45 78 70 72 2e 7a 54 6f 6b  r with Expr.zTok
17570 65 6e 20 73 74 72 69 6e 67 73 2e 0a 2a 2a 0a 2a  en strings..**.*
17580 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65 64 75  * If the EP_Redu
17590 63 65 64 20 61 6e 64 20 45 50 5f 54 6f 6b 65 6e  ced and EP_Token
175a0 4f 6e 6c 79 20 66 6c 61 67 73 20 61 72 65 20 73  Only flags are s
175b0 65 74 20 77 68 65 6e 0a 2a 2a 20 61 6e 20 45 78  et when.** an Ex
175c0 70 72 20 6f 62 6a 65 63 74 20 69 73 20 74 72 75  pr object is tru
175d0 6e 63 61 74 65 64 2e 20 20 57 68 65 6e 20 45 50  ncated.  When EP
175e0 5f 52 65 64 75 63 65 64 20 69 73 20 73 65 74 2c  _Reduced is set,
175f0 20 74 68 65 6e 20 61 6c 6c 0a 2a 2a 20 74 68 65   then all.** the
17600 20 63 68 69 6c 64 20 45 78 70 72 20 6f 62 6a 65   child Expr obje
17610 63 74 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e  cts in the Expr.
17620 70 4c 65 66 74 20 61 6e 64 20 45 78 70 72 2e 70  pLeft and Expr.p
17630 52 69 67 68 74 20 73 75 62 74 72 65 65 73 0a 2a  Right subtrees.*
17640 2a 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20  * are contained 
17650 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20  within the same 
17660 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
17670 6e 2e 20 20 4e 6f 74 65 2c 20 68 6f 77 65 76 65  n.  Note, howeve
17680 72 2c 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 73  r, that.** the s
17690 75 62 74 72 65 65 73 20 69 6e 20 45 78 70 72 2e  ubtrees in Expr.
176a0 78 2e 70 4c 69 73 74 20 6f 72 20 45 78 70 72 2e  x.pList or Expr.
176b0 78 2e 70 53 65 6c 65 63 74 20 61 72 65 20 61 6c  x.pSelect are al
176c0 77 61 79 73 20 73 65 70 61 72 61 74 65 6c 79 0a  ways separately.
176d0 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 72 65  ** allocated, re
176e0 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74  gardless of whet
176f0 68 65 72 20 6f 72 20 6e 6f 74 20 45 50 5f 52 65  her or not EP_Re
17700 64 75 63 65 64 20 69 73 20 73 65 74 2e 0a 2a 2f  duced is set..*/
17710 0a 73 74 72 75 63 74 20 45 78 70 72 20 7b 0a 20  .struct Expr {. 
17720 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20   u8 op;         
17730 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 65 72 61          /* Opera
17740 74 69 6f 6e 20 70 65 72 66 6f 72 6d 65 64 20 62  tion performed b
17750 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 20  y this node */. 
17760 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20   char affinity; 
17770 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61          /* The a
17780 66 66 69 6e 69 74 79 20 6f 66 20 74 68 65 20 63  ffinity of the c
17790 6f 6c 75 6d 6e 20 6f 72 20 30 20 69 66 20 6e 6f  olumn or 0 if no
177a0 74 20 61 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  t a column */.  
177b0 75 33 32 20 66 6c 61 67 73 3b 20 20 20 20 20 20  u32 flags;      
177c0 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75         /* Variou
177d0 73 20 66 6c 61 67 73 2e 20 20 45 50 5f 2a 20 53  s flags.  EP_* S
177e0 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 75 6e  ee below */.  un
177f0 69 6f 6e 20 7b 0a 20 20 20 20 63 68 61 72 20 2a  ion {.    char *
17800 7a 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20  zToken;         
17810 20 2f 2a 20 54 6f 6b 65 6e 20 76 61 6c 75 65 2e   /* Token value.
17820 20 5a 65 72 6f 20 74 65 72 6d 69 6e 61 74 65 64   Zero terminated
17830 20 61 6e 64 20 64 65 71 75 6f 74 65 64 20 2a 2f   and dequoted */
17840 0a 20 20 20 20 69 6e 74 20 69 56 61 6c 75 65 3b  .    int iValue;
17850 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
17860 6f 6e 2d 6e 65 67 61 74 69 76 65 20 69 6e 74 65  on-negative inte
17870 67 65 72 20 76 61 6c 75 65 20 69 66 20 45 50 5f  ger value if EP_
17880 49 6e 74 56 61 6c 75 65 20 2a 2f 0a 20 20 7d 20  IntValue */.  } 
17890 75 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20  u;..  /* If the 
178a0 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61  EP_TokenOnly fla
178b0 67 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 20  g is set in the 
178c0 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c  Expr.flags mask,
178d0 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70   then no.  ** sp
178e0 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64  ace is allocated
178f0 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64 73 20   for the fields 
17900 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e 74  below this point
17910 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a  . An attempt to.
17920 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68 65 6d    ** access them
17930 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20   will result in 
17940 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20 6d 61  a segfault or ma
17950 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a  lfunction..  ***
17960 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17970 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17980 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17990 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
179a0 2a 2a 2f 0a 0a 20 20 45 78 70 72 20 2a 70 4c 65  **/..  Expr *pLe
179b0 66 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ft;           /*
179c0 20 4c 65 66 74 20 73 75 62 6e 6f 64 65 20 2a 2f   Left subnode */
179d0 0a 20 20 45 78 70 72 20 2a 70 52 69 67 68 74 3b  .  Expr *pRight;
179e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 69 67            /* Rig
179f0 68 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20  ht subnode */.  
17a00 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 45 78 70 72  union {.    Expr
17a10 4c 69 73 74 20 2a 70 4c 69 73 74 3b 20 20 20 20  List *pList;    
17a20 20 2f 2a 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49   /* op = IN, EXI
17a30 53 54 53 2c 20 53 45 4c 45 43 54 2c 20 43 41 53  STS, SELECT, CAS
17a40 45 2c 20 46 55 4e 43 54 49 4f 4e 2c 20 42 45 54  E, FUNCTION, BET
17a50 57 45 45 4e 20 2a 2f 0a 20 20 20 20 53 65 6c 65  WEEN */.    Sele
17a60 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20  ct *pSelect;    
17a70 20 2f 2a 20 45 50 5f 78 49 73 53 65 6c 65 63 74   /* EP_xIsSelect
17a80 20 61 6e 64 20 6f 70 20 3d 20 49 4e 2c 20 45 58   and op = IN, EX
17a90 49 53 54 53 2c 20 53 45 4c 45 43 54 20 2a 2f 0a  ISTS, SELECT */.
17aa0 20 20 7d 20 78 3b 0a 0a 20 20 2f 2a 20 49 66 20    } x;..  /* If 
17ab0 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 66  the EP_Reduced f
17ac0 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 74 68  lag is set in th
17ad0 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73  e Expr.flags mas
17ae0 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20  k, then no.  ** 
17af0 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74  space is allocat
17b00 65 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64  ed for the field
17b10 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69  s below this poi
17b20 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74  nt. An attempt t
17b30 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68  o.  ** access th
17b40 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69  em will result i
17b50 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20  n a segfault or 
17b60 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a  malfunction..  *
17b70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17b80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17b90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17ba0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17bb0 2a 2a 2a 2a 2f 0a 0a 23 69 66 20 53 51 4c 49 54  ****/..#if SQLIT
17bc0 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48  E_MAX_EXPR_DEPTH
17bd0 3e 30 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74  >0.  int nHeight
17be0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48  ;           /* H
17bf0 65 69 67 68 74 20 6f 66 20 74 68 65 20 74 72 65  eight of the tre
17c00 65 20 68 65 61 64 65 64 20 62 79 20 74 68 69 73  e headed by this
17c10 20 6e 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a   node */.#endif.
17c20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20    int iTable;   
17c30 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43           /* TK_C
17c40 4f 4c 55 4d 4e 3a 20 63 75 72 73 6f 72 20 6e 75  OLUMN: cursor nu
17c50 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 20 68 6f  mber of table ho
17c60 6c 64 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20 20 20  lding column.   
17c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c80 20 20 20 20 20 20 2a 2a 20 54 4b 5f 52 45 47 49        ** TK_REGI
17c90 53 54 45 52 3a 20 72 65 67 69 73 74 65 72 20 6e  STER: register n
17ca0 75 6d 62 65 72 0a 20 20 20 20 20 20 20 20 20 20  umber.          
17cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
17cc0 2a 20 54 4b 5f 54 52 49 47 47 45 52 3a 20 31 20  * TK_TRIGGER: 1 
17cd0 2d 3e 20 6e 65 77 2c 20 30 20 2d 3e 20 6f 6c 64  -> new, 0 -> old
17ce0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17cf0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 45 50 5f            ** EP_
17d00 55 6e 6c 69 6b 65 6c 79 3a 20 20 31 33 34 32 31  Unlikely:  13421
17d10 37 37 32 38 20 74 69 6d 65 73 20 6c 69 6b 65 6c  7728 times likel
17d20 69 68 6f 6f 64 0a 20 20 20 20 20 20 20 20 20 20  ihood.          
17d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
17d40 2a 20 54 4b 5f 53 45 4c 45 43 54 3a 20 31 73 74  * TK_SELECT: 1st
17d50 20 72 65 67 69 73 74 65 72 20 6f 66 20 72 65 73   register of res
17d60 75 6c 74 20 76 65 63 74 6f 72 20 2a 2f 0a 20 20  ult vector */.  
17d70 79 6e 56 61 72 20 69 43 6f 6c 75 6d 6e 3b 20 20  ynVar iColumn;  
17d80 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c         /* TK_COL
17d90 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 69 6e 64 65  UMN: column inde
17da0 78 2e 20 20 2d 31 20 66 6f 72 20 72 6f 77 69 64  x.  -1 for rowid
17db0 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17dc0 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
17dd0 5f 56 41 52 49 41 42 4c 45 3a 20 76 61 72 69 61  _VARIABLE: varia
17de0 62 6c 65 20 6e 75 6d 62 65 72 20 28 61 6c 77 61  ble number (alwa
17df0 79 73 20 3e 3d 20 31 29 2e 0a 20 20 20 20 20 20  ys >= 1)..      
17e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e10 20 20 20 2a 2a 20 54 4b 5f 53 45 4c 45 43 54 5f     ** TK_SELECT_
17e20 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 6f  COLUMN: column o
17e30 66 20 74 68 65 20 72 65 73 75 6c 74 20 76 65 63  f the result vec
17e40 74 6f 72 20 2a 2f 0a 20 20 69 31 36 20 69 41 67  tor */.  i16 iAg
17e50 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
17e60 2f 2a 20 57 68 69 63 68 20 65 6e 74 72 79 20 69  /* Which entry i
17e70 6e 20 70 41 67 67 49 6e 66 6f 2d 3e 61 43 6f 6c  n pAggInfo->aCol
17e80 5b 5d 20 6f 72 20 2d 3e 61 46 75 6e 63 5b 5d 20  [] or ->aFunc[] 
17e90 2a 2f 0a 20 20 69 31 36 20 69 52 69 67 68 74 4a  */.  i16 iRightJ
17ea0 6f 69 6e 54 61 62 6c 65 3b 20 20 20 2f 2a 20 49  oinTable;   /* I
17eb0 66 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c 20 74  f EP_FromJoin, t
17ec0 68 65 20 72 69 67 68 74 20 74 61 62 6c 65 20 6f  he right table o
17ed0 66 20 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20  f the join */.  
17ee0 75 38 20 6f 70 32 3b 20 20 20 20 20 20 20 20 20  u8 op2;         
17ef0 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 52 45 47         /* TK_REG
17f00 49 53 54 45 52 3a 20 6f 72 69 67 69 6e 61 6c 20  ISTER: original 
17f10 76 61 6c 75 65 20 6f 66 20 45 78 70 72 2e 6f 70  value of Expr.op
17f20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17f30 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
17f40 43 4f 4c 55 4d 4e 3a 20 74 68 65 20 76 61 6c 75  COLUMN: the valu
17f50 65 20 6f 66 20 70 35 20 66 6f 72 20 4f 50 5f 43  e of p5 for OP_C
17f60 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20  olumn.          
17f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
17f80 2a 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f  * TK_AGG_FUNCTIO
17f90 4e 3a 20 6e 65 73 74 69 6e 67 20 64 65 70 74 68  N: nesting depth
17fa0 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70   */.  AggInfo *p
17fb0 41 67 67 49 6e 66 6f 3b 20 20 20 20 20 2f 2a 20  AggInfo;     /* 
17fc0 55 73 65 64 20 62 79 20 54 4b 5f 41 47 47 5f 43  Used by TK_AGG_C
17fd0 4f 4c 55 4d 4e 20 61 6e 64 20 54 4b 5f 41 47 47  OLUMN and TK_AGG
17fe0 5f 46 55 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20 54  _FUNCTION */.  T
17ff0 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
18000 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 66        /* Table f
18010 6f 72 20 54 4b 5f 43 4f 4c 55 4d 4e 20 65 78 70  or TK_COLUMN exp
18020 72 65 73 73 69 6f 6e 73 2e 20 2a 2f 0a 7d 3b 0a  ressions. */.};.
18030 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
18040 77 69 6e 67 20 61 72 65 20 74 68 65 20 6d 65 61  wing are the mea
18050 6e 69 6e 67 73 20 6f 66 20 62 69 74 73 20 69 6e  nings of bits in
18060 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20   the Expr.flags 
18070 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e  field..*/.#defin
18080 65 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20 30  e EP_FromJoin  0
18090 78 30 30 30 30 30 31 20 2f 2a 20 4f 72 69 67 69  x000001 /* Origi
180a0 6e 61 74 65 73 20 69 6e 20 4f 4e 2f 55 53 49 4e  nates in ON/USIN
180b0 47 20 63 6c 61 75 73 65 20 6f 66 20 6f 75 74 65  G clause of oute
180c0 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  r join */.#defin
180d0 65 20 45 50 5f 41 67 67 20 20 20 20 20 20 20 30  e EP_Agg       0
180e0 78 30 30 30 30 30 32 20 2f 2a 20 43 6f 6e 74 61  x000002 /* Conta
180f0 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  ins one or more 
18100 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
18110 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ons */.#define E
18120 50 5f 52 65 73 6f 6c 76 65 64 20 20 30 78 30 30  P_Resolved  0x00
18130 30 30 30 34 20 2f 2a 20 49 44 73 20 68 61 76 65  0004 /* IDs have
18140 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64 20 74   been resolved t
18150 6f 20 43 4f 4c 55 4d 4e 73 20 2a 2f 0a 23 64 65  o COLUMNs */.#de
18160 66 69 6e 65 20 45 50 5f 45 72 72 6f 72 20 20 20  fine EP_Error   
18170 20 20 30 78 30 30 30 30 30 38 20 2f 2a 20 45 78    0x000008 /* Ex
18180 70 72 65 73 73 69 6f 6e 20 63 6f 6e 74 61 69 6e  pression contain
18190 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 65 72  s one or more er
181a0 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rors */.#define 
181b0 45 50 5f 44 69 73 74 69 6e 63 74 20 20 30 78 30  EP_Distinct  0x0
181c0 30 30 30 31 30 20 2f 2a 20 41 67 67 72 65 67 61  00010 /* Aggrega
181d0 74 65 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68  te function with
181e0 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72   DISTINCT keywor
181f0 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  d */.#define EP_
18200 56 61 72 53 65 6c 65 63 74 20 30 78 30 30 30 30  VarSelect 0x0000
18210 32 30 20 2f 2a 20 70 53 65 6c 65 63 74 20 69 73  20 /* pSelect is
18220 20 63 6f 72 72 65 6c 61 74 65 64 2c 20 6e 6f 74   correlated, not
18230 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23 64 65   constant */.#de
18240 66 69 6e 65 20 45 50 5f 44 62 6c 51 75 6f 74 65  fine EP_DblQuote
18250 64 20 30 78 30 30 30 30 34 30 20 2f 2a 20 74 6f  d 0x000040 /* to
18260 6b 65 6e 2e 7a 20 77 61 73 20 6f 72 69 67 69 6e  ken.z was origin
18270 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e 22 20 2a 2f  ally in "..." */
18280 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 66 69  .#define EP_Infi
18290 78 46 75 6e 63 20 30 78 30 30 30 30 38 30 20 2f  xFunc 0x000080 /
182a0 2a 20 54 72 75 65 20 66 6f 72 20 61 6e 20 69 6e  * True for an in
182b0 66 69 78 20 66 75 6e 63 74 69 6f 6e 3a 20 4c 49  fix function: LI
182c0 4b 45 2c 20 47 4c 4f 42 2c 20 65 74 63 20 2a 2f  KE, GLOB, etc */
182d0 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 6f 6c 6c  .#define EP_Coll
182e0 61 74 65 20 20 20 30 78 30 30 30 31 30 30 20 2f  ate   0x000100 /
182f0 2a 20 54 72 65 65 20 63 6f 6e 74 61 69 6e 73 20  * Tree contains 
18300 61 20 54 4b 5f 43 4f 4c 4c 41 54 45 20 6f 70 65  a TK_COLLATE ope
18310 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65  rator */.#define
18320 20 45 50 5f 47 65 6e 65 72 69 63 20 20 20 30 78   EP_Generic   0x
18330 30 30 30 32 30 30 20 2f 2a 20 49 67 6e 6f 72 65  000200 /* Ignore
18340 20 43 4f 4c 4c 41 54 45 20 6f 72 20 61 66 66 69   COLLATE or affi
18350 6e 69 74 79 20 6f 6e 20 74 68 69 73 20 74 72 65  nity on this tre
18360 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  e */.#define EP_
18370 49 6e 74 56 61 6c 75 65 20 20 30 78 30 30 30 34  IntValue  0x0004
18380 30 30 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61  00 /* Integer va
18390 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e  lue contained in
183a0 20 75 2e 69 56 61 6c 75 65 20 2a 2f 0a 23 64 65   u.iValue */.#de
183b0 66 69 6e 65 20 45 50 5f 78 49 73 53 65 6c 65 63  fine EP_xIsSelec
183c0 74 20 30 78 30 30 30 38 30 30 20 2f 2a 20 78 2e  t 0x000800 /* x.
183d0 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64  pSelect is valid
183e0 20 28 6f 74 68 65 72 77 69 73 65 20 78 2e 70 4c   (otherwise x.pL
183f0 69 73 74 20 69 73 29 20 2a 2f 0a 23 64 65 66 69  ist is) */.#defi
18400 6e 65 20 45 50 5f 53 6b 69 70 20 20 20 20 20 20  ne EP_Skip      
18410 30 78 30 30 31 30 30 30 20 2f 2a 20 43 4f 4c 4c  0x001000 /* COLL
18420 41 54 45 2c 20 41 53 2c 20 6f 72 20 55 4e 4c 49  ATE, AS, or UNLI
18430 4b 45 4c 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20  KELY */.#define 
18440 45 50 5f 52 65 64 75 63 65 64 20 20 20 30 78 30  EP_Reduced   0x0
18450 30 32 30 30 30 20 2f 2a 20 45 78 70 72 20 73 74  02000 /* Expr st
18460 72 75 63 74 20 45 58 50 52 5f 52 45 44 55 43 45  ruct EXPR_REDUCE
18470 44 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79  DSIZE bytes only
18480 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 54   */.#define EP_T
18490 6f 6b 65 6e 4f 6e 6c 79 20 30 78 30 30 34 30 30  okenOnly 0x00400
184a0 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74  0 /* Expr struct
184b0 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53   EXPR_TOKENONLYS
184c0 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a  IZE bytes only *
184d0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 74 61  /.#define EP_Sta
184e0 74 69 63 20 20 20 20 30 78 30 30 38 30 30 30 20  tic    0x008000 
184f0 2f 2a 20 48 65 6c 64 20 69 6e 20 6d 65 6d 6f 72  /* Held in memor
18500 79 20 6e 6f 74 20 6f 62 74 61 69 6e 65 64 20 66  y not obtained f
18510 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a  rom malloc() */.
18520 23 64 65 66 69 6e 65 20 45 50 5f 4d 65 6d 54 6f  #define EP_MemTo
18530 6b 65 6e 20 20 30 78 30 31 30 30 30 30 20 2f 2a  ken  0x010000 /*
18540 20 4e 65 65 64 20 74 6f 20 73 71 6c 69 74 65 33   Need to sqlite3
18550 44 62 46 72 65 65 28 29 20 45 78 70 72 2e 7a 54  DbFree() Expr.zT
18560 6f 6b 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  oken */.#define 
18570 45 50 5f 4e 6f 52 65 64 75 63 65 20 20 30 78 30  EP_NoReduce  0x0
18580 32 30 30 30 30 20 2f 2a 20 43 61 6e 6e 6f 74 20  20000 /* Cannot 
18590 45 58 50 52 44 55 50 5f 52 45 44 55 43 45 20 74  EXPRDUP_REDUCE t
185a0 68 69 73 20 45 78 70 72 20 2a 2f 0a 23 64 65 66  his Expr */.#def
185b0 69 6e 65 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 20  ine EP_Unlikely 
185c0 20 30 78 30 34 30 30 30 30 20 2f 2a 20 75 6e 6c   0x040000 /* unl
185d0 69 6b 65 6c 79 28 29 20 6f 72 20 6c 69 6b 65 6c  ikely() or likel
185e0 69 68 6f 6f 64 28 29 20 66 75 6e 63 74 69 6f 6e  ihood() function
185f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43   */.#define EP_C
18600 6f 6e 73 74 46 75 6e 63 20 30 78 30 38 30 30 30  onstFunc 0x08000
18610 30 20 2f 2a 20 41 20 53 51 4c 49 54 45 5f 46 55  0 /* A SQLITE_FU
18620 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 6f 72 20 5f  NC_CONSTANT or _
18630 53 4c 4f 43 48 4e 47 20 66 75 6e 63 74 69 6f 6e  SLOCHNG function
18640 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43   */.#define EP_C
18650 61 6e 42 65 4e 75 6c 6c 20 30 78 31 30 30 30 30  anBeNull 0x10000
18660 30 20 2f 2a 20 43 61 6e 20 62 65 20 6e 75 6c 6c  0 /* Can be null
18670 20 64 65 73 70 69 74 65 20 4e 4f 54 20 4e 55 4c   despite NOT NUL
18680 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a  L constraint */.
18690 23 64 65 66 69 6e 65 20 45 50 5f 53 75 62 71 75  #define EP_Subqu
186a0 65 72 79 20 20 30 78 32 30 30 30 30 30 20 2f 2a  ery  0x200000 /*
186b0 20 54 72 65 65 20 63 6f 6e 74 61 69 6e 73 20 61   Tree contains a
186c0 20 54 4b 5f 53 45 4c 45 43 54 20 6f 70 65 72 61   TK_SELECT opera
186d0 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  tor */.#define E
186e0 50 5f 41 6c 69 61 73 20 20 20 20 20 30 78 34 30  P_Alias     0x40
186f0 30 30 30 30 20 2f 2a 20 49 73 20 61 6e 20 61 6c  0000 /* Is an al
18700 69 61 73 20 66 6f 72 20 61 20 72 65 73 75 6c 74  ias for a result
18710 20 73 65 74 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23   set column */.#
18720 64 65 66 69 6e 65 20 45 50 5f 4c 65 61 66 20 20  define EP_Leaf  
18730 20 20 20 20 30 78 38 30 30 30 30 30 20 2f 2a 20      0x800000 /* 
18740 45 78 70 72 2e 70 4c 65 66 74 2c 20 2e 70 52 69  Expr.pLeft, .pRi
18750 67 68 74 2c 20 2e 75 2e 70 53 65 6c 65 63 74 20  ght, .u.pSelect 
18760 61 6c 6c 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a  all NULL */../*.
18770 2a 2a 20 43 6f 6d 62 69 6e 61 74 69 6f 6e 73 20  ** Combinations 
18780 6f 66 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 45  of two or more E
18790 50 5f 2a 20 66 6c 61 67 73 0a 2a 2f 0a 23 64 65  P_* flags.*/.#de
187a0 66 69 6e 65 20 45 50 5f 50 72 6f 70 61 67 61 74  fine EP_Propagat
187b0 65 20 28 45 50 5f 43 6f 6c 6c 61 74 65 7c 45 50  e (EP_Collate|EP
187c0 5f 53 75 62 71 75 65 72 79 29 20 2f 2a 20 50 72  _Subquery) /* Pr
187d0 6f 70 61 67 61 74 65 20 74 68 65 73 65 20 62 69  opagate these bi
187e0 74 73 20 75 70 20 74 72 65 65 20 2a 2f 0a 0a 2f  ts up tree */../
187f0 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f  *.** These macro
18800 73 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  s can be used to
18810 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63   test, set, or c
18820 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74 68 65  lear bits in the
18830 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 66  .** Expr.flags f
18840 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ield..*/.#define
18850 20 45 78 70 72 48 61 73 50 72 6f 70 65 72 74 79   ExprHasProperty
18860 28 45 2c 50 29 20 20 20 20 20 28 28 28 45 29 2d  (E,P)     (((E)-
18870 3e 66 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a  >flags&(P))!=0).
18880 23 64 65 66 69 6e 65 20 45 78 70 72 48 61 73 41  #define ExprHasA
18890 6c 6c 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20  llProperty(E,P) 
188a0 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50   (((E)->flags&(P
188b0 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65  ))==(P)).#define
188c0 20 45 78 70 72 53 65 74 50 72 6f 70 65 72 74 79   ExprSetProperty
188d0 28 45 2c 50 29 20 20 20 20 20 28 45 29 2d 3e 66  (E,P)     (E)->f
188e0 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e  lags|=(P).#defin
188f0 65 20 45 78 70 72 43 6c 65 61 72 50 72 6f 70 65  e ExprClearPrope
18900 72 74 79 28 45 2c 50 29 20 20 20 28 45 29 2d 3e  rty(E,P)   (E)->
18910 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 20  flags&=~(P)../* 
18920 54 68 65 20 45 78 70 72 53 65 74 56 56 41 50 72  The ExprSetVVAPr
18930 6f 70 65 72 74 79 28 29 20 6d 61 63 72 6f 20 69  operty() macro i
18940 73 20 75 73 65 64 20 66 6f 72 20 56 65 72 69 66  s used for Verif
18950 69 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74  ication, Validat
18960 69 6f 6e 2c 0a 2a 2a 20 61 6e 64 20 41 63 63 72  ion,.** and Accr
18970 65 64 69 74 61 74 69 6f 6e 20 6f 6e 6c 79 2e 20  editation only. 
18980 20 49 74 20 77 6f 72 6b 73 20 6c 69 6b 65 20 45   It works like E
18990 78 70 72 53 65 74 50 72 6f 70 65 72 74 79 28 29  xprSetProperty()
189a0 20 64 75 72 69 6e 67 20 56 56 41 0a 2a 2a 20 70   during VVA.** p
189b0 72 6f 63 65 73 73 65 73 20 62 75 74 20 69 73 20  rocesses but is 
189c0 61 20 6e 6f 2d 6f 70 20 66 6f 72 20 64 65 6c 69  a no-op for deli
189d0 76 65 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  very..*/.#ifdef 
189e0 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 64  SQLITE_DEBUG.# d
189f0 65 66 69 6e 65 20 45 78 70 72 53 65 74 56 56 41  efine ExprSetVVA
18a00 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28  Property(E,P)  (
18a10 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23  E)->flags|=(P).#
18a20 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 45 78  else.# define Ex
18a30 70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79  prSetVVAProperty
18a40 28 45 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  (E,P).#endif../*
18a50 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65  .** Macros to de
18a60 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d 62  termine the numb
18a70 65 72 20 6f 66 20 62 79 74 65 73 20 72 65 71 75  er of bytes requ
18a80 69 72 65 64 20 62 79 20 61 20 6e 6f 72 6d 61 6c  ired by a normal
18a90 20 45 78 70 72 0a 2a 2a 20 73 74 72 75 63 74 2c   Expr.** struct,
18aa0 20 61 6e 20 45 78 70 72 20 73 74 72 75 63 74 20   an Expr struct 
18ab0 77 69 74 68 20 74 68 65 20 45 50 5f 52 65 64 75  with the EP_Redu
18ac0 63 65 64 20 66 6c 61 67 20 73 65 74 20 69 6e 20  ced flag set in 
18ad0 45 78 70 72 2e 66 6c 61 67 73 0a 2a 2a 20 61 6e  Expr.flags.** an
18ae0 64 20 61 6e 20 45 78 70 72 20 73 74 72 75 63 74  d an Expr struct
18af0 20 77 69 74 68 20 74 68 65 20 45 50 5f 54 6f 6b   with the EP_Tok
18b00 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 73 65 74 2e  enOnly flag set.
18b10 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52  .*/.#define EXPR
18b20 5f 46 55 4c 4c 53 49 5a 45 20 20 20 20 20 20 20  _FULLSIZE       
18b30 20 20 20 20 73 69 7a 65 6f 66 28 45 78 70 72 29      sizeof(Expr)
18b40 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 75             /* Fu
18b50 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23 64 65 66 69  ll size */.#defi
18b60 6e 65 20 45 58 50 52 5f 52 45 44 55 43 45 44 53  ne EXPR_REDUCEDS
18b70 49 5a 45 20 20 20 20 20 20 20 20 6f 66 66 73 65  IZE        offse
18b80 74 6f 66 28 45 78 70 72 2c 69 54 61 62 6c 65 29  tof(Expr,iTable)
18b90 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65 61 74    /* Common feat
18ba0 75 72 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ures */.#define 
18bb0 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49  EXPR_TOKENONLYSI
18bc0 5a 45 20 20 20 20 20 20 6f 66 66 73 65 74 6f 66  ZE      offsetof
18bd0 28 45 78 70 72 2c 70 4c 65 66 74 29 20 20 20 2f  (Expr,pLeft)   /
18be0 2a 20 46 65 77 65 72 20 66 65 61 74 75 72 65 73  * Fewer features
18bf0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73   */../*.** Flags
18c00 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20 73   passed to the s
18c10 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 29 20  qlite3ExprDup() 
18c20 66 75 6e 63 74 69 6f 6e 2e 20 53 65 65 20 74 68  function. See th
18c30 65 20 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e 74  e header comment
18c40 0a 2a 2a 20 61 62 6f 76 65 20 73 71 6c 69 74 65  .** above sqlite
18c50 33 45 78 70 72 44 75 70 28 29 20 66 6f 72 20 64  3ExprDup() for d
18c60 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69  etails..*/.#defi
18c70 6e 65 20 45 58 50 52 44 55 50 5f 52 45 44 55 43  ne EXPRDUP_REDUC
18c80 45 20 20 20 20 20 20 20 20 20 30 78 30 30 30 31  E         0x0001
18c90 20 20 2f 2a 20 55 73 65 64 20 72 65 64 75 63 65    /* Used reduce
18ca0 64 2d 73 69 7a 65 20 45 78 70 72 20 6e 6f 64 65  d-size Expr node
18cb0 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c 69  s */../*.** A li
18cc0 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e  st of expression
18cd0 73 2e 20 20 45 61 63 68 20 65 78 70 72 65 73 73  s.  Each express
18ce0 69 6f 6e 20 6d 61 79 20 6f 70 74 69 6f 6e 61 6c  ion may optional
18cf0 6c 79 20 68 61 76 65 20 61 0a 2a 2a 20 6e 61 6d  ly have a.** nam
18d00 65 2e 20 20 41 6e 20 65 78 70 72 2f 6e 61 6d 65  e.  An expr/name
18d10 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 63 61 6e   combination can
18d20 20 62 65 20 75 73 65 64 20 69 6e 20 73 65 76 65   be used in seve
18d30 72 61 6c 20 77 61 79 73 2c 20 73 75 63 68 0a 2a  ral ways, such.*
18d40 2a 20 61 73 20 74 68 65 20 6c 69 73 74 20 6f 66  * as the list of
18d50 20 22 65 78 70 72 20 41 53 20 49 44 22 20 66 69   "expr AS ID" fi
18d60 65 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 61  elds following a
18d70 20 22 53 45 4c 45 43 54 22 20 6f 72 20 69 6e 20   "SELECT" or in 
18d80 74 68 65 0a 2a 2a 20 6c 69 73 74 20 6f 66 20 22  the.** list of "
18d90 49 44 20 3d 20 65 78 70 72 22 20 69 74 65 6d 73  ID = expr" items
18da0 20 69 6e 20 61 6e 20 55 50 44 41 54 45 2e 20 20   in an UPDATE.  
18db0 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73  A list of expres
18dc0 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61 6c 73  sions can.** als
18dd0 6f 20 62 65 20 75 73 65 64 20 61 73 20 74 68 65  o be used as the
18de0 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 61 20 66   argument to a f
18df0 75 6e 63 74 69 6f 6e 2c 20 69 6e 20 77 68 69 63  unction, in whic
18e00 68 20 63 61 73 65 20 74 68 65 20 61 2e 7a 4e 61  h case the a.zNa
18e10 6d 65 0a 2a 2a 20 66 69 65 6c 64 20 69 73 20 6e  me.** field is n
18e20 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 42  ot used..**.** B
18e30 79 20 64 65 66 61 75 6c 74 20 74 68 65 20 45 78  y default the Ex
18e40 70 72 2e 7a 53 70 61 6e 20 66 69 65 6c 64 20 68  pr.zSpan field h
18e50 6f 6c 64 73 20 61 20 68 75 6d 61 6e 2d 72 65 61  olds a human-rea
18e60 64 61 62 6c 65 20 64 65 73 63 72 69 70 74 69 6f  dable descriptio
18e70 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 65 78 70 72  n of.** the expr
18e80 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75  ession that is u
18e90 73 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72  sed in the gener
18ea0 61 74 69 6f 6e 20 6f 66 20 65 72 72 6f 72 20 6d  ation of error m
18eb0 65 73 73 61 67 65 73 20 61 6e 64 0a 2a 2a 20 63  essages and.** c
18ec0 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e 20 20 49  olumn labels.  I
18ed0 6e 20 74 68 69 73 20 63 61 73 65 2c 20 45 78 70  n this case, Exp
18ee0 72 2e 7a 53 70 61 6e 20 69 73 20 74 79 70 69 63  r.zSpan is typic
18ef0 61 6c 6c 79 20 74 68 65 20 74 65 78 74 20 6f 66  ally the text of
18f00 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65 78 70   a.** column exp
18f10 72 65 73 73 69 6f 6e 20 61 73 20 69 74 20 65 78  ression as it ex
18f20 69 73 74 73 20 69 6e 20 61 20 53 45 4c 45 43 54  ists in a SELECT
18f30 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 48 6f 77   statement.  How
18f40 65 76 65 72 2c 20 69 66 0a 2a 2a 20 74 68 65 20  ever, if.** the 
18f50 62 53 70 61 6e 49 73 54 61 62 20 66 6c 61 67 20  bSpanIsTab flag 
18f60 69 73 20 73 65 74 2c 20 74 68 65 6e 20 7a 53 70  is set, then zSp
18f70 61 6e 20 69 73 20 6f 76 65 72 6c 6f 61 64 65 64  an is overloaded
18f80 20 74 6f 20 6d 65 61 6e 20 74 68 65 20 6e 61 6d   to mean the nam
18f90 65 0a 2a 2a 20 6f 66 20 74 68 65 20 72 65 73 75  e.** of the resu
18fa0 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65  lt column in the
18fb0 20 66 6f 72 6d 3a 20 44 41 54 41 42 41 53 45 2e   form: DATABASE.
18fc0 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20 20 54  TABLE.COLUMN.  T
18fd0 68 69 73 20 6c 61 74 65 72 0a 2a 2a 20 66 6f 72  his later.** for
18fe0 6d 20 69 73 20 75 73 65 64 20 66 6f 72 20 6e 61  m is used for na
18ff0 6d 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20 77 69  me resolution wi
19000 74 68 20 6e 65 73 74 65 64 20 46 52 4f 4d 20 63  th nested FROM c
19010 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73 74 72 75 63  lauses..*/.struc
19020 74 20 45 78 70 72 4c 69 73 74 20 7b 0a 20 20 69  t ExprList {.  i
19030 6e 74 20 6e 45 78 70 72 3b 20 20 20 20 20 20 20  nt nExpr;       
19040 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
19050 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 6f  of expressions o
19060 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20  n the list */.  
19070 73 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 5f  struct ExprList_
19080 69 74 65 6d 20 7b 20 2f 2a 20 46 6f 72 20 65 61  item { /* For ea
19090 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  ch expression in
190a0 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 20   the list */.   
190b0 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20   Expr *pExpr;   
190c0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
190d0 70 61 72 73 65 20 74 72 65 65 20 66 6f 72 20 74  parse tree for t
190e0 68 69 73 20 65 78 70 72 65 73 73 69 6f 6e 20 2a  his expression *
190f0 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d  /.    char *zNam
19100 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
19110 20 54 6f 6b 65 6e 20 61 73 73 6f 63 69 61 74 65   Token associate
19120 64 20 77 69 74 68 20 74 68 69 73 20 65 78 70 72  d with this expr
19130 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68  ession */.    ch
19140 61 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20  ar *zSpan;      
19150 20 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61        /* Origina
19160 6c 20 74 65 78 74 20 6f 66 20 74 68 65 20 65 78  l text of the ex
19170 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20  pression */.    
19180 75 38 20 73 6f 72 74 4f 72 64 65 72 3b 20 20 20  u8 sortOrder;   
19190 20 20 20 20 20 20 20 20 2f 2a 20 31 20 66 6f 72          /* 1 for
191a0 20 44 45 53 43 20 6f 72 20 30 20 66 6f 72 20 41   DESC or 0 for A
191b0 53 43 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e  SC */.    unsign
191c0 65 64 20 64 6f 6e 65 20 3a 31 3b 20 20 20 20 20  ed done :1;     
191d0 20 20 2f 2a 20 41 20 66 6c 61 67 20 74 6f 20 69    /* A flag to i
191e0 6e 64 69 63 61 74 65 20 77 68 65 6e 20 70 72 6f  ndicate when pro
191f0 63 65 73 73 69 6e 67 20 69 73 20 66 69 6e 69 73  cessing is finis
19200 68 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67  hed */.    unsig
19210 6e 65 64 20 62 53 70 61 6e 49 73 54 61 62 20 3a  ned bSpanIsTab :
19220 31 3b 20 2f 2a 20 7a 53 70 61 6e 20 68 6f 6c 64  1; /* zSpan hold
19230 73 20 44 42 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d  s DB.TABLE.COLUM
19240 4e 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  N */.    unsigne
19250 64 20 72 65 75 73 61 62 6c 65 20 3a 31 3b 20 20  d reusable :1;  
19260 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70   /* Constant exp
19270 72 65 73 73 69 6f 6e 20 69 73 20 72 65 75 73 61  ression is reusa
19280 62 6c 65 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e  ble */.    union
19290 20 7b 0a 20 20 20 20 20 20 73 74 72 75 63 74 20   {.      struct 
192a0 7b 0a 20 20 20 20 20 20 20 20 75 31 36 20 69 4f  {.        u16 iO
192b0 72 64 65 72 42 79 43 6f 6c 3b 20 20 20 20 20 20  rderByCol;      
192c0 2f 2a 20 46 6f 72 20 4f 52 44 45 52 20 42 59 2c  /* For ORDER BY,
192d0 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69   column number i
192e0 6e 20 72 65 73 75 6c 74 20 73 65 74 20 2a 2f 0a  n result set */.
192f0 20 20 20 20 20 20 20 20 75 31 36 20 69 41 6c 69          u16 iAli
19300 61 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  as;           /*
19310 20 49 6e 64 65 78 20 69 6e 74 6f 20 50 61 72 73   Index into Pars
19320 65 2e 61 41 6c 69 61 73 5b 5d 20 66 6f 72 20 7a  e.aAlias[] for z
19330 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 20 20 7d 20  Name */.      } 
19340 78 3b 0a 20 20 20 20 20 20 69 6e 74 20 69 43 6f  x;.      int iCo
19350 6e 73 74 45 78 70 72 52 65 67 3b 20 20 20 20 20  nstExprReg;     
19360 20 2f 2a 20 52 65 67 69 73 74 65 72 20 69 6e 20   /* Register in 
19370 77 68 69 63 68 20 45 78 70 72 20 76 61 6c 75 65  which Expr value
19380 20 69 73 20 63 61 63 68 65 64 20 2a 2f 0a 20 20   is cached */.  
19390 20 20 7d 20 75 3b 0a 20 20 7d 20 2a 61 3b 20 20    } u;.  } *a;  
193a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193b0 2f 2a 20 41 6c 6c 6f 63 20 61 20 70 6f 77 65 72  /* Alloc a power
193c0 20 6f 66 20 74 77 6f 20 67 72 65 61 74 65 72 20   of two greater 
193d0 6f 72 20 65 71 75 61 6c 20 74 6f 20 6e 45 78 70  or equal to nExp
193e0 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  r */.};../*.** A
193f0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
19400 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20  is structure is 
19410 75 73 65 64 20 62 79 20 74 68 65 20 70 61 72 73  used by the pars
19420 65 72 20 74 6f 20 72 65 63 6f 72 64 20 62 6f 74  er to record bot
19430 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 20 74  h.** the parse t
19440 72 65 65 20 66 6f 72 20 61 6e 20 65 78 70 72 65  ree for an expre
19450 73 73 69 6f 6e 20 61 6e 64 20 74 68 65 20 73 70  ssion and the sp
19460 61 6e 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74  an of input text
19470 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 72 65   for an.** expre
19480 73 73 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ssion..*/.struct
19490 20 45 78 70 72 53 70 61 6e 20 7b 0a 20 20 45 78   ExprSpan {.  Ex
194a0 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20  pr *pExpr;      
194b0 20 20 20 20 2f 2a 20 54 68 65 20 65 78 70 72 65      /* The expre
194c0 73 73 69 6f 6e 20 70 61 72 73 65 20 74 72 65 65  ssion parse tree
194d0 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
194e0 20 2a 7a 53 74 61 72 74 3b 20 20 20 2f 2a 20 46   *zStart;   /* F
194f0 69 72 73 74 20 63 68 61 72 61 63 74 65 72 20 6f  irst character o
19500 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a  f input text */.
19510 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45    const char *zE
19520 6e 64 3b 20 20 20 20 20 2f 2a 20 4f 6e 65 20 63  nd;     /* One c
19530 68 61 72 61 63 74 65 72 20 70 61 73 74 20 74 68  haracter past th
19540 65 20 65 6e 64 20 6f 66 20 69 6e 70 75 74 20 74  e end of input t
19550 65 78 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ext */.};../*.**
19560 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
19570 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 63  this structure c
19580 61 6e 20 68 6f 6c 64 20 61 20 73 69 6d 70 6c 65  an hold a simple
19590 20 6c 69 73 74 20 6f 66 20 69 64 65 6e 74 69 66   list of identif
195a0 69 65 72 73 2c 0a 2a 2a 20 73 75 63 68 20 61 73  iers,.** such as
195b0 20 74 68 65 20 6c 69 73 74 20 22 61 2c 62 2c 63   the list "a,b,c
195c0 22 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69  " in the followi
195d0 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 3a 0a 2a  ng statements:.*
195e0 2a 0a 2a 2a 20 20 20 20 20 20 49 4e 53 45 52 54  *.**      INSERT
195f0 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 56   INTO t(a,b,c) V
19600 41 4c 55 45 53 20 2e 2e 2e 3b 0a 2a 2a 20 20 20  ALUES ...;.**   
19610 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20     CREATE INDEX 
19620 69 64 78 20 4f 4e 20 74 28 61 2c 62 2c 63 29 3b  idx ON t(a,b,c);
19630 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45 20  .**      CREATE 
19640 54 52 49 47 47 45 52 20 74 72 69 67 20 42 45 46  TRIGGER trig BEF
19650 4f 52 45 20 55 50 44 41 54 45 20 4f 4e 20 74 28  ORE UPDATE ON t(
19660 61 2c 62 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a  a,b,c) ...;.**.*
19670 2a 20 54 68 65 20 49 64 4c 69 73 74 2e 61 2e 69  * The IdList.a.i
19680 64 78 20 66 69 65 6c 64 20 69 73 20 75 73 65 64  dx field is used
19690 20 77 68 65 6e 20 74 68 65 20 49 64 4c 69 73 74   when the IdList
196a0 20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20   represents the 
196b0 6c 69 73 74 20 6f 66 0a 2a 2a 20 63 6f 6c 75 6d  list of.** colum
196c0 6e 20 6e 61 6d 65 73 20 61 66 74 65 72 20 61 20  n names after a 
196d0 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 61 6e  table name in an
196e0 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
196f0 74 2e 20 20 49 6e 20 74 68 65 20 73 74 61 74 65  t.  In the state
19700 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20 20 20 20 20 49  ment.**.**     I
19710 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62  NSERT INTO t(a,b
19720 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66  ,c) ....**.** If
19730 20 22 61 22 20 69 73 20 74 68 65 20 6b 2d 74 68   "a" is the k-th
19740 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 61 62 6c 65   column of table
19750 20 22 74 22 2c 20 74 68 65 6e 20 49 64 4c 69 73   "t", then IdLis
19760 74 2e 61 5b 30 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a  t.a[0].idx==k..*
19770 2f 0a 73 74 72 75 63 74 20 49 64 4c 69 73 74 20  /.struct IdList 
19780 7b 0a 20 20 73 74 72 75 63 74 20 49 64 4c 69 73  {.  struct IdLis
19790 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 63 68 61  t_item {.    cha
197a0 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f  r *zName;      /
197b0 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 69 64  * Name of the id
197c0 65 6e 74 69 66 69 65 72 20 2a 2f 0a 20 20 20 20  entifier */.    
197d0 69 6e 74 20 69 64 78 3b 20 20 20 20 20 20 20 20  int idx;        
197e0 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 6f    /* Index in so
197f0 6d 65 20 54 61 62 6c 65 2e 61 43 6f 6c 5b 5d 20  me Table.aCol[] 
19800 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  of a column name
19810 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a  d zName */.  } *
19820 61 3b 0a 20 20 69 6e 74 20 6e 49 64 3b 20 20 20  a;.  int nId;   
19830 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
19840 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73 20 6f  of identifiers o
19850 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b  n the list */.};
19860 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62 69 74 6d  ../*.** The bitm
19870 61 73 6b 20 64 61 74 61 74 79 70 65 20 64 65 66  ask datatype def
19880 69 6e 65 64 20 62 65 6c 6f 77 20 69 73 20 75 73  ined below is us
19890 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73 20 6f  ed for various o
198a0 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2a  ptimizations..**
198b0 0a 2a 2a 20 43 68 61 6e 67 69 6e 67 20 74 68 69  .** Changing thi
198c0 73 20 66 72 6f 6d 20 61 20 36 34 2d 62 69 74 20  s from a 64-bit 
198d0 74 6f 20 61 20 33 32 2d 62 69 74 20 74 79 70 65  to a 32-bit type
198e0 20 6c 69 6d 69 74 73 20 74 68 65 20 6e 75 6d 62   limits the numb
198f0 65 72 20 6f 66 0a 2a 2a 20 74 61 62 6c 65 73 20  er of.** tables 
19900 69 6e 20 61 20 6a 6f 69 6e 20 74 6f 20 33 32 20  in a join to 32 
19910 69 6e 73 74 65 61 64 20 6f 66 20 36 34 2e 20 20  instead of 64.  
19920 42 75 74 20 69 74 20 61 6c 73 6f 20 72 65 64 75  But it also redu
19930 63 65 73 20 74 68 65 20 73 69 7a 65 0a 2a 2a 20  ces the size.** 
19940 6f 66 20 74 68 65 20 6c 69 62 72 61 72 79 20 62  of the library b
19950 79 20 37 33 38 20 62 79 74 65 73 20 6f 6e 20 69  y 738 bytes on i
19960 78 38 36 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  x86..*/.#ifdef S
19970 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b 5f 54 59  QLITE_BITMASK_TY
19980 50 45 0a 20 20 74 79 70 65 64 65 66 20 53 51 4c  PE.  typedef SQL
19990 49 54 45 5f 42 49 54 4d 41 53 4b 5f 54 59 50 45  ITE_BITMASK_TYPE
199a0 20 42 69 74 6d 61 73 6b 3b 0a 23 65 6c 73 65 0a   Bitmask;.#else.
199b0 20 20 74 79 70 65 64 65 66 20 75 36 34 20 42 69    typedef u64 Bi
199c0 74 6d 61 73 6b 3b 0a 23 65 6e 64 69 66 0a 0a 2f  tmask;.#endif../
199d0 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20  *.** The number 
199e0 6f 66 20 62 69 74 73 20 69 6e 20 61 20 42 69 74  of bits in a Bit
199f0 6d 61 73 6b 2e 20 20 22 42 4d 53 22 20 6d 65 61  mask.  "BMS" mea
19a00 6e 73 20 22 42 69 74 4d 61 73 6b 20 53 69 7a 65  ns "BitMask Size
19a10 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 42 4d  "..*/.#define BM
19a20 53 20 20 28 28 69 6e 74 29 28 73 69 7a 65 6f 66  S  ((int)(sizeof
19a30 28 42 69 74 6d 61 73 6b 29 2a 38 29 29 0a 0a 2f  (Bitmask)*8))../
19a40 2a 0a 2a 2a 20 41 20 62 69 74 20 69 6e 20 61 20  *.** A bit in a 
19a50 42 69 74 6d 61 73 6b 0a 2a 2f 0a 23 64 65 66 69  Bitmask.*/.#defi
19a60 6e 65 20 4d 41 53 4b 42 49 54 28 6e 29 20 20 20  ne MASKBIT(n)   
19a70 28 28 28 42 69 74 6d 61 73 6b 29 31 29 3c 3c 28  (((Bitmask)1)<<(
19a80 6e 29 29 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b  n)).#define MASK
19a90 42 49 54 33 32 28 6e 29 20 28 28 28 75 6e 73 69  BIT32(n) (((unsi
19aa0 67 6e 65 64 20 69 6e 74 29 31 29 3c 3c 28 6e 29  gned int)1)<<(n)
19ab0 29 0a 23 64 65 66 69 6e 65 20 41 4c 4c 42 49 54  ).#define ALLBIT
19ac0 53 20 20 20 20 20 20 28 28 42 69 74 6d 61 73 6b  S      ((Bitmask
19ad0 29 2d 31 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  )-1)../*.** The 
19ae0 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
19af0 75 72 65 20 64 65 73 63 72 69 62 65 73 20 74 68  ure describes th
19b00 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66  e FROM clause of
19b10 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   a SELECT statem
19b20 65 6e 74 2e 0a 2a 2a 20 45 61 63 68 20 74 61 62  ent..** Each tab
19b30 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79 20 69  le or subquery i
19b40 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  n the FROM claus
19b50 65 20 69 73 20 61 20 73 65 70 61 72 61 74 65 20  e is a separate 
19b60 65 6c 65 6d 65 6e 74 20 6f 66 0a 2a 2a 20 74 68  element of.** th
19b70 65 20 53 72 63 4c 69 73 74 2e 61 5b 5d 20 61 72  e SrcList.a[] ar
19b80 72 61 79 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68 20  ray..**.** With 
19b90 74 68 65 20 61 64 64 69 74 69 6f 6e 20 6f 66 20  the addition of 
19ba0 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73  multiple databas
19bb0 65 20 73 75 70 70 6f 72 74 2c 20 74 68 65 20 66  e support, the f
19bc0 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
19bd0 72 65 0a 2a 2a 20 63 61 6e 20 61 6c 73 6f 20 62  re.** can also b
19be0 65 20 75 73 65 64 20 74 6f 20 64 65 73 63 72 69  e used to descri
19bf0 62 65 20 61 20 70 61 72 74 69 63 75 6c 61 72 20  be a particular 
19c00 74 61 62 6c 65 20 73 75 63 68 20 61 73 20 74 68  table such as th
19c10 65 20 74 61 62 6c 65 20 74 68 61 74 0a 2a 2a 20  e table that.** 
19c20 69 73 20 6d 6f 64 69 66 69 65 64 20 62 79 20 61  is modified by a
19c30 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45  n INSERT, DELETE
19c40 2c 20 6f 72 20 55 50 44 41 54 45 20 73 74 61 74  , or UPDATE stat
19c50 65 6d 65 6e 74 2e 20 20 49 6e 20 73 74 61 6e 64  ement.  In stand
19c60 61 72 64 20 53 51 4c 2c 0a 2a 2a 20 73 75 63 68  ard SQL,.** such
19c70 20 61 20 74 61 62 6c 65 20 6d 75 73 74 20 62 65   a table must be
19c80 20 61 20 73 69 6d 70 6c 65 20 6e 61 6d 65 3a 20   a simple name: 
19c90 49 44 2e 20 20 42 75 74 20 69 6e 20 53 51 4c 69  ID.  But in SQLi
19ca0 74 65 2c 20 74 68 65 20 74 61 62 6c 65 20 63 61  te, the table ca
19cb0 6e 0a 2a 2a 20 6e 6f 77 20 62 65 20 69 64 65 6e  n.** now be iden
19cc0 74 69 66 69 65 64 20 62 79 20 61 20 64 61 74 61  tified by a data
19cd0 62 61 73 65 20 6e 61 6d 65 2c 20 61 20 64 6f 74  base name, a dot
19ce0 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65  , then the table
19cf0 20 6e 61 6d 65 3a 20 49 44 2e 49 44 2e 0a 2a 2a   name: ID.ID..**
19d00 0a 2a 2a 20 54 68 65 20 6a 6f 69 6e 74 79 70 65  .** The jointype
19d10 20 73 74 61 72 74 73 20 6f 75 74 20 73 68 6f 77   starts out show
19d20 69 6e 67 20 74 68 65 20 6a 6f 69 6e 20 74 79 70  ing the join typ
19d30 65 20 62 65 74 77 65 65 6e 20 74 68 65 20 63 75  e between the cu
19d40 72 72 65 6e 74 20 74 61 62 6c 65 0a 2a 2a 20 61  rrent table.** a
19d50 6e 64 20 74 68 65 20 6e 65 78 74 20 74 61 62 6c  nd the next tabl
19d60 65 20 6f 6e 20 74 68 65 20 6c 69 73 74 2e 20 20  e on the list.  
19d70 54 68 65 20 70 61 72 73 65 72 20 62 75 69 6c 64  The parser build
19d80 73 20 74 68 65 20 6c 69 73 74 20 74 68 69 73 20  s the list this 
19d90 77 61 79 2e 0a 2a 2a 20 42 75 74 20 73 71 6c 69  way..** But sqli
19da0 74 65 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a  te3SrcListShiftJ
19db0 6f 69 6e 54 79 70 65 28 29 20 6c 61 74 65 72 20  oinType() later 
19dc0 73 68 69 66 74 73 20 74 68 65 20 6a 6f 69 6e 74  shifts the joint
19dd0 79 70 65 73 20 73 6f 20 74 68 61 74 20 65 61 63  ypes so that eac
19de0 68 0a 2a 2a 20 6a 6f 69 6e 74 79 70 65 20 65 78  h.** jointype ex
19df0 70 72 65 73 73 65 73 20 74 68 65 20 6a 6f 69 6e  presses the join
19e00 20 62 65 74 77 65 65 6e 20 74 68 65 20 74 61 62   between the tab
19e10 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65 76 69  le and the previ
19e20 6f 75 73 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a  ous table..**.**
19e30 20 49 6e 20 74 68 65 20 63 6f 6c 55 73 65 64 20   In the colUsed 
19e40 66 69 65 6c 64 2c 20 74 68 65 20 68 69 67 68 2d  field, the high-
19e50 6f 72 64 65 72 20 62 69 74 20 28 62 69 74 20 36  order bit (bit 6
19e60 33 29 20 69 73 20 73 65 74 20 69 66 20 74 68 65  3) is set if the
19e70 20 74 61 62 6c 65 0a 2a 2a 20 63 6f 6e 74 61 69   table.** contai
19e80 6e 73 20 6d 6f 72 65 20 74 68 61 6e 20 36 33 20  ns more than 63 
19e90 63 6f 6c 75 6d 6e 73 20 61 6e 64 20 74 68 65 20  columns and the 
19ea0 36 34 2d 74 68 20 6f 72 20 6c 61 74 65 72 20 63  64-th or later c
19eb0 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64 2e 0a 2a  olumn is used..*
19ec0 2f 0a 73 74 72 75 63 74 20 53 72 63 4c 69 73 74  /.struct SrcList
19ed0 20 7b 0a 20 20 69 6e 74 20 6e 53 72 63 3b 20 20   {.  int nSrc;  
19ee0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
19ef0 6f 66 20 74 61 62 6c 65 73 20 6f 72 20 73 75 62  of tables or sub
19f00 71 75 65 72 69 65 73 20 69 6e 20 74 68 65 20 46  queries in the F
19f10 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ROM clause */.  
19f20 75 33 32 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20  u32 nAlloc;     
19f30 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e   /* Number of en
19f40 74 72 69 65 73 20 61 6c 6c 6f 63 61 74 65 64 20  tries allocated 
19f50 69 6e 20 61 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a  in a[] below */.
19f60 20 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74    struct SrcList
19f70 5f 69 74 65 6d 20 7b 0a 20 20 20 20 53 63 68 65  _item {.    Sche
19f80 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 2f 2a  ma *pSchema;  /*
19f90 20 53 63 68 65 6d 61 20 74 6f 20 77 68 69 63 68   Schema to which
19fa0 20 74 68 69 73 20 69 74 65 6d 20 69 73 20 66 69   this item is fi
19fb0 78 65 64 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  xed */.    char 
19fc0 2a 7a 44 61 74 61 62 61 73 65 3b 20 20 2f 2a 20  *zDatabase;  /* 
19fd0 4e 61 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65  Name of database
19fe0 20 68 6f 6c 64 69 6e 67 20 74 68 69 73 20 74 61   holding this ta
19ff0 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  ble */.    char 
1a000 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20  *zName;      /* 
1a010 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  Name of the tabl
1a020 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  e */.    char *z
1a030 41 6c 69 61 73 3b 20 20 20 20 20 2f 2a 20 54 68  Alias;     /* Th
1a040 65 20 22 42 22 20 70 61 72 74 20 6f 66 20 61 20  e "B" part of a 
1a050 22 41 20 41 53 20 42 22 20 70 68 72 61 73 65 2e  "A AS B" phrase.
1a060 20 20 7a 4e 61 6d 65 20 69 73 20 74 68 65 20 22    zName is the "
1a070 41 22 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20  A" */.    Table 
1a080 2a 70 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 41  *pTab;      /* A
1a090 6e 20 53 51 4c 20 74 61 62 6c 65 20 63 6f 72 72  n SQL table corr
1a0a0 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 4e 61  esponding to zNa
1a0b0 6d 65 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74  me */.    Select
1a0c0 20 2a 70 53 65 6c 65 63 74 3b 20 20 2f 2a 20 41   *pSelect;  /* A
1a0d0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1a0e0 74 20 75 73 65 64 20 69 6e 20 70 6c 61 63 65 20  t used in place 
1a0f0 6f 66 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20  of a table name 
1a100 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64 64 72 46  */.    int addrF
1a110 69 6c 6c 53 75 62 3b 20 20 2f 2a 20 41 64 64 72  illSub;  /* Addr
1a120 65 73 73 20 6f 66 20 73 75 62 72 6f 75 74 69 6e  ess of subroutin
1a130 65 20 74 6f 20 6d 61 6e 69 66 65 73 74 20 61 20  e to manifest a 
1a140 73 75 62 71 75 65 72 79 20 2a 2f 0a 20 20 20 20  subquery */.    
1a150 69 6e 74 20 72 65 67 52 65 74 75 72 6e 3b 20 20  int regReturn;  
1a160 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f    /* Register ho
1a170 6c 64 69 6e 67 20 72 65 74 75 72 6e 20 61 64 64  lding return add
1a180 72 65 73 73 20 6f 66 20 61 64 64 72 46 69 6c 6c  ress of addrFill
1a190 53 75 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72  Sub */.    int r
1a1a0 65 67 52 65 73 75 6c 74 3b 20 20 20 20 2f 2a 20  egResult;    /* 
1a1b0 52 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e  Registers holdin
1a1c0 67 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20 63  g results of a c
1a1d0 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20  o-routine */.   
1a1e0 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20   struct {.      
1a1f0 75 38 20 6a 6f 69 6e 74 79 70 65 3b 20 20 20 20  u8 jointype;    
1a200 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 6a 6f 69    /* Type of joi
1a210 6e 20 62 65 74 77 65 65 6e 20 74 68 69 73 20 74  n between this t
1a220 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65  able and the pre
1a230 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20 20 20 75  vious */.      u
1a240 6e 73 69 67 6e 65 64 20 6e 6f 74 49 6e 64 65 78  nsigned notIndex
1a250 65 64 20 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75  ed :1;    /* Tru
1a260 65 20 69 66 20 74 68 65 72 65 20 69 73 20 61 20  e if there is a 
1a270 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61 75  NOT INDEXED clau
1a280 73 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69  se */.      unsi
1a290 67 6e 65 64 20 69 73 49 6e 64 65 78 65 64 42 79  gned isIndexedBy
1a2a0 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 69   :1;   /* True i
1a2b0 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 49 4e  f there is an IN
1a2c0 44 45 58 45 44 20 42 59 20 63 6c 61 75 73 65 20  DEXED BY clause 
1a2d0 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65  */.      unsigne
1a2e0 64 20 69 73 54 61 62 46 75 6e 63 20 3a 31 3b 20  d isTabFunc :1; 
1a2f0 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74      /* True if t
1a300 61 62 6c 65 2d 76 61 6c 75 65 64 2d 66 75 6e 63  able-valued-func
1a310 74 69 6f 6e 20 73 79 6e 74 61 78 20 2a 2f 0a 20  tion syntax */. 
1a320 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73       unsigned is
1a330 43 6f 72 72 65 6c 61 74 65 64 20 3a 31 3b 20 20  Correlated :1;  
1a340 2f 2a 20 54 72 75 65 20 69 66 20 73 75 62 2d 71  /* True if sub-q
1a350 75 65 72 79 20 69 73 20 63 6f 72 72 65 6c 61 74  uery is correlat
1a360 65 64 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69  ed */.      unsi
1a370 67 6e 65 64 20 76 69 61 43 6f 72 6f 75 74 69 6e  gned viaCoroutin
1a380 65 20 3a 31 3b 20 20 2f 2a 20 49 6d 70 6c 65 6d  e :1;  /* Implem
1a390 65 6e 74 65 64 20 61 73 20 61 20 63 6f 2d 72 6f  ented as a co-ro
1a3a0 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20 20 20 75  utine */.      u
1a3b0 6e 73 69 67 6e 65 64 20 69 73 52 65 63 75 72 73  nsigned isRecurs
1a3c0 69 76 65 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75  ive :1;   /* Tru
1a3d0 65 20 66 6f 72 20 72 65 63 75 72 73 69 76 65 20  e for recursive 
1a3e0 72 65 66 65 72 65 6e 63 65 20 69 6e 20 57 49 54  reference in WIT
1a3f0 48 20 2a 2f 0a 20 20 20 20 7d 20 66 67 3b 0a 23  H */.    } fg;.#
1a400 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1a410 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 20 20 75  IT_EXPLAIN.    u
1a420 38 20 69 53 65 6c 65 63 74 49 64 3b 20 20 20 20  8 iSelectId;    
1a430 20 2f 2a 20 49 66 20 70 53 65 6c 65 63 74 21 3d   /* If pSelect!=
1a440 30 2c 20 74 68 65 20 69 64 20 6f 66 20 74 68 65  0, the id of the
1a450 20 73 75 62 2d 73 65 6c 65 63 74 20 69 6e 20 45   sub-select in E
1a460 51 50 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 20  QP */.#endif.   
1a470 20 69 6e 74 20 69 43 75 72 73 6f 72 3b 20 20 20   int iCursor;   
1a480 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63     /* The VDBE c
1a490 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 75 73 65  ursor number use
1a4a0 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 69 73  d to access this
1a4b0 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 45 78   table */.    Ex
1a4c0 70 72 20 2a 70 4f 6e 3b 20 20 20 20 20 20 20 20  pr *pOn;        
1a4d0 2f 2a 20 54 68 65 20 4f 4e 20 63 6c 61 75 73 65  /* The ON clause
1a4e0 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20   of a join */.  
1a4f0 20 20 49 64 4c 69 73 74 20 2a 70 55 73 69 6e 67    IdList *pUsing
1a500 3b 20 20 20 2f 2a 20 54 68 65 20 55 53 49 4e 47  ;   /* The USING
1a510 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69   clause of a joi
1a520 6e 20 2a 2f 0a 20 20 20 20 42 69 74 6d 61 73 6b  n */.    Bitmask
1a530 20 63 6f 6c 55 73 65 64 3b 20 20 2f 2a 20 42 69   colUsed;  /* Bi
1a540 74 20 4e 20 28 31 3c 3c 4e 29 20 73 65 74 20 69  t N (1<<N) set i
1a550 66 20 63 6f 6c 75 6d 6e 20 4e 20 6f 66 20 70 54  f column N of pT
1a560 61 62 20 69 73 20 75 73 65 64 20 2a 2f 0a 20 20  ab is used */.  
1a570 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20    union {.      
1a580 63 68 61 72 20 2a 7a 49 6e 64 65 78 65 64 42 79  char *zIndexedBy
1a590 3b 20 20 20 20 2f 2a 20 49 64 65 6e 74 69 66 69  ;    /* Identifi
1a5a0 65 72 20 66 72 6f 6d 20 22 49 4e 44 45 58 45 44  er from "INDEXED
1a5b0 20 42 59 20 3c 7a 49 6e 64 65 78 3e 22 20 63 6c   BY <zIndex>" cl
1a5c0 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 45 78  ause */.      Ex
1a5d0 70 72 4c 69 73 74 20 2a 70 46 75 6e 63 41 72 67  prList *pFuncArg
1a5e0 3b 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 73 20  ;  /* Arguments 
1a5f0 74 6f 20 74 61 62 6c 65 2d 76 61 6c 75 65 64 2d  to table-valued-
1a600 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  function */.    
1a610 7d 20 75 31 3b 0a 20 20 20 20 49 6e 64 65 78 20  } u1;.    Index 
1a620 2a 70 49 42 49 6e 64 65 78 3b 20 20 2f 2a 20 49  *pIBIndex;  /* I
1a630 6e 64 65 78 20 73 74 72 75 63 74 75 72 65 20 63  ndex structure c
1a640 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20  orresponding to 
1a650 75 31 2e 7a 49 6e 64 65 78 65 64 42 79 20 2a 2f  u1.zIndexedBy */
1a660 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20  .  } a[1];      
1a670 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e         /* One en
1a680 74 72 79 20 66 6f 72 20 65 61 63 68 20 69 64 65  try for each ide
1a690 6e 74 69 66 69 65 72 20 6f 6e 20 74 68 65 20 6c  ntifier on the l
1a6a0 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ist */.};../*.**
1a6b0 20 50 65 72 6d 69 74 74 65 64 20 76 61 6c 75 65   Permitted value
1a6c0 73 20 6f 66 20 74 68 65 20 53 72 63 4c 69 73 74  s of the SrcList
1a6d0 2e 61 2e 6a 6f 69 6e 74 79 70 65 20 66 69 65 6c  .a.jointype fiel
1a6e0 64 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  d.*/.#define JT_
1a6f0 49 4e 4e 45 52 20 20 20 20 20 30 78 30 30 30 31  INNER     0x0001
1a700 20 20 20 20 2f 2a 20 41 6e 79 20 6b 69 6e 64 20      /* Any kind 
1a710 6f 66 20 69 6e 6e 65 72 20 6f 72 20 63 72 6f 73  of inner or cros
1a720 73 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  s join */.#defin
1a730 65 20 4a 54 5f 43 52 4f 53 53 20 20 20 20 20 30  e JT_CROSS     0
1a740 78 30 30 30 32 20 20 20 20 2f 2a 20 45 78 70 6c  x0002    /* Expl
1a750 69 63 69 74 20 75 73 65 20 6f 66 20 74 68 65 20  icit use of the 
1a760 43 52 4f 53 53 20 6b 65 79 77 6f 72 64 20 2a 2f  CROSS keyword */
1a770 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4e 41 54 55  .#define JT_NATU
1a780 52 41 4c 20 20 20 30 78 30 30 30 34 20 20 20 20  RAL   0x0004    
1a790 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 20 22 6e  /* True for a "n
1a7a0 61 74 75 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a  atural" join */.
1a7b0 23 64 65 66 69 6e 65 20 4a 54 5f 4c 45 46 54 20  #define JT_LEFT 
1a7c0 20 20 20 20 20 30 78 30 30 30 38 20 20 20 20 2f       0x0008    /
1a7d0 2a 20 4c 65 66 74 20 6f 75 74 65 72 20 6a 6f 69  * Left outer joi
1a7e0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  n */.#define JT_
1a7f0 52 49 47 48 54 20 20 20 20 20 30 78 30 30 31 30  RIGHT     0x0010
1a800 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 75 74      /* Right out
1a810 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  er join */.#defi
1a820 6e 65 20 4a 54 5f 4f 55 54 45 52 20 20 20 20 20  ne JT_OUTER     
1a830 30 78 30 30 32 30 20 20 20 20 2f 2a 20 54 68 65  0x0020    /* The
1a840 20 22 4f 55 54 45 52 22 20 6b 65 79 77 6f 72 64   "OUTER" keyword
1a850 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 23   is present */.#
1a860 64 65 66 69 6e 65 20 4a 54 5f 45 52 52 4f 52 20  define JT_ERROR 
1a870 20 20 20 20 30 78 30 30 34 30 20 20 20 20 2f 2a      0x0040    /*
1a880 20 75 6e 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73 75   unknown or unsu
1a890 70 70 6f 72 74 65 64 20 6a 6f 69 6e 20 74 79 70  pported join typ
1a8a0 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61  e */.../*.** Fla
1a8b0 67 73 20 61 70 70 72 6f 70 72 69 61 74 65 20 66  gs appropriate f
1a8c0 6f 72 20 74 68 65 20 77 63 74 72 6c 46 6c 61 67  or the wctrlFlag
1a8d0 73 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20 73  s parameter of s
1a8e0 71 6c 69 74 65 33 57 68 65 72 65 42 65 67 69 6e  qlite3WhereBegin
1a8f0 28 29 0a 2a 2a 20 61 6e 64 20 74 68 65 20 57 68  ().** and the Wh
1a900 65 72 65 49 6e 66 6f 2e 77 63 74 72 6c 46 6c 61  ereInfo.wctrlFla
1a910 67 73 20 6d 65 6d 62 65 72 2e 0a 2a 2a 0a 2a 2a  gs member..**.**
1a920 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e   Value constrain
1a930 74 73 20 28 65 6e 66 6f 72 63 65 64 20 76 69 61  ts (enforced via
1a940 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20   assert()):.**  
1a950 20 20 20 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d     WHERE_USE_LIM
1a960 49 54 20 20 3d 3d 20 53 46 5f 46 69 78 65 64 4c  IT  == SF_FixedL
1a970 69 6d 69 74 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  imit.*/.#define 
1a980 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4e 4f  WHERE_ORDERBY_NO
1a990 52 4d 41 4c 20 20 20 30 78 30 30 30 30 20 2f 2a  RMAL   0x0000 /*
1a9a0 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66 69 6e   No-op */.#defin
1a9b0 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f  e WHERE_ORDERBY_
1a9c0 4d 49 4e 20 20 20 20 20 20 30 78 30 30 30 31 20  MIN      0x0001 
1a9d0 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63  /* ORDER BY proc
1a9e0 65 73 73 69 6e 67 20 66 6f 72 20 6d 69 6e 28 29  essing for min()
1a9f0 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65   func */.#define
1aa00 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d   WHERE_ORDERBY_M
1aa10 41 58 20 20 20 20 20 20 30 78 30 30 30 32 20 2f  AX      0x0002 /
1aa20 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65  * ORDER BY proce
1aa30 73 73 69 6e 67 20 66 6f 72 20 6d 61 78 28 29 20  ssing for max() 
1aa40 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20  func */.#define 
1aa50 57 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f 44 45  WHERE_ONEPASS_DE
1aa60 53 49 52 45 44 20 20 30 78 30 30 30 34 20 2f 2a  SIRED  0x0004 /*
1aa70 20 57 61 6e 74 20 74 6f 20 64 6f 20 6f 6e 65 2d   Want to do one-
1aa80 70 61 73 73 20 55 50 44 41 54 45 2f 44 45 4c 45  pass UPDATE/DELE
1aa90 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  TE */.#define WH
1aaa0 45 52 45 5f 4f 4e 45 50 41 53 53 5f 4d 55 4c 54  ERE_ONEPASS_MULT
1aab0 49 52 4f 57 20 30 78 30 30 30 38 20 2f 2a 20 4f  IROW 0x0008 /* O
1aac0 4e 45 50 41 53 53 20 69 73 20 6f 6b 20 77 69 74  NEPASS is ok wit
1aad0 68 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20  h multiple rows 
1aae0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1aaf0 5f 44 55 50 4c 49 43 41 54 45 53 5f 4f 4b 20 20  _DUPLICATES_OK  
1ab00 20 20 30 78 30 30 31 30 20 2f 2a 20 4f 6b 20 74    0x0010 /* Ok t
1ab10 6f 20 72 65 74 75 72 6e 20 61 20 72 6f 77 20 6d  o return a row m
1ab20 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65 20 2a 2f  ore than once */
1ab30 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
1ab40 52 5f 53 55 42 43 4c 41 55 53 45 20 20 20 20 20  R_SUBCLAUSE     
1ab50 30 78 30 30 32 30 20 2f 2a 20 50 72 6f 63 65 73  0x0020 /* Proces
1ab60 73 69 6e 67 20 61 20 73 75 62 2d 57 48 45 52 45  sing a sub-WHERE
1ab70 20 61 73 20 70 61 72 74 20 6f 66 0a 20 20 20 20   as part of.    
1ab80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aba0 20 20 2a 2a 20 74 68 65 20 4f 52 20 6f 70 74 69    ** the OR opti
1abb0 6d 69 7a 61 74 69 6f 6e 20 20 2a 2f 0a 23 64 65  mization  */.#de
1abc0 66 69 6e 65 20 57 48 45 52 45 5f 47 52 4f 55 50  fine WHERE_GROUP
1abd0 42 59 20 20 20 20 20 20 20 20 20 20 30 78 30 30  BY          0x00
1abe0 34 30 20 2f 2a 20 70 4f 72 64 65 72 42 79 20 69  40 /* pOrderBy i
1abf0 73 20 72 65 61 6c 6c 79 20 61 20 47 52 4f 55 50  s really a GROUP
1ac00 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57   BY */.#define W
1ac10 48 45 52 45 5f 44 49 53 54 49 4e 43 54 42 59 20  HERE_DISTINCTBY 
1ac20 20 20 20 20 20 20 30 78 30 30 38 30 20 2f 2a 20        0x0080 /* 
1ac30 70 4f 72 64 65 72 62 79 20 69 73 20 72 65 61 6c  pOrderby is real
1ac40 6c 79 20 61 20 44 49 53 54 49 4e 43 54 20 63 6c  ly a DISTINCT cl
1ac50 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ause */.#define 
1ac60 57 48 45 52 45 5f 57 41 4e 54 5f 44 49 53 54 49  WHERE_WANT_DISTI
1ac70 4e 43 54 20 20 20 20 30 78 30 31 30 30 20 2f 2a  NCT    0x0100 /*
1ac80 20 41 6c 6c 20 6f 75 74 70 75 74 20 6e 65 65 64   All output need
1ac90 73 20 74 6f 20 62 65 20 64 69 73 74 69 6e 63 74  s to be distinct
1aca0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1acb0 45 5f 53 4f 52 54 42 59 47 52 4f 55 50 20 20 20  E_SORTBYGROUP   
1acc0 20 20 20 30 78 30 32 30 30 20 2f 2a 20 53 75 70     0x0200 /* Sup
1acd0 70 6f 72 74 20 73 71 6c 69 74 65 33 57 68 65 72  port sqlite3Wher
1ace0 65 49 73 53 6f 72 74 65 64 28 29 20 2a 2f 0a 23  eIsSorted() */.#
1acf0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 53 45 45  define WHERE_SEE
1ad00 4b 5f 54 41 42 4c 45 20 20 20 20 20 20 20 30 78  K_TABLE       0x
1ad10 30 34 30 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 64  0400 /* Do not d
1ad20 65 66 65 72 20 73 65 65 6b 73 20 6f 6e 20 6d 61  efer seeks on ma
1ad30 69 6e 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66  in table */.#def
1ad40 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42  ine WHERE_ORDERB
1ad50 59 5f 4c 49 4d 49 54 20 20 20 20 30 78 30 38 30  Y_LIMIT    0x080
1ad60 30 20 2f 2a 20 4f 52 44 45 52 42 59 2b 4c 49 4d  0 /* ORDERBY+LIM
1ad70 49 54 20 6f 6e 20 74 68 65 20 69 6e 6e 65 72 20  IT on the inner 
1ad80 6c 6f 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20  loop */.#define 
1ad90 57 48 45 52 45 5f 53 45 45 4b 5f 55 4e 49 51 5f  WHERE_SEEK_UNIQ_
1ada0 54 41 42 4c 45 20 20 30 78 31 30 30 30 20 2f 2a  TABLE  0x1000 /*
1adb0 20 44 6f 20 6e 6f 74 20 64 65 66 65 72 20 73 65   Do not defer se
1adc0 65 6b 73 20 69 66 20 75 6e 69 71 75 65 20 2a 2f  eks if unique */
1add0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ade0 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 20 20           /*     
1adf0 30 78 32 30 30 30 20 20 20 20 6e 6f 74 20 63 75  0x2000    not cu
1ae00 72 72 65 6e 74 6c 79 20 75 73 65 64 20 2a 2f 0a  rrently used */.
1ae10 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 55 53  #define WHERE_US
1ae20 45 5f 4c 49 4d 49 54 20 20 20 20 20 20 20 20 30  E_LIMIT        0
1ae30 78 34 30 30 30 20 2f 2a 20 55 73 65 20 74 68 65  x4000 /* Use the
1ae40 20 4c 49 4d 49 54 20 69 6e 20 63 6f 73 74 20 65   LIMIT in cost e
1ae50 73 74 69 6d 61 74 65 73 20 2a 2f 0a 20 20 20 20  stimates */.    
1ae60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae70 20 20 20 20 2f 2a 20 20 20 20 20 30 78 38 30 30      /*     0x800
1ae80 30 20 20 20 20 6e 6f 74 20 63 75 72 72 65 6e 74  0    not current
1ae90 6c 79 20 75 73 65 64 20 2a 2f 0a 0a 2f 2a 20 41  ly used */../* A
1aea0 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e 20 76 61  llowed return va
1aeb0 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c 69 74 65  lues from sqlite
1aec0 33 57 68 65 72 65 49 73 44 69 73 74 69 6e 63 74  3WhereIsDistinct
1aed0 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ().*/.#define WH
1aee0 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4e 4f 4f  ERE_DISTINCT_NOO
1aef0 50 20 20 20 20 20 20 30 20 20 2f 2a 20 44 49 53  P      0  /* DIS
1af00 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 6e 6f  TINCT keyword no
1af10 74 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e  t used */.#defin
1af20 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54  e WHERE_DISTINCT
1af30 5f 55 4e 49 51 55 45 20 20 20 20 31 20 20 2f 2a  _UNIQUE    1  /*
1af40 20 4e 6f 20 64 75 70 6c 69 63 61 74 65 73 20 2a   No duplicates *
1af50 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1af60 44 49 53 54 49 4e 43 54 5f 4f 52 44 45 52 45 44  DISTINCT_ORDERED
1af70 20 20 20 32 20 20 2f 2a 20 41 6c 6c 20 64 75 70     2  /* All dup
1af80 6c 69 63 61 74 65 73 20 61 72 65 20 61 64 6a 61  licates are adja
1af90 63 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  cent */.#define 
1afa0 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55  WHERE_DISTINCT_U
1afb0 4e 4f 52 44 45 52 45 44 20 33 20 20 2f 2a 20 44  NORDERED 3  /* D
1afc0 75 70 6c 69 63 61 74 65 73 20 61 72 65 20 73 63  uplicates are sc
1afd0 61 74 74 65 72 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a  attered */../*.*
1afe0 2a 20 41 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  * A NameContext 
1aff0 64 65 66 69 6e 65 73 20 61 20 63 6f 6e 74 65 78  defines a contex
1b000 74 20 69 6e 20 77 68 69 63 68 20 74 6f 20 72 65  t in which to re
1b010 73 6f 6c 76 65 20 74 61 62 6c 65 20 61 6e 64 20  solve table and 
1b020 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73 2e  column.** names.
1b030 20 20 54 68 65 20 63 6f 6e 74 65 78 74 20 63 6f    The context co
1b040 6e 73 69 73 74 73 20 6f 66 20 61 20 6c 69 73 74  nsists of a list
1b050 20 6f 66 20 74 61 62 6c 65 73 20 28 74 68 65 20   of tables (the 
1b060 70 53 72 63 4c 69 73 74 29 20 66 69 65 6c 64 20  pSrcList) field 
1b070 61 6e 64 0a 2a 2a 20 61 20 6c 69 73 74 20 6f 66  and.** a list of
1b080 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f   named expressio
1b090 6e 20 28 70 45 4c 69 73 74 29 2e 20 20 54 68 65  n (pEList).  The
1b0a0 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f   named expressio
1b0b0 6e 20 6c 69 73 74 20 6d 61 79 0a 2a 2a 20 62 65  n list may.** be
1b0c0 20 4e 55 4c 4c 2e 20 20 54 68 65 20 70 53 72 63   NULL.  The pSrc
1b0d0 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
1b0e0 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
1b0f0 6f 66 20 61 20 53 45 4c 45 43 54 20 6f 72 0a 2a  of a SELECT or.*
1b100 2a 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20 62  * to the table b
1b110 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e  eing operated on
1b120 20 62 79 20 49 4e 53 45 52 54 2c 20 55 50 44 41   by INSERT, UPDA
1b130 54 45 2c 20 6f 72 20 44 45 4c 45 54 45 2e 20 20  TE, or DELETE.  
1b140 54 68 65 0a 2a 2a 20 70 45 4c 69 73 74 20 63 6f  The.** pEList co
1b150 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
1b160 20 72 65 73 75 6c 74 20 73 65 74 20 6f 66 20 61   result set of a
1b170 20 53 45 4c 45 43 54 20 61 6e 64 20 69 73 20 4e   SELECT and is N
1b180 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f 74 68 65 72  ULL for.** other
1b190 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a   statements..**.
1b1a0 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 73 20  ** NameContexts 
1b1b0 63 61 6e 20 62 65 20 6e 65 73 74 65 64 2e 20 20  can be nested.  
1b1c0 57 68 65 6e 20 72 65 73 6f 6c 76 69 6e 67 20 6e  When resolving n
1b1d0 61 6d 65 73 2c 20 74 68 65 20 69 6e 6e 65 72 2d  ames, the inner-
1b1e0 6d 6f 73 74 0a 2a 2a 20 63 6f 6e 74 65 78 74 20  most.** context 
1b1f0 69 73 20 73 65 61 72 63 68 65 64 20 66 69 72 73  is searched firs
1b200 74 2e 20 20 49 66 20 6e 6f 20 6d 61 74 63 68 20  t.  If no match 
1b210 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 65  is found, the ne
1b220 78 74 20 6f 75 74 65 72 0a 2a 2a 20 63 6f 6e 74  xt outer.** cont
1b230 65 78 74 20 69 73 20 63 68 65 63 6b 65 64 2e 20  ext is checked. 
1b240 20 49 66 20 74 68 65 72 65 20 69 73 20 73 74 69   If there is sti
1b250 6c 6c 20 6e 6f 20 6d 61 74 63 68 2c 20 74 68 65  ll no match, the
1b260 20 6e 65 78 74 20 63 6f 6e 74 65 78 74 0a 2a 2a   next context.**
1b270 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20 54 68   is checked.  Th
1b280 69 73 20 70 72 6f 63 65 73 73 20 63 6f 6e 74 69  is process conti
1b290 6e 75 65 73 20 75 6e 74 69 6c 20 65 69 74 68 65  nues until eithe
1b2a0 72 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75  r a match is fou
1b2b0 6e 64 0a 2a 2a 20 6f 72 20 61 6c 6c 20 63 6f 6e  nd.** or all con
1b2c0 74 65 78 74 73 20 61 72 65 20 63 68 65 63 6b 2e  texts are check.
1b2d0 20 20 57 68 65 6e 20 61 20 6d 61 74 63 68 20 69    When a match i
1b2e0 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 52 65  s found, the nRe
1b2f0 66 20 6d 65 6d 62 65 72 20 6f 66 0a 2a 2a 20 74  f member of.** t
1b300 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 74 61  he context conta
1b310 69 6e 69 6e 67 20 74 68 65 20 6d 61 74 63 68 20  ining the match 
1b320 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a  is incremented..
1b330 2a 2a 0a 2a 2a 20 45 61 63 68 20 73 75 62 71 75  **.** Each subqu
1b340 65 72 79 20 67 65 74 73 20 61 20 6e 65 77 20 4e  ery gets a new N
1b350 61 6d 65 43 6f 6e 74 65 78 74 2e 20 20 54 68 65  ameContext.  The
1b360 20 70 4e 65 78 74 20 66 69 65 6c 64 20 70 6f 69   pNext field poi
1b370 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 4e 61  nts to the.** Na
1b380 6d 65 43 6f 6e 74 65 78 74 20 69 6e 20 74 68 65  meContext in the
1b390 20 70 61 72 65 6e 74 20 71 75 65 72 79 2e 20 20   parent query.  
1b3a0 54 68 75 73 20 74 68 65 20 70 72 6f 63 65 73 73  Thus the process
1b3b0 20 6f 66 20 73 63 61 6e 6e 69 6e 67 20 74 68 65   of scanning the
1b3c0 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  .** NameContext 
1b3d0 6c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  list corresponds
1b3e0 20 74 6f 20 73 65 61 72 63 68 69 6e 67 20 74 68   to searching th
1b3f0 72 6f 75 67 68 20 73 75 63 63 65 73 73 69 76 65  rough successive
1b400 6c 79 20 6f 75 74 65 72 0a 2a 2a 20 73 75 62 71  ly outer.** subq
1b410 75 65 72 69 65 73 20 6c 6f 6f 6b 69 6e 67 20 66  ueries looking f
1b420 6f 72 20 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a 73  or a match..*/.s
1b430 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78  truct NameContex
1b440 74 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61  t {.  Parse *pPa
1b450 72 73 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 68  rse;       /* Th
1b460 65 20 70 61 72 73 65 72 20 2a 2f 0a 20 20 53 72  e parser */.  Sr
1b470 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b  cList *pSrcList;
1b480 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72     /* One or mor
1b490 65 20 74 61 62 6c 65 73 20 75 73 65 64 20 74 6f  e tables used to
1b4a0 20 72 65 73 6f 6c 76 65 20 6e 61 6d 65 73 20 2a   resolve names *
1b4b0 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45  /.  ExprList *pE
1b4c0 4c 69 73 74 3b 20 20 20 20 2f 2a 20 4f 70 74 69  List;    /* Opti
1b4d0 6f 6e 61 6c 20 6c 69 73 74 20 6f 66 20 72 65 73  onal list of res
1b4e0 75 6c 74 2d 73 65 74 20 63 6f 6c 75 6d 6e 73 20  ult-set columns 
1b4f0 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41  */.  AggInfo *pA
1b500 67 67 49 6e 66 6f 3b 20 20 20 2f 2a 20 49 6e 66  ggInfo;   /* Inf
1b510 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61  ormation about a
1b520 67 67 72 65 67 61 74 65 73 20 61 74 20 74 68 69  ggregates at thi
1b530 73 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 4e 61 6d  s level */.  Nam
1b540 65 43 6f 6e 74 65 78 74 20 2a 70 4e 65 78 74 3b  eContext *pNext;
1b550 20 20 2f 2a 20 4e 65 78 74 20 6f 75 74 65 72 20    /* Next outer 
1b560 6e 61 6d 65 20 63 6f 6e 74 65 78 74 2e 20 20 4e  name context.  N
1b570 55 4c 4c 20 66 6f 72 20 6f 75 74 65 72 6d 6f 73  ULL for outermos
1b580 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b  t */.  int nRef;
1b590 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1b5a0 75 6d 62 65 72 20 6f 66 20 6e 61 6d 65 73 20 72  umber of names r
1b5b0 65 73 6f 6c 76 65 64 20 62 79 20 74 68 69 73 20  esolved by this 
1b5c0 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 69 6e 74  context */.  int
1b5d0 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20 20   nErr;          
1b5e0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
1b5f0 72 72 6f 72 73 20 65 6e 63 6f 75 6e 74 65 72 65  rrors encountere
1b600 64 20 77 68 69 6c 65 20 72 65 73 6f 6c 76 69 6e  d while resolvin
1b610 67 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 75 31 36  g names */.  u16
1b620 20 6e 63 46 6c 61 67 73 3b 20 20 20 20 20 20 20   ncFlags;       
1b630 20 20 2f 2a 20 5a 65 72 6f 20 6f 72 20 6d 6f 72    /* Zero or mor
1b640 65 20 4e 43 5f 2a 20 66 6c 61 67 73 20 64 65 66  e NC_* flags def
1b650 69 6e 65 64 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b  ined below */.};
1b660 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
1b670 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 4e  values for the N
1b680 61 6d 65 43 6f 6e 74 65 78 74 2c 20 6e 63 46 6c  ameContext, ncFl
1b690 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a  ags field..**.**
1b6a0 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e   Value constrain
1b6b0 74 73 20 28 61 6c 6c 20 63 68 65 63 6b 65 64 20  ts (all checked 
1b6c0 76 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a  via assert()):.*
1b6d0 2a 20 20 20 20 4e 43 5f 48 61 73 41 67 67 20 20  *    NC_HasAgg  
1b6e0 20 20 3d 3d 20 53 46 5f 48 61 73 41 67 67 0a 2a    == SF_HasAgg.*
1b6f0 2a 20 20 20 20 4e 43 5f 4d 69 6e 4d 61 78 41 67  *    NC_MinMaxAg
1b700 67 20 3d 3d 20 53 46 5f 4d 69 6e 4d 61 78 41 67  g == SF_MinMaxAg
1b710 67 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43  g == SQLITE_FUNC
1b720 5f 4d 49 4e 4d 41 58 0a 2a 2a 0a 2a 2f 0a 23 64  _MINMAX.**.*/.#d
1b730 65 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77 41 67  efine NC_AllowAg
1b740 67 20 20 30 78 30 30 30 31 20 20 2f 2a 20 41 67  g  0x0001  /* Ag
1b750 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
1b760 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 68 65  s are allowed he
1b770 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  re */.#define NC
1b780 5f 50 61 72 74 49 64 78 20 20 20 30 78 30 30 30  _PartIdx   0x000
1b790 32 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65  2  /* True if re
1b7a0 73 6f 6c 76 69 6e 67 20 61 20 70 61 72 74 69 61  solving a partia
1b7b0 6c 20 69 6e 64 65 78 20 57 48 45 52 45 20 2a 2f  l index WHERE */
1b7c0 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 73 43 68  .#define NC_IsCh
1b7d0 65 63 6b 20 20 20 30 78 30 30 30 34 20 20 2f 2a  eck   0x0004  /*
1b7e0 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69   True if resolvi
1b7f0 6e 67 20 6e 61 6d 65 73 20 69 6e 20 61 20 43 48  ng names in a CH
1b800 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a  ECK constraint *
1b810 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 6e 41  /.#define NC_InA
1b820 67 67 46 75 6e 63 20 30 78 30 30 30 38 20 20 2f  ggFunc 0x0008  /
1b830 2a 20 54 72 75 65 20 69 66 20 61 6e 61 6c 79 7a  * True if analyz
1b840 69 6e 67 20 61 72 67 75 6d 65 6e 74 73 20 74 6f  ing arguments to
1b850 20 61 6e 20 61 67 67 20 66 75 6e 63 20 2a 2f 0a   an agg func */.
1b860 23 64 65 66 69 6e 65 20 4e 43 5f 48 61 73 41 67  #define NC_HasAg
1b870 67 20 20 20 20 30 78 30 30 31 30 20 20 2f 2a 20  g    0x0010  /* 
1b880 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72  One or more aggr
1b890 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
1b8a0 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  seen */.#define 
1b8b0 4e 43 5f 49 64 78 45 78 70 72 20 20 20 30 78 30  NC_IdxExpr   0x0
1b8c0 30 32 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20  020  /* True if 
1b8d0 72 65 73 6f 6c 76 69 6e 67 20 63 6f 6c 75 6d 6e  resolving column
1b8e0 73 20 6f 66 20 43 52 45 41 54 45 20 49 4e 44 45  s of CREATE INDE
1b8f0 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  X */.#define NC_
1b900 56 61 72 53 65 6c 65 63 74 20 30 78 30 30 34 30  VarSelect 0x0040
1b910 20 20 2f 2a 20 41 20 63 6f 72 72 65 6c 61 74 65    /* A correlate
1b920 64 20 73 75 62 71 75 65 72 79 20 68 61 73 20 62  d subquery has b
1b930 65 65 6e 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66  een seen */.#def
1b940 69 6e 65 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67  ine NC_MinMaxAgg
1b950 20 30 78 31 30 30 30 20 20 2f 2a 20 6d 69 6e 2f   0x1000  /* min/
1b960 6d 61 78 20 61 67 67 72 65 67 61 74 65 73 20 73  max aggregates s
1b970 65 65 6e 2e 20 20 53 65 65 20 6e 6f 74 65 20 61  een.  See note a
1b980 62 6f 76 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  bove */../*.** A
1b990 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
1b9a0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
1b9b0 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 61  cture contains a
1b9c0 6c 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a  ll information.*
1b9d0 2a 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65  * needed to gene
1b9e0 72 61 74 65 20 63 6f 64 65 20 66 6f 72 20 61 20  rate code for a 
1b9f0 73 69 6e 67 6c 65 20 53 45 4c 45 43 54 20 73 74  single SELECT st
1ba00 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 6e  atement..**.** n
1ba10 4c 69 6d 69 74 20 69 73 20 73 65 74 20 74 6f 20  Limit is set to 
1ba20 2d 31 20 69 66 20 74 68 65 72 65 20 69 73 20 6e  -1 if there is n
1ba30 6f 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2e 20  o LIMIT clause. 
1ba40 20 6e 4f 66 66 73 65 74 20 69 73 20 73 65 74 20   nOffset is set 
1ba50 74 6f 20 30 2e 0a 2a 2a 20 49 66 20 74 68 65 72  to 0..** If ther
1ba60 65 20 69 73 20 61 20 4c 49 4d 49 54 20 63 6c 61  e is a LIMIT cla
1ba70 75 73 65 2c 20 74 68 65 20 70 61 72 73 65 72 20  use, the parser 
1ba80 73 65 74 73 20 6e 4c 69 6d 69 74 20 74 6f 20 74  sets nLimit to t
1ba90 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 0a  he value of the.
1baa0 2a 2a 20 6c 69 6d 69 74 20 61 6e 64 20 6e 4f 66  ** limit and nOf
1bab0 66 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75  fset to the valu
1bac0 65 20 6f 66 20 74 68 65 20 6f 66 66 73 65 74 20  e of the offset 
1bad0 28 6f 72 20 30 20 69 66 20 74 68 65 72 65 20 69  (or 0 if there i
1bae0 73 20 6e 6f 74 0a 2a 2a 20 6f 66 66 73 65 74 29  s not.** offset)
1baf0 2e 20 20 42 75 74 20 6c 61 74 65 72 20 6f 6e 2c  .  But later on,
1bb00 20 6e 4c 69 6d 69 74 20 61 6e 64 20 6e 4f 66 66   nLimit and nOff
1bb10 73 65 74 20 62 65 63 6f 6d 65 20 74 68 65 20 6d  set become the m
1bb20 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 73 0a  emory locations.
1bb30 2a 2a 20 69 6e 20 74 68 65 20 56 44 42 45 20 74  ** in the VDBE t
1bb40 68 61 74 20 72 65 63 6f 72 64 20 74 68 65 20 6c  hat record the l
1bb50 69 6d 69 74 20 61 6e 64 20 6f 66 66 73 65 74 20  imit and offset 
1bb60 63 6f 75 6e 74 65 72 73 2e 0a 2a 2a 0a 2a 2a 20  counters..**.** 
1bb70 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 5d 20 65  addrOpenEphm[] e
1bb80 6e 74 72 69 65 73 20 63 6f 6e 74 61 69 6e 20 74  ntries contain t
1bb90 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 4f 50  he address of OP
1bba0 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f  _OpenEphemeral o
1bbb0 70 63 6f 64 65 73 2e 0a 2a 2a 20 54 68 65 73 65  pcodes..** These
1bbc0 20 61 64 64 72 65 73 73 65 73 20 6d 75 73 74 20   addresses must 
1bbd0 62 65 20 73 74 6f 72 65 64 20 73 6f 20 74 68 61  be stored so tha
1bbe0 74 20 77 65 20 63 61 6e 20 67 6f 20 62 61 63 6b  t we can go back
1bbf0 20 61 6e 64 20 66 69 6c 6c 20 69 6e 0a 2a 2a 20   and fill in.** 
1bc00 74 68 65 20 50 34 5f 4b 45 59 49 4e 46 4f 20 61  the P4_KEYINFO a
1bc10 6e 64 20 50 32 20 70 61 72 61 6d 65 74 65 72 73  nd P2 parameters
1bc20 20 6c 61 74 65 72 2e 20 20 4e 65 69 74 68 65 72   later.  Neither
1bc30 20 74 68 65 20 4b 65 79 49 6e 66 6f 20 6e 6f 72   the KeyInfo nor
1bc40 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  .** the number o
1bc50 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 50 32 20  f columns in P2 
1bc60 63 61 6e 20 62 65 20 63 6f 6d 70 75 74 65 64 20  can be computed 
1bc70 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65  at the same time
1bc80 0a 2a 2a 20 61 73 20 74 68 65 20 4f 50 5f 4f 70  .** as the OP_Op
1bc90 65 6e 45 70 68 6d 20 69 6e 73 74 72 75 63 74 69  enEphm instructi
1bca0 6f 6e 20 69 73 20 63 6f 64 65 64 20 62 65 63 61  on is coded beca
1bcb0 75 73 65 20 6e 6f 74 0a 2a 2a 20 65 6e 6f 75 67  use not.** enoug
1bcc0 68 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  h information ab
1bcd0 6f 75 74 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64  out the compound
1bce0 20 71 75 65 72 79 20 69 73 20 6b 6e 6f 77 6e 20   query is known 
1bcf0 61 74 20 74 68 61 74 20 70 6f 69 6e 74 2e 0a 2a  at that point..*
1bd00 2a 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f  * The KeyInfo fo
1bd10 72 20 61 64 64 72 4f 70 65 6e 54 72 61 6e 5b 30  r addrOpenTran[0
1bd20 5d 20 61 6e 64 20 5b 31 5d 20 63 6f 6e 74 61 69  ] and [1] contai
1bd30 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  ns collating seq
1bd40 75 65 6e 63 65 73 0a 2a 2a 20 66 6f 72 20 74 68  uences.** for th
1bd50 65 20 72 65 73 75 6c 74 20 73 65 74 2e 20 20 54  e result set.  T
1bd60 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61  he KeyInfo for a
1bd70 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 20 63  ddrOpenEphm[2] c
1bd80 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e  ontains collatin
1bd90 67 0a 2a 2a 20 73 65 71 75 65 6e 63 65 73 20 66  g.** sequences f
1bda0 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  or the ORDER BY 
1bdb0 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63  clause..*/.struc
1bdc0 74 20 53 65 6c 65 63 74 20 7b 0a 20 20 45 78 70  t Select {.  Exp
1bdd0 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20 20  rList *pEList;  
1bde0 20 20 20 20 2f 2a 20 54 68 65 20 66 69 65 6c 64      /* The field
1bdf0 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20  s of the result 
1be00 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20  */.  u8 op;     
1be10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
1be20 6e 65 20 6f 66 3a 20 54 4b 5f 55 4e 49 4f 4e 20  ne of: TK_UNION 
1be30 54 4b 5f 41 4c 4c 20 54 4b 5f 49 4e 54 45 52 53  TK_ALL TK_INTERS
1be40 45 43 54 20 54 4b 5f 45 58 43 45 50 54 20 2a 2f  ECT TK_EXCEPT */
1be50 0a 20 20 4c 6f 67 45 73 74 20 6e 53 65 6c 65 63  .  LogEst nSelec
1be60 74 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73 74  tRow;     /* Est
1be70 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20 6f 66  imated number of
1be80 20 72 65 73 75 6c 74 20 72 6f 77 73 20 2a 2f 0a   result rows */.
1be90 20 20 75 33 32 20 73 65 6c 46 6c 61 67 73 3b 20    u32 selFlags; 
1bea0 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69           /* Vari
1beb0 6f 75 73 20 53 46 5f 2a 20 76 61 6c 75 65 73 20  ous SF_* values 
1bec0 2a 2f 0a 20 20 69 6e 74 20 69 4c 69 6d 69 74 2c  */.  int iLimit,
1bed0 20 69 4f 66 66 73 65 74 3b 20 20 20 2f 2a 20 4d   iOffset;   /* M
1bee0 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73 20  emory registers 
1bef0 68 6f 6c 64 69 6e 67 20 4c 49 4d 49 54 20 26 20  holding LIMIT & 
1bf00 4f 46 46 53 45 54 20 63 6f 75 6e 74 65 72 73 20  OFFSET counters 
1bf10 2a 2f 0a 23 69 66 20 53 45 4c 45 43 54 54 52 41  */.#if SELECTTRA
1bf20 43 45 5f 45 4e 41 42 4c 45 44 0a 20 20 63 68 61  CE_ENABLED.  cha
1bf30 72 20 7a 53 65 6c 4e 61 6d 65 5b 31 32 5d 3b 20  r zSelName[12]; 
1bf40 20 20 20 20 2f 2a 20 53 79 6d 62 6f 6c 69 63 20      /* Symbolic 
1bf50 6e 61 6d 65 20 6f 66 20 74 68 69 73 20 53 45 4c  name of this SEL
1bf60 45 43 54 20 75 73 65 20 66 6f 72 20 64 65 62 75  ECT use for debu
1bf70 67 67 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a  gging */.#endif.
1bf80 20 20 69 6e 74 20 61 64 64 72 4f 70 65 6e 45 70    int addrOpenEp
1bf90 68 6d 5b 32 5d 3b 20 20 20 2f 2a 20 4f 50 5f 4f  hm[2];   /* OP_O
1bfa0 70 65 6e 45 70 68 65 6d 20 6f 70 63 6f 64 65 73  penEphem opcodes
1bfb0 20 72 65 6c 61 74 65 64 20 74 6f 20 74 68 69 73   related to this
1bfc0 20 73 65 6c 65 63 74 20 2a 2f 0a 20 20 53 72 63   select */.  Src
1bfd0 4c 69 73 74 20 2a 70 53 72 63 3b 20 20 20 20 20  List *pSrc;     
1bfe0 20 20 20 20 2f 2a 20 54 68 65 20 46 52 4f 4d 20      /* The FROM 
1bff0 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72  clause */.  Expr
1c000 20 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20 20   *pWhere;       
1c010 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20     /* The WHERE 
1c020 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72  clause */.  Expr
1c030 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20  List *pGroupBy; 
1c040 20 20 20 2f 2a 20 54 68 65 20 47 52 4f 55 50 20     /* The GROUP 
1c050 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45  BY clause */.  E
1c060 78 70 72 20 2a 70 48 61 76 69 6e 67 3b 20 20 20  xpr *pHaving;   
1c070 20 20 20 20 20 20 2f 2a 20 54 68 65 20 48 41 56        /* The HAV
1c080 49 4e 47 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ING clause */.  
1c090 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72  ExprList *pOrder
1c0a0 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 4f 52  By;    /* The OR
1c0b0 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 2a 2f  DER BY clause */
1c0c0 0a 20 20 53 65 6c 65 63 74 20 2a 70 50 72 69 6f  .  Select *pPrio
1c0d0 72 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 72 69  r;        /* Pri
1c0e0 6f 72 20 73 65 6c 65 63 74 20 69 6e 20 61 20 63  or select in a c
1c0f0 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 20 73  ompound select s
1c100 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 53 65  tatement */.  Se
1c110 6c 65 63 74 20 2a 70 4e 65 78 74 3b 20 20 20 20  lect *pNext;    
1c120 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 73 65 6c       /* Next sel
1c130 65 63 74 20 74 6f 20 74 68 65 20 6c 65 66 74 20  ect to the left 
1c140 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 2a 2f  in a compound */
1c150 0a 20 20 45 78 70 72 20 2a 70 4c 69 6d 69 74 3b  .  Expr *pLimit;
1c160 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 49 4d            /* LIM
1c170 49 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e  IT expression. N
1c180 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73  ULL means not us
1c190 65 64 2e 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  ed. */.  Expr *p
1c1a0 4f 66 66 73 65 74 3b 20 20 20 20 20 20 20 20 20  Offset;         
1c1b0 2f 2a 20 4f 46 46 53 45 54 20 65 78 70 72 65 73  /* OFFSET expres
1c1c0 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73  sion. NULL means
1c1d0 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20   not used. */.  
1c1e0 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20 20 20  With *pWith;    
1c1f0 20 20 20 20 20 20 20 2f 2a 20 57 49 54 48 20 63         /* WITH c
1c200 6c 61 75 73 65 20 61 74 74 61 63 68 65 64 20 74  lause attached t
1c210 6f 20 74 68 69 73 20 73 65 6c 65 63 74 2e 20 4f  o this select. O
1c220 72 20 4e 55 4c 4c 2e 20 2a 2f 0a 7d 3b 0a 0a 2f  r NULL. */.};../
1c230 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
1c240 75 65 73 20 66 6f 72 20 53 65 6c 65 63 74 2e 73  ues for Select.s
1c250 65 6c 46 6c 61 67 73 2e 20 20 54 68 65 20 22 53  elFlags.  The "S
1c260 46 22 20 70 72 65 66 69 78 20 73 74 61 6e 64 73  F" prefix stands
1c270 20 66 6f 72 0a 2a 2a 20 22 53 65 6c 65 63 74 20   for.** "Select 
1c280 46 6c 61 67 22 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c  Flag"..**.** Val
1c290 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28  ue constraints (
1c2a0 61 6c 6c 20 63 68 65 63 6b 65 64 20 76 69 61 20  all checked via 
1c2b0 61 73 73 65 72 74 28 29 29 0a 2a 2a 20 20 20 20  assert()).**    
1c2c0 20 53 46 5f 48 61 73 41 67 67 20 20 20 20 20 3d   SF_HasAgg     =
1c2d0 3d 20 4e 43 5f 48 61 73 41 67 67 0a 2a 2a 20 20  = NC_HasAgg.**  
1c2e0 20 20 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20     SF_MinMaxAgg 
1c2f0 20 3d 3d 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67   == NC_MinMaxAgg
1c300 20 20 20 20 20 3d 3d 20 53 51 4c 49 54 45 5f 46       == SQLITE_F
1c310 55 4e 43 5f 4d 49 4e 4d 41 58 0a 2a 2a 20 20 20  UNC_MINMAX.**   
1c320 20 20 53 46 5f 46 69 78 65 64 4c 69 6d 69 74 20    SF_FixedLimit 
1c330 3d 3d 20 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d  == WHERE_USE_LIM
1c340 49 54 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  IT.*/.#define SF
1c350 5f 44 69 73 74 69 6e 63 74 20 20 20 20 20 20 20  _Distinct       
1c360 30 78 30 30 30 30 31 20 20 2f 2a 20 4f 75 74 70  0x00001  /* Outp
1c370 75 74 20 73 68 6f 75 6c 64 20 62 65 20 44 49 53  ut should be DIS
1c380 54 49 4e 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65  TINCT */.#define
1c390 20 53 46 5f 41 6c 6c 20 20 20 20 20 20 20 20 20   SF_All         
1c3a0 20 20 20 30 78 30 30 30 30 32 20 20 2f 2a 20 49     0x00002  /* I
1c3b0 6e 63 6c 75 64 65 73 20 74 68 65 20 41 4c 4c 20  ncludes the ALL 
1c3c0 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69  keyword */.#defi
1c3d0 6e 65 20 53 46 5f 52 65 73 6f 6c 76 65 64 20 20  ne SF_Resolved  
1c3e0 20 20 20 20 20 30 78 30 30 30 30 34 20 20 2f 2a       0x00004  /*
1c3f0 20 49 64 65 6e 74 69 66 69 65 72 73 20 68 61 76   Identifiers hav
1c400 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64 20  e been resolved 
1c410 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41 67  */.#define SF_Ag
1c420 67 72 65 67 61 74 65 20 20 20 20 20 20 30 78 30  gregate      0x0
1c430 30 30 30 38 20 20 2f 2a 20 43 6f 6e 74 61 69 6e  0008  /* Contain
1c440 73 20 61 67 67 20 66 75 6e 63 74 69 6f 6e 73 20  s agg functions 
1c450 6f 72 20 61 20 47 52 4f 55 50 20 42 59 20 2a 2f  or a GROUP BY */
1c460 0a 23 64 65 66 69 6e 65 20 53 46 5f 48 61 73 41  .#define SF_HasA
1c470 67 67 20 20 20 20 20 20 20 20 20 30 78 30 30 30  gg         0x000
1c480 31 30 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20  10  /* Contains 
1c490 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
1c4a0 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ons */.#define S
1c4b0 46 5f 55 73 65 73 45 70 68 65 6d 65 72 61 6c 20  F_UsesEphemeral 
1c4c0 20 30 78 30 30 30 32 30 20 20 2f 2a 20 55 73 65   0x00020  /* Use
1c4d0 73 20 74 68 65 20 4f 70 65 6e 45 70 68 65 6d 65  s the OpenEpheme
1c4e0 72 61 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 64  ral opcode */.#d
1c4f0 65 66 69 6e 65 20 53 46 5f 45 78 70 61 6e 64 65  efine SF_Expande
1c500 64 20 20 20 20 20 20 20 30 78 30 30 30 34 30 20  d       0x00040 
1c510 20 2f 2a 20 73 71 6c 69 74 65 33 53 65 6c 65 63   /* sqlite3Selec
1c520 74 45 78 70 61 6e 64 28 29 20 63 61 6c 6c 65 64  tExpand() called
1c530 20 6f 6e 20 74 68 69 73 20 2a 2f 0a 23 64 65 66   on this */.#def
1c540 69 6e 65 20 53 46 5f 48 61 73 54 79 70 65 49 6e  ine SF_HasTypeIn
1c550 66 6f 20 20 20 20 30 78 30 30 30 38 30 20 20 2f  fo    0x00080  /
1c560 2a 20 46 52 4f 4d 20 73 75 62 71 75 65 72 69 65  * FROM subquerie
1c570 73 20 68 61 76 65 20 54 61 62 6c 65 20 6d 65 74  s have Table met
1c580 61 64 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e 65  adata */.#define
1c590 20 53 46 5f 43 6f 6d 70 6f 75 6e 64 20 20 20 20   SF_Compound    
1c5a0 20 20 20 30 78 30 30 31 30 30 20 20 2f 2a 20 50     0x00100  /* P
1c5b0 61 72 74 20 6f 66 20 61 20 63 6f 6d 70 6f 75 6e  art of a compoun
1c5c0 64 20 71 75 65 72 79 20 2a 2f 0a 23 64 65 66 69  d query */.#defi
1c5d0 6e 65 20 53 46 5f 56 61 6c 75 65 73 20 20 20 20  ne SF_Values    
1c5e0 20 20 20 20 20 30 78 30 30 32 30 30 20 20 2f 2a       0x00200  /*
1c5f0 20 53 79 6e 74 68 65 73 69 7a 65 64 20 66 72 6f   Synthesized fro
1c600 6d 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65 20  m VALUES clause 
1c610 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 75  */.#define SF_Mu
1c620 6c 74 69 56 61 6c 75 65 20 20 20 20 20 30 78 30  ltiValue     0x0
1c630 30 34 30 30 20 20 2f 2a 20 53 69 6e 67 6c 65 20  0400  /* Single 
1c640 56 41 4c 55 45 53 20 74 65 72 6d 20 77 69 74 68  VALUES term with
1c650 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a   multiple rows *
1c660 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4e 65 73  /.#define SF_Nes
1c670 74 65 64 46 72 6f 6d 20 20 20 20 20 30 78 30 30  tedFrom     0x00
1c680 38 30 30 20 20 2f 2a 20 50 61 72 74 20 6f 66 20  800  /* Part of 
1c690 61 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20  a parenthesized 
1c6a0 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 23  FROM clause */.#
1c6b0 64 65 66 69 6e 65 20 53 46 5f 4d 69 6e 4d 61 78  define SF_MinMax
1c6c0 41 67 67 20 20 20 20 20 20 30 78 30 31 30 30 30  Agg      0x01000
1c6d0 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 63    /* Aggregate c
1c6e0 6f 6e 74 61 69 6e 69 6e 67 20 6d 69 6e 28 29 20  ontaining min() 
1c6f0 6f 72 20 6d 61 78 28 29 20 2a 2f 0a 23 64 65 66  or max() */.#def
1c700 69 6e 65 20 53 46 5f 52 65 63 75 72 73 69 76 65  ine SF_Recursive
1c710 20 20 20 20 20 20 30 78 30 32 30 30 30 20 20 2f        0x02000  /
1c720 2a 20 54 68 65 20 72 65 63 75 72 73 69 76 65 20  * The recursive 
1c730 70 61 72 74 20 6f 66 20 61 20 72 65 63 75 72 73  part of a recurs
1c740 69 76 65 20 43 54 45 20 2a 2f 0a 23 64 65 66 69  ive CTE */.#defi
1c750 6e 65 20 53 46 5f 46 69 78 65 64 4c 69 6d 69 74  ne SF_FixedLimit
1c760 20 20 20 20 20 30 78 30 34 30 30 30 20 20 2f 2a       0x04000  /*
1c770 20 6e 53 65 6c 65 63 74 52 6f 77 20 73 65 74 20   nSelectRow set 
1c780 62 79 20 61 20 63 6f 6e 73 74 61 6e 74 20 4c 49  by a constant LI
1c790 4d 49 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  MIT */.#define S
1c7a0 46 5f 4d 61 79 62 65 43 6f 6e 76 65 72 74 20 20  F_MaybeConvert  
1c7b0 20 30 78 30 38 30 30 30 20 20 2f 2a 20 4e 65 65   0x08000  /* Nee
1c7c0 64 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e  d convertCompoun
1c7d0 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72  dSelectToSubquer
1c7e0 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  y() */.#define S
1c7f0 46 5f 43 6f 6e 76 65 72 74 65 64 20 20 20 20 20  F_Converted     
1c800 20 30 78 31 30 30 30 30 20 20 2f 2a 20 42 79 20   0x10000  /* By 
1c810 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53  convertCompoundS
1c820 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79 28  electToSubquery(
1c830 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  ) */.#define SF_
1c840 49 6e 63 6c 75 64 65 48 69 64 64 65 6e 20 20 30  IncludeHidden  0
1c850 78 32 30 30 30 30 20 20 2f 2a 20 49 6e 63 6c 75  x20000  /* Inclu
1c860 64 65 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e  de hidden column
1c870 73 20 69 6e 20 6f 75 74 70 75 74 20 2a 2f 0a 0a  s in output */..
1c880 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c  ./*.** The resul
1c890 74 73 20 6f 66 20 61 20 53 45 4c 45 43 54 20 63  ts of a SELECT c
1c8a0 61 6e 20 62 65 20 64 69 73 74 72 69 62 75 74 65  an be distribute
1c8b0 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79  d in several way
1c8c0 73 2c 20 61 73 20 64 65 66 69 6e 65 64 0a 2a 2a  s, as defined.**
1c8d0 20 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66   by one of the f
1c8e0 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 2e  ollowing macros.
1c8f0 20 20 54 68 65 20 22 53 52 54 22 20 70 72 65 66    The "SRT" pref
1c900 69 78 20 6d 65 61 6e 73 20 22 53 45 4c 45 43 54  ix means "SELECT
1c910 20 52 65 73 75 6c 74 0a 2a 2a 20 54 79 70 65 22   Result.** Type"
1c920 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1c930 55 6e 69 6f 6e 20 20 20 20 20 20 20 53 74 6f 72  Union       Stor
1c940 65 20 72 65 73 75 6c 74 73 20 61 73 20 61 20 6b  e results as a k
1c950 65 79 20 69 6e 20 61 20 74 65 6d 70 6f 72 61 72  ey in a temporar
1c960 79 20 69 6e 64 65 78 0a 2a 2a 20 20 20 20 20 20  y index.**      
1c970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1c980 64 65 6e 74 69 66 69 65 64 20 62 79 20 70 44 65  dentified by pDe
1c990 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a  st->iSDParm..**.
1c9a0 2a 2a 20 20 20 20 20 53 52 54 5f 45 78 63 65 70  **     SRT_Excep
1c9b0 74 20 20 20 20 20 20 52 65 6d 6f 76 65 20 72 65  t      Remove re
1c9c0 73 75 6c 74 73 20 66 72 6f 6d 20 74 68 65 20 74  sults from the t
1c9d0 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78 20 70  emporary index p
1c9e0 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a  Dest->iSDParm..*
1c9f0 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 78 69  *.**     SRT_Exi
1ca00 73 74 73 20 20 20 20 20 20 53 74 6f 72 65 20 61  sts      Store a
1ca10 20 31 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c   1 in memory cel
1ca20 6c 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  l pDest->iSDParm
1ca30 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 0a 2a   if the result.*
1ca40 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1ca50 20 20 20 20 20 20 73 65 74 20 69 73 20 6e 6f 74        set is not
1ca60 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 20 20   empty..**.**   
1ca70 20 20 53 52 54 5f 44 69 73 63 61 72 64 20 20 20    SRT_Discard   
1ca80 20 20 54 68 72 6f 77 20 74 68 65 20 72 65 73 75    Throw the resu
1ca90 6c 74 73 20 61 77 61 79 2e 20 20 54 68 69 73 20  lts away.  This 
1caa0 69 73 20 75 73 65 64 20 62 79 20 53 45 4c 45 43  is used by SELEC
1cab0 54 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  T.**            
1cac0 20 20 20 20 20 20 20 20 20 73 74 61 74 65 6d 65           stateme
1cad0 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69 67 67  nts within trigg
1cae0 65 72 73 20 77 68 6f 73 65 20 6f 6e 6c 79 20 70  ers whose only p
1caf0 75 72 70 6f 73 65 20 69 73 0a 2a 2a 20 20 20 20  urpose is.**    
1cb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb10 20 74 68 65 20 73 69 64 65 2d 65 66 66 65 63 74   the side-effect
1cb20 73 20 6f 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a  s of functions..
1cb30 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 65  **.** All of the
1cb40 20 61 62 6f 76 65 20 61 72 65 20 66 72 65 65 20   above are free 
1cb50 74 6f 20 69 67 6e 6f 72 65 20 74 68 65 69 72 20  to ignore their 
1cb60 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e  ORDER BY clause.
1cb70 20 54 68 6f 73 65 20 74 68 61 74 0a 2a 2a 20 66   Those that.** f
1cb80 6f 6c 6c 6f 77 20 6d 75 73 74 20 68 6f 6e 6f 72  ollow must honor
1cb90 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   the ORDER BY cl
1cba0 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ause..**.**     
1cbb0 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20  SRT_Output      
1cbc0 47 65 6e 65 72 61 74 65 20 61 20 72 6f 77 20 6f  Generate a row o
1cbd0 66 20 6f 75 74 70 75 74 20 28 75 73 69 6e 67 20  f output (using 
1cbe0 74 68 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  the OP_ResultRow
1cbf0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1cc00 20 20 20 20 20 20 20 20 6f 70 63 6f 64 65 29 20          opcode) 
1cc10 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e 20  for each row in 
1cc20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e 0a  the result set..
1cc30 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4d 65  **.**     SRT_Me
1cc40 6d 20 20 20 20 20 20 20 20 20 4f 6e 6c 79 20 76  m         Only v
1cc50 61 6c 69 64 20 69 66 20 74 68 65 20 72 65 73 75  alid if the resu
1cc60 6c 74 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63  lt is a single c
1cc70 6f 6c 75 6d 6e 2e 0a 2a 2a 20 20 20 20 20 20 20  olumn..**       
1cc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74                St
1cc90 6f 72 65 20 74 68 65 20 66 69 72 73 74 20 63 6f  ore the first co
1cca0 6c 75 6d 6e 20 6f 66 20 74 68 65 20 66 69 72 73  lumn of the firs
1ccb0 74 20 72 65 73 75 6c 74 20 72 6f 77 0a 2a 2a 20  t result row.** 
1ccc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ccd0 20 20 20 20 69 6e 20 72 65 67 69 73 74 65 72 20      in register 
1cce0 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 74  pDest->iSDParm t
1ccf0 68 65 6e 20 61 62 61 6e 64 6f 6e 20 74 68 65 20  hen abandon the 
1cd00 72 65 73 74 0a 2a 2a 20 20 20 20 20 20 20 20 20  rest.**         
1cd10 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 20 74              of t
1cd20 68 65 20 71 75 65 72 79 2e 20 20 54 68 69 73 20  he query.  This 
1cd30 64 65 73 74 69 6e 61 74 69 6f 6e 20 69 6d 70 6c  destination impl
1cd40 69 65 73 20 22 4c 49 4d 49 54 20 31 22 2e 0a 2a  ies "LIMIT 1"..*
1cd50 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 53 65 74  *.**     SRT_Set
1cd60 20 20 20 20 20 20 20 20 20 54 68 65 20 72 65 73           The res
1cd70 75 6c 74 20 6d 75 73 74 20 62 65 20 61 20 73 69  ult must be a si
1cd80 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20 20 53 74  ngle column.  St
1cd90 6f 72 65 20 65 61 63 68 0a 2a 2a 20 20 20 20 20  ore each.**     
1cda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cdb0 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 61 73  row of result as
1cdc0 20 74 68 65 20 6b 65 79 20 69 6e 20 74 61 62 6c   the key in tabl
1cdd0 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
1cde0 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  ..**            
1cdf0 20 20 20 20 20 20 20 20 20 41 70 70 6c 79 20 74           Apply t
1ce00 68 65 20 61 66 66 69 6e 69 74 79 20 70 44 65 73  he affinity pDes
1ce10 74 2d 3e 61 66 66 53 64 73 74 20 62 65 66 6f 72  t->affSdst befor
1ce20 65 20 73 74 6f 72 69 6e 67 0a 2a 2a 20 20 20 20  e storing.**    
1ce30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce40 20 72 65 73 75 6c 74 73 2e 20 20 55 73 65 64 20   results.  Used 
1ce50 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 22 49 4e  to implement "IN
1ce60 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 0a   (SELECT ...)"..
1ce70 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 70  **.**     SRT_Ep
1ce80 68 65 6d 54 61 62 20 20 20 20 43 72 65 61 74 65  hemTab    Create
1ce90 20 61 6e 20 74 65 6d 70 6f 72 61 72 79 20 74 61   an temporary ta
1cea0 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ble pDest->iSDPa
1ceb0 72 6d 20 61 6e 64 20 73 74 6f 72 65 0a 2a 2a 20  rm and store.** 
1cec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ced0 20 20 20 20 74 68 65 20 72 65 73 75 6c 74 20 74      the result t
1cee0 68 65 72 65 2e 20 54 68 65 20 63 75 72 73 6f 72  here. The cursor
1cef0 20 69 73 20 6c 65 66 74 20 6f 70 65 6e 20 61 66   is left open af
1cf00 74 65 72 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ter.**          
1cf10 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1cf20 6e 69 6e 67 2e 20 20 54 68 69 73 20 69 73 20 6c  ning.  This is l
1cf30 69 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 65 78  ike SRT_Table ex
1cf40 63 65 70 74 20 74 68 61 74 0a 2a 2a 20 20 20 20  cept that.**    
1cf50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf60 20 74 68 69 73 20 64 65 73 74 69 6e 61 74 69 6f   this destinatio
1cf70 6e 20 75 73 65 73 20 4f 50 5f 4f 70 65 6e 45 70  n uses OP_OpenEp
1cf80 68 65 6d 65 72 61 6c 20 74 6f 20 63 72 65 61 74  hemeral to creat
1cf90 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
1cfa0 20 20 20 20 20 20 20 20 20 74 68 65 20 74 61 62           the tab
1cfb0 6c 65 20 66 69 72 73 74 2e 0a 2a 2a 0a 2a 2a 20  le first..**.** 
1cfc0 20 20 20 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e      SRT_Coroutin
1cfd0 65 20 20 20 47 65 6e 65 72 61 74 65 20 61 20 63  e   Generate a c
1cfe0 6f 2d 72 6f 75 74 69 6e 65 20 74 68 61 74 20 72  o-routine that r
1cff0 65 74 75 72 6e 73 20 61 20 6e 65 77 20 72 6f 77  eturns a new row
1d000 20 6f 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20   of.**          
1d010 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
1d020 74 73 20 65 61 63 68 20 74 69 6d 65 20 69 74 20  ts each time it 
1d030 69 73 20 69 6e 76 6f 6b 65 64 2e 20 20 54 68 65  is invoked.  The
1d040 20 65 6e 74 72 79 20 70 6f 69 6e 74 0a 2a 2a 20   entry point.** 
1d050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d060 20 20 20 20 6f 66 20 74 68 65 20 63 6f 2d 72 6f      of the co-ro
1d070 75 74 69 6e 65 20 69 73 20 73 74 6f 72 65 64 20  utine is stored 
1d080 69 6e 20 72 65 67 69 73 74 65 72 20 70 44 65 73  in register pDes
1d090 74 2d 3e 69 53 44 50 61 72 6d 0a 2a 2a 20 20 20  t->iSDParm.**   
1d0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d0b0 20 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74    and the result
1d0c0 20 72 6f 77 20 69 73 20 73 74 6f 72 65 64 20 69   row is stored i
1d0d0 6e 20 70 44 65 73 74 2d 3e 6e 44 65 73 74 20 72  n pDest->nDest r
1d0e0 65 67 69 73 74 65 72 73 0a 2a 2a 20 20 20 20 20  egisters.**     
1d0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d100 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 70 44  starting with pD
1d110 65 73 74 2d 3e 69 53 64 73 74 2e 0a 2a 2a 0a 2a  est->iSdst..**.*
1d120 2a 20 20 20 20 20 53 52 54 5f 54 61 62 6c 65 20  *     SRT_Table 
1d130 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73 75        Store resu
1d140 6c 74 73 20 69 6e 20 74 65 6d 70 6f 72 61 72 79  lts in temporary
1d150 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53   table pDest->iS
1d160 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 53 52  DParm..**     SR
1d170 54 5f 46 69 66 6f 20 20 20 20 20 20 20 20 54 68  T_Fifo        Th
1d180 69 73 20 69 73 20 6c 69 6b 65 20 53 52 54 5f 45  is is like SRT_E
1d190 70 68 65 6d 54 61 62 20 65 78 63 65 70 74 20 74  phemTab except t
1d1a0 68 61 74 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a  hat the table.**
1d1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d1c0 20 20 20 20 20 69 73 20 61 73 73 75 6d 65 64 20       is assumed 
1d1d0 74 6f 20 61 6c 72 65 61 64 79 20 62 65 20 6f 70  to already be op
1d1e0 65 6e 2e 20 20 53 52 54 5f 46 69 66 6f 20 68 61  en.  SRT_Fifo ha
1d1f0 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  s.**            
1d200 20 20 20 20 20 20 20 20 20 74 68 65 20 61 64 64           the add
1d210 69 74 69 6f 6e 61 6c 20 70 72 6f 70 65 72 74 79  itional property
1d220 20 6f 66 20 62 65 69 6e 67 20 61 62 6c 65 20 74   of being able t
1d230 6f 20 69 67 6e 6f 72 65 0a 2a 2a 20 20 20 20 20  o ignore.**     
1d240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d250 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  the ORDER BY cla
1d260 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  use..**.**     S
1d270 52 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20 53  RT_DistFifo    S
1d280 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20  tore results in 
1d290 61 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  a temporary tabl
1d2a0 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
1d2b0 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  ..**            
1d2c0 20 20 20 20 20 20 20 20 20 42 75 74 20 61 6c 73           But als
1d2d0 6f 20 75 73 65 20 74 65 6d 70 6f 72 61 72 79 20  o use temporary 
1d2e0 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44  table pDest->iSD
1d2f0 50 61 72 6d 2b 31 20 61 73 0a 2a 2a 20 20 20 20  Parm+1 as.**    
1d300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d310 20 61 20 72 65 63 6f 72 64 20 6f 66 20 61 6c 6c   a record of all
1d320 20 70 72 69 6f 72 20 72 65 73 75 6c 74 73 20 61   prior results a
1d330 6e 64 20 69 67 6e 6f 72 65 20 61 6e 79 20 64 75  nd ignore any du
1d340 70 6c 69 63 61 74 65 0a 2a 2a 20 20 20 20 20 20  plicate.**      
1d350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1d360 6f 77 73 2e 20 20 4e 61 6d 65 20 6d 65 61 6e 73  ows.  Name means
1d370 3a 20 20 22 44 69 73 74 69 6e 63 74 20 46 69 66  :  "Distinct Fif
1d380 6f 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  o"..**.**     SR
1d390 54 5f 51 75 65 75 65 20 20 20 20 20 20 20 53 74  T_Queue       St
1d3a0 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70  ore results in p
1d3b0 72 69 6f 72 69 74 79 20 71 75 65 75 65 20 70 44  riority queue pD
1d3c0 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 28 72 65  est->iSDParm (re
1d3d0 61 6c 6c 79 0a 2a 2a 20 20 20 20 20 20 20 20 20  ally.**         
1d3e0 20 20 20 20 20 20 20 20 20 20 20 20 61 6e 20 69              an i
1d3f0 6e 64 65 78 29 2e 20 20 41 70 70 65 6e 64 20 61  ndex).  Append a
1d400 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72   sequence number
1d410 20 73 6f 20 74 68 61 74 20 61 6c 6c 20 65 6e 74   so that all ent
1d420 72 69 65 73 0a 2a 2a 20 20 20 20 20 20 20 20 20  ries.**         
1d430 20 20 20 20 20 20 20 20 20 20 20 20 61 72 65 20              are 
1d440 64 69 73 74 69 6e 63 74 2e 0a 2a 2a 0a 2a 2a 20  distinct..**.** 
1d450 20 20 20 20 53 52 54 5f 44 69 73 74 51 75 65 75      SRT_DistQueu
1d460 65 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74  e   Store result
1d470 73 20 69 6e 20 70 72 69 6f 72 69 74 79 20 71 75  s in priority qu
1d480 65 75 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61  eue pDest->iSDPa
1d490 72 6d 20 6f 6e 6c 79 20 69 66 0a 2a 2a 20 20 20  rm only if.**   
1d4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d4b0 20 20 74 68 65 20 73 61 6d 65 20 72 65 63 6f 72    the same recor
1d4c0 64 20 68 61 73 20 6e 65 76 65 72 20 62 65 65 6e  d has never been
1d4d0 20 73 74 6f 72 65 64 20 62 65 66 6f 72 65 2e 20   stored before. 
1d4e0 20 54 68 65 0a 2a 2a 20 20 20 20 20 20 20 20 20   The.**         
1d4f0 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65              inde
1d500 78 20 61 74 20 70 44 65 73 74 2d 3e 69 53 44 50  x at pDest->iSDP
1d510 61 72 6d 2b 31 20 68 6f 6c 64 20 61 6c 6c 20 70  arm+1 hold all p
1d520 72 69 6f 72 20 73 74 6f 72 65 73 2e 0a 2a 2f 0a  rior stores..*/.
1d530 23 64 65 66 69 6e 65 20 53 52 54 5f 55 6e 69 6f  #define SRT_Unio
1d540 6e 20 20 20 20 20 20 20 20 31 20 20 2f 2a 20 53  n        1  /* S
1d550 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 6b  tore result as k
1d560 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20  eys in an index 
1d570 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45  */.#define SRT_E
1d580 78 63 65 70 74 20 20 20 20 20 20 20 32 20 20 2f  xcept       2  /
1d590 2a 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 20  * Remove result 
1d5a0 66 72 6f 6d 20 61 20 55 4e 49 4f 4e 20 69 6e 64  from a UNION ind
1d5b0 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ex */.#define SR
1d5c0 54 5f 45 78 69 73 74 73 20 20 20 20 20 20 20 33  T_Exists       3
1d5d0 20 20 2f 2a 20 53 74 6f 72 65 20 31 20 69 66 20    /* Store 1 if 
1d5e0 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 6e 6f  the result is no
1d5f0 74 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69  t empty */.#defi
1d600 6e 65 20 53 52 54 5f 44 69 73 63 61 72 64 20 20  ne SRT_Discard  
1d610 20 20 20 20 34 20 20 2f 2a 20 44 6f 20 6e 6f 74      4  /* Do not
1d620 20 73 61 76 65 20 74 68 65 20 72 65 73 75 6c 74   save the result
1d630 73 20 61 6e 79 77 68 65 72 65 20 2a 2f 0a 23 64  s anywhere */.#d
1d640 65 66 69 6e 65 20 53 52 54 5f 46 69 66 6f 20 20  efine SRT_Fifo  
1d650 20 20 20 20 20 20 20 35 20 20 2f 2a 20 53 74 6f         5  /* Sto
1d660 72 65 20 72 65 73 75 6c 74 20 61 73 20 64 61 74  re result as dat
1d670 61 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61  a with an automa
1d680 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65  tic rowid */.#de
1d690 66 69 6e 65 20 53 52 54 5f 44 69 73 74 46 69 66  fine SRT_DistFif
1d6a0 6f 20 20 20 20 20 36 20 20 2f 2a 20 4c 69 6b 65  o     6  /* Like
1d6b0 20 53 52 54 5f 46 69 66 6f 2c 20 62 75 74 20 75   SRT_Fifo, but u
1d6c0 6e 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e  nique results on
1d6d0 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ly */.#define SR
1d6e0 54 5f 51 75 65 75 65 20 20 20 20 20 20 20 20 37  T_Queue        7
1d6f0 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
1d700 74 20 69 6e 20 61 6e 20 71 75 65 75 65 20 2a 2f  t in an queue */
1d710 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73  .#define SRT_Dis
1d720 74 51 75 65 75 65 20 20 20 20 38 20 20 2f 2a 20  tQueue    8  /* 
1d730 4c 69 6b 65 20 53 52 54 5f 51 75 65 75 65 2c 20  Like SRT_Queue, 
1d740 62 75 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c  but unique resul
1d750 74 73 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f 2a 20 54  ts only */../* T
1d760 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
1d770 73 65 20 69 73 20 69 67 6e 6f 72 65 64 20 66 6f  se is ignored fo
1d780 72 20 61 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f  r all of the abo
1d790 76 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 67  ve */.#define Ig
1d7a0 6e 6f 72 61 62 6c 65 4f 72 64 65 72 62 79 28 58  norableOrderby(X
1d7b0 29 20 28 28 58 2d 3e 65 44 65 73 74 29 3c 3d 53  ) ((X->eDest)<=S
1d7c0 52 54 5f 44 69 73 74 51 75 65 75 65 29 0a 0a 23  RT_DistQueue)..#
1d7d0 64 65 66 69 6e 65 20 53 52 54 5f 4f 75 74 70 75  define SRT_Outpu
1d7e0 74 20 20 20 20 20 20 20 39 20 20 2f 2a 20 4f 75  t       9  /* Ou
1d7f0 74 70 75 74 20 65 61 63 68 20 72 6f 77 20 6f 66  tput each row of
1d800 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69   result */.#defi
1d810 6e 65 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20  ne SRT_Mem      
1d820 20 20 20 31 30 20 20 2f 2a 20 53 74 6f 72 65 20     10  /* Store 
1d830 72 65 73 75 6c 74 20 69 6e 20 61 20 6d 65 6d 6f  result in a memo
1d840 72 79 20 63 65 6c 6c 20 2a 2f 0a 23 64 65 66 69  ry cell */.#defi
1d850 6e 65 20 53 52 54 5f 53 65 74 20 20 20 20 20 20  ne SRT_Set      
1d860 20 20 20 31 31 20 20 2f 2a 20 53 74 6f 72 65 20     11  /* Store 
1d870 72 65 73 75 6c 74 73 20 61 73 20 6b 65 79 73 20  results as keys 
1d880 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23  in an index */.#
1d890 64 65 66 69 6e 65 20 53 52 54 5f 45 70 68 65 6d  define SRT_Ephem
1d8a0 54 61 62 20 20 20 20 31 32 20 20 2f 2a 20 43 72  Tab    12  /* Cr
1d8b0 65 61 74 65 20 74 72 61 6e 73 69 65 6e 74 20 74  eate transient t
1d8c0 61 62 20 61 6e 64 20 73 74 6f 72 65 20 6c 69 6b  ab and store lik
1d8d0 65 20 53 52 54 5f 54 61 62 6c 65 20 2a 2f 0a 23  e SRT_Table */.#
1d8e0 64 65 66 69 6e 65 20 53 52 54 5f 43 6f 72 6f 75  define SRT_Corou
1d8f0 74 69 6e 65 20 20 20 31 33 20 20 2f 2a 20 47 65  tine   13  /* Ge
1d900 6e 65 72 61 74 65 20 61 20 73 69 6e 67 6c 65 20  nerate a single 
1d910 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f  row of result */
1d920 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 54 61 62  .#define SRT_Tab
1d930 6c 65 20 20 20 20 20 20 20 31 34 20 20 2f 2a 20  le       14  /* 
1d940 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20  Store result as 
1d950 64 61 74 61 20 77 69 74 68 20 61 6e 20 61 75 74  data with an aut
1d960 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a  omatic rowid */.
1d970 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
1d980 63 65 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63  ce of this objec
1d990 74 20 64 65 73 63 72 69 62 65 73 20 77 68 65 72  t describes wher
1d9a0 65 20 74 6f 20 70 75 74 20 6f 66 20 74 68 65 20  e to put of the 
1d9b0 72 65 73 75 6c 74 73 20 6f 66 0a 2a 2a 20 61 20  results of.** a 
1d9c0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
1d9d0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65  ..*/.struct Sele
1d9e0 63 74 44 65 73 74 20 7b 0a 20 20 75 38 20 65 44  ctDest {.  u8 eD
1d9f0 65 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  est;            
1da00 2f 2a 20 48 6f 77 20 74 6f 20 64 69 73 70 6f 73  /* How to dispos
1da10 65 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73  e of the results
1da20 2e 20 20 4f 6e 20 6f 66 20 53 52 54 5f 2a 20 61  .  On of SRT_* a
1da30 62 6f 76 65 2e 20 2a 2f 0a 20 20 63 68 61 72 20  bove. */.  char 
1da40 2a 7a 41 66 66 53 64 73 74 3b 20 20 20 20 20 20  *zAffSdst;      
1da50 2f 2a 20 41 66 66 69 6e 69 74 79 20 75 73 65 64  /* Affinity used
1da60 20 77 68 65 6e 20 65 44 65 73 74 3d 3d 53 52 54   when eDest==SRT
1da70 5f 53 65 74 20 2a 2f 0a 20 20 69 6e 74 20 69 53  _Set */.  int iS
1da80 44 50 61 72 6d 3b 20 20 20 20 20 20 20 20 20 2f  DParm;         /
1da90 2a 20 41 20 70 61 72 61 6d 65 74 65 72 20 75 73  * A parameter us
1daa0 65 64 20 62 79 20 74 68 65 20 65 44 65 73 74 20  ed by the eDest 
1dab0 64 69 73 70 6f 73 61 6c 20 6d 65 74 68 6f 64 20  disposal method 
1dac0 2a 2f 0a 20 20 69 6e 74 20 69 53 64 73 74 3b 20  */.  int iSdst; 
1dad0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 61 73            /* Bas
1dae0 65 20 72 65 67 69 73 74 65 72 20 77 68 65 72 65  e register where
1daf0 20 72 65 73 75 6c 74 73 20 61 72 65 20 77 72 69   results are wri
1db00 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  tten */.  int nS
1db10 64 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  dst;           /
1db20 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 67 69  * Number of regi
1db30 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20  sters allocated 
1db40 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
1db50 4f 72 64 65 72 42 79 3b 20 20 2f 2a 20 4b 65 79  OrderBy;  /* Key
1db60 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 53 52 54   columns for SRT
1db70 5f 51 75 65 75 65 20 61 6e 64 20 53 52 54 5f 44  _Queue and SRT_D
1db80 69 73 74 51 75 65 75 65 20 2a 2f 0a 7d 3b 0a 0a  istQueue */.};..
1db90 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67 20 63 6f 64  /*.** During cod
1dba0 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20  e generation of 
1dbb0 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20  statements that 
1dbc0 64 6f 20 69 6e 73 65 72 74 73 20 69 6e 74 6f 20  do inserts into 
1dbd0 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2a 2a  AUTOINCREMENT.**
1dbe0 20 74 61 62 6c 65 73 2c 20 74 68 65 20 66 6f 6c   tables, the fol
1dbf0 6c 6f 77 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69  lowing informati
1dc00 6f 6e 20 69 73 20 61 74 74 61 63 68 65 64 20 74  on is attached t
1dc10 6f 20 74 68 65 20 54 61 62 6c 65 2e 75 2e 61 75  o the Table.u.au
1dc20 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74  toInc.p.** point
1dc30 65 72 20 6f 66 20 65 61 63 68 20 61 75 74 6f 69  er of each autoi
1dc40 6e 63 72 65 6d 65 6e 74 20 74 61 62 6c 65 20 74  ncrement table t
1dc50 6f 20 72 65 63 6f 72 64 20 73 6f 6d 65 20 73 69  o record some si
1dc60 64 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74  de information t
1dc70 68 61 74 0a 2a 2a 20 74 68 65 20 63 6f 64 65 20  hat.** the code 
1dc80 67 65 6e 65 72 61 74 6f 72 20 6e 65 65 64 73 2e  generator needs.
1dc90 20 20 57 65 20 68 61 76 65 20 74 6f 20 6b 65 65    We have to kee
1dca0 70 20 70 65 72 2d 74 61 62 6c 65 20 61 75 74 6f  p per-table auto
1dcb0 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66  increment.** inf
1dcc0 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 63 61 73 65  ormation in case
1dcd0 20 69 6e 73 65 72 74 73 20 61 72 65 20 64 6f 6e   inserts are don
1dce0 65 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72  e within trigger
1dcf0 73 2e 20 20 54 72 69 67 67 65 72 73 20 64 6f 20  s.  Triggers do 
1dd00 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20  not.** normally 
1dd10 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 69 72  coordinate their
1dd20 20 61 63 74 69 76 69 74 69 65 73 2c 20 62 75 74   activities, but
1dd30 20 77 65 20 64 6f 20 6e 65 65 64 20 74 6f 20 63   we do need to c
1dd40 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 0a 2a 2a  oordinate the.**
1dd50 20 6c 6f 61 64 69 6e 67 20 61 6e 64 20 73 61 76   loading and sav
1dd60 69 6e 67 20 6f 66 20 61 75 74 6f 69 6e 63 72 65  ing of autoincre
1dd70 6d 65 6e 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ment information
1dd80 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 6f  ..*/.struct Auto
1dd90 69 6e 63 49 6e 66 6f 20 7b 0a 20 20 41 75 74 6f  incInfo {.  Auto
1dda0 69 6e 63 49 6e 66 6f 20 2a 70 4e 65 78 74 3b 20  incInfo *pNext; 
1ddb0 20 20 2f 2a 20 4e 65 78 74 20 69 6e 66 6f 20 62    /* Next info b
1ddc0 6c 6f 63 6b 20 69 6e 20 61 20 6c 69 73 74 20 6f  lock in a list o
1ddd0 66 20 74 68 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20  f them all */.  
1dde0 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20  Table *pTab;    
1ddf0 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 74        /* Table t
1de00 68 69 73 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 72  his info block r
1de10 65 66 65 72 73 20 74 6f 20 2a 2f 0a 20 20 69 6e  efers to */.  in
1de20 74 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20  t iDb;          
1de30 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20      /* Index in 
1de40 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66  sqlite3.aDb[] of
1de50 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e   database holdin
1de60 67 20 70 54 61 62 20 2a 2f 0a 20 20 69 6e 74 20  g pTab */.  int 
1de70 72 65 67 43 74 72 3b 20 20 20 20 20 20 20 20 20  regCtr;         
1de80 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69    /* Memory regi
1de90 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 74 68 65  ster holding the
1dea0 20 72 6f 77 69 64 20 63 6f 75 6e 74 65 72 20 2a   rowid counter *
1deb0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65  /.};../*.** Size
1dec0 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63   of the column c
1ded0 61 63 68 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ache.*/.#ifndef 
1dee0 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48  SQLITE_N_COLCACH
1def0 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  E.# define SQLIT
1df00 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 20 31 30 0a  E_N_COLCACHE 10.
1df10 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 74  #endif../*.** At
1df20 20 6c 65 61 73 74 20 6f 6e 65 20 69 6e 73 74 61   least one insta
1df30 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
1df40 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69  wing structure i
1df50 73 20 63 72 65 61 74 65 64 20 66 6f 72 20 65 61  s created for ea
1df60 63 68 0a 2a 2a 20 74 72 69 67 67 65 72 20 74 68  ch.** trigger th
1df70 61 74 20 6d 61 79 20 62 65 20 66 69 72 65 64 20  at may be fired 
1df80 77 68 69 6c 65 20 70 61 72 73 69 6e 67 20 61 6e  while parsing an
1df90 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 20   INSERT, UPDATE 
1dfa0 6f 72 20 44 45 4c 45 54 45 0a 2a 2a 20 73 74 61  or DELETE.** sta
1dfb0 74 65 6d 65 6e 74 2e 20 41 6c 6c 20 73 75 63 68  tement. All such
1dfc0 20 6f 62 6a 65 63 74 73 20 61 72 65 20 73 74 6f   objects are sto
1dfd0 72 65 64 20 69 6e 20 74 68 65 20 6c 69 6e 6b 65  red in the linke
1dfe0 64 20 6c 69 73 74 20 68 65 61 64 65 64 20 61 74  d list headed at
1dff0 0a 2a 2a 20 50 61 72 73 65 2e 70 54 72 69 67 67  .** Parse.pTrigg
1e000 65 72 50 72 67 20 61 6e 64 20 64 65 6c 65 74 65  erPrg and delete
1e010 64 20 6f 6e 63 65 20 73 74 61 74 65 6d 65 6e 74  d once statement
1e020 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 68 61 73   compilation has
1e030 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65 74   been.** complet
1e040 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62 65  ed..**.** A Vdbe
1e050 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 61   sub-program tha
1e060 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65  t implements the
1e070 20 62 6f 64 79 20 61 6e 64 20 57 48 45 4e 20 63   body and WHEN c
1e080 6c 61 75 73 65 20 6f 66 20 74 72 69 67 67 65 72  lause of trigger
1e090 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e 70  .** TriggerPrg.p
1e0a0 54 72 69 67 67 65 72 2c 20 61 73 73 75 6d 69 6e  Trigger, assumin
1e0b0 67 20 61 20 64 65 66 61 75 6c 74 20 4f 4e 20 43  g a default ON C
1e0c0 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 6f  ONFLICT clause o
1e0d0 66 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e  f.** TriggerPrg.
1e0e0 6f 72 63 6f 6e 66 2c 20 69 73 20 73 74 6f 72 65  orconf, is store
1e0f0 64 20 69 6e 20 74 68 65 20 54 72 69 67 67 65 72  d in the Trigger
1e100 50 72 67 2e 70 50 72 6f 67 72 61 6d 20 76 61 72  Prg.pProgram var
1e110 69 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 50 61  iable..** The Pa
1e120 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20  rse.pTriggerPrg 
1e130 6c 69 73 74 20 6e 65 76 65 72 20 63 6f 6e 74 61  list never conta
1e140 69 6e 73 20 74 77 6f 20 65 6e 74 72 69 65 73 20  ins two entries 
1e150 77 69 74 68 20 74 68 65 20 73 61 6d 65 0a 2a 2a  with the same.**
1e160 20 76 61 6c 75 65 73 20 66 6f 72 20 62 6f 74 68   values for both
1e170 20 70 54 72 69 67 67 65 72 20 61 6e 64 20 6f 72   pTrigger and or
1e180 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  conf..**.** The 
1e190 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d  TriggerPrg.aColm
1e1a0 61 73 6b 5b 30 5d 20 76 61 72 69 61 62 6c 65 20  ask[0] variable 
1e1b0 69 73 20 73 65 74 20 74 6f 20 61 20 6d 61 73 6b  is set to a mask
1e1c0 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e   of old.* column
1e1d0 73 0a 2a 2a 20 61 63 63 65 73 73 65 64 20 28 6f  s.** accessed (o
1e1e0 72 20 73 65 74 20 74 6f 20 30 20 66 6f 72 20 74  r set to 0 for t
1e1f0 72 69 67 67 65 72 73 20 66 69 72 65 64 20 61 73  riggers fired as
1e200 20 61 20 72 65 73 75 6c 74 20 6f 66 20 49 4e 53   a result of INS
1e210 45 52 54 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74  ERT.** statement
1e220 73 29 2e 20 53 69 6d 69 6c 61 72 6c 79 2c 20 74  s). Similarly, t
1e230 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 61 43  he TriggerPrg.aC
1e240 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61 72 69 61 62  olmask[1] variab
1e250 6c 65 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20  le is set to.** 
1e260 61 20 6d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20  a mask of new.* 
1e270 63 6f 6c 75 6d 6e 73 20 75 73 65 64 20 62 79 20  columns used by 
1e280 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a  the program..*/.
1e290 73 74 72 75 63 74 20 54 72 69 67 67 65 72 50 72  struct TriggerPr
1e2a0 67 20 7b 0a 20 20 54 72 69 67 67 65 72 20 2a 70  g {.  Trigger *p
1e2b0 54 72 69 67 67 65 72 3b 20 20 20 20 20 20 2f 2a  Trigger;      /*
1e2c0 20 54 72 69 67 67 65 72 20 74 68 69 73 20 70 72   Trigger this pr
1e2d0 6f 67 72 61 6d 20 77 61 73 20 63 6f 64 65 64 20  ogram was coded 
1e2e0 66 72 6f 6d 20 2a 2f 0a 20 20 54 72 69 67 67 65  from */.  Trigge
1e2f0 72 50 72 67 20 2a 70 4e 65 78 74 3b 20 20 20 20  rPrg *pNext;    
1e300 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79 20    /* Next entry 
1e310 69 6e 20 50 61 72 73 65 2e 70 54 72 69 67 67 65  in Parse.pTrigge
1e320 72 50 72 67 20 6c 69 73 74 20 2a 2f 0a 20 20 53  rPrg list */.  S
1e330 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67  ubProgram *pProg
1e340 72 61 6d 3b 20 20 20 2f 2a 20 50 72 6f 67 72 61  ram;   /* Progra
1e350 6d 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 70  m implementing p
1e360 54 72 69 67 67 65 72 2f 6f 72 63 6f 6e 66 20 2a  Trigger/orconf *
1e370 2f 0a 20 20 69 6e 74 20 6f 72 63 6f 6e 66 3b 20  /.  int orconf; 
1e380 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
1e390 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49  efault ON CONFLI
1e3a0 43 54 20 70 6f 6c 69 63 79 20 2a 2f 0a 20 20 75  CT policy */.  u
1e3b0 33 32 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d 3b 20  32 aColmask[2]; 
1e3c0 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 73 20         /* Masks 
1e3d0 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e 2a 20  of old.*, new.* 
1e3e0 63 6f 6c 75 6d 6e 73 20 61 63 63 65 73 73 65 64  columns accessed
1e3f0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
1e400 65 20 79 44 62 4d 61 73 6b 20 64 61 74 61 74 79  e yDbMask dataty
1e410 70 65 20 66 6f 72 20 74 68 65 20 62 69 74 6d 61  pe for the bitma
1e420 73 6b 20 6f 66 20 61 6c 6c 20 61 74 74 61 63 68  sk of all attach
1e430 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f  ed databases..*/
1e440 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
1e450 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20 74 79  ATTACHED>30.  ty
1e460 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20 63  pedef unsigned c
1e470 68 61 72 20 79 44 62 4d 61 73 6b 5b 28 53 51 4c  har yDbMask[(SQL
1e480 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44  ITE_MAX_ATTACHED
1e490 2b 39 29 2f 38 5d 3b 0a 23 20 64 65 66 69 6e 65  +9)/8];.# define
1e4a0 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29   DbMaskTest(M,I)
1e4b0 20 20 20 20 28 28 28 4d 29 5b 28 49 29 2f 38 5d      (((M)[(I)/8]
1e4c0 26 28 31 3c 3c 28 28 49 29 26 37 29 29 29 21 3d  &(1<<((I)&7)))!=
1e4d0 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  0).# define DbMa
1e4e0 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20 20 6d  skZero(M)      m
1e4f0 65 6d 73 65 74 28 28 4d 29 2c 30 2c 73 69 7a 65  emset((M),0,size
1e500 6f 66 28 4d 29 29 0a 23 20 64 65 66 69 6e 65 20  of(M)).# define 
1e510 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20 20  DbMaskSet(M,I)  
1e520 20 20 20 28 4d 29 5b 28 49 29 2f 38 5d 7c 3d 28     (M)[(I)/8]|=(
1e530 31 3c 3c 28 28 49 29 26 37 29 29 0a 23 20 64 65  1<<((I)&7)).# de
1e540 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65  fine DbMaskAllZe
1e550 72 6f 28 4d 29 20 20 20 73 71 6c 69 74 65 33 44  ro(M)   sqlite3D
1e560 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 0a  bMaskAllZero(M).
1e570 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e  # define DbMaskN
1e580 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 73 71 6c  onZero(M)   (sql
1e590 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72  ite3DbMaskAllZer
1e5a0 6f 28 4d 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 20  o(M)==0).#else. 
1e5b0 20 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65   typedef unsigne
1e5c0 64 20 69 6e 74 20 79 44 62 4d 61 73 6b 3b 0a 23  d int yDbMask;.#
1e5d0 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 54 65   define DbMaskTe
1e5e0 73 74 28 4d 2c 49 29 20 20 20 20 28 28 28 4d 29  st(M,I)    (((M)
1e5f0 26 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c  &(((yDbMask)1)<<
1e600 28 49 29 29 29 21 3d 30 29 0a 23 20 64 65 66 69  (I)))!=0).# defi
1e610 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29  ne DbMaskZero(M)
1e620 20 20 20 20 20 20 28 4d 29 3d 30 0a 23 20 64 65        (M)=0.# de
1e630 66 69 6e 65 20 44 62 4d 61 73 6b 53 65 74 28 4d  fine DbMaskSet(M
1e640 2c 49 29 20 20 20 20 20 28 4d 29 7c 3d 28 28 28  ,I)     (M)|=(((
1e650 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29  yDbMask)1)<<(I))
1e660 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1e670 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29  AllZero(M)   (M)
1e680 3d 3d 30 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  ==0.# define DbM
1e690 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20  askNonZero(M)   
1e6a0 28 4d 29 21 3d 30 0a 23 65 6e 64 69 66 0a 0a 2f  (M)!=0.#endif../
1e6b0 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20 70 61 72 73  *.** An SQL pars
1e6c0 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 41 20 63  er context.  A c
1e6d0 6f 70 79 20 6f 66 20 74 68 69 73 20 73 74 72 75  opy of this stru
1e6e0 63 74 75 72 65 20 69 73 20 70 61 73 73 65 64 20  cture is passed 
1e6f0 74 68 72 6f 75 67 68 0a 2a 2a 20 74 68 65 20 70  through.** the p
1e700 61 72 73 65 72 20 61 6e 64 20 64 6f 77 6e 20 69  arser and down i
1e710 6e 74 6f 20 61 6c 6c 20 74 68 65 20 70 61 72 73  nto all the pars
1e720 65 72 20 61 63 74 69 6f 6e 20 72 6f 75 74 69 6e  er action routin
1e730 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a  e in order to.**
1e740 20 63 61 72 72 79 20 61 72 6f 75 6e 64 20 69 6e   carry around in
1e750 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 69  formation that i
1e760 73 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68 65 20  s global to the 
1e770 65 6e 74 69 72 65 20 70 61 72 73 65 2e 0a 2a 2a  entire parse..**
1e780 0a 2a 2a 20 54 68 65 20 73 74 72 75 63 74 75 72  .** The structur
1e790 65 20 69 73 20 64 69 76 69 64 65 64 20 69 6e 74  e is divided int
1e7a0 6f 20 74 77 6f 20 70 61 72 74 73 2e 20 20 57 68  o two parts.  Wh
1e7b0 65 6e 20 74 68 65 20 70 61 72 73 65 72 20 61 6e  en the parser an
1e7c0 64 20 63 6f 64 65 0a 2a 2a 20 67 65 6e 65 72 61  d code.** genera
1e7d0 74 65 20 63 61 6c 6c 20 74 68 65 6d 73 65 6c 76  te call themselv
1e7e0 65 73 20 72 65 63 75 72 73 69 76 65 6c 79 2c 20  es recursively, 
1e7f0 74 68 65 20 66 69 72 73 74 20 70 61 72 74 20 6f  the first part o
1e800 66 20 74 68 65 20 73 74 72 75 63 74 75 72 65 0a  f the structure.
1e810 2a 2a 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62  ** is constant b
1e820 75 74 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61  ut the second pa
1e830 72 74 20 69 73 20 72 65 73 65 74 20 61 74 20 74  rt is reset at t
1e840 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 61 6e 64  he beginning and
1e850 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 61 63 68 20   end of.** each 
1e860 72 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  recursion..**.**
1e870 20 54 68 65 20 6e 54 61 62 6c 65 4c 6f 63 6b 20   The nTableLock 
1e880 61 6e 64 20 61 54 61 62 6c 65 4c 6f 63 6b 20 76  and aTableLock v
1e890 61 72 69 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c  ariables are onl
1e8a0 79 20 75 73 65 64 20 69 66 20 74 68 65 20 73 68  y used if the sh
1e8b0 61 72 65 64 2d 63 61 63 68 65 0a 2a 2a 20 66 65  ared-cache.** fe
1e8c0 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64  ature is enabled
1e8d0 20 28 69 66 20 73 71 6c 69 74 65 33 54 73 64 28   (if sqlite3Tsd(
1e8e0 29 2d 3e 75 73 65 53 68 61 72 65 64 44 61 74 61  )->useSharedData
1e8f0 20 69 73 20 74 72 75 65 29 2e 20 54 68 65 79 20   is true). They 
1e900 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73  are.** used to s
1e910 74 6f 72 65 20 74 68 65 20 73 65 74 20 6f 66 20  tore the set of 
1e920 74 61 62 6c 65 2d 6c 6f 63 6b 73 20 72 65 71 75  table-locks requ
1e930 69 72 65 64 20 62 79 20 74 68 65 20 73 74 61 74  ired by the stat
1e940 65 6d 65 6e 74 20 62 65 69 6e 67 0a 2a 2a 20 63  ement being.** c
1e950 6f 6d 70 69 6c 65 64 2e 20 46 75 6e 63 74 69 6f  ompiled. Functio
1e960 6e 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f  n sqlite3TableLo
1e970 63 6b 28 29 20 69 73 20 75 73 65 64 20 74 6f 20  ck() is used to 
1e980 61 64 64 20 65 6e 74 72 69 65 73 20 74 6f 20 74  add entries to t
1e990 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73  he.** list..*/.s
1e9a0 74 72 75 63 74 20 50 61 72 73 65 20 7b 0a 20 20  truct Parse {.  
1e9b0 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
1e9c0 20 20 20 20 20 2f 2a 20 54 68 65 20 6d 61 69 6e       /* The main
1e9d0 20 64 61 74 61 62 61 73 65 20 73 74 72 75 63 74   database struct
1e9e0 75 72 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ure */.  char *z
1e9f0 45 72 72 4d 73 67 3b 20 20 20 20 20 20 20 2f 2a  ErrMsg;       /*
1ea00 20 41 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   An error messag
1ea10 65 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 56 64  e */.  Vdbe *pVd
1ea20 62 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  be;         /* A
1ea30 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20 65 78 65  n engine for exe
1ea40 63 75 74 69 6e 67 20 64 61 74 61 62 61 73 65 20  cuting database 
1ea50 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20 20 69 6e  bytecode */.  in
1ea60 74 20 72 63 3b 20 20 20 20 20 20 20 20 20 20 20  t rc;           
1ea70 20 20 20 2f 2a 20 52 65 74 75 72 6e 20 63 6f 64     /* Return cod
1ea80 65 20 66 72 6f 6d 20 65 78 65 63 75 74 69 6f 6e  e from execution
1ea90 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e 61 6d 65   */.  u8 colName
1eaa0 73 53 65 74 3b 20 20 20 20 20 20 2f 2a 20 54 52  sSet;      /* TR
1eab0 55 45 20 61 66 74 65 72 20 4f 50 5f 43 6f 6c 75  UE after OP_Colu
1eac0 6d 6e 4e 61 6d 65 20 68 61 73 20 62 65 65 6e 20  mnName has been 
1ead0 69 73 73 75 65 64 20 74 6f 20 70 56 64 62 65 20  issued to pVdbe 
1eae0 2a 2f 0a 20 20 75 38 20 63 68 65 63 6b 53 63 68  */.  u8 checkSch
1eaf0 65 6d 61 3b 20 20 20 20 20 20 2f 2a 20 43 61 75  ema;      /* Cau
1eb00 73 65 73 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69  ses schema cooki
1eb10 65 20 63 68 65 63 6b 20 61 66 74 65 72 20 61 6e  e check after an
1eb20 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75 38 20 6e   error */.  u8 n
1eb30 65 73 74 65 64 3b 20 20 20 20 20 20 20 20 20 20  ested;          
1eb40 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65   /* Number of ne
1eb50 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 74 68  sted calls to th
1eb60 65 20 70 61 72 73 65 72 2f 63 6f 64 65 20 67 65  e parser/code ge
1eb70 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20 75 38 20  nerator */.  u8 
1eb80 6e 54 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20  nTempReg;       
1eb90 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74    /* Number of t
1eba0 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65  emporary registe
1ebb0 72 73 20 69 6e 20 61 54 65 6d 70 52 65 67 5b 5d  rs in aTempReg[]
1ebc0 20 2a 2f 0a 20 20 75 38 20 69 73 4d 75 6c 74 69   */.  u8 isMulti
1ebd0 57 72 69 74 65 3b 20 20 20 20 20 2f 2a 20 54 72  Write;     /* Tr
1ebe0 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20  ue if statement 
1ebf0 6d 61 79 20 6d 6f 64 69 66 79 2f 69 6e 73 65 72  may modify/inser
1ec00 74 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20  t multiple rows 
1ec10 2a 2f 0a 20 20 75 38 20 6d 61 79 41 62 6f 72 74  */.  u8 mayAbort
1ec20 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75  ;         /* Tru
1ec30 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d  e if statement m
1ec40 61 79 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52  ay throw an ABOR
1ec50 54 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20  T exception */. 
1ec60 20 75 38 20 68 61 73 43 6f 6d 70 6f 75 6e 64 3b   u8 hasCompound;
1ec70 20 20 20 20 20 20 2f 2a 20 4e 65 65 64 20 74 6f        /* Need to
1ec80 20 69 6e 76 6f 6b 65 20 63 6f 6e 76 65 72 74 43   invoke convertC
1ec90 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53  ompoundSelectToS
1eca0 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 20 20 75  ubquery() */.  u
1ecb0 38 20 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72 3b  8 okConstFactor;
1ecc0 20 20 20 20 2f 2a 20 4f 4b 20 74 6f 20 66 61 63      /* OK to fac
1ecd0 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74  tor out constant
1ece0 73 20 2a 2f 0a 20 20 75 38 20 64 69 73 61 62 6c  s */.  u8 disabl
1ecf0 65 4c 6f 6f 6b 61 73 69 64 65 3b 20 2f 2a 20 4e  eLookaside; /* N
1ed00 75 6d 62 65 72 20 6f 66 20 74 69 6d 65 73 20 6c  umber of times l
1ed10 6f 6f 6b 61 73 69 64 65 20 68 61 73 20 62 65 65  ookaside has bee
1ed20 6e 20 64 69 73 61 62 6c 65 64 20 2a 2f 0a 20 20  n disabled */.  
1ed30 75 38 20 6e 43 6f 6c 43 61 63 68 65 3b 20 20 20  u8 nColCache;   
1ed40 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1ed50 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f  f entries in aCo
1ed60 6c 43 61 63 68 65 5b 5d 20 2a 2f 0a 20 20 69 6e  lCache[] */.  in
1ed70 74 20 6e 52 61 6e 67 65 52 65 67 3b 20 20 20 20  t nRangeReg;    
1ed80 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68     /* Size of th
1ed90 65 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69  e temporary regi
1eda0 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20  ster block */.  
1edb0 69 6e 74 20 69 52 61 6e 67 65 52 65 67 3b 20 20  int iRangeReg;  
1edc0 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 72 65       /* First re
1edd0 67 69 73 74 65 72 20 69 6e 20 74 65 6d 70 6f 72  gister in tempor
1ede0 61 72 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f  ary register blo
1edf0 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72  ck */.  int nErr
1ee00 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1ee10 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73  Number of errors
1ee20 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e   seen */.  int n
1ee30 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  Tab;            
1ee40 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 72 65  /* Number of pre
1ee50 76 69 6f 75 73 6c 79 20 61 6c 6c 6f 63 61 74 65  viously allocate
1ee60 64 20 56 44 42 45 20 63 75 72 73 6f 72 73 20 2a  d VDBE cursors *
1ee70 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20  /.  int nMem;   
1ee80 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1ee90 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c  er of memory cel
1eea0 6c 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a  ls used so far *
1eeb0 2f 0a 20 20 69 6e 74 20 6e 4f 70 41 6c 6c 6f 63  /.  int nOpAlloc
1eec0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
1eed0 65 72 20 6f 66 20 73 6c 6f 74 73 20 61 6c 6c 6f  er of slots allo
1eee0 63 61 74 65 64 20 66 6f 72 20 56 64 62 65 2e 61  cated for Vdbe.a
1eef0 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 73 7a  Op[] */.  int sz
1ef00 4f 70 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 2f  OpAlloc;       /
1ef10 2a 20 42 79 74 65 73 20 6f 66 20 6d 65 6d 6f 72  * Bytes of memor
1ef20 79 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65  y space allocate
1ef30 64 20 66 6f 72 20 56 64 62 65 2e 61 4f 70 5b 5d  d for Vdbe.aOp[]
1ef40 20 2a 2f 0a 20 20 69 6e 74 20 63 6b 42 61 73 65   */.  int ckBase
1ef50 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 61  ;          /* Ba
1ef60 73 65 20 72 65 67 69 73 74 65 72 20 6f 66 20 64  se register of d
1ef70 61 74 61 20 64 75 72 69 6e 67 20 63 68 65 63 6b  ata during check
1ef80 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
1ef90 20 20 69 6e 74 20 69 53 65 6c 66 54 61 62 3b 20    int iSelfTab; 
1efa0 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20         /* Table 
1efb0 6f 66 20 61 6e 20 69 6e 64 65 78 20 77 68 6f 73  of an index whos
1efc0 65 20 65 78 70 72 73 20 61 72 65 20 62 65 69 6e  e exprs are bein
1efd0 67 20 63 6f 64 65 64 20 2a 2f 0a 20 20 69 6e 74  g coded */.  int
1efe0 20 69 43 61 63 68 65 4c 65 76 65 6c 3b 20 20 20   iCacheLevel;   
1eff0 20 20 2f 2a 20 43 6f 6c 43 61 63 68 65 20 76 61    /* ColCache va
1f000 6c 69 64 20 77 68 65 6e 20 61 43 6f 6c 43 61 63  lid when aColCac
1f010 68 65 5b 5d 2e 69 4c 65 76 65 6c 3c 3d 69 43 61  he[].iLevel<=iCa
1f020 63 68 65 4c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e  cheLevel */.  in
1f030 74 20 69 43 61 63 68 65 43 6e 74 3b 20 20 20 20  t iCacheCnt;    
1f040 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20 75 73     /* Counter us
1f050 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61  ed to generate a
1f060 43 6f 6c 43 61 63 68 65 5b 5d 2e 6c 72 75 20 76  ColCache[].lru v
1f070 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  alues */.  int n
1f080 4c 61 62 65 6c 3b 20 20 20 20 20 20 20 20 20 20  Label;          
1f090 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 61 62  /* Number of lab
1f0a0 65 6c 73 20 75 73 65 64 20 2a 2f 0a 20 20 69 6e  els used */.  in
1f0b0 74 20 2a 61 4c 61 62 65 6c 3b 20 20 20 20 20 20  t *aLabel;      
1f0c0 20 20 20 2f 2a 20 53 70 61 63 65 20 74 6f 20 68     /* Space to h
1f0d0 6f 6c 64 20 74 68 65 20 6c 61 62 65 6c 73 20 2a  old the labels *
1f0e0 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43  /.  ExprList *pC
1f0f0 6f 6e 73 74 45 78 70 72 3b 2f 2a 20 43 6f 6e 73  onstExpr;/* Cons
1f100 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73  tant expressions
1f110 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 63 6f 6e 73   */.  Token cons
1f120 74 72 61 69 6e 74 4e 61 6d 65 3b 2f 2a 20 4e 61  traintName;/* Na
1f130 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 73 74 72  me of the constr
1f140 61 69 6e 74 20 63 75 72 72 65 6e 74 6c 79 20 62  aint currently b
1f150 65 69 6e 67 20 70 61 72 73 65 64 20 2a 2f 0a 20  eing parsed */. 
1f160 20 79 44 62 4d 61 73 6b 20 77 72 69 74 65 4d 61   yDbMask writeMa
1f170 73 6b 3b 20 20 20 2f 2a 20 53 74 61 72 74 20 61  sk;   /* Start a
1f180 20 77 72 69 74 65 20 74 72 61 6e 73 61 63 74 69   write transacti
1f190 6f 6e 20 6f 6e 20 74 68 65 73 65 20 64 61 74 61  on on these data
1f1a0 62 61 73 65 73 20 2a 2f 0a 20 20 79 44 62 4d 61  bases */.  yDbMa
1f1b0 73 6b 20 63 6f 6f 6b 69 65 4d 61 73 6b 3b 20 20  sk cookieMask;  
1f1c0 2f 2a 20 42 69 74 6d 61 73 6b 20 6f 66 20 73 63  /* Bitmask of sc
1f1d0 68 65 6d 61 20 76 65 72 69 66 69 65 64 20 64 61  hema verified da
1f1e0 74 61 62 61 73 65 73 20 2a 2f 0a 20 20 69 6e 74  tabases */.  int
1f1f0 20 72 65 67 52 6f 77 69 64 3b 20 20 20 20 20 20   regRowid;      
1f200 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f    /* Register ho
1f210 6c 64 69 6e 67 20 72 6f 77 69 64 20 6f 66 20 43  lding rowid of C
1f220 52 45 41 54 45 20 54 41 42 4c 45 20 65 6e 74 72  REATE TABLE entr
1f230 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f  y */.  int regRo
1f240 6f 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 52  ot;         /* R
1f250 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
1f260 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72  root page number
1f270 20 66 6f 72 20 6e 65 77 20 6f 62 6a 65 63 74 73   for new objects
1f280 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 41 72   */.  int nMaxAr
1f290 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  g;         /* Ma
1f2a0 78 20 61 72 67 73 20 70 61 73 73 65 64 20 74 6f  x args passed to
1f2b0 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 62   user function b
1f2c0 79 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f  y sub-program */
1f2d0 0a 23 69 66 20 53 45 4c 45 43 54 54 52 41 43 45  .#if SELECTTRACE
1f2e0 5f 45 4e 41 42 4c 45 44 0a 20 20 69 6e 74 20 6e  _ENABLED.  int n
1f2f0 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20  Select;         
1f300 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 53 45 4c  /* Number of SEL
1f310 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20 73  ECT statements s
1f320 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65  een */.  int nSe
1f330 6c 65 63 74 49 6e 64 65 6e 74 3b 20 20 20 2f 2a  lectIndent;   /*
1f340 20 48 6f 77 20 66 61 72 20 74 6f 20 69 6e 64 65   How far to inde
1f350 6e 74 20 53 45 4c 45 43 54 54 52 41 43 45 28 29  nt SELECTTRACE()
1f360 20 6f 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69   output */.#endi
1f370 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
1f380 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43  _OMIT_SHARED_CAC
1f390 48 45 0a 20 20 69 6e 74 20 6e 54 61 62 6c 65 4c  HE.  int nTableL
1f3a0 6f 63 6b 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  ock;        /* N
1f3b0 75 6d 62 65 72 20 6f 66 20 6c 6f 63 6b 73 20 69  umber of locks i
1f3c0 6e 20 61 54 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a  n aTableLock */.
1f3d0 20 20 54 61 62 6c 65 4c 6f 63 6b 20 2a 61 54 61    TableLock *aTa
1f3e0 62 6c 65 4c 6f 63 6b 3b 20 2f 2a 20 52 65 71 75  bleLock; /* Requ
1f3f0 69 72 65 64 20 74 61 62 6c 65 20 6c 6f 63 6b 73  ired table locks
1f400 20 66 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68   for shared-cach
1f410 65 20 6d 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66  e mode */.#endif
1f420 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a  .  AutoincInfo *
1f430 70 41 69 6e 63 3b 20 20 2f 2a 20 49 6e 66 6f 72  pAinc;  /* Infor
1f440 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 41 55 54  mation about AUT
1f450 4f 49 4e 43 52 45 4d 45 4e 54 20 63 6f 75 6e 74  OINCREMENT count
1f460 65 72 73 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a  ers */.  Parse *
1f470 70 54 6f 70 6c 65 76 65 6c 3b 20 20 20 20 2f 2a  pToplevel;    /*
1f480 20 50 61 72 73 65 20 73 74 72 75 63 74 75 72 65   Parse structure
1f490 20 66 6f 72 20 6d 61 69 6e 20 70 72 6f 67 72 61   for main progra
1f4a0 6d 20 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20  m (or NULL) */. 
1f4b0 20 54 61 62 6c 65 20 2a 70 54 72 69 67 67 65 72   Table *pTrigger
1f4c0 54 61 62 3b 20 20 2f 2a 20 54 61 62 6c 65 20 74  Tab;  /* Table t
1f4d0 72 69 67 67 65 72 73 20 61 72 65 20 62 65 69 6e  riggers are bein
1f4e0 67 20 63 6f 64 65 64 20 66 6f 72 20 2a 2f 0a 20  g coded for */. 
1f4f0 20 69 6e 74 20 61 64 64 72 43 72 54 61 62 3b 20   int addrCrTab; 
1f500 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73        /* Address
1f510 20 6f 66 20 4f 50 5f 43 72 65 61 74 65 54 61 62   of OP_CreateTab
1f520 6c 65 20 6f 70 63 6f 64 65 20 6f 6e 20 43 52 45  le opcode on CRE
1f530 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20 75  ATE TABLE */.  u
1f540 33 32 20 6e 51 75 65 72 79 4c 6f 6f 70 3b 20 20  32 nQueryLoop;  
1f550 20 20 20 20 2f 2a 20 45 73 74 20 6e 75 6d 62 65      /* Est numbe
1f560 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 20  r of iterations 
1f570 6f 66 20 61 20 71 75 65 72 79 20 28 31 30 2a 6c  of a query (10*l
1f580 6f 67 32 28 4e 29 29 20 2a 2f 0a 20 20 75 33 32  og2(N)) */.  u32
1f590 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20 20 20 20   oldmask;       
1f5a0 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c 64    /* Mask of old
1f5b0 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72  .* columns refer
1f5c0 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33 32 20 6e  enced */.  u32 n
1f5d0 65 77 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20  ewmask;         
1f5e0 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a  /* Mask of new.*
1f5f0 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e   columns referen
1f600 63 65 64 20 2a 2f 0a 20 20 75 38 20 65 54 72 69  ced */.  u8 eTri
1f610 67 67 65 72 4f 70 3b 20 20 20 20 20 20 20 2f 2a  ggerOp;       /*
1f620 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49   TK_UPDATE, TK_I
1f630 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44 45 4c 45  NSERT or TK_DELE
1f640 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f 72 63 6f  TE */.  u8 eOrco
1f650 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  nf;          /* 
1f660 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c  Default ON CONFL
1f670 49 43 54 20 70 6f 6c 69 63 79 20 66 6f 72 20 74  ICT policy for t
1f680 72 69 67 67 65 72 20 73 74 65 70 73 20 2a 2f 0a  rigger steps */.
1f690 20 20 75 38 20 64 69 73 61 62 6c 65 54 72 69 67    u8 disableTrig
1f6a0 67 65 72 73 3b 20 20 2f 2a 20 54 72 75 65 20 74  gers;  /* True t
1f6b0 6f 20 64 69 73 61 62 6c 65 20 74 72 69 67 67 65  o disable trigge
1f6c0 72 73 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a  rs */..  /******
1f6d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f6e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f6f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f700 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f710 2a 2a 2a 2a 0a 20 20 2a 2a 20 46 69 65 6c 64 73  ****.  ** Fields
1f720 20 61 62 6f 76 65 20 6d 75 73 74 20 62 65 20 69   above must be i
1f730 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 7a 65  nitialized to ze
1f740 72 6f 2e 20 20 54 68 65 20 66 69 65 6c 64 73 20  ro.  The fields 
1f750 74 68 61 74 20 66 6f 6c 6c 6f 77 2c 0a 20 20 2a  that follow,.  *
1f760 2a 20 64 6f 77 6e 20 74 6f 20 74 68 65 20 62 65  * down to the be
1f770 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 72  ginning of the r
1f780 65 63 75 72 73 69 76 65 20 73 65 63 74 69 6f 6e  ecursive section
1f790 2c 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f  , do not need to
1f7a0 20 62 65 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c   be.  ** initial
1f7b0 69 7a 65 64 20 61 73 20 74 68 65 79 20 77 69 6c  ized as they wil
1f7c0 6c 20 62 65 20 73 65 74 20 62 65 66 6f 72 65 20  l be set before 
1f7d0 62 65 69 6e 67 20 75 73 65 64 2e 20 20 54 68 65  being used.  The
1f7e0 20 62 6f 75 6e 64 61 72 79 20 69 73 0a 20 20 2a   boundary is.  *
1f7f0 2a 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  * determined by 
1f800 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c 61  offsetof(Parse,a
1f810 43 6f 6c 43 61 63 68 65 29 2e 0a 20 20 2a 2a 2a  ColCache)..  ***
1f820 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f830 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f840 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f850 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f860 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 73 74 72 75  *******/..  stru
1f870 63 74 20 79 43 6f 6c 43 61 63 68 65 20 7b 0a 20  ct yColCache {. 
1f880 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20     int iTable;  
1f890 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c           /* Tabl
1f8a0 65 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  e cursor number 
1f8b0 2a 2f 0a 20 20 20 20 69 31 36 20 69 43 6f 6c 75  */.    i16 iColu
1f8c0 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  mn;          /* 
1f8d0 54 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d  Table column num
1f8e0 62 65 72 20 2a 2f 0a 20 20 20 20 75 38 20 74 65  ber */.    u8 te
1f8f0 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 20  mpReg;          
1f900 20 2f 2a 20 69 52 65 67 20 69 73 20 61 20 74 65   /* iReg is a te
1f910 6d 70 20 72 65 67 69 73 74 65 72 20 74 68 61 74  mp register that
1f920 20 6e 65 65 64 73 20 74 6f 20 62 65 20 66 72 65   needs to be fre
1f930 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4c  ed */.    int iL
1f940 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20  evel;           
1f950 2f 2a 20 4e 65 73 74 69 6e 67 20 6c 65 76 65 6c  /* Nesting level
1f960 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 52 65 67   */.    int iReg
1f970 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1f980 20 52 65 67 20 77 69 74 68 20 76 61 6c 75 65 20   Reg with value 
1f990 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20  of this column. 
1f9a0 30 20 6d 65 61 6e 73 20 6e 6f 6e 65 2e 20 2a 2f  0 means none. */
1f9b0 0a 20 20 20 20 69 6e 74 20 6c 72 75 3b 20 20 20  .    int lru;   
1f9c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65             /* Le
1f9d0 61 73 74 20 72 65 63 65 6e 74 6c 79 20 75 73 65  ast recently use
1f9e0 64 20 65 6e 74 72 79 20 68 61 73 20 74 68 65 20  d entry has the 
1f9f0 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65 20 2a  smallest value *
1fa00 2f 0a 20 20 7d 20 61 43 6f 6c 43 61 63 68 65 5b  /.  } aColCache[
1fa10 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48  SQLITE_N_COLCACH
1fa20 45 5d 3b 20 20 2f 2a 20 4f 6e 65 20 66 6f 72 20  E];  /* One for 
1fa30 65 61 63 68 20 63 6f 6c 75 6d 6e 20 63 61 63 68  each column cach
1fa40 65 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74  e entry */.  int
1fa50 20 61 54 65 6d 70 52 65 67 5b 38 5d 3b 20 20 20   aTempReg[8];   
1fa60 20 20 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20       /* Holding 
1fa70 61 72 65 61 20 66 6f 72 20 74 65 6d 70 6f 72 61  area for tempora
1fa80 72 79 20 72 65 67 69 73 74 65 72 73 20 2a 2f 0a  ry registers */.
1fa90 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b    Token sNameTok
1faa0 65 6e 3b 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b  en;       /* Tok
1fab0 65 6e 20 77 69 74 68 20 75 6e 71 75 61 6c 69 66  en with unqualif
1fac0 69 65 64 20 73 63 68 65 6d 61 20 6f 62 6a 65 63  ied schema objec
1fad0 74 20 6e 61 6d 65 20 2a 2f 0a 0a 20 20 2f 2a 2a  t name */..  /**
1fae0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1faf0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fb00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fb10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fb20 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 41 62 6f 76  ******.  ** Abov
1fb30 65 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 65  e is constant be
1fb40 74 77 65 65 6e 20 72 65 63 75 72 73 69 6f 6e 73  tween recursions
1fb50 2e 20 20 42 65 6c 6f 77 20 69 73 20 72 65 73 65  .  Below is rese
1fb60 74 20 62 65 66 6f 72 65 20 61 6e 64 20 61 66 74  t before and aft
1fb70 65 72 0a 20 20 2a 2a 20 65 61 63 68 20 72 65 63  er.  ** each rec
1fb80 75 72 73 69 6f 6e 2e 20 20 54 68 65 20 62 6f 75  ursion.  The bou
1fb90 6e 64 61 72 79 20 62 65 74 77 65 65 6e 20 74 68  ndary between th
1fba0 65 73 65 20 74 77 6f 20 72 65 67 69 6f 6e 73 20  ese two regions 
1fbb0 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 20 20  is determined.  
1fbc0 2a 2a 20 75 73 69 6e 67 20 6f 66 66 73 65 74 6f  ** using offseto
1fbd0 66 28 50 61 72 73 65 2c 73 4c 61 73 74 54 6f 6b  f(Parse,sLastTok
1fbe0 65 6e 29 20 73 6f 20 74 68 65 20 73 4c 61 73 74  en) so the sLast
1fbf0 54 6f 6b 65 6e 20 66 69 65 6c 64 20 6d 75 73 74  Token field must
1fc00 20 62 65 20 74 68 65 0a 20 20 2a 2a 20 66 69 72   be the.  ** fir
1fc10 73 74 20 66 69 65 6c 64 20 69 6e 20 74 68 65 20  st field in the 
1fc20 72 65 63 75 72 73 69 76 65 20 72 65 67 69 6f 6e  recursive region
1fc30 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..  ************
1fc40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fc50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fc60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fc70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20  ************/.. 
1fc80 20 54 6f 6b 65 6e 20 73 4c 61 73 74 54 6f 6b 65   Token sLastToke
1fc90 6e 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  n;       /* The 
1fca0 6c 61 73 74 20 74 6f 6b 65 6e 20 70 61 72 73 65  last token parse
1fcb0 64 20 2a 2f 0a 20 20 79 6e 56 61 72 20 6e 56 61  d */.  ynVar nVa
1fcc0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
1fcd0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 27 3f   /* Number of '?
1fce0 27 20 76 61 72 69 61 62 6c 65 73 20 73 65 65 6e  ' variables seen
1fcf0 20 69 6e 20 74 68 65 20 53 51 4c 20 73 6f 20 66   in the SQL so f
1fd00 61 72 20 2a 2f 0a 20 20 75 38 20 69 50 6b 53 6f  ar */.  u8 iPkSo
1fd10 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20  rtOrder;        
1fd20 20 20 2f 2a 20 41 53 43 20 6f 72 20 44 45 53 43    /* ASC or DESC
1fd30 20 66 6f 72 20 49 4e 54 45 47 45 52 20 50 52 49   for INTEGER PRI
1fd40 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 75 38  MARY KEY */.  u8
1fd50 20 65 78 70 6c 61 69 6e 3b 20 20 20 20 20 20 20   explain;       
1fd60 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
1fd70 69 66 20 74 68 65 20 45 58 50 4c 41 49 4e 20 66  if the EXPLAIN f
1fd80 6c 61 67 20 69 73 20 66 6f 75 6e 64 20 6f 6e 20  lag is found on 
1fd90 74 68 65 20 71 75 65 72 79 20 2a 2f 0a 23 69 66  the query */.#if
1fda0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1fdb0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
1fdc0 75 38 20 64 65 63 6c 61 72 65 56 74 61 62 3b 20  u8 declareVtab; 
1fdd0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
1fde0 65 20 69 66 20 69 6e 73 69 64 65 20 73 71 6c 69  e if inside sqli
1fdf0 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62  te3_declare_vtab
1fe00 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 74 61  () */.  int nVta
1fe10 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 20 20  bLock;          
1fe20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76    /* Number of v
1fe30 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 74 6f  irtual tables to
1fe40 20 6c 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a   lock */.#endif.
1fe50 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20    int nHeight;  
1fe60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
1fe70 78 70 72 65 73 73 69 6f 6e 20 74 72 65 65 20 68  xpression tree h
1fe80 65 69 67 68 74 20 6f 66 20 63 75 72 72 65 6e 74  eight of current
1fe90 20 73 75 62 2d 73 65 6c 65 63 74 20 2a 2f 0a 23   sub-select */.#
1fea0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1feb0 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 69 6e 74  IT_EXPLAIN.  int
1fec0 20 69 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20   iSelectId;     
1fed0 20 20 20 20 20 20 20 2f 2a 20 49 44 20 6f 66 20         /* ID of 
1fee0 63 75 72 72 65 6e 74 20 73 65 6c 65 63 74 20 66  current select f
1fef0 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75  or EXPLAIN outpu
1ff00 74 20 2a 2f 0a 20 20 69 6e 74 20 69 4e 65 78 74  t */.  int iNext
1ff10 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20 20 20  SelectId;       
1ff20 20 2f 2a 20 4e 65 78 74 20 61 76 61 69 6c 61 62   /* Next availab
1ff30 6c 65 20 73 65 6c 65 63 74 20 49 44 20 66 6f 72  le select ID for
1ff40 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74 20   EXPLAIN output 
1ff50 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 56 4c 69 73  */.#endif.  VLis
1ff60 74 20 2a 70 56 4c 69 73 74 3b 20 20 20 20 20 20  t *pVList;      
1ff70 20 20 20 20 20 20 2f 2a 20 4d 61 70 70 69 6e 67        /* Mapping
1ff80 20 62 65 74 77 65 65 6e 20 76 61 72 69 61 62 6c   between variabl
1ff90 65 20 6e 61 6d 65 73 20 61 6e 64 20 6e 75 6d 62  e names and numb
1ffa0 65 72 73 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70  ers */.  Vdbe *p
1ffb0 52 65 70 72 65 70 61 72 65 3b 20 20 20 20 20 20  Reprepare;      
1ffc0 20 20 20 2f 2a 20 56 4d 20 62 65 69 6e 67 20 72     /* VM being r
1ffd0 65 70 72 65 70 61 72 65 64 20 28 73 71 6c 69 74  eprepared (sqlit
1ffe0 65 33 52 65 70 72 65 70 61 72 65 28 29 29 20 2a  e3Reprepare()) *
1fff0 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
20000 7a 54 61 69 6c 3b 20 20 20 20 20 20 20 20 2f 2a  zTail;        /*
20010 20 41 6c 6c 20 53 51 4c 20 74 65 78 74 20 70 61   All SQL text pa
20020 73 74 20 74 68 65 20 6c 61 73 74 20 73 65 6d 69  st the last semi
20030 63 6f 6c 6f 6e 20 70 61 72 73 65 64 20 2a 2f 0a  colon parsed */.
20040 20 20 54 61 62 6c 65 20 2a 70 4e 65 77 54 61 62    Table *pNewTab
20050 6c 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  le;         /* A
20060 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6f 6e   table being con
20070 73 74 72 75 63 74 65 64 20 62 79 20 43 52 45 41  structed by CREA
20080 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20 54 72  TE TABLE */.  Tr
20090 69 67 67 65 72 20 2a 70 4e 65 77 54 72 69 67 67  igger *pNewTrigg
200a0 65 72 3b 20 20 20 20 20 2f 2a 20 54 72 69 67 67  er;     /* Trigg
200b0 65 72 20 75 6e 64 65 72 20 63 6f 6e 73 74 72 75  er under constru
200c0 63 74 20 62 79 20 61 20 43 52 45 41 54 45 20 54  ct by a CREATE T
200d0 52 49 47 47 45 52 20 2a 2f 0a 20 20 63 6f 6e 73  RIGGER */.  cons
200e0 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e  t char *zAuthCon
200f0 74 65 78 74 3b 20 2f 2a 20 54 68 65 20 36 74 68  text; /* The 6th
20100 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 64 62   parameter to db
20110 2d 3e 78 41 75 74 68 20 63 61 6c 6c 62 61 63 6b  ->xAuth callback
20120 73 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  s */.#ifndef SQL
20130 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
20140 54 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20 73 41  TABLE.  Token sA
20150 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
20160 20 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 74 65    /* Complete te
20170 78 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65 20 61  xt of a module a
20180 72 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54 61 62  rgument */.  Tab
20190 6c 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63 6b 3b  le **apVtabLock;
201a0 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
201b0 72 20 74 6f 20 76 69 72 74 75 61 6c 20 74 61 62  r to virtual tab
201c0 6c 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f 63 6b  les needing lock
201d0 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ing */.#endif.  
201e0 54 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65 54 61  Table *pZombieTa
201f0 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73  b;        /* Lis
20200 74 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a 65 63  t of Table objec
20210 74 73 20 74 6f 20 64 65 6c 65 74 65 20 61 66 74  ts to delete aft
20220 65 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f 0a 20  er code gen */. 
20230 20 54 72 69 67 67 65 72 50 72 67 20 2a 70 54 72   TriggerPrg *pTr
20240 69 67 67 65 72 50 72 67 3b 20 20 2f 2a 20 4c 69  iggerPrg;  /* Li
20250 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 63 6f 64  nked list of cod
20260 65 64 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 20  ed triggers */. 
20270 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20 20   With *pWith;   
20280 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75             /* Cu
20290 72 72 65 6e 74 20 57 49 54 48 20 63 6c 61 75 73  rrent WITH claus
202a0 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20  e, or NULL */.  
202b0 57 69 74 68 20 2a 70 57 69 74 68 54 6f 46 72 65  With *pWithToFre
202c0 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 46 72 65  e;        /* Fre
202d0 65 20 74 68 69 73 20 57 49 54 48 20 6f 62 6a 65  e this WITH obje
202e0 63 74 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66  ct at the end of
202f0 20 74 68 65 20 70 61 72 73 65 20 2a 2f 0a 7d 3b   the parse */.};
20300 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 73 20 61 6e  ../*.** Sizes an
20310 64 20 70 6f 69 6e 74 65 72 73 20 6f 66 20 76 61  d pointers of va
20320 72 69 6f 75 73 20 70 61 72 74 73 20 6f 66 20 74  rious parts of t
20330 68 65 20 50 61 72 73 65 20 6f 62 6a 65 63 74 2e  he Parse object.
20340 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41 52 53  .*/.#define PARS
20350 45 5f 48 44 52 5f 53 5a 20 6f 66 66 73 65 74 6f  E_HDR_SZ offseto
20360 66 28 50 61 72 73 65 2c 61 43 6f 6c 43 61 63 68  f(Parse,aColCach
20370 65 29 20 2f 2a 20 52 65 63 75 72 73 69 76 65 20  e) /* Recursive 
20380 70 61 72 74 20 77 2f 6f 20 61 43 6f 6c 43 61 63  part w/o aColCac
20390 68 65 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41 52  he*/.#define PAR
203a0 53 45 5f 52 45 43 55 52 53 45 5f 53 5a 20 6f 66  SE_RECURSE_SZ of
203b0 66 73 65 74 6f 66 28 50 61 72 73 65 2c 73 4c 61  fsetof(Parse,sLa
203c0 73 74 54 6f 6b 65 6e 29 20 20 20 20 2f 2a 20 52  stToken)    /* R
203d0 65 63 75 72 73 69 76 65 20 70 61 72 74 20 2a 2f  ecursive part */
203e0 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f 54  .#define PARSE_T
203f0 41 49 4c 5f 53 5a 20 28 73 69 7a 65 6f 66 28 50  AIL_SZ (sizeof(P
20400 61 72 73 65 29 2d 50 41 52 53 45 5f 52 45 43 55  arse)-PARSE_RECU
20410 52 53 45 5f 53 5a 29 20 2f 2a 20 4e 6f 6e 2d 72  RSE_SZ) /* Non-r
20420 65 63 75 72 73 69 76 65 20 70 61 72 74 20 2a 2f  ecursive part */
20430 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f 54  .#define PARSE_T
20440 41 49 4c 28 58 29 20 28 28 28 63 68 61 72 2a 29  AIL(X) (((char*)
20450 28 58 29 29 2b 50 41 52 53 45 5f 52 45 43 55 52  (X))+PARSE_RECUR
20460 53 45 5f 53 5a 29 20 20 2f 2a 20 50 6f 69 6e 74  SE_SZ)  /* Point
20470 65 72 20 74 6f 20 74 61 69 6c 20 2a 2f 0a 0a 2f  er to tail */../
20480 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65  *.** Return true
20490 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e   if currently in
204a0 73 69 64 65 20 61 6e 20 73 71 6c 69 74 65 33 5f  side an sqlite3_
204b0 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 63  declare_vtab() c
204c0 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  all..*/.#ifdef S
204d0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
204e0 41 4c 54 41 42 4c 45 0a 20 20 23 64 65 66 69 6e  ALTABLE.  #defin
204f0 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41  e IN_DECLARE_VTA
20500 42 20 30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  B 0.#else.  #def
20510 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56  ine IN_DECLARE_V
20520 54 41 42 20 28 70 50 61 72 73 65 2d 3e 64 65 63  TAB (pParse->dec
20530 6c 61 72 65 56 74 61 62 29 0a 23 65 6e 64 69 66  lareVtab).#endif
20540 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
20550 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
20560 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63  wing structure c
20570 61 6e 20 62 65 20 64 65 63 6c 61 72 65 64 20 6f  an be declared o
20580 6e 20 61 20 73 74 61 63 6b 20 61 6e 64 20 75 73  n a stack and us
20590 65 64 0a 2a 2a 20 74 6f 20 73 61 76 65 20 74 68  ed.** to save th
205a0 65 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e  e Parse.zAuthCon
205b0 74 65 78 74 20 76 61 6c 75 65 20 73 6f 20 74 68  text value so th
205c0 61 74 20 69 74 20 63 61 6e 20 62 65 20 72 65 73  at it can be res
205d0 74 6f 72 65 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a  tored later..*/.
205e0 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74 65  struct AuthConte
205f0 78 74 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61  xt {.  const cha
20600 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b  r *zAuthContext;
20610 20 20 20 2f 2a 20 50 75 74 20 73 61 76 65 64 20     /* Put saved 
20620 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65  Parse.zAuthConte
20630 78 74 20 68 65 72 65 20 2a 2f 0a 20 20 50 61 72  xt here */.  Par
20640 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20  se *pParse;     
20650 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
20660 50 61 72 73 65 20 73 74 72 75 63 74 75 72 65 20  Parse structure 
20670 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74  */.};../*.** Bit
20680 66 69 65 6c 64 20 66 6c 61 67 73 20 66 6f 72 20  field flags for 
20690 50 35 20 76 61 6c 75 65 20 69 6e 20 76 61 72 69  P5 value in vari
206a0 6f 75 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 0a  ous opcodes..**.
206b0 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61  ** Value constra
206c0 69 6e 74 73 20 28 65 6e 66 6f 72 63 65 64 20 76  ints (enforced v
206d0 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a  ia assert()):.**
206e0 20 20 20 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54      OPFLAG_LENGT
206f0 48 41 52 47 20 20 20 20 3d 3d 20 53 51 4c 49 54  HARG    == SQLIT
20700 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 0a 2a 2a  E_FUNC_LENGTH.**
20710 20 20 20 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f      OPFLAG_TYPEO
20720 46 41 52 47 20 20 20 20 3d 3d 20 53 51 4c 49 54  FARG    == SQLIT
20730 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 0a 2a 2a  E_FUNC_TYPEOF.**
20740 20 20 20 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43      OPFLAG_BULKC
20750 53 52 20 20 20 20 20 20 3d 3d 20 42 54 52 45 45  SR      == BTREE
20760 5f 42 55 4c 4b 4c 4f 41 44 0a 2a 2a 20 20 20 20  _BULKLOAD.**    
20770 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 20 20  OPFLAG_SEEKEQ   
20780 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 53 45 45      == BTREE_SEE
20790 4b 5f 45 51 0a 2a 2a 20 20 20 20 4f 50 46 4c 41  K_EQ.**    OPFLA
207a0 47 5f 46 4f 52 44 45 4c 45 54 45 20 20 20 20 3d  G_FORDELETE    =
207b0 3d 20 42 54 52 45 45 5f 46 4f 52 44 45 4c 45 54  = BTREE_FORDELET
207c0 45 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 53  E.**    OPFLAG_S
207d0 41 56 45 50 4f 53 49 54 49 4f 4e 20 3d 3d 20 42  AVEPOSITION == B
207e0 54 52 45 45 5f 53 41 56 45 50 4f 53 49 54 49 4f  TREE_SAVEPOSITIO
207f0 4e 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 41  N.**    OPFLAG_A
20800 55 58 44 45 4c 45 54 45 20 20 20 20 3d 3d 20 42  UXDELETE    == B
20810 54 52 45 45 5f 41 55 58 44 45 4c 45 54 45 0a 2a  TREE_AUXDELETE.*
20820 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
20830 5f 4e 43 48 41 4e 47 45 20 20 20 20 20 20 20 30  _NCHANGE       0
20840 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 49 6e 73  x01    /* OP_Ins
20850 65 72 74 3a 20 53 65 74 20 74 6f 20 75 70 64 61  ert: Set to upda
20860 74 65 20 64 62 2d 3e 6e 43 68 61 6e 67 65 20 2a  te db->nChange *
20870 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
20880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20890 20 20 20 20 20 20 20 2f 2a 20 41 6c 73 6f 20 75         /* Also u
208a0 73 65 64 20 69 6e 20 50 32 20 28 6e 6f 74 20 50  sed in P2 (not P
208b0 35 29 20 6f 66 20 4f 50 5f 44 65 6c 65 74 65 20  5) of OP_Delete 
208c0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
208d0 47 5f 45 50 48 45 4d 20 20 20 20 20 20 20 20 20  G_EPHEM         
208e0 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f  0x01    /* OP_Co
208f0 6c 75 6d 6e 3a 20 45 70 68 65 6d 65 72 61 6c 20  lumn: Ephemeral 
20900 6f 75 74 70 75 74 20 69 73 20 6f 6b 20 2a 2f 0a  output is ok */.
20910 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c  #define OPFLAG_L
20920 41 53 54 52 4f 57 49 44 20 20 20 20 20 30 78 32  ASTROWID     0x2
20930 30 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20 75  0    /* Set to u
20940 70 64 61 74 65 20 64 62 2d 3e 6c 61 73 74 52 6f  pdate db->lastRo
20950 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  wid */.#define O
20960 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20 20  PFLAG_ISUPDATE  
20970 20 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20 54      0x04    /* T
20980 68 69 73 20 4f 50 5f 49 6e 73 65 72 74 20 69 73  his OP_Insert is
20990 20 61 6e 20 73 71 6c 20 55 50 44 41 54 45 20 2a   an sql UPDATE *
209a0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
209b0 5f 41 50 50 45 4e 44 20 20 20 20 20 20 20 20 30  _APPEND        0
209c0 78 30 38 20 20 20 20 2f 2a 20 54 68 69 73 20 69  x08    /* This i
209d0 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20 61  s likely to be a
209e0 6e 20 61 70 70 65 6e 64 20 2a 2f 0a 23 64 65 66  n append */.#def
209f0 69 6e 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45  ine OPFLAG_USESE
20a00 45 4b 52 45 53 55 4c 54 20 30 78 31 30 20 20 20  EKRESULT 0x10   
20a10 20 2f 2a 20 54 72 79 20 74 6f 20 61 76 6f 69 64   /* Try to avoid
20a20 20 61 20 73 65 65 6b 20 69 6e 20 42 74 72 65 65   a seek in Btree
20a30 49 6e 73 65 72 74 28 29 20 2a 2f 0a 23 64 65 66  Insert() */.#def
20a40 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f  ine OPFLAG_ISNOO
20a50 50 20 20 20 20 20 20 20 20 30 78 34 30 20 20 20  P        0x40   
20a60 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 20 64 6f   /* OP_Delete do
20a70 65 73 20 70 72 65 2d 75 70 64 61 74 65 2d 68 6f  es pre-update-ho
20a80 6f 6b 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69  ok only */.#defi
20a90 6e 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48  ne OPFLAG_LENGTH
20aa0 41 52 47 20 20 20 20 20 30 78 34 30 20 20 20 20  ARG     0x40    
20ab0 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c  /* OP_Column onl
20ac0 79 20 75 73 65 64 20 66 6f 72 20 6c 65 6e 67 74  y used for lengt
20ad0 68 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  h() */.#define O
20ae0 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 20  PFLAG_TYPEOFARG 
20af0 20 20 20 20 30 78 38 30 20 20 20 20 2f 2a 20 4f      0x80    /* O
20b00 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73  P_Column only us
20b10 65 64 20 66 6f 72 20 74 79 70 65 6f 66 28 29 20  ed for typeof() 
20b20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
20b30 47 5f 42 55 4c 4b 43 53 52 20 20 20 20 20 20 20  G_BULKCSR       
20b40 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 4f 70  0x01    /* OP_Op
20b50 65 6e 2a 2a 20 75 73 65 64 20 74 6f 20 6f 70 65  en** used to ope
20b60 6e 20 62 75 6c 6b 20 63 75 72 73 6f 72 20 2a 2f  n bulk cursor */
20b70 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
20b80 53 45 45 4b 45 51 20 20 20 20 20 20 20 20 30 78  SEEKEQ        0x
20b90 30 32 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e  02    /* OP_Open
20ba0 2a 2a 20 63 75 72 73 6f 72 20 75 73 65 73 20 45  ** cursor uses E
20bb0 51 20 73 65 65 6b 20 6f 6e 6c 79 20 2a 2f 0a 23  Q seek only */.#
20bc0 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 46 4f  define OPFLAG_FO
20bd0 52 44 45 4c 45 54 45 20 20 20 20 20 30 78 30 38  RDELETE     0x08
20be0 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 20 73      /* OP_Open s
20bf0 68 6f 75 6c 64 20 75 73 65 20 42 54 52 45 45 5f  hould use BTREE_
20c00 46 4f 52 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65  FORDELETE */.#de
20c10 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 32 49 53  fine OPFLAG_P2IS
20c20 52 45 47 20 20 20 20 20 20 20 30 78 31 30 20 20  REG       0x10  
20c30 20 20 2f 2a 20 50 32 20 74 6f 20 4f 50 5f 4f 70    /* P2 to OP_Op
20c40 65 6e 2a 2a 20 69 73 20 61 20 72 65 67 69 73 74  en** is a regist
20c50 65 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 23 64 65  er number */.#de
20c60 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d  fine OPFLAG_PERM
20c70 55 54 45 20 20 20 20 20 20 20 30 78 30 31 20 20  UTE       0x01  
20c80 20 20 2f 2a 20 4f 50 5f 43 6f 6d 70 61 72 65 3a    /* OP_Compare:
20c90 20 75 73 65 20 74 68 65 20 70 65 72 6d 75 74 61   use the permuta
20ca0 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
20cb0 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54  OPFLAG_SAVEPOSIT
20cc0 49 4f 4e 20 20 30 78 30 32 20 20 20 20 2f 2a 20  ION  0x02    /* 
20cd0 4f 50 5f 44 65 6c 65 74 65 2f 49 6e 73 65 72 74  OP_Delete/Insert
20ce0 3a 20 73 61 76 65 20 63 75 72 73 6f 72 20 70 6f  : save cursor po
20cf0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  s */.#define OPF
20d00 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 20 20 20  LAG_AUXDELETE   
20d10 20 20 30 78 30 34 20 20 20 20 2f 2a 20 4f 50 5f    0x04    /* OP_
20d20 44 65 6c 65 74 65 3a 20 69 6e 64 65 78 20 69 6e  Delete: index in
20d30 20 61 20 44 45 4c 45 54 45 20 6f 70 20 2a 2f 0a   a DELETE op */.
20d40 0a 2f 2a 0a 20 2a 20 45 61 63 68 20 74 72 69 67  ./*. * Each trig
20d50 67 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20 74  ger present in t
20d60 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
20d70 6d 61 20 69 73 20 73 74 6f 72 65 64 20 61 73 20  ma is stored as 
20d80 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 20  an instance of. 
20d90 2a 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  * struct Trigger
20da0 2e 0a 20 2a 0a 20 2a 20 50 6f 69 6e 74 65 72 73  .. *. * Pointers
20db0 20 74 6f 20 69 6e 73 74 61 6e 63 65 73 20 6f 66   to instances of
20dc0 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20   struct Trigger 
20dd0 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 77  are stored in tw
20de0 6f 20 77 61 79 73 2e 0a 20 2a 20 31 2e 20 49 6e  o ways.. * 1. In
20df0 20 74 68 65 20 22 74 72 69 67 48 61 73 68 22 20   the "trigHash" 
20e00 68 61 73 68 20 74 61 62 6c 65 20 28 70 61 72 74  hash table (part
20e10 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 2a   of the sqlite3*
20e20 20 74 68 61 74 20 72 65 70 72 65 73 65 6e 74 73   that represents
20e30 20 74 68 65 0a 20 2a 20 20 20 20 64 61 74 61 62   the. *    datab
20e40 61 73 65 29 2e 20 54 68 69 73 20 61 6c 6c 6f 77  ase). This allow
20e50 73 20 54 72 69 67 67 65 72 20 73 74 72 75 63 74  s Trigger struct
20e60 75 72 65 73 20 74 6f 20 62 65 20 72 65 74 72 69  ures to be retri
20e70 65 76 65 64 20 62 79 20 6e 61 6d 65 2e 0a 20 2a  eved by name.. *
20e80 20 32 2e 20 41 6c 6c 20 74 72 69 67 67 65 72 73   2. All triggers
20e90 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
20ea0 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20   a single table 
20eb0 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 20 6c 69  form a linked li
20ec0 73 74 2c 20 75 73 69 6e 67 20 74 68 65 0a 20 2a  st, using the. *
20ed0 20 20 20 20 70 4e 65 78 74 20 6d 65 6d 62 65 72      pNext member
20ee0 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67   of struct Trigg
20ef0 65 72 2e 20 41 20 70 6f 69 6e 74 65 72 20 74 6f  er. A pointer to
20f00 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65   the first eleme
20f10 6e 74 20 6f 66 20 74 68 65 0a 20 2a 20 20 20 20  nt of the. *    
20f20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 20 73  linked list is s
20f30 74 6f 72 65 64 20 61 73 20 74 68 65 20 22 70 54  tored as the "pT
20f40 72 69 67 67 65 72 22 20 6d 65 6d 62 65 72 20 6f  rigger" member o
20f50 66 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64  f the associated
20f60 0a 20 2a 20 20 20 20 73 74 72 75 63 74 20 54 61  . *    struct Ta
20f70 62 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22  ble.. *. * The "
20f80 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65  step_list" membe
20f90 72 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  r points to the 
20fa0 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66  first element of
20fb0 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 20   a linked list. 
20fc0 2a 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  * containing the
20fd0 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
20fe0 73 70 65 63 69 66 69 65 64 20 61 73 20 74 68 65  specified as the
20ff0 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
21000 2e 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69  .. */.struct Tri
21010 67 67 65 72 20 7b 0a 20 20 63 68 61 72 20 2a 7a  gger {.  char *z
21020 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
21030 20 2f 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20   /* The name of 
21040 74 68 65 20 74 72 69 67 67 65 72 20 20 20 20 20  the trigger     
21050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21060 20 20 20 2a 2f 0a 20 20 63 68 61 72 20 2a 74 61     */.  char *ta
21070 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ble;            
21080 2f 2a 20 54 68 65 20 74 61 62 6c 65 20 6f 72 20  /* The table or 
21090 76 69 65 77 20 74 6f 20 77 68 69 63 68 20 74 68  view to which th
210a0 65 20 74 72 69 67 67 65 72 20 61 70 70 6c 69 65  e trigger applie
210b0 73 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20  s */.  u8 op;   
210c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
210d0 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45  * One of TK_DELE
210e0 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54  TE, TK_UPDATE, T
210f0 4b 5f 49 4e 53 45 52 54 20 20 20 20 20 20 20 20  K_INSERT        
21100 20 2a 2f 0a 20 20 75 38 20 74 72 5f 74 6d 3b 20   */.  u8 tr_tm; 
21110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
21120 20 4f 6e 65 20 6f 66 20 54 52 49 47 47 45 52 5f   One of TRIGGER_
21130 42 45 46 4f 52 45 2c 20 54 52 49 47 47 45 52 5f  BEFORE, TRIGGER_
21140 41 46 54 45 52 20 2a 2f 0a 20 20 45 78 70 72 20  AFTER */.  Expr 
21150 2a 70 57 68 65 6e 3b 20 20 20 20 20 20 20 20 20  *pWhen;         
21160 20 20 20 2f 2a 20 54 68 65 20 57 48 45 4e 20 63     /* The WHEN c
21170 6c 61 75 73 65 20 6f 66 20 74 68 65 20 65 78 70  lause of the exp
21180 72 65 73 73 69 6f 6e 20 28 6d 61 79 20 62 65 20  ression (may be 
21190 4e 55 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c 69 73  NULL) */.  IdLis
211a0 74 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20 20 20  t *pColumns;    
211b0 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 73     /* If this is
211c0 20 61 6e 20 55 50 44 41 54 45 20 4f 46 20 3c 63   an UPDATE OF <c
211d0 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74 72 69 67  olumn-list> trig
211e0 67 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ger,.           
211f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21200 20 20 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69    the <column-li
21210 73 74 3e 20 69 73 20 73 74 6f 72 65 64 20 68 65  st> is stored he
21220 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  re */.  Schema *
21230 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20  pSchema;        
21240 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69  /* Schema contai
21250 6e 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72  ning the trigger
21260 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 54   */.  Schema *pT
21270 61 62 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a  abSchema;     /*
21280 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69   Schema containi
21290 6e 67 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a  ng the table */.
212a0 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
212b0 74 65 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e  tep_list; /* Lin
212c0 6b 20 6c 69 73 74 20 6f 66 20 74 72 69 67 67 65  k list of trigge
212d0 72 20 70 72 6f 67 72 61 6d 20 73 74 65 70 73 20  r program steps 
212e0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20              */. 
212f0 20 54 72 69 67 67 65 72 20 2a 70 4e 65 78 74 3b   Trigger *pNext;
21300 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74           /* Next
21310 20 74 72 69 67 67 65 72 20 61 73 73 6f 63 69 61   trigger associa
21320 74 65 64 20 77 69 74 68 20 74 68 65 20 74 61 62  ted with the tab
21330 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  le */.};../*.** 
21340 41 20 74 72 69 67 67 65 72 20 69 73 20 65 69 74  A trigger is eit
21350 68 65 72 20 61 20 42 45 46 4f 52 45 20 6f 72 20  her a BEFORE or 
21360 61 6e 20 41 46 54 45 52 20 74 72 69 67 67 65 72  an AFTER trigger
21370 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
21380 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65   constants.** de
21390 74 65 72 6d 69 6e 65 20 77 68 69 63 68 2e 0a 2a  termine which..*
213a0 2a 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 61 72  *.** If there ar
213b0 65 20 6d 75 6c 74 69 70 6c 65 20 74 72 69 67 67  e multiple trigg
213c0 65 72 73 2c 20 79 6f 75 20 6d 69 67 68 74 20 6f  ers, you might o
213d0 66 20 73 6f 6d 65 20 42 45 46 4f 52 45 20 61 6e  f some BEFORE an
213e0 64 20 73 6f 6d 65 20 41 46 54 45 52 2e 0a 2a 2a  d some AFTER..**
213f0 20 49 6e 20 74 68 61 74 20 63 61 73 65 73 2c 20   In that cases, 
21400 74 68 65 20 63 6f 6e 73 74 61 6e 74 73 20 62 65  the constants be
21410 6c 6f 77 20 63 61 6e 20 62 65 20 4f 52 65 64 20  low can be ORed 
21420 74 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a 23 64 65  together..*/.#de
21430 66 69 6e 65 20 54 52 49 47 47 45 52 5f 42 45 46  fine TRIGGER_BEF
21440 4f 52 45 20 20 31 0a 23 64 65 66 69 6e 65 20 54  ORE  1.#define T
21450 52 49 47 47 45 52 5f 41 46 54 45 52 20 20 20 32  RIGGER_AFTER   2
21460 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74 61  ../*. * An insta
21470 6e 63 65 20 6f 66 20 73 74 72 75 63 74 20 54 72  nce of struct Tr
21480 69 67 67 65 72 53 74 65 70 20 69 73 20 75 73 65  iggerStep is use
21490 64 20 74 6f 20 73 74 6f 72 65 20 61 20 73 69 6e  d to store a sin
214a0 67 6c 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  gle SQL statemen
214b0 74 0a 20 2a 20 74 68 61 74 20 69 73 20 61 20 70  t. * that is a p
214c0 61 72 74 20 6f 66 20 61 20 74 72 69 67 67 65 72  art of a trigger
214d0 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a 20  -program.. *. * 
214e0 49 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72  Instances of str
214f0 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20  uct TriggerStep 
21500 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20  are stored in a 
21510 73 69 6e 67 6c 79 20 6c 69 6e 6b 65 64 20 6c 69  singly linked li
21520 73 74 20 28 6c 69 6e 6b 65 64 0a 20 2a 20 75 73  st (linked. * us
21530 69 6e 67 20 74 68 65 20 22 70 4e 65 78 74 22 20  ing the "pNext" 
21540 6d 65 6d 62 65 72 29 20 72 65 66 65 72 65 6e 63  member) referenc
21550 65 64 20 62 79 20 74 68 65 20 22 73 74 65 70 5f  ed by the "step_
21560 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 6f 66 20  list" member of 
21570 74 68 65 0a 20 2a 20 61 73 73 6f 63 69 61 74 65  the. * associate
21580 64 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  d struct Trigger
21590 20 69 6e 73 74 61 6e 63 65 2e 20 54 68 65 20 66   instance. The f
215a0 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20  irst element of 
215b0 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  the linked list 
215c0 69 73 0a 20 2a 20 74 68 65 20 66 69 72 73 74 20  is. * the first 
215d0 73 74 65 70 20 6f 66 20 74 68 65 20 74 72 69 67  step of the trig
215e0 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a  ger-program.. *.
215f0 20 2a 20 54 68 65 20 22 6f 70 22 20 6d 65 6d 62   * The "op" memb
21600 65 72 20 69 6e 64 69 63 61 74 65 73 20 77 68 65  er indicates whe
21610 74 68 65 72 20 74 68 69 73 20 69 73 20 61 20 22  ther this is a "
21620 44 45 4c 45 54 45 22 2c 20 22 49 4e 53 45 52 54  DELETE", "INSERT
21630 22 2c 20 22 55 50 44 41 54 45 22 20 6f 72 0a 20  ", "UPDATE" or. 
21640 2a 20 22 53 45 4c 45 43 54 22 20 73 74 61 74 65  * "SELECT" state
21650 6d 65 6e 74 2e 20 54 68 65 20 6d 65 61 6e 69 6e  ment. The meanin
21660 67 73 20 6f 66 20 74 68 65 20 6f 74 68 65 72 20  gs of the other 
21670 6d 65 6d 62 65 72 73 20 69 73 20 64 65 74 65 72  members is deter
21680 6d 69 6e 65 64 20 62 79 20 74 68 65 0a 20 2a 20  mined by the. * 
21690 76 61 6c 75 65 20 6f 66 20 22 6f 70 22 20 61 73  value of "op" as
216a0 20 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20   follows:. *. * 
216b0 28 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53 45 52 54  (op == TK_INSERT
216c0 29 0a 20 2a 20 6f 72 63 6f 6e 66 20 20 20 20 2d  ). * orconf    -
216d0 3e 20 73 74 6f 72 65 73 20 74 68 65 20 4f 4e 20  > stores the ON 
216e0 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74  CONFLICT algorit
216f0 68 6d 0a 20 2a 20 70 53 65 6c 65 63 74 20 20 20  hm. * pSelect   
21700 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e  -> If this is an
21710 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e   INSERT INTO ...
21720 20 53 45 4c 45 43 54 20 2e 2e 2e 20 73 74 61 74   SELECT ... stat
21730 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20  ement, then. *  
21740 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
21750 20 73 74 6f 72 65 73 20 61 20 70 6f 69 6e 74 65   stores a pointe
21760 72 20 74 6f 20 74 68 65 20 53 45 4c 45 43 54 20  r to the SELECT 
21770 73 74 61 74 65 6d 65 6e 74 2e 20 4f 74 68 65 72  statement. Other
21780 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 7a 54  wise NULL.. * zT
21790 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f  arget   -> Dequo
217a0 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  ted name of the 
217b0 74 61 62 6c 65 20 74 6f 20 69 6e 73 65 72 74 20  table to insert 
217c0 69 6e 74 6f 2e 0a 20 2a 20 70 45 78 70 72 4c 69  into.. * pExprLi
217d0 73 74 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73  st -> If this is
217e0 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20   an INSERT INTO 
217f0 2e 2e 2e 20 56 41 4c 55 45 53 20 2e 2e 2e 20 73  ... VALUES ... s
21800 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20  tatement, then. 
21810 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  *              t
21820 68 69 73 20 73 74 6f 72 65 73 20 76 61 6c 75 65  his stores value
21830 73 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64  s to be inserted
21840 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c  . Otherwise NULL
21850 2e 0a 20 2a 20 70 49 64 4c 69 73 74 20 20 20 2d  .. * pIdList   -
21860 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20  > If this is an 
21870 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20  INSERT INTO ... 
21880 28 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29  (<column-names>)
21890 20 56 41 4c 55 45 53 20 2e 2e 2e 0a 20 2a 20 20   VALUES .... *  
218a0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74              stat
218b0 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 69 73  ement, then this
218c0 20 73 74 6f 72 65 73 20 74 68 65 20 63 6f 6c 75   stores the colu
218d0 6d 6e 2d 6e 61 6d 65 73 20 74 6f 20 62 65 0a 20  mn-names to be. 
218e0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  *              i
218f0 6e 73 65 72 74 65 64 20 69 6e 74 6f 2e 0a 20 2a  nserted into.. *
21900 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 44 45  . * (op == TK_DE
21910 4c 45 54 45 29 0a 20 2a 20 7a 54 61 72 67 65 74  LETE). * zTarget
21920 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e     -> Dequoted n
21930 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
21940 20 74 6f 20 64 65 6c 65 74 65 20 66 72 6f 6d 2e   to delete from.
21950 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e  . * pWhere    ->
21960 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   The WHERE claus
21970 65 20 6f 66 20 74 68 65 20 44 45 4c 45 54 45 20  e of the DELETE 
21980 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65  statement if one
21990 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20   is specified.. 
219a0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f  *              O
219b0 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20  therwise NULL.. 
219c0 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 55  *. * (op == TK_U
219d0 50 44 41 54 45 29 0a 20 2a 20 7a 54 61 72 67 65  PDATE). * zTarge
219e0 74 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20  t   -> Dequoted 
219f0 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
21a00 65 20 74 6f 20 75 70 64 61 74 65 2e 0a 20 2a 20  e to update.. * 
21a10 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65  pWhere    -> The
21a20 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66   WHERE clause of
21a30 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74   the UPDATE stat
21a40 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20  ement if one is 
21a50 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20  specified.. *   
21a60 20 20 20 20 20 20 20 20 20 20 20 4f 74 68 65 72             Other
21a70 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45  wise NULL.. * pE
21a80 78 70 72 4c 69 73 74 20 2d 3e 20 41 20 6c 69 73  xprList -> A lis
21a90 74 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73  t of the columns
21aa0 20 74 6f 20 75 70 64 61 74 65 20 61 6e 64 20 74   to update and t
21ab0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74  he expressions t
21ac0 6f 20 75 70 64 61 74 65 0a 20 2a 20 20 20 20 20  o update. *     
21ad0 20 20 20 20 20 20 20 20 20 74 68 65 6d 20 74 6f           them to
21ae0 2e 20 53 65 65 20 73 71 6c 69 74 65 33 55 70 64  . See sqlite3Upd
21af0 61 74 65 28 29 20 64 6f 63 75 6d 65 6e 74 61 74  ate() documentat
21b00 69 6f 6e 20 6f 66 20 22 70 43 68 61 6e 67 65 73  ion of "pChanges
21b10 22 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  ". *            
21b20 20 20 61 72 67 75 6d 65 6e 74 2e 0a 20 2a 0a 20    argument.. *. 
21b30 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65  */.struct Trigge
21b40 72 53 74 65 70 20 7b 0a 20 20 75 38 20 6f 70 3b  rStep {.  u8 op;
21b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
21b60 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45  * One of TK_DELE
21b70 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54  TE, TK_UPDATE, T
21b80 4b 5f 49 4e 53 45 52 54 2c 20 54 4b 5f 53 45 4c  K_INSERT, TK_SEL
21b90 45 43 54 20 2a 2f 0a 20 20 75 38 20 6f 72 63 6f  ECT */.  u8 orco
21ba0 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  nf;           /*
21bb0 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 65 74 63   OE_Rollback etc
21bc0 2e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a  . */.  Trigger *
21bd0 70 54 72 69 67 3b 20 20 20 20 20 20 2f 2a 20 54  pTrig;      /* T
21be0 68 65 20 74 72 69 67 67 65 72 20 74 68 61 74 20  he trigger that 
21bf0 74 68 69 73 20 73 74 65 70 20 69 73 20 61 20 70  this step is a p
21c00 61 72 74 20 6f 66 20 2a 2f 0a 20 20 53 65 6c 65  art of */.  Sele
21c10 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20  ct *pSelect;    
21c20 20 2f 2a 20 53 45 4c 45 43 54 20 73 74 61 74 65   /* SELECT state
21c30 6d 65 6e 74 20 6f 72 20 52 48 53 20 6f 66 20 49  ment or RHS of I
21c40 4e 53 45 52 54 20 49 4e 54 4f 20 53 45 4c 45 43  NSERT INTO SELEC
21c50 54 20 2e 2e 2e 20 2a 2f 0a 20 20 63 68 61 72 20  T ... */.  char 
21c60 2a 7a 54 61 72 67 65 74 3b 20 20 20 20 20 20 20  *zTarget;       
21c70 2f 2a 20 54 61 72 67 65 74 20 74 61 62 6c 65 20  /* Target table 
21c80 66 6f 72 20 44 45 4c 45 54 45 2c 20 55 50 44 41  for DELETE, UPDA
21c90 54 45 2c 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20  TE, INSERT */.  
21ca0 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20  Expr *pWhere;   
21cb0 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52       /* The WHER
21cc0 45 20 63 6c 61 75 73 65 20 66 6f 72 20 44 45 4c  E clause for DEL
21cd0 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 73 74  ETE or UPDATE st
21ce0 65 70 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  eps */.  ExprLis
21cf0 74 20 2a 70 45 78 70 72 4c 69 73 74 3b 20 2f 2a  t *pExprList; /*
21d00 20 53 45 54 20 63 6c 61 75 73 65 20 66 6f 72 20   SET clause for 
21d10 55 50 44 41 54 45 2e 20 2a 2f 0a 20 20 49 64 4c  UPDATE. */.  IdL
21d20 69 73 74 20 2a 70 49 64 4c 69 73 74 3b 20 20 20  ist *pIdList;   
21d30 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65    /* Column name
21d40 73 20 66 6f 72 20 49 4e 53 45 52 54 20 2a 2f 0a  s for INSERT */.
21d50 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 70    TriggerStep *p
21d60 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 69  Next;  /* Next i
21d70 6e 20 74 68 65 20 6c 69 6e 6b 2d 6c 69 73 74 20  n the link-list 
21d80 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  */.  TriggerStep
21d90 20 2a 70 4c 61 73 74 3b 20 20 2f 2a 20 4c 61 73   *pLast;  /* Las
21da0 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 6e  t element in lin
21db0 6b 2d 6c 69 73 74 2e 20 56 61 6c 69 64 20 66 6f  k-list. Valid fo
21dc0 72 20 31 73 74 20 65 6c 65 6d 20 6f 6e 6c 79 20  r 1st elem only 
21dd0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
21de0 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
21df0 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e  ture contains in
21e00 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 62  formation used b
21e10 79 20 74 68 65 20 73 71 6c 69 74 65 46 69 78 2e  y the sqliteFix.
21e20 2e 2e 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 61  ...** routines a
21e30 73 20 74 68 65 79 20 77 61 6c 6b 20 74 68 65 20  s they walk the 
21e40 70 61 72 73 65 20 74 72 65 65 20 74 6f 20 6d 61  parse tree to ma
21e50 6b 65 20 64 61 74 61 62 61 73 65 20 72 65 66 65  ke database refe
21e60 72 65 6e 63 65 73 0a 2a 2a 20 65 78 70 6c 69 63  rences.** explic
21e70 69 74 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  it..*/.typedef s
21e80 74 72 75 63 74 20 44 62 46 69 78 65 72 20 44 62  truct DbFixer Db
21e90 46 69 78 65 72 3b 0a 73 74 72 75 63 74 20 44 62  Fixer;.struct Db
21ea0 46 69 78 65 72 20 7b 0a 20 20 50 61 72 73 65 20  Fixer {.  Parse 
21eb0 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 2f 2a  *pParse;      /*
21ec0 20 54 68 65 20 70 61 72 73 69 6e 67 20 63 6f 6e   The parsing con
21ed0 74 65 78 74 2e 20 20 45 72 72 6f 72 20 6d 65 73  text.  Error mes
21ee0 73 61 67 65 73 20 77 72 69 74 74 65 6e 20 68 65  sages written he
21ef0 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  re */.  Schema *
21f00 70 53 63 68 65 6d 61 3b 20 20 20 20 2f 2a 20 46  pSchema;    /* F
21f10 69 78 20 69 74 65 6d 73 20 74 6f 20 74 68 69 73  ix items to this
21f20 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74   schema */.  int
21f30 20 62 56 61 72 4f 6e 6c 79 3b 20 20 20 20 20 20   bVarOnly;      
21f40 20 2f 2a 20 43 68 65 63 6b 20 66 6f 72 20 76 61   /* Check for va
21f50 72 69 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65  riable reference
21f60 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 63 6f 6e 73  s only */.  cons
21f70 74 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 20 20  t char *zDb;    
21f80 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c  /* Make sure all
21f90 20 6f 62 6a 65 63 74 73 20 61 72 65 20 63 6f 6e   objects are con
21fa0 74 61 69 6e 65 64 20 69 6e 20 74 68 69 73 20 64  tained in this d
21fb0 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e  atabase */.  con
21fc0 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20  st char *zType; 
21fd0 20 2f 2a 20 54 79 70 65 20 6f 66 20 74 68 65 20   /* Type of the 
21fe0 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64  container - used
21ff0 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61   for error messa
22000 67 65 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54  ges */.  const T
22010 6f 6b 65 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20  oken *pName; /* 
22020 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 74  Name of the cont
22030 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72  ainer - used for
22040 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
22050 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
22060 6f 62 6a 65 63 74 65 64 20 75 73 65 64 20 74 6f  objected used to
22070 20 61 63 63 75 6d 75 6c 61 74 65 20 74 68 65 20   accumulate the 
22080 74 65 78 74 20 6f 66 20 61 20 73 74 72 69 6e 67  text of a string
22090 20 77 68 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20   where we.** do 
220a0 6e 6f 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20  not necessarily 
220b0 6b 6e 6f 77 20 68 6f 77 20 62 69 67 20 74 68 65  know how big the
220c0 20 73 74 72 69 6e 67 20 77 69 6c 6c 20 62 65 20   string will be 
220d0 69 6e 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73  in the end..*/.s
220e0 74 72 75 63 74 20 53 74 72 41 63 63 75 6d 20 7b  truct StrAccum {
220f0 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
22100 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 74 69 6f          /* Optio
22110 6e 61 6c 20 64 61 74 61 62 61 73 65 20 66 6f 72  nal database for
22120 20 6c 6f 6f 6b 61 73 69 64 65 2e 20 20 43 61 6e   lookaside.  Can
22130 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68   be NULL */.  ch
22140 61 72 20 2a 7a 42 61 73 65 3b 20 20 20 20 20 20  ar *zBase;      
22150 20 20 20 2f 2a 20 41 20 62 61 73 65 20 61 6c 6c     /* A base all
22160 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 20 66 72  ocation.  Not fr
22170 6f 6d 20 6d 61 6c 6c 6f 63 2e 20 2a 2f 0a 20 20  om malloc. */.  
22180 63 68 61 72 20 2a 7a 54 65 78 74 3b 20 20 20 20  char *zText;    
22190 20 20 20 20 20 2f 2a 20 54 68 65 20 73 74 72 69       /* The stri
221a0 6e 67 20 63 6f 6c 6c 65 63 74 65 64 20 73 6f 20  ng collected so 
221b0 66 61 72 20 2a 2f 0a 20 20 75 33 32 20 20 6e 43  far */.  u32  nC
221c0 68 61 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  har;          /*
221d0 20 4c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73   Length of the s
221e0 74 72 69 6e 67 20 73 6f 20 66 61 72 20 2a 2f 0a  tring so far */.
221f0 20 20 75 33 32 20 20 6e 41 6c 6c 6f 63 3b 20 20    u32  nAlloc;  
22200 20 20 20 20 20 20 20 2f 2a 20 41 6d 6f 75 6e 74         /* Amount
22210 20 6f 66 20 73 70 61 63 65 20 61 6c 6c 6f 63 61   of space alloca
22220 74 65 64 20 69 6e 20 7a 54 65 78 74 20 2a 2f 0a  ted in zText */.
22230 20 20 75 33 32 20 20 6d 78 41 6c 6c 6f 63 3b 20    u32  mxAlloc; 
22240 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75         /* Maximu
22250 6d 20 61 6c 6c 6f 77 65 64 20 61 6c 6c 6f 63 61  m allowed alloca
22260 74 69 6f 6e 2e 20 20 30 20 66 6f 72 20 6e 6f 20  tion.  0 for no 
22270 6d 61 6c 6c 6f 63 20 75 73 61 67 65 20 2a 2f 0a  malloc usage */.
22280 20 20 75 38 20 20 20 61 63 63 45 72 72 6f 72 3b    u8   accError;
22290 20 20 20 20 20 20 20 2f 2a 20 53 54 52 41 43 43         /* STRACC
222a0 55 4d 5f 4e 4f 4d 45 4d 20 6f 72 20 53 54 52 41  UM_NOMEM or STRA
222b0 43 43 55 4d 5f 54 4f 4f 42 49 47 20 2a 2f 0a 20  CCUM_TOOBIG */. 
222c0 20 75 38 20 20 20 70 72 69 6e 74 66 46 6c 61 67   u8   printfFlag
222d0 73 3b 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f  s;    /* SQLITE_
222e0 50 52 49 4e 54 46 20 66 6c 61 67 73 20 62 65 6c  PRINTF flags bel
222f0 6f 77 20 2a 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65  ow */.};.#define
22300 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20   STRACCUM_NOMEM 
22310 20 20 31 0a 23 64 65 66 69 6e 65 20 53 54 52 41    1.#define STRA
22320 43 43 55 4d 5f 54 4f 4f 42 49 47 20 20 32 0a 23  CCUM_TOOBIG  2.#
22330 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52  define SQLITE_PR
22340 49 4e 54 46 5f 49 4e 54 45 52 4e 41 4c 20 30 78  INTF_INTERNAL 0x
22350 30 31 20 20 2f 2a 20 49 6e 74 65 72 6e 61 6c 2d  01  /* Internal-
22360 75 73 65 2d 6f 6e 6c 79 20 63 6f 6e 76 65 72 74  use-only convert
22370 65 72 73 20 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23  ers allowed */.#
22380 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52  define SQLITE_PR
22390 49 4e 54 46 5f 53 51 4c 46 55 4e 43 20 20 30 78  INTF_SQLFUNC  0x
223a0 30 32 20 20 2f 2a 20 53 51 4c 20 66 75 6e 63 74  02  /* SQL funct
223b0 69 6f 6e 20 61 72 67 75 6d 65 6e 74 73 20 74 6f  ion arguments to
223c0 20 56 58 50 72 69 6e 74 66 20 2a 2f 0a 23 64 65   VXPrintf */.#de
223d0 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e  fine SQLITE_PRIN
223e0 54 46 5f 4d 41 4c 4c 4f 43 45 44 20 30 78 30 34  TF_MALLOCED 0x04
223f0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 78 54 65    /* True if xTe
22400 78 74 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20  xt is allocated 
22410 73 70 61 63 65 20 2a 2f 0a 0a 23 64 65 66 69 6e  space */..#defin
22420 65 20 69 73 4d 61 6c 6c 6f 63 65 64 28 58 29 20  e isMalloced(X) 
22430 20 28 28 28 58 29 2d 3e 70 72 69 6e 74 66 46 6c   (((X)->printfFl
22440 61 67 73 20 26 20 53 51 4c 49 54 45 5f 50 52 49  ags & SQLITE_PRI
22450 4e 54 46 5f 4d 41 4c 4c 4f 43 45 44 29 21 3d 30  NTF_MALLOCED)!=0
22460 29 0a 0a 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69 6e  ).../*.** A poin
22470 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72 75  ter to this stru
22480 63 74 75 72 65 20 69 73 20 75 73 65 64 20 74 6f  cture is used to
22490 20 63 6f 6d 6d 75 6e 69 63 61 74 65 20 69 6e 66   communicate inf
224a0 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f 6d  ormation.** from
224b0 20 73 71 6c 69 74 65 33 49 6e 69 74 20 61 6e 64   sqlite3Init and
224c0 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61 20   OP_ParseSchema 
224d0 69 6e 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33  into the sqlite3
224e0 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f  InitCallback..*/
224f0 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
22500 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
22510 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64          /* The d
22520 61 74 61 62 61 73 65 20 62 65 69 6e 67 20 69 6e  atabase being in
22530 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 63  itialized */.  c
22540 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67 3b 20  har **pzErrMsg; 
22550 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73     /* Error mess
22560 61 67 65 20 73 74 6f 72 65 64 20 68 65 72 65 20  age stored here 
22570 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20  */.  int iDb;   
22580 20 20 20 20 20 20 20 20 20 2f 2a 20 30 20 66 6f           /* 0 fo
22590 72 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e  r main database.
225a0 20 20 31 20 66 6f 72 20 54 45 4d 50 2c 20 32 2e    1 for TEMP, 2.
225b0 2e 20 66 6f 72 20 41 54 54 41 43 48 65 64 20 2a  . for ATTACHed *
225c0 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20  /.  int rc;     
225d0 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c          /* Resul
225e0 74 20 63 6f 64 65 20 73 74 6f 72 65 64 20 68 65  t code stored he
225f0 72 65 20 2a 2f 0a 7d 20 49 6e 69 74 44 61 74 61  re */.} InitData
22600 3b 0a 0a 2f 2a 0a 2a 2a 20 53 74 72 75 63 74 75  ;../*.** Structu
22610 72 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 67 6c  re containing gl
22620 6f 62 61 6c 20 63 6f 6e 66 69 67 75 72 61 74 69  obal configurati
22630 6f 6e 20 64 61 74 61 20 66 6f 72 20 74 68 65 20  on data for the 
22640 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 0a  SQLite library..
22650 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63  **.** This struc
22660 74 75 72 65 20 61 6c 73 6f 20 63 6f 6e 74 61 69  ture also contai
22670 6e 73 20 73 6f 6d 65 20 73 74 61 74 65 20 69 6e  ns some state in
22680 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74  formation..*/.st
22690 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66  ruct Sqlite3Conf
226a0 69 67 20 7b 0a 20 20 69 6e 74 20 62 4d 65 6d 73  ig {.  int bMems
226b0 74 61 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  tat;            
226c0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
226d0 20 74 6f 20 65 6e 61 62 6c 65 20 6d 65 6d 6f 72   to enable memor
226e0 79 20 73 74 61 74 75 73 20 2a 2f 0a 20 20 69 6e  y status */.  in
226f0 74 20 62 43 6f 72 65 4d 75 74 65 78 3b 20 20 20  t bCoreMutex;   
22700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22710 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c  /* True to enabl
22720 65 20 63 6f 72 65 20 6d 75 74 65 78 69 6e 67 20  e core mutexing 
22730 2a 2f 0a 20 20 69 6e 74 20 62 46 75 6c 6c 4d 75  */.  int bFullMu
22740 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  tex;            
22750 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
22760 6f 20 65 6e 61 62 6c 65 20 66 75 6c 6c 20 6d 75  o enable full mu
22770 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  texing */.  int 
22780 62 4f 70 65 6e 55 72 69 3b 20 20 20 20 20 20 20  bOpenUri;       
22790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
227a0 20 54 72 75 65 20 74 6f 20 69 6e 74 65 72 70 72   True to interpr
227b0 65 74 20 66 69 6c 65 6e 61 6d 65 73 20 61 73 20  et filenames as 
227c0 55 52 49 73 20 2a 2f 0a 20 20 69 6e 74 20 62 55  URIs */.  int bU
227d0 73 65 43 69 73 3b 20 20 20 20 20 20 20 20 20 20  seCis;          
227e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55              /* U
227f0 73 65 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 69  se covering indi
22800 63 65 73 20 66 6f 72 20 66 75 6c 6c 2d 73 63 61  ces for full-sca
22810 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 53 74  ns */.  int mxSt
22820 72 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20  rlen;           
22830 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78            /* Max
22840 69 6d 75 6d 20 73 74 72 69 6e 67 20 6c 65 6e 67  imum string leng
22850 74 68 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 76 65  th */.  int neve
22860 72 43 6f 72 72 75 70 74 3b 20 20 20 20 20 20 20  rCorrupt;       
22870 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74            /* Dat
22880 61 62 61 73 65 20 69 73 20 61 6c 77 61 79 73 20  abase is always 
22890 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 2a 2f 0a 20  well-formed */. 
228a0 20 69 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69 64 65   int szLookaside
228b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
228c0 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f     /* Default lo
228d0 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72 20 73  okaside buffer s
228e0 69 7a 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f  ize */.  int nLo
228f0 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20  okaside;        
22900 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
22910 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20  fault lookaside 
22920 62 75 66 66 65 72 20 63 6f 75 6e 74 20 2a 2f 0a  buffer count */.
22930 20 20 69 6e 74 20 6e 53 74 6d 74 53 70 69 6c 6c    int nStmtSpill
22940 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
22950 20 20 20 20 2f 2a 20 53 74 6d 74 2d 6a 6f 75 72      /* Stmt-jour
22960 6e 61 6c 20 73 70 69 6c 6c 2d 74 6f 2d 64 69 73  nal spill-to-dis
22970 6b 20 74 68 72 65 73 68 6f 6c 64 20 2a 2f 0a 20  k threshold */. 
22980 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74   sqlite3_mem_met
22990 68 6f 64 73 20 6d 3b 20 20 20 20 20 20 20 20 20  hods m;         
229a0 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20     /* Low-level 
229b0 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
229c0 6e 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20  n interface */. 
229d0 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d   sqlite3_mutex_m
229e0 65 74 68 6f 64 73 20 6d 75 74 65 78 3b 20 20 20  ethods mutex;   
229f0 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20     /* Low-level 
22a00 6d 75 74 65 78 20 69 6e 74 65 72 66 61 63 65 20  mutex interface 
22a10 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 70 63 61  */.  sqlite3_pca
22a20 63 68 65 5f 6d 65 74 68 6f 64 73 32 20 70 63 61  che_methods2 pca
22a30 63 68 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65  che2;  /* Low-le
22a40 76 65 6c 20 70 61 67 65 2d 63 61 63 68 65 20 69  vel page-cache i
22a50 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 76 6f  nterface */.  vo
22a60 69 64 20 2a 70 48 65 61 70 3b 20 20 20 20 20 20  id *pHeap;      
22a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a80 2f 2a 20 48 65 61 70 20 73 74 6f 72 61 67 65 20  /* Heap storage 
22a90 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  space */.  int n
22aa0 48 65 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Heap;           
22ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
22ac0 53 69 7a 65 20 6f 66 20 70 48 65 61 70 5b 5d 20  Size of pHeap[] 
22ad0 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 71 2c 20  */.  int mnReq, 
22ae0 6d 78 52 65 71 3b 20 20 20 20 20 20 20 20 20 20  mxReq;          
22af0 20 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20 61 6e         /* Min an
22b00 64 20 6d 61 78 20 68 65 61 70 20 72 65 71 75 65  d max heap reque
22b10 73 74 73 20 73 69 7a 65 73 20 2a 2f 0a 20 20 73  sts sizes */.  s
22b20 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 7a 4d  qlite3_int64 szM
22b30 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  map;            
22b40 20 2f 2a 20 6d 6d 61 70 28 29 20 73 70 61 63 65   /* mmap() space
22b50 20 70 65 72 20 6f 70 65 6e 20 66 69 6c 65 20 2a   per open file *
22b60 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36  /.  sqlite3_int6
22b70 34 20 6d 78 4d 6d 61 70 3b 20 20 20 20 20 20 20  4 mxMmap;       
22b80 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d        /* Maximum
22b90 20 76 61 6c 75 65 20 66 6f 72 20 73 7a 4d 6d 61   value for szMma
22ba0 70 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 63  p */.  void *pSc
22bb0 72 61 74 63 68 3b 20 20 20 20 20 20 20 20 20 20  ratch;          
22bc0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 63 72 61           /* Scra
22bd0 74 63 68 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20  tch memory */.  
22be0 69 6e 74 20 73 7a 53 63 72 61 74 63 68 3b 20 20  int szScratch;  
22bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c00 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63    /* Size of eac
22c10 68 20 73 63 72 61 74 63 68 20 62 75 66 66 65 72  h scratch buffer
22c20 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 63 72 61 74   */.  int nScrat
22c30 63 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ch;             
22c40 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
22c50 72 20 6f 66 20 73 63 72 61 74 63 68 20 62 75 66  r of scratch buf
22c60 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  fers */.  void *
22c70 70 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20  pPage;          
22c80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
22c90 61 67 65 20 63 61 63 68 65 20 6d 65 6d 6f 72 79  age cache memory
22ca0 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 50 61 67 65   */.  int szPage
22cb0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
22cc0 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
22cd0 6f 66 20 65 61 63 68 20 70 61 67 65 20 69 6e 20  of each page in 
22ce0 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74  pPage[] */.  int
22cf0 20 6e 50 61 67 65 3b 20 20 20 20 20 20 20 20 20   nPage;         
22d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22d10 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  * Number of page
22d20 73 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a  s in pPage[] */.
22d30 20 20 69 6e 74 20 6d 78 50 61 72 73 65 72 53 74    int mxParserSt
22d40 61 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20  ack;            
22d50 20 20 20 20 2f 2a 20 6d 61 78 69 6d 75 6d 20 64      /* maximum d
22d60 65 70 74 68 20 6f 66 20 74 68 65 20 70 61 72 73  epth of the pars
22d70 65 72 20 73 74 61 63 6b 20 2a 2f 0a 20 20 69 6e  er stack */.  in
22d80 74 20 73 68 61 72 65 64 43 61 63 68 65 45 6e 61  t sharedCacheEna
22d90 62 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  bled;           
22da0 2f 2a 20 74 72 75 65 20 69 66 20 73 68 61 72 65  /* true if share
22db0 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 65 6e 61  d-cache mode ena
22dc0 62 6c 65 64 20 2a 2f 0a 20 20 75 33 32 20 73 7a  bled */.  u32 sz
22dd0 50 6d 61 3b 20 20 20 20 20 20 20 20 20 20 20 20  Pma;            
22de0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
22df0 61 78 69 6d 75 6d 20 53 6f 72 74 65 72 20 50 4d  aximum Sorter PM
22e00 41 20 73 69 7a 65 20 2a 2f 0a 20 20 2f 2a 20 54  A size */.  /* T
22e10 68 65 20 61 62 6f 76 65 20 6d 69 67 68 74 20 62  he above might b
22e20 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f  e initialized to
22e30 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 54 68 65 20   non-zero.  The 
22e40 66 6f 6c 6c 6f 77 69 6e 67 20 6e 65 65 64 20 74  following need t
22e50 6f 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20 69 6e  o always.  ** in
22e60 69 74 69 61 6c 6c 79 20 62 65 20 7a 65 72 6f 2c  itially be zero,
22e70 20 68 6f 77 65 76 65 72 2e 20 2a 2f 0a 20 20 69   however. */.  i
22e80 6e 74 20 69 73 49 6e 69 74 3b 20 20 20 20 20 20  nt isInit;      
22e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ea0 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 69   /* True after i
22eb0 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 68 61  nitialization ha
22ec0 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20  s finished */.  
22ed0 69 6e 74 20 69 6e 50 72 6f 67 72 65 73 73 3b 20  int inProgress; 
22ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ef0 20 20 2f 2a 20 54 72 75 65 20 77 68 69 6c 65 20    /* True while 
22f00 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69  initialization i
22f10 6e 20 70 72 6f 67 72 65 73 73 20 2a 2f 0a 20 20  n progress */.  
22f20 69 6e 74 20 69 73 4d 75 74 65 78 49 6e 69 74 3b  int isMutexInit;
22f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f40 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20    /* True after 
22f50 6d 75 74 65 78 65 73 20 61 72 65 20 69 6e 69 74  mutexes are init
22f60 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74  ialized */.  int
22f70 20 69 73 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20 20   isMallocInit;  
22f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22f90 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c  * True after mal
22fa0 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a  loc is initializ
22fb0 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 50 43  ed */.  int isPC
22fc0 61 63 68 65 49 6e 69 74 3b 20 20 20 20 20 20 20  acheInit;       
22fd0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
22fe0 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69  e after malloc i
22ff0 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  s initialized */
23000 0a 20 20 69 6e 74 20 6e 52 65 66 49 6e 69 74 4d  .  int nRefInitM
23010 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20  utex;           
23020 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
23030 66 20 75 73 65 72 73 20 6f 66 20 70 49 6e 69 74  f users of pInit
23040 4d 75 74 65 78 20 2a 2f 0a 20 20 73 71 6c 69 74  Mutex */.  sqlit
23050 65 33 5f 6d 75 74 65 78 20 2a 70 49 6e 69 74 4d  e3_mutex *pInitM
23060 75 74 65 78 3b 20 20 20 20 20 20 20 20 2f 2a 20  utex;        /* 
23070 4d 75 74 65 78 20 75 73 65 64 20 62 79 20 73 71  Mutex used by sq
23080 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65  lite3_initialize
23090 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  () */.  void (*x
230a0 4c 6f 67 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63  Log)(void*,int,c
230b0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 20 2f 2a 20  onst char*); /* 
230c0 46 75 6e 63 74 69 6f 6e 20 66 6f 72 20 6c 6f 67  Function for log
230d0 67 69 6e 67 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  ging */.  void *
230e0 70 4c 6f 67 41 72 67 3b 20 20 20 20 20 20 20 20  pLogArg;        
230f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
23100 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74  * First argument
23110 20 74 6f 20 78 4c 6f 67 28 29 20 2a 2f 0a 23 69   to xLog() */.#i
23120 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
23130 4c 45 5f 53 51 4c 4c 4f 47 0a 20 20 76 6f 69 64  LE_SQLLOG.  void
23140 28 2a 78 53 71 6c 6c 6f 67 29 28 76 6f 69 64 2a  (*xSqllog)(void*
23150 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  ,sqlite3*,const 
23160 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 20 20 76  char*, int);.  v
23170 6f 69 64 20 2a 70 53 71 6c 6c 6f 67 41 72 67 3b  oid *pSqllogArg;
23180 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53  .#endif.#ifdef S
23190 51 4c 49 54 45 5f 56 44 42 45 5f 43 4f 56 45 52  QLITE_VDBE_COVER
231a0 41 47 45 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c  AGE.  /* The fol
231b0 6c 6f 77 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20  lowing callback 
231c0 28 69 66 20 6e 6f 74 20 4e 55 4c 4c 29 20 69 73  (if not NULL) is
231d0 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 65 76 65 72   invoked on ever
231e0 79 20 56 44 42 45 20 62 72 61 6e 63 68 0a 20 20  y VDBE branch.  
231f0 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 53  ** operation.  S
23200 65 74 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20  et the callback 
23210 75 73 69 6e 67 20 53 51 4c 49 54 45 5f 54 45 53  using SQLITE_TES
23220 54 43 54 52 4c 5f 56 44 42 45 5f 43 4f 56 45 52  TCTRL_VDBE_COVER
23230 41 47 45 2e 0a 20 20 2a 2f 0a 20 20 76 6f 69 64  AGE..  */.  void
23240 20 28 2a 78 56 64 62 65 42 72 61 6e 63 68 29 28   (*xVdbeBranch)(
23250 76 6f 69 64 2a 2c 69 6e 74 20 69 53 72 63 4c 69  void*,int iSrcLi
23260 6e 65 2c 75 38 20 65 54 68 69 73 2c 75 38 20 65  ne,u8 eThis,u8 e
23270 4d 78 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63  Mx);  /* Callbac
23280 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 56 64  k */.  void *pVd
23290 62 65 42 72 61 6e 63 68 41 72 67 3b 20 20 20 20  beBranchArg;    
232a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
232b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
232c0 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74   /* 1st argument
232d0 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64   */.#endif.#ifnd
232e0 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54  ef SQLITE_UNTEST
232f0 41 42 4c 45 0a 20 20 69 6e 74 20 28 2a 78 54 65  ABLE.  int (*xTe
23300 73 74 43 61 6c 6c 62 61 63 6b 29 28 69 6e 74 29  stCallback)(int)
23310 3b 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 76 6f  ;        /* Invo
23320 6b 65 64 20 62 79 20 73 71 6c 69 74 65 33 46 61  ked by sqlite3Fa
23330 75 6c 74 53 69 6d 28 29 20 2a 2f 0a 23 65 6e 64  ultSim() */.#end
23340 69 66 0a 20 20 69 6e 74 20 62 4c 6f 63 61 6c 74  if.  int bLocalt
23350 69 6d 65 46 61 75 6c 74 3b 20 20 20 20 20 20 20  imeFault;       
23360 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
23370 6f 20 66 61 69 6c 20 6c 6f 63 61 6c 74 69 6d 65  o fail localtime
23380 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 20 20 69 6e  () calls */.  in
23390 74 20 69 4f 6e 63 65 52 65 73 65 74 54 68 72 65  t iOnceResetThre
233a0 73 68 6f 6c 64 3b 20 20 20 20 20 20 20 20 20 20  shold;          
233b0 2f 2a 20 57 68 65 6e 20 74 6f 20 72 65 73 65 74  /* When to reset
233c0 20 4f 50 5f 4f 6e 63 65 20 63 6f 75 6e 74 65 72   OP_Once counter
233d0 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  s */.};../*.** T
233e0 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75 73 65  his macro is use
233f0 64 20 69 6e 73 69 64 65 20 6f 66 20 61 73 73 65  d inside of asse
23400 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20  rt() statements 
23410 74 6f 20 69 6e 64 69 63 61 74 65 20 74 68 61 74  to indicate that
23420 0a 2a 2a 20 74 68 65 20 61 73 73 65 72 74 20 69  .** the assert i
23430 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 6f 6e 20  s only valid on 
23440 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61  a well-formed da
23450 74 61 62 61 73 65 2e 20 20 49 6e 73 74 65 61 64  tabase.  Instead
23460 20 6f 66 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61   of:.**.**     a
23470 73 73 65 72 74 28 20 58 20 29 3b 0a 2a 2a 0a 2a  ssert( X );.**.*
23480 2a 20 4f 6e 65 20 77 72 69 74 65 73 3a 0a 2a 2a  * One writes:.**
23490 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20  .**     assert( 
234a0 58 20 7c 7c 20 43 4f 52 52 55 50 54 5f 44 42 20  X || CORRUPT_DB 
234b0 29 3b 0a 2a 2a 0a 2a 2a 20 43 4f 52 52 55 50 54  );.**.** CORRUPT
234c0 5f 44 42 20 69 73 20 74 72 75 65 20 64 75 72 69  _DB is true duri
234d0 6e 67 20 6e 6f 72 6d 61 6c 20 6f 70 65 72 61 74  ng normal operat
234e0 69 6f 6e 2e 20 20 43 4f 52 52 55 50 54 5f 44 42  ion.  CORRUPT_DB
234f0 20 64 6f 65 73 20 6e 6f 74 20 69 6e 64 69 63 61   does not indica
23500 74 65 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 64  te.** that the d
23510 61 74 61 62 61 73 65 20 69 73 20 64 65 66 69 6e  atabase is defin
23520 69 74 65 6c 79 20 63 6f 72 72 75 70 74 2c 20 6f  itely corrupt, o
23530 6e 6c 79 20 74 68 61 74 20 69 74 20 6d 69 67 68  nly that it migh
23540 74 20 62 65 20 63 6f 72 72 75 70 74 2e 0a 2a 2a  t be corrupt..**
23550 20 46 6f 72 20 6d 6f 73 74 20 74 65 73 74 20 63   For most test c
23560 61 73 65 73 2c 20 43 4f 52 52 55 50 54 5f 44 42  ases, CORRUPT_DB
23570 20 69 73 20 73 65 74 20 74 6f 20 66 61 6c 73 65   is set to false
23580 20 75 73 69 6e 67 20 61 20 73 70 65 63 69 61 6c   using a special
23590 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74  .** sqlite3_test
235a0 5f 63 6f 6e 74 72 6f 6c 28 29 2e 20 20 54 68 69  _control().  Thi
235b0 73 20 65 6e 61 62 6c 65 73 20 61 73 73 65 72 74  s enables assert
235c0 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f  () statements to
235d0 20 70 72 6f 76 65 0a 2a 2a 20 74 68 69 6e 67 73   prove.** things
235e0 20 74 68 61 74 20 61 72 65 20 61 6c 77 61 79 73   that are always
235f0 20 74 72 75 65 20 66 6f 72 20 77 65 6c 6c 2d 66   true for well-f
23600 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65 73 2e  ormed databases.
23610 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 52 52  .*/.#define CORR
23620 55 50 54 5f 44 42 20 20 28 73 71 6c 69 74 65 33  UPT_DB  (sqlite3
23630 43 6f 6e 66 69 67 2e 6e 65 76 65 72 43 6f 72 72  Config.neverCorr
23640 75 70 74 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 43  upt==0)../*.** C
23650 6f 6e 74 65 78 74 20 70 6f 69 6e 74 65 72 20 70  ontext pointer p
23660 61 73 73 65 64 20 64 6f 77 6e 20 74 68 72 6f 75  assed down throu
23670 67 68 20 74 68 65 20 74 72 65 65 2d 77 61 6c 6b  gh the tree-walk
23680 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 61 6c 6b  ..*/.struct Walk
23690 65 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50  er {.  Parse *pP
236a0 61 72 73 65 3b 20 20 20 20 20 20 20 20 20 20 20  arse;           
236b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
236c0 20 2f 2a 20 50 61 72 73 65 72 20 63 6f 6e 74 65   /* Parser conte
236d0 78 74 2e 20 20 2a 2f 0a 20 20 69 6e 74 20 28 2a  xt.  */.  int (*
236e0 78 45 78 70 72 43 61 6c 6c 62 61 63 6b 29 28 57  xExprCallback)(W
236f0 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 20  alker*, Expr*); 
23700 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20      /* Callback 
23710 66 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 73 20  for expressions 
23720 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 53 65 6c 65  */.  int (*xSele
23730 63 74 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b  ctCallback)(Walk
23740 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 20 20 2f  er*,Select*);  /
23750 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53  * Callback for S
23760 45 4c 45 43 54 73 20 2a 2f 0a 20 20 76 6f 69 64  ELECTs */.  void
23770 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61   (*xSelectCallba
23780 63 6b 32 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c  ck2)(Walker*,Sel
23790 65 63 74 2a 29 3b 2f 2a 20 53 65 63 6f 6e 64 20  ect*);/* Second 
237a0 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c  callback for SEL
237b0 45 43 54 73 20 2a 2f 0a 20 20 69 6e 74 20 77 61  ECTs */.  int wa
237c0 6c 6b 65 72 44 65 70 74 68 3b 20 20 20 20 20 20  lkerDepth;      
237d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
237e0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
237f0 20 73 75 62 71 75 65 72 69 65 73 20 2a 2f 0a 20   subqueries */. 
23800 20 75 38 20 65 43 6f 64 65 3b 20 20 20 20 20 20   u8 eCode;      
23810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23820 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20             /* A 
23830 73 6d 61 6c 6c 20 70 72 6f 63 65 73 73 69 6e 67  small processing
23840 20 63 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e   code */.  union
23850 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
23860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23870 20 20 20 20 20 2f 2a 20 45 78 74 72 61 20 64 61       /* Extra da
23880 74 61 20 66 6f 72 20 63 61 6c 6c 62 61 63 6b 20  ta for callback 
23890 2a 2f 0a 20 20 20 20 4e 61 6d 65 43 6f 6e 74 65  */.    NameConte
238a0 78 74 20 2a 70 4e 43 3b 20 20 20 20 20 20 20 20  xt *pNC;        
238b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
238c0 20 20 2f 2a 20 4e 61 6d 69 6e 67 20 63 6f 6e 74    /* Naming cont
238d0 65 78 74 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e  ext */.    int n
238e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
238f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23900 20 20 20 20 20 20 2f 2a 20 41 20 63 6f 75 6e 74        /* A count
23910 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43  er */.    int iC
23920 75 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ur;             
23930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23940 20 20 20 20 20 2f 2a 20 41 20 63 75 72 73 6f 72       /* A cursor
23950 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 53   number */.    S
23960 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74  rcList *pSrcList
23970 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
23980 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 52 4f            /* FRO
23990 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20  M clause */.    
239a0 73 74 72 75 63 74 20 53 72 63 43 6f 75 6e 74 20  struct SrcCount 
239b0 2a 70 53 72 63 43 6f 75 6e 74 3b 20 20 20 20 20  *pSrcCount;     
239c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
239d0 75 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e 20 72 65  unting column re
239e0 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 20 20  ferences */.    
239f0 73 74 72 75 63 74 20 43 43 75 72 48 69 6e 74 20  struct CCurHint 
23a00 2a 70 43 43 75 72 48 69 6e 74 3b 20 20 20 20 20  *pCCurHint;     
23a10 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73             /* Us
23a20 65 64 20 62 79 20 63 6f 64 65 43 75 72 73 6f 72  ed by codeCursor
23a30 48 69 6e 74 28 29 20 2a 2f 0a 20 20 20 20 69 6e  Hint() */.    in
23a40 74 20 2a 61 69 43 6f 6c 3b 20 20 20 20 20 20 20  t *aiCol;       
23a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a60 20 20 20 20 20 20 20 20 20 2f 2a 20 61 72 72 61           /* arra
23a70 79 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 64 65  y of column inde
23a80 78 65 73 20 2a 2f 0a 20 20 20 20 73 74 72 75 63  xes */.    struc
23a90 74 20 49 64 78 43 6f 76 65 72 20 2a 70 49 64 78  t IdxCover *pIdx
23aa0 43 6f 76 65 72 3b 20 20 20 20 20 20 20 20 20 20  Cover;          
23ab0 20 20 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 66        /* Check f
23ac0 6f 72 20 69 6e 64 65 78 20 63 6f 76 65 72 61 67  or index coverag
23ad0 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a  e */.  } u;.};..
23ae0 2f 2a 20 46 6f 72 77 61 72 64 20 64 65 63 6c 61  /* Forward decla
23af0 72 61 74 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73  rations */.int s
23b00 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 28 57  qlite3WalkExpr(W
23b10 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a  alker*, Expr*);.
23b20 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45  int sqlite3WalkE
23b30 78 70 72 4c 69 73 74 28 57 61 6c 6b 65 72 2a 2c  xprList(Walker*,
23b40 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74   ExprList*);.int
23b50 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65   sqlite3WalkSele
23b60 63 74 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65  ct(Walker*, Sele
23b70 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
23b80 33 57 61 6c 6b 53 65 6c 65 63 74 45 78 70 72 28  3WalkSelectExpr(
23b90 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a  Walker*, Select*
23ba0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  );.int sqlite3Wa
23bb0 6c 6b 53 65 6c 65 63 74 46 72 6f 6d 28 57 61 6c  lkSelectFrom(Wal
23bc0 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  ker*, Select*);.
23bd0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 57  int sqlite3ExprW
23be0 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65 72 2a 2c  alkNoop(Walker*,
23bf0 20 45 78 70 72 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20   Expr*);../*.** 
23c00 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d  Return code from
23c10 20 74 68 65 20 70 61 72 73 65 2d 74 72 65 65 20   the parse-tree 
23c20 77 61 6c 6b 69 6e 67 20 70 72 69 6d 69 74 69 76  walking primitiv
23c30 65 73 20 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20  es and their.** 
23c40 63 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64  callbacks..*/.#d
23c50 65 66 69 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e  efine WRC_Contin
23c60 75 65 20 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e  ue    0   /* Con
23c70 74 69 6e 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20  tinue down into 
23c80 63 68 69 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66  children */.#def
23c90 69 6e 65 20 57 52 43 5f 50 72 75 6e 65 20 20 20  ine WRC_Prune   
23ca0 20 20 20 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20      1   /* Omit 
23cb0 63 68 69 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e  children but con
23cc0 74 69 6e 75 65 20 77 61 6c 6b 69 6e 67 20 73 69  tinue walking si
23cd0 62 6c 69 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e  blings */.#defin
23ce0 65 20 57 52 43 5f 41 62 6f 72 74 20 20 20 20 20  e WRC_Abort     
23cf0 20 20 32 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e    2   /* Abandon
23d00 20 74 68 65 20 74 72 65 65 20 77 61 6c 6b 20 2a   the tree walk *
23d10 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  /../*.** An inst
23d20 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72  ance of this str
23d30 75 63 74 75 72 65 20 72 65 70 72 65 73 65 6e 74  ucture represent
23d40 73 20 61 20 73 65 74 20 6f 66 20 6f 6e 65 20 6f  s a set of one o
23d50 72 20 6d 6f 72 65 20 43 54 45 73 0a 2a 2a 20 28  r more CTEs.** (
23d60 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70  common table exp
23d70 72 65 73 73 69 6f 6e 73 29 20 63 72 65 61 74 65  ressions) create
23d80 64 20 62 79 20 61 20 73 69 6e 67 6c 65 20 57 49  d by a single WI
23d90 54 48 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74  TH clause..*/.st
23da0 72 75 63 74 20 57 69 74 68 20 7b 0a 20 20 69 6e  ruct With {.  in
23db0 74 20 6e 43 74 65 3b 20 20 20 20 20 20 20 20 20  t nCte;         
23dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
23dd0 20 4e 75 6d 62 65 72 20 6f 66 20 43 54 45 73 20   Number of CTEs 
23de0 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61 75  in the WITH clau
23df0 73 65 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 4f  se */.  With *pO
23e00 75 74 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  uter;           
23e10 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 61          /* Conta
23e20 69 6e 69 6e 67 20 57 49 54 48 20 63 6c 61 75 73  ining WITH claus
23e30 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20  e, or NULL */.  
23e40 73 74 72 75 63 74 20 43 74 65 20 7b 20 20 20 20  struct Cte {    
23e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e60 2f 2a 20 46 6f 72 20 65 61 63 68 20 43 54 45 20  /* For each CTE 
23e70 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61 75  in the WITH clau
23e80 73 65 2e 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63 68  se.... */.    ch
23e90 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
23ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
23eb0 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 43 54   Name of this CT
23ec0 45 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69 73  E */.    ExprLis
23ed0 74 20 2a 70 43 6f 6c 73 3b 20 20 20 20 20 20 20  t *pCols;       
23ee0 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74           /* List
23ef0 20 6f 66 20 65 78 70 6c 69 63 69 74 20 63 6f 6c   of explicit col
23f00 75 6d 6e 20 6e 61 6d 65 73 2c 20 6f 72 20 4e 55  umn names, or NU
23f10 4c 4c 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74  LL */.    Select
23f20 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 20   *pSelect;      
23f30 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
23f40 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74   definition of t
23f50 68 69 73 20 43 54 45 20 2a 2f 0a 20 20 20 20 63  his CTE */.    c
23f60 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 74 65 45  onst char *zCteE
23f70 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  rr;            /
23f80 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20  * Error message 
23f90 66 6f 72 20 63 69 72 63 75 6c 61 72 20 72 65 66  for circular ref
23fa0 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 61  erences */.  } a
23fb0 5b 31 5d 3b 0a 7d 3b 0a 0a 23 69 66 64 65 66 20  [1];.};..#ifdef 
23fc0 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a  SQLITE_DEBUG./*.
23fd0 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
23fe0 66 20 74 68 65 20 54 72 65 65 56 69 65 77 20 6f  f the TreeView o
23ff0 62 6a 65 63 74 20 69 73 20 75 73 65 64 20 66 6f  bject is used fo
24000 72 20 70 72 69 6e 74 69 6e 67 20 74 68 65 20 63  r printing the c
24010 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 64 61 74  ontent of.** dat
24020 61 20 73 74 72 75 63 74 75 72 65 73 20 6f 6e 20  a structures on 
24030 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
24040 74 66 28 29 20 75 73 69 6e 67 20 61 20 74 72 65  tf() using a tre
24050 65 2d 6c 69 6b 65 20 76 69 65 77 2e 0a 2a 2f 0a  e-like view..*/.
24060 73 74 72 75 63 74 20 54 72 65 65 56 69 65 77 20  struct TreeView 
24070 7b 0a 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20  {.  int iLevel; 
24080 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57              /* W
24090 68 69 63 68 20 6c 65 76 65 6c 20 6f 66 20 74 68  hich level of th
240a0 65 20 74 72 65 65 20 77 65 20 61 72 65 20 6f 6e  e tree we are on
240b0 20 2a 2f 0a 20 20 75 38 20 20 62 4c 69 6e 65 5b   */.  u8  bLine[
240c0 31 30 30 5d 3b 20 20 20 20 20 20 20 20 20 2f 2a  100];         /*
240d0 20 44 72 61 77 20 76 65 72 74 69 63 61 6c 20 69   Draw vertical i
240e0 6e 20 63 6f 6c 75 6d 6e 20 69 20 69 66 20 62 4c  n column i if bL
240f0 69 6e 65 5b 69 5d 20 69 73 20 74 72 75 65 20 2a  ine[i] is true *
24100 2f 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53  /.};.#endif /* S
24110 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 0a  QLITE_DEBUG */..
24120 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e 67 20 7a  /*.** Assuming z
24130 49 6e 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  In points to the
24140 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20 61   first byte of a
24150 20 55 54 46 2d 38 20 63 68 61 72 61 63 74 65 72   UTF-8 character
24160 2c 0a 2a 2a 20 61 64 76 61 6e 63 65 20 7a 49 6e  ,.** advance zIn
24170 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65   to point to the
24180 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20 74   first byte of t
24190 68 65 20 6e 65 78 74 20 55 54 46 2d 38 20 63 68  he next UTF-8 ch
241a0 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 23 64 65 66  aracter..*/.#def
241b0 69 6e 65 20 53 51 4c 49 54 45 5f 53 4b 49 50 5f  ine SQLITE_SKIP_
241c0 55 54 46 38 28 7a 49 6e 29 20 7b 20 20 20 20 20  UTF8(zIn) {     
241d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
241e0 20 20 20 5c 0a 20 20 69 66 28 20 28 2a 28 7a 49     \.  if( (*(zI
241f0 6e 2b 2b 29 29 3e 3d 30 78 63 30 20 29 7b 20 20  n++))>=0xc0 ){  
24200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24210 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20              \.  
24220 20 20 77 68 69 6c 65 28 20 28 2a 7a 49 6e 20 26    while( (*zIn &
24230 20 30 78 63 30 29 3d 3d 30 78 38 30 20 29 7b 20   0xc0)==0x80 ){ 
24240 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20 20 20 20 20  zIn++; }        
24250 20 20 20 20 20 5c 0a 20 20 7d 20 20 20 20 20 20       \.  }      
24260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a                \.
24290 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  }../*.** The SQL
242a0 49 54 45 5f 2a 5f 42 4b 50 54 20 6d 61 63 72 6f  ITE_*_BKPT macro
242b0 73 20 61 72 65 20 73 75 62 73 74 69 74 75 74 65  s are substitute
242c0 73 20 66 6f 72 20 74 68 65 20 65 72 72 6f 72 20  s for the error 
242d0 63 6f 64 65 73 20 77 69 74 68 0a 2a 2a 20 74 68  codes with.** th
242e0 65 20 73 61 6d 65 20 6e 61 6d 65 20 62 75 74 20  e same name but 
242f0 77 69 74 68 6f 75 74 20 74 68 65 20 5f 42 4b 50  without the _BKP
24300 54 20 73 75 66 66 69 78 2e 20 20 54 68 65 73 65  T suffix.  These
24310 20 6d 61 63 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a   macros invoke.*
24320 2a 20 72 6f 75 74 69 6e 65 73 20 74 68 61 74 20  * routines that 
24330 72 65 70 6f 72 74 20 74 68 65 20 6c 69 6e 65 2d  report the line-
24340 6e 75 6d 62 65 72 20 6f 6e 20 77 68 69 63 68 20  number on which 
24350 74 68 65 20 65 72 72 6f 72 20 6f 72 69 67 69 6e  the error origin
24360 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 73 71  ated.** using sq
24370 6c 69 74 65 33 5f 6c 6f 67 28 29 2e 20 20 54 68  lite3_log().  Th
24380 65 20 72 6f 75 74 69 6e 65 73 20 61 6c 73 6f 20  e routines also 
24390 70 72 6f 76 69 64 65 20 61 20 63 6f 6e 76 65 6e  provide a conven
243a0 69 65 6e 74 20 70 6c 61 63 65 0a 2a 2a 20 74 6f  ient place.** to
243b0 20 73 65 74 20 61 20 64 65 62 75 67 67 65 72 20   set a debugger 
243c0 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69  breakpoint..*/.i
243d0 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70  nt sqlite3Corrup
243e0 74 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74  tError(int);.int
243f0 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72   sqlite3MisuseEr
24400 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71  ror(int);.int sq
24410 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72  lite3CantopenErr
24420 6f 72 28 69 6e 74 29 3b 0a 23 64 65 66 69 6e 65  or(int);.#define
24430 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f   SQLITE_CORRUPT_
24440 42 4b 50 54 20 73 71 6c 69 74 65 33 43 6f 72 72  BKPT sqlite3Corr
24450 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f  uptError(__LINE_
24460 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  _).#define SQLIT
24470 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 20 73 71  E_MISUSE_BKPT sq
24480 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72  lite3MisuseError
24490 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69  (__LINE__).#defi
244a0 6e 65 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50  ne SQLITE_CANTOP
244b0 45 4e 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43  EN_BKPT sqlite3C
244c0 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 5f 5f 4c  antopenError(__L
244d0 49 4e 45 5f 5f 29 0a 23 69 66 64 65 66 20 53 51  INE__).#ifdef SQ
244e0 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 6e 74  LITE_DEBUG.  int
244f0 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d 45 72 72   sqlite3NomemErr
24500 6f 72 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73  or(int);.  int s
24510 71 6c 69 74 65 33 49 6f 65 72 72 6e 6f 6d 65 6d  qlite3Ioerrnomem
24520 45 72 72 6f 72 28 69 6e 74 29 3b 0a 23 20 64 65  Error(int);.# de
24530 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  fine SQLITE_NOME
24540 4d 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 4e 6f  M_BKPT sqlite3No
24550 6d 65 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f  memError(__LINE_
24560 5f 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  _).# define SQLI
24570 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42  TE_IOERR_NOMEM_B
24580 4b 50 54 20 73 71 6c 69 74 65 33 49 6f 65 72 72  KPT sqlite3Ioerr
24590 6e 6f 6d 65 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e  nomemError(__LIN
245a0 45 5f 5f 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  E__).#else.# def
245b0 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  ine SQLITE_NOMEM
245c0 5f 42 4b 50 54 20 53 51 4c 49 54 45 5f 4e 4f 4d  _BKPT SQLITE_NOM
245d0 45 4d 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  EM.# define SQLI
245e0 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42  TE_IOERR_NOMEM_B
245f0 4b 50 54 20 53 51 4c 49 54 45 5f 49 4f 45 52 52  KPT SQLITE_IOERR
24600 5f 4e 4f 4d 45 4d 0a 23 65 6e 64 69 66 0a 0a 2f  _NOMEM.#endif../
24610 2a 0a 2a 2a 20 46 54 53 33 20 61 6e 64 20 46 54  *.** FTS3 and FT
24620 53 34 20 62 6f 74 68 20 72 65 71 75 69 72 65 20  S4 both require 
24630 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73 75  virtual table su
24640 70 70 6f 72 74 0a 2a 2f 0a 23 69 66 20 64 65 66  pport.*/.#if def
24650 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
24660 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 23  _VIRTUALTABLE).#
24670 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e   undef SQLITE_EN
24680 41 42 4c 45 5f 46 54 53 33 0a 23 20 75 6e 64 65  ABLE_FTS3.# unde
24690 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
246a0 46 54 53 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  FTS4.#endif../*.
246b0 2a 2a 20 46 54 53 34 20 69 73 20 72 65 61 6c 6c  ** FTS4 is reall
246c0 79 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 66  y an extension f
246d0 6f 72 20 46 54 53 33 2e 20 20 49 74 20 69 73 20  or FTS3.  It is 
246e0 65 6e 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68  enabled using th
246f0 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42  e.** SQLITE_ENAB
24700 4c 45 5f 46 54 53 33 20 6d 61 63 72 6f 2e 20 20  LE_FTS3 macro.  
24710 42 75 74 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e  But to avoid con
24720 66 75 73 69 6f 6e 20 77 65 20 61 6c 73 6f 20 63  fusion we also c
24730 61 6c 6c 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54  all.** the SQLIT
24740 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 20 6d 61  E_ENABLE_FTS4 ma
24750 63 72 6f 20 74 6f 20 73 65 72 76 65 20 61 73 20  cro to serve as 
24760 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 53 51 4c  an alias for SQL
24770 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 2e  ITE_ENABLE_FTS3.
24780 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
24790 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
247a0 53 34 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  S4) && !defined(
247b0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
247c0 53 33 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  S3).# define SQL
247d0 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20  ITE_ENABLE_FTS3 
247e0 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
247f0 54 68 65 20 63 74 79 70 65 2e 68 20 68 65 61 64  The ctype.h head
24800 65 72 20 69 73 20 6e 65 65 64 65 64 20 66 6f 72  er is needed for
24810 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79 73 74 65   non-ASCII syste
24820 6d 73 2e 20 20 49 74 20 69 73 20 61 6c 73 6f 0a  ms.  It is also.
24830 2a 2a 20 6e 65 65 64 65 64 20 62 79 20 46 54 53  ** needed by FTS
24840 33 20 77 68 65 6e 20 46 54 53 33 20 69 73 20 69  3 when FTS3 is i
24850 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65 20 61  ncluded in the a
24860 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  malgamation..*/.
24870 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
24880 49 54 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c 0a  ITE_ASCII) || \.
24890 20 20 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c      (defined(SQL
248a0 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29  ITE_ENABLE_FTS3)
248b0 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49   && defined(SQLI
248c0 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 29  TE_AMALGAMATION)
248d0 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c 63 74 79  ).# include <cty
248e0 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a  pe.h>.#endif../*
248f0 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
24900 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20 74  g macros mimic t
24910 68 65 20 73 74 61 6e 64 61 72 64 20 6c 69 62 72  he standard libr
24920 61 72 79 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f  ary functions to
24930 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73 70  upper(),.** issp
24940 61 63 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28 29  ace(), isalnum()
24950 2c 20 69 73 64 69 67 69 74 28 29 20 61 6e 64 20  , isdigit() and 
24960 69 73 78 64 69 67 69 74 28 29 2c 20 72 65 73 70  isxdigit(), resp
24970 65 63 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a 2a  ectively. The.**
24980 20 73 71 6c 69 74 65 20 76 65 72 73 69 6f 6e 73   sqlite versions
24990 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20 41   only work for A
249a0 53 43 49 49 20 63 68 61 72 61 63 74 65 72 73 2c  SCII characters,
249b0 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 6c   regardless of l
249c0 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66  ocale..*/.#ifdef
249d0 20 53 51 4c 49 54 45 5f 41 53 43 49 49 0a 23 20   SQLITE_ASCII.# 
249e0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f  define sqlite3To
249f0 75 70 70 65 72 28 78 29 20 20 28 28 78 29 26 7e  upper(x)  ((x)&~
24a00 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
24a10 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
24a20 28 78 29 5d 26 30 78 32 30 29 29 0a 23 20 64 65  (x)]&0x20)).# de
24a30 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70  fine sqlite3Issp
24a40 61 63 65 28 78 29 20 20 20 28 73 71 6c 69 74 65  ace(x)   (sqlite
24a50 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
24a60 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
24a70 30 31 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  01).# define sql
24a80 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20  ite3Isalnum(x)  
24a90 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61   (sqlite3CtypeMa
24aa0 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
24ab0 29 28 78 29 5d 26 30 78 30 36 29 0a 23 20 64 65  )(x)]&0x06).# de
24ac0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c  fine sqlite3Isal
24ad0 70 68 61 28 78 29 20 20 20 28 73 71 6c 69 74 65  pha(x)   (sqlite
24ae0 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
24af0 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
24b00 30 32 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  02).# define sql
24b10 69 74 65 33 49 73 64 69 67 69 74 28 78 29 20 20  ite3Isdigit(x)  
24b20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61   (sqlite3CtypeMa
24b30 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
24b40 29 28 78 29 5d 26 30 78 30 34 29 0a 23 20 64 65  )(x)]&0x04).# de
24b50 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64  fine sqlite3Isxd
24b60 69 67 69 74 28 78 29 20 20 28 73 71 6c 69 74 65  igit(x)  (sqlite
24b70 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
24b80 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
24b90 30 38 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  08).# define sql
24ba0 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20  ite3Tolower(x)  
24bb0 20 28 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f   (sqlite3UpperTo
24bc0 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e 65 64 20  Lower[(unsigned 
24bd0 63 68 61 72 29 28 78 29 5d 29 0a 23 20 64 65 66  char)(x)]).# def
24be0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 71 75 6f  ine sqlite3Isquo
24bf0 74 65 28 78 29 20 20 20 28 73 71 6c 69 74 65 33  te(x)   (sqlite3
24c00 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
24c10 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 38  ed char)(x)]&0x8
24c20 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  0).#else.# defin
24c30 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72  e sqlite3Toupper
24c40 28 78 29 20 20 20 74 6f 75 70 70 65 72 28 28 75  (x)   toupper((u
24c50 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
24c60 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
24c70 65 33 49 73 73 70 61 63 65 28 78 29 20 20 20 69  e3Isspace(x)   i
24c80 73 73 70 61 63 65 28 28 75 6e 73 69 67 6e 65 64  sspace((unsigned
24c90 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
24ca0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e  ine sqlite3Isaln
24cb0 75 6d 28 78 29 20 20 20 69 73 61 6c 6e 75 6d 28  um(x)   isalnum(
24cc0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
24cd0 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
24ce0 69 74 65 33 49 73 61 6c 70 68 61 28 78 29 20 20  ite3Isalpha(x)  
24cf0 20 69 73 61 6c 70 68 61 28 28 75 6e 73 69 67 6e   isalpha((unsign
24d00 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
24d10 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 64  efine sqlite3Isd
24d20 69 67 69 74 28 78 29 20 20 20 69 73 64 69 67 69  igit(x)   isdigi
24d30 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  t((unsigned char
24d40 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
24d50 71 6c 69 74 65 33 49 73 78 64 69 67 69 74 28 78  qlite3Isxdigit(x
24d60 29 20 20 69 73 78 64 69 67 69 74 28 28 75 6e 73  )  isxdigit((uns
24d70 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
24d80 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
24d90 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 74 6f 6c  Tolower(x)   tol
24da0 6f 77 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63  ower((unsigned c
24db0 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
24dc0 65 20 73 71 6c 69 74 65 33 49 73 71 75 6f 74 65  e sqlite3Isquote
24dd0 28 78 29 20 20 20 28 28 78 29 3d 3d 27 22 27 7c  (x)   ((x)=='"'|
24de0 7c 28 78 29 3d 3d 27 5c 27 27 7c 7c 28 78 29 3d  |(x)=='\''||(x)=
24df0 3d 27 5b 27 7c 7c 28 78 29 3d 3d 27 60 27 29 0a  ='['||(x)=='`').
24e00 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
24e10 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49  QLITE_OMIT_COMPI
24e20 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53 0a 69  LEOPTION_DIAGS.i
24e30 6e 74 20 73 71 6c 69 74 65 33 49 73 49 64 43 68  nt sqlite3IsIdCh
24e40 61 72 28 75 38 29 3b 0a 23 65 6e 64 69 66 0a 0a  ar(u8);.#endif..
24e50 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c 20 66  /*.** Internal f
24e60 75 6e 63 74 69 6f 6e 20 70 72 6f 74 6f 74 79 70  unction prototyp
24e70 65 73 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  es.*/.int sqlite
24e80 33 53 74 72 49 43 6d 70 28 63 6f 6e 73 74 20 63  3StrICmp(const c
24e90 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
24ea0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74  );.int sqlite3St
24eb0 72 6c 65 6e 33 30 28 63 6f 6e 73 74 20 63 68 61  rlen30(const cha
24ec0 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  r*);.char *sqlit
24ed0 65 33 43 6f 6c 75 6d 6e 54 79 70 65 28 43 6f 6c  e3ColumnType(Col
24ee0 75 6d 6e 2a 2c 63 68 61 72 2a 29 3b 0a 23 64 65  umn*,char*);.#de
24ef0 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 72 4e  fine sqlite3StrN
24f00 49 43 6d 70 20 73 71 6c 69 74 65 33 5f 73 74 72  ICmp sqlite3_str
24f10 6e 69 63 6d 70 0a 0a 69 6e 74 20 73 71 6c 69 74  nicmp..int sqlit
24f20 65 33 4d 61 6c 6c 6f 63 49 6e 69 74 28 76 6f 69  e3MallocInit(voi
24f30 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
24f40 4d 61 6c 6c 6f 63 45 6e 64 28 76 6f 69 64 29 3b  MallocEnd(void);
24f50 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61  .void *sqlite3Ma
24f60 6c 6c 6f 63 28 75 36 34 29 3b 0a 76 6f 69 64 20  lloc(u64);.void 
24f70 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65  *sqlite3MallocZe
24f80 72 6f 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  ro(u64);.void *s
24f90 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65  qlite3DbMallocZe
24fa0 72 6f 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34  ro(sqlite3*, u64
24fb0 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
24fc0 44 62 4d 61 6c 6c 6f 63 52 61 77 28 73 71 6c 69  DbMallocRaw(sqli
24fd0 74 65 33 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64  te3*, u64);.void
24fe0 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f   *sqlite3DbMallo
24ff0 63 52 61 77 4e 4e 28 73 71 6c 69 74 65 33 2a 2c  cRawNN(sqlite3*,
25000 20 75 36 34 29 3b 0a 63 68 61 72 20 2a 73 71 6c   u64);.char *sql
25010 69 74 65 33 44 62 53 74 72 44 75 70 28 73 71 6c  ite3DbStrDup(sql
25020 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
25030 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  *);.char *sqlite
25040 33 44 62 53 74 72 4e 44 75 70 28 73 71 6c 69 74  3DbStrNDup(sqlit
25050 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
25060 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c   u64);.void *sql
25070 69 74 65 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64  ite3Realloc(void
25080 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  *, u64);.void *s
25090 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f  qlite3DbReallocO
250a0 72 46 72 65 65 28 73 71 6c 69 74 65 33 20 2a 2c  rFree(sqlite3 *,
250b0 20 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76   void *, u64);.v
250c0 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65  oid *sqlite3DbRe
250d0 61 6c 6c 6f 63 28 73 71 6c 69 74 65 33 20 2a 2c  alloc(sqlite3 *,
250e0 20 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76   void *, u64);.v
250f0 6f 69 64 20 73 71 6c 69 74 65 33 44 62 46 72 65  oid sqlite3DbFre
25100 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64  e(sqlite3*, void
25110 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  *);.int sqlite3M
25120 61 6c 6c 6f 63 53 69 7a 65 28 76 6f 69 64 2a 29  allocSize(void*)
25130 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62 4d  ;.int sqlite3DbM
25140 61 6c 6c 6f 63 53 69 7a 65 28 73 71 6c 69 74 65  allocSize(sqlite
25150 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64  3*, void*);.void
25160 20 2a 73 71 6c 69 74 65 33 53 63 72 61 74 63 68   *sqlite3Scratch
25170 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69  Malloc(int);.voi
25180 64 20 73 71 6c 69 74 65 33 53 63 72 61 74 63 68  d sqlite3Scratch
25190 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69  Free(void*);.voi
251a0 64 20 2a 73 71 6c 69 74 65 33 50 61 67 65 4d 61  d *sqlite3PageMa
251b0 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20  lloc(int);.void 
251c0 73 71 6c 69 74 65 33 50 61 67 65 46 72 65 65 28  sqlite3PageFree(
251d0 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  void*);.void sql
251e0 69 74 65 33 4d 65 6d 53 65 74 44 65 66 61 75 6c  ite3MemSetDefaul
251f0 74 28 76 6f 69 64 29 3b 0a 23 69 66 6e 64 65 66  t(void);.#ifndef
25200 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42   SQLITE_UNTESTAB
25210 4c 45 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  LE.void sqlite3B
25220 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b 73  enignMallocHooks
25230 28 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 2c  (void (*)(void),
25240 20 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 29   void (*)(void))
25250 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c  ;.#endif.int sql
25260 69 74 65 33 48 65 61 70 4e 65 61 72 6c 79 46 75  ite3HeapNearlyFu
25270 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a  ll(void);../*.**
25280 20 4f 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68   On systems with
25290 20 61 6d 70 6c 65 20 73 74 61 63 6b 20 73 70 61   ample stack spa
252a0 63 65 20 61 6e 64 20 74 68 61 74 20 73 75 70 70  ce and that supp
252b0 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c 20 6d 61  ort alloca(), ma
252c0 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20 61 6c 6c  ke.** use of all
252d0 6f 63 61 28 29 20 74 6f 20 6f 62 74 61 69 6e 20  oca() to obtain 
252e0 73 70 61 63 65 20 66 6f 72 20 6c 61 72 67 65 20  space for large 
252f0 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a 65 63 74  automatic object
25300 73 2e 20 20 42 79 20 64 65 66 61 75 6c 74 2c 0a  s.  By default,.
25310 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20  ** obtain space 
25320 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e 0a 2a  from malloc()..*
25330 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f 63 61 28  *.** The alloca(
25340 29 20 72 6f 75 74 69 6e 65 20 6e 65 76 65 72 20  ) routine never 
25350 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e 20 20 54  returns NULL.  T
25360 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65 20 63  his will cause c
25370 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20 74 68 61  ode paths.** tha
25380 74 20 64 65 61 6c 20 77 69 74 68 20 73 71 6c 69  t deal with sqli
25390 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 28 29 20  te3StackAlloc() 
253a0 66 61 69 6c 75 72 65 73 20 74 6f 20 62 65 20 75  failures to be u
253b0 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a 2f 0a 23  nreachable..*/.#
253c0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45  ifdef SQLITE_USE
253d0 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66 69 6e 65  _ALLOCA.# define
253e0 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
253f0 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 61 6c 6c  ocRaw(D,N)   all
25400 6f 63 61 28 4e 29 0a 23 20 64 65 66 69 6e 65 20  oca(N).# define 
25410 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f  sqlite3StackAllo
25420 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d 65 6d 73  cZero(D,N)  mems
25430 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c 20 30 2c  et(alloca(N), 0,
25440 20 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c   N).# define sql
25450 69 74 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c  ite3StackFree(D,
25460 50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  P).#else.# defin
25470 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  e sqlite3StackAl
25480 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 73 71  locRaw(D,N)   sq
25490 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
254a0 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73  (D,N).# define s
254b0 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
254c0 5a 65 72 6f 28 44 2c 4e 29 20 20 73 71 6c 69 74  Zero(D,N)  sqlit
254d0 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 44  e3DbMallocZero(D
254e0 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,N).# define sql
254f0 69 74 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c  ite3StackFree(D,
25500 50 29 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  P)       sqlite3
25510 44 62 46 72 65 65 28 44 2c 50 29 0a 23 65 6e 64  DbFree(D,P).#end
25520 69 66 0a 0a 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c  if../* Do not al
25530 6c 6f 77 20 62 6f 74 68 20 4d 45 4d 53 59 53 35  low both MEMSYS5
25540 20 61 6e 64 20 4d 45 4d 53 59 53 33 20 74 6f 20   and MEMSYS3 to 
25550 62 65 20 64 65 66 69 6e 65 64 20 74 6f 67 65 74  be defined toget
25560 68 65 72 2e 20 20 49 66 20 74 68 65 79 0a 2a 2a  her.  If they.**
25570 20 61 72 65 2c 20 64 69 73 61 62 6c 65 20 4d 45   are, disable ME
25580 4d 53 59 53 33 0a 2a 2f 0a 23 69 66 64 65 66 20  MSYS3.*/.#ifdef 
25590 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45  SQLITE_ENABLE_ME
255a0 4d 53 59 53 35 0a 63 6f 6e 73 74 20 73 71 6c 69  MSYS5.const sqli
255b0 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20  te3_mem_methods 
255c0 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65  *sqlite3MemGetMe
255d0 6d 73 79 73 35 28 76 6f 69 64 29 3b 0a 23 75 6e  msys5(void);.#un
255e0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
255f0 45 5f 4d 45 4d 53 59 53 33 0a 23 65 6e 64 69 66  E_MEMSYS3.#endif
25600 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
25610 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 63 6f  NABLE_MEMSYS3.co
25620 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f  nst sqlite3_mem_
25630 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33  methods *sqlite3
25640 4d 65 6d 47 65 74 4d 65 6d 73 79 73 33 28 76 6f  MemGetMemsys3(vo
25650 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 23 69  id);.#endif...#i
25660 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 55 54  fndef SQLITE_MUT
25670 45 58 5f 4f 4d 49 54 0a 20 20 73 71 6c 69 74 65  EX_OMIT.  sqlite
25680 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20  3_mutex_methods 
25690 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 44 65  const *sqlite3De
256a0 66 61 75 6c 74 4d 75 74 65 78 28 76 6f 69 64 29  faultMutex(void)
256b0 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  ;.  sqlite3_mute
256c0 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20  x_methods const 
256d0 2a 73 71 6c 69 74 65 33 4e 6f 6f 70 4d 75 74 65  *sqlite3NoopMute
256e0 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74  x(void);.  sqlit
256f0 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65  e3_mutex *sqlite
25700 33 4d 75 74 65 78 41 6c 6c 6f 63 28 69 6e 74 29  3MutexAlloc(int)
25710 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
25720 75 74 65 78 49 6e 69 74 28 76 6f 69 64 29 3b 0a  utexInit(void);.
25730 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74    int sqlite3Mut
25740 65 78 45 6e 64 28 76 6f 69 64 29 3b 0a 23 65 6e  exEnd(void);.#en
25750 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64  dif.#if !defined
25760 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d  (SQLITE_MUTEX_OM
25770 49 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  IT) && !defined(
25780 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4e 4f 4f  SQLITE_MUTEX_NOO
25790 50 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  P).  void sqlite
257a0 33 4d 65 6d 6f 72 79 42 61 72 72 69 65 72 28 76  3MemoryBarrier(v
257b0 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  oid);.#else.# de
257c0 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 6f  fine sqlite3Memo
257d0 72 79 42 61 72 72 69 65 72 28 29 0a 23 65 6e 64  ryBarrier().#end
257e0 69 66 0a 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36  if..sqlite3_int6
257f0 34 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 56  4 sqlite3StatusV
25800 61 6c 75 65 28 69 6e 74 29 3b 0a 76 6f 69 64 20  alue(int);.void 
25810 73 71 6c 69 74 65 33 53 74 61 74 75 73 55 70 28  sqlite3StatusUp(
25820 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
25830 73 71 6c 69 74 65 33 53 74 61 74 75 73 44 6f 77  sqlite3StatusDow
25840 6e 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  n(int, int);.voi
25850 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 48  d sqlite3StatusH
25860 69 67 68 77 61 74 65 72 28 69 6e 74 2c 20 69 6e  ighwater(int, in
25870 74 29 3b 0a 0a 2f 2a 20 41 63 63 65 73 73 20 74  t);../* Access t
25880 6f 20 6d 75 74 65 78 65 73 20 75 73 65 64 20 62  o mutexes used b
25890 79 20 73 71 6c 69 74 65 33 5f 73 74 61 74 75 73  y sqlite3_status
258a0 28 29 20 2a 2f 0a 73 71 6c 69 74 65 33 5f 6d 75  () */.sqlite3_mu
258b0 74 65 78 20 2a 73 71 6c 69 74 65 33 50 63 61 63  tex *sqlite3Pcac
258c0 68 65 31 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a  he1Mutex(void);.
258d0 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73  sqlite3_mutex *s
258e0 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 4d 75 74 65  qlite3MallocMute
258f0 78 28 76 6f 69 64 29 3b 0a 0a 23 69 66 6e 64 65  x(void);..#ifnde
25900 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
25910 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 69  OATING_POINT.  i
25920 6e 74 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28  nt sqlite3IsNaN(
25930 64 6f 75 62 6c 65 29 3b 0a 23 65 6c 73 65 0a 23  double);.#else.#
25940 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
25950 73 4e 61 4e 28 58 29 20 20 30 0a 23 65 6e 64 69  sNaN(X)  0.#endi
25960 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  f../*.** An inst
25970 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
25980 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
25990 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f  holds informatio
259a0 6e 20 61 62 6f 75 74 20 53 51 4c 0a 2a 2a 20 66  n about SQL.** f
259b0 75 6e 63 74 69 6f 6e 73 20 61 72 67 75 6d 65 6e  unctions argumen
259c0 74 73 20 74 68 61 74 20 61 72 65 20 74 68 65 20  ts that are the 
259d0 70 61 72 61 6d 65 74 65 72 73 20 74 6f 20 74 68  parameters to th
259e0 65 20 70 72 69 6e 74 66 28 29 20 66 75 6e 63 74  e printf() funct
259f0 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50  ion..*/.struct P
25a00 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 7b  rintfArguments {
25a10 0a 20 20 69 6e 74 20 6e 41 72 67 3b 20 20 20 20  .  int nArg;    
25a20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
25a30 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 61  otal number of a
25a40 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 69 6e  rguments */.  in
25a50 74 20 6e 55 73 65 64 3b 20 20 20 20 20 20 20 20  t nUsed;        
25a60 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
25a70 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 75 73   of arguments us
25a80 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 73  ed so far */.  s
25a90 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61  qlite3_value **a
25aa0 70 41 72 67 3b 20 20 20 2f 2a 20 54 68 65 20 61  pArg;   /* The a
25ab0 72 67 75 6d 65 6e 74 20 76 61 6c 75 65 73 20 2a  rgument values *
25ac0 2f 0a 7d 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74  /.};..void sqlit
25ad0 65 33 56 58 50 72 69 6e 74 66 28 53 74 72 41 63  e3VXPrintf(StrAc
25ae0 63 75 6d 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  cum*, const char
25af0 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 76 6f 69  *, va_list);.voi
25b00 64 20 73 71 6c 69 74 65 33 58 50 72 69 6e 74 66  d sqlite3XPrintf
25b10 28 53 74 72 41 63 63 75 6d 2a 2c 20 63 6f 6e 73  (StrAccum*, cons
25b20 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63  t char*, ...);.c
25b30 68 61 72 20 2a 73 71 6c 69 74 65 33 4d 50 72 69  har *sqlite3MPri
25b40 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ntf(sqlite3*,con
25b50 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
25b60 63 68 61 72 20 2a 73 71 6c 69 74 65 33 56 4d 50  char *sqlite3VMP
25b70 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63  rintf(sqlite3*,c
25b80 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c  onst char*, va_l
25b90 69 73 74 29 3b 0a 23 69 66 20 64 65 66 69 6e 65  ist);.#if define
25ba0 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
25bb0 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
25bc0 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41 43 45 29  E_HAVE_OS_TRACE)
25bd0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
25be0 65 62 75 67 50 72 69 6e 74 66 28 63 6f 6e 73 74  ebugPrintf(const
25bf0 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65   char*, ...);.#e
25c00 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64  ndif.#if defined
25c10 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 20 20  (SQLITE_TEST).  
25c20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 54 65 73  void *sqlite3Tes
25c30 74 54 65 78 74 54 6f 50 74 72 28 63 6f 6e 73 74  tTextToPtr(const
25c40 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a   char*);.#endif.
25c50 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
25c60 49 54 45 5f 44 45 42 55 47 29 0a 20 20 76 6f 69  ITE_DEBUG).  voi
25c70 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65  d sqlite3TreeVie
25c80 77 45 78 70 72 28 54 72 65 65 56 69 65 77 2a 2c  wExpr(TreeView*,
25c90 20 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 75 38   const Expr*, u8
25ca0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
25cb0 33 54 72 65 65 56 69 65 77 42 61 72 65 45 78 70  3TreeViewBareExp
25cc0 72 4c 69 73 74 28 54 72 65 65 56 69 65 77 2a 2c  rList(TreeView*,
25cd0 20 63 6f 6e 73 74 20 45 78 70 72 4c 69 73 74 2a   const ExprList*
25ce0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
25cf0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72    void sqlite3Tr
25d00 65 65 56 69 65 77 45 78 70 72 4c 69 73 74 28 54  eeViewExprList(T
25d10 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20  reeView*, const 
25d20 45 78 70 72 4c 69 73 74 2a 2c 20 75 38 2c 20 63  ExprList*, u8, c
25d30 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76  onst char*);.  v
25d40 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56  oid sqlite3TreeV
25d50 69 65 77 53 65 6c 65 63 74 28 54 72 65 65 56 69  iewSelect(TreeVi
25d60 65 77 2a 2c 20 63 6f 6e 73 74 20 53 65 6c 65 63  ew*, const Selec
25d70 74 2a 2c 20 75 38 29 3b 0a 20 20 76 6f 69 64 20  t*, u8);.  void 
25d80 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 57  sqlite3TreeViewW
25d90 69 74 68 28 54 72 65 65 56 69 65 77 2a 2c 20 63  ith(TreeView*, c
25da0 6f 6e 73 74 20 57 69 74 68 2a 2c 20 75 38 29 3b  onst With*, u8);
25db0 0a 23 65 6e 64 69 66 0a 0a 0a 76 6f 69 64 20 73  .#endif...void s
25dc0 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
25dd0 63 68 61 72 20 2a 2a 2c 20 73 71 6c 69 74 65 33  char **, sqlite3
25de0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
25df0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72  .void sqlite3Err
25e00 6f 72 4d 73 67 28 50 61 72 73 65 2a 2c 20 63 6f  orMsg(Parse*, co
25e10 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
25e20 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 71  .void sqlite3Deq
25e30 75 6f 74 65 28 63 68 61 72 2a 29 3b 0a 76 6f 69  uote(char*);.voi
25e40 64 20 73 71 6c 69 74 65 33 54 6f 6b 65 6e 49 6e  d sqlite3TokenIn
25e50 69 74 28 54 6f 6b 65 6e 2a 2c 63 68 61 72 2a 29  it(Token*,char*)
25e60 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b 65 79  ;.int sqlite3Key
25e70 77 6f 72 64 43 6f 64 65 28 63 6f 6e 73 74 20 75  wordCode(const u
25e80 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 69  nsigned char*, i
25e90 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
25ea0 52 75 6e 50 61 72 73 65 72 28 50 61 72 73 65 2a  RunParser(Parse*
25eb0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
25ec0 68 61 72 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71  har **);.void sq
25ed0 6c 69 74 65 33 46 69 6e 69 73 68 43 6f 64 69 6e  lite3FinishCodin
25ee0 67 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73  g(Parse*);.int s
25ef0 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52 65 67  qlite3GetTempReg
25f00 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
25f10 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d  qlite3ReleaseTem
25f20 70 52 65 67 28 50 61 72 73 65 2a 2c 69 6e 74 29  pReg(Parse*,int)
25f30 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74  ;.int sqlite3Get
25f40 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a  TempRange(Parse*
25f50 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
25f60 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52 61  te3ReleaseTempRa
25f70 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69  nge(Parse*,int,i
25f80 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
25f90 33 43 6c 65 61 72 54 65 6d 70 52 65 67 43 61 63  3ClearTempRegCac
25fa0 68 65 28 50 61 72 73 65 2a 29 3b 0a 23 69 66 64  he(Parse*);.#ifd
25fb0 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
25fc0 69 6e 74 20 73 71 6c 69 74 65 33 4e 6f 54 65 6d  int sqlite3NoTem
25fd0 70 73 49 6e 52 61 6e 67 65 28 50 61 72 73 65 2a  psInRange(Parse*
25fe0 2c 69 6e 74 2c 69 6e 74 29 3b 0a 23 65 6e 64 69  ,int,int);.#endi
25ff0 66 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  f.Expr *sqlite3E
26000 78 70 72 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33  xprAlloc(sqlite3
26010 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b 65  *,int,const Toke
26020 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73  n*,int);.Expr *s
26030 71 6c 69 74 65 33 45 78 70 72 28 73 71 6c 69 74  qlite3Expr(sqlit
26040 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  e3*,int,const ch
26050 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
26060 65 33 45 78 70 72 41 74 74 61 63 68 53 75 62 74  e3ExprAttachSubt
26070 72 65 65 73 28 73 71 6c 69 74 65 33 2a 2c 45 78  rees(sqlite3*,Ex
26080 70 72 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29  pr*,Expr*,Expr*)
26090 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 50  ;.Expr *sqlite3P
260a0 45 78 70 72 28 50 61 72 73 65 2a 2c 20 69 6e 74  Expr(Parse*, int
260b0 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b  , Expr*, Expr*);
260c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 45 78  .void sqlite3PEx
260d0 70 72 41 64 64 53 65 6c 65 63 74 28 50 61 72 73  prAddSelect(Pars
260e0 65 2a 2c 20 45 78 70 72 2a 2c 20 53 65 6c 65 63  e*, Expr*, Selec
260f0 74 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  t*);.Expr *sqlit
26100 65 33 45 78 70 72 41 6e 64 28 73 71 6c 69 74 65  e3ExprAnd(sqlite
26110 33 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a 29  3*,Expr*, Expr*)
26120 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
26130 78 70 72 46 75 6e 63 74 69 6f 6e 28 50 61 72 73  xprFunction(Pars
26140 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f  e*,ExprList*, To
26150 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
26160 74 65 33 45 78 70 72 41 73 73 69 67 6e 56 61 72  te3ExprAssignVar
26170 4e 75 6d 62 65 72 28 50 61 72 73 65 2a 2c 20 45  Number(Parse*, E
26180 78 70 72 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64  xpr*, u32);.void
26190 20 73 71 6c 69 74 65 33 45 78 70 72 44 65 6c 65   sqlite3ExprDele
261a0 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70  te(sqlite3*, Exp
261b0 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73  r*);.ExprList *s
261c0 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 41 70  qlite3ExprListAp
261d0 70 65 6e 64 28 50 61 72 73 65 2a 2c 45 78 70 72  pend(Parse*,Expr
261e0 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 45 78  List*,Expr*);.Ex
261f0 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45  prList *sqlite3E
26200 78 70 72 4c 69 73 74 41 70 70 65 6e 64 56 65 63  xprListAppendVec
26210 74 6f 72 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  tor(Parse*,ExprL
26220 69 73 74 2a 2c 49 64 4c 69 73 74 2a 2c 45 78 70  ist*,IdList*,Exp
26230 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
26240 33 45 78 70 72 4c 69 73 74 53 65 74 53 6f 72 74  3ExprListSetSort
26250 4f 72 64 65 72 28 45 78 70 72 4c 69 73 74 2a 2c  Order(ExprList*,
26260 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
26270 65 33 45 78 70 72 4c 69 73 74 53 65 74 4e 61 6d  e3ExprListSetNam
26280 65 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73  e(Parse*,ExprLis
26290 74 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a  t*,Token*,int);.
262a0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
262b0 4c 69 73 74 53 65 74 53 70 61 6e 28 50 61 72 73  ListSetSpan(Pars
262c0 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70  e*,ExprList*,Exp
262d0 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  rSpan*);.void sq
262e0 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44 65 6c  lite3ExprListDel
262f0 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78  ete(sqlite3*, Ex
26300 70 72 4c 69 73 74 2a 29 3b 0a 75 33 32 20 73 71  prList*);.u32 sq
26310 6c 69 74 65 33 45 78 70 72 4c 69 73 74 46 6c 61  lite3ExprListFla
26320 67 73 28 63 6f 6e 73 74 20 45 78 70 72 4c 69 73  gs(const ExprLis
26330 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
26340 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 63  Init(sqlite3*, c
26350 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  har**);.int sqli
26360 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28  te3InitCallback(
26370 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 68 61 72  void*, int, char
26380 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 76 6f 69  **, char**);.voi
26390 64 20 73 71 6c 69 74 65 33 50 72 61 67 6d 61 28  d sqlite3Pragma(
263a0 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
263b0 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29  ken*,Token*,int)
263c0 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
263d0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
263e0 4c 45 0a 4d 6f 64 75 6c 65 20 2a 73 71 6c 69 74  LE.Module *sqlit
263f0 65 33 50 72 61 67 6d 61 56 74 61 62 52 65 67 69  e3PragmaVtabRegi
26400 73 74 65 72 28 73 71 6c 69 74 65 33 2a 2c 63 6f  ster(sqlite3*,co
26410 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 29  nst char *zName)
26420 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ;.#endif.void sq
26430 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68  lite3ResetAllSch
26440 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e  emasOfConnection
26450 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
26460 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65   sqlite3ResetOne
26470 53 63 68 65 6d 61 28 73 71 6c 69 74 65 33 2a 2c  Schema(sqlite3*,
26480 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
26490 65 33 43 6f 6c 6c 61 70 73 65 44 61 74 61 62 61  e3CollapseDataba
264a0 73 65 41 72 72 61 79 28 73 71 6c 69 74 65 33 2a  seArray(sqlite3*
264b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
264c0 6f 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68 61  ommitInternalCha
264d0 6e 67 65 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  nges(sqlite3*);.
264e0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
264f0 74 65 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 73 71  teColumnNames(sq
26500 6c 69 74 65 33 2a 2c 54 61 62 6c 65 2a 29 3b 0a  lite3*,Table*);.
26510 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d  int sqlite3Colum
26520 6e 73 46 72 6f 6d 45 78 70 72 4c 69 73 74 28 50  nsFromExprList(P
26530 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
26540 69 31 36 2a 2c 43 6f 6c 75 6d 6e 2a 2a 29 3b 0a  i16*,Column**);.
26550 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65  void sqlite3Sele
26560 63 74 41 64 64 43 6f 6c 75 6d 6e 54 79 70 65 41  ctAddColumnTypeA
26570 6e 64 43 6f 6c 6c 61 74 69 6f 6e 28 50 61 72 73  ndCollation(Pars
26580 65 2a 2c 54 61 62 6c 65 2a 2c 53 65 6c 65 63 74  e*,Table*,Select
26590 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74  *);.Table *sqlit
265a0 65 33 52 65 73 75 6c 74 53 65 74 4f 66 53 65 6c  e3ResultSetOfSel
265b0 65 63 74 28 50 61 72 73 65 2a 2c 53 65 6c 65 63  ect(Parse*,Selec
265c0 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
265d0 33 4f 70 65 6e 4d 61 73 74 65 72 54 61 62 6c 65  3OpenMasterTable
265e0 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 29 3b 0a  (Parse *, int);.
265f0 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 50 72  Index *sqlite3Pr
26600 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 54 61  imaryKeyIndex(Ta
26610 62 6c 65 2a 29 3b 0a 69 31 36 20 73 71 6c 69 74  ble*);.i16 sqlit
26620 65 33 43 6f 6c 75 6d 6e 4f 66 49 6e 64 65 78 28  e3ColumnOfIndex(
26630 49 6e 64 65 78 2a 2c 20 69 31 36 29 3b 0a 76 6f  Index*, i16);.vo
26640 69 64 20 73 71 6c 69 74 65 33 53 74 61 72 74 54  id sqlite3StartT
26650 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65  able(Parse*,Toke
26660 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e  n*,Token*,int,in
26670 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 23 69 66 20  t,int,int);.#if 
26680 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49  SQLITE_ENABLE_HI
26690 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 0a 20 20 76  DDEN_COLUMNS.  v
266a0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d  oid sqlite3Colum
266b0 6e 50 72 6f 70 65 72 74 69 65 73 46 72 6f 6d 4e  nPropertiesFromN
266c0 61 6d 65 28 54 61 62 6c 65 2a 2c 20 43 6f 6c 75  ame(Table*, Colu
266d0 6d 6e 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  mn*);.#else.# de
266e0 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6c 75  fine sqlite3Colu
266f0 6d 6e 50 72 6f 70 65 72 74 69 65 73 46 72 6f 6d  mnPropertiesFrom
26700 4e 61 6d 65 28 54 2c 43 29 20 2f 2a 20 6e 6f 2d  Name(T,C) /* no-
26710 6f 70 20 2a 2f 0a 23 65 6e 64 69 66 0a 76 6f 69  op */.#endif.voi
26720 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75  d sqlite3AddColu
26730 6d 6e 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  mn(Parse*,Token*
26740 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73  ,Token*);.void s
26750 71 6c 69 74 65 33 41 64 64 4e 6f 74 4e 75 6c 6c  qlite3AddNotNull
26760 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76  (Parse*, int);.v
26770 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 50 72  oid sqlite3AddPr
26780 69 6d 61 72 79 4b 65 79 28 50 61 72 73 65 2a 2c  imaryKey(Parse*,
26790 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c   ExprList*, int,
267a0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
267b0 20 73 71 6c 69 74 65 33 41 64 64 43 68 65 63 6b   sqlite3AddCheck
267c0 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65  Constraint(Parse
267d0 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
267e0 73 71 6c 69 74 65 33 41 64 64 44 65 66 61 75 6c  sqlite3AddDefaul
267f0 74 56 61 6c 75 65 28 50 61 72 73 65 2a 2c 45 78  tValue(Parse*,Ex
26800 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73  prSpan*);.void s
26810 71 6c 69 74 65 33 41 64 64 43 6f 6c 6c 61 74 65  qlite3AddCollate
26820 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  Type(Parse*, Tok
26830 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
26840 65 33 45 6e 64 54 61 62 6c 65 28 50 61 72 73 65  e3EndTable(Parse
26850 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
26860 75 38 2c 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  u8,Select*);.int
26870 20 73 71 6c 69 74 65 33 50 61 72 73 65 55 72 69   sqlite3ParseUri
26880 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  (const char*,con
26890 73 74 20 63 68 61 72 2a 2c 75 6e 73 69 67 6e 65  st char*,unsigne
268a0 64 20 69 6e 74 2a 2c 0a 20 20 20 20 20 20 20 20  d int*,.        
268b0 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
268c0 74 65 33 5f 76 66 73 2a 2a 2c 63 68 61 72 2a 2a  te3_vfs**,char**
268d0 2c 63 68 61 72 20 2a 2a 29 3b 0a 42 74 72 65 65  ,char **);.Btree
268e0 20 2a 73 71 6c 69 74 65 33 44 62 4e 61 6d 65 54   *sqlite3DbNameT
268f0 6f 42 74 72 65 65 28 73 71 6c 69 74 65 33 2a 2c  oBtree(sqlite3*,
26900 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 0a 23  const char*);..#
26910 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54  ifdef SQLITE_UNT
26920 45 53 54 41 42 4c 45 0a 23 20 64 65 66 69 6e 65  ESTABLE.# define
26930 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d   sqlite3FaultSim
26940 28 58 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 65  (X) SQLITE_OK.#e
26950 6c 73 65 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  lse.  int sqlite
26960 33 46 61 75 6c 74 53 69 6d 28 69 6e 74 29 3b 0a  3FaultSim(int);.
26970 23 65 6e 64 69 66 0a 0a 42 69 74 76 65 63 20 2a  #endif..Bitvec *
26980 73 71 6c 69 74 65 33 42 69 74 76 65 63 43 72 65  sqlite3BitvecCre
26990 61 74 65 28 75 33 32 29 3b 0a 69 6e 74 20 73 71  ate(u32);.int sq
269a0 6c 69 74 65 33 42 69 74 76 65 63 54 65 73 74 28  lite3BitvecTest(
269b0 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69  Bitvec*, u32);.i
269c0 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  nt sqlite3Bitvec
269d0 54 65 73 74 4e 6f 74 4e 75 6c 6c 28 42 69 74 76  TestNotNull(Bitv
269e0 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73  ec*, u32);.int s
269f0 71 6c 69 74 65 33 42 69 74 76 65 63 53 65 74 28  qlite3BitvecSet(
26a00 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 76  Bitvec*, u32);.v
26a10 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74 76 65  oid sqlite3Bitve
26a20 63 43 6c 65 61 72 28 42 69 74 76 65 63 2a 2c 20  cClear(Bitvec*, 
26a30 75 33 32 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69  u32, void*);.voi
26a40 64 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 44  d sqlite3BitvecD
26a50 65 73 74 72 6f 79 28 42 69 74 76 65 63 2a 29 3b  estroy(Bitvec*);
26a60 0a 75 33 32 20 73 71 6c 69 74 65 33 42 69 74 76  .u32 sqlite3Bitv
26a70 65 63 53 69 7a 65 28 42 69 74 76 65 63 2a 29 3b  ecSize(Bitvec*);
26a80 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
26a90 55 4e 54 45 53 54 41 42 4c 45 0a 69 6e 74 20 73  UNTESTABLE.int s
26aa0 71 6c 69 74 65 33 42 69 74 76 65 63 42 75 69 6c  qlite3BitvecBuil
26ab0 74 69 6e 54 65 73 74 28 69 6e 74 2c 69 6e 74 2a  tinTest(int,int*
26ac0 29 3b 0a 23 65 6e 64 69 66 0a 0a 52 6f 77 53 65  );.#endif..RowSe
26ad0 74 20 2a 73 71 6c 69 74 65 33 52 6f 77 53 65 74  t *sqlite3RowSet
26ae0 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 76  Init(sqlite3*, v
26af0 6f 69 64 2a 2c 20 75 6e 73 69 67 6e 65 64 20 69  oid*, unsigned i
26b00 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
26b10 33 52 6f 77 53 65 74 43 6c 65 61 72 28 52 6f 77  3RowSetClear(Row
26b20 53 65 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  Set*);.void sqli
26b30 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28  te3RowSetInsert(
26b40 52 6f 77 53 65 74 2a 2c 20 69 36 34 29 3b 0a 69  RowSet*, i64);.i
26b50 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74  nt sqlite3RowSet
26b60 54 65 73 74 28 52 6f 77 53 65 74 2a 2c 20 69 6e  Test(RowSet*, in
26b70 74 20 69 42 61 74 63 68 2c 20 69 36 34 29 3b 0a  t iBatch, i64);.
26b80 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53 65  int sqlite3RowSe
26b90 74 4e 65 78 74 28 52 6f 77 53 65 74 2a 2c 20 69  tNext(RowSet*, i
26ba0 36 34 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69  64*);..void sqli
26bb0 74 65 33 43 72 65 61 74 65 56 69 65 77 28 50 61  te3CreateView(Pa
26bc0 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
26bd0 6e 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69  n*,Token*,ExprLi
26be0 73 74 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 2c  st*,Select*,int,
26bf0 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69  int);..#if !defi
26c00 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
26c10 56 49 45 57 29 20 7c 7c 20 21 64 65 66 69 6e 65  VIEW) || !define
26c20 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  d(SQLITE_OMIT_VI
26c30 52 54 55 41 4c 54 41 42 4c 45 29 0a 20 20 69 6e  RTUALTABLE).  in
26c40 74 20 73 71 6c 69 74 65 33 56 69 65 77 47 65 74  t sqlite3ViewGet
26c50 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50 61 72 73  ColumnNames(Pars
26c60 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73  e*,Table*);.#els
26c70 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
26c80 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e  e3ViewGetColumnN
26c90 61 6d 65 73 28 41 2c 42 29 20 30 0a 23 65 6e 64  ames(A,B) 0.#end
26ca0 69 66 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  if..#if SQLITE_M
26cb0 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20  AX_ATTACHED>30. 
26cc0 20 69 6e 74 20 73 71 6c 69 74 65 33 44 62 4d 61   int sqlite3DbMa
26cd0 73 6b 41 6c 6c 5a 65 72 6f 28 79 44 62 4d 61 73  skAllZero(yDbMas
26ce0 6b 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  k);.#endif.void 
26cf0 73 71 6c 69 74 65 33 44 72 6f 70 54 61 62 6c 65  sqlite3DropTable
26d00 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
26d10 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
26d20 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 44 72  id sqlite3CodeDr
26d30 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  opTable(Parse*, 
26d40 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
26d50 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
26d60 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74  eleteTable(sqlit
26d70 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 69  e3*, Table*);.#i
26d80 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
26d90 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a  T_AUTOINCREMENT.
26da0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75    void sqlite3Au
26db0 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e  toincrementBegin
26dc0 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b  (Parse *pParse);
26dd0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
26de0 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28  utoincrementEnd(
26df0 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a  Parse *pParse);.
26e00 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
26e10 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d  qlite3Autoincrem
26e20 65 6e 74 42 65 67 69 6e 28 58 29 0a 23 20 64 65  entBegin(X).# de
26e30 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f  fine sqlite3Auto
26e40 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 58 29 0a  incrementEnd(X).
26e50 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
26e60 74 65 33 49 6e 73 65 72 74 28 50 61 72 73 65 2a  te3Insert(Parse*
26e70 2c 20 53 72 63 4c 69 73 74 2a 2c 20 53 65 6c 65  , SrcList*, Sele
26e80 63 74 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 69 6e  ct*, IdList*, in
26e90 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  t);.void *sqlite
26ea0 33 41 72 72 61 79 41 6c 6c 6f 63 61 74 65 28 73  3ArrayAllocate(s
26eb0 71 6c 69 74 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e  qlite3*,void*,in
26ec0 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64  t,int*,int*);.Id
26ed0 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c  List *sqlite3IdL
26ee0 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65  istAppend(sqlite
26ef0 33 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 54 6f 6b  3*, IdList*, Tok
26f00 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
26f10 33 49 64 4c 69 73 74 49 6e 64 65 78 28 49 64 4c  3IdListIndex(IdL
26f20 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ist*,const char*
26f30 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69  );.SrcList *sqli
26f40 74 65 33 53 72 63 4c 69 73 74 45 6e 6c 61 72 67  te3SrcListEnlarg
26f50 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c  e(sqlite3*, SrcL
26f60 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  ist*, int, int);
26f70 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65  .SrcList *sqlite
26f80 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64 28 73  3SrcListAppend(s
26f90 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74  qlite3*, SrcList
26fa0 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
26fb0 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c  *);.SrcList *sql
26fc0 69 74 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e  ite3SrcListAppen
26fd0 64 46 72 6f 6d 54 65 72 6d 28 50 61 72 73 65 2a  dFromTerm(Parse*
26fe0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65  , SrcList*, Toke
26ff0 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20  n*, Token*,.    
27000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27020 20 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65 63 74    Token*, Select
27030 2a 2c 20 45 78 70 72 2a 2c 20 49 64 4c 69 73 74  *, Expr*, IdList
27040 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
27050 53 72 63 4c 69 73 74 49 6e 64 65 78 65 64 42 79  SrcListIndexedBy
27060 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73  (Parse *, SrcLis
27070 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76  t *, Token *);.v
27080 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
27090 73 74 46 75 6e 63 41 72 67 73 28 50 61 72 73 65  stFuncArgs(Parse
270a0 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70  *, SrcList*, Exp
270b0 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
270c0 69 74 65 33 49 6e 64 65 78 65 64 42 79 4c 6f 6f  ite3IndexedByLoo
270d0 6b 75 70 28 50 61 72 73 65 20 2a 2c 20 73 74 72  kup(Parse *, str
270e0 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d  uct SrcList_item
270f0 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
27100 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69  3SrcListShiftJoi
27110 6e 54 79 70 65 28 53 72 63 4c 69 73 74 2a 29 3b  nType(SrcList*);
27120 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63  .void sqlite3Src
27130 4c 69 73 74 41 73 73 69 67 6e 43 75 72 73 6f 72  ListAssignCursor
27140 73 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  s(Parse*, SrcLis
27150 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
27160 33 49 64 4c 69 73 74 44 65 6c 65 74 65 28 73 71  3IdListDelete(sq
27170 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 29  lite3*, IdList*)
27180 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72  ;.void sqlite3Sr
27190 63 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69  cListDelete(sqli
271a0 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  te3*, SrcList*);
271b0 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 41  .Index *sqlite3A
271c0 6c 6c 6f 63 61 74 65 49 6e 64 65 78 4f 62 6a 65  llocateIndexObje
271d0 63 74 28 73 71 6c 69 74 65 33 2a 2c 69 31 36 2c  ct(sqlite3*,i16,
271e0 69 6e 74 2c 63 68 61 72 2a 2a 29 3b 0a 76 6f 69  int,char**);.voi
271f0 64 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 49  d sqlite3CreateI
27200 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 6f 6b 65  ndex(Parse*,Toke
27210 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63 4c 69 73  n*,Token*,SrcLis
27220 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74  t*,ExprList*,int
27230 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20  ,Token*,.       
27240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27250 20 20 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69     Expr*, int, i
27260 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71  nt, u8);.void sq
27270 6c 69 74 65 33 44 72 6f 70 49 6e 64 65 78 28 50  lite3DropIndex(P
27280 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
27290 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
272a0 65 33 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c  e3Select(Parse*,
272b0 20 53 65 6c 65 63 74 2a 2c 20 53 65 6c 65 63 74   Select*, Select
272c0 44 65 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a  Dest*);.Select *
272d0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 4e 65 77  sqlite3SelectNew
272e0 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
272f0 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a  *,SrcList*,Expr*
27300 2c 45 78 70 72 4c 69 73 74 2a 2c 0a 20 20 20 20  ,ExprList*,.    
27310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27320 20 20 20 20 20 45 78 70 72 2a 2c 45 78 70 72 4c       Expr*,ExprL
27330 69 73 74 2a 2c 75 33 32 2c 45 78 70 72 2a 2c 45  ist*,u32,Expr*,E
27340 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
27350 74 65 33 53 65 6c 65 63 74 44 65 6c 65 74 65 28  te3SelectDelete(
27360 73 71 6c 69 74 65 33 2a 2c 20 53 65 6c 65 63 74  sqlite3*, Select
27370 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74  *);.Table *sqlit
27380 65 33 53 72 63 4c 69 73 74 4c 6f 6f 6b 75 70 28  e3SrcListLookup(
27390 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
273a0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73  );.int sqlite3Is
273b0 52 65 61 64 4f 6e 6c 79 28 50 61 72 73 65 2a 2c  ReadOnly(Parse*,
273c0 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76   Table*, int);.v
273d0 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 54  oid sqlite3OpenT
273e0 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  able(Parse*, int
273f0 20 69 43 75 72 2c 20 69 6e 74 20 69 44 62 2c 20   iCur, int iDb, 
27400 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23 69  Table*, int);.#i
27410 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
27420 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44  _ENABLE_UPDATE_D
27430 45 4c 45 54 45 5f 4c 49 4d 49 54 29 20 26 26 20  ELETE_LIMIT) && 
27440 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
27450 4f 4d 49 54 5f 53 55 42 51 55 45 52 59 29 0a 45  OMIT_SUBQUERY).E
27460 78 70 72 20 2a 73 71 6c 69 74 65 33 4c 69 6d 69  xpr *sqlite3Limi
27470 74 57 68 65 72 65 28 50 61 72 73 65 2a 2c 53 72  tWhere(Parse*,Sr
27480 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70  cList*,Expr*,Exp
27490 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70  rList*,Expr*,Exp
274a0 72 2a 2c 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69  r*,char*);.#endi
274b0 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  f.void sqlite3De
274c0 6c 65 74 65 46 72 6f 6d 28 50 61 72 73 65 2a 2c  leteFrom(Parse*,
274d0 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 2a   SrcList*, Expr*
274e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
274f0 70 64 61 74 65 28 50 61 72 73 65 2a 2c 20 53 72  pdate(Parse*, Sr
27500 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74  cList*, ExprList
27510 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
27520 57 68 65 72 65 49 6e 66 6f 20 2a 73 71 6c 69 74  WhereInfo *sqlit
27530 65 33 57 68 65 72 65 42 65 67 69 6e 28 50 61 72  e3WhereBegin(Par
27540 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70  se*,SrcList*,Exp
27550 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70  r*,ExprList*,Exp
27560 72 4c 69 73 74 2a 2c 75 31 36 2c 69 6e 74 29 3b  rList*,u16,int);
27570 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 68 65  .void sqlite3Whe
27580 72 65 45 6e 64 28 57 68 65 72 65 49 6e 66 6f 2a  reEnd(WhereInfo*
27590 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65  );.LogEst sqlite
275a0 33 57 68 65 72 65 4f 75 74 70 75 74 52 6f 77 43  3WhereOutputRowC
275b0 6f 75 6e 74 28 57 68 65 72 65 49 6e 66 6f 2a 29  ount(WhereInfo*)
275c0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
275d0 72 65 49 73 44 69 73 74 69 6e 63 74 28 57 68 65  reIsDistinct(Whe
275e0 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
275f0 6c 69 74 65 33 57 68 65 72 65 49 73 4f 72 64 65  lite3WhereIsOrde
27600 72 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  red(WhereInfo*);
27610 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
27620 65 4f 72 64 65 72 65 64 49 6e 6e 65 72 4c 6f 6f  eOrderedInnerLoo
27630 70 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  p(WhereInfo*);.i
27640 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  nt sqlite3WhereI
27650 73 53 6f 72 74 65 64 28 57 68 65 72 65 49 6e 66  sSorted(WhereInf
27660 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
27670 57 68 65 72 65 43 6f 6e 74 69 6e 75 65 4c 61 62  WhereContinueLab
27680 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  el(WhereInfo*);.
27690 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
276a0 42 72 65 61 6b 4c 61 62 65 6c 28 57 68 65 72 65  BreakLabel(Where
276b0 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Info*);.int sqli
276c0 74 65 33 57 68 65 72 65 4f 6b 4f 6e 65 50 61 73  te3WhereOkOnePas
276d0 73 28 57 68 65 72 65 49 6e 66 6f 2a 2c 20 69 6e  s(WhereInfo*, in
276e0 74 2a 29 3b 0a 23 64 65 66 69 6e 65 20 4f 4e 45  t*);.#define ONE
276f0 50 41 53 53 5f 4f 46 46 20 20 20 20 20 20 30 20  PASS_OFF      0 
27700 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 6f 66         /* Use of
27710 20 4f 4e 45 50 41 53 53 20 6e 6f 74 20 61 6c 6c   ONEPASS not all
27720 6f 77 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owed */.#define 
27730 4f 4e 45 50 41 53 53 5f 53 49 4e 47 4c 45 20 20  ONEPASS_SINGLE  
27740 20 31 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 45   1        /* ONE
27750 50 41 53 53 20 76 61 6c 69 64 20 66 6f 72 20 61  PASS valid for a
27760 20 73 69 6e 67 6c 65 20 72 6f 77 20 75 70 64 61   single row upda
27770 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 4e  te */.#define ON
27780 45 50 41 53 53 5f 4d 55 4c 54 49 20 20 20 20 32  EPASS_MULTI    2
27790 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 45 50 41          /* ONEPA
277a0 53 53 20 69 73 20 76 61 6c 69 64 20 66 6f 72 20  SS is valid for 
277b0 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f  multiple rows */
277c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
277d0 72 43 6f 64 65 4c 6f 61 64 49 6e 64 65 78 43 6f  rCodeLoadIndexCo
277e0 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 49 6e 64  lumn(Parse*, Ind
277f0 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  ex*, int, int, i
27800 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
27810 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d  ExprCodeGetColum
27820 6e 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  n(Parse*, Table*
27830 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c  , int, int, int,
27840 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   u8);.void sqlit
27850 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c  e3ExprCodeGetCol
27860 75 6d 6e 54 6f 52 65 67 28 50 61 72 73 65 2a 2c  umnToReg(Parse*,
27870 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
27880 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
27890 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74  lite3ExprCodeGet
278a0 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 56 64  ColumnOfTable(Vd
278b0 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  be*, Table*, int
278c0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
278d0 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
278e0 65 4d 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e  eMove(Parse*, in
278f0 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
27900 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  id sqlite3ExprCa
27910 63 68 65 53 74 6f 72 65 28 50 61 72 73 65 2a 2c  cheStore(Parse*,
27920 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
27930 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
27940 72 43 61 63 68 65 50 75 73 68 28 50 61 72 73 65  rCachePush(Parse
27950 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
27960 45 78 70 72 43 61 63 68 65 50 6f 70 28 50 61 72  ExprCachePop(Par
27970 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
27980 65 33 45 78 70 72 43 61 63 68 65 52 65 6d 6f 76  e3ExprCacheRemov
27990 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  e(Parse*, int, i
279a0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
279b0 33 45 78 70 72 43 61 63 68 65 43 6c 65 61 72 28  3ExprCacheClear(
279c0 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
279d0 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 41 66  lite3ExprCacheAf
279e0 66 69 6e 69 74 79 43 68 61 6e 67 65 28 50 61 72  finityChange(Par
279f0 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  se*, int, int);.
27a00 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
27a10 43 6f 64 65 28 50 61 72 73 65 2a 2c 20 45 78 70  Code(Parse*, Exp
27a20 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  r*, int);.void s
27a30 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 43 6f  qlite3ExprCodeCo
27a40 70 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  py(Parse*, Expr*
27a50 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
27a60 69 74 65 33 45 78 70 72 43 6f 64 65 46 61 63 74  ite3ExprCodeFact
27a70 6f 72 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 45  orable(Parse*, E
27a80 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  xpr*, int);.int 
27a90 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 41  sqlite3ExprCodeA
27aa0 74 49 6e 69 74 28 50 61 72 73 65 2a 2c 20 45 78  tInit(Parse*, Ex
27ab0 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  pr*, int);.int s
27ac0 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54 65  qlite3ExprCodeTe
27ad0 6d 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  mp(Parse*, Expr*
27ae0 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  , int*);.int sql
27af0 69 74 65 33 45 78 70 72 43 6f 64 65 54 61 72 67  ite3ExprCodeTarg
27b00 65 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  et(Parse*, Expr*
27b10 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
27b20 69 74 65 33 45 78 70 72 43 6f 64 65 41 6e 64 43  ite3ExprCodeAndC
27b30 61 63 68 65 28 50 61 72 73 65 2a 2c 20 45 78 70  ache(Parse*, Exp
27b40 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  r*, int);.int sq
27b50 6c 69 74 65 33 45 78 70 72 43 6f 64 65 45 78 70  lite3ExprCodeExp
27b60 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 20 45 78  rList(Parse*, Ex
27b70 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e  prList*, int, in
27b80 74 2c 20 75 38 29 3b 0a 23 64 65 66 69 6e 65 20  t, u8);.#define 
27b90 53 51 4c 49 54 45 5f 45 43 45 4c 5f 44 55 50 20  SQLITE_ECEL_DUP 
27ba0 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20 44 65       0x01  /* De
27bb0 65 70 2c 20 6e 6f 74 20 73 68 61 6c 6c 6f 77 20  ep, not shallow 
27bc0 63 6f 70 69 65 73 20 2a 2f 0a 23 64 65 66 69 6e  copies */.#defin
27bd0 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 46 41  e SQLITE_ECEL_FA
27be0 43 54 4f 52 20 20 20 30 78 30 32 20 20 2f 2a 20  CTOR   0x02  /* 
27bf0 46 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74  Factor out const
27c00 61 6e 74 20 74 65 72 6d 73 20 2a 2f 0a 23 64 65  ant terms */.#de
27c10 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c  fine SQLITE_ECEL
27c20 5f 52 45 46 20 20 20 20 20 20 30 78 30 34 20 20  _REF      0x04  
27c30 2f 2a 20 55 73 65 20 45 78 70 72 4c 69 73 74 2e  /* Use ExprList.
27c40 75 2e 78 2e 69 4f 72 64 65 72 42 79 43 6f 6c 20  u.x.iOrderByCol 
27c50 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
27c60 45 5f 45 43 45 4c 5f 4f 4d 49 54 52 45 46 20 20  E_ECEL_OMITREF  
27c70 30 78 30 38 20 20 2f 2a 20 4f 6d 69 74 20 69 66  0x08  /* Omit if
27c80 20 45 78 70 72 4c 69 73 74 2e 75 2e 78 2e 69 4f   ExprList.u.x.iO
27c90 72 64 65 72 42 79 43 6f 6c 20 2a 2f 0a 76 6f 69  rderByCol */.voi
27ca0 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 54  d sqlite3ExprIfT
27cb0 72 75 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72  rue(Parse*, Expr
27cc0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
27cd0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66  id sqlite3ExprIf
27ce0 46 61 6c 73 65 28 50 61 72 73 65 2a 2c 20 45 78  False(Parse*, Ex
27cf0 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  pr*, int, int);.
27d00 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
27d10 49 66 46 61 6c 73 65 44 75 70 28 50 61 72 73 65  IfFalseDup(Parse
27d20 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69  *, Expr*, int, i
27d30 6e 74 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69  nt);.Table *sqli
27d40 74 65 33 46 69 6e 64 54 61 62 6c 65 28 73 71 6c  te3FindTable(sql
27d50 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
27d60 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
27d70 0a 23 64 65 66 69 6e 65 20 4c 4f 43 41 54 45 5f  .#define LOCATE_
27d80 56 49 45 57 20 20 20 20 30 78 30 31 0a 23 64 65  VIEW    0x01.#de
27d90 66 69 6e 65 20 4c 4f 43 41 54 45 5f 4e 4f 45 52  fine LOCATE_NOER
27da0 52 20 20 20 30 78 30 32 0a 54 61 62 6c 65 20 2a  R   0x02.Table *
27db0 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62  sqlite3LocateTab
27dc0 6c 65 28 50 61 72 73 65 2a 2c 75 33 32 20 66 6c  le(Parse*,u32 fl
27dd0 61 67 73 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ags,const char*,
27de0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54   const char*);.T
27df0 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63  able *sqlite3Loc
27e00 61 74 65 54 61 62 6c 65 49 74 65 6d 28 50 61 72  ateTableItem(Par
27e10 73 65 2a 2c 75 33 32 20 66 6c 61 67 73 2c 73 74  se*,u32 flags,st
27e20 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65  ruct SrcList_ite
27e30 6d 20 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c  m *);.Index *sql
27e40 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28 73 71  ite3FindIndex(sq
27e50 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
27e60 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
27e70 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e  ;.void sqlite3Un
27e80 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62  linkAndDeleteTab
27e90 6c 65 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  le(sqlite3*,int,
27ea0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
27eb0 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  id sqlite3Unlink
27ec0 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28 73  AndDeleteIndex(s
27ed0 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
27ee0 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
27ef0 71 6c 69 74 65 33 56 61 63 75 75 6d 28 50 61 72  qlite3Vacuum(Par
27f00 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  se*,Token*);.int
27f10 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75   sqlite3RunVacuu
27f20 6d 28 63 68 61 72 2a 2a 2c 20 73 71 6c 69 74 65  m(char**, sqlite
27f30 33 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20 2a  3*, int);.char *
27f40 73 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d 54  sqlite3NameFromT
27f50 6f 6b 65 6e 28 73 71 6c 69 74 65 33 2a 2c 20 54  oken(sqlite3*, T
27f60 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
27f70 74 65 33 45 78 70 72 43 6f 6d 70 61 72 65 28 45  te3ExprCompare(E
27f80 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  xpr*, Expr*, int
27f90 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
27fa0 70 72 43 6f 6d 70 61 72 65 53 6b 69 70 28 45 78  prCompareSkip(Ex
27fb0 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  pr*, Expr*, int)
27fc0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
27fd0 72 4c 69 73 74 43 6f 6d 70 61 72 65 28 45 78 70  rListCompare(Exp
27fe0 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74  rList*, ExprList
27ff0 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
28000 69 74 65 33 45 78 70 72 49 6d 70 6c 69 65 73 45  ite3ExprImpliesE
28010 78 70 72 28 45 78 70 72 2a 2c 20 45 78 70 72 2a  xpr(Expr*, Expr*
28020 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
28030 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41  ite3ExprAnalyzeA
28040 67 67 72 65 67 61 74 65 73 28 4e 61 6d 65 43 6f  ggregates(NameCo
28050 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a  ntext*, Expr*);.
28060 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
28070 41 6e 61 6c 79 7a 65 41 67 67 4c 69 73 74 28 4e  AnalyzeAggList(N
28080 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 45 78 70 72  ameContext*,Expr
28090 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
280a0 74 65 33 45 78 70 72 43 6f 76 65 72 65 64 42 79  te3ExprCoveredBy
280b0 49 6e 64 65 78 28 45 78 70 72 2a 2c 20 69 6e 74  Index(Expr*, int
280c0 20 69 43 75 72 2c 20 49 6e 64 65 78 20 2a 70 49   iCur, Index *pI
280d0 64 78 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  dx);.int sqlite3
280e0 46 75 6e 63 74 69 6f 6e 55 73 65 73 54 68 69 73  FunctionUsesThis
280f0 53 72 63 28 45 78 70 72 2a 2c 20 53 72 63 4c 69  Src(Expr*, SrcLi
28100 73 74 2a 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69  st*);.Vdbe *sqli
28110 74 65 33 47 65 74 56 64 62 65 28 50 61 72 73 65  te3GetVdbe(Parse
28120 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  *);.#ifndef SQLI
28130 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 76 6f  TE_UNTESTABLE.vo
28140 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67 53 61  id sqlite3PrngSa
28150 76 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 76  veState(void);.v
28160 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67 52  oid sqlite3PrngR
28170 65 73 74 6f 72 65 53 74 61 74 65 28 76 6f 69 64  estoreState(void
28180 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  );.#endif.void s
28190 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c  qlite3RollbackAl
281a0 6c 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b  l(sqlite3*,int);
281b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64  .void sqlite3Cod
281c0 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 50 61  eVerifySchema(Pa
281d0 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  rse*, int);.void
281e0 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69   sqlite3CodeVeri
281f0 66 79 4e 61 6d 65 64 53 63 68 65 6d 61 28 50 61  fyNamedSchema(Pa
28200 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
28210 20 2a 7a 44 62 29 3b 0a 76 6f 69 64 20 73 71 6c   *zDb);.void sql
28220 69 74 65 33 42 65 67 69 6e 54 72 61 6e 73 61 63  ite3BeginTransac
28230 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74  tion(Parse*, int
28240 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
28250 6f 6d 6d 69 74 54 72 61 6e 73 61 63 74 69 6f 6e  ommitTransaction
28260 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
28270 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 54 72  qlite3RollbackTr
28280 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a  ansaction(Parse*
28290 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
282a0 61 76 65 70 6f 69 6e 74 28 50 61 72 73 65 2a 2c  avepoint(Parse*,
282b0 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76   int, Token*);.v
282c0 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65  oid sqlite3Close
282d0 53 61 76 65 70 6f 69 6e 74 73 28 73 71 6c 69 74  Savepoints(sqlit
282e0 65 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  e3 *);.void sqli
282f0 74 65 33 4c 65 61 76 65 4d 75 74 65 78 41 6e 64  te3LeaveMutexAnd
28300 43 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71 6c 69  CloseZombie(sqli
28310 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  te3*);.int sqlit
28320 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74  e3ExprIsConstant
28330 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (Expr*);.int sql
28340 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61  ite3ExprIsConsta
28350 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78 70 72 2a 29  ntNotJoin(Expr*)
28360 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
28370 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72 46 75 6e  rIsConstantOrFun
28380 63 74 69 6f 6e 28 45 78 70 72 2a 2c 20 75 38 29  ction(Expr*, u8)
28390 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
283a0 72 49 73 54 61 62 6c 65 43 6f 6e 73 74 61 6e 74  rIsTableConstant
283b0 28 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 23 69 66  (Expr*,int);.#if
283c0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
283d0 45 5f 43 55 52 53 4f 52 5f 48 49 4e 54 53 0a 69  E_CURSOR_HINTS.i
283e0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
283f0 6e 74 61 69 6e 73 53 75 62 71 75 65 72 79 28 45  ntainsSubquery(E
28400 78 70 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e  xpr*);.#endif.in
28410 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 49  t sqlite3ExprIsI
28420 6e 74 65 67 65 72 28 45 78 70 72 2a 2c 20 69 6e  nteger(Expr*, in
28430 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
28440 45 78 70 72 43 61 6e 42 65 4e 75 6c 6c 28 63 6f  ExprCanBeNull(co
28450 6e 73 74 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20  nst Expr*);.int 
28460 73 71 6c 69 74 65 33 45 78 70 72 4e 65 65 64 73  sqlite3ExprNeeds
28470 4e 6f 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65  NoAffinityChange
28480 28 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 63 68  (const Expr*, ch
28490 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  ar);.int sqlite3
284a0 49 73 52 6f 77 69 64 28 63 6f 6e 73 74 20 63 68  IsRowid(const ch
284b0 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
284c0 65 33 47 65 6e 65 72 61 74 65 52 6f 77 44 65 6c  e3GenerateRowDel
284d0 65 74 65 28 0a 20 20 20 20 50 61 72 73 65 2a 2c  ete(.    Parse*,
284e0 54 61 62 6c 65 2a 2c 54 72 69 67 67 65 72 2a 2c  Table*,Trigger*,
284f0 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 31 36 2c  int,int,int,i16,
28500 75 38 2c 75 38 2c 75 38 2c 69 6e 74 29 3b 0a 76  u8,u8,u8,int);.v
28510 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72  oid sqlite3Gener
28520 61 74 65 52 6f 77 49 6e 64 65 78 44 65 6c 65 74  ateRowIndexDelet
28530 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  e(Parse*, Table*
28540 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a  , int, int, int*
28550 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
28560 74 65 33 47 65 6e 65 72 61 74 65 49 6e 64 65 78  te3GenerateIndex
28570 4b 65 79 28 50 61 72 73 65 2a 2c 20 49 6e 64 65  Key(Parse*, Inde
28580 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  x*, int, int, in
28590 74 2c 20 69 6e 74 2a 2c 49 6e 64 65 78 2a 2c 69  t, int*,Index*,i
285a0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
285b0 33 52 65 73 6f 6c 76 65 50 61 72 74 49 64 78 4c  3ResolvePartIdxL
285c0 61 62 65 6c 28 50 61 72 73 65 2a 2c 69 6e 74 29  abel(Parse*,int)
285d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65  ;.void sqlite3Ge
285e0 6e 65 72 61 74 65 43 6f 6e 73 74 72 61 69 6e 74  nerateConstraint
285f0 43 68 65 63 6b 73 28 50 61 72 73 65 2a 2c 54 61  Checks(Parse*,Ta
28600 62 6c 65 2a 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e  ble*,int*,int,in
28610 74 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20 20 20  t,int,int,.     
28620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28640 75 38 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a 2c 69  u8,u8,int,int*,i
28650 6e 74 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  nt*);.#ifdef SQL
28660 49 54 45 5f 45 4e 41 42 4c 45 5f 4e 55 4c 4c 5f  ITE_ENABLE_NULL_
28670 54 52 49 4d 0a 20 20 76 6f 69 64 20 73 71 6c 69  TRIM.  void sqli
28680 74 65 33 53 65 74 4d 61 6b 65 52 65 63 6f 72 64  te3SetMakeRecord
28690 50 35 28 56 64 62 65 2a 2c 54 61 62 6c 65 2a 29  P5(Vdbe*,Table*)
286a0 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
286b0 20 73 71 6c 69 74 65 33 53 65 74 4d 61 6b 65 52   sqlite3SetMakeR
286c0 65 63 6f 72 64 50 35 28 41 2c 42 29 0a 23 65 6e  ecordP5(A,B).#en
286d0 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
286e0 43 6f 6d 70 6c 65 74 65 49 6e 73 65 72 74 69 6f  CompleteInsertio
286f0 6e 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c  n(Parse*,Table*,
28700 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a  int,int,int,int*
28710 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 69  ,int,int,int);.i
28720 6e 74 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61  nt sqlite3OpenTa
28730 62 6c 65 41 6e 64 49 6e 64 69 63 65 73 28 50 61  bleAndIndices(Pa
28740 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
28750 74 2c 20 75 38 2c 20 69 6e 74 2c 20 75 38 2a 2c  t, u8, int, u8*,
28760 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 76 6f   int*, int*);.vo
28770 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 57  id sqlite3BeginW
28780 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28 50 61  riteOperation(Pa
28790 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  rse*, int, int);
287a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 75 6c  .void sqlite3Mul
287b0 74 69 57 72 69 74 65 28 50 61 72 73 65 2a 29 3b  tiWrite(Parse*);
287c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 79  .void sqlite3May
287d0 41 62 6f 72 74 28 50 61 72 73 65 2a 29 3b 0a 76  Abort(Parse*);.v
287e0 6f 69 64 20 73 71 6c 69 74 65 33 48 61 6c 74 43  oid sqlite3HaltC
287f0 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a  onstraint(Parse*
28800 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 63 68 61 72  , int, int, char
28810 2a 2c 20 69 38 2c 20 75 38 29 3b 0a 76 6f 69 64  *, i8, u8);.void
28820 20 73 71 6c 69 74 65 33 55 6e 69 71 75 65 43 6f   sqlite3UniqueCo
28830 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c  nstraint(Parse*,
28840 20 69 6e 74 2c 20 49 6e 64 65 78 2a 29 3b 0a 76   int, Index*);.v
28850 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 69 64  oid sqlite3Rowid
28860 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65  Constraint(Parse
28870 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 2a 29 3b  *, int, Table*);
28880 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
28890 70 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45  prDup(sqlite3*,E
288a0 78 70 72 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 4c  xpr*,int);.ExprL
288b0 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72  ist *sqlite3Expr
288c0 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a  ListDup(sqlite3*
288d0 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b  ,ExprList*,int);
288e0 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65  .SrcList *sqlite
288f0 33 53 72 63 4c 69 73 74 44 75 70 28 73 71 6c 69  3SrcListDup(sqli
28900 74 65 33 2a 2c 53 72 63 4c 69 73 74 2a 2c 69 6e  te3*,SrcList*,in
28910 74 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69  t);.IdList *sqli
28920 74 65 33 49 64 4c 69 73 74 44 75 70 28 73 71 6c  te3IdListDup(sql
28930 69 74 65 33 2a 2c 49 64 4c 69 73 74 2a 29 3b 0a  ite3*,IdList*);.
28940 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53  Select *sqlite3S
28950 65 6c 65 63 74 44 75 70 28 73 71 6c 69 74 65 33  electDup(sqlite3
28960 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 29 3b 0a  *,Select*,int);.
28970 23 69 66 20 53 45 4c 45 43 54 54 52 41 43 45 5f  #if SELECTTRACE_
28980 45 4e 41 42 4c 45 44 0a 76 6f 69 64 20 73 71 6c  ENABLED.void sql
28990 69 74 65 33 53 65 6c 65 63 74 53 65 74 4e 61 6d  ite3SelectSetNam
289a0 65 28 53 65 6c 65 63 74 2a 2c 63 6f 6e 73 74 20  e(Select*,const 
289b0 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  char*);.#else.# 
289c0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65  define sqlite3Se
289d0 6c 65 63 74 53 65 74 4e 61 6d 65 28 41 2c 42 29  lectSetName(A,B)
289e0 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
289f0 69 74 65 33 49 6e 73 65 72 74 42 75 69 6c 74 69  ite3InsertBuilti
28a00 6e 46 75 6e 63 73 28 46 75 6e 63 44 65 66 2a 2c  nFuncs(FuncDef*,
28a10 69 6e 74 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73  int);.FuncDef *s
28a20 71 6c 69 74 65 33 46 69 6e 64 46 75 6e 63 74 69  qlite3FindFuncti
28a30 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  on(sqlite3*,cons
28a40 74 20 63 68 61 72 2a 2c 69 6e 74 2c 75 38 2c 75  t char*,int,u8,u
28a50 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  8);.void sqlite3
28a60 52 65 67 69 73 74 65 72 42 75 69 6c 74 69 6e 46  RegisterBuiltinF
28a70 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a  unctions(void);.
28a80 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69  void sqlite3Regi
28a90 73 74 65 72 44 61 74 65 54 69 6d 65 46 75 6e 63  sterDateTimeFunc
28aa0 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69  tions(void);.voi
28ab0 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65  d sqlite3Registe
28ac0 72 50 65 72 43 6f 6e 6e 65 63 74 69 6f 6e 42 75  rPerConnectionBu
28ad0 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28 73  iltinFunctions(s
28ae0 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71  qlite3*);.int sq
28af0 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b  lite3SafetyCheck
28b00 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e  Ok(sqlite3*);.in
28b10 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43  t sqlite3SafetyC
28b20 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 73 71 6c  heckSickOrOk(sql
28b30 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
28b40 69 74 65 33 43 68 61 6e 67 65 43 6f 6f 6b 69 65  ite3ChangeCookie
28b50 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 0a  (Parse*, int);..
28b60 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
28b70 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 26  ITE_OMIT_VIEW) &
28b80 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
28b90 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a  E_OMIT_TRIGGER).
28ba0 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 74 65  void sqlite3Mate
28bb0 72 69 61 6c 69 7a 65 56 69 65 77 28 50 61 72 73  rializeView(Pars
28bc0 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72  e*, Table*, Expr
28bd0 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  *, int);.#endif.
28be0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
28bf0 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 20 20 76  OMIT_TRIGGER.  v
28c00 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
28c10 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20  Trigger(Parse*, 
28c20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e  Token*,Token*,in
28c30 74 2c 69 6e 74 2c 49 64 4c 69 73 74 2a 2c 53 72  t,int,IdList*,Sr
28c40 63 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20  cList*,.        
28c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28c60 20 20 20 45 78 70 72 2a 2c 69 6e 74 2c 20 69 6e     Expr*,int, in
28c70 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
28c80 65 33 46 69 6e 69 73 68 54 72 69 67 67 65 72 28  e3FinishTrigger(
28c90 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 53  Parse*, TriggerS
28ca0 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20  tep*, Token*);. 
28cb0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f   void sqlite3Dro
28cc0 70 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c  pTrigger(Parse*,
28cd0 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b   SrcList*, int);
28ce0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
28cf0 72 6f 70 54 72 69 67 67 65 72 50 74 72 28 50 61  ropTriggerPtr(Pa
28d00 72 73 65 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b  rse*, Trigger*);
28d10 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69  .  Trigger *sqli
28d20 74 65 33 54 72 69 67 67 65 72 73 45 78 69 73 74  te3TriggersExist
28d30 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 2a  (Parse *, Table*
28d40 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a  , int, ExprList*
28d50 2c 20 69 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a 20  , int *pMask);. 
28d60 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65   Trigger *sqlite
28d70 33 54 72 69 67 67 65 72 4c 69 73 74 28 50 61 72  3TriggerList(Par
28d80 73 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a  se *, Table *);.
28d90 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
28da0 64 65 52 6f 77 54 72 69 67 67 65 72 28 50 61 72  deRowTrigger(Par
28db0 73 65 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20  se*, Trigger *, 
28dc0 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  int, ExprList*, 
28dd0 69 6e 74 2c 20 54 61 62 6c 65 20 2a 2c 0a 20 20  int, Table *,.  
28de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28df0 20 20 20 20 20 20 20 20 20 20 69 6e 74 2c 20 69            int, i
28e00 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  nt, int);.  void
28e10 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54   sqlite3CodeRowT
28e20 72 69 67 67 65 72 44 69 72 65 63 74 28 50 61 72  riggerDirect(Par
28e30 73 65 20 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c  se *, Trigger *,
28e40 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69   Table *, int, i
28e50 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  nt, int);.  void
28e60 20 73 71 6c 69 74 65 56 69 65 77 54 72 69 67 67   sqliteViewTrigg
28e70 65 72 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ers(Parse*, Tabl
28e80 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20  e*, Expr*, int, 
28e90 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20 76 6f  ExprList*);.  vo
28ea0 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
28eb0 54 72 69 67 67 65 72 53 74 65 70 28 73 71 6c 69  TriggerStep(sqli
28ec0 74 65 33 2a 2c 20 54 72 69 67 67 65 72 53 74 65  te3*, TriggerSte
28ed0 70 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74  p*);.  TriggerSt
28ee0 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  ep *sqlite3Trigg
28ef0 65 72 53 65 6c 65 63 74 53 74 65 70 28 73 71 6c  erSelectStep(sql
28f00 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a  ite3*,Select*);.
28f10 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
28f20 71 6c 69 74 65 33 54 72 69 67 67 65 72 49 6e 73  qlite3TriggerIns
28f30 65 72 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a  ertStep(sqlite3*
28f40 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73 74 2a  ,Token*, IdList*
28f50 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
28f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28f70 20 20 20 20 20 20 20 20 20 20 53 65 6c 65 63 74            Select
28f80 2a 2c 75 38 29 3b 0a 20 20 54 72 69 67 67 65 72  *,u8);.  Trigger
28f90 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69  Step *sqlite3Tri
28fa0 67 67 65 72 55 70 64 61 74 65 53 74 65 70 28 73  ggerUpdateStep(s
28fb0 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 45  qlite3*,Token*,E
28fc0 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c  xprList*, Expr*,
28fd0 20 75 38 29 3b 0a 20 20 54 72 69 67 67 65 72 53   u8);.  TriggerS
28fe0 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
28ff0 67 65 72 44 65 6c 65 74 65 53 74 65 70 28 73 71  gerDeleteStep(sq
29000 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 45  lite3*,Token*, E
29010 78 70 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  xpr*);.  void sq
29020 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67  lite3DeleteTrigg
29030 65 72 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69  er(sqlite3*, Tri
29040 67 67 65 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  gger*);.  void s
29050 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
29060 65 6c 65 74 65 54 72 69 67 67 65 72 28 73 71 6c  eleteTrigger(sql
29070 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  ite3*,int,const 
29080 63 68 61 72 2a 29 3b 0a 20 20 75 33 32 20 73 71  char*);.  u32 sq
29090 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d  lite3TriggerColm
290a0 61 73 6b 28 50 61 72 73 65 2a 2c 54 72 69 67 67  ask(Parse*,Trigg
290b0 65 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e  er*,ExprList*,in
290c0 74 2c 69 6e 74 2c 54 61 62 6c 65 2a 2c 69 6e 74  t,int,Table*,int
290d0 29 3b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  );.# define sqli
290e0 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c  te3ParseToplevel
290f0 28 70 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65  (p) ((p)->pTople
29100 76 65 6c 20 3f 20 28 70 29 2d 3e 70 54 6f 70 6c  vel ? (p)->pTopl
29110 65 76 65 6c 20 3a 20 28 70 29 29 0a 23 20 64 65  evel : (p)).# de
29120 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 54 6f  fine sqlite3IsTo
29130 70 6c 65 76 65 6c 28 70 29 20 28 28 70 29 2d 3e  plevel(p) ((p)->
29140 70 54 6f 70 6c 65 76 65 6c 3d 3d 30 29 0a 23 65  pToplevel==0).#e
29150 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
29160 69 74 65 33 54 72 69 67 67 65 72 73 45 78 69 73  ite3TriggersExis
29170 74 28 42 2c 43 2c 44 2c 45 2c 46 29 20 30 0a 23  t(B,C,D,E,F) 0.#
29180 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44   define sqlite3D
29190 65 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c 42  eleteTrigger(A,B
291a0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
291b0 65 33 44 72 6f 70 54 72 69 67 67 65 72 50 74 72  e3DropTriggerPtr
291c0 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73  (A,B).# define s
291d0 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
291e0 65 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c 42  eleteTrigger(A,B
291f0 2c 43 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,C).# define sql
29200 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67  ite3CodeRowTrigg
29210 65 72 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47  er(A,B,C,D,E,F,G
29220 2c 48 2c 49 29 0a 23 20 64 65 66 69 6e 65 20 73  ,H,I).# define s
29230 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69  qlite3CodeRowTri
29240 67 67 65 72 44 69 72 65 63 74 28 41 2c 42 2c 43  ggerDirect(A,B,C
29250 2c 44 2c 45 2c 46 29 0a 23 20 64 65 66 69 6e 65  ,D,E,F).# define
29260 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c   sqlite3TriggerL
29270 69 73 74 28 58 2c 20 59 29 20 30 0a 23 20 64 65  ist(X, Y) 0.# de
29280 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73  fine sqlite3Pars
29290 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 70 0a 23  eToplevel(p) p.#
292a0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
292b0 73 54 6f 70 6c 65 76 65 6c 28 70 29 20 31 0a 23  sToplevel(p) 1.#
292c0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
292d0 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 41 2c  riggerColmask(A,
292e0 42 2c 43 2c 44 2c 45 2c 46 2c 47 29 20 30 0a 23  B,C,D,E,F,G) 0.#
292f0 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74  endif..int sqlit
29300 65 33 4a 6f 69 6e 54 79 70 65 28 50 61 72 73 65  e3JoinType(Parse
29310 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
29320 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
29330 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 46 6f   sqlite3CreateFo
29340 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c  reignKey(Parse*,
29350 20 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65   ExprList*, Toke
29360 6e 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  n*, ExprList*, i
29370 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
29380 33 44 65 66 65 72 46 6f 72 65 69 67 6e 4b 65 79  3DeferForeignKey
29390 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23  (Parse*, int);.#
293a0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
293b0 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e  IT_AUTHORIZATION
293c0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
293d0 75 74 68 52 65 61 64 28 50 61 72 73 65 2a 2c 45  uthRead(Parse*,E
293e0 78 70 72 2a 2c 53 63 68 65 6d 61 2a 2c 53 72 63  xpr*,Schema*,Src
293f0 4c 69 73 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71  List*);.  int sq
29400 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 50  lite3AuthCheck(P
29410 61 72 73 65 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74  arse*,int, const
29420 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
29430 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
29440 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
29450 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68  3AuthContextPush
29460 28 50 61 72 73 65 2a 2c 20 41 75 74 68 43 6f 6e  (Parse*, AuthCon
29470 74 65 78 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61  text*, const cha
29480 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  r*);.  void sqli
29490 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f  te3AuthContextPo
294a0 70 28 41 75 74 68 43 6f 6e 74 65 78 74 2a 29 3b  p(AuthContext*);
294b0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75  .  int sqlite3Au
294c0 74 68 52 65 61 64 43 6f 6c 28 50 61 72 73 65 2a  thReadCol(Parse*
294d0 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
294e0 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e  const char *, in
294f0 74 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  t);.#else.# defi
29500 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 52 65  ne sqlite3AuthRe
29510 61 64 28 61 2c 62 2c 63 2c 64 29 0a 23 20 64 65  ad(a,b,c,d).# de
29520 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68  fine sqlite3Auth
29530 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 29  Check(a,b,c,d,e)
29540 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20      SQLITE_OK.# 
29550 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
29560 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28 61 2c  thContextPush(a,
29570 62 2c 63 29 0a 23 20 64 65 66 69 6e 65 20 73 71  b,c).# define sq
29580 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74  lite3AuthContext
29590 50 6f 70 28 61 29 20 20 28 28 76 6f 69 64 29 28  Pop(a)  ((void)(
295a0 61 29 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  a)).#endif.void 
295b0 73 71 6c 69 74 65 33 41 74 74 61 63 68 28 50 61  sqlite3Attach(Pa
295c0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70  rse*, Expr*, Exp
295d0 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  r*, Expr*);.void
295e0 20 73 71 6c 69 74 65 33 44 65 74 61 63 68 28 50   sqlite3Detach(P
295f0 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  arse*, Expr*);.v
29600 6f 69 64 20 73 71 6c 69 74 65 33 46 69 78 49 6e  oid sqlite3FixIn
29610 69 74 28 44 62 46 69 78 65 72 2a 2c 20 50 61 72  it(DbFixer*, Par
29620 73 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  se*, int, const 
29630 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b  char*, const Tok
29640 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
29650 33 46 69 78 53 72 63 4c 69 73 74 28 44 62 46 69  3FixSrcList(DbFi
29660 78 65 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  xer*, SrcList*);
29670 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53  .int sqlite3FixS
29680 65 6c 65 63 74 28 44 62 46 69 78 65 72 2a 2c 20  elect(DbFixer*, 
29690 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
296a0 6c 69 74 65 33 46 69 78 45 78 70 72 28 44 62 46  lite3FixExpr(DbF
296b0 69 78 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69  ixer*, Expr*);.i
296c0 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45 78 70  nt sqlite3FixExp
296d0 72 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20  rList(DbFixer*, 
296e0 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
296f0 73 71 6c 69 74 65 33 46 69 78 54 72 69 67 67 65  sqlite3FixTrigge
29700 72 53 74 65 70 28 44 62 46 69 78 65 72 2a 2c 20  rStep(DbFixer*, 
29710 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 69  TriggerStep*);.i
29720 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 46 28 63  nt sqlite3AtoF(c
29730 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 64 6f  onst char *z, do
29740 75 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 29 3b  uble*, int, u8);
29750 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 49  .int sqlite3GetI
29760 6e 74 33 32 28 63 6f 6e 73 74 20 63 68 61 72 20  nt32(const char 
29770 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71  *, int*);.int sq
29780 6c 69 74 65 33 41 74 6f 69 28 63 6f 6e 73 74 20  lite3Atoi(const 
29790 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  char*);.int sqli
297a0 74 65 33 55 74 66 31 36 42 79 74 65 4c 65 6e 28  te3Utf16ByteLen(
297b0 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 44 61 74  const void *pDat
297c0 61 2c 20 69 6e 74 20 6e 43 68 61 72 29 3b 0a 69  a, int nChar);.i
297d0 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38 43 68  nt sqlite3Utf8Ch
297e0 61 72 4c 65 6e 28 63 6f 6e 73 74 20 63 68 61 72  arLen(const char
297f0 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 42 79   *pData, int nBy
29800 74 65 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33  te);.u32 sqlite3
29810 55 74 66 38 52 65 61 64 28 63 6f 6e 73 74 20 75  Utf8Read(const u
29820 38 2a 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c  8**);.LogEst sql
29830 69 74 65 33 4c 6f 67 45 73 74 28 75 36 34 29 3b  ite3LogEst(u64);
29840 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c  .LogEst sqlite3L
29850 6f 67 45 73 74 41 64 64 28 4c 6f 67 45 73 74 2c  ogEstAdd(LogEst,
29860 4c 6f 67 45 73 74 29 3b 0a 23 69 66 6e 64 65 66  LogEst);.#ifndef
29870 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
29880 54 55 41 4c 54 41 42 4c 45 0a 4c 6f 67 45 73 74  TUALTABLE.LogEst
29890 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 46 72   sqlite3LogEstFr
298a0 6f 6d 44 6f 75 62 6c 65 28 64 6f 75 62 6c 65 29  omDouble(double)
298b0 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66  ;.#endif.#if def
298c0 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
298d0 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54  LE_STMT_SCANSTAT
298e0 55 53 29 20 7c 7c 20 5c 0a 20 20 20 20 64 65 66  US) || \.    def
298f0 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
29900 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
29910 34 29 20 7c 7c 20 5c 0a 20 20 20 20 64 65 66 69  4) || \.    defi
29920 6e 65 64 28 53 51 4c 49 54 45 5f 45 58 50 4c 41  ned(SQLITE_EXPLA
29930 49 4e 5f 45 53 54 49 4d 41 54 45 44 5f 52 4f 57  IN_ESTIMATED_ROW
29940 53 29 0a 75 36 34 20 73 71 6c 69 74 65 33 4c 6f  S).u64 sqlite3Lo
29950 67 45 73 74 54 6f 49 6e 74 28 4c 6f 67 45 73 74  gEstToInt(LogEst
29960 29 3b 0a 23 65 6e 64 69 66 0a 56 4c 69 73 74 20  );.#endif.VList 
29970 2a 73 71 6c 69 74 65 33 56 4c 69 73 74 41 64 64  *sqlite3VListAdd
29980 28 73 71 6c 69 74 65 33 2a 2c 56 4c 69 73 74 2a  (sqlite3*,VList*
29990 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74  ,const char*,int
299a0 2c 69 6e 74 29 3b 0a 63 6f 6e 73 74 20 63 68 61  ,int);.const cha
299b0 72 20 2a 73 71 6c 69 74 65 33 56 4c 69 73 74 4e  r *sqlite3VListN
299c0 75 6d 54 6f 4e 61 6d 65 28 56 4c 69 73 74 2a 2c  umToName(VList*,
299d0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
299e0 33 56 4c 69 73 74 4e 61 6d 65 54 6f 4e 75 6d 28  3VListNameToNum(
299f0 56 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61  VList*,const cha
29a00 72 2a 2c 69 6e 74 29 3b 0a 0a 2f 2a 0a 2a 2a 20  r*,int);../*.** 
29a10 52 6f 75 74 69 6e 65 73 20 74 6f 20 72 65 61 64  Routines to read
29a20 20 61 6e 64 20 77 72 69 74 65 20 76 61 72 69 61   and write varia
29a30 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67  ble-length integ
29a40 65 72 73 2e 20 20 54 68 65 73 65 20 75 73 65 64  ers.  These used
29a50 20 74 6f 0a 2a 2a 20 62 65 20 64 65 66 69 6e 65   to.** be define
29a60 64 20 6c 6f 63 61 6c 6c 79 2c 20 62 75 74 20 6e  d locally, but n
29a70 6f 77 20 77 65 20 75 73 65 20 74 68 65 20 76 61  ow we use the va
29a80 72 69 6e 74 20 72 6f 75 74 69 6e 65 73 20 69 6e  rint routines in
29a90 20 74 68 65 20 75 74 69 6c 2e 63 0a 2a 2a 20 66   the util.c.** f
29aa0 69 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ile..*/.int sqli
29ab0 74 65 33 50 75 74 56 61 72 69 6e 74 28 75 6e 73  te3PutVarint(uns
29ac0 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 75 36 34  igned char*, u64
29ad0 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74  );.u8 sqlite3Get
29ae0 56 61 72 69 6e 74 28 63 6f 6e 73 74 20 75 6e 73  Varint(const uns
29af0 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 36  igned char *, u6
29b00 34 20 2a 29 3b 0a 75 38 20 73 71 6c 69 74 65 33  4 *);.u8 sqlite3
29b10 47 65 74 56 61 72 69 6e 74 33 32 28 63 6f 6e 73  GetVarint32(cons
29b20 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
29b30 2a 2c 20 75 33 32 20 2a 29 3b 0a 69 6e 74 20 73  *, u32 *);.int s
29b40 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28  qlite3VarintLen(
29b50 75 36 34 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54  u64 v);../*.** T
29b60 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 69  he common case i
29b70 73 20 66 6f 72 20 61 20 76 61 72 69 6e 74 20 74  s for a varint t
29b80 6f 20 62 65 20 61 20 73 69 6e 67 6c 65 20 62 79  o be a single by
29b90 74 65 2e 20 20 54 68 65 79 20 66 6f 6c 6c 6f 77  te.  They follow
29ba0 69 6e 67 0a 2a 2a 20 6d 61 63 72 6f 73 20 68 61  ing.** macros ha
29bb0 6e 64 6c 65 20 74 68 65 20 63 6f 6d 6d 6f 6e 20  ndle the common 
29bc0 63 61 73 65 20 77 69 74 68 6f 75 74 20 61 20 70  case without a p
29bd0 72 6f 63 65 64 75 72 65 20 63 61 6c 6c 2c 20 62  rocedure call, b
29be0 75 74 20 74 68 65 6e 20 63 61 6c 6c 0a 2a 2a 20  ut then call.** 
29bf0 74 68 65 20 70 72 6f 63 65 64 75 72 65 20 66 6f  the procedure fo
29c00 72 20 6c 61 72 67 65 72 20 76 61 72 69 6e 74 73  r larger varints
29c10 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 67 65 74  ..*/.#define get
29c20 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c  Varint32(A,B)  \
29c30 0a 20 20 28 75 38 29 28 28 2a 28 41 29 3c 28 75  .  (u8)((*(A)<(u
29c40 38 29 30 78 38 30 29 3f 28 28 42 29 3d 28 75 33  8)0x80)?((B)=(u3
29c50 32 29 2a 28 41 29 29 2c 31 3a 73 71 6c 69 74 65  2)*(A)),1:sqlite
29c60 33 47 65 74 56 61 72 69 6e 74 33 32 28 28 41 29  3GetVarint32((A)
29c70 2c 28 75 33 32 20 2a 29 26 28 42 29 29 29 0a 23  ,(u32 *)&(B))).#
29c80 64 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74  define putVarint
29c90 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38  32(A,B)  \.  (u8
29ca0 29 28 28 28 75 33 32 29 28 42 29 3c 28 75 33 32  )(((u32)(B)<(u32
29cb0 29 30 78 38 30 29 3f 28 2a 28 41 29 3d 28 75 6e  )0x80)?(*(A)=(un
29cc0 73 69 67 6e 65 64 20 63 68 61 72 29 28 42 29 29  signed char)(B))
29cd0 2c 31 3a 5c 0a 20 20 73 71 6c 69 74 65 33 50 75  ,1:\.  sqlite3Pu
29ce0 74 56 61 72 69 6e 74 28 28 41 29 2c 28 42 29 29  tVarint((A),(B))
29cf0 29 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61 72  ).#define getVar
29d00 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33 47 65  int    sqlite3Ge
29d10 74 56 61 72 69 6e 74 0a 23 64 65 66 69 6e 65 20  tVarint.#define 
29d20 70 75 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c  putVarint    sql
29d30 69 74 65 33 50 75 74 56 61 72 69 6e 74 0a 0a 0a  ite3PutVarint...
29d40 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
29d50 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79  te3IndexAffinity
29d60 53 74 72 28 73 71 6c 69 74 65 33 2a 2c 20 49 6e  Str(sqlite3*, In
29d70 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dex*);.void sqli
29d80 74 65 33 54 61 62 6c 65 41 66 66 69 6e 69 74 79  te3TableAffinity
29d90 28 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  (Vdbe*, Table*, 
29da0 69 6e 74 29 3b 0a 63 68 61 72 20 73 71 6c 69 74  int);.char sqlit
29db0 65 33 43 6f 6d 70 61 72 65 41 66 66 69 6e 69 74  e3CompareAffinit
29dc0 79 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63  y(Expr *pExpr, c
29dd0 68 61 72 20 61 66 66 32 29 3b 0a 69 6e 74 20 73  har aff2);.int s
29de0 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e  qlite3IndexAffin
29df0 69 74 79 4f 6b 28 45 78 70 72 20 2a 70 45 78 70  ityOk(Expr *pExp
29e00 72 2c 20 63 68 61 72 20 69 64 78 5f 61 66 66 69  r, char idx_affi
29e10 6e 69 74 79 29 3b 0a 63 68 61 72 20 73 71 6c 69  nity);.char sqli
29e20 74 65 33 54 61 62 6c 65 43 6f 6c 75 6d 6e 41 66  te3TableColumnAf
29e30 66 69 6e 69 74 79 28 54 61 62 6c 65 2a 2c 69 6e  finity(Table*,in
29e40 74 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33  t);.char sqlite3
29e50 45 78 70 72 41 66 66 69 6e 69 74 79 28 45 78 70  ExprAffinity(Exp
29e60 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20 73  r *pExpr);.int s
29e70 71 6c 69 74 65 33 41 74 6f 69 36 34 28 63 6f 6e  qlite3Atoi64(con
29e80 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 2c 20  st char*, i64*, 
29e90 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  int, u8);.int sq
29ea0 6c 69 74 65 33 44 65 63 4f 72 48 65 78 54 6f 49  lite3DecOrHexToI
29eb0 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  64(const char*, 
29ec0 69 36 34 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  i64*);.void sqli
29ed0 74 65 33 45 72 72 6f 72 57 69 74 68 4d 73 67 28  te3ErrorWithMsg(
29ee0 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63  sqlite3*, int, c
29ef0 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b  onst char*,...);
29f00 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72  .void sqlite3Err
29f10 6f 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29  or(sqlite3*,int)
29f20 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 79  ;.void sqlite3Sy
29f30 73 74 65 6d 45 72 72 6f 72 28 73 71 6c 69 74 65  stemError(sqlite
29f40 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73  3*,int);.void *s
29f50 71 6c 69 74 65 33 48 65 78 54 6f 42 6c 6f 62 28  qlite3HexToBlob(
29f60 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20  sqlite3*, const 
29f70 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 29 3b  char *z, int n);
29f80 0a 75 38 20 73 71 6c 69 74 65 33 48 65 78 54 6f  .u8 sqlite3HexTo
29f90 49 6e 74 28 69 6e 74 20 68 29 3b 0a 69 6e 74 20  Int(int h);.int 
29fa0 73 71 6c 69 74 65 33 54 77 6f 50 61 72 74 4e 61  sqlite3TwoPartNa
29fb0 6d 65 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65  me(Parse *, Toke
29fc0 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f  n *, Token *, To
29fd0 6b 65 6e 20 2a 2a 29 3b 0a 0a 23 69 66 20 64 65  ken **);..#if de
29fe0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4e 45 45  fined(SQLITE_NEE
29ff0 44 5f 45 52 52 5f 4e 41 4d 45 29 0a 63 6f 6e 73  D_ERR_NAME).cons
2a000 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45  t char *sqlite3E
2a010 72 72 4e 61 6d 65 28 69 6e 74 29 3b 0a 23 65 6e  rrName(int);.#en
2a020 64 69 66 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20  dif..const char 
2a030 2a 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 69  *sqlite3ErrStr(i
2a040 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2a050 52 65 61 64 53 63 68 65 6d 61 28 50 61 72 73 65  ReadSchema(Parse
2a060 20 2a 70 50 61 72 73 65 29 3b 0a 43 6f 6c 6c 53   *pParse);.CollS
2a070 65 71 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 43  eq *sqlite3FindC
2a080 6f 6c 6c 53 65 71 28 73 71 6c 69 74 65 33 2a 2c  ollSeq(sqlite3*,
2a090 75 38 20 65 6e 63 2c 20 63 6f 6e 73 74 20 63 68  u8 enc, const ch
2a0a0 61 72 2a 2c 69 6e 74 29 3b 0a 43 6f 6c 6c 53 65  ar*,int);.CollSe
2a0b0 71 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65  q *sqlite3Locate
2a0c0 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70  CollSeq(Parse *p
2a0d0 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63 68 61  Parse, const cha
2a0e0 72 2a 7a 4e 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65  r*zName);.CollSe
2a0f0 71 20 2a 73 71 6c 69 74 65 33 45 78 70 72 43 6f  q *sqlite3ExprCo
2a100 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50 61  llSeq(Parse *pPa
2a110 72 73 65 2c 20 45 78 70 72 20 2a 70 45 78 70 72  rse, Expr *pExpr
2a120 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
2a130 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65 54 6f  ExprAddCollateTo
2a140 6b 65 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73  ken(Parse *pPars
2a150 65 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20  e, Expr*, const 
2a160 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 45 78  Token*, int);.Ex
2a170 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41  pr *sqlite3ExprA
2a180 64 64 43 6f 6c 6c 61 74 65 53 74 72 69 6e 67 28  ddCollateString(
2a190 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e  Parse*,Expr*,con
2a1a0 73 74 20 63 68 61 72 2a 29 3b 0a 45 78 70 72 20  st char*);.Expr 
2a1b0 2a 73 71 6c 69 74 65 33 45 78 70 72 53 6b 69 70  *sqlite3ExprSkip
2a1c0 43 6f 6c 6c 61 74 65 28 45 78 70 72 2a 29 3b 0a  Collate(Expr*);.
2a1d0 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b  int sqlite3Check
2a1e0 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c  CollSeq(Parse *,
2a1f0 20 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e 74   CollSeq *);.int
2a200 20 73 71 6c 69 74 65 33 43 68 65 63 6b 4f 62 6a   sqlite3CheckObj
2a210 65 63 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c  ectName(Parse *,
2a220 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a   const char *);.
2a230 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65  void sqlite3Vdbe
2a240 53 65 74 43 68 61 6e 67 65 73 28 73 71 6c 69 74  SetChanges(sqlit
2a250 65 33 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  e3 *, int);.int 
2a260 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28  sqlite3AddInt64(
2a270 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73  i64*,i64);.int s
2a280 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34 28 69  qlite3SubInt64(i
2a290 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71  64*,i64);.int sq
2a2a0 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34 28 69 36  lite3MulInt64(i6
2a2b0 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c  4*,i64);.int sql
2a2c0 69 74 65 33 41 62 73 49 6e 74 33 32 28 69 6e 74  ite3AbsInt32(int
2a2d0 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
2a2e0 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d 45  _ENABLE_8_3_NAME
2a2f0 53 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69  S.void sqlite3Fi
2a300 6c 65 53 75 66 66 69 78 33 28 63 6f 6e 73 74 20  leSuffix3(const 
2a310 63 68 61 72 2a 2c 20 63 68 61 72 2a 29 3b 0a 23  char*, char*);.#
2a320 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
2a330 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69 78 33  lite3FileSuffix3
2a340 28 58 2c 59 29 0a 23 65 6e 64 69 66 0a 75 38 20  (X,Y).#endif.u8 
2a350 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61  sqlite3GetBoolea
2a360 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c  n(const char *z,
2a370 75 38 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f 69 64  u8);..const void
2a380 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 54 65   *sqlite3ValueTe
2a390 78 74 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  xt(sqlite3_value
2a3a0 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69  *, u8);.int sqli
2a3b0 74 65 33 56 61 6c 75 65 42 79 74 65 73 28 73 71  te3ValueBytes(sq
2a3c0 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38  lite3_value*, u8
2a3d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
2a3e0 61 6c 75 65 53 65 74 53 74 72 28 73 71 6c 69 74  alueSetStr(sqlit
2a3f0 65 33 5f 76 61 6c 75 65 2a 2c 20 69 6e 74 2c 20  e3_value*, int, 
2a400 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2c 75 38 2c  const void *,u8,
2a410 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a420 20 20 20 20 20 20 20 20 20 76 6f 69 64 28 2a 29           void(*)
2a430 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73  (void*));.void s
2a440 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 4e 75  qlite3ValueSetNu
2a450 6c 6c 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ll(sqlite3_value
2a460 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2a470 56 61 6c 75 65 46 72 65 65 28 73 71 6c 69 74 65  ValueFree(sqlite
2a480 33 5f 76 61 6c 75 65 2a 29 3b 0a 73 71 6c 69 74  3_value*);.sqlit
2a490 65 33 5f 76 61 6c 75 65 20 2a 73 71 6c 69 74 65  e3_value *sqlite
2a4a0 33 56 61 6c 75 65 4e 65 77 28 73 71 6c 69 74 65  3ValueNew(sqlite
2a4b0 33 20 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  3 *);.char *sqli
2a4c0 74 65 33 55 74 66 31 36 74 6f 38 28 73 71 6c 69  te3Utf16to8(sqli
2a4d0 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 76 6f 69  te3 *, const voi
2a4e0 64 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e  d*, int, u8);.in
2a4f0 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72  t sqlite3ValueFr
2a500 6f 6d 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a  omExpr(sqlite3 *
2a510 2c 20 45 78 70 72 20 2a 2c 20 75 38 2c 20 75 38  , Expr *, u8, u8
2a520 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  , sqlite3_value 
2a530 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  **);.void sqlite
2a540 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e  3ValueApplyAffin
2a550 69 74 79 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  ity(sqlite3_valu
2a560 65 20 2a 2c 20 75 38 2c 20 75 38 29 3b 0a 23 69  e *, u8, u8);.#i
2a570 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41  fndef SQLITE_AMA
2a580 4c 47 41 4d 41 54 49 4f 4e 0a 65 78 74 65 72 6e  LGAMATION.extern
2a590 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
2a5a0 63 68 61 72 20 73 71 6c 69 74 65 33 4f 70 63 6f  char sqlite3Opco
2a5b0 64 65 50 72 6f 70 65 72 74 79 5b 5d 3b 0a 65 78  deProperty[];.ex
2a5c0 74 65 72 6e 20 63 6f 6e 73 74 20 63 68 61 72 20  tern const char 
2a5d0 73 71 6c 69 74 65 33 53 74 72 42 49 4e 41 52 59  sqlite3StrBINARY
2a5e0 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  [];.extern const
2a5f0 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73   unsigned char s
2a600 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77  qlite3UpperToLow
2a610 65 72 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e  er[];.extern con
2a620 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
2a630 20 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70   sqlite3CtypeMap
2a640 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  [];.extern const
2a650 20 54 6f 6b 65 6e 20 73 71 6c 69 74 65 33 49 6e   Token sqlite3In
2a660 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78 74 65 72  tTokens[];.exter
2a670 6e 20 53 51 4c 49 54 45 5f 57 53 44 20 73 74 72  n SQLITE_WSD str
2a680 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69  uct Sqlite3Confi
2a690 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 3b  g sqlite3Config;
2a6a0 0a 65 78 74 65 72 6e 20 46 75 6e 63 44 65 66 48  .extern FuncDefH
2a6b0 61 73 68 20 73 71 6c 69 74 65 33 42 75 69 6c 74  ash sqlite3Built
2a6c0 69 6e 46 75 6e 63 74 69 6f 6e 73 3b 0a 23 69 66  inFunctions;.#if
2a6d0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2a6e0 5f 57 53 44 0a 65 78 74 65 72 6e 20 69 6e 74 20  _WSD.extern int 
2a6f0 73 71 6c 69 74 65 33 50 65 6e 64 69 6e 67 42 79  sqlite3PendingBy
2a700 74 65 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69  te;.#endif.#endi
2a710 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  f.void sqlite3Ro
2a720 6f 74 50 61 67 65 4d 6f 76 65 64 28 73 71 6c 69  otPageMoved(sqli
2a730 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  te3*, int, int, 
2a740 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2a750 65 33 52 65 69 6e 64 65 78 28 50 61 72 73 65 2a  e3Reindex(Parse*
2a760 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
2a770 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
2a780 6c 74 65 72 46 75 6e 63 74 69 6f 6e 73 28 76 6f  lterFunctions(vo
2a790 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
2a7a0 33 41 6c 74 65 72 52 65 6e 61 6d 65 54 61 62 6c  3AlterRenameTabl
2a7b0 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  e(Parse*, SrcLis
2a7c0 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  t*, Token*);.int
2a7d0 20 73 71 6c 69 74 65 33 47 65 74 54 6f 6b 65 6e   sqlite3GetToken
2a7e0 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
2a7f0 63 68 61 72 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a  char *, int *);.
2a800 76 6f 69 64 20 73 71 6c 69 74 65 33 4e 65 73 74  void sqlite3Nest
2a810 65 64 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20  edParse(Parse*, 
2a820 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
2a830 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
2a840 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61  xpirePreparedSta
2a850 74 65 6d 65 6e 74 73 28 73 71 6c 69 74 65 33 2a  tements(sqlite3*
2a860 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f  );.int sqlite3Co
2a870 64 65 53 75 62 73 65 6c 65 63 74 28 50 61 72 73  deSubselect(Pars
2a880 65 2a 2c 20 45 78 70 72 20 2a 2c 20 69 6e 74 2c  e*, Expr *, int,
2a890 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
2a8a0 74 65 33 53 65 6c 65 63 74 50 72 65 70 28 50 61  te3SelectPrep(Pa
2a8b0 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e  rse*, Select*, N
2a8c0 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f  ameContext*);.vo
2a8d0 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
2a8e0 57 72 6f 6e 67 4e 75 6d 54 65 72 6d 73 45 72 72  WrongNumTermsErr
2a8f0 6f 72 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  or(Parse *pParse
2a900 2c 20 53 65 6c 65 63 74 20 2a 70 29 3b 0a 69 6e  , Select *p);.in
2a910 74 20 73 71 6c 69 74 65 33 4d 61 74 63 68 53 70  t sqlite3MatchSp
2a920 61 6e 4e 61 6d 65 28 63 6f 6e 73 74 20 63 68 61  anName(const cha
2a930 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  r*, const char*,
2a940 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
2a950 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20  nst char*);.int 
2a960 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45 78  sqlite3ResolveEx
2a970 70 72 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74  prNames(NameCont
2a980 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e  ext*, Expr*);.in
2a990 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  t sqlite3Resolve
2a9a0 45 78 70 72 4c 69 73 74 4e 61 6d 65 73 28 4e 61  ExprListNames(Na
2a9b0 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72  meContext*, Expr
2a9c0 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  List*);.void sql
2a9d0 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 65 63  ite3ResolveSelec
2a9e0 74 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 20 53  tNames(Parse*, S
2a9f0 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74  elect*, NameCont
2aa00 65 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ext*);.void sqli
2aa10 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 66 52 65  te3ResolveSelfRe
2aa20 66 65 72 65 6e 63 65 28 50 61 72 73 65 2a 2c 54  ference(Parse*,T
2aa30 61 62 6c 65 2a 2c 69 6e 74 2c 45 78 70 72 2a 2c  able*,int,Expr*,
2aa40 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
2aa50 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 4f 72  sqlite3ResolveOr
2aa60 64 65 72 47 72 6f 75 70 42 79 28 50 61 72 73 65  derGroupBy(Parse
2aa70 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72  *, Select*, Expr
2aa80 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61  List*, const cha
2aa90 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
2aaa0 33 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28 56  3ColumnDefault(V
2aab0 64 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20  dbe *, Table *, 
2aac0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
2aad0 73 71 6c 69 74 65 33 41 6c 74 65 72 46 69 6e 69  sqlite3AlterFini
2aae0 73 68 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73  shAddColumn(Pars
2aaf0 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76  e *, Token *);.v
2ab00 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72  oid sqlite3Alter
2ab10 42 65 67 69 6e 41 64 64 43 6f 6c 75 6d 6e 28 50  BeginAddColumn(P
2ab20 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20  arse *, SrcList 
2ab30 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  *);.CollSeq *sql
2ab40 69 74 65 33 47 65 74 43 6f 6c 6c 53 65 71 28 50  ite3GetCollSeq(P
2ab50 61 72 73 65 2a 2c 20 75 38 2c 20 43 6f 6c 6c 53  arse*, u8, CollS
2ab60 65 71 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  eq *, const char
2ab70 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33  *);.char sqlite3
2ab80 41 66 66 69 6e 69 74 79 54 79 70 65 28 63 6f 6e  AffinityType(con
2ab90 73 74 20 63 68 61 72 2a 2c 20 75 38 2a 29 3b 0a  st char*, u8*);.
2aba0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e 61 6c  void sqlite3Anal
2abb0 79 7a 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  yze(Parse*, Toke
2abc0 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  n*, Token*);.int
2abd0 20 73 71 6c 69 74 65 33 49 6e 76 6f 6b 65 42 75   sqlite3InvokeBu
2abe0 73 79 48 61 6e 64 6c 65 72 28 42 75 73 79 48 61  syHandler(BusyHa
2abf0 6e 64 6c 65 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  ndler*);.int sql
2ac00 69 74 65 33 46 69 6e 64 44 62 28 73 71 6c 69 74  ite3FindDb(sqlit
2ac10 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  e3*, Token*);.in
2ac20 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62 4e  t sqlite3FindDbN
2ac30 61 6d 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 63  ame(sqlite3 *, c
2ac40 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e  onst char *);.in
2ac50 74 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69  t sqlite3Analysi
2ac60 73 4c 6f 61 64 28 73 71 6c 69 74 65 33 2a 2c 69  sLoad(sqlite3*,i
2ac70 6e 74 20 69 44 42 29 3b 0a 76 6f 69 64 20 73 71  nt iDB);.void sq
2ac80 6c 69 74 65 33 44 65 6c 65 74 65 49 6e 64 65 78  lite3DeleteIndex
2ac90 53 61 6d 70 6c 65 73 28 73 71 6c 69 74 65 33 2a  Samples(sqlite3*
2aca0 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73  ,Index*);.void s
2acb0 71 6c 69 74 65 33 44 65 66 61 75 6c 74 52 6f 77  qlite3DefaultRow
2acc0 45 73 74 28 49 6e 64 65 78 2a 29 3b 0a 76 6f 69  Est(Index*);.voi
2acd0 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65  d sqlite3Registe
2ace0 72 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 73 28 73  rLikeFunctions(s
2acf0 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 69  qlite3*, int);.i
2ad00 6e 74 20 73 71 6c 69 74 65 33 49 73 4c 69 6b 65  nt sqlite3IsLike
2ad10 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  Function(sqlite3
2ad20 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a 2c 63 68 61  *,Expr*,int*,cha
2ad30 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
2ad40 33 53 63 68 65 6d 61 43 6c 65 61 72 28 76 6f 69  3SchemaClear(voi
2ad50 64 20 2a 29 3b 0a 53 63 68 65 6d 61 20 2a 73 71  d *);.Schema *sq
2ad60 6c 69 74 65 33 53 63 68 65 6d 61 47 65 74 28 73  lite3SchemaGet(s
2ad70 71 6c 69 74 65 33 20 2a 2c 20 42 74 72 65 65 20  qlite3 *, Btree 
2ad80 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
2ad90 63 68 65 6d 61 54 6f 49 6e 64 65 78 28 73 71 6c  chemaToIndex(sql
2ada0 69 74 65 33 20 2a 64 62 2c 20 53 63 68 65 6d 61  ite3 *db, Schema
2adb0 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71   *);.KeyInfo *sq
2adc0 6c 69 74 65 33 4b 65 79 49 6e 66 6f 41 6c 6c 6f  lite3KeyInfoAllo
2add0 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 69  c(sqlite3*,int,i
2ade0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2adf0 33 4b 65 79 49 6e 66 6f 55 6e 72 65 66 28 4b 65  3KeyInfoUnref(Ke
2ae00 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f  yInfo*);.KeyInfo
2ae10 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f   *sqlite3KeyInfo
2ae20 52 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b  Ref(KeyInfo*);.K
2ae30 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b  eyInfo *sqlite3K
2ae40 65 79 49 6e 66 6f 4f 66 49 6e 64 65 78 28 50 61  eyInfoOfIndex(Pa
2ae50 72 73 65 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 23  rse*, Index*);.#
2ae60 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
2ae70 55 47 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b 65  UG.int sqlite3Ke
2ae80 79 49 6e 66 6f 49 73 57 72 69 74 65 61 62 6c 65  yInfoIsWriteable
2ae90 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 23 65 6e 64  (KeyInfo*);.#end
2aea0 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 72  if.int sqlite3Cr
2aeb0 65 61 74 65 46 75 6e 63 28 73 71 6c 69 74 65 33  eateFunc(sqlite3
2aec0 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
2aed0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 76 6f 69 64  , int, int, void
2aee0 20 2a 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73   *,.  void (*)(s
2aef0 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
2af00 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
2af10 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28 2a  e **),.  void (*
2af20 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
2af30 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
2af40 61 6c 75 65 20 2a 2a 29 2c 20 76 6f 69 64 20 28  alue **), void (
2af50 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  *)(sqlite3_conte
2af60 78 74 2a 29 2c 0a 20 20 46 75 6e 63 44 65 73 74  xt*),.  FuncDest
2af70 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75 63  ructor *pDestruc
2af80 74 6f 72 0a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  tor.);.void sqli
2af90 74 65 33 4f 6f 6d 46 61 75 6c 74 28 73 71 6c 69  te3OomFault(sqli
2afa0 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
2afb0 74 65 33 4f 6f 6d 43 6c 65 61 72 28 73 71 6c 69  te3OomClear(sqli
2afc0 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  te3*);.int sqlit
2afd0 65 33 41 70 69 45 78 69 74 28 73 71 6c 69 74 65  e3ApiExit(sqlite
2afe0 33 20 2a 64 62 2c 20 69 6e 74 29 3b 0a 69 6e 74  3 *db, int);.int
2aff0 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 65 6d 70   sqlite3OpenTemp
2b000 44 61 74 61 62 61 73 65 28 50 61 72 73 65 20 2a  Database(Parse *
2b010 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  );..void sqlite3
2b020 53 74 72 41 63 63 75 6d 49 6e 69 74 28 53 74 72  StrAccumInit(Str
2b030 41 63 63 75 6d 2a 2c 20 73 71 6c 69 74 65 33 2a  Accum*, sqlite3*
2b040 2c 20 63 68 61 72 2a 2c 20 69 6e 74 2c 20 69 6e  , char*, int, in
2b050 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2b060 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64 28 53  StrAccumAppend(S
2b070 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20 63  trAccum*,const c
2b080 68 61 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  har*,int);.void 
2b090 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41  sqlite3StrAccumA
2b0a0 70 70 65 6e 64 41 6c 6c 28 53 74 72 41 63 63 75  ppendAll(StrAccu
2b0b0 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  m*,const char*);
2b0c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 70 70  .void sqlite3App
2b0d0 65 6e 64 43 68 61 72 28 53 74 72 41 63 63 75 6d  endChar(StrAccum
2b0e0 2a 2c 69 6e 74 2c 63 68 61 72 29 3b 0a 63 68 61  *,int,char);.cha
2b0f0 72 20 2a 73 71 6c 69 74 65 33 53 74 72 41 63 63  r *sqlite3StrAcc
2b100 75 6d 46 69 6e 69 73 68 28 53 74 72 41 63 63 75  umFinish(StrAccu
2b110 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  m*);.void sqlite
2b120 33 53 74 72 41 63 63 75 6d 52 65 73 65 74 28 53  3StrAccumReset(S
2b130 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20  trAccum*);.void 
2b140 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65 73  sqlite3SelectDes
2b150 74 49 6e 69 74 28 53 65 6c 65 63 74 44 65 73 74  tInit(SelectDest
2b160 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45 78 70 72  *,int,int);.Expr
2b170 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74 65 43   *sqlite3CreateC
2b180 6f 6c 75 6d 6e 45 78 70 72 28 73 71 6c 69 74 65  olumnExpr(sqlite
2b190 33 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20  3 *, SrcList *, 
2b1a0 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f 69 64  int, int);..void
2b1b0 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70 52 65   sqlite3BackupRe
2b1c0 73 74 61 72 74 28 73 71 6c 69 74 65 33 5f 62 61  start(sqlite3_ba
2b1d0 63 6b 75 70 20 2a 29 3b 0a 76 6f 69 64 20 73 71  ckup *);.void sq
2b1e0 6c 69 74 65 33 42 61 63 6b 75 70 55 70 64 61 74  lite3BackupUpdat
2b1f0 65 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  e(sqlite3_backup
2b200 20 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73 74 20   *, Pgno, const 
2b210 75 38 20 2a 29 3b 0a 0a 23 69 66 6e 64 65 66 20  u8 *);..#ifndef 
2b220 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51  SQLITE_OMIT_SUBQ
2b230 55 45 52 59 0a 69 6e 74 20 73 71 6c 69 74 65 33  UERY.int sqlite3
2b240 45 78 70 72 43 68 65 63 6b 49 4e 28 50 61 72 73  ExprCheckIN(Pars
2b250 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 23 65 6c 73  e*, Expr*);.#els
2b260 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
2b270 65 33 45 78 70 72 43 68 65 63 6b 49 4e 28 78 2c  e3ExprCheckIN(x,
2b280 79 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 65 6e  y) SQLITE_OK.#en
2b290 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
2b2a0 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
2b2b0 4f 52 5f 53 54 41 54 34 0a 76 6f 69 64 20 73 71  OR_STAT4.void sq
2b2c0 6c 69 74 65 33 41 6e 61 6c 79 7a 65 46 75 6e 63  lite3AnalyzeFunc
2b2d0 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e 74  tions(void);.int
2b2e0 20 73 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f   sqlite3Stat4Pro
2b2f0 62 65 53 65 74 56 61 6c 75 65 28 0a 20 20 20 20  beSetValue(.    
2b300 50 61 72 73 65 2a 2c 49 6e 64 65 78 2a 2c 55 6e  Parse*,Index*,Un
2b310 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 2a 2c 45  packedRecord**,E
2b320 78 70 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  xpr*,int,int,int
2b330 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
2b340 74 61 74 34 56 61 6c 75 65 46 72 6f 6d 45 78 70  tat4ValueFromExp
2b350 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  r(Parse*, Expr*,
2b360 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c   u8, sqlite3_val
2b370 75 65 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ue**);.void sqli
2b380 74 65 33 53 74 61 74 34 50 72 6f 62 65 46 72 65  te3Stat4ProbeFre
2b390 65 28 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  e(UnpackedRecord
2b3a0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
2b3b0 74 61 74 34 43 6f 6c 75 6d 6e 28 73 71 6c 69 74  tat4Column(sqlit
2b3c0 65 33 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a  e3*, const void*
2b3d0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 73 71 6c 69  , int, int, sqli
2b3e0 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 63 68  te3_value**);.ch
2b3f0 61 72 20 73 71 6c 69 74 65 33 49 6e 64 65 78 43  ar sqlite3IndexC
2b400 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 73 71  olumnAffinity(sq
2b410 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a 2c 20  lite3*, Index*, 
2b420 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  int);.#endif../*
2b430 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63  .** The interfac
2b440 65 20 74 6f 20 74 68 65 20 4c 45 4d 4f 4e 2d 67  e to the LEMON-g
2b450 65 6e 65 72 61 74 65 64 20 70 61 72 73 65 72 0a  enerated parser.
2b460 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
2b470 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 20  E_AMALGAMATION. 
2b480 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61   void *sqlite3Pa
2b490 72 73 65 72 41 6c 6c 6f 63 28 76 6f 69 64 2a 28  rserAlloc(void*(
2b4a0 2a 29 28 75 36 34 29 29 3b 0a 20 20 76 6f 69 64  *)(u64));.  void
2b4b0 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 46 72   sqlite3ParserFr
2b4c0 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69 64 28 2a  ee(void*, void(*
2b4d0 29 28 76 6f 69 64 2a 29 29 3b 0a 23 65 6e 64 69  )(void*));.#endi
2b4e0 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61  f.void sqlite3Pa
2b4f0 72 73 65 72 28 76 6f 69 64 2a 2c 20 69 6e 74 2c  rser(void*, int,
2b500 20 54 6f 6b 65 6e 2c 20 50 61 72 73 65 2a 29 3b   Token, Parse*);
2b510 0a 23 69 66 64 65 66 20 59 59 54 52 41 43 4b 4d  .#ifdef YYTRACKM
2b520 41 58 53 54 41 43 4b 44 45 50 54 48 0a 20 20 69  AXSTACKDEPTH.  i
2b530 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  nt sqlite3Parser
2b540 53 74 61 63 6b 50 65 61 6b 28 76 6f 69 64 2a 29  StackPeak(void*)
2b550 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73  ;.#endif..void s
2b560 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64 45 78  qlite3AutoLoadEx
2b570 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33  tensions(sqlite3
2b580 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  *);.#ifndef SQLI
2b590 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54  TE_OMIT_LOAD_EXT
2b5a0 45 4e 53 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71  ENSION.  void sq
2b5b0 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73  lite3CloseExtens
2b5c0 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ions(sqlite3*);.
2b5d0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
2b5e0 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e  qlite3CloseExten
2b5f0 73 69 6f 6e 73 28 58 29 0a 23 65 6e 64 69 66 0a  sions(X).#endif.
2b600 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2b610 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48  OMIT_SHARED_CACH
2b620 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  E.  void sqlite3
2b630 54 61 62 6c 65 4c 6f 63 6b 28 50 61 72 73 65 20  TableLock(Parse 
2b640 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2c  *, int, int, u8,
2b650 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a   const char *);.
2b660 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
2b670 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b  sqlite3TableLock
2b680 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65 6e 64  (v,w,x,y,z).#end
2b690 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
2b6a0 45 5f 54 45 53 54 0a 20 20 69 6e 74 20 73 71 6c  E_TEST.  int sql
2b6b0 69 74 65 33 55 74 66 38 54 6f 38 28 75 6e 73 69  ite3Utf8To8(unsi
2b6c0 67 6e 65 64 20 63 68 61 72 2a 29 3b 0a 23 65 6e  gned char*);.#en
2b6d0 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
2b6e0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2b6f0 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 73  ABLE.#  define s
2b700 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72 28  qlite3VtabClear(
2b710 59 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  Y).#  define sql
2b720 69 74 65 33 56 74 61 62 53 79 6e 63 28 58 2c 59  ite3VtabSync(X,Y
2b730 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64  ) SQLITE_OK.#  d
2b740 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
2b750 62 52 6f 6c 6c 62 61 63 6b 28 58 29 0a 23 20 20  bRollback(X).#  
2b760 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
2b770 61 62 43 6f 6d 6d 69 74 28 58 29 0a 23 20 20 64  abCommit(X).#  d
2b780 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
2b790 62 49 6e 53 79 6e 63 28 64 62 29 20 30 0a 23 20  bInSync(db) 0.# 
2b7a0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2b7b0 74 61 62 4c 6f 63 6b 28 58 29 0a 23 20 20 64 65  tabLock(X).#  de
2b7c0 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
2b7d0 55 6e 6c 6f 63 6b 28 58 29 0a 23 20 20 64 65 66  Unlock(X).#  def
2b7e0 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 55  ine sqlite3VtabU
2b7f0 6e 6c 6f 63 6b 4c 69 73 74 28 58 29 0a 23 20 20  nlockList(X).#  
2b800 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
2b810 61 62 53 61 76 65 70 6f 69 6e 74 28 58 2c 20 59  abSavepoint(X, Y
2b820 2c 20 5a 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23  , Z) SQLITE_OK.#
2b830 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2b840 47 65 74 56 54 61 62 6c 65 28 58 2c 59 29 20 20  GetVTable(X,Y)  
2b850 28 28 56 54 61 62 6c 65 2a 29 30 29 0a 23 65 6c  ((VTable*)0).#el
2b860 73 65 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  se.   void sqlit
2b870 65 33 56 74 61 62 43 6c 65 61 72 28 73 71 6c 69  e3VtabClear(sqli
2b880 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 2a 29  te3 *db, Table*)
2b890 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ;.   void sqlite
2b8a0 33 56 74 61 62 44 69 73 63 6f 6e 6e 65 63 74 28  3VtabDisconnect(
2b8b0 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62  sqlite3 *db, Tab
2b8c0 6c 65 20 2a 70 29 3b 0a 20 20 20 69 6e 74 20 73  le *p);.   int s
2b8d0 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28 73  qlite3VtabSync(s
2b8e0 71 6c 69 74 65 33 20 2a 64 62 2c 20 56 64 62 65  qlite3 *db, Vdbe
2b8f0 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74  *);.   int sqlit
2b900 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 73  e3VtabRollback(s
2b910 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20  qlite3 *db);.   
2b920 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43  int sqlite3VtabC
2b930 6f 6d 6d 69 74 28 73 71 6c 69 74 65 33 20 2a 64  ommit(sqlite3 *d
2b940 62 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  b);.   void sqli
2b950 74 65 33 56 74 61 62 4c 6f 63 6b 28 56 54 61 62  te3VtabLock(VTab
2b960 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73  le *);.   void s
2b970 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
2b980 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76  (VTable *);.   v
2b990 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 55  oid sqlite3VtabU
2b9a0 6e 6c 6f 63 6b 4c 69 73 74 28 73 71 6c 69 74 65  nlockList(sqlite
2b9b0 33 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69  3*);.   int sqli
2b9c0 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74  te3VtabSavepoint
2b9d0 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 2c  (sqlite3 *, int,
2b9e0 20 69 6e 74 29 3b 0a 20 20 20 76 6f 69 64 20 73   int);.   void s
2b9f0 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74  qlite3VtabImport
2ba00 45 72 72 6d 73 67 28 56 64 62 65 2a 2c 20 73 71  Errmsg(Vdbe*, sq
2ba10 6c 69 74 65 33 5f 76 74 61 62 2a 29 3b 0a 20 20  lite3_vtab*);.  
2ba20 20 56 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33   VTable *sqlite3
2ba30 47 65 74 56 54 61 62 6c 65 28 73 71 6c 69 74 65  GetVTable(sqlite
2ba40 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20  3*, Table*);.   
2ba50 4d 6f 64 75 6c 65 20 2a 73 71 6c 69 74 65 33 56  Module *sqlite3V
2ba60 74 61 62 43 72 65 61 74 65 4d 6f 64 75 6c 65 28  tabCreateModule(
2ba70 0a 20 20 20 20 20 73 71 6c 69 74 65 33 2a 2c 0a  .     sqlite3*,.
2ba80 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a       const char*
2ba90 2c 0a 20 20 20 20 20 63 6f 6e 73 74 20 73 71 6c  ,.     const sql
2baa0 69 74 65 33 5f 6d 6f 64 75 6c 65 2a 2c 0a 20 20  ite3_module*,.  
2bab0 20 20 20 76 6f 69 64 2a 2c 0a 20 20 20 20 20 76     void*,.     v
2bac0 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 0a 20 20  oid(*)(void*).  
2bad0 20 29 3b 0a 23 20 20 64 65 66 69 6e 65 20 73 71   );.#  define sq
2bae0 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28  lite3VtabInSync(
2baf0 64 62 29 20 28 28 64 62 29 2d 3e 6e 56 54 72 61  db) ((db)->nVTra
2bb00 6e 73 3e 30 20 26 26 20 28 64 62 29 2d 3e 61 56  ns>0 && (db)->aV
2bb10 54 72 61 6e 73 3d 3d 30 29 0a 23 65 6e 64 69 66  Trans==0).#endif
2bb20 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62  .int sqlite3Vtab
2bb30 45 70 6f 6e 79 6d 6f 75 73 54 61 62 6c 65 49 6e  EponymousTableIn
2bb40 69 74 28 50 61 72 73 65 2a 2c 4d 6f 64 75 6c 65  it(Parse*,Module
2bb50 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2bb60 56 74 61 62 45 70 6f 6e 79 6d 6f 75 73 54 61 62  VtabEponymousTab
2bb70 6c 65 43 6c 65 61 72 28 73 71 6c 69 74 65 33 2a  leClear(sqlite3*
2bb80 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69 64 20  ,Module*);.void 
2bb90 73 71 6c 69 74 65 33 56 74 61 62 4d 61 6b 65 57  sqlite3VtabMakeW
2bba0 72 69 74 61 62 6c 65 28 50 61 72 73 65 2a 2c 54  ritable(Parse*,T
2bbb0 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  able*);.void sql
2bbc0 69 74 65 33 56 74 61 62 42 65 67 69 6e 50 61 72  ite3VtabBeginPar
2bbd0 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  se(Parse*, Token
2bbe0 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
2bbf0 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
2bc00 6c 69 74 65 33 56 74 61 62 46 69 6e 69 73 68 50  lite3VtabFinishP
2bc10 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  arse(Parse*, Tok
2bc20 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
2bc30 65 33 56 74 61 62 41 72 67 49 6e 69 74 28 50 61  e3VtabArgInit(Pa
2bc40 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
2bc50 74 65 33 56 74 61 62 41 72 67 45 78 74 65 6e 64  te3VtabArgExtend
2bc60 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29  (Parse*, Token*)
2bc70 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61  ;.int sqlite3Vta
2bc80 62 43 61 6c 6c 43 72 65 61 74 65 28 73 71 6c 69  bCallCreate(sqli
2bc90 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  te3*, int, const
2bca0 20 63 68 61 72 20 2a 2c 20 63 68 61 72 20 2a 2a   char *, char **
2bcb0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  );.int sqlite3Vt
2bcc0 61 62 43 61 6c 6c 43 6f 6e 6e 65 63 74 28 50 61  abCallConnect(Pa
2bcd0 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 69  rse*, Table*);.i
2bce0 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61  nt sqlite3VtabCa
2bcf0 6c 6c 44 65 73 74 72 6f 79 28 73 71 6c 69 74 65  llDestroy(sqlite
2bd00 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63  3*, int, const c
2bd10 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  har *);.int sqli
2bd20 74 65 33 56 74 61 62 42 65 67 69 6e 28 73 71 6c  te3VtabBegin(sql
2bd30 69 74 65 33 20 2a 2c 20 56 54 61 62 6c 65 20 2a  ite3 *, VTable *
2bd40 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69  );.FuncDef *sqli
2bd50 74 65 33 56 74 61 62 4f 76 65 72 6c 6f 61 64 46  te3VtabOverloadF
2bd60 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 20  unction(sqlite3 
2bd70 2a 2c 46 75 6e 63 44 65 66 2a 2c 20 69 6e 74 20  *,FuncDef*, int 
2bd80 6e 41 72 67 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  nArg, Expr*);.vo
2bd90 69 64 20 73 71 6c 69 74 65 33 49 6e 76 61 6c 69  id sqlite3Invali
2bda0 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65  dFunction(sqlite
2bdb0 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
2bdc0 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
2bdd0 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73  .sqlite3_int64 s
2bde0 71 6c 69 74 65 33 53 74 6d 74 43 75 72 72 65 6e  qlite3StmtCurren
2bdf0 74 54 69 6d 65 28 73 71 6c 69 74 65 33 5f 63 6f  tTime(sqlite3_co
2be00 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  ntext*);.int sql
2be10 69 74 65 33 56 64 62 65 50 61 72 61 6d 65 74 65  ite3VdbeParamete
2be20 72 49 6e 64 65 78 28 56 64 62 65 2a 2c 20 63 6f  rIndex(Vdbe*, co
2be30 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b  nst char*, int);
2be40 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 72 61 6e  .int sqlite3Tran
2be50 73 66 65 72 42 69 6e 64 69 6e 67 73 28 73 71 6c  sferBindings(sql
2be60 69 74 65 33 5f 73 74 6d 74 20 2a 2c 20 73 71 6c  ite3_stmt *, sql
2be70 69 74 65 33 5f 73 74 6d 74 20 2a 29 3b 0a 76 6f  ite3_stmt *);.vo
2be80 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  id sqlite3Parser
2be90 52 65 73 65 74 28 50 61 72 73 65 2a 29 3b 0a 69  Reset(Parse*);.i
2bea0 6e 74 20 73 71 6c 69 74 65 33 52 65 70 72 65 70  nt sqlite3Reprep
2beb0 61 72 65 28 56 64 62 65 2a 29 3b 0a 76 6f 69 64  are(Vdbe*);.void
2bec0 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
2bed0 43 68 65 63 6b 4c 65 6e 67 74 68 28 50 61 72 73  CheckLength(Pars
2bee0 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63  e*, ExprList*, c
2bef0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 43 6f 6c  onst char*);.Col
2bf00 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 42 69 6e  lSeq *sqlite3Bin
2bf10 61 72 79 43 6f 6d 70 61 72 65 43 6f 6c 6c 53 65  aryCompareCollSe
2bf20 71 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20  q(Parse *, Expr 
2bf30 2a 2c 20 45 78 70 72 20 2a 29 3b 0a 69 6e 74 20  *, Expr *);.int 
2bf40 73 71 6c 69 74 65 33 54 65 6d 70 49 6e 4d 65 6d  sqlite3TempInMem
2bf50 6f 72 79 28 63 6f 6e 73 74 20 73 71 6c 69 74 65  ory(const sqlite
2bf60 33 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20  3*);.const char 
2bf70 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d  *sqlite3JournalM
2bf80 6f 64 65 6e 61 6d 65 28 69 6e 74 29 3b 0a 23 69  odename(int);.#i
2bf90 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2bfa0 54 5f 57 41 4c 0a 20 20 69 6e 74 20 73 71 6c 69  T_WAL.  int sqli
2bfb0 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28 73 71  te3Checkpoint(sq
2bfc0 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74  lite3*, int, int
2bfd0 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 20  , int*, int*);. 
2bfe0 20 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 44   int sqlite3WalD
2bff0 65 66 61 75 6c 74 48 6f 6f 6b 28 76 6f 69 64 2a  efaultHook(void*
2c000 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  ,sqlite3*,const 
2c010 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64  char*,int);.#end
2c020 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
2c030 45 5f 4f 4d 49 54 5f 43 54 45 0a 20 20 57 69 74  E_OMIT_CTE.  Wit
2c040 68 20 2a 73 71 6c 69 74 65 33 57 69 74 68 41 64  h *sqlite3WithAd
2c050 64 28 50 61 72 73 65 2a 2c 57 69 74 68 2a 2c 54  d(Parse*,With*,T
2c060 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  oken*,ExprList*,
2c070 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f 69 64  Select*);.  void
2c080 20 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c 65   sqlite3WithDele
2c090 74 65 28 73 71 6c 69 74 65 33 2a 2c 57 69 74 68  te(sqlite3*,With
2c0a0 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
2c0b0 65 33 57 69 74 68 50 75 73 68 28 50 61 72 73 65  e3WithPush(Parse
2c0c0 2a 2c 20 57 69 74 68 2a 2c 20 75 38 29 3b 0a 23  *, With*, u8);.#
2c0d0 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 73 71 6c  else.#define sql
2c0e0 69 74 65 33 57 69 74 68 50 75 73 68 28 78 2c 79  ite3WithPush(x,y
2c0f0 2c 7a 29 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  ,z).#define sqli
2c100 74 65 33 57 69 74 68 44 65 6c 65 74 65 28 78 2c  te3WithDelete(x,
2c110 79 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 65  y).#endif../* De
2c120 63 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72 20 66  clarations for f
2c130 75 6e 63 74 69 6f 6e 73 20 69 6e 20 66 6b 65 79  unctions in fkey
2c140 2e 63 2e 20 41 6c 6c 20 6f 66 20 74 68 65 73 65  .c. All of these
2c150 20 61 72 65 20 72 65 70 6c 61 63 65 64 20 62 79   are replaced by
2c160 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72 6f 73  .** no-op macros
2c170 20 69 66 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e   if OMIT_FOREIGN
2c180 5f 4b 45 59 20 69 73 20 64 65 66 69 6e 65 64 2e  _KEY is defined.
2c190 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 6e 6f   In this case no
2c1a0 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20   foreign.** key 
2c1b0 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73  functionality is
2c1c0 20 61 76 61 69 6c 61 62 6c 65 2e 20 49 66 20 4f   available. If O
2c1d0 4d 49 54 5f 54 52 49 47 47 45 52 20 69 73 20 64  MIT_TRIGGER is d
2c1e0 65 66 69 6e 65 64 20 62 75 74 0a 2a 2a 20 4f 4d  efined but.** OM
2c1f0 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69  IT_FOREIGN_KEY i
2c200 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f 6d 65  s not, only some
2c210 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
2c220 73 20 61 72 65 20 6e 6f 2d 6f 70 65 64 2e 20 49  s are no-oped. I
2c230 6e 0a 2a 2a 20 74 68 69 73 20 63 61 73 65 20 66  n.** this case f
2c240 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 72 65 20  oreign keys are 
2c250 70 61 72 73 65 64 2c 20 62 75 74 20 6e 6f 20 6f  parsed, but no o
2c260 74 68 65 72 20 66 75 6e 63 74 69 6f 6e 61 6c 69  ther functionali
2c270 74 79 20 69 73 0a 2a 2a 20 70 72 6f 76 69 64 65  ty is.** provide
2c280 64 20 28 65 6e 66 6f 72 63 65 6d 65 6e 74 20 6f  d (enforcement o
2c290 66 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73  f FK constraints
2c2a0 20 72 65 71 75 69 72 65 73 20 74 68 65 20 74 72   requires the tr
2c2b0 69 67 67 65 72 73 20 73 75 62 2d 73 79 73 74 65  iggers sub-syste
2c2c0 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  m)..*/.#if !defi
2c2d0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
2c2e0 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26 26 20  FOREIGN_KEY) && 
2c2f0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
2c300 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 20 20  OMIT_TRIGGER).  
2c310 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 43 68  void sqlite3FkCh
2c320 65 63 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  eck(Parse*, Tabl
2c330 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
2c340 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  t*, int);.  void
2c350 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61   sqlite3FkDropTa
2c360 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ble(Parse*, SrcL
2c370 69 73 74 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  ist *, Table*);.
2c380 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b    void sqlite3Fk
2c390 41 63 74 69 6f 6e 73 28 50 61 72 73 65 2a 2c 20  Actions(Parse*, 
2c3a0 54 61 62 6c 65 2a 2c 20 45 78 70 72 4c 69 73 74  Table*, ExprList
2c3b0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e  *, int, int*, in
2c3c0 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  t);.  int sqlite
2c3d0 33 46 6b 52 65 71 75 69 72 65 64 28 50 61 72 73  3FkRequired(Pars
2c3e0 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2a  e*, Table*, int*
2c3f0 2c 20 69 6e 74 29 3b 0a 20 20 75 33 32 20 73 71  , int);.  u32 sq
2c400 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 50  lite3FkOldmask(P
2c410 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  arse*, Table*);.
2c420 20 20 46 4b 65 79 20 2a 73 71 6c 69 74 65 33 46    FKey *sqlite3F
2c430 6b 52 65 66 65 72 65 6e 63 65 73 28 54 61 62 6c  kReferences(Tabl
2c440 65 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  e *);.#else.  #d
2c450 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 41  efine sqlite3FkA
2c460 63 74 69 6f 6e 73 28 61 2c 62 2c 63 2c 64 2c 65  ctions(a,b,c,d,e
2c470 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,f).  #define sq
2c480 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 61 2c 62  lite3FkCheck(a,b
2c490 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65 66  ,c,d,e,f).  #def
2c4a0 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 72 6f  ine sqlite3FkDro
2c4b0 70 54 61 62 6c 65 28 61 2c 62 2c 63 29 0a 20 20  pTable(a,b,c).  
2c4c0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
2c4d0 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62 29 20 20 20  kOldmask(a,b)   
2c4e0 20 20 20 20 20 20 30 0a 20 20 23 64 65 66 69 6e        0.  #defin
2c4f0 65 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69  e sqlite3FkRequi
2c500 72 65 64 28 61 2c 62 2c 63 2c 64 29 20 20 20 20  red(a,b,c,d)    
2c510 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  0.  #define sqli
2c520 74 65 33 46 6b 52 65 66 65 72 65 6e 63 65 73 28  te3FkReferences(
2c530 61 29 20 20 20 20 20 20 20 20 30 0a 23 65 6e 64  a)        0.#end
2c540 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
2c550 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
2c560 45 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  EY.  void sqlite
2c570 33 46 6b 44 65 6c 65 74 65 28 73 71 6c 69 74 65  3FkDelete(sqlite
2c580 33 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20  3 *, Table*);.  
2c590 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63  int sqlite3FkLoc
2c5a0 61 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c  ateIndex(Parse*,
2c5b0 54 61 62 6c 65 2a 2c 46 4b 65 79 2a 2c 49 6e 64  Table*,FKey*,Ind
2c5c0 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a 23 65 6c  ex**,int**);.#el
2c5d0 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
2c5e0 69 74 65 33 46 6b 44 65 6c 65 74 65 28 61 2c 62  ite3FkDelete(a,b
2c5f0 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
2c600 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78  te3FkLocateIndex
2c610 28 61 2c 62 2c 63 2c 64 2c 65 29 0a 23 65 6e 64  (a,b,c,d,e).#end
2c620 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61 69 6c  if.../*.** Avail
2c630 61 62 6c 65 20 66 61 75 6c 74 20 69 6e 6a 65 63  able fault injec
2c640 74 6f 72 73 2e 20 20 53 68 6f 75 6c 64 20 62 65  tors.  Should be
2c650 20 6e 75 6d 62 65 72 65 64 20 62 65 67 69 6e 6e   numbered beginn
2c660 69 6e 67 20 77 69 74 68 20 30 2e 0a 2a 2f 0a 23  ing with 0..*/.#
2c670 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 41  define SQLITE_FA
2c680 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d 41 4c 4c  ULTINJECTOR_MALL
2c690 4f 43 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65  OC     0.#define
2c6a0 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a   SQLITE_FAULTINJ
2c6b0 45 43 54 4f 52 5f 43 4f 55 4e 54 20 20 20 20 20  ECTOR_COUNT     
2c6c0 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e   1../*.** The in
2c6d0 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20 63  terface to the c
2c6e0 6f 64 65 20 69 6e 20 66 61 75 6c 74 2e 63 20 75  ode in fault.c u
2c6f0 73 65 64 20 66 6f 72 20 69 64 65 6e 74 69 66 79  sed for identify
2c700 69 6e 67 20 22 62 65 6e 69 67 6e 22 0a 2a 2a 20  ing "benign".** 
2c710 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 73 2e  malloc failures.
2c720 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 20 70 72   This is only pr
2c730 65 73 65 6e 74 20 69 66 20 53 51 4c 49 54 45 5f  esent if SQLITE_
2c740 55 4e 54 45 53 54 41 42 4c 45 0a 2a 2a 20 69 73  UNTESTABLE.** is
2c750 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e 0a 2a 2f   not defined..*/
2c760 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2c770 55 4e 54 45 53 54 41 42 4c 45 0a 20 20 76 6f 69  UNTESTABLE.  voi
2c780 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65  d sqlite3BeginBe
2c790 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29  nignMalloc(void)
2c7a0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2c7b0 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  EndBenignMalloc(
2c7c0 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 20 20 23  void);.#else.  #
2c7d0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 42 65  define sqlite3Be
2c7e0 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  ginBenignMalloc(
2c7f0 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
2c800 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c  te3EndBenignMall
2c810 6f 63 28 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  oc().#endif../*.
2c820 2a 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75 72  ** Allowed retur
2c830 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73 71  n values from sq
2c840 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78  lite3FindInIndex
2c850 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  ().*/.#define IN
2c860 5f 49 4e 44 45 58 5f 52 4f 57 49 44 20 20 20 20  _INDEX_ROWID    
2c870 20 20 20 20 31 20 20 20 2f 2a 20 53 65 61 72 63      1   /* Searc
2c880 68 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74  h the rowid of t
2c890 68 65 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66  he table */.#def
2c8a0 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 45 50 48  ine IN_INDEX_EPH
2c8b0 20 20 20 20 20 20 20 20 20 20 32 20 20 20 2f 2a            2   /*
2c8c0 20 53 65 61 72 63 68 20 61 6e 20 65 70 68 65 6d   Search an ephem
2c8d0 65 72 61 6c 20 62 2d 74 72 65 65 20 2a 2f 0a 23  eral b-tree */.#
2c8e0 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
2c8f0 49 4e 44 45 58 5f 41 53 43 20 20 20 20 33 20 20  INDEX_ASC    3  
2c900 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69 6e 64   /* Existing ind
2c910 65 78 20 41 53 43 45 4e 44 49 4e 47 20 2a 2f 0a  ex ASCENDING */.
2c920 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
2c930 5f 49 4e 44 45 58 5f 44 45 53 43 20 20 20 34 20  _INDEX_DESC   4 
2c940 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69 6e    /* Existing in
2c950 64 65 78 20 44 45 53 43 45 4e 44 49 4e 47 20 2a  dex DESCENDING *
2c960 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
2c970 45 58 5f 4e 4f 4f 50 20 20 20 20 20 20 20 20 20  EX_NOOP         
2c980 35 20 20 20 2f 2a 20 4e 6f 20 74 61 62 6c 65 20  5   /* No table 
2c990 61 76 61 69 6c 61 62 6c 65 2e 20 55 73 65 20 63  available. Use c
2c9a0 6f 6d 70 61 72 69 73 6f 6e 73 20 2a 2f 0a 2f 2a  omparisons */./*
2c9b0 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 66 6c 61 67  .** Allowed flag
2c9c0 73 20 66 6f 72 20 74 68 65 20 33 72 64 20 70 61  s for the 3rd pa
2c9d0 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74  rameter to sqlit
2c9e0 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 29 2e  e3FindInIndex().
2c9f0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49  .*/.#define IN_I
2ca00 4e 44 45 58 5f 4e 4f 4f 50 5f 4f 4b 20 20 20 20  NDEX_NOOP_OK    
2ca10 20 30 78 30 30 30 31 20 20 2f 2a 20 4f 4b 20 74   0x0001  /* OK t
2ca20 6f 20 72 65 74 75 72 6e 20 49 4e 5f 49 4e 44 45  o return IN_INDE
2ca30 58 5f 4e 4f 4f 50 20 2a 2f 0a 23 64 65 66 69 6e  X_NOOP */.#defin
2ca40 65 20 49 4e 5f 49 4e 44 45 58 5f 4d 45 4d 42 45  e IN_INDEX_MEMBE
2ca50 52 53 48 49 50 20 20 30 78 30 30 30 32 20 20 2f  RSHIP  0x0002  /
2ca60 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75 73  * IN operator us
2ca70 65 64 20 66 6f 72 20 6d 65 6d 62 65 72 73 68 69  ed for membershi
2ca80 70 20 74 65 73 74 20 2a 2f 0a 23 64 65 66 69 6e  p test */.#defin
2ca90 65 20 49 4e 5f 49 4e 44 45 58 5f 4c 4f 4f 50 20  e IN_INDEX_LOOP 
2caa0 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f         0x0004  /
2cab0 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75 73  * IN operator us
2cac0 65 64 20 61 73 20 61 20 6c 6f 6f 70 20 2a 2f 0a  ed as a loop */.
2cad0 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 49  int sqlite3FindI
2cae0 6e 49 6e 64 65 78 28 50 61 72 73 65 20 2a 2c 20  nIndex(Parse *, 
2caf0 45 78 70 72 20 2a 2c 20 75 33 32 2c 20 69 6e 74  Expr *, u32, int
2cb00 2a 2c 20 69 6e 74 2a 29 3b 0a 0a 69 6e 74 20 73  *, int*);..int s
2cb10 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4f 70 65  qlite3JournalOpe
2cb20 6e 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c  n(sqlite3_vfs *,
2cb30 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 73   const char *, s
2cb40 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 2c 20 69  qlite3_file *, i
2cb50 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  nt, int);.int sq
2cb60 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65  lite3JournalSize
2cb70 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 29 3b  (sqlite3_vfs *);
2cb80 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
2cb90 4e 41 42 4c 45 5f 41 54 4f 4d 49 43 5f 57 52 49  NABLE_ATOMIC_WRI
2cba0 54 45 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  TE.  int sqlite3
2cbb0 4a 6f 75 72 6e 61 6c 43 72 65 61 74 65 28 73 71  JournalCreate(sq
2cbc0 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 23  lite3_file *);.#
2cbd0 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74  endif..int sqlit
2cbe0 65 33 4a 6f 75 72 6e 61 6c 49 73 49 6e 4d 65 6d  e3JournalIsInMem
2cbf0 6f 72 79 28 73 71 6c 69 74 65 33 5f 66 69 6c 65  ory(sqlite3_file
2cc00 20 2a 70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   *p);.void sqlit
2cc10 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 4f 70 65 6e  e3MemJournalOpen
2cc20 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29  (sqlite3_file *)
2cc30 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  ;..void sqlite3E
2cc40 78 70 72 53 65 74 48 65 69 67 68 74 41 6e 64 46  xprSetHeightAndF
2cc50 6c 61 67 73 28 50 61 72 73 65 20 2a 70 50 61 72  lags(Parse *pPar
2cc60 73 65 2c 20 45 78 70 72 20 2a 70 29 3b 0a 23 69  se, Expr *p);.#i
2cc70 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50  f SQLITE_MAX_EXP
2cc80 52 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20  R_DEPTH>0.  int 
2cc90 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70  sqlite3SelectExp
2cca0 72 48 65 69 67 68 74 28 53 65 6c 65 63 74 20 2a  rHeight(Select *
2ccb0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
2ccc0 45 78 70 72 43 68 65 63 6b 48 65 69 67 68 74 28  ExprCheckHeight(
2ccd0 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 65  Parse*, int);.#e
2cce0 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
2ccf0 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 72 48  lite3SelectExprH
2cd00 65 69 67 68 74 28 78 29 20 30 0a 20 20 23 64 65  eight(x) 0.  #de
2cd10 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72  fine sqlite3Expr
2cd20 43 68 65 63 6b 48 65 69 67 68 74 28 78 2c 79 29  CheckHeight(x,y)
2cd30 0a 23 65 6e 64 69 66 0a 0a 75 33 32 20 73 71 6c  .#endif..u32 sql
2cd40 69 74 65 33 47 65 74 34 62 79 74 65 28 63 6f 6e  ite3Get4byte(con
2cd50 73 74 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71  st u8*);.void sq
2cd60 6c 69 74 65 33 50 75 74 34 62 79 74 65 28 75 38  lite3Put4byte(u8
2cd70 2a 2c 20 75 33 32 29 3b 0a 0a 23 69 66 64 65 66  *, u32);..#ifdef
2cd80 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55   SQLITE_ENABLE_U
2cd90 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 76  NLOCK_NOTIFY.  v
2cda0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  oid sqlite3Conne
2cdb0 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 73 71 6c  ctionBlocked(sql
2cdc0 69 74 65 33 20 2a 2c 20 73 71 6c 69 74 65 33 20  ite3 *, sqlite3 
2cdd0 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
2cde0 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f  e3ConnectionUnlo
2cdf0 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62  cked(sqlite3 *db
2ce00 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2ce10 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65  3ConnectionClose
2ce20 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a  d(sqlite3 *db);.
2ce30 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
2ce40 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
2ce50 6e 42 6c 6f 63 6b 65 64 28 78 2c 79 29 0a 20 20  nBlocked(x,y).  
2ce60 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43  #define sqlite3C
2ce70 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65  onnectionUnlocke
2ce80 64 28 78 29 0a 20 20 23 64 65 66 69 6e 65 20 73  d(x).  #define s
2ce90 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
2cea0 43 6c 6f 73 65 64 28 78 29 0a 23 65 6e 64 69 66  Closed(x).#endif
2ceb0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
2cec0 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c  DEBUG.  void sql
2ced0 69 74 65 33 50 61 72 73 65 72 54 72 61 63 65 28  ite3ParserTrace(
2cee0 46 49 4c 45 2a 2c 20 63 68 61 72 20 2a 29 3b 0a  FILE*, char *);.
2cef0 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66  #endif../*.** If
2cf00 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42   the SQLITE_ENAB
2cf10 4c 45 20 49 4f 54 52 41 43 45 20 65 78 69 73 74  LE IOTRACE exist
2cf20 73 20 74 68 65 6e 20 74 68 65 20 67 6c 6f 62 61  s then the globa
2cf30 6c 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 73 71  l variable.** sq
2cf40 6c 69 74 65 33 49 6f 54 72 61 63 65 20 69 73 20  lite3IoTrace is 
2cf50 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 70  a pointer to a p
2cf60 72 69 6e 74 66 2d 6c 69 6b 65 20 72 6f 75 74 69  rintf-like routi
2cf70 6e 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 70 72  ne used to.** pr
2cf80 69 6e 74 20 49 2f 4f 20 74 72 61 63 69 6e 67 20  int I/O tracing 
2cf90 6d 65 73 73 61 67 65 73 2e 0a 2a 2f 0a 23 69 66  messages..*/.#if
2cfa0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
2cfb0 45 5f 49 4f 54 52 41 43 45 0a 23 20 64 65 66 69  E_IOTRACE.# defi
2cfc0 6e 65 20 49 4f 54 52 41 43 45 28 41 29 20 20 69  ne IOTRACE(A)  i
2cfd0 66 28 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63  f( sqlite3IoTrac
2cfe0 65 20 29 7b 20 73 71 6c 69 74 65 33 49 6f 54 72  e ){ sqlite3IoTr
2cff0 61 63 65 20 41 3b 20 7d 0a 20 20 76 6f 69 64 20  ace A; }.  void 
2d000 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61  sqlite3VdbeIOTra
2d010 63 65 53 71 6c 28 56 64 62 65 2a 29 3b 0a 53 51  ceSql(Vdbe*);.SQ
2d020 4c 49 54 45 5f 41 50 49 20 53 51 4c 49 54 45 5f  LITE_API SQLITE_
2d030 45 58 54 45 52 4e 20 76 6f 69 64 20 28 53 51 4c  EXTERN void (SQL
2d040 49 54 45 5f 43 44 45 43 4c 20 2a 73 71 6c 69 74  ITE_CDECL *sqlit
2d050 65 33 49 6f 54 72 61 63 65 29 28 63 6f 6e 73 74  e3IoTrace)(const
2d060 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c   char*,...);.#el
2d070 73 65 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52  se.# define IOTR
2d080 41 43 45 28 41 29 0a 23 20 64 65 66 69 6e 65 20  ACE(A).# define 
2d090 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61  sqlite3VdbeIOTra
2d0a0 63 65 53 71 6c 28 58 29 0a 23 65 6e 64 69 66 0a  ceSql(X).#endif.
2d0b0 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 72 6f 75  ./*.** These rou
2d0c0 74 69 6e 65 73 20 61 72 65 20 61 76 61 69 6c 61  tines are availa
2d0d0 62 6c 65 20 66 6f 72 20 74 68 65 20 6d 65 6d 32  ble for the mem2
2d0e0 2e 63 20 64 65 62 75 67 67 69 6e 67 20 6d 65 6d  .c debugging mem
2d0f0 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a  ory allocator.**
2d100 20 6f 6e 6c 79 2e 20 20 54 68 65 79 20 61 72 65   only.  They are
2d110 20 75 73 65 64 20 74 6f 20 76 65 72 69 66 79 20   used to verify 
2d120 74 68 61 74 20 64 69 66 66 65 72 65 6e 74 20 22  that different "
2d130 74 79 70 65 73 22 20 6f 66 20 6d 65 6d 6f 72 79  types" of memory
2d140 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  .** allocations 
2d150 61 72 65 20 70 72 6f 70 65 72 6c 79 20 74 72 61  are properly tra
2d160 63 6b 65 64 20 62 79 20 74 68 65 20 73 79 73 74  cked by the syst
2d170 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65  em..**.** sqlite
2d180 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65  3MemdebugSetType
2d190 28 29 20 73 65 74 73 20 74 68 65 20 22 74 79 70  () sets the "typ
2d1a0 65 22 20 6f 66 20 61 6e 20 61 6c 6c 6f 63 61 74  e" of an allocat
2d1b0 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a 2a 2a  ion to one of.**
2d1c0 20 74 68 65 20 4d 45 4d 54 59 50 45 5f 2a 20 6d   the MEMTYPE_* m
2d1d0 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20 62 65  acros defined be
2d1e0 6c 6f 77 2e 20 20 54 68 65 20 74 79 70 65 20 6d  low.  The type m
2d1f0 75 73 74 20 62 65 20 61 20 62 69 74 6d 61 73 6b  ust be a bitmask
2d200 20 77 69 74 68 0a 2a 2a 20 61 20 73 69 6e 67 6c   with.** a singl
2d210 65 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a  e bit set..**.**
2d220 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
2d230 48 61 73 54 79 70 65 28 29 20 72 65 74 75 72 6e  HasType() return
2d240 73 20 74 72 75 65 20 69 66 20 61 6e 79 20 6f 66  s true if any of
2d250 20 74 68 65 20 62 69 74 73 20 69 6e 20 69 74 73   the bits in its
2d260 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d   second.** argum
2d270 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74 79  ent match the ty
2d280 70 65 20 73 65 74 20 62 79 20 74 68 65 20 70 72  pe set by the pr
2d290 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65  evious sqlite3Me
2d2a0 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29 2e  mdebugSetType().
2d2b0 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  .** sqlite3Memde
2d2c0 62 75 67 48 61 73 54 79 70 65 28 29 20 69 73 20  bugHasType() is 
2d2d0 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 75 73 65  intended for use
2d2e0 20 69 6e 73 69 64 65 20 61 73 73 65 72 74 28 29   inside assert()
2d2f0 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a   statements..**.
2d300 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ** sqlite3Memdeb
2d310 75 67 4e 6f 54 79 70 65 28 29 20 72 65 74 75 72  ugNoType() retur
2d320 6e 73 20 74 72 75 65 20 69 66 20 6e 6f 6e 65 20  ns true if none 
2d330 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e 20 69  of the bits in i
2d340 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67  ts second.** arg
2d350 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20  ument match the 
2d360 74 79 70 65 20 73 65 74 20 62 79 20 74 68 65 20  type set by the 
2d370 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33  previous sqlite3
2d380 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
2d390 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61 70 73  )..**.** Perhaps
2d3a0 20 74 68 65 20 6d 6f 73 74 20 69 6d 70 6f 72 74   the most import
2d3b0 61 6e 74 20 70 6f 69 6e 74 20 69 73 20 74 68 65  ant point is the
2d3c0 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77   difference betw
2d3d0 65 65 6e 20 4d 45 4d 54 59 50 45 5f 48 45 41 50  een MEMTYPE_HEAP
2d3e0 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54 59 50 45 5f  .** and MEMTYPE_
2d3f0 4c 4f 4f 4b 41 53 49 44 45 2e 20 20 49 66 20 61  LOOKASIDE.  If a
2d400 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 73 20  n allocation is 
2d410 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44  MEMTYPE_LOOKASID
2d420 45 2c 20 74 68 61 74 20 6d 65 61 6e 73 0a 2a 2a  E, that means.**
2d430 20 69 74 20 6d 69 67 68 74 20 68 61 76 65 20 62   it might have b
2d440 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20 62 79  een allocated by
2d450 20 6c 6f 6f 6b 61 73 69 64 65 2c 20 65 78 63 65   lookaside, exce
2d460 70 74 20 74 68 65 20 61 6c 6c 6f 63 61 74 69 6f  pt the allocatio
2d470 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c 61 72  n was.** too lar
2d480 67 65 20 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 20  ge or lookaside 
2d490 77 61 73 20 61 6c 72 65 61 64 79 20 66 75 6c 6c  was already full
2d4a0 2e 20 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61  .  It is importa
2d4b0 6e 74 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20  nt to verify.** 
2d4c0 74 68 61 74 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  that allocations
2d4d0 20 74 68 61 74 20 6d 69 67 68 74 20 68 61 76 65   that might have
2d4e0 20 62 65 65 6e 20 73 61 74 69 73 66 69 65 64 20   been satisfied 
2d4f0 62 79 20 6c 6f 6f 6b 61 73 69 64 65 20 61 72 65  by lookaside are
2d500 20 6e 6f 74 0a 2a 2a 20 70 61 73 73 65 64 20 62   not.** passed b
2d510 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61  ack to non-looka
2d520 73 69 64 65 20 66 72 65 65 28 29 20 72 6f 75 74  side free() rout
2d530 69 6e 65 73 2e 20 20 41 73 73 65 72 74 73 20 73  ines.  Asserts s
2d540 75 63 68 20 61 73 20 74 68 65 0a 2a 2a 20 65 78  uch as the.** ex
2d550 61 6d 70 6c 65 20 61 62 6f 76 65 20 61 72 65 20  ample above are 
2d560 70 6c 61 63 65 64 20 6f 6e 20 74 68 65 20 6e 6f  placed on the no
2d570 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65  n-lookaside free
2d580 28 29 20 72 6f 75 74 69 6e 65 73 20 74 6f 20 76  () routines to v
2d590 65 72 69 66 79 0a 2a 2a 20 74 68 69 73 20 63 6f  erify.** this co
2d5a0 6e 73 74 72 61 69 6e 74 2e 0a 2a 2a 0a 2a 2a 20  nstraint..**.** 
2d5b0 41 6c 6c 20 6f 66 20 74 68 69 73 20 69 73 20 6e  All of this is n
2d5c0 6f 2d 6f 70 20 66 6f 72 20 61 20 70 72 6f 64 75  o-op for a produ
2d5d0 63 74 69 6f 6e 20 62 75 69 6c 64 2e 20 20 49 74  ction build.  It
2d5e0 20 6f 6e 6c 79 20 63 6f 6d 65 73 20 69 6e 74 6f   only comes into
2d5f0 0a 2a 2a 20 70 6c 61 79 20 77 68 65 6e 20 74 68  .** play when th
2d600 65 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  e SQLITE_MEMDEBU
2d610 47 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  G compile-time o
2d620 70 74 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 2a  ption is used..*
2d630 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
2d640 4d 45 4d 44 45 42 55 47 0a 20 20 76 6f 69 64 20  MEMDEBUG.  void 
2d650 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
2d660 65 74 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29  etType(void*,u8)
2d670 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
2d680 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 76  emdebugHasType(v
2d690 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20  oid*,u8);.  int 
2d6a0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e  sqlite3MemdebugN
2d6b0 6f 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b  oType(void*,u8);
2d6c0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
2d6d0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
2d6e0 65 74 54 79 70 65 28 58 2c 59 29 20 20 2f 2a 20  etType(X,Y)  /* 
2d6f0 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65 66 69 6e  no-op */.# defin
2d700 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  e sqlite3Memdebu
2d710 67 48 61 73 54 79 70 65 28 58 2c 59 29 20 20 31  gHasType(X,Y)  1
2d720 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2d730 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28  3MemdebugNoType(
2d740 58 2c 59 29 20 20 20 31 0a 23 65 6e 64 69 66 0a  X,Y)   1.#endif.
2d750 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f  #define MEMTYPE_
2d760 48 45 41 50 20 20 20 20 20 20 20 30 78 30 31 20  HEAP       0x01 
2d770 20 2f 2a 20 47 65 6e 65 72 61 6c 20 68 65 61 70   /* General heap
2d780 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a   allocations */.
2d790 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f  #define MEMTYPE_
2d7a0 4c 4f 4f 4b 41 53 49 44 45 20 20 30 78 30 32 20  LOOKASIDE  0x02 
2d7b0 20 2f 2a 20 48 65 61 70 20 74 68 61 74 20 6d 69   /* Heap that mi
2d7c0 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 6c 6f  ght have been lo
2d7d0 6f 6b 61 73 69 64 65 20 2a 2f 0a 23 64 65 66 69  okaside */.#defi
2d7e0 6e 65 20 4d 45 4d 54 59 50 45 5f 53 43 52 41 54  ne MEMTYPE_SCRAT
2d7f0 43 48 20 20 20 20 30 78 30 34 20 20 2f 2a 20 53  CH    0x04  /* S
2d800 63 72 61 74 63 68 20 61 6c 6c 6f 63 61 74 69 6f  cratch allocatio
2d810 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45  ns */.#define ME
2d820 4d 54 59 50 45 5f 50 43 41 43 48 45 20 20 20 20  MTYPE_PCACHE    
2d830 20 30 78 30 38 20 20 2f 2a 20 50 61 67 65 20 63   0x08  /* Page c
2d840 61 63 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  ache allocations
2d850 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 72 65 61   */../*.** Threa
2d860 64 69 6e 67 20 69 6e 74 65 72 66 61 63 65 0a 2a  ding interface.*
2d870 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  /.#if SQLITE_MAX
2d880 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 3e  _WORKER_THREADS>
2d890 30 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68 72  0.int sqlite3Thr
2d8a0 65 61 64 43 72 65 61 74 65 28 53 51 4c 69 74 65  eadCreate(SQLite
2d8b0 54 68 72 65 61 64 2a 2a 2c 76 6f 69 64 2a 28 2a  Thread**,void*(*
2d8c0 29 28 76 6f 69 64 2a 29 2c 76 6f 69 64 2a 29 3b  )(void*),void*);
2d8d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68 72 65  .int sqlite3Thre
2d8e0 61 64 4a 6f 69 6e 28 53 51 4c 69 74 65 54 68 72  adJoin(SQLiteThr
2d8f0 65 61 64 2a 2c 20 76 6f 69 64 2a 2a 29 3b 0a 23  ead*, void**);.#
2d900 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e  endif..#if defin
2d910 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
2d920 5f 44 42 53 54 41 54 5f 56 54 41 42 29 20 7c 7c  _DBSTAT_VTAB) ||
2d930 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2d940 54 45 53 54 29 0a 69 6e 74 20 73 71 6c 69 74 65  TEST).int sqlite
2d950 33 44 62 73 74 61 74 52 65 67 69 73 74 65 72 28  3DbstatRegister(
2d960 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6e 64 69  sqlite3*);.#endi
2d970 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  f..int sqlite3Ex
2d980 70 72 56 65 63 74 6f 72 53 69 7a 65 28 45 78 70  prVectorSize(Exp
2d990 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20 73  r *pExpr);.int s
2d9a0 71 6c 69 74 65 33 45 78 70 72 49 73 56 65 63 74  qlite3ExprIsVect
2d9b0 6f 72 28 45 78 70 72 20 2a 70 45 78 70 72 29 3b  or(Expr *pExpr);
2d9c0 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 56 65  .Expr *sqlite3Ve
2d9d0 63 74 6f 72 46 69 65 6c 64 53 75 62 65 78 70 72  ctorFieldSubexpr
2d9e0 28 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 45 78  (Expr*, int);.Ex
2d9f0 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 46  pr *sqlite3ExprF
2da00 6f 72 56 65 63 74 6f 72 46 69 65 6c 64 28 50 61  orVectorField(Pa
2da10 72 73 65 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b  rse*,Expr*,int);
2da20 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 65 63  .void sqlite3Vec
2da30 74 6f 72 45 72 72 6f 72 4d 73 67 28 50 61 72 73  torErrorMsg(Pars
2da40 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 0a 23 65 6e  e*, Expr*);..#en
2da50 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 49 4e 54  dif /* SQLITEINT
2da60 5f 48 20 2a 2f 0a                                _H */.