/ Hex Artifact Content
Login

Artifact 719814190ac5416116550e533d88de017f3aa6c320e20c01fdf462de2e70eea8:


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 75 33 32 20 6e 53 6c  c() */.  u32 nSl
aa00: 6f 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ot;             
aa10: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f   /* Number of lo
aa20: 6f 6b 61 73 69 64 65 20 73 6c 6f 74 73 20 61 6c  okaside slots al
aa30: 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 75 33 32  located */.  u32
aa40: 20 61 6e 53 74 61 74 5b 33 5d 3b 20 20 20 20 20   anStat[3];     
aa50: 20 20 20 20 20 2f 2a 20 30 3a 20 68 69 74 73 2e       /* 0: hits.
aa60: 20 20 31 3a 20 73 69 7a 65 20 6d 69 73 73 65 73    1: size misses
aa70: 2e 20 20 32 3a 20 66 75 6c 6c 20 6d 69 73 73 65  .  2: full misse
aa80: 73 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64 65  s */.  Lookaside
aa90: 53 6c 6f 74 20 2a 70 49 6e 69 74 3b 20 20 20 2f  Slot *pInit;   /
aaa0: 2a 20 4c 69 73 74 20 6f 66 20 62 75 66 66 65 72  * List of buffer
aab0: 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79  s not previously
aac0: 20 75 73 65 64 20 2a 2f 0a 20 20 4c 6f 6f 6b 61   used */.  Looka
aad0: 73 69 64 65 53 6c 6f 74 20 2a 70 46 72 65 65 3b  sideSlot *pFree;
aae0: 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 76     /* List of av
aaf0: 61 69 6c 61 62 6c 65 20 62 75 66 66 65 72 73 20  ailable buffers 
ab00: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 74 61 72  */.  void *pStar
ab10: 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
ab20: 46 69 72 73 74 20 62 79 74 65 20 6f 66 20 61 76  First byte of av
ab30: 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73  ailable memory s
ab40: 70 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  pace */.  void *
ab50: 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20  pEnd;           
ab60: 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65 20    /* First byte 
ab70: 70 61 73 74 20 65 6e 64 20 6f 66 20 61 76 61 69  past end of avai
ab80: 6c 61 62 6c 65 20 73 70 61 63 65 20 2a 2f 0a 7d  lable space */.}
ab90: 3b 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69  ;.struct Lookasi
aba0: 64 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f 6f 6b 61  deSlot {.  Looka
abb0: 73 69 64 65 53 6c 6f 74 20 2a 70 4e 65 78 74 3b  sideSlot *pNext;
abc0: 20 20 20 20 2f 2a 20 4e 65 78 74 20 62 75 66 66      /* Next buff
abd0: 65 72 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f  er in the list o
abe0: 66 20 66 72 65 65 20 62 75 66 66 65 72 73 20 2a  f free buffers *
abf0: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 68 61  /.};../*.** A ha
ac00: 73 68 20 74 61 62 6c 65 20 66 6f 72 20 62 75 69  sh table for bui
ac10: 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 20 64  lt-in function d
ac20: 65 66 69 6e 69 74 69 6f 6e 73 2e 20 20 28 41 70  efinitions.  (Ap
ac30: 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65  plication-define
ac40: 64 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 75  d.** functions u
ac50: 73 65 20 61 20 72 65 67 75 6c 61 72 20 74 61 62  se a regular tab
ac60: 6c 65 20 74 61 62 6c 65 20 66 72 6f 6d 20 68 61  le table from ha
ac70: 73 68 2e 68 2e 29 0a 2a 2a 0a 2a 2a 20 48 61 73  sh.h.).**.** Has
ac80: 68 20 65 61 63 68 20 46 75 6e 63 44 65 66 20 73  h each FuncDef s
ac90: 74 72 75 63 74 75 72 65 20 69 6e 74 6f 20 6f 6e  tructure into on
aca0: 65 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66  e of the FuncDef
acb0: 48 61 73 68 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a  Hash.a[] slots..
acc0: 2a 2a 20 43 6f 6c 6c 69 73 69 6f 6e 73 20 61 72  ** Collisions ar
acd0: 65 20 6f 6e 20 74 68 65 20 46 75 6e 63 44 65 66  e on the FuncDef
ace0: 2e 75 2e 70 48 61 73 68 20 63 68 61 69 6e 2e 0a  .u.pHash chain..
acf0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ad00: 45 5f 46 55 4e 43 5f 48 41 53 48 5f 53 5a 20 32  E_FUNC_HASH_SZ 2
ad10: 33 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 66  3.struct FuncDef
ad20: 48 61 73 68 20 7b 0a 20 20 46 75 6e 63 44 65 66  Hash {.  FuncDef
ad30: 20 2a 61 5b 53 51 4c 49 54 45 5f 46 55 4e 43 5f   *a[SQLITE_FUNC_
ad40: 48 41 53 48 5f 53 5a 5d 3b 20 20 20 20 20 20 20  HASH_SZ];       
ad50: 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20 66 6f  /* Hash table fo
ad60: 72 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d  r functions */.}
ad70: 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
ad80: 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41  _USER_AUTHENTICA
ad90: 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20 49 6e 66 6f 72  TION./*.** Infor
ada0: 6d 61 74 69 6f 6e 20 68 65 6c 64 20 69 6e 20 74  mation held in t
adb0: 68 65 20 22 73 71 6c 69 74 65 33 22 20 64 61 74  he "sqlite3" dat
adc0: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
add0: 20 6f 62 6a 65 63 74 20 61 6e 64 20 75 73 65 64   object and used
ade0: 0a 2a 2a 20 74 6f 20 6d 61 6e 61 67 65 20 75 73  .** to manage us
adf0: 65 72 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f  er authenticatio
ae00: 6e 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74  n..*/.typedef st
ae10: 72 75 63 74 20 73 71 6c 69 74 65 33 5f 75 73 65  ruct sqlite3_use
ae20: 72 61 75 74 68 20 73 71 6c 69 74 65 33 5f 75 73  rauth sqlite3_us
ae30: 65 72 61 75 74 68 3b 0a 73 74 72 75 63 74 20 73  erauth;.struct s
ae40: 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 20  qlite3_userauth 
ae50: 7b 0a 20 20 75 38 20 61 75 74 68 4c 65 76 65 6c  {.  u8 authLevel
ae60: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
ae70: 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 61 75 74    /* Current aut
ae80: 68 65 6e 74 69 63 61 74 69 6f 6e 20 6c 65 76 65  hentication leve
ae90: 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 75 74 68  l */.  int nAuth
aea0: 50 57 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  PW;             
aeb0: 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
aec0: 74 68 65 20 7a 41 75 74 68 50 57 20 69 6e 20 62  the zAuthPW in b
aed0: 79 74 65 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ytes */.  char *
aee0: 7a 41 75 74 68 50 57 3b 20 20 20 20 20 20 20 20  zAuthPW;        
aef0: 20 20 20 20 20 20 20 20 2f 2a 20 50 61 73 73 77          /* Passw
af00: 6f 72 64 20 75 73 65 64 20 74 6f 20 61 75 74 68  ord used to auth
af10: 65 6e 74 69 63 61 74 65 20 2a 2f 0a 20 20 63 68  enticate */.  ch
af20: 61 72 20 2a 7a 41 75 74 68 55 73 65 72 3b 20 20  ar *zAuthUser;  
af30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55              /* U
af40: 73 65 72 20 6e 61 6d 65 20 75 73 65 64 20 74 6f  ser name used to
af50: 20 61 75 74 68 65 6e 74 69 63 61 74 65 20 2a 2f   authenticate */
af60: 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20  .};../* Allowed 
af70: 76 61 6c 75 65 73 20 66 6f 72 20 73 71 6c 69 74  values for sqlit
af80: 65 33 5f 75 73 65 72 61 75 74 68 2e 61 75 74 68  e3_userauth.auth
af90: 4c 65 76 65 6c 20 2a 2f 0a 23 64 65 66 69 6e 65  Level */.#define
afa0: 20 55 41 55 54 48 5f 55 6e 6b 6e 6f 77 6e 20 20   UAUTH_Unknown  
afb0: 20 20 20 30 20 20 20 20 20 2f 2a 20 41 75 74 68     0     /* Auth
afc0: 65 6e 74 69 63 61 74 69 6f 6e 20 6e 6f 74 20 79  entication not y
afd0: 65 74 20 63 68 65 63 6b 65 64 20 2a 2f 0a 23 64  et checked */.#d
afe0: 65 66 69 6e 65 20 55 41 55 54 48 5f 46 61 69 6c  efine UAUTH_Fail
aff0: 20 20 20 20 20 20 20 20 31 20 20 20 20 20 2f 2a          1     /*
b000: 20 55 73 65 72 20 61 75 74 68 65 6e 74 69 63 61   User authentica
b010: 74 69 6f 6e 20 66 61 69 6c 65 64 20 2a 2f 0a 23  tion failed */.#
b020: 64 65 66 69 6e 65 20 55 41 55 54 48 5f 55 73 65  define UAUTH_Use
b030: 72 20 20 20 20 20 20 20 20 32 20 20 20 20 20 2f  r        2     /
b040: 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65 64 20  * Authenticated 
b050: 61 73 20 61 20 6e 6f 72 6d 61 6c 20 75 73 65 72  as a normal user
b060: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54   */.#define UAUT
b070: 48 5f 41 64 6d 69 6e 20 20 20 20 20 20 20 33 20  H_Admin       3 
b080: 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63      /* Authentic
b090: 61 74 65 64 20 61 73 20 61 6e 20 61 64 6d 69 6e  ated as an admin
b0a0: 69 73 74 72 61 74 6f 72 20 2a 2f 0a 0a 2f 2a 20  istrator */../* 
b0b0: 46 75 6e 63 74 69 6f 6e 73 20 75 73 65 64 20 6f  Functions used o
b0c0: 6e 6c 79 20 62 79 20 75 73 65 72 20 61 75 74 68  nly by user auth
b0d0: 6f 72 69 7a 61 74 69 6f 6e 20 6c 6f 67 69 63 20  orization logic 
b0e0: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 73  */.int sqlite3Us
b0f0: 65 72 41 75 74 68 54 61 62 6c 65 28 63 6f 6e 73  erAuthTable(cons
b100: 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71  t char*);.int sq
b110: 6c 69 74 65 33 55 73 65 72 41 75 74 68 43 68 65  lite3UserAuthChe
b120: 63 6b 4c 6f 67 69 6e 28 73 71 6c 69 74 65 33 2a  ckLogin(sqlite3*
b130: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 38 2a  ,const char*,u8*
b140: 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
b150: 73 65 72 41 75 74 68 49 6e 69 74 28 73 71 6c 69  serAuthInit(sqli
b160: 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
b170: 74 65 33 43 72 79 70 74 46 75 6e 63 28 73 71 6c  te3CryptFunc(sql
b180: 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
b190: 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  t,sqlite3_value*
b1a0: 2a 29 3b 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53  *);..#endif /* S
b1b0: 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45  QLITE_USER_AUTHE
b1c0: 4e 54 49 43 41 54 49 4f 4e 20 2a 2f 0a 0a 2f 2a  NTICATION */../*
b1d0: 0a 2a 2a 20 74 79 70 65 64 65 66 20 66 6f 72 20  .** typedef for 
b1e0: 74 68 65 20 61 75 74 68 6f 72 69 7a 61 74 69 6f  the authorizatio
b1f0: 6e 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74  n callback funct
b200: 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ion..*/.#ifdef S
b210: 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45  QLITE_USER_AUTHE
b220: 4e 54 49 43 41 54 49 4f 4e 0a 20 20 74 79 70 65  NTICATION.  type
b230: 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69 74 65  def int (*sqlite
b240: 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a 2c 69  3_xauth)(void*,i
b250: 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  nt,const char*,c
b260: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
b270: 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20 20 20   char*,.        
b280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b290: 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61         const cha
b2a0: 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
b2b0: 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64 65  ;.#else.  typede
b2c0: 66 20 69 6e 74 20 28 2a 73 71 6c 69 74 65 33 5f  f int (*sqlite3_
b2d0: 78 61 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74  xauth)(void*,int
b2e0: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  ,const char*,con
b2f0: 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
b300: 68 61 72 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  har*,.          
b310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b320: 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a       const char*
b330: 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64  );.#endif..#ifnd
b340: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44  ef SQLITE_OMIT_D
b350: 45 50 52 45 43 41 54 45 44 0a 2f 2a 20 54 68 69  EPRECATED./* Thi
b360: 73 20 69 73 20 61 6e 20 65 78 74 72 61 20 53 51  s is an extra SQ
b370: 4c 49 54 45 5f 54 52 41 43 45 20 6d 61 63 72 6f  LITE_TRACE macro
b380: 20 74 68 61 74 20 69 6e 64 69 63 61 74 65 73 20   that indicates 
b390: 22 6c 65 67 61 63 79 22 20 74 72 61 63 69 6e 67  "legacy" tracing
b3a0: 0a 2a 2a 20 69 6e 20 74 68 65 20 73 74 79 6c 65  .** in the style
b3b0: 20 6f 66 20 73 71 6c 69 74 65 33 5f 74 72 61 63   of sqlite3_trac
b3c0: 65 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  e().*/.#define S
b3d0: 51 4c 49 54 45 5f 54 52 41 43 45 5f 4c 45 47 41  QLITE_TRACE_LEGA
b3e0: 43 59 20 20 30 78 38 30 0a 23 65 6c 73 65 0a 23  CY  0x80.#else.#
b3f0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 52  define SQLITE_TR
b400: 41 43 45 5f 4c 45 47 41 43 59 20 20 30 0a 23 65  ACE_LEGACY  0.#e
b410: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
b420: 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44 20 2a  MIT_DEPRECATED *
b430: 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64  /.../*.** Each d
b440: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
b450: 6f 6e 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  on is an instanc
b460: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
b470: 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f  ng structure..*/
b480: 0a 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 20  .struct sqlite3 
b490: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 66 73 20  {.  sqlite3_vfs 
b4a0: 2a 70 56 66 73 3b 20 20 20 20 20 20 20 20 20 20  *pVfs;          
b4b0: 20 20 2f 2a 20 4f 53 20 49 6e 74 65 72 66 61 63    /* OS Interfac
b4c0: 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 56 64  e */.  struct Vd
b4d0: 62 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20  be *pVdbe;      
b4e0: 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
b4f0: 61 63 74 69 76 65 20 76 69 72 74 75 61 6c 20 6d  active virtual m
b500: 61 63 68 69 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c  achines */.  Col
b510: 6c 53 65 71 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b  lSeq *pDfltColl;
b520: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
b530: 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74  e default collat
b540: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 28 42 49  ing sequence (BI
b550: 4e 41 52 59 29 20 2a 2f 0a 20 20 73 71 6c 69 74  NARY) */.  sqlit
b560: 65 33 5f 6d 75 74 65 78 20 2a 6d 75 74 65 78 3b  e3_mutex *mutex;
b570: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e           /* Conn
b580: 65 63 74 69 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a  ection mutex */.
b590: 20 20 44 62 20 2a 61 44 62 3b 20 20 20 20 20 20    Db *aDb;      
b5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b5b0: 2f 2a 20 41 6c 6c 20 62 61 63 6b 65 6e 64 73 20  /* All backends 
b5c0: 2a 2f 0a 20 20 69 6e 74 20 6e 44 62 3b 20 20 20  */.  int nDb;   
b5d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b5e0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
b5f0: 62 61 63 6b 65 6e 64 73 20 63 75 72 72 65 6e 74  backends current
b600: 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a 20 20 75  ly in use */.  u
b610: 33 32 20 6d 44 62 46 6c 61 67 73 3b 20 20 20 20  32 mDbFlags;    
b620: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b630: 66 6c 61 67 73 20 72 65 63 6f 72 64 69 6e 67 20  flags recording 
b640: 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 65 20 2a  internal state *
b650: 2f 0a 20 20 75 33 32 20 66 6c 61 67 73 3b 20 20  /.  u32 flags;  
b660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b670: 20 20 2f 2a 20 66 6c 61 67 73 20 73 65 74 74 61    /* flags setta
b680: 62 6c 65 20 62 79 20 70 72 61 67 6d 61 73 2e 20  ble by pragmas. 
b690: 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69  See below */.  i
b6a0: 36 34 20 6c 61 73 74 52 6f 77 69 64 3b 20 20 20  64 lastRowid;   
b6b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b6c0: 52 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20 72 65  ROWID of most re
b6d0: 63 65 6e 74 20 69 6e 73 65 72 74 20 28 73 65 65  cent insert (see
b6e0: 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69 36 34   above) */.  i64
b6f0: 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20   szMmap;        
b700: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
b710: 66 61 75 6c 74 20 6d 6d 61 70 5f 73 69 7a 65 20  fault mmap_size 
b720: 73 65 74 74 69 6e 67 20 2a 2f 0a 20 20 75 33 32  setting */.  u32
b730: 20 6e 53 63 68 65 6d 61 4c 6f 63 6b 3b 20 20 20   nSchemaLock;   
b740: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f             /* Do
b750: 20 6e 6f 74 20 72 65 73 65 74 20 74 68 65 20 73   not reset the s
b760: 63 68 65 6d 61 20 77 68 65 6e 20 6e 6f 6e 2d 7a  chema when non-z
b770: 65 72 6f 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  ero */.  unsigne
b780: 64 20 69 6e 74 20 6f 70 65 6e 46 6c 61 67 73 3b  d int openFlags;
b790: 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20         /* Flags 
b7a0: 70 61 73 73 65 64 20 74 6f 20 73 71 6c 69 74 65  passed to sqlite
b7b0: 33 5f 76 66 73 2e 78 4f 70 65 6e 28 29 20 2a 2f  3_vfs.xOpen() */
b7c0: 0a 20 20 69 6e 74 20 65 72 72 43 6f 64 65 3b 20  .  int errCode; 
b7d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b7e0: 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20   /* Most recent 
b7f0: 65 72 72 6f 72 20 63 6f 64 65 20 28 53 51 4c 49  error code (SQLI
b800: 54 45 5f 2a 29 20 2a 2f 0a 20 20 69 6e 74 20 65  TE_*) */.  int e
b810: 72 72 4d 61 73 6b 3b 20 20 20 20 20 20 20 20 20  rrMask;         
b820: 20 20 20 20 20 20 20 20 20 2f 2a 20 26 20 72 65           /* & re
b830: 73 75 6c 74 20 63 6f 64 65 73 20 77 69 74 68 20  sult codes with 
b840: 74 68 69 73 20 62 65 66 6f 72 65 20 72 65 74 75  this before retu
b850: 72 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69  rning */.  int i
b860: 53 79 73 45 72 72 6e 6f 3b 20 20 20 20 20 20 20  SysErrno;       
b870: 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6e           /* Errn
b880: 6f 20 76 61 6c 75 65 20 66 72 6f 6d 20 6c 61 73  o value from las
b890: 74 20 73 79 73 74 65 6d 20 65 72 72 6f 72 20 2a  t system error *
b8a0: 2f 0a 20 20 75 31 36 20 64 62 4f 70 74 46 6c 61  /.  u16 dbOptFla
b8b0: 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gs;             
b8c0: 20 20 2f 2a 20 46 6c 61 67 73 20 74 6f 20 65 6e    /* Flags to en
b8d0: 61 62 6c 65 2f 64 69 73 61 62 6c 65 20 6f 70 74  able/disable opt
b8e0: 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20 20  imizations */.  
b8f0: 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20  u8 enc;         
b900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b910: 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a   Text encoding *
b920: 2f 0a 20 20 75 38 20 61 75 74 6f 43 6f 6d 6d 69  /.  u8 autoCommi
b930: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
b940: 20 20 2f 2a 20 54 68 65 20 61 75 74 6f 2d 63 6f    /* The auto-co
b950: 6d 6d 69 74 20 66 6c 61 67 2e 20 2a 2f 0a 20 20  mmit flag. */.  
b960: 75 38 20 74 65 6d 70 5f 73 74 6f 72 65 3b 20 20  u8 temp_store;  
b970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b980: 20 31 3a 20 66 69 6c 65 20 32 3a 20 6d 65 6d 6f   1: file 2: memo
b990: 72 79 20 30 3a 20 64 65 66 61 75 6c 74 20 2a 2f  ry 0: default */
b9a0: 0a 20 20 75 38 20 6d 61 6c 6c 6f 63 46 61 69 6c  .  u8 mallocFail
b9b0: 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ed;             
b9c0: 20 2f 2a 20 54 72 75 65 20 69 66 20 77 65 20 68   /* True if we h
b9d0: 61 76 65 20 73 65 65 6e 20 61 20 6d 61 6c 6c 6f  ave seen a mallo
b9e0: 63 20 66 61 69 6c 75 72 65 20 2a 2f 0a 20 20 75  c failure */.  u
b9f0: 38 20 62 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 3b  8 bBenignMalloc;
ba00: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ba10: 44 6f 20 6e 6f 74 20 72 65 71 75 69 72 65 20 4f  Do not require O
ba20: 4f 4d 73 20 69 66 20 74 72 75 65 20 2a 2f 0a 20  OMs if true */. 
ba30: 20 75 38 20 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65   u8 dfltLockMode
ba40: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
ba50: 2a 20 44 65 66 61 75 6c 74 20 6c 6f 63 6b 69 6e  * Default lockin
ba60: 67 2d 6d 6f 64 65 20 66 6f 72 20 61 74 74 61 63  g-mode for attac
ba70: 68 65 64 20 64 62 73 20 2a 2f 0a 20 20 73 69 67  hed dbs */.  sig
ba80: 6e 65 64 20 63 68 61 72 20 6e 65 78 74 41 75 74  ned char nextAut
ba90: 6f 76 61 63 3b 20 20 20 20 20 20 2f 2a 20 41 75  ovac;      /* Au
baa0: 74 6f 76 61 63 20 73 65 74 74 69 6e 67 20 61 66  tovac setting af
bab0: 74 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e 3d  ter VACUUM if >=
bac0: 30 20 2a 2f 0a 20 20 75 38 20 73 75 70 70 72 65  0 */.  u8 suppre
bad0: 73 73 45 72 72 3b 20 20 20 20 20 20 20 20 20 20  ssErr;          
bae0: 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 69       /* Do not i
baf0: 73 73 75 65 20 65 72 72 6f 72 20 6d 65 73 73 61  ssue error messa
bb00: 67 65 73 20 69 66 20 74 72 75 65 20 2a 2f 0a 20  ges if true */. 
bb10: 20 75 38 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69   u8 vtabOnConfli
bb20: 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ct;            /
bb30: 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72  * Value to retur
bb40: 6e 20 66 6f 72 20 73 33 5f 76 74 61 62 5f 6f 6e  n for s3_vtab_on
bb50: 5f 63 6f 6e 66 6c 69 63 74 28 29 20 2a 2f 0a 20  _conflict() */. 
bb60: 20 75 38 20 69 73 54 72 61 6e 73 61 63 74 69 6f   u8 isTransactio
bb70: 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 2f  nSavepoint;    /
bb80: 2a 20 54 72 75 65 20 69 66 20 74 68 65 20 6f 75  * True if the ou
bb90: 74 65 72 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e  termost savepoin
bba0: 74 20 69 73 20 61 20 54 53 20 2a 2f 0a 20 20 75  t is a TS */.  u
bbb0: 38 20 6d 54 72 61 63 65 3b 20 20 20 20 20 20 20  8 mTrace;       
bbc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
bbd0: 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 53 51 4c  zero or more SQL
bbe0: 49 54 45 5f 54 52 41 43 45 20 66 6c 61 67 73 20  ITE_TRACE flags 
bbf0: 2a 2f 0a 20 20 75 38 20 73 6b 69 70 42 74 72 65  */.  u8 skipBtre
bc00: 65 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20  eMutex;         
bc10: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 6e 6f     /* True if no
bc20: 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 62 61   shared-cache ba
bc30: 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 75 38 20 6e  ckends */.  u8 n
bc40: 53 71 6c 45 78 65 63 3b 20 20 20 20 20 20 20 20  SqlExec;        
bc50: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
bc60: 62 65 72 20 6f 66 20 70 65 6e 64 69 6e 67 20 4f  ber of pending O
bc70: 50 5f 53 71 6c 45 78 65 63 20 6f 70 63 6f 64 65  P_SqlExec opcode
bc80: 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 78 74 50  s */.  int nextP
bc90: 61 67 65 73 69 7a 65 3b 20 20 20 20 20 20 20 20  agesize;        
bca0: 20 20 20 20 20 2f 2a 20 50 61 67 65 73 69 7a 65       /* Pagesize
bcb0: 20 61 66 74 65 72 20 56 41 43 55 55 4d 20 69 66   after VACUUM if
bcc0: 20 3e 30 20 2a 2f 0a 20 20 75 33 32 20 6d 61 67   >0 */.  u32 mag
bcd0: 69 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ic;             
bce0: 20 20 20 20 20 20 20 2f 2a 20 4d 61 67 69 63 20         /* Magic 
bcf0: 6e 75 6d 62 65 72 20 66 6f 72 20 64 65 74 65 63  number for detec
bd00: 74 20 6c 69 62 72 61 72 79 20 6d 69 73 75 73 65  t library misuse
bd10: 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67   */.  int nChang
bd20: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
bd30: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74      /* Value ret
bd40: 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33  urned by sqlite3
bd50: 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20  _changes() */.  
bd60: 69 6e 74 20 6e 54 6f 74 61 6c 43 68 61 6e 67 65  int nTotalChange
bd70: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
bd80: 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20   Value returned 
bd90: 62 79 20 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c  by sqlite3_total
bda0: 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20  _changes() */.  
bdb0: 69 6e 74 20 61 4c 69 6d 69 74 5b 53 51 4c 49 54  int aLimit[SQLIT
bdc0: 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a  E_N_LIMIT];   /*
bdd0: 20 4c 69 6d 69 74 73 20 2a 2f 0a 20 20 69 6e 74   Limits */.  int
bde0: 20 6e 4d 61 78 53 6f 72 74 65 72 4d 6d 61 70 3b   nMaxSorterMmap;
bdf0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
be00: 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20 72 65  ximum size of re
be10: 67 69 6f 6e 73 20 6d 61 70 70 65 64 20 62 79 20  gions mapped by 
be20: 73 6f 72 74 65 72 20 2a 2f 0a 20 20 73 74 72 75  sorter */.  stru
be30: 63 74 20 73 71 6c 69 74 65 33 49 6e 69 74 49 6e  ct sqlite3InitIn
be40: 66 6f 20 7b 20 20 20 20 20 20 2f 2a 20 49 6e 66  fo {      /* Inf
be50: 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 64 75  ormation used du
be60: 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74  ring initializat
be70: 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e  ion */.    int n
be80: 65 77 54 6e 75 6d 3b 20 20 20 20 20 20 20 20 20  ewTnum;         
be90: 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61         /* Rootpa
bea0: 67 65 20 6f 66 20 74 61 62 6c 65 20 62 65 69 6e  ge of table bein
beb0: 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  g initialized */
bec0: 0a 20 20 20 20 75 38 20 69 44 62 3b 20 20 20 20  .    u8 iDb;    
bed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bee0: 20 2f 2a 20 57 68 69 63 68 20 64 62 20 66 69 6c   /* Which db fil
bef0: 65 20 69 73 20 62 65 69 6e 67 20 69 6e 69 74 69  e is being initi
bf00: 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38  alized */.    u8
bf10: 20 62 75 73 79 3b 20 20 20 20 20 20 20 20 20 20   busy;          
bf20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 52 55            /* TRU
bf30: 45 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69  E if currently i
bf40: 6e 69 74 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20  nitializing */. 
bf50: 20 20 20 75 38 20 6f 72 70 68 61 6e 54 72 69 67     u8 orphanTrig
bf60: 67 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ger;           /
bf70: 2a 20 4c 61 73 74 20 73 74 61 74 65 6d 65 6e 74  * Last statement
bf80: 20 69 73 20 6f 72 70 68 61 6e 65 64 20 54 45 4d   is orphaned TEM
bf90: 50 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 20  P trigger */.   
bfa0: 20 75 38 20 69 6d 70 6f 73 74 65 72 54 61 62 6c   u8 imposterTabl
bfb0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
bfc0: 42 75 69 6c 64 69 6e 67 20 61 6e 20 69 6d 70 6f  Building an impo
bfd0: 73 74 65 72 20 74 61 62 6c 65 20 2a 2f 0a 20 20  ster table */.  
bfe0: 7d 20 69 6e 69 74 3b 0a 20 20 69 6e 74 20 6e 56  } init;.  int nV
bff0: 64 62 65 41 63 74 69 76 65 3b 20 20 20 20 20 20  dbeActive;      
c000: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
c010: 72 20 6f 66 20 56 44 42 45 73 20 63 75 72 72 65  r of VDBEs curre
c020: 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a  ntly running */.
c030: 20 20 69 6e 74 20 6e 56 64 62 65 52 65 61 64 3b    int nVdbeRead;
c040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c050: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74  /* Number of act
c060: 69 76 65 20 56 44 42 45 73 20 74 68 61 74 20 72  ive VDBEs that r
c070: 65 61 64 20 6f 72 20 77 72 69 74 65 20 2a 2f 0a  ead or write */.
c080: 20 20 69 6e 74 20 6e 56 64 62 65 57 72 69 74 65    int nVdbeWrite
c090: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
c0a0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74  /* Number of act
c0b0: 69 76 65 20 56 44 42 45 73 20 74 68 61 74 20 72  ive VDBEs that r
c0c0: 65 61 64 20 61 6e 64 20 77 72 69 74 65 20 2a 2f  ead and write */
c0d0: 0a 20 20 69 6e 74 20 6e 56 64 62 65 45 78 65 63  .  int nVdbeExec
c0e0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
c0f0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65   /* Number of ne
c100: 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 56 64  sted calls to Vd
c110: 62 65 45 78 65 63 28 29 20 2a 2f 0a 20 20 69 6e  beExec() */.  in
c120: 74 20 6e 56 44 65 73 74 72 6f 79 3b 20 20 20 20  t nVDestroy;    
c130: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
c140: 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20  umber of active 
c150: 4f 50 5f 56 44 65 73 74 72 6f 79 20 6f 70 65 72  OP_VDestroy oper
c160: 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20  ations */.  int 
c170: 6e 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20  nExtension;     
c180: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
c190: 62 65 72 20 6f 66 20 6c 6f 61 64 65 64 20 65 78  ber of loaded ex
c1a0: 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f  tensions */.  vo
c1b0: 69 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b  id **aExtension;
c1c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
c1d0: 72 72 61 79 20 6f 66 20 73 68 61 72 65 64 20 6c  rray of shared l
c1e0: 69 62 72 61 72 79 20 68 61 6e 64 6c 65 73 20 2a  ibrary handles *
c1f0: 2f 0a 20 20 69 6e 74 20 28 2a 78 54 72 61 63 65  /.  int (*xTrace
c200: 29 28 75 33 32 2c 76 6f 69 64 2a 2c 76 6f 69 64  )(u32,void*,void
c210: 2a 2c 76 6f 69 64 2a 29 3b 20 20 20 20 20 2f 2a  *,void*);     /*
c220: 20 54 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20   Trace function 
c230: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 54 72 61 63  */.  void *pTrac
c240: 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  eArg;           
c250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c260: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  * Argument to th
c270: 65 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e  e trace function
c280: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72   */.  void (*xPr
c290: 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e  ofile)(void*,con
c2a0: 73 74 20 63 68 61 72 2a 2c 75 36 34 29 3b 20 20  st char*,u64);  
c2b0: 2f 2a 20 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e  /* Profiling fun
c2c0: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
c2d0: 2a 70 50 72 6f 66 69 6c 65 41 72 67 3b 20 20 20  *pProfileArg;   
c2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c2f0: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
c300: 20 74 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e 63   to profile func
c310: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  tion */.  void *
c320: 70 43 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20 20  pCommitArg;     
c330: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
c340: 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d 6d  rgument to xComm
c350: 69 74 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 0a  itCallback() */.
c360: 20 20 69 6e 74 20 28 2a 78 43 6f 6d 6d 69 74 43    int (*xCommitC
c370: 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b  allback)(void*);
c380: 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61      /* Invoked a
c390: 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20  t every commit. 
c3a0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 52 6f 6c 6c  */.  void *pRoll
c3b0: 62 61 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20  backArg;        
c3c0: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
c3d0: 6e 74 20 74 6f 20 78 52 6f 6c 6c 62 61 63 6b 43  nt to xRollbackC
c3e0: 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 0a 20 20 76  allback() */.  v
c3f0: 6f 69 64 20 28 2a 78 52 6f 6c 6c 62 61 63 6b 43  oid (*xRollbackC
c400: 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b  allback)(void*);
c410: 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65   /* Invoked at e
c420: 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a  very commit. */.
c430: 20 20 76 6f 69 64 20 2a 70 55 70 64 61 74 65 41    void *pUpdateA
c440: 72 67 3b 0a 20 20 76 6f 69 64 20 28 2a 78 55 70  rg;.  void (*xUp
c450: 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 28 76 6f  dateCallback)(vo
c460: 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63  id*,int, const c
c470: 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
c480: 2c 73 71 6c 69 74 65 5f 69 6e 74 36 34 29 3b 0a  ,sqlite_int64);.
c490: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
c4a0: 41 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48  ABLE_PREUPDATE_H
c4b0: 4f 4f 4b 0a 20 20 76 6f 69 64 20 2a 70 50 72 65  OOK.  void *pPre
c4c0: 55 70 64 61 74 65 41 72 67 3b 20 20 20 20 20 20  UpdateArg;      
c4d0: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67      /* First arg
c4e0: 75 6d 65 6e 74 20 74 6f 20 78 50 72 65 55 70 64  ument to xPreUpd
c4f0: 61 74 65 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  ateCallback */. 
c500: 20 76 6f 69 64 20 28 2a 78 50 72 65 55 70 64 61   void (*xPreUpda
c510: 74 65 43 61 6c 6c 62 61 63 6b 29 28 20 20 20 2f  teCallback)(   /
c520: 2a 20 52 65 67 69 73 74 65 72 65 64 20 75 73 69  * Registered usi
c530: 6e 67 20 73 71 6c 69 74 65 33 5f 70 72 65 75 70  ng sqlite3_preup
c540: 64 61 74 65 5f 68 6f 6f 6b 28 29 20 2a 2f 0a 20  date_hook() */. 
c550: 20 20 20 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33     void*,sqlite3
c560: 2a 2c 69 6e 74 2c 63 68 61 72 20 63 6f 6e 73 74  *,int,char const
c570: 2a 2c 63 68 61 72 20 63 6f 6e 73 74 2a 2c 73 71  *,char const*,sq
c580: 6c 69 74 65 33 5f 69 6e 74 36 34 2c 73 71 6c 69  lite3_int64,sqli
c590: 74 65 33 5f 69 6e 74 36 34 0a 20 20 29 3b 0a 20  te3_int64.  );. 
c5a0: 20 50 72 65 55 70 64 61 74 65 20 2a 70 50 72 65   PreUpdate *pPre
c5b0: 55 70 64 61 74 65 3b 20 20 20 20 20 20 20 20 2f  Update;        /
c5c0: 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61 63  * Context for ac
c5d0: 74 69 76 65 20 70 72 65 2d 75 70 64 61 74 65 20  tive pre-update 
c5e0: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64  callback */.#end
c5f0: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 45 4e 41  if /* SQLITE_ENA
c600: 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f  BLE_PREUPDATE_HO
c610: 4f 4b 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  OK */.#ifndef SQ
c620: 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
c630: 69 6e 74 20 28 2a 78 57 61 6c 43 61 6c 6c 62 61  int (*xWalCallba
c640: 63 6b 29 28 76 6f 69 64 20 2a 2c 20 73 71 6c 69  ck)(void *, sqli
c650: 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  te3 *, const cha
c660: 72 20 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  r *, int);.  voi
c670: 64 20 2a 70 57 61 6c 41 72 67 3b 0a 23 65 6e 64  d *pWalArg;.#end
c680: 69 66 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c  if.  void(*xColl
c690: 4e 65 65 64 65 64 29 28 76 6f 69 64 2a 2c 73 71  Needed)(void*,sq
c6a0: 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74  lite3*,int eText
c6b0: 52 65 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  Rep,const char*)
c6c0: 3b 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e  ;.  void(*xCollN
c6d0: 65 65 64 65 64 31 36 29 28 76 6f 69 64 2a 2c 73  eeded16)(void*,s
c6e0: 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78  qlite3*,int eTex
c6f0: 74 52 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a  tRep,const void*
c700: 29 3b 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c  );.  void *pColl
c710: 4e 65 65 64 65 64 41 72 67 3b 0a 20 20 73 71 6c  NeededArg;.  sql
c720: 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 45 72 72  ite3_value *pErr
c730: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f  ;          /* Mo
c740: 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20  st recent error 
c750: 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 75 6e 69  message */.  uni
c760: 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69 6c  on {.    volatil
c770: 65 20 69 6e 74 20 69 73 49 6e 74 65 72 72 75 70  e int isInterrup
c780: 74 65 64 3b 20 2f 2a 20 54 72 75 65 20 69 66 20  ted; /* True if 
c790: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
c7a0: 74 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65  t has been calle
c7b0: 64 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20  d */.    double 
c7c0: 6e 6f 74 55 73 65 64 31 3b 20 20 20 20 20 20 20  notUsed1;       
c7d0: 20 20 20 20 20 2f 2a 20 53 70 61 63 65 72 20 2a       /* Spacer *
c7e0: 2f 0a 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b  /.  } u1;.  Look
c7f0: 61 73 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65 3b  aside lookaside;
c800: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
c810: 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63 6f  kaside malloc co
c820: 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a 23  nfiguration */.#
c830: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
c840: 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e  IT_AUTHORIZATION
c850: 0a 20 20 73 71 6c 69 74 65 33 5f 78 61 75 74 68  .  sqlite3_xauth
c860: 20 78 41 75 74 68 3b 20 20 20 20 20 20 20 20 20   xAuth;         
c870: 20 2f 2a 20 41 63 63 65 73 73 20 61 75 74 68 6f   /* Access autho
c880: 72 69 7a 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f  rization functio
c890: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75  n */.  void *pAu
c8a0: 74 68 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  thArg;          
c8b0: 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75       /* 1st argu
c8c0: 6d 65 6e 74 20 74 6f 20 74 68 65 20 61 63 63 65  ment to the acce
c8d0: 73 73 20 61 75 74 68 20 66 75 6e 63 74 69 6f 6e  ss auth function
c8e0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64   */.#endif.#ifnd
c8f0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
c900: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
c910: 0a 20 20 69 6e 74 20 28 2a 78 50 72 6f 67 72 65  .  int (*xProgre
c920: 73 73 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20  ss)(void *);    
c930: 20 2f 2a 20 54 68 65 20 70 72 6f 67 72 65 73 73   /* The progress
c940: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76   callback */.  v
c950: 6f 69 64 20 2a 70 50 72 6f 67 72 65 73 73 41 72  oid *pProgressAr
c960: 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  g;           /* 
c970: 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  Argument to the 
c980: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
c990: 6b 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  k */.  unsigned 
c9a0: 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 20 20 20  nProgressOps;   
c9b0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
c9c0: 66 20 6f 70 63 6f 64 65 73 20 66 6f 72 20 70 72  f opcodes for pr
c9d0: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
c9e0: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
c9f0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
ca00: 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74  RTUALTABLE.  int
ca10: 20 6e 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20   nVTrans;       
ca20: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
ca30: 6c 6f 63 61 74 65 64 20 73 69 7a 65 20 6f 66 20  located size of 
ca40: 61 56 54 72 61 6e 73 20 2a 2f 0a 20 20 48 61 73  aVTrans */.  Has
ca50: 68 20 61 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20  h aModule;      
ca60: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 6f             /* po
ca70: 70 75 6c 61 74 65 64 20 62 79 20 73 71 6c 69 74  pulated by sqlit
ca80: 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65  e3_create_module
ca90: 28 29 20 2a 2f 0a 20 20 56 74 61 62 43 74 78 20  () */.  VtabCtx 
caa0: 2a 70 56 74 61 62 43 74 78 3b 20 20 20 20 20 20  *pVtabCtx;      
cab0: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74        /* Context
cac0: 20 66 6f 72 20 61 63 74 69 76 65 20 76 74 61 62   for active vtab
cad0: 20 63 6f 6e 6e 65 63 74 2f 63 72 65 61 74 65 20   connect/create 
cae0: 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 2a 61 56  */.  VTable **aV
caf0: 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20  Trans;          
cb00: 20 20 20 2f 2a 20 56 69 72 74 75 61 6c 20 74 61     /* Virtual ta
cb10: 62 6c 65 73 20 77 69 74 68 20 6f 70 65 6e 20 74  bles with open t
cb20: 72 61 6e 73 61 63 74 69 6f 6e 73 20 2a 2f 0a 20  ransactions */. 
cb30: 20 56 54 61 62 6c 65 20 2a 70 44 69 73 63 6f 6e   VTable *pDiscon
cb40: 6e 65 63 74 3b 20 20 20 20 2f 2a 20 44 69 73 63  nect;    /* Disc
cb50: 6f 6e 6e 65 63 74 20 74 68 65 73 65 20 69 6e 20  onnect these in 
cb60: 6e 65 78 74 20 73 71 6c 69 74 65 33 5f 70 72 65  next sqlite3_pre
cb70: 70 61 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69 66  pare() */.#endif
cb80: 0a 20 20 48 61 73 68 20 61 46 75 6e 63 3b 20 20  .  Hash aFunc;  
cb90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cba0: 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20 6f   /* Hash table o
cbb0: 66 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75 6e  f connection fun
cbc0: 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73 68  ctions */.  Hash
cbd0: 20 61 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20 20   aCollSeq;      
cbe0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c            /* All
cbf0: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
cc00: 6e 63 65 73 20 2a 2f 0a 20 20 42 75 73 79 48 61  nces */.  BusyHa
cc10: 6e 64 6c 65 72 20 62 75 73 79 48 61 6e 64 6c 65  ndler busyHandle
cc20: 72 3b 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20  r;      /* Busy 
cc30: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44 62  callback */.  Db
cc40: 20 61 44 62 53 74 61 74 69 63 5b 32 5d 3b 20 20   aDbStatic[2];  
cc50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
cc60: 74 61 74 69 63 20 73 70 61 63 65 20 66 6f 72 20  tatic space for 
cc70: 74 68 65 20 32 20 64 65 66 61 75 6c 74 20 62 61  the 2 default ba
cc80: 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76 65  ckends */.  Save
cc90: 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e  point *pSavepoin
cca0: 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73  t;        /* Lis
ccb0: 74 20 6f 66 20 61 63 74 69 76 65 20 73 61 76 65  t of active save
ccc0: 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20  points */.  int 
ccd0: 62 75 73 79 54 69 6d 65 6f 75 74 3b 20 20 20 20  busyTimeout;    
cce0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 75 73            /* Bus
ccf0: 79 20 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f 75  y handler timeou
cd00: 74 2c 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20 20  t, in msec */.  
cd10: 69 6e 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b 20  int nSavepoint; 
cd20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
cd30: 20 4e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74   Number of non-t
cd40: 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70  ransaction savep
cd50: 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  oints */.  int n
cd60: 53 74 61 74 65 6d 65 6e 74 3b 20 20 20 20 20 20  Statement;      
cd70: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
cd80: 65 72 20 6f 66 20 6e 65 73 74 65 64 20 73 74 61  er of nested sta
cd90: 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69  tement-transacti
cda0: 6f 6e 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e 44  ons  */.  i64 nD
cdb0: 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20  eferredCons;    
cdc0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64          /* Net d
cdd0: 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69  eferred constrai
cde0: 6e 74 73 20 74 68 69 73 20 74 72 61 6e 73 61 63  nts this transac
cdf0: 74 69 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20 6e  tion. */.  i64 n
ce00: 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b  DeferredImmCons;
ce10: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20           /* Net 
ce20: 64 65 66 65 72 72 65 64 20 69 6d 6d 65 64 69 61  deferred immedia
ce30: 74 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  te constraints *
ce40: 2f 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73  /.  int *pnBytes
ce50: 46 72 65 65 64 3b 20 20 20 20 20 20 20 20 20 20  Freed;          
ce60: 20 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c    /* If not NULL
ce70: 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73  , increment this
ce80: 20 69 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a   in DbFree() */.
ce90: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
cea0: 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49  ABLE_UNLOCK_NOTI
ceb0: 46 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c  FY.  /* The foll
cec0: 6f 77 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20  owing variables 
ced0: 61 72 65 20 61 6c 6c 20 70 72 6f 74 65 63 74 65  are all protecte
cee0: 64 20 62 79 20 74 68 65 20 53 54 41 54 49 43 5f  d by the STATIC_
cef0: 4d 41 53 54 45 52 0a 20 20 2a 2a 20 6d 75 74 65  MASTER.  ** mute
cf00: 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69 74 65  x, not by sqlite
cf10: 33 2e 6d 75 74 65 78 2e 20 54 68 65 79 20 61 72  3.mutex. They ar
cf20: 65 20 75 73 65 64 20 62 79 20 63 6f 64 65 20 69  e used by code i
cf30: 6e 20 6e 6f 74 69 66 79 2e 63 2e 0a 20 20 2a 2a  n notify.c..  **
cf40: 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 55 6e  .  ** When X.pUn
cf50: 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d  lockConnection==
cf60: 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68  Y, that means th
cf70: 61 74 20 58 20 69 73 20 77 61 69 74 69 6e 67 20  at X is waiting 
cf80: 66 6f 72 20 59 20 74 6f 0a 20 20 2a 2a 20 75 6e  for Y to.  ** un
cf90: 6c 6f 63 6b 20 73 6f 20 74 68 61 74 20 69 74 20  lock so that it 
cfa0: 63 61 6e 20 70 72 6f 63 65 65 64 2e 0a 20 20 2a  can proceed..  *
cfb0: 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 42  *.  ** When X.pB
cfc0: 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f  lockingConnectio
cfd0: 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73  n==Y, that means
cfe0: 20 74 68 61 74 20 73 6f 6d 65 74 68 69 6e 67 20   that something 
cff0: 74 68 61 74 20 58 20 74 72 69 65 64 0a 20 20 2a  that X tried.  *
d000: 2a 20 74 72 69 65 64 20 74 6f 20 64 6f 20 72 65  * tried to do re
d010: 63 65 6e 74 6c 79 20 66 61 69 6c 65 64 20 77 69  cently failed wi
d020: 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 4c 4f 43  th an SQLITE_LOC
d030: 4b 45 44 20 65 72 72 6f 72 20 64 75 65 20 74 6f  KED error due to
d040: 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68 65 6c 64   locks.  ** held
d050: 20 62 79 20 59 2e 0a 20 20 2a 2f 0a 20 20 73 71   by Y..  */.  sq
d060: 6c 69 74 65 33 20 2a 70 42 6c 6f 63 6b 69 6e 67  lite3 *pBlocking
d070: 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20 43  Connection; /* C
d080: 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74 20 63  onnection that c
d090: 61 75 73 65 64 20 53 51 4c 49 54 45 5f 4c 4f 43  aused SQLITE_LOC
d0a0: 4b 45 44 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  KED */.  sqlite3
d0b0: 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74   *pUnlockConnect
d0c0: 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ion;           /
d0d0: 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20  * Connection to 
d0e0: 77 61 74 63 68 20 66 6f 72 20 75 6e 6c 6f 63 6b  watch for unlock
d0f0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 6e 6c   */.  void *pUnl
d100: 6f 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20 20  ockArg;         
d110: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
d120: 72 67 75 6d 65 6e 74 20 74 6f 20 78 55 6e 6c 6f  rgument to xUnlo
d130: 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20 20 76 6f  ckNotify */.  vo
d140: 69 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69  id (*xUnlockNoti
d150: 66 79 29 28 76 6f 69 64 20 2a 2a 2c 20 69 6e 74  fy)(void **, int
d160: 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f  );  /* Unlock no
d170: 74 69 66 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  tify callback */
d180: 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 4e 65 78  .  sqlite3 *pNex
d190: 74 42 6c 6f 63 6b 65 64 3b 20 20 20 20 20 20 20  tBlocked;       
d1a0: 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 73 74   /* Next in list
d1b0: 20 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b 65 64 20   of all blocked 
d1c0: 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a 23  connections */.#
d1d0: 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
d1e0: 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54  ITE_USER_AUTHENT
d1f0: 49 43 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65  ICATION.  sqlite
d200: 33 5f 75 73 65 72 61 75 74 68 20 61 75 74 68 3b  3_userauth auth;
d210: 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20          /* User 
d220: 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 69  authentication i
d230: 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 23 65  nformation */.#e
d240: 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  ndif.};../*.** A
d250: 20 6d 61 63 72 6f 20 74 6f 20 64 69 73 63 6f 76   macro to discov
d260: 65 72 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20  er the encoding 
d270: 6f 66 20 61 20 64 61 74 61 62 61 73 65 2e 0a 2a  of a database..*
d280: 2f 0a 23 64 65 66 69 6e 65 20 53 43 48 45 4d 41  /.#define SCHEMA
d290: 5f 45 4e 43 28 64 62 29 20 28 28 64 62 29 2d 3e  _ENC(db) ((db)->
d2a0: 61 44 62 5b 30 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[0].pSchema->
d2b0: 65 6e 63 29 0a 23 64 65 66 69 6e 65 20 45 4e 43  enc).#define ENC
d2c0: 28 64 62 29 20 20 20 20 20 20 20 20 28 28 64 62  (db)        ((db
d2d0: 29 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 50  )->enc)../*.** P
d2e0: 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66  ossible values f
d2f0: 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33 2e 66  or the sqlite3.f
d300: 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75  lags..**.** Valu
d310: 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65  e constraints (e
d320: 6e 66 6f 72 63 65 64 20 76 69 61 20 61 73 73 65  nforced via asse
d330: 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20 20 53  rt()):.**      S
d340: 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20  QLITE_FullFSync 
d350: 20 20 20 20 3d 3d 20 50 41 47 45 52 5f 46 55 4c      == PAGER_FUL
d360: 4c 46 53 59 4e 43 0a 2a 2a 20 20 20 20 20 20 53  LFSYNC.**      S
d370: 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53  QLITE_CkptFullFS
d380: 79 6e 63 20 3d 3d 20 50 41 47 45 52 5f 43 4b 50  ync == PAGER_CKP
d390: 54 5f 46 55 4c 4c 46 53 59 4e 43 0a 2a 2a 20 20  T_FULLFSYNC.**  
d3a0: 20 20 20 20 53 51 4c 49 54 45 5f 43 61 63 68 65      SQLITE_Cache
d3b0: 53 70 69 6c 6c 20 20 20 20 3d 3d 20 50 41 47 45  Spill    == PAGE
d3c0: 52 5f 43 41 43 48 45 5f 53 50 49 4c 4c 0a 2a 2f  R_CACHE_SPILL.*/
d3d0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d3e0: 57 72 69 74 65 53 63 68 65 6d 61 20 20 20 20 30  WriteSchema    0
d3f0: 78 30 30 30 30 30 30 30 31 20 20 2f 2a 20 4f 4b  x00000001  /* OK
d400: 20 74 6f 20 75 70 64 61 74 65 20 53 51 4c 49 54   to update SQLIT
d410: 45 5f 4d 41 53 54 45 52 20 2a 2f 0a 23 64 65 66  E_MASTER */.#def
d420: 69 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67 61 63  ine SQLITE_Legac
d430: 79 46 69 6c 65 46 6d 74 20 20 30 78 30 30 30 30  yFileFmt  0x0000
d440: 30 30 30 32 20 20 2f 2a 20 43 72 65 61 74 65 20  0002  /* Create 
d450: 6e 65 77 20 64 61 74 61 62 61 73 65 73 20 69 6e  new databases in
d460: 20 66 6f 72 6d 61 74 20 31 20 2a 2f 0a 23 64 65   format 1 */.#de
d470: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c  fine SQLITE_Full
d480: 43 6f 6c 4e 61 6d 65 73 20 20 20 30 78 30 30 30  ColNames   0x000
d490: 30 30 30 30 34 20 20 2f 2a 20 53 68 6f 77 20 66  00004  /* Show f
d4a0: 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  ull column names
d4b0: 20 6f 6e 20 53 45 4c 45 43 54 20 2a 2f 0a 23 64   on SELECT */.#d
d4c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c  efine SQLITE_Ful
d4d0: 6c 46 53 79 6e 63 20 20 20 20 20 20 30 78 30 30  lFSync      0x00
d4e0: 30 30 30 30 30 38 20 20 2f 2a 20 55 73 65 20 66  000008  /* Use f
d4f0: 75 6c 6c 20 66 73 79 6e 63 20 6f 6e 20 74 68 65  ull fsync on the
d500: 20 62 61 63 6b 65 6e 64 20 2a 2f 0a 23 64 65 66   backend */.#def
d510: 69 6e 65 20 53 51 4c 49 54 45 5f 43 6b 70 74 46  ine SQLITE_CkptF
d520: 75 6c 6c 46 53 79 6e 63 20 20 30 78 30 30 30 30  ullFSync  0x0000
d530: 30 30 31 30 20 20 2f 2a 20 55 73 65 20 66 75 6c  0010  /* Use ful
d540: 6c 20 66 73 79 6e 63 20 66 6f 72 20 63 68 65 63  l fsync for chec
d550: 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  kpoint */.#defin
d560: 65 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70  e SQLITE_CacheSp
d570: 69 6c 6c 20 20 20 20 20 30 78 30 30 30 30 30 30  ill     0x000000
d580: 32 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 73 70 69  20  /* OK to spi
d590: 6c 6c 20 70 61 67 65 72 20 63 61 63 68 65 20 2a  ll pager cache *
d5a0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d5b0: 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20 20  _ShortColNames  
d5c0: 30 78 30 30 30 30 30 30 34 30 20 20 2f 2a 20 53  0x00000040  /* S
d5d0: 68 6f 77 20 73 68 6f 72 74 20 63 6f 6c 75 6d 6e  how short column
d5e0: 73 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69  s names */.#defi
d5f0: 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52  ne SQLITE_CountR
d600: 6f 77 73 20 20 20 20 20 20 30 78 30 30 30 30 30  ows      0x00000
d610: 30 38 30 20 20 2f 2a 20 43 6f 75 6e 74 20 72 6f  080  /* Count ro
d620: 77 73 20 63 68 61 6e 67 65 64 20 62 79 20 49 4e  ws changed by IN
d630: 53 45 52 54 2c 20 2a 2f 0a 20 20 20 20 20 20 20  SERT, */.       
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 20 20 20 20 20                  
d660: 20 20 20 2f 2a 20 20 20 44 45 4c 45 54 45 2c 20     /*   DELETE, 
d670: 6f 72 20 55 50 44 41 54 45 20 61 6e 64 20 72 65  or UPDATE and re
d680: 74 75 72 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20  turn */.        
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 20 20 20 20 20 20                  
d6b0: 20 20 2f 2a 20 20 20 74 68 65 20 63 6f 75 6e 74    /*   the count
d6c0: 20 75 73 69 6e 67 20 61 20 63 61 6c 6c 62 61 63   using a callbac
d6d0: 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  k. */.#define SQ
d6e0: 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63  LITE_NullCallbac
d6f0: 6b 20 20 20 30 78 30 30 30 30 30 31 30 30 20 20  k   0x00000100  
d700: 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 63 61  /* Invoke the ca
d710: 6c 6c 62 61 63 6b 20 6f 6e 63 65 20 69 66 20 74  llback once if t
d720: 68 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  he */.          
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 20 20 20 20 20 20 20 20                  
d750: 2f 2a 20 20 20 72 65 73 75 6c 74 20 73 65 74 20  /*   result set 
d760: 69 73 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66  is empty */.#def
d770: 69 6e 65 20 53 51 4c 49 54 45 5f 49 67 6e 6f 72  ine SQLITE_Ignor
d780: 65 43 68 65 63 6b 73 20 20 20 30 78 30 30 30 30  eChecks   0x0000
d790: 30 32 30 30 20 20 2f 2a 20 44 6f 20 6e 6f 74 20  0200  /* Do not 
d7a0: 65 6e 66 6f 72 63 65 20 63 68 65 63 6b 20 63 6f  enforce check co
d7b0: 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65  nstraints */.#de
d7c0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 61 64  fine SQLITE_Read
d7d0: 55 6e 63 6f 6d 6d 69 74 20 20 20 30 78 30 30 30  Uncommit   0x000
d7e0: 30 30 34 30 30 20 20 2f 2a 20 52 45 41 44 20 55  00400  /* READ U
d7f0: 4e 43 4f 4d 4d 49 54 54 45 44 20 69 6e 20 73 68  NCOMMITTED in sh
d800: 61 72 65 64 2d 63 61 63 68 65 20 2a 2f 0a 23 64  ared-cache */.#d
d810: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 6f 43  efine SQLITE_NoC
d820: 6b 70 74 4f 6e 43 6c 6f 73 65 20 20 30 78 30 30  kptOnClose  0x00
d830: 30 30 30 38 30 30 20 20 2f 2a 20 4e 6f 20 63 68  000800  /* No ch
d840: 65 63 6b 70 6f 69 6e 74 20 6f 6e 20 63 6c 6f 73  eckpoint on clos
d850: 65 28 29 2f 44 45 54 41 43 48 20 2a 2f 0a 23 64  e()/DETACH */.#d
d860: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 76  efine SQLITE_Rev
d870: 65 72 73 65 4f 72 64 65 72 20 20 20 30 78 30 30  erseOrder   0x00
d880: 30 30 31 30 30 30 20 20 2f 2a 20 52 65 76 65 72  001000  /* Rever
d890: 73 65 20 75 6e 6f 72 64 65 72 65 64 20 53 45 4c  se unordered SEL
d8a0: 45 43 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ECTs */.#define 
d8b0: 53 51 4c 49 54 45 5f 52 65 63 54 72 69 67 67 65  SQLITE_RecTrigge
d8c0: 72 73 20 20 20 20 30 78 30 30 30 30 32 30 30 30  rs    0x00002000
d8d0: 20 20 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63 75    /* Enable recu
d8e0: 72 73 69 76 65 20 74 72 69 67 67 65 72 73 20 2a  rsive triggers *
d8f0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d900: 5f 46 6f 72 65 69 67 6e 4b 65 79 73 20 20 20 20  _ForeignKeys    
d910: 30 78 30 30 30 30 34 30 30 30 20 20 2f 2a 20 45  0x00004000  /* E
d920: 6e 66 6f 72 63 65 20 66 6f 72 65 69 67 6e 20 6b  nforce foreign k
d930: 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 20  ey constraints  
d940: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d950: 45 5f 41 75 74 6f 49 6e 64 65 78 20 20 20 20 20  E_AutoIndex     
d960: 20 30 78 30 30 30 30 38 30 30 30 20 20 2f 2a 20   0x00008000  /* 
d970: 45 6e 61 62 6c 65 20 61 75 74 6f 6d 61 74 69 63  Enable automatic
d980: 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66   indexes */.#def
d990: 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45  ine SQLITE_LoadE
d9a0: 78 74 65 6e 73 69 6f 6e 20 20 30 78 30 30 30 31  xtension  0x0001
d9b0: 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20  0000  /* Enable 
d9c0: 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20 2a  load_extension *
d9d0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d9e0: 5f 4c 6f 61 64 45 78 74 46 75 6e 63 20 20 20 20  _LoadExtFunc    
d9f0: 30 78 30 30 30 32 30 30 30 30 20 20 2f 2a 20 45  0x00020000  /* E
da00: 6e 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e  nable load_exten
da10: 73 69 6f 6e 28 29 20 53 51 4c 20 66 75 6e 63 20  sion() SQL func 
da20: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
da30: 45 5f 45 6e 61 62 6c 65 54 72 69 67 67 65 72 20  E_EnableTrigger 
da40: 20 30 78 30 30 30 34 30 30 30 30 20 20 2f 2a 20   0x00040000  /* 
da50: 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 74  True to enable t
da60: 72 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66 69  riggers */.#defi
da70: 6e 65 20 53 51 4c 49 54 45 5f 44 65 66 65 72 46  ne SQLITE_DeferF
da80: 4b 73 20 20 20 20 20 20 20 30 78 30 30 30 38 30  Ks       0x00080
da90: 30 30 30 20 20 2f 2a 20 44 65 66 65 72 20 61 6c  000  /* Defer al
daa0: 6c 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73  l FK constraints
dab0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
dac0: 54 45 5f 51 75 65 72 79 4f 6e 6c 79 20 20 20 20  TE_QueryOnly    
dad0: 20 20 30 78 30 30 31 30 30 30 30 30 20 20 2f 2a    0x00100000  /*
dae0: 20 44 69 73 61 62 6c 65 20 64 61 74 61 62 61 73   Disable databas
daf0: 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65  e changes */.#de
db00: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 65 6c 6c  fine SQLITE_Cell
db10: 53 69 7a 65 43 6b 20 20 20 20 20 30 78 30 30 32  SizeCk     0x002
db20: 30 30 30 30 30 20 20 2f 2a 20 43 68 65 63 6b 20  00000  /* Check 
db30: 62 74 72 65 65 20 63 65 6c 6c 20 73 69 7a 65 73  btree cell sizes
db40: 20 6f 6e 20 6c 6f 61 64 20 2a 2f 0a 23 64 65 66   on load */.#def
db50: 69 6e 65 20 53 51 4c 49 54 45 5f 46 74 73 33 54  ine SQLITE_Fts3T
db60: 6f 6b 65 6e 69 7a 65 72 20 20 30 78 30 30 34 30  okenizer  0x0040
db70: 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20  0000  /* Enable 
db80: 66 74 73 33 5f 74 6f 6b 65 6e 69 7a 65 72 28 32  fts3_tokenizer(2
db90: 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ) */.#define SQL
dba0: 49 54 45 5f 45 6e 61 62 6c 65 51 50 53 47 20 20  ITE_EnableQPSG  
dbb0: 20 20 20 30 78 30 30 38 30 30 30 30 30 20 20 2f     0x00800000  /
dbc0: 2a 20 51 75 65 72 79 20 50 6c 61 6e 6e 65 72 20  * Query Planner 
dbd0: 53 74 61 62 69 6c 69 74 79 20 47 75 61 72 61 6e  Stability Guaran
dbe0: 74 65 65 20 2a 2f 0a 2f 2a 20 46 6c 61 67 73 20  tee */./* Flags 
dbf0: 75 73 65 64 20 6f 6e 6c 79 20 69 66 20 64 65 62  used only if deb
dc00: 75 67 67 69 6e 67 20 2a 2f 0a 23 69 66 64 65 66  ugging */.#ifdef
dc10: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 64   SQLITE_DEBUG.#d
dc20: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 6f 6f  efine SQLITE_Noo
dc30: 70 55 70 64 61 74 65 20 20 20 20 20 30 78 30 34  pUpdate     0x04
dc40: 30 30 30 30 30 30 20 20 2f 2a 20 55 50 44 41 54  000000  /* UPDAT
dc50: 45 20 6f 70 65 72 61 74 69 6f 6e 73 20 61 72 65  E operations are
dc60: 20 6e 6f 2d 6f 70 73 20 2a 2f 0a 23 64 65 66 69   no-ops */.#defi
dc70: 6e 65 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61  ne SQLITE_SqlTra
dc80: 63 65 20 20 20 20 20 20 20 30 78 30 38 30 30 30  ce       0x08000
dc90: 30 30 30 20 20 2f 2a 20 44 65 62 75 67 20 70 72  000  /* Debug pr
dca0: 69 6e 74 20 53 51 4c 20 61 73 20 69 74 20 65 78  int SQL as it ex
dcb0: 65 63 75 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e  ecutes */.#defin
dcc0: 65 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73  e SQLITE_VdbeLis
dcd0: 74 69 6e 67 20 20 20 20 30 78 31 30 30 30 30 30  ting    0x100000
dce0: 30 30 20 20 2f 2a 20 44 65 62 75 67 20 6c 69 73  00  /* Debug lis
dcf0: 74 69 6e 67 73 20 6f 66 20 56 44 42 45 20 70 72  tings of VDBE pr
dd00: 6f 67 72 61 6d 73 20 2a 2f 0a 23 64 65 66 69 6e  ograms */.#defin
dd10: 65 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61  e SQLITE_VdbeTra
dd20: 63 65 20 20 20 20 20 20 30 78 32 30 30 30 30 30  ce      0x200000
dd30: 30 30 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 74  00  /* True to t
dd40: 72 61 63 65 20 56 44 42 45 20 65 78 65 63 75 74  race VDBE execut
dd50: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
dd60: 51 4c 49 54 45 5f 56 64 62 65 41 64 64 6f 70 54  QLITE_VdbeAddopT
dd70: 72 61 63 65 20 30 78 34 30 30 30 30 30 30 30 20  race 0x40000000 
dd80: 20 2f 2a 20 54 72 61 63 65 20 73 71 6c 69 74 65   /* Trace sqlite
dd90: 33 56 64 62 65 41 64 64 4f 70 28 29 20 63 61 6c  3VdbeAddOp() cal
dda0: 6c 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ls */.#define SQ
ddb0: 4c 49 54 45 5f 56 64 62 65 45 51 50 20 20 20 20  LITE_VdbeEQP    
ddc0: 20 20 20 20 30 78 38 30 30 30 30 30 30 30 20 20      0x80000000  
ddd0: 2f 2a 20 44 65 62 75 67 20 45 58 50 4c 41 49 4e  /* Debug EXPLAIN
dde0: 20 51 55 45 52 59 20 50 4c 41 4e 20 2a 2f 0a 23   QUERY PLAN */.#
ddf0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  endif../*.** All
de00: 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
de10: 73 71 6c 69 74 65 33 2e 6d 44 62 46 6c 61 67 73  sqlite3.mDbFlags
de20: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 46 4c  .*/.#define DBFL
de30: 41 47 5f 53 63 68 65 6d 61 43 68 61 6e 67 65 20  AG_SchemaChange 
de40: 20 20 30 78 30 30 30 31 20 20 2f 2a 20 55 6e 63    0x0001  /* Unc
de50: 6f 6d 6d 69 74 74 65 64 20 48 61 73 68 20 74 61  ommitted Hash ta
de60: 62 6c 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23  ble changes */.#
de70: 64 65 66 69 6e 65 20 44 42 46 4c 41 47 5f 50 72  define DBFLAG_Pr
de80: 65 66 65 72 42 75 69 6c 74 69 6e 20 20 30 78 30  eferBuiltin  0x0
de90: 30 30 32 20 20 2f 2a 20 50 72 65 66 65 72 65 6e  002  /* Preferen
dea0: 63 65 20 74 6f 20 62 75 69 6c 74 2d 69 6e 20 66  ce to built-in f
deb0: 75 6e 63 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  uncs */.#define 
dec0: 44 42 46 4c 41 47 5f 56 61 63 75 75 6d 20 20 20  DBFLAG_Vacuum   
ded0: 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a        0x0004  /*
dee0: 20 43 75 72 72 65 6e 74 6c 79 20 69 6e 20 61 20   Currently in a 
def0: 56 41 43 55 55 4d 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  VACUUM */../*.**
df00: 20 42 69 74 73 20 6f 66 20 74 68 65 20 73 71 6c   Bits of the sql
df10: 69 74 65 33 2e 64 62 4f 70 74 46 6c 61 67 73 20  ite3.dbOptFlags 
df20: 66 69 65 6c 64 20 74 68 61 74 20 61 72 65 20 75  field that are u
df30: 73 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 73 71  sed by the.** sq
df40: 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72  lite3_test_contr
df50: 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53 54 43 54  ol(SQLITE_TESTCT
df60: 52 4c 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 53  RL_OPTIMIZATIONS
df70: 2c 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63 65 20  ,...) interface 
df80: 74 6f 0a 2a 2a 20 73 65 6c 65 63 74 69 76 65 6c  to.** selectivel
df90: 79 20 64 69 73 61 62 6c 65 20 76 61 72 69 6f 75  y disable variou
dfa0: 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2e  s optimizations.
dfb0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
dfc0: 54 45 5f 51 75 65 72 79 46 6c 61 74 74 65 6e 65  TE_QueryFlattene
dfd0: 72 20 30 78 30 30 30 31 20 20 20 2f 2a 20 51 75  r 0x0001   /* Qu
dfe0: 65 72 79 20 66 6c 61 74 74 65 6e 69 6e 67 20 2a  ery flattening *
dff0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e000: 5f 43 6f 6c 75 6d 6e 43 61 63 68 65 20 20 20 20  _ColumnCache    
e010: 30 78 30 30 30 32 20 20 20 2f 2a 20 43 6f 6c 75  0x0002   /* Colu
e020: 6d 6e 20 63 61 63 68 65 20 2a 2f 0a 23 64 65 66  mn cache */.#def
e030: 69 6e 65 20 53 51 4c 49 54 45 5f 47 72 6f 75 70  ine SQLITE_Group
e040: 42 79 4f 72 64 65 72 20 20 20 30 78 30 30 30 34  ByOrder   0x0004
e050: 20 20 20 2f 2a 20 47 52 4f 55 50 42 59 20 63 6f     /* GROUPBY co
e060: 76 65 72 20 6f 66 20 4f 52 44 45 52 42 59 20 2a  ver of ORDERBY *
e070: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e080: 5f 46 61 63 74 6f 72 4f 75 74 43 6f 6e 73 74 20  _FactorOutConst 
e090: 30 78 30 30 30 38 20 20 20 2f 2a 20 43 6f 6e 73  0x0008   /* Cons
e0a0: 74 61 6e 74 20 66 61 63 74 6f 72 69 6e 67 20 2a  tant factoring *
e0b0: 2f 0a 2f 2a 20 20 20 20 20 20 20 20 20 20 20 20  /./*            
e0c0: 20 20 20 20 6e 6f 74 20 75 73 65 64 20 20 20 20      not used    
e0d0: 30 78 30 30 31 30 20 20 20 2f 2f 20 57 61 73 3a  0x0010   // Was:
e0e0: 20 53 51 4c 49 54 45 5f 49 64 78 52 65 61 6c 41   SQLITE_IdxRealA
e0f0: 73 49 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  sInt */.#define 
e100: 53 51 4c 49 54 45 5f 44 69 73 74 69 6e 63 74 4f  SQLITE_DistinctO
e110: 70 74 20 20 20 20 30 78 30 30 32 30 20 20 20 2f  pt    0x0020   /
e120: 2a 20 44 49 53 54 49 4e 43 54 20 75 73 69 6e 67  * DISTINCT using
e130: 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66   indexes */.#def
e140: 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 76 65 72  ine SQLITE_Cover
e150: 49 64 78 53 63 61 6e 20 20 20 30 78 30 30 34 30  IdxScan   0x0040
e160: 20 20 20 2f 2a 20 43 6f 76 65 72 69 6e 67 20 69     /* Covering i
e170: 6e 64 65 78 20 73 63 61 6e 73 20 2a 2f 0a 23 64  ndex scans */.#d
e180: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 72 64  efine SQLITE_Ord
e190: 65 72 42 79 49 64 78 4a 6f 69 6e 20 30 78 30 30  erByIdxJoin 0x00
e1a0: 38 30 20 20 20 2f 2a 20 4f 52 44 45 52 20 42 59  80   /* ORDER BY
e1b0: 20 6f 66 20 6a 6f 69 6e 73 20 76 69 61 20 69 6e   of joins via in
e1c0: 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  dex */.#define S
e1d0: 51 4c 49 54 45 5f 53 75 62 71 43 6f 72 6f 75 74  QLITE_SubqCorout
e1e0: 69 6e 65 20 20 30 78 30 31 30 30 20 20 20 2f 2a  ine  0x0100   /*
e1f0: 20 45 76 61 6c 75 61 74 65 20 73 75 62 71 75 65   Evaluate subque
e200: 72 69 65 73 20 61 73 20 63 6f 72 6f 75 74 69 6e  ries as coroutin
e210: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
e220: 4c 49 54 45 5f 54 72 61 6e 73 69 74 69 76 65 20  LITE_Transitive 
e230: 20 20 20 20 30 78 30 32 30 30 20 20 20 2f 2a 20      0x0200   /* 
e240: 54 72 61 6e 73 69 74 69 76 65 20 63 6f 6e 73 74  Transitive const
e250: 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e  raints */.#defin
e260: 65 20 53 51 4c 49 54 45 5f 4f 6d 69 74 4e 6f 6f  e SQLITE_OmitNoo
e270: 70 4a 6f 69 6e 20 20 20 30 78 30 34 30 30 20 20  pJoin   0x0400  
e280: 20 2f 2a 20 4f 6d 69 74 20 75 6e 75 73 65 64 20   /* Omit unused 
e290: 74 61 62 6c 65 73 20 69 6e 20 6a 6f 69 6e 73 20  tables in joins 
e2a0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e2b0: 45 5f 53 74 61 74 33 34 20 20 20 20 20 20 20 20  E_Stat34        
e2c0: 20 30 78 30 38 30 30 20 20 20 2f 2a 20 55 73 65   0x0800   /* Use
e2d0: 20 53 54 41 54 33 20 6f 72 20 53 54 41 54 34 20   STAT3 or STAT4 
e2e0: 64 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e 65 20  data */.#define 
e2f0: 53 51 4c 49 54 45 5f 43 6f 75 6e 74 4f 66 56 69  SQLITE_CountOfVi
e300: 65 77 20 20 20 20 30 78 31 30 30 30 20 20 20 2f  ew    0x1000   /
e310: 2a 20 54 68 65 20 63 6f 75 6e 74 2d 6f 66 2d 76  * The count-of-v
e320: 69 65 77 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  iew optimization
e330: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e340: 54 45 5f 43 75 72 73 6f 72 48 69 6e 74 73 20 20  TE_CursorHints  
e350: 20 20 30 78 32 30 30 30 20 20 20 2f 2a 20 41 64    0x2000   /* Ad
e360: 64 20 4f 50 5f 43 75 72 73 6f 72 48 69 6e 74 20  d OP_CursorHint 
e370: 6f 70 63 6f 64 65 73 20 2a 2f 0a 23 64 65 66 69  opcodes */.#defi
e380: 6e 65 20 53 51 4c 49 54 45 5f 41 6c 6c 4f 70 74  ne SQLITE_AllOpt
e390: 73 20 20 20 20 20 20 20 20 30 78 66 66 66 66 20  s        0xffff 
e3a0: 20 20 2f 2a 20 41 6c 6c 20 6f 70 74 69 6d 69 7a    /* All optimiz
e3b0: 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  ations */../*.**
e3c0: 20 4d 61 63 72 6f 73 20 66 6f 72 20 74 65 73 74   Macros for test
e3d0: 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ing whether or n
e3e0: 6f 74 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  ot optimizations
e3f0: 20 61 72 65 20 65 6e 61 62 6c 65 64 20 6f 72 20   are enabled or 
e400: 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 64 65  disabled..*/.#de
e410: 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f  fine Optimizatio
e420: 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d 61  nDisabled(db, ma
e430: 73 6b 29 20 20 28 28 28 64 62 29 2d 3e 64 62 4f  sk)  (((db)->dbO
e440: 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29 21  ptFlags&(mask))!
e450: 3d 30 29 0a 23 64 65 66 69 6e 65 20 4f 70 74 69  =0).#define Opti
e460: 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28  mizationEnabled(
e470: 64 62 2c 20 6d 61 73 6b 29 20 20 20 28 28 28 64  db, mask)   (((d
e480: 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28  b)->dbOptFlags&(
e490: 6d 61 73 6b 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a  mask))==0)../*.*
e4a0: 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66  * Return true if
e4b0: 20 69 74 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72   it OK to factor
e4c0: 20 63 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73   constant expres
e4d0: 73 69 6f 6e 73 20 69 6e 74 6f 20 74 68 65 20 69  sions into the i
e4e0: 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a  nitialization.**
e4f0: 20 63 6f 64 65 2e 20 54 68 65 20 61 72 67 75 6d   code. The argum
e500: 65 6e 74 20 69 73 20 61 20 50 61 72 73 65 20 6f  ent is a Parse o
e510: 62 6a 65 63 74 20 66 6f 72 20 74 68 65 20 63 6f  bject for the co
e520: 64 65 20 67 65 6e 65 72 61 74 6f 72 2e 0a 2a 2f  de generator..*/
e530: 0a 23 64 65 66 69 6e 65 20 43 6f 6e 73 74 46 61  .#define ConstFa
e540: 63 74 6f 72 4f 6b 28 50 29 20 28 28 50 29 2d 3e  ctorOk(P) ((P)->
e550: 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72 29 0a 0a  okConstFactor)..
e560: 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76  /*.** Possible v
e570: 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 73 71  alues for the sq
e580: 6c 69 74 65 2e 6d 61 67 69 63 20 66 69 65 6c 64  lite.magic field
e590: 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 73  ..** The numbers
e5a0: 20 61 72 65 20 6f 62 74 61 69 6e 65 64 20 61 74   are obtained at
e5b0: 20 72 61 6e 64 6f 6d 20 61 6e 64 20 68 61 76 65   random and have
e5c0: 20 6e 6f 20 73 70 65 63 69 61 6c 20 6d 65 61 6e   no special mean
e5d0: 69 6e 67 2c 20 6f 74 68 65 72 0a 2a 2a 20 74 68  ing, other.** th
e5e0: 61 6e 20 62 65 69 6e 67 20 64 69 73 74 69 6e 63  an being distinc
e5f0: 74 20 66 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68  t from one anoth
e600: 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  er..*/.#define S
e610: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e  QLITE_MAGIC_OPEN
e620: 20 20 20 20 20 30 78 61 30 32 39 61 36 39 37 20       0xa029a697 
e630: 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20   /* Database is 
e640: 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  open */.#define 
e650: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f  SQLITE_MAGIC_CLO
e660: 53 45 44 20 20 20 30 78 39 66 33 63 32 64 33 33  SED   0x9f3c2d33
e670: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73    /* Database is
e680: 20 63 6c 6f 73 65 64 20 2a 2f 0a 23 64 65 66 69   closed */.#defi
e690: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
e6a0: 53 49 43 4b 20 20 20 20 20 30 78 34 62 37 37 31  SICK     0x4b771
e6b0: 32 39 30 20 20 2f 2a 20 45 72 72 6f 72 20 61 6e  290  /* Error an
e6c0: 64 20 61 77 61 69 74 69 6e 67 20 63 6c 6f 73 65  d awaiting close
e6d0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e6e0: 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 20 20 20  TE_MAGIC_BUSY   
e6f0: 20 20 30 78 66 30 33 62 37 39 30 36 20 20 2f 2a    0xf03b7906  /*
e700: 20 44 61 74 61 62 61 73 65 20 63 75 72 72 65 6e   Database curren
e710: 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a 23 64  tly in use */.#d
e720: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
e730: 49 43 5f 45 52 52 4f 52 20 20 20 20 30 78 62 35  IC_ERROR    0xb5
e740: 33 35 37 39 33 30 20 20 2f 2a 20 41 6e 20 53 51  357930  /* An SQ
e750: 4c 49 54 45 5f 4d 49 53 55 53 45 20 65 72 72 6f  LITE_MISUSE erro
e760: 72 20 6f 63 63 75 72 72 65 64 20 2a 2f 0a 23 64  r occurred */.#d
e770: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
e780: 49 43 5f 5a 4f 4d 42 49 45 20 20 20 30 78 36 34  IC_ZOMBIE   0x64
e790: 63 66 66 63 37 66 20 20 2f 2a 20 43 6c 6f 73 65  cffc7f  /* Close
e7a0: 20 77 69 74 68 20 6c 61 73 74 20 73 74 61 74 65   with last state
e7b0: 6d 65 6e 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f  ment close */../
e7c0: 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 66 75  *.** Each SQL fu
e7d0: 6e 63 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65  nction is define
e7e0: 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65  d by an instance
e7f0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
e800: 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20  g.** structure. 
e810: 20 46 6f 72 20 67 6c 6f 62 61 6c 20 62 75 69 6c   For global buil
e820: 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 73 20 28  t-in functions (
e830: 65 78 3a 20 73 75 62 73 74 72 28 29 2c 20 6d 61  ex: substr(), ma
e840: 78 28 29 2c 20 63 6f 75 6e 74 28 29 29 0a 2a 2a  x(), count()).**
e850: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
e860: 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20  is structure is 
e870: 68 65 6c 64 20 69 6e 20 74 68 65 20 73 71 6c 69  held in the sqli
e880: 74 65 33 42 75 69 6c 74 69 6e 46 75 6e 63 74 69  te3BuiltinFuncti
e890: 6f 6e 73 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 46  ons object..** F
e8a0: 6f 72 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f  or per-connectio
e8b0: 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65  n application-de
e8c0: 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 2c  fined functions,
e8d0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
e8e0: 69 73 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20  is.** structure 
e8f0: 69 73 20 68 65 6c 64 20 69 6e 20 74 68 65 20 64  is held in the d
e900: 62 2d 3e 61 48 61 73 68 20 68 61 73 68 20 74 61  b->aHash hash ta
e910: 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 75  ble..**.** The u
e920: 2e 70 48 61 73 68 20 66 69 65 6c 64 20 69 73 20  .pHash field is 
e930: 75 73 65 64 20 62 79 20 74 68 65 20 67 6c 6f 62  used by the glob
e940: 61 6c 20 62 75 69 6c 74 2d 69 6e 73 2e 20 20 54  al built-ins.  T
e950: 68 65 20 75 2e 70 44 65 73 74 72 75 63 74 6f 72  he u.pDestructor
e960: 0a 2a 2a 20 66 69 65 6c 64 20 69 73 20 75 73 65  .** field is use
e970: 64 20 62 79 20 70 65 72 2d 63 6f 6e 6e 65 63 74  d by per-connect
e980: 69 6f 6e 20 61 70 70 2d 64 65 66 20 66 75 6e 63  ion app-def func
e990: 74 69 6f 6e 73 2e 0a 2a 2f 0a 73 74 72 75 63 74  tions..*/.struct
e9a0: 20 46 75 6e 63 44 65 66 20 7b 0a 20 20 69 38 20   FuncDef {.  i8 
e9b0: 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  nArg;           
e9c0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
e9d0: 72 67 75 6d 65 6e 74 73 2e 20 20 2d 31 20 6d 65  rguments.  -1 me
e9e0: 61 6e 73 20 75 6e 6c 69 6d 69 74 65 64 20 2a 2f  ans unlimited */
e9f0: 0a 20 20 75 31 36 20 66 75 6e 63 46 6c 61 67 73  .  u16 funcFlags
ea00: 3b 20 20 20 20 20 20 20 2f 2a 20 53 6f 6d 65 20  ;       /* Some 
ea10: 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 53  combination of S
ea20: 51 4c 49 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a  QLITE_FUNC_* */.
ea30: 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74    void *pUserDat
ea40: 61 3b 20 20 20 20 20 2f 2a 20 55 73 65 72 20 64  a;     /* User d
ea50: 61 74 61 20 70 61 72 61 6d 65 74 65 72 20 2a 2f  ata parameter */
ea60: 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 4e 65 78  .  FuncDef *pNex
ea70: 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20  t;      /* Next 
ea80: 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 73 61  function with sa
ea90: 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f 69  me name */.  voi
eaa0: 64 20 28 2a 78 53 46 75 6e 63 29 28 73 71 6c 69  d (*xSFunc)(sqli
eab0: 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
eac0: 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a  ,sqlite3_value**
ead0: 29 3b 20 2f 2a 20 66 75 6e 63 20 6f 72 20 61 67  ); /* func or ag
eae0: 67 2d 73 74 65 70 20 2a 2f 0a 20 20 76 6f 69 64  g-step */.  void
eaf0: 20 28 2a 78 46 69 6e 61 6c 69 7a 65 29 28 73 71   (*xFinalize)(sq
eb00: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b  lite3_context*);
eb10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb20: 20 20 2f 2a 20 41 67 67 20 66 69 6e 61 6c 69 7a    /* Agg finaliz
eb30: 65 72 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  er */.  const ch
eb40: 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 2f 2a 20  ar *zName;   /* 
eb50: 53 51 4c 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  SQL name of the 
eb60: 66 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 75  function. */.  u
eb70: 6e 69 6f 6e 20 7b 0a 20 20 20 20 46 75 6e 63 44  nion {.    FuncD
eb80: 65 66 20 2a 70 48 61 73 68 3b 20 20 20 20 20 20  ef *pHash;      
eb90: 2f 2a 20 4e 65 78 74 20 77 69 74 68 20 61 20 64  /* Next with a d
eba0: 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 62 75  ifferent name bu
ebb0: 74 20 74 68 65 20 73 61 6d 65 20 68 61 73 68 20  t the same hash 
ebc0: 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65 73 74 72  */.    FuncDestr
ebd0: 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74  uctor *pDestruct
ebe0: 6f 72 3b 20 20 20 2f 2a 20 52 65 66 65 72 65 6e  or;   /* Referen
ebf0: 63 65 20 63 6f 75 6e 74 65 64 20 64 65 73 74 72  ce counted destr
ec00: 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a  uctor function *
ec10: 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 0a  /.  } u;.};../*.
ec20: 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74 75 72  ** This structur
ec30: 65 20 65 6e 63 61 70 73 75 6c 61 74 65 73 20 61  e encapsulates a
ec40: 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 64   user-function d
ec50: 65 73 74 72 75 63 74 6f 72 20 63 61 6c 6c 62 61  estructor callba
ec60: 63 6b 20 28 61 73 0a 2a 2a 20 63 6f 6e 66 69 67  ck (as.** config
ec70: 75 72 65 64 20 75 73 69 6e 67 20 63 72 65 61 74  ured using creat
ec80: 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 29  e_function_v2())
ec90: 20 61 6e 64 20 61 20 72 65 66 65 72 65 6e 63 65   and a reference
eca0: 20 63 6f 75 6e 74 65 72 2e 20 57 68 65 6e 0a 2a   counter. When.*
ecb0: 2a 20 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  * create_functio
ecc0: 6e 5f 76 32 28 29 20 69 73 20 63 61 6c 6c 65 64  n_v2() is called
ecd0: 20 74 6f 20 63 72 65 61 74 65 20 61 20 66 75 6e   to create a fun
ece0: 63 74 69 6f 6e 20 77 69 74 68 20 61 20 64 65 73  ction with a des
ecf0: 74 72 75 63 74 6f 72 2c 0a 2a 2a 20 61 20 73 69  tructor,.** a si
ed00: 6e 67 6c 65 20 6f 62 6a 65 63 74 20 6f 66 20 74  ngle object of t
ed10: 68 69 73 20 74 79 70 65 20 69 73 20 61 6c 6c 6f  his type is allo
ed20: 63 61 74 65 64 2e 20 46 75 6e 63 44 65 73 74 72  cated. FuncDestr
ed30: 75 63 74 6f 72 2e 6e 52 65 66 20 69 73 20 73 65  uctor.nRef is se
ed40: 74 20 74 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62  t to.** the numb
ed50: 65 72 20 6f 66 20 46 75 6e 63 44 65 66 20 6f 62  er of FuncDef ob
ed60: 6a 65 63 74 73 20 63 72 65 61 74 65 64 20 28 65  jects created (e
ed70: 69 74 68 65 72 20 31 20 6f 72 20 33 2c 20 64 65  ither 1 or 3, de
ed80: 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68  pending on wheth
ed90: 65 72 0a 2a 2a 20 6f 72 20 6e 6f 74 20 74 68 65  er.** or not the
eda0: 20 73 70 65 63 69 66 69 65 64 20 65 6e 63 6f 64   specified encod
edb0: 69 6e 67 20 69 73 20 53 51 4c 49 54 45 5f 41 4e  ing is SQLITE_AN
edc0: 59 29 2e 20 54 68 65 20 46 75 6e 63 44 65 66 2e  Y). The FuncDef.
edd0: 70 44 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 6d  pDestructor.** m
ede0: 65 6d 62 65 72 20 6f 66 20 65 61 63 68 20 6f 66  ember of each of
edf0: 20 74 68 65 20 6e 65 77 20 46 75 6e 63 44 65 66   the new FuncDef
ee00: 20 6f 62 6a 65 63 74 73 20 69 73 20 73 65 74 20   objects is set 
ee10: 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20  to point to the 
ee20: 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 46 75 6e  allocated.** Fun
ee30: 63 44 65 73 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a  cDestructor..**.
ee40: 2a 2a 20 54 68 65 72 65 61 66 74 65 72 2c 20 77  ** Thereafter, w
ee50: 68 65 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 46  hen one of the F
ee60: 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69  uncDef objects i
ee70: 73 20 64 65 6c 65 74 65 64 2c 20 74 68 65 20 72  s deleted, the r
ee80: 65 66 65 72 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e  eference.** coun
ee90: 74 20 6f 6e 20 74 68 69 73 20 6f 62 6a 65 63 74  t on this object
eea0: 20 69 73 20 64 65 63 72 65 6d 65 6e 74 65 64 2e   is decremented.
eeb0: 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65 73   When it reaches
eec0: 20 30 2c 20 74 68 65 20 64 65 73 74 72 75 63 74   0, the destruct
eed0: 6f 72 0a 2a 2a 20 69 73 20 69 6e 76 6f 6b 65 64  or.** is invoked
eee0: 20 61 6e 64 20 74 68 65 20 46 75 6e 63 44 65 73   and the FuncDes
eef0: 74 72 75 63 74 6f 72 20 73 74 72 75 63 74 75 72  tructor structur
ef00: 65 20 66 72 65 65 64 2e 0a 2a 2f 0a 73 74 72 75  e freed..*/.stru
ef10: 63 74 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  ct FuncDestructo
ef20: 72 20 7b 0a 20 20 69 6e 74 20 6e 52 65 66 3b 0a  r {.  int nRef;.
ef30: 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f    void (*xDestro
ef40: 79 29 28 76 6f 69 64 20 2a 29 3b 0a 20 20 76 6f  y)(void *);.  vo
ef50: 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b 0a 7d  id *pUserData;.}
ef60: 3b 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c  ;../*.** Possibl
ef70: 65 20 76 61 6c 75 65 73 20 66 6f 72 20 46 75 6e  e values for Fun
ef80: 63 44 65 66 2e 66 6c 61 67 73 2e 20 20 4e 6f 74  cDef.flags.  Not
ef90: 65 20 74 68 61 74 20 74 68 65 20 5f 4c 45 4e 47  e that the _LENG
efa0: 54 48 20 61 6e 64 20 5f 54 59 50 45 4f 46 0a 2a  TH and _TYPEOF.*
efb0: 2a 20 76 61 6c 75 65 73 20 6d 75 73 74 20 63 6f  * values must co
efc0: 72 72 65 73 70 6f 6e 64 20 74 6f 20 4f 50 46 4c  rrespond to OPFL
efd0: 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e 64  AG_LENGTHARG and
efe0: 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52   OPFLAG_TYPEOFAR
eff0: 47 2e 20 20 41 6e 64 0a 2a 2a 20 53 51 4c 49 54  G.  And.** SQLIT
f000: 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20  E_FUNC_CONSTANT 
f010: 6d 75 73 74 20 62 65 20 74 68 65 20 73 61 6d 65  must be the same
f020: 20 61 73 20 53 51 4c 49 54 45 5f 44 45 54 45 52   as SQLITE_DETER
f030: 4d 49 4e 49 53 54 49 43 2e 20 20 54 68 65 72 65  MINISTIC.  There
f040: 0a 2a 2a 20 61 72 65 20 61 73 73 65 72 74 28 29  .** are assert()
f050: 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74   statements in t
f060: 68 65 20 63 6f 64 65 20 74 6f 20 76 65 72 69 66  he code to verif
f070: 79 20 74 68 69 73 2e 0a 2a 2a 0a 2a 2a 20 56 61  y this..**.** Va
f080: 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  lue constraints 
f090: 28 65 6e 66 6f 72 63 65 64 20 76 69 61 20 61 73  (enforced via as
f0a0: 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20  sert()):.**     
f0b0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d  SQLITE_FUNC_MINM
f0c0: 41 58 20 20 20 20 3d 3d 20 20 4e 43 5f 4d 69 6e  AX    ==  NC_Min
f0d0: 4d 61 78 41 67 67 20 20 20 20 20 20 3d 3d 20 53  MaxAgg      == S
f0e0: 46 5f 4d 69 6e 4d 61 78 41 67 67 0a 2a 2a 20 20  F_MinMaxAgg.**  
f0f0: 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c     SQLITE_FUNC_L
f100: 45 4e 47 54 48 20 20 20 20 3d 3d 20 20 4f 50 46  ENGTH    ==  OPF
f110: 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 0a 2a 2a  LAG_LENGTHARG.**
f120: 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43       SQLITE_FUNC
f130: 5f 54 59 50 45 4f 46 20 20 20 20 3d 3d 20 20 4f  _TYPEOF    ==  O
f140: 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 0a  PFLAG_TYPEOFARG.
f150: 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55  **     SQLITE_FU
f160: 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 20 3d 3d 20  NC_CONSTANT  == 
f170: 20 53 51 4c 49 54 45 5f 44 45 54 45 52 4d 49 4e   SQLITE_DETERMIN
f180: 49 53 54 49 43 20 66 72 6f 6d 20 74 68 65 20 41  ISTIC from the A
f190: 50 49 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45  PI.**     SQLITE
f1a0: 5f 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 20  _FUNC_ENCMASK   
f1b0: 64 65 70 65 6e 64 73 20 6f 6e 20 53 51 4c 49 54  depends on SQLIT
f1c0: 45 5f 55 54 46 2a 20 6d 61 63 72 6f 73 20 69 6e  E_UTF* macros in
f1d0: 20 74 68 65 20 41 50 49 0a 2a 2f 0a 23 64 65 66   the API.*/.#def
f1e0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
f1f0: 45 4e 43 4d 41 53 4b 20 20 30 78 30 30 30 33 20  ENCMASK  0x0003 
f200: 2f 2a 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20  /* SQLITE_UTF8, 
f210: 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20 6f  SQLITE_UTF16BE o
f220: 72 20 55 54 46 31 36 4c 45 20 2a 2f 0a 23 64 65  r UTF16LE */.#de
f230: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
f240: 5f 4c 49 4b 45 20 20 20 20 20 30 78 30 30 30 34  _LIKE     0x0004
f250: 20 2f 2a 20 43 61 6e 64 69 64 61 74 65 20 66 6f   /* Candidate fo
f260: 72 20 74 68 65 20 4c 49 4b 45 20 6f 70 74 69 6d  r the LIKE optim
f270: 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  ization */.#defi
f280: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  ne SQLITE_FUNC_C
f290: 41 53 45 20 20 20 20 20 30 78 30 30 30 38 20 2f  ASE     0x0008 /
f2a0: 2a 20 43 61 73 65 2d 73 65 6e 73 69 74 69 76 65  * Case-sensitive
f2b0: 20 4c 49 4b 45 2d 74 79 70 65 20 66 75 6e 63 74   LIKE-type funct
f2c0: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
f2d0: 51 4c 49 54 45 5f 46 55 4e 43 5f 45 50 48 45 4d  QLITE_FUNC_EPHEM
f2e0: 20 20 20 20 30 78 30 30 31 30 20 2f 2a 20 45 70      0x0010 /* Ep
f2f0: 68 65 6d 65 72 61 6c 2e 20 20 44 65 6c 65 74 65  hemeral.  Delete
f300: 20 77 69 74 68 20 56 44 42 45 20 2a 2f 0a 23 64   with VDBE */.#d
f310: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
f320: 43 5f 4e 45 45 44 43 4f 4c 4c 20 30 78 30 30 32  C_NEEDCOLL 0x002
f330: 30 20 2f 2a 20 73 71 6c 69 74 65 33 47 65 74 46  0 /* sqlite3GetF
f340: 75 6e 63 43 6f 6c 6c 53 65 71 28 29 20 6d 69 67  uncCollSeq() mig
f350: 68 74 20 62 65 20 63 61 6c 6c 65 64 2a 2f 0a 23  ht be called*/.#
f360: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
f370: 4e 43 5f 4c 45 4e 47 54 48 20 20 20 30 78 30 30  NC_LENGTH   0x00
f380: 34 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 6c  40 /* Built-in l
f390: 65 6e 67 74 68 28 29 20 66 75 6e 63 74 69 6f 6e  ength() function
f3a0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
f3b0: 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20 20  TE_FUNC_TYPEOF  
f3c0: 20 30 78 30 30 38 30 20 2f 2a 20 42 75 69 6c 74   0x0080 /* Built
f3d0: 2d 69 6e 20 74 79 70 65 6f 66 28 29 20 66 75 6e  -in typeof() fun
f3e0: 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
f3f0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55   SQLITE_FUNC_COU
f400: 4e 54 20 20 20 20 30 78 30 31 30 30 20 2f 2a 20  NT    0x0100 /* 
f410: 42 75 69 6c 74 2d 69 6e 20 63 6f 75 6e 74 28 2a  Built-in count(*
f420: 29 20 61 67 67 72 65 67 61 74 65 20 2a 2f 0a 23  ) aggregate */.#
f430: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
f440: 4e 43 5f 43 4f 41 4c 45 53 43 45 20 30 78 30 32  NC_COALESCE 0x02
f450: 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63  00 /* Built-in c
f460: 6f 61 6c 65 73 63 65 28 29 20 6f 72 20 69 66 6e  oalesce() or ifn
f470: 75 6c 6c 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  ull() */.#define
f480: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 55 4e 4c   SQLITE_FUNC_UNL
f490: 49 4b 45 4c 59 20 30 78 30 34 30 30 20 2f 2a 20  IKELY 0x0400 /* 
f4a0: 42 75 69 6c 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c  Built-in unlikel
f4b0: 79 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  y() function */.
f4c0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
f4d0: 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 30 78 30  UNC_CONSTANT 0x0
f4e0: 38 30 30 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20  800 /* Constant 
f4f0: 69 6e 70 75 74 73 20 67 69 76 65 20 61 20 63 6f  inputs give a co
f500: 6e 73 74 61 6e 74 20 6f 75 74 70 75 74 20 2a 2f  nstant output */
f510: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
f520: 46 55 4e 43 5f 4d 49 4e 4d 41 58 20 20 20 30 78  FUNC_MINMAX   0x
f530: 31 30 30 30 20 2f 2a 20 54 72 75 65 20 66 6f 72  1000 /* True for
f540: 20 6d 69 6e 28 29 20 61 6e 64 20 6d 61 78 28 29   min() and max()
f550: 20 61 67 67 72 65 67 61 74 65 73 20 2a 2f 0a 23   aggregates */.#
f560: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
f570: 4e 43 5f 53 4c 4f 43 48 4e 47 20 20 30 78 32 30  NC_SLOCHNG  0x20
f580: 30 30 20 2f 2a 20 22 53 6c 6f 77 20 43 68 61 6e  00 /* "Slow Chan
f590: 67 65 22 2e 20 56 61 6c 75 65 20 63 6f 6e 73 74  ge". Value const
f5a0: 61 6e 74 20 64 75 72 69 6e 67 20 61 0a 20 20 20  ant during a.   
f5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f5d0: 20 2a 2a 20 73 69 6e 67 6c 65 20 71 75 65 72 79   ** single query
f5e0: 20 2d 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20   - might change 
f5f0: 6f 76 65 72 20 74 69 6d 65 20 2a 2f 0a 23 64 65  over time */.#de
f600: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
f610: 5f 41 46 46 49 4e 49 54 59 20 30 78 34 30 30 30  _AFFINITY 0x4000
f620: 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 61 66 66   /* Built-in aff
f630: 69 6e 69 74 79 28 29 20 66 75 6e 63 74 69 6f 6e  inity() function
f640: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66   */../*.** The f
f650: 6f 6c 6c 6f 77 69 6e 67 20 74 68 72 65 65 20 6d  ollowing three m
f660: 61 63 72 6f 73 2c 20 46 55 4e 43 54 49 4f 4e 28  acros, FUNCTION(
f670: 29 2c 20 4c 49 4b 45 46 55 4e 43 28 29 20 61 6e  ), LIKEFUNC() an
f680: 64 20 41 47 47 52 45 47 41 54 45 28 29 20 61 72  d AGGREGATE() ar
f690: 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 72 65  e.** used to cre
f6a0: 61 74 65 20 74 68 65 20 69 6e 69 74 69 61 6c 69  ate the initiali
f6b0: 7a 65 72 73 20 66 6f 72 20 74 68 65 20 46 75 6e  zers for the Fun
f6c0: 63 44 65 66 20 73 74 72 75 63 74 75 72 65 73 2e  cDef structures.
f6d0: 0a 2a 2a 0a 2a 2a 20 20 20 46 55 4e 43 54 49 4f  .**.**   FUNCTIO
f6e0: 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  N(zName, nArg, i
f6f0: 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
f700: 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20  .**     Used to 
f710: 63 72 65 61 74 65 20 61 20 73 63 61 6c 61 72 20  create a scalar 
f720: 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74  function definit
f730: 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f  ion of a functio
f740: 6e 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20 20 69  n zName.**     i
f750: 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 43 20  mplemented by C 
f760: 66 75 6e 63 74 69 6f 6e 20 78 46 75 6e 63 20 74  function xFunc t
f770: 68 61 74 20 61 63 63 65 70 74 73 20 6e 41 72 67  hat accepts nArg
f780: 20 61 72 67 75 6d 65 6e 74 73 2e 20 54 68 65 0a   arguments. The.
f790: 2a 2a 20 20 20 20 20 76 61 6c 75 65 20 70 61 73  **     value pas
f7a0: 73 65 64 20 61 73 20 69 41 72 67 20 69 73 20 63  sed as iArg is c
f7b0: 61 73 74 20 74 6f 20 61 20 28 76 6f 69 64 2a 29  ast to a (void*)
f7c0: 20 61 6e 64 20 6d 61 64 65 20 61 76 61 69 6c 61   and made availa
f7d0: 62 6c 65 0a 2a 2a 20 20 20 20 20 61 73 20 74 68  ble.**     as th
f7e0: 65 20 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c  e user-data (sql
f7f0: 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29  ite3_user_data()
f800: 29 20 66 6f 72 20 74 68 65 20 66 75 6e 63 74 69  ) for the functi
f810: 6f 6e 2e 20 49 66 0a 2a 2a 20 20 20 20 20 61 72  on. If.**     ar
f820: 67 75 6d 65 6e 74 20 62 4e 43 20 69 73 20 74 72  gument bNC is tr
f830: 75 65 2c 20 74 68 65 6e 20 74 68 65 20 53 51 4c  ue, then the SQL
f840: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
f850: 4c 20 66 6c 61 67 20 69 73 20 73 65 74 2e 0a 2a  L flag is set..*
f860: 2a 0a 2a 2a 20 20 20 56 46 55 4e 43 54 49 4f 4e  *.**   VFUNCTION
f870: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
f880: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a  rg, bNC, xFunc).
f890: 2a 2a 20 20 20 20 20 4c 69 6b 65 20 46 55 4e 43  **     Like FUNC
f8a0: 54 49 4f 4e 20 65 78 63 65 70 74 20 69 74 20 6f  TION except it o
f8b0: 6d 69 74 73 20 74 68 65 20 53 51 4c 49 54 45 5f  mits the SQLITE_
f8c0: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c  FUNC_CONSTANT fl
f8d0: 61 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 44 46 55 4e  ag..**.**   DFUN
f8e0: 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
f8f0: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
f900: 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b 65  unc).**     Like
f910: 20 46 55 4e 43 54 49 4f 4e 20 65 78 63 65 70 74   FUNCTION except
f920: 20 69 74 20 6f 6d 69 74 73 20 74 68 65 20 53 51   it omits the SQ
f930: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
f940: 4e 54 20 66 6c 61 67 20 61 6e 64 0a 2a 2a 20 20  NT flag and.**  
f950: 20 20 20 61 64 64 73 20 74 68 65 20 53 51 4c 49     adds the SQLI
f960: 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 20  TE_FUNC_SLOCHNG 
f970: 66 6c 61 67 2e 20 20 55 73 65 64 20 66 6f 72 20  flag.  Used for 
f980: 64 61 74 65 20 26 20 74 69 6d 65 20 66 75 6e 63  date & time func
f990: 74 69 6f 6e 73 0a 2a 2a 20 20 20 20 20 61 6e 64  tions.**     and
f9a0: 20 66 75 6e 63 74 69 6f 6e 73 20 6c 69 6b 65 20   functions like 
f9b0: 73 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 29  sqlite_version()
f9c0: 20 74 68 61 74 20 63 61 6e 20 63 68 61 6e 67 65   that can change
f9d0: 2c 20 62 75 74 20 6e 6f 74 20 64 75 72 69 6e 67  , but not during
f9e0: 0a 2a 2a 20 20 20 20 20 61 20 73 69 6e 67 6c 65  .**     a single
f9f0: 20 71 75 65 72 79 2e 20 20 54 68 65 20 69 41 72   query.  The iAr
fa00: 67 20 69 73 20 69 67 6e 6f 72 65 64 2e 20 20 54  g is ignored.  T
fa10: 68 65 20 75 73 65 72 2d 64 61 74 61 20 69 73 20  he user-data is 
fa20: 61 6c 77 61 79 73 20 73 65 74 0a 2a 2a 20 20 20  always set.**   
fa30: 20 20 74 6f 20 61 20 4e 55 4c 4c 20 70 6f 69 6e    to a NULL poin
fa40: 74 65 72 2e 20 20 54 68 65 20 62 4e 43 20 70 61  ter.  The bNC pa
fa50: 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 75  rameter is not u
fa60: 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 55 52  sed..**.**   PUR
fa70: 45 5f 44 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41  E_DATE(zName, nA
fa80: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
fa90: 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73 65  Func).**     Use
faa0: 64 20 66 6f 72 20 22 70 75 72 65 22 20 64 61 74  d for "pure" dat
fab0: 65 2f 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73  e/time functions
fac0: 2c 20 74 68 69 73 20 6d 61 63 72 6f 20 69 73 20  , this macro is 
fad0: 6c 69 6b 65 20 44 46 55 4e 43 54 49 4f 4e 0a 2a  like DFUNCTION.*
fae0: 2a 20 20 20 20 20 65 78 63 65 70 74 20 74 68 61  *     except tha
faf0: 74 20 69 74 20 64 6f 65 73 20 73 65 74 20 74 68  t it does set th
fb00: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  e SQLITE_FUNC_CO
fb10: 4e 53 54 41 4e 54 20 66 6c 61 67 73 2e 20 20 69  NSTANT flags.  i
fb20: 41 72 67 20 69 73 0a 2a 2a 20 20 20 20 20 69 67  Arg is.**     ig
fb30: 6e 6f 72 65 64 20 61 6e 64 20 74 68 65 20 75 73  nored and the us
fb40: 65 72 2d 64 61 74 61 20 66 6f 72 20 74 68 65 73  er-data for thes
fb50: 65 20 66 75 6e 63 74 69 6f 6e 73 20 69 73 20 73  e functions is s
fb60: 65 74 20 74 6f 20 61 6e 20 0a 2a 2a 20 20 20 20  et to an .**    
fb70: 20 61 72 62 69 74 72 61 72 79 20 6e 6f 6e 2d 4e   arbitrary non-N
fb80: 55 4c 4c 20 70 6f 69 6e 74 65 72 2e 20 20 54 68  ULL pointer.  Th
fb90: 65 20 62 4e 43 20 70 61 72 61 6d 65 74 65 72 20  e bNC parameter 
fba0: 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a  is not used..**.
fbb0: 2a 2a 20 20 20 41 47 47 52 45 47 41 54 45 28 7a  **   AGGREGATE(z
fbc0: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
fbd0: 2c 20 62 4e 43 2c 20 78 53 74 65 70 2c 20 78 46  , bNC, xStep, xF
fbe0: 69 6e 61 6c 29 0a 2a 2a 20 20 20 20 20 55 73 65  inal).**     Use
fbf0: 64 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20 61  d to create an a
fc00: 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
fc10: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70  n definition imp
fc20: 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20  lemented by.**  
fc30: 20 20 20 74 68 65 20 43 20 66 75 6e 63 74 69 6f     the C functio
fc40: 6e 73 20 78 53 74 65 70 20 61 6e 64 20 78 46 69  ns xStep and xFi
fc50: 6e 61 6c 2e 20 54 68 65 20 66 69 72 73 74 20 66  nal. The first f
fc60: 6f 75 72 20 70 61 72 61 6d 65 74 65 72 73 0a 2a  our parameters.*
fc70: 2a 20 20 20 20 20 61 72 65 20 69 6e 74 65 72 70  *     are interp
fc80: 72 65 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d  reted in the sam
fc90: 65 20 77 61 79 20 61 73 20 74 68 65 20 66 69 72  e way as the fir
fca0: 73 74 20 34 20 70 61 72 61 6d 65 74 65 72 73 20  st 4 parameters 
fcb0: 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54 49  to.**     FUNCTI
fcc0: 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49  ON()..**.**   LI
fcd0: 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41  KEFUNC(zName, nA
fce0: 72 67 2c 20 70 41 72 67 2c 20 66 6c 61 67 73 29  rg, pArg, flags)
fcf0: 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20  .**     Used to 
fd00: 63 72 65 61 74 65 20 61 20 73 63 61 6c 61 72 20  create a scalar 
fd10: 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74  function definit
fd20: 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f  ion of a functio
fd30: 6e 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20 20 74  n zName.**     t
fd40: 68 61 74 20 61 63 63 65 70 74 73 20 6e 41 72 67  hat accepts nArg
fd50: 20 61 72 67 75 6d 65 6e 74 73 20 61 6e 64 20 69   arguments and i
fd60: 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79  s implemented by
fd70: 20 61 20 63 61 6c 6c 20 74 6f 20 43 0a 2a 2a 20   a call to C.** 
fd80: 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69 6b      function lik
fd90: 65 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74 20  eFunc. Argument 
fda0: 70 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20  pArg is cast to 
fdb0: 61 20 28 76 6f 69 64 20 2a 29 20 61 6e 64 20 6d  a (void *) and m
fdc0: 61 64 65 0a 2a 2a 20 20 20 20 20 61 76 61 69 6c  ade.**     avail
fdd0: 61 62 6c 65 20 61 73 20 74 68 65 20 66 75 6e 63  able as the func
fde0: 74 69 6f 6e 20 75 73 65 72 2d 64 61 74 61 20 28  tion user-data (
fdf0: 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74  sqlite3_user_dat
fe00: 61 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20 20  a()). The.**    
fe10: 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 20 76   FuncDef.flags v
fe20: 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74  ariable is set t
fe30: 6f 20 74 68 65 20 76 61 6c 75 65 20 70 61 73 73  o the value pass
fe40: 65 64 20 61 73 20 74 68 65 20 66 6c 61 67 73 0a  ed as the flags.
fe50: 2a 2a 20 20 20 20 20 70 61 72 61 6d 65 74 65 72  **     parameter
fe60: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55 4e  ..*/.#define FUN
fe70: 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
fe80: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
fe90: 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  unc) \.  {nArg, 
fea0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
feb0: 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38  TANT|SQLITE_UTF8
fec0: 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e  |(bNC*SQLITE_FUN
fed0: 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20  C_NEEDCOLL), \. 
fee0: 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f    SQLITE_INT_TO_
fef0: 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46  PTR(iArg), 0, xF
ff00: 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  unc, 0, #zName, 
ff10: 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 56 46  {0} }.#define VF
ff20: 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
ff30: 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
ff40: 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67  xFunc) \.  {nArg
ff50: 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62  , SQLITE_UTF8|(b
ff60: 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  NC*SQLITE_FUNC_N
ff70: 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53  EEDCOLL), \.   S
ff80: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
ff90: 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63  (iArg), 0, xFunc
ffa0: 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d  , 0, #zName, {0}
ffb0: 20 7d 0a 23 64 65 66 69 6e 65 20 44 46 55 4e 43   }.#define DFUNC
ffc0: 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
ffd0: 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
ffe0: 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
fff0: 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48  QLITE_FUNC_SLOCH
10000 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46 38 2c 20  NG|SQLITE_UTF8, 
10010 5c 0a 20 20 20 30 2c 20 30 2c 20 78 46 75 6e 63  \.   0, 0, xFunc
10020 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d  , 0, #zName, {0}
10030 20 7d 0a 23 64 65 66 69 6e 65 20 50 55 52 45 5f   }.#define PURE_
10040 44 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  DATE(zName, nArg
10050 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
10060 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
10070 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48  QLITE_FUNC_SLOCH
10080 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 53  NG|SQLITE_UTF8|S
10090 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
100a0 41 4e 54 2c 20 5c 0a 20 20 20 28 76 6f 69 64 2a  ANT, \.   (void*
100b0 29 26 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 2c  )&sqlite3Config,
100c0 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23 7a   0, xFunc, 0, #z
100d0 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66  Name, {0} }.#def
100e0 69 6e 65 20 46 55 4e 43 54 49 4f 4e 32 28 7a 4e  ine FUNCTION2(zN
100f0 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
10100 20 62 4e 43 2c 20 78 46 75 6e 63 2c 20 65 78 74   bNC, xFunc, ext
10110 72 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41  raFlags) \.  {nA
10120 72 67 2c 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  rg,SQLITE_FUNC_C
10130 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55  ONSTANT|SQLITE_U
10140 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f  TF8|(bNC*SQLITE_
10150 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65  FUNC_NEEDCOLL)|e
10160 78 74 72 61 46 6c 61 67 73 2c 5c 0a 20 20 20 53  xtraFlags,\.   S
10170 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
10180 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63  (iArg), 0, xFunc
10190 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d  , 0, #zName, {0}
101a0 20 7d 0a 23 64 65 66 69 6e 65 20 53 54 52 5f 46   }.#define STR_F
101b0 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
101c0 41 72 67 2c 20 70 41 72 67 2c 20 62 4e 43 2c 20  Arg, pArg, bNC, 
101d0 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67  xFunc) \.  {nArg
101e0 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c  , SQLITE_FUNC_SL
101f0 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46  OCHNG|SQLITE_UTF
10200 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55  8|(bNC*SQLITE_FU
10210 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a  NC_NEEDCOLL), \.
10220 20 20 20 70 41 72 67 2c 20 30 2c 20 78 46 75 6e     pArg, 0, xFun
10230 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7d 0a  c, 0, #zName, }.
10240 23 64 65 66 69 6e 65 20 4c 49 4b 45 46 55 4e 43  #define LIKEFUNC
10250 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72  (zName, nArg, ar
10260 67 2c 20 66 6c 61 67 73 29 20 5c 0a 20 20 7b 6e  g, flags) \.  {n
10270 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43  Arg, SQLITE_FUNC
10280 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45  _CONSTANT|SQLITE
10290 5f 55 54 46 38 7c 66 6c 61 67 73 2c 20 5c 0a 20  _UTF8|flags, \. 
102a0 20 20 28 76 6f 69 64 20 2a 29 61 72 67 2c 20 30    (void *)arg, 0
102b0 2c 20 6c 69 6b 65 46 75 6e 63 2c 20 30 2c 20 23  , likeFunc, 0, #
102c0 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65  zName, {0} }.#de
102d0 66 69 6e 65 20 41 47 47 52 45 47 41 54 45 28 7a  fine AGGREGATE(z
102e0 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c  Name, nArg, arg,
102f0 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e   nc, xStep, xFin
10300 61 6c 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  al) \.  {nArg, S
10310 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53  QLITE_UTF8|(nc*S
10320 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
10330 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54  OLL), \.   SQLIT
10340 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67  E_INT_TO_PTR(arg
10350 29 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e  ), 0, xStep,xFin
10360 61 6c 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a  al,#zName, {0}}.
10370 23 64 65 66 69 6e 65 20 41 47 47 52 45 47 41 54  #define AGGREGAT
10380 45 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  E2(zName, nArg, 
10390 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20  arg, nc, xStep, 
103a0 78 46 69 6e 61 6c 2c 20 65 78 74 72 61 46 6c 61  xFinal, extraFla
103b0 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  gs) \.  {nArg, S
103c0 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53  QLITE_UTF8|(nc*S
103d0 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
103e0 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73 2c  OLL)|extraFlags,
103f0 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54   \.   SQLITE_INT
10400 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c  _TO_PTR(arg), 0,
10410 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 23 7a   xStep,xFinal,#z
10420 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 0a 2f 2a 0a 2a  Name, {0}}../*.*
10430 2a 20 41 6c 6c 20 63 75 72 72 65 6e 74 20 73 61  * All current sa
10440 76 65 70 6f 69 6e 74 73 20 61 72 65 20 73 74 6f  vepoints are sto
10450 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20  red in a linked 
10460 6c 69 73 74 20 73 74 61 72 74 69 6e 67 20 61 74  list starting at
10470 0a 2a 2a 20 73 71 6c 69 74 65 33 2e 70 53 61 76  .** sqlite3.pSav
10480 65 70 6f 69 6e 74 2e 20 54 68 65 20 66 69 72 73  epoint. The firs
10490 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68 65  t element in the
104a0 20 6c 69 73 74 20 69 73 20 74 68 65 20 6d 6f 73   list is the mos
104b0 74 20 72 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70  t recently.** op
104c0 65 6e 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20  ened savepoint. 
104d0 53 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20 61  Savepoints are a
104e0 64 64 65 64 20 74 6f 20 74 68 65 20 6c 69 73 74  dded to the list
104f0 20 62 79 20 74 68 65 20 76 64 62 65 0a 2a 2a 20   by the vdbe.** 
10500 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73  OP_Savepoint ins
10510 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72  truction..*/.str
10520 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20 7b 0a  uct Savepoint {.
10530 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
10540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10550 20 20 20 20 20 20 2f 2a 20 53 61 76 65 70 6f 69        /* Savepoi
10560 6e 74 20 6e 61 6d 65 20 28 6e 75 6c 2d 74 65 72  nt name (nul-ter
10570 6d 69 6e 61 74 65 64 29 20 2a 2f 0a 20 20 69 36  minated) */.  i6
10580 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b  4 nDeferredCons;
10590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
105a0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64    /* Number of d
105b0 65 66 65 72 72 65 64 20 66 6b 20 76 69 6f 6c 61  eferred fk viola
105c0 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 36 34 20 6e  tions */.  i64 n
105d0 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b  DeferredImmCons;
105e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
105f0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65  * Number of defe
10600 72 72 65 64 20 69 6d 6d 20 66 6b 2e 20 2a 2f 0a  rred imm fk. */.
10610 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65    Savepoint *pNe
10620 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  xt;             
10630 20 20 20 20 20 20 2f 2a 20 50 61 72 65 6e 74 20        /* Parent 
10640 73 61 76 65 70 6f 69 6e 74 20 28 69 66 20 61 6e  savepoint (if an
10650 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  y) */.};../*.** 
10660 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72  The following ar
10670 65 20 75 73 65 64 20 61 73 20 74 68 65 20 73 65  e used as the se
10680 63 6f 6e 64 20 70 61 72 61 6d 65 74 65 72 20 74  cond parameter t
10690 6f 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69  o sqlite3Savepoi
106a0 6e 74 28 29 2c 0a 2a 2a 20 61 6e 64 20 61 73 20  nt(),.** and as 
106b0 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20  the P1 argument 
106c0 74 6f 20 74 68 65 20 4f 50 5f 53 61 76 65 70 6f  to the OP_Savepo
106d0 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  int instruction.
106e0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 41 56 45  .*/.#define SAVE
106f0 50 4f 49 4e 54 5f 42 45 47 49 4e 20 20 20 20 20  POINT_BEGIN     
10700 20 30 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50   0.#define SAVEP
10710 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 20 20 20  OINT_RELEASE    
10720 31 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f  1.#define SAVEPO
10730 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 20 20 32  INT_ROLLBACK   2
10740 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51  .../*.** Each SQ
10750 4c 69 74 65 20 6d 6f 64 75 6c 65 20 28 76 69 72  Lite module (vir
10760 74 75 61 6c 20 74 61 62 6c 65 20 64 65 66 69 6e  tual table defin
10770 69 74 69 6f 6e 29 20 69 73 20 64 65 66 69 6e 65  ition) is define
10780 64 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61  d by an.** insta
10790 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
107a0 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2c 20  wing structure, 
107b0 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71  stored in the sq
107c0 6c 69 74 65 33 2e 61 4d 6f 64 75 6c 65 0a 2a 2a  lite3.aModule.**
107d0 20 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2f 0a   hash table..*/.
107e0 73 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 7b 0a  struct Module {.
107f0 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
10800 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
10810 20 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61         /* Callba
10820 63 6b 20 70 6f 69 6e 74 65 72 73 20 2a 2f 0a 20  ck pointers */. 
10830 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61   const char *zNa
10840 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  me;             
10850 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 70 61        /* Name pa
10860 73 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d  ssed to create_m
10870 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69  odule() */.  voi
10880 64 20 2a 70 41 75 78 3b 20 20 20 20 20 20 20 20  d *pAux;        
10890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
108a0 20 20 2f 2a 20 70 41 75 78 20 70 61 73 73 65 64    /* pAux passed
108b0 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c   to create_modul
108c0 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  e() */.  void (*
108d0 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a  xDestroy)(void *
108e0 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  );            /*
108f0 20 4d 6f 64 75 6c 65 20 64 65 73 74 72 75 63 74   Module destruct
10900 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  or function */. 
10910 20 54 61 62 6c 65 20 2a 70 45 70 6f 54 61 62 3b   Table *pEpoTab;
10920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10930 20 20 20 20 20 20 2f 2a 20 45 70 6f 6e 79 6d 6f        /* Eponymo
10940 75 73 20 74 61 62 6c 65 20 66 6f 72 20 74 68 69  us table for thi
10950 73 20 6d 6f 64 75 6c 65 20 2a 2f 0a 7d 3b 0a 0a  s module */.};..
10960 2f 2a 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f  /*.** informatio
10970 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c  n about each col
10980 75 6d 6e 20 6f 66 20 61 6e 20 53 51 4c 20 74 61  umn of an SQL ta
10990 62 6c 65 20 69 73 20 68 65 6c 64 20 69 6e 20 61  ble is held in a
109a0 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66  n instance.** of
109b0 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
109c0 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 75 6d  .*/.struct Colum
109d0 6e 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  n {.  char *zNam
109e0 65 3b 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f  e;     /* Name o
109f0 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2c 20 5c  f this column, \
10a00 30 30 30 2c 20 74 68 65 6e 20 74 68 65 20 74 79  000, then the ty
10a10 70 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 44  pe */.  Expr *pD
10a20 66 6c 74 3b 20 20 20 20 20 2f 2a 20 44 65 66 61  flt;     /* Defa
10a30 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 74 68 69  ult value of thi
10a40 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68  s column */.  ch
10a50 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f  ar *zColl;     /
10a60 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * Collating sequ
10a70 65 6e 63 65 2e 20 20 49 66 20 4e 55 4c 4c 2c 20  ence.  If NULL, 
10a80 75 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20  use the default 
10a90 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e 75 6c 6c 3b  */.  u8 notNull;
10aa0 20 20 20 20 20 20 2f 2a 20 41 6e 20 4f 45 5f 20        /* An OE_ 
10ab0 63 6f 64 65 20 66 6f 72 20 68 61 6e 64 6c 69 6e  code for handlin
10ac0 67 20 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e  g a NOT NULL con
10ad0 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20 63 68 61  straint */.  cha
10ae0 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a  r affinity;   /*
10af0 20 4f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49   One of the SQLI
10b00 54 45 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c 75 65  TE_AFF_... value
10b10 73 20 2a 2f 0a 20 20 75 38 20 73 7a 45 73 74 3b  s */.  u8 szEst;
10b20 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d          /* Estim
10b30 61 74 65 64 20 73 69 7a 65 20 6f 66 20 76 61 6c  ated size of val
10b40 75 65 20 69 6e 20 74 68 69 73 20 63 6f 6c 75 6d  ue in this colum
10b50 6e 2e 20 73 69 7a 65 6f 66 28 49 4e 54 29 3d 3d  n. sizeof(INT)==
10b60 31 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 46 6c 61  1 */.  u8 colFla
10b70 67 73 3b 20 20 20 20 20 2f 2a 20 42 6f 6f 6c 65  gs;     /* Boole
10b80 61 6e 20 70 72 6f 70 65 72 74 69 65 73 2e 20 20  an properties.  
10b90 53 65 65 20 43 4f 4c 46 4c 41 47 5f 20 64 65 66  See COLFLAG_ def
10ba0 69 6e 65 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b  ines below */.};
10bb0 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  ../* Allowed val
10bc0 75 65 73 20 66 6f 72 20 43 6f 6c 75 6d 6e 2e 63  ues for Column.c
10bd0 6f 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23 64 65 66  olFlags:.*/.#def
10be0 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 50 52 49 4d  ine COLFLAG_PRIM
10bf0 4b 45 59 20 20 30 78 30 30 30 31 20 20 20 20 2f  KEY  0x0001    /
10c00 2a 20 43 6f 6c 75 6d 6e 20 69 73 20 70 61 72 74  * Column is part
10c10 20 6f 66 20 74 68 65 20 70 72 69 6d 61 72 79 20   of the primary 
10c20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43  key */.#define C
10c30 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 20 20 20  OLFLAG_HIDDEN   
10c40 30 78 30 30 30 32 20 20 20 20 2f 2a 20 41 20 68  0x0002    /* A h
10c50 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 69 6e 20  idden column in 
10c60 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
10c70 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c  */.#define COLFL
10c80 41 47 5f 48 41 53 54 59 50 45 20 20 30 78 30 30  AG_HASTYPE  0x00
10c90 30 34 20 20 20 20 2f 2a 20 54 79 70 65 20 6e 61  04    /* Type na
10ca0 6d 65 20 66 6f 6c 6c 6f 77 73 20 63 6f 6c 75 6d  me follows colum
10cb0 6e 20 6e 61 6d 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  n name */../*.**
10cc0 20 41 20 22 43 6f 6c 6c 61 74 69 6e 67 20 53 65   A "Collating Se
10cd0 71 75 65 6e 63 65 22 20 69 73 20 64 65 66 69 6e  quence" is defin
10ce0 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63  ed by an instanc
10cf0 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
10d00 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e  ng.** structure.
10d10 20 43 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20 61   Conceptually, a
10d20 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
10d30 6e 63 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  nce consists of 
10d40 61 20 6e 61 6d 65 20 61 6e 64 0a 2a 2a 20 61 20  a name and.** a 
10d50 63 6f 6d 70 61 72 69 73 6f 6e 20 72 6f 75 74 69  comparison routi
10d60 6e 65 20 74 68 61 74 20 64 65 66 69 6e 65 73 20  ne that defines 
10d70 74 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68 61  the order of tha
10d80 74 20 73 65 71 75 65 6e 63 65 2e 0a 2a 2a 0a 2a  t sequence..**.*
10d90 2a 20 49 66 20 43 6f 6c 6c 53 65 71 2e 78 43 6d  * If CollSeq.xCm
10da0 70 20 69 73 20 4e 55 4c 4c 2c 20 69 74 20 6d 65  p is NULL, it me
10db0 61 6e 73 20 74 68 61 74 20 74 68 65 0a 2a 2a 20  ans that the.** 
10dc0 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
10dd0 63 65 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e  ce is undefined.
10de0 20 20 49 6e 64 69 63 65 73 20 62 75 69 6c 74 20    Indices built 
10df0 6f 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 0a  on an undefined.
10e00 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  ** collating seq
10e10 75 65 6e 63 65 20 6d 61 79 20 6e 6f 74 20 62 65  uence may not be
10e20 20 72 65 61 64 20 6f 72 20 77 72 69 74 74 65 6e   read or written
10e30 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 6c  ..*/.struct Coll
10e40 53 65 71 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  Seq {.  char *zN
10e50 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ame;          /*
10e60 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c   Name of the col
10e70 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2c  lating sequence,
10e80 20 55 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 2a   UTF-8 encoded *
10e90 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20  /.  u8 enc;     
10ea0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78            /* Tex
10eb0 74 20 65 6e 63 6f 64 69 6e 67 20 68 61 6e 64 6c  t encoding handl
10ec0 65 64 20 62 79 20 78 43 6d 70 28 29 20 2a 2f 0a  ed by xCmp() */.
10ed0 20 20 76 6f 69 64 20 2a 70 55 73 65 72 3b 20 20    void *pUser;  
10ee0 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
10ef0 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6d   argument to xCm
10f00 70 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78  p() */.  int (*x
10f10 43 6d 70 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20  Cmp)(void*,int, 
10f20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74  const void*, int
10f30 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a  , const void*);.
10f40 20 20 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76    void (*xDel)(v
10f50 6f 69 64 2a 29 3b 20 20 2f 2a 20 44 65 73 74 72  oid*);  /* Destr
10f60 75 63 74 6f 72 20 66 6f 72 20 70 55 73 65 72 20  uctor for pUser 
10f70 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 73  */.};../*.** A s
10f80 6f 72 74 20 6f 72 64 65 72 20 63 61 6e 20 62 65  ort order can be
10f90 20 65 69 74 68 65 72 20 41 53 43 20 6f 72 20 44   either ASC or D
10fa0 45 53 43 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ESC..*/.#define 
10fb0 53 51 4c 49 54 45 5f 53 4f 5f 41 53 43 20 20 20  SQLITE_SO_ASC   
10fc0 20 20 20 20 30 20 20 2f 2a 20 53 6f 72 74 20 69      0  /* Sort i
10fd0 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65  n ascending orde
10fe0 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  r */.#define SQL
10ff0 49 54 45 5f 53 4f 5f 44 45 53 43 20 20 20 20 20  ITE_SO_DESC     
11000 20 31 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61   1  /* Sort in a
11010 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a  scending order *
11020 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
11030 5f 53 4f 5f 55 4e 44 45 46 49 4e 45 44 20 2d 31  _SO_UNDEFINED -1
11040 20 2f 2a 20 4e 6f 20 73 6f 72 74 20 6f 72 64 65   /* No sort orde
11050 72 20 73 70 65 63 69 66 69 65 64 20 2a 2f 0a 0a  r specified */..
11060 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20 61 66 66  /*.** Column aff
11070 69 6e 69 74 79 20 74 79 70 65 73 2e 0a 2a 2a 0a  inity types..**.
11080 2a 2a 20 54 68 65 73 65 20 75 73 65 64 20 74 6f  ** These used to
11090 20 68 61 76 65 20 6d 6e 65 6d 6f 6e 69 63 20 6e   have mnemonic n
110a0 61 6d 65 20 6c 69 6b 65 20 27 69 27 20 66 6f 72  ame like 'i' for
110b0 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45   SQLITE_AFF_INTE
110c0 47 45 52 20 61 6e 64 0a 2a 2a 20 27 74 27 20 66  GER and.** 't' f
110d0 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  or SQLITE_AFF_TE
110e0 58 54 2e 20 20 42 75 74 20 77 65 20 63 61 6e 20  XT.  But we can 
110f0 73 61 76 65 20 61 20 6c 69 74 74 6c 65 20 73 70  save a little sp
11100 61 63 65 20 61 6e 64 20 69 6d 70 72 6f 76 65 0a  ace and improve.
11110 2a 2a 20 74 68 65 20 73 70 65 65 64 20 61 20 6c  ** the speed a l
11120 69 74 74 6c 65 20 62 79 20 6e 75 6d 62 65 72 69  ittle by numberi
11130 6e 67 20 74 68 65 20 76 61 6c 75 65 73 20 63 6f  ng the values co
11140 6e 73 65 63 75 74 69 76 65 6c 79 2e 0a 2a 2a 0a  nsecutively..**.
11150 2a 2a 20 42 75 74 20 72 61 74 68 65 72 20 74 68  ** But rather th
11160 61 6e 20 73 74 61 72 74 20 77 69 74 68 20 30 20  an start with 0 
11170 6f 72 20 31 2c 20 77 65 20 62 65 67 69 6e 20 77  or 1, we begin w
11180 69 74 68 20 27 41 27 2e 20 20 54 68 61 74 20 77  ith 'A'.  That w
11190 61 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d 75 6c 74  ay,.** when mult
111a0 69 70 6c 65 20 61 66 66 69 6e 69 74 79 20 74 79  iple affinity ty
111b0 70 65 73 20 61 72 65 20 63 6f 6e 63 61 74 65 6e  pes are concaten
111c0 61 74 65 64 20 69 6e 74 6f 20 61 20 73 74 72 69  ated into a stri
111d0 6e 67 20 61 6e 64 0a 2a 2a 20 75 73 65 64 20 61  ng and.** used a
111e0 73 20 74 68 65 20 50 34 20 6f 70 65 72 61 6e 64  s the P4 operand
111f0 2c 20 74 68 65 79 20 77 69 6c 6c 20 62 65 20 6d  , they will be m
11200 6f 72 65 20 72 65 61 64 61 62 6c 65 2e 0a 2a 2a  ore readable..**
11210 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f 20 74 68  .** Note also th
11220 61 74 20 74 68 65 20 6e 75 6d 65 72 69 63 20 74  at the numeric t
11230 79 70 65 73 20 61 72 65 20 67 72 6f 75 70 65 64  ypes are grouped
11240 20 74 6f 67 65 74 68 65 72 20 73 6f 20 74 68 61   together so tha
11250 74 20 74 65 73 74 69 6e 67 0a 2a 2a 20 66 6f 72  t testing.** for
11260 20 61 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20   a numeric type 
11270 69 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6d 70  is a single comp
11280 61 72 69 73 6f 6e 2e 20 20 41 6e 64 20 74 68 65  arison.  And the
11290 20 42 4c 4f 42 20 74 79 70 65 20 69 73 20 66 69   BLOB type is fi
112a0 72 73 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  rst..*/.#define 
112b0 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42 20  SQLITE_AFF_BLOB 
112c0 20 20 20 20 27 41 27 0a 23 64 65 66 69 6e 65 20      'A'.#define 
112d0 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20  SQLITE_AFF_TEXT 
112e0 20 20 20 20 27 42 27 0a 23 64 65 66 69 6e 65 20      'B'.#define 
112f0 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52  SQLITE_AFF_NUMER
11300 49 43 20 20 27 43 27 0a 23 64 65 66 69 6e 65 20  IC  'C'.#define 
11310 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47  SQLITE_AFF_INTEG
11320 45 52 20 20 27 44 27 0a 23 64 65 66 69 6e 65 20  ER  'D'.#define 
11330 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 20  SQLITE_AFF_REAL 
11340 20 20 20 20 27 45 27 0a 0a 23 64 65 66 69 6e 65      'E'..#define
11350 20 73 71 6c 69 74 65 33 49 73 4e 75 6d 65 72 69   sqlite3IsNumeri
11360 63 41 66 66 69 6e 69 74 79 28 58 29 20 20 28 28  cAffinity(X)  ((
11370 58 29 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e  X)>=SQLITE_AFF_N
11380 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a 2a 20 54  UMERIC)../*.** T
11390 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41  he SQLITE_AFF_MA
113a0 53 4b 20 76 61 6c 75 65 73 20 6d 61 73 6b 73 20  SK values masks 
113b0 6f 66 66 20 74 68 65 20 73 69 67 6e 69 66 69 63  off the signific
113c0 61 6e 74 20 62 69 74 73 20 6f 66 20 61 6e 0a 2a  ant bits of an.*
113d0 2a 20 61 66 66 69 6e 69 74 79 20 76 61 6c 75 65  * affinity value
113e0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
113f0 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 20 20 20  ITE_AFF_MASK    
11400 20 30 78 34 37 0a 0a 2f 2a 0a 2a 2a 20 41 64 64   0x47../*.** Add
11410 69 74 69 6f 6e 61 6c 20 62 69 74 20 76 61 6c 75  itional bit valu
11420 65 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 4f  es that can be O
11430 52 65 64 20 77 69 74 68 20 61 6e 20 61 66 66 69  Red with an affi
11440 6e 69 74 79 20 77 69 74 68 6f 75 74 0a 2a 2a 20  nity without.** 
11450 63 68 61 6e 67 69 6e 67 20 74 68 65 20 61 66 66  changing the aff
11460 69 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  inity..**.** The
11470 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20   SQLITE_NOTNULL 
11480 66 6c 61 67 20 69 73 20 61 20 63 6f 6d 62 69 6e  flag is a combin
11490 61 74 69 6f 6e 20 6f 66 20 4e 55 4c 4c 45 51 20  ation of NULLEQ 
114a0 61 6e 64 20 4a 55 4d 50 49 46 4e 55 4c 4c 2e 0a  and JUMPIFNULL..
114b0 2a 2a 20 49 74 20 63 61 75 73 65 73 20 61 6e 20  ** It causes an 
114c0 61 73 73 65 72 74 28 29 20 74 6f 20 66 69 72 65  assert() to fire
114d0 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   if either opera
114e0 6e 64 20 74 6f 20 61 20 63 6f 6d 70 61 72 69 73  nd to a comparis
114f0 6f 6e 0a 2a 2a 20 6f 70 65 72 61 74 6f 72 20 69  on.** operator i
11500 73 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20 61  s NULL.  It is a
11510 64 64 65 64 20 74 6f 20 63 65 72 74 61 69 6e 20  dded to certain 
11520 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72 61  comparison opera
11530 74 6f 72 73 20 74 6f 0a 2a 2a 20 70 72 6f 76 65  tors to.** prove
11540 20 74 68 61 74 20 74 68 65 20 6f 70 65 72 61 6e   that the operan
11550 64 73 20 61 72 65 20 61 6c 77 61 79 73 20 4e 4f  ds are always NO
11560 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23 64 65 66 69  T NULL..*/.#defi
11570 6e 65 20 53 51 4c 49 54 45 5f 4b 45 45 50 4e 55  ne SQLITE_KEEPNU
11580 4c 4c 20 20 20 20 20 30 78 30 38 20 20 2f 2a 20  LL     0x08  /* 
11590 55 73 65 64 20 62 79 20 76 65 63 74 6f 72 20 3d  Used by vector =
115a0 3d 20 6f 72 20 3c 3e 20 2a 2f 0a 23 64 65 66 69  = or <> */.#defi
115b0 6e 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46  ne SQLITE_JUMPIF
115c0 4e 55 4c 4c 20 20 20 30 78 31 30 20 20 2f 2a 20  NULL   0x10  /* 
115d0 6a 75 6d 70 73 20 69 66 20 65 69 74 68 65 72 20  jumps if either 
115e0 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20  operand is NULL 
115f0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
11600 45 5f 53 54 4f 52 45 50 32 20 20 20 20 20 20 30  E_STOREP2      0
11610 78 32 30 20 20 2f 2a 20 53 74 6f 72 65 20 72 65  x20  /* Store re
11620 73 75 6c 74 20 69 6e 20 72 65 67 5b 50 32 5d 20  sult in reg[P2] 
11630 72 61 74 68 65 72 20 74 68 61 6e 20 6a 75 6d 70  rather than jump
11640 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
11650 54 45 5f 4e 55 4c 4c 45 51 20 20 20 20 20 20 20  TE_NULLEQ       
11660 30 78 38 30 20 20 2f 2a 20 4e 55 4c 4c 3d 4e 55  0x80  /* NULL=NU
11670 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  LL */.#define SQ
11680 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 20 20 20  LITE_NOTNULL    
11690 20 20 30 78 39 30 20 20 2f 2a 20 41 73 73 65 72    0x90  /* Asser
116a0 74 20 74 68 61 74 20 6f 70 65 72 61 6e 64 73 20  t that operands 
116b0 61 72 65 20 6e 65 76 65 72 20 4e 55 4c 4c 20 2a  are never NULL *
116c0 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65  /../*.** An obje
116d0 63 74 20 6f 66 20 74 68 69 73 20 74 79 70 65 20  ct of this type 
116e0 69 73 20 63 72 65 61 74 65 64 20 66 6f 72 20 65  is created for e
116f0 61 63 68 20 76 69 72 74 75 61 6c 20 74 61 62 6c  ach virtual tabl
11700 65 20 70 72 65 73 65 6e 74 20 69 6e 0a 2a 2a 20  e present in.** 
11710 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
11720 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ema..**.** If th
11730 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
11740 61 20 69 73 20 73 68 61 72 65 64 2c 20 74 68 65  a is shared, the
11750 6e 20 74 68 65 72 65 20 69 73 20 6f 6e 65 20 69  n there is one i
11760 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 0a  nstance of this.
11770 2a 2a 20 73 74 72 75 63 74 75 72 65 20 66 6f 72  ** structure for
11780 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63   each database c
11790 6f 6e 6e 65 63 74 69 6f 6e 20 28 73 71 6c 69 74  onnection (sqlit
117a0 65 33 2a 29 20 74 68 61 74 20 75 73 65 73 20 74  e3*) that uses t
117b0 68 65 20 73 68 61 72 65 64 0a 2a 2a 20 73 63 68  he shared.** sch
117c0 65 6d 61 2e 20 54 68 69 73 20 69 73 20 62 65 63  ema. This is bec
117d0 61 75 73 65 20 65 61 63 68 20 64 61 74 61 62 61  ause each databa
117e0 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 72 65  se connection re
117f0 71 75 69 72 65 73 20 69 74 73 20 6f 77 6e 20 75  quires its own u
11800 6e 69 71 75 65 0a 2a 2a 20 69 6e 73 74 61 6e 63  nique.** instanc
11810 65 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33  e of the sqlite3
11820 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 75 73  _vtab* handle us
11830 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 65  ed to access the
11840 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0a 2a   virtual table.*
11850 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  * implementation
11860 2e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20  . sqlite3_vtab* 
11870 68 61 6e 64 6c 65 73 20 63 61 6e 20 6e 6f 74 20  handles can not 
11880 62 65 20 73 68 61 72 65 64 20 62 65 74 77 65 65  be shared betwee
11890 6e 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f  n.** database co
118a0 6e 6e 65 63 74 69 6f 6e 73 2c 20 65 76 65 6e 20  nnections, even 
118b0 77 68 65 6e 20 74 68 65 20 72 65 73 74 20 6f 66  when the rest of
118c0 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64   the in-memory d
118d0 61 74 61 62 61 73 65 0a 2a 2a 20 73 63 68 65 6d  atabase.** schem
118e0 61 20 69 73 20 73 68 61 72 65 64 2c 20 61 73 20  a is shared, as 
118f0 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  the implementati
11900 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72 65 73 20  on often stores 
11910 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
11920 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c  connection handl
11930 65 20 70 61 73 73 65 64 20 74 6f 20 69 74 20 76  e passed to it v
11940 69 61 20 74 68 65 20 78 43 6f 6e 6e 65 63 74 28  ia the xConnect(
11950 29 20 6f 72 20 78 43 72 65 61 74 65 28 29 20 6d  ) or xCreate() m
11960 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69 6e 67 20  ethod.** during 
11970 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69  initialization i
11980 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68 69 73 20  nternally. This 
11990 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
119a0 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61 79 0a 2a  ion handle may.*
119b0 2a 20 74 68 65 6e 20 62 65 20 75 73 65 64 20 62  * then be used b
119c0 79 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  y the virtual ta
119d0 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ble implementati
119e0 6f 6e 20 74 6f 20 61 63 63 65 73 73 20 72 65 61  on to access rea
119f0 6c 20 74 61 62 6c 65 73 0a 2a 2a 20 77 69 74 68  l tables.** with
11a00 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 2e  in the database.
11a10 20 53 6f 20 74 68 61 74 20 74 68 65 79 20 61 70   So that they ap
11a20 70 65 61 72 20 61 73 20 70 61 72 74 20 6f 66 20  pear as part of 
11a30 74 68 65 20 63 61 6c 6c 65 72 73 0a 2a 2a 20 74  the callers.** t
11a40 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 73  ransaction, thes
11a50 65 20 61 63 63 65 73 73 65 73 20 6e 65 65 64 20  e accesses need 
11a60 74 6f 20 62 65 20 6d 61 64 65 20 76 69 61 20 74  to be made via t
11a70 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65  he same database
11a80 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61  .** connection a
11a90 73 20 74 68 61 74 20 75 73 65 64 20 74 6f 20 65  s that used to e
11aa0 78 65 63 75 74 65 20 53 51 4c 20 6f 70 65 72 61  xecute SQL opera
11ab0 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 76 69 72  tions on the vir
11ac0 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  tual table..**.*
11ad0 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20 6f 62 6a  * All VTable obj
11ae0 65 63 74 73 20 74 68 61 74 20 63 6f 72 72 65 73  ects that corres
11af0 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e 67 6c 65  pond to a single
11b00 20 74 61 62 6c 65 20 69 6e 20 61 20 73 68 61 72   table in a shar
11b10 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 73  ed.** database s
11b20 63 68 65 6d 61 20 61 72 65 20 69 6e 69 74 69 61  chema are initia
11b30 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61 20  lly stored in a 
11b40 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70 6f 69 6e  linked-list poin
11b50 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20 74 68 65  ted to by.** the
11b60 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20 6d   Table.pVTable m
11b70 65 6d 62 65 72 20 76 61 72 69 61 62 6c 65 20 6f  ember variable o
11b80 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  f the correspond
11b90 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a 65 63 74  ing Table object
11ba0 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 73 71 6c  ..** When an sql
11bb0 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 20 6f  ite3_prepare() o
11bc0 70 65 72 61 74 69 6f 6e 20 69 73 20 72 65 71 75  peration is requ
11bd0 69 72 65 64 20 74 6f 20 61 63 63 65 73 73 20 74  ired to access t
11be0 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61  he virtual.** ta
11bf0 62 6c 65 2c 20 69 74 20 73 65 61 72 63 68 65 73  ble, it searches
11c00 20 74 68 65 20 6c 69 73 74 20 66 6f 72 20 74 68   the list for th
11c10 65 20 56 54 61 62 6c 65 20 74 68 61 74 20 63 6f  e VTable that co
11c20 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
11c30 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e  .** database con
11c40 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67 20 74 68  nection doing th
11c50 65 20 70 72 65 70 61 72 69 6e 67 20 73 6f 20 61  e preparing so a
11c60 73 20 74 6f 20 75 73 65 20 74 68 65 20 63 6f 72  s to use the cor
11c70 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74 65 33 5f  rect.** sqlite3_
11c80 76 74 61 62 2a 20 68 61 6e 64 6c 65 20 69 6e 20  vtab* handle in 
11c90 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 71 75 65  the compiled que
11ca0 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61  ry..**.** When a
11cb0 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54 61 62 6c  n in-memory Tabl
11cc0 65 20 6f 62 6a 65 63 74 20 69 73 20 64 65 6c 65  e object is dele
11cd0 74 65 64 20 28 66 6f 72 20 65 78 61 6d 70 6c 65  ted (for example
11ce0 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20 73 63 68   when the.** sch
11cf0 65 6d 61 20 69 73 20 62 65 69 6e 67 20 72 65 6c  ema is being rel
11d00 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d 65 20 72  oaded for some r
11d10 65 61 73 6f 6e 29 2c 20 74 68 65 20 56 54 61 62  eason), the VTab
11d20 6c 65 20 6f 62 6a 65 63 74 73 20 61 72 65 20 6e  le objects are n
11d30 6f 74 0a 2a 2a 20 64 65 6c 65 74 65 64 20 61 6e  ot.** deleted an
11d40 64 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  d the sqlite3_vt
11d50 61 62 2a 20 68 61 6e 64 6c 65 73 20 61 72 65 20  ab* handles are 
11d60 6e 6f 74 20 78 44 69 73 63 6f 6e 6e 65 63 74 28  not xDisconnect(
11d70 29 65 64 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65  )ed.** immediate
11d80 6c 79 2e 20 49 6e 73 74 65 61 64 2c 20 74 68 65  ly. Instead, the
11d90 79 20 61 72 65 20 6d 6f 76 65 64 20 66 72 6f 6d  y are moved from
11da0 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62   the Table.pVTab
11db0 6c 65 20 6c 69 73 74 20 74 6f 0a 2a 2a 20 61 6e  le list to.** an
11dc0 6f 74 68 65 72 20 6c 69 6e 6b 65 64 20 6c 69 73  other linked lis
11dd0 74 20 68 65 61 64 65 64 20 62 79 20 74 68 65 20  t headed by the 
11de0 73 71 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e  sqlite3.pDisconn
11df0 65 63 74 20 6d 65 6d 62 65 72 20 6f 66 20 74 68  ect member of th
11e00 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69  e.** correspondi
11e10 6e 67 20 73 71 6c 69 74 65 33 20 73 74 72 75 63  ng sqlite3 struc
11e20 74 75 72 65 2e 20 54 68 65 79 20 61 72 65 20 74  ture. They are t
11e30 68 65 6e 20 64 65 6c 65 74 65 64 2f 78 44 69 73  hen deleted/xDis
11e40 63 6f 6e 6e 65 63 74 65 64 0a 2a 2a 20 6e 65 78  connected.** nex
11e50 74 20 74 69 6d 65 20 61 20 73 74 61 74 65 6d 65  t time a stateme
11e60 6e 74 20 69 73 20 70 72 65 70 61 72 65 64 20 75  nt is prepared u
11e70 73 69 6e 67 20 73 61 69 64 20 73 71 6c 69 74 65  sing said sqlite
11e80 33 2a 2e 20 54 68 69 73 20 69 73 20 64 6f 6e 65  3*. This is done
11e90 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20 64 65 61  .** to avoid dea
11ea0 64 6c 6f 63 6b 20 69 73 73 75 65 73 20 69 6e 76  dlock issues inv
11eb0 6f 6c 76 69 6e 67 20 6d 75 6c 74 69 70 6c 65 20  olving multiple 
11ec0 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75  sqlite3.mutex mu
11ed0 74 65 78 65 73 2e 0a 2a 2a 20 52 65 66 65 72 20  texes..** Refer 
11ee0 74 6f 20 63 6f 6d 6d 65 6e 74 73 20 61 62 6f 76  to comments abov
11ef0 65 20 66 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74  e function sqlit
11f00 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74  e3VtabUnlockList
11f10 28 29 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70  () for an.** exp
11f20 6c 61 6e 61 74 69 6f 6e 20 61 73 20 74 6f 20 77  lanation as to w
11f30 68 79 20 69 74 20 69 73 20 73 61 66 65 20 74 6f  hy it is safe to
11f40 20 61 64 64 20 61 6e 20 65 6e 74 72 79 20 74 6f   add an entry to
11f50 20 61 6e 20 73 71 6c 69 74 65 33 2e 70 44 69 73   an sqlite3.pDis
11f60 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c 69 73 74 20  connect.** list 
11f70 77 69 74 68 6f 75 74 20 68 6f 6c 64 69 6e 67 20  without holding 
11f80 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
11f90 67 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20  g sqlite3.mutex 
11fa0 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  mutex..**.** The
11fb0 20 6d 65 6d 6f 72 79 20 66 6f 72 20 6f 62 6a 65   memory for obje
11fc0 63 74 73 20 6f 66 20 74 68 69 73 20 74 79 70 65  cts of this type
11fd0 20 69 73 20 61 6c 77 61 79 73 20 61 6c 6c 6f 63   is always alloc
11fe0 61 74 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74  ated by.** sqlit
11ff0 65 33 44 62 4d 61 6c 6c 6f 63 28 29 2c 20 75 73  e3DbMalloc(), us
12000 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69  ing the connecti
12010 6f 6e 20 68 61 6e 64 6c 65 20 73 74 6f 72 65 64  on handle stored
12020 20 69 6e 20 56 54 61 62 6c 65 2e 64 62 20 61 73   in VTable.db as
12030 0a 2a 2a 20 74 68 65 20 66 69 72 73 74 20 61 72  .** the first ar
12040 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63  gument..*/.struc
12050 74 20 56 54 61 62 6c 65 20 7b 0a 20 20 73 71 6c  t VTable {.  sql
12060 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
12070 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61         /* Databa
12080 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73  se connection as
12090 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
120a0 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4d 6f  is table */.  Mo
120b0 64 75 6c 65 20 2a 70 4d 6f 64 3b 20 20 20 20 20  dule *pMod;     
120c0 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74          /* Point
120d0 65 72 20 74 6f 20 6d 6f 64 75 6c 65 20 69 6d 70  er to module imp
120e0 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20  lementation */. 
120f0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
12100 56 74 61 62 3b 20 20 20 20 20 20 2f 2a 20 50 6f  Vtab;      /* Po
12110 69 6e 74 65 72 20 74 6f 20 76 74 61 62 20 69 6e  inter to vtab in
12120 73 74 61 6e 63 65 20 2a 2f 0a 20 20 69 6e 74 20  stance */.  int 
12130 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20  nRef;           
12140 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
12150 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74  of pointers to t
12160 68 69 73 20 73 74 72 75 63 74 75 72 65 20 2a 2f  his structure */
12170 0a 20 20 75 38 20 62 43 6f 6e 73 74 72 61 69 6e  .  u8 bConstrain
12180 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
12190 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69  True if constrai
121a0 6e 74 73 20 61 72 65 20 73 75 70 70 6f 72 74 65  nts are supporte
121b0 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 61 76 65  d */.  int iSave
121c0 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20  point;          
121d0 20 2f 2a 20 44 65 70 74 68 20 6f 66 20 74 68 65   /* Depth of the
121e0 20 53 41 56 45 50 4f 49 4e 54 20 73 74 61 63 6b   SAVEPOINT stack
121f0 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 4e   */.  VTable *pN
12200 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ext;            
12210 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 6e 6b 65  /* Next in linke
12220 64 20 6c 69 73 74 20 28 73 65 65 20 61 62 6f 76  d list (see abov
12230 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  e) */.};../*.** 
12240 54 68 65 20 73 63 68 65 6d 61 20 66 6f 72 20 65  The schema for e
12250 61 63 68 20 53 51 4c 20 74 61 62 6c 65 20 61 6e  ach SQL table an
12260 64 20 76 69 65 77 20 69 73 20 72 65 70 72 65 73  d view is repres
12270 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 0a  ented in memory.
12280 2a 2a 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63  ** by an instanc
12290 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
122a0 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f  ng structure..*/
122b0 0a 73 74 72 75 63 74 20 54 61 62 6c 65 20 7b 0a  .struct Table {.
122c0 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
122d0 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
122e0 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 76  f the table or v
122f0 69 65 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d 6e 20  iew */.  Column 
12300 2a 61 43 6f 6c 3b 20 20 20 20 20 20 20 20 2f 2a  *aCol;        /*
12310 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   Information abo
12320 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a  ut each column *
12330 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49 6e 64 65  /.  Index *pInde
12340 78 3b 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74  x;       /* List
12350 20 6f 66 20 53 51 4c 20 69 6e 64 65 78 65 73 20   of SQL indexes 
12360 6f 6e 20 74 68 69 73 20 74 61 62 6c 65 2e 20 2a  on this table. *
12370 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c  /.  Select *pSel
12380 65 63 74 3b 20 20 20 20 20 2f 2a 20 4e 55 4c 4c  ect;     /* NULL
12390 20 66 6f 72 20 74 61 62 6c 65 73 2e 20 20 50 6f   for tables.  Po
123a0 69 6e 74 73 20 74 6f 20 64 65 66 69 6e 69 74 69  ints to definiti
123b0 6f 6e 20 69 66 20 61 20 76 69 65 77 2e 20 2a 2f  on if a view. */
123c0 0a 20 20 46 4b 65 79 20 2a 70 46 4b 65 79 3b 20  .  FKey *pFKey; 
123d0 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 65          /* Linke
123e0 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 66 6f  d list of all fo
123f0 72 65 69 67 6e 20 6b 65 79 73 20 69 6e 20 74 68  reign keys in th
12400 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 63 68  is table */.  ch
12410 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20  ar *zColAff;    
12420 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66     /* String def
12430 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69  ining the affini
12440 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d  ty of each colum
12450 6e 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  n */.  ExprList 
12460 2a 70 43 68 65 63 6b 3b 20 20 20 20 2f 2a 20 41  *pCheck;    /* A
12470 6c 6c 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61  ll CHECK constra
12480 69 6e 74 73 20 2a 2f 0a 20 20 20 20 20 20 20 20  ints */.        
12490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
124a0 2a 20 20 20 2e 2e 2e 20 61 6c 73 6f 20 75 73 65  *   ... also use
124b0 64 20 61 73 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  d as column name
124c0 20 6c 69 73 74 20 69 6e 20 61 20 56 49 45 57 20   list in a VIEW 
124d0 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20  */.  int tnum;  
124e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f            /* Roo
124f0 74 20 42 54 72 65 65 20 70 61 67 65 20 66 6f 72  t BTree page for
12500 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
12510 20 75 33 32 20 6e 54 61 62 52 65 66 3b 20 20 20   u32 nTabRef;   
12520 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
12530 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74  of pointers to t
12540 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a 20 20 75  his Table */.  u
12550 33 32 20 74 61 62 46 6c 61 67 73 3b 20 20 20 20  32 tabFlags;    
12560 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 54      /* Mask of T
12570 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20  F_* values */.  
12580 69 31 36 20 69 50 4b 65 79 3b 20 20 20 20 20 20  i16 iPKey;      
12590 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20 6e       /* If not n
125a0 65 67 61 74 69 76 65 2c 20 75 73 65 20 61 43 6f  egative, use aCo
125b0 6c 5b 69 50 4b 65 79 5d 20 61 73 20 74 68 65 20  l[iPKey] as the 
125c0 72 6f 77 69 64 20 2a 2f 0a 20 20 69 31 36 20 6e  rowid */.  i16 n
125d0 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20  Col;            
125e0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
125f0 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 74 61 62  umns in this tab
12600 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 6e  le */.  LogEst n
12610 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20 2f 2a 20  RowLogEst;   /* 
12620 45 73 74 69 6d 61 74 65 64 20 72 6f 77 73 20 69  Estimated rows i
12630 6e 20 74 61 62 6c 65 20 2d 20 66 72 6f 6d 20 73  n table - from s
12640 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c  qlite_stat1 tabl
12650 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a  e */.  LogEst sz
12660 54 61 62 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45  TabRow;     /* E
12670 73 74 69 6d 61 74 65 64 20 73 69 7a 65 20 6f 66  stimated size of
12680 20 65 61 63 68 20 74 61 62 6c 65 20 72 6f 77 20   each table row 
12690 69 6e 20 62 79 74 65 73 20 2a 2f 0a 23 69 66 64  in bytes */.#ifd
126a0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
126b0 5f 43 4f 53 54 4d 55 4c 54 0a 20 20 4c 6f 67 45  _COSTMULT.  LogE
126c0 73 74 20 63 6f 73 74 4d 75 6c 74 3b 20 20 20 20  st costMult;    
126d0 20 2f 2a 20 43 6f 73 74 20 6d 75 6c 74 69 70 6c   /* Cost multipl
126e0 69 65 72 20 66 6f 72 20 75 73 69 6e 67 20 74 68  ier for using th
126f0 69 73 20 74 61 62 6c 65 20 2a 2f 0a 23 65 6e 64  is table */.#end
12700 69 66 0a 20 20 75 38 20 6b 65 79 43 6f 6e 66 3b  if.  u8 keyConf;
12710 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 61            /* Wha
12720 74 20 74 6f 20 64 6f 20 69 6e 20 63 61 73 65 20  t to do in case 
12730 6f 66 20 75 6e 69 71 75 65 6e 65 73 73 20 63 6f  of uniqueness co
12740 6e 66 6c 69 63 74 20 6f 6e 20 69 50 4b 65 79 20  nflict on iPKey 
12750 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
12760 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c  E_OMIT_ALTERTABL
12770 45 0a 20 20 69 6e 74 20 61 64 64 43 6f 6c 4f 66  E.  int addColOf
12780 66 73 65 74 3b 20 20 20 20 2f 2a 20 4f 66 66 73  fset;    /* Offs
12790 65 74 20 69 6e 20 43 52 45 41 54 45 20 54 41 42  et in CREATE TAB
127a0 4c 45 20 73 74 6d 74 20 74 6f 20 61 64 64 20 61  LE stmt to add a
127b0 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23   new column */.#
127c0 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
127d0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
127e0 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f  LTABLE.  int nMo
127f0 64 75 6c 65 41 72 67 3b 20 20 20 20 20 20 2f 2a  duleArg;      /*
12800 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   Number of argum
12810 65 6e 74 73 20 74 6f 20 74 68 65 20 6d 6f 64 75  ents to the modu
12820 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61  le */.  char **a
12830 7a 4d 6f 64 75 6c 65 41 72 67 3b 20 20 2f 2a 20  zModuleArg;  /* 
12840 30 3a 20 6d 6f 64 75 6c 65 20 31 3a 20 73 63 68  0: module 1: sch
12850 65 6d 61 20 32 3a 20 76 74 61 62 20 6e 61 6d 65  ema 2: vtab name
12860 20 33 2e 2e 2e 3a 20 61 72 67 73 20 2a 2f 0a 20   3...: args */. 
12870 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62 6c 65   VTable *pVTable
12880 3b 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66  ;     /* List of
12890 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 2e   VTable objects.
128a0 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 72 69   */.#endif.  Tri
128b0 67 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20  gger *pTrigger; 
128c0 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 74 72 69    /* List of tri
128d0 67 67 65 72 73 20 73 74 6f 72 65 64 20 69 6e 20  ggers stored in 
128e0 70 53 63 68 65 6d 61 20 2a 2f 0a 20 20 53 63 68  pSchema */.  Sch
128f0 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
12900 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 68 61 74    /* Schema that
12910 20 63 6f 6e 74 61 69 6e 73 20 74 68 69 73 20 74   contains this t
12920 61 62 6c 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20  able */.  Table 
12930 2a 70 4e 65 78 74 5a 6f 6d 62 69 65 3b 20 20 2f  *pNextZombie;  /
12940 2a 20 4e 65 78 74 20 6f 6e 20 74 68 65 20 50 61  * Next on the Pa
12950 72 73 65 2e 70 5a 6f 6d 62 69 65 54 61 62 20 6c  rse.pZombieTab l
12960 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ist */.};../*.**
12970 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
12980 66 6f 72 20 54 61 62 6c 65 2e 74 61 62 46 6c 61  for Table.tabFla
12990 67 73 2e 0a 2a 2a 0a 2a 2a 20 54 46 5f 4f 4f 4f  gs..**.** TF_OOO
129a0 48 69 64 64 65 6e 20 61 70 70 6c 69 65 73 20 74  Hidden applies t
129b0 6f 20 74 61 62 6c 65 73 20 6f 72 20 76 69 65 77  o tables or view
129c0 20 74 68 61 74 20 68 61 76 65 20 68 69 64 64 65   that have hidde
129d0 6e 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 61  n columns that a
129e0 72 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 65 64 20 62  re.** followed b
129f0 79 20 6e 6f 6e 2d 68 69 64 64 65 6e 20 63 6f 6c  y non-hidden col
12a00 75 6d 6e 73 2e 20 20 45 78 61 6d 70 6c 65 3a 20  umns.  Example: 
12a10 20 22 43 52 45 41 54 45 20 56 49 52 54 55 41 4c   "CREATE VIRTUAL
12a20 20 54 41 42 4c 45 20 78 20 55 53 49 4e 47 0a 2a   TABLE x USING.*
12a30 2a 20 76 74 61 62 31 28 61 20 48 49 44 44 45 4e  * vtab1(a HIDDEN
12a40 2c 20 62 29 3b 22 2e 20 20 53 69 6e 63 65 20 22  , b);".  Since "
12a50 62 22 20 69 73 20 61 20 6e 6f 6e 2d 68 69 64 64  b" is a non-hidd
12a60 65 6e 20 63 6f 6c 75 6d 6e 20 62 75 74 20 22 61  en column but "a
12a70 22 20 69 73 20 68 69 64 64 65 6e 2c 0a 2a 2a 20  " is hidden,.** 
12a80 74 68 65 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e  the TF_OOOHidden
12a90 20 61 74 74 72 69 62 75 74 65 20 77 6f 75 6c 64   attribute would
12aa0 20 61 70 70 6c 79 20 69 6e 20 74 68 69 73 20 63   apply in this c
12ab0 61 73 65 2e 20 20 53 75 63 68 20 74 61 62 6c 65  ase.  Such table
12ac0 73 20 72 65 71 75 69 72 65 0a 2a 2a 20 73 70 65  s require.** spe
12ad0 63 69 61 6c 20 68 61 6e 64 6c 69 6e 67 20 64 75  cial handling du
12ae0 72 69 6e 67 20 49 4e 53 45 52 54 20 70 72 6f 63  ring INSERT proc
12af0 65 73 73 69 6e 67 2e 0a 2a 2f 0a 23 64 65 66 69  essing..*/.#defi
12b00 6e 65 20 54 46 5f 52 65 61 64 6f 6e 6c 79 20 20  ne TF_Readonly  
12b10 20 20 20 20 20 20 30 78 30 30 30 31 20 20 20 20        0x0001    
12b20 2f 2a 20 52 65 61 64 2d 6f 6e 6c 79 20 73 79 73  /* Read-only sys
12b30 74 65 6d 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65  tem table */.#de
12b40 66 69 6e 65 20 54 46 5f 45 70 68 65 6d 65 72 61  fine TF_Ephemera
12b50 6c 20 20 20 20 20 20 20 30 78 30 30 30 32 20 20  l       0x0002  
12b60 20 20 2f 2a 20 41 6e 20 65 70 68 65 6d 65 72 61    /* An ephemera
12b70 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  l table */.#defi
12b80 6e 65 20 54 46 5f 48 61 73 50 72 69 6d 61 72 79  ne TF_HasPrimary
12b90 4b 65 79 20 20 20 30 78 30 30 30 34 20 20 20 20  Key   0x0004    
12ba0 2f 2a 20 54 61 62 6c 65 20 68 61 73 20 61 20 70  /* Table has a p
12bb0 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64  rimary key */.#d
12bc0 65 66 69 6e 65 20 54 46 5f 41 75 74 6f 69 6e 63  efine TF_Autoinc
12bd0 72 65 6d 65 6e 74 20 20 20 30 78 30 30 30 38 20  rement   0x0008 
12be0 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 70 72     /* Integer pr
12bf0 69 6d 61 72 79 20 6b 65 79 20 69 73 20 61 75 74  imary key is aut
12c00 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a 23 64  oincrement */.#d
12c10 65 66 69 6e 65 20 54 46 5f 48 61 73 53 74 61 74  efine TF_HasStat
12c20 31 20 20 20 20 20 20 20 20 30 78 30 30 31 30 20  1        0x0010 
12c30 20 20 20 2f 2a 20 6e 52 6f 77 4c 6f 67 45 73 74     /* nRowLogEst
12c40 20 73 65 74 20 66 72 6f 6d 20 73 71 6c 69 74 65   set from sqlite
12c50 5f 73 74 61 74 31 20 2a 2f 0a 23 64 65 66 69 6e  _stat1 */.#defin
12c60 65 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77 69  e TF_WithoutRowi
12c70 64 20 20 20 20 30 78 30 30 32 30 20 20 20 20 2f  d    0x0020    /
12c80 2a 20 4e 6f 20 72 6f 77 69 64 2e 20 20 50 52 49  * No rowid.  PRI
12c90 4d 41 52 59 20 4b 45 59 20 69 73 20 74 68 65 20  MARY KEY is the 
12ca0 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  key */.#define T
12cb0 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69 64  F_NoVisibleRowid
12cc0 20 20 30 78 30 30 34 30 20 20 20 20 2f 2a 20 4e    0x0040    /* N
12cd0 6f 20 75 73 65 72 2d 76 69 73 69 62 6c 65 20 22  o user-visible "
12ce0 72 6f 77 69 64 22 20 63 6f 6c 75 6d 6e 20 2a 2f  rowid" column */
12cf0 0a 23 64 65 66 69 6e 65 20 54 46 5f 4f 4f 4f 48  .#define TF_OOOH
12d00 69 64 64 65 6e 20 20 20 20 20 20 20 30 78 30 30  idden       0x00
12d10 38 30 20 20 20 20 2f 2a 20 4f 75 74 2d 6f 66 2d  80    /* Out-of-
12d20 4f 72 64 65 72 20 68 69 64 64 65 6e 20 63 6f 6c  Order hidden col
12d30 75 6d 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  umns */.#define 
12d40 54 46 5f 53 74 61 74 73 55 73 65 64 20 20 20 20  TF_StatsUsed    
12d50 20 20 20 30 78 30 31 30 30 20 20 20 20 2f 2a 20     0x0100    /* 
12d60 51 75 65 72 79 20 70 6c 61 6e 6e 65 72 20 64 65  Query planner de
12d70 63 69 73 69 6f 6e 73 20 61 66 66 65 63 74 65 64  cisions affected
12d80 20 62 79 0a 20 20 20 20 20 20 20 20 20 20 20 20   by.            
12d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12da0 20 20 20 20 20 20 20 20 20 2a 2a 20 49 6e 64 65           ** Inde
12db0 78 2e 61 69 52 6f 77 4c 6f 67 45 73 74 5b 5d 20  x.aiRowLogEst[] 
12dc0 76 61 6c 75 65 73 20 2a 2f 0a 23 64 65 66 69 6e  values */.#defin
12dd0 65 20 54 46 5f 48 61 73 4e 6f 74 4e 75 6c 6c 20  e TF_HasNotNull 
12de0 20 20 20 20 20 30 78 30 32 30 30 20 20 20 20 2f       0x0200    /
12df0 2a 20 43 6f 6e 74 61 69 6e 73 20 4e 4f 54 20 4e  * Contains NOT N
12e00 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  ULL constraints 
12e10 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 74  */../*.** Test t
12e20 6f 20 73 65 65 20 77 68 65 74 68 65 72 20 6f 72  o see whether or
12e30 20 6e 6f 74 20 61 20 74 61 62 6c 65 20 69 73 20   not a table is 
12e40 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  a virtual table.
12e50 20 20 54 68 69 73 20 69 73 0a 2a 2a 20 64 6f 6e    This is.** don
12e60 65 20 61 73 20 61 20 6d 61 63 72 6f 20 73 6f 20  e as a macro so 
12e70 74 68 61 74 20 69 74 20 77 69 6c 6c 20 62 65 20  that it will be 
12e80 6f 70 74 69 6d 69 7a 65 64 20 6f 75 74 20 77 68  optimized out wh
12e90 65 6e 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61  en virtual.** ta
12ea0 62 6c 65 20 73 75 70 70 6f 72 74 20 69 73 20 6f  ble support is o
12eb0 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20  mitted from the 
12ec0 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65  build..*/.#ifnde
12ed0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
12ee0 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65  RTUALTABLE.#  de
12ef0 66 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28 58  fine IsVirtual(X
12f00 29 20 20 20 20 20 20 28 28 58 29 2d 3e 6e 4d 6f  )      ((X)->nMo
12f10 64 75 6c 65 41 72 67 29 0a 23 65 6c 73 65 0a 23  duleArg).#else.#
12f20 20 20 64 65 66 69 6e 65 20 49 73 56 69 72 74 75    define IsVirtu
12f30 61 6c 28 58 29 20 20 20 20 20 20 30 0a 23 65 6e  al(X)      0.#en
12f40 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f  dif../*.** Macro
12f50 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69  s to determine i
12f60 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20 68 69  f a column is hi
12f70 64 64 65 6e 2e 20 20 49 73 4f 72 64 69 6e 61 72  dden.  IsOrdinar
12f80 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 29 0a  yHiddenColumn().
12f90 2a 2a 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f  ** only works fo
12fa0 72 20 6e 6f 6e 2d 76 69 72 74 75 61 6c 20 74 61  r non-virtual ta
12fb0 62 6c 65 73 20 28 6f 72 64 69 6e 61 72 79 20 74  bles (ordinary t
12fc0 61 62 6c 65 73 20 61 6e 64 20 76 69 65 77 73 29  ables and views)
12fd0 20 61 6e 64 20 69 73 0a 2a 2a 20 61 6c 77 61 79   and is.** alway
12fe0 73 20 66 61 6c 73 65 20 75 6e 6c 65 73 73 20 53  s false unless S
12ff0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44  QLITE_ENABLE_HID
13000 44 45 4e 5f 43 4f 4c 55 4d 4e 53 20 69 73 20 64  DEN_COLUMNS is d
13010 65 66 69 6e 65 64 2e 20 20 54 68 65 0a 2a 2a 20  efined.  The.** 
13020 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 29  IsHiddenColumn()
13030 20 6d 61 63 72 6f 20 69 73 20 67 65 6e 65 72 61   macro is genera
13040 6c 20 70 75 72 70 6f 73 65 2e 0a 2a 2f 0a 23 69  l purpose..*/.#i
13050 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
13060 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43  _ENABLE_HIDDEN_C
13070 4f 4c 55 4d 4e 53 29 0a 23 20 20 64 65 66 69 6e  OLUMNS).#  defin
13080 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  e IsHiddenColumn
13090 28 58 29 20 20 20 20 20 20 20 20 20 28 28 28 58  (X)         (((X
130a0 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f  )->colFlags & CO
130b0 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30  LFLAG_HIDDEN)!=0
130c0 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f 72  ).#  define IsOr
130d0 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75  dinaryHiddenColu
130e0 6d 6e 28 58 29 20 28 28 28 58 29 2d 3e 63 6f 6c  mn(X) (((X)->col
130f0 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f  Flags & COLFLAG_
13100 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 65 6c 69  HIDDEN)!=0).#eli
13110 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
13120 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
13130 42 4c 45 29 0a 23 20 20 64 65 66 69 6e 65 20 49  BLE).#  define I
13140 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29  sHiddenColumn(X)
13150 20 20 20 20 20 20 20 20 20 28 28 28 58 29 2d 3e           (((X)->
13160 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c  colFlags & COLFL
13170 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23  AG_HIDDEN)!=0).#
13180 20 20 64 65 66 69 6e 65 20 49 73 4f 72 64 69 6e    define IsOrdin
13190 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28  aryHiddenColumn(
131a0 58 29 20 30 0a 23 65 6c 73 65 0a 23 20 20 64 65  X) 0.#else.#  de
131b0 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c  fine IsHiddenCol
131c0 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20 30  umn(X)         0
131d0 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f 72 64  .#  define IsOrd
131e0 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d  inaryHiddenColum
131f0 6e 28 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a 0a  n(X) 0.#endif...
13200 2f 2a 20 44 6f 65 73 20 74 68 65 20 74 61 62 6c  /* Does the tabl
13210 65 20 68 61 76 65 20 61 20 72 6f 77 69 64 20 2a  e have a rowid *
13220 2f 0a 23 64 65 66 69 6e 65 20 48 61 73 52 6f 77  /.#define HasRow
13230 69 64 28 58 29 20 20 20 20 20 28 28 28 58 29 2d  id(X)     (((X)-
13240 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f 57  >tabFlags & TF_W
13250 69 74 68 6f 75 74 52 6f 77 69 64 29 3d 3d 30 29  ithoutRowid)==0)
13260 0a 23 64 65 66 69 6e 65 20 56 69 73 69 62 6c 65  .#define Visible
13270 52 6f 77 69 64 28 58 29 20 28 28 28 58 29 2d 3e  Rowid(X) (((X)->
13280 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f 4e 6f  tabFlags & TF_No
13290 56 69 73 69 62 6c 65 52 6f 77 69 64 29 3d 3d 30  VisibleRowid)==0
132a0 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 66 6f  )../*.** Each fo
132b0 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
132c0 61 69 6e 74 20 69 73 20 61 6e 20 69 6e 73 74 61  aint is an insta
132d0 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
132e0 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a  wing structure..
132f0 2a 2a 0a 2a 2a 20 41 20 66 6f 72 65 69 67 6e 20  **.** A foreign 
13300 6b 65 79 20 69 73 20 61 73 73 6f 63 69 61 74 65  key is associate
13310 64 20 77 69 74 68 20 74 77 6f 20 74 61 62 6c 65  d with two table
13320 73 2e 20 20 54 68 65 20 22 66 72 6f 6d 22 20 74  s.  The "from" t
13330 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20 74  able is.** the t
13340 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69  able that contai
13350 6e 73 20 74 68 65 20 52 45 46 45 52 45 4e 43 45  ns the REFERENCE
13360 53 20 63 6c 61 75 73 65 20 74 68 61 74 20 63 72  S clause that cr
13370 65 61 74 65 73 20 74 68 65 20 66 6f 72 65 69 67  eates the foreig
13380 6e 0a 2a 2a 20 6b 65 79 2e 20 20 54 68 65 20 22  n.** key.  The "
13390 74 6f 22 20 74 61 62 6c 65 20 69 73 20 74 68 65  to" table is the
133a0 20 74 61 62 6c 65 20 74 68 61 74 20 69 73 20 6e   table that is n
133b0 61 6d 65 64 20 69 6e 20 74 68 65 20 52 45 46 45  amed in the REFE
133c0 52 45 4e 43 45 53 20 63 6c 61 75 73 65 2e 0a 2a  RENCES clause..*
133d0 2a 20 43 6f 6e 73 69 64 65 72 20 74 68 69 73 20  * Consider this 
133e0 65 78 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20  example:.**.**  
133f0 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
13400 65 78 31 28 0a 2a 2a 20 20 20 20 20 20 20 61 20  ex1(.**       a 
13410 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
13420 4b 45 59 2c 0a 2a 2a 20 20 20 20 20 20 20 62 20  KEY,.**       b 
13430 49 4e 54 45 47 45 52 20 43 4f 4e 53 54 52 41 49  INTEGER CONSTRAI
13440 4e 54 20 66 6b 31 20 52 45 46 45 52 45 4e 43 45  NT fk1 REFERENCE
13450 53 20 65 78 32 28 78 29 0a 2a 2a 20 20 20 20 20  S ex2(x).**     
13460 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 66 6f 72  );.**.** For for
13470 65 69 67 6e 20 6b 65 79 20 22 66 6b 31 22 2c 20  eign key "fk1", 
13480 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69  the from-table i
13490 73 20 22 65 78 31 22 20 61 6e 64 20 74 68 65 20  s "ex1" and the 
134a0 74 6f 2d 74 61 62 6c 65 20 69 73 20 22 65 78 32  to-table is "ex2
134b0 22 2e 0a 2a 2a 20 45 71 75 69 76 61 6c 65 6e 74  "..** Equivalent
134c0 20 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20   names:.**.**   
134d0 20 20 66 72 6f 6d 2d 74 61 62 6c 65 20 3d 3d 20    from-table == 
134e0 63 68 69 6c 64 2d 74 61 62 6c 65 0a 2a 2a 20 20  child-table.**  
134f0 20 20 20 20 20 74 6f 2d 74 61 62 6c 65 20 3d 3d       to-table ==
13500 20 70 61 72 65 6e 74 2d 74 61 62 6c 65 0a 2a 2a   parent-table.**
13510 0a 2a 2a 20 45 61 63 68 20 52 45 46 45 52 45 4e  .** Each REFEREN
13520 43 45 53 20 63 6c 61 75 73 65 20 67 65 6e 65 72  CES clause gener
13530 61 74 65 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  ates an instance
13540 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
13550 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 77  g structure.** w
13560 68 69 63 68 20 69 73 20 61 74 74 61 63 68 65 64  hich is attached
13570 20 74 6f 20 74 68 65 20 66 72 6f 6d 2d 74 61 62   to the from-tab
13580 6c 65 2e 20 20 54 68 65 20 74 6f 2d 74 61 62 6c  le.  The to-tabl
13590 65 20 6e 65 65 64 20 6e 6f 74 20 65 78 69 73 74  e need not exist
135a0 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 66 72 6f   when.** the fro
135b0 6d 2d 74 61 62 6c 65 20 69 73 20 63 72 65 61 74  m-table is creat
135c0 65 64 2e 20 20 54 68 65 20 65 78 69 73 74 65 6e  ed.  The existen
135d0 63 65 20 6f 66 20 74 68 65 20 74 6f 2d 74 61 62  ce of the to-tab
135e0 6c 65 20 69 73 20 6e 6f 74 20 63 68 65 63 6b 65  le is not checke
135f0 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6c 69 73  d..**.** The lis
13600 74 20 6f 66 20 61 6c 6c 20 70 61 72 65 6e 74 73  t of all parents
13610 20 66 6f 72 20 63 68 69 6c 64 20 54 61 62 6c 65   for child Table
13620 20 58 20 69 73 20 68 65 6c 64 20 61 74 20 58 2e   X is held at X.
13630 70 46 4b 65 79 2e 0a 2a 2a 0a 2a 2a 20 41 20 6c  pFKey..**.** A l
13640 69 73 74 20 6f 66 20 61 6c 6c 20 63 68 69 6c 64  ist of all child
13650 72 65 6e 20 66 6f 72 20 61 20 74 61 62 6c 65 20  ren for a table 
13660 6e 61 6d 65 64 20 5a 20 28 77 68 69 63 68 20 6d  named Z (which m
13670 69 67 68 74 20 6e 6f 74 20 65 76 65 6e 20 65 78  ight not even ex
13680 69 73 74 29 0a 2a 2a 20 69 73 20 68 65 6c 64 20  ist).** is held 
13690 69 6e 20 53 63 68 65 6d 61 2e 66 6b 65 79 48 61  in Schema.fkeyHa
136a0 73 68 20 77 69 74 68 20 61 20 68 61 73 68 20 6b  sh with a hash k
136b0 65 79 20 6f 66 20 5a 2e 0a 2a 2f 0a 73 74 72 75  ey of Z..*/.stru
136c0 63 74 20 46 4b 65 79 20 7b 0a 20 20 54 61 62 6c  ct FKey {.  Tabl
136d0 65 20 2a 70 46 72 6f 6d 3b 20 20 20 20 20 2f 2a  e *pFrom;     /*
136e0 20 54 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e   Table containin
136f0 67 20 74 68 65 20 52 45 46 45 52 45 4e 43 45 53  g the REFERENCES
13700 20 63 6c 61 75 73 65 20 28 61 6b 61 3a 20 43 68   clause (aka: Ch
13710 69 6c 64 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a  ild) */.  FKey *
13720 70 4e 65 78 74 46 72 6f 6d 3b 20 20 2f 2a 20 4e  pNextFrom;  /* N
13730 65 78 74 20 46 4b 65 79 20 77 69 74 68 20 74 68  ext FKey with th
13740 65 20 73 61 6d 65 20 69 6e 20 70 46 72 6f 6d 2e  e same in pFrom.
13750 20 4e 65 78 74 20 70 61 72 65 6e 74 20 6f 66 20   Next parent of 
13760 70 46 72 6f 6d 20 2a 2f 0a 20 20 63 68 61 72 20  pFrom */.  char 
13770 2a 7a 54 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20  *zTo;        /* 
13780 4e 61 6d 65 20 6f 66 20 74 61 62 6c 65 20 74 68  Name of table th
13790 61 74 20 74 68 65 20 6b 65 79 20 70 6f 69 6e 74  at the key point
137a0 73 20 74 6f 20 28 61 6b 61 3a 20 50 61 72 65 6e  s to (aka: Paren
137b0 74 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e  t) */.  FKey *pN
137c0 65 78 74 54 6f 3b 20 20 20 20 2f 2a 20 4e 65 78  extTo;    /* Nex
137d0 74 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  t with the same 
137e0 7a 54 6f 2e 20 4e 65 78 74 20 63 68 69 6c 64 20  zTo. Next child 
137f0 6f 66 20 7a 54 6f 2e 20 2a 2f 0a 20 20 46 4b 65  of zTo. */.  FKe
13800 79 20 2a 70 50 72 65 76 54 6f 3b 20 20 20 20 2f  y *pPrevTo;    /
13810 2a 20 50 72 65 76 69 6f 75 73 20 77 69 74 68 20  * Previous with 
13820 74 68 65 20 73 61 6d 65 20 7a 54 6f 20 2a 2f 0a  the same zTo */.
13830 20 20 69 6e 74 20 6e 43 6f 6c 3b 20 20 20 20 20    int nCol;     
13840 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
13850 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73   columns in this
13860 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20 45 56 3a   key */.  /* EV:
13870 20 52 2d 33 30 33 32 33 2d 32 31 39 31 37 20 2a   R-30323-21917 *
13880 2f 0a 20 20 75 38 20 69 73 44 65 66 65 72 72 65  /.  u8 isDeferre
13890 64 3b 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65  d;       /* True
138a0 20 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 20 63   if constraint c
138b0 68 65 63 6b 69 6e 67 20 69 73 20 64 65 66 65 72  hecking is defer
138c0 72 65 64 20 74 69 6c 6c 20 43 4f 4d 4d 49 54 20  red till COMMIT 
138d0 2a 2f 0a 20 20 75 38 20 61 41 63 74 69 6f 6e 5b  */.  u8 aAction[
138e0 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e  2];        /* ON
138f0 20 44 45 4c 45 54 45 20 61 6e 64 20 4f 4e 20 55   DELETE and ON U
13900 50 44 41 54 45 20 61 63 74 69 6f 6e 73 2c 20 72  PDATE actions, r
13910 65 73 70 65 63 74 69 76 65 6c 79 20 2a 2f 0a 20  espectively */. 
13920 20 54 72 69 67 67 65 72 20 2a 61 70 54 72 69 67   Trigger *apTrig
13930 67 65 72 5b 32 5d 3b 2f 2a 20 54 72 69 67 67 65  ger[2];/* Trigge
13940 72 73 20 66 6f 72 20 61 41 63 74 69 6f 6e 5b 5d  rs for aAction[]
13950 20 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74   actions */.  st
13960 72 75 63 74 20 73 43 6f 6c 4d 61 70 20 7b 20 20  ruct sColMap {  
13970 20 20 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20 6f      /* Mapping o
13980 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70 46 72  f columns in pFr
13990 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e  om to columns in
139a0 20 7a 54 6f 20 2a 2f 0a 20 20 20 20 69 6e 74 20   zTo */.    int 
139b0 69 46 72 6f 6d 3b 20 20 20 20 20 20 20 20 20 20  iFrom;          
139c0 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 63 6f    /* Index of co
139d0 6c 75 6d 6e 20 69 6e 20 70 46 72 6f 6d 20 2a 2f  lumn in pFrom */
139e0 0a 20 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c 3b  .    char *zCol;
139f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
13a00 6d 65 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20  me of column in 
13a10 7a 54 6f 2e 20 20 49 66 20 4e 55 4c 4c 20 75 73  zTo.  If NULL us
13a20 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f  e PRIMARY KEY */
13a30 0a 20 20 7d 20 61 43 6f 6c 5b 31 5d 3b 20 20 20  .  } aCol[1];   
13a40 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
13a50 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20 6f  entry for each o
13a60 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e 73 20 2a  f nCol columns *
13a70 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 69  /.};../*.** SQLi
13a80 74 65 20 73 75 70 70 6f 72 74 73 20 6d 61 6e 79  te supports many
13a90 20 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20   different ways 
13aa0 74 6f 20 72 65 73 6f 6c 76 65 20 61 20 63 6f 6e  to resolve a con
13ab0 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72  straint.** error
13ac0 2e 20 20 52 4f 4c 4c 42 41 43 4b 20 70 72 6f 63  .  ROLLBACK proc
13ad0 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61  essing means tha
13ae0 74 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  t a constraint v
13af0 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20 63 61 75 73  iolation.** caus
13b00 65 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  es the operation
13b10 20 69 6e 20 70 72 6f 63 65 73 73 20 74 6f 20 66   in process to f
13b20 61 69 6c 20 61 6e 64 20 66 6f 72 20 74 68 65 20  ail and for the 
13b30 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74  current transact
13b40 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 72 6f 6c  ion.** to be rol
13b50 6c 65 64 20 62 61 63 6b 2e 20 20 41 42 4f 52 54  led back.  ABORT
13b60 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e   processing mean
13b70 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  s the operation 
13b80 69 6e 20 70 72 6f 63 65 73 73 0a 2a 2a 20 66 61  in process.** fa
13b90 69 6c 73 20 61 6e 64 20 61 6e 79 20 70 72 69 6f  ils and any prio
13ba0 72 20 63 68 61 6e 67 65 73 20 66 72 6f 6d 20 74  r changes from t
13bb0 68 61 74 20 6f 6e 65 20 6f 70 65 72 61 74 69 6f  hat one operatio
13bc0 6e 20 61 72 65 20 62 61 63 6b 65 64 20 6f 75 74  n are backed out
13bd0 2c 0a 2a 2a 20 62 75 74 20 74 68 65 20 74 72 61  ,.** but the tra
13be0 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20  nsaction is not 
13bf0 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 46 41  rolled back.  FA
13c00 49 4c 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65  IL processing me
13c10 61 6e 73 20 74 68 61 74 0a 2a 2a 20 74 68 65 20  ans that.** the 
13c20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f  operation in pro
13c30 67 72 65 73 73 20 73 74 6f 70 73 20 61 6e 64 20  gress stops and 
13c40 72 65 74 75 72 6e 73 20 61 6e 20 65 72 72 6f 72  returns an error
13c50 20 63 6f 64 65 2e 20 20 42 75 74 20 70 72 69 6f   code.  But prio
13c60 72 0a 2a 2a 20 63 68 61 6e 67 65 73 20 64 75 65  r.** changes due
13c70 20 74 6f 20 74 68 65 20 73 61 6d 65 20 6f 70 65   to the same ope
13c80 72 61 74 69 6f 6e 20 61 72 65 20 6e 6f 74 20 62  ration are not b
13c90 61 63 6b 65 64 20 6f 75 74 20 61 6e 64 20 6e 6f  acked out and no
13ca0 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 63 63   rollback.** occ
13cb0 75 72 73 2e 20 20 49 47 4e 4f 52 45 20 6d 65 61  urs.  IGNORE mea
13cc0 6e 73 20 74 68 61 74 20 74 68 65 20 70 61 72 74  ns that the part
13cd0 69 63 75 6c 61 72 20 72 6f 77 20 74 68 61 74 20  icular row that 
13ce0 63 61 75 73 65 64 20 74 68 65 20 63 6f 6e 73 74  caused the const
13cf0 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 20 69  raint.** error i
13d00 73 20 6e 6f 74 20 69 6e 73 65 72 74 65 64 20 6f  s not inserted o
13d10 72 20 75 70 64 61 74 65 64 2e 20 20 50 72 6f 63  r updated.  Proc
13d20 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73  essing continues
13d30 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 0a 2a 2a   and no error.**
13d40 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 20 52   is returned.  R
13d50 45 50 4c 41 43 45 20 6d 65 61 6e 73 20 74 68 61  EPLACE means tha
13d60 74 20 70 72 65 65 78 69 73 74 69 6e 67 20 64 61  t preexisting da
13d70 74 61 62 61 73 65 20 72 6f 77 73 20 74 68 61 74  tabase rows that
13d80 20 63 61 75 73 65 64 0a 2a 2a 20 61 20 55 4e 49   caused.** a UNI
13d90 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  QUE constraint v
13da0 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20 72 65 6d  iolation are rem
13db0 6f 76 65 64 20 73 6f 20 74 68 61 74 20 74 68 65  oved so that the
13dc0 20 6e 65 77 20 69 6e 73 65 72 74 20 6f 72 0a 2a   new insert or.*
13dd0 2a 20 75 70 64 61 74 65 20 63 61 6e 20 70 72 6f  * update can pro
13de0 63 65 65 64 2e 20 20 50 72 6f 63 65 73 73 69 6e  ceed.  Processin
13df0 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20  g continues and 
13e00 6e 6f 20 65 72 72 6f 72 20 69 73 20 72 65 70 6f  no error is repo
13e10 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 52 45 53 54  rted..**.** REST
13e20 52 49 43 54 2c 20 53 45 54 4e 55 4c 4c 2c 20 61  RICT, SETNULL, a
13e30 6e 64 20 43 41 53 43 41 44 45 20 61 63 74 69 6f  nd CASCADE actio
13e40 6e 73 20 61 70 70 6c 79 20 6f 6e 6c 79 20 74 6f  ns apply only to
13e50 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 2e 0a 2a   foreign keys..*
13e60 2a 20 52 45 53 54 52 49 43 54 20 69 73 20 74 68  * RESTRICT is th
13e70 65 20 73 61 6d 65 20 61 73 20 41 42 4f 52 54 20  e same as ABORT 
13e80 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 20 66 6f  for IMMEDIATE fo
13e90 72 65 69 67 6e 20 6b 65 79 73 20 61 6e 64 20 74  reign keys and t
13ea0 68 65 0a 2a 2a 20 73 61 6d 65 20 61 73 20 52 4f  he.** same as RO
13eb0 4c 4c 42 41 43 4b 20 66 6f 72 20 44 45 46 45 52  LLBACK for DEFER
13ec0 52 45 44 20 6b 65 79 73 2e 20 20 53 45 54 4e 55  RED keys.  SETNU
13ed0 4c 4c 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  LL means that th
13ee0 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79  e foreign.** key
13ef0 20 69 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e   is set to NULL.
13f00 20 20 43 41 53 43 41 44 45 20 6d 65 61 6e 73 20    CASCADE means 
13f10 74 68 61 74 20 61 20 44 45 4c 45 54 45 20 6f 72  that a DELETE or
13f20 20 55 50 44 41 54 45 20 6f 66 20 74 68 65 0a 2a   UPDATE of the.*
13f30 2a 20 72 65 66 65 72 65 6e 63 65 64 20 74 61 62  * referenced tab
13f40 6c 65 20 72 6f 77 20 69 73 20 70 72 6f 70 61 67  le row is propag
13f50 61 74 65 64 20 69 6e 74 6f 20 74 68 65 20 72 6f  ated into the ro
13f60 77 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65  w that holds the
13f70 0a 2a 2a 20 66 6f 72 65 69 67 6e 20 6b 65 79 2e  .** foreign key.
13f80 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  .**.** The follo
13f90 77 69 6e 67 20 73 79 6d 62 6f 6c 69 63 20 76 61  wing symbolic va
13fa0 6c 75 65 73 20 61 72 65 20 75 73 65 64 20 74 6f  lues are used to
13fb0 20 72 65 63 6f 72 64 20 77 68 69 63 68 20 74 79   record which ty
13fc0 70 65 0a 2a 2a 20 6f 66 20 61 63 74 69 6f 6e 20  pe.** of action 
13fd0 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a 23 64 65 66  to take..*/.#def
13fe0 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20 20 20 20 20  ine OE_None     
13ff0 30 20 20 20 2f 2a 20 54 68 65 72 65 20 69 73 20  0   /* There is 
14000 6e 6f 20 63 6f 6e 73 74 72 61 69 6e 74 20 74 6f  no constraint to
14010 20 63 68 65 63 6b 20 2a 2f 0a 23 64 65 66 69 6e   check */.#defin
14020 65 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 31 20  e OE_Rollback 1 
14030 20 20 2f 2a 20 46 61 69 6c 20 74 68 65 20 6f 70    /* Fail the op
14040 65 72 61 74 69 6f 6e 20 61 6e 64 20 72 6f 6c 6c  eration and roll
14050 62 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61 63  back the transac
14060 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
14070 4f 45 5f 41 62 6f 72 74 20 20 20 20 32 20 20 20  OE_Abort    2   
14080 2f 2a 20 42 61 63 6b 20 6f 75 74 20 63 68 61 6e  /* Back out chan
14090 67 65 73 20 62 75 74 20 64 6f 20 6e 6f 20 72 6f  ges but do no ro
140a0 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61 63 74 69  llback transacti
140b0 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  on */.#define OE
140c0 5f 46 61 69 6c 20 20 20 20 20 33 20 20 20 2f 2a  _Fail     3   /*
140d0 20 53 74 6f 70 20 74 68 65 20 6f 70 65 72 61 74   Stop the operat
140e0 69 6f 6e 20 62 75 74 20 6c 65 61 76 65 20 61 6c  ion but leave al
140f0 6c 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20  l prior changes 
14100 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 49 67  */.#define OE_Ig
14110 6e 6f 72 65 20 20 20 34 20 20 20 2f 2a 20 49 67  nore   4   /* Ig
14120 6e 6f 72 65 20 74 68 65 20 65 72 72 6f 72 2e 20  nore the error. 
14130 44 6f 20 6e 6f 74 20 64 6f 20 74 68 65 20 49 4e  Do not do the IN
14140 53 45 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a  SERT or UPDATE *
14150 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65 70  /.#define OE_Rep
14160 6c 61 63 65 20 20 35 20 20 20 2f 2a 20 44 65 6c  lace  5   /* Del
14170 65 74 65 20 65 78 69 73 74 69 6e 67 20 72 65 63  ete existing rec
14180 6f 72 64 2c 20 74 68 65 6e 20 64 6f 20 49 4e 53  ord, then do INS
14190 45 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a 2f  ERT or UPDATE */
141a0 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65 73  ..#define OE_Res
141b0 74 72 69 63 74 20 36 20 20 20 2f 2a 20 4f 45 5f  trict 6   /* OE_
141c0 41 62 6f 72 74 20 66 6f 72 20 49 4d 4d 45 44 49  Abort for IMMEDI
141d0 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b  ATE, OE_Rollback
141e0 20 66 6f 72 20 44 45 46 45 52 52 45 44 20 2a 2f   for DEFERRED */
141f0 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74 4e  .#define OE_SetN
14200 75 6c 6c 20 20 37 20 20 20 2f 2a 20 53 65 74 20  ull  7   /* Set 
14210 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  the foreign key 
14220 76 61 6c 75 65 20 74 6f 20 4e 55 4c 4c 20 2a 2f  value to NULL */
14230 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74 44  .#define OE_SetD
14240 66 6c 74 20 20 38 20 20 20 2f 2a 20 53 65 74 20  flt  8   /* Set 
14250 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  the foreign key 
14260 76 61 6c 75 65 20 74 6f 20 69 74 73 20 64 65 66  value to its def
14270 61 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ault */.#define 
14280 4f 45 5f 43 61 73 63 61 64 65 20 20 39 20 20 20  OE_Cascade  9   
14290 2f 2a 20 43 61 73 63 61 64 65 20 74 68 65 20 63  /* Cascade the c
142a0 68 61 6e 67 65 73 20 2a 2f 0a 0a 23 64 65 66 69  hanges */..#defi
142b0 6e 65 20 4f 45 5f 44 65 66 61 75 6c 74 20 20 31  ne OE_Default  1
142c0 30 20 20 2f 2a 20 44 6f 20 77 68 61 74 65 76 65  0  /* Do whateve
142d0 72 20 74 68 65 20 64 65 66 61 75 6c 74 20 61 63  r the default ac
142e0 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a  tion is */.../*.
142f0 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
14300 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
14310 73 74 72 75 63 74 75 72 65 20 69 73 20 70 61 73  structure is pas
14320 73 65 64 20 61 73 20 74 68 65 20 66 69 72 73 74  sed as the first
14330 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  .** argument to 
14340 73 71 6c 69 74 65 33 56 64 62 65 4b 65 79 43 6f  sqlite3VdbeKeyCo
14350 6d 70 61 72 65 20 61 6e 64 20 69 73 20 75 73 65  mpare and is use
14360 64 20 74 6f 20 63 6f 6e 74 72 6f 6c 20 74 68 65  d to control the
14370 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f  .** comparison o
14380 66 20 74 68 65 20 74 77 6f 20 69 6e 64 65 78 20  f the two index 
14390 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65  keys..**.** Note
143a0 20 74 68 61 74 20 61 53 6f 72 74 4f 72 64 65 72   that aSortOrder
143b0 5b 5d 20 61 6e 64 20 61 43 6f 6c 6c 5b 5d 20 68  [] and aColl[] h
143c0 61 76 65 20 6e 46 69 65 6c 64 2b 31 20 73 6c 6f  ave nField+1 slo
143d0 74 73 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61 72  ts.  There.** ar
143e0 65 20 6e 46 69 65 6c 64 20 73 6c 6f 74 73 20 66  e nField slots f
143f0 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f  or the columns o
14400 66 20 61 6e 20 69 6e 64 65 78 20 74 68 65 6e 20  f an index then 
14410 6f 6e 65 20 65 78 74 72 61 20 73 6c 6f 74 0a 2a  one extra slot.*
14420 2a 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64 20  * for the rowid 
14430 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73  at the end..*/.s
14440 74 72 75 63 74 20 4b 65 79 49 6e 66 6f 20 7b 0a  truct KeyInfo {.
14450 20 20 75 33 32 20 6e 52 65 66 3b 20 20 20 20 20    u32 nRef;     
14460 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
14470 6f 66 20 72 65 66 65 72 65 6e 63 65 73 20 74 6f  of references to
14480 20 74 68 69 73 20 4b 65 79 49 6e 66 6f 20 6f 62   this KeyInfo ob
14490 6a 65 63 74 20 2a 2f 0a 20 20 75 38 20 65 6e 63  ject */.  u8 enc
144a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
144b0 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2d   Text encoding -
144c0 20 6f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49   one of the SQLI
144d0 54 45 5f 55 54 46 2a 20 76 61 6c 75 65 73 20 2a  TE_UTF* values *
144e0 2f 0a 20 20 75 31 36 20 6e 4b 65 79 46 69 65 6c  /.  u16 nKeyFiel
144f0 64 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  d;      /* Numbe
14500 72 20 6f 66 20 6b 65 79 20 63 6f 6c 75 6d 6e 73  r of key columns
14510 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f   in the index */
14520 0a 20 20 75 31 36 20 6e 41 6c 6c 46 69 65 6c 64  .  u16 nAllField
14530 3b 20 20 20 20 20 20 2f 2a 20 54 6f 74 61 6c 20  ;      /* Total 
14540 63 6f 6c 75 6d 6e 73 2c 20 69 6e 63 6c 75 64 69  columns, includi
14550 6e 67 20 6b 65 79 20 70 6c 75 73 20 6f 74 68 65  ng key plus othe
14560 72 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20  rs */.  sqlite3 
14570 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  *db;        /* T
14580 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  he database conn
14590 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 2a  ection */.  u8 *
145a0 61 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20  aSortOrder;     
145b0 2f 2a 20 53 6f 72 74 20 6f 72 64 65 72 20 66 6f  /* Sort order fo
145c0 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 20 2a  r each column. *
145d0 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 61 43 6f  /.  CollSeq *aCo
145e0 6c 6c 5b 31 5d 3b 20 20 2f 2a 20 43 6f 6c 6c 61  ll[1];  /* Colla
145f0 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 66 6f  ting sequence fo
14600 72 20 65 61 63 68 20 74 65 72 6d 20 6f 66 20 74  r each term of t
14610 68 65 20 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  he key */.};../*
14620 0a 2a 2a 20 54 68 69 73 20 6f 62 6a 65 63 74 20  .** This object 
14630 68 6f 6c 64 73 20 61 20 72 65 63 6f 72 64 20 77  holds a record w
14640 68 69 63 68 20 68 61 73 20 62 65 65 6e 20 70 61  hich has been pa
14650 72 73 65 64 20 6f 75 74 20 69 6e 74 6f 20 69 6e  rsed out into in
14660 64 69 76 69 64 75 61 6c 0a 2a 2a 20 66 69 65 6c  dividual.** fiel
14670 64 73 2c 20 66 6f 72 20 74 68 65 20 70 75 72 70  ds, for the purp
14680 6f 73 65 73 20 6f 66 20 64 6f 69 6e 67 20 61 20  oses of doing a 
14690 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a 2a 2a 0a 2a  comparison..**.*
146a0 2a 20 41 20 72 65 63 6f 72 64 20 69 73 20 61 6e  * A record is an
146b0 20 6f 62 6a 65 63 74 20 74 68 61 74 20 63 6f 6e   object that con
146c0 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72  tains one or mor
146d0 65 20 66 69 65 6c 64 73 20 6f 66 20 64 61 74 61  e fields of data
146e0 2e 0a 2a 2a 20 52 65 63 6f 72 64 73 20 61 72 65  ..** Records are
146f0 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
14700 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20  he content of a 
14710 74 61 62 6c 65 20 72 6f 77 20 61 6e 64 20 74 6f  table row and to
14720 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20 6b 65   store.** the ke
14730 79 20 6f 66 20 61 6e 20 69 6e 64 65 78 2e 20 20  y of an index.  
14740 41 20 62 6c 6f 62 20 65 6e 63 6f 64 69 6e 67 20  A blob encoding 
14750 6f 66 20 61 20 72 65 63 6f 72 64 20 69 73 20 63  of a record is c
14760 72 65 61 74 65 64 20 62 79 0a 2a 2a 20 74 68 65  reated by.** the
14770 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 20 6f   OP_MakeRecord o
14780 70 63 6f 64 65 20 6f 66 20 74 68 65 20 56 44 42  pcode of the VDB
14790 45 20 61 6e 64 20 69 73 20 64 69 73 61 73 73 65  E and is disasse
147a0 6d 62 6c 65 64 20 62 79 20 74 68 65 0a 2a 2a 20  mbled by the.** 
147b0 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65  OP_Column opcode
147c0 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ..**.** An insta
147d0 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 62 6a 65  nce of this obje
147e0 63 74 20 73 65 72 76 65 73 20 61 73 20 61 20 22  ct serves as a "
147f0 6b 65 79 22 20 66 6f 72 20 64 6f 69 6e 67 20 61  key" for doing a
14800 20 73 65 61 72 63 68 20 6f 6e 0a 2a 2a 20 61 6e   search on.** an
14810 20 69 6e 64 65 78 20 62 2b 74 72 65 65 2e 20 54   index b+tree. T
14820 68 65 20 67 6f 61 6c 20 6f 66 20 74 68 65 20 73  he goal of the s
14830 65 61 72 63 68 20 69 73 20 74 6f 20 66 69 6e 64  earch is to find
14840 20 74 68 65 20 65 6e 74 72 79 20 74 68 61 74 0a   the entry that.
14850 2a 2a 20 69 73 20 63 6c 6f 73 65 64 20 74 6f 20  ** is closed to 
14860 74 68 65 20 6b 65 79 20 64 65 73 63 72 69 62 65  the key describe
14870 64 20 62 79 20 74 68 69 73 20 6f 62 6a 65 63 74  d by this object
14880 2e 20 20 54 68 69 73 20 6f 62 6a 65 63 74 20 6d  .  This object m
14890 69 67 68 74 20 68 6f 6c 64 0a 2a 2a 20 6a 75 73  ight hold.** jus
148a0 74 20 61 20 70 72 65 66 69 78 20 6f 66 20 74 68  t a prefix of th
148b0 65 20 6b 65 79 2e 20 20 54 68 65 20 6e 75 6d 62  e key.  The numb
148c0 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 73 20  er of fields is 
148d0 67 69 76 65 6e 20 62 79 0a 2a 2a 20 70 4b 65 79  given by.** pKey
148e0 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2e 0a 2a 2a  Info->nField..**
148f0 0a 2a 2a 20 54 68 65 20 72 31 20 61 6e 64 20 72  .** The r1 and r
14900 32 20 66 69 65 6c 64 73 20 61 72 65 20 74 68 65  2 fields are the
14910 20 76 61 6c 75 65 73 20 74 6f 20 72 65 74 75 72   values to retur
14920 6e 20 69 66 20 74 68 69 73 20 6b 65 79 20 69 73  n if this key is
14930 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 6f 72   less than.** or
14940 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 61 20   greater than a 
14950 6b 65 79 20 69 6e 20 74 68 65 20 62 74 72 65 65  key in the btree
14960 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
14970 20 54 68 65 73 65 20 61 72 65 20 6e 6f 72 6d 61   These are norma
14980 6c 6c 79 0a 2a 2a 20 2d 31 20 61 6e 64 20 2b 31  lly.** -1 and +1
14990 20 72 65 73 70 65 63 74 69 76 65 6c 79 2c 20 62   respectively, b
149a0 75 74 20 6d 69 67 68 74 20 62 65 20 69 6e 76 65  ut might be inve
149b0 72 74 65 64 20 74 6f 20 2b 31 20 61 6e 64 20 2d  rted to +1 and -
149c0 31 20 69 66 20 74 68 65 20 62 2d 74 72 65 65 0a  1 if the b-tree.
149d0 2a 2a 20 69 73 20 69 6e 20 44 45 53 43 20 6f 72  ** is in DESC or
149e0 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6b  der..**.** The k
149f0 65 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66 75  ey comparison fu
14a00 6e 63 74 69 6f 6e 73 20 61 63 74 75 61 6c 6c 79  nctions actually
14a10 20 72 65 74 75 72 6e 20 64 65 66 61 75 6c 74 5f   return default_
14a20 72 63 20 77 68 65 6e 20 74 68 65 79 20 66 69 6e  rc when they fin
14a30 64 0a 2a 2a 20 61 6e 20 65 71 75 61 6c 73 20 63  d.** an equals c
14a40 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 64 65 66 61  omparison.  defa
14a50 75 6c 74 5f 72 63 20 63 61 6e 20 62 65 20 2d 31  ult_rc can be -1
14a60 2c 20 30 2c 20 6f 72 20 2b 31 2e 20 20 49 66 20  , 0, or +1.  If 
14a70 74 68 65 72 65 20 61 72 65 0a 2a 2a 20 6d 75 6c  there are.** mul
14a80 74 69 70 6c 65 20 65 6e 74 72 69 65 73 20 69 6e  tiple entries in
14a90 20 74 68 65 20 62 2d 74 72 65 65 20 77 69 74 68   the b-tree with
14aa0 20 74 68 65 20 73 61 6d 65 20 6b 65 79 20 28 77   the same key (w
14ab0 68 65 6e 20 6f 6e 6c 79 20 6c 6f 6f 6b 69 6e 67  hen only looking
14ac0 0a 2a 2a 20 61 74 20 74 68 65 20 66 69 72 73 74  .** at the first
14ad0 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c   pKeyInfo->nFiel
14ae0 64 73 2c 29 20 74 68 65 6e 20 64 65 66 61 75 6c  ds,) then defaul
14af0 74 5f 72 63 20 63 61 6e 20 62 65 20 73 65 74 20  t_rc can be set 
14b00 74 6f 20 2d 31 20 74 6f 0a 2a 2a 20 63 61 75 73  to -1 to.** caus
14b10 65 20 74 68 65 20 73 65 61 72 63 68 20 74 6f 20  e the search to 
14b20 66 69 6e 64 20 74 68 65 20 6c 61 73 74 20 6d 61  find the last ma
14b30 74 63 68 2c 20 6f 72 20 2b 31 20 74 6f 20 63 61  tch, or +1 to ca
14b40 75 73 65 20 74 68 65 20 73 65 61 72 63 68 20 74  use the search t
14b50 6f 0a 2a 2a 20 66 69 6e 64 20 74 68 65 20 66 69  o.** find the fi
14b60 72 73 74 20 6d 61 74 63 68 2e 0a 2a 2a 0a 2a 2a  rst match..**.**
14b70 20 54 68 65 20 6b 65 79 20 63 6f 6d 70 61 72 69   The key compari
14b80 73 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 77 69  son functions wi
14b90 6c 6c 20 73 65 74 20 65 71 53 65 65 6e 20 74 6f  ll set eqSeen to
14ba0 20 74 72 75 65 20 69 66 20 74 68 65 79 20 65 76   true if they ev
14bb0 65 72 0a 2a 2a 20 67 65 74 20 61 6e 64 20 65 71  er.** get and eq
14bc0 75 61 6c 20 72 65 73 75 6c 74 73 20 77 68 65 6e  ual results when
14bd0 20 63 6f 6d 70 61 72 69 6e 67 20 74 68 69 73 20   comparing this 
14be0 73 74 72 75 63 74 75 72 65 20 74 6f 20 61 20 62  structure to a b
14bf0 2d 74 72 65 65 20 72 65 63 6f 72 64 2e 0a 2a 2a  -tree record..**
14c00 20 57 68 65 6e 20 64 65 66 61 75 6c 74 5f 72 63   When default_rc
14c10 21 3d 30 2c 20 74 68 65 20 73 65 61 72 63 68 20  !=0, the search 
14c20 6d 69 67 68 74 20 65 6e 64 20 75 70 20 6f 6e 20  might end up on 
14c30 74 68 65 20 72 65 63 6f 72 64 20 69 6d 6d 65 64  the record immed
14c40 69 61 74 65 6c 79 0a 2a 2a 20 62 65 66 6f 72 65  iately.** before
14c50 20 74 68 65 20 66 69 72 73 74 20 6d 61 74 63 68   the first match
14c60 20 6f 72 20 69 6d 6d 65 64 69 61 74 65 6c 79 20   or immediately 
14c70 61 66 74 65 72 20 74 68 65 20 6c 61 73 74 20 6d  after the last m
14c80 61 74 63 68 2e 20 20 54 68 65 0a 2a 2a 20 65 71  atch.  The.** eq
14c90 53 65 65 6e 20 66 69 65 6c 64 20 77 69 6c 6c 20  Seen field will 
14ca0 69 6e 64 69 63 61 74 65 20 77 68 65 74 68 65 72  indicate whether
14cb0 20 6f 72 20 6e 6f 74 20 61 6e 20 65 78 61 63 74   or not an exact
14cc0 20 6d 61 74 63 68 20 65 78 69 73 74 73 20 69 6e   match exists in
14cd0 20 74 68 65 0a 2a 2a 20 62 2d 74 72 65 65 2e 0a   the.** b-tree..
14ce0 2a 2f 0a 73 74 72 75 63 74 20 55 6e 70 61 63 6b  */.struct Unpack
14cf0 65 64 52 65 63 6f 72 64 20 7b 0a 20 20 4b 65 79  edRecord {.  Key
14d00 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 20  Info *pKeyInfo; 
14d10 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20 61 6e   /* Collation an
14d20 64 20 73 6f 72 74 2d 6f 72 64 65 72 20 69 6e 66  d sort-order inf
14d30 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20 4d 65  ormation */.  Me
14d40 6d 20 2a 61 4d 65 6d 3b 20 20 20 20 20 20 20 20  m *aMem;        
14d50 20 20 2f 2a 20 56 61 6c 75 65 73 20 2a 2f 0a 20    /* Values */. 
14d60 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20   u16 nField;    
14d70 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
14d80 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 70 4d  f entries in apM
14d90 65 6d 5b 5d 20 2a 2f 0a 20 20 69 38 20 64 65 66  em[] */.  i8 def
14da0 61 75 6c 74 5f 72 63 3b 20 20 20 20 20 20 2f 2a  ault_rc;      /*
14db0 20 43 6f 6d 70 61 72 69 73 6f 6e 20 72 65 73 75   Comparison resu
14dc0 6c 74 20 69 66 20 6b 65 79 73 20 61 72 65 20 65  lt if keys are e
14dd0 71 75 61 6c 20 2a 2f 0a 20 20 75 38 20 65 72 72  qual */.  u8 err
14de0 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  Code;         /*
14df0 20 45 72 72 6f 72 20 64 65 74 65 63 74 65 64 20   Error detected 
14e00 62 79 20 78 52 65 63 6f 72 64 43 6f 6d 70 61 72  by xRecordCompar
14e10 65 20 28 43 4f 52 52 55 50 54 20 6f 72 20 4e 4f  e (CORRUPT or NO
14e20 4d 45 4d 29 20 2a 2f 0a 20 20 69 38 20 72 31 3b  MEM) */.  i8 r1;
14e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
14e40 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e   Value to return
14e50 20 69 66 20 28 6c 68 73 20 3c 20 72 68 73 29 20   if (lhs < rhs) 
14e60 2a 2f 0a 20 20 69 38 20 72 32 3b 20 20 20 20 20  */.  i8 r2;     
14e70 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
14e80 65 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20 28  e to return if (
14e90 6c 68 73 20 3e 20 72 68 73 29 20 2a 2f 0a 20 20  lhs > rhs) */.  
14ea0 75 38 20 65 71 53 65 65 6e 3b 20 20 20 20 20 20  u8 eqSeen;      
14eb0 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61      /* True if a
14ec0 6e 20 65 71 75 61 6c 69 74 79 20 63 6f 6d 70 61  n equality compa
14ed0 72 69 73 6f 6e 20 68 61 73 20 62 65 65 6e 20 73  rison has been s
14ee0 65 65 6e 20 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a  een */.};.../*.*
14ef0 2a 20 45 61 63 68 20 53 51 4c 20 69 6e 64 65 78  * Each SQL index
14f00 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20   is represented 
14f10 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20 61 6e 0a  in memory by an.
14f20 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  ** instance of t
14f30 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
14f40 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  ucture..**.** Th
14f50 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65  e columns of the
14f60 20 74 61 62 6c 65 20 74 68 61 74 20 61 72 65 20   table that are 
14f70 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 61 72  to be indexed ar
14f80 65 20 64 65 73 63 72 69 62 65 64 0a 2a 2a 20 62  e described.** b
14f90 79 20 74 68 65 20 61 69 43 6f 6c 75 6d 6e 5b 5d  y the aiColumn[]
14fa0 20 66 69 65 6c 64 20 6f 66 20 74 68 69 73 20 73   field of this s
14fb0 74 72 75 63 74 75 72 65 2e 20 20 46 6f 72 20 65  tructure.  For e
14fc0 78 61 6d 70 6c 65 2c 20 73 75 70 70 6f 73 65 0a  xample, suppose.
14fd0 2a 2a 20 77 65 20 68 61 76 65 20 74 68 65 20 66  ** we have the f
14fe0 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20 61  ollowing table a
14ff0 6e 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a 2a 2a 20  nd index:.**.** 
15000 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
15010 20 45 78 31 28 63 31 20 69 6e 74 2c 20 63 32 20   Ex1(c1 int, c2 
15020 69 6e 74 2c 20 63 33 20 74 65 78 74 29 3b 0a 2a  int, c3 text);.*
15030 2a 20 20 20 20 20 43 52 45 41 54 45 20 49 4e 44  *     CREATE IND
15040 45 58 20 45 78 32 20 4f 4e 20 45 78 31 28 63 33  EX Ex2 ON Ex1(c3
15050 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49 6e 20 74  ,c1);.**.** In t
15060 68 65 20 54 61 62 6c 65 20 73 74 72 75 63 74 75  he Table structu
15070 72 65 20 64 65 73 63 72 69 62 69 6e 67 20 45 78  re describing Ex
15080 31 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65 63 61 75  1, nCol==3 becau
15090 73 65 20 74 68 65 72 65 20 61 72 65 0a 2a 2a 20  se there are.** 
150a0 74 68 72 65 65 20 63 6f 6c 75 6d 6e 73 20 69 6e  three columns in
150b0 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49 6e 20   the table.  In 
150c0 74 68 65 20 49 6e 64 65 78 20 73 74 72 75 63 74  the Index struct
150d0 75 72 65 20 64 65 73 63 72 69 62 69 6e 67 0a 2a  ure describing.*
150e0 2a 20 45 78 32 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d  * Ex2, nColumn==
150f0 32 20 73 69 6e 63 65 20 32 20 6f 66 20 74 68 65  2 since 2 of the
15100 20 33 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 45 78   3 columns of Ex
15110 31 20 61 72 65 20 69 6e 64 65 78 65 64 2e 0a 2a  1 are indexed..*
15120 2a 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20 61  * The value of a
15130 69 43 6f 6c 75 6d 6e 20 69 73 20 7b 32 2c 20 30  iColumn is {2, 0
15140 7d 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b 30 5d 3d  }.  aiColumn[0]=
15150 3d 32 20 62 65 63 61 75 73 65 20 74 68 65 0a 2a  =2 because the.*
15160 2a 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 74  * first column t
15170 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28 63 33  o be indexed (c3
15180 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f  ) has an index o
15190 66 20 32 20 69 6e 20 45 78 31 2e 61 43 6f 6c 5b  f 2 in Ex1.aCol[
151a0 5d 2e 0a 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64  ]..** The second
151b0 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e   column to be in
151c0 64 65 78 65 64 20 28 63 31 29 20 68 61 73 20 61  dexed (c1) has a
151d0 6e 20 69 6e 64 65 78 20 6f 66 20 30 20 69 6e 0a  n index of 0 in.
151e0 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b 5d 2c 20 68  ** Ex1.aCol[], h
151f0 65 6e 63 65 20 45 78 32 2e 61 69 43 6f 6c 75 6d  ence Ex2.aiColum
15200 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54  n[1]==0..**.** T
15210 68 65 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72  he Index.onError
15220 20 66 69 65 6c 64 20 64 65 74 65 72 6d 69 6e 65   field determine
15230 73 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  s whether or not
15240 20 74 68 65 20 69 6e 64 65 78 65 64 20 63 6f 6c   the indexed col
15250 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74 20 62 65 20  umns.** must be 
15260 75 6e 69 71 75 65 20 61 6e 64 20 77 68 61 74 20  unique and what 
15270 74 6f 20 64 6f 20 69 66 20 74 68 65 79 20 61 72  to do if they ar
15280 65 20 6e 6f 74 2e 20 20 57 68 65 6e 20 49 6e 64  e not.  When Ind
15290 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f 45 5f 4e 6f  ex.onError=OE_No
152a0 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65 61 6e 73 20  ne,.** it means 
152b0 74 68 69 73 20 69 73 20 6e 6f 74 20 61 20 75 6e  this is not a un
152c0 69 71 75 65 20 69 6e 64 65 78 2e 20 20 4f 74 68  ique index.  Oth
152d0 65 72 77 69 73 65 20 69 74 20 69 73 20 61 20 75  erwise it is a u
152e0 6e 69 71 75 65 20 69 6e 64 65 78 0a 2a 2a 20 61  nique index.** a
152f0 6e 64 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  nd the value of 
15300 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 69 6e  Index.onError in
15310 64 69 63 61 74 65 20 74 68 65 20 77 68 69 63 68  dicate the which
15320 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75   conflict resolu
15330 74 69 6f 6e 0a 2a 2a 20 61 6c 67 6f 72 69 74 68  tion.** algorith
15340 6d 20 74 6f 20 65 6d 70 6c 6f 79 20 77 68 65 6e  m to employ when
15350 65 76 65 72 20 61 6e 20 61 74 74 65 6d 70 74 20  ever an attempt 
15360 69 73 20 6d 61 64 65 20 74 6f 20 69 6e 73 65 72  is made to inser
15370 74 20 61 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a 2a  t a non-unique.*
15380 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  * element..**.**
15390 20 57 68 69 6c 65 20 70 61 72 73 69 6e 67 20 61   While parsing a
153a0 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 6f 72   CREATE TABLE or
153b0 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 73 74   CREATE INDEX st
153c0 61 74 65 6d 65 6e 74 20 69 6e 20 6f 72 64 65 72  atement in order
153d0 20 74 6f 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20   to.** generate 
153e0 56 44 42 45 20 63 6f 64 65 20 28 61 73 20 6f 70  VDBE code (as op
153f0 70 6f 73 65 64 20 74 6f 20 70 61 72 73 69 6e 67  posed to parsing
15400 20 6f 6e 65 20 72 65 61 64 20 66 72 6f 6d 20 61   one read from a
15410 6e 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 0a  n sqlite_master.
15420 2a 2a 20 74 61 62 6c 65 20 61 73 20 70 61 72 74  ** table as part
15430 20 6f 66 20 70 61 72 73 69 6e 67 20 61 6e 20 65   of parsing an e
15440 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65  xisting database
15450 20 73 63 68 65 6d 61 29 2c 20 74 72 61 6e 73 69   schema), transi
15460 65 6e 74 20 69 6e 73 74 61 6e 63 65 73 0a 2a 2a  ent instances.**
15470 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
15480 72 65 20 6d 61 79 20 62 65 20 63 72 65 61 74 65  re may be create
15490 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  d. In this case 
154a0 74 68 65 20 49 6e 64 65 78 2e 74 6e 75 6d 20 76  the Index.tnum v
154b0 61 72 69 61 62 6c 65 20 69 73 0a 2a 2a 20 75 73  ariable is.** us
154c0 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ed to store the 
154d0 61 64 64 72 65 73 73 20 6f 66 20 61 20 56 44 42  address of a VDB
154e0 45 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c 20 6e  E instruction, n
154f0 6f 74 20 61 20 64 61 74 61 62 61 73 65 20 70 61  ot a database pa
15500 67 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 28 69 74  ge.** number (it
15510 20 63 61 6e 6e 6f 74 20 2d 20 74 68 65 20 64 61   cannot - the da
15520 74 61 62 61 73 65 20 70 61 67 65 20 69 73 20 6e  tabase page is n
15530 6f 74 20 61 6c 6c 6f 63 61 74 65 64 20 75 6e 74  ot allocated unt
15540 69 6c 20 74 68 65 20 56 44 42 45 0a 2a 2a 20 70  il the VDBE.** p
15550 72 6f 67 72 61 6d 20 69 73 20 65 78 65 63 75 74  rogram is execut
15560 65 64 29 2e 20 53 65 65 20 63 6f 6e 76 65 72 74  ed). See convert
15570 54 6f 57 69 74 68 6f 75 74 52 6f 77 69 64 54 61  ToWithoutRowidTa
15580 62 6c 65 28 29 20 66 6f 72 20 64 65 74 61 69 6c  ble() for detail
15590 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64  s..*/.struct Ind
155a0 65 78 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  ex {.  char *zNa
155b0 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  me;             
155c0 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20  /* Name of this 
155d0 69 6e 64 65 78 20 2a 2f 0a 20 20 69 31 36 20 2a  index */.  i16 *
155e0 61 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20  aiColumn;       
155f0 20 20 20 20 2f 2a 20 57 68 69 63 68 20 63 6f 6c      /* Which col
15600 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20 62 79  umns are used by
15610 20 74 68 69 73 20 69 6e 64 65 78 2e 20 20 31 73   this index.  1s
15620 74 20 69 73 20 30 20 2a 2f 0a 20 20 4c 6f 67 45  t is 0 */.  LogE
15630 73 74 20 2a 61 69 52 6f 77 4c 6f 67 45 73 74 3b  st *aiRowLogEst;
15640 20 20 20 20 20 2f 2a 20 46 72 6f 6d 20 41 4e 41       /* From ANA
15650 4c 59 5a 45 3a 20 45 73 74 2e 20 72 6f 77 73 20  LYZE: Est. rows 
15660 73 65 6c 65 63 74 65 64 20 62 79 20 65 61 63 68  selected by each
15670 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 54 61 62   column */.  Tab
15680 6c 65 20 2a 70 54 61 62 6c 65 3b 20 20 20 20 20  le *pTable;     
15690 20 20 20 20 20 20 2f 2a 20 54 68 65 20 53 51 4c        /* The SQL
156a0 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 64   table being ind
156b0 65 78 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  exed */.  char *
156c0 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 20  zColAff;        
156d0 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66     /* String def
156e0 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69  ining the affini
156f0 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d  ty of each colum
15700 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 4e  n */.  Index *pN
15710 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ext;            
15720 2f 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 64 65  /* The next inde
15730 78 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  x associated wit
15740 68 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65  h the same table
15750 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
15760 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20 20 2f  chema;         /
15770 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e  * Schema contain
15780 69 6e 67 20 74 68 69 73 20 69 6e 64 65 78 20 2a  ing this index *
15790 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64  /.  u8 *aSortOrd
157a0 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  er;          /* 
157b0 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 3a  for each column:
157c0 20 54 72 75 65 3d 3d 44 45 53 43 2c 20 46 61 6c   True==DESC, Fal
157d0 73 65 3d 3d 41 53 43 20 2a 2f 0a 20 20 63 6f 6e  se==ASC */.  con
157e0 73 74 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 6c  st char **azColl
157f0 3b 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f  ;     /* Array o
15800 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  f collation sequ
15810 65 6e 63 65 20 6e 61 6d 65 73 20 66 6f 72 20 69  ence names for i
15820 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70 72 20 2a  ndex */.  Expr *
15830 70 50 61 72 74 49 64 78 57 68 65 72 65 3b 20 20  pPartIdxWhere;  
15840 20 20 20 2f 2a 20 57 48 45 52 45 20 63 6c 61 75     /* WHERE clau
15850 73 65 20 66 6f 72 20 70 61 72 74 69 61 6c 20 69  se for partial i
15860 6e 64 69 63 65 73 20 2a 2f 0a 20 20 45 78 70 72  ndices */.  Expr
15870 4c 69 73 74 20 2a 61 43 6f 6c 45 78 70 72 3b 20  List *aColExpr; 
15880 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 65       /* Column e
15890 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20  xpressions */.  
158a0 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20 20  int tnum;       
158b0 20 20 20 20 20 20 20 20 20 2f 2a 20 44 42 20 50           /* DB P
158c0 61 67 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 72  age containing r
158d0 6f 6f 74 20 6f 66 20 74 68 69 73 20 69 6e 64 65  oot of this inde
158e0 78 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a  x */.  LogEst sz
158f0 49 64 78 52 6f 77 3b 20 20 20 20 20 20 20 20 20  IdxRow;         
15900 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 61 76 65  /* Estimated ave
15910 72 61 67 65 20 72 6f 77 20 73 69 7a 65 20 69 6e  rage row size in
15920 20 62 79 74 65 73 20 2a 2f 0a 20 20 75 31 36 20   bytes */.  u16 
15930 6e 4b 65 79 43 6f 6c 3b 20 20 20 20 20 20 20 20  nKeyCol;        
15940 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
15950 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 6d 69 6e  f columns formin
15960 67 20 74 68 65 20 6b 65 79 20 2a 2f 0a 20 20 75  g the key */.  u
15970 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  16 nColumn;     
15980 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
15990 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 73 74 6f  r of columns sto
159a0 72 65 64 20 69 6e 20 74 68 65 20 69 6e 64 65 78  red in the index
159b0 20 2a 2f 0a 20 20 75 38 20 6f 6e 45 72 72 6f 72   */.  u8 onError
159c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
159d0 2a 20 4f 45 5f 41 62 6f 72 74 2c 20 4f 45 5f 49  * OE_Abort, OE_I
159e0 67 6e 6f 72 65 2c 20 4f 45 5f 52 65 70 6c 61 63  gnore, OE_Replac
159f0 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65 20 2a 2f  e, or OE_None */
15a00 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 64 78 54  .  unsigned idxT
15a10 79 70 65 3a 32 3b 20 20 20 20 20 20 2f 2a 20 31  ype:2;      /* 1
15a20 3d 3d 55 4e 49 51 55 45 2c 20 32 3d 3d 50 52 49  ==UNIQUE, 2==PRI
15a30 4d 41 52 59 20 4b 45 59 2c 20 30 3d 3d 43 52 45  MARY KEY, 0==CRE
15a40 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 20 20 75  ATE INDEX */.  u
15a50 6e 73 69 67 6e 65 64 20 62 55 6e 6f 72 64 65 72  nsigned bUnorder
15a60 65 64 3a 31 3b 20 20 20 2f 2a 20 55 73 65 20 74  ed:1;   /* Use t
15a70 68 69 73 20 69 6e 64 65 78 20 66 6f 72 20 3d 3d  his index for ==
15a80 20 6f 72 20 49 4e 20 71 75 65 72 69 65 73 20 6f   or IN queries o
15a90 6e 6c 79 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  nly */.  unsigne
15aa0 64 20 75 6e 69 71 4e 6f 74 4e 75 6c 6c 3a 31 3b  d uniqNotNull:1;
15ab0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 55 4e 49    /* True if UNI
15ac0 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c  QUE and NOT NULL
15ad0 20 66 6f 72 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73   for all columns
15ae0 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
15af0 73 52 65 73 69 7a 65 64 3a 31 3b 20 20 20 20 2f  sResized:1;    /
15b00 2a 20 54 72 75 65 20 69 66 20 72 65 73 69 7a 65  * True if resize
15b10 49 6e 64 65 78 4f 62 6a 65 63 74 28 29 20 68 61  IndexObject() ha
15b20 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f  s been called */
15b30 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 73 43 6f  .  unsigned isCo
15b40 76 65 72 69 6e 67 3a 31 3b 20 20 20 2f 2a 20 54  vering:1;   /* T
15b50 72 75 65 20 69 66 20 74 68 69 73 20 69 73 20 61  rue if this is a
15b60 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 65 78 20   covering index 
15b70 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f  */.  unsigned no
15b80 53 6b 69 70 53 63 61 6e 3a 31 3b 20 20 20 2f 2a  SkipScan:1;   /*
15b90 20 44 6f 20 6e 6f 74 20 74 72 79 20 74 6f 20 75   Do not try to u
15ba0 73 65 20 73 6b 69 70 2d 73 63 61 6e 20 69 66 20  se skip-scan if 
15bb0 74 72 75 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  true */.  unsign
15bc0 65 64 20 68 61 73 53 74 61 74 31 3a 31 3b 20 20  ed hasStat1:1;  
15bd0 20 20 20 2f 2a 20 61 69 52 6f 77 4c 6f 67 45 73     /* aiRowLogEs
15be0 74 20 76 61 6c 75 65 73 20 63 6f 6d 65 20 66 72  t values come fr
15bf0 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20  om sqlite_stat1 
15c00 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
15c10 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
15c20 5f 53 54 41 54 34 0a 20 20 69 6e 74 20 6e 53 61  _STAT4.  int nSa
15c30 6d 70 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  mple;           
15c40 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
15c50 6c 65 6d 65 6e 74 73 20 69 6e 20 61 53 61 6d 70  lements in aSamp
15c60 6c 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  le[] */.  int nS
15c70 61 6d 70 6c 65 43 6f 6c 3b 20 20 20 20 20 20 20  ampleCol;       
15c80 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 49 6e     /* Size of In
15c90 64 65 78 53 61 6d 70 6c 65 2e 61 6e 45 71 5b 5d  dexSample.anEq[]
15ca0 20 61 6e 64 20 73 6f 20 6f 6e 20 2a 2f 0a 20 20   and so on */.  
15cb0 74 52 6f 77 63 6e 74 20 2a 61 41 76 67 45 71 3b  tRowcnt *aAvgEq;
15cc0 20 20 20 20 20 20 20 20 20 2f 2a 20 41 76 65 72           /* Aver
15cd0 61 67 65 20 6e 45 71 20 76 61 6c 75 65 73 20 66  age nEq values f
15ce0 6f 72 20 6b 65 79 73 20 6e 6f 74 20 69 6e 20 61  or keys not in a
15cf0 53 61 6d 70 6c 65 20 2a 2f 0a 20 20 49 6e 64 65  Sample */.  Inde
15d00 78 53 61 6d 70 6c 65 20 2a 61 53 61 6d 70 6c 65  xSample *aSample
15d10 3b 20 20 20 20 2f 2a 20 53 61 6d 70 6c 65 73 20  ;    /* Samples 
15d20 6f 66 20 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74  of the left-most
15d30 20 6b 65 79 20 2a 2f 0a 20 20 74 52 6f 77 63 6e   key */.  tRowcn
15d40 74 20 2a 61 69 52 6f 77 45 73 74 3b 20 20 20 20  t *aiRowEst;    
15d50 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69     /* Non-logari
15d60 74 68 6d 69 63 20 73 74 61 74 31 20 64 61 74 61  thmic stat1 data
15d70 20 66 6f 72 20 74 68 69 73 20 69 6e 64 65 78 20   for this index 
15d80 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 6e 52 6f  */.  tRowcnt nRo
15d90 77 45 73 74 30 3b 20 20 20 20 20 20 20 20 2f 2a  wEst0;        /*
15da0 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69 63   Non-logarithmic
15db0 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
15dc0 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a  in the index */.
15dd0 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  #endif.};../*.**
15de0 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
15df0 66 6f 72 20 49 6e 64 65 78 2e 69 64 78 54 79 70  for Index.idxTyp
15e00 65 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e.*/.#define SQL
15e10 49 54 45 5f 49 44 58 54 59 50 45 5f 41 50 50 44  ITE_IDXTYPE_APPD
15e20 45 46 20 20 20 20 20 20 30 20 20 20 2f 2a 20 43  EF      0   /* C
15e30 72 65 61 74 65 64 20 75 73 69 6e 67 20 43 52 45  reated using CRE
15e40 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 23 64 65  ATE INDEX */.#de
15e50 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54  fine SQLITE_IDXT
15e60 59 50 45 5f 55 4e 49 51 55 45 20 20 20 20 20 20  YPE_UNIQUE      
15e70 31 20 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74  1   /* Implement
15e80 73 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74  s a UNIQUE const
15e90 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  raint */.#define
15ea0 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f   SQLITE_IDXTYPE_
15eb0 50 52 49 4d 41 52 59 4b 45 59 20 20 32 20 20 20  PRIMARYKEY  2   
15ec0 2f 2a 20 49 73 20 74 68 65 20 50 52 49 4d 41 52  /* Is the PRIMAR
15ed0 59 20 4b 45 59 20 66 6f 72 20 74 68 65 20 74 61  Y KEY for the ta
15ee0 62 6c 65 20 2a 2f 0a 0a 2f 2a 20 52 65 74 75 72  ble */../* Retur
15ef0 6e 20 74 72 75 65 20 69 66 20 69 6e 64 65 78 20  n true if index 
15f00 58 20 69 73 20 61 20 50 52 49 4d 41 52 59 20 4b  X is a PRIMARY K
15f10 45 59 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  EY index */.#def
15f20 69 6e 65 20 49 73 50 72 69 6d 61 72 79 4b 65 79  ine IsPrimaryKey
15f30 49 6e 64 65 78 28 58 29 20 20 28 28 58 29 2d 3e  Index(X)  ((X)->
15f40 69 64 78 54 79 70 65 3d 3d 53 51 4c 49 54 45 5f  idxType==SQLITE_
15f50 49 44 58 54 59 50 45 5f 50 52 49 4d 41 52 59 4b  IDXTYPE_PRIMARYK
15f60 45 59 29 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74  EY)../* Return t
15f70 72 75 65 20 69 66 20 69 6e 64 65 78 20 58 20 69  rue if index X i
15f80 73 20 61 20 55 4e 49 51 55 45 20 69 6e 64 65 78  s a UNIQUE index
15f90 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 55 6e   */.#define IsUn
15fa0 69 71 75 65 49 6e 64 65 78 28 58 29 20 20 20 20  iqueIndex(X)    
15fb0 20 20 28 28 58 29 2d 3e 6f 6e 45 72 72 6f 72 21    ((X)->onError!
15fc0 3d 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f 2a 20 54 68  =OE_None)../* Th
15fd0 65 20 49 6e 64 65 78 2e 61 69 43 6f 6c 75 6d 6e  e Index.aiColumn
15fe0 5b 5d 20 76 61 6c 75 65 73 20 61 72 65 20 6e 6f  [] values are no
15ff0 72 6d 61 6c 6c 79 20 70 6f 73 69 74 69 76 65 20  rmally positive 
16000 69 6e 74 65 67 65 72 2e 20 20 42 75 74 0a 2a 2a  integer.  But.**
16010 20 74 68 65 72 65 20 61 72 65 20 73 6f 6d 65 20   there are some 
16020 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 73 20  negative values 
16030 74 68 61 74 20 68 61 76 65 20 73 70 65 63 69 61  that have specia
16040 6c 20 6d 65 61 6e 69 6e 67 3a 0a 2a 2f 0a 23 64  l meaning:.*/.#d
16050 65 66 69 6e 65 20 58 4e 5f 52 4f 57 49 44 20 20  efine XN_ROWID  
16060 20 20 20 28 2d 31 29 20 20 20 20 20 2f 2a 20 49     (-1)     /* I
16070 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20 69 73  ndexed column is
16080 20 74 68 65 20 72 6f 77 69 64 20 2a 2f 0a 23 64   the rowid */.#d
16090 65 66 69 6e 65 20 58 4e 5f 45 58 50 52 20 20 20  efine XN_EXPR   
160a0 20 20 20 28 2d 32 29 20 20 20 20 20 2f 2a 20 49     (-2)     /* I
160b0 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e 20 69 73  ndexed column is
160c0 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 2a   an expression *
160d0 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 73 61  /../*.** Each sa
160e0 6d 70 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 74  mple stored in t
160f0 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 33 20  he sqlite_stat3 
16100 74 61 62 6c 65 20 69 73 20 72 65 70 72 65 73 65  table is represe
16110 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 0a 2a  nted in memory.*
16120 2a 20 75 73 69 6e 67 20 61 20 73 74 72 75 63 74  * using a struct
16130 75 72 65 20 6f 66 20 74 68 69 73 20 74 79 70 65  ure of this type
16140 2e 20 20 53 65 65 20 64 6f 63 75 6d 65 6e 74 61  .  See documenta
16150 74 69 6f 6e 20 61 74 20 74 68 65 20 74 6f 70 20  tion at the top 
16160 6f 66 20 74 68 65 0a 2a 2a 20 61 6e 61 6c 79 7a  of the.** analyz
16170 65 2e 63 20 73 6f 75 72 63 65 20 66 69 6c 65 20  e.c source file 
16180 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
16190 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73  nformation..*/.s
161a0 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70 6c  truct IndexSampl
161b0 65 20 7b 0a 20 20 76 6f 69 64 20 2a 70 3b 20 20  e {.  void *p;  
161c0 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74          /* Point
161d0 65 72 20 74 6f 20 73 61 6d 70 6c 65 64 20 72 65  er to sampled re
161e0 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b  cord */.  int n;
161f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
16200 69 7a 65 20 6f 66 20 72 65 63 6f 72 64 20 69 6e  ize of record in
16210 20 62 79 74 65 73 20 2a 2f 0a 20 20 74 52 6f 77   bytes */.  tRow
16220 63 6e 74 20 2a 61 6e 45 71 3b 20 20 20 20 2f 2a  cnt *anEq;    /*
16230 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20   Est. number of 
16240 72 6f 77 73 20 77 68 65 72 65 20 74 68 65 20 6b  rows where the k
16250 65 79 20 65 71 75 61 6c 73 20 74 68 69 73 20 73  ey equals this s
16260 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63  ample */.  tRowc
16270 6e 74 20 2a 61 6e 4c 74 3b 20 20 20 20 2f 2a 20  nt *anLt;    /* 
16280 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72  Est. number of r
16290 6f 77 73 20 77 68 65 72 65 20 6b 65 79 20 69 73  ows where key is
162a0 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20   less than this 
162b0 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77  sample */.  tRow
162c0 63 6e 74 20 2a 61 6e 44 4c 74 3b 20 20 20 2f 2a  cnt *anDLt;   /*
162d0 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20   Est. number of 
162e0 64 69 73 74 69 6e 63 74 20 6b 65 79 73 20 6c 65  distinct keys le
162f0 73 73 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d  ss than this sam
16300 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ple */.};../*.**
16310 20 45 61 63 68 20 74 6f 6b 65 6e 20 63 6f 6d 69   Each token comi
16320 6e 67 20 6f 75 74 20 6f 66 20 74 68 65 20 6c 65  ng out of the le
16330 78 65 72 20 69 73 20 61 6e 20 69 6e 73 74 61 6e  xer is an instan
16340 63 65 20 6f 66 0a 2a 2a 20 74 68 69 73 20 73 74  ce of.** this st
16350 72 75 63 74 75 72 65 2e 20 20 54 6f 6b 65 6e 73  ructure.  Tokens
16360 20 61 72 65 20 61 6c 73 6f 20 75 73 65 64 20 61   are also used a
16370 73 20 70 61 72 74 20 6f 66 20 61 6e 20 65 78 70  s part of an exp
16380 72 65 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 4e  ression..**.** N
16390 6f 74 65 20 69 66 20 54 6f 6b 65 6e 2e 7a 3d 3d  ote if Token.z==
163a0 30 20 74 68 65 6e 20 54 6f 6b 65 6e 2e 64 79 6e  0 then Token.dyn
163b0 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 61 72 65   and Token.n are
163c0 20 75 6e 64 65 66 69 6e 65 64 20 61 6e 64 0a 2a   undefined and.*
163d0 2a 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20 72 61  * may contain ra
163e0 6e 64 6f 6d 20 76 61 6c 75 65 73 2e 20 20 44 6f  ndom values.  Do
163f0 20 6e 6f 74 20 6d 61 6b 65 20 61 6e 79 20 61 73   not make any as
16400 73 75 6d 70 74 69 6f 6e 73 20 61 62 6f 75 74 20  sumptions about 
16410 54 6f 6b 65 6e 2e 64 79 6e 0a 2a 2a 20 61 6e 64  Token.dyn.** and
16420 20 54 6f 6b 65 6e 2e 6e 20 77 68 65 6e 20 54 6f   Token.n when To
16430 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a 2f 0a 73 74 72  ken.z==0..*/.str
16440 75 63 74 20 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f  uct Token {.  co
16450 6e 73 74 20 63 68 61 72 20 2a 7a 3b 20 20 20 20  nst char *z;    
16460 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20   /* Text of the 
16470 74 6f 6b 65 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c  token.  Not NULL
16480 2d 74 65 72 6d 69 6e 61 74 65 64 21 20 2a 2f 0a  -terminated! */.
16490 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e    unsigned int n
164a0 3b 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f  ;    /* Number o
164b0 66 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 20  f characters in 
164c0 74 68 69 73 20 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b  this token */.};
164d0 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
164e0 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75  nce of this stru
164f0 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69  cture contains i
16500 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65  nformation neede
16510 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a  d to generate.**
16520 20 63 6f 64 65 20 66 6f 72 20 61 20 53 45 4c 45   code for a SELE
16530 43 54 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  CT that contains
16540 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
16550 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 45  ions..**.** If E
16560 78 70 72 2e 6f 70 3d 3d 54 4b 5f 41 47 47 5f 43  xpr.op==TK_AGG_C
16570 4f 4c 55 4d 4e 20 6f 72 20 54 4b 5f 41 47 47 5f  OLUMN or TK_AGG_
16580 46 55 4e 43 54 49 4f 4e 20 74 68 65 6e 20 45 78  FUNCTION then Ex
16590 70 72 2e 70 41 67 67 49 6e 66 6f 20 69 73 20 61  pr.pAggInfo is a
165a0 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  .** pointer to t
165b0 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20  his structure.  
165c0 54 68 65 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e  The Expr.iColumn
165d0 20 66 69 65 6c 64 20 69 73 20 74 68 65 20 69 6e   field is the in
165e0 64 65 78 20 69 6e 0a 2a 2a 20 41 67 67 49 6e 66  dex in.** AggInf
165f0 6f 2e 61 43 6f 6c 5b 5d 20 6f 72 20 41 67 67 49  o.aCol[] or AggI
16600 6e 66 6f 2e 61 46 75 6e 63 5b 5d 20 6f 66 20 69  nfo.aFunc[] of i
16610 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65  nformation neede
16620 64 20 74 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a  d to generate.**
16630 20 63 6f 64 65 20 66 6f 72 20 74 68 61 74 20 6e   code for that n
16640 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 67 67 49 6e  ode..**.** AggIn
16650 66 6f 2e 70 47 72 6f 75 70 42 79 20 61 6e 64 20  fo.pGroupBy and 
16660 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 2e 70 45  AggInfo.aFunc.pE
16670 78 70 72 20 70 6f 69 6e 74 20 74 6f 20 66 69 65  xpr point to fie
16680 6c 64 73 20 77 69 74 68 69 6e 20 74 68 65 0a 2a  lds within the.*
16690 2a 20 6f 72 69 67 69 6e 61 6c 20 53 65 6c 65 63  * original Selec
166a0 74 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74  t structure that
166b0 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20 53   describes the S
166c0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
166d0 20 20 54 68 65 73 65 0a 2a 2a 20 66 69 65 6c 64    These.** field
166e0 73 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f  s do not need to
166f0 20 62 65 20 66 72 65 65 64 20 77 68 65 6e 20 64   be freed when d
16700 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68 65 20  eallocating the 
16710 41 67 67 49 6e 66 6f 20 73 74 72 75 63 74 75 72  AggInfo structur
16720 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 67 67  e..*/.struct Agg
16730 49 6e 66 6f 20 7b 0a 20 20 75 38 20 64 69 72 65  Info {.  u8 dire
16740 63 74 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20  ctMode;         
16750 20 2f 2a 20 44 69 72 65 63 74 20 72 65 6e 64 65   /* Direct rende
16760 72 69 6e 67 20 6d 6f 64 65 20 6d 65 61 6e 73 20  ring mode means 
16770 74 61 6b 65 20 64 61 74 61 20 64 69 72 65 63 74  take data direct
16780 6c 79 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ly.             
16790 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
167a0 66 72 6f 6d 20 73 6f 75 72 63 65 20 74 61 62 6c  from source tabl
167b0 65 73 20 72 61 74 68 65 72 20 74 68 61 6e 20 66  es rather than f
167c0 72 6f 6d 20 61 63 63 75 6d 75 6c 61 74 6f 72 73  rom accumulators
167d0 20 2a 2f 0a 20 20 75 38 20 75 73 65 53 6f 72 74   */.  u8 useSort
167e0 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20 2f 2a  ingIdx;       /*
167f0 20 49 6e 20 64 69 72 65 63 74 20 6d 6f 64 65 2c   In direct mode,
16800 20 72 65 66 65 72 65 6e 63 65 20 74 68 65 20 73   reference the s
16810 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 72 61 74  orting index rat
16820 68 65 72 0a 20 20 20 20 20 20 20 20 20 20 20 20  her.            
16830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
16840 20 74 68 61 6e 20 74 68 65 20 73 6f 75 72 63 65   than the source
16850 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20   table */.  int 
16860 73 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20  sortingIdx;     
16870 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75      /* Cursor nu
16880 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f 72 74  mber of the sort
16890 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69  ing index */.  i
168a0 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 50 54 61  nt sortingIdxPTa
168b0 62 3b 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72  b;     /* Cursor
168c0 20 6e 75 6d 62 65 72 20 6f 66 20 70 73 65 75 64   number of pseud
168d0 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74  o-table */.  int
168e0 20 6e 53 6f 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b   nSortingColumn;
168f0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
16900 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
16910 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a   sorting index *
16920 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 67 2c 20 6d  /.  int mnReg, m
16930 78 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 52  xReg;       /* R
16940 61 6e 67 65 20 6f 66 20 72 65 67 69 73 74 65 72  ange of register
16950 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20  s allocated for 
16960 61 43 6f 6c 20 61 6e 64 20 61 46 75 6e 63 20 2a  aCol and aFunc *
16970 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47  /.  ExprList *pG
16980 72 6f 75 70 42 79 3b 20 20 20 20 20 2f 2a 20 54  roupBy;     /* T
16990 68 65 20 67 72 6f 75 70 20 62 79 20 63 6c 61 75  he group by clau
169a0 73 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41  se */.  struct A
169b0 67 67 49 6e 66 6f 5f 63 6f 6c 20 7b 20 20 20 20  ggInfo_col {    
169c0 2f 2a 20 46 6f 72 20 65 61 63 68 20 63 6f 6c 75  /* For each colu
169d0 6d 6e 20 75 73 65 64 20 69 6e 20 73 6f 75 72 63  mn used in sourc
169e0 65 20 74 61 62 6c 65 73 20 2a 2f 0a 20 20 20 20  e tables */.    
169f0 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20  Table *pTab;    
16a00 20 20 20 20 20 20 20 20 20 2f 2a 20 53 6f 75 72           /* Sour
16a10 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  ce table */.    
16a20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20  int iTable;     
16a30 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73           /* Curs
16a40 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  or number of the
16a50 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f   source table */
16a60 0a 20 20 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e  .    int iColumn
16a70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
16a80 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 77   Column number w
16a90 69 74 68 69 6e 20 74 68 65 20 73 6f 75 72 63 65  ithin the source
16aa0 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e   table */.    in
16ab0 74 20 69 53 6f 72 74 65 72 43 6f 6c 75 6d 6e 3b  t iSorterColumn;
16ac0 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e         /* Column
16ad0 20 6e 75 6d 62 65 72 20 69 6e 20 74 68 65 20 73   number in the s
16ae0 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a  orting index */.
16af0 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20      int iMem;   
16b00 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
16b10 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20  Memory location 
16b20 74 68 61 74 20 61 63 74 73 20 61 73 20 61 63 63  that acts as acc
16b30 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20  umulator */.    
16b40 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20  Expr *pExpr;    
16b50 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
16b60 6f 72 69 67 69 6e 61 6c 20 65 78 70 72 65 73 73  original express
16b70 69 6f 6e 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c  ion */.  } *aCol
16b80 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b  ;.  int nColumn;
16b90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
16ba0 75 6d 62 65 72 20 6f 66 20 75 73 65 64 20 65 6e  umber of used en
16bb0 74 72 69 65 73 20 69 6e 20 61 43 6f 6c 5b 5d 20  tries in aCol[] 
16bc0 2a 2f 0a 20 20 69 6e 74 20 6e 41 63 63 75 6d 75  */.  int nAccumu
16bd0 6c 61 74 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20  lator;       /* 
16be0 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
16bf0 73 20 74 68 61 74 20 73 68 6f 77 20 74 68 72 6f  s that show thro
16c00 75 67 68 20 74 6f 20 74 68 65 20 6f 75 74 70 75  ugh to the outpu
16c10 74 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
16c20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
16c30 41 64 64 69 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d  Additional colum
16c40 6e 73 20 61 72 65 20 75 73 65 64 20 6f 6e 6c 79  ns are used only
16c50 20 61 73 20 70 61 72 61 6d 65 74 65 72 73 20 74   as parameters t
16c60 6f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  o.              
16c70 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61              ** a
16c80 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
16c90 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 41  ns */.  struct A
16ca0 67 67 49 6e 66 6f 5f 66 75 6e 63 20 7b 20 20 20  ggInfo_func {   
16cb0 2f 2a 20 46 6f 72 20 65 61 63 68 20 61 67 67 72  /* For each aggr
16cc0 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 2a  egate function *
16cd0 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70  /.    Expr *pExp
16ce0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  r;             /
16cf0 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 65 6e 63  * Expression enc
16d00 6f 64 69 6e 67 20 74 68 65 20 66 75 6e 63 74 69  oding the functi
16d10 6f 6e 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65  on */.    FuncDe
16d20 66 20 2a 70 46 75 6e 63 3b 20 20 20 20 20 20 20  f *pFunc;       
16d30 20 20 20 2f 2a 20 54 68 65 20 61 67 67 72 65 67     /* The aggreg
16d40 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70  ate function imp
16d50 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20  lementation */. 
16d60 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20     int iMem;    
16d70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
16d80 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74  emory location t
16d90 68 61 74 20 61 63 74 73 20 61 73 20 61 63 63 75  hat acts as accu
16da0 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 69  mulator */.    i
16db0 6e 74 20 69 44 69 73 74 69 6e 63 74 3b 20 20 20  nt iDistinct;   
16dc0 20 20 20 20 20 20 20 20 2f 2a 20 45 70 68 65 6d          /* Ephem
16dd0 65 72 61 6c 20 74 61 62 6c 65 20 75 73 65 64 20  eral table used 
16de0 74 6f 20 65 6e 66 6f 72 63 65 20 44 49 53 54 49  to enforce DISTI
16df0 4e 43 54 20 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e  NCT */.  } *aFun
16e00 63 3b 0a 20 20 69 6e 74 20 6e 46 75 6e 63 3b 20  c;.  int nFunc; 
16e10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
16e20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65  Number of entrie
16e30 73 20 69 6e 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a  s in aFunc[] */.
16e40 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61  };../*.** The da
16e50 74 61 74 79 70 65 20 79 6e 56 61 72 20 69 73 20  tatype ynVar is 
16e60 61 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  a signed integer
16e70 2c 20 65 69 74 68 65 72 20 31 36 2d 62 69 74 20  , either 16-bit 
16e80 6f 72 20 33 32 2d 62 69 74 2e 0a 2a 2a 20 55 73  or 32-bit..** Us
16e90 75 61 6c 6c 79 20 69 74 20 69 73 20 31 36 2d 62  ually it is 16-b
16ea0 69 74 73 2e 20 20 42 75 74 20 69 66 20 53 51 4c  its.  But if SQL
16eb0 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45  ITE_MAX_VARIABLE
16ec0 5f 4e 55 4d 42 45 52 20 69 73 20 67 72 65 61 74  _NUMBER is great
16ed0 65 72 0a 2a 2a 20 74 68 61 6e 20 33 32 37 36 37  er.** than 32767
16ee0 20 77 65 20 68 61 76 65 20 74 6f 20 6d 61 6b 65   we have to make
16ef0 20 69 74 20 33 32 2d 62 69 74 2e 20 20 31 36 2d   it 32-bit.  16-
16f00 62 69 74 20 69 73 20 70 72 65 66 65 72 72 65 64  bit is preferred
16f10 20 62 65 63 61 75 73 65 0a 2a 2a 20 69 74 20 75   because.** it u
16f20 73 65 73 20 6c 65 73 73 20 6d 65 6d 6f 72 79 20  ses less memory 
16f30 69 6e 20 74 68 65 20 45 78 70 72 20 6f 62 6a 65  in the Expr obje
16f40 63 74 2c 20 77 68 69 63 68 20 69 73 20 61 20 62  ct, which is a b
16f50 69 67 20 6d 65 6d 6f 72 79 20 75 73 65 72 0a 2a  ig memory user.*
16f60 2a 20 69 6e 20 73 79 73 74 65 6d 73 20 77 69 74  * in systems wit
16f70 68 20 6c 6f 74 73 20 6f 66 20 70 72 65 70 61 72  h lots of prepar
16f80 65 64 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 20  ed statements.  
16f90 41 6e 64 20 66 65 77 20 61 70 70 6c 69 63 61 74  And few applicat
16fa0 69 6f 6e 73 0a 2a 2a 20 6e 65 65 64 20 6d 6f 72  ions.** need mor
16fb0 65 20 74 68 61 6e 20 61 62 6f 75 74 20 31 30 20  e than about 10 
16fc0 6f 72 20 32 30 20 76 61 72 69 61 62 6c 65 73 2e  or 20 variables.
16fd0 20 20 42 75 74 20 73 6f 6d 65 20 65 78 74 72 65    But some extre
16fe0 6d 65 20 75 73 65 72 73 20 77 61 6e 74 0a 2a 2a  me users want.**
16ff0 20 74 6f 20 68 61 76 65 20 70 72 65 70 61 72 65   to have prepare
17000 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74  d statements wit
17010 68 20 6f 76 65 72 20 33 32 37 36 37 20 76 61 72  h over 32767 var
17020 69 61 62 6c 65 73 2c 20 61 6e 64 20 66 6f 72 20  iables, and for 
17030 74 68 65 6d 0a 2a 2a 20 74 68 65 20 6f 70 74 69  them.** the opti
17040 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20  on is available 
17050 28 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  (at compile-time
17060 29 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45  )..*/.#if SQLITE
17070 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55  _MAX_VARIABLE_NU
17080 4d 42 45 52 3c 3d 33 32 37 36 37 0a 74 79 70 65  MBER<=32767.type
17090 64 65 66 20 69 31 36 20 79 6e 56 61 72 3b 0a 23  def i16 ynVar;.#
170a0 65 6c 73 65 0a 74 79 70 65 64 65 66 20 69 6e 74  else.typedef int
170b0 20 79 6e 56 61 72 3b 0a 23 65 6e 64 69 66 0a 0a   ynVar;.#endif..
170c0 2f 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f 64 65 20  /*.** Each node 
170d0 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  of an expression
170e0 20 69 6e 20 74 68 65 20 70 61 72 73 65 20 74 72   in the parse tr
170f0 65 65 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  ee is an instanc
17100 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72  e.** of this str
17110 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78  ucture..**.** Ex
17120 70 72 2e 6f 70 20 69 73 20 74 68 65 20 6f 70 63  pr.op is the opc
17130 6f 64 65 2e 20 54 68 65 20 69 6e 74 65 67 65 72  ode. The integer
17140 20 70 61 72 73 65 72 20 74 6f 6b 65 6e 20 63 6f   parser token co
17150 64 65 73 20 61 72 65 20 72 65 75 73 65 64 0a 2a  des are reused.*
17160 2a 20 61 73 20 6f 70 63 6f 64 65 73 20 68 65 72  * as opcodes her
17170 65 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  e. For example, 
17180 74 68 65 20 70 61 72 73 65 72 20 64 65 66 69 6e  the parser defin
17190 65 73 20 54 4b 5f 47 45 20 74 6f 20 62 65 20 61  es TK_GE to be a
171a0 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63 6f 64  n integer.** cod
171b0 65 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74  e representing t
171c0 68 65 20 22 3e 3d 22 20 6f 70 65 72 61 74 6f 72  he ">=" operator
171d0 2e 20 54 68 69 73 20 73 61 6d 65 20 69 6e 74 65  . This same inte
171e0 67 65 72 20 63 6f 64 65 20 69 73 20 72 65 75 73  ger code is reus
171f0 65 64 0a 2a 2a 20 74 6f 20 72 65 70 72 65 73 65  ed.** to represe
17200 6e 74 20 74 68 65 20 67 72 65 61 74 65 72 2d 74  nt the greater-t
17210 68 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d 74 6f 20  han-or-equal-to 
17220 6f 70 65 72 61 74 6f 72 20 69 6e 20 74 68 65 20  operator in the 
17230 65 78 70 72 65 73 73 69 6f 6e 0a 2a 2a 20 74 72  expression.** tr
17240 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ee..**.** If the
17250 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
17260 6e 20 53 51 4c 20 6c 69 74 65 72 61 6c 20 28 54  n SQL literal (T
17270 4b 5f 49 4e 54 45 47 45 52 2c 20 54 4b 5f 46 4c  K_INTEGER, TK_FL
17280 4f 41 54 2c 20 54 4b 5f 42 4c 4f 42 2c 0a 2a 2a  OAT, TK_BLOB,.**
17290 20 6f 72 20 54 4b 5f 53 54 52 49 4e 47 29 2c 20   or TK_STRING), 
172a0 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20  then Expr.token 
172b0 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 74 65 78  contains the tex
172c0 74 20 6f 66 20 74 68 65 20 53 51 4c 20 6c 69 74  t of the SQL lit
172d0 65 72 61 6c 2e 20 49 66 0a 2a 2a 20 74 68 65 20  eral. If.** the 
172e0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20  expression is a 
172f0 76 61 72 69 61 62 6c 65 20 28 54 4b 5f 56 41 52  variable (TK_VAR
17300 49 41 42 4c 45 29 2c 20 74 68 65 6e 20 45 78 70  IABLE), then Exp
17310 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73  r.token contains
17320 20 74 68 65 0a 2a 2a 20 76 61 72 69 61 62 6c 65   the.** variable
17330 20 6e 61 6d 65 2e 20 46 69 6e 61 6c 6c 79 2c 20   name. Finally, 
17340 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  if the expressio
17350 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63  n is an SQL func
17360 74 69 6f 6e 20 28 54 4b 5f 46 55 4e 43 54 49 4f  tion (TK_FUNCTIO
17370 4e 29 2c 0a 2a 2a 20 74 68 65 6e 20 45 78 70 72  N),.** then Expr
17380 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20  .token contains 
17390 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
173a0 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  function..**.** 
173b0 45 78 70 72 2e 70 52 69 67 68 74 20 61 6e 64 20  Expr.pRight and 
173c0 45 78 70 72 2e 70 4c 65 66 74 20 61 72 65 20 74  Expr.pLeft are t
173d0 68 65 20 6c 65 66 74 20 61 6e 64 20 72 69 67 68  he left and righ
173e0 74 20 73 75 62 65 78 70 72 65 73 73 69 6f 6e 73  t subexpressions
173f0 20 6f 66 20 61 0a 2a 2a 20 62 69 6e 61 72 79 20   of a.** binary 
17400 6f 70 65 72 61 74 6f 72 2e 20 45 69 74 68 65 72  operator. Either
17410 20 6f 72 20 62 6f 74 68 20 6d 61 79 20 62 65 20   or both may be 
17420 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72  NULL..**.** Expr
17430 2e 78 2e 70 4c 69 73 74 20 69 73 20 61 20 6c 69  .x.pList is a li
17440 73 74 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  st of arguments 
17450 69 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  if the expressio
17460 6e 20 69 73 20 61 6e 20 53 51 4c 20 66 75 6e 63  n is an SQL func
17470 74 69 6f 6e 2c 0a 2a 2a 20 61 20 43 41 53 45 20  tion,.** a CASE 
17480 65 78 70 72 65 73 73 69 6f 6e 20 6f 72 20 61 6e  expression or an
17490 20 49 4e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f   IN expression o
174a0 66 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73  f the form "<lhs
174b0 3e 20 49 4e 20 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e  > IN (<y>, <z>..
174c0 2e 29 22 2e 0a 2a 2a 20 45 78 70 72 2e 78 2e 70  .)"..** Expr.x.p
174d0 53 65 6c 65 63 74 20 69 73 20 75 73 65 64 20 69  Select is used i
174e0 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
174f0 20 69 73 20 61 20 73 75 62 2d 73 65 6c 65 63 74   is a sub-select
17500 20 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f   or an expressio
17510 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 66 6f 72 6d  n of.** the form
17520 20 22 3c 6c 68 73 3e 20 49 4e 20 28 53 45 4c 45   "<lhs> IN (SELE
17530 43 54 20 2e 2e 2e 29 22 2e 20 49 66 20 74 68 65  CT ...)". If the
17540 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 62 69   EP_xIsSelect bi
17550 74 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 0a  t is set in the.
17560 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61  ** Expr.flags ma
17570 73 6b 2c 20 74 68 65 6e 20 45 78 70 72 2e 78 2e  sk, then Expr.x.
17580 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64  pSelect is valid
17590 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 45 78 70  . Otherwise, Exp
175a0 72 2e 78 2e 70 4c 69 73 74 20 69 73 0a 2a 2a 20  r.x.pList is.** 
175b0 76 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20  valid..**.** An 
175c0 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68  expression of th
175d0 65 20 66 6f 72 6d 20 49 44 20 6f 72 20 49 44 2e  e form ID or ID.
175e0 49 44 20 72 65 66 65 72 73 20 74 6f 20 61 20 63  ID refers to a c
175f0 6f 6c 75 6d 6e 20 69 6e 20 61 20 74 61 62 6c 65  olumn in a table
17600 2e 0a 2a 2a 20 46 6f 72 20 73 75 63 68 20 65 78  ..** For such ex
17610 70 72 65 73 73 69 6f 6e 73 2c 20 45 78 70 72 2e  pressions, Expr.
17620 6f 70 20 69 73 20 73 65 74 20 74 6f 20 54 4b 5f  op is set to TK_
17630 43 4f 4c 55 4d 4e 20 61 6e 64 20 45 78 70 72 2e  COLUMN and Expr.
17640 69 54 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65  iTable is.** the
17650 20 69 6e 74 65 67 65 72 20 63 75 72 73 6f 72 20   integer cursor 
17660 6e 75 6d 62 65 72 20 6f 66 20 61 20 56 44 42 45  number of a VDBE
17670 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67   cursor pointing
17680 20 74 6f 20 74 68 61 74 20 74 61 62 6c 65 20 61   to that table a
17690 6e 64 0a 2a 2a 20 45 78 70 72 2e 69 43 6f 6c 75  nd.** Expr.iColu
176a0 6d 6e 20 69 73 20 74 68 65 20 63 6f 6c 75 6d 6e  mn is the column
176b0 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20   number for the 
176c0 73 70 65 63 69 66 69 63 20 63 6f 6c 75 6d 6e 2e  specific column.
176d0 20 20 49 66 20 74 68 65 0a 2a 2a 20 65 78 70 72    If the.** expr
176e0 65 73 73 69 6f 6e 20 69 73 20 75 73 65 64 20 61  ession is used a
176f0 73 20 61 20 72 65 73 75 6c 74 20 69 6e 20 61 6e  s a result in an
17700 20 61 67 67 72 65 67 61 74 65 20 53 45 4c 45 43   aggregate SELEC
17710 54 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76  T, then the.** v
17720 61 6c 75 65 20 69 73 20 61 6c 73 6f 20 73 74 6f  alue is also sto
17730 72 65 64 20 69 6e 20 74 68 65 20 45 78 70 72 2e  red in the Expr.
17740 69 41 67 67 20 63 6f 6c 75 6d 6e 20 69 6e 20 74  iAgg column in t
17750 68 65 20 61 67 67 72 65 67 61 74 65 20 73 6f 20  he aggregate so 
17760 74 68 61 74 0a 2a 2a 20 69 74 20 63 61 6e 20 62  that.** it can b
17770 65 20 61 63 63 65 73 73 65 64 20 61 66 74 65 72  e accessed after
17780 20 61 6c 6c 20 61 67 67 72 65 67 61 74 65 73 20   all aggregates 
17790 61 72 65 20 63 6f 6d 70 75 74 65 64 2e 0a 2a 2a  are computed..**
177a0 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65  .** If the expre
177b0 73 73 69 6f 6e 20 69 73 20 61 6e 20 75 6e 62 6f  ssion is an unbo
177c0 75 6e 64 20 76 61 72 69 61 62 6c 65 20 6d 61 72  und variable mar
177d0 6b 65 72 20 28 61 20 71 75 65 73 74 69 6f 6e 20  ker (a question 
177e0 6d 61 72 6b 0a 2a 2a 20 63 68 61 72 61 63 74 65  mark.** characte
177f0 72 20 27 3f 27 20 69 6e 20 74 68 65 20 6f 72 69  r '?' in the ori
17800 67 69 6e 61 6c 20 53 51 4c 29 20 74 68 65 6e 20  ginal SQL) then 
17810 74 68 65 20 45 78 70 72 2e 69 54 61 62 6c 65 20  the Expr.iTable 
17820 68 6f 6c 64 73 20 74 68 65 20 69 6e 64 65 78 0a  holds the index.
17830 2a 2a 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68  ** number for th
17840 61 74 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 0a  at variable..**.
17850 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73  ** If the expres
17860 73 69 6f 6e 20 69 73 20 61 20 73 75 62 71 75 65  sion is a subque
17870 72 79 20 74 68 65 6e 20 45 78 70 72 2e 69 43 6f  ry then Expr.iCo
17880 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 6e 20 69 6e  lumn holds an in
17890 74 65 67 65 72 0a 2a 2a 20 72 65 67 69 73 74 65  teger.** registe
178a0 72 20 6e 75 6d 62 65 72 20 63 6f 6e 74 61 69 6e  r number contain
178b0 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74 20 6f  ing the result o
178c0 66 20 74 68 65 20 73 75 62 71 75 65 72 79 2e 20  f the subquery. 
178d0 20 49 66 20 74 68 65 0a 2a 2a 20 73 75 62 71 75   If the.** subqu
178e0 65 72 79 20 67 69 76 65 73 20 61 20 63 6f 6e 73  ery gives a cons
178f0 74 61 6e 74 20 72 65 73 75 6c 74 2c 20 74 68 65  tant result, the
17900 6e 20 69 54 61 62 6c 65 20 69 73 20 2d 31 2e 20  n iTable is -1. 
17910 20 49 66 20 74 68 65 20 73 75 62 71 75 65 72 79   If the subquery
17920 0a 2a 2a 20 67 69 76 65 73 20 61 20 64 69 66 66  .** gives a diff
17930 65 72 65 6e 74 20 61 6e 73 77 65 72 20 61 74 20  erent answer at 
17940 64 69 66 66 65 72 65 6e 74 20 74 69 6d 65 73 20  different times 
17950 64 75 72 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  during statement
17960 20 70 72 6f 63 65 73 73 69 6e 67 0a 2a 2a 20 74   processing.** t
17970 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20 74 68  hen iTable is th
17980 65 20 61 64 64 72 65 73 73 20 6f 66 20 61 20 73  e address of a s
17990 75 62 72 6f 75 74 69 6e 65 20 74 68 61 74 20 63  ubroutine that c
179a0 6f 6d 70 75 74 65 73 20 74 68 65 20 73 75 62 71  omputes the subq
179b0 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  uery..**.** If t
179c0 68 65 20 45 78 70 72 20 69 73 20 6f 66 20 74 79  he Expr is of ty
179d0 70 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 61 6e  pe OP_Column, an
179e0 64 20 74 68 65 20 74 61 62 6c 65 20 69 74 20 69  d the table it i
179f0 73 20 73 65 6c 65 63 74 69 6e 67 20 66 72 6f 6d  s selecting from
17a00 0a 2a 2a 20 69 73 20 61 20 64 69 73 6b 20 74 61  .** is a disk ta
17a10 62 6c 65 20 6f 72 20 74 68 65 20 22 6f 6c 64 2e  ble or the "old.
17a20 2a 22 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2c  *" pseudo-table,
17a30 20 74 68 65 6e 20 70 54 61 62 20 70 6f 69 6e 74   then pTab point
17a40 73 20 74 6f 20 74 68 65 0a 2a 2a 20 63 6f 72 72  s to the.** corr
17a50 65 73 70 6f 6e 64 69 6e 67 20 74 61 62 6c 65 20  esponding table 
17a60 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a  definition..**.*
17a70 2a 20 41 4c 4c 4f 43 41 54 49 4f 4e 20 4e 4f 54  * ALLOCATION NOT
17a80 45 53 3a 0a 2a 2a 0a 2a 2a 20 45 78 70 72 20 6f  ES:.**.** Expr o
17a90 62 6a 65 63 74 73 20 63 61 6e 20 75 73 65 20 61  bjects can use a
17aa0 20 6c 6f 74 20 6f 66 20 6d 65 6d 6f 72 79 20 73   lot of memory s
17ab0 70 61 63 65 20 69 6e 20 64 61 74 61 62 61 73 65  pace in database
17ac0 20 73 63 68 65 6d 61 2e 20 20 54 6f 0a 2a 2a 20   schema.  To.** 
17ad0 68 65 6c 70 20 72 65 64 75 63 65 20 6d 65 6d 6f  help reduce memo
17ae0 72 79 20 72 65 71 75 69 72 65 6d 65 6e 74 73 2c  ry requirements,
17af0 20 73 6f 6d 65 74 69 6d 65 73 20 61 6e 20 45 78   sometimes an Ex
17b00 70 72 20 6f 62 6a 65 63 74 20 77 69 6c 6c 20 62  pr object will b
17b10 65 0a 2a 2a 20 74 72 75 6e 63 61 74 65 64 2e 20  e.** truncated. 
17b20 20 41 6e 64 20 74 6f 20 72 65 64 75 63 65 20 74   And to reduce t
17b30 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d  he number of mem
17b40 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c  ory allocations,
17b50 20 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20 74 77   sometimes.** tw
17b60 6f 20 6f 72 20 6d 6f 72 65 20 45 78 70 72 20 6f  o or more Expr o
17b70 62 6a 65 63 74 73 20 77 69 6c 6c 20 62 65 20 73  bjects will be s
17b80 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c  tored in a singl
17b90 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
17ba0 69 6f 6e 2c 0a 2a 2a 20 74 6f 67 65 74 68 65 72  ion,.** together
17bb0 20 77 69 74 68 20 45 78 70 72 2e 7a 54 6f 6b 65   with Expr.zToke
17bc0 6e 20 73 74 72 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a  n strings..**.**
17bd0 20 49 66 20 74 68 65 20 45 50 5f 52 65 64 75 63   If the EP_Reduc
17be0 65 64 20 61 6e 64 20 45 50 5f 54 6f 6b 65 6e 4f  ed and EP_TokenO
17bf0 6e 6c 79 20 66 6c 61 67 73 20 61 72 65 20 73 65  nly flags are se
17c00 74 20 77 68 65 6e 0a 2a 2a 20 61 6e 20 45 78 70  t when.** an Exp
17c10 72 20 6f 62 6a 65 63 74 20 69 73 20 74 72 75 6e  r object is trun
17c20 63 61 74 65 64 2e 20 20 57 68 65 6e 20 45 50 5f  cated.  When EP_
17c30 52 65 64 75 63 65 64 20 69 73 20 73 65 74 2c 20  Reduced is set, 
17c40 74 68 65 6e 20 61 6c 6c 0a 2a 2a 20 74 68 65 20  then all.** the 
17c50 63 68 69 6c 64 20 45 78 70 72 20 6f 62 6a 65 63  child Expr objec
17c60 74 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e 70  ts in the Expr.p
17c70 4c 65 66 74 20 61 6e 64 20 45 78 70 72 2e 70 52  Left and Expr.pR
17c80 69 67 68 74 20 73 75 62 74 72 65 65 73 0a 2a 2a  ight subtrees.**
17c90 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 77   are contained w
17ca0 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20 6d  ithin the same m
17cb0 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
17cc0 2e 20 20 4e 6f 74 65 2c 20 68 6f 77 65 76 65 72  .  Note, however
17cd0 2c 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 73 75  , that.** the su
17ce0 62 74 72 65 65 73 20 69 6e 20 45 78 70 72 2e 78  btrees in Expr.x
17cf0 2e 70 4c 69 73 74 20 6f 72 20 45 78 70 72 2e 78  .pList or Expr.x
17d00 2e 70 53 65 6c 65 63 74 20 61 72 65 20 61 6c 77  .pSelect are alw
17d10 61 79 73 20 73 65 70 61 72 61 74 65 6c 79 0a 2a  ays separately.*
17d20 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 72 65 67  * allocated, reg
17d30 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68  ardless of wheth
17d40 65 72 20 6f 72 20 6e 6f 74 20 45 50 5f 52 65 64  er or not EP_Red
17d50 75 63 65 64 20 69 73 20 73 65 74 2e 0a 2a 2f 0a  uced is set..*/.
17d60 73 74 72 75 63 74 20 45 78 70 72 20 7b 0a 20 20  struct Expr {.  
17d70 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20  u8 op;          
17d80 20 20 20 20 20 20 20 2f 2a 20 4f 70 65 72 61 74         /* Operat
17d90 69 6f 6e 20 70 65 72 66 6f 72 6d 65 64 20 62 79  ion performed by
17da0 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 20 20   this node */.  
17db0 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20  char affinity;  
17dc0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66         /* The af
17dd0 66 69 6e 69 74 79 20 6f 66 20 74 68 65 20 63 6f  finity of the co
17de0 6c 75 6d 6e 20 6f 72 20 30 20 69 66 20 6e 6f 74  lumn or 0 if not
17df0 20 61 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75   a column */.  u
17e00 33 32 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20  32 flags;       
17e10 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73        /* Various
17e20 20 66 6c 61 67 73 2e 20 20 45 50 5f 2a 20 53 65   flags.  EP_* Se
17e30 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 75 6e 69  e below */.  uni
17e40 6f 6e 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a  on {.    char *z
17e50 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20 20  Token;          
17e60 2f 2a 20 54 6f 6b 65 6e 20 76 61 6c 75 65 2e 20  /* Token value. 
17e70 5a 65 72 6f 20 74 65 72 6d 69 6e 61 74 65 64 20  Zero terminated 
17e80 61 6e 64 20 64 65 71 75 6f 74 65 64 20 2a 2f 0a  and dequoted */.
17e90 20 20 20 20 69 6e 74 20 69 56 61 6c 75 65 3b 20      int iValue; 
17ea0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f             /* No
17eb0 6e 2d 6e 65 67 61 74 69 76 65 20 69 6e 74 65 67  n-negative integ
17ec0 65 72 20 76 61 6c 75 65 20 69 66 20 45 50 5f 49  er value if EP_I
17ed0 6e 74 56 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 75  ntValue */.  } u
17ee0 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45  ;..  /* If the E
17ef0 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67  P_TokenOnly flag
17f00 20 69 73 20 73 65 74 20 69 6e 20 74 68 65 20 45   is set in the E
17f10 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20  xpr.flags mask, 
17f20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61  then no.  ** spa
17f30 63 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20  ce is allocated 
17f40 66 6f 72 20 74 68 65 20 66 69 65 6c 64 73 20 62  for the fields b
17f50 65 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e 74 2e  elow this point.
17f60 20 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a 20   An attempt to. 
17f70 20 2a 2a 20 61 63 63 65 73 73 20 74 68 65 6d 20   ** access them 
17f80 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61  will result in a
17f90 20 73 65 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c   segfault or mal
17fa0 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a  function..  ****
17fb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17fc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17fd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17fe0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17ff0 2a 2f 0a 0a 20 20 45 78 70 72 20 2a 70 4c 65 66  */..  Expr *pLef
18000 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
18010 4c 65 66 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a  Left subnode */.
18020 20 20 45 78 70 72 20 2a 70 52 69 67 68 74 3b 20    Expr *pRight; 
18030 20 20 20 20 20 20 20 20 20 2f 2a 20 52 69 67 68           /* Righ
18040 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 75  t subnode */.  u
18050 6e 69 6f 6e 20 7b 0a 20 20 20 20 45 78 70 72 4c  nion {.    ExprL
18060 69 73 74 20 2a 70 4c 69 73 74 3b 20 20 20 20 20  ist *pList;     
18070 2f 2a 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53  /* op = IN, EXIS
18080 54 53 2c 20 53 45 4c 45 43 54 2c 20 43 41 53 45  TS, SELECT, CASE
18090 2c 20 46 55 4e 43 54 49 4f 4e 2c 20 42 45 54 57  , FUNCTION, BETW
180a0 45 45 4e 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63  EEN */.    Selec
180b0 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20  t *pSelect;     
180c0 2f 2a 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20  /* EP_xIsSelect 
180d0 61 6e 64 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49  and op = IN, EXI
180e0 53 54 53 2c 20 53 45 4c 45 43 54 20 2a 2f 0a 20  STS, SELECT */. 
180f0 20 7d 20 78 3b 0a 0a 20 20 2f 2a 20 49 66 20 74   } x;..  /* If t
18100 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c  he EP_Reduced fl
18110 61 67 20 69 73 20 73 65 74 20 69 6e 20 74 68 65  ag is set in the
18120 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b   Expr.flags mask
18130 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73  , then no.  ** s
18140 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74 65  pace is allocate
18150 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64 73  d for the fields
18160 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e   below this poin
18170 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74 6f  t. An attempt to
18180 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68 65  .  ** access the
18190 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e  m will result in
181a0 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20 6d   a segfault or m
181b0 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a  alfunction..  **
181c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
181d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
181e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
181f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18200 2a 2a 2a 2f 0a 0a 23 69 66 20 53 51 4c 49 54 45  ***/..#if SQLITE
18210 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e  _MAX_EXPR_DEPTH>
18220 30 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b  0.  int nHeight;
18230 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65             /* He
18240 69 67 68 74 20 6f 66 20 74 68 65 20 74 72 65 65  ight of the tree
18250 20 68 65 61 64 65 64 20 62 79 20 74 68 69 73 20   headed by this 
18260 6e 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  node */.#endif. 
18270 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20   int iTable;    
18280 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f          /* TK_CO
18290 4c 55 4d 4e 3a 20 63 75 72 73 6f 72 20 6e 75 6d  LUMN: cursor num
182a0 62 65 72 20 6f 66 20 74 61 62 6c 65 20 68 6f 6c  ber of table hol
182b0 64 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20 20 20 20  ding column.    
182c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182d0 20 20 20 20 20 2a 2a 20 54 4b 5f 52 45 47 49 53       ** TK_REGIS
182e0 54 45 52 3a 20 72 65 67 69 73 74 65 72 20 6e 75  TER: register nu
182f0 6d 62 65 72 0a 20 20 20 20 20 20 20 20 20 20 20  mber.           
18300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
18310 20 54 4b 5f 54 52 49 47 47 45 52 3a 20 31 20 2d   TK_TRIGGER: 1 -
18320 3e 20 6e 65 77 2c 20 30 20 2d 3e 20 6f 6c 64 0a  > new, 0 -> old.
18330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18340 20 20 20 20 20 20 20 20 20 2a 2a 20 45 50 5f 55           ** EP_U
18350 6e 6c 69 6b 65 6c 79 3a 20 20 31 33 34 32 31 37  nlikely:  134217
18360 37 32 38 20 74 69 6d 65 73 20 6c 69 6b 65 6c 69  728 times likeli
18370 68 6f 6f 64 0a 20 20 20 20 20 20 20 20 20 20 20  hood.           
18380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
18390 20 54 4b 5f 53 45 4c 45 43 54 3a 20 31 73 74 20   TK_SELECT: 1st 
183a0 72 65 67 69 73 74 65 72 20 6f 66 20 72 65 73 75  register of resu
183b0 6c 74 20 76 65 63 74 6f 72 20 2a 2f 0a 20 20 79  lt vector */.  y
183c0 6e 56 61 72 20 69 43 6f 6c 75 6d 6e 3b 20 20 20  nVar iColumn;   
183d0 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55        /* TK_COLU
183e0 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78  MN: column index
183f0 2e 20 20 2d 31 20 66 6f 72 20 72 6f 77 69 64 2e  .  -1 for rowid.
18400 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18410 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
18420 56 41 52 49 41 42 4c 45 3a 20 76 61 72 69 61 62  VARIABLE: variab
18430 6c 65 20 6e 75 6d 62 65 72 20 28 61 6c 77 61 79  le number (alway
18440 73 20 3e 3d 20 31 29 2e 0a 20 20 20 20 20 20 20  s >= 1)..       
18450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18460 20 20 2a 2a 20 54 4b 5f 53 45 4c 45 43 54 5f 43    ** TK_SELECT_C
18470 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 6f 66  OLUMN: column of
18480 20 74 68 65 20 72 65 73 75 6c 74 20 76 65 63 74   the result vect
18490 6f 72 20 2a 2f 0a 20 20 69 31 36 20 69 41 67 67  or */.  i16 iAgg
184a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
184b0 2a 20 57 68 69 63 68 20 65 6e 74 72 79 20 69 6e  * Which entry in
184c0 20 70 41 67 67 49 6e 66 6f 2d 3e 61 43 6f 6c 5b   pAggInfo->aCol[
184d0 5d 20 6f 72 20 2d 3e 61 46 75 6e 63 5b 5d 20 2a  ] or ->aFunc[] *
184e0 2f 0a 20 20 69 31 36 20 69 52 69 67 68 74 4a 6f  /.  i16 iRightJo
184f0 69 6e 54 61 62 6c 65 3b 20 20 20 2f 2a 20 49 66  inTable;   /* If
18500 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c 20 74 68   EP_FromJoin, th
18510 65 20 72 69 67 68 74 20 74 61 62 6c 65 20 6f 66  e right table of
18520 20 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75   the join */.  u
18530 38 20 6f 70 32 3b 20 20 20 20 20 20 20 20 20 20  8 op2;          
18540 20 20 20 20 20 20 2f 2a 20 54 4b 5f 52 45 47 49        /* TK_REGI
18550 53 54 45 52 3a 20 6f 72 69 67 69 6e 61 6c 20 76  STER: original v
18560 61 6c 75 65 20 6f 66 20 45 78 70 72 2e 6f 70 0a  alue of Expr.op.
18570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18580 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 43           ** TK_C
18590 4f 4c 55 4d 4e 3a 20 74 68 65 20 76 61 6c 75 65  OLUMN: the value
185a0 20 6f 66 20 70 35 20 66 6f 72 20 4f 50 5f 43 6f   of p5 for OP_Co
185b0 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20  lumn.           
185c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
185d0 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e   TK_AGG_FUNCTION
185e0 3a 20 6e 65 73 74 69 6e 67 20 64 65 70 74 68 20  : nesting depth 
185f0 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41  */.  AggInfo *pA
18600 67 67 49 6e 66 6f 3b 20 20 20 20 20 2f 2a 20 55  ggInfo;     /* U
18610 73 65 64 20 62 79 20 54 4b 5f 41 47 47 5f 43 4f  sed by TK_AGG_CO
18620 4c 55 4d 4e 20 61 6e 64 20 54 4b 5f 41 47 47 5f  LUMN and TK_AGG_
18630 46 55 4e 43 54 49 4f 4e 20 2a 2f 0a 20 20 54 61  FUNCTION */.  Ta
18640 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20  ble *pTab;      
18650 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 66 6f       /* Table fo
18660 72 20 54 4b 5f 43 4f 4c 55 4d 4e 20 65 78 70 72  r TK_COLUMN expr
18670 65 73 73 69 6f 6e 73 2e 20 20 43 61 6e 20 62 65  essions.  Can be
18680 20 4e 55 4c 4c 0a 20 20 20 20 20 20 20 20 20 20   NULL.          
18690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
186a0 2a 20 66 6f 72 20 61 20 63 6f 6c 75 6d 6e 20 6f  * for a column o
186b0 66 20 61 6e 20 69 6e 64 65 78 20 6f 6e 20 61 6e  f an index on an
186c0 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 7d   expression */.}
186d0 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  ;../*.** The fol
186e0 6c 6f 77 69 6e 67 20 61 72 65 20 74 68 65 20 6d  lowing are the m
186f0 65 61 6e 69 6e 67 73 20 6f 66 20 62 69 74 73 20  eanings of bits 
18700 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67  in the Expr.flag
18710 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66  s field..*/.#def
18720 69 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 20  ine EP_FromJoin 
18730 20 30 78 30 30 30 30 30 31 20 2f 2a 20 4f 72 69   0x000001 /* Ori
18740 67 69 6e 61 74 65 73 20 69 6e 20 4f 4e 2f 55 53  ginates in ON/US
18750 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 6f 75  ING clause of ou
18760 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66  ter join */.#def
18770 69 6e 65 20 45 50 5f 41 67 67 20 20 20 20 20 20  ine EP_Agg      
18780 20 30 78 30 30 30 30 30 32 20 2f 2a 20 43 6f 6e   0x000002 /* Con
18790 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72  tains one or mor
187a0 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  e aggregate func
187b0 74 69 6f 6e 73 20 2a 2f 0a 20 20 20 20 20 20 20  tions */.       
187c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 78             /* 0x
187d0 30 30 30 30 30 34 20 2f 2f 20 61 76 61 69 6c 61  000004 // availa
187e0 62 6c 65 20 66 6f 72 20 75 73 65 20 2a 2f 0a 20  ble for use */. 
187f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18800 20 2f 2a 20 30 78 30 30 30 30 30 38 20 2f 2f 20   /* 0x000008 // 
18810 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 75 73  available for us
18820 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  e */.#define EP_
18830 44 69 73 74 69 6e 63 74 20 20 30 78 30 30 30 30  Distinct  0x0000
18840 31 30 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20  10 /* Aggregate 
18850 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 44 49  function with DI
18860 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 2a  STINCT keyword *
18870 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 56 61 72  /.#define EP_Var
18880 53 65 6c 65 63 74 20 30 78 30 30 30 30 32 30 20  Select 0x000020 
18890 2f 2a 20 70 53 65 6c 65 63 74 20 69 73 20 63 6f  /* pSelect is co
188a0 72 72 65 6c 61 74 65 64 2c 20 6e 6f 74 20 63 6f  rrelated, not co
188b0 6e 73 74 61 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  nstant */.#defin
188c0 65 20 45 50 5f 44 62 6c 51 75 6f 74 65 64 20 30  e EP_DblQuoted 0
188d0 78 30 30 30 30 34 30 20 2f 2a 20 74 6f 6b 65 6e  x000040 /* token
188e0 2e 7a 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c  .z was originall
188f0 79 20 69 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64  y in "..." */.#d
18900 65 66 69 6e 65 20 45 50 5f 49 6e 66 69 78 46 75  efine EP_InfixFu
18910 6e 63 20 30 78 30 30 30 30 38 30 20 2f 2a 20 54  nc 0x000080 /* T
18920 72 75 65 20 66 6f 72 20 61 6e 20 69 6e 66 69 78  rue for an infix
18930 20 66 75 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c   function: LIKE,
18940 20 47 4c 4f 42 2c 20 65 74 63 20 2a 2f 0a 23 64   GLOB, etc */.#d
18950 65 66 69 6e 65 20 45 50 5f 43 6f 6c 6c 61 74 65  efine EP_Collate
18960 20 20 20 30 78 30 30 30 31 30 30 20 2f 2a 20 54     0x000100 /* T
18970 72 65 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54  ree contains a T
18980 4b 5f 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74  K_COLLATE operat
18990 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  or */.#define EP
189a0 5f 47 65 6e 65 72 69 63 20 20 20 30 78 30 30 30  _Generic   0x000
189b0 32 30 30 20 2f 2a 20 49 67 6e 6f 72 65 20 43 4f  200 /* Ignore CO
189c0 4c 4c 41 54 45 20 6f 72 20 61 66 66 69 6e 69 74  LLATE or affinit
189d0 79 20 6f 6e 20 74 68 69 73 20 74 72 65 65 20 2a  y on this tree *
189e0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 74  /.#define EP_Int
189f0 56 61 6c 75 65 20 20 30 78 30 30 30 34 30 30 20  Value  0x000400 
18a00 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65  /* Integer value
18a10 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 75 2e   contained in u.
18a20 69 56 61 6c 75 65 20 2a 2f 0a 23 64 65 66 69 6e  iValue */.#defin
18a30 65 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 30  e EP_xIsSelect 0
18a40 78 30 30 30 38 30 30 20 2f 2a 20 78 2e 70 53 65  x000800 /* x.pSe
18a50 6c 65 63 74 20 69 73 20 76 61 6c 69 64 20 28 6f  lect is valid (o
18a60 74 68 65 72 77 69 73 65 20 78 2e 70 4c 69 73 74  therwise x.pList
18a70 20 69 73 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20   is) */.#define 
18a80 45 50 5f 53 6b 69 70 20 20 20 20 20 20 30 78 30  EP_Skip      0x0
18a90 30 31 30 30 30 20 2f 2a 20 43 4f 4c 4c 41 54 45  01000 /* COLLATE
18aa0 2c 20 41 53 2c 20 6f 72 20 55 4e 4c 49 4b 45 4c  , AS, or UNLIKEL
18ab0 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  Y */.#define EP_
18ac0 52 65 64 75 63 65 64 20 20 20 30 78 30 30 32 30  Reduced   0x0020
18ad0 30 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63  00 /* Expr struc
18ae0 74 20 45 58 50 52 5f 52 45 44 55 43 45 44 53 49  t EXPR_REDUCEDSI
18af0 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f  ZE bytes only */
18b00 0a 23 64 65 66 69 6e 65 20 45 50 5f 54 6f 6b 65  .#define EP_Toke
18b10 6e 4f 6e 6c 79 20 30 78 30 30 34 30 30 30 20 2f  nOnly 0x004000 /
18b20 2a 20 45 78 70 72 20 73 74 72 75 63 74 20 45 58  * Expr struct EX
18b30 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45  PR_TOKENONLYSIZE
18b40 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23   bytes only */.#
18b50 64 65 66 69 6e 65 20 45 50 5f 53 74 61 74 69 63  define EP_Static
18b60 20 20 20 20 30 78 30 30 38 30 30 30 20 2f 2a 20      0x008000 /* 
18b70 48 65 6c 64 20 69 6e 20 6d 65 6d 6f 72 79 20 6e  Held in memory n
18b80 6f 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d  ot obtained from
18b90 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 23 64 65   malloc() */.#de
18ba0 66 69 6e 65 20 45 50 5f 4d 65 6d 54 6f 6b 65 6e  fine EP_MemToken
18bb0 20 20 30 78 30 31 30 30 30 30 20 2f 2a 20 4e 65    0x010000 /* Ne
18bc0 65 64 20 74 6f 20 73 71 6c 69 74 65 33 44 62 46  ed to sqlite3DbF
18bd0 72 65 65 28 29 20 45 78 70 72 2e 7a 54 6f 6b 65  ree() Expr.zToke
18be0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  n */.#define EP_
18bf0 4e 6f 52 65 64 75 63 65 20 20 30 78 30 32 30 30  NoReduce  0x0200
18c00 30 30 20 2f 2a 20 43 61 6e 6e 6f 74 20 45 58 50  00 /* Cannot EXP
18c10 52 44 55 50 5f 52 45 44 55 43 45 20 74 68 69 73  RDUP_REDUCE this
18c20 20 45 78 70 72 20 2a 2f 0a 23 64 65 66 69 6e 65   Expr */.#define
18c30 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 20 20 30 78   EP_Unlikely  0x
18c40 30 34 30 30 30 30 20 2f 2a 20 75 6e 6c 69 6b 65  040000 /* unlike
18c50 6c 79 28 29 20 6f 72 20 6c 69 6b 65 6c 69 68 6f  ly() or likeliho
18c60 6f 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  od() function */
18c70 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 6f 6e 73  .#define EP_Cons
18c80 74 46 75 6e 63 20 30 78 30 38 30 30 30 30 20 2f  tFunc 0x080000 /
18c90 2a 20 41 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  * A SQLITE_FUNC_
18ca0 43 4f 4e 53 54 41 4e 54 20 6f 72 20 5f 53 4c 4f  CONSTANT or _SLO
18cb0 43 48 4e 47 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  CHNG function */
18cc0 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 61 6e 42  .#define EP_CanB
18cd0 65 4e 75 6c 6c 20 30 78 31 30 30 30 30 30 20 2f  eNull 0x100000 /
18ce0 2a 20 43 61 6e 20 62 65 20 6e 75 6c 6c 20 64 65  * Can be null de
18cf0 73 70 69 74 65 20 4e 4f 54 20 4e 55 4c 4c 20 63  spite NOT NULL c
18d00 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65  onstraint */.#de
18d10 66 69 6e 65 20 45 50 5f 53 75 62 71 75 65 72 79  fine EP_Subquery
18d20 20 20 30 78 32 30 30 30 30 30 20 2f 2a 20 54 72    0x200000 /* Tr
18d30 65 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b  ee contains a TK
18d40 5f 53 45 4c 45 43 54 20 6f 70 65 72 61 74 6f 72  _SELECT operator
18d50 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 41   */.#define EP_A
18d60 6c 69 61 73 20 20 20 20 20 30 78 34 30 30 30 30  lias     0x40000
18d70 30 20 2f 2a 20 49 73 20 61 6e 20 61 6c 69 61 73  0 /* Is an alias
18d80 20 66 6f 72 20 61 20 72 65 73 75 6c 74 20 73 65   for a result se
18d90 74 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66  t column */.#def
18da0 69 6e 65 20 45 50 5f 4c 65 61 66 20 20 20 20 20  ine EP_Leaf     
18db0 20 30 78 38 30 30 30 30 30 20 2f 2a 20 45 78 70   0x800000 /* Exp
18dc0 72 2e 70 4c 65 66 74 2c 20 2e 70 52 69 67 68 74  r.pLeft, .pRight
18dd0 2c 20 2e 75 2e 70 53 65 6c 65 63 74 20 61 6c 6c  , .u.pSelect all
18de0 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20   NULL */../*.** 
18df0 43 6f 6d 62 69 6e 61 74 69 6f 6e 73 20 6f 66 20  Combinations of 
18e00 74 77 6f 20 6f 72 20 6d 6f 72 65 20 45 50 5f 2a  two or more EP_*
18e10 20 66 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e   flags.*/.#defin
18e20 65 20 45 50 5f 50 72 6f 70 61 67 61 74 65 20 28  e EP_Propagate (
18e30 45 50 5f 43 6f 6c 6c 61 74 65 7c 45 50 5f 53 75  EP_Collate|EP_Su
18e40 62 71 75 65 72 79 29 20 2f 2a 20 50 72 6f 70 61  bquery) /* Propa
18e50 67 61 74 65 20 74 68 65 73 65 20 62 69 74 73 20  gate these bits 
18e60 75 70 20 74 72 65 65 20 2a 2f 0a 0a 2f 2a 0a 2a  up tree */../*.*
18e70 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63  * These macros c
18e80 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74 65  an be used to te
18e90 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61  st, set, or clea
18ea0 72 20 62 69 74 73 20 69 6e 20 74 68 65 0a 2a 2a  r bits in the.**
18eb0 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c   Expr.flags fiel
18ec0 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 78  d..*/.#define Ex
18ed0 70 72 48 61 73 50 72 6f 70 65 72 74 79 28 45 2c  prHasProperty(E,
18ee0 50 29 20 20 20 20 20 28 28 28 45 29 2d 3e 66 6c  P)     (((E)->fl
18ef0 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65  ags&(P))!=0).#de
18f00 66 69 6e 65 20 45 78 70 72 48 61 73 41 6c 6c 50  fine ExprHasAllP
18f10 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28 28  roperty(E,P)  ((
18f20 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d  (E)->flags&(P))=
18f30 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20 45 78  =(P)).#define Ex
18f40 70 72 53 65 74 50 72 6f 70 65 72 74 79 28 45 2c  prSetProperty(E,
18f50 50 29 20 20 20 20 20 28 45 29 2d 3e 66 6c 61 67  P)     (E)->flag
18f60 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65 20 45  s|=(P).#define E
18f70 78 70 72 43 6c 65 61 72 50 72 6f 70 65 72 74 79  xprClearProperty
18f80 28 45 2c 50 29 20 20 20 28 45 29 2d 3e 66 6c 61  (E,P)   (E)->fla
18f90 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 20 54 68 65  gs&=~(P)../* The
18fa0 20 45 78 70 72 53 65 74 56 56 41 50 72 6f 70 65   ExprSetVVAPrope
18fb0 72 74 79 28 29 20 6d 61 63 72 6f 20 69 73 20 75  rty() macro is u
18fc0 73 65 64 20 66 6f 72 20 56 65 72 69 66 69 63 61  sed for Verifica
18fd0 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e  tion, Validation
18fe0 2c 0a 2a 2a 20 61 6e 64 20 41 63 63 72 65 64 69  ,.** and Accredi
18ff0 74 61 74 69 6f 6e 20 6f 6e 6c 79 2e 20 20 49 74  tation only.  It
19000 20 77 6f 72 6b 73 20 6c 69 6b 65 20 45 78 70 72   works like Expr
19010 53 65 74 50 72 6f 70 65 72 74 79 28 29 20 64 75  SetProperty() du
19020 72 69 6e 67 20 56 56 41 0a 2a 2a 20 70 72 6f 63  ring VVA.** proc
19030 65 73 73 65 73 20 62 75 74 20 69 73 20 61 20 6e  esses but is a n
19040 6f 2d 6f 70 20 66 6f 72 20 64 65 6c 69 76 65 72  o-op for deliver
19050 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  y..*/.#ifdef SQL
19060 49 54 45 5f 44 45 42 55 47 0a 23 20 64 65 66 69  ITE_DEBUG.# defi
19070 6e 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f  ne ExprSetVVAPro
19080 70 65 72 74 79 28 45 2c 50 29 20 20 28 45 29 2d  perty(E,P)  (E)-
19090 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 65 6c 73  >flags|=(P).#els
190a0 65 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72 53  e.# define ExprS
190b0 65 74 56 56 41 50 72 6f 70 65 72 74 79 28 45 2c  etVVAProperty(E,
190c0 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  P).#endif../*.**
190d0 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72   Macros to deter
190e0 6d 69 6e 65 20 74 68 65 20 6e 75 6d 62 65 72 20  mine the number 
190f0 6f 66 20 62 79 74 65 73 20 72 65 71 75 69 72 65  of bytes require
19100 64 20 62 79 20 61 20 6e 6f 72 6d 61 6c 20 45 78  d by a normal Ex
19110 70 72 0a 2a 2a 20 73 74 72 75 63 74 2c 20 61 6e  pr.** struct, an
19120 20 45 78 70 72 20 73 74 72 75 63 74 20 77 69 74   Expr struct wit
19130 68 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64  h the EP_Reduced
19140 20 66 6c 61 67 20 73 65 74 20 69 6e 20 45 78 70   flag set in Exp
19150 72 2e 66 6c 61 67 73 0a 2a 2a 20 61 6e 64 20 61  r.flags.** and a
19160 6e 20 45 78 70 72 20 73 74 72 75 63 74 20 77 69  n Expr struct wi
19170 74 68 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f  th the EP_TokenO
19180 6e 6c 79 20 66 6c 61 67 20 73 65 74 2e 0a 2a 2f  nly flag set..*/
19190 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 46 55  .#define EXPR_FU
191a0 4c 4c 53 49 5a 45 20 20 20 20 20 20 20 20 20 20  LLSIZE          
191b0 20 73 69 7a 65 6f 66 28 45 78 70 72 29 20 20 20   sizeof(Expr)   
191c0 20 20 20 20 20 20 20 20 2f 2a 20 46 75 6c 6c 20          /* Full 
191d0 73 69 7a 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  size */.#define 
191e0 45 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45  EXPR_REDUCEDSIZE
191f0 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 6f 66          offsetof
19200 28 45 78 70 72 2c 69 54 61 62 6c 65 29 20 20 2f  (Expr,iTable)  /
19210 2a 20 43 6f 6d 6d 6f 6e 20 66 65 61 74 75 72 65  * Common feature
19220 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50  s */.#define EXP
19230 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20  R_TOKENONLYSIZE 
19240 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78       offsetof(Ex
19250 70 72 2c 70 4c 65 66 74 29 20 20 20 2f 2a 20 46  pr,pLeft)   /* F
19260 65 77 65 72 20 66 65 61 74 75 72 65 73 20 2a 2f  ewer features */
19270 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 70 61  ../*.** Flags pa
19280 73 73 65 64 20 74 6f 20 74 68 65 20 73 71 6c 69  ssed to the sqli
19290 74 65 33 45 78 70 72 44 75 70 28 29 20 66 75 6e  te3ExprDup() fun
192a0 63 74 69 6f 6e 2e 20 53 65 65 20 74 68 65 20 68  ction. See the h
192b0 65 61 64 65 72 20 63 6f 6d 6d 65 6e 74 0a 2a 2a  eader comment.**
192c0 20 61 62 6f 76 65 20 73 71 6c 69 74 65 33 45 78   above sqlite3Ex
192d0 70 72 44 75 70 28 29 20 66 6f 72 20 64 65 74 61  prDup() for deta
192e0 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ils..*/.#define 
192f0 45 58 50 52 44 55 50 5f 52 45 44 55 43 45 20 20  EXPRDUP_REDUCE  
19300 20 20 20 20 20 20 20 30 78 30 30 30 31 20 20 2f         0x0001  /
19310 2a 20 55 73 65 64 20 72 65 64 75 63 65 64 2d 73  * Used reduced-s
19320 69 7a 65 20 45 78 70 72 20 6e 6f 64 65 73 20 2a  ize Expr nodes *
19330 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c 69 73 74 20  /../*.** A list 
19340 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20  of expressions. 
19350 20 45 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e   Each expression
19360 20 6d 61 79 20 6f 70 74 69 6f 6e 61 6c 6c 79 20   may optionally 
19370 68 61 76 65 20 61 0a 2a 2a 20 6e 61 6d 65 2e 20  have a.** name. 
19380 20 41 6e 20 65 78 70 72 2f 6e 61 6d 65 20 63 6f   An expr/name co
19390 6d 62 69 6e 61 74 69 6f 6e 20 63 61 6e 20 62 65  mbination can be
193a0 20 75 73 65 64 20 69 6e 20 73 65 76 65 72 61 6c   used in several
193b0 20 77 61 79 73 2c 20 73 75 63 68 0a 2a 2a 20 61   ways, such.** a
193c0 73 20 74 68 65 20 6c 69 73 74 20 6f 66 20 22 65  s the list of "e
193d0 78 70 72 20 41 53 20 49 44 22 20 66 69 65 6c 64  xpr AS ID" field
193e0 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 22 53  s following a "S
193f0 45 4c 45 43 54 22 20 6f 72 20 69 6e 20 74 68 65  ELECT" or in the
19400 0a 2a 2a 20 6c 69 73 74 20 6f 66 20 22 49 44 20  .** list of "ID 
19410 3d 20 65 78 70 72 22 20 69 74 65 6d 73 20 69 6e  = expr" items in
19420 20 61 6e 20 55 50 44 41 54 45 2e 20 20 41 20 6c   an UPDATE.  A l
19430 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f  ist of expressio
19440 6e 73 20 63 61 6e 0a 2a 2a 20 61 6c 73 6f 20 62  ns can.** also b
19450 65 20 75 73 65 64 20 61 73 20 74 68 65 20 61 72  e used as the ar
19460 67 75 6d 65 6e 74 20 74 6f 20 61 20 66 75 6e 63  gument to a func
19470 74 69 6f 6e 2c 20 69 6e 20 77 68 69 63 68 20 63  tion, in which c
19480 61 73 65 20 74 68 65 20 61 2e 7a 4e 61 6d 65 0a  ase the a.zName.
19490 2a 2a 20 66 69 65 6c 64 20 69 73 20 6e 6f 74 20  ** field is not 
194a0 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 79 20 64  used..**.** By d
194b0 65 66 61 75 6c 74 20 74 68 65 20 45 78 70 72 2e  efault the Expr.
194c0 7a 53 70 61 6e 20 66 69 65 6c 64 20 68 6f 6c 64  zSpan field hold
194d0 73 20 61 20 68 75 6d 61 6e 2d 72 65 61 64 61 62  s a human-readab
194e0 6c 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f  le description o
194f0 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65 73 73  f.** the express
19500 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73 65 64  ion that is used
19510 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69   in the generati
19520 6f 6e 20 6f 66 20 65 72 72 6f 72 20 6d 65 73 73  on of error mess
19530 61 67 65 73 20 61 6e 64 0a 2a 2a 20 63 6f 6c 75  ages and.** colu
19540 6d 6e 20 6c 61 62 65 6c 73 2e 20 20 49 6e 20 74  mn labels.  In t
19550 68 69 73 20 63 61 73 65 2c 20 45 78 70 72 2e 7a  his case, Expr.z
19560 53 70 61 6e 20 69 73 20 74 79 70 69 63 61 6c 6c  Span is typicall
19570 79 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 0a  y the text of a.
19580 2a 2a 20 63 6f 6c 75 6d 6e 20 65 78 70 72 65 73  ** column expres
19590 73 69 6f 6e 20 61 73 20 69 74 20 65 78 69 73 74  sion as it exist
195a0 73 20 69 6e 20 61 20 53 45 4c 45 43 54 20 73 74  s in a SELECT st
195b0 61 74 65 6d 65 6e 74 2e 20 20 48 6f 77 65 76 65  atement.  Howeve
195c0 72 2c 20 69 66 0a 2a 2a 20 74 68 65 20 62 53 70  r, if.** the bSp
195d0 61 6e 49 73 54 61 62 20 66 6c 61 67 20 69 73 20  anIsTab flag is 
195e0 73 65 74 2c 20 74 68 65 6e 20 7a 53 70 61 6e 20  set, then zSpan 
195f0 69 73 20 6f 76 65 72 6c 6f 61 64 65 64 20 74 6f  is overloaded to
19600 20 6d 65 61 6e 20 74 68 65 20 6e 61 6d 65 0a 2a   mean the name.*
19610 2a 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20  * of the result 
19620 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 66 6f  column in the fo
19630 72 6d 3a 20 44 41 54 41 42 41 53 45 2e 54 41 42  rm: DATABASE.TAB
19640 4c 45 2e 43 4f 4c 55 4d 4e 2e 20 20 54 68 69 73  LE.COLUMN.  This
19650 20 6c 61 74 65 72 0a 2a 2a 20 66 6f 72 6d 20 69   later.** form i
19660 73 20 75 73 65 64 20 66 6f 72 20 6e 61 6d 65 20  s used for name 
19670 72 65 73 6f 6c 75 74 69 6f 6e 20 77 69 74 68 20  resolution with 
19680 6e 65 73 74 65 64 20 46 52 4f 4d 20 63 6c 61 75  nested FROM clau
19690 73 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45  ses..*/.struct E
196a0 78 70 72 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20  xprList {.  int 
196b0 6e 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20  nExpr;          
196c0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
196d0 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 6e 20 74  expressions on t
196e0 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 69 6e 74  he list */.  int
196f0 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20   nAlloc;        
19700 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
19710 20 61 5b 5d 20 73 6c 6f 74 73 20 61 6c 6c 6f 63   a[] slots alloc
19720 61 74 65 64 20 2a 2f 0a 20 20 73 74 72 75 63 74  ated */.  struct
19730 20 45 78 70 72 4c 69 73 74 5f 69 74 65 6d 20 7b   ExprList_item {
19740 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 65 78 70   /* For each exp
19750 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 6c  ression in the l
19760 69 73 74 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  ist */.    Expr 
19770 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20  *pExpr;         
19780 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 65 20     /* The parse 
19790 74 72 65 65 20 66 6f 72 20 74 68 69 73 20 65 78  tree for this ex
197a0 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20  pression */.    
197b0 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
197c0 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e          /* Token
197d0 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
197e0 20 74 68 69 73 20 65 78 70 72 65 73 73 69 6f 6e   this expression
197f0 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 53   */.    char *zS
19800 70 61 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  pan;            
19810 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78 74  /* Original text
19820 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69   of the expressi
19830 6f 6e 20 2a 2f 0a 20 20 20 20 75 38 20 73 6f 72  on */.    u8 sor
19840 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20  tOrder;         
19850 20 20 2f 2a 20 31 20 66 6f 72 20 44 45 53 43 20    /* 1 for DESC 
19860 6f 72 20 30 20 66 6f 72 20 41 53 43 20 2a 2f 0a  or 0 for ASC */.
19870 20 20 20 20 75 6e 73 69 67 6e 65 64 20 64 6f 6e      unsigned don
19880 65 20 3a 31 3b 20 20 20 20 20 20 20 2f 2a 20 41  e :1;       /* A
19890 20 66 6c 61 67 20 74 6f 20 69 6e 64 69 63 61 74   flag to indicat
198a0 65 20 77 68 65 6e 20 70 72 6f 63 65 73 73 69 6e  e when processin
198b0 67 20 69 73 20 66 69 6e 69 73 68 65 64 20 2a 2f  g is finished */
198c0 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 62 53  .    unsigned bS
198d0 70 61 6e 49 73 54 61 62 20 3a 31 3b 20 2f 2a 20  panIsTab :1; /* 
198e0 7a 53 70 61 6e 20 68 6f 6c 64 73 20 44 42 2e 54  zSpan holds DB.T
198f0 41 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a 20  ABLE.COLUMN */. 
19900 20 20 20 75 6e 73 69 67 6e 65 64 20 72 65 75 73     unsigned reus
19910 61 62 6c 65 20 3a 31 3b 20 20 20 2f 2a 20 43 6f  able :1;   /* Co
19920 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f  nstant expressio
19930 6e 20 69 73 20 72 65 75 73 61 62 6c 65 20 2a 2f  n is reusable */
19940 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  .    union {.   
19950 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20     struct {.    
19960 20 20 20 20 75 31 36 20 69 4f 72 64 65 72 42 79      u16 iOrderBy
19970 43 6f 6c 3b 20 20 20 20 20 20 2f 2a 20 46 6f 72  Col;      /* For
19980 20 4f 52 44 45 52 20 42 59 2c 20 63 6f 6c 75 6d   ORDER BY, colum
19990 6e 20 6e 75 6d 62 65 72 20 69 6e 20 72 65 73 75  n number in resu
199a0 6c 74 20 73 65 74 20 2a 2f 0a 20 20 20 20 20 20  lt set */.      
199b0 20 20 75 31 36 20 69 41 6c 69 61 73 3b 20 20 20    u16 iAlias;   
199c0 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
199d0 20 69 6e 74 6f 20 50 61 72 73 65 2e 61 41 6c 69   into Parse.aAli
199e0 61 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65 20 2a  as[] for zName *
199f0 2f 0a 20 20 20 20 20 20 7d 20 78 3b 0a 20 20 20  /.      } x;.   
19a00 20 20 20 69 6e 74 20 69 43 6f 6e 73 74 45 78 70     int iConstExp
19a10 72 52 65 67 3b 20 20 20 20 20 20 2f 2a 20 52 65  rReg;      /* Re
19a20 67 69 73 74 65 72 20 69 6e 20 77 68 69 63 68 20  gister in which 
19a30 45 78 70 72 20 76 61 6c 75 65 20 69 73 20 63 61  Expr value is ca
19a40 63 68 65 64 20 2a 2f 0a 20 20 20 20 7d 20 75 3b  ched */.    } u;
19a50 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20  .  } a[1];      
19a60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
19a70 6e 65 20 73 6c 6f 74 20 66 6f 72 20 65 61 63 68  ne slot for each
19a80 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74   expression in t
19a90 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f  he list */.};../
19aa0 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
19ab0 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
19ac0 72 65 20 69 73 20 75 73 65 64 20 62 79 20 74 68  re is used by th
19ad0 65 20 70 61 72 73 65 72 20 74 6f 20 72 65 63 6f  e parser to reco
19ae0 72 64 20 62 6f 74 68 0a 2a 2a 20 74 68 65 20 70  rd both.** the p
19af0 61 72 73 65 20 74 72 65 65 20 66 6f 72 20 61 6e  arse tree for an
19b00 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20   expression and 
19b10 74 68 65 20 73 70 61 6e 20 6f 66 20 69 6e 70 75  the span of inpu
19b20 74 20 74 65 78 74 20 66 6f 72 20 61 6e 0a 2a 2a  t text for an.**
19b30 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2f 0a   expression..*/.
19b40 73 74 72 75 63 74 20 45 78 70 72 53 70 61 6e 20  struct ExprSpan 
19b50 7b 0a 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b  {.  Expr *pExpr;
19b60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
19b70 20 65 78 70 72 65 73 73 69 6f 6e 20 70 61 72 73   expression pars
19b80 65 20 74 72 65 65 20 2a 2f 0a 20 20 63 6f 6e 73  e tree */.  cons
19b90 74 20 63 68 61 72 20 2a 7a 53 74 61 72 74 3b 20  t char *zStart; 
19ba0 20 20 2f 2a 20 46 69 72 73 74 20 63 68 61 72 61    /* First chara
19bb0 63 74 65 72 20 6f 66 20 69 6e 70 75 74 20 74 65  cter of input te
19bc0 78 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  xt */.  const ch
19bd0 61 72 20 2a 7a 45 6e 64 3b 20 20 20 20 20 2f 2a  ar *zEnd;     /*
19be0 20 4f 6e 65 20 63 68 61 72 61 63 74 65 72 20 70   One character p
19bf0 61 73 74 20 74 68 65 20 65 6e 64 20 6f 66 20 69  ast the end of i
19c00 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a 7d 3b 0a  nput text */.};.
19c10 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
19c20 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ce of this struc
19c30 74 75 72 65 20 63 61 6e 20 68 6f 6c 64 20 61 20  ture can hold a 
19c40 73 69 6d 70 6c 65 20 6c 69 73 74 20 6f 66 20 69  simple list of i
19c50 64 65 6e 74 69 66 69 65 72 73 2c 0a 2a 2a 20 73  dentifiers,.** s
19c60 75 63 68 20 61 73 20 74 68 65 20 6c 69 73 74 20  uch as the list 
19c70 22 61 2c 62 2c 63 22 20 69 6e 20 74 68 65 20 66  "a,b,c" in the f
19c80 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d 65  ollowing stateme
19c90 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20  nts:.**.**      
19ca0 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c  INSERT INTO t(a,
19cb0 62 2c 63 29 20 56 41 4c 55 45 53 20 2e 2e 2e 3b  b,c) VALUES ...;
19cc0 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45 20  .**      CREATE 
19cd0 49 4e 44 45 58 20 69 64 78 20 4f 4e 20 74 28 61  INDEX idx ON t(a
19ce0 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20 20 20 20 43  ,b,c);.**      C
19cf0 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74 72  REATE TRIGGER tr
19d00 69 67 20 42 45 46 4f 52 45 20 55 50 44 41 54 45  ig BEFORE UPDATE
19d10 20 4f 4e 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e   ON t(a,b,c) ...
19d20 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 64 4c 69  ;.**.** The IdLi
19d30 73 74 2e 61 2e 69 64 78 20 66 69 65 6c 64 20 69  st.a.idx field i
19d40 73 20 75 73 65 64 20 77 68 65 6e 20 74 68 65 20  s used when the 
19d50 49 64 4c 69 73 74 20 72 65 70 72 65 73 65 6e 74  IdList represent
19d60 73 20 74 68 65 20 6c 69 73 74 20 6f 66 0a 2a 2a  s the list of.**
19d70 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61 66   column names af
19d80 74 65 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65  ter a table name
19d90 20 69 6e 20 61 6e 20 49 4e 53 45 52 54 20 73 74   in an INSERT st
19da0 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 74 68 65  atement.  In the
19db0 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a   statement.**.**
19dc0 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
19dd0 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a   t(a,b,c) ....**
19de0 0a 2a 2a 20 49 66 20 22 61 22 20 69 73 20 74 68  .** If "a" is th
19df0 65 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66  e k-th column of
19e00 20 74 61 62 6c 65 20 22 74 22 2c 20 74 68 65 6e   table "t", then
19e10 20 49 64 4c 69 73 74 2e 61 5b 30 5d 2e 69 64 78   IdList.a[0].idx
19e20 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49  ==k..*/.struct I
19e30 64 4c 69 73 74 20 7b 0a 20 20 73 74 72 75 63 74  dList {.  struct
19e40 20 49 64 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20   IdList_item {. 
19e50 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20     char *zName; 
19e60 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
19e70 74 68 65 20 69 64 65 6e 74 69 66 69 65 72 20 2a  the identifier *
19e80 2f 0a 20 20 20 20 69 6e 74 20 69 64 78 3b 20 20  /.    int idx;  
19e90 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
19ea0 20 69 6e 20 73 6f 6d 65 20 54 61 62 6c 65 2e 61   in some Table.a
19eb0 43 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c 75 6d  Col[] of a colum
19ec0 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f  n named zName */
19ed0 0a 20 20 7d 20 2a 61 3b 0a 20 20 69 6e 74 20 6e  .  } *a;.  int n
19ee0 49 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  Id;         /* N
19ef0 75 6d 62 65 72 20 6f 66 20 69 64 65 6e 74 69 66  umber of identif
19f00 69 65 72 73 20 6f 6e 20 74 68 65 20 6c 69 73 74  iers on the list
19f10 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
19f20 65 20 62 69 74 6d 61 73 6b 20 64 61 74 61 74 79  e bitmask dataty
19f30 70 65 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77  pe defined below
19f40 20 69 73 20 75 73 65 64 20 66 6f 72 20 76 61 72   is used for var
19f50 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f  ious optimizatio
19f60 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69  ns..**.** Changi
19f70 6e 67 20 74 68 69 73 20 66 72 6f 6d 20 61 20 36  ng this from a 6
19f80 34 2d 62 69 74 20 74 6f 20 61 20 33 32 2d 62 69  4-bit to a 32-bi
19f90 74 20 74 79 70 65 20 6c 69 6d 69 74 73 20 74 68  t type limits th
19fa0 65 20 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 74  e number of.** t
19fb0 61 62 6c 65 73 20 69 6e 20 61 20 6a 6f 69 6e 20  ables in a join 
19fc0 74 6f 20 33 32 20 69 6e 73 74 65 61 64 20 6f 66  to 32 instead of
19fd0 20 36 34 2e 20 20 42 75 74 20 69 74 20 61 6c 73   64.  But it als
19fe0 6f 20 72 65 64 75 63 65 73 20 74 68 65 20 73 69  o reduces the si
19ff0 7a 65 0a 2a 2a 20 6f 66 20 74 68 65 20 6c 69 62  ze.** of the lib
1a000 72 61 72 79 20 62 79 20 37 33 38 20 62 79 74 65  rary by 738 byte
1a010 73 20 6f 6e 20 69 78 38 36 2e 0a 2a 2f 0a 23 69  s on ix86..*/.#i
1a020 66 64 65 66 20 53 51 4c 49 54 45 5f 42 49 54 4d  fdef SQLITE_BITM
1a030 41 53 4b 5f 54 59 50 45 0a 20 20 74 79 70 65 64  ASK_TYPE.  typed
1a040 65 66 20 53 51 4c 49 54 45 5f 42 49 54 4d 41 53  ef SQLITE_BITMAS
1a050 4b 5f 54 59 50 45 20 42 69 74 6d 61 73 6b 3b 0a  K_TYPE Bitmask;.
1a060 23 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20  #else.  typedef 
1a070 75 36 34 20 42 69 74 6d 61 73 6b 3b 0a 23 65 6e  u64 Bitmask;.#en
1a080 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e  dif../*.** The n
1a090 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20 69 6e  umber of bits in
1a0a0 20 61 20 42 69 74 6d 61 73 6b 2e 20 20 22 42 4d   a Bitmask.  "BM
1a0b0 53 22 20 6d 65 61 6e 73 20 22 42 69 74 4d 61 73  S" means "BitMas
1a0c0 6b 20 53 69 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66  k Size"..*/.#def
1a0d0 69 6e 65 20 42 4d 53 20 20 28 28 69 6e 74 29 28  ine BMS  ((int)(
1a0e0 73 69 7a 65 6f 66 28 42 69 74 6d 61 73 6b 29 2a  sizeof(Bitmask)*
1a0f0 38 29 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74  8))../*.** A bit
1a100 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 0a 2a 2f   in a Bitmask.*/
1a110 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b 42 49 54  .#define MASKBIT
1a120 28 6e 29 20 20 20 28 28 28 42 69 74 6d 61 73 6b  (n)   (((Bitmask
1a130 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e  )1)<<(n)).#defin
1a140 65 20 4d 41 53 4b 42 49 54 33 32 28 6e 29 20 28  e MASKBIT32(n) (
1a150 28 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 31  ((unsigned int)1
1a160 29 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65 20  )<<(n)).#define 
1a170 41 4c 4c 42 49 54 53 20 20 20 20 20 20 28 28 42  ALLBITS      ((B
1a180 69 74 6d 61 73 6b 29 2d 31 29 0a 0a 2f 2a 0a 2a  itmask)-1)../*.*
1a190 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
1a1a0 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69  structure descri
1a1b0 62 65 73 20 74 68 65 20 46 52 4f 4d 20 63 6c 61  bes the FROM cla
1a1c0 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20  use of a SELECT 
1a1d0 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61  statement..** Ea
1a1e0 63 68 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71  ch table or subq
1a1f0 75 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d  uery in the FROM
1a200 20 63 6c 61 75 73 65 20 69 73 20 61 20 73 65 70   clause is a sep
1a210 61 72 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f 66  arate element of
1a220 0a 2a 2a 20 74 68 65 20 53 72 63 4c 69 73 74 2e  .** the SrcList.
1a230 61 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a  a[] array..**.**
1a240 20 57 69 74 68 20 74 68 65 20 61 64 64 69 74 69   With the additi
1a250 6f 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20 64  on of multiple d
1a260 61 74 61 62 61 73 65 20 73 75 70 70 6f 72 74 2c  atabase support,
1a270 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
1a280 74 72 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e 20  tructure.** can 
1a290 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20  also be used to 
1a2a0 64 65 73 63 72 69 62 65 20 61 20 70 61 72 74 69  describe a parti
1a2b0 63 75 6c 61 72 20 74 61 62 6c 65 20 73 75 63 68  cular table such
1a2c0 20 61 73 20 74 68 65 20 74 61 62 6c 65 20 74 68   as the table th
1a2d0 61 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69 65  at.** is modifie
1a2e0 64 20 62 79 20 61 6e 20 49 4e 53 45 52 54 2c 20  d by an INSERT, 
1a2f0 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54  DELETE, or UPDAT
1a300 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e  E statement.  In
1a310 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a 2a   standard SQL,.*
1a320 2a 20 73 75 63 68 20 61 20 74 61 62 6c 65 20 6d  * such a table m
1a330 75 73 74 20 62 65 20 61 20 73 69 6d 70 6c 65 20  ust be a simple 
1a340 6e 61 6d 65 3a 20 49 44 2e 20 20 42 75 74 20 69  name: ID.  But i
1a350 6e 20 53 51 4c 69 74 65 2c 20 74 68 65 20 74 61  n SQLite, the ta
1a360 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62  ble can.** now b
1a370 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  e identified by 
1a380 61 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2c  a database name,
1a390 20 61 20 64 6f 74 2c 20 74 68 65 6e 20 74 68 65   a dot, then the
1a3a0 20 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44 2e   table name: ID.
1a3b0 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a 6f  ID..**.** The jo
1a3c0 69 6e 74 79 70 65 20 73 74 61 72 74 73 20 6f 75  intype starts ou
1a3d0 74 20 73 68 6f 77 69 6e 67 20 74 68 65 20 6a 6f  t showing the jo
1a3e0 69 6e 20 74 79 70 65 20 62 65 74 77 65 65 6e 20  in type between 
1a3f0 74 68 65 20 63 75 72 72 65 6e 74 20 74 61 62 6c  the current tabl
1a400 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e 65 78  e.** and the nex
1a410 74 20 74 61 62 6c 65 20 6f 6e 20 74 68 65 20 6c  t table on the l
1a420 69 73 74 2e 20 20 54 68 65 20 70 61 72 73 65 72  ist.  The parser
1a430 20 62 75 69 6c 64 73 20 74 68 65 20 6c 69 73 74   builds the list
1a440 20 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20 42 75   this way..** Bu
1a450 74 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  t sqlite3SrcList
1a460 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 29 20  ShiftJoinType() 
1a470 6c 61 74 65 72 20 73 68 69 66 74 73 20 74 68 65  later shifts the
1a480 20 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20 74 68   jointypes so th
1a490 61 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e 74  at each.** joint
1a4a0 79 70 65 20 65 78 70 72 65 73 73 65 73 20 74 68  ype expresses th
1a4b0 65 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74  e join between t
1a4c0 68 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65  he table and the
1a4d0 20 70 72 65 76 69 6f 75 73 20 74 61 62 6c 65 2e   previous table.
1a4e0 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 63 6f  .**.** In the co
1a4f0 6c 55 73 65 64 20 66 69 65 6c 64 2c 20 74 68 65  lUsed field, the
1a500 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20   high-order bit 
1a510 28 62 69 74 20 36 33 29 20 69 73 20 73 65 74 20  (bit 63) is set 
1a520 69 66 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20  if the table.** 
1a530 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74 68  contains more th
1a540 61 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20 61 6e  an 63 columns an
1a550 64 20 74 68 65 20 36 34 2d 74 68 20 6f 72 20 6c  d the 64-th or l
1a560 61 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73 20 75  ater column is u
1a570 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  sed..*/.struct S
1a580 72 63 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e  rcList {.  int n
1a590 53 72 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  Src;        /* N
1a5a0 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20  umber of tables 
1a5b0 6f 72 20 73 75 62 71 75 65 72 69 65 73 20 69 6e  or subqueries in
1a5c0 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
1a5d0 20 2a 2f 0a 20 20 75 33 32 20 6e 41 6c 6c 6f 63   */.  u32 nAlloc
1a5e0 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
1a5f0 20 6f 66 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f   of entries allo
1a600 63 61 74 65 64 20 69 6e 20 61 5b 5d 20 62 65 6c  cated in a[] bel
1a610 6f 77 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 53  ow */.  struct S
1a620 72 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20  rcList_item {.  
1a630 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
1a640 61 3b 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 6f  a;  /* Schema to
1a650 20 77 68 69 63 68 20 74 68 69 73 20 69 74 65 6d   which this item
1a660 20 69 73 20 66 69 78 65 64 20 2a 2f 0a 20 20 20   is fixed */.   
1a670 20 63 68 61 72 20 2a 7a 44 61 74 61 62 61 73 65   char *zDatabase
1a680 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61  ;  /* Name of da
1a690 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 74  tabase holding t
1a6a0 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  his table */.   
1a6b0 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
1a6c0 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
1a6d0 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63  e table */.    c
1a6e0 68 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20 20 20  har *zAlias;    
1a6f0 20 2f 2a 20 54 68 65 20 22 42 22 20 70 61 72 74   /* The "B" part
1a700 20 6f 66 20 61 20 22 41 20 41 53 20 42 22 20 70   of a "A AS B" p
1a710 68 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20 69 73  hrase.  zName is
1a720 20 74 68 65 20 22 41 22 20 2a 2f 0a 20 20 20 20   the "A" */.    
1a730 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20  Table *pTab;    
1a740 20 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61 62 6c    /* An SQL tabl
1a750 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
1a760 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20  to zName */.    
1a770 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
1a780 20 20 2f 2a 20 41 20 53 45 4c 45 43 54 20 73 74    /* A SELECT st
1a790 61 74 65 6d 65 6e 74 20 75 73 65 64 20 69 6e 20  atement used in 
1a7a0 70 6c 61 63 65 20 6f 66 20 61 20 74 61 62 6c 65  place of a table
1a7b0 20 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74   name */.    int
1a7c0 20 61 64 64 72 46 69 6c 6c 53 75 62 3b 20 20 2f   addrFillSub;  /
1a7d0 2a 20 41 64 64 72 65 73 73 20 6f 66 20 73 75 62  * Address of sub
1a7e0 72 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6e 69 66  routine to manif
1a7f0 65 73 74 20 61 20 73 75 62 71 75 65 72 79 20 2a  est a subquery *
1a800 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65 74  /.    int regRet
1a810 75 72 6e 3b 20 20 20 20 2f 2a 20 52 65 67 69 73  urn;    /* Regis
1a820 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 65 74 75  ter holding retu
1a830 72 6e 20 61 64 64 72 65 73 73 20 6f 66 20 61 64  rn address of ad
1a840 64 72 46 69 6c 6c 53 75 62 20 2a 2f 0a 20 20 20  drFillSub */.   
1a850 20 69 6e 74 20 72 65 67 52 65 73 75 6c 74 3b 20   int regResult; 
1a860 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 73 20     /* Registers 
1a870 68 6f 6c 64 69 6e 67 20 72 65 73 75 6c 74 73 20  holding results 
1a880 6f 66 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20  of a co-routine 
1a890 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 7b 0a  */.    struct {.
1a8a0 20 20 20 20 20 20 75 38 20 6a 6f 69 6e 74 79 70        u8 jointyp
1a8b0 65 3b 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20  e;      /* Type 
1a8c0 6f 66 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20  of join between 
1a8d0 74 68 69 73 20 74 61 62 6c 65 20 61 6e 64 20 74  this table and t
1a8e0 68 65 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20  he previous */. 
1a8f0 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f       unsigned no
1a900 74 49 6e 64 65 78 65 64 20 3a 31 3b 20 20 20 20  tIndexed :1;    
1a910 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 72 65  /* True if there
1a920 20 69 73 20 61 20 4e 4f 54 20 49 4e 44 45 58 45   is a NOT INDEXE
1a930 44 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20  D clause */.    
1a940 20 20 75 6e 73 69 67 6e 65 64 20 69 73 49 6e 64    unsigned isInd
1a950 65 78 65 64 42 79 20 3a 31 3b 20 20 20 2f 2a 20  exedBy :1;   /* 
1a960 54 72 75 65 20 69 66 20 74 68 65 72 65 20 69 73  True if there is
1a970 20 61 6e 20 49 4e 44 45 58 45 44 20 42 59 20 63   an INDEXED BY c
1a980 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 75  lause */.      u
1a990 6e 73 69 67 6e 65 64 20 69 73 54 61 62 46 75 6e  nsigned isTabFun
1a9a0 63 20 3a 31 3b 20 20 20 20 20 2f 2a 20 54 72 75  c :1;     /* Tru
1a9b0 65 20 69 66 20 74 61 62 6c 65 2d 76 61 6c 75 65  e if table-value
1a9c0 64 2d 66 75 6e 63 74 69 6f 6e 20 73 79 6e 74 61  d-function synta
1a9d0 78 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67  x */.      unsig
1a9e0 6e 65 64 20 69 73 43 6f 72 72 65 6c 61 74 65 64  ned isCorrelated
1a9f0 20 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66   :1;  /* True if
1aa00 20 73 75 62 2d 71 75 65 72 79 20 69 73 20 63 6f   sub-query is co
1aa10 72 72 65 6c 61 74 65 64 20 2a 2f 0a 20 20 20 20  rrelated */.    
1aa20 20 20 75 6e 73 69 67 6e 65 64 20 76 69 61 43 6f    unsigned viaCo
1aa30 72 6f 75 74 69 6e 65 20 3a 31 3b 20 20 2f 2a 20  routine :1;  /* 
1aa40 49 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61  Implemented as a
1aa50 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20   co-routine */. 
1aa60 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73       unsigned is
1aa70 52 65 63 75 72 73 69 76 65 20 3a 31 3b 20 20 20  Recursive :1;   
1aa80 2f 2a 20 54 72 75 65 20 66 6f 72 20 72 65 63 75  /* True for recu
1aa90 72 73 69 76 65 20 72 65 66 65 72 65 6e 63 65 20  rsive reference 
1aaa0 69 6e 20 57 49 54 48 20 2a 2f 0a 20 20 20 20 7d  in WITH */.    }
1aab0 20 66 67 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c   fg;.#ifndef SQL
1aac0 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e  ITE_OMIT_EXPLAIN
1aad0 0a 20 20 20 20 75 38 20 69 53 65 6c 65 63 74 49  .    u8 iSelectI
1aae0 64 3b 20 20 20 20 20 2f 2a 20 49 66 20 70 53 65  d;     /* If pSe
1aaf0 6c 65 63 74 21 3d 30 2c 20 74 68 65 20 69 64 20  lect!=0, the id 
1ab00 6f 66 20 74 68 65 20 73 75 62 2d 73 65 6c 65 63  of the sub-selec
1ab10 74 20 69 6e 20 45 51 50 20 2a 2f 0a 23 65 6e 64  t in EQP */.#end
1ab20 69 66 0a 20 20 20 20 69 6e 74 20 69 43 75 72 73  if.    int iCurs
1ab30 6f 72 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  or;      /* The 
1ab40 56 44 42 45 20 63 75 72 73 6f 72 20 6e 75 6d 62  VDBE cursor numb
1ab50 65 72 20 75 73 65 64 20 74 6f 20 61 63 63 65 73  er used to acces
1ab60 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  s this table */.
1ab70 20 20 20 20 45 78 70 72 20 2a 70 4f 6e 3b 20 20      Expr *pOn;  
1ab80 20 20 20 20 20 20 2f 2a 20 54 68 65 20 4f 4e 20        /* The ON 
1ab90 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e  clause of a join
1aba0 20 2a 2f 0a 20 20 20 20 49 64 4c 69 73 74 20 2a   */.    IdList *
1abb0 70 55 73 69 6e 67 3b 20 20 20 2f 2a 20 54 68 65  pUsing;   /* The
1abc0 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66   USING clause of
1abd0 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 42   a join */.    B
1abe0 69 74 6d 61 73 6b 20 63 6f 6c 55 73 65 64 3b 20  itmask colUsed; 
1abf0 20 2f 2a 20 42 69 74 20 4e 20 28 31 3c 3c 4e 29   /* Bit N (1<<N)
1ac00 20 73 65 74 20 69 66 20 63 6f 6c 75 6d 6e 20 4e   set if column N
1ac10 20 6f 66 20 70 54 61 62 20 69 73 20 75 73 65 64   of pTab is used
1ac20 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a   */.    union {.
1ac30 20 20 20 20 20 20 63 68 61 72 20 2a 7a 49 6e 64        char *zInd
1ac40 65 78 65 64 42 79 3b 20 20 20 20 2f 2a 20 49 64  exedBy;    /* Id
1ac50 65 6e 74 69 66 69 65 72 20 66 72 6f 6d 20 22 49  entifier from "I
1ac60 4e 44 45 58 45 44 20 42 59 20 3c 7a 49 6e 64 65  NDEXED BY <zInde
1ac70 78 3e 22 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  x>" clause */.  
1ac80 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 46      ExprList *pF
1ac90 75 6e 63 41 72 67 3b 20 20 2f 2a 20 41 72 67 75  uncArg;  /* Argu
1aca0 6d 65 6e 74 73 20 74 6f 20 74 61 62 6c 65 2d 76  ments to table-v
1acb0 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f 6e 20 2a  alued-function *
1acc0 2f 0a 20 20 20 20 7d 20 75 31 3b 0a 20 20 20 20  /.    } u1;.    
1acd0 49 6e 64 65 78 20 2a 70 49 42 49 6e 64 65 78 3b  Index *pIBIndex;
1ace0 20 20 2f 2a 20 49 6e 64 65 78 20 73 74 72 75 63    /* Index struc
1acf0 74 75 72 65 20 63 6f 72 72 65 73 70 6f 6e 64 69  ture correspondi
1ad00 6e 67 20 74 6f 20 75 31 2e 7a 49 6e 64 65 78 65  ng to u1.zIndexe
1ad10 64 42 79 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b  dBy */.  } a[1];
1ad20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1ad30 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61  One entry for ea
1ad40 63 68 20 69 64 65 6e 74 69 66 69 65 72 20 6f 6e  ch identifier on
1ad50 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a   the list */.};.
1ad60 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69 74 74 65 64  ./*.** Permitted
1ad70 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20 53   values of the S
1ad80 72 63 4c 69 73 74 2e 61 2e 6a 6f 69 6e 74 79 70  rcList.a.jointyp
1ad90 65 20 66 69 65 6c 64 0a 2a 2f 0a 23 64 65 66 69  e field.*/.#defi
1ada0 6e 65 20 4a 54 5f 49 4e 4e 45 52 20 20 20 20 20  ne JT_INNER     
1adb0 30 78 30 30 30 31 20 20 20 20 2f 2a 20 41 6e 79  0x0001    /* Any
1adc0 20 6b 69 6e 64 20 6f 66 20 69 6e 6e 65 72 20 6f   kind of inner o
1add0 72 20 63 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f 0a  r cross join */.
1ade0 23 64 65 66 69 6e 65 20 4a 54 5f 43 52 4f 53 53  #define JT_CROSS
1adf0 20 20 20 20 20 30 78 30 30 30 32 20 20 20 20 2f       0x0002    /
1ae00 2a 20 45 78 70 6c 69 63 69 74 20 75 73 65 20 6f  * Explicit use o
1ae10 66 20 74 68 65 20 43 52 4f 53 53 20 6b 65 79 77  f the CROSS keyw
1ae20 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  ord */.#define J
1ae30 54 5f 4e 41 54 55 52 41 4c 20 20 20 30 78 30 30  T_NATURAL   0x00
1ae40 30 34 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f  04    /* True fo
1ae50 72 20 61 20 22 6e 61 74 75 72 61 6c 22 20 6a 6f  r a "natural" jo
1ae60 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  in */.#define JT
1ae70 5f 4c 45 46 54 20 20 20 20 20 20 30 78 30 30 30  _LEFT      0x000
1ae80 38 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 75 74  8    /* Left out
1ae90 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  er join */.#defi
1aea0 6e 65 20 4a 54 5f 52 49 47 48 54 20 20 20 20 20  ne JT_RIGHT     
1aeb0 30 78 30 30 31 30 20 20 20 20 2f 2a 20 52 69 67  0x0010    /* Rig
1aec0 68 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f  ht outer join */
1aed0 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4f 55 54 45  .#define JT_OUTE
1aee0 52 20 20 20 20 20 30 78 30 30 32 30 20 20 20 20  R     0x0020    
1aef0 2f 2a 20 54 68 65 20 22 4f 55 54 45 52 22 20 6b  /* The "OUTER" k
1af00 65 79 77 6f 72 64 20 69 73 20 70 72 65 73 65 6e  eyword is presen
1af10 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  t */.#define JT_
1af20 45 52 52 4f 52 20 20 20 20 20 30 78 30 30 34 30  ERROR     0x0040
1af30 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 6f      /* unknown o
1af40 72 20 75 6e 73 75 70 70 6f 72 74 65 64 20 6a 6f  r unsupported jo
1af50 69 6e 20 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a  in type */.../*.
1af60 2a 2a 20 46 6c 61 67 73 20 61 70 70 72 6f 70 72  ** Flags appropr
1af70 69 61 74 65 20 66 6f 72 20 74 68 65 20 77 63 74  iate for the wct
1af80 72 6c 46 6c 61 67 73 20 70 61 72 61 6d 65 74 65  rlFlags paramete
1af90 72 20 6f 66 20 73 71 6c 69 74 65 33 57 68 65 72  r of sqlite3Wher
1afa0 65 42 65 67 69 6e 28 29 0a 2a 2a 20 61 6e 64 20  eBegin().** and 
1afb0 74 68 65 20 57 68 65 72 65 49 6e 66 6f 2e 77 63  the WhereInfo.wc
1afc0 74 72 6c 46 6c 61 67 73 20 6d 65 6d 62 65 72 2e  trlFlags member.
1afd0 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e  .**.** Value con
1afe0 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72 63  straints (enforc
1aff0 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29  ed via assert())
1b000 3a 0a 2a 2a 20 20 20 20 20 57 48 45 52 45 5f 55  :.**     WHERE_U
1b010 53 45 5f 4c 49 4d 49 54 20 20 3d 3d 20 53 46 5f  SE_LIMIT  == SF_
1b020 46 69 78 65 64 4c 69 6d 69 74 0a 2a 2f 0a 23 64  FixedLimit.*/.#d
1b030 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45  efine WHERE_ORDE
1b040 52 42 59 5f 4e 4f 52 4d 41 4c 20 20 20 30 78 30  RBY_NORMAL   0x0
1b050 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a  000 /* No-op */.
1b060 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52  #define WHERE_OR
1b070 44 45 52 42 59 5f 4d 49 4e 20 20 20 20 20 20 30  DERBY_MIN      0
1b080 78 30 30 30 31 20 2f 2a 20 4f 52 44 45 52 20 42  x0001 /* ORDER B
1b090 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72  Y processing for
1b0a0 20 6d 69 6e 28 29 20 66 75 6e 63 20 2a 2f 0a 23   min() func */.#
1b0b0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44  define WHERE_ORD
1b0c0 45 52 42 59 5f 4d 41 58 20 20 20 20 20 20 30 78  ERBY_MAX      0x
1b0d0 30 30 30 32 20 2f 2a 20 4f 52 44 45 52 20 42 59  0002 /* ORDER BY
1b0e0 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20   processing for 
1b0f0 6d 61 78 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64  max() func */.#d
1b100 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50  efine WHERE_ONEP
1b110 41 53 53 5f 44 45 53 49 52 45 44 20 20 30 78 30  ASS_DESIRED  0x0
1b120 30 30 34 20 2f 2a 20 57 61 6e 74 20 74 6f 20 64  004 /* Want to d
1b130 6f 20 6f 6e 65 2d 70 61 73 73 20 55 50 44 41 54  o one-pass UPDAT
1b140 45 2f 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66  E/DELETE */.#def
1b150 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50 41 53  ine WHERE_ONEPAS
1b160 53 5f 4d 55 4c 54 49 52 4f 57 20 30 78 30 30 30  S_MULTIROW 0x000
1b170 38 20 2f 2a 20 4f 4e 45 50 41 53 53 20 69 73 20  8 /* ONEPASS is 
1b180 6f 6b 20 77 69 74 68 20 6d 75 6c 74 69 70 6c 65  ok with multiple
1b190 20 72 6f 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65   rows */.#define
1b1a0 20 57 48 45 52 45 5f 44 55 50 4c 49 43 41 54 45   WHERE_DUPLICATE
1b1b0 53 5f 4f 4b 20 20 20 20 30 78 30 30 31 30 20 2f  S_OK    0x0010 /
1b1c0 2a 20 4f 6b 20 74 6f 20 72 65 74 75 72 6e 20 61  * Ok to return a
1b1d0 20 72 6f 77 20 6d 6f 72 65 20 74 68 61 6e 20 6f   row more than o
1b1e0 6e 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  nce */.#define W
1b1f0 48 45 52 45 5f 4f 52 5f 53 55 42 43 4c 41 55 53  HERE_OR_SUBCLAUS
1b200 45 20 20 20 20 20 30 78 30 30 32 30 20 2f 2a 20  E     0x0020 /* 
1b210 50 72 6f 63 65 73 73 69 6e 67 20 61 20 73 75 62  Processing a sub
1b220 2d 57 48 45 52 45 20 61 73 20 70 61 72 74 20 6f  -WHERE as part o
1b230 66 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  f.              
1b240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b250 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 20 4f          ** the O
1b260 52 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 20  R optimization  
1b270 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1b280 5f 47 52 4f 55 50 42 59 20 20 20 20 20 20 20 20  _GROUPBY        
1b290 20 20 30 78 30 30 34 30 20 2f 2a 20 70 4f 72 64    0x0040 /* pOrd
1b2a0 65 72 42 79 20 69 73 20 72 65 61 6c 6c 79 20 61  erBy is really a
1b2b0 20 47 52 4f 55 50 20 42 59 20 2a 2f 0a 23 64 65   GROUP BY */.#de
1b2c0 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49  fine WHERE_DISTI
1b2d0 4e 43 54 42 59 20 20 20 20 20 20 20 30 78 30 30  NCTBY       0x00
1b2e0 38 30 20 2f 2a 20 70 4f 72 64 65 72 62 79 20 69  80 /* pOrderby i
1b2f0 73 20 72 65 61 6c 6c 79 20 61 20 44 49 53 54 49  s really a DISTI
1b300 4e 43 54 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64  NCT clause */.#d
1b310 65 66 69 6e 65 20 57 48 45 52 45 5f 57 41 4e 54  efine WHERE_WANT
1b320 5f 44 49 53 54 49 4e 43 54 20 20 20 20 30 78 30  _DISTINCT    0x0
1b330 31 30 30 20 2f 2a 20 41 6c 6c 20 6f 75 74 70 75  100 /* All outpu
1b340 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 64 69  t needs to be di
1b350 73 74 69 6e 63 74 20 2a 2f 0a 23 64 65 66 69 6e  stinct */.#defin
1b360 65 20 57 48 45 52 45 5f 53 4f 52 54 42 59 47 52  e WHERE_SORTBYGR
1b370 4f 55 50 20 20 20 20 20 20 30 78 30 32 30 30 20  OUP      0x0200 
1b380 2f 2a 20 53 75 70 70 6f 72 74 20 73 71 6c 69 74  /* Support sqlit
1b390 65 33 57 68 65 72 65 49 73 53 6f 72 74 65 64 28  e3WhereIsSorted(
1b3a0 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  ) */.#define WHE
1b3b0 52 45 5f 53 45 45 4b 5f 54 41 42 4c 45 20 20 20  RE_SEEK_TABLE   
1b3c0 20 20 20 20 30 78 30 34 30 30 20 2f 2a 20 44 6f      0x0400 /* Do
1b3d0 20 6e 6f 74 20 64 65 66 65 72 20 73 65 65 6b 73   not defer seeks
1b3e0 20 6f 6e 20 6d 61 69 6e 20 74 61 62 6c 65 20 2a   on main table *
1b3f0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1b400 4f 52 44 45 52 42 59 5f 4c 49 4d 49 54 20 20 20  ORDERBY_LIMIT   
1b410 20 30 78 30 38 30 30 20 2f 2a 20 4f 52 44 45 52   0x0800 /* ORDER
1b420 42 59 2b 4c 49 4d 49 54 20 6f 6e 20 74 68 65 20  BY+LIMIT on the 
1b430 69 6e 6e 65 72 20 6c 6f 6f 70 20 2a 2f 0a 23 64  inner loop */.#d
1b440 65 66 69 6e 65 20 57 48 45 52 45 5f 53 45 45 4b  efine WHERE_SEEK
1b450 5f 55 4e 49 51 5f 54 41 42 4c 45 20 20 30 78 31  _UNIQ_TABLE  0x1
1b460 30 30 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 64 65  000 /* Do not de
1b470 66 65 72 20 73 65 65 6b 73 20 69 66 20 75 6e 69  fer seeks if uni
1b480 71 75 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  que */.         
1b490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b4a0 2a 20 20 20 20 20 30 78 32 30 30 30 20 20 20 20  *     0x2000    
1b4b0 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 75 73  not currently us
1b4c0 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ed */.#define WH
1b4d0 45 52 45 5f 55 53 45 5f 4c 49 4d 49 54 20 20 20  ERE_USE_LIMIT   
1b4e0 20 20 20 20 20 30 78 34 30 30 30 20 2f 2a 20 55       0x4000 /* U
1b4f0 73 65 20 74 68 65 20 4c 49 4d 49 54 20 69 6e 20  se the LIMIT in 
1b500 63 6f 73 74 20 65 73 74 69 6d 61 74 65 73 20 2a  cost estimates *
1b510 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
1b520 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 20            /*    
1b530 20 30 78 38 30 30 30 20 20 20 20 6e 6f 74 20 63   0x8000    not c
1b540 75 72 72 65 6e 74 6c 79 20 75 73 65 64 20 2a 2f  urrently used */
1b550 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74  ../* Allowed ret
1b560 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20  urn values from 
1b570 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 44 69  sqlite3WhereIsDi
1b580 73 74 69 6e 63 74 28 29 0a 2a 2f 0a 23 64 65 66  stinct().*/.#def
1b590 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
1b5a0 43 54 5f 4e 4f 4f 50 20 20 20 20 20 20 30 20 20  CT_NOOP      0  
1b5b0 2f 2a 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77  /* DISTINCT keyw
1b5c0 6f 72 64 20 6e 6f 74 20 75 73 65 64 20 2a 2f 0a  ord not used */.
1b5d0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
1b5e0 53 54 49 4e 43 54 5f 55 4e 49 51 55 45 20 20 20  STINCT_UNIQUE   
1b5f0 20 31 20 20 2f 2a 20 4e 6f 20 64 75 70 6c 69 63   1  /* No duplic
1b600 61 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ates */.#define 
1b610 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4f  WHERE_DISTINCT_O
1b620 52 44 45 52 45 44 20 20 20 32 20 20 2f 2a 20 41  RDERED   2  /* A
1b630 6c 6c 20 64 75 70 6c 69 63 61 74 65 73 20 61 72  ll duplicates ar
1b640 65 20 61 64 6a 61 63 65 6e 74 20 2a 2f 0a 23 64  e adjacent */.#d
1b650 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54  efine WHERE_DIST
1b660 49 4e 43 54 5f 55 4e 4f 52 44 45 52 45 44 20 33  INCT_UNORDERED 3
1b670 20 20 2f 2a 20 44 75 70 6c 69 63 61 74 65 73 20    /* Duplicates 
1b680 61 72 65 20 73 63 61 74 74 65 72 65 64 20 2a 2f  are scattered */
1b690 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f  ../*.** A NameCo
1b6a0 6e 74 65 78 74 20 64 65 66 69 6e 65 73 20 61 20  ntext defines a 
1b6b0 63 6f 6e 74 65 78 74 20 69 6e 20 77 68 69 63 68  context in which
1b6c0 20 74 6f 20 72 65 73 6f 6c 76 65 20 74 61 62 6c   to resolve tabl
1b6d0 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20  e and column.** 
1b6e0 6e 61 6d 65 73 2e 20 20 54 68 65 20 63 6f 6e 74  names.  The cont
1b6f0 65 78 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  ext consists of 
1b700 61 20 6c 69 73 74 20 6f 66 20 74 61 62 6c 65 73  a list of tables
1b710 20 28 74 68 65 20 70 53 72 63 4c 69 73 74 29 20   (the pSrcList) 
1b720 66 69 65 6c 64 20 61 6e 64 0a 2a 2a 20 61 20 6c  field and.** a l
1b730 69 73 74 20 6f 66 20 6e 61 6d 65 64 20 65 78 70  ist of named exp
1b740 72 65 73 73 69 6f 6e 20 28 70 45 4c 69 73 74 29  ression (pEList)
1b750 2e 20 20 54 68 65 20 6e 61 6d 65 64 20 65 78 70  .  The named exp
1b760 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 6d 61 79  ression list may
1b770 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20 20 54 68  .** be NULL.  Th
1b780 65 20 70 53 72 63 20 63 6f 72 72 65 73 70 6f 6e  e pSrc correspon
1b790 64 73 20 74 6f 20 74 68 65 20 46 52 4f 4d 20 63  ds to the FROM c
1b7a0 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43  lause of a SELEC
1b7b0 54 20 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20 74  T or.** to the t
1b7c0 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65 72 61  able being opera
1b7d0 74 65 64 20 6f 6e 20 62 79 20 49 4e 53 45 52 54  ted on by INSERT
1b7e0 2c 20 55 50 44 41 54 45 2c 20 6f 72 20 44 45 4c  , UPDATE, or DEL
1b7f0 45 54 45 2e 20 20 54 68 65 0a 2a 2a 20 70 45 4c  ETE.  The.** pEL
1b800 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  ist corresponds 
1b810 74 6f 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  to the result se
1b820 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20 61 6e  t of a SELECT an
1b830 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a  d is NULL for.**
1b840 20 6f 74 68 65 72 20 73 74 61 74 65 6d 65 6e 74   other statement
1b850 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e  s..**.** NameCon
1b860 74 65 78 74 73 20 63 61 6e 20 62 65 20 6e 65 73  texts can be nes
1b870 74 65 64 2e 20 20 57 68 65 6e 20 72 65 73 6f 6c  ted.  When resol
1b880 76 69 6e 67 20 6e 61 6d 65 73 2c 20 74 68 65 20  ving names, the 
1b890 69 6e 6e 65 72 2d 6d 6f 73 74 0a 2a 2a 20 63 6f  inner-most.** co
1b8a0 6e 74 65 78 74 20 69 73 20 73 65 61 72 63 68 65  ntext is searche
1b8b0 64 20 66 69 72 73 74 2e 20 20 49 66 20 6e 6f 20  d first.  If no 
1b8c0 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20  match is found, 
1b8d0 74 68 65 20 6e 65 78 74 20 6f 75 74 65 72 0a 2a  the next outer.*
1b8e0 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 63 68 65  * context is che
1b8f0 63 6b 65 64 2e 20 20 49 66 20 74 68 65 72 65 20  cked.  If there 
1b900 69 73 20 73 74 69 6c 6c 20 6e 6f 20 6d 61 74 63  is still no matc
1b910 68 2c 20 74 68 65 20 6e 65 78 74 20 63 6f 6e 74  h, the next cont
1b920 65 78 74 0a 2a 2a 20 69 73 20 63 68 65 63 6b 65  ext.** is checke
1b930 64 2e 20 20 54 68 69 73 20 70 72 6f 63 65 73 73  d.  This process
1b940 20 63 6f 6e 74 69 6e 75 65 73 20 75 6e 74 69 6c   continues until
1b950 20 65 69 74 68 65 72 20 61 20 6d 61 74 63 68 20   either a match 
1b960 69 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61  is found.** or a
1b970 6c 6c 20 63 6f 6e 74 65 78 74 73 20 61 72 65 20  ll contexts are 
1b980 63 68 65 63 6b 2e 20 20 57 68 65 6e 20 61 20 6d  check.  When a m
1b990 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74  atch is found, t
1b9a0 68 65 20 6e 52 65 66 20 6d 65 6d 62 65 72 20 6f  he nRef member o
1b9b0 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 78 74  f.** the context
1b9c0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
1b9d0 6d 61 74 63 68 20 69 73 20 69 6e 63 72 65 6d 65  match is increme
1b9e0 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 45 61 63 68  nted..**.** Each
1b9f0 20 73 75 62 71 75 65 72 79 20 67 65 74 73 20 61   subquery gets a
1ba00 20 6e 65 77 20 4e 61 6d 65 43 6f 6e 74 65 78 74   new NameContext
1ba10 2e 20 20 54 68 65 20 70 4e 65 78 74 20 66 69 65  .  The pNext fie
1ba20 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  ld points to the
1ba30 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  .** NameContext 
1ba40 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 71 75  in the parent qu
1ba50 65 72 79 2e 20 20 54 68 75 73 20 74 68 65 20 70  ery.  Thus the p
1ba60 72 6f 63 65 73 73 20 6f 66 20 73 63 61 6e 6e 69  rocess of scanni
1ba70 6e 67 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f  ng the.** NameCo
1ba80 6e 74 65 78 74 20 6c 69 73 74 20 63 6f 72 72 65  ntext list corre
1ba90 73 70 6f 6e 64 73 20 74 6f 20 73 65 61 72 63 68  sponds to search
1baa0 69 6e 67 20 74 68 72 6f 75 67 68 20 73 75 63 63  ing through succ
1bab0 65 73 73 69 76 65 6c 79 20 6f 75 74 65 72 0a 2a  essively outer.*
1bac0 2a 20 73 75 62 71 75 65 72 69 65 73 20 6c 6f 6f  * subqueries loo
1bad0 6b 69 6e 67 20 66 6f 72 20 61 20 6d 61 74 63 68  king for a match
1bae0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4e 61 6d 65  ..*/.struct Name
1baf0 43 6f 6e 74 65 78 74 20 7b 0a 20 20 50 61 72 73  Context {.  Pars
1bb00 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20  e *pParse;      
1bb10 20 2f 2a 20 54 68 65 20 70 61 72 73 65 72 20 2a   /* The parser *
1bb20 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72  /.  SrcList *pSr
1bb30 63 4c 69 73 74 3b 20 20 20 2f 2a 20 4f 6e 65 20  cList;   /* One 
1bb40 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73 20 75  or more tables u
1bb50 73 65 64 20 74 6f 20 72 65 73 6f 6c 76 65 20 6e  sed to resolve n
1bb60 61 6d 65 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69  ames */.  ExprLi
1bb70 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 2f  st *pEList;    /
1bb80 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c 69 73 74 20  * Optional list 
1bb90 6f 66 20 72 65 73 75 6c 74 2d 73 65 74 20 63 6f  of result-set co
1bba0 6c 75 6d 6e 73 20 2a 2f 0a 20 20 41 67 67 49 6e  lumns */.  AggIn
1bbb0 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20  fo *pAggInfo;   
1bbc0 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  /* Information a
1bbd0 62 6f 75 74 20 61 67 67 72 65 67 61 74 65 73 20  bout aggregates 
1bbe0 61 74 20 74 68 69 73 20 6c 65 76 65 6c 20 2a 2f  at this level */
1bbf0 0a 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a  .  NameContext *
1bc00 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20  pNext;  /* Next 
1bc10 6f 75 74 65 72 20 6e 61 6d 65 20 63 6f 6e 74 65  outer name conte
1bc20 78 74 2e 20 20 4e 55 4c 4c 20 66 6f 72 20 6f 75  xt.  NULL for ou
1bc30 74 65 72 6d 6f 73 74 20 2a 2f 0a 20 20 69 6e 74  termost */.  int
1bc40 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20   nRef;          
1bc50 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
1bc60 61 6d 65 73 20 72 65 73 6f 6c 76 65 64 20 62 79  ames resolved by
1bc70 20 74 68 69 73 20 63 6f 6e 74 65 78 74 20 2a 2f   this context */
1bc80 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20  .  int nErr;    
1bc90 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1bca0 72 20 6f 66 20 65 72 72 6f 72 73 20 65 6e 63 6f  r of errors enco
1bcb0 75 6e 74 65 72 65 64 20 77 68 69 6c 65 20 72 65  untered while re
1bcc0 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 2a 2f  solving names */
1bcd0 0a 20 20 75 31 36 20 6e 63 46 6c 61 67 73 3b 20  .  u16 ncFlags; 
1bce0 20 20 20 20 20 20 20 20 2f 2a 20 5a 65 72 6f 20          /* Zero 
1bcf0 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a 20 66 6c 61  or more NC_* fla
1bd00 67 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77  gs defined below
1bd10 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c   */.};../*.** Al
1bd20 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
1bd30 20 74 68 65 20 4e 61 6d 65 43 6f 6e 74 65 78 74   the NameContext
1bd40 2c 20 6e 63 46 6c 61 67 73 20 66 69 65 6c 64 2e  , ncFlags field.
1bd50 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e  .**.** Value con
1bd60 73 74 72 61 69 6e 74 73 20 28 61 6c 6c 20 63 68  straints (all ch
1bd70 65 63 6b 65 64 20 76 69 61 20 61 73 73 65 72 74  ecked via assert
1bd80 28 29 29 3a 0a 2a 2a 20 20 20 20 4e 43 5f 48 61  ()):.**    NC_Ha
1bd90 73 41 67 67 20 20 20 20 3d 3d 20 53 46 5f 48 61  sAgg    == SF_Ha
1bda0 73 41 67 67 0a 2a 2a 20 20 20 20 4e 43 5f 4d 69  sAgg.**    NC_Mi
1bdb0 6e 4d 61 78 41 67 67 20 3d 3d 20 53 46 5f 4d 69  nMaxAgg == SF_Mi
1bdc0 6e 4d 61 78 41 67 67 20 3d 3d 20 53 51 4c 49 54  nMaxAgg == SQLIT
1bdd0 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 0a 2a 2a  E_FUNC_MINMAX.**
1bde0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 41  .*/.#define NC_A
1bdf0 6c 6c 6f 77 41 67 67 20 20 30 78 30 30 30 31 20  llowAgg  0x0001 
1be00 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 75   /* Aggregate fu
1be10 6e 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 6c 6f  nctions are allo
1be20 77 65 64 20 68 65 72 65 20 2a 2f 0a 23 64 65 66  wed here */.#def
1be30 69 6e 65 20 4e 43 5f 50 61 72 74 49 64 78 20 20  ine NC_PartIdx  
1be40 20 30 78 30 30 30 32 20 20 2f 2a 20 54 72 75 65   0x0002  /* True
1be50 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 61 20   if resolving a 
1be60 70 61 72 74 69 61 6c 20 69 6e 64 65 78 20 57 48  partial index WH
1be70 45 52 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  ERE */.#define N
1be80 43 5f 49 73 43 68 65 63 6b 20 20 20 30 78 30 30  C_IsCheck   0x00
1be90 30 34 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72  04  /* True if r
1bea0 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 69  esolving names i
1beb0 6e 20 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72  n a CHECK constr
1bec0 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  aint */.#define 
1bed0 4e 43 5f 49 6e 41 67 67 46 75 6e 63 20 30 78 30  NC_InAggFunc 0x0
1bee0 30 30 38 20 20 2f 2a 20 54 72 75 65 20 69 66 20  008  /* True if 
1bef0 61 6e 61 6c 79 7a 69 6e 67 20 61 72 67 75 6d 65  analyzing argume
1bf00 6e 74 73 20 74 6f 20 61 6e 20 61 67 67 20 66 75  nts to an agg fu
1bf10 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  nc */.#define NC
1bf20 5f 48 61 73 41 67 67 20 20 20 20 30 78 30 30 31  _HasAgg    0x001
1bf30 30 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72  0  /* One or mor
1bf40 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  e aggregate func
1bf50 74 69 6f 6e 73 20 73 65 65 6e 20 2a 2f 0a 23 64  tions seen */.#d
1bf60 65 66 69 6e 65 20 4e 43 5f 49 64 78 45 78 70 72  efine NC_IdxExpr
1bf70 20 20 20 30 78 30 30 32 30 20 20 2f 2a 20 54 72     0x0020  /* Tr
1bf80 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20  ue if resolving 
1bf90 63 6f 6c 75 6d 6e 73 20 6f 66 20 43 52 45 41 54  columns of CREAT
1bfa0 45 20 49 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69  E INDEX */.#defi
1bfb0 6e 65 20 4e 43 5f 56 61 72 53 65 6c 65 63 74 20  ne NC_VarSelect 
1bfc0 30 78 30 30 34 30 20 20 2f 2a 20 41 20 63 6f 72  0x0040  /* A cor
1bfd0 72 65 6c 61 74 65 64 20 73 75 62 71 75 65 72 79  related subquery
1bfe0 20 68 61 73 20 62 65 65 6e 20 73 65 65 6e 20 2a   has been seen *
1bff0 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 4d 69 6e  /.#define NC_Min
1c000 4d 61 78 41 67 67 20 30 78 31 30 30 30 20 20 2f  MaxAgg 0x1000  /
1c010 2a 20 6d 69 6e 2f 6d 61 78 20 61 67 67 72 65 67  * min/max aggreg
1c020 61 74 65 73 20 73 65 65 6e 2e 20 20 53 65 65 20  ates seen.  See 
1c030 6e 6f 74 65 20 61 62 6f 76 65 20 2a 2f 0a 0a 2f  note above */../
1c040 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
1c050 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
1c060 67 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74  g structure cont
1c070 61 69 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d 61  ains all informa
1c080 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20 74  tion.** needed t
1c090 6f 20 67 65 6e 65 72 61 74 65 20 63 6f 64 65 20  o generate code 
1c0a0 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 53 45 4c  for a single SEL
1c0b0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a  ECT statement..*
1c0c0 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69 73 20 73  *.** nLimit is s
1c0d0 65 74 20 74 6f 20 2d 31 20 69 66 20 74 68 65 72  et to -1 if ther
1c0e0 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54 20 63 6c  e is no LIMIT cl
1c0f0 61 75 73 65 2e 20 20 6e 4f 66 66 73 65 74 20 69  ause.  nOffset i
1c100 73 20 73 65 74 20 74 6f 20 30 2e 0a 2a 2a 20 49  s set to 0..** I
1c110 66 20 74 68 65 72 65 20 69 73 20 61 20 4c 49 4d  f there is a LIM
1c120 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20 70  IT clause, the p
1c130 61 72 73 65 72 20 73 65 74 73 20 6e 4c 69 6d 69  arser sets nLimi
1c140 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f  t to the value o
1c150 66 20 74 68 65 0a 2a 2a 20 6c 69 6d 69 74 20 61  f the.** limit a
1c160 6e 64 20 6e 4f 66 66 73 65 74 20 74 6f 20 74 68  nd nOffset to th
1c170 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f  e value of the o
1c180 66 66 73 65 74 20 28 6f 72 20 30 20 69 66 20 74  ffset (or 0 if t
1c190 68 65 72 65 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f  here is not.** o
1c1a0 66 66 73 65 74 29 2e 20 20 42 75 74 20 6c 61 74  ffset).  But lat
1c1b0 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61 6e  er on, nLimit an
1c1c0 64 20 6e 4f 66 66 73 65 74 20 62 65 63 6f 6d 65  d nOffset become
1c1d0 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61   the memory loca
1c1e0 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68 65 20  tions.** in the 
1c1f0 56 44 42 45 20 74 68 61 74 20 72 65 63 6f 72 64  VDBE that record
1c200 20 74 68 65 20 6c 69 6d 69 74 20 61 6e 64 20 6f   the limit and o
1c210 66 66 73 65 74 20 63 6f 75 6e 74 65 72 73 2e 0a  ffset counters..
1c220 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70  **.** addrOpenEp
1c230 68 6d 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e  hm[] entries con
1c240 74 61 69 6e 20 74 68 65 20 61 64 64 72 65 73 73  tain the address
1c250 20 6f 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d   of OP_OpenEphem
1c260 65 72 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a  eral opcodes..**
1c270 20 54 68 65 73 65 20 61 64 64 72 65 73 73 65 73   These addresses
1c280 20 6d 75 73 74 20 62 65 20 73 74 6f 72 65 64 20   must be stored 
1c290 73 6f 20 74 68 61 74 20 77 65 20 63 61 6e 20 67  so that we can g
1c2a0 6f 20 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20  o back and fill 
1c2b0 69 6e 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59  in.** the P4_KEY
1c2c0 49 4e 46 4f 20 61 6e 64 20 50 32 20 70 61 72 61  INFO and P2 para
1c2d0 6d 65 74 65 72 73 20 6c 61 74 65 72 2e 20 20 4e  meters later.  N
1c2e0 65 69 74 68 65 72 20 74 68 65 20 4b 65 79 49 6e  either the KeyIn
1c2f0 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75  fo nor.** the nu
1c300 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
1c310 69 6e 20 50 32 20 63 61 6e 20 62 65 20 63 6f 6d  in P2 can be com
1c320 70 75 74 65 64 20 61 74 20 74 68 65 20 73 61 6d  puted at the sam
1c330 65 20 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65  e time.** as the
1c340 20 4f 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73   OP_OpenEphm ins
1c350 74 72 75 63 74 69 6f 6e 20 69 73 20 63 6f 64 65  truction is code
1c360 64 20 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a  d because not.**
1c370 20 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74   enough informat
1c380 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 63 6f  ion about the co
1c390 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 69 73 20  mpound query is 
1c3a0 6b 6e 6f 77 6e 20 61 74 20 74 68 61 74 20 70 6f  known at that po
1c3b0 69 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49  int..** The KeyI
1c3c0 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e  nfo for addrOpen
1c3d0 54 72 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20  Tran[0] and [1] 
1c3e0 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69  contains collati
1c3f0 6e 67 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20  ng sequences.** 
1c400 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20 73  for the result s
1c410 65 74 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f  et.  The KeyInfo
1c420 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 45 70 68   for addrOpenEph
1c430 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f  m[2] contains co
1c440 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65  llating.** seque
1c450 6e 63 65 73 20 66 6f 72 20 74 68 65 20 4f 52 44  nces for the ORD
1c460 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f  ER BY clause..*/
1c470 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74 20 7b  .struct Select {
1c480 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c  .  ExprList *pEL
1c490 69 73 74 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  ist;      /* The
1c4a0 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20 72   fields of the r
1c4b0 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70  esult */.  u8 op
1c4c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1c4d0 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f    /* One of: TK_
1c4e0 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f  UNION TK_ALL TK_
1c4f0 49 4e 54 45 52 53 45 43 54 20 54 4b 5f 45 58 43  INTERSECT TK_EXC
1c500 45 50 54 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20  EPT */.  LogEst 
1c510 6e 53 65 6c 65 63 74 52 6f 77 3b 20 20 20 20 20  nSelectRow;     
1c520 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 6e 75 6d  /* Estimated num
1c530 62 65 72 20 6f 66 20 72 65 73 75 6c 74 20 72 6f  ber of result ro
1c540 77 73 20 2a 2f 0a 20 20 75 33 32 20 73 65 6c 46  ws */.  u32 selF
1c550 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 2f  lags;          /
1c560 2a 20 56 61 72 69 6f 75 73 20 53 46 5f 2a 20 76  * Various SF_* v
1c570 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 69  alues */.  int i
1c580 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65 74 3b 20  Limit, iOffset; 
1c590 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69    /* Memory regi
1c5a0 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 4c 49  sters holding LI
1c5b0 4d 49 54 20 26 20 4f 46 46 53 45 54 20 63 6f 75  MIT & OFFSET cou
1c5c0 6e 74 65 72 73 20 2a 2f 0a 23 69 66 20 53 45 4c  nters */.#if SEL
1c5d0 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44  ECTTRACE_ENABLED
1c5e0 0a 20 20 63 68 61 72 20 7a 53 65 6c 4e 61 6d 65  .  char zSelName
1c5f0 5b 31 32 5d 3b 20 20 20 20 20 2f 2a 20 53 79 6d  [12];     /* Sym
1c600 62 6f 6c 69 63 20 6e 61 6d 65 20 6f 66 20 74 68  bolic name of th
1c610 69 73 20 53 45 4c 45 43 54 20 75 73 65 20 66 6f  is SELECT use fo
1c620 72 20 64 65 62 75 67 67 69 6e 67 20 2a 2f 0a 23  r debugging */.#
1c630 65 6e 64 69 66 0a 20 20 69 6e 74 20 61 64 64 72  endif.  int addr
1c640 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b 20 20 20 2f  OpenEphm[2];   /
1c650 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 20 6f  * OP_OpenEphem o
1c660 70 63 6f 64 65 73 20 72 65 6c 61 74 65 64 20 74  pcodes related t
1c670 6f 20 74 68 69 73 20 73 65 6c 65 63 74 20 2a 2f  o this select */
1c680 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63  .  SrcList *pSrc
1c690 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
1c6a0 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a   FROM clause */.
1c6b0 20 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20    Expr *pWhere; 
1c6c0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1c6d0 57 48 45 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a  WHERE clause */.
1c6e0 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f    ExprList *pGro
1c6f0 75 70 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20  upBy;    /* The 
1c700 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20  GROUP BY clause 
1c710 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48 61 76 69  */.  Expr *pHavi
1c720 6e 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ng;         /* T
1c730 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65  he HAVING clause
1c740 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
1c750 70 4f 72 64 65 72 42 79 3b 20 20 20 20 2f 2a 20  pOrderBy;    /* 
1c760 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  The ORDER BY cla
1c770 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20  use */.  Select 
1c780 2a 70 50 72 69 6f 72 3b 20 20 20 20 20 20 20 20  *pPrior;        
1c790 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65 63 74 20  /* Prior select 
1c7a0 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73 65  in a compound se
1c7b0 6c 65 63 74 20 73 74 61 74 65 6d 65 6e 74 20 2a  lect statement *
1c7c0 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 4e 65 78  /.  Select *pNex
1c7d0 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65  t;         /* Ne
1c7e0 78 74 20 73 65 6c 65 63 74 20 74 6f 20 74 68 65  xt select to the
1c7f0 20 6c 65 66 74 20 69 6e 20 61 20 63 6f 6d 70 6f   left in a compo
1c800 75 6e 64 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  und */.  Expr *p
1c810 4c 69 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20  Limit;          
1c820 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73  /* LIMIT express
1c830 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20  ion. NULL means 
1c840 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20 45  not used. */.  E
1c850 78 70 72 20 2a 70 4f 66 66 73 65 74 3b 20 20 20  xpr *pOffset;   
1c860 20 20 20 20 20 20 2f 2a 20 4f 46 46 53 45 54 20        /* OFFSET 
1c870 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c  expression. NULL
1c880 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e   means not used.
1c890 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74   */.  With *pWit
1c8a0 68 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  h;           /* 
1c8b0 57 49 54 48 20 63 6c 61 75 73 65 20 61 74 74 61  WITH clause atta
1c8c0 63 68 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c  ched to this sel
1c8d0 65 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e 20 2a 2f  ect. Or NULL. */
1c8e0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  .};../*.** Allow
1c8f0 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 53 65  ed values for Se
1c900 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e 20 20  lect.selFlags.  
1c910 54 68 65 20 22 53 46 22 20 70 72 65 66 69 78 20  The "SF" prefix 
1c920 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 53  stands for.** "S
1c930 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a 2a 0a  elect Flag"..**.
1c940 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61  ** Value constra
1c950 69 6e 74 73 20 28 61 6c 6c 20 63 68 65 63 6b 65  ints (all checke
1c960 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29 0a  d via assert()).
1c970 2a 2a 20 20 20 20 20 53 46 5f 48 61 73 41 67 67  **     SF_HasAgg
1c980 20 20 20 20 20 3d 3d 20 4e 43 5f 48 61 73 41 67       == NC_HasAg
1c990 67 0a 2a 2a 20 20 20 20 20 53 46 5f 4d 69 6e 4d  g.**     SF_MinM
1c9a0 61 78 41 67 67 20 20 3d 3d 20 4e 43 5f 4d 69 6e  axAgg  == NC_Min
1c9b0 4d 61 78 41 67 67 20 20 20 20 20 3d 3d 20 53 51  MaxAgg     == SQ
1c9c0 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58  LITE_FUNC_MINMAX
1c9d0 0a 2a 2a 20 20 20 20 20 53 46 5f 46 69 78 65 64  .**     SF_Fixed
1c9e0 4c 69 6d 69 74 20 3d 3d 20 57 48 45 52 45 5f 55  Limit == WHERE_U
1c9f0 53 45 5f 4c 49 4d 49 54 0a 2a 2f 0a 23 64 65 66  SE_LIMIT.*/.#def
1ca00 69 6e 65 20 53 46 5f 44 69 73 74 69 6e 63 74 20  ine SF_Distinct 
1ca10 20 20 20 20 20 20 30 78 30 30 30 30 31 20 20 2f        0x00001  /
1ca20 2a 20 4f 75 74 70 75 74 20 73 68 6f 75 6c 64 20  * Output should 
1ca30 62 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 23  be DISTINCT */.#
1ca40 64 65 66 69 6e 65 20 53 46 5f 41 6c 6c 20 20 20  define SF_All   
1ca50 20 20 20 20 20 20 20 20 20 30 78 30 30 30 30 32           0x00002
1ca60 20 20 2f 2a 20 49 6e 63 6c 75 64 65 73 20 74 68    /* Includes th
1ca70 65 20 41 4c 4c 20 6b 65 79 77 6f 72 64 20 2a 2f  e ALL keyword */
1ca80 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65 73 6f  .#define SF_Reso
1ca90 6c 76 65 64 20 20 20 20 20 20 20 30 78 30 30 30  lved       0x000
1caa0 30 34 20 20 2f 2a 20 49 64 65 6e 74 69 66 69 65  04  /* Identifie
1cab0 72 73 20 68 61 76 65 20 62 65 65 6e 20 72 65 73  rs have been res
1cac0 6f 6c 76 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  olved */.#define
1cad0 20 53 46 5f 41 67 67 72 65 67 61 74 65 20 20 20   SF_Aggregate   
1cae0 20 20 20 30 78 30 30 30 30 38 20 20 2f 2a 20 43     0x00008  /* C
1caf0 6f 6e 74 61 69 6e 73 20 61 67 67 20 66 75 6e 63  ontains agg func
1cb00 74 69 6f 6e 73 20 6f 72 20 61 20 47 52 4f 55 50  tions or a GROUP
1cb10 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53   BY */.#define S
1cb20 46 5f 48 61 73 41 67 67 20 20 20 20 20 20 20 20  F_HasAgg        
1cb30 20 30 78 30 30 30 31 30 20 20 2f 2a 20 43 6f 6e   0x00010  /* Con
1cb40 74 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20  tains aggregate 
1cb50 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65  functions */.#de
1cb60 66 69 6e 65 20 53 46 5f 55 73 65 73 45 70 68 65  fine SF_UsesEphe
1cb70 6d 65 72 61 6c 20 20 30 78 30 30 30 32 30 20 20  meral  0x00020  
1cb80 2f 2a 20 55 73 65 73 20 74 68 65 20 4f 70 65 6e  /* Uses the Open
1cb90 45 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65  Ephemeral opcode
1cba0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 45   */.#define SF_E
1cbb0 78 70 61 6e 64 65 64 20 20 20 20 20 20 20 30 78  xpanded       0x
1cbc0 30 30 30 34 30 20 20 2f 2a 20 73 71 6c 69 74 65  00040  /* sqlite
1cbd0 33 53 65 6c 65 63 74 45 78 70 61 6e 64 28 29 20  3SelectExpand() 
1cbe0 63 61 6c 6c 65 64 20 6f 6e 20 74 68 69 73 20 2a  called on this *
1cbf0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 48 61 73  /.#define SF_Has
1cc00 54 79 70 65 49 6e 66 6f 20 20 20 20 30 78 30 30  TypeInfo    0x00
1cc10 30 38 30 20 20 2f 2a 20 46 52 4f 4d 20 73 75 62  080  /* FROM sub
1cc20 71 75 65 72 69 65 73 20 68 61 76 65 20 54 61 62  queries have Tab
1cc30 6c 65 20 6d 65 74 61 64 61 74 61 20 2a 2f 0a 23  le metadata */.#
1cc40 64 65 66 69 6e 65 20 53 46 5f 43 6f 6d 70 6f 75  define SF_Compou
1cc50 6e 64 20 20 20 20 20 20 20 30 78 30 30 31 30 30  nd       0x00100
1cc60 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 63    /* Part of a c
1cc70 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 2a 2f  ompound query */
1cc80 0a 23 64 65 66 69 6e 65 20 53 46 5f 56 61 6c 75  .#define SF_Valu
1cc90 65 73 20 20 20 20 20 20 20 20 20 30 78 30 30 32  es         0x002
1cca0 30 30 20 20 2f 2a 20 53 79 6e 74 68 65 73 69 7a  00  /* Synthesiz
1ccb0 65 64 20 66 72 6f 6d 20 56 41 4c 55 45 53 20 63  ed from VALUES c
1ccc0 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65  lause */.#define
1ccd0 20 53 46 5f 4d 75 6c 74 69 56 61 6c 75 65 20 20   SF_MultiValue  
1cce0 20 20 20 30 78 30 30 34 30 30 20 20 2f 2a 20 53     0x00400  /* S
1ccf0 69 6e 67 6c 65 20 56 41 4c 55 45 53 20 74 65 72  ingle VALUES ter
1cd00 6d 20 77 69 74 68 20 6d 75 6c 74 69 70 6c 65 20  m with multiple 
1cd10 72 6f 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rows */.#define 
1cd20 53 46 5f 4e 65 73 74 65 64 46 72 6f 6d 20 20 20  SF_NestedFrom   
1cd30 20 20 30 78 30 30 38 30 30 20 20 2f 2a 20 50 61    0x00800  /* Pa
1cd40 72 74 20 6f 66 20 61 20 70 61 72 65 6e 74 68 65  rt of a parenthe
1cd50 73 69 7a 65 64 20 46 52 4f 4d 20 63 6c 61 75 73  sized FROM claus
1cd60 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  e */.#define SF_
1cd70 4d 69 6e 4d 61 78 41 67 67 20 20 20 20 20 20 30  MinMaxAgg      0
1cd80 78 30 31 30 30 30 20 20 2f 2a 20 41 67 67 72 65  x01000  /* Aggre
1cd90 67 61 74 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  gate containing 
1cda0 6d 69 6e 28 29 20 6f 72 20 6d 61 78 28 29 20 2a  min() or max() *
1cdb0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65 63  /.#define SF_Rec
1cdc0 75 72 73 69 76 65 20 20 20 20 20 20 30 78 30 32  ursive      0x02
1cdd0 30 30 30 20 20 2f 2a 20 54 68 65 20 72 65 63 75  000  /* The recu
1cde0 72 73 69 76 65 20 70 61 72 74 20 6f 66 20 61 20  rsive part of a 
1cdf0 72 65 63 75 72 73 69 76 65 20 43 54 45 20 2a 2f  recursive CTE */
1ce00 0a 23 64 65 66 69 6e 65 20 53 46 5f 46 69 78 65  .#define SF_Fixe
1ce10 64 4c 69 6d 69 74 20 20 20 20 20 30 78 30 34 30  dLimit     0x040
1ce20 30 30 20 20 2f 2a 20 6e 53 65 6c 65 63 74 52 6f  00  /* nSelectRo
1ce30 77 20 73 65 74 20 62 79 20 61 20 63 6f 6e 73 74  w set by a const
1ce40 61 6e 74 20 4c 49 4d 49 54 20 2a 2f 0a 23 64 65  ant LIMIT */.#de
1ce50 66 69 6e 65 20 53 46 5f 4d 61 79 62 65 43 6f 6e  fine SF_MaybeCon
1ce60 76 65 72 74 20 20 20 30 78 30 38 30 30 30 20 20  vert   0x08000  
1ce70 2f 2a 20 4e 65 65 64 20 63 6f 6e 76 65 72 74 43  /* Need convertC
1ce80 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53  ompoundSelectToS
1ce90 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 23 64 65  ubquery() */.#de
1cea0 66 69 6e 65 20 53 46 5f 43 6f 6e 76 65 72 74 65  fine SF_Converte
1ceb0 64 20 20 20 20 20 20 30 78 31 30 30 30 30 20 20  d      0x10000  
1cec0 2f 2a 20 42 79 20 63 6f 6e 76 65 72 74 43 6f 6d  /* By convertCom
1ced0 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62  poundSelectToSub
1cee0 71 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66 69  query() */.#defi
1cef0 6e 65 20 53 46 5f 49 6e 63 6c 75 64 65 48 69 64  ne SF_IncludeHid
1cf00 64 65 6e 20 20 30 78 32 30 30 30 30 20 20 2f 2a  den  0x20000  /*
1cf10 20 49 6e 63 6c 75 64 65 20 68 69 64 64 65 6e 20   Include hidden 
1cf20 63 6f 6c 75 6d 6e 73 20 69 6e 20 6f 75 74 70 75  columns in outpu
1cf30 74 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  t */.../*.** The
1cf40 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20 53 45   results of a SE
1cf50 4c 45 43 54 20 63 61 6e 20 62 65 20 64 69 73 74  LECT can be dist
1cf60 72 69 62 75 74 65 64 20 69 6e 20 73 65 76 65 72  ributed in sever
1cf70 61 6c 20 77 61 79 73 2c 20 61 73 20 64 65 66 69  al ways, as defi
1cf80 6e 65 64 0a 2a 2a 20 62 79 20 6f 6e 65 20 6f 66  ned.** by one of
1cf90 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   the following m
1cfa0 61 63 72 6f 73 2e 20 20 54 68 65 20 22 53 52 54  acros.  The "SRT
1cfb0 22 20 70 72 65 66 69 78 20 6d 65 61 6e 73 20 22  " prefix means "
1cfc0 53 45 4c 45 43 54 20 52 65 73 75 6c 74 0a 2a 2a  SELECT Result.**
1cfd0 20 54 79 70 65 22 2e 0a 2a 2a 0a 2a 2a 20 20 20   Type"..**.**   
1cfe0 20 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20    SRT_Union     
1cff0 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20    Store results 
1d000 61 73 20 61 20 6b 65 79 20 69 6e 20 61 20 74 65  as a key in a te
1d010 6d 70 6f 72 61 72 79 20 69 6e 64 65 78 0a 2a 2a  mporary index.**
1d020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d030 20 20 20 20 20 69 64 65 6e 74 69 66 69 65 64 20       identified 
1d040 62 79 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  by pDest->iSDPar
1d050 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  m..**.**     SRT
1d060 5f 45 78 63 65 70 74 20 20 20 20 20 20 52 65 6d  _Except      Rem
1d070 6f 76 65 20 72 65 73 75 6c 74 73 20 66 72 6f 6d  ove results from
1d080 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 69   the temporary i
1d090 6e 64 65 78 20 70 44 65 73 74 2d 3e 69 53 44 50  ndex pDest->iSDP
1d0a0 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  arm..**.**     S
1d0b0 52 54 5f 45 78 69 73 74 73 20 20 20 20 20 20 53  RT_Exists      S
1d0c0 74 6f 72 65 20 61 20 31 20 69 6e 20 6d 65 6d 6f  tore a 1 in memo
1d0d0 72 79 20 63 65 6c 6c 20 70 44 65 73 74 2d 3e 69  ry cell pDest->i
1d0e0 53 44 50 61 72 6d 20 69 66 20 74 68 65 20 72 65  SDParm if the re
1d0f0 73 75 6c 74 0a 2a 2a 20 20 20 20 20 20 20 20 20  sult.**         
1d100 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
1d110 69 73 20 6e 6f 74 20 65 6d 70 74 79 2e 0a 2a 2a  is not empty..**
1d120 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 63  .**     SRT_Disc
1d130 61 72 64 20 20 20 20 20 54 68 72 6f 77 20 74 68  ard     Throw th
1d140 65 20 72 65 73 75 6c 74 73 20 61 77 61 79 2e 20  e results away. 
1d150 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79   This is used by
1d160 20 53 45 4c 45 43 54 0a 2a 2a 20 20 20 20 20 20   SELECT.**      
1d170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1d180 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e  tatements within
1d190 20 74 72 69 67 67 65 72 73 20 77 68 6f 73 65 20   triggers whose 
1d1a0 6f 6e 6c 79 20 70 75 72 70 6f 73 65 20 69 73 0a  only purpose is.
1d1b0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1d1c0 20 20 20 20 20 20 20 74 68 65 20 73 69 64 65 2d         the side-
1d1d0 65 66 66 65 63 74 73 20 6f 66 20 66 75 6e 63 74  effects of funct
1d1e0 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20  ions..**.** All 
1d1f0 6f 66 20 74 68 65 20 61 62 6f 76 65 20 61 72 65  of the above are
1d200 20 66 72 65 65 20 74 6f 20 69 67 6e 6f 72 65 20   free to ignore 
1d210 74 68 65 69 72 20 4f 52 44 45 52 20 42 59 20 63  their ORDER BY c
1d220 6c 61 75 73 65 2e 20 54 68 6f 73 65 20 74 68 61  lause. Those tha
1d230 74 0a 2a 2a 20 66 6f 6c 6c 6f 77 20 6d 75 73 74  t.** follow must
1d240 20 68 6f 6e 6f 72 20 74 68 65 20 4f 52 44 45 52   honor the ORDER
1d250 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a   BY clause..**.*
1d260 2a 20 20 20 20 20 53 52 54 5f 4f 75 74 70 75 74  *     SRT_Output
1d270 20 20 20 20 20 20 47 65 6e 65 72 61 74 65 20 61        Generate a
1d280 20 72 6f 77 20 6f 66 20 6f 75 74 70 75 74 20 28   row of output (
1d290 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 52 65 73  using the OP_Res
1d2a0 75 6c 74 52 6f 77 0a 2a 2a 20 20 20 20 20 20 20  ultRow.**       
1d2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 70                op
1d2c0 63 6f 64 65 29 20 66 6f 72 20 65 61 63 68 20 72  code) for each r
1d2d0 6f 77 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74  ow in the result
1d2e0 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20   set..**.**     
1d2f0 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20  SRT_Mem         
1d300 4f 6e 6c 79 20 76 61 6c 69 64 20 69 66 20 74 68  Only valid if th
1d310 65 20 72 65 73 75 6c 74 20 69 73 20 61 20 73 69  e result is a si
1d320 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20  ngle column..** 
1d330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d340 20 20 20 20 53 74 6f 72 65 20 74 68 65 20 66 69      Store the fi
1d350 72 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68  rst column of th
1d360 65 20 66 69 72 73 74 20 72 65 73 75 6c 74 20 72  e first result r
1d370 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ow.**           
1d380 20 20 20 20 20 20 20 20 20 20 69 6e 20 72 65 67            in reg
1d390 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53 44  ister pDest->iSD
1d3a0 50 61 72 6d 20 74 68 65 6e 20 61 62 61 6e 64 6f  Parm then abando
1d3b0 6e 20 74 68 65 20 72 65 73 74 0a 2a 2a 20 20 20  n the rest.**   
1d3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d3d0 20 20 6f 66 20 74 68 65 20 71 75 65 72 79 2e 20    of the query. 
1d3e0 20 54 68 69 73 20 64 65 73 74 69 6e 61 74 69 6f   This destinatio
1d3f0 6e 20 69 6d 70 6c 69 65 73 20 22 4c 49 4d 49 54  n implies "LIMIT
1d400 20 31 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53   1"..**.**     S
1d410 52 54 5f 53 65 74 20 20 20 20 20 20 20 20 20 54  RT_Set         T
1d420 68 65 20 72 65 73 75 6c 74 20 6d 75 73 74 20 62  he result must b
1d430 65 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d  e a single colum
1d440 6e 2e 20 20 53 74 6f 72 65 20 65 61 63 68 0a 2a  n.  Store each.*
1d450 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1d460 20 20 20 20 20 20 72 6f 77 20 6f 66 20 72 65 73        row of res
1d470 75 6c 74 20 61 73 20 74 68 65 20 6b 65 79 20 69  ult as the key i
1d480 6e 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69  n table pDest->i
1d490 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20  SDParm..**      
1d4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41                 A
1d4b0 70 70 6c 79 20 74 68 65 20 61 66 66 69 6e 69 74  pply the affinit
1d4c0 79 20 70 44 65 73 74 2d 3e 61 66 66 53 64 73 74  y pDest->affSdst
1d4d0 20 62 65 66 6f 72 65 20 73 74 6f 72 69 6e 67 0a   before storing.
1d4e0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1d4f0 20 20 20 20 20 20 20 72 65 73 75 6c 74 73 2e 20         results. 
1d500 20 55 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65   Used to impleme
1d510 6e 74 20 22 49 4e 20 28 53 45 4c 45 43 54 20 2e  nt "IN (SELECT .
1d520 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ..)"..**.**     
1d530 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20  SRT_EphemTab    
1d540 43 72 65 61 74 65 20 61 6e 20 74 65 6d 70 6f 72  Create an tempor
1d550 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d  ary table pDest-
1d560 3e 69 53 44 50 61 72 6d 20 61 6e 64 20 73 74 6f  >iSDParm and sto
1d570 72 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  re.**           
1d580 20 20 20 20 20 20 20 20 20 20 74 68 65 20 72 65            the re
1d590 73 75 6c 74 20 74 68 65 72 65 2e 20 54 68 65 20  sult there. The 
1d5a0 63 75 72 73 6f 72 20 69 73 20 6c 65 66 74 20 6f  cursor is left o
1d5b0 70 65 6e 20 61 66 74 65 72 0a 2a 2a 20 20 20 20  pen after.**    
1d5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d5d0 20 72 65 74 75 72 6e 69 6e 67 2e 20 20 54 68 69   returning.  Thi
1d5e0 73 20 69 73 20 6c 69 6b 65 20 53 52 54 5f 54 61  s is like SRT_Ta
1d5f0 62 6c 65 20 65 78 63 65 70 74 20 74 68 61 74 0a  ble except that.
1d600 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1d610 20 20 20 20 20 20 20 74 68 69 73 20 64 65 73 74         this dest
1d620 69 6e 61 74 69 6f 6e 20 75 73 65 73 20 4f 50 5f  ination uses OP_
1d630 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 74 6f  OpenEphemeral to
1d640 20 63 72 65 61 74 65 0a 2a 2a 20 20 20 20 20 20   create.**      
1d650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1d660 68 65 20 74 61 62 6c 65 20 66 69 72 73 74 2e 0a  he table first..
1d670 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 43 6f  **.**     SRT_Co
1d680 72 6f 75 74 69 6e 65 20 20 20 47 65 6e 65 72 61  routine   Genera
1d690 74 65 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20  te a co-routine 
1d6a0 74 68 61 74 20 72 65 74 75 72 6e 73 20 61 20 6e  that returns a n
1d6b0 65 77 20 72 6f 77 20 6f 66 0a 2a 2a 20 20 20 20  ew row of.**    
1d6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d6d0 20 72 65 73 75 6c 74 73 20 65 61 63 68 20 74 69   results each ti
1d6e0 6d 65 20 69 74 20 69 73 20 69 6e 76 6f 6b 65 64  me it is invoked
1d6f0 2e 20 20 54 68 65 20 65 6e 74 72 79 20 70 6f 69  .  The entry poi
1d700 6e 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  nt.**           
1d710 20 20 20 20 20 20 20 20 20 20 6f 66 20 74 68 65            of the
1d720 20 63 6f 2d 72 6f 75 74 69 6e 65 20 69 73 20 73   co-routine is s
1d730 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
1d740 72 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  r pDest->iSDParm
1d750 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1d760 20 20 20 20 20 20 20 20 61 6e 64 20 74 68 65 20          and the 
1d770 72 65 73 75 6c 74 20 72 6f 77 20 69 73 20 73 74  result row is st
1d780 6f 72 65 64 20 69 6e 20 70 44 65 73 74 2d 3e 6e  ored in pDest->n
1d790 44 65 73 74 20 72 65 67 69 73 74 65 72 73 0a 2a  Dest registers.*
1d7a0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1d7b0 20 20 20 20 20 20 73 74 61 72 74 69 6e 67 20 77        starting w
1d7c0 69 74 68 20 70 44 65 73 74 2d 3e 69 53 64 73 74  ith pDest->iSdst
1d7d0 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1d7e0 54 61 62 6c 65 20 20 20 20 20 20 20 53 74 6f 72  Table       Stor
1d7f0 65 20 72 65 73 75 6c 74 73 20 69 6e 20 74 65 6d  e results in tem
1d800 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65  porary table pDe
1d810 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20  st->iSDParm..** 
1d820 20 20 20 20 53 52 54 5f 46 69 66 6f 20 20 20 20      SRT_Fifo    
1d830 20 20 20 20 54 68 69 73 20 69 73 20 6c 69 6b 65      This is like
1d840 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 65 78   SRT_EphemTab ex
1d850 63 65 70 74 20 74 68 61 74 20 74 68 65 20 74 61  cept that the ta
1d860 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ble.**          
1d870 20 20 20 20 20 20 20 20 20 20 20 69 73 20 61 73             is as
1d880 73 75 6d 65 64 20 74 6f 20 61 6c 72 65 61 64 79  sumed to already
1d890 20 62 65 20 6f 70 65 6e 2e 20 20 53 52 54 5f 46   be open.  SRT_F
1d8a0 69 66 6f 20 68 61 73 0a 2a 2a 20 20 20 20 20 20  ifo has.**      
1d8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1d8c0 68 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 72  he additional pr
1d8d0 6f 70 65 72 74 79 20 6f 66 20 62 65 69 6e 67 20  operty of being 
1d8e0 61 62 6c 65 20 74 6f 20 69 67 6e 6f 72 65 0a 2a  able to ignore.*
1d8f0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1d900 20 20 20 20 20 20 74 68 65 20 4f 52 44 45 52 20        the ORDER 
1d910 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a  BY clause..**.**
1d920 20 20 20 20 20 53 52 54 5f 44 69 73 74 46 69 66       SRT_DistFif
1d930 6f 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c  o    Store resul
1d940 74 73 20 69 6e 20 61 20 74 65 6d 70 6f 72 61 72  ts in a temporar
1d950 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69  y table pDest->i
1d960 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20  SDParm..**      
1d970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42                 B
1d980 75 74 20 61 6c 73 6f 20 75 73 65 20 74 65 6d 70  ut also use temp
1d990 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73  orary table pDes
1d9a0 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20 61 73 0a  t->iSDParm+1 as.
1d9b0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1d9c0 20 20 20 20 20 20 20 61 20 72 65 63 6f 72 64 20         a record 
1d9d0 6f 66 20 61 6c 6c 20 70 72 69 6f 72 20 72 65 73  of all prior res
1d9e0 75 6c 74 73 20 61 6e 64 20 69 67 6e 6f 72 65 20  ults and ignore 
1d9f0 61 6e 79 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a  any duplicate.**
1da00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da10 20 20 20 20 20 72 6f 77 73 2e 20 20 4e 61 6d 65       rows.  Name
1da20 20 6d 65 61 6e 73 3a 20 20 22 44 69 73 74 69 6e   means:  "Distin
1da30 63 74 20 46 69 66 6f 22 2e 0a 2a 2a 0a 2a 2a 20  ct Fifo"..**.** 
1da40 20 20 20 20 53 52 54 5f 51 75 65 75 65 20 20 20      SRT_Queue   
1da50 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74      Store result
1da60 73 20 69 6e 20 70 72 69 6f 72 69 74 79 20 71 75  s in priority qu
1da70 65 75 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61  eue pDest->iSDPa
1da80 72 6d 20 28 72 65 61 6c 6c 79 0a 2a 2a 20 20 20  rm (really.**   
1da90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1daa0 20 20 61 6e 20 69 6e 64 65 78 29 2e 20 20 41 70    an index).  Ap
1dab0 70 65 6e 64 20 61 20 73 65 71 75 65 6e 63 65 20  pend a sequence 
1dac0 6e 75 6d 62 65 72 20 73 6f 20 74 68 61 74 20 61  number so that a
1dad0 6c 6c 20 65 6e 74 72 69 65 73 0a 2a 2a 20 20 20  ll entries.**   
1dae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1daf0 20 20 61 72 65 20 64 69 73 74 69 6e 63 74 2e 0a    are distinct..
1db00 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69  **.**     SRT_Di
1db10 73 74 51 75 65 75 65 20 20 20 53 74 6f 72 65 20  stQueue   Store 
1db20 72 65 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72  results in prior
1db30 69 74 79 20 71 75 65 75 65 20 70 44 65 73 74 2d  ity queue pDest-
1db40 3e 69 53 44 50 61 72 6d 20 6f 6e 6c 79 20 69 66  >iSDParm only if
1db50 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1db60 20 20 20 20 20 20 20 20 74 68 65 20 73 61 6d 65          the same
1db70 20 72 65 63 6f 72 64 20 68 61 73 20 6e 65 76 65   record has neve
1db80 72 20 62 65 65 6e 20 73 74 6f 72 65 64 20 62 65  r been stored be
1db90 66 6f 72 65 2e 20 20 54 68 65 0a 2a 2a 20 20 20  fore.  The.**   
1dba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dbb0 20 20 69 6e 64 65 78 20 61 74 20 70 44 65 73 74    index at pDest
1dbc0 2d 3e 69 53 44 50 61 72 6d 2b 31 20 68 6f 6c 64  ->iSDParm+1 hold
1dbd0 20 61 6c 6c 20 70 72 69 6f 72 20 73 74 6f 72 65   all prior store
1dbe0 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  s..*/.#define SR
1dbf0 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 20 31  T_Union        1
1dc00 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
1dc10 74 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20  t as keys in an 
1dc20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65  index */.#define
1dc30 20 53 52 54 5f 45 78 63 65 70 74 20 20 20 20 20   SRT_Except     
1dc40 20 20 32 20 20 2f 2a 20 52 65 6d 6f 76 65 20 72    2  /* Remove r
1dc50 65 73 75 6c 74 20 66 72 6f 6d 20 61 20 55 4e 49  esult from a UNI
1dc60 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  ON index */.#def
1dc70 69 6e 65 20 53 52 54 5f 45 78 69 73 74 73 20 20  ine SRT_Exists  
1dc80 20 20 20 20 20 33 20 20 2f 2a 20 53 74 6f 72 65       3  /* Store
1dc90 20 31 20 69 66 20 74 68 65 20 72 65 73 75 6c 74   1 if the result
1dca0 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 20 2a 2f   is not empty */
1dcb0 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73  .#define SRT_Dis
1dcc0 63 61 72 64 20 20 20 20 20 20 34 20 20 2f 2a 20  card      4  /* 
1dcd0 44 6f 20 6e 6f 74 20 73 61 76 65 20 74 68 65 20  Do not save the 
1dce0 72 65 73 75 6c 74 73 20 61 6e 79 77 68 65 72 65  results anywhere
1dcf0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1dd00 46 69 66 6f 20 20 20 20 20 20 20 20 20 35 20 20  Fifo         5  
1dd10 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
1dd20 61 73 20 64 61 74 61 20 77 69 74 68 20 61 6e 20  as data with an 
1dd30 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69 64 20  automatic rowid 
1dd40 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44  */.#define SRT_D
1dd50 69 73 74 46 69 66 6f 20 20 20 20 20 36 20 20 2f  istFifo     6  /
1dd60 2a 20 4c 69 6b 65 20 53 52 54 5f 46 69 66 6f 2c  * Like SRT_Fifo,
1dd70 20 62 75 74 20 75 6e 69 71 75 65 20 72 65 73 75   but unique resu
1dd80 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66  lts only */.#def
1dd90 69 6e 65 20 53 52 54 5f 51 75 65 75 65 20 20 20  ine SRT_Queue   
1dda0 20 20 20 20 20 37 20 20 2f 2a 20 53 74 6f 72 65       7  /* Store
1ddb0 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 71 75   result in an qu
1ddc0 65 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  eue */.#define S
1ddd0 52 54 5f 44 69 73 74 51 75 65 75 65 20 20 20 20  RT_DistQueue    
1dde0 38 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 51  8  /* Like SRT_Q
1ddf0 75 65 75 65 2c 20 62 75 74 20 75 6e 69 71 75 65  ueue, but unique
1de00 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f   results only */
1de10 0a 0a 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42  ../* The ORDER B
1de20 59 20 63 6c 61 75 73 65 20 69 73 20 69 67 6e 6f  Y clause is igno
1de30 72 65 64 20 66 6f 72 20 61 6c 6c 20 6f 66 20 74  red for all of t
1de40 68 65 20 61 62 6f 76 65 20 2a 2f 0a 23 64 65 66  he above */.#def
1de50 69 6e 65 20 49 67 6e 6f 72 61 62 6c 65 4f 72 64  ine IgnorableOrd
1de60 65 72 62 79 28 58 29 20 28 28 58 2d 3e 65 44 65  erby(X) ((X->eDe
1de70 73 74 29 3c 3d 53 52 54 5f 44 69 73 74 51 75 65  st)<=SRT_DistQue
1de80 75 65 29 0a 0a 23 64 65 66 69 6e 65 20 53 52 54  ue)..#define SRT
1de90 5f 4f 75 74 70 75 74 20 20 20 20 20 20 20 39 20  _Output       9 
1dea0 20 2f 2a 20 4f 75 74 70 75 74 20 65 61 63 68 20   /* Output each 
1deb0 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f  row of result */
1dec0 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4d 65 6d  .#define SRT_Mem
1ded0 20 20 20 20 20 20 20 20 20 31 30 20 20 2f 2a 20           10  /* 
1dee0 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20  Store result in 
1def0 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f  a memory cell */
1df00 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 53 65 74  .#define SRT_Set
1df10 20 20 20 20 20 20 20 20 20 31 31 20 20 2f 2a 20           11  /* 
1df20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73  Store results as
1df30 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65   keys in an inde
1df40 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  x */.#define SRT
1df50 5f 45 70 68 65 6d 54 61 62 20 20 20 20 31 32 20  _EphemTab    12 
1df60 20 2f 2a 20 43 72 65 61 74 65 20 74 72 61 6e 73   /* Create trans
1df70 69 65 6e 74 20 74 61 62 20 61 6e 64 20 73 74 6f  ient tab and sto
1df80 72 65 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c  re like SRT_Tabl
1df90 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  e */.#define SRT
1dfa0 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 31 33 20  _Coroutine   13 
1dfb0 20 2f 2a 20 47 65 6e 65 72 61 74 65 20 61 20 73   /* Generate a s
1dfc0 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 72 65 73  ingle row of res
1dfd0 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ult */.#define S
1dfe0 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20 31  RT_Table       1
1dff0 34 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  4  /* Store resu
1e000 6c 74 20 61 73 20 64 61 74 61 20 77 69 74 68 20  lt as data with 
1e010 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77  an automatic row
1e020 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  id */../*.** An 
1e030 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
1e040 20 6f 62 6a 65 63 74 20 64 65 73 63 72 69 62 65   object describe
1e050 73 20 77 68 65 72 65 20 74 6f 20 70 75 74 20 6f  s where to put o
1e060 66 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  f the results of
1e070 0a 2a 2a 20 61 20 53 45 4c 45 43 54 20 73 74 61  .** a SELECT sta
1e080 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63  tement..*/.struc
1e090 74 20 53 65 6c 65 63 74 44 65 73 74 20 7b 0a 20  t SelectDest {. 
1e0a0 20 75 38 20 65 44 65 73 74 3b 20 20 20 20 20 20   u8 eDest;      
1e0b0 20 20 20 20 20 20 2f 2a 20 48 6f 77 20 74 6f 20        /* How to 
1e0c0 64 69 73 70 6f 73 65 20 6f 66 20 74 68 65 20 72  dispose of the r
1e0d0 65 73 75 6c 74 73 2e 20 20 4f 6e 20 6f 66 20 53  esults.  On of S
1e0e0 52 54 5f 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a 20  RT_* above. */. 
1e0f0 20 69 6e 74 20 69 53 44 50 61 72 6d 3b 20 20 20   int iSDParm;   
1e100 20 20 20 20 20 20 2f 2a 20 41 20 70 61 72 61 6d        /* A param
1e110 65 74 65 72 20 75 73 65 64 20 62 79 20 74 68 65  eter used by the
1e120 20 65 44 65 73 74 20 64 69 73 70 6f 73 61 6c 20   eDest disposal 
1e130 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 69 6e 74 20  method */.  int 
1e140 69 53 64 73 74 3b 20 20 20 20 20 20 20 20 20 20  iSdst;          
1e150 20 2f 2a 20 42 61 73 65 20 72 65 67 69 73 74 65   /* Base registe
1e160 72 20 77 68 65 72 65 20 72 65 73 75 6c 74 73 20  r where results 
1e170 61 72 65 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20  are written */. 
1e180 20 69 6e 74 20 6e 53 64 73 74 3b 20 20 20 20 20   int nSdst;     
1e190 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1e1a0 6f 66 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c  of registers all
1e1b0 6f 63 61 74 65 64 20 2a 2f 0a 20 20 63 68 61 72  ocated */.  char
1e1c0 20 2a 7a 41 66 66 53 64 73 74 3b 20 20 20 20 20   *zAffSdst;     
1e1d0 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 75 73 65   /* Affinity use
1e1e0 64 20 77 68 65 6e 20 65 44 65 73 74 3d 3d 53 52  d when eDest==SR
1e1f0 54 5f 53 65 74 20 2a 2f 0a 20 20 45 78 70 72 4c  T_Set */.  ExprL
1e200 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20  ist *pOrderBy;  
1e210 2f 2a 20 4b 65 79 20 63 6f 6c 75 6d 6e 73 20 66  /* Key columns f
1e220 6f 72 20 53 52 54 5f 51 75 65 75 65 20 61 6e 64  or SRT_Queue and
1e230 20 53 52 54 5f 44 69 73 74 51 75 65 75 65 20 2a   SRT_DistQueue *
1e240 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69  /.};../*.** Duri
1e250 6e 67 20 63 6f 64 65 20 67 65 6e 65 72 61 74 69  ng code generati
1e260 6f 6e 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 73  on of statements
1e270 20 74 68 61 74 20 64 6f 20 69 6e 73 65 72 74 73   that do inserts
1e280 20 69 6e 74 6f 20 41 55 54 4f 49 4e 43 52 45 4d   into AUTOINCREM
1e290 45 4e 54 0a 2a 2a 20 74 61 62 6c 65 73 2c 20 74  ENT.** tables, t
1e2a0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66  he following inf
1e2b0 6f 72 6d 61 74 69 6f 6e 20 69 73 20 61 74 74 61  ormation is atta
1e2c0 63 68 65 64 20 74 6f 20 74 68 65 20 54 61 62 6c  ched to the Tabl
1e2d0 65 2e 75 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a  e.u.autoInc.p.**
1e2e0 20 70 6f 69 6e 74 65 72 20 6f 66 20 65 61 63 68   pointer of each
1e2f0 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 74   autoincrement t
1e300 61 62 6c 65 20 74 6f 20 72 65 63 6f 72 64 20 73  able to record s
1e310 6f 6d 65 20 73 69 64 65 20 69 6e 66 6f 72 6d 61  ome side informa
1e320 74 69 6f 6e 20 74 68 61 74 0a 2a 2a 20 74 68 65  tion that.** the
1e330 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20   code generator 
1e340 6e 65 65 64 73 2e 20 20 57 65 20 68 61 76 65 20  needs.  We have 
1e350 74 6f 20 6b 65 65 70 20 70 65 72 2d 74 61 62 6c  to keep per-tabl
1e360 65 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0a  e autoincrement.
1e370 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69  ** information i
1e380 6e 20 63 61 73 65 20 69 6e 73 65 72 74 73 20 61  n case inserts a
1e390 72 65 20 64 6f 6e 65 20 77 69 74 68 69 6e 20 74  re done within t
1e3a0 72 69 67 67 65 72 73 2e 20 20 54 72 69 67 67 65  riggers.  Trigge
1e3b0 72 73 20 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72  rs do not.** nor
1e3c0 6d 61 6c 6c 79 20 63 6f 6f 72 64 69 6e 61 74 65  mally coordinate
1e3d0 20 74 68 65 69 72 20 61 63 74 69 76 69 74 69 65   their activitie
1e3e0 73 2c 20 62 75 74 20 77 65 20 64 6f 20 6e 65 65  s, but we do nee
1e3f0 64 20 74 6f 20 63 6f 6f 72 64 69 6e 61 74 65 20  d to coordinate 
1e400 74 68 65 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20 61  the.** loading a
1e410 6e 64 20 73 61 76 69 6e 67 20 6f 66 20 61 75 74  nd saving of aut
1e420 6f 69 6e 63 72 65 6d 65 6e 74 20 69 6e 66 6f 72  oincrement infor
1e430 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  mation..*/.struc
1e440 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a  t AutoincInfo {.
1e450 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70    AutoincInfo *p
1e460 4e 65 78 74 3b 20 20 20 2f 2a 20 4e 65 78 74 20  Next;   /* Next 
1e470 69 6e 66 6f 20 62 6c 6f 63 6b 20 69 6e 20 61 20  info block in a 
1e480 6c 69 73 74 20 6f 66 20 74 68 65 6d 20 61 6c 6c  list of them all
1e490 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61   */.  Table *pTa
1e4a0 62 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  b;          /* T
1e4b0 61 62 6c 65 20 74 68 69 73 20 69 6e 66 6f 20 62  able this info b
1e4c0 6c 6f 63 6b 20 72 65 66 65 72 73 20 74 6f 20 2a  lock refers to *
1e4d0 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20  /.  int iDb;    
1e4e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
1e4f0 65 78 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44  ex in sqlite3.aD
1e500 62 5b 5d 20 6f 66 20 64 61 74 61 62 61 73 65 20  b[] of database 
1e510 68 6f 6c 64 69 6e 67 20 70 54 61 62 20 2a 2f 0a  holding pTab */.
1e520 20 20 69 6e 74 20 72 65 67 43 74 72 3b 20 20 20    int regCtr;   
1e530 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72          /* Memor
1e540 79 20 72 65 67 69 73 74 65 72 20 68 6f 6c 64 69  y register holdi
1e550 6e 67 20 74 68 65 20 72 6f 77 69 64 20 63 6f 75  ng the rowid cou
1e560 6e 74 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  nter */.};../*.*
1e570 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 63 6f  * Size of the co
1e580 6c 75 6d 6e 20 63 61 63 68 65 0a 2a 2f 0a 23 69  lumn cache.*/.#i
1e590 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4e 5f 43  fndef SQLITE_N_C
1e5a0 4f 4c 43 41 43 48 45 0a 23 20 64 65 66 69 6e 65  OLCACHE.# define
1e5b0 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43   SQLITE_N_COLCAC
1e5c0 48 45 20 31 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  HE 10.#endif../*
1e5d0 0a 2a 2a 20 41 74 20 6c 65 61 73 74 20 6f 6e 65  .** At least one
1e5e0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
1e5f0 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
1e600 74 75 72 65 20 69 73 20 63 72 65 61 74 65 64 20  ture is created 
1e610 66 6f 72 20 65 61 63 68 0a 2a 2a 20 74 72 69 67  for each.** trig
1e620 67 65 72 20 74 68 61 74 20 6d 61 79 20 62 65 20  ger that may be 
1e630 66 69 72 65 64 20 77 68 69 6c 65 20 70 61 72 73  fired while pars
1e640 69 6e 67 20 61 6e 20 49 4e 53 45 52 54 2c 20 55  ing an INSERT, U
1e650 50 44 41 54 45 20 6f 72 20 44 45 4c 45 54 45 0a  PDATE or DELETE.
1e660 2a 2a 20 73 74 61 74 65 6d 65 6e 74 2e 20 41 6c  ** statement. Al
1e670 6c 20 73 75 63 68 20 6f 62 6a 65 63 74 73 20 61  l such objects a
1e680 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  re stored in the
1e690 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61   linked list hea
1e6a0 64 65 64 20 61 74 0a 2a 2a 20 50 61 72 73 65 2e  ded at.** Parse.
1e6b0 70 54 72 69 67 67 65 72 50 72 67 20 61 6e 64 20  pTriggerPrg and 
1e6c0 64 65 6c 65 74 65 64 20 6f 6e 63 65 20 73 74 61  deleted once sta
1e6d0 74 65 6d 65 6e 74 20 63 6f 6d 70 69 6c 61 74 69  tement compilati
1e6e0 6f 6e 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 63  on has been.** c
1e6f0 6f 6d 70 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  ompleted..**.** 
1e700 41 20 56 64 62 65 20 73 75 62 2d 70 72 6f 67 72  A Vdbe sub-progr
1e710 61 6d 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e  am that implemen
1e720 74 73 20 74 68 65 20 62 6f 64 79 20 61 6e 64 20  ts the body and 
1e730 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74  WHEN clause of t
1e740 72 69 67 67 65 72 0a 2a 2a 20 54 72 69 67 67 65  rigger.** Trigge
1e750 72 50 72 67 2e 70 54 72 69 67 67 65 72 2c 20 61  rPrg.pTrigger, a
1e760 73 73 75 6d 69 6e 67 20 61 20 64 65 66 61 75 6c  ssuming a defaul
1e770 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c  t ON CONFLICT cl
1e780 61 75 73 65 20 6f 66 0a 2a 2a 20 54 72 69 67 67  ause of.** Trigg
1e790 65 72 50 72 67 2e 6f 72 63 6f 6e 66 2c 20 69 73  erPrg.orconf, is
1e7a0 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 54   stored in the T
1e7b0 72 69 67 67 65 72 50 72 67 2e 70 50 72 6f 67 72  riggerPrg.pProgr
1e7c0 61 6d 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 20  am variable..** 
1e7d0 54 68 65 20 50 61 72 73 65 2e 70 54 72 69 67 67  The Parse.pTrigg
1e7e0 65 72 50 72 67 20 6c 69 73 74 20 6e 65 76 65 72  erPrg list never
1e7f0 20 63 6f 6e 74 61 69 6e 73 20 74 77 6f 20 65 6e   contains two en
1e800 74 72 69 65 73 20 77 69 74 68 20 74 68 65 20 73  tries with the s
1e810 61 6d 65 0a 2a 2a 20 76 61 6c 75 65 73 20 66 6f  ame.** values fo
1e820 72 20 62 6f 74 68 20 70 54 72 69 67 67 65 72 20  r both pTrigger 
1e830 61 6e 64 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a  and orconf..**.*
1e840 2a 20 54 68 65 20 54 72 69 67 67 65 72 50 72 67  * The TriggerPrg
1e850 2e 61 43 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61 72  .aColmask[0] var
1e860 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20  iable is set to 
1e870 61 20 6d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20  a mask of old.* 
1e880 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 61 63 63 65 73  columns.** acces
1e890 73 65 64 20 28 6f 72 20 73 65 74 20 74 6f 20 30  sed (or set to 0
1e8a0 20 66 6f 72 20 74 72 69 67 67 65 72 73 20 66 69   for triggers fi
1e8b0 72 65 64 20 61 73 20 61 20 72 65 73 75 6c 74 20  red as a result 
1e8c0 6f 66 20 49 4e 53 45 52 54 0a 2a 2a 20 73 74 61  of INSERT.** sta
1e8d0 74 65 6d 65 6e 74 73 29 2e 20 53 69 6d 69 6c 61  tements). Simila
1e8e0 72 6c 79 2c 20 74 68 65 20 54 72 69 67 67 65 72  rly, the Trigger
1e8f0 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20  Prg.aColmask[1] 
1e900 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20  variable is set 
1e910 74 6f 0a 2a 2a 20 61 20 6d 61 73 6b 20 6f 66 20  to.** a mask of 
1e920 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75 73  new.* columns us
1e930 65 64 20 62 79 20 74 68 65 20 70 72 6f 67 72 61  ed by the progra
1e940 6d 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72 69  m..*/.struct Tri
1e950 67 67 65 72 50 72 67 20 7b 0a 20 20 54 72 69 67  ggerPrg {.  Trig
1e960 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20  ger *pTrigger;  
1e970 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20 74      /* Trigger t
1e980 68 69 73 20 70 72 6f 67 72 61 6d 20 77 61 73 20  his program was 
1e990 63 6f 64 65 64 20 66 72 6f 6d 20 2a 2f 0a 20 20  coded from */.  
1e9a0 54 72 69 67 67 65 72 50 72 67 20 2a 70 4e 65 78  TriggerPrg *pNex
1e9b0 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20  t;      /* Next 
1e9c0 65 6e 74 72 79 20 69 6e 20 50 61 72 73 65 2e 70  entry in Parse.p
1e9d0 54 72 69 67 67 65 72 50 72 67 20 6c 69 73 74 20  TriggerPrg list 
1e9e0 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d 20  */.  SubProgram 
1e9f0 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20  *pProgram;   /* 
1ea00 50 72 6f 67 72 61 6d 20 69 6d 70 6c 65 6d 65 6e  Program implemen
1ea10 74 69 6e 67 20 70 54 72 69 67 67 65 72 2f 6f 72  ting pTrigger/or
1ea20 63 6f 6e 66 20 2a 2f 0a 20 20 69 6e 74 20 6f 72  conf */.  int or
1ea30 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20  conf;           
1ea40 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20    /* Default ON 
1ea50 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20  CONFLICT policy 
1ea60 2a 2f 0a 20 20 75 33 32 20 61 43 6f 6c 6d 61 73  */.  u32 aColmas
1ea70 6b 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20  k[2];        /* 
1ea80 4d 61 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20  Masks of old.*, 
1ea90 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61 63  new.* columns ac
1eaa0 63 65 73 73 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  cessed */.};../*
1eab0 0a 2a 2a 20 54 68 65 20 79 44 62 4d 61 73 6b 20  .** The yDbMask 
1eac0 64 61 74 61 74 79 70 65 20 66 6f 72 20 74 68 65  datatype for the
1ead0 20 62 69 74 6d 61 73 6b 20 6f 66 20 61 6c 6c 20   bitmask of all 
1eae0 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
1eaf0 65 73 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54  es..*/.#if SQLIT
1eb00 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33  E_MAX_ATTACHED>3
1eb10 30 0a 20 20 74 79 70 65 64 65 66 20 75 6e 73 69  0.  typedef unsi
1eb20 67 6e 65 64 20 63 68 61 72 20 79 44 62 4d 61 73  gned char yDbMas
1eb30 6b 5b 28 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54  k[(SQLITE_MAX_AT
1eb40 54 41 43 48 45 44 2b 39 29 2f 38 5d 3b 0a 23 20  TACHED+9)/8];.# 
1eb50 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 54 65 73  define DbMaskTes
1eb60 74 28 4d 2c 49 29 20 20 20 20 28 28 28 4d 29 5b  t(M,I)    (((M)[
1eb70 28 49 29 2f 38 5d 26 28 31 3c 3c 28 28 49 29 26  (I)/8]&(1<<((I)&
1eb80 37 29 29 29 21 3d 30 29 0a 23 20 64 65 66 69 6e  7)))!=0).# defin
1eb90 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20  e DbMaskZero(M) 
1eba0 20 20 20 20 20 6d 65 6d 73 65 74 28 28 4d 29 2c       memset((M),
1ebb0 30 2c 73 69 7a 65 6f 66 28 4d 29 29 0a 23 20 64  0,sizeof(M)).# d
1ebc0 65 66 69 6e 65 20 44 62 4d 61 73 6b 53 65 74 28  efine DbMaskSet(
1ebd0 4d 2c 49 29 20 20 20 20 20 28 4d 29 5b 28 49 29  M,I)     (M)[(I)
1ebe0 2f 38 5d 7c 3d 28 31 3c 3c 28 28 49 29 26 37 29  /8]|=(1<<((I)&7)
1ebf0 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ).# define DbMas
1ec00 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 73 71  kAllZero(M)   sq
1ec10 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65  lite3DbMaskAllZe
1ec20 72 6f 28 4d 29 0a 23 20 64 65 66 69 6e 65 20 44  ro(M).# define D
1ec30 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20  bMaskNonZero(M) 
1ec40 20 20 28 73 71 6c 69 74 65 33 44 62 4d 61 73 6b    (sqlite3DbMask
1ec50 41 6c 6c 5a 65 72 6f 28 4d 29 3d 3d 30 29 0a 23  AllZero(M)==0).#
1ec60 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20 75  else.  typedef u
1ec70 6e 73 69 67 6e 65 64 20 69 6e 74 20 79 44 62 4d  nsigned int yDbM
1ec80 61 73 6b 3b 0a 23 20 64 65 66 69 6e 65 20 44 62  ask;.# define Db
1ec90 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20  MaskTest(M,I)   
1eca0 20 28 28 28 4d 29 26 28 28 28 79 44 62 4d 61 73   (((M)&(((yDbMas
1ecb0 6b 29 31 29 3c 3c 28 49 29 29 29 21 3d 30 29 0a  k)1)<<(I)))!=0).
1ecc0 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a  # define DbMaskZ
1ecd0 65 72 6f 28 4d 29 20 20 20 20 20 20 28 4d 29 3d  ero(M)      (M)=
1ece0 30 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  0.# define DbMas
1ecf0 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28 4d  kSet(M,I)     (M
1ed00 29 7c 3d 28 28 28 79 44 62 4d 61 73 6b 29 31 29  )|=(((yDbMask)1)
1ed10 3c 3c 28 49 29 29 0a 23 20 64 65 66 69 6e 65 20  <<(I)).# define 
1ed20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29  DbMaskAllZero(M)
1ed30 20 20 20 28 4d 29 3d 3d 30 0a 23 20 64 65 66 69     (M)==0.# defi
1ed40 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f  ne DbMaskNonZero
1ed50 28 4d 29 20 20 20 28 4d 29 21 3d 30 0a 23 65 6e  (M)   (M)!=0.#en
1ed60 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51  dif../*.** An SQ
1ed70 4c 20 70 61 72 73 65 72 20 63 6f 6e 74 65 78 74  L parser context
1ed80 2e 20 20 41 20 63 6f 70 79 20 6f 66 20 74 68 69  .  A copy of thi
1ed90 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20 70  s structure is p
1eda0 61 73 73 65 64 20 74 68 72 6f 75 67 68 0a 2a 2a  assed through.**
1edb0 20 74 68 65 20 70 61 72 73 65 72 20 61 6e 64 20   the parser and 
1edc0 64 6f 77 6e 20 69 6e 74 6f 20 61 6c 6c 20 74 68  down into all th
1edd0 65 20 70 61 72 73 65 72 20 61 63 74 69 6f 6e 20  e parser action 
1ede0 72 6f 75 74 69 6e 65 20 69 6e 20 6f 72 64 65 72  routine in order
1edf0 20 74 6f 0a 2a 2a 20 63 61 72 72 79 20 61 72 6f   to.** carry aro
1ee00 75 6e 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  und information 
1ee10 74 68 61 74 20 69 73 20 67 6c 6f 62 61 6c 20 74  that is global t
1ee20 6f 20 74 68 65 20 65 6e 74 69 72 65 20 70 61 72  o the entire par
1ee30 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74  se..**.** The st
1ee40 72 75 63 74 75 72 65 20 69 73 20 64 69 76 69 64  ructure is divid
1ee50 65 64 20 69 6e 74 6f 20 74 77 6f 20 70 61 72 74  ed into two part
1ee60 73 2e 20 20 57 68 65 6e 20 74 68 65 20 70 61 72  s.  When the par
1ee70 73 65 72 20 61 6e 64 20 63 6f 64 65 0a 2a 2a 20  ser and code.** 
1ee80 67 65 6e 65 72 61 74 65 20 63 61 6c 6c 20 74 68  generate call th
1ee90 65 6d 73 65 6c 76 65 73 20 72 65 63 75 72 73 69  emselves recursi
1eea0 76 65 6c 79 2c 20 74 68 65 20 66 69 72 73 74 20  vely, the first 
1eeb0 70 61 72 74 20 6f 66 20 74 68 65 20 73 74 72 75  part of the stru
1eec0 63 74 75 72 65 0a 2a 2a 20 69 73 20 63 6f 6e 73  cture.** is cons
1eed0 74 61 6e 74 20 62 75 74 20 74 68 65 20 73 65 63  tant but the sec
1eee0 6f 6e 64 20 70 61 72 74 20 69 73 20 72 65 73 65  ond part is rese
1eef0 74 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69  t at the beginni
1ef00 6e 67 20 61 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a  ng and end of.**
1ef10 20 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e 2e   each recursion.
1ef20 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 54 61 62 6c  .**.** The nTabl
1ef30 65 4c 6f 63 6b 20 61 6e 64 20 61 54 61 62 6c 65  eLock and aTable
1ef40 4c 6f 63 6b 20 76 61 72 69 61 62 6c 65 73 20 61  Lock variables a
1ef50 72 65 20 6f 6e 6c 79 20 75 73 65 64 20 69 66 20  re only used if 
1ef60 74 68 65 20 73 68 61 72 65 64 2d 63 61 63 68 65  the shared-cache
1ef70 0a 2a 2a 20 66 65 61 74 75 72 65 20 69 73 20 65  .** feature is e
1ef80 6e 61 62 6c 65 64 20 28 69 66 20 73 71 6c 69 74  nabled (if sqlit
1ef90 65 33 54 73 64 28 29 2d 3e 75 73 65 53 68 61 72  e3Tsd()->useShar
1efa0 65 64 44 61 74 61 20 69 73 20 74 72 75 65 29 2e  edData is true).
1efb0 20 54 68 65 79 20 61 72 65 0a 2a 2a 20 75 73 65   They are.** use
1efc0 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 73  d to store the s
1efd0 65 74 20 6f 66 20 74 61 62 6c 65 2d 6c 6f 63 6b  et of table-lock
1efe0 73 20 72 65 71 75 69 72 65 64 20 62 79 20 74 68  s required by th
1eff0 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69 6e  e statement bein
1f000 67 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 2e 20 46  g.** compiled. F
1f010 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 54  unction sqlite3T
1f020 61 62 6c 65 4c 6f 63 6b 28 29 20 69 73 20 75 73  ableLock() is us
1f030 65 64 20 74 6f 20 61 64 64 20 65 6e 74 72 69 65  ed to add entrie
1f040 73 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 69 73 74  s to the.** list
1f050 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50 61 72 73  ..*/.struct Pars
1f060 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  e {.  sqlite3 *d
1f070 62 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  b;         /* Th
1f080 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
1f090 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 63  structure */.  c
1f0a0 68 61 72 20 2a 7a 45 72 72 4d 73 67 3b 20 20 20  har *zErrMsg;   
1f0b0 20 20 20 20 2f 2a 20 41 6e 20 65 72 72 6f 72 20      /* An error 
1f0c0 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 56 64 62  message */.  Vdb
1f0d0 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20  e *pVdbe;       
1f0e0 20 20 2f 2a 20 41 6e 20 65 6e 67 69 6e 65 20 66    /* An engine f
1f0f0 6f 72 20 65 78 65 63 75 74 69 6e 67 20 64 61 74  or executing dat
1f100 61 62 61 73 65 20 62 79 74 65 63 6f 64 65 20 2a  abase bytecode *
1f110 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20  /.  int rc;     
1f120 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 74 75           /* Retu
1f130 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 65 78 65  rn code from exe
1f140 63 75 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 63  cution */.  u8 c
1f150 6f 6c 4e 61 6d 65 73 53 65 74 3b 20 20 20 20 20  olNamesSet;     
1f160 20 2f 2a 20 54 52 55 45 20 61 66 74 65 72 20 4f   /* TRUE after O
1f170 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61 73  P_ColumnName has
1f180 20 62 65 65 6e 20 69 73 73 75 65 64 20 74 6f 20   been issued to 
1f190 70 56 64 62 65 20 2a 2f 0a 20 20 75 38 20 63 68  pVdbe */.  u8 ch
1f1a0 65 63 6b 53 63 68 65 6d 61 3b 20 20 20 20 20 20  eckSchema;      
1f1b0 2f 2a 20 43 61 75 73 65 73 20 73 63 68 65 6d 61  /* Causes schema
1f1c0 20 63 6f 6f 6b 69 65 20 63 68 65 63 6b 20 61 66   cookie check af
1f1d0 74 65 72 20 61 6e 20 65 72 72 6f 72 20 2a 2f 0a  ter an error */.
1f1e0 20 20 75 38 20 6e 65 73 74 65 64 3b 20 20 20 20    u8 nested;    
1f1f0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1f200 20 6f 66 20 6e 65 73 74 65 64 20 63 61 6c 6c 73   of nested calls
1f210 20 74 6f 20 74 68 65 20 70 61 72 73 65 72 2f 63   to the parser/c
1f220 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f  ode generator */
1f230 0a 20 20 75 38 20 6e 54 65 6d 70 52 65 67 3b 20  .  u8 nTempReg; 
1f240 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1f250 72 20 6f 66 20 74 65 6d 70 6f 72 61 72 79 20 72  r of temporary r
1f260 65 67 69 73 74 65 72 73 20 69 6e 20 61 54 65 6d  egisters in aTem
1f270 70 52 65 67 5b 5d 20 2a 2f 0a 20 20 75 38 20 69  pReg[] */.  u8 i
1f280 73 4d 75 6c 74 69 57 72 69 74 65 3b 20 20 20 20  sMultiWrite;    
1f290 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61 74   /* True if stat
1f2a0 65 6d 65 6e 74 20 6d 61 79 20 6d 6f 64 69 66 79  ement may modify
1f2b0 2f 69 6e 73 65 72 74 20 6d 75 6c 74 69 70 6c 65  /insert multiple
1f2c0 20 72 6f 77 73 20 2a 2f 0a 20 20 75 38 20 6d 61   rows */.  u8 ma
1f2d0 79 41 62 6f 72 74 3b 20 20 20 20 20 20 20 20 20  yAbort;         
1f2e0 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61 74 65  /* True if state
1f2f0 6d 65 6e 74 20 6d 61 79 20 74 68 72 6f 77 20 61  ment may throw a
1f300 6e 20 41 42 4f 52 54 20 65 78 63 65 70 74 69 6f  n ABORT exceptio
1f310 6e 20 2a 2f 0a 20 20 75 38 20 68 61 73 43 6f 6d  n */.  u8 hasCom
1f320 70 6f 75 6e 64 3b 20 20 20 20 20 20 2f 2a 20 4e  pound;      /* N
1f330 65 65 64 20 74 6f 20 69 6e 76 6f 6b 65 20 63 6f  eed to invoke co
1f340 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c  nvertCompoundSel
1f350 65 63 74 54 6f 53 75 62 71 75 65 72 79 28 29 20  ectToSubquery() 
1f360 2a 2f 0a 20 20 75 38 20 6f 6b 43 6f 6e 73 74 46  */.  u8 okConstF
1f370 61 63 74 6f 72 3b 20 20 20 20 2f 2a 20 4f 4b 20  actor;    /* OK 
1f380 74 6f 20 66 61 63 74 6f 72 20 6f 75 74 20 63 6f  to factor out co
1f390 6e 73 74 61 6e 74 73 20 2a 2f 0a 20 20 75 38 20  nstants */.  u8 
1f3a0 64 69 73 61 62 6c 65 4c 6f 6f 6b 61 73 69 64 65  disableLookaside
1f3b0 3b 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74  ; /* Number of t
1f3c0 69 6d 65 73 20 6c 6f 6f 6b 61 73 69 64 65 20 68  imes lookaside h
1f3d0 61 73 20 62 65 65 6e 20 64 69 73 61 62 6c 65 64  as been disabled
1f3e0 20 2a 2f 0a 20 20 75 38 20 6e 43 6f 6c 43 61 63   */.  u8 nColCac
1f3f0 68 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  he;        /* Nu
1f400 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20  mber of entries 
1f410 69 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d 20 2a  in aColCache[] *
1f420 2f 0a 20 20 69 6e 74 20 6e 52 61 6e 67 65 52 65  /.  int nRangeRe
1f430 67 3b 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65  g;       /* Size
1f440 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61 72   of the temporar
1f450 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b  y register block
1f460 20 2a 2f 0a 20 20 69 6e 74 20 69 52 61 6e 67 65   */.  int iRange
1f470 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 46 69  Reg;       /* Fi
1f480 72 73 74 20 72 65 67 69 73 74 65 72 20 69 6e 20  rst register in 
1f490 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74  temporary regist
1f4a0 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e  er block */.  in
1f4b0 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20  t nErr;         
1f4c0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1f4d0 65 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20  errors seen */. 
1f4e0 20 69 6e 74 20 6e 54 61 62 3b 20 20 20 20 20 20   int nTab;      
1f4f0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1f500 6f 66 20 70 72 65 76 69 6f 75 73 6c 79 20 61 6c  of previously al
1f510 6c 6f 63 61 74 65 64 20 56 44 42 45 20 63 75 72  located VDBE cur
1f520 73 6f 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d  sors */.  int nM
1f530 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  em;            /
1f540 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f  * Number of memo
1f550 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20 73 6f  ry cells used so
1f560 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f   far */.  int nO
1f570 70 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f  pAlloc;        /
1f580 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 6c 6f 74  * Number of slot
1f590 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20  s allocated for 
1f5a0 56 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20  Vdbe.aOp[] */.  
1f5b0 69 6e 74 20 73 7a 4f 70 41 6c 6c 6f 63 3b 20 20  int szOpAlloc;  
1f5c0 20 20 20 20 20 2f 2a 20 42 79 74 65 73 20 6f 66       /* Bytes of
1f5d0 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 61 6c   memory space al
1f5e0 6c 6f 63 61 74 65 64 20 66 6f 72 20 56 64 62 65  located for Vdbe
1f5f0 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  .aOp[] */.  int 
1f600 69 53 65 6c 66 54 61 62 3b 20 20 20 20 20 20 20  iSelfTab;       
1f610 20 2f 2a 20 54 61 62 6c 65 20 66 6f 72 20 61 73   /* Table for as
1f620 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 6e  sociated with an
1f630 20 69 6e 64 65 78 20 6f 6e 20 65 78 70 72 2c 20   index on expr, 
1f640 6f 72 20 6e 65 67 61 74 69 76 65 0a 20 20 20 20  or negative.    
1f650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f660 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 62 61 73     ** of the bas
1f670 65 20 72 65 67 69 73 74 65 72 20 64 75 72 69 6e  e register durin
1f680 67 20 63 68 65 63 6b 2d 63 6f 6e 73 74 72 61 69  g check-constrai
1f690 6e 74 20 65 76 61 6c 20 2a 2f 0a 20 20 69 6e 74  nt eval */.  int
1f6a0 20 69 43 61 63 68 65 4c 65 76 65 6c 3b 20 20 20   iCacheLevel;   
1f6b0 20 20 2f 2a 20 43 6f 6c 43 61 63 68 65 20 76 61    /* ColCache va
1f6c0 6c 69 64 20 77 68 65 6e 20 61 43 6f 6c 43 61 63  lid when aColCac
1f6d0 68 65 5b 5d 2e 69 4c 65 76 65 6c 3c 3d 69 43 61  he[].iLevel<=iCa
1f6e0 63 68 65 4c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e  cheLevel */.  in
1f6f0 74 20 69 43 61 63 68 65 43 6e 74 3b 20 20 20 20  t iCacheCnt;    
1f700 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20 75 73     /* Counter us
1f710 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61  ed to generate a
1f720 43 6f 6c 43 61 63 68 65 5b 5d 2e 6c 72 75 20 76  ColCache[].lru v
1f730 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  alues */.  int n
1f740 4c 61 62 65 6c 3b 20 20 20 20 20 20 20 20 20 20  Label;          
1f750 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 61 62  /* Number of lab
1f760 65 6c 73 20 75 73 65 64 20 2a 2f 0a 20 20 69 6e  els used */.  in
1f770 74 20 2a 61 4c 61 62 65 6c 3b 20 20 20 20 20 20  t *aLabel;      
1f780 20 20 20 2f 2a 20 53 70 61 63 65 20 74 6f 20 68     /* Space to h
1f790 6f 6c 64 20 74 68 65 20 6c 61 62 65 6c 73 20 2a  old the labels *
1f7a0 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43  /.  ExprList *pC
1f7b0 6f 6e 73 74 45 78 70 72 3b 2f 2a 20 43 6f 6e 73  onstExpr;/* Cons
1f7c0 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73  tant expressions
1f7d0 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 63 6f 6e 73   */.  Token cons
1f7e0 74 72 61 69 6e 74 4e 61 6d 65 3b 2f 2a 20 4e 61  traintName;/* Na
1f7f0 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 73 74 72  me of the constr
1f800 61 69 6e 74 20 63 75 72 72 65 6e 74 6c 79 20 62  aint currently b
1f810 65 69 6e 67 20 70 61 72 73 65 64 20 2a 2f 0a 20  eing parsed */. 
1f820 20 79 44 62 4d 61 73 6b 20 77 72 69 74 65 4d 61   yDbMask writeMa
1f830 73 6b 3b 20 20 20 2f 2a 20 53 74 61 72 74 20 61  sk;   /* Start a
1f840 20 77 72 69 74 65 20 74 72 61 6e 73 61 63 74 69   write transacti
1f850 6f 6e 20 6f 6e 20 74 68 65 73 65 20 64 61 74 61  on on these data
1f860 62 61 73 65 73 20 2a 2f 0a 20 20 79 44 62 4d 61  bases */.  yDbMa
1f870 73 6b 20 63 6f 6f 6b 69 65 4d 61 73 6b 3b 20 20  sk cookieMask;  
1f880 2f 2a 20 42 69 74 6d 61 73 6b 20 6f 66 20 73 63  /* Bitmask of sc
1f890 68 65 6d 61 20 76 65 72 69 66 69 65 64 20 64 61  hema verified da
1f8a0 74 61 62 61 73 65 73 20 2a 2f 0a 20 20 69 6e 74  tabases */.  int
1f8b0 20 72 65 67 52 6f 77 69 64 3b 20 20 20 20 20 20   regRowid;      
1f8c0 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f    /* Register ho
1f8d0 6c 64 69 6e 67 20 72 6f 77 69 64 20 6f 66 20 43  lding rowid of C
1f8e0 52 45 41 54 45 20 54 41 42 4c 45 20 65 6e 74 72  REATE TABLE entr
1f8f0 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f  y */.  int regRo
1f900 6f 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 52  ot;         /* R
1f910 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
1f920 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72  root page number
1f930 20 66 6f 72 20 6e 65 77 20 6f 62 6a 65 63 74 73   for new objects
1f940 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 41 72   */.  int nMaxAr
1f950 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  g;         /* Ma
1f960 78 20 61 72 67 73 20 70 61 73 73 65 64 20 74 6f  x args passed to
1f970 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 62   user function b
1f980 79 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f  y sub-program */
1f990 0a 23 69 66 20 53 45 4c 45 43 54 54 52 41 43 45  .#if SELECTTRACE
1f9a0 5f 45 4e 41 42 4c 45 44 0a 20 20 69 6e 74 20 6e  _ENABLED.  int n
1f9b0 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20  Select;         
1f9c0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 53 45 4c  /* Number of SEL
1f9d0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20 73  ECT statements s
1f9e0 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65  een */.  int nSe
1f9f0 6c 65 63 74 49 6e 64 65 6e 74 3b 20 20 20 2f 2a  lectIndent;   /*
1fa00 20 48 6f 77 20 66 61 72 20 74 6f 20 69 6e 64 65   How far to inde
1fa10 6e 74 20 53 45 4c 45 43 54 54 52 41 43 45 28 29  nt SELECTTRACE()
1fa20 20 6f 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69   output */.#endi
1fa30 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
1fa40 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43  _OMIT_SHARED_CAC
1fa50 48 45 0a 20 20 69 6e 74 20 6e 54 61 62 6c 65 4c  HE.  int nTableL
1fa60 6f 63 6b 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  ock;        /* N
1fa70 75 6d 62 65 72 20 6f 66 20 6c 6f 63 6b 73 20 69  umber of locks i
1fa80 6e 20 61 54 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a  n aTableLock */.
1fa90 20 20 54 61 62 6c 65 4c 6f 63 6b 20 2a 61 54 61    TableLock *aTa
1faa0 62 6c 65 4c 6f 63 6b 3b 20 2f 2a 20 52 65 71 75  bleLock; /* Requ
1fab0 69 72 65 64 20 74 61 62 6c 65 20 6c 6f 63 6b 73  ired table locks
1fac0 20 66 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68   for shared-cach
1fad0 65 20 6d 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66  e mode */.#endif
1fae0 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a  .  AutoincInfo *
1faf0 70 41 69 6e 63 3b 20 20 2f 2a 20 49 6e 66 6f 72  pAinc;  /* Infor
1fb00 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 41 55 54  mation about AUT
1fb10 4f 49 4e 43 52 45 4d 45 4e 54 20 63 6f 75 6e 74  OINCREMENT count
1fb20 65 72 73 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a  ers */.  Parse *
1fb30 70 54 6f 70 6c 65 76 65 6c 3b 20 20 20 20 2f 2a  pToplevel;    /*
1fb40 20 50 61 72 73 65 20 73 74 72 75 63 74 75 72 65   Parse structure
1fb50 20 66 6f 72 20 6d 61 69 6e 20 70 72 6f 67 72 61   for main progra
1fb60 6d 20 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20  m (or NULL) */. 
1fb70 20 54 61 62 6c 65 20 2a 70 54 72 69 67 67 65 72   Table *pTrigger
1fb80 54 61 62 3b 20 20 2f 2a 20 54 61 62 6c 65 20 74  Tab;  /* Table t
1fb90 72 69 67 67 65 72 73 20 61 72 65 20 62 65 69 6e  riggers are bein
1fba0 67 20 63 6f 64 65 64 20 66 6f 72 20 2a 2f 0a 20  g coded for */. 
1fbb0 20 69 6e 74 20 61 64 64 72 43 72 54 61 62 3b 20   int addrCrTab; 
1fbc0 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73        /* Address
1fbd0 20 6f 66 20 4f 50 5f 43 72 65 61 74 65 42 74 72   of OP_CreateBtr
1fbe0 65 65 20 6f 70 63 6f 64 65 20 6f 6e 20 43 52 45  ee opcode on CRE
1fbf0 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20 75  ATE TABLE */.  u
1fc00 33 32 20 6e 51 75 65 72 79 4c 6f 6f 70 3b 20 20  32 nQueryLoop;  
1fc10 20 20 20 20 2f 2a 20 45 73 74 20 6e 75 6d 62 65      /* Est numbe
1fc20 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e 73 20  r of iterations 
1fc30 6f 66 20 61 20 71 75 65 72 79 20 28 31 30 2a 6c  of a query (10*l
1fc40 6f 67 32 28 4e 29 29 20 2a 2f 0a 20 20 75 33 32  og2(N)) */.  u32
1fc50 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20 20 20 20   oldmask;       
1fc60 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c 64    /* Mask of old
1fc70 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72  .* columns refer
1fc80 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33 32 20 6e  enced */.  u32 n
1fc90 65 77 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20  ewmask;         
1fca0 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a  /* Mask of new.*
1fcb0 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e   columns referen
1fcc0 63 65 64 20 2a 2f 0a 20 20 75 38 20 65 54 72 69  ced */.  u8 eTri
1fcd0 67 67 65 72 4f 70 3b 20 20 20 20 20 20 20 2f 2a  ggerOp;       /*
1fce0 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49   TK_UPDATE, TK_I
1fcf0 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44 45 4c 45  NSERT or TK_DELE
1fd00 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f 72 63 6f  TE */.  u8 eOrco
1fd10 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  nf;          /* 
1fd20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c  Default ON CONFL
1fd30 49 43 54 20 70 6f 6c 69 63 79 20 66 6f 72 20 74  ICT policy for t
1fd40 72 69 67 67 65 72 20 73 74 65 70 73 20 2a 2f 0a  rigger steps */.
1fd50 20 20 75 38 20 64 69 73 61 62 6c 65 54 72 69 67    u8 disableTrig
1fd60 67 65 72 73 3b 20 20 2f 2a 20 54 72 75 65 20 74  gers;  /* True t
1fd70 6f 20 64 69 73 61 62 6c 65 20 74 72 69 67 67 65  o disable trigge
1fd80 72 73 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a  rs */..  /******
1fd90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fda0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fdb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fdc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fdd0 2a 2a 2a 2a 0a 20 20 2a 2a 20 46 69 65 6c 64 73  ****.  ** Fields
1fde0 20 61 62 6f 76 65 20 6d 75 73 74 20 62 65 20 69   above must be i
1fdf0 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 7a 65  nitialized to ze
1fe00 72 6f 2e 20 20 54 68 65 20 66 69 65 6c 64 73 20  ro.  The fields 
1fe10 74 68 61 74 20 66 6f 6c 6c 6f 77 2c 0a 20 20 2a  that follow,.  *
1fe20 2a 20 64 6f 77 6e 20 74 6f 20 74 68 65 20 62 65  * down to the be
1fe30 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 72  ginning of the r
1fe40 65 63 75 72 73 69 76 65 20 73 65 63 74 69 6f 6e  ecursive section
1fe50 2c 20 64 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f  , do not need to
1fe60 20 62 65 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c   be.  ** initial
1fe70 69 7a 65 64 20 61 73 20 74 68 65 79 20 77 69 6c  ized as they wil
1fe80 6c 20 62 65 20 73 65 74 20 62 65 66 6f 72 65 20  l be set before 
1fe90 62 65 69 6e 67 20 75 73 65 64 2e 20 20 54 68 65  being used.  The
1fea0 20 62 6f 75 6e 64 61 72 79 20 69 73 0a 20 20 2a   boundary is.  *
1feb0 2a 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  * determined by 
1fec0 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c 61  offsetof(Parse,a
1fed0 43 6f 6c 43 61 63 68 65 29 2e 0a 20 20 2a 2a 2a  ColCache)..  ***
1fee0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fef0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ff00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ff10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ff20 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 73 74 72 75  *******/..  stru
1ff30 63 74 20 79 43 6f 6c 43 61 63 68 65 20 7b 0a 20  ct yColCache {. 
1ff40 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20     int iTable;  
1ff50 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c           /* Tabl
1ff60 65 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  e cursor number 
1ff70 2a 2f 0a 20 20 20 20 69 31 36 20 69 43 6f 6c 75  */.    i16 iColu
1ff80 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  mn;          /* 
1ff90 54 61 62 6c 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d  Table column num
1ffa0 62 65 72 20 2a 2f 0a 20 20 20 20 75 38 20 74 65  ber */.    u8 te
1ffb0 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 20  mpReg;          
1ffc0 20 2f 2a 20 69 52 65 67 20 69 73 20 61 20 74 65   /* iReg is a te
1ffd0 6d 70 20 72 65 67 69 73 74 65 72 20 74 68 61 74  mp register that
1ffe0 20 6e 65 65 64 73 20 74 6f 20 62 65 20 66 72 65   needs to be fre
1fff0 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4c  ed */.    int iL
20000 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20  evel;           
20010 2f 2a 20 4e 65 73 74 69 6e 67 20 6c 65 76 65 6c  /* Nesting level
20020 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 52 65 67   */.    int iReg
20030 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
20040 20 52 65 67 20 77 69 74 68 20 76 61 6c 75 65 20   Reg with value 
20050 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20  of this column. 
20060 30 20 6d 65 61 6e 73 20 6e 6f 6e 65 2e 20 2a 2f  0 means none. */
20070 0a 20 20 20 20 69 6e 74 20 6c 72 75 3b 20 20 20  .    int lru;   
20080 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65             /* Le
20090 61 73 74 20 72 65 63 65 6e 74 6c 79 20 75 73 65  ast recently use
200a0 64 20 65 6e 74 72 79 20 68 61 73 20 74 68 65 20  d entry has the 
200b0 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65 20 2a  smallest value *
200c0 2f 0a 20 20 7d 20 61 43 6f 6c 43 61 63 68 65 5b  /.  } aColCache[
200d0 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48  SQLITE_N_COLCACH
200e0 45 5d 3b 20 20 2f 2a 20 4f 6e 65 20 66 6f 72 20  E];  /* One for 
200f0 65 61 63 68 20 63 6f 6c 75 6d 6e 20 63 61 63 68  each column cach
20100 65 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74  e entry */.  int
20110 20 61 54 65 6d 70 52 65 67 5b 38 5d 3b 20 20 20   aTempReg[8];   
20120 20 20 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20       /* Holding 
20130 61 72 65 61 20 66 6f 72 20 74 65 6d 70 6f 72 61  area for tempora
20140 72 79 20 72 65 67 69 73 74 65 72 73 20 2a 2f 0a  ry registers */.
20150 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b    Token sNameTok
20160 65 6e 3b 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b  en;       /* Tok
20170 65 6e 20 77 69 74 68 20 75 6e 71 75 61 6c 69 66  en with unqualif
20180 69 65 64 20 73 63 68 65 6d 61 20 6f 62 6a 65 63  ied schema objec
20190 74 20 6e 61 6d 65 20 2a 2f 0a 0a 20 20 2f 2a 2a  t name */..  /**
201a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
201b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
201c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
201d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
201e0 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 41 62 6f 76  ******.  ** Abov
201f0 65 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 65  e is constant be
20200 74 77 65 65 6e 20 72 65 63 75 72 73 69 6f 6e 73  tween recursions
20210 2e 20 20 42 65 6c 6f 77 20 69 73 20 72 65 73 65  .  Below is rese
20220 74 20 62 65 66 6f 72 65 20 61 6e 64 20 61 66 74  t before and aft
20230 65 72 0a 20 20 2a 2a 20 65 61 63 68 20 72 65 63  er.  ** each rec
20240 75 72 73 69 6f 6e 2e 20 20 54 68 65 20 62 6f 75  ursion.  The bou
20250 6e 64 61 72 79 20 62 65 74 77 65 65 6e 20 74 68  ndary between th
20260 65 73 65 20 74 77 6f 20 72 65 67 69 6f 6e 73 20  ese two regions 
20270 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 20 20  is determined.  
20280 2a 2a 20 75 73 69 6e 67 20 6f 66 66 73 65 74 6f  ** using offseto
20290 66 28 50 61 72 73 65 2c 73 4c 61 73 74 54 6f 6b  f(Parse,sLastTok
202a0 65 6e 29 20 73 6f 20 74 68 65 20 73 4c 61 73 74  en) so the sLast
202b0 54 6f 6b 65 6e 20 66 69 65 6c 64 20 6d 75 73 74  Token field must
202c0 20 62 65 20 74 68 65 0a 20 20 2a 2a 20 66 69 72   be the.  ** fir
202d0 73 74 20 66 69 65 6c 64 20 69 6e 20 74 68 65 20  st field in the 
202e0 72 65 63 75 72 73 69 76 65 20 72 65 67 69 6f 6e  recursive region
202f0 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..  ************
20300 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20310 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20320 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20330 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20  ************/.. 
20340 20 54 6f 6b 65 6e 20 73 4c 61 73 74 54 6f 6b 65   Token sLastToke
20350 6e 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  n;       /* The 
20360 6c 61 73 74 20 74 6f 6b 65 6e 20 70 61 72 73 65  last token parse
20370 64 20 2a 2f 0a 20 20 79 6e 56 61 72 20 6e 56 61  d */.  ynVar nVa
20380 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
20390 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 27 3f   /* Number of '?
203a0 27 20 76 61 72 69 61 62 6c 65 73 20 73 65 65 6e  ' variables seen
203b0 20 69 6e 20 74 68 65 20 53 51 4c 20 73 6f 20 66   in the SQL so f
203c0 61 72 20 2a 2f 0a 20 20 75 38 20 69 50 6b 53 6f  ar */.  u8 iPkSo
203d0 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20  rtOrder;        
203e0 20 20 2f 2a 20 41 53 43 20 6f 72 20 44 45 53 43    /* ASC or DESC
203f0 20 66 6f 72 20 49 4e 54 45 47 45 52 20 50 52 49   for INTEGER PRI
20400 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20 75 38  MARY KEY */.  u8
20410 20 65 78 70 6c 61 69 6e 3b 20 20 20 20 20 20 20   explain;       
20420 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
20430 69 66 20 74 68 65 20 45 58 50 4c 41 49 4e 20 66  if the EXPLAIN f
20440 6c 61 67 20 69 73 20 66 6f 75 6e 64 20 6f 6e 20  lag is found on 
20450 74 68 65 20 71 75 65 72 79 20 2a 2f 0a 23 69 66  the query */.#if
20460 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
20470 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
20480 75 38 20 64 65 63 6c 61 72 65 56 74 61 62 3b 20  u8 declareVtab; 
20490 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
204a0 65 20 69 66 20 69 6e 73 69 64 65 20 73 71 6c 69  e if inside sqli
204b0 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62  te3_declare_vtab
204c0 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 74 61  () */.  int nVta
204d0 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 20 20  bLock;          
204e0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76    /* Number of v
204f0 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 74 6f  irtual tables to
20500 20 6c 6f 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a   lock */.#endif.
20510 20 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20    int nHeight;  
20520 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
20530 78 70 72 65 73 73 69 6f 6e 20 74 72 65 65 20 68  xpression tree h
20540 65 69 67 68 74 20 6f 66 20 63 75 72 72 65 6e 74  eight of current
20550 20 73 75 62 2d 73 65 6c 65 63 74 20 2a 2f 0a 23   sub-select */.#
20560 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
20570 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20 69 6e 74  IT_EXPLAIN.  int
20580 20 69 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20   iSelectId;     
20590 20 20 20 20 20 20 20 2f 2a 20 49 44 20 6f 66 20         /* ID of 
205a0 63 75 72 72 65 6e 74 20 73 65 6c 65 63 74 20 66  current select f
205b0 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75  or EXPLAIN outpu
205c0 74 20 2a 2f 0a 20 20 69 6e 74 20 69 4e 65 78 74  t */.  int iNext
205d0 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20 20 20  SelectId;       
205e0 20 2f 2a 20 4e 65 78 74 20 61 76 61 69 6c 61 62   /* Next availab
205f0 6c 65 20 73 65 6c 65 63 74 20 49 44 20 66 6f 72  le select ID for
20600 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74 20   EXPLAIN output 
20610 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 56 4c 69 73  */.#endif.  VLis
20620 74 20 2a 70 56 4c 69 73 74 3b 20 20 20 20 20 20  t *pVList;      
20630 20 20 20 20 20 20 2f 2a 20 4d 61 70 70 69 6e 67        /* Mapping
20640 20 62 65 74 77 65 65 6e 20 76 61 72 69 61 62 6c   between variabl
20650 65 20 6e 61 6d 65 73 20 61 6e 64 20 6e 75 6d 62  e names and numb
20660 65 72 73 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70  ers */.  Vdbe *p
20670 52 65 70 72 65 70 61 72 65 3b 20 20 20 20 20 20  Reprepare;      
20680 20 20 20 2f 2a 20 56 4d 20 62 65 69 6e 67 20 72     /* VM being r
20690 65 70 72 65 70 61 72 65 64 20 28 73 71 6c 69 74  eprepared (sqlit
206a0 65 33 52 65 70 72 65 70 61 72 65 28 29 29 20 2a  e3Reprepare()) *
206b0 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
206c0 7a 54 61 69 6c 3b 20 20 20 20 20 20 20 20 2f 2a  zTail;        /*
206d0 20 41 6c 6c 20 53 51 4c 20 74 65 78 74 20 70 61   All SQL text pa
206e0 73 74 20 74 68 65 20 6c 61 73 74 20 73 65 6d 69  st the last semi
206f0 63 6f 6c 6f 6e 20 70 61 72 73 65 64 20 2a 2f 0a  colon parsed */.
20700 20 20 54 61 62 6c 65 20 2a 70 4e 65 77 54 61 62    Table *pNewTab
20710 6c 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  le;         /* A
20720 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6f 6e   table being con
20730 73 74 72 75 63 74 65 64 20 62 79 20 43 52 45 41  structed by CREA
20740 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20 54 72  TE TABLE */.  Tr
20750 69 67 67 65 72 20 2a 70 4e 65 77 54 72 69 67 67  igger *pNewTrigg
20760 65 72 3b 20 20 20 20 20 2f 2a 20 54 72 69 67 67  er;     /* Trigg
20770 65 72 20 75 6e 64 65 72 20 63 6f 6e 73 74 72 75  er under constru
20780 63 74 20 62 79 20 61 20 43 52 45 41 54 45 20 54  ct by a CREATE T
20790 52 49 47 47 45 52 20 2a 2f 0a 20 20 63 6f 6e 73  RIGGER */.  cons
207a0 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e  t char *zAuthCon
207b0 74 65 78 74 3b 20 2f 2a 20 54 68 65 20 36 74 68  text; /* The 6th
207c0 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 64 62   parameter to db
207d0 2d 3e 78 41 75 74 68 20 63 61 6c 6c 62 61 63 6b  ->xAuth callback
207e0 73 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  s */.#ifndef SQL
207f0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
20800 54 41 42 4c 45 0a 20 20 54 6f 6b 65 6e 20 73 41  TABLE.  Token sA
20810 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
20820 20 20 2f 2a 20 43 6f 6d 70 6c 65 74 65 20 74 65    /* Complete te
20830 78 74 20 6f 66 20 61 20 6d 6f 64 75 6c 65 20 61  xt of a module a
20840 72 67 75 6d 65 6e 74 20 2a 2f 0a 20 20 54 61 62  rgument */.  Tab
20850 6c 65 20 2a 2a 61 70 56 74 61 62 4c 6f 63 6b 3b  le **apVtabLock;
20860 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
20870 72 20 74 6f 20 76 69 72 74 75 61 6c 20 74 61 62  r to virtual tab
20880 6c 65 73 20 6e 65 65 64 69 6e 67 20 6c 6f 63 6b  les needing lock
20890 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ing */.#endif.  
208a0 54 61 62 6c 65 20 2a 70 5a 6f 6d 62 69 65 54 61  Table *pZombieTa
208b0 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73  b;        /* Lis
208c0 74 20 6f 66 20 54 61 62 6c 65 20 6f 62 6a 65 63  t of Table objec
208d0 74 73 20 74 6f 20 64 65 6c 65 74 65 20 61 66 74  ts to delete aft
208e0 65 72 20 63 6f 64 65 20 67 65 6e 20 2a 2f 0a 20  er code gen */. 
208f0 20 54 72 69 67 67 65 72 50 72 67 20 2a 70 54 72   TriggerPrg *pTr
20900 69 67 67 65 72 50 72 67 3b 20 20 2f 2a 20 4c 69  iggerPrg;  /* Li
20910 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 63 6f 64  nked list of cod
20920 65 64 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 20  ed triggers */. 
20930 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20 20   With *pWith;   
20940 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75             /* Cu
20950 72 72 65 6e 74 20 57 49 54 48 20 63 6c 61 75 73  rrent WITH claus
20960 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20  e, or NULL */.  
20970 57 69 74 68 20 2a 70 57 69 74 68 54 6f 46 72 65  With *pWithToFre
20980 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 46 72 65  e;        /* Fre
20990 65 20 74 68 69 73 20 57 49 54 48 20 6f 62 6a 65  e this WITH obje
209a0 63 74 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66  ct at the end of
209b0 20 74 68 65 20 70 61 72 73 65 20 2a 2f 0a 7d 3b   the parse */.};
209c0 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 73 20 61 6e  ../*.** Sizes an
209d0 64 20 70 6f 69 6e 74 65 72 73 20 6f 66 20 76 61  d pointers of va
209e0 72 69 6f 75 73 20 70 61 72 74 73 20 6f 66 20 74  rious parts of t
209f0 68 65 20 50 61 72 73 65 20 6f 62 6a 65 63 74 2e  he Parse object.
20a00 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41 52 53  .*/.#define PARS
20a10 45 5f 48 44 52 5f 53 5a 20 6f 66 66 73 65 74 6f  E_HDR_SZ offseto
20a20 66 28 50 61 72 73 65 2c 61 43 6f 6c 43 61 63 68  f(Parse,aColCach
20a30 65 29 20 2f 2a 20 52 65 63 75 72 73 69 76 65 20  e) /* Recursive 
20a40 70 61 72 74 20 77 2f 6f 20 61 43 6f 6c 43 61 63  part w/o aColCac
20a50 68 65 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41 52  he*/.#define PAR
20a60 53 45 5f 52 45 43 55 52 53 45 5f 53 5a 20 6f 66  SE_RECURSE_SZ of
20a70 66 73 65 74 6f 66 28 50 61 72 73 65 2c 73 4c 61  fsetof(Parse,sLa
20a80 73 74 54 6f 6b 65 6e 29 20 20 20 20 2f 2a 20 52  stToken)    /* R
20a90 65 63 75 72 73 69 76 65 20 70 61 72 74 20 2a 2f  ecursive part */
20aa0 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f 54  .#define PARSE_T
20ab0 41 49 4c 5f 53 5a 20 28 73 69 7a 65 6f 66 28 50  AIL_SZ (sizeof(P
20ac0 61 72 73 65 29 2d 50 41 52 53 45 5f 52 45 43 55  arse)-PARSE_RECU
20ad0 52 53 45 5f 53 5a 29 20 2f 2a 20 4e 6f 6e 2d 72  RSE_SZ) /* Non-r
20ae0 65 63 75 72 73 69 76 65 20 70 61 72 74 20 2a 2f  ecursive part */
20af0 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f 54  .#define PARSE_T
20b00 41 49 4c 28 58 29 20 28 28 28 63 68 61 72 2a 29  AIL(X) (((char*)
20b10 28 58 29 29 2b 50 41 52 53 45 5f 52 45 43 55 52  (X))+PARSE_RECUR
20b20 53 45 5f 53 5a 29 20 20 2f 2a 20 50 6f 69 6e 74  SE_SZ)  /* Point
20b30 65 72 20 74 6f 20 74 61 69 6c 20 2a 2f 0a 0a 2f  er to tail */../
20b40 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65  *.** Return true
20b50 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e   if currently in
20b60 73 69 64 65 20 61 6e 20 73 71 6c 69 74 65 33 5f  side an sqlite3_
20b70 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 63  declare_vtab() c
20b80 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  all..*/.#ifdef S
20b90 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
20ba0 41 4c 54 41 42 4c 45 0a 20 20 23 64 65 66 69 6e  ALTABLE.  #defin
20bb0 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41  e IN_DECLARE_VTA
20bc0 42 20 30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  B 0.#else.  #def
20bd0 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56  ine IN_DECLARE_V
20be0 54 41 42 20 28 70 50 61 72 73 65 2d 3e 64 65 63  TAB (pParse->dec
20bf0 6c 61 72 65 56 74 61 62 29 0a 23 65 6e 64 69 66  lareVtab).#endif
20c00 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
20c10 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
20c20 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63  wing structure c
20c30 61 6e 20 62 65 20 64 65 63 6c 61 72 65 64 20 6f  an be declared o
20c40 6e 20 61 20 73 74 61 63 6b 20 61 6e 64 20 75 73  n a stack and us
20c50 65 64 0a 2a 2a 20 74 6f 20 73 61 76 65 20 74 68  ed.** to save th
20c60 65 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e  e Parse.zAuthCon
20c70 74 65 78 74 20 76 61 6c 75 65 20 73 6f 20 74 68  text value so th
20c80 61 74 20 69 74 20 63 61 6e 20 62 65 20 72 65 73  at it can be res
20c90 74 6f 72 65 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a  tored later..*/.
20ca0 73 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74 65  struct AuthConte
20cb0 78 74 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61  xt {.  const cha
20cc0 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b  r *zAuthContext;
20cd0 20 20 20 2f 2a 20 50 75 74 20 73 61 76 65 64 20     /* Put saved 
20ce0 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65  Parse.zAuthConte
20cf0 78 74 20 68 65 72 65 20 2a 2f 0a 20 20 50 61 72  xt here */.  Par
20d00 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20  se *pParse;     
20d10 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
20d20 50 61 72 73 65 20 73 74 72 75 63 74 75 72 65 20  Parse structure 
20d30 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74  */.};../*.** Bit
20d40 66 69 65 6c 64 20 66 6c 61 67 73 20 66 6f 72 20  field flags for 
20d50 50 35 20 76 61 6c 75 65 20 69 6e 20 76 61 72 69  P5 value in vari
20d60 6f 75 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 0a  ous opcodes..**.
20d70 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61  ** Value constra
20d80 69 6e 74 73 20 28 65 6e 66 6f 72 63 65 64 20 76  ints (enforced v
20d90 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a  ia assert()):.**
20da0 20 20 20 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54      OPFLAG_LENGT
20db0 48 41 52 47 20 20 20 20 3d 3d 20 53 51 4c 49 54  HARG    == SQLIT
20dc0 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 0a 2a 2a  E_FUNC_LENGTH.**
20dd0 20 20 20 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f      OPFLAG_TYPEO
20de0 46 41 52 47 20 20 20 20 3d 3d 20 53 51 4c 49 54  FARG    == SQLIT
20df0 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 0a 2a 2a  E_FUNC_TYPEOF.**
20e00 20 20 20 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43      OPFLAG_BULKC
20e10 53 52 20 20 20 20 20 20 3d 3d 20 42 54 52 45 45  SR      == BTREE
20e20 5f 42 55 4c 4b 4c 4f 41 44 0a 2a 2a 20 20 20 20  _BULKLOAD.**    
20e30 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 20 20  OPFLAG_SEEKEQ   
20e40 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 53 45 45      == BTREE_SEE
20e50 4b 5f 45 51 0a 2a 2a 20 20 20 20 4f 50 46 4c 41  K_EQ.**    OPFLA
20e60 47 5f 46 4f 52 44 45 4c 45 54 45 20 20 20 20 3d  G_FORDELETE    =
20e70 3d 20 42 54 52 45 45 5f 46 4f 52 44 45 4c 45 54  = BTREE_FORDELET
20e80 45 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 53  E.**    OPFLAG_S
20e90 41 56 45 50 4f 53 49 54 49 4f 4e 20 3d 3d 20 42  AVEPOSITION == B
20ea0 54 52 45 45 5f 53 41 56 45 50 4f 53 49 54 49 4f  TREE_SAVEPOSITIO
20eb0 4e 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 41  N.**    OPFLAG_A
20ec0 55 58 44 45 4c 45 54 45 20 20 20 20 3d 3d 20 42  UXDELETE    == B
20ed0 54 52 45 45 5f 41 55 58 44 45 4c 45 54 45 0a 2a  TREE_AUXDELETE.*
20ee0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
20ef0 5f 4e 43 48 41 4e 47 45 20 20 20 20 20 20 20 30  _NCHANGE       0
20f00 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 49 6e 73  x01    /* OP_Ins
20f10 65 72 74 3a 20 53 65 74 20 74 6f 20 75 70 64 61  ert: Set to upda
20f20 74 65 20 64 62 2d 3e 6e 43 68 61 6e 67 65 20 2a  te db->nChange *
20f30 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
20f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f50 20 20 20 20 20 20 20 2f 2a 20 41 6c 73 6f 20 75         /* Also u
20f60 73 65 64 20 69 6e 20 50 32 20 28 6e 6f 74 20 50  sed in P2 (not P
20f70 35 29 20 6f 66 20 4f 50 5f 44 65 6c 65 74 65 20  5) of OP_Delete 
20f80 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
20f90 47 5f 45 50 48 45 4d 20 20 20 20 20 20 20 20 20  G_EPHEM         
20fa0 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f  0x01    /* OP_Co
20fb0 6c 75 6d 6e 3a 20 45 70 68 65 6d 65 72 61 6c 20  lumn: Ephemeral 
20fc0 6f 75 74 70 75 74 20 69 73 20 6f 6b 20 2a 2f 0a  output is ok */.
20fd0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c  #define OPFLAG_L
20fe0 41 53 54 52 4f 57 49 44 20 20 20 20 20 30 78 32  ASTROWID     0x2
20ff0 30 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20 75  0    /* Set to u
21000 70 64 61 74 65 20 64 62 2d 3e 6c 61 73 74 52 6f  pdate db->lastRo
21010 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  wid */.#define O
21020 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20 20  PFLAG_ISUPDATE  
21030 20 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20 54      0x04    /* T
21040 68 69 73 20 4f 50 5f 49 6e 73 65 72 74 20 69 73  his OP_Insert is
21050 20 61 6e 20 73 71 6c 20 55 50 44 41 54 45 20 2a   an sql UPDATE *
21060 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
21070 5f 41 50 50 45 4e 44 20 20 20 20 20 20 20 20 30  _APPEND        0
21080 78 30 38 20 20 20 20 2f 2a 20 54 68 69 73 20 69  x08    /* This i
21090 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20 61  s likely to be a
210a0 6e 20 61 70 70 65 6e 64 20 2a 2f 0a 23 64 65 66  n append */.#def
210b0 69 6e 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45  ine OPFLAG_USESE
210c0 45 4b 52 45 53 55 4c 54 20 30 78 31 30 20 20 20  EKRESULT 0x10   
210d0 20 2f 2a 20 54 72 79 20 74 6f 20 61 76 6f 69 64   /* Try to avoid
210e0 20 61 20 73 65 65 6b 20 69 6e 20 42 74 72 65 65   a seek in Btree
210f0 49 6e 73 65 72 74 28 29 20 2a 2f 0a 23 64 65 66  Insert() */.#def
21100 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f  ine OPFLAG_ISNOO
21110 50 20 20 20 20 20 20 20 20 30 78 34 30 20 20 20  P        0x40   
21120 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 20 64 6f   /* OP_Delete do
21130 65 73 20 70 72 65 2d 75 70 64 61 74 65 2d 68 6f  es pre-update-ho
21140 6f 6b 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69  ok only */.#defi
21150 6e 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48  ne OPFLAG_LENGTH
21160 41 52 47 20 20 20 20 20 30 78 34 30 20 20 20 20  ARG     0x40    
21170 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c  /* OP_Column onl
21180 79 20 75 73 65 64 20 66 6f 72 20 6c 65 6e 67 74  y used for lengt
21190 68 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  h() */.#define O
211a0 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 20  PFLAG_TYPEOFARG 
211b0 20 20 20 20 30 78 38 30 20 20 20 20 2f 2a 20 4f      0x80    /* O
211c0 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73  P_Column only us
211d0 65 64 20 66 6f 72 20 74 79 70 65 6f 66 28 29 20  ed for typeof() 
211e0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
211f0 47 5f 42 55 4c 4b 43 53 52 20 20 20 20 20 20 20  G_BULKCSR       
21200 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 4f 70  0x01    /* OP_Op
21210 65 6e 2a 2a 20 75 73 65 64 20 74 6f 20 6f 70 65  en** used to ope
21220 6e 20 62 75 6c 6b 20 63 75 72 73 6f 72 20 2a 2f  n bulk cursor */
21230 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
21240 53 45 45 4b 45 51 20 20 20 20 20 20 20 20 30 78  SEEKEQ        0x
21250 30 32 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e  02    /* OP_Open
21260 2a 2a 20 63 75 72 73 6f 72 20 75 73 65 73 20 45  ** cursor uses E
21270 51 20 73 65 65 6b 20 6f 6e 6c 79 20 2a 2f 0a 23  Q seek only */.#
21280 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 46 4f  define OPFLAG_FO
21290 52 44 45 4c 45 54 45 20 20 20 20 20 30 78 30 38  RDELETE     0x08
212a0 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 20 73      /* OP_Open s
212b0 68 6f 75 6c 64 20 75 73 65 20 42 54 52 45 45 5f  hould use BTREE_
212c0 46 4f 52 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65  FORDELETE */.#de
212d0 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 32 49 53  fine OPFLAG_P2IS
212e0 52 45 47 20 20 20 20 20 20 20 30 78 31 30 20 20  REG       0x10  
212f0 20 20 2f 2a 20 50 32 20 74 6f 20 4f 50 5f 4f 70    /* P2 to OP_Op
21300 65 6e 2a 2a 20 69 73 20 61 20 72 65 67 69 73 74  en** is a regist
21310 65 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 23 64 65  er number */.#de
21320 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d  fine OPFLAG_PERM
21330 55 54 45 20 20 20 20 20 20 20 30 78 30 31 20 20  UTE       0x01  
21340 20 20 2f 2a 20 4f 50 5f 43 6f 6d 70 61 72 65 3a    /* OP_Compare:
21350 20 75 73 65 20 74 68 65 20 70 65 72 6d 75 74 61   use the permuta
21360 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
21370 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54  OPFLAG_SAVEPOSIT
21380 49 4f 4e 20 20 30 78 30 32 20 20 20 20 2f 2a 20  ION  0x02    /* 
21390 4f 50 5f 44 65 6c 65 74 65 2f 49 6e 73 65 72 74  OP_Delete/Insert
213a0 3a 20 73 61 76 65 20 63 75 72 73 6f 72 20 70 6f  : save cursor po
213b0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  s */.#define OPF
213c0 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 20 20 20  LAG_AUXDELETE   
213d0 20 20 30 78 30 34 20 20 20 20 2f 2a 20 4f 50 5f    0x04    /* OP_
213e0 44 65 6c 65 74 65 3a 20 69 6e 64 65 78 20 69 6e  Delete: index in
213f0 20 61 20 44 45 4c 45 54 45 20 6f 70 20 2a 2f 0a   a DELETE op */.
21400 0a 2f 2a 0a 20 2a 20 45 61 63 68 20 74 72 69 67  ./*. * Each trig
21410 67 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20 74  ger present in t
21420 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
21430 6d 61 20 69 73 20 73 74 6f 72 65 64 20 61 73 20  ma is stored as 
21440 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 20  an instance of. 
21450 2a 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  * struct Trigger
21460 2e 0a 20 2a 0a 20 2a 20 50 6f 69 6e 74 65 72 73  .. *. * Pointers
21470 20 74 6f 20 69 6e 73 74 61 6e 63 65 73 20 6f 66   to instances of
21480 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20   struct Trigger 
21490 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 77  are stored in tw
214a0 6f 20 77 61 79 73 2e 0a 20 2a 20 31 2e 20 49 6e  o ways.. * 1. In
214b0 20 74 68 65 20 22 74 72 69 67 48 61 73 68 22 20   the "trigHash" 
214c0 68 61 73 68 20 74 61 62 6c 65 20 28 70 61 72 74  hash table (part
214d0 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 2a   of the sqlite3*
214e0 20 74 68 61 74 20 72 65 70 72 65 73 65 6e 74 73   that represents
214f0 20 74 68 65 0a 20 2a 20 20 20 20 64 61 74 61 62   the. *    datab
21500 61 73 65 29 2e 20 54 68 69 73 20 61 6c 6c 6f 77  ase). This allow
21510 73 20 54 72 69 67 67 65 72 20 73 74 72 75 63 74  s Trigger struct
21520 75 72 65 73 20 74 6f 20 62 65 20 72 65 74 72 69  ures to be retri
21530 65 76 65 64 20 62 79 20 6e 61 6d 65 2e 0a 20 2a  eved by name.. *
21540 20 32 2e 20 41 6c 6c 20 74 72 69 67 67 65 72 73   2. All triggers
21550 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
21560 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20   a single table 
21570 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 20 6c 69  form a linked li
21580 73 74 2c 20 75 73 69 6e 67 20 74 68 65 0a 20 2a  st, using the. *
21590 20 20 20 20 70 4e 65 78 74 20 6d 65 6d 62 65 72      pNext member
215a0 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67   of struct Trigg
215b0 65 72 2e 20 41 20 70 6f 69 6e 74 65 72 20 74 6f  er. A pointer to
215c0 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65   the first eleme
215d0 6e 74 20 6f 66 20 74 68 65 0a 20 2a 20 20 20 20  nt of the. *    
215e0 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 20 73  linked list is s
215f0 74 6f 72 65 64 20 61 73 20 74 68 65 20 22 70 54  tored as the "pT
21600 72 69 67 67 65 72 22 20 6d 65 6d 62 65 72 20 6f  rigger" member o
21610 66 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64  f the associated
21620 0a 20 2a 20 20 20 20 73 74 72 75 63 74 20 54 61  . *    struct Ta
21630 62 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22  ble.. *. * The "
21640 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65  step_list" membe
21650 72 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  r points to the 
21660 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66  first element of
21670 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 20   a linked list. 
21680 2a 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  * containing the
21690 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
216a0 73 70 65 63 69 66 69 65 64 20 61 73 20 74 68 65  specified as the
216b0 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
216c0 2e 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69  .. */.struct Tri
216d0 67 67 65 72 20 7b 0a 20 20 63 68 61 72 20 2a 7a  gger {.  char *z
216e0 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
216f0 20 2f 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20   /* The name of 
21700 74 68 65 20 74 72 69 67 67 65 72 20 20 20 20 20  the trigger     
21710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21720 20 20 20 2a 2f 0a 20 20 63 68 61 72 20 2a 74 61     */.  char *ta
21730 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ble;            
21740 2f 2a 20 54 68 65 20 74 61 62 6c 65 20 6f 72 20  /* The table or 
21750 76 69 65 77 20 74 6f 20 77 68 69 63 68 20 74 68  view to which th
21760 65 20 74 72 69 67 67 65 72 20 61 70 70 6c 69 65  e trigger applie
21770 73 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20  s */.  u8 op;   
21780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
21790 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45  * One of TK_DELE
217a0 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54  TE, TK_UPDATE, T
217b0 4b 5f 49 4e 53 45 52 54 20 20 20 20 20 20 20 20  K_INSERT        
217c0 20 2a 2f 0a 20 20 75 38 20 74 72 5f 74 6d 3b 20   */.  u8 tr_tm; 
217d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
217e0 20 4f 6e 65 20 6f 66 20 54 52 49 47 47 45 52 5f   One of TRIGGER_
217f0 42 45 46 4f 52 45 2c 20 54 52 49 47 47 45 52 5f  BEFORE, TRIGGER_
21800 41 46 54 45 52 20 2a 2f 0a 20 20 45 78 70 72 20  AFTER */.  Expr 
21810 2a 70 57 68 65 6e 3b 20 20 20 20 20 20 20 20 20  *pWhen;         
21820 20 20 20 2f 2a 20 54 68 65 20 57 48 45 4e 20 63     /* The WHEN c
21830 6c 61 75 73 65 20 6f 66 20 74 68 65 20 65 78 70  lause of the exp
21840 72 65 73 73 69 6f 6e 20 28 6d 61 79 20 62 65 20  ression (may be 
21850 4e 55 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c 69 73  NULL) */.  IdLis
21860 74 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20 20 20  t *pColumns;    
21870 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 73     /* If this is
21880 20 61 6e 20 55 50 44 41 54 45 20 4f 46 20 3c 63   an UPDATE OF <c
21890 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74 72 69 67  olumn-list> trig
218a0 67 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ger,.           
218b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
218c0 20 20 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69    the <column-li
218d0 73 74 3e 20 69 73 20 73 74 6f 72 65 64 20 68 65  st> is stored he
218e0 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  re */.  Schema *
218f0 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20  pSchema;        
21900 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69  /* Schema contai
21910 6e 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72  ning the trigger
21920 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 54   */.  Schema *pT
21930 61 62 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a  abSchema;     /*
21940 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69   Schema containi
21950 6e 67 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a  ng the table */.
21960 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
21970 74 65 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e  tep_list; /* Lin
21980 6b 20 6c 69 73 74 20 6f 66 20 74 72 69 67 67 65  k list of trigge
21990 72 20 70 72 6f 67 72 61 6d 20 73 74 65 70 73 20  r program steps 
219a0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20              */. 
219b0 20 54 72 69 67 67 65 72 20 2a 70 4e 65 78 74 3b   Trigger *pNext;
219c0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74           /* Next
219d0 20 74 72 69 67 67 65 72 20 61 73 73 6f 63 69 61   trigger associa
219e0 74 65 64 20 77 69 74 68 20 74 68 65 20 74 61 62  ted with the tab
219f0 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  le */.};../*.** 
21a00 41 20 74 72 69 67 67 65 72 20 69 73 20 65 69 74  A trigger is eit
21a10 68 65 72 20 61 20 42 45 46 4f 52 45 20 6f 72 20  her a BEFORE or 
21a20 61 6e 20 41 46 54 45 52 20 74 72 69 67 67 65 72  an AFTER trigger
21a30 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
21a40 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65   constants.** de
21a50 74 65 72 6d 69 6e 65 20 77 68 69 63 68 2e 0a 2a  termine which..*
21a60 2a 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 61 72  *.** If there ar
21a70 65 20 6d 75 6c 74 69 70 6c 65 20 74 72 69 67 67  e multiple trigg
21a80 65 72 73 2c 20 79 6f 75 20 6d 69 67 68 74 20 6f  ers, you might o
21a90 66 20 73 6f 6d 65 20 42 45 46 4f 52 45 20 61 6e  f some BEFORE an
21aa0 64 20 73 6f 6d 65 20 41 46 54 45 52 2e 0a 2a 2a  d some AFTER..**
21ab0 20 49 6e 20 74 68 61 74 20 63 61 73 65 73 2c 20   In that cases, 
21ac0 74 68 65 20 63 6f 6e 73 74 61 6e 74 73 20 62 65  the constants be
21ad0 6c 6f 77 20 63 61 6e 20 62 65 20 4f 52 65 64 20  low can be ORed 
21ae0 74 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a 23 64 65  together..*/.#de
21af0 66 69 6e 65 20 54 52 49 47 47 45 52 5f 42 45 46  fine TRIGGER_BEF
21b00 4f 52 45 20 20 31 0a 23 64 65 66 69 6e 65 20 54  ORE  1.#define T
21b10 52 49 47 47 45 52 5f 41 46 54 45 52 20 20 20 32  RIGGER_AFTER   2
21b20 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74 61  ../*. * An insta
21b30 6e 63 65 20 6f 66 20 73 74 72 75 63 74 20 54 72  nce of struct Tr
21b40 69 67 67 65 72 53 74 65 70 20 69 73 20 75 73 65  iggerStep is use
21b50 64 20 74 6f 20 73 74 6f 72 65 20 61 20 73 69 6e  d to store a sin
21b60 67 6c 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  gle SQL statemen
21b70 74 0a 20 2a 20 74 68 61 74 20 69 73 20 61 20 70  t. * that is a p
21b80 61 72 74 20 6f 66 20 61 20 74 72 69 67 67 65 72  art of a trigger
21b90 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a 20  -program.. *. * 
21ba0 49 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72  Instances of str
21bb0 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20  uct TriggerStep 
21bc0 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20  are stored in a 
21bd0 73 69 6e 67 6c 79 20 6c 69 6e 6b 65 64 20 6c 69  singly linked li
21be0 73 74 20 28 6c 69 6e 6b 65 64 0a 20 2a 20 75 73  st (linked. * us
21bf0 69 6e 67 20 74 68 65 20 22 70 4e 65 78 74 22 20  ing the "pNext" 
21c00 6d 65 6d 62 65 72 29 20 72 65 66 65 72 65 6e 63  member) referenc
21c10 65 64 20 62 79 20 74 68 65 20 22 73 74 65 70 5f  ed by the "step_
21c20 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 6f 66 20  list" member of 
21c30 74 68 65 0a 20 2a 20 61 73 73 6f 63 69 61 74 65  the. * associate
21c40 64 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  d struct Trigger
21c50 20 69 6e 73 74 61 6e 63 65 2e 20 54 68 65 20 66   instance. The f
21c60 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20  irst element of 
21c70 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  the linked list 
21c80 69 73 0a 20 2a 20 74 68 65 20 66 69 72 73 74 20  is. * the first 
21c90 73 74 65 70 20 6f 66 20 74 68 65 20 74 72 69 67  step of the trig
21ca0 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a  ger-program.. *.
21cb0 20 2a 20 54 68 65 20 22 6f 70 22 20 6d 65 6d 62   * The "op" memb
21cc0 65 72 20 69 6e 64 69 63 61 74 65 73 20 77 68 65  er indicates whe
21cd0 74 68 65 72 20 74 68 69 73 20 69 73 20 61 20 22  ther this is a "
21ce0 44 45 4c 45 54 45 22 2c 20 22 49 4e 53 45 52 54  DELETE", "INSERT
21cf0 22 2c 20 22 55 50 44 41 54 45 22 20 6f 72 0a 20  ", "UPDATE" or. 
21d00 2a 20 22 53 45 4c 45 43 54 22 20 73 74 61 74 65  * "SELECT" state
21d10 6d 65 6e 74 2e 20 54 68 65 20 6d 65 61 6e 69 6e  ment. The meanin
21d20 67 73 20 6f 66 20 74 68 65 20 6f 74 68 65 72 20  gs of the other 
21d30 6d 65 6d 62 65 72 73 20 69 73 20 64 65 74 65 72  members is deter
21d40 6d 69 6e 65 64 20 62 79 20 74 68 65 0a 20 2a 20  mined by the. * 
21d50 76 61 6c 75 65 20 6f 66 20 22 6f 70 22 20 61 73  value of "op" as
21d60 20 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20   follows:. *. * 
21d70 28 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53 45 52 54  (op == TK_INSERT
21d80 29 0a 20 2a 20 6f 72 63 6f 6e 66 20 20 20 20 2d  ). * orconf    -
21d90 3e 20 73 74 6f 72 65 73 20 74 68 65 20 4f 4e 20  > stores the ON 
21da0 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74  CONFLICT algorit
21db0 68 6d 0a 20 2a 20 70 53 65 6c 65 63 74 20 20 20  hm. * pSelect   
21dc0 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e  -> If this is an
21dd0 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e   INSERT INTO ...
21de0 20 53 45 4c 45 43 54 20 2e 2e 2e 20 73 74 61 74   SELECT ... stat
21df0 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20  ement, then. *  
21e00 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
21e10 20 73 74 6f 72 65 73 20 61 20 70 6f 69 6e 74 65   stores a pointe
21e20 72 20 74 6f 20 74 68 65 20 53 45 4c 45 43 54 20  r to the SELECT 
21e30 73 74 61 74 65 6d 65 6e 74 2e 20 4f 74 68 65 72  statement. Other
21e40 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 7a 54  wise NULL.. * zT
21e50 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f  arget   -> Dequo
21e60 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  ted name of the 
21e70 74 61 62 6c 65 20 74 6f 20 69 6e 73 65 72 74 20  table to insert 
21e80 69 6e 74 6f 2e 0a 20 2a 20 70 45 78 70 72 4c 69  into.. * pExprLi
21e90 73 74 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73  st -> If this is
21ea0 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20   an INSERT INTO 
21eb0 2e 2e 2e 20 56 41 4c 55 45 53 20 2e 2e 2e 20 73  ... VALUES ... s
21ec0 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20  tatement, then. 
21ed0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  *              t
21ee0 68 69 73 20 73 74 6f 72 65 73 20 76 61 6c 75 65  his stores value
21ef0 73 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64  s to be inserted
21f00 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c  . Otherwise NULL
21f10 2e 0a 20 2a 20 70 49 64 4c 69 73 74 20 20 20 2d  .. * pIdList   -
21f20 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20  > If this is an 
21f30 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20  INSERT INTO ... 
21f40 28 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29  (<column-names>)
21f50 20 56 41 4c 55 45 53 20 2e 2e 2e 0a 20 2a 20 20   VALUES .... *  
21f60 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74              stat
21f70 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 69 73  ement, then this
21f80 20 73 74 6f 72 65 73 20 74 68 65 20 63 6f 6c 75   stores the colu
21f90 6d 6e 2d 6e 61 6d 65 73 20 74 6f 20 62 65 0a 20  mn-names to be. 
21fa0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  *              i
21fb0 6e 73 65 72 74 65 64 20 69 6e 74 6f 2e 0a 20 2a  nserted into.. *
21fc0 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 44 45  . * (op == TK_DE
21fd0 4c 45 54 45 29 0a 20 2a 20 7a 54 61 72 67 65 74  LETE). * zTarget
21fe0 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e     -> Dequoted n
21ff0 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
22000 20 74 6f 20 64 65 6c 65 74 65 20 66 72 6f 6d 2e   to delete from.
22010 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e  . * pWhere    ->
22020 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   The WHERE claus
22030 65 20 6f 66 20 74 68 65 20 44 45 4c 45 54 45 20  e of the DELETE 
22040 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65  statement if one
22050 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20   is specified.. 
22060 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f  *              O
22070 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20  therwise NULL.. 
22080 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 55  *. * (op == TK_U
22090 50 44 41 54 45 29 0a 20 2a 20 7a 54 61 72 67 65  PDATE). * zTarge
220a0 74 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20  t   -> Dequoted 
220b0 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
220c0 65 20 74 6f 20 75 70 64 61 74 65 2e 0a 20 2a 20  e to update.. * 
220d0 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65  pWhere    -> The
220e0 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66   WHERE clause of
220f0 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74   the UPDATE stat
22100 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20  ement if one is 
22110 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20  specified.. *   
22120 20 20 20 20 20 20 20 20 20 20 20 4f 74 68 65 72             Other
22130 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45  wise NULL.. * pE
22140 78 70 72 4c 69 73 74 20 2d 3e 20 41 20 6c 69 73  xprList -> A lis
22150 74 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73  t of the columns
22160 20 74 6f 20 75 70 64 61 74 65 20 61 6e 64 20 74   to update and t
22170 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74  he expressions t
22180 6f 20 75 70 64 61 74 65 0a 20 2a 20 20 20 20 20  o update. *     
22190 20 20 20 20 20 20 20 20 20 74 68 65 6d 20 74 6f           them to
221a0 2e 20 53 65 65 20 73 71 6c 69 74 65 33 55 70 64  . See sqlite3Upd
221b0 61 74 65 28 29 20 64 6f 63 75 6d 65 6e 74 61 74  ate() documentat
221c0 69 6f 6e 20 6f 66 20 22 70 43 68 61 6e 67 65 73  ion of "pChanges
221d0 22 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  ". *            
221e0 20 20 61 72 67 75 6d 65 6e 74 2e 0a 20 2a 0a 20    argument.. *. 
221f0 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65  */.struct Trigge
22200 72 53 74 65 70 20 7b 0a 20 20 75 38 20 6f 70 3b  rStep {.  u8 op;
22210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22220 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45  * One of TK_DELE
22230 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54  TE, TK_UPDATE, T
22240 4b 5f 49 4e 53 45 52 54 2c 20 54 4b 5f 53 45 4c  K_INSERT, TK_SEL
22250 45 43 54 20 2a 2f 0a 20 20 75 38 20 6f 72 63 6f  ECT */.  u8 orco
22260 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  nf;           /*
22270 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 65 74 63   OE_Rollback etc
22280 2e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a  . */.  Trigger *
22290 70 54 72 69 67 3b 20 20 20 20 20 20 2f 2a 20 54  pTrig;      /* T
222a0 68 65 20 74 72 69 67 67 65 72 20 74 68 61 74 20  he trigger that 
222b0 74 68 69 73 20 73 74 65 70 20 69 73 20 61 20 70  this step is a p
222c0 61 72 74 20 6f 66 20 2a 2f 0a 20 20 53 65 6c 65  art of */.  Sele
222d0 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20  ct *pSelect;    
222e0 20 2f 2a 20 53 45 4c 45 43 54 20 73 74 61 74 65   /* SELECT state
222f0 6d 65 6e 74 20 6f 72 20 52 48 53 20 6f 66 20 49  ment or RHS of I
22300 4e 53 45 52 54 20 49 4e 54 4f 20 53 45 4c 45 43  NSERT INTO SELEC
22310 54 20 2e 2e 2e 20 2a 2f 0a 20 20 63 68 61 72 20  T ... */.  char 
22320 2a 7a 54 61 72 67 65 74 3b 20 20 20 20 20 20 20  *zTarget;       
22330 2f 2a 20 54 61 72 67 65 74 20 74 61 62 6c 65 20  /* Target table 
22340 66 6f 72 20 44 45 4c 45 54 45 2c 20 55 50 44 41  for DELETE, UPDA
22350 54 45 2c 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20  TE, INSERT */.  
22360 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20  Expr *pWhere;   
22370 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52       /* The WHER
22380 45 20 63 6c 61 75 73 65 20 66 6f 72 20 44 45 4c  E clause for DEL
22390 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 73 74  ETE or UPDATE st
223a0 65 70 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  eps */.  ExprLis
223b0 74 20 2a 70 45 78 70 72 4c 69 73 74 3b 20 2f 2a  t *pExprList; /*
223c0 20 53 45 54 20 63 6c 61 75 73 65 20 66 6f 72 20   SET clause for 
223d0 55 50 44 41 54 45 2e 20 2a 2f 0a 20 20 49 64 4c  UPDATE. */.  IdL
223e0 69 73 74 20 2a 70 49 64 4c 69 73 74 3b 20 20 20  ist *pIdList;   
223f0 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65    /* Column name
22400 73 20 66 6f 72 20 49 4e 53 45 52 54 20 2a 2f 0a  s for INSERT */.
22410 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 70    TriggerStep *p
22420 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 69  Next;  /* Next i
22430 6e 20 74 68 65 20 6c 69 6e 6b 2d 6c 69 73 74 20  n the link-list 
22440 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  */.  TriggerStep
22450 20 2a 70 4c 61 73 74 3b 20 20 2f 2a 20 4c 61 73   *pLast;  /* Las
22460 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 6e  t element in lin
22470 6b 2d 6c 69 73 74 2e 20 56 61 6c 69 64 20 66 6f  k-list. Valid fo
22480 72 20 31 73 74 20 65 6c 65 6d 20 6f 6e 6c 79 20  r 1st elem only 
22490 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
224a0 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
224b0 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e  ture contains in
224c0 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 62  formation used b
224d0 79 20 74 68 65 20 73 71 6c 69 74 65 46 69 78 2e  y the sqliteFix.
224e0 2e 2e 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 61  ...** routines a
224f0 73 20 74 68 65 79 20 77 61 6c 6b 20 74 68 65 20  s they walk the 
22500 70 61 72 73 65 20 74 72 65 65 20 74 6f 20 6d 61  parse tree to ma
22510 6b 65 20 64 61 74 61 62 61 73 65 20 72 65 66 65  ke database refe
22520 72 65 6e 63 65 73 0a 2a 2a 20 65 78 70 6c 69 63  rences.** explic
22530 69 74 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  it..*/.typedef s
22540 74 72 75 63 74 20 44 62 46 69 78 65 72 20 44 62  truct DbFixer Db
22550 46 69 78 65 72 3b 0a 73 74 72 75 63 74 20 44 62  Fixer;.struct Db
22560 46 69 78 65 72 20 7b 0a 20 20 50 61 72 73 65 20  Fixer {.  Parse 
22570 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 2f 2a  *pParse;      /*
22580 20 54 68 65 20 70 61 72 73 69 6e 67 20 63 6f 6e   The parsing con
22590 74 65 78 74 2e 20 20 45 72 72 6f 72 20 6d 65 73  text.  Error mes
225a0 73 61 67 65 73 20 77 72 69 74 74 65 6e 20 68 65  sages written he
225b0 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  re */.  Schema *
225c0 70 53 63 68 65 6d 61 3b 20 20 20 20 2f 2a 20 46  pSchema;    /* F
225d0 69 78 20 69 74 65 6d 73 20 74 6f 20 74 68 69 73  ix items to this
225e0 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74   schema */.  int
225f0 20 62 56 61 72 4f 6e 6c 79 3b 20 20 20 20 20 20   bVarOnly;      
22600 20 2f 2a 20 43 68 65 63 6b 20 66 6f 72 20 76 61   /* Check for va
22610 72 69 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65  riable reference
22620 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 63 6f 6e 73  s only */.  cons
22630 74 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 20 20  t char *zDb;    
22640 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c  /* Make sure all
22650 20 6f 62 6a 65 63 74 73 20 61 72 65 20 63 6f 6e   objects are con
22660 74 61 69 6e 65 64 20 69 6e 20 74 68 69 73 20 64  tained in this d
22670 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e  atabase */.  con
22680 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20  st char *zType; 
22690 20 2f 2a 20 54 79 70 65 20 6f 66 20 74 68 65 20   /* Type of the 
226a0 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64  container - used
226b0 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61   for error messa
226c0 67 65 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54  ges */.  const T
226d0 6f 6b 65 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20  oken *pName; /* 
226e0 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 74  Name of the cont
226f0 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72  ainer - used for
22700 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
22710 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
22720 6f 62 6a 65 63 74 65 64 20 75 73 65 64 20 74 6f  objected used to
22730 20 61 63 63 75 6d 75 6c 61 74 65 20 74 68 65 20   accumulate the 
22740 74 65 78 74 20 6f 66 20 61 20 73 74 72 69 6e 67  text of a string
22750 20 77 68 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20   where we.** do 
22760 6e 6f 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20  not necessarily 
22770 6b 6e 6f 77 20 68 6f 77 20 62 69 67 20 74 68 65  know how big the
22780 20 73 74 72 69 6e 67 20 77 69 6c 6c 20 62 65 20   string will be 
22790 69 6e 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73  in the end..*/.s
227a0 74 72 75 63 74 20 53 74 72 41 63 63 75 6d 20 7b  truct StrAccum {
227b0 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
227c0 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 74 69 6f          /* Optio
227d0 6e 61 6c 20 64 61 74 61 62 61 73 65 20 66 6f 72  nal database for
227e0 20 6c 6f 6f 6b 61 73 69 64 65 2e 20 20 43 61 6e   lookaside.  Can
227f0 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68   be NULL */.  ch
22800 61 72 20 2a 7a 54 65 78 74 3b 20 20 20 20 20 20  ar *zText;      
22810 20 20 20 2f 2a 20 54 68 65 20 73 74 72 69 6e 67     /* The string
22820 20 63 6f 6c 6c 65 63 74 65 64 20 73 6f 20 66 61   collected so fa
22830 72 20 2a 2f 0a 20 20 75 33 32 20 20 6e 41 6c 6c  r */.  u32  nAll
22840 6f 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  oc;         /* A
22850 6d 6f 75 6e 74 20 6f 66 20 73 70 61 63 65 20 61  mount of space a
22860 6c 6c 6f 63 61 74 65 64 20 69 6e 20 7a 54 65 78  llocated in zTex
22870 74 20 2a 2f 0a 20 20 75 33 32 20 20 6d 78 41 6c  t */.  u32  mxAl
22880 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d  loc;        /* M
22890 61 78 69 6d 75 6d 20 61 6c 6c 6f 77 65 64 20 61  aximum allowed a
228a0 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 30 20 66 6f  llocation.  0 fo
228b0 72 20 6e 6f 20 6d 61 6c 6c 6f 63 20 75 73 61 67  r no malloc usag
228c0 65 20 2a 2f 0a 20 20 75 33 32 20 20 6e 43 68 61  e */.  u32  nCha
228d0 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  r;          /* L
228e0 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73 74 72  ength of the str
228f0 69 6e 67 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  ing so far */.  
22900 75 38 20 20 20 61 63 63 45 72 72 6f 72 3b 20 20  u8   accError;  
22910 20 20 20 20 20 2f 2a 20 53 54 52 41 43 43 55 4d       /* STRACCUM
22920 5f 4e 4f 4d 45 4d 20 6f 72 20 53 54 52 41 43 43  _NOMEM or STRACC
22930 55 4d 5f 54 4f 4f 42 49 47 20 2a 2f 0a 20 20 75  UM_TOOBIG */.  u
22940 38 20 20 20 70 72 69 6e 74 66 46 6c 61 67 73 3b  8   printfFlags;
22950 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 50 52      /* SQLITE_PR
22960 49 4e 54 46 20 66 6c 61 67 73 20 62 65 6c 6f 77  INTF flags below
22970 20 2a 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 53   */.};.#define S
22980 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20 20 20  TRACCUM_NOMEM   
22990 31 0a 23 64 65 66 69 6e 65 20 53 54 52 41 43 43  1.#define STRACC
229a0 55 4d 5f 54 4f 4f 42 49 47 20 20 32 0a 23 64 65  UM_TOOBIG  2.#de
229b0 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e  fine SQLITE_PRIN
229c0 54 46 5f 49 4e 54 45 52 4e 41 4c 20 30 78 30 31  TF_INTERNAL 0x01
229d0 20 20 2f 2a 20 49 6e 74 65 72 6e 61 6c 2d 75 73    /* Internal-us
229e0 65 2d 6f 6e 6c 79 20 63 6f 6e 76 65 72 74 65 72  e-only converter
229f0 73 20 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64 65  s allowed */.#de
22a00 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e  fine SQLITE_PRIN
22a10 54 46 5f 53 51 4c 46 55 4e 43 20 20 30 78 30 32  TF_SQLFUNC  0x02
22a20 20 20 2f 2a 20 53 51 4c 20 66 75 6e 63 74 69 6f    /* SQL functio
22a30 6e 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 56  n arguments to V
22a40 58 50 72 69 6e 74 66 20 2a 2f 0a 23 64 65 66 69  XPrintf */.#defi
22a50 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46  ne SQLITE_PRINTF
22a60 5f 4d 41 4c 4c 4f 43 45 44 20 30 78 30 34 20 20  _MALLOCED 0x04  
22a70 2f 2a 20 54 72 75 65 20 69 66 20 78 54 65 78 74  /* True if xText
22a80 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 73 70   is allocated sp
22a90 61 63 65 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20  ace */..#define 
22aa0 69 73 4d 61 6c 6c 6f 63 65 64 28 58 29 20 20 28  isMalloced(X)  (
22ab0 28 28 58 29 2d 3e 70 72 69 6e 74 66 46 6c 61 67  ((X)->printfFlag
22ac0 73 20 26 20 53 51 4c 49 54 45 5f 50 52 49 4e 54  s & SQLITE_PRINT
22ad0 46 5f 4d 41 4c 4c 4f 43 45 44 29 21 3d 30 29 0a  F_MALLOCED)!=0).
22ae0 0a 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74 65  ../*.** A pointe
22af0 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74  r to this struct
22b00 75 72 65 20 69 73 20 75 73 65 64 20 74 6f 20 63  ure is used to c
22b10 6f 6d 6d 75 6e 69 63 61 74 65 20 69 6e 66 6f 72  ommunicate infor
22b20 6d 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73  mation.** from s
22b30 71 6c 69 74 65 33 49 6e 69 74 20 61 6e 64 20 4f  qlite3Init and O
22b40 50 5f 50 61 72 73 65 53 63 68 65 6d 61 20 69 6e  P_ParseSchema in
22b50 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 49 6e  to the sqlite3In
22b60 69 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74  itCallback..*/.t
22b70 79 70 65 64 65 66 20 73 74 72 75 63 74 20 7b 0a  ypedef struct {.
22b80 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
22b90 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74        /* The dat
22ba0 61 62 61 73 65 20 62 65 69 6e 67 20 69 6e 69 74  abase being init
22bb0 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 63 68 61  ialized */.  cha
22bc0 72 20 2a 2a 70 7a 45 72 72 4d 73 67 3b 20 20 20  r **pzErrMsg;   
22bd0 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67   /* Error messag
22be0 65 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f  e stored here */
22bf0 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20  .  int iDb;     
22c00 20 20 20 20 20 20 20 2f 2a 20 30 20 66 6f 72 20         /* 0 for 
22c10 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20 20  main database.  
22c20 31 20 66 6f 72 20 54 45 4d 50 2c 20 32 2e 2e 20  1 for TEMP, 2.. 
22c30 66 6f 72 20 41 54 54 41 43 48 65 64 20 2a 2f 0a  for ATTACHed */.
22c40 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20    int rc;       
22c50 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20        /* Result 
22c60 63 6f 64 65 20 73 74 6f 72 65 64 20 68 65 72 65  code stored here
22c70 20 2a 2f 0a 7d 20 49 6e 69 74 44 61 74 61 3b 0a   */.} InitData;.
22c80 0a 2f 2a 0a 2a 2a 20 53 74 72 75 63 74 75 72 65  ./*.** Structure
22c90 20 63 6f 6e 74 61 69 6e 69 6e 67 20 67 6c 6f 62   containing glob
22ca0 61 6c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  al configuration
22cb0 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 53 51   data for the SQ
22cc0 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2a  Lite library..**
22cd0 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74 75  .** This structu
22ce0 72 65 20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73  re also contains
22cf0 20 73 6f 6d 65 20 73 74 61 74 65 20 69 6e 66 6f   some state info
22d00 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  rmation..*/.stru
22d10 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67  ct Sqlite3Config
22d20 20 7b 0a 20 20 69 6e 74 20 62 4d 65 6d 73 74 61   {.  int bMemsta
22d30 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
22d40 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
22d50 6f 20 65 6e 61 62 6c 65 20 6d 65 6d 6f 72 79 20  o enable memory 
22d60 73 74 61 74 75 73 20 2a 2f 0a 20 20 69 6e 74 20  status */.  int 
22d70 62 43 6f 72 65 4d 75 74 65 78 3b 20 20 20 20 20  bCoreMutex;     
22d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
22d90 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20   True to enable 
22da0 63 6f 72 65 20 6d 75 74 65 78 69 6e 67 20 2a 2f  core mutexing */
22db0 0a 20 20 69 6e 74 20 62 46 75 6c 6c 4d 75 74 65  .  int bFullMute
22dc0 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  x;              
22dd0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
22de0 65 6e 61 62 6c 65 20 66 75 6c 6c 20 6d 75 74 65  enable full mute
22df0 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62 4f  xing */.  int bO
22e00 70 65 6e 55 72 69 3b 20 20 20 20 20 20 20 20 20  penUri;         
22e10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
22e20 72 75 65 20 74 6f 20 69 6e 74 65 72 70 72 65 74  rue to interpret
22e30 20 66 69 6c 65 6e 61 6d 65 73 20 61 73 20 55 52   filenames as UR
22e40 49 73 20 2a 2f 0a 20 20 69 6e 74 20 62 55 73 65  Is */.  int bUse
22e50 43 69 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  Cis;            
22e60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65            /* Use
22e70 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 69 63 65   covering indice
22e80 73 20 66 6f 72 20 66 75 6c 6c 2d 73 63 61 6e 73  s for full-scans
22e90 20 2a 2f 0a 20 20 69 6e 74 20 62 53 6d 61 6c 6c   */.  int bSmall
22ea0 4d 61 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20  Malloc;         
22eb0 20 20 20 20 20 20 20 20 2f 2a 20 41 76 6f 69 64          /* Avoid
22ec0 20 6c 61 72 67 65 20 6d 65 6d 6f 72 79 20 61 6c   large memory al
22ed0 6c 6f 63 61 74 69 6f 6e 73 20 69 66 20 74 72 75  locations if tru
22ee0 65 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 53 74 72  e */.  int mxStr
22ef0 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  len;            
22f00 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69           /* Maxi
22f10 6d 75 6d 20 73 74 72 69 6e 67 20 6c 65 6e 67 74  mum string lengt
22f20 68 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 76 65 72  h */.  int never
22f30 43 6f 72 72 75 70 74 3b 20 20 20 20 20 20 20 20  Corrupt;        
22f40 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61           /* Data
22f50 62 61 73 65 20 69 73 20 61 6c 77 61 79 73 20 77  base is always w
22f60 65 6c 6c 2d 66 6f 72 6d 65 64 20 2a 2f 0a 20 20  ell-formed */.  
22f70 69 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b  int szLookaside;
22f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f90 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f    /* Default loo
22fa0 6b 61 73 69 64 65 20 62 75 66 66 65 72 20 73 69  kaside buffer si
22fb0 7a 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f  ze */.  int nLoo
22fc0 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20  kaside;         
22fd0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
22fe0 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62  ault lookaside b
22ff0 75 66 66 65 72 20 63 6f 75 6e 74 20 2a 2f 0a 20  uffer count */. 
23000 20 69 6e 74 20 6e 53 74 6d 74 53 70 69 6c 6c 3b   int nStmtSpill;
23010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23020 20 20 20 2f 2a 20 53 74 6d 74 2d 6a 6f 75 72 6e     /* Stmt-journ
23030 61 6c 20 73 70 69 6c 6c 2d 74 6f 2d 64 69 73 6b  al spill-to-disk
23040 20 74 68 72 65 73 68 6f 6c 64 20 2a 2f 0a 20 20   threshold */.  
23050 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68  sqlite3_mem_meth
23060 6f 64 73 20 6d 3b 20 20 20 20 20 20 20 20 20 20  ods m;          
23070 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d    /* Low-level m
23080 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
23090 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20   interface */.  
230a0 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65  sqlite3_mutex_me
230b0 74 68 6f 64 73 20 6d 75 74 65 78 3b 20 20 20 20  thods mutex;    
230c0 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d    /* Low-level m
230d0 75 74 65 78 20 69 6e 74 65 72 66 61 63 65 20 2a  utex interface *
230e0 2f 0a 20 20 73 71 6c 69 74 65 33 5f 70 63 61 63  /.  sqlite3_pcac
230f0 68 65 5f 6d 65 74 68 6f 64 73 32 20 70 63 61 63  he_methods2 pcac
23100 68 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76  he2;  /* Low-lev
23110 65 6c 20 70 61 67 65 2d 63 61 63 68 65 20 69 6e  el page-cache in
23120 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 76 6f 69  terface */.  voi
23130 64 20 2a 70 48 65 61 70 3b 20 20 20 20 20 20 20  d *pHeap;       
23140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
23150 2a 20 48 65 61 70 20 73 74 6f 72 61 67 65 20 73  * Heap storage s
23160 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48  pace */.  int nH
23170 65 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  eap;            
23180 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
23190 69 7a 65 20 6f 66 20 70 48 65 61 70 5b 5d 20 2a  ize of pHeap[] *
231a0 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 71 2c 20 6d  /.  int mnReq, m
231b0 78 52 65 71 3b 20 20 20 20 20 20 20 20 20 20 20  xReq;           
231c0 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20 61 6e 64        /* Min and
231d0 20 6d 61 78 20 68 65 61 70 20 72 65 71 75 65 73   max heap reques
231e0 74 73 20 73 69 7a 65 73 20 2a 2f 0a 20 20 73 71  ts sizes */.  sq
231f0 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 7a 4d 6d  lite3_int64 szMm
23200 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ap;             
23210 2f 2a 20 6d 6d 61 70 28 29 20 73 70 61 63 65 20  /* mmap() space 
23220 70 65 72 20 6f 70 65 6e 20 66 69 6c 65 20 2a 2f  per open file */
23230 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  .  sqlite3_int64
23240 20 6d 78 4d 6d 61 70 3b 20 20 20 20 20 20 20 20   mxMmap;        
23250 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20       /* Maximum 
23260 76 61 6c 75 65 20 66 6f 72 20 73 7a 4d 6d 61 70  value for szMmap
23270 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 61 67   */.  void *pPag
23280 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
23290 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 20          /* Page 
232a0 63 61 63 68 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a  cache memory */.
232b0 20 20 69 6e 74 20 73 7a 50 61 67 65 3b 20 20 20    int szPage;   
232c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
232d0 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65      /* Size of e
232e0 61 63 68 20 70 61 67 65 20 69 6e 20 70 50 61 67  ach page in pPag
232f0 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 61  e[] */.  int nPa
23300 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ge;             
23310 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
23320 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e  mber of pages in
23330 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e   pPage[] */.  in
23340 74 20 6d 78 50 61 72 73 65 72 53 74 61 63 6b 3b  t mxParserStack;
23350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23360 2f 2a 20 6d 61 78 69 6d 75 6d 20 64 65 70 74 68  /* maximum depth
23370 20 6f 66 20 74 68 65 20 70 61 72 73 65 72 20 73   of the parser s
23380 74 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 73 68  tack */.  int sh
23390 61 72 65 64 43 61 63 68 65 45 6e 61 62 6c 65 64  aredCacheEnabled
233a0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74  ;           /* t
233b0 72 75 65 20 69 66 20 73 68 61 72 65 64 2d 63 61  rue if shared-ca
233c0 63 68 65 20 6d 6f 64 65 20 65 6e 61 62 6c 65 64  che mode enabled
233d0 20 2a 2f 0a 20 20 75 33 32 20 73 7a 50 6d 61 3b   */.  u32 szPma;
233e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
233f0 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d          /* Maxim
23400 75 6d 20 53 6f 72 74 65 72 20 50 4d 41 20 73 69  um Sorter PMA si
23410 7a 65 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 61  ze */.  /* The a
23420 62 6f 76 65 20 6d 69 67 68 74 20 62 65 20 69 6e  bove might be in
23430 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 6e 6f 6e  itialized to non
23440 2d 7a 65 72 6f 2e 20 20 54 68 65 20 66 6f 6c 6c  -zero.  The foll
23450 6f 77 69 6e 67 20 6e 65 65 64 20 74 6f 20 61 6c  owing need to al
23460 77 61 79 73 0a 20 20 2a 2a 20 69 6e 69 74 69 61  ways.  ** initia
23470 6c 6c 79 20 62 65 20 7a 65 72 6f 2c 20 68 6f 77  lly be zero, how
23480 65 76 65 72 2e 20 2a 2f 0a 20 20 69 6e 74 20 69  ever. */.  int i
23490 73 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20  sInit;          
234a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
234b0 54 72 75 65 20 61 66 74 65 72 20 69 6e 69 74 69  True after initi
234c0 61 6c 69 7a 61 74 69 6f 6e 20 68 61 73 20 66 69  alization has fi
234d0 6e 69 73 68 65 64 20 2a 2f 0a 20 20 69 6e 74 20  nished */.  int 
234e0 69 6e 50 72 6f 67 72 65 73 73 3b 20 20 20 20 20  inProgress;     
234f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
23500 20 54 72 75 65 20 77 68 69 6c 65 20 69 6e 69 74   True while init
23510 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 20 70 72  ialization in pr
23520 6f 67 72 65 73 73 20 2a 2f 0a 20 20 69 6e 74 20  ogress */.  int 
23530 69 73 4d 75 74 65 78 49 6e 69 74 3b 20 20 20 20  isMutexInit;    
23540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
23550 20 54 72 75 65 20 61 66 74 65 72 20 6d 75 74 65   True after mute
23560 78 65 73 20 61 72 65 20 69 6e 69 74 69 61 6c 69  xes are initiali
23570 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d  zed */.  int isM
23580 61 6c 6c 6f 63 49 6e 69 74 3b 20 20 20 20 20 20  allocInit;      
23590 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
235a0 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20  ue after malloc 
235b0 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  is initialized *
235c0 2f 0a 20 20 69 6e 74 20 69 73 50 43 61 63 68 65  /.  int isPCache
235d0 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  Init;           
235e0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66        /* True af
235f0 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e  ter malloc is in
23600 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69  itialized */.  i
23610 6e 74 20 6e 52 65 66 49 6e 69 74 4d 75 74 65 78  nt nRefInitMutex
23620 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
23630 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73   /* Number of us
23640 65 72 73 20 6f 66 20 70 49 6e 69 74 4d 75 74 65  ers of pInitMute
23650 78 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d  x */.  sqlite3_m
23660 75 74 65 78 20 2a 70 49 6e 69 74 4d 75 74 65 78  utex *pInitMutex
23670 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 75 74 65  ;        /* Mute
23680 78 20 75 73 65 64 20 62 79 20 73 71 6c 69 74 65  x used by sqlite
23690 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 20 2a  3_initialize() *
236a0 2f 0a 20 20 76 6f 69 64 20 28 2a 78 4c 6f 67 29  /.  void (*xLog)
236b0 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74  (void*,int,const
236c0 20 63 68 61 72 2a 29 3b 20 2f 2a 20 46 75 6e 63   char*); /* Func
236d0 74 69 6f 6e 20 66 6f 72 20 6c 6f 67 67 69 6e 67  tion for logging
236e0 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 4c 6f 67   */.  void *pLog
236f0 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
23700 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69             /* Fi
23710 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  rst argument to 
23720 78 4c 6f 67 28 29 20 2a 2f 0a 23 69 66 64 65 66  xLog() */.#ifdef
23730 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
23740 51 4c 4c 4f 47 0a 20 20 76 6f 69 64 28 2a 78 53  QLLOG.  void(*xS
23750 71 6c 6c 6f 67 29 28 76 6f 69 64 2a 2c 73 71 6c  qllog)(void*,sql
23760 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
23770 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  *, int);.  void 
23780 2a 70 53 71 6c 6c 6f 67 41 72 67 3b 0a 23 65 6e  *pSqllogArg;.#en
23790 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
237a0 45 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45 0a  E_VDBE_COVERAGE.
237b0 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69    /* The followi
237c0 6e 67 20 63 61 6c 6c 62 61 63 6b 20 28 69 66 20  ng callback (if 
237d0 6e 6f 74 20 4e 55 4c 4c 29 20 69 73 20 69 6e 76  not NULL) is inv
237e0 6f 6b 65 64 20 6f 6e 20 65 76 65 72 79 20 56 44  oked on every VD
237f0 42 45 20 62 72 61 6e 63 68 0a 20 20 2a 2a 20 6f  BE branch.  ** o
23800 70 65 72 61 74 69 6f 6e 2e 20 20 53 65 74 20 74  peration.  Set t
23810 68 65 20 63 61 6c 6c 62 61 63 6b 20 75 73 69 6e  he callback usin
23820 67 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52  g SQLITE_TESTCTR
23830 4c 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45 2e  L_VDBE_COVERAGE.
23840 0a 20 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  .  */.  void (*x
23850 56 64 62 65 42 72 61 6e 63 68 29 28 76 6f 69 64  VdbeBranch)(void
23860 2a 2c 69 6e 74 20 69 53 72 63 4c 69 6e 65 2c 75  *,int iSrcLine,u
23870 38 20 65 54 68 69 73 2c 75 38 20 65 4d 78 29 3b  8 eThis,u8 eMx);
23880 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 2a 2f    /* Callback */
23890 0a 20 20 76 6f 69 64 20 2a 70 56 64 62 65 42 72  .  void *pVdbeBr
238a0 61 6e 63 68 41 72 67 3b 20 20 20 20 20 20 20 20  anchArg;        
238b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
238c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
238d0 31 73 74 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a  1st argument */.
238e0 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
238f0 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45  QLITE_UNTESTABLE
23900 0a 20 20 69 6e 74 20 28 2a 78 54 65 73 74 43 61  .  int (*xTestCa
23910 6c 6c 62 61 63 6b 29 28 69 6e 74 29 3b 20 20 20  llback)(int);   
23920 20 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20       /* Invoked 
23930 62 79 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53  by sqlite3FaultS
23940 69 6d 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  im() */.#endif. 
23950 20 69 6e 74 20 62 4c 6f 63 61 6c 74 69 6d 65 46   int bLocaltimeF
23960 61 75 6c 74 3b 20 20 20 20 20 20 20 20 20 20 20  ault;           
23970 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 66 61     /* True to fa
23980 69 6c 20 6c 6f 63 61 6c 74 69 6d 65 28 29 20 63  il localtime() c
23990 61 6c 6c 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4f  alls */.  int iO
239a0 6e 63 65 52 65 73 65 74 54 68 72 65 73 68 6f 6c  nceResetThreshol
239b0 64 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57  d;          /* W
239c0 68 65 6e 20 74 6f 20 72 65 73 65 74 20 4f 50 5f  hen to reset OP_
239d0 4f 6e 63 65 20 63 6f 75 6e 74 65 72 73 20 2a 2f  Once counters */
239e0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20  .};../*.** This 
239f0 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e  macro is used in
23a00 73 69 64 65 20 6f 66 20 61 73 73 65 72 74 28 29  side of assert()
23a10 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 69   statements to i
23a20 6e 64 69 63 61 74 65 20 74 68 61 74 0a 2a 2a 20  ndicate that.** 
23a30 74 68 65 20 61 73 73 65 72 74 20 69 73 20 6f 6e  the assert is on
23a40 6c 79 20 76 61 6c 69 64 20 6f 6e 20 61 20 77 65  ly valid on a we
23a50 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61  ll-formed databa
23a60 73 65 2e 20 20 49 6e 73 74 65 61 64 20 6f 66 3a  se.  Instead of:
23a70 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72  .**.**     asser
23a80 74 28 20 58 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e  t( X );.**.** On
23a90 65 20 77 72 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20  e writes:.**.** 
23aa0 20 20 20 20 61 73 73 65 72 74 28 20 58 20 7c 7c      assert( X ||
23ab0 20 43 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a 2a   CORRUPT_DB );.*
23ac0 2a 0a 2a 2a 20 43 4f 52 52 55 50 54 5f 44 42 20  *.** CORRUPT_DB 
23ad0 69 73 20 74 72 75 65 20 64 75 72 69 6e 67 20 6e  is true during n
23ae0 6f 72 6d 61 6c 20 6f 70 65 72 61 74 69 6f 6e 2e  ormal operation.
23af0 20 20 43 4f 52 52 55 50 54 5f 44 42 20 64 6f 65    CORRUPT_DB doe
23b00 73 20 6e 6f 74 20 69 6e 64 69 63 61 74 65 0a 2a  s not indicate.*
23b10 2a 20 74 68 61 74 20 74 68 65 20 64 61 74 61 62  * that the datab
23b20 61 73 65 20 69 73 20 64 65 66 69 6e 69 74 65 6c  ase is definitel
23b30 79 20 63 6f 72 72 75 70 74 2c 20 6f 6e 6c 79 20  y corrupt, only 
23b40 74 68 61 74 20 69 74 20 6d 69 67 68 74 20 62 65  that it might be
23b50 20 63 6f 72 72 75 70 74 2e 0a 2a 2a 20 46 6f 72   corrupt..** For
23b60 20 6d 6f 73 74 20 74 65 73 74 20 63 61 73 65 73   most test cases
23b70 2c 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20  , CORRUPT_DB is 
23b80 73 65 74 20 74 6f 20 66 61 6c 73 65 20 75 73 69  set to false usi
23b90 6e 67 20 61 20 73 70 65 63 69 61 6c 0a 2a 2a 20  ng a special.** 
23ba0 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e  sqlite3_test_con
23bb0 74 72 6f 6c 28 29 2e 20 20 54 68 69 73 20 65 6e  trol().  This en
23bc0 61 62 6c 65 73 20 61 73 73 65 72 74 28 29 20 73  ables assert() s
23bd0 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 70 72 6f  tatements to pro
23be0 76 65 0a 2a 2a 20 74 68 69 6e 67 73 20 74 68 61  ve.** things tha
23bf0 74 20 61 72 65 20 61 6c 77 61 79 73 20 74 72 75  t are always tru
23c00 65 20 66 6f 72 20 77 65 6c 6c 2d 66 6f 72 6d 65  e for well-forme
23c10 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a  d databases..*/.
23c20 23 64 65 66 69 6e 65 20 43 4f 52 52 55 50 54 5f  #define CORRUPT_
23c30 44 42 20 20 28 73 71 6c 69 74 65 33 43 6f 6e 66  DB  (sqlite3Conf
23c40 69 67 2e 6e 65 76 65 72 43 6f 72 72 75 70 74 3d  ig.neverCorrupt=
23c50 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65  =0)../*.** Conte
23c60 78 74 20 70 6f 69 6e 74 65 72 20 70 61 73 73 65  xt pointer passe
23c70 64 20 64 6f 77 6e 20 74 68 72 6f 75 67 68 20 74  d down through t
23c80 68 65 20 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f  he tree-walk..*/
23c90 0a 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 7b  .struct Walker {
23ca0 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65  .  Parse *pParse
23cb0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
23cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
23cd0 50 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20  Parser context. 
23ce0 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 45 78 70   */.  int (*xExp
23cf0 72 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65  rCallback)(Walke
23d00 72 2a 2c 20 45 78 70 72 2a 29 3b 20 20 20 20 20  r*, Expr*);     
23d10 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20  /* Callback for 
23d20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20  expressions */. 
23d30 20 69 6e 74 20 28 2a 78 53 65 6c 65 63 74 43 61   int (*xSelectCa
23d40 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c  llback)(Walker*,
23d50 53 65 6c 65 63 74 2a 29 3b 20 20 2f 2a 20 43 61  Select*);  /* Ca
23d60 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43  llback for SELEC
23d70 54 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  Ts */.  void (*x
23d80 53 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b 32 29  SelectCallback2)
23d90 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a  (Walker*,Select*
23da0 29 3b 2f 2a 20 53 65 63 6f 6e 64 20 63 61 6c 6c  );/* Second call
23db0 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73  back for SELECTs
23dc0 20 2a 2f 0a 20 20 69 6e 74 20 77 61 6c 6b 65 72   */.  int walker
23dd0 44 65 70 74 68 3b 20 20 20 20 20 20 20 20 20 20  Depth;          
23de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23df0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 75 62  /* Number of sub
23e00 71 75 65 72 69 65 73 20 2a 2f 0a 20 20 75 38 20  queries */.  u8 
23e10 65 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20  eCode;          
23e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e30 20 20 20 20 20 20 20 2f 2a 20 41 20 73 6d 61 6c         /* A smal
23e40 6c 20 70 72 6f 63 65 73 73 69 6e 67 20 63 6f 64  l processing cod
23e50 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20  e */.  union {  
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 20 20 20 20 20 20 20 20                  
23e80 20 2f 2a 20 45 78 74 72 61 20 64 61 74 61 20 66   /* Extra data f
23e90 6f 72 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  or callback */. 
23ea0 20 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a     NameContext *
23eb0 70 4e 43 3b 20 20 20 20 20 20 20 20 20 20 20 20  pNC;            
23ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
23ed0 4e 61 6d 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a  Naming context *
23ee0 2f 0a 20 20 20 20 69 6e 74 20 6e 3b 20 20 20 20  /.    int n;    
23ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f10 2f 2a 20 41 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  /* A counter */.
23f20 20 20 20 20 69 6e 74 20 69 43 75 72 3b 20 20 20      int iCur;   
23f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
23f50 20 41 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72   A cursor number
23f60 20 2a 2f 0a 20 20 20 20 53 72 63 4c 69 73 74 20   */.    SrcList 
23f70 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 20 20 20  *pSrcList;      
23f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f90 20 20 2f 2a 20 46 52 4f 4d 20 63 6c 61 75 73 65    /* FROM clause
23fa0 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 53   */.    struct S
23fb0 72 63 43 6f 75 6e 74 20 2a 70 53 72 63 43 6f 75  rcCount *pSrcCou
23fc0 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nt;             
23fd0 20 20 2f 2a 20 43 6f 75 6e 74 69 6e 67 20 63 6f    /* Counting co
23fe0 6c 75 6d 6e 20 72 65 66 65 72 65 6e 63 65 73 20  lumn references 
23ff0 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 43 43  */.    struct CC
24000 75 72 48 69 6e 74 20 2a 70 43 43 75 72 48 69 6e  urHint *pCCurHin
24010 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
24020 20 2f 2a 20 55 73 65 64 20 62 79 20 63 6f 64 65   /* Used by code
24030 43 75 72 73 6f 72 48 69 6e 74 28 29 20 2a 2f 0a  CursorHint() */.
24040 20 20 20 20 69 6e 74 20 2a 61 69 43 6f 6c 3b 20      int *aiCol; 
24050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
24070 20 61 72 72 61 79 20 6f 66 20 63 6f 6c 75 6d 6e   array of column
24080 20 69 6e 64 65 78 65 73 20 2a 2f 0a 20 20 20 20   indexes */.    
24090 73 74 72 75 63 74 20 49 64 78 43 6f 76 65 72 20  struct IdxCover 
240a0 2a 70 49 64 78 43 6f 76 65 72 3b 20 20 20 20 20  *pIdxCover;     
240b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 68 65            /* Che
240c0 63 6b 20 66 6f 72 20 69 6e 64 65 78 20 63 6f 76  ck for index cov
240d0 65 72 61 67 65 20 2a 2f 0a 20 20 20 20 73 74 72  erage */.    str
240e0 75 63 74 20 49 64 78 45 78 70 72 54 72 61 6e 73  uct IdxExprTrans
240f0 20 2a 70 49 64 78 54 72 61 6e 73 3b 20 20 20 20   *pIdxTrans;    
24100 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 76 65 72         /* Conver
24110 74 20 69 6e 64 65 78 65 64 20 65 78 70 72 20 74  t indexed expr t
24120 6f 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 20 20  o column */.    
24130 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70  ExprList *pGroup
24140 42 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  By;             
24150 20 20 20 20 20 20 20 20 20 20 2f 2a 20 47 52 4f            /* GRO
24160 55 50 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a  UP BY clause */.
24170 20 20 20 20 73 74 72 75 63 74 20 48 61 76 69 6e      struct Havin
24180 67 54 6f 57 68 65 72 65 43 74 78 20 2a 70 48 61  gToWhereCtx *pHa
24190 76 69 6e 67 43 74 78 3b 20 20 20 20 20 20 2f 2a  vingCtx;      /*
241a0 20 48 41 56 49 4e 47 20 74 6f 20 57 48 45 52 45   HAVING to WHERE
241b0 20 63 6c 61 75 73 65 20 63 74 78 20 2a 2f 0a 20   clause ctx */. 
241c0 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72   } u;.};../* For
241d0 77 61 72 64 20 64 65 63 6c 61 72 61 74 69 6f 6e  ward declaration
241e0 73 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  s */.int sqlite3
241f0 57 61 6c 6b 45 78 70 72 28 57 61 6c 6b 65 72 2a  WalkExpr(Walker*
24200 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  , Expr*);.int sq
24210 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 4c 69 73  lite3WalkExprLis
24220 74 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 4c  t(Walker*, ExprL
24230 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
24240 65 33 57 61 6c 6b 53 65 6c 65 63 74 28 57 61 6c  e3WalkSelect(Wal
24250 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  ker*, Select*);.
24260 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53  int sqlite3WalkS
24270 65 6c 65 63 74 45 78 70 72 28 57 61 6c 6b 65 72  electExpr(Walker
24280 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  *, Select*);.int
24290 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65   sqlite3WalkSele
242a0 63 74 46 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20  ctFrom(Walker*, 
242b0 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
242c0 6c 69 74 65 33 45 78 70 72 57 61 6c 6b 4e 6f 6f  lite3ExprWalkNoo
242d0 70 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a  p(Walker*, Expr*
242e0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 65  );.int sqlite3Se
242f0 6c 65 63 74 57 61 6c 6b 4e 6f 6f 70 28 57 61 6c  lectWalkNoop(Wal
24300 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  ker*, Select*);.
24310 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63  int sqlite3Selec
24320 74 57 61 6c 6b 46 61 69 6c 28 57 61 6c 6b 65 72  tWalkFail(Walker
24330 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 23 69 66  *, Select*);.#if
24340 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
24350 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c  .void sqlite3Sel
24360 65 63 74 57 61 6c 6b 41 73 73 65 72 74 32 28 57  ectWalkAssert2(W
24370 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29  alker*, Select*)
24380 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
24390 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d  Return code from
243a0 20 74 68 65 20 70 61 72 73 65 2d 74 72 65 65 20   the parse-tree 
243b0 77 61 6c 6b 69 6e 67 20 70 72 69 6d 69 74 69 76  walking primitiv
243c0 65 73 20 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20  es and their.** 
243d0 63 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64  callbacks..*/.#d
243e0 65 66 69 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e  efine WRC_Contin
243f0 75 65 20 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e  ue    0   /* Con
24400 74 69 6e 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20  tinue down into 
24410 63 68 69 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66  children */.#def
24420 69 6e 65 20 57 52 43 5f 50 72 75 6e 65 20 20 20  ine WRC_Prune   
24430 20 20 20 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20      1   /* Omit 
24440 63 68 69 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e  children but con
24450 74 69 6e 75 65 20 77 61 6c 6b 69 6e 67 20 73 69  tinue walking si
24460 62 6c 69 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e  blings */.#defin
24470 65 20 57 52 43 5f 41 62 6f 72 74 20 20 20 20 20  e WRC_Abort     
24480 20 20 32 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e    2   /* Abandon
24490 20 74 68 65 20 74 72 65 65 20 77 61 6c 6b 20 2a   the tree walk *
244a0 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  /../*.** An inst
244b0 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72  ance of this str
244c0 75 63 74 75 72 65 20 72 65 70 72 65 73 65 6e 74  ucture represent
244d0 73 20 61 20 73 65 74 20 6f 66 20 6f 6e 65 20 6f  s a set of one o
244e0 72 20 6d 6f 72 65 20 43 54 45 73 0a 2a 2a 20 28  r more CTEs.** (
244f0 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70  common table exp
24500 72 65 73 73 69 6f 6e 73 29 20 63 72 65 61 74 65  ressions) create
24510 64 20 62 79 20 61 20 73 69 6e 67 6c 65 20 57 49  d by a single WI
24520 54 48 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74  TH clause..*/.st
24530 72 75 63 74 20 57 69 74 68 20 7b 0a 20 20 69 6e  ruct With {.  in
24540 74 20 6e 43 74 65 3b 20 20 20 20 20 20 20 20 20  t nCte;         
24550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
24560 20 4e 75 6d 62 65 72 20 6f 66 20 43 54 45 73 20   Number of CTEs 
24570 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61 75  in the WITH clau
24580 73 65 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 4f  se */.  With *pO
24590 75 74 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  uter;           
245a0 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 61          /* Conta
245b0 69 6e 69 6e 67 20 57 49 54 48 20 63 6c 61 75 73  ining WITH claus
245c0 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20  e, or NULL */.  
245d0 73 74 72 75 63 74 20 43 74 65 20 7b 20 20 20 20  struct Cte {    
245e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
245f0 2f 2a 20 46 6f 72 20 65 61 63 68 20 43 54 45 20  /* For each CTE 
24600 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61 75  in the WITH clau
24610 73 65 2e 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63 68  se.... */.    ch
24620 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
24630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
24640 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 43 54   Name of this CT
24650 45 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69 73  E */.    ExprLis
24660 74 20 2a 70 43 6f 6c 73 3b 20 20 20 20 20 20 20  t *pCols;       
24670 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74           /* List
24680 20 6f 66 20 65 78 70 6c 69 63 69 74 20 63 6f 6c   of explicit col
24690 75 6d 6e 20 6e 61 6d 65 73 2c 20 6f 72 20 4e 55  umn names, or NU
246a0 4c 4c 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74  LL */.    Select
246b0 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 20   *pSelect;      
246c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
246d0 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74   definition of t
246e0 68 69 73 20 43 54 45 20 2a 2f 0a 20 20 20 20 63  his CTE */.    c
246f0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 74 65 45  onst char *zCteE
24700 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  rr;            /
24710 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20  * Error message 
24720 66 6f 72 20 63 69 72 63 75 6c 61 72 20 72 65 66  for circular ref
24730 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 61  erences */.  } a
24740 5b 31 5d 3b 0a 7d 3b 0a 0a 23 69 66 64 65 66 20  [1];.};..#ifdef 
24750 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a  SQLITE_DEBUG./*.
24760 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
24770 66 20 74 68 65 20 54 72 65 65 56 69 65 77 20 6f  f the TreeView o
24780 62 6a 65 63 74 20 69 73 20 75 73 65 64 20 66 6f  bject is used fo
24790 72 20 70 72 69 6e 74 69 6e 67 20 74 68 65 20 63  r printing the c
247a0 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 64 61 74  ontent of.** dat
247b0 61 20 73 74 72 75 63 74 75 72 65 73 20 6f 6e 20  a structures on 
247c0 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
247d0 74 66 28 29 20 75 73 69 6e 67 20 61 20 74 72 65  tf() using a tre
247e0 65 2d 6c 69 6b 65 20 76 69 65 77 2e 0a 2a 2f 0a  e-like view..*/.
247f0 73 74 72 75 63 74 20 54 72 65 65 56 69 65 77 20  struct TreeView 
24800 7b 0a 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20  {.  int iLevel; 
24810 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57              /* W
24820 68 69 63 68 20 6c 65 76 65 6c 20 6f 66 20 74 68  hich level of th
24830 65 20 74 72 65 65 20 77 65 20 61 72 65 20 6f 6e  e tree we are on
24840 20 2a 2f 0a 20 20 75 38 20 20 62 4c 69 6e 65 5b   */.  u8  bLine[
24850 31 30 30 5d 3b 20 20 20 20 20 20 20 20 20 2f 2a  100];         /*
24860 20 44 72 61 77 20 76 65 72 74 69 63 61 6c 20 69   Draw vertical i
24870 6e 20 63 6f 6c 75 6d 6e 20 69 20 69 66 20 62 4c  n column i if bL
24880 69 6e 65 5b 69 5d 20 69 73 20 74 72 75 65 20 2a  ine[i] is true *
24890 2f 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53  /.};.#endif /* S
248a0 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 0a  QLITE_DEBUG */..
248b0 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e 67 20 7a  /*.** Assuming z
248c0 49 6e 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  In points to the
248d0 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20 61   first byte of a
248e0 20 55 54 46 2d 38 20 63 68 61 72 61 63 74 65 72   UTF-8 character
248f0 2c 0a 2a 2a 20 61 64 76 61 6e 63 65 20 7a 49 6e  ,.** advance zIn
24900 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65   to point to the
24910 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20 74   first byte of t
24920 68 65 20 6e 65 78 74 20 55 54 46 2d 38 20 63 68  he next UTF-8 ch
24930 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 23 64 65 66  aracter..*/.#def
24940 69 6e 65 20 53 51 4c 49 54 45 5f 53 4b 49 50 5f  ine SQLITE_SKIP_
24950 55 54 46 38 28 7a 49 6e 29 20 7b 20 20 20 20 20  UTF8(zIn) {     
24960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24970 20 20 20 5c 0a 20 20 69 66 28 20 28 2a 28 7a 49     \.  if( (*(zI
24980 6e 2b 2b 29 29 3e 3d 30 78 63 30 20 29 7b 20 20  n++))>=0xc0 ){  
24990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
249a0 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20              \.  
249b0 20 20 77 68 69 6c 65 28 20 28 2a 7a 49 6e 20 26    while( (*zIn &
249c0 20 30 78 63 30 29 3d 3d 30 78 38 30 20 29 7b 20   0xc0)==0x80 ){ 
249d0 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20 20 20 20 20  zIn++; }        
249e0 20 20 20 20 20 5c 0a 20 20 7d 20 20 20 20 20 20       \.  }      
249f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a                \.
24a20 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  }../*.** The SQL
24a30 49 54 45 5f 2a 5f 42 4b 50 54 20 6d 61 63 72 6f  ITE_*_BKPT macro
24a40 73 20 61 72 65 20 73 75 62 73 74 69 74 75 74 65  s are substitute
24a50 73 20 66 6f 72 20 74 68 65 20 65 72 72 6f 72 20  s for the error 
24a60 63 6f 64 65 73 20 77 69 74 68 0a 2a 2a 20 74 68  codes with.** th
24a70 65 20 73 61 6d 65 20 6e 61 6d 65 20 62 75 74 20  e same name but 
24a80 77 69 74 68 6f 75 74 20 74 68 65 20 5f 42 4b 50  without the _BKP
24a90 54 20 73 75 66 66 69 78 2e 20 20 54 68 65 73 65  T suffix.  These
24aa0 20 6d 61 63 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a   macros invoke.*
24ab0 2a 20 72 6f 75 74 69 6e 65 73 20 74 68 61 74 20  * routines that 
24ac0 72 65 70 6f 72 74 20 74 68 65 20 6c 69 6e 65 2d  report the line-
24ad0 6e 75 6d 62 65 72 20 6f 6e 20 77 68 69 63 68 20  number on which 
24ae0 74 68 65 20 65 72 72 6f 72 20 6f 72 69 67 69 6e  the error origin
24af0 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 73 71  ated.** using sq
24b00 6c 69 74 65 33 5f 6c 6f 67 28 29 2e 20 20 54 68  lite3_log().  Th
24b10 65 20 72 6f 75 74 69 6e 65 73 20 61 6c 73 6f 20  e routines also 
24b20 70 72 6f 76 69 64 65 20 61 20 63 6f 6e 76 65 6e  provide a conven
24b30 69 65 6e 74 20 70 6c 61 63 65 0a 2a 2a 20 74 6f  ient place.** to
24b40 20 73 65 74 20 61 20 64 65 62 75 67 67 65 72 20   set a debugger 
24b50 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69  breakpoint..*/.i
24b60 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70  nt sqlite3Corrup
24b70 74 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74  tError(int);.int
24b80 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72   sqlite3MisuseEr
24b90 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71  ror(int);.int sq
24ba0 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72  lite3CantopenErr
24bb0 6f 72 28 69 6e 74 29 3b 0a 23 64 65 66 69 6e 65  or(int);.#define
24bc0 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f   SQLITE_CORRUPT_
24bd0 42 4b 50 54 20 73 71 6c 69 74 65 33 43 6f 72 72  BKPT sqlite3Corr
24be0 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f  uptError(__LINE_
24bf0 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  _).#define SQLIT
24c00 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 20 73 71  E_MISUSE_BKPT sq
24c10 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72  lite3MisuseError
24c20 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69  (__LINE__).#defi
24c30 6e 65 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50  ne SQLITE_CANTOP
24c40 45 4e 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43  EN_BKPT sqlite3C
24c50 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 5f 5f 4c  antopenError(__L
24c60 49 4e 45 5f 5f 29 0a 23 69 66 64 65 66 20 53 51  INE__).#ifdef SQ
24c70 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 6e 74  LITE_DEBUG.  int
24c80 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d 45 72 72   sqlite3NomemErr
24c90 6f 72 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73  or(int);.  int s
24ca0 71 6c 69 74 65 33 49 6f 65 72 72 6e 6f 6d 65 6d  qlite3Ioerrnomem
24cb0 45 72 72 6f 72 28 69 6e 74 29 3b 0a 20 20 69 6e  Error(int);.  in
24cc0 74 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74  t sqlite3Corrupt
24cd0 50 67 6e 6f 45 72 72 6f 72 28 69 6e 74 2c 50 67  PgnoError(int,Pg
24ce0 6e 6f 29 3b 0a 23 20 64 65 66 69 6e 65 20 53 51  no);.# define SQ
24cf0 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20  LITE_NOMEM_BKPT 
24d00 73 71 6c 69 74 65 33 4e 6f 6d 65 6d 45 72 72 6f  sqlite3NomemErro
24d10 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 20 64 65  r(__LINE__).# de
24d20 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4f 45 52  fine SQLITE_IOER
24d30 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 73 71 6c  R_NOMEM_BKPT sql
24d40 69 74 65 33 49 6f 65 72 72 6e 6f 6d 65 6d 45 72  ite3IoerrnomemEr
24d50 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 20  ror(__LINE__).# 
24d60 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f  define SQLITE_CO
24d70 52 52 55 50 54 5f 50 47 4e 4f 28 50 29 20 73 71  RRUPT_PGNO(P) sq
24d80 6c 69 74 65 33 43 6f 72 72 75 70 74 50 67 6e 6f  lite3CorruptPgno
24d90 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 2c 28  Error(__LINE__,(
24da0 50 29 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  P)).#else.# defi
24db0 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f  ne SQLITE_NOMEM_
24dc0 42 4b 50 54 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  BKPT SQLITE_NOME
24dd0 4d 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  M.# define SQLIT
24de0 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b  E_IOERR_NOMEM_BK
24df0 50 54 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f  PT SQLITE_IOERR_
24e00 4e 4f 4d 45 4d 0a 23 20 64 65 66 69 6e 65 20 53  NOMEM.# define S
24e10 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 50 47  QLITE_CORRUPT_PG
24e20 4e 4f 28 50 29 20 73 71 6c 69 74 65 33 43 6f 72  NO(P) sqlite3Cor
24e30 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  ruptError(__LINE
24e40 5f 5f 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  __).#endif../*.*
24e50 2a 20 46 54 53 33 20 61 6e 64 20 46 54 53 34 20  * FTS3 and FTS4 
24e60 62 6f 74 68 20 72 65 71 75 69 72 65 20 76 69 72  both require vir
24e70 74 75 61 6c 20 74 61 62 6c 65 20 73 75 70 70 6f  tual table suppo
24e80 72 74 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  rt.*/.#if define
24e90 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  d(SQLITE_OMIT_VI
24ea0 52 54 55 41 4c 54 41 42 4c 45 29 0a 23 20 75 6e  RTUALTABLE).# un
24eb0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
24ec0 45 5f 46 54 53 33 0a 23 20 75 6e 64 65 66 20 53  E_FTS3.# undef S
24ed0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
24ee0 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  4.#endif../*.** 
24ef0 46 54 53 34 20 69 73 20 72 65 61 6c 6c 79 20 61  FTS4 is really a
24f00 6e 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f 72 20  n extension for 
24f10 46 54 53 33 2e 20 20 49 74 20 69 73 20 65 6e 61  FTS3.  It is ena
24f20 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65 0a 2a  bled using the.*
24f30 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  * SQLITE_ENABLE_
24f40 46 54 53 33 20 6d 61 63 72 6f 2e 20 20 42 75 74  FTS3 macro.  But
24f50 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75 73   to avoid confus
24f60 69 6f 6e 20 77 65 20 61 6c 73 6f 20 63 61 6c 6c  ion we also call
24f70 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 45  .** the SQLITE_E
24f80 4e 41 42 4c 45 5f 46 54 53 34 20 6d 61 63 72 6f  NABLE_FTS4 macro
24f90 20 74 6f 20 73 65 72 76 65 20 61 73 20 61 6e 20   to serve as an 
24fa0 61 6c 69 61 73 20 66 6f 72 20 53 51 4c 49 54 45  alias for SQLITE
24fb0 5f 45 4e 41 42 4c 45 5f 46 54 53 33 2e 0a 2a 2f  _ENABLE_FTS3..*/
24fc0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
24fd0 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 29  ITE_ENABLE_FTS4)
24fe0 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
24ff0 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29  ITE_ENABLE_FTS3)
25000 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
25010 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 31 0a 23  _ENABLE_FTS3 1.#
25020 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
25030 20 63 74 79 70 65 2e 68 20 68 65 61 64 65 72 20   ctype.h header 
25040 69 73 20 6e 65 65 64 65 64 20 66 6f 72 20 6e 6f  is needed for no
25050 6e 2d 41 53 43 49 49 20 73 79 73 74 65 6d 73 2e  n-ASCII systems.
25060 20 20 49 74 20 69 73 20 61 6c 73 6f 0a 2a 2a 20    It is also.** 
25070 6e 65 65 64 65 64 20 62 79 20 46 54 53 33 20 77  needed by FTS3 w
25080 68 65 6e 20 46 54 53 33 20 69 73 20 69 6e 63 6c  hen FTS3 is incl
25090 75 64 65 64 20 69 6e 20 74 68 65 20 61 6d 61 6c  uded in the amal
250a0 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66  gamation..*/.#if
250b0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
250c0 5f 41 53 43 49 49 29 20 7c 7c 20 5c 0a 20 20 20  _ASCII) || \.   
250d0 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   (defined(SQLITE
250e0 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 20 26 26  _ENABLE_FTS3) &&
250f0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
25100 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 29 29 0a 23  AMALGAMATION)).#
25110 20 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65 2e   include <ctype.
25120 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  h>.#endif../*.**
25130 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   The following m
25140 61 63 72 6f 73 20 6d 69 6d 69 63 20 74 68 65 20  acros mimic the 
25150 73 74 61 6e 64 61 72 64 20 6c 69 62 72 61 72 79  standard library
25160 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f 75 70 70   functions toupp
25170 65 72 28 29 2c 0a 2a 2a 20 69 73 73 70 61 63 65  er(),.** isspace
25180 28 29 2c 20 69 73 61 6c 6e 75 6d 28 29 2c 20 69  (), isalnum(), i
25190 73 64 69 67 69 74 28 29 20 61 6e 64 20 69 73 78  sdigit() and isx
251a0 64 69 67 69 74 28 29 2c 20 72 65 73 70 65 63 74  digit(), respect
251b0 69 76 65 6c 79 2e 20 54 68 65 0a 2a 2a 20 73 71  ively. The.** sq
251c0 6c 69 74 65 20 76 65 72 73 69 6f 6e 73 20 6f 6e  lite versions on
251d0 6c 79 20 77 6f 72 6b 20 66 6f 72 20 41 53 43 49  ly work for ASCI
251e0 49 20 63 68 61 72 61 63 74 65 72 73 2c 20 72 65  I characters, re
251f0 67 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63 61  gardless of loca
25200 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  le..*/.#ifdef SQ
25210 4c 49 54 45 5f 41 53 43 49 49 0a 23 20 64 65 66  LITE_ASCII.# def
25220 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70  ine sqlite3Toupp
25230 65 72 28 78 29 20 20 28 28 78 29 26 7e 28 73 71  er(x)  ((x)&~(sq
25240 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
25250 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
25260 5d 26 30 78 32 30 29 29 0a 23 20 64 65 66 69 6e  ]&0x20)).# defin
25270 65 20 73 71 6c 69 74 65 33 49 73 73 70 61 63 65  e sqlite3Isspace
25280 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74  (x)   (sqlite3Ct
25290 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
252a0 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 31 29   char)(x)]&0x01)
252b0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
252c0 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 28 73  3Isalnum(x)   (s
252d0 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
252e0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
252f0 29 5d 26 30 78 30 36 29 0a 23 20 64 65 66 69 6e  )]&0x06).# defin
25300 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61  e sqlite3Isalpha
25310 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74  (x)   (sqlite3Ct
25320 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
25330 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 32 29   char)(x)]&0x02)
25340 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
25350 33 49 73 64 69 67 69 74 28 78 29 20 20 20 28 73  3Isdigit(x)   (s
25360 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
25370 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
25380 29 5d 26 30 78 30 34 29 0a 23 20 64 65 66 69 6e  )]&0x04).# defin
25390 65 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69  e sqlite3Isxdigi
253a0 74 28 78 29 20 20 28 73 71 6c 69 74 65 33 43 74  t(x)  (sqlite3Ct
253b0 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
253c0 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 38 29   char)(x)]&0x08)
253d0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
253e0 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 28 73  3Tolower(x)   (s
253f0 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77  qlite3UpperToLow
25400 65 72 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  er[(unsigned cha
25410 72 29 28 78 29 5d 29 0a 23 20 64 65 66 69 6e 65  r)(x)]).# define
25420 20 73 71 6c 69 74 65 33 49 73 71 75 6f 74 65 28   sqlite3Isquote(
25430 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79  x)   (sqlite3Cty
25440 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
25450 63 68 61 72 29 28 78 29 5d 26 30 78 38 30 29 0a  char)(x)]&0x80).
25460 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
25470 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78 29  qlite3Toupper(x)
25480 20 20 20 74 6f 75 70 70 65 72 28 28 75 6e 73 69     toupper((unsi
25490 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
254a0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
254b0 73 73 70 61 63 65 28 78 29 20 20 20 69 73 73 70  sspace(x)   issp
254c0 61 63 65 28 28 75 6e 73 69 67 6e 65 64 20 63 68  ace((unsigned ch
254d0 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
254e0 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28   sqlite3Isalnum(
254f0 78 29 20 20 20 69 73 61 6c 6e 75 6d 28 28 75 6e  x)   isalnum((un
25500 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
25510 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
25520 33 49 73 61 6c 70 68 61 28 78 29 20 20 20 69 73  3Isalpha(x)   is
25530 61 6c 70 68 61 28 28 75 6e 73 69 67 6e 65 64 20  alpha((unsigned 
25540 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
25550 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69 67 69  ne sqlite3Isdigi
25560 74 28 78 29 20 20 20 69 73 64 69 67 69 74 28 28  t(x)   isdigit((
25570 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
25580 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
25590 74 65 33 49 73 78 64 69 67 69 74 28 78 29 20 20  te3Isxdigit(x)  
255a0 69 73 78 64 69 67 69 74 28 28 75 6e 73 69 67 6e  isxdigit((unsign
255b0 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
255c0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c  efine sqlite3Tol
255d0 6f 77 65 72 28 78 29 20 20 20 74 6f 6c 6f 77 65  ower(x)   tolowe
255e0 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  r((unsigned char
255f0 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
25600 71 6c 69 74 65 33 49 73 71 75 6f 74 65 28 78 29  qlite3Isquote(x)
25610 20 20 20 28 28 78 29 3d 3d 27 22 27 7c 7c 28 78     ((x)=='"'||(x
25620 29 3d 3d 27 5c 27 27 7c 7c 28 78 29 3d 3d 27 5b  )=='\''||(x)=='[
25630 27 7c 7c 28 78 29 3d 3d 27 60 27 29 0a 23 65 6e  '||(x)=='`').#en
25640 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
25650 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f  TE_OMIT_COMPILEO
25660 50 54 49 4f 4e 5f 44 49 41 47 53 0a 69 6e 74 20  PTION_DIAGS.int 
25670 73 71 6c 69 74 65 33 49 73 49 64 43 68 61 72 28  sqlite3IsIdChar(
25680 75 38 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  u8);.#endif../*.
25690 2a 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63  ** Internal func
256a0 74 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a  tion prototypes.
256b0 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74  */.int sqlite3St
256c0 72 49 43 6d 70 28 63 6f 6e 73 74 20 63 68 61 72  rICmp(const char
256d0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
256e0 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72 6c 65  int sqlite3Strle
256f0 6e 33 30 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  n30(const char*)
25700 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 43  ;.char *sqlite3C
25710 6f 6c 75 6d 6e 54 79 70 65 28 43 6f 6c 75 6d 6e  olumnType(Column
25720 2a 2c 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e  *,char*);.#defin
25730 65 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d  e sqlite3StrNICm
25740 70 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69 63  p sqlite3_strnic
25750 6d 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  mp..int sqlite3M
25760 61 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64 29 3b  allocInit(void);
25770 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 6c  .void sqlite3Mal
25780 6c 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a 76 6f  locEnd(void);.vo
25790 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  id *sqlite3Mallo
257a0 63 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  c(u64);.void *sq
257b0 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28  lite3MallocZero(
257c0 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  u64);.void *sqli
257d0 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28  te3DbMallocZero(
257e0 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a  sqlite3*, u64);.
257f0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d  void *sqlite3DbM
25800 61 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74 65 33  allocRaw(sqlite3
25810 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  *, u64);.void *s
25820 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
25830 77 4e 4e 28 73 71 6c 69 74 65 33 2a 2c 20 75 36  wNN(sqlite3*, u6
25840 34 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  4);.char *sqlite
25850 33 44 62 53 74 72 44 75 70 28 73 71 6c 69 74 65  3DbStrDup(sqlite
25860 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  3*,const char*);
25870 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62  .char *sqlite3Db
25880 53 74 72 4e 44 75 70 28 73 71 6c 69 74 65 33 2a  StrNDup(sqlite3*
25890 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75 36  ,const char*, u6
258a0 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  4);.void *sqlite
258b0 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20  3Realloc(void*, 
258c0 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  u64);.void *sqli
258d0 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46 72  te3DbReallocOrFr
258e0 65 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f  ee(sqlite3 *, vo
258f0 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64  id *, u64);.void
25900 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c   *sqlite3DbReall
25910 6f 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f  oc(sqlite3 *, vo
25920 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64  id *, u64);.void
25930 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 73   sqlite3DbFree(s
25940 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b  qlite3*, void*);
25950 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62 46  .void sqlite3DbF
25960 72 65 65 4e 4e 28 73 71 6c 69 74 65 33 2a 2c 20  reeNN(sqlite3*, 
25970 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  void*);.int sqli
25980 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f  te3MallocSize(vo
25990 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  id*);.int sqlite
259a0 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71  3DbMallocSize(sq
259b0 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a  lite3*, void*);.
259c0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61 67  void *sqlite3Pag
259d0 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f  eMalloc(int);.vo
259e0 69 64 20 73 71 6c 69 74 65 33 50 61 67 65 46 72  id sqlite3PageFr
259f0 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20  ee(void*);.void 
25a00 73 71 6c 69 74 65 33 4d 65 6d 53 65 74 44 65 66  sqlite3MemSetDef
25a10 61 75 6c 74 28 76 6f 69 64 29 3b 0a 23 69 66 6e  ault(void);.#ifn
25a20 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53  def SQLITE_UNTES
25a30 54 41 42 4c 45 0a 76 6f 69 64 20 73 71 6c 69 74  TABLE.void sqlit
25a40 65 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f  e3BenignMallocHo
25a50 6f 6b 73 28 76 6f 69 64 20 28 2a 29 28 76 6f 69  oks(void (*)(voi
25a60 64 29 2c 20 76 6f 69 64 20 28 2a 29 28 76 6f 69  d), void (*)(voi
25a70 64 29 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20  d));.#endif.int 
25a80 73 71 6c 69 74 65 33 48 65 61 70 4e 65 61 72 6c  sqlite3HeapNearl
25a90 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a  yFull(void);../*
25aa0 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20 77  .** On systems w
25ab0 69 74 68 20 61 6d 70 6c 65 20 73 74 61 63 6b 20  ith ample stack 
25ac0 73 70 61 63 65 20 61 6e 64 20 74 68 61 74 20 73  space and that s
25ad0 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c  upport alloca(),
25ae0 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20   make.** use of 
25af0 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74 61  alloca() to obta
25b00 69 6e 20 73 70 61 63 65 20 66 6f 72 20 6c 61 72  in space for lar
25b10 67 65 20 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a  ge automatic obj
25b20 65 63 74 73 2e 20 20 42 79 20 64 65 66 61 75 6c  ects.  By defaul
25b30 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61  t,.** obtain spa
25b40 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29  ce from malloc()
25b50 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f  ..**.** The allo
25b60 63 61 28 29 20 72 6f 75 74 69 6e 65 20 6e 65 76  ca() routine nev
25b70 65 72 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e  er returns NULL.
25b80 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73    This will caus
25b90 65 20 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20  e code paths.** 
25ba0 74 68 61 74 20 64 65 61 6c 20 77 69 74 68 20 73  that deal with s
25bb0 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
25bc0 28 29 20 66 61 69 6c 75 72 65 73 20 74 6f 20 62  () failures to b
25bd0 65 20 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a  e unreachable..*
25be0 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
25bf0 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66  USE_ALLOCA.# def
25c00 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
25c10 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20  AllocRaw(D,N)   
25c20 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66 69  alloca(N).# defi
25c30 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
25c40 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d  llocZero(D,N)  m
25c50 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c  emset(alloca(N),
25c60 20 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65 20   0, N).# define 
25c70 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65  sqlite3StackFree
25c80 28 44 2c 50 29 0a 23 65 6c 73 65 0a 23 20 64 65  (D,P).#else.# de
25c90 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
25ca0 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20  kAllocRaw(D,N)  
25cb0 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
25cc0 52 61 77 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e  Raw(D,N).# defin
25cd0 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  e sqlite3StackAl
25ce0 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 73 71  locZero(D,N)  sq
25cf0 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72  lite3DbMallocZer
25d00 6f 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20  o(D,N).# define 
25d10 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65  sqlite3StackFree
25d20 28 44 2c 50 29 20 20 20 20 20 20 20 73 71 6c 69  (D,P)       sqli
25d30 74 65 33 44 62 46 72 65 65 28 44 2c 50 29 0a 23  te3DbFree(D,P).#
25d40 65 6e 64 69 66 0a 0a 2f 2a 20 44 6f 20 6e 6f 74  endif../* Do not
25d50 20 61 6c 6c 6f 77 20 62 6f 74 68 20 4d 45 4d 53   allow both MEMS
25d60 59 53 35 20 61 6e 64 20 4d 45 4d 53 59 53 33 20  YS5 and MEMSYS3 
25d70 74 6f 20 62 65 20 64 65 66 69 6e 65 64 20 74 6f  to be defined to
25d80 67 65 74 68 65 72 2e 20 20 49 66 20 74 68 65 79  gether.  If they
25d90 0a 2a 2a 20 61 72 65 2c 20 64 69 73 61 62 6c 65  .** are, disable
25da0 20 4d 45 4d 53 59 53 33 0a 2a 2f 0a 23 69 66 64   MEMSYS3.*/.#ifd
25db0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
25dc0 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e 73 74 20 73  _MEMSYS5.const s
25dd0 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f  qlite3_mem_metho
25de0 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65  ds *sqlite3MemGe
25df0 74 4d 65 6d 73 79 73 35 28 76 6f 69 64 29 3b 0a  tMemsys5(void);.
25e00 23 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #undef SQLITE_EN
25e10 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 23 65 6e  ABLE_MEMSYS3.#en
25e20 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
25e30 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33  E_ENABLE_MEMSYS3
25e40 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d  .const sqlite3_m
25e50 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69  em_methods *sqli
25e60 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 33  te3MemGetMemsys3
25e70 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a  (void);.#endif..
25e80 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
25e90 4d 55 54 45 58 5f 4f 4d 49 54 0a 20 20 73 71 6c  MUTEX_OMIT.  sql
25ea0 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f  ite3_mutex_metho
25eb0 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65  ds const *sqlite
25ec0 33 44 65 66 61 75 6c 74 4d 75 74 65 78 28 76 6f  3DefaultMutex(vo
25ed0 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d  id);.  sqlite3_m
25ee0 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e  utex_methods con
25ef0 73 74 20 2a 73 71 6c 69 74 65 33 4e 6f 6f 70 4d  st *sqlite3NoopM
25f00 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71  utex(void);.  sq
25f10 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c  lite3_mutex *sql
25f20 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28 69  ite3MutexAlloc(i
25f30 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  nt);.  int sqlit
25f40 65 33 4d 75 74 65 78 49 6e 69 74 28 76 6f 69 64  e3MutexInit(void
25f50 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
25f60 4d 75 74 65 78 45 6e 64 28 76 6f 69 64 29 3b 0a  MutexEnd(void);.
25f70 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69  #endif.#if !defi
25f80 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58  ned(SQLITE_MUTEX
25f90 5f 4f 4d 49 54 29 20 26 26 20 21 64 65 66 69 6e  _OMIT) && !defin
25fa0 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f  ed(SQLITE_MUTEX_
25fb0 4e 4f 4f 50 29 0a 20 20 76 6f 69 64 20 73 71 6c  NOOP).  void sql
25fc0 69 74 65 33 4d 65 6d 6f 72 79 42 61 72 72 69 65  ite3MemoryBarrie
25fd0 72 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 23  r(void);.#else.#
25fe0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d   define sqlite3M
25ff0 65 6d 6f 72 79 42 61 72 72 69 65 72 28 29 0a 23  emoryBarrier().#
26000 65 6e 64 69 66 0a 0a 73 71 6c 69 74 65 33 5f 69  endif..sqlite3_i
26010 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74 61 74  nt64 sqlite3Stat
26020 75 73 56 61 6c 75 65 28 69 6e 74 29 3b 0a 76 6f  usValue(int);.vo
26030 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73  id sqlite3Status
26040 55 70 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  Up(int, int);.vo
26050 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73  id sqlite3Status
26060 44 6f 77 6e 28 69 6e 74 2c 20 69 6e 74 29 3b 0a  Down(int, int);.
26070 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74  void sqlite3Stat
26080 75 73 48 69 67 68 77 61 74 65 72 28 69 6e 74 2c  usHighwater(int,
26090 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
260a0 65 33 4c 6f 6f 6b 61 73 69 64 65 55 73 65 64 28  e3LookasideUsed(
260b0 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2a 29 3b 0a  sqlite3*,int*);.
260c0 0a 2f 2a 20 41 63 63 65 73 73 20 74 6f 20 6d 75  ./* Access to mu
260d0 74 65 78 65 73 20 75 73 65 64 20 62 79 20 73 71  texes used by sq
260e0 6c 69 74 65 33 5f 73 74 61 74 75 73 28 29 20 2a  lite3_status() *
260f0 2f 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20  /.sqlite3_mutex 
26100 2a 73 71 6c 69 74 65 33 50 63 61 63 68 65 31 4d  *sqlite3Pcache1M
26110 75 74 65 78 28 76 6f 69 64 29 3b 0a 73 71 6c 69  utex(void);.sqli
26120 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74  te3_mutex *sqlit
26130 65 33 4d 61 6c 6c 6f 63 4d 75 74 65 78 28 76 6f  e3MallocMutex(vo
26140 69 64 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  id);..#ifndef SQ
26150 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
26160 4e 47 5f 50 4f 49 4e 54 0a 20 20 69 6e 74 20 73  NG_POINT.  int s
26170 71 6c 69 74 65 33 49 73 4e 61 4e 28 64 6f 75 62  qlite3IsNaN(doub
26180 6c 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  le);.#else.# def
26190 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 61 4e  ine sqlite3IsNaN
261a0 28 58 29 20 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  (X)  0.#endif../
261b0 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
261c0 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
261d0 67 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64  g structure hold
261e0 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  s information ab
261f0 6f 75 74 20 53 51 4c 0a 2a 2a 20 66 75 6e 63 74  out SQL.** funct
26200 69 6f 6e 73 20 61 72 67 75 6d 65 6e 74 73 20 74  ions arguments t
26210 68 61 74 20 61 72 65 20 74 68 65 20 70 61 72 61  hat are the para
26220 6d 65 74 65 72 73 20 74 6f 20 74 68 65 20 70 72  meters to the pr
26230 69 6e 74 66 28 29 20 66 75 6e 63 74 69 6f 6e 2e  intf() function.
26240 0a 2a 2f 0a 73 74 72 75 63 74 20 50 72 69 6e 74  .*/.struct Print
26250 66 41 72 67 75 6d 65 6e 74 73 20 7b 0a 20 20 69  fArguments {.  i
26260 6e 74 20 6e 41 72 67 3b 20 20 20 20 20 20 20 20  nt nArg;        
26270 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 74 61 6c          /* Total
26280 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   number of argum
26290 65 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 55  ents */.  int nU
262a0 73 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  sed;            
262b0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
262c0 61 72 67 75 6d 65 6e 74 73 20 75 73 65 64 20 73  arguments used s
262d0 6f 20 66 61 72 20 2a 2f 0a 20 20 73 71 6c 69 74  o far */.  sqlit
262e0 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70 41 72 67  e3_value **apArg
262f0 3b 20 20 20 2f 2a 20 54 68 65 20 61 72 67 75 6d  ;   /* The argum
26300 65 6e 74 20 76 61 6c 75 65 73 20 2a 2f 0a 7d 3b  ent values */.};
26310 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 58  ..void sqlite3VX
26320 50 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d 2a  Printf(StrAccum*
26330 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76  , const char*, v
26340 61 5f 6c 69 73 74 29 3b 0a 76 6f 69 64 20 73 71  a_list);.void sq
26350 6c 69 74 65 33 58 50 72 69 6e 74 66 28 53 74 72  lite3XPrintf(Str
26360 41 63 63 75 6d 2a 2c 20 63 6f 6e 73 74 20 63 68  Accum*, const ch
26370 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20  ar*, ...);.char 
26380 2a 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28  *sqlite3MPrintf(
26390 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
263a0 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72  har*, ...);.char
263b0 20 2a 73 71 6c 69 74 65 33 56 4d 50 72 69 6e 74   *sqlite3VMPrint
263c0 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  f(sqlite3*,const
263d0 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29   char*, va_list)
263e0 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ;.#if defined(SQ
263f0 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64  LITE_DEBUG) || d
26400 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41  efined(SQLITE_HA
26410 56 45 5f 4f 53 5f 54 52 41 43 45 29 0a 20 20 76  VE_OS_TRACE).  v
26420 6f 69 64 20 73 71 6c 69 74 65 33 44 65 62 75 67  oid sqlite3Debug
26430 50 72 69 6e 74 66 28 63 6f 6e 73 74 20 63 68 61  Printf(const cha
26440 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66  r*, ...);.#endif
26450 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
26460 49 54 45 5f 54 45 53 54 29 0a 20 20 76 6f 69 64  ITE_TEST).  void
26470 20 2a 73 71 6c 69 74 65 33 54 65 73 74 54 65 78   *sqlite3TestTex
26480 74 54 6f 50 74 72 28 63 6f 6e 73 74 20 63 68 61  tToPtr(const cha
26490 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  r*);.#endif..#if
264a0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
264b0 44 45 42 55 47 29 0a 20 20 76 6f 69 64 20 73 71  DEBUG).  void sq
264c0 6c 69 74 65 33 54 72 65 65 56 69 65 77 45 78 70  lite3TreeViewExp
264d0 72 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e  r(TreeView*, con
264e0 73 74 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20  st Expr*, u8);. 
264f0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65   void sqlite3Tre
26500 65 56 69 65 77 42 61 72 65 45 78 70 72 4c 69 73  eViewBareExprLis
26510 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e  t(TreeView*, con
26520 73 74 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f  st ExprList*, co
26530 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
26540 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69  id sqlite3TreeVi
26550 65 77 45 78 70 72 4c 69 73 74 28 54 72 65 65 56  ewExprList(TreeV
26560 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72  iew*, const Expr
26570 4c 69 73 74 2a 2c 20 75 38 2c 20 63 6f 6e 73 74  List*, u8, const
26580 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20   char*);.  void 
26590 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 53  sqlite3TreeViewS
265a0 65 6c 65 63 74 28 54 72 65 65 56 69 65 77 2a 2c  elect(TreeView*,
265b0 20 63 6f 6e 73 74 20 53 65 6c 65 63 74 2a 2c 20   const Select*, 
265c0 75 38 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  u8);.  void sqli
265d0 74 65 33 54 72 65 65 56 69 65 77 57 69 74 68 28  te3TreeViewWith(
265e0 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74  TreeView*, const
265f0 20 57 69 74 68 2a 2c 20 75 38 29 3b 0a 23 65 6e   With*, u8);.#en
26600 64 69 66 0a 0a 0a 76 6f 69 64 20 73 71 6c 69 74  dif...void sqlit
26610 65 33 53 65 74 53 74 72 69 6e 67 28 63 68 61 72  e3SetString(char
26620 20 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63   **, sqlite3*, c
26630 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
26640 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73  d sqlite3ErrorMs
26650 67 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  g(Parse*, const 
26660 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69  char*, ...);.voi
26670 64 20 73 71 6c 69 74 65 33 44 65 71 75 6f 74 65  d sqlite3Dequote
26680 28 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71  (char*);.void sq
26690 6c 69 74 65 33 54 6f 6b 65 6e 49 6e 69 74 28 54  lite3TokenInit(T
266a0 6f 6b 65 6e 2a 2c 63 68 61 72 2a 29 3b 0a 69 6e  oken*,char*);.in
266b0 74 20 73 71 6c 69 74 65 33 4b 65 79 77 6f 72 64  t sqlite3Keyword
266c0 43 6f 64 65 28 63 6f 6e 73 74 20 75 6e 73 69 67  Code(const unsig
266d0 6e 65 64 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b  ned char*, int);
266e0 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 50  .int sqlite3RunP
266f0 61 72 73 65 72 28 50 61 72 73 65 2a 2c 20 63 6f  arser(Parse*, co
26700 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72 20  nst char*, char 
26710 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  **);.void sqlite
26720 33 46 69 6e 69 73 68 43 6f 64 69 6e 67 28 50 61  3FinishCoding(Pa
26730 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  rse*);.int sqlit
26740 65 33 47 65 74 54 65 6d 70 52 65 67 28 50 61 72  e3GetTempReg(Par
26750 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
26760 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52 65 67  e3ReleaseTempReg
26770 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e  (Parse*,int);.in
26780 74 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70  t sqlite3GetTemp
26790 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74  Range(Parse*,int
267a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
267b0 65 6c 65 61 73 65 54 65 6d 70 52 61 6e 67 65 28  eleaseTempRange(
267c0 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b  Parse*,int,int);
267d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 65  .void sqlite3Cle
267e0 61 72 54 65 6d 70 52 65 67 43 61 63 68 65 28 50  arTempRegCache(P
267f0 61 72 73 65 2a 29 3b 0a 23 69 66 64 65 66 20 53  arse*);.#ifdef S
26800 51 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e 74 20  QLITE_DEBUG.int 
26810 73 71 6c 69 74 65 33 4e 6f 54 65 6d 70 73 49 6e  sqlite3NoTempsIn
26820 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74  Range(Parse*,int
26830 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 45 78  ,int);.#endif.Ex
26840 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41  pr *sqlite3ExprA
26850 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e  lloc(sqlite3*,in
26860 74 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 69  t,const Token*,i
26870 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  nt);.Expr *sqlit
26880 65 33 45 78 70 72 28 73 71 6c 69 74 65 33 2a 2c  e3Expr(sqlite3*,
26890 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
268a0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
268b0 70 72 41 74 74 61 63 68 53 75 62 74 72 65 65 73  prAttachSubtrees
268c0 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c  (sqlite3*,Expr*,
268d0 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78  Expr*,Expr*);.Ex
268e0 70 72 20 2a 73 71 6c 69 74 65 33 50 45 78 70 72  pr *sqlite3PExpr
268f0 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 45 78  (Parse*, int, Ex
26900 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  pr*, Expr*);.voi
26910 64 20 73 71 6c 69 74 65 33 50 45 78 70 72 41 64  d sqlite3PExprAd
26920 64 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20  dSelect(Parse*, 
26930 45 78 70 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  Expr*, Select*);
26940 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
26950 70 72 41 6e 64 28 73 71 6c 69 74 65 33 2a 2c 45  prAnd(sqlite3*,E
26960 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78  xpr*, Expr*);.Ex
26970 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 46  pr *sqlite3ExprF
26980 75 6e 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 45  unction(Parse*,E
26990 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  xprList*, Token*
269a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
269b0 78 70 72 41 73 73 69 67 6e 56 61 72 4e 75 6d 62  xprAssignVarNumb
269c0 65 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  er(Parse*, Expr*
269d0 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c  , u32);.void sql
269e0 69 74 65 33 45 78 70 72 44 65 6c 65 74 65 28 73  ite3ExprDelete(s
269f0 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 2a 29 3b  qlite3*, Expr*);
26a00 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74  .ExprList *sqlit
26a10 65 33 45 78 70 72 4c 69 73 74 41 70 70 65 6e 64  e3ExprListAppend
26a20 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
26a30 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69  *,Expr*);.ExprLi
26a40 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c  st *sqlite3ExprL
26a50 69 73 74 41 70 70 65 6e 64 56 65 63 74 6f 72 28  istAppendVector(
26a60 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
26a70 2c 49 64 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b  ,IdList*,Expr*);
26a80 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
26a90 72 4c 69 73 74 53 65 74 53 6f 72 74 4f 72 64 65  rListSetSortOrde
26aa0 72 28 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29  r(ExprList*,int)
26ab0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
26ac0 70 72 4c 69 73 74 53 65 74 4e 61 6d 65 28 50 61  prListSetName(Pa
26ad0 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 54  rse*,ExprList*,T
26ae0 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  oken*,int);.void
26af0 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
26b00 53 65 74 53 70 61 6e 28 50 61 72 73 65 2a 2c 45  SetSpan(Parse*,E
26b10 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 53 70 61  xprList*,ExprSpa
26b20 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
26b30 33 45 78 70 72 4c 69 73 74 44 65 6c 65 74 65 28  3ExprListDelete(
26b40 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 4c 69  sqlite3*, ExprLi
26b50 73 74 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65  st*);.u32 sqlite
26b60 33 45 78 70 72 4c 69 73 74 46 6c 61 67 73 28 63  3ExprListFlags(c
26b70 6f 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 29 3b  onst ExprList*);
26b80 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74  .int sqlite3Init
26b90 28 73 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a  (sqlite3*, char*
26ba0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
26bb0 6e 69 74 43 61 6c 6c 62 61 63 6b 28 76 6f 69 64  nitCallback(void
26bc0 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2a 2c 20  *, int, char**, 
26bd0 63 68 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73 71  char**);.void sq
26be0 6c 69 74 65 33 50 72 61 67 6d 61 28 50 61 72 73  lite3Pragma(Pars
26bf0 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
26c00 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 23 69  ,Token*,int);.#i
26c10 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
26c20 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 4d  T_VIRTUALTABLE.M
26c30 6f 64 75 6c 65 20 2a 73 71 6c 69 74 65 33 50 72  odule *sqlite3Pr
26c40 61 67 6d 61 56 74 61 62 52 65 67 69 73 74 65 72  agmaVtabRegister
26c50 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
26c60 63 68 61 72 20 2a 7a 4e 61 6d 65 29 3b 0a 23 65  char *zName);.#e
26c70 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
26c80 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73  3ResetAllSchemas
26c90 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c  OfConnection(sql
26ca0 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
26cb0 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65  ite3ResetOneSche
26cc0 6d 61 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29  ma(sqlite3*,int)
26cd0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
26ce0 6c 6c 61 70 73 65 44 61 74 61 62 61 73 65 41 72  llapseDatabaseAr
26cf0 72 61 79 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  ray(sqlite3*);.v
26d00 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69  oid sqlite3Commi
26d10 74 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65 73  tInternalChanges
26d20 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
26d30 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 43 6f   sqlite3DeleteCo
26d40 6c 75 6d 6e 4e 61 6d 65 73 28 73 71 6c 69 74 65  lumnNames(sqlite
26d50 33 2a 2c 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20  3*,Table*);.int 
26d60 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 73 46 72  sqlite3ColumnsFr
26d70 6f 6d 45 78 70 72 4c 69 73 74 28 50 61 72 73 65  omExprList(Parse
26d80 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 31 36 2a  *,ExprList*,i16*
26d90 2c 43 6f 6c 75 6d 6e 2a 2a 29 3b 0a 76 6f 69 64  ,Column**);.void
26da0 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 41 64   sqlite3SelectAd
26db0 64 43 6f 6c 75 6d 6e 54 79 70 65 41 6e 64 43 6f  dColumnTypeAndCo
26dc0 6c 6c 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54  llation(Parse*,T
26dd0 61 62 6c 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a  able*,Select*);.
26de0 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 52 65  Table *sqlite3Re
26df0 73 75 6c 74 53 65 74 4f 66 53 65 6c 65 63 74 28  sultSetOfSelect(
26e00 50 61 72 73 65 2a 2c 53 65 6c 65 63 74 2a 29 3b  Parse*,Select*);
26e10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65  .void sqlite3Ope
26e20 6e 4d 61 73 74 65 72 54 61 62 6c 65 28 50 61 72  nMasterTable(Par
26e30 73 65 20 2a 2c 20 69 6e 74 29 3b 0a 49 6e 64 65  se *, int);.Inde
26e40 78 20 2a 73 71 6c 69 74 65 33 50 72 69 6d 61 72  x *sqlite3Primar
26e50 79 4b 65 79 49 6e 64 65 78 28 54 61 62 6c 65 2a  yKeyIndex(Table*
26e60 29 3b 0a 69 31 36 20 73 71 6c 69 74 65 33 43 6f  );.i16 sqlite3Co
26e70 6c 75 6d 6e 4f 66 49 6e 64 65 78 28 49 6e 64 65  lumnOfIndex(Inde
26e80 78 2a 2c 20 69 31 36 29 3b 0a 76 6f 69 64 20 73  x*, i16);.void s
26e90 71 6c 69 74 65 33 53 74 61 72 74 54 61 62 6c 65  qlite3StartTable
26ea0 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
26eb0 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  oken*,int,int,in
26ec0 74 2c 69 6e 74 29 3b 0a 23 69 66 20 53 51 4c 49  t,int);.#if SQLI
26ed0 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e  TE_ENABLE_HIDDEN
26ee0 5f 43 4f 4c 55 4d 4e 53 0a 20 20 76 6f 69 64 20  _COLUMNS.  void 
26ef0 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 50 72 6f  sqlite3ColumnPro
26f00 70 65 72 74 69 65 73 46 72 6f 6d 4e 61 6d 65 28  pertiesFromName(
26f10 54 61 62 6c 65 2a 2c 20 43 6f 6c 75 6d 6e 2a 29  Table*, Column*)
26f20 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
26f30 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 50 72   sqlite3ColumnPr
26f40 6f 70 65 72 74 69 65 73 46 72 6f 6d 4e 61 6d 65  opertiesFromName
26f50 28 54 2c 43 29 20 2f 2a 20 6e 6f 2d 6f 70 20 2a  (T,C) /* no-op *
26f60 2f 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  /.#endif.void sq
26f70 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 28 50  lite3AddColumn(P
26f80 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
26f90 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
26fa0 65 33 41 64 64 4e 6f 74 4e 75 6c 6c 28 50 61 72  e3AddNotNull(Par
26fb0 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  se*, int);.void 
26fc0 73 71 6c 69 74 65 33 41 64 64 50 72 69 6d 61 72  sqlite3AddPrimar
26fd0 79 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70  yKey(Parse*, Exp
26fe0 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74  rList*, int, int
26ff0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
27000 69 74 65 33 41 64 64 43 68 65 63 6b 43 6f 6e 73  ite3AddCheckCons
27010 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 45  traint(Parse*, E
27020 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
27030 74 65 33 41 64 64 44 65 66 61 75 6c 74 56 61 6c  te3AddDefaultVal
27040 75 65 28 50 61 72 73 65 2a 2c 45 78 70 72 53 70  ue(Parse*,ExprSp
27050 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  an*);.void sqlit
27060 65 33 41 64 64 43 6f 6c 6c 61 74 65 54 79 70 65  e3AddCollateType
27070 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29  (Parse*, Token*)
27080 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e  ;.void sqlite3En
27090 64 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f  dTable(Parse*,To
270a0 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75 38 2c 53  ken*,Token*,u8,S
270b0 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
270c0 69 74 65 33 50 61 72 73 65 55 72 69 28 63 6f 6e  ite3ParseUri(con
270d0 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
270e0 68 61 72 2a 2c 75 6e 73 69 67 6e 65 64 20 69 6e  har*,unsigned in
270f0 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t*,.            
27100 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
27110 76 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68 61  vfs**,char**,cha
27120 72 20 2a 2a 29 3b 0a 42 74 72 65 65 20 2a 73 71  r **);.Btree *sq
27130 6c 69 74 65 33 44 62 4e 61 6d 65 54 6f 42 74 72  lite3DbNameToBtr
27140 65 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  ee(sqlite3*,cons
27150 74 20 63 68 61 72 2a 29 3b 0a 0a 23 69 66 64 65  t char*);..#ifde
27160 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41  f SQLITE_UNTESTA
27170 42 4c 45 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  BLE.# define sql
27180 69 74 65 33 46 61 75 6c 74 53 69 6d 28 58 29 20  ite3FaultSim(X) 
27190 53 51 4c 49 54 45 5f 4f 4b 0a 23 65 6c 73 65 0a  SQLITE_OK.#else.
271a0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 61 75    int sqlite3Fau
271b0 6c 74 53 69 6d 28 69 6e 74 29 3b 0a 23 65 6e 64  ltSim(int);.#end
271c0 69 66 0a 0a 42 69 74 76 65 63 20 2a 73 71 6c 69  if..Bitvec *sqli
271d0 74 65 33 42 69 74 76 65 63 43 72 65 61 74 65 28  te3BitvecCreate(
271e0 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  u32);.int sqlite
271f0 33 42 69 74 76 65 63 54 65 73 74 28 42 69 74 76  3BitvecTest(Bitv
27200 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73  ec*, u32);.int s
27210 71 6c 69 74 65 33 42 69 74 76 65 63 54 65 73 74  qlite3BitvecTest
27220 4e 6f 74 4e 75 6c 6c 28 42 69 74 76 65 63 2a 2c  NotNull(Bitvec*,
27230 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74   u32);.int sqlit
27240 65 33 42 69 74 76 65 63 53 65 74 28 42 69 74 76  e3BitvecSet(Bitv
27250 65 63 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20  ec*, u32);.void 
27260 73 71 6c 69 74 65 33 42 69 74 76 65 63 43 6c 65  sqlite3BitvecCle
27270 61 72 28 42 69 74 76 65 63 2a 2c 20 75 33 32 2c  ar(Bitvec*, u32,
27280 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71   void*);.void sq
27290 6c 69 74 65 33 42 69 74 76 65 63 44 65 73 74 72  lite3BitvecDestr
272a0 6f 79 28 42 69 74 76 65 63 2a 29 3b 0a 75 33 32  oy(Bitvec*);.u32
272b0 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 53 69   sqlite3BitvecSi
272c0 7a 65 28 42 69 74 76 65 63 2a 29 3b 0a 23 69 66  ze(Bitvec*);.#if
272d0 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45  ndef SQLITE_UNTE
272e0 53 54 41 42 4c 45 0a 69 6e 74 20 73 71 6c 69 74  STABLE.int sqlit
272f0 65 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e 54  e3BitvecBuiltinT
27300 65 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a 23  est(int,int*);.#
27310 65 6e 64 69 66 0a 0a 52 6f 77 53 65 74 20 2a 73  endif..RowSet *s
27320 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 69 74  qlite3RowSetInit
27330 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a  (sqlite3*, void*
27340 2c 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 3b  , unsigned int);
27350 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77  .void sqlite3Row
27360 53 65 74 43 6c 65 61 72 28 52 6f 77 53 65 74 2a  SetClear(RowSet*
27370 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
27380 6f 77 53 65 74 49 6e 73 65 72 74 28 52 6f 77 53  owSetInsert(RowS
27390 65 74 2a 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73  et*, i64);.int s
273a0 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73 74  qlite3RowSetTest
273b0 28 52 6f 77 53 65 74 2a 2c 20 69 6e 74 20 69 42  (RowSet*, int iB
273c0 61 74 63 68 2c 20 69 36 34 29 3b 0a 69 6e 74 20  atch, i64);.int 
273d0 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78  sqlite3RowSetNex
273e0 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 2a 29  t(RowSet*, i64*)
273f0 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  ;..void sqlite3C
27400 72 65 61 74 65 56 69 65 77 28 50 61 72 73 65 2a  reateView(Parse*
27410 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54  ,Token*,Token*,T
27420 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  oken*,ExprList*,
27430 53 65 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29  Select*,int,int)
27440 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  ;..#if !defined(
27450 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57  SQLITE_OMIT_VIEW
27460 29 20 7c 7c 20 21 64 65 66 69 6e 65 64 28 53 51  ) || !defined(SQ
27470 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
27480 4c 54 41 42 4c 45 29 0a 20 20 69 6e 74 20 73 71  LTABLE).  int sq
27490 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75  lite3ViewGetColu
274a0 6d 6e 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 54  mnNames(Parse*,T
274b0 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  able*);.#else.# 
274c0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 69  define sqlite3Vi
274d0 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73  ewGetColumnNames
274e0 28 41 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a  (A,B) 0.#endif..
274f0 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41  #if SQLITE_MAX_A
27500 54 54 41 43 48 45 44 3e 33 30 0a 20 20 69 6e 74  TTACHED>30.  int
27510 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c   sqlite3DbMaskAl
27520 6c 5a 65 72 6f 28 79 44 62 4d 61 73 6b 29 3b 0a  lZero(yDbMask);.
27530 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
27540 74 65 33 44 72 6f 70 54 61 62 6c 65 28 50 61 72  te3DropTable(Par
27550 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69  se*, SrcList*, i
27560 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
27570 71 6c 69 74 65 33 43 6f 64 65 44 72 6f 70 54 61  qlite3CodeDropTa
27580 62 6c 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ble(Parse*, Tabl
27590 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  e*, int, int);.v
275a0 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
275b0 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c  eTable(sqlite3*,
275c0 20 54 61 62 6c 65 2a 29 3b 0a 23 69 66 6e 64 65   Table*);.#ifnde
275d0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
275e0 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 76 6f  TOINCREMENT.  vo
275f0 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e  id sqlite3Autoin
27600 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 50 61 72  crementBegin(Par
27610 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 20 20 76  se *pParse);.  v
27620 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69  oid sqlite3Autoi
27630 6e 63 72 65 6d 65 6e 74 45 6e 64 28 50 61 72 73  ncrementEnd(Pars
27640 65 20 2a 70 50 61 72 73 65 29 3b 0a 23 65 6c 73  e *pParse);.#els
27650 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
27660 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42  e3AutoincrementB
27670 65 67 69 6e 28 58 29 0a 23 20 64 65 66 69 6e 65  egin(X).# define
27680 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72   sqlite3Autoincr
27690 65 6d 65 6e 74 45 6e 64 28 58 29 0a 23 65 6e 64  ementEnd(X).#end
276a0 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49  if.void sqlite3I
276b0 6e 73 65 72 74 28 50 61 72 73 65 2a 2c 20 53 72  nsert(Parse*, Sr
276c0 63 4c 69 73 74 2a 2c 20 53 65 6c 65 63 74 2a 2c  cList*, Select*,
276d0 20 49 64 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a   IdList*, int);.
276e0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 41 72 72  void *sqlite3Arr
276f0 61 79 41 6c 6c 6f 63 61 74 65 28 73 71 6c 69 74  ayAllocate(sqlit
27700 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c 69 6e  e3*,void*,int,in
27710 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c 69 73 74  t*,int*);.IdList
27720 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74 41   *sqlite3IdListA
27730 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20  ppend(sqlite3*, 
27740 49 64 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29  IdList*, Token*)
27750 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 64 4c  ;.int sqlite3IdL
27760 69 73 74 49 6e 64 65 78 28 49 64 4c 69 73 74 2a  istIndex(IdList*
27770 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 53  ,const char*);.S
27780 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53  rcList *sqlite3S
27790 72 63 4c 69 73 74 45 6e 6c 61 72 67 65 28 73 71  rcListEnlarge(sq
277a0 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a  lite3*, SrcList*
277b0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 53 72 63  , int, int);.Src
277c0 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63  List *sqlite3Src
277d0 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74  ListAppend(sqlit
277e0 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54  e3*, SrcList*, T
277f0 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  oken*, Token*);.
27800 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  SrcList *sqlite3
27810 53 72 63 4c 69 73 74 41 70 70 65 6e 64 46 72 6f  SrcListAppendFro
27820 6d 54 65 72 6d 28 50 61 72 73 65 2a 2c 20 53 72  mTerm(Parse*, Sr
27830 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  cList*, Token*, 
27840 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20  Token*,.        
27850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 6f                To
27870 6b 65 6e 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45  ken*, Select*, E
27880 78 70 72 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a  xpr*, IdList*);.
27890 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c  void sqlite3SrcL
278a0 69 73 74 49 6e 64 65 78 65 64 42 79 28 50 61 72  istIndexedBy(Par
278b0 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c  se *, SrcList *,
278c0 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20   Token *);.void 
278d0 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 46 75  sqlite3SrcListFu
278e0 6e 63 41 72 67 73 28 50 61 72 73 65 2a 2c 20 53  ncArgs(Parse*, S
278f0 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73  rcList*, ExprLis
27900 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
27910 49 6e 64 65 78 65 64 42 79 4c 6f 6f 6b 75 70 28  IndexedByLookup(
27920 50 61 72 73 65 20 2a 2c 20 73 74 72 75 63 74 20  Parse *, struct 
27930 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b  SrcList_item *);
27940 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63  .void sqlite3Src
27950 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70  ListShiftJoinTyp
27960 65 28 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69  e(SrcList*);.voi
27970 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  d sqlite3SrcList
27980 41 73 73 69 67 6e 43 75 72 73 6f 72 73 28 50 61  AssignCursors(Pa
27990 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  rse*, SrcList*);
279a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 64 4c  .void sqlite3IdL
279b0 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65  istDelete(sqlite
279c0 33 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f  3*, IdList*);.vo
279d0 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  id sqlite3SrcLis
279e0 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  tDelete(sqlite3*
279f0 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 49 6e 64  , SrcList*);.Ind
27a00 65 78 20 2a 73 71 6c 69 74 65 33 41 6c 6c 6f 63  ex *sqlite3Alloc
27a10 61 74 65 49 6e 64 65 78 4f 62 6a 65 63 74 28 73  ateIndexObject(s
27a20 71 6c 69 74 65 33 2a 2c 69 31 36 2c 69 6e 74 2c  qlite3*,i16,int,
27a30 63 68 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73 71  char**);.void sq
27a40 6c 69 74 65 33 43 72 65 61 74 65 49 6e 64 65 78  lite3CreateIndex
27a50 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
27a60 6f 6b 65 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c 45  oken*,SrcList*,E
27a70 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b  xprList*,int,Tok
27a80 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  en*,.           
27a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45                 E
27aa0 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  xpr*, int, int, 
27ab0 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
27ac0 33 44 72 6f 70 49 6e 64 65 78 28 50 61 72 73 65  3DropIndex(Parse
27ad0 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74  *, SrcList*, int
27ae0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 65  );.int sqlite3Se
27af0 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 53 65 6c  lect(Parse*, Sel
27b00 65 63 74 2a 2c 20 53 65 6c 65 63 74 44 65 73 74  ect*, SelectDest
27b10 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69  *);.Select *sqli
27b20 74 65 33 53 65 6c 65 63 74 4e 65 77 28 50 61 72  te3SelectNew(Par
27b30 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 72  se*,ExprList*,Sr
27b40 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70  cList*,Expr*,Exp
27b50 72 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20  rList*,.        
27b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27b70 20 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a   Expr*,ExprList*
27b80 2c 75 33 32 2c 45 78 70 72 2a 2c 45 78 70 72 2a  ,u32,Expr*,Expr*
27b90 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
27ba0 65 6c 65 63 74 44 65 6c 65 74 65 28 73 71 6c 69  electDelete(sqli
27bb0 74 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  te3*, Select*);.
27bc0 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 53 72  Table *sqlite3Sr
27bd0 63 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61 72 73  cListLookup(Pars
27be0 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69  e*, SrcList*);.i
27bf0 6e 74 20 73 71 6c 69 74 65 33 49 73 52 65 61 64  nt sqlite3IsRead
27c00 4f 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54 61 62  Only(Parse*, Tab
27c10 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  le*, int);.void 
27c20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65  sqlite3OpenTable
27c30 28 50 61 72 73 65 2a 2c 20 69 6e 74 20 69 43 75  (Parse*, int iCu
27c40 72 2c 20 69 6e 74 20 69 44 62 2c 20 54 61 62 6c  r, int iDb, Tabl
27c50 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20 64 65  e*, int);.#if de
27c60 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
27c70 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54  BLE_UPDATE_DELET
27c80 45 5f 4c 49 4d 49 54 29 20 26 26 20 21 64 65 66  E_LIMIT) && !def
27c90 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
27ca0 5f 53 55 42 51 55 45 52 59 29 0a 45 78 70 72 20  _SUBQUERY).Expr 
27cb0 2a 73 71 6c 69 74 65 33 4c 69 6d 69 74 57 68 65  *sqlite3LimitWhe
27cc0 72 65 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73  re(Parse*,SrcLis
27cd0 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73  t*,Expr*,ExprLis
27ce0 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c 63  t*,Expr*,Expr*,c
27cf0 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 76 6f  har*);.#endif.vo
27d00 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
27d10 46 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53 72 63  From(Parse*, Src
27d20 4c 69 73 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  List*, Expr*);.v
27d30 6f 69 64 20 73 71 6c 69 74 65 33 55 70 64 61 74  oid sqlite3Updat
27d40 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  e(Parse*, SrcLis
27d50 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 45  t*, ExprList*, E
27d60 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 57 68 65 72  xpr*, int);.Wher
27d70 65 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57 68  eInfo *sqlite3Wh
27d80 65 72 65 42 65 67 69 6e 28 50 61 72 73 65 2a 2c  ereBegin(Parse*,
27d90 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45  SrcList*,Expr*,E
27da0 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73  xprList*,ExprLis
27db0 74 2a 2c 75 31 36 2c 69 6e 74 29 3b 0a 76 6f 69  t*,u16,int);.voi
27dc0 64 20 73 71 6c 69 74 65 33 57 68 65 72 65 45 6e  d sqlite3WhereEn
27dd0 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 4c  d(WhereInfo*);.L
27de0 6f 67 45 73 74 20 73 71 6c 69 74 65 33 57 68 65  ogEst sqlite3Whe
27df0 72 65 4f 75 74 70 75 74 52 6f 77 43 6f 75 6e 74  reOutputRowCount
27e00 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
27e10 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73  t sqlite3WhereIs
27e20 44 69 73 74 69 6e 63 74 28 57 68 65 72 65 49 6e  Distinct(WhereIn
27e30 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  fo*);.int sqlite
27e40 33 57 68 65 72 65 49 73 4f 72 64 65 72 65 64 28  3WhereIsOrdered(
27e50 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
27e60 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f 72 64   sqlite3WhereOrd
27e70 65 72 65 64 49 6e 6e 65 72 4c 6f 6f 70 28 57 68  eredInnerLoop(Wh
27e80 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
27e90 71 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f 72  qlite3WhereIsSor
27ea0 74 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  ted(WhereInfo*);
27eb0 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
27ec0 65 43 6f 6e 74 69 6e 75 65 4c 61 62 65 6c 28 57  eContinueLabel(W
27ed0 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
27ee0 73 71 6c 69 74 65 33 57 68 65 72 65 42 72 65 61  sqlite3WhereBrea
27ef0 6b 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f  kLabel(WhereInfo
27f00 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
27f10 68 65 72 65 4f 6b 4f 6e 65 50 61 73 73 28 57 68  hereOkOnePass(Wh
27f20 65 72 65 49 6e 66 6f 2a 2c 20 69 6e 74 2a 29 3b  ereInfo*, int*);
27f30 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53 53  .#define ONEPASS
27f40 5f 4f 46 46 20 20 20 20 20 20 30 20 20 20 20 20  _OFF      0     
27f50 20 20 20 2f 2a 20 55 73 65 20 6f 66 20 4f 4e 45     /* Use of ONE
27f60 50 41 53 53 20 6e 6f 74 20 61 6c 6c 6f 77 65 64  PASS not allowed
27f70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50   */.#define ONEP
27f80 41 53 53 5f 53 49 4e 47 4c 45 20 20 20 31 20 20  ASS_SINGLE   1  
27f90 20 20 20 20 20 20 2f 2a 20 4f 4e 45 50 41 53 53        /* ONEPASS
27fa0 20 76 61 6c 69 64 20 66 6f 72 20 61 20 73 69 6e   valid for a sin
27fb0 67 6c 65 20 72 6f 77 20 75 70 64 61 74 65 20 2a  gle row update *
27fc0 2f 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53  /.#define ONEPAS
27fd0 53 5f 4d 55 4c 54 49 20 20 20 20 32 20 20 20 20  S_MULTI    2    
27fe0 20 20 20 20 2f 2a 20 4f 4e 45 50 41 53 53 20 69      /* ONEPASS i
27ff0 73 20 76 61 6c 69 64 20 66 6f 72 20 6d 75 6c 74  s valid for mult
28000 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 76 6f 69  iple rows */.voi
28010 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
28020 65 4c 6f 61 64 49 6e 64 65 78 43 6f 6c 75 6d 6e  eLoadIndexColumn
28030 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c  (Parse*, Index*,
28040 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
28050 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
28060 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 28 50 61  CodeGetColumn(Pa
28070 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
28080 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29  t, int, int, u8)
28090 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
280a0 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 54  prCodeGetColumnT
280b0 6f 52 65 67 28 50 61 72 73 65 2a 2c 20 54 61 62  oReg(Parse*, Tab
280c0 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  le*, int, int, i
280d0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
280e0 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75  3ExprCodeGetColu
280f0 6d 6e 4f 66 54 61 62 6c 65 28 56 64 62 65 2a 2c  mnOfTable(Vdbe*,
28100 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
28110 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
28120 6c 69 74 65 33 45 78 70 72 43 6f 64 65 4d 6f 76  lite3ExprCodeMov
28130 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  e(Parse*, int, i
28140 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
28150 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 53  qlite3ExprCacheS
28160 74 6f 72 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  tore(Parse*, int
28170 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
28180 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63  d sqlite3ExprCac
28190 68 65 50 75 73 68 28 50 61 72 73 65 2a 29 3b 0a  hePush(Parse*);.
281a0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
281b0 43 61 63 68 65 50 6f 70 28 50 61 72 73 65 2a 29  CachePop(Parse*)
281c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
281d0 70 72 43 61 63 68 65 52 65 6d 6f 76 65 28 50 61  prCacheRemove(Pa
281e0 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  rse*, int, int);
281f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
28200 72 43 61 63 68 65 43 6c 65 61 72 28 50 61 72 73  rCacheClear(Pars
28210 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
28220 33 45 78 70 72 43 61 63 68 65 41 66 66 69 6e 69  3ExprCacheAffini
28230 74 79 43 68 61 6e 67 65 28 50 61 72 73 65 2a 2c  tyChange(Parse*,
28240 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
28250 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
28260 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
28270 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
28280 65 33 45 78 70 72 43 6f 64 65 43 6f 70 79 28 50  e3ExprCodeCopy(P
28290 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
282a0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
282b0 45 78 70 72 43 6f 64 65 46 61 63 74 6f 72 61 62  ExprCodeFactorab
282c0 6c 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  le(Parse*, Expr*
282d0 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
282e0 74 65 33 45 78 70 72 43 6f 64 65 41 74 49 6e 69  te3ExprCodeAtIni
282f0 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  t(Parse*, Expr*,
28300 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
28310 65 33 45 78 70 72 43 6f 64 65 54 65 6d 70 28 50  e3ExprCodeTemp(P
28320 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
28330 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
28340 45 78 70 72 43 6f 64 65 54 61 72 67 65 74 28 50  ExprCodeTarget(P
28350 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
28360 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
28370 45 78 70 72 43 6f 64 65 41 6e 64 43 61 63 68 65  ExprCodeAndCache
28380 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
28390 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
283a0 33 45 78 70 72 43 6f 64 65 45 78 70 72 4c 69 73  3ExprCodeExprLis
283b0 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  t(Parse*, ExprLi
283c0 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75  st*, int, int, u
283d0 38 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  8);.#define SQLI
283e0 54 45 5f 45 43 45 4c 5f 44 55 50 20 20 20 20 20  TE_ECEL_DUP     
283f0 20 30 78 30 31 20 20 2f 2a 20 44 65 65 70 2c 20   0x01  /* Deep, 
28400 6e 6f 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70 69  not shallow copi
28410 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
28420 4c 49 54 45 5f 45 43 45 4c 5f 46 41 43 54 4f 52  LITE_ECEL_FACTOR
28430 20 20 20 30 78 30 32 20 20 2f 2a 20 46 61 63 74     0x02  /* Fact
28440 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74 20  or out constant 
28450 74 65 72 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65  terms */.#define
28460 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 52 45 46   SQLITE_ECEL_REF
28470 20 20 20 20 20 20 30 78 30 34 20 20 2f 2a 20 55        0x04  /* U
28480 73 65 20 45 78 70 72 4c 69 73 74 2e 75 2e 78 2e  se ExprList.u.x.
28490 69 4f 72 64 65 72 42 79 43 6f 6c 20 2a 2f 0a 23  iOrderByCol */.#
284a0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43  define SQLITE_EC
284b0 45 4c 5f 4f 4d 49 54 52 45 46 20 20 30 78 30 38  EL_OMITREF  0x08
284c0 20 20 2f 2a 20 4f 6d 69 74 20 69 66 20 45 78 70    /* Omit if Exp
284d0 72 4c 69 73 74 2e 75 2e 78 2e 69 4f 72 64 65 72  rList.u.x.iOrder
284e0 42 79 43 6f 6c 20 2a 2f 0a 76 6f 69 64 20 73 71  ByCol */.void sq
284f0 6c 69 74 65 33 45 78 70 72 49 66 54 72 75 65 28  lite3ExprIfTrue(
28500 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
28510 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
28520 71 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c 73  qlite3ExprIfFals
28530 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
28540 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
28550 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 46 61   sqlite3ExprIfFa
28560 6c 73 65 44 75 70 28 50 61 72 73 65 2a 2c 20 45  lseDup(Parse*, E
28570 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  xpr*, int, int);
28580 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 46  .Table *sqlite3F
28590 69 6e 64 54 61 62 6c 65 28 73 71 6c 69 74 65 33  indTable(sqlite3
285a0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  *,const char*, c
285b0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 64 65  onst char*);.#de
285c0 66 69 6e 65 20 4c 4f 43 41 54 45 5f 56 49 45 57  fine LOCATE_VIEW
285d0 20 20 20 20 30 78 30 31 0a 23 64 65 66 69 6e 65      0x01.#define
285e0 20 4c 4f 43 41 54 45 5f 4e 4f 45 52 52 20 20 20   LOCATE_NOERR   
285f0 30 78 30 32 0a 54 61 62 6c 65 20 2a 73 71 6c 69  0x02.Table *sqli
28600 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 28 50  te3LocateTable(P
28610 61 72 73 65 2a 2c 75 33 32 20 66 6c 61 67 73 2c  arse*,u32 flags,
28620 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
28630 73 74 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65  st char*);.Table
28640 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54   *sqlite3LocateT
28650 61 62 6c 65 49 74 65 6d 28 50 61 72 73 65 2a 2c  ableItem(Parse*,
28660 75 33 32 20 66 6c 61 67 73 2c 73 74 72 75 63 74  u32 flags,struct
28670 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29   SrcList_item *)
28680 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33  ;.Index *sqlite3
28690 46 69 6e 64 49 6e 64 65 78 28 73 71 6c 69 74 65  FindIndex(sqlite
286a0 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
286b0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
286c0 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  id sqlite3Unlink
286d0 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28 73  AndDeleteTable(s
286e0 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
286f0 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
28700 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
28710 65 6c 65 74 65 49 6e 64 65 78 28 73 71 6c 69 74  eleteIndex(sqlit
28720 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  e3*,int,const ch
28730 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
28740 65 33 56 61 63 75 75 6d 28 50 61 72 73 65 2a 2c  e3Vacuum(Parse*,
28750 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
28760 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28 63 68  ite3RunVacuum(ch
28770 61 72 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20  ar**, sqlite3*, 
28780 69 6e 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  int);.char *sqli
28790 74 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e  te3NameFromToken
287a0 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e  (sqlite3*, Token
287b0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
287c0 78 70 72 43 6f 6d 70 61 72 65 28 50 61 72 73 65  xprCompare(Parse
287d0 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20  *,Expr*, Expr*, 
287e0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
287f0 33 45 78 70 72 43 6f 6d 70 61 72 65 53 6b 69 70  3ExprCompareSkip
28800 28 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69  (Expr*, Expr*, i
28810 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
28820 45 78 70 72 4c 69 73 74 43 6f 6d 70 61 72 65 28  ExprListCompare(
28830 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c  ExprList*, ExprL
28840 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  ist*, int);.int 
28850 73 71 6c 69 74 65 33 45 78 70 72 49 6d 70 6c 69  sqlite3ExprImpli
28860 65 73 45 78 70 72 28 50 61 72 73 65 2a 2c 45 78  esExpr(Parse*,Ex
28870 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  pr*, Expr*, int)
28880 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
28890 70 72 41 6e 61 6c 79 7a 65 41 67 67 72 65 67 61  prAnalyzeAggrega
288a0 74 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  tes(NameContext*
288b0 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
288c0 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a  qlite3ExprAnalyz
288d0 65 41 67 67 4c 69 73 74 28 4e 61 6d 65 43 6f 6e  eAggList(NameCon
288e0 74 65 78 74 2a 2c 45 78 70 72 4c 69 73 74 2a 29  text*,ExprList*)
288f0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
28900 72 43 6f 76 65 72 65 64 42 79 49 6e 64 65 78 28  rCoveredByIndex(
28910 45 78 70 72 2a 2c 20 69 6e 74 20 69 43 75 72 2c  Expr*, int iCur,
28920 20 49 6e 64 65 78 20 2a 70 49 64 78 29 3b 0a 69   Index *pIdx);.i
28930 6e 74 20 73 71 6c 69 74 65 33 46 75 6e 63 74 69  nt sqlite3Functi
28940 6f 6e 55 73 65 73 54 68 69 73 53 72 63 28 45 78  onUsesThisSrc(Ex
28950 70 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a  pr*, SrcList*);.
28960 56 64 62 65 20 2a 73 71 6c 69 74 65 33 47 65 74  Vdbe *sqlite3Get
28970 56 64 62 65 28 50 61 72 73 65 2a 29 3b 0a 23 69  Vdbe(Parse*);.#i
28980 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54  fndef SQLITE_UNT
28990 45 53 54 41 42 4c 45 0a 76 6f 69 64 20 73 71 6c  ESTABLE.void sql
289a0 69 74 65 33 50 72 6e 67 53 61 76 65 53 74 61 74  ite3PrngSaveStat
289b0 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  e(void);.void sq
289c0 6c 69 74 65 33 50 72 6e 67 52 65 73 74 6f 72 65  lite3PrngRestore
289d0 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 23 65 6e  State(void);.#en
289e0 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
289f0 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69  RollbackAll(sqli
28a00 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  te3*,int);.void 
28a10 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66  sqlite3CodeVerif
28a20 79 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20  ySchema(Parse*, 
28a30 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
28a40 65 33 43 6f 64 65 56 65 72 69 66 79 4e 61 6d 65  e3CodeVerifyName
28a50 64 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20  dSchema(Parse*, 
28a60 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 29  const char *zDb)
28a70 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65  ;.void sqlite3Be
28a80 67 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28 50  ginTransaction(P
28a90 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  arse*, int);.voi
28aa0 64 20 73 71 6c 69 74 65 33 45 6e 64 54 72 61 6e  d sqlite3EndTran
28ab0 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 69  saction(Parse*,i
28ac0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
28ad0 33 53 61 76 65 70 6f 69 6e 74 28 50 61 72 73 65  3Savepoint(Parse
28ae0 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b  *, int, Token*);
28af0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f  .void sqlite3Clo
28b00 73 65 53 61 76 65 70 6f 69 6e 74 73 28 73 71 6c  seSavepoints(sql
28b10 69 74 65 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71  ite3 *);.void sq
28b20 6c 69 74 65 33 4c 65 61 76 65 4d 75 74 65 78 41  lite3LeaveMutexA
28b30 6e 64 43 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71  ndCloseZombie(sq
28b40 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c  lite3*);.int sql
28b50 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61  ite3ExprIsConsta
28b60 6e 74 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  nt(Expr*);.int s
28b70 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73  qlite3ExprIsCons
28b80 74 61 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78 70 72  tantNotJoin(Expr
28b90 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
28ba0 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72 46  xprIsConstantOrF
28bb0 75 6e 63 74 69 6f 6e 28 45 78 70 72 2a 2c 20 75  unction(Expr*, u
28bc0 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  8);.int sqlite3E
28bd0 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72 47  xprIsConstantOrG
28be0 72 6f 75 70 42 79 28 50 61 72 73 65 2a 2c 20 45  roupBy(Parse*, E
28bf0 78 70 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  xpr*, ExprList*)
28c00 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
28c10 72 49 73 54 61 62 6c 65 43 6f 6e 73 74 61 6e 74  rIsTableConstant
28c20 28 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 23 69 66  (Expr*,int);.#if
28c30 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
28c40 45 5f 43 55 52 53 4f 52 5f 48 49 4e 54 53 0a 69  E_CURSOR_HINTS.i
28c50 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
28c60 6e 74 61 69 6e 73 53 75 62 71 75 65 72 79 28 45  ntainsSubquery(E
28c70 78 70 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e  xpr*);.#endif.in
28c80 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 49  t sqlite3ExprIsI
28c90 6e 74 65 67 65 72 28 45 78 70 72 2a 2c 20 69 6e  nteger(Expr*, in
28ca0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
28cb0 45 78 70 72 43 61 6e 42 65 4e 75 6c 6c 28 63 6f  ExprCanBeNull(co
28cc0 6e 73 74 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20  nst Expr*);.int 
28cd0 73 71 6c 69 74 65 33 45 78 70 72 4e 65 65 64 73  sqlite3ExprNeeds
28ce0 4e 6f 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65  NoAffinityChange
28cf0 28 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 63 68  (const Expr*, ch
28d00 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  ar);.int sqlite3
28d10 49 73 52 6f 77 69 64 28 63 6f 6e 73 74 20 63 68  IsRowid(const ch
28d20 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
28d30 65 33 47 65 6e 65 72 61 74 65 52 6f 77 44 65 6c  e3GenerateRowDel
28d40 65 74 65 28 0a 20 20 20 20 50 61 72 73 65 2a 2c  ete(.    Parse*,
28d50 54 61 62 6c 65 2a 2c 54 72 69 67 67 65 72 2a 2c  Table*,Trigger*,
28d60 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 31 36 2c  int,int,int,i16,
28d70 75 38 2c 75 38 2c 75 38 2c 69 6e 74 29 3b 0a 76  u8,u8,u8,int);.v
28d80 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72  oid sqlite3Gener
28d90 61 74 65 52 6f 77 49 6e 64 65 78 44 65 6c 65 74  ateRowIndexDelet
28da0 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  e(Parse*, Table*
28db0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a  , int, int, int*
28dc0 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
28dd0 74 65 33 47 65 6e 65 72 61 74 65 49 6e 64 65 78  te3GenerateIndex
28de0 4b 65 79 28 50 61 72 73 65 2a 2c 20 49 6e 64 65  Key(Parse*, Inde
28df0 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  x*, int, int, in
28e00 74 2c 20 69 6e 74 2a 2c 49 6e 64 65 78 2a 2c 69  t, int*,Index*,i
28e10 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
28e20 33 52 65 73 6f 6c 76 65 50 61 72 74 49 64 78 4c  3ResolvePartIdxL
28e30 61 62 65 6c 28 50 61 72 73 65 2a 2c 69 6e 74 29  abel(Parse*,int)
28e40 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65  ;.void sqlite3Ge
28e50 6e 65 72 61 74 65 43 6f 6e 73 74 72 61 69 6e 74  nerateConstraint
28e60 43 68 65 63 6b 73 28 50 61 72 73 65 2a 2c 54 61  Checks(Parse*,Ta
28e70 62 6c 65 2a 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e  ble*,int*,int,in
28e80 74 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20 20 20  t,int,int,.     
28e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28eb0 75 38 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a 2c 69  u8,u8,int,int*,i
28ec0 6e 74 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  nt*);.#ifdef SQL
28ed0 49 54 45 5f 45 4e 41 42 4c 45 5f 4e 55 4c 4c 5f  ITE_ENABLE_NULL_
28ee0 54 52 49 4d 0a 20 20 76 6f 69 64 20 73 71 6c 69  TRIM.  void sqli
28ef0 74 65 33 53 65 74 4d 61 6b 65 52 65 63 6f 72 64  te3SetMakeRecord
28f00 50 35 28 56 64 62 65 2a 2c 54 61 62 6c 65 2a 29  P5(Vdbe*,Table*)
28f10 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
28f20 20 73 71 6c 69 74 65 33 53 65 74 4d 61 6b 65 52   sqlite3SetMakeR
28f30 65 63 6f 72 64 50 35 28 41 2c 42 29 0a 23 65 6e  ecordP5(A,B).#en
28f40 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
28f50 43 6f 6d 70 6c 65 74 65 49 6e 73 65 72 74 69 6f  CompleteInsertio
28f60 6e 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c  n(Parse*,Table*,
28f70 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a  int,int,int,int*
28f80 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 69  ,int,int,int);.i
28f90 6e 74 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61  nt sqlite3OpenTa
28fa0 62 6c 65 41 6e 64 49 6e 64 69 63 65 73 28 50 61  bleAndIndices(Pa
28fb0 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
28fc0 74 2c 20 75 38 2c 20 69 6e 74 2c 20 75 38 2a 2c  t, u8, int, u8*,
28fd0 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 76 6f   int*, int*);.vo
28fe0 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 57  id sqlite3BeginW
28ff0 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28 50 61  riteOperation(Pa
29000 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  rse*, int, int);
29010 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 75 6c  .void sqlite3Mul
29020 74 69 57 72 69 74 65 28 50 61 72 73 65 2a 29 3b  tiWrite(Parse*);
29030 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 79  .void sqlite3May
29040 41 62 6f 72 74 28 50 61 72 73 65 2a 29 3b 0a 76  Abort(Parse*);.v
29050 6f 69 64 20 73 71 6c 69 74 65 33 48 61 6c 74 43  oid sqlite3HaltC
29060 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a  onstraint(Parse*
29070 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 63 68 61 72  , int, int, char
29080 2a 2c 20 69 38 2c 20 75 38 29 3b 0a 76 6f 69 64  *, i8, u8);.void
29090 20 73 71 6c 69 74 65 33 55 6e 69 71 75 65 43 6f   sqlite3UniqueCo
290a0 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c  nstraint(Parse*,
290b0 20 69 6e 74 2c 20 49 6e 64 65 78 2a 29 3b 0a 76   int, Index*);.v
290c0 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 69 64  oid sqlite3Rowid
290d0 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65  Constraint(Parse
290e0 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 2a 29 3b  *, int, Table*);
290f0 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
29100 70 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45  prDup(sqlite3*,E
29110 78 70 72 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 4c  xpr*,int);.ExprL
29120 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72  ist *sqlite3Expr
29130 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a  ListDup(sqlite3*
29140 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b  ,ExprList*,int);
29150 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65  .SrcList *sqlite
29160 33 53 72 63 4c 69 73 74 44 75 70 28 73 71 6c 69  3SrcListDup(sqli
29170 74 65 33 2a 2c 53 72 63 4c 69 73 74 2a 2c 69 6e  te3*,SrcList*,in
29180 74 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69  t);.IdList *sqli
29190 74 65 33 49 64 4c 69 73 74 44 75 70 28 73 71 6c  te3IdListDup(sql
291a0 69 74 65 33 2a 2c 49 64 4c 69 73 74 2a 29 3b 0a  ite3*,IdList*);.
291b0 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53  Select *sqlite3S
291c0 65 6c 65 63 74 44 75 70 28 73 71 6c 69 74 65 33  electDup(sqlite3
291d0 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 29 3b 0a  *,Select*,int);.
291e0 23 69 66 20 53 45 4c 45 43 54 54 52 41 43 45 5f  #if SELECTTRACE_
291f0 45 4e 41 42 4c 45 44 0a 76 6f 69 64 20 73 71 6c  ENABLED.void sql
29200 69 74 65 33 53 65 6c 65 63 74 53 65 74 4e 61 6d  ite3SelectSetNam
29210 65 28 53 65 6c 65 63 74 2a 2c 63 6f 6e 73 74 20  e(Select*,const 
29220 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  char*);.#else.# 
29230 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65  define sqlite3Se
29240 6c 65 63 74 53 65 74 4e 61 6d 65 28 41 2c 42 29  lectSetName(A,B)
29250 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
29260 69 74 65 33 49 6e 73 65 72 74 42 75 69 6c 74 69  ite3InsertBuilti
29270 6e 46 75 6e 63 73 28 46 75 6e 63 44 65 66 2a 2c  nFuncs(FuncDef*,
29280 69 6e 74 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73  int);.FuncDef *s
29290 71 6c 69 74 65 33 46 69 6e 64 46 75 6e 63 74 69  qlite3FindFuncti
292a0 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  on(sqlite3*,cons
292b0 74 20 63 68 61 72 2a 2c 69 6e 74 2c 75 38 2c 75  t char*,int,u8,u
292c0 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  8);.void sqlite3
292d0 52 65 67 69 73 74 65 72 42 75 69 6c 74 69 6e 46  RegisterBuiltinF
292e0 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a  unctions(void);.
292f0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69  void sqlite3Regi
29300 73 74 65 72 44 61 74 65 54 69 6d 65 46 75 6e 63  sterDateTimeFunc
29310 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69  tions(void);.voi
29320 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65  d sqlite3Registe
29330 72 50 65 72 43 6f 6e 6e 65 63 74 69 6f 6e 42 75  rPerConnectionBu
29340 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28 73  iltinFunctions(s
29350 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71  qlite3*);.int sq
29360 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b  lite3SafetyCheck
29370 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e  Ok(sqlite3*);.in
29380 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43  t sqlite3SafetyC
29390 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 73 71 6c  heckSickOrOk(sql
293a0 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
293b0 69 74 65 33 43 68 61 6e 67 65 43 6f 6f 6b 69 65  ite3ChangeCookie
293c0 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 0a  (Parse*, int);..
293d0 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
293e0 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 26  ITE_OMIT_VIEW) &
293f0 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
29400 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a  E_OMIT_TRIGGER).
29410 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 74 65  void sqlite3Mate
29420 72 69 61 6c 69 7a 65 56 69 65 77 28 50 61 72 73  rializeView(Pars
29430 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72  e*, Table*, Expr
29440 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  *, int);.#endif.
29450 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
29460 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 20 20 76  OMIT_TRIGGER.  v
29470 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
29480 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20  Trigger(Parse*, 
29490 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e  Token*,Token*,in
294a0 74 2c 69 6e 74 2c 49 64 4c 69 73 74 2a 2c 53 72  t,int,IdList*,Sr
294b0 63 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20  cList*,.        
294c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
294d0 20 20 20 45 78 70 72 2a 2c 69 6e 74 2c 20 69 6e     Expr*,int, in
294e0 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
294f0 65 33 46 69 6e 69 73 68 54 72 69 67 67 65 72 28  e3FinishTrigger(
29500 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 53  Parse*, TriggerS
29510 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20  tep*, Token*);. 
29520 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f   void sqlite3Dro
29530 70 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c  pTrigger(Parse*,
29540 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b   SrcList*, int);
29550 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
29560 72 6f 70 54 72 69 67 67 65 72 50 74 72 28 50 61  ropTriggerPtr(Pa
29570 72 73 65 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b  rse*, Trigger*);
29580 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69  .  Trigger *sqli
29590 74 65 33 54 72 69 67 67 65 72 73 45 78 69 73 74  te3TriggersExist
295a0 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 2a  (Parse *, Table*
295b0 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a  , int, ExprList*
295c0 2c 20 69 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a 20  , int *pMask);. 
295d0 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65   Trigger *sqlite
295e0 33 54 72 69 67 67 65 72 4c 69 73 74 28 50 61 72  3TriggerList(Par
295f0 73 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a  se *, Table *);.
29600 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
29610 64 65 52 6f 77 54 72 69 67 67 65 72 28 50 61 72  deRowTrigger(Par
29620 73 65 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20  se*, Trigger *, 
29630 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  int, ExprList*, 
29640 69 6e 74 2c 20 54 61 62 6c 65 20 2a 2c 0a 20 20  int, Table *,.  
29650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29660 20 20 20 20 20 20 20 20 20 20 69 6e 74 2c 20 69            int, i
29670 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  nt, int);.  void
29680 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54   sqlite3CodeRowT
29690 72 69 67 67 65 72 44 69 72 65 63 74 28 50 61 72  riggerDirect(Par
296a0 73 65 20 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c  se *, Trigger *,
296b0 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69   Table *, int, i
296c0 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  nt, int);.  void
296d0 20 73 71 6c 69 74 65 56 69 65 77 54 72 69 67 67   sqliteViewTrigg
296e0 65 72 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ers(Parse*, Tabl
296f0 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20  e*, Expr*, int, 
29700 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20 76 6f  ExprList*);.  vo
29710 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
29720 54 72 69 67 67 65 72 53 74 65 70 28 73 71 6c 69  TriggerStep(sqli
29730 74 65 33 2a 2c 20 54 72 69 67 67 65 72 53 74 65  te3*, TriggerSte
29740 70 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74  p*);.  TriggerSt
29750 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  ep *sqlite3Trigg
29760 65 72 53 65 6c 65 63 74 53 74 65 70 28 73 71 6c  erSelectStep(sql
29770 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a  ite3*,Select*);.
29780 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
29790 71 6c 69 74 65 33 54 72 69 67 67 65 72 49 6e 73  qlite3TriggerIns
297a0 65 72 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a  ertStep(sqlite3*
297b0 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73 74 2a  ,Token*, IdList*
297c0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
297d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
297e0 20 20 20 20 20 20 20 20 20 20 53 65 6c 65 63 74            Select
297f0 2a 2c 75 38 29 3b 0a 20 20 54 72 69 67 67 65 72  *,u8);.  Trigger
29800 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69  Step *sqlite3Tri
29810 67 67 65 72 55 70 64 61 74 65 53 74 65 70 28 73  ggerUpdateStep(s
29820 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 45  qlite3*,Token*,E
29830 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c  xprList*, Expr*,
29840 20 75 38 29 3b 0a 20 20 54 72 69 67 67 65 72 53   u8);.  TriggerS
29850 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
29860 67 65 72 44 65 6c 65 74 65 53 74 65 70 28 73 71  gerDeleteStep(sq
29870 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 45  lite3*,Token*, E
29880 78 70 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  xpr*);.  void sq
29890 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67  lite3DeleteTrigg
298a0 65 72 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69  er(sqlite3*, Tri
298b0 67 67 65 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  gger*);.  void s
298c0 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
298d0 65 6c 65 74 65 54 72 69 67 67 65 72 28 73 71 6c  eleteTrigger(sql
298e0 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  ite3*,int,const 
298f0 63 68 61 72 2a 29 3b 0a 20 20 75 33 32 20 73 71  char*);.  u32 sq
29900 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d  lite3TriggerColm
29910 61 73 6b 28 50 61 72 73 65 2a 2c 54 72 69 67 67  ask(Parse*,Trigg
29920 65 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e  er*,ExprList*,in
29930 74 2c 69 6e 74 2c 54 61 62 6c 65 2a 2c 69 6e 74  t,int,Table*,int
29940 29 3b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  );.# define sqli
29950 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c  te3ParseToplevel
29960 28 70 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65  (p) ((p)->pTople
29970 76 65 6c 20 3f 20 28 70 29 2d 3e 70 54 6f 70 6c  vel ? (p)->pTopl
29980 65 76 65 6c 20 3a 20 28 70 29 29 0a 23 20 64 65  evel : (p)).# de
29990 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 54 6f  fine sqlite3IsTo
299a0 70 6c 65 76 65 6c 28 70 29 20 28 28 70 29 2d 3e  plevel(p) ((p)->
299b0 70 54 6f 70 6c 65 76 65 6c 3d 3d 30 29 0a 23 65  pToplevel==0).#e
299c0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
299d0 69 74 65 33 54 72 69 67 67 65 72 73 45 78 69 73  ite3TriggersExis
299e0 74 28 42 2c 43 2c 44 2c 45 2c 46 29 20 30 0a 23  t(B,C,D,E,F) 0.#
299f0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44   define sqlite3D
29a00 65 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c 42  eleteTrigger(A,B
29a10 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
29a20 65 33 44 72 6f 70 54 72 69 67 67 65 72 50 74 72  e3DropTriggerPtr
29a30 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73  (A,B).# define s
29a40 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
29a50 65 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c 42  eleteTrigger(A,B
29a60 2c 43 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,C).# define sql
29a70 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67  ite3CodeRowTrigg
29a80 65 72 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47  er(A,B,C,D,E,F,G
29a90 2c 48 2c 49 29 0a 23 20 64 65 66 69 6e 65 20 73  ,H,I).# define s
29aa0 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69  qlite3CodeRowTri
29ab0 67 67 65 72 44 69 72 65 63 74 28 41 2c 42 2c 43  ggerDirect(A,B,C
29ac0 2c 44 2c 45 2c 46 29 0a 23 20 64 65 66 69 6e 65  ,D,E,F).# define
29ad0 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c   sqlite3TriggerL
29ae0 69 73 74 28 58 2c 20 59 29 20 30 0a 23 20 64 65  ist(X, Y) 0.# de
29af0 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73  fine sqlite3Pars
29b00 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 70 0a 23  eToplevel(p) p.#
29b10 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
29b20 73 54 6f 70 6c 65 76 65 6c 28 70 29 20 31 0a 23  sToplevel(p) 1.#
29b30 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
29b40 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 41 2c  riggerColmask(A,
29b50 42 2c 43 2c 44 2c 45 2c 46 2c 47 29 20 30 0a 23  B,C,D,E,F,G) 0.#
29b60 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74  endif..int sqlit
29b70 65 33 4a 6f 69 6e 54 79 70 65 28 50 61 72 73 65  e3JoinType(Parse
29b80 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
29b90 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
29ba0 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 46 6f   sqlite3CreateFo
29bb0 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c  reignKey(Parse*,
29bc0 20 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65   ExprList*, Toke
29bd0 6e 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  n*, ExprList*, i
29be0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
29bf0 33 44 65 66 65 72 46 6f 72 65 69 67 6e 4b 65 79  3DeferForeignKey
29c00 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23  (Parse*, int);.#
29c10 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
29c20 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e  IT_AUTHORIZATION
29c30 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
29c40 75 74 68 52 65 61 64 28 50 61 72 73 65 2a 2c 45  uthRead(Parse*,E
29c50 78 70 72 2a 2c 53 63 68 65 6d 61 2a 2c 53 72 63  xpr*,Schema*,Src
29c60 4c 69 73 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71  List*);.  int sq
29c70 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 50  lite3AuthCheck(P
29c80 61 72 73 65 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74  arse*,int, const
29c90 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
29ca0 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
29cb0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
29cc0 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68  3AuthContextPush
29cd0 28 50 61 72 73 65 2a 2c 20 41 75 74 68 43 6f 6e  (Parse*, AuthCon
29ce0 74 65 78 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61  text*, const cha
29cf0 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  r*);.  void sqli
29d00 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f  te3AuthContextPo
29d10 70 28 41 75 74 68 43 6f 6e 74 65 78 74 2a 29 3b  p(AuthContext*);
29d20 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75  .  int sqlite3Au
29d30 74 68 52 65 61 64 43 6f 6c 28 50 61 72 73 65 2a  thReadCol(Parse*
29d40 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
29d50 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e  const char *, in
29d60 74 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  t);.#else.# defi
29d70 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 52 65  ne sqlite3AuthRe
29d80 61 64 28 61 2c 62 2c 63 2c 64 29 0a 23 20 64 65  ad(a,b,c,d).# de
29d90 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68  fine sqlite3Auth
29da0 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 29  Check(a,b,c,d,e)
29db0 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20      SQLITE_OK.# 
29dc0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
29dd0 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28 61 2c  thContextPush(a,
29de0 62 2c 63 29 0a 23 20 64 65 66 69 6e 65 20 73 71  b,c).# define sq
29df0 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74  lite3AuthContext
29e00 50 6f 70 28 61 29 20 20 28 28 76 6f 69 64 29 28  Pop(a)  ((void)(
29e10 61 29 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  a)).#endif.void 
29e20 73 71 6c 69 74 65 33 41 74 74 61 63 68 28 50 61  sqlite3Attach(Pa
29e30 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70  rse*, Expr*, Exp
29e40 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  r*, Expr*);.void
29e50 20 73 71 6c 69 74 65 33 44 65 74 61 63 68 28 50   sqlite3Detach(P
29e60 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  arse*, Expr*);.v
29e70 6f 69 64 20 73 71 6c 69 74 65 33 46 69 78 49 6e  oid sqlite3FixIn
29e80 69 74 28 44 62 46 69 78 65 72 2a 2c 20 50 61 72  it(DbFixer*, Par
29e90 73 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  se*, int, const 
29ea0 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b  char*, const Tok
29eb0 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
29ec0 33 46 69 78 53 72 63 4c 69 73 74 28 44 62 46 69  3FixSrcList(DbFi
29ed0 78 65 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  xer*, SrcList*);
29ee0 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53  .int sqlite3FixS
29ef0 65 6c 65 63 74 28 44 62 46 69 78 65 72 2a 2c 20  elect(DbFixer*, 
29f00 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
29f10 6c 69 74 65 33 46 69 78 45 78 70 72 28 44 62 46  lite3FixExpr(DbF
29f20 69 78 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69  ixer*, Expr*);.i
29f30 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45 78 70  nt sqlite3FixExp
29f40 72 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20  rList(DbFixer*, 
29f50 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
29f60 73 71 6c 69 74 65 33 46 69 78 54 72 69 67 67 65  sqlite3FixTrigge
29f70 72 53 74 65 70 28 44 62 46 69 78 65 72 2a 2c 20  rStep(DbFixer*, 
29f80 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 69  TriggerStep*);.i
29f90 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 46 28 63  nt sqlite3AtoF(c
29fa0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 64 6f  onst char *z, do
29fb0 75 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 29 3b  uble*, int, u8);
29fc0 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 49  .int sqlite3GetI
29fd0 6e 74 33 32 28 63 6f 6e 73 74 20 63 68 61 72 20  nt32(const char 
29fe0 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71  *, int*);.int sq
29ff0 6c 69 74 65 33 41 74 6f 69 28 63 6f 6e 73 74 20  lite3Atoi(const 
2a000 63 68 61 72 2a 29 3b 0a 23 69 66 6e 64 65 66 20  char*);.#ifndef 
2a010 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
2a020 36 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66  6.int sqlite3Utf
2a030 31 36 42 79 74 65 4c 65 6e 28 63 6f 6e 73 74 20  16ByteLen(const 
2a040 76 6f 69 64 20 2a 70 44 61 74 61 2c 20 69 6e 74  void *pData, int
2a050 20 6e 43 68 61 72 29 3b 0a 23 65 6e 64 69 66 0a   nChar);.#endif.
2a060 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38 43  int sqlite3Utf8C
2a070 68 61 72 4c 65 6e 28 63 6f 6e 73 74 20 63 68 61  harLen(const cha
2a080 72 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 42  r *pData, int nB
2a090 79 74 65 29 3b 0a 75 33 32 20 73 71 6c 69 74 65  yte);.u32 sqlite
2a0a0 33 55 74 66 38 52 65 61 64 28 63 6f 6e 73 74 20  3Utf8Read(const 
2a0b0 75 38 2a 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71  u8**);.LogEst sq
2a0c0 6c 69 74 65 33 4c 6f 67 45 73 74 28 75 36 34 29  lite3LogEst(u64)
2a0d0 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33  ;.LogEst sqlite3
2a0e0 4c 6f 67 45 73 74 41 64 64 28 4c 6f 67 45 73 74  LogEstAdd(LogEst
2a0f0 2c 4c 6f 67 45 73 74 29 3b 0a 23 69 66 6e 64 65  ,LogEst);.#ifnde
2a100 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
2a110 52 54 55 41 4c 54 41 42 4c 45 0a 4c 6f 67 45 73  RTUALTABLE.LogEs
2a120 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 46  t sqlite3LogEstF
2a130 72 6f 6d 44 6f 75 62 6c 65 28 64 6f 75 62 6c 65  romDouble(double
2a140 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65  );.#endif.#if de
2a150 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
2a160 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41  BLE_STMT_SCANSTA
2a170 54 55 53 29 20 7c 7c 20 5c 0a 20 20 20 20 64 65  TUS) || \.    de
2a180 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
2a190 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
2a1a0 54 34 29 20 7c 7c 20 5c 0a 20 20 20 20 64 65 66  T4) || \.    def
2a1b0 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 58 50 4c  ined(SQLITE_EXPL
2a1c0 41 49 4e 5f 45 53 54 49 4d 41 54 45 44 5f 52 4f  AIN_ESTIMATED_RO
2a1d0 57 53 29 0a 75 36 34 20 73 71 6c 69 74 65 33 4c  WS).u64 sqlite3L
2a1e0 6f 67 45 73 74 54 6f 49 6e 74 28 4c 6f 67 45 73  ogEstToInt(LogEs
2a1f0 74 29 3b 0a 23 65 6e 64 69 66 0a 56 4c 69 73 74  t);.#endif.VList
2a200 20 2a 73 71 6c 69 74 65 33 56 4c 69 73 74 41 64   *sqlite3VListAd
2a210 64 28 73 71 6c 69 74 65 33 2a 2c 56 4c 69 73 74  d(sqlite3*,VList
2a220 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  *,const char*,in
2a230 74 2c 69 6e 74 29 3b 0a 63 6f 6e 73 74 20 63 68  t,int);.const ch
2a240 61 72 20 2a 73 71 6c 69 74 65 33 56 4c 69 73 74  ar *sqlite3VList
2a250 4e 75 6d 54 6f 4e 61 6d 65 28 56 4c 69 73 74 2a  NumToName(VList*
2a260 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,int);.int sqlit
2a270 65 33 56 4c 69 73 74 4e 61 6d 65 54 6f 4e 75 6d  e3VListNameToNum
2a280 28 56 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68  (VList*,const ch
2a290 61 72 2a 2c 69 6e 74 29 3b 0a 0a 2f 2a 0a 2a 2a  ar*,int);../*.**
2a2a0 20 52 6f 75 74 69 6e 65 73 20 74 6f 20 72 65 61   Routines to rea
2a2b0 64 20 61 6e 64 20 77 72 69 74 65 20 76 61 72 69  d and write vari
2a2c0 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65  able-length inte
2a2d0 67 65 72 73 2e 20 20 54 68 65 73 65 20 75 73 65  gers.  These use
2a2e0 64 20 74 6f 0a 2a 2a 20 62 65 20 64 65 66 69 6e  d to.** be defin
2a2f0 65 64 20 6c 6f 63 61 6c 6c 79 2c 20 62 75 74 20  ed locally, but 
2a300 6e 6f 77 20 77 65 20 75 73 65 20 74 68 65 20 76  now we use the v
2a310 61 72 69 6e 74 20 72 6f 75 74 69 6e 65 73 20 69  arint routines i
2a320 6e 20 74 68 65 20 75 74 69 6c 2e 63 0a 2a 2a 20  n the util.c.** 
2a330 66 69 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c  file..*/.int sql
2a340 69 74 65 33 50 75 74 56 61 72 69 6e 74 28 75 6e  ite3PutVarint(un
2a350 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 75 36  signed char*, u6
2a360 34 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65  4);.u8 sqlite3Ge
2a370 74 56 61 72 69 6e 74 28 63 6f 6e 73 74 20 75 6e  tVarint(const un
2a380 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75  signed char *, u
2a390 36 34 20 2a 29 3b 0a 75 38 20 73 71 6c 69 74 65  64 *);.u8 sqlite
2a3a0 33 47 65 74 56 61 72 69 6e 74 33 32 28 63 6f 6e  3GetVarint32(con
2a3b0 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
2a3c0 20 2a 2c 20 75 33 32 20 2a 29 3b 0a 69 6e 74 20   *, u32 *);.int 
2a3d0 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e  sqlite3VarintLen
2a3e0 28 75 36 34 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20  (u64 v);../*.** 
2a3f0 54 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20  The common case 
2a400 69 73 20 66 6f 72 20 61 20 76 61 72 69 6e 74 20  is for a varint 
2a410 74 6f 20 62 65 20 61 20 73 69 6e 67 6c 65 20 62  to be a single b
2a420 79 74 65 2e 20 20 54 68 65 79 20 66 6f 6c 6c 6f  yte.  They follo
2a430 77 69 6e 67 0a 2a 2a 20 6d 61 63 72 6f 73 20 68  wing.** macros h
2a440 61 6e 64 6c 65 20 74 68 65 20 63 6f 6d 6d 6f 6e  andle the common
2a450 20 63 61 73 65 20 77 69 74 68 6f 75 74 20 61 20   case without a 
2a460 70 72 6f 63 65 64 75 72 65 20 63 61 6c 6c 2c 20  procedure call, 
2a470 62 75 74 20 74 68 65 6e 20 63 61 6c 6c 0a 2a 2a  but then call.**
2a480 20 74 68 65 20 70 72 6f 63 65 64 75 72 65 20 66   the procedure f
2a490 6f 72 20 6c 61 72 67 65 72 20 76 61 72 69 6e 74  or larger varint
2a4a0 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 67 65  s..*/.#define ge
2a4b0 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20  tVarint32(A,B)  
2a4c0 5c 0a 20 20 28 75 38 29 28 28 2a 28 41 29 3c 28  \.  (u8)((*(A)<(
2a4d0 75 38 29 30 78 38 30 29 3f 28 28 42 29 3d 28 75  u8)0x80)?((B)=(u
2a4e0 33 32 29 2a 28 41 29 29 2c 31 3a 73 71 6c 69 74  32)*(A)),1:sqlit
2a4f0 65 33 47 65 74 56 61 72 69 6e 74 33 32 28 28 41  e3GetVarint32((A
2a500 29 2c 28 75 33 32 20 2a 29 26 28 42 29 29 29 0a  ),(u32 *)&(B))).
2a510 23 64 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e  #define putVarin
2a520 74 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75  t32(A,B)  \.  (u
2a530 38 29 28 28 28 75 33 32 29 28 42 29 3c 28 75 33  8)(((u32)(B)<(u3
2a540 32 29 30 78 38 30 29 3f 28 2a 28 41 29 3d 28 75  2)0x80)?(*(A)=(u
2a550 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 42 29  nsigned char)(B)
2a560 29 2c 31 3a 5c 0a 20 20 73 71 6c 69 74 65 33 50  ),1:\.  sqlite3P
2a570 75 74 56 61 72 69 6e 74 28 28 41 29 2c 28 42 29  utVarint((A),(B)
2a580 29 29 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61  )).#define getVa
2a590 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33 47  rint    sqlite3G
2a5a0 65 74 56 61 72 69 6e 74 0a 23 64 65 66 69 6e 65  etVarint.#define
2a5b0 20 70 75 74 56 61 72 69 6e 74 20 20 20 20 73 71   putVarint    sq
2a5c0 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 0a 0a  lite3PutVarint..
2a5d0 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
2a5e0 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74  ite3IndexAffinit
2a5f0 79 53 74 72 28 73 71 6c 69 74 65 33 2a 2c 20 49  yStr(sqlite3*, I
2a600 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ndex*);.void sql
2a610 69 74 65 33 54 61 62 6c 65 41 66 66 69 6e 69 74  ite3TableAffinit
2a620 79 28 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c  y(Vdbe*, Table*,
2a630 20 69 6e 74 29 3b 0a 63 68 61 72 20 73 71 6c 69   int);.char sqli
2a640 74 65 33 43 6f 6d 70 61 72 65 41 66 66 69 6e 69  te3CompareAffini
2a650 74 79 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20  ty(Expr *pExpr, 
2a660 63 68 61 72 20 61 66 66 32 29 3b 0a 69 6e 74 20  char aff2);.int 
2a670 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69  sqlite3IndexAffi
2a680 6e 69 74 79 4f 6b 28 45 78 70 72 20 2a 70 45 78  nityOk(Expr *pEx
2a690 70 72 2c 20 63 68 61 72 20 69 64 78 5f 61 66 66  pr, char idx_aff
2a6a0 69 6e 69 74 79 29 3b 0a 63 68 61 72 20 73 71 6c  inity);.char sql
2a6b0 69 74 65 33 54 61 62 6c 65 43 6f 6c 75 6d 6e 41  ite3TableColumnA
2a6c0 66 66 69 6e 69 74 79 28 54 61 62 6c 65 2a 2c 69  ffinity(Table*,i
2a6d0 6e 74 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65  nt);.char sqlite
2a6e0 33 45 78 70 72 41 66 66 69 6e 69 74 79 28 45 78  3ExprAffinity(Ex
2a6f0 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20  pr *pExpr);.int 
2a700 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 63 6f  sqlite3Atoi64(co
2a710 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 2c  nst char*, i64*,
2a720 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73   int, u8);.int s
2a730 71 6c 69 74 65 33 44 65 63 4f 72 48 65 78 54 6f  qlite3DecOrHexTo
2a740 49 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  I64(const char*,
2a750 20 69 36 34 2a 29 3b 0a 76 6f 69 64 20 73 71 6c   i64*);.void sql
2a760 69 74 65 33 45 72 72 6f 72 57 69 74 68 4d 73 67  ite3ErrorWithMsg
2a770 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20  (sqlite3*, int, 
2a780 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29  const char*,...)
2a790 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72  ;.void sqlite3Er
2a7a0 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  ror(sqlite3*,int
2a7b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
2a7c0 79 73 74 65 6d 45 72 72 6f 72 28 73 71 6c 69 74  ystemError(sqlit
2a7d0 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 2a  e3*,int);.void *
2a7e0 73 71 6c 69 74 65 33 48 65 78 54 6f 42 6c 6f 62  sqlite3HexToBlob
2a7f0 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74  (sqlite3*, const
2a800 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 29   char *z, int n)
2a810 3b 0a 75 38 20 73 71 6c 69 74 65 33 48 65 78 54  ;.u8 sqlite3HexT
2a820 6f 49 6e 74 28 69 6e 74 20 68 29 3b 0a 69 6e 74  oInt(int h);.int
2a830 20 73 71 6c 69 74 65 33 54 77 6f 50 61 72 74 4e   sqlite3TwoPartN
2a840 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b  ame(Parse *, Tok
2a850 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54  en *, Token *, T
2a860 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a 23 69 66 20 64  oken **);..#if d
2a870 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4e 45  efined(SQLITE_NE
2a880 45 44 5f 45 52 52 5f 4e 41 4d 45 29 0a 63 6f 6e  ED_ERR_NAME).con
2a890 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
2a8a0 45 72 72 4e 61 6d 65 28 69 6e 74 29 3b 0a 23 65  ErrName(int);.#e
2a8b0 6e 64 69 66 0a 0a 63 6f 6e 73 74 20 63 68 61 72  ndif..const char
2a8c0 20 2a 73 71 6c 69 74 65 33 45 72 72 53 74 72 28   *sqlite3ErrStr(
2a8d0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2a8e0 33 52 65 61 64 53 63 68 65 6d 61 28 50 61 72 73  3ReadSchema(Pars
2a8f0 65 20 2a 70 50 61 72 73 65 29 3b 0a 43 6f 6c 6c  e *pParse);.Coll
2a900 53 65 71 20 2a 73 71 6c 69 74 65 33 46 69 6e 64  Seq *sqlite3Find
2a910 43 6f 6c 6c 53 65 71 28 73 71 6c 69 74 65 33 2a  CollSeq(sqlite3*
2a920 2c 75 38 20 65 6e 63 2c 20 63 6f 6e 73 74 20 63  ,u8 enc, const c
2a930 68 61 72 2a 2c 69 6e 74 29 3b 0a 43 6f 6c 6c 53  har*,int);.CollS
2a940 65 71 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74  eq *sqlite3Locat
2a950 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a  eCollSeq(Parse *
2a960 70 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63 68  pParse, const ch
2a970 61 72 2a 7a 4e 61 6d 65 29 3b 0a 43 6f 6c 6c 53  ar*zName);.CollS
2a980 65 71 20 2a 73 71 6c 69 74 65 33 45 78 70 72 43  eq *sqlite3ExprC
2a990 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50  ollSeq(Parse *pP
2a9a0 61 72 73 65 2c 20 45 78 70 72 20 2a 70 45 78 70  arse, Expr *pExp
2a9b0 72 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  r);.Expr *sqlite
2a9c0 33 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65 54  3ExprAddCollateT
2a9d0 6f 6b 65 6e 28 50 61 72 73 65 20 2a 70 50 61 72  oken(Parse *pPar
2a9e0 73 65 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74  se, Expr*, const
2a9f0 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 45   Token*, int);.E
2aa00 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
2aa10 41 64 64 43 6f 6c 6c 61 74 65 53 74 72 69 6e 67  AddCollateString
2aa20 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f  (Parse*,Expr*,co
2aa30 6e 73 74 20 63 68 61 72 2a 29 3b 0a 45 78 70 72  nst char*);.Expr
2aa40 20 2a 73 71 6c 69 74 65 33 45 78 70 72 53 6b 69   *sqlite3ExprSki
2aa50 70 43 6f 6c 6c 61 74 65 28 45 78 70 72 2a 29 3b  pCollate(Expr*);
2aa60 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63  .int sqlite3Chec
2aa70 6b 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a  kCollSeq(Parse *
2aa80 2c 20 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e  , CollSeq *);.in
2aa90 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 4f 62  t sqlite3CheckOb
2aaa0 6a 65 63 74 4e 61 6d 65 28 50 61 72 73 65 20 2a  jectName(Parse *
2aab0 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b  , const char *);
2aac0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62  .void sqlite3Vdb
2aad0 65 53 65 74 43 68 61 6e 67 65 73 28 73 71 6c 69  eSetChanges(sqli
2aae0 74 65 33 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  te3 *, int);.int
2aaf0 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34   sqlite3AddInt64
2ab00 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20  (i64*,i64);.int 
2ab10 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34 28  sqlite3SubInt64(
2ab20 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73  i64*,i64);.int s
2ab30 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34 28 69  qlite3MulInt64(i
2ab40 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71  64*,i64);.int sq
2ab50 6c 69 74 65 33 41 62 73 49 6e 74 33 32 28 69 6e  lite3AbsInt32(in
2ab60 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  t);.#ifdef SQLIT
2ab70 45 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d  E_ENABLE_8_3_NAM
2ab80 45 53 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46  ES.void sqlite3F
2ab90 69 6c 65 53 75 66 66 69 78 33 28 63 6f 6e 73 74  ileSuffix3(const
2aba0 20 63 68 61 72 2a 2c 20 63 68 61 72 2a 29 3b 0a   char*, char*);.
2abb0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
2abc0 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69 78  qlite3FileSuffix
2abd0 33 28 58 2c 59 29 0a 23 65 6e 64 69 66 0a 75 38  3(X,Y).#endif.u8
2abe0 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65   sqlite3GetBoole
2abf0 61 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  an(const char *z
2ac00 2c 75 38 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f 69  ,u8);..const voi
2ac10 64 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 54  d *sqlite3ValueT
2ac20 65 78 74 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  ext(sqlite3_valu
2ac30 65 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c  e*, u8);.int sql
2ac40 69 74 65 33 56 61 6c 75 65 42 79 74 65 73 28 73  ite3ValueBytes(s
2ac50 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75  qlite3_value*, u
2ac60 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  8);.void sqlite3
2ac70 56 61 6c 75 65 53 65 74 53 74 72 28 73 71 6c 69  ValueSetStr(sqli
2ac80 74 65 33 5f 76 61 6c 75 65 2a 2c 20 69 6e 74 2c  te3_value*, int,
2ac90 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2c 75 38   const void *,u8
2aca0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
2acb0 20 20 20 20 20 20 20 20 20 20 76 6f 69 64 28 2a            void(*
2acc0 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20  )(void*));.void 
2acd0 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 4e  sqlite3ValueSetN
2ace0 75 6c 6c 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  ull(sqlite3_valu
2acf0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
2ad00 33 56 61 6c 75 65 46 72 65 65 28 73 71 6c 69 74  3ValueFree(sqlit
2ad10 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 73 71 6c 69  e3_value*);.sqli
2ad20 74 65 33 5f 76 61 6c 75 65 20 2a 73 71 6c 69 74  te3_value *sqlit
2ad30 65 33 56 61 6c 75 65 4e 65 77 28 73 71 6c 69 74  e3ValueNew(sqlit
2ad40 65 33 20 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53  e3 *);.#ifndef S
2ad50 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
2ad60 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 55 74  .char *sqlite3Ut
2ad70 66 31 36 74 6f 38 28 73 71 6c 69 74 65 33 20 2a  f16to8(sqlite3 *
2ad80 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69  , const void*, i
2ad90 6e 74 2c 20 75 38 29 3b 0a 23 65 6e 64 69 66 0a  nt, u8);.#endif.
2ada0 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65  int sqlite3Value
2adb0 46 72 6f 6d 45 78 70 72 28 73 71 6c 69 74 65 33  FromExpr(sqlite3
2adc0 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75 38 2c 20   *, Expr *, u8, 
2add0 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  u8, sqlite3_valu
2ade0 65 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  e **);.void sqli
2adf0 74 65 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66  te3ValueApplyAff
2ae00 69 6e 69 74 79 28 73 71 6c 69 74 65 33 5f 76 61  inity(sqlite3_va
2ae10 6c 75 65 20 2a 2c 20 75 38 2c 20 75 38 29 3b 0a  lue *, u8, u8);.
2ae20 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 41  #ifndef SQLITE_A
2ae30 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 65 78 74 65  MALGAMATION.exte
2ae40 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  rn const unsigne
2ae50 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 4f 70  d char sqlite3Op
2ae60 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d 3b 0a  codeProperty[];.
2ae70 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 63 68 61  extern const cha
2ae80 72 20 73 71 6c 69 74 65 33 53 74 72 42 49 4e 41  r sqlite3StrBINA
2ae90 52 59 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e  RY[];.extern con
2aea0 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
2aeb0 20 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c   sqlite3UpperToL
2aec0 6f 77 65 72 5b 5d 3b 0a 65 78 74 65 72 6e 20 63  ower[];.extern c
2aed0 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
2aee0 61 72 20 73 71 6c 69 74 65 33 43 74 79 70 65 4d  ar sqlite3CtypeM
2aef0 61 70 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e  ap[];.extern con
2af00 73 74 20 54 6f 6b 65 6e 20 73 71 6c 69 74 65 33  st Token sqlite3
2af10 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78 74  IntTokens[];.ext
2af20 65 72 6e 20 53 51 4c 49 54 45 5f 57 53 44 20 73  ern SQLITE_WSD s
2af30 74 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e  truct Sqlite3Con
2af40 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69  fig sqlite3Confi
2af50 67 3b 0a 65 78 74 65 72 6e 20 46 75 6e 63 44 65  g;.extern FuncDe
2af60 66 48 61 73 68 20 73 71 6c 69 74 65 33 42 75 69  fHash sqlite3Bui
2af70 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 3b 0a 23  ltinFunctions;.#
2af80 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2af90 49 54 5f 57 53 44 0a 65 78 74 65 72 6e 20 69 6e  IT_WSD.extern in
2afa0 74 20 73 71 6c 69 74 65 33 50 65 6e 64 69 6e 67  t sqlite3Pending
2afb0 42 79 74 65 3b 0a 23 65 6e 64 69 66 0a 23 65 6e  Byte;.#endif.#en
2afc0 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
2afd0 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 73 71  RootPageMoved(sq
2afe0 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74  lite3*, int, int
2aff0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2b000 69 74 65 33 52 65 69 6e 64 65 78 28 50 61 72 73  ite3Reindex(Pars
2b010 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  e*, Token*, Toke
2b020 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
2b030 33 41 6c 74 65 72 46 75 6e 63 74 69 6f 6e 73 28  3AlterFunctions(
2b040 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69  void);.void sqli
2b050 74 65 33 41 6c 74 65 72 52 65 6e 61 6d 65 54 61  te3AlterRenameTa
2b060 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ble(Parse*, SrcL
2b070 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  ist*, Token*);.i
2b080 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 6f 6b  nt sqlite3GetTok
2b090 65 6e 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  en(const unsigne
2b0a0 64 20 63 68 61 72 20 2a 2c 20 69 6e 74 20 2a 29  d char *, int *)
2b0b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4e 65  ;.void sqlite3Ne
2b0c0 73 74 65 64 50 61 72 73 65 28 50 61 72 73 65 2a  stedParse(Parse*
2b0d0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  , const char*, .
2b0e0 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..);.void sqlite
2b0f0 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53  3ExpirePreparedS
2b100 74 61 74 65 6d 65 6e 74 73 28 73 71 6c 69 74 65  tatements(sqlite
2b110 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  3*);.int sqlite3
2b120 43 6f 64 65 53 75 62 73 65 6c 65 63 74 28 50 61  CodeSubselect(Pa
2b130 72 73 65 2a 2c 20 45 78 70 72 20 2a 2c 20 69 6e  rse*, Expr *, in
2b140 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
2b150 6c 69 74 65 33 53 65 6c 65 63 74 50 72 65 70 28  lite3SelectPrep(
2b160 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c  Parse*, Select*,
2b170 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a   NameContext*);.
2b180 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65  void sqlite3Sele
2b190 63 74 57 72 6f 6e 67 4e 75 6d 54 65 72 6d 73 45  ctWrongNumTermsE
2b1a0 72 72 6f 72 28 50 61 72 73 65 20 2a 70 50 61 72  rror(Parse *pPar
2b1b0 73 65 2c 20 53 65 6c 65 63 74 20 2a 70 29 3b 0a  se, Select *p);.
2b1c0 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 74 63 68  int sqlite3Match
2b1d0 53 70 61 6e 4e 61 6d 65 28 63 6f 6e 73 74 20 63  SpanName(const c
2b1e0 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
2b1f0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
2b200 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e  const char*);.in
2b210 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  t sqlite3Resolve
2b220 45 78 70 72 4e 61 6d 65 73 28 4e 61 6d 65 43 6f  ExprNames(NameCo
2b230 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a  ntext*, Expr*);.
2b240 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  int sqlite3Resol
2b250 76 65 45 78 70 72 4c 69 73 74 4e 61 6d 65 73 28  veExprListNames(
2b260 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78  NameContext*, Ex
2b270 70 72 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  prList*);.void s
2b280 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c  qlite3ResolveSel
2b290 65 63 74 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c  ectNames(Parse*,
2b2a0 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f   Select*, NameCo
2b2b0 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71  ntext*);.void sq
2b2c0 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 66  lite3ResolveSelf
2b2d0 52 65 66 65 72 65 6e 63 65 28 50 61 72 73 65 2a  Reference(Parse*
2b2e0 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 45 78 70 72  ,Table*,int,Expr
2b2f0 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  *,ExprList*);.in
2b300 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  t sqlite3Resolve
2b310 4f 72 64 65 72 47 72 6f 75 70 42 79 28 50 61 72  OrderGroupBy(Par
2b320 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78  se*, Select*, Ex
2b330 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63  prList*, const c
2b340 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
2b350 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74  te3ColumnDefault
2b360 28 56 64 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a  (Vdbe *, Table *
2b370 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
2b380 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46 69  d sqlite3AlterFi
2b390 6e 69 73 68 41 64 64 43 6f 6c 75 6d 6e 28 50 61  nishAddColumn(Pa
2b3a0 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b  rse *, Token *);
2b3b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74  .void sqlite3Alt
2b3c0 65 72 42 65 67 69 6e 41 64 64 43 6f 6c 75 6d 6e  erBeginAddColumn
2b3d0 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73  (Parse *, SrcLis
2b3e0 74 20 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  t *);.CollSeq *s
2b3f0 71 6c 69 74 65 33 47 65 74 43 6f 6c 6c 53 65 71  qlite3GetCollSeq
2b400 28 50 61 72 73 65 2a 2c 20 75 38 2c 20 43 6f 6c  (Parse*, u8, Col
2b410 6c 53 65 71 20 2a 2c 20 63 6f 6e 73 74 20 63 68  lSeq *, const ch
2b420 61 72 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74  ar*);.char sqlit
2b430 65 33 41 66 66 69 6e 69 74 79 54 79 70 65 28 63  e3AffinityType(c
2b440 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75 38 2a 29  onst char*, u8*)
2b450 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e  ;.void sqlite3An
2b460 61 6c 79 7a 65 28 50 61 72 73 65 2a 2c 20 54 6f  alyze(Parse*, To
2b470 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  ken*, Token*);.i
2b480 6e 74 20 73 71 6c 69 74 65 33 49 6e 76 6f 6b 65  nt sqlite3Invoke
2b490 42 75 73 79 48 61 6e 64 6c 65 72 28 42 75 73 79  BusyHandler(Busy
2b4a0 48 61 6e 64 6c 65 72 2a 29 3b 0a 69 6e 74 20 73  Handler*);.int s
2b4b0 71 6c 69 74 65 33 46 69 6e 64 44 62 28 73 71 6c  qlite3FindDb(sql
2b4c0 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  ite3*, Token*);.
2b4d0 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44  int sqlite3FindD
2b4e0 62 4e 61 6d 65 28 73 71 6c 69 74 65 33 20 2a 2c  bName(sqlite3 *,
2b4f0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a   const char *);.
2b500 69 6e 74 20 73 71 6c 69 74 65 33 41 6e 61 6c 79  int sqlite3Analy
2b510 73 69 73 4c 6f 61 64 28 73 71 6c 69 74 65 33 2a  sisLoad(sqlite3*
2b520 2c 69 6e 74 20 69 44 42 29 3b 0a 76 6f 69 64 20  ,int iDB);.void 
2b530 73 71 6c 69 74 65 33 44 65 6c 65 74 65 49 6e 64  sqlite3DeleteInd
2b540 65 78 53 61 6d 70 6c 65 73 28 73 71 6c 69 74 65  exSamples(sqlite
2b550 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64  3*,Index*);.void
2b560 20 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74 52   sqlite3DefaultR
2b570 6f 77 45 73 74 28 49 6e 64 65 78 2a 29 3b 0a 76  owEst(Index*);.v
2b580 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73  oid sqlite3Regis
2b590 74 65 72 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 73  terLikeFunctions
2b5a0 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b  (sqlite3*, int);
2b5b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4c 69  .int sqlite3IsLi
2b5c0 6b 65 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74  keFunction(sqlit
2b5d0 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a 2c 63  e3*,Expr*,int*,c
2b5e0 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
2b5f0 74 65 33 53 63 68 65 6d 61 43 6c 65 61 72 28 76  te3SchemaClear(v
2b600 6f 69 64 20 2a 29 3b 0a 53 63 68 65 6d 61 20 2a  oid *);.Schema *
2b610 73 71 6c 69 74 65 33 53 63 68 65 6d 61 47 65 74  sqlite3SchemaGet
2b620 28 73 71 6c 69 74 65 33 20 2a 2c 20 42 74 72 65  (sqlite3 *, Btre
2b630 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  e *);.int sqlite
2b640 33 53 63 68 65 6d 61 54 6f 49 6e 64 65 78 28 73  3SchemaToIndex(s
2b650 71 6c 69 74 65 33 20 2a 64 62 2c 20 53 63 68 65  qlite3 *db, Sche
2b660 6d 61 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a  ma *);.KeyInfo *
2b670 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 41 6c  sqlite3KeyInfoAl
2b680 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  loc(sqlite3*,int
2b690 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
2b6a0 74 65 33 4b 65 79 49 6e 66 6f 55 6e 72 65 66 28  te3KeyInfoUnref(
2b6b0 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e  KeyInfo*);.KeyIn
2b6c0 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e  fo *sqlite3KeyIn
2b6d0 66 6f 52 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b  foRef(KeyInfo*);
2b6e0 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65  .KeyInfo *sqlite
2b6f0 33 4b 65 79 49 6e 66 6f 4f 66 49 6e 64 65 78 28  3KeyInfoOfIndex(
2b700 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 29 3b  Parse*, Index*);
2b710 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
2b720 45 42 55 47 0a 69 6e 74 20 73 71 6c 69 74 65 33  EBUG.int sqlite3
2b730 4b 65 79 49 6e 66 6f 49 73 57 72 69 74 65 61 62  KeyInfoIsWriteab
2b740 6c 65 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 23 65  le(KeyInfo*);.#e
2b750 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33  ndif.int sqlite3
2b760 43 72 65 61 74 65 46 75 6e 63 28 73 71 6c 69 74  CreateFunc(sqlit
2b770 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  e3 *, const char
2b780 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 76 6f   *, int, int, vo
2b790 69 64 20 2a 2c 0a 20 20 76 6f 69 64 20 28 2a 29  id *,.  void (*)
2b7a0 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
2b7b0 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
2b7c0 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20  lue **),.  void 
2b7d0 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  (*)(sqlite3_cont
2b7e0 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
2b7f0 5f 76 61 6c 75 65 20 2a 2a 29 2c 20 76 6f 69 64  _value **), void
2b800 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e   (*)(sqlite3_con
2b810 74 65 78 74 2a 29 2c 0a 20 20 46 75 6e 63 44 65  text*),.  FuncDe
2b820 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72  structor *pDestr
2b830 75 63 74 6f 72 0a 29 3b 0a 76 6f 69 64 20 73 71  uctor.);.void sq
2b840 6c 69 74 65 33 4f 6f 6d 46 61 75 6c 74 28 73 71  lite3OomFault(sq
2b850 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
2b860 6c 69 74 65 33 4f 6f 6d 43 6c 65 61 72 28 73 71  lite3OomClear(sq
2b870 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c  lite3*);.int sql
2b880 69 74 65 33 41 70 69 45 78 69 74 28 73 71 6c 69  ite3ApiExit(sqli
2b890 74 65 33 20 2a 64 62 2c 20 69 6e 74 29 3b 0a 69  te3 *db, int);.i
2b8a0 6e 74 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 65  nt sqlite3OpenTe
2b8b0 6d 70 44 61 74 61 62 61 73 65 28 50 61 72 73 65  mpDatabase(Parse
2b8c0 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74   *);..void sqlit
2b8d0 65 33 53 74 72 41 63 63 75 6d 49 6e 69 74 28 53  e3StrAccumInit(S
2b8e0 74 72 41 63 63 75 6d 2a 2c 20 73 71 6c 69 74 65  trAccum*, sqlite
2b8f0 33 2a 2c 20 63 68 61 72 2a 2c 20 69 6e 74 2c 20  3*, char*, int, 
2b900 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2b910 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64  e3StrAccumAppend
2b920 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74  (StrAccum*,const
2b930 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69   char*,int);.voi
2b940 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75  d sqlite3StrAccu
2b950 6d 41 70 70 65 6e 64 41 6c 6c 28 53 74 72 41 63  mAppendAll(StrAc
2b960 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  cum*,const char*
2b970 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
2b980 70 70 65 6e 64 43 68 61 72 28 53 74 72 41 63 63  ppendChar(StrAcc
2b990 75 6d 2a 2c 69 6e 74 2c 63 68 61 72 29 3b 0a 63  um*,int,char);.c
2b9a0 68 61 72 20 2a 73 71 6c 69 74 65 33 53 74 72 41  har *sqlite3StrA
2b9b0 63 63 75 6d 46 69 6e 69 73 68 28 53 74 72 41 63  ccumFinish(StrAc
2b9c0 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  cum*);.void sqli
2b9d0 74 65 33 53 74 72 41 63 63 75 6d 52 65 73 65 74  te3StrAccumReset
2b9e0 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69  (StrAccum*);.voi
2b9f0 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44  d sqlite3SelectD
2ba00 65 73 74 49 6e 69 74 28 53 65 6c 65 63 74 44 65  estInit(SelectDe
2ba10 73 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45 78  st*,int,int);.Ex
2ba20 70 72 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74  pr *sqlite3Creat
2ba30 65 43 6f 6c 75 6d 6e 45 78 70 72 28 73 71 6c 69  eColumnExpr(sqli
2ba40 74 65 33 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a  te3 *, SrcList *
2ba50 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f  , int, int);..vo
2ba60 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70  id sqlite3Backup
2ba70 52 65 73 74 61 72 74 28 73 71 6c 69 74 65 33 5f  Restart(sqlite3_
2ba80 62 61 63 6b 75 70 20 2a 29 3b 0a 76 6f 69 64 20  backup *);.void 
2ba90 73 71 6c 69 74 65 33 42 61 63 6b 75 70 55 70 64  sqlite3BackupUpd
2baa0 61 74 65 28 73 71 6c 69 74 65 33 5f 62 61 63 6b  ate(sqlite3_back
2bab0 75 70 20 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73  up *, Pgno, cons
2bac0 74 20 75 38 20 2a 29 3b 0a 0a 23 69 66 6e 64 65  t u8 *);..#ifnde
2bad0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55  f SQLITE_OMIT_SU
2bae0 42 51 55 45 52 59 0a 69 6e 74 20 73 71 6c 69 74  BQUERY.int sqlit
2baf0 65 33 45 78 70 72 43 68 65 63 6b 49 4e 28 50 61  e3ExprCheckIN(Pa
2bb00 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 23 65  rse*, Expr*);.#e
2bb10 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
2bb20 69 74 65 33 45 78 70 72 43 68 65 63 6b 49 4e 28  ite3ExprCheckIN(
2bb30 78 2c 79 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23  x,y) SQLITE_OK.#
2bb40 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
2bb50 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
2bb60 33 5f 4f 52 5f 53 54 41 54 34 0a 76 6f 69 64 20  3_OR_STAT4.void 
2bb70 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 46 75  sqlite3AnalyzeFu
2bb80 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69  nctions(void);.i
2bb90 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 50  nt sqlite3Stat4P
2bba0 72 6f 62 65 53 65 74 56 61 6c 75 65 28 0a 20 20  robeSetValue(.  
2bbb0 20 20 50 61 72 73 65 2a 2c 49 6e 64 65 78 2a 2c    Parse*,Index*,
2bbc0 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 2a  UnpackedRecord**
2bbd0 2c 45 78 70 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69  ,Expr*,int,int,i
2bbe0 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
2bbf0 33 53 74 61 74 34 56 61 6c 75 65 46 72 6f 6d 45  3Stat4ValueFromE
2bc00 78 70 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72  xpr(Parse*, Expr
2bc10 2a 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76  *, u8, sqlite3_v
2bc20 61 6c 75 65 2a 2a 29 3b 0a 76 6f 69 64 20 73 71  alue**);.void sq
2bc30 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62 65 46  lite3Stat4ProbeF
2bc40 72 65 65 28 55 6e 70 61 63 6b 65 64 52 65 63 6f  ree(UnpackedReco
2bc50 72 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  rd*);.int sqlite
2bc60 33 53 74 61 74 34 43 6f 6c 75 6d 6e 28 73 71 6c  3Stat4Column(sql
2bc70 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 76 6f 69  ite3*, const voi
2bc80 64 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 73 71  d*, int, int, sq
2bc90 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a  lite3_value**);.
2bca0 63 68 61 72 20 73 71 6c 69 74 65 33 49 6e 64 65  char sqlite3Inde
2bcb0 78 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28  xColumnAffinity(
2bcc0 73 71 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a  sqlite3*, Index*
2bcd0 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a  , int);.#endif..
2bce0 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66  /*.** The interf
2bcf0 61 63 65 20 74 6f 20 74 68 65 20 4c 45 4d 4f 4e  ace to the LEMON
2bd00 2d 67 65 6e 65 72 61 74 65 64 20 70 61 72 73 65  -generated parse
2bd10 72 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  r.*/.#ifndef SQL
2bd20 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e  ITE_AMALGAMATION
2bd30 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  .  void *sqlite3
2bd40 50 61 72 73 65 72 41 6c 6c 6f 63 28 76 6f 69 64  ParserAlloc(void
2bd50 2a 28 2a 29 28 75 36 34 29 29 3b 0a 20 20 76 6f  *(*)(u64));.  vo
2bd60 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  id sqlite3Parser
2bd70 46 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69 64  Free(void*, void
2bd80 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 23 65 6e  (*)(void*));.#en
2bd90 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
2bda0 50 61 72 73 65 72 28 76 6f 69 64 2a 2c 20 69 6e  Parser(void*, in
2bdb0 74 2c 20 54 6f 6b 65 6e 2c 20 50 61 72 73 65 2a  t, Token, Parse*
2bdc0 29 3b 0a 23 69 66 64 65 66 20 59 59 54 52 41 43  );.#ifdef YYTRAC
2bdd0 4b 4d 41 58 53 54 41 43 4b 44 45 50 54 48 0a 20  KMAXSTACKDEPTH. 
2bde0 20 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73   int sqlite3Pars
2bdf0 65 72 53 74 61 63 6b 50 65 61 6b 28 76 6f 69 64  erStackPeak(void
2be00 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64  *);.#endif..void
2be10 20 73 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64   sqlite3AutoLoad
2be20 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74  Extensions(sqlit
2be30 65 33 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  e3*);.#ifndef SQ
2be40 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45  LITE_OMIT_LOAD_E
2be50 58 54 45 4e 53 49 4f 4e 0a 20 20 76 6f 69 64 20  XTENSION.  void 
2be60 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65  sqlite3CloseExte
2be70 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29  nsions(sqlite3*)
2be80 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
2be90 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74   sqlite3CloseExt
2bea0 65 6e 73 69 6f 6e 73 28 58 29 0a 23 65 6e 64 69  ensions(X).#endi
2beb0 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
2bec0 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41  E_OMIT_SHARED_CA
2bed0 43 48 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  CHE.  void sqlit
2bee0 65 33 54 61 62 6c 65 4c 6f 63 6b 28 50 61 72 73  e3TableLock(Pars
2bef0 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75  e *, int, int, u
2bf00 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  8, const char *)
2bf10 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
2bf20 65 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f  e sqlite3TableLo
2bf30 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65  ck(v,w,x,y,z).#e
2bf40 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
2bf50 49 54 45 5f 54 45 53 54 0a 20 20 69 6e 74 20 73  ITE_TEST.  int s
2bf60 71 6c 69 74 65 33 55 74 66 38 54 6f 38 28 75 6e  qlite3Utf8To8(un
2bf70 73 69 67 6e 65 64 20 63 68 61 72 2a 29 3b 0a 23  signed char*);.#
2bf80 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
2bf90 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2bfa0 4c 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65  LTABLE.#  define
2bfb0 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61   sqlite3VtabClea
2bfc0 72 28 59 29 0a 23 20 20 64 65 66 69 6e 65 20 73  r(Y).#  define s
2bfd0 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28 58  qlite3VtabSync(X
2bfe0 2c 59 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20  ,Y) SQLITE_OK.# 
2bff0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2c000 74 61 62 52 6f 6c 6c 62 61 63 6b 28 58 29 0a 23  tabRollback(X).#
2c010 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2c020 56 74 61 62 43 6f 6d 6d 69 74 28 58 29 0a 23 20  VtabCommit(X).# 
2c030 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2c040 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20 30 0a  tabInSync(db) 0.
2c050 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
2c060 33 56 74 61 62 4c 6f 63 6b 28 58 29 0a 23 20 20  3VtabLock(X).#  
2c070 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
2c080 61 62 55 6e 6c 6f 63 6b 28 58 29 0a 23 20 20 64  abUnlock(X).#  d
2c090 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
2c0a0 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 58 29 0a 23  bUnlockList(X).#
2c0b0 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2c0c0 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 58 2c  VtabSavepoint(X,
2c0d0 20 59 2c 20 5a 29 20 53 51 4c 49 54 45 5f 4f 4b   Y, Z) SQLITE_OK
2c0e0 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
2c0f0 65 33 47 65 74 56 54 61 62 6c 65 28 58 2c 59 29  e3GetVTable(X,Y)
2c100 20 20 28 28 56 54 61 62 6c 65 2a 29 30 29 0a 23    ((VTable*)0).#
2c110 65 6c 73 65 0a 20 20 20 76 6f 69 64 20 73 71 6c  else.   void sql
2c120 69 74 65 33 56 74 61 62 43 6c 65 61 72 28 73 71  ite3VtabClear(sq
2c130 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65  lite3 *db, Table
2c140 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  *);.   void sqli
2c150 74 65 33 56 74 61 62 44 69 73 63 6f 6e 6e 65 63  te3VtabDisconnec
2c160 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54  t(sqlite3 *db, T
2c170 61 62 6c 65 20 2a 70 29 3b 0a 20 20 20 69 6e 74  able *p);.   int
2c180 20 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63   sqlite3VtabSync
2c190 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 56 64  (sqlite3 *db, Vd
2c1a0 62 65 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c  be*);.   int sql
2c1b0 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b  ite3VtabRollback
2c1c0 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20  (sqlite3 *db);. 
2c1d0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61    int sqlite3Vta
2c1e0 62 43 6f 6d 6d 69 74 28 73 71 6c 69 74 65 33 20  bCommit(sqlite3 
2c1f0 2a 64 62 29 3b 0a 20 20 20 76 6f 69 64 20 73 71  *db);.   void sq
2c200 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 56 54  lite3VtabLock(VT
2c210 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64  able *);.   void
2c220 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
2c230 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20  ck(VTable *);.  
2c240 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
2c250 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 73 71 6c 69  bUnlockList(sqli
2c260 74 65 33 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71  te3*);.   int sq
2c270 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69  lite3VtabSavepoi
2c280 6e 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e  nt(sqlite3 *, in
2c290 74 2c 20 69 6e 74 29 3b 0a 20 20 20 76 6f 69 64  t, int);.   void
2c2a0 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f   sqlite3VtabImpo
2c2b0 72 74 45 72 72 6d 73 67 28 56 64 62 65 2a 2c 20  rtErrmsg(Vdbe*, 
2c2c0 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 29 3b 0a  sqlite3_vtab*);.
2c2d0 20 20 20 56 54 61 62 6c 65 20 2a 73 71 6c 69 74     VTable *sqlit
2c2e0 65 33 47 65 74 56 54 61 62 6c 65 28 73 71 6c 69  e3GetVTable(sqli
2c2f0 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20  te3*, Table*);. 
2c300 20 20 4d 6f 64 75 6c 65 20 2a 73 71 6c 69 74 65    Module *sqlite
2c310 33 56 74 61 62 43 72 65 61 74 65 4d 6f 64 75 6c  3VtabCreateModul
2c320 65 28 0a 20 20 20 20 20 73 71 6c 69 74 65 33 2a  e(.     sqlite3*
2c330 2c 0a 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61  ,.     const cha
2c340 72 2a 2c 0a 20 20 20 20 20 63 6f 6e 73 74 20 73  r*,.     const s
2c350 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 2a 2c 0a  qlite3_module*,.
2c360 20 20 20 20 20 76 6f 69 64 2a 2c 0a 20 20 20 20       void*,.    
2c370 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 0a   void(*)(void*).
2c380 20 20 20 29 3b 0a 23 20 20 64 65 66 69 6e 65 20     );.#  define 
2c390 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e  sqlite3VtabInSyn
2c3a0 63 28 64 62 29 20 28 28 64 62 29 2d 3e 6e 56 54  c(db) ((db)->nVT
2c3b0 72 61 6e 73 3e 30 20 26 26 20 28 64 62 29 2d 3e  rans>0 && (db)->
2c3c0 61 56 54 72 61 6e 73 3d 3d 30 29 0a 23 65 6e 64  aVTrans==0).#end
2c3d0 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  if.int sqlite3Vt
2c3e0 61 62 45 70 6f 6e 79 6d 6f 75 73 54 61 62 6c 65  abEponymousTable
2c3f0 49 6e 69 74 28 50 61 72 73 65 2a 2c 4d 6f 64 75  Init(Parse*,Modu
2c400 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  le*);.void sqlit
2c410 65 33 56 74 61 62 45 70 6f 6e 79 6d 6f 75 73 54  e3VtabEponymousT
2c420 61 62 6c 65 43 6c 65 61 72 28 73 71 6c 69 74 65  ableClear(sqlite
2c430 33 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69  3*,Module*);.voi
2c440 64 20 73 71 6c 69 74 65 33 56 74 61 62 4d 61 6b  d sqlite3VtabMak
2c450 65 57 72 69 74 61 62 6c 65 28 50 61 72 73 65 2a  eWritable(Parse*
2c460 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73  ,Table*);.void s
2c470 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 50  qlite3VtabBeginP
2c480 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  arse(Parse*, Tok
2c490 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  en*, Token*, Tok
2c4a0 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  en*, int);.void 
2c4b0 73 71 6c 69 74 65 33 56 74 61 62 46 69 6e 69 73  sqlite3VtabFinis
2c4c0 68 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54  hParse(Parse*, T
2c4d0 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
2c4e0 69 74 65 33 56 74 61 62 41 72 67 49 6e 69 74 28  ite3VtabArgInit(
2c4f0 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
2c500 6c 69 74 65 33 56 74 61 62 41 72 67 45 78 74 65  lite3VtabArgExte
2c510 6e 64 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  nd(Parse*, Token
2c520 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
2c530 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28 73 71  tabCallCreate(sq
2c540 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e  lite3*, int, con
2c550 73 74 20 63 68 61 72 20 2a 2c 20 63 68 61 72 20  st char *, char 
2c560 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  **);.int sqlite3
2c570 56 74 61 62 43 61 6c 6c 43 6f 6e 6e 65 63 74 28  VtabCallConnect(
2c580 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b  Parse*, Table*);
2c590 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62  .int sqlite3Vtab
2c5a0 43 61 6c 6c 44 65 73 74 72 6f 79 28 73 71 6c 69  CallDestroy(sqli
2c5b0 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  te3*, int, const
2c5c0 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71   char *);.int sq
2c5d0 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 28 73  lite3VtabBegin(s
2c5e0 71 6c 69 74 65 33 20 2a 2c 20 56 54 61 62 6c 65  qlite3 *, VTable
2c5f0 20 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71   *);.FuncDef *sq
2c600 6c 69 74 65 33 56 74 61 62 4f 76 65 72 6c 6f 61  lite3VtabOverloa
2c610 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65  dFunction(sqlite
2c620 33 20 2a 2c 46 75 6e 63 44 65 66 2a 2c 20 69 6e  3 *,FuncDef*, in
2c630 74 20 6e 41 72 67 2c 20 45 78 70 72 2a 29 3b 0a  t nArg, Expr*);.
2c640 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 76 61  void sqlite3Inva
2c650 6c 69 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69  lidFunction(sqli
2c660 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
2c670 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a  ,sqlite3_value**
2c680 29 3b 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  );.sqlite3_int64
2c690 20 73 71 6c 69 74 65 33 53 74 6d 74 43 75 72 72   sqlite3StmtCurr
2c6a0 65 6e 74 54 69 6d 65 28 73 71 6c 69 74 65 33 5f  entTime(sqlite3_
2c6b0 63 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73  context*);.int s
2c6c0 71 6c 69 74 65 33 56 64 62 65 50 61 72 61 6d 65  qlite3VdbeParame
2c6d0 74 65 72 49 6e 64 65 78 28 56 64 62 65 2a 2c 20  terIndex(Vdbe*, 
2c6e0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74  const char*, int
2c6f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 72  );.int sqlite3Tr
2c700 61 6e 73 66 65 72 42 69 6e 64 69 6e 67 73 28 73  ansferBindings(s
2c710 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2c 20 73  qlite3_stmt *, s
2c720 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 29 3b 0a  qlite3_stmt *);.
2c730 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73  void sqlite3Pars
2c740 65 72 52 65 73 65 74 28 50 61 72 73 65 2a 29 3b  erReset(Parse*);
2c750 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 70 72  .int sqlite3Repr
2c760 65 70 61 72 65 28 56 64 62 65 2a 29 3b 0a 76 6f  epare(Vdbe*);.vo
2c770 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
2c780 73 74 43 68 65 63 6b 4c 65 6e 67 74 68 28 50 61  stCheckLength(Pa
2c790 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
2c7a0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 43   const char*);.C
2c7b0 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 42  ollSeq *sqlite3B
2c7c0 69 6e 61 72 79 43 6f 6d 70 61 72 65 43 6f 6c 6c  inaryCompareColl
2c7d0 53 65 71 28 50 61 72 73 65 20 2a 2c 20 45 78 70  Seq(Parse *, Exp
2c7e0 72 20 2a 2c 20 45 78 70 72 20 2a 29 3b 0a 69 6e  r *, Expr *);.in
2c7f0 74 20 73 71 6c 69 74 65 33 54 65 6d 70 49 6e 4d  t sqlite3TempInM
2c800 65 6d 6f 72 79 28 63 6f 6e 73 74 20 73 71 6c 69  emory(const sqli
2c810 74 65 33 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61  te3*);.const cha
2c820 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  r *sqlite3Journa
2c830 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 29 3b 0a  lModename(int);.
2c840 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2c850 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 73 71  MIT_WAL.  int sq
2c860 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28  lite3Checkpoint(
2c870 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69  sqlite3*, int, i
2c880 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b  nt, int*, int*);
2c890 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 57 61  .  int sqlite3Wa
2c8a0 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 28 76 6f 69  lDefaultHook(voi
2c8b0 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  d*,sqlite3*,cons
2c8c0 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 23 65  t char*,int);.#e
2c8d0 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
2c8e0 49 54 45 5f 4f 4d 49 54 5f 43 54 45 0a 20 20 57  ITE_OMIT_CTE.  W
2c8f0 69 74 68 20 2a 73 71 6c 69 74 65 33 57 69 74 68  ith *sqlite3With
2c900 41 64 64 28 50 61 72 73 65 2a 2c 57 69 74 68 2a  Add(Parse*,With*
2c910 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74  ,Token*,ExprList
2c920 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f  *,Select*);.  vo
2c930 69 64 20 73 71 6c 69 74 65 33 57 69 74 68 44 65  id sqlite3WithDe
2c940 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 57 69  lete(sqlite3*,Wi
2c950 74 68 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  th*);.  void sql
2c960 69 74 65 33 57 69 74 68 50 75 73 68 28 50 61 72  ite3WithPush(Par
2c970 73 65 2a 2c 20 57 69 74 68 2a 2c 20 75 38 29 3b  se*, With*, u8);
2c980 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 73  .#else.#define s
2c990 71 6c 69 74 65 33 57 69 74 68 50 75 73 68 28 78  qlite3WithPush(x
2c9a0 2c 79 2c 7a 29 0a 23 64 65 66 69 6e 65 20 73 71  ,y,z).#define sq
2c9b0 6c 69 74 65 33 57 69 74 68 44 65 6c 65 74 65 28  lite3WithDelete(
2c9c0 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  x,y).#endif../* 
2c9d0 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72  Declarations for
2c9e0 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20 66 6b   functions in fk
2c9f0 65 79 2e 63 2e 20 41 6c 6c 20 6f 66 20 74 68 65  ey.c. All of the
2ca00 73 65 20 61 72 65 20 72 65 70 6c 61 63 65 64 20  se are replaced 
2ca10 62 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72  by.** no-op macr
2ca20 6f 73 20 69 66 20 4f 4d 49 54 5f 46 4f 52 45 49  os if OMIT_FOREI
2ca30 47 4e 5f 4b 45 59 20 69 73 20 64 65 66 69 6e 65  GN_KEY is define
2ca40 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  d. In this case 
2ca50 6e 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65  no foreign.** ke
2ca60 79 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20  y functionality 
2ca70 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 20 49 66  is available. If
2ca80 20 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 69 73   OMIT_TRIGGER is
2ca90 20 64 65 66 69 6e 65 64 20 62 75 74 0a 2a 2a 20   defined but.** 
2caa0 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
2cab0 20 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f   is not, only so
2cac0 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  me of the functi
2cad0 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f 70 65 64 2e  ons are no-oped.
2cae0 20 49 6e 0a 2a 2a 20 74 68 69 73 20 63 61 73 65   In.** this case
2caf0 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 72   foreign keys ar
2cb00 65 20 70 61 72 73 65 64 2c 20 62 75 74 20 6e 6f  e parsed, but no
2cb10 20 6f 74 68 65 72 20 66 75 6e 63 74 69 6f 6e 61   other functiona
2cb20 6c 69 74 79 20 69 73 0a 2a 2a 20 70 72 6f 76 69  lity is.** provi
2cb30 64 65 64 20 28 65 6e 66 6f 72 63 65 6d 65 6e 74  ded (enforcement
2cb40 20 6f 66 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e   of FK constrain
2cb50 74 73 20 72 65 71 75 69 72 65 73 20 74 68 65 20  ts requires the 
2cb60 74 72 69 67 67 65 72 73 20 73 75 62 2d 73 79 73  triggers sub-sys
2cb70 74 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  tem)..*/.#if !de
2cb80 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
2cb90 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26  T_FOREIGN_KEY) &
2cba0 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
2cbb0 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a  E_OMIT_TRIGGER).
2cbc0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b    void sqlite3Fk
2cbd0 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 20 54 61  Check(Parse*, Ta
2cbe0 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
2cbf0 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f  int*, int);.  vo
2cc00 69 64 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70  id sqlite3FkDrop
2cc10 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72  Table(Parse*, Sr
2cc20 63 4c 69 73 74 20 2a 2c 20 54 61 62 6c 65 2a 29  cList *, Table*)
2cc30 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2cc40 46 6b 41 63 74 69 6f 6e 73 28 50 61 72 73 65 2a  FkActions(Parse*
2cc50 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 4c 69  , Table*, ExprLi
2cc60 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20  st*, int, int*, 
2cc70 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  int);.  int sqli
2cc80 74 65 33 46 6b 52 65 71 75 69 72 65 64 28 50 61  te3FkRequired(Pa
2cc90 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
2cca0 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 75 33 32 20  t*, int);.  u32 
2ccb0 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b  sqlite3FkOldmask
2ccc0 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29  (Parse*, Table*)
2ccd0 3b 0a 20 20 46 4b 65 79 20 2a 73 71 6c 69 74 65  ;.  FKey *sqlite
2cce0 33 46 6b 52 65 66 65 72 65 6e 63 65 73 28 54 61  3FkReferences(Ta
2ccf0 62 6c 65 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20  ble *);.#else.  
2cd00 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
2cd10 6b 41 63 74 69 6f 6e 73 28 61 2c 62 2c 63 2c 64  kActions(a,b,c,d
2cd20 2c 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20  ,e,f).  #define 
2cd30 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 61  sqlite3FkCheck(a
2cd40 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64  ,b,c,d,e,f).  #d
2cd50 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44  efine sqlite3FkD
2cd60 72 6f 70 54 61 62 6c 65 28 61 2c 62 2c 63 29 0a  ropTable(a,b,c).
2cd70 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
2cd80 33 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62 29 20  3FkOldmask(a,b) 
2cd90 20 20 20 20 20 20 20 20 30 0a 20 20 23 64 65 66          0.  #def
2cda0 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65 71  ine sqlite3FkReq
2cdb0 75 69 72 65 64 28 61 2c 62 2c 63 2c 64 29 20 20  uired(a,b,c,d)  
2cdc0 20 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71    0.  #define sq
2cdd0 6c 69 74 65 33 46 6b 52 65 66 65 72 65 6e 63 65  lite3FkReference
2cde0 73 28 61 29 20 20 20 20 20 20 20 20 30 0a 23 65  s(a)        0.#e
2cdf0 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
2ce00 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
2ce10 5f 4b 45 59 0a 20 20 76 6f 69 64 20 73 71 6c 69  _KEY.  void sqli
2ce20 74 65 33 46 6b 44 65 6c 65 74 65 28 73 71 6c 69  te3FkDelete(sqli
2ce30 74 65 33 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  te3 *, Table*);.
2ce40 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 4c    int sqlite3FkL
2ce50 6f 63 61 74 65 49 6e 64 65 78 28 50 61 72 73 65  ocateIndex(Parse
2ce60 2a 2c 54 61 62 6c 65 2a 2c 46 4b 65 79 2a 2c 49  *,Table*,FKey*,I
2ce70 6e 64 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a 23  ndex**,int**);.#
2ce80 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
2ce90 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28 61  qlite3FkDelete(a
2cea0 2c 62 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,b).  #define sq
2ceb0 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64  lite3FkLocateInd
2cec0 65 78 28 61 2c 62 2c 63 2c 64 2c 65 29 0a 23 65  ex(a,b,c,d,e).#e
2ced0 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61  ndif.../*.** Ava
2cee0 69 6c 61 62 6c 65 20 66 61 75 6c 74 20 69 6e 6a  ilable fault inj
2cef0 65 63 74 6f 72 73 2e 20 20 53 68 6f 75 6c 64 20  ectors.  Should 
2cf00 62 65 20 6e 75 6d 62 65 72 65 64 20 62 65 67 69  be numbered begi
2cf10 6e 6e 69 6e 67 20 77 69 74 68 20 30 2e 0a 2a 2f  nning with 0..*/
2cf20 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
2cf30 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d 41  FAULTINJECTOR_MA
2cf40 4c 4c 4f 43 20 20 20 20 20 30 0a 23 64 65 66 69  LLOC     0.#defi
2cf50 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49  ne SQLITE_FAULTI
2cf60 4e 4a 45 43 54 4f 52 5f 43 4f 55 4e 54 20 20 20  NJECTOR_COUNT   
2cf70 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20     1../*.** The 
2cf80 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68 65  interface to the
2cf90 20 63 6f 64 65 20 69 6e 20 66 61 75 6c 74 2e 63   code in fault.c
2cfa0 20 75 73 65 64 20 66 6f 72 20 69 64 65 6e 74 69   used for identi
2cfb0 66 79 69 6e 67 20 22 62 65 6e 69 67 6e 22 0a 2a  fying "benign".*
2cfc0 2a 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65  * malloc failure
2cfd0 73 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 20  s. This is only 
2cfe0 70 72 65 73 65 6e 74 20 69 66 20 53 51 4c 49 54  present if SQLIT
2cff0 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 2a 2a 20  E_UNTESTABLE.** 
2d000 69 73 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e 0a  is not defined..
2d010 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
2d020 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 20 20 76  E_UNTESTABLE.  v
2d030 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
2d040 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69  BenignMalloc(voi
2d050 64 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  d);.  void sqlit
2d060 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f  e3EndBenignMallo
2d070 63 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 20  c(void);.#else. 
2d080 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2d090 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f  BeginBenignMallo
2d0a0 63 28 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  c().  #define sq
2d0b0 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61  lite3EndBenignMa
2d0c0 6c 6c 6f 63 28 29 0a 23 65 6e 64 69 66 0a 0a 2f  lloc().#endif../
2d0d0 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74  *.** Allowed ret
2d0e0 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20  urn values from 
2d0f0 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64  sqlite3FindInInd
2d100 65 78 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ex().*/.#define 
2d110 49 4e 5f 49 4e 44 45 58 5f 52 4f 57 49 44 20 20  IN_INDEX_ROWID  
2d120 20 20 20 20 20 20 31 20 20 20 2f 2a 20 53 65 61        1   /* Sea
2d130 72 63 68 20 74 68 65 20 72 6f 77 69 64 20 6f 66  rch the rowid of
2d140 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 23 64   the table */.#d
2d150 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 45  efine IN_INDEX_E
2d160 50 48 20 20 20 20 20 20 20 20 20 20 32 20 20 20  PH          2   
2d170 2f 2a 20 53 65 61 72 63 68 20 61 6e 20 65 70 68  /* Search an eph
2d180 65 6d 65 72 61 6c 20 62 2d 74 72 65 65 20 2a 2f  emeral b-tree */
2d190 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
2d1a0 58 5f 49 4e 44 45 58 5f 41 53 43 20 20 20 20 33  X_INDEX_ASC    3
2d1b0 20 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69     /* Existing i
2d1c0 6e 64 65 78 20 41 53 43 45 4e 44 49 4e 47 20 2a  ndex ASCENDING *
2d1d0 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
2d1e0 45 58 5f 49 4e 44 45 58 5f 44 45 53 43 20 20 20  EX_INDEX_DESC   
2d1f0 34 20 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20  4   /* Existing 
2d200 69 6e 64 65 78 20 44 45 53 43 45 4e 44 49 4e 47  index DESCENDING
2d210 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
2d220 4e 44 45 58 5f 4e 4f 4f 50 20 20 20 20 20 20 20  NDEX_NOOP       
2d230 20 20 35 20 20 20 2f 2a 20 4e 6f 20 74 61 62 6c    5   /* No tabl
2d240 65 20 61 76 61 69 6c 61 62 6c 65 2e 20 55 73 65  e available. Use
2d250 20 63 6f 6d 70 61 72 69 73 6f 6e 73 20 2a 2f 0a   comparisons */.
2d260 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 66 6c  /*.** Allowed fl
2d270 61 67 73 20 66 6f 72 20 74 68 65 20 33 72 64 20  ags for the 3rd 
2d280 70 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c  parameter to sql
2d290 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28  ite3FindInIndex(
2d2a0 29 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  )..*/.#define IN
2d2b0 5f 49 4e 44 45 58 5f 4e 4f 4f 50 5f 4f 4b 20 20  _INDEX_NOOP_OK  
2d2c0 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4f 4b     0x0001  /* OK
2d2d0 20 74 6f 20 72 65 74 75 72 6e 20 49 4e 5f 49 4e   to return IN_IN
2d2e0 44 45 58 5f 4e 4f 4f 50 20 2a 2f 0a 23 64 65 66  DEX_NOOP */.#def
2d2f0 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4d 45 4d  ine IN_INDEX_MEM
2d300 42 45 52 53 48 49 50 20 20 30 78 30 30 30 32 20  BERSHIP  0x0002 
2d310 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20   /* IN operator 
2d320 75 73 65 64 20 66 6f 72 20 6d 65 6d 62 65 72 73  used for members
2d330 68 69 70 20 74 65 73 74 20 2a 2f 0a 23 64 65 66  hip test */.#def
2d340 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4c 4f 4f  ine IN_INDEX_LOO
2d350 50 20 20 20 20 20 20 20 20 30 78 30 30 30 34 20  P        0x0004 
2d360 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20   /* IN operator 
2d370 75 73 65 64 20 61 73 20 61 20 6c 6f 6f 70 20 2a  used as a loop *
2d380 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e  /.int sqlite3Fin
2d390 64 49 6e 49 6e 64 65 78 28 50 61 72 73 65 20 2a  dInIndex(Parse *
2d3a0 2c 20 45 78 70 72 20 2a 2c 20 75 33 32 2c 20 69  , Expr *, u32, i
2d3b0 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 0a 69 6e 74  nt*, int*);..int
2d3c0 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4f   sqlite3JournalO
2d3d0 70 65 6e 28 73 71 6c 69 74 65 33 5f 76 66 73 20  pen(sqlite3_vfs 
2d3e0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
2d3f0 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 2c   sqlite3_file *,
2d400 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20   int, int);.int 
2d410 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69  sqlite3JournalSi
2d420 7a 65 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a  ze(sqlite3_vfs *
2d430 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  );.#if defined(S
2d440 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 54 4f  QLITE_ENABLE_ATO
2d450 4d 49 43 5f 57 52 49 54 45 29 20 5c 0a 20 7c 7c  MIC_WRITE) \. ||
2d460 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2d470 45 4e 41 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f  ENABLE_BATCH_ATO
2d480 4d 49 43 5f 57 52 49 54 45 29 0a 20 20 69 6e 74  MIC_WRITE).  int
2d490 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43   sqlite3JournalC
2d4a0 72 65 61 74 65 28 73 71 6c 69 74 65 33 5f 66 69  reate(sqlite3_fi
2d4b0 6c 65 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 69  le *);.#endif..i
2d4c0 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  nt sqlite3Journa
2d4d0 6c 49 73 49 6e 4d 65 6d 6f 72 79 28 73 71 6c 69  lIsInMemory(sqli
2d4e0 74 65 33 5f 66 69 6c 65 20 2a 70 29 3b 0a 76 6f  te3_file *p);.vo
2d4f0 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75  id sqlite3MemJou
2d500 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33  rnalOpen(sqlite3
2d510 5f 66 69 6c 65 20 2a 29 3b 0a 0a 76 6f 69 64 20  _file *);..void 
2d520 73 71 6c 69 74 65 33 45 78 70 72 53 65 74 48 65  sqlite3ExprSetHe
2d530 69 67 68 74 41 6e 64 46 6c 61 67 73 28 50 61 72  ightAndFlags(Par
2d540 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72  se *pParse, Expr
2d550 20 2a 70 29 3b 0a 23 69 66 20 53 51 4c 49 54 45   *p);.#if SQLITE
2d560 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e  _MAX_EXPR_DEPTH>
2d570 30 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 53  0.  int sqlite3S
2d580 65 6c 65 63 74 45 78 70 72 48 65 69 67 68 74 28  electExprHeight(
2d590 53 65 6c 65 63 74 20 2a 29 3b 0a 20 20 69 6e 74  Select *);.  int
2d5a0 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63   sqlite3ExprChec
2d5b0 6b 48 65 69 67 68 74 28 50 61 72 73 65 2a 2c 20  kHeight(Parse*, 
2d5c0 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  int);.#else.  #d
2d5d0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65 6c  efine sqlite3Sel
2d5e0 65 63 74 45 78 70 72 48 65 69 67 68 74 28 78 29  ectExprHeight(x)
2d5f0 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c   0.  #define sql
2d600 69 74 65 33 45 78 70 72 43 68 65 63 6b 48 65 69  ite3ExprCheckHei
2d610 67 68 74 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a  ght(x,y).#endif.
2d620 0a 75 33 32 20 73 71 6c 69 74 65 33 47 65 74 34  .u32 sqlite3Get4
2d630 62 79 74 65 28 63 6f 6e 73 74 20 75 38 2a 29 3b  byte(const u8*);
2d640 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 75 74  .void sqlite3Put
2d650 34 62 79 74 65 28 75 38 2a 2c 20 75 33 32 29 3b  4byte(u8*, u32);
2d660 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
2d670 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f  ENABLE_UNLOCK_NO
2d680 54 49 46 59 0a 20 20 76 6f 69 64 20 73 71 6c 69  TIFY.  void sqli
2d690 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f  te3ConnectionBlo
2d6a0 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 2c 20  cked(sqlite3 *, 
2d6b0 73 71 6c 69 74 65 33 20 2a 29 3b 0a 20 20 76 6f  sqlite3 *);.  vo
2d6c0 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  id sqlite3Connec
2d6d0 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 73 71 6c  tionUnlocked(sql
2d6e0 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 76 6f 69  ite3 *db);.  voi
2d6f0 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  d sqlite3Connect
2d700 69 6f 6e 43 6c 6f 73 65 64 28 73 71 6c 69 74 65  ionClosed(sqlite
2d710 33 20 2a 64 62 29 3b 0a 23 65 6c 73 65 0a 20 20  3 *db);.#else.  
2d720 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43  #define sqlite3C
2d730 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64  onnectionBlocked
2d740 28 78 2c 79 29 0a 20 20 23 64 65 66 69 6e 65 20  (x,y).  #define 
2d750 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
2d760 6e 55 6e 6c 6f 63 6b 65 64 28 78 29 0a 20 20 23  nUnlocked(x).  #
2d770 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
2d780 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 78  nnectionClosed(x
2d790 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ).#endif..#ifdef
2d7a0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
2d7b0 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73  void sqlite3Pars
2d7c0 65 72 54 72 61 63 65 28 46 49 4c 45 2a 2c 20 63  erTrace(FILE*, c
2d7d0 68 61 72 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  har *);.#endif..
2d7e0 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c  /*.** If the SQL
2d7f0 49 54 45 5f 45 4e 41 42 4c 45 20 49 4f 54 52 41  ITE_ENABLE IOTRA
2d800 43 45 20 65 78 69 73 74 73 20 74 68 65 6e 20 74  CE exists then t
2d810 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  he global variab
2d820 6c 65 0a 2a 2a 20 73 71 6c 69 74 65 33 49 6f 54  le.** sqlite3IoT
2d830 72 61 63 65 20 69 73 20 61 20 70 6f 69 6e 74 65  race is a pointe
2d840 72 20 74 6f 20 61 20 70 72 69 6e 74 66 2d 6c 69  r to a printf-li
2d850 6b 65 20 72 6f 75 74 69 6e 65 20 75 73 65 64 20  ke routine used 
2d860 74 6f 0a 2a 2a 20 70 72 69 6e 74 20 49 2f 4f 20  to.** print I/O 
2d870 74 72 61 63 69 6e 67 20 6d 65 73 73 61 67 65 73  tracing messages
2d880 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
2d890 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43  TE_ENABLE_IOTRAC
2d8a0 45 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41  E.# define IOTRA
2d8b0 43 45 28 41 29 20 20 69 66 28 20 73 71 6c 69 74  CE(A)  if( sqlit
2d8c0 65 33 49 6f 54 72 61 63 65 20 29 7b 20 73 71 6c  e3IoTrace ){ sql
2d8d0 69 74 65 33 49 6f 54 72 61 63 65 20 41 3b 20 7d  ite3IoTrace A; }
2d8e0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56  .  void sqlite3V
2d8f0 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 56 64  dbeIOTraceSql(Vd
2d900 62 65 2a 29 3b 0a 53 51 4c 49 54 45 5f 41 50 49  be*);.SQLITE_API
2d910 20 53 51 4c 49 54 45 5f 45 58 54 45 52 4e 20 76   SQLITE_EXTERN v
2d920 6f 69 64 20 28 53 51 4c 49 54 45 5f 43 44 45 43  oid (SQLITE_CDEC
2d930 4c 20 2a 73 71 6c 69 74 65 33 49 6f 54 72 61 63  L *sqlite3IoTrac
2d940 65 29 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e  e)(const char*,.
2d950 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  ..);.#else.# def
2d960 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29 0a 23  ine IOTRACE(A).#
2d970 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2d980 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 58 29  dbeIOTraceSql(X)
2d990 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
2d9a0 68 65 73 65 20 72 6f 75 74 69 6e 65 73 20 61 72  hese routines ar
2d9b0 65 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20  e available for 
2d9c0 74 68 65 20 6d 65 6d 32 2e 63 20 64 65 62 75 67  the mem2.c debug
2d9d0 67 69 6e 67 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  ging memory allo
2d9e0 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20  cator.** only.  
2d9f0 54 68 65 79 20 61 72 65 20 75 73 65 64 20 74 6f  They are used to
2da00 20 76 65 72 69 66 79 20 74 68 61 74 20 64 69 66   verify that dif
2da10 66 65 72 65 6e 74 20 22 74 79 70 65 73 22 20 6f  ferent "types" o
2da20 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f  f memory.** allo
2da30 63 61 74 69 6f 6e 73 20 61 72 65 20 70 72 6f 70  cations are prop
2da40 65 72 6c 79 20 74 72 61 63 6b 65 64 20 62 79 20  erly tracked by 
2da50 74 68 65 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a  the system..**.*
2da60 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  * sqlite3Memdebu
2da70 67 53 65 74 54 79 70 65 28 29 20 73 65 74 73 20  gSetType() sets 
2da80 74 68 65 20 22 74 79 70 65 22 20 6f 66 20 61 6e  the "type" of an
2da90 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f 20 6f   allocation to o
2daa0 6e 65 20 6f 66 0a 2a 2a 20 74 68 65 20 4d 45 4d  ne of.** the MEM
2dab0 54 59 50 45 5f 2a 20 6d 61 63 72 6f 73 20 64 65  TYPE_* macros de
2dac0 66 69 6e 65 64 20 62 65 6c 6f 77 2e 20 20 54 68  fined below.  Th
2dad0 65 20 74 79 70 65 20 6d 75 73 74 20 62 65 20 61  e type must be a
2dae0 20 62 69 74 6d 61 73 6b 20 77 69 74 68 0a 2a 2a   bitmask with.**
2daf0 20 61 20 73 69 6e 67 6c 65 20 62 69 74 20 73 65   a single bit se
2db00 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33  t..**.** sqlite3
2db10 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28  MemdebugHasType(
2db20 29 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69  ) returns true i
2db30 66 20 61 6e 79 20 6f 66 20 74 68 65 20 62 69 74  f any of the bit
2db40 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a  s in its second.
2db50 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63  ** argument matc
2db60 68 20 74 68 65 20 74 79 70 65 20 73 65 74 20 62  h the type set b
2db70 79 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 73  y the previous s
2db80 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65  qlite3MemdebugSe
2db90 74 54 79 70 65 28 29 2e 0a 2a 2a 20 73 71 6c 69  tType()..** sqli
2dba0 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79  te3MemdebugHasTy
2dbb0 70 65 28 29 20 69 73 20 69 6e 74 65 6e 64 65 64  pe() is intended
2dbc0 20 66 6f 72 20 75 73 65 20 69 6e 73 69 64 65 20   for use inside 
2dbd0 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
2dbe0 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74  nts..**.** sqlit
2dbf0 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65  e3MemdebugNoType
2dc00 28 29 20 72 65 74 75 72 6e 73 20 74 72 75 65 20  () returns true 
2dc10 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 62  if none of the b
2dc20 69 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e  its in its secon
2dc30 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61  d.** argument ma
2dc40 74 63 68 20 74 68 65 20 74 79 70 65 20 73 65 74  tch the type set
2dc50 20 62 79 20 74 68 65 20 70 72 65 76 69 6f 75 73   by the previous
2dc60 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
2dc70 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a  SetType()..**.**
2dc80 20 50 65 72 68 61 70 73 20 74 68 65 20 6d 6f 73   Perhaps the mos
2dc90 74 20 69 6d 70 6f 72 74 61 6e 74 20 70 6f 69 6e  t important poin
2dca0 74 20 69 73 20 74 68 65 20 64 69 66 66 65 72 65  t is the differe
2dcb0 6e 63 65 20 62 65 74 77 65 65 6e 20 4d 45 4d 54  nce between MEMT
2dcc0 59 50 45 5f 48 45 41 50 0a 2a 2a 20 61 6e 64 20  YPE_HEAP.** and 
2dcd0 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44  MEMTYPE_LOOKASID
2dce0 45 2e 20 20 49 66 20 61 6e 20 61 6c 6c 6f 63 61  E.  If an alloca
2dcf0 74 69 6f 6e 20 69 73 20 4d 45 4d 54 59 50 45 5f  tion is MEMTYPE_
2dd00 4c 4f 4f 4b 41 53 49 44 45 2c 20 74 68 61 74 20  LOOKASIDE, that 
2dd10 6d 65 61 6e 73 0a 2a 2a 20 69 74 20 6d 69 67 68  means.** it migh
2dd20 74 20 68 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f  t have been allo
2dd30 63 61 74 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69  cated by lookasi
2dd40 64 65 2c 20 65 78 63 65 70 74 20 74 68 65 20 61  de, except the a
2dd50 6c 6c 6f 63 61 74 69 6f 6e 20 77 61 73 0a 2a 2a  llocation was.**
2dd60 20 74 6f 6f 20 6c 61 72 67 65 20 6f 72 20 6c 6f   too large or lo
2dd70 6f 6b 61 73 69 64 65 20 77 61 73 20 61 6c 72 65  okaside was alre
2dd80 61 64 79 20 66 75 6c 6c 2e 20 20 49 74 20 69 73  ady full.  It is
2dd90 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 76 65   important to ve
2dda0 72 69 66 79 0a 2a 2a 20 74 68 61 74 20 61 6c 6c  rify.** that all
2ddb0 6f 63 61 74 69 6f 6e 73 20 74 68 61 74 20 6d 69  ocations that mi
2ddc0 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 73 61  ght have been sa
2ddd0 74 69 73 66 69 65 64 20 62 79 20 6c 6f 6f 6b 61  tisfied by looka
2dde0 73 69 64 65 20 61 72 65 20 6e 6f 74 0a 2a 2a 20  side are not.** 
2ddf0 70 61 73 73 65 64 20 62 61 63 6b 20 74 6f 20 6e  passed back to n
2de00 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65  on-lookaside fre
2de10 65 28 29 20 72 6f 75 74 69 6e 65 73 2e 20 20 41  e() routines.  A
2de20 73 73 65 72 74 73 20 73 75 63 68 20 61 73 20 74  sserts such as t
2de30 68 65 0a 2a 2a 20 65 78 61 6d 70 6c 65 20 61 62  he.** example ab
2de40 6f 76 65 20 61 72 65 20 70 6c 61 63 65 64 20 6f  ove are placed o
2de50 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73  n the non-lookas
2de60 69 64 65 20 66 72 65 65 28 29 20 72 6f 75 74 69  ide free() routi
2de70 6e 65 73 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a  nes to verify.**
2de80 20 74 68 69 73 20 63 6f 6e 73 74 72 61 69 6e 74   this constraint
2de90 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74  ..**.** All of t
2dea0 68 69 73 20 69 73 20 6e 6f 2d 6f 70 20 66 6f 72  his is no-op for
2deb0 20 61 20 70 72 6f 64 75 63 74 69 6f 6e 20 62 75   a production bu
2dec0 69 6c 64 2e 20 20 49 74 20 6f 6e 6c 79 20 63 6f  ild.  It only co
2ded0 6d 65 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79  mes into.** play
2dee0 20 77 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45   when the SQLITE
2def0 5f 4d 45 4d 44 45 42 55 47 20 63 6f 6d 70 69 6c  _MEMDEBUG compil
2df00 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73  e-time option is
2df10 20 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66   used..*/.#ifdef
2df20 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47   SQLITE_MEMDEBUG
2df30 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  .  void sqlite3M
2df40 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 76  emdebugSetType(v
2df50 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20  oid*,u8);.  int 
2df60 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48  sqlite3MemdebugH
2df70 61 73 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29  asType(void*,u8)
2df80 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
2df90 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 76 6f  emdebugNoType(vo
2dfa0 69 64 2a 2c 75 38 29 3b 0a 23 65 6c 73 65 0a 23  id*,u8);.#else.#
2dfb0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d   define sqlite3M
2dfc0 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 58  emdebugSetType(X
2dfd0 2c 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f  ,Y)  /* no-op */
2dfe0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2dff0 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
2e000 28 58 2c 59 29 20 20 31 0a 23 20 64 65 66 69 6e  (X,Y)  1.# defin
2e010 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  e sqlite3Memdebu
2e020 67 4e 6f 54 79 70 65 28 58 2c 59 29 20 20 20 31  gNoType(X,Y)   1
2e030 0a 23 65 6e 64 69 66 0a 23 64 65 66 69 6e 65 20  .#endif.#define 
2e040 4d 45 4d 54 59 50 45 5f 48 45 41 50 20 20 20 20  MEMTYPE_HEAP    
2e050 20 20 20 30 78 30 31 20 20 2f 2a 20 47 65 6e 65     0x01  /* Gene
2e060 72 61 6c 20 68 65 61 70 20 61 6c 6c 6f 63 61 74  ral heap allocat
2e070 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
2e080 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44  MEMTYPE_LOOKASID
2e090 45 20 20 30 78 30 32 20 20 2f 2a 20 48 65 61 70  E  0x02  /* Heap
2e0a0 20 74 68 61 74 20 6d 69 67 68 74 20 68 61 76 65   that might have
2e0b0 20 62 65 65 6e 20 6c 6f 6f 6b 61 73 69 64 65 20   been lookaside 
2e0c0 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59  */.#define MEMTY
2e0d0 50 45 5f 50 43 41 43 48 45 20 20 20 20 20 30 78  PE_PCACHE     0x
2e0e0 30 34 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68  04  /* Page cach
2e0f0 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f  e allocations */
2e100 0a 0a 2f 2a 0a 2a 2a 20 54 68 72 65 61 64 69 6e  ../*.** Threadin
2e110 67 20 69 6e 74 65 72 66 61 63 65 0a 2a 2f 0a 23  g interface.*/.#
2e120 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f  if SQLITE_MAX_WO
2e130 52 4b 45 52 5f 54 48 52 45 41 44 53 3e 30 0a 69  RKER_THREADS>0.i
2e140 6e 74 20 73 71 6c 69 74 65 33 54 68 72 65 61 64  nt sqlite3Thread
2e150 43 72 65 61 74 65 28 53 51 4c 69 74 65 54 68 72  Create(SQLiteThr
2e160 65 61 64 2a 2a 2c 76 6f 69 64 2a 28 2a 29 28 76  ead**,void*(*)(v
2e170 6f 69 64 2a 29 2c 76 6f 69 64 2a 29 3b 0a 69 6e  oid*),void*);.in
2e180 74 20 73 71 6c 69 74 65 33 54 68 72 65 61 64 4a  t sqlite3ThreadJ
2e190 6f 69 6e 28 53 51 4c 69 74 65 54 68 72 65 61 64  oin(SQLiteThread
2e1a0 2a 2c 20 76 6f 69 64 2a 2a 29 3b 0a 23 65 6e 64  *, void**);.#end
2e1b0 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28  if..#if defined(
2e1c0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44 42  SQLITE_ENABLE_DB
2e1d0 53 54 41 54 5f 56 54 41 42 29 20 7c 7c 20 64 65  STAT_VTAB) || de
2e1e0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53  fined(SQLITE_TES
2e1f0 54 29 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62  T).int sqlite3Db
2e200 73 74 61 74 52 65 67 69 73 74 65 72 28 73 71 6c  statRegister(sql
2e210 69 74 65 33 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  ite3*);.#endif..
2e220 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 56  int sqlite3ExprV
2e230 65 63 74 6f 72 53 69 7a 65 28 45 78 70 72 20 2a  ectorSize(Expr *
2e240 70 45 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69  pExpr);.int sqli
2e250 74 65 33 45 78 70 72 49 73 56 65 63 74 6f 72 28  te3ExprIsVector(
2e260 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 45 78  Expr *pExpr);.Ex
2e270 70 72 20 2a 73 71 6c 69 74 65 33 56 65 63 74 6f  pr *sqlite3Vecto
2e280 72 46 69 65 6c 64 53 75 62 65 78 70 72 28 45 78  rFieldSubexpr(Ex
2e290 70 72 2a 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20  pr*, int);.Expr 
2e2a0 2a 73 71 6c 69 74 65 33 45 78 70 72 46 6f 72 56  *sqlite3ExprForV
2e2b0 65 63 74 6f 72 46 69 65 6c 64 28 50 61 72 73 65  ectorField(Parse
2e2c0 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 76 6f  *,Expr*,int);.vo
2e2d0 69 64 20 73 71 6c 69 74 65 33 56 65 63 74 6f 72  id sqlite3Vector
2e2e0 45 72 72 6f 72 4d 73 67 28 50 61 72 73 65 2a 2c  ErrorMsg(Parse*,
2e2f0 20 45 78 70 72 2a 29 3b 0a 0a 23 69 66 6e 64 65   Expr*);..#ifnde
2e300 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f  f SQLITE_OMIT_CO
2e310 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47  MPILEOPTION_DIAG
2e320 53 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a 73  S.const char **s
2e330 71 6c 69 74 65 33 43 6f 6d 70 69 6c 65 4f 70 74  qlite3CompileOpt
2e340 69 6f 6e 73 28 69 6e 74 20 2a 70 6e 4f 70 74 29  ions(int *pnOpt)
2e350 3b 0a 23 65 6e 64 69 66 0a 0a 23 65 6e 64 69 66  ;.#endif..#endif
2e360 20 2f 2a 20 53 51 4c 49 54 45 49 4e 54 5f 48 20   /* SQLITEINT_H 
2e370 2a 2f 0a                                         */.