/ Hex Artifact Content
Login

Artifact 9a283ecf57bb81e0040d243d56e91beae76f6d5762b3ac33c7f3ec6076a71d99:


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 20 64 65 66 69 6e 65 64  d.*/.#if defined
1a40: 28 5f 48 41 56 45 5f 53 51 4c 49 54 45 5f 43 4f  (_HAVE_SQLITE_CO
1a50: 4e 46 49 47 5f 48 29 20 26 26 20 21 64 65 66 69  NFIG_H) && !defi
1a60: 6e 65 64 28 53 51 4c 49 54 45 43 4f 4e 46 49 47  ned(SQLITECONFIG
1a70: 5f 48 29 0a 23 69 6e 63 6c 75 64 65 20 22 63 6f  _H).#include "co
1a80: 6e 66 69 67 2e 68 22 0a 23 64 65 66 69 6e 65 20  nfig.h".#define 
1a90: 53 51 4c 49 54 45 43 4f 4e 46 49 47 5f 48 20 31  SQLITECONFIG_H 1
1aa0: 0a 23 65 6e 64 69 66 0a 0a 23 69 6e 63 6c 75 64  .#endif..#includ
1ab0: 65 20 22 73 71 6c 69 74 65 4c 69 6d 69 74 2e 68  e "sqliteLimit.h
1ac0: 22 0a 0a 2f 2a 20 44 69 73 61 62 6c 65 20 6e 75  "../* Disable nu
1ad0: 69 73 61 6e 63 65 20 77 61 72 6e 69 6e 67 73 20  isance warnings 
1ae0: 6f 6e 20 42 6f 72 6c 61 6e 64 20 63 6f 6d 70 69  on Borland compi
1af0: 6c 65 72 73 20 2a 2f 0a 23 69 66 20 64 65 66 69  lers */.#if defi
1b00: 6e 65 64 28 5f 5f 42 4f 52 4c 41 4e 44 43 5f 5f  ned(__BORLANDC__
1b10: 29 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d  ).#pragma warn -
1b20: 72 63 68 20 2f 2a 20 75 6e 72 65 61 63 68 61 62  rch /* unreachab
1b30: 6c 65 20 63 6f 64 65 20 2a 2f 0a 23 70 72 61 67  le code */.#prag
1b40: 6d 61 20 77 61 72 6e 20 2d 63 63 63 20 2f 2a 20  ma warn -ccc /* 
1b50: 43 6f 6e 64 69 74 69 6f 6e 20 69 73 20 61 6c 77  Condition is alw
1b60: 61 79 73 20 74 72 75 65 20 6f 72 20 66 61 6c 73  ays true or fals
1b70: 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72  e */.#pragma war
1b80: 6e 20 2d 61 75 73 20 2f 2a 20 41 73 73 69 67 6e  n -aus /* Assign
1b90: 65 64 20 76 61 6c 75 65 20 69 73 20 6e 65 76 65  ed value is neve
1ba0: 72 20 75 73 65 64 20 2a 2f 0a 23 70 72 61 67 6d  r used */.#pragm
1bb0: 61 20 77 61 72 6e 20 2d 63 73 75 20 2f 2a 20 43  a warn -csu /* C
1bc0: 6f 6d 70 61 72 69 6e 67 20 73 69 67 6e 65 64 20  omparing signed 
1bd0: 61 6e 64 20 75 6e 73 69 67 6e 65 64 20 2a 2f 0a  and unsigned */.
1be0: 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 73 70  #pragma warn -sp
1bf0: 61 20 2f 2a 20 53 75 73 70 69 63 69 6f 75 73 20  a /* Suspicious 
1c00: 70 6f 69 6e 74 65 72 20 61 72 69 74 68 6d 65 74  pointer arithmet
1c10: 69 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ic */.#endif../*
1c20: 0a 2a 2a 20 49 6e 63 6c 75 64 65 20 73 74 61 6e  .** Include stan
1c30: 64 61 72 64 20 68 65 61 64 65 72 20 66 69 6c 65  dard header file
1c40: 73 20 61 73 20 6e 65 63 65 73 73 61 72 79 0a 2a  s as necessary.*
1c50: 2f 0a 23 69 66 64 65 66 20 48 41 56 45 5f 53 54  /.#ifdef HAVE_ST
1c60: 44 49 4e 54 5f 48 0a 23 69 6e 63 6c 75 64 65 20  DINT_H.#include 
1c70: 3c 73 74 64 69 6e 74 2e 68 3e 0a 23 65 6e 64 69  <stdint.h>.#endi
1c80: 66 0a 23 69 66 64 65 66 20 48 41 56 45 5f 49 4e  f.#ifdef HAVE_IN
1c90: 54 54 59 50 45 53 5f 48 0a 23 69 6e 63 6c 75 64  TTYPES_H.#includ
1ca0: 65 20 3c 69 6e 74 74 79 70 65 73 2e 68 3e 0a 23  e <inttypes.h>.#
1cb0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
1cc0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
1cd0: 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 63 61  s are used to ca
1ce0: 73 74 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 69  st pointers to i
1cf0: 6e 74 65 67 65 72 73 20 61 6e 64 0a 2a 2a 20 69  ntegers and.** i
1d00: 6e 74 65 67 65 72 73 20 74 6f 20 70 6f 69 6e 74  ntegers to point
1d10: 65 72 73 2e 20 20 54 68 65 20 77 61 79 20 79 6f  ers.  The way yo
1d20: 75 20 64 6f 20 74 68 69 73 20 76 61 72 69 65 73  u do this varies
1d30: 20 66 72 6f 6d 20 6f 6e 65 20 63 6f 6d 70 69 6c   from one compil
1d40: 65 72 0a 2a 2a 20 74 6f 20 74 68 65 20 6e 65 78  er.** to the nex
1d50: 74 2c 20 73 6f 20 77 65 20 68 61 76 65 20 64 65  t, so we have de
1d60: 76 65 6c 6f 70 65 64 20 74 68 65 20 66 6f 6c 6c  veloped the foll
1d70: 6f 77 69 6e 67 20 73 65 74 20 6f 66 20 23 69 66  owing set of #if
1d80: 20 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a 20 74   statements.** t
1d90: 6f 20 67 65 6e 65 72 61 74 65 20 61 70 70 72 6f  o generate appro
1da0: 70 72 69 61 74 65 20 6d 61 63 72 6f 73 20 66 6f  priate macros fo
1db0: 72 20 61 20 77 69 64 65 20 72 61 6e 67 65 20 6f  r a wide range o
1dc0: 66 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2a 0a  f compilers..**.
1dd0: 2a 2a 20 54 68 65 20 63 6f 72 72 65 63 74 20 22  ** The correct "
1de0: 41 4e 53 49 22 20 77 61 79 20 74 6f 20 64 6f 20  ANSI" way to do 
1df0: 74 68 69 73 20 69 73 20 74 6f 20 75 73 65 20 74  this is to use t
1e00: 68 65 20 69 6e 74 70 74 72 5f 74 20 74 79 70 65  he intptr_t type
1e10: 2e 0a 2a 2a 20 55 6e 66 6f 72 74 75 6e 61 74 65  ..** Unfortunate
1e20: 6c 79 2c 20 74 68 61 74 20 74 79 70 65 64 65 66  ly, that typedef
1e30: 20 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c   is not availabl
1e40: 65 20 6f 6e 20 61 6c 6c 20 63 6f 6d 70 69 6c 65  e on all compile
1e50: 72 73 2c 20 6f 72 0a 2a 2a 20 69 66 20 69 74 20  rs, or.** if it 
1e60: 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 20 69 74  is available, it
1e70: 20 72 65 71 75 69 72 65 73 20 61 6e 20 23 69 6e   requires an #in
1e80: 63 6c 75 64 65 20 6f 66 20 73 70 65 63 69 66 69  clude of specifi
1e90: 63 20 68 65 61 64 65 72 73 0a 2a 2a 20 74 68 61  c headers.** tha
1ea0: 74 20 76 61 72 79 20 66 72 6f 6d 20 6f 6e 65 20  t vary from one 
1eb0: 6d 61 63 68 69 6e 65 20 74 6f 20 74 68 65 20 6e  machine to the n
1ec0: 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65  ext..**.** Ticke
1ed0: 74 20 23 33 38 36 30 3a 20 20 54 68 65 20 6c 6c  t #3860:  The ll
1ee0: 76 6d 2d 67 63 63 2d 34 2e 32 20 63 6f 6d 70 69  vm-gcc-4.2 compi
1ef0: 6c 65 72 20 66 72 6f 6d 20 41 70 70 6c 65 20 63  ler from Apple c
1f00: 68 6f 6b 65 73 20 6f 6e 0a 2a 2a 20 74 68 65 20  hokes on.** the 
1f10: 28 28 76 6f 69 64 2a 29 26 28 28 63 68 61 72 2a  ((void*)&((char*
1f20: 29 30 29 5b 58 5d 29 20 63 6f 6e 73 74 72 75 63  )0)[X]) construc
1f30: 74 2e 20 20 42 75 74 20 4d 53 56 43 20 63 68 6f  t.  But MSVC cho
1f40: 6b 65 73 20 6f 6e 20 28 28 76 6f 69 64 2a 29 28  kes on ((void*)(
1f50: 58 29 29 2e 0a 2a 2a 20 53 6f 20 77 65 20 68 61  X))..** So we ha
1f60: 76 65 20 74 6f 20 64 65 66 69 6e 65 20 74 68 65  ve to define the
1f70: 20 6d 61 63 72 6f 73 20 69 6e 20 64 69 66 66 65   macros in diffe
1f80: 72 65 6e 74 20 77 61 79 73 20 64 65 70 65 6e 64  rent ways depend
1f90: 69 6e 67 20 6f 6e 20 74 68 65 0a 2a 2a 20 63 6f  ing on the.** co
1fa0: 6d 70 69 6c 65 72 2e 0a 2a 2f 0a 23 69 66 20 64  mpiler..*/.#if d
1fb0: 65 66 69 6e 65 64 28 5f 5f 50 54 52 44 49 46 46  efined(__PTRDIFF
1fc0: 5f 54 59 50 45 5f 5f 29 20 20 2f 2a 20 54 68 69  _TYPE__)  /* Thi
1fd0: 73 20 63 61 73 65 20 73 68 6f 75 6c 64 20 77 6f  s case should wo
1fe0: 72 6b 20 66 6f 72 20 47 43 43 20 2a 2f 0a 23 20  rk for GCC */.# 
1ff0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e  define SQLITE_IN
2000: 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76  T_TO_PTR(X)  ((v
2010: 6f 69 64 2a 29 28 5f 5f 50 54 52 44 49 46 46 5f  oid*)(__PTRDIFF_
2020: 54 59 50 45 5f 5f 29 28 58 29 29 0a 23 20 64 65  TYPE__)(X)).# de
2030: 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f  fine SQLITE_PTR_
2040: 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74  TO_INT(X)  ((int
2050: 29 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45  )(__PTRDIFF_TYPE
2060: 5f 5f 29 28 58 29 29 0a 23 65 6c 69 66 20 21 64  __)(X)).#elif !d
2070: 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29  efined(__GNUC__)
2080: 20 20 20 20 20 20 20 2f 2a 20 57 6f 72 6b 73 20         /* Works 
2090: 66 6f 72 20 63 6f 6d 70 69 6c 65 72 73 20 6f 74  for compilers ot
20a0: 68 65 72 20 74 68 61 6e 20 4c 4c 56 4d 20 2a 2f  her than LLVM */
20b0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
20c0: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20  _INT_TO_PTR(X)  
20d0: 28 28 76 6f 69 64 2a 29 26 28 28 63 68 61 72 2a  ((void*)&((char*
20e0: 29 30 29 5b 58 5d 29 0a 23 20 64 65 66 69 6e 65  )0)[X]).# define
20f0: 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49   SQLITE_PTR_TO_I
2100: 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 28 28  NT(X)  ((int)(((
2110: 63 68 61 72 2a 29 58 29 2d 28 63 68 61 72 2a 29  char*)X)-(char*)
2120: 30 29 29 0a 23 65 6c 69 66 20 64 65 66 69 6e 65  0)).#elif define
2130: 64 28 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 29  d(HAVE_STDINT_H)
2140: 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20 63     /* Use this c
2150: 61 73 65 20 69 66 20 77 65 20 68 61 76 65 20 41  ase if we have A
2160: 4e 53 49 20 68 65 61 64 65 72 73 20 2a 2f 0a 23  NSI headers */.#
2170: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49   define SQLITE_I
2180: 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28  NT_TO_PTR(X)  ((
2190: 76 6f 69 64 2a 29 28 69 6e 74 70 74 72 5f 74 29  void*)(intptr_t)
21a0: 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20 53 51  (X)).# define SQ
21b0: 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28  LITE_PTR_TO_INT(
21c0: 58 29 20 20 28 28 69 6e 74 29 28 69 6e 74 70 74  X)  ((int)(intpt
21d0: 72 5f 74 29 28 58 29 29 0a 23 65 6c 73 65 20 20  r_t)(X)).#else  
21e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f0: 20 20 20 20 20 20 20 20 2f 2a 20 47 65 6e 65 72          /* Gener
2200: 61 74 65 73 20 61 20 77 61 72 6e 69 6e 67 20 2d  ates a warning -
2210: 20 62 75 74 20 69 74 20 61 6c 77 61 79 73 20 77   but it always w
2220: 6f 72 6b 73 20 2a 2f 0a 23 20 64 65 66 69 6e 65  orks */.# define
2230: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
2240: 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a 29 28  TR(X)  ((void*)(
2250: 58 29 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  X)).# define SQL
2260: 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58  ITE_PTR_TO_INT(X
2270: 29 20 20 28 28 69 6e 74 29 28 58 29 29 0a 23 65  )  ((int)(X)).#e
2280: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61  ndif../*.** A ma
2290: 63 72 6f 20 74 6f 20 68 69 6e 74 20 74 6f 20 74  cro to hint to t
22a0: 68 65 20 63 6f 6d 70 69 6c 65 72 20 74 68 61 74  he compiler that
22b0: 20 61 20 66 75 6e 63 74 69 6f 6e 20 73 68 6f 75   a function shou
22c0: 6c 64 20 6e 6f 74 20 62 65 0a 2a 2a 20 69 6e 6c  ld not be.** inl
22d0: 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  ined..*/.#if def
22e0: 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 0a 23  ined(__GNUC__).#
22f0: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
2300: 4e 4f 49 4e 4c 49 4e 45 20 20 5f 5f 61 74 74 72  NOINLINE  __attr
2310: 69 62 75 74 65 5f 5f 28 28 6e 6f 69 6e 6c 69 6e  ibute__((noinlin
2320: 65 29 29 0a 23 65 6c 69 66 20 64 65 66 69 6e 65  e)).#elif define
2330: 64 28 5f 4d 53 43 5f 56 45 52 29 20 26 26 20 5f  d(_MSC_VER) && _
2340: 4d 53 43 5f 56 45 52 3e 3d 31 33 31 30 0a 23 20  MSC_VER>=1310.# 
2350: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e   define SQLITE_N
2360: 4f 49 4e 4c 49 4e 45 20 20 5f 5f 64 65 63 6c 73  OINLINE  __decls
2370: 70 65 63 28 6e 6f 69 6e 6c 69 6e 65 29 0a 23 65  pec(noinline).#e
2380: 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 53 51  lse.#  define SQ
2390: 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 0a 23 65  LITE_NOINLINE.#e
23a0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65  ndif../*.** Make
23b0: 20 73 75 72 65 20 74 68 61 74 20 74 68 65 20 63   sure that the c
23c0: 6f 6d 70 69 6c 65 72 20 69 6e 74 72 69 6e 73 69  ompiler intrinsi
23d0: 63 73 20 77 65 20 64 65 73 69 72 65 20 61 72 65  cs we desire are
23e0: 20 65 6e 61 62 6c 65 64 20 77 68 65 6e 0a 2a 2a   enabled when.**
23f0: 20 63 6f 6d 70 69 6c 69 6e 67 20 77 69 74 68 20   compiling with 
2400: 61 6e 20 61 70 70 72 6f 70 72 69 61 74 65 20 76  an appropriate v
2410: 65 72 73 69 6f 6e 20 6f 66 20 4d 53 56 43 20 75  ersion of MSVC u
2420: 6e 6c 65 73 73 20 70 72 65 76 65 6e 74 65 64 20  nless prevented 
2430: 62 79 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45  by.** the SQLITE
2440: 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49 4e 53  _DISABLE_INTRINS
2450: 49 43 20 64 65 66 69 6e 65 2e 0a 2a 2f 0a 23 69  IC define..*/.#i
2460: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
2470: 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49 4e  E_DISABLE_INTRIN
2480: 53 49 43 29 0a 23 20 20 69 66 20 64 65 66 69 6e  SIC).#  if defin
2490: 65 64 28 5f 4d 53 43 5f 56 45 52 29 20 26 26 20  ed(_MSC_VER) && 
24a0: 5f 4d 53 43 5f 56 45 52 3e 3d 31 34 30 30 0a 23  _MSC_VER>=1400.#
24b0: 20 20 20 20 69 66 20 21 64 65 66 69 6e 65 64 28      if !defined(
24c0: 5f 57 49 4e 33 32 5f 57 43 45 29 0a 23 20 20 20  _WIN32_WCE).#   
24d0: 20 20 20 69 6e 63 6c 75 64 65 20 3c 69 6e 74 72     include <intr
24e0: 69 6e 2e 68 3e 0a 23 20 20 20 20 20 20 70 72 61  in.h>.#      pra
24f0: 67 6d 61 20 69 6e 74 72 69 6e 73 69 63 28 5f 62  gma intrinsic(_b
2500: 79 74 65 73 77 61 70 5f 75 73 68 6f 72 74 29 0a  yteswap_ushort).
2510: 23 20 20 20 20 20 20 70 72 61 67 6d 61 20 69 6e  #      pragma in
2520: 74 72 69 6e 73 69 63 28 5f 62 79 74 65 73 77 61  trinsic(_byteswa
2530: 70 5f 75 6c 6f 6e 67 29 0a 23 20 20 20 20 20 20  p_ulong).#      
2540: 70 72 61 67 6d 61 20 69 6e 74 72 69 6e 73 69 63  pragma intrinsic
2550: 28 5f 62 79 74 65 73 77 61 70 5f 75 69 6e 74 36  (_byteswap_uint6
2560: 34 29 0a 23 20 20 20 20 20 20 70 72 61 67 6d 61  4).#      pragma
2570: 20 69 6e 74 72 69 6e 73 69 63 28 5f 52 65 61 64   intrinsic(_Read
2580: 57 72 69 74 65 42 61 72 72 69 65 72 29 0a 23 20  WriteBarrier).# 
2590: 20 20 20 65 6c 73 65 0a 23 20 20 20 20 20 20 69     else.#      i
25a0: 6e 63 6c 75 64 65 20 3c 63 6d 6e 69 6e 74 72 69  nclude <cmnintri
25b0: 6e 2e 68 3e 0a 23 20 20 20 20 65 6e 64 69 66 0a  n.h>.#    endif.
25c0: 23 20 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  #  endif.#endif.
25d0: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54  ./*.** The SQLIT
25e0: 45 5f 54 48 52 45 41 44 53 41 46 45 20 6d 61 63  E_THREADSAFE mac
25f0: 72 6f 20 6d 75 73 74 20 62 65 20 64 65 66 69 6e  ro must be defin
2600: 65 64 20 61 73 20 30 2c 20 31 2c 20 6f 72 20 32  ed as 0, 1, or 2
2610: 2e 0a 2a 2a 20 30 20 6d 65 61 6e 73 20 6d 75 74  ..** 0 means mut
2620: 65 78 65 73 20 61 72 65 20 70 65 72 6d 61 6e 65  exes are permane
2630: 6e 74 6c 79 20 64 69 73 61 62 6c 65 20 61 6e 64  ntly disable and
2640: 20 74 68 65 20 6c 69 62 72 61 72 79 20 69 73 20   the library is 
2650: 6e 65 76 65 72 0a 2a 2a 20 74 68 72 65 61 64 73  never.** threads
2660: 61 66 65 2e 20 20 31 20 6d 65 61 6e 73 20 74 68  afe.  1 means th
2670: 65 20 6c 69 62 72 61 72 79 20 69 73 20 73 65 72  e library is ser
2680: 69 61 6c 69 7a 65 64 20 77 68 69 63 68 20 69 73  ialized which is
2690: 20 74 68 65 20 68 69 67 68 65 73 74 0a 2a 2a 20   the highest.** 
26a0: 6c 65 76 65 6c 20 6f 66 20 74 68 72 65 61 64 73  level of threads
26b0: 61 66 65 74 79 2e 20 20 32 20 6d 65 61 6e 73 20  afety.  2 means 
26c0: 74 68 65 20 6c 69 62 72 61 72 79 20 69 73 20 6d  the library is m
26d0: 75 6c 74 69 74 68 72 65 61 64 65 64 20 2d 20 6d  ultithreaded - m
26e0: 75 6c 74 69 70 6c 65 0a 2a 2a 20 74 68 72 65 61  ultiple.** threa
26f0: 64 73 20 63 61 6e 20 75 73 65 20 53 51 4c 69 74  ds can use SQLit
2700: 65 20 61 73 20 6c 6f 6e 67 20 61 73 20 6e 6f 20  e as long as no 
2710: 74 77 6f 20 74 68 72 65 61 64 73 20 74 72 79 20  two threads try 
2720: 74 6f 20 75 73 65 20 74 68 65 20 73 61 6d 65 0a  to use the same.
2730: 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ** database conn
2740: 65 63 74 69 6f 6e 20 61 74 20 74 68 65 20 73 61  ection at the sa
2750: 6d 65 20 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f  me time..**.** O
2760: 6c 64 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66  lder versions of
2770: 20 53 51 4c 69 74 65 20 75 73 65 64 20 61 6e 20   SQLite used an 
2780: 6f 70 74 69 6f 6e 61 6c 20 54 48 52 45 41 44 53  optional THREADS
2790: 41 46 45 20 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65  AFE macro..** We
27a0: 20 73 75 70 70 6f 72 74 20 74 68 61 74 20 66 6f   support that fo
27b0: 72 20 6c 65 67 61 63 79 2e 0a 2a 2a 0a 2a 2a 20  r legacy..**.** 
27c0: 54 6f 20 65 6e 73 75 72 65 20 74 68 61 74 20 74  To ensure that t
27d0: 68 65 20 63 6f 72 72 65 63 74 20 76 61 6c 75 65  he correct value
27e0: 20 6f 66 20 22 54 48 52 45 41 44 53 41 46 45 22   of "THREADSAFE"
27f0: 20 69 73 20 72 65 70 6f 72 74 65 64 20 77 68 65   is reported whe
2800: 6e 20 71 75 65 72 79 69 6e 67 0a 2a 2a 20 66 6f  n querying.** fo
2810: 72 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  r compile-time o
2820: 70 74 69 6f 6e 73 20 61 74 20 72 75 6e 74 69 6d  ptions at runtim
2830: 65 20 28 65 2e 67 2e 20 22 50 52 41 47 4d 41 20  e (e.g. "PRAGMA 
2840: 63 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e 73 22  compile_options"
2850: 29 2c 20 74 68 69 73 0a 2a 2a 20 6c 6f 67 69 63  ), this.** logic
2860: 20 69 73 20 70 61 72 74 69 61 6c 6c 79 20 72 65   is partially re
2870: 70 6c 69 63 61 74 65 64 20 69 6e 20 63 74 69 6d  plicated in ctim
2880: 65 2e 63 2e 20 49 66 20 69 74 20 69 73 20 75 70  e.c. If it is up
2890: 64 61 74 65 64 20 68 65 72 65 2c 20 69 74 20 73  dated here, it s
28a0: 68 6f 75 6c 64 0a 2a 2a 20 61 6c 73 6f 20 62 65  hould.** also be
28b0: 20 75 70 64 61 74 65 64 20 74 68 65 72 65 2e 0a   updated there..
28c0: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
28d0: 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46  SQLITE_THREADSAF
28e0: 45 29 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28  E).# if defined(
28f0: 54 48 52 45 41 44 53 41 46 45 29 0a 23 20 20 20  THREADSAFE).#   
2900: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 48  define SQLITE_TH
2910: 52 45 41 44 53 41 46 45 20 54 48 52 45 41 44 53  READSAFE THREADS
2920: 41 46 45 0a 23 20 65 6c 73 65 0a 23 20 20 20 64  AFE.# else.#   d
2930: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 48 52  efine SQLITE_THR
2940: 45 41 44 53 41 46 45 20 31 20 2f 2a 20 49 4d 50  EADSAFE 1 /* IMP
2950: 3a 20 52 2d 30 37 32 37 32 2d 32 32 33 30 39 20  : R-07272-22309 
2960: 2a 2f 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69  */.# endif.#endi
2970: 66 0a 0a 2f 2a 0a 2a 2a 20 50 6f 77 65 72 73 61  f../*.** Powersa
2980: 66 65 20 6f 76 65 72 77 72 69 74 65 20 69 73 20  fe overwrite is 
2990: 6f 6e 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20  on by default.  
29a0: 42 75 74 20 63 61 6e 20 62 65 20 74 75 72 6e 65  But can be turne
29b0: 64 20 6f 66 66 20 75 73 69 6e 67 0a 2a 2a 20 74  d off using.** t
29c0: 68 65 20 2d 44 53 51 4c 49 54 45 5f 50 4f 57 45  he -DSQLITE_POWE
29d0: 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45 3d  RSAFE_OVERWRITE=
29e0: 30 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f  0 command-line o
29f0: 70 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65  ption..*/.#ifnde
2a00: 66 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41  f SQLITE_POWERSA
2a10: 46 45 5f 4f 56 45 52 57 52 49 54 45 0a 23 20 64  FE_OVERWRITE.# d
2a20: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 4f 57  efine SQLITE_POW
2a30: 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45  ERSAFE_OVERWRITE
2a40: 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   1.#endif../*.**
2a50: 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
2a60: 32 35 37 31 35 2d 33 37 30 37 32 20 4d 65 6d 6f  25715-37072 Memo
2a70: 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 74  ry allocation st
2a80: 61 74 69 73 74 69 63 73 20 61 72 65 20 65 6e 61  atistics are ena
2a90: 62 6c 65 64 20 62 79 0a 2a 2a 20 64 65 66 61 75  bled by.** defau
2aa0: 6c 74 20 75 6e 6c 65 73 73 20 53 51 4c 69 74 65  lt unless SQLite
2ab0: 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74   is compiled wit
2ac0: 68 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  h SQLITE_DEFAULT
2ad0: 5f 4d 45 4d 53 54 41 54 55 53 3d 30 20 69 6e 0a  _MEMSTATUS=0 in.
2ae0: 2a 2a 20 77 68 69 63 68 20 63 61 73 65 20 6d 65  ** which case me
2af0: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
2b00: 73 74 61 74 69 73 74 69 63 73 20 61 72 65 20 64  statistics are d
2b10: 69 73 61 62 6c 65 64 20 62 79 20 64 65 66 61 75  isabled by defau
2b20: 6c 74 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  lt..*/.#if !defi
2b30: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 46 41 55  ned(SQLITE_DEFAU
2b40: 4c 54 5f 4d 45 4d 53 54 41 54 55 53 29 0a 23 20  LT_MEMSTATUS).# 
2b50: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
2b60: 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 20  FAULT_MEMSTATUS 
2b70: 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
2b80: 45 78 61 63 74 6c 79 20 6f 6e 65 20 6f 66 20 74  Exactly one of t
2b90: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
2ba0: 72 6f 73 20 6d 75 73 74 20 62 65 20 64 65 66 69  ros must be defi
2bb0: 6e 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a  ned in order to.
2bc0: 2a 2a 20 73 70 65 63 69 66 79 20 77 68 69 63 68  ** specify which
2bd0: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
2be0: 6f 6e 20 73 75 62 73 79 73 74 65 6d 20 74 6f 20  on subsystem to 
2bf0: 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  use..**.**     S
2c00: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
2c10: 4c 4f 43 20 20 20 20 20 20 20 20 20 20 2f 2f 20  LOC          // 
2c20: 55 73 65 20 6e 6f 72 6d 61 6c 20 73 79 73 74 65  Use normal syste
2c30: 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20  m malloc().**   
2c40: 20 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d    SQLITE_WIN32_M
2c50: 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20 20  ALLOC           
2c60: 2f 2f 20 55 73 65 20 57 69 6e 33 32 20 6e 61 74  // Use Win32 nat
2c70: 69 76 65 20 68 65 61 70 20 41 50 49 0a 2a 2a 20  ive heap API.** 
2c80: 20 20 20 20 53 51 4c 49 54 45 5f 5a 45 52 4f 5f      SQLITE_ZERO_
2c90: 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20  MALLOC          
2ca0: 20 20 2f 2f 20 55 73 65 20 61 20 73 74 75 62 20    // Use a stub 
2cb0: 61 6c 6c 6f 63 61 74 6f 72 20 74 68 61 74 20 61  allocator that a
2cc0: 6c 77 61 79 73 20 66 61 69 6c 73 0a 2a 2a 20 20  lways fails.**  
2cd0: 20 20 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42     SQLITE_MEMDEB
2ce0: 55 47 20 20 20 20 20 20 20 20 20 20 20 20 20 20  UG              
2cf0: 20 2f 2f 20 44 65 62 75 67 67 69 6e 67 20 76 65   // Debugging ve
2d00: 72 73 69 6f 6e 20 6f 66 20 73 79 73 74 65 6d 20  rsion of system 
2d10: 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 0a 2a 2a 20 4f  malloc().**.** O
2d20: 6e 20 57 69 6e 64 6f 77 73 2c 20 69 66 20 74 68  n Windows, if th
2d30: 65 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d  e SQLITE_WIN32_M
2d40: 41 4c 4c 4f 43 5f 56 41 4c 49 44 41 54 45 20 6d  ALLOC_VALIDATE m
2d50: 61 63 72 6f 20 69 73 20 64 65 66 69 6e 65 64 20  acro is defined 
2d60: 61 6e 64 20 74 68 65 0a 2a 2a 20 61 73 73 65 72  and the.** asser
2d70: 74 28 29 20 6d 61 63 72 6f 20 69 73 20 65 6e 61  t() macro is ena
2d80: 62 6c 65 64 2c 20 65 61 63 68 20 63 61 6c 6c 20  bled, each call 
2d90: 69 6e 74 6f 20 74 68 65 20 57 69 6e 33 32 20 6e  into the Win32 n
2da0: 61 74 69 76 65 20 68 65 61 70 20 73 75 62 73 79  ative heap subsy
2db0: 73 74 65 6d 0a 2a 2a 20 77 69 6c 6c 20 63 61 75  stem.** will cau
2dc0: 73 65 20 48 65 61 70 56 61 6c 69 64 61 74 65 20  se HeapValidate 
2dd0: 74 6f 20 62 65 20 63 61 6c 6c 65 64 2e 20 20 49  to be called.  I
2de0: 66 20 68 65 61 70 20 76 61 6c 69 64 61 74 69 6f  f heap validatio
2df0: 6e 20 73 68 6f 75 6c 64 20 66 61 69 6c 2c 20 61  n should fail, a
2e00: 6e 0a 2a 2a 20 61 73 73 65 72 74 69 6f 6e 20 77  n.** assertion w
2e10: 69 6c 6c 20 62 65 20 74 72 69 67 67 65 72 65 64  ill be triggered
2e20: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20  ..**.** If none 
2e30: 6f 66 20 74 68 65 20 61 62 6f 76 65 20 61 72 65  of the above are
2e40: 20 64 65 66 69 6e 65 64 2c 20 74 68 65 6e 20 73   defined, then s
2e50: 65 74 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d  et SQLITE_SYSTEM
2e60: 5f 4d 41 4c 4c 4f 43 20 61 73 0a 2a 2a 20 74 68  _MALLOC as.** th
2e70: 65 20 64 65 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69  e default..*/.#i
2e80: 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
2e90: 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20  _SYSTEM_MALLOC) 
2ea0: 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51  \.  + defined(SQ
2eb0: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2ec0: 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64  C) \.  + defined
2ed0: 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c  (SQLITE_ZERO_MAL
2ee0: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
2ef0: 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  ed(SQLITE_MEMDEB
2f00: 55 47 29 3e 31 0a 23 20 65 72 72 6f 72 20 22 54  UG)>1.# error "T
2f10: 77 6f 20 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68  wo or more of th
2f20: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70  e following comp
2f30: 69 6c 65 2d 74 69 6d 65 20 63 6f 6e 66 69 67 75  ile-time configu
2f40: 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a  ration options\.
2f50: 20 61 72 65 20 64 65 66 69 6e 65 64 20 62 75 74   are defined but
2f60: 20 61 74 20 6d 6f 73 74 20 6f 6e 65 20 69 73 20   at most one is 
2f70: 61 6c 6c 6f 77 65 64 3a 5c 0a 20 53 51 4c 49 54  allowed:\. SQLIT
2f80: 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c  E_SYSTEM_MALLOC,
2f90: 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41   SQLITE_WIN32_MA
2fa0: 4c 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 4d 45 4d  LLOC, SQLITE_MEM
2fb0: 44 45 42 55 47 2c 5c 0a 20 53 51 4c 49 54 45 5f  DEBUG,\. SQLITE_
2fc0: 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e  ZERO_MALLOC".#en
2fd0: 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
2fe0: 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41  SQLITE_SYSTEM_MA
2ff0: 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69  LLOC) \.  + defi
3000: 6e 65 64 28 53 51 4c 49 54 45 5f 57 49 4e 33 32  ned(SQLITE_WIN32
3010: 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64  _MALLOC) \.  + d
3020: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 5a 45  efined(SQLITE_ZE
3030: 52 4f 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b  RO_MALLOC) \.  +
3040: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
3050: 4d 45 4d 44 45 42 55 47 29 3d 3d 30 0a 23 20 64  MEMDEBUG)==0.# d
3060: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 59 53  efine SQLITE_SYS
3070: 54 45 4d 5f 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e  TEM_MALLOC 1.#en
3080: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51  dif../*.** If SQ
3090: 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54  LITE_MALLOC_SOFT
30a0: 5f 4c 49 4d 49 54 20 69 73 20 6e 6f 74 20 7a 65  _LIMIT is not ze
30b0: 72 6f 2c 20 74 68 65 6e 20 74 72 79 20 74 6f 20  ro, then try to 
30c0: 6b 65 65 70 20 74 68 65 0a 2a 2a 20 73 69 7a 65  keep the.** size
30d0: 73 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  s of memory allo
30e0: 63 61 74 69 6f 6e 73 20 62 65 6c 6f 77 20 74 68  cations below th
30f0: 69 73 20 76 61 6c 75 65 20 77 68 65 72 65 20 70  is value where p
3100: 6f 73 73 69 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20  ossible..*/.#if 
3110: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
3120: 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49  MALLOC_SOFT_LIMI
3130: 54 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  T).# define SQLI
3140: 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c  TE_MALLOC_SOFT_L
3150: 49 4d 49 54 20 31 30 32 34 0a 23 65 6e 64 69 66  IMIT 1024.#endif
3160: 0a 0a 2f 2a 0a 2a 2a 20 57 65 20 6e 65 65 64 20  ../*.** We need 
3170: 74 6f 20 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e  to define _XOPEN
3180: 5f 53 4f 55 52 43 45 20 61 73 20 66 6f 6c 6c 6f  _SOURCE as follo
3190: 77 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 65  ws in order to e
31a0: 6e 61 62 6c 65 0a 2a 2a 20 72 65 63 75 72 73 69  nable.** recursi
31b0: 76 65 20 6d 75 74 65 78 65 73 20 6f 6e 20 6d 6f  ve mutexes on mo
31c0: 73 74 20 55 6e 69 78 20 73 79 73 74 65 6d 73 20  st Unix systems 
31d0: 61 6e 64 20 66 63 68 6d 6f 64 28 29 20 6f 6e 20  and fchmod() on 
31e0: 4f 70 65 6e 42 53 44 2e 0a 2a 2a 20 42 75 74 20  OpenBSD..** But 
31f0: 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 64 65  _XOPEN_SOURCE de
3200: 66 69 6e 65 20 63 61 75 73 65 73 20 70 72 6f 62  fine causes prob
3210: 6c 65 6d 73 20 66 6f 72 20 4d 61 63 20 4f 53 20  lems for Mac OS 
3220: 58 2c 20 73 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74  X, so omit.** it
3230: 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  ..*/.#if !define
3240: 64 28 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 29  d(_XOPEN_SOURCE)
3250: 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 5f 44   && !defined(__D
3260: 41 52 57 49 4e 5f 5f 29 20 26 26 20 21 64 65 66  ARWIN__) && !def
3270: 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a  ined(__APPLE__).
3280: 23 20 20 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e  #  define _XOPEN
3290: 5f 53 4f 55 52 43 45 20 36 30 30 0a 23 65 6e 64  _SOURCE 600.#end
32a0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 4e 44 45 42 55 47  if../*.** NDEBUG
32b0: 20 61 6e 64 20 53 51 4c 49 54 45 5f 44 45 42 55   and SQLITE_DEBU
32c0: 47 20 61 72 65 20 6f 70 70 6f 73 69 74 65 73 2e  G are opposites.
32d0: 20 20 49 74 20 73 68 6f 75 6c 64 20 61 6c 77 61    It should alwa
32e0: 79 73 20 62 65 20 74 72 75 65 20 74 68 61 74 0a  ys be true that.
32f0: 2a 2a 20 64 65 66 69 6e 65 64 28 4e 44 45 42 55  ** defined(NDEBU
3300: 47 29 3d 3d 21 64 65 66 69 6e 65 64 28 53 51 4c  G)==!defined(SQL
3310: 49 54 45 5f 44 45 42 55 47 29 2e 20 20 49 66 20  ITE_DEBUG).  If 
3320: 74 68 69 73 20 69 73 20 6e 6f 74 20 63 75 72 72  this is not curr
3330: 65 6e 74 6c 79 20 74 72 75 65 2c 0a 2a 2a 20 6d  ently true,.** m
3340: 61 6b 65 20 69 74 20 74 72 75 65 20 62 79 20 64  ake it true by d
3350: 65 66 69 6e 69 6e 67 20 6f 72 20 75 6e 64 65 66  efining or undef
3360: 69 6e 69 6e 67 20 4e 44 45 42 55 47 2e 0a 2a 2a  ining NDEBUG..**
3370: 0a 2a 2a 20 53 65 74 74 69 6e 67 20 4e 44 45 42  .** Setting NDEB
3380: 55 47 20 6d 61 6b 65 73 20 74 68 65 20 63 6f 64  UG makes the cod
3390: 65 20 73 6d 61 6c 6c 65 72 20 61 6e 64 20 66 61  e smaller and fa
33a0: 73 74 65 72 20 62 79 20 64 69 73 61 62 6c 69 6e  ster by disablin
33b0: 67 20 74 68 65 0a 2a 2a 20 61 73 73 65 72 74 28  g the.** assert(
33c0: 29 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  ) statements in 
33d0: 74 68 65 20 63 6f 64 65 2e 20 20 53 6f 20 77 65  the code.  So we
33e0: 20 77 61 6e 74 20 74 68 65 20 64 65 66 61 75 6c   want the defaul
33f0: 74 20 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62  t action.** to b
3400: 65 20 66 6f 72 20 4e 44 45 42 55 47 20 74 6f 20  e for NDEBUG to 
3410: 62 65 20 73 65 74 20 61 6e 64 20 4e 44 45 42 55  be set and NDEBU
3420: 47 20 74 6f 20 62 65 20 75 6e 64 65 66 69 6e 65  G to be undefine
3430: 64 20 6f 6e 6c 79 20 69 66 20 53 51 4c 49 54 45  d only if SQLITE
3440: 5f 44 45 42 55 47 0a 2a 2a 20 69 73 20 73 65 74  _DEBUG.** is set
3450: 2e 20 20 54 68 75 73 20 4e 44 45 42 55 47 20 62  .  Thus NDEBUG b
3460: 65 63 6f 6d 65 73 20 61 6e 20 6f 70 74 2d 69 6e  ecomes an opt-in
3470: 20 72 61 74 68 65 72 20 74 68 61 6e 20 61 6e 20   rather than an 
3480: 6f 70 74 2d 6f 75 74 0a 2a 2a 20 66 65 61 74 75  opt-out.** featu
3490: 72 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  re..*/.#if !defi
34a0: 6e 65 64 28 4e 44 45 42 55 47 29 20 26 26 20 21  ned(NDEBUG) && !
34b0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
34c0: 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 4e  EBUG).# define N
34d0: 44 45 42 55 47 20 31 0a 23 65 6e 64 69 66 0a 23  DEBUG 1.#endif.#
34e0: 69 66 20 64 65 66 69 6e 65 64 28 4e 44 45 42 55  if defined(NDEBU
34f0: 47 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51  G) && defined(SQ
3500: 4c 49 54 45 5f 44 45 42 55 47 29 0a 23 20 75 6e  LITE_DEBUG).# un
3510: 64 65 66 20 4e 44 45 42 55 47 0a 23 65 6e 64 69  def NDEBUG.#endi
3520: 66 0a 0a 2f 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20  f../*.** Enable 
3530: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58  SQLITE_ENABLE_EX
3540: 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69  PLAIN_COMMENTS i
3550: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 69  f SQLITE_DEBUG i
3560: 73 20 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a  s turned on..*/.
3570: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
3580: 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41  ITE_ENABLE_EXPLA
3590: 49 4e 5f 43 4f 4d 4d 45 4e 54 53 29 20 26 26 20  IN_COMMENTS) && 
35a0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
35b0: 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 53  EBUG).# define S
35c0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50  QLITE_ENABLE_EXP
35d0: 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 31 0a  LAIN_COMMENTS 1.
35e0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
35f0: 65 20 74 65 73 74 63 61 73 65 28 29 20 6d 61 63  e testcase() mac
3600: 72 6f 20 69 73 20 75 73 65 64 20 74 6f 20 61 69  ro is used to ai
3610: 64 20 69 6e 20 63 6f 76 65 72 61 67 65 20 74 65  d in coverage te
3620: 73 74 69 6e 67 2e 20 20 57 68 65 6e 0a 2a 2a 20  sting.  When.** 
3630: 64 6f 69 6e 67 20 63 6f 76 65 72 61 67 65 20 74  doing coverage t
3640: 65 73 74 69 6e 67 2c 20 74 68 65 20 63 6f 6e 64  esting, the cond
3650: 69 74 69 6f 6e 20 69 6e 73 69 64 65 20 74 68 65  ition inside the
3660: 20 61 72 67 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20   argument to.** 
3670: 74 65 73 74 63 61 73 65 28 29 20 6d 75 73 74 20  testcase() must 
3680: 62 65 20 65 76 61 6c 75 61 74 65 64 20 62 6f 74  be evaluated bot
3690: 68 20 74 72 75 65 20 61 6e 64 20 66 61 6c 73 65  h true and false
36a0: 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20   in order to.** 
36b0: 67 65 74 20 66 75 6c 6c 20 62 72 61 6e 63 68 20  get full branch 
36c0: 63 6f 76 65 72 61 67 65 2e 20 20 54 68 65 20 74  coverage.  The t
36d0: 65 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f 20  estcase() macro 
36e0: 69 73 20 69 6e 73 65 72 74 65 64 0a 2a 2a 20 74  is inserted.** t
36f0: 6f 20 68 65 6c 70 20 65 6e 73 75 72 65 20 61 64  o help ensure ad
3700: 65 71 75 61 74 65 20 74 65 73 74 20 63 6f 76 65  equate test cove
3710: 72 61 67 65 20 69 6e 20 70 6c 61 63 65 73 20 77  rage in places w
3720: 68 65 72 65 20 73 69 6d 70 6c 65 0a 2a 2a 20 63  here simple.** c
3730: 6f 6e 64 69 74 69 6f 6e 2f 64 65 63 69 73 69 6f  ondition/decisio
3740: 6e 20 63 6f 76 65 72 61 67 65 20 69 73 20 69 6e  n coverage is in
3750: 61 64 65 71 75 61 74 65 2e 20 20 46 6f 72 20 65  adequate.  For e
3760: 78 61 6d 70 6c 65 2c 20 74 65 73 74 63 61 73 65  xample, testcase
3770: 28 29 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73 65  ().** can be use
3780: 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 62  d to make sure b
3790: 6f 75 6e 64 61 72 79 20 76 61 6c 75 65 73 20 61  oundary values a
37a0: 72 65 20 74 65 73 74 65 64 2e 20 20 46 6f 72 0a  re tested.  For.
37b0: 2a 2a 20 62 69 74 6d 61 73 6b 20 74 65 73 74 73  ** bitmask tests
37c0: 2c 20 74 65 73 74 63 61 73 65 28 29 20 63 61 6e  , testcase() can
37d0: 20 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b 65   be used to make
37e0: 20 73 75 72 65 20 65 61 63 68 20 62 69 74 0a 2a   sure each bit.*
37f0: 2a 20 69 73 20 73 69 67 6e 69 66 69 63 61 6e 74  * is significant
3800: 20 61 6e 64 20 75 73 65 64 20 61 74 20 6c 65 61   and used at lea
3810: 73 74 20 6f 6e 63 65 2e 20 20 4f 6e 20 73 77 69  st once.  On swi
3820: 74 63 68 20 73 74 61 74 65 6d 65 6e 74 73 0a 2a  tch statements.*
3830: 2a 20 77 68 65 72 65 20 6d 75 6c 74 69 70 6c 65  * where multiple
3840: 20 63 61 73 65 73 20 67 6f 20 74 6f 20 74 68 65   cases go to the
3850: 20 73 61 6d 65 20 62 6c 6f 63 6b 20 6f 66 20 63   same block of c
3860: 6f 64 65 2c 20 74 65 73 74 63 61 73 65 28 29 0a  ode, testcase().
3870: 2a 2a 20 63 61 6e 20 69 6e 73 75 72 65 20 74 68  ** can insure th
3880: 61 74 20 61 6c 6c 20 63 61 73 65 73 20 61 72 65  at all cases are
3890: 20 65 76 61 6c 75 61 74 65 64 2e 0a 2a 2a 0a 2a   evaluated..**.*
38a0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
38b0: 43 4f 56 45 52 41 47 45 5f 54 45 53 54 0a 20 20  COVERAGE_TEST.  
38c0: 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 76 65  void sqlite3Cove
38d0: 72 61 67 65 28 69 6e 74 29 3b 0a 23 20 64 65 66  rage(int);.# def
38e0: 69 6e 65 20 74 65 73 74 63 61 73 65 28 58 29 20  ine testcase(X) 
38f0: 20 69 66 28 20 58 20 29 7b 20 73 71 6c 69 74 65   if( X ){ sqlite
3900: 33 43 6f 76 65 72 61 67 65 28 5f 5f 4c 49 4e 45  3Coverage(__LINE
3910: 5f 5f 29 3b 20 7d 0a 23 65 6c 73 65 0a 23 20 64  __); }.#else.# d
3920: 65 66 69 6e 65 20 74 65 73 74 63 61 73 65 28 58  efine testcase(X
3930: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
3940: 54 68 65 20 54 45 53 54 4f 4e 4c 59 20 6d 61 63  The TESTONLY mac
3950: 72 6f 20 69 73 20 75 73 65 64 20 74 6f 20 65 6e  ro is used to en
3960: 63 6c 6f 73 65 20 76 61 72 69 61 62 6c 65 20 64  close variable d
3970: 65 63 6c 61 72 61 74 69 6f 6e 73 20 6f 72 0a 2a  eclarations or.*
3980: 2a 20 6f 74 68 65 72 20 62 69 74 73 20 6f 66 20  * other bits of 
3990: 63 6f 64 65 20 74 68 61 74 20 61 72 65 20 6e 65  code that are ne
39a0: 65 64 65 64 20 74 6f 20 73 75 70 70 6f 72 74 20  eded to support 
39b0: 74 68 65 20 61 72 67 75 6d 65 6e 74 73 0a 2a 2a  the arguments.**
39c0: 20 77 69 74 68 69 6e 20 74 65 73 74 63 61 73 65   within testcase
39d0: 28 29 20 61 6e 64 20 61 73 73 65 72 74 28 29 20  () and assert() 
39e0: 6d 61 63 72 6f 73 2e 0a 2a 2f 0a 23 69 66 20 21  macros..*/.#if !
39f0: 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20  defined(NDEBUG) 
3a00: 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
3a10: 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54 29  E_COVERAGE_TEST)
3a20: 0a 23 20 64 65 66 69 6e 65 20 54 45 53 54 4f 4e  .# define TESTON
3a30: 4c 59 28 58 29 20 20 58 0a 23 65 6c 73 65 0a 23  LY(X)  X.#else.#
3a40: 20 64 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59   define TESTONLY
3a50: 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (X).#endif../*.*
3a60: 2a 20 53 6f 6d 65 74 69 6d 65 73 20 77 65 20 6e  * Sometimes we n
3a70: 65 65 64 20 61 20 73 6d 61 6c 6c 20 61 6d 6f 75  eed a small amou
3a80: 6e 74 20 6f 66 20 63 6f 64 65 20 73 75 63 68 20  nt of code such 
3a90: 61 73 20 61 20 76 61 72 69 61 62 6c 65 20 69 6e  as a variable in
3aa0: 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20  itialization.** 
3ab0: 74 6f 20 73 65 74 75 70 20 66 6f 72 20 61 20 6c  to setup for a l
3ac0: 61 74 65 72 20 61 73 73 65 72 74 28 29 20 73 74  ater assert() st
3ad0: 61 74 65 6d 65 6e 74 2e 20 20 57 65 20 64 6f 20  atement.  We do 
3ae0: 6e 6f 74 20 77 61 6e 74 20 74 68 69 73 20 63 6f  not want this co
3af0: 64 65 20 74 6f 0a 2a 2a 20 61 70 70 65 61 72 20  de to.** appear 
3b00: 77 68 65 6e 20 61 73 73 65 72 74 28 29 20 69 73  when assert() is
3b10: 20 64 69 73 61 62 6c 65 64 2e 20 20 54 68 65 20   disabled.  The 
3b20: 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20  following macro 
3b30: 69 73 20 74 68 65 72 65 66 6f 72 65 0a 2a 2a 20  is therefore.** 
3b40: 75 73 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20  used to contain 
3b50: 74 68 61 74 20 73 65 74 75 70 20 63 6f 64 65 2e  that setup code.
3b60: 20 20 54 68 65 20 22 56 56 41 22 20 61 63 72 6f    The "VVA" acro
3b70: 6e 79 6d 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a  nym stands for.*
3b80: 2a 20 22 56 65 72 69 66 69 63 61 74 69 6f 6e 2c  * "Verification,
3b90: 20 56 61 6c 69 64 61 74 69 6f 6e 2c 20 61 6e 64   Validation, and
3ba0: 20 41 63 63 72 65 64 69 74 61 74 69 6f 6e 22 2e   Accreditation".
3bb0: 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
3bc0: 2c 20 74 68 65 0a 2a 2a 20 63 6f 64 65 20 77 69  , the.** code wi
3bd0: 74 68 69 6e 20 56 56 41 5f 4f 4e 4c 59 28 29 20  thin VVA_ONLY() 
3be0: 77 69 6c 6c 20 6f 6e 6c 79 20 72 75 6e 20 64 75  will only run du
3bf0: 72 69 6e 67 20 76 65 72 69 66 69 63 61 74 69 6f  ring verificatio
3c00: 6e 20 70 72 6f 63 65 73 73 65 73 2e 0a 2a 2f 0a  n processes..*/.
3c10: 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 23  #ifndef NDEBUG.#
3c20: 20 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59   define VVA_ONLY
3c30: 28 58 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64  (X)  X.#else.# d
3c40: 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58  efine VVA_ONLY(X
3c50: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
3c60: 54 68 65 20 41 4c 57 41 59 53 20 61 6e 64 20 4e  The ALWAYS and N
3c70: 45 56 45 52 20 6d 61 63 72 6f 73 20 73 75 72 72  EVER macros surr
3c80: 6f 75 6e 64 20 62 6f 6f 6c 65 61 6e 20 65 78 70  ound boolean exp
3c90: 72 65 73 73 69 6f 6e 73 20 77 68 69 63 68 0a 2a  ressions which.*
3ca0: 2a 20 61 72 65 20 69 6e 74 65 6e 64 65 64 20 74  * are intended t
3cb0: 6f 20 61 6c 77 61 79 73 20 62 65 20 74 72 75 65  o always be true
3cc0: 20 6f 72 20 66 61 6c 73 65 2c 20 72 65 73 70 65   or false, respe
3cd0: 63 74 69 76 65 6c 79 2e 20 20 53 75 63 68 0a 2a  ctively.  Such.*
3ce0: 2a 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63 6f  * expressions co
3cf0: 75 6c 64 20 62 65 20 6f 6d 69 74 74 65 64 20 66  uld be omitted f
3d00: 72 6f 6d 20 74 68 65 20 63 6f 64 65 20 63 6f 6d  rom the code com
3d10: 70 6c 65 74 65 6c 79 2e 20 20 42 75 74 20 74 68  pletely.  But th
3d20: 65 79 0a 2a 2a 20 61 72 65 20 69 6e 63 6c 75 64  ey.** are includ
3d30: 65 64 20 69 6e 20 61 20 66 65 77 20 63 61 73 65  ed in a few case
3d40: 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e  s in order to en
3d50: 68 61 6e 63 65 20 74 68 65 20 72 65 73 69 6c 69  hance the resili
3d60: 65 6e 63 65 0a 2a 2a 20 6f 66 20 53 51 4c 69 74  ence.** of SQLit
3d70: 65 20 74 6f 20 75 6e 65 78 70 65 63 74 65 64 20  e to unexpected 
3d80: 62 65 68 61 76 69 6f 72 20 2d 20 74 6f 20 6d 61  behavior - to ma
3d90: 6b 65 20 74 68 65 20 63 6f 64 65 20 22 73 65 6c  ke the code "sel
3da0: 66 2d 68 65 61 6c 69 6e 67 22 0a 2a 2a 20 6f 72  f-healing".** or
3db0: 20 22 64 75 63 74 69 6c 65 22 20 72 61 74 68 65   "ductile" rathe
3dc0: 72 20 74 68 61 6e 20 62 65 69 6e 67 20 22 62 72  r than being "br
3dd0: 69 74 74 6c 65 22 20 61 6e 64 20 63 72 61 73 68  ittle" and crash
3de0: 69 6e 67 20 61 74 20 74 68 65 20 66 69 72 73 74  ing at the first
3df0: 0a 2a 2a 20 68 69 6e 74 20 6f 66 20 75 6e 70 6c  .** hint of unpl
3e00: 61 6e 6e 65 64 20 62 65 68 61 76 69 6f 72 2e 0a  anned behavior..
3e10: 2a 2a 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77  **.** In other w
3e20: 6f 72 64 73 2c 20 41 4c 57 41 59 53 20 61 6e 64  ords, ALWAYS and
3e30: 20 4e 45 56 45 52 20 61 72 65 20 61 64 64 65 64   NEVER are added
3e40: 20 66 6f 72 20 64 65 66 65 6e 73 69 76 65 20 63   for defensive c
3e50: 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20  ode..**.** When 
3e60: 64 6f 69 6e 67 20 63 6f 76 65 72 61 67 65 20 74  doing coverage t
3e70: 65 73 74 69 6e 67 20 41 4c 57 41 59 53 20 61 6e  esting ALWAYS an
3e80: 64 20 4e 45 56 45 52 20 61 72 65 20 68 61 72 64  d NEVER are hard
3e90: 2d 63 6f 64 65 64 20 74 6f 0a 2a 2a 20 62 65 20  -coded to.** be 
3ea0: 74 72 75 65 20 61 6e 64 20 66 61 6c 73 65 20 73  true and false s
3eb0: 6f 20 74 68 61 74 20 74 68 65 20 75 6e 72 65 61  o that the unrea
3ec0: 63 68 61 62 6c 65 20 63 6f 64 65 20 74 68 65 79  chable code they
3ed0: 20 73 70 65 63 69 66 79 20 77 69 6c 6c 0a 2a 2a   specify will.**
3ee0: 20 6e 6f 74 20 62 65 20 63 6f 75 6e 74 65 64 20   not be counted 
3ef0: 61 73 20 75 6e 74 65 73 74 65 64 20 63 6f 64 65  as untested code
3f00: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
3f10: 28 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45  (SQLITE_COVERAGE
3f20: 5f 54 45 53 54 29 20 7c 7c 20 64 65 66 69 6e 65  _TEST) || define
3f30: 64 28 53 51 4c 49 54 45 5f 4d 55 54 41 54 49 4f  d(SQLITE_MUTATIO
3f40: 4e 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65  N_TEST).# define
3f50: 20 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20   ALWAYS(X)      
3f60: 28 31 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56  (1).# define NEV
3f70: 45 52 28 58 29 20 20 20 20 20 20 20 28 30 29 0a  ER(X)       (0).
3f80: 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28 4e  #elif !defined(N
3f90: 44 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20  DEBUG).# define 
3fa0: 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20 28  ALWAYS(X)      (
3fb0: 28 58 29 3f 31 3a 28 61 73 73 65 72 74 28 30 29  (X)?1:(assert(0)
3fc0: 2c 30 29 29 0a 23 20 64 65 66 69 6e 65 20 4e 45  ,0)).# define NE
3fd0: 56 45 52 28 58 29 20 20 20 20 20 20 20 28 28 58  VER(X)       ((X
3fe0: 29 3f 28 61 73 73 65 72 74 28 30 29 2c 31 29 3a  )?(assert(0),1):
3ff0: 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  0).#else.# defin
4000: 65 20 41 4c 57 41 59 53 28 58 29 20 20 20 20 20  e ALWAYS(X)     
4010: 20 28 58 29 0a 23 20 64 65 66 69 6e 65 20 4e 45   (X).# define NE
4020: 56 45 52 28 58 29 20 20 20 20 20 20 20 28 58 29  VER(X)       (X)
4030: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53  .#endif../*.** S
4040: 6f 6d 65 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75  ome malloc failu
4050: 72 65 73 20 61 72 65 20 6f 6e 6c 79 20 70 6f 73  res are only pos
4060: 73 69 62 6c 65 20 69 66 20 53 51 4c 49 54 45 5f  sible if SQLITE_
4070: 54 45 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52  TEST_REALLOC_STR
4080: 45 53 53 20 69 73 0a 2a 2a 20 64 65 66 69 6e 65  ESS is.** define
4090: 64 2e 20 20 57 65 20 6e 65 65 64 20 74 6f 20 64  d.  We need to d
40a0: 65 66 65 6e 64 20 61 67 61 69 6e 73 74 20 74 68  efend against th
40b0: 6f 73 65 20 66 61 69 6c 75 72 65 73 20 77 68 65  ose failures whe
40c0: 6e 20 74 65 73 74 69 6e 67 20 77 69 74 68 0a 2a  n testing with.*
40d0: 2a 20 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45  * SQLITE_TEST_RE
40e0: 41 4c 4c 4f 43 5f 53 54 52 45 53 53 2c 20 62 75  ALLOC_STRESS, bu
40f0: 74 20 77 65 20 64 6f 6e 27 74 20 77 61 6e 74 20  t we don't want 
4100: 74 68 65 20 75 6e 72 65 61 63 68 61 62 6c 65 20  the unreachable 
4110: 62 72 61 6e 63 68 65 73 0a 2a 2a 20 64 75 72 69  branches.** duri
4120: 6e 67 20 61 20 6e 6f 72 6d 61 6c 20 62 75 69 6c  ng a normal buil
4130: 64 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  d.  The followin
4140: 67 20 6d 61 63 72 6f 20 63 61 6e 20 62 65 20 75  g macro can be u
4150: 73 65 64 20 74 6f 20 64 69 73 61 62 6c 65 20 74  sed to disable t
4160: 65 73 74 73 0a 2a 2a 20 74 68 61 74 20 61 72 65  ests.** that are
4170: 20 61 6c 77 61 79 73 20 66 61 6c 73 65 20 65 78   always false ex
4180: 63 65 70 74 20 77 68 65 6e 20 53 51 4c 49 54 45  cept when SQLITE
4190: 5f 54 45 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54  _TEST_REALLOC_ST
41a0: 52 45 53 53 20 69 73 20 73 65 74 2e 0a 2a 2f 0a  RESS is set..*/.
41b0: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
41c0: 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c 4f 43 5f  TE_TEST_REALLOC_
41d0: 53 54 52 45 53 53 29 0a 23 20 64 65 66 69 6e 65  STRESS).# define
41e0: 20 4f 4e 4c 59 5f 49 46 5f 52 45 41 4c 4c 4f 43   ONLY_IF_REALLOC
41f0: 5f 53 54 52 45 53 53 28 58 29 20 20 28 58 29 0a  _STRESS(X)  (X).
4200: 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28 4e  #elif !defined(N
4210: 44 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20  DEBUG).# define 
4220: 4f 4e 4c 59 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f  ONLY_IF_REALLOC_
4230: 53 54 52 45 53 53 28 58 29 20 20 28 28 58 29 3f  STRESS(X)  ((X)?
4240: 28 61 73 73 65 72 74 28 30 29 2c 31 29 3a 30 29  (assert(0),1):0)
4250: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
4260: 4f 4e 4c 59 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f  ONLY_IF_REALLOC_
4270: 53 54 52 45 53 53 28 58 29 20 20 28 30 29 0a 23  STRESS(X)  (0).#
4280: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 63  endif../*.** Dec
4290: 6c 61 72 61 74 69 6f 6e 73 20 75 73 65 64 20 66  larations used f
42a0: 6f 72 20 74 72 61 63 69 6e 67 20 74 68 65 20 6f  or tracing the o
42b0: 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d 20  perating system 
42c0: 69 6e 74 65 72 66 61 63 65 73 2e 0a 2a 2f 0a 23  interfaces..*/.#
42d0: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
42e0: 45 5f 46 4f 52 43 45 5f 4f 53 5f 54 52 41 43 45  E_FORCE_OS_TRACE
42f0: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  ) || defined(SQL
4300: 49 54 45 5f 54 45 53 54 29 20 7c 7c 20 5c 0a 20  ITE_TEST) || \. 
4310: 20 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49     (defined(SQLI
4320: 54 45 5f 44 45 42 55 47 29 20 26 26 20 53 51 4c  TE_DEBUG) && SQL
4330: 49 54 45 5f 4f 53 5f 57 49 4e 29 0a 20 20 65 78  ITE_OS_WIN).  ex
4340: 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33  tern int sqlite3
4350: 4f 53 54 72 61 63 65 3b 0a 23 20 64 65 66 69 6e  OSTrace;.# defin
4360: 65 20 4f 53 54 52 41 43 45 28 58 29 20 20 20 20  e OSTRACE(X)    
4370: 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
4380: 33 4f 53 54 72 61 63 65 20 29 20 73 71 6c 69 74  3OSTrace ) sqlit
4390: 65 33 44 65 62 75 67 50 72 69 6e 74 66 20 58 0a  e3DebugPrintf X.
43a0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
43b0: 48 41 56 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65  HAVE_OS_TRACE.#e
43c0: 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 4f 53 54  lse.# define OST
43d0: 52 41 43 45 28 58 29 0a 23 20 75 6e 64 65 66 20  RACE(X).# undef 
43e0: 20 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f   SQLITE_HAVE_OS_
43f0: 54 52 41 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a  TRACE.#endif../*
4400: 0a 2a 2a 20 49 73 20 74 68 65 20 73 71 6c 69 74  .** Is the sqlit
4410: 65 33 45 72 72 4e 61 6d 65 28 29 20 66 75 6e 63  e3ErrName() func
4420: 74 69 6f 6e 20 6e 65 65 64 65 64 20 69 6e 20 74  tion needed in t
4430: 68 65 20 62 75 69 6c 64 3f 20 20 43 75 72 72 65  he build?  Curre
4440: 6e 74 6c 79 2c 0a 2a 2a 20 69 74 20 69 73 20 6e  ntly,.** it is n
4450: 65 65 64 65 64 20 62 79 20 22 6d 75 74 65 78 5f  eeded by "mutex_
4460: 77 33 32 2e 63 22 20 28 77 68 65 6e 20 64 65 62  w32.c" (when deb
4470: 75 67 67 69 6e 67 29 2c 20 22 6f 73 5f 77 69 6e  ugging), "os_win
4480: 2e 63 22 20 28 77 68 65 6e 0a 2a 2a 20 4f 53 54  .c" (when.** OST
4490: 52 41 43 45 20 69 73 20 65 6e 61 62 6c 65 64 29  RACE is enabled)
44a0: 2c 20 61 6e 64 20 62 79 20 73 65 76 65 72 61 6c  , and by several
44b0: 20 22 74 65 73 74 2a 2e 63 22 20 66 69 6c 65 73   "test*.c" files
44c0: 20 28 77 68 69 63 68 20 61 72 65 0a 2a 2a 20 63   (which are.** c
44d0: 6f 6d 70 69 6c 65 64 20 75 73 69 6e 67 20 53 51  ompiled using SQ
44e0: 4c 49 54 45 5f 54 45 53 54 29 2e 0a 2a 2f 0a 23  LITE_TEST)..*/.#
44f0: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
4500: 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41 43 45 29  E_HAVE_OS_TRACE)
4510: 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
4520: 54 45 5f 54 45 53 54 29 20 7c 7c 20 5c 0a 20 20  TE_TEST) || \.  
4530: 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54    (defined(SQLIT
4540: 45 5f 44 45 42 55 47 29 20 26 26 20 53 51 4c 49  E_DEBUG) && SQLI
4550: 54 45 5f 4f 53 5f 57 49 4e 29 0a 23 20 64 65 66  TE_OS_WIN).# def
4560: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 45 45 44 5f  ine SQLITE_NEED_
4570: 45 52 52 5f 4e 41 4d 45 0a 23 65 6c 73 65 0a 23  ERR_NAME.#else.#
4580: 20 75 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 4e   undef  SQLITE_N
4590: 45 45 44 5f 45 52 52 5f 4e 41 4d 45 0a 23 65 6e  EED_ERR_NAME.#en
45a0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54  dif../*.** SQLIT
45b0: 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e  E_ENABLE_EXPLAIN
45c0: 5f 43 4f 4d 4d 45 4e 54 53 20 69 73 20 69 6e 63  _COMMENTS is inc
45d0: 6f 6d 70 61 74 69 62 6c 65 20 77 69 74 68 20 53  ompatible with S
45e0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41  QLITE_OMIT_EXPLA
45f0: 49 4e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  IN.*/.#ifdef SQL
4600: 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e  ITE_OMIT_EXPLAIN
4610: 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f  .# undef SQLITE_
4620: 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43  ENABLE_EXPLAIN_C
4630: 4f 4d 4d 45 4e 54 53 0a 23 65 6e 64 69 66 0a 0a  OMMENTS.#endif..
4640: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75  /*.** Return tru
4650: 65 20 28 6e 6f 6e 2d 7a 65 72 6f 29 20 69 66 20  e (non-zero) if 
4660: 74 68 65 20 69 6e 70 75 74 20 69 73 20 61 6e 20  the input is an 
4670: 69 6e 74 65 67 65 72 20 74 68 61 74 20 69 73 20  integer that is 
4680: 74 6f 6f 20 6c 61 72 67 65 0a 2a 2a 20 74 6f 20  too large.** to 
4690: 66 69 74 20 69 6e 20 33 32 2d 62 69 74 73 2e 20  fit in 32-bits. 
46a0: 20 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75   This macro is u
46b0: 73 65 64 20 69 6e 73 69 64 65 20 6f 66 20 76 61  sed inside of va
46c0: 72 69 6f 75 73 20 74 65 73 74 63 61 73 65 28 29  rious testcase()
46d0: 0a 2a 2a 20 6d 61 63 72 6f 73 20 74 6f 20 76 65  .** macros to ve
46e0: 72 69 66 79 20 74 68 61 74 20 77 65 20 68 61 76  rify that we hav
46f0: 65 20 74 65 73 74 65 64 20 53 51 4c 69 74 65 20  e tested SQLite 
4700: 66 6f 72 20 6c 61 72 67 65 2d 66 69 6c 65 20 73  for large-file s
4710: 75 70 70 6f 72 74 2e 0a 2a 2f 0a 23 64 65 66 69  upport..*/.#defi
4720: 6e 65 20 49 53 5f 42 49 47 5f 49 4e 54 28 58 29  ne IS_BIG_INT(X)
4730: 20 20 28 28 28 58 29 26 7e 28 69 36 34 29 30 78    (((X)&~(i64)0x
4740: 66 66 66 66 66 66 66 66 29 21 3d 30 29 0a 0a 2f  ffffffff)!=0)../
4750: 2a 0a 2a 2a 20 54 68 65 20 6d 61 63 72 6f 20 75  *.** The macro u
4760: 6e 6c 69 6b 65 6c 79 28 29 20 69 73 20 61 20 68  nlikely() is a h
4770: 69 6e 74 20 74 68 61 74 20 73 75 72 72 6f 75 6e  int that surroun
4780: 64 73 20 61 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20  ds a boolean.** 
4790: 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20  expression that 
47a0: 69 73 20 75 73 75 61 6c 6c 79 20 66 61 6c 73 65  is usually false
47b0: 2e 20 20 4d 61 63 72 6f 20 6c 69 6b 65 6c 79 28  .  Macro likely(
47c0: 29 20 73 75 72 72 6f 75 6e 64 73 0a 2a 2a 20 61  ) surrounds.** a
47d0: 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73   boolean express
47e0: 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75 61  ion that is usua
47f0: 6c 6c 79 20 74 72 75 65 2e 20 20 54 68 65 73 65  lly true.  These
4800: 20 68 69 6e 74 73 20 63 6f 75 6c 64 2c 0a 2a 2a   hints could,.**
4810: 20 69 6e 20 74 68 65 6f 72 79 2c 20 62 65 20 75   in theory, be u
4820: 73 65 64 20 62 79 20 74 68 65 20 63 6f 6d 70 69  sed by the compi
4830: 6c 65 72 20 74 6f 20 67 65 6e 65 72 61 74 65 20  ler to generate 
4840: 62 65 74 74 65 72 20 63 6f 64 65 2c 20 62 75 74  better code, but
4850: 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 74 68  .** currently th
4860: 65 79 20 61 72 65 20 6a 75 73 74 20 63 6f 6d 6d  ey are just comm
4870: 65 6e 74 73 20 66 6f 72 20 68 75 6d 61 6e 20 72  ents for human r
4880: 65 61 64 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69  eaders..*/.#defi
4890: 6e 65 20 6c 69 6b 65 6c 79 28 58 29 20 20 20 20  ne likely(X)    
48a0: 28 58 29 0a 23 64 65 66 69 6e 65 20 75 6e 6c 69  (X).#define unli
48b0: 6b 65 6c 79 28 58 29 20 20 28 58 29 0a 0a 23 69  kely(X)  (X)..#i
48c0: 6e 63 6c 75 64 65 20 22 68 61 73 68 2e 68 22 0a  nclude "hash.h".
48d0: 23 69 6e 63 6c 75 64 65 20 22 70 61 72 73 65 2e  #include "parse.
48e0: 68 22 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64  h".#include <std
48f0: 69 6f 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  io.h>.#include <
4900: 73 74 64 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c 75  stdlib.h>.#inclu
4910: 64 65 20 3c 73 74 72 69 6e 67 2e 68 3e 0a 23 69  de <string.h>.#i
4920: 6e 63 6c 75 64 65 20 3c 61 73 73 65 72 74 2e 68  nclude <assert.h
4930: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 64  >.#include <stdd
4940: 65 66 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 55 73 65  ef.h>../*.** Use
4950: 20 61 20 6d 61 63 72 6f 20 74 6f 20 72 65 70 6c   a macro to repl
4960: 61 63 65 20 6d 65 6d 63 70 79 28 29 20 69 66 20  ace memcpy() if 
4970: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 53 51  compiled with SQ
4980: 4c 49 54 45 5f 49 4e 4c 49 4e 45 5f 4d 45 4d 43  LITE_INLINE_MEMC
4990: 50 59 2e 0a 2a 2a 20 54 68 69 73 20 61 6c 6c 6f  PY..** This allo
49a0: 77 73 20 62 65 74 74 65 72 20 6d 65 61 73 75 72  ws better measur
49b0: 65 6d 65 6e 74 73 20 6f 66 20 77 68 65 72 65 20  ements of where 
49c0: 6d 65 6d 63 70 79 28 29 20 69 73 20 75 73 65 64  memcpy() is used
49d0: 20 77 68 65 6e 20 72 75 6e 6e 69 6e 67 0a 2a 2a   when running.**
49e0: 20 63 61 63 68 65 67 72 69 6e 64 2e 20 20 42 75   cachegrind.  Bu
49f0: 74 20 74 68 69 73 20 6d 61 63 72 6f 20 76 65 72  t this macro ver
4a00: 73 69 6f 6e 20 6f 66 20 6d 65 6d 63 70 79 28 29  sion of memcpy()
4a10: 20 69 73 20 76 65 72 79 20 73 6c 6f 77 20 73 6f   is very slow so
4a20: 20 69 74 0a 2a 2a 20 73 68 6f 75 6c 64 20 6e 6f   it.** should no
4a30: 74 20 62 65 20 75 73 65 64 20 69 6e 20 70 72 6f  t be used in pro
4a40: 64 75 63 74 69 6f 6e 2e 20 20 54 68 69 73 20 69  duction.  This i
4a50: 73 20 61 20 70 65 72 66 6f 72 6d 61 6e 63 65 20  s a performance 
4a60: 6d 65 61 73 75 72 65 6d 65 6e 74 0a 2a 2a 20 68  measurement.** h
4a70: 61 63 6b 20 6f 6e 6c 79 2e 0a 2a 2f 0a 23 69 66  ack only..*/.#if
4a80: 64 65 66 20 53 51 4c 49 54 45 5f 49 4e 4c 49 4e  def SQLITE_INLIN
4a90: 45 5f 4d 45 4d 43 50 59 0a 23 20 64 65 66 69 6e  E_MEMCPY.# defin
4aa0: 65 20 6d 65 6d 63 70 79 28 44 2c 53 2c 4e 29 20  e memcpy(D,S,N) 
4ab0: 7b 63 68 61 72 2a 78 78 64 3d 28 63 68 61 72 2a  {char*xxd=(char*
4ac0: 29 28 44 29 3b 63 6f 6e 73 74 20 63 68 61 72 2a  )(D);const char*
4ad0: 78 78 73 3d 28 63 6f 6e 73 74 20 63 68 61 72 2a  xxs=(const char*
4ae0: 29 28 53 29 3b 5c 0a 20 20 20 20 20 20 20 20 20  )(S);\.         
4af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
4b00: 6e 74 20 78 78 6e 3d 28 4e 29 3b 77 68 69 6c 65  nt xxn=(N);while
4b10: 28 78 78 6e 2d 2d 3e 30 29 2a 28 78 78 64 2b 2b  (xxn-->0)*(xxd++
4b20: 29 3d 2a 28 78 78 73 2b 2b 29 3b 7d 0a 23 65 6e  )=*(xxs++);}.#en
4b30: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 63 6f  dif../*.** If co
4b40: 6d 70 69 6c 69 6e 67 20 66 6f 72 20 61 20 70 72  mpiling for a pr
4b50: 6f 63 65 73 73 6f 72 20 74 68 61 74 20 6c 61 63  ocessor that lac
4b60: 6b 73 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e  ks floating poin
4b70: 74 20 73 75 70 70 6f 72 74 2c 0a 2a 2a 20 73 75  t support,.** su
4b80: 62 73 74 69 74 75 74 65 20 69 6e 74 65 67 65 72  bstitute integer
4b90: 20 66 6f 72 20 66 6c 6f 61 74 69 6e 67 2d 70 6f   for floating-po
4ba0: 69 6e 74 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  int.*/.#ifdef SQ
4bb0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
4bc0: 4e 47 5f 50 4f 49 4e 54 0a 23 20 64 65 66 69 6e  NG_POINT.# defin
4bd0: 65 20 64 6f 75 62 6c 65 20 73 71 6c 69 74 65 5f  e double sqlite_
4be0: 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20 66  int64.# define f
4bf0: 6c 6f 61 74 20 73 71 6c 69 74 65 5f 69 6e 74 36  loat sqlite_int6
4c00: 34 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44  4.# define LONGD
4c10: 4f 55 42 4c 45 5f 54 59 50 45 20 73 71 6c 69 74  OUBLE_TYPE sqlit
4c20: 65 5f 69 6e 74 36 34 0a 23 20 69 66 6e 64 65 66  e_int64.# ifndef
4c30: 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a   SQLITE_BIG_DBL.
4c40: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
4c50: 45 5f 42 49 47 5f 44 42 4c 20 28 28 28 73 71 6c  E_BIG_DBL (((sql
4c60: 69 74 65 33 5f 69 6e 74 36 34 29 31 29 3c 3c 35  ite3_int64)1)<<5
4c70: 30 29 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66  0).# endif.# def
4c80: 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ine SQLITE_OMIT_
4c90: 44 41 54 45 54 49 4d 45 5f 46 55 4e 43 53 20 31  DATETIME_FUNCS 1
4ca0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
4cb0: 5f 4f 4d 49 54 5f 54 52 41 43 45 20 31 0a 23 20  _OMIT_TRACE 1.# 
4cc0: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 49 58  undef SQLITE_MIX
4cd0: 45 44 5f 45 4e 44 49 41 4e 5f 36 34 42 49 54 5f  ED_ENDIAN_64BIT_
4ce0: 46 4c 4f 41 54 0a 23 20 75 6e 64 65 66 20 53 51  FLOAT.# undef SQ
4cf0: 4c 49 54 45 5f 48 41 56 45 5f 49 53 4e 41 4e 0a  LITE_HAVE_ISNAN.
4d00: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
4d10: 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20  QLITE_BIG_DBL.# 
4d20: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
4d30: 47 5f 44 42 4c 20 28 31 65 39 39 29 0a 23 65 6e  G_DBL (1e99).#en
4d40: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54 5f  dif../*.** OMIT_
4d50: 54 45 4d 50 44 42 20 69 73 20 73 65 74 20 74 6f  TEMPDB is set to
4d60: 20 31 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49   1 if SQLITE_OMI
4d70: 54 5f 54 45 4d 50 44 42 20 69 73 20 64 65 66 69  T_TEMPDB is defi
4d80: 6e 65 64 2c 20 6f 72 20 30 0a 2a 2a 20 61 66 74  ned, or 0.** aft
4d90: 65 72 77 61 72 64 2e 20 48 61 76 69 6e 67 20 74  erward. Having t
4da0: 68 69 73 20 6d 61 63 72 6f 20 61 6c 6c 6f 77 73  his macro allows
4db0: 20 75 73 20 74 6f 20 63 61 75 73 65 20 74 68 65   us to cause the
4dc0: 20 43 20 63 6f 6d 70 69 6c 65 72 0a 2a 2a 20 74   C compiler.** t
4dd0: 6f 20 6f 6d 69 74 20 63 6f 64 65 20 75 73 65 64  o omit code used
4de0: 20 62 79 20 54 45 4d 50 20 74 61 62 6c 65 73 20   by TEMP tables 
4df0: 77 69 74 68 6f 75 74 20 6d 65 73 73 79 20 23 69  without messy #i
4e00: 66 6e 64 65 66 20 73 74 61 74 65 6d 65 6e 74 73  fndef statements
4e10: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
4e20: 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 0a 23  TE_OMIT_TEMPDB.#
4e30: 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50  define OMIT_TEMP
4e40: 44 42 20 31 0a 23 65 6c 73 65 0a 23 64 65 66 69  DB 1.#else.#defi
4e50: 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 30  ne OMIT_TEMPDB 0
4e60: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
4e70: 68 65 20 22 66 69 6c 65 20 66 6f 72 6d 61 74 22  he "file format"
4e80: 20 6e 75 6d 62 65 72 20 69 73 20 61 6e 20 69 6e   number is an in
4e90: 74 65 67 65 72 20 74 68 61 74 20 69 73 20 69 6e  teger that is in
4ea0: 63 72 65 6d 65 6e 74 65 64 20 77 68 65 6e 65 76  cremented whenev
4eb0: 65 72 0a 2a 2a 20 74 68 65 20 56 44 42 45 2d 6c  er.** the VDBE-l
4ec0: 65 76 65 6c 20 66 69 6c 65 20 66 6f 72 6d 61 74  evel file format
4ed0: 20 63 68 61 6e 67 65 73 2e 20 20 54 68 65 20 66   changes.  The f
4ee0: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
4ef0: 64 65 66 69 6e 65 20 74 68 65 0a 2a 2a 20 74 68  define the.** th
4f00: 65 20 64 65 66 61 75 6c 74 20 66 69 6c 65 20 66  e default file f
4f10: 6f 72 6d 61 74 20 66 6f 72 20 6e 65 77 20 64 61  ormat for new da
4f20: 74 61 62 61 73 65 73 20 61 6e 64 20 74 68 65 20  tabases and the 
4f30: 6d 61 78 69 6d 75 6d 20 66 69 6c 65 20 66 6f 72  maximum file for
4f40: 6d 61 74 0a 2a 2a 20 74 68 61 74 20 74 68 65 20  mat.** that the 
4f50: 6c 69 62 72 61 72 79 20 63 61 6e 20 72 65 61 64  library can read
4f60: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
4f70: 49 54 45 5f 4d 41 58 5f 46 49 4c 45 5f 46 4f 52  ITE_MAX_FILE_FOR
4f80: 4d 41 54 20 34 0a 23 69 66 6e 64 65 66 20 53 51  MAT 4.#ifndef SQ
4f90: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c  LITE_DEFAULT_FIL
4fa0: 45 5f 46 4f 52 4d 41 54 0a 23 20 64 65 66 69 6e  E_FORMAT.# defin
4fb0: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
4fc0: 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 34 0a 23  _FILE_FORMAT 4.#
4fd0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 74  endif../*.** Det
4fe0: 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74  ermine whether t
4ff0: 72 69 67 67 65 72 73 20 61 72 65 20 72 65 63 75  riggers are recu
5000: 72 73 69 76 65 20 62 79 20 64 65 66 61 75 6c 74  rsive by default
5010: 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65 0a 2a  .  This can be.*
5020: 2a 20 63 68 61 6e 67 65 64 20 61 74 20 72 75 6e  * changed at run
5030: 2d 74 69 6d 65 20 75 73 69 6e 67 20 61 20 70 72  -time using a pr
5040: 61 67 6d 61 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  agma..*/.#ifndef
5050: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
5060: 52 45 43 55 52 53 49 56 45 5f 54 52 49 47 47 45  RECURSIVE_TRIGGE
5070: 52 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  RS.# define SQLI
5080: 54 45 5f 44 45 46 41 55 4c 54 5f 52 45 43 55 52  TE_DEFAULT_RECUR
5090: 53 49 56 45 5f 54 52 49 47 47 45 52 53 20 30 0a  SIVE_TRIGGERS 0.
50a0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 72  #endif../*.** Pr
50b0: 6f 76 69 64 65 20 61 20 64 65 66 61 75 6c 74 20  ovide a default 
50c0: 76 61 6c 75 65 20 66 6f 72 20 53 51 4c 49 54 45  value for SQLITE
50d0: 5f 54 45 4d 50 5f 53 54 4f 52 45 20 69 6e 20 63  _TEMP_STORE in c
50e0: 61 73 65 20 69 74 20 69 73 20 6e 6f 74 20 73 70  ase it is not sp
50f0: 65 63 69 66 69 65 64 0a 2a 2a 20 6f 6e 20 74 68  ecified.** on th
5100: 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 0a 2a  e command-line.*
5110: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
5120: 5f 54 45 4d 50 5f 53 54 4f 52 45 0a 23 20 64 65  _TEMP_STORE.# de
5130: 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d 50  fine SQLITE_TEMP
5140: 5f 53 54 4f 52 45 20 31 0a 23 65 6e 64 69 66 0a  _STORE 1.#endif.
5150: 0a 2f 2a 0a 2a 2a 20 49 66 20 6e 6f 20 76 61 6c  ./*.** If no val
5160: 75 65 20 68 61 73 20 62 65 65 6e 20 70 72 6f 76  ue has been prov
5170: 69 64 65 64 20 66 6f 72 20 53 51 4c 49 54 45 5f  ided for SQLITE_
5180: 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  MAX_WORKER_THREA
5190: 44 53 2c 20 6f 72 20 69 66 0a 2a 2a 20 53 51 4c  DS, or if.** SQL
51a0: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20 69  ITE_TEMP_STORE i
51b0: 73 20 73 65 74 20 74 6f 20 33 20 28 6e 65 76 65  s set to 3 (neve
51c0: 72 20 75 73 65 20 74 65 6d 70 6f 72 61 72 79 20  r use temporary 
51d0: 66 69 6c 65 73 29 2c 20 73 65 74 20 69 74 0a 2a  files), set it.*
51e0: 2a 20 74 6f 20 7a 65 72 6f 2e 0a 2a 2f 0a 23 69  * to zero..*/.#i
51f0: 66 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  f SQLITE_TEMP_ST
5200: 4f 52 45 3d 3d 33 20 7c 7c 20 53 51 4c 49 54 45  ORE==3 || SQLITE
5210: 5f 54 48 52 45 41 44 53 41 46 45 3d 3d 30 0a 23  _THREADSAFE==0.#
5220: 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41   undef SQLITE_MA
5230: 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  X_WORKER_THREADS
5240: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5250: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
5260: 41 44 53 20 30 0a 23 65 6e 64 69 66 0a 23 69 66  ADS 0.#endif.#if
5270: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  ndef SQLITE_MAX_
5280: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23  WORKER_THREADS.#
5290: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
52a0: 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
52b0: 53 20 38 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  S 8.#endif.#ifnd
52c0: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
52d0: 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  T_WORKER_THREADS
52e0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
52f0: 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f  _DEFAULT_WORKER_
5300: 54 48 52 45 41 44 53 20 30 0a 23 65 6e 64 69 66  THREADS 0.#endif
5310: 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41  .#if SQLITE_DEFA
5320: 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  ULT_WORKER_THREA
5330: 44 53 3e 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f  DS>SQLITE_MAX_WO
5340: 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 75  RKER_THREADS.# u
5350: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  ndef SQLITE_MAX_
5360: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23  WORKER_THREADS.#
5370: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
5380: 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
5390: 53 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  S SQLITE_DEFAULT
53a0: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a  _WORKER_THREADS.
53b0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
53c0: 65 20 64 65 66 61 75 6c 74 20 69 6e 69 74 69 61  e default initia
53d0: 6c 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 66 6f 72  l allocation for
53e0: 20 74 68 65 20 70 61 67 65 63 61 63 68 65 20 77   the pagecache w
53f0: 68 65 6e 20 75 73 69 6e 67 20 73 65 70 61 72 61  hen using separa
5400: 74 65 0a 2a 2a 20 70 61 67 65 63 61 63 68 65 73  te.** pagecaches
5410: 20 66 6f 72 20 65 61 63 68 20 64 61 74 61 62 61   for each databa
5420: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20  se connection.  
5430: 41 20 70 6f 73 69 74 69 76 65 20 6e 75 6d 62 65  A positive numbe
5440: 72 20 69 73 20 74 68 65 0a 2a 2a 20 6e 75 6d 62  r is the.** numb
5450: 65 72 20 6f 66 20 70 61 67 65 73 2e 20 20 41 20  er of pages.  A 
5460: 6e 65 67 61 74 69 76 65 20 6e 75 6d 62 65 72 20  negative number 
5470: 4e 20 74 72 61 6e 73 6c 61 74 69 6f 6e 73 20 6d  N translations m
5480: 65 61 6e 73 20 74 68 61 74 20 61 20 62 75 66 66  eans that a buff
5490: 65 72 0a 2a 2a 20 6f 66 20 2d 31 30 32 34 2a 4e  er.** of -1024*N
54a0: 20 62 79 74 65 73 20 69 73 20 61 6c 6c 6f 63 61   bytes is alloca
54b0: 74 65 64 20 61 6e 64 20 75 73 65 64 20 66 6f 72  ted and used for
54c0: 20 61 73 20 6d 61 6e 79 20 70 61 67 65 73 20 61   as many pages a
54d0: 73 20 69 74 20 77 69 6c 6c 20 68 6f 6c 64 2e 0a  s it will hold..
54e0: 2a 2a 0a 2a 2a 20 54 68 65 20 64 65 66 61 75 6c  **.** The defaul
54f0: 74 20 76 61 6c 75 65 20 6f 66 20 22 32 30 22 20  t value of "20" 
5500: 77 61 73 20 63 68 6f 6f 73 65 6e 20 74 6f 20 6d  was choosen to m
5510: 69 6e 69 6d 69 7a 65 20 74 68 65 20 72 75 6e 2d  inimize the run-
5520: 74 69 6d 65 20 6f 66 20 74 68 65 0a 2a 2a 20 73  time of the.** s
5530: 70 65 65 64 74 65 73 74 31 20 74 65 73 74 20 70  peedtest1 test p
5540: 72 6f 67 72 61 6d 20 77 69 74 68 20 6f 70 74 69  rogram with opti
5550: 6f 6e 73 3a 20 2d 2d 73 68 72 69 6e 6b 2d 6d 65  ons: --shrink-me
5560: 6d 6f 72 79 20 2d 2d 72 65 70 72 65 70 61 72 65  mory --reprepare
5570: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
5580: 54 45 5f 44 45 46 41 55 4c 54 5f 50 43 41 43 48  TE_DEFAULT_PCACH
5590: 45 5f 49 4e 49 54 53 5a 0a 23 20 64 65 66 69 6e  E_INITSZ.# defin
55a0: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
55b0: 5f 50 43 41 43 48 45 5f 49 4e 49 54 53 5a 20 32  _PCACHE_INITSZ 2
55c0: 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
55d0: 54 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  The compile-time
55e0: 20 6f 70 74 69 6f 6e 73 20 53 51 4c 49 54 45 5f   options SQLITE_
55f0: 4d 4d 41 50 5f 52 45 41 44 57 52 49 54 45 20 61  MMAP_READWRITE a
5600: 6e 64 20 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e  nd .** SQLITE_EN
5610: 41 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f 4d 49  ABLE_BATCH_ATOMI
5620: 43 5f 57 52 49 54 45 20 61 72 65 20 6e 6f 74 20  C_WRITE are not 
5630: 63 6f 6d 70 61 74 69 62 6c 65 20 77 69 74 68 20  compatible with 
5640: 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a 2a 2a 20  one another..** 
5650: 59 6f 75 20 6d 75 73 74 20 63 68 6f 6f 73 65 20  You must choose 
5660: 6f 6e 65 20 6f 72 20 74 68 65 20 6f 74 68 65 72  one or the other
5670: 20 28 6f 72 20 6e 65 69 74 68 65 72 29 20 62 75   (or neither) bu
5680: 74 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a 2f 0a 23  t not both..*/.#
5690: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
56a0: 45 5f 4d 4d 41 50 5f 52 45 41 44 57 52 49 54 45  E_MMAP_READWRITE
56b0: 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c  ) && defined(SQL
56c0: 49 54 45 5f 45 4e 41 42 4c 45 5f 42 41 54 43 48  ITE_ENABLE_BATCH
56d0: 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 29 0a 23  _ATOMIC_WRITE).#
56e0: 65 72 72 6f 72 20 43 61 6e 6e 6f 74 20 75 73 65  error Cannot use
56f0: 20 62 6f 74 68 20 53 51 4c 49 54 45 5f 4d 4d 41   both SQLITE_MMA
5700: 50 5f 52 45 41 44 57 52 49 54 45 20 61 6e 64 20  P_READWRITE and 
5710: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 42 41  SQLITE_ENABLE_BA
5720: 54 43 48 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45  TCH_ATOMIC_WRITE
5730: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 47  .#endif../*.** G
5740: 43 43 20 64 6f 65 73 20 6e 6f 74 20 64 65 66 69  CC does not defi
5750: 6e 65 20 74 68 65 20 6f 66 66 73 65 74 6f 66 28  ne the offsetof(
5760: 29 20 6d 61 63 72 6f 20 73 6f 20 77 65 27 6c 6c  ) macro so we'll
5770: 20 68 61 76 65 20 74 6f 20 64 6f 20 69 74 0a 2a   have to do it.*
5780: 2a 20 6f 75 72 73 65 6c 76 65 73 2e 0a 2a 2f 0a  * ourselves..*/.
5790: 23 69 66 6e 64 65 66 20 6f 66 66 73 65 74 6f 66  #ifndef offsetof
57a0: 0a 23 64 65 66 69 6e 65 20 6f 66 66 73 65 74 6f  .#define offseto
57b0: 66 28 53 54 52 55 43 54 55 52 45 2c 46 49 45 4c  f(STRUCTURE,FIEL
57c0: 44 29 20 28 28 69 6e 74 29 28 28 63 68 61 72 2a  D) ((int)((char*
57d0: 29 26 28 28 53 54 52 55 43 54 55 52 45 2a 29 30  )&((STRUCTURE*)0
57e0: 29 2d 3e 46 49 45 4c 44 29 29 0a 23 65 6e 64 69  )->FIELD)).#endi
57f0: 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20  f../*.** Macros 
5800: 74 6f 20 63 6f 6d 70 75 74 65 20 6d 69 6e 69 6d  to compute minim
5810: 75 6d 20 61 6e 64 20 6d 61 78 69 6d 75 6d 20 6f  um and maximum o
5820: 66 20 74 77 6f 20 6e 75 6d 62 65 72 73 2e 0a 2a  f two numbers..*
5830: 2f 0a 23 69 66 6e 64 65 66 20 4d 49 4e 0a 23 20  /.#ifndef MIN.# 
5840: 64 65 66 69 6e 65 20 4d 49 4e 28 41 2c 42 29 20  define MIN(A,B) 
5850: 28 28 41 29 3c 28 42 29 3f 28 41 29 3a 28 42 29  ((A)<(B)?(A):(B)
5860: 29 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  ).#endif.#ifndef
5870: 20 4d 41 58 0a 23 20 64 65 66 69 6e 65 20 4d 41   MAX.# define MA
5880: 58 28 41 2c 42 29 20 28 28 41 29 3e 28 42 29 3f  X(A,B) ((A)>(B)?
5890: 28 41 29 3a 28 42 29 29 0a 23 65 6e 64 69 66 0a  (A):(B)).#endif.
58a0: 0a 2f 2a 0a 2a 2a 20 53 77 61 70 20 74 77 6f 20  ./*.** Swap two 
58b0: 6f 62 6a 65 63 74 73 20 6f 66 20 74 79 70 65 20  objects of type 
58c0: 54 59 50 45 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  TYPE..*/.#define
58d0: 20 53 57 41 50 28 54 59 50 45 2c 41 2c 42 29 20   SWAP(TYPE,A,B) 
58e0: 7b 54 59 50 45 20 74 3d 41 3b 20 41 3d 42 3b 20  {TYPE t=A; A=B; 
58f0: 42 3d 74 3b 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 65  B=t;}../*.** Che
5900: 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74 68 69  ck to see if thi
5910: 73 20 6d 61 63 68 69 6e 65 20 75 73 65 73 20 45  s machine uses E
5920: 42 43 44 49 43 2e 20 20 28 59 65 73 2c 20 62 65  BCDIC.  (Yes, be
5930: 6c 69 65 76 65 20 69 74 20 6f 72 0a 2a 2a 20 6e  lieve it or.** n
5940: 6f 74 2c 20 74 68 65 72 65 20 61 72 65 20 73 74  ot, there are st
5950: 69 6c 6c 20 6d 61 63 68 69 6e 65 73 20 6f 75 74  ill machines out
5960: 20 74 68 65 72 65 20 74 68 61 74 20 75 73 65 20   there that use 
5970: 45 42 43 44 49 43 2e 29 0a 2a 2f 0a 23 69 66 20  EBCDIC.).*/.#if 
5980: 27 41 27 20 3d 3d 20 27 5c 33 30 31 27 0a 23 20  'A' == '\301'.# 
5990: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 42  define SQLITE_EB
59a0: 43 44 49 43 20 31 0a 23 65 6c 73 65 0a 23 20 64  CDIC 1.#else.# d
59b0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 53 43  efine SQLITE_ASC
59c0: 49 49 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  II 1.#endif../*.
59d0: 2a 2a 20 49 6e 74 65 67 65 72 73 20 6f 66 20 6b  ** Integers of k
59e0: 6e 6f 77 6e 20 73 69 7a 65 73 2e 20 20 54 68 65  nown sizes.  The
59f0: 73 65 20 74 79 70 65 64 65 66 73 20 6d 69 67 68  se typedefs migh
5a00: 74 20 63 68 61 6e 67 65 20 66 6f 72 20 61 72 63  t change for arc
5a10: 68 69 74 65 63 74 75 72 65 73 0a 2a 2a 20 77 68  hitectures.** wh
5a20: 65 72 65 20 74 68 65 20 73 69 7a 65 73 20 76 65  ere the sizes ve
5a30: 72 79 2e 20 20 50 72 65 70 72 6f 63 65 73 73 6f  ry.  Preprocesso
5a40: 72 20 6d 61 63 72 6f 73 20 61 72 65 20 61 76 61  r macros are ava
5a50: 69 6c 61 62 6c 65 20 73 6f 20 74 68 61 74 20 74  ilable so that t
5a60: 68 65 0a 2a 2a 20 74 79 70 65 73 20 63 61 6e 20  he.** types can 
5a70: 62 65 20 63 6f 6e 76 65 6e 69 65 6e 74 6c 79 20  be conveniently 
5a80: 72 65 64 65 66 69 6e 65 64 20 61 74 20 63 6f 6d  redefined at com
5a90: 70 69 6c 65 2d 74 79 70 65 2e 20 20 4c 69 6b 65  pile-type.  Like
5aa0: 20 74 68 69 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20   this:.**.**    
5ab0: 20 20 20 20 20 63 63 20 27 2d 44 55 49 4e 54 50       cc '-DUINTP
5ac0: 54 52 5f 54 59 50 45 3d 6c 6f 6e 67 20 6c 6f 6e  TR_TYPE=long lon
5ad0: 67 20 69 6e 74 27 20 2e 2e 2e 0a 2a 2f 0a 23 69  g int' ....*/.#i
5ae0: 66 6e 64 65 66 20 55 49 4e 54 33 32 5f 54 59 50  fndef UINT32_TYP
5af0: 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 55  E.# ifdef HAVE_U
5b00: 49 4e 54 33 32 5f 54 0a 23 20 20 64 65 66 69 6e  INT32_T.#  defin
5b10: 65 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75 69  e UINT32_TYPE ui
5b20: 6e 74 33 32 5f 74 0a 23 20 65 6c 73 65 0a 23 20  nt32_t.# else.# 
5b30: 20 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f 54   define UINT32_T
5b40: 59 50 45 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  YPE unsigned int
5b50: 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  .# endif.#endif.
5b60: 23 69 66 6e 64 65 66 20 55 49 4e 54 31 36 5f 54  #ifndef UINT16_T
5b70: 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45  YPE.# ifdef HAVE
5b80: 5f 55 49 4e 54 31 36 5f 54 0a 23 20 20 64 65 66  _UINT16_T.#  def
5b90: 69 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45 20  ine UINT16_TYPE 
5ba0: 75 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a  uint16_t.# else.
5bb0: 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31 36  #  define UINT16
5bc0: 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20 73  _TYPE unsigned s
5bd0: 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69 66  hort int.# endif
5be0: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
5bf0: 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69 66 64  INT16_TYPE.# ifd
5c00: 65 66 20 48 41 56 45 5f 49 4e 54 31 36 5f 54 0a  ef HAVE_INT16_T.
5c10: 23 20 20 64 65 66 69 6e 65 20 49 4e 54 31 36 5f  #  define INT16_
5c20: 54 59 50 45 20 69 6e 74 31 36 5f 74 0a 23 20 65  TYPE int16_t.# e
5c30: 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 4e  lse.#  define IN
5c40: 54 31 36 5f 54 59 50 45 20 73 68 6f 72 74 20 69  T16_TYPE short i
5c50: 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69  nt.# endif.#endi
5c60: 66 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 38 5f  f.#ifndef UINT8_
5c70: 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56  TYPE.# ifdef HAV
5c80: 45 5f 55 49 4e 54 38 5f 54 0a 23 20 20 64 65 66  E_UINT8_T.#  def
5c90: 69 6e 65 20 55 49 4e 54 38 5f 54 59 50 45 20 75  ine UINT8_TYPE u
5ca0: 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23 20  int8_t.# else.# 
5cb0: 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f 54 59   define UINT8_TY
5cc0: 50 45 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  PE unsigned char
5cd0: 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  .# endif.#endif.
5ce0: 23 69 66 6e 64 65 66 20 49 4e 54 38 5f 54 59 50  #ifndef INT8_TYP
5cf0: 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 49  E.# ifdef HAVE_I
5d00: 4e 54 38 5f 54 0a 23 20 20 64 65 66 69 6e 65 20  NT8_T.#  define 
5d10: 49 4e 54 38 5f 54 59 50 45 20 69 6e 74 38 5f 74  INT8_TYPE int8_t
5d20: 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e  .# else.#  defin
5d30: 65 20 49 4e 54 38 5f 54 59 50 45 20 73 69 67 6e  e INT8_TYPE sign
5d40: 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69 66 0a  ed char.# endif.
5d50: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 4c  #endif.#ifndef L
5d60: 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 0a 23  ONGDOUBLE_TYPE.#
5d70: 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55 42   define LONGDOUB
5d80: 4c 45 5f 54 59 50 45 20 6c 6f 6e 67 20 64 6f 75  LE_TYPE long dou
5d90: 62 6c 65 0a 23 65 6e 64 69 66 0a 74 79 70 65 64  ble.#endif.typed
5da0: 65 66 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20  ef sqlite_int64 
5db0: 69 36 34 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  i64;          /*
5dc0: 20 38 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69   8-byte signed i
5dd0: 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65  nteger */.typede
5de0: 66 20 73 71 6c 69 74 65 5f 75 69 6e 74 36 34 20  f sqlite_uint64 
5df0: 75 36 34 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  u64;         /* 
5e00: 38 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20  8-byte unsigned 
5e10: 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64  integer */.typed
5e20: 65 66 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75  ef UINT32_TYPE u
5e30: 33 32 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  32;           /*
5e40: 20 34 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64   4-byte unsigned
5e50: 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65   integer */.type
5e60: 64 65 66 20 55 49 4e 54 31 36 5f 54 59 50 45 20  def UINT16_TYPE 
5e70: 75 31 36 3b 20 20 20 20 20 20 20 20 20 20 20 2f  u16;           /
5e80: 2a 20 32 2d 62 79 74 65 20 75 6e 73 69 67 6e 65  * 2-byte unsigne
5e90: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70  d integer */.typ
5ea0: 65 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45 20  edef INT16_TYPE 
5eb0: 69 31 36 3b 20 20 20 20 20 20 20 20 20 20 20 20  i16;            
5ec0: 2f 2a 20 32 2d 62 79 74 65 20 73 69 67 6e 65 64  /* 2-byte signed
5ed0: 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65   integer */.type
5ee0: 64 65 66 20 55 49 4e 54 38 5f 54 59 50 45 20 75  def UINT8_TYPE u
5ef0: 38 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  8;             /
5f00: 2a 20 31 2d 62 79 74 65 20 75 6e 73 69 67 6e 65  * 1-byte unsigne
5f10: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70  d integer */.typ
5f20: 65 64 65 66 20 49 4e 54 38 5f 54 59 50 45 20 69  edef INT8_TYPE i
5f30: 38 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  8;              
5f40: 2f 2a 20 31 2d 62 79 74 65 20 73 69 67 6e 65 64  /* 1-byte signed
5f50: 20 69 6e 74 65 67 65 72 20 2a 2f 0a 0a 2f 2a 0a   integer */../*.
5f60: 2a 2a 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33  ** SQLITE_MAX_U3
5f70: 32 20 69 73 20 61 20 75 36 34 20 63 6f 6e 73 74  2 is a u64 const
5f80: 61 6e 74 20 74 68 61 74 20 69 73 20 74 68 65 20  ant that is the 
5f90: 6d 61 78 69 6d 75 6d 20 75 36 34 20 76 61 6c 75  maximum u64 valu
5fa0: 65 0a 2a 2a 20 74 68 61 74 20 63 61 6e 20 62 65  e.** that can be
5fb0: 20 73 74 6f 72 65 64 20 69 6e 20 61 20 75 33 32   stored in a u32
5fc0: 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66   without loss of
5fd0: 20 64 61 74 61 2e 20 20 54 68 65 20 76 61 6c 75   data.  The valu
5fe0: 65 0a 2a 2a 20 69 73 20 30 78 30 30 30 30 30 30  e.** is 0x000000
5ff0: 30 30 66 66 66 66 66 66 66 66 2e 20 20 42 75 74  00ffffffff.  But
6000: 20 62 65 63 61 75 73 65 20 6f 66 20 71 75 69 72   because of quir
6010: 6b 73 20 6f 66 20 73 6f 6d 65 20 63 6f 6d 70 69  ks of some compi
6020: 6c 65 72 73 2c 20 77 65 0a 2a 2a 20 68 61 76 65  lers, we.** have
6030: 20 74 6f 20 73 70 65 63 69 66 79 20 74 68 65 20   to specify the 
6040: 76 61 6c 75 65 20 69 6e 20 74 68 65 20 6c 65 73  value in the les
6050: 73 20 69 6e 74 75 69 74 69 76 65 20 6d 61 6e 6e  s intuitive mann
6060: 65 72 20 73 68 6f 77 6e 3a 0a 2a 2f 0a 23 64 65  er shown:.*/.#de
6070: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
6080: 55 33 32 20 20 28 28 28 28 75 36 34 29 31 29 3c  U32  ((((u64)1)<
6090: 3c 33 32 29 2d 31 29 0a 0a 2f 2a 0a 2a 2a 20 54  <32)-1)../*.** T
60a0: 68 65 20 64 61 74 61 74 79 70 65 20 75 73 65 64  he datatype used
60b0: 20 74 6f 20 73 74 6f 72 65 20 65 73 74 69 6d 61   to store estima
60c0: 74 65 73 20 6f 66 20 74 68 65 20 6e 75 6d 62 65  tes of the numbe
60d0: 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 61 0a 2a  r of rows in a.*
60e0: 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  * table or index
60f0: 2e 20 20 54 68 69 73 20 69 73 20 61 6e 20 75 6e  .  This is an un
6100: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 74  signed integer t
6110: 79 70 65 2e 20 20 46 6f 72 20 39 39 2e 39 25 20  ype.  For 99.9% 
6120: 6f 66 0a 2a 2a 20 74 68 65 20 77 6f 72 6c 64 2c  of.** the world,
6130: 20 61 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65   a 32-bit intege
6140: 72 20 69 73 20 73 75 66 66 69 63 69 65 6e 74 2e  r is sufficient.
6150: 20 20 42 75 74 20 61 20 36 34 2d 62 69 74 20 69    But a 64-bit i
6160: 6e 74 65 67 65 72 0a 2a 2a 20 63 61 6e 20 62 65  nteger.** can be
6170: 20 75 73 65 64 20 61 74 20 63 6f 6d 70 69 6c 65   used at compile
6180: 2d 74 69 6d 65 20 69 66 20 64 65 73 69 72 65 64  -time if desired
6190: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
61a0: 54 45 5f 36 34 42 49 54 5f 53 54 41 54 53 0a 20  TE_64BIT_STATS. 
61b0: 74 79 70 65 64 65 66 20 75 36 34 20 74 52 6f 77  typedef u64 tRow
61c0: 63 6e 74 3b 20 20 20 20 2f 2a 20 36 34 2d 62 69  cnt;    /* 64-bi
61d0: 74 20 6f 6e 6c 79 20 69 66 20 72 65 71 75 65 73  t only if reques
61e0: 74 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74  ted at compile-t
61f0: 69 6d 65 20 2a 2f 0a 23 65 6c 73 65 0a 20 74 79  ime */.#else. ty
6200: 70 65 64 65 66 20 75 33 32 20 74 52 6f 77 63 6e  pedef u32 tRowcn
6210: 74 3b 20 20 20 20 2f 2a 20 33 32 2d 62 69 74 20  t;    /* 32-bit 
6220: 69 73 20 74 68 65 20 64 65 66 61 75 6c 74 20 2a  is the default *
6230: 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  /.#endif../*.** 
6240: 45 73 74 69 6d 61 74 65 64 20 71 75 61 6e 74 69  Estimated quanti
6250: 74 69 65 73 20 75 73 65 64 20 66 6f 72 20 71 75  ties used for qu
6260: 65 72 79 20 70 6c 61 6e 6e 69 6e 67 20 61 72 65  ery planning are
6270: 20 73 74 6f 72 65 64 20 61 73 20 31 36 2d 62 69   stored as 16-bi
6280: 74 0a 2a 2a 20 6c 6f 67 61 72 69 74 68 6d 73 2e  t.** logarithms.
6290: 20 20 46 6f 72 20 71 75 61 6e 74 69 74 79 20 58    For quantity X
62a0: 2c 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72  , the value stor
62b0: 65 64 20 69 73 20 31 30 2a 6c 6f 67 32 28 58 29  ed is 10*log2(X)
62c0: 2e 20 20 54 68 69 73 0a 2a 2a 20 67 69 76 65 73  .  This.** gives
62d0: 20 61 20 70 6f 73 73 69 62 6c 65 20 72 61 6e 67   a possible rang
62e0: 65 20 6f 66 20 76 61 6c 75 65 73 20 6f 66 20 61  e of values of a
62f0: 70 70 72 6f 78 69 6d 61 74 65 6c 79 20 31 2e 30  pproximately 1.0
6300: 65 39 38 36 20 74 6f 20 31 65 2d 39 38 36 2e 0a  e986 to 1e-986..
6310: 2a 2a 20 42 75 74 20 74 68 65 20 61 6c 6c 6f 77  ** But the allow
6320: 65 64 20 76 61 6c 75 65 73 20 61 72 65 20 22 67  ed values are "g
6330: 72 61 69 6e 79 22 2e 20 20 4e 6f 74 20 65 76 65  rainy".  Not eve
6340: 72 79 20 76 61 6c 75 65 20 69 73 20 72 65 70 72  ry value is repr
6350: 65 73 65 6e 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f  esentable..** Fo
6360: 72 20 65 78 61 6d 70 6c 65 2c 20 71 75 61 6e 74  r example, quant
6370: 69 74 69 65 73 20 31 36 20 61 6e 64 20 31 37 20  ities 16 and 17 
6380: 61 72 65 20 62 6f 74 68 20 72 65 70 72 65 73 65  are both represe
6390: 6e 74 65 64 20 62 79 20 61 20 4c 6f 67 45 73 74  nted by a LogEst
63a0: 0a 2a 2a 20 6f 66 20 34 30 2e 20 20 48 6f 77 65  .** of 40.  Howe
63b0: 76 65 72 2c 20 73 69 6e 63 65 20 4c 6f 67 45 73  ver, since LogEs
63c0: 74 20 71 75 61 6e 74 69 74 69 65 73 20 61 72 65  t quantities are
63d0: 20 73 75 70 70 6f 73 65 20 74 6f 20 62 65 20 65   suppose to be e
63e0: 73 74 69 6d 61 74 65 73 2c 0a 2a 2a 20 6e 6f 74  stimates,.** not
63f0: 20 65 78 61 63 74 20 76 61 6c 75 65 73 2c 20 74   exact values, t
6400: 68 69 73 20 69 6d 70 72 65 63 69 73 69 6f 6e 20  his imprecision 
6410: 69 73 20 6e 6f 74 20 61 20 70 72 6f 62 6c 65 6d  is not a problem
6420: 2e 0a 2a 2a 0a 2a 2a 20 22 4c 6f 67 45 73 74 22  ..**.** "LogEst"
6430: 20 69 73 20 73 68 6f 72 74 20 66 6f 72 20 22 4c   is short for "L
6440: 6f 67 61 72 69 74 68 6d 69 63 20 45 73 74 69 6d  ogarithmic Estim
6450: 61 74 65 22 2e 0a 2a 2a 0a 2a 2a 20 45 78 61 6d  ate"..**.** Exam
6460: 70 6c 65 73 3a 0a 2a 2a 20 20 20 20 20 20 31 20  ples:.**      1 
6470: 2d 3e 20 30 20 20 20 20 20 20 20 20 20 20 20 20  -> 0            
6480: 20 20 32 30 20 2d 3e 20 34 33 20 20 20 20 20 20    20 -> 43      
6490: 20 20 20 20 31 30 30 30 30 20 2d 3e 20 31 33 32      10000 -> 132
64a0: 0a 2a 2a 20 20 20 20 20 20 32 20 2d 3e 20 31 30  .**      2 -> 10
64b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 32 35 20               25 
64c0: 2d 3e 20 34 36 20 20 20 20 20 20 20 20 20 20 32  -> 46          2
64d0: 35 30 30 30 20 2d 3e 20 31 34 36 0a 2a 2a 20 20  5000 -> 146.**  
64e0: 20 20 20 20 33 20 2d 3e 20 31 36 20 20 20 20 20      3 -> 16     
64f0: 20 20 20 20 20 20 20 31 30 30 20 2d 3e 20 36 36         100 -> 66
6500: 20 20 20 20 20 20 20 20 31 30 30 30 30 30 30 20          1000000 
6510: 2d 3e 20 31 39 39 0a 2a 2a 20 20 20 20 20 20 34  -> 199.**      4
6520: 20 2d 3e 20 32 30 20 20 20 20 20 20 20 20 20 20   -> 20          
6530: 20 31 30 30 30 20 2d 3e 20 39 39 20 20 20 20 20   1000 -> 99     
6540: 20 20 20 31 30 34 38 35 37 36 20 2d 3e 20 32 30     1048576 -> 20
6550: 30 0a 2a 2a 20 20 20 20 20 31 30 20 2d 3e 20 33  0.**     10 -> 3
6560: 33 20 20 20 20 20 20 20 20 20 20 20 31 30 32 34  3           1024
6570: 20 2d 3e 20 31 30 30 20 20 20 20 34 32 39 34 39   -> 100    42949
6580: 36 37 32 39 36 20 2d 3e 20 33 32 30 0a 2a 2a 0a  67296 -> 320.**.
6590: 2a 2a 20 54 68 65 20 4c 6f 67 45 73 74 20 63 61  ** The LogEst ca
65a0: 6e 20 62 65 20 6e 65 67 61 74 69 76 65 20 74 6f  n be negative to
65b0: 20 69 6e 64 69 63 61 74 65 20 66 72 61 63 74 69   indicate fracti
65c0: 6f 6e 61 6c 20 76 61 6c 75 65 73 2e 0a 2a 2a 20  onal values..** 
65d0: 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 0a 2a 2a 20  Examples:.**.** 
65e0: 20 20 20 30 2e 35 20 2d 3e 20 2d 31 30 20 20 20     0.5 -> -10   
65f0: 20 20 20 20 20 20 20 20 30 2e 31 20 2d 3e 20 2d          0.1 -> -
6600: 33 33 20 20 20 20 20 20 20 20 30 2e 30 36 32 35  33        0.0625
6610: 20 2d 3e 20 2d 34 30 0a 2a 2f 0a 74 79 70 65 64   -> -40.*/.typed
6620: 65 66 20 49 4e 54 31 36 5f 54 59 50 45 20 4c 6f  ef INT16_TYPE Lo
6630: 67 45 73 74 3b 0a 0a 2f 2a 0a 2a 2a 20 53 65 74  gEst;../*.** Set
6640: 20 74 68 65 20 53 51 4c 49 54 45 5f 50 54 52 53   the SQLITE_PTRS
6650: 49 5a 45 20 6d 61 63 72 6f 20 74 6f 20 74 68 65  IZE macro to the
6660: 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
6670: 20 69 6e 20 61 20 70 6f 69 6e 74 65 72 0a 2a 2f   in a pointer.*/
6680: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
6690: 50 54 52 53 49 5a 45 0a 23 20 69 66 20 64 65 66  PTRSIZE.# if def
66a0: 69 6e 65 64 28 5f 5f 53 49 5a 45 4f 46 5f 50 4f  ined(__SIZEOF_PO
66b0: 49 4e 54 45 52 5f 5f 29 0a 23 20 20 20 64 65 66  INTER__).#   def
66c0: 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 53 49  ine SQLITE_PTRSI
66d0: 5a 45 20 5f 5f 53 49 5a 45 4f 46 5f 50 4f 49 4e  ZE __SIZEOF_POIN
66e0: 54 45 52 5f 5f 0a 23 20 65 6c 69 66 20 64 65 66  TER__.# elif def
66f0: 69 6e 65 64 28 69 33 38 36 29 20 20 20 20 20 7c  ined(i386)     |
6700: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69 33 38 36  | defined(__i386
6710: 5f 5f 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64  __)   || defined
6720: 28 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20 20 20  (_M_IX86) ||    
6730: 5c 0a 20 20 20 20 20 20 20 64 65 66 69 6e 65 64  \.       defined
6740: 28 5f 4d 5f 41 52 4d 29 20 20 20 7c 7c 20 64 65  (_M_ARM)   || de
6750: 66 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f 29 20 20  fined(__arm__)  
6760: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78    || defined(__x
6770: 38 36 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53  86).#   define S
6780: 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 34 0a  QLITE_PTRSIZE 4.
6790: 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e  # else.#   defin
67a0: 65 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45  e SQLITE_PTRSIZE
67b0: 20 38 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69   8.# endif.#endi
67c0: 66 0a 0a 2f 2a 20 54 68 65 20 75 70 74 72 20 74  f../* The uptr t
67d0: 79 70 65 20 69 73 20 61 6e 20 75 6e 73 69 67 6e  ype is an unsign
67e0: 65 64 20 69 6e 74 65 67 65 72 20 6c 61 72 67 65  ed integer large
67f0: 20 65 6e 6f 75 67 68 20 74 6f 20 68 6f 6c 64 20   enough to hold 
6800: 61 20 70 6f 69 6e 74 65 72 0a 2a 2f 0a 23 69 66  a pointer.*/.#if
6810: 20 64 65 66 69 6e 65 64 28 48 41 56 45 5f 53 54   defined(HAVE_ST
6820: 44 49 4e 54 5f 48 29 0a 20 20 74 79 70 65 64 65  DINT_H).  typede
6830: 66 20 75 69 6e 74 70 74 72 5f 74 20 75 70 74 72  f uintptr_t uptr
6840: 3b 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 50  ;.#elif SQLITE_P
6850: 54 52 53 49 5a 45 3d 3d 34 0a 20 20 74 79 70 65  TRSIZE==4.  type
6860: 64 65 66 20 75 33 32 20 75 70 74 72 3b 0a 23 65  def u32 uptr;.#e
6870: 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20 75 36  lse.  typedef u6
6880: 34 20 75 70 74 72 3b 0a 23 65 6e 64 69 66 0a 0a  4 uptr;.#endif..
6890: 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  /*.** The SQLITE
68a0: 5f 57 49 54 48 49 4e 28 50 2c 53 2c 45 29 20 6d  _WITHIN(P,S,E) m
68b0: 61 63 72 6f 20 63 68 65 63 6b 73 20 74 6f 20 73  acro checks to s
68c0: 65 65 20 69 66 20 70 6f 69 6e 74 65 72 20 50 20  ee if pointer P 
68d0: 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 6f 6d  points to.** som
68e0: 65 74 68 69 6e 67 20 62 65 74 77 65 65 6e 20 53  ething between S
68f0: 20 28 69 6e 63 6c 75 73 69 76 65 29 20 61 6e 64   (inclusive) and
6900: 20 45 20 28 65 78 63 6c 75 73 69 76 65 29 2e 0a   E (exclusive)..
6910: 2a 2a 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77  **.** In other w
6920: 6f 72 64 73 2c 20 53 20 69 73 20 61 20 62 75 66  ords, S is a buf
6930: 66 65 72 20 61 6e 64 20 45 20 69 73 20 61 20 70  fer and E is a p
6940: 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66 69  ointer to the fi
6950: 72 73 74 20 62 79 74 65 20 61 66 74 65 72 0a 2a  rst byte after.*
6960: 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 62 75 66  * the end of buf
6970: 66 65 72 20 53 2e 20 20 54 68 69 73 20 6d 61 63  fer S.  This mac
6980: 72 6f 20 72 65 74 75 72 6e 73 20 74 72 75 65 20  ro returns true 
6990: 69 66 20 50 20 70 6f 69 6e 74 73 20 74 6f 20 73  if P points to s
69a0: 6f 6d 65 74 68 69 6e 67 0a 2a 2a 20 63 6f 6e 74  omething.** cont
69b0: 61 69 6e 65 64 20 77 69 74 68 69 6e 20 74 68 65  ained within the
69c0: 20 62 75 66 66 65 72 20 53 2e 0a 2a 2f 0a 23 64   buffer S..*/.#d
69d0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 49 54  efine SQLITE_WIT
69e0: 48 49 4e 28 50 2c 53 2c 45 29 20 28 28 28 75 70  HIN(P,S,E) (((up
69f0: 74 72 29 28 50 29 3e 3d 28 75 70 74 72 29 28 53  tr)(P)>=(uptr)(S
6a00: 29 29 26 26 28 28 75 70 74 72 29 28 50 29 3c 28  ))&&((uptr)(P)<(
6a10: 75 70 74 72 29 28 45 29 29 29 0a 0a 0a 2f 2a 0a  uptr)(E))).../*.
6a20: 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74  ** Macros to det
6a30: 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74  ermine whether t
6a40: 68 65 20 6d 61 63 68 69 6e 65 20 69 73 20 62 69  he machine is bi
6a50: 67 20 6f 72 20 6c 69 74 74 6c 65 20 65 6e 64 69  g or little endi
6a60: 61 6e 2c 0a 2a 2a 20 61 6e 64 20 77 68 65 74 68  an,.** and wheth
6a70: 65 72 20 6f 72 20 6e 6f 74 20 74 68 61 74 20 64  er or not that d
6a80: 65 74 65 72 6d 69 6e 61 74 69 6f 6e 20 69 73 20  etermination is 
6a90: 72 75 6e 2d 74 69 6d 65 20 6f 72 20 63 6f 6d 70  run-time or comp
6aa0: 69 6c 65 2d 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20  ile-time..**.** 
6ab0: 46 6f 72 20 62 65 73 74 20 70 65 72 66 6f 72 6d  For best perform
6ac0: 61 6e 63 65 2c 20 61 6e 20 61 74 74 65 6d 70 74  ance, an attempt
6ad0: 20 69 73 20 6d 61 64 65 20 74 6f 20 67 75 65 73   is made to gues
6ae0: 73 20 61 74 20 74 68 65 20 62 79 74 65 2d 6f 72  s at the byte-or
6af0: 64 65 72 0a 2a 2a 20 75 73 69 6e 67 20 43 2d 70  der.** using C-p
6b00: 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63 72  reprocessor macr
6b10: 6f 73 2e 20 20 49 66 20 74 68 61 74 20 69 73 20  os.  If that is 
6b20: 75 6e 73 75 63 63 65 73 73 66 75 6c 2c 20 6f 72  unsuccessful, or
6b30: 20 69 66 0a 2a 2a 20 2d 44 53 51 4c 49 54 45 5f   if.** -DSQLITE_
6b40: 42 59 54 45 4f 52 44 45 52 3d 30 20 69 73 20 73  BYTEORDER=0 is s
6b50: 65 74 2c 20 74 68 65 6e 20 62 79 74 65 2d 6f 72  et, then byte-or
6b60: 64 65 72 20 69 73 20 64 65 74 65 72 6d 69 6e 65  der is determine
6b70: 64 0a 2a 2a 20 61 74 20 72 75 6e 2d 74 69 6d 65  d.** at run-time
6b80: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
6b90: 49 54 45 5f 42 59 54 45 4f 52 44 45 52 0a 23 20  ITE_BYTEORDER.# 
6ba0: 69 66 20 64 65 66 69 6e 65 64 28 69 33 38 36 29  if defined(i386)
6bb0: 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28       || defined(
6bc0: 5f 5f 69 33 38 36 5f 5f 29 20 20 20 7c 7c 20 64  __i386__)   || d
6bd0: 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38 36 29 20  efined(_M_IX86) 
6be0: 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65 66  ||    \.     def
6bf0: 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 29 20 7c  ined(__x86_64) |
6c00: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f  | defined(__x86_
6c10: 36 34 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64  64__) || defined
6c20: 28 5f 4d 5f 58 36 34 29 20 20 7c 7c 20 20 20 20  (_M_X64)  ||    
6c30: 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f  \.     defined(_
6c40: 4d 5f 41 4d 44 36 34 29 20 7c 7c 20 64 65 66 69  M_AMD64) || defi
6c50: 6e 65 64 28 5f 4d 5f 41 52 4d 29 20 20 20 20 20  ned(_M_ARM)     
6c60: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36  || defined(__x86
6c70: 29 20 20 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20  )   ||    \.    
6c80: 20 64 65 66 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f   defined(__arm__
6c90: 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  ).#   define SQL
6ca0: 49 54 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20  ITE_BYTEORDER   
6cb0: 20 31 32 33 34 0a 23 20 65 6c 69 66 20 64 65 66   1234.# elif def
6cc0: 69 6e 65 64 28 73 70 61 72 63 29 20 20 20 20 7c  ined(sparc)    |
6cd0: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 70 70 63 5f  | defined(__ppc_
6ce0: 5f 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  _).#   define SQ
6cf0: 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 20 20  LITE_BYTEORDER  
6d00: 20 20 34 33 32 31 0a 23 20 65 6c 73 65 0a 23 20    4321.# else.# 
6d10: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
6d20: 42 59 54 45 4f 52 44 45 52 20 30 0a 23 20 65 6e  BYTEORDER 0.# en
6d30: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 20 53  dif.#endif.#if S
6d40: 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 3d  QLITE_BYTEORDER=
6d50: 3d 34 33 32 31 0a 23 20 64 65 66 69 6e 65 20 53  =4321.# define S
6d60: 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20  QLITE_BIGENDIAN 
6d70: 20 20 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51     1.# define SQ
6d80: 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41  LITE_LITTLEENDIA
6d90: 4e 20 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  N 0.# define SQL
6da0: 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20  ITE_UTF16NATIVE 
6db0: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 0a   SQLITE_UTF16BE.
6dc0: 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 42 59 54  #elif SQLITE_BYT
6dd0: 45 4f 52 44 45 52 3d 3d 31 32 33 34 0a 23 20 64  EORDER==1234.# d
6de0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47  efine SQLITE_BIG
6df0: 45 4e 44 49 41 4e 20 20 20 20 30 0a 23 20 64 65  ENDIAN    0.# de
6e00: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54  fine SQLITE_LITT
6e10: 4c 45 45 4e 44 49 41 4e 20 31 0a 23 20 64 65 66  LEENDIAN 1.# def
6e20: 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36  ine SQLITE_UTF16
6e30: 4e 41 54 49 56 45 20 20 53 51 4c 49 54 45 5f 55  NATIVE  SQLITE_U
6e40: 54 46 31 36 4c 45 0a 23 65 6c 73 65 0a 23 20 69  TF16LE.#else.# i
6e50: 66 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c  fdef SQLITE_AMAL
6e60: 47 41 4d 41 54 49 4f 4e 0a 20 20 63 6f 6e 73 74  GAMATION.  const
6e70: 20 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 20   int sqlite3one 
6e80: 3d 20 31 3b 0a 23 20 65 6c 73 65 0a 20 20 65 78  = 1;.# else.  ex
6e90: 74 65 72 6e 20 63 6f 6e 73 74 20 69 6e 74 20 73  tern const int s
6ea0: 71 6c 69 74 65 33 6f 6e 65 3b 0a 23 20 65 6e 64  qlite3one;.# end
6eb0: 69 66 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  if.# define SQLI
6ec0: 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20  TE_BIGENDIAN    
6ed0: 28 2a 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69  (*(char *)(&sqli
6ee0: 74 65 33 6f 6e 65 29 3d 3d 30 29 0a 23 20 64 65  te3one)==0).# de
6ef0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54  fine SQLITE_LITT
6f00: 4c 45 45 4e 44 49 41 4e 20 28 2a 28 63 68 61 72  LEENDIAN (*(char
6f10: 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29   *)(&sqlite3one)
6f20: 3d 3d 31 29 0a 23 20 64 65 66 69 6e 65 20 53 51  ==1).# define SQ
6f30: 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
6f40: 20 20 28 53 51 4c 49 54 45 5f 42 49 47 45 4e 44    (SQLITE_BIGEND
6f50: 49 41 4e 3f 53 51 4c 49 54 45 5f 55 54 46 31 36  IAN?SQLITE_UTF16
6f60: 42 45 3a 53 51 4c 49 54 45 5f 55 54 46 31 36 4c  BE:SQLITE_UTF16L
6f70: 45 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  E).#endif../*.**
6f80: 20 43 6f 6e 73 74 61 6e 74 73 20 66 6f 72 20 74   Constants for t
6f90: 68 65 20 6c 61 72 67 65 73 74 20 61 6e 64 20 73  he largest and s
6fa0: 6d 61 6c 6c 65 73 74 20 70 6f 73 73 69 62 6c 65  mallest possible
6fb0: 20 36 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69   64-bit signed i
6fc0: 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73  ntegers..** Thes
6fd0: 65 20 6d 61 63 72 6f 73 20 61 72 65 20 64 65 73  e macros are des
6fe0: 69 67 6e 65 64 20 74 6f 20 77 6f 72 6b 20 63 6f  igned to work co
6ff0: 72 72 65 63 74 6c 79 20 6f 6e 20 62 6f 74 68 20  rrectly on both 
7000: 33 32 2d 62 69 74 20 61 6e 64 20 36 34 2d 62 69  32-bit and 64-bi
7010: 74 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 73 2e 0a  t.** compilers..
7020: 2a 2f 0a 23 64 65 66 69 6e 65 20 4c 41 52 47 45  */.#define LARGE
7030: 53 54 5f 49 4e 54 36 34 20 20 28 30 78 66 66 66  ST_INT64  (0xfff
7040: 66 66 66 66 66 7c 28 28 28 69 36 34 29 30 78 37  fffff|(((i64)0x7
7050: 66 66 66 66 66 66 66 29 3c 3c 33 32 29 29 0a 23  fffffff)<<32)).#
7060: 64 65 66 69 6e 65 20 53 4d 41 4c 4c 45 53 54 5f  define SMALLEST_
7070: 49 4e 54 36 34 20 28 28 28 69 36 34 29 2d 31 29  INT64 (((i64)-1)
7080: 20 2d 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34   - LARGEST_INT64
7090: 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 75  )../*.** Round u
70a0: 70 20 61 20 6e 75 6d 62 65 72 20 74 6f 20 74 68  p a number to th
70b0: 65 20 6e 65 78 74 20 6c 61 72 67 65 72 20 6d 75  e next larger mu
70c0: 6c 74 69 70 6c 65 20 6f 66 20 38 2e 20 20 54 68  ltiple of 8.  Th
70d0: 69 73 20 69 73 20 75 73 65 64 0a 2a 2a 20 74 6f  is is used.** to
70e0: 20 66 6f 72 63 65 20 38 2d 62 79 74 65 20 61 6c   force 8-byte al
70f0: 69 67 6e 6d 65 6e 74 20 6f 6e 20 36 34 2d 62 69  ignment on 64-bi
7100: 74 20 61 72 63 68 69 74 65 63 74 75 72 65 73 2e  t architectures.
7110: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e  .*/.#define ROUN
7120: 44 38 28 78 29 20 20 20 20 20 28 28 28 78 29 2b  D8(x)     (((x)+
7130: 37 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f  7)&~7)../*.** Ro
7140: 75 6e 64 20 64 6f 77 6e 20 74 6f 20 74 68 65 20  und down to the 
7150: 6e 65 61 72 65 73 74 20 6d 75 6c 74 69 70 6c 65  nearest multiple
7160: 20 6f 66 20 38 0a 2a 2f 0a 23 64 65 66 69 6e 65   of 8.*/.#define
7170: 20 52 4f 55 4e 44 44 4f 57 4e 38 28 78 29 20 28   ROUNDDOWN8(x) (
7180: 28 78 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 41  (x)&~7)../*.** A
7190: 73 73 65 72 74 20 74 68 61 74 20 74 68 65 20 70  ssert that the p
71a0: 6f 69 6e 74 65 72 20 58 20 69 73 20 61 6c 69 67  ointer X is alig
71b0: 6e 65 64 20 74 6f 20 61 6e 20 38 2d 62 79 74 65  ned to an 8-byte
71c0: 20 62 6f 75 6e 64 61 72 79 2e 20 20 54 68 69 73   boundary.  This
71d0: 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75 73 65  .** macro is use
71e0: 64 20 6f 6e 6c 79 20 77 69 74 68 69 6e 20 61 73  d only within as
71f0: 73 65 72 74 28 29 20 74 6f 20 76 65 72 69 66 79  sert() to verify
7200: 20 74 68 61 74 20 74 68 65 20 63 6f 64 65 20 67   that the code g
7210: 65 74 73 0a 2a 2a 20 61 6c 6c 20 61 6c 69 67 6e  ets.** all align
7220: 6d 65 6e 74 20 72 65 73 74 72 69 63 74 69 6f 6e  ment restriction
7230: 73 20 63 6f 72 72 65 63 74 2e 0a 2a 2a 0a 2a 2a  s correct..**.**
7240: 20 45 78 63 65 70 74 2c 20 69 66 20 53 51 4c 49   Except, if SQLI
7250: 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45  TE_4_BYTE_ALIGNE
7260: 44 5f 4d 41 4c 4c 4f 43 20 69 73 20 64 65 66 69  D_MALLOC is defi
7270: 6e 65 64 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a  ned, then the.**
7280: 20 75 6e 64 65 72 6c 79 69 6e 67 20 6d 61 6c 6c   underlying mall
7290: 6f 63 28 29 20 69 6d 70 6c 65 6d 65 6e 74 61 74  oc() implementat
72a0: 69 6f 6e 20 6d 69 67 68 74 20 72 65 74 75 72 6e  ion might return
72b0: 20 75 73 20 34 2d 62 79 74 65 20 61 6c 69 67 6e   us 4-byte align
72c0: 65 64 0a 2a 2a 20 70 6f 69 6e 74 65 72 73 2e 20  ed.** pointers. 
72d0: 20 49 6e 20 74 68 61 74 20 63 61 73 65 2c 20 6f   In that case, o
72e0: 6e 6c 79 20 76 65 72 69 66 79 20 34 2d 62 79 74  nly verify 4-byt
72f0: 65 20 61 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a  e alignment..*/.
7300: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 34 5f  #ifdef SQLITE_4_
7310: 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c  BYTE_ALIGNED_MAL
7320: 4c 4f 43 0a 23 20 64 65 66 69 6e 65 20 45 49 47  LOC.# define EIG
7330: 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e  HT_BYTE_ALIGNMEN
7340: 54 28 58 29 20 20 20 28 28 28 28 63 68 61 72 2a  T(X)   ((((char*
7350: 29 28 58 29 20 2d 20 28 63 68 61 72 2a 29 30 29  )(X) - (char*)0)
7360: 26 33 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20  &3)==0).#else.# 
7370: 64 65 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54  define EIGHT_BYT
7380: 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20  E_ALIGNMENT(X)  
7390: 20 28 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d   ((((char*)(X) -
73a0: 20 28 63 68 61 72 2a 29 30 29 26 37 29 3d 3d 30   (char*)0)&7)==0
73b0: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
73c0: 44 69 73 61 62 6c 65 20 4d 4d 41 50 20 6f 6e 20  Disable MMAP on 
73d0: 70 6c 61 74 66 6f 72 6d 73 20 77 68 65 72 65 20  platforms where 
73e0: 69 74 20 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 6e  it is known to n
73f0: 6f 74 20 77 6f 72 6b 0a 2a 2f 0a 23 69 66 20 64  ot work.*/.#if d
7400: 65 66 69 6e 65 64 28 5f 5f 4f 70 65 6e 42 53 44  efined(__OpenBSD
7410: 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  __) || defined(_
7420: 5f 51 4e 58 4e 54 4f 5f 5f 29 0a 23 20 75 6e 64  _QNXNTO__).# und
7430: 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  ef SQLITE_MAX_MM
7440: 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65  AP_SIZE.# define
7450: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
7460: 5f 53 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a 0a  _SIZE 0.#endif..
7470: 2f 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 6d 61  /*.** Default ma
7480: 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20 6d 65  ximum size of me
7490: 6d 6f 72 79 20 75 73 65 64 20 62 79 20 6d 65 6d  mory used by mem
74a0: 6f 72 79 2d 6d 61 70 70 65 64 20 49 2f 4f 20 69  ory-mapped I/O i
74b0: 6e 20 74 68 65 20 56 46 53 0a 2a 2f 0a 23 69 66  n the VFS.*/.#if
74c0: 64 65 66 20 5f 5f 41 50 50 4c 45 5f 5f 0a 23 20  def __APPLE__.# 
74d0: 69 6e 63 6c 75 64 65 20 3c 54 61 72 67 65 74 43  include <TargetC
74e0: 6f 6e 64 69 74 69 6f 6e 61 6c 73 2e 68 3e 0a 23  onditionals.h>.#
74f0: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
7500: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
7510: 5a 45 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28  ZE.# if defined(
7520: 5f 5f 6c 69 6e 75 78 5f 5f 29 20 5c 0a 20 20 7c  __linux__) \.  |
7530: 7c 20 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32  | defined(_WIN32
7540: 29 20 5c 0a 20 20 7c 7c 20 28 64 65 66 69 6e 65  ) \.  || (define
7550: 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20  d(__APPLE__) && 
7560: 64 65 66 69 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f  defined(__MACH__
7570: 29 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65  )) \.  || define
7580: 64 28 5f 5f 73 75 6e 29 20 5c 0a 20 20 7c 7c 20  d(__sun) \.  || 
7590: 64 65 66 69 6e 65 64 28 5f 5f 46 72 65 65 42 53  defined(__FreeBS
75a0: 44 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69  D__) \.  || defi
75b0: 6e 65 64 28 5f 5f 44 72 61 67 6f 6e 46 6c 79 5f  ned(__DragonFly_
75c0: 5f 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  _).#   define SQ
75d0: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
75e0: 5a 45 20 30 78 37 66 66 66 30 30 30 30 20 20 2f  ZE 0x7fff0000  /
75f0: 2a 20 32 31 34 37 34 31 38 31 31 32 20 2a 2f 0a  * 2147418112 */.
7600: 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e  # else.#   defin
7610: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41  e SQLITE_MAX_MMA
7620: 50 5f 53 49 5a 45 20 30 0a 23 20 65 6e 64 69 66  P_SIZE 0.# endif
7630: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
7640: 68 65 20 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f  he default MMAP_
7650: 53 49 5a 45 20 69 73 20 7a 65 72 6f 20 6f 6e 20  SIZE is zero on 
7660: 61 6c 6c 20 70 6c 61 74 66 6f 72 6d 73 2e 20 20  all platforms.  
7670: 4f 72 2c 20 65 76 65 6e 20 69 66 20 61 20 6c 61  Or, even if a la
7680: 72 67 65 72 0a 2a 2a 20 64 65 66 61 75 6c 74 20  rger.** default 
7690: 4d 4d 41 50 5f 53 49 5a 45 20 69 73 20 73 70 65  MMAP_SIZE is spe
76a0: 63 69 66 69 65 64 20 61 74 20 63 6f 6d 70 69 6c  cified at compil
76b0: 65 2d 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72  e-time, make sur
76c0: 65 20 74 68 61 74 20 69 74 20 64 6f 65 73 0a 2a  e that it does.*
76d0: 2a 20 6e 6f 74 20 65 78 63 65 65 64 20 74 68 65  * not exceed the
76e0: 20 6d 61 78 69 6d 75 6d 20 6d 6d 61 70 20 73 69   maximum mmap si
76f0: 7a 65 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ze..*/.#ifndef S
7700: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d  QLITE_DEFAULT_MM
7710: 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65  AP_SIZE.# define
7720: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
7730: 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 65 6e 64  MMAP_SIZE 0.#end
7740: 69 66 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45  if.#if SQLITE_DE
7750: 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e  FAULT_MMAP_SIZE>
7760: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
7770: 53 49 5a 45 0a 23 20 75 6e 64 65 66 20 53 51 4c  SIZE.# undef SQL
7780: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50  ITE_DEFAULT_MMAP
7790: 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53  _SIZE.# define S
77a0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d  QLITE_DEFAULT_MM
77b0: 41 50 5f 53 49 5a 45 20 53 51 4c 49 54 45 5f 4d  AP_SIZE SQLITE_M
77c0: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 65 6e  AX_MMAP_SIZE.#en
77d0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 6c 79 20  dif../*.** Only 
77e0: 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 45 4e  one of SQLITE_EN
77f0: 41 42 4c 45 5f 53 54 41 54 33 20 6f 72 20 53 51  ABLE_STAT3 or SQ
7800: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
7810: 34 20 63 61 6e 20 62 65 20 64 65 66 69 6e 65 64  4 can be defined
7820: 2e 0a 2a 2a 20 50 72 69 6f 72 69 74 79 20 69 73  ..** Priority is
7830: 20 67 69 76 65 6e 20 74 6f 20 53 51 4c 49 54 45   given to SQLITE
7840: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 2e 20 20  _ENABLE_STAT4.  
7850: 49 66 20 65 69 74 68 65 72 20 61 72 65 20 64 65  If either are de
7860: 66 69 6e 65 64 2c 20 61 6c 73 6f 0a 2a 2a 20 64  fined, also.** d
7870: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41  efine SQLITE_ENA
7880: 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
7890: 54 34 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  T4.*/.#ifdef SQL
78a0: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34  ITE_ENABLE_STAT4
78b0: 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f  .# undef SQLITE_
78c0: 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23 20 64  ENABLE_STAT3.# d
78d0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41  efine SQLITE_ENA
78e0: 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
78f0: 54 34 20 31 0a 23 65 6c 69 66 20 53 51 4c 49 54  T4 1.#elif SQLIT
7900: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23  E_ENABLE_STAT3.#
7910: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45   define SQLITE_E
7920: 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53  NABLE_STAT3_OR_S
7930: 54 41 54 34 20 31 0a 23 65 6c 69 66 20 53 51 4c  TAT4 1.#elif SQL
7940: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
7950: 5f 4f 52 5f 53 54 41 54 34 0a 23 20 75 6e 64 65  _OR_STAT4.# unde
7960: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
7970: 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23  STAT3_OR_STAT4.#
7980: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 45 4c  endif../*.** SEL
7990: 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44  ECTTRACE_ENABLED
79a0: 20 77 69 6c 6c 20 62 65 20 65 69 74 68 65 72 20   will be either 
79b0: 31 20 6f 72 20 30 20 64 65 70 65 6e 64 69 6e 67  1 or 0 depending
79c0: 20 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20 6e   on whether or n
79d0: 6f 74 0a 2a 2a 20 74 68 65 20 53 65 6c 65 63 74  ot.** the Select
79e0: 20 71 75 65 72 79 20 67 65 6e 65 72 61 74 6f 72   query generator
79f0: 20 74 72 61 63 69 6e 67 20 6c 6f 67 69 63 20 69   tracing logic i
7a00: 73 20 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a  s turned on..*/.
7a10: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
7a20: 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66  TE_DEBUG) || def
7a30: 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
7a40: 4c 45 5f 53 45 4c 45 43 54 54 52 41 43 45 29 0a  LE_SELECTTRACE).
7a50: 23 20 64 65 66 69 6e 65 20 53 45 4c 45 43 54 54  # define SELECTT
7a60: 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 31 0a 23  RACE_ENABLED 1.#
7a70: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53 45  else.# define SE
7a80: 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45  LECTTRACE_ENABLE
7a90: 44 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  D 0.#endif../*.*
7aa0: 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
7ab0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
7ac0: 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64  tructure is used
7ad0: 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62 75   to store the bu
7ae0: 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61  sy-handler.** ca
7af0: 6c 6c 62 61 63 6b 20 66 6f 72 20 61 20 67 69 76  llback for a giv
7b00: 65 6e 20 73 71 6c 69 74 65 20 68 61 6e 64 6c 65  en sqlite handle
7b10: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71 6c 69  ..**.** The sqli
7b20: 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72 20 6d  te.busyHandler m
7b30: 65 6d 62 65 72 20 6f 66 20 74 68 65 20 73 71 6c  ember of the sql
7b40: 69 74 65 20 73 74 72 75 63 74 20 63 6f 6e 74 61  ite struct conta
7b50: 69 6e 73 20 74 68 65 20 62 75 73 79 0a 2a 2a 20  ins the busy.** 
7b60: 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 74 68 65  callback for the
7b70: 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
7b80: 2e 20 45 61 63 68 20 70 61 67 65 72 20 6f 70 65  . Each pager ope
7b90: 6e 65 64 20 76 69 61 20 74 68 65 20 73 71 6c 69  ned via the sqli
7ba0: 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20 69 73 20  te.** handle is 
7bb0: 70 61 73 73 65 64 20 61 20 70 6f 69 6e 74 65 72  passed a pointer
7bc0: 20 74 6f 20 73 71 6c 69 74 65 2e 62 75 73 79 48   to sqlite.busyH
7bd0: 61 6e 64 6c 65 72 2e 20 54 68 65 20 62 75 73 79  andler. The busy
7be0: 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c  -handler.** call
7bf0: 62 61 63 6b 20 69 73 20 63 75 72 72 65 6e 74 6c  back is currentl
7c00: 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79 20 66  y invoked only f
7c10: 72 6f 6d 20 77 69 74 68 69 6e 20 70 61 67 65 72  rom within pager
7c20: 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  .c..*/.typedef s
7c30: 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65  truct BusyHandle
7c40: 72 20 42 75 73 79 48 61 6e 64 6c 65 72 3b 0a 73  r BusyHandler;.s
7c50: 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65  truct BusyHandle
7c60: 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 46 75 6e  r {.  int (*xFun
7c70: 63 29 28 76 6f 69 64 20 2a 2c 69 6e 74 29 3b 20  c)(void *,int); 
7c80: 20 2f 2a 20 54 68 65 20 62 75 73 79 20 63 61 6c   /* The busy cal
7c90: 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  lback */.  void 
7ca0: 2a 70 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  *pArg;          
7cb0: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61        /* First a
7cc0: 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c 6c 62  rg to busy callb
7cd0: 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75  ack */.  int nBu
7ce0: 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sy;             
7cf0: 20 20 20 20 2f 2a 20 49 6e 63 72 65 6d 65 6e 74      /* Increment
7d00: 65 64 20 77 69 74 68 20 65 61 63 68 20 62 75 73  ed with each bus
7d10: 79 20 63 61 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  y call */.};../*
7d20: 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20  .** Name of the 
7d30: 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20  master database 
7d40: 74 61 62 6c 65 2e 20 20 54 68 65 20 6d 61 73 74  table.  The mast
7d50: 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  er database tabl
7d60: 65 0a 2a 2a 20 69 73 20 61 20 73 70 65 63 69 61  e.** is a specia
7d70: 6c 20 74 61 62 6c 65 20 74 68 61 74 20 68 6f 6c  l table that hol
7d80: 64 73 20 74 68 65 20 6e 61 6d 65 73 20 61 6e 64  ds the names and
7d90: 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 20 61   attributes of a
7da0: 6c 6c 0a 2a 2a 20 75 73 65 72 20 74 61 62 6c 65  ll.** user table
7db0: 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e 0a 2a  s and indices..*
7dc0: 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52  /.#define MASTER
7dd0: 5f 4e 41 4d 45 20 20 20 20 20 20 20 22 73 71 6c  _NAME       "sql
7de0: 69 74 65 5f 6d 61 73 74 65 72 22 0a 23 64 65 66  ite_master".#def
7df0: 69 6e 65 20 54 45 4d 50 5f 4d 41 53 54 45 52 5f  ine TEMP_MASTER_
7e00: 4e 41 4d 45 20 20 22 73 71 6c 69 74 65 5f 74 65  NAME  "sqlite_te
7e10: 6d 70 5f 6d 61 73 74 65 72 22 0a 0a 2f 2a 0a 2a  mp_master"../*.*
7e20: 2a 20 54 68 65 20 72 6f 6f 74 2d 70 61 67 65 20  * The root-page 
7e30: 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64 61  of the master da
7e40: 74 61 62 61 73 65 20 74 61 62 6c 65 2e 0a 2a 2f  tabase table..*/
7e50: 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52 5f  .#define MASTER_
7e60: 52 4f 4f 54 20 20 20 20 20 20 20 31 0a 0a 2f 2a  ROOT       1../*
7e70: 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20  .** The name of 
7e80: 74 68 65 20 73 63 68 65 6d 61 20 74 61 62 6c 65  the schema table
7e90: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48  ..*/.#define SCH
7ea0: 45 4d 41 5f 54 41 42 4c 45 28 78 29 20 20 28 28  EMA_TABLE(x)  ((
7eb0: 21 4f 4d 49 54 5f 54 45 4d 50 44 42 29 26 26 28  !OMIT_TEMPDB)&&(
7ec0: 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d 41 53 54 45  x==1)?TEMP_MASTE
7ed0: 52 5f 4e 41 4d 45 3a 4d 41 53 54 45 52 5f 4e 41  R_NAME:MASTER_NA
7ee0: 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 6f 6e  ME)../*.** A con
7ef0: 76 65 6e 69 65 6e 63 65 20 6d 61 63 72 6f 20 74  venience macro t
7f00: 68 61 74 20 72 65 74 75 72 6e 73 20 74 68 65 20  hat returns the 
7f10: 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e  number of elemen
7f20: 74 73 20 69 6e 0a 2a 2a 20 61 6e 20 61 72 72 61  ts in.** an arra
7f30: 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 41 72  y..*/.#define Ar
7f40: 72 61 79 53 69 7a 65 28 58 29 20 20 20 20 28 28  raySize(X)    ((
7f50: 69 6e 74 29 28 73 69 7a 65 6f 66 28 58 29 2f 73  int)(sizeof(X)/s
7f60: 69 7a 65 6f 66 28 58 5b 30 5d 29 29 29 0a 0a 2f  izeof(X[0])))../
7f70: 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20 69  *.** Determine i
7f80: 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 69  f the argument i
7f90: 73 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f  s a power of two
7fa0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 6f  .*/.#define IsPo
7fb0: 77 65 72 4f 66 54 77 6f 28 58 29 20 28 28 28 58  werOfTwo(X) (((X
7fc0: 29 26 28 28 58 29 2d 31 29 29 3d 3d 30 29 0a 0a  )&((X)-1))==0)..
7fd0: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
7fe0: 69 6e 67 20 76 61 6c 75 65 20 61 73 20 61 20 64  ing value as a d
7ff0: 65 73 74 72 75 63 74 6f 72 20 6d 65 61 6e 73 20  estructor means 
8000: 74 6f 20 75 73 65 20 73 71 6c 69 74 65 33 44 62  to use sqlite3Db
8010: 46 72 65 65 28 29 2e 0a 2a 2a 20 54 68 65 20 73  Free()..** The s
8020: 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20 72  qlite3DbFree() r
8030: 6f 75 74 69 6e 65 20 72 65 71 75 69 72 65 73 20  outine requires 
8040: 74 77 6f 20 70 61 72 61 6d 65 74 65 72 73 20 69  two parameters i
8050: 6e 73 74 65 61 64 20 6f 66 20 74 68 65 0a 2a 2a  nstead of the.**
8060: 20 6f 6e 65 20 70 61 72 61 6d 65 74 65 72 20 74   one parameter t
8070: 68 61 74 20 64 65 73 74 72 75 63 74 6f 72 73 20  hat destructors 
8080: 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 2e 20 20  normally want.  
8090: 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20 69 6e  So we have to in
80a0: 74 72 6f 64 75 63 65 0a 2a 2a 20 74 68 69 73 20  troduce.** this 
80b0: 6d 61 67 69 63 20 76 61 6c 75 65 20 74 68 61 74  magic value that
80c0: 20 74 68 65 20 63 6f 64 65 20 6b 6e 6f 77 73 20   the code knows 
80d0: 74 6f 20 68 61 6e 64 6c 65 20 64 69 66 66 65 72  to handle differ
80e0: 65 6e 74 6c 79 2e 20 20 41 6e 79 0a 2a 2a 20 70  ently.  Any.** p
80f0: 6f 69 6e 74 65 72 20 77 69 6c 6c 20 77 6f 72 6b  ointer will work
8100: 20 68 65 72 65 20 61 73 20 6c 6f 6e 67 20 61 73   here as long as
8110: 20 69 74 20 69 73 20 64 69 73 74 69 6e 63 74 20   it is distinct 
8120: 66 72 6f 6d 20 53 51 4c 49 54 45 5f 53 54 41 54  from SQLITE_STAT
8130: 49 43 0a 2a 2a 20 61 6e 64 20 53 51 4c 49 54 45  IC.** and SQLITE
8140: 5f 54 52 41 4e 53 49 45 4e 54 2e 0a 2a 2f 0a 23  _TRANSIENT..*/.#
8150: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 59  define SQLITE_DY
8160: 4e 41 4d 49 43 20 20 20 28 28 73 71 6c 69 74 65  NAMIC   ((sqlite
8170: 33 5f 64 65 73 74 72 75 63 74 6f 72 5f 74 79 70  3_destructor_typ
8180: 65 29 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53  e)sqlite3MallocS
8190: 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e  ize)../*.** When
81a0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44   SQLITE_OMIT_WSD
81b0: 20 69 73 20 64 65 66 69 6e 65 64 2c 20 69 74 20   is defined, it 
81c0: 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 74  means that the t
81d0: 61 72 67 65 74 20 70 6c 61 74 66 6f 72 6d 20 64  arget platform d
81e0: 6f 65 73 0a 2a 2a 20 6e 6f 74 20 73 75 70 70 6f  oes.** not suppo
81f0: 72 74 20 57 72 69 74 61 62 6c 65 20 53 74 61 74  rt Writable Stat
8200: 69 63 20 44 61 74 61 20 28 57 53 44 29 20 73 75  ic Data (WSD) su
8210: 63 68 20 61 73 20 67 6c 6f 62 61 6c 20 61 6e 64  ch as global and
8220: 20 73 74 61 74 69 63 20 76 61 72 69 61 62 6c 65   static variable
8230: 73 2e 0a 2a 2a 20 41 6c 6c 20 76 61 72 69 61 62  s..** All variab
8240: 6c 65 73 20 6d 75 73 74 20 65 69 74 68 65 72 20  les must either 
8250: 62 65 20 6f 6e 20 74 68 65 20 73 74 61 63 6b 20  be on the stack 
8260: 6f 72 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61  or dynamically a
8270: 6c 6c 6f 63 61 74 65 64 20 66 72 6f 6d 0a 2a 2a  llocated from.**
8280: 20 74 68 65 20 68 65 61 70 2e 20 20 57 68 65 6e   the heap.  When
8290: 20 57 53 44 20 69 73 20 75 6e 73 75 70 70 6f 72   WSD is unsuppor
82a0: 74 65 64 2c 20 74 68 65 20 76 61 72 69 61 62 6c  ted, the variabl
82b0: 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 73  e declarations s
82c0: 63 61 74 74 65 72 65 64 0a 2a 2a 20 74 68 72 6f  cattered.** thro
82d0: 75 67 68 6f 75 74 20 74 68 65 20 53 51 4c 69 74  ughout the SQLit
82e0: 65 20 63 6f 64 65 20 6d 75 73 74 20 62 65 63 6f  e code must beco
82f0: 6d 65 20 63 6f 6e 73 74 61 6e 74 73 20 69 6e 73  me constants ins
8300: 74 65 61 64 2e 20 20 54 68 65 20 53 51 4c 49 54  tead.  The SQLIT
8310: 45 5f 57 53 44 0a 2a 2a 20 6d 61 63 72 6f 20 69  E_WSD.** macro i
8320: 73 20 75 73 65 64 20 66 6f 72 20 74 68 69 73 20  s used for this 
8330: 70 75 72 70 6f 73 65 2e 20 20 41 6e 64 20 69 6e  purpose.  And in
8340: 73 74 65 61 64 20 6f 66 20 72 65 66 65 72 65 6e  stead of referen
8350: 63 69 6e 67 20 74 68 65 20 76 61 72 69 61 62 6c  cing the variabl
8360: 65 0a 2a 2a 20 64 69 72 65 63 74 6c 79 2c 20 77  e.** directly, w
8370: 65 20 75 73 65 20 69 74 73 20 63 6f 6e 73 74 61  e use its consta
8380: 6e 74 20 61 73 20 61 20 6b 65 79 20 74 6f 20 6c  nt as a key to l
8390: 6f 6f 6b 75 70 20 74 68 65 20 72 75 6e 2d 74 69  ookup the run-ti
83a0: 6d 65 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20  me allocated.** 
83b0: 62 75 66 66 65 72 20 74 68 61 74 20 68 6f 6c 64  buffer that hold
83c0: 73 20 72 65 61 6c 20 76 61 72 69 61 62 6c 65 2e  s real variable.
83d0: 20 20 54 68 65 20 63 6f 6e 73 74 61 6e 74 20 69    The constant i
83e0: 73 20 61 6c 73 6f 20 74 68 65 20 69 6e 69 74 69  s also the initi
83f0: 61 6c 69 7a 65 72 0a 2a 2a 20 66 6f 72 20 74 68  alizer.** for th
8400: 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63  e run-time alloc
8410: 61 74 65 64 20 62 75 66 66 65 72 2e 0a 2a 2a 0a  ated buffer..**.
8420: 2a 2a 20 49 6e 20 74 68 65 20 75 73 75 61 6c 20  ** In the usual 
8430: 63 61 73 65 20 77 68 65 72 65 20 57 53 44 20 69  case where WSD i
8440: 73 20 73 75 70 70 6f 72 74 65 64 2c 20 74 68 65  s supported, the
8450: 20 53 51 4c 49 54 45 5f 57 53 44 20 61 6e 64 20   SQLITE_WSD and 
8460: 47 4c 4f 42 41 4c 0a 2a 2a 20 6d 61 63 72 6f 73  GLOBAL.** macros
8470: 20 62 65 63 6f 6d 65 20 6e 6f 2d 6f 70 73 20 61   become no-ops a
8480: 6e 64 20 68 61 76 65 20 7a 65 72 6f 20 70 65 72  nd have zero per
8490: 66 6f 72 6d 61 6e 63 65 20 69 6d 70 61 63 74 2e  formance impact.
84a0: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
84b0: 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20 23 64 65  E_OMIT_WSD.  #de
84c0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 53 44 20  fine SQLITE_WSD 
84d0: 63 6f 6e 73 74 0a 20 20 23 64 65 66 69 6e 65 20  const.  #define 
84e0: 47 4c 4f 42 41 4c 28 74 2c 76 29 20 28 2a 28 74  GLOBAL(t,v) (*(t
84f0: 2a 29 73 71 6c 69 74 65 33 5f 77 73 64 5f 66 69  *)sqlite3_wsd_fi
8500: 6e 64 28 28 76 6f 69 64 2a 29 26 28 76 29 2c 20  nd((void*)&(v), 
8510: 73 69 7a 65 6f 66 28 76 29 29 29 0a 20 20 23 64  sizeof(v))).  #d
8520: 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 6c 6f  efine sqlite3Glo
8530: 62 61 6c 43 6f 6e 66 69 67 20 47 4c 4f 42 41 4c  balConfig GLOBAL
8540: 28 73 74 72 75 63 74 20 53 71 6c 69 74 65 33 43  (struct Sqlite3C
8550: 6f 6e 66 69 67 2c 20 73 71 6c 69 74 65 33 43 6f  onfig, sqlite3Co
8560: 6e 66 69 67 29 0a 20 20 69 6e 74 20 73 71 6c 69  nfig).  int sqli
8570: 74 65 33 5f 77 73 64 5f 69 6e 69 74 28 69 6e 74  te3_wsd_init(int
8580: 20 4e 2c 20 69 6e 74 20 4a 29 3b 0a 20 20 76 6f   N, int J);.  vo
8590: 69 64 20 2a 73 71 6c 69 74 65 33 5f 77 73 64 5f  id *sqlite3_wsd_
85a0: 66 69 6e 64 28 76 6f 69 64 20 2a 4b 2c 20 69 6e  find(void *K, in
85b0: 74 20 4c 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  t L);.#else.  #d
85c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 53 44  efine SQLITE_WSD
85d0: 0a 20 20 23 64 65 66 69 6e 65 20 47 4c 4f 42 41  .  #define GLOBA
85e0: 4c 28 74 2c 76 29 20 76 0a 20 20 23 64 65 66 69  L(t,v) v.  #defi
85f0: 6e 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c  ne sqlite3Global
8600: 43 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f  Config sqlite3Co
8610: 6e 66 69 67 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  nfig.#endif../*.
8620: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
8630: 20 6d 61 63 72 6f 73 20 61 72 65 20 75 73 65 64   macros are used
8640: 20 74 6f 20 73 75 70 70 72 65 73 73 20 63 6f 6d   to suppress com
8650: 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 73 20 61  piler warnings a
8660: 6e 64 20 74 6f 0a 2a 2a 20 6d 61 6b 65 20 69 74  nd to.** make it
8670: 20 63 6c 65 61 72 20 74 6f 20 68 75 6d 61 6e 20   clear to human 
8680: 72 65 61 64 65 72 73 20 77 68 65 6e 20 61 20 66  readers when a f
8690: 75 6e 63 74 69 6f 6e 20 70 61 72 61 6d 65 74 65  unction paramete
86a0: 72 20 69 73 20 64 65 6c 69 62 65 72 61 74 65 6c  r is deliberatel
86b0: 79 0a 2a 2a 20 6c 65 66 74 20 75 6e 75 73 65 64  y.** left unused
86c0: 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79   within the body
86d0: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2e 20   of a function. 
86e0: 54 68 69 73 20 75 73 75 61 6c 6c 79 20 68 61 70  This usually hap
86f0: 70 65 6e 73 20 77 68 65 6e 0a 2a 2a 20 61 20 66  pens when.** a f
8700: 75 6e 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c 65  unction is calle
8710: 64 20 76 69 61 20 61 20 66 75 6e 63 74 69 6f 6e  d via a function
8720: 20 70 6f 69 6e 74 65 72 2e 20 46 6f 72 20 65 78   pointer. For ex
8730: 61 6d 70 6c 65 20 74 68 65 0a 2a 2a 20 69 6d 70  ample the.** imp
8740: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61  lementation of a
8750: 6e 20 53 51 4c 20 61 67 67 72 65 67 61 74 65 20  n SQL aggregate 
8760: 73 74 65 70 20 63 61 6c 6c 62 61 63 6b 20 6d 61  step callback ma
8770: 79 20 6e 6f 74 20 75 73 65 20 74 68 65 0a 2a 2a  y not use the.**
8780: 20 70 61 72 61 6d 65 74 65 72 20 69 6e 64 69 63   parameter indic
8790: 61 74 69 6e 67 20 74 68 65 20 6e 75 6d 62 65 72  ating the number
87a0: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 70 61   of arguments pa
87b0: 73 73 65 64 20 74 6f 20 74 68 65 20 61 67 67 72  ssed to the aggr
87c0: 65 67 61 74 65 2c 0a 2a 2a 20 69 66 20 69 74 20  egate,.** if it 
87d0: 6b 6e 6f 77 73 20 74 68 61 74 20 74 68 69 73 20  knows that this 
87e0: 69 73 20 65 6e 66 6f 72 63 65 64 20 65 6c 73 65  is enforced else
87f0: 77 68 65 72 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65  where..**.** Whe
8800: 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72  n a function par
8810: 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 75 73  ameter is not us
8820: 65 64 20 61 74 20 61 6c 6c 20 77 69 74 68 69 6e  ed at all within
8830: 20 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66   the body of a f
8840: 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 69 74 20 69  unction,.** it i
8850: 73 20 67 65 6e 65 72 61 6c 6c 79 20 6e 61 6d 65  s generally name
8860: 64 20 22 4e 6f 74 55 73 65 64 22 20 6f 72 20 22  d "NotUsed" or "
8870: 4e 6f 74 55 73 65 64 32 22 20 74 6f 20 6d 61 6b  NotUsed2" to mak
8880: 65 20 74 68 69 6e 67 73 20 65 76 65 6e 20 63 6c  e things even cl
8890: 65 61 72 65 72 2e 0a 2a 2a 20 48 6f 77 65 76 65  earer..** Howeve
88a0: 72 2c 20 74 68 65 73 65 20 6d 61 63 72 6f 73 20  r, these macros 
88b0: 6d 61 79 20 61 6c 73 6f 20 62 65 20 75 73 65 64  may also be used
88c0: 20 74 6f 20 73 75 70 70 72 65 73 73 20 77 61 72   to suppress war
88d0: 6e 69 6e 67 73 20 72 65 6c 61 74 65 64 20 74 6f  nings related to
88e0: 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 73 20 74  .** parameters t
88f0: 68 61 74 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e  hat may or may n
8900: 6f 74 20 62 65 20 75 73 65 64 20 64 65 70 65 6e  ot be used depen
8910: 64 69 6e 67 20 6f 6e 20 63 6f 6d 70 69 6c 61 74  ding on compilat
8920: 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e 0a 2a 2a 20  ion options..** 
8930: 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 6f 73  For example thos
8940: 65 20 70 61 72 61 6d 65 74 65 72 73 20 6f 6e 6c  e parameters onl
8950: 79 20 75 73 65 64 20 69 6e 20 61 73 73 65 72 74  y used in assert
8960: 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 49  () statements. I
8970: 6e 20 74 68 65 73 65 0a 2a 2a 20 63 61 73 65 73  n these.** cases
8980: 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20   the parameters 
8990: 61 72 65 20 6e 61 6d 65 64 20 61 73 20 70 65 72  are named as per
89a0: 20 74 68 65 20 75 73 75 61 6c 20 63 6f 6e 76 65   the usual conve
89b0: 6e 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69  ntions..*/.#defi
89c0: 6e 65 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45  ne UNUSED_PARAME
89d0: 54 45 52 28 78 29 20 28 76 6f 69 64 29 28 78 29  TER(x) (void)(x)
89e0: 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f  .#define UNUSED_
89f0: 50 41 52 41 4d 45 54 45 52 32 28 78 2c 79 29 20  PARAMETER2(x,y) 
8a00: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
8a10: 28 78 29 2c 55 4e 55 53 45 44 5f 50 41 52 41 4d  (x),UNUSED_PARAM
8a20: 45 54 45 52 28 79 29 0a 0a 2f 2a 0a 2a 2a 20 46  ETER(y)../*.** F
8a30: 6f 72 77 61 72 64 20 72 65 66 65 72 65 6e 63 65  orward reference
8a40: 73 20 74 6f 20 73 74 72 75 63 74 75 72 65 73 0a  s to structures.
8a50: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
8a60: 74 20 41 67 67 49 6e 66 6f 20 41 67 67 49 6e 66  t AggInfo AggInf
8a70: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
8a80: 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20 41 75  t AuthContext Au
8a90: 74 68 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64  thContext;.typed
8aa0: 65 66 20 73 74 72 75 63 74 20 41 75 74 6f 69 6e  ef struct Autoin
8ab0: 63 49 6e 66 6f 20 41 75 74 6f 69 6e 63 49 6e 66  cInfo AutoincInf
8ac0: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
8ad0: 74 20 42 69 74 76 65 63 20 42 69 74 76 65 63 3b  t Bitvec Bitvec;
8ae0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8af0: 43 6f 6c 6c 53 65 71 20 43 6f 6c 6c 53 65 71 3b  CollSeq CollSeq;
8b00: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8b10: 43 6f 6c 75 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a 74  Column Column;.t
8b20: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44 62  ypedef struct Db
8b30: 20 44 62 3b 0a 74 79 70 65 64 65 66 20 73 74 72   Db;.typedef str
8b40: 75 63 74 20 53 63 68 65 6d 61 20 53 63 68 65 6d  uct Schema Schem
8b50: 61 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  a;.typedef struc
8b60: 74 20 45 78 70 72 20 45 78 70 72 3b 0a 74 79 70  t Expr Expr;.typ
8b70: 65 64 65 66 20 73 74 72 75 63 74 20 45 78 70 72  edef struct Expr
8b80: 4c 69 73 74 20 45 78 70 72 4c 69 73 74 3b 0a 74  List ExprList;.t
8b90: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 45 78  ypedef struct Ex
8ba0: 70 72 53 70 61 6e 20 45 78 70 72 53 70 61 6e 3b  prSpan ExprSpan;
8bb0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8bc0: 46 4b 65 79 20 46 4b 65 79 3b 0a 74 79 70 65 64  FKey FKey;.typed
8bd0: 65 66 20 73 74 72 75 63 74 20 46 75 6e 63 44 65  ef struct FuncDe
8be0: 73 74 72 75 63 74 6f 72 20 46 75 6e 63 44 65 73  structor FuncDes
8bf0: 74 72 75 63 74 6f 72 3b 0a 74 79 70 65 64 65 66  tructor;.typedef
8c00: 20 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 20   struct FuncDef 
8c10: 46 75 6e 63 44 65 66 3b 0a 74 79 70 65 64 65 66  FuncDef;.typedef
8c20: 20 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 48   struct FuncDefH
8c30: 61 73 68 20 46 75 6e 63 44 65 66 48 61 73 68 3b  ash FuncDefHash;
8c40: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8c50: 49 64 4c 69 73 74 20 49 64 4c 69 73 74 3b 0a 74  IdList IdList;.t
8c60: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49 6e  ypedef struct In
8c70: 64 65 78 20 49 6e 64 65 78 3b 0a 74 79 70 65 64  dex Index;.typed
8c80: 65 66 20 73 74 72 75 63 74 20 49 6e 64 65 78 53  ef struct IndexS
8c90: 61 6d 70 6c 65 20 49 6e 64 65 78 53 61 6d 70 6c  ample IndexSampl
8ca0: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
8cb0: 74 20 4b 65 79 43 6c 61 73 73 20 4b 65 79 43 6c  t KeyClass KeyCl
8cc0: 61 73 73 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ass;.typedef str
8cd0: 75 63 74 20 4b 65 79 49 6e 66 6f 20 4b 65 79 49  uct KeyInfo KeyI
8ce0: 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72  nfo;.typedef str
8cf0: 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 4c 6f  uct Lookaside Lo
8d00: 6f 6b 61 73 69 64 65 3b 0a 74 79 70 65 64 65 66  okaside;.typedef
8d10: 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64   struct Lookasid
8d20: 65 53 6c 6f 74 20 4c 6f 6f 6b 61 73 69 64 65 53  eSlot LookasideS
8d30: 6c 6f 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  lot;.typedef str
8d40: 75 63 74 20 4d 6f 64 75 6c 65 20 4d 6f 64 75 6c  uct Module Modul
8d50: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
8d60: 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 4e 61  t NameContext Na
8d70: 6d 65 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64  meContext;.typed
8d80: 65 66 20 73 74 72 75 63 74 20 50 61 72 73 65 20  ef struct Parse 
8d90: 50 61 72 73 65 3b 0a 74 79 70 65 64 65 66 20 73  Parse;.typedef s
8da0: 74 72 75 63 74 20 50 72 65 55 70 64 61 74 65 20  truct PreUpdate 
8db0: 50 72 65 55 70 64 61 74 65 3b 0a 74 79 70 65 64  PreUpdate;.typed
8dc0: 65 66 20 73 74 72 75 63 74 20 50 72 69 6e 74 66  ef struct Printf
8dd0: 41 72 67 75 6d 65 6e 74 73 20 50 72 69 6e 74 66  Arguments Printf
8de0: 41 72 67 75 6d 65 6e 74 73 3b 0a 74 79 70 65 64  Arguments;.typed
8df0: 65 66 20 73 74 72 75 63 74 20 52 6f 77 53 65 74  ef struct RowSet
8e00: 20 52 6f 77 53 65 74 3b 0a 74 79 70 65 64 65 66   RowSet;.typedef
8e10: 20 73 74 72 75 63 74 20 53 61 76 65 70 6f 69 6e   struct Savepoin
8e20: 74 20 53 61 76 65 70 6f 69 6e 74 3b 0a 74 79 70  t Savepoint;.typ
8e30: 65 64 65 66 20 73 74 72 75 63 74 20 53 65 6c 65  edef struct Sele
8e40: 63 74 20 53 65 6c 65 63 74 3b 0a 74 79 70 65 64  ct Select;.typed
8e50: 65 66 20 73 74 72 75 63 74 20 53 51 4c 69 74 65  ef struct SQLite
8e60: 54 68 72 65 61 64 20 53 51 4c 69 74 65 54 68 72  Thread SQLiteThr
8e70: 65 61 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ead;.typedef str
8e80: 75 63 74 20 53 65 6c 65 63 74 44 65 73 74 20 53  uct SelectDest S
8e90: 65 6c 65 63 74 44 65 73 74 3b 0a 74 79 70 65 64  electDest;.typed
8ea0: 65 66 20 73 74 72 75 63 74 20 53 72 63 4c 69 73  ef struct SrcLis
8eb0: 74 20 53 72 63 4c 69 73 74 3b 0a 74 79 70 65 64  t SrcList;.typed
8ec0: 65 66 20 73 74 72 75 63 74 20 53 74 72 41 63 63  ef struct StrAcc
8ed0: 75 6d 20 53 74 72 41 63 63 75 6d 3b 0a 74 79 70  um StrAccum;.typ
8ee0: 65 64 65 66 20 73 74 72 75 63 74 20 54 61 62 6c  edef struct Tabl
8ef0: 65 20 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66  e Table;.typedef
8f00: 20 73 74 72 75 63 74 20 54 61 62 6c 65 4c 6f 63   struct TableLoc
8f10: 6b 20 54 61 62 6c 65 4c 6f 63 6b 3b 0a 74 79 70  k TableLock;.typ
8f20: 65 64 65 66 20 73 74 72 75 63 74 20 54 6f 6b 65  edef struct Toke
8f30: 6e 20 54 6f 6b 65 6e 3b 0a 74 79 70 65 64 65 66  n Token;.typedef
8f40: 20 73 74 72 75 63 74 20 54 72 65 65 56 69 65 77   struct TreeView
8f50: 20 54 72 65 65 56 69 65 77 3b 0a 74 79 70 65 64   TreeView;.typed
8f60: 65 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  ef struct Trigge
8f70: 72 20 54 72 69 67 67 65 72 3b 0a 74 79 70 65 64  r Trigger;.typed
8f80: 65 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  ef struct Trigge
8f90: 72 50 72 67 20 54 72 69 67 67 65 72 50 72 67 3b  rPrg TriggerPrg;
8fa0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8fb0: 54 72 69 67 67 65 72 53 74 65 70 20 54 72 69 67  TriggerStep Trig
8fc0: 67 65 72 53 74 65 70 3b 0a 74 79 70 65 64 65 66  gerStep;.typedef
8fd0: 20 73 74 72 75 63 74 20 55 6e 70 61 63 6b 65 64   struct Unpacked
8fe0: 52 65 63 6f 72 64 20 55 6e 70 61 63 6b 65 64 52  Record UnpackedR
8ff0: 65 63 6f 72 64 3b 0a 74 79 70 65 64 65 66 20 73  ecord;.typedef s
9000: 74 72 75 63 74 20 56 54 61 62 6c 65 20 56 54 61  truct VTable VTa
9010: 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ble;.typedef str
9020: 75 63 74 20 56 74 61 62 43 74 78 20 56 74 61 62  uct VtabCtx Vtab
9030: 43 74 78 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Ctx;.typedef str
9040: 75 63 74 20 57 61 6c 6b 65 72 20 57 61 6c 6b 65  uct Walker Walke
9050: 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  r;.typedef struc
9060: 74 20 57 68 65 72 65 49 6e 66 6f 20 57 68 65 72  t WhereInfo Wher
9070: 65 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73  eInfo;.typedef s
9080: 74 72 75 63 74 20 57 69 74 68 20 57 69 74 68 3b  truct With With;
9090: 0a 0a 2f 2a 20 41 20 56 4c 69 73 74 20 6f 62 6a  ../* A VList obj
90a0: 65 63 74 20 72 65 63 6f 72 64 73 20 61 20 6d 61  ect records a ma
90b0: 70 70 69 6e 67 20 62 65 74 77 65 65 6e 20 70 61  pping between pa
90c0: 72 61 6d 65 74 65 72 73 2f 76 61 72 69 61 62 6c  rameters/variabl
90d0: 65 73 2f 77 69 6c 64 63 61 72 64 73 0a 2a 2a 20  es/wildcards.** 
90e0: 69 6e 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  in the SQL state
90f0: 6d 65 6e 74 20 28 73 75 63 68 20 61 73 20 24 61  ment (such as $a
9100: 62 63 2c 20 40 70 71 72 2c 20 6f 72 20 3a 78 79  bc, @pqr, or :xy
9110: 7a 29 20 61 6e 64 20 74 68 65 20 69 6e 74 65 67  z) and the integ
9120: 65 72 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e  er.** variable n
9130: 75 6d 62 65 72 20 61 73 73 6f 63 69 61 74 65 64  umber associated
9140: 20 77 69 74 68 20 74 68 61 74 20 70 61 72 61 6d   with that param
9150: 65 74 65 72 2e 20 20 53 65 65 20 74 68 65 20 66  eter.  See the f
9160: 6f 72 6d 61 74 20 64 65 73 63 72 69 70 74 69 6f  ormat descriptio
9170: 6e 0a 2a 2a 20 6f 6e 20 74 68 65 20 73 71 6c 69  n.** on the sqli
9180: 74 65 33 56 4c 69 73 74 41 64 64 28 29 20 72 6f  te3VListAdd() ro
9190: 75 74 69 6e 65 20 66 6f 72 20 6d 6f 72 65 20 69  utine for more i
91a0: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 20 41 20 56  nformation.  A V
91b0: 4c 69 73 74 20 69 73 20 72 65 61 6c 6c 79 0a 2a  List is really.*
91c0: 2a 20 6a 75 73 74 20 61 6e 20 61 72 72 61 79 20  * just an array 
91d0: 6f 66 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2f 0a  of integers..*/.
91e0: 74 79 70 65 64 65 66 20 69 6e 74 20 56 4c 69 73  typedef int VLis
91f0: 74 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 65 72 20  t;../*.** Defer 
9200: 73 6f 75 72 63 69 6e 67 20 76 64 62 65 2e 68 20  sourcing vdbe.h 
9210: 61 6e 64 20 62 74 72 65 65 2e 68 20 75 6e 74 69  and btree.h unti
9220: 6c 20 61 66 74 65 72 20 74 68 65 20 22 75 38 22  l after the "u8"
9230: 20 61 6e 64 0a 2a 2a 20 22 42 75 73 79 48 61 6e   and.** "BusyHan
9240: 64 6c 65 72 22 20 74 79 70 65 64 65 66 73 2e 20  dler" typedefs. 
9250: 76 64 62 65 2e 68 20 61 6c 73 6f 20 72 65 71 75  vdbe.h also requ
9260: 69 72 65 73 20 61 20 66 65 77 20 6f 66 20 74 68  ires a few of th
9270: 65 20 6f 70 61 71 75 65 0a 2a 2a 20 70 6f 69 6e  e opaque.** poin
9280: 74 65 72 20 74 79 70 65 73 20 28 69 2e 65 2e 20  ter types (i.e. 
9290: 46 75 6e 63 44 65 66 29 20 64 65 66 69 6e 65 64  FuncDef) defined
92a0: 20 61 62 6f 76 65 2e 0a 2a 2f 0a 23 69 6e 63 6c   above..*/.#incl
92b0: 75 64 65 20 22 62 74 72 65 65 2e 68 22 0a 23 69  ude "btree.h".#i
92c0: 6e 63 6c 75 64 65 20 22 76 64 62 65 2e 68 22 0a  nclude "vdbe.h".
92d0: 23 69 6e 63 6c 75 64 65 20 22 70 61 67 65 72 2e  #include "pager.
92e0: 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 63 61  h".#include "pca
92f0: 63 68 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  che.h".#include 
9300: 22 6f 73 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  "os.h".#include 
9310: 22 6d 75 74 65 78 2e 68 22 0a 0a 2f 2a 20 54 68  "mutex.h"../* Th
9320: 65 20 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44  e SQLITE_EXTRA_D
9330: 55 52 41 42 4c 45 20 63 6f 6d 70 69 6c 65 2d 74  URABLE compile-t
9340: 69 6d 65 20 6f 70 74 69 6f 6e 20 75 73 65 64 20  ime option used 
9350: 74 6f 20 73 65 74 20 74 68 65 20 64 65 66 61 75  to set the defau
9360: 6c 74 0a 2a 2a 20 73 79 6e 63 68 72 6f 6e 6f 75  lt.** synchronou
9370: 73 20 73 65 74 74 69 6e 67 20 74 6f 20 45 58 54  s setting to EXT
9380: 52 41 2e 20 20 49 74 20 69 73 20 6e 6f 20 6c 6f  RA.  It is no lo
9390: 6e 67 65 72 20 73 75 70 70 6f 72 74 65 64 2e 0a  nger supported..
93a0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
93b0: 5f 45 58 54 52 41 5f 44 55 52 41 42 4c 45 0a 23  _EXTRA_DURABLE.#
93c0: 20 77 61 72 6e 69 6e 67 20 55 73 65 20 53 51 4c   warning Use SQL
93d0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43  ITE_DEFAULT_SYNC
93e0: 48 52 4f 4e 4f 55 53 3d 33 20 69 6e 73 74 65 61  HRONOUS=3 instea
93f0: 64 20 6f 66 20 53 51 4c 49 54 45 5f 45 58 54 52  d of SQLITE_EXTR
9400: 41 5f 44 55 52 41 42 4c 45 0a 23 20 64 65 66 69  A_DURABLE.# defi
9410: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
9420: 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 33 0a  T_SYNCHRONOUS 3.
9430: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65  #endif../*.** De
9440: 66 61 75 6c 74 20 73 79 6e 63 68 72 6f 6e 6f 75  fault synchronou
9450: 73 20 6c 65 76 65 6c 73 2e 0a 2a 2a 0a 2a 2a 20  s levels..**.** 
9460: 4e 6f 74 65 20 74 68 61 74 20 28 66 6f 72 20 68  Note that (for h
9470: 69 73 74 6f 72 63 61 6c 20 72 65 61 73 6f 6e 73  istorcal reasons
9480: 29 20 74 68 65 20 50 41 47 45 52 5f 53 59 4e 43  ) the PAGER_SYNC
9490: 48 52 4f 4e 4f 55 53 5f 2a 20 6d 61 63 72 6f 73  HRONOUS_* macros
94a0: 20 64 69 66 66 65 72 0a 2a 2a 20 66 72 6f 6d 20   differ.** from 
94b0: 74 68 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  the SQLITE_DEFAU
94c0: 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 76  LT_SYNCHRONOUS v
94d0: 61 6c 75 65 20 62 79 20 31 2e 0a 2a 2a 0a 2a 2a  alue by 1..**.**
94e0: 20 20 20 20 20 20 20 20 20 20 20 50 41 47 45 52             PAGER
94f0: 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 20 20 20  _SYNCHRONOUS    
9500: 20 20 20 44 45 46 41 55 4c 54 5f 53 59 4e 43 48     DEFAULT_SYNCH
9510: 52 4f 4e 4f 55 53 0a 2a 2a 20 20 20 4f 46 46 20  RONOUS.**   OFF 
9520: 20 20 20 20 20 20 20 20 20 20 31 20 20 20 20 20            1     
9530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9540: 20 20 20 20 30 0a 2a 2a 20 20 20 4e 4f 52 4d 41      0.**   NORMA
9550: 4c 20 20 20 20 20 20 20 20 32 20 20 20 20 20 20  L        2      
9560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9570: 20 20 20 31 0a 2a 2a 20 20 20 46 55 4c 4c 20 20     1.**   FULL  
9580: 20 20 20 20 20 20 20 20 33 20 20 20 20 20 20 20          3       
9590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
95a0: 20 20 32 0a 2a 2a 20 20 20 45 58 54 52 41 20 20    2.**   EXTRA  
95b0: 20 20 20 20 20 20 20 34 20 20 20 20 20 20 20 20         4        
95c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
95d0: 20 33 0a 2a 2a 0a 2a 2a 20 54 68 65 20 22 50 52   3.**.** The "PR
95e0: 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73  AGMA synchronous
95f0: 22 20 73 74 61 74 65 6d 65 6e 74 20 61 6c 73 6f  " statement also
9600: 20 75 73 65 73 20 74 68 65 20 7a 65 72 6f 2d 62   uses the zero-b
9610: 61 73 65 64 20 6e 75 6d 62 65 72 73 2e 0a 2a 2a  ased numbers..**
9620: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
9630: 20 74 68 65 20 7a 65 72 6f 2d 62 61 73 65 64 20   the zero-based 
9640: 6e 75 6d 62 65 72 73 20 61 72 65 20 75 73 65 64  numbers are used
9650: 20 66 6f 72 20 61 6c 6c 20 65 78 74 65 72 6e 61   for all externa
9660: 6c 20 69 6e 74 65 72 66 61 63 65 73 0a 2a 2a 20  l interfaces.** 
9670: 61 6e 64 20 74 68 65 20 6f 6e 65 2d 62 61 73 65  and the one-base
9680: 64 20 76 61 6c 75 65 73 20 61 72 65 20 75 73 65  d values are use
9690: 64 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 0a 2a 2f  d internally..*/
96a0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
96b0: 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e  DEFAULT_SYNCHRON
96c0: 4f 55 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  OUS.# define SQL
96d0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43  ITE_DEFAULT_SYNC
96e0: 48 52 4f 4e 4f 55 53 20 32 0a 23 65 6e 64 69 66  HRONOUS 2.#endif
96f0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
9700: 44 45 46 41 55 4c 54 5f 57 41 4c 5f 53 59 4e 43  DEFAULT_WAL_SYNC
9710: 48 52 4f 4e 4f 55 53 0a 23 20 64 65 66 69 6e 65  HRONOUS.# define
9720: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
9730: 57 41 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20  WAL_SYNCHRONOUS 
9740: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53  SQLITE_DEFAULT_S
9750: 59 4e 43 48 52 4f 4e 4f 55 53 0a 23 65 6e 64 69  YNCHRONOUS.#endi
9760: 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61  f../*.** Each da
9770: 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62  tabase file to b
9780: 65 20 61 63 63 65 73 73 65 64 20 62 79 20 74 68  e accessed by th
9790: 65 20 73 79 73 74 65 6d 20 69 73 20 61 6e 20 69  e system is an i
97a0: 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68  nstance.** of th
97b0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
97c0: 63 74 75 72 65 2e 20 20 54 68 65 72 65 20 61 72  cture.  There ar
97d0: 65 20 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f  e normally two o
97e0: 66 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72  f these structur
97f0: 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c  es.** in the sql
9800: 69 74 65 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e  ite.aDb[] array.
9810: 20 20 61 44 62 5b 30 5d 20 69 73 20 74 68 65 20    aDb[0] is the 
9820: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
9830: 6c 65 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d  le and.** aDb[1]
9840: 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65   is the database
9850: 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 68 6f   file used to ho
9860: 6c 64 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  ld temporary tab
9870: 6c 65 73 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c  les.  Additional
9880: 0a 2a 2a 20 64 61 74 61 62 61 73 65 73 20 6d 61  .** databases ma
9890: 79 20 62 65 20 61 74 74 61 63 68 65 64 2e 0a 2a  y be attached..*
98a0: 2f 0a 73 74 72 75 63 74 20 44 62 20 7b 0a 20 20  /.struct Db {.  
98b0: 63 68 61 72 20 2a 7a 44 62 53 4e 61 6d 65 3b 20  char *zDbSName; 
98c0: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
98d0: 74 68 69 73 20 64 61 74 61 62 61 73 65 2e 20 28  this database. (
98e0: 73 63 68 65 6d 61 20 6e 61 6d 65 2c 20 6e 6f 74  schema name, not
98f0: 20 66 69 6c 65 6e 61 6d 65 29 20 2a 2f 0a 20 20   filename) */.  
9900: 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20  Btree *pBt;     
9910: 20 20 20 20 20 2f 2a 20 54 68 65 20 42 2a 54 72       /* The B*Tr
9920: 65 65 20 73 74 72 75 63 74 75 72 65 20 66 6f 72  ee structure for
9930: 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 66   this database f
9940: 69 6c 65 20 2a 2f 0a 20 20 75 38 20 73 61 66 65  ile */.  u8 safe
9950: 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20 2f 2a  ty_level;     /*
9960: 20 48 6f 77 20 61 67 67 72 65 73 73 69 76 65 20   How aggressive 
9970: 61 74 20 73 79 6e 63 69 6e 67 20 64 61 74 61 20  at syncing data 
9980: 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 75 38 20  to disk */.  u8 
9990: 62 53 79 6e 63 53 65 74 3b 20 20 20 20 20 20 20  bSyncSet;       
99a0: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 22 50 52    /* True if "PR
99b0: 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73  AGMA synchronous
99c0: 3d 4e 22 20 68 61 73 20 62 65 65 6e 20 72 75 6e  =N" has been run
99d0: 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
99e0: 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 50 6f  chema;     /* Po
99f0: 69 6e 74 65 72 20 74 6f 20 64 61 74 61 62 61 73  inter to databas
9a00: 65 20 73 63 68 65 6d 61 20 28 70 6f 73 73 69 62  e schema (possib
9a10: 6c 79 20 73 68 61 72 65 64 29 20 2a 2f 0a 7d 3b  ly shared) */.};
9a20: 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
9a30: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
9a40: 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 73  wing structure s
9a50: 74 6f 72 65 73 20 61 20 64 61 74 61 62 61 73 65  tores a database
9a60: 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d   schema..**.** M
9a70: 6f 73 74 20 53 63 68 65 6d 61 20 6f 62 6a 65 63  ost Schema objec
9a80: 74 73 20 61 72 65 20 61 73 73 6f 63 69 61 74 65  ts are associate
9a90: 64 20 77 69 74 68 20 61 20 42 74 72 65 65 2e 20  d with a Btree. 
9aa0: 20 54 68 65 20 65 78 63 65 70 74 69 6f 6e 20 69   The exception i
9ab0: 73 0a 2a 2a 20 74 68 65 20 53 63 68 65 6d 61 20  s.** the Schema 
9ac0: 66 6f 72 20 74 68 65 20 54 45 4d 50 20 64 61 74  for the TEMP dat
9ad0: 61 62 61 65 73 20 28 73 71 6c 69 74 65 33 2e 61  abaes (sqlite3.a
9ae0: 44 62 5b 31 5d 29 20 77 68 69 63 68 20 69 73 20  Db[1]) which is 
9af0: 66 72 65 65 2d 73 74 61 6e 64 69 6e 67 2e 0a 2a  free-standing..*
9b00: 2a 20 49 6e 20 73 68 61 72 65 64 20 63 61 63 68  * In shared cach
9b10: 65 20 6d 6f 64 65 2c 20 61 20 73 69 6e 67 6c 65  e mode, a single
9b20: 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 20 63   Schema object c
9b30: 61 6e 20 62 65 20 73 68 61 72 65 64 20 62 79 20  an be shared by 
9b40: 6d 75 6c 74 69 70 6c 65 0a 2a 2a 20 42 74 72 65  multiple.** Btre
9b50: 65 73 20 74 68 61 74 20 72 65 66 65 72 20 74 6f  es that refer to
9b60: 20 74 68 65 20 73 61 6d 65 20 75 6e 64 65 72 6c   the same underl
9b70: 79 69 6e 67 20 42 74 53 68 61 72 65 64 20 6f 62  ying BtShared ob
9b80: 6a 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 53 63 68 65  ject..**.** Sche
9b90: 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61  ma objects are a
9ba0: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 61  utomatically dea
9bb0: 6c 6c 6f 63 61 74 65 64 20 77 68 65 6e 20 74 68  llocated when th
9bc0: 65 20 6c 61 73 74 20 42 74 72 65 65 20 74 68 61  e last Btree tha
9bd0: 74 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 73 20  t.** references 
9be0: 74 68 65 6d 20 69 73 20 64 65 73 74 72 6f 79 65  them is destroye
9bf0: 64 2e 20 20 20 54 68 65 20 54 45 4d 50 20 53 63  d.   The TEMP Sc
9c00: 68 65 6d 61 20 69 73 20 6d 61 6e 75 61 6c 6c 79  hema is manually
9c10: 20 66 72 65 65 64 20 62 79 0a 2a 2a 20 73 71 6c   freed by.** sql
9c20: 69 74 65 33 5f 63 6c 6f 73 65 28 29 2e 0a 2a 0a  ite3_close()..*.
9c30: 2a 2a 20 41 20 74 68 72 65 61 64 20 6d 75 73 74  ** A thread must
9c40: 20 62 65 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75   be holding a mu
9c50: 74 65 78 20 6f 6e 20 74 68 65 20 63 6f 72 72 65  tex on the corre
9c60: 73 70 6f 6e 64 69 6e 67 20 42 74 72 65 65 20 69  sponding Btree i
9c70: 6e 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 61 63  n order.** to ac
9c80: 63 65 73 73 20 53 63 68 65 6d 61 20 63 6f 6e 74  cess Schema cont
9c90: 65 6e 74 2e 20 20 54 68 69 73 20 69 6d 70 6c 69  ent.  This impli
9ca0: 65 73 20 74 68 61 74 20 74 68 65 20 74 68 72 65  es that the thre
9cb0: 61 64 20 6d 75 73 74 20 61 6c 73 6f 20 62 65 0a  ad must also be.
9cc0: 2a 2a 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74  ** holding a mut
9cd0: 65 78 20 6f 6e 20 74 68 65 20 73 71 6c 69 74 65  ex on the sqlite
9ce0: 33 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 69  3 connection poi
9cf0: 6e 74 65 72 20 74 68 61 74 20 6f 77 6e 73 20 74  nter that owns t
9d00: 68 65 20 42 74 72 65 65 2e 0a 2a 2a 20 46 6f 72  he Btree..** For
9d10: 20 61 20 54 45 4d 50 20 53 63 68 65 6d 61 2c 20   a TEMP Schema, 
9d20: 6f 6e 6c 79 20 74 68 65 20 63 6f 6e 6e 65 63 74  only the connect
9d30: 69 6f 6e 20 6d 75 74 65 78 20 69 73 20 72 65 71  ion mutex is req
9d40: 75 69 72 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  uired..*/.struct
9d50: 20 53 63 68 65 6d 61 20 7b 0a 20 20 69 6e 74 20   Schema {.  int 
9d60: 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20  schema_cookie;  
9d70: 20 2f 2a 20 44 61 74 61 62 61 73 65 20 73 63 68   /* Database sch
9d80: 65 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62  ema version numb
9d90: 65 72 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65  er for this file
9da0: 20 2a 2f 0a 20 20 69 6e 74 20 69 47 65 6e 65 72   */.  int iGener
9db0: 61 74 69 6f 6e 3b 20 20 20 20 20 2f 2a 20 47 65  ation;     /* Ge
9dc0: 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72  neration counter
9dd0: 2e 20 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77  .  Incremented w
9de0: 69 74 68 20 65 61 63 68 20 63 68 61 6e 67 65 20  ith each change 
9df0: 2a 2f 0a 20 20 48 61 73 68 20 74 62 6c 48 61 73  */.  Hash tblHas
9e00: 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  h;        /* All
9e10: 20 74 61 62 6c 65 73 20 69 6e 64 65 78 65 64 20   tables indexed 
9e20: 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73  by name */.  Has
9e30: 68 20 69 64 78 48 61 73 68 3b 20 20 20 20 20 20  h idxHash;      
9e40: 20 20 2f 2a 20 41 6c 6c 20 28 6e 61 6d 65 64 29    /* All (named)
9e50: 20 69 6e 64 69 63 65 73 20 69 6e 64 65 78 65 64   indices indexed
9e60: 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61   by name */.  Ha
9e70: 73 68 20 74 72 69 67 48 61 73 68 3b 20 20 20 20  sh trigHash;    
9e80: 20 20 20 2f 2a 20 41 6c 6c 20 74 72 69 67 67 65     /* All trigge
9e90: 72 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61  rs indexed by na
9ea0: 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 66 6b 65  me */.  Hash fke
9eb0: 79 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20  yHash;       /* 
9ec0: 41 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73  All foreign keys
9ed0: 20 62 79 20 72 65 66 65 72 65 6e 63 65 64 20 74   by referenced t
9ee0: 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54  able name */.  T
9ef0: 61 62 6c 65 20 2a 70 53 65 71 54 61 62 3b 20 20  able *pSeqTab;  
9f00: 20 20 20 20 2f 2a 20 54 68 65 20 73 71 6c 69 74      /* The sqlit
9f10: 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65  e_sequence table
9f20: 20 75 73 65 64 20 62 79 20 41 55 54 4f 49 4e 43   used by AUTOINC
9f30: 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 75 38 20 66  REMENT */.  u8 f
9f40: 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20  ile_format;     
9f50: 20 2f 2a 20 53 63 68 65 6d 61 20 66 6f 72 6d 61   /* Schema forma
9f60: 74 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 74 68  t version for th
9f70: 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20  is file */.  u8 
9f80: 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  enc;            
9f90: 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69    /* Text encodi
9fa0: 6e 67 20 75 73 65 64 20 62 79 20 74 68 69 73 20  ng used by this 
9fb0: 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 31  database */.  u1
9fc0: 36 20 73 63 68 65 6d 61 46 6c 61 67 73 3b 20 20  6 schemaFlags;  
9fd0: 20 20 20 2f 2a 20 46 6c 61 67 73 20 61 73 73 6f     /* Flags asso
9fe0: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73  ciated with this
9ff0: 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74   schema */.  int
a000: 20 63 61 63 68 65 5f 73 69 7a 65 3b 20 20 20 20   cache_size;    
a010: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70    /* Number of p
a020: 61 67 65 73 20 74 6f 20 75 73 65 20 69 6e 20 74  ages to use in t
a030: 68 65 20 63 61 63 68 65 20 2a 2f 0a 7d 3b 0a 0a  he cache */.};..
a040: 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72  /*.** These macr
a050: 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  os can be used t
a060: 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20  o test, set, or 
a070: 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74 68  clear bits in th
a080: 65 0a 2a 2a 20 44 62 2e 70 53 63 68 65 6d 61 2d  e.** Db.pSchema-
a090: 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f  >flags field..*/
a0a0: 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73 50 72  .#define DbHasPr
a0b0: 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20  operty(D,I,P)   
a0c0: 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e    (((D)->aDb[I].
a0d0: 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46  pSchema->schemaF
a0e0: 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a  lags&(P))==(P)).
a0f0: 23 64 65 66 69 6e 65 20 44 62 48 61 73 41 6e 79  #define DbHasAny
a100: 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20  Property(D,I,P) 
a110: 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70   (((D)->aDb[I].p
a120: 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c  Schema->schemaFl
a130: 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65  ags&(P))!=0).#de
a140: 66 69 6e 65 20 44 62 53 65 74 50 72 6f 70 65 72  fine DbSetProper
a150: 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28 44  ty(D,I,P)     (D
a160: 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d  )->aDb[I].pSchem
a170: 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 7c 3d  a->schemaFlags|=
a180: 28 50 29 0a 23 64 65 66 69 6e 65 20 44 62 43 6c  (P).#define DbCl
a190: 65 61 72 50 72 6f 70 65 72 74 79 28 44 2c 49 2c  earProperty(D,I,
a1a0: 50 29 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d  P)   (D)->aDb[I]
a1b0: 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61  .pSchema->schema
a1c0: 46 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a  Flags&=~(P)../*.
a1d0: 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  ** Allowed value
a1e0: 73 20 66 6f 72 20 74 68 65 20 44 42 2e 70 53 63  s for the DB.pSc
a1f0: 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c  hema->flags fiel
a200: 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 44 42 5f  d..**.** The DB_
a210: 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 66 6c 61  SchemaLoaded fla
a220: 67 20 69 73 20 73 65 74 20 61 66 74 65 72 20 74  g is set after t
a230: 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
a240: 6d 61 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 72  ma has been.** r
a250: 65 61 64 20 69 6e 74 6f 20 69 6e 74 65 72 6e 61  ead into interna
a260: 6c 20 68 61 73 68 20 74 61 62 6c 65 73 2e 0a 2a  l hash tables..*
a270: 2a 0a 2a 2a 20 44 42 5f 55 6e 72 65 73 65 74 56  *.** DB_UnresetV
a280: 69 65 77 73 20 6d 65 61 6e 73 20 74 68 61 74 20  iews means that 
a290: 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 76 69 65 77  one or more view
a2a0: 73 20 68 61 76 65 20 63 6f 6c 75 6d 6e 20 6e 61  s have column na
a2b0: 6d 65 73 20 74 68 61 74 0a 2a 2a 20 68 61 76 65  mes that.** have
a2c0: 20 62 65 65 6e 20 66 69 6c 6c 65 64 20 6f 75 74   been filled out
a2d0: 2e 20 20 49 66 20 74 68 65 20 73 63 68 65 6d 61  .  If the schema
a2e0: 20 63 68 61 6e 67 65 73 2c 20 74 68 65 73 65 20   changes, these 
a2f0: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6d 69 67  column names mig
a300: 68 74 0a 2a 2a 20 63 68 61 6e 67 65 73 20 61 6e  ht.** changes an
a310: 64 20 73 6f 20 74 68 65 20 76 69 65 77 20 77 69  d so the view wi
a320: 6c 6c 20 6e 65 65 64 20 74 6f 20 62 65 20 72 65  ll need to be re
a330: 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  set..*/.#define 
a340: 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20  DB_SchemaLoaded 
a350: 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 54 68     0x0001  /* Th
a360: 65 20 73 63 68 65 6d 61 20 68 61 73 20 62 65 65  e schema has bee
a370: 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a 23 64 65 66  n loaded */.#def
a380: 69 6e 65 20 44 42 5f 55 6e 72 65 73 65 74 56 69  ine DB_UnresetVi
a390: 65 77 73 20 20 20 20 30 78 30 30 30 32 20 20 2f  ews    0x0002  /
a3a0: 2a 20 53 6f 6d 65 20 76 69 65 77 73 20 68 61 76  * Some views hav
a3b0: 65 20 64 65 66 69 6e 65 64 20 63 6f 6c 75 6d 6e  e defined column
a3c0: 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e   names */.#defin
a3d0: 65 20 44 42 5f 45 6d 70 74 79 20 20 20 20 20 20  e DB_Empty      
a3e0: 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20       0x0004  /* 
a3f0: 54 68 65 20 66 69 6c 65 20 69 73 20 65 6d 70 74  The file is empt
a400: 79 20 28 6c 65 6e 67 74 68 20 30 20 62 79 74 65  y (length 0 byte
a410: 73 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42  s) */.#define DB
a420: 5f 52 65 73 65 74 57 61 6e 74 65 64 20 20 20 20  _ResetWanted    
a430: 20 30 78 30 30 30 38 20 20 2f 2a 20 52 65 73 65   0x0008  /* Rese
a440: 74 20 74 68 65 20 73 63 68 65 6d 61 20 77 68 65  t the schema whe
a450: 6e 20 6e 53 63 68 65 6d 61 4c 6f 63 6b 3d 3d 30  n nSchemaLock==0
a460: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e   */../*.** The n
a470: 75 6d 62 65 72 20 6f 66 20 64 69 66 66 65 72 65  umber of differe
a480: 6e 74 20 6b 69 6e 64 73 20 6f 66 20 74 68 69 6e  nt kinds of thin
a490: 67 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 6c  gs that can be l
a4a0: 69 6d 69 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20  imited.** using 
a4b0: 74 68 65 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69  the sqlite3_limi
a4c0: 74 28 29 20 69 6e 74 65 72 66 61 63 65 2e 0a 2a  t() interface..*
a4d0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
a4e0: 5f 4e 5f 4c 49 4d 49 54 20 28 53 51 4c 49 54 45  _N_LIMIT (SQLITE
a4f0: 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48  _LIMIT_WORKER_TH
a500: 52 45 41 44 53 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20  READS+1)../*.** 
a510: 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63  Lookaside malloc
a520: 20 69 73 20 61 20 73 65 74 20 6f 66 20 66 69 78   is a set of fix
a530: 65 64 2d 73 69 7a 65 20 62 75 66 66 65 72 73 20  ed-size buffers 
a540: 74 68 61 74 20 63 61 6e 20 62 65 20 75 73 65 64  that can be used
a550: 0a 2a 2a 20 74 6f 20 73 61 74 69 73 66 79 20 73  .** to satisfy s
a560: 6d 61 6c 6c 20 74 72 61 6e 73 69 65 6e 74 20 6d  mall transient m
a570: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
a580: 20 72 65 71 75 65 73 74 73 20 66 6f 72 20 6f 62   requests for ob
a590: 6a 65 63 74 73 0a 2a 2a 20 61 73 73 6f 63 69 61  jects.** associa
a5a0: 74 65 64 20 77 69 74 68 20 61 20 70 61 72 74 69  ted with a parti
a5b0: 63 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 63  cular database c
a5c0: 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65 20  onnection.  The 
a5d0: 75 73 65 20 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61 73  use of.** lookas
a5e0: 69 64 65 20 6d 61 6c 6c 6f 63 20 70 72 6f 76 69  ide malloc provi
a5f0: 64 65 73 20 61 20 73 69 67 6e 69 66 69 63 61 6e  des a significan
a600: 74 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 65 6e  t performance en
a610: 68 61 6e 63 65 6d 65 6e 74 0a 2a 2a 20 28 61 70  hancement.** (ap
a620: 70 72 6f 78 20 31 30 25 29 20 62 79 20 61 76 6f  prox 10%) by avo
a630: 69 64 69 6e 67 20 6e 75 6d 65 72 6f 75 73 20 6d  iding numerous m
a640: 61 6c 6c 6f 63 2f 66 72 65 65 20 72 65 71 75 65  alloc/free reque
a650: 73 74 73 20 77 68 69 6c 65 20 70 61 72 73 69 6e  sts while parsin
a660: 67 0a 2a 2a 20 53 51 4c 20 73 74 61 74 65 6d 65  g.** SQL stateme
a670: 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c  nts..**.** The L
a680: 6f 6f 6b 61 73 69 64 65 20 73 74 72 75 63 74 75  ookaside structu
a690: 72 65 20 68 6f 6c 64 73 20 63 6f 6e 66 69 67 75  re holds configu
a6a0: 72 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69  ration informati
a6b0: 6f 6e 20 61 62 6f 75 74 20 74 68 65 0a 2a 2a 20  on about the.** 
a6c0: 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63  lookaside malloc
a6d0: 20 73 75 62 73 79 73 74 65 6d 2e 20 20 45 61 63   subsystem.  Eac
a6e0: 68 20 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f  h available memo
a6f0: 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e  ry allocation in
a700: 0a 2a 2a 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64  .** the lookasid
a710: 65 20 73 75 62 73 79 73 74 65 6d 20 69 73 20 73  e subsystem is s
a720: 74 6f 72 65 64 20 6f 6e 20 61 20 6c 69 6e 6b 65  tored on a linke
a730: 64 20 6c 69 73 74 20 6f 66 20 4c 6f 6f 6b 61 73  d list of Lookas
a740: 69 64 65 53 6c 6f 74 0a 2a 2a 20 6f 62 6a 65 63  ideSlot.** objec
a750: 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73  ts..**.** Lookas
a760: 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  ide allocations 
a770: 61 72 65 20 6f 6e 6c 79 20 61 6c 6c 6f 77 65 64  are only allowed
a780: 20 66 6f 72 20 6f 62 6a 65 63 74 73 20 74 68 61   for objects tha
a790: 74 20 61 72 65 20 61 73 73 6f 63 69 61 74 65 64  t are associated
a7a0: 0a 2a 2a 20 77 69 74 68 20 61 20 70 61 72 74 69  .** with a parti
a7b0: 63 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 63  cular database c
a7c0: 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 48 65 6e 63  onnection.  Henc
a7d0: 65 2c 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d  e, schema inform
a7e0: 61 74 69 6f 6e 20 63 61 6e 6e 6f 74 0a 2a 2a 20  ation cannot.** 
a7f0: 62 65 20 73 74 6f 72 65 64 20 69 6e 20 6c 6f 6f  be stored in loo
a800: 6b 61 73 69 64 65 20 62 65 63 61 75 73 65 20 69  kaside because i
a810: 6e 20 73 68 61 72 65 64 20 63 61 63 68 65 20 6d  n shared cache m
a820: 6f 64 65 20 74 68 65 20 73 63 68 65 6d 61 20 69  ode the schema i
a830: 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 69 73  nformation.** is
a840: 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69   shared by multi
a850: 70 6c 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ple database con
a860: 6e 65 63 74 69 6f 6e 73 2e 20 20 54 68 65 72 65  nections.  There
a870: 66 6f 72 65 2c 20 77 68 69 6c 65 20 70 61 72 73  fore, while pars
a880: 69 6e 67 0a 2a 2a 20 73 63 68 65 6d 61 20 69 6e  ing.** schema in
a890: 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20 4c  formation, the L
a8a0: 6f 6f 6b 61 73 69 64 65 2e 62 45 6e 61 62 6c 65  ookaside.bEnable
a8b0: 64 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 65  d flag is cleare
a8c0: 64 20 73 6f 20 74 68 61 74 0a 2a 2a 20 6c 6f 6f  d so that.** loo
a8d0: 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f  kaside allocatio
a8e0: 6e 73 20 61 72 65 20 6e 6f 74 20 75 73 65 64 20  ns are not used 
a8f0: 74 6f 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65  to construct the
a900: 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 2e   schema objects.
a910: 0a 2a 2f 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61  .*/.struct Looka
a920: 73 69 64 65 20 7b 0a 20 20 75 33 32 20 62 44 69  side {.  u32 bDi
a930: 73 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  sable;          
a940: 20 2f 2a 20 4f 6e 6c 79 20 6f 70 65 72 61 74 65   /* Only operate
a950: 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20 77   the lookaside w
a960: 68 65 6e 20 7a 65 72 6f 20 2a 2f 0a 20 20 75 31  hen zero */.  u1
a970: 36 20 73 7a 3b 20 20 20 20 20 20 20 20 20 20 20  6 sz;           
a980: 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
a990: 20 65 61 63 68 20 62 75 66 66 65 72 20 69 6e 20   each buffer in 
a9a0: 62 79 74 65 73 20 2a 2f 0a 20 20 75 38 20 62 4d  bytes */.  u8 bM
a9b0: 61 6c 6c 6f 63 65 64 3b 20 20 20 20 20 20 20 20  alloced;        
a9c0: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70 53     /* True if pS
a9d0: 74 61 72 74 20 6f 62 74 61 69 6e 65 64 20 66 72  tart obtained fr
a9e0: 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f  om sqlite3_mallo
a9f0: 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 75  c() */.  int nOu
aa00: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
aa10: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 75   /* Number of bu
aa20: 66 66 65 72 73 20 63 75 72 72 65 6e 74 6c 79 20  ffers currently 
aa30: 63 68 65 63 6b 65 64 20 6f 75 74 20 2a 2f 0a 20  checked out */. 
aa40: 20 69 6e 74 20 6d 78 4f 75 74 3b 20 20 20 20 20   int mxOut;     
aa50: 20 20 20 20 20 20 20 20 20 2f 2a 20 48 69 67 68           /* High
aa60: 77 61 74 65 72 20 6d 61 72 6b 20 66 6f 72 20 6e  water mark for n
aa70: 4f 75 74 20 2a 2f 0a 20 20 69 6e 74 20 61 6e 53  Out */.  int anS
aa80: 74 61 74 5b 33 5d 3b 20 20 20 20 20 20 20 20 20  tat[3];         
aa90: 20 2f 2a 20 30 3a 20 68 69 74 73 2e 20 20 31 3a   /* 0: hits.  1:
aaa0: 20 73 69 7a 65 20 6d 69 73 73 65 73 2e 20 20 32   size misses.  2
aab0: 3a 20 66 75 6c 6c 20 6d 69 73 73 65 73 20 2a 2f  : full misses */
aac0: 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  .  LookasideSlot
aad0: 20 2a 70 46 72 65 65 3b 20 20 20 2f 2a 20 4c 69   *pFree;   /* Li
aae0: 73 74 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20  st of available 
aaf0: 62 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69  buffers */.  voi
ab00: 64 20 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20  d *pStart;      
ab10: 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79       /* First by
ab20: 74 65 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20  te of available 
ab30: 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 2a 2f 0a  memory space */.
ab40: 20 20 76 6f 69 64 20 2a 70 45 6e 64 3b 20 20 20    void *pEnd;   
ab50: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
ab60: 73 74 20 62 79 74 65 20 70 61 73 74 20 65 6e 64  st byte past end
ab70: 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73 70   of available sp
ab80: 61 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74  ace */.};.struct
ab90: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 7b   LookasideSlot {
aba0: 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  .  LookasideSlot
abb0: 20 2a 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20 4e   *pNext;    /* N
abc0: 65 78 74 20 62 75 66 66 65 72 20 69 6e 20 74 68  ext buffer in th
abd0: 65 20 6c 69 73 74 20 6f 66 20 66 72 65 65 20 62  e list of free b
abe0: 75 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  uffers */.};../*
abf0: 0a 2a 2a 20 41 20 68 61 73 68 20 74 61 62 6c 65  .** A hash table
ac00: 20 66 6f 72 20 62 75 69 6c 74 2d 69 6e 20 66 75   for built-in fu
ac10: 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f  nction definitio
ac20: 6e 73 2e 20 20 28 41 70 70 6c 69 63 61 74 69 6f  ns.  (Applicatio
ac30: 6e 2d 64 65 66 69 6e 65 64 0a 2a 2a 20 66 75 6e  n-defined.** fun
ac40: 63 74 69 6f 6e 73 20 75 73 65 20 61 20 72 65 67  ctions use a reg
ac50: 75 6c 61 72 20 74 61 62 6c 65 20 74 61 62 6c 65  ular table table
ac60: 20 66 72 6f 6d 20 68 61 73 68 2e 68 2e 29 0a 2a   from hash.h.).*
ac70: 2a 0a 2a 2a 20 48 61 73 68 20 65 61 63 68 20 46  *.** Hash each F
ac80: 75 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65  uncDef structure
ac90: 20 69 6e 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65   into one of the
aca0: 20 46 75 6e 63 44 65 66 48 61 73 68 2e 61 5b 5d   FuncDefHash.a[]
acb0: 20 73 6c 6f 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69   slots..** Colli
acc0: 73 69 6f 6e 73 20 61 72 65 20 6f 6e 20 74 68 65  sions are on the
acd0: 20 46 75 6e 63 44 65 66 2e 75 2e 70 48 61 73 68   FuncDef.u.pHash
ace0: 20 63 68 61 69 6e 2e 0a 2a 2f 0a 23 64 65 66 69   chain..*/.#defi
acf0: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48  ne SQLITE_FUNC_H
ad00: 41 53 48 5f 53 5a 20 32 33 0a 73 74 72 75 63 74  ASH_SZ 23.struct
ad10: 20 46 75 6e 63 44 65 66 48 61 73 68 20 7b 0a 20   FuncDefHash {. 
ad20: 20 46 75 6e 63 44 65 66 20 2a 61 5b 53 51 4c 49   FuncDef *a[SQLI
ad30: 54 45 5f 46 55 4e 43 5f 48 41 53 48 5f 53 5a 5d  TE_FUNC_HASH_SZ]
ad40: 3b 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68 20  ;       /* Hash 
ad50: 74 61 62 6c 65 20 66 6f 72 20 66 75 6e 63 74 69  table for functi
ad60: 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 23 69 66 64 65  ons */.};..#ifde
ad70: 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55  f SQLITE_USER_AU
ad80: 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 2f 2a 0a  THENTICATION./*.
ad90: 2a 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 68  ** Information h
ada0: 65 6c 64 20 69 6e 20 74 68 65 20 22 73 71 6c 69  eld in the "sqli
adb0: 74 65 33 22 20 64 61 74 61 62 61 73 65 20 63 6f  te3" database co
adc0: 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 20  nnection object 
add0: 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 6d  and used.** to m
ade0: 61 6e 61 67 65 20 75 73 65 72 20 61 75 74 68 65  anage user authe
adf0: 6e 74 69 63 61 74 69 6f 6e 2e 0a 2a 2f 0a 74 79  ntication..*/.ty
ae00: 70 65 64 65 66 20 73 74 72 75 63 74 20 73 71 6c  pedef struct sql
ae10: 69 74 65 33 5f 75 73 65 72 61 75 74 68 20 73 71  ite3_userauth sq
ae20: 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 3b 0a  lite3_userauth;.
ae30: 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f 75  struct sqlite3_u
ae40: 73 65 72 61 75 74 68 20 7b 0a 20 20 75 38 20 61  serauth {.  u8 a
ae50: 75 74 68 4c 65 76 65 6c 3b 20 20 20 20 20 20 20  uthLevel;       
ae60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72            /* Cur
ae70: 72 65 6e 74 20 61 75 74 68 65 6e 74 69 63 61 74  rent authenticat
ae80: 69 6f 6e 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 69  ion level */.  i
ae90: 6e 74 20 6e 41 75 74 68 50 57 3b 20 20 20 20 20  nt nAuthPW;     
aea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
aeb0: 53 69 7a 65 20 6f 66 20 74 68 65 20 7a 41 75 74  Size of the zAut
aec0: 68 50 57 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a  hPW in bytes */.
aed0: 20 20 63 68 61 72 20 2a 7a 41 75 74 68 50 57 3b    char *zAuthPW;
aee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aef0: 2f 2a 20 50 61 73 73 77 6f 72 64 20 75 73 65 64  /* Password used
af00: 20 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65   to authenticate
af10: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75 74   */.  char *zAut
af20: 68 55 73 65 72 3b 20 20 20 20 20 20 20 20 20 20  hUser;          
af30: 20 20 20 20 2f 2a 20 55 73 65 72 20 6e 61 6d 65      /* User name
af40: 20 75 73 65 64 20 74 6f 20 61 75 74 68 65 6e 74   used to authent
af50: 69 63 61 74 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20  icate */.};../* 
af60: 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
af70: 6f 72 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61  or sqlite3_usera
af80: 75 74 68 2e 61 75 74 68 4c 65 76 65 6c 20 2a 2f  uth.authLevel */
af90: 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 55  .#define UAUTH_U
afa0: 6e 6b 6e 6f 77 6e 20 20 20 20 20 30 20 20 20 20  nknown     0    
afb0: 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 69   /* Authenticati
afc0: 6f 6e 20 6e 6f 74 20 79 65 74 20 63 68 65 63 6b  on not yet check
afd0: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41  ed */.#define UA
afe0: 55 54 48 5f 46 61 69 6c 20 20 20 20 20 20 20 20  UTH_Fail        
aff0: 31 20 20 20 20 20 2f 2a 20 55 73 65 72 20 61 75  1     /* User au
b000: 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 66 61 69  thentication fai
b010: 6c 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55  led */.#define U
b020: 41 55 54 48 5f 55 73 65 72 20 20 20 20 20 20 20  AUTH_User       
b030: 20 32 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e   2     /* Authen
b040: 74 69 63 61 74 65 64 20 61 73 20 61 20 6e 6f 72  ticated as a nor
b050: 6d 61 6c 20 75 73 65 72 20 2a 2f 0a 23 64 65 66  mal user */.#def
b060: 69 6e 65 20 55 41 55 54 48 5f 41 64 6d 69 6e 20  ine UAUTH_Admin 
b070: 20 20 20 20 20 20 33 20 20 20 20 20 2f 2a 20 41        3     /* A
b080: 75 74 68 65 6e 74 69 63 61 74 65 64 20 61 73 20  uthenticated as 
b090: 61 6e 20 61 64 6d 69 6e 69 73 74 72 61 74 6f 72  an administrator
b0a0: 20 2a 2f 0a 0a 2f 2a 20 46 75 6e 63 74 69 6f 6e   */../* Function
b0b0: 73 20 75 73 65 64 20 6f 6e 6c 79 20 62 79 20 75  s used only by u
b0c0: 73 65 72 20 61 75 74 68 6f 72 69 7a 61 74 69 6f  ser authorizatio
b0d0: 6e 20 6c 6f 67 69 63 20 2a 2f 0a 69 6e 74 20 73  n logic */.int s
b0e0: 71 6c 69 74 65 33 55 73 65 72 41 75 74 68 54 61  qlite3UserAuthTa
b0f0: 62 6c 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  ble(const char*)
b100: 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 73 65  ;.int sqlite3Use
b110: 72 41 75 74 68 43 68 65 63 6b 4c 6f 67 69 6e 28  rAuthCheckLogin(
b120: 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
b130: 68 61 72 2a 2c 75 38 2a 29 3b 0a 76 6f 69 64 20  har*,u8*);.void 
b140: 73 71 6c 69 74 65 33 55 73 65 72 41 75 74 68 49  sqlite3UserAuthI
b150: 6e 69 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  nit(sqlite3*);.v
b160: 6f 69 64 20 73 71 6c 69 74 65 33 43 72 79 70 74  oid sqlite3Crypt
b170: 46 75 6e 63 28 73 71 6c 69 74 65 33 5f 63 6f 6e  Func(sqlite3_con
b180: 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
b190: 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 0a 23 65 6e  3_value**);..#en
b1a0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 55 53  dif /* SQLITE_US
b1b0: 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f  ER_AUTHENTICATIO
b1c0: 4e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 74 79 70 65  N */../*.** type
b1d0: 64 65 66 20 66 6f 72 20 74 68 65 20 61 75 74 68  def for the auth
b1e0: 6f 72 69 7a 61 74 69 6f 6e 20 63 61 6c 6c 62 61  orization callba
b1f0: 63 6b 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a  ck function..*/.
b200: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53  #ifdef SQLITE_US
b210: 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f  ER_AUTHENTICATIO
b220: 4e 0a 20 20 74 79 70 65 64 65 66 20 69 6e 74 20  N.  typedef int 
b230: 28 2a 73 71 6c 69 74 65 33 5f 78 61 75 74 68 29  (*sqlite3_xauth)
b240: 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74  (void*,int,const
b250: 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
b260: 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a  r*,const char*,.
b270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
b290: 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
b2a0: 74 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a  t char*);.#else.
b2b0: 20 20 74 79 70 65 64 65 66 20 69 6e 74 20 28 2a    typedef int (*
b2c0: 73 71 6c 69 74 65 33 5f 78 61 75 74 68 29 28 76  sqlite3_xauth)(v
b2d0: 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  oid*,int,const c
b2e0: 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
b2f0: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20  ,const char*,.  
b300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b310: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
b320: 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69  st char*);.#endi
b330: 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
b340: 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45  E_OMIT_DEPRECATE
b350: 44 0a 2f 2a 20 54 68 69 73 20 69 73 20 61 6e 20  D./* This is an 
b360: 65 78 74 72 61 20 53 51 4c 49 54 45 5f 54 52 41  extra SQLITE_TRA
b370: 43 45 20 6d 61 63 72 6f 20 74 68 61 74 20 69 6e  CE macro that in
b380: 64 69 63 61 74 65 73 20 22 6c 65 67 61 63 79 22  dicates "legacy"
b390: 20 74 72 61 63 69 6e 67 0a 2a 2a 20 69 6e 20 74   tracing.** in t
b3a0: 68 65 20 73 74 79 6c 65 20 6f 66 20 73 71 6c 69  he style of sqli
b3b0: 74 65 33 5f 74 72 61 63 65 28 29 0a 2a 2f 0a 23  te3_trace().*/.#
b3c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 52  define SQLITE_TR
b3d0: 41 43 45 5f 4c 45 47 41 43 59 20 20 30 78 38 30  ACE_LEGACY  0x80
b3e0: 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 53  .#else.#define S
b3f0: 51 4c 49 54 45 5f 54 52 41 43 45 5f 4c 45 47 41  QLITE_TRACE_LEGA
b400: 43 59 20 20 30 0a 23 65 6e 64 69 66 20 2f 2a 20  CY  0.#endif /* 
b410: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52  SQLITE_OMIT_DEPR
b420: 45 43 41 54 45 44 20 2a 2f 0a 0a 0a 2f 2a 0a 2a  ECATED */.../*.*
b430: 2a 20 45 61 63 68 20 64 61 74 61 62 61 73 65 20  * Each database 
b440: 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 61 6e  connection is an
b450: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
b460: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
b470: 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ture..*/.struct 
b480: 73 71 6c 69 74 65 33 20 7b 0a 20 20 73 71 6c 69  sqlite3 {.  sqli
b490: 74 65 33 5f 76 66 73 20 2a 70 56 66 73 3b 20 20  te3_vfs *pVfs;  
b4a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 53 20            /* OS 
b4b0: 49 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73  Interface */.  s
b4c0: 74 72 75 63 74 20 56 64 62 65 20 2a 70 56 64 62  truct Vdbe *pVdb
b4d0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
b4e0: 4c 69 73 74 20 6f 66 20 61 63 74 69 76 65 20 76  List of active v
b4f0: 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 73 20  irtual machines 
b500: 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 44  */.  CollSeq *pD
b510: 66 6c 74 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20  fltColl;        
b520: 20 20 20 2f 2a 20 54 68 65 20 64 65 66 61 75 6c     /* The defaul
b530: 74 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  t collating sequ
b540: 65 6e 63 65 20 28 42 49 4e 41 52 59 29 20 2a 2f  ence (BINARY) */
b550: 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
b560: 20 2a 6d 75 74 65 78 3b 20 20 20 20 20 20 20 20   *mutex;        
b570: 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 6d   /* Connection m
b580: 75 74 65 78 20 2a 2f 0a 20 20 44 62 20 2a 61 44  utex */.  Db *aD
b590: 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
b5a0: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 62          /* All b
b5b0: 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 69 6e 74  ackends */.  int
b5c0: 20 6e 44 62 3b 20 20 20 20 20 20 20 20 20 20 20   nDb;           
b5d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
b5e0: 6d 62 65 72 20 6f 66 20 62 61 63 6b 65 6e 64 73  mber of backends
b5f0: 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73   currently in us
b600: 65 20 2a 2f 0a 20 20 75 33 32 20 6d 44 62 46 6c  e */.  u32 mDbFl
b610: 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
b620: 20 20 20 20 20 2f 2a 20 66 6c 61 67 73 20 72 65       /* flags re
b630: 63 6f 72 64 69 6e 67 20 69 6e 74 65 72 6e 61 6c  cording internal
b640: 20 73 74 61 74 65 20 2a 2f 0a 20 20 75 33 32 20   state */.  u32 
b650: 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  flags;          
b660: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 66 6c 61            /* fla
b670: 67 73 20 73 65 74 74 61 62 6c 65 20 62 79 20 70  gs settable by p
b680: 72 61 67 6d 61 73 2e 20 53 65 65 20 62 65 6c 6f  ragmas. See belo
b690: 77 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74 52  w */.  i64 lastR
b6a0: 6f 77 69 64 3b 20 20 20 20 20 20 20 20 20 20 20  owid;           
b6b0: 20 20 20 20 20 2f 2a 20 52 4f 57 49 44 20 6f 66       /* ROWID of
b6c0: 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 69 6e 73   most recent ins
b6d0: 65 72 74 20 28 73 65 65 20 61 62 6f 76 65 29 20  ert (see above) 
b6e0: 2a 2f 0a 20 20 69 36 34 20 73 7a 4d 6d 61 70 3b  */.  i64 szMmap;
b6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b700: 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6d 6d     /* Default mm
b710: 61 70 5f 73 69 7a 65 20 73 65 74 74 69 6e 67 20  ap_size setting 
b720: 2a 2f 0a 20 20 75 33 32 20 6e 53 63 68 65 6d 61  */.  u32 nSchema
b730: 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20  Lock;           
b740: 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 72 65 73     /* Do not res
b750: 65 74 20 74 68 65 20 73 63 68 65 6d 61 20 77 68  et the schema wh
b760: 65 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 2a 2f 0a 20  en non-zero */. 
b770: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6f 70   unsigned int op
b780: 65 6e 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f  enFlags;       /
b790: 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64 20 74  * Flags passed t
b7a0: 6f 20 73 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f  o sqlite3_vfs.xO
b7b0: 70 65 6e 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65  pen() */.  int e
b7c0: 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20  rrCode;         
b7d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74           /* Most
b7e0: 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 63 6f   recent error co
b7f0: 64 65 20 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f  de (SQLITE_*) */
b800: 0a 20 20 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20  .  int errMask; 
b810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b820: 20 2f 2a 20 26 20 72 65 73 75 6c 74 20 63 6f 64   /* & result cod
b830: 65 73 20 77 69 74 68 20 74 68 69 73 20 62 65 66  es with this bef
b840: 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f  ore returning */
b850: 0a 20 20 69 6e 74 20 69 53 79 73 45 72 72 6e 6f  .  int iSysErrno
b860: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
b870: 20 2f 2a 20 45 72 72 6e 6f 20 76 61 6c 75 65 20   /* Errno value 
b880: 66 72 6f 6d 20 6c 61 73 74 20 73 79 73 74 65 6d  from last system
b890: 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75 31 36 20   error */.  u16 
b8a0: 64 62 4f 70 74 46 6c 61 67 73 3b 20 20 20 20 20  dbOptFlags;     
b8b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6c 61            /* Fla
b8c0: 67 73 20 74 6f 20 65 6e 61 62 6c 65 2f 64 69 73  gs to enable/dis
b8d0: 61 62 6c 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f  able optimizatio
b8e0: 6e 73 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20  ns */.  u8 enc; 
b8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b900: 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e        /* Text en
b910: 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 75 38 20 61  coding */.  u8 a
b920: 75 74 6f 43 6f 6d 6d 69 74 3b 20 20 20 20 20 20  utoCommit;      
b930: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
b940: 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61   auto-commit fla
b950: 67 2e 20 2a 2f 0a 20 20 75 38 20 74 65 6d 70 5f  g. */.  u8 temp_
b960: 73 74 6f 72 65 3b 20 20 20 20 20 20 20 20 20 20  store;          
b970: 20 20 20 20 20 20 2f 2a 20 31 3a 20 66 69 6c 65        /* 1: file
b980: 20 32 3a 20 6d 65 6d 6f 72 79 20 30 3a 20 64 65   2: memory 0: de
b990: 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6d 61  fault */.  u8 ma
b9a0: 6c 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20 20 20  llocFailed;     
b9b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
b9c0: 20 69 66 20 77 65 20 68 61 76 65 20 73 65 65 6e   if we have seen
b9d0: 20 61 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72   a malloc failur
b9e0: 65 20 2a 2f 0a 20 20 75 38 20 62 42 65 6e 69 67  e */.  u8 bBenig
b9f0: 6e 4d 61 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20  nMalloc;        
ba00: 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 72       /* Do not r
ba10: 65 71 75 69 72 65 20 4f 4f 4d 73 20 69 66 20 74  equire OOMs if t
ba20: 72 75 65 20 2a 2f 0a 20 20 75 38 20 64 66 6c 74  rue */.  u8 dflt
ba30: 4c 6f 63 6b 4d 6f 64 65 3b 20 20 20 20 20 20 20  LockMode;       
ba40: 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
ba50: 74 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 66  t locking-mode f
ba60: 6f 72 20 61 74 74 61 63 68 65 64 20 64 62 73 20  or attached dbs 
ba70: 2a 2f 0a 20 20 73 69 67 6e 65 64 20 63 68 61 72  */.  signed char
ba80: 20 6e 65 78 74 41 75 74 6f 76 61 63 3b 20 20 20   nextAutovac;   
ba90: 20 20 20 2f 2a 20 41 75 74 6f 76 61 63 20 73 65     /* Autovac se
baa0: 74 74 69 6e 67 20 61 66 74 65 72 20 56 41 43 55  tting after VACU
bab0: 55 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a 20 20 75  UM if >=0 */.  u
bac0: 38 20 73 75 70 70 72 65 73 73 45 72 72 3b 20 20  8 suppressErr;  
bad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
bae0: 44 6f 20 6e 6f 74 20 69 73 73 75 65 20 65 72 72  Do not issue err
baf0: 6f 72 20 6d 65 73 73 61 67 65 73 20 69 66 20 74  or messages if t
bb00: 72 75 65 20 2a 2f 0a 20 20 75 38 20 76 74 61 62  rue */.  u8 vtab
bb10: 4f 6e 43 6f 6e 66 6c 69 63 74 3b 20 20 20 20 20  OnConflict;     
bb20: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
bb30: 74 6f 20 72 65 74 75 72 6e 20 66 6f 72 20 73 33  to return for s3
bb40: 5f 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63  _vtab_on_conflic
bb50: 74 28 29 20 2a 2f 0a 20 20 75 38 20 69 73 54 72  t() */.  u8 isTr
bb60: 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69  ansactionSavepoi
bb70: 6e 74 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69  nt;    /* True i
bb80: 66 20 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20  f the outermost 
bb90: 73 61 76 65 70 6f 69 6e 74 20 69 73 20 61 20 54  savepoint is a T
bba0: 53 20 2a 2f 0a 20 20 75 38 20 6d 54 72 61 63 65  S */.  u8 mTrace
bbb0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
bbc0: 20 20 20 20 20 2f 2a 20 7a 65 72 6f 20 6f 72 20       /* zero or 
bbd0: 6d 6f 72 65 20 53 51 4c 49 54 45 5f 54 52 41 43  more SQLITE_TRAC
bbe0: 45 20 66 6c 61 67 73 20 2a 2f 0a 20 20 75 38 20  E flags */.  u8 
bbf0: 73 6b 69 70 42 74 72 65 65 4d 75 74 65 78 3b 20  skipBtreeMutex; 
bc00: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
bc10: 75 65 20 69 66 20 6e 6f 20 73 68 61 72 65 64 2d  ue if no shared-
bc20: 63 61 63 68 65 20 62 61 63 6b 65 6e 64 73 20 2a  cache backends *
bc30: 2f 0a 20 20 75 38 20 6e 53 71 6c 45 78 65 63 3b  /.  u8 nSqlExec;
bc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc50: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70    /* Number of p
bc60: 65 6e 64 69 6e 67 20 4f 50 5f 53 71 6c 45 78 65  ending OP_SqlExe
bc70: 63 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 20 20 69  c opcodes */.  i
bc80: 6e 74 20 6e 65 78 74 50 61 67 65 73 69 7a 65 3b  nt nextPagesize;
bc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
bca0: 50 61 67 65 73 69 7a 65 20 61 66 74 65 72 20 56  Pagesize after V
bcb0: 41 43 55 55 4d 20 69 66 20 3e 30 20 2a 2f 0a 20  ACUUM if >0 */. 
bcc0: 20 75 33 32 20 6d 61 67 69 63 3b 20 20 20 20 20   u32 magic;     
bcd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
bce0: 2a 20 4d 61 67 69 63 20 6e 75 6d 62 65 72 20 66  * Magic number f
bcf0: 6f 72 20 64 65 74 65 63 74 20 6c 69 62 72 61 72  or detect librar
bd00: 79 20 6d 69 73 75 73 65 20 2a 2f 0a 20 20 69 6e  y misuse */.  in
bd10: 74 20 6e 43 68 61 6e 67 65 3b 20 20 20 20 20 20  t nChange;      
bd20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
bd30: 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79  alue returned by
bd40: 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73   sqlite3_changes
bd50: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 6f 74  () */.  int nTot
bd60: 61 6c 43 68 61 6e 67 65 3b 20 20 20 20 20 20 20  alChange;       
bd70: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72        /* Value r
bd80: 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74  eturned by sqlit
bd90: 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73  e3_total_changes
bda0: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 61 4c 69 6d  () */.  int aLim
bdb0: 69 74 5b 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49  it[SQLITE_N_LIMI
bdc0: 54 5d 3b 20 20 20 2f 2a 20 4c 69 6d 69 74 73 20  T];   /* Limits 
bdd0: 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 53 6f 72  */.  int nMaxSor
bde0: 74 65 72 4d 6d 61 70 3b 20 20 20 20 20 20 20 20  terMmap;        
bdf0: 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 69     /* Maximum si
be00: 7a 65 20 6f 66 20 72 65 67 69 6f 6e 73 20 6d 61  ze of regions ma
be10: 70 70 65 64 20 62 79 20 73 6f 72 74 65 72 20 2a  pped by sorter *
be20: 2f 0a 20 20 73 74 72 75 63 74 20 73 71 6c 69 74  /.  struct sqlit
be30: 65 33 49 6e 69 74 49 6e 66 6f 20 7b 20 20 20 20  e3InitInfo {    
be40: 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e    /* Information
be50: 20 75 73 65 64 20 64 75 72 69 6e 67 20 69 6e 69   used during ini
be60: 74 69 61 6c 69 7a 61 74 69 6f 6e 20 2a 2f 0a 20  tialization */. 
be70: 20 20 20 69 6e 74 20 6e 65 77 54 6e 75 6d 3b 20     int newTnum; 
be80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
be90: 2a 20 52 6f 6f 74 70 61 67 65 20 6f 66 20 74 61  * Rootpage of ta
bea0: 62 6c 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61  ble being initia
beb0: 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20  lized */.    u8 
bec0: 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  iDb;            
bed0: 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63           /* Whic
bee0: 68 20 64 62 20 66 69 6c 65 20 69 73 20 62 65 69  h db file is bei
bef0: 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  ng initialized *
bf00: 2f 0a 20 20 20 20 75 38 20 62 75 73 79 3b 20 20  /.    u8 busy;  
bf10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bf20: 20 20 2f 2a 20 54 52 55 45 20 69 66 20 63 75 72    /* TRUE if cur
bf30: 72 65 6e 74 6c 79 20 69 6e 69 74 69 61 6c 69 7a  rently initializ
bf40: 69 6e 67 20 2a 2f 0a 20 20 20 20 75 38 20 6f 72  ing */.    u8 or
bf50: 70 68 61 6e 54 72 69 67 67 65 72 3b 20 20 20 20  phanTrigger;    
bf60: 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 73         /* Last s
bf70: 74 61 74 65 6d 65 6e 74 20 69 73 20 6f 72 70 68  tatement is orph
bf80: 61 6e 65 64 20 54 45 4d 50 20 74 72 69 67 67 65  aned TEMP trigge
bf90: 72 20 2a 2f 0a 20 20 20 20 75 38 20 69 6d 70 6f  r */.    u8 impo
bfa0: 73 74 65 72 54 61 62 6c 65 3b 20 20 20 20 20 20  sterTable;      
bfb0: 20 20 20 20 20 2f 2a 20 42 75 69 6c 64 69 6e 67       /* Building
bfc0: 20 61 6e 20 69 6d 70 6f 73 74 65 72 20 74 61 62   an imposter tab
bfd0: 6c 65 20 2a 2f 0a 20 20 7d 20 69 6e 69 74 3b 0a  le */.  } init;.
bfe0: 20 20 69 6e 74 20 6e 56 64 62 65 41 63 74 69 76    int nVdbeActiv
bff0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
c000: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 56 44 42  /* Number of VDB
c010: 45 73 20 63 75 72 72 65 6e 74 6c 79 20 72 75 6e  Es currently run
c020: 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 6e 56  ning */.  int nV
c030: 64 62 65 52 65 61 64 3b 20 20 20 20 20 20 20 20  dbeRead;        
c040: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
c050: 72 20 6f 66 20 61 63 74 69 76 65 20 56 44 42 45  r of active VDBE
c060: 73 20 74 68 61 74 20 72 65 61 64 20 6f 72 20 77  s that read or w
c070: 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 56  rite */.  int nV
c080: 64 62 65 57 72 69 74 65 3b 20 20 20 20 20 20 20  dbeWrite;       
c090: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
c0a0: 72 20 6f 66 20 61 63 74 69 76 65 20 56 44 42 45  r of active VDBE
c0b0: 73 20 74 68 61 74 20 72 65 61 64 20 61 6e 64 20  s that read and 
c0c0: 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  write */.  int n
c0d0: 56 64 62 65 45 78 65 63 3b 20 20 20 20 20 20 20  VdbeExec;       
c0e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
c0f0: 65 72 20 6f 66 20 6e 65 73 74 65 64 20 63 61 6c  er of nested cal
c100: 6c 73 20 74 6f 20 56 64 62 65 45 78 65 63 28 29  ls to VdbeExec()
c110: 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 44 65 73 74   */.  int nVDest
c120: 72 6f 79 3b 20 20 20 20 20 20 20 20 20 20 20 20  roy;            
c130: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
c140: 20 61 63 74 69 76 65 20 4f 50 5f 56 44 65 73 74   active OP_VDest
c150: 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73 20 2a  roy operations *
c160: 2f 0a 20 20 69 6e 74 20 6e 45 78 74 65 6e 73 69  /.  int nExtensi
c170: 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  on;             
c180: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c    /* Number of l
c190: 6f 61 64 65 64 20 65 78 74 65 6e 73 69 6f 6e 73  oaded extensions
c1a0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 2a 61 45 78   */.  void **aEx
c1b0: 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20 20  tension;        
c1c0: 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20      /* Array of 
c1d0: 73 68 61 72 65 64 20 6c 69 62 72 61 72 79 20 68  shared library h
c1e0: 61 6e 64 6c 65 73 20 2a 2f 0a 20 20 69 6e 74 20  andles */.  int 
c1f0: 28 2a 78 54 72 61 63 65 29 28 75 33 32 2c 76 6f  (*xTrace)(u32,vo
c200: 69 64 2a 2c 76 6f 69 64 2a 2c 76 6f 69 64 2a 29  id*,void*,void*)
c210: 3b 20 20 20 20 20 2f 2a 20 54 72 61 63 65 20 66  ;     /* Trace f
c220: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69  unction */.  voi
c230: 64 20 2a 70 54 72 61 63 65 41 72 67 3b 20 20 20  d *pTraceArg;   
c240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c250: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
c260: 6e 74 20 74 6f 20 74 68 65 20 74 72 61 63 65 20  nt to the trace 
c270: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
c280: 69 64 20 28 2a 78 50 72 6f 66 69 6c 65 29 28 76  id (*xProfile)(v
c290: 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  oid*,const char*
c2a0: 2c 75 36 34 29 3b 20 20 2f 2a 20 50 72 6f 66 69  ,u64);  /* Profi
c2b0: 6c 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  ling function */
c2c0: 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f 66 69 6c  .  void *pProfil
c2d0: 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  eArg;           
c2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c2f0: 41 72 67 75 6d 65 6e 74 20 74 6f 20 70 72 6f 66  Argument to prof
c300: 69 6c 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ile function */.
c310: 20 20 76 6f 69 64 20 2a 70 43 6f 6d 6d 69 74 41    void *pCommitA
c320: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
c330: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
c340: 74 6f 20 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61  to xCommitCallba
c350: 63 6b 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a  ck() */.  int (*
c360: 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 29  xCommitCallback)
c370: 28 76 6f 69 64 2a 29 3b 20 20 20 20 2f 2a 20 49  (void*);    /* I
c380: 6e 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20  nvoked at every 
c390: 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69  commit. */.  voi
c3a0: 64 20 2a 70 52 6f 6c 6c 62 61 63 6b 41 72 67 3b  d *pRollbackArg;
c3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c3c0: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 52  * Argument to xR
c3d0: 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 28  ollbackCallback(
c3e0: 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 52  ) */.  void (*xR
c3f0: 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29  ollbackCallback)
c400: 28 76 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f  (void*); /* Invo
c410: 6b 65 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d  ked at every com
c420: 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  mit. */.  void *
c430: 70 55 70 64 61 74 65 41 72 67 3b 0a 20 20 76 6f  pUpdateArg;.  vo
c440: 69 64 20 28 2a 78 55 70 64 61 74 65 43 61 6c 6c  id (*xUpdateCall
c450: 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  back)(void*,int,
c460: 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e   const char*,con
c470: 73 74 20 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f  st char*,sqlite_
c480: 69 6e 74 36 34 29 3b 0a 23 69 66 64 65 66 20 53  int64);.#ifdef S
c490: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45  QLITE_ENABLE_PRE
c4a0: 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20 20 76 6f  UPDATE_HOOK.  vo
c4b0: 69 64 20 2a 70 50 72 65 55 70 64 61 74 65 41 72  id *pPreUpdateAr
c4c0: 67 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  g;          /* F
c4d0: 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f  irst argument to
c4e0: 20 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62   xPreUpdateCallb
c4f0: 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ack */.  void (*
c500: 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61  xPreUpdateCallba
c510: 63 6b 29 28 20 20 20 2f 2a 20 52 65 67 69 73 74  ck)(   /* Regist
c520: 65 72 65 64 20 75 73 69 6e 67 20 73 71 6c 69 74  ered using sqlit
c530: 65 33 5f 70 72 65 75 70 64 61 74 65 5f 68 6f 6f  e3_preupdate_hoo
c540: 6b 28 29 20 2a 2f 0a 20 20 20 20 76 6f 69 64 2a  k() */.    void*
c550: 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 68  ,sqlite3*,int,ch
c560: 61 72 20 63 6f 6e 73 74 2a 2c 63 68 61 72 20 63  ar const*,char c
c570: 6f 6e 73 74 2a 2c 73 71 6c 69 74 65 33 5f 69 6e  onst*,sqlite3_in
c580: 74 36 34 2c 73 71 6c 69 74 65 33 5f 69 6e 74 36  t64,sqlite3_int6
c590: 34 0a 20 20 29 3b 0a 20 20 50 72 65 55 70 64 61  4.  );.  PreUpda
c5a0: 74 65 20 2a 70 50 72 65 55 70 64 61 74 65 3b 20  te *pPreUpdate; 
c5b0: 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78         /* Contex
c5c0: 74 20 66 6f 72 20 61 63 74 69 76 65 20 70 72 65  t for active pre
c5d0: 2d 75 70 64 61 74 65 20 63 61 6c 6c 62 61 63 6b  -update callback
c5e0: 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51   */.#endif /* SQ
c5f0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55  LITE_ENABLE_PREU
c600: 50 44 41 54 45 5f 48 4f 4f 4b 20 2a 2f 0a 23 69  PDATE_HOOK */.#i
c610: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
c620: 54 5f 57 41 4c 0a 20 20 69 6e 74 20 28 2a 78 57  T_WAL.  int (*xW
c630: 61 6c 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64  alCallback)(void
c640: 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 2c 20 63   *, sqlite3 *, c
c650: 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74  onst char *, int
c660: 29 3b 0a 20 20 76 6f 69 64 20 2a 70 57 61 6c 41  );.  void *pWalA
c670: 72 67 3b 0a 23 65 6e 64 69 66 0a 20 20 76 6f 69  rg;.#endif.  voi
c680: 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 29 28  d(*xCollNeeded)(
c690: 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69  void*,sqlite3*,i
c6a0: 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e 73  nt eTextRep,cons
c6b0: 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64  t char*);.  void
c6c0: 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36 29  (*xCollNeeded16)
c6d0: 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
c6e0: 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e  int eTextRep,con
c6f0: 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69  st void*);.  voi
c700: 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72  d *pCollNeededAr
c710: 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  g;.  sqlite3_val
c720: 75 65 20 2a 70 45 72 72 3b 20 20 20 20 20 20 20  ue *pErr;       
c730: 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e     /* Most recen
c740: 74 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  t error message 
c750: 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  */.  union {.   
c760: 20 76 6f 6c 61 74 69 6c 65 20 69 6e 74 20 69 73   volatile int is
c770: 49 6e 74 65 72 72 75 70 74 65 64 3b 20 2f 2a 20  Interrupted; /* 
c780: 54 72 75 65 20 69 66 20 73 71 6c 69 74 65 33 5f  True if sqlite3_
c790: 69 6e 74 65 72 72 75 70 74 20 68 61 73 20 62 65  interrupt has be
c7a0: 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 20  en called */.   
c7b0: 20 64 6f 75 62 6c 65 20 6e 6f 74 55 73 65 64 31   double notUsed1
c7c0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
c7d0: 53 70 61 63 65 72 20 2a 2f 0a 20 20 7d 20 75 31  Spacer */.  } u1
c7e0: 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 20 6c 6f  ;.  Lookaside lo
c7f0: 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20  okaside;        
c800: 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d    /* Lookaside m
c810: 61 6c 6c 6f 63 20 63 6f 6e 66 69 67 75 72 61 74  alloc configurat
c820: 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ion */.#ifndef S
c830: 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f  QLITE_OMIT_AUTHO
c840: 52 49 5a 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74  RIZATION.  sqlit
c850: 65 33 5f 78 61 75 74 68 20 78 41 75 74 68 3b 20  e3_xauth xAuth; 
c860: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 63 63 65           /* Acce
c870: 73 73 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e  ss authorization
c880: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
c890: 6f 69 64 20 2a 70 41 75 74 68 41 72 67 3b 20 20  oid *pAuthArg;  
c8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c8b0: 31 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  1st argument to 
c8c0: 74 68 65 20 61 63 63 65 73 73 20 61 75 74 68 20  the access auth 
c8d0: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64  function */.#end
c8e0: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
c8f0: 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f  E_OMIT_PROGRESS_
c900: 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74 20 28  CALLBACK.  int (
c910: 2a 78 50 72 6f 67 72 65 73 73 29 28 76 6f 69 64  *xProgress)(void
c920: 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68 65 20   *);     /* The 
c930: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
c940: 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72  k */.  void *pPr
c950: 6f 67 72 65 73 73 41 72 67 3b 20 20 20 20 20 20  ogressArg;      
c960: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
c970: 20 74 6f 20 74 68 65 20 70 72 6f 67 72 65 73 73   to the progress
c980: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 75   callback */.  u
c990: 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72 65 73  nsigned nProgres
c9a0: 73 4f 70 73 3b 20 20 20 20 20 20 20 20 2f 2a 20  sOps;        /* 
c9b0: 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f 64 65  Number of opcode
c9c0: 73 20 66 6f 72 20 70 72 6f 67 72 65 73 73 20 63  s for progress c
c9d0: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64 69  allback */.#endi
c9e0: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
c9f0: 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
ca00: 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72 61 6e 73  LE.  int nVTrans
ca10: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
ca20: 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64 20     /* Allocated 
ca30: 73 69 7a 65 20 6f 66 20 61 56 54 72 61 6e 73 20  size of aVTrans 
ca40: 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f 64 75 6c  */.  Hash aModul
ca50: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
ca60: 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65 64 20     /* populated 
ca70: 62 79 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74  by sqlite3_creat
ca80: 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20  e_module() */.  
ca90: 56 74 61 62 43 74 78 20 2a 70 56 74 61 62 43 74  VtabCtx *pVtabCt
caa0: 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  x;            /*
cab0: 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61 63 74   Context for act
cac0: 69 76 65 20 76 74 61 62 20 63 6f 6e 6e 65 63 74  ive vtab connect
cad0: 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20 56 54 61  /create */.  VTa
cae0: 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73 3b 20 20  ble **aVTrans;  
caf0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 69             /* Vi
cb00: 72 74 75 61 6c 20 74 61 62 6c 65 73 20 77 69 74  rtual tables wit
cb10: 68 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69  h open transacti
cb20: 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20  ons */.  VTable 
cb30: 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b 20 20 20  *pDisconnect;   
cb40: 20 2f 2a 20 44 69 73 63 6f 6e 6e 65 63 74 20 74   /* Disconnect t
cb50: 68 65 73 65 20 69 6e 20 6e 65 78 74 20 73 71 6c  hese in next sql
cb60: 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 20 2a  ite3_prepare() *
cb70: 2f 0a 23 65 6e 64 69 66 0a 20 20 48 61 73 68 20  /.#endif.  Hash 
cb80: 61 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20  aFunc;          
cb90: 20 20 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68           /* Hash
cba0: 20 74 61 62 6c 65 20 6f 66 20 63 6f 6e 6e 65 63   table of connec
cbb0: 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 2a  tion functions *
cbc0: 2f 0a 20 20 48 61 73 68 20 61 43 6f 6c 6c 53 65  /.  Hash aCollSe
cbd0: 71 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  q;              
cbe0: 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c 61 74 69    /* All collati
cbf0: 6e 67 20 73 65 71 75 65 6e 63 65 73 20 2a 2f 0a  ng sequences */.
cc00: 20 20 42 75 73 79 48 61 6e 64 6c 65 72 20 62 75    BusyHandler bu
cc10: 73 79 48 61 6e 64 6c 65 72 3b 20 20 20 20 20 20  syHandler;      
cc20: 2f 2a 20 42 75 73 79 20 63 61 6c 6c 62 61 63 6b  /* Busy callback
cc30: 20 2a 2f 0a 20 20 44 62 20 61 44 62 53 74 61 74   */.  Db aDbStat
cc40: 69 63 5b 32 5d 3b 20 20 20 20 20 20 20 20 20 20  ic[2];          
cc50: 20 20 20 20 2f 2a 20 53 74 61 74 69 63 20 73 70      /* Static sp
cc60: 61 63 65 20 66 6f 72 20 74 68 65 20 32 20 64 65  ace for the 2 de
cc70: 66 61 75 6c 74 20 62 61 63 6b 65 6e 64 73 20 2a  fault backends *
cc80: 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70  /.  Savepoint *p
cc90: 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20  Savepoint;      
cca0: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74    /* List of act
ccb0: 69 76 65 20 73 61 76 65 70 6f 69 6e 74 73 20 2a  ive savepoints *
ccc0: 2f 0a 20 20 69 6e 74 20 62 75 73 79 54 69 6d 65  /.  int busyTime
ccd0: 6f 75 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  out;            
cce0: 20 20 2f 2a 20 42 75 73 79 20 68 61 6e 64 6c 65    /* Busy handle
ccf0: 72 20 74 69 6d 65 6f 75 74 2c 20 69 6e 20 6d 73  r timeout, in ms
cd00: 65 63 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 76  ec */.  int nSav
cd10: 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 20  epoint;         
cd20: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
cd30: 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74 69  of non-transacti
cd40: 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f  on savepoints */
cd50: 0a 20 20 69 6e 74 20 6e 53 74 61 74 65 6d 65 6e  .  int nStatemen
cd60: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
cd70: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65   /* Number of ne
cd80: 73 74 65 64 20 73 74 61 74 65 6d 65 6e 74 2d 74  sted statement-t
cd90: 72 61 6e 73 61 63 74 69 6f 6e 73 20 20 2a 2f 0a  ransactions  */.
cda0: 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 43    i64 nDeferredC
cdb0: 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ons;            
cdc0: 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65 64 20  /* Net deferred 
cdd0: 63 6f 6e 73 74 72 61 69 6e 74 73 20 74 68 69 73  constraints this
cde0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 2a 2f   transaction. */
cdf0: 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64  .  i64 nDeferred
ce00: 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20 20  ImmCons;        
ce10: 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65 64   /* Net deferred
ce20: 20 69 6d 6d 65 64 69 61 74 65 20 63 6f 6e 73 74   immediate const
ce30: 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20  raints */.  int 
ce40: 2a 70 6e 42 79 74 65 73 46 72 65 65 64 3b 20 20  *pnBytesFreed;  
ce50: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20            /* If 
ce60: 6e 6f 74 20 4e 55 4c 4c 2c 20 69 6e 63 72 65 6d  not NULL, increm
ce70: 65 6e 74 20 74 68 69 73 20 69 6e 20 44 62 46 72  ent this in DbFr
ce80: 65 65 28 29 20 2a 2f 0a 23 69 66 64 65 66 20 53  ee() */.#ifdef S
ce90: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c  QLITE_ENABLE_UNL
cea0: 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 2f 2a 20  OCK_NOTIFY.  /* 
ceb0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61  The following va
cec0: 72 69 61 62 6c 65 73 20 61 72 65 20 61 6c 6c 20  riables are all 
ced0: 70 72 6f 74 65 63 74 65 64 20 62 79 20 74 68 65  protected by the
cee0: 20 53 54 41 54 49 43 5f 4d 41 53 54 45 52 0a 20   STATIC_MASTER. 
cef0: 20 2a 2a 20 6d 75 74 65 78 2c 20 6e 6f 74 20 62   ** mutex, not b
cf00: 79 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 2e  y sqlite3.mutex.
cf10: 20 54 68 65 79 20 61 72 65 20 75 73 65 64 20 62   They are used b
cf20: 79 20 63 6f 64 65 20 69 6e 20 6e 6f 74 69 66 79  y code in notify
cf30: 2e 63 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68  .c..  **.  ** Wh
cf40: 65 6e 20 58 2e 70 55 6e 6c 6f 63 6b 43 6f 6e 6e  en X.pUnlockConn
cf50: 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20  ection==Y, that 
cf60: 6d 65 61 6e 73 20 74 68 61 74 20 58 20 69 73 20  means that X is 
cf70: 77 61 69 74 69 6e 67 20 66 6f 72 20 59 20 74 6f  waiting for Y to
cf80: 0a 20 20 2a 2a 20 75 6e 6c 6f 63 6b 20 73 6f 20  .  ** unlock so 
cf90: 74 68 61 74 20 69 74 20 63 61 6e 20 70 72 6f 63  that it can proc
cfa0: 65 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57  eed..  **.  ** W
cfb0: 68 65 6e 20 58 2e 70 42 6c 6f 63 6b 69 6e 67 43  hen X.pBlockingC
cfc0: 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68  onnection==Y, th
cfd0: 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 73 6f  at means that so
cfe0: 6d 65 74 68 69 6e 67 20 74 68 61 74 20 58 20 74  mething that X t
cff0: 72 69 65 64 0a 20 20 2a 2a 20 74 72 69 65 64 20  ried.  ** tried 
d000: 74 6f 20 64 6f 20 72 65 63 65 6e 74 6c 79 20 66  to do recently f
d010: 61 69 6c 65 64 20 77 69 74 68 20 61 6e 20 53 51  ailed with an SQ
d020: 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 65 72 72 6f  LITE_LOCKED erro
d030: 72 20 64 75 65 20 74 6f 20 6c 6f 63 6b 73 0a 20  r due to locks. 
d040: 20 2a 2a 20 68 65 6c 64 20 62 79 20 59 2e 0a 20   ** held by Y.. 
d050: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70   */.  sqlite3 *p
d060: 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69  BlockingConnecti
d070: 6f 6e 3b 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f  on; /* Connectio
d080: 6e 20 74 68 61 74 20 63 61 75 73 65 64 20 53 51  n that caused SQ
d090: 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 2a 2f 0a 20  LITE_LOCKED */. 
d0a0: 20 73 71 6c 69 74 65 33 20 2a 70 55 6e 6c 6f 63   sqlite3 *pUnloc
d0b0: 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 20 20 20  kConnection;    
d0c0: 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63         /* Connec
d0d0: 74 69 6f 6e 20 74 6f 20 77 61 74 63 68 20 66 6f  tion to watch fo
d0e0: 72 20 75 6e 6c 6f 63 6b 20 2a 2f 0a 20 20 76 6f  r unlock */.  vo
d0f0: 69 64 20 2a 70 55 6e 6c 6f 63 6b 41 72 67 3b 20  id *pUnlockArg; 
d100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d110: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
d120: 74 6f 20 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79  to xUnlockNotify
d130: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 55 6e   */.  void (*xUn
d140: 6c 6f 63 6b 4e 6f 74 69 66 79 29 28 76 6f 69 64  lockNotify)(void
d150: 20 2a 2a 2c 20 69 6e 74 29 3b 20 20 2f 2a 20 55   **, int);  /* U
d160: 6e 6c 6f 63 6b 20 6e 6f 74 69 66 79 20 63 61 6c  nlock notify cal
d170: 6c 62 61 63 6b 20 2a 2f 0a 20 20 73 71 6c 69 74  lback */.  sqlit
d180: 65 33 20 2a 70 4e 65 78 74 42 6c 6f 63 6b 65 64  e3 *pNextBlocked
d190: 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74  ;        /* Next
d1a0: 20 69 6e 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20   in list of all 
d1b0: 62 6c 6f 63 6b 65 64 20 63 6f 6e 6e 65 63 74 69  blocked connecti
d1c0: 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  ons */.#endif.#i
d1d0: 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45 52  fdef SQLITE_USER
d1e0: 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a  _AUTHENTICATION.
d1f0: 20 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75    sqlite3_userau
d200: 74 68 20 61 75 74 68 3b 20 20 20 20 20 20 20 20  th auth;        
d210: 2f 2a 20 55 73 65 72 20 61 75 74 68 65 6e 74 69  /* User authenti
d220: 63 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69  cation informati
d230: 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a  on */.#endif.};.
d240: 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20 74  ./*.** A macro t
d250: 6f 20 64 69 73 63 6f 76 65 72 20 74 68 65 20 65  o discover the e
d260: 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 64 61 74  ncoding of a dat
d270: 61 62 61 73 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e  abase..*/.#defin
d280: 65 20 53 43 48 45 4d 41 5f 45 4e 43 28 64 62 29  e SCHEMA_ENC(db)
d290: 20 28 28 64 62 29 2d 3e 61 44 62 5b 30 5d 2e 70   ((db)->aDb[0].p
d2a0: 53 63 68 65 6d 61 2d 3e 65 6e 63 29 0a 23 64 65  Schema->enc).#de
d2b0: 66 69 6e 65 20 45 4e 43 28 64 62 29 20 20 20 20  fine ENC(db)    
d2c0: 20 20 20 20 28 28 64 62 29 2d 3e 65 6e 63 29 0a      ((db)->enc).
d2d0: 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20  ./*.** Possible 
d2e0: 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 73  values for the s
d2f0: 71 6c 69 74 65 33 2e 66 6c 61 67 73 2e 0a 2a 2a  qlite3.flags..**
d300: 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72  .** Value constr
d310: 61 69 6e 74 73 20 28 65 6e 66 6f 72 63 65 64 20  aints (enforced 
d320: 76 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a  via assert()):.*
d330: 2a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 46 75  *      SQLITE_Fu
d340: 6c 6c 46 53 79 6e 63 20 20 20 20 20 3d 3d 20 50  llFSync     == P
d350: 41 47 45 52 5f 46 55 4c 4c 46 53 59 4e 43 0a 2a  AGER_FULLFSYNC.*
d360: 2a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 43 6b  *      SQLITE_Ck
d370: 70 74 46 75 6c 6c 46 53 79 6e 63 20 3d 3d 20 50  ptFullFSync == P
d380: 41 47 45 52 5f 43 4b 50 54 5f 46 55 4c 4c 46 53  AGER_CKPT_FULLFS
d390: 59 4e 43 0a 2a 2a 20 20 20 20 20 20 53 51 4c 49  YNC.**      SQLI
d3a0: 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 20 20 20  TE_CacheSpill   
d3b0: 20 3d 3d 20 50 41 47 45 52 5f 43 41 43 48 45 5f   == PAGER_CACHE_
d3c0: 53 50 49 4c 4c 0a 2a 2f 0a 23 64 65 66 69 6e 65  SPILL.*/.#define
d3d0: 20 53 51 4c 49 54 45 5f 57 72 69 74 65 53 63 68   SQLITE_WriteSch
d3e0: 65 6d 61 20 20 20 20 30 78 30 30 30 30 30 30 30  ema    0x0000000
d3f0: 31 20 20 2f 2a 20 4f 4b 20 74 6f 20 75 70 64 61  1  /* OK to upda
d400: 74 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52  te SQLITE_MASTER
d410: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
d420: 54 45 5f 4c 65 67 61 63 79 46 69 6c 65 46 6d 74  TE_LegacyFileFmt
d430: 20 20 30 78 30 30 30 30 30 30 30 32 20 20 2f 2a    0x00000002  /*
d440: 20 43 72 65 61 74 65 20 6e 65 77 20 64 61 74 61   Create new data
d450: 62 61 73 65 73 20 69 6e 20 66 6f 72 6d 61 74 20  bases in format 
d460: 31 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  1 */.#define SQL
d470: 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73  ITE_FullColNames
d480: 20 20 20 30 78 30 30 30 30 30 30 30 34 20 20 2f     0x00000004  /
d490: 2a 20 53 68 6f 77 20 66 75 6c 6c 20 63 6f 6c 75  * Show full colu
d4a0: 6d 6e 20 6e 61 6d 65 73 20 6f 6e 20 53 45 4c 45  mn names on SELE
d4b0: 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  CT */.#define SQ
d4c0: 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20 20  LITE_FullFSync  
d4d0: 20 20 20 20 30 78 30 30 30 30 30 30 30 38 20 20      0x00000008  
d4e0: 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79 6e  /* Use full fsyn
d4f0: 63 20 6f 6e 20 74 68 65 20 62 61 63 6b 65 6e 64  c on the backend
d500: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
d510: 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63  TE_CkptFullFSync
d520: 20 20 30 78 30 30 30 30 30 30 31 30 20 20 2f 2a    0x00000010  /*
d530: 20 55 73 65 20 66 75 6c 6c 20 66 73 79 6e 63 20   Use full fsync 
d540: 66 6f 72 20 63 68 65 63 6b 70 6f 69 6e 74 20 2a  for checkpoint *
d550: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d560: 5f 43 61 63 68 65 53 70 69 6c 6c 20 20 20 20 20  _CacheSpill     
d570: 30 78 30 30 30 30 30 30 32 30 20 20 2f 2a 20 4f  0x00000020  /* O
d580: 4b 20 74 6f 20 73 70 69 6c 6c 20 70 61 67 65 72  K to spill pager
d590: 20 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e   cache */.#defin
d5a0: 65 20 53 51 4c 49 54 45 5f 53 68 6f 72 74 43 6f  e SQLITE_ShortCo
d5b0: 6c 4e 61 6d 65 73 20 20 30 78 30 30 30 30 30 30  lNames  0x000000
d5c0: 34 30 20 20 2f 2a 20 53 68 6f 77 20 73 68 6f 72  40  /* Show shor
d5d0: 74 20 63 6f 6c 75 6d 6e 73 20 6e 61 6d 65 73 20  t columns names 
d5e0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d5f0: 45 5f 43 6f 75 6e 74 52 6f 77 73 20 20 20 20 20  E_CountRows     
d600: 20 30 78 30 30 30 30 30 30 38 30 20 20 2f 2a 20   0x00000080  /* 
d610: 43 6f 75 6e 74 20 72 6f 77 73 20 63 68 61 6e 67  Count rows chang
d620: 65 64 20 62 79 20 49 4e 53 45 52 54 2c 20 2a 2f  ed by INSERT, */
d630: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d650: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20             /*   
d660: 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54  DELETE, or UPDAT
d670: 45 20 61 6e 64 20 72 65 74 75 72 6e 20 2a 2f 0a  E and return */.
d680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d6a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 74            /*   t
d6b0: 68 65 20 63 6f 75 6e 74 20 75 73 69 6e 67 20 61  he count using a
d6c0: 20 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23 64   callback. */.#d
d6d0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 75 6c  efine SQLITE_Nul
d6e0: 6c 43 61 6c 6c 62 61 63 6b 20 20 20 30 78 30 30  lCallback   0x00
d6f0: 30 30 30 31 30 30 20 20 2f 2a 20 49 6e 76 6f 6b  000100  /* Invok
d700: 65 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 6f  e the callback o
d710: 6e 63 65 20 69 66 20 74 68 65 20 2a 2f 0a 20 20  nce if the */.  
d720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d740: 20 20 20 20 20 20 20 20 2f 2a 20 20 20 72 65 73          /*   res
d750: 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74 79  ult set is empty
d760: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
d770: 54 45 5f 49 67 6e 6f 72 65 43 68 65 63 6b 73 20  TE_IgnoreChecks 
d780: 20 20 30 78 30 30 30 30 30 32 30 30 20 20 2f 2a    0x00000200  /*
d790: 20 44 6f 20 6e 6f 74 20 65 6e 66 6f 72 63 65 20   Do not enforce 
d7a0: 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74  check constraint
d7b0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
d7c0: 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74  ITE_ReadUncommit
d7d0: 20 20 20 30 78 30 30 30 30 30 34 30 30 20 20 2f     0x00000400  /
d7e0: 2a 20 52 45 41 44 20 55 4e 43 4f 4d 4d 49 54 54  * READ UNCOMMITT
d7f0: 45 44 20 69 6e 20 73 68 61 72 65 64 2d 63 61 63  ED in shared-cac
d800: 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  he */.#define SQ
d810: 4c 49 54 45 5f 4e 6f 43 6b 70 74 4f 6e 43 6c 6f  LITE_NoCkptOnClo
d820: 73 65 20 20 30 78 30 30 30 30 30 38 30 30 20 20  se  0x00000800  
d830: 2f 2a 20 4e 6f 20 63 68 65 63 6b 70 6f 69 6e 74  /* No checkpoint
d840: 20 6f 6e 20 63 6c 6f 73 65 28 29 2f 44 45 54 41   on close()/DETA
d850: 43 48 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  CH */.#define SQ
d860: 4c 49 54 45 5f 52 65 76 65 72 73 65 4f 72 64 65  LITE_ReverseOrde
d870: 72 20 20 20 30 78 30 30 30 30 31 30 30 30 20 20  r   0x00001000  
d880: 2f 2a 20 52 65 76 65 72 73 65 20 75 6e 6f 72 64  /* Reverse unord
d890: 65 72 65 64 20 53 45 4c 45 43 54 73 20 2a 2f 0a  ered SELECTs */.
d8a0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52  #define SQLITE_R
d8b0: 65 63 54 72 69 67 67 65 72 73 20 20 20 20 30 78  ecTriggers    0x
d8c0: 30 30 30 30 32 30 30 30 20 20 2f 2a 20 45 6e 61  00002000  /* Ena
d8d0: 62 6c 65 20 72 65 63 75 72 73 69 76 65 20 74 72  ble recursive tr
d8e0: 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e  iggers */.#defin
d8f0: 65 20 53 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e  e SQLITE_Foreign
d900: 4b 65 79 73 20 20 20 20 30 78 30 30 30 30 34 30  Keys    0x000040
d910: 30 30 20 20 2f 2a 20 45 6e 66 6f 72 63 65 20 66  00  /* Enforce f
d920: 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
d930: 72 61 69 6e 74 73 20 20 2a 2f 0a 23 64 65 66 69  raints  */.#defi
d940: 6e 65 20 53 51 4c 49 54 45 5f 41 75 74 6f 49 6e  ne SQLITE_AutoIn
d950: 64 65 78 20 20 20 20 20 20 30 78 30 30 30 30 38  dex      0x00008
d960: 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 61  000  /* Enable a
d970: 75 74 6f 6d 61 74 69 63 20 69 6e 64 65 78 65 73  utomatic indexes
d980: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
d990: 54 45 5f 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e  TE_LoadExtension
d9a0: 20 20 30 78 30 30 30 31 30 30 30 30 20 20 2f 2a    0x00010000  /*
d9b0: 20 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74   Enable load_ext
d9c0: 65 6e 73 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  ension */.#defin
d9d0: 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74  e SQLITE_LoadExt
d9e0: 46 75 6e 63 20 20 20 20 30 78 30 30 30 32 30 30  Func    0x000200
d9f0: 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f  00  /* Enable lo
da00: 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29 20 53  ad_extension() S
da10: 51 4c 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69  QL func */.#defi
da20: 6e 65 20 53 51 4c 49 54 45 5f 45 6e 61 62 6c 65  ne SQLITE_Enable
da30: 54 72 69 67 67 65 72 20 20 30 78 30 30 30 34 30  Trigger  0x00040
da40: 30 30 30 20 20 2f 2a 20 54 72 75 65 20 74 6f 20  000  /* True to 
da50: 65 6e 61 62 6c 65 20 74 72 69 67 67 65 72 73 20  enable triggers 
da60: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
da70: 45 5f 44 65 66 65 72 46 4b 73 20 20 20 20 20 20  E_DeferFKs      
da80: 20 30 78 30 30 30 38 30 30 30 30 20 20 2f 2a 20   0x00080000  /* 
da90: 44 65 66 65 72 20 61 6c 6c 20 46 4b 20 63 6f 6e  Defer all FK con
daa0: 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66  straints */.#def
dab0: 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72 79  ine SQLITE_Query
dac0: 4f 6e 6c 79 20 20 20 20 20 20 30 78 30 30 31 30  Only      0x0010
dad0: 30 30 30 30 20 20 2f 2a 20 44 69 73 61 62 6c 65  0000  /* Disable
dae0: 20 64 61 74 61 62 61 73 65 20 63 68 61 6e 67 65   database change
daf0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
db00: 49 54 45 5f 43 65 6c 6c 53 69 7a 65 43 6b 20 20  ITE_CellSizeCk  
db10: 20 20 20 30 78 30 30 32 30 30 30 30 30 20 20 2f     0x00200000  /
db20: 2a 20 43 68 65 63 6b 20 62 74 72 65 65 20 63 65  * Check btree ce
db30: 6c 6c 20 73 69 7a 65 73 20 6f 6e 20 6c 6f 61 64  ll sizes on load
db40: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
db50: 54 45 5f 46 74 73 33 54 6f 6b 65 6e 69 7a 65 72  TE_Fts3Tokenizer
db60: 20 20 30 78 30 30 34 30 30 30 30 30 20 20 2f 2a    0x00400000  /*
db70: 20 45 6e 61 62 6c 65 20 66 74 73 33 5f 74 6f 6b   Enable fts3_tok
db80: 65 6e 69 7a 65 72 28 32 29 20 2a 2f 0a 23 64 65  enizer(2) */.#de
db90: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e 61 62  fine SQLITE_Enab
dba0: 6c 65 51 50 53 47 20 20 20 20 20 30 78 30 30 38  leQPSG     0x008
dbb0: 30 30 30 30 30 20 20 2f 2a 20 51 75 65 72 79 20  00000  /* Query 
dbc0: 50 6c 61 6e 6e 65 72 20 53 74 61 62 69 6c 69 74  Planner Stabilit
dbd0: 79 20 47 75 61 72 61 6e 74 65 65 20 2a 2f 0a 2f  y Guarantee */./
dbe0: 2a 20 46 6c 61 67 73 20 75 73 65 64 20 6f 6e 6c  * Flags used onl
dbf0: 79 20 69 66 20 64 65 62 75 67 67 69 6e 67 20 2a  y if debugging *
dc00: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
dc10: 44 45 42 55 47 0a 23 64 65 66 69 6e 65 20 53 51  DEBUG.#define SQ
dc20: 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 20 20 20  LITE_SqlTrace   
dc30: 20 20 20 20 30 78 30 38 30 30 30 30 30 30 20 20      0x08000000  
dc40: 2f 2a 20 44 65 62 75 67 20 70 72 69 6e 74 20 53  /* Debug print S
dc50: 51 4c 20 61 73 20 69 74 20 65 78 65 63 75 74 65  QL as it execute
dc60: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
dc70: 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 20  ITE_VdbeListing 
dc80: 20 20 20 30 78 31 30 30 30 30 30 30 30 20 20 2f     0x10000000  /
dc90: 2a 20 44 65 62 75 67 20 6c 69 73 74 69 6e 67 73  * Debug listings
dca0: 20 6f 66 20 56 44 42 45 20 70 72 6f 67 72 61 6d   of VDBE program
dcb0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
dcc0: 49 54 45 5f 56 64 62 65 54 72 61 63 65 20 20 20  ITE_VdbeTrace   
dcd0: 20 20 20 30 78 32 30 30 30 30 30 30 30 20 20 2f     0x20000000  /
dce0: 2a 20 54 72 75 65 20 74 6f 20 74 72 61 63 65 20  * True to trace 
dcf0: 56 44 42 45 20 65 78 65 63 75 74 69 6f 6e 20 2a  VDBE execution *
dd00: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
dd10: 5f 56 64 62 65 41 64 64 6f 70 54 72 61 63 65 20  _VdbeAddopTrace 
dd20: 30 78 34 30 30 30 30 30 30 30 20 20 2f 2a 20 54  0x40000000  /* T
dd30: 72 61 63 65 20 73 71 6c 69 74 65 33 56 64 62 65  race sqlite3Vdbe
dd40: 41 64 64 4f 70 28 29 20 63 61 6c 6c 73 20 2a 2f  AddOp() calls */
dd50: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
dd60: 56 64 62 65 45 51 50 20 20 20 20 20 20 20 20 30  VdbeEQP        0
dd70: 78 38 30 30 30 30 30 30 30 20 20 2f 2a 20 44 65  x80000000  /* De
dd80: 62 75 67 20 45 58 50 4c 41 49 4e 20 51 55 45 52  bug EXPLAIN QUER
dd90: 59 20 50 4c 41 4e 20 2a 2f 0a 23 65 6e 64 69 66  Y PLAN */.#endif
dda0: 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
ddb0: 76 61 6c 75 65 73 20 66 6f 72 20 73 71 6c 69 74  values for sqlit
ddc0: 65 33 2e 6d 44 62 46 6c 61 67 73 0a 2a 2f 0a 23  e3.mDbFlags.*/.#
ddd0: 64 65 66 69 6e 65 20 44 42 46 4c 41 47 5f 53 63  define DBFLAG_Sc
dde0: 68 65 6d 61 43 68 61 6e 67 65 20 20 20 30 78 30  hemaChange   0x0
ddf0: 30 30 31 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74  001  /* Uncommit
de00: 74 65 64 20 48 61 73 68 20 74 61 62 6c 65 20 63  ted Hash table c
de10: 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e  hanges */.#defin
de20: 65 20 44 42 46 4c 41 47 5f 50 72 65 66 65 72 42  e DBFLAG_PreferB
de30: 75 69 6c 74 69 6e 20 20 30 78 30 30 30 32 20 20  uiltin  0x0002  
de40: 2f 2a 20 50 72 65 66 65 72 65 6e 63 65 20 74 6f  /* Preference to
de50: 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 73 20   built-in funcs 
de60: 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 46 4c 41  */.#define DBFLA
de70: 47 5f 56 61 63 75 75 6d 20 20 20 20 20 20 20 20  G_Vacuum        
de80: 20 30 78 30 30 30 34 20 20 2f 2a 20 43 75 72 72   0x0004  /* Curr
de90: 65 6e 74 6c 79 20 69 6e 20 61 20 56 41 43 55 55  ently in a VACUU
dea0: 4d 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73  M */../*.** Bits
deb0: 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 2e   of the sqlite3.
dec0: 64 62 4f 70 74 46 6c 61 67 73 20 66 69 65 6c 64  dbOptFlags field
ded0: 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 62   that are used b
dee0: 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33  y the.** sqlite3
def0: 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53 51  _test_control(SQ
df00: 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 4f 50  LITE_TESTCTRL_OP
df10: 54 49 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29  TIMIZATIONS,...)
df20: 20 69 6e 74 65 72 66 61 63 65 20 74 6f 0a 2a 2a   interface to.**
df30: 20 73 65 6c 65 63 74 69 76 65 6c 79 20 64 69 73   selectively dis
df40: 61 62 6c 65 20 76 61 72 69 6f 75 73 20 6f 70 74  able various opt
df50: 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23  imizations..*/.#
df60: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75  define SQLITE_Qu
df70: 65 72 79 46 6c 61 74 74 65 6e 65 72 20 30 78 30  eryFlattener 0x0
df80: 30 30 31 20 20 20 2f 2a 20 51 75 65 72 79 20 66  001   /* Query f
df90: 6c 61 74 74 65 6e 69 6e 67 20 2a 2f 0a 23 64 65  lattening */.#de
dfa0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 6c 75  fine SQLITE_Colu
dfb0: 6d 6e 43 61 63 68 65 20 20 20 20 30 78 30 30 30  mnCache    0x000
dfc0: 32 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 63 61  2   /* Column ca
dfd0: 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  che */.#define S
dfe0: 51 4c 49 54 45 5f 47 72 6f 75 70 42 79 4f 72 64  QLITE_GroupByOrd
dff0: 65 72 20 20 20 30 78 30 30 30 34 20 20 20 2f 2a  er   0x0004   /*
e000: 20 47 52 4f 55 50 42 59 20 63 6f 76 65 72 20 6f   GROUPBY cover o
e010: 66 20 4f 52 44 45 52 42 59 20 2a 2f 0a 23 64 65  f ORDERBY */.#de
e020: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 61 63 74  fine SQLITE_Fact
e030: 6f 72 4f 75 74 43 6f 6e 73 74 20 30 78 30 30 30  orOutConst 0x000
e040: 38 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20  8   /* Constant 
e050: 66 61 63 74 6f 72 69 6e 67 20 2a 2f 0a 2f 2a 20  factoring */./* 
e060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
e070: 6f 74 20 75 73 65 64 20 20 20 20 30 78 30 30 31  ot used    0x001
e080: 30 20 20 20 2f 2f 20 57 61 73 3a 20 53 51 4c 49  0   // Was: SQLI
e090: 54 45 5f 49 64 78 52 65 61 6c 41 73 49 6e 74 20  TE_IdxRealAsInt 
e0a0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e0b0: 45 5f 44 69 73 74 69 6e 63 74 4f 70 74 20 20 20  E_DistinctOpt   
e0c0: 20 30 78 30 30 32 30 20 20 20 2f 2a 20 44 49 53   0x0020   /* DIS
e0d0: 54 49 4e 43 54 20 75 73 69 6e 67 20 69 6e 64 65  TINCT using inde
e0e0: 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  xes */.#define S
e0f0: 51 4c 49 54 45 5f 43 6f 76 65 72 49 64 78 53 63  QLITE_CoverIdxSc
e100: 61 6e 20 20 20 30 78 30 30 34 30 20 20 20 2f 2a  an   0x0040   /*
e110: 20 43 6f 76 65 72 69 6e 67 20 69 6e 64 65 78 20   Covering index 
e120: 73 63 61 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  scans */.#define
e130: 20 53 51 4c 49 54 45 5f 4f 72 64 65 72 42 79 49   SQLITE_OrderByI
e140: 64 78 4a 6f 69 6e 20 30 78 30 30 38 30 20 20 20  dxJoin 0x0080   
e150: 2f 2a 20 4f 52 44 45 52 20 42 59 20 6f 66 20 6a  /* ORDER BY of j
e160: 6f 69 6e 73 20 76 69 61 20 69 6e 64 65 78 20 2a  oins via index *
e170: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e180: 5f 53 75 62 71 43 6f 72 6f 75 74 69 6e 65 20 20  _SubqCoroutine  
e190: 30 78 30 31 30 30 20 20 20 2f 2a 20 45 76 61 6c  0x0100   /* Eval
e1a0: 75 61 74 65 20 73 75 62 71 75 65 72 69 65 73 20  uate subqueries 
e1b0: 61 73 20 63 6f 72 6f 75 74 69 6e 65 73 20 2a 2f  as coroutines */
e1c0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e1d0: 54 72 61 6e 73 69 74 69 76 65 20 20 20 20 20 30  Transitive     0
e1e0: 78 30 32 30 30 20 20 20 2f 2a 20 54 72 61 6e 73  x0200   /* Trans
e1f0: 69 74 69 76 65 20 63 6f 6e 73 74 72 61 69 6e 74  itive constraint
e200: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
e210: 49 54 45 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69 6e  ITE_OmitNoopJoin
e220: 20 20 20 30 78 30 34 30 30 20 20 20 2f 2a 20 4f     0x0400   /* O
e230: 6d 69 74 20 75 6e 75 73 65 64 20 74 61 62 6c 65  mit unused table
e240: 73 20 69 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23 64  s in joins */.#d
e250: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 74 61  efine SQLITE_Sta
e260: 74 33 34 20 20 20 20 20 20 20 20 20 30 78 30 38  t34         0x08
e270: 30 30 20 20 20 2f 2a 20 55 73 65 20 53 54 41 54  00   /* Use STAT
e280: 33 20 6f 72 20 53 54 41 54 34 20 64 61 74 61 20  3 or STAT4 data 
e290: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e2a0: 45 5f 43 6f 75 6e 74 4f 66 56 69 65 77 20 20 20  E_CountOfView   
e2b0: 20 30 78 31 30 30 30 20 20 20 2f 2a 20 54 68 65   0x1000   /* The
e2c0: 20 63 6f 75 6e 74 2d 6f 66 2d 76 69 65 77 20 6f   count-of-view o
e2d0: 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23  ptimization */.#
e2e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 75  define SQLITE_Cu
e2f0: 72 73 6f 72 48 69 6e 74 73 20 20 20 20 30 78 32  rsorHints    0x2
e300: 30 30 30 20 20 20 2f 2a 20 41 64 64 20 4f 50 5f  000   /* Add OP_
e310: 43 75 72 73 6f 72 48 69 6e 74 20 6f 70 63 6f 64  CursorHint opcod
e320: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
e330: 4c 49 54 45 5f 41 6c 6c 4f 70 74 73 20 20 20 20  LITE_AllOpts    
e340: 20 20 20 20 30 78 66 66 66 66 20 20 20 2f 2a 20      0xffff   /* 
e350: 41 6c 6c 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  All optimization
e360: 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72  s */../*.** Macr
e370: 6f 73 20 66 6f 72 20 74 65 73 74 69 6e 67 20 77  os for testing w
e380: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 6f 70  hether or not op
e390: 74 69 6d 69 7a 61 74 69 6f 6e 73 20 61 72 65 20  timizations are 
e3a0: 65 6e 61 62 6c 65 64 20 6f 72 20 64 69 73 61 62  enabled or disab
e3b0: 6c 65 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  led..*/.#define 
e3c0: 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61  OptimizationDisa
e3d0: 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20  bled(db, mask)  
e3e0: 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61  (((db)->dbOptFla
e3f0: 67 73 26 28 6d 61 73 6b 29 29 21 3d 30 29 0a 23  gs&(mask))!=0).#
e400: 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74  define Optimizat
e410: 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d  ionEnabled(db, m
e420: 61 73 6b 29 20 20 20 28 28 28 64 62 29 2d 3e 64  ask)   (((db)->d
e430: 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29  bOptFlags&(mask)
e440: 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  )==0)../*.** Ret
e450: 75 72 6e 20 74 72 75 65 20 69 66 20 69 74 20 4f  urn true if it O
e460: 4b 20 74 6f 20 66 61 63 74 6f 72 20 63 6f 6e 73  K to factor cons
e470: 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73  tant expressions
e480: 20 69 6e 74 6f 20 74 68 65 20 69 6e 69 74 69 61   into the initia
e490: 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 63 6f 64 65  lization.** code
e4a0: 2e 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20 69  . The argument i
e4b0: 73 20 61 20 50 61 72 73 65 20 6f 62 6a 65 63 74  s a Parse object
e4c0: 20 66 6f 72 20 74 68 65 20 63 6f 64 65 20 67 65   for the code ge
e4d0: 6e 65 72 61 74 6f 72 2e 0a 2a 2f 0a 23 64 65 66  nerator..*/.#def
e4e0: 69 6e 65 20 43 6f 6e 73 74 46 61 63 74 6f 72 4f  ine ConstFactorO
e4f0: 6b 28 50 29 20 28 28 50 29 2d 3e 6f 6b 43 6f 6e  k(P) ((P)->okCon
e500: 73 74 46 61 63 74 6f 72 29 0a 0a 2f 2a 0a 2a 2a  stFactor)../*.**
e510: 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73   Possible values
e520: 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 2e   for the sqlite.
e530: 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a 2a 2a 20  magic field..** 
e540: 54 68 65 20 6e 75 6d 62 65 72 73 20 61 72 65 20  The numbers are 
e550: 6f 62 74 61 69 6e 65 64 20 61 74 20 72 61 6e 64  obtained at rand
e560: 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e 6f 20 73  om and have no s
e570: 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 2c 20  pecial meaning, 
e580: 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e 20 62 65  other.** than be
e590: 69 6e 67 20 64 69 73 74 69 6e 63 74 20 66 72 6f  ing distinct fro
e5a0: 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a 2a  m one another..*
e5b0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e5c0: 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20 20 20 20  _MAGIC_OPEN     
e5d0: 30 78 61 30 32 39 61 36 39 37 20 20 2f 2a 20 44  0xa029a697  /* D
e5e0: 61 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e 20  atabase is open 
e5f0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e600: 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20 20  E_MAGIC_CLOSED  
e610: 20 30 78 39 66 33 63 32 64 33 33 20 20 2f 2a 20   0x9f3c2d33  /* 
e620: 44 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73  Database is clos
e630: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ed */.#define SQ
e640: 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49 43 4b 20  LITE_MAGIC_SICK 
e650: 20 20 20 20 30 78 34 62 37 37 31 32 39 30 20 20      0x4b771290  
e660: 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20 61 77 61  /* Error and awa
e670: 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a 2f 0a 23  iting close */.#
e680: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
e690: 47 49 43 5f 42 55 53 59 20 20 20 20 20 30 78 66  GIC_BUSY     0xf
e6a0: 30 33 62 37 39 30 36 20 20 2f 2a 20 44 61 74 61  03b7906  /* Data
e6b0: 62 61 73 65 20 63 75 72 72 65 6e 74 6c 79 20 69  base currently i
e6c0: 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65  n use */.#define
e6d0: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52   SQLITE_MAGIC_ER
e6e0: 52 4f 52 20 20 20 20 30 78 62 35 33 35 37 39 33  ROR    0xb535793
e6f0: 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49 54 45 5f  0  /* An SQLITE_
e700: 4d 49 53 55 53 45 20 65 72 72 6f 72 20 6f 63 63  MISUSE error occ
e710: 75 72 72 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  urred */.#define
e720: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 5a 4f   SQLITE_MAGIC_ZO
e730: 4d 42 49 45 20 20 20 30 78 36 34 63 66 66 63 37  MBIE   0x64cffc7
e740: 66 20 20 2f 2a 20 43 6c 6f 73 65 20 77 69 74 68  f  /* Close with
e750: 20 6c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20   last statement 
e760: 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  close */../*.** 
e770: 45 61 63 68 20 53 51 4c 20 66 75 6e 63 74 69 6f  Each SQL functio
e780: 6e 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20  n is defined by 
e790: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
e7a0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20  he following.** 
e7b0: 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f 72 20  structure.  For 
e7c0: 67 6c 6f 62 61 6c 20 62 75 69 6c 74 2d 69 6e 20  global built-in 
e7d0: 66 75 6e 63 74 69 6f 6e 73 20 28 65 78 3a 20 73  functions (ex: s
e7e0: 75 62 73 74 72 28 29 2c 20 6d 61 78 28 29 2c 20  ubstr(), max(), 
e7f0: 63 6f 75 6e 74 28 29 29 0a 2a 2a 20 61 20 70 6f  count()).** a po
e800: 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74  inter to this st
e810: 72 75 63 74 75 72 65 20 69 73 20 68 65 6c 64 20  ructure is held 
e820: 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33 42 75  in the sqlite3Bu
e830: 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 20 6f  iltinFunctions o
e840: 62 6a 65 63 74 2e 0a 2a 2a 20 46 6f 72 20 70 65  bject..** For pe
e850: 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 70 70  r-connection app
e860: 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64  lication-defined
e870: 20 66 75 6e 63 74 69 6f 6e 73 2c 20 61 20 70 6f   functions, a po
e880: 69 6e 74 65 72 20 74 6f 20 74 68 69 73 0a 2a 2a  inter to this.**
e890: 20 73 74 72 75 63 74 75 72 65 20 69 73 20 68 65   structure is he
e8a0: 6c 64 20 69 6e 20 74 68 65 20 64 62 2d 3e 61 48  ld in the db->aH
e8b0: 61 73 68 20 68 61 73 68 20 74 61 62 6c 65 2e 0a  ash hash table..
e8c0: 2a 2a 0a 2a 2a 20 54 68 65 20 75 2e 70 48 61 73  **.** The u.pHas
e8d0: 68 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20  h field is used 
e8e0: 62 79 20 74 68 65 20 67 6c 6f 62 61 6c 20 62 75  by the global bu
e8f0: 69 6c 74 2d 69 6e 73 2e 20 20 54 68 65 20 75 2e  ilt-ins.  The u.
e900: 70 44 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 66  pDestructor.** f
e910: 69 65 6c 64 20 69 73 20 75 73 65 64 20 62 79 20  ield is used by 
e920: 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 61  per-connection a
e930: 70 70 2d 64 65 66 20 66 75 6e 63 74 69 6f 6e 73  pp-def functions
e940: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63  ..*/.struct Func
e950: 44 65 66 20 7b 0a 20 20 69 38 20 6e 41 72 67 3b  Def {.  i8 nArg;
e960: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
e970: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
e980: 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e 73 20 75  nts.  -1 means u
e990: 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20 20 75 31  nlimited */.  u1
e9a0: 36 20 66 75 6e 63 46 6c 61 67 73 3b 20 20 20 20  6 funcFlags;    
e9b0: 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62 69     /* Some combi
e9c0: 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c 49 54 45  nation of SQLITE
e9d0: 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69  _FUNC_* */.  voi
e9e0: 64 20 2a 70 55 73 65 72 44 61 74 61 3b 20 20 20  d *pUserData;   
e9f0: 20 20 2f 2a 20 55 73 65 72 20 64 61 74 61 20 70    /* User data p
ea00: 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20 46 75  arameter */.  Fu
ea10: 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b 20 20 20  ncDef *pNext;   
ea20: 20 20 20 2f 2a 20 4e 65 78 74 20 66 75 6e 63 74     /* Next funct
ea30: 69 6f 6e 20 77 69 74 68 20 73 61 6d 65 20 6e 61  ion with same na
ea40: 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  me */.  void (*x
ea50: 53 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63  SFunc)(sqlite3_c
ea60: 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
ea70: 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a  te3_value**); /*
ea80: 20 66 75 6e 63 20 6f 72 20 61 67 67 2d 73 74 65   func or agg-ste
ea90: 70 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46  p */.  void (*xF
eaa0: 69 6e 61 6c 69 7a 65 29 28 73 71 6c 69 74 65 33  inalize)(sqlite3
eab0: 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20 20 20  _context*);     
eac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ead0: 41 67 67 20 66 69 6e 61 6c 69 7a 65 72 20 2a 2f  Agg finalizer */
eae0: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
eaf0: 4e 61 6d 65 3b 20 20 20 2f 2a 20 53 51 4c 20 6e  Name;   /* SQL n
eb00: 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ame of the funct
eb10: 69 6f 6e 2e 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  ion. */.  union 
eb20: 7b 0a 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70  {.    FuncDef *p
eb30: 48 61 73 68 3b 20 20 20 20 20 20 2f 2a 20 4e 65  Hash;      /* Ne
eb40: 78 74 20 77 69 74 68 20 61 20 64 69 66 66 65 72  xt with a differ
eb50: 65 6e 74 20 6e 61 6d 65 20 62 75 74 20 74 68 65  ent name but the
eb60: 20 73 61 6d 65 20 68 61 73 68 20 2a 2f 0a 20 20   same hash */.  
eb70: 20 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72    FuncDestructor
eb80: 20 2a 70 44 65 73 74 72 75 63 74 6f 72 3b 20 20   *pDestructor;  
eb90: 20 2f 2a 20 52 65 66 65 72 65 6e 63 65 20 63 6f   /* Reference co
eba0: 75 6e 74 65 64 20 64 65 73 74 72 75 63 74 6f 72  unted destructor
ebb0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 7d   function */.  }
ebc0: 20 75 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   u;.};../*.** Th
ebd0: 69 73 20 73 74 72 75 63 74 75 72 65 20 65 6e 63  is structure enc
ebe0: 61 70 73 75 6c 61 74 65 73 20 61 20 75 73 65 72  apsulates a user
ebf0: 2d 66 75 6e 63 74 69 6f 6e 20 64 65 73 74 72 75  -function destru
ec00: 63 74 6f 72 20 63 61 6c 6c 62 61 63 6b 20 28 61  ctor callback (a
ec10: 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20  s.** configured 
ec20: 75 73 69 6e 67 20 63 72 65 61 74 65 5f 66 75 6e  using create_fun
ec30: 63 74 69 6f 6e 5f 76 32 28 29 29 20 61 6e 64 20  ction_v2()) and 
ec40: 61 20 72 65 66 65 72 65 6e 63 65 20 63 6f 75 6e  a reference coun
ec50: 74 65 72 2e 20 57 68 65 6e 0a 2a 2a 20 63 72 65  ter. When.** cre
ec60: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28  ate_function_v2(
ec70: 29 20 69 73 20 63 61 6c 6c 65 64 20 74 6f 20 63  ) is called to c
ec80: 72 65 61 74 65 20 61 20 66 75 6e 63 74 69 6f 6e  reate a function
ec90: 20 77 69 74 68 20 61 20 64 65 73 74 72 75 63 74   with a destruct
eca0: 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20  or,.** a single 
ecb0: 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74  object of this t
ecc0: 79 70 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64  ype is allocated
ecd0: 2e 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72  . FuncDestructor
ece0: 2e 6e 52 65 66 20 69 73 20 73 65 74 20 74 6f 0a  .nRef is set to.
ecf0: 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ** the number of
ed00: 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73   FuncDef objects
ed10: 20 63 72 65 61 74 65 64 20 28 65 69 74 68 65 72   created (either
ed20: 20 31 20 6f 72 20 33 2c 20 64 65 70 65 6e 64 69   1 or 3, dependi
ed30: 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a  ng on whether.**
ed40: 20 6f 72 20 6e 6f 74 20 74 68 65 20 73 70 65 63   or not the spec
ed50: 69 66 69 65 64 20 65 6e 63 6f 64 69 6e 67 20 69  ified encoding i
ed60: 73 20 53 51 4c 49 54 45 5f 41 4e 59 29 2e 20 54  s SQLITE_ANY). T
ed70: 68 65 20 46 75 6e 63 44 65 66 2e 70 44 65 73 74  he FuncDef.pDest
ed80: 72 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d 62 65 72  ructor.** member
ed90: 20 6f 66 20 65 61 63 68 20 6f 66 20 74 68 65 20   of each of the 
eda0: 6e 65 77 20 46 75 6e 63 44 65 66 20 6f 62 6a 65  new FuncDef obje
edb0: 63 74 73 20 69 73 20 73 65 74 20 74 6f 20 70 6f  cts is set to po
edc0: 69 6e 74 20 74 6f 20 74 68 65 20 61 6c 6c 6f 63  int to the alloc
edd0: 61 74 65 64 0a 2a 2a 20 46 75 6e 63 44 65 73 74  ated.** FuncDest
ede0: 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68  ructor..**.** Th
edf0: 65 72 65 61 66 74 65 72 2c 20 77 68 65 6e 20 6f  ereafter, when o
ee00: 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65  ne of the FuncDe
ee10: 66 20 6f 62 6a 65 63 74 73 20 69 73 20 64 65 6c  f objects is del
ee20: 65 74 65 64 2c 20 74 68 65 20 72 65 66 65 72 65  eted, the refere
ee30: 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74 20 6f 6e 20  nce.** count on 
ee40: 74 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20 64  this object is d
ee50: 65 63 72 65 6d 65 6e 74 65 64 2e 20 57 68 65 6e  ecremented. When
ee60: 20 69 74 20 72 65 61 63 68 65 73 20 30 2c 20 74   it reaches 0, t
ee70: 68 65 20 64 65 73 74 72 75 63 74 6f 72 0a 2a 2a  he destructor.**
ee80: 20 69 73 20 69 6e 76 6f 6b 65 64 20 61 6e 64 20   is invoked and 
ee90: 74 68 65 20 46 75 6e 63 44 65 73 74 72 75 63 74  the FuncDestruct
eea0: 6f 72 20 73 74 72 75 63 74 75 72 65 20 66 72 65  or structure fre
eeb0: 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75  ed..*/.struct Fu
eec0: 6e 63 44 65 73 74 72 75 63 74 6f 72 20 7b 0a 20  ncDestructor {. 
eed0: 20 69 6e 74 20 6e 52 65 66 3b 0a 20 20 76 6f 69   int nRef;.  voi
eee0: 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f  d (*xDestroy)(vo
eef0: 69 64 20 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70  id *);.  void *p
ef00: 55 73 65 72 44 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a  UserData;.};../*
ef10: 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c  .** Possible val
ef20: 75 65 73 20 66 6f 72 20 46 75 6e 63 44 65 66 2e  ues for FuncDef.
ef30: 66 6c 61 67 73 2e 20 20 4e 6f 74 65 20 74 68 61  flags.  Note tha
ef40: 74 20 74 68 65 20 5f 4c 45 4e 47 54 48 20 61 6e  t the _LENGTH an
ef50: 64 20 5f 54 59 50 45 4f 46 0a 2a 2a 20 76 61 6c  d _TYPEOF.** val
ef60: 75 65 73 20 6d 75 73 74 20 63 6f 72 72 65 73 70  ues must corresp
ef70: 6f 6e 64 20 74 6f 20 4f 50 46 4c 41 47 5f 4c 45  ond to OPFLAG_LE
ef80: 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46 4c  NGTHARG and OPFL
ef90: 41 47 5f 54 59 50 45 4f 46 41 52 47 2e 20 20 41  AG_TYPEOFARG.  A
efa0: 6e 64 0a 2a 2a 20 53 51 4c 49 54 45 5f 46 55 4e  nd.** SQLITE_FUN
efb0: 43 5f 43 4f 4e 53 54 41 4e 54 20 6d 75 73 74 20  C_CONSTANT must 
efc0: 62 65 20 74 68 65 20 73 61 6d 65 20 61 73 20 53  be the same as S
efd0: 51 4c 49 54 45 5f 44 45 54 45 52 4d 49 4e 49 53  QLITE_DETERMINIS
efe0: 54 49 43 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61  TIC.  There.** a
eff0: 72 65 20 61 73 73 65 72 74 28 29 20 73 74 61 74  re assert() stat
f000: 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 63 6f  ements in the co
f010: 64 65 20 74 6f 20 76 65 72 69 66 79 20 74 68 69  de to verify thi
f020: 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63  s..**.** Value c
f030: 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f  onstraints (enfo
f040: 72 63 65 64 20 76 69 61 20 61 73 73 65 72 74 28  rced via assert(
f050: 29 29 3a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54  )):.**     SQLIT
f060: 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 20 20 20  E_FUNC_MINMAX   
f070: 20 3d 3d 20 20 4e 43 5f 4d 69 6e 4d 61 78 41 67   ==  NC_MinMaxAg
f080: 67 20 20 20 20 20 20 3d 3d 20 53 46 5f 4d 69 6e  g      == SF_Min
f090: 4d 61 78 41 67 67 0a 2a 2a 20 20 20 20 20 53 51  MaxAgg.**     SQ
f0a0: 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48  LITE_FUNC_LENGTH
f0b0: 20 20 20 20 3d 3d 20 20 4f 50 46 4c 41 47 5f 4c      ==  OPFLAG_L
f0c0: 45 4e 47 54 48 41 52 47 0a 2a 2a 20 20 20 20 20  ENGTHARG.**     
f0d0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50 45  SQLITE_FUNC_TYPE
f0e0: 4f 46 20 20 20 20 3d 3d 20 20 4f 50 46 4c 41 47  OF    ==  OPFLAG
f0f0: 5f 54 59 50 45 4f 46 41 52 47 0a 2a 2a 20 20 20  _TYPEOFARG.**   
f100: 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f    SQLITE_FUNC_CO
f110: 4e 53 54 41 4e 54 20 20 3d 3d 20 20 53 51 4c 49  NSTANT  ==  SQLI
f120: 54 45 5f 44 45 54 45 52 4d 49 4e 49 53 54 49 43  TE_DETERMINISTIC
f130: 20 66 72 6f 6d 20 74 68 65 20 41 50 49 0a 2a 2a   from the API.**
f140: 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43       SQLITE_FUNC
f150: 5f 45 4e 43 4d 41 53 4b 20 20 20 64 65 70 65 6e  _ENCMASK   depen
f160: 64 73 20 6f 6e 20 53 51 4c 49 54 45 5f 55 54 46  ds on SQLITE_UTF
f170: 2a 20 6d 61 63 72 6f 73 20 69 6e 20 74 68 65 20  * macros in the 
f180: 41 50 49 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  API.*/.#define S
f190: 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43 4d 41  QLITE_FUNC_ENCMA
f1a0: 53 4b 20 20 30 78 30 30 30 33 20 2f 2a 20 53 51  SK  0x0003 /* SQ
f1b0: 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54  LITE_UTF8, SQLIT
f1c0: 45 5f 55 54 46 31 36 42 45 20 6f 72 20 55 54 46  E_UTF16BE or UTF
f1d0: 31 36 4c 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  16LE */.#define 
f1e0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 49 4b 45  SQLITE_FUNC_LIKE
f1f0: 20 20 20 20 20 30 78 30 30 30 34 20 2f 2a 20 43       0x0004 /* C
f200: 61 6e 64 69 64 61 74 65 20 66 6f 72 20 74 68 65  andidate for the
f210: 20 4c 49 4b 45 20 6f 70 74 69 6d 69 7a 61 74 69   LIKE optimizati
f220: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
f230: 4c 49 54 45 5f 46 55 4e 43 5f 43 41 53 45 20 20  LITE_FUNC_CASE  
f240: 20 20 20 30 78 30 30 30 38 20 2f 2a 20 43 61 73     0x0008 /* Cas
f250: 65 2d 73 65 6e 73 69 74 69 76 65 20 4c 49 4b 45  e-sensitive LIKE
f260: 2d 74 79 70 65 20 66 75 6e 63 74 69 6f 6e 20 2a  -type function *
f270: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
f280: 5f 46 55 4e 43 5f 45 50 48 45 4d 20 20 20 20 30  _FUNC_EPHEM    0
f290: 78 30 30 31 30 20 2f 2a 20 45 70 68 65 6d 65 72  x0010 /* Ephemer
f2a0: 61 6c 2e 20 20 44 65 6c 65 74 65 20 77 69 74 68  al.  Delete with
f2b0: 20 56 44 42 45 20 2a 2f 0a 23 64 65 66 69 6e 65   VDBE */.#define
f2c0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45   SQLITE_FUNC_NEE
f2d0: 44 43 4f 4c 4c 20 30 78 30 30 32 30 20 2f 2a 20  DCOLL 0x0020 /* 
f2e0: 73 71 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f  sqlite3GetFuncCo
f2f0: 6c 6c 53 65 71 28 29 20 6d 69 67 68 74 20 62 65  llSeq() might be
f300: 20 63 61 6c 6c 65 64 2a 2f 0a 23 64 65 66 69 6e   called*/.#defin
f310: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45  e SQLITE_FUNC_LE
f320: 4e 47 54 48 20 20 20 30 78 30 30 34 30 20 2f 2a  NGTH   0x0040 /*
f330: 20 42 75 69 6c 74 2d 69 6e 20 6c 65 6e 67 74 68   Built-in length
f340: 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  () function */.#
f350: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
f360: 4e 43 5f 54 59 50 45 4f 46 20 20 20 30 78 30 30  NC_TYPEOF   0x00
f370: 38 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 74  80 /* Built-in t
f380: 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e  ypeof() function
f390: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
f3a0: 54 45 5f 46 55 4e 43 5f 43 4f 55 4e 54 20 20 20  TE_FUNC_COUNT   
f3b0: 20 30 78 30 31 30 30 20 2f 2a 20 42 75 69 6c 74   0x0100 /* Built
f3c0: 2d 69 6e 20 63 6f 75 6e 74 28 2a 29 20 61 67 67  -in count(*) agg
f3d0: 72 65 67 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e  regate */.#defin
f3e0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  e SQLITE_FUNC_CO
f3f0: 41 4c 45 53 43 45 20 30 78 30 32 30 30 20 2f 2a  ALESCE 0x0200 /*
f400: 20 42 75 69 6c 74 2d 69 6e 20 63 6f 61 6c 65 73   Built-in coales
f410: 63 65 28 29 20 6f 72 20 69 66 6e 75 6c 6c 28 29  ce() or ifnull()
f420: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
f430: 54 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b 45 4c 59  TE_FUNC_UNLIKELY
f440: 20 30 78 30 34 30 30 20 2f 2a 20 42 75 69 6c 74   0x0400 /* Built
f450: 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79 28 29 20 66  -in unlikely() f
f460: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
f470: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  ne SQLITE_FUNC_C
f480: 4f 4e 53 54 41 4e 54 20 30 78 30 38 30 30 20 2f  ONSTANT 0x0800 /
f490: 2a 20 43 6f 6e 73 74 61 6e 74 20 69 6e 70 75 74  * Constant input
f4a0: 73 20 67 69 76 65 20 61 20 63 6f 6e 73 74 61 6e  s give a constan
f4b0: 74 20 6f 75 74 70 75 74 20 2a 2f 0a 23 64 65 66  t output */.#def
f4c0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
f4d0: 4d 49 4e 4d 41 58 20 20 20 30 78 31 30 30 30 20  MINMAX   0x1000 
f4e0: 2f 2a 20 54 72 75 65 20 66 6f 72 20 6d 69 6e 28  /* True for min(
f4f0: 29 20 61 6e 64 20 6d 61 78 28 29 20 61 67 67 72  ) and max() aggr
f500: 65 67 61 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e  egates */.#defin
f510: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c  e SQLITE_FUNC_SL
f520: 4f 43 48 4e 47 20 20 30 78 32 30 30 30 20 2f 2a  OCHNG  0x2000 /*
f530: 20 22 53 6c 6f 77 20 43 68 61 6e 67 65 22 2e 20   "Slow Change". 
f540: 56 61 6c 75 65 20 63 6f 6e 73 74 61 6e 74 20 64  Value constant d
f550: 75 72 69 6e 67 20 61 0a 20 20 20 20 20 20 20 20  uring a.        
f560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f570: 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 73              ** s
f580: 69 6e 67 6c 65 20 71 75 65 72 79 20 2d 20 6d 69  ingle query - mi
f590: 67 68 74 20 63 68 61 6e 67 65 20 6f 76 65 72 20  ght change over 
f5a0: 74 69 6d 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  time */.#define 
f5b0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 41 46 46 49  SQLITE_FUNC_AFFI
f5c0: 4e 49 54 59 20 30 78 34 30 30 30 20 2f 2a 20 42  NITY 0x4000 /* B
f5d0: 75 69 6c 74 2d 69 6e 20 61 66 66 69 6e 69 74 79  uilt-in affinity
f5e0: 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 0a  () function */..
f5f0: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
f600: 69 6e 67 20 74 68 72 65 65 20 6d 61 63 72 6f 73  ing three macros
f610: 2c 20 46 55 4e 43 54 49 4f 4e 28 29 2c 20 4c 49  , FUNCTION(), LI
f620: 4b 45 46 55 4e 43 28 29 20 61 6e 64 20 41 47 47  KEFUNC() and AGG
f630: 52 45 47 41 54 45 28 29 20 61 72 65 0a 2a 2a 20  REGATE() are.** 
f640: 75 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 74  used to create t
f650: 68 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 73 20  he initializers 
f660: 66 6f 72 20 74 68 65 20 46 75 6e 63 44 65 66 20  for the FuncDef 
f670: 73 74 72 75 63 74 75 72 65 73 2e 0a 2a 2a 0a 2a  structures..**.*
f680: 2a 20 20 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61  *   FUNCTION(zNa
f690: 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
f6a0: 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20  bNC, xFunc).**  
f6b0: 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74     Used to creat
f6c0: 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74  e a scalar funct
f6d0: 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f  ion definition o
f6e0: 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61  f a function zNa
f6f0: 6d 65 0a 2a 2a 20 20 20 20 20 69 6d 70 6c 65 6d  me.**     implem
f700: 65 6e 74 65 64 20 62 79 20 43 20 66 75 6e 63 74  ented by C funct
f710: 69 6f 6e 20 78 46 75 6e 63 20 74 68 61 74 20 61  ion xFunc that a
f720: 63 63 65 70 74 73 20 6e 41 72 67 20 61 72 67 75  ccepts nArg argu
f730: 6d 65 6e 74 73 2e 20 54 68 65 0a 2a 2a 20 20 20  ments. The.**   
f740: 20 20 76 61 6c 75 65 20 70 61 73 73 65 64 20 61    value passed a
f750: 73 20 69 41 72 67 20 69 73 20 63 61 73 74 20 74  s iArg is cast t
f760: 6f 20 61 20 28 76 6f 69 64 2a 29 20 61 6e 64 20  o a (void*) and 
f770: 6d 61 64 65 20 61 76 61 69 6c 61 62 6c 65 0a 2a  made available.*
f780: 2a 20 20 20 20 20 61 73 20 74 68 65 20 75 73 65  *     as the use
f790: 72 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f  r-data (sqlite3_
f7a0: 75 73 65 72 5f 64 61 74 61 28 29 29 20 66 6f 72  user_data()) for
f7b0: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 49   the function. I
f7c0: 66 0a 2a 2a 20 20 20 20 20 61 72 67 75 6d 65 6e  f.**     argumen
f7d0: 74 20 62 4e 43 20 69 73 20 74 72 75 65 2c 20 74  t bNC is true, t
f7e0: 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 46  hen the SQLITE_F
f7f0: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c 61  UNC_NEEDCOLL fla
f800: 67 20 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20  g is set..**.** 
f810: 20 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d    VFUNCTION(zNam
f820: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
f830: 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20  NC, xFunc).**   
f840: 20 20 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20    Like FUNCTION 
f850: 65 78 63 65 70 74 20 69 74 20 6f 6d 69 74 73 20  except it omits 
f860: 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  the SQLITE_FUNC_
f870: 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67 2e 0a 2a  CONSTANT flag..*
f880: 2a 0a 2a 2a 20 20 20 44 46 55 4e 43 54 49 4f 4e  *.**   DFUNCTION
f890: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
f8a0: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a  rg, bNC, xFunc).
f8b0: 2a 2a 20 20 20 20 20 4c 69 6b 65 20 46 55 4e 43  **     Like FUNC
f8c0: 54 49 4f 4e 20 65 78 63 65 70 74 20 69 74 20 6f  TION except it o
f8d0: 6d 69 74 73 20 74 68 65 20 53 51 4c 49 54 45 5f  mits the SQLITE_
f8e0: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c  FUNC_CONSTANT fl
f8f0: 61 67 20 61 6e 64 0a 2a 2a 20 20 20 20 20 61 64  ag and.**     ad
f900: 64 73 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55  ds the SQLITE_FU
f910: 4e 43 5f 53 4c 4f 43 48 4e 47 20 66 6c 61 67 2e  NC_SLOCHNG flag.
f920: 20 20 55 73 65 64 20 66 6f 72 20 64 61 74 65 20    Used for date 
f930: 26 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73  & time functions
f940: 0a 2a 2a 20 20 20 20 20 61 6e 64 20 66 75 6e 63  .**     and func
f950: 74 69 6f 6e 73 20 6c 69 6b 65 20 73 71 6c 69 74  tions like sqlit
f960: 65 5f 76 65 72 73 69 6f 6e 28 29 20 74 68 61 74  e_version() that
f970: 20 63 61 6e 20 63 68 61 6e 67 65 2c 20 62 75 74   can change, but
f980: 20 6e 6f 74 20 64 75 72 69 6e 67 0a 2a 2a 20 20   not during.**  
f990: 20 20 20 61 20 73 69 6e 67 6c 65 20 71 75 65 72     a single quer
f9a0: 79 2e 20 20 54 68 65 20 69 41 72 67 20 69 73 20  y.  The iArg is 
f9b0: 69 67 6e 6f 72 65 64 2e 20 20 54 68 65 20 75 73  ignored.  The us
f9c0: 65 72 2d 64 61 74 61 20 69 73 20 61 6c 77 61 79  er-data is alway
f9d0: 73 20 73 65 74 0a 2a 2a 20 20 20 20 20 74 6f 20  s set.**     to 
f9e0: 61 20 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 2e 20  a NULL pointer. 
f9f0: 20 54 68 65 20 62 4e 43 20 70 61 72 61 6d 65 74   The bNC paramet
fa00: 65 72 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a  er is not used..
fa10: 2a 2a 0a 2a 2a 20 20 20 50 55 52 45 5f 44 41 54  **.**   PURE_DAT
fa20: 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  E(zName, nArg, i
fa30: 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
fa40: 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 66 6f 72  .**     Used for
fa50: 20 22 70 75 72 65 22 20 64 61 74 65 2f 74 69 6d   "pure" date/tim
fa60: 65 20 66 75 6e 63 74 69 6f 6e 73 2c 20 74 68 69  e functions, thi
fa70: 73 20 6d 61 63 72 6f 20 69 73 20 6c 69 6b 65 20  s macro is like 
fa80: 44 46 55 4e 43 54 49 4f 4e 0a 2a 2a 20 20 20 20  DFUNCTION.**    
fa90: 20 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20   except that it 
faa0: 64 6f 65 73 20 73 65 74 20 74 68 65 20 53 51 4c  does set the SQL
fab0: 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
fac0: 54 20 66 6c 61 67 73 2e 20 20 69 41 72 67 20 69  T flags.  iArg i
fad0: 73 0a 2a 2a 20 20 20 20 20 69 67 6e 6f 72 65 64  s.**     ignored
fae0: 20 61 6e 64 20 74 68 65 20 75 73 65 72 2d 64 61   and the user-da
faf0: 74 61 20 66 6f 72 20 74 68 65 73 65 20 66 75 6e  ta for these fun
fb00: 63 74 69 6f 6e 73 20 69 73 20 73 65 74 20 74 6f  ctions is set to
fb10: 20 61 6e 20 0a 2a 2a 20 20 20 20 20 61 72 62 69   an .**     arbi
fb20: 74 72 61 72 79 20 6e 6f 6e 2d 4e 55 4c 4c 20 70  trary non-NULL p
fb30: 6f 69 6e 74 65 72 2e 20 20 54 68 65 20 62 4e 43  ointer.  The bNC
fb40: 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f   parameter is no
fb50: 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 20 20  t used..**.**   
fb60: 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c  AGGREGATE(zName,
fb70: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
fb80: 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29  , xStep, xFinal)
fb90: 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20  .**     Used to 
fba0: 63 72 65 61 74 65 20 61 6e 20 61 67 67 72 65 67  create an aggreg
fbb0: 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 64 65 66  ate function def
fbc0: 69 6e 69 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e  inition implemen
fbd0: 74 65 64 20 62 79 0a 2a 2a 20 20 20 20 20 74 68  ted by.**     th
fbe0: 65 20 43 20 66 75 6e 63 74 69 6f 6e 73 20 78 53  e C functions xS
fbf0: 74 65 70 20 61 6e 64 20 78 46 69 6e 61 6c 2e 20  tep and xFinal. 
fc00: 54 68 65 20 66 69 72 73 74 20 66 6f 75 72 20 70  The first four p
fc10: 61 72 61 6d 65 74 65 72 73 0a 2a 2a 20 20 20 20  arameters.**    
fc20: 20 61 72 65 20 69 6e 74 65 72 70 72 65 74 65 64   are interpreted
fc30: 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79   in the same way
fc40: 20 61 73 20 74 68 65 20 66 69 72 73 74 20 34 20   as the first 4 
fc50: 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 2a 2a  parameters to.**
fc60: 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 28 29 2e       FUNCTION().
fc70: 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45 46 55 4e  .**.**   LIKEFUN
fc80: 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70  C(zName, nArg, p
fc90: 41 72 67 2c 20 66 6c 61 67 73 29 0a 2a 2a 20 20  Arg, flags).**  
fca0: 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74     Used to creat
fcb0: 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74  e a scalar funct
fcc0: 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f  ion definition o
fcd0: 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61  f a function zNa
fce0: 6d 65 0a 2a 2a 20 20 20 20 20 74 68 61 74 20 61  me.**     that a
fcf0: 63 63 65 70 74 73 20 6e 41 72 67 20 61 72 67 75  ccepts nArg argu
fd00: 6d 65 6e 74 73 20 61 6e 64 20 69 73 20 69 6d 70  ments and is imp
fd10: 6c 65 6d 65 6e 74 65 64 20 62 79 20 61 20 63 61  lemented by a ca
fd20: 6c 6c 20 74 6f 20 43 0a 2a 2a 20 20 20 20 20 66  ll to C.**     f
fd30: 75 6e 63 74 69 6f 6e 20 6c 69 6b 65 46 75 6e 63  unction likeFunc
fd40: 2e 20 41 72 67 75 6d 65 6e 74 20 70 41 72 67 20  . Argument pArg 
fd50: 69 73 20 63 61 73 74 20 74 6f 20 61 20 28 76 6f  is cast to a (vo
fd60: 69 64 20 2a 29 20 61 6e 64 20 6d 61 64 65 0a 2a  id *) and made.*
fd70: 2a 20 20 20 20 20 61 76 61 69 6c 61 62 6c 65 20  *     available 
fd80: 61 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  as the function 
fd90: 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69 74  user-data (sqlit
fda0: 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29 2e  e3_user_data()).
fdb0: 20 54 68 65 0a 2a 2a 20 20 20 20 20 46 75 6e 63   The.**     Func
fdc0: 44 65 66 2e 66 6c 61 67 73 20 76 61 72 69 61 62  Def.flags variab
fdd0: 6c 65 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  le is set to the
fde0: 20 76 61 6c 75 65 20 70 61 73 73 65 64 20 61 73   value passed as
fdf0: 20 74 68 65 20 66 6c 61 67 73 0a 2a 2a 20 20 20   the flags.**   
fe00: 20 20 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a    parameter..*/.
fe10: 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e  #define FUNCTION
fe20: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
fe30: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20  rg, bNC, xFunc) 
fe40: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
fe50: 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c  E_FUNC_CONSTANT|
fe60: 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43  SQLITE_UTF8|(bNC
fe70: 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
fe80: 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c  DCOLL), \.   SQL
fe90: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69  ITE_INT_TO_PTR(i
fea0: 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20  Arg), 0, xFunc, 
feb0: 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d  0, #zName, {0} }
fec0: 0a 23 64 65 66 69 6e 65 20 56 46 55 4e 43 54 49  .#define VFUNCTI
fed0: 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  ON(zName, nArg, 
fee0: 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
fef0: 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
ff00: 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51  ITE_UTF8|(bNC*SQ
ff10: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
ff20: 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45  LL), \.   SQLITE
ff30: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67  _INT_TO_PTR(iArg
ff40: 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20  ), 0, xFunc, 0, 
ff50: 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64  #zName, {0} }.#d
ff60: 65 66 69 6e 65 20 44 46 55 4e 43 54 49 4f 4e 28  efine DFUNCTION(
ff70: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
ff80: 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c  g, bNC, xFunc) \
ff90: 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
ffa0: 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51  _FUNC_SLOCHNG|SQ
ffb0: 4c 49 54 45 5f 55 54 46 38 2c 20 5c 0a 20 20 20  LITE_UTF8, \.   
ffc0: 30 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20  0, 0, xFunc, 0, 
ffd0: 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64  #zName, {0} }.#d
ffe0: 65 66 69 6e 65 20 50 55 52 45 5f 44 41 54 45 28  efine PURE_DATE(
fff0: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
10000 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c  g, bNC, xFunc) \
10010 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
10020 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51  _FUNC_SLOCHNG|SQ
10030 4c 49 54 45 5f 55 54 46 38 7c 53 51 4c 49 54 45  LITE_UTF8|SQLITE
10040 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 2c 20  _FUNC_CONSTANT, 
10050 5c 0a 20 20 20 28 76 6f 69 64 2a 29 26 73 71 6c  \.   (void*)&sql
10060 69 74 65 33 43 6f 6e 66 69 67 2c 20 30 2c 20 78  ite3Config, 0, x
10070 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  Func, 0, #zName,
10080 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 46   {0} }.#define F
10090 55 4e 43 54 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20  UNCTION2(zName, 
100a0 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
100b0 20 78 46 75 6e 63 2c 20 65 78 74 72 61 46 6c 61   xFunc, extraFla
100c0 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 53 51  gs) \.  {nArg,SQ
100d0 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
100e0 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  NT|SQLITE_UTF8|(
100f0 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  bNC*SQLITE_FUNC_
10100 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46  NEEDCOLL)|extraF
10110 6c 61 67 73 2c 5c 0a 20 20 20 53 51 4c 49 54 45  lags,\.   SQLITE
10120 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67  _INT_TO_PTR(iArg
10130 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20  ), 0, xFunc, 0, 
10140 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64  #zName, {0} }.#d
10150 65 66 69 6e 65 20 53 54 52 5f 46 55 4e 43 54 49  efine STR_FUNCTI
10160 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  ON(zName, nArg, 
10170 70 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  pArg, bNC, xFunc
10180 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
10190 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47  ITE_FUNC_SLOCHNG
101a0 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e  |SQLITE_UTF8|(bN
101b0 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  C*SQLITE_FUNC_NE
101c0 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 70 41  EDCOLL), \.   pA
101d0 72 67 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c  rg, 0, xFunc, 0,
101e0 20 23 7a 4e 61 6d 65 2c 20 7d 0a 23 64 65 66 69   #zName, }.#defi
101f0 6e 65 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d  ne LIKEFUNC(zNam
10200 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c  e, nArg, arg, fl
10210 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  ags) \.  {nArg, 
10220 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
10230 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38  TANT|SQLITE_UTF8
10240 7c 66 6c 61 67 73 2c 20 5c 0a 20 20 20 28 76 6f  |flags, \.   (vo
10250 69 64 20 2a 29 61 72 67 2c 20 30 2c 20 6c 69 6b  id *)arg, 0, lik
10260 65 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65  eFunc, 0, #zName
10270 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20  , {0} }.#define 
10280 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c  AGGREGATE(zName,
10290 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20   nArg, arg, nc, 
102a0 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 20 5c  xStep, xFinal) \
102b0 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
102c0 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45  _UTF8|(nc*SQLITE
102d0 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c  _FUNC_NEEDCOLL),
102e0 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54   \.   SQLITE_INT
102f0 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c  _TO_PTR(arg), 0,
10300 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 23 7a   xStep,xFinal,#z
10310 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 23 64 65 66 69  Name, {0}}.#defi
10320 6e 65 20 41 47 47 52 45 47 41 54 45 32 28 7a 4e  ne AGGREGATE2(zN
10330 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20  ame, nArg, arg, 
10340 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61  nc, xStep, xFina
10350 6c 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20 5c  l, extraFlags) \
10360 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
10370 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45  _UTF8|(nc*SQLITE
10380 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c  _FUNC_NEEDCOLL)|
10390 65 78 74 72 61 46 6c 61 67 73 2c 20 5c 0a 20 20  extraFlags, \.  
103a0 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
103b0 54 52 28 61 72 67 29 2c 20 30 2c 20 78 53 74 65  TR(arg), 0, xSte
103c0 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c  p,xFinal,#zName,
103d0 20 7b 30 7d 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c   {0}}../*.** All
103e0 20 63 75 72 72 65 6e 74 20 73 61 76 65 70 6f 69   current savepoi
103f0 6e 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69  nts are stored i
10400 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  n a linked list 
10410 73 74 61 72 74 69 6e 67 20 61 74 0a 2a 2a 20 73  starting at.** s
10420 71 6c 69 74 65 33 2e 70 53 61 76 65 70 6f 69 6e  qlite3.pSavepoin
10430 74 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c 65  t. The first ele
10440 6d 65 6e 74 20 69 6e 20 74 68 65 20 6c 69 73 74  ment in the list
10450 20 69 73 20 74 68 65 20 6d 6f 73 74 20 72 65 63   is the most rec
10460 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64 20  ently.** opened 
10470 73 61 76 65 70 6f 69 6e 74 2e 20 53 61 76 65 70  savepoint. Savep
10480 6f 69 6e 74 73 20 61 72 65 20 61 64 64 65 64 20  oints are added 
10490 74 6f 20 74 68 65 20 6c 69 73 74 20 62 79 20 74  to the list by t
104a0 68 65 20 76 64 62 65 0a 2a 2a 20 4f 50 5f 53 61  he vdbe.** OP_Sa
104b0 76 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74  vepoint instruct
104c0 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  ion..*/.struct S
104d0 61 76 65 70 6f 69 6e 74 20 7b 0a 20 20 63 68 61  avepoint {.  cha
104e0 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
104f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10500 20 2f 2a 20 53 61 76 65 70 6f 69 6e 74 20 6e 61   /* Savepoint na
10510 6d 65 20 28 6e 75 6c 2d 74 65 72 6d 69 6e 61 74  me (nul-terminat
10520 65 64 29 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  ed) */.  i64 nDe
10530 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20  ferredCons;     
10540 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
10550 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72  Number of deferr
10560 65 64 20 66 6b 20 76 69 6f 6c 61 74 69 6f 6e 73  ed fk violations
10570 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72   */.  i64 nDefer
10580 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20  redImmCons;     
10590 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
105a0 62 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20  ber of deferred 
105b0 69 6d 6d 20 66 6b 2e 20 2a 2f 0a 20 20 53 61 76  imm fk. */.  Sav
105c0 65 70 6f 69 6e 74 20 2a 70 4e 65 78 74 3b 20 20  epoint *pNext;  
105d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
105e0 20 2f 2a 20 50 61 72 65 6e 74 20 73 61 76 65 70   /* Parent savep
105f0 6f 69 6e 74 20 28 69 66 20 61 6e 79 29 20 2a 2f  oint (if any) */
10600 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  .};../*.** The f
10610 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 75 73 65  ollowing are use
10620 64 20 61 73 20 74 68 65 20 73 65 63 6f 6e 64 20  d as the second 
10630 70 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c  parameter to sql
10640 69 74 65 33 53 61 76 65 70 6f 69 6e 74 28 29 2c  ite3Savepoint(),
10650 0a 2a 2a 20 61 6e 64 20 61 73 20 74 68 65 20 50  .** and as the P
10660 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  1 argument to th
10670 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69  e OP_Savepoint i
10680 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23  nstruction..*/.#
10690 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54  define SAVEPOINT
106a0 5f 42 45 47 49 4e 20 20 20 20 20 20 30 0a 23 64  _BEGIN      0.#d
106b0 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f  efine SAVEPOINT_
106c0 52 45 4c 45 41 53 45 20 20 20 20 31 0a 23 64 65  RELEASE    1.#de
106d0 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52  fine SAVEPOINT_R
106e0 4f 4c 4c 42 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a  OLLBACK   2.../*
106f0 0a 2a 2a 20 45 61 63 68 20 53 51 4c 69 74 65 20  .** Each SQLite 
10700 6d 6f 64 75 6c 65 20 28 76 69 72 74 75 61 6c 20  module (virtual 
10710 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e  table definition
10720 29 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20  ) is defined by 
10730 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f  an.** instance o
10740 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
10750 73 74 72 75 63 74 75 72 65 2c 20 73 74 6f 72 65  structure, store
10760 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33  d in the sqlite3
10770 2e 61 4d 6f 64 75 6c 65 0a 2a 2a 20 68 61 73 68  .aModule.** hash
10780 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63   table..*/.struc
10790 74 20 4d 6f 64 75 6c 65 20 7b 0a 20 20 63 6f 6e  t Module {.  con
107a0 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  st sqlite3_modul
107b0 65 20 2a 70 4d 6f 64 75 6c 65 3b 20 20 20 20 20  e *pModule;     
107c0 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 70 6f    /* Callback po
107d0 69 6e 74 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73  inters */.  cons
107e0 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20  t char *zName;  
107f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10800 20 2f 2a 20 4e 61 6d 65 20 70 61 73 73 65 64 20   /* Name passed 
10810 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65  to create_module
10820 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41  () */.  void *pA
10830 75 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ux;             
10840 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
10850 70 41 75 78 20 70 61 73 73 65 64 20 74 6f 20 63  pAux passed to c
10860 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a  reate_module() *
10870 2f 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74  /.  void (*xDest
10880 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b 20 20 20  roy)(void *);   
10890 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 64 75           /* Modu
108a0 6c 65 20 64 65 73 74 72 75 63 74 6f 72 20 66 75  le destructor fu
108b0 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 54 61 62 6c  nction */.  Tabl
108c0 65 20 2a 70 45 70 6f 54 61 62 3b 20 20 20 20 20  e *pEpoTab;     
108d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
108e0 20 2f 2a 20 45 70 6f 6e 79 6d 6f 75 73 20 74 61   /* Eponymous ta
108f0 62 6c 65 20 66 6f 72 20 74 68 69 73 20 6d 6f 64  ble for this mod
10900 75 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ule */.};../*.**
10910 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
10920 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f  ut each column o
10930 66 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 69  f an SQL table i
10940 73 20 68 65 6c 64 20 69 6e 20 61 6e 20 69 6e 73  s held in an ins
10950 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73  tance.** of this
10960 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73   structure..*/.s
10970 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20  truct Column {. 
10980 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
10990 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69    /* Name of thi
109a0 73 20 63 6f 6c 75 6d 6e 2c 20 5c 30 30 30 2c 20  s column, \000, 
109b0 74 68 65 6e 20 74 68 65 20 74 79 70 65 20 2a 2f  then the type */
109c0 0a 20 20 45 78 70 72 20 2a 70 44 66 6c 74 3b 20  .  Expr *pDflt; 
109d0 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 76      /* Default v
109e0 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c  alue of this col
109f0 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  umn */.  char *z
10a00 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c  Coll;     /* Col
10a10 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2e  lating sequence.
10a20 20 20 49 66 20 4e 55 4c 4c 2c 20 75 73 65 20 74    If NULL, use t
10a30 68 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20  he default */.  
10a40 75 38 20 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20 20  u8 notNull;     
10a50 20 2f 2a 20 41 6e 20 4f 45 5f 20 63 6f 64 65 20   /* An OE_ code 
10a60 66 6f 72 20 68 61 6e 64 6c 69 6e 67 20 61 20 4e  for handling a N
10a70 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69  OT NULL constrai
10a80 6e 74 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66  nt */.  char aff
10a90 69 6e 69 74 79 3b 20 20 20 2f 2a 20 4f 6e 65 20  inity;   /* One 
10aa0 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46  of the SQLITE_AF
10ab0 46 5f 2e 2e 2e 20 76 61 6c 75 65 73 20 2a 2f 0a  F_... values */.
10ac0 20 20 75 38 20 73 7a 45 73 74 3b 20 20 20 20 20    u8 szEst;     
10ad0 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
10ae0 73 69 7a 65 20 6f 66 20 76 61 6c 75 65 20 69 6e  size of value in
10af0 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 73 69   this column. si
10b00 7a 65 6f 66 28 49 4e 54 29 3d 3d 31 20 2a 2f 0a  zeof(INT)==1 */.
10b10 20 20 75 38 20 63 6f 6c 46 6c 61 67 73 3b 20 20    u8 colFlags;  
10b20 20 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20 70 72     /* Boolean pr
10b30 6f 70 65 72 74 69 65 73 2e 20 20 53 65 65 20 43  operties.  See C
10b40 4f 4c 46 4c 41 47 5f 20 64 65 66 69 6e 65 73 20  OLFLAG_ defines 
10b50 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20  below */.};../* 
10b60 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
10b70 6f 72 20 43 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61  or Column.colFla
10b80 67 73 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43  gs:.*/.#define C
10b90 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b 45 59 20 20  OLFLAG_PRIMKEY  
10ba0 30 78 30 30 30 31 20 20 20 20 2f 2a 20 43 6f 6c  0x0001    /* Col
10bb0 75 6d 6e 20 69 73 20 70 61 72 74 20 6f 66 20 74  umn is part of t
10bc0 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a  he primary key *
10bd0 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41  /.#define COLFLA
10be0 47 5f 48 49 44 44 45 4e 20 20 20 30 78 30 30 30  G_HIDDEN   0x000
10bf0 32 20 20 20 20 2f 2a 20 41 20 68 69 64 64 65 6e  2    /* A hidden
10c00 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 76 69 72   column in a vir
10c10 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64  tual table */.#d
10c20 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 41  efine COLFLAG_HA
10c30 53 54 59 50 45 20 20 30 78 30 30 30 34 20 20 20  STYPE  0x0004   
10c40 20 2f 2a 20 54 79 70 65 20 6e 61 6d 65 20 66 6f   /* Type name fo
10c50 6c 6c 6f 77 73 20 63 6f 6c 75 6d 6e 20 6e 61 6d  llows column nam
10c60 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43  e */../*.** A "C
10c70 6f 6c 6c 61 74 69 6e 67 20 53 65 71 75 65 6e 63  ollating Sequenc
10c80 65 22 20 69 73 20 64 65 66 69 6e 65 64 20 62 79  e" is defined by
10c90 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
10ca0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a  the following.**
10cb0 20 73 74 72 75 63 74 75 72 65 2e 20 43 6f 6e 63   structure. Conc
10cc0 65 70 74 75 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c  eptually, a coll
10cd0 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 63  ating sequence c
10ce0 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6e 61 6d  onsists of a nam
10cf0 65 20 61 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70 61  e and.** a compa
10d00 72 69 73 6f 6e 20 72 6f 75 74 69 6e 65 20 74 68  rison routine th
10d10 61 74 20 64 65 66 69 6e 65 73 20 74 68 65 20 6f  at defines the o
10d20 72 64 65 72 20 6f 66 20 74 68 61 74 20 73 65 71  rder of that seq
10d30 75 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  uence..**.** If 
10d40 43 6f 6c 6c 53 65 71 2e 78 43 6d 70 20 69 73 20  CollSeq.xCmp is 
10d50 4e 55 4c 4c 2c 20 69 74 20 6d 65 61 6e 73 20 74  NULL, it means t
10d60 68 61 74 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61  hat the.** colla
10d70 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73  ting sequence is
10d80 20 75 6e 64 65 66 69 6e 65 64 2e 20 20 49 6e 64   undefined.  Ind
10d90 69 63 65 73 20 62 75 69 6c 74 20 6f 6e 20 61 6e  ices built on an
10da0 20 75 6e 64 65 66 69 6e 65 64 0a 2a 2a 20 63 6f   undefined.** co
10db0 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
10dc0 20 6d 61 79 20 6e 6f 74 20 62 65 20 72 65 61 64   may not be read
10dd0 20 6f 72 20 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a   or written..*/.
10de0 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 7b  struct CollSeq {
10df0 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
10e00 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
10e10 20 6f 66 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e   of the collatin
10e20 67 20 73 65 71 75 65 6e 63 65 2c 20 55 54 46 2d  g sequence, UTF-
10e30 38 20 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 75  8 encoded */.  u
10e40 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20  8 enc;          
10e50 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63       /* Text enc
10e60 6f 64 69 6e 67 20 68 61 6e 64 6c 65 64 20 62 79  oding handled by
10e70 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20 76 6f 69   xCmp() */.  voi
10e80 64 20 2a 70 55 73 65 72 3b 20 20 20 20 20 20 20  d *pUser;       
10e90 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75     /* First argu
10ea0 6d 65 6e 74 20 74 6f 20 78 43 6d 70 28 29 20 2a  ment to xCmp() *
10eb0 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6d 70 29 28  /.  int (*xCmp)(
10ec0 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74  void*,int, const
10ed0 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e   void*, int, con
10ee0 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69  st void*);.  voi
10ef0 64 20 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29  d (*xDel)(void*)
10f00 3b 20 20 2f 2a 20 44 65 73 74 72 75 63 74 6f 72  ;  /* Destructor
10f10 20 66 6f 72 20 70 55 73 65 72 20 2a 2f 0a 7d 3b   for pUser */.};
10f20 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74 20 6f  ../*.** A sort o
10f30 72 64 65 72 20 63 61 6e 20 62 65 20 65 69 74 68  rder can be eith
10f40 65 72 20 41 53 43 20 6f 72 20 44 45 53 43 2e 0a  er ASC or DESC..
10f50 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
10f60 45 5f 53 4f 5f 41 53 43 20 20 20 20 20 20 20 30  E_SO_ASC       0
10f70 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63    /* Sort in asc
10f80 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a  ending order */.
10f90 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
10fa0 4f 5f 44 45 53 43 20 20 20 20 20 20 31 20 20 2f  O_DESC      1  /
10fb0 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64  * Sort in ascend
10fc0 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65  ing order */.#de
10fd0 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 55  fine SQLITE_SO_U
10fe0 4e 44 45 46 49 4e 45 44 20 2d 31 20 2f 2a 20 4e  NDEFINED -1 /* N
10ff0 6f 20 73 6f 72 74 20 6f 72 64 65 72 20 73 70 65  o sort order spe
11000 63 69 66 69 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  cified */../*.**
11010 20 43 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79   Column affinity
11020 20 74 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68   types..**.** Th
11030 65 73 65 20 75 73 65 64 20 74 6f 20 68 61 76 65  ese used to have
11040 20 6d 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c   mnemonic name l
11050 69 6b 65 20 27 69 27 20 66 6f 72 20 53 51 4c 49  ike 'i' for SQLI
11060 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 61  TE_AFF_INTEGER a
11070 6e 64 0a 2a 2a 20 27 74 27 20 66 6f 72 20 53 51  nd.** 't' for SQ
11080 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2e 20 20  LITE_AFF_TEXT.  
11090 42 75 74 20 77 65 20 63 61 6e 20 73 61 76 65 20  But we can save 
110a0 61 20 6c 69 74 74 6c 65 20 73 70 61 63 65 20 61  a little space a
110b0 6e 64 20 69 6d 70 72 6f 76 65 0a 2a 2a 20 74 68  nd improve.** th
110c0 65 20 73 70 65 65 64 20 61 20 6c 69 74 74 6c 65  e speed a little
110d0 20 62 79 20 6e 75 6d 62 65 72 69 6e 67 20 74 68   by numbering th
110e0 65 20 76 61 6c 75 65 73 20 63 6f 6e 73 65 63 75  e values consecu
110f0 74 69 76 65 6c 79 2e 0a 2a 2a 0a 2a 2a 20 42 75  tively..**.** Bu
11100 74 20 72 61 74 68 65 72 20 74 68 61 6e 20 73 74  t rather than st
11110 61 72 74 20 77 69 74 68 20 30 20 6f 72 20 31 2c  art with 0 or 1,
11120 20 77 65 20 62 65 67 69 6e 20 77 69 74 68 20 27   we begin with '
11130 41 27 2e 20 20 54 68 61 74 20 77 61 79 2c 0a 2a  A'.  That way,.*
11140 2a 20 77 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20  * when multiple 
11150 61 66 66 69 6e 69 74 79 20 74 79 70 65 73 20 61  affinity types a
11160 72 65 20 63 6f 6e 63 61 74 65 6e 61 74 65 64 20  re concatenated 
11170 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 61 6e  into a string an
11180 64 0a 2a 2a 20 75 73 65 64 20 61 73 20 74 68 65  d.** used as the
11190 20 50 34 20 6f 70 65 72 61 6e 64 2c 20 74 68 65   P4 operand, the
111a0 79 20 77 69 6c 6c 20 62 65 20 6d 6f 72 65 20 72  y will be more r
111b0 65 61 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e  eadable..**.** N
111c0 6f 74 65 20 61 6c 73 6f 20 74 68 61 74 20 74 68  ote also that th
111d0 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65 73 20  e numeric types 
111e0 61 72 65 20 67 72 6f 75 70 65 64 20 74 6f 67 65  are grouped toge
111f0 74 68 65 72 20 73 6f 20 74 68 61 74 20 74 65 73  ther so that tes
11200 74 69 6e 67 0a 2a 2a 20 66 6f 72 20 61 20 6e 75  ting.** for a nu
11210 6d 65 72 69 63 20 74 79 70 65 20 69 73 20 61 20  meric type is a 
11220 73 69 6e 67 6c 65 20 63 6f 6d 70 61 72 69 73 6f  single compariso
11230 6e 2e 20 20 41 6e 64 20 74 68 65 20 42 4c 4f 42  n.  And the BLOB
11240 20 74 79 70 65 20 69 73 20 66 69 72 73 74 2e 0a   type is first..
11250 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
11260 45 5f 41 46 46 5f 42 4c 4f 42 20 20 20 20 20 27  E_AFF_BLOB     '
11270 41 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  A'.#define SQLIT
11280 45 5f 41 46 46 5f 54 45 58 54 20 20 20 20 20 27  E_AFF_TEXT     '
11290 42 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  B'.#define SQLIT
112a0 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 20 27  E_AFF_NUMERIC  '
112b0 43 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  C'.#define SQLIT
112c0 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 20 27  E_AFF_INTEGER  '
112d0 44 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  D'.#define SQLIT
112e0 45 5f 41 46 46 5f 52 45 41 4c 20 20 20 20 20 27  E_AFF_REAL     '
112f0 45 27 0a 0a 23 64 65 66 69 6e 65 20 73 71 6c 69  E'..#define sqli
11300 74 65 33 49 73 4e 75 6d 65 72 69 63 41 66 66 69  te3IsNumericAffi
11310 6e 69 74 79 28 58 29 20 20 28 28 58 29 3e 3d 53  nity(X)  ((X)>=S
11320 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
11330 43 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51  C)../*.** The SQ
11340 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 76 61  LITE_AFF_MASK va
11350 6c 75 65 73 20 6d 61 73 6b 73 20 6f 66 66 20 74  lues masks off t
11360 68 65 20 73 69 67 6e 69 66 69 63 61 6e 74 20 62  he significant b
11370 69 74 73 20 6f 66 20 61 6e 0a 2a 2a 20 61 66 66  its of an.** aff
11380 69 6e 69 74 79 20 76 61 6c 75 65 2e 0a 2a 2f 0a  inity value..*/.
11390 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
113a0 46 46 5f 4d 41 53 4b 20 20 20 20 20 30 78 34 37  FF_MASK     0x47
113b0 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 69 74 69 6f 6e  ../*.** Addition
113c0 61 6c 20 62 69 74 20 76 61 6c 75 65 73 20 74 68  al bit values th
113d0 61 74 20 63 61 6e 20 62 65 20 4f 52 65 64 20 77  at can be ORed w
113e0 69 74 68 20 61 6e 20 61 66 66 69 6e 69 74 79 20  ith an affinity 
113f0 77 69 74 68 6f 75 74 0a 2a 2a 20 63 68 61 6e 67  without.** chang
11400 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74 79  ing the affinity
11410 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ..**.** The SQLI
11420 54 45 5f 4e 4f 54 4e 55 4c 4c 20 66 6c 61 67 20  TE_NOTNULL flag 
11430 69 73 20 61 20 63 6f 6d 62 69 6e 61 74 69 6f 6e  is a combination
11440 20 6f 66 20 4e 55 4c 4c 45 51 20 61 6e 64 20 4a   of NULLEQ and J
11450 55 4d 50 49 46 4e 55 4c 4c 2e 0a 2a 2a 20 49 74  UMPIFNULL..** It
11460 20 63 61 75 73 65 73 20 61 6e 20 61 73 73 65 72   causes an asser
11470 74 28 29 20 74 6f 20 66 69 72 65 20 69 66 20 65  t() to fire if e
11480 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 74 6f  ither operand to
11490 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a 2a   a comparison.**
114a0 20 6f 70 65 72 61 74 6f 72 20 69 73 20 4e 55 4c   operator is NUL
114b0 4c 2e 20 20 49 74 20 69 73 20 61 64 64 65 64 20  L.  It is added 
114c0 74 6f 20 63 65 72 74 61 69 6e 20 63 6f 6d 70 61  to certain compa
114d0 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 73 20  rison operators 
114e0 74 6f 0a 2a 2a 20 70 72 6f 76 65 20 74 68 61 74  to.** prove that
114f0 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20 61 72   the operands ar
11500 65 20 61 6c 77 61 79 73 20 4e 4f 54 20 4e 55 4c  e always NOT NUL
11510 4c 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  L..*/.#define SQ
11520 4c 49 54 45 5f 4b 45 45 50 4e 55 4c 4c 20 20 20  LITE_KEEPNULL   
11530 20 20 30 78 30 38 20 20 2f 2a 20 55 73 65 64 20    0x08  /* Used 
11540 62 79 20 76 65 63 74 6f 72 20 3d 3d 20 6f 72 20  by vector == or 
11550 3c 3e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  <> */.#define SQ
11560 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20  LITE_JUMPIFNULL 
11570 20 20 30 78 31 30 20 20 2f 2a 20 6a 75 6d 70 73    0x10  /* jumps
11580 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   if either opera
11590 6e 64 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64  nd is NULL */.#d
115a0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 54 4f  efine SQLITE_STO
115b0 52 45 50 32 20 20 20 20 20 20 30 78 32 30 20 20  REP2      0x20  
115c0 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
115d0 69 6e 20 72 65 67 5b 50 32 5d 20 72 61 74 68 65  in reg[P2] rathe
115e0 72 20 74 68 61 6e 20 6a 75 6d 70 20 2a 2f 0a 23  r than jump */.#
115f0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 55  define SQLITE_NU
11600 4c 4c 45 51 20 20 20 20 20 20 20 30 78 38 30 20  LLEQ       0x80 
11610 20 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f   /* NULL=NULL */
11620 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
11630 4e 4f 54 4e 55 4c 4c 20 20 20 20 20 20 30 78 39  NOTNULL      0x9
11640 30 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61  0  /* Assert tha
11650 74 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e  t operands are n
11660 65 76 65 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a  ever NULL */../*
11670 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 20 6f 66  .** An object of
11680 20 74 68 69 73 20 74 79 70 65 20 69 73 20 63 72   this type is cr
11690 65 61 74 65 64 20 66 6f 72 20 65 61 63 68 20 76  eated for each v
116a0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 70 72 65  irtual table pre
116b0 73 65 6e 74 20 69 6e 0a 2a 2a 20 74 68 65 20 64  sent in.** the d
116c0 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a  atabase schema..
116d0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 64 61 74  **.** If the dat
116e0 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20  abase schema is 
116f0 73 68 61 72 65 64 2c 20 74 68 65 6e 20 74 68 65  shared, then the
11700 72 65 20 69 73 20 6f 6e 65 20 69 6e 73 74 61 6e  re is one instan
11710 63 65 20 6f 66 20 74 68 69 73 0a 2a 2a 20 73 74  ce of this.** st
11720 72 75 63 74 75 72 65 20 66 6f 72 20 65 61 63 68  ructure for each
11730 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
11740 74 69 6f 6e 20 28 73 71 6c 69 74 65 33 2a 29 20  tion (sqlite3*) 
11750 74 68 61 74 20 75 73 65 73 20 74 68 65 20 73 68  that uses the sh
11760 61 72 65 64 0a 2a 2a 20 73 63 68 65 6d 61 2e 20  ared.** schema. 
11770 54 68 69 73 20 69 73 20 62 65 63 61 75 73 65 20  This is because 
11780 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f  each database co
11790 6e 6e 65 63 74 69 6f 6e 20 72 65 71 75 69 72 65  nnection require
117a0 73 20 69 74 73 20 6f 77 6e 20 75 6e 69 71 75 65  s its own unique
117b0 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  .** instance of 
117c0 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
117d0 2a 20 68 61 6e 64 6c 65 20 75 73 65 64 20 74 6f  * handle used to
117e0 20 61 63 63 65 73 73 20 74 68 65 20 76 69 72 74   access the virt
117f0 75 61 6c 20 74 61 62 6c 65 0a 2a 2a 20 69 6d 70  ual table.** imp
11800 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 73 71 6c  lementation. sql
11810 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c  ite3_vtab* handl
11820 65 73 20 63 61 6e 20 6e 6f 74 20 62 65 20 73 68  es can not be sh
11830 61 72 65 64 20 62 65 74 77 65 65 6e 0a 2a 2a 20  ared between.** 
11840 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
11850 69 6f 6e 73 2c 20 65 76 65 6e 20 77 68 65 6e 20  ions, even when 
11860 74 68 65 20 72 65 73 74 20 6f 66 20 74 68 65 20  the rest of the 
11870 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61  in-memory databa
11880 73 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20  se.** schema is 
11890 73 68 61 72 65 64 2c 20 61 73 20 74 68 65 20 69  shared, as the i
118a0 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  mplementation of
118b0 74 65 6e 20 73 74 6f 72 65 73 20 74 68 65 20 64  ten stores the d
118c0 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65  atabase.** conne
118d0 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 70 61 73  ction handle pas
118e0 73 65 64 20 74 6f 20 69 74 20 76 69 61 20 74 68  sed to it via th
118f0 65 20 78 43 6f 6e 6e 65 63 74 28 29 20 6f 72 20  e xConnect() or 
11900 78 43 72 65 61 74 65 28 29 20 6d 65 74 68 6f 64  xCreate() method
11910 0a 2a 2a 20 64 75 72 69 6e 67 20 69 6e 69 74 69  .** during initi
11920 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 74 65 72 6e  alization intern
11930 61 6c 6c 79 2e 20 54 68 69 73 20 64 61 74 61 62  ally. This datab
11940 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  ase connection h
11950 61 6e 64 6c 65 20 6d 61 79 0a 2a 2a 20 74 68 65  andle may.** the
11960 6e 20 62 65 20 75 73 65 64 20 62 79 20 74 68 65  n be used by the
11970 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69   virtual table i
11980 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f  mplementation to
11990 20 61 63 63 65 73 73 20 72 65 61 6c 20 74 61 62   access real tab
119a0 6c 65 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74 68  les.** within th
119b0 65 20 64 61 74 61 62 61 73 65 2e 20 53 6f 20 74  e database. So t
119c0 68 61 74 20 74 68 65 79 20 61 70 70 65 61 72 20  hat they appear 
119d0 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 63  as part of the c
119e0 61 6c 6c 65 72 73 0a 2a 2a 20 74 72 61 6e 73 61  allers.** transa
119f0 63 74 69 6f 6e 2c 20 74 68 65 73 65 20 61 63 63  ction, these acc
11a00 65 73 73 65 73 20 6e 65 65 64 20 74 6f 20 62 65  esses need to be
11a10 20 6d 61 64 65 20 76 69 61 20 74 68 65 20 73 61   made via the sa
11a20 6d 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63  me database.** c
11a30 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 20 74 68 61  onnection as tha
11a40 74 20 75 73 65 64 20 74 6f 20 65 78 65 63 75 74  t used to execut
11a50 65 20 53 51 4c 20 6f 70 65 72 61 74 69 6f 6e 73  e SQL operations
11a60 20 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20   on the virtual 
11a70 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c  table..**.** All
11a80 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20   VTable objects 
11a90 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 20  that correspond 
11aa0 74 6f 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c  to a single tabl
11ab0 65 20 69 6e 20 61 20 73 68 61 72 65 64 0a 2a 2a  e in a shared.**
11ac0 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
11ad0 20 61 72 65 20 69 6e 69 74 69 61 6c 6c 79 20 73   are initially s
11ae0 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65  tored in a linke
11af0 64 2d 6c 69 73 74 20 70 6f 69 6e 74 65 64 20 74  d-list pointed t
11b00 6f 20 62 79 0a 2a 2a 20 74 68 65 20 54 61 62 6c  o by.** the Tabl
11b10 65 2e 70 56 54 61 62 6c 65 20 6d 65 6d 62 65 72  e.pVTable member
11b20 20 76 61 72 69 61 62 6c 65 20 6f 66 20 74 68 65   variable of the
11b30 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 54   corresponding T
11b40 61 62 6c 65 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20  able object..** 
11b50 57 68 65 6e 20 61 6e 20 73 71 6c 69 74 65 33 5f  When an sqlite3_
11b60 70 72 65 70 61 72 65 28 29 20 6f 70 65 72 61 74  prepare() operat
11b70 69 6f 6e 20 69 73 20 72 65 71 75 69 72 65 64 20  ion is required 
11b80 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 76 69  to access the vi
11b90 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 2c 20  rtual.** table, 
11ba0 69 74 20 73 65 61 72 63 68 65 73 20 74 68 65 20  it searches the 
11bb0 6c 69 73 74 20 66 6f 72 20 74 68 65 20 56 54 61  list for the VTa
11bc0 62 6c 65 20 74 68 61 74 20 63 6f 72 72 65 73 70  ble that corresp
11bd0 6f 6e 64 73 20 74 6f 20 74 68 65 0a 2a 2a 20 64  onds to the.** d
11be0 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
11bf0 6f 6e 20 64 6f 69 6e 67 20 74 68 65 20 70 72 65  on doing the pre
11c00 70 61 72 69 6e 67 20 73 6f 20 61 73 20 74 6f 20  paring so as to 
11c10 75 73 65 20 74 68 65 20 63 6f 72 72 65 63 74 0a  use the correct.
11c20 2a 2a 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a  ** sqlite3_vtab*
11c30 20 68 61 6e 64 6c 65 20 69 6e 20 74 68 65 20 63   handle in the c
11c40 6f 6d 70 69 6c 65 64 20 71 75 65 72 79 2e 0a 2a  ompiled query..*
11c50 2a 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 69 6e 2d  *.** When an in-
11c60 6d 65 6d 6f 72 79 20 54 61 62 6c 65 20 6f 62 6a  memory Table obj
11c70 65 63 74 20 69 73 20 64 65 6c 65 74 65 64 20 28  ect is deleted (
11c80 66 6f 72 20 65 78 61 6d 70 6c 65 20 77 68 65 6e  for example when
11c90 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69   the.** schema i
11ca0 73 20 62 65 69 6e 67 20 72 65 6c 6f 61 64 65 64  s being reloaded
11cb0 20 66 6f 72 20 73 6f 6d 65 20 72 65 61 73 6f 6e   for some reason
11cc0 29 2c 20 74 68 65 20 56 54 61 62 6c 65 20 6f 62  ), the VTable ob
11cd0 6a 65 63 74 73 20 61 72 65 20 6e 6f 74 0a 2a 2a  jects are not.**
11ce0 20 64 65 6c 65 74 65 64 20 61 6e 64 20 74 68 65   deleted and the
11cf0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68   sqlite3_vtab* h
11d00 61 6e 64 6c 65 73 20 61 72 65 20 6e 6f 74 20 78  andles are not x
11d10 44 69 73 63 6f 6e 6e 65 63 74 28 29 65 64 0a 2a  Disconnect()ed.*
11d20 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 49  * immediately. I
11d30 6e 73 74 65 61 64 2c 20 74 68 65 79 20 61 72 65  nstead, they are
11d40 20 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20   moved from the 
11d50 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20 6c 69  Table.pVTable li
11d60 73 74 20 74 6f 0a 2a 2a 20 61 6e 6f 74 68 65 72  st to.** another
11d70 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61   linked list hea
11d80 64 65 64 20 62 79 20 74 68 65 20 73 71 6c 69 74  ded by the sqlit
11d90 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 20 6d  e3.pDisconnect m
11da0 65 6d 62 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20  ember of the.** 
11db0 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 71  corresponding sq
11dc0 6c 69 74 65 33 20 73 74 72 75 63 74 75 72 65 2e  lite3 structure.
11dd0 20 54 68 65 79 20 61 72 65 20 74 68 65 6e 20 64   They are then d
11de0 65 6c 65 74 65 64 2f 78 44 69 73 63 6f 6e 6e 65  eleted/xDisconne
11df0 63 74 65 64 0a 2a 2a 20 6e 65 78 74 20 74 69 6d  cted.** next tim
11e00 65 20 61 20 73 74 61 74 65 6d 65 6e 74 20 69 73  e a statement is
11e10 20 70 72 65 70 61 72 65 64 20 75 73 69 6e 67 20   prepared using 
11e20 73 61 69 64 20 73 71 6c 69 74 65 33 2a 2e 20 54  said sqlite3*. T
11e30 68 69 73 20 69 73 20 64 6f 6e 65 0a 2a 2a 20 74  his is done.** t
11e40 6f 20 61 76 6f 69 64 20 64 65 61 64 6c 6f 63 6b  o avoid deadlock
11e50 20 69 73 73 75 65 73 20 69 6e 76 6f 6c 76 69 6e   issues involvin
11e60 67 20 6d 75 6c 74 69 70 6c 65 20 73 71 6c 69 74  g multiple sqlit
11e70 65 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 65 73  e3.mutex mutexes
11e80 2e 0a 2a 2a 20 52 65 66 65 72 20 74 6f 20 63 6f  ..** Refer to co
11e90 6d 6d 65 6e 74 73 20 61 62 6f 76 65 20 66 75 6e  mments above fun
11ea0 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 56 74 61  ction sqlite3Vta
11eb0 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 29 20 66 6f  bUnlockList() fo
11ec0 72 20 61 6e 0a 2a 2a 20 65 78 70 6c 61 6e 61 74  r an.** explanat
11ed0 69 6f 6e 20 61 73 20 74 6f 20 77 68 79 20 69 74  ion as to why it
11ee0 20 69 73 20 73 61 66 65 20 74 6f 20 61 64 64 20   is safe to add 
11ef0 61 6e 20 65 6e 74 72 79 20 74 6f 20 61 6e 20 73  an entry to an s
11f00 71 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65  qlite3.pDisconne
11f10 63 74 0a 2a 2a 20 6c 69 73 74 20 77 69 74 68 6f  ct.** list witho
11f20 75 74 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 63  ut holding the c
11f30 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c  orresponding sql
11f40 69 74 65 33 2e 6d 75 74 65 78 20 6d 75 74 65 78  ite3.mutex mutex
11f50 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f  ..**.** The memo
11f60 72 79 20 66 6f 72 20 6f 62 6a 65 63 74 73 20 6f  ry for objects o
11f70 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20 61  f this type is a
11f80 6c 77 61 79 73 20 61 6c 6c 6f 63 61 74 65 64 20  lways allocated 
11f90 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 44 62 4d  by.** sqlite3DbM
11fa0 61 6c 6c 6f 63 28 29 2c 20 75 73 69 6e 67 20 74  alloc(), using t
11fb0 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  he connection ha
11fc0 6e 64 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 56  ndle stored in V
11fd0 54 61 62 6c 65 2e 64 62 20 61 73 0a 2a 2a 20 74  Table.db as.** t
11fe0 68 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e  he first argumen
11ff0 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 56 54 61  t..*/.struct VTa
12000 62 6c 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20  ble {.  sqlite3 
12010 2a 64 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  *db;            
12020 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63 6f    /* Database co
12030 6e 6e 65 63 74 69 6f 6e 20 61 73 73 6f 63 69 61  nnection associa
12040 74 65 64 20 77 69 74 68 20 74 68 69 73 20 74 61  ted with this ta
12050 62 6c 65 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20  ble */.  Module 
12060 2a 70 4d 6f 64 3b 20 20 20 20 20 20 20 20 20 20  *pMod;          
12070 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
12080 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e   module implemen
12090 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69  tation */.  sqli
120a0 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
120b0 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
120c0 20 74 6f 20 76 74 61 62 20 69 6e 73 74 61 6e 63   to vtab instanc
120d0 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b  e */.  int nRef;
120e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
120f0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f   /* Number of po
12100 69 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20 73  inters to this s
12110 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 75 38  tructure */.  u8
12120 20 62 43 6f 6e 73 74 72 61 69 6e 74 3b 20 20 20   bConstraint;   
12130 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
12140 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61  if constraints a
12150 72 65 20 73 75 70 70 6f 72 74 65 64 20 2a 2f 0a  re supported */.
12160 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74    int iSavepoint
12170 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44  ;           /* D
12180 65 70 74 68 20 6f 66 20 74 68 65 20 53 41 56 45  epth of the SAVE
12190 50 4f 49 4e 54 20 73 74 61 63 6b 20 2a 2f 0a 20  POINT stack */. 
121a0 20 56 54 61 62 6c 65 20 2a 70 4e 65 78 74 3b 20   VTable *pNext; 
121b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65             /* Ne
121c0 78 74 20 69 6e 20 6c 69 6e 6b 65 64 20 6c 69 73  xt in linked lis
121d0 74 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f  t (see above) */
121e0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73  .};../*.** The s
121f0 63 68 65 6d 61 20 66 6f 72 20 65 61 63 68 20 53  chema for each S
12200 51 4c 20 74 61 62 6c 65 20 61 6e 64 20 76 69 65  QL table and vie
12210 77 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64  w is represented
12220 20 69 6e 20 6d 65 6d 6f 72 79 0a 2a 2a 20 62 79   in memory.** by
12230 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
12240 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
12250 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75  ructure..*/.stru
12260 63 74 20 54 61 62 6c 65 20 7b 0a 20 20 63 68 61  ct Table {.  cha
12270 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
12280 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
12290 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20 2a   table or view *
122a0 2f 0a 20 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c  /.  Column *aCol
122b0 3b 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f  ;        /* Info
122c0 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61  rmation about ea
122d0 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49  ch column */.  I
122e0 6e 64 65 78 20 2a 70 49 6e 64 65 78 3b 20 20 20  ndex *pIndex;   
122f0 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 53      /* List of S
12300 51 4c 20 69 6e 64 65 78 65 73 20 6f 6e 20 74 68  QL indexes on th
12310 69 73 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 53  is table. */.  S
12320 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20  elect *pSelect; 
12330 20 20 20 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20      /* NULL for 
12340 74 61 62 6c 65 73 2e 20 20 50 6f 69 6e 74 73 20  tables.  Points 
12350 74 6f 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 66  to definition if
12360 20 61 20 76 69 65 77 2e 20 2a 2f 0a 20 20 46 4b   a view. */.  FK
12370 65 79 20 2a 70 46 4b 65 79 3b 20 20 20 20 20 20  ey *pFKey;      
12380 20 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73     /* Linked lis
12390 74 20 6f 66 20 61 6c 6c 20 66 6f 72 65 69 67 6e  t of all foreign
123a0 20 6b 65 79 73 20 69 6e 20 74 68 69 73 20 74 61   keys in this ta
123b0 62 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ble */.  char *z
123c0 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 2f 2a  ColAff;       /*
123d0 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67   String defining
123e0 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66   the affinity of
123f0 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   each column */.
12400 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43 68 65    ExprList *pChe
12410 63 6b 3b 20 20 20 20 2f 2a 20 41 6c 6c 20 43 48  ck;    /* All CH
12420 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  ECK constraints 
12430 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
12440 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 2e            /*   .
12450 2e 2e 20 61 6c 73 6f 20 75 73 65 64 20 61 73 20  .. also used as 
12460 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 6c 69 73 74  column name list
12470 20 69 6e 20 61 20 56 49 45 57 20 2a 2f 0a 20 20   in a VIEW */.  
12480 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20 20  int tnum;       
12490 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 42 54 72       /* Root BTr
124a0 65 65 20 70 61 67 65 20 66 6f 72 20 74 68 69 73  ee page for this
124b0 20 74 61 62 6c 65 20 2a 2f 0a 20 20 75 33 32 20   table */.  u32 
124c0 6e 54 61 62 52 65 66 3b 20 20 20 20 20 20 20 20  nTabRef;        
124d0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f   /* Number of po
124e0 69 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20 54  inters to this T
124f0 61 62 6c 65 20 2a 2f 0a 20 20 75 33 32 20 74 61  able */.  u32 ta
12500 62 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 2f  bFlags;        /
12510 2a 20 4d 61 73 6b 20 6f 66 20 54 46 5f 2a 20 76  * Mask of TF_* v
12520 61 6c 75 65 73 20 2a 2f 0a 20 20 69 31 36 20 69  alues */.  i16 i
12530 50 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20 20  PKey;           
12540 2f 2a 20 49 66 20 6e 6f 74 20 6e 65 67 61 74 69  /* If not negati
12550 76 65 2c 20 75 73 65 20 61 43 6f 6c 5b 69 50 4b  ve, use aCol[iPK
12560 65 79 5d 20 61 73 20 74 68 65 20 72 6f 77 69 64  ey] as the rowid
12570 20 2a 2f 0a 20 20 69 31 36 20 6e 43 6f 6c 3b 20   */.  i16 nCol; 
12580 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
12590 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
125a0 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  in this table */
125b0 0a 20 20 4c 6f 67 45 73 74 20 6e 52 6f 77 4c 6f  .  LogEst nRowLo
125c0 67 45 73 74 3b 20 20 20 2f 2a 20 45 73 74 69 6d  gEst;   /* Estim
125d0 61 74 65 64 20 72 6f 77 73 20 69 6e 20 74 61 62  ated rows in tab
125e0 6c 65 20 2d 20 66 72 6f 6d 20 73 71 6c 69 74 65  le - from sqlite
125f0 5f 73 74 61 74 31 20 74 61 62 6c 65 20 2a 2f 0a  _stat1 table */.
12600 20 20 4c 6f 67 45 73 74 20 73 7a 54 61 62 52 6f    LogEst szTabRo
12610 77 3b 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61  w;     /* Estima
12620 74 65 64 20 73 69 7a 65 20 6f 66 20 65 61 63 68  ted size of each
12630 20 74 61 62 6c 65 20 72 6f 77 20 69 6e 20 62 79   table row in by
12640 74 65 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  tes */.#ifdef SQ
12650 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 53 54  LITE_ENABLE_COST
12660 4d 55 4c 54 0a 20 20 4c 6f 67 45 73 74 20 63 6f  MULT.  LogEst co
12670 73 74 4d 75 6c 74 3b 20 20 20 20 20 2f 2a 20 43  stMult;     /* C
12680 6f 73 74 20 6d 75 6c 74 69 70 6c 69 65 72 20 66  ost multiplier f
12690 6f 72 20 75 73 69 6e 67 20 74 68 69 73 20 74 61  or using this ta
126a0 62 6c 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ble */.#endif.  
126b0 75 38 20 6b 65 79 43 6f 6e 66 3b 20 20 20 20 20  u8 keyConf;     
126c0 20 20 20 20 20 2f 2a 20 57 68 61 74 20 74 6f 20       /* What to 
126d0 64 6f 20 69 6e 20 63 61 73 65 20 6f 66 20 75 6e  do in case of un
126e0 69 71 75 65 6e 65 73 73 20 63 6f 6e 66 6c 69 63  iqueness conflic
126f0 74 20 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a 23 69  t on iPKey */.#i
12700 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
12710 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20 20 69  T_ALTERTABLE.  i
12720 6e 74 20 61 64 64 43 6f 6c 4f 66 66 73 65 74 3b  nt addColOffset;
12730 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e      /* Offset in
12740 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74   CREATE TABLE st
12750 6d 74 20 74 6f 20 61 64 64 20 61 20 6e 65 77 20  mt to add a new 
12760 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69 66  column */.#endif
12770 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
12780 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
12790 45 0a 20 20 69 6e 74 20 6e 4d 6f 64 75 6c 65 41  E.  int nModuleA
127a0 72 67 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  rg;      /* Numb
127b0 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
127c0 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 2a 2f  to the module */
127d0 0a 20 20 63 68 61 72 20 2a 2a 61 7a 4d 6f 64 75  .  char **azModu
127e0 6c 65 41 72 67 3b 20 20 2f 2a 20 30 3a 20 6d 6f  leArg;  /* 0: mo
127f0 64 75 6c 65 20 31 3a 20 73 63 68 65 6d 61 20 32  dule 1: schema 2
12800 3a 20 76 74 61 62 20 6e 61 6d 65 20 33 2e 2e 2e  : vtab name 3...
12810 3a 20 61 72 67 73 20 2a 2f 0a 20 20 56 54 61 62  : args */.  VTab
12820 6c 65 20 2a 70 56 54 61 62 6c 65 3b 20 20 20 20  le *pVTable;    
12830 20 2f 2a 20 4c 69 73 74 20 6f 66 20 56 54 61 62   /* List of VTab
12840 6c 65 20 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a 23  le objects. */.#
12850 65 6e 64 69 66 0a 20 20 54 72 69 67 67 65 72 20  endif.  Trigger 
12860 2a 70 54 72 69 67 67 65 72 3b 20 20 20 2f 2a 20  *pTrigger;   /* 
12870 4c 69 73 74 20 6f 66 20 74 72 69 67 67 65 72 73  List of triggers
12880 20 73 74 6f 72 65 64 20 69 6e 20 70 53 63 68 65   stored in pSche
12890 6d 61 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  ma */.  Schema *
128a0 70 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20  pSchema;     /* 
128b0 53 63 68 65 6d 61 20 74 68 61 74 20 63 6f 6e 74  Schema that cont
128c0 61 69 6e 73 20 74 68 69 73 20 74 61 62 6c 65 20  ains this table 
128d0 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65 78  */.  Table *pNex
128e0 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20 4e 65 78  tZombie;  /* Nex
128f0 74 20 6f 6e 20 74 68 65 20 50 61 72 73 65 2e 70  t on the Parse.p
12900 5a 6f 6d 62 69 65 54 61 62 20 6c 69 73 74 20 2a  ZombieTab list *
12910 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  /.};../*.** Allo
12920 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 54  wed values for T
12930 61 62 6c 65 2e 74 61 62 46 6c 61 67 73 2e 0a 2a  able.tabFlags..*
12940 2a 0a 2a 2a 20 54 46 5f 4f 4f 4f 48 69 64 64 65  *.** TF_OOOHidde
12950 6e 20 61 70 70 6c 69 65 73 20 74 6f 20 74 61 62  n applies to tab
12960 6c 65 73 20 6f 72 20 76 69 65 77 20 74 68 61 74  les or view that
12970 20 68 61 76 65 20 68 69 64 64 65 6e 20 63 6f 6c   have hidden col
12980 75 6d 6e 73 20 74 68 61 74 20 61 72 65 0a 2a 2a  umns that are.**
12990 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 6e 6f 6e   followed by non
129a0 2d 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 2e  -hidden columns.
129b0 20 20 45 78 61 6d 70 6c 65 3a 20 20 22 43 52 45    Example:  "CRE
129c0 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ATE VIRTUAL TABL
129d0 45 20 78 20 55 53 49 4e 47 0a 2a 2a 20 76 74 61  E x USING.** vta
129e0 62 31 28 61 20 48 49 44 44 45 4e 2c 20 62 29 3b  b1(a HIDDEN, b);
129f0 22 2e 20 20 53 69 6e 63 65 20 22 62 22 20 69 73  ".  Since "b" is
12a00 20 61 20 6e 6f 6e 2d 68 69 64 64 65 6e 20 63 6f   a non-hidden co
12a10 6c 75 6d 6e 20 62 75 74 20 22 61 22 20 69 73 20  lumn but "a" is 
12a20 68 69 64 64 65 6e 2c 0a 2a 2a 20 74 68 65 20 54  hidden,.** the T
12a30 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 61 74 74 72  F_OOOHidden attr
12a40 69 62 75 74 65 20 77 6f 75 6c 64 20 61 70 70 6c  ibute would appl
12a50 79 20 69 6e 20 74 68 69 73 20 63 61 73 65 2e 20  y in this case. 
12a60 20 53 75 63 68 20 74 61 62 6c 65 73 20 72 65 71   Such tables req
12a70 75 69 72 65 0a 2a 2a 20 73 70 65 63 69 61 6c 20  uire.** special 
12a80 68 61 6e 64 6c 69 6e 67 20 64 75 72 69 6e 67 20  handling during 
12a90 49 4e 53 45 52 54 20 70 72 6f 63 65 73 73 69 6e  INSERT processin
12aa0 67 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  g..*/.#define TF
12ab0 5f 52 65 61 64 6f 6e 6c 79 20 20 20 20 20 20 20  _Readonly       
12ac0 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20 52 65   0x0001    /* Re
12ad0 61 64 2d 6f 6e 6c 79 20 73 79 73 74 65 6d 20 74  ad-only system t
12ae0 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  able */.#define 
12af0 54 46 5f 45 70 68 65 6d 65 72 61 6c 20 20 20 20  TF_Ephemeral    
12b00 20 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20     0x0002    /* 
12b10 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62  An ephemeral tab
12b20 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  le */.#define TF
12b30 5f 48 61 73 50 72 69 6d 61 72 79 4b 65 79 20 20  _HasPrimaryKey  
12b40 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54 61   0x0004    /* Ta
12b50 62 6c 65 20 68 61 73 20 61 20 70 72 69 6d 61 72  ble has a primar
12b60 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65  y key */.#define
12b70 20 54 46 5f 41 75 74 6f 69 6e 63 72 65 6d 65 6e   TF_Autoincremen
12b80 74 20 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a  t   0x0008    /*
12b90 20 49 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79   Integer primary
12ba0 20 6b 65 79 20 69 73 20 61 75 74 6f 69 6e 63 72   key is autoincr
12bb0 65 6d 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  ement */.#define
12bc0 20 54 46 5f 48 61 73 53 74 61 74 31 20 20 20 20   TF_HasStat1    
12bd0 20 20 20 20 30 78 30 30 31 30 20 20 20 20 2f 2a      0x0010    /*
12be0 20 6e 52 6f 77 4c 6f 67 45 73 74 20 73 65 74 20   nRowLogEst set 
12bf0 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61 74  from sqlite_stat
12c00 31 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  1 */.#define TF_
12c10 57 69 74 68 6f 75 74 52 6f 77 69 64 20 20 20 20  WithoutRowid    
12c20 30 78 30 30 32 30 20 20 20 20 2f 2a 20 4e 6f 20  0x0020    /* No 
12c30 72 6f 77 69 64 2e 20 20 50 52 49 4d 41 52 59 20  rowid.  PRIMARY 
12c40 4b 45 59 20 69 73 20 74 68 65 20 6b 65 79 20 2a  KEY is the key *
12c50 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 4e 6f 56  /.#define TF_NoV
12c60 69 73 69 62 6c 65 52 6f 77 69 64 20 20 30 78 30  isibleRowid  0x0
12c70 30 34 30 20 20 20 20 2f 2a 20 4e 6f 20 75 73 65  040    /* No use
12c80 72 2d 76 69 73 69 62 6c 65 20 22 72 6f 77 69 64  r-visible "rowid
12c90 22 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66  " column */.#def
12ca0 69 6e 65 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e  ine TF_OOOHidden
12cb0 20 20 20 20 20 20 20 30 78 30 30 38 30 20 20 20         0x0080   
12cc0 20 2f 2a 20 4f 75 74 2d 6f 66 2d 4f 72 64 65 72   /* Out-of-Order
12cd0 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20   hidden columns 
12ce0 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 53 74  */.#define TF_St
12cf0 61 74 73 55 73 65 64 20 20 20 20 20 20 20 30 78  atsUsed       0x
12d00 30 31 30 30 20 20 20 20 2f 2a 20 51 75 65 72 79  0100    /* Query
12d10 20 70 6c 61 6e 6e 65 72 20 64 65 63 69 73 69 6f   planner decisio
12d20 6e 73 20 61 66 66 65 63 74 65 64 20 62 79 0a 20  ns affected by. 
12d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d50 20 20 20 20 2a 2a 20 49 6e 64 65 78 2e 61 69 52      ** Index.aiR
12d60 6f 77 4c 6f 67 45 73 74 5b 5d 20 76 61 6c 75 65  owLogEst[] value
12d70 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  s */.#define TF_
12d80 48 61 73 4e 6f 74 4e 75 6c 6c 20 20 20 20 20 20  HasNotNull      
12d90 30 78 30 32 30 30 20 20 20 20 2f 2a 20 43 6f 6e  0x0200    /* Con
12da0 74 61 69 6e 73 20 4e 4f 54 20 4e 55 4c 4c 20 63  tains NOT NULL c
12db0 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 0a 2f  onstraints */../
12dc0 2a 0a 2a 2a 20 54 65 73 74 20 74 6f 20 73 65 65  *.** Test to see
12dd0 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
12de0 61 20 74 61 62 6c 65 20 69 73 20 61 20 76 69 72  a table is a vir
12df0 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 69  tual table.  Thi
12e00 73 20 69 73 0a 2a 2a 20 64 6f 6e 65 20 61 73 20  s is.** done as 
12e10 61 20 6d 61 63 72 6f 20 73 6f 20 74 68 61 74 20  a macro so that 
12e20 69 74 20 77 69 6c 6c 20 62 65 20 6f 70 74 69 6d  it will be optim
12e30 69 7a 65 64 20 6f 75 74 20 77 68 65 6e 20 76 69  ized out when vi
12e40 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 73  rtual.** table s
12e50 75 70 70 6f 72 74 20 69 73 20 6f 6d 69 74 74 65  upport is omitte
12e60 64 20 66 72 6f 6d 20 74 68 65 20 62 75 69 6c 64  d from the build
12e70 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
12e80 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
12e90 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20  TABLE.#  define 
12ea0 49 73 56 69 72 74 75 61 6c 28 58 29 20 20 20 20  IsVirtual(X)    
12eb0 20 20 28 28 58 29 2d 3e 6e 4d 6f 64 75 6c 65 41    ((X)->nModuleA
12ec0 72 67 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66  rg).#else.#  def
12ed0 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58 29  ine IsVirtual(X)
12ee0 20 20 20 20 20 20 30 0a 23 65 6e 64 69 66 0a 0a        0.#endif..
12ef0 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20  /*.** Macros to 
12f00 64 65 74 65 72 6d 69 6e 65 20 69 66 20 61 20 63  determine if a c
12f10 6f 6c 75 6d 6e 20 69 73 20 68 69 64 64 65 6e 2e  olumn is hidden.
12f20 20 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64    IsOrdinaryHidd
12f30 65 6e 43 6f 6c 75 6d 6e 28 29 0a 2a 2a 20 6f 6e  enColumn().** on
12f40 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 6e 6f 6e  ly works for non
12f50 2d 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20  -virtual tables 
12f60 28 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65 73  (ordinary tables
12f70 20 61 6e 64 20 76 69 65 77 73 29 20 61 6e 64 20   and views) and 
12f80 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 66 61 6c  is.** always fal
12f90 73 65 20 75 6e 6c 65 73 73 20 53 51 4c 49 54 45  se unless SQLITE
12fa0 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43  _ENABLE_HIDDEN_C
12fb0 4f 4c 55 4d 4e 53 20 69 73 20 64 65 66 69 6e 65  OLUMNS is define
12fc0 64 2e 20 20 54 68 65 0a 2a 2a 20 49 73 48 69 64  d.  The.** IsHid
12fd0 64 65 6e 43 6f 6c 75 6d 6e 28 29 20 6d 61 63 72  denColumn() macr
12fe0 6f 20 69 73 20 67 65 6e 65 72 61 6c 20 70 75 72  o is general pur
12ff0 70 6f 73 65 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  pose..*/.#if def
13000 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
13010 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e  LE_HIDDEN_COLUMN
13020 53 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48  S).#  define IsH
13030 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20  iddenColumn(X)  
13040 20 20 20 20 20 20 20 28 28 28 58 29 2d 3e 63 6f         (((X)->co
13050 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47  lFlags & COLFLAG
13060 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 20 20  _HIDDEN)!=0).#  
13070 64 65 66 69 6e 65 20 49 73 4f 72 64 69 6e 61 72  define IsOrdinar
13080 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29  yHiddenColumn(X)
13090 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73   (((X)->colFlags
130a0 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45   & COLFLAG_HIDDE
130b0 4e 29 21 3d 30 29 0a 23 65 6c 69 66 20 21 64 65  N)!=0).#elif !de
130c0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
130d0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a  T_VIRTUALTABLE).
130e0 23 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64  #  define IsHidd
130f0 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20  enColumn(X)     
13100 20 20 20 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c      (((X)->colFl
13110 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49  ags & COLFLAG_HI
13120 44 44 45 4e 29 21 3d 30 29 0a 23 20 20 64 65 66  DDEN)!=0).#  def
13130 69 6e 65 20 49 73 4f 72 64 69 6e 61 72 79 48 69  ine IsOrdinaryHi
13140 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a  ddenColumn(X) 0.
13150 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20  #else.#  define 
13160 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58  IsHiddenColumn(X
13170 29 20 20 20 20 20 20 20 20 20 30 0a 23 20 20 64  )         0.#  d
13180 65 66 69 6e 65 20 49 73 4f 72 64 69 6e 61 72 79  efine IsOrdinary
13190 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20  HiddenColumn(X) 
131a0 30 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20 44 6f  0.#endif.../* Do
131b0 65 73 20 74 68 65 20 74 61 62 6c 65 20 68 61 76  es the table hav
131c0 65 20 61 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65  e a rowid */.#de
131d0 66 69 6e 65 20 48 61 73 52 6f 77 69 64 28 58 29  fine HasRowid(X)
131e0 20 20 20 20 20 28 28 28 58 29 2d 3e 74 61 62 46       (((X)->tabF
131f0 6c 61 67 73 20 26 20 54 46 5f 57 69 74 68 6f 75  lags & TF_Withou
13200 74 52 6f 77 69 64 29 3d 3d 30 29 0a 23 64 65 66  tRowid)==0).#def
13210 69 6e 65 20 56 69 73 69 62 6c 65 52 6f 77 69 64  ine VisibleRowid
13220 28 58 29 20 28 28 28 58 29 2d 3e 74 61 62 46 6c  (X) (((X)->tabFl
13230 61 67 73 20 26 20 54 46 5f 4e 6f 56 69 73 69 62  ags & TF_NoVisib
13240 6c 65 52 6f 77 69 64 29 3d 3d 30 29 0a 0a 2f 2a  leRowid)==0)../*
13250 0a 2a 2a 20 45 61 63 68 20 66 6f 72 65 69 67 6e  .** Each foreign
13260 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20   key constraint 
13270 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  is an instance o
13280 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
13290 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
132a0 20 41 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 69   A foreign key i
132b0 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
132c0 68 20 74 77 6f 20 74 61 62 6c 65 73 2e 20 20 54  h two tables.  T
132d0 68 65 20 22 66 72 6f 6d 22 20 74 61 62 6c 65 20  he "from" table 
132e0 69 73 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20  is.** the table 
132f0 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
13300 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61  e REFERENCES cla
13310 75 73 65 20 74 68 61 74 20 63 72 65 61 74 65 73  use that creates
13320 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20   the foreign.** 
13330 6b 65 79 2e 20 20 54 68 65 20 22 74 6f 22 20 74  key.  The "to" t
13340 61 62 6c 65 20 69 73 20 74 68 65 20 74 61 62 6c  able is the tabl
13350 65 20 74 68 61 74 20 69 73 20 6e 61 6d 65 64 20  e that is named 
13360 69 6e 20 74 68 65 20 52 45 46 45 52 45 4e 43 45  in the REFERENCE
13370 53 20 63 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e  S clause..** Con
13380 73 69 64 65 72 20 74 68 69 73 20 65 78 61 6d 70  sider this examp
13390 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52  le:.**.**     CR
133a0 45 41 54 45 20 54 41 42 4c 45 20 65 78 31 28 0a  EATE TABLE ex1(.
133b0 2a 2a 20 20 20 20 20 20 20 61 20 49 4e 54 45 47  **       a INTEG
133c0 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a  ER PRIMARY KEY,.
133d0 2a 2a 20 20 20 20 20 20 20 62 20 49 4e 54 45 47  **       b INTEG
133e0 45 52 20 43 4f 4e 53 54 52 41 49 4e 54 20 66 6b  ER CONSTRAINT fk
133f0 31 20 52 45 46 45 52 45 4e 43 45 53 20 65 78 32  1 REFERENCES ex2
13400 28 78 29 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a  (x).**     );.**
13410 0a 2a 2a 20 46 6f 72 20 66 6f 72 65 69 67 6e 20  .** For foreign 
13420 6b 65 79 20 22 66 6b 31 22 2c 20 74 68 65 20 66  key "fk1", the f
13430 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 22 65 78  rom-table is "ex
13440 31 22 20 61 6e 64 20 74 68 65 20 74 6f 2d 74 61  1" and the to-ta
13450 62 6c 65 20 69 73 20 22 65 78 32 22 2e 0a 2a 2a  ble is "ex2"..**
13460 20 45 71 75 69 76 61 6c 65 6e 74 20 6e 61 6d 65   Equivalent name
13470 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 66 72 6f  s:.**.**     fro
13480 6d 2d 74 61 62 6c 65 20 3d 3d 20 63 68 69 6c 64  m-table == child
13490 2d 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20  -table.**       
134a0 74 6f 2d 74 61 62 6c 65 20 3d 3d 20 70 61 72 65  to-table == pare
134b0 6e 74 2d 74 61 62 6c 65 0a 2a 2a 0a 2a 2a 20 45  nt-table.**.** E
134c0 61 63 68 20 52 45 46 45 52 45 4e 43 45 53 20 63  ach REFERENCES c
134d0 6c 61 75 73 65 20 67 65 6e 65 72 61 74 65 73 20  lause generates 
134e0 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
134f0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
13500 75 63 74 75 72 65 0a 2a 2a 20 77 68 69 63 68 20  ucture.** which 
13510 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  is attached to t
13520 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 2e 20 20  he from-table.  
13530 54 68 65 20 74 6f 2d 74 61 62 6c 65 20 6e 65 65  The to-table nee
13540 64 20 6e 6f 74 20 65 78 69 73 74 20 77 68 65 6e  d not exist when
13550 0a 2a 2a 20 74 68 65 20 66 72 6f 6d 2d 74 61 62  .** the from-tab
13560 6c 65 20 69 73 20 63 72 65 61 74 65 64 2e 20 20  le is created.  
13570 54 68 65 20 65 78 69 73 74 65 6e 63 65 20 6f 66  The existence of
13580 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73   the to-table is
13590 20 6e 6f 74 20 63 68 65 63 6b 65 64 2e 0a 2a 2a   not checked..**
135a0 0a 2a 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20  .** The list of 
135b0 61 6c 6c 20 70 61 72 65 6e 74 73 20 66 6f 72 20  all parents for 
135c0 63 68 69 6c 64 20 54 61 62 6c 65 20 58 20 69 73  child Table X is
135d0 20 68 65 6c 64 20 61 74 20 58 2e 70 46 4b 65 79   held at X.pFKey
135e0 2e 0a 2a 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f  ..**.** A list o
135f0 66 20 61 6c 6c 20 63 68 69 6c 64 72 65 6e 20 66  f all children f
13600 6f 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 64  or a table named
13610 20 5a 20 28 77 68 69 63 68 20 6d 69 67 68 74 20   Z (which might 
13620 6e 6f 74 20 65 76 65 6e 20 65 78 69 73 74 29 0a  not even exist).
13630 2a 2a 20 69 73 20 68 65 6c 64 20 69 6e 20 53 63  ** is held in Sc
13640 68 65 6d 61 2e 66 6b 65 79 48 61 73 68 20 77 69  hema.fkeyHash wi
13650 74 68 20 61 20 68 61 73 68 20 6b 65 79 20 6f 66  th a hash key of
13660 20 5a 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 4b   Z..*/.struct FK
13670 65 79 20 7b 0a 20 20 54 61 62 6c 65 20 2a 70 46  ey {.  Table *pF
13680 72 6f 6d 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c  rom;     /* Tabl
13690 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  e containing the
136a0 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
136b0 73 65 20 28 61 6b 61 3a 20 43 68 69 6c 64 29 20  se (aka: Child) 
136c0 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74  */.  FKey *pNext
136d0 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74 20 46  From;  /* Next F
136e0 4b 65 79 20 77 69 74 68 20 74 68 65 20 73 61 6d  Key with the sam
136f0 65 20 69 6e 20 70 46 72 6f 6d 2e 20 4e 65 78 74  e in pFrom. Next
13700 20 70 61 72 65 6e 74 20 6f 66 20 70 46 72 6f 6d   parent of pFrom
13710 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 6f 3b   */.  char *zTo;
13720 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
13730 6f 66 20 74 61 62 6c 65 20 74 68 61 74 20 74 68  of table that th
13740 65 20 6b 65 79 20 70 6f 69 6e 74 73 20 74 6f 20  e key points to 
13750 28 61 6b 61 3a 20 50 61 72 65 6e 74 29 20 2a 2f  (aka: Parent) */
13760 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 54 6f  .  FKey *pNextTo
13770 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74  ;    /* Next wit
13780 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 2e 20  h the same zTo. 
13790 4e 65 78 74 20 63 68 69 6c 64 20 6f 66 20 7a 54  Next child of zT
137a0 6f 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 50  o. */.  FKey *pP
137b0 72 65 76 54 6f 3b 20 20 20 20 2f 2a 20 50 72 65  revTo;    /* Pre
137c0 76 69 6f 75 73 20 77 69 74 68 20 74 68 65 20 73  vious with the s
137d0 61 6d 65 20 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74  ame zTo */.  int
137e0 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f   nCol;         /
137f0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
13800 6d 6e 73 20 69 6e 20 74 68 69 73 20 6b 65 79 20  mns in this key 
13810 2a 2f 0a 20 20 2f 2a 20 45 56 3a 20 52 2d 33 30  */.  /* EV: R-30
13820 33 32 33 2d 32 31 39 31 37 20 2a 2f 0a 20 20 75  323-21917 */.  u
13830 38 20 69 73 44 65 66 65 72 72 65 64 3b 20 20 20  8 isDeferred;   
13840 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63      /* True if c
13850 6f 6e 73 74 72 61 69 6e 74 20 63 68 65 63 6b 69  onstraint checki
13860 6e 67 20 69 73 20 64 65 66 65 72 72 65 64 20 74  ng is deferred t
13870 69 6c 6c 20 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20  ill COMMIT */.  
13880 75 38 20 61 41 63 74 69 6f 6e 5b 32 5d 3b 20 20  u8 aAction[2];  
13890 20 20 20 20 20 20 2f 2a 20 4f 4e 20 44 45 4c 45        /* ON DELE
138a0 54 45 20 61 6e 64 20 4f 4e 20 55 50 44 41 54 45  TE and ON UPDATE
138b0 20 61 63 74 69 6f 6e 73 2c 20 72 65 73 70 65 63   actions, respec
138c0 74 69 76 65 6c 79 20 2a 2f 0a 20 20 54 72 69 67  tively */.  Trig
138d0 67 65 72 20 2a 61 70 54 72 69 67 67 65 72 5b 32  ger *apTrigger[2
138e0 5d 3b 2f 2a 20 54 72 69 67 67 65 72 73 20 66 6f  ];/* Triggers fo
138f0 72 20 61 41 63 74 69 6f 6e 5b 5d 20 61 63 74 69  r aAction[] acti
13900 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  ons */.  struct 
13910 73 43 6f 6c 4d 61 70 20 7b 20 20 20 20 20 20 2f  sColMap {      /
13920 2a 20 4d 61 70 70 69 6e 67 20 6f 66 20 63 6f 6c  * Mapping of col
13930 75 6d 6e 73 20 69 6e 20 70 46 72 6f 6d 20 74 6f  umns in pFrom to
13940 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 7a 54 6f 20   columns in zTo 
13950 2a 2f 0a 20 20 20 20 69 6e 74 20 69 46 72 6f 6d  */.    int iFrom
13960 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
13970 49 6e 64 65 78 20 6f 66 20 63 6f 6c 75 6d 6e 20  Index of column 
13980 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 20 20  in pFrom */.    
13990 63 68 61 72 20 2a 7a 43 6f 6c 3b 20 20 20 20 20  char *zCol;     
139a0 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
139b0 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20   column in zTo. 
139c0 20 49 66 20 4e 55 4c 4c 20 75 73 65 20 50 52 49   If NULL use PRI
139d0 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 7d 20  MARY KEY */.  } 
139e0 61 43 6f 6c 5b 31 5d 3b 20 20 20 20 20 20 20 20  aCol[1];        
139f0 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79      /* One entry
13a00 20 66 6f 72 20 65 61 63 68 20 6f 66 20 6e 43 6f   for each of nCo
13a10 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a  l columns */.};.
13a20 0a 2f 2a 0a 2a 2a 20 53 51 4c 69 74 65 20 73 75  ./*.** SQLite su
13a30 70 70 6f 72 74 73 20 6d 61 6e 79 20 64 69 66 66  pports many diff
13a40 65 72 65 6e 74 20 77 61 79 73 20 74 6f 20 72 65  erent ways to re
13a50 73 6f 6c 76 65 20 61 20 63 6f 6e 73 74 72 61 69  solve a constrai
13a60 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e 20 20 52 4f  nt.** error.  RO
13a70 4c 4c 42 41 43 4b 20 70 72 6f 63 65 73 73 69 6e  LLBACK processin
13a80 67 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 63  g means that a c
13a90 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
13aa0 69 6f 6e 0a 2a 2a 20 63 61 75 73 65 73 20 74 68  ion.** causes th
13ab0 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70  e operation in p
13ac0 72 6f 63 65 73 73 20 74 6f 20 66 61 69 6c 20 61  rocess to fail a
13ad0 6e 64 20 66 6f 72 20 74 68 65 20 63 75 72 72 65  nd for the curre
13ae0 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a  nt transaction.*
13af0 2a 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62  * to be rolled b
13b00 61 63 6b 2e 20 20 41 42 4f 52 54 20 70 72 6f 63  ack.  ABORT proc
13b10 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 65  essing means the
13b20 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72   operation in pr
13b30 6f 63 65 73 73 0a 2a 2a 20 66 61 69 6c 73 20 61  ocess.** fails a
13b40 6e 64 20 61 6e 79 20 70 72 69 6f 72 20 63 68 61  nd any prior cha
13b50 6e 67 65 73 20 66 72 6f 6d 20 74 68 61 74 20 6f  nges from that o
13b60 6e 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65  ne operation are
13b70 20 62 61 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20   backed out,.** 
13b80 62 75 74 20 74 68 65 20 74 72 61 6e 73 61 63 74  but the transact
13b90 69 6f 6e 20 69 73 20 6e 6f 74 20 72 6f 6c 6c 65  ion is not rolle
13ba0 64 20 62 61 63 6b 2e 20 20 46 41 49 4c 20 70 72  d back.  FAIL pr
13bb0 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74  ocessing means t
13bc0 68 61 74 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61  hat.** the opera
13bd0 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73  tion in progress
13be0 20 73 74 6f 70 73 20 61 6e 64 20 72 65 74 75 72   stops and retur
13bf0 6e 73 20 61 6e 20 65 72 72 6f 72 20 63 6f 64 65  ns an error code
13c00 2e 20 20 42 75 74 20 70 72 69 6f 72 0a 2a 2a 20  .  But prior.** 
13c10 63 68 61 6e 67 65 73 20 64 75 65 20 74 6f 20 74  changes due to t
13c20 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f  he same operatio
13c30 6e 20 61 72 65 20 6e 6f 74 20 62 61 63 6b 65 64  n are not backed
13c40 20 6f 75 74 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c   out and no roll
13c50 62 61 63 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e 20  back.** occurs. 
13c60 20 49 47 4e 4f 52 45 20 6d 65 61 6e 73 20 74 68   IGNORE means th
13c70 61 74 20 74 68 65 20 70 61 72 74 69 63 75 6c 61  at the particula
13c80 72 20 72 6f 77 20 74 68 61 74 20 63 61 75 73 65  r row that cause
13c90 64 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74  d the constraint
13ca0 0a 2a 2a 20 65 72 72 6f 72 20 69 73 20 6e 6f 74  .** error is not
13cb0 20 69 6e 73 65 72 74 65 64 20 6f 72 20 75 70 64   inserted or upd
13cc0 61 74 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e  ated.  Processin
13cd0 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20  g continues and 
13ce0 6e 6f 20 65 72 72 6f 72 0a 2a 2a 20 69 73 20 72  no error.** is r
13cf0 65 74 75 72 6e 65 64 2e 20 20 52 45 50 4c 41 43  eturned.  REPLAC
13d00 45 20 6d 65 61 6e 73 20 74 68 61 74 20 70 72 65  E means that pre
13d10 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73  existing databas
13d20 65 20 72 6f 77 73 20 74 68 61 74 20 63 61 75 73  e rows that caus
13d30 65 64 0a 2a 2a 20 61 20 55 4e 49 51 55 45 20 63  ed.** a UNIQUE c
13d40 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
13d50 69 6f 6e 20 61 72 65 20 72 65 6d 6f 76 65 64 20  ion are removed 
13d60 73 6f 20 74 68 61 74 20 74 68 65 20 6e 65 77 20  so that the new 
13d70 69 6e 73 65 72 74 20 6f 72 0a 2a 2a 20 75 70 64  insert or.** upd
13d80 61 74 65 20 63 61 6e 20 70 72 6f 63 65 65 64 2e  ate can proceed.
13d90 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e    Processing con
13da0 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72  tinues and no er
13db0 72 6f 72 20 69 73 20 72 65 70 6f 72 74 65 64 2e  ror is reported.
13dc0 0a 2a 2a 0a 2a 2a 20 52 45 53 54 52 49 43 54 2c  .**.** RESTRICT,
13dd0 20 53 45 54 4e 55 4c 4c 2c 20 61 6e 64 20 43 41   SETNULL, and CA
13de0 53 43 41 44 45 20 61 63 74 69 6f 6e 73 20 61 70  SCADE actions ap
13df0 70 6c 79 20 6f 6e 6c 79 20 74 6f 20 66 6f 72 65  ply only to fore
13e00 69 67 6e 20 6b 65 79 73 2e 0a 2a 2a 20 52 45 53  ign keys..** RES
13e10 54 52 49 43 54 20 69 73 20 74 68 65 20 73 61 6d  TRICT is the sam
13e20 65 20 61 73 20 41 42 4f 52 54 20 66 6f 72 20 49  e as ABORT for I
13e30 4d 4d 45 44 49 41 54 45 20 66 6f 72 65 69 67 6e  MMEDIATE foreign
13e40 20 6b 65 79 73 20 61 6e 64 20 74 68 65 0a 2a 2a   keys and the.**
13e50 20 73 61 6d 65 20 61 73 20 52 4f 4c 4c 42 41 43   same as ROLLBAC
13e60 4b 20 66 6f 72 20 44 45 46 45 52 52 45 44 20 6b  K for DEFERRED k
13e70 65 79 73 2e 20 20 53 45 54 4e 55 4c 4c 20 6d 65  eys.  SETNULL me
13e80 61 6e 73 20 74 68 61 74 20 74 68 65 20 66 6f 72  ans that the for
13e90 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 69 73 20 73  eign.** key is s
13ea0 65 74 20 74 6f 20 4e 55 4c 4c 2e 20 20 43 41 53  et to NULL.  CAS
13eb0 43 41 44 45 20 6d 65 61 6e 73 20 74 68 61 74 20  CADE means that 
13ec0 61 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41  a DELETE or UPDA
13ed0 54 45 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 66  TE of the.** ref
13ee0 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20 72 6f  erenced table ro
13ef0 77 20 69 73 20 70 72 6f 70 61 67 61 74 65 64 20  w is propagated 
13f00 69 6e 74 6f 20 74 68 65 20 72 6f 77 20 74 68 61  into the row tha
13f10 74 20 68 6f 6c 64 73 20 74 68 65 0a 2a 2a 20 66  t holds the.** f
13f20 6f 72 65 69 67 6e 20 6b 65 79 2e 0a 2a 2a 0a 2a  oreign key..**.*
13f30 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
13f40 73 79 6d 62 6f 6c 69 63 20 76 61 6c 75 65 73 20  symbolic values 
13f50 61 72 65 20 75 73 65 64 20 74 6f 20 72 65 63 6f  are used to reco
13f60 72 64 20 77 68 69 63 68 20 74 79 70 65 0a 2a 2a  rd which type.**
13f70 20 6f 66 20 61 63 74 69 6f 6e 20 74 6f 20 74 61   of action to ta
13f80 6b 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ke..*/.#define O
13f90 45 5f 4e 6f 6e 65 20 20 20 20 20 30 20 20 20 2f  E_None     0   /
13fa0 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 63 6f  * There is no co
13fb0 6e 73 74 72 61 69 6e 74 20 74 6f 20 63 68 65 63  nstraint to chec
13fc0 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  k */.#define OE_
13fd0 52 6f 6c 6c 62 61 63 6b 20 31 20 20 20 2f 2a 20  Rollback 1   /* 
13fe0 46 61 69 6c 20 74 68 65 20 6f 70 65 72 61 74 69  Fail the operati
13ff0 6f 6e 20 61 6e 64 20 72 6f 6c 6c 62 61 63 6b 20  on and rollback 
14000 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
14010 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 41 62  */.#define OE_Ab
14020 6f 72 74 20 20 20 20 32 20 20 20 2f 2a 20 42 61  ort    2   /* Ba
14030 63 6b 20 6f 75 74 20 63 68 61 6e 67 65 73 20 62  ck out changes b
14040 75 74 20 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63  ut do no rollbac
14050 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f  k transaction */
14060 0a 23 64 65 66 69 6e 65 20 4f 45 5f 46 61 69 6c  .#define OE_Fail
14070 20 20 20 20 20 33 20 20 20 2f 2a 20 53 74 6f 70       3   /* Stop
14080 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 62   the operation b
14090 75 74 20 6c 65 61 76 65 20 61 6c 6c 20 70 72 69  ut leave all pri
140a0 6f 72 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64  or changes */.#d
140b0 65 66 69 6e 65 20 4f 45 5f 49 67 6e 6f 72 65 20  efine OE_Ignore 
140c0 20 20 34 20 20 20 2f 2a 20 49 67 6e 6f 72 65 20    4   /* Ignore 
140d0 74 68 65 20 65 72 72 6f 72 2e 20 44 6f 20 6e 6f  the error. Do no
140e0 74 20 64 6f 20 74 68 65 20 49 4e 53 45 52 54 20  t do the INSERT 
140f0 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65  or UPDATE */.#de
14100 66 69 6e 65 20 4f 45 5f 52 65 70 6c 61 63 65 20  fine OE_Replace 
14110 20 35 20 20 20 2f 2a 20 44 65 6c 65 74 65 20 65   5   /* Delete e
14120 78 69 73 74 69 6e 67 20 72 65 63 6f 72 64 2c 20  xisting record, 
14130 74 68 65 6e 20 64 6f 20 49 4e 53 45 52 54 20 6f  then do INSERT o
14140 72 20 55 50 44 41 54 45 20 2a 2f 0a 0a 23 64 65  r UPDATE */..#de
14150 66 69 6e 65 20 4f 45 5f 52 65 73 74 72 69 63 74  fine OE_Restrict
14160 20 36 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74   6   /* OE_Abort
14170 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 2c 20   for IMMEDIATE, 
14180 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f 72 20  OE_Rollback for 
14190 44 45 46 45 52 52 45 44 20 2a 2f 0a 23 64 65 66  DEFERRED */.#def
141a0 69 6e 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 20 20  ine OE_SetNull  
141b0 37 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66  7   /* Set the f
141c0 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65  oreign key value
141d0 20 74 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66   to NULL */.#def
141e0 69 6e 65 20 4f 45 5f 53 65 74 44 66 6c 74 20 20  ine OE_SetDflt  
141f0 38 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20 66  8   /* Set the f
14200 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c 75 65  oreign key value
14210 20 74 6f 20 69 74 73 20 64 65 66 61 75 6c 74 20   to its default 
14220 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 43 61  */.#define OE_Ca
14230 73 63 61 64 65 20 20 39 20 20 20 2f 2a 20 43 61  scade  9   /* Ca
14240 73 63 61 64 65 20 74 68 65 20 63 68 61 6e 67 65  scade the change
14250 73 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45  s */..#define OE
14260 5f 44 65 66 61 75 6c 74 20 20 31 30 20 20 2f 2a  _Default  10  /*
14270 20 44 6f 20 77 68 61 74 65 76 65 72 20 74 68 65   Do whatever the
14280 20 64 65 66 61 75 6c 74 20 61 63 74 69 6f 6e 20   default action 
14290 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e  is */.../*.** An
142a0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
142b0 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
142c0 74 75 72 65 20 69 73 20 70 61 73 73 65 64 20 61  ture is passed a
142d0 73 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61  s the first.** a
142e0 72 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74  rgument to sqlit
142f0 65 33 56 64 62 65 4b 65 79 43 6f 6d 70 61 72 65  e3VdbeKeyCompare
14300 20 61 6e 64 20 69 73 20 75 73 65 64 20 74 6f 20   and is used to 
14310 63 6f 6e 74 72 6f 6c 20 74 68 65 0a 2a 2a 20 63  control the.** c
14320 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20 74 68 65  omparison of the
14330 20 74 77 6f 20 69 6e 64 65 78 20 6b 65 79 73 2e   two index keys.
14340 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74  .**.** Note that
14350 20 61 53 6f 72 74 4f 72 64 65 72 5b 5d 20 61 6e   aSortOrder[] an
14360 64 20 61 43 6f 6c 6c 5b 5d 20 68 61 76 65 20 6e  d aColl[] have n
14370 46 69 65 6c 64 2b 31 20 73 6c 6f 74 73 2e 20 20  Field+1 slots.  
14380 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 6e 46 69  There.** are nFi
14390 65 6c 64 20 73 6c 6f 74 73 20 66 6f 72 20 74 68  eld slots for th
143a0 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61 6e 20  e columns of an 
143b0 69 6e 64 65 78 20 74 68 65 6e 20 6f 6e 65 20 65  index then one e
143c0 78 74 72 61 20 73 6c 6f 74 0a 2a 2a 20 66 6f 72  xtra slot.** for
143d0 20 74 68 65 20 72 6f 77 69 64 20 61 74 20 74 68   the rowid at th
143e0 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  e end..*/.struct
143f0 20 4b 65 79 49 6e 66 6f 20 7b 0a 20 20 75 33 32   KeyInfo {.  u32
14400 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20   nRef;          
14410 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65   /* Number of re
14420 66 65 72 65 6e 63 65 73 20 74 6f 20 74 68 69 73  ferences to this
14430 20 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20   KeyInfo object 
14440 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20  */.  u8 enc;    
14450 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74           /* Text
14460 20 65 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e 65 20   encoding - one 
14470 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f 55 54  of the SQLITE_UT
14480 46 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75  F* values */.  u
14490 31 36 20 6e 4b 65 79 46 69 65 6c 64 3b 20 20 20  16 nKeyField;   
144a0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
144b0 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74  key columns in t
144c0 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 31  he index */.  u1
144d0 36 20 6e 41 6c 6c 46 69 65 6c 64 3b 20 20 20 20  6 nAllField;    
144e0 20 20 2f 2a 20 54 6f 74 61 6c 20 63 6f 6c 75 6d    /* Total colum
144f0 6e 73 2c 20 69 6e 63 6c 75 64 69 6e 67 20 6b 65  ns, including ke
14500 79 20 70 6c 75 73 20 6f 74 68 65 72 73 20 2a 2f  y plus others */
14510 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
14520 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61         /* The da
14530 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
14540 6e 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74  n */.  u8 *aSort
14550 4f 72 64 65 72 3b 20 20 20 20 20 2f 2a 20 53 6f  Order;     /* So
14560 72 74 20 6f 72 64 65 72 20 66 6f 72 20 65 61 63  rt order for eac
14570 68 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 43  h column. */.  C
14580 6f 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d  ollSeq *aColl[1]
14590 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20  ;  /* Collating 
145a0 73 65 71 75 65 6e 63 65 20 66 6f 72 20 65 61 63  sequence for eac
145b0 68 20 74 65 72 6d 20 6f 66 20 74 68 65 20 6b 65  h term of the ke
145c0 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  y */.};../*.** T
145d0 68 69 73 20 6f 62 6a 65 63 74 20 68 6f 6c 64 73  his object holds
145e0 20 61 20 72 65 63 6f 72 64 20 77 68 69 63 68 20   a record which 
145f0 68 61 73 20 62 65 65 6e 20 70 61 72 73 65 64 20  has been parsed 
14600 6f 75 74 20 69 6e 74 6f 20 69 6e 64 69 76 69 64  out into individ
14610 75 61 6c 0a 2a 2a 20 66 69 65 6c 64 73 2c 20 66  ual.** fields, f
14620 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20  or the purposes 
14630 6f 66 20 64 6f 69 6e 67 20 61 20 63 6f 6d 70 61  of doing a compa
14640 72 69 73 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 20 72  rison..**.** A r
14650 65 63 6f 72 64 20 69 73 20 61 6e 20 6f 62 6a 65  ecord is an obje
14660 63 74 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  ct that contains
14670 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66 69 65   one or more fie
14680 6c 64 73 20 6f 66 20 64 61 74 61 2e 0a 2a 2a 20  lds of data..** 
14690 52 65 63 6f 72 64 73 20 61 72 65 20 75 73 65 64  Records are used
146a0 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 63 6f   to store the co
146b0 6e 74 65 6e 74 20 6f 66 20 61 20 74 61 62 6c 65  ntent of a table
146c0 20 72 6f 77 20 61 6e 64 20 74 6f 20 73 74 6f 72   row and to stor
146d0 65 0a 2a 2a 20 74 68 65 20 6b 65 79 20 6f 66 20  e.** the key of 
146e0 61 6e 20 69 6e 64 65 78 2e 20 20 41 20 62 6c 6f  an index.  A blo
146f0 62 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20  b encoding of a 
14700 72 65 63 6f 72 64 20 69 73 20 63 72 65 61 74 65  record is create
14710 64 20 62 79 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d  d by.** the OP_M
14720 61 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65  akeRecord opcode
14730 20 6f 66 20 74 68 65 20 56 44 42 45 20 61 6e 64   of the VDBE and
14740 20 69 73 20 64 69 73 61 73 73 65 6d 62 6c 65 64   is disassembled
14750 20 62 79 20 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f   by the.** OP_Co
14760 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a  lumn opcode..**.
14770 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
14780 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20 73 65  f this object se
14790 72 76 65 73 20 61 73 20 61 20 22 6b 65 79 22 20  rves as a "key" 
147a0 66 6f 72 20 64 6f 69 6e 67 20 61 20 73 65 61 72  for doing a sear
147b0 63 68 20 6f 6e 0a 2a 2a 20 61 6e 20 69 6e 64 65  ch on.** an inde
147c0 78 20 62 2b 74 72 65 65 2e 20 54 68 65 20 67 6f  x b+tree. The go
147d0 61 6c 20 6f 66 20 74 68 65 20 73 65 61 72 63 68  al of the search
147e0 20 69 73 20 74 6f 20 66 69 6e 64 20 74 68 65 20   is to find the 
147f0 65 6e 74 72 79 20 74 68 61 74 0a 2a 2a 20 69 73  entry that.** is
14800 20 63 6c 6f 73 65 64 20 74 6f 20 74 68 65 20 6b   closed to the k
14810 65 79 20 64 65 73 63 72 69 62 65 64 20 62 79 20  ey described by 
14820 74 68 69 73 20 6f 62 6a 65 63 74 2e 20 20 54 68  this object.  Th
14830 69 73 20 6f 62 6a 65 63 74 20 6d 69 67 68 74 20  is object might 
14840 68 6f 6c 64 0a 2a 2a 20 6a 75 73 74 20 61 20 70  hold.** just a p
14850 72 65 66 69 78 20 6f 66 20 74 68 65 20 6b 65 79  refix of the key
14860 2e 20 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  .  The number of
14870 20 66 69 65 6c 64 73 20 69 73 20 67 69 76 65 6e   fields is given
14880 20 62 79 0a 2a 2a 20 70 4b 65 79 49 6e 66 6f 2d   by.** pKeyInfo-
14890 3e 6e 46 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54  >nField..**.** T
148a0 68 65 20 72 31 20 61 6e 64 20 72 32 20 66 69 65  he r1 and r2 fie
148b0 6c 64 73 20 61 72 65 20 74 68 65 20 76 61 6c 75  lds are the valu
148c0 65 73 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20  es to return if 
148d0 74 68 69 73 20 6b 65 79 20 69 73 20 6c 65 73 73  this key is less
148e0 20 74 68 61 6e 0a 2a 2a 20 6f 72 20 67 72 65 61   than.** or grea
148f0 74 65 72 20 74 68 61 6e 20 61 20 6b 65 79 20 69  ter than a key i
14900 6e 20 74 68 65 20 62 74 72 65 65 2c 20 72 65 73  n the btree, res
14910 70 65 63 74 69 76 65 6c 79 2e 20 20 54 68 65 73  pectively.  Thes
14920 65 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 0a 2a  e are normally.*
14930 2a 20 2d 31 20 61 6e 64 20 2b 31 20 72 65 73 70  * -1 and +1 resp
14940 65 63 74 69 76 65 6c 79 2c 20 62 75 74 20 6d 69  ectively, but mi
14950 67 68 74 20 62 65 20 69 6e 76 65 72 74 65 64 20  ght be inverted 
14960 74 6f 20 2b 31 20 61 6e 64 20 2d 31 20 69 66 20  to +1 and -1 if 
14970 74 68 65 20 62 2d 74 72 65 65 0a 2a 2a 20 69 73  the b-tree.** is
14980 20 69 6e 20 44 45 53 43 20 6f 72 64 65 72 2e 0a   in DESC order..
14990 2a 2a 0a 2a 2a 20 54 68 65 20 6b 65 79 20 63 6f  **.** The key co
149a0 6d 70 61 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f  mparison functio
149b0 6e 73 20 61 63 74 75 61 6c 6c 79 20 72 65 74 75  ns actually retu
149c0 72 6e 20 64 65 66 61 75 6c 74 5f 72 63 20 77 68  rn default_rc wh
149d0 65 6e 20 74 68 65 79 20 66 69 6e 64 0a 2a 2a 20  en they find.** 
149e0 61 6e 20 65 71 75 61 6c 73 20 63 6f 6d 70 61 72  an equals compar
149f0 69 73 6f 6e 2e 20 20 64 65 66 61 75 6c 74 5f 72  ison.  default_r
14a00 63 20 63 61 6e 20 62 65 20 2d 31 2c 20 30 2c 20  c can be -1, 0, 
14a10 6f 72 20 2b 31 2e 20 20 49 66 20 74 68 65 72 65  or +1.  If there
14a20 20 61 72 65 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65   are.** multiple
14a30 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68 65 20   entries in the 
14a40 62 2d 74 72 65 65 20 77 69 74 68 20 74 68 65 20  b-tree with the 
14a50 73 61 6d 65 20 6b 65 79 20 28 77 68 65 6e 20 6f  same key (when o
14a60 6e 6c 79 20 6c 6f 6f 6b 69 6e 67 0a 2a 2a 20 61  nly looking.** a
14a70 74 20 74 68 65 20 66 69 72 73 74 20 70 4b 65 79  t the first pKey
14a80 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 73 2c 29 20  Info->nFields,) 
14a90 74 68 65 6e 20 64 65 66 61 75 6c 74 5f 72 63 20  then default_rc 
14aa0 63 61 6e 20 62 65 20 73 65 74 20 74 6f 20 2d 31  can be set to -1
14ab0 20 74 6f 0a 2a 2a 20 63 61 75 73 65 20 74 68 65   to.** cause the
14ac0 20 73 65 61 72 63 68 20 74 6f 20 66 69 6e 64 20   search to find 
14ad0 74 68 65 20 6c 61 73 74 20 6d 61 74 63 68 2c 20  the last match, 
14ae0 6f 72 20 2b 31 20 74 6f 20 63 61 75 73 65 20 74  or +1 to cause t
14af0 68 65 20 73 65 61 72 63 68 20 74 6f 0a 2a 2a 20  he search to.** 
14b00 66 69 6e 64 20 74 68 65 20 66 69 72 73 74 20 6d  find the first m
14b10 61 74 63 68 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  atch..**.** The 
14b20 6b 65 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66  key comparison f
14b30 75 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20 73 65  unctions will se
14b40 74 20 65 71 53 65 65 6e 20 74 6f 20 74 72 75 65  t eqSeen to true
14b50 20 69 66 20 74 68 65 79 20 65 76 65 72 0a 2a 2a   if they ever.**
14b60 20 67 65 74 20 61 6e 64 20 65 71 75 61 6c 20 72   get and equal r
14b70 65 73 75 6c 74 73 20 77 68 65 6e 20 63 6f 6d 70  esults when comp
14b80 61 72 69 6e 67 20 74 68 69 73 20 73 74 72 75 63  aring this struc
14b90 74 75 72 65 20 74 6f 20 61 20 62 2d 74 72 65 65  ture to a b-tree
14ba0 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 57 68 65 6e   record..** When
14bb0 20 64 65 66 61 75 6c 74 5f 72 63 21 3d 30 2c 20   default_rc!=0, 
14bc0 74 68 65 20 73 65 61 72 63 68 20 6d 69 67 68 74  the search might
14bd0 20 65 6e 64 20 75 70 20 6f 6e 20 74 68 65 20 72   end up on the r
14be0 65 63 6f 72 64 20 69 6d 6d 65 64 69 61 74 65 6c  ecord immediatel
14bf0 79 0a 2a 2a 20 62 65 66 6f 72 65 20 74 68 65 20  y.** before the 
14c00 66 69 72 73 74 20 6d 61 74 63 68 20 6f 72 20 69  first match or i
14c10 6d 6d 65 64 69 61 74 65 6c 79 20 61 66 74 65 72  mmediately after
14c20 20 74 68 65 20 6c 61 73 74 20 6d 61 74 63 68 2e   the last match.
14c30 20 20 54 68 65 0a 2a 2a 20 65 71 53 65 65 6e 20    The.** eqSeen 
14c40 66 69 65 6c 64 20 77 69 6c 6c 20 69 6e 64 69 63  field will indic
14c50 61 74 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ate whether or n
14c60 6f 74 20 61 6e 20 65 78 61 63 74 20 6d 61 74 63  ot an exact matc
14c70 68 20 65 78 69 73 74 73 20 69 6e 20 74 68 65 0a  h exists in the.
14c80 2a 2a 20 62 2d 74 72 65 65 2e 0a 2a 2f 0a 73 74  ** b-tree..*/.st
14c90 72 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63  ruct UnpackedRec
14ca0 6f 72 64 20 7b 0a 20 20 4b 65 79 49 6e 66 6f 20  ord {.  KeyInfo 
14cb0 2a 70 4b 65 79 49 6e 66 6f 3b 20 20 2f 2a 20 43  *pKeyInfo;  /* C
14cc0 6f 6c 6c 61 74 69 6f 6e 20 61 6e 64 20 73 6f 72  ollation and sor
14cd0 74 2d 6f 72 64 65 72 20 69 6e 66 6f 72 6d 61 74  t-order informat
14ce0 69 6f 6e 20 2a 2f 0a 20 20 4d 65 6d 20 2a 61 4d  ion */.  Mem *aM
14cf0 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  em;          /* 
14d00 56 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36 20  Values */.  u16 
14d10 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20  nField;         
14d20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74  /* Number of ent
14d30 72 69 65 73 20 69 6e 20 61 70 4d 65 6d 5b 5d 20  ries in apMem[] 
14d40 2a 2f 0a 20 20 69 38 20 64 65 66 61 75 6c 74 5f  */.  i8 default_
14d50 72 63 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70  rc;      /* Comp
14d60 61 72 69 73 6f 6e 20 72 65 73 75 6c 74 20 69 66  arison result if
14d70 20 6b 65 79 73 20 61 72 65 20 65 71 75 61 6c 20   keys are equal 
14d80 2a 2f 0a 20 20 75 38 20 65 72 72 43 6f 64 65 3b  */.  u8 errCode;
14d90 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6f           /* Erro
14da0 72 20 64 65 74 65 63 74 65 64 20 62 79 20 78 52  r detected by xR
14db0 65 63 6f 72 64 43 6f 6d 70 61 72 65 20 28 43 4f  ecordCompare (CO
14dc0 52 52 55 50 54 20 6f 72 20 4e 4f 4d 45 4d 29 20  RRUPT or NOMEM) 
14dd0 2a 2f 0a 20 20 69 38 20 72 31 3b 20 20 20 20 20  */.  i8 r1;     
14de0 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
14df0 65 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20 28  e to return if (
14e00 6c 68 73 20 3c 20 72 68 73 29 20 2a 2f 0a 20 20  lhs < rhs) */.  
14e10 69 38 20 72 32 3b 20 20 20 20 20 20 20 20 20 20  i8 r2;          
14e20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20      /* Value to 
14e30 72 65 74 75 72 6e 20 69 66 20 28 6c 68 73 20 3e  return if (lhs >
14e40 20 72 68 73 29 20 2a 2f 0a 20 20 75 38 20 65 71   rhs) */.  u8 eq
14e50 53 65 65 6e 3b 20 20 20 20 20 20 20 20 20 20 2f  Seen;          /
14e60 2a 20 54 72 75 65 20 69 66 20 61 6e 20 65 71 75  * True if an equ
14e70 61 6c 69 74 79 20 63 6f 6d 70 61 72 69 73 6f 6e  ality comparison
14e80 20 68 61 73 20 62 65 65 6e 20 73 65 65 6e 20 2a   has been seen *
14e90 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  /.};.../*.** Eac
14ea0 68 20 53 51 4c 20 69 6e 64 65 78 20 69 73 20 72  h SQL index is r
14eb0 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65  epresented in me
14ec0 6d 6f 72 79 20 62 79 20 61 6e 0a 2a 2a 20 69 6e  mory by an.** in
14ed0 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
14ee0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
14ef0 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c  e..**.** The col
14f00 75 6d 6e 73 20 6f 66 20 74 68 65 20 74 61 62 6c  umns of the tabl
14f10 65 20 74 68 61 74 20 61 72 65 20 74 6f 20 62 65  e that are to be
14f20 20 69 6e 64 65 78 65 64 20 61 72 65 20 64 65 73   indexed are des
14f30 63 72 69 62 65 64 0a 2a 2a 20 62 79 20 74 68 65  cribed.** by the
14f40 20 61 69 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c   aiColumn[] fiel
14f50 64 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  d of this struct
14f60 75 72 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c  ure.  For exampl
14f70 65 2c 20 73 75 70 70 6f 73 65 0a 2a 2a 20 77 65  e, suppose.** we
14f80 20 68 61 76 65 20 74 68 65 20 66 6f 6c 6c 6f 77   have the follow
14f90 69 6e 67 20 74 61 62 6c 65 20 61 6e 64 20 69 6e  ing table and in
14fa0 64 65 78 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43  dex:.**.**     C
14fb0 52 45 41 54 45 20 54 41 42 4c 45 20 45 78 31 28  REATE TABLE Ex1(
14fc0 63 31 20 69 6e 74 2c 20 63 32 20 69 6e 74 2c 20  c1 int, c2 int, 
14fd0 63 33 20 74 65 78 74 29 3b 0a 2a 2a 20 20 20 20  c3 text);.**    
14fe0 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 45 78   CREATE INDEX Ex
14ff0 32 20 4f 4e 20 45 78 31 28 63 33 2c 63 31 29 3b  2 ON Ex1(c3,c1);
15000 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 54 61  .**.** In the Ta
15010 62 6c 65 20 73 74 72 75 63 74 75 72 65 20 64 65  ble structure de
15020 73 63 72 69 62 69 6e 67 20 45 78 31 2c 20 6e 43  scribing Ex1, nC
15030 6f 6c 3d 3d 33 20 62 65 63 61 75 73 65 20 74 68  ol==3 because th
15040 65 72 65 20 61 72 65 0a 2a 2a 20 74 68 72 65 65  ere are.** three
15050 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
15060 74 61 62 6c 65 2e 20 20 49 6e 20 74 68 65 20 49  table.  In the I
15070 6e 64 65 78 20 73 74 72 75 63 74 75 72 65 20 64  ndex structure d
15080 65 73 63 72 69 62 69 6e 67 0a 2a 2a 20 45 78 32  escribing.** Ex2
15090 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e  , nColumn==2 sin
150a0 63 65 20 32 20 6f 66 20 74 68 65 20 33 20 63 6f  ce 2 of the 3 co
150b0 6c 75 6d 6e 73 20 6f 66 20 45 78 31 20 61 72 65  lumns of Ex1 are
150c0 20 69 6e 64 65 78 65 64 2e 0a 2a 2a 20 54 68 65   indexed..** The
150d0 20 76 61 6c 75 65 20 6f 66 20 61 69 43 6f 6c 75   value of aiColu
150e0 6d 6e 20 69 73 20 7b 32 2c 20 30 7d 2e 20 20 61  mn is {2, 0}.  a
150f0 69 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65  iColumn[0]==2 be
15100 63 61 75 73 65 20 74 68 65 0a 2a 2a 20 66 69 72  cause the.** fir
15110 73 74 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20  st column to be 
15120 69 6e 64 65 78 65 64 20 28 63 33 29 20 68 61 73  indexed (c3) has
15130 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 32 20 69   an index of 2 i
15140 6e 20 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a  n Ex1.aCol[]..**
15150 20 54 68 65 20 73 65 63 6f 6e 64 20 63 6f 6c 75   The second colu
15160 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64  mn to be indexed
15170 20 28 63 31 29 20 68 61 73 20 61 6e 20 69 6e 64   (c1) has an ind
15180 65 78 20 6f 66 20 30 20 69 6e 0a 2a 2a 20 45 78  ex of 0 in.** Ex
15190 31 2e 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63 65 20  1.aCol[], hence 
151a0 45 78 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31 5d 3d  Ex2.aiColumn[1]=
151b0 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 6e  =0..**.** The In
151c0 64 65 78 2e 6f 6e 45 72 72 6f 72 20 66 69 65 6c  dex.onError fiel
151d0 64 20 64 65 74 65 72 6d 69 6e 65 73 20 77 68 65  d determines whe
151e0 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20  ther or not the 
151f0 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 73 0a  indexed columns.
15200 2a 2a 20 6d 75 73 74 20 62 65 20 75 6e 69 71 75  ** must be uniqu
15210 65 20 61 6e 64 20 77 68 61 74 20 74 6f 20 64 6f  e and what to do
15220 20 69 66 20 74 68 65 79 20 61 72 65 20 6e 6f 74   if they are not
15230 2e 20 20 57 68 65 6e 20 49 6e 64 65 78 2e 6f 6e  .  When Index.on
15240 45 72 72 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a  Error=OE_None,.*
15250 2a 20 69 74 20 6d 65 61 6e 73 20 74 68 69 73 20  * it means this 
15260 69 73 20 6e 6f 74 20 61 20 75 6e 69 71 75 65 20  is not a unique 
15270 69 6e 64 65 78 2e 20 20 4f 74 68 65 72 77 69 73  index.  Otherwis
15280 65 20 69 74 20 69 73 20 61 20 75 6e 69 71 75 65  e it is a unique
15290 20 69 6e 64 65 78 0a 2a 2a 20 61 6e 64 20 74 68   index.** and th
152a0 65 20 76 61 6c 75 65 20 6f 66 20 49 6e 64 65 78  e value of Index
152b0 2e 6f 6e 45 72 72 6f 72 20 69 6e 64 69 63 61 74  .onError indicat
152c0 65 20 74 68 65 20 77 68 69 63 68 20 63 6f 6e 66  e the which conf
152d0 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e 0a  lict resolution.
152e0 2a 2a 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20  ** algorithm to 
152f0 65 6d 70 6c 6f 79 20 77 68 65 6e 65 76 65 72 20  employ whenever 
15300 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61  an attempt is ma
15310 64 65 20 74 6f 20 69 6e 73 65 72 74 20 61 20 6e  de to insert a n
15320 6f 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20 65 6c 65  on-unique.** ele
15330 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 57 68 69 6c  ment..**.** Whil
15340 65 20 70 61 72 73 69 6e 67 20 61 20 43 52 45 41  e parsing a CREA
15350 54 45 20 54 41 42 4c 45 20 6f 72 20 43 52 45 41  TE TABLE or CREA
15360 54 45 20 49 4e 44 45 58 20 73 74 61 74 65 6d 65  TE INDEX stateme
15370 6e 74 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a  nt in order to.*
15380 2a 20 67 65 6e 65 72 61 74 65 20 56 44 42 45 20  * generate VDBE 
15390 63 6f 64 65 20 28 61 73 20 6f 70 70 6f 73 65 64  code (as opposed
153a0 20 74 6f 20 70 61 72 73 69 6e 67 20 6f 6e 65 20   to parsing one 
153b0 72 65 61 64 20 66 72 6f 6d 20 61 6e 20 73 71 6c  read from an sql
153c0 69 74 65 5f 6d 61 73 74 65 72 0a 2a 2a 20 74 61  ite_master.** ta
153d0 62 6c 65 20 61 73 20 70 61 72 74 20 6f 66 20 70  ble as part of p
153e0 61 72 73 69 6e 67 20 61 6e 20 65 78 69 73 74 69  arsing an existi
153f0 6e 67 20 64 61 74 61 62 61 73 65 20 73 63 68 65  ng database sche
15400 6d 61 29 2c 20 74 72 61 6e 73 69 65 6e 74 20 69  ma), transient i
15410 6e 73 74 61 6e 63 65 73 0a 2a 2a 20 6f 66 20 74  nstances.** of t
15420 68 69 73 20 73 74 72 75 63 74 75 72 65 20 6d 61  his structure ma
15430 79 20 62 65 20 63 72 65 61 74 65 64 2e 20 49 6e  y be created. In
15440 20 74 68 69 73 20 63 61 73 65 20 74 68 65 20 49   this case the I
15450 6e 64 65 78 2e 74 6e 75 6d 20 76 61 72 69 61 62  ndex.tnum variab
15460 6c 65 20 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f  le is.** used to
15470 20 73 74 6f 72 65 20 74 68 65 20 61 64 64 72 65   store the addre
15480 73 73 20 6f 66 20 61 20 56 44 42 45 20 69 6e 73  ss of a VDBE ins
15490 74 72 75 63 74 69 6f 6e 2c 20 6e 6f 74 20 61 20  truction, not a 
154a0 64 61 74 61 62 61 73 65 20 70 61 67 65 0a 2a 2a  database page.**
154b0 20 6e 75 6d 62 65 72 20 28 69 74 20 63 61 6e 6e   number (it cann
154c0 6f 74 20 2d 20 74 68 65 20 64 61 74 61 62 61 73  ot - the databas
154d0 65 20 70 61 67 65 20 69 73 20 6e 6f 74 20 61 6c  e page is not al
154e0 6c 6f 63 61 74 65 64 20 75 6e 74 69 6c 20 74 68  located until th
154f0 65 20 56 44 42 45 0a 2a 2a 20 70 72 6f 67 72 61  e VDBE.** progra
15500 6d 20 69 73 20 65 78 65 63 75 74 65 64 29 2e 20  m is executed). 
15510 53 65 65 20 63 6f 6e 76 65 72 74 54 6f 57 69 74  See convertToWit
15520 68 6f 75 74 52 6f 77 69 64 54 61 62 6c 65 28 29  houtRowidTable()
15530 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f   for details..*/
15540 0a 73 74 72 75 63 74 20 49 6e 64 65 78 20 7b 0a  .struct Index {.
15550 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
15560 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
15570 6d 65 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78  me of this index
15580 20 2a 2f 0a 20 20 69 31 36 20 2a 61 69 43 6f 6c   */.  i16 *aiCol
15590 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f  umn;           /
155a0 2a 20 57 68 69 63 68 20 63 6f 6c 75 6d 6e 73 20  * Which columns 
155b0 61 72 65 20 75 73 65 64 20 62 79 20 74 68 69 73  are used by this
155c0 20 69 6e 64 65 78 2e 20 20 31 73 74 20 69 73 20   index.  1st is 
155d0 30 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 2a 61  0 */.  LogEst *a
155e0 69 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20 20 20  iRowLogEst;     
155f0 2f 2a 20 46 72 6f 6d 20 41 4e 41 4c 59 5a 45 3a  /* From ANALYZE:
15600 20 45 73 74 2e 20 72 6f 77 73 20 73 65 6c 65 63   Est. rows selec
15610 74 65 64 20 62 79 20 65 61 63 68 20 63 6f 6c 75  ted by each colu
15620 6d 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  mn */.  Table *p
15630 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  Table;          
15640 20 2f 2a 20 54 68 65 20 53 51 4c 20 74 61 62 6c   /* The SQL tabl
15650 65 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64 20  e being indexed 
15660 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41  */.  char *zColA
15670 66 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ff;           /*
15680 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67   String defining
15690 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66   the affinity of
156a0 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   each column */.
156b0 20 20 49 6e 64 65 78 20 2a 70 4e 65 78 74 3b 20    Index *pNext; 
156c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
156d0 65 20 6e 65 78 74 20 69 6e 64 65 78 20 61 73 73  e next index ass
156e0 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
156f0 20 73 61 6d 65 20 74 61 62 6c 65 20 2a 2f 0a 20   same table */. 
15700 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
15710 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68  ;         /* Sch
15720 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ema containing t
15730 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75  his index */.  u
15740 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20  8 *aSortOrder;  
15750 20 20 20 20 20 20 20 20 2f 2a 20 66 6f 72 20 65          /* for e
15760 61 63 68 20 63 6f 6c 75 6d 6e 3a 20 54 72 75 65  ach column: True
15770 3d 3d 44 45 53 43 2c 20 46 61 6c 73 65 3d 3d 41  ==DESC, False==A
15780 53 43 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  SC */.  const ch
15790 61 72 20 2a 2a 61 7a 43 6f 6c 6c 3b 20 20 20 20  ar **azColl;    
157a0 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 63 6f 6c   /* Array of col
157b0 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
157c0 6e 61 6d 65 73 20 66 6f 72 20 69 6e 64 65 78 20  names for index 
157d0 2a 2f 0a 20 20 45 78 70 72 20 2a 70 50 61 72 74  */.  Expr *pPart
157e0 49 64 78 57 68 65 72 65 3b 20 20 20 20 20 2f 2a  IdxWhere;     /*
157f0 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f   WHERE clause fo
15800 72 20 70 61 72 74 69 61 6c 20 69 6e 64 69 63 65  r partial indice
15810 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  s */.  ExprList 
15820 2a 61 43 6f 6c 45 78 70 72 3b 20 20 20 20 20 20  *aColExpr;      
15830 2f 2a 20 43 6f 6c 75 6d 6e 20 65 78 70 72 65 73  /* Column expres
15840 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 74  sions */.  int t
15850 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  num;            
15860 20 20 20 20 2f 2a 20 44 42 20 50 61 67 65 20 63      /* DB Page c
15870 6f 6e 74 61 69 6e 69 6e 67 20 72 6f 6f 74 20 6f  ontaining root o
15880 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a  f this index */.
15890 20 20 4c 6f 67 45 73 74 20 73 7a 49 64 78 52 6f    LogEst szIdxRo
158a0 77 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 45 73  w;         /* Es
158b0 74 69 6d 61 74 65 64 20 61 76 65 72 61 67 65 20  timated average 
158c0 72 6f 77 20 73 69 7a 65 20 69 6e 20 62 79 74 65  row size in byte
158d0 73 20 2a 2f 0a 20 20 75 31 36 20 6e 4b 65 79 43  s */.  u16 nKeyC
158e0 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ol;             
158f0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
15900 75 6d 6e 73 20 66 6f 72 6d 69 6e 67 20 74 68 65  umns forming the
15910 20 6b 65 79 20 2a 2f 0a 20 20 75 31 36 20 6e 43   key */.  u16 nC
15920 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
15930 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
15940 63 6f 6c 75 6d 6e 73 20 73 74 6f 72 65 64 20 69  columns stored i
15950 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20  n the index */. 
15960 20 75 38 20 6f 6e 45 72 72 6f 72 3b 20 20 20 20   u8 onError;    
15970 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f            /* OE_
15980 41 62 6f 72 74 2c 20 4f 45 5f 49 67 6e 6f 72 65  Abort, OE_Ignore
15990 2c 20 4f 45 5f 52 65 70 6c 61 63 65 2c 20 6f 72  , OE_Replace, or
159a0 20 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a 20 20 75 6e   OE_None */.  un
159b0 73 69 67 6e 65 64 20 69 64 78 54 79 70 65 3a 32  signed idxType:2
159c0 3b 20 20 20 20 20 20 2f 2a 20 31 3d 3d 55 4e 49  ;      /* 1==UNI
159d0 51 55 45 2c 20 32 3d 3d 50 52 49 4d 41 52 59 20  QUE, 2==PRIMARY 
159e0 4b 45 59 2c 20 30 3d 3d 43 52 45 41 54 45 20 49  KEY, 0==CREATE I
159f0 4e 44 45 58 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  NDEX */.  unsign
15a00 65 64 20 62 55 6e 6f 72 64 65 72 65 64 3a 31 3b  ed bUnordered:1;
15a10 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20 69     /* Use this i
15a20 6e 64 65 78 20 66 6f 72 20 3d 3d 20 6f 72 20 49  ndex for == or I
15a30 4e 20 71 75 65 72 69 65 73 20 6f 6e 6c 79 20 2a  N queries only *
15a40 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 75 6e 69  /.  unsigned uni
15a50 71 4e 6f 74 4e 75 6c 6c 3a 31 3b 20 20 2f 2a 20  qNotNull:1;  /* 
15a60 54 72 75 65 20 69 66 20 55 4e 49 51 55 45 20 61  True if UNIQUE a
15a70 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20 66 6f 72 20  nd NOT NULL for 
15a80 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20  all columns */. 
15a90 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65 73 69   unsigned isResi
15aa0 7a 65 64 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75  zed:1;    /* Tru
15ab0 65 20 69 66 20 72 65 73 69 7a 65 49 6e 64 65 78  e if resizeIndex
15ac0 4f 62 6a 65 63 74 28 29 20 68 61 73 20 62 65 65  Object() has bee
15ad0 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 75 6e  n called */.  un
15ae0 73 69 67 6e 65 64 20 69 73 43 6f 76 65 72 69 6e  signed isCoverin
15af0 67 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 69  g:1;   /* True i
15b00 66 20 74 68 69 73 20 69 73 20 61 20 63 6f 76 65  f this is a cove
15b10 72 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20  ring index */.  
15b20 75 6e 73 69 67 6e 65 64 20 6e 6f 53 6b 69 70 53  unsigned noSkipS
15b30 63 61 6e 3a 31 3b 20 20 20 2f 2a 20 44 6f 20 6e  can:1;   /* Do n
15b40 6f 74 20 74 72 79 20 74 6f 20 75 73 65 20 73 6b  ot try to use sk
15b50 69 70 2d 73 63 61 6e 20 69 66 20 74 72 75 65 20  ip-scan if true 
15b60 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 68 61  */.  unsigned ha
15b70 73 53 74 61 74 31 3a 31 3b 20 20 20 20 20 2f 2a  sStat1:1;     /*
15b80 20 61 69 52 6f 77 4c 6f 67 45 73 74 20 76 61 6c   aiRowLogEst val
15b90 75 65 73 20 63 6f 6d 65 20 66 72 6f 6d 20 73 71  ues come from sq
15ba0 6c 69 74 65 5f 73 74 61 74 31 20 2a 2f 0a 23 69  lite_stat1 */.#i
15bb0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
15bc0 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
15bd0 34 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 3b  4.  int nSample;
15be0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
15bf0 4e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e  Number of elemen
15c00 74 73 20 69 6e 20 61 53 61 6d 70 6c 65 5b 5d 20  ts in aSample[] 
15c10 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65  */.  int nSample
15c20 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Col;          /*
15c30 20 53 69 7a 65 20 6f 66 20 49 6e 64 65 78 53 61   Size of IndexSa
15c40 6d 70 6c 65 2e 61 6e 45 71 5b 5d 20 61 6e 64 20  mple.anEq[] and 
15c50 73 6f 20 6f 6e 20 2a 2f 0a 20 20 74 52 6f 77 63  so on */.  tRowc
15c60 6e 74 20 2a 61 41 76 67 45 71 3b 20 20 20 20 20  nt *aAvgEq;     
15c70 20 20 20 20 2f 2a 20 41 76 65 72 61 67 65 20 6e      /* Average n
15c80 45 71 20 76 61 6c 75 65 73 20 66 6f 72 20 6b 65  Eq values for ke
15c90 79 73 20 6e 6f 74 20 69 6e 20 61 53 61 6d 70 6c  ys not in aSampl
15ca0 65 20 2a 2f 0a 20 20 49 6e 64 65 78 53 61 6d 70  e */.  IndexSamp
15cb0 6c 65 20 2a 61 53 61 6d 70 6c 65 3b 20 20 20 20  le *aSample;    
15cc0 2f 2a 20 53 61 6d 70 6c 65 73 20 6f 66 20 74 68  /* Samples of th
15cd0 65 20 6c 65 66 74 2d 6d 6f 73 74 20 6b 65 79 20  e left-most key 
15ce0 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 69  */.  tRowcnt *ai
15cf0 52 6f 77 45 73 74 3b 20 20 20 20 20 20 20 2f 2a  RowEst;       /*
15d00 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69 63   Non-logarithmic
15d10 20 73 74 61 74 31 20 64 61 74 61 20 66 6f 72 20   stat1 data for 
15d20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20  this index */.  
15d30 74 52 6f 77 63 6e 74 20 6e 52 6f 77 45 73 74 30  tRowcnt nRowEst0
15d40 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d  ;        /* Non-
15d50 6c 6f 67 61 72 69 74 68 6d 69 63 20 6e 75 6d 62  logarithmic numb
15d60 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68  er of rows in th
15d70 65 20 69 6e 64 65 78 20 2a 2f 0a 23 65 6e 64 69  e index */.#endi
15d80 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  f.};../*.** Allo
15d90 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 49  wed values for I
15da0 6e 64 65 78 2e 69 64 78 54 79 70 65 0a 2a 2f 0a  ndex.idxType.*/.
15db0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
15dc0 44 58 54 59 50 45 5f 41 50 50 44 45 46 20 20 20  DXTYPE_APPDEF   
15dd0 20 20 20 30 20 20 20 2f 2a 20 43 72 65 61 74 65     0   /* Create
15de0 64 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 49  d using CREATE I
15df0 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NDEX */.#define 
15e00 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 55  SQLITE_IDXTYPE_U
15e10 4e 49 51 55 45 20 20 20 20 20 20 31 20 20 20 2f  NIQUE      1   /
15e20 2a 20 49 6d 70 6c 65 6d 65 6e 74 73 20 61 20 55  * Implements a U
15e30 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74  NIQUE constraint
15e40 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
15e50 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d 41  TE_IDXTYPE_PRIMA
15e60 52 59 4b 45 59 20 20 32 20 20 20 2f 2a 20 49 73  RYKEY  2   /* Is
15e70 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
15e80 20 66 6f 72 20 74 68 65 20 74 61 62 6c 65 20 2a   for the table *
15e90 2f 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72 75  /../* Return tru
15ea0 65 20 69 66 20 69 6e 64 65 78 20 58 20 69 73 20  e if index X is 
15eb0 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 6e  a PRIMARY KEY in
15ec0 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  dex */.#define I
15ed0 73 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78  sPrimaryKeyIndex
15ee0 28 58 29 20 20 28 28 58 29 2d 3e 69 64 78 54 79  (X)  ((X)->idxTy
15ef0 70 65 3d 3d 53 51 4c 49 54 45 5f 49 44 58 54 59  pe==SQLITE_IDXTY
15f00 50 45 5f 50 52 49 4d 41 52 59 4b 45 59 29 0a 0a  PE_PRIMARYKEY)..
15f10 2f 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69  /* Return true i
15f20 66 20 69 6e 64 65 78 20 58 20 69 73 20 61 20 55  f index X is a U
15f30 4e 49 51 55 45 20 69 6e 64 65 78 20 2a 2f 0a 23  NIQUE index */.#
15f40 64 65 66 69 6e 65 20 49 73 55 6e 69 71 75 65 49  define IsUniqueI
15f50 6e 64 65 78 28 58 29 20 20 20 20 20 20 28 28 58  ndex(X)      ((X
15f60 29 2d 3e 6f 6e 45 72 72 6f 72 21 3d 4f 45 5f 4e  )->onError!=OE_N
15f70 6f 6e 65 29 0a 0a 2f 2a 20 54 68 65 20 49 6e 64  one)../* The Ind
15f80 65 78 2e 61 69 43 6f 6c 75 6d 6e 5b 5d 20 76 61  ex.aiColumn[] va
15f90 6c 75 65 73 20 61 72 65 20 6e 6f 72 6d 61 6c 6c  lues are normall
15fa0 79 20 70 6f 73 69 74 69 76 65 20 69 6e 74 65 67  y positive integ
15fb0 65 72 2e 20 20 42 75 74 0a 2a 2a 20 74 68 65 72  er.  But.** ther
15fc0 65 20 61 72 65 20 73 6f 6d 65 20 6e 65 67 61 74  e are some negat
15fd0 69 76 65 20 76 61 6c 75 65 73 20 74 68 61 74 20  ive values that 
15fe0 68 61 76 65 20 73 70 65 63 69 61 6c 20 6d 65 61  have special mea
15ff0 6e 69 6e 67 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65  ning:.*/.#define
16000 20 58 4e 5f 52 4f 57 49 44 20 20 20 20 20 28 2d   XN_ROWID     (-
16010 31 29 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 65  1)     /* Indexe
16020 64 20 63 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20  d column is the 
16030 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65  rowid */.#define
16040 20 58 4e 5f 45 58 50 52 20 20 20 20 20 20 28 2d   XN_EXPR      (-
16050 32 29 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 65  2)     /* Indexe
16060 64 20 63 6f 6c 75 6d 6e 20 69 73 20 61 6e 20 65  d column is an e
16070 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 0a 2f 2a  xpression */../*
16080 0a 2a 2a 20 45 61 63 68 20 73 61 6d 70 6c 65 20  .** Each sample 
16090 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71  stored in the sq
160a0 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65  lite_stat3 table
160b0 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20   is represented 
160c0 69 6e 20 6d 65 6d 6f 72 79 0a 2a 2a 20 75 73 69  in memory.** usi
160d0 6e 67 20 61 20 73 74 72 75 63 74 75 72 65 20 6f  ng a structure o
160e0 66 20 74 68 69 73 20 74 79 70 65 2e 20 20 53 65  f this type.  Se
160f0 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20  e documentation 
16100 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68  at the top of th
16110 65 0a 2a 2a 20 61 6e 61 6c 79 7a 65 2e 63 20 73  e.** analyze.c s
16120 6f 75 72 63 65 20 66 69 6c 65 20 66 6f 72 20 61  ource file for a
16130 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
16140 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ation..*/.struct
16150 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 7b 0a 20   IndexSample {. 
16160 20 76 6f 69 64 20 2a 70 3b 20 20 20 20 20 20 20   void *p;       
16170 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
16180 20 73 61 6d 70 6c 65 64 20 72 65 63 6f 72 64 20   sampled record 
16190 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20 20  */.  int n;     
161a0 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
161b0 66 20 72 65 63 6f 72 64 20 69 6e 20 62 79 74 65  f record in byte
161c0 73 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a  s */.  tRowcnt *
161d0 61 6e 45 71 3b 20 20 20 20 2f 2a 20 45 73 74 2e  anEq;    /* Est.
161e0 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
161f0 77 68 65 72 65 20 74 68 65 20 6b 65 79 20 65 71  where the key eq
16200 75 61 6c 73 20 74 68 69 73 20 73 61 6d 70 6c 65  uals this sample
16210 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61   */.  tRowcnt *a
16220 6e 4c 74 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20  nLt;    /* Est. 
16230 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 77  number of rows w
16240 68 65 72 65 20 6b 65 79 20 69 73 20 6c 65 73 73  here key is less
16250 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70 6c   than this sampl
16260 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a  e */.  tRowcnt *
16270 61 6e 44 4c 74 3b 20 20 20 2f 2a 20 45 73 74 2e  anDLt;   /* Est.
16280 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 73 74 69   number of disti
16290 6e 63 74 20 6b 65 79 73 20 6c 65 73 73 20 74 68  nct keys less th
162a0 61 6e 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a  an this sample *
162b0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  /.};../*.** Each
162c0 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f 75   token coming ou
162d0 74 20 6f 66 20 74 68 65 20 6c 65 78 65 72 20 69  t of the lexer i
162e0 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
162f0 0a 2a 2a 20 74 68 69 73 20 73 74 72 75 63 74 75  .** this structu
16300 72 65 2e 20 20 54 6f 6b 65 6e 73 20 61 72 65 20  re.  Tokens are 
16310 61 6c 73 6f 20 75 73 65 64 20 61 73 20 70 61 72  also used as par
16320 74 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69  t of an expressi
16330 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 69  on..**.** Note i
16340 66 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 20 74 68 65  f Token.z==0 the
16350 6e 20 54 6f 6b 65 6e 2e 64 79 6e 20 61 6e 64 20  n Token.dyn and 
16360 54 6f 6b 65 6e 2e 6e 20 61 72 65 20 75 6e 64 65  Token.n are unde
16370 66 69 6e 65 64 20 61 6e 64 0a 2a 2a 20 6d 61 79  fined and.** may
16380 20 63 6f 6e 74 61 69 6e 20 72 61 6e 64 6f 6d 20   contain random 
16390 76 61 6c 75 65 73 2e 20 20 44 6f 20 6e 6f 74 20  values.  Do not 
163a0 6d 61 6b 65 20 61 6e 79 20 61 73 73 75 6d 70 74  make any assumpt
163b0 69 6f 6e 73 20 61 62 6f 75 74 20 54 6f 6b 65 6e  ions about Token
163c0 2e 64 79 6e 0a 2a 2a 20 61 6e 64 20 54 6f 6b 65  .dyn.** and Toke
163d0 6e 2e 6e 20 77 68 65 6e 20 54 6f 6b 65 6e 2e 7a  n.n when Token.z
163e0 3d 3d 30 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54  ==0..*/.struct T
163f0 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73 74 20 63  oken {.  const c
16400 68 61 72 20 2a 7a 3b 20 20 20 20 20 2f 2a 20 54  har *z;     /* T
16410 65 78 74 20 6f 66 20 74 68 65 20 74 6f 6b 65 6e  ext of the token
16420 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74 65 72 6d  .  Not NULL-term
16430 69 6e 61 74 65 64 21 20 2a 2f 0a 20 20 75 6e 73  inated! */.  uns
16440 69 67 6e 65 64 20 69 6e 74 20 6e 3b 20 20 20 20  igned int n;    
16450 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 68 61  /* Number of cha
16460 72 61 63 74 65 72 73 20 69 6e 20 74 68 69 73 20  racters in this 
16470 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  token */.};../*.
16480 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
16490 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
164a0 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d   contains inform
164b0 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20  ation needed to 
164c0 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65  generate.** code
164d0 20 66 6f 72 20 61 20 53 45 4c 45 43 54 20 74 68   for a SELECT th
164e0 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 67 67 72  at contains aggr
164f0 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 2e  egate functions.
16500 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78 70 72 2e 6f  .**.** If Expr.o
16510 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e  p==TK_AGG_COLUMN
16520 20 6f 72 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54   or TK_AGG_FUNCT
16530 49 4f 4e 20 74 68 65 6e 20 45 78 70 72 2e 70 41  ION then Expr.pA
16540 67 67 49 6e 66 6f 20 69 73 20 61 0a 2a 2a 20 70  ggInfo is a.** p
16550 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73  ointer to this s
16560 74 72 75 63 74 75 72 65 2e 20 20 54 68 65 20 45  tructure.  The E
16570 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 66 69 65 6c  xpr.iColumn fiel
16580 64 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 69  d is the index i
16590 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 61 43 6f  n.** AggInfo.aCo
165a0 6c 5b 5d 20 6f 72 20 41 67 67 49 6e 66 6f 2e 61  l[] or AggInfo.a
165b0 46 75 6e 63 5b 5d 20 6f 66 20 69 6e 66 6f 72 6d  Func[] of inform
165c0 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20  ation needed to 
165d0 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65  generate.** code
165e0 20 66 6f 72 20 74 68 61 74 20 6e 6f 64 65 2e 0a   for that node..
165f0 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 70 47  **.** AggInfo.pG
16600 72 6f 75 70 42 79 20 61 6e 64 20 41 67 67 49 6e  roupBy and AggIn
16610 66 6f 2e 61 46 75 6e 63 2e 70 45 78 70 72 20 70  fo.aFunc.pExpr p
16620 6f 69 6e 74 20 74 6f 20 66 69 65 6c 64 73 20 77  oint to fields w
16630 69 74 68 69 6e 20 74 68 65 0a 2a 2a 20 6f 72 69  ithin the.** ori
16640 67 69 6e 61 6c 20 53 65 6c 65 63 74 20 73 74 72  ginal Select str
16650 75 63 74 75 72 65 20 74 68 61 74 20 64 65 73 63  ucture that desc
16660 72 69 62 65 73 20 74 68 65 20 53 45 4c 45 43 54  ribes the SELECT
16670 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65   statement.  The
16680 73 65 0a 2a 2a 20 66 69 65 6c 64 73 20 64 6f 20  se.** fields do 
16690 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62 65 20 66  not need to be f
166a0 72 65 65 64 20 77 68 65 6e 20 64 65 61 6c 6c 6f  reed when deallo
166b0 63 61 74 69 6e 67 20 74 68 65 20 41 67 67 49 6e  cating the AggIn
166c0 66 6f 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f  fo structure..*/
166d0 0a 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20  .struct AggInfo 
166e0 7b 0a 20 20 75 38 20 64 69 72 65 63 74 4d 6f 64  {.  u8 directMod
166f0 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44  e;          /* D
16700 69 72 65 63 74 20 72 65 6e 64 65 72 69 6e 67 20  irect rendering 
16710 6d 6f 64 65 20 6d 65 61 6e 73 20 74 61 6b 65 20  mode means take 
16720 64 61 74 61 20 64 69 72 65 63 74 6c 79 0a 20 20  data directly.  
16730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16740 20 20 20 20 20 20 20 20 2a 2a 20 66 72 6f 6d 20          ** from 
16750 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 72 61  source tables ra
16760 74 68 65 72 20 74 68 61 6e 20 66 72 6f 6d 20 61  ther than from a
16770 63 63 75 6d 75 6c 61 74 6f 72 73 20 2a 2f 0a 20  ccumulators */. 
16780 20 75 38 20 75 73 65 53 6f 72 74 69 6e 67 49 64   u8 useSortingId
16790 78 3b 20 20 20 20 20 20 20 2f 2a 20 49 6e 20 64  x;       /* In d
167a0 69 72 65 63 74 20 6d 6f 64 65 2c 20 72 65 66 65  irect mode, refe
167b0 72 65 6e 63 65 20 74 68 65 20 73 6f 72 74 69 6e  rence the sortin
167c0 67 20 69 6e 64 65 78 20 72 61 74 68 65 72 0a 20  g index rather. 
167d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167e0 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68 61 6e           ** than
167f0 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c   the source tabl
16800 65 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69  e */.  int sorti
16810 6e 67 49 64 78 3b 20 20 20 20 20 20 20 20 20 2f  ngIdx;         /
16820 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  * Cursor number 
16830 6f 66 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69  of the sorting i
16840 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 73 6f  ndex */.  int so
16850 72 74 69 6e 67 49 64 78 50 54 61 62 3b 20 20 20  rtingIdxPTab;   
16860 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62    /* Cursor numb
16870 65 72 20 6f 66 20 70 73 65 75 64 6f 2d 74 61 62  er of pseudo-tab
16880 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 6f 72  le */.  int nSor
16890 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  tingColumn;     
168a0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
168b0 75 6d 6e 73 20 69 6e 20 74 68 65 20 73 6f 72 74  umns in the sort
168c0 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69  ing index */.  i
168d0 6e 74 20 6d 6e 52 65 67 2c 20 6d 78 52 65 67 3b  nt mnReg, mxReg;
168e0 20 20 20 20 20 20 20 2f 2a 20 52 61 6e 67 65 20         /* Range 
168f0 6f 66 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c  of registers all
16900 6f 63 61 74 65 64 20 66 6f 72 20 61 43 6f 6c 20  ocated for aCol 
16910 61 6e 64 20 61 46 75 6e 63 20 2a 2f 0a 20 20 45  and aFunc */.  E
16920 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42  xprList *pGroupB
16930 79 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 67 72  y;     /* The gr
16940 6f 75 70 20 62 79 20 63 6c 61 75 73 65 20 2a 2f  oup by clause */
16950 0a 20 20 73 74 72 75 63 74 20 41 67 67 49 6e 66  .  struct AggInf
16960 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f 2a 20 46 6f  o_col {    /* Fo
16970 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 75 73  r each column us
16980 65 64 20 69 6e 20 73 6f 75 72 63 65 20 74 61 62  ed in source tab
16990 6c 65 73 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65  les */.    Table
169a0 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20   *pTab;         
169b0 20 20 20 20 2f 2a 20 53 6f 75 72 63 65 20 74 61      /* Source ta
169c0 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ble */.    int i
169d0 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  Table;          
169e0 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75      /* Cursor nu
169f0 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f 75 72  mber of the sour
16a00 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  ce table */.    
16a10 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20  int iColumn;    
16a20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75           /* Colu
16a30 6d 6e 20 6e 75 6d 62 65 72 20 77 69 74 68 69 6e  mn number within
16a40 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c   the source tabl
16a50 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 53 6f  e */.    int iSo
16a60 72 74 65 72 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  rterColumn;     
16a70 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62    /* Column numb
16a80 65 72 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e  er in the sortin
16a90 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 69  g index */.    i
16aa0 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20  nt iMem;        
16ab0 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72          /* Memor
16ac0 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20  y location that 
16ad0 61 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61  acts as accumula
16ae0 74 6f 72 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  tor */.    Expr 
16af0 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20  *pExpr;         
16b00 20 20 20 20 2f 2a 20 54 68 65 20 6f 72 69 67 69      /* The origi
16b10 6e 61 6c 20 65 78 70 72 65 73 73 69 6f 6e 20 2a  nal expression *
16b20 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b 0a 20 20 69  /.  } *aCol;.  i
16b30 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  nt nColumn;     
16b40 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
16b50 20 6f 66 20 75 73 65 64 20 65 6e 74 72 69 65 73   of used entries
16b60 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a 2f 0a 20 20   in aCol[] */.  
16b70 69 6e 74 20 6e 41 63 63 75 6d 75 6c 61 74 6f 72  int nAccumulator
16b80 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  ;       /* Numbe
16b90 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68 61  r of columns tha
16ba0 74 20 73 68 6f 77 20 74 68 72 6f 75 67 68 20 74  t show through t
16bb0 6f 20 74 68 65 20 6f 75 74 70 75 74 2e 0a 20 20  o the output..  
16bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16bd0 20 20 20 20 20 20 20 20 2a 2a 20 41 64 64 69 74          ** Addit
16be0 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73 20 61 72  ional columns ar
16bf0 65 20 75 73 65 64 20 6f 6e 6c 79 20 61 73 20 70  e used only as p
16c00 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 20 20 20  arameters to.   
16c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c20 20 20 20 20 20 20 20 2a 2a 20 61 67 67 72 65 67         ** aggreg
16c30 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  ate functions */
16c40 0a 20 20 73 74 72 75 63 74 20 41 67 67 49 6e 66  .  struct AggInf
16c50 6f 5f 66 75 6e 63 20 7b 20 20 20 2f 2a 20 46 6f  o_func {   /* Fo
16c60 72 20 65 61 63 68 20 61 67 67 72 65 67 61 74 65  r each aggregate
16c70 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20   function */.   
16c80 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20   Expr *pExpr;   
16c90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70            /* Exp
16ca0 72 65 73 73 69 6f 6e 20 65 6e 63 6f 64 69 6e 67  ression encoding
16cb0 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f   the function */
16cc0 0a 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70 46  .    FuncDef *pF
16cd0 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  unc;          /*
16ce0 20 54 68 65 20 61 67 67 72 65 67 61 74 65 20 66   The aggregate f
16cf0 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e  unction implemen
16d00 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e  tation */.    in
16d10 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20  t iMem;         
16d20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79         /* Memory
16d30 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61   location that a
16d40 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74  cts as accumulat
16d50 6f 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 44  or */.    int iD
16d60 69 73 74 69 6e 63 74 3b 20 20 20 20 20 20 20 20  istinct;        
16d70 20 20 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 20     /* Ephemeral 
16d80 74 61 62 6c 65 20 75 73 65 64 20 74 6f 20 65 6e  table used to en
16d90 66 6f 72 63 65 20 44 49 53 54 49 4e 43 54 20 2a  force DISTINCT *
16da0 2f 0a 20 20 7d 20 2a 61 46 75 6e 63 3b 0a 20 20  /.  } *aFunc;.  
16db0 69 6e 74 20 6e 46 75 6e 63 3b 20 20 20 20 20 20  int nFunc;      
16dc0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
16dd0 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  r of entries in 
16de0 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f  aFunc[] */.};../
16df0 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70  *.** The datatyp
16e00 65 20 79 6e 56 61 72 20 69 73 20 61 20 73 69 67  e ynVar is a sig
16e10 6e 65 64 20 69 6e 74 65 67 65 72 2c 20 65 69 74  ned integer, eit
16e20 68 65 72 20 31 36 2d 62 69 74 20 6f 72 20 33 32  her 16-bit or 32
16e30 2d 62 69 74 2e 0a 2a 2a 20 55 73 75 61 6c 6c 79  -bit..** Usually
16e40 20 69 74 20 69 73 20 31 36 2d 62 69 74 73 2e 20   it is 16-bits. 
16e50 20 42 75 74 20 69 66 20 53 51 4c 49 54 45 5f 4d   But if SQLITE_M
16e60 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42  AX_VARIABLE_NUMB
16e70 45 52 20 69 73 20 67 72 65 61 74 65 72 0a 2a 2a  ER is greater.**
16e80 20 74 68 61 6e 20 33 32 37 36 37 20 77 65 20 68   than 32767 we h
16e90 61 76 65 20 74 6f 20 6d 61 6b 65 20 69 74 20 33  ave to make it 3
16ea0 32 2d 62 69 74 2e 20 20 31 36 2d 62 69 74 20 69  2-bit.  16-bit i
16eb0 73 20 70 72 65 66 65 72 72 65 64 20 62 65 63 61  s preferred beca
16ec0 75 73 65 0a 2a 2a 20 69 74 20 75 73 65 73 20 6c  use.** it uses l
16ed0 65 73 73 20 6d 65 6d 6f 72 79 20 69 6e 20 74 68  ess memory in th
16ee0 65 20 45 78 70 72 20 6f 62 6a 65 63 74 2c 20 77  e Expr object, w
16ef0 68 69 63 68 20 69 73 20 61 20 62 69 67 20 6d 65  hich is a big me
16f00 6d 6f 72 79 20 75 73 65 72 0a 2a 2a 20 69 6e 20  mory user.** in 
16f10 73 79 73 74 65 6d 73 20 77 69 74 68 20 6c 6f 74  systems with lot
16f20 73 20 6f 66 20 70 72 65 70 61 72 65 64 20 73 74  s of prepared st
16f30 61 74 65 6d 65 6e 74 73 2e 20 20 41 6e 64 20 66  atements.  And f
16f40 65 77 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 0a  ew applications.
16f50 2a 2a 20 6e 65 65 64 20 6d 6f 72 65 20 74 68 61  ** need more tha
16f60 6e 20 61 62 6f 75 74 20 31 30 20 6f 72 20 32 30  n about 10 or 20
16f70 20 76 61 72 69 61 62 6c 65 73 2e 20 20 42 75 74   variables.  But
16f80 20 73 6f 6d 65 20 65 78 74 72 65 6d 65 20 75 73   some extreme us
16f90 65 72 73 20 77 61 6e 74 0a 2a 2a 20 74 6f 20 68  ers want.** to h
16fa0 61 76 65 20 70 72 65 70 61 72 65 64 20 73 74 61  ave prepared sta
16fb0 74 65 6d 65 6e 74 73 20 77 69 74 68 20 6f 76 65  tements with ove
16fc0 72 20 33 32 37 36 37 20 76 61 72 69 61 62 6c 65  r 32767 variable
16fd0 73 2c 20 61 6e 64 20 66 6f 72 20 74 68 65 6d 0a  s, and for them.
16fe0 2a 2a 20 74 68 65 20 6f 70 74 69 6f 6e 20 69 73  ** the option is
16ff0 20 61 76 61 69 6c 61 62 6c 65 20 28 61 74 20 63   available (at c
17000 6f 6d 70 69 6c 65 2d 74 69 6d 65 29 2e 0a 2a 2f  ompile-time)..*/
17010 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
17020 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 3c  VARIABLE_NUMBER<
17030 3d 33 32 37 36 37 0a 74 79 70 65 64 65 66 20 69  =32767.typedef i
17040 31 36 20 79 6e 56 61 72 3b 0a 23 65 6c 73 65 0a  16 ynVar;.#else.
17050 74 79 70 65 64 65 66 20 69 6e 74 20 79 6e 56 61  typedef int ynVa
17060 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  r;.#endif../*.**
17070 20 45 61 63 68 20 6e 6f 64 65 20 6f 66 20 61 6e   Each node of an
17080 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74   expression in t
17090 68 65 20 70 61 72 73 65 20 74 72 65 65 20 69 73  he parse tree is
170a0 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20   an instance.** 
170b0 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
170c0 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 6f 70  e..**.** Expr.op
170d0 20 69 73 20 74 68 65 20 6f 70 63 6f 64 65 2e 20   is the opcode. 
170e0 54 68 65 20 69 6e 74 65 67 65 72 20 70 61 72 73  The integer pars
170f0 65 72 20 74 6f 6b 65 6e 20 63 6f 64 65 73 20 61  er token codes a
17100 72 65 20 72 65 75 73 65 64 0a 2a 2a 20 61 73 20  re reused.** as 
17110 6f 70 63 6f 64 65 73 20 68 65 72 65 2e 20 46 6f  opcodes here. Fo
17120 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 70  r example, the p
17130 61 72 73 65 72 20 64 65 66 69 6e 65 73 20 54 4b  arser defines TK
17140 5f 47 45 20 74 6f 20 62 65 20 61 6e 20 69 6e 74  _GE to be an int
17150 65 67 65 72 0a 2a 2a 20 63 6f 64 65 20 72 65 70  eger.** code rep
17160 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20 22 3e  resenting the ">
17170 3d 22 20 6f 70 65 72 61 74 6f 72 2e 20 54 68 69  =" operator. Thi
17180 73 20 73 61 6d 65 20 69 6e 74 65 67 65 72 20 63  s same integer c
17190 6f 64 65 20 69 73 20 72 65 75 73 65 64 0a 2a 2a  ode is reused.**
171a0 20 74 6f 20 72 65 70 72 65 73 65 6e 74 20 74 68   to represent th
171b0 65 20 67 72 65 61 74 65 72 2d 74 68 61 6e 2d 6f  e greater-than-o
171c0 72 2d 65 71 75 61 6c 2d 74 6f 20 6f 70 65 72 61  r-equal-to opera
171d0 74 6f 72 20 69 6e 20 74 68 65 20 65 78 70 72 65  tor in the expre
171e0 73 73 69 6f 6e 0a 2a 2a 20 74 72 65 65 2e 0a 2a  ssion.** tree..*
171f0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72  *.** If the expr
17200 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c  ession is an SQL
17210 20 6c 69 74 65 72 61 6c 20 28 54 4b 5f 49 4e 54   literal (TK_INT
17220 45 47 45 52 2c 20 54 4b 5f 46 4c 4f 41 54 2c 20  EGER, TK_FLOAT, 
17230 54 4b 5f 42 4c 4f 42 2c 0a 2a 2a 20 6f 72 20 54  TK_BLOB,.** or T
17240 4b 5f 53 54 52 49 4e 47 29 2c 20 74 68 65 6e 20  K_STRING), then 
17250 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61  Expr.token conta
17260 69 6e 73 20 74 68 65 20 74 65 78 74 20 6f 66 20  ins the text of 
17270 74 68 65 20 53 51 4c 20 6c 69 74 65 72 61 6c 2e  the SQL literal.
17280 20 49 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65   If.** the expre
17290 73 73 69 6f 6e 20 69 73 20 61 20 76 61 72 69 61  ssion is a varia
172a0 62 6c 65 20 28 54 4b 5f 56 41 52 49 41 42 4c 45  ble (TK_VARIABLE
172b0 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b  ), then Expr.tok
172c0 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 0a  en contains the.
172d0 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65  ** variable name
172e0 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20 74 68  . Finally, if th
172f0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
17300 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20  an SQL function 
17310 28 54 4b 5f 46 55 4e 43 54 49 4f 4e 29 2c 0a 2a  (TK_FUNCTION),.*
17320 2a 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65  * then Expr.toke
17330 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6e  n contains the n
17340 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ame of the funct
17350 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e  ion..**.** Expr.
17360 70 52 69 67 68 74 20 61 6e 64 20 45 78 70 72 2e  pRight and Expr.
17370 70 4c 65 66 74 20 61 72 65 20 74 68 65 20 6c 65  pLeft are the le
17380 66 74 20 61 6e 64 20 72 69 67 68 74 20 73 75 62  ft and right sub
17390 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 66 20 61  expressions of a
173a0 0a 2a 2a 20 62 69 6e 61 72 79 20 6f 70 65 72 61  .** binary opera
173b0 74 6f 72 2e 20 45 69 74 68 65 72 20 6f 72 20 62  tor. Either or b
173c0 6f 74 68 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e  oth may be NULL.
173d0 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 4c  .**.** Expr.x.pL
173e0 69 73 74 20 69 73 20 61 20 6c 69 73 74 20 6f 66  ist is a list of
173f0 20 61 72 67 75 6d 65 6e 74 73 20 69 66 20 74 68   arguments if th
17400 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
17410 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2c  an SQL function,
17420 0a 2a 2a 20 61 20 43 41 53 45 20 65 78 70 72 65  .** a CASE expre
17430 73 73 69 6f 6e 20 6f 72 20 61 6e 20 49 4e 20 65  ssion or an IN e
17440 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65  xpression of the
17450 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20   form "<lhs> IN 
17460 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a  (<y>, <z>...)"..
17470 2a 2a 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63  ** Expr.x.pSelec
17480 74 20 69 73 20 75 73 65 64 20 69 66 20 74 68 65  t is used if the
17490 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
174a0 20 73 75 62 2d 73 65 6c 65 63 74 20 6f 72 20 61   sub-select or a
174b0 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 0a  n expression of.
174c0 2a 2a 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68  ** the form "<lh
174d0 73 3e 20 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e  s> IN (SELECT ..
174e0 2e 29 22 2e 20 49 66 20 74 68 65 20 45 50 5f 78  .)". If the EP_x
174f0 49 73 53 65 6c 65 63 74 20 62 69 74 20 69 73 20  IsSelect bit is 
17500 73 65 74 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78  set in the.** Ex
17510 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74  pr.flags mask, t
17520 68 65 6e 20 45 78 70 72 2e 78 2e 70 53 65 6c 65  hen Expr.x.pSele
17530 63 74 20 69 73 20 76 61 6c 69 64 2e 20 4f 74 68  ct is valid. Oth
17540 65 72 77 69 73 65 2c 20 45 78 70 72 2e 78 2e 70  erwise, Expr.x.p
17550 4c 69 73 74 20 69 73 0a 2a 2a 20 76 61 6c 69 64  List is.** valid
17560 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 78 70 72 65  ..**.** An expre
17570 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72  ssion of the for
17580 6d 20 49 44 20 6f 72 20 49 44 2e 49 44 20 72 65  m ID or ID.ID re
17590 66 65 72 73 20 74 6f 20 61 20 63 6f 6c 75 6d 6e  fers to a column
175a0 20 69 6e 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20   in a table..** 
175b0 46 6f 72 20 73 75 63 68 20 65 78 70 72 65 73 73  For such express
175c0 69 6f 6e 73 2c 20 45 78 70 72 2e 6f 70 20 69 73  ions, Expr.op is
175d0 20 73 65 74 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d   set to TK_COLUM
175e0 4e 20 61 6e 64 20 45 78 70 72 2e 69 54 61 62 6c  N and Expr.iTabl
175f0 65 20 69 73 0a 2a 2a 20 74 68 65 20 69 6e 74 65  e is.** the inte
17600 67 65 72 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  ger cursor numbe
17610 72 20 6f 66 20 61 20 56 44 42 45 20 63 75 72 73  r of a VDBE curs
17620 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74  or pointing to t
17630 68 61 74 20 74 61 62 6c 65 20 61 6e 64 0a 2a 2a  hat table and.**
17640 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 69 73   Expr.iColumn is
17650 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62   the column numb
17660 65 72 20 66 6f 72 20 74 68 65 20 73 70 65 63 69  er for the speci
17670 66 69 63 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20  fic column.  If 
17680 74 68 65 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f  the.** expressio
17690 6e 20 69 73 20 75 73 65 64 20 61 73 20 61 20 72  n is used as a r
176a0 65 73 75 6c 74 20 69 6e 20 61 6e 20 61 67 67 72  esult in an aggr
176b0 65 67 61 74 65 20 53 45 4c 45 43 54 2c 20 74 68  egate SELECT, th
176c0 65 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20  en the.** value 
176d0 69 73 20 61 6c 73 6f 20 73 74 6f 72 65 64 20 69  is also stored i
176e0 6e 20 74 68 65 20 45 78 70 72 2e 69 41 67 67 20  n the Expr.iAgg 
176f0 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 61 67  column in the ag
17700 67 72 65 67 61 74 65 20 73 6f 20 74 68 61 74 0a  gregate so that.
17710 2a 2a 20 69 74 20 63 61 6e 20 62 65 20 61 63 63  ** it can be acc
17720 65 73 73 65 64 20 61 66 74 65 72 20 61 6c 6c 20  essed after all 
17730 61 67 67 72 65 67 61 74 65 73 20 61 72 65 20 63  aggregates are c
17740 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49  omputed..**.** I
17750 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
17760 20 69 73 20 61 6e 20 75 6e 62 6f 75 6e 64 20 76   is an unbound v
17770 61 72 69 61 62 6c 65 20 6d 61 72 6b 65 72 20 28  ariable marker (
17780 61 20 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 0a  a question mark.
17790 2a 2a 20 63 68 61 72 61 63 74 65 72 20 27 3f 27  ** character '?'
177a0 20 69 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   in the original
177b0 20 53 51 4c 29 20 74 68 65 6e 20 74 68 65 20 45   SQL) then the E
177c0 78 70 72 2e 69 54 61 62 6c 65 20 68 6f 6c 64 73  xpr.iTable holds
177d0 20 74 68 65 20 69 6e 64 65 78 0a 2a 2a 20 6e 75   the index.** nu
177e0 6d 62 65 72 20 66 6f 72 20 74 68 61 74 20 76 61  mber for that va
177f0 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  riable..**.** If
17800 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
17810 69 73 20 61 20 73 75 62 71 75 65 72 79 20 74 68  is a subquery th
17820 65 6e 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20  en Expr.iColumn 
17830 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72  holds an integer
17840 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 6e 75 6d  .** register num
17850 62 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ber containing t
17860 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
17870 20 73 75 62 71 75 65 72 79 2e 20 20 49 66 20 74   subquery.  If t
17880 68 65 0a 2a 2a 20 73 75 62 71 75 65 72 79 20 67  he.** subquery g
17890 69 76 65 73 20 61 20 63 6f 6e 73 74 61 6e 74 20  ives a constant 
178a0 72 65 73 75 6c 74 2c 20 74 68 65 6e 20 69 54 61  result, then iTa
178b0 62 6c 65 20 69 73 20 2d 31 2e 20 20 49 66 20 74  ble is -1.  If t
178c0 68 65 20 73 75 62 71 75 65 72 79 0a 2a 2a 20 67  he subquery.** g
178d0 69 76 65 73 20 61 20 64 69 66 66 65 72 65 6e 74  ives a different
178e0 20 61 6e 73 77 65 72 20 61 74 20 64 69 66 66 65   answer at diffe
178f0 72 65 6e 74 20 74 69 6d 65 73 20 64 75 72 69 6e  rent times durin
17900 67 20 73 74 61 74 65 6d 65 6e 74 20 70 72 6f 63  g statement proc
17910 65 73 73 69 6e 67 0a 2a 2a 20 74 68 65 6e 20 69  essing.** then i
17920 54 61 62 6c 65 20 69 73 20 74 68 65 20 61 64 64  Table is the add
17930 72 65 73 73 20 6f 66 20 61 20 73 75 62 72 6f 75  ress of a subrou
17940 74 69 6e 65 20 74 68 61 74 20 63 6f 6d 70 75 74  tine that comput
17950 65 73 20 74 68 65 20 73 75 62 71 75 65 72 79 2e  es the subquery.
17960 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 78  .**.** If the Ex
17970 70 72 20 69 73 20 6f 66 20 74 79 70 65 20 4f 50  pr is of type OP
17980 5f 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65  _Column, and the
17990 20 74 61 62 6c 65 20 69 74 20 69 73 20 73 65 6c   table it is sel
179a0 65 63 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69  ecting from.** i
179b0 73 20 61 20 64 69 73 6b 20 74 61 62 6c 65 20 6f  s a disk table o
179c0 72 20 74 68 65 20 22 6f 6c 64 2e 2a 22 20 70 73  r the "old.*" ps
179d0 65 75 64 6f 2d 74 61 62 6c 65 2c 20 74 68 65 6e  eudo-table, then
179e0 20 70 54 61 62 20 70 6f 69 6e 74 73 20 74 6f 20   pTab points to 
179f0 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e  the.** correspon
17a00 64 69 6e 67 20 74 61 62 6c 65 20 64 65 66 69 6e  ding table defin
17a10 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c  ition..**.** ALL
17a20 4f 43 41 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a  OCATION NOTES:.*
17a30 2a 0a 2a 2a 20 45 78 70 72 20 6f 62 6a 65 63 74  *.** Expr object
17a40 73 20 63 61 6e 20 75 73 65 20 61 20 6c 6f 74 20  s can use a lot 
17a50 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20  of memory space 
17a60 69 6e 20 64 61 74 61 62 61 73 65 20 73 63 68 65  in database sche
17a70 6d 61 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c 70 20  ma.  To.** help 
17a80 72 65 64 75 63 65 20 6d 65 6d 6f 72 79 20 72 65  reduce memory re
17a90 71 75 69 72 65 6d 65 6e 74 73 2c 20 73 6f 6d 65  quirements, some
17aa0 74 69 6d 65 73 20 61 6e 20 45 78 70 72 20 6f 62  times an Expr ob
17ab0 6a 65 63 74 20 77 69 6c 6c 20 62 65 0a 2a 2a 20  ject will be.** 
17ac0 74 72 75 6e 63 61 74 65 64 2e 20 20 41 6e 64 20  truncated.  And 
17ad0 74 6f 20 72 65 64 75 63 65 20 74 68 65 20 6e 75  to reduce the nu
17ae0 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 61  mber of memory a
17af0 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20 73 6f 6d 65  llocations, some
17b00 74 69 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f 72 20  times.** two or 
17b10 6d 6f 72 65 20 45 78 70 72 20 6f 62 6a 65 63 74  more Expr object
17b20 73 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64  s will be stored
17b30 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 6d 65 6d   in a single mem
17b40 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a  ory allocation,.
17b50 2a 2a 20 74 6f 67 65 74 68 65 72 20 77 69 74 68  ** together with
17b60 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 73 74 72   Expr.zToken str
17b70 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ings..**.** If t
17b80 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 61 6e  he EP_Reduced an
17b90 64 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66  d EP_TokenOnly f
17ba0 6c 61 67 73 20 61 72 65 20 73 65 74 20 77 68 65  lags are set whe
17bb0 6e 0a 2a 2a 20 61 6e 20 45 78 70 72 20 6f 62 6a  n.** an Expr obj
17bc0 65 63 74 20 69 73 20 74 72 75 6e 63 61 74 65 64  ect is truncated
17bd0 2e 20 20 57 68 65 6e 20 45 50 5f 52 65 64 75 63  .  When EP_Reduc
17be0 65 64 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  ed is set, then 
17bf0 61 6c 6c 0a 2a 2a 20 74 68 65 20 63 68 69 6c 64  all.** the child
17c00 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 69 6e   Expr objects in
17c10 20 74 68 65 20 45 78 70 72 2e 70 4c 65 66 74 20   the Expr.pLeft 
17c20 61 6e 64 20 45 78 70 72 2e 70 52 69 67 68 74 20  and Expr.pRight 
17c30 73 75 62 74 72 65 65 73 0a 2a 2a 20 61 72 65 20  subtrees.** are 
17c40 63 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e  contained within
17c50 20 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72 79   the same memory
17c60 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f   allocation.  No
17c70 74 65 2c 20 68 6f 77 65 76 65 72 2c 20 74 68 61  te, however, tha
17c80 74 0a 2a 2a 20 74 68 65 20 73 75 62 74 72 65 65  t.** the subtree
17c90 73 20 69 6e 20 45 78 70 72 2e 78 2e 70 4c 69 73  s in Expr.x.pLis
17ca0 74 20 6f 72 20 45 78 70 72 2e 78 2e 70 53 65 6c  t or Expr.x.pSel
17cb0 65 63 74 20 61 72 65 20 61 6c 77 61 79 73 20 73  ect are always s
17cc0 65 70 61 72 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c  eparately.** all
17cd0 6f 63 61 74 65 64 2c 20 72 65 67 61 72 64 6c 65  ocated, regardle
17ce0 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72  ss of whether or
17cf0 20 6e 6f 74 20 45 50 5f 52 65 64 75 63 65 64 20   not EP_Reduced 
17d00 69 73 20 73 65 74 2e 0a 2a 2f 0a 73 74 72 75 63  is set..*/.struc
17d10 74 20 45 78 70 72 20 7b 0a 20 20 75 38 20 6f 70  t Expr {.  u8 op
17d20 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
17d30 20 20 2f 2a 20 4f 70 65 72 61 74 69 6f 6e 20 70    /* Operation p
17d40 65 72 66 6f 72 6d 65 64 20 62 79 20 74 68 69 73  erformed by this
17d50 20 6e 6f 64 65 20 2a 2f 0a 20 20 63 68 61 72 20   node */.  char 
17d60 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20  affinity;       
17d70 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74    /* The affinit
17d80 79 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  y of the column 
17d90 6f 72 20 30 20 69 66 20 6e 6f 74 20 61 20 63 6f  or 0 if not a co
17da0 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 66 6c  lumn */.  u32 fl
17db0 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
17dc0 20 2f 2a 20 56 61 72 69 6f 75 73 20 66 6c 61 67   /* Various flag
17dd0 73 2e 20 20 45 50 5f 2a 20 53 65 65 20 62 65 6c  s.  EP_* See bel
17de0 6f 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a  ow */.  union {.
17df0 20 20 20 20 63 68 61 72 20 2a 7a 54 6f 6b 65 6e      char *zToken
17e00 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f  ;          /* To
17e10 6b 65 6e 20 76 61 6c 75 65 2e 20 5a 65 72 6f 20  ken value. Zero 
17e20 74 65 72 6d 69 6e 61 74 65 64 20 61 6e 64 20 64  terminated and d
17e30 65 71 75 6f 74 65 64 20 2a 2f 0a 20 20 20 20 69  equoted */.    i
17e40 6e 74 20 69 56 61 6c 75 65 3b 20 20 20 20 20 20  nt iValue;      
17e50 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67        /* Non-neg
17e60 61 74 69 76 65 20 69 6e 74 65 67 65 72 20 76 61  ative integer va
17e70 6c 75 65 20 69 66 20 45 50 5f 49 6e 74 56 61 6c  lue if EP_IntVal
17e80 75 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20  ue */.  } u;..  
17e90 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 54 6f 6b  /* If the EP_Tok
17ea0 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 69 73 20 73  enOnly flag is s
17eb0 65 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66  et in the Expr.f
17ec0 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20  lags mask, then 
17ed0 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73  no.  ** space is
17ee0 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74   allocated for t
17ef0 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20  he fields below 
17f00 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61  this point. An a
17f10 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61  ttempt to.  ** a
17f20 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20  ccess them will 
17f30 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66  result in a segf
17f40 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74  ault or malfunct
17f50 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a  ion..  *********
17f60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17f70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17f80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17f90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20  ************/.. 
17fa0 20 45 78 70 72 20 2a 70 4c 65 66 74 3b 20 20 20   Expr *pLeft;   
17fb0 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 66 74 20          /* Left 
17fc0 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 45 78 70  subnode */.  Exp
17fd0 72 20 2a 70 52 69 67 68 74 3b 20 20 20 20 20 20  r *pRight;      
17fe0 20 20 20 20 2f 2a 20 52 69 67 68 74 20 73 75 62      /* Right sub
17ff0 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  node */.  union 
18000 7b 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a  {.    ExprList *
18010 70 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 6f 70  pList;     /* op
18020 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53   = IN, EXISTS, S
18030 45 4c 45 43 54 2c 20 43 41 53 45 2c 20 46 55 4e  ELECT, CASE, FUN
18040 43 54 49 4f 4e 2c 20 42 45 54 57 45 45 4e 20 2a  CTION, BETWEEN *
18050 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53  /.    Select *pS
18060 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 45 50  elect;     /* EP
18070 5f 78 49 73 53 65 6c 65 63 74 20 61 6e 64 20 6f  _xIsSelect and o
18080 70 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20  p = IN, EXISTS, 
18090 53 45 4c 45 43 54 20 2a 2f 0a 20 20 7d 20 78 3b  SELECT */.  } x;
180a0 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50  ..  /* If the EP
180b0 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20 69 73  _Reduced flag is
180c0 20 73 65 74 20 69 6e 20 74 68 65 20 45 78 70 72   set in the Expr
180d0 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65  .flags mask, the
180e0 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20  n no.  ** space 
180f0 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72  is allocated for
18100 20 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f   the fields belo
18110 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e  w this point. An
18120 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a   attempt to.  **
18130 20 61 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c   access them wil
18140 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65  l result in a se
18150 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e  gfault or malfun
18160 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a  ction..  *******
18170 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18180 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18190 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
181a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
181b0 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
181c0 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69  EXPR_DEPTH>0.  i
181d0 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20  nt nHeight;     
181e0 20 20 20 20 20 20 2f 2a 20 48 65 69 67 68 74 20        /* Height 
181f0 6f 66 20 74 68 65 20 74 72 65 65 20 68 65 61 64  of the tree head
18200 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20  ed by this node 
18210 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20  */.#endif.  int 
18220 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  iTable;         
18230 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a     /* TK_COLUMN:
18240 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   cursor number o
18250 66 20 74 61 62 6c 65 20 68 6f 6c 64 69 6e 67 20  f table holding 
18260 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20  column.         
18270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18280 2a 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20  ** TK_REGISTER: 
18290 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 0a  register number.
182a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182b0 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 54           ** TK_T
182c0 52 49 47 47 45 52 3a 20 31 20 2d 3e 20 6e 65 77  RIGGER: 1 -> new
182d0 2c 20 30 20 2d 3e 20 6f 6c 64 0a 20 20 20 20 20  , 0 -> old.     
182e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182f0 20 20 20 20 2a 2a 20 45 50 5f 55 6e 6c 69 6b 65      ** EP_Unlike
18300 6c 79 3a 20 20 31 33 34 32 31 37 37 32 38 20 74  ly:  134217728 t
18310 69 6d 65 73 20 6c 69 6b 65 6c 69 68 6f 6f 64 0a  imes likelihood.
18320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18330 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 53           ** TK_S
18340 45 4c 45 43 54 3a 20 31 73 74 20 72 65 67 69 73  ELECT: 1st regis
18350 74 65 72 20 6f 66 20 72 65 73 75 6c 74 20 76 65  ter of result ve
18360 63 74 6f 72 20 2a 2f 0a 20 20 79 6e 56 61 72 20  ctor */.  ynVar 
18370 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  iColumn;        
18380 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63   /* TK_COLUMN: c
18390 6f 6c 75 6d 6e 20 69 6e 64 65 78 2e 20 20 2d 31  olumn index.  -1
183a0 20 66 6f 72 20 72 6f 77 69 64 2e 0a 20 20 20 20   for rowid..    
183b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
183c0 20 20 20 20 20 2a 2a 20 54 4b 5f 56 41 52 49 41       ** TK_VARIA
183d0 42 4c 45 3a 20 76 61 72 69 61 62 6c 65 20 6e 75  BLE: variable nu
183e0 6d 62 65 72 20 28 61 6c 77 61 79 73 20 3e 3d 20  mber (always >= 
183f0 31 29 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  1)..            
18400 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
18410 54 4b 5f 53 45 4c 45 43 54 5f 43 4f 4c 55 4d 4e  TK_SELECT_COLUMN
18420 3a 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20  : column of the 
18430 72 65 73 75 6c 74 20 76 65 63 74 6f 72 20 2a 2f  result vector */
18440 0a 20 20 69 31 36 20 69 41 67 67 3b 20 20 20 20  .  i16 iAgg;    
18450 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69            /* Whi
18460 63 68 20 65 6e 74 72 79 20 69 6e 20 70 41 67 67  ch entry in pAgg
18470 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20  Info->aCol[] or 
18480 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69  ->aFunc[] */.  i
18490 31 36 20 69 52 69 67 68 74 4a 6f 69 6e 54 61 62  16 iRightJoinTab
184a0 6c 65 3b 20 20 20 2f 2a 20 49 66 20 45 50 5f 46  le;   /* If EP_F
184b0 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20 72 69 67  romJoin, the rig
184c0 68 74 20 74 61 62 6c 65 20 6f 66 20 74 68 65 20  ht table of the 
184d0 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38 20 6f 70 32  join */.  u8 op2
184e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
184f0 20 2f 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a   /* TK_REGISTER:
18500 20 6f 72 69 67 69 6e 61 6c 20 76 61 6c 75 65 20   original value 
18510 6f 66 20 45 78 70 72 2e 6f 70 0a 20 20 20 20 20  of Expr.op.     
18520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18530 20 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55 4d 4e      ** TK_COLUMN
18540 3a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 70  : the value of p
18550 35 20 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e 0a  5 for OP_Column.
18560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18570 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 41           ** TK_A
18580 47 47 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e 65 73  GG_FUNCTION: nes
18590 74 69 6e 67 20 64 65 70 74 68 20 2a 2f 0a 20 20  ting depth */.  
185a0 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66  AggInfo *pAggInf
185b0 6f 3b 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62  o;     /* Used b
185c0 79 20 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20  y TK_AGG_COLUMN 
185d0 61 6e 64 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54  and TK_AGG_FUNCT
185e0 49 4f 4e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ION */.  Table *
185f0 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20  pTab;           
18600 2f 2a 20 54 61 62 6c 65 20 66 6f 72 20 54 4b 5f  /* Table for TK_
18610 43 4f 4c 55 4d 4e 20 65 78 70 72 65 73 73 69 6f  COLUMN expressio
18620 6e 73 2e 20 20 43 61 6e 20 62 65 20 4e 55 4c 4c  ns.  Can be NULL
18630 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18640 20 20 20 20 20 20 20 20 20 20 2a 2a 20 66 6f 72            ** for
18650 20 61 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20   a column of an 
18660 69 6e 64 65 78 20 6f 6e 20 61 6e 20 65 78 70 72  index on an expr
18670 65 73 73 69 6f 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  ession */.};../*
18680 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
18690 67 20 61 72 65 20 74 68 65 20 6d 65 61 6e 69 6e  g are the meanin
186a0 67 73 20 6f 66 20 62 69 74 73 20 69 6e 20 74 68  gs of bits in th
186b0 65 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65  e Expr.flags fie
186c0 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ld..*/.#define E
186d0 50 5f 46 72 6f 6d 4a 6f 69 6e 20 20 30 78 30 30  P_FromJoin  0x00
186e0 30 30 30 31 20 2f 2a 20 4f 72 69 67 69 6e 61 74  0001 /* Originat
186f0 65 73 20 69 6e 20 4f 4e 2f 55 53 49 4e 47 20 63  es in ON/USING c
18700 6c 61 75 73 65 20 6f 66 20 6f 75 74 65 72 20 6a  lause of outer j
18710 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  oin */.#define E
18720 50 5f 41 67 67 20 20 20 20 20 20 20 30 78 30 30  P_Agg       0x00
18730 30 30 30 32 20 2f 2a 20 43 6f 6e 74 61 69 6e 73  0002 /* Contains
18740 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67   one or more agg
18750 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
18760 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
18770 20 20 20 20 20 20 2f 2a 20 30 78 30 30 30 30 30        /* 0x00000
18780 34 20 2f 2f 20 61 76 61 69 6c 61 62 6c 65 20 66  4 // available f
18790 6f 72 20 75 73 65 20 2a 2f 0a 20 20 20 20 20 20  or use */.      
187a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30              /* 0
187b0 78 30 30 30 30 30 38 20 2f 2f 20 61 76 61 69 6c  x000008 // avail
187c0 61 62 6c 65 20 66 6f 72 20 75 73 65 20 2a 2f 0a  able for use */.
187d0 23 64 65 66 69 6e 65 20 45 50 5f 44 69 73 74 69  #define EP_Disti
187e0 6e 63 74 20 20 30 78 30 30 30 30 31 30 20 2f 2a  nct  0x000010 /*
187f0 20 41 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   Aggregate funct
18800 69 6f 6e 20 77 69 74 68 20 44 49 53 54 49 4e 43  ion with DISTINC
18810 54 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65  T keyword */.#de
18820 66 69 6e 65 20 45 50 5f 56 61 72 53 65 6c 65 63  fine EP_VarSelec
18830 74 20 30 78 30 30 30 30 32 30 20 2f 2a 20 70 53  t 0x000020 /* pS
18840 65 6c 65 63 74 20 69 73 20 63 6f 72 72 65 6c 61  elect is correla
18850 74 65 64 2c 20 6e 6f 74 20 63 6f 6e 73 74 61 6e  ted, not constan
18860 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  t */.#define EP_
18870 44 62 6c 51 75 6f 74 65 64 20 30 78 30 30 30 30  DblQuoted 0x0000
18880 34 30 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61  40 /* token.z wa
18890 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 69 6e 20  s originally in 
188a0 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66 69 6e 65  "..." */.#define
188b0 20 45 50 5f 49 6e 66 69 78 46 75 6e 63 20 30 78   EP_InfixFunc 0x
188c0 30 30 30 30 38 30 20 2f 2a 20 54 72 75 65 20 66  000080 /* True f
188d0 6f 72 20 61 6e 20 69 6e 66 69 78 20 66 75 6e 63  or an infix func
188e0 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42  tion: LIKE, GLOB
188f0 2c 20 65 74 63 20 2a 2f 0a 23 64 65 66 69 6e 65  , etc */.#define
18900 20 45 50 5f 43 6f 6c 6c 61 74 65 20 20 20 30 78   EP_Collate   0x
18910 30 30 30 31 30 30 20 2f 2a 20 54 72 65 65 20 63  000100 /* Tree c
18920 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 43 4f 4c  ontains a TK_COL
18930 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20 2a 2f  LATE operator */
18940 0a 23 64 65 66 69 6e 65 20 45 50 5f 47 65 6e 65  .#define EP_Gene
18950 72 69 63 20 20 20 30 78 30 30 30 32 30 30 20 2f  ric   0x000200 /
18960 2a 20 49 67 6e 6f 72 65 20 43 4f 4c 4c 41 54 45  * Ignore COLLATE
18970 20 6f 72 20 61 66 66 69 6e 69 74 79 20 6f 6e 20   or affinity on 
18980 74 68 69 73 20 74 72 65 65 20 2a 2f 0a 23 64 65  this tree */.#de
18990 66 69 6e 65 20 45 50 5f 49 6e 74 56 61 6c 75 65  fine EP_IntValue
189a0 20 20 30 78 30 30 30 34 30 30 20 2f 2a 20 49 6e    0x000400 /* In
189b0 74 65 67 65 72 20 76 61 6c 75 65 20 63 6f 6e 74  teger value cont
189c0 61 69 6e 65 64 20 69 6e 20 75 2e 69 56 61 6c 75  ained in u.iValu
189d0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  e */.#define EP_
189e0 78 49 73 53 65 6c 65 63 74 20 30 78 30 30 30 38  xIsSelect 0x0008
189f0 30 30 20 2f 2a 20 78 2e 70 53 65 6c 65 63 74 20  00 /* x.pSelect 
18a00 69 73 20 76 61 6c 69 64 20 28 6f 74 68 65 72 77  is valid (otherw
18a10 69 73 65 20 78 2e 70 4c 69 73 74 20 69 73 29 20  ise x.pList is) 
18a20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 6b  */.#define EP_Sk
18a30 69 70 20 20 20 20 20 20 30 78 30 30 31 30 30 30  ip      0x001000
18a40 20 2f 2a 20 43 4f 4c 4c 41 54 45 2c 20 41 53 2c   /* COLLATE, AS,
18a50 20 6f 72 20 55 4e 4c 49 4b 45 4c 59 20 2a 2f 0a   or UNLIKELY */.
18a60 23 64 65 66 69 6e 65 20 45 50 5f 52 65 64 75 63  #define EP_Reduc
18a70 65 64 20 20 20 30 78 30 30 32 30 30 30 20 2f 2a  ed   0x002000 /*
18a80 20 45 78 70 72 20 73 74 72 75 63 74 20 45 58 50   Expr struct EXP
18a90 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20 62 79  R_REDUCEDSIZE by
18aa0 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66  tes only */.#def
18ab0 69 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79  ine EP_TokenOnly
18ac0 20 30 78 30 30 34 30 30 30 20 2f 2a 20 45 78 70   0x004000 /* Exp
18ad0 72 20 73 74 72 75 63 74 20 45 58 50 52 5f 54 4f  r struct EXPR_TO
18ae0 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 62 79 74 65  KENONLYSIZE byte
18af0 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e  s only */.#defin
18b00 65 20 45 50 5f 53 74 61 74 69 63 20 20 20 20 30  e EP_Static    0
18b10 78 30 30 38 30 30 30 20 2f 2a 20 48 65 6c 64 20  x008000 /* Held 
18b20 69 6e 20 6d 65 6d 6f 72 79 20 6e 6f 74 20 6f 62  in memory not ob
18b30 74 61 69 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c  tained from mall
18b40 6f 63 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  oc() */.#define 
18b50 45 50 5f 4d 65 6d 54 6f 6b 65 6e 20 20 30 78 30  EP_MemToken  0x0
18b60 31 30 30 30 30 20 2f 2a 20 4e 65 65 64 20 74 6f  10000 /* Need to
18b70 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29   sqlite3DbFree()
18b80 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a   Expr.zToken */.
18b90 23 64 65 66 69 6e 65 20 45 50 5f 4e 6f 52 65 64  #define EP_NoRed
18ba0 75 63 65 20 20 30 78 30 32 30 30 30 30 20 2f 2a  uce  0x020000 /*
18bb0 20 43 61 6e 6e 6f 74 20 45 58 50 52 44 55 50 5f   Cannot EXPRDUP_
18bc0 52 45 44 55 43 45 20 74 68 69 73 20 45 78 70 72  REDUCE this Expr
18bd0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 55   */.#define EP_U
18be0 6e 6c 69 6b 65 6c 79 20 20 30 78 30 34 30 30 30  nlikely  0x04000
18bf0 30 20 2f 2a 20 75 6e 6c 69 6b 65 6c 79 28 29 20  0 /* unlikely() 
18c00 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 29 20  or likelihood() 
18c10 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
18c20 69 6e 65 20 45 50 5f 43 6f 6e 73 74 46 75 6e 63  ine EP_ConstFunc
18c30 20 30 78 30 38 30 30 30 30 20 2f 2a 20 41 20 53   0x080000 /* A S
18c40 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
18c50 41 4e 54 20 6f 72 20 5f 53 4c 4f 43 48 4e 47 20  ANT or _SLOCHNG 
18c60 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
18c70 69 6e 65 20 45 50 5f 43 61 6e 42 65 4e 75 6c 6c  ine EP_CanBeNull
18c80 20 30 78 31 30 30 30 30 30 20 2f 2a 20 43 61 6e   0x100000 /* Can
18c90 20 62 65 20 6e 75 6c 6c 20 64 65 73 70 69 74 65   be null despite
18ca0 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72   NOT NULL constr
18cb0 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  aint */.#define 
18cc0 45 50 5f 53 75 62 71 75 65 72 79 20 20 30 78 32  EP_Subquery  0x2
18cd0 30 30 30 30 30 20 2f 2a 20 54 72 65 65 20 63 6f  00000 /* Tree co
18ce0 6e 74 61 69 6e 73 20 61 20 54 4b 5f 53 45 4c 45  ntains a TK_SELE
18cf0 43 54 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23  CT operator */.#
18d00 64 65 66 69 6e 65 20 45 50 5f 41 6c 69 61 73 20  define EP_Alias 
18d10 20 20 20 20 30 78 34 30 30 30 30 30 20 2f 2a 20      0x400000 /* 
18d20 49 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20  Is an alias for 
18d30 61 20 72 65 73 75 6c 74 20 73 65 74 20 63 6f 6c  a result set col
18d40 75 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  umn */.#define E
18d50 50 5f 4c 65 61 66 20 20 20 20 20 20 30 78 38 30  P_Leaf      0x80
18d60 30 30 30 30 20 2f 2a 20 45 78 70 72 2e 70 4c 65  0000 /* Expr.pLe
18d70 66 74 2c 20 2e 70 52 69 67 68 74 2c 20 2e 75 2e  ft, .pRight, .u.
18d80 70 53 65 6c 65 63 74 20 61 6c 6c 20 4e 55 4c 4c  pSelect all NULL
18d90 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6d 62 69   */../*.** Combi
18da0 6e 61 74 69 6f 6e 73 20 6f 66 20 74 77 6f 20 6f  nations of two o
18db0 72 20 6d 6f 72 65 20 45 50 5f 2a 20 66 6c 61 67  r more EP_* flag
18dc0 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  s.*/.#define EP_
18dd0 50 72 6f 70 61 67 61 74 65 20 28 45 50 5f 43 6f  Propagate (EP_Co
18de0 6c 6c 61 74 65 7c 45 50 5f 53 75 62 71 75 65 72  llate|EP_Subquer
18df0 79 29 20 2f 2a 20 50 72 6f 70 61 67 61 74 65 20  y) /* Propagate 
18e00 74 68 65 73 65 20 62 69 74 73 20 75 70 20 74 72  these bits up tr
18e10 65 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  ee */../*.** The
18e20 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65  se macros can be
18e30 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73   used to test, s
18e40 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74  et, or clear bit
18e50 73 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72  s in the.** Expr
18e60 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f  .flags field..*/
18e70 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48 61 73  .#define ExprHas
18e80 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20  Property(E,P)   
18e90 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28    (((E)->flags&(
18ea0 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20  P))!=0).#define 
18eb0 45 78 70 72 48 61 73 41 6c 6c 50 72 6f 70 65 72  ExprHasAllProper
18ec0 74 79 28 45 2c 50 29 20 20 28 28 28 45 29 2d 3e  ty(E,P)  (((E)->
18ed0 66 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29  flags&(P))==(P))
18ee0 0a 23 64 65 66 69 6e 65 20 45 78 70 72 53 65 74  .#define ExprSet
18ef0 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20  Property(E,P)   
18f00 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50    (E)->flags|=(P
18f10 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 43 6c  ).#define ExprCl
18f20 65 61 72 50 72 6f 70 65 72 74 79 28 45 2c 50 29  earProperty(E,P)
18f30 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 26 3d 7e     (E)->flags&=~
18f40 28 50 29 0a 0a 2f 2a 20 54 68 65 20 45 78 70 72  (P)../* The Expr
18f50 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28 29  SetVVAProperty()
18f60 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 66   macro is used f
18f70 6f 72 20 56 65 72 69 66 69 63 61 74 69 6f 6e 2c  or Verification,
18f80 20 56 61 6c 69 64 61 74 69 6f 6e 2c 0a 2a 2a 20   Validation,.** 
18f90 61 6e 64 20 41 63 63 72 65 64 69 74 61 74 69 6f  and Accreditatio
18fa0 6e 20 6f 6e 6c 79 2e 20 20 49 74 20 77 6f 72 6b  n only.  It work
18fb0 73 20 6c 69 6b 65 20 45 78 70 72 53 65 74 50 72  s like ExprSetPr
18fc0 6f 70 65 72 74 79 28 29 20 64 75 72 69 6e 67 20  operty() during 
18fd0 56 56 41 0a 2a 2a 20 70 72 6f 63 65 73 73 65 73  VVA.** processes
18fe0 20 62 75 74 20 69 73 20 61 20 6e 6f 2d 6f 70 20   but is a no-op 
18ff0 66 6f 72 20 64 65 6c 69 76 65 72 79 2e 0a 2a 2f  for delivery..*/
19000 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
19010 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20 45 78  EBUG.# define Ex
19020 70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79  prSetVVAProperty
19030 28 45 2c 50 29 20 20 28 45 29 2d 3e 66 6c 61 67  (E,P)  (E)->flag
19040 73 7c 3d 28 50 29 0a 23 65 6c 73 65 0a 23 20 64  s|=(P).#else.# d
19050 65 66 69 6e 65 20 45 78 70 72 53 65 74 56 56 41  efine ExprSetVVA
19060 50 72 6f 70 65 72 74 79 28 45 2c 50 29 0a 23 65  Property(E,P).#e
19070 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72  ndif../*.** Macr
19080 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  os to determine 
19090 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  the number of by
190a0 74 65 73 20 72 65 71 75 69 72 65 64 20 62 79 20  tes required by 
190b0 61 20 6e 6f 72 6d 61 6c 20 45 78 70 72 0a 2a 2a  a normal Expr.**
190c0 20 73 74 72 75 63 74 2c 20 61 6e 20 45 78 70 72   struct, an Expr
190d0 20 73 74 72 75 63 74 20 77 69 74 68 20 74 68 65   struct with the
190e0 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67   EP_Reduced flag
190f0 20 73 65 74 20 69 6e 20 45 78 70 72 2e 66 6c 61   set in Expr.fla
19100 67 73 0a 2a 2a 20 61 6e 64 20 61 6e 20 45 78 70  gs.** and an Exp
19110 72 20 73 74 72 75 63 74 20 77 69 74 68 20 74 68  r struct with th
19120 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66  e EP_TokenOnly f
19130 6c 61 67 20 73 65 74 2e 0a 2a 2f 0a 23 64 65 66  lag set..*/.#def
19140 69 6e 65 20 45 58 50 52 5f 46 55 4c 4c 53 49 5a  ine EXPR_FULLSIZ
19150 45 20 20 20 20 20 20 20 20 20 20 20 73 69 7a 65  E           size
19160 6f 66 28 45 78 70 72 29 20 20 20 20 20 20 20 20  of(Expr)        
19170 20 20 20 2f 2a 20 46 75 6c 6c 20 73 69 7a 65 20     /* Full size 
19180 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f  */.#define EXPR_
19190 52 45 44 55 43 45 44 53 49 5a 45 20 20 20 20 20  REDUCEDSIZE     
191a0 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72     offsetof(Expr
191b0 2c 69 54 61 62 6c 65 29 20 20 2f 2a 20 43 6f 6d  ,iTable)  /* Com
191c0 6d 6f 6e 20 66 65 61 74 75 72 65 73 20 2a 2f 0a  mon features */.
191d0 23 64 65 66 69 6e 65 20 45 58 50 52 5f 54 4f 4b  #define EXPR_TOK
191e0 45 4e 4f 4e 4c 59 53 49 5a 45 20 20 20 20 20 20  ENONLYSIZE      
191f0 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c 70 4c  offsetof(Expr,pL
19200 65 66 74 29 20 20 20 2f 2a 20 46 65 77 65 72 20  eft)   /* Fewer 
19210 66 65 61 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a  features */../*.
19220 2a 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64 20  ** Flags passed 
19230 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 45 78  to the sqlite3Ex
19240 70 72 44 75 70 28 29 20 66 75 6e 63 74 69 6f 6e  prDup() function
19250 2e 20 53 65 65 20 74 68 65 20 68 65 61 64 65 72  . See the header
19260 20 63 6f 6d 6d 65 6e 74 0a 2a 2a 20 61 62 6f 76   comment.** abov
19270 65 20 73 71 6c 69 74 65 33 45 78 70 72 44 75 70  e sqlite3ExprDup
19280 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a  () for details..
19290 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 44  */.#define EXPRD
192a0 55 50 5f 52 45 44 55 43 45 20 20 20 20 20 20 20  UP_REDUCE       
192b0 20 20 30 78 30 30 30 31 20 20 2f 2a 20 55 73 65    0x0001  /* Use
192c0 64 20 72 65 64 75 63 65 64 2d 73 69 7a 65 20 45  d reduced-size E
192d0 78 70 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a  xpr nodes */../*
192e0 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 65 78  .** A list of ex
192f0 70 72 65 73 73 69 6f 6e 73 2e 20 20 45 61 63 68  pressions.  Each
19300 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20   expression may 
19310 6f 70 74 69 6f 6e 61 6c 6c 79 20 68 61 76 65 20  optionally have 
19320 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20 41 6e 20 65  a.** name.  An e
19330 78 70 72 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e 61  xpr/name combina
19340 74 69 6f 6e 20 63 61 6e 20 62 65 20 75 73 65 64  tion can be used
19350 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73   in several ways
19360 2c 20 73 75 63 68 0a 2a 2a 20 61 73 20 74 68 65  , such.** as the
19370 20 6c 69 73 74 20 6f 66 20 22 65 78 70 72 20 41   list of "expr A
19380 53 20 49 44 22 20 66 69 65 6c 64 73 20 66 6f 6c  S ID" fields fol
19390 6c 6f 77 69 6e 67 20 61 20 22 53 45 4c 45 43 54  lowing a "SELECT
193a0 22 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 6c  " or in the.** l
193b0 69 73 74 20 6f 66 20 22 49 44 20 3d 20 65 78 70  ist of "ID = exp
193c0 72 22 20 69 74 65 6d 73 20 69 6e 20 61 6e 20 55  r" items in an U
193d0 50 44 41 54 45 2e 20 20 41 20 6c 69 73 74 20 6f  PDATE.  A list o
193e0 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63 61  f expressions ca
193f0 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 73 65  n.** also be use
19400 64 20 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e  d as the argumen
19410 74 20 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e 2c  t to a function,
19420 20 69 6e 20 77 68 69 63 68 20 63 61 73 65 20 74   in which case t
19430 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69  he a.zName.** fi
19440 65 6c 64 20 69 73 20 6e 6f 74 20 75 73 65 64 2e  eld is not used.
19450 0a 2a 2a 0a 2a 2a 20 42 79 20 64 65 66 61 75 6c  .**.** By defaul
19460 74 20 74 68 65 20 45 78 70 72 2e 7a 53 70 61 6e  t the Expr.zSpan
19470 20 66 69 65 6c 64 20 68 6f 6c 64 73 20 61 20 68   field holds a h
19480 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65 20 64 65  uman-readable de
19490 73 63 72 69 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20  scription of.** 
194a0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 74  the expression t
194b0 68 61 74 20 69 73 20 75 73 65 64 20 69 6e 20 74  hat is used in t
194c0 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66  he generation of
194d0 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
194e0 61 6e 64 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61  and.** column la
194f0 62 65 6c 73 2e 20 20 49 6e 20 74 68 69 73 20 63  bels.  In this c
19500 61 73 65 2c 20 45 78 70 72 2e 7a 53 70 61 6e 20  ase, Expr.zSpan 
19510 69 73 20 74 79 70 69 63 61 6c 6c 79 20 74 68 65  is typically the
19520 20 74 65 78 74 20 6f 66 20 61 0a 2a 2a 20 63 6f   text of a.** co
19530 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  lumn expression 
19540 61 73 20 69 74 20 65 78 69 73 74 73 20 69 6e 20  as it exists in 
19550 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
19560 6e 74 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 66  nt.  However, if
19570 0a 2a 2a 20 74 68 65 20 62 53 70 61 6e 49 73 54  .** the bSpanIsT
19580 61 62 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20  ab flag is set, 
19590 74 68 65 6e 20 7a 53 70 61 6e 20 69 73 20 6f 76  then zSpan is ov
195a0 65 72 6c 6f 61 64 65 64 20 74 6f 20 6d 65 61 6e  erloaded to mean
195b0 20 74 68 65 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20   the name.** of 
195c0 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d  the result colum
195d0 6e 20 69 6e 20 74 68 65 20 66 6f 72 6d 3a 20 44  n in the form: D
195e0 41 54 41 42 41 53 45 2e 54 41 42 4c 45 2e 43 4f  ATABASE.TABLE.CO
195f0 4c 55 4d 4e 2e 20 20 54 68 69 73 20 6c 61 74 65  LUMN.  This late
19600 72 0a 2a 2a 20 66 6f 72 6d 20 69 73 20 75 73 65  r.** form is use
19610 64 20 66 6f 72 20 6e 61 6d 65 20 72 65 73 6f 6c  d for name resol
19620 75 74 69 6f 6e 20 77 69 74 68 20 6e 65 73 74 65  ution with neste
19630 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 73 2e 0a  d FROM clauses..
19640 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 4c 69  */.struct ExprLi
19650 73 74 20 7b 0a 20 20 69 6e 74 20 6e 45 78 70 72  st {.  int nExpr
19660 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
19670 20 4e 75 6d 62 65 72 20 6f 66 20 65 78 70 72 65   Number of expre
19680 73 73 69 6f 6e 73 20 6f 6e 20 74 68 65 20 6c 69  ssions on the li
19690 73 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 6c 6c  st */.  int nAll
196a0 6f 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  oc;            /
196b0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 5b 5d 20  * Number of a[] 
196c0 73 6c 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64 20  slots allocated 
196d0 2a 2f 0a 20 20 73 74 72 75 63 74 20 45 78 70 72  */.  struct Expr
196e0 4c 69 73 74 5f 69 74 65 6d 20 7b 20 2f 2a 20 46  List_item { /* F
196f0 6f 72 20 65 61 63 68 20 65 78 70 72 65 73 73 69  or each expressi
19700 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73 74 20 2a  on in the list *
19710 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70  /.    Expr *pExp
19720 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  r;            /*
19730 20 54 68 65 20 70 61 72 73 65 20 74 72 65 65 20   The parse tree 
19740 66 6f 72 20 74 68 69 73 20 65 78 70 72 65 73 73  for this express
19750 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  ion */.    char 
19760 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
19770 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 61 73 73 6f     /* Token asso
19780 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73  ciated with this
19790 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20   expression */. 
197a0 20 20 20 63 68 61 72 20 2a 7a 53 70 61 6e 3b 20     char *zSpan; 
197b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 72             /* Or
197c0 69 67 69 6e 61 6c 20 74 65 78 74 20 6f 66 20 74  iginal text of t
197d0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  he expression */
197e0 0a 20 20 20 20 75 38 20 73 6f 72 74 4f 72 64 65  .    u8 sortOrde
197f0 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  r;           /* 
19800 31 20 66 6f 72 20 44 45 53 43 20 6f 72 20 30 20  1 for DESC or 0 
19810 66 6f 72 20 41 53 43 20 2a 2f 0a 20 20 20 20 75  for ASC */.    u
19820 6e 73 69 67 6e 65 64 20 64 6f 6e 65 20 3a 31 3b  nsigned done :1;
19830 20 20 20 20 20 20 20 2f 2a 20 41 20 66 6c 61 67         /* A flag
19840 20 74 6f 20 69 6e 64 69 63 61 74 65 20 77 68 65   to indicate whe
19850 6e 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20  n processing is 
19860 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 20 20  finished */.    
19870 75 6e 73 69 67 6e 65 64 20 62 53 70 61 6e 49 73  unsigned bSpanIs
19880 54 61 62 20 3a 31 3b 20 2f 2a 20 7a 53 70 61 6e  Tab :1; /* zSpan
19890 20 68 6f 6c 64 73 20 44 42 2e 54 41 42 4c 45 2e   holds DB.TABLE.
198a0 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20 20 20 75 6e  COLUMN */.    un
198b0 73 69 67 6e 65 64 20 72 65 75 73 61 62 6c 65 20  signed reusable 
198c0 3a 31 3b 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e  :1;   /* Constan
198d0 74 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  t expression is 
198e0 72 65 75 73 61 62 6c 65 20 2a 2f 0a 20 20 20 20  reusable */.    
198f0 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20 73 74  union {.      st
19900 72 75 63 74 20 7b 0a 20 20 20 20 20 20 20 20 75  ruct {.        u
19910 31 36 20 69 4f 72 64 65 72 42 79 43 6f 6c 3b 20  16 iOrderByCol; 
19920 20 20 20 20 20 2f 2a 20 46 6f 72 20 4f 52 44 45       /* For ORDE
19930 52 20 42 59 2c 20 63 6f 6c 75 6d 6e 20 6e 75 6d  R BY, column num
19940 62 65 72 20 69 6e 20 72 65 73 75 6c 74 20 73 65  ber in result se
19950 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 75 31 36  t */.        u16
19960 20 69 41 6c 69 61 73 3b 20 20 20 20 20 20 20 20   iAlias;        
19970 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 74 6f     /* Index into
19980 20 50 61 72 73 65 2e 61 41 6c 69 61 73 5b 5d 20   Parse.aAlias[] 
19990 66 6f 72 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20  for zName */.   
199a0 20 20 20 7d 20 78 3b 0a 20 20 20 20 20 20 69 6e     } x;.      in
199b0 74 20 69 43 6f 6e 73 74 45 78 70 72 52 65 67 3b  t iConstExprReg;
199c0 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
199d0 72 20 69 6e 20 77 68 69 63 68 20 45 78 70 72 20  r in which Expr 
199e0 76 61 6c 75 65 20 69 73 20 63 61 63 68 65 64 20  value is cached 
199f0 2a 2f 0a 20 20 20 20 7d 20 75 3b 0a 20 20 7d 20  */.    } u;.  } 
19a00 61 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20  a[1];           
19a10 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 73 6c         /* One sl
19a20 6f 74 20 66 6f 72 20 65 61 63 68 20 65 78 70 72  ot for each expr
19a30 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 6c 69  ession in the li
19a40 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  st */.};../*.** 
19a50 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
19a60 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73  his structure is
19a70 20 75 73 65 64 20 62 79 20 74 68 65 20 70 61 72   used by the par
19a80 73 65 72 20 74 6f 20 72 65 63 6f 72 64 20 62 6f  ser to record bo
19a90 74 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 20  th.** the parse 
19aa0 74 72 65 65 20 66 6f 72 20 61 6e 20 65 78 70 72  tree for an expr
19ab0 65 73 73 69 6f 6e 20 61 6e 64 20 74 68 65 20 73  ession and the s
19ac0 70 61 6e 20 6f 66 20 69 6e 70 75 74 20 74 65 78  pan of input tex
19ad0 74 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 72  t for an.** expr
19ae0 65 73 73 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  ession..*/.struc
19af0 74 20 45 78 70 72 53 70 61 6e 20 7b 0a 20 20 45  t ExprSpan {.  E
19b00 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20  xpr *pExpr;     
19b10 20 20 20 20 20 2f 2a 20 54 68 65 20 65 78 70 72       /* The expr
19b20 65 73 73 69 6f 6e 20 70 61 72 73 65 20 74 72 65  ession parse tre
19b30 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  e */.  const cha
19b40 72 20 2a 7a 53 74 61 72 74 3b 20 20 20 2f 2a 20  r *zStart;   /* 
19b50 46 69 72 73 74 20 63 68 61 72 61 63 74 65 72 20  First character 
19b60 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a 2f  of input text */
19b70 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
19b80 45 6e 64 3b 20 20 20 20 20 2f 2a 20 4f 6e 65 20  End;     /* One 
19b90 63 68 61 72 61 63 74 65 72 20 70 61 73 74 20 74  character past t
19ba0 68 65 20 65 6e 64 20 6f 66 20 69 6e 70 75 74 20  he end of input 
19bb0 74 65 78 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  text */.};../*.*
19bc0 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
19bd0 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
19be0 63 61 6e 20 68 6f 6c 64 20 61 20 73 69 6d 70 6c  can hold a simpl
19bf0 65 20 6c 69 73 74 20 6f 66 20 69 64 65 6e 74 69  e list of identi
19c00 66 69 65 72 73 2c 0a 2a 2a 20 73 75 63 68 20 61  fiers,.** such a
19c10 73 20 74 68 65 20 6c 69 73 74 20 22 61 2c 62 2c  s the list "a,b,
19c20 63 22 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77  c" in the follow
19c30 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 73 3a 0a  ing statements:.
19c40 2a 2a 0a 2a 2a 20 20 20 20 20 20 49 4e 53 45 52  **.**      INSER
19c50 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20  T INTO t(a,b,c) 
19c60 56 41 4c 55 45 53 20 2e 2e 2e 3b 0a 2a 2a 20 20  VALUES ...;.**  
19c70 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58      CREATE INDEX
19c80 20 69 64 78 20 4f 4e 20 74 28 61 2c 62 2c 63 29   idx ON t(a,b,c)
19c90 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45  ;.**      CREATE
19ca0 20 54 52 49 47 47 45 52 20 74 72 69 67 20 42 45   TRIGGER trig BE
19cb0 46 4f 52 45 20 55 50 44 41 54 45 20 4f 4e 20 74  FORE UPDATE ON t
19cc0 28 61 2c 62 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a 0a  (a,b,c) ...;.**.
19cd0 2a 2a 20 54 68 65 20 49 64 4c 69 73 74 2e 61 2e  ** The IdList.a.
19ce0 69 64 78 20 66 69 65 6c 64 20 69 73 20 75 73 65  idx field is use
19cf0 64 20 77 68 65 6e 20 74 68 65 20 49 64 4c 69 73  d when the IdLis
19d00 74 20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65  t represents the
19d10 20 6c 69 73 74 20 6f 66 0a 2a 2a 20 63 6f 6c 75   list of.** colu
19d20 6d 6e 20 6e 61 6d 65 73 20 61 66 74 65 72 20 61  mn names after a
19d30 20 74 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 61   table name in a
19d40 6e 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65  n INSERT stateme
19d50 6e 74 2e 20 20 49 6e 20 74 68 65 20 73 74 61 74  nt.  In the stat
19d60 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ement.**.**     
19d70 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c  INSERT INTO t(a,
19d80 62 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 49  b,c) ....**.** I
19d90 66 20 22 61 22 20 69 73 20 74 68 65 20 6b 2d 74  f "a" is the k-t
19da0 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 61 62 6c  h column of tabl
19db0 65 20 22 74 22 2c 20 74 68 65 6e 20 49 64 4c 69  e "t", then IdLi
19dc0 73 74 2e 61 5b 30 5d 2e 69 64 78 3d 3d 6b 2e 0a  st.a[0].idx==k..
19dd0 2a 2f 0a 73 74 72 75 63 74 20 49 64 4c 69 73 74  */.struct IdList
19de0 20 7b 0a 20 20 73 74 72 75 63 74 20 49 64 4c 69   {.  struct IdLi
19df0 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 63 68  st_item {.    ch
19e00 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
19e10 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 69  /* Name of the i
19e20 64 65 6e 74 69 66 69 65 72 20 2a 2f 0a 20 20 20  dentifier */.   
19e30 20 69 6e 74 20 69 64 78 3b 20 20 20 20 20 20 20   int idx;       
19e40 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73     /* Index in s
19e50 6f 6d 65 20 54 61 62 6c 65 2e 61 43 6f 6c 5b 5d  ome Table.aCol[]
19e60 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d   of a column nam
19e70 65 64 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20  ed zName */.  } 
19e80 2a 61 3b 0a 20 20 69 6e 74 20 6e 49 64 3b 20 20  *a;.  int nId;  
19e90 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
19ea0 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73 20   of identifiers 
19eb0 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d  on the list */.}
19ec0 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62 69 74  ;../*.** The bit
19ed0 6d 61 73 6b 20 64 61 74 61 74 79 70 65 20 64 65  mask datatype de
19ee0 66 69 6e 65 64 20 62 65 6c 6f 77 20 69 73 20 75  fined below is u
19ef0 73 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73 20  sed for various 
19f00 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a  optimizations..*
19f10 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e 67 20 74 68  *.** Changing th
19f20 69 73 20 66 72 6f 6d 20 61 20 36 34 2d 62 69 74  is from a 64-bit
19f30 20 74 6f 20 61 20 33 32 2d 62 69 74 20 74 79 70   to a 32-bit typ
19f40 65 20 6c 69 6d 69 74 73 20 74 68 65 20 6e 75 6d  e limits the num
19f50 62 65 72 20 6f 66 0a 2a 2a 20 74 61 62 6c 65 73  ber of.** tables
19f60 20 69 6e 20 61 20 6a 6f 69 6e 20 74 6f 20 33 32   in a join to 32
19f70 20 69 6e 73 74 65 61 64 20 6f 66 20 36 34 2e 20   instead of 64. 
19f80 20 42 75 74 20 69 74 20 61 6c 73 6f 20 72 65 64   But it also red
19f90 75 63 65 73 20 74 68 65 20 73 69 7a 65 0a 2a 2a  uces the size.**
19fa0 20 6f 66 20 74 68 65 20 6c 69 62 72 61 72 79 20   of the library 
19fb0 62 79 20 37 33 38 20 62 79 74 65 73 20 6f 6e 20  by 738 bytes on 
19fc0 69 78 38 36 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  ix86..*/.#ifdef 
19fd0 53 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b 5f 54  SQLITE_BITMASK_T
19fe0 59 50 45 0a 20 20 74 79 70 65 64 65 66 20 53 51  YPE.  typedef SQ
19ff0 4c 49 54 45 5f 42 49 54 4d 41 53 4b 5f 54 59 50  LITE_BITMASK_TYP
1a000 45 20 42 69 74 6d 61 73 6b 3b 0a 23 65 6c 73 65  E Bitmask;.#else
1a010 0a 20 20 74 79 70 65 64 65 66 20 75 36 34 20 42  .  typedef u64 B
1a020 69 74 6d 61 73 6b 3b 0a 23 65 6e 64 69 66 0a 0a  itmask;.#endif..
1a030 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72  /*.** The number
1a040 20 6f 66 20 62 69 74 73 20 69 6e 20 61 20 42 69   of bits in a Bi
1a050 74 6d 61 73 6b 2e 20 20 22 42 4d 53 22 20 6d 65  tmask.  "BMS" me
1a060 61 6e 73 20 22 42 69 74 4d 61 73 6b 20 53 69 7a  ans "BitMask Siz
1a070 65 22 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 42  e"..*/.#define B
1a080 4d 53 20 20 28 28 69 6e 74 29 28 73 69 7a 65 6f  MS  ((int)(sizeo
1a090 66 28 42 69 74 6d 61 73 6b 29 2a 38 29 29 0a 0a  f(Bitmask)*8))..
1a0a0 2f 2a 0a 2a 2a 20 41 20 62 69 74 20 69 6e 20 61  /*.** A bit in a
1a0b0 20 42 69 74 6d 61 73 6b 0a 2a 2f 0a 23 64 65 66   Bitmask.*/.#def
1a0c0 69 6e 65 20 4d 41 53 4b 42 49 54 28 6e 29 20 20  ine MASKBIT(n)  
1a0d0 20 28 28 28 42 69 74 6d 61 73 6b 29 31 29 3c 3c   (((Bitmask)1)<<
1a0e0 28 6e 29 29 0a 23 64 65 66 69 6e 65 20 4d 41 53  (n)).#define MAS
1a0f0 4b 42 49 54 33 32 28 6e 29 20 28 28 28 75 6e 73  KBIT32(n) (((uns
1a100 69 67 6e 65 64 20 69 6e 74 29 31 29 3c 3c 28 6e  igned int)1)<<(n
1a110 29 29 0a 23 64 65 66 69 6e 65 20 41 4c 4c 42 49  )).#define ALLBI
1a120 54 53 20 20 20 20 20 20 28 28 42 69 74 6d 61 73  TS      ((Bitmas
1a130 6b 29 2d 31 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  k)-1)../*.** The
1a140 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
1a150 74 75 72 65 20 64 65 73 63 72 69 62 65 73 20 74  ture describes t
1a160 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f  he FROM clause o
1a170 66 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  f a SELECT state
1a180 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63 68 20 74 61  ment..** Each ta
1a190 62 6c 65 20 6f 72 20 73 75 62 71 75 65 72 79 20  ble or subquery 
1a1a0 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  in the FROM clau
1a1b0 73 65 20 69 73 20 61 20 73 65 70 61 72 61 74 65  se is a separate
1a1c0 20 65 6c 65 6d 65 6e 74 20 6f 66 0a 2a 2a 20 74   element of.** t
1a1d0 68 65 20 53 72 63 4c 69 73 74 2e 61 5b 5d 20 61  he SrcList.a[] a
1a1e0 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68  rray..**.** With
1a1f0 20 74 68 65 20 61 64 64 69 74 69 6f 6e 20 6f 66   the addition of
1a200 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61   multiple databa
1a210 73 65 20 73 75 70 70 6f 72 74 2c 20 74 68 65 20  se support, the 
1a220 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
1a230 75 72 65 0a 2a 2a 20 63 61 6e 20 61 6c 73 6f 20  ure.** can also 
1a240 62 65 20 75 73 65 64 20 74 6f 20 64 65 73 63 72  be used to descr
1a250 69 62 65 20 61 20 70 61 72 74 69 63 75 6c 61 72  ibe a particular
1a260 20 74 61 62 6c 65 20 73 75 63 68 20 61 73 20 74   table such as t
1a270 68 65 20 74 61 62 6c 65 20 74 68 61 74 0a 2a 2a  he table that.**
1a280 20 69 73 20 6d 6f 64 69 66 69 65 64 20 62 79 20   is modified by 
1a290 61 6e 20 49 4e 53 45 52 54 2c 20 44 45 4c 45 54  an INSERT, DELET
1a2a0 45 2c 20 6f 72 20 55 50 44 41 54 45 20 73 74 61  E, or UPDATE sta
1a2b0 74 65 6d 65 6e 74 2e 20 20 49 6e 20 73 74 61 6e  tement.  In stan
1a2c0 64 61 72 64 20 53 51 4c 2c 0a 2a 2a 20 73 75 63  dard SQL,.** suc
1a2d0 68 20 61 20 74 61 62 6c 65 20 6d 75 73 74 20 62  h a table must b
1a2e0 65 20 61 20 73 69 6d 70 6c 65 20 6e 61 6d 65 3a  e a simple name:
1a2f0 20 49 44 2e 20 20 42 75 74 20 69 6e 20 53 51 4c   ID.  But in SQL
1a300 69 74 65 2c 20 74 68 65 20 74 61 62 6c 65 20 63  ite, the table c
1a310 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65 20 69 64 65  an.** now be ide
1a320 6e 74 69 66 69 65 64 20 62 79 20 61 20 64 61 74  ntified by a dat
1a330 61 62 61 73 65 20 6e 61 6d 65 2c 20 61 20 64 6f  abase name, a do
1a340 74 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c  t, then the tabl
1a350 65 20 6e 61 6d 65 3a 20 49 44 2e 49 44 2e 0a 2a  e name: ID.ID..*
1a360 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69 6e 74 79 70  *.** The jointyp
1a370 65 20 73 74 61 72 74 73 20 6f 75 74 20 73 68 6f  e starts out sho
1a380 77 69 6e 67 20 74 68 65 20 6a 6f 69 6e 20 74 79  wing the join ty
1a390 70 65 20 62 65 74 77 65 65 6e 20 74 68 65 20 63  pe between the c
1a3a0 75 72 72 65 6e 74 20 74 61 62 6c 65 0a 2a 2a 20  urrent table.** 
1a3b0 61 6e 64 20 74 68 65 20 6e 65 78 74 20 74 61 62  and the next tab
1a3c0 6c 65 20 6f 6e 20 74 68 65 20 6c 69 73 74 2e 20  le on the list. 
1a3d0 20 54 68 65 20 70 61 72 73 65 72 20 62 75 69 6c   The parser buil
1a3e0 64 73 20 74 68 65 20 6c 69 73 74 20 74 68 69 73  ds the list this
1a3f0 20 77 61 79 2e 0a 2a 2a 20 42 75 74 20 73 71 6c   way..** But sql
1a400 69 74 65 33 53 72 63 4c 69 73 74 53 68 69 66 74  ite3SrcListShift
1a410 4a 6f 69 6e 54 79 70 65 28 29 20 6c 61 74 65 72  JoinType() later
1a420 20 73 68 69 66 74 73 20 74 68 65 20 6a 6f 69 6e   shifts the join
1a430 74 79 70 65 73 20 73 6f 20 74 68 61 74 20 65 61  types so that ea
1a440 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79 70 65 20 65  ch.** jointype e
1a450 78 70 72 65 73 73 65 73 20 74 68 65 20 6a 6f 69  xpresses the joi
1a460 6e 20 62 65 74 77 65 65 6e 20 74 68 65 20 74 61  n between the ta
1a470 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65 76  ble and the prev
1a480 69 6f 75 73 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  ious table..**.*
1a490 2a 20 49 6e 20 74 68 65 20 63 6f 6c 55 73 65 64  * In the colUsed
1a4a0 20 66 69 65 6c 64 2c 20 74 68 65 20 68 69 67 68   field, the high
1a4b0 2d 6f 72 64 65 72 20 62 69 74 20 28 62 69 74 20  -order bit (bit 
1a4c0 36 33 29 20 69 73 20 73 65 74 20 69 66 20 74 68  63) is set if th
1a4d0 65 20 74 61 62 6c 65 0a 2a 2a 20 63 6f 6e 74 61  e table.** conta
1a4e0 69 6e 73 20 6d 6f 72 65 20 74 68 61 6e 20 36 33  ins more than 63
1a4f0 20 63 6f 6c 75 6d 6e 73 20 61 6e 64 20 74 68 65   columns and the
1a500 20 36 34 2d 74 68 20 6f 72 20 6c 61 74 65 72 20   64-th or later 
1a510 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64 2e 0a  column is used..
1a520 2a 2f 0a 73 74 72 75 63 74 20 53 72 63 4c 69 73  */.struct SrcLis
1a530 74 20 7b 0a 20 20 69 6e 74 20 6e 53 72 63 3b 20  t {.  int nSrc; 
1a540 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1a550 20 6f 66 20 74 61 62 6c 65 73 20 6f 72 20 73 75   of tables or su
1a560 62 71 75 65 72 69 65 73 20 69 6e 20 74 68 65 20  bqueries in the 
1a570 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20  FROM clause */. 
1a580 20 75 33 32 20 6e 41 6c 6c 6f 63 3b 20 20 20 20   u32 nAlloc;    
1a590 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
1a5a0 6e 74 72 69 65 73 20 61 6c 6c 6f 63 61 74 65 64  ntries allocated
1a5b0 20 69 6e 20 61 5b 5d 20 62 65 6c 6f 77 20 2a 2f   in a[] below */
1a5c0 0a 20 20 73 74 72 75 63 74 20 53 72 63 4c 69 73  .  struct SrcLis
1a5d0 74 5f 69 74 65 6d 20 7b 0a 20 20 20 20 53 63 68  t_item {.    Sch
1a5e0 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 2f  ema *pSchema;  /
1a5f0 2a 20 53 63 68 65 6d 61 20 74 6f 20 77 68 69 63  * Schema to whic
1a600 68 20 74 68 69 73 20 69 74 65 6d 20 69 73 20 66  h this item is f
1a610 69 78 65 64 20 2a 2f 0a 20 20 20 20 63 68 61 72  ixed */.    char
1a620 20 2a 7a 44 61 74 61 62 61 73 65 3b 20 20 2f 2a   *zDatabase;  /*
1a630 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62 61 73   Name of databas
1a640 65 20 68 6f 6c 64 69 6e 67 20 74 68 69 73 20 74  e holding this t
1a650 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72  able */.    char
1a660 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a   *zName;      /*
1a670 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   Name of the tab
1a680 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  le */.    char *
1a690 7a 41 6c 69 61 73 3b 20 20 20 20 20 2f 2a 20 54  zAlias;     /* T
1a6a0 68 65 20 22 42 22 20 70 61 72 74 20 6f 66 20 61  he "B" part of a
1a6b0 20 22 41 20 41 53 20 42 22 20 70 68 72 61 73 65   "A AS B" phrase
1a6c0 2e 20 20 7a 4e 61 6d 65 20 69 73 20 74 68 65 20  .  zName is the 
1a6d0 22 41 22 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65  "A" */.    Table
1a6e0 20 2a 70 54 61 62 3b 20 20 20 20 20 20 2f 2a 20   *pTab;      /* 
1a6f0 41 6e 20 53 51 4c 20 74 61 62 6c 65 20 63 6f 72  An SQL table cor
1a700 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 4e  responding to zN
1a710 61 6d 65 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63  ame */.    Selec
1a720 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 2f 2a 20  t *pSelect;  /* 
1a730 41 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  A SELECT stateme
1a740 6e 74 20 75 73 65 64 20 69 6e 20 70 6c 61 63 65  nt used in place
1a750 20 6f 66 20 61 20 74 61 62 6c 65 20 6e 61 6d 65   of a table name
1a760 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64 64 72   */.    int addr
1a770 46 69 6c 6c 53 75 62 3b 20 20 2f 2a 20 41 64 64  FillSub;  /* Add
1a780 72 65 73 73 20 6f 66 20 73 75 62 72 6f 75 74 69  ress of subrouti
1a790 6e 65 20 74 6f 20 6d 61 6e 69 66 65 73 74 20 61  ne to manifest a
1a7a0 20 73 75 62 71 75 65 72 79 20 2a 2f 0a 20 20 20   subquery */.   
1a7b0 20 69 6e 74 20 72 65 67 52 65 74 75 72 6e 3b 20   int regReturn; 
1a7c0 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68     /* Register h
1a7d0 6f 6c 64 69 6e 67 20 72 65 74 75 72 6e 20 61 64  olding return ad
1a7e0 64 72 65 73 73 20 6f 66 20 61 64 64 72 46 69 6c  dress of addrFil
1a7f0 6c 53 75 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20  lSub */.    int 
1a800 72 65 67 52 65 73 75 6c 74 3b 20 20 20 20 2f 2a  regResult;    /*
1a810 20 52 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69   Registers holdi
1a820 6e 67 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20  ng results of a 
1a830 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20  co-routine */.  
1a840 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20    struct {.     
1a850 20 75 38 20 6a 6f 69 6e 74 79 70 65 3b 20 20 20   u8 jointype;   
1a860 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 6a 6f     /* Type of jo
1a870 69 6e 20 62 65 74 77 65 65 6e 20 74 68 69 73 20  in between this 
1a880 74 61 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72  table and the pr
1a890 65 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20 20 20  evious */.      
1a8a0 75 6e 73 69 67 6e 65 64 20 6e 6f 74 49 6e 64 65  unsigned notInde
1a8b0 78 65 64 20 3a 31 3b 20 20 20 20 2f 2a 20 54 72  xed :1;    /* Tr
1a8c0 75 65 20 69 66 20 74 68 65 72 65 20 69 73 20 61  ue if there is a
1a8d0 20 4e 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61   NOT INDEXED cla
1a8e0 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73  use */.      uns
1a8f0 69 67 6e 65 64 20 69 73 49 6e 64 65 78 65 64 42  igned isIndexedB
1a900 79 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20  y :1;   /* True 
1a910 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 49  if there is an I
1a920 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75 73 65  NDEXED BY clause
1a930 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e   */.      unsign
1a940 65 64 20 69 73 54 61 62 46 75 6e 63 20 3a 31 3b  ed isTabFunc :1;
1a950 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
1a960 74 61 62 6c 65 2d 76 61 6c 75 65 64 2d 66 75 6e  table-valued-fun
1a970 63 74 69 6f 6e 20 73 79 6e 74 61 78 20 2a 2f 0a  ction syntax */.
1a980 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69        unsigned i
1a990 73 43 6f 72 72 65 6c 61 74 65 64 20 3a 31 3b 20  sCorrelated :1; 
1a9a0 20 2f 2a 20 54 72 75 65 20 69 66 20 73 75 62 2d   /* True if sub-
1a9b0 71 75 65 72 79 20 69 73 20 63 6f 72 72 65 6c 61  query is correla
1a9c0 74 65 64 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73  ted */.      uns
1a9d0 69 67 6e 65 64 20 76 69 61 43 6f 72 6f 75 74 69  igned viaCorouti
1a9e0 6e 65 20 3a 31 3b 20 20 2f 2a 20 49 6d 70 6c 65  ne :1;  /* Imple
1a9f0 6d 65 6e 74 65 64 20 61 73 20 61 20 63 6f 2d 72  mented as a co-r
1aa00 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20 20 20  outine */.      
1aa10 75 6e 73 69 67 6e 65 64 20 69 73 52 65 63 75 72  unsigned isRecur
1aa20 73 69 76 65 20 3a 31 3b 20 20 20 2f 2a 20 54 72  sive :1;   /* Tr
1aa30 75 65 20 66 6f 72 20 72 65 63 75 72 73 69 76 65  ue for recursive
1aa40 20 72 65 66 65 72 65 6e 63 65 20 69 6e 20 57 49   reference in WI
1aa50 54 48 20 2a 2f 0a 20 20 20 20 7d 20 66 67 3b 0a  TH */.    } fg;.
1aa60 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1aa70 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 20 20  MIT_EXPLAIN.    
1aa80 75 38 20 69 53 65 6c 65 63 74 49 64 3b 20 20 20  u8 iSelectId;   
1aa90 20 20 2f 2a 20 49 66 20 70 53 65 6c 65 63 74 21    /* If pSelect!
1aaa0 3d 30 2c 20 74 68 65 20 69 64 20 6f 66 20 74 68  =0, the id of th
1aab0 65 20 73 75 62 2d 73 65 6c 65 63 74 20 69 6e 20  e sub-select in 
1aac0 45 51 50 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  EQP */.#endif.  
1aad0 20 20 69 6e 74 20 69 43 75 72 73 6f 72 3b 20 20    int iCursor;  
1aae0 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20      /* The VDBE 
1aaf0 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 75 73  cursor number us
1ab00 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 69  ed to access thi
1ab10 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 45  s table */.    E
1ab20 78 70 72 20 2a 70 4f 6e 3b 20 20 20 20 20 20 20  xpr *pOn;       
1ab30 20 2f 2a 20 54 68 65 20 4f 4e 20 63 6c 61 75 73   /* The ON claus
1ab40 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20  e of a join */. 
1ab50 20 20 20 49 64 4c 69 73 74 20 2a 70 55 73 69 6e     IdList *pUsin
1ab60 67 3b 20 20 20 2f 2a 20 54 68 65 20 55 53 49 4e  g;   /* The USIN
1ab70 47 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f  G clause of a jo
1ab80 69 6e 20 2a 2f 0a 20 20 20 20 42 69 74 6d 61 73  in */.    Bitmas
1ab90 6b 20 63 6f 6c 55 73 65 64 3b 20 20 2f 2a 20 42  k colUsed;  /* B
1aba0 69 74 20 4e 20 28 31 3c 3c 4e 29 20 73 65 74 20  it N (1<<N) set 
1abb0 69 66 20 63 6f 6c 75 6d 6e 20 4e 20 6f 66 20 70  if column N of p
1abc0 54 61 62 20 69 73 20 75 73 65 64 20 2a 2f 0a 20  Tab is used */. 
1abd0 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 20     union {.     
1abe0 20 63 68 61 72 20 2a 7a 49 6e 64 65 78 65 64 42   char *zIndexedB
1abf0 79 3b 20 20 20 20 2f 2a 20 49 64 65 6e 74 69 66  y;    /* Identif
1ac00 69 65 72 20 66 72 6f 6d 20 22 49 4e 44 45 58 45  ier from "INDEXE
1ac10 44 20 42 59 20 3c 7a 49 6e 64 65 78 3e 22 20 63  D BY <zIndex>" c
1ac20 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 45  lause */.      E
1ac30 78 70 72 4c 69 73 74 20 2a 70 46 75 6e 63 41 72  xprList *pFuncAr
1ac40 67 3b 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 73  g;  /* Arguments
1ac50 20 74 6f 20 74 61 62 6c 65 2d 76 61 6c 75 65 64   to table-valued
1ac60 2d 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20  -function */.   
1ac70 20 7d 20 75 31 3b 0a 20 20 20 20 49 6e 64 65 78   } u1;.    Index
1ac80 20 2a 70 49 42 49 6e 64 65 78 3b 20 20 2f 2a 20   *pIBIndex;  /* 
1ac90 49 6e 64 65 78 20 73 74 72 75 63 74 75 72 65 20  Index structure 
1aca0 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f  corresponding to
1acb0 20 75 31 2e 7a 49 6e 64 65 78 65 64 42 79 20 2a   u1.zIndexedBy *
1acc0 2f 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20  /.  } a[1];     
1acd0 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65          /* One e
1ace0 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20 69 64  ntry for each id
1acf0 65 6e 74 69 66 69 65 72 20 6f 6e 20 74 68 65 20  entifier on the 
1ad00 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  list */.};../*.*
1ad10 2a 20 50 65 72 6d 69 74 74 65 64 20 76 61 6c 75  * Permitted valu
1ad20 65 73 20 6f 66 20 74 68 65 20 53 72 63 4c 69 73  es of the SrcLis
1ad30 74 2e 61 2e 6a 6f 69 6e 74 79 70 65 20 66 69 65  t.a.jointype fie
1ad40 6c 64 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  ld.*/.#define JT
1ad50 5f 49 4e 4e 45 52 20 20 20 20 20 30 78 30 30 30  _INNER     0x000
1ad60 31 20 20 20 20 2f 2a 20 41 6e 79 20 6b 69 6e 64  1    /* Any kind
1ad70 20 6f 66 20 69 6e 6e 65 72 20 6f 72 20 63 72 6f   of inner or cro
1ad80 73 73 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  ss join */.#defi
1ad90 6e 65 20 4a 54 5f 43 52 4f 53 53 20 20 20 20 20  ne JT_CROSS     
1ada0 30 78 30 30 30 32 20 20 20 20 2f 2a 20 45 78 70  0x0002    /* Exp
1adb0 6c 69 63 69 74 20 75 73 65 20 6f 66 20 74 68 65  licit use of the
1adc0 20 43 52 4f 53 53 20 6b 65 79 77 6f 72 64 20 2a   CROSS keyword *
1add0 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4e 41 54  /.#define JT_NAT
1ade0 55 52 41 4c 20 20 20 30 78 30 30 30 34 20 20 20  URAL   0x0004   
1adf0 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 20 22   /* True for a "
1ae00 6e 61 74 75 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f  natural" join */
1ae10 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4c 45 46 54  .#define JT_LEFT
1ae20 20 20 20 20 20 20 30 78 30 30 30 38 20 20 20 20        0x0008    
1ae30 2f 2a 20 4c 65 66 74 20 6f 75 74 65 72 20 6a 6f  /* Left outer jo
1ae40 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  in */.#define JT
1ae50 5f 52 49 47 48 54 20 20 20 20 20 30 78 30 30 31  _RIGHT     0x001
1ae60 30 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 75  0    /* Right ou
1ae70 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66  ter join */.#def
1ae80 69 6e 65 20 4a 54 5f 4f 55 54 45 52 20 20 20 20  ine JT_OUTER    
1ae90 20 30 78 30 30 32 30 20 20 20 20 2f 2a 20 54 68   0x0020    /* Th
1aea0 65 20 22 4f 55 54 45 52 22 20 6b 65 79 77 6f 72  e "OUTER" keywor
1aeb0 64 20 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a  d is present */.
1aec0 23 64 65 66 69 6e 65 20 4a 54 5f 45 52 52 4f 52  #define JT_ERROR
1aed0 20 20 20 20 20 30 78 30 30 34 30 20 20 20 20 2f       0x0040    /
1aee0 2a 20 75 6e 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73  * unknown or uns
1aef0 75 70 70 6f 72 74 65 64 20 6a 6f 69 6e 20 74 79  upported join ty
1af00 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c  pe */.../*.** Fl
1af10 61 67 73 20 61 70 70 72 6f 70 72 69 61 74 65 20  ags appropriate 
1af20 66 6f 72 20 74 68 65 20 77 63 74 72 6c 46 6c 61  for the wctrlFla
1af30 67 73 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20  gs parameter of 
1af40 73 71 6c 69 74 65 33 57 68 65 72 65 42 65 67 69  sqlite3WhereBegi
1af50 6e 28 29 0a 2a 2a 20 61 6e 64 20 74 68 65 20 57  n().** and the W
1af60 68 65 72 65 49 6e 66 6f 2e 77 63 74 72 6c 46 6c  hereInfo.wctrlFl
1af70 61 67 73 20 6d 65 6d 62 65 72 2e 0a 2a 2a 0a 2a  ags member..**.*
1af80 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69  * Value constrai
1af90 6e 74 73 20 28 65 6e 66 6f 72 63 65 64 20 76 69  nts (enforced vi
1afa0 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20  a assert()):.** 
1afb0 20 20 20 20 57 48 45 52 45 5f 55 53 45 5f 4c 49      WHERE_USE_LI
1afc0 4d 49 54 20 20 3d 3d 20 53 46 5f 46 69 78 65 64  MIT  == SF_Fixed
1afd0 4c 69 6d 69 74 0a 2a 2f 0a 23 64 65 66 69 6e 65  Limit.*/.#define
1afe0 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4e   WHERE_ORDERBY_N
1aff0 4f 52 4d 41 4c 20 20 20 30 78 30 30 30 30 20 2f  ORMAL   0x0000 /
1b000 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66 69  * No-op */.#defi
1b010 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59  ne WHERE_ORDERBY
1b020 5f 4d 49 4e 20 20 20 20 20 20 30 78 30 30 30 31  _MIN      0x0001
1b030 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f   /* ORDER BY pro
1b040 63 65 73 73 69 6e 67 20 66 6f 72 20 6d 69 6e 28  cessing for min(
1b050 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e  ) func */.#defin
1b060 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f  e WHERE_ORDERBY_
1b070 4d 41 58 20 20 20 20 20 20 30 78 30 30 30 32 20  MAX      0x0002 
1b080 2f 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63  /* ORDER BY proc
1b090 65 73 73 69 6e 67 20 66 6f 72 20 6d 61 78 28 29  essing for max()
1b0a0 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65   func */.#define
1b0b0 20 57 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f 44   WHERE_ONEPASS_D
1b0c0 45 53 49 52 45 44 20 20 30 78 30 30 30 34 20 2f  ESIRED  0x0004 /
1b0d0 2a 20 57 61 6e 74 20 74 6f 20 64 6f 20 6f 6e 65  * Want to do one
1b0e0 2d 70 61 73 73 20 55 50 44 41 54 45 2f 44 45 4c  -pass UPDATE/DEL
1b0f0 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ETE */.#define W
1b100 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f 4d 55 4c  HERE_ONEPASS_MUL
1b110 54 49 52 4f 57 20 30 78 30 30 30 38 20 2f 2a 20  TIROW 0x0008 /* 
1b120 4f 4e 45 50 41 53 53 20 69 73 20 6f 6b 20 77 69  ONEPASS is ok wi
1b130 74 68 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73  th multiple rows
1b140 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1b150 45 5f 44 55 50 4c 49 43 41 54 45 53 5f 4f 4b 20  E_DUPLICATES_OK 
1b160 20 20 20 30 78 30 30 31 30 20 2f 2a 20 4f 6b 20     0x0010 /* Ok 
1b170 74 6f 20 72 65 74 75 72 6e 20 61 20 72 6f 77 20  to return a row 
1b180 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 63 65 20 2a  more than once *
1b190 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1b1a0 4f 52 5f 53 55 42 43 4c 41 55 53 45 20 20 20 20  OR_SUBCLAUSE    
1b1b0 20 30 78 30 30 32 30 20 2f 2a 20 50 72 6f 63 65   0x0020 /* Proce
1b1c0 73 73 69 6e 67 20 61 20 73 75 62 2d 57 48 45 52  ssing a sub-WHER
1b1d0 45 20 61 73 20 70 61 72 74 20 6f 66 0a 20 20 20  E as part of.   
1b1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b200 20 20 20 2a 2a 20 74 68 65 20 4f 52 20 6f 70 74     ** the OR opt
1b210 69 6d 69 7a 61 74 69 6f 6e 20 20 2a 2f 0a 23 64  imization  */.#d
1b220 65 66 69 6e 65 20 57 48 45 52 45 5f 47 52 4f 55  efine WHERE_GROU
1b230 50 42 59 20 20 20 20 20 20 20 20 20 20 30 78 30  PBY          0x0
1b240 30 34 30 20 2f 2a 20 70 4f 72 64 65 72 42 79 20  040 /* pOrderBy 
1b250 69 73 20 72 65 61 6c 6c 79 20 61 20 47 52 4f 55  is really a GROU
1b260 50 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20  P BY */.#define 
1b270 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 42 59  WHERE_DISTINCTBY
1b280 20 20 20 20 20 20 20 30 78 30 30 38 30 20 2f 2a         0x0080 /*
1b290 20 70 4f 72 64 65 72 62 79 20 69 73 20 72 65 61   pOrderby is rea
1b2a0 6c 6c 79 20 61 20 44 49 53 54 49 4e 43 54 20 63  lly a DISTINCT c
1b2b0 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65  lause */.#define
1b2c0 20 57 48 45 52 45 5f 57 41 4e 54 5f 44 49 53 54   WHERE_WANT_DIST
1b2d0 49 4e 43 54 20 20 20 20 30 78 30 31 30 30 20 2f  INCT    0x0100 /
1b2e0 2a 20 41 6c 6c 20 6f 75 74 70 75 74 20 6e 65 65  * All output nee
1b2f0 64 73 20 74 6f 20 62 65 20 64 69 73 74 69 6e 63  ds to be distinc
1b300 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  t */.#define WHE
1b310 52 45 5f 53 4f 52 54 42 59 47 52 4f 55 50 20 20  RE_SORTBYGROUP  
1b320 20 20 20 20 30 78 30 32 30 30 20 2f 2a 20 53 75      0x0200 /* Su
1b330 70 70 6f 72 74 20 73 71 6c 69 74 65 33 57 68 65  pport sqlite3Whe
1b340 72 65 49 73 53 6f 72 74 65 64 28 29 20 2a 2f 0a  reIsSorted() */.
1b350 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 53 45  #define WHERE_SE
1b360 45 4b 5f 54 41 42 4c 45 20 20 20 20 20 20 20 30  EK_TABLE       0
1b370 78 30 34 30 30 20 2f 2a 20 44 6f 20 6e 6f 74 20  x0400 /* Do not 
1b380 64 65 66 65 72 20 73 65 65 6b 73 20 6f 6e 20 6d  defer seeks on m
1b390 61 69 6e 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65  ain table */.#de
1b3a0 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52  fine WHERE_ORDER
1b3b0 42 59 5f 4c 49 4d 49 54 20 20 20 20 30 78 30 38  BY_LIMIT    0x08
1b3c0 30 30 20 2f 2a 20 4f 52 44 45 52 42 59 2b 4c 49  00 /* ORDERBY+LI
1b3d0 4d 49 54 20 6f 6e 20 74 68 65 20 69 6e 6e 65 72  MIT on the inner
1b3e0 20 6c 6f 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65   loop */.#define
1b3f0 20 57 48 45 52 45 5f 53 45 45 4b 5f 55 4e 49 51   WHERE_SEEK_UNIQ
1b400 5f 54 41 42 4c 45 20 20 30 78 31 30 30 30 20 2f  _TABLE  0x1000 /
1b410 2a 20 44 6f 20 6e 6f 74 20 64 65 66 65 72 20 73  * Do not defer s
1b420 65 65 6b 73 20 69 66 20 75 6e 69 71 75 65 20 2a  eeks if unique *
1b430 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
1b440 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 20            /*    
1b450 20 30 78 32 30 30 30 20 20 20 20 6e 6f 74 20 63   0x2000    not c
1b460 75 72 72 65 6e 74 6c 79 20 75 73 65 64 20 2a 2f  urrently used */
1b470 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 55  .#define WHERE_U
1b480 53 45 5f 4c 49 4d 49 54 20 20 20 20 20 20 20 20  SE_LIMIT        
1b490 30 78 34 30 30 30 20 2f 2a 20 55 73 65 20 74 68  0x4000 /* Use th
1b4a0 65 20 4c 49 4d 49 54 20 69 6e 20 63 6f 73 74 20  e LIMIT in cost 
1b4b0 65 73 74 69 6d 61 74 65 73 20 2a 2f 0a 20 20 20  estimates */.   
1b4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b4d0 20 20 20 20 20 2f 2a 20 20 20 20 20 30 78 38 30       /*     0x80
1b4e0 30 30 20 20 20 20 6e 6f 74 20 63 75 72 72 65 6e  00    not curren
1b4f0 74 6c 79 20 75 73 65 64 20 2a 2f 0a 0a 2f 2a 20  tly used */../* 
1b500 41 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e 20 76  Allowed return v
1b510 61 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c 69 74  alues from sqlit
1b520 65 33 57 68 65 72 65 49 73 44 69 73 74 69 6e 63  e3WhereIsDistinc
1b530 74 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57  t().*/.#define W
1b540 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4e 4f  HERE_DISTINCT_NO
1b550 4f 50 20 20 20 20 20 20 30 20 20 2f 2a 20 44 49  OP      0  /* DI
1b560 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 6e  STINCT keyword n
1b570 6f 74 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69  ot used */.#defi
1b580 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
1b590 54 5f 55 4e 49 51 55 45 20 20 20 20 31 20 20 2f  T_UNIQUE    1  /
1b5a0 2a 20 4e 6f 20 64 75 70 6c 69 63 61 74 65 73 20  * No duplicates 
1b5b0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1b5c0 5f 44 49 53 54 49 4e 43 54 5f 4f 52 44 45 52 45  _DISTINCT_ORDERE
1b5d0 44 20 20 20 32 20 20 2f 2a 20 41 6c 6c 20 64 75  D   2  /* All du
1b5e0 70 6c 69 63 61 74 65 73 20 61 72 65 20 61 64 6a  plicates are adj
1b5f0 61 63 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  acent */.#define
1b600 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f   WHERE_DISTINCT_
1b610 55 4e 4f 52 44 45 52 45 44 20 33 20 20 2f 2a 20  UNORDERED 3  /* 
1b620 44 75 70 6c 69 63 61 74 65 73 20 61 72 65 20 73  Duplicates are s
1b630 63 61 74 74 65 72 65 64 20 2a 2f 0a 0a 2f 2a 0a  cattered */../*.
1b640 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e 74 65 78 74  ** A NameContext
1b650 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6e 74 65   defines a conte
1b660 78 74 20 69 6e 20 77 68 69 63 68 20 74 6f 20 72  xt in which to r
1b670 65 73 6f 6c 76 65 20 74 61 62 6c 65 20 61 6e 64  esolve table and
1b680 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73   column.** names
1b690 2e 20 20 54 68 65 20 63 6f 6e 74 65 78 74 20 63  .  The context c
1b6a0 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6c 69 73  onsists of a lis
1b6b0 74 20 6f 66 20 74 61 62 6c 65 73 20 28 74 68 65  t of tables (the
1b6c0 20 70 53 72 63 4c 69 73 74 29 20 66 69 65 6c 64   pSrcList) field
1b6d0 20 61 6e 64 0a 2a 2a 20 61 20 6c 69 73 74 20 6f   and.** a list o
1b6e0 66 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69  f named expressi
1b6f0 6f 6e 20 28 70 45 4c 69 73 74 29 2e 20 20 54 68  on (pEList).  Th
1b700 65 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69  e named expressi
1b710 6f 6e 20 6c 69 73 74 20 6d 61 79 0a 2a 2a 20 62  on list may.** b
1b720 65 20 4e 55 4c 4c 2e 20 20 54 68 65 20 70 53 72  e NULL.  The pSr
1b730 63 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  c corresponds to
1b740 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
1b750 20 6f 66 20 61 20 53 45 4c 45 43 54 20 6f 72 0a   of a SELECT or.
1b760 2a 2a 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20  ** to the table 
1b770 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f  being operated o
1b780 6e 20 62 79 20 49 4e 53 45 52 54 2c 20 55 50 44  n by INSERT, UPD
1b790 41 54 45 2c 20 6f 72 20 44 45 4c 45 54 45 2e 20  ATE, or DELETE. 
1b7a0 20 54 68 65 0a 2a 2a 20 70 45 4c 69 73 74 20 63   The.** pEList c
1b7b0 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68  orresponds to th
1b7c0 65 20 72 65 73 75 6c 74 20 73 65 74 20 6f 66 20  e result set of 
1b7d0 61 20 53 45 4c 45 43 54 20 61 6e 64 20 69 73 20  a SELECT and is 
1b7e0 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f 74 68 65  NULL for.** othe
1b7f0 72 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a  r statements..**
1b800 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 73  .** NameContexts
1b810 20 63 61 6e 20 62 65 20 6e 65 73 74 65 64 2e 20   can be nested. 
1b820 20 57 68 65 6e 20 72 65 73 6f 6c 76 69 6e 67 20   When resolving 
1b830 6e 61 6d 65 73 2c 20 74 68 65 20 69 6e 6e 65 72  names, the inner
1b840 2d 6d 6f 73 74 0a 2a 2a 20 63 6f 6e 74 65 78 74  -most.** context
1b850 20 69 73 20 73 65 61 72 63 68 65 64 20 66 69 72   is searched fir
1b860 73 74 2e 20 20 49 66 20 6e 6f 20 6d 61 74 63 68  st.  If no match
1b870 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e   is found, the n
1b880 65 78 74 20 6f 75 74 65 72 0a 2a 2a 20 63 6f 6e  ext outer.** con
1b890 74 65 78 74 20 69 73 20 63 68 65 63 6b 65 64 2e  text is checked.
1b8a0 20 20 49 66 20 74 68 65 72 65 20 69 73 20 73 74    If there is st
1b8b0 69 6c 6c 20 6e 6f 20 6d 61 74 63 68 2c 20 74 68  ill no match, th
1b8c0 65 20 6e 65 78 74 20 63 6f 6e 74 65 78 74 0a 2a  e next context.*
1b8d0 2a 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20 54  * is checked.  T
1b8e0 68 69 73 20 70 72 6f 63 65 73 73 20 63 6f 6e 74  his process cont
1b8f0 69 6e 75 65 73 20 75 6e 74 69 6c 20 65 69 74 68  inues until eith
1b900 65 72 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f  er a match is fo
1b910 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c 6c 20 63 6f  und.** or all co
1b920 6e 74 65 78 74 73 20 61 72 65 20 63 68 65 63 6b  ntexts are check
1b930 2e 20 20 57 68 65 6e 20 61 20 6d 61 74 63 68 20  .  When a match 
1b940 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 52  is found, the nR
1b950 65 66 20 6d 65 6d 62 65 72 20 6f 66 0a 2a 2a 20  ef member of.** 
1b960 74 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 74  the context cont
1b970 61 69 6e 69 6e 67 20 74 68 65 20 6d 61 74 63 68  aining the match
1b980 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e   is incremented.
1b990 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 73 75 62 71  .**.** Each subq
1b9a0 75 65 72 79 20 67 65 74 73 20 61 20 6e 65 77 20  uery gets a new 
1b9b0 4e 61 6d 65 43 6f 6e 74 65 78 74 2e 20 20 54 68  NameContext.  Th
1b9c0 65 20 70 4e 65 78 74 20 66 69 65 6c 64 20 70 6f  e pNext field po
1b9d0 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 4e  ints to the.** N
1b9e0 61 6d 65 43 6f 6e 74 65 78 74 20 69 6e 20 74 68  ameContext in th
1b9f0 65 20 70 61 72 65 6e 74 20 71 75 65 72 79 2e 20  e parent query. 
1ba00 20 54 68 75 73 20 74 68 65 20 70 72 6f 63 65 73   Thus the proces
1ba10 73 20 6f 66 20 73 63 61 6e 6e 69 6e 67 20 74 68  s of scanning th
1ba20 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74  e.** NameContext
1ba30 20 6c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64   list correspond
1ba40 73 20 74 6f 20 73 65 61 72 63 68 69 6e 67 20 74  s to searching t
1ba50 68 72 6f 75 67 68 20 73 75 63 63 65 73 73 69 76  hrough successiv
1ba60 65 6c 79 20 6f 75 74 65 72 0a 2a 2a 20 73 75 62  ely outer.** sub
1ba70 71 75 65 72 69 65 73 20 6c 6f 6f 6b 69 6e 67 20  queries looking 
1ba80 66 6f 72 20 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a  for a match..*/.
1ba90 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65  struct NameConte
1baa0 78 74 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50  xt {.  Parse *pP
1bab0 61 72 73 65 3b 20 20 20 20 20 20 20 2f 2a 20 54  arse;       /* T
1bac0 68 65 20 70 61 72 73 65 72 20 2a 2f 0a 20 20 53  he parser */.  S
1bad0 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74  rcList *pSrcList
1bae0 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f  ;   /* One or mo
1baf0 72 65 20 74 61 62 6c 65 73 20 75 73 65 64 20 74  re tables used t
1bb00 6f 20 72 65 73 6f 6c 76 65 20 6e 61 6d 65 73 20  o resolve names 
1bb10 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
1bb20 45 4c 69 73 74 3b 20 20 20 20 2f 2a 20 4f 70 74  EList;    /* Opt
1bb30 69 6f 6e 61 6c 20 6c 69 73 74 20 6f 66 20 72 65  ional list of re
1bb40 73 75 6c 74 2d 73 65 74 20 63 6f 6c 75 6d 6e 73  sult-set columns
1bb50 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70   */.  AggInfo *p
1bb60 41 67 67 49 6e 66 6f 3b 20 20 20 2f 2a 20 49 6e  AggInfo;   /* In
1bb70 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
1bb80 61 67 67 72 65 67 61 74 65 73 20 61 74 20 74 68  aggregates at th
1bb90 69 73 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 4e 61  is level */.  Na
1bba0 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 65 78 74  meContext *pNext
1bbb0 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 75 74 65 72  ;  /* Next outer
1bbc0 20 6e 61 6d 65 20 63 6f 6e 74 65 78 74 2e 20 20   name context.  
1bbd0 4e 55 4c 4c 20 66 6f 72 20 6f 75 74 65 72 6d 6f  NULL for outermo
1bbe0 73 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66  st */.  int nRef
1bbf0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1bc00 4e 75 6d 62 65 72 20 6f 66 20 6e 61 6d 65 73 20  Number of names 
1bc10 72 65 73 6f 6c 76 65 64 20 62 79 20 74 68 69 73  resolved by this
1bc20 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 69 6e   context */.  in
1bc30 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20  t nErr;         
1bc40 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1bc50 65 72 72 6f 72 73 20 65 6e 63 6f 75 6e 74 65 72  errors encounter
1bc60 65 64 20 77 68 69 6c 65 20 72 65 73 6f 6c 76 69  ed while resolvi
1bc70 6e 67 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 75 31  ng names */.  u1
1bc80 36 20 6e 63 46 6c 61 67 73 3b 20 20 20 20 20 20  6 ncFlags;      
1bc90 20 20 20 2f 2a 20 5a 65 72 6f 20 6f 72 20 6d 6f     /* Zero or mo
1bca0 72 65 20 4e 43 5f 2a 20 66 6c 61 67 73 20 64 65  re NC_* flags de
1bcb0 66 69 6e 65 64 20 62 65 6c 6f 77 20 2a 2f 0a 7d  fined below */.}
1bcc0 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  ;../*.** Allowed
1bcd0 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20   values for the 
1bce0 4e 61 6d 65 43 6f 6e 74 65 78 74 2c 20 6e 63 46  NameContext, ncF
1bcf0 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a  lags field..**.*
1bd00 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69  * Value constrai
1bd10 6e 74 73 20 28 61 6c 6c 20 63 68 65 63 6b 65 64  nts (all checked
1bd20 20 76 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a   via assert()):.
1bd30 2a 2a 20 20 20 20 4e 43 5f 48 61 73 41 67 67 20  **    NC_HasAgg 
1bd40 20 20 20 3d 3d 20 53 46 5f 48 61 73 41 67 67 0a     == SF_HasAgg.
1bd50 2a 2a 20 20 20 20 4e 43 5f 4d 69 6e 4d 61 78 41  **    NC_MinMaxA
1bd60 67 67 20 3d 3d 20 53 46 5f 4d 69 6e 4d 61 78 41  gg == SF_MinMaxA
1bd70 67 67 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e  gg == SQLITE_FUN
1bd80 43 5f 4d 49 4e 4d 41 58 0a 2a 2a 0a 2a 2f 0a 23  C_MINMAX.**.*/.#
1bd90 64 65 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77 41  define NC_AllowA
1bda0 67 67 20 20 30 78 30 30 30 31 20 20 2f 2a 20 41  gg  0x0001  /* A
1bdb0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
1bdc0 6e 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 68  ns are allowed h
1bdd0 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  ere */.#define N
1bde0 43 5f 50 61 72 74 49 64 78 20 20 20 30 78 30 30  C_PartIdx   0x00
1bdf0 30 32 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72  02  /* True if r
1be00 65 73 6f 6c 76 69 6e 67 20 61 20 70 61 72 74 69  esolving a parti
1be10 61 6c 20 69 6e 64 65 78 20 57 48 45 52 45 20 2a  al index WHERE *
1be20 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 73 43  /.#define NC_IsC
1be30 68 65 63 6b 20 20 20 30 78 30 30 30 34 20 20 2f  heck   0x0004  /
1be40 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76  * True if resolv
1be50 69 6e 67 20 6e 61 6d 65 73 20 69 6e 20 61 20 43  ing names in a C
1be60 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20  HECK constraint 
1be70 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 6e  */.#define NC_In
1be80 41 67 67 46 75 6e 63 20 30 78 30 30 30 38 20 20  AggFunc 0x0008  
1be90 2f 2a 20 54 72 75 65 20 69 66 20 61 6e 61 6c 79  /* True if analy
1bea0 7a 69 6e 67 20 61 72 67 75 6d 65 6e 74 73 20 74  zing arguments t
1beb0 6f 20 61 6e 20 61 67 67 20 66 75 6e 63 20 2a 2f  o an agg func */
1bec0 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48 61 73 41  .#define NC_HasA
1bed0 67 67 20 20 20 20 30 78 30 30 31 30 20 20 2f 2a  gg    0x0010  /*
1bee0 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67   One or more agg
1bef0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
1bf00 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   seen */.#define
1bf10 20 4e 43 5f 49 64 78 45 78 70 72 20 20 20 30 78   NC_IdxExpr   0x
1bf20 30 30 32 30 20 20 2f 2a 20 54 72 75 65 20 69 66  0020  /* True if
1bf30 20 72 65 73 6f 6c 76 69 6e 67 20 63 6f 6c 75 6d   resolving colum
1bf40 6e 73 20 6f 66 20 43 52 45 41 54 45 20 49 4e 44  ns of CREATE IND
1bf50 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  EX */.#define NC
1bf60 5f 56 61 72 53 65 6c 65 63 74 20 30 78 30 30 34  _VarSelect 0x004
1bf70 30 20 20 2f 2a 20 41 20 63 6f 72 72 65 6c 61 74  0  /* A correlat
1bf80 65 64 20 73 75 62 71 75 65 72 79 20 68 61 73 20  ed subquery has 
1bf90 62 65 65 6e 20 73 65 65 6e 20 2a 2f 0a 23 64 65  been seen */.#de
1bfa0 66 69 6e 65 20 4e 43 5f 4d 69 6e 4d 61 78 41 67  fine NC_MinMaxAg
1bfb0 67 20 30 78 31 30 30 30 20 20 2f 2a 20 6d 69 6e  g 0x1000  /* min
1bfc0 2f 6d 61 78 20 61 67 67 72 65 67 61 74 65 73 20  /max aggregates 
1bfd0 73 65 65 6e 2e 20 20 53 65 65 20 6e 6f 74 65 20  seen.  See note 
1bfe0 61 62 6f 76 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  above */../*.** 
1bff0 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
1c000 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
1c010 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20  ucture contains 
1c020 61 6c 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  all information.
1c030 2a 2a 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e  ** needed to gen
1c040 65 72 61 74 65 20 63 6f 64 65 20 66 6f 72 20 61  erate code for a
1c050 20 73 69 6e 67 6c 65 20 53 45 4c 45 43 54 20 73   single SELECT s
1c060 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20  tatement..**.** 
1c070 6e 4c 69 6d 69 74 20 69 73 20 73 65 74 20 74 6f  nLimit is set to
1c080 20 2d 31 20 69 66 20 74 68 65 72 65 20 69 73 20   -1 if there is 
1c090 6e 6f 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2e  no LIMIT clause.
1c0a0 20 20 6e 4f 66 66 73 65 74 20 69 73 20 73 65 74    nOffset is set
1c0b0 20 74 6f 20 30 2e 0a 2a 2a 20 49 66 20 74 68 65   to 0..** If the
1c0c0 72 65 20 69 73 20 61 20 4c 49 4d 49 54 20 63 6c  re is a LIMIT cl
1c0d0 61 75 73 65 2c 20 74 68 65 20 70 61 72 73 65 72  ause, the parser
1c0e0 20 73 65 74 73 20 6e 4c 69 6d 69 74 20 74 6f 20   sets nLimit to 
1c0f0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
1c100 0a 2a 2a 20 6c 69 6d 69 74 20 61 6e 64 20 6e 4f  .** limit and nO
1c110 66 66 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c  ffset to the val
1c120 75 65 20 6f 66 20 74 68 65 20 6f 66 66 73 65 74  ue of the offset
1c130 20 28 6f 72 20 30 20 69 66 20 74 68 65 72 65 20   (or 0 if there 
1c140 69 73 20 6e 6f 74 0a 2a 2a 20 6f 66 66 73 65 74  is not.** offset
1c150 29 2e 20 20 42 75 74 20 6c 61 74 65 72 20 6f 6e  ).  But later on
1c160 2c 20 6e 4c 69 6d 69 74 20 61 6e 64 20 6e 4f 66  , nLimit and nOf
1c170 66 73 65 74 20 62 65 63 6f 6d 65 20 74 68 65 20  fset become the 
1c180 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 73  memory locations
1c190 0a 2a 2a 20 69 6e 20 74 68 65 20 56 44 42 45 20  .** in the VDBE 
1c1a0 74 68 61 74 20 72 65 63 6f 72 64 20 74 68 65 20  that record the 
1c1b0 6c 69 6d 69 74 20 61 6e 64 20 6f 66 66 73 65 74  limit and offset
1c1c0 20 63 6f 75 6e 74 65 72 73 2e 0a 2a 2a 0a 2a 2a   counters..**.**
1c1d0 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 5d 20   addrOpenEphm[] 
1c1e0 65 6e 74 72 69 65 73 20 63 6f 6e 74 61 69 6e 20  entries contain 
1c1f0 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 4f  the address of O
1c200 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20  P_OpenEphemeral 
1c210 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20 54 68 65 73  opcodes..** Thes
1c220 65 20 61 64 64 72 65 73 73 65 73 20 6d 75 73 74  e addresses must
1c230 20 62 65 20 73 74 6f 72 65 64 20 73 6f 20 74 68   be stored so th
1c240 61 74 20 77 65 20 63 61 6e 20 67 6f 20 62 61 63  at we can go bac
1c250 6b 20 61 6e 64 20 66 69 6c 6c 20 69 6e 0a 2a 2a  k and fill in.**
1c260 20 74 68 65 20 50 34 5f 4b 45 59 49 4e 46 4f 20   the P4_KEYINFO 
1c270 61 6e 64 20 50 32 20 70 61 72 61 6d 65 74 65 72  and P2 parameter
1c280 73 20 6c 61 74 65 72 2e 20 20 4e 65 69 74 68 65  s later.  Neithe
1c290 72 20 74 68 65 20 4b 65 79 49 6e 66 6f 20 6e 6f  r the KeyInfo no
1c2a0 72 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20  r.** the number 
1c2b0 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 50 32  of columns in P2
1c2c0 20 63 61 6e 20 62 65 20 63 6f 6d 70 75 74 65 64   can be computed
1c2d0 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d   at the same tim
1c2e0 65 0a 2a 2a 20 61 73 20 74 68 65 20 4f 50 5f 4f  e.** as the OP_O
1c2f0 70 65 6e 45 70 68 6d 20 69 6e 73 74 72 75 63 74  penEphm instruct
1c300 69 6f 6e 20 69 73 20 63 6f 64 65 64 20 62 65 63  ion is coded bec
1c310 61 75 73 65 20 6e 6f 74 0a 2a 2a 20 65 6e 6f 75  ause not.** enou
1c320 67 68 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  gh information a
1c330 62 6f 75 74 20 74 68 65 20 63 6f 6d 70 6f 75 6e  bout the compoun
1c340 64 20 71 75 65 72 79 20 69 73 20 6b 6e 6f 77 6e  d query is known
1c350 20 61 74 20 74 68 61 74 20 70 6f 69 6e 74 2e 0a   at that point..
1c360 2a 2a 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66  ** The KeyInfo f
1c370 6f 72 20 61 64 64 72 4f 70 65 6e 54 72 61 6e 5b  or addrOpenTran[
1c380 30 5d 20 61 6e 64 20 5b 31 5d 20 63 6f 6e 74 61  0] and [1] conta
1c390 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  ins collating se
1c3a0 71 75 65 6e 63 65 73 0a 2a 2a 20 66 6f 72 20 74  quences.** for t
1c3b0 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e 20 20  he result set.  
1c3c0 54 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20  The KeyInfo for 
1c3d0 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 20  addrOpenEphm[2] 
1c3e0 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69  contains collati
1c3f0 6e 67 0a 2a 2a 20 73 65 71 75 65 6e 63 65 73 20  ng.** sequences 
1c400 66 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42 59  for the ORDER BY
1c410 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75   clause..*/.stru
1c420 63 74 20 53 65 6c 65 63 74 20 7b 0a 20 20 45 78  ct Select {.  Ex
1c430 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20  prList *pEList; 
1c440 20 20 20 20 20 2f 2a 20 54 68 65 20 66 69 65 6c       /* The fiel
1c450 64 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ds of the result
1c460 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20   */.  u8 op;    
1c470 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1c480 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55 4e 49 4f 4e  One of: TK_UNION
1c490 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49 4e 54 45 52   TK_ALL TK_INTER
1c4a0 53 45 43 54 20 54 4b 5f 45 58 43 45 50 54 20 2a  SECT TK_EXCEPT *
1c4b0 2f 0a 20 20 4c 6f 67 45 73 74 20 6e 53 65 6c 65  /.  LogEst nSele
1c4c0 63 74 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73  ctRow;     /* Es
1c4d0 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20 6f  timated number o
1c4e0 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20 2a 2f  f result rows */
1c4f0 0a 20 20 75 33 32 20 73 65 6c 46 6c 61 67 73 3b  .  u32 selFlags;
1c500 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72            /* Var
1c510 69 6f 75 73 20 53 46 5f 2a 20 76 61 6c 75 65 73  ious SF_* values
1c520 20 2a 2f 0a 20 20 69 6e 74 20 69 4c 69 6d 69 74   */.  int iLimit
1c530 2c 20 69 4f 66 66 73 65 74 3b 20 20 20 2f 2a 20  , iOffset;   /* 
1c540 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73  Memory registers
1c550 20 68 6f 6c 64 69 6e 67 20 4c 49 4d 49 54 20 26   holding LIMIT &
1c560 20 4f 46 46 53 45 54 20 63 6f 75 6e 74 65 72 73   OFFSET counters
1c570 20 2a 2f 0a 23 69 66 20 53 45 4c 45 43 54 54 52   */.#if SELECTTR
1c580 41 43 45 5f 45 4e 41 42 4c 45 44 0a 20 20 63 68  ACE_ENABLED.  ch
1c590 61 72 20 7a 53 65 6c 4e 61 6d 65 5b 31 32 5d 3b  ar zSelName[12];
1c5a0 20 20 20 20 20 2f 2a 20 53 79 6d 62 6f 6c 69 63       /* Symbolic
1c5b0 20 6e 61 6d 65 20 6f 66 20 74 68 69 73 20 53 45   name of this SE
1c5c0 4c 45 43 54 20 75 73 65 20 66 6f 72 20 64 65 62  LECT use for deb
1c5d0 75 67 67 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66  ugging */.#endif
1c5e0 0a 20 20 69 6e 74 20 61 64 64 72 4f 70 65 6e 45  .  int addrOpenE
1c5f0 70 68 6d 5b 32 5d 3b 20 20 20 2f 2a 20 4f 50 5f  phm[2];   /* OP_
1c600 4f 70 65 6e 45 70 68 65 6d 20 6f 70 63 6f 64 65  OpenEphem opcode
1c610 73 20 72 65 6c 61 74 65 64 20 74 6f 20 74 68 69  s related to thi
1c620 73 20 73 65 6c 65 63 74 20 2a 2f 0a 20 20 53 72  s select */.  Sr
1c630 63 4c 69 73 74 20 2a 70 53 72 63 3b 20 20 20 20  cList *pSrc;    
1c640 20 20 20 20 20 2f 2a 20 54 68 65 20 46 52 4f 4d       /* The FROM
1c650 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70   clause */.  Exp
1c660 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20  r *pWhere;      
1c670 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45      /* The WHERE
1c680 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70   clause */.  Exp
1c690 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b  rList *pGroupBy;
1c6a0 20 20 20 20 2f 2a 20 54 68 65 20 47 52 4f 55 50      /* The GROUP
1c6b0 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20   BY clause */.  
1c6c0 45 78 70 72 20 2a 70 48 61 76 69 6e 67 3b 20 20  Expr *pHaving;  
1c6d0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 48 41         /* The HA
1c6e0 56 49 4e 47 20 63 6c 61 75 73 65 20 2a 2f 0a 20  VING clause */. 
1c6f0 20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65   ExprList *pOrde
1c700 72 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 4f  rBy;    /* The O
1c710 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 2a  RDER BY clause *
1c720 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 50 72 69  /.  Select *pPri
1c730 6f 72 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 72  or;        /* Pr
1c740 69 6f 72 20 73 65 6c 65 63 74 20 69 6e 20 61 20  ior select in a 
1c750 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 20  compound select 
1c760 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 53  statement */.  S
1c770 65 6c 65 63 74 20 2a 70 4e 65 78 74 3b 20 20 20  elect *pNext;   
1c780 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 73 65        /* Next se
1c790 6c 65 63 74 20 74 6f 20 74 68 65 20 6c 65 66 74  lect to the left
1c7a0 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 2a   in a compound *
1c7b0 2f 0a 20 20 45 78 70 72 20 2a 70 4c 69 6d 69 74  /.  Expr *pLimit
1c7c0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 49  ;          /* LI
1c7d0 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  MIT expression. 
1c7e0 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75  NULL means not u
1c7f0 73 65 64 2e 20 2a 2f 0a 20 20 45 78 70 72 20 2a  sed. */.  Expr *
1c800 70 4f 66 66 73 65 74 3b 20 20 20 20 20 20 20 20  pOffset;        
1c810 20 2f 2a 20 4f 46 46 53 45 54 20 65 78 70 72 65   /* OFFSET expre
1c820 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e  ssion. NULL mean
1c830 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20  s not used. */. 
1c840 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20 20   With *pWith;   
1c850 20 20 20 20 20 20 20 20 2f 2a 20 57 49 54 48 20          /* WITH 
1c860 63 6c 61 75 73 65 20 61 74 74 61 63 68 65 64 20  clause attached 
1c870 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74 2e 20  to this select. 
1c880 4f 72 20 4e 55 4c 4c 2e 20 2a 2f 0a 7d 3b 0a 0a  Or NULL. */.};..
1c890 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
1c8a0 6c 75 65 73 20 66 6f 72 20 53 65 6c 65 63 74 2e  lues for Select.
1c8b0 73 65 6c 46 6c 61 67 73 2e 20 20 54 68 65 20 22  selFlags.  The "
1c8c0 53 46 22 20 70 72 65 66 69 78 20 73 74 61 6e 64  SF" prefix stand
1c8d0 73 20 66 6f 72 0a 2a 2a 20 22 53 65 6c 65 63 74  s for.** "Select
1c8e0 20 46 6c 61 67 22 2e 0a 2a 2a 0a 2a 2a 20 56 61   Flag"..**.** Va
1c8f0 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  lue constraints 
1c900 28 61 6c 6c 20 63 68 65 63 6b 65 64 20 76 69 61  (all checked via
1c910 20 61 73 73 65 72 74 28 29 29 0a 2a 2a 20 20 20   assert()).**   
1c920 20 20 53 46 5f 48 61 73 41 67 67 20 20 20 20 20    SF_HasAgg     
1c930 3d 3d 20 4e 43 5f 48 61 73 41 67 67 0a 2a 2a 20  == NC_HasAgg.** 
1c940 20 20 20 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67      SF_MinMaxAgg
1c950 20 20 3d 3d 20 4e 43 5f 4d 69 6e 4d 61 78 41 67    == NC_MinMaxAg
1c960 67 20 20 20 20 20 3d 3d 20 53 51 4c 49 54 45 5f  g     == SQLITE_
1c970 46 55 4e 43 5f 4d 49 4e 4d 41 58 0a 2a 2a 20 20  FUNC_MINMAX.**  
1c980 20 20 20 53 46 5f 46 69 78 65 64 4c 69 6d 69 74     SF_FixedLimit
1c990 20 3d 3d 20 57 48 45 52 45 5f 55 53 45 5f 4c 49   == WHERE_USE_LI
1c9a0 4d 49 54 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  MIT.*/.#define S
1c9b0 46 5f 44 69 73 74 69 6e 63 74 20 20 20 20 20 20  F_Distinct      
1c9c0 20 30 78 30 30 30 30 31 20 20 2f 2a 20 4f 75 74   0x00001  /* Out
1c9d0 70 75 74 20 73 68 6f 75 6c 64 20 62 65 20 44 49  put should be DI
1c9e0 53 54 49 4e 43 54 20 2a 2f 0a 23 64 65 66 69 6e  STINCT */.#defin
1c9f0 65 20 53 46 5f 41 6c 6c 20 20 20 20 20 20 20 20  e SF_All        
1ca00 20 20 20 20 30 78 30 30 30 30 32 20 20 2f 2a 20      0x00002  /* 
1ca10 49 6e 63 6c 75 64 65 73 20 74 68 65 20 41 4c 4c  Includes the ALL
1ca20 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66   keyword */.#def
1ca30 69 6e 65 20 53 46 5f 52 65 73 6f 6c 76 65 64 20  ine SF_Resolved 
1ca40 20 20 20 20 20 20 30 78 30 30 30 30 34 20 20 2f        0x00004  /
1ca50 2a 20 49 64 65 6e 74 69 66 69 65 72 73 20 68 61  * Identifiers ha
1ca60 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64  ve been resolved
1ca70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41   */.#define SF_A
1ca80 67 67 72 65 67 61 74 65 20 20 20 20 20 20 30 78  ggregate      0x
1ca90 30 30 30 30 38 20 20 2f 2a 20 43 6f 6e 74 61 69  00008  /* Contai
1caa0 6e 73 20 61 67 67 20 66 75 6e 63 74 69 6f 6e 73  ns agg functions
1cab0 20 6f 72 20 61 20 47 52 4f 55 50 20 42 59 20 2a   or a GROUP BY *
1cac0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 48 61 73  /.#define SF_Has
1cad0 41 67 67 20 20 20 20 20 20 20 20 20 30 78 30 30  Agg         0x00
1cae0 30 31 30 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73  010  /* Contains
1caf0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
1cb00 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
1cb10 53 46 5f 55 73 65 73 45 70 68 65 6d 65 72 61 6c  SF_UsesEphemeral
1cb20 20 20 30 78 30 30 30 32 30 20 20 2f 2a 20 55 73    0x00020  /* Us
1cb30 65 73 20 74 68 65 20 4f 70 65 6e 45 70 68 65 6d  es the OpenEphem
1cb40 65 72 61 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a 23  eral opcode */.#
1cb50 64 65 66 69 6e 65 20 53 46 5f 45 78 70 61 6e 64  define SF_Expand
1cb60 65 64 20 20 20 20 20 20 20 30 78 30 30 30 34 30  ed       0x00040
1cb70 20 20 2f 2a 20 73 71 6c 69 74 65 33 53 65 6c 65    /* sqlite3Sele
1cb80 63 74 45 78 70 61 6e 64 28 29 20 63 61 6c 6c 65  ctExpand() calle
1cb90 64 20 6f 6e 20 74 68 69 73 20 2a 2f 0a 23 64 65  d on this */.#de
1cba0 66 69 6e 65 20 53 46 5f 48 61 73 54 79 70 65 49  fine SF_HasTypeI
1cbb0 6e 66 6f 20 20 20 20 30 78 30 30 30 38 30 20 20  nfo    0x00080  
1cbc0 2f 2a 20 46 52 4f 4d 20 73 75 62 71 75 65 72 69  /* FROM subqueri
1cbd0 65 73 20 68 61 76 65 20 54 61 62 6c 65 20 6d 65  es have Table me
1cbe0 74 61 64 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e  tadata */.#defin
1cbf0 65 20 53 46 5f 43 6f 6d 70 6f 75 6e 64 20 20 20  e SF_Compound   
1cc00 20 20 20 20 30 78 30 30 31 30 30 20 20 2f 2a 20      0x00100  /* 
1cc10 50 61 72 74 20 6f 66 20 61 20 63 6f 6d 70 6f 75  Part of a compou
1cc20 6e 64 20 71 75 65 72 79 20 2a 2f 0a 23 64 65 66  nd query */.#def
1cc30 69 6e 65 20 53 46 5f 56 61 6c 75 65 73 20 20 20  ine SF_Values   
1cc40 20 20 20 20 20 20 30 78 30 30 32 30 30 20 20 2f        0x00200  /
1cc50 2a 20 53 79 6e 74 68 65 73 69 7a 65 64 20 66 72  * Synthesized fr
1cc60 6f 6d 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65  om VALUES clause
1cc70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d   */.#define SF_M
1cc80 75 6c 74 69 56 61 6c 75 65 20 20 20 20 20 30 78  ultiValue     0x
1cc90 30 30 34 30 30 20 20 2f 2a 20 53 69 6e 67 6c 65  00400  /* Single
1cca0 20 56 41 4c 55 45 53 20 74 65 72 6d 20 77 69 74   VALUES term wit
1ccb0 68 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20  h multiple rows 
1ccc0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4e 65  */.#define SF_Ne
1ccd0 73 74 65 64 46 72 6f 6d 20 20 20 20 20 30 78 30  stedFrom     0x0
1cce0 30 38 30 30 20 20 2f 2a 20 50 61 72 74 20 6f 66  0800  /* Part of
1ccf0 20 61 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64   a parenthesized
1cd00 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a   FROM clause */.
1cd10 23 64 65 66 69 6e 65 20 53 46 5f 4d 69 6e 4d 61  #define SF_MinMa
1cd20 78 41 67 67 20 20 20 20 20 20 30 78 30 31 30 30  xAgg      0x0100
1cd30 30 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20  0  /* Aggregate 
1cd40 63 6f 6e 74 61 69 6e 69 6e 67 20 6d 69 6e 28 29  containing min()
1cd50 20 6f 72 20 6d 61 78 28 29 20 2a 2f 0a 23 64 65   or max() */.#de
1cd60 66 69 6e 65 20 53 46 5f 52 65 63 75 72 73 69 76  fine SF_Recursiv
1cd70 65 20 20 20 20 20 20 30 78 30 32 30 30 30 20 20  e      0x02000  
1cd80 2f 2a 20 54 68 65 20 72 65 63 75 72 73 69 76 65  /* The recursive
1cd90 20 70 61 72 74 20 6f 66 20 61 20 72 65 63 75 72   part of a recur
1cda0 73 69 76 65 20 43 54 45 20 2a 2f 0a 23 64 65 66  sive CTE */.#def
1cdb0 69 6e 65 20 53 46 5f 46 69 78 65 64 4c 69 6d 69  ine SF_FixedLimi
1cdc0 74 20 20 20 20 20 30 78 30 34 30 30 30 20 20 2f  t     0x04000  /
1cdd0 2a 20 6e 53 65 6c 65 63 74 52 6f 77 20 73 65 74  * nSelectRow set
1cde0 20 62 79 20 61 20 63 6f 6e 73 74 61 6e 74 20 4c   by a constant L
1cdf0 49 4d 49 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20  IMIT */.#define 
1ce00 53 46 5f 4d 61 79 62 65 43 6f 6e 76 65 72 74 20  SF_MaybeConvert 
1ce10 20 20 30 78 30 38 30 30 30 20 20 2f 2a 20 4e 65    0x08000  /* Ne
1ce20 65 64 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75  ed convertCompou
1ce30 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65  ndSelectToSubque
1ce40 72 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ry() */.#define 
1ce50 53 46 5f 43 6f 6e 76 65 72 74 65 64 20 20 20 20  SF_Converted    
1ce60 20 20 30 78 31 30 30 30 30 20 20 2f 2a 20 42 79    0x10000  /* By
1ce70 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64   convertCompound
1ce80 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79  SelectToSubquery
1ce90 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  () */.#define SF
1cea0 5f 49 6e 63 6c 75 64 65 48 69 64 64 65 6e 20 20  _IncludeHidden  
1ceb0 30 78 32 30 30 30 30 20 20 2f 2a 20 49 6e 63 6c  0x20000  /* Incl
1cec0 75 64 65 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d  ude hidden colum
1ced0 6e 73 20 69 6e 20 6f 75 74 70 75 74 20 2a 2f 0a  ns in output */.
1cee0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 65 73 75  ../*.** The resu
1cef0 6c 74 73 20 6f 66 20 61 20 53 45 4c 45 43 54 20  lts of a SELECT 
1cf00 63 61 6e 20 62 65 20 64 69 73 74 72 69 62 75 74  can be distribut
1cf10 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61  ed in several wa
1cf20 79 73 2c 20 61 73 20 64 65 66 69 6e 65 64 0a 2a  ys, as defined.*
1cf30 2a 20 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20  * by one of the 
1cf40 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73  following macros
1cf50 2e 20 20 54 68 65 20 22 53 52 54 22 20 70 72 65  .  The "SRT" pre
1cf60 66 69 78 20 6d 65 61 6e 73 20 22 53 45 4c 45 43  fix means "SELEC
1cf70 54 20 52 65 73 75 6c 74 0a 2a 2a 20 54 79 70 65  T Result.** Type
1cf80 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  "..**.**     SRT
1cf90 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 53 74 6f  _Union       Sto
1cfa0 72 65 20 72 65 73 75 6c 74 73 20 61 73 20 61 20  re results as a 
1cfb0 6b 65 79 20 69 6e 20 61 20 74 65 6d 70 6f 72 61  key in a tempora
1cfc0 72 79 20 69 6e 64 65 78 0a 2a 2a 20 20 20 20 20  ry index.**     
1cfd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cfe0 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 70 44  identified by pD
1cff0 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a  est->iSDParm..**
1d000 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 78 63 65  .**     SRT_Exce
1d010 70 74 20 20 20 20 20 20 52 65 6d 6f 76 65 20 72  pt      Remove r
1d020 65 73 75 6c 74 73 20 66 72 6f 6d 20 74 68 65 20  esults from the 
1d030 74 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78 20  temporary index 
1d040 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a  pDest->iSDParm..
1d050 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 78  **.**     SRT_Ex
1d060 69 73 74 73 20 20 20 20 20 20 53 74 6f 72 65 20  ists      Store 
1d070 61 20 31 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65  a 1 in memory ce
1d080 6c 6c 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  ll pDest->iSDPar
1d090 6d 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 0a  m if the result.
1d0a0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1d0b0 20 20 20 20 20 20 20 73 65 74 20 69 73 20 6e 6f         set is no
1d0c0 74 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 20  t empty..**.**  
1d0d0 20 20 20 53 52 54 5f 44 69 73 63 61 72 64 20 20     SRT_Discard  
1d0e0 20 20 20 54 68 72 6f 77 20 74 68 65 20 72 65 73     Throw the res
1d0f0 75 6c 74 73 20 61 77 61 79 2e 20 20 54 68 69 73  ults away.  This
1d100 20 69 73 20 75 73 65 64 20 62 79 20 53 45 4c 45   is used by SELE
1d110 43 54 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  CT.**           
1d120 20 20 20 20 20 20 20 20 20 20 73 74 61 74 65 6d            statem
1d130 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69 67  ents within trig
1d140 67 65 72 73 20 77 68 6f 73 65 20 6f 6e 6c 79 20  gers whose only 
1d150 70 75 72 70 6f 73 65 20 69 73 0a 2a 2a 20 20 20  purpose is.**   
1d160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d170 20 20 74 68 65 20 73 69 64 65 2d 65 66 66 65 63    the side-effec
1d180 74 73 20 6f 66 20 66 75 6e 63 74 69 6f 6e 73 2e  ts of functions.
1d190 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68  .**.** All of th
1d1a0 65 20 61 62 6f 76 65 20 61 72 65 20 66 72 65 65  e above are free
1d1b0 20 74 6f 20 69 67 6e 6f 72 65 20 74 68 65 69 72   to ignore their
1d1c0 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
1d1d0 2e 20 54 68 6f 73 65 20 74 68 61 74 0a 2a 2a 20  . Those that.** 
1d1e0 66 6f 6c 6c 6f 77 20 6d 75 73 74 20 68 6f 6e 6f  follow must hono
1d1f0 72 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63  r the ORDER BY c
1d200 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  lause..**.**    
1d210 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20   SRT_Output     
1d220 20 47 65 6e 65 72 61 74 65 20 61 20 72 6f 77 20   Generate a row 
1d230 6f 66 20 6f 75 74 70 75 74 20 28 75 73 69 6e 67  of output (using
1d240 20 74 68 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f   the OP_ResultRo
1d250 77 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  w.**            
1d260 20 20 20 20 20 20 20 20 20 6f 70 63 6f 64 65 29           opcode)
1d270 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e   for each row in
1d280 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e   the result set.
1d290 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4d  .**.**     SRT_M
1d2a0 65 6d 20 20 20 20 20 20 20 20 20 4f 6e 6c 79 20  em         Only 
1d2b0 76 61 6c 69 64 20 69 66 20 74 68 65 20 72 65 73  valid if the res
1d2c0 75 6c 74 20 69 73 20 61 20 73 69 6e 67 6c 65 20  ult is a single 
1d2d0 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 20 20 20 20 20  column..**      
1d2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
1d2f0 74 6f 72 65 20 74 68 65 20 66 69 72 73 74 20 63  tore the first c
1d300 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 66 69 72  olumn of the fir
1d310 73 74 20 72 65 73 75 6c 74 20 72 6f 77 0a 2a 2a  st result row.**
1d320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d330 20 20 20 20 20 69 6e 20 72 65 67 69 73 74 65 72       in register
1d340 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20   pDest->iSDParm 
1d350 74 68 65 6e 20 61 62 61 6e 64 6f 6e 20 74 68 65  then abandon the
1d360 20 72 65 73 74 0a 2a 2a 20 20 20 20 20 20 20 20   rest.**        
1d370 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 20               of 
1d380 74 68 65 20 71 75 65 72 79 2e 20 20 54 68 69 73  the query.  This
1d390 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 69 6d 70   destination imp
1d3a0 6c 69 65 73 20 22 4c 49 4d 49 54 20 31 22 2e 0a  lies "LIMIT 1"..
1d3b0 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 53 65  **.**     SRT_Se
1d3c0 74 20 20 20 20 20 20 20 20 20 54 68 65 20 72 65  t         The re
1d3d0 73 75 6c 74 20 6d 75 73 74 20 62 65 20 61 20 73  sult must be a s
1d3e0 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20 20 53  ingle column.  S
1d3f0 74 6f 72 65 20 65 61 63 68 0a 2a 2a 20 20 20 20  tore each.**    
1d400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d410 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 61   row of result a
1d420 73 20 74 68 65 20 6b 65 79 20 69 6e 20 74 61 62  s the key in tab
1d430 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  le pDest->iSDPar
1d440 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  m..**           
1d450 20 20 20 20 20 20 20 20 20 20 41 70 70 6c 79 20            Apply 
1d460 74 68 65 20 61 66 66 69 6e 69 74 79 20 70 44 65  the affinity pDe
1d470 73 74 2d 3e 61 66 66 53 64 73 74 20 62 65 66 6f  st->affSdst befo
1d480 72 65 20 73 74 6f 72 69 6e 67 0a 2a 2a 20 20 20  re storing.**   
1d490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d4a0 20 20 72 65 73 75 6c 74 73 2e 20 20 55 73 65 64    results.  Used
1d4b0 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 22 49   to implement "I
1d4c0 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e  N (SELECT ...)".
1d4d0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45  .**.**     SRT_E
1d4e0 70 68 65 6d 54 61 62 20 20 20 20 43 72 65 61 74  phemTab    Creat
1d4f0 65 20 61 6e 20 74 65 6d 70 6f 72 61 72 79 20 74  e an temporary t
1d500 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50  able pDest->iSDP
1d510 61 72 6d 20 61 6e 64 20 73 74 6f 72 65 0a 2a 2a  arm and store.**
1d520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d530 20 20 20 20 20 74 68 65 20 72 65 73 75 6c 74 20       the result 
1d540 74 68 65 72 65 2e 20 54 68 65 20 63 75 72 73 6f  there. The curso
1d550 72 20 69 73 20 6c 65 66 74 20 6f 70 65 6e 20 61  r is left open a
1d560 66 74 65 72 0a 2a 2a 20 20 20 20 20 20 20 20 20  fter.**         
1d570 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1d580 72 6e 69 6e 67 2e 20 20 54 68 69 73 20 69 73 20  rning.  This is 
1d590 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 65  like SRT_Table e
1d5a0 78 63 65 70 74 20 74 68 61 74 0a 2a 2a 20 20 20  xcept that.**   
1d5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d5c0 20 20 74 68 69 73 20 64 65 73 74 69 6e 61 74 69    this destinati
1d5d0 6f 6e 20 75 73 65 73 20 4f 50 5f 4f 70 65 6e 45  on uses OP_OpenE
1d5e0 70 68 65 6d 65 72 61 6c 20 74 6f 20 63 72 65 61  phemeral to crea
1d5f0 74 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  te.**           
1d600 20 20 20 20 20 20 20 20 20 20 74 68 65 20 74 61            the ta
1d610 62 6c 65 20 66 69 72 73 74 2e 0a 2a 2a 0a 2a 2a  ble first..**.**
1d620 20 20 20 20 20 53 52 54 5f 43 6f 72 6f 75 74 69       SRT_Corouti
1d630 6e 65 20 20 20 47 65 6e 65 72 61 74 65 20 61 20  ne   Generate a 
1d640 63 6f 2d 72 6f 75 74 69 6e 65 20 74 68 61 74 20  co-routine that 
1d650 72 65 74 75 72 6e 73 20 61 20 6e 65 77 20 72 6f  returns a new ro
1d660 77 20 6f 66 0a 2a 2a 20 20 20 20 20 20 20 20 20  w of.**         
1d670 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
1d680 6c 74 73 20 65 61 63 68 20 74 69 6d 65 20 69 74  lts each time it
1d690 20 69 73 20 69 6e 76 6f 6b 65 64 2e 20 20 54 68   is invoked.  Th
1d6a0 65 20 65 6e 74 72 79 20 70 6f 69 6e 74 0a 2a 2a  e entry point.**
1d6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d6c0 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f 2d 72       of the co-r
1d6d0 6f 75 74 69 6e 65 20 69 73 20 73 74 6f 72 65 64  outine is stored
1d6e0 20 69 6e 20 72 65 67 69 73 74 65 72 20 70 44 65   in register pDe
1d6f0 73 74 2d 3e 69 53 44 50 61 72 6d 0a 2a 2a 20 20  st->iSDParm.**  
1d700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d710 20 20 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c     and the resul
1d720 74 20 72 6f 77 20 69 73 20 73 74 6f 72 65 64 20  t row is stored 
1d730 69 6e 20 70 44 65 73 74 2d 3e 6e 44 65 73 74 20  in pDest->nDest 
1d740 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 20 20 20  registers.**    
1d750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d760 20 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 70   starting with p
1d770 44 65 73 74 2d 3e 69 53 64 73 74 2e 0a 2a 2a 0a  Dest->iSdst..**.
1d780 2a 2a 20 20 20 20 20 53 52 54 5f 54 61 62 6c 65  **     SRT_Table
1d790 20 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73         Store res
1d7a0 75 6c 74 73 20 69 6e 20 74 65 6d 70 6f 72 61 72  ults in temporar
1d7b0 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69  y table pDest->i
1d7c0 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 53  SDParm..**     S
1d7d0 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20 20 54  RT_Fifo        T
1d7e0 68 69 73 20 69 73 20 6c 69 6b 65 20 53 52 54 5f  his is like SRT_
1d7f0 45 70 68 65 6d 54 61 62 20 65 78 63 65 70 74 20  EphemTab except 
1d800 74 68 61 74 20 74 68 65 20 74 61 62 6c 65 0a 2a  that the table.*
1d810 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1d820 20 20 20 20 20 20 69 73 20 61 73 73 75 6d 65 64        is assumed
1d830 20 74 6f 20 61 6c 72 65 61 64 79 20 62 65 20 6f   to already be o
1d840 70 65 6e 2e 20 20 53 52 54 5f 46 69 66 6f 20 68  pen.  SRT_Fifo h
1d850 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  as.**           
1d860 20 20 20 20 20 20 20 20 20 20 74 68 65 20 61 64            the ad
1d870 64 69 74 69 6f 6e 61 6c 20 70 72 6f 70 65 72 74  ditional propert
1d880 79 20 6f 66 20 62 65 69 6e 67 20 61 62 6c 65 20  y of being able 
1d890 74 6f 20 69 67 6e 6f 72 65 0a 2a 2a 20 20 20 20  to ignore.**    
1d8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d8b0 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   the ORDER BY cl
1d8c0 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ause..**.**     
1d8d0 53 52 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20  SRT_DistFifo    
1d8e0 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e  Store results in
1d8f0 20 61 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62   a temporary tab
1d900 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  le pDest->iSDPar
1d910 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  m..**           
1d920 20 20 20 20 20 20 20 20 20 20 42 75 74 20 61 6c            But al
1d930 73 6f 20 75 73 65 20 74 65 6d 70 6f 72 61 72 79  so use temporary
1d940 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53   table pDest->iS
1d950 44 50 61 72 6d 2b 31 20 61 73 0a 2a 2a 20 20 20  DParm+1 as.**   
1d960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d970 20 20 61 20 72 65 63 6f 72 64 20 6f 66 20 61 6c    a record of al
1d980 6c 20 70 72 69 6f 72 20 72 65 73 75 6c 74 73 20  l prior results 
1d990 61 6e 64 20 69 67 6e 6f 72 65 20 61 6e 79 20 64  and ignore any d
1d9a0 75 70 6c 69 63 61 74 65 0a 2a 2a 20 20 20 20 20  uplicate.**     
1d9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d9c0 72 6f 77 73 2e 20 20 4e 61 6d 65 20 6d 65 61 6e  rows.  Name mean
1d9d0 73 3a 20 20 22 44 69 73 74 69 6e 63 74 20 46 69  s:  "Distinct Fi
1d9e0 66 6f 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  fo"..**.**     S
1d9f0 52 54 5f 51 75 65 75 65 20 20 20 20 20 20 20 53  RT_Queue       S
1da00 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20  tore results in 
1da10 70 72 69 6f 72 69 74 79 20 71 75 65 75 65 20 70  priority queue p
1da20 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 28 72  Dest->iSDParm (r
1da30 65 61 6c 6c 79 0a 2a 2a 20 20 20 20 20 20 20 20  eally.**        
1da40 20 20 20 20 20 20 20 20 20 20 20 20 20 61 6e 20               an 
1da50 69 6e 64 65 78 29 2e 20 20 41 70 70 65 6e 64 20  index).  Append 
1da60 61 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65  a sequence numbe
1da70 72 20 73 6f 20 74 68 61 74 20 61 6c 6c 20 65 6e  r so that all en
1da80 74 72 69 65 73 0a 2a 2a 20 20 20 20 20 20 20 20  tries.**        
1da90 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72 65               are
1daa0 20 64 69 73 74 69 6e 63 74 2e 0a 2a 2a 0a 2a 2a   distinct..**.**
1dab0 20 20 20 20 20 53 52 54 5f 44 69 73 74 51 75 65       SRT_DistQue
1dac0 75 65 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c  ue   Store resul
1dad0 74 73 20 69 6e 20 70 72 69 6f 72 69 74 79 20 71  ts in priority q
1dae0 75 65 75 65 20 70 44 65 73 74 2d 3e 69 53 44 50  ueue pDest->iSDP
1daf0 61 72 6d 20 6f 6e 6c 79 20 69 66 0a 2a 2a 20 20  arm only if.**  
1db00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db10 20 20 20 74 68 65 20 73 61 6d 65 20 72 65 63 6f     the same reco
1db20 72 64 20 68 61 73 20 6e 65 76 65 72 20 62 65 65  rd has never bee
1db30 6e 20 73 74 6f 72 65 64 20 62 65 66 6f 72 65 2e  n stored before.
1db40 20 20 54 68 65 0a 2a 2a 20 20 20 20 20 20 20 20    The.**        
1db50 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64               ind
1db60 65 78 20 61 74 20 70 44 65 73 74 2d 3e 69 53 44  ex at pDest->iSD
1db70 50 61 72 6d 2b 31 20 68 6f 6c 64 20 61 6c 6c 20  Parm+1 hold all 
1db80 70 72 69 6f 72 20 73 74 6f 72 65 73 2e 0a 2a 2f  prior stores..*/
1db90 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 55 6e 69  .#define SRT_Uni
1dba0 6f 6e 20 20 20 20 20 20 20 20 31 20 20 2f 2a 20  on        1  /* 
1dbb0 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20  Store result as 
1dbc0 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78  keys in an index
1dbd0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1dbe0 45 78 63 65 70 74 20 20 20 20 20 20 20 32 20 20  Except       2  
1dbf0 2f 2a 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74  /* Remove result
1dc00 20 66 72 6f 6d 20 61 20 55 4e 49 4f 4e 20 69 6e   from a UNION in
1dc10 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  dex */.#define S
1dc20 52 54 5f 45 78 69 73 74 73 20 20 20 20 20 20 20  RT_Exists       
1dc30 33 20 20 2f 2a 20 53 74 6f 72 65 20 31 20 69 66  3  /* Store 1 if
1dc40 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 6e   the result is n
1dc50 6f 74 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66  ot empty */.#def
1dc60 69 6e 65 20 53 52 54 5f 44 69 73 63 61 72 64 20  ine SRT_Discard 
1dc70 20 20 20 20 20 34 20 20 2f 2a 20 44 6f 20 6e 6f       4  /* Do no
1dc80 74 20 73 61 76 65 20 74 68 65 20 72 65 73 75 6c  t save the resul
1dc90 74 73 20 61 6e 79 77 68 65 72 65 20 2a 2f 0a 23  ts anywhere */.#
1dca0 64 65 66 69 6e 65 20 53 52 54 5f 46 69 66 6f 20  define SRT_Fifo 
1dcb0 20 20 20 20 20 20 20 20 35 20 20 2f 2a 20 53 74          5  /* St
1dcc0 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 64 61  ore result as da
1dcd0 74 61 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d  ta with an autom
1dce0 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a 23 64  atic rowid */.#d
1dcf0 65 66 69 6e 65 20 53 52 54 5f 44 69 73 74 46 69  efine SRT_DistFi
1dd00 66 6f 20 20 20 20 20 36 20 20 2f 2a 20 4c 69 6b  fo     6  /* Lik
1dd10 65 20 53 52 54 5f 46 69 66 6f 2c 20 62 75 74 20  e SRT_Fifo, but 
1dd20 75 6e 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f  unique results o
1dd30 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  nly */.#define S
1dd40 52 54 5f 51 75 65 75 65 20 20 20 20 20 20 20 20  RT_Queue        
1dd50 37 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  7  /* Store resu
1dd60 6c 74 20 69 6e 20 61 6e 20 71 75 65 75 65 20 2a  lt in an queue *
1dd70 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69  /.#define SRT_Di
1dd80 73 74 51 75 65 75 65 20 20 20 20 38 20 20 2f 2a  stQueue    8  /*
1dd90 20 4c 69 6b 65 20 53 52 54 5f 51 75 65 75 65 2c   Like SRT_Queue,
1dda0 20 62 75 74 20 75 6e 69 71 75 65 20 72 65 73 75   but unique resu
1ddb0 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f 2a 20  lts only */../* 
1ddc0 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  The ORDER BY cla
1ddd0 75 73 65 20 69 73 20 69 67 6e 6f 72 65 64 20 66  use is ignored f
1dde0 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65 20 61 62  or all of the ab
1ddf0 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  ove */.#define I
1de00 67 6e 6f 72 61 62 6c 65 4f 72 64 65 72 62 79 28  gnorableOrderby(
1de10 58 29 20 28 28 58 2d 3e 65 44 65 73 74 29 3c 3d  X) ((X->eDest)<=
1de20 53 52 54 5f 44 69 73 74 51 75 65 75 65 29 0a 0a  SRT_DistQueue)..
1de30 23 64 65 66 69 6e 65 20 53 52 54 5f 4f 75 74 70  #define SRT_Outp
1de40 75 74 20 20 20 20 20 20 20 39 20 20 2f 2a 20 4f  ut       9  /* O
1de50 75 74 70 75 74 20 65 61 63 68 20 72 6f 77 20 6f  utput each row o
1de60 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66  f result */.#def
1de70 69 6e 65 20 53 52 54 5f 4d 65 6d 20 20 20 20 20  ine SRT_Mem     
1de80 20 20 20 20 31 30 20 20 2f 2a 20 53 74 6f 72 65      10  /* Store
1de90 20 72 65 73 75 6c 74 20 69 6e 20 61 20 6d 65 6d   result in a mem
1dea0 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a 23 64 65 66  ory cell */.#def
1deb0 69 6e 65 20 53 52 54 5f 53 65 74 20 20 20 20 20  ine SRT_Set     
1dec0 20 20 20 20 31 31 20 20 2f 2a 20 53 74 6f 72 65      11  /* Store
1ded0 20 72 65 73 75 6c 74 73 20 61 73 20 6b 65 79 73   results as keys
1dee0 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a   in an index */.
1def0 23 64 65 66 69 6e 65 20 53 52 54 5f 45 70 68 65  #define SRT_Ephe
1df00 6d 54 61 62 20 20 20 20 31 32 20 20 2f 2a 20 43  mTab    12  /* C
1df10 72 65 61 74 65 20 74 72 61 6e 73 69 65 6e 74 20  reate transient 
1df20 74 61 62 20 61 6e 64 20 73 74 6f 72 65 20 6c 69  tab and store li
1df30 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 2a 2f 0a  ke SRT_Table */.
1df40 23 64 65 66 69 6e 65 20 53 52 54 5f 43 6f 72 6f  #define SRT_Coro
1df50 75 74 69 6e 65 20 20 20 31 33 20 20 2f 2a 20 47  utine   13  /* G
1df60 65 6e 65 72 61 74 65 20 61 20 73 69 6e 67 6c 65  enerate a single
1df70 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a   row of result *
1df80 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 54 61  /.#define SRT_Ta
1df90 62 6c 65 20 20 20 20 20 20 20 31 34 20 20 2f 2a  ble       14  /*
1dfa0 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73   Store result as
1dfb0 20 64 61 74 61 20 77 69 74 68 20 61 6e 20 61 75   data with an au
1dfc0 74 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f  tomatic rowid */
1dfd0 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
1dfe0 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 62 6a 65  nce of this obje
1dff0 63 74 20 64 65 73 63 72 69 62 65 73 20 77 68 65  ct describes whe
1e000 72 65 20 74 6f 20 70 75 74 20 6f 66 20 74 68 65  re to put of the
1e010 20 72 65 73 75 6c 74 73 20 6f 66 0a 2a 2a 20 61   results of.** a
1e020 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1e030 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c  t..*/.struct Sel
1e040 65 63 74 44 65 73 74 20 7b 0a 20 20 75 38 20 65  ectDest {.  u8 e
1e050 44 65 73 74 3b 20 20 20 20 20 20 20 20 20 20 20  Dest;           
1e060 20 2f 2a 20 48 6f 77 20 74 6f 20 64 69 73 70 6f   /* How to dispo
1e070 73 65 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  se of the result
1e080 73 2e 20 20 4f 6e 20 6f 66 20 53 52 54 5f 2a 20  s.  On of SRT_* 
1e090 61 62 6f 76 65 2e 20 2a 2f 0a 20 20 69 6e 74 20  above. */.  int 
1e0a0 69 53 44 50 61 72 6d 3b 20 20 20 20 20 20 20 20  iSDParm;        
1e0b0 20 2f 2a 20 41 20 70 61 72 61 6d 65 74 65 72 20   /* A parameter 
1e0c0 75 73 65 64 20 62 79 20 74 68 65 20 65 44 65 73  used by the eDes
1e0d0 74 20 64 69 73 70 6f 73 61 6c 20 6d 65 74 68 6f  t disposal metho
1e0e0 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 64 73 74  d */.  int iSdst
1e0f0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42  ;           /* B
1e100 61 73 65 20 72 65 67 69 73 74 65 72 20 77 68 65  ase register whe
1e110 72 65 20 72 65 73 75 6c 74 73 20 61 72 65 20 77  re results are w
1e120 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20  ritten */.  int 
1e130 6e 53 64 73 74 3b 20 20 20 20 20 20 20 20 20 20  nSdst;          
1e140 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65   /* Number of re
1e150 67 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65  gisters allocate
1e160 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 66  d */.  char *zAf
1e170 66 53 64 73 74 3b 20 20 20 20 20 20 2f 2a 20 41  fSdst;      /* A
1e180 66 66 69 6e 69 74 79 20 75 73 65 64 20 77 68 65  ffinity used whe
1e190 6e 20 65 44 65 73 74 3d 3d 53 52 54 5f 53 65 74  n eDest==SRT_Set
1e1a0 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
1e1b0 70 4f 72 64 65 72 42 79 3b 20 20 2f 2a 20 4b 65  pOrderBy;  /* Ke
1e1c0 79 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 53 52  y columns for SR
1e1d0 54 5f 51 75 65 75 65 20 61 6e 64 20 53 52 54 5f  T_Queue and SRT_
1e1e0 44 69 73 74 51 75 65 75 65 20 2a 2f 0a 7d 3b 0a  DistQueue */.};.
1e1f0 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67 20 63 6f  ./*.** During co
1e200 64 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66  de generation of
1e210 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74   statements that
1e220 20 64 6f 20 69 6e 73 65 72 74 73 20 69 6e 74 6f   do inserts into
1e230 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2a   AUTOINCREMENT.*
1e240 2a 20 74 61 62 6c 65 73 2c 20 74 68 65 20 66 6f  * tables, the fo
1e250 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f 72 6d 61 74  llowing informat
1e260 69 6f 6e 20 69 73 20 61 74 74 61 63 68 65 64 20  ion is attached 
1e270 74 6f 20 74 68 65 20 54 61 62 6c 65 2e 75 2e 61  to the Table.u.a
1e280 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f 69 6e  utoInc.p.** poin
1e290 74 65 72 20 6f 66 20 65 61 63 68 20 61 75 74 6f  ter of each auto
1e2a0 69 6e 63 72 65 6d 65 6e 74 20 74 61 62 6c 65 20  increment table 
1e2b0 74 6f 20 72 65 63 6f 72 64 20 73 6f 6d 65 20 73  to record some s
1e2c0 69 64 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ide information 
1e2d0 74 68 61 74 0a 2a 2a 20 74 68 65 20 63 6f 64 65  that.** the code
1e2e0 20 67 65 6e 65 72 61 74 6f 72 20 6e 65 65 64 73   generator needs
1e2f0 2e 20 20 57 65 20 68 61 76 65 20 74 6f 20 6b 65  .  We have to ke
1e300 65 70 20 70 65 72 2d 74 61 62 6c 65 20 61 75 74  ep per-table aut
1e310 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20 69 6e  oincrement.** in
1e320 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 63 61 73  formation in cas
1e330 65 20 69 6e 73 65 72 74 73 20 61 72 65 20 64 6f  e inserts are do
1e340 6e 65 20 77 69 74 68 69 6e 20 74 72 69 67 67 65  ne within trigge
1e350 72 73 2e 20 20 54 72 69 67 67 65 72 73 20 64 6f  rs.  Triggers do
1e360 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c 79   not.** normally
1e370 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 69   coordinate thei
1e380 72 20 61 63 74 69 76 69 74 69 65 73 2c 20 62 75  r activities, bu
1e390 74 20 77 65 20 64 6f 20 6e 65 65 64 20 74 6f 20  t we do need to 
1e3a0 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 0a 2a  coordinate the.*
1e3b0 2a 20 6c 6f 61 64 69 6e 67 20 61 6e 64 20 73 61  * loading and sa
1e3c0 76 69 6e 67 20 6f 66 20 61 75 74 6f 69 6e 63 72  ving of autoincr
1e3d0 65 6d 65 6e 74 20 69 6e 66 6f 72 6d 61 74 69 6f  ement informatio
1e3e0 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74  n..*/.struct Aut
1e3f0 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20 20 41 75 74  oincInfo {.  Aut
1e400 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e 65 78 74 3b  oincInfo *pNext;
1e410 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 66 6f 20     /* Next info 
1e420 62 6c 6f 63 6b 20 69 6e 20 61 20 6c 69 73 74 20  block in a list 
1e430 6f 66 20 74 68 65 6d 20 61 6c 6c 20 2a 2f 0a 20  of them all */. 
1e440 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20   Table *pTab;   
1e450 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20         /* Table 
1e460 74 68 69 73 20 69 6e 66 6f 20 62 6c 6f 63 6b 20  this info block 
1e470 72 65 66 65 72 73 20 74 6f 20 2a 2f 0a 20 20 69  refers to */.  i
1e480 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20 20 20  nt iDb;         
1e490 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e       /* Index in
1e4a0 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f   sqlite3.aDb[] o
1e4b0 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69  f database holdi
1e4c0 6e 67 20 70 54 61 62 20 2a 2f 0a 20 20 69 6e 74  ng pTab */.  int
1e4d0 20 72 65 67 43 74 72 3b 20 20 20 20 20 20 20 20   regCtr;        
1e4e0 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67     /* Memory reg
1e4f0 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 74 68  ister holding th
1e500 65 20 72 6f 77 69 64 20 63 6f 75 6e 74 65 72 20  e rowid counter 
1e510 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a  */.};../*.** Siz
1e520 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  e of the column 
1e530 63 61 63 68 65 0a 2a 2f 0a 23 69 66 6e 64 65 66  cache.*/.#ifndef
1e540 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43   SQLITE_N_COLCAC
1e550 48 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  HE.# define SQLI
1e560 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 20 31 30  TE_N_COLCACHE 10
1e570 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
1e580 74 20 6c 65 61 73 74 20 6f 6e 65 20 69 6e 73 74  t least one inst
1e590 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
1e5a0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
1e5b0 69 73 20 63 72 65 61 74 65 64 20 66 6f 72 20 65  is created for e
1e5c0 61 63 68 0a 2a 2a 20 74 72 69 67 67 65 72 20 74  ach.** trigger t
1e5d0 68 61 74 20 6d 61 79 20 62 65 20 66 69 72 65 64  hat may be fired
1e5e0 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 20 61   while parsing a
1e5f0 6e 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45  n INSERT, UPDATE
1e600 20 6f 72 20 44 45 4c 45 54 45 0a 2a 2a 20 73 74   or DELETE.** st
1e610 61 74 65 6d 65 6e 74 2e 20 41 6c 6c 20 73 75 63  atement. All suc
1e620 68 20 6f 62 6a 65 63 74 73 20 61 72 65 20 73 74  h objects are st
1e630 6f 72 65 64 20 69 6e 20 74 68 65 20 6c 69 6e 6b  ored in the link
1e640 65 64 20 6c 69 73 74 20 68 65 61 64 65 64 20 61  ed list headed a
1e650 74 0a 2a 2a 20 50 61 72 73 65 2e 70 54 72 69 67  t.** Parse.pTrig
1e660 67 65 72 50 72 67 20 61 6e 64 20 64 65 6c 65 74  gerPrg and delet
1e670 65 64 20 6f 6e 63 65 20 73 74 61 74 65 6d 65 6e  ed once statemen
1e680 74 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 68 61  t compilation ha
1e690 73 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65  s been.** comple
1e6a0 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62  ted..**.** A Vdb
1e6b0 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68  e sub-program th
1e6c0 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68  at implements th
1e6d0 65 20 62 6f 64 79 20 61 6e 64 20 57 48 45 4e 20  e body and WHEN 
1e6e0 63 6c 61 75 73 65 20 6f 66 20 74 72 69 67 67 65  clause of trigge
1e6f0 72 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e  r.** TriggerPrg.
1e700 70 54 72 69 67 67 65 72 2c 20 61 73 73 75 6d 69  pTrigger, assumi
1e710 6e 67 20 61 20 64 65 66 61 75 6c 74 20 4f 4e 20  ng a default ON 
1e720 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20  CONFLICT clause 
1e730 6f 66 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67  of.** TriggerPrg
1e740 2e 6f 72 63 6f 6e 66 2c 20 69 73 20 73 74 6f 72  .orconf, is stor
1e750 65 64 20 69 6e 20 74 68 65 20 54 72 69 67 67 65  ed in the Trigge
1e760 72 50 72 67 2e 70 50 72 6f 67 72 61 6d 20 76 61  rPrg.pProgram va
1e770 72 69 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 50  riable..** The P
1e780 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67  arse.pTriggerPrg
1e790 20 6c 69 73 74 20 6e 65 76 65 72 20 63 6f 6e 74   list never cont
1e7a0 61 69 6e 73 20 74 77 6f 20 65 6e 74 72 69 65 73  ains two entries
1e7b0 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 0a 2a   with the same.*
1e7c0 2a 20 76 61 6c 75 65 73 20 66 6f 72 20 62 6f 74  * values for bot
1e7d0 68 20 70 54 72 69 67 67 65 72 20 61 6e 64 20 6f  h pTrigger and o
1e7e0 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  rconf..**.** The
1e7f0 20 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c   TriggerPrg.aCol
1e800 6d 61 73 6b 5b 30 5d 20 76 61 72 69 61 62 6c 65  mask[0] variable
1e810 20 69 73 20 73 65 74 20 74 6f 20 61 20 6d 61 73   is set to a mas
1e820 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d  k of old.* colum
1e830 6e 73 0a 2a 2a 20 61 63 63 65 73 73 65 64 20 28  ns.** accessed (
1e840 6f 72 20 73 65 74 20 74 6f 20 30 20 66 6f 72 20  or set to 0 for 
1e850 74 72 69 67 67 65 72 73 20 66 69 72 65 64 20 61  triggers fired a
1e860 73 20 61 20 72 65 73 75 6c 74 20 6f 66 20 49 4e  s a result of IN
1e870 53 45 52 54 0a 2a 2a 20 73 74 61 74 65 6d 65 6e  SERT.** statemen
1e880 74 73 29 2e 20 53 69 6d 69 6c 61 72 6c 79 2c 20  ts). Similarly, 
1e890 74 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 61  the TriggerPrg.a
1e8a0 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61 72 69 61  Colmask[1] varia
1e8b0 62 6c 65 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a  ble is set to.**
1e8c0 20 61 20 6d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a   a mask of new.*
1e8d0 20 63 6f 6c 75 6d 6e 73 20 75 73 65 64 20 62 79   columns used by
1e8e0 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f   the program..*/
1e8f0 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72 50  .struct TriggerP
1e900 72 67 20 7b 0a 20 20 54 72 69 67 67 65 72 20 2a  rg {.  Trigger *
1e910 70 54 72 69 67 67 65 72 3b 20 20 20 20 20 20 2f  pTrigger;      /
1e920 2a 20 54 72 69 67 67 65 72 20 74 68 69 73 20 70  * Trigger this p
1e930 72 6f 67 72 61 6d 20 77 61 73 20 63 6f 64 65 64  rogram was coded
1e940 20 66 72 6f 6d 20 2a 2f 0a 20 20 54 72 69 67 67   from */.  Trigg
1e950 65 72 50 72 67 20 2a 70 4e 65 78 74 3b 20 20 20  erPrg *pNext;   
1e960 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79     /* Next entry
1e970 20 69 6e 20 50 61 72 73 65 2e 70 54 72 69 67 67   in Parse.pTrigg
1e980 65 72 50 72 67 20 6c 69 73 74 20 2a 2f 0a 20 20  erPrg list */.  
1e990 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f  SubProgram *pPro
1e9a0 67 72 61 6d 3b 20 20 20 2f 2a 20 50 72 6f 67 72  gram;   /* Progr
1e9b0 61 6d 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20  am implementing 
1e9c0 70 54 72 69 67 67 65 72 2f 6f 72 63 6f 6e 66 20  pTrigger/orconf 
1e9d0 2a 2f 0a 20 20 69 6e 74 20 6f 72 63 6f 6e 66 3b  */.  int orconf;
1e9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1e9f0 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c  Default ON CONFL
1ea00 49 43 54 20 70 6f 6c 69 63 79 20 2a 2f 0a 20 20  ICT policy */.  
1ea10 75 33 32 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d 3b  u32 aColmask[2];
1ea20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 73          /* Masks
1ea30 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e 2a   of old.*, new.*
1ea40 20 63 6f 6c 75 6d 6e 73 20 61 63 63 65 73 73 65   columns accesse
1ea50 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  d */.};../*.** T
1ea60 68 65 20 79 44 62 4d 61 73 6b 20 64 61 74 61 74  he yDbMask datat
1ea70 79 70 65 20 66 6f 72 20 74 68 65 20 62 69 74 6d  ype for the bitm
1ea80 61 73 6b 20 6f 66 20 61 6c 6c 20 61 74 74 61 63  ask of all attac
1ea90 68 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a  hed databases..*
1eaa0 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  /.#if SQLITE_MAX
1eab0 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20 74  _ATTACHED>30.  t
1eac0 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20  ypedef unsigned 
1ead0 63 68 61 72 20 79 44 62 4d 61 73 6b 5b 28 53 51  char yDbMask[(SQ
1eae0 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45  LITE_MAX_ATTACHE
1eaf0 44 2b 39 29 2f 38 5d 3b 0a 23 20 64 65 66 69 6e  D+9)/8];.# defin
1eb00 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49  e DbMaskTest(M,I
1eb10 29 20 20 20 20 28 28 28 4d 29 5b 28 49 29 2f 38  )    (((M)[(I)/8
1eb20 5d 26 28 31 3c 3c 28 28 49 29 26 37 29 29 29 21  ]&(1<<((I)&7)))!
1eb30 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  =0).# define DbM
1eb40 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20 20  askZero(M)      
1eb50 6d 65 6d 73 65 74 28 28 4d 29 2c 30 2c 73 69 7a  memset((M),0,siz
1eb60 65 6f 66 28 4d 29 29 0a 23 20 64 65 66 69 6e 65  eof(M)).# define
1eb70 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20   DbMaskSet(M,I) 
1eb80 20 20 20 20 28 4d 29 5b 28 49 29 2f 38 5d 7c 3d      (M)[(I)/8]|=
1eb90 28 31 3c 3c 28 28 49 29 26 37 29 29 0a 23 20 64  (1<<((I)&7)).# d
1eba0 65 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a  efine DbMaskAllZ
1ebb0 65 72 6f 28 4d 29 20 20 20 73 71 6c 69 74 65 33  ero(M)   sqlite3
1ebc0 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29  DbMaskAllZero(M)
1ebd0 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1ebe0 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 73 71  NonZero(M)   (sq
1ebf0 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65  lite3DbMaskAllZe
1ec00 72 6f 28 4d 29 3d 3d 30 29 0a 23 65 6c 73 65 0a  ro(M)==0).#else.
1ec10 20 20 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e    typedef unsign
1ec20 65 64 20 69 6e 74 20 79 44 62 4d 61 73 6b 3b 0a  ed int yDbMask;.
1ec30 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 54  # define DbMaskT
1ec40 65 73 74 28 4d 2c 49 29 20 20 20 20 28 28 28 4d  est(M,I)    (((M
1ec50 29 26 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c  )&(((yDbMask)1)<
1ec60 3c 28 49 29 29 29 21 3d 30 29 0a 23 20 64 65 66  <(I)))!=0).# def
1ec70 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d  ine DbMaskZero(M
1ec80 29 20 20 20 20 20 20 28 4d 29 3d 30 0a 23 20 64  )      (M)=0.# d
1ec90 65 66 69 6e 65 20 44 62 4d 61 73 6b 53 65 74 28  efine DbMaskSet(
1eca0 4d 2c 49 29 20 20 20 20 20 28 4d 29 7c 3d 28 28  M,I)     (M)|=((
1ecb0 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29  (yDbMask)1)<<(I)
1ecc0 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ).# define DbMas
1ecd0 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 28 4d  kAllZero(M)   (M
1ece0 29 3d 3d 30 0a 23 20 64 65 66 69 6e 65 20 44 62  )==0.# define Db
1ecf0 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20  MaskNonZero(M)  
1ed00 20 28 4d 29 21 3d 30 0a 23 65 6e 64 69 66 0a 0a   (M)!=0.#endif..
1ed10 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20 70 61 72  /*.** An SQL par
1ed20 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 41 20  ser context.  A 
1ed30 63 6f 70 79 20 6f 66 20 74 68 69 73 20 73 74 72  copy of this str
1ed40 75 63 74 75 72 65 20 69 73 20 70 61 73 73 65 64  ucture is passed
1ed50 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 68 65 20   through.** the 
1ed60 70 61 72 73 65 72 20 61 6e 64 20 64 6f 77 6e 20  parser and down 
1ed70 69 6e 74 6f 20 61 6c 6c 20 74 68 65 20 70 61 72  into all the par
1ed80 73 65 72 20 61 63 74 69 6f 6e 20 72 6f 75 74 69  ser action routi
1ed90 6e 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a  ne in order to.*
1eda0 2a 20 63 61 72 72 79 20 61 72 6f 75 6e 64 20 69  * carry around i
1edb0 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20  nformation that 
1edc0 69 73 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68 65  is global to the
1edd0 20 65 6e 74 69 72 65 20 70 61 72 73 65 2e 0a 2a   entire parse..*
1ede0 2a 0a 2a 2a 20 54 68 65 20 73 74 72 75 63 74 75  *.** The structu
1edf0 72 65 20 69 73 20 64 69 76 69 64 65 64 20 69 6e  re is divided in
1ee00 74 6f 20 74 77 6f 20 70 61 72 74 73 2e 20 20 57  to two parts.  W
1ee10 68 65 6e 20 74 68 65 20 70 61 72 73 65 72 20 61  hen the parser a
1ee20 6e 64 20 63 6f 64 65 0a 2a 2a 20 67 65 6e 65 72  nd code.** gener
1ee30 61 74 65 20 63 61 6c 6c 20 74 68 65 6d 73 65 6c  ate call themsel
1ee40 76 65 73 20 72 65 63 75 72 73 69 76 65 6c 79 2c  ves recursively,
1ee50 20 74 68 65 20 66 69 72 73 74 20 70 61 72 74 20   the first part 
1ee60 6f 66 20 74 68 65 20 73 74 72 75 63 74 75 72 65  of the structure
1ee70 0a 2a 2a 20 69 73 20 63 6f 6e 73 74 61 6e 74 20  .** is constant 
1ee80 62 75 74 20 74 68 65 20 73 65 63 6f 6e 64 20 70  but the second p
1ee90 61 72 74 20 69 73 20 72 65 73 65 74 20 61 74 20  art is reset at 
1eea0 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 61 6e  the beginning an
1eeb0 64 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 61 63 68  d end of.** each
1eec0 20 72 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a   recursion..**.*
1eed0 2a 20 54 68 65 20 6e 54 61 62 6c 65 4c 6f 63 6b  * The nTableLock
1eee0 20 61 6e 64 20 61 54 61 62 6c 65 4c 6f 63 6b 20   and aTableLock 
1eef0 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 6f 6e  variables are on
1ef00 6c 79 20 75 73 65 64 20 69 66 20 74 68 65 20 73  ly used if the s
1ef10 68 61 72 65 64 2d 63 61 63 68 65 0a 2a 2a 20 66  hared-cache.** f
1ef20 65 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65  eature is enable
1ef30 64 20 28 69 66 20 73 71 6c 69 74 65 33 54 73 64  d (if sqlite3Tsd
1ef40 28 29 2d 3e 75 73 65 53 68 61 72 65 64 44 61 74  ()->useSharedDat
1ef50 61 20 69 73 20 74 72 75 65 29 2e 20 54 68 65 79  a is true). They
1ef60 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20   are.** used to 
1ef70 73 74 6f 72 65 20 74 68 65 20 73 65 74 20 6f 66  store the set of
1ef80 20 74 61 62 6c 65 2d 6c 6f 63 6b 73 20 72 65 71   table-locks req
1ef90 75 69 72 65 64 20 62 79 20 74 68 65 20 73 74 61  uired by the sta
1efa0 74 65 6d 65 6e 74 20 62 65 69 6e 67 0a 2a 2a 20  tement being.** 
1efb0 63 6f 6d 70 69 6c 65 64 2e 20 46 75 6e 63 74 69  compiled. Functi
1efc0 6f 6e 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c  on sqlite3TableL
1efd0 6f 63 6b 28 29 20 69 73 20 75 73 65 64 20 74 6f  ock() is used to
1efe0 20 61 64 64 20 65 6e 74 72 69 65 73 20 74 6f 20   add entries to 
1eff0 74 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a  the.** list..*/.
1f000 73 74 72 75 63 74 20 50 61 72 73 65 20 7b 0a 20  struct Parse {. 
1f010 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
1f020 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6d 61 69        /* The mai
1f030 6e 20 64 61 74 61 62 61 73 65 20 73 74 72 75 63  n database struc
1f040 74 75 72 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ture */.  char *
1f050 7a 45 72 72 4d 73 67 3b 20 20 20 20 20 20 20 2f  zErrMsg;       /
1f060 2a 20 41 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  * An error messa
1f070 67 65 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 56  ge */.  Vdbe *pV
1f080 64 62 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  dbe;         /* 
1f090 41 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20 65 78  An engine for ex
1f0a0 65 63 75 74 69 6e 67 20 64 61 74 61 62 61 73 65  ecuting database
1f0b0 20 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20 20 69   bytecode */.  i
1f0c0 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20 20 20  nt rc;          
1f0d0 20 20 20 20 2f 2a 20 52 65 74 75 72 6e 20 63 6f      /* Return co
1f0e0 64 65 20 66 72 6f 6d 20 65 78 65 63 75 74 69 6f  de from executio
1f0f0 6e 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e 61 6d  n */.  u8 colNam
1f100 65 73 53 65 74 3b 20 20 20 20 20 20 2f 2a 20 54  esSet;      /* T
1f110 52 55 45 20 61 66 74 65 72 20 4f 50 5f 43 6f 6c  RUE after OP_Col
1f120 75 6d 6e 4e 61 6d 65 20 68 61 73 20 62 65 65 6e  umnName has been
1f130 20 69 73 73 75 65 64 20 74 6f 20 70 56 64 62 65   issued to pVdbe
1f140 20 2a 2f 0a 20 20 75 38 20 63 68 65 63 6b 53 63   */.  u8 checkSc
1f150 68 65 6d 61 3b 20 20 20 20 20 20 2f 2a 20 43 61  hema;      /* Ca
1f160 75 73 65 73 20 73 63 68 65 6d 61 20 63 6f 6f 6b  uses schema cook
1f170 69 65 20 63 68 65 63 6b 20 61 66 74 65 72 20 61  ie check after a
1f180 6e 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75 38 20  n error */.  u8 
1f190 6e 65 73 74 65 64 3b 20 20 20 20 20 20 20 20 20  nested;         
1f1a0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
1f1b0 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 74  ested calls to t
1f1c0 68 65 20 70 61 72 73 65 72 2f 63 6f 64 65 20 67  he parser/code g
1f1d0 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20 75 38  enerator */.  u8
1f1e0 20 6e 54 65 6d 70 52 65 67 3b 20 20 20 20 20 20   nTempReg;      
1f1f0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1f200 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74  temporary regist
1f210 65 72 73 20 69 6e 20 61 54 65 6d 70 52 65 67 5b  ers in aTempReg[
1f220 5d 20 2a 2f 0a 20 20 75 38 20 69 73 4d 75 6c 74  ] */.  u8 isMult
1f230 69 57 72 69 74 65 3b 20 20 20 20 20 2f 2a 20 54  iWrite;     /* T
1f240 72 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74  rue if statement
1f250 20 6d 61 79 20 6d 6f 64 69 66 79 2f 69 6e 73 65   may modify/inse
1f260 72 74 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73  rt multiple rows
1f270 20 2a 2f 0a 20 20 75 38 20 6d 61 79 41 62 6f 72   */.  u8 mayAbor
1f280 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72  t;         /* Tr
1f290 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20  ue if statement 
1f2a0 6d 61 79 20 74 68 72 6f 77 20 61 6e 20 41 42 4f  may throw an ABO
1f2b0 52 54 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a  RT exception */.
1f2c0 20 20 75 38 20 68 61 73 43 6f 6d 70 6f 75 6e 64    u8 hasCompound
1f2d0 3b 20 20 20 20 20 20 2f 2a 20 4e 65 65 64 20 74  ;      /* Need t
1f2e0 6f 20 69 6e 76 6f 6b 65 20 63 6f 6e 76 65 72 74  o invoke convert
1f2f0 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f  CompoundSelectTo
1f300 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 20 20  Subquery() */.  
1f310 75 38 20 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72  u8 okConstFactor
1f320 3b 20 20 20 20 2f 2a 20 4f 4b 20 74 6f 20 66 61  ;    /* OK to fa
1f330 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e  ctor out constan
1f340 74 73 20 2a 2f 0a 20 20 75 38 20 64 69 73 61 62  ts */.  u8 disab
1f350 6c 65 4c 6f 6f 6b 61 73 69 64 65 3b 20 2f 2a 20  leLookaside; /* 
1f360 4e 75 6d 62 65 72 20 6f 66 20 74 69 6d 65 73 20  Number of times 
1f370 6c 6f 6f 6b 61 73 69 64 65 20 68 61 73 20 62 65  lookaside has be
1f380 65 6e 20 64 69 73 61 62 6c 65 64 20 2a 2f 0a 20  en disabled */. 
1f390 20 75 38 20 6e 43 6f 6c 43 61 63 68 65 3b 20 20   u8 nColCache;  
1f3a0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1f3b0 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43  of entries in aC
1f3c0 6f 6c 43 61 63 68 65 5b 5d 20 2a 2f 0a 20 20 69  olCache[] */.  i
1f3d0 6e 74 20 6e 52 61 6e 67 65 52 65 67 3b 20 20 20  nt nRangeReg;   
1f3e0 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74      /* Size of t
1f3f0 68 65 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67  he temporary reg
1f400 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20  ister block */. 
1f410 20 69 6e 74 20 69 52 61 6e 67 65 52 65 67 3b 20   int iRangeReg; 
1f420 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 72        /* First r
1f430 65 67 69 73 74 65 72 20 69 6e 20 74 65 6d 70 6f  egister in tempo
1f440 72 61 72 79 20 72 65 67 69 73 74 65 72 20 62 6c  rary register bl
1f450 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72  ock */.  int nEr
1f460 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  r;            /*
1f470 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72   Number of error
1f480 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20  s seen */.  int 
1f490 6e 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20  nTab;           
1f4a0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 72   /* Number of pr
1f4b0 65 76 69 6f 75 73 6c 79 20 61 6c 6c 6f 63 61 74  eviously allocat
1f4c0 65 64 20 56 44 42 45 20 63 75 72 73 6f 72 73 20  ed VDBE cursors 
1f4d0 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20  */.  int nMem;  
1f4e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1f4f0 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65  ber of memory ce
1f500 6c 6c 73 20 75 73 65 64 20 73 6f 20 66 61 72 20  lls used so far 
1f510 2a 2f 0a 20 20 69 6e 74 20 6e 4f 70 41 6c 6c 6f  */.  int nOpAllo
1f520 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  c;        /* Num
1f530 62 65 72 20 6f 66 20 73 6c 6f 74 73 20 61 6c 6c  ber of slots all
1f540 6f 63 61 74 65 64 20 66 6f 72 20 56 64 62 65 2e  ocated for Vdbe.
1f550 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 73  aOp[] */.  int s
1f560 7a 4f 70 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20  zOpAlloc;       
1f570 2f 2a 20 42 79 74 65 73 20 6f 66 20 6d 65 6d 6f  /* Bytes of memo
1f580 72 79 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74  ry space allocat
1f590 65 64 20 66 6f 72 20 56 64 62 65 2e 61 4f 70 5b  ed for Vdbe.aOp[
1f5a0 5d 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65 6c 66  ] */.  int iSelf
1f5b0 54 61 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  Tab;        /* T
1f5c0 61 62 6c 65 20 66 6f 72 20 61 73 73 6f 63 69 61  able for associa
1f5d0 74 65 64 20 77 69 74 68 20 61 6e 20 69 6e 64 65  ted with an inde
1f5e0 78 20 6f 6e 20 65 78 70 72 2c 20 6f 72 20 6e 65  x on expr, or ne
1f5f0 67 61 74 69 76 65 0a 20 20 20 20 20 20 20 20 20  gative.         
1f600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
1f610 20 6f 66 20 74 68 65 20 62 61 73 65 20 72 65 67   of the base reg
1f620 69 73 74 65 72 20 64 75 72 69 6e 67 20 63 68 65  ister during che
1f630 63 6b 2d 63 6f 6e 73 74 72 61 69 6e 74 20 65 76  ck-constraint ev
1f640 61 6c 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63  al */.  int iCac
1f650 68 65 4c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20  heLevel;     /* 
1f660 43 6f 6c 43 61 63 68 65 20 76 61 6c 69 64 20 77  ColCache valid w
1f670 68 65 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e  hen aColCache[].
1f680 69 4c 65 76 65 6c 3c 3d 69 43 61 63 68 65 4c 65  iLevel<=iCacheLe
1f690 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61  vel */.  int iCa
1f6a0 63 68 65 43 6e 74 3b 20 20 20 20 20 20 20 2f 2a  cheCnt;       /*
1f6b0 20 43 6f 75 6e 74 65 72 20 75 73 65 64 20 74 6f   Counter used to
1f6c0 20 67 65 6e 65 72 61 74 65 20 61 43 6f 6c 43 61   generate aColCa
1f6d0 63 68 65 5b 5d 2e 6c 72 75 20 76 61 6c 75 65 73  che[].lru values
1f6e0 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61 62 65 6c   */.  int nLabel
1f6f0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  ;          /* Nu
1f700 6d 62 65 72 20 6f 66 20 6c 61 62 65 6c 73 20 75  mber of labels u
1f710 73 65 64 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 4c  sed */.  int *aL
1f720 61 62 65 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a  abel;         /*
1f730 20 53 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 74   Space to hold t
1f740 68 65 20 6c 61 62 65 6c 73 20 2a 2f 0a 20 20 45  he labels */.  E
1f750 78 70 72 4c 69 73 74 20 2a 70 43 6f 6e 73 74 45  xprList *pConstE
1f760 78 70 72 3b 2f 2a 20 43 6f 6e 73 74 61 6e 74 20  xpr;/* Constant 
1f770 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20  expressions */. 
1f780 20 54 6f 6b 65 6e 20 63 6f 6e 73 74 72 61 69 6e   Token constrain
1f790 74 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f 66  tName;/* Name of
1f7a0 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20   the constraint 
1f7b0 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20  currently being 
1f7c0 70 61 72 73 65 64 20 2a 2f 0a 20 20 79 44 62 4d  parsed */.  yDbM
1f7d0 61 73 6b 20 77 72 69 74 65 4d 61 73 6b 3b 20 20  ask writeMask;  
1f7e0 20 2f 2a 20 53 74 61 72 74 20 61 20 77 72 69 74   /* Start a writ
1f7f0 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e  e transaction on
1f800 20 74 68 65 73 65 20 64 61 74 61 62 61 73 65 73   these databases
1f810 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 63 6f   */.  yDbMask co
1f820 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a 20 42 69  okieMask;  /* Bi
1f830 74 6d 61 73 6b 20 6f 66 20 73 63 68 65 6d 61 20  tmask of schema 
1f840 76 65 72 69 66 69 65 64 20 64 61 74 61 62 61 73  verified databas
1f850 65 73 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52  es */.  int regR
1f860 6f 77 69 64 3b 20 20 20 20 20 20 20 20 2f 2a 20  owid;        /* 
1f870 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  Register holding
1f880 20 72 6f 77 69 64 20 6f 66 20 43 52 45 41 54 45   rowid of CREATE
1f890 20 54 41 42 4c 45 20 65 6e 74 72 79 20 2a 2f 0a   TABLE entry */.
1f8a0 20 20 69 6e 74 20 72 65 67 52 6f 6f 74 3b 20 20    int regRoot;  
1f8b0 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
1f8c0 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 6f 74 20  er holding root 
1f8d0 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20  page number for 
1f8e0 6e 65 77 20 6f 62 6a 65 63 74 73 20 2a 2f 0a 20  new objects */. 
1f8f0 20 69 6e 74 20 6e 4d 61 78 41 72 67 3b 20 20 20   int nMaxArg;   
1f900 20 20 20 20 20 20 2f 2a 20 4d 61 78 20 61 72 67        /* Max arg
1f910 73 20 70 61 73 73 65 64 20 74 6f 20 75 73 65 72  s passed to user
1f920 20 66 75 6e 63 74 69 6f 6e 20 62 79 20 73 75 62   function by sub
1f930 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 23 69 66 20  -program */.#if 
1f940 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42  SELECTTRACE_ENAB
1f950 4c 45 44 0a 20 20 69 6e 74 20 6e 53 65 6c 65 63  LED.  int nSelec
1f960 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  t;         /* Nu
1f970 6d 62 65 72 20 6f 66 20 53 45 4c 45 43 54 20 73  mber of SELECT s
1f980 74 61 74 65 6d 65 6e 74 73 20 73 65 65 6e 20 2a  tatements seen *
1f990 2f 0a 20 20 69 6e 74 20 6e 53 65 6c 65 63 74 49  /.  int nSelectI
1f9a0 6e 64 65 6e 74 3b 20 20 20 2f 2a 20 48 6f 77 20  ndent;   /* How 
1f9b0 66 61 72 20 74 6f 20 69 6e 64 65 6e 74 20 53 45  far to indent SE
1f9c0 4c 45 43 54 54 52 41 43 45 28 29 20 6f 75 74 70  LECTTRACE() outp
1f9d0 75 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66  ut */.#endif.#if
1f9e0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1f9f0 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20  _SHARED_CACHE.  
1fa00 69 6e 74 20 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20  int nTableLock; 
1fa10 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1fa20 20 6f 66 20 6c 6f 63 6b 73 20 69 6e 20 61 54 61   of locks in aTa
1fa30 62 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20 54 61 62  bleLock */.  Tab
1fa40 6c 65 4c 6f 63 6b 20 2a 61 54 61 62 6c 65 4c 6f  leLock *aTableLo
1fa50 63 6b 3b 20 2f 2a 20 52 65 71 75 69 72 65 64 20  ck; /* Required 
1fa60 74 61 62 6c 65 20 6c 6f 63 6b 73 20 66 6f 72 20  table locks for 
1fa70 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64  shared-cache mod
1fa80 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 41 75  e */.#endif.  Au
1fa90 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 41 69 6e 63  toincInfo *pAinc
1faa0 3b 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f  ;  /* Informatio
1fab0 6e 20 61 62 6f 75 74 20 41 55 54 4f 49 4e 43 52  n about AUTOINCR
1fac0 45 4d 45 4e 54 20 63 6f 75 6e 74 65 72 73 20 2a  EMENT counters *
1fad0 2f 0a 20 20 50 61 72 73 65 20 2a 70 54 6f 70 6c  /.  Parse *pTopl
1fae0 65 76 65 6c 3b 20 20 20 20 2f 2a 20 50 61 72 73  evel;    /* Pars
1faf0 65 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20  e structure for 
1fb00 6d 61 69 6e 20 70 72 6f 67 72 61 6d 20 28 6f 72  main program (or
1fb10 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 54 61 62 6c   NULL) */.  Tabl
1fb20 65 20 2a 70 54 72 69 67 67 65 72 54 61 62 3b 20  e *pTriggerTab; 
1fb30 20 2f 2a 20 54 61 62 6c 65 20 74 72 69 67 67 65   /* Table trigge
1fb40 72 73 20 61 72 65 20 62 65 69 6e 67 20 63 6f 64  rs are being cod
1fb50 65 64 20 66 6f 72 20 2a 2f 0a 20 20 69 6e 74 20  ed for */.  int 
1fb60 61 64 64 72 43 72 54 61 62 3b 20 20 20 20 20 20  addrCrTab;      
1fb70 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 4f   /* Address of O
1fb80 50 5f 43 72 65 61 74 65 42 74 72 65 65 20 6f 70  P_CreateBtree op
1fb90 63 6f 64 65 20 6f 6e 20 43 52 45 41 54 45 20 54  code on CREATE T
1fba0 41 42 4c 45 20 2a 2f 0a 20 20 75 33 32 20 6e 51  ABLE */.  u32 nQ
1fbb0 75 65 72 79 4c 6f 6f 70 3b 20 20 20 20 20 20 2f  ueryLoop;      /
1fbc0 2a 20 45 73 74 20 6e 75 6d 62 65 72 20 6f 66 20  * Est number of 
1fbd0 69 74 65 72 61 74 69 6f 6e 73 20 6f 66 20 61 20  iterations of a 
1fbe0 71 75 65 72 79 20 28 31 30 2a 6c 6f 67 32 28 4e  query (10*log2(N
1fbf0 29 29 20 2a 2f 0a 20 20 75 33 32 20 6f 6c 64 6d  )) */.  u32 oldm
1fc00 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ask;         /* 
1fc10 4d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f  Mask of old.* co
1fc20 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64  lumns referenced
1fc30 20 2a 2f 0a 20 20 75 33 32 20 6e 65 77 6d 61 73   */.  u32 newmas
1fc40 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  k;         /* Ma
1fc50 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75  sk of new.* colu
1fc60 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a  mns referenced *
1fc70 2f 0a 20 20 75 38 20 65 54 72 69 67 67 65 72 4f  /.  u8 eTriggerO
1fc80 70 3b 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 55  p;       /* TK_U
1fc90 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54  PDATE, TK_INSERT
1fca0 20 6f 72 20 54 4b 5f 44 45 4c 45 54 45 20 2a 2f   or TK_DELETE */
1fcb0 0a 20 20 75 38 20 65 4f 72 63 6f 6e 66 3b 20 20  .  u8 eOrconf;  
1fcc0 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
1fcd0 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70  lt ON CONFLICT p
1fce0 6f 6c 69 63 79 20 66 6f 72 20 74 72 69 67 67 65  olicy for trigge
1fcf0 72 20 73 74 65 70 73 20 2a 2f 0a 20 20 75 38 20  r steps */.  u8 
1fd00 64 69 73 61 62 6c 65 54 72 69 67 67 65 72 73 3b  disableTriggers;
1fd10 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 64 69 73    /* True to dis
1fd20 61 62 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f  able triggers */
1fd30 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..  /***********
1fd40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fd50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fd60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fd70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a  ***************.
1fd80 20 20 2a 2a 20 46 69 65 6c 64 73 20 61 62 6f 76    ** Fields abov
1fd90 65 20 6d 75 73 74 20 62 65 20 69 6e 69 74 69 61  e must be initia
1fda0 6c 69 7a 65 64 20 74 6f 20 7a 65 72 6f 2e 20 20  lized to zero.  
1fdb0 54 68 65 20 66 69 65 6c 64 73 20 74 68 61 74 20  The fields that 
1fdc0 66 6f 6c 6c 6f 77 2c 0a 20 20 2a 2a 20 64 6f 77  follow,.  ** dow
1fdd0 6e 20 74 6f 20 74 68 65 20 62 65 67 69 6e 6e 69  n to the beginni
1fde0 6e 67 20 6f 66 20 74 68 65 20 72 65 63 75 72 73  ng of the recurs
1fdf0 69 76 65 20 73 65 63 74 69 6f 6e 2c 20 64 6f 20  ive section, do 
1fe00 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62 65 0a 20  not need to be. 
1fe10 20 2a 2a 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   ** initialized 
1fe20 61 73 20 74 68 65 79 20 77 69 6c 6c 20 62 65 20  as they will be 
1fe30 73 65 74 20 62 65 66 6f 72 65 20 62 65 69 6e 67  set before being
1fe40 20 75 73 65 64 2e 20 20 54 68 65 20 62 6f 75 6e   used.  The boun
1fe50 64 61 72 79 20 69 73 0a 20 20 2a 2a 20 64 65 74  dary is.  ** det
1fe60 65 72 6d 69 6e 65 64 20 62 79 20 6f 66 66 73 65  ermined by offse
1fe70 74 6f 66 28 50 61 72 73 65 2c 61 43 6f 6c 43 61  tof(Parse,aColCa
1fe80 63 68 65 29 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a  che)..  ********
1fe90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fea0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1feb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fec0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fed0 2a 2a 2f 0a 0a 20 20 73 74 72 75 63 74 20 79 43  **/..  struct yC
1fee0 6f 6c 43 61 63 68 65 20 7b 0a 20 20 20 20 69 6e  olCache {.    in
1fef0 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20  t iTable;       
1ff00 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 75 72      /* Table cur
1ff10 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20  sor number */.  
1ff20 20 20 69 31 36 20 69 43 6f 6c 75 6d 6e 3b 20 20    i16 iColumn;  
1ff30 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65          /* Table
1ff40 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 2a   column number *
1ff50 2f 0a 20 20 20 20 75 38 20 74 65 6d 70 52 65 67  /.    u8 tempReg
1ff60 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69  ;           /* i
1ff70 52 65 67 20 69 73 20 61 20 74 65 6d 70 20 72 65  Reg is a temp re
1ff80 67 69 73 74 65 72 20 74 68 61 74 20 6e 65 65 64  gister that need
1ff90 73 20 74 6f 20 62 65 20 66 72 65 65 64 20 2a 2f  s to be freed */
1ffa0 0a 20 20 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b  .    int iLevel;
1ffb0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65             /* Ne
1ffc0 73 74 69 6e 67 20 6c 65 76 65 6c 20 2a 2f 0a 20  sting level */. 
1ffd0 20 20 20 69 6e 74 20 69 52 65 67 3b 20 20 20 20     int iReg;    
1ffe0 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 20           /* Reg 
1fff0 77 69 74 68 20 76 61 6c 75 65 20 6f 66 20 74 68  with value of th
20000 69 73 20 63 6f 6c 75 6d 6e 2e 20 30 20 6d 65 61  is column. 0 mea
20010 6e 73 20 6e 6f 6e 65 2e 20 2a 2f 0a 20 20 20 20  ns none. */.    
20020 69 6e 74 20 6c 72 75 3b 20 20 20 20 20 20 20 20  int lru;        
20030 20 20 20 20 20 20 2f 2a 20 4c 65 61 73 74 20 72        /* Least r
20040 65 63 65 6e 74 6c 79 20 75 73 65 64 20 65 6e 74  ecently used ent
20050 72 79 20 68 61 73 20 74 68 65 20 73 6d 61 6c 6c  ry has the small
20060 65 73 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20 7d  est value */.  }
20070 20 61 43 6f 6c 43 61 63 68 65 5b 53 51 4c 49 54   aColCache[SQLIT
20080 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 5d 3b 20 20  E_N_COLCACHE];  
20090 2f 2a 20 4f 6e 65 20 66 6f 72 20 65 61 63 68 20  /* One for each 
200a0 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20 65 6e 74  column cache ent
200b0 72 79 20 2a 2f 0a 20 20 69 6e 74 20 61 54 65 6d  ry */.  int aTem
200c0 70 52 65 67 5b 38 5d 3b 20 20 20 20 20 20 20 20  pReg[8];        
200d0 2f 2a 20 48 6f 6c 64 69 6e 67 20 61 72 65 61 20  /* Holding area 
200e0 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 72 65  for temporary re
200f0 67 69 73 74 65 72 73 20 2a 2f 0a 20 20 54 6f 6b  gisters */.  Tok
20100 65 6e 20 73 4e 61 6d 65 54 6f 6b 65 6e 3b 20 20  en sNameToken;  
20110 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 77 69       /* Token wi
20120 74 68 20 75 6e 71 75 61 6c 69 66 69 65 64 20 73  th unqualified s
20130 63 68 65 6d 61 20 6f 62 6a 65 63 74 20 6e 61 6d  chema object nam
20140 65 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a  e */..  /*******
20150 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20160 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20170 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20180 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20190 2a 0a 20 20 2a 2a 20 41 62 6f 76 65 20 69 73 20  *.  ** Above is 
201a0 63 6f 6e 73 74 61 6e 74 20 62 65 74 77 65 65 6e  constant between
201b0 20 72 65 63 75 72 73 69 6f 6e 73 2e 20 20 42 65   recursions.  Be
201c0 6c 6f 77 20 69 73 20 72 65 73 65 74 20 62 65 66  low is reset bef
201d0 6f 72 65 20 61 6e 64 20 61 66 74 65 72 0a 20 20  ore and after.  
201e0 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73 69 6f  ** each recursio
201f0 6e 2e 20 20 54 68 65 20 62 6f 75 6e 64 61 72 79  n.  The boundary
20200 20 62 65 74 77 65 65 6e 20 74 68 65 73 65 20 74   between these t
20210 77 6f 20 72 65 67 69 6f 6e 73 20 69 73 20 64 65  wo regions is de
20220 74 65 72 6d 69 6e 65 64 0a 20 20 2a 2a 20 75 73  termined.  ** us
20230 69 6e 67 20 6f 66 66 73 65 74 6f 66 28 50 61 72  ing offsetof(Par
20240 73 65 2c 73 4c 61 73 74 54 6f 6b 65 6e 29 20 73  se,sLastToken) s
20250 6f 20 74 68 65 20 73 4c 61 73 74 54 6f 6b 65 6e  o the sLastToken
20260 20 66 69 65 6c 64 20 6d 75 73 74 20 62 65 20 74   field must be t
20270 68 65 0a 20 20 2a 2a 20 66 69 72 73 74 20 66 69  he.  ** first fi
20280 65 6c 64 20 69 6e 20 74 68 65 20 72 65 63 75 72  eld in the recur
20290 73 69 76 65 20 72 65 67 69 6f 6e 2e 0a 20 20 2a  sive region..  *
202a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
202b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
202c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
202d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
202e0 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 54 6f 6b 65  *******/..  Toke
202f0 6e 20 73 4c 61 73 74 54 6f 6b 65 6e 3b 20 20 20  n sLastToken;   
20300 20 20 20 20 2f 2a 20 54 68 65 20 6c 61 73 74 20      /* The last 
20310 74 6f 6b 65 6e 20 70 61 72 73 65 64 20 2a 2f 0a  token parsed */.
20320 20 20 79 6e 56 61 72 20 6e 56 61 72 3b 20 20 20    ynVar nVar;   
20330 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
20340 75 6d 62 65 72 20 6f 66 20 27 3f 27 20 76 61 72  umber of '?' var
20350 69 61 62 6c 65 73 20 73 65 65 6e 20 69 6e 20 74  iables seen in t
20360 68 65 20 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f  he SQL so far */
20370 0a 20 20 75 38 20 69 50 6b 53 6f 72 74 4f 72 64  .  u8 iPkSortOrd
20380 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  er;          /* 
20390 41 53 43 20 6f 72 20 44 45 53 43 20 66 6f 72 20  ASC or DESC for 
203a0 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
203b0 4b 45 59 20 2a 2f 0a 20 20 75 38 20 65 78 70 6c  KEY */.  u8 expl
203c0 61 69 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  ain;            
203d0 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
203e0 65 20 45 58 50 4c 41 49 4e 20 66 6c 61 67 20 69  e EXPLAIN flag i
203f0 73 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65 20 71  s found on the q
20400 75 65 72 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20  uery */.#ifndef 
20410 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
20420 55 41 4c 54 41 42 4c 45 0a 20 20 75 38 20 64 65  UALTABLE.  u8 de
20430 63 6c 61 72 65 56 74 61 62 3b 20 20 20 20 20 20  clareVtab;      
20440 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
20450 69 6e 73 69 64 65 20 73 71 6c 69 74 65 33 5f 64  inside sqlite3_d
20460 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 2a 2f  eclare_vtab() */
20470 0a 20 20 69 6e 74 20 6e 56 74 61 62 4c 6f 63 6b  .  int nVtabLock
20480 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
20490 4e 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61  Number of virtua
204a0 6c 20 74 61 62 6c 65 73 20 74 6f 20 6c 6f 63 6b  l tables to lock
204b0 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74   */.#endif.  int
204c0 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20 20 20   nHeight;       
204d0 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73         /* Expres
204e0 73 69 6f 6e 20 74 72 65 65 20 68 65 69 67 68 74  sion tree height
204f0 20 6f 66 20 63 75 72 72 65 6e 74 20 73 75 62 2d   of current sub-
20500 73 65 6c 65 63 74 20 2a 2f 0a 23 69 66 6e 64 65  select */.#ifnde
20510 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58  f SQLITE_OMIT_EX
20520 50 4c 41 49 4e 0a 20 20 69 6e 74 20 69 53 65 6c  PLAIN.  int iSel
20530 65 63 74 49 64 3b 20 20 20 20 20 20 20 20 20 20  ectId;          
20540 20 20 2f 2a 20 49 44 20 6f 66 20 63 75 72 72 65    /* ID of curre
20550 6e 74 20 73 65 6c 65 63 74 20 66 6f 72 20 45 58  nt select for EX
20560 50 4c 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a  PLAIN output */.
20570 20 20 69 6e 74 20 69 4e 65 78 74 53 65 6c 65 63    int iNextSelec
20580 74 49 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  tId;        /* N
20590 65 78 74 20 61 76 61 69 6c 61 62 6c 65 20 73 65  ext available se
205a0 6c 65 63 74 20 49 44 20 66 6f 72 20 45 58 50 4c  lect ID for EXPL
205b0 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 23 65  AIN output */.#e
205c0 6e 64 69 66 0a 20 20 56 4c 69 73 74 20 2a 70 56  ndif.  VList *pV
205d0 4c 69 73 74 3b 20 20 20 20 20 20 20 20 20 20 20  List;           
205e0 20 2f 2a 20 4d 61 70 70 69 6e 67 20 62 65 74 77   /* Mapping betw
205f0 65 65 6e 20 76 61 72 69 61 62 6c 65 20 6e 61 6d  een variable nam
20600 65 73 20 61 6e 64 20 6e 75 6d 62 65 72 73 20 2a  es and numbers *
20610 2f 0a 20 20 56 64 62 65 20 2a 70 52 65 70 72 65  /.  Vdbe *pRepre
20620 70 61 72 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  pare;         /*
20630 20 56 4d 20 62 65 69 6e 67 20 72 65 70 72 65 70   VM being reprep
20640 61 72 65 64 20 28 73 71 6c 69 74 65 33 52 65 70  ared (sqlite3Rep
20650 72 65 70 61 72 65 28 29 29 20 2a 2f 0a 20 20 63  repare()) */.  c
20660 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 69 6c  onst char *zTail
20670 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  ;        /* All 
20680 53 51 4c 20 74 65 78 74 20 70 61 73 74 20 74 68  SQL text past th
20690 65 20 6c 61 73 74 20 73 65 6d 69 63 6f 6c 6f 6e  e last semicolon
206a0 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 54 61 62   parsed */.  Tab
206b0 6c 65 20 2a 70 4e 65 77 54 61 62 6c 65 3b 20 20  le *pNewTable;  
206c0 20 20 20 20 20 20 20 2f 2a 20 41 20 74 61 62 6c         /* A tabl
206d0 65 20 62 65 69 6e 67 20 63 6f 6e 73 74 72 75 63  e being construc
206e0 74 65 64 20 62 79 20 43 52 45 41 54 45 20 54 41  ted by CREATE TA
206f0 42 4c 45 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  BLE */.  Trigger
20700 20 2a 70 4e 65 77 54 72 69 67 67 65 72 3b 20 20   *pNewTrigger;  
20710 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20 75 6e     /* Trigger un
20720 64 65 72 20 63 6f 6e 73 74 72 75 63 74 20 62 79  der construct by
20730 20 61 20 43 52 45 41 54 45 20 54 52 49 47 47 45   a CREATE TRIGGE
20740 52 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  R */.  const cha
20750 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b  r *zAuthContext;
20760 20 2f 2a 20 54 68 65 20 36 74 68 20 70 61 72 61   /* The 6th para
20770 6d 65 74 65 72 20 74 6f 20 64 62 2d 3e 78 41 75  meter to db->xAu
20780 74 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a  th callbacks */.
20790 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
207a0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
207b0 0a 20 20 54 6f 6b 65 6e 20 73 41 72 67 3b 20 20  .  Token sArg;  
207c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
207d0 43 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 6f 66  Complete text of
207e0 20 61 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65   a module argume
207f0 6e 74 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 2a  nt */.  Table **
20800 61 70 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20  apVtabLock;     
20810 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
20820 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 6e  virtual tables n
20830 65 65 64 69 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a  eeding locking *
20840 2f 0a 23 65 6e 64 69 66 0a 20 20 54 61 62 6c 65  /.#endif.  Table
20850 20 2a 70 5a 6f 6d 62 69 65 54 61 62 3b 20 20 20   *pZombieTab;   
20860 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
20870 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 6f  Table objects to
20880 20 64 65 6c 65 74 65 20 61 66 74 65 72 20 63 6f   delete after co
20890 64 65 20 67 65 6e 20 2a 2f 0a 20 20 54 72 69 67  de gen */.  Trig
208a0 67 65 72 50 72 67 20 2a 70 54 72 69 67 67 65 72  gerPrg *pTrigger
208b0 50 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64 20  Prg;  /* Linked 
208c0 6c 69 73 74 20 6f 66 20 63 6f 64 65 64 20 74 72  list of coded tr
208d0 69 67 67 65 72 73 20 2a 2f 0a 20 20 57 69 74 68  iggers */.  With
208e0 20 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20 20   *pWith;        
208f0 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74        /* Current
20900 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72   WITH clause, or
20910 20 4e 55 4c 4c 20 2a 2f 0a 20 20 57 69 74 68 20   NULL */.  With 
20920 2a 70 57 69 74 68 54 6f 46 72 65 65 3b 20 20 20  *pWithToFree;   
20930 20 20 20 20 20 2f 2a 20 46 72 65 65 20 74 68 69       /* Free thi
20940 73 20 57 49 54 48 20 6f 62 6a 65 63 74 20 61 74  s WITH object at
20950 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
20960 70 61 72 73 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  parse */.};../*.
20970 2a 2a 20 53 69 7a 65 73 20 61 6e 64 20 70 6f 69  ** Sizes and poi
20980 6e 74 65 72 73 20 6f 66 20 76 61 72 69 6f 75 73  nters of various
20990 20 70 61 72 74 73 20 6f 66 20 74 68 65 20 50 61   parts of the Pa
209a0 72 73 65 20 6f 62 6a 65 63 74 2e 0a 2a 2f 0a 23  rse object..*/.#
209b0 64 65 66 69 6e 65 20 50 41 52 53 45 5f 48 44 52  define PARSE_HDR
209c0 5f 53 5a 20 6f 66 66 73 65 74 6f 66 28 50 61 72  _SZ offsetof(Par
209d0 73 65 2c 61 43 6f 6c 43 61 63 68 65 29 20 2f 2a  se,aColCache) /*
209e0 20 52 65 63 75 72 73 69 76 65 20 70 61 72 74 20   Recursive part 
209f0 77 2f 6f 20 61 43 6f 6c 43 61 63 68 65 2a 2f 0a  w/o aColCache*/.
20a00 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f 52 45  #define PARSE_RE
20a10 43 55 52 53 45 5f 53 5a 20 6f 66 66 73 65 74 6f  CURSE_SZ offseto
20a20 66 28 50 61 72 73 65 2c 73 4c 61 73 74 54 6f 6b  f(Parse,sLastTok
20a30 65 6e 29 20 20 20 20 2f 2a 20 52 65 63 75 72 73  en)    /* Recurs
20a40 69 76 65 20 70 61 72 74 20 2a 2f 0a 23 64 65 66  ive part */.#def
20a50 69 6e 65 20 50 41 52 53 45 5f 54 41 49 4c 5f 53  ine PARSE_TAIL_S
20a60 5a 20 28 73 69 7a 65 6f 66 28 50 61 72 73 65 29  Z (sizeof(Parse)
20a70 2d 50 41 52 53 45 5f 52 45 43 55 52 53 45 5f 53  -PARSE_RECURSE_S
20a80 5a 29 20 2f 2a 20 4e 6f 6e 2d 72 65 63 75 72 73  Z) /* Non-recurs
20a90 69 76 65 20 70 61 72 74 20 2a 2f 0a 23 64 65 66  ive part */.#def
20aa0 69 6e 65 20 50 41 52 53 45 5f 54 41 49 4c 28 58  ine PARSE_TAIL(X
20ab0 29 20 28 28 28 63 68 61 72 2a 29 28 58 29 29 2b  ) (((char*)(X))+
20ac0 50 41 52 53 45 5f 52 45 43 55 52 53 45 5f 53 5a  PARSE_RECURSE_SZ
20ad0 29 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f  )  /* Pointer to
20ae0 20 74 61 69 6c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20   tail */../*.** 
20af0 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 63  Return true if c
20b00 75 72 72 65 6e 74 6c 79 20 69 6e 73 69 64 65 20  urrently inside 
20b10 61 6e 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61  an sqlite3_decla
20b20 72 65 5f 76 74 61 62 28 29 20 63 61 6c 6c 2e 0a  re_vtab() call..
20b30 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
20b40 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
20b50 4c 45 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f  LE.  #define IN_
20b60 44 45 43 4c 41 52 45 5f 56 54 41 42 20 30 0a 23  DECLARE_VTAB 0.#
20b70 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 49  else.  #define I
20b80 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20 28  N_DECLARE_VTAB (
20b90 70 50 61 72 73 65 2d 3e 64 65 63 6c 61 72 65 56  pParse->declareV
20ba0 74 61 62 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  tab).#endif../*.
20bb0 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
20bc0 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
20bd0 73 74 72 75 63 74 75 72 65 20 63 61 6e 20 62 65  structure can be
20be0 20 64 65 63 6c 61 72 65 64 20 6f 6e 20 61 20 73   declared on a s
20bf0 74 61 63 6b 20 61 6e 64 20 75 73 65 64 0a 2a 2a  tack and used.**
20c00 20 74 6f 20 73 61 76 65 20 74 68 65 20 50 61 72   to save the Par
20c10 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20  se.zAuthContext 
20c20 76 61 6c 75 65 20 73 6f 20 74 68 61 74 20 69 74  value so that it
20c30 20 63 61 6e 20 62 65 20 72 65 73 74 6f 72 65 64   can be restored
20c40 20 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74 72 75 63   later..*/.struc
20c50 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20 7b 0a  t AuthContext {.
20c60 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41    const char *zA
20c70 75 74 68 43 6f 6e 74 65 78 74 3b 20 20 20 2f 2a  uthContext;   /*
20c80 20 50 75 74 20 73 61 76 65 64 20 50 61 72 73 65   Put saved Parse
20c90 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 68 65  .zAuthContext he
20ca0 72 65 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70  re */.  Parse *p
20cb0 50 61 72 73 65 3b 20 20 20 20 20 20 20 20 20 20  Parse;          
20cc0 20 20 20 20 2f 2a 20 54 68 65 20 50 61 72 73 65      /* The Parse
20cd0 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 7d 3b   structure */.};
20ce0 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69 65 6c 64  ../*.** Bitfield
20cf0 20 66 6c 61 67 73 20 66 6f 72 20 50 35 20 76 61   flags for P5 va
20d00 6c 75 65 20 69 6e 20 76 61 72 69 6f 75 73 20 6f  lue in various o
20d10 70 63 6f 64 65 73 2e 0a 2a 2a 0a 2a 2a 20 56 61  pcodes..**.** Va
20d20 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  lue constraints 
20d30 28 65 6e 66 6f 72 63 65 64 20 76 69 61 20 61 73  (enforced via as
20d40 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 4f  sert()):.**    O
20d50 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20  PFLAG_LENGTHARG 
20d60 20 20 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e     == SQLITE_FUN
20d70 43 5f 4c 45 4e 47 54 48 0a 2a 2a 20 20 20 20 4f  C_LENGTH.**    O
20d80 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 20  PFLAG_TYPEOFARG 
20d90 20 20 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e     == SQLITE_FUN
20da0 43 5f 54 59 50 45 4f 46 0a 2a 2a 20 20 20 20 4f  C_TYPEOF.**    O
20db0 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20 20  PFLAG_BULKCSR   
20dc0 20 20 20 3d 3d 20 42 54 52 45 45 5f 42 55 4c 4b     == BTREE_BULK
20dd0 4c 4f 41 44 0a 2a 2a 20 20 20 20 4f 50 46 4c 41  LOAD.**    OPFLA
20de0 47 5f 53 45 45 4b 45 51 20 20 20 20 20 20 20 3d  G_SEEKEQ       =
20df0 3d 20 42 54 52 45 45 5f 53 45 45 4b 5f 45 51 0a  = BTREE_SEEK_EQ.
20e00 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 46 4f 52  **    OPFLAG_FOR
20e10 44 45 4c 45 54 45 20 20 20 20 3d 3d 20 42 54 52  DELETE    == BTR
20e20 45 45 5f 46 4f 52 44 45 4c 45 54 45 0a 2a 2a 20  EE_FORDELETE.** 
20e30 20 20 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f     OPFLAG_SAVEPO
20e40 53 49 54 49 4f 4e 20 3d 3d 20 42 54 52 45 45 5f  SITION == BTREE_
20e50 53 41 56 45 50 4f 53 49 54 49 4f 4e 0a 2a 2a 20  SAVEPOSITION.** 
20e60 20 20 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c     OPFLAG_AUXDEL
20e70 45 54 45 20 20 20 20 3d 3d 20 42 54 52 45 45 5f  ETE    == BTREE_
20e80 41 55 58 44 45 4c 45 54 45 0a 2a 2f 0a 23 64 65  AUXDELETE.*/.#de
20e90 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41  fine OPFLAG_NCHA
20ea0 4e 47 45 20 20 20 20 20 20 20 30 78 30 31 20 20  NGE       0x01  
20eb0 20 20 2f 2a 20 4f 50 5f 49 6e 73 65 72 74 3a 20    /* OP_Insert: 
20ec0 53 65 74 20 74 6f 20 75 70 64 61 74 65 20 64 62  Set to update db
20ed0 2d 3e 6e 43 68 61 6e 67 65 20 2a 2f 0a 20 20 20  ->nChange */.   
20ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f00 20 20 2f 2a 20 41 6c 73 6f 20 75 73 65 64 20 69    /* Also used i
20f10 6e 20 50 32 20 28 6e 6f 74 20 50 35 29 20 6f 66  n P2 (not P5) of
20f20 20 4f 50 5f 44 65 6c 65 74 65 20 2a 2f 0a 23 64   OP_Delete */.#d
20f30 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 45 50 48  efine OPFLAG_EPH
20f40 45 4d 20 20 20 20 20 20 20 20 20 30 78 30 31 20  EM         0x01 
20f50 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 3a     /* OP_Column:
20f60 20 45 70 68 65 6d 65 72 61 6c 20 6f 75 74 70 75   Ephemeral outpu
20f70 74 20 69 73 20 6f 6b 20 2a 2f 0a 23 64 65 66 69  t is ok */.#defi
20f80 6e 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f  ne OPFLAG_LASTRO
20f90 57 49 44 20 20 20 20 20 30 78 32 30 20 20 20 20  WID     0x20    
20fa0 2f 2a 20 53 65 74 20 74 6f 20 75 70 64 61 74 65  /* Set to update
20fb0 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 2a   db->lastRowid *
20fc0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
20fd0 5f 49 53 55 50 44 41 54 45 20 20 20 20 20 20 30  _ISUPDATE      0
20fe0 78 30 34 20 20 20 20 2f 2a 20 54 68 69 73 20 4f  x04    /* This O
20ff0 50 5f 49 6e 73 65 72 74 20 69 73 20 61 6e 20 73  P_Insert is an s
21000 71 6c 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65  ql UPDATE */.#de
21010 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41 50 50 45  fine OPFLAG_APPE
21020 4e 44 20 20 20 20 20 20 20 20 30 78 30 38 20 20  ND        0x08  
21030 20 20 2f 2a 20 54 68 69 73 20 69 73 20 6c 69 6b    /* This is lik
21040 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70  ely to be an app
21050 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  end */.#define O
21060 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53  PFLAG_USESEEKRES
21070 55 4c 54 20 30 78 31 30 20 20 20 20 2f 2a 20 54  ULT 0x10    /* T
21080 72 79 20 74 6f 20 61 76 6f 69 64 20 61 20 73 65  ry to avoid a se
21090 65 6b 20 69 6e 20 42 74 72 65 65 49 6e 73 65 72  ek in BtreeInser
210a0 74 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  t() */.#define O
210b0 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 20 20 20 20  PFLAG_ISNOOP    
210c0 20 20 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4f      0x40    /* O
210d0 50 5f 44 65 6c 65 74 65 20 64 6f 65 73 20 70 72  P_Delete does pr
210e0 65 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20 6f 6e  e-update-hook on
210f0 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  ly */.#define OP
21100 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 20  FLAG_LENGTHARG  
21110 20 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50     0x40    /* OP
21120 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65  _Column only use
21130 64 20 66 6f 72 20 6c 65 6e 67 74 68 28 29 20 2a  d for length() *
21140 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
21150 5f 54 59 50 45 4f 46 41 52 47 20 20 20 20 20 30  _TYPEOFARG     0
21160 78 38 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c  x80    /* OP_Col
21170 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f  umn only used fo
21180 72 20 74 79 70 65 6f 66 28 29 20 2a 2f 0a 23 64  r typeof() */.#d
21190 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 42 55 4c  efine OPFLAG_BUL
211a0 4b 43 53 52 20 20 20 20 20 20 20 30 78 30 31 20  KCSR       0x01 
211b0 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20     /* OP_Open** 
211c0 75 73 65 64 20 74 6f 20 6f 70 65 6e 20 62 75 6c  used to open bul
211d0 6b 20 63 75 72 73 6f 72 20 2a 2f 0a 23 64 65 66  k cursor */.#def
211e0 69 6e 65 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45  ine OPFLAG_SEEKE
211f0 51 20 20 20 20 20 20 20 20 30 78 30 32 20 20 20  Q        0x02   
21200 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 63 75   /* OP_Open** cu
21210 72 73 6f 72 20 75 73 65 73 20 45 51 20 73 65 65  rsor uses EQ see
21220 6b 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e  k only */.#defin
21230 65 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45  e OPFLAG_FORDELE
21240 54 45 20 20 20 20 20 30 78 30 38 20 20 20 20 2f  TE     0x08    /
21250 2a 20 4f 50 5f 4f 70 65 6e 20 73 68 6f 75 6c 64  * OP_Open should
21260 20 75 73 65 20 42 54 52 45 45 5f 46 4f 52 44 45   use BTREE_FORDE
21270 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  LETE */.#define 
21280 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20 20  OPFLAG_P2ISREG  
21290 20 20 20 20 20 30 78 31 30 20 20 20 20 2f 2a 20       0x10    /* 
212a0 50 32 20 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20  P2 to OP_Open** 
212b0 69 73 20 61 20 72 65 67 69 73 74 65 72 20 6e 75  is a register nu
212c0 6d 62 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mber */.#define 
212d0 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 20  OPFLAG_PERMUTE  
212e0 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20       0x01    /* 
212f0 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 75 73 65 20  OP_Compare: use 
21300 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20  the permutation 
21310 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
21320 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 20  G_SAVEPOSITION  
21330 30 78 30 32 20 20 20 20 2f 2a 20 4f 50 5f 44 65  0x02    /* OP_De
21340 6c 65 74 65 2f 49 6e 73 65 72 74 3a 20 73 61 76  lete/Insert: sav
21350 65 20 63 75 72 73 6f 72 20 70 6f 73 20 2a 2f 0a  e cursor pos */.
21360 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41  #define OPFLAG_A
21370 55 58 44 45 4c 45 54 45 20 20 20 20 20 30 78 30  UXDELETE     0x0
21380 34 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74  4    /* OP_Delet
21390 65 3a 20 69 6e 64 65 78 20 69 6e 20 61 20 44 45  e: index in a DE
213a0 4c 45 54 45 20 6f 70 20 2a 2f 0a 0a 2f 2a 0a 20  LETE op */../*. 
213b0 2a 20 45 61 63 68 20 74 72 69 67 67 65 72 20 70  * Each trigger p
213c0 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61  resent in the da
213d0 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73  tabase schema is
213e0 20 73 74 6f 72 65 64 20 61 73 20 61 6e 20 69 6e   stored as an in
213f0 73 74 61 6e 63 65 20 6f 66 0a 20 2a 20 73 74 72  stance of. * str
21400 75 63 74 20 54 72 69 67 67 65 72 2e 0a 20 2a 0a  uct Trigger.. *.
21410 20 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f 20 69   * Pointers to i
21420 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75  nstances of stru
21430 63 74 20 54 72 69 67 67 65 72 20 61 72 65 20 73  ct Trigger are s
21440 74 6f 72 65 64 20 69 6e 20 74 77 6f 20 77 61 79  tored in two way
21450 73 2e 0a 20 2a 20 31 2e 20 49 6e 20 74 68 65 20  s.. * 1. In the 
21460 22 74 72 69 67 48 61 73 68 22 20 68 61 73 68 20  "trigHash" hash 
21470 74 61 62 6c 65 20 28 70 61 72 74 20 6f 66 20 74  table (part of t
21480 68 65 20 73 71 6c 69 74 65 33 2a 20 74 68 61 74  he sqlite3* that
21490 20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 0a   represents the.
214a0 20 2a 20 20 20 20 64 61 74 61 62 61 73 65 29 2e   *    database).
214b0 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 54 72 69   This allows Tri
214c0 67 67 65 72 20 73 74 72 75 63 74 75 72 65 73 20  gger structures 
214d0 74 6f 20 62 65 20 72 65 74 72 69 65 76 65 64 20  to be retrieved 
214e0 62 79 20 6e 61 6d 65 2e 0a 20 2a 20 32 2e 20 41  by name.. * 2. A
214f0 6c 6c 20 74 72 69 67 67 65 72 73 20 61 73 73 6f  ll triggers asso
21500 63 69 61 74 65 64 20 77 69 74 68 20 61 20 73 69  ciated with a si
21510 6e 67 6c 65 20 74 61 62 6c 65 20 66 6f 72 6d 20  ngle table form 
21520 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 2c 20 75  a linked list, u
21530 73 69 6e 67 20 74 68 65 0a 20 2a 20 20 20 20 70  sing the. *    p
21540 4e 65 78 74 20 6d 65 6d 62 65 72 20 6f 66 20 73  Next member of s
21550 74 72 75 63 74 20 54 72 69 67 67 65 72 2e 20 41  truct Trigger. A
21560 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
21570 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66  first element of
21580 20 74 68 65 0a 20 2a 20 20 20 20 6c 69 6e 6b 65   the. *    linke
21590 64 20 6c 69 73 74 20 69 73 20 73 74 6f 72 65 64  d list is stored
215a0 20 61 73 20 74 68 65 20 22 70 54 72 69 67 67 65   as the "pTrigge
215b0 72 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65  r" member of the
215c0 20 61 73 73 6f 63 69 61 74 65 64 0a 20 2a 20 20   associated. *  
215d0 20 20 73 74 72 75 63 74 20 54 61 62 6c 65 2e 0a    struct Table..
215e0 20 2a 0a 20 2a 20 54 68 65 20 22 73 74 65 70 5f   *. * The "step_
215f0 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 70 6f 69  list" member poi
21600 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72 73 74  nts to the first
21610 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61 20 6c 69   element of a li
21620 6e 6b 65 64 20 6c 69 73 74 0a 20 2a 20 63 6f 6e  nked list. * con
21630 74 61 69 6e 69 6e 67 20 74 68 65 20 53 51 4c 20  taining the SQL 
21640 73 74 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69  statements speci
21650 66 69 65 64 20 61 73 20 74 68 65 20 74 72 69 67  fied as the trig
21660 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f  ger program.. */
21670 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20  .struct Trigger 
21680 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
21690 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
216a0 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  he name of the t
216b0 72 69 67 67 65 72 20 20 20 20 20 20 20 20 20 20  rigger          
216c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f                */
216d0 0a 20 20 63 68 61 72 20 2a 74 61 62 6c 65 3b 20  .  char *table; 
216e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
216f0 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20  e table or view 
21700 74 6f 20 77 68 69 63 68 20 74 68 65 20 74 72 69  to which the tri
21710 67 67 65 72 20 61 70 70 6c 69 65 73 20 2a 2f 0a  gger applies */.
21720 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20    u8 op;        
21730 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
21740 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54   of TK_DELETE, T
21750 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53  K_UPDATE, TK_INS
21760 45 52 54 20 20 20 20 20 20 20 20 20 2a 2f 0a 20  ERT         */. 
21770 20 75 38 20 74 72 5f 74 6d 3b 20 20 20 20 20 20   u8 tr_tm;      
21780 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
21790 6f 66 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52  of TRIGGER_BEFOR
217a0 45 2c 20 54 52 49 47 47 45 52 5f 41 46 54 45 52  E, TRIGGER_AFTER
217b0 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65   */.  Expr *pWhe
217c0 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  n;            /*
217d0 20 54 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65   The WHEN clause
217e0 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69   of the expressi
217f0 6f 6e 20 28 6d 61 79 20 62 65 20 4e 55 4c 4c 29  on (may be NULL)
21800 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 43   */.  IdList *pC
21810 6f 6c 75 6d 6e 73 3b 20 20 20 20 20 20 20 2f 2a  olumns;       /*
21820 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 55   If this is an U
21830 50 44 41 54 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e  PDATE OF <column
21840 2d 6c 69 73 74 3e 20 74 72 69 67 67 65 72 2c 0a  -list> trigger,.
21850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21860 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
21870 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69   <column-list> i
21880 73 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f  s stored here */
21890 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
218a0 6d 61 3b 20 20 20 20 20 20 20 20 2f 2a 20 53 63  ma;        /* Sc
218b0 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20  hema containing 
218c0 74 68 65 20 74 72 69 67 67 65 72 20 2a 2f 0a 20  the trigger */. 
218d0 20 53 63 68 65 6d 61 20 2a 70 54 61 62 53 63 68   Schema *pTabSch
218e0 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65  ema;     /* Sche
218f0 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ma containing th
21900 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 72 69  e table */.  Tri
21910 67 67 65 72 53 74 65 70 20 2a 73 74 65 70 5f 6c  ggerStep *step_l
21920 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73  ist; /* Link lis
21930 74 20 6f 66 20 74 72 69 67 67 65 72 20 70 72 6f  t of trigger pro
21940 67 72 61 6d 20 73 74 65 70 73 20 20 20 20 20 20  gram steps      
21950 20 20 20 20 20 20 20 2a 2f 0a 20 20 54 72 69 67         */.  Trig
21960 67 65 72 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  ger *pNext;     
21970 20 20 20 20 2f 2a 20 4e 65 78 74 20 74 72 69 67      /* Next trig
21980 67 65 72 20 61 73 73 6f 63 69 61 74 65 64 20 77  ger associated w
21990 69 74 68 20 74 68 65 20 74 61 62 6c 65 20 2a 2f  ith the table */
219a0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69  .};../*.** A tri
219b0 67 67 65 72 20 69 73 20 65 69 74 68 65 72 20 61  gger is either a
219c0 20 42 45 46 4f 52 45 20 6f 72 20 61 6e 20 41 46   BEFORE or an AF
219d0 54 45 52 20 74 72 69 67 67 65 72 2e 20 20 54 68  TER trigger.  Th
219e0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73  e following cons
219f0 74 61 6e 74 73 0a 2a 2a 20 64 65 74 65 72 6d 69  tants.** determi
21a00 6e 65 20 77 68 69 63 68 2e 0a 2a 2a 0a 2a 2a 20  ne which..**.** 
21a10 49 66 20 74 68 65 72 65 20 61 72 65 20 6d 75 6c  If there are mul
21a20 74 69 70 6c 65 20 74 72 69 67 67 65 72 73 2c 20  tiple triggers, 
21a30 79 6f 75 20 6d 69 67 68 74 20 6f 66 20 73 6f 6d  you might of som
21a40 65 20 42 45 46 4f 52 45 20 61 6e 64 20 73 6f 6d  e BEFORE and som
21a50 65 20 41 46 54 45 52 2e 0a 2a 2a 20 49 6e 20 74  e AFTER..** In t
21a60 68 61 74 20 63 61 73 65 73 2c 20 74 68 65 20 63  hat cases, the c
21a70 6f 6e 73 74 61 6e 74 73 20 62 65 6c 6f 77 20 63  onstants below c
21a80 61 6e 20 62 65 20 4f 52 65 64 20 74 6f 67 65 74  an be ORed toget
21a90 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  her..*/.#define 
21aa0 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45 20 20  TRIGGER_BEFORE  
21ab0 31 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47 45  1.#define TRIGGE
21ac0 52 5f 41 46 54 45 52 20 20 20 32 0a 0a 2f 2a 0a  R_AFTER   2../*.
21ad0 20 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f   * An instance o
21ae0 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
21af0 53 74 65 70 20 69 73 20 75 73 65 64 20 74 6f 20  Step is used to 
21b00 73 74 6f 72 65 20 61 20 73 69 6e 67 6c 65 20 53  store a single S
21b10 51 4c 20 73 74 61 74 65 6d 65 6e 74 0a 20 2a 20  QL statement. * 
21b20 74 68 61 74 20 69 73 20 61 20 70 61 72 74 20 6f  that is a part o
21b30 66 20 61 20 74 72 69 67 67 65 72 2d 70 72 6f 67  f a trigger-prog
21b40 72 61 6d 2e 0a 20 2a 0a 20 2a 20 49 6e 73 74 61  ram.. *. * Insta
21b50 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74 20 54  nces of struct T
21b60 72 69 67 67 65 72 53 74 65 70 20 61 72 65 20 73  riggerStep are s
21b70 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c  tored in a singl
21b80 79 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 6c  y linked list (l
21b90 69 6e 6b 65 64 0a 20 2a 20 75 73 69 6e 67 20 74  inked. * using t
21ba0 68 65 20 22 70 4e 65 78 74 22 20 6d 65 6d 62 65  he "pNext" membe
21bb0 72 29 20 72 65 66 65 72 65 6e 63 65 64 20 62 79  r) referenced by
21bc0 20 74 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22   the "step_list"
21bd0 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 0a 20   member of the. 
21be0 2a 20 61 73 73 6f 63 69 61 74 65 64 20 73 74 72  * associated str
21bf0 75 63 74 20 54 72 69 67 67 65 72 20 69 6e 73 74  uct Trigger inst
21c00 61 6e 63 65 2e 20 54 68 65 20 66 69 72 73 74 20  ance. The first 
21c10 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 6c  element of the l
21c20 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 0a 20 2a  inked list is. *
21c30 20 74 68 65 20 66 69 72 73 74 20 73 74 65 70 20   the first step 
21c40 6f 66 20 74 68 65 20 74 72 69 67 67 65 72 2d 70  of the trigger-p
21c50 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a 20 54 68  rogram.. *. * Th
21c60 65 20 22 6f 70 22 20 6d 65 6d 62 65 72 20 69 6e  e "op" member in
21c70 64 69 63 61 74 65 73 20 77 68 65 74 68 65 72 20  dicates whether 
21c80 74 68 69 73 20 69 73 20 61 20 22 44 45 4c 45 54  this is a "DELET
21c90 45 22 2c 20 22 49 4e 53 45 52 54 22 2c 20 22 55  E", "INSERT", "U
21ca0 50 44 41 54 45 22 20 6f 72 0a 20 2a 20 22 53 45  PDATE" or. * "SE
21cb0 4c 45 43 54 22 20 73 74 61 74 65 6d 65 6e 74 2e  LECT" statement.
21cc0 20 54 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66   The meanings of
21cd0 20 74 68 65 20 6f 74 68 65 72 20 6d 65 6d 62 65   the other membe
21ce0 72 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  rs is determined
21cf0 20 62 79 20 74 68 65 0a 20 2a 20 76 61 6c 75 65   by the. * value
21d00 20 6f 66 20 22 6f 70 22 20 61 73 20 66 6f 6c 6c   of "op" as foll
21d10 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d  ows:. *. * (op =
21d20 3d 20 54 4b 5f 49 4e 53 45 52 54 29 0a 20 2a 20  = TK_INSERT). * 
21d30 6f 72 63 6f 6e 66 20 20 20 20 2d 3e 20 73 74 6f  orconf    -> sto
21d40 72 65 73 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c  res the ON CONFL
21d50 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 0a 20 2a  ICT algorithm. *
21d60 20 70 53 65 6c 65 63 74 20 20 20 2d 3e 20 49 66   pSelect   -> If
21d70 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45   this is an INSE
21d80 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45  RT INTO ... SELE
21d90 43 54 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74  CT ... statement
21da0 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20  , then. *       
21db0 20 20 20 20 20 20 20 74 68 69 73 20 73 74 6f 72         this stor
21dc0 65 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  es a pointer to 
21dd0 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
21de0 6d 65 6e 74 2e 20 4f 74 68 65 72 77 69 73 65 20  ment. Otherwise 
21df0 4e 55 4c 4c 2e 0a 20 2a 20 7a 54 61 72 67 65 74  NULL.. * zTarget
21e00 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e     -> Dequoted n
21e10 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
21e20 20 74 6f 20 69 6e 73 65 72 74 20 69 6e 74 6f 2e   to insert into.
21e30 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e  . * pExprList ->
21e40 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49   If this is an I
21e50 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 56  NSERT INTO ... V
21e60 41 4c 55 45 53 20 2e 2e 2e 20 73 74 61 74 65 6d  ALUES ... statem
21e70 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20  ent, then. *    
21e80 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20 73            this s
21e90 74 6f 72 65 73 20 76 61 6c 75 65 73 20 74 6f 20  tores values to 
21ea0 62 65 20 69 6e 73 65 72 74 65 64 2e 20 4f 74 68  be inserted. Oth
21eb0 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20  erwise NULL.. * 
21ec0 70 49 64 4c 69 73 74 20 20 20 2d 3e 20 49 66 20  pIdList   -> If 
21ed0 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52  this is an INSER
21ee0 54 20 49 4e 54 4f 20 2e 2e 2e 20 28 3c 63 6f 6c  T INTO ... (<col
21ef0 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20 56 41 4c 55  umn-names>) VALU
21f00 45 53 20 2e 2e 2e 0a 20 2a 20 20 20 20 20 20 20  ES .... *       
21f10 20 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74         statement
21f20 2c 20 74 68 65 6e 20 74 68 69 73 20 73 74 6f 72  , then this stor
21f30 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61  es the column-na
21f40 6d 65 73 20 74 6f 20 62 65 0a 20 2a 20 20 20 20  mes to be. *    
21f50 20 20 20 20 20 20 20 20 20 20 69 6e 73 65 72 74            insert
21f60 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28  ed into.. *. * (
21f70 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c 45 54 45 29  op == TK_DELETE)
21f80 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e  . * zTarget   ->
21f90 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f   Dequoted name o
21fa0 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 64  f the table to d
21fb0 65 6c 65 74 65 20 66 72 6f 6d 2e 0a 20 2a 20 70  elete from.. * p
21fc0 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20  Where    -> The 
21fd0 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20  WHERE clause of 
21fe0 74 68 65 20 44 45 4c 45 54 45 20 73 74 61 74 65  the DELETE state
21ff0 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73  ment if one is s
22000 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20  pecified.. *    
22010 20 20 20 20 20 20 20 20 20 20 4f 74 68 65 72 77            Otherw
22020 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 0a 20 2a 20  ise NULL.. *. * 
22030 28 6f 70 20 3d 3d 20 54 4b 5f 55 50 44 41 54 45  (op == TK_UPDATE
22040 29 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d  ). * zTarget   -
22050 3e 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20  > Dequoted name 
22060 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  of the table to 
22070 75 70 64 61 74 65 2e 0a 20 2a 20 70 57 68 65 72  update.. * pWher
22080 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52  e    -> The WHER
22090 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20  E clause of the 
220a0 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
220b0 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69   if one is speci
220c0 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20  fied.. *        
220d0 20 20 20 20 20 20 4f 74 68 65 72 77 69 73 65 20        Otherwise 
220e0 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78 70 72 4c 69  NULL.. * pExprLi
220f0 73 74 20 2d 3e 20 41 20 6c 69 73 74 20 6f 66 20  st -> A list of 
22100 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74 6f 20 75  the columns to u
22110 70 64 61 74 65 20 61 6e 64 20 74 68 65 20 65 78  pdate and the ex
22120 70 72 65 73 73 69 6f 6e 73 20 74 6f 20 75 70 64  pressions to upd
22130 61 74 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20  ate. *          
22140 20 20 20 20 74 68 65 6d 20 74 6f 2e 20 53 65 65      them to. See
22150 20 73 71 6c 69 74 65 33 55 70 64 61 74 65 28 29   sqlite3Update()
22160 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f   documentation o
22170 66 20 22 70 43 68 61 6e 67 65 73 22 0a 20 2a 20  f "pChanges". * 
22180 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67               arg
22190 75 6d 65 6e 74 2e 0a 20 2a 0a 20 2a 2f 0a 73 74  ument.. *. */.st
221a0 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70  ruct TriggerStep
221b0 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20   {.  u8 op;     
221c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
221d0 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54   of TK_DELETE, T
221e0 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53  K_UPDATE, TK_INS
221f0 45 52 54 2c 20 54 4b 5f 53 45 4c 45 43 54 20 2a  ERT, TK_SELECT *
22200 2f 0a 20 20 75 38 20 6f 72 63 6f 6e 66 3b 20 20  /.  u8 orconf;  
22210 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 52           /* OE_R
22220 6f 6c 6c 62 61 63 6b 20 65 74 63 2e 20 2a 2f 0a  ollback etc. */.
22230 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67    Trigger *pTrig
22240 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74 72  ;      /* The tr
22250 69 67 67 65 72 20 74 68 61 74 20 74 68 69 73 20  igger that this 
22260 73 74 65 70 20 69 73 20 61 20 70 61 72 74 20 6f  step is a part o
22270 66 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  f */.  Select *p
22280 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 53  Select;     /* S
22290 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
222a0 6f 72 20 52 48 53 20 6f 66 20 49 4e 53 45 52 54  or RHS of INSERT
222b0 20 49 4e 54 4f 20 53 45 4c 45 43 54 20 2e 2e 2e   INTO SELECT ...
222c0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 61 72   */.  char *zTar
222d0 67 65 74 3b 20 20 20 20 20 20 20 2f 2a 20 54 61  get;       /* Ta
222e0 72 67 65 74 20 74 61 62 6c 65 20 66 6f 72 20 44  rget table for D
222f0 45 4c 45 54 45 2c 20 55 50 44 41 54 45 2c 20 49  ELETE, UPDATE, I
22300 4e 53 45 52 54 20 2a 2f 0a 20 20 45 78 70 72 20  NSERT */.  Expr 
22310 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20 20 20  *pWhere;        
22320 2f 2a 20 54 68 65 20 57 48 45 52 45 20 63 6c 61  /* The WHERE cla
22330 75 73 65 20 66 6f 72 20 44 45 4c 45 54 45 20 6f  use for DELETE o
22340 72 20 55 50 44 41 54 45 20 73 74 65 70 73 20 2a  r UPDATE steps *
22350 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45  /.  ExprList *pE
22360 78 70 72 4c 69 73 74 3b 20 2f 2a 20 53 45 54 20  xprList; /* SET 
22370 63 6c 61 75 73 65 20 66 6f 72 20 55 50 44 41 54  clause for UPDAT
22380 45 2e 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a  E. */.  IdList *
22390 70 49 64 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20  pIdList;     /* 
223a0 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 66 6f 72  Column names for
223b0 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 54 72 69   INSERT */.  Tri
223c0 67 67 65 72 53 74 65 70 20 2a 70 4e 65 78 74 3b  ggerStep *pNext;
223d0 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 74 68 65    /* Next in the
223e0 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20   link-list */.  
223f0 54 72 69 67 67 65 72 53 74 65 70 20 2a 70 4c 61  TriggerStep *pLa
22400 73 74 3b 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65  st;  /* Last ele
22410 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73  ment in link-lis
22420 74 2e 20 56 61 6c 69 64 20 66 6f 72 20 31 73 74  t. Valid for 1st
22430 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b   elem only */.};
22440 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
22450 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
22460 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61  contains informa
22470 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65  tion used by the
22480 20 73 71 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a   sqliteFix....**
22490 20 72 6f 75 74 69 6e 65 73 20 61 73 20 74 68 65   routines as the
224a0 79 20 77 61 6c 6b 20 74 68 65 20 70 61 72 73 65  y walk the parse
224b0 20 74 72 65 65 20 74 6f 20 6d 61 6b 65 20 64 61   tree to make da
224c0 74 61 62 61 73 65 20 72 65 66 65 72 65 6e 63 65  tabase reference
224d0 73 0a 2a 2a 20 65 78 70 6c 69 63 69 74 2e 0a 2a  s.** explicit..*
224e0 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
224f0 20 44 62 46 69 78 65 72 20 44 62 46 69 78 65 72   DbFixer DbFixer
22500 3b 0a 73 74 72 75 63 74 20 44 62 46 69 78 65 72  ;.struct DbFixer
22510 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72   {.  Parse *pPar
22520 73 65 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  se;      /* The 
22530 70 61 72 73 69 6e 67 20 63 6f 6e 74 65 78 74 2e  parsing context.
22540 20 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 73    Error messages
22550 20 77 72 69 74 74 65 6e 20 68 65 72 65 20 2a 2f   written here */
22560 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
22570 6d 61 3b 20 20 20 20 2f 2a 20 46 69 78 20 69 74  ma;    /* Fix it
22580 65 6d 73 20 74 6f 20 74 68 69 73 20 73 63 68 65  ems to this sche
22590 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 62 56 61 72  ma */.  int bVar
225a0 4f 6e 6c 79 3b 20 20 20 20 20 20 20 2f 2a 20 43  Only;       /* C
225b0 68 65 63 6b 20 66 6f 72 20 76 61 72 69 61 62 6c  heck for variabl
225c0 65 20 72 65 66 65 72 65 6e 63 65 73 20 6f 6e 6c  e references onl
225d0 79 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  y */.  const cha
225e0 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a 20 4d 61  r *zDb;    /* Ma
225f0 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f 62 6a 65  ke sure all obje
22600 63 74 73 20 61 72 65 20 63 6f 6e 74 61 69 6e 65  cts are containe
22610 64 20 69 6e 20 74 68 69 73 20 64 61 74 61 62 61  d in this databa
22620 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  se */.  const ch
22630 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f 2a 20 54  ar *zType;  /* T
22640 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61  ype of the conta
22650 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20  iner - used for 
22660 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a  error messages *
22670 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20  /.  const Token 
22680 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20  *pName; /* Name 
22690 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72  of the container
226a0 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f   - used for erro
226b0 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 7d 3b  r messages */.};
226c0 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63  ../*.** An objec
226d0 74 65 64 20 75 73 65 64 20 74 6f 20 61 63 63 75  ted used to accu
226e0 6d 75 6c 61 74 65 20 74 68 65 20 74 65 78 74 20  mulate the text 
226f0 6f 66 20 61 20 73 74 72 69 6e 67 20 77 68 65 72  of a string wher
22700 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e  e we.** do not n
22710 65 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20  ecessarily know 
22720 68 6f 77 20 62 69 67 20 74 68 65 20 73 74 72 69  how big the stri
22730 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e 20 74 68  ng will be in th
22740 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  e end..*/.struct
22750 20 53 74 72 41 63 63 75 6d 20 7b 0a 20 20 73 71   StrAccum {.  sq
22760 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20  lite3 *db;      
22770 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64     /* Optional d
22780 61 74 61 62 61 73 65 20 66 6f 72 20 6c 6f 6f 6b  atabase for look
22790 61 73 69 64 65 2e 20 20 43 61 6e 20 62 65 20 4e  aside.  Can be N
227a0 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ULL */.  char *z
227b0 54 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  Text;         /*
227c0 20 54 68 65 20 73 74 72 69 6e 67 20 63 6f 6c 6c   The string coll
227d0 65 63 74 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a  ected so far */.
227e0 20 20 75 33 32 20 20 6e 41 6c 6c 6f 63 3b 20 20    u32  nAlloc;  
227f0 20 20 20 20 20 20 20 2f 2a 20 41 6d 6f 75 6e 74         /* Amount
22800 20 6f 66 20 73 70 61 63 65 20 61 6c 6c 6f 63 61   of space alloca
22810 74 65 64 20 69 6e 20 7a 54 65 78 74 20 2a 2f 0a  ted in zText */.
22820 20 20 75 33 32 20 20 6d 78 41 6c 6c 6f 63 3b 20    u32  mxAlloc; 
22830 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75         /* Maximu
22840 6d 20 61 6c 6c 6f 77 65 64 20 61 6c 6c 6f 63 61  m allowed alloca
22850 74 69 6f 6e 2e 20 20 30 20 66 6f 72 20 6e 6f 20  tion.  0 for no 
22860 6d 61 6c 6c 6f 63 20 75 73 61 67 65 20 2a 2f 0a  malloc usage */.
22870 20 20 75 33 32 20 20 6e 43 68 61 72 3b 20 20 20    u32  nChar;   
22880 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68         /* Length
22890 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20 73   of the string s
228a0 6f 20 66 61 72 20 2a 2f 0a 20 20 75 38 20 20 20  o far */.  u8   
228b0 61 63 63 45 72 72 6f 72 3b 20 20 20 20 20 20 20  accError;       
228c0 2f 2a 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45  /* STRACCUM_NOME
228d0 4d 20 6f 72 20 53 54 52 41 43 43 55 4d 5f 54 4f  M or STRACCUM_TO
228e0 4f 42 49 47 20 2a 2f 0a 20 20 75 38 20 20 20 70  OBIG */.  u8   p
228f0 72 69 6e 74 66 46 6c 61 67 73 3b 20 20 20 20 2f  rintfFlags;    /
22900 2a 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 20  * SQLITE_PRINTF 
22910 66 6c 61 67 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d  flags below */.}
22920 3b 0a 23 64 65 66 69 6e 65 20 53 54 52 41 43 43  ;.#define STRACC
22930 55 4d 5f 4e 4f 4d 45 4d 20 20 20 31 0a 23 64 65  UM_NOMEM   1.#de
22940 66 69 6e 65 20 53 54 52 41 43 43 55 4d 5f 54 4f  fine STRACCUM_TO
22950 4f 42 49 47 20 20 32 0a 23 64 65 66 69 6e 65 20  OBIG  2.#define 
22960 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 49 4e  SQLITE_PRINTF_IN
22970 54 45 52 4e 41 4c 20 30 78 30 31 20 20 2f 2a 20  TERNAL 0x01  /* 
22980 49 6e 74 65 72 6e 61 6c 2d 75 73 65 2d 6f 6e 6c  Internal-use-onl
22990 79 20 63 6f 6e 76 65 72 74 65 72 73 20 61 6c 6c  y converters all
229a0 6f 77 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owed */.#define 
229b0 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 53 51  SQLITE_PRINTF_SQ
229c0 4c 46 55 4e 43 20 20 30 78 30 32 20 20 2f 2a 20  LFUNC  0x02  /* 
229d0 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 61 72 67  SQL function arg
229e0 75 6d 65 6e 74 73 20 74 6f 20 56 58 50 72 69 6e  uments to VXPrin
229f0 74 66 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  tf */.#define SQ
22a00 4c 49 54 45 5f 50 52 49 4e 54 46 5f 4d 41 4c 4c  LITE_PRINTF_MALL
22a10 4f 43 45 44 20 30 78 30 34 20 20 2f 2a 20 54 72  OCED 0x04  /* Tr
22a20 75 65 20 69 66 20 78 54 65 78 74 20 69 73 20 61  ue if xText is a
22a30 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20 2a  llocated space *
22a40 2f 0a 0a 23 64 65 66 69 6e 65 20 69 73 4d 61 6c  /..#define isMal
22a50 6c 6f 63 65 64 28 58 29 20 20 28 28 28 58 29 2d  loced(X)  (((X)-
22a60 3e 70 72 69 6e 74 66 46 6c 61 67 73 20 26 20 53  >printfFlags & S
22a70 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 4d 41 4c  QLITE_PRINTF_MAL
22a80 4c 4f 43 45 44 29 21 3d 30 29 0a 0a 0a 2f 2a 0a  LOCED)!=0).../*.
22a90 2a 2a 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20  ** A pointer to 
22aa0 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69  this structure i
22ab0 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 6d 75 6e  s used to commun
22ac0 69 63 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f  icate informatio
22ad0 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65  n.** from sqlite
22ae0 33 49 6e 69 74 20 61 6e 64 20 4f 50 5f 50 61 72  3Init and OP_Par
22af0 73 65 53 63 68 65 6d 61 20 69 6e 74 6f 20 74 68  seSchema into th
22b00 65 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c  e sqlite3InitCal
22b10 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65  lback..*/.typede
22b20 66 20 73 74 72 75 63 74 20 7b 0a 20 20 73 71 6c  f struct {.  sql
22b30 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
22b40 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65   /* The database
22b50 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a   being initializ
22b60 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70  ed */.  char **p
22b70 7a 45 72 72 4d 73 67 3b 20 20 20 20 2f 2a 20 45  zErrMsg;    /* E
22b80 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74 6f  rror message sto
22b90 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e  red here */.  in
22ba0 74 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20  t iDb;          
22bb0 20 20 2f 2a 20 30 20 66 6f 72 20 6d 61 69 6e 20    /* 0 for main 
22bc0 64 61 74 61 62 61 73 65 2e 20 20 31 20 66 6f 72  database.  1 for
22bd0 20 54 45 4d 50 2c 20 32 2e 2e 20 66 6f 72 20 41   TEMP, 2.. for A
22be0 54 54 41 43 48 65 64 20 2a 2f 0a 20 20 69 6e 74  TTACHed */.  int
22bf0 20 72 63 3b 20 20 20 20 20 20 20 20 20 20 20 20   rc;            
22c00 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f 64 65 20   /* Result code 
22c10 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 7d  stored here */.}
22c20 20 49 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a   InitData;../*.*
22c30 2a 20 53 74 72 75 63 74 75 72 65 20 63 6f 6e 74  * Structure cont
22c40 61 69 6e 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f  aining global co
22c50 6e 66 69 67 75 72 61 74 69 6f 6e 20 64 61 74 61  nfiguration data
22c60 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20   for the SQLite 
22c70 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54  library..**.** T
22c80 68 69 73 20 73 74 72 75 63 74 75 72 65 20 61 6c  his structure al
22c90 73 6f 20 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65  so contains some
22ca0 20 73 74 61 74 65 20 69 6e 66 6f 72 6d 61 74 69   state informati
22cb0 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 71  on..*/.struct Sq
22cc0 6c 69 74 65 33 43 6f 6e 66 69 67 20 7b 0a 20 20  lite3Config {.  
22cd0 69 6e 74 20 62 4d 65 6d 73 74 61 74 3b 20 20 20  int bMemstat;   
22ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22cf0 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61    /* True to ena
22d00 62 6c 65 20 6d 65 6d 6f 72 79 20 73 74 61 74 75  ble memory statu
22d10 73 20 2a 2f 0a 20 20 69 6e 74 20 62 43 6f 72 65  s */.  int bCore
22d20 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20  Mutex;          
22d30 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
22d40 20 74 6f 20 65 6e 61 62 6c 65 20 63 6f 72 65 20   to enable core 
22d50 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e  mutexing */.  in
22d60 74 20 62 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20  t bFullMutex;   
22d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d80 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c  /* True to enabl
22d90 65 20 66 75 6c 6c 20 6d 75 74 65 78 69 6e 67 20  e full mutexing 
22da0 2a 2f 0a 20 20 69 6e 74 20 62 4f 70 65 6e 55 72  */.  int bOpenUr
22db0 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  i;              
22dc0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
22dd0 6f 20 69 6e 74 65 72 70 72 65 74 20 66 69 6c 65  o interpret file
22de0 6e 61 6d 65 73 20 61 73 20 55 52 49 73 20 2a 2f  names as URIs */
22df0 0a 20 20 69 6e 74 20 62 55 73 65 43 69 73 3b 20  .  int bUseCis; 
22e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e10 20 20 20 20 20 2f 2a 20 55 73 65 20 63 6f 76 65       /* Use cove
22e20 72 69 6e 67 20 69 6e 64 69 63 65 73 20 66 6f 72  ring indices for
22e30 20 66 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20   full-scans */. 
22e40 20 69 6e 74 20 62 53 6d 61 6c 6c 4d 61 6c 6c 6f   int bSmallMallo
22e50 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
22e60 20 20 20 2f 2a 20 41 76 6f 69 64 20 6c 61 72 67     /* Avoid larg
22e70 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
22e80 69 6f 6e 73 20 69 66 20 74 72 75 65 20 2a 2f 0a  ions if true */.
22e90 20 20 69 6e 74 20 6d 78 53 74 72 6c 65 6e 3b 20    int mxStrlen; 
22ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22eb0 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73      /* Maximum s
22ec0 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a  tring length */.
22ed0 20 20 69 6e 74 20 6e 65 76 65 72 43 6f 72 72 75    int neverCorru
22ee0 70 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pt;             
22ef0 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20      /* Database 
22f00 69 73 20 61 6c 77 61 79 73 20 77 65 6c 6c 2d 66  is always well-f
22f10 6f 72 6d 65 64 20 2a 2f 0a 20 20 69 6e 74 20 73  ormed */.  int s
22f20 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20  zLookaside;     
22f30 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
22f40 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64  Default lookasid
22f50 65 20 62 75 66 66 65 72 20 73 69 7a 65 20 2a 2f  e buffer size */
22f60 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64  .  int nLookasid
22f70 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
22f80 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
22f90 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72  lookaside buffer
22fa0 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 69 6e 74 20   count */.  int 
22fb0 6e 53 74 6d 74 53 70 69 6c 6c 3b 20 20 20 20 20  nStmtSpill;     
22fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
22fd0 20 53 74 6d 74 2d 6a 6f 75 72 6e 61 6c 20 73 70   Stmt-journal sp
22fe0 69 6c 6c 2d 74 6f 2d 64 69 73 6b 20 74 68 72 65  ill-to-disk thre
22ff0 73 68 6f 6c 64 20 2a 2f 0a 20 20 73 71 6c 69 74  shold */.  sqlit
23000 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 6d  e3_mem_methods m
23010 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
23020 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72 79  Low-level memory
23030 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 74 65   allocation inte
23040 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74  rface */.  sqlit
23050 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73  e3_mutex_methods
23060 20 6d 75 74 65 78 3b 20 20 20 20 20 20 2f 2a 20   mutex;      /* 
23070 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75 74 65 78 20  Low-level mutex 
23080 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73  interface */.  s
23090 71 6c 69 74 65 33 5f 70 63 61 63 68 65 5f 6d 65  qlite3_pcache_me
230a0 74 68 6f 64 73 32 20 70 63 61 63 68 65 32 3b 20  thods2 pcache2; 
230b0 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 70 61   /* Low-level pa
230c0 67 65 2d 63 61 63 68 65 20 69 6e 74 65 72 66 61  ge-cache interfa
230d0 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 48  ce */.  void *pH
230e0 65 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  eap;            
230f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65 61            /* Hea
23100 70 20 73 74 6f 72 61 67 65 20 73 70 61 63 65 20  p storage space 
23110 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 61 70 3b 20  */.  int nHeap; 
23120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23130 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
23140 66 20 70 48 65 61 70 5b 5d 20 2a 2f 0a 20 20 69  f pHeap[] */.  i
23150 6e 74 20 6d 6e 52 65 71 2c 20 6d 78 52 65 71 3b  nt mnReq, mxReq;
23160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23170 20 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d 61 78 20   /* Min and max 
23180 68 65 61 70 20 72 65 71 75 65 73 74 73 20 73 69  heap requests si
23190 7a 65 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  zes */.  sqlite3
231a0 5f 69 6e 74 36 34 20 73 7a 4d 6d 61 70 3b 20 20  _int64 szMmap;  
231b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 6d             /* mm
231c0 61 70 28 29 20 73 70 61 63 65 20 70 65 72 20 6f  ap() space per o
231d0 70 65 6e 20 66 69 6c 65 20 2a 2f 0a 20 20 73 71  pen file */.  sq
231e0 6c 69 74 65 33 5f 69 6e 74 36 34 20 6d 78 4d 6d  lite3_int64 mxMm
231f0 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ap;             
23200 2f 2a 20 4d 61 78 69 6d 75 6d 20 76 61 6c 75 65  /* Maximum value
23210 20 66 6f 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a 20   for szMmap */. 
23220 20 76 6f 69 64 20 2a 70 50 61 67 65 3b 20 20 20   void *pPage;   
23230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23240 20 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65     /* Page cache
23250 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74   memory */.  int
23260 20 73 7a 50 61 67 65 3b 20 20 20 20 20 20 20 20   szPage;        
23270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
23280 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 70  * Size of each p
23290 61 67 65 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a  age in pPage[] *
232a0 2f 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b 20 20  /.  int nPage;  
232b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
232c0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
232d0 6f 66 20 70 61 67 65 73 20 69 6e 20 70 50 61 67  of pages in pPag
232e0 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 50  e[] */.  int mxP
232f0 61 72 73 65 72 53 74 61 63 6b 3b 20 20 20 20 20  arserStack;     
23300 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 61             /* ma
23310 78 69 6d 75 6d 20 64 65 70 74 68 20 6f 66 20 74  ximum depth of t
23320 68 65 20 70 61 72 73 65 72 20 73 74 61 63 6b 20  he parser stack 
23330 2a 2f 0a 20 20 69 6e 74 20 73 68 61 72 65 64 43  */.  int sharedC
23340 61 63 68 65 45 6e 61 62 6c 65 64 3b 20 20 20 20  acheEnabled;    
23350 20 20 20 20 20 20 20 2f 2a 20 74 72 75 65 20 69         /* true i
23360 66 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d  f shared-cache m
23370 6f 64 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20  ode enabled */. 
23380 20 75 33 32 20 73 7a 50 6d 61 3b 20 20 20 20 20   u32 szPma;     
23390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
233a0 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 53 6f     /* Maximum So
233b0 72 74 65 72 20 50 4d 41 20 73 69 7a 65 20 2a 2f  rter PMA size */
233c0 0a 20 20 2f 2a 20 54 68 65 20 61 62 6f 76 65 20  .  /* The above 
233d0 6d 69 67 68 74 20 62 65 20 69 6e 69 74 69 61 6c  might be initial
233e0 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f  ized to non-zero
233f0 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
23400 20 6e 65 65 64 20 74 6f 20 61 6c 77 61 79 73 0a   need to always.
23410 20 20 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 62    ** initially b
23420 65 20 7a 65 72 6f 2c 20 68 6f 77 65 76 65 72 2e  e zero, however.
23430 20 2a 2f 0a 20 20 69 6e 74 20 69 73 49 6e 69 74   */.  int isInit
23440 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
23450 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
23460 61 66 74 65 72 20 69 6e 69 74 69 61 6c 69 7a 61  after initializa
23470 74 69 6f 6e 20 68 61 73 20 66 69 6e 69 73 68 65  tion has finishe
23480 64 20 2a 2f 0a 20 20 69 6e 74 20 69 6e 50 72 6f  d */.  int inPro
23490 67 72 65 73 73 3b 20 20 20 20 20 20 20 20 20 20  gress;          
234a0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
234b0 20 77 68 69 6c 65 20 69 6e 69 74 69 61 6c 69 7a   while initializ
234c0 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73  ation in progres
234d0 73 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 75 74  s */.  int isMut
234e0 65 78 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20  exInit;         
234f0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
23500 20 61 66 74 65 72 20 6d 75 74 65 78 65 73 20 61   after mutexes a
23510 72 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  re initialized *
23520 2f 0a 20 20 69 6e 74 20 69 73 4d 61 6c 6c 6f 63  /.  int isMalloc
23530 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  Init;           
23540 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66        /* True af
23550 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e  ter malloc is in
23560 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69  itialized */.  i
23570 6e 74 20 69 73 50 43 61 63 68 65 49 6e 69 74 3b  nt isPCacheInit;
23580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23590 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d   /* True after m
235a0 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c  alloc is initial
235b0 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 52  ized */.  int nR
235c0 65 66 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20  efInitMutex;    
235d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
235e0 75 6d 62 65 72 20 6f 66 20 75 73 65 72 73 20 6f  umber of users o
235f0 66 20 70 49 6e 69 74 4d 75 74 65 78 20 2a 2f 0a  f pInitMutex */.
23600 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20    sqlite3_mutex 
23610 2a 70 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20  *pInitMutex;    
23620 20 20 20 20 2f 2a 20 4d 75 74 65 78 20 75 73 65      /* Mutex use
23630 64 20 62 79 20 73 71 6c 69 74 65 33 5f 69 6e 69  d by sqlite3_ini
23640 74 69 61 6c 69 7a 65 28 29 20 2a 2f 0a 20 20 76  tialize() */.  v
23650 6f 69 64 20 28 2a 78 4c 6f 67 29 28 76 6f 69 64  oid (*xLog)(void
23660 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
23670 2a 29 3b 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20  *); /* Function 
23680 66 6f 72 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20  for logging */. 
23690 20 76 6f 69 64 20 2a 70 4c 6f 67 41 72 67 3b 20   void *pLogArg; 
236a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
236b0 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61        /* First a
236c0 72 67 75 6d 65 6e 74 20 74 6f 20 78 4c 6f 67 28  rgument to xLog(
236d0 29 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ) */.#ifdef SQLI
236e0 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47  TE_ENABLE_SQLLOG
236f0 0a 20 20 76 6f 69 64 28 2a 78 53 71 6c 6c 6f 67  .  void(*xSqllog
23700 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a  )(void*,sqlite3*
23710 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e  ,const char*, in
23720 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 53 71 6c  t);.  void *pSql
23730 6c 6f 67 41 72 67 3b 0a 23 65 6e 64 69 66 0a 23  logArg;.#endif.#
23740 69 66 64 65 66 20 53 51 4c 49 54 45 5f 56 44 42  ifdef SQLITE_VDB
23750 45 5f 43 4f 56 45 52 41 47 45 0a 20 20 2f 2a 20  E_COVERAGE.  /* 
23760 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61  The following ca
23770 6c 6c 62 61 63 6b 20 28 69 66 20 6e 6f 74 20 4e  llback (if not N
23780 55 4c 4c 29 20 69 73 20 69 6e 76 6f 6b 65 64 20  ULL) is invoked 
23790 6f 6e 20 65 76 65 72 79 20 56 44 42 45 20 62 72  on every VDBE br
237a0 61 6e 63 68 0a 20 20 2a 2a 20 6f 70 65 72 61 74  anch.  ** operat
237b0 69 6f 6e 2e 20 20 53 65 74 20 74 68 65 20 63 61  ion.  Set the ca
237c0 6c 6c 62 61 63 6b 20 75 73 69 6e 67 20 53 51 4c  llback using SQL
237d0 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 56 44 42  ITE_TESTCTRL_VDB
237e0 45 5f 43 4f 56 45 52 41 47 45 2e 0a 20 20 2a 2f  E_COVERAGE..  */
237f0 0a 20 20 76 6f 69 64 20 28 2a 78 56 64 62 65 42  .  void (*xVdbeB
23800 72 61 6e 63 68 29 28 76 6f 69 64 2a 2c 69 6e 74  ranch)(void*,int
23810 20 69 53 72 63 4c 69 6e 65 2c 75 38 20 65 54 68   iSrcLine,u8 eTh
23820 69 73 2c 75 38 20 65 4d 78 29 3b 20 20 2f 2a 20  is,u8 eMx);  /* 
23830 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f  Callback */.  vo
23840 69 64 20 2a 70 56 64 62 65 42 72 61 6e 63 68 41  id *pVdbeBranchA
23850 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
23860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23870 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20 61          /* 1st a
23880 72 67 75 6d 65 6e 74 20 2a 2f 0a 23 65 6e 64 69  rgument */.#endi
23890 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
238a0 5f 55 4e 54 45 53 54 41 42 4c 45 0a 20 20 69 6e  _UNTESTABLE.  in
238b0 74 20 28 2a 78 54 65 73 74 43 61 6c 6c 62 61 63  t (*xTestCallbac
238c0 6b 29 28 69 6e 74 29 3b 20 20 20 20 20 20 20 20  k)(int);        
238d0 2f 2a 20 49 6e 76 6f 6b 65 64 20 62 79 20 73 71  /* Invoked by sq
238e0 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28 29 20  lite3FaultSim() 
238f0 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20  */.#endif.  int 
23900 62 4c 6f 63 61 6c 74 69 6d 65 46 61 75 6c 74 3b  bLocaltimeFault;
23910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
23920 20 54 72 75 65 20 74 6f 20 66 61 69 6c 20 6c 6f   True to fail lo
23930 63 61 6c 74 69 6d 65 28 29 20 63 61 6c 6c 73 20  caltime() calls 
23940 2a 2f 0a 20 20 69 6e 74 20 69 4f 6e 63 65 52 65  */.  int iOnceRe
23950 73 65 74 54 68 72 65 73 68 6f 6c 64 3b 20 20 20  setThreshold;   
23960 20 20 20 20 20 20 20 2f 2a 20 57 68 65 6e 20 74         /* When t
23970 6f 20 72 65 73 65 74 20 4f 50 5f 4f 6e 63 65 20  o reset OP_Once 
23980 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 7d 3b 0a 0a  counters */.};..
23990 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d 61 63 72 6f  /*.** This macro
239a0 20 69 73 20 75 73 65 64 20 69 6e 73 69 64 65 20   is used inside 
239b0 6f 66 20 61 73 73 65 72 74 28 29 20 73 74 61 74  of assert() stat
239c0 65 6d 65 6e 74 73 20 74 6f 20 69 6e 64 69 63 61  ements to indica
239d0 74 65 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 61  te that.** the a
239e0 73 73 65 72 74 20 69 73 20 6f 6e 6c 79 20 76 61  ssert is only va
239f0 6c 69 64 20 6f 6e 20 61 20 77 65 6c 6c 2d 66 6f  lid on a well-fo
23a00 72 6d 65 64 20 64 61 74 61 62 61 73 65 2e 20 20  rmed database.  
23a10 49 6e 73 74 65 61 64 20 6f 66 3a 0a 2a 2a 0a 2a  Instead of:.**.*
23a20 2a 20 20 20 20 20 61 73 73 65 72 74 28 20 58 20  *     assert( X 
23a30 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20 77 72 69  );.**.** One wri
23a40 74 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61  tes:.**.**     a
23a50 73 73 65 72 74 28 20 58 20 7c 7c 20 43 4f 52 52  ssert( X || CORR
23a60 55 50 54 5f 44 42 20 29 3b 0a 2a 2a 0a 2a 2a 20  UPT_DB );.**.** 
23a70 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20 74 72  CORRUPT_DB is tr
23a80 75 65 20 64 75 72 69 6e 67 20 6e 6f 72 6d 61 6c  ue during normal
23a90 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 43 4f 52   operation.  COR
23aa0 52 55 50 54 5f 44 42 20 64 6f 65 73 20 6e 6f 74  RUPT_DB does not
23ab0 20 69 6e 64 69 63 61 74 65 0a 2a 2a 20 74 68 61   indicate.** tha
23ac0 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  t the database i
23ad0 73 20 64 65 66 69 6e 69 74 65 6c 79 20 63 6f 72  s definitely cor
23ae0 72 75 70 74 2c 20 6f 6e 6c 79 20 74 68 61 74 20  rupt, only that 
23af0 69 74 20 6d 69 67 68 74 20 62 65 20 63 6f 72 72  it might be corr
23b00 75 70 74 2e 0a 2a 2a 20 46 6f 72 20 6d 6f 73 74  upt..** For most
23b10 20 74 65 73 74 20 63 61 73 65 73 2c 20 43 4f 52   test cases, COR
23b20 52 55 50 54 5f 44 42 20 69 73 20 73 65 74 20 74  RUPT_DB is set t
23b30 6f 20 66 61 6c 73 65 20 75 73 69 6e 67 20 61 20  o false using a 
23b40 73 70 65 63 69 61 6c 0a 2a 2a 20 73 71 6c 69 74  special.** sqlit
23b50 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28  e3_test_control(
23b60 29 2e 20 20 54 68 69 73 20 65 6e 61 62 6c 65 73  ).  This enables
23b70 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
23b80 65 6e 74 73 20 74 6f 20 70 72 6f 76 65 0a 2a 2a  ents to prove.**
23b90 20 74 68 69 6e 67 73 20 74 68 61 74 20 61 72 65   things that are
23ba0 20 61 6c 77 61 79 73 20 74 72 75 65 20 66 6f 72   always true for
23bb0 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74   well-formed dat
23bc0 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 64 65 66 69  abases..*/.#defi
23bd0 6e 65 20 43 4f 52 52 55 50 54 5f 44 42 20 20 28  ne CORRUPT_DB  (
23be0 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 2e 6e 65  sqlite3Config.ne
23bf0 76 65 72 43 6f 72 72 75 70 74 3d 3d 30 29 0a 0a  verCorrupt==0)..
23c00 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74 20 70 6f  /*.** Context po
23c10 69 6e 74 65 72 20 70 61 73 73 65 64 20 64 6f 77  inter passed dow
23c20 6e 20 74 68 72 6f 75 67 68 20 74 68 65 20 74 72  n through the tr
23c30 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73 74 72 75  ee-walk..*/.stru
23c40 63 74 20 57 61 6c 6b 65 72 20 7b 0a 20 20 50 61  ct Walker {.  Pa
23c50 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20  rse *pParse;    
23c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23c70 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 73 65          /* Parse
23c80 72 20 63 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a 20  r context.  */. 
23c90 20 69 6e 74 20 28 2a 78 45 78 70 72 43 61 6c 6c   int (*xExprCall
23ca0 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 20 45  back)(Walker*, E
23cb0 78 70 72 2a 29 3b 20 20 20 20 20 2f 2a 20 43 61  xpr*);     /* Ca
23cc0 6c 6c 62 61 63 6b 20 66 6f 72 20 65 78 70 72 65  llback for expre
23cd0 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20  ssions */.  int 
23ce0 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63  (*xSelectCallbac
23cf0 6b 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63  k)(Walker*,Selec
23d00 74 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63  t*);  /* Callbac
23d10 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f  k for SELECTs */
23d20 0a 20 20 76 6f 69 64 20 28 2a 78 53 65 6c 65 63  .  void (*xSelec
23d30 74 43 61 6c 6c 62 61 63 6b 32 29 28 57 61 6c 6b  tCallback2)(Walk
23d40 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 2f 2a 20  er*,Select*);/* 
23d50 53 65 63 6f 6e 64 20 63 61 6c 6c 62 61 63 6b 20  Second callback 
23d60 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20  for SELECTs */. 
23d70 20 69 6e 74 20 77 61 6c 6b 65 72 44 65 70 74 68   int walkerDepth
23d80 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
23d90 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
23da0 6d 62 65 72 20 6f 66 20 73 75 62 71 75 65 72 69  mber of subqueri
23db0 65 73 20 2a 2f 0a 20 20 75 38 20 65 43 6f 64 65  es */.  u8 eCode
23dc0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
23dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23de0 20 20 2f 2a 20 41 20 73 6d 61 6c 6c 20 70 72 6f    /* A small pro
23df0 63 65 73 73 69 6e 67 20 63 6f 64 65 20 2a 2f 0a  cessing code */.
23e00 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20 20 20 20    union {       
23e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
23e30 78 74 72 61 20 64 61 74 61 20 66 6f 72 20 63 61  xtra data for ca
23e40 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 20 20 4e 61  llback */.    Na
23e50 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 43 3b 20  meContext *pNC; 
23e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e70 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 69 6e          /* Namin
23e80 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20  g context */.   
23e90 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20   int n;         
23ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23eb0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20             /* A 
23ec0 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 20 20 69  counter */.    i
23ed0 6e 74 20 69 43 75 72 3b 20 20 20 20 20 20 20 20  nt iCur;        
23ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ef0 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 63 75           /* A cu
23f00 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20  rsor number */. 
23f10 20 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63     SrcList *pSrc
23f20 4c 69 73 74 3b 20 20 20 20 20 20 20 20 20 20 20  List;           
23f30 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
23f40 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20  FROM clause */. 
23f50 20 20 20 73 74 72 75 63 74 20 53 72 63 43 6f 75     struct SrcCou
23f60 6e 74 20 2a 70 53 72 63 43 6f 75 6e 74 3b 20 20  nt *pSrcCount;  
23f70 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
23f80 43 6f 75 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e 20  Counting column 
23f90 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20  references */.  
23fa0 20 20 73 74 72 75 63 74 20 43 43 75 72 48 69 6e    struct CCurHin
23fb0 74 20 2a 70 43 43 75 72 48 69 6e 74 3b 20 20 20  t *pCCurHint;   
23fc0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55              /* U
23fd0 73 65 64 20 62 79 20 63 6f 64 65 43 75 72 73 6f  sed by codeCurso
23fe0 72 48 69 6e 74 28 29 20 2a 2f 0a 20 20 20 20 69  rHint() */.    i
23ff0 6e 74 20 2a 61 69 43 6f 6c 3b 20 20 20 20 20 20  nt *aiCol;      
24000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24010 20 20 20 20 20 20 20 20 20 2f 2a 20 61 72 72 61           /* arra
24020 79 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 64 65  y of column inde
24030 78 65 73 20 2a 2f 0a 20 20 20 20 73 74 72 75 63  xes */.    struc
24040 74 20 49 64 78 43 6f 76 65 72 20 2a 70 49 64 78  t IdxCover *pIdx
24050 43 6f 76 65 72 3b 20 20 20 20 20 20 20 20 20 20  Cover;          
24060 20 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 66 6f       /* Check fo
24070 72 20 69 6e 64 65 78 20 63 6f 76 65 72 61 67 65  r index coverage
24080 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 49   */.    struct I
24090 64 78 45 78 70 72 54 72 61 6e 73 20 2a 70 49 64  dxExprTrans *pId
240a0 78 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20  xTrans;         
240b0 20 20 2f 2a 20 43 6f 6e 76 65 72 74 20 69 6e 64    /* Convert ind
240c0 65 78 65 64 20 65 78 70 72 20 74 6f 20 63 6f 6c  exed expr to col
240d0 75 6d 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c  umn */.    ExprL
240e0 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20  ist *pGroupBy;  
240f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24100 20 20 20 20 20 2f 2a 20 47 52 4f 55 50 20 42 59       /* GROUP BY
24110 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 73   clause */.    s
24120 74 72 75 63 74 20 48 61 76 69 6e 67 54 6f 57 68  truct HavingToWh
24130 65 72 65 43 74 78 20 2a 70 48 61 76 69 6e 67 43  ereCtx *pHavingC
24140 74 78 3b 20 20 20 20 20 20 2f 2a 20 48 41 56 49  tx;      /* HAVI
24150 4e 47 20 74 6f 20 57 48 45 52 45 20 63 6c 61 75  NG to WHERE clau
24160 73 65 20 63 74 78 20 2a 2f 0a 20 20 7d 20 75 3b  se ctx */.  } u;
24170 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72 64 20  .};../* Forward 
24180 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 2a 2f 0a  declarations */.
24190 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45  int sqlite3WalkE
241a0 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70  xpr(Walker*, Exp
241b0 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
241c0 57 61 6c 6b 45 78 70 72 4c 69 73 74 28 57 61 6c  WalkExprList(Wal
241d0 6b 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  ker*, ExprList*)
241e0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  ;.int sqlite3Wal
241f0 6b 53 65 6c 65 63 74 28 57 61 6c 6b 65 72 2a 2c  kSelect(Walker*,
24200 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73   Select*);.int s
24210 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74  qlite3WalkSelect
24220 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 53 65  Expr(Walker*, Se
24230 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lect*);.int sqli
24240 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 46 72 6f  te3WalkSelectFro
24250 6d 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63  m(Walker*, Selec
24260 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
24270 45 78 70 72 57 61 6c 6b 4e 6f 6f 70 28 57 61 6c  ExprWalkNoop(Wal
24280 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e  ker*, Expr*);.in
24290 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57  t sqlite3SelectW
242a0 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65 72 2a 2c  alkNoop(Walker*,
242b0 20 53 65 6c 65 63 74 2a 29 3b 0a 23 69 66 64 65   Select*);.#ifde
242c0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 76  f SQLITE_DEBUG.v
242d0 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63  oid sqlite3Selec
242e0 74 57 61 6c 6b 41 73 73 65 72 74 32 28 57 61 6c  tWalkAssert2(Wal
242f0 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  ker*, Select*);.
24300 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65  #endif../*.** Re
24310 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 74  turn code from t
24320 68 65 20 70 61 72 73 65 2d 74 72 65 65 20 77 61  he parse-tree wa
24330 6c 6b 69 6e 67 20 70 72 69 6d 69 74 69 76 65 73  lking primitives
24340 20 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20 63 61   and their.** ca
24350 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66  llbacks..*/.#def
24360 69 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e 75 65  ine WRC_Continue
24370 20 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e 74 69      0   /* Conti
24380 6e 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20 63 68  nue down into ch
24390 69 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  ildren */.#defin
243a0 65 20 57 52 43 5f 50 72 75 6e 65 20 20 20 20 20  e WRC_Prune     
243b0 20 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20 63 68    1   /* Omit ch
243c0 69 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e 74 69  ildren but conti
243d0 6e 75 65 20 77 61 6c 6b 69 6e 67 20 73 69 62 6c  nue walking sibl
243e0 69 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ings */.#define 
243f0 57 52 43 5f 41 62 6f 72 74 20 20 20 20 20 20 20  WRC_Abort       
24400 32 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e 20 74  2   /* Abandon t
24410 68 65 20 74 72 65 65 20 77 61 6c 6b 20 2a 2f 0a  he tree walk */.
24420 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
24430 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ce of this struc
24440 74 75 72 65 20 72 65 70 72 65 73 65 6e 74 73 20  ture represents 
24450 61 20 73 65 74 20 6f 66 20 6f 6e 65 20 6f 72 20  a set of one or 
24460 6d 6f 72 65 20 43 54 45 73 0a 2a 2a 20 28 63 6f  more CTEs.** (co
24470 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
24480 73 73 69 6f 6e 73 29 20 63 72 65 61 74 65 64 20  ssions) created 
24490 62 79 20 61 20 73 69 6e 67 6c 65 20 57 49 54 48  by a single WITH
244a0 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75   clause..*/.stru
244b0 63 74 20 57 69 74 68 20 7b 0a 20 20 69 6e 74 20  ct With {.  int 
244c0 6e 43 74 65 3b 20 20 20 20 20 20 20 20 20 20 20  nCte;           
244d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
244e0 75 6d 62 65 72 20 6f 66 20 43 54 45 73 20 69 6e  umber of CTEs in
244f0 20 74 68 65 20 57 49 54 48 20 63 6c 61 75 73 65   the WITH clause
24500 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 4f 75 74   */.  With *pOut
24510 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  er;             
24520 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e        /* Contain
24530 69 6e 67 20 57 49 54 48 20 63 6c 61 75 73 65 2c  ing WITH clause,
24540 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74   or NULL */.  st
24550 72 75 63 74 20 43 74 65 20 7b 20 20 20 20 20 20  ruct Cte {      
24560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
24570 20 46 6f 72 20 65 61 63 68 20 43 54 45 20 69 6e   For each CTE in
24580 20 74 68 65 20 57 49 54 48 20 63 6c 61 75 73 65   the WITH clause
24590 2e 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72  .... */.    char
245a0 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
245b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
245c0 61 6d 65 20 6f 66 20 74 68 69 73 20 43 54 45 20  ame of this CTE 
245d0 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20  */.    ExprList 
245e0 2a 70 43 6f 6c 73 3b 20 20 20 20 20 20 20 20 20  *pCols;         
245f0 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f         /* List o
24600 66 20 65 78 70 6c 69 63 69 74 20 63 6f 6c 75 6d  f explicit colum
24610 6e 20 6e 61 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c  n names, or NULL
24620 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a   */.    Select *
24630 70 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20  pSelect;        
24640 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64          /* The d
24650 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74 68 69  efinition of thi
24660 73 20 43 54 45 20 2a 2f 0a 20 20 20 20 63 6f 6e  s CTE */.    con
24670 73 74 20 63 68 61 72 20 2a 7a 43 74 65 45 72 72  st char *zCteErr
24680 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
24690 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20 66 6f  Error message fo
246a0 72 20 63 69 72 63 75 6c 61 72 20 72 65 66 65 72  r circular refer
246b0 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 61 5b 31  ences */.  } a[1
246c0 5d 3b 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51  ];.};..#ifdef SQ
246d0 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a  LITE_DEBUG./*.**
246e0 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
246f0 74 68 65 20 54 72 65 65 56 69 65 77 20 6f 62 6a  the TreeView obj
24700 65 63 74 20 69 73 20 75 73 65 64 20 66 6f 72 20  ect is used for 
24710 70 72 69 6e 74 69 6e 67 20 74 68 65 20 63 6f 6e  printing the con
24720 74 65 6e 74 20 6f 66 0a 2a 2a 20 64 61 74 61 20  tent of.** data 
24730 73 74 72 75 63 74 75 72 65 73 20 6f 6e 20 73 71  structures on sq
24740 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66  lite3DebugPrintf
24750 28 29 20 75 73 69 6e 67 20 61 20 74 72 65 65 2d  () using a tree-
24760 6c 69 6b 65 20 76 69 65 77 2e 0a 2a 2f 0a 73 74  like view..*/.st
24770 72 75 63 74 20 54 72 65 65 56 69 65 77 20 7b 0a  ruct TreeView {.
24780 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20    int iLevel;   
24790 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69            /* Whi
247a0 63 68 20 6c 65 76 65 6c 20 6f 66 20 74 68 65 20  ch level of the 
247b0 74 72 65 65 20 77 65 20 61 72 65 20 6f 6e 20 2a  tree we are on *
247c0 2f 0a 20 20 75 38 20 20 62 4c 69 6e 65 5b 31 30  /.  u8  bLine[10
247d0 30 5d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44  0];         /* D
247e0 72 61 77 20 76 65 72 74 69 63 61 6c 20 69 6e 20  raw vertical in 
247f0 63 6f 6c 75 6d 6e 20 69 20 69 66 20 62 4c 69 6e  column i if bLin
24800 65 5b 69 5d 20 69 73 20 74 72 75 65 20 2a 2f 0a  e[i] is true */.
24810 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  };.#endif /* SQL
24820 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 0a 2f 2a  ITE_DEBUG */../*
24830 0a 2a 2a 20 41 73 73 75 6d 69 6e 67 20 7a 49 6e  .** Assuming zIn
24840 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66   points to the f
24850 69 72 73 74 20 62 79 74 65 20 6f 66 20 61 20 55  irst byte of a U
24860 54 46 2d 38 20 63 68 61 72 61 63 74 65 72 2c 0a  TF-8 character,.
24870 2a 2a 20 61 64 76 61 6e 63 65 20 7a 49 6e 20 74  ** advance zIn t
24880 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 66  o point to the f
24890 69 72 73 74 20 62 79 74 65 20 6f 66 20 74 68 65  irst byte of the
248a0 20 6e 65 78 74 20 55 54 46 2d 38 20 63 68 61 72   next UTF-8 char
248b0 61 63 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  acter..*/.#defin
248c0 65 20 53 51 4c 49 54 45 5f 53 4b 49 50 5f 55 54  e SQLITE_SKIP_UT
248d0 46 38 28 7a 49 6e 29 20 7b 20 20 20 20 20 20 20  F8(zIn) {       
248e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
248f0 20 5c 0a 20 20 69 66 28 20 28 2a 28 7a 49 6e 2b   \.  if( (*(zIn+
24900 2b 29 29 3e 3d 30 78 63 30 20 29 7b 20 20 20 20  +))>=0xc0 ){    
24910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24920 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20            \.    
24930 77 68 69 6c 65 28 20 28 2a 7a 49 6e 20 26 20 30  while( (*zIn & 0
24940 78 63 30 29 3d 3d 30 78 38 30 20 29 7b 20 7a 49  xc0)==0x80 ){ zI
24950 6e 2b 2b 3b 20 7d 20 20 20 20 20 20 20 20 20 20  n++; }          
24960 20 20 20 5c 0a 20 20 7d 20 20 20 20 20 20 20 20     \.  }        
24970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24990 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 7d 0a              \.}.
249a0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54  ./*.** The SQLIT
249b0 45 5f 2a 5f 42 4b 50 54 20 6d 61 63 72 6f 73 20  E_*_BKPT macros 
249c0 61 72 65 20 73 75 62 73 74 69 74 75 74 65 73 20  are substitutes 
249d0 66 6f 72 20 74 68 65 20 65 72 72 6f 72 20 63 6f  for the error co
249e0 64 65 73 20 77 69 74 68 0a 2a 2a 20 74 68 65 20  des with.** the 
249f0 73 61 6d 65 20 6e 61 6d 65 20 62 75 74 20 77 69  same name but wi
24a00 74 68 6f 75 74 20 74 68 65 20 5f 42 4b 50 54 20  thout the _BKPT 
24a10 73 75 66 66 69 78 2e 20 20 54 68 65 73 65 20 6d  suffix.  These m
24a20 61 63 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a 2a 20  acros invoke.** 
24a30 72 6f 75 74 69 6e 65 73 20 74 68 61 74 20 72 65  routines that re
24a40 70 6f 72 74 20 74 68 65 20 6c 69 6e 65 2d 6e 75  port the line-nu
24a50 6d 62 65 72 20 6f 6e 20 77 68 69 63 68 20 74 68  mber on which th
24a60 65 20 65 72 72 6f 72 20 6f 72 69 67 69 6e 61 74  e error originat
24a70 65 64 0a 2a 2a 20 75 73 69 6e 67 20 73 71 6c 69  ed.** using sqli
24a80 74 65 33 5f 6c 6f 67 28 29 2e 20 20 54 68 65 20  te3_log().  The 
24a90 72 6f 75 74 69 6e 65 73 20 61 6c 73 6f 20 70 72  routines also pr
24aa0 6f 76 69 64 65 20 61 20 63 6f 6e 76 65 6e 69 65  ovide a convenie
24ab0 6e 74 20 70 6c 61 63 65 0a 2a 2a 20 74 6f 20 73  nt place.** to s
24ac0 65 74 20 61 20 64 65 62 75 67 67 65 72 20 62 72  et a debugger br
24ad0 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e 74  eakpoint..*/.int
24ae0 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45   sqlite3CorruptE
24af0 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73  rror(int);.int s
24b00 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f  qlite3MisuseErro
24b10 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  r(int);.int sqli
24b20 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72  te3CantopenError
24b30 28 69 6e 74 29 3b 0a 23 64 65 66 69 6e 65 20 53  (int);.#define S
24b40 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b  QLITE_CORRUPT_BK
24b50 50 54 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70  PT sqlite3Corrup
24b60 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29  tError(__LINE__)
24b70 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
24b80 4d 49 53 55 53 45 5f 42 4b 50 54 20 73 71 6c 69  MISUSE_BKPT sqli
24b90 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28 5f  te3MisuseError(_
24ba0 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65  _LINE__).#define
24bb0 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e   SQLITE_CANTOPEN
24bc0 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43 61 6e  _BKPT sqlite3Can
24bd0 74 6f 70 65 6e 45 72 72 6f 72 28 5f 5f 4c 49 4e  topenError(__LIN
24be0 45 5f 5f 29 0a 23 69 66 64 65 66 20 53 51 4c 49  E__).#ifdef SQLI
24bf0 54 45 5f 44 45 42 55 47 0a 20 20 69 6e 74 20 73  TE_DEBUG.  int s
24c00 71 6c 69 74 65 33 4e 6f 6d 65 6d 45 72 72 6f 72  qlite3NomemError
24c10 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c  (int);.  int sql
24c20 69 74 65 33 49 6f 65 72 72 6e 6f 6d 65 6d 45 72  ite3IoerrnomemEr
24c30 72 6f 72 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20  ror(int);.  int 
24c40 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 50 67  sqlite3CorruptPg
24c50 6e 6f 45 72 72 6f 72 28 69 6e 74 2c 50 67 6e 6f  noError(int,Pgno
24c60 29 3b 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  );.# define SQLI
24c70 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 73 71  TE_NOMEM_BKPT sq
24c80 6c 69 74 65 33 4e 6f 6d 65 6d 45 72 72 6f 72 28  lite3NomemError(
24c90 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 20 64 65 66 69  __LINE__).# defi
24ca0 6e 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f  ne SQLITE_IOERR_
24cb0 4e 4f 4d 45 4d 5f 42 4b 50 54 20 73 71 6c 69 74  NOMEM_BKPT sqlit
24cc0 65 33 49 6f 65 72 72 6e 6f 6d 65 6d 45 72 72 6f  e3IoerrnomemErro
24cd0 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 20 64 65  r(__LINE__).# de
24ce0 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52  fine SQLITE_CORR
24cf0 55 50 54 5f 50 47 4e 4f 28 50 29 20 73 71 6c 69  UPT_PGNO(P) sqli
24d00 74 65 33 43 6f 72 72 75 70 74 50 67 6e 6f 45 72  te3CorruptPgnoEr
24d10 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 2c 28 50 29  ror(__LINE__,(P)
24d20 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
24d30 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b   SQLITE_NOMEM_BK
24d40 50 54 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 0a  PT SQLITE_NOMEM.
24d50 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
24d60 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54  IOERR_NOMEM_BKPT
24d70 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f   SQLITE_IOERR_NO
24d80 4d 45 4d 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  MEM.# define SQL
24d90 49 54 45 5f 43 4f 52 52 55 50 54 5f 50 47 4e 4f  ITE_CORRUPT_PGNO
24da0 28 50 29 20 73 71 6c 69 74 65 33 43 6f 72 72 75  (P) sqlite3Corru
24db0 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f  ptError(__LINE__
24dc0 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
24dd0 46 54 53 33 20 61 6e 64 20 46 54 53 34 20 62 6f  FTS3 and FTS4 bo
24de0 74 68 20 72 65 71 75 69 72 65 20 76 69 72 74 75  th require virtu
24df0 61 6c 20 74 61 62 6c 65 20 73 75 70 70 6f 72 74  al table support
24e00 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
24e10 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
24e20 55 41 4c 54 41 42 4c 45 29 0a 23 20 75 6e 64 65  UALTABLE).# unde
24e30 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
24e40 46 54 53 33 0a 23 20 75 6e 64 65 66 20 53 51 4c  FTS3.# undef SQL
24e50 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 0a  ITE_ENABLE_FTS4.
24e60 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 54  #endif../*.** FT
24e70 53 34 20 69 73 20 72 65 61 6c 6c 79 20 61 6e 20  S4 is really an 
24e80 65 78 74 65 6e 73 69 6f 6e 20 66 6f 72 20 46 54  extension for FT
24e90 53 33 2e 20 20 49 74 20 69 73 20 65 6e 61 62 6c  S3.  It is enabl
24ea0 65 64 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20  ed using the.** 
24eb0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
24ec0 53 33 20 6d 61 63 72 6f 2e 20 20 42 75 74 20 74  S3 macro.  But t
24ed0 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f  o avoid confusio
24ee0 6e 20 77 65 20 61 6c 73 6f 20 63 61 6c 6c 0a 2a  n we also call.*
24ef0 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41  * the SQLITE_ENA
24f00 42 4c 45 5f 46 54 53 34 20 6d 61 63 72 6f 20 74  BLE_FTS4 macro t
24f10 6f 20 73 65 72 76 65 20 61 73 20 61 6e 20 61 6c  o serve as an al
24f20 69 61 73 20 66 6f 72 20 53 51 4c 49 54 45 5f 45  ias for SQLITE_E
24f30 4e 41 42 4c 45 5f 46 54 53 33 2e 0a 2a 2f 0a 23  NABLE_FTS3..*/.#
24f40 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
24f50 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 29 20 26  E_ENABLE_FTS4) &
24f60 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
24f70 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 0a 23  E_ENABLE_FTS3).#
24f80 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45   define SQLITE_E
24f90 4e 41 42 4c 45 5f 46 54 53 33 20 31 0a 23 65 6e  NABLE_FTS3 1.#en
24fa0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63  dif../*.** The c
24fb0 74 79 70 65 2e 68 20 68 65 61 64 65 72 20 69 73  type.h header is
24fc0 20 6e 65 65 64 65 64 20 66 6f 72 20 6e 6f 6e 2d   needed for non-
24fd0 41 53 43 49 49 20 73 79 73 74 65 6d 73 2e 20 20  ASCII systems.  
24fe0 49 74 20 69 73 20 61 6c 73 6f 0a 2a 2a 20 6e 65  It is also.** ne
24ff0 65 64 65 64 20 62 79 20 46 54 53 33 20 77 68 65  eded by FTS3 whe
25000 6e 20 46 54 53 33 20 69 73 20 69 6e 63 6c 75 64  n FTS3 is includ
25010 65 64 20 69 6e 20 74 68 65 20 61 6d 61 6c 67 61  ed in the amalga
25020 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 21  mation..*/.#if !
25030 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41  defined(SQLITE_A
25040 53 43 49 49 29 20 7c 7c 20 5c 0a 20 20 20 20 28  SCII) || \.    (
25050 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
25060 4e 41 42 4c 45 5f 46 54 53 33 29 20 26 26 20 64  NABLE_FTS3) && d
25070 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 4d  efined(SQLITE_AM
25080 41 4c 47 41 4d 41 54 49 4f 4e 29 29 0a 23 20 69  ALGAMATION)).# i
25090 6e 63 6c 75 64 65 20 3c 63 74 79 70 65 2e 68 3e  nclude <ctype.h>
250a0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
250b0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
250c0 72 6f 73 20 6d 69 6d 69 63 20 74 68 65 20 73 74  ros mimic the st
250d0 61 6e 64 61 72 64 20 6c 69 62 72 61 72 79 20 66  andard library f
250e0 75 6e 63 74 69 6f 6e 73 20 74 6f 75 70 70 65 72  unctions toupper
250f0 28 29 2c 0a 2a 2a 20 69 73 73 70 61 63 65 28 29  (),.** isspace()
25100 2c 20 69 73 61 6c 6e 75 6d 28 29 2c 20 69 73 64  , isalnum(), isd
25110 69 67 69 74 28 29 20 61 6e 64 20 69 73 78 64 69  igit() and isxdi
25120 67 69 74 28 29 2c 20 72 65 73 70 65 63 74 69 76  git(), respectiv
25130 65 6c 79 2e 20 54 68 65 0a 2a 2a 20 73 71 6c 69  ely. The.** sqli
25140 74 65 20 76 65 72 73 69 6f 6e 73 20 6f 6e 6c 79  te versions only
25150 20 77 6f 72 6b 20 66 6f 72 20 41 53 43 49 49 20   work for ASCII 
25160 63 68 61 72 61 63 74 65 72 73 2c 20 72 65 67 61  characters, rega
25170 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63 61 6c 65  rdless of locale
25180 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
25190 54 45 5f 41 53 43 49 49 0a 23 20 64 65 66 69 6e  TE_ASCII.# defin
251a0 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72  e sqlite3Toupper
251b0 28 78 29 20 20 28 28 78 29 26 7e 28 73 71 6c 69  (x)  ((x)&~(sqli
251c0 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
251d0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
251e0 30 78 32 30 29 29 0a 23 20 64 65 66 69 6e 65 20  0x20)).# define 
251f0 73 71 6c 69 74 65 33 49 73 73 70 61 63 65 28 78  sqlite3Isspace(x
25200 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
25210 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
25220 68 61 72 29 28 78 29 5d 26 30 78 30 31 29 0a 23  har)(x)]&0x01).#
25230 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
25240 73 61 6c 6e 75 6d 28 78 29 20 20 20 28 73 71 6c  salnum(x)   (sql
25250 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
25260 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
25270 26 30 78 30 36 29 0a 23 20 64 65 66 69 6e 65 20  &0x06).# define 
25280 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78  sqlite3Isalpha(x
25290 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
252a0 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
252b0 68 61 72 29 28 78 29 5d 26 30 78 30 32 29 0a 23  har)(x)]&0x02).#
252c0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
252d0 73 64 69 67 69 74 28 78 29 20 20 20 28 73 71 6c  sdigit(x)   (sql
252e0 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
252f0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
25300 26 30 78 30 34 29 0a 23 20 64 65 66 69 6e 65 20  &0x04).# define 
25310 73 71 6c 69 74 65 33 49 73 78 64 69 67 69 74 28  sqlite3Isxdigit(
25320 78 29 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  x)  (sqlite3Ctyp
25330 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
25340 68 61 72 29 28 78 29 5d 26 30 78 30 38 29 0a 23  har)(x)]&0x08).#
25350 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
25360 6f 6c 6f 77 65 72 28 78 29 20 20 20 28 73 71 6c  olower(x)   (sql
25370 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72  ite3UpperToLower
25380 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
25390 28 78 29 5d 29 0a 23 20 64 65 66 69 6e 65 20 73  (x)]).# define s
253a0 71 6c 69 74 65 33 49 73 71 75 6f 74 65 28 78 29  qlite3Isquote(x)
253b0 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65     (sqlite3Ctype
253c0 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
253d0 61 72 29 28 78 29 5d 26 30 78 38 30 29 0a 23 65  ar)(x)]&0x80).#e
253e0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
253f0 69 74 65 33 54 6f 75 70 70 65 72 28 78 29 20 20  ite3Toupper(x)  
25400 20 74 6f 75 70 70 65 72 28 28 75 6e 73 69 67 6e   toupper((unsign
25410 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
25420 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73  efine sqlite3Iss
25430 70 61 63 65 28 78 29 20 20 20 69 73 73 70 61 63  pace(x)   isspac
25440 65 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  e((unsigned char
25450 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
25460 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29  qlite3Isalnum(x)
25470 20 20 20 69 73 61 6c 6e 75 6d 28 28 75 6e 73 69     isalnum((unsi
25480 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
25490 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
254a0 73 61 6c 70 68 61 28 78 29 20 20 20 69 73 61 6c  salpha(x)   isal
254b0 70 68 61 28 28 75 6e 73 69 67 6e 65 64 20 63 68  pha((unsigned ch
254c0 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
254d0 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28   sqlite3Isdigit(
254e0 78 29 20 20 20 69 73 64 69 67 69 74 28 28 75 6e  x)   isdigit((un
254f0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
25500 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
25510 33 49 73 78 64 69 67 69 74 28 78 29 20 20 69 73  3Isxdigit(x)  is
25520 78 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64  xdigit((unsigned
25530 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
25540 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77  ine sqlite3Tolow
25550 65 72 28 78 29 20 20 20 74 6f 6c 6f 77 65 72 28  er(x)   tolower(
25560 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
25570 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
25580 69 74 65 33 49 73 71 75 6f 74 65 28 78 29 20 20  ite3Isquote(x)  
25590 20 28 28 78 29 3d 3d 27 22 27 7c 7c 28 78 29 3d   ((x)=='"'||(x)=
255a0 3d 27 5c 27 27 7c 7c 28 78 29 3d 3d 27 5b 27 7c  ='\''||(x)=='['|
255b0 7c 28 78 29 3d 3d 27 60 27 29 0a 23 65 6e 64 69  |(x)=='`').#endi
255c0 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
255d0 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54  _OMIT_COMPILEOPT
255e0 49 4f 4e 5f 44 49 41 47 53 0a 69 6e 74 20 73 71  ION_DIAGS.int sq
255f0 6c 69 74 65 33 49 73 49 64 43 68 61 72 28 75 38  lite3IsIdChar(u8
25600 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  );.#endif../*.**
25610 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74 69   Internal functi
25620 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a 2a 2f  on prototypes.*/
25630 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72 49  .int sqlite3StrI
25640 43 6d 70 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  Cmp(const char*,
25650 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e  const char*);.in
25660 74 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  t sqlite3Strlen3
25670 30 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  0(const char*);.
25680 63 68 61 72 20 2a 73 71 6c 69 74 65 33 43 6f 6c  char *sqlite3Col
25690 75 6d 6e 54 79 70 65 28 43 6f 6c 75 6d 6e 2a 2c  umnType(Column*,
256a0 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20  char*);.#define 
256b0 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 20  sqlite3StrNICmp 
256c0 73 71 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d 70  sqlite3_strnicmp
256d0 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c  ..int sqlite3Mal
256e0 6c 6f 63 49 6e 69 74 28 76 6f 69 64 29 3b 0a 76  locInit(void);.v
256f0 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  oid sqlite3Mallo
25700 63 45 6e 64 28 76 6f 69 64 29 3b 0a 76 6f 69 64  cEnd(void);.void
25710 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28   *sqlite3Malloc(
25720 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  u64);.void *sqli
25730 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28 75 36  te3MallocZero(u6
25740 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  4);.void *sqlite
25750 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 73 71  3DbMallocZero(sq
25760 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 76 6f  lite3*, u64);.vo
25770 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c  id *sqlite3DbMal
25780 6c 6f 63 52 61 77 28 73 71 6c 69 74 65 33 2a 2c  locRaw(sqlite3*,
25790 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c   u64);.void *sql
257a0 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e  ite3DbMallocRawN
257b0 4e 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29  N(sqlite3*, u64)
257c0 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44  ;.char *sqlite3D
257d0 62 53 74 72 44 75 70 28 73 71 6c 69 74 65 33 2a  bStrDup(sqlite3*
257e0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63  ,const char*);.c
257f0 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74  har *sqlite3DbSt
25800 72 4e 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63  rNDup(sqlite3*,c
25810 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75 36 34 29  onst char*, u64)
25820 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 52  ;.void *sqlite3R
25830 65 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20 75 36  ealloc(void*, u6
25840 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  4);.void *sqlite
25850 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46 72 65 65  3DbReallocOrFree
25860 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64  (sqlite3 *, void
25870 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a   *, u64);.void *
25880 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63  sqlite3DbRealloc
25890 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64  (sqlite3 *, void
258a0 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 73   *, u64);.void s
258b0 71 6c 69 74 65 33 44 62 46 72 65 65 28 73 71 6c  qlite3DbFree(sql
258c0 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76  ite3*, void*);.v
258d0 6f 69 64 20 73 71 6c 69 74 65 33 44 62 46 72 65  oid sqlite3DbFre
258e0 65 4e 4e 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f  eNN(sqlite3*, vo
258f0 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  id*);.int sqlite
25900 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f 69 64  3MallocSize(void
25910 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44  *);.int sqlite3D
25920 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71 6c 69  bMallocSize(sqli
25930 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f  te3*, void*);.vo
25940 69 64 20 2a 73 71 6c 69 74 65 33 50 61 67 65 4d  id *sqlite3PageM
25950 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64  alloc(int);.void
25960 20 73 71 6c 69 74 65 33 50 61 67 65 46 72 65 65   sqlite3PageFree
25970 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71  (void*);.void sq
25980 6c 69 74 65 33 4d 65 6d 53 65 74 44 65 66 61 75  lite3MemSetDefau
25990 6c 74 28 76 6f 69 64 29 3b 0a 23 69 66 6e 64 65  lt(void);.#ifnde
259a0 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41  f SQLITE_UNTESTA
259b0 42 4c 45 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  BLE.void sqlite3
259c0 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b  BenignMallocHook
259d0 73 28 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29  s(void (*)(void)
259e0 2c 20 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29  , void (*)(void)
259f0 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71  );.#endif.int sq
25a00 6c 69 74 65 33 48 65 61 70 4e 65 61 72 6c 79 46  lite3HeapNearlyF
25a10 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a  ull(void);../*.*
25a20 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20 77 69 74  * On systems wit
25a30 68 20 61 6d 70 6c 65 20 73 74 61 63 6b 20 73 70  h ample stack sp
25a40 61 63 65 20 61 6e 64 20 74 68 61 74 20 73 75 70  ace and that sup
25a50 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c 20 6d  port alloca(), m
25a60 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20 61 6c  ake.** use of al
25a70 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74 61 69 6e  loca() to obtain
25a80 20 73 70 61 63 65 20 66 6f 72 20 6c 61 72 67 65   space for large
25a90 20 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a 65 63   automatic objec
25aa0 74 73 2e 20 20 42 79 20 64 65 66 61 75 6c 74 2c  ts.  By default,
25ab0 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61 63 65  .** obtain space
25ac0 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e 0a   from malloc()..
25ad0 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f 63 61  **.** The alloca
25ae0 28 29 20 72 6f 75 74 69 6e 65 20 6e 65 76 65 72  () routine never
25af0 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e 20 20   returns NULL.  
25b00 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65 20  This will cause 
25b10 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20 74 68  code paths.** th
25b20 61 74 20 64 65 61 6c 20 77 69 74 68 20 73 71 6c  at deal with sql
25b30 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 28 29  ite3StackAlloc()
25b40 20 66 61 69 6c 75 72 65 73 20 74 6f 20 62 65 20   failures to be 
25b50 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a 2f 0a  unreachable..*/.
25b60 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53  #ifdef SQLITE_US
25b70 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66 69 6e  E_ALLOCA.# defin
25b80 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  e sqlite3StackAl
25b90 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 61 6c  locRaw(D,N)   al
25ba0 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66 69 6e 65  loca(N).# define
25bb0 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
25bc0 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d 65 6d  ocZero(D,N)  mem
25bd0 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c 20 30  set(alloca(N), 0
25be0 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71  , N).# define sq
25bf0 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65 28 44  lite3StackFree(D
25c00 2c 50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  ,P).#else.# defi
25c10 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
25c20 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 73  llocRaw(D,N)   s
25c30 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
25c40 77 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20  w(D,N).# define 
25c50 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f  sqlite3StackAllo
25c60 63 5a 65 72 6f 28 44 2c 4e 29 20 20 73 71 6c 69  cZero(D,N)  sqli
25c70 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28  te3DbMallocZero(
25c80 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71  D,N).# define sq
25c90 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65 28 44  lite3StackFree(D
25ca0 2c 50 29 20 20 20 20 20 20 20 73 71 6c 69 74 65  ,P)       sqlite
25cb0 33 44 62 46 72 65 65 28 44 2c 50 29 0a 23 65 6e  3DbFree(D,P).#en
25cc0 64 69 66 0a 0a 2f 2a 20 44 6f 20 6e 6f 74 20 61  dif../* Do not a
25cd0 6c 6c 6f 77 20 62 6f 74 68 20 4d 45 4d 53 59 53  llow both MEMSYS
25ce0 35 20 61 6e 64 20 4d 45 4d 53 59 53 33 20 74 6f  5 and MEMSYS3 to
25cf0 20 62 65 20 64 65 66 69 6e 65 64 20 74 6f 67 65   be defined toge
25d00 74 68 65 72 2e 20 20 49 66 20 74 68 65 79 0a 2a  ther.  If they.*
25d10 2a 20 61 72 65 2c 20 64 69 73 61 62 6c 65 20 4d  * are, disable M
25d20 45 4d 53 59 53 33 0a 2a 2f 0a 23 69 66 64 65 66  EMSYS3.*/.#ifdef
25d30 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d   SQLITE_ENABLE_M
25d40 45 4d 53 59 53 35 0a 63 6f 6e 73 74 20 73 71 6c  EMSYS5.const sql
25d50 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73  ite3_mem_methods
25d60 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d   *sqlite3MemGetM
25d70 65 6d 73 79 73 35 28 76 6f 69 64 29 3b 0a 23 75  emsys5(void);.#u
25d80 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  ndef SQLITE_ENAB
25d90 4c 45 5f 4d 45 4d 53 59 53 33 0a 23 65 6e 64 69  LE_MEMSYS3.#endi
25da0 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
25db0 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 63  ENABLE_MEMSYS3.c
25dc0 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d  onst sqlite3_mem
25dd0 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65  _methods *sqlite
25de0 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 33 28 76  3MemGetMemsys3(v
25df0 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 23  oid);.#endif...#
25e00 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 55  ifndef SQLITE_MU
25e10 54 45 58 5f 4f 4d 49 54 0a 20 20 73 71 6c 69 74  TEX_OMIT.  sqlit
25e20 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73  e3_mutex_methods
25e30 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 44   const *sqlite3D
25e40 65 66 61 75 6c 74 4d 75 74 65 78 28 76 6f 69 64  efaultMutex(void
25e50 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  );.  sqlite3_mut
25e60 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74  ex_methods const
25e70 20 2a 73 71 6c 69 74 65 33 4e 6f 6f 70 4d 75 74   *sqlite3NoopMut
25e80 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69  ex(void);.  sqli
25e90 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74  te3_mutex *sqlit
25ea0 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28 69 6e 74  e3MutexAlloc(int
25eb0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
25ec0 4d 75 74 65 78 49 6e 69 74 28 76 6f 69 64 29 3b  MutexInit(void);
25ed0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75  .  int sqlite3Mu
25ee0 74 65 78 45 6e 64 28 76 6f 69 64 29 3b 0a 23 65  texEnd(void);.#e
25ef0 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65  ndif.#if !define
25f00 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f  d(SQLITE_MUTEX_O
25f10 4d 49 54 29 20 26 26 20 21 64 65 66 69 6e 65 64  MIT) && !defined
25f20 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4e 4f  (SQLITE_MUTEX_NO
25f30 4f 50 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  OP).  void sqlit
25f40 65 33 4d 65 6d 6f 72 79 42 61 72 72 69 65 72 28  e3MemoryBarrier(
25f50 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 23 20 64  void);.#else.# d
25f60 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d  efine sqlite3Mem
25f70 6f 72 79 42 61 72 72 69 65 72 28 29 0a 23 65 6e  oryBarrier().#en
25f80 64 69 66 0a 0a 73 71 6c 69 74 65 33 5f 69 6e 74  dif..sqlite3_int
25f90 36 34 20 73 71 6c 69 74 65 33 53 74 61 74 75 73  64 sqlite3Status
25fa0 56 61 6c 75 65 28 69 6e 74 29 3b 0a 76 6f 69 64  Value(int);.void
25fb0 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 55 70   sqlite3StatusUp
25fc0 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  (int, int);.void
25fd0 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 44 6f   sqlite3StatusDo
25fe0 77 6e 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  wn(int, int);.vo
25ff0 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73  id sqlite3Status
26000 48 69 67 68 77 61 74 65 72 28 69 6e 74 2c 20 69  Highwater(int, i
26010 6e 74 29 3b 0a 0a 2f 2a 20 41 63 63 65 73 73 20  nt);../* Access 
26020 74 6f 20 6d 75 74 65 78 65 73 20 75 73 65 64 20  to mutexes used 
26030 62 79 20 73 71 6c 69 74 65 33 5f 73 74 61 74 75  by sqlite3_statu
26040 73 28 29 20 2a 2f 0a 73 71 6c 69 74 65 33 5f 6d  s() */.sqlite3_m
26050 75 74 65 78 20 2a 73 71 6c 69 74 65 33 50 63 61  utex *sqlite3Pca
26060 63 68 65 31 4d 75 74 65 78 28 76 6f 69 64 29 3b  che1Mutex(void);
26070 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a  .sqlite3_mutex *
26080 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 4d 75 74  sqlite3MallocMut
26090 65 78 28 76 6f 69 64 29 3b 0a 0a 23 69 66 6e 64  ex(void);..#ifnd
260a0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
260b0 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20  LOATING_POINT.  
260c0 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4e 61 4e  int sqlite3IsNaN
260d0 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6c 73 65 0a  (double);.#else.
260e0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
260f0 49 73 4e 61 4e 28 58 29 20 20 30 0a 23 65 6e 64  IsNaN(X)  0.#end
26100 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  if../*.** An ins
26110 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
26120 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
26130 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69   holds informati
26140 6f 6e 20 61 62 6f 75 74 20 53 51 4c 0a 2a 2a 20  on about SQL.** 
26150 66 75 6e 63 74 69 6f 6e 73 20 61 72 67 75 6d 65  functions argume
26160 6e 74 73 20 74 68 61 74 20 61 72 65 20 74 68 65  nts that are the
26170 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 20 74   parameters to t
26180 68 65 20 70 72 69 6e 74 66 28 29 20 66 75 6e 63  he printf() func
26190 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tion..*/.struct 
261a0 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20  PrintfArguments 
261b0 7b 0a 20 20 69 6e 74 20 6e 41 72 67 3b 20 20 20  {.  int nArg;   
261c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
261d0 54 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20  Total number of 
261e0 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 69  arguments */.  i
261f0 6e 74 20 6e 55 73 65 64 3b 20 20 20 20 20 20 20  nt nUsed;       
26200 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
26210 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 75  r of arguments u
26220 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  sed so far */.  
26230 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
26240 61 70 41 72 67 3b 20 20 20 2f 2a 20 54 68 65 20  apArg;   /* The 
26250 61 72 67 75 6d 65 6e 74 20 76 61 6c 75 65 73 20  argument values 
26260 2a 2f 0a 7d 3b 0a 0a 76 6f 69 64 20 73 71 6c 69  */.};..void sqli
26270 74 65 33 56 58 50 72 69 6e 74 66 28 53 74 72 41  te3VXPrintf(StrA
26280 63 63 75 6d 2a 2c 20 63 6f 6e 73 74 20 63 68 61  ccum*, const cha
26290 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 76 6f  r*, va_list);.vo
262a0 69 64 20 73 71 6c 69 74 65 33 58 50 72 69 6e 74  id sqlite3XPrint
262b0 66 28 53 74 72 41 63 63 75 6d 2a 2c 20 63 6f 6e  f(StrAccum*, con
262c0 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
262d0 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4d 50 72  char *sqlite3MPr
262e0 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f  intf(sqlite3*,co
262f0 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
26300 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 56 4d  .char *sqlite3VM
26310 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c  Printf(sqlite3*,
26320 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76 61 5f  const char*, va_
26330 6c 69 73 74 29 3b 0a 23 69 66 20 64 65 66 69 6e  list);.#if defin
26340 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
26350 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
26360 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41 43 45  TE_HAVE_OS_TRACE
26370 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ).  void sqlite3
26380 44 65 62 75 67 50 72 69 6e 74 66 28 63 6f 6e 73  DebugPrintf(cons
26390 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23  t char*, ...);.#
263a0 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
263b0 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 20  d(SQLITE_TEST). 
263c0 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 54 65   void *sqlite3Te
263d0 73 74 54 65 78 74 54 6f 50 74 72 28 63 6f 6e 73  stTextToPtr(cons
263e0 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66  t char*);.#endif
263f0 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ..#if defined(SQ
26400 4c 49 54 45 5f 44 45 42 55 47 29 0a 20 20 76 6f  LITE_DEBUG).  vo
26410 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69  id sqlite3TreeVi
26420 65 77 45 78 70 72 28 54 72 65 65 56 69 65 77 2a  ewExpr(TreeView*
26430 2c 20 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 75  , const Expr*, u
26440 38 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  8);.  void sqlit
26450 65 33 54 72 65 65 56 69 65 77 42 61 72 65 45 78  e3TreeViewBareEx
26460 70 72 4c 69 73 74 28 54 72 65 65 56 69 65 77 2a  prList(TreeView*
26470 2c 20 63 6f 6e 73 74 20 45 78 70 72 4c 69 73 74  , const ExprList
26480 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
26490 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54  .  void sqlite3T
264a0 72 65 65 56 69 65 77 45 78 70 72 4c 69 73 74 28  reeViewExprList(
264b0 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74  TreeView*, const
264c0 20 45 78 70 72 4c 69 73 74 2a 2c 20 75 38 2c 20   ExprList*, u8, 
264d0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
264e0 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65  void sqlite3Tree
264f0 56 69 65 77 53 65 6c 65 63 74 28 54 72 65 65 56  ViewSelect(TreeV
26500 69 65 77 2a 2c 20 63 6f 6e 73 74 20 53 65 6c 65  iew*, const Sele
26510 63 74 2a 2c 20 75 38 29 3b 0a 20 20 76 6f 69 64  ct*, u8);.  void
26520 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77   sqlite3TreeView
26530 57 69 74 68 28 54 72 65 65 56 69 65 77 2a 2c 20  With(TreeView*, 
26540 63 6f 6e 73 74 20 57 69 74 68 2a 2c 20 75 38 29  const With*, u8)
26550 3b 0a 23 65 6e 64 69 66 0a 0a 0a 76 6f 69 64 20  ;.#endif...void 
26560 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
26570 28 63 68 61 72 20 2a 2a 2c 20 73 71 6c 69 74 65  (char **, sqlite
26580 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  3*, const char*)
26590 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72  ;.void sqlite3Er
265a0 72 6f 72 4d 73 67 28 50 61 72 73 65 2a 2c 20 63  rorMsg(Parse*, c
265b0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
265c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
265d0 71 75 6f 74 65 28 63 68 61 72 2a 29 3b 0a 76 6f  quote(char*);.vo
265e0 69 64 20 73 71 6c 69 74 65 33 54 6f 6b 65 6e 49  id sqlite3TokenI
265f0 6e 69 74 28 54 6f 6b 65 6e 2a 2c 63 68 61 72 2a  nit(Token*,char*
26600 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b 65  );.int sqlite3Ke
26610 79 77 6f 72 64 43 6f 64 65 28 63 6f 6e 73 74 20  ywordCode(const 
26620 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20  unsigned char*, 
26630 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
26640 33 52 75 6e 50 61 72 73 65 72 28 50 61 72 73 65  3RunParser(Parse
26650 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
26660 63 68 61 72 20 2a 2a 29 3b 0a 76 6f 69 64 20 73  char **);.void s
26670 71 6c 69 74 65 33 46 69 6e 69 73 68 43 6f 64 69  qlite3FinishCodi
26680 6e 67 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20  ng(Parse*);.int 
26690 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52 65  sqlite3GetTempRe
266a0 67 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  g(Parse*);.void 
266b0 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65  sqlite3ReleaseTe
266c0 6d 70 52 65 67 28 50 61 72 73 65 2a 2c 69 6e 74  mpReg(Parse*,int
266d0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
266e0 74 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65  tTempRange(Parse
266f0 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
26700 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52  ite3ReleaseTempR
26710 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c  ange(Parse*,int,
26720 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
26730 65 33 43 6c 65 61 72 54 65 6d 70 52 65 67 43 61  e3ClearTempRegCa
26740 63 68 65 28 50 61 72 73 65 2a 29 3b 0a 23 69 66  che(Parse*);.#if
26750 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
26760 0a 69 6e 74 20 73 71 6c 69 74 65 33 4e 6f 54 65  .int sqlite3NoTe
26770 6d 70 73 49 6e 52 61 6e 67 65 28 50 61 72 73 65  mpsInRange(Parse
26780 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 23 65 6e 64  *,int,int);.#end
26790 69 66 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  if.Expr *sqlite3
267a0 45 78 70 72 41 6c 6c 6f 63 28 73 71 6c 69 74 65  ExprAlloc(sqlite
267b0 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b  3*,int,const Tok
267c0 65 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a  en*,int);.Expr *
267d0 73 71 6c 69 74 65 33 45 78 70 72 28 73 71 6c 69  sqlite3Expr(sqli
267e0 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  te3*,int,const c
267f0 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
26800 74 65 33 45 78 70 72 41 74 74 61 63 68 53 75 62  te3ExprAttachSub
26810 74 72 65 65 73 28 73 71 6c 69 74 65 33 2a 2c 45  trees(sqlite3*,E
26820 78 70 72 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a  xpr*,Expr*,Expr*
26830 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
26840 50 45 78 70 72 28 50 61 72 73 65 2a 2c 20 69 6e  PExpr(Parse*, in
26850 74 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 29  t, Expr*, Expr*)
26860 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 45  ;.void sqlite3PE
26870 78 70 72 41 64 64 53 65 6c 65 63 74 28 50 61 72  xprAddSelect(Par
26880 73 65 2a 2c 20 45 78 70 72 2a 2c 20 53 65 6c 65  se*, Expr*, Sele
26890 63 74 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  ct*);.Expr *sqli
268a0 74 65 33 45 78 70 72 41 6e 64 28 73 71 6c 69 74  te3ExprAnd(sqlit
268b0 65 33 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a  e3*,Expr*, Expr*
268c0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
268d0 45 78 70 72 46 75 6e 63 74 69 6f 6e 28 50 61 72  ExprFunction(Par
268e0 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 54  se*,ExprList*, T
268f0 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
26900 69 74 65 33 45 78 70 72 41 73 73 69 67 6e 56 61  ite3ExprAssignVa
26910 72 4e 75 6d 62 65 72 28 50 61 72 73 65 2a 2c 20  rNumber(Parse*, 
26920 45 78 70 72 2a 2c 20 75 33 32 29 3b 0a 76 6f 69  Expr*, u32);.voi
26930 64 20 73 71 6c 69 74 65 33 45 78 70 72 44 65 6c  d sqlite3ExprDel
26940 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78  ete(sqlite3*, Ex
26950 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a  pr*);.ExprList *
26960 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 41  sqlite3ExprListA
26970 70 70 65 6e 64 28 50 61 72 73 65 2a 2c 45 78 70  ppend(Parse*,Exp
26980 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 45  rList*,Expr*);.E
26990 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  xprList *sqlite3
269a0 45 78 70 72 4c 69 73 74 41 70 70 65 6e 64 56 65  ExprListAppendVe
269b0 63 74 6f 72 28 50 61 72 73 65 2a 2c 45 78 70 72  ctor(Parse*,Expr
269c0 4c 69 73 74 2a 2c 49 64 4c 69 73 74 2a 2c 45 78  List*,IdList*,Ex
269d0 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
269e0 65 33 45 78 70 72 4c 69 73 74 53 65 74 53 6f 72  e3ExprListSetSor
269f0 74 4f 72 64 65 72 28 45 78 70 72 4c 69 73 74 2a  tOrder(ExprList*
26a00 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
26a10 74 65 33 45 78 70 72 4c 69 73 74 53 65 74 4e 61  te3ExprListSetNa
26a20 6d 65 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  me(Parse*,ExprLi
26a30 73 74 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b  st*,Token*,int);
26a40 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
26a50 72 4c 69 73 74 53 65 74 53 70 61 6e 28 50 61 72  rListSetSpan(Par
26a60 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78  se*,ExprList*,Ex
26a70 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73  prSpan*);.void s
26a80 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44 65  qlite3ExprListDe
26a90 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45  lete(sqlite3*, E
26aa0 78 70 72 4c 69 73 74 2a 29 3b 0a 75 33 32 20 73  xprList*);.u32 s
26ab0 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 46 6c  qlite3ExprListFl
26ac0 61 67 73 28 63 6f 6e 73 74 20 45 78 70 72 4c 69  ags(const ExprLi
26ad0 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
26ae0 33 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20  3Init(sqlite3*, 
26af0 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c  char**);.int sql
26b00 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b  ite3InitCallback
26b10 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 68 61  (void*, int, cha
26b20 72 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 76 6f  r**, char**);.vo
26b30 69 64 20 73 71 6c 69 74 65 33 50 72 61 67 6d 61  id sqlite3Pragma
26b40 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
26b50 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74  oken*,Token*,int
26b60 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
26b70 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
26b80 42 4c 45 0a 4d 6f 64 75 6c 65 20 2a 73 71 6c 69  BLE.Module *sqli
26b90 74 65 33 50 72 61 67 6d 61 56 74 61 62 52 65 67  te3PragmaVtabReg
26ba0 69 73 74 65 72 28 73 71 6c 69 74 65 33 2a 2c 63  ister(sqlite3*,c
26bb0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65  onst char *zName
26bc0 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  );.#endif.void s
26bd0 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63  qlite3ResetAllSc
26be0 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f  hemasOfConnectio
26bf0 6e 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  n(sqlite3*);.voi
26c00 64 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e  d sqlite3ResetOn
26c10 65 53 63 68 65 6d 61 28 73 71 6c 69 74 65 33 2a  eSchema(sqlite3*
26c20 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
26c30 74 65 33 43 6f 6c 6c 61 70 73 65 44 61 74 61 62  te3CollapseDatab
26c40 61 73 65 41 72 72 61 79 28 73 71 6c 69 74 65 33  aseArray(sqlite3
26c50 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
26c60 43 6f 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68  CommitInternalCh
26c70 61 6e 67 65 73 28 73 71 6c 69 74 65 33 2a 29 3b  anges(sqlite3*);
26c80 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c  .void sqlite3Del
26c90 65 74 65 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 73  eteColumnNames(s
26ca0 71 6c 69 74 65 33 2a 2c 54 61 62 6c 65 2a 29 3b  qlite3*,Table*);
26cb0 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 6c 75  .int sqlite3Colu
26cc0 6d 6e 73 46 72 6f 6d 45 78 70 72 4c 69 73 74 28  mnsFromExprList(
26cd0 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
26ce0 2c 69 31 36 2a 2c 43 6f 6c 75 6d 6e 2a 2a 29 3b  ,i16*,Column**);
26cf0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c  .void sqlite3Sel
26d00 65 63 74 41 64 64 43 6f 6c 75 6d 6e 54 79 70 65  ectAddColumnType
26d10 41 6e 64 43 6f 6c 6c 61 74 69 6f 6e 28 50 61 72  AndCollation(Par
26d20 73 65 2a 2c 54 61 62 6c 65 2a 2c 53 65 6c 65 63  se*,Table*,Selec
26d30 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69  t*);.Table *sqli
26d40 74 65 33 52 65 73 75 6c 74 53 65 74 4f 66 53 65  te3ResultSetOfSe
26d50 6c 65 63 74 28 50 61 72 73 65 2a 2c 53 65 6c 65  lect(Parse*,Sele
26d60 63 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ct*);.void sqlit
26d70 65 33 4f 70 65 6e 4d 61 73 74 65 72 54 61 62 6c  e3OpenMasterTabl
26d80 65 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 29 3b  e(Parse *, int);
26d90 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 50  .Index *sqlite3P
26da0 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 54  rimaryKeyIndex(T
26db0 61 62 6c 65 2a 29 3b 0a 69 31 36 20 73 71 6c 69  able*);.i16 sqli
26dc0 74 65 33 43 6f 6c 75 6d 6e 4f 66 49 6e 64 65 78  te3ColumnOfIndex
26dd0 28 49 6e 64 65 78 2a 2c 20 69 31 36 29 3b 0a 76  (Index*, i16);.v
26de0 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 72 74  oid sqlite3Start
26df0 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b  Table(Parse*,Tok
26e00 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69  en*,Token*,int,i
26e10 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 23 69 66  nt,int,int);.#if
26e20 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48   SQLITE_ENABLE_H
26e30 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 0a 20 20  IDDEN_COLUMNS.  
26e40 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 75  void sqlite3Colu
26e50 6d 6e 50 72 6f 70 65 72 74 69 65 73 46 72 6f 6d  mnPropertiesFrom
26e60 4e 61 6d 65 28 54 61 62 6c 65 2a 2c 20 43 6f 6c  Name(Table*, Col
26e70 75 6d 6e 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  umn*);.#else.# d
26e80 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6c  efine sqlite3Col
26e90 75 6d 6e 50 72 6f 70 65 72 74 69 65 73 46 72 6f  umnPropertiesFro
26ea0 6d 4e 61 6d 65 28 54 2c 43 29 20 2f 2a 20 6e 6f  mName(T,C) /* no
26eb0 2d 6f 70 20 2a 2f 0a 23 65 6e 64 69 66 0a 76 6f  -op */.#endif.vo
26ec0 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c  id sqlite3AddCol
26ed0 75 6d 6e 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  umn(Parse*,Token
26ee0 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  *,Token*);.void 
26ef0 73 71 6c 69 74 65 33 41 64 64 4e 6f 74 4e 75 6c  sqlite3AddNotNul
26f00 6c 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  l(Parse*, int);.
26f10 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 50  void sqlite3AddP
26f20 72 69 6d 61 72 79 4b 65 79 28 50 61 72 73 65 2a  rimaryKey(Parse*
26f30 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
26f40 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
26f50 64 20 73 71 6c 69 74 65 33 41 64 64 43 68 65 63  d sqlite3AddChec
26f60 6b 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73  kConstraint(Pars
26f70 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  e*, Expr*);.void
26f80 20 73 71 6c 69 74 65 33 41 64 64 44 65 66 61 75   sqlite3AddDefau
26f90 6c 74 56 61 6c 75 65 28 50 61 72 73 65 2a 2c 45  ltValue(Parse*,E
26fa0 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20  xprSpan*);.void 
26fb0 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 6c 61 74  sqlite3AddCollat
26fc0 65 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f  eType(Parse*, To
26fd0 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
26fe0 74 65 33 45 6e 64 54 61 62 6c 65 28 50 61 72 73  te3EndTable(Pars
26ff0 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
27000 2c 75 38 2c 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  ,u8,Select*);.in
27010 74 20 73 71 6c 69 74 65 33 50 61 72 73 65 55 72  t sqlite3ParseUr
27020 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  i(const char*,co
27030 6e 73 74 20 63 68 61 72 2a 2c 75 6e 73 69 67 6e  nst char*,unsign
27040 65 64 20 69 6e 74 2a 2c 0a 20 20 20 20 20 20 20  ed int*,.       
27050 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c               sql
27060 69 74 65 33 5f 76 66 73 2a 2a 2c 63 68 61 72 2a  ite3_vfs**,char*
27070 2a 2c 63 68 61 72 20 2a 2a 29 3b 0a 42 74 72 65  *,char **);.Btre
27080 65 20 2a 73 71 6c 69 74 65 33 44 62 4e 61 6d 65  e *sqlite3DbName
27090 54 6f 42 74 72 65 65 28 73 71 6c 69 74 65 33 2a  ToBtree(sqlite3*
270a0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 0a  ,const char*);..
270b0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 4e  #ifdef SQLITE_UN
270c0 54 45 53 54 41 42 4c 45 0a 23 20 64 65 66 69 6e  TESTABLE.# defin
270d0 65 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69  e sqlite3FaultSi
270e0 6d 28 58 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23  m(X) SQLITE_OK.#
270f0 65 6c 73 65 0a 20 20 69 6e 74 20 73 71 6c 69 74  else.  int sqlit
27100 65 33 46 61 75 6c 74 53 69 6d 28 69 6e 74 29 3b  e3FaultSim(int);
27110 0a 23 65 6e 64 69 66 0a 0a 42 69 74 76 65 63 20  .#endif..Bitvec 
27120 2a 73 71 6c 69 74 65 33 42 69 74 76 65 63 43 72  *sqlite3BitvecCr
27130 65 61 74 65 28 75 33 32 29 3b 0a 69 6e 74 20 73  eate(u32);.int s
27140 71 6c 69 74 65 33 42 69 74 76 65 63 54 65 73 74  qlite3BitvecTest
27150 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a  (Bitvec*, u32);.
27160 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65  int sqlite3Bitve
27170 63 54 65 73 74 4e 6f 74 4e 75 6c 6c 28 42 69 74  cTestNotNull(Bit
27180 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20  vec*, u32);.int 
27190 73 71 6c 69 74 65 33 42 69 74 76 65 63 53 65 74  sqlite3BitvecSet
271a0 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a  (Bitvec*, u32);.
271b0 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74 76  void sqlite3Bitv
271c0 65 63 43 6c 65 61 72 28 42 69 74 76 65 63 2a 2c  ecClear(Bitvec*,
271d0 20 75 33 32 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f   u32, void*);.vo
271e0 69 64 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  id sqlite3Bitvec
271f0 44 65 73 74 72 6f 79 28 42 69 74 76 65 63 2a 29  Destroy(Bitvec*)
27200 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 42 69 74  ;.u32 sqlite3Bit
27210 76 65 63 53 69 7a 65 28 42 69 74 76 65 63 2a 29  vecSize(Bitvec*)
27220 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
27230 5f 55 4e 54 45 53 54 41 42 4c 45 0a 69 6e 74 20  _UNTESTABLE.int 
27240 73 71 6c 69 74 65 33 42 69 74 76 65 63 42 75 69  sqlite3BitvecBui
27250 6c 74 69 6e 54 65 73 74 28 69 6e 74 2c 69 6e 74  ltinTest(int,int
27260 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 52 6f 77 53  *);.#endif..RowS
27270 65 74 20 2a 73 71 6c 69 74 65 33 52 6f 77 53 65  et *sqlite3RowSe
27280 74 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20  tInit(sqlite3*, 
27290 76 6f 69 64 2a 2c 20 75 6e 73 69 67 6e 65 64 20  void*, unsigned 
272a0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
272b0 65 33 52 6f 77 53 65 74 43 6c 65 61 72 28 52 6f  e3RowSetClear(Ro
272c0 77 53 65 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  wSet*);.void sql
272d0 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74  ite3RowSetInsert
272e0 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 29 3b 0a  (RowSet*, i64);.
272f0 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53 65  int sqlite3RowSe
27300 74 54 65 73 74 28 52 6f 77 53 65 74 2a 2c 20 69  tTest(RowSet*, i
27310 6e 74 20 69 42 61 74 63 68 2c 20 69 36 34 29 3b  nt iBatch, i64);
27320 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53  .int sqlite3RowS
27330 65 74 4e 65 78 74 28 52 6f 77 53 65 74 2a 2c 20  etNext(RowSet*, 
27340 69 36 34 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c  i64*);..void sql
27350 69 74 65 33 43 72 65 61 74 65 56 69 65 77 28 50  ite3CreateView(P
27360 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
27370 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c  en*,Token*,ExprL
27380 69 73 74 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74  ist*,Select*,int
27390 2c 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66  ,int);..#if !def
273a0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
273b0 5f 56 49 45 57 29 20 7c 7c 20 21 64 65 66 69 6e  _VIEW) || !defin
273c0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
273d0 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 20 20 69  IRTUALTABLE).  i
273e0 6e 74 20 73 71 6c 69 74 65 33 56 69 65 77 47 65  nt sqlite3ViewGe
273f0 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50 61 72  tColumnNames(Par
27400 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c  se*,Table*);.#el
27410 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
27420 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e  te3ViewGetColumn
27430 4e 61 6d 65 73 28 41 2c 42 29 20 30 0a 23 65 6e  Names(A,B) 0.#en
27440 64 69 66 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f  dif..#if SQLITE_
27450 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a  MAX_ATTACHED>30.
27460 20 20 69 6e 74 20 73 71 6c 69 74 65 33 44 62 4d    int sqlite3DbM
27470 61 73 6b 41 6c 6c 5a 65 72 6f 28 79 44 62 4d 61  askAllZero(yDbMa
27480 73 6b 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64  sk);.#endif.void
27490 20 73 71 6c 69 74 65 33 44 72 6f 70 54 61 62 6c   sqlite3DropTabl
274a0 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  e(Parse*, SrcLis
274b0 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  t*, int, int);.v
274c0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 44  oid sqlite3CodeD
274d0 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ropTable(Parse*,
274e0 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
274f0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
27500 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69  DeleteTable(sqli
27510 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23  te3*, Table*);.#
27520 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
27530 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  IT_AUTOINCREMENT
27540 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
27550 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69  utoincrementBegi
27560 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29  n(Parse *pParse)
27570 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
27580 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64  AutoincrementEnd
27590 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b  (Parse *pParse);
275a0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
275b0 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65  sqlite3Autoincre
275c0 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a 23 20 64  mentBegin(X).# d
275d0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
275e0 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 58 29  oincrementEnd(X)
275f0 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
27600 69 74 65 33 49 6e 73 65 72 74 28 50 61 72 73 65  ite3Insert(Parse
27610 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 53 65 6c  *, SrcList*, Sel
27620 65 63 74 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 69  ect*, IdList*, i
27630 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  nt);.void *sqlit
27640 65 33 41 72 72 61 79 41 6c 6c 6f 63 61 74 65 28  e3ArrayAllocate(
27650 73 71 6c 69 74 65 33 2a 2c 76 6f 69 64 2a 2c 69  sqlite3*,void*,i
27660 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49  nt,int*,int*);.I
27670 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64  dList *sqlite3Id
27680 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74  ListAppend(sqlit
27690 65 33 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 54 6f  e3*, IdList*, To
276a0 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
276b0 65 33 49 64 4c 69 73 74 49 6e 64 65 78 28 49 64  e3IdListIndex(Id
276c0 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72  List*,const char
276d0 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c  *);.SrcList *sql
276e0 69 74 65 33 53 72 63 4c 69 73 74 45 6e 6c 61 72  ite3SrcListEnlar
276f0 67 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63  ge(sqlite3*, Src
27700 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  List*, int, int)
27710 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74  ;.SrcList *sqlit
27720 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64 28  e3SrcListAppend(
27730 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73  sqlite3*, SrcLis
27740 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  t*, Token*, Toke
27750 6e 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71  n*);.SrcList *sq
27760 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70 70 65  lite3SrcListAppe
27770 6e 64 46 72 6f 6d 54 65 72 6d 28 50 61 72 73 65  ndFromTerm(Parse
27780 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b  *, SrcList*, Tok
27790 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20  en*, Token*,.   
277a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
277b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
277c0 20 20 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65 63     Token*, Selec
277d0 74 2a 2c 20 45 78 70 72 2a 2c 20 49 64 4c 69 73  t*, Expr*, IdLis
277e0 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
277f0 33 53 72 63 4c 69 73 74 49 6e 64 65 78 65 64 42  3SrcListIndexedB
27800 79 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69  y(Parse *, SrcLi
27810 73 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a  st *, Token *);.
27820 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c  void sqlite3SrcL
27830 69 73 74 46 75 6e 63 41 72 67 73 28 50 61 72 73  istFuncArgs(Pars
27840 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78  e*, SrcList*, Ex
27850 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
27860 6c 69 74 65 33 49 6e 64 65 78 65 64 42 79 4c 6f  lite3IndexedByLo
27870 6f 6b 75 70 28 50 61 72 73 65 20 2a 2c 20 73 74  okup(Parse *, st
27880 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65  ruct SrcList_ite
27890 6d 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  m *);.void sqlit
278a0 65 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f  e3SrcListShiftJo
278b0 69 6e 54 79 70 65 28 53 72 63 4c 69 73 74 2a 29  inType(SrcList*)
278c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72  ;.void sqlite3Sr
278d0 63 4c 69 73 74 41 73 73 69 67 6e 43 75 72 73 6f  cListAssignCurso
278e0 72 73 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  rs(Parse*, SrcLi
278f0 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
27900 65 33 49 64 4c 69 73 74 44 65 6c 65 74 65 28 73  e3IdListDelete(s
27910 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a  qlite3*, IdList*
27920 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
27930 72 63 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c  rcListDelete(sql
27940 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 29  ite3*, SrcList*)
27950 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33  ;.Index *sqlite3
27960 41 6c 6c 6f 63 61 74 65 49 6e 64 65 78 4f 62 6a  AllocateIndexObj
27970 65 63 74 28 73 71 6c 69 74 65 33 2a 2c 69 31 36  ect(sqlite3*,i16
27980 2c 69 6e 74 2c 63 68 61 72 2a 2a 29 3b 0a 76 6f  ,int,char**);.vo
27990 69 64 20 73 71 6c 69 74 65 33 43 72 65 61 74 65  id sqlite3Create
279a0 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 6f 6b  Index(Parse*,Tok
279b0 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63 4c 69  en*,Token*,SrcLi
279c0 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e  st*,ExprList*,in
279d0 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20  t,Token*,.      
279e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
279f0 20 20 20 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20      Expr*, int, 
27a00 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73  int, u8);.void s
27a10 71 6c 69 74 65 33 44 72 6f 70 49 6e 64 65 78 28  qlite3DropIndex(
27a20 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
27a30 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
27a40 74 65 33 53 65 6c 65 63 74 28 50 61 72 73 65 2a  te3Select(Parse*
27a50 2c 20 53 65 6c 65 63 74 2a 2c 20 53 65 6c 65 63  , Select*, Selec
27a60 74 44 65 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20  tDest*);.Select 
27a70 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74 4e 65  *sqlite3SelectNe
27a80 77 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73  w(Parse*,ExprLis
27a90 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72  t*,SrcList*,Expr
27aa0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 0a 20 20 20  *,ExprList*,.   
27ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ac0 20 20 20 20 20 20 45 78 70 72 2a 2c 45 78 70 72        Expr*,Expr
27ad0 4c 69 73 74 2a 2c 75 33 32 2c 45 78 70 72 2a 2c  List*,u32,Expr*,
27ae0 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
27af0 69 74 65 33 53 65 6c 65 63 74 44 65 6c 65 74 65  ite3SelectDelete
27b00 28 73 71 6c 69 74 65 33 2a 2c 20 53 65 6c 65 63  (sqlite3*, Selec
27b10 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69  t*);.Table *sqli
27b20 74 65 33 53 72 63 4c 69 73 74 4c 6f 6f 6b 75 70  te3SrcListLookup
27b30 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
27b40 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
27b50 73 52 65 61 64 4f 6e 6c 79 28 50 61 72 73 65 2a  sReadOnly(Parse*
27b60 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a  , Table*, int);.
27b70 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e  void sqlite3Open
27b80 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 69 6e  Table(Parse*, in
27b90 74 20 69 43 75 72 2c 20 69 6e 74 20 69 44 62 2c  t iCur, int iDb,
27ba0 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23   Table*, int);.#
27bb0 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
27bc0 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f  E_ENABLE_UPDATE_
27bd0 44 45 4c 45 54 45 5f 4c 49 4d 49 54 29 20 26 26  DELETE_LIMIT) &&
27be0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
27bf0 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52 59 29 0a  _OMIT_SUBQUERY).
27c00 45 78 70 72 20 2a 73 71 6c 69 74 65 33 4c 69 6d  Expr *sqlite3Lim
27c10 69 74 57 68 65 72 65 28 50 61 72 73 65 2a 2c 53  itWhere(Parse*,S
27c20 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78  rcList*,Expr*,Ex
27c30 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78  prList*,Expr*,Ex
27c40 70 72 2a 2c 63 68 61 72 2a 29 3b 0a 23 65 6e 64  pr*,char*);.#end
27c50 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  if.void sqlite3D
27c60 65 6c 65 74 65 46 72 6f 6d 28 50 61 72 73 65 2a  eleteFrom(Parse*
27c70 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72  , SrcList*, Expr
27c80 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
27c90 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c 20 53  Update(Parse*, S
27ca0 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73  rcList*, ExprLis
27cb0 74 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  t*, Expr*, int);
27cc0 0a 57 68 65 72 65 49 6e 66 6f 20 2a 73 71 6c 69  .WhereInfo *sqli
27cd0 74 65 33 57 68 65 72 65 42 65 67 69 6e 28 50 61  te3WhereBegin(Pa
27ce0 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78  rse*,SrcList*,Ex
27cf0 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78  pr*,ExprList*,Ex
27d00 70 72 4c 69 73 74 2a 2c 75 31 36 2c 69 6e 74 29  prList*,u16,int)
27d10 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 68  ;.void sqlite3Wh
27d20 65 72 65 45 6e 64 28 57 68 65 72 65 49 6e 66 6f  ereEnd(WhereInfo
27d30 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74  *);.LogEst sqlit
27d40 65 33 57 68 65 72 65 4f 75 74 70 75 74 52 6f 77  e3WhereOutputRow
27d50 43 6f 75 6e 74 28 57 68 65 72 65 49 6e 66 6f 2a  Count(WhereInfo*
27d60 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
27d70 65 72 65 49 73 44 69 73 74 69 6e 63 74 28 57 68  ereIsDistinct(Wh
27d80 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
27d90 71 6c 69 74 65 33 57 68 65 72 65 49 73 4f 72 64  qlite3WhereIsOrd
27da0 65 72 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29  ered(WhereInfo*)
27db0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
27dc0 72 65 4f 72 64 65 72 65 64 49 6e 6e 65 72 4c 6f  reOrderedInnerLo
27dd0 6f 70 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  op(WhereInfo*);.
27de0 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
27df0 49 73 53 6f 72 74 65 64 28 57 68 65 72 65 49 6e  IsSorted(WhereIn
27e00 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  fo*);.int sqlite
27e10 33 57 68 65 72 65 43 6f 6e 74 69 6e 75 65 4c 61  3WhereContinueLa
27e20 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  bel(WhereInfo*);
27e30 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
27e40 65 42 72 65 61 6b 4c 61 62 65 6c 28 57 68 65 72  eBreakLabel(Wher
27e50 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
27e60 69 74 65 33 57 68 65 72 65 4f 6b 4f 6e 65 50 61  ite3WhereOkOnePa
27e70 73 73 28 57 68 65 72 65 49 6e 66 6f 2a 2c 20 69  ss(WhereInfo*, i
27e80 6e 74 2a 29 3b 0a 23 64 65 66 69 6e 65 20 4f 4e  nt*);.#define ON
27e90 45 50 41 53 53 5f 4f 46 46 20 20 20 20 20 20 30  EPASS_OFF      0
27ea0 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 6f          /* Use o
27eb0 66 20 4f 4e 45 50 41 53 53 20 6e 6f 74 20 61 6c  f ONEPASS not al
27ec0 6c 6f 77 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  lowed */.#define
27ed0 20 4f 4e 45 50 41 53 53 5f 53 49 4e 47 4c 45 20   ONEPASS_SINGLE 
27ee0 20 20 31 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e    1        /* ON
27ef0 45 50 41 53 53 20 76 61 6c 69 64 20 66 6f 72 20  EPASS valid for 
27f00 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 75 70 64  a single row upd
27f10 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ate */.#define O
27f20 4e 45 50 41 53 53 5f 4d 55 4c 54 49 20 20 20 20  NEPASS_MULTI    
27f30 32 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 45 50  2        /* ONEP
27f40 41 53 53 20 69 73 20 76 61 6c 69 64 20 66 6f 72  ASS is valid for
27f50 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a   multiple rows *
27f60 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  /.void sqlite3Ex
27f70 70 72 43 6f 64 65 4c 6f 61 64 49 6e 64 65 78 43  prCodeLoadIndexC
27f80 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 49 6e  olumn(Parse*, In
27f90 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  dex*, int, int, 
27fa0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
27fb0 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75  3ExprCodeGetColu
27fc0 6d 6e 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  mn(Parse*, Table
27fd0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
27fe0 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69  , u8);.void sqli
27ff0 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f  te3ExprCodeGetCo
28000 6c 75 6d 6e 54 6f 52 65 67 28 50 61 72 73 65 2a  lumnToReg(Parse*
28010 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
28020 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
28030 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65  qlite3ExprCodeGe
28040 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 56  tColumnOfTable(V
28050 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  dbe*, Table*, in
28060 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
28070 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
28080 64 65 4d 6f 76 65 28 50 61 72 73 65 2a 2c 20 69  deMove(Parse*, i
28090 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
280a0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
280b0 61 63 68 65 53 74 6f 72 65 28 50 61 72 73 65 2a  acheStore(Parse*
280c0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
280d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
280e0 70 72 43 61 63 68 65 50 75 73 68 28 50 61 72 73  prCachePush(Pars
280f0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
28100 33 45 78 70 72 43 61 63 68 65 50 6f 70 28 50 61  3ExprCachePop(Pa
28110 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
28120 74 65 33 45 78 70 72 43 61 63 68 65 52 65 6d 6f  te3ExprCacheRemo
28130 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  ve(Parse*, int, 
28140 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
28150 65 33 45 78 70 72 43 61 63 68 65 43 6c 65 61 72  e3ExprCacheClear
28160 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
28170 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 41  qlite3ExprCacheA
28180 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28 50 61  ffinityChange(Pa
28190 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  rse*, int, int);
281a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
281b0 72 43 6f 64 65 28 50 61 72 73 65 2a 2c 20 45 78  rCode(Parse*, Ex
281c0 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  pr*, int);.void 
281d0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 43  sqlite3ExprCodeC
281e0 6f 70 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72  opy(Parse*, Expr
281f0 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
28200 6c 69 74 65 33 45 78 70 72 43 6f 64 65 46 61 63  lite3ExprCodeFac
28210 74 6f 72 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  torable(Parse*, 
28220 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  Expr*, int);.int
28230 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
28240 41 74 49 6e 69 74 28 50 61 72 73 65 2a 2c 20 45  AtInit(Parse*, E
28250 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  xpr*, int);.int 
28260 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54  sqlite3ExprCodeT
28270 65 6d 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72  emp(Parse*, Expr
28280 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71  *, int*);.int sq
28290 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54 61 72  lite3ExprCodeTar
282a0 67 65 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72  get(Parse*, Expr
282b0 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
282c0 6c 69 74 65 33 45 78 70 72 43 6f 64 65 41 6e 64  lite3ExprCodeAnd
282d0 43 61 63 68 65 28 50 61 72 73 65 2a 2c 20 45 78  Cache(Parse*, Ex
282e0 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  pr*, int);.int s
282f0 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 45 78  qlite3ExprCodeEx
28300 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 20 45  prList(Parse*, E
28310 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69  xprList*, int, i
28320 6e 74 2c 20 75 38 29 3b 0a 23 64 65 66 69 6e 65  nt, u8);.#define
28330 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 44 55 50   SQLITE_ECEL_DUP
28340 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20 44        0x01  /* D
28350 65 65 70 2c 20 6e 6f 74 20 73 68 61 6c 6c 6f 77  eep, not shallow
28360 20 63 6f 70 69 65 73 20 2a 2f 0a 23 64 65 66 69   copies */.#defi
28370 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 46  ne SQLITE_ECEL_F
28380 41 43 54 4f 52 20 20 20 30 78 30 32 20 20 2f 2a  ACTOR   0x02  /*
28390 20 46 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73   Factor out cons
283a0 74 61 6e 74 20 74 65 72 6d 73 20 2a 2f 0a 23 64  tant terms */.#d
283b0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45  efine SQLITE_ECE
283c0 4c 5f 52 45 46 20 20 20 20 20 20 30 78 30 34 20  L_REF      0x04 
283d0 20 2f 2a 20 55 73 65 20 45 78 70 72 4c 69 73 74   /* Use ExprList
283e0 2e 75 2e 78 2e 69 4f 72 64 65 72 42 79 43 6f 6c  .u.x.iOrderByCol
283f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
28400 54 45 5f 45 43 45 4c 5f 4f 4d 49 54 52 45 46 20  TE_ECEL_OMITREF 
28410 20 30 78 30 38 20 20 2f 2a 20 4f 6d 69 74 20 69   0x08  /* Omit i
28420 66 20 45 78 70 72 4c 69 73 74 2e 75 2e 78 2e 69  f ExprList.u.x.i
28430 4f 72 64 65 72 42 79 43 6f 6c 20 2a 2f 0a 76 6f  OrderByCol */.vo
28440 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66  id sqlite3ExprIf
28450 54 72 75 65 28 50 61 72 73 65 2a 2c 20 45 78 70  True(Parse*, Exp
28460 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  r*, int, int);.v
28470 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 49  oid sqlite3ExprI
28480 66 46 61 6c 73 65 28 50 61 72 73 65 2a 2c 20 45  fFalse(Parse*, E
28490 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  xpr*, int, int);
284a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
284b0 72 49 66 46 61 6c 73 65 44 75 70 28 50 61 72 73  rIfFalseDup(Pars
284c0 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20  e*, Expr*, int, 
284d0 69 6e 74 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c  int);.Table *sql
284e0 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 73 71  ite3FindTable(sq
284f0 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
28500 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
28510 3b 0a 23 64 65 66 69 6e 65 20 4c 4f 43 41 54 45  ;.#define LOCATE
28520 5f 56 49 45 57 20 20 20 20 30 78 30 31 0a 23 64  _VIEW    0x01.#d
28530 65 66 69 6e 65 20 4c 4f 43 41 54 45 5f 4e 4f 45  efine LOCATE_NOE
28540 52 52 20 20 20 30 78 30 32 0a 54 61 62 6c 65 20  RR   0x02.Table 
28550 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61  *sqlite3LocateTa
28560 62 6c 65 28 50 61 72 73 65 2a 2c 75 33 32 20 66  ble(Parse*,u32 f
28570 6c 61 67 73 2c 63 6f 6e 73 74 20 63 68 61 72 2a  lags,const char*
28580 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
28590 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f  Table *sqlite3Lo
285a0 63 61 74 65 54 61 62 6c 65 49 74 65 6d 28 50 61  cateTableItem(Pa
285b0 72 73 65 2a 2c 75 33 32 20 66 6c 61 67 73 2c 73  rse*,u32 flags,s
285c0 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74  truct SrcList_it
285d0 65 6d 20 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71  em *);.Index *sq
285e0 6c 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28 73  lite3FindIndex(s
285f0 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
28600 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
28610 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
28620 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61  nlinkAndDeleteTa
28630 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  ble(sqlite3*,int
28640 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  ,const char*);.v
28650 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  oid sqlite3Unlin
28660 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28  kAndDeleteIndex(
28670 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e  sqlite3*,int,con
28680 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
28690 73 71 6c 69 74 65 33 56 61 63 75 75 6d 28 50 61  sqlite3Vacuum(Pa
286a0 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  rse*,Token*);.in
286b0 74 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75  t sqlite3RunVacu
286c0 75 6d 28 63 68 61 72 2a 2a 2c 20 73 71 6c 69 74  um(char**, sqlit
286d0 65 33 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20  e3*, int);.char 
286e0 2a 73 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d  *sqlite3NameFrom
286f0 54 6f 6b 65 6e 28 73 71 6c 69 74 65 33 2a 2c 20  Token(sqlite3*, 
28700 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
28710 69 74 65 33 45 78 70 72 43 6f 6d 70 61 72 65 28  ite3ExprCompare(
28720 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 20 45 78  Parse*,Expr*, Ex
28730 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  pr*, int);.int s
28740 71 6c 69 74 65 33 45 78 70 72 43 6f 6d 70 61 72  qlite3ExprCompar
28750 65 53 6b 69 70 28 45 78 70 72 2a 2c 20 45 78 70  eSkip(Expr*, Exp
28760 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  r*, int);.int sq
28770 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43 6f 6d  lite3ExprListCom
28780 70 61 72 65 28 45 78 70 72 4c 69 73 74 2a 2c 20  pare(ExprList*, 
28790 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b  ExprList*, int);
287a0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
287b0 49 6d 70 6c 69 65 73 45 78 70 72 28 50 61 72 73  ImpliesExpr(Pars
287c0 65 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c  e*,Expr*, Expr*,
287d0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
287e0 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67  te3ExprAnalyzeAg
287f0 67 72 65 67 61 74 65 73 28 4e 61 6d 65 43 6f 6e  gregates(NameCon
28800 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  text*, Expr*);.v
28810 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41  oid sqlite3ExprA
28820 6e 61 6c 79 7a 65 41 67 67 4c 69 73 74 28 4e 61  nalyzeAggList(Na
28830 6d 65 43 6f 6e 74 65 78 74 2a 2c 45 78 70 72 4c  meContext*,ExprL
28840 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
28850 65 33 45 78 70 72 43 6f 76 65 72 65 64 42 79 49  e3ExprCoveredByI
28860 6e 64 65 78 28 45 78 70 72 2a 2c 20 69 6e 74 20  ndex(Expr*, int 
28870 69 43 75 72 2c 20 49 6e 64 65 78 20 2a 70 49 64  iCur, Index *pId
28880 78 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  x);.int sqlite3F
28890 75 6e 63 74 69 6f 6e 55 73 65 73 54 68 69 73 53  unctionUsesThisS
288a0 72 63 28 45 78 70 72 2a 2c 20 53 72 63 4c 69 73  rc(Expr*, SrcLis
288b0 74 2a 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69 74  t*);.Vdbe *sqlit
288c0 65 33 47 65 74 56 64 62 65 28 50 61 72 73 65 2a  e3GetVdbe(Parse*
288d0 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
288e0 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 76 6f 69  E_UNTESTABLE.voi
288f0 64 20 73 71 6c 69 74 65 33 50 72 6e 67 53 61 76  d sqlite3PrngSav
28900 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f  eState(void);.vo
28910 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67 52 65  id sqlite3PrngRe
28920 73 74 6f 72 65 53 74 61 74 65 28 76 6f 69 64 29  storeState(void)
28930 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ;.#endif.void sq
28940 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c  lite3RollbackAll
28950 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a  (sqlite3*,int);.
28960 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65  void sqlite3Code
28970 56 65 72 69 66 79 53 63 68 65 6d 61 28 50 61 72  VerifySchema(Par
28980 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  se*, int);.void 
28990 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66  sqlite3CodeVerif
289a0 79 4e 61 6d 65 64 53 63 68 65 6d 61 28 50 61 72  yNamedSchema(Par
289b0 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  se*, const char 
289c0 2a 7a 44 62 29 3b 0a 76 6f 69 64 20 73 71 6c 69  *zDb);.void sqli
289d0 74 65 33 42 65 67 69 6e 54 72 61 6e 73 61 63 74  te3BeginTransact
289e0 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  ion(Parse*, int)
289f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e  ;.void sqlite3En
28a00 64 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72  dTransaction(Par
28a10 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  se*,int);.void s
28a20 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74 28  qlite3Savepoint(
28a30 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 6f 6b  Parse*, int, Tok
28a40 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
28a50 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74  e3CloseSavepoint
28a60 73 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 76 6f  s(sqlite3 *);.vo
28a70 69 64 20 73 71 6c 69 74 65 33 4c 65 61 76 65 4d  id sqlite3LeaveM
28a80 75 74 65 78 41 6e 64 43 6c 6f 73 65 5a 6f 6d 62  utexAndCloseZomb
28a90 69 65 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e  ie(sqlite3*);.in
28aa0 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43  t sqlite3ExprIsC
28ab0 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 29 3b 0a  onstant(Expr*);.
28ac0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
28ad0 73 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a 6f 69 6e  sConstantNotJoin
28ae0 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (Expr*);.int sql
28af0 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61  ite3ExprIsConsta
28b00 6e 74 4f 72 46 75 6e 63 74 69 6f 6e 28 45 78 70  ntOrFunction(Exp
28b10 72 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c  r*, u8);.int sql
28b20 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61  ite3ExprIsConsta
28b30 6e 74 4f 72 47 72 6f 75 70 42 79 28 50 61 72 73  ntOrGroupBy(Pars
28b40 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 4c  e*, Expr*, ExprL
28b50 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
28b60 65 33 45 78 70 72 49 73 54 61 62 6c 65 43 6f 6e  e3ExprIsTableCon
28b70 73 74 61 6e 74 28 45 78 70 72 2a 2c 69 6e 74 29  stant(Expr*,int)
28b80 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
28b90 45 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f 48 49  ENABLE_CURSOR_HI
28ba0 4e 54 53 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  NTS.int sqlite3E
28bb0 78 70 72 43 6f 6e 74 61 69 6e 73 53 75 62 71 75  xprContainsSubqu
28bc0 65 72 79 28 45 78 70 72 2a 29 3b 0a 23 65 6e 64  ery(Expr*);.#end
28bd0 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  if.int sqlite3Ex
28be0 70 72 49 73 49 6e 74 65 67 65 72 28 45 78 70 72  prIsInteger(Expr
28bf0 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71  *, int*);.int sq
28c00 6c 69 74 65 33 45 78 70 72 43 61 6e 42 65 4e 75  lite3ExprCanBeNu
28c10 6c 6c 28 63 6f 6e 73 74 20 45 78 70 72 2a 29 3b  ll(const Expr*);
28c20 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
28c30 4e 65 65 64 73 4e 6f 41 66 66 69 6e 69 74 79 43  NeedsNoAffinityC
28c40 68 61 6e 67 65 28 63 6f 6e 73 74 20 45 78 70 72  hange(const Expr
28c50 2a 2c 20 63 68 61 72 29 3b 0a 69 6e 74 20 73 71  *, char);.int sq
28c60 6c 69 74 65 33 49 73 52 6f 77 69 64 28 63 6f 6e  lite3IsRowid(con
28c70 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
28c80 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52  sqlite3GenerateR
28c90 6f 77 44 65 6c 65 74 65 28 0a 20 20 20 20 50 61  owDelete(.    Pa
28ca0 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 54 72 69 67  rse*,Table*,Trig
28cb0 67 65 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  ger*,int,int,int
28cc0 2c 69 31 36 2c 75 38 2c 75 38 2c 75 38 2c 69 6e  ,i16,u8,u8,u8,in
28cd0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
28ce0 47 65 6e 65 72 61 74 65 52 6f 77 49 6e 64 65 78  GenerateRowIndex
28cf0 44 65 6c 65 74 65 28 50 61 72 73 65 2a 2c 20 54  Delete(Parse*, T
28d00 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  able*, int, int,
28d10 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74   int*, int);.int
28d20 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65   sqlite3Generate
28d30 49 6e 64 65 78 4b 65 79 28 50 61 72 73 65 2a 2c  IndexKey(Parse*,
28d40 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e   Index*, int, in
28d50 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 49 6e 64  t, int, int*,Ind
28d60 65 78 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  ex*,int);.void s
28d70 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 50 61 72  qlite3ResolvePar
28d80 74 49 64 78 4c 61 62 65 6c 28 50 61 72 73 65 2a  tIdxLabel(Parse*
28d90 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
28da0 74 65 33 47 65 6e 65 72 61 74 65 43 6f 6e 73 74  te3GenerateConst
28db0 72 61 69 6e 74 43 68 65 63 6b 73 28 50 61 72 73  raintChecks(Pars
28dc0 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2a 2c 69  e*,Table*,int*,i
28dd0 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 0a  nt,int,int,int,.
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 20 20 20 20 20 20                  
28e00 20 20 20 20 20 75 38 2c 75 38 2c 69 6e 74 2c 69       u8,u8,int,i
28e10 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 23 69 66 64 65  nt*,int*);.#ifde
28e20 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
28e30 4e 55 4c 4c 5f 54 52 49 4d 0a 20 20 76 6f 69 64  NULL_TRIM.  void
28e40 20 73 71 6c 69 74 65 33 53 65 74 4d 61 6b 65 52   sqlite3SetMakeR
28e50 65 63 6f 72 64 50 35 28 56 64 62 65 2a 2c 54 61  ecordP5(Vdbe*,Ta
28e60 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  ble*);.#else.# d
28e70 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65 74  efine sqlite3Set
28e80 4d 61 6b 65 52 65 63 6f 72 64 50 35 28 41 2c 42  MakeRecordP5(A,B
28e90 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ).#endif.void sq
28ea0 6c 69 74 65 33 43 6f 6d 70 6c 65 74 65 49 6e 73  lite3CompleteIns
28eb0 65 72 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61  ertion(Parse*,Ta
28ec0 62 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  ble*,int,int,int
28ed0 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  ,int*,int,int,in
28ee0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f  t);.int sqlite3O
28ef0 70 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69 63  penTableAndIndic
28f00 65 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  es(Parse*, Table
28f10 2a 2c 20 69 6e 74 2c 20 75 38 2c 20 69 6e 74 2c  *, int, u8, int,
28f20 20 75 38 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a   u8*, int*, int*
28f30 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
28f40 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69  eginWriteOperati
28f50 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  on(Parse*, int, 
28f60 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
28f70 65 33 4d 75 6c 74 69 57 72 69 74 65 28 50 61 72  e3MultiWrite(Par
28f80 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
28f90 65 33 4d 61 79 41 62 6f 72 74 28 50 61 72 73 65  e3MayAbort(Parse
28fa0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
28fb0 48 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28 50  HaltConstraint(P
28fc0 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  arse*, int, int,
28fd0 20 63 68 61 72 2a 2c 20 69 38 2c 20 75 38 29 3b   char*, i8, u8);
28fe0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 69  .void sqlite3Uni
28ff0 71 75 65 43 6f 6e 73 74 72 61 69 6e 74 28 50 61  queConstraint(Pa
29000 72 73 65 2a 2c 20 69 6e 74 2c 20 49 6e 64 65 78  rse*, int, Index
29010 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
29020 52 6f 77 69 64 43 6f 6e 73 74 72 61 69 6e 74 28  RowidConstraint(
29030 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 61 62  Parse*, int, Tab
29040 6c 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  le*);.Expr *sqli
29050 74 65 33 45 78 70 72 44 75 70 28 73 71 6c 69 74  te3ExprDup(sqlit
29060 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a  e3*,Expr*,int);.
29070 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65  ExprList *sqlite
29080 33 45 78 70 72 4c 69 73 74 44 75 70 28 73 71 6c  3ExprListDup(sql
29090 69 74 65 33 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  ite3*,ExprList*,
290a0 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73  int);.SrcList *s
290b0 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44 75 70  qlite3SrcListDup
290c0 28 73 71 6c 69 74 65 33 2a 2c 53 72 63 4c 69 73  (sqlite3*,SrcLis
290d0 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69 73 74 20  t*,int);.IdList 
290e0 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44 75  *sqlite3IdListDu
290f0 70 28 73 71 6c 69 74 65 33 2a 2c 49 64 4c 69 73  p(sqlite3*,IdLis
29100 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c  t*);.Select *sql
29110 69 74 65 33 53 65 6c 65 63 74 44 75 70 28 73 71  ite3SelectDup(sq
29120 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c 69  lite3*,Select*,i
29130 6e 74 29 3b 0a 23 69 66 20 53 45 4c 45 43 54 54  nt);.#if SELECTT
29140 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a 76 6f 69  RACE_ENABLED.voi
29150 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 53  d sqlite3SelectS
29160 65 74 4e 61 6d 65 28 53 65 6c 65 63 74 2a 2c 63  etName(Select*,c
29170 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6c  onst char*);.#el
29180 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
29190 74 65 33 53 65 6c 65 63 74 53 65 74 4e 61 6d 65  te3SelectSetName
291a0 28 41 2c 42 29 0a 23 65 6e 64 69 66 0a 76 6f 69  (A,B).#endif.voi
291b0 64 20 73 71 6c 69 74 65 33 49 6e 73 65 72 74 42  d sqlite3InsertB
291c0 75 69 6c 74 69 6e 46 75 6e 63 73 28 46 75 6e 63  uiltinFuncs(Func
291d0 44 65 66 2a 2c 69 6e 74 29 3b 0a 46 75 6e 63 44  Def*,int);.FuncD
291e0 65 66 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 46  ef *sqlite3FindF
291f0 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a  unction(sqlite3*
29200 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74  ,const char*,int
29210 2c 75 38 2c 75 38 29 3b 0a 76 6f 69 64 20 73 71  ,u8,u8);.void sq
29220 6c 69 74 65 33 52 65 67 69 73 74 65 72 42 75 69  lite3RegisterBui
29230 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28 76 6f  ltinFunctions(vo
29240 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
29250 33 52 65 67 69 73 74 65 72 44 61 74 65 54 69 6d  3RegisterDateTim
29260 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29  eFunctions(void)
29270 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
29280 67 69 73 74 65 72 50 65 72 43 6f 6e 6e 65 63 74  gisterPerConnect
29290 69 6f 6e 42 75 69 6c 74 69 6e 46 75 6e 63 74 69  ionBuiltinFuncti
292a0 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69  ons(sqlite3*);.i
292b0 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79  nt sqlite3Safety
292c0 43 68 65 63 6b 4f 6b 28 73 71 6c 69 74 65 33 2a  CheckOk(sqlite3*
292d0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61  );.int sqlite3Sa
292e0 66 65 74 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f  fetyCheckSickOrO
292f0 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  k(sqlite3*);.voi
29300 64 20 73 71 6c 69 74 65 33 43 68 61 6e 67 65 43  d sqlite3ChangeC
29310 6f 6f 6b 69 65 28 50 61 72 73 65 2a 2c 20 69 6e  ookie(Parse*, in
29320 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65  t);..#if !define
29330 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  d(SQLITE_OMIT_VI
29340 45 57 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  EW) && !defined(
29350 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47  SQLITE_OMIT_TRIG
29360 47 45 52 29 0a 76 6f 69 64 20 73 71 6c 69 74 65  GER).void sqlite
29370 33 4d 61 74 65 72 69 61 6c 69 7a 65 56 69 65 77  3MaterializeView
29380 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
29390 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 23 65   Expr*, int);.#e
293a0 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
293b0 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
293c0 52 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  R.  void sqlite3
293d0 42 65 67 69 6e 54 72 69 67 67 65 72 28 50 61 72  BeginTrigger(Par
293e0 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  se*, Token*,Toke
293f0 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c 69 73  n*,int,int,IdLis
29400 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 0a 20 20 20  t*,SrcList*,.   
29410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29420 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 69 6e          Expr*,in
29430 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  t, int);.  void 
29440 73 71 6c 69 74 65 33 46 69 6e 69 73 68 54 72 69  sqlite3FinishTri
29450 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69  gger(Parse*, Tri
29460 67 67 65 72 53 74 65 70 2a 2c 20 54 6f 6b 65 6e  ggerStep*, Token
29470 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
29480 65 33 44 72 6f 70 54 72 69 67 67 65 72 28 50 61  e3DropTrigger(Pa
29490 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
294a0 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  int);.  void sql
294b0 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 50  ite3DropTriggerP
294c0 74 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67  tr(Parse*, Trigg
294d0 65 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 20  er*);.  Trigger 
294e0 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 73  *sqlite3Triggers
294f0 45 78 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54  Exist(Parse *, T
29500 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72  able*, int, Expr
29510 4c 69 73 74 2a 2c 20 69 6e 74 20 2a 70 4d 61 73  List*, int *pMas
29520 6b 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73  k);.  Trigger *s
29530 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69 73  qlite3TriggerLis
29540 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65  t(Parse *, Table
29550 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69   *);.  void sqli
29560 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65  te3CodeRowTrigge
29570 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65  r(Parse*, Trigge
29580 72 20 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69  r *, int, ExprLi
29590 73 74 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 20  st*, int, Table 
295a0 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
295b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
295c0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20  nt, int, int);. 
295d0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64   void sqlite3Cod
295e0 65 52 6f 77 54 72 69 67 67 65 72 44 69 72 65 63  eRowTriggerDirec
295f0 74 28 50 61 72 73 65 20 2a 2c 20 54 72 69 67 67  t(Parse *, Trigg
29600 65 72 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69  er *, Table *, i
29610 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20  nt, int, int);. 
29620 20 76 6f 69 64 20 73 71 6c 69 74 65 56 69 65 77   void sqliteView
29630 54 72 69 67 67 65 72 73 28 50 61 72 73 65 2a 2c  Triggers(Parse*,
29640 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20   Table*, Expr*, 
29650 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  int, ExprList*);
29660 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
29670 65 6c 65 74 65 54 72 69 67 67 65 72 53 74 65 70  eleteTriggerStep
29680 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67  (sqlite3*, Trigg
29690 65 72 53 74 65 70 2a 29 3b 0a 20 20 54 72 69 67  erStep*);.  Trig
296a0 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33  gerStep *sqlite3
296b0 54 72 69 67 67 65 72 53 65 6c 65 63 74 53 74 65  TriggerSelectSte
296c0 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63  p(sqlite3*,Selec
296d0 74 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74  t*);.  TriggerSt
296e0 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  ep *sqlite3Trigg
296f0 65 72 49 6e 73 65 72 74 53 74 65 70 28 73 71 6c  erInsertStep(sql
29700 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64  ite3*,Token*, Id
29710 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20  List*,.         
29720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
29740 65 6c 65 63 74 2a 2c 75 38 29 3b 0a 20 20 54 72  elect*,u8);.  Tr
29750 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74  iggerStep *sqlit
29760 65 33 54 72 69 67 67 65 72 55 70 64 61 74 65 53  e3TriggerUpdateS
29770 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b  tep(sqlite3*,Tok
29780 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 45  en*,ExprList*, E
29790 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20 54 72 69  xpr*, u8);.  Tri
297a0 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65  ggerStep *sqlite
297b0 33 54 72 69 67 67 65 72 44 65 6c 65 74 65 53 74  3TriggerDeleteSt
297c0 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65  ep(sqlite3*,Toke
297d0 6e 2a 2c 20 45 78 70 72 2a 29 3b 0a 20 20 76 6f  n*, Expr*);.  vo
297e0 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
297f0 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a  Trigger(sqlite3*
29800 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 76  , Trigger*);.  v
29810 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  oid sqlite3Unlin
29820 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65  kAndDeleteTrigge
29830 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  r(sqlite3*,int,c
29840 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 75  onst char*);.  u
29850 33 32 20 73 71 6c 69 74 65 33 54 72 69 67 67 65  32 sqlite3Trigge
29860 72 43 6f 6c 6d 61 73 6b 28 50 61 72 73 65 2a 2c  rColmask(Parse*,
29870 54 72 69 67 67 65 72 2a 2c 45 78 70 72 4c 69 73  Trigger*,ExprLis
29880 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61 62 6c 65  t*,int,int,Table
29890 2a 2c 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65  *,int);.# define
298a0 20 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70   sqlite3ParseTop
298b0 6c 65 76 65 6c 28 70 29 20 28 28 70 29 2d 3e 70  level(p) ((p)->p
298c0 54 6f 70 6c 65 76 65 6c 20 3f 20 28 70 29 2d 3e  Toplevel ? (p)->
298d0 70 54 6f 70 6c 65 76 65 6c 20 3a 20 28 70 29 29  pToplevel : (p))
298e0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
298f0 33 49 73 54 6f 70 6c 65 76 65 6c 28 70 29 20 28  3IsToplevel(p) (
29900 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 3d 3d  (p)->pToplevel==
29910 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  0).#else.# defin
29920 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72  e sqlite3Trigger
29930 73 45 78 69 73 74 28 42 2c 43 2c 44 2c 45 2c 46  sExist(B,C,D,E,F
29940 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ) 0.# define sql
29950 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65  ite3DeleteTrigge
29960 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20  r(A,B).# define 
29970 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67  sqlite3DropTrigg
29980 65 72 50 74 72 28 41 2c 42 29 0a 23 20 64 65 66  erPtr(A,B).# def
29990 69 6e 65 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  ine sqlite3Unlin
299a0 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65  kAndDeleteTrigge
299b0 72 28 41 2c 42 2c 43 29 0a 23 20 64 65 66 69 6e  r(A,B,C).# defin
299c0 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77  e sqlite3CodeRow
299d0 54 72 69 67 67 65 72 28 41 2c 42 2c 43 2c 44 2c  Trigger(A,B,C,D,
299e0 45 2c 46 2c 47 2c 48 2c 49 29 0a 23 20 64 65 66  E,F,G,H,I).# def
299f0 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52  ine sqlite3CodeR
29a00 6f 77 54 72 69 67 67 65 72 44 69 72 65 63 74 28  owTriggerDirect(
29a10 41 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a 23 20 64  A,B,C,D,E,F).# d
29a20 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69  efine sqlite3Tri
29a30 67 67 65 72 4c 69 73 74 28 58 2c 20 59 29 20 30  ggerList(X, Y) 0
29a40 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
29a50 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70  3ParseToplevel(p
29a60 29 20 70 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ) p.# define sql
29a70 69 74 65 33 49 73 54 6f 70 6c 65 76 65 6c 28 70  ite3IsToplevel(p
29a80 29 20 31 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ) 1.# define sql
29a90 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61  ite3TriggerColma
29aa0 73 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47  sk(A,B,C,D,E,F,G
29ab0 29 20 30 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20  ) 0.#endif..int 
29ac0 73 71 6c 69 74 65 33 4a 6f 69 6e 54 79 70 65 28  sqlite3JoinType(
29ad0 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Parse*, Token*, 
29ae0 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Token*, Token*);
29af0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65  .void sqlite3Cre
29b00 61 74 65 46 6f 72 65 69 67 6e 4b 65 79 28 50 61  ateForeignKey(Pa
29b10 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
29b20 20 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c 69 73   Token*, ExprLis
29b30 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  t*, int);.void s
29b40 71 6c 69 74 65 33 44 65 66 65 72 46 6f 72 65 69  qlite3DeferForei
29b50 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 69 6e  gnKey(Parse*, in
29b60 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  t);.#ifndef SQLI
29b70 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a  TE_OMIT_AUTHORIZ
29b80 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c  ATION.  void sql
29b90 69 74 65 33 41 75 74 68 52 65 61 64 28 50 61 72  ite3AuthRead(Par
29ba0 73 65 2a 2c 45 78 70 72 2a 2c 53 63 68 65 6d 61  se*,Expr*,Schema
29bb0 2a 2c 53 72 63 4c 69 73 74 2a 29 3b 0a 20 20 69  *,SrcList*);.  i
29bc0 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68 43 68  nt sqlite3AuthCh
29bd0 65 63 6b 28 50 61 72 73 65 2a 2c 69 6e 74 2c 20  eck(Parse*,int, 
29be0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
29bf0 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
29c00 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  char*);.  void s
29c10 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78  qlite3AuthContex
29c20 74 50 75 73 68 28 50 61 72 73 65 2a 2c 20 41 75  tPush(Parse*, Au
29c30 74 68 43 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e 73  thContext*, cons
29c40 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64  t char*);.  void
29c50 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74   sqlite3AuthCont
29c60 65 78 74 50 6f 70 28 41 75 74 68 43 6f 6e 74 65  extPop(AuthConte
29c70 78 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  xt*);.  int sqli
29c80 74 65 33 41 75 74 68 52 65 61 64 43 6f 6c 28 50  te3AuthReadCol(P
29c90 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  arse*, const cha
29ca0 72 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  r *, const char 
29cb0 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 23  *, int);.#else.#
29cc0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
29cd0 75 74 68 52 65 61 64 28 61 2c 62 2c 63 2c 64 29  uthRead(a,b,c,d)
29ce0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
29cf0 33 41 75 74 68 43 68 65 63 6b 28 61 2c 62 2c 63  3AuthCheck(a,b,c
29d00 2c 64 2c 65 29 20 20 20 20 53 51 4c 49 54 45 5f  ,d,e)    SQLITE_
29d10 4f 4b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  OK.# define sqli
29d20 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75  te3AuthContextPu
29d30 73 68 28 61 2c 62 2c 63 29 0a 23 20 64 65 66 69  sh(a,b,c).# defi
29d40 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f  ne sqlite3AuthCo
29d50 6e 74 65 78 74 50 6f 70 28 61 29 20 20 28 28 76  ntextPop(a)  ((v
29d60 6f 69 64 29 28 61 29 29 0a 23 65 6e 64 69 66 0a  oid)(a)).#endif.
29d70 76 6f 69 64 20 73 71 6c 69 74 65 33 41 74 74 61  void sqlite3Atta
29d80 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  ch(Parse*, Expr*
29d90 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b  , Expr*, Expr*);
29da0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 74  .void sqlite3Det
29db0 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ach(Parse*, Expr
29dc0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
29dd0 46 69 78 49 6e 69 74 28 44 62 46 69 78 65 72 2a  FixInit(DbFixer*
29de0 2c 20 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 63  , Parse*, int, c
29df0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
29e00 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  t Token*);.int s
29e10 71 6c 69 74 65 33 46 69 78 53 72 63 4c 69 73 74  qlite3FixSrcList
29e20 28 44 62 46 69 78 65 72 2a 2c 20 53 72 63 4c 69  (DbFixer*, SrcLi
29e30 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
29e40 33 46 69 78 53 65 6c 65 63 74 28 44 62 46 69 78  3FixSelect(DbFix
29e50 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69  er*, Select*);.i
29e60 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45 78 70  nt sqlite3FixExp
29e70 72 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72  r(DbFixer*, Expr
29e80 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
29e90 69 78 45 78 70 72 4c 69 73 74 28 44 62 46 69 78  ixExprList(DbFix
29ea0 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  er*, ExprList*);
29eb0 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 54  .int sqlite3FixT
29ec0 72 69 67 67 65 72 53 74 65 70 28 44 62 46 69 78  riggerStep(DbFix
29ed0 65 72 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70  er*, TriggerStep
29ee0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  *);.int sqlite3A
29ef0 74 6f 46 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  toF(const char *
29f00 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20 69 6e 74 2c  z, double*, int,
29f10 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   u8);.int sqlite
29f20 33 47 65 74 49 6e 74 33 32 28 63 6f 6e 73 74 20  3GetInt32(const 
29f30 63 68 61 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a 69  char *, int*);.i
29f40 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69 28 63  nt sqlite3Atoi(c
29f50 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 69 66  onst char*);.#if
29f60 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
29f70 5f 55 54 46 31 36 0a 69 6e 74 20 73 71 6c 69 74  _UTF16.int sqlit
29f80 65 33 55 74 66 31 36 42 79 74 65 4c 65 6e 28 63  e3Utf16ByteLen(c
29f90 6f 6e 73 74 20 76 6f 69 64 20 2a 70 44 61 74 61  onst void *pData
29fa0 2c 20 69 6e 74 20 6e 43 68 61 72 29 3b 0a 23 65  , int nChar);.#e
29fb0 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33  ndif.int sqlite3
29fc0 55 74 66 38 43 68 61 72 4c 65 6e 28 63 6f 6e 73  Utf8CharLen(cons
29fd0 74 20 63 68 61 72 20 2a 70 44 61 74 61 2c 20 69  t char *pData, i
29fe0 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33 32 20 73  nt nByte);.u32 s
29ff0 71 6c 69 74 65 33 55 74 66 38 52 65 61 64 28 63  qlite3Utf8Read(c
2a000 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 4c 6f 67 45  onst u8**);.LogE
2a010 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74  st sqlite3LogEst
2a020 28 75 36 34 29 3b 0a 4c 6f 67 45 73 74 20 73 71  (u64);.LogEst sq
2a030 6c 69 74 65 33 4c 6f 67 45 73 74 41 64 64 28 4c  lite3LogEstAdd(L
2a040 6f 67 45 73 74 2c 4c 6f 67 45 73 74 29 3b 0a 23  ogEst,LogEst);.#
2a050 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2a060 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
2a070 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f  LogEst sqlite3Lo
2a080 67 45 73 74 46 72 6f 6d 44 6f 75 62 6c 65 28 64  gEstFromDouble(d
2a090 6f 75 62 6c 65 29 3b 0a 23 65 6e 64 69 66 0a 23  ouble);.#endif.#
2a0a0 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
2a0b0 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43  E_ENABLE_STMT_SC
2a0c0 41 4e 53 54 41 54 55 53 29 20 7c 7c 20 5c 0a 20  ANSTATUS) || \. 
2a0d0 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54     defined(SQLIT
2a0e0 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
2a0f0 52 5f 53 54 41 54 34 29 20 7c 7c 20 5c 0a 20 20  R_STAT4) || \.  
2a100 20 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45    defined(SQLITE
2a110 5f 45 58 50 4c 41 49 4e 5f 45 53 54 49 4d 41 54  _EXPLAIN_ESTIMAT
2a120 45 44 5f 52 4f 57 53 29 0a 75 36 34 20 73 71 6c  ED_ROWS).u64 sql
2a130 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28  ite3LogEstToInt(
2a140 4c 6f 67 45 73 74 29 3b 0a 23 65 6e 64 69 66 0a  LogEst);.#endif.
2a150 56 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 56 4c  VList *sqlite3VL
2a160 69 73 74 41 64 64 28 73 71 6c 69 74 65 33 2a 2c  istAdd(sqlite3*,
2a170 56 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61  VList*,const cha
2a180 72 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 63 6f 6e  r*,int,int);.con
2a190 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
2a1a0 56 4c 69 73 74 4e 75 6d 54 6f 4e 61 6d 65 28 56  VListNumToName(V
2a1b0 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20  List*,int);.int 
2a1c0 73 71 6c 69 74 65 33 56 4c 69 73 74 4e 61 6d 65  sqlite3VListName
2a1d0 54 6f 4e 75 6d 28 56 4c 69 73 74 2a 2c 63 6f 6e  ToNum(VList*,con
2a1e0 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 0a  st char*,int);..
2a1f0 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20 74  /*.** Routines t
2a200 6f 20 72 65 61 64 20 61 6e 64 20 77 72 69 74 65  o read and write
2a210 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68   variable-length
2a220 20 69 6e 74 65 67 65 72 73 2e 20 20 54 68 65 73   integers.  Thes
2a230 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20  e used to.** be 
2a240 64 65 66 69 6e 65 64 20 6c 6f 63 61 6c 6c 79 2c  defined locally,
2a250 20 62 75 74 20 6e 6f 77 20 77 65 20 75 73 65 20   but now we use 
2a260 74 68 65 20 76 61 72 69 6e 74 20 72 6f 75 74 69  the varint routi
2a270 6e 65 73 20 69 6e 20 74 68 65 20 75 74 69 6c 2e  nes in the util.
2a280 63 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2f 0a 69 6e  c.** file..*/.in
2a290 74 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69  t sqlite3PutVari
2a2a0 6e 74 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  nt(unsigned char
2a2b0 2a 2c 20 75 36 34 29 3b 0a 75 38 20 73 71 6c 69  *, u64);.u8 sqli
2a2c0 74 65 33 47 65 74 56 61 72 69 6e 74 28 63 6f 6e  te3GetVarint(con
2a2d0 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
2a2e0 20 2a 2c 20 75 36 34 20 2a 29 3b 0a 75 38 20 73   *, u64 *);.u8 s
2a2f0 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33  qlite3GetVarint3
2a300 32 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  2(const unsigned
2a310 20 63 68 61 72 20 2a 2c 20 75 33 32 20 2a 29 3b   char *, u32 *);
2a320 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 72 69  .int sqlite3Vari
2a330 6e 74 4c 65 6e 28 75 36 34 20 76 29 3b 0a 0a 2f  ntLen(u64 v);../
2a340 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e 20  *.** The common 
2a350 63 61 73 65 20 69 73 20 66 6f 72 20 61 20 76 61  case is for a va
2a360 72 69 6e 74 20 74 6f 20 62 65 20 61 20 73 69 6e  rint to be a sin
2a370 67 6c 65 20 62 79 74 65 2e 20 20 54 68 65 79 20  gle byte.  They 
2a380 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 6d 61 63  following.** mac
2a390 72 6f 73 20 68 61 6e 64 6c 65 20 74 68 65 20 63  ros handle the c
2a3a0 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 69 74 68 6f  ommon case witho
2a3b0 75 74 20 61 20 70 72 6f 63 65 64 75 72 65 20 63  ut a procedure c
2a3c0 61 6c 6c 2c 20 62 75 74 20 74 68 65 6e 20 63 61  all, but then ca
2a3d0 6c 6c 0a 2a 2a 20 74 68 65 20 70 72 6f 63 65 64  ll.** the proced
2a3e0 75 72 65 20 66 6f 72 20 6c 61 72 67 65 72 20 76  ure for larger v
2a3f0 61 72 69 6e 74 73 2e 0a 2a 2f 0a 23 64 65 66 69  arints..*/.#defi
2a400 6e 65 20 67 65 74 56 61 72 69 6e 74 33 32 28 41  ne getVarint32(A
2a410 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28 2a  ,B)  \.  (u8)((*
2a420 28 41 29 3c 28 75 38 29 30 78 38 30 29 3f 28 28  (A)<(u8)0x80)?((
2a430 42 29 3d 28 75 33 32 29 2a 28 41 29 29 2c 31 3a  B)=(u32)*(A)),1:
2a440 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
2a450 33 32 28 28 41 29 2c 28 75 33 32 20 2a 29 26 28  32((A),(u32 *)&(
2a460 42 29 29 29 0a 23 64 65 66 69 6e 65 20 70 75 74  B))).#define put
2a470 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c  Varint32(A,B)  \
2a480 0a 20 20 28 75 38 29 28 28 28 75 33 32 29 28 42  .  (u8)(((u32)(B
2a490 29 3c 28 75 33 32 29 30 78 38 30 29 3f 28 2a 28  )<(u32)0x80)?(*(
2a4a0 41 29 3d 28 75 6e 73 69 67 6e 65 64 20 63 68 61  A)=(unsigned cha
2a4b0 72 29 28 42 29 29 2c 31 3a 5c 0a 20 20 73 71 6c  r)(B)),1:\.  sql
2a4c0 69 74 65 33 50 75 74 56 61 72 69 6e 74 28 28 41  ite3PutVarint((A
2a4d0 29 2c 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20  ),(B))).#define 
2a4e0 67 65 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c  getVarint    sql
2a4f0 69 74 65 33 47 65 74 56 61 72 69 6e 74 0a 23 64  ite3GetVarint.#d
2a500 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74 20  efine putVarint 
2a510 20 20 20 73 71 6c 69 74 65 33 50 75 74 56 61 72     sqlite3PutVar
2a520 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63 68 61 72  int...const char
2a530 20 2a 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66   *sqlite3IndexAf
2a540 66 69 6e 69 74 79 53 74 72 28 73 71 6c 69 74 65  finityStr(sqlite
2a550 33 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69  3*, Index*);.voi
2a560 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65 41 66  d sqlite3TableAf
2a570 66 69 6e 69 74 79 28 56 64 62 65 2a 2c 20 54 61  finity(Vdbe*, Ta
2a580 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72  ble*, int);.char
2a590 20 73 71 6c 69 74 65 33 43 6f 6d 70 61 72 65 41   sqlite3CompareA
2a5a0 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45  ffinity(Expr *pE
2a5b0 78 70 72 2c 20 63 68 61 72 20 61 66 66 32 29 3b  xpr, char aff2);
2a5c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65  .int sqlite3Inde
2a5d0 78 41 66 66 69 6e 69 74 79 4f 6b 28 45 78 70 72  xAffinityOk(Expr
2a5e0 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20 69 64   *pExpr, char id
2a5f0 78 5f 61 66 66 69 6e 69 74 79 29 3b 0a 63 68 61  x_affinity);.cha
2a600 72 20 73 71 6c 69 74 65 33 54 61 62 6c 65 43 6f  r sqlite3TableCo
2a610 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 54 61 62  lumnAffinity(Tab
2a620 6c 65 2a 2c 69 6e 74 29 3b 0a 63 68 61 72 20 73  le*,int);.char s
2a630 71 6c 69 74 65 33 45 78 70 72 41 66 66 69 6e 69  qlite3ExprAffini
2a640 74 79 28 45 78 70 72 20 2a 70 45 78 70 72 29 3b  ty(Expr *pExpr);
2a650 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69  .int sqlite3Atoi
2a660 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  64(const char*, 
2a670 69 36 34 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a  i64*, int, u8);.
2a680 69 6e 74 20 73 71 6c 69 74 65 33 44 65 63 4f 72  int sqlite3DecOr
2a690 48 65 78 54 6f 49 36 34 28 63 6f 6e 73 74 20 63  HexToI64(const c
2a6a0 68 61 72 2a 2c 20 69 36 34 2a 29 3b 0a 76 6f 69  har*, i64*);.voi
2a6b0 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 57 69  d sqlite3ErrorWi
2a6c0 74 68 4d 73 67 28 73 71 6c 69 74 65 33 2a 2c 20  thMsg(sqlite3*, 
2a6d0 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  int, const char*
2a6e0 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,...);.void sqli
2a6f0 74 65 33 45 72 72 6f 72 28 73 71 6c 69 74 65 33  te3Error(sqlite3
2a700 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
2a710 69 74 65 33 53 79 73 74 65 6d 45 72 72 6f 72 28  ite3SystemError(
2a720 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76  sqlite3*,int);.v
2a730 6f 69 64 20 2a 73 71 6c 69 74 65 33 48 65 78 54  oid *sqlite3HexT
2a740 6f 42 6c 6f 62 28 73 71 6c 69 74 65 33 2a 2c 20  oBlob(sqlite3*, 
2a750 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69  const char *z, i
2a760 6e 74 20 6e 29 3b 0a 75 38 20 73 71 6c 69 74 65  nt n);.u8 sqlite
2a770 33 48 65 78 54 6f 49 6e 74 28 69 6e 74 20 68 29  3HexToInt(int h)
2a780 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 77 6f  ;.int sqlite3Two
2a790 50 61 72 74 4e 61 6d 65 28 50 61 72 73 65 20 2a  PartName(Parse *
2a7a0 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e  , Token *, Token
2a7b0 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a   *, Token **);..
2a7c0 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
2a7d0 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45  TE_NEED_ERR_NAME
2a7e0 29 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  ).const char *sq
2a7f0 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 69 6e 74  lite3ErrName(int
2a800 29 3b 0a 23 65 6e 64 69 66 0a 0a 63 6f 6e 73 74  );.#endif..const
2a810 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72   char *sqlite3Er
2a820 72 53 74 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73  rStr(int);.int s
2a830 71 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61  qlite3ReadSchema
2a840 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b  (Parse *pParse);
2a850 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
2a860 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28 73 71 6c  3FindCollSeq(sql
2a870 69 74 65 33 2a 2c 75 38 20 65 6e 63 2c 20 63 6f  ite3*,u8 enc, co
2a880 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a  nst char*,int);.
2a890 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33  CollSeq *sqlite3
2a8a0 4c 6f 63 61 74 65 43 6f 6c 6c 53 65 71 28 50 61  LocateCollSeq(Pa
2a8b0 72 73 65 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e  rse *pParse, con
2a8c0 73 74 20 63 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a  st char*zName);.
2a8d0 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33  CollSeq *sqlite3
2a8e0 45 78 70 72 43 6f 6c 6c 53 65 71 28 50 61 72 73  ExprCollSeq(Pars
2a8f0 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20  e *pParse, Expr 
2a900 2a 70 45 78 70 72 29 3b 0a 45 78 70 72 20 2a 73  *pExpr);.Expr *s
2a910 71 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c  qlite3ExprAddCol
2a920 6c 61 74 65 54 6f 6b 65 6e 28 50 61 72 73 65 20  lateToken(Parse 
2a930 2a 70 50 61 72 73 65 2c 20 45 78 70 72 2a 2c 20  *pParse, Expr*, 
2a940 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 20 69 6e  const Token*, in
2a950 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  t);.Expr *sqlite
2a960 33 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65 53  3ExprAddCollateS
2a970 74 72 69 6e 67 28 50 61 72 73 65 2a 2c 45 78 70  tring(Parse*,Exp
2a980 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  r*,const char*);
2a990 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
2a9a0 70 72 53 6b 69 70 43 6f 6c 6c 61 74 65 28 45 78  prSkipCollate(Ex
2a9b0 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
2a9c0 33 43 68 65 63 6b 43 6f 6c 6c 53 65 71 28 50 61  3CheckCollSeq(Pa
2a9d0 72 73 65 20 2a 2c 20 43 6f 6c 6c 53 65 71 20 2a  rse *, CollSeq *
2a9e0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68  );.int sqlite3Ch
2a9f0 65 63 6b 4f 62 6a 65 63 74 4e 61 6d 65 28 50 61  eckObjectName(Pa
2aa00 72 73 65 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  rse *, const cha
2aa10 72 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  r *);.void sqlit
2aa20 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73  e3VdbeSetChanges
2aa30 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 29  (sqlite3 *, int)
2aa40 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 64 64  ;.int sqlite3Add
2aa50 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b  Int64(i64*,i64);
2aa60 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 75 62 49  .int sqlite3SubI
2aa70 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a  nt64(i64*,i64);.
2aa80 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e  int sqlite3MulIn
2aa90 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69  t64(i64*,i64);.i
2aaa0 6e 74 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74  nt sqlite3AbsInt
2aab0 33 32 28 69 6e 74 29 3b 0a 23 69 66 64 65 66 20  32(int);.#ifdef 
2aac0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 38 5f  SQLITE_ENABLE_8_
2aad0 33 5f 4e 41 4d 45 53 0a 76 6f 69 64 20 73 71 6c  3_NAMES.void sql
2aae0 69 74 65 33 46 69 6c 65 53 75 66 66 69 78 33 28  ite3FileSuffix3(
2aaf0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61  const char*, cha
2ab00 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  r*);.#else.# def
2ab10 69 6e 65 20 73 71 6c 69 74 65 33 46 69 6c 65 53  ine sqlite3FileS
2ab20 75 66 66 69 78 33 28 58 2c 59 29 0a 23 65 6e 64  uffix3(X,Y).#end
2ab30 69 66 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74  if.u8 sqlite3Get
2ab40 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74 20 63 68  Boolean(const ch
2ab50 61 72 20 2a 7a 2c 75 38 29 3b 0a 0a 63 6f 6e 73  ar *z,u8);..cons
2ab60 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 56  t void *sqlite3V
2ab70 61 6c 75 65 54 65 78 74 28 73 71 6c 69 74 65 33  alueText(sqlite3
2ab80 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 69 6e  _value*, u8);.in
2ab90 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65 42 79  t sqlite3ValueBy
2aba0 74 65 73 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  tes(sqlite3_valu
2abb0 65 2a 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71  e*, u8);.void sq
2abc0 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53 74 72  lite3ValueSetStr
2abd0 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c  (sqlite3_value*,
2abe0 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64   int, const void
2abf0 20 2a 2c 75 38 2c 0a 20 20 20 20 20 20 20 20 20   *,u8,.         
2ac00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
2ac10 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a  oid(*)(void*));.
2ac20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
2ac30 65 53 65 74 4e 75 6c 6c 28 73 71 6c 69 74 65 33  eSetNull(sqlite3
2ac40 5f 76 61 6c 75 65 2a 29 3b 0a 76 6f 69 64 20 73  _value*);.void s
2ac50 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28  qlite3ValueFree(
2ac60 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b  sqlite3_value*);
2ac70 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  .sqlite3_value *
2ac80 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28  sqlite3ValueNew(
2ac90 73 71 6c 69 74 65 33 20 2a 29 3b 0a 23 69 66 6e  sqlite3 *);.#ifn
2aca0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2acb0 55 54 46 31 36 0a 63 68 61 72 20 2a 73 71 6c 69  UTF16.char *sqli
2acc0 74 65 33 55 74 66 31 36 74 6f 38 28 73 71 6c 69  te3Utf16to8(sqli
2acd0 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 76 6f 69  te3 *, const voi
2ace0 64 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 23 65  d*, int, u8);.#e
2acf0 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33  ndif.int sqlite3
2ad00 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 73 71  ValueFromExpr(sq
2ad10 6c 69 74 65 33 20 2a 2c 20 45 78 70 72 20 2a 2c  lite3 *, Expr *,
2ad20 20 75 38 2c 20 75 38 2c 20 73 71 6c 69 74 65 33   u8, u8, sqlite3
2ad30 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69 64  _value **);.void
2ad40 20 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70   sqlite3ValueApp
2ad50 6c 79 41 66 66 69 6e 69 74 79 28 73 71 6c 69 74  lyAffinity(sqlit
2ad60 65 33 5f 76 61 6c 75 65 20 2a 2c 20 75 38 2c 20  e3_value *, u8, 
2ad70 75 38 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  u8);.#ifndef SQL
2ad80 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e  ITE_AMALGAMATION
2ad90 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e  .extern const un
2ada0 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69  signed char sqli
2adb0 74 65 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74  te3OpcodePropert
2adc0 79 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73  y[];.extern cons
2add0 74 20 63 68 61 72 20 73 71 6c 69 74 65 33 53 74  t char sqlite3St
2ade0 72 42 49 4e 41 52 59 5b 5d 3b 0a 65 78 74 65 72  rBINARY[];.exter
2adf0 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  n const unsigned
2ae00 20 63 68 61 72 20 73 71 6c 69 74 65 33 55 70 70   char sqlite3Upp
2ae10 65 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74  erToLower[];.ext
2ae20 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ern const unsign
2ae30 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 43  ed char sqlite3C
2ae40 74 79 70 65 4d 61 70 5b 5d 3b 0a 65 78 74 65 72  typeMap[];.exter
2ae50 6e 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 73 71  n const Token sq
2ae60 6c 69 74 65 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d  lite3IntTokens[]
2ae70 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49 54 45 5f  ;.extern SQLITE_
2ae80 57 53 44 20 73 74 72 75 63 74 20 53 71 6c 69 74  WSD struct Sqlit
2ae90 65 33 43 6f 6e 66 69 67 20 73 71 6c 69 74 65 33  e3Config sqlite3
2aea0 43 6f 6e 66 69 67 3b 0a 65 78 74 65 72 6e 20 46  Config;.extern F
2aeb0 75 6e 63 44 65 66 48 61 73 68 20 73 71 6c 69 74  uncDefHash sqlit
2aec0 65 33 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f  e3BuiltinFunctio
2aed0 6e 73 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  ns;.#ifndef SQLI
2aee0 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 65 78 74 65  TE_OMIT_WSD.exte
2aef0 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 50 65  rn int sqlite3Pe
2af00 6e 64 69 6e 67 42 79 74 65 3b 0a 23 65 6e 64 69  ndingByte;.#endi
2af10 66 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  f.#endif.void sq
2af20 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76  lite3RootPageMov
2af30 65 64 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  ed(sqlite3*, int
2af40 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
2af50 64 20 73 71 6c 69 74 65 33 52 65 69 6e 64 65 78  d sqlite3Reindex
2af60 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c  (Parse*, Token*,
2af70 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
2af80 71 6c 69 74 65 33 41 6c 74 65 72 46 75 6e 63 74  qlite3AlterFunct
2af90 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64  ions(void);.void
2afa0 20 73 71 6c 69 74 65 33 41 6c 74 65 72 52 65 6e   sqlite3AlterRen
2afb0 61 6d 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ameTable(Parse*,
2afc0 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e   SrcList*, Token
2afd0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  *);.int sqlite3G
2afe0 65 74 54 6f 6b 65 6e 28 63 6f 6e 73 74 20 75 6e  etToken(const un
2aff0 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 69  signed char *, i
2b000 6e 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  nt *);.void sqli
2b010 74 65 33 4e 65 73 74 65 64 50 61 72 73 65 28 50  te3NestedParse(P
2b020 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  arse*, const cha
2b030 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73  r*, ...);.void s
2b040 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70  qlite3ExpirePrep
2b050 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 73  aredStatements(s
2b060 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71  qlite3*);.int sq
2b070 6c 69 74 65 33 43 6f 64 65 53 75 62 73 65 6c 65  lite3CodeSubsele
2b080 63 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 20  ct(Parse*, Expr 
2b090 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
2b0a0 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
2b0b0 50 72 65 70 28 50 61 72 73 65 2a 2c 20 53 65 6c  Prep(Parse*, Sel
2b0c0 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78  ect*, NameContex
2b0d0 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
2b0e0 33 53 65 6c 65 63 74 57 72 6f 6e 67 4e 75 6d 54  3SelectWrongNumT
2b0f0 65 72 6d 73 45 72 72 6f 72 28 50 61 72 73 65 20  ermsError(Parse 
2b100 2a 70 50 61 72 73 65 2c 20 53 65 6c 65 63 74 20  *pParse, Select 
2b110 2a 70 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  *p);.int sqlite3
2b120 4d 61 74 63 68 53 70 61 6e 4e 61 6d 65 28 63 6f  MatchSpanName(co
2b130 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
2b140 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
2b150 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
2b160 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
2b170 73 6f 6c 76 65 45 78 70 72 4e 61 6d 65 73 28 4e  solveExprNames(N
2b180 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70  ameContext*, Exp
2b190 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
2b1a0 52 65 73 6f 6c 76 65 45 78 70 72 4c 69 73 74 4e  ResolveExprListN
2b1b0 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74  ames(NameContext
2b1c0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 76  *, ExprList*);.v
2b1d0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  oid sqlite3Resol
2b1e0 76 65 53 65 6c 65 63 74 4e 61 6d 65 73 28 50 61  veSelectNames(Pa
2b1f0 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e  rse*, Select*, N
2b200 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f  ameContext*);.vo
2b210 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76  id sqlite3Resolv
2b220 65 53 65 6c 66 52 65 66 65 72 65 6e 63 65 28 50  eSelfReference(P
2b230 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74  arse*,Table*,int
2b240 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a  ,Expr*,ExprList*
2b250 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
2b260 73 6f 6c 76 65 4f 72 64 65 72 47 72 6f 75 70 42  solveOrderGroupB
2b270 79 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74  y(Parse*, Select
2b280 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f  *, ExprList*, co
2b290 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
2b2a0 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65   sqlite3ColumnDe
2b2b0 66 61 75 6c 74 28 56 64 62 65 20 2a 2c 20 54 61  fault(Vdbe *, Ta
2b2c0 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  ble *, int, int)
2b2d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c  ;.void sqlite3Al
2b2e0 74 65 72 46 69 6e 69 73 68 41 64 64 43 6f 6c 75  terFinishAddColu
2b2f0 6d 6e 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65  mn(Parse *, Toke
2b300 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  n *);.void sqlit
2b310 65 33 41 6c 74 65 72 42 65 67 69 6e 41 64 64 43  e3AlterBeginAddC
2b320 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 53  olumn(Parse *, S
2b330 72 63 4c 69 73 74 20 2a 29 3b 0a 43 6f 6c 6c 53  rcList *);.CollS
2b340 65 71 20 2a 73 71 6c 69 74 65 33 47 65 74 43 6f  eq *sqlite3GetCo
2b350 6c 6c 53 65 71 28 50 61 72 73 65 2a 2c 20 75 38  llSeq(Parse*, u8
2b360 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e  , CollSeq *, con
2b370 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20  st char*);.char 
2b380 73 71 6c 69 74 65 33 41 66 66 69 6e 69 74 79 54  sqlite3AffinityT
2b390 79 70 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ype(const char*,
2b3a0 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69   u8*);.void sqli
2b3b0 74 65 33 41 6e 61 6c 79 7a 65 28 50 61 72 73 65  te3Analyze(Parse
2b3c0 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
2b3d0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
2b3e0 6e 76 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65 72  nvokeBusyHandler
2b3f0 28 42 75 73 79 48 61 6e 64 6c 65 72 2a 29 3b 0a  (BusyHandler*);.
2b400 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44  int sqlite3FindD
2b410 62 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65  b(sqlite3*, Toke
2b420 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
2b430 46 69 6e 64 44 62 4e 61 6d 65 28 73 71 6c 69 74  FindDbName(sqlit
2b440 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  e3 *, const char
2b450 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
2b460 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 73 71 6c  AnalysisLoad(sql
2b470 69 74 65 33 2a 2c 69 6e 74 20 69 44 42 29 3b 0a  ite3*,int iDB);.
2b480 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
2b490 74 65 49 6e 64 65 78 53 61 6d 70 6c 65 73 28 73  teIndexSamples(s
2b4a0 71 6c 69 74 65 33 2a 2c 49 6e 64 65 78 2a 29 3b  qlite3*,Index*);
2b4b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66  .void sqlite3Def
2b4c0 61 75 6c 74 52 6f 77 45 73 74 28 49 6e 64 65 78  aultRowEst(Index
2b4d0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2b4e0 52 65 67 69 73 74 65 72 4c 69 6b 65 46 75 6e 63  RegisterLikeFunc
2b4f0 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 2c 20  tions(sqlite3*, 
2b500 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2b510 33 49 73 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 28  3IsLikeFunction(
2b520 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69  sqlite3*,Expr*,i
2b530 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nt*,char*);.void
2b540 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 43 6c   sqlite3SchemaCl
2b550 65 61 72 28 76 6f 69 64 20 2a 29 3b 0a 53 63 68  ear(void *);.Sch
2b560 65 6d 61 20 2a 73 71 6c 69 74 65 33 53 63 68 65  ema *sqlite3Sche
2b570 6d 61 47 65 74 28 73 71 6c 69 74 65 33 20 2a 2c  maGet(sqlite3 *,
2b580 20 42 74 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73   Btree *);.int s
2b590 71 6c 69 74 65 33 53 63 68 65 6d 61 54 6f 49 6e  qlite3SchemaToIn
2b5a0 64 65 78 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  dex(sqlite3 *db,
2b5b0 20 53 63 68 65 6d 61 20 2a 29 3b 0a 4b 65 79 49   Schema *);.KeyI
2b5c0 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49  nfo *sqlite3KeyI
2b5d0 6e 66 6f 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33  nfoAlloc(sqlite3
2b5e0 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64  *,int,int);.void
2b5f0 20 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 55   sqlite3KeyInfoU
2b600 6e 72 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a  nref(KeyInfo*);.
2b610 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33  KeyInfo *sqlite3
2b620 4b 65 79 49 6e 66 6f 52 65 66 28 4b 65 79 49 6e  KeyInfoRef(KeyIn
2b630 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73  fo*);.KeyInfo *s
2b640 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 4f 66 49  qlite3KeyInfoOfI
2b650 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 49 6e 64  ndex(Parse*, Ind
2b660 65 78 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  ex*);.#ifdef SQL
2b670 49 54 45 5f 44 45 42 55 47 0a 69 6e 74 20 73 71  ITE_DEBUG.int sq
2b680 6c 69 74 65 33 4b 65 79 49 6e 66 6f 49 73 57 72  lite3KeyInfoIsWr
2b690 69 74 65 61 62 6c 65 28 4b 65 79 49 6e 66 6f 2a  iteable(KeyInfo*
2b6a0 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71  );.#endif.int sq
2b6b0 6c 69 74 65 33 43 72 65 61 74 65 46 75 6e 63 28  lite3CreateFunc(
2b6c0 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74  sqlite3 *, const
2b6d0 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e   char *, int, in
2b6e0 74 2c 20 76 6f 69 64 20 2a 2c 0a 20 20 76 6f 69  t, void *,.  voi
2b6f0 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f  d (*)(sqlite3_co
2b700 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
2b710 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20  e3_value **),.  
2b720 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33  void (*)(sqlite3
2b730 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
2b740 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c  lite3_value **),
2b750 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65   void (*)(sqlite
2b760 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 46  3_context*),.  F
2b770 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70  uncDestructor *p
2b780 44 65 73 74 72 75 63 74 6f 72 0a 29 3b 0a 76 6f  Destructor.);.vo
2b790 69 64 20 73 71 6c 69 74 65 33 4f 6f 6d 46 61 75  id sqlite3OomFau
2b7a0 6c 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  lt(sqlite3*);.vo
2b7b0 69 64 20 73 71 6c 69 74 65 33 4f 6f 6d 43 6c 65  id sqlite3OomCle
2b7c0 61 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e  ar(sqlite3*);.in
2b7d0 74 20 73 71 6c 69 74 65 33 41 70 69 45 78 69 74  t sqlite3ApiExit
2b7e0 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e  (sqlite3 *db, in
2b7f0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f  t);.int sqlite3O
2b800 70 65 6e 54 65 6d 70 44 61 74 61 62 61 73 65 28  penTempDatabase(
2b810 50 61 72 73 65 20 2a 29 3b 0a 0a 76 6f 69 64 20  Parse *);..void 
2b820 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 49  sqlite3StrAccumI
2b830 6e 69 74 28 53 74 72 41 63 63 75 6d 2a 2c 20 73  nit(StrAccum*, s
2b840 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a 2c 20  qlite3*, char*, 
2b850 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
2b860 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41  sqlite3StrAccumA
2b870 70 70 65 6e 64 28 53 74 72 41 63 63 75 6d 2a 2c  ppend(StrAccum*,
2b880 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29  const char*,int)
2b890 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
2b8a0 72 41 63 63 75 6d 41 70 70 65 6e 64 41 6c 6c 28  rAccumAppendAll(
2b8b0 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20  StrAccum*,const 
2b8c0 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
2b8d0 69 74 65 33 41 70 70 65 6e 64 43 68 61 72 28 53  ite3AppendChar(S
2b8e0 74 72 41 63 63 75 6d 2a 2c 69 6e 74 2c 63 68 61  trAccum*,int,cha
2b8f0 72 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  r);.char *sqlite
2b900 33 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68 28  3StrAccumFinish(
2b910 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64  StrAccum*);.void
2b920 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
2b930 52 65 73 65 74 28 53 74 72 41 63 63 75 6d 2a 29  Reset(StrAccum*)
2b940 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
2b950 6c 65 63 74 44 65 73 74 49 6e 69 74 28 53 65 6c  lectDestInit(Sel
2b960 65 63 74 44 65 73 74 2a 2c 69 6e 74 2c 69 6e 74  ectDest*,int,int
2b970 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
2b980 43 72 65 61 74 65 43 6f 6c 75 6d 6e 45 78 70 72  CreateColumnExpr
2b990 28 73 71 6c 69 74 65 33 20 2a 2c 20 53 72 63 4c  (sqlite3 *, SrcL
2b9a0 69 73 74 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  ist *, int, int)
2b9b0 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  ;..void sqlite3B
2b9c0 61 63 6b 75 70 52 65 73 74 61 72 74 28 73 71 6c  ackupRestart(sql
2b9d0 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 29 3b 0a  ite3_backup *);.
2b9e0 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b  void sqlite3Back
2b9f0 75 70 55 70 64 61 74 65 28 73 71 6c 69 74 65 33  upUpdate(sqlite3
2ba00 5f 62 61 63 6b 75 70 20 2a 2c 20 50 67 6e 6f 2c  _backup *, Pgno,
2ba10 20 63 6f 6e 73 74 20 75 38 20 2a 29 3b 0a 0a 23   const u8 *);..#
2ba20 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2ba30 49 54 5f 53 55 42 51 55 45 52 59 0a 69 6e 74 20  IT_SUBQUERY.int 
2ba40 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b  sqlite3ExprCheck
2ba50 49 4e 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  IN(Parse*, Expr*
2ba60 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
2ba70 65 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65  e sqlite3ExprChe
2ba80 63 6b 49 4e 28 78 2c 79 29 20 53 51 4c 49 54 45  ckIN(x,y) SQLITE
2ba90 5f 4f 4b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  _OK.#endif..#ifd
2baa0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
2bab0 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a  _STAT3_OR_STAT4.
2bac0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e 61 6c  void sqlite3Anal
2bad0 79 7a 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69  yzeFunctions(voi
2bae0 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  d);.int sqlite3S
2baf0 74 61 74 34 50 72 6f 62 65 53 65 74 56 61 6c 75  tat4ProbeSetValu
2bb00 65 28 0a 20 20 20 20 50 61 72 73 65 2a 2c 49 6e  e(.    Parse*,In
2bb10 64 65 78 2a 2c 55 6e 70 61 63 6b 65 64 52 65 63  dex*,UnpackedRec
2bb20 6f 72 64 2a 2a 2c 45 78 70 72 2a 2c 69 6e 74 2c  ord**,Expr*,int,
2bb30 69 6e 74 2c 69 6e 74 2a 29 3b 0a 69 6e 74 20 73  int,int*);.int s
2bb40 71 6c 69 74 65 33 53 74 61 74 34 56 61 6c 75 65  qlite3Stat4Value
2bb50 46 72 6f 6d 45 78 70 72 28 50 61 72 73 65 2a 2c  FromExpr(Parse*,
2bb60 20 45 78 70 72 2a 2c 20 75 38 2c 20 73 71 6c 69   Expr*, u8, sqli
2bb70 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 76 6f  te3_value**);.vo
2bb80 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 34 50  id sqlite3Stat4P
2bb90 72 6f 62 65 46 72 65 65 28 55 6e 70 61 63 6b 65  robeFree(Unpacke
2bba0 64 52 65 63 6f 72 64 2a 29 3b 0a 69 6e 74 20 73  dRecord*);.int s
2bbb0 71 6c 69 74 65 33 53 74 61 74 34 43 6f 6c 75 6d  qlite3Stat4Colum
2bbc0 6e 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73  n(sqlite3*, cons
2bbd0 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 69 6e  t void*, int, in
2bbe0 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  t, sqlite3_value
2bbf0 2a 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65  **);.char sqlite
2bc00 33 49 6e 64 65 78 43 6f 6c 75 6d 6e 41 66 66 69  3IndexColumnAffi
2bc10 6e 69 74 79 28 73 71 6c 69 74 65 33 2a 2c 20 49  nity(sqlite3*, I
2bc20 6e 64 65 78 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e  ndex*, int);.#en
2bc30 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69  dif../*.** The i
2bc40 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20  nterface to the 
2bc50 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61 74 65 64 20  LEMON-generated 
2bc60 70 61 72 73 65 72 0a 2a 2f 0a 23 69 66 6e 64 65  parser.*/.#ifnde
2bc70 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d  f SQLITE_AMALGAM
2bc80 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20 2a 73 71  ATION.  void *sq
2bc90 6c 69 74 65 33 50 61 72 73 65 72 41 6c 6c 6f 63  lite3ParserAlloc
2bca0 28 76 6f 69 64 2a 28 2a 29 28 75 36 34 29 29 3b  (void*(*)(u64));
2bcb0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 50  .  void sqlite3P
2bcc0 61 72 73 65 72 46 72 65 65 28 76 6f 69 64 2a 2c  arserFree(void*,
2bcd0 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29   void(*)(void*))
2bce0 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ;.#endif.void sq
2bcf0 6c 69 74 65 33 50 61 72 73 65 72 28 76 6f 69 64  lite3Parser(void
2bd00 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2c 20 50  *, int, Token, P
2bd10 61 72 73 65 2a 29 3b 0a 23 69 66 64 65 66 20 59  arse*);.#ifdef Y
2bd20 59 54 52 41 43 4b 4d 41 58 53 54 41 43 4b 44 45  YTRACKMAXSTACKDE
2bd30 50 54 48 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  PTH.  int sqlite
2bd40 33 50 61 72 73 65 72 53 74 61 63 6b 50 65 61 6b  3ParserStackPeak
2bd50 28 76 6f 69 64 2a 29 3b 0a 23 65 6e 64 69 66 0a  (void*);.#endif.
2bd60 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74  .void sqlite3Aut
2bd70 6f 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 73 28  oLoadExtensions(
2bd80 73 71 6c 69 74 65 33 2a 29 3b 0a 23 69 66 6e 64  sqlite3*);.#ifnd
2bd90 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c  ef SQLITE_OMIT_L
2bda0 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20  OAD_EXTENSION.  
2bdb0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73  void sqlite3Clos
2bdc0 65 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69  eExtensions(sqli
2bdd0 74 65 33 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  te3*);.#else.# d
2bde0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6c 6f  efine sqlite3Clo
2bdf0 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 58 29 0a  seExtensions(X).
2be00 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
2be10 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52  SQLITE_OMIT_SHAR
2be20 45 44 5f 43 41 43 48 45 0a 20 20 76 6f 69 64 20  ED_CACHE.  void 
2be30 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b  sqlite3TableLock
2be40 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 2c 20 69  (Parse *, int, i
2be50 6e 74 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63 68  nt, u8, const ch
2be60 61 72 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23  ar *);.#else.  #
2be70 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 61  define sqlite3Ta
2be80 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c 79 2c  bleLock(v,w,x,y,
2be90 7a 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  z).#endif..#ifde
2bea0 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
2beb0 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38 54  int sqlite3Utf8T
2bec0 6f 38 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  o8(unsigned char
2bed0 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  *);.#endif..#ifd
2bee0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
2bef0 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64  IRTUALTABLE.#  d
2bf00 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
2bf10 62 43 6c 65 61 72 28 59 29 0a 23 20 20 64 65 66  bClear(Y).#  def
2bf20 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 53  ine sqlite3VtabS
2bf30 79 6e 63 28 58 2c 59 29 20 53 51 4c 49 54 45 5f  ync(X,Y) SQLITE_
2bf40 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  OK.#  define sql
2bf50 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b  ite3VtabRollback
2bf60 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (X).#  define sq
2bf70 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28  lite3VtabCommit(
2bf80 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  X).#  define sql
2bf90 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64  ite3VtabInSync(d
2bfa0 62 29 20 30 0a 23 20 20 64 65 66 69 6e 65 20 73  b) 0.#  define s
2bfb0 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 58  qlite3VtabLock(X
2bfc0 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
2bfd0 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 58 29  te3VtabUnlock(X)
2bfe0 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
2bff0 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74  e3VtabUnlockList
2c000 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (X).#  define sq
2c010 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69  lite3VtabSavepoi
2c020 6e 74 28 58 2c 20 59 2c 20 5a 29 20 53 51 4c 49  nt(X, Y, Z) SQLI
2c030 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20  TE_OK.#  define 
2c040 73 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65  sqlite3GetVTable
2c050 28 58 2c 59 29 20 20 28 28 56 54 61 62 6c 65 2a  (X,Y)  ((VTable*
2c060 29 30 29 0a 23 65 6c 73 65 0a 20 20 20 76 6f 69  )0).#else.   voi
2c070 64 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65  d sqlite3VtabCle
2c080 61 72 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  ar(sqlite3 *db, 
2c090 54 61 62 6c 65 2a 29 3b 0a 20 20 20 76 6f 69 64  Table*);.   void
2c0a0 20 73 71 6c 69 74 65 33 56 74 61 62 44 69 73 63   sqlite3VtabDisc
2c0b0 6f 6e 6e 65 63 74 28 73 71 6c 69 74 65 33 20 2a  onnect(sqlite3 *
2c0c0 64 62 2c 20 54 61 62 6c 65 20 2a 70 29 3b 0a 20  db, Table *p);. 
2c0d0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61    int sqlite3Vta
2c0e0 62 53 79 6e 63 28 73 71 6c 69 74 65 33 20 2a 64  bSync(sqlite3 *d
2c0f0 62 2c 20 56 64 62 65 2a 29 3b 0a 20 20 20 69 6e  b, Vdbe*);.   in
2c100 74 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c  t sqlite3VtabRol
2c110 6c 62 61 63 6b 28 73 71 6c 69 74 65 33 20 2a 64  lback(sqlite3 *d
2c120 62 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74  b);.   int sqlit
2c130 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 73 71 6c  e3VtabCommit(sql
2c140 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 76 6f  ite3 *db);.   vo
2c150 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f  id sqlite3VtabLo
2c160 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20  ck(VTable *);.  
2c170 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
2c180 62 55 6e 6c 6f 63 6b 28 56 54 61 62 6c 65 20 2a  bUnlock(VTable *
2c190 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
2c1a0 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74  e3VtabUnlockList
2c1b0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20 20 69  (sqlite3*);.   i
2c1c0 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 53 61  nt sqlite3VtabSa
2c1d0 76 65 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 20  vepoint(sqlite3 
2c1e0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20  *, int, int);.  
2c1f0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
2c200 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 56 64  bImportErrmsg(Vd
2c210 62 65 2a 2c 20 73 71 6c 69 74 65 33 5f 76 74 61  be*, sqlite3_vta
2c220 62 2a 29 3b 0a 20 20 20 56 54 61 62 6c 65 20 2a  b*);.   VTable *
2c230 73 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65  sqlite3GetVTable
2c240 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65  (sqlite3*, Table
2c250 2a 29 3b 0a 20 20 20 4d 6f 64 75 6c 65 20 2a 73  *);.   Module *s
2c260 71 6c 69 74 65 33 56 74 61 62 43 72 65 61 74 65  qlite3VtabCreate
2c270 4d 6f 64 75 6c 65 28 0a 20 20 20 20 20 73 71 6c  Module(.     sql
2c280 69 74 65 33 2a 2c 0a 20 20 20 20 20 63 6f 6e 73  ite3*,.     cons
2c290 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 63 6f  t char*,.     co
2c2a0 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
2c2b0 6c 65 2a 2c 0a 20 20 20 20 20 76 6f 69 64 2a 2c  le*,.     void*,
2c2c0 0a 20 20 20 20 20 76 6f 69 64 28 2a 29 28 76 6f  .     void(*)(vo
2c2d0 69 64 2a 29 0a 20 20 20 29 3b 0a 23 20 20 64 65  id*).   );.#  de
2c2e0 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
2c2f0 49 6e 53 79 6e 63 28 64 62 29 20 28 28 64 62 29  InSync(db) ((db)
2c300 2d 3e 6e 56 54 72 61 6e 73 3e 30 20 26 26 20 28  ->nVTrans>0 && (
2c310 64 62 29 2d 3e 61 56 54 72 61 6e 73 3d 3d 30 29  db)->aVTrans==0)
2c320 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69  .#endif.int sqli
2c330 74 65 33 56 74 61 62 45 70 6f 6e 79 6d 6f 75 73  te3VtabEponymous
2c340 54 61 62 6c 65 49 6e 69 74 28 50 61 72 73 65 2a  TableInit(Parse*
2c350 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69 64 20  ,Module*);.void 
2c360 73 71 6c 69 74 65 33 56 74 61 62 45 70 6f 6e 79  sqlite3VtabEpony
2c370 6d 6f 75 73 54 61 62 6c 65 43 6c 65 61 72 28 73  mousTableClear(s
2c380 71 6c 69 74 65 33 2a 2c 4d 6f 64 75 6c 65 2a 29  qlite3*,Module*)
2c390 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  ;.void sqlite3Vt
2c3a0 61 62 4d 61 6b 65 57 72 69 74 61 62 6c 65 28 50  abMakeWritable(P
2c3b0 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76  arse*,Table*);.v
2c3c0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 42  oid sqlite3VtabB
2c3d0 65 67 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a  eginParse(Parse*
2c3e0 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
2c3f0 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a  , Token*, int);.
2c400 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
2c410 46 69 6e 69 73 68 50 61 72 73 65 28 50 61 72 73  FinishParse(Pars
2c420 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  e*, Token*);.voi
2c430 64 20 73 71 6c 69 74 65 33 56 74 61 62 41 72 67  d sqlite3VtabArg
2c440 49 6e 69 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f  Init(Parse*);.vo
2c450 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 41 72  id sqlite3VtabAr
2c460 67 45 78 74 65 6e 64 28 50 61 72 73 65 2a 2c 20  gExtend(Parse*, 
2c470 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
2c480 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61  ite3VtabCallCrea
2c490 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  te(sqlite3*, int
2c4a0 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
2c4b0 63 68 61 72 20 2a 2a 29 3b 0a 69 6e 74 20 73 71  char **);.int sq
2c4c0 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 6f 6e  lite3VtabCallCon
2c4d0 6e 65 63 74 28 50 61 72 73 65 2a 2c 20 54 61 62  nect(Parse*, Tab
2c4e0 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  le*);.int sqlite
2c4f0 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79  3VtabCallDestroy
2c500 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20  (sqlite3*, int, 
2c510 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69  const char *);.i
2c520 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 42 65  nt sqlite3VtabBe
2c530 67 69 6e 28 73 71 6c 69 74 65 33 20 2a 2c 20 56  gin(sqlite3 *, V
2c540 54 61 62 6c 65 20 2a 29 3b 0a 46 75 6e 63 44 65  Table *);.FuncDe
2c550 66 20 2a 73 71 6c 69 74 65 33 56 74 61 62 4f 76  f *sqlite3VtabOv
2c560 65 72 6c 6f 61 64 46 75 6e 63 74 69 6f 6e 28 73  erloadFunction(s
2c570 71 6c 69 74 65 33 20 2a 2c 46 75 6e 63 44 65 66  qlite3 *,FuncDef
2c580 2a 2c 20 69 6e 74 20 6e 41 72 67 2c 20 45 78 70  *, int nArg, Exp
2c590 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
2c5a0 33 49 6e 76 61 6c 69 64 46 75 6e 63 74 69 6f 6e  3InvalidFunction
2c5b0 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
2c5c0 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
2c5d0 6c 75 65 2a 2a 29 3b 0a 73 71 6c 69 74 65 33 5f  lue**);.sqlite3_
2c5e0 69 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74 6d  int64 sqlite3Stm
2c5f0 74 43 75 72 72 65 6e 74 54 69 6d 65 28 73 71 6c  tCurrentTime(sql
2c600 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 0a  ite3_context*);.
2c610 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 50  int sqlite3VdbeP
2c620 61 72 61 6d 65 74 65 72 49 6e 64 65 78 28 56 64  arameterIndex(Vd
2c630 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  be*, const char*
2c640 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
2c650 74 65 33 54 72 61 6e 73 66 65 72 42 69 6e 64 69  te3TransferBindi
2c660 6e 67 73 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  ngs(sqlite3_stmt
2c670 20 2a 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d 74   *, sqlite3_stmt
2c680 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
2c690 33 50 61 72 73 65 72 52 65 73 65 74 28 50 61 72  3ParserReset(Par
2c6a0 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  se*);.int sqlite
2c6b0 33 52 65 70 72 65 70 61 72 65 28 56 64 62 65 2a  3Reprepare(Vdbe*
2c6c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
2c6d0 78 70 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e 67  xprListCheckLeng
2c6e0 74 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c  th(Parse*, ExprL
2c6f0 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  ist*, const char
2c700 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  *);.CollSeq *sql
2c710 69 74 65 33 42 69 6e 61 72 79 43 6f 6d 70 61 72  ite3BinaryCompar
2c720 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a  eCollSeq(Parse *
2c730 2c 20 45 78 70 72 20 2a 2c 20 45 78 70 72 20 2a  , Expr *, Expr *
2c740 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 65  );.int sqlite3Te
2c750 6d 70 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73 74  mpInMemory(const
2c760 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e 73   sqlite3*);.cons
2c770 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4a  t char *sqlite3J
2c780 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69  ournalModename(i
2c790 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  nt);.#ifndef SQL
2c7a0 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69  ITE_OMIT_WAL.  i
2c7b0 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70  nt sqlite3Checkp
2c7c0 6f 69 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20 69  oint(sqlite3*, i
2c7d0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69  nt, int, int*, i
2c7e0 6e 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  nt*);.  int sqli
2c7f0 74 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f  te3WalDefaultHoo
2c800 6b 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a  k(void*,sqlite3*
2c810 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74  ,const char*,int
2c820 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  );.#endif.#ifnde
2c830 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 54  f SQLITE_OMIT_CT
2c840 45 0a 20 20 57 69 74 68 20 2a 73 71 6c 69 74 65  E.  With *sqlite
2c850 33 57 69 74 68 41 64 64 28 50 61 72 73 65 2a 2c  3WithAdd(Parse*,
2c860 57 69 74 68 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70  With*,Token*,Exp
2c870 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 29 3b  rList*,Select*);
2c880 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 57  .  void sqlite3W
2c890 69 74 68 44 65 6c 65 74 65 28 73 71 6c 69 74 65  ithDelete(sqlite
2c8a0 33 2a 2c 57 69 74 68 2a 29 3b 0a 20 20 76 6f 69  3*,With*);.  voi
2c8b0 64 20 73 71 6c 69 74 65 33 57 69 74 68 50 75 73  d sqlite3WithPus
2c8c0 68 28 50 61 72 73 65 2a 2c 20 57 69 74 68 2a 2c  h(Parse*, With*,
2c8d0 20 75 38 29 3b 0a 23 65 6c 73 65 0a 23 64 65 66   u8);.#else.#def
2c8e0 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68 50  ine sqlite3WithP
2c8f0 75 73 68 28 78 2c 79 2c 7a 29 0a 23 64 65 66 69  ush(x,y,z).#defi
2c900 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68 44 65  ne sqlite3WithDe
2c910 6c 65 74 65 28 78 2c 79 29 0a 23 65 6e 64 69 66  lete(x,y).#endif
2c920 0a 0a 2f 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e  ../* Declaration
2c930 73 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20  s for functions 
2c940 69 6e 20 66 6b 65 79 2e 63 2e 20 41 6c 6c 20 6f  in fkey.c. All o
2c950 66 20 74 68 65 73 65 20 61 72 65 20 72 65 70 6c  f these are repl
2c960 61 63 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d 6f 70  aced by.** no-op
2c970 20 6d 61 63 72 6f 73 20 69 66 20 4f 4d 49 54 5f   macros if OMIT_
2c980 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 64  FOREIGN_KEY is d
2c990 65 66 69 6e 65 64 2e 20 49 6e 20 74 68 69 73 20  efined. In this 
2c9a0 63 61 73 65 20 6e 6f 20 66 6f 72 65 69 67 6e 0a  case no foreign.
2c9b0 2a 2a 20 6b 65 79 20 66 75 6e 63 74 69 6f 6e 61  ** key functiona
2c9c0 6c 69 74 79 20 69 73 20 61 76 61 69 6c 61 62 6c  lity is availabl
2c9d0 65 2e 20 49 66 20 4f 4d 49 54 5f 54 52 49 47 47  e. If OMIT_TRIGG
2c9e0 45 52 20 69 73 20 64 65 66 69 6e 65 64 20 62 75  ER is defined bu
2c9f0 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45 49 47  t.** OMIT_FOREIG
2ca00 4e 5f 4b 45 59 20 69 73 20 6e 6f 74 2c 20 6f 6e  N_KEY is not, on
2ca10 6c 79 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 66  ly some of the f
2ca20 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 6e 6f 2d  unctions are no-
2ca30 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20 74 68 69 73  oped. In.** this
2ca40 20 63 61 73 65 20 66 6f 72 65 69 67 6e 20 6b 65   case foreign ke
2ca50 79 73 20 61 72 65 20 70 61 72 73 65 64 2c 20 62  ys are parsed, b
2ca60 75 74 20 6e 6f 20 6f 74 68 65 72 20 66 75 6e 63  ut no other func
2ca70 74 69 6f 6e 61 6c 69 74 79 20 69 73 0a 2a 2a 20  tionality is.** 
2ca80 70 72 6f 76 69 64 65 64 20 28 65 6e 66 6f 72 63  provided (enforc
2ca90 65 6d 65 6e 74 20 6f 66 20 46 4b 20 63 6f 6e 73  ement of FK cons
2caa0 74 72 61 69 6e 74 73 20 72 65 71 75 69 72 65 73  traints requires
2cab0 20 74 68 65 20 74 72 69 67 67 65 72 73 20 73 75   the triggers su
2cac0 62 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a 23 69  b-system)..*/.#i
2cad0 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
2cae0 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
2caf0 45 59 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  EY) && !defined(
2cb00 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47  SQLITE_OMIT_TRIG
2cb10 47 45 52 29 0a 20 20 76 6f 69 64 20 73 71 6c 69  GER).  void sqli
2cb20 74 65 33 46 6b 43 68 65 63 6b 28 50 61 72 73 65  te3FkCheck(Parse
2cb30 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
2cb40 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b  int, int*, int);
2cb50 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46  .  void sqlite3F
2cb60 6b 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65  kDropTable(Parse
2cb70 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 61  *, SrcList *, Ta
2cb80 62 6c 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ble*);.  void sq
2cb90 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 50  lite3FkActions(P
2cba0 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45  arse*, Table*, E
2cbb0 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69  xprList*, int, i
2cbc0 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74  nt*, int);.  int
2cbd0 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72   sqlite3FkRequir
2cbe0 65 64 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  ed(Parse*, Table
2cbf0 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20  *, int*, int);. 
2cc00 20 75 33 32 20 73 71 6c 69 74 65 33 46 6b 4f 6c   u32 sqlite3FkOl
2cc10 64 6d 61 73 6b 28 50 61 72 73 65 2a 2c 20 54 61  dmask(Parse*, Ta
2cc20 62 6c 65 2a 29 3b 0a 20 20 46 4b 65 79 20 2a 73  ble*);.  FKey *s
2cc30 71 6c 69 74 65 33 46 6b 52 65 66 65 72 65 6e 63  qlite3FkReferenc
2cc40 65 73 28 54 61 62 6c 65 20 2a 29 3b 0a 23 65 6c  es(Table *);.#el
2cc50 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
2cc60 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 61 2c  ite3FkActions(a,
2cc70 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65  b,c,d,e,f).  #de
2cc80 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 43 68  fine sqlite3FkCh
2cc90 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29  eck(a,b,c,d,e,f)
2cca0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
2ccb0 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 61 2c  e3FkDropTable(a,
2ccc0 62 2c 63 29 0a 20 20 23 64 65 66 69 6e 65 20 73  b,c).  #define s
2ccd0 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28  qlite3FkOldmask(
2cce0 61 2c 62 29 20 20 20 20 20 20 20 20 20 30 0a 20  a,b)         0. 
2ccf0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2cd00 46 6b 52 65 71 75 69 72 65 64 28 61 2c 62 2c 63  FkRequired(a,b,c
2cd10 2c 64 29 20 20 20 20 30 0a 20 20 23 64 65 66 69  ,d)    0.  #defi
2cd20 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65 66 65  ne sqlite3FkRefe
2cd30 72 65 6e 63 65 73 28 61 29 20 20 20 20 20 20 20  rences(a)       
2cd40 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65   0.#endif.#ifnde
2cd50 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  f SQLITE_OMIT_FO
2cd60 52 45 49 47 4e 5f 4b 45 59 0a 20 20 76 6f 69 64  REIGN_KEY.  void
2cd70 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65   sqlite3FkDelete
2cd80 28 73 71 6c 69 74 65 33 20 2a 2c 20 54 61 62 6c  (sqlite3 *, Tabl
2cd90 65 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  e*);.  int sqlit
2cda0 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28  e3FkLocateIndex(
2cdb0 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 46 4b  Parse*,Table*,FK
2cdc0 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69 6e 74 2a  ey*,Index**,int*
2cdd0 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  *);.#else.  #def
2cde0 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 65 6c  ine sqlite3FkDel
2cdf0 65 74 65 28 61 2c 62 29 0a 20 20 23 64 65 66 69  ete(a,b).  #defi
2ce00 6e 65 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61  ne sqlite3FkLoca
2ce10 74 65 49 6e 64 65 78 28 61 2c 62 2c 63 2c 64 2c  teIndex(a,b,c,d,
2ce20 65 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a  e).#endif.../*.*
2ce30 2a 20 41 76 61 69 6c 61 62 6c 65 20 66 61 75 6c  * Available faul
2ce40 74 20 69 6e 6a 65 63 74 6f 72 73 2e 20 20 53 68  t injectors.  Sh
2ce50 6f 75 6c 64 20 62 65 20 6e 75 6d 62 65 72 65 64  ould be numbered
2ce60 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
2ce70 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  0..*/.#define SQ
2ce80 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54  LITE_FAULTINJECT
2ce90 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 30 0a  OR_MALLOC     0.
2cea0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
2ceb0 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 43 4f 55  AULTINJECTOR_COU
2cec0 4e 54 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a  NT      1../*.**
2ced0 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 74   The interface t
2cee0 6f 20 74 68 65 20 63 6f 64 65 20 69 6e 20 66 61  o the code in fa
2cef0 75 6c 74 2e 63 20 75 73 65 64 20 66 6f 72 20 69  ult.c used for i
2cf00 64 65 6e 74 69 66 79 69 6e 67 20 22 62 65 6e 69  dentifying "beni
2cf10 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20 66 61  gn".** malloc fa
2cf20 69 6c 75 72 65 73 2e 20 54 68 69 73 20 69 73 20  ilures. This is 
2cf30 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20 69 66 20  only present if 
2cf40 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c  SQLITE_UNTESTABL
2cf50 45 0a 2a 2a 20 69 73 20 6e 6f 74 20 64 65 66 69  E.** is not defi
2cf60 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ned..*/.#ifndef 
2cf70 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c  SQLITE_UNTESTABL
2cf80 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  E.  void sqlite3
2cf90 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f  BeginBenignMallo
2cfa0 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f 69 64 20  c(void);.  void 
2cfb0 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e  sqlite3EndBenign
2cfc0 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 23 65  Malloc(void);.#e
2cfd0 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
2cfe0 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e  lite3BeginBenign
2cff0 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64 65 66 69  Malloc().  #defi
2d000 6e 65 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e  ne sqlite3EndBen
2d010 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65 6e 64  ignMalloc().#end
2d020 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  if../*.** Allowe
2d030 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20  d return values 
2d040 66 72 6f 6d 20 73 71 6c 69 74 65 33 46 69 6e 64  from sqlite3Find
2d050 49 6e 49 6e 64 65 78 28 29 0a 2a 2f 0a 23 64 65  InIndex().*/.#de
2d060 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 52 4f  fine IN_INDEX_RO
2d070 57 49 44 20 20 20 20 20 20 20 20 31 20 20 20 2f  WID        1   /
2d080 2a 20 53 65 61 72 63 68 20 74 68 65 20 72 6f 77  * Search the row
2d090 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  id of the table 
2d0a0 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
2d0b0 44 45 58 5f 45 50 48 20 20 20 20 20 20 20 20 20  DEX_EPH         
2d0c0 20 32 20 20 20 2f 2a 20 53 65 61 72 63 68 20 61   2   /* Search a
2d0d0 6e 20 65 70 68 65 6d 65 72 61 6c 20 62 2d 74 72  n ephemeral b-tr
2d0e0 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  ee */.#define IN
2d0f0 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 41 53 43  _INDEX_INDEX_ASC
2d100 20 20 20 20 33 20 20 20 2f 2a 20 45 78 69 73 74      3   /* Exist
2d110 69 6e 67 20 69 6e 64 65 78 20 41 53 43 45 4e 44  ing index ASCEND
2d120 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  ING */.#define I
2d130 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 44 45  N_INDEX_INDEX_DE
2d140 53 43 20 20 20 34 20 20 20 2f 2a 20 45 78 69 73  SC   4   /* Exis
2d150 74 69 6e 67 20 69 6e 64 65 78 20 44 45 53 43 45  ting index DESCE
2d160 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65  NDING */.#define
2d170 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 20   IN_INDEX_NOOP  
2d180 20 20 20 20 20 20 20 35 20 20 20 2f 2a 20 4e 6f         5   /* No
2d190 20 74 61 62 6c 65 20 61 76 61 69 6c 61 62 6c 65   table available
2d1a0 2e 20 55 73 65 20 63 6f 6d 70 61 72 69 73 6f 6e  . Use comparison
2d1b0 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  s */./*.** Allow
2d1c0 65 64 20 66 6c 61 67 73 20 66 6f 72 20 74 68 65  ed flags for the
2d1d0 20 33 72 64 20 70 61 72 61 6d 65 74 65 72 20 74   3rd parameter t
2d1e0 6f 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49  o sqlite3FindInI
2d1f0 6e 64 65 78 28 29 2e 0a 2a 2f 0a 23 64 65 66 69  ndex()..*/.#defi
2d200 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50  ne IN_INDEX_NOOP
2d210 5f 4f 4b 20 20 20 20 20 30 78 30 30 30 31 20 20  _OK     0x0001  
2d220 2f 2a 20 4f 4b 20 74 6f 20 72 65 74 75 72 6e 20  /* OK to return 
2d230 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 2a 2f  IN_INDEX_NOOP */
2d240 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
2d250 58 5f 4d 45 4d 42 45 52 53 48 49 50 20 20 30 78  X_MEMBERSHIP  0x
2d260 30 30 30 32 20 20 2f 2a 20 49 4e 20 6f 70 65 72  0002  /* IN oper
2d270 61 74 6f 72 20 75 73 65 64 20 66 6f 72 20 6d 65  ator used for me
2d280 6d 62 65 72 73 68 69 70 20 74 65 73 74 20 2a 2f  mbership test */
2d290 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
2d2a0 58 5f 4c 4f 4f 50 20 20 20 20 20 20 20 20 30 78  X_LOOP        0x
2d2b0 30 30 30 34 20 20 2f 2a 20 49 4e 20 6f 70 65 72  0004  /* IN oper
2d2c0 61 74 6f 72 20 75 73 65 64 20 61 73 20 61 20 6c  ator used as a l
2d2d0 6f 6f 70 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  oop */.int sqlit
2d2e0 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 50 61  e3FindInIndex(Pa
2d2f0 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75  rse *, Expr *, u
2d300 33 32 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b  32, int*, int*);
2d310 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75  ..int sqlite3Jou
2d320 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33  rnalOpen(sqlite3
2d330 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20 63 68  _vfs *, const ch
2d340 61 72 20 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69  ar *, sqlite3_fi
2d350 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  le *, int, int);
2d360 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72  .int sqlite3Jour
2d370 6e 61 6c 53 69 7a 65 28 73 71 6c 69 74 65 33 5f  nalSize(sqlite3_
2d380 76 66 73 20 2a 29 3b 0a 23 69 66 20 64 65 66 69  vfs *);.#if defi
2d390 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
2d3a0 45 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 29 20  E_ATOMIC_WRITE) 
2d3b0 5c 0a 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  \. || defined(SQ
2d3c0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 42 41 54 43  LITE_ENABLE_BATC
2d3d0 48 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 29 0a  H_ATOMIC_WRITE).
2d3e0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75    int sqlite3Jou
2d3f0 72 6e 61 6c 43 72 65 61 74 65 28 73 71 6c 69 74  rnalCreate(sqlit
2d400 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 23 65 6e 64  e3_file *);.#end
2d410 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a  if..int sqlite3J
2d420 6f 75 72 6e 61 6c 49 73 49 6e 4d 65 6d 6f 72 79  ournalIsInMemory
2d430 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70  (sqlite3_file *p
2d440 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
2d450 65 6d 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71  emJournalOpen(sq
2d460 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 0a  lite3_file *);..
2d470 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
2d480 53 65 74 48 65 69 67 68 74 41 6e 64 46 6c 61 67  SetHeightAndFlag
2d490 73 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  s(Parse *pParse,
2d4a0 20 45 78 70 72 20 2a 70 29 3b 0a 23 69 66 20 53   Expr *p);.#if S
2d4b0 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44  QLITE_MAX_EXPR_D
2d4c0 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 73 71 6c  EPTH>0.  int sql
2d4d0 69 74 65 33 53 65 6c 65 63 74 45 78 70 72 48 65  ite3SelectExprHe
2d4e0 69 67 68 74 28 53 65 6c 65 63 74 20 2a 29 3b 0a  ight(Select *);.
2d4f0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70    int sqlite3Exp
2d500 72 43 68 65 63 6b 48 65 69 67 68 74 28 50 61 72  rCheckHeight(Par
2d510 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65  se*, int);.#else
2d520 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
2d530 65 33 53 65 6c 65 63 74 45 78 70 72 48 65 69 67  e3SelectExprHeig
2d540 68 74 28 78 29 20 30 0a 20 20 23 64 65 66 69 6e  ht(x) 0.  #defin
2d550 65 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65  e sqlite3ExprChe
2d560 63 6b 48 65 69 67 68 74 28 78 2c 79 29 0a 23 65  ckHeight(x,y).#e
2d570 6e 64 69 66 0a 0a 75 33 32 20 73 71 6c 69 74 65  ndif..u32 sqlite
2d580 33 47 65 74 34 62 79 74 65 28 63 6f 6e 73 74 20  3Get4byte(const 
2d590 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  u8*);.void sqlit
2d5a0 65 33 50 75 74 34 62 79 74 65 28 75 38 2a 2c 20  e3Put4byte(u8*, 
2d5b0 75 33 32 29 3b 0a 0a 23 69 66 64 65 66 20 53 51  u32);..#ifdef SQ
2d5c0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f  LITE_ENABLE_UNLO
2d5d0 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 76 6f 69 64  CK_NOTIFY.  void
2d5e0 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
2d5f0 6f 6e 42 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65  onBlocked(sqlite
2d600 33 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 29 3b  3 *, sqlite3 *);
2d610 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
2d620 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65  onnectionUnlocke
2d630 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a  d(sqlite3 *db);.
2d640 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
2d650 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 73  nnectionClosed(s
2d660 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 23 65 6c  qlite3 *db);.#el
2d670 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
2d680 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c  ite3ConnectionBl
2d690 6f 63 6b 65 64 28 78 2c 79 29 0a 20 20 23 64 65  ocked(x,y).  #de
2d6a0 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e  fine sqlite3Conn
2d6b0 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 78  ectionUnlocked(x
2d6c0 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
2d6d0 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f  te3ConnectionClo
2d6e0 73 65 64 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23  sed(x).#endif..#
2d6f0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
2d700 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  UG.  void sqlite
2d710 33 50 61 72 73 65 72 54 72 61 63 65 28 46 49 4c  3ParserTrace(FIL
2d720 45 2a 2c 20 63 68 61 72 20 2a 29 3b 0a 23 65 6e  E*, char *);.#en
2d730 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68  dif../*.** If th
2d740 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 20  e SQLITE_ENABLE 
2d750 49 4f 54 52 41 43 45 20 65 78 69 73 74 73 20 74  IOTRACE exists t
2d760 68 65 6e 20 74 68 65 20 67 6c 6f 62 61 6c 20 76  hen the global v
2d770 61 72 69 61 62 6c 65 0a 2a 2a 20 73 71 6c 69 74  ariable.** sqlit
2d780 65 33 49 6f 54 72 61 63 65 20 69 73 20 61 20 70  e3IoTrace is a p
2d790 6f 69 6e 74 65 72 20 74 6f 20 61 20 70 72 69 6e  ointer to a prin
2d7a0 74 66 2d 6c 69 6b 65 20 72 6f 75 74 69 6e 65 20  tf-like routine 
2d7b0 75 73 65 64 20 74 6f 0a 2a 2a 20 70 72 69 6e 74  used to.** print
2d7c0 20 49 2f 4f 20 74 72 61 63 69 6e 67 20 6d 65 73   I/O tracing mes
2d7d0 73 61 67 65 73 2e 0a 2a 2f 0a 23 69 66 64 65 66  sages..*/.#ifdef
2d7e0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49   SQLITE_ENABLE_I
2d7f0 4f 54 52 41 43 45 0a 23 20 64 65 66 69 6e 65 20  OTRACE.# define 
2d800 49 4f 54 52 41 43 45 28 41 29 20 20 69 66 28 20  IOTRACE(A)  if( 
2d810 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 29  sqlite3IoTrace )
2d820 7b 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65  { sqlite3IoTrace
2d830 20 41 3b 20 7d 0a 20 20 76 6f 69 64 20 73 71 6c   A; }.  void sql
2d840 69 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53  ite3VdbeIOTraceS
2d850 71 6c 28 56 64 62 65 2a 29 3b 0a 53 51 4c 49 54  ql(Vdbe*);.SQLIT
2d860 45 5f 41 50 49 20 53 51 4c 49 54 45 5f 45 58 54  E_API SQLITE_EXT
2d870 45 52 4e 20 76 6f 69 64 20 28 53 51 4c 49 54 45  ERN void (SQLITE
2d880 5f 43 44 45 43 4c 20 2a 73 71 6c 69 74 65 33 49  _CDECL *sqlite3I
2d890 6f 54 72 61 63 65 29 28 63 6f 6e 73 74 20 63 68  oTrace)(const ch
2d8a0 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c 73 65 0a  ar*,...);.#else.
2d8b0 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45  # define IOTRACE
2d8c0 28 41 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  (A).# define sql
2d8d0 69 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53  ite3VdbeIOTraceS
2d8e0 71 6c 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ql(X).#endif../*
2d8f0 0a 2a 2a 20 54 68 65 73 65 20 72 6f 75 74 69 6e  .** These routin
2d900 65 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65  es are available
2d910 20 66 6f 72 20 74 68 65 20 6d 65 6d 32 2e 63 20   for the mem2.c 
2d920 64 65 62 75 67 67 69 6e 67 20 6d 65 6d 6f 72 79  debugging memory
2d930 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20 6f 6e   allocator.** on
2d940 6c 79 2e 20 20 54 68 65 79 20 61 72 65 20 75 73  ly.  They are us
2d950 65 64 20 74 6f 20 76 65 72 69 66 79 20 74 68 61  ed to verify tha
2d960 74 20 64 69 66 66 65 72 65 6e 74 20 22 74 79 70  t different "typ
2d970 65 73 22 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a  es" of memory.**
2d980 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65   allocations are
2d990 20 70 72 6f 70 65 72 6c 79 20 74 72 61 63 6b 65   properly tracke
2d9a0 64 20 62 79 20 74 68 65 20 73 79 73 74 65 6d 2e  d by the system.
2d9b0 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65  .**.** sqlite3Me
2d9c0 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29 20  mdebugSetType() 
2d9d0 73 65 74 73 20 74 68 65 20 22 74 79 70 65 22 20  sets the "type" 
2d9e0 6f 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e  of an allocation
2d9f0 20 74 6f 20 6f 6e 65 20 6f 66 0a 2a 2a 20 74 68   to one of.** th
2da00 65 20 4d 45 4d 54 59 50 45 5f 2a 20 6d 61 63 72  e MEMTYPE_* macr
2da10 6f 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77  os defined below
2da20 2e 20 20 54 68 65 20 74 79 70 65 20 6d 75 73 74  .  The type must
2da30 20 62 65 20 61 20 62 69 74 6d 61 73 6b 20 77 69   be a bitmask wi
2da40 74 68 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 62  th.** a single b
2da50 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 73 71  it set..**.** sq
2da60 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73  lite3MemdebugHas
2da70 54 79 70 65 28 29 20 72 65 74 75 72 6e 73 20 74  Type() returns t
2da80 72 75 65 20 69 66 20 61 6e 79 20 6f 66 20 74 68  rue if any of th
2da90 65 20 62 69 74 73 20 69 6e 20 69 74 73 20 73 65  e bits in its se
2daa0 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  cond.** argument
2dab0 20 6d 61 74 63 68 20 74 68 65 20 74 79 70 65 20   match the type 
2dac0 73 65 74 20 62 79 20 74 68 65 20 70 72 65 76 69  set by the previ
2dad0 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  ous sqlite3Memde
2dae0 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a  bugSetType()..**
2daf0 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
2db00 48 61 73 54 79 70 65 28 29 20 69 73 20 69 6e 74  HasType() is int
2db10 65 6e 64 65 64 20 66 6f 72 20 75 73 65 20 69 6e  ended for use in
2db20 73 69 64 65 20 61 73 73 65 72 74 28 29 20 73 74  side assert() st
2db30 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20  atements..**.** 
2db40 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e  sqlite3MemdebugN
2db50 6f 54 79 70 65 28 29 20 72 65 74 75 72 6e 73 20  oType() returns 
2db60 74 72 75 65 20 69 66 20 6e 6f 6e 65 20 6f 66 20  true if none of 
2db70 74 68 65 20 62 69 74 73 20 69 6e 20 69 74 73 20  the bits in its 
2db80 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65  second.** argume
2db90 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74 79 70  nt match the typ
2dba0 65 20 73 65 74 20 62 79 20 74 68 65 20 70 72 65  e set by the pre
2dbb0 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d  vious sqlite3Mem
2dbc0 64 65 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a  debugSetType()..
2dbd0 2a 2a 0a 2a 2a 20 50 65 72 68 61 70 73 20 74 68  **.** Perhaps th
2dbe0 65 20 6d 6f 73 74 20 69 6d 70 6f 72 74 61 6e 74  e most important
2dbf0 20 70 6f 69 6e 74 20 69 73 20 74 68 65 20 64 69   point is the di
2dc00 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e  fference between
2dc10 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 0a 2a 2a   MEMTYPE_HEAP.**
2dc20 20 61 6e 64 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f   and MEMTYPE_LOO
2dc30 4b 41 53 49 44 45 2e 20 20 49 66 20 61 6e 20 61  KASIDE.  If an a
2dc40 6c 6c 6f 63 61 74 69 6f 6e 20 69 73 20 4d 45 4d  llocation is MEM
2dc50 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20  TYPE_LOOKASIDE, 
2dc60 74 68 61 74 20 6d 65 61 6e 73 0a 2a 2a 20 69 74  that means.** it
2dc70 20 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e   might have been
2dc80 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 6c 6f   allocated by lo
2dc90 6f 6b 61 73 69 64 65 2c 20 65 78 63 65 70 74 20  okaside, except 
2dca0 74 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 77  the allocation w
2dcb0 61 73 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67 65 20  as.** too large 
2dcc0 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 20 77 61 73  or lookaside was
2dcd0 20 61 6c 72 65 61 64 79 20 66 75 6c 6c 2e 20 20   already full.  
2dce0 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20  It is important 
2dcf0 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 61  to verify.** tha
2dd00 74 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 74 68  t allocations th
2dd10 61 74 20 6d 69 67 68 74 20 68 61 76 65 20 62 65  at might have be
2dd20 65 6e 20 73 61 74 69 73 66 69 65 64 20 62 79 20  en satisfied by 
2dd30 6c 6f 6f 6b 61 73 69 64 65 20 61 72 65 20 6e 6f  lookaside are no
2dd40 74 0a 2a 2a 20 70 61 73 73 65 64 20 62 61 63 6b  t.** passed back
2dd50 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64   to non-lookasid
2dd60 65 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65  e free() routine
2dd70 73 2e 20 20 41 73 73 65 72 74 73 20 73 75 63 68  s.  Asserts such
2dd80 20 61 73 20 74 68 65 0a 2a 2a 20 65 78 61 6d 70   as the.** examp
2dd90 6c 65 20 61 62 6f 76 65 20 61 72 65 20 70 6c 61  le above are pla
2dda0 63 65 64 20 6f 6e 20 74 68 65 20 6e 6f 6e 2d 6c  ced on the non-l
2ddb0 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28 29 20  ookaside free() 
2ddc0 72 6f 75 74 69 6e 65 73 20 74 6f 20 76 65 72 69  routines to veri
2ddd0 66 79 0a 2a 2a 20 74 68 69 73 20 63 6f 6e 73 74  fy.** this const
2dde0 72 61 69 6e 74 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c  raint..**.** All
2ddf0 20 6f 66 20 74 68 69 73 20 69 73 20 6e 6f 2d 6f   of this is no-o
2de00 70 20 66 6f 72 20 61 20 70 72 6f 64 75 63 74 69  p for a producti
2de10 6f 6e 20 62 75 69 6c 64 2e 20 20 49 74 20 6f 6e  on build.  It on
2de20 6c 79 20 63 6f 6d 65 73 20 69 6e 74 6f 0a 2a 2a  ly comes into.**
2de30 20 70 6c 61 79 20 77 68 65 6e 20 74 68 65 20 53   play when the S
2de40 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 63  QLITE_MEMDEBUG c
2de50 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
2de60 6f 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 23  on is used..*/.#
2de70 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d  ifdef SQLITE_MEM
2de80 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c  DEBUG.  void sql
2de90 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
2dea0 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20  ype(void*,u8);. 
2deb0 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64   int sqlite3Memd
2dec0 65 62 75 67 48 61 73 54 79 70 65 28 76 6f 69 64  ebugHasType(void
2ded0 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c  *,u8);.  int sql
2dee0 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79  ite3MemdebugNoTy
2def0 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 23 65  pe(void*,u8);.#e
2df00 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
2df10 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
2df20 79 70 65 28 58 2c 59 29 20 20 2f 2a 20 6e 6f 2d  ype(X,Y)  /* no-
2df30 6f 70 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 73  op */.# define s
2df40 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61  qlite3MemdebugHa
2df50 73 54 79 70 65 28 58 2c 59 29 20 20 31 0a 23 20  sType(X,Y)  1.# 
2df60 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65  define sqlite3Me
2df70 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 58 2c 59  mdebugNoType(X,Y
2df80 29 20 20 20 31 0a 23 65 6e 64 69 66 0a 23 64 65  )   1.#endif.#de
2df90 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 48 45 41  fine MEMTYPE_HEA
2dfa0 50 20 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a  P       0x01  /*
2dfb0 20 47 65 6e 65 72 61 6c 20 68 65 61 70 20 61 6c   General heap al
2dfc0 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65  locations */.#de
2dfd0 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f  fine MEMTYPE_LOO
2dfe0 4b 41 53 49 44 45 20 20 30 78 30 32 20 20 2f 2a  KASIDE  0x02  /*
2dff0 20 48 65 61 70 20 74 68 61 74 20 6d 69 67 68 74   Heap that might
2e000 20 68 61 76 65 20 62 65 65 6e 20 6c 6f 6f 6b 61   have been looka
2e010 73 69 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  side */.#define 
2e020 4d 45 4d 54 59 50 45 5f 50 43 41 43 48 45 20 20  MEMTYPE_PCACHE  
2e030 20 20 20 30 78 30 34 20 20 2f 2a 20 50 61 67 65     0x04  /* Page
2e040 20 63 61 63 68 65 20 61 6c 6c 6f 63 61 74 69 6f   cache allocatio
2e050 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 72  ns */../*.** Thr
2e060 65 61 64 69 6e 67 20 69 6e 74 65 72 66 61 63 65  eading interface
2e070 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  .*/.#if SQLITE_M
2e080 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
2e090 53 3e 30 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  S>0.int sqlite3T
2e0a0 68 72 65 61 64 43 72 65 61 74 65 28 53 51 4c 69  hreadCreate(SQLi
2e0b0 74 65 54 68 72 65 61 64 2a 2a 2c 76 6f 69 64 2a  teThread**,void*
2e0c0 28 2a 29 28 76 6f 69 64 2a 29 2c 76 6f 69 64 2a  (*)(void*),void*
2e0d0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68  );.int sqlite3Th
2e0e0 72 65 61 64 4a 6f 69 6e 28 53 51 4c 69 74 65 54  readJoin(SQLiteT
2e0f0 68 72 65 61 64 2a 2c 20 76 6f 69 64 2a 2a 29 3b  hread*, void**);
2e100 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66  .#endif..#if def
2e110 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
2e120 4c 45 5f 44 42 53 54 41 54 5f 56 54 41 42 29 20  LE_DBSTAT_VTAB) 
2e130 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
2e140 45 5f 54 45 53 54 29 0a 69 6e 74 20 73 71 6c 69  E_TEST).int sqli
2e150 74 65 33 44 62 73 74 61 74 52 65 67 69 73 74 65  te3DbstatRegiste
2e160 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6e  r(sqlite3*);.#en
2e170 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33  dif..int sqlite3
2e180 45 78 70 72 56 65 63 74 6f 72 53 69 7a 65 28 45  ExprVectorSize(E
2e190 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74  xpr *pExpr);.int
2e1a0 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 56 65   sqlite3ExprIsVe
2e1b0 63 74 6f 72 28 45 78 70 72 20 2a 70 45 78 70 72  ctor(Expr *pExpr
2e1c0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
2e1d0 56 65 63 74 6f 72 46 69 65 6c 64 53 75 62 65 78  VectorFieldSubex
2e1e0 70 72 28 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  pr(Expr*, int);.
2e1f0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
2e200 72 46 6f 72 56 65 63 74 6f 72 46 69 65 6c 64 28  rForVectorField(
2e210 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 69 6e 74  Parse*,Expr*,int
2e220 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
2e230 65 63 74 6f 72 45 72 72 6f 72 4d 73 67 28 50 61  ectorErrorMsg(Pa
2e240 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 0a 23  rse*, Expr*);..#
2e250 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2e260 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e  IT_COMPILEOPTION
2e270 5f 44 49 41 47 53 0a 63 6f 6e 73 74 20 63 68 61  _DIAGS.const cha
2e280 72 20 2a 2a 73 71 6c 69 74 65 33 43 6f 6d 70 69  r **sqlite3Compi
2e290 6c 65 4f 70 74 69 6f 6e 73 28 69 6e 74 20 2a 70  leOptions(int *p
2e2a0 6e 4f 70 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  nOpt);.#endif..#
2e2b0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 49  endif /* SQLITEI
2e2c0 4e 54 5f 48 20 2a 2f 0a                          NT_H */.