/ Hex Artifact Content
Login

Artifact 10fbede4b830769f1d56f51a8f3b1222afc2de7d:


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 57  E 1.#endif../* W
0ee0: 68 61 74 20 76 65 72 73 69 6f 6e 20 6f 66 20 47  hat version of G
0ef0: 43 43 20 69 73 20 62 65 69 6e 67 20 75 73 65 64  CC is being used
0f00: 2e 20 20 30 20 6d 65 61 6e 73 20 47 43 43 20 69  .  0 means GCC i
0f10: 73 20 6e 6f 74 20 62 65 69 6e 67 20 75 73 65 64  s not being used
0f20: 20 2a 2f 0a 23 69 66 64 65 66 20 5f 5f 47 4e 55   */.#ifdef __GNU
0f30: 43 5f 5f 0a 23 20 64 65 66 69 6e 65 20 47 43 43  C__.# define GCC
0f40: 5f 56 45 52 53 49 4f 4e 20 28 5f 5f 47 4e 55 43  _VERSION (__GNUC
0f50: 5f 5f 2a 31 30 30 30 30 30 30 2b 5f 5f 47 4e 55  __*1000000+__GNU
0f60: 43 5f 4d 49 4e 4f 52 5f 5f 2a 31 30 30 30 2b 5f  C_MINOR__*1000+_
0f70: 5f 47 4e 55 43 5f 50 41 54 43 48 4c 45 56 45 4c  _GNUC_PATCHLEVEL
0f80: 5f 5f 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  __).#else.# defi
0f90: 6e 65 20 47 43 43 5f 56 45 52 53 49 4f 4e 20 30  ne GCC_VERSION 0
0fa0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 57 68 61 74  .#endif../* What
0fb0: 20 76 65 72 73 69 6f 6e 20 6f 66 20 43 4c 41 4e   version of CLAN
0fc0: 47 20 69 73 20 62 65 69 6e 67 20 75 73 65 64 2e  G is being used.
0fd0: 20 20 30 20 6d 65 61 6e 73 20 43 4c 41 4e 47 20    0 means CLANG 
0fe0: 69 73 20 6e 6f 74 20 62 65 69 6e 67 20 75 73 65  is not being use
0ff0: 64 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  d */.#if defined
1000: 28 5f 5f 63 6c 61 6e 67 5f 5f 29 20 26 26 20 21  (__clang__) && !
1010: 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 0a  defined(_WIN32).
1020: 23 20 64 65 66 69 6e 65 20 43 4c 41 4e 47 5f 56  # define CLANG_V
1030: 45 52 53 49 4f 4e 20 5c 0a 20 20 20 20 20 20 20  ERSION \.       
1040: 20 20 20 20 20 28 5f 5f 63 6c 61 6e 67 5f 6d 61       (__clang_ma
1050: 6a 6f 72 5f 5f 2a 31 30 30 30 30 30 30 2b 5f 5f  jor__*1000000+__
1060: 63 6c 61 6e 67 5f 6d 69 6e 6f 72 5f 5f 2a 31 30  clang_minor__*10
1070: 30 30 2b 5f 5f 63 6c 61 6e 67 5f 70 61 74 63 68  00+__clang_patch
1080: 6c 65 76 65 6c 5f 5f 29 0a 23 65 6c 73 65 0a 23  level__).#else.#
1090: 20 64 65 66 69 6e 65 20 43 4c 41 4e 47 5f 56 45   define CLANG_VE
10a0: 52 53 49 4f 4e 20 30 0a 23 65 6e 64 69 66 0a 0a  RSION 0.#endif..
10b0: 2f 2a 20 4e 65 65 64 65 64 20 66 6f 72 20 76 61  /* Needed for va
10c0: 72 69 6f 75 73 20 64 65 66 69 6e 69 74 69 6f 6e  rious definition
10d0: 73 2e 2e 2e 20 2a 2f 0a 23 69 66 20 64 65 66 69  s... */.#if defi
10e0: 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 26 26  ned(__GNUC__) &&
10f0: 20 21 64 65 66 69 6e 65 64 28 5f 47 4e 55 5f 53   !defined(_GNU_S
1100: 4f 55 52 43 45 29 0a 23 20 64 65 66 69 6e 65 20  OURCE).# define 
1110: 5f 47 4e 55 5f 53 4f 55 52 43 45 0a 23 65 6e 64  _GNU_SOURCE.#end
1120: 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28  if..#if defined(
1130: 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20 26 26 20  __OpenBSD__) && 
1140: 21 64 65 66 69 6e 65 64 28 5f 42 53 44 5f 53 4f  !defined(_BSD_SO
1150: 55 52 43 45 29 0a 23 20 64 65 66 69 6e 65 20 5f  URCE).# define _
1160: 42 53 44 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69  BSD_SOURCE.#endi
1170: 66 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d 69 6e  f../*.** For Min
1180: 47 57 2c 20 63 68 65 63 6b 20 74 6f 20 73 65 65  GW, check to see
1190: 20 69 66 20 77 65 20 63 61 6e 20 69 6e 63 6c 75   if we can inclu
11a0: 64 65 20 74 68 65 20 68 65 61 64 65 72 20 66 69  de the header fi
11b0: 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 69 74  le containing it
11c0: 73 0a 2a 2a 20 76 65 72 73 69 6f 6e 20 69 6e 66  s.** version inf
11d0: 6f 72 6d 61 74 69 6f 6e 2c 20 61 6d 6f 6e 67 20  ormation, among 
11e0: 6f 74 68 65 72 20 74 68 69 6e 67 73 2e 20 20 4e  other things.  N
11f0: 6f 72 6d 61 6c 6c 79 2c 20 74 68 69 73 20 69 6e  ormally, this in
1200: 74 65 72 6e 61 6c 20 4d 69 6e 47 57 0a 2a 2a 20  ternal MinGW.** 
1210: 68 65 61 64 65 72 20 66 69 6c 65 20 77 6f 75 6c  header file woul
1220: 64 20 5b 6f 6e 6c 79 5d 20 62 65 20 69 6e 63 6c  d [only] be incl
1230: 75 64 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c  uded automatical
1240: 6c 79 20 62 79 20 6f 74 68 65 72 20 4d 69 6e 47  ly by other MinG
1250: 57 20 68 65 61 64 65 72 0a 2a 2a 20 66 69 6c 65  W header.** file
1260: 73 3b 20 68 6f 77 65 76 65 72 2c 20 74 68 65 20  s; however, the 
1270: 63 6f 6e 74 61 69 6e 65 64 20 76 65 72 73 69 6f  contained versio
1280: 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73  n information is
1290: 20 6e 6f 77 20 72 65 71 75 69 72 65 64 20 62 79   now required by
12a0: 20 74 68 69 73 0a 2a 2a 20 68 65 61 64 65 72 20   this.** header 
12b0: 66 69 6c 65 20 74 6f 20 77 6f 72 6b 20 61 72 6f  file to work aro
12c0: 75 6e 64 20 62 69 6e 61 72 79 20 63 6f 6d 70 61  und binary compa
12d0: 74 69 62 69 6c 69 74 79 20 69 73 73 75 65 73 20  tibility issues 
12e0: 28 73 65 65 20 62 65 6c 6f 77 29 20 61 6e 64 0a  (see below) and.
12f0: 2a 2a 20 74 68 69 73 20 69 73 20 74 68 65 20 6f  ** this is the o
1300: 6e 6c 79 20 6b 6e 6f 77 6e 20 77 61 79 20 74 6f  nly known way to
1310: 20 72 65 6c 69 61 62 6c 79 20 6f 62 74 61 69 6e   reliably obtain
1320: 20 69 74 2e 20 20 54 68 69 73 20 65 6e 74 69 72   it.  This entir
1330: 65 20 23 69 66 20 62 6c 6f 63 6b 0a 2a 2a 20 77  e #if block.** w
1340: 6f 75 6c 64 20 62 65 20 63 6f 6d 70 6c 65 74 65  ould be complete
1350: 6c 79 20 75 6e 6e 65 63 65 73 73 61 72 79 20 69  ly unnecessary i
1360: 66 20 74 68 65 72 65 20 77 61 73 20 61 6e 79 20  f there was any 
1370: 6f 74 68 65 72 20 77 61 79 20 6f 66 20 64 65 74  other way of det
1380: 65 63 74 69 6e 67 0a 2a 2a 20 4d 69 6e 47 57 20  ecting.** MinGW 
1390: 76 69 61 20 74 68 65 69 72 20 70 72 65 70 72 6f  via their prepro
13a0: 63 65 73 73 6f 72 20 28 65 2e 67 2e 20 69 66 20  cessor (e.g. if 
13b0: 74 68 65 79 20 63 75 73 74 6f 6d 69 7a 65 64 20  they customized 
13c0: 74 68 65 69 72 20 47 43 43 20 74 6f 20 64 65 66  their GCC to def
13d0: 69 6e 65 0a 2a 2a 20 73 6f 6d 65 20 4d 69 6e 47  ine.** some MinG
13e0: 57 2d 73 70 65 63 69 66 69 63 20 6d 61 63 72 6f  W-specific macro
13f0: 73 29 2e 20 20 57 68 65 6e 20 63 6f 6d 70 69 6c  s).  When compil
1400: 69 6e 67 20 66 6f 72 20 4d 69 6e 47 57 2c 20 65  ing for MinGW, e
1410: 69 74 68 65 72 20 74 68 65 0a 2a 2a 20 5f 48 41  ither the.** _HA
1420: 56 45 5f 4d 49 4e 47 57 5f 48 20 6f 72 20 5f 48  VE_MINGW_H or _H
1430: 41 56 45 5f 5f 4d 49 4e 47 57 5f 48 20 28 6e 6f  AVE__MINGW_H (no
1440: 74 65 20 74 68 65 20 65 78 74 72 61 20 75 6e 64  te the extra und
1450: 65 72 73 63 6f 72 65 29 20 6d 61 63 72 6f 20 6d  erscore) macro m
1460: 75 73 74 20 62 65 0a 2a 2a 20 64 65 66 69 6e 65  ust be.** define
1470: 64 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 64 65  d; otherwise, de
1480: 74 65 63 74 69 6f 6e 20 6f 66 20 63 6f 6e 64 69  tection of condi
1490: 74 69 6f 6e 73 20 73 70 65 63 69 66 69 63 20 74  tions specific t
14a0: 6f 20 4d 69 6e 47 57 20 77 69 6c 6c 20 62 65 0a  o MinGW will be.
14b0: 2a 2a 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a  ** disabled..*/.
14c0: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41 56  #if defined(_HAV
14d0: 45 5f 4d 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63  E_MINGW_H).# inc
14e0: 6c 75 64 65 20 22 6d 69 6e 67 77 2e 68 22 0a 23  lude "mingw.h".#
14f0: 65 6c 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41  elif defined(_HA
1500: 56 45 5f 5f 4d 49 4e 47 57 5f 48 29 0a 23 20 69  VE__MINGW_H).# i
1510: 6e 63 6c 75 64 65 20 22 5f 6d 69 6e 67 77 2e 68  nclude "_mingw.h
1520: 22 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ".#endif../*.** 
1530: 46 6f 72 20 4d 69 6e 47 57 20 76 65 72 73 69 6f  For MinGW versio
1540: 6e 20 34 2e 78 20 28 61 6e 64 20 68 69 67 68 65  n 4.x (and highe
1550: 72 29 2c 20 63 68 65 63 6b 20 74 6f 20 73 65 65  r), check to see
1560: 20 69 66 20 74 68 65 20 5f 55 53 45 5f 33 32 42   if the _USE_32B
1570: 49 54 5f 54 49 4d 45 5f 54 0a 2a 2a 20 64 65 66  IT_TIME_T.** def
1580: 69 6e 65 20 69 73 20 72 65 71 75 69 72 65 64 20  ine is required 
1590: 74 6f 20 6d 61 69 6e 74 61 69 6e 20 62 69 6e 61  to maintain bina
15a0: 72 79 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79  ry compatibility
15b0: 20 77 69 74 68 20 74 68 65 20 4d 53 56 43 20 72   with the MSVC r
15c0: 75 6e 74 69 6d 65 0a 2a 2a 20 6c 69 62 72 61 72  untime.** librar
15d0: 79 20 69 6e 20 75 73 65 20 28 65 2e 67 2e 20 66  y in use (e.g. f
15e0: 6f 72 20 57 69 6e 64 6f 77 73 20 58 50 29 2e 0a  or Windows XP)..
15f0: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
1600: 5f 55 53 45 5f 33 32 42 49 54 5f 54 49 4d 45 5f  _USE_32BIT_TIME_
1610: 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f  T) && !defined(_
1620: 55 53 45 5f 36 34 42 49 54 5f 54 49 4d 45 5f 54  USE_64BIT_TIME_T
1630: 29 20 26 26 20 5c 0a 20 20 20 20 64 65 66 69 6e  ) && \.    defin
1640: 65 64 28 5f 57 49 4e 33 32 29 20 26 26 20 21 64  ed(_WIN32) && !d
1650: 65 66 69 6e 65 64 28 5f 57 49 4e 36 34 29 20 26  efined(_WIN64) &
1660: 26 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28  & \.    defined(
1670: 5f 5f 4d 49 4e 47 57 5f 4d 41 4a 4f 52 5f 56 45  __MINGW_MAJOR_VE
1680: 52 53 49 4f 4e 29 20 26 26 20 5f 5f 4d 49 4e 47  RSION) && __MING
1690: 57 5f 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e 20  W_MAJOR_VERSION 
16a0: 3e 3d 20 34 20 26 26 20 5c 0a 20 20 20 20 64 65  >= 4 && \.    de
16b0: 66 69 6e 65 64 28 5f 5f 4d 53 56 43 52 54 5f 5f  fined(__MSVCRT__
16c0: 29 0a 23 20 64 65 66 69 6e 65 20 5f 55 53 45 5f  ).# define _USE_
16d0: 33 32 42 49 54 5f 54 49 4d 45 5f 54 0a 23 65 6e  32BIT_TIME_T.#en
16e0: 64 69 66 0a 0a 2f 2a 20 54 68 65 20 70 75 62 6c  dif../* The publ
16f0: 69 63 20 53 51 4c 69 74 65 20 69 6e 74 65 72 66  ic SQLite interf
1700: 61 63 65 2e 20 20 54 68 65 20 5f 46 49 4c 45 5f  ace.  The _FILE_
1710: 4f 46 46 53 45 54 5f 42 49 54 53 20 6d 61 63 72  OFFSET_BITS macr
1720: 6f 20 6d 75 73 74 20 61 70 70 65 61 72 0a 2a 2a  o must appear.**
1730: 20 66 69 72 73 74 20 69 6e 20 51 4e 58 2e 20 20   first in QNX.  
1740: 41 6c 73 6f 2c 20 74 68 65 20 5f 55 53 45 5f 33  Also, the _USE_3
1750: 32 42 49 54 5f 54 49 4d 45 5f 54 20 6d 61 63 72  2BIT_TIME_T macr
1760: 6f 20 6d 75 73 74 20 61 70 70 65 61 72 20 66 69  o must appear fi
1770: 72 73 74 20 66 6f 72 0a 2a 2a 20 4d 69 6e 47 57  rst for.** MinGW
1780: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
1790: 71 6c 69 74 65 33 2e 68 22 0a 0a 2f 2a 0a 2a 2a  qlite3.h"../*.**
17a0: 20 49 6e 63 6c 75 64 65 20 74 68 65 20 63 6f 6e   Include the con
17b0: 66 69 67 75 72 61 74 69 6f 6e 20 68 65 61 64 65  figuration heade
17c0: 72 20 6f 75 74 70 75 74 20 62 79 20 27 63 6f 6e  r output by 'con
17d0: 66 69 67 75 72 65 27 20 69 66 20 77 65 27 72 65  figure' if we're
17e0: 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 61 75   using the.** au
17f0: 74 6f 63 6f 6e 66 2d 62 61 73 65 64 20 62 75 69  toconf-based bui
1800: 6c 64 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 48 41  ld.*/.#ifdef _HA
1810: 56 45 5f 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  VE_SQLITE_CONFIG
1820: 5f 48 0a 23 69 6e 63 6c 75 64 65 20 22 63 6f 6e  _H.#include "con
1830: 66 69 67 2e 68 22 0a 23 65 6e 64 69 66 0a 0a 23  fig.h".#endif..#
1840: 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65 4c  include "sqliteL
1850: 69 6d 69 74 2e 68 22 0a 0a 2f 2a 20 44 69 73 61  imit.h"../* Disa
1860: 62 6c 65 20 6e 75 69 73 61 6e 63 65 20 77 61 72  ble nuisance war
1870: 6e 69 6e 67 73 20 6f 6e 20 42 6f 72 6c 61 6e 64  nings on Borland
1880: 20 63 6f 6d 70 69 6c 65 72 73 20 2a 2f 0a 23 69   compilers */.#i
1890: 66 20 64 65 66 69 6e 65 64 28 5f 5f 42 4f 52 4c  f defined(__BORL
18a0: 41 4e 44 43 5f 5f 29 0a 23 70 72 61 67 6d 61 20  ANDC__).#pragma 
18b0: 77 61 72 6e 20 2d 72 63 68 20 2f 2a 20 75 6e 72  warn -rch /* unr
18c0: 65 61 63 68 61 62 6c 65 20 63 6f 64 65 20 2a 2f  eachable code */
18d0: 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 63  .#pragma warn -c
18e0: 63 63 20 2f 2a 20 43 6f 6e 64 69 74 69 6f 6e 20  cc /* Condition 
18f0: 69 73 20 61 6c 77 61 79 73 20 74 72 75 65 20 6f  is always true o
1900: 72 20 66 61 6c 73 65 20 2a 2f 0a 23 70 72 61 67  r false */.#prag
1910: 6d 61 20 77 61 72 6e 20 2d 61 75 73 20 2f 2a 20  ma warn -aus /* 
1920: 41 73 73 69 67 6e 65 64 20 76 61 6c 75 65 20 69  Assigned value i
1930: 73 20 6e 65 76 65 72 20 75 73 65 64 20 2a 2f 0a  s never used */.
1940: 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 63 73  #pragma warn -cs
1950: 75 20 2f 2a 20 43 6f 6d 70 61 72 69 6e 67 20 73  u /* Comparing s
1960: 69 67 6e 65 64 20 61 6e 64 20 75 6e 73 69 67 6e  igned and unsign
1970: 65 64 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61  ed */.#pragma wa
1980: 72 6e 20 2d 73 70 61 20 2f 2a 20 53 75 73 70 69  rn -spa /* Suspi
1990: 63 69 6f 75 73 20 70 6f 69 6e 74 65 72 20 61 72  cious pointer ar
19a0: 69 74 68 6d 65 74 69 63 20 2a 2f 0a 23 65 6e 64  ithmetic */.#end
19b0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64  if../*.** Includ
19c0: 65 20 73 74 61 6e 64 61 72 64 20 68 65 61 64 65  e standard heade
19d0: 72 20 66 69 6c 65 73 20 61 73 20 6e 65 63 65 73  r files as neces
19e0: 73 61 72 79 0a 2a 2f 0a 23 69 66 64 65 66 20 48  sary.*/.#ifdef H
19f0: 41 56 45 5f 53 54 44 49 4e 54 5f 48 0a 23 69 6e  AVE_STDINT_H.#in
1a00: 63 6c 75 64 65 20 3c 73 74 64 69 6e 74 2e 68 3e  clude <stdint.h>
1a10: 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 48  .#endif.#ifdef H
1a20: 41 56 45 5f 49 4e 54 54 59 50 45 53 5f 48 0a 23  AVE_INTTYPES_H.#
1a30: 69 6e 63 6c 75 64 65 20 3c 69 6e 74 74 79 70 65  include <inttype
1a40: 73 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  s.h>.#endif../*.
1a50: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
1a60: 20 6d 61 63 72 6f 73 20 61 72 65 20 75 73 65 64   macros are used
1a70: 20 74 6f 20 63 61 73 74 20 70 6f 69 6e 74 65 72   to cast pointer
1a80: 73 20 74 6f 20 69 6e 74 65 67 65 72 73 20 61 6e  s to integers an
1a90: 64 0a 2a 2a 20 69 6e 74 65 67 65 72 73 20 74 6f  d.** integers to
1aa0: 20 70 6f 69 6e 74 65 72 73 2e 20 20 54 68 65 20   pointers.  The 
1ab0: 77 61 79 20 79 6f 75 20 64 6f 20 74 68 69 73 20  way you do this 
1ac0: 76 61 72 69 65 73 20 66 72 6f 6d 20 6f 6e 65 20  varies from one 
1ad0: 63 6f 6d 70 69 6c 65 72 0a 2a 2a 20 74 6f 20 74  compiler.** to t
1ae0: 68 65 20 6e 65 78 74 2c 20 73 6f 20 77 65 20 68  he next, so we h
1af0: 61 76 65 20 64 65 76 65 6c 6f 70 65 64 20 74 68  ave developed th
1b00: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 65 74 20  e following set 
1b10: 6f 66 20 23 69 66 20 73 74 61 74 65 6d 65 6e 74  of #if statement
1b20: 73 0a 2a 2a 20 74 6f 20 67 65 6e 65 72 61 74 65  s.** to generate
1b30: 20 61 70 70 72 6f 70 72 69 61 74 65 20 6d 61 63   appropriate mac
1b40: 72 6f 73 20 66 6f 72 20 61 20 77 69 64 65 20 72  ros for a wide r
1b50: 61 6e 67 65 20 6f 66 20 63 6f 6d 70 69 6c 65 72  ange of compiler
1b60: 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 72  s..**.** The cor
1b70: 72 65 63 74 20 22 41 4e 53 49 22 20 77 61 79 20  rect "ANSI" way 
1b80: 74 6f 20 64 6f 20 74 68 69 73 20 69 73 20 74 6f  to do this is to
1b90: 20 75 73 65 20 74 68 65 20 69 6e 74 70 74 72 5f   use the intptr_
1ba0: 74 20 74 79 70 65 2e 0a 2a 2a 20 55 6e 66 6f 72  t type..** Unfor
1bb0: 74 75 6e 61 74 65 6c 79 2c 20 74 68 61 74 20 74  tunately, that t
1bc0: 79 70 65 64 65 66 20 69 73 20 6e 6f 74 20 61 76  ypedef is not av
1bd0: 61 69 6c 61 62 6c 65 20 6f 6e 20 61 6c 6c 20 63  ailable on all c
1be0: 6f 6d 70 69 6c 65 72 73 2c 20 6f 72 0a 2a 2a 20  ompilers, or.** 
1bf0: 69 66 20 69 74 20 69 73 20 61 76 61 69 6c 61 62  if it is availab
1c00: 6c 65 2c 20 69 74 20 72 65 71 75 69 72 65 73 20  le, it requires 
1c10: 61 6e 20 23 69 6e 63 6c 75 64 65 20 6f 66 20 73  an #include of s
1c20: 70 65 63 69 66 69 63 20 68 65 61 64 65 72 73 0a  pecific headers.
1c30: 2a 2a 20 74 68 61 74 20 76 61 72 79 20 66 72 6f  ** that vary fro
1c40: 6d 20 6f 6e 65 20 6d 61 63 68 69 6e 65 20 74 6f  m one machine to
1c50: 20 74 68 65 20 6e 65 78 74 2e 0a 2a 2a 0a 2a 2a   the next..**.**
1c60: 20 54 69 63 6b 65 74 20 23 33 38 36 30 3a 20 20   Ticket #3860:  
1c70: 54 68 65 20 6c 6c 76 6d 2d 67 63 63 2d 34 2e 32  The llvm-gcc-4.2
1c80: 20 63 6f 6d 70 69 6c 65 72 20 66 72 6f 6d 20 41   compiler from A
1c90: 70 70 6c 65 20 63 68 6f 6b 65 73 20 6f 6e 0a 2a  pple chokes on.*
1ca0: 2a 20 74 68 65 20 28 28 76 6f 69 64 2a 29 26 28  * the ((void*)&(
1cb0: 28 63 68 61 72 2a 29 30 29 5b 58 5d 29 20 63 6f  (char*)0)[X]) co
1cc0: 6e 73 74 72 75 63 74 2e 20 20 42 75 74 20 4d 53  nstruct.  But MS
1cd0: 56 43 20 63 68 6f 6b 65 73 20 6f 6e 20 28 28 76  VC chokes on ((v
1ce0: 6f 69 64 2a 29 28 58 29 29 2e 0a 2a 2a 20 53 6f  oid*)(X))..** So
1cf0: 20 77 65 20 68 61 76 65 20 74 6f 20 64 65 66 69   we have to defi
1d00: 6e 65 20 74 68 65 20 6d 61 63 72 6f 73 20 69 6e  ne the macros in
1d10: 20 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20   different ways 
1d20: 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65  depending on the
1d30: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 2e 0a 2a 2f  .** compiler..*/
1d40: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 50  .#if defined(__P
1d50: 54 52 44 49 46 46 5f 54 59 50 45 5f 5f 29 20 20  TRDIFF_TYPE__)  
1d60: 2f 2a 20 54 68 69 73 20 63 61 73 65 20 73 68 6f  /* This case sho
1d70: 75 6c 64 20 77 6f 72 6b 20 66 6f 72 20 47 43 43  uld work for GCC
1d80: 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c   */.# define SQL
1d90: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58  ITE_INT_TO_PTR(X
1da0: 29 20 20 28 28 76 6f 69 64 2a 29 28 5f 5f 50 54  )  ((void*)(__PT
1db0: 52 44 49 46 46 5f 54 59 50 45 5f 5f 29 28 58 29  RDIFF_TYPE__)(X)
1dc0: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
1dd0: 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20  E_PTR_TO_INT(X) 
1de0: 20 28 28 69 6e 74 29 28 5f 5f 50 54 52 44 49 46   ((int)(__PTRDIF
1df0: 46 5f 54 59 50 45 5f 5f 29 28 58 29 29 0a 23 65  F_TYPE__)(X)).#e
1e00: 6c 69 66 20 21 64 65 66 69 6e 65 64 28 5f 5f 47  lif !defined(__G
1e10: 4e 55 43 5f 5f 29 20 20 20 20 20 20 20 2f 2a 20  NUC__)       /* 
1e20: 57 6f 72 6b 73 20 66 6f 72 20 63 6f 6d 70 69 6c  Works for compil
1e30: 65 72 73 20 6f 74 68 65 72 20 74 68 61 6e 20 4c  ers other than L
1e40: 4c 56 4d 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20  LVM */.# define 
1e50: 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
1e60: 52 28 58 29 20 20 28 28 76 6f 69 64 2a 29 26 28  R(X)  ((void*)&(
1e70: 28 63 68 61 72 2a 29 30 29 5b 58 5d 29 0a 23 20  (char*)0)[X]).# 
1e80: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54  define SQLITE_PT
1e90: 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69  R_TO_INT(X)  ((i
1ea0: 6e 74 29 28 28 28 63 68 61 72 2a 29 58 29 2d 28  nt)(((char*)X)-(
1eb0: 63 68 61 72 2a 29 30 29 29 0a 23 65 6c 69 66 20  char*)0)).#elif 
1ec0: 64 65 66 69 6e 65 64 28 48 41 56 45 5f 53 54 44  defined(HAVE_STD
1ed0: 49 4e 54 5f 48 29 20 20 20 2f 2a 20 55 73 65 20  INT_H)   /* Use 
1ee0: 74 68 69 73 20 63 61 73 65 20 69 66 20 77 65 20  this case if we 
1ef0: 68 61 76 65 20 41 4e 53 49 20 68 65 61 64 65 72  have ANSI header
1f00: 73 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51  s */.# define SQ
1f10: 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28  LITE_INT_TO_PTR(
1f20: 58 29 20 20 28 28 76 6f 69 64 2a 29 28 69 6e 74  X)  ((void*)(int
1f30: 70 74 72 5f 74 29 28 58 29 29 0a 23 20 64 65 66  ptr_t)(X)).# def
1f40: 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54  ine SQLITE_PTR_T
1f50: 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29  O_INT(X)  ((int)
1f60: 28 69 6e 74 70 74 72 5f 74 29 28 58 29 29 0a 23  (intptr_t)(X)).#
1f70: 65 6c 73 65 20 20 20 20 20 20 20 20 20 20 20 20  else            
1f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f90: 20 47 65 6e 65 72 61 74 65 73 20 61 20 77 61 72   Generates a war
1fa0: 6e 69 6e 67 20 2d 20 62 75 74 20 69 74 20 61 6c  ning - but it al
1fb0: 77 61 79 73 20 77 6f 72 6b 73 20 2a 2f 0a 23 20  ways works */.# 
1fc0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e  define SQLITE_IN
1fd0: 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76  T_TO_PTR(X)  ((v
1fe0: 6f 69 64 2a 29 28 58 29 29 0a 23 20 64 65 66 69  oid*)(X)).# defi
1ff0: 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f  ne SQLITE_PTR_TO
2000: 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28  _INT(X)  ((int)(
2010: 58 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  X)).#endif../*.*
2020: 2a 20 41 20 6d 61 63 72 6f 20 74 6f 20 68 69 6e  * A macro to hin
2030: 74 20 74 6f 20 74 68 65 20 63 6f 6d 70 69 6c 65  t to the compile
2040: 72 20 74 68 61 74 20 61 20 66 75 6e 63 74 69 6f  r that a functio
2050: 6e 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 0a  n should not be.
2060: 2a 2a 20 69 6e 6c 69 6e 65 64 2e 0a 2a 2f 0a 23  ** inlined..*/.#
2070: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55  if defined(__GNU
2080: 43 5f 5f 29 0a 23 20 20 64 65 66 69 6e 65 20 53  C__).#  define S
2090: 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20  QLITE_NOINLINE  
20a0: 5f 5f 61 74 74 72 69 62 75 74 65 5f 5f 28 28 6e  __attribute__((n
20b0: 6f 69 6e 6c 69 6e 65 29 29 0a 23 65 6c 69 66 20  oinline)).#elif 
20c0: 64 65 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52  defined(_MSC_VER
20d0: 29 20 26 26 20 5f 4d 53 43 5f 56 45 52 3e 3d 31  ) && _MSC_VER>=1
20e0: 33 31 30 0a 23 20 20 64 65 66 69 6e 65 20 53 51  310.#  define SQ
20f0: 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20 5f  LITE_NOINLINE  _
2100: 5f 64 65 63 6c 73 70 65 63 28 6e 6f 69 6e 6c 69  _declspec(noinli
2110: 6e 65 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66  ne).#else.#  def
2120: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c  ine SQLITE_NOINL
2130: 49 4e 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  INE.#endif../*.*
2140: 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 61 74  * Make sure that
2150: 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 69 6e   the compiler in
2160: 74 72 69 6e 73 69 63 73 20 77 65 20 64 65 73 69  trinsics we desi
2170: 72 65 20 61 72 65 20 65 6e 61 62 6c 65 64 20 77  re are enabled w
2180: 68 65 6e 0a 2a 2a 20 63 6f 6d 70 69 6c 69 6e 67  hen.** compiling
2190: 20 77 69 74 68 20 61 6e 20 61 70 70 72 6f 70 72   with an appropr
21a0: 69 61 74 65 20 76 65 72 73 69 6f 6e 20 6f 66 20  iate version of 
21b0: 4d 53 56 43 20 75 6e 6c 65 73 73 20 70 72 65 76  MSVC unless prev
21c0: 65 6e 74 65 64 20 62 79 0a 2a 2a 20 74 68 65 20  ented by.** the 
21d0: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 49  SQLITE_DISABLE_I
21e0: 4e 54 52 49 4e 53 49 43 20 64 65 66 69 6e 65 2e  NTRINSIC define.
21f0: 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
2200: 28 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f  (SQLITE_DISABLE_
2210: 49 4e 54 52 49 4e 53 49 43 29 0a 23 20 20 69 66  INTRINSIC).#  if
2220: 20 64 65 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45   defined(_MSC_VE
2230: 52 29 20 26 26 20 5f 4d 53 43 5f 56 45 52 3e 3d  R) && _MSC_VER>=
2240: 31 34 30 30 0a 23 20 20 20 20 69 66 20 21 64 65  1400.#    if !de
2250: 66 69 6e 65 64 28 5f 57 49 4e 33 32 5f 57 43 45  fined(_WIN32_WCE
2260: 29 0a 23 20 20 20 20 20 20 69 6e 63 6c 75 64 65  ).#      include
2270: 20 3c 69 6e 74 72 69 6e 2e 68 3e 0a 23 20 20 20   <intrin.h>.#   
2280: 20 20 20 70 72 61 67 6d 61 20 69 6e 74 72 69 6e     pragma intrin
2290: 73 69 63 28 5f 62 79 74 65 73 77 61 70 5f 75 73  sic(_byteswap_us
22a0: 68 6f 72 74 29 0a 23 20 20 20 20 20 20 70 72 61  hort).#      pra
22b0: 67 6d 61 20 69 6e 74 72 69 6e 73 69 63 28 5f 62  gma intrinsic(_b
22c0: 79 74 65 73 77 61 70 5f 75 6c 6f 6e 67 29 0a 23  yteswap_ulong).#
22d0: 20 20 20 20 20 20 70 72 61 67 6d 61 20 69 6e 74        pragma int
22e0: 72 69 6e 73 69 63 28 5f 52 65 61 64 57 72 69 74  rinsic(_ReadWrit
22f0: 65 42 61 72 72 69 65 72 29 0a 23 20 20 20 20 65  eBarrier).#    e
2300: 6c 73 65 0a 23 20 20 20 20 20 20 69 6e 63 6c 75  lse.#      inclu
2310: 64 65 20 3c 63 6d 6e 69 6e 74 72 69 6e 2e 68 3e  de <cmnintrin.h>
2320: 0a 23 20 20 20 20 65 6e 64 69 66 0a 23 20 20 65  .#    endif.#  e
2330: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ndif.#endif../*.
2340: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 54 48  ** The SQLITE_TH
2350: 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f 20 6d  READSAFE macro m
2360: 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20 61  ust be defined a
2370: 73 20 30 2c 20 31 2c 20 6f 72 20 32 2e 0a 2a 2a  s 0, 1, or 2..**
2380: 20 30 20 6d 65 61 6e 73 20 6d 75 74 65 78 65 73   0 means mutexes
2390: 20 61 72 65 20 70 65 72 6d 61 6e 65 6e 74 6c 79   are permanently
23a0: 20 64 69 73 61 62 6c 65 20 61 6e 64 20 74 68 65   disable and the
23b0: 20 6c 69 62 72 61 72 79 20 69 73 20 6e 65 76 65   library is neve
23c0: 72 0a 2a 2a 20 74 68 72 65 61 64 73 61 66 65 2e  r.** threadsafe.
23d0: 20 20 31 20 6d 65 61 6e 73 20 74 68 65 20 6c 69    1 means the li
23e0: 62 72 61 72 79 20 69 73 20 73 65 72 69 61 6c 69  brary is seriali
23f0: 7a 65 64 20 77 68 69 63 68 20 69 73 20 74 68 65  zed which is the
2400: 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c 65 76 65   highest.** leve
2410: 6c 20 6f 66 20 74 68 72 65 61 64 73 61 66 65 74  l of threadsafet
2420: 79 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65 20  y.  2 means the 
2430: 6c 69 62 72 61 72 79 20 69 73 20 6d 75 6c 74 69  library is multi
2440: 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c 74 69  threaded - multi
2450: 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73 20 63  ple.** threads c
2460: 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20 61 73  an use SQLite as
2470: 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77 6f 20   long as no two 
2480: 74 68 72 65 61 64 73 20 74 72 79 20 74 6f 20 75  threads try to u
2490: 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 64  se the same.** d
24a0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
24b0: 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65 20 74  on at the same t
24c0: 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65 72  ime..**.** Older
24d0: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
24e0: 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70 74 69  ite used an opti
24f0: 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46 45 20  onal THREADSAFE 
2500: 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73 75 70  macro..** We sup
2510: 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20 6c 65  port that for le
2520: 67 61 63 79 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  gacy..*/.#if !de
2530: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 48 52  fined(SQLITE_THR
2540: 45 41 44 53 41 46 45 29 0a 23 20 69 66 20 64 65  EADSAFE).# if de
2550: 66 69 6e 65 64 28 54 48 52 45 41 44 53 41 46 45  fined(THREADSAFE
2560: 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  ).#   define SQL
2570: 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 20 54  ITE_THREADSAFE T
2580: 48 52 45 41 44 53 41 46 45 0a 23 20 65 6c 73 65  HREADSAFE.# else
2590: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
25a0: 54 45 5f 54 48 52 45 41 44 53 41 46 45 20 31 20  TE_THREADSAFE 1 
25b0: 2f 2a 20 49 4d 50 3a 20 52 2d 30 37 32 37 32 2d  /* IMP: R-07272-
25c0: 32 32 33 30 39 20 2a 2f 0a 23 20 65 6e 64 69 66  22309 */.# endif
25d0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50  .#endif../*.** P
25e0: 6f 77 65 72 73 61 66 65 20 6f 76 65 72 77 72 69  owersafe overwri
25f0: 74 65 20 69 73 20 6f 6e 20 62 79 20 64 65 66 61  te is on by defa
2600: 75 6c 74 2e 20 20 42 75 74 20 63 61 6e 20 62 65  ult.  But can be
2610: 20 74 75 72 6e 65 64 20 6f 66 66 20 75 73 69 6e   turned off usin
2620: 67 0a 2a 2a 20 74 68 65 20 2d 44 53 51 4c 49 54  g.** the -DSQLIT
2630: 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56 45 52  E_POWERSAFE_OVER
2640: 57 52 49 54 45 3d 30 20 63 6f 6d 6d 61 6e 64 2d  WRITE=0 command-
2650: 6c 69 6e 65 20 6f 70 74 69 6f 6e 2e 0a 2a 2f 0a  line option..*/.
2660: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 50  #ifndef SQLITE_P
2670: 4f 57 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49  OWERSAFE_OVERWRI
2680: 54 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  TE.# define SQLI
2690: 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56 45  TE_POWERSAFE_OVE
26a0: 52 57 52 49 54 45 20 31 0a 23 65 6e 64 69 66 0a  RWRITE 1.#endif.
26b0: 0a 2f 2a 0a 2a 2a 20 45 56 49 44 45 4e 43 45 2d  ./*.** EVIDENCE-
26c0: 4f 46 3a 20 52 2d 32 35 37 31 35 2d 33 37 30 37  OF: R-25715-3707
26d0: 32 20 4d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  2 Memory allocat
26e0: 69 6f 6e 20 73 74 61 74 69 73 74 69 63 73 20 61  ion statistics a
26f0: 72 65 20 65 6e 61 62 6c 65 64 20 62 79 0a 2a 2a  re enabled by.**
2700: 20 64 65 66 61 75 6c 74 20 75 6e 6c 65 73 73 20   default unless 
2710: 53 51 4c 69 74 65 20 69 73 20 63 6f 6d 70 69 6c  SQLite is compil
2720: 65 64 20 77 69 74 68 20 53 51 4c 49 54 45 5f 44  ed with SQLITE_D
2730: 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53  EFAULT_MEMSTATUS
2740: 3d 30 20 69 6e 0a 2a 2a 20 77 68 69 63 68 20 63  =0 in.** which c
2750: 61 73 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ase memory alloc
2760: 61 74 69 6f 6e 20 73 74 61 74 69 73 74 69 63 73  ation statistics
2770: 20 61 72 65 20 64 69 73 61 62 6c 65 64 20 62 79   are disabled by
2780: 20 64 65 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66   default..*/.#if
2790: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
27a0: 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54  _DEFAULT_MEMSTAT
27b0: 55 53 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  US).# define SQL
27c0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53  ITE_DEFAULT_MEMS
27d0: 54 41 54 55 53 20 31 0a 23 65 6e 64 69 66 0a 0a  TATUS 1.#endif..
27e0: 2f 2a 0a 2a 2a 20 45 78 61 63 74 6c 79 20 6f 6e  /*.** Exactly on
27f0: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
2800: 6e 67 20 6d 61 63 72 6f 73 20 6d 75 73 74 20 62  ng macros must b
2810: 65 20 64 65 66 69 6e 65 64 20 69 6e 20 6f 72 64  e defined in ord
2820: 65 72 20 74 6f 0a 2a 2a 20 73 70 65 63 69 66 79  er to.** specify
2830: 20 77 68 69 63 68 20 6d 65 6d 6f 72 79 20 61 6c   which memory al
2840: 6c 6f 63 61 74 69 6f 6e 20 73 75 62 73 79 73 74  location subsyst
2850: 65 6d 20 74 6f 20 75 73 65 2e 0a 2a 2a 0a 2a 2a  em to use..**.**
2860: 20 20 20 20 20 53 51 4c 49 54 45 5f 53 59 53 54       SQLITE_SYST
2870: 45 4d 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20  EM_MALLOC       
2880: 20 20 20 2f 2f 20 55 73 65 20 6e 6f 72 6d 61 6c     // Use normal
2890: 20 73 79 73 74 65 6d 20 6d 61 6c 6c 6f 63 28 29   system malloc()
28a0: 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 57  .**     SQLITE_W
28b0: 49 4e 33 32 5f 4d 41 4c 4c 4f 43 20 20 20 20 20  IN32_MALLOC     
28c0: 20 20 20 20 20 20 2f 2f 20 55 73 65 20 57 69 6e        // Use Win
28d0: 33 32 20 6e 61 74 69 76 65 20 68 65 61 70 20 41  32 native heap A
28e0: 50 49 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45  PI.**     SQLITE
28f0: 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 20 20 20 20  _ZERO_MALLOC    
2900: 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20 61          // Use a
2910: 20 73 74 75 62 20 61 6c 6c 6f 63 61 74 6f 72 20   stub allocator 
2920: 74 68 61 74 20 61 6c 77 61 79 73 20 66 61 69 6c  that always fail
2930: 73 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f  s.**     SQLITE_
2940: 4d 45 4d 44 45 42 55 47 20 20 20 20 20 20 20 20  MEMDEBUG        
2950: 20 20 20 20 20 20 20 2f 2f 20 44 65 62 75 67 67         // Debugg
2960: 69 6e 67 20 76 65 72 73 69 6f 6e 20 6f 66 20 73  ing version of s
2970: 79 73 74 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a  ystem malloc().*
2980: 2a 0a 2a 2a 20 4f 6e 20 57 69 6e 64 6f 77 73 2c  *.** On Windows,
2990: 20 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f 57   if the SQLITE_W
29a0: 49 4e 33 32 5f 4d 41 4c 4c 4f 43 5f 56 41 4c 49  IN32_MALLOC_VALI
29b0: 44 41 54 45 20 6d 61 63 72 6f 20 69 73 20 64 65  DATE macro is de
29c0: 66 69 6e 65 64 20 61 6e 64 20 74 68 65 0a 2a 2a  fined and the.**
29d0: 20 61 73 73 65 72 74 28 29 20 6d 61 63 72 6f 20   assert() macro 
29e0: 69 73 20 65 6e 61 62 6c 65 64 2c 20 65 61 63 68  is enabled, each
29f0: 20 63 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20 57   call into the W
2a00: 69 6e 33 32 20 6e 61 74 69 76 65 20 68 65 61 70  in32 native heap
2a10: 20 73 75 62 73 79 73 74 65 6d 0a 2a 2a 20 77 69   subsystem.** wi
2a20: 6c 6c 20 63 61 75 73 65 20 48 65 61 70 56 61 6c  ll cause HeapVal
2a30: 69 64 61 74 65 20 74 6f 20 62 65 20 63 61 6c 6c  idate to be call
2a40: 65 64 2e 20 20 49 66 20 68 65 61 70 20 76 61 6c  ed.  If heap val
2a50: 69 64 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 66  idation should f
2a60: 61 69 6c 2c 20 61 6e 0a 2a 2a 20 61 73 73 65 72  ail, an.** asser
2a70: 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 74 72 69  tion will be tri
2a80: 67 67 65 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66  ggered..**.** If
2a90: 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 61 62 6f   none of the abo
2aa0: 76 65 20 61 72 65 20 64 65 66 69 6e 65 64 2c 20  ve are defined, 
2ab0: 74 68 65 6e 20 73 65 74 20 53 51 4c 49 54 45 5f  then set SQLITE_
2ac0: 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 61 73  SYSTEM_MALLOC as
2ad0: 0a 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74 2e  .** the default.
2ae0: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
2af0: 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41  SQLITE_SYSTEM_MA
2b00: 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69  LLOC) \.  + defi
2b10: 6e 65 64 28 53 51 4c 49 54 45 5f 57 49 4e 33 32  ned(SQLITE_WIN32
2b20: 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64  _MALLOC) \.  + d
2b30: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 5a 45  efined(SQLITE_ZE
2b40: 52 4f 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b  RO_MALLOC) \.  +
2b50: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2b60: 4d 45 4d 44 45 42 55 47 29 3e 31 0a 23 20 65 72  MEMDEBUG)>1.# er
2b70: 72 6f 72 20 22 54 77 6f 20 6f 72 20 6d 6f 72 65  ror "Two or more
2b80: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
2b90: 67 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 63  g compile-time c
2ba0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74  onfiguration opt
2bb0: 69 6f 6e 73 5c 0a 20 61 72 65 20 64 65 66 69 6e  ions\. are defin
2bc0: 65 64 20 62 75 74 20 61 74 20 6d 6f 73 74 20 6f  ed but at most o
2bd0: 6e 65 20 69 73 20 61 6c 6c 6f 77 65 64 3a 5c 0a  ne is allowed:\.
2be0: 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d   SQLITE_SYSTEM_M
2bf0: 41 4c 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 57 49  ALLOC, SQLITE_WI
2c00: 4e 33 32 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c 49  N32_MALLOC, SQLI
2c10: 54 45 5f 4d 45 4d 44 45 42 55 47 2c 5c 0a 20 53  TE_MEMDEBUG,\. S
2c20: 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f  QLITE_ZERO_MALLO
2c30: 43 22 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65  C".#endif.#if de
2c40: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53  fined(SQLITE_SYS
2c50: 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20  TEM_MALLOC) \.  
2c60: 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  + defined(SQLITE
2c70: 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c  _WIN32_MALLOC) \
2c80: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
2c90: 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29  ITE_ZERO_MALLOC)
2ca0: 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53   \.  + defined(S
2cb0: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3d  QLITE_MEMDEBUG)=
2cc0: 3d 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  =0.# define SQLI
2cd0: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
2ce0: 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   1.#endif../*.**
2cf0: 20 49 66 20 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f   If SQLITE_MALLO
2d00: 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 20 69 73 20  C_SOFT_LIMIT is 
2d10: 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74  not zero, then t
2d20: 72 79 20 74 6f 20 6b 65 65 70 20 74 68 65 0a 2a  ry to keep the.*
2d30: 2a 20 73 69 7a 65 73 20 6f 66 20 6d 65 6d 6f 72  * sizes of memor
2d40: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 62 65  y allocations be
2d50: 6c 6f 77 20 74 68 69 73 20 76 61 6c 75 65 20 77  low this value w
2d60: 68 65 72 65 20 70 6f 73 73 69 62 6c 65 2e 0a 2a  here possible..*
2d70: 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  /.#if !defined(S
2d80: 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46  QLITE_MALLOC_SOF
2d90: 54 5f 4c 49 4d 49 54 29 0a 23 20 64 65 66 69 6e  T_LIMIT).# defin
2da0: 65 20 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f  e SQLITE_MALLOC_
2db0: 53 4f 46 54 5f 4c 49 4d 49 54 20 31 30 32 34 0a  SOFT_LIMIT 1024.
2dc0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 65  #endif../*.** We
2dd0: 20 6e 65 65 64 20 74 6f 20 64 65 66 69 6e 65 20   need to define 
2de0: 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 61 73  _XOPEN_SOURCE as
2df0: 20 66 6f 6c 6c 6f 77 73 20 69 6e 20 6f 72 64 65   follows in orde
2e00: 72 20 74 6f 20 65 6e 61 62 6c 65 0a 2a 2a 20 72  r to enable.** r
2e10: 65 63 75 72 73 69 76 65 20 6d 75 74 65 78 65 73  ecursive mutexes
2e20: 20 6f 6e 20 6d 6f 73 74 20 55 6e 69 78 20 73 79   on most Unix sy
2e30: 73 74 65 6d 73 20 61 6e 64 20 66 63 68 6d 6f 64  stems and fchmod
2e40: 28 29 20 6f 6e 20 4f 70 65 6e 42 53 44 2e 0a 2a  () on OpenBSD..*
2e50: 2a 20 42 75 74 20 5f 58 4f 50 45 4e 5f 53 4f 55  * But _XOPEN_SOU
2e60: 52 43 45 20 64 65 66 69 6e 65 20 63 61 75 73 65  RCE define cause
2e70: 73 20 70 72 6f 62 6c 65 6d 73 20 66 6f 72 20 4d  s problems for M
2e80: 61 63 20 4f 53 20 58 2c 20 73 6f 20 6f 6d 69 74  ac OS X, so omit
2e90: 0a 2a 2a 20 69 74 2e 0a 2a 2f 0a 23 69 66 20 21  .** it..*/.#if !
2ea0: 64 65 66 69 6e 65 64 28 5f 58 4f 50 45 4e 5f 53  defined(_XOPEN_S
2eb0: 4f 55 52 43 45 29 20 26 26 20 21 64 65 66 69 6e  OURCE) && !defin
2ec0: 65 64 28 5f 5f 44 41 52 57 49 4e 5f 5f 29 20 26  ed(__DARWIN__) &
2ed0: 26 20 21 64 65 66 69 6e 65 64 28 5f 5f 41 50 50  & !defined(__APP
2ee0: 4c 45 5f 5f 29 0a 23 20 20 64 65 66 69 6e 65 20  LE__).#  define 
2ef0: 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 36 30  _XOPEN_SOURCE 60
2f00: 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
2f10: 4e 44 45 42 55 47 20 61 6e 64 20 53 51 4c 49 54  NDEBUG and SQLIT
2f20: 45 5f 44 45 42 55 47 20 61 72 65 20 6f 70 70 6f  E_DEBUG are oppo
2f30: 73 69 74 65 73 2e 20 20 49 74 20 73 68 6f 75 6c  sites.  It shoul
2f40: 64 20 61 6c 77 61 79 73 20 62 65 20 74 72 75 65  d always be true
2f50: 20 74 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65 64   that.** defined
2f60: 28 4e 44 45 42 55 47 29 3d 3d 21 64 65 66 69 6e  (NDEBUG)==!defin
2f70: 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
2f80: 2e 20 20 49 66 20 74 68 69 73 20 69 73 20 6e 6f  .  If this is no
2f90: 74 20 63 75 72 72 65 6e 74 6c 79 20 74 72 75 65  t currently true
2fa0: 2c 0a 2a 2a 20 6d 61 6b 65 20 69 74 20 74 72 75  ,.** make it tru
2fb0: 65 20 62 79 20 64 65 66 69 6e 69 6e 67 20 6f 72  e by defining or
2fc0: 20 75 6e 64 65 66 69 6e 69 6e 67 20 4e 44 45 42   undefining NDEB
2fd0: 55 47 2e 0a 2a 2a 0a 2a 2a 20 53 65 74 74 69 6e  UG..**.** Settin
2fe0: 67 20 4e 44 45 42 55 47 20 6d 61 6b 65 73 20 74  g NDEBUG makes t
2ff0: 68 65 20 63 6f 64 65 20 73 6d 61 6c 6c 65 72 20  he code smaller 
3000: 61 6e 64 20 66 61 73 74 65 72 20 62 79 20 64 69  and faster by di
3010: 73 61 62 6c 69 6e 67 20 74 68 65 0a 2a 2a 20 61  sabling the.** a
3020: 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
3030: 74 73 20 69 6e 20 74 68 65 20 63 6f 64 65 2e 20  ts in the code. 
3040: 20 53 6f 20 77 65 20 77 61 6e 74 20 74 68 65 20   So we want the 
3050: 64 65 66 61 75 6c 74 20 61 63 74 69 6f 6e 0a 2a  default action.*
3060: 2a 20 74 6f 20 62 65 20 66 6f 72 20 4e 44 45 42  * to be for NDEB
3070: 55 47 20 74 6f 20 62 65 20 73 65 74 20 61 6e 64  UG to be set and
3080: 20 4e 44 45 42 55 47 20 74 6f 20 62 65 20 75 6e   NDEBUG to be un
3090: 64 65 66 69 6e 65 64 20 6f 6e 6c 79 20 69 66 20  defined only if 
30a0: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2a 2a 20  SQLITE_DEBUG.** 
30b0: 69 73 20 73 65 74 2e 20 20 54 68 75 73 20 4e 44  is set.  Thus ND
30c0: 45 42 55 47 20 62 65 63 6f 6d 65 73 20 61 6e 20  EBUG becomes an 
30d0: 6f 70 74 2d 69 6e 20 72 61 74 68 65 72 20 74 68  opt-in rather th
30e0: 61 6e 20 61 6e 20 6f 70 74 2d 6f 75 74 0a 2a 2a  an an opt-out.**
30f0: 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 23 69 66   feature..*/.#if
3100: 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47   !defined(NDEBUG
3110: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
3120: 4c 49 54 45 5f 44 45 42 55 47 29 0a 23 20 64 65  LITE_DEBUG).# de
3130: 66 69 6e 65 20 4e 44 45 42 55 47 20 31 0a 23 65  fine NDEBUG 1.#e
3140: 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64  ndif.#if defined
3150: 28 4e 44 45 42 55 47 29 20 26 26 20 64 65 66 69  (NDEBUG) && defi
3160: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
3170: 29 0a 23 20 75 6e 64 65 66 20 4e 44 45 42 55 47  ).# undef NDEBUG
3180: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45  .#endif../*.** E
3190: 6e 61 62 6c 65 20 53 51 4c 49 54 45 5f 45 4e 41  nable SQLITE_ENA
31a0: 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d  BLE_EXPLAIN_COMM
31b0: 45 4e 54 53 20 69 66 20 53 51 4c 49 54 45 5f 44  ENTS if SQLITE_D
31c0: 45 42 55 47 20 69 73 20 74 75 72 6e 65 64 20 6f  EBUG is turned o
31d0: 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  n..*/.#if !defin
31e0: 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
31f0: 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54  _EXPLAIN_COMMENT
3200: 53 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51  S) && defined(SQ
3210: 4c 49 54 45 5f 44 45 42 55 47 29 0a 23 20 64 65  LITE_DEBUG).# de
3220: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  fine SQLITE_ENAB
3230: 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45  LE_EXPLAIN_COMME
3240: 4e 54 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  NTS 1.#endif../*
3250: 0a 2a 2a 20 54 68 65 20 74 65 73 74 63 61 73 65  .** The testcase
3260: 28 29 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  () macro is used
3270: 20 74 6f 20 61 69 64 20 69 6e 20 63 6f 76 65 72   to aid in cover
3280: 61 67 65 20 74 65 73 74 69 6e 67 2e 20 20 57 68  age testing.  Wh
3290: 65 6e 0a 2a 2a 20 64 6f 69 6e 67 20 63 6f 76 65  en.** doing cove
32a0: 72 61 67 65 20 74 65 73 74 69 6e 67 2c 20 74 68  rage testing, th
32b0: 65 20 63 6f 6e 64 69 74 69 6f 6e 20 69 6e 73 69  e condition insi
32c0: 64 65 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  de the argument 
32d0: 74 6f 0a 2a 2a 20 74 65 73 74 63 61 73 65 28 29  to.** testcase()
32e0: 20 6d 75 73 74 20 62 65 20 65 76 61 6c 75 61 74   must be evaluat
32f0: 65 64 20 62 6f 74 68 20 74 72 75 65 20 61 6e 64  ed both true and
3300: 20 66 61 6c 73 65 20 69 6e 20 6f 72 64 65 72 20   false in order 
3310: 74 6f 0a 2a 2a 20 67 65 74 20 66 75 6c 6c 20 62  to.** get full b
3320: 72 61 6e 63 68 20 63 6f 76 65 72 61 67 65 2e 20  ranch coverage. 
3330: 20 54 68 65 20 74 65 73 74 63 61 73 65 28 29 20   The testcase() 
3340: 6d 61 63 72 6f 20 69 73 20 69 6e 73 65 72 74 65  macro is inserte
3350: 64 0a 2a 2a 20 74 6f 20 68 65 6c 70 20 65 6e 73  d.** to help ens
3360: 75 72 65 20 61 64 65 71 75 61 74 65 20 74 65 73  ure adequate tes
3370: 74 20 63 6f 76 65 72 61 67 65 20 69 6e 20 70 6c  t coverage in pl
3380: 61 63 65 73 20 77 68 65 72 65 20 73 69 6d 70 6c  aces where simpl
3390: 65 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 2f 64  e.** condition/d
33a0: 65 63 69 73 69 6f 6e 20 63 6f 76 65 72 61 67 65  ecision coverage
33b0: 20 69 73 20 69 6e 61 64 65 71 75 61 74 65 2e 20   is inadequate. 
33c0: 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 65   For example, te
33d0: 73 74 63 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20  stcase().** can 
33e0: 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20  be used to make 
33f0: 73 75 72 65 20 62 6f 75 6e 64 61 72 79 20 76 61  sure boundary va
3400: 6c 75 65 73 20 61 72 65 20 74 65 73 74 65 64 2e  lues are tested.
3410: 20 20 46 6f 72 0a 2a 2a 20 62 69 74 6d 61 73 6b    For.** bitmask
3420: 20 74 65 73 74 73 2c 20 74 65 73 74 63 61 73 65   tests, testcase
3430: 28 29 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  () can be used t
3440: 6f 20 6d 61 6b 65 20 73 75 72 65 20 65 61 63 68  o make sure each
3450: 20 62 69 74 0a 2a 2a 20 69 73 20 73 69 67 6e 69   bit.** is signi
3460: 66 69 63 61 6e 74 20 61 6e 64 20 75 73 65 64 20  ficant and used 
3470: 61 74 20 6c 65 61 73 74 20 6f 6e 63 65 2e 20 20  at least once.  
3480: 4f 6e 20 73 77 69 74 63 68 20 73 74 61 74 65 6d  On switch statem
3490: 65 6e 74 73 0a 2a 2a 20 77 68 65 72 65 20 6d 75  ents.** where mu
34a0: 6c 74 69 70 6c 65 20 63 61 73 65 73 20 67 6f 20  ltiple cases go 
34b0: 74 6f 20 74 68 65 20 73 61 6d 65 20 62 6c 6f 63  to the same bloc
34c0: 6b 20 6f 66 20 63 6f 64 65 2c 20 74 65 73 74 63  k of code, testc
34d0: 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20 69 6e 73  ase().** can ins
34e0: 75 72 65 20 74 68 61 74 20 61 6c 6c 20 63 61 73  ure that all cas
34f0: 65 73 20 61 72 65 20 65 76 61 6c 75 61 74 65 64  es are evaluated
3500: 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ..**.*/.#ifdef S
3510: 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54  QLITE_COVERAGE_T
3520: 45 53 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  EST.  void sqlit
3530: 65 33 43 6f 76 65 72 61 67 65 28 69 6e 74 29 3b  e3Coverage(int);
3540: 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74 63 61  .# define testca
3550: 73 65 28 58 29 20 20 69 66 28 20 58 20 29 7b 20  se(X)  if( X ){ 
3560: 73 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65 28  sqlite3Coverage(
3570: 5f 5f 4c 49 4e 45 5f 5f 29 3b 20 7d 0a 23 65 6c  __LINE__); }.#el
3580: 73 65 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74  se.# define test
3590: 63 61 73 65 28 58 29 0a 23 65 6e 64 69 66 0a 0a  case(X).#endif..
35a0: 2f 2a 0a 2a 2a 20 54 68 65 20 54 45 53 54 4f 4e  /*.** The TESTON
35b0: 4c 59 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  LY macro is used
35c0: 20 74 6f 20 65 6e 63 6c 6f 73 65 20 76 61 72 69   to enclose vari
35d0: 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e  able declaration
35e0: 73 20 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 62 69  s or.** other bi
35f0: 74 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  ts of code that 
3600: 61 72 65 20 6e 65 65 64 65 64 20 74 6f 20 73 75  are needed to su
3610: 70 70 6f 72 74 20 74 68 65 20 61 72 67 75 6d 65  pport the argume
3620: 6e 74 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74 65  nts.** within te
3630: 73 74 63 61 73 65 28 29 20 61 6e 64 20 61 73 73  stcase() and ass
3640: 65 72 74 28 29 20 6d 61 63 72 6f 73 2e 0a 2a 2f  ert() macros..*/
3650: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44  .#if !defined(ND
3660: 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64  EBUG) || defined
3670: 28 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45  (SQLITE_COVERAGE
3680: 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20  _TEST).# define 
3690: 54 45 53 54 4f 4e 4c 59 28 58 29 20 20 58 0a 23  TESTONLY(X)  X.#
36a0: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 54 45  else.# define TE
36b0: 53 54 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66  STONLY(X).#endif
36c0: 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 74 69 6d 65  ../*.** Sometime
36d0: 73 20 77 65 20 6e 65 65 64 20 61 20 73 6d 61 6c  s we need a smal
36e0: 6c 20 61 6d 6f 75 6e 74 20 6f 66 20 63 6f 64 65  l amount of code
36f0: 20 73 75 63 68 20 61 73 20 61 20 76 61 72 69 61   such as a varia
3700: 62 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ble initializati
3710: 6f 6e 0a 2a 2a 20 74 6f 20 73 65 74 75 70 20 66  on.** to setup f
3720: 6f 72 20 61 20 6c 61 74 65 72 20 61 73 73 65 72  or a later asser
3730: 74 28 29 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  t() statement.  
3740: 57 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74  We do not want t
3750: 68 69 73 20 63 6f 64 65 20 74 6f 0a 2a 2a 20 61  his code to.** a
3760: 70 70 65 61 72 20 77 68 65 6e 20 61 73 73 65 72  ppear when asser
3770: 74 28 29 20 69 73 20 64 69 73 61 62 6c 65 64 2e  t() is disabled.
3780: 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
3790: 6d 61 63 72 6f 20 69 73 20 74 68 65 72 65 66 6f  macro is therefo
37a0: 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 6f  re.** used to co
37b0: 6e 74 61 69 6e 20 74 68 61 74 20 73 65 74 75 70  ntain that setup
37c0: 20 63 6f 64 65 2e 20 20 54 68 65 20 22 56 56 41   code.  The "VVA
37d0: 22 20 61 63 72 6f 6e 79 6d 20 73 74 61 6e 64 73  " acronym stands
37e0: 20 66 6f 72 0a 2a 2a 20 22 56 65 72 69 66 69 63   for.** "Verific
37f0: 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f  ation, Validatio
3800: 6e 2c 20 61 6e 64 20 41 63 63 72 65 64 69 74 61  n, and Accredita
3810: 74 69 6f 6e 22 2e 20 20 49 6e 20 6f 74 68 65 72  tion".  In other
3820: 20 77 6f 72 64 73 2c 20 74 68 65 0a 2a 2a 20 63   words, the.** c
3830: 6f 64 65 20 77 69 74 68 69 6e 20 56 56 41 5f 4f  ode within VVA_O
3840: 4e 4c 59 28 29 20 77 69 6c 6c 20 6f 6e 6c 79 20  NLY() will only 
3850: 72 75 6e 20 64 75 72 69 6e 67 20 76 65 72 69 66  run during verif
3860: 69 63 61 74 69 6f 6e 20 70 72 6f 63 65 73 73 65  ication processe
3870: 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44  s..*/.#ifndef ND
3880: 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20 56 56  EBUG.# define VV
3890: 41 5f 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c  A_ONLY(X)  X.#el
38a0: 73 65 0a 23 20 64 65 66 69 6e 65 20 56 56 41 5f  se.# define VVA_
38b0: 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a  ONLY(X).#endif..
38c0: 2f 2a 0a 2a 2a 20 54 68 65 20 41 4c 57 41 59 53  /*.** The ALWAYS
38d0: 20 61 6e 64 20 4e 45 56 45 52 20 6d 61 63 72 6f   and NEVER macro
38e0: 73 20 73 75 72 72 6f 75 6e 64 20 62 6f 6f 6c 65  s surround boole
38f0: 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 20 77  an expressions w
3900: 68 69 63 68 0a 2a 2a 20 61 72 65 20 69 6e 74 65  hich.** are inte
3910: 6e 64 65 64 20 74 6f 20 61 6c 77 61 79 73 20 62  nded to always b
3920: 65 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 2c  e true or false,
3930: 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20   respectively.  
3940: 53 75 63 68 0a 2a 2a 20 65 78 70 72 65 73 73 69  Such.** expressi
3950: 6f 6e 73 20 63 6f 75 6c 64 20 62 65 20 6f 6d 69  ons could be omi
3960: 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 63 6f  tted from the co
3970: 64 65 20 63 6f 6d 70 6c 65 74 65 6c 79 2e 20 20  de completely.  
3980: 42 75 74 20 74 68 65 79 0a 2a 2a 20 61 72 65 20  But they.** are 
3990: 69 6e 63 6c 75 64 65 64 20 69 6e 20 61 20 66 65  included in a fe
39a0: 77 20 63 61 73 65 73 20 69 6e 20 6f 72 64 65 72  w cases in order
39b0: 20 74 6f 20 65 6e 68 61 6e 63 65 20 74 68 65 20   to enhance the 
39c0: 72 65 73 69 6c 69 65 6e 63 65 0a 2a 2a 20 6f 66  resilience.** of
39d0: 20 53 51 4c 69 74 65 20 74 6f 20 75 6e 65 78 70   SQLite to unexp
39e0: 65 63 74 65 64 20 62 65 68 61 76 69 6f 72 20 2d  ected behavior -
39f0: 20 74 6f 20 6d 61 6b 65 20 74 68 65 20 63 6f 64   to make the cod
3a00: 65 20 22 73 65 6c 66 2d 68 65 61 6c 69 6e 67 22  e "self-healing"
3a10: 0a 2a 2a 20 6f 72 20 22 64 75 63 74 69 6c 65 22  .** or "ductile"
3a20: 20 72 61 74 68 65 72 20 74 68 61 6e 20 62 65 69   rather than bei
3a30: 6e 67 20 22 62 72 69 74 74 6c 65 22 20 61 6e 64  ng "brittle" and
3a40: 20 63 72 61 73 68 69 6e 67 20 61 74 20 74 68 65   crashing at the
3a50: 20 66 69 72 73 74 0a 2a 2a 20 68 69 6e 74 20 6f   first.** hint o
3a60: 66 20 75 6e 70 6c 61 6e 6e 65 64 20 62 65 68 61  f unplanned beha
3a70: 76 69 6f 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f  vior..**.** In o
3a80: 74 68 65 72 20 77 6f 72 64 73 2c 20 41 4c 57 41  ther words, ALWA
3a90: 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72 65  YS and NEVER are
3aa0: 20 61 64 64 65 64 20 66 6f 72 20 64 65 66 65 6e   added for defen
3ab0: 73 69 76 65 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  sive code..**.**
3ac0: 20 57 68 65 6e 20 64 6f 69 6e 67 20 63 6f 76 65   When doing cove
3ad0: 72 61 67 65 20 74 65 73 74 69 6e 67 20 41 4c 57  rage testing ALW
3ae0: 41 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72  AYS and NEVER ar
3af0: 65 20 68 61 72 64 2d 63 6f 64 65 64 20 74 6f 0a  e hard-coded to.
3b00: 2a 2a 20 62 65 20 74 72 75 65 20 61 6e 64 20 66  ** be true and f
3b10: 61 6c 73 65 20 73 6f 20 74 68 61 74 20 74 68 65  alse so that the
3b20: 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63 6f 64   unreachable cod
3b30: 65 20 74 68 65 79 20 73 70 65 63 69 66 79 20 77  e they specify w
3b40: 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 62 65 20 63 6f  ill.** not be co
3b50: 75 6e 74 65 64 20 61 73 20 75 6e 74 65 73 74 65  unted as unteste
3b60: 64 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 20 64  d code..*/.#if d
3b70: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f  efined(SQLITE_CO
3b80: 56 45 52 41 47 45 5f 54 45 53 54 29 20 7c 7c 20  VERAGE_TEST) || 
3b90: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d  defined(SQLITE_M
3ba0: 55 54 41 54 49 4f 4e 5f 54 45 53 54 29 0a 23 20  UTATION_TEST).# 
3bb0: 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29  define ALWAYS(X)
3bc0: 20 20 20 20 20 20 28 31 29 0a 23 20 64 65 66 69        (1).# defi
3bd0: 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20  ne NEVER(X)     
3be0: 20 20 28 30 29 0a 23 65 6c 69 66 20 21 64 65 66    (0).#elif !def
3bf0: 69 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64  ined(NDEBUG).# d
3c00: 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20  efine ALWAYS(X) 
3c10: 20 20 20 20 20 28 28 58 29 3f 31 3a 28 61 73 73       ((X)?1:(ass
3c20: 65 72 74 28 30 29 2c 30 29 29 0a 23 20 64 65 66  ert(0),0)).# def
3c30: 69 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20  ine NEVER(X)    
3c40: 20 20 20 28 28 58 29 3f 28 61 73 73 65 72 74 28     ((X)?(assert(
3c50: 30 29 2c 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23  0),1):0).#else.#
3c60: 20 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58   define ALWAYS(X
3c70: 29 20 20 20 20 20 20 28 58 29 0a 23 20 64 65 66  )      (X).# def
3c80: 69 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20  ine NEVER(X)    
3c90: 20 20 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f     (X).#endif../
3ca0: 2a 0a 2a 2a 20 53 6f 6d 65 20 6d 61 6c 6c 6f 63  *.** Some malloc
3cb0: 20 66 61 69 6c 75 72 65 73 20 61 72 65 20 6f 6e   failures are on
3cc0: 6c 79 20 70 6f 73 73 69 62 6c 65 20 69 66 20 53  ly possible if S
3cd0: 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c  QLITE_TEST_REALL
3ce0: 4f 43 5f 53 54 52 45 53 53 20 69 73 0a 2a 2a 20  OC_STRESS is.** 
3cf0: 64 65 66 69 6e 65 64 2e 20 20 57 65 20 6e 65 65  defined.  We nee
3d00: 64 20 74 6f 20 64 65 66 65 6e 64 20 61 67 61 69  d to defend agai
3d10: 6e 73 74 20 74 68 6f 73 65 20 66 61 69 6c 75 72  nst those failur
3d20: 65 73 20 77 68 65 6e 20 74 65 73 74 69 6e 67 20  es when testing 
3d30: 77 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 54  with.** SQLITE_T
3d40: 45 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45  EST_REALLOC_STRE
3d50: 53 53 2c 20 62 75 74 20 77 65 20 64 6f 6e 27 74  SS, but we don't
3d60: 20 77 61 6e 74 20 74 68 65 20 75 6e 72 65 61 63   want the unreac
3d70: 68 61 62 6c 65 20 62 72 61 6e 63 68 65 73 0a 2a  hable branches.*
3d80: 2a 20 64 75 72 69 6e 67 20 61 20 6e 6f 72 6d 61  * during a norma
3d90: 6c 20 62 75 69 6c 64 2e 20 20 54 68 65 20 66 6f  l build.  The fo
3da0: 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 63 61  llowing macro ca
3db0: 6e 20 62 65 20 75 73 65 64 20 74 6f 20 64 69 73  n be used to dis
3dc0: 61 62 6c 65 20 74 65 73 74 73 0a 2a 2a 20 74 68  able tests.** th
3dd0: 61 74 20 61 72 65 20 61 6c 77 61 79 73 20 66 61  at are always fa
3de0: 6c 73 65 20 65 78 63 65 70 74 20 77 68 65 6e 20  lse except when 
3df0: 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c  SQLITE_TEST_REAL
3e00: 4c 4f 43 5f 53 54 52 45 53 53 20 69 73 20 73 65  LOC_STRESS is se
3e10: 74 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  t..*/.#if define
3e20: 64 28 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45  d(SQLITE_TEST_RE
3e30: 41 4c 4c 4f 43 5f 53 54 52 45 53 53 29 0a 23 20  ALLOC_STRESS).# 
3e40: 64 65 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52  define ONLY_IF_R
3e50: 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29  EALLOC_STRESS(X)
3e60: 20 20 28 58 29 0a 23 65 6c 69 66 20 21 64 65 66    (X).#elif !def
3e70: 69 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64  ined(NDEBUG).# d
3e80: 65 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45  efine ONLY_IF_RE
3e90: 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20  ALLOC_STRESS(X) 
3ea0: 20 28 28 58 29 3f 28 61 73 73 65 72 74 28 30 29   ((X)?(assert(0)
3eb0: 2c 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64  ,1):0).#else.# d
3ec0: 65 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45  efine ONLY_IF_RE
3ed0: 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20  ALLOC_STRESS(X) 
3ee0: 20 28 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a   (0).#endif../*.
3ef0: 2a 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20  ** Declarations 
3f00: 75 73 65 64 20 66 6f 72 20 74 72 61 63 69 6e 67  used for tracing
3f10: 20 74 68 65 20 6f 70 65 72 61 74 69 6e 67 20 73   the operating s
3f20: 79 73 74 65 6d 20 69 6e 74 65 72 66 61 63 65 73  ystem interfaces
3f30: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
3f40: 28 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f 4f 53  (SQLITE_FORCE_OS
3f50: 5f 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e  _TRACE) || defin
3f60: 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20  ed(SQLITE_TEST) 
3f70: 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65  || \.    (define
3f80: 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
3f90: 26 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e  && SQLITE_OS_WIN
3fa0: 29 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73  ).  extern int s
3fb0: 71 6c 69 74 65 33 4f 53 54 72 61 63 65 3b 0a 23  qlite3OSTrace;.#
3fc0: 20 64 65 66 69 6e 65 20 4f 53 54 52 41 43 45 28   define OSTRACE(
3fd0: 58 29 20 20 20 20 20 20 20 20 20 20 69 66 28 20  X)          if( 
3fe0: 73 71 6c 69 74 65 33 4f 53 54 72 61 63 65 20 29  sqlite3OSTrace )
3ff0: 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69   sqlite3DebugPri
4000: 6e 74 66 20 58 0a 23 20 64 65 66 69 6e 65 20 53  ntf X.# define S
4010: 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52  QLITE_HAVE_OS_TR
4020: 41 43 45 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  ACE.#else.# defi
4030: 6e 65 20 4f 53 54 52 41 43 45 28 58 29 0a 23 20  ne OSTRACE(X).# 
4040: 75 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 48 41  undef  SQLITE_HA
4050: 56 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6e 64  VE_OS_TRACE.#end
4060: 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 73 20 74 68 65  if../*.** Is the
4070: 20 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28   sqlite3ErrName(
4080: 29 20 66 75 6e 63 74 69 6f 6e 20 6e 65 65 64 65  ) function neede
4090: 64 20 69 6e 20 74 68 65 20 62 75 69 6c 64 3f 20  d in the build? 
40a0: 20 43 75 72 72 65 6e 74 6c 79 2c 0a 2a 2a 20 69   Currently,.** i
40b0: 74 20 69 73 20 6e 65 65 64 65 64 20 62 79 20 22  t is needed by "
40c0: 6d 75 74 65 78 5f 77 33 32 2e 63 22 20 28 77 68  mutex_w32.c" (wh
40d0: 65 6e 20 64 65 62 75 67 67 69 6e 67 29 2c 20 22  en debugging), "
40e0: 6f 73 5f 77 69 6e 2e 63 22 20 28 77 68 65 6e 0a  os_win.c" (when.
40f0: 2a 2a 20 4f 53 54 52 41 43 45 20 69 73 20 65 6e  ** OSTRACE is en
4100: 61 62 6c 65 64 29 2c 20 61 6e 64 20 62 79 20 73  abled), and by s
4110: 65 76 65 72 61 6c 20 22 74 65 73 74 2a 2e 63 22  everal "test*.c"
4120: 20 66 69 6c 65 73 20 28 77 68 69 63 68 20 61 72   files (which ar
4130: 65 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 20 75 73  e.** compiled us
4140: 69 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 29  ing SQLITE_TEST)
4150: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
4160: 28 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f  (SQLITE_HAVE_OS_
4170: 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65  TRACE) || define
4180: 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c  d(SQLITE_TEST) |
4190: 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64  | \.    (defined
41a0: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26  (SQLITE_DEBUG) &
41b0: 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29  & SQLITE_OS_WIN)
41c0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
41d0: 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 0a 23  _NEED_ERR_NAME.#
41e0: 65 6c 73 65 0a 23 20 75 6e 64 65 66 20 20 53 51  else.# undef  SQ
41f0: 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41  LITE_NEED_ERR_NA
4200: 4d 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  ME.#endif../*.**
4210: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45   SQLITE_ENABLE_E
4220: 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20  XPLAIN_COMMENTS 
4230: 69 73 20 69 6e 63 6f 6d 70 61 74 69 62 6c 65 20  is incompatible 
4240: 77 69 74 68 20 53 51 4c 49 54 45 5f 4f 4d 49 54  with SQLITE_OMIT
4250: 5f 45 58 50 4c 41 49 4e 0a 2a 2f 0a 23 69 66 64  _EXPLAIN.*/.#ifd
4260: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45  ef SQLITE_OMIT_E
4270: 58 50 4c 41 49 4e 0a 23 20 75 6e 64 65 66 20 53  XPLAIN.# undef S
4280: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50  QLITE_ENABLE_EXP
4290: 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 0a 23 65  LAIN_COMMENTS.#e
42a0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  ndif../*.** Retu
42b0: 72 6e 20 74 72 75 65 20 28 6e 6f 6e 2d 7a 65 72  rn true (non-zer
42c0: 6f 29 20 69 66 20 74 68 65 20 69 6e 70 75 74 20  o) if the input 
42d0: 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68  is an integer th
42e0: 61 74 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 0a  at is too large.
42f0: 2a 2a 20 74 6f 20 66 69 74 20 69 6e 20 33 32 2d  ** to fit in 32-
4300: 62 69 74 73 2e 20 20 54 68 69 73 20 6d 61 63 72  bits.  This macr
4310: 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69 64 65  o is used inside
4320: 20 6f 66 20 76 61 72 69 6f 75 73 20 74 65 73 74   of various test
4330: 63 61 73 65 28 29 0a 2a 2a 20 6d 61 63 72 6f 73  case().** macros
4340: 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20   to verify that 
4350: 77 65 20 68 61 76 65 20 74 65 73 74 65 64 20 53  we have tested S
4360: 51 4c 69 74 65 20 66 6f 72 20 6c 61 72 67 65 2d  QLite for large-
4370: 66 69 6c 65 20 73 75 70 70 6f 72 74 2e 0a 2a 2f  file support..*/
4380: 0a 23 64 65 66 69 6e 65 20 49 53 5f 42 49 47 5f  .#define IS_BIG_
4390: 49 4e 54 28 58 29 20 20 28 28 28 58 29 26 7e 28  INT(X)  (((X)&~(
43a0: 69 36 34 29 30 78 66 66 66 66 66 66 66 66 29 21  i64)0xffffffff)!
43b0: 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d  =0)../*.** The m
43c0: 61 63 72 6f 20 75 6e 6c 69 6b 65 6c 79 28 29 20  acro unlikely() 
43d0: 69 73 20 61 20 68 69 6e 74 20 74 68 61 74 20 73  is a hint that s
43e0: 75 72 72 6f 75 6e 64 73 20 61 20 62 6f 6f 6c 65  urrounds a boole
43f0: 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e  an.** expression
4400: 20 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79   that is usually
4410: 20 66 61 6c 73 65 2e 20 20 4d 61 63 72 6f 20 6c   false.  Macro l
4420: 69 6b 65 6c 79 28 29 20 73 75 72 72 6f 75 6e 64  ikely() surround
4430: 73 0a 2a 2a 20 61 20 62 6f 6f 6c 65 61 6e 20 65  s.** a boolean e
4440: 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69  xpression that i
4450: 73 20 75 73 75 61 6c 6c 79 20 74 72 75 65 2e 20  s usually true. 
4460: 20 54 68 65 73 65 20 68 69 6e 74 73 20 63 6f 75   These hints cou
4470: 6c 64 2c 0a 2a 2a 20 69 6e 20 74 68 65 6f 72 79  ld,.** in theory
4480: 2c 20 62 65 20 75 73 65 64 20 62 79 20 74 68 65  , be used by the
4490: 20 63 6f 6d 70 69 6c 65 72 20 74 6f 20 67 65 6e   compiler to gen
44a0: 65 72 61 74 65 20 62 65 74 74 65 72 20 63 6f 64  erate better cod
44b0: 65 2c 20 62 75 74 0a 2a 2a 20 63 75 72 72 65 6e  e, but.** curren
44c0: 74 6c 79 20 74 68 65 79 20 61 72 65 20 6a 75 73  tly they are jus
44d0: 74 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 72 20 68  t comments for h
44e0: 75 6d 61 6e 20 72 65 61 64 65 72 73 2e 0a 2a 2f  uman readers..*/
44f0: 0a 23 64 65 66 69 6e 65 20 6c 69 6b 65 6c 79 28  .#define likely(
4500: 58 29 20 20 20 20 28 58 29 0a 23 64 65 66 69 6e  X)    (X).#defin
4510: 65 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20 20 28  e unlikely(X)  (
4520: 58 29 0a 0a 23 69 6e 63 6c 75 64 65 20 22 68 61  X)..#include "ha
4530: 73 68 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  sh.h".#include "
4540: 70 61 72 73 65 2e 68 22 0a 23 69 6e 63 6c 75 64  parse.h".#includ
4550: 65 20 3c 73 74 64 69 6f 2e 68 3e 0a 23 69 6e 63  e <stdio.h>.#inc
4560: 6c 75 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 0a  lude <stdlib.h>.
4570: 23 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67  #include <string
4580: 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 61 73  .h>.#include <as
4590: 73 65 72 74 2e 68 3e 0a 23 69 6e 63 6c 75 64 65  sert.h>.#include
45a0: 20 3c 73 74 64 64 65 66 2e 68 3e 0a 0a 2f 2a 0a   <stddef.h>../*.
45b0: 2a 2a 20 55 73 65 20 61 20 6d 61 63 72 6f 20 74  ** Use a macro t
45c0: 6f 20 72 65 70 6c 61 63 65 20 6d 65 6d 63 70 79  o replace memcpy
45d0: 28 29 20 69 66 20 63 6f 6d 70 69 6c 65 64 20 77  () if compiled w
45e0: 69 74 68 20 53 51 4c 49 54 45 5f 49 4e 4c 49 4e  ith SQLITE_INLIN
45f0: 45 5f 4d 45 4d 43 50 59 2e 0a 2a 2a 20 54 68 69  E_MEMCPY..** Thi
4600: 73 20 61 6c 6c 6f 77 73 20 62 65 74 74 65 72 20  s allows better 
4610: 6d 65 61 73 75 72 65 6d 65 6e 74 73 20 6f 66 20  measurements of 
4620: 77 68 65 72 65 20 6d 65 6d 63 70 79 28 29 20 69  where memcpy() i
4630: 73 20 75 73 65 64 20 77 68 65 6e 20 72 75 6e 6e  s used when runn
4640: 69 6e 67 0a 2a 2a 20 63 61 63 68 65 67 72 69 6e  ing.** cachegrin
4650: 64 2e 20 20 42 75 74 20 74 68 69 73 20 6d 61 63  d.  But this mac
4660: 72 6f 20 76 65 72 73 69 6f 6e 20 6f 66 20 6d 65  ro version of me
4670: 6d 63 70 79 28 29 20 69 73 20 76 65 72 79 20 73  mcpy() is very s
4680: 6c 6f 77 20 73 6f 20 69 74 0a 2a 2a 20 73 68 6f  low so it.** sho
4690: 75 6c 64 20 6e 6f 74 20 62 65 20 75 73 65 64 20  uld not be used 
46a0: 69 6e 20 70 72 6f 64 75 63 74 69 6f 6e 2e 20 20  in production.  
46b0: 54 68 69 73 20 69 73 20 61 20 70 65 72 66 6f 72  This is a perfor
46c0: 6d 61 6e 63 65 20 6d 65 61 73 75 72 65 6d 65 6e  mance measuremen
46d0: 74 0a 2a 2a 20 68 61 63 6b 20 6f 6e 6c 79 2e 0a  t.** hack only..
46e0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
46f0: 5f 49 4e 4c 49 4e 45 5f 4d 45 4d 43 50 59 0a 23  _INLINE_MEMCPY.#
4700: 20 64 65 66 69 6e 65 20 6d 65 6d 63 70 79 28 44   define memcpy(D
4710: 2c 53 2c 4e 29 20 7b 63 68 61 72 2a 78 78 64 3d  ,S,N) {char*xxd=
4720: 28 63 68 61 72 2a 29 28 44 29 3b 63 6f 6e 73 74  (char*)(D);const
4730: 20 63 68 61 72 2a 78 78 73 3d 28 63 6f 6e 73 74   char*xxs=(const
4740: 20 63 68 61 72 2a 29 28 53 29 3b 5c 0a 20 20 20   char*)(S);\.   
4750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4760: 20 20 20 20 20 69 6e 74 20 78 78 6e 3d 28 4e 29       int xxn=(N)
4770: 3b 77 68 69 6c 65 28 78 78 6e 2d 2d 3e 30 29 2a  ;while(xxn-->0)*
4780: 28 78 78 64 2b 2b 29 3d 2a 28 78 78 73 2b 2b 29  (xxd++)=*(xxs++)
4790: 3b 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  ;}.#endif../*.**
47a0: 20 49 66 20 63 6f 6d 70 69 6c 69 6e 67 20 66 6f   If compiling fo
47b0: 72 20 61 20 70 72 6f 63 65 73 73 6f 72 20 74 68  r a processor th
47c0: 61 74 20 6c 61 63 6b 73 20 66 6c 6f 61 74 69 6e  at lacks floatin
47d0: 67 20 70 6f 69 6e 74 20 73 75 70 70 6f 72 74 2c  g point support,
47e0: 0a 2a 2a 20 73 75 62 73 74 69 74 75 74 65 20 69  .** substitute i
47f0: 6e 74 65 67 65 72 20 66 6f 72 20 66 6c 6f 61 74  nteger for float
4800: 69 6e 67 2d 70 6f 69 6e 74 0a 2a 2f 0a 23 69 66  ing-point.*/.#if
4810: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
4820: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 23  FLOATING_POINT.#
4830: 20 64 65 66 69 6e 65 20 64 6f 75 62 6c 65 20 73   define double s
4840: 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 64 65  qlite_int64.# de
4850: 66 69 6e 65 20 66 6c 6f 61 74 20 73 71 6c 69 74  fine float sqlit
4860: 65 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65  e_int64.# define
4870: 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45   LONGDOUBLE_TYPE
4880: 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20   sqlite_int64.# 
4890: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49  ifndef SQLITE_BI
48a0: 47 5f 44 42 4c 0a 23 20 20 20 64 65 66 69 6e 65  G_DBL.#   define
48b0: 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20   SQLITE_BIG_DBL 
48c0: 28 28 28 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  (((sqlite3_int64
48d0: 29 31 29 3c 3c 35 30 29 0a 23 20 65 6e 64 69 66  )1)<<50).# endif
48e0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
48f0: 5f 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45 5f 46  _OMIT_DATETIME_F
4900: 55 4e 43 53 20 31 0a 23 20 64 65 66 69 6e 65 20  UNCS 1.# define 
4910: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43  SQLITE_OMIT_TRAC
4920: 45 20 31 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  E 1.# undef SQLI
4930: 54 45 5f 4d 49 58 45 44 5f 45 4e 44 49 41 4e 5f  TE_MIXED_ENDIAN_
4940: 36 34 42 49 54 5f 46 4c 4f 41 54 0a 23 20 75 6e  64BIT_FLOAT.# un
4950: 64 65 66 20 53 51 4c 49 54 45 5f 48 41 56 45 5f  def SQLITE_HAVE_
4960: 49 53 4e 41 4e 0a 23 65 6e 64 69 66 0a 23 69 66  ISNAN.#endif.#if
4970: 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47 5f  ndef SQLITE_BIG_
4980: 44 42 4c 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  DBL.# define SQL
4990: 49 54 45 5f 42 49 47 5f 44 42 4c 20 28 31 65 39  ITE_BIG_DBL (1e9
49a0: 39 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  9).#endif../*.**
49b0: 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73 20   OMIT_TEMPDB is 
49c0: 73 65 74 20 74 6f 20 31 20 69 66 20 53 51 4c 49  set to 1 if SQLI
49d0: 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69  TE_OMIT_TEMPDB i
49e0: 73 20 64 65 66 69 6e 65 64 2c 20 6f 72 20 30 0a  s defined, or 0.
49f0: 2a 2a 20 61 66 74 65 72 77 61 72 64 2e 20 48 61  ** afterward. Ha
4a00: 76 69 6e 67 20 74 68 69 73 20 6d 61 63 72 6f 20  ving this macro 
4a10: 61 6c 6c 6f 77 73 20 75 73 20 74 6f 20 63 61 75  allows us to cau
4a20: 73 65 20 74 68 65 20 43 20 63 6f 6d 70 69 6c 65  se the C compile
4a30: 72 0a 2a 2a 20 74 6f 20 6f 6d 69 74 20 63 6f 64  r.** to omit cod
4a40: 65 20 75 73 65 64 20 62 79 20 54 45 4d 50 20 74  e used by TEMP t
4a50: 61 62 6c 65 73 20 77 69 74 68 6f 75 74 20 6d 65  ables without me
4a60: 73 73 79 20 23 69 66 6e 64 65 66 20 73 74 61 74  ssy #ifndef stat
4a70: 65 6d 65 6e 74 73 2e 0a 2a 2f 0a 23 69 66 64 65  ements..*/.#ifde
4a80: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45  f SQLITE_OMIT_TE
4a90: 4d 50 44 42 0a 23 64 65 66 69 6e 65 20 4f 4d 49  MPDB.#define OMI
4aa0: 54 5f 54 45 4d 50 44 42 20 31 0a 23 65 6c 73 65  T_TEMPDB 1.#else
4ab0: 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45  .#define OMIT_TE
4ac0: 4d 50 44 42 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  MPDB 0.#endif../
4ad0: 2a 0a 2a 2a 20 54 68 65 20 22 66 69 6c 65 20 66  *.** The "file f
4ae0: 6f 72 6d 61 74 22 20 6e 75 6d 62 65 72 20 69 73  ormat" number is
4af0: 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61 74   an integer that
4b00: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
4b10: 77 68 65 6e 65 76 65 72 0a 2a 2a 20 74 68 65 20  whenever.** the 
4b20: 56 44 42 45 2d 6c 65 76 65 6c 20 66 69 6c 65 20  VDBE-level file 
4b30: 66 6f 72 6d 61 74 20 63 68 61 6e 67 65 73 2e 20  format changes. 
4b40: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   The following m
4b50: 61 63 72 6f 73 20 64 65 66 69 6e 65 20 74 68 65  acros define the
4b60: 0a 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74 20  .** the default 
4b70: 66 69 6c 65 20 66 6f 72 6d 61 74 20 66 6f 72 20  file format for 
4b80: 6e 65 77 20 64 61 74 61 62 61 73 65 73 20 61 6e  new databases an
4b90: 64 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 66 69  d the maximum fi
4ba0: 6c 65 20 66 6f 72 6d 61 74 0a 2a 2a 20 74 68 61  le format.** tha
4bb0: 74 20 74 68 65 20 6c 69 62 72 61 72 79 20 63 61  t the library ca
4bc0: 6e 20 72 65 61 64 2e 0a 2a 2f 0a 23 64 65 66 69  n read..*/.#defi
4bd0: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 46 49  ne SQLITE_MAX_FI
4be0: 4c 45 5f 46 4f 52 4d 41 54 20 34 0a 23 69 66 6e  LE_FORMAT 4.#ifn
4bf0: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  def SQLITE_DEFAU
4c00: 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 0a 23  LT_FILE_FORMAT.#
4c10: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44   define SQLITE_D
4c20: 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d  EFAULT_FILE_FORM
4c30: 41 54 20 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  AT 4.#endif../*.
4c40: 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65  ** Determine whe
4c50: 74 68 65 72 20 74 72 69 67 67 65 72 73 20 61 72  ther triggers ar
4c60: 65 20 72 65 63 75 72 73 69 76 65 20 62 79 20 64  e recursive by d
4c70: 65 66 61 75 6c 74 2e 20 20 54 68 69 73 20 63 61  efault.  This ca
4c80: 6e 20 62 65 0a 2a 2a 20 63 68 61 6e 67 65 64 20  n be.** changed 
4c90: 61 74 20 72 75 6e 2d 74 69 6d 65 20 75 73 69 6e  at run-time usin
4ca0: 67 20 61 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 23  g a pragma..*/.#
4cb0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45  ifndef SQLITE_DE
4cc0: 46 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45 5f  FAULT_RECURSIVE_
4cd0: 54 52 49 47 47 45 52 53 0a 23 20 64 65 66 69 6e  TRIGGERS.# defin
4ce0: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
4cf0: 5f 52 45 43 55 52 53 49 56 45 5f 54 52 49 47 47  _RECURSIVE_TRIGG
4d00: 45 52 53 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ERS 0.#endif../*
4d10: 0a 2a 2a 20 50 72 6f 76 69 64 65 20 61 20 64 65  .** Provide a de
4d20: 66 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20  fault value for 
4d30: 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52  SQLITE_TEMP_STOR
4d40: 45 20 69 6e 20 63 61 73 65 20 69 74 20 69 73 20  E in case it is 
4d50: 6e 6f 74 20 73 70 65 63 69 66 69 65 64 0a 2a 2a  not specified.**
4d60: 20 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d   on the command-
4d70: 6c 69 6e 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  line.*/.#ifndef 
4d80: 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52  SQLITE_TEMP_STOR
4d90: 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  E.# define SQLIT
4da0: 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20 31 0a 23  E_TEMP_STORE 1.#
4db0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54   define SQLITE_T
4dc0: 45 4d 50 5f 53 54 4f 52 45 5f 78 63 20 31 20 20  EMP_STORE_xc 1  
4dd0: 2f 2a 20 45 78 63 6c 75 64 65 20 66 72 6f 6d 20  /* Exclude from 
4de0: 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69  ctime.c */.#endi
4df0: 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 6e 6f 20 76  f../*.** If no v
4e00: 61 6c 75 65 20 68 61 73 20 62 65 65 6e 20 70 72  alue has been pr
4e10: 6f 76 69 64 65 64 20 66 6f 72 20 53 51 4c 49 54  ovided for SQLIT
4e20: 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52  E_MAX_WORKER_THR
4e30: 45 41 44 53 2c 20 6f 72 20 69 66 0a 2a 2a 20 53  EADS, or if.** S
4e40: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
4e50: 20 69 73 20 73 65 74 20 74 6f 20 33 20 28 6e 65   is set to 3 (ne
4e60: 76 65 72 20 75 73 65 20 74 65 6d 70 6f 72 61 72  ver use temporar
4e70: 79 20 66 69 6c 65 73 29 2c 20 73 65 74 20 69 74  y files), set it
4e80: 0a 2a 2a 20 74 6f 20 7a 65 72 6f 2e 0a 2a 2f 0a  .** to zero..*/.
4e90: 23 69 66 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f  #if SQLITE_TEMP_
4ea0: 53 54 4f 52 45 3d 3d 33 20 7c 7c 20 53 51 4c 49  STORE==3 || SQLI
4eb0: 54 45 5f 54 48 52 45 41 44 53 41 46 45 3d 3d 30  TE_THREADSAFE==0
4ec0: 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f  .# undef SQLITE_
4ed0: 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  MAX_WORKER_THREA
4ee0: 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  DS.# define SQLI
4ef0: 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48  TE_MAX_WORKER_TH
4f00: 52 45 41 44 53 20 30 0a 23 65 6e 64 69 66 0a 23  READS 0.#endif.#
4f10: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41  ifndef SQLITE_MA
4f20: 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  X_WORKER_THREADS
4f30: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
4f40: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
4f50: 41 44 53 20 38 0a 23 65 6e 64 69 66 0a 23 69 66  ADS 8.#endif.#if
4f60: 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41  ndef SQLITE_DEFA
4f70: 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  ULT_WORKER_THREA
4f80: 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  DS.# define SQLI
4f90: 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45  TE_DEFAULT_WORKE
4fa0: 52 5f 54 48 52 45 41 44 53 20 30 0a 23 65 6e 64  R_THREADS 0.#end
4fb0: 69 66 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45  if.#if SQLITE_DE
4fc0: 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52  FAULT_WORKER_THR
4fd0: 45 41 44 53 3e 53 51 4c 49 54 45 5f 4d 41 58 5f  EADS>SQLITE_MAX_
4fe0: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23  WORKER_THREADS.#
4ff0: 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41   undef SQLITE_MA
5000: 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  X_WORKER_THREADS
5010: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5020: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
5030: 41 44 53 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ADS SQLITE_DEFAU
5040: 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  LT_WORKER_THREAD
5050: 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  S.#endif../*.** 
5060: 54 68 65 20 64 65 66 61 75 6c 74 20 69 6e 69 74  The default init
5070: 69 61 6c 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 66  ial allocation f
5080: 6f 72 20 74 68 65 20 70 61 67 65 63 61 63 68 65  or the pagecache
5090: 20 77 68 65 6e 20 75 73 69 6e 67 20 73 65 70 61   when using sepa
50a0: 72 61 74 65 0a 2a 2a 20 70 61 67 65 63 61 63 68  rate.** pagecach
50b0: 65 73 20 66 6f 72 20 65 61 63 68 20 64 61 74 61  es for each data
50c0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
50d0: 20 20 41 20 70 6f 73 69 74 69 76 65 20 6e 75 6d    A positive num
50e0: 62 65 72 20 69 73 20 74 68 65 0a 2a 2a 20 6e 75  ber is the.** nu
50f0: 6d 62 65 72 20 6f 66 20 70 61 67 65 73 2e 20 20  mber of pages.  
5100: 41 20 6e 65 67 61 74 69 76 65 20 6e 75 6d 62 65  A negative numbe
5110: 72 20 4e 20 74 72 61 6e 73 6c 61 74 69 6f 6e 73  r N translations
5120: 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 62 75   means that a bu
5130: 66 66 65 72 0a 2a 2a 20 6f 66 20 2d 31 30 32 34  ffer.** of -1024
5140: 2a 4e 20 62 79 74 65 73 20 69 73 20 61 6c 6c 6f  *N bytes is allo
5150: 63 61 74 65 64 20 61 6e 64 20 75 73 65 64 20 66  cated and used f
5160: 6f 72 20 61 73 20 6d 61 6e 79 20 70 61 67 65 73  or as many pages
5170: 20 61 73 20 69 74 20 77 69 6c 6c 20 68 6f 6c 64   as it will hold
5180: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64 65 66 61  ..**.** The defa
5190: 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 22 32 30  ult value of "20
51a0: 22 20 77 61 73 20 63 68 6f 6f 73 65 6e 20 74 6f  " was choosen to
51b0: 20 6d 69 6e 69 6d 69 7a 65 20 74 68 65 20 72 75   minimize the ru
51c0: 6e 2d 74 69 6d 65 20 6f 66 20 74 68 65 0a 2a 2a  n-time of the.**
51d0: 20 73 70 65 65 64 74 65 73 74 31 20 74 65 73 74   speedtest1 test
51e0: 20 70 72 6f 67 72 61 6d 20 77 69 74 68 20 6f 70   program with op
51f0: 74 69 6f 6e 73 3a 20 2d 2d 73 68 72 69 6e 6b 2d  tions: --shrink-
5200: 6d 65 6d 6f 72 79 20 2d 2d 72 65 70 72 65 70 61  memory --reprepa
5210: 72 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  re.*/.#ifndef SQ
5220: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 50 43 41  LITE_DEFAULT_PCA
5230: 43 48 45 5f 49 4e 49 54 53 5a 0a 23 20 64 65 66  CHE_INITSZ.# def
5240: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
5250: 4c 54 5f 50 43 41 43 48 45 5f 49 4e 49 54 53 5a  LT_PCACHE_INITSZ
5260: 20 32 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a   20.#endif../*.*
5270: 2a 20 47 43 43 20 64 6f 65 73 20 6e 6f 74 20 64  * GCC does not d
5280: 65 66 69 6e 65 20 74 68 65 20 6f 66 66 73 65 74  efine the offset
5290: 6f 66 28 29 20 6d 61 63 72 6f 20 73 6f 20 77 65  of() macro so we
52a0: 27 6c 6c 20 68 61 76 65 20 74 6f 20 64 6f 20 69  'll have to do i
52b0: 74 0a 2a 2a 20 6f 75 72 73 65 6c 76 65 73 2e 0a  t.** ourselves..
52c0: 2a 2f 0a 23 69 66 6e 64 65 66 20 6f 66 66 73 65  */.#ifndef offse
52d0: 74 6f 66 0a 23 64 65 66 69 6e 65 20 6f 66 66 73  tof.#define offs
52e0: 65 74 6f 66 28 53 54 52 55 43 54 55 52 45 2c 46  etof(STRUCTURE,F
52f0: 49 45 4c 44 29 20 28 28 69 6e 74 29 28 28 63 68  IELD) ((int)((ch
5300: 61 72 2a 29 26 28 28 53 54 52 55 43 54 55 52 45  ar*)&((STRUCTURE
5310: 2a 29 30 29 2d 3e 46 49 45 4c 44 29 29 0a 23 65  *)0)->FIELD)).#e
5320: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72  ndif../*.** Macr
5330: 6f 73 20 74 6f 20 63 6f 6d 70 75 74 65 20 6d 69  os to compute mi
5340: 6e 69 6d 75 6d 20 61 6e 64 20 6d 61 78 69 6d 75  nimum and maximu
5350: 6d 20 6f 66 20 74 77 6f 20 6e 75 6d 62 65 72 73  m of two numbers
5360: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 4d 49 4e  ..*/.#ifndef MIN
5370: 0a 23 20 64 65 66 69 6e 65 20 4d 49 4e 28 41 2c  .# define MIN(A,
5380: 42 29 20 28 28 41 29 3c 28 42 29 3f 28 41 29 3a  B) ((A)<(B)?(A):
5390: 28 42 29 29 0a 23 65 6e 64 69 66 0a 23 69 66 6e  (B)).#endif.#ifn
53a0: 64 65 66 20 4d 41 58 0a 23 20 64 65 66 69 6e 65  def MAX.# define
53b0: 20 4d 41 58 28 41 2c 42 29 20 28 28 41 29 3e 28   MAX(A,B) ((A)>(
53c0: 42 29 3f 28 41 29 3a 28 42 29 29 0a 23 65 6e 64  B)?(A):(B)).#end
53d0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 77 61 70 20 74  if../*.** Swap t
53e0: 77 6f 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 79  wo objects of ty
53f0: 70 65 20 54 59 50 45 2e 0a 2a 2f 0a 23 64 65 66  pe TYPE..*/.#def
5400: 69 6e 65 20 53 57 41 50 28 54 59 50 45 2c 41 2c  ine SWAP(TYPE,A,
5410: 42 29 20 7b 54 59 50 45 20 74 3d 41 3b 20 41 3d  B) {TYPE t=A; A=
5420: 42 3b 20 42 3d 74 3b 7d 0a 0a 2f 2a 0a 2a 2a 20  B; B=t;}../*.** 
5430: 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20  Check to see if 
5440: 74 68 69 73 20 6d 61 63 68 69 6e 65 20 75 73 65  this machine use
5450: 73 20 45 42 43 44 49 43 2e 20 20 28 59 65 73 2c  s EBCDIC.  (Yes,
5460: 20 62 65 6c 69 65 76 65 20 69 74 20 6f 72 0a 2a   believe it or.*
5470: 2a 20 6e 6f 74 2c 20 74 68 65 72 65 20 61 72 65  * not, there are
5480: 20 73 74 69 6c 6c 20 6d 61 63 68 69 6e 65 73 20   still machines 
5490: 6f 75 74 20 74 68 65 72 65 20 74 68 61 74 20 75  out there that u
54a0: 73 65 20 45 42 43 44 49 43 2e 29 0a 2a 2f 0a 23  se EBCDIC.).*/.#
54b0: 69 66 20 27 41 27 20 3d 3d 20 27 5c 33 30 31 27  if 'A' == '\301'
54c0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
54d0: 5f 45 42 43 44 49 43 20 31 0a 23 65 6c 73 65 0a  _EBCDIC 1.#else.
54e0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
54f0: 41 53 43 49 49 20 31 0a 23 65 6e 64 69 66 0a 0a  ASCII 1.#endif..
5500: 2f 2a 0a 2a 2a 20 49 6e 74 65 67 65 72 73 20 6f  /*.** Integers o
5510: 66 20 6b 6e 6f 77 6e 20 73 69 7a 65 73 2e 20 20  f known sizes.  
5520: 54 68 65 73 65 20 74 79 70 65 64 65 66 73 20 6d  These typedefs m
5530: 69 67 68 74 20 63 68 61 6e 67 65 20 66 6f 72 20  ight change for 
5540: 61 72 63 68 69 74 65 63 74 75 72 65 73 0a 2a 2a  architectures.**
5550: 20 77 68 65 72 65 20 74 68 65 20 73 69 7a 65 73   where the sizes
5560: 20 76 65 72 79 2e 20 20 50 72 65 70 72 6f 63 65   very.  Preproce
5570: 73 73 6f 72 20 6d 61 63 72 6f 73 20 61 72 65 20  ssor macros are 
5580: 61 76 61 69 6c 61 62 6c 65 20 73 6f 20 74 68 61  available so tha
5590: 74 20 74 68 65 0a 2a 2a 20 74 79 70 65 73 20 63  t the.** types c
55a0: 61 6e 20 62 65 20 63 6f 6e 76 65 6e 69 65 6e 74  an be convenient
55b0: 6c 79 20 72 65 64 65 66 69 6e 65 64 20 61 74 20  ly redefined at 
55c0: 63 6f 6d 70 69 6c 65 2d 74 79 70 65 2e 20 20 4c  compile-type.  L
55d0: 69 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a 2a 20  ike this:.**.** 
55e0: 20 20 20 20 20 20 20 20 63 63 20 27 2d 44 55 49          cc '-DUI
55f0: 4e 54 50 54 52 5f 54 59 50 45 3d 6c 6f 6e 67 20  NTPTR_TYPE=long 
5600: 6c 6f 6e 67 20 69 6e 74 27 20 2e 2e 2e 0a 2a 2f  long int' ....*/
5610: 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 33 32 5f  .#ifndef UINT32_
5620: 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56  TYPE.# ifdef HAV
5630: 45 5f 55 49 4e 54 33 32 5f 54 0a 23 20 20 64 65  E_UINT32_T.#  de
5640: 66 69 6e 65 20 55 49 4e 54 33 32 5f 54 59 50 45  fine UINT32_TYPE
5650: 20 75 69 6e 74 33 32 5f 74 0a 23 20 65 6c 73 65   uint32_t.# else
5660: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33  .#  define UINT3
5670: 32 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20  2_TYPE unsigned 
5680: 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  int.# endif.#end
5690: 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 31  if.#ifndef UINT1
56a0: 36 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  6_TYPE.# ifdef H
56b0: 41 56 45 5f 55 49 4e 54 31 36 5f 54 0a 23 20 20  AVE_UINT16_T.#  
56c0: 64 65 66 69 6e 65 20 55 49 4e 54 31 36 5f 54 59  define UINT16_TY
56d0: 50 45 20 75 69 6e 74 31 36 5f 74 0a 23 20 65 6c  PE uint16_t.# el
56e0: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  se.#  define UIN
56f0: 54 31 36 5f 54 59 50 45 20 75 6e 73 69 67 6e 65  T16_TYPE unsigne
5700: 64 20 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e  d short int.# en
5710: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  dif.#endif.#ifnd
5720: 65 66 20 49 4e 54 31 36 5f 54 59 50 45 0a 23 20  ef INT16_TYPE.# 
5730: 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54 31 36  ifdef HAVE_INT16
5740: 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54  _T.#  define INT
5750: 31 36 5f 54 59 50 45 20 69 6e 74 31 36 5f 74 0a  16_TYPE int16_t.
5760: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
5770: 20 49 4e 54 31 36 5f 54 59 50 45 20 73 68 6f 72   INT16_TYPE shor
5780: 74 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65  t int.# endif.#e
5790: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e  ndif.#ifndef UIN
57a0: 54 38 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20  T8_TYPE.# ifdef 
57b0: 48 41 56 45 5f 55 49 4e 54 38 5f 54 0a 23 20 20  HAVE_UINT8_T.#  
57c0: 64 65 66 69 6e 65 20 55 49 4e 54 38 5f 54 59 50  define UINT8_TYP
57d0: 45 20 75 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65  E uint8_t.# else
57e0: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38  .#  define UINT8
57f0: 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20 63  _TYPE unsigned c
5800: 68 61 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  har.# endif.#end
5810: 69 66 0a 23 69 66 6e 64 65 66 20 49 4e 54 38 5f  if.#ifndef INT8_
5820: 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56  TYPE.# ifdef HAV
5830: 45 5f 49 4e 54 38 5f 54 0a 23 20 20 64 65 66 69  E_INT8_T.#  defi
5840: 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 69 6e 74  ne INT8_TYPE int
5850: 38 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65  8_t.# else.#  de
5860: 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 73  fine INT8_TYPE s
5870: 69 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64  igned char.# end
5880: 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  if.#endif.#ifnde
5890: 66 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50  f LONGDOUBLE_TYP
58a0: 45 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44  E.# define LONGD
58b0: 4f 55 42 4c 45 5f 54 59 50 45 20 6c 6f 6e 67 20  OUBLE_TYPE long 
58c0: 64 6f 75 62 6c 65 0a 23 65 6e 64 69 66 0a 74 79  double.#endif.ty
58d0: 70 65 64 65 66 20 73 71 6c 69 74 65 5f 69 6e 74  pedef sqlite_int
58e0: 36 34 20 69 36 34 3b 20 20 20 20 20 20 20 20 20  64 i64;         
58f0: 20 2f 2a 20 38 2d 62 79 74 65 20 73 69 67 6e 65   /* 8-byte signe
5900: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70  d integer */.typ
5910: 65 64 65 66 20 73 71 6c 69 74 65 5f 75 69 6e 74  edef sqlite_uint
5920: 36 34 20 75 36 34 3b 20 20 20 20 20 20 20 20 20  64 u64;         
5930: 2f 2a 20 38 2d 62 79 74 65 20 75 6e 73 69 67 6e  /* 8-byte unsign
5940: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
5950: 70 65 64 65 66 20 55 49 4e 54 33 32 5f 54 59 50  pedef UINT32_TYP
5960: 45 20 75 33 32 3b 20 20 20 20 20 20 20 20 20 20  E u32;          
5970: 20 2f 2a 20 34 2d 62 79 74 65 20 75 6e 73 69 67   /* 4-byte unsig
5980: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74  ned integer */.t
5990: 79 70 65 64 65 66 20 55 49 4e 54 31 36 5f 54 59  ypedef UINT16_TY
59a0: 50 45 20 75 31 36 3b 20 20 20 20 20 20 20 20 20  PE u16;         
59b0: 20 20 2f 2a 20 32 2d 62 79 74 65 20 75 6e 73 69    /* 2-byte unsi
59c0: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a  gned integer */.
59d0: 74 79 70 65 64 65 66 20 49 4e 54 31 36 5f 54 59  typedef INT16_TY
59e0: 50 45 20 69 31 36 3b 20 20 20 20 20 20 20 20 20  PE i16;         
59f0: 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 73 69 67     /* 2-byte sig
5a00: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74  ned integer */.t
5a10: 79 70 65 64 65 66 20 55 49 4e 54 38 5f 54 59 50  ypedef UINT8_TYP
5a20: 45 20 75 38 3b 20 20 20 20 20 20 20 20 20 20 20  E u8;           
5a30: 20 20 2f 2a 20 31 2d 62 79 74 65 20 75 6e 73 69    /* 1-byte unsi
5a40: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a  gned integer */.
5a50: 74 79 70 65 64 65 66 20 49 4e 54 38 5f 54 59 50  typedef INT8_TYP
5a60: 45 20 69 38 3b 20 20 20 20 20 20 20 20 20 20 20  E i8;           
5a70: 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 73 69 67     /* 1-byte sig
5a80: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 0a  ned integer */..
5a90: 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d 41 58  /*.** SQLITE_MAX
5aa0: 5f 55 33 32 20 69 73 20 61 20 75 36 34 20 63 6f  _U32 is a u64 co
5ab0: 6e 73 74 61 6e 74 20 74 68 61 74 20 69 73 20 74  nstant that is t
5ac0: 68 65 20 6d 61 78 69 6d 75 6d 20 75 36 34 20 76  he maximum u64 v
5ad0: 61 6c 75 65 0a 2a 2a 20 74 68 61 74 20 63 61 6e  alue.** that can
5ae0: 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20   be stored in a 
5af0: 75 33 32 20 77 69 74 68 6f 75 74 20 6c 6f 73 73  u32 without loss
5b00: 20 6f 66 20 64 61 74 61 2e 20 20 54 68 65 20 76   of data.  The v
5b10: 61 6c 75 65 0a 2a 2a 20 69 73 20 30 78 30 30 30  alue.** is 0x000
5b20: 30 30 30 30 30 66 66 66 66 66 66 66 66 2e 20 20  00000ffffffff.  
5b30: 42 75 74 20 62 65 63 61 75 73 65 20 6f 66 20 71  But because of q
5b40: 75 69 72 6b 73 20 6f 66 20 73 6f 6d 65 20 63 6f  uirks of some co
5b50: 6d 70 69 6c 65 72 73 2c 20 77 65 0a 2a 2a 20 68  mpilers, we.** h
5b60: 61 76 65 20 74 6f 20 73 70 65 63 69 66 79 20 74  ave to specify t
5b70: 68 65 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20  he value in the 
5b80: 6c 65 73 73 20 69 6e 74 75 69 74 69 76 65 20 6d  less intuitive m
5b90: 61 6e 6e 65 72 20 73 68 6f 77 6e 3a 0a 2a 2f 0a  anner shown:.*/.
5ba0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
5bb0: 41 58 5f 55 33 32 20 20 28 28 28 28 75 36 34 29  AX_U32  ((((u64)
5bc0: 31 29 3c 3c 33 32 29 2d 31 29 0a 0a 2f 2a 0a 2a  1)<<32)-1)../*.*
5bd0: 2a 20 54 68 65 20 64 61 74 61 74 79 70 65 20 75  * The datatype u
5be0: 73 65 64 20 74 6f 20 73 74 6f 72 65 20 65 73 74  sed to store est
5bf0: 69 6d 61 74 65 73 20 6f 66 20 74 68 65 20 6e 75  imates of the nu
5c00: 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20  mber of rows in 
5c10: 61 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e  a.** table or in
5c20: 64 65 78 2e 20 20 54 68 69 73 20 69 73 20 61 6e  dex.  This is an
5c30: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
5c40: 72 20 74 79 70 65 2e 20 20 46 6f 72 20 39 39 2e  r type.  For 99.
5c50: 39 25 20 6f 66 0a 2a 2a 20 74 68 65 20 77 6f 72  9% of.** the wor
5c60: 6c 64 2c 20 61 20 33 32 2d 62 69 74 20 69 6e 74  ld, a 32-bit int
5c70: 65 67 65 72 20 69 73 20 73 75 66 66 69 63 69 65  eger is sufficie
5c80: 6e 74 2e 20 20 42 75 74 20 61 20 36 34 2d 62 69  nt.  But a 64-bi
5c90: 74 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63 61 6e  t integer.** can
5ca0: 20 62 65 20 75 73 65 64 20 61 74 20 63 6f 6d 70   be used at comp
5cb0: 69 6c 65 2d 74 69 6d 65 20 69 66 20 64 65 73 69  ile-time if desi
5cc0: 72 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  red..*/.#ifdef S
5cd0: 51 4c 49 54 45 5f 36 34 42 49 54 5f 53 54 41 54  QLITE_64BIT_STAT
5ce0: 53 0a 20 74 79 70 65 64 65 66 20 75 36 34 20 74  S. typedef u64 t
5cf0: 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20 36 34  Rowcnt;    /* 64
5d00: 2d 62 69 74 20 6f 6e 6c 79 20 69 66 20 72 65 71  -bit only if req
5d10: 75 65 73 74 65 64 20 61 74 20 63 6f 6d 70 69 6c  uested at compil
5d20: 65 2d 74 69 6d 65 20 2a 2f 0a 23 65 6c 73 65 0a  e-time */.#else.
5d30: 20 74 79 70 65 64 65 66 20 75 33 32 20 74 52 6f   typedef u32 tRo
5d40: 77 63 6e 74 3b 20 20 20 20 2f 2a 20 33 32 2d 62  wcnt;    /* 32-b
5d50: 69 74 20 69 73 20 74 68 65 20 64 65 66 61 75 6c  it is the defaul
5d60: 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  t */.#endif../*.
5d70: 2a 2a 20 45 73 74 69 6d 61 74 65 64 20 71 75 61  ** Estimated qua
5d80: 6e 74 69 74 69 65 73 20 75 73 65 64 20 66 6f 72  ntities used for
5d90: 20 71 75 65 72 79 20 70 6c 61 6e 6e 69 6e 67 20   query planning 
5da0: 61 72 65 20 73 74 6f 72 65 64 20 61 73 20 31 36  are stored as 16
5db0: 2d 62 69 74 0a 2a 2a 20 6c 6f 67 61 72 69 74 68  -bit.** logarith
5dc0: 6d 73 2e 20 20 46 6f 72 20 71 75 61 6e 74 69 74  ms.  For quantit
5dd0: 79 20 58 2c 20 74 68 65 20 76 61 6c 75 65 20 73  y X, the value s
5de0: 74 6f 72 65 64 20 69 73 20 31 30 2a 6c 6f 67 32  tored is 10*log2
5df0: 28 58 29 2e 20 20 54 68 69 73 0a 2a 2a 20 67 69  (X).  This.** gi
5e00: 76 65 73 20 61 20 70 6f 73 73 69 62 6c 65 20 72  ves a possible r
5e10: 61 6e 67 65 20 6f 66 20 76 61 6c 75 65 73 20 6f  ange of values o
5e20: 66 20 61 70 70 72 6f 78 69 6d 61 74 65 6c 79 20  f approximately 
5e30: 31 2e 30 65 39 38 36 20 74 6f 20 31 65 2d 39 38  1.0e986 to 1e-98
5e40: 36 2e 0a 2a 2a 20 42 75 74 20 74 68 65 20 61 6c  6..** But the al
5e50: 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 61 72 65  lowed values are
5e60: 20 22 67 72 61 69 6e 79 22 2e 20 20 4e 6f 74 20   "grainy".  Not 
5e70: 65 76 65 72 79 20 76 61 6c 75 65 20 69 73 20 72  every value is r
5e80: 65 70 72 65 73 65 6e 74 61 62 6c 65 2e 0a 2a 2a  epresentable..**
5e90: 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 71 75   For example, qu
5ea0: 61 6e 74 69 74 69 65 73 20 31 36 20 61 6e 64 20  antities 16 and 
5eb0: 31 37 20 61 72 65 20 62 6f 74 68 20 72 65 70 72  17 are both repr
5ec0: 65 73 65 6e 74 65 64 20 62 79 20 61 20 4c 6f 67  esented by a Log
5ed0: 45 73 74 0a 2a 2a 20 6f 66 20 34 30 2e 20 20 48  Est.** of 40.  H
5ee0: 6f 77 65 76 65 72 2c 20 73 69 6e 63 65 20 4c 6f  owever, since Lo
5ef0: 67 45 73 74 20 71 75 61 6e 74 69 74 69 65 73 20  gEst quantities 
5f00: 61 72 65 20 73 75 70 70 6f 73 65 20 74 6f 20 62  are suppose to b
5f10: 65 20 65 73 74 69 6d 61 74 65 73 2c 0a 2a 2a 20  e estimates,.** 
5f20: 6e 6f 74 20 65 78 61 63 74 20 76 61 6c 75 65 73  not exact values
5f30: 2c 20 74 68 69 73 20 69 6d 70 72 65 63 69 73 69  , this imprecisi
5f40: 6f 6e 20 69 73 20 6e 6f 74 20 61 20 70 72 6f 62  on is not a prob
5f50: 6c 65 6d 2e 0a 2a 2a 0a 2a 2a 20 22 4c 6f 67 45  lem..**.** "LogE
5f60: 73 74 22 20 69 73 20 73 68 6f 72 74 20 66 6f 72  st" is short for
5f70: 20 22 4c 6f 67 61 72 69 74 68 6d 69 63 20 45 73   "Logarithmic Es
5f80: 74 69 6d 61 74 65 22 2e 0a 2a 2a 0a 2a 2a 20 45  timate"..**.** E
5f90: 78 61 6d 70 6c 65 73 3a 0a 2a 2a 20 20 20 20 20  xamples:.**     
5fa0: 20 31 20 2d 3e 20 30 20 20 20 20 20 20 20 20 20   1 -> 0         
5fb0: 20 20 20 20 20 32 30 20 2d 3e 20 34 33 20 20 20       20 -> 43   
5fc0: 20 20 20 20 20 20 20 31 30 30 30 30 20 2d 3e 20         10000 -> 
5fd0: 31 33 32 0a 2a 2a 20 20 20 20 20 20 32 20 2d 3e  132.**      2 ->
5fe0: 20 31 30 20 20 20 20 20 20 20 20 20 20 20 20 20   10             
5ff0: 32 35 20 2d 3e 20 34 36 20 20 20 20 20 20 20 20  25 -> 46        
6000: 20 20 32 35 30 30 30 20 2d 3e 20 31 34 36 0a 2a    25000 -> 146.*
6010: 2a 20 20 20 20 20 20 33 20 2d 3e 20 31 36 20 20  *      3 -> 16  
6020: 20 20 20 20 20 20 20 20 20 20 31 30 30 20 2d 3e            100 ->
6030: 20 36 36 20 20 20 20 20 20 20 20 31 30 30 30 30   66        10000
6040: 30 30 20 2d 3e 20 31 39 39 0a 2a 2a 20 20 20 20  00 -> 199.**    
6050: 20 20 34 20 2d 3e 20 32 30 20 20 20 20 20 20 20    4 -> 20       
6060: 20 20 20 20 31 30 30 30 20 2d 3e 20 39 39 20 20      1000 -> 99  
6070: 20 20 20 20 20 20 31 30 34 38 35 37 36 20 2d 3e        1048576 ->
6080: 20 32 30 30 0a 2a 2a 20 20 20 20 20 31 30 20 2d   200.**     10 -
6090: 3e 20 33 33 20 20 20 20 20 20 20 20 20 20 20 31  > 33           1
60a0: 30 32 34 20 2d 3e 20 31 30 30 20 20 20 20 34 32  024 -> 100    42
60b0: 39 34 39 36 37 32 39 36 20 2d 3e 20 33 32 30 0a  94967296 -> 320.
60c0: 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 67 45 73 74  **.** The LogEst
60d0: 20 63 61 6e 20 62 65 20 6e 65 67 61 74 69 76 65   can be negative
60e0: 20 74 6f 20 69 6e 64 69 63 61 74 65 20 66 72 61   to indicate fra
60f0: 63 74 69 6f 6e 61 6c 20 76 61 6c 75 65 73 2e 0a  ctional values..
6100: 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 0a  ** Examples:.**.
6110: 2a 2a 20 20 20 20 30 2e 35 20 2d 3e 20 2d 31 30  **    0.5 -> -10
6120: 20 20 20 20 20 20 20 20 20 20 20 30 2e 31 20 2d             0.1 -
6130: 3e 20 2d 33 33 20 20 20 20 20 20 20 20 30 2e 30  > -33        0.0
6140: 36 32 35 20 2d 3e 20 2d 34 30 0a 2a 2f 0a 74 79  625 -> -40.*/.ty
6150: 70 65 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45  pedef INT16_TYPE
6160: 20 4c 6f 67 45 73 74 3b 0a 0a 2f 2a 0a 2a 2a 20   LogEst;../*.** 
6170: 53 65 74 20 74 68 65 20 53 51 4c 49 54 45 5f 50  Set the SQLITE_P
6180: 54 52 53 49 5a 45 20 6d 61 63 72 6f 20 74 6f 20  TRSIZE macro to 
6190: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  the number of by
61a0: 74 65 73 20 69 6e 20 61 20 70 6f 69 6e 74 65 72  tes in a pointer
61b0: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
61c0: 54 45 5f 50 54 52 53 49 5a 45 0a 23 20 69 66 20  TE_PTRSIZE.# if 
61d0: 64 65 66 69 6e 65 64 28 5f 5f 53 49 5a 45 4f 46  defined(__SIZEOF
61e0: 5f 50 4f 49 4e 54 45 52 5f 5f 29 0a 23 20 20 20  _POINTER__).#   
61f0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54  define SQLITE_PT
6200: 52 53 49 5a 45 20 5f 5f 53 49 5a 45 4f 46 5f 50  RSIZE __SIZEOF_P
6210: 4f 49 4e 54 45 52 5f 5f 0a 23 20 65 6c 69 66 20  OINTER__.# elif 
6220: 64 65 66 69 6e 65 64 28 69 33 38 36 29 20 20 20  defined(i386)   
6230: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69    || defined(__i
6240: 33 38 36 5f 5f 29 20 20 20 7c 7c 20 64 65 66 69  386__)   || defi
6250: 6e 65 64 28 5f 4d 5f 49 58 38 36 29 20 7c 7c 20  ned(_M_IX86) || 
6260: 20 20 20 5c 0a 20 20 20 20 20 20 20 64 65 66 69     \.       defi
6270: 6e 65 64 28 5f 4d 5f 41 52 4d 29 20 20 20 7c 7c  ned(_M_ARM)   ||
6280: 20 64 65 66 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f   defined(__arm__
6290: 29 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28  )    || defined(
62a0: 5f 5f 78 38 36 29 0a 23 20 20 20 64 65 66 69 6e  __x86).#   defin
62b0: 65 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45  e SQLITE_PTRSIZE
62c0: 20 34 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65   4.# else.#   de
62d0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 53  fine SQLITE_PTRS
62e0: 49 5a 45 20 38 0a 23 20 65 6e 64 69 66 0a 23 65  IZE 8.# endif.#e
62f0: 6e 64 69 66 0a 0a 2f 2a 20 54 68 65 20 75 70 74  ndif../* The upt
6300: 72 20 74 79 70 65 20 69 73 20 61 6e 20 75 6e 73  r type is an uns
6310: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 6c 61  igned integer la
6320: 72 67 65 20 65 6e 6f 75 67 68 20 74 6f 20 68 6f  rge enough to ho
6330: 6c 64 20 61 20 70 6f 69 6e 74 65 72 0a 2a 2f 0a  ld a pointer.*/.
6340: 23 69 66 20 64 65 66 69 6e 65 64 28 48 41 56 45  #if defined(HAVE
6350: 5f 53 54 44 49 4e 54 5f 48 29 0a 20 20 74 79 70  _STDINT_H).  typ
6360: 65 64 65 66 20 75 69 6e 74 70 74 72 5f 74 20 75  edef uintptr_t u
6370: 70 74 72 3b 0a 23 65 6c 69 66 20 53 51 4c 49 54  ptr;.#elif SQLIT
6380: 45 5f 50 54 52 53 49 5a 45 3d 3d 34 0a 20 20 74  E_PTRSIZE==4.  t
6390: 79 70 65 64 65 66 20 75 33 32 20 75 70 74 72 3b  ypedef u32 uptr;
63a0: 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66  .#else.  typedef
63b0: 20 75 36 34 20 75 70 74 72 3b 0a 23 65 6e 64 69   u64 uptr;.#endi
63c0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  f../*.** The SQL
63d0: 49 54 45 5f 57 49 54 48 49 4e 28 50 2c 53 2c 45  ITE_WITHIN(P,S,E
63e0: 29 20 6d 61 63 72 6f 20 63 68 65 63 6b 73 20 74  ) macro checks t
63f0: 6f 20 73 65 65 20 69 66 20 70 6f 69 6e 74 65 72  o see if pointer
6400: 20 50 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20   P points to.** 
6410: 73 6f 6d 65 74 68 69 6e 67 20 62 65 74 77 65 65  something betwee
6420: 6e 20 53 20 28 69 6e 63 6c 75 73 69 76 65 29 20  n S (inclusive) 
6430: 61 6e 64 20 45 20 28 65 78 63 6c 75 73 69 76 65  and E (exclusive
6440: 29 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f 74 68 65  )..**.** In othe
6450: 72 20 77 6f 72 64 73 2c 20 53 20 69 73 20 61 20  r words, S is a 
6460: 62 75 66 66 65 72 20 61 6e 64 20 45 20 69 73 20  buffer and E is 
6470: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
6480: 20 66 69 72 73 74 20 62 79 74 65 20 61 66 74 65   first byte afte
6490: 72 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20  r.** the end of 
64a0: 62 75 66 66 65 72 20 53 2e 20 20 54 68 69 73 20  buffer S.  This 
64b0: 6d 61 63 72 6f 20 72 65 74 75 72 6e 73 20 74 72  macro returns tr
64c0: 75 65 20 69 66 20 50 20 70 6f 69 6e 74 73 20 74  ue if P points t
64d0: 6f 20 73 6f 6d 65 74 68 69 6e 67 0a 2a 2a 20 63  o something.** c
64e0: 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e 20  ontained within 
64f0: 74 68 65 20 62 75 66 66 65 72 20 53 2e 0a 2a 2f  the buffer S..*/
6500: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
6510: 57 49 54 48 49 4e 28 50 2c 53 2c 45 29 20 28 28  WITHIN(P,S,E) ((
6520: 28 75 70 74 72 29 28 50 29 3e 3d 28 75 70 74 72  (uptr)(P)>=(uptr
6530: 29 28 53 29 29 26 26 28 28 75 70 74 72 29 28 50  )(S))&&((uptr)(P
6540: 29 3c 28 75 70 74 72 29 28 45 29 29 29 0a 0a 0a  )<(uptr)(E)))...
6550: 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20  /*.** Macros to 
6560: 64 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65  determine whethe
6570: 72 20 74 68 65 20 6d 61 63 68 69 6e 65 20 69 73  r the machine is
6580: 20 62 69 67 20 6f 72 20 6c 69 74 74 6c 65 20 65   big or little e
6590: 6e 64 69 61 6e 2c 0a 2a 2a 20 61 6e 64 20 77 68  ndian,.** and wh
65a0: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 61  ether or not tha
65b0: 74 20 64 65 74 65 72 6d 69 6e 61 74 69 6f 6e 20  t determination 
65c0: 69 73 20 72 75 6e 2d 74 69 6d 65 20 6f 72 20 63  is run-time or c
65d0: 6f 6d 70 69 6c 65 2d 74 69 6d 65 2e 0a 2a 2a 0a  ompile-time..**.
65e0: 2a 2a 20 46 6f 72 20 62 65 73 74 20 70 65 72 66  ** For best perf
65f0: 6f 72 6d 61 6e 63 65 2c 20 61 6e 20 61 74 74 65  ormance, an atte
6600: 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20 67  mpt is made to g
6610: 75 65 73 73 20 61 74 20 74 68 65 20 62 79 74 65  uess at the byte
6620: 2d 6f 72 64 65 72 0a 2a 2a 20 75 73 69 6e 67 20  -order.** using 
6630: 43 2d 70 72 65 70 72 6f 63 65 73 73 6f 72 20 6d  C-preprocessor m
6640: 61 63 72 6f 73 2e 20 20 49 66 20 74 68 61 74 20  acros.  If that 
6650: 69 73 20 75 6e 73 75 63 63 65 73 73 66 75 6c 2c  is unsuccessful,
6660: 20 6f 72 20 69 66 0a 2a 2a 20 2d 44 53 51 4c 49   or if.** -DSQLI
6670: 54 45 5f 52 55 4e 54 49 4d 45 5f 42 59 54 45 4f  TE_RUNTIME_BYTEO
6680: 52 44 45 52 3d 31 20 69 73 20 73 65 74 2c 20 74  RDER=1 is set, t
6690: 68 65 6e 20 62 79 74 65 2d 6f 72 64 65 72 20 69  hen byte-order i
66a0: 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 2a 2a 20  s determined.** 
66b0: 61 74 20 72 75 6e 2d 74 69 6d 65 2e 0a 2a 2f 0a  at run-time..*/.
66c0: 23 69 66 20 28 64 65 66 69 6e 65 64 28 69 33 38  #if (defined(i38
66d0: 36 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65  6)     || define
66e0: 64 28 5f 5f 69 33 38 36 5f 5f 29 20 20 20 7c 7c  d(__i386__)   ||
66f0: 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38 36   defined(_M_IX86
6700: 29 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 64  ) ||    \.     d
6710: 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 29  efined(__x86_64)
6720: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38   || defined(__x8
6730: 36 5f 36 34 5f 5f 29 20 7c 7c 20 64 65 66 69 6e  6_64__) || defin
6740: 65 64 28 5f 4d 5f 58 36 34 29 20 20 7c 7c 20 20  ed(_M_X64)  ||  
6750: 20 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64    \.     defined
6760: 28 5f 4d 5f 41 4d 44 36 34 29 20 7c 7c 20 64 65  (_M_AMD64) || de
6770: 66 69 6e 65 64 28 5f 4d 5f 41 52 4d 29 20 20 20  fined(_M_ARM)   
6780: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78    || defined(__x
6790: 38 36 29 20 20 20 7c 7c 20 20 20 20 5c 0a 20 20  86)   ||    \.  
67a0: 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 61 72 6d     defined(__arm
67b0: 5f 5f 29 29 20 26 26 20 21 64 65 66 69 6e 65 64  __)) && !defined
67c0: 28 53 51 4c 49 54 45 5f 52 55 4e 54 49 4d 45 5f  (SQLITE_RUNTIME_
67d0: 42 59 54 45 4f 52 44 45 52 29 0a 23 20 64 65 66  BYTEORDER).# def
67e0: 69 6e 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f  ine SQLITE_BYTEO
67f0: 52 44 45 52 20 20 20 20 31 32 33 34 0a 23 20 64  RDER    1234.# d
6800: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47  efine SQLITE_BIG
6810: 45 4e 44 49 41 4e 20 20 20 20 30 0a 23 20 64 65  ENDIAN    0.# de
6820: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54  fine SQLITE_LITT
6830: 4c 45 45 4e 44 49 41 4e 20 31 0a 23 20 64 65 66  LEENDIAN 1.# def
6840: 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36  ine SQLITE_UTF16
6850: 4e 41 54 49 56 45 20 20 53 51 4c 49 54 45 5f 55  NATIVE  SQLITE_U
6860: 54 46 31 36 4c 45 0a 23 65 6e 64 69 66 0a 23 69  TF16LE.#endif.#i
6870: 66 20 28 64 65 66 69 6e 65 64 28 73 70 61 72 63  f (defined(sparc
6880: 29 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28  )    || defined(
6890: 5f 5f 70 70 63 5f 5f 29 29 20 20 5c 0a 20 20 20  __ppc__))  \.   
68a0: 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
68b0: 49 54 45 5f 52 55 4e 54 49 4d 45 5f 42 59 54 45  ITE_RUNTIME_BYTE
68c0: 4f 52 44 45 52 29 0a 23 20 64 65 66 69 6e 65 20  ORDER).# define 
68d0: 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52  SQLITE_BYTEORDER
68e0: 20 20 20 20 34 33 32 31 0a 23 20 64 65 66 69 6e      4321.# defin
68f0: 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49  e SQLITE_BIGENDI
6900: 41 4e 20 20 20 20 31 0a 23 20 64 65 66 69 6e 65  AN    1.# define
6910: 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e   SQLITE_LITTLEEN
6920: 44 49 41 4e 20 30 0a 23 20 64 65 66 69 6e 65 20  DIAN 0.# define 
6930: 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49  SQLITE_UTF16NATI
6940: 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36  VE  SQLITE_UTF16
6950: 42 45 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64  BE.#endif.#if !d
6960: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 42 59  efined(SQLITE_BY
6970: 54 45 4f 52 44 45 52 29 0a 23 20 69 66 64 65 66  TEORDER).# ifdef
6980: 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41   SQLITE_AMALGAMA
6990: 54 49 4f 4e 0a 20 20 63 6f 6e 73 74 20 69 6e 74  TION.  const int
69a0: 20 73 71 6c 69 74 65 33 6f 6e 65 20 3d 20 31 3b   sqlite3one = 1;
69b0: 0a 23 20 65 6c 73 65 0a 20 20 65 78 74 65 72 6e  .# else.  extern
69c0: 20 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74   const int sqlit
69d0: 65 33 6f 6e 65 3b 0a 23 20 65 6e 64 69 66 0a 23  e3one;.# endif.#
69e0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42   define SQLITE_B
69f0: 59 54 45 4f 52 44 45 52 20 20 20 20 30 20 20 20  YTEORDER    0   
6a00: 20 20 2f 2a 20 30 20 6d 65 61 6e 73 20 22 75 6e    /* 0 means "un
6a10: 6b 6e 6f 77 6e 20 61 74 20 63 6f 6d 70 69 6c 65  known at compile
6a20: 2d 74 69 6d 65 22 20 2a 2f 0a 23 20 64 65 66 69  -time" */.# defi
6a30: 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44  ne SQLITE_BIGEND
6a40: 49 41 4e 20 20 20 20 28 2a 28 63 68 61 72 20 2a  IAN    (*(char *
6a50: 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d  )(&sqlite3one)==
6a60: 30 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  0).# define SQLI
6a70: 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20  TE_LITTLEENDIAN 
6a80: 28 2a 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69  (*(char *)(&sqli
6a90: 74 65 33 6f 6e 65 29 3d 3d 31 29 0a 23 20 64 65  te3one)==1).# de
6aa0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31  fine SQLITE_UTF1
6ab0: 36 4e 41 54 49 56 45 20 20 28 53 51 4c 49 54 45  6NATIVE  (SQLITE
6ac0: 5f 42 49 47 45 4e 44 49 41 4e 3f 53 51 4c 49 54  _BIGENDIAN?SQLIT
6ad0: 45 5f 55 54 46 31 36 42 45 3a 53 51 4c 49 54 45  E_UTF16BE:SQLITE
6ae0: 5f 55 54 46 31 36 4c 45 29 0a 23 65 6e 64 69 66  _UTF16LE).#endif
6af0: 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73 74 61 6e 74  ../*.** Constant
6b00: 73 20 66 6f 72 20 74 68 65 20 6c 61 72 67 65 73  s for the larges
6b10: 74 20 61 6e 64 20 73 6d 61 6c 6c 65 73 74 20 70  t and smallest p
6b20: 6f 73 73 69 62 6c 65 20 36 34 2d 62 69 74 20 73  ossible 64-bit s
6b30: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 73 2e 0a  igned integers..
6b40: 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20  ** These macros 
6b50: 61 72 65 20 64 65 73 69 67 6e 65 64 20 74 6f 20  are designed to 
6b60: 77 6f 72 6b 20 63 6f 72 72 65 63 74 6c 79 20 6f  work correctly o
6b70: 6e 20 62 6f 74 68 20 33 32 2d 62 69 74 20 61 6e  n both 32-bit an
6b80: 64 20 36 34 2d 62 69 74 0a 2a 2a 20 63 6f 6d 70  d 64-bit.** comp
6b90: 69 6c 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ilers..*/.#defin
6ba0: 65 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 20  e LARGEST_INT64 
6bb0: 20 28 30 78 66 66 66 66 66 66 66 66 7c 28 28 28   (0xffffffff|(((
6bc0: 69 36 34 29 30 78 37 66 66 66 66 66 66 66 29 3c  i64)0x7fffffff)<
6bd0: 3c 33 32 29 29 0a 23 64 65 66 69 6e 65 20 53 4d  <32)).#define SM
6be0: 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 28 28 28  ALLEST_INT64 (((
6bf0: 69 36 34 29 2d 31 29 20 2d 20 4c 41 52 47 45 53  i64)-1) - LARGES
6c00: 54 5f 49 4e 54 36 34 29 0a 0a 2f 2a 0a 2a 2a 20  T_INT64)../*.** 
6c10: 52 6f 75 6e 64 20 75 70 20 61 20 6e 75 6d 62 65  Round up a numbe
6c20: 72 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6c 61  r to the next la
6c30: 72 67 65 72 20 6d 75 6c 74 69 70 6c 65 20 6f 66  rger multiple of
6c40: 20 38 2e 20 20 54 68 69 73 20 69 73 20 75 73 65   8.  This is use
6c50: 64 0a 2a 2a 20 74 6f 20 66 6f 72 63 65 20 38 2d  d.** to force 8-
6c60: 62 79 74 65 20 61 6c 69 67 6e 6d 65 6e 74 20 6f  byte alignment o
6c70: 6e 20 36 34 2d 62 69 74 20 61 72 63 68 69 74 65  n 64-bit archite
6c80: 63 74 75 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69  ctures..*/.#defi
6c90: 6e 65 20 52 4f 55 4e 44 38 28 78 29 20 20 20 20  ne ROUND8(x)    
6ca0: 20 28 28 28 78 29 2b 37 29 26 7e 37 29 0a 0a 2f   (((x)+7)&~7)../
6cb0: 2a 0a 2a 2a 20 52 6f 75 6e 64 20 64 6f 77 6e 20  *.** Round down 
6cc0: 74 6f 20 74 68 65 20 6e 65 61 72 65 73 74 20 6d  to the nearest m
6cd0: 75 6c 74 69 70 6c 65 20 6f 66 20 38 0a 2a 2f 0a  ultiple of 8.*/.
6ce0: 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 44 4f 57  #define ROUNDDOW
6cf0: 4e 38 28 78 29 20 28 28 78 29 26 7e 37 29 0a 0a  N8(x) ((x)&~7)..
6d00: 2f 2a 0a 2a 2a 20 41 73 73 65 72 74 20 74 68 61  /*.** Assert tha
6d10: 74 20 74 68 65 20 70 6f 69 6e 74 65 72 20 58 20  t the pointer X 
6d20: 69 73 20 61 6c 69 67 6e 65 64 20 74 6f 20 61 6e  is aligned to an
6d30: 20 38 2d 62 79 74 65 20 62 6f 75 6e 64 61 72 79   8-byte boundary
6d40: 2e 20 20 54 68 69 73 0a 2a 2a 20 6d 61 63 72 6f  .  This.** macro
6d50: 20 69 73 20 75 73 65 64 20 6f 6e 6c 79 20 77 69   is used only wi
6d60: 74 68 69 6e 20 61 73 73 65 72 74 28 29 20 74 6f  thin assert() to
6d70: 20 76 65 72 69 66 79 20 74 68 61 74 20 74 68 65   verify that the
6d80: 20 63 6f 64 65 20 67 65 74 73 0a 2a 2a 20 61 6c   code gets.** al
6d90: 6c 20 61 6c 69 67 6e 6d 65 6e 74 20 72 65 73 74  l alignment rest
6da0: 72 69 63 74 69 6f 6e 73 20 63 6f 72 72 65 63 74  rictions correct
6db0: 2e 0a 2a 2a 0a 2a 2a 20 45 78 63 65 70 74 2c 20  ..**.** Except, 
6dc0: 69 66 20 53 51 4c 49 54 45 5f 34 5f 42 59 54 45  if SQLITE_4_BYTE
6dd0: 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 20  _ALIGNED_MALLOC 
6de0: 69 73 20 64 65 66 69 6e 65 64 2c 20 74 68 65 6e  is defined, then
6df0: 20 74 68 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69   the.** underlyi
6e00: 6e 67 20 6d 61 6c 6c 6f 63 28 29 20 69 6d 70 6c  ng malloc() impl
6e10: 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 69 67 68 74  ementation might
6e20: 20 72 65 74 75 72 6e 20 75 73 20 34 2d 62 79 74   return us 4-byt
6e30: 65 20 61 6c 69 67 6e 65 64 0a 2a 2a 20 70 6f 69  e aligned.** poi
6e40: 6e 74 65 72 73 2e 20 20 49 6e 20 74 68 61 74 20  nters.  In that 
6e50: 63 61 73 65 2c 20 6f 6e 6c 79 20 76 65 72 69 66  case, only verif
6e60: 79 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65  y 4-byte alignme
6e70: 6e 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  nt..*/.#ifdef SQ
6e80: 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47  LITE_4_BYTE_ALIG
6e90: 4e 45 44 5f 4d 41 4c 4c 4f 43 0a 23 20 64 65 66  NED_MALLOC.# def
6ea0: 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41  ine EIGHT_BYTE_A
6eb0: 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28  LIGNMENT(X)   ((
6ec0: 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63  ((char*)(X) - (c
6ed0: 68 61 72 2a 29 30 29 26 33 29 3d 3d 30 29 0a 23  har*)0)&3)==0).#
6ee0: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 45 49  else.# define EI
6ef0: 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45  GHT_BYTE_ALIGNME
6f00: 4e 54 28 58 29 20 20 20 28 28 28 28 63 68 61 72  NT(X)   ((((char
6f10: 2a 29 28 58 29 20 2d 20 28 63 68 61 72 2a 29 30  *)(X) - (char*)0
6f20: 29 26 37 29 3d 3d 30 29 0a 23 65 6e 64 69 66 0a  )&7)==0).#endif.
6f30: 0a 2f 2a 0a 2a 2a 20 44 69 73 61 62 6c 65 20 4d  ./*.** Disable M
6f40: 4d 41 50 20 6f 6e 20 70 6c 61 74 66 6f 72 6d 73  MAP on platforms
6f50: 20 77 68 65 72 65 20 69 74 20 69 73 20 6b 6e 6f   where it is kno
6f60: 77 6e 20 74 6f 20 6e 6f 74 20 77 6f 72 6b 0a 2a  wn to not work.*
6f70: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  /.#if defined(__
6f80: 4f 70 65 6e 42 53 44 5f 5f 29 20 7c 7c 20 64 65  OpenBSD__) || de
6f90: 66 69 6e 65 64 28 5f 5f 51 4e 58 4e 54 4f 5f 5f  fined(__QNXNTO__
6fa0: 29 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  ).# undef SQLITE
6fb0: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23  _MAX_MMAP_SIZE.#
6fc0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
6fd0: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23  AX_MMAP_SIZE 0.#
6fe0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 66  endif../*.** Def
6ff0: 61 75 6c 74 20 6d 61 78 69 6d 75 6d 20 73 69 7a  ault maximum siz
7000: 65 20 6f 66 20 6d 65 6d 6f 72 79 20 75 73 65 64  e of memory used
7010: 20 62 79 20 6d 65 6d 6f 72 79 2d 6d 61 70 70 65   by memory-mappe
7020: 64 20 49 2f 4f 20 69 6e 20 74 68 65 20 56 46 53  d I/O in the VFS
7030: 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 5f 41 50 50  .*/.#ifdef __APP
7040: 4c 45 5f 5f 0a 23 20 69 6e 63 6c 75 64 65 20 3c  LE__.# include <
7050: 54 61 72 67 65 74 43 6f 6e 64 69 74 69 6f 6e 61  TargetConditiona
7060: 6c 73 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69 66  ls.h>.#endif.#if
7070: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  ndef SQLITE_MAX_
7080: 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 69 66 20 64  MMAP_SIZE.# if d
7090: 65 66 69 6e 65 64 28 5f 5f 6c 69 6e 75 78 5f 5f  efined(__linux__
70a0: 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64  ) \.  || defined
70b0: 28 5f 57 49 4e 33 32 29 20 5c 0a 20 20 7c 7c 20  (_WIN32) \.  || 
70c0: 28 64 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45  (defined(__APPLE
70d0: 5f 5f 29 20 26 26 20 64 65 66 69 6e 65 64 28 5f  __) && defined(_
70e0: 5f 4d 41 43 48 5f 5f 29 29 20 5c 0a 20 20 7c 7c  _MACH__)) \.  ||
70f0: 20 64 65 66 69 6e 65 64 28 5f 5f 73 75 6e 29 20   defined(__sun) 
7100: 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  \.  || defined(_
7110: 5f 46 72 65 65 42 53 44 5f 5f 29 20 5c 0a 20 20  _FreeBSD__) \.  
7120: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 44 72 61  || defined(__Dra
7130: 67 6f 6e 46 6c 79 5f 5f 29 0a 23 20 20 20 64 65  gonFly__).#   de
7140: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
7150: 4d 4d 41 50 5f 53 49 5a 45 20 30 78 37 66 66 66  MMAP_SIZE 0x7fff
7160: 30 30 30 30 20 20 2f 2a 20 32 31 34 37 34 31 38  0000  /* 2147418
7170: 31 31 32 20 2a 2f 0a 23 20 65 6c 73 65 0a 23 20  112 */.# else.# 
7180: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
7190: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a  MAX_MMAP_SIZE 0.
71a0: 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65  # endif.# define
71b0: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
71c0: 5f 53 49 5a 45 5f 78 63 20 31 20 2f 2a 20 65 78  _SIZE_xc 1 /* ex
71d0: 63 6c 75 64 65 20 66 72 6f 6d 20 63 74 69 6d 65  clude from ctime
71e0: 2e 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a  .c */.#endif../*
71f0: 0a 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20  .** The default 
7200: 4d 4d 41 50 5f 53 49 5a 45 20 69 73 20 7a 65 72  MMAP_SIZE is zer
7210: 6f 20 6f 6e 20 61 6c 6c 20 70 6c 61 74 66 6f 72  o on all platfor
7220: 6d 73 2e 20 20 4f 72 2c 20 65 76 65 6e 20 69 66  ms.  Or, even if
7230: 20 61 20 6c 61 72 67 65 72 0a 2a 2a 20 64 65 66   a larger.** def
7240: 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20 69  ault MMAP_SIZE i
7250: 73 20 73 70 65 63 69 66 69 65 64 20 61 74 20 63  s specified at c
7260: 6f 6d 70 69 6c 65 2d 74 69 6d 65 2c 20 6d 61 6b  ompile-time, mak
7270: 65 20 73 75 72 65 20 74 68 61 74 20 69 74 20 64  e sure that it d
7280: 6f 65 73 0a 2a 2a 20 6e 6f 74 20 65 78 63 65 65  oes.** not excee
7290: 64 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6d 6d  d the maximum mm
72a0: 61 70 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66 6e  ap size..*/.#ifn
72b0: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  def SQLITE_DEFAU
72c0: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64  LT_MMAP_SIZE.# d
72d0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
72e0: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 20 30  AULT_MMAP_SIZE 0
72f0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
7300: 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49  _DEFAULT_MMAP_SI
7310: 5a 45 5f 78 63 20 31 20 20 2f 2a 20 45 78 63 6c  ZE_xc 1  /* Excl
7320: 75 64 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63  ude from ctime.c
7330: 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 20 53   */.#endif.#if S
7340: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d  QLITE_DEFAULT_MM
7350: 41 50 5f 53 49 5a 45 3e 53 51 4c 49 54 45 5f 4d  AP_SIZE>SQLITE_M
7360: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 75  AX_MMAP_SIZE.# u
7370: 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41  ndef SQLITE_DEFA
7380: 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20  ULT_MMAP_SIZE.# 
7390: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
73a0: 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 20  FAULT_MMAP_SIZE 
73b0: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
73c0: 53 49 5a 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  SIZE.#endif../*.
73d0: 2a 2a 20 4f 6e 6c 79 20 6f 6e 65 20 6f 66 20 53  ** Only one of S
73e0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
73f0: 54 33 20 6f 72 20 53 51 4c 49 54 45 5f 45 4e 41  T3 or SQLITE_ENA
7400: 42 4c 45 5f 53 54 41 54 34 20 63 61 6e 20 62 65  BLE_STAT4 can be
7410: 20 64 65 66 69 6e 65 64 2e 0a 2a 2a 20 50 72 69   defined..** Pri
7420: 6f 72 69 74 79 20 69 73 20 67 69 76 65 6e 20 74  ority is given t
7430: 6f 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  o SQLITE_ENABLE_
7440: 53 54 41 54 34 2e 20 20 49 66 20 65 69 74 68 65  STAT4.  If eithe
7450: 72 20 61 72 65 20 64 65 66 69 6e 65 64 2c 20 61  r are defined, a
7460: 6c 73 6f 0a 2a 2a 20 64 65 66 69 6e 65 20 53 51  lso.** define SQ
7470: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
7480: 33 5f 4f 52 5f 53 54 41 54 34 0a 2a 2f 0a 23 69  3_OR_STAT4.*/.#i
7490: 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
74a0: 4c 45 5f 53 54 41 54 34 0a 23 20 75 6e 64 65 66  LE_STAT4.# undef
74b0: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
74c0: 54 41 54 33 0a 23 20 64 65 66 69 6e 65 20 53 51  TAT3.# define SQ
74d0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
74e0: 33 5f 4f 52 5f 53 54 41 54 34 20 31 0a 23 65 6c  3_OR_STAT4 1.#el
74f0: 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  if SQLITE_ENABLE
7500: 5f 53 54 41 54 33 0a 23 20 64 65 66 69 6e 65 20  _STAT3.# define 
7510: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
7520: 41 54 33 5f 4f 52 5f 53 54 41 54 34 20 31 0a 23  AT3_OR_STAT4 1.#
7530: 65 6c 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  elif SQLITE_ENAB
7540: 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
7550: 34 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  4.# undef SQLITE
7560: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
7570: 5f 53 54 41 54 34 0a 23 65 6e 64 69 66 0a 0a 2f  _STAT4.#endif../
7580: 2a 0a 2a 2a 20 53 45 4c 45 43 54 54 52 41 43 45  *.** SELECTTRACE
7590: 5f 45 4e 41 42 4c 45 44 20 77 69 6c 6c 20 62 65  _ENABLED will be
75a0: 20 65 69 74 68 65 72 20 31 20 6f 72 20 30 20 64   either 1 or 0 d
75b0: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74  epending on whet
75c0: 68 65 72 20 6f 72 20 6e 6f 74 0a 2a 2a 20 74 68  her or not.** th
75d0: 65 20 53 65 6c 65 63 74 20 71 75 65 72 79 20 67  e Select query g
75e0: 65 6e 65 72 61 74 6f 72 20 74 72 61 63 69 6e 67  enerator tracing
75f0: 20 6c 6f 67 69 63 20 69 73 20 74 75 72 6e 65 64   logic is turned
7600: 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69   on..*/.#if defi
7610: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
7620: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  ) || defined(SQL
7630: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45 4c 45 43  ITE_ENABLE_SELEC
7640: 54 54 52 41 43 45 29 0a 23 20 64 65 66 69 6e 65  TTRACE).# define
7650: 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41   SELECTTRACE_ENA
7660: 42 4c 45 44 20 31 0a 23 65 6c 73 65 0a 23 20 64  BLED 1.#else.# d
7670: 65 66 69 6e 65 20 53 45 4c 45 43 54 54 52 41 43  efine SELECTTRAC
7680: 45 5f 45 4e 41 42 4c 45 44 20 30 0a 23 65 6e 64  E_ENABLED 0.#end
7690: 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  if../*.** An ins
76a0: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
76b0: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
76c0: 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72   is used to stor
76d0: 65 20 74 68 65 20 62 75 73 79 2d 68 61 6e 64 6c  e the busy-handl
76e0: 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 66  er.** callback f
76f0: 6f 72 20 61 20 67 69 76 65 6e 20 73 71 6c 69 74  or a given sqlit
7700: 65 20 68 61 6e 64 6c 65 2e 0a 2a 2a 0a 2a 2a 20  e handle..**.** 
7710: 54 68 65 20 73 71 6c 69 74 65 2e 62 75 73 79 48  The sqlite.busyH
7720: 61 6e 64 6c 65 72 20 6d 65 6d 62 65 72 20 6f 66  andler member of
7730: 20 74 68 65 20 73 71 6c 69 74 65 20 73 74 72 75   the sqlite stru
7740: 63 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  ct contains the 
7750: 62 75 73 79 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b  busy.** callback
7760: 20 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73   for the databas
7770: 65 20 68 61 6e 64 6c 65 2e 20 45 61 63 68 20 70  e handle. Each p
7780: 61 67 65 72 20 6f 70 65 6e 65 64 20 76 69 61 20  ager opened via 
7790: 74 68 65 20 73 71 6c 69 74 65 0a 2a 2a 20 68 61  the sqlite.** ha
77a0: 6e 64 6c 65 20 69 73 20 70 61 73 73 65 64 20 61  ndle is passed a
77b0: 20 70 6f 69 6e 74 65 72 20 74 6f 20 73 71 6c 69   pointer to sqli
77c0: 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72 2e 20  te.busyHandler. 
77d0: 54 68 65 20 62 75 73 79 2d 68 61 6e 64 6c 65 72  The busy-handler
77e0: 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 69 73 20  .** callback is 
77f0: 63 75 72 72 65 6e 74 6c 79 20 69 6e 76 6f 6b 65  currently invoke
7800: 64 20 6f 6e 6c 79 20 66 72 6f 6d 20 77 69 74 68  d only from with
7810: 69 6e 20 70 61 67 65 72 2e 63 2e 0a 2a 2f 0a 74  in pager.c..*/.t
7820: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 42 75  ypedef struct Bu
7830: 73 79 48 61 6e 64 6c 65 72 20 42 75 73 79 48 61  syHandler BusyHa
7840: 6e 64 6c 65 72 3b 0a 73 74 72 75 63 74 20 42 75  ndler;.struct Bu
7850: 73 79 48 61 6e 64 6c 65 72 20 7b 0a 20 20 69 6e  syHandler {.  in
7860: 74 20 28 2a 78 46 75 6e 63 29 28 76 6f 69 64 20  t (*xFunc)(void 
7870: 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20 54 68 65 20  *,int);  /* The 
7880: 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  busy callback */
7890: 0a 20 20 76 6f 69 64 20 2a 70 41 72 67 3b 20 20  .  void *pArg;  
78a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
78b0: 20 46 69 72 73 74 20 61 72 67 20 74 6f 20 62 75   First arg to bu
78c0: 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  sy callback */. 
78d0: 20 69 6e 74 20 6e 42 75 73 79 3b 20 20 20 20 20   int nBusy;     
78e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
78f0: 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20  ncremented with 
7900: 65 61 63 68 20 62 75 73 79 20 63 61 6c 6c 20 2a  each busy call *
7910: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65  /.};../*.** Name
7920: 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64   of the master d
7930: 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e 20 20  atabase table.  
7940: 54 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62  The master datab
7950: 61 73 65 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20  ase table.** is 
7960: 61 20 73 70 65 63 69 61 6c 20 74 61 62 6c 65 20  a special table 
7970: 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 6e  that holds the n
7980: 61 6d 65 73 20 61 6e 64 20 61 74 74 72 69 62 75  ames and attribu
7990: 74 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a 20 75 73  tes of all.** us
79a0: 65 72 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e  er tables and in
79b0: 64 69 63 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  dices..*/.#defin
79c0: 65 20 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 20  e MASTER_NAME   
79d0: 20 20 20 20 22 73 71 6c 69 74 65 5f 6d 61 73 74      "sqlite_mast
79e0: 65 72 22 0a 23 64 65 66 69 6e 65 20 54 45 4d 50  er".#define TEMP
79f0: 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 22 73  _MASTER_NAME  "s
7a00: 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65  qlite_temp_maste
7a10: 72 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 6f  r"../*.** The ro
7a20: 6f 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20 6d  ot-page of the m
7a30: 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74  aster database t
7a40: 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  able..*/.#define
7a50: 20 4d 41 53 54 45 52 5f 52 4f 4f 54 20 20 20 20   MASTER_ROOT    
7a60: 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20     1../*.** The 
7a70: 6e 61 6d 65 20 6f 66 20 74 68 65 20 73 63 68 65  name of the sche
7a80: 6d 61 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65  ma table..*/.#de
7a90: 66 69 6e 65 20 53 43 48 45 4d 41 5f 54 41 42 4c  fine SCHEMA_TABL
7aa0: 45 28 78 29 20 20 28 28 21 4f 4d 49 54 5f 54 45  E(x)  ((!OMIT_TE
7ab0: 4d 50 44 42 29 26 26 28 78 3d 3d 31 29 3f 54 45  MPDB)&&(x==1)?TE
7ac0: 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 3a 4d  MP_MASTER_NAME:M
7ad0: 41 53 54 45 52 5f 4e 41 4d 45 29 0a 0a 2f 2a 0a  ASTER_NAME)../*.
7ae0: 2a 2a 20 41 20 63 6f 6e 76 65 6e 69 65 6e 63 65  ** A convenience
7af0: 20 6d 61 63 72 6f 20 74 68 61 74 20 72 65 74 75   macro that retu
7b00: 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  rns the number o
7b10: 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 0a 2a 2a  f elements in.**
7b20: 20 61 6e 20 61 72 72 61 79 2e 0a 2a 2f 0a 23 64   an array..*/.#d
7b30: 65 66 69 6e 65 20 41 72 72 61 79 53 69 7a 65 28  efine ArraySize(
7b40: 58 29 20 20 20 20 28 28 69 6e 74 29 28 73 69 7a  X)    ((int)(siz
7b50: 65 6f 66 28 58 29 2f 73 69 7a 65 6f 66 28 58 5b  eof(X)/sizeof(X[
7b60: 30 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a 20 44 65 74  0])))../*.** Det
7b70: 65 72 6d 69 6e 65 20 69 66 20 74 68 65 20 61 72  ermine if the ar
7b80: 67 75 6d 65 6e 74 20 69 73 20 61 20 70 6f 77 65  gument is a powe
7b90: 72 20 6f 66 20 74 77 6f 0a 2a 2f 0a 23 64 65 66  r of two.*/.#def
7ba0: 69 6e 65 20 49 73 50 6f 77 65 72 4f 66 54 77 6f  ine IsPowerOfTwo
7bb0: 28 58 29 20 28 28 28 58 29 26 28 28 58 29 2d 31  (X) (((X)&((X)-1
7bc0: 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68  ))==0)../*.** Th
7bd0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 6c 75  e following valu
7be0: 65 20 61 73 20 61 20 64 65 73 74 72 75 63 74 6f  e as a destructo
7bf0: 72 20 6d 65 61 6e 73 20 74 6f 20 75 73 65 20 73  r means to use s
7c00: 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 2e 0a  qlite3DbFree()..
7c10: 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 33 44 62  ** The sqlite3Db
7c20: 46 72 65 65 28 29 20 72 6f 75 74 69 6e 65 20 72  Free() routine r
7c30: 65 71 75 69 72 65 73 20 74 77 6f 20 70 61 72 61  equires two para
7c40: 6d 65 74 65 72 73 20 69 6e 73 74 65 61 64 20 6f  meters instead o
7c50: 66 20 74 68 65 0a 2a 2a 20 6f 6e 65 20 70 61 72  f the.** one par
7c60: 61 6d 65 74 65 72 20 74 68 61 74 20 64 65 73 74  ameter that dest
7c70: 72 75 63 74 6f 72 73 20 6e 6f 72 6d 61 6c 6c 79  ructors normally
7c80: 20 77 61 6e 74 2e 20 20 53 6f 20 77 65 20 68 61   want.  So we ha
7c90: 76 65 20 74 6f 20 69 6e 74 72 6f 64 75 63 65 0a  ve to introduce.
7ca0: 2a 2a 20 74 68 69 73 20 6d 61 67 69 63 20 76 61  ** this magic va
7cb0: 6c 75 65 20 74 68 61 74 20 74 68 65 20 63 6f 64  lue that the cod
7cc0: 65 20 6b 6e 6f 77 73 20 74 6f 20 68 61 6e 64 6c  e knows to handl
7cd0: 65 20 64 69 66 66 65 72 65 6e 74 6c 79 2e 20 20  e differently.  
7ce0: 41 6e 79 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 77  Any.** pointer w
7cf0: 69 6c 6c 20 77 6f 72 6b 20 68 65 72 65 20 61 73  ill work here as
7d00: 20 6c 6f 6e 67 20 61 73 20 69 74 20 69 73 20 64   long as it is d
7d10: 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 53 51 4c  istinct from SQL
7d20: 49 54 45 5f 53 54 41 54 49 43 0a 2a 2a 20 61 6e  ITE_STATIC.** an
7d30: 64 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45  d SQLITE_TRANSIE
7d40: 4e 54 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  NT..*/.#define S
7d50: 51 4c 49 54 45 5f 44 59 4e 41 4d 49 43 20 20 20  QLITE_DYNAMIC   
7d60: 28 28 73 71 6c 69 74 65 33 5f 64 65 73 74 72 75  ((sqlite3_destru
7d70: 63 74 6f 72 5f 74 79 70 65 29 73 71 6c 69 74 65  ctor_type)sqlite
7d80: 33 4d 61 6c 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a  3MallocSize)../*
7d90: 0a 2a 2a 20 57 68 65 6e 20 53 51 4c 49 54 45 5f  .** When SQLITE_
7da0: 4f 4d 49 54 5f 57 53 44 20 69 73 20 64 65 66 69  OMIT_WSD is defi
7db0: 6e 65 64 2c 20 69 74 20 6d 65 61 6e 73 20 74 68  ned, it means th
7dc0: 61 74 20 74 68 65 20 74 61 72 67 65 74 20 70 6c  at the target pl
7dd0: 61 74 66 6f 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e  atform does.** n
7de0: 6f 74 20 73 75 70 70 6f 72 74 20 57 72 69 74 61  ot support Writa
7df0: 62 6c 65 20 53 74 61 74 69 63 20 44 61 74 61 20  ble Static Data 
7e00: 28 57 53 44 29 20 73 75 63 68 20 61 73 20 67 6c  (WSD) such as gl
7e10: 6f 62 61 6c 20 61 6e 64 20 73 74 61 74 69 63 20  obal and static 
7e20: 76 61 72 69 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c  variables..** Al
7e30: 6c 20 76 61 72 69 61 62 6c 65 73 20 6d 75 73 74  l variables must
7e40: 20 65 69 74 68 65 72 20 62 65 20 6f 6e 20 74 68   either be on th
7e50: 65 20 73 74 61 63 6b 20 6f 72 20 64 79 6e 61 6d  e stack or dynam
7e60: 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64  ically allocated
7e70: 20 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 68 65 61   from.** the hea
7e80: 70 2e 20 20 57 68 65 6e 20 57 53 44 20 69 73 20  p.  When WSD is 
7e90: 75 6e 73 75 70 70 6f 72 74 65 64 2c 20 74 68 65  unsupported, the
7ea0: 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61 72   variable declar
7eb0: 61 74 69 6f 6e 73 20 73 63 61 74 74 65 72 65 64  ations scattered
7ec0: 0a 2a 2a 20 74 68 72 6f 75 67 68 6f 75 74 20 74  .** throughout t
7ed0: 68 65 20 53 51 4c 69 74 65 20 63 6f 64 65 20 6d  he SQLite code m
7ee0: 75 73 74 20 62 65 63 6f 6d 65 20 63 6f 6e 73 74  ust become const
7ef0: 61 6e 74 73 20 69 6e 73 74 65 61 64 2e 20 20 54  ants instead.  T
7f00: 68 65 20 53 51 4c 49 54 45 5f 57 53 44 0a 2a 2a  he SQLITE_WSD.**
7f10: 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 66   macro is used f
7f20: 6f 72 20 74 68 69 73 20 70 75 72 70 6f 73 65 2e  or this purpose.
7f30: 20 20 41 6e 64 20 69 6e 73 74 65 61 64 20 6f 66    And instead of
7f40: 20 72 65 66 65 72 65 6e 63 69 6e 67 20 74 68 65   referencing the
7f50: 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 64 69 72   variable.** dir
7f60: 65 63 74 6c 79 2c 20 77 65 20 75 73 65 20 69 74  ectly, we use it
7f70: 73 20 63 6f 6e 73 74 61 6e 74 20 61 73 20 61 20  s constant as a 
7f80: 6b 65 79 20 74 6f 20 6c 6f 6f 6b 75 70 20 74 68  key to lookup th
7f90: 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63  e run-time alloc
7fa0: 61 74 65 64 0a 2a 2a 20 62 75 66 66 65 72 20 74  ated.** buffer t
7fb0: 68 61 74 20 68 6f 6c 64 73 20 72 65 61 6c 20 76  hat holds real v
7fc0: 61 72 69 61 62 6c 65 2e 20 20 54 68 65 20 63 6f  ariable.  The co
7fd0: 6e 73 74 61 6e 74 20 69 73 20 61 6c 73 6f 20 74  nstant is also t
7fe0: 68 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 0a 2a  he initializer.*
7ff0: 2a 20 66 6f 72 20 74 68 65 20 72 75 6e 2d 74 69  * for the run-ti
8000: 6d 65 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66  me allocated buf
8010: 66 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68  fer..**.** In th
8020: 65 20 75 73 75 61 6c 20 63 61 73 65 20 77 68 65  e usual case whe
8030: 72 65 20 57 53 44 20 69 73 20 73 75 70 70 6f 72  re WSD is suppor
8040: 74 65 64 2c 20 74 68 65 20 53 51 4c 49 54 45 5f  ted, the SQLITE_
8050: 57 53 44 20 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a  WSD and GLOBAL.*
8060: 2a 20 6d 61 63 72 6f 73 20 62 65 63 6f 6d 65 20  * macros become 
8070: 6e 6f 2d 6f 70 73 20 61 6e 64 20 68 61 76 65 20  no-ops and have 
8080: 7a 65 72 6f 20 70 65 72 66 6f 72 6d 61 6e 63 65  zero performance
8090: 20 69 6d 70 61 63 74 2e 0a 2a 2f 0a 23 69 66 64   impact..*/.#ifd
80a0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
80b0: 53 44 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c  SD.  #define SQL
80c0: 49 54 45 5f 57 53 44 20 63 6f 6e 73 74 0a 20 20  ITE_WSD const.  
80d0: 23 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74  #define GLOBAL(t
80e0: 2c 76 29 20 28 2a 28 74 2a 29 73 71 6c 69 74 65  ,v) (*(t*)sqlite
80f0: 33 5f 77 73 64 5f 66 69 6e 64 28 28 76 6f 69 64  3_wsd_find((void
8100: 2a 29 26 28 76 29 2c 20 73 69 7a 65 6f 66 28 76  *)&(v), sizeof(v
8110: 29 29 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ))).  #define sq
8120: 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
8130: 67 20 47 4c 4f 42 41 4c 28 73 74 72 75 63 74 20  g GLOBAL(struct 
8140: 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 2c 20 73  Sqlite3Config, s
8150: 71 6c 69 74 65 33 43 6f 6e 66 69 67 29 0a 20 20  qlite3Config).  
8160: 69 6e 74 20 73 71 6c 69 74 65 33 5f 77 73 64 5f  int sqlite3_wsd_
8170: 69 6e 69 74 28 69 6e 74 20 4e 2c 20 69 6e 74 20  init(int N, int 
8180: 4a 29 3b 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69  J);.  void *sqli
8190: 74 65 33 5f 77 73 64 5f 66 69 6e 64 28 76 6f 69  te3_wsd_find(voi
81a0: 64 20 2a 4b 2c 20 69 6e 74 20 4c 29 3b 0a 23 65  d *K, int L);.#e
81b0: 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 53 51  lse.  #define SQ
81c0: 4c 49 54 45 5f 57 53 44 0a 20 20 23 64 65 66 69  LITE_WSD.  #defi
81d0: 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 76  ne GLOBAL(t,v) v
81e0: 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
81f0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 73  e3GlobalConfig s
8200: 71 6c 69 74 65 33 43 6f 6e 66 69 67 0a 23 65 6e  qlite3Config.#en
8210: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  dif../*.** The f
8220: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
8230: 61 72 65 20 75 73 65 64 20 74 6f 20 73 75 70 70  are used to supp
8240: 72 65 73 73 20 63 6f 6d 70 69 6c 65 72 20 77 61  ress compiler wa
8250: 72 6e 69 6e 67 73 20 61 6e 64 20 74 6f 0a 2a 2a  rnings and to.**
8260: 20 6d 61 6b 65 20 69 74 20 63 6c 65 61 72 20 74   make it clear t
8270: 6f 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73 20  o human readers 
8280: 77 68 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20  when a function 
8290: 70 61 72 61 6d 65 74 65 72 20 69 73 20 64 65 6c  parameter is del
82a0: 69 62 65 72 61 74 65 6c 79 0a 2a 2a 20 6c 65 66  iberately.** lef
82b0: 74 20 75 6e 75 73 65 64 20 77 69 74 68 69 6e 20  t unused within 
82c0: 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75  the body of a fu
82d0: 6e 63 74 69 6f 6e 2e 20 54 68 69 73 20 75 73 75  nction. This usu
82e0: 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 77 68 65  ally happens whe
82f0: 6e 0a 2a 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20  n.** a function 
8300: 69 73 20 63 61 6c 6c 65 64 20 76 69 61 20 61 20  is called via a 
8310: 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72  function pointer
8320: 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68  . For example th
8330: 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74  e.** implementat
8340: 69 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67  ion of an SQL ag
8350: 67 72 65 67 61 74 65 20 73 74 65 70 20 63 61 6c  gregate step cal
8360: 6c 62 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73  lback may not us
8370: 65 20 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74  e the.** paramet
8380: 65 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68  er indicating th
8390: 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  e number of argu
83a0: 6d 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20  ments passed to 
83b0: 74 68 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a  the aggregate,.*
83c0: 2a 20 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68  * if it knows th
83d0: 61 74 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72  at this is enfor
83e0: 63 65 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a  ced elsewhere..*
83f0: 2a 0a 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63  *.** When a func
8400: 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69  tion parameter i
8410: 73 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c  s not used at al
8420: 6c 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64  l within the bod
8430: 79 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c  y of a function,
8440: 0a 2a 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61  .** it is genera
8450: 6c 6c 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73  lly named "NotUs
8460: 65 64 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32  ed" or "NotUsed2
8470: 22 20 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73  " to make things
8480: 20 65 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a   even clearer..*
8490: 2a 20 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65  * However, these
84a0: 20 6d 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f   macros may also
84b0: 20 62 65 20 75 73 65 64 20 74 6f 20 73 75 70 70   be used to supp
84c0: 72 65 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65  ress warnings re
84d0: 6c 61 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61  lated to.** para
84e0: 6d 65 74 65 72 73 20 74 68 61 74 20 6d 61 79 20  meters that may 
84f0: 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73  or may not be us
8500: 65 64 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  ed depending on 
8510: 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69  compilation opti
8520: 6f 6e 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d  ons..** For exam
8530: 70 6c 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65  ple those parame
8540: 74 65 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69  ters only used i
8550: 6e 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  n assert() state
8560: 6d 65 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a  ments. In these.
8570: 2a 2a 20 63 61 73 65 73 20 74 68 65 20 70 61 72  ** cases the par
8580: 61 6d 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65  ameters are name
8590: 64 20 61 73 20 70 65 72 20 74 68 65 20 75 73 75  d as per the usu
85a0: 61 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a  al conventions..
85b0: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45  */.#define UNUSE
85c0: 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29 20 28  D_PARAMETER(x) (
85d0: 76 6f 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65  void)(x).#define
85e0: 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45   UNUSED_PARAMETE
85f0: 52 32 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50  R2(x,y) UNUSED_P
8600: 41 52 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53  ARAMETER(x),UNUS
8610: 45 44 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a  ED_PARAMETER(y).
8620: 0a 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72  ./*.** Forward r
8630: 65 66 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72  eferences to str
8640: 75 63 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64  uctures.*/.typed
8650: 65 66 20 73 74 72 75 63 74 20 41 67 67 49 6e 66  ef struct AggInf
8660: 6f 20 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64  o AggInfo;.typed
8670: 65 66 20 73 74 72 75 63 74 20 41 75 74 68 43 6f  ef struct AuthCo
8680: 6e 74 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78  ntext AuthContex
8690: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
86a0: 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75  t AutoincInfo Au
86b0: 74 6f 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64  toincInfo;.typed
86c0: 65 66 20 73 74 72 75 63 74 20 42 69 74 76 65 63  ef struct Bitvec
86d0: 20 42 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66   Bitvec;.typedef
86e0: 20 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20   struct CollSeq 
86f0: 43 6f 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66  CollSeq;.typedef
8700: 20 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43   struct Column C
8710: 6f 6c 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73  olumn;.typedef s
8720: 74 72 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70  truct Db Db;.typ
8730: 65 64 65 66 20 73 74 72 75 63 74 20 53 63 68 65  edef struct Sche
8740: 6d 61 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64  ma Schema;.typed
8750: 65 66 20 73 74 72 75 63 74 20 45 78 70 72 20 45  ef struct Expr E
8760: 78 70 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  xpr;.typedef str
8770: 75 63 74 20 45 78 70 72 4c 69 73 74 20 45 78 70  uct ExprList Exp
8780: 72 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73  rList;.typedef s
8790: 74 72 75 63 74 20 45 78 70 72 53 70 61 6e 20 45  truct ExprSpan E
87a0: 78 70 72 53 70 61 6e 3b 0a 74 79 70 65 64 65 66  xprSpan;.typedef
87b0: 20 73 74 72 75 63 74 20 46 4b 65 79 20 46 4b 65   struct FKey FKe
87c0: 79 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  y;.typedef struc
87d0: 74 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72  t FuncDestructor
87e0: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 3b   FuncDestructor;
87f0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8800: 46 75 6e 63 44 65 66 20 46 75 6e 63 44 65 66 3b  FuncDef FuncDef;
8810: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8820: 46 75 6e 63 44 65 66 48 61 73 68 20 46 75 6e 63  FuncDefHash Func
8830: 44 65 66 48 61 73 68 3b 0a 74 79 70 65 64 65 66  DefHash;.typedef
8840: 20 73 74 72 75 63 74 20 49 64 4c 69 73 74 20 49   struct IdList I
8850: 64 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73  dList;.typedef s
8860: 74 72 75 63 74 20 49 6e 64 65 78 20 49 6e 64 65  truct Index Inde
8870: 78 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  x;.typedef struc
8880: 74 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e  t IndexSample In
8890: 64 65 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64  dexSample;.typed
88a0: 65 66 20 73 74 72 75 63 74 20 4b 65 79 43 6c 61  ef struct KeyCla
88b0: 73 73 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70  ss KeyClass;.typ
88c0: 65 64 65 66 20 73 74 72 75 63 74 20 4b 65 79 49  edef struct KeyI
88d0: 6e 66 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70  nfo KeyInfo;.typ
88e0: 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b  edef struct Look
88f0: 61 73 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b  aside Lookaside;
8900: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8910: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f  LookasideSlot Lo
8920: 6f 6b 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70  okasideSlot;.typ
8930: 65 64 65 66 20 73 74 72 75 63 74 20 4d 6f 64 75  edef struct Modu
8940: 6c 65 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64  le Module;.typed
8950: 65 66 20 73 74 72 75 63 74 20 4e 61 6d 65 43 6f  ef struct NameCo
8960: 6e 74 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78  ntext NameContex
8970: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
8980: 74 20 50 61 72 73 65 20 50 61 72 73 65 3b 0a 74  t Parse Parse;.t
8990: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 50 72  ypedef struct Pr
89a0: 65 55 70 64 61 74 65 20 50 72 65 55 70 64 61 74  eUpdate PreUpdat
89b0: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
89c0: 74 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74  t PrintfArgument
89d0: 73 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74  s PrintfArgument
89e0: 73 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  s;.typedef struc
89f0: 74 20 52 6f 77 53 65 74 20 52 6f 77 53 65 74 3b  t RowSet RowSet;
8a00: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8a10: 53 61 76 65 70 6f 69 6e 74 20 53 61 76 65 70 6f  Savepoint Savepo
8a20: 69 6e 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  int;.typedef str
8a30: 75 63 74 20 53 65 6c 65 63 74 20 53 65 6c 65 63  uct Select Selec
8a40: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
8a50: 74 20 53 51 4c 69 74 65 54 68 72 65 61 64 20 53  t SQLiteThread S
8a60: 51 4c 69 74 65 54 68 72 65 61 64 3b 0a 74 79 70  QLiteThread;.typ
8a70: 65 64 65 66 20 73 74 72 75 63 74 20 53 65 6c 65  edef struct Sele
8a80: 63 74 44 65 73 74 20 53 65 6c 65 63 74 44 65 73  ctDest SelectDes
8a90: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
8aa0: 74 20 53 72 63 4c 69 73 74 20 53 72 63 4c 69 73  t SrcList SrcLis
8ab0: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
8ac0: 74 20 53 74 72 41 63 63 75 6d 20 53 74 72 41 63  t StrAccum StrAc
8ad0: 63 75 6d 3b 0a 74 79 70 65 64 65 66 20 73 74 72  cum;.typedef str
8ae0: 75 63 74 20 54 61 62 6c 65 20 54 61 62 6c 65 3b  uct Table Table;
8af0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8b00: 54 61 62 6c 65 4c 6f 63 6b 20 54 61 62 6c 65 4c  TableLock TableL
8b10: 6f 63 6b 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ock;.typedef str
8b20: 75 63 74 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b  uct Token Token;
8b30: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8b40: 54 72 65 65 56 69 65 77 20 54 72 65 65 56 69 65  TreeView TreeVie
8b50: 77 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  w;.typedef struc
8b60: 74 20 54 72 69 67 67 65 72 20 54 72 69 67 67 65  t Trigger Trigge
8b70: 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  r;.typedef struc
8b80: 74 20 54 72 69 67 67 65 72 50 72 67 20 54 72 69  t TriggerPrg Tri
8b90: 67 67 65 72 50 72 67 3b 0a 74 79 70 65 64 65 66  ggerPrg;.typedef
8ba0: 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53   struct TriggerS
8bb0: 74 65 70 20 54 72 69 67 67 65 72 53 74 65 70 3b  tep TriggerStep;
8bc0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8bd0: 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 55  UnpackedRecord U
8be0: 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74  npackedRecord;.t
8bf0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 56 54  ypedef struct VT
8c00: 61 62 6c 65 20 56 54 61 62 6c 65 3b 0a 74 79 70  able VTable;.typ
8c10: 65 64 65 66 20 73 74 72 75 63 74 20 56 74 61 62  edef struct Vtab
8c20: 43 74 78 20 56 74 61 62 43 74 78 3b 0a 74 79 70  Ctx VtabCtx;.typ
8c30: 65 64 65 66 20 73 74 72 75 63 74 20 57 61 6c 6b  edef struct Walk
8c40: 65 72 20 57 61 6c 6b 65 72 3b 0a 74 79 70 65 64  er Walker;.typed
8c50: 65 66 20 73 74 72 75 63 74 20 57 68 65 72 65 49  ef struct WhereI
8c60: 6e 66 6f 20 57 68 65 72 65 49 6e 66 6f 3b 0a 74  nfo WhereInfo;.t
8c70: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57 69  ypedef struct Wi
8c80: 74 68 20 57 69 74 68 3b 0a 0a 2f 2a 20 41 20 56  th With;../* A V
8c90: 4c 69 73 74 20 6f 62 6a 65 63 74 20 72 65 63 6f  List object reco
8ca0: 72 64 73 20 61 20 6d 61 70 70 69 6e 67 20 62 65  rds a mapping be
8cb0: 74 77 65 65 6e 20 70 61 72 61 6d 65 74 65 72 73  tween parameters
8cc0: 2f 76 61 72 69 61 62 6c 65 73 2f 77 69 6c 64 63  /variables/wildc
8cd0: 61 72 64 73 0a 2a 2a 20 69 6e 20 74 68 65 20 53  ards.** in the S
8ce0: 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 28 73 75  QL statement (su
8cf0: 63 68 20 61 73 20 24 61 62 63 2c 20 40 70 71 72  ch as $abc, @pqr
8d00: 2c 20 6f 72 20 3a 78 79 7a 29 20 61 6e 64 20 74  , or :xyz) and t
8d10: 68 65 20 69 6e 74 65 67 65 72 0a 2a 2a 20 76 61  he integer.** va
8d20: 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 61 73  riable number as
8d30: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
8d40: 61 74 20 70 61 72 61 6d 65 74 65 72 2e 20 20 53  at parameter.  S
8d50: 65 65 20 74 68 65 20 66 6f 72 6d 61 74 20 64 65  ee the format de
8d60: 73 63 72 69 70 74 69 6f 6e 0a 2a 2a 20 6f 6e 20  scription.** on 
8d70: 74 68 65 20 73 71 6c 69 74 65 33 56 4c 69 73 74  the sqlite3VList
8d80: 41 64 64 28 29 20 72 6f 75 74 69 6e 65 20 66 6f  Add() routine fo
8d90: 72 20 6d 6f 72 65 20 69 6e 66 6f 72 6d 61 74 69  r more informati
8da0: 6f 6e 2e 20 20 41 20 56 4c 69 73 74 20 69 73 20  on.  A VList is 
8db0: 72 65 61 6c 6c 79 0a 2a 2a 20 6a 75 73 74 20 61  really.** just a
8dc0: 6e 20 61 72 72 61 79 20 6f 66 20 69 6e 74 65 67  n array of integ
8dd0: 65 72 73 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  ers..*/.typedef 
8de0: 69 6e 74 20 56 4c 69 73 74 3b 0a 0a 2f 2a 0a 2a  int VList;../*.*
8df0: 2a 20 44 65 66 65 72 20 73 6f 75 72 63 69 6e 67  * Defer sourcing
8e00: 20 76 64 62 65 2e 68 20 61 6e 64 20 62 74 72 65   vdbe.h and btre
8e10: 65 2e 68 20 75 6e 74 69 6c 20 61 66 74 65 72 20  e.h until after 
8e20: 74 68 65 20 22 75 38 22 20 61 6e 64 0a 2a 2a 20  the "u8" and.** 
8e30: 22 42 75 73 79 48 61 6e 64 6c 65 72 22 20 74 79  "BusyHandler" ty
8e40: 70 65 64 65 66 73 2e 20 76 64 62 65 2e 68 20 61  pedefs. vdbe.h a
8e50: 6c 73 6f 20 72 65 71 75 69 72 65 73 20 61 20 66  lso requires a f
8e60: 65 77 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65  ew of the opaque
8e70: 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 79 70 65  .** pointer type
8e80: 73 20 28 69 2e 65 2e 20 46 75 6e 63 44 65 66 29  s (i.e. FuncDef)
8e90: 20 64 65 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a   defined above..
8ea0: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 62 74 72  */.#include "btr
8eb0: 65 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  ee.h".#include "
8ec0: 76 64 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65  vdbe.h".#include
8ed0: 20 22 70 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c   "pager.h".#incl
8ee0: 75 64 65 20 22 70 63 61 63 68 65 2e 68 22 0a 23  ude "pcache.h".#
8ef0: 69 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23  include "os.h".#
8f00: 69 6e 63 6c 75 64 65 20 22 6d 75 74 65 78 2e 68  include "mutex.h
8f10: 22 0a 0a 2f 2a 20 54 68 65 20 53 51 4c 49 54 45  "../* The SQLITE
8f20: 5f 45 58 54 52 41 5f 44 55 52 41 42 4c 45 20 63  _EXTRA_DURABLE c
8f30: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
8f40: 6f 6e 20 75 73 65 64 20 74 6f 20 73 65 74 20 74  on used to set t
8f50: 68 65 20 64 65 66 61 75 6c 74 0a 2a 2a 20 73 79  he default.** sy
8f60: 6e 63 68 72 6f 6e 6f 75 73 20 73 65 74 74 69 6e  nchronous settin
8f70: 67 20 74 6f 20 45 58 54 52 41 2e 20 20 49 74 20  g to EXTRA.  It 
8f80: 69 73 20 6e 6f 20 6c 6f 6e 67 65 72 20 73 75 70  is no longer sup
8f90: 70 6f 72 74 65 64 2e 0a 2a 2f 0a 23 69 66 64 65  ported..*/.#ifde
8fa0: 66 20 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44  f SQLITE_EXTRA_D
8fb0: 55 52 41 42 4c 45 0a 23 20 77 61 72 6e 69 6e 67  URABLE.# warning
8fc0: 20 55 73 65 20 53 51 4c 49 54 45 5f 44 45 46 41   Use SQLITE_DEFA
8fd0: 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 3d  ULT_SYNCHRONOUS=
8fe0: 33 20 69 6e 73 74 65 61 64 20 6f 66 20 53 51 4c  3 instead of SQL
8ff0: 49 54 45 5f 45 58 54 52 41 5f 44 55 52 41 42 4c  ITE_EXTRA_DURABL
9000: 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  E.# define SQLIT
9010: 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52  E_DEFAULT_SYNCHR
9020: 4f 4e 4f 55 53 20 33 0a 23 65 6e 64 69 66 0a 0a  ONOUS 3.#endif..
9030: 2f 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 73 79  /*.** Default sy
9040: 6e 63 68 72 6f 6e 6f 75 73 20 6c 65 76 65 6c 73  nchronous levels
9050: 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61  ..**.** Note tha
9060: 74 20 28 66 6f 72 20 68 69 73 74 6f 72 63 61 6c  t (for historcal
9070: 20 72 65 61 73 6f 6e 73 29 20 74 68 65 20 50 41   reasons) the PA
9080: 47 45 52 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 5f  GER_SYNCHRONOUS_
9090: 2a 20 6d 61 63 72 6f 73 20 64 69 66 66 65 72 0a  * macros differ.
90a0: 2a 2a 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49  ** from the SQLI
90b0: 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48  TE_DEFAULT_SYNCH
90c0: 52 4f 4e 4f 55 53 20 76 61 6c 75 65 20 62 79 20  RONOUS value by 
90d0: 31 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20  1..**.**        
90e0: 20 20 20 50 41 47 45 52 5f 53 59 4e 43 48 52 4f     PAGER_SYNCHRO
90f0: 4e 4f 55 53 20 20 20 20 20 20 20 44 45 46 41 55  NOUS       DEFAU
9100: 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 2a  LT_SYNCHRONOUS.*
9110: 2a 20 20 20 4f 46 46 20 20 20 20 20 20 20 20 20  *   OFF         
9120: 20 20 31 20 20 20 20 20 20 20 20 20 20 20 20 20    1             
9130: 20 20 20 20 20 20 20 20 20 20 20 20 30 0a 2a 2a              0.**
9140: 20 20 20 4e 4f 52 4d 41 4c 20 20 20 20 20 20 20     NORMAL       
9150: 20 32 20 20 20 20 20 20 20 20 20 20 20 20 20 20   2              
9160: 20 20 20 20 20 20 20 20 20 20 20 31 0a 2a 2a 20             1.** 
9170: 20 20 46 55 4c 4c 20 20 20 20 20 20 20 20 20 20    FULL          
9180: 33 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  3               
9190: 20 20 20 20 20 20 20 20 20 20 32 0a 2a 2a 20 20            2.**  
91a0: 20 45 58 54 52 41 20 20 20 20 20 20 20 20 20 34   EXTRA         4
91b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
91c0: 20 20 20 20 20 20 20 20 20 33 0a 2a 2a 0a 2a 2a           3.**.**
91d0: 20 54 68 65 20 22 50 52 41 47 4d 41 20 73 79 6e   The "PRAGMA syn
91e0: 63 68 72 6f 6e 6f 75 73 22 20 73 74 61 74 65 6d  chronous" statem
91f0: 65 6e 74 20 61 6c 73 6f 20 75 73 65 73 20 74 68  ent also uses th
9200: 65 20 7a 65 72 6f 2d 62 61 73 65 64 20 6e 75 6d  e zero-based num
9210: 62 65 72 73 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65  bers..** In othe
9220: 72 20 77 6f 72 64 73 2c 20 74 68 65 20 7a 65 72  r words, the zer
9230: 6f 2d 62 61 73 65 64 20 6e 75 6d 62 65 72 73 20  o-based numbers 
9240: 61 72 65 20 75 73 65 64 20 66 6f 72 20 61 6c 6c  are used for all
9250: 20 65 78 74 65 72 6e 61 6c 20 69 6e 74 65 72 66   external interf
9260: 61 63 65 73 0a 2a 2a 20 61 6e 64 20 74 68 65 20  aces.** and the 
9270: 6f 6e 65 2d 62 61 73 65 64 20 76 61 6c 75 65 73  one-based values
9280: 20 61 72 65 20 75 73 65 64 20 69 6e 74 65 72 6e   are used intern
9290: 61 6c 6c 79 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  ally..*/.#ifndef
92a0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
92b0: 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 23 20 64 65  SYNCHRONOUS.# de
92c0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41  fine SQLITE_DEFA
92d0: 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20  ULT_SYNCHRONOUS 
92e0: 28 50 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e 4f  (PAGER_SYNCHRONO
92f0: 55 53 5f 46 55 4c 4c 2d 31 29 0a 23 65 6e 64 69  US_FULL-1).#endi
9300: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
9310: 5f 44 45 46 41 55 4c 54 5f 57 41 4c 5f 53 59 4e  _DEFAULT_WAL_SYN
9320: 43 48 52 4f 4e 4f 55 53 0a 23 20 64 65 66 69 6e  CHRONOUS.# defin
9330: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
9340: 5f 57 41 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55 53  _WAL_SYNCHRONOUS
9350: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
9360: 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 23 65 6e 64  SYNCHRONOUS.#end
9370: 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64  if../*.** Each d
9380: 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20  atabase file to 
9390: 62 65 20 61 63 63 65 73 73 65 64 20 62 79 20 74  be accessed by t
93a0: 68 65 20 73 79 73 74 65 6d 20 69 73 20 61 6e 20  he system is an 
93b0: 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74  instance.** of t
93c0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
93d0: 75 63 74 75 72 65 2e 20 20 54 68 65 72 65 20 61  ucture.  There a
93e0: 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20  re normally two 
93f0: 6f 66 20 74 68 65 73 65 20 73 74 72 75 63 74 75  of these structu
9400: 72 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71  res.** in the sq
9410: 6c 69 74 65 2e 61 44 62 5b 5d 20 61 72 72 61 79  lite.aDb[] array
9420: 2e 20 20 61 44 62 5b 30 5d 20 69 73 20 74 68 65  .  aDb[0] is the
9430: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
9440: 69 6c 65 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31  ile and.** aDb[1
9450: 5d 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73  ] is the databas
9460: 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 68  e file used to h
9470: 6f 6c 64 20 74 65 6d 70 6f 72 61 72 79 20 74 61  old temporary ta
9480: 62 6c 65 73 2e 20 20 41 64 64 69 74 69 6f 6e 61  bles.  Additiona
9490: 6c 0a 2a 2a 20 64 61 74 61 62 61 73 65 73 20 6d  l.** databases m
94a0: 61 79 20 62 65 20 61 74 74 61 63 68 65 64 2e 0a  ay be attached..
94b0: 2a 2f 0a 73 74 72 75 63 74 20 44 62 20 7b 0a 20  */.struct Db {. 
94c0: 20 63 68 61 72 20 2a 7a 44 62 53 4e 61 6d 65 3b   char *zDbSName;
94d0: 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
94e0: 20 74 68 69 73 20 64 61 74 61 62 61 73 65 2e 20   this database. 
94f0: 28 73 63 68 65 6d 61 20 6e 61 6d 65 2c 20 6e 6f  (schema name, no
9500: 74 20 66 69 6c 65 6e 61 6d 65 29 20 2a 2f 0a 20  t filename) */. 
9510: 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20   Btree *pBt;    
9520: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 42 2a 54        /* The B*T
9530: 72 65 65 20 73 74 72 75 63 74 75 72 65 20 66 6f  ree structure fo
9540: 72 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20  r this database 
9550: 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 73 61 66  file */.  u8 saf
9560: 65 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20 2f  ety_level;     /
9570: 2a 20 48 6f 77 20 61 67 67 72 65 73 73 69 76 65  * How aggressive
9580: 20 61 74 20 73 79 6e 63 69 6e 67 20 64 61 74 61   at syncing data
9590: 20 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 75 38   to disk */.  u8
95a0: 20 62 53 79 6e 63 53 65 74 3b 20 20 20 20 20 20   bSyncSet;      
95b0: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 22 50     /* True if "P
95c0: 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75  RAGMA synchronou
95d0: 73 3d 4e 22 20 68 61 73 20 62 65 65 6e 20 72 75  s=N" has been ru
95e0: 6e 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  n */.  Schema *p
95f0: 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 50  Schema;     /* P
9600: 6f 69 6e 74 65 72 20 74 6f 20 64 61 74 61 62 61  ointer to databa
9610: 73 65 20 73 63 68 65 6d 61 20 28 70 6f 73 73 69  se schema (possi
9620: 62 6c 79 20 73 68 61 72 65 64 29 20 2a 2f 0a 7d  bly shared) */.}
9630: 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  ;../*.** An inst
9640: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
9650: 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
9660: 73 74 6f 72 65 73 20 61 20 64 61 74 61 62 61 73  stores a databas
9670: 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20  e schema..**.** 
9680: 4d 6f 73 74 20 53 63 68 65 6d 61 20 6f 62 6a 65  Most Schema obje
9690: 63 74 73 20 61 72 65 20 61 73 73 6f 63 69 61 74  cts are associat
96a0: 65 64 20 77 69 74 68 20 61 20 42 74 72 65 65 2e  ed with a Btree.
96b0: 20 20 54 68 65 20 65 78 63 65 70 74 69 6f 6e 20    The exception 
96c0: 69 73 0a 2a 2a 20 74 68 65 20 53 63 68 65 6d 61  is.** the Schema
96d0: 20 66 6f 72 20 74 68 65 20 54 45 4d 50 20 64 61   for the TEMP da
96e0: 74 61 62 61 65 73 20 28 73 71 6c 69 74 65 33 2e  tabaes (sqlite3.
96f0: 61 44 62 5b 31 5d 29 20 77 68 69 63 68 20 69 73  aDb[1]) which is
9700: 20 66 72 65 65 2d 73 74 61 6e 64 69 6e 67 2e 0a   free-standing..
9710: 2a 2a 20 49 6e 20 73 68 61 72 65 64 20 63 61 63  ** In shared cac
9720: 68 65 20 6d 6f 64 65 2c 20 61 20 73 69 6e 67 6c  he mode, a singl
9730: 65 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 20  e Schema object 
9740: 63 61 6e 20 62 65 20 73 68 61 72 65 64 20 62 79  can be shared by
9750: 20 6d 75 6c 74 69 70 6c 65 0a 2a 2a 20 42 74 72   multiple.** Btr
9760: 65 65 73 20 74 68 61 74 20 72 65 66 65 72 20 74  ees that refer t
9770: 6f 20 74 68 65 20 73 61 6d 65 20 75 6e 64 65 72  o the same under
9780: 6c 79 69 6e 67 20 42 74 53 68 61 72 65 64 20 6f  lying BtShared o
9790: 62 6a 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 53 63 68  bject..**.** Sch
97a0: 65 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20  ema objects are 
97b0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65  automatically de
97c0: 61 6c 6c 6f 63 61 74 65 64 20 77 68 65 6e 20 74  allocated when t
97d0: 68 65 20 6c 61 73 74 20 42 74 72 65 65 20 74 68  he last Btree th
97e0: 61 74 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 73  at.** references
97f0: 20 74 68 65 6d 20 69 73 20 64 65 73 74 72 6f 79   them is destroy
9800: 65 64 2e 20 20 20 54 68 65 20 54 45 4d 50 20 53  ed.   The TEMP S
9810: 63 68 65 6d 61 20 69 73 20 6d 61 6e 75 61 6c 6c  chema is manuall
9820: 79 20 66 72 65 65 64 20 62 79 0a 2a 2a 20 73 71  y freed by.** sq
9830: 6c 69 74 65 33 5f 63 6c 6f 73 65 28 29 2e 0a 2a  lite3_close()..*
9840: 0a 2a 2a 20 41 20 74 68 72 65 61 64 20 6d 75 73  .** A thread mus
9850: 74 20 62 65 20 68 6f 6c 64 69 6e 67 20 61 20 6d  t be holding a m
9860: 75 74 65 78 20 6f 6e 20 74 68 65 20 63 6f 72 72  utex on the corr
9870: 65 73 70 6f 6e 64 69 6e 67 20 42 74 72 65 65 20  esponding Btree 
9880: 69 6e 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 61  in order.** to a
9890: 63 63 65 73 73 20 53 63 68 65 6d 61 20 63 6f 6e  ccess Schema con
98a0: 74 65 6e 74 2e 20 20 54 68 69 73 20 69 6d 70 6c  tent.  This impl
98b0: 69 65 73 20 74 68 61 74 20 74 68 65 20 74 68 72  ies that the thr
98c0: 65 61 64 20 6d 75 73 74 20 61 6c 73 6f 20 62 65  ead must also be
98d0: 0a 2a 2a 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75  .** holding a mu
98e0: 74 65 78 20 6f 6e 20 74 68 65 20 73 71 6c 69 74  tex on the sqlit
98f0: 65 33 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f  e3 connection po
9900: 69 6e 74 65 72 20 74 68 61 74 20 6f 77 6e 73 20  inter that owns 
9910: 74 68 65 20 42 74 72 65 65 2e 0a 2a 2a 20 46 6f  the Btree..** Fo
9920: 72 20 61 20 54 45 4d 50 20 53 63 68 65 6d 61 2c  r a TEMP Schema,
9930: 20 6f 6e 6c 79 20 74 68 65 20 63 6f 6e 6e 65 63   only the connec
9940: 74 69 6f 6e 20 6d 75 74 65 78 20 69 73 20 72 65  tion mutex is re
9950: 71 75 69 72 65 64 2e 0a 2a 2f 0a 73 74 72 75 63  quired..*/.struc
9960: 74 20 53 63 68 65 6d 61 20 7b 0a 20 20 69 6e 74  t Schema {.  int
9970: 20 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20   schema_cookie; 
9980: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 73 63    /* Database sc
9990: 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d  hema version num
99a0: 62 65 72 20 66 6f 72 20 74 68 69 73 20 66 69 6c  ber for this fil
99b0: 65 20 2a 2f 0a 20 20 69 6e 74 20 69 47 65 6e 65  e */.  int iGene
99c0: 72 61 74 69 6f 6e 3b 20 20 20 20 20 2f 2a 20 47  ration;     /* G
99d0: 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65  eneration counte
99e0: 72 2e 20 20 49 6e 63 72 65 6d 65 6e 74 65 64 20  r.  Incremented 
99f0: 77 69 74 68 20 65 61 63 68 20 63 68 61 6e 67 65  with each change
9a00: 20 2a 2f 0a 20 20 48 61 73 68 20 74 62 6c 48 61   */.  Hash tblHa
9a10: 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c  sh;        /* Al
9a20: 6c 20 74 61 62 6c 65 73 20 69 6e 64 65 78 65 64  l tables indexed
9a30: 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61   by name */.  Ha
9a40: 73 68 20 69 64 78 48 61 73 68 3b 20 20 20 20 20  sh idxHash;     
9a50: 20 20 20 2f 2a 20 41 6c 6c 20 28 6e 61 6d 65 64     /* All (named
9a60: 29 20 69 6e 64 69 63 65 73 20 69 6e 64 65 78 65  ) indices indexe
9a70: 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48  d by name */.  H
9a80: 61 73 68 20 74 72 69 67 48 61 73 68 3b 20 20 20  ash trigHash;   
9a90: 20 20 20 20 2f 2a 20 41 6c 6c 20 74 72 69 67 67      /* All trigg
9aa0: 65 72 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e  ers indexed by n
9ab0: 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 66 6b  ame */.  Hash fk
9ac0: 65 79 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a  eyHash;       /*
9ad0: 20 41 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79   All foreign key
9ae0: 73 20 62 79 20 72 65 66 65 72 65 6e 63 65 64 20  s by referenced 
9af0: 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20  table name */.  
9b00: 54 61 62 6c 65 20 2a 70 53 65 71 54 61 62 3b 20  Table *pSeqTab; 
9b10: 20 20 20 20 20 2f 2a 20 54 68 65 20 73 71 6c 69       /* The sqli
9b20: 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c  te_sequence tabl
9b30: 65 20 75 73 65 64 20 62 79 20 41 55 54 4f 49 4e  e used by AUTOIN
9b40: 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 75 38 20  CREMENT */.  u8 
9b50: 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20  file_format;    
9b60: 20 20 2f 2a 20 53 63 68 65 6d 61 20 66 6f 72 6d    /* Schema form
9b70: 61 74 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 74  at version for t
9b80: 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38  his file */.  u8
9b90: 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20   enc;           
9ba0: 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64     /* Text encod
9bb0: 69 6e 67 20 75 73 65 64 20 62 79 20 74 68 69 73  ing used by this
9bc0: 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75   database */.  u
9bd0: 31 36 20 73 63 68 65 6d 61 46 6c 61 67 73 3b 20  16 schemaFlags; 
9be0: 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 61 73 73      /* Flags ass
9bf0: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69  ociated with thi
9c00: 73 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e  s schema */.  in
9c10: 74 20 63 61 63 68 65 5f 73 69 7a 65 3b 20 20 20  t cache_size;   
9c20: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
9c30: 70 61 67 65 73 20 74 6f 20 75 73 65 20 69 6e 20  pages to use in 
9c40: 74 68 65 20 63 61 63 68 65 20 2a 2f 0a 7d 3b 0a  the cache */.};.
9c50: 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63  ./*.** These mac
9c60: 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64 20  ros can be used 
9c70: 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72  to test, set, or
9c80: 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74   clear bits in t
9c90: 68 65 0a 2a 2a 20 44 62 2e 70 53 63 68 65 6d 61  he.** Db.pSchema
9ca0: 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  ->flags field..*
9cb0: 2f 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73 50  /.#define DbHasP
9cc0: 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20  roperty(D,I,P)  
9cd0: 20 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d     (((D)->aDb[I]
9ce0: 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61  .pSchema->schema
9cf0: 46 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29  Flags&(P))==(P))
9d00: 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73 41 6e  .#define DbHasAn
9d10: 79 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29  yProperty(D,I,P)
9d20: 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e    (((D)->aDb[I].
9d30: 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46  pSchema->schemaF
9d40: 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64  lags&(P))!=0).#d
9d50: 65 66 69 6e 65 20 44 62 53 65 74 50 72 6f 70 65  efine DbSetPrope
9d60: 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28  rty(D,I,P)     (
9d70: 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65  D)->aDb[I].pSche
9d80: 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 7c  ma->schemaFlags|
9d90: 3d 28 50 29 0a 23 64 65 66 69 6e 65 20 44 62 43  =(P).#define DbC
9da0: 6c 65 61 72 50 72 6f 70 65 72 74 79 28 44 2c 49  learProperty(D,I
9db0: 2c 50 29 20 20 20 28 44 29 2d 3e 61 44 62 5b 49  ,P)   (D)->aDb[I
9dc0: 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d  ].pSchema->schem
9dd0: 61 46 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a  aFlags&=~(P)../*
9de0: 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
9df0: 65 73 20 66 6f 72 20 74 68 65 20 44 42 2e 70 53  es for the DB.pS
9e00: 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65  chema->flags fie
9e10: 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 44 42  ld..**.** The DB
9e20: 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 66 6c  _SchemaLoaded fl
9e30: 61 67 20 69 73 20 73 65 74 20 61 66 74 65 72 20  ag is set after 
9e40: 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
9e50: 65 6d 61 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20  ema has been.** 
9e60: 72 65 61 64 20 69 6e 74 6f 20 69 6e 74 65 72 6e  read into intern
9e70: 61 6c 20 68 61 73 68 20 74 61 62 6c 65 73 2e 0a  al hash tables..
9e80: 2a 2a 0a 2a 2a 20 44 42 5f 55 6e 72 65 73 65 74  **.** DB_Unreset
9e90: 56 69 65 77 73 20 6d 65 61 6e 73 20 74 68 61 74  Views means that
9ea0: 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 76 69 65   one or more vie
9eb0: 77 73 20 68 61 76 65 20 63 6f 6c 75 6d 6e 20 6e  ws have column n
9ec0: 61 6d 65 73 20 74 68 61 74 0a 2a 2a 20 68 61 76  ames that.** hav
9ed0: 65 20 62 65 65 6e 20 66 69 6c 6c 65 64 20 6f 75  e been filled ou
9ee0: 74 2e 20 20 49 66 20 74 68 65 20 73 63 68 65 6d  t.  If the schem
9ef0: 61 20 63 68 61 6e 67 65 73 2c 20 74 68 65 73 65  a changes, these
9f00: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6d 69   column names mi
9f10: 67 68 74 0a 2a 2a 20 63 68 61 6e 67 65 73 20 61  ght.** changes a
9f20: 6e 64 20 73 6f 20 74 68 65 20 76 69 65 77 20 77  nd so the view w
9f30: 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62 65 20 72  ill need to be r
9f40: 65 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  eset..*/.#define
9f50: 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64   DB_SchemaLoaded
9f60: 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 54      0x0001  /* T
9f70: 68 65 20 73 63 68 65 6d 61 20 68 61 73 20 62 65  he schema has be
9f80: 65 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a 23 64 65  en loaded */.#de
9f90: 66 69 6e 65 20 44 42 5f 55 6e 72 65 73 65 74 56  fine DB_UnresetV
9fa0: 69 65 77 73 20 20 20 20 30 78 30 30 30 32 20 20  iews    0x0002  
9fb0: 2f 2a 20 53 6f 6d 65 20 76 69 65 77 73 20 68 61  /* Some views ha
9fc0: 76 65 20 64 65 66 69 6e 65 64 20 63 6f 6c 75 6d  ve defined colum
9fd0: 6e 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69  n names */.#defi
9fe0: 6e 65 20 44 42 5f 45 6d 70 74 79 20 20 20 20 20  ne DB_Empty     
9ff0: 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a        0x0004  /*
a000: 20 54 68 65 20 66 69 6c 65 20 69 73 20 65 6d 70   The file is emp
a010: 74 79 20 28 6c 65 6e 67 74 68 20 30 20 62 79 74  ty (length 0 byt
a020: 65 73 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68  es) */../*.** Th
a030: 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 66 66  e number of diff
a040: 65 72 65 6e 74 20 6b 69 6e 64 73 20 6f 66 20 74  erent kinds of t
a050: 68 69 6e 67 73 20 74 68 61 74 20 63 61 6e 20 62  hings that can b
a060: 65 20 6c 69 6d 69 74 65 64 0a 2a 2a 20 75 73 69  e limited.** usi
a070: 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f 6c  ng the sqlite3_l
a080: 69 6d 69 74 28 29 20 69 6e 74 65 72 66 61 63 65  imit() interface
a090: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
a0a0: 49 54 45 5f 4e 5f 4c 49 4d 49 54 20 28 53 51 4c  ITE_N_LIMIT (SQL
a0b0: 49 54 45 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45 52  ITE_LIMIT_WORKER
a0c0: 5f 54 48 52 45 41 44 53 2b 31 29 0a 0a 2f 2a 0a  _THREADS+1)../*.
a0d0: 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c  ** Lookaside mal
a0e0: 6c 6f 63 20 69 73 20 61 20 73 65 74 20 6f 66 20  loc is a set of 
a0f0: 66 69 78 65 64 2d 73 69 7a 65 20 62 75 66 66 65  fixed-size buffe
a100: 72 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 75  rs that can be u
a110: 73 65 64 0a 2a 2a 20 74 6f 20 73 61 74 69 73 66  sed.** to satisf
a120: 79 20 73 6d 61 6c 6c 20 74 72 61 6e 73 69 65 6e  y small transien
a130: 74 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  t memory allocat
a140: 69 6f 6e 20 72 65 71 75 65 73 74 73 20 66 6f 72  ion requests for
a150: 20 6f 62 6a 65 63 74 73 0a 2a 2a 20 61 73 73 6f   objects.** asso
a160: 63 69 61 74 65 64 20 77 69 74 68 20 61 20 70 61  ciated with a pa
a170: 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61 73  rticular databas
a180: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54  e connection.  T
a190: 68 65 20 75 73 65 20 6f 66 0a 2a 2a 20 6c 6f 6f  he use of.** loo
a1a0: 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 70 72  kaside malloc pr
a1b0: 6f 76 69 64 65 73 20 61 20 73 69 67 6e 69 66 69  ovides a signifi
a1c0: 63 61 6e 74 20 70 65 72 66 6f 72 6d 61 6e 63 65  cant performance
a1d0: 20 65 6e 68 61 6e 63 65 6d 65 6e 74 0a 2a 2a 20   enhancement.** 
a1e0: 28 61 70 70 72 6f 78 20 31 30 25 29 20 62 79 20  (approx 10%) by 
a1f0: 61 76 6f 69 64 69 6e 67 20 6e 75 6d 65 72 6f 75  avoiding numerou
a200: 73 20 6d 61 6c 6c 6f 63 2f 66 72 65 65 20 72 65  s malloc/free re
a210: 71 75 65 73 74 73 20 77 68 69 6c 65 20 70 61 72  quests while par
a220: 73 69 6e 67 0a 2a 2a 20 53 51 4c 20 73 74 61 74  sing.** SQL stat
a230: 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  ements..**.** Th
a240: 65 20 4c 6f 6f 6b 61 73 69 64 65 20 73 74 72 75  e Lookaside stru
a250: 63 74 75 72 65 20 68 6f 6c 64 73 20 63 6f 6e 66  cture holds conf
a260: 69 67 75 72 61 74 69 6f 6e 20 69 6e 66 6f 72 6d  iguration inform
a270: 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 0a  ation about the.
a280: 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c  ** lookaside mal
a290: 6c 6f 63 20 73 75 62 73 79 73 74 65 6d 2e 20 20  loc subsystem.  
a2a0: 45 61 63 68 20 61 76 61 69 6c 61 62 6c 65 20 6d  Each available m
a2b0: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
a2c0: 20 69 6e 0a 2a 2a 20 74 68 65 20 6c 6f 6f 6b 61   in.** the looka
a2d0: 73 69 64 65 20 73 75 62 73 79 73 74 65 6d 20 69  side subsystem i
a2e0: 73 20 73 74 6f 72 65 64 20 6f 6e 20 61 20 6c 69  s stored on a li
a2f0: 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 4c 6f 6f  nked list of Loo
a300: 6b 61 73 69 64 65 53 6c 6f 74 0a 2a 2a 20 6f 62  kasideSlot.** ob
a310: 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f  jects..**.** Loo
a320: 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f  kaside allocatio
a330: 6e 73 20 61 72 65 20 6f 6e 6c 79 20 61 6c 6c 6f  ns are only allo
a340: 77 65 64 20 66 6f 72 20 6f 62 6a 65 63 74 73 20  wed for objects 
a350: 74 68 61 74 20 61 72 65 20 61 73 73 6f 63 69 61  that are associa
a360: 74 65 64 0a 2a 2a 20 77 69 74 68 20 61 20 70 61  ted.** with a pa
a370: 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61 73  rticular databas
a380: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 48  e connection.  H
a390: 65 6e 63 65 2c 20 73 63 68 65 6d 61 20 69 6e 66  ence, schema inf
a3a0: 6f 72 6d 61 74 69 6f 6e 20 63 61 6e 6e 6f 74 0a  ormation cannot.
a3b0: 2a 2a 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20  ** be stored in 
a3c0: 6c 6f 6f 6b 61 73 69 64 65 20 62 65 63 61 75 73  lookaside becaus
a3d0: 65 20 69 6e 20 73 68 61 72 65 64 20 63 61 63 68  e in shared cach
a3e0: 65 20 6d 6f 64 65 20 74 68 65 20 73 63 68 65 6d  e mode the schem
a3f0: 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a  a information.**
a400: 20 69 73 20 73 68 61 72 65 64 20 62 79 20 6d 75   is shared by mu
a410: 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73 65 20  ltiple database 
a420: 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 20 20 54 68  connections.  Th
a430: 65 72 65 66 6f 72 65 2c 20 77 68 69 6c 65 20 70  erefore, while p
a440: 61 72 73 69 6e 67 0a 2a 2a 20 73 63 68 65 6d 61  arsing.** schema
a450: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68   information, th
a460: 65 20 4c 6f 6f 6b 61 73 69 64 65 2e 62 45 6e 61  e Lookaside.bEna
a470: 62 6c 65 64 20 66 6c 61 67 20 69 73 20 63 6c 65  bled flag is cle
a480: 61 72 65 64 20 73 6f 20 74 68 61 74 0a 2a 2a 20  ared so that.** 
a490: 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61  lookaside alloca
a4a0: 74 69 6f 6e 73 20 61 72 65 20 6e 6f 74 20 75 73  tions are not us
a4b0: 65 64 20 74 6f 20 63 6f 6e 73 74 72 75 63 74 20  ed to construct 
a4c0: 74 68 65 20 73 63 68 65 6d 61 20 6f 62 6a 65 63  the schema objec
a4d0: 74 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4c 6f  ts..*/.struct Lo
a4e0: 6f 6b 61 73 69 64 65 20 7b 0a 20 20 75 33 32 20  okaside {.  u32 
a4f0: 62 44 69 73 61 62 6c 65 3b 20 20 20 20 20 20 20  bDisable;       
a500: 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 6f 70 65 72      /* Only oper
a510: 61 74 65 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64  ate the lookasid
a520: 65 20 77 68 65 6e 20 7a 65 72 6f 20 2a 2f 0a 20  e when zero */. 
a530: 20 75 31 36 20 73 7a 3b 20 20 20 20 20 20 20 20   u16 sz;        
a540: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
a550: 20 6f 66 20 65 61 63 68 20 62 75 66 66 65 72 20   of each buffer 
a560: 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75 38  in bytes */.  u8
a570: 20 62 4d 61 6c 6c 6f 63 65 64 3b 20 20 20 20 20   bMalloced;     
a580: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
a590: 20 70 53 74 61 72 74 20 6f 62 74 61 69 6e 65 64   pStart obtained
a5a0: 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61   from sqlite3_ma
a5b0: 6c 6c 6f 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20  lloc() */.  int 
a5c0: 6e 4f 75 74 3b 20 20 20 20 20 20 20 20 20 20 20  nOut;           
a5d0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
a5e0: 20 62 75 66 66 65 72 73 20 63 75 72 72 65 6e 74   buffers current
a5f0: 6c 79 20 63 68 65 63 6b 65 64 20 6f 75 74 20 2a  ly checked out *
a600: 2f 0a 20 20 69 6e 74 20 6d 78 4f 75 74 3b 20 20  /.  int mxOut;  
a610: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48              /* H
a620: 69 67 68 77 61 74 65 72 20 6d 61 72 6b 20 66 6f  ighwater mark fo
a630: 72 20 6e 4f 75 74 20 2a 2f 0a 20 20 69 6e 74 20  r nOut */.  int 
a640: 61 6e 53 74 61 74 5b 33 5d 3b 20 20 20 20 20 20  anStat[3];      
a650: 20 20 20 20 2f 2a 20 30 3a 20 68 69 74 73 2e 20      /* 0: hits. 
a660: 20 31 3a 20 73 69 7a 65 20 6d 69 73 73 65 73 2e   1: size misses.
a670: 20 20 32 3a 20 66 75 6c 6c 20 6d 69 73 73 65 73    2: full misses
a680: 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53   */.  LookasideS
a690: 6c 6f 74 20 2a 70 46 72 65 65 3b 20 20 20 2f 2a  lot *pFree;   /*
a6a0: 20 4c 69 73 74 20 6f 66 20 61 76 61 69 6c 61 62   List of availab
a6b0: 6c 65 20 62 75 66 66 65 72 73 20 2a 2f 0a 20 20  le buffers */.  
a6c0: 76 6f 69 64 20 2a 70 53 74 61 72 74 3b 20 20 20  void *pStart;   
a6d0: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
a6e0: 20 62 79 74 65 20 6f 66 20 61 76 61 69 6c 61 62   byte of availab
a6f0: 6c 65 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20  le memory space 
a700: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 45 6e 64 3b  */.  void *pEnd;
a710: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a720: 46 69 72 73 74 20 62 79 74 65 20 70 61 73 74 20  First byte past 
a730: 65 6e 64 20 6f 66 20 61 76 61 69 6c 61 62 6c 65  end of available
a740: 20 73 70 61 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72   space */.};.str
a750: 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f  uct LookasideSlo
a760: 74 20 7b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53  t {.  LookasideS
a770: 6c 6f 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 2f  lot *pNext;    /
a780: 2a 20 4e 65 78 74 20 62 75 66 66 65 72 20 69 6e  * Next buffer in
a790: 20 74 68 65 20 6c 69 73 74 20 6f 66 20 66 72 65   the list of fre
a7a0: 65 20 62 75 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a  e buffers */.};.
a7b0: 0a 2f 2a 0a 2a 2a 20 41 20 68 61 73 68 20 74 61  ./*.** A hash ta
a7c0: 62 6c 65 20 66 6f 72 20 62 75 69 6c 74 2d 69 6e  ble for built-in
a7d0: 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69   function defini
a7e0: 74 69 6f 6e 73 2e 20 20 28 41 70 70 6c 69 63 61  tions.  (Applica
a7f0: 74 69 6f 6e 2d 64 65 66 69 6e 65 64 0a 2a 2a 20  tion-defined.** 
a800: 66 75 6e 63 74 69 6f 6e 73 20 75 73 65 20 61 20  functions use a 
a810: 72 65 67 75 6c 61 72 20 74 61 62 6c 65 20 74 61  regular table ta
a820: 62 6c 65 20 66 72 6f 6d 20 68 61 73 68 2e 68 2e  ble from hash.h.
a830: 29 0a 2a 2a 0a 2a 2a 20 48 61 73 68 20 65 61 63  ).**.** Hash eac
a840: 68 20 46 75 6e 63 44 65 66 20 73 74 72 75 63 74  h FuncDef struct
a850: 75 72 65 20 69 6e 74 6f 20 6f 6e 65 20 6f 66 20  ure into one of 
a860: 74 68 65 20 46 75 6e 63 44 65 66 48 61 73 68 2e  the FuncDefHash.
a870: 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a 2a 20 43 6f  a[] slots..** Co
a880: 6c 6c 69 73 69 6f 6e 73 20 61 72 65 20 6f 6e 20  llisions are on 
a890: 74 68 65 20 46 75 6e 63 44 65 66 2e 75 2e 70 48  the FuncDef.u.pH
a8a0: 61 73 68 20 63 68 61 69 6e 2e 0a 2a 2f 0a 23 64  ash chain..*/.#d
a8b0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
a8c0: 43 5f 48 41 53 48 5f 53 5a 20 32 33 0a 73 74 72  C_HASH_SZ 23.str
a8d0: 75 63 74 20 46 75 6e 63 44 65 66 48 61 73 68 20  uct FuncDefHash 
a8e0: 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a 61 5b 53  {.  FuncDef *a[S
a8f0: 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 5f  QLITE_FUNC_HASH_
a900: 53 5a 5d 3b 20 20 20 20 20 20 20 2f 2a 20 48 61  SZ];       /* Ha
a910: 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75 6e  sh table for fun
a920: 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 23 69  ctions */.};..#i
a930: 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45 52  fdef SQLITE_USER
a940: 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a  _AUTHENTICATION.
a950: 2f 2a 0a 2a 2a 20 49 6e 66 6f 72 6d 61 74 69 6f  /*.** Informatio
a960: 6e 20 68 65 6c 64 20 69 6e 20 74 68 65 20 22 73  n held in the "s
a970: 71 6c 69 74 65 33 22 20 64 61 74 61 62 61 73 65  qlite3" database
a980: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65   connection obje
a990: 63 74 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74  ct and used.** t
a9a0: 6f 20 6d 61 6e 61 67 65 20 75 73 65 72 20 61 75  o manage user au
a9b0: 74 68 65 6e 74 69 63 61 74 69 6f 6e 2e 0a 2a 2f  thentication..*/
a9c0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
a9d0: 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68  sqlite3_userauth
a9e0: 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74   sqlite3_useraut
a9f0: 68 3b 0a 73 74 72 75 63 74 20 73 71 6c 69 74 65  h;.struct sqlite
aa00: 33 5f 75 73 65 72 61 75 74 68 20 7b 0a 20 20 75  3_userauth {.  u
aa10: 38 20 61 75 74 68 4c 65 76 65 6c 3b 20 20 20 20  8 authLevel;    
aa20: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
aa30: 43 75 72 72 65 6e 74 20 61 75 74 68 65 6e 74 69  Current authenti
aa40: 63 61 74 69 6f 6e 20 6c 65 76 65 6c 20 2a 2f 0a  cation level */.
aa50: 20 20 69 6e 74 20 6e 41 75 74 68 50 57 3b 20 20    int nAuthPW;  
aa60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aa70: 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 7a  /* Size of the z
aa80: 41 75 74 68 50 57 20 69 6e 20 62 79 74 65 73 20  AuthPW in bytes 
aa90: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75 74 68  */.  char *zAuth
aaa0: 50 57 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  PW;             
aab0: 20 20 20 2f 2a 20 50 61 73 73 77 6f 72 64 20 75     /* Password u
aac0: 73 65 64 20 74 6f 20 61 75 74 68 65 6e 74 69 63  sed to authentic
aad0: 61 74 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ate */.  char *z
aae0: 41 75 74 68 55 73 65 72 3b 20 20 20 20 20 20 20  AuthUser;       
aaf0: 20 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20 6e         /* User n
ab00: 61 6d 65 20 75 73 65 64 20 74 6f 20 61 75 74 68  ame used to auth
ab10: 65 6e 74 69 63 61 74 65 20 2a 2f 0a 7d 3b 0a 0a  enticate */.};..
ab20: 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  /* Allowed value
ab30: 73 20 66 6f 72 20 73 71 6c 69 74 65 33 5f 75 73  s for sqlite3_us
ab40: 65 72 61 75 74 68 2e 61 75 74 68 4c 65 76 65 6c  erauth.authLevel
ab50: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54   */.#define UAUT
ab60: 48 5f 55 6e 6b 6e 6f 77 6e 20 20 20 20 20 30 20  H_Unknown     0 
ab70: 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63      /* Authentic
ab80: 61 74 69 6f 6e 20 6e 6f 74 20 79 65 74 20 63 68  ation not yet ch
ab90: 65 63 6b 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  ecked */.#define
aba0: 20 55 41 55 54 48 5f 46 61 69 6c 20 20 20 20 20   UAUTH_Fail     
abb0: 20 20 20 31 20 20 20 20 20 2f 2a 20 55 73 65 72     1     /* User
abc0: 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20   authentication 
abd0: 66 61 69 6c 65 64 20 2a 2f 0a 23 64 65 66 69 6e  failed */.#defin
abe0: 65 20 55 41 55 54 48 5f 55 73 65 72 20 20 20 20  e UAUTH_User    
abf0: 20 20 20 20 32 20 20 20 20 20 2f 2a 20 41 75 74      2     /* Aut
ac00: 68 65 6e 74 69 63 61 74 65 64 20 61 73 20 61 20  henticated as a 
ac10: 6e 6f 72 6d 61 6c 20 75 73 65 72 20 2a 2f 0a 23  normal user */.#
ac20: 64 65 66 69 6e 65 20 55 41 55 54 48 5f 41 64 6d  define UAUTH_Adm
ac30: 69 6e 20 20 20 20 20 20 20 33 20 20 20 20 20 2f  in       3     /
ac40: 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65 64 20  * Authenticated 
ac50: 61 73 20 61 6e 20 61 64 6d 69 6e 69 73 74 72 61  as an administra
ac60: 74 6f 72 20 2a 2f 0a 0a 2f 2a 20 46 75 6e 63 74  tor */../* Funct
ac70: 69 6f 6e 73 20 75 73 65 64 20 6f 6e 6c 79 20 62  ions used only b
ac80: 79 20 75 73 65 72 20 61 75 74 68 6f 72 69 7a 61  y user authoriza
ac90: 74 69 6f 6e 20 6c 6f 67 69 63 20 2a 2f 0a 69 6e  tion logic */.in
aca0: 74 20 73 71 6c 69 74 65 33 55 73 65 72 41 75 74  t sqlite3UserAut
acb0: 68 54 61 62 6c 65 28 63 6f 6e 73 74 20 63 68 61  hTable(const cha
acc0: 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
acd0: 55 73 65 72 41 75 74 68 43 68 65 63 6b 4c 6f 67  UserAuthCheckLog
ace0: 69 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  in(sqlite3*,cons
acf0: 74 20 63 68 61 72 2a 2c 75 38 2a 29 3b 0a 76 6f  t char*,u8*);.vo
ad00: 69 64 20 73 71 6c 69 74 65 33 55 73 65 72 41 75  id sqlite3UserAu
ad10: 74 68 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 29  thInit(sqlite3*)
ad20: 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72  ;.void sqlite3Cr
ad30: 79 70 74 46 75 6e 63 28 73 71 6c 69 74 65 33 5f  yptFunc(sqlite3_
ad40: 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
ad50: 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 0a  ite3_value**);..
ad60: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
ad70: 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41  _USER_AUTHENTICA
ad80: 54 49 4f 4e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 74  TION */../*.** t
ad90: 79 70 65 64 65 66 20 66 6f 72 20 74 68 65 20 61  ypedef for the a
ada0: 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 63 61 6c  uthorization cal
adb0: 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 2e 0a  lback function..
adc0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
add0: 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41  _USER_AUTHENTICA
ade0: 54 49 4f 4e 0a 20 20 74 79 70 65 64 65 66 20 69  TION.  typedef i
adf0: 6e 74 20 28 2a 73 71 6c 69 74 65 33 5f 78 61 75  nt (*sqlite3_xau
ae00: 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f  th)(void*,int,co
ae10: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
ae20: 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
ae30: 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
ae40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ae50: 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63    const char*, c
ae60: 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6c  onst char*);.#el
ae70: 73 65 0a 20 20 74 79 70 65 64 65 66 20 69 6e 74  se.  typedef int
ae80: 20 28 2a 73 71 6c 69 74 65 33 5f 78 61 75 74 68   (*sqlite3_xauth
ae90: 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73  )(void*,int,cons
aea0: 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
aeb0: 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ar*,const char*,
aec0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
aed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aee0: 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65  const char*);.#e
aef0: 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
af00: 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43  LITE_OMIT_DEPREC
af10: 41 54 45 44 0a 2f 2a 20 54 68 69 73 20 69 73 20  ATED./* This is 
af20: 61 6e 20 65 78 74 72 61 20 53 51 4c 49 54 45 5f  an extra SQLITE_
af30: 54 52 41 43 45 20 6d 61 63 72 6f 20 74 68 61 74  TRACE macro that
af40: 20 69 6e 64 69 63 61 74 65 73 20 22 6c 65 67 61   indicates "lega
af50: 63 79 22 20 74 72 61 63 69 6e 67 0a 2a 2a 20 69  cy" tracing.** i
af60: 6e 20 74 68 65 20 73 74 79 6c 65 20 6f 66 20 73  n the style of s
af70: 71 6c 69 74 65 33 5f 74 72 61 63 65 28 29 0a 2a  qlite3_trace().*
af80: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
af90: 5f 54 52 41 43 45 5f 4c 45 47 41 43 59 20 20 30  _TRACE_LEGACY  0
afa0: 78 38 30 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e  x80.#else.#defin
afb0: 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 4c  e SQLITE_TRACE_L
afc0: 45 47 41 43 59 20 20 30 0a 23 65 6e 64 69 66 20  EGACY  0.#endif 
afd0: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44  /* SQLITE_OMIT_D
afe0: 45 50 52 45 43 41 54 45 44 20 2a 2f 0a 0a 0a 2f  EPRECATED */.../
aff0: 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61  *.** Each databa
b000: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73  se connection is
b010: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
b020: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
b030: 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75  ructure..*/.stru
b040: 63 74 20 73 71 6c 69 74 65 33 20 7b 0a 20 20 73  ct sqlite3 {.  s
b050: 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 56 66 73  qlite3_vfs *pVfs
b060: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
b070: 4f 53 20 49 6e 74 65 72 66 61 63 65 20 2a 2f 0a  OS Interface */.
b080: 20 20 73 74 72 75 63 74 20 56 64 62 65 20 2a 70    struct Vdbe *p
b090: 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 20 20  Vdbe;           
b0a0: 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76  /* List of activ
b0b0: 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  e virtual machin
b0c0: 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20  es */.  CollSeq 
b0d0: 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20 20 20  *pDfltColl;     
b0e0: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66        /* The def
b0f0: 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20 73  ault collating s
b100: 65 71 75 65 6e 63 65 20 28 42 49 4e 41 52 59 29  equence (BINARY)
b110: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75   */.  sqlite3_mu
b120: 74 65 78 20 2a 6d 75 74 65 78 3b 20 20 20 20 20  tex *mutex;     
b130: 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f      /* Connectio
b140: 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44 62 20  n mutex */.  Db 
b150: 2a 61 44 62 3b 20 20 20 20 20 20 20 20 20 20 20  *aDb;           
b160: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
b170: 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20  l backends */.  
b180: 69 6e 74 20 6e 44 62 3b 20 20 20 20 20 20 20 20  int nDb;        
b190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b1a0: 20 4e 75 6d 62 65 72 20 6f 66 20 62 61 63 6b 65   Number of backe
b1b0: 6e 64 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  nds currently in
b1c0: 20 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 66 6c   use */.  int fl
b1d0: 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
b1e0: 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 73 63 65          /* Misce
b1f0: 6c 6c 61 6e 65 6f 75 73 20 66 6c 61 67 73 2e 20  llaneous flags. 
b200: 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69  See below */.  i
b210: 36 34 20 6c 61 73 74 52 6f 77 69 64 3b 20 20 20  64 lastRowid;   
b220: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b230: 52 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20 72 65  ROWID of most re
b240: 63 65 6e 74 20 69 6e 73 65 72 74 20 28 73 65 65  cent insert (see
b250: 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69 36 34   above) */.  i64
b260: 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20   szMmap;        
b270: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
b280: 66 61 75 6c 74 20 6d 6d 61 70 5f 73 69 7a 65 20  fault mmap_size 
b290: 73 65 74 74 69 6e 67 20 2a 2f 0a 20 20 75 6e 73  setting */.  uns
b2a0: 69 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e 46 6c  igned int openFl
b2b0: 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 46 6c  ags;       /* Fl
b2c0: 61 67 73 20 70 61 73 73 65 64 20 74 6f 20 73 71  ags passed to sq
b2d0: 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70 65 6e 28  lite3_vfs.xOpen(
b2e0: 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43 6f  ) */.  int errCo
b2f0: 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  de;             
b300: 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63       /* Most rec
b310: 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65 20 28  ent error code (
b320: 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20 69  SQLITE_*) */.  i
b330: 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20 20 20 20  nt errMask;     
b340: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b350: 26 20 72 65 73 75 6c 74 20 63 6f 64 65 73 20 77  & result codes w
b360: 69 74 68 20 74 68 69 73 20 62 65 66 6f 72 65 20  ith this before 
b370: 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20 69  returning */.  i
b380: 6e 74 20 69 53 79 73 45 72 72 6e 6f 3b 20 20 20  nt iSysErrno;   
b390: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b3a0: 45 72 72 6e 6f 20 76 61 6c 75 65 20 66 72 6f 6d  Errno value from
b3b0: 20 6c 61 73 74 20 73 79 73 74 65 6d 20 65 72 72   last system err
b3c0: 6f 72 20 2a 2f 0a 20 20 75 31 36 20 64 62 4f 70  or */.  u16 dbOp
b3d0: 74 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20  tFlags;         
b3e0: 20 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 74        /* Flags t
b3f0: 6f 20 65 6e 61 62 6c 65 2f 64 69 73 61 62 6c 65  o enable/disable
b400: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a   optimizations *
b410: 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20  /.  u8 enc;     
b420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b430: 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69    /* Text encodi
b440: 6e 67 20 2a 2f 0a 20 20 75 38 20 61 75 74 6f 43  ng */.  u8 autoC
b450: 6f 6d 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20  ommit;          
b460: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 75 74        /* The aut
b470: 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 2e 20 2a  o-commit flag. *
b480: 2f 0a 20 20 75 38 20 74 65 6d 70 5f 73 74 6f 72  /.  u8 temp_stor
b490: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
b4a0: 20 20 2f 2a 20 31 3a 20 66 69 6c 65 20 32 3a 20    /* 1: file 2: 
b4b0: 6d 65 6d 6f 72 79 20 30 3a 20 64 65 66 61 75 6c  memory 0: defaul
b4c0: 74 20 2a 2f 0a 20 20 75 38 20 6d 61 6c 6c 6f 63  t */.  u8 malloc
b4d0: 46 61 69 6c 65 64 3b 20 20 20 20 20 20 20 20 20  Failed;         
b4e0: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
b4f0: 77 65 20 68 61 76 65 20 73 65 65 6e 20 61 20 6d  we have seen a m
b500: 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 20 2a 2f  alloc failure */
b510: 0a 20 20 75 38 20 62 42 65 6e 69 67 6e 4d 61 6c  .  u8 bBenignMal
b520: 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  loc;            
b530: 20 2f 2a 20 44 6f 20 6e 6f 74 20 72 65 71 75 69   /* Do not requi
b540: 72 65 20 4f 4f 4d 73 20 69 66 20 74 72 75 65 20  re OOMs if true 
b550: 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c 6f 63 6b  */.  u8 dfltLock
b560: 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  Mode;           
b570: 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f     /* Default lo
b580: 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f 72 20 61  cking-mode for a
b590: 74 74 61 63 68 65 64 20 64 62 73 20 2a 2f 0a 20  ttached dbs */. 
b5a0: 20 73 69 67 6e 65 64 20 63 68 61 72 20 6e 65 78   signed char nex
b5b0: 74 41 75 74 6f 76 61 63 3b 20 20 20 20 20 20 2f  tAutovac;      /
b5c0: 2a 20 41 75 74 6f 76 61 63 20 73 65 74 74 69 6e  * Autovac settin
b5d0: 67 20 61 66 74 65 72 20 56 41 43 55 55 4d 20 69  g after VACUUM i
b5e0: 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38 20 73 75  f >=0 */.  u8 su
b5f0: 70 70 72 65 73 73 45 72 72 3b 20 20 20 20 20 20  ppressErr;      
b600: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e           /* Do n
b610: 6f 74 20 69 73 73 75 65 20 65 72 72 6f 72 20 6d  ot issue error m
b620: 65 73 73 61 67 65 73 20 69 66 20 74 72 75 65 20  essages if true 
b630: 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f 6e 43 6f  */.  u8 vtabOnCo
b640: 6e 66 6c 69 63 74 3b 20 20 20 20 20 20 20 20 20  nflict;         
b650: 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72     /* Value to r
b660: 65 74 75 72 6e 20 66 6f 72 20 73 33 5f 76 74 61  eturn for s3_vta
b670: 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28 29 20  b_on_conflict() 
b680: 2a 2f 0a 20 20 75 38 20 69 73 54 72 61 6e 73 61  */.  u8 isTransa
b690: 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 20  ctionSavepoint; 
b6a0: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
b6b0: 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61 76 65  e outermost save
b6c0: 70 6f 69 6e 74 20 69 73 20 61 20 54 53 20 2a 2f  point is a TS */
b6d0: 0a 20 20 75 38 20 6d 54 72 61 63 65 3b 20 20 20  .  u8 mTrace;   
b6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b6f0: 20 2f 2a 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65   /* zero or more
b700: 20 53 51 4c 49 54 45 5f 54 52 41 43 45 20 66 6c   SQLITE_TRACE fl
b710: 61 67 73 20 2a 2f 0a 20 20 75 38 20 73 6b 69 70  ags */.  u8 skip
b720: 42 74 72 65 65 4d 75 74 65 78 3b 20 20 20 20 20  BtreeMutex;     
b730: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
b740: 66 20 6e 6f 20 73 68 61 72 65 64 2d 63 61 63 68  f no shared-cach
b750: 65 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20  e backends */.  
b760: 69 6e 74 20 6e 65 78 74 50 61 67 65 73 69 7a 65  int nextPagesize
b770: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
b780: 20 50 61 67 65 73 69 7a 65 20 61 66 74 65 72 20   Pagesize after 
b790: 56 41 43 55 55 4d 20 69 66 20 3e 30 20 2a 2f 0a  VACUUM if >0 */.
b7a0: 20 20 75 33 32 20 6d 61 67 69 63 3b 20 20 20 20    u32 magic;    
b7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b7c0: 2f 2a 20 4d 61 67 69 63 20 6e 75 6d 62 65 72 20  /* Magic number 
b7d0: 66 6f 72 20 64 65 74 65 63 74 20 6c 69 62 72 61  for detect libra
b7e0: 72 79 20 6d 69 73 75 73 65 20 2a 2f 0a 20 20 69  ry misuse */.  i
b7f0: 6e 74 20 6e 43 68 61 6e 67 65 3b 20 20 20 20 20  nt nChange;     
b800: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b810: 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62  Value returned b
b820: 79 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65  y sqlite3_change
b830: 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 6f  s() */.  int nTo
b840: 74 61 6c 43 68 61 6e 67 65 3b 20 20 20 20 20 20  talChange;      
b850: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
b860: 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69  returned by sqli
b870: 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65  te3_total_change
b880: 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20 61 4c 69  s() */.  int aLi
b890: 6d 69 74 5b 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d  mit[SQLITE_N_LIM
b8a0: 49 54 5d 3b 20 20 20 2f 2a 20 4c 69 6d 69 74 73  IT];   /* Limits
b8b0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 53 6f   */.  int nMaxSo
b8c0: 72 74 65 72 4d 6d 61 70 3b 20 20 20 20 20 20 20  rterMmap;       
b8d0: 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73      /* Maximum s
b8e0: 69 7a 65 20 6f 66 20 72 65 67 69 6f 6e 73 20 6d  ize of regions m
b8f0: 61 70 70 65 64 20 62 79 20 73 6f 72 74 65 72 20  apped by sorter 
b900: 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 71 6c 69  */.  struct sqli
b910: 74 65 33 49 6e 69 74 49 6e 66 6f 20 7b 20 20 20  te3InitInfo {   
b920: 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f     /* Informatio
b930: 6e 20 75 73 65 64 20 64 75 72 69 6e 67 20 69 6e  n used during in
b940: 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 2a 2f 0a  itialization */.
b950: 20 20 20 20 69 6e 74 20 6e 65 77 54 6e 75 6d 3b      int newTnum;
b960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b970: 2f 2a 20 52 6f 6f 74 70 61 67 65 20 6f 66 20 74  /* Rootpage of t
b980: 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 69 74 69  able being initi
b990: 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38  alized */.    u8
b9a0: 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20   iDb;           
b9b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69            /* Whi
b9c0: 63 68 20 64 62 20 66 69 6c 65 20 69 73 20 62 65  ch db file is be
b9d0: 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  ing initialized 
b9e0: 2a 2f 0a 20 20 20 20 75 38 20 62 75 73 79 3b 20  */.    u8 busy; 
b9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ba00: 20 20 20 2f 2a 20 54 52 55 45 20 69 66 20 63 75     /* TRUE if cu
ba10: 72 72 65 6e 74 6c 79 20 69 6e 69 74 69 61 6c 69  rrently initiali
ba20: 7a 69 6e 67 20 2a 2f 0a 20 20 20 20 75 38 20 6f  zing */.    u8 o
ba30: 72 70 68 61 6e 54 72 69 67 67 65 72 3b 20 20 20  rphanTrigger;   
ba40: 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20          /* Last 
ba50: 73 74 61 74 65 6d 65 6e 74 20 69 73 20 6f 72 70  statement is orp
ba60: 68 61 6e 65 64 20 54 45 4d 50 20 74 72 69 67 67  haned TEMP trigg
ba70: 65 72 20 2a 2f 0a 20 20 20 20 75 38 20 69 6d 70  er */.    u8 imp
ba80: 6f 73 74 65 72 54 61 62 6c 65 3b 20 20 20 20 20  osterTable;     
ba90: 20 20 20 20 20 20 2f 2a 20 42 75 69 6c 64 69 6e        /* Buildin
baa0: 67 20 61 6e 20 69 6d 70 6f 73 74 65 72 20 74 61  g an imposter ta
bab0: 62 6c 65 20 2a 2f 0a 20 20 7d 20 69 6e 69 74 3b  ble */.  } init;
bac0: 0a 20 20 69 6e 74 20 6e 56 64 62 65 41 63 74 69  .  int nVdbeActi
bad0: 76 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ve;             
bae0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 56 44   /* Number of VD
baf0: 42 45 73 20 63 75 72 72 65 6e 74 6c 79 20 72 75  BEs currently ru
bb00: 6e 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 6e  nning */.  int n
bb10: 56 64 62 65 52 65 61 64 3b 20 20 20 20 20 20 20  VdbeRead;       
bb20: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
bb30: 65 72 20 6f 66 20 61 63 74 69 76 65 20 56 44 42  er of active VDB
bb40: 45 73 20 74 68 61 74 20 72 65 61 64 20 6f 72 20  Es that read or 
bb50: 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  write */.  int n
bb60: 56 64 62 65 57 72 69 74 65 3b 20 20 20 20 20 20  VdbeWrite;      
bb70: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
bb80: 65 72 20 6f 66 20 61 63 74 69 76 65 20 56 44 42  er of active VDB
bb90: 45 73 20 74 68 61 74 20 72 65 61 64 20 61 6e 64  Es that read and
bba0: 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74 20   write */.  int 
bbb0: 6e 56 64 62 65 45 78 65 63 3b 20 20 20 20 20 20  nVdbeExec;      
bbc0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
bbd0: 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 63 61  ber of nested ca
bbe0: 6c 6c 73 20 74 6f 20 56 64 62 65 45 78 65 63 28  lls to VdbeExec(
bbf0: 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 44 65 73  ) */.  int nVDes
bc00: 74 72 6f 79 3b 20 20 20 20 20 20 20 20 20 20 20  troy;           
bc10: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
bc20: 66 20 61 63 74 69 76 65 20 4f 50 5f 56 44 65 73  f active OP_VDes
bc30: 74 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73 20  troy operations 
bc40: 2a 2f 0a 20 20 69 6e 74 20 6e 45 78 74 65 6e 73  */.  int nExtens
bc50: 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  ion;            
bc60: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
bc70: 6c 6f 61 64 65 64 20 65 78 74 65 6e 73 69 6f 6e  loaded extension
bc80: 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 2a 61 45  s */.  void **aE
bc90: 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20  xtension;       
bca0: 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66       /* Array of
bcb0: 20 73 68 61 72 65 64 20 6c 69 62 72 61 72 79 20   shared library 
bcc0: 68 61 6e 64 6c 65 73 20 2a 2f 0a 20 20 69 6e 74  handles */.  int
bcd0: 20 28 2a 78 54 72 61 63 65 29 28 75 33 32 2c 76   (*xTrace)(u32,v
bce0: 6f 69 64 2a 2c 76 6f 69 64 2a 2c 76 6f 69 64 2a  oid*,void*,void*
bcf0: 29 3b 20 20 20 20 20 2f 2a 20 54 72 61 63 65 20  );     /* Trace 
bd00: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
bd10: 69 64 20 2a 70 54 72 61 63 65 41 72 67 3b 20 20  id *pTraceArg;  
bd20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bd30: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
bd40: 65 6e 74 20 74 6f 20 74 68 65 20 74 72 61 63 65  ent to the trace
bd50: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
bd60: 6f 69 64 20 28 2a 78 50 72 6f 66 69 6c 65 29 28  oid (*xProfile)(
bd70: 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72  void*,const char
bd80: 2a 2c 75 36 34 29 3b 20 20 2f 2a 20 50 72 6f 66  *,u64);  /* Prof
bd90: 69 6c 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 2a  iling function *
bda0: 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f 66 69  /.  void *pProfi
bdb0: 6c 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  leArg;          
bdc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
bdd0: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 70 72 6f   Argument to pro
bde0: 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  file function */
bdf0: 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6d 6d 69 74  .  void *pCommit
be00: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
be10: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
be20: 20 74 6f 20 78 43 6f 6d 6d 69 74 43 61 6c 6c 62   to xCommitCallb
be30: 61 63 6b 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28  ack() */.  int (
be40: 2a 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b  *xCommitCallback
be50: 29 28 76 6f 69 64 2a 29 3b 20 20 20 20 2f 2a 20  )(void*);    /* 
be60: 49 6e 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79  Invoked at every
be70: 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f   commit. */.  vo
be80: 69 64 20 2a 70 52 6f 6c 6c 62 61 63 6b 41 72 67  id *pRollbackArg
be90: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
bea0: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78  /* Argument to x
beb0: 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b  RollbackCallback
bec0: 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  () */.  void (*x
bed0: 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b  RollbackCallback
bee0: 29 28 76 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76  )(void*); /* Inv
bef0: 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20 63 6f  oked at every co
bf00: 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20  mmit. */.  void 
bf10: 2a 70 55 70 64 61 74 65 41 72 67 3b 0a 20 20 76  *pUpdateArg;.  v
bf20: 6f 69 64 20 28 2a 78 55 70 64 61 74 65 43 61 6c  oid (*xUpdateCal
bf30: 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74  lback)(void*,int
bf40: 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  , const char*,co
bf50: 6e 73 74 20 63 68 61 72 2a 2c 73 71 6c 69 74 65  nst char*,sqlite
bf60: 5f 69 6e 74 36 34 29 3b 0a 23 69 66 64 65 66 20  _int64);.#ifdef 
bf70: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52  SQLITE_ENABLE_PR
bf80: 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20 20 76  EUPDATE_HOOK.  v
bf90: 6f 69 64 20 2a 70 50 72 65 55 70 64 61 74 65 41  oid *pPreUpdateA
bfa0: 72 67 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  rg;          /* 
bfb0: 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74  First argument t
bfc0: 6f 20 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c  o xPreUpdateCall
bfd0: 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 28  back */.  void (
bfe0: 2a 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62  *xPreUpdateCallb
bff0: 61 63 6b 29 28 20 20 20 2f 2a 20 52 65 67 69 73  ack)(   /* Regis
c000: 74 65 72 65 64 20 75 73 69 6e 67 20 73 71 6c 69  tered using sqli
c010: 74 65 33 5f 70 72 65 75 70 64 61 74 65 5f 68 6f  te3_preupdate_ho
c020: 6f 6b 28 29 20 2a 2f 0a 20 20 20 20 76 6f 69 64  ok() */.    void
c030: 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  *,sqlite3*,int,c
c040: 68 61 72 20 63 6f 6e 73 74 2a 2c 63 68 61 72 20  har const*,char 
c050: 63 6f 6e 73 74 2a 2c 73 71 6c 69 74 65 33 5f 69  const*,sqlite3_i
c060: 6e 74 36 34 2c 73 71 6c 69 74 65 33 5f 69 6e 74  nt64,sqlite3_int
c070: 36 34 0a 20 20 29 3b 0a 20 20 50 72 65 55 70 64  64.  );.  PreUpd
c080: 61 74 65 20 2a 70 50 72 65 55 70 64 61 74 65 3b  ate *pPreUpdate;
c090: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65          /* Conte
c0a0: 78 74 20 66 6f 72 20 61 63 74 69 76 65 20 70 72  xt for active pr
c0b0: 65 2d 75 70 64 61 74 65 20 63 61 6c 6c 62 61 63  e-update callbac
c0c0: 6b 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k */.#endif /* S
c0d0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45  QLITE_ENABLE_PRE
c0e0: 55 50 44 41 54 45 5f 48 4f 4f 4b 20 2a 2f 0a 23  UPDATE_HOOK */.#
c0f0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
c100: 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 28 2a 78  IT_WAL.  int (*x
c110: 57 61 6c 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  WalCallback)(voi
c120: 64 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 2c 20  d *, sqlite3 *, 
c130: 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e  const char *, in
c140: 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 57 61 6c  t);.  void *pWal
c150: 41 72 67 3b 0a 23 65 6e 64 69 66 0a 20 20 76 6f  Arg;.#endif.  vo
c160: 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 29  id(*xCollNeeded)
c170: 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
c180: 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e  int eTextRep,con
c190: 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
c1a0: 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36  d(*xCollNeeded16
c1b0: 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a  )(void*,sqlite3*
c1c0: 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f  ,int eTextRep,co
c1d0: 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f  nst void*);.  vo
c1e0: 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65 64 41  id *pCollNeededA
c1f0: 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  rg;.  sqlite3_va
c200: 6c 75 65 20 2a 70 45 72 72 3b 20 20 20 20 20 20  lue *pErr;      
c210: 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65      /* Most rece
c220: 6e 74 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  nt error message
c230: 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20   */.  union {.  
c240: 20 20 76 6f 6c 61 74 69 6c 65 20 69 6e 74 20 69    volatile int i
c250: 73 49 6e 74 65 72 72 75 70 74 65 64 3b 20 2f 2a  sInterrupted; /*
c260: 20 54 72 75 65 20 69 66 20 73 71 6c 69 74 65 33   True if sqlite3
c270: 5f 69 6e 74 65 72 72 75 70 74 20 68 61 73 20 62  _interrupt has b
c280: 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20  een called */.  
c290: 20 20 64 6f 75 62 6c 65 20 6e 6f 74 55 73 65 64    double notUsed
c2a0: 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  1;            /*
c2b0: 20 53 70 61 63 65 72 20 2a 2f 0a 20 20 7d 20 75   Spacer */.  } u
c2c0: 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 20 6c  1;.  Lookaside l
c2d0: 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20  ookaside;       
c2e0: 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69 64 65 20     /* Lookaside 
c2f0: 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69 67 75 72 61  malloc configura
c300: 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20  tion */.#ifndef 
c310: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48  SQLITE_OMIT_AUTH
c320: 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 73 71 6c 69  ORIZATION.  sqli
c330: 74 65 33 5f 78 61 75 74 68 20 78 41 75 74 68 3b  te3_xauth xAuth;
c340: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 63 63            /* Acc
c350: 65 73 73 20 61 75 74 68 6f 72 69 7a 61 74 69 6f  ess authorizatio
c360: 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  n function */.  
c370: 76 6f 69 64 20 2a 70 41 75 74 68 41 72 67 3b 20  void *pAuthArg; 
c380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c390: 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f   1st argument to
c3a0: 20 74 68 65 20 61 63 63 65 73 73 20 61 75 74 68   the access auth
c3b0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e   function */.#en
c3c0: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
c3d0: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
c3e0: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74 20  _CALLBACK.  int 
c3f0: 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76 6f 69  (*xProgress)(voi
c400: 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68 65  d *);     /* The
c410: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
c420: 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50  ck */.  void *pP
c430: 72 6f 67 72 65 73 73 41 72 67 3b 20 20 20 20 20  rogressArg;     
c440: 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
c450: 74 20 74 6f 20 74 68 65 20 70 72 6f 67 72 65 73  t to the progres
c460: 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  s callback */.  
c470: 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72 65  unsigned nProgre
c480: 73 73 4f 70 73 3b 20 20 20 20 20 20 20 20 2f 2a  ssOps;        /*
c490: 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f 64   Number of opcod
c4a0: 65 73 20 66 6f 72 20 70 72 6f 67 72 65 73 73 20  es for progress 
c4b0: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64  callback */.#end
c4c0: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
c4d0: 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
c4e0: 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72 61 6e  BLE.  int nVTran
c4f0: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
c500: 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64      /* Allocated
c510: 20 73 69 7a 65 20 6f 66 20 61 56 54 72 61 6e 73   size of aVTrans
c520: 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f 64 75   */.  Hash aModu
c530: 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  le;             
c540: 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65 64      /* populated
c550: 20 62 79 20 73 71 6c 69 74 65 33 5f 63 72 65 61   by sqlite3_crea
c560: 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20  te_module() */. 
c570: 20 56 74 61 62 43 74 78 20 2a 70 56 74 61 62 43   VtabCtx *pVtabC
c580: 74 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  tx;            /
c590: 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61 63  * Context for ac
c5a0: 74 69 76 65 20 76 74 61 62 20 63 6f 6e 6e 65 63  tive vtab connec
c5b0: 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20 56 54  t/create */.  VT
c5c0: 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73 3b 20  able **aVTrans; 
c5d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
c5e0: 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 77 69  irtual tables wi
c5f0: 74 68 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74  th open transact
c600: 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65  ions */.  VTable
c610: 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b 20 20   *pDisconnect;  
c620: 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65 63 74 20    /* Disconnect 
c630: 74 68 65 73 65 20 69 6e 20 6e 65 78 74 20 73 71  these in next sq
c640: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 20  lite3_prepare() 
c650: 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 48 61 73 68  */.#endif.  Hash
c660: 20 61 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20   aFunc;         
c670: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 61 73            /* Has
c680: 68 20 74 61 62 6c 65 20 6f 66 20 63 6f 6e 6e 65  h table of conne
c690: 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20  ction functions 
c6a0: 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f 6c 6c 53  */.  Hash aCollS
c6b0: 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  eq;             
c6c0: 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c 61 74     /* All collat
c6d0: 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 2a 2f  ing sequences */
c6e0: 0a 20 20 42 75 73 79 48 61 6e 64 6c 65 72 20 62  .  BusyHandler b
c6f0: 75 73 79 48 61 6e 64 6c 65 72 3b 20 20 20 20 20  usyHandler;     
c700: 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c 62 61 63   /* Busy callbac
c710: 6b 20 2a 2f 0a 20 20 44 62 20 61 44 62 53 74 61  k */.  Db aDbSta
c720: 74 69 63 5b 32 5d 3b 20 20 20 20 20 20 20 20 20  tic[2];         
c730: 20 20 20 20 20 2f 2a 20 53 74 61 74 69 63 20 73       /* Static s
c740: 70 61 63 65 20 66 6f 72 20 74 68 65 20 32 20 64  pace for the 2 d
c750: 65 66 61 75 6c 74 20 62 61 63 6b 65 6e 64 73 20  efault backends 
c760: 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  */.  Savepoint *
c770: 70 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20  pSavepoint;     
c780: 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63     /* List of ac
c790: 74 69 76 65 20 73 61 76 65 70 6f 69 6e 74 73 20  tive savepoints 
c7a0: 2a 2f 0a 20 20 69 6e 74 20 62 75 73 79 54 69 6d  */.  int busyTim
c7b0: 65 6f 75 74 3b 20 20 20 20 20 20 20 20 20 20 20  eout;           
c7c0: 20 20 20 2f 2a 20 42 75 73 79 20 68 61 6e 64 6c     /* Busy handl
c7d0: 65 72 20 74 69 6d 65 6f 75 74 2c 20 69 6e 20 6d  er timeout, in m
c7e0: 73 65 63 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61  sec */.  int nSa
c7f0: 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20  vepoint;        
c800: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
c810: 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74   of non-transact
c820: 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 2a  ion savepoints *
c830: 2f 0a 20 20 69 6e 74 20 6e 53 74 61 74 65 6d 65  /.  int nStateme
c840: 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nt;             
c850: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
c860: 65 73 74 65 64 20 73 74 61 74 65 6d 65 6e 74 2d  ested statement-
c870: 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 20 2a 2f  transactions  */
c880: 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64  .  i64 nDeferred
c890: 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20  Cons;           
c8a0: 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65 64   /* Net deferred
c8b0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74 68 69   constraints thi
c8c0: 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 2a  s transaction. *
c8d0: 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65  /.  i64 nDeferre
c8e0: 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20  dImmCons;       
c8f0: 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65    /* Net deferre
c900: 64 20 69 6d 6d 65 64 69 61 74 65 20 63 6f 6e 73  d immediate cons
c910: 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74  traints */.  int
c920: 20 2a 70 6e 42 79 74 65 73 46 72 65 65 64 3b 20   *pnBytesFreed; 
c930: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66             /* If
c940: 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 6e 63 72 65   not NULL, incre
c950: 6d 65 6e 74 20 74 68 69 73 20 69 6e 20 44 62 46  ment this in DbF
c960: 72 65 65 28 29 20 2a 2f 0a 23 69 66 64 65 66 20  ree() */.#ifdef 
c970: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e  SQLITE_ENABLE_UN
c980: 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 2f 2a  LOCK_NOTIFY.  /*
c990: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76   The following v
c9a0: 61 72 69 61 62 6c 65 73 20 61 72 65 20 61 6c 6c  ariables are all
c9b0: 20 70 72 6f 74 65 63 74 65 64 20 62 79 20 74 68   protected by th
c9c0: 65 20 53 54 41 54 49 43 5f 4d 41 53 54 45 52 0a  e STATIC_MASTER.
c9d0: 20 20 2a 2a 20 6d 75 74 65 78 2c 20 6e 6f 74 20    ** mutex, not 
c9e0: 62 79 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78  by sqlite3.mutex
c9f0: 2e 20 54 68 65 79 20 61 72 65 20 75 73 65 64 20  . They are used 
ca00: 62 79 20 63 6f 64 65 20 69 6e 20 6e 6f 74 69 66  by code in notif
ca10: 79 2e 63 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57  y.c..  **.  ** W
ca20: 68 65 6e 20 58 2e 70 55 6e 6c 6f 63 6b 43 6f 6e  hen X.pUnlockCon
ca30: 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74  nection==Y, that
ca40: 20 6d 65 61 6e 73 20 74 68 61 74 20 58 20 69 73   means that X is
ca50: 20 77 61 69 74 69 6e 67 20 66 6f 72 20 59 20 74   waiting for Y t
ca60: 6f 0a 20 20 2a 2a 20 75 6e 6c 6f 63 6b 20 73 6f  o.  ** unlock so
ca70: 20 74 68 61 74 20 69 74 20 63 61 6e 20 70 72 6f   that it can pro
ca80: 63 65 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ceed..  **.  ** 
ca90: 57 68 65 6e 20 58 2e 70 42 6c 6f 63 6b 69 6e 67  When X.pBlocking
caa0: 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74  Connection==Y, t
cab0: 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 73  hat means that s
cac0: 6f 6d 65 74 68 69 6e 67 20 74 68 61 74 20 58 20  omething that X 
cad0: 74 72 69 65 64 0a 20 20 2a 2a 20 74 72 69 65 64  tried.  ** tried
cae0: 20 74 6f 20 64 6f 20 72 65 63 65 6e 74 6c 79 20   to do recently 
caf0: 66 61 69 6c 65 64 20 77 69 74 68 20 61 6e 20 53  failed with an S
cb00: 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 65 72 72  QLITE_LOCKED err
cb10: 6f 72 20 64 75 65 20 74 6f 20 6c 6f 63 6b 73 0a  or due to locks.
cb20: 20 20 2a 2a 20 68 65 6c 64 20 62 79 20 59 2e 0a    ** held by Y..
cb30: 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a    */.  sqlite3 *
cb40: 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74  pBlockingConnect
cb50: 69 6f 6e 3b 20 2f 2a 20 43 6f 6e 6e 65 63 74 69  ion; /* Connecti
cb60: 6f 6e 20 74 68 61 74 20 63 61 75 73 65 64 20 53  on that caused S
cb70: 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 2a 2f 0a  QLITE_LOCKED */.
cb80: 20 20 73 71 6c 69 74 65 33 20 2a 70 55 6e 6c 6f    sqlite3 *pUnlo
cb90: 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 20 20  ckConnection;   
cba0: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65          /* Conne
cbb0: 63 74 69 6f 6e 20 74 6f 20 77 61 74 63 68 20 66  ction to watch f
cbc0: 6f 72 20 75 6e 6c 6f 63 6b 20 2a 2f 0a 20 20 76  or unlock */.  v
cbd0: 6f 69 64 20 2a 70 55 6e 6c 6f 63 6b 41 72 67 3b  oid *pUnlockArg;
cbe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cbf0: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
cc00: 20 74 6f 20 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66   to xUnlockNotif
cc10: 79 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 55  y */.  void (*xU
cc20: 6e 6c 6f 63 6b 4e 6f 74 69 66 79 29 28 76 6f 69  nlockNotify)(voi
cc30: 64 20 2a 2a 2c 20 69 6e 74 29 3b 20 20 2f 2a 20  d **, int);  /* 
cc40: 55 6e 6c 6f 63 6b 20 6e 6f 74 69 66 79 20 63 61  Unlock notify ca
cc50: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 73 71 6c 69  llback */.  sqli
cc60: 74 65 33 20 2a 70 4e 65 78 74 42 6c 6f 63 6b 65  te3 *pNextBlocke
cc70: 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78  d;        /* Nex
cc80: 74 20 69 6e 20 6c 69 73 74 20 6f 66 20 61 6c 6c  t in list of all
cc90: 20 62 6c 6f 63 6b 65 64 20 63 6f 6e 6e 65 63 74   blocked connect
cca0: 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  ions */.#endif.#
ccb0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45  ifdef SQLITE_USE
ccc0: 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e  R_AUTHENTICATION
ccd0: 0a 20 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61  .  sqlite3_usera
cce0: 75 74 68 20 61 75 74 68 3b 20 20 20 20 20 20 20  uth auth;       
ccf0: 20 2f 2a 20 55 73 65 72 20 61 75 74 68 65 6e 74   /* User authent
cd00: 69 63 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74  ication informat
cd10: 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b  ion */.#endif.};
cd20: 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20  ../*.** A macro 
cd30: 74 6f 20 64 69 73 63 6f 76 65 72 20 74 68 65 20  to discover the 
cd40: 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 64 61  encoding of a da
cd50: 74 61 62 61 73 65 2e 0a 2a 2f 0a 23 64 65 66 69  tabase..*/.#defi
cd60: 6e 65 20 53 43 48 45 4d 41 5f 45 4e 43 28 64 62  ne SCHEMA_ENC(db
cd70: 29 20 28 28 64 62 29 2d 3e 61 44 62 5b 30 5d 2e  ) ((db)->aDb[0].
cd80: 70 53 63 68 65 6d 61 2d 3e 65 6e 63 29 0a 23 64  pSchema->enc).#d
cd90: 65 66 69 6e 65 20 45 4e 43 28 64 62 29 20 20 20  efine ENC(db)   
cda0: 20 20 20 20 20 28 28 64 62 29 2d 3e 65 6e 63 29       ((db)->enc)
cdb0: 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65  ../*.** Possible
cdc0: 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20   values for the 
cdd0: 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 2e 0a 2a  sqlite3.flags..*
cde0: 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74  *.** Value const
cdf0: 72 61 69 6e 74 73 20 28 65 6e 66 6f 72 63 65 64  raints (enforced
ce00: 20 76 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a   via assert()):.
ce10: 2a 2a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 46  **      SQLITE_F
ce20: 75 6c 6c 46 53 79 6e 63 20 20 20 20 20 3d 3d 20  ullFSync     == 
ce30: 50 41 47 45 52 5f 46 55 4c 4c 46 53 59 4e 43 0a  PAGER_FULLFSYNC.
ce40: 2a 2a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 43  **      SQLITE_C
ce50: 6b 70 74 46 75 6c 6c 46 53 79 6e 63 20 3d 3d 20  kptFullFSync == 
ce60: 50 41 47 45 52 5f 43 4b 50 54 5f 46 55 4c 4c 46  PAGER_CKPT_FULLF
ce70: 53 59 4e 43 0a 2a 2a 20 20 20 20 20 20 53 51 4c  SYNC.**      SQL
ce80: 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 20 20  ITE_CacheSpill  
ce90: 20 20 3d 3d 20 50 41 47 45 52 5f 43 41 43 48 45    == PAGER_CACHE
cea0: 5f 53 50 49 4c 4c 0a 2a 2f 0a 23 64 65 66 69 6e  _SPILL.*/.#defin
ceb0: 65 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61  e SQLITE_VdbeTra
cec0: 63 65 20 20 20 20 20 20 30 78 30 30 30 30 30 30  ce      0x000000
ced0: 30 31 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 74  01  /* True to t
cee0: 72 61 63 65 20 56 44 42 45 20 65 78 65 63 75 74  race VDBE execut
cef0: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
cf00: 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e  QLITE_InternChan
cf10: 67 65 73 20 20 30 78 30 30 30 30 30 30 30 32 20  ges  0x00000002 
cf20: 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74 65 64 20   /* Uncommitted 
cf30: 48 61 73 68 20 74 61 62 6c 65 20 63 68 61 6e 67  Hash table chang
cf40: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
cf50: 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65  LITE_FullColName
cf60: 73 20 20 20 30 78 30 30 30 30 30 30 30 34 20 20  s   0x00000004  
cf70: 2f 2a 20 53 68 6f 77 20 66 75 6c 6c 20 63 6f 6c  /* Show full col
cf80: 75 6d 6e 20 6e 61 6d 65 73 20 6f 6e 20 53 45 4c  umn names on SEL
cf90: 45 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ECT */.#define S
cfa0: 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20  QLITE_FullFSync 
cfb0: 20 20 20 20 20 30 78 30 30 30 30 30 30 30 38 20       0x00000008 
cfc0: 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79   /* Use full fsy
cfd0: 6e 63 20 6f 6e 20 74 68 65 20 62 61 63 6b 65 6e  nc on the backen
cfe0: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
cff0: 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e  ITE_CkptFullFSyn
d000: 63 20 20 30 78 30 30 30 30 30 30 31 30 20 20 2f  c  0x00000010  /
d010: 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79 6e 63  * Use full fsync
d020: 20 66 6f 72 20 63 68 65 63 6b 70 6f 69 6e 74 20   for checkpoint 
d030: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d040: 45 5f 43 61 63 68 65 53 70 69 6c 6c 20 20 20 20  E_CacheSpill    
d050: 20 30 78 30 30 30 30 30 30 32 30 20 20 2f 2a 20   0x00000020  /* 
d060: 4f 4b 20 74 6f 20 73 70 69 6c 6c 20 70 61 67 65  OK to spill page
d070: 72 20 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69  r cache */.#defi
d080: 6e 65 20 53 51 4c 49 54 45 5f 53 68 6f 72 74 43  ne SQLITE_ShortC
d090: 6f 6c 4e 61 6d 65 73 20 20 30 78 30 30 30 30 30  olNames  0x00000
d0a0: 30 34 30 20 20 2f 2a 20 53 68 6f 77 20 73 68 6f  040  /* Show sho
d0b0: 72 74 20 63 6f 6c 75 6d 6e 73 20 6e 61 6d 65 73  rt columns names
d0c0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
d0d0: 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 20 20 20  TE_CountRows    
d0e0: 20 20 30 78 30 30 30 30 30 30 38 30 20 20 2f 2a    0x00000080  /*
d0f0: 20 43 6f 75 6e 74 20 72 6f 77 73 20 63 68 61 6e   Count rows chan
d100: 67 65 64 20 62 79 20 49 4e 53 45 52 54 2c 20 2a  ged by INSERT, *
d110: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
d120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d130: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20              /*  
d140: 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41   DELETE, or UPDA
d150: 54 45 20 61 6e 64 20 72 65 74 75 72 6e 20 2a 2f  TE and return */
d160: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d180: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20             /*   
d190: 74 68 65 20 63 6f 75 6e 74 20 75 73 69 6e 67 20  the count using 
d1a0: 61 20 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23  a callback. */.#
d1b0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 75  define SQLITE_Nu
d1c0: 6c 6c 43 61 6c 6c 62 61 63 6b 20 20 20 30 78 30  llCallback   0x0
d1d0: 30 30 30 30 31 30 30 20 20 2f 2a 20 49 6e 76 6f  0000100  /* Invo
d1e0: 6b 65 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20  ke the callback 
d1f0: 6f 6e 63 65 20 69 66 20 74 68 65 20 2a 2f 0a 20  once if the */. 
d200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d220: 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 72 65           /*   re
d230: 73 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74  sult set is empt
d240: 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  y */.#define SQL
d250: 49 54 45 5f 53 71 6c 54 72 61 63 65 20 20 20 20  ITE_SqlTrace    
d260: 20 20 20 30 78 30 30 30 30 30 32 30 30 20 20 2f     0x00000200  /
d270: 2a 20 44 65 62 75 67 20 70 72 69 6e 74 20 53 51  * Debug print SQ
d280: 4c 20 61 73 20 69 74 20 65 78 65 63 75 74 65 73  L as it executes
d290: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
d2a0: 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 20 20  TE_VdbeListing  
d2b0: 20 20 30 78 30 30 30 30 30 34 30 30 20 20 2f 2a    0x00000400  /*
d2c0: 20 44 65 62 75 67 20 6c 69 73 74 69 6e 67 73 20   Debug listings 
d2d0: 6f 66 20 56 44 42 45 20 70 72 6f 67 72 61 6d 73  of VDBE programs
d2e0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
d2f0: 54 45 5f 57 72 69 74 65 53 63 68 65 6d 61 20 20  TE_WriteSchema  
d300: 20 20 30 78 30 30 30 30 30 38 30 30 20 20 2f 2a    0x00000800  /*
d310: 20 4f 4b 20 74 6f 20 75 70 64 61 74 65 20 53 51   OK to update SQ
d320: 4c 49 54 45 5f 4d 41 53 54 45 52 20 2a 2f 0a 23  LITE_MASTER */.#
d330: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64  define SQLITE_Vd
d340: 62 65 41 64 64 6f 70 54 72 61 63 65 20 30 78 30  beAddopTrace 0x0
d350: 30 30 30 31 30 30 30 20 20 2f 2a 20 54 72 61 63  0001000  /* Trac
d360: 65 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  e sqlite3VdbeAdd
d370: 4f 70 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 23 64  Op() calls */.#d
d380: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 67 6e  efine SQLITE_Ign
d390: 6f 72 65 43 68 65 63 6b 73 20 20 20 30 78 30 30  oreChecks   0x00
d3a0: 30 30 32 30 30 30 20 20 2f 2a 20 44 6f 20 6e 6f  002000  /* Do no
d3b0: 74 20 65 6e 66 6f 72 63 65 20 63 68 65 63 6b 20  t enforce check 
d3c0: 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23  constraints */.#
d3d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65  define SQLITE_Re
d3e0: 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64 20 30 78  adUncommitted 0x
d3f0: 30 30 30 34 30 30 30 20 20 2f 2a 20 46 6f 72 20  0004000  /* For 
d400: 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64  shared-cache mod
d410: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
d420: 49 54 45 5f 4c 65 67 61 63 79 46 69 6c 65 46 6d  ITE_LegacyFileFm
d430: 74 20 20 30 78 30 30 30 30 38 30 30 30 20 20 2f  t  0x00008000  /
d440: 2a 20 43 72 65 61 74 65 20 6e 65 77 20 64 61 74  * Create new dat
d450: 61 62 61 73 65 73 20 69 6e 20 66 6f 72 6d 61 74  abases in format
d460: 20 31 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51   1 */.#define SQ
d470: 4c 49 54 45 5f 52 65 63 6f 76 65 72 79 4d 6f 64  LITE_RecoveryMod
d480: 65 20 20 20 30 78 30 30 30 31 30 30 30 30 20 20  e   0x00010000  
d490: 2f 2a 20 49 67 6e 6f 72 65 20 73 63 68 65 6d 61  /* Ignore schema
d4a0: 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69   errors */.#defi
d4b0: 6e 65 20 53 51 4c 49 54 45 5f 52 65 76 65 72 73  ne SQLITE_Revers
d4c0: 65 4f 72 64 65 72 20 20 20 30 78 30 30 30 32 30  eOrder   0x00020
d4d0: 30 30 30 20 20 2f 2a 20 52 65 76 65 72 73 65 20  000  /* Reverse 
d4e0: 75 6e 6f 72 64 65 72 65 64 20 53 45 4c 45 43 54  unordered SELECT
d4f0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
d500: 49 54 45 5f 52 65 63 54 72 69 67 67 65 72 73 20  ITE_RecTriggers 
d510: 20 20 20 30 78 30 30 30 34 30 30 30 30 20 20 2f     0x00040000  /
d520: 2a 20 45 6e 61 62 6c 65 20 72 65 63 75 72 73 69  * Enable recursi
d530: 76 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23  ve triggers */.#
d540: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 6f  define SQLITE_Fo
d550: 72 65 69 67 6e 4b 65 79 73 20 20 20 20 30 78 30  reignKeys    0x0
d560: 30 30 38 30 30 30 30 20 20 2f 2a 20 45 6e 66 6f  0080000  /* Enfo
d570: 72 63 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  rce foreign key 
d580: 63 6f 6e 73 74 72 61 69 6e 74 73 20 20 2a 2f 0a  constraints  */.
d590: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
d5a0: 75 74 6f 49 6e 64 65 78 20 20 20 20 20 20 30 78  utoIndex      0x
d5b0: 30 30 31 30 30 30 30 30 20 20 2f 2a 20 45 6e 61  00100000  /* Ena
d5c0: 62 6c 65 20 61 75 74 6f 6d 61 74 69 63 20 69 6e  ble automatic in
d5d0: 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  dexes */.#define
d5e0: 20 53 51 4c 49 54 45 5f 50 72 65 66 65 72 42 75   SQLITE_PreferBu
d5f0: 69 6c 74 69 6e 20 20 30 78 30 30 32 30 30 30 30  iltin  0x0020000
d600: 30 20 20 2f 2a 20 50 72 65 66 65 72 65 6e 63 65  0  /* Preference
d610: 20 74 6f 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e   to built-in fun
d620: 63 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  cs */.#define SQ
d630: 4c 49 54 45 5f 4c 6f 61 64 45 78 74 65 6e 73 69  LITE_LoadExtensi
d640: 6f 6e 20 20 30 78 30 30 34 30 30 30 30 30 20 20  on  0x00400000  
d650: 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65  /* Enable load_e
d660: 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23 64 65 66  xtension */.#def
d670: 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45  ine SQLITE_LoadE
d680: 78 74 46 75 6e 63 20 20 20 20 30 78 30 30 38 30  xtFunc    0x0080
d690: 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20  0000  /* Enable 
d6a0: 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29  load_extension()
d6b0: 20 53 51 4c 20 66 75 6e 63 20 2a 2f 0a 23 64 65   SQL func */.#de
d6c0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e 61 62  fine SQLITE_Enab
d6d0: 6c 65 54 72 69 67 67 65 72 20 20 30 78 30 31 30  leTrigger  0x010
d6e0: 30 30 30 30 30 20 20 2f 2a 20 54 72 75 65 20 74  00000  /* True t
d6f0: 6f 20 65 6e 61 62 6c 65 20 74 72 69 67 67 65 72  o enable trigger
d700: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
d710: 49 54 45 5f 44 65 66 65 72 46 4b 73 20 20 20 20  ITE_DeferFKs    
d720: 20 20 20 30 78 30 32 30 30 30 30 30 30 20 20 2f     0x02000000  /
d730: 2a 20 44 65 66 65 72 20 61 6c 6c 20 46 4b 20 63  * Defer all FK c
d740: 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64  onstraints */.#d
d750: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65  efine SQLITE_Que
d760: 72 79 4f 6e 6c 79 20 20 20 20 20 20 30 78 30 34  ryOnly      0x04
d770: 30 30 30 30 30 30 20 20 2f 2a 20 44 69 73 61 62  000000  /* Disab
d780: 6c 65 20 64 61 74 61 62 61 73 65 20 63 68 61 6e  le database chan
d790: 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ges */.#define S
d7a0: 51 4c 49 54 45 5f 56 64 62 65 45 51 50 20 20 20  QLITE_VdbeEQP   
d7b0: 20 20 20 20 20 30 78 30 38 30 30 30 30 30 30 20       0x08000000 
d7c0: 20 2f 2a 20 44 65 62 75 67 20 45 58 50 4c 41 49   /* Debug EXPLAI
d7d0: 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 2a 2f 0a  N QUERY PLAN */.
d7e0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56  #define SQLITE_V
d7f0: 61 63 75 75 6d 20 20 20 20 20 20 20 20 20 30 78  acuum         0x
d800: 31 30 30 30 30 30 30 30 20 20 2f 2a 20 43 75 72  10000000  /* Cur
d810: 72 65 6e 74 6c 79 20 69 6e 20 61 20 56 41 43 55  rently in a VACU
d820: 55 4d 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  UM */.#define SQ
d830: 4c 49 54 45 5f 43 65 6c 6c 53 69 7a 65 43 6b 20  LITE_CellSizeCk 
d840: 20 20 20 20 30 78 32 30 30 30 30 30 30 30 20 20      0x20000000  
d850: 2f 2a 20 43 68 65 63 6b 20 62 74 72 65 65 20 63  /* Check btree c
d860: 65 6c 6c 20 73 69 7a 65 73 20 6f 6e 20 6c 6f 61  ell sizes on loa
d870: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
d880: 49 54 45 5f 46 74 73 33 54 6f 6b 65 6e 69 7a 65  ITE_Fts3Tokenize
d890: 72 20 20 30 78 34 30 30 30 30 30 30 30 20 20 2f  r  0x40000000  /
d8a0: 2a 20 45 6e 61 62 6c 65 20 66 74 73 33 5f 74 6f  * Enable fts3_to
d8b0: 6b 65 6e 69 7a 65 72 28 32 29 20 2a 2f 0a 23 64  kenizer(2) */.#d
d8c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 6f 43  efine SQLITE_NoC
d8d0: 6b 70 74 4f 6e 43 6c 6f 73 65 20 20 30 78 38 30  kptOnClose  0x80
d8e0: 30 30 30 30 30 30 20 20 2f 2a 20 4e 6f 20 63 68  000000  /* No ch
d8f0: 65 63 6b 70 6f 69 6e 74 20 6f 6e 20 63 6c 6f 73  eckpoint on clos
d900: 65 28 29 2f 44 45 54 41 43 48 20 2a 2f 0a 0a 0a  e()/DETACH */...
d910: 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f 66 20 74 68  /*.** Bits of th
d920: 65 20 73 71 6c 69 74 65 33 2e 64 62 4f 70 74 46  e sqlite3.dbOptF
d930: 6c 61 67 73 20 66 69 65 6c 64 20 74 68 61 74 20  lags field that 
d940: 61 72 65 20 75 73 65 64 20 62 79 20 74 68 65 0a  are used by the.
d950: 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f  ** sqlite3_test_
d960: 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54  control(SQLITE_T
d970: 45 53 54 43 54 52 4c 5f 4f 50 54 49 4d 49 5a 41  ESTCTRL_OPTIMIZA
d980: 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69 6e 74 65 72  TIONS,...) inter
d990: 66 61 63 65 20 74 6f 0a 2a 2a 20 73 65 6c 65 63  face to.** selec
d9a0: 74 69 76 65 6c 79 20 64 69 73 61 62 6c 65 20 76  tively disable v
d9b0: 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74  arious optimizat
d9c0: 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ions..*/.#define
d9d0: 20 53 51 4c 49 54 45 5f 51 75 65 72 79 46 6c 61   SQLITE_QueryFla
d9e0: 74 74 65 6e 65 72 20 30 78 30 30 30 31 20 20 20  ttener 0x0001   
d9f0: 2f 2a 20 51 75 65 72 79 20 66 6c 61 74 74 65 6e  /* Query flatten
da00: 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ing */.#define S
da10: 51 4c 49 54 45 5f 43 6f 6c 75 6d 6e 43 61 63 68  QLITE_ColumnCach
da20: 65 20 20 20 20 30 78 30 30 30 32 20 20 20 2f 2a  e    0x0002   /*
da30: 20 43 6f 6c 75 6d 6e 20 63 61 63 68 65 20 2a 2f   Column cache */
da40: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
da50: 47 72 6f 75 70 42 79 4f 72 64 65 72 20 20 20 30  GroupByOrder   0
da60: 78 30 30 30 34 20 20 20 2f 2a 20 47 52 4f 55 50  x0004   /* GROUP
da70: 42 59 20 63 6f 76 65 72 20 6f 66 20 4f 52 44 45  BY cover of ORDE
da80: 52 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  RBY */.#define S
da90: 51 4c 49 54 45 5f 46 61 63 74 6f 72 4f 75 74 43  QLITE_FactorOutC
daa0: 6f 6e 73 74 20 30 78 30 30 30 38 20 20 20 2f 2a  onst 0x0008   /*
dab0: 20 43 6f 6e 73 74 61 6e 74 20 66 61 63 74 6f 72   Constant factor
dac0: 69 6e 67 20 2a 2f 0a 2f 2a 20 20 20 20 20 20 20  ing */./*       
dad0: 20 20 20 20 20 20 20 20 20 6e 6f 74 20 75 73 65           not use
dae0: 64 20 20 20 20 30 78 30 30 31 30 20 20 20 2f 2f  d    0x0010   //
daf0: 20 57 61 73 3a 20 53 51 4c 49 54 45 5f 49 64 78   Was: SQLITE_Idx
db00: 52 65 61 6c 41 73 49 6e 74 20 2a 2f 0a 23 64 65  RealAsInt */.#de
db10: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 69 73 74  fine SQLITE_Dist
db20: 69 6e 63 74 4f 70 74 20 20 20 20 30 78 30 30 32  inctOpt    0x002
db30: 30 20 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20  0   /* DISTINCT 
db40: 75 73 69 6e 67 20 69 6e 64 65 78 65 73 20 2a 2f  using indexes */
db50: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
db60: 43 6f 76 65 72 49 64 78 53 63 61 6e 20 20 20 30  CoverIdxScan   0
db70: 78 30 30 34 30 20 20 20 2f 2a 20 43 6f 76 65 72  x0040   /* Cover
db80: 69 6e 67 20 69 6e 64 65 78 20 73 63 61 6e 73 20  ing index scans 
db90: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
dba0: 45 5f 4f 72 64 65 72 42 79 49 64 78 4a 6f 69 6e  E_OrderByIdxJoin
dbb0: 20 30 78 30 30 38 30 20 20 20 2f 2a 20 4f 52 44   0x0080   /* ORD
dbc0: 45 52 20 42 59 20 6f 66 20 6a 6f 69 6e 73 20 76  ER BY of joins v
dbd0: 69 61 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  ia index */.#def
dbe0: 69 6e 65 20 53 51 4c 49 54 45 5f 53 75 62 71 43  ine SQLITE_SubqC
dbf0: 6f 72 6f 75 74 69 6e 65 20 20 30 78 30 31 30 30  oroutine  0x0100
dc00: 20 20 20 2f 2a 20 45 76 61 6c 75 61 74 65 20 73     /* Evaluate s
dc10: 75 62 71 75 65 72 69 65 73 20 61 73 20 63 6f 72  ubqueries as cor
dc20: 6f 75 74 69 6e 65 73 20 2a 2f 0a 23 64 65 66 69  outines */.#defi
dc30: 6e 65 20 53 51 4c 49 54 45 5f 54 72 61 6e 73 69  ne SQLITE_Transi
dc40: 74 69 76 65 20 20 20 20 20 30 78 30 32 30 30 20  tive     0x0200 
dc50: 20 20 2f 2a 20 54 72 61 6e 73 69 74 69 76 65 20    /* Transitive 
dc60: 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23  constraints */.#
dc70: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 6d  define SQLITE_Om
dc80: 69 74 4e 6f 6f 70 4a 6f 69 6e 20 20 20 30 78 30  itNoopJoin   0x0
dc90: 34 30 30 20 20 20 2f 2a 20 4f 6d 69 74 20 75 6e  400   /* Omit un
dca0: 75 73 65 64 20 74 61 62 6c 65 73 20 69 6e 20 6a  used tables in j
dcb0: 6f 69 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  oins */.#define 
dcc0: 53 51 4c 49 54 45 5f 53 74 61 74 33 34 20 20 20  SQLITE_Stat34   
dcd0: 20 20 20 20 20 20 30 78 30 38 30 30 20 20 20 2f        0x0800   /
dce0: 2a 20 55 73 65 20 53 54 41 54 33 20 6f 72 20 53  * Use STAT3 or S
dcf0: 54 41 54 34 20 64 61 74 61 20 2a 2f 0a 23 64 65  TAT4 data */.#de
dd00: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 75 72 73  fine SQLITE_Curs
dd10: 6f 72 48 69 6e 74 73 20 20 20 20 30 78 32 30 30  orHints    0x200
dd20: 30 20 20 20 2f 2a 20 41 64 64 20 4f 50 5f 43 75  0   /* Add OP_Cu
dd30: 72 73 6f 72 48 69 6e 74 20 6f 70 63 6f 64 65 73  rsorHint opcodes
dd40: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
dd50: 54 45 5f 41 6c 6c 4f 70 74 73 20 20 20 20 20 20  TE_AllOpts      
dd60: 20 20 30 78 66 66 66 66 20 20 20 2f 2a 20 41 6c    0xffff   /* Al
dd70: 6c 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20  l optimizations 
dd80: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  */../*.** Macros
dd90: 20 66 6f 72 20 74 65 73 74 69 6e 67 20 77 68 65   for testing whe
dda0: 74 68 65 72 20 6f 72 20 6e 6f 74 20 6f 70 74 69  ther or not opti
ddb0: 6d 69 7a 61 74 69 6f 6e 73 20 61 72 65 20 65 6e  mizations are en
ddc0: 61 62 6c 65 64 20 6f 72 20 64 69 73 61 62 6c 65  abled or disable
ddd0: 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 70  d..*/.#define Op
dde0: 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c  timizationDisabl
ddf0: 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 28 28  ed(db, mask)  ((
de00: 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73  (db)->dbOptFlags
de10: 26 28 6d 61 73 6b 29 29 21 3d 30 29 0a 23 64 65  &(mask))!=0).#de
de20: 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f  fine Optimizatio
de30: 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61 73  nEnabled(db, mas
de40: 6b 29 20 20 20 28 28 28 64 62 29 2d 3e 64 62 4f  k)   (((db)->dbO
de50: 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29 3d  ptFlags&(mask))=
de60: 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  =0)../*.** Retur
de70: 6e 20 74 72 75 65 20 69 66 20 69 74 20 4f 4b 20  n true if it OK 
de80: 74 6f 20 66 61 63 74 6f 72 20 63 6f 6e 73 74 61  to factor consta
de90: 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69  nt expressions i
dea0: 6e 74 6f 20 74 68 65 20 69 6e 69 74 69 61 6c 69  nto the initiali
deb0: 7a 61 74 69 6f 6e 0a 2a 2a 20 63 6f 64 65 2e 20  zation.** code. 
dec0: 54 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20  The argument is 
ded0: 61 20 50 61 72 73 65 20 6f 62 6a 65 63 74 20 66  a Parse object f
dee0: 6f 72 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65  or the code gene
def0: 72 61 74 6f 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  rator..*/.#defin
df00: 65 20 43 6f 6e 73 74 46 61 63 74 6f 72 4f 6b 28  e ConstFactorOk(
df10: 50 29 20 28 28 50 29 2d 3e 6f 6b 43 6f 6e 73 74  P) ((P)->okConst
df20: 46 61 63 74 6f 72 29 0a 0a 2f 2a 0a 2a 2a 20 50  Factor)../*.** P
df30: 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66  ossible values f
df40: 6f 72 20 74 68 65 20 73 71 6c 69 74 65 2e 6d 61  or the sqlite.ma
df50: 67 69 63 20 66 69 65 6c 64 2e 0a 2a 2a 20 54 68  gic field..** Th
df60: 65 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6f 62  e numbers are ob
df70: 74 61 69 6e 65 64 20 61 74 20 72 61 6e 64 6f 6d  tained at random
df80: 20 61 6e 64 20 68 61 76 65 20 6e 6f 20 73 70 65   and have no spe
df90: 63 69 61 6c 20 6d 65 61 6e 69 6e 67 2c 20 6f 74  cial meaning, ot
dfa0: 68 65 72 0a 2a 2a 20 74 68 61 6e 20 62 65 69 6e  her.** than bein
dfb0: 67 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 20  g distinct from 
dfc0: 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a 2a 2f 0a  one another..*/.
dfd0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
dfe0: 41 47 49 43 5f 4f 50 45 4e 20 20 20 20 20 30 78  AGIC_OPEN     0x
dff0: 61 30 32 39 61 36 39 37 20 20 2f 2a 20 44 61 74  a029a697  /* Dat
e000: 61 62 61 73 65 20 69 73 20 6f 70 65 6e 20 2a 2f  abase is open */
e010: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e020: 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20 20 20 30  MAGIC_CLOSED   0
e030: 78 39 66 33 63 32 64 33 33 20 20 2f 2a 20 44 61  x9f3c2d33  /* Da
e040: 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73 65 64  tabase is closed
e050: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e060: 54 45 5f 4d 41 47 49 43 5f 53 49 43 4b 20 20 20  TE_MAGIC_SICK   
e070: 20 20 30 78 34 62 37 37 31 32 39 30 20 20 2f 2a    0x4b771290  /*
e080: 20 45 72 72 6f 72 20 61 6e 64 20 61 77 61 69 74   Error and await
e090: 69 6e 67 20 63 6c 6f 73 65 20 2a 2f 0a 23 64 65  ing close */.#de
e0a0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49  fine SQLITE_MAGI
e0b0: 43 5f 42 55 53 59 20 20 20 20 20 30 78 66 30 33  C_BUSY     0xf03
e0c0: 62 37 39 30 36 20 20 2f 2a 20 44 61 74 61 62 61  b7906  /* Databa
e0d0: 73 65 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20  se currently in 
e0e0: 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  use */.#define S
e0f0: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52 52 4f  QLITE_MAGIC_ERRO
e100: 52 20 20 20 20 30 78 62 35 33 35 37 39 33 30 20  R    0xb5357930 
e110: 20 2f 2a 20 41 6e 20 53 51 4c 49 54 45 5f 4d 49   /* An SQLITE_MI
e120: 53 55 53 45 20 65 72 72 6f 72 20 6f 63 63 75 72  SUSE error occur
e130: 72 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  red */.#define S
e140: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 5a 4f 4d 42  QLITE_MAGIC_ZOMB
e150: 49 45 20 20 20 30 78 36 34 63 66 66 63 37 66 20  IE   0x64cffc7f 
e160: 20 2f 2a 20 43 6c 6f 73 65 20 77 69 74 68 20 6c   /* Close with l
e170: 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20 63 6c  ast statement cl
e180: 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61  ose */../*.** Ea
e190: 63 68 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20  ch SQL function 
e1a0: 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e  is defined by an
e1b0: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
e1c0: 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74   following.** st
e1d0: 72 75 63 74 75 72 65 2e 20 20 46 6f 72 20 67 6c  ructure.  For gl
e1e0: 6f 62 61 6c 20 62 75 69 6c 74 2d 69 6e 20 66 75  obal built-in fu
e1f0: 6e 63 74 69 6f 6e 73 20 28 65 78 3a 20 73 75 62  nctions (ex: sub
e200: 73 74 72 28 29 2c 20 6d 61 78 28 29 2c 20 63 6f  str(), max(), co
e210: 75 6e 74 28 29 29 0a 2a 2a 20 61 20 70 6f 69 6e  unt()).** a poin
e220: 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72 75  ter to this stru
e230: 63 74 75 72 65 20 69 73 20 68 65 6c 64 20 69 6e  cture is held in
e240: 20 74 68 65 20 73 71 6c 69 74 65 33 42 75 69 6c   the sqlite3Buil
e250: 74 69 6e 46 75 6e 63 74 69 6f 6e 73 20 6f 62 6a  tinFunctions obj
e260: 65 63 74 2e 0a 2a 2a 20 46 6f 72 20 70 65 72 2d  ect..** For per-
e270: 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 70 70 6c 69  connection appli
e280: 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20 66  cation-defined f
e290: 75 6e 63 74 69 6f 6e 73 2c 20 61 20 70 6f 69 6e  unctions, a poin
e2a0: 74 65 72 20 74 6f 20 74 68 69 73 0a 2a 2a 20 73  ter to this.** s
e2b0: 74 72 75 63 74 75 72 65 20 69 73 20 68 65 6c 64  tructure is held
e2c0: 20 69 6e 20 74 68 65 20 64 62 2d 3e 61 48 61 73   in the db->aHas
e2d0: 68 20 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2a  h hash table..**
e2e0: 0a 2a 2a 20 54 68 65 20 75 2e 70 48 61 73 68 20  .** The u.pHash 
e2f0: 66 69 65 6c 64 20 69 73 20 75 73 65 64 20 62 79  field is used by
e300: 20 74 68 65 20 67 6c 6f 62 61 6c 20 62 75 69 6c   the global buil
e310: 74 2d 69 6e 73 2e 20 20 54 68 65 20 75 2e 70 44  t-ins.  The u.pD
e320: 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 66 69 65  estructor.** fie
e330: 6c 64 20 69 73 20 75 73 65 64 20 62 79 20 70 65  ld is used by pe
e340: 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 70 70  r-connection app
e350: 2d 64 65 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a  -def functions..
e360: 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65  */.struct FuncDe
e370: 66 20 7b 0a 20 20 69 38 20 6e 41 72 67 3b 20 20  f {.  i8 nArg;  
e380: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
e390: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
e3a0: 73 2e 20 20 2d 31 20 6d 65 61 6e 73 20 75 6e 6c  s.  -1 means unl
e3b0: 69 6d 69 74 65 64 20 2a 2f 0a 20 20 75 31 36 20  imited */.  u16 
e3c0: 66 75 6e 63 46 6c 61 67 73 3b 20 20 20 20 20 20  funcFlags;      
e3d0: 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62 69 6e 61   /* Some combina
e3e0: 74 69 6f 6e 20 6f 66 20 53 51 4c 49 54 45 5f 46  tion of SQLITE_F
e3f0: 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69 64 20  UNC_* */.  void 
e400: 2a 70 55 73 65 72 44 61 74 61 3b 20 20 20 20 20  *pUserData;     
e410: 2f 2a 20 55 73 65 72 20 64 61 74 61 20 70 61 72  /* User data par
e420: 61 6d 65 74 65 72 20 2a 2f 0a 20 20 46 75 6e 63  ameter */.  Func
e430: 44 65 66 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  Def *pNext;     
e440: 20 2f 2a 20 4e 65 78 74 20 66 75 6e 63 74 69 6f   /* Next functio
e450: 6e 20 77 69 74 68 20 73 61 6d 65 20 6e 61 6d 65  n with same name
e460: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 46   */.  void (*xSF
e470: 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  unc)(sqlite3_con
e480: 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
e490: 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 66  3_value**); /* f
e4a0: 75 6e 63 20 6f 72 20 61 67 67 2d 73 74 65 70 20  unc or agg-step 
e4b0: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46 69 6e  */.  void (*xFin
e4c0: 61 6c 69 7a 65 29 28 73 71 6c 69 74 65 33 5f 63  alize)(sqlite3_c
e4d0: 6f 6e 74 65 78 74 2a 29 3b 20 20 20 20 20 20 20  ontext*);       
e4e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 67             /* Ag
e4f0: 67 20 66 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a 20  g finalizer */. 
e500: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61   const char *zNa
e510: 6d 65 3b 20 20 20 2f 2a 20 53 51 4c 20 6e 61 6d  me;   /* SQL nam
e520: 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  e of the functio
e530: 6e 2e 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a  n. */.  union {.
e540: 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70 48 61      FuncDef *pHa
e550: 73 68 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74  sh;      /* Next
e560: 20 77 69 74 68 20 61 20 64 69 66 66 65 72 65 6e   with a differen
e570: 74 20 6e 61 6d 65 20 62 75 74 20 74 68 65 20 73  t name but the s
e580: 61 6d 65 20 68 61 73 68 20 2a 2f 0a 20 20 20 20  ame hash */.    
e590: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a  FuncDestructor *
e5a0: 70 44 65 73 74 72 75 63 74 6f 72 3b 20 20 20 2f  pDestructor;   /
e5b0: 2a 20 52 65 66 65 72 65 6e 63 65 20 63 6f 75 6e  * Reference coun
e5c0: 74 65 64 20 64 65 73 74 72 75 63 74 6f 72 20 66  ted destructor f
e5d0: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 7d 20 75  unction */.  } u
e5e0: 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73  ;.};../*.** This
e5f0: 20 73 74 72 75 63 74 75 72 65 20 65 6e 63 61 70   structure encap
e600: 73 75 6c 61 74 65 73 20 61 20 75 73 65 72 2d 66  sulates a user-f
e610: 75 6e 63 74 69 6f 6e 20 64 65 73 74 72 75 63 74  unction destruct
e620: 6f 72 20 63 61 6c 6c 62 61 63 6b 20 28 61 73 0a  or callback (as.
e630: 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 75 73  ** configured us
e640: 69 6e 67 20 63 72 65 61 74 65 5f 66 75 6e 63 74  ing create_funct
e650: 69 6f 6e 5f 76 32 28 29 29 20 61 6e 64 20 61 20  ion_v2()) and a 
e660: 72 65 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 65  reference counte
e670: 72 2e 20 57 68 65 6e 0a 2a 2a 20 63 72 65 61 74  r. When.** creat
e680: 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 20  e_function_v2() 
e690: 69 73 20 63 61 6c 6c 65 64 20 74 6f 20 63 72 65  is called to cre
e6a0: 61 74 65 20 61 20 66 75 6e 63 74 69 6f 6e 20 77  ate a function w
e6b0: 69 74 68 20 61 20 64 65 73 74 72 75 63 74 6f 72  ith a destructor
e6c0: 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 6f 62  ,.** a single ob
e6d0: 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74 79 70  ject of this typ
e6e0: 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 2e 20  e is allocated. 
e6f0: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 2e 6e  FuncDestructor.n
e700: 52 65 66 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a  Ref is set to.**
e710: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 46   the number of F
e720: 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 63  uncDef objects c
e730: 72 65 61 74 65 64 20 28 65 69 74 68 65 72 20 31  reated (either 1
e740: 20 6f 72 20 33 2c 20 64 65 70 65 6e 64 69 6e 67   or 3, depending
e750: 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 6f   on whether.** o
e760: 72 20 6e 6f 74 20 74 68 65 20 73 70 65 63 69 66  r not the specif
e770: 69 65 64 20 65 6e 63 6f 64 69 6e 67 20 69 73 20  ied encoding is 
e780: 53 51 4c 49 54 45 5f 41 4e 59 29 2e 20 54 68 65  SQLITE_ANY). The
e790: 20 46 75 6e 63 44 65 66 2e 70 44 65 73 74 72 75   FuncDef.pDestru
e7a0: 63 74 6f 72 0a 2a 2a 20 6d 65 6d 62 65 72 20 6f  ctor.** member o
e7b0: 66 20 65 61 63 68 20 6f 66 20 74 68 65 20 6e 65  f each of the ne
e7c0: 77 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74  w FuncDef object
e7d0: 73 20 69 73 20 73 65 74 20 74 6f 20 70 6f 69 6e  s is set to poin
e7e0: 74 20 74 6f 20 74 68 65 20 61 6c 6c 6f 63 61 74  t to the allocat
e7f0: 65 64 0a 2a 2a 20 46 75 6e 63 44 65 73 74 72 75  ed.** FuncDestru
e800: 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72  ctor..**.** Ther
e810: 65 61 66 74 65 72 2c 20 77 68 65 6e 20 6f 6e 65  eafter, when one
e820: 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66 20   of the FuncDef 
e830: 6f 62 6a 65 63 74 73 20 69 73 20 64 65 6c 65 74  objects is delet
e840: 65 64 2c 20 74 68 65 20 72 65 66 65 72 65 6e 63  ed, the referenc
e850: 65 0a 2a 2a 20 63 6f 75 6e 74 20 6f 6e 20 74 68  e.** count on th
e860: 69 73 20 6f 62 6a 65 63 74 20 69 73 20 64 65 63  is object is dec
e870: 72 65 6d 65 6e 74 65 64 2e 20 57 68 65 6e 20 69  remented. When i
e880: 74 20 72 65 61 63 68 65 73 20 30 2c 20 74 68 65  t reaches 0, the
e890: 20 64 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 69   destructor.** i
e8a0: 73 20 69 6e 76 6f 6b 65 64 20 61 6e 64 20 74 68  s invoked and th
e8b0: 65 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72  e FuncDestructor
e8c0: 20 73 74 72 75 63 74 75 72 65 20 66 72 65 65 64   structure freed
e8d0: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63  ..*/.struct Func
e8e0: 44 65 73 74 72 75 63 74 6f 72 20 7b 0a 20 20 69  Destructor {.  i
e8f0: 6e 74 20 6e 52 65 66 3b 0a 20 20 76 6f 69 64 20  nt nRef;.  void 
e900: 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64  (*xDestroy)(void
e910: 20 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70 55 73   *);.  void *pUs
e920: 65 72 44 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a  erData;.};../*.*
e930: 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65  * Possible value
e940: 73 20 66 6f 72 20 46 75 6e 63 44 65 66 2e 66 6c  s for FuncDef.fl
e950: 61 67 73 2e 20 20 4e 6f 74 65 20 74 68 61 74 20  ags.  Note that 
e960: 74 68 65 20 5f 4c 45 4e 47 54 48 20 61 6e 64 20  the _LENGTH and 
e970: 5f 54 59 50 45 4f 46 0a 2a 2a 20 76 61 6c 75 65  _TYPEOF.** value
e980: 73 20 6d 75 73 74 20 63 6f 72 72 65 73 70 6f 6e  s must correspon
e990: 64 20 74 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e 47  d to OPFLAG_LENG
e9a0: 54 48 41 52 47 20 61 6e 64 20 4f 50 46 4c 41 47  THARG and OPFLAG
e9b0: 5f 54 59 50 45 4f 46 41 52 47 2e 20 20 41 6e 64  _TYPEOFARG.  And
e9c0: 0a 2a 2a 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  .** SQLITE_FUNC_
e9d0: 43 4f 4e 53 54 41 4e 54 20 6d 75 73 74 20 62 65  CONSTANT must be
e9e0: 20 74 68 65 20 73 61 6d 65 20 61 73 20 53 51 4c   the same as SQL
e9f0: 49 54 45 5f 44 45 54 45 52 4d 49 4e 49 53 54 49  ITE_DETERMINISTI
ea00: 43 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65  C.  There.** are
ea10: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
ea20: 65 6e 74 73 20 69 6e 20 74 68 65 20 63 6f 64 65  ents in the code
ea30: 20 74 6f 20 76 65 72 69 66 79 20 74 68 69 73 2e   to verify this.
ea40: 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e  .**.** Value con
ea50: 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72 63  straints (enforc
ea60: 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29  ed via assert())
ea70: 3a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f  :.**     SQLITE_
ea80: 46 55 4e 43 5f 4d 49 4e 4d 41 58 20 20 20 20 3d  FUNC_MINMAX    =
ea90: 3d 20 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20  =  NC_MinMaxAgg 
eaa0: 20 20 20 20 20 3d 3d 20 53 46 5f 4d 69 6e 4d 61       == SF_MinMa
eab0: 78 41 67 67 0a 2a 2a 20 20 20 20 20 53 51 4c 49  xAgg.**     SQLI
eac0: 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 20 20  TE_FUNC_LENGTH  
ead0: 20 20 3d 3d 20 20 4f 50 46 4c 41 47 5f 4c 45 4e    ==  OPFLAG_LEN
eae0: 47 54 48 41 52 47 0a 2a 2a 20 20 20 20 20 53 51  GTHARG.**     SQ
eaf0: 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46  LITE_FUNC_TYPEOF
eb00: 20 20 20 20 3d 3d 20 20 4f 50 46 4c 41 47 5f 54      ==  OPFLAG_T
eb10: 59 50 45 4f 46 41 52 47 0a 2a 2a 20 20 20 20 20  YPEOFARG.**     
eb20: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
eb30: 54 41 4e 54 20 20 3d 3d 20 20 53 51 4c 49 54 45  TANT  ==  SQLITE
eb40: 5f 44 45 54 45 52 4d 49 4e 49 53 54 49 43 20 66  _DETERMINISTIC f
eb50: 72 6f 6d 20 74 68 65 20 41 50 49 0a 2a 2a 20 20  rom the API.**  
eb60: 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45     SQLITE_FUNC_E
eb70: 4e 43 4d 41 53 4b 20 20 20 64 65 70 65 6e 64 73  NCMASK   depends
eb80: 20 6f 6e 20 53 51 4c 49 54 45 5f 55 54 46 2a 20   on SQLITE_UTF* 
eb90: 6d 61 63 72 6f 73 20 69 6e 20 74 68 65 20 41 50  macros in the AP
eba0: 49 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  I.*/.#define SQL
ebb0: 49 54 45 5f 46 55 4e 43 5f 45 4e 43 4d 41 53 4b  ITE_FUNC_ENCMASK
ebc0: 20 20 30 78 30 30 30 33 20 2f 2a 20 53 51 4c 49    0x0003 /* SQLI
ebd0: 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f  TE_UTF8, SQLITE_
ebe0: 55 54 46 31 36 42 45 20 6f 72 20 55 54 46 31 36  UTF16BE or UTF16
ebf0: 4c 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  LE */.#define SQ
ec00: 4c 49 54 45 5f 46 55 4e 43 5f 4c 49 4b 45 20 20  LITE_FUNC_LIKE  
ec10: 20 20 20 30 78 30 30 30 34 20 2f 2a 20 43 61 6e     0x0004 /* Can
ec20: 64 69 64 61 74 65 20 66 6f 72 20 74 68 65 20 4c  didate for the L
ec30: 49 4b 45 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  IKE optimization
ec40: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
ec50: 54 45 5f 46 55 4e 43 5f 43 41 53 45 20 20 20 20  TE_FUNC_CASE    
ec60: 20 30 78 30 30 30 38 20 2f 2a 20 43 61 73 65 2d   0x0008 /* Case-
ec70: 73 65 6e 73 69 74 69 76 65 20 4c 49 4b 45 2d 74  sensitive LIKE-t
ec80: 79 70 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ype function */.
ec90: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
eca0: 55 4e 43 5f 45 50 48 45 4d 20 20 20 20 30 78 30  UNC_EPHEM    0x0
ecb0: 30 31 30 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c  010 /* Ephemeral
ecc0: 2e 20 20 44 65 6c 65 74 65 20 77 69 74 68 20 56  .  Delete with V
ecd0: 44 42 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  DBE */.#define S
ece0: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
ecf0: 4f 4c 4c 20 30 78 30 30 32 30 20 2f 2a 20 73 71  OLL 0x0020 /* sq
ed00: 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c  lite3GetFuncColl
ed10: 53 65 71 28 29 20 6d 69 67 68 74 20 62 65 20 63  Seq() might be c
ed20: 61 6c 6c 65 64 2a 2f 0a 23 64 65 66 69 6e 65 20  alled*/.#define 
ed30: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47  SQLITE_FUNC_LENG
ed40: 54 48 20 20 20 30 78 30 30 34 30 20 2f 2a 20 42  TH   0x0040 /* B
ed50: 75 69 6c 74 2d 69 6e 20 6c 65 6e 67 74 68 28 29  uilt-in length()
ed60: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
ed70: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
ed80: 5f 54 59 50 45 4f 46 20 20 20 30 78 30 30 38 30  _TYPEOF   0x0080
ed90: 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 74 79 70   /* Built-in typ
eda0: 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a  eof() function *
edb0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
edc0: 5f 46 55 4e 43 5f 43 4f 55 4e 54 20 20 20 20 30  _FUNC_COUNT    0
edd0: 78 30 31 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69  x0100 /* Built-i
ede0: 6e 20 63 6f 75 6e 74 28 2a 29 20 61 67 67 72 65  n count(*) aggre
edf0: 67 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  gate */.#define 
ee00: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 41 4c  SQLITE_FUNC_COAL
ee10: 45 53 43 45 20 30 78 30 32 30 30 20 2f 2a 20 42  ESCE 0x0200 /* B
ee20: 75 69 6c 74 2d 69 6e 20 63 6f 61 6c 65 73 63 65  uilt-in coalesce
ee30: 28 29 20 6f 72 20 69 66 6e 75 6c 6c 28 29 20 2a  () or ifnull() *
ee40: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ee50: 5f 46 55 4e 43 5f 55 4e 4c 49 4b 45 4c 59 20 30  _FUNC_UNLIKELY 0
ee60: 78 30 34 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69  x0400 /* Built-i
ee70: 6e 20 75 6e 6c 69 6b 65 6c 79 28 29 20 66 75 6e  n unlikely() fun
ee80: 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
ee90: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
eea0: 53 54 41 4e 54 20 30 78 30 38 30 30 20 2f 2a 20  STANT 0x0800 /* 
eeb0: 43 6f 6e 73 74 61 6e 74 20 69 6e 70 75 74 73 20  Constant inputs 
eec0: 67 69 76 65 20 61 20 63 6f 6e 73 74 61 6e 74 20  give a constant 
eed0: 6f 75 74 70 75 74 20 2a 2f 0a 23 64 65 66 69 6e  output */.#defin
eee0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49  e SQLITE_FUNC_MI
eef0: 4e 4d 41 58 20 20 20 30 78 31 30 30 30 20 2f 2a  NMAX   0x1000 /*
ef00: 20 54 72 75 65 20 66 6f 72 20 6d 69 6e 28 29 20   True for min() 
ef10: 61 6e 64 20 6d 61 78 28 29 20 61 67 67 72 65 67  and max() aggreg
ef20: 61 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ates */.#define 
ef30: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43  SQLITE_FUNC_SLOC
ef40: 48 4e 47 20 20 30 78 32 30 30 30 20 2f 2a 20 22  HNG  0x2000 /* "
ef50: 53 6c 6f 77 20 43 68 61 6e 67 65 22 2e 20 56 61  Slow Change". Va
ef60: 6c 75 65 20 63 6f 6e 73 74 61 6e 74 20 64 75 72  lue constant dur
ef70: 69 6e 67 20 61 0a 20 20 20 20 20 20 20 20 20 20  ing a.          
ef80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef90: 20 20 20 20 20 20 20 20 20 20 2a 2a 20 73 69 6e            ** sin
efa0: 67 6c 65 20 71 75 65 72 79 20 2d 20 6d 69 67 68  gle query - migh
efb0: 74 20 63 68 61 6e 67 65 20 6f 76 65 72 20 74 69  t change over ti
efc0: 6d 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  me */.#define SQ
efd0: 4c 49 54 45 5f 46 55 4e 43 5f 41 46 46 49 4e 49  LITE_FUNC_AFFINI
efe0: 54 59 20 30 78 34 30 30 30 20 2f 2a 20 42 75 69  TY 0x4000 /* Bui
eff0: 6c 74 2d 69 6e 20 61 66 66 69 6e 69 74 79 28 29  lt-in affinity()
f000: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a   function */../*
f010: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
f020: 67 20 74 68 72 65 65 20 6d 61 63 72 6f 73 2c 20  g three macros, 
f030: 46 55 4e 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45  FUNCTION(), LIKE
f040: 46 55 4e 43 28 29 20 61 6e 64 20 41 47 47 52 45  FUNC() and AGGRE
f050: 47 41 54 45 28 29 20 61 72 65 0a 2a 2a 20 75 73  GATE() are.** us
f060: 65 64 20 74 6f 20 63 72 65 61 74 65 20 74 68 65  ed to create the
f070: 20 69 6e 69 74 69 61 6c 69 7a 65 72 73 20 66 6f   initializers fo
f080: 72 20 74 68 65 20 46 75 6e 63 44 65 66 20 73 74  r the FuncDef st
f090: 72 75 63 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20  ructures..**.** 
f0a0: 20 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65    FUNCTION(zName
f0b0: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
f0c0: 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20  C, xFunc).**    
f0d0: 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20   Used to create 
f0e0: 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f  a scalar functio
f0f0: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20  n definition of 
f100: 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65  a function zName
f110: 0a 2a 2a 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e  .**     implemen
f120: 74 65 64 20 62 79 20 43 20 66 75 6e 63 74 69 6f  ted by C functio
f130: 6e 20 78 46 75 6e 63 20 74 68 61 74 20 61 63 63  n xFunc that acc
f140: 65 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65  epts nArg argume
f150: 6e 74 73 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20  nts. The.**     
f160: 76 61 6c 75 65 20 70 61 73 73 65 64 20 61 73 20  value passed as 
f170: 69 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20  iArg is cast to 
f180: 61 20 28 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61  a (void*) and ma
f190: 64 65 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20  de available.** 
f1a0: 20 20 20 20 61 73 20 74 68 65 20 75 73 65 72 2d      as the user-
f1b0: 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73  data (sqlite3_us
f1c0: 65 72 5f 64 61 74 61 28 29 29 20 66 6f 72 20 74  er_data()) for t
f1d0: 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66 0a  he function. If.
f1e0: 2a 2a 20 20 20 20 20 61 72 67 75 6d 65 6e 74 20  **     argument 
f1f0: 62 4e 43 20 69 73 20 74 72 75 65 2c 20 74 68 65  bNC is true, the
f200: 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e  n the SQLITE_FUN
f210: 43 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20  C_NEEDCOLL flag 
f220: 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20  is set..**.**   
f230: 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c  VFUNCTION(zName,
f240: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
f250: 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20  , xFunc).**     
f260: 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65 78  Like FUNCTION ex
f270: 63 65 70 74 20 69 74 20 6f 6d 69 74 73 20 74 68  cept it omits th
f280: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  e SQLITE_FUNC_CO
f290: 4e 53 54 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a  NSTANT flag..**.
f2a0: 2a 2a 20 20 20 44 46 55 4e 43 54 49 4f 4e 28 7a  **   DFUNCTION(z
f2b0: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
f2c0: 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a  , bNC, xFunc).**
f2d0: 20 20 20 20 20 4c 69 6b 65 20 46 55 4e 43 54 49       Like FUNCTI
f2e0: 4f 4e 20 65 78 63 65 70 74 20 69 74 20 6f 6d 69  ON except it omi
f2f0: 74 73 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55  ts the SQLITE_FU
f300: 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67  NC_CONSTANT flag
f310: 20 61 6e 64 0a 2a 2a 20 20 20 20 20 61 64 64 73   and.**     adds
f320: 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43   the SQLITE_FUNC
f330: 5f 53 4c 4f 43 48 4e 47 20 66 6c 61 67 2e 20 20  _SLOCHNG flag.  
f340: 55 73 65 64 20 66 6f 72 20 64 61 74 65 20 26 20  Used for date & 
f350: 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 0a 2a  time functions.*
f360: 2a 20 20 20 20 20 61 6e 64 20 66 75 6e 63 74 69  *     and functi
f370: 6f 6e 73 20 6c 69 6b 65 20 73 71 6c 69 74 65 5f  ons like sqlite_
f380: 76 65 72 73 69 6f 6e 28 29 20 74 68 61 74 20 63  version() that c
f390: 61 6e 20 63 68 61 6e 67 65 2c 20 62 75 74 20 6e  an change, but n
f3a0: 6f 74 20 64 75 72 69 6e 67 0a 2a 2a 20 20 20 20  ot during.**    
f3b0: 20 61 20 73 69 6e 67 6c 65 20 71 75 65 72 79 2e   a single query.
f3c0: 0a 2a 2a 0a 2a 2a 20 20 20 41 47 47 52 45 47 41  .**.**   AGGREGA
f3d0: 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  TE(zName, nArg, 
f3e0: 69 41 72 67 2c 20 62 4e 43 2c 20 78 53 74 65 70  iArg, bNC, xStep
f3f0: 2c 20 78 46 69 6e 61 6c 29 0a 2a 2a 20 20 20 20  , xFinal).**    
f400: 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20   Used to create 
f410: 61 6e 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  an aggregate fun
f420: 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e  ction definition
f430: 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a   implemented by.
f440: 2a 2a 20 20 20 20 20 74 68 65 20 43 20 66 75 6e  **     the C fun
f450: 63 74 69 6f 6e 73 20 78 53 74 65 70 20 61 6e 64  ctions xStep and
f460: 20 78 46 69 6e 61 6c 2e 20 54 68 65 20 66 69 72   xFinal. The fir
f470: 73 74 20 66 6f 75 72 20 70 61 72 61 6d 65 74 65  st four paramete
f480: 72 73 0a 2a 2a 20 20 20 20 20 61 72 65 20 69 6e  rs.**     are in
f490: 74 65 72 70 72 65 74 65 64 20 69 6e 20 74 68 65  terpreted in the
f4a0: 20 73 61 6d 65 20 77 61 79 20 61 73 20 74 68 65   same way as the
f4b0: 20 66 69 72 73 74 20 34 20 70 61 72 61 6d 65 74   first 4 paramet
f4c0: 65 72 73 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55  ers to.**     FU
f4d0: 4e 43 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20  NCTION()..**.** 
f4e0: 20 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65    LIKEFUNC(zName
f4f0: 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 66 6c  , nArg, pArg, fl
f500: 61 67 73 29 0a 2a 2a 20 20 20 20 20 55 73 65 64  ags).**     Used
f510: 20 74 6f 20 63 72 65 61 74 65 20 61 20 73 63 61   to create a sca
f520: 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66  lar function def
f530: 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e  inition of a fun
f540: 63 74 69 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20 20  ction zName.**  
f550: 20 20 20 74 68 61 74 20 61 63 63 65 70 74 73 20     that accepts 
f560: 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73 20 61  nArg arguments a
f570: 6e 64 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65  nd is implemente
f580: 64 20 62 79 20 61 20 63 61 6c 6c 20 74 6f 20 43  d by a call to C
f590: 0a 2a 2a 20 20 20 20 20 66 75 6e 63 74 69 6f 6e  .**     function
f5a0: 20 6c 69 6b 65 46 75 6e 63 2e 20 41 72 67 75 6d   likeFunc. Argum
f5b0: 65 6e 74 20 70 41 72 67 20 69 73 20 63 61 73 74  ent pArg is cast
f5c0: 20 74 6f 20 61 20 28 76 6f 69 64 20 2a 29 20 61   to a (void *) a
f5d0: 6e 64 20 6d 61 64 65 0a 2a 2a 20 20 20 20 20 61  nd made.**     a
f5e0: 76 61 69 6c 61 62 6c 65 20 61 73 20 74 68 65 20  vailable as the 
f5f0: 66 75 6e 63 74 69 6f 6e 20 75 73 65 72 2d 64 61  function user-da
f600: 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72  ta (sqlite3_user
f610: 5f 64 61 74 61 28 29 29 2e 20 54 68 65 0a 2a 2a  _data()). The.**
f620: 20 20 20 20 20 46 75 6e 63 44 65 66 2e 66 6c 61       FuncDef.fla
f630: 67 73 20 76 61 72 69 61 62 6c 65 20 69 73 20 73  gs variable is s
f640: 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  et to the value 
f650: 70 61 73 73 65 64 20 61 73 20 74 68 65 20 66 6c  passed as the fl
f660: 61 67 73 0a 2a 2a 20 20 20 20 20 70 61 72 61 6d  ags.**     param
f670: 65 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  eter..*/.#define
f680: 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c   FUNCTION(zName,
f690: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
f6a0: 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41  , xFunc) \.  {nA
f6b0: 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  rg, SQLITE_FUNC_
f6c0: 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f  CONSTANT|SQLITE_
f6d0: 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45  UTF8|(bNC*SQLITE
f6e0: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c  _FUNC_NEEDCOLL),
f6f0: 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54   \.   SQLITE_INT
f700: 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30  _TO_PTR(iArg), 0
f710: 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61  , xFunc, 0, #zNa
f720: 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e  me, {0} }.#defin
f730: 65 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d  e VFUNCTION(zNam
f740: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
f750: 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b  NC, xFunc) \.  {
f760: 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46  nArg, SQLITE_UTF
f770: 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55  8|(bNC*SQLITE_FU
f780: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a  NC_NEEDCOLL), \.
f790: 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
f7a0: 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78  _PTR(iArg), 0, x
f7b0: 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  Func, 0, #zName,
f7c0: 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 44   {0} }.#define D
f7d0: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
f7e0: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
f7f0: 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72   xFunc) \.  {nAr
f800: 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53  g, SQLITE_FUNC_S
f810: 4c 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54  LOCHNG|SQLITE_UT
f820: 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46  F8|(bNC*SQLITE_F
f830: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c  UNC_NEEDCOLL), \
f840: 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  .   SQLITE_INT_T
f850: 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20  O_PTR(iArg), 0, 
f860: 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65  xFunc, 0, #zName
f870: 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20  , {0} }.#define 
f880: 46 55 4e 43 54 49 4f 4e 32 28 7a 4e 61 6d 65 2c  FUNCTION2(zName,
f890: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
f8a0: 2c 20 78 46 75 6e 63 2c 20 65 78 74 72 61 46 6c  , xFunc, extraFl
f8b0: 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 53  ags) \.  {nArg,S
f8c0: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
f8d0: 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c  ANT|SQLITE_UTF8|
f8e0: 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43  (bNC*SQLITE_FUNC
f8f0: 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61  _NEEDCOLL)|extra
f900: 46 6c 61 67 73 2c 5c 0a 20 20 20 53 51 4c 49 54  Flags,\.   SQLIT
f910: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72  E_INT_TO_PTR(iAr
f920: 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c  g), 0, xFunc, 0,
f930: 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23   #zName, {0} }.#
f940: 64 65 66 69 6e 65 20 53 54 52 5f 46 55 4e 43 54  define STR_FUNCT
f950: 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ION(zName, nArg,
f960: 20 70 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   pArg, bNC, xFun
f970: 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  c) \.  {nArg, SQ
f980: 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e  LITE_FUNC_SLOCHN
f990: 47 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62  G|SQLITE_UTF8|(b
f9a0: 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  NC*SQLITE_FUNC_N
f9b0: 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 70  EEDCOLL), \.   p
f9c0: 41 72 67 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30  Arg, 0, xFunc, 0
f9d0: 2c 20 23 7a 4e 61 6d 65 2c 20 7d 0a 23 64 65 66  , #zName, }.#def
f9e0: 69 6e 65 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61  ine LIKEFUNC(zNa
f9f0: 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 66  me, nArg, arg, f
fa00: 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  lags) \.  {nArg,
fa10: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
fa20: 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46  STANT|SQLITE_UTF
fa30: 38 7c 66 6c 61 67 73 2c 20 5c 0a 20 20 20 28 76  8|flags, \.   (v
fa40: 6f 69 64 20 2a 29 61 72 67 2c 20 30 2c 20 6c 69  oid *)arg, 0, li
fa50: 6b 65 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d  keFunc, 0, #zNam
fa60: 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65  e, {0} }.#define
fa70: 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65   AGGREGATE(zName
fa80: 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c  , nArg, arg, nc,
fa90: 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 20   xStep, xFinal) 
faa0: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
fab0: 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54  E_UTF8|(nc*SQLIT
fac0: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
fad0: 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e  , \.   SQLITE_IN
fae0: 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30  T_TO_PTR(arg), 0
faf0: 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 23  , xStep,xFinal,#
fb00: 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 23 64 65 66  zName, {0}}.#def
fb10: 69 6e 65 20 41 47 47 52 45 47 41 54 45 32 28 7a  ine AGGREGATE2(z
fb20: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c  Name, nArg, arg,
fb30: 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e   nc, xStep, xFin
fb40: 61 6c 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20  al, extraFlags) 
fb50: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
fb60: 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54  E_UTF8|(nc*SQLIT
fb70: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
fb80: 7c 65 78 74 72 61 46 6c 61 67 73 2c 20 5c 0a 20  |extraFlags, \. 
fb90: 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f    SQLITE_INT_TO_
fba0: 50 54 52 28 61 72 67 29 2c 20 30 2c 20 78 53 74  PTR(arg), 0, xSt
fbb0: 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65  ep,xFinal,#zName
fbc0: 2c 20 7b 30 7d 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c  , {0}}../*.** Al
fbd0: 6c 20 63 75 72 72 65 6e 74 20 73 61 76 65 70 6f  l current savepo
fbe0: 69 6e 74 73 20 61 72 65 20 73 74 6f 72 65 64 20  ints are stored 
fbf0: 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  in a linked list
fc00: 20 73 74 61 72 74 69 6e 67 20 61 74 0a 2a 2a 20   starting at.** 
fc10: 73 71 6c 69 74 65 33 2e 70 53 61 76 65 70 6f 69  sqlite3.pSavepoi
fc20: 6e 74 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c  nt. The first el
fc30: 65 6d 65 6e 74 20 69 6e 20 74 68 65 20 6c 69 73  ement in the lis
fc40: 74 20 69 73 20 74 68 65 20 6d 6f 73 74 20 72 65  t is the most re
fc50: 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64  cently.** opened
fc60: 20 73 61 76 65 70 6f 69 6e 74 2e 20 53 61 76 65   savepoint. Save
fc70: 70 6f 69 6e 74 73 20 61 72 65 20 61 64 64 65 64  points are added
fc80: 20 74 6f 20 74 68 65 20 6c 69 73 74 20 62 79 20   to the list by 
fc90: 74 68 65 20 76 64 62 65 0a 2a 2a 20 4f 50 5f 53  the vdbe.** OP_S
fca0: 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63  avepoint instruc
fcb0: 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tion..*/.struct 
fcc0: 53 61 76 65 70 6f 69 6e 74 20 7b 0a 20 20 63 68  Savepoint {.  ch
fcd0: 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
fce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fcf0: 20 20 2f 2a 20 53 61 76 65 70 6f 69 6e 74 20 6e    /* Savepoint n
fd00: 61 6d 65 20 28 6e 75 6c 2d 74 65 72 6d 69 6e 61  ame (nul-termina
fd10: 74 65 64 29 20 2a 2f 0a 20 20 69 36 34 20 6e 44  ted) */.  i64 nD
fd20: 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20  eferredCons;    
fd30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
fd40: 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72   Number of defer
fd50: 72 65 64 20 66 6b 20 76 69 6f 6c 61 74 69 6f 6e  red fk violation
fd60: 73 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65  s */.  i64 nDefe
fd70: 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20  rredImmCons;    
fd80: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
fd90: 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72 65 64  mber of deferred
fda0: 20 69 6d 6d 20 66 6b 2e 20 2a 2f 0a 20 20 53 61   imm fk. */.  Sa
fdb0: 76 65 70 6f 69 6e 74 20 2a 70 4e 65 78 74 3b 20  vepoint *pNext; 
fdc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fdd0: 20 20 2f 2a 20 50 61 72 65 6e 74 20 73 61 76 65    /* Parent save
fde0: 70 6f 69 6e 74 20 28 69 66 20 61 6e 79 29 20 2a  point (if any) *
fdf0: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
fe00: 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 75 73  following are us
fe10: 65 64 20 61 73 20 74 68 65 20 73 65 63 6f 6e 64  ed as the second
fe20: 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71   parameter to sq
fe30: 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74 28 29  lite3Savepoint()
fe40: 2c 0a 2a 2a 20 61 6e 64 20 61 73 20 74 68 65 20  ,.** and as the 
fe50: 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  P1 argument to t
fe60: 68 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20  he OP_Savepoint 
fe70: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
fe80: 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e  #define SAVEPOIN
fe90: 54 5f 42 45 47 49 4e 20 20 20 20 20 20 30 0a 23  T_BEGIN      0.#
fea0: 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54  define SAVEPOINT
feb0: 5f 52 45 4c 45 41 53 45 20 20 20 20 31 0a 23 64  _RELEASE    1.#d
fec0: 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f  efine SAVEPOINT_
fed0: 52 4f 4c 4c 42 41 43 4b 20 20 20 32 0a 0a 0a 2f  ROLLBACK   2.../
fee0: 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 69 74 65  *.** Each SQLite
fef0: 20 6d 6f 64 75 6c 65 20 28 76 69 72 74 75 61 6c   module (virtual
ff00: 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f   table definitio
ff10: 6e 29 20 69 73 20 64 65 66 69 6e 65 64 20 62 79  n) is defined by
ff20: 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20   an.** instance 
ff30: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
ff40: 20 73 74 72 75 63 74 75 72 65 2c 20 73 74 6f 72   structure, stor
ff50: 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  ed in the sqlite
ff60: 33 2e 61 4d 6f 64 75 6c 65 0a 2a 2a 20 68 61 73  3.aModule.** has
ff70: 68 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75  h table..*/.stru
ff80: 63 74 20 4d 6f 64 75 6c 65 20 7b 0a 20 20 63 6f  ct Module {.  co
ff90: 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
ffa0: 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 20 20 20 20  le *pModule;    
ffb0: 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 70     /* Callback p
ffc0: 6f 69 6e 74 65 72 73 20 2a 2f 0a 20 20 63 6f 6e  ointers */.  con
ffd0: 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  st char *zName; 
ffe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fff0: 20 20 2f 2a 20 4e 61 6d 65 20 70 61 73 73 65 64    /* Name passed
10000 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c   to create_modul
10010 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  e() */.  void *p
10020 41 75 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  Aux;            
10030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
10040 20 70 41 75 78 20 70 61 73 73 65 64 20 74 6f 20   pAux passed to 
10050 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20  create_module() 
10060 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73  */.  void (*xDes
10070 74 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b 20 20  troy)(void *);  
10080 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 64            /* Mod
10090 75 6c 65 20 64 65 73 74 72 75 63 74 6f 72 20 66  ule destructor f
100a0 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 54 61 62  unction */.  Tab
100b0 6c 65 20 2a 70 45 70 6f 54 61 62 3b 20 20 20 20  le *pEpoTab;    
100c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
100d0 20 20 2f 2a 20 45 70 6f 6e 79 6d 6f 75 73 20 74    /* Eponymous t
100e0 61 62 6c 65 20 66 6f 72 20 74 68 69 73 20 6d 6f  able for this mo
100f0 64 75 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  dule */.};../*.*
10100 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * information ab
10110 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  out each column 
10120 6f 66 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  of an SQL table 
10130 69 73 20 68 65 6c 64 20 69 6e 20 61 6e 20 69 6e  is held in an in
10140 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69  stance.** of thi
10150 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a  s structure..*/.
10160 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a  struct Column {.
10170 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
10180 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
10190 69 73 20 63 6f 6c 75 6d 6e 2c 20 5c 30 30 30 2c  is column, \000,
101a0 20 74 68 65 6e 20 74 68 65 20 74 79 70 65 20 2a   then the type *
101b0 2f 0a 20 20 45 78 70 72 20 2a 70 44 66 6c 74 3b  /.  Expr *pDflt;
101c0 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
101d0 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f  value of this co
101e0 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a  lumn */.  char *
101f0 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 43 6f  zColl;     /* Co
10200 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
10210 2e 20 20 49 66 20 4e 55 4c 4c 2c 20 75 73 65 20  .  If NULL, use 
10220 74 68 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20  the default */. 
10230 20 75 38 20 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20   u8 notNull;    
10240 20 20 2f 2a 20 41 6e 20 4f 45 5f 20 63 6f 64 65    /* An OE_ code
10250 20 66 6f 72 20 68 61 6e 64 6c 69 6e 67 20 61 20   for handling a 
10260 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61  NOT NULL constra
10270 69 6e 74 20 2a 2f 0a 20 20 63 68 61 72 20 61 66  int */.  char af
10280 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20 4f 6e 65  finity;   /* One
10290 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41   of the SQLITE_A
102a0 46 46 5f 2e 2e 2e 20 76 61 6c 75 65 73 20 2a 2f  FF_... values */
102b0 0a 20 20 75 38 20 73 7a 45 73 74 3b 20 20 20 20  .  u8 szEst;    
102c0 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64      /* Estimated
102d0 20 73 69 7a 65 20 6f 66 20 76 61 6c 75 65 20 69   size of value i
102e0 6e 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 73  n this column. s
102f0 69 7a 65 6f 66 28 49 4e 54 29 3d 3d 31 20 2a 2f  izeof(INT)==1 */
10300 0a 20 20 75 38 20 63 6f 6c 46 6c 61 67 73 3b 20  .  u8 colFlags; 
10310 20 20 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20 70      /* Boolean p
10320 72 6f 70 65 72 74 69 65 73 2e 20 20 53 65 65 20  roperties.  See 
10330 43 4f 4c 46 4c 41 47 5f 20 64 65 66 69 6e 65 73  COLFLAG_ defines
10340 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   below */.};../*
10350 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
10360 66 6f 72 20 43 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c  for Column.colFl
10370 61 67 73 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ags:.*/.#define 
10380 43 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b 45 59 20  COLFLAG_PRIMKEY 
10390 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20 43 6f   0x0001    /* Co
103a0 6c 75 6d 6e 20 69 73 20 70 61 72 74 20 6f 66 20  lumn is part of 
103b0 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20  the primary key 
103c0 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c  */.#define COLFL
103d0 41 47 5f 48 49 44 44 45 4e 20 20 20 30 78 30 30  AG_HIDDEN   0x00
103e0 30 32 20 20 20 20 2f 2a 20 41 20 68 69 64 64 65  02    /* A hidde
103f0 6e 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 76 69  n column in a vi
10400 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23  rtual table */.#
10410 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48  define COLFLAG_H
10420 41 53 54 59 50 45 20 20 30 78 30 30 30 34 20 20  ASTYPE  0x0004  
10430 20 20 2f 2a 20 54 79 70 65 20 6e 61 6d 65 20 66    /* Type name f
10440 6f 6c 6c 6f 77 73 20 63 6f 6c 75 6d 6e 20 6e 61  ollows column na
10450 6d 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22  me */../*.** A "
10460 43 6f 6c 6c 61 74 69 6e 67 20 53 65 71 75 65 6e  Collating Sequen
10470 63 65 22 20 69 73 20 64 65 66 69 6e 65 64 20 62  ce" is defined b
10480 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  y an instance of
10490 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a   the following.*
104a0 2a 20 73 74 72 75 63 74 75 72 65 2e 20 43 6f 6e  * structure. Con
104b0 63 65 70 74 75 61 6c 6c 79 2c 20 61 20 63 6f 6c  ceptually, a col
104c0 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
104d0 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6e 61  consists of a na
104e0 6d 65 20 61 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70  me and.** a comp
104f0 61 72 69 73 6f 6e 20 72 6f 75 74 69 6e 65 20 74  arison routine t
10500 68 61 74 20 64 65 66 69 6e 65 73 20 74 68 65 20  hat defines the 
10510 6f 72 64 65 72 20 6f 66 20 74 68 61 74 20 73 65  order of that se
10520 71 75 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  quence..**.** If
10530 20 43 6f 6c 6c 53 65 71 2e 78 43 6d 70 20 69 73   CollSeq.xCmp is
10540 20 4e 55 4c 4c 2c 20 69 74 20 6d 65 61 6e 73 20   NULL, it means 
10550 74 68 61 74 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c  that the.** coll
10560 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69  ating sequence i
10570 73 20 75 6e 64 65 66 69 6e 65 64 2e 20 20 49 6e  s undefined.  In
10580 64 69 63 65 73 20 62 75 69 6c 74 20 6f 6e 20 61  dices built on a
10590 6e 20 75 6e 64 65 66 69 6e 65 64 0a 2a 2a 20 63  n undefined.** c
105a0 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
105b0 65 20 6d 61 79 20 6e 6f 74 20 62 65 20 72 65 61  e may not be rea
105c0 64 20 6f 72 20 77 72 69 74 74 65 6e 2e 0a 2a 2f  d or written..*/
105d0 0a 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20  .struct CollSeq 
105e0 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
105f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
10600 65 20 6f 66 20 74 68 65 20 63 6f 6c 6c 61 74 69  e of the collati
10610 6e 67 20 73 65 71 75 65 6e 63 65 2c 20 55 54 46  ng sequence, UTF
10620 2d 38 20 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20  -8 encoded */.  
10630 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20  u8 enc;         
10640 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e        /* Text en
10650 63 6f 64 69 6e 67 20 68 61 6e 64 6c 65 64 20 62  coding handled b
10660 79 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20 76 6f  y xCmp() */.  vo
10670 69 64 20 2a 70 55 73 65 72 3b 20 20 20 20 20 20  id *pUser;      
10680 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67      /* First arg
10690 75 6d 65 6e 74 20 74 6f 20 78 43 6d 70 28 29 20  ument to xCmp() 
106a0 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6d 70 29  */.  int (*xCmp)
106b0 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73  (void*,int, cons
106c0 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 6f  t void*, int, co
106d0 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f  nst void*);.  vo
106e0 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a  id (*xDel)(void*
106f0 29 3b 20 20 2f 2a 20 44 65 73 74 72 75 63 74 6f  );  /* Destructo
10700 72 20 66 6f 72 20 70 55 73 65 72 20 2a 2f 0a 7d  r for pUser */.}
10710 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74 20  ;../*.** A sort 
10720 6f 72 64 65 72 20 63 61 6e 20 62 65 20 65 69 74  order can be eit
10730 68 65 72 20 41 53 43 20 6f 72 20 44 45 53 43 2e  her ASC or DESC.
10740 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
10750 54 45 5f 53 4f 5f 41 53 43 20 20 20 20 20 20 20  TE_SO_ASC       
10760 30 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73  0  /* Sort in as
10770 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f  cending order */
10780 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
10790 53 4f 5f 44 45 53 43 20 20 20 20 20 20 31 20 20  SO_DESC      1  
107a0 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e  /* Sort in ascen
107b0 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64  ding order */.#d
107c0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f  efine SQLITE_SO_
107d0 55 4e 44 45 46 49 4e 45 44 20 2d 31 20 2f 2a 20  UNDEFINED -1 /* 
107e0 4e 6f 20 73 6f 72 74 20 6f 72 64 65 72 20 73 70  No sort order sp
107f0 65 63 69 66 69 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a  ecified */../*.*
10800 2a 20 43 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74  * Column affinit
10810 79 20 74 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54  y types..**.** T
10820 68 65 73 65 20 75 73 65 64 20 74 6f 20 68 61 76  hese used to hav
10830 65 20 6d 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65 20  e mnemonic name 
10840 6c 69 6b 65 20 27 69 27 20 66 6f 72 20 53 51 4c  like 'i' for SQL
10850 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20  ITE_AFF_INTEGER 
10860 61 6e 64 0a 2a 2a 20 27 74 27 20 66 6f 72 20 53  and.** 't' for S
10870 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2e 20  QLITE_AFF_TEXT. 
10880 20 42 75 74 20 77 65 20 63 61 6e 20 73 61 76 65   But we can save
10890 20 61 20 6c 69 74 74 6c 65 20 73 70 61 63 65 20   a little space 
108a0 61 6e 64 20 69 6d 70 72 6f 76 65 0a 2a 2a 20 74  and improve.** t
108b0 68 65 20 73 70 65 65 64 20 61 20 6c 69 74 74 6c  he speed a littl
108c0 65 20 62 79 20 6e 75 6d 62 65 72 69 6e 67 20 74  e by numbering t
108d0 68 65 20 76 61 6c 75 65 73 20 63 6f 6e 73 65 63  he values consec
108e0 75 74 69 76 65 6c 79 2e 0a 2a 2a 0a 2a 2a 20 42  utively..**.** B
108f0 75 74 20 72 61 74 68 65 72 20 74 68 61 6e 20 73  ut rather than s
10900 74 61 72 74 20 77 69 74 68 20 30 20 6f 72 20 31  tart with 0 or 1
10910 2c 20 77 65 20 62 65 67 69 6e 20 77 69 74 68 20  , we begin with 
10920 27 41 27 2e 20 20 54 68 61 74 20 77 61 79 2c 0a  'A'.  That way,.
10930 2a 2a 20 77 68 65 6e 20 6d 75 6c 74 69 70 6c 65  ** when multiple
10940 20 61 66 66 69 6e 69 74 79 20 74 79 70 65 73 20   affinity types 
10950 61 72 65 20 63 6f 6e 63 61 74 65 6e 61 74 65 64  are concatenated
10960 20 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 61   into a string a
10970 6e 64 0a 2a 2a 20 75 73 65 64 20 61 73 20 74 68  nd.** used as th
10980 65 20 50 34 20 6f 70 65 72 61 6e 64 2c 20 74 68  e P4 operand, th
10990 65 79 20 77 69 6c 6c 20 62 65 20 6d 6f 72 65 20  ey will be more 
109a0 72 65 61 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  readable..**.** 
109b0 4e 6f 74 65 20 61 6c 73 6f 20 74 68 61 74 20 74  Note also that t
109c0 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65 73  he numeric types
109d0 20 61 72 65 20 67 72 6f 75 70 65 64 20 74 6f 67   are grouped tog
109e0 65 74 68 65 72 20 73 6f 20 74 68 61 74 20 74 65  ether so that te
109f0 73 74 69 6e 67 0a 2a 2a 20 66 6f 72 20 61 20 6e  sting.** for a n
10a00 75 6d 65 72 69 63 20 74 79 70 65 20 69 73 20 61  umeric type is a
10a10 20 73 69 6e 67 6c 65 20 63 6f 6d 70 61 72 69 73   single comparis
10a20 6f 6e 2e 20 20 41 6e 64 20 74 68 65 20 42 4c 4f  on.  And the BLO
10a30 42 20 74 79 70 65 20 69 73 20 66 69 72 73 74 2e  B type is first.
10a40 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
10a50 54 45 5f 41 46 46 5f 42 4c 4f 42 20 20 20 20 20  TE_AFF_BLOB     
10a60 27 41 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  'A'.#define SQLI
10a70 54 45 5f 41 46 46 5f 54 45 58 54 20 20 20 20 20  TE_AFF_TEXT     
10a80 27 42 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  'B'.#define SQLI
10a90 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 20  TE_AFF_NUMERIC  
10aa0 27 43 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  'C'.#define SQLI
10ab0 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 20  TE_AFF_INTEGER  
10ac0 27 44 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  'D'.#define SQLI
10ad0 54 45 5f 41 46 46 5f 52 45 41 4c 20 20 20 20 20  TE_AFF_REAL     
10ae0 27 45 27 0a 0a 23 64 65 66 69 6e 65 20 73 71 6c  'E'..#define sql
10af0 69 74 65 33 49 73 4e 75 6d 65 72 69 63 41 66 66  ite3IsNumericAff
10b00 69 6e 69 74 79 28 58 29 20 20 28 28 58 29 3e 3d  inity(X)  ((X)>=
10b10 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52  SQLITE_AFF_NUMER
10b20 49 43 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53  IC)../*.** The S
10b30 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 76  QLITE_AFF_MASK v
10b40 61 6c 75 65 73 20 6d 61 73 6b 73 20 6f 66 66 20  alues masks off 
10b50 74 68 65 20 73 69 67 6e 69 66 69 63 61 6e 74 20  the significant 
10b60 62 69 74 73 20 6f 66 20 61 6e 0a 2a 2a 20 61 66  bits of an.** af
10b70 66 69 6e 69 74 79 20 76 61 6c 75 65 2e 0a 2a 2f  finity value..*/
10b80 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
10b90 41 46 46 5f 4d 41 53 4b 20 20 20 20 20 30 78 34  AFF_MASK     0x4
10ba0 37 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 69 74 69 6f  7../*.** Additio
10bb0 6e 61 6c 20 62 69 74 20 76 61 6c 75 65 73 20 74  nal bit values t
10bc0 68 61 74 20 63 61 6e 20 62 65 20 4f 52 65 64 20  hat can be ORed 
10bd0 77 69 74 68 20 61 6e 20 61 66 66 69 6e 69 74 79  with an affinity
10be0 20 77 69 74 68 6f 75 74 0a 2a 2a 20 63 68 61 6e   without.** chan
10bf0 67 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74  ging the affinit
10c00 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  y..**.** The SQL
10c10 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 66 6c 61 67  ITE_NOTNULL flag
10c20 20 69 73 20 61 20 63 6f 6d 62 69 6e 61 74 69 6f   is a combinatio
10c30 6e 20 6f 66 20 4e 55 4c 4c 45 51 20 61 6e 64 20  n of NULLEQ and 
10c40 4a 55 4d 50 49 46 4e 55 4c 4c 2e 0a 2a 2a 20 49  JUMPIFNULL..** I
10c50 74 20 63 61 75 73 65 73 20 61 6e 20 61 73 73 65  t causes an asse
10c60 72 74 28 29 20 74 6f 20 66 69 72 65 20 69 66 20  rt() to fire if 
10c70 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 74  either operand t
10c80 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a  o a comparison.*
10c90 2a 20 6f 70 65 72 61 74 6f 72 20 69 73 20 4e 55  * operator is NU
10ca0 4c 4c 2e 20 20 49 74 20 69 73 20 61 64 64 65 64  LL.  It is added
10cb0 20 74 6f 20 63 65 72 74 61 69 6e 20 63 6f 6d 70   to certain comp
10cc0 61 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 73  arison operators
10cd0 20 74 6f 0a 2a 2a 20 70 72 6f 76 65 20 74 68 61   to.** prove tha
10ce0 74 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20 61  t the operands a
10cf0 72 65 20 61 6c 77 61 79 73 20 4e 4f 54 20 4e 55  re always NOT NU
10d00 4c 4c 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  LL..*/.#define S
10d10 51 4c 49 54 45 5f 4b 45 45 50 4e 55 4c 4c 20 20  QLITE_KEEPNULL  
10d20 20 20 20 30 78 30 38 20 20 2f 2a 20 55 73 65 64     0x08  /* Used
10d30 20 62 79 20 76 65 63 74 6f 72 20 3d 3d 20 6f 72   by vector == or
10d40 20 3c 3e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53   <> */.#define S
10d50 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c  QLITE_JUMPIFNULL
10d60 20 20 20 30 78 31 30 20 20 2f 2a 20 6a 75 6d 70     0x10  /* jump
10d70 73 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72  s if either oper
10d80 61 6e 64 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23  and is NULL */.#
10d90 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 54  define SQLITE_ST
10da0 4f 52 45 50 32 20 20 20 20 20 20 30 78 32 30 20  OREP2      0x20 
10db0 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
10dc0 20 69 6e 20 72 65 67 5b 50 32 5d 20 72 61 74 68   in reg[P2] rath
10dd0 65 72 20 74 68 61 6e 20 6a 75 6d 70 20 2a 2f 0a  er than jump */.
10de0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e  #define SQLITE_N
10df0 55 4c 4c 45 51 20 20 20 20 20 20 20 30 78 38 30  ULLEQ       0x80
10e00 20 20 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a    /* NULL=NULL *
10e10 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
10e20 5f 4e 4f 54 4e 55 4c 4c 20 20 20 20 20 20 30 78  _NOTNULL      0x
10e30 39 30 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68  90  /* Assert th
10e40 61 74 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20  at operands are 
10e50 6e 65 76 65 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f  never NULL */../
10e60 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 20 6f  *.** An object o
10e70 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20 63  f this type is c
10e80 72 65 61 74 65 64 20 66 6f 72 20 65 61 63 68 20  reated for each 
10e90 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 70 72  virtual table pr
10ea0 65 73 65 6e 74 20 69 6e 0a 2a 2a 20 74 68 65 20  esent in.** the 
10eb0 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e  database schema.
10ec0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 64 61  .**.** If the da
10ed0 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73  tabase schema is
10ee0 20 73 68 61 72 65 64 2c 20 74 68 65 6e 20 74 68   shared, then th
10ef0 65 72 65 20 69 73 20 6f 6e 65 20 69 6e 73 74 61  ere is one insta
10f00 6e 63 65 20 6f 66 20 74 68 69 73 0a 2a 2a 20 73  nce of this.** s
10f10 74 72 75 63 74 75 72 65 20 66 6f 72 20 65 61 63  tructure for eac
10f20 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  h database conne
10f30 63 74 69 6f 6e 20 28 73 71 6c 69 74 65 33 2a 29  ction (sqlite3*)
10f40 20 74 68 61 74 20 75 73 65 73 20 74 68 65 20 73   that uses the s
10f50 68 61 72 65 64 0a 2a 2a 20 73 63 68 65 6d 61 2e  hared.** schema.
10f60 20 54 68 69 73 20 69 73 20 62 65 63 61 75 73 65   This is because
10f70 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63   each database c
10f80 6f 6e 6e 65 63 74 69 6f 6e 20 72 65 71 75 69 72  onnection requir
10f90 65 73 20 69 74 73 20 6f 77 6e 20 75 6e 69 71 75  es its own uniqu
10fa0 65 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66  e.** instance of
10fb0 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61   the sqlite3_vta
10fc0 62 2a 20 68 61 6e 64 6c 65 20 75 73 65 64 20 74  b* handle used t
10fd0 6f 20 61 63 63 65 73 73 20 74 68 65 20 76 69 72  o access the vir
10fe0 74 75 61 6c 20 74 61 62 6c 65 0a 2a 2a 20 69 6d  tual table.** im
10ff0 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 73 71  plementation. sq
11000 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64  lite3_vtab* hand
11010 6c 65 73 20 63 61 6e 20 6e 6f 74 20 62 65 20 73  les can not be s
11020 68 61 72 65 64 20 62 65 74 77 65 65 6e 0a 2a 2a  hared between.**
11030 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
11040 74 69 6f 6e 73 2c 20 65 76 65 6e 20 77 68 65 6e  tions, even when
11050 20 74 68 65 20 72 65 73 74 20 6f 66 20 74 68 65   the rest of the
11060 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62   in-memory datab
11070 61 73 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73  ase.** schema is
11080 20 73 68 61 72 65 64 2c 20 61 73 20 74 68 65 20   shared, as the 
11090 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f  implementation o
110a0 66 74 65 6e 20 73 74 6f 72 65 73 20 74 68 65 20  ften stores the 
110b0 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e  database.** conn
110c0 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 70 61  ection handle pa
110d0 73 73 65 64 20 74 6f 20 69 74 20 76 69 61 20 74  ssed to it via t
110e0 68 65 20 78 43 6f 6e 6e 65 63 74 28 29 20 6f 72  he xConnect() or
110f0 20 78 43 72 65 61 74 65 28 29 20 6d 65 74 68 6f   xCreate() metho
11100 64 0a 2a 2a 20 64 75 72 69 6e 67 20 69 6e 69 74  d.** during init
11110 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 74 65 72  ialization inter
11120 6e 61 6c 6c 79 2e 20 54 68 69 73 20 64 61 74 61  nally. This data
11130 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
11140 68 61 6e 64 6c 65 20 6d 61 79 0a 2a 2a 20 74 68  handle may.** th
11150 65 6e 20 62 65 20 75 73 65 64 20 62 79 20 74 68  en be used by th
11160 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
11170 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74  implementation t
11180 6f 20 61 63 63 65 73 73 20 72 65 61 6c 20 74 61  o access real ta
11190 62 6c 65 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74  bles.** within t
111a0 68 65 20 64 61 74 61 62 61 73 65 2e 20 53 6f 20  he database. So 
111b0 74 68 61 74 20 74 68 65 79 20 61 70 70 65 61 72  that they appear
111c0 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20   as part of the 
111d0 63 61 6c 6c 65 72 73 0a 2a 2a 20 74 72 61 6e 73  callers.** trans
111e0 61 63 74 69 6f 6e 2c 20 74 68 65 73 65 20 61 63  action, these ac
111f0 63 65 73 73 65 73 20 6e 65 65 64 20 74 6f 20 62  cesses need to b
11200 65 20 6d 61 64 65 20 76 69 61 20 74 68 65 20 73  e made via the s
11210 61 6d 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  ame database.** 
11220 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 20 74 68  connection as th
11230 61 74 20 75 73 65 64 20 74 6f 20 65 78 65 63 75  at used to execu
11240 74 65 20 53 51 4c 20 6f 70 65 72 61 74 69 6f 6e  te SQL operation
11250 73 20 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c  s on the virtual
11260 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c   table..**.** Al
11270 6c 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73  l VTable objects
11280 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64   that correspond
11290 20 74 6f 20 61 20 73 69 6e 67 6c 65 20 74 61 62   to a single tab
112a0 6c 65 20 69 6e 20 61 20 73 68 61 72 65 64 0a 2a  le in a shared.*
112b0 2a 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  * database schem
112c0 61 20 61 72 65 20 69 6e 69 74 69 61 6c 6c 79 20  a are initially 
112d0 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b  stored in a link
112e0 65 64 2d 6c 69 73 74 20 70 6f 69 6e 74 65 64 20  ed-list pointed 
112f0 74 6f 20 62 79 0a 2a 2a 20 74 68 65 20 54 61 62  to by.** the Tab
11300 6c 65 2e 70 56 54 61 62 6c 65 20 6d 65 6d 62 65  le.pVTable membe
11310 72 20 76 61 72 69 61 62 6c 65 20 6f 66 20 74 68  r variable of th
11320 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
11330 54 61 62 6c 65 20 6f 62 6a 65 63 74 2e 0a 2a 2a  Table object..**
11340 20 57 68 65 6e 20 61 6e 20 73 71 6c 69 74 65 33   When an sqlite3
11350 5f 70 72 65 70 61 72 65 28 29 20 6f 70 65 72 61  _prepare() opera
11360 74 69 6f 6e 20 69 73 20 72 65 71 75 69 72 65 64  tion is required
11370 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 76   to access the v
11380 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 2c  irtual.** table,
11390 20 69 74 20 73 65 61 72 63 68 65 73 20 74 68 65   it searches the
113a0 20 6c 69 73 74 20 66 6f 72 20 74 68 65 20 56 54   list for the VT
113b0 61 62 6c 65 20 74 68 61 74 20 63 6f 72 72 65 73  able that corres
113c0 70 6f 6e 64 73 20 74 6f 20 74 68 65 0a 2a 2a 20  ponds to the.** 
113d0 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
113e0 69 6f 6e 20 64 6f 69 6e 67 20 74 68 65 20 70 72  ion doing the pr
113f0 65 70 61 72 69 6e 67 20 73 6f 20 61 73 20 74 6f  eparing so as to
11400 20 75 73 65 20 74 68 65 20 63 6f 72 72 65 63 74   use the correct
11410 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 76 74 61 62  .** sqlite3_vtab
11420 2a 20 68 61 6e 64 6c 65 20 69 6e 20 74 68 65 20  * handle in the 
11430 63 6f 6d 70 69 6c 65 64 20 71 75 65 72 79 2e 0a  compiled query..
11440 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 69 6e  **.** When an in
11450 2d 6d 65 6d 6f 72 79 20 54 61 62 6c 65 20 6f 62  -memory Table ob
11460 6a 65 63 74 20 69 73 20 64 65 6c 65 74 65 64 20  ject is deleted 
11470 28 66 6f 72 20 65 78 61 6d 70 6c 65 20 77 68 65  (for example whe
11480 6e 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20  n the.** schema 
11490 69 73 20 62 65 69 6e 67 20 72 65 6c 6f 61 64 65  is being reloade
114a0 64 20 66 6f 72 20 73 6f 6d 65 20 72 65 61 73 6f  d for some reaso
114b0 6e 29 2c 20 74 68 65 20 56 54 61 62 6c 65 20 6f  n), the VTable o
114c0 62 6a 65 63 74 73 20 61 72 65 20 6e 6f 74 0a 2a  bjects are not.*
114d0 2a 20 64 65 6c 65 74 65 64 20 61 6e 64 20 74 68  * deleted and th
114e0 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20  e sqlite3_vtab* 
114f0 68 61 6e 64 6c 65 73 20 61 72 65 20 6e 6f 74 20  handles are not 
11500 78 44 69 73 63 6f 6e 6e 65 63 74 28 29 65 64 0a  xDisconnect()ed.
11510 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20  ** immediately. 
11520 49 6e 73 74 65 61 64 2c 20 74 68 65 79 20 61 72  Instead, they ar
11530 65 20 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65  e moved from the
11540 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20 6c   Table.pVTable l
11550 69 73 74 20 74 6f 0a 2a 2a 20 61 6e 6f 74 68 65  ist to.** anothe
11560 72 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65  r linked list he
11570 61 64 65 64 20 62 79 20 74 68 65 20 73 71 6c 69  aded by the sqli
11580 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 20  te3.pDisconnect 
11590 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 0a 2a 2a  member of the.**
115a0 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73   corresponding s
115b0 71 6c 69 74 65 33 20 73 74 72 75 63 74 75 72 65  qlite3 structure
115c0 2e 20 54 68 65 79 20 61 72 65 20 74 68 65 6e 20  . They are then 
115d0 64 65 6c 65 74 65 64 2f 78 44 69 73 63 6f 6e 6e  deleted/xDisconn
115e0 65 63 74 65 64 0a 2a 2a 20 6e 65 78 74 20 74 69  ected.** next ti
115f0 6d 65 20 61 20 73 74 61 74 65 6d 65 6e 74 20 69  me a statement i
11600 73 20 70 72 65 70 61 72 65 64 20 75 73 69 6e 67  s prepared using
11610 20 73 61 69 64 20 73 71 6c 69 74 65 33 2a 2e 20   said sqlite3*. 
11620 54 68 69 73 20 69 73 20 64 6f 6e 65 0a 2a 2a 20  This is done.** 
11630 74 6f 20 61 76 6f 69 64 20 64 65 61 64 6c 6f 63  to avoid deadloc
11640 6b 20 69 73 73 75 65 73 20 69 6e 76 6f 6c 76 69  k issues involvi
11650 6e 67 20 6d 75 6c 74 69 70 6c 65 20 73 71 6c 69  ng multiple sqli
11660 74 65 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 65  te3.mutex mutexe
11670 73 2e 0a 2a 2a 20 52 65 66 65 72 20 74 6f 20 63  s..** Refer to c
11680 6f 6d 6d 65 6e 74 73 20 61 62 6f 76 65 20 66 75  omments above fu
11690 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 56 74  nction sqlite3Vt
116a0 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 29 20 66  abUnlockList() f
116b0 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 6c 61 6e 61  or an.** explana
116c0 74 69 6f 6e 20 61 73 20 74 6f 20 77 68 79 20 69  tion as to why i
116d0 74 20 69 73 20 73 61 66 65 20 74 6f 20 61 64 64  t is safe to add
116e0 20 61 6e 20 65 6e 74 72 79 20 74 6f 20 61 6e 20   an entry to an 
116f0 73 71 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e  sqlite3.pDisconn
11700 65 63 74 0a 2a 2a 20 6c 69 73 74 20 77 69 74 68  ect.** list with
11710 6f 75 74 20 68 6f 6c 64 69 6e 67 20 74 68 65 20  out holding the 
11720 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 71  corresponding sq
11730 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75 74 65  lite3.mutex mute
11740 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d  x..**.** The mem
11750 6f 72 79 20 66 6f 72 20 6f 62 6a 65 63 74 73 20  ory for objects 
11760 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20  of this type is 
11770 61 6c 77 61 79 73 20 61 6c 6c 6f 63 61 74 65 64  always allocated
11780 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 44 62   by.** sqlite3Db
11790 4d 61 6c 6c 6f 63 28 29 2c 20 75 73 69 6e 67 20  Malloc(), using 
117a0 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  the connection h
117b0 61 6e 64 6c 65 20 73 74 6f 72 65 64 20 69 6e 20  andle stored in 
117c0 56 54 61 62 6c 65 2e 64 62 20 61 73 0a 2a 2a 20  VTable.db as.** 
117d0 74 68 65 20 66 69 72 73 74 20 61 72 67 75 6d 65  the first argume
117e0 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 56 54  nt..*/.struct VT
117f0 61 62 6c 65 20 7b 0a 20 20 73 71 6c 69 74 65 33  able {.  sqlite3
11800 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 20 20   *db;           
11810 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63     /* Database c
11820 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 73 6f 63 69  onnection associ
11830 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 74  ated with this t
11840 61 62 6c 65 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65  able */.  Module
11850 20 2a 70 4d 6f 64 3b 20 20 20 20 20 20 20 20 20   *pMod;         
11860 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
11870 6f 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65  o module impleme
11880 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c  ntation */.  sql
11890 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
118a0 3b 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65  ;      /* Pointe
118b0 72 20 74 6f 20 76 74 61 62 20 69 6e 73 74 61 6e  r to vtab instan
118c0 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66  ce */.  int nRef
118d0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
118e0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70    /* Number of p
118f0 6f 69 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20  ointers to this 
11900 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 75  structure */.  u
11910 38 20 62 43 6f 6e 73 74 72 61 69 6e 74 3b 20 20  8 bConstraint;  
11920 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
11930 20 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 73 20   if constraints 
11940 61 72 65 20 73 75 70 70 6f 72 74 65 64 20 2a 2f  are supported */
11950 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e  .  int iSavepoin
11960 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
11970 44 65 70 74 68 20 6f 66 20 74 68 65 20 53 41 56  Depth of the SAV
11980 45 50 4f 49 4e 54 20 73 74 61 63 6b 20 2a 2f 0a  EPOINT stack */.
11990 20 20 56 54 61 62 6c 65 20 2a 70 4e 65 78 74 3b    VTable *pNext;
119a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
119b0 65 78 74 20 69 6e 20 6c 69 6e 6b 65 64 20 6c 69  ext in linked li
119c0 73 74 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a  st (see above) *
119d0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
119e0 73 63 68 65 6d 61 20 66 6f 72 20 65 61 63 68 20  schema for each 
119f0 53 51 4c 20 74 61 62 6c 65 20 61 6e 64 20 76 69  SQL table and vi
11a00 65 77 20 69 73 20 72 65 70 72 65 73 65 6e 74 65  ew is represente
11a10 64 20 69 6e 20 6d 65 6d 6f 72 79 0a 2a 2a 20 62  d in memory.** b
11a20 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  y an instance of
11a30 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
11a40 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72  tructure..*/.str
11a50 75 63 74 20 54 61 62 6c 65 20 7b 0a 20 20 63 68  uct Table {.  ch
11a60 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
11a70 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
11a80 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20  e table or view 
11a90 2a 2f 0a 20 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f  */.  Column *aCo
11aa0 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 66  l;        /* Inf
11ab0 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65  ormation about e
11ac0 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  ach column */.  
11ad0 49 6e 64 65 78 20 2a 70 49 6e 64 65 78 3b 20 20  Index *pIndex;  
11ae0 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
11af0 53 51 4c 20 69 6e 64 65 78 65 73 20 6f 6e 20 74  SQL indexes on t
11b00 68 69 73 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20  his table. */.  
11b10 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
11b20 20 20 20 20 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72       /* NULL for
11b30 20 74 61 62 6c 65 73 2e 20 20 50 6f 69 6e 74 73   tables.  Points
11b40 20 74 6f 20 64 65 66 69 6e 69 74 69 6f 6e 20 69   to definition i
11b50 66 20 61 20 76 69 65 77 2e 20 2a 2f 0a 20 20 46  f a view. */.  F
11b60 4b 65 79 20 2a 70 46 4b 65 79 3b 20 20 20 20 20  Key *pFKey;     
11b70 20 20 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69      /* Linked li
11b80 73 74 20 6f 66 20 61 6c 6c 20 66 6f 72 65 69 67  st of all foreig
11b90 6e 20 6b 65 79 73 20 69 6e 20 74 68 69 73 20 74  n keys in this t
11ba0 61 62 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a  able */.  char *
11bb0 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 2f  zColAff;       /
11bc0 2a 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e  * String definin
11bd0 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f  g the affinity o
11be0 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f  f each column */
11bf0 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43 68  .  ExprList *pCh
11c00 65 63 6b 3b 20 20 20 20 2f 2a 20 41 6c 6c 20 43  eck;    /* All C
11c10 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73  HECK constraints
11c20 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
11c30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20             /*   
11c40 2e 2e 2e 20 61 6c 73 6f 20 75 73 65 64 20 61 73  ... also used as
11c50 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 6c 69 73   column name lis
11c60 74 20 69 6e 20 61 20 56 49 45 57 20 2a 2f 0a 20  t in a VIEW */. 
11c70 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20   int tnum;      
11c80 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 42 54        /* Root BT
11c90 72 65 65 20 70 61 67 65 20 66 6f 72 20 74 68 69  ree page for thi
11ca0 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 75 33 32  s table */.  u32
11cb0 20 6e 54 61 62 52 65 66 3b 20 20 20 20 20 20 20   nTabRef;       
11cc0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70    /* Number of p
11cd0 6f 69 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20  ointers to this 
11ce0 54 61 62 6c 65 20 2a 2f 0a 20 20 69 31 36 20 69  Table */.  i16 i
11cf0 50 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20 20  PKey;           
11d00 2f 2a 20 49 66 20 6e 6f 74 20 6e 65 67 61 74 69  /* If not negati
11d10 76 65 2c 20 75 73 65 20 61 43 6f 6c 5b 69 50 4b  ve, use aCol[iPK
11d20 65 79 5d 20 61 73 20 74 68 65 20 72 6f 77 69 64  ey] as the rowid
11d30 20 2a 2f 0a 20 20 69 31 36 20 6e 43 6f 6c 3b 20   */.  i16 nCol; 
11d40 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
11d50 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
11d60 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  in this table */
11d70 0a 20 20 4c 6f 67 45 73 74 20 6e 52 6f 77 4c 6f  .  LogEst nRowLo
11d80 67 45 73 74 3b 20 20 20 2f 2a 20 45 73 74 69 6d  gEst;   /* Estim
11d90 61 74 65 64 20 72 6f 77 73 20 69 6e 20 74 61 62  ated rows in tab
11da0 6c 65 20 2d 20 66 72 6f 6d 20 73 71 6c 69 74 65  le - from sqlite
11db0 5f 73 74 61 74 31 20 74 61 62 6c 65 20 2a 2f 0a  _stat1 table */.
11dc0 20 20 4c 6f 67 45 73 74 20 73 7a 54 61 62 52 6f    LogEst szTabRo
11dd0 77 3b 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61  w;     /* Estima
11de0 74 65 64 20 73 69 7a 65 20 6f 66 20 65 61 63 68  ted size of each
11df0 20 74 61 62 6c 65 20 72 6f 77 20 69 6e 20 62 79   table row in by
11e00 74 65 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  tes */.#ifdef SQ
11e10 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 53 54  LITE_ENABLE_COST
11e20 4d 55 4c 54 0a 20 20 4c 6f 67 45 73 74 20 63 6f  MULT.  LogEst co
11e30 73 74 4d 75 6c 74 3b 20 20 20 20 20 2f 2a 20 43  stMult;     /* C
11e40 6f 73 74 20 6d 75 6c 74 69 70 6c 69 65 72 20 66  ost multiplier f
11e50 6f 72 20 75 73 69 6e 67 20 74 68 69 73 20 74 61  or using this ta
11e60 62 6c 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ble */.#endif.  
11e70 75 38 20 74 61 62 46 6c 61 67 73 3b 20 20 20 20  u8 tabFlags;    
11e80 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20       /* Mask of 
11e90 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20  TF_* values */. 
11ea0 20 75 38 20 6b 65 79 43 6f 6e 66 3b 20 20 20 20   u8 keyConf;    
11eb0 20 20 20 20 20 20 2f 2a 20 57 68 61 74 20 74 6f        /* What to
11ec0 20 64 6f 20 69 6e 20 63 61 73 65 20 6f 66 20 75   do in case of u
11ed0 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 66 6c 69  niqueness confli
11ee0 63 74 20 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a 23  ct on iPKey */.#
11ef0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
11f00 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20 20  IT_ALTERTABLE.  
11f10 69 6e 74 20 61 64 64 43 6f 6c 4f 66 66 73 65 74  int addColOffset
11f20 3b 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69  ;    /* Offset i
11f30 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73  n CREATE TABLE s
11f40 74 6d 74 20 74 6f 20 61 64 64 20 61 20 6e 65 77  tmt to add a new
11f50 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69   column */.#endi
11f60 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
11f70 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
11f80 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f 64 75 6c 65  LE.  int nModule
11f90 41 72 67 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  Arg;      /* Num
11fa0 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
11fb0 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 2a   to the module *
11fc0 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 4d 6f 64  /.  char **azMod
11fd0 75 6c 65 41 72 67 3b 20 20 2f 2a 20 30 3a 20 6d  uleArg;  /* 0: m
11fe0 6f 64 75 6c 65 20 31 3a 20 73 63 68 65 6d 61 20  odule 1: schema 
11ff0 32 3a 20 76 74 61 62 20 6e 61 6d 65 20 33 2e 2e  2: vtab name 3..
12000 2e 3a 20 61 72 67 73 20 2a 2f 0a 20 20 56 54 61  .: args */.  VTa
12010 62 6c 65 20 2a 70 56 54 61 62 6c 65 3b 20 20 20  ble *pVTable;   
12020 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 56 54 61    /* List of VTa
12030 62 6c 65 20 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a  ble objects. */.
12040 23 65 6e 64 69 66 0a 20 20 54 72 69 67 67 65 72  #endif.  Trigger
12050 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20 2f 2a   *pTrigger;   /*
12060 20 4c 69 73 74 20 6f 66 20 74 72 69 67 67 65 72   List of trigger
12070 73 20 73 74 6f 72 65 64 20 69 6e 20 70 53 63 68  s stored in pSch
12080 65 6d 61 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  ema */.  Schema 
12090 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a  *pSchema;     /*
120a0 20 53 63 68 65 6d 61 20 74 68 61 74 20 63 6f 6e   Schema that con
120b0 74 61 69 6e 73 20 74 68 69 73 20 74 61 62 6c 65  tains this table
120c0 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65   */.  Table *pNe
120d0 78 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20 4e 65  xtZombie;  /* Ne
120e0 78 74 20 6f 6e 20 74 68 65 20 50 61 72 73 65 2e  xt on the Parse.
120f0 70 5a 6f 6d 62 69 65 54 61 62 20 6c 69 73 74 20  pZombieTab list 
12100 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  */.};../*.** All
12110 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
12120 54 61 62 6c 65 2e 74 61 62 46 6c 61 67 73 2e 0a  Table.tabFlags..
12130 2a 2a 0a 2a 2a 20 54 46 5f 4f 4f 4f 48 69 64 64  **.** TF_OOOHidd
12140 65 6e 20 61 70 70 6c 69 65 73 20 74 6f 20 74 61  en applies to ta
12150 62 6c 65 73 20 6f 72 20 76 69 65 77 20 74 68 61  bles or view tha
12160 74 20 68 61 76 65 20 68 69 64 64 65 6e 20 63 6f  t have hidden co
12170 6c 75 6d 6e 73 20 74 68 61 74 20 61 72 65 0a 2a  lumns that are.*
12180 2a 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 6e 6f  * followed by no
12190 6e 2d 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73  n-hidden columns
121a0 2e 20 20 45 78 61 6d 70 6c 65 3a 20 20 22 43 52  .  Example:  "CR
121b0 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42  EATE VIRTUAL TAB
121c0 4c 45 20 78 20 55 53 49 4e 47 0a 2a 2a 20 76 74  LE x USING.** vt
121d0 61 62 31 28 61 20 48 49 44 44 45 4e 2c 20 62 29  ab1(a HIDDEN, b)
121e0 3b 22 2e 20 20 53 69 6e 63 65 20 22 62 22 20 69  ;".  Since "b" i
121f0 73 20 61 20 6e 6f 6e 2d 68 69 64 64 65 6e 20 63  s a non-hidden c
12200 6f 6c 75 6d 6e 20 62 75 74 20 22 61 22 20 69 73  olumn but "a" is
12210 20 68 69 64 64 65 6e 2c 0a 2a 2a 20 74 68 65 20   hidden,.** the 
12220 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 61 74 74  TF_OOOHidden att
12230 72 69 62 75 74 65 20 77 6f 75 6c 64 20 61 70 70  ribute would app
12240 6c 79 20 69 6e 20 74 68 69 73 20 63 61 73 65 2e  ly in this case.
12250 20 20 53 75 63 68 20 74 61 62 6c 65 73 20 72 65    Such tables re
12260 71 75 69 72 65 0a 2a 2a 20 73 70 65 63 69 61 6c  quire.** special
12270 20 68 61 6e 64 6c 69 6e 67 20 64 75 72 69 6e 67   handling during
12280 20 49 4e 53 45 52 54 20 70 72 6f 63 65 73 73 69   INSERT processi
12290 6e 67 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54  ng..*/.#define T
122a0 46 5f 52 65 61 64 6f 6e 6c 79 20 20 20 20 20 20  F_Readonly      
122b0 20 20 30 78 30 31 20 20 20 20 2f 2a 20 52 65 61    0x01    /* Rea
122c0 64 2d 6f 6e 6c 79 20 73 79 73 74 65 6d 20 74 61  d-only system ta
122d0 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  ble */.#define T
122e0 46 5f 45 70 68 65 6d 65 72 61 6c 20 20 20 20 20  F_Ephemeral     
122f0 20 20 30 78 30 32 20 20 20 20 2f 2a 20 41 6e 20    0x02    /* An 
12300 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20  ephemeral table 
12310 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61  */.#define TF_Ha
12320 73 50 72 69 6d 61 72 79 4b 65 79 20 20 20 30 78  sPrimaryKey   0x
12330 30 34 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 68  04    /* Table h
12340 61 73 20 61 20 70 72 69 6d 61 72 79 20 6b 65 79  as a primary key
12350 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 41   */.#define TF_A
12360 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 20 20 30  utoincrement   0
12370 78 30 38 20 20 20 20 2f 2a 20 49 6e 74 65 67 65  x08    /* Intege
12380 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 69 73  r primary key is
12390 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a   autoincrement *
123a0 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 56 69 72  /.#define TF_Vir
123b0 74 75 61 6c 20 20 20 20 20 20 20 20 20 30 78 31  tual         0x1
123c0 30 20 20 20 20 2f 2a 20 49 73 20 61 20 76 69 72  0    /* Is a vir
123d0 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64  tual table */.#d
123e0 65 66 69 6e 65 20 54 46 5f 57 69 74 68 6f 75 74  efine TF_Without
123f0 52 6f 77 69 64 20 20 20 20 30 78 32 30 20 20 20  Rowid    0x20   
12400 20 2f 2a 20 4e 6f 20 72 6f 77 69 64 2e 20 20 50   /* No rowid.  P
12410 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20 74 68  RIMARY KEY is th
12420 65 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65  e key */.#define
12430 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77   TF_NoVisibleRow
12440 69 64 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4e  id  0x40    /* N
12450 6f 20 75 73 65 72 2d 76 69 73 69 62 6c 65 20 22  o user-visible "
12460 72 6f 77 69 64 22 20 63 6f 6c 75 6d 6e 20 2a 2f  rowid" column */
12470 0a 23 64 65 66 69 6e 65 20 54 46 5f 4f 4f 4f 48  .#define TF_OOOH
12480 69 64 64 65 6e 20 20 20 20 20 20 20 30 78 38 30  idden       0x80
12490 20 20 20 20 2f 2a 20 4f 75 74 2d 6f 66 2d 4f 72      /* Out-of-Or
124a0 64 65 72 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d  der hidden colum
124b0 6e 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 65  ns */.../*.** Te
124c0 73 74 20 74 6f 20 73 65 65 20 77 68 65 74 68 65  st to see whethe
124d0 72 20 6f 72 20 6e 6f 74 20 61 20 74 61 62 6c 65  r or not a table
124e0 20 69 73 20 61 20 76 69 72 74 75 61 6c 20 74 61   is a virtual ta
124f0 62 6c 65 2e 20 20 54 68 69 73 20 69 73 0a 2a 2a  ble.  This is.**
12500 20 64 6f 6e 65 20 61 73 20 61 20 6d 61 63 72 6f   done as a macro
12510 20 73 6f 20 74 68 61 74 20 69 74 20 77 69 6c 6c   so that it will
12520 20 62 65 20 6f 70 74 69 6d 69 7a 65 64 20 6f 75   be optimized ou
12530 74 20 77 68 65 6e 20 76 69 72 74 75 61 6c 0a 2a  t when virtual.*
12540 2a 20 74 61 62 6c 65 20 73 75 70 70 6f 72 74 20  * table support 
12550 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  is omitted from 
12560 74 68 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69  the build..*/.#i
12570 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
12580 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23  T_VIRTUALTABLE.#
12590 20 20 64 65 66 69 6e 65 20 49 73 56 69 72 74 75    define IsVirtu
125a0 61 6c 28 58 29 20 20 20 20 20 20 28 28 28 58 29  al(X)      (((X)
125b0 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f  ->tabFlags & TF_
125c0 56 69 72 74 75 61 6c 29 21 3d 30 29 0a 23 65 6c  Virtual)!=0).#el
125d0 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56  se.#  define IsV
125e0 69 72 74 75 61 6c 28 58 29 20 20 20 20 20 20 30  irtual(X)      0
125f0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d  .#endif../*.** M
12600 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69  acros to determi
12610 6e 65 20 69 66 20 61 20 63 6f 6c 75 6d 6e 20 69  ne if a column i
12620 73 20 68 69 64 64 65 6e 2e 20 20 49 73 4f 72 64  s hidden.  IsOrd
12630 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d  inaryHiddenColum
12640 6e 28 29 0a 2a 2a 20 6f 6e 6c 79 20 77 6f 72 6b  n().** only work
12650 73 20 66 6f 72 20 6e 6f 6e 2d 76 69 72 74 75 61  s for non-virtua
12660 6c 20 74 61 62 6c 65 73 20 28 6f 72 64 69 6e 61  l tables (ordina
12670 72 79 20 74 61 62 6c 65 73 20 61 6e 64 20 76 69  ry tables and vi
12680 65 77 73 29 20 61 6e 64 20 69 73 0a 2a 2a 20 61  ews) and is.** a
12690 6c 77 61 79 73 20 66 61 6c 73 65 20 75 6e 6c 65  lways false unle
126a0 73 73 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ss SQLITE_ENABLE
126b0 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 20  _HIDDEN_COLUMNS 
126c0 69 73 20 64 65 66 69 6e 65 64 2e 20 20 54 68 65  is defined.  The
126d0 0a 2a 2a 20 49 73 48 69 64 64 65 6e 43 6f 6c 75  .** IsHiddenColu
126e0 6d 6e 28 29 20 6d 61 63 72 6f 20 69 73 20 67 65  mn() macro is ge
126f0 6e 65 72 61 6c 20 70 75 72 70 6f 73 65 2e 0a 2a  neral purpose..*
12700 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
12710 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44  LITE_ENABLE_HIDD
12720 45 4e 5f 43 4f 4c 55 4d 4e 53 29 0a 23 20 20 64  EN_COLUMNS).#  d
12730 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f  efine IsHiddenCo
12740 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20  lumn(X)         
12750 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20  (((X)->colFlags 
12760 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e  & COLFLAG_HIDDEN
12770 29 21 3d 30 29 0a 23 20 20 64 65 66 69 6e 65 20  )!=0).#  define 
12780 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e  IsOrdinaryHidden
12790 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28 58 29 2d  Column(X) (((X)-
127a0 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46  >colFlags & COLF
127b0 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a  LAG_HIDDEN)!=0).
127c0 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28 53  #elif !defined(S
127d0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
127e0 41 4c 54 41 42 4c 45 29 0a 23 20 20 64 65 66 69  ALTABLE).#  defi
127f0 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d  ne IsHiddenColum
12800 6e 28 58 29 20 20 20 20 20 20 20 20 20 28 28 28  n(X)         (((
12810 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43  X)->colFlags & C
12820 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d  OLFLAG_HIDDEN)!=
12830 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f  0).#  define IsO
12840 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c  rdinaryHiddenCol
12850 75 6d 6e 28 58 29 20 30 0a 23 65 6c 73 65 0a 23  umn(X) 0.#else.#
12860 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65    define IsHidde
12870 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20  nColumn(X)      
12880 20 20 20 30 0a 23 20 20 64 65 66 69 6e 65 20 49     0.#  define I
12890 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43  sOrdinaryHiddenC
128a0 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6e 64 69  olumn(X) 0.#endi
128b0 66 0a 0a 0a 2f 2a 20 44 6f 65 73 20 74 68 65 20  f.../* Does the 
128c0 74 61 62 6c 65 20 68 61 76 65 20 61 20 72 6f 77  table have a row
128d0 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 48 61  id */.#define Ha
128e0 73 52 6f 77 69 64 28 58 29 20 20 20 20 20 28 28  sRowid(X)     ((
128f0 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20  (X)->tabFlags & 
12900 54 46 5f 57 69 74 68 6f 75 74 52 6f 77 69 64 29  TF_WithoutRowid)
12910 3d 3d 30 29 0a 23 64 65 66 69 6e 65 20 56 69 73  ==0).#define Vis
12920 69 62 6c 65 52 6f 77 69 64 28 58 29 20 28 28 28  ibleRowid(X) (((
12930 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54  X)->tabFlags & T
12940 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69 64  F_NoVisibleRowid
12950 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  )==0)../*.** Eac
12960 68 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  h foreign key co
12970 6e 73 74 72 61 69 6e 74 20 69 73 20 61 6e 20 69  nstraint is an i
12980 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
12990 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
129a0 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66 6f 72 65  re..**.** A fore
129b0 69 67 6e 20 6b 65 79 20 69 73 20 61 73 73 6f 63  ign key is assoc
129c0 69 61 74 65 64 20 77 69 74 68 20 74 77 6f 20 74  iated with two t
129d0 61 62 6c 65 73 2e 20 20 54 68 65 20 22 66 72 6f  ables.  The "fro
129e0 6d 22 20 74 61 62 6c 65 20 69 73 0a 2a 2a 20 74  m" table is.** t
129f0 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f  he table that co
12a00 6e 74 61 69 6e 73 20 74 68 65 20 52 45 46 45 52  ntains the REFER
12a10 45 4e 43 45 53 20 63 6c 61 75 73 65 20 74 68 61  ENCES clause tha
12a20 74 20 63 72 65 61 74 65 73 20 74 68 65 20 66 6f  t creates the fo
12a30 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e 20 20 54  reign.** key.  T
12a40 68 65 20 22 74 6f 22 20 74 61 62 6c 65 20 69 73  he "to" table is
12a50 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
12a60 69 73 20 6e 61 6d 65 64 20 69 6e 20 74 68 65 20  is named in the 
12a70 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73  REFERENCES claus
12a80 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65 72 20 74  e..** Consider t
12a90 68 69 73 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a 0a  his example:.**.
12aa0 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 54 41  **     CREATE TA
12ab0 42 4c 45 20 65 78 31 28 0a 2a 2a 20 20 20 20 20  BLE ex1(.**     
12ac0 20 20 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d    a INTEGER PRIM
12ad0 41 52 59 20 4b 45 59 2c 0a 2a 2a 20 20 20 20 20  ARY KEY,.**     
12ae0 20 20 62 20 49 4e 54 45 47 45 52 20 43 4f 4e 53    b INTEGER CONS
12af0 54 52 41 49 4e 54 20 66 6b 31 20 52 45 46 45 52  TRAINT fk1 REFER
12b00 45 4e 43 45 53 20 65 78 32 28 78 29 0a 2a 2a 20  ENCES ex2(x).** 
12b10 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72      );.**.** For
12b20 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 22 66 6b   foreign key "fk
12b30 31 22 2c 20 74 68 65 20 66 72 6f 6d 2d 74 61 62  1", the from-tab
12b40 6c 65 20 69 73 20 22 65 78 31 22 20 61 6e 64 20  le is "ex1" and 
12b50 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20  the to-table is 
12b60 22 65 78 32 22 2e 0a 2a 2a 20 45 71 75 69 76 61  "ex2"..** Equiva
12b70 6c 65 6e 74 20 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a  lent names:.**.*
12b80 2a 20 20 20 20 20 66 72 6f 6d 2d 74 61 62 6c 65  *     from-table
12b90 20 3d 3d 20 63 68 69 6c 64 2d 74 61 62 6c 65 0a   == child-table.
12ba0 2a 2a 20 20 20 20 20 20 20 74 6f 2d 74 61 62 6c  **       to-tabl
12bb0 65 20 3d 3d 20 70 61 72 65 6e 74 2d 74 61 62 6c  e == parent-tabl
12bc0 65 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 52 45 46  e.**.** Each REF
12bd0 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 67  ERENCES clause g
12be0 65 6e 65 72 61 74 65 73 20 61 6e 20 69 6e 73 74  enerates an inst
12bf0 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
12c00 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a  owing structure.
12c10 2a 2a 20 77 68 69 63 68 20 69 73 20 61 74 74 61  ** which is atta
12c20 63 68 65 64 20 74 6f 20 74 68 65 20 66 72 6f 6d  ched to the from
12c30 2d 74 61 62 6c 65 2e 20 20 54 68 65 20 74 6f 2d  -table.  The to-
12c40 74 61 62 6c 65 20 6e 65 65 64 20 6e 6f 74 20 65  table need not e
12c50 78 69 73 74 20 77 68 65 6e 0a 2a 2a 20 74 68 65  xist when.** the
12c60 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 63   from-table is c
12c70 72 65 61 74 65 64 2e 20 20 54 68 65 20 65 78 69  reated.  The exi
12c80 73 74 65 6e 63 65 20 6f 66 20 74 68 65 20 74 6f  stence of the to
12c90 2d 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 63 68  -table is not ch
12ca0 65 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ecked..**.** The
12cb0 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 70 61 72   list of all par
12cc0 65 6e 74 73 20 66 6f 72 20 63 68 69 6c 64 20 54  ents for child T
12cd0 61 62 6c 65 20 58 20 69 73 20 68 65 6c 64 20 61  able X is held a
12ce0 74 20 58 2e 70 46 4b 65 79 2e 0a 2a 2a 0a 2a 2a  t X.pFKey..**.**
12cf0 20 41 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 63   A list of all c
12d00 68 69 6c 64 72 65 6e 20 66 6f 72 20 61 20 74 61  hildren for a ta
12d10 62 6c 65 20 6e 61 6d 65 64 20 5a 20 28 77 68 69  ble named Z (whi
12d20 63 68 20 6d 69 67 68 74 20 6e 6f 74 20 65 76 65  ch might not eve
12d30 6e 20 65 78 69 73 74 29 0a 2a 2a 20 69 73 20 68  n exist).** is h
12d40 65 6c 64 20 69 6e 20 53 63 68 65 6d 61 2e 66 6b  eld in Schema.fk
12d50 65 79 48 61 73 68 20 77 69 74 68 20 61 20 68 61  eyHash with a ha
12d60 73 68 20 6b 65 79 20 6f 66 20 5a 2e 0a 2a 2f 0a  sh key of Z..*/.
12d70 73 74 72 75 63 74 20 46 4b 65 79 20 7b 0a 20 20  struct FKey {.  
12d80 54 61 62 6c 65 20 2a 70 46 72 6f 6d 3b 20 20 20  Table *pFrom;   
12d90 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6e 74 61    /* Table conta
12da0 69 6e 69 6e 67 20 74 68 65 20 52 45 46 45 52 45  ining the REFERE
12db0 4e 43 45 53 20 63 6c 61 75 73 65 20 28 61 6b 61  NCES clause (aka
12dc0 3a 20 43 68 69 6c 64 29 20 2a 2f 0a 20 20 46 4b  : Child) */.  FK
12dd0 65 79 20 2a 70 4e 65 78 74 46 72 6f 6d 3b 20 20  ey *pNextFrom;  
12de0 2f 2a 20 4e 65 78 74 20 46 4b 65 79 20 77 69 74  /* Next FKey wit
12df0 68 20 74 68 65 20 73 61 6d 65 20 69 6e 20 70 46  h the same in pF
12e00 72 6f 6d 2e 20 4e 65 78 74 20 70 61 72 65 6e 74  rom. Next parent
12e10 20 6f 66 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 63   of pFrom */.  c
12e20 68 61 72 20 2a 7a 54 6f 3b 20 20 20 20 20 20 20  har *zTo;       
12e30 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 61 62 6c   /* Name of tabl
12e40 65 20 74 68 61 74 20 74 68 65 20 6b 65 79 20 70  e that the key p
12e50 6f 69 6e 74 73 20 74 6f 20 28 61 6b 61 3a 20 50  oints to (aka: P
12e60 61 72 65 6e 74 29 20 2a 2f 0a 20 20 46 4b 65 79  arent) */.  FKey
12e70 20 2a 70 4e 65 78 74 54 6f 3b 20 20 20 20 2f 2a   *pNextTo;    /*
12e80 20 4e 65 78 74 20 77 69 74 68 20 74 68 65 20 73   Next with the s
12e90 61 6d 65 20 7a 54 6f 2e 20 4e 65 78 74 20 63 68  ame zTo. Next ch
12ea0 69 6c 64 20 6f 66 20 7a 54 6f 2e 20 2a 2f 0a 20  ild of zTo. */. 
12eb0 20 46 4b 65 79 20 2a 70 50 72 65 76 54 6f 3b 20   FKey *pPrevTo; 
12ec0 20 20 20 2f 2a 20 50 72 65 76 69 6f 75 73 20 77     /* Previous w
12ed0 69 74 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f  ith the same zTo
12ee0 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b 20   */.  int nCol; 
12ef0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
12f00 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
12f10 74 68 69 73 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a  this key */.  /*
12f20 20 45 56 3a 20 52 2d 33 30 33 32 33 2d 32 31 39   EV: R-30323-219
12f30 31 37 20 2a 2f 0a 20 20 75 38 20 69 73 44 65 66  17 */.  u8 isDef
12f40 65 72 72 65 64 3b 20 20 20 20 20 20 20 2f 2a 20  erred;       /* 
12f50 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69  True if constrai
12f60 6e 74 20 63 68 65 63 6b 69 6e 67 20 69 73 20 64  nt checking is d
12f70 65 66 65 72 72 65 64 20 74 69 6c 6c 20 43 4f 4d  eferred till COM
12f80 4d 49 54 20 2a 2f 0a 20 20 75 38 20 61 41 63 74  MIT */.  u8 aAct
12f90 69 6f 6e 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f  ion[2];        /
12fa0 2a 20 4f 4e 20 44 45 4c 45 54 45 20 61 6e 64 20  * ON DELETE and 
12fb0 4f 4e 20 55 50 44 41 54 45 20 61 63 74 69 6f 6e  ON UPDATE action
12fc0 73 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 20  s, respectively 
12fd0 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 61 70  */.  Trigger *ap
12fe0 54 72 69 67 67 65 72 5b 32 5d 3b 2f 2a 20 54 72  Trigger[2];/* Tr
12ff0 69 67 67 65 72 73 20 66 6f 72 20 61 41 63 74 69  iggers for aActi
13000 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73 20 2a 2f 0a  on[] actions */.
13010 20 20 73 74 72 75 63 74 20 73 43 6f 6c 4d 61 70    struct sColMap
13020 20 7b 20 20 20 20 20 20 2f 2a 20 4d 61 70 70 69   {      /* Mappi
13030 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  ng of columns in
13040 20 70 46 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e   pFrom to column
13050 73 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20 20  s in zTo */.    
13060 69 6e 74 20 69 46 72 6f 6d 3b 20 20 20 20 20 20  int iFrom;      
13070 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f        /* Index o
13080 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 70 46 72 6f  f column in pFro
13090 6d 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  m */.    char *z
130a0 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Col;           /
130b0 2a 20 4e 61 6d 65 20 6f 66 20 63 6f 6c 75 6d 6e  * Name of column
130c0 20 69 6e 20 7a 54 6f 2e 20 20 49 66 20 4e 55 4c   in zTo.  If NUL
130d0 4c 20 75 73 65 20 50 52 49 4d 41 52 59 20 4b 45  L use PRIMARY KE
130e0 59 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31 5d  Y */.  } aCol[1]
130f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
13100 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61  One entry for ea
13110 63 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d  ch of nCol colum
13120 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ns */.};../*.** 
13130 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20  SQLite supports 
13140 6d 61 6e 79 20 64 69 66 66 65 72 65 6e 74 20 77  many different w
13150 61 79 73 20 74 6f 20 72 65 73 6f 6c 76 65 20 61  ays to resolve a
13160 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65   constraint.** e
13170 72 72 6f 72 2e 20 20 52 4f 4c 4c 42 41 43 4b 20  rror.  ROLLBACK 
13180 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73  processing means
13190 20 74 68 61 74 20 61 20 63 6f 6e 73 74 72 61 69   that a constrai
131a0 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20  nt violation.** 
131b0 63 61 75 73 65 73 20 74 68 65 20 6f 70 65 72 61  causes the opera
131c0 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 20  tion in process 
131d0 74 6f 20 66 61 69 6c 20 61 6e 64 20 66 6f 72 20  to fail and for 
131e0 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e  the current tran
131f0 73 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65  saction.** to be
13200 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 41   rolled back.  A
13210 42 4f 52 54 20 70 72 6f 63 65 73 73 69 6e 67 20  BORT processing 
13220 6d 65 61 6e 73 20 74 68 65 20 6f 70 65 72 61 74  means the operat
13230 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 0a 2a  ion in process.*
13240 2a 20 66 61 69 6c 73 20 61 6e 64 20 61 6e 79 20  * fails and any 
13250 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 66 72  prior changes fr
13260 6f 6d 20 74 68 61 74 20 6f 6e 65 20 6f 70 65 72  om that one oper
13270 61 74 69 6f 6e 20 61 72 65 20 62 61 63 6b 65 64  ation are backed
13280 20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20 74 68 65   out,.** but the
13290 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
132a0 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e  not rolled back.
132b0 20 20 46 41 49 4c 20 70 72 6f 63 65 73 73 69 6e    FAIL processin
132c0 67 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a 2a 20  g means that.** 
132d0 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e  the operation in
132e0 20 70 72 6f 67 72 65 73 73 20 73 74 6f 70 73 20   progress stops 
132f0 61 6e 64 20 72 65 74 75 72 6e 73 20 61 6e 20 65  and returns an e
13300 72 72 6f 72 20 63 6f 64 65 2e 20 20 42 75 74 20  rror code.  But 
13310 70 72 69 6f 72 0a 2a 2a 20 63 68 61 6e 67 65 73  prior.** changes
13320 20 64 75 65 20 74 6f 20 74 68 65 20 73 61 6d 65   due to the same
13330 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20 6e   operation are n
13340 6f 74 20 62 61 63 6b 65 64 20 6f 75 74 20 61 6e  ot backed out an
13350 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a  d no rollback.**
13360 20 6f 63 63 75 72 73 2e 20 20 49 47 4e 4f 52 45   occurs.  IGNORE
13370 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20   means that the 
13380 70 61 72 74 69 63 75 6c 61 72 20 72 6f 77 20 74  particular row t
13390 68 61 74 20 63 61 75 73 65 64 20 74 68 65 20 63  hat caused the c
133a0 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72  onstraint.** err
133b0 6f 72 20 69 73 20 6e 6f 74 20 69 6e 73 65 72 74  or is not insert
133c0 65 64 20 6f 72 20 75 70 64 61 74 65 64 2e 20 20  ed or updated.  
133d0 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69  Processing conti
133e0 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f  nues and no erro
133f0 72 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65 64  r.** is returned
13400 2e 20 20 52 45 50 4c 41 43 45 20 6d 65 61 6e 73  .  REPLACE means
13410 20 74 68 61 74 20 70 72 65 65 78 69 73 74 69 6e   that preexistin
13420 67 20 64 61 74 61 62 61 73 65 20 72 6f 77 73 20  g database rows 
13430 74 68 61 74 20 63 61 75 73 65 64 0a 2a 2a 20 61  that caused.** a
13440 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
13450 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65  nt violation are
13460 20 72 65 6d 6f 76 65 64 20 73 6f 20 74 68 61 74   removed so that
13470 20 74 68 65 20 6e 65 77 20 69 6e 73 65 72 74 20   the new insert 
13480 6f 72 0a 2a 2a 20 75 70 64 61 74 65 20 63 61 6e  or.** update can
13490 20 70 72 6f 63 65 65 64 2e 20 20 50 72 6f 63 65   proceed.  Proce
134a0 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20  ssing continues 
134b0 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20 69 73 20  and no error is 
134c0 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  reported..**.** 
134d0 52 45 53 54 52 49 43 54 2c 20 53 45 54 4e 55 4c  RESTRICT, SETNUL
134e0 4c 2c 20 61 6e 64 20 43 41 53 43 41 44 45 20 61  L, and CASCADE a
134f0 63 74 69 6f 6e 73 20 61 70 70 6c 79 20 6f 6e 6c  ctions apply onl
13500 79 20 74 6f 20 66 6f 72 65 69 67 6e 20 6b 65 79  y to foreign key
13510 73 2e 0a 2a 2a 20 52 45 53 54 52 49 43 54 20 69  s..** RESTRICT i
13520 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 41 42  s the same as AB
13530 4f 52 54 20 66 6f 72 20 49 4d 4d 45 44 49 41 54  ORT for IMMEDIAT
13540 45 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61  E foreign keys a
13550 6e 64 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20 61  nd the.** same a
13560 73 20 52 4f 4c 4c 42 41 43 4b 20 66 6f 72 20 44  s ROLLBACK for D
13570 45 46 45 52 52 45 44 20 6b 65 79 73 2e 20 20 53  EFERRED keys.  S
13580 45 54 4e 55 4c 4c 20 6d 65 61 6e 73 20 74 68 61  ETNULL means tha
13590 74 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a  t the foreign.**
135a0 20 6b 65 79 20 69 73 20 73 65 74 20 74 6f 20 4e   key is set to N
135b0 55 4c 4c 2e 20 20 43 41 53 43 41 44 45 20 6d 65  ULL.  CASCADE me
135c0 61 6e 73 20 74 68 61 74 20 61 20 44 45 4c 45 54  ans that a DELET
135d0 45 20 6f 72 20 55 50 44 41 54 45 20 6f 66 20 74  E or UPDATE of t
135e0 68 65 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 64  he.** referenced
135f0 20 74 61 62 6c 65 20 72 6f 77 20 69 73 20 70 72   table row is pr
13600 6f 70 61 67 61 74 65 64 20 69 6e 74 6f 20 74 68  opagated into th
13610 65 20 72 6f 77 20 74 68 61 74 20 68 6f 6c 64 73  e row that holds
13620 20 74 68 65 0a 2a 2a 20 66 6f 72 65 69 67 6e 20   the.** foreign 
13630 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66  key..**.** The f
13640 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d 62 6f 6c 69  ollowing symboli
13650 63 20 76 61 6c 75 65 73 20 61 72 65 20 75 73 65  c values are use
13660 64 20 74 6f 20 72 65 63 6f 72 64 20 77 68 69 63  d to record whic
13670 68 20 74 79 70 65 0a 2a 2a 20 6f 66 20 61 63 74  h type.** of act
13680 69 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a  ion to take..*/.
13690 23 64 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20  #define OE_None 
136a0 20 20 20 20 30 20 20 20 2f 2a 20 54 68 65 72 65      0   /* There
136b0 20 69 73 20 6e 6f 20 63 6f 6e 73 74 72 61 69 6e   is no constrain
136c0 74 20 74 6f 20 63 68 65 63 6b 20 2a 2f 0a 23 64  t to check */.#d
136d0 65 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61 63  efine OE_Rollbac
136e0 6b 20 31 20 20 20 2f 2a 20 46 61 69 6c 20 74 68  k 1   /* Fail th
136f0 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64 20  e operation and 
13700 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61  rollback the tra
13710 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  nsaction */.#def
13720 69 6e 65 20 4f 45 5f 41 62 6f 72 74 20 20 20 20  ine OE_Abort    
13730 32 20 20 20 2f 2a 20 42 61 63 6b 20 6f 75 74 20  2   /* Back out 
13740 63 68 61 6e 67 65 73 20 62 75 74 20 64 6f 20 6e  changes but do n
13750 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73  o rollback trans
13760 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  action */.#defin
13770 65 20 4f 45 5f 46 61 69 6c 20 20 20 20 20 33 20  e OE_Fail     3 
13780 20 20 2f 2a 20 53 74 6f 70 20 74 68 65 20 6f 70    /* Stop the op
13790 65 72 61 74 69 6f 6e 20 62 75 74 20 6c 65 61 76  eration but leav
137a0 65 20 61 6c 6c 20 70 72 69 6f 72 20 63 68 61 6e  e all prior chan
137b0 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ges */.#define O
137c0 45 5f 49 67 6e 6f 72 65 20 20 20 34 20 20 20 2f  E_Ignore   4   /
137d0 2a 20 49 67 6e 6f 72 65 20 74 68 65 20 65 72 72  * Ignore the err
137e0 6f 72 2e 20 44 6f 20 6e 6f 74 20 64 6f 20 74 68  or. Do not do th
137f0 65 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41  e INSERT or UPDA
13800 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  TE */.#define OE
13810 5f 52 65 70 6c 61 63 65 20 20 35 20 20 20 2f 2a  _Replace  5   /*
13820 20 44 65 6c 65 74 65 20 65 78 69 73 74 69 6e 67   Delete existing
13830 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 20 64 6f   record, then do
13840 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54   INSERT or UPDAT
13850 45 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45  E */..#define OE
13860 5f 52 65 73 74 72 69 63 74 20 36 20 20 20 2f 2a  _Restrict 6   /*
13870 20 4f 45 5f 41 62 6f 72 74 20 66 6f 72 20 49 4d   OE_Abort for IM
13880 4d 45 44 49 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c  MEDIATE, OE_Roll
13890 62 61 63 6b 20 66 6f 72 20 44 45 46 45 52 52 45  back for DEFERRE
138a0 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  D */.#define OE_
138b0 53 65 74 4e 75 6c 6c 20 20 37 20 20 20 2f 2a 20  SetNull  7   /* 
138c0 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20  Set the foreign 
138d0 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c  key value to NUL
138e0 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  L */.#define OE_
138f0 53 65 74 44 66 6c 74 20 20 38 20 20 20 2f 2a 20  SetDflt  8   /* 
13900 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20  Set the foreign 
13910 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 69 74 73  key value to its
13920 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 64 65 66   default */.#def
13930 69 6e 65 20 4f 45 5f 43 61 73 63 61 64 65 20 20  ine OE_Cascade  
13940 39 20 20 20 2f 2a 20 43 61 73 63 61 64 65 20 74  9   /* Cascade t
13950 68 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 0a 23  he changes */..#
13960 64 65 66 69 6e 65 20 4f 45 5f 44 65 66 61 75 6c  define OE_Defaul
13970 74 20 20 31 30 20 20 2f 2a 20 44 6f 20 77 68 61  t  10  /* Do wha
13980 74 65 76 65 72 20 74 68 65 20 64 65 66 61 75 6c  tever the defaul
13990 74 20 61 63 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a  t action is */..
139a0 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
139b0 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
139c0 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73  ing structure is
139d0 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20 66   passed as the f
139e0 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  irst.** argument
139f0 20 74 6f 20 73 71 6c 69 74 65 33 56 64 62 65 4b   to sqlite3VdbeK
13a00 65 79 43 6f 6d 70 61 72 65 20 61 6e 64 20 69 73  eyCompare and is
13a10 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c   used to control
13a20 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73   the.** comparis
13a30 6f 6e 20 6f 66 20 74 68 65 20 74 77 6f 20 69 6e  on of the two in
13a40 64 65 78 20 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a 20  dex keys..**.** 
13a50 4e 6f 74 65 20 74 68 61 74 20 61 53 6f 72 74 4f  Note that aSortO
13a60 72 64 65 72 5b 5d 20 61 6e 64 20 61 43 6f 6c 6c  rder[] and aColl
13a70 5b 5d 20 68 61 76 65 20 6e 46 69 65 6c 64 2b 31  [] have nField+1
13a80 20 73 6c 6f 74 73 2e 20 20 54 68 65 72 65 0a 2a   slots.  There.*
13a90 2a 20 61 72 65 20 6e 46 69 65 6c 64 20 73 6c 6f  * are nField slo
13aa0 74 73 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d  ts for the colum
13ab0 6e 73 20 6f 66 20 61 6e 20 69 6e 64 65 78 20 74  ns of an index t
13ac0 68 65 6e 20 6f 6e 65 20 65 78 74 72 61 20 73 6c  hen one extra sl
13ad0 6f 74 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 6f  ot.** for the ro
13ae0 77 69 64 20 61 74 20 74 68 65 20 65 6e 64 2e 0a  wid at the end..
13af0 2a 2f 0a 73 74 72 75 63 74 20 4b 65 79 49 6e 66  */.struct KeyInf
13b00 6f 20 7b 0a 20 20 75 33 32 20 6e 52 65 66 3b 20  o {.  u32 nRef; 
13b10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
13b20 62 65 72 20 6f 66 20 72 65 66 65 72 65 6e 63 65  ber of reference
13b30 73 20 74 6f 20 74 68 69 73 20 4b 65 79 49 6e 66  s to this KeyInf
13b40 6f 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 75 38  o object */.  u8
13b50 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20   enc;           
13b60 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69    /* Text encodi
13b70 6e 67 20 2d 20 6f 6e 65 20 6f 66 20 74 68 65 20  ng - one of the 
13b80 53 51 4c 49 54 45 5f 55 54 46 2a 20 76 61 6c 75  SQLITE_UTF* valu
13b90 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65  es */.  u16 nFie
13ba0 6c 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ld;         /* N
13bb0 75 6d 62 65 72 20 6f 66 20 6b 65 79 20 63 6f 6c  umber of key col
13bc0 75 6d 6e 73 20 69 6e 20 74 68 65 20 69 6e 64 65  umns in the inde
13bd0 78 20 2a 2f 0a 20 20 75 31 36 20 6e 58 46 69 65  x */.  u16 nXFie
13be0 6c 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  ld;        /* Nu
13bf0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
13c00 62 65 79 6f 6e 64 20 74 68 65 20 6b 65 79 20 63  beyond the key c
13c10 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 73 71 6c 69  olumns */.  sqli
13c20 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
13c30 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  /* The database 
13c40 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20  connection */.  
13c50 75 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20  u8 *aSortOrder; 
13c60 20 20 20 20 2f 2a 20 53 6f 72 74 20 6f 72 64 65      /* Sort orde
13c70 72 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  r for each colum
13c80 6e 2e 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20  n. */.  CollSeq 
13c90 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20 43  *aColl[1];  /* C
13ca0 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
13cb0 65 20 66 6f 72 20 65 61 63 68 20 74 65 72 6d 20  e for each term 
13cc0 6f 66 20 74 68 65 20 6b 65 79 20 2a 2f 0a 7d 3b  of the key */.};
13cd0 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6f 62 6a  ../*.** This obj
13ce0 65 63 74 20 68 6f 6c 64 73 20 61 20 72 65 63 6f  ect holds a reco
13cf0 72 64 20 77 68 69 63 68 20 68 61 73 20 62 65 65  rd which has bee
13d00 6e 20 70 61 72 73 65 64 20 6f 75 74 20 69 6e 74  n parsed out int
13d10 6f 20 69 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20  o individual.** 
13d20 66 69 65 6c 64 73 2c 20 66 6f 72 20 74 68 65 20  fields, for the 
13d30 70 75 72 70 6f 73 65 73 20 6f 66 20 64 6f 69 6e  purposes of doin
13d40 67 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a  g a comparison..
13d50 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64 20 69  **.** A record i
13d60 73 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61 74  s an object that
13d70 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72   contains one or
13d80 20 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f 66 20   more fields of 
13d90 64 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72 64 73  data..** Records
13da0 20 61 72 65 20 75 73 65 64 20 74 6f 20 73 74 6f   are used to sto
13db0 72 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  re the content o
13dc0 66 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61 6e  f a table row an
13dd0 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 68  d to store.** th
13de0 65 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e 64 65  e key of an inde
13df0 78 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63 6f 64  x.  A blob encod
13e00 69 6e 67 20 6f 66 20 61 20 72 65 63 6f 72 64 20  ing of a record 
13e10 69 73 20 63 72 65 61 74 65 64 20 62 79 0a 2a 2a  is created by.**
13e20 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f   the OP_MakeReco
13e30 72 64 20 6f 70 63 6f 64 65 20 6f 66 20 74 68 65  rd opcode of the
13e40 20 56 44 42 45 20 61 6e 64 20 69 73 20 64 69 73   VDBE and is dis
13e50 61 73 73 65 6d 62 6c 65 64 20 62 79 20 74 68 65  assembled by the
13e60 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70  .** OP_Column op
13e70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 69  code..**.** An i
13e80 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
13e90 6f 62 6a 65 63 74 20 73 65 72 76 65 73 20 61 73  object serves as
13ea0 20 61 20 22 6b 65 79 22 20 66 6f 72 20 64 6f 69   a "key" for doi
13eb0 6e 67 20 61 20 73 65 61 72 63 68 20 6f 6e 0a 2a  ng a search on.*
13ec0 2a 20 61 6e 20 69 6e 64 65 78 20 62 2b 74 72 65  * an index b+tre
13ed0 65 2e 20 54 68 65 20 67 6f 61 6c 20 6f 66 20 74  e. The goal of t
13ee0 68 65 20 73 65 61 72 63 68 20 69 73 20 74 6f 20  he search is to 
13ef0 66 69 6e 64 20 74 68 65 20 65 6e 74 72 79 20 74  find the entry t
13f00 68 61 74 0a 2a 2a 20 69 73 20 63 6c 6f 73 65 64  hat.** is closed
13f10 20 74 6f 20 74 68 65 20 6b 65 79 20 64 65 73 63   to the key desc
13f20 72 69 62 65 64 20 62 79 20 74 68 69 73 20 6f 62  ribed by this ob
13f30 6a 65 63 74 2e 20 20 54 68 69 73 20 6f 62 6a 65  ject.  This obje
13f40 63 74 20 6d 69 67 68 74 20 68 6f 6c 64 0a 2a 2a  ct might hold.**
13f50 20 6a 75 73 74 20 61 20 70 72 65 66 69 78 20 6f   just a prefix o
13f60 66 20 74 68 65 20 6b 65 79 2e 20 20 54 68 65 20  f the key.  The 
13f70 6e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73  number of fields
13f80 20 69 73 20 67 69 76 65 6e 20 62 79 0a 2a 2a 20   is given by.** 
13f90 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64  pKeyInfo->nField
13fa0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 31 20 61  ..**.** The r1 a
13fb0 6e 64 20 72 32 20 66 69 65 6c 64 73 20 61 72 65  nd r2 fields are
13fc0 20 74 68 65 20 76 61 6c 75 65 73 20 74 6f 20 72   the values to r
13fd0 65 74 75 72 6e 20 69 66 20 74 68 69 73 20 6b 65  eturn if this ke
13fe0 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a  y is less than.*
13ff0 2a 20 6f 72 20 67 72 65 61 74 65 72 20 74 68 61  * or greater tha
14000 6e 20 61 20 6b 65 79 20 69 6e 20 74 68 65 20 62  n a key in the b
14010 74 72 65 65 2c 20 72 65 73 70 65 63 74 69 76 65  tree, respective
14020 6c 79 2e 20 20 54 68 65 73 65 20 61 72 65 20 6e  ly.  These are n
14030 6f 72 6d 61 6c 6c 79 0a 2a 2a 20 2d 31 20 61 6e  ormally.** -1 an
14040 64 20 2b 31 20 72 65 73 70 65 63 74 69 76 65 6c  d +1 respectivel
14050 79 2c 20 62 75 74 20 6d 69 67 68 74 20 62 65 20  y, but might be 
14060 69 6e 76 65 72 74 65 64 20 74 6f 20 2b 31 20 61  inverted to +1 a
14070 6e 64 20 2d 31 20 69 66 20 74 68 65 20 62 2d 74  nd -1 if the b-t
14080 72 65 65 0a 2a 2a 20 69 73 20 69 6e 20 44 45 53  ree.** is in DES
14090 43 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 54  C order..**.** T
140a0 68 65 20 6b 65 79 20 63 6f 6d 70 61 72 69 73 6f  he key compariso
140b0 6e 20 66 75 6e 63 74 69 6f 6e 73 20 61 63 74 75  n functions actu
140c0 61 6c 6c 79 20 72 65 74 75 72 6e 20 64 65 66 61  ally return defa
140d0 75 6c 74 5f 72 63 20 77 68 65 6e 20 74 68 65 79  ult_rc when they
140e0 20 66 69 6e 64 0a 2a 2a 20 61 6e 20 65 71 75 61   find.** an equa
140f0 6c 73 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20  ls comparison.  
14100 64 65 66 61 75 6c 74 5f 72 63 20 63 61 6e 20 62  default_rc can b
14110 65 20 2d 31 2c 20 30 2c 20 6f 72 20 2b 31 2e 20  e -1, 0, or +1. 
14120 20 49 66 20 74 68 65 72 65 20 61 72 65 0a 2a 2a   If there are.**
14130 20 6d 75 6c 74 69 70 6c 65 20 65 6e 74 72 69 65   multiple entrie
14140 73 20 69 6e 20 74 68 65 20 62 2d 74 72 65 65 20  s in the b-tree 
14150 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 6b 65  with the same ke
14160 79 20 28 77 68 65 6e 20 6f 6e 6c 79 20 6c 6f 6f  y (when only loo
14170 6b 69 6e 67 0a 2a 2a 20 61 74 20 74 68 65 20 66  king.** at the f
14180 69 72 73 74 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e  irst pKeyInfo->n
14190 46 69 65 6c 64 73 2c 29 20 74 68 65 6e 20 64 65  Fields,) then de
141a0 66 61 75 6c 74 5f 72 63 20 63 61 6e 20 62 65 20  fault_rc can be 
141b0 73 65 74 20 74 6f 20 2d 31 20 74 6f 0a 2a 2a 20  set to -1 to.** 
141c0 63 61 75 73 65 20 74 68 65 20 73 65 61 72 63 68  cause the search
141d0 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61 73   to find the las
141e0 74 20 6d 61 74 63 68 2c 20 6f 72 20 2b 31 20 74  t match, or +1 t
141f0 6f 20 63 61 75 73 65 20 74 68 65 20 73 65 61 72  o cause the sear
14200 63 68 20 74 6f 0a 2a 2a 20 66 69 6e 64 20 74 68  ch to.** find th
14210 65 20 66 69 72 73 74 20 6d 61 74 63 68 2e 0a 2a  e first match..*
14220 2a 0a 2a 2a 20 54 68 65 20 6b 65 79 20 63 6f 6d  *.** The key com
14230 70 61 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e  parison function
14240 73 20 77 69 6c 6c 20 73 65 74 20 65 71 53 65 65  s will set eqSee
14250 6e 20 74 6f 20 74 72 75 65 20 69 66 20 74 68 65  n to true if the
14260 79 20 65 76 65 72 0a 2a 2a 20 67 65 74 20 61 6e  y ever.** get an
14270 64 20 65 71 75 61 6c 20 72 65 73 75 6c 74 73 20  d equal results 
14280 77 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 74  when comparing t
14290 68 69 73 20 73 74 72 75 63 74 75 72 65 20 74 6f  his structure to
142a0 20 61 20 62 2d 74 72 65 65 20 72 65 63 6f 72 64   a b-tree record
142b0 2e 0a 2a 2a 20 57 68 65 6e 20 64 65 66 61 75 6c  ..** When defaul
142c0 74 5f 72 63 21 3d 30 2c 20 74 68 65 20 73 65 61  t_rc!=0, the sea
142d0 72 63 68 20 6d 69 67 68 74 20 65 6e 64 20 75 70  rch might end up
142e0 20 6f 6e 20 74 68 65 20 72 65 63 6f 72 64 20 69   on the record i
142f0 6d 6d 65 64 69 61 74 65 6c 79 0a 2a 2a 20 62 65  mmediately.** be
14300 66 6f 72 65 20 74 68 65 20 66 69 72 73 74 20 6d  fore the first m
14310 61 74 63 68 20 6f 72 20 69 6d 6d 65 64 69 61 74  atch or immediat
14320 65 6c 79 20 61 66 74 65 72 20 74 68 65 20 6c 61  ely after the la
14330 73 74 20 6d 61 74 63 68 2e 20 20 54 68 65 0a 2a  st match.  The.*
14340 2a 20 65 71 53 65 65 6e 20 66 69 65 6c 64 20 77  * eqSeen field w
14350 69 6c 6c 20 69 6e 64 69 63 61 74 65 20 77 68 65  ill indicate whe
14360 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20 65  ther or not an e
14370 78 61 63 74 20 6d 61 74 63 68 20 65 78 69 73 74  xact match exist
14380 73 20 69 6e 20 74 68 65 0a 2a 2a 20 62 2d 74 72  s in the.** b-tr
14390 65 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e  ee..*/.struct Un
143a0 70 61 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20  packedRecord {. 
143b0 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e   KeyInfo *pKeyIn
143c0 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f  fo;  /* Collatio
143d0 6e 20 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72  n and sort-order
143e0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a   information */.
143f0 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20    Mem *aMem;    
14400 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 73 20        /* Values 
14410 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b  */.  u16 nField;
14420 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
14430 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e  er of entries in
14440 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69 38   apMem[] */.  i8
14450 20 64 65 66 61 75 6c 74 5f 72 63 3b 20 20 20 20   default_rc;    
14460 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20    /* Comparison 
14470 72 65 73 75 6c 74 20 69 66 20 6b 65 79 73 20 61  result if keys a
14480 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20 75 38  re equal */.  u8
14490 20 65 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20   errCode;       
144a0 20 20 2f 2a 20 45 72 72 6f 72 20 64 65 74 65 63    /* Error detec
144b0 74 65 64 20 62 79 20 78 52 65 63 6f 72 64 43 6f  ted by xRecordCo
144c0 6d 70 61 72 65 20 28 43 4f 52 52 55 50 54 20 6f  mpare (CORRUPT o
144d0 72 20 4e 4f 4d 45 4d 29 20 2a 2f 0a 20 20 69 38  r NOMEM) */.  i8
144e0 20 72 31 3b 20 20 20 20 20 20 20 20 20 20 20 20   r1;            
144f0 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65    /* Value to re
14500 74 75 72 6e 20 69 66 20 28 6c 68 73 20 3e 20 72  turn if (lhs > r
14510 68 73 29 20 2a 2f 0a 20 20 69 38 20 72 32 3b 20  hs) */.  i8 r2; 
14520 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
14530 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20  Value to return 
14540 69 66 20 28 72 68 73 20 3c 20 6c 68 73 29 20 2a  if (rhs < lhs) *
14550 2f 0a 20 20 75 38 20 65 71 53 65 65 6e 3b 20 20  /.  u8 eqSeen;  
14560 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
14570 69 66 20 61 6e 20 65 71 75 61 6c 69 74 79 20 63  if an equality c
14580 6f 6d 70 61 72 69 73 6f 6e 20 68 61 73 20 62 65  omparison has be
14590 65 6e 20 73 65 65 6e 20 2a 2f 0a 7d 3b 0a 0a 0a  en seen */.};...
145a0 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 69  /*.** Each SQL i
145b0 6e 64 65 78 20 69 73 20 72 65 70 72 65 73 65 6e  ndex is represen
145c0 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79  ted in memory by
145d0 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20   an.** instance 
145e0 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
145f0 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a   structure..**.*
14600 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66  * The columns of
14610 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
14620 61 72 65 20 74 6f 20 62 65 20 69 6e 64 65 78 65  are to be indexe
14630 64 20 61 72 65 20 64 65 73 63 72 69 62 65 64 0a  d are described.
14640 2a 2a 20 62 79 20 74 68 65 20 61 69 43 6f 6c 75  ** by the aiColu
14650 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20 74 68  mn[] field of th
14660 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 46  is structure.  F
14670 6f 72 20 65 78 61 6d 70 6c 65 2c 20 73 75 70 70  or example, supp
14680 6f 73 65 0a 2a 2a 20 77 65 20 68 61 76 65 20 74  ose.** we have t
14690 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62  he following tab
146a0 6c 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a 2a 2a  le and index:.**
146b0 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 54  .**     CREATE T
146c0 41 42 4c 45 20 45 78 31 28 63 31 20 69 6e 74 2c  ABLE Ex1(c1 int,
146d0 20 63 32 20 69 6e 74 2c 20 63 33 20 74 65 78 74   c2 int, c3 text
146e0 29 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45  );.**     CREATE
146f0 20 49 4e 44 45 58 20 45 78 32 20 4f 4e 20 45 78   INDEX Ex2 ON Ex
14700 31 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a 20  1(c3,c1);.**.** 
14710 49 6e 20 74 68 65 20 54 61 62 6c 65 20 73 74 72  In the Table str
14720 75 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e  ucture describin
14730 67 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20 62  g Ex1, nCol==3 b
14740 65 63 61 75 73 65 20 74 68 65 72 65 20 61 72 65  ecause there are
14750 0a 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75 6d 6e  .** three column
14760 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20  s in the table. 
14770 20 49 6e 20 74 68 65 20 49 6e 64 65 78 20 73 74   In the Index st
14780 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62 69  ructure describi
14790 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c 75  ng.** Ex2, nColu
147a0 6d 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20 6f 66  mn==2 since 2 of
147b0 20 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73 20 6f   the 3 columns o
147c0 66 20 45 78 31 20 61 72 65 20 69 6e 64 65 78 65  f Ex1 are indexe
147d0 64 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20  d..** The value 
147e0 6f 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73 20 7b  of aiColumn is {
147f0 32 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75 6d 6e  2, 0}.  aiColumn
14800 5b 30 5d 3d 3d 32 20 62 65 63 61 75 73 65 20 74  [0]==2 because t
14810 68 65 0a 2a 2a 20 66 69 72 73 74 20 63 6f 6c 75  he.** first colu
14820 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64  mn to be indexed
14830 20 28 63 33 29 20 68 61 73 20 61 6e 20 69 6e 64   (c3) has an ind
14840 65 78 20 6f 66 20 32 20 69 6e 20 45 78 31 2e 61  ex of 2 in Ex1.a
14850 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73 65  Col[]..** The se
14860 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 62  cond column to b
14870 65 20 69 6e 64 65 78 65 64 20 28 63 31 29 20 68  e indexed (c1) h
14880 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 30  as an index of 0
14890 20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b   in.** Ex1.aCol[
148a0 5d 2c 20 68 65 6e 63 65 20 45 78 32 2e 61 69 43  ], hence Ex2.aiC
148b0 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a  olumn[1]==0..**.
148c0 2a 2a 20 54 68 65 20 49 6e 64 65 78 2e 6f 6e 45  ** The Index.onE
148d0 72 72 6f 72 20 66 69 65 6c 64 20 64 65 74 65 72  rror field deter
148e0 6d 69 6e 65 73 20 77 68 65 74 68 65 72 20 6f 72  mines whether or
148f0 20 6e 6f 74 20 74 68 65 20 69 6e 64 65 78 65 64   not the indexed
14900 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74   columns.** must
14910 20 62 65 20 75 6e 69 71 75 65 20 61 6e 64 20 77   be unique and w
14920 68 61 74 20 74 6f 20 64 6f 20 69 66 20 74 68 65  hat to do if the
14930 79 20 61 72 65 20 6e 6f 74 2e 20 20 57 68 65 6e  y are not.  When
14940 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f   Index.onError=O
14950 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65  E_None,.** it me
14960 61 6e 73 20 74 68 69 73 20 69 73 20 6e 6f 74 20  ans this is not 
14970 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 2e 20  a unique index. 
14980 20 4f 74 68 65 72 77 69 73 65 20 69 74 20 69 73   Otherwise it is
14990 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 0a   a unique index.
149a0 2a 2a 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65  ** and the value
149b0 20 6f 66 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f   of Index.onErro
149c0 72 20 69 6e 64 69 63 61 74 65 20 74 68 65 20 77  r indicate the w
149d0 68 69 63 68 20 63 6f 6e 66 6c 69 63 74 20 72 65  hich conflict re
149e0 73 6f 6c 75 74 69 6f 6e 0a 2a 2a 20 61 6c 67 6f  solution.** algo
149f0 72 69 74 68 6d 20 74 6f 20 65 6d 70 6c 6f 79 20  rithm to employ 
14a00 77 68 65 6e 65 76 65 72 20 61 6e 20 61 74 74 65  whenever an atte
14a10 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20 69  mpt is made to i
14a20 6e 73 65 72 74 20 61 20 6e 6f 6e 2d 75 6e 69 71  nsert a non-uniq
14a30 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a  ue.** element..*
14a40 2a 0a 2a 2a 20 57 68 69 6c 65 20 70 61 72 73 69  *.** While parsi
14a50 6e 67 20 61 20 43 52 45 41 54 45 20 54 41 42 4c  ng a CREATE TABL
14a60 45 20 6f 72 20 43 52 45 41 54 45 20 49 4e 44 45  E or CREATE INDE
14a70 58 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 20 6f  X statement in o
14a80 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65 6e 65 72  rder to.** gener
14a90 61 74 65 20 56 44 42 45 20 63 6f 64 65 20 28 61  ate VDBE code (a
14aa0 73 20 6f 70 70 6f 73 65 64 20 74 6f 20 70 61 72  s opposed to par
14ab0 73 69 6e 67 20 6f 6e 65 20 72 65 61 64 20 66 72  sing one read fr
14ac0 6f 6d 20 61 6e 20 73 71 6c 69 74 65 5f 6d 61 73  om an sqlite_mas
14ad0 74 65 72 0a 2a 2a 20 74 61 62 6c 65 20 61 73 20  ter.** table as 
14ae0 70 61 72 74 20 6f 66 20 70 61 72 73 69 6e 67 20  part of parsing 
14af0 61 6e 20 65 78 69 73 74 69 6e 67 20 64 61 74 61  an existing data
14b00 62 61 73 65 20 73 63 68 65 6d 61 29 2c 20 74 72  base schema), tr
14b10 61 6e 73 69 65 6e 74 20 69 6e 73 74 61 6e 63 65  ansient instance
14b20 73 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72  s.** of this str
14b30 75 63 74 75 72 65 20 6d 61 79 20 62 65 20 63 72  ucture may be cr
14b40 65 61 74 65 64 2e 20 49 6e 20 74 68 69 73 20 63  eated. In this c
14b50 61 73 65 20 74 68 65 20 49 6e 64 65 78 2e 74 6e  ase the Index.tn
14b60 75 6d 20 76 61 72 69 61 62 6c 65 20 69 73 0a 2a  um variable is.*
14b70 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  * used to store 
14b80 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 61  the address of a
14b90 20 56 44 42 45 20 69 6e 73 74 72 75 63 74 69 6f   VDBE instructio
14ba0 6e 2c 20 6e 6f 74 20 61 20 64 61 74 61 62 61 73  n, not a databas
14bb0 65 20 70 61 67 65 0a 2a 2a 20 6e 75 6d 62 65 72  e page.** number
14bc0 20 28 69 74 20 63 61 6e 6e 6f 74 20 2d 20 74 68   (it cannot - th
14bd0 65 20 64 61 74 61 62 61 73 65 20 70 61 67 65 20  e database page 
14be0 69 73 20 6e 6f 74 20 61 6c 6c 6f 63 61 74 65 64  is not allocated
14bf0 20 75 6e 74 69 6c 20 74 68 65 20 56 44 42 45 0a   until the VDBE.
14c00 2a 2a 20 70 72 6f 67 72 61 6d 20 69 73 20 65 78  ** program is ex
14c10 65 63 75 74 65 64 29 2e 20 53 65 65 20 63 6f 6e  ecuted). See con
14c20 76 65 72 74 54 6f 57 69 74 68 6f 75 74 52 6f 77  vertToWithoutRow
14c30 69 64 54 61 62 6c 65 28 29 20 66 6f 72 20 64 65  idTable() for de
14c40 74 61 69 6c 73 2e 0a 2a 2f 0a 73 74 72 75 63 74  tails..*/.struct
14c50 20 49 6e 64 65 78 20 7b 0a 20 20 63 68 61 72 20   Index {.  char 
14c60 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
14c70 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
14c80 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69  his index */.  i
14c90 31 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20 20  16 *aiColumn;   
14ca0 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68          /* Which
14cb0 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65   columns are use
14cc0 64 20 62 79 20 74 68 69 73 20 69 6e 64 65 78 2e  d by this index.
14cd0 20 20 31 73 74 20 69 73 20 30 20 2a 2f 0a 20 20    1st is 0 */.  
14ce0 4c 6f 67 45 73 74 20 2a 61 69 52 6f 77 4c 6f 67  LogEst *aiRowLog
14cf0 45 73 74 3b 20 20 20 20 20 2f 2a 20 46 72 6f 6d  Est;     /* From
14d00 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74 2e 20 72   ANALYZE: Est. r
14d10 6f 77 73 20 73 65 6c 65 63 74 65 64 20 62 79 20  ows selected by 
14d20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  each column */. 
14d30 20 54 61 62 6c 65 20 2a 70 54 61 62 6c 65 3b 20   Table *pTable; 
14d40 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
14d50 20 53 51 4c 20 74 61 62 6c 65 20 62 65 69 6e 67   SQL table being
14d60 20 69 6e 64 65 78 65 64 20 2a 2f 0a 20 20 63 68   indexed */.  ch
14d70 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20  ar *zColAff;    
14d80 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67         /* String
14d90 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66   defining the af
14da0 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63  finity of each c
14db0 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78  olumn */.  Index
14dc0 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20   *pNext;        
14dd0 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20      /* The next 
14de0 69 6e 64 65 78 20 61 73 73 6f 63 69 61 74 65 64  index associated
14df0 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 74   with the same t
14e00 61 62 6c 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61  able */.  Schema
14e10 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20   *pSchema;      
14e20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e     /* Schema con
14e30 74 61 69 6e 69 6e 67 20 74 68 69 73 20 69 6e 64  taining this ind
14e40 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72  ex */.  u8 *aSor
14e50 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20  tOrder;         
14e60 20 2f 2a 20 66 6f 72 20 65 61 63 68 20 63 6f 6c   /* for each col
14e70 75 6d 6e 3a 20 54 72 75 65 3d 3d 44 45 53 43 2c  umn: True==DESC,
14e80 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a 20   False==ASC */. 
14e90 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a 61 7a   const char **az
14ea0 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 41 72 72  Coll;     /* Arr
14eb0 61 79 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20  ay of collation 
14ec0 73 65 71 75 65 6e 63 65 20 6e 61 6d 65 73 20 66  sequence names f
14ed0 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78  or index */.  Ex
14ee0 70 72 20 2a 70 50 61 72 74 49 64 78 57 68 65 72  pr *pPartIdxWher
14ef0 65 3b 20 20 20 20 20 2f 2a 20 57 48 45 52 45 20  e;     /* WHERE 
14f00 63 6c 61 75 73 65 20 66 6f 72 20 70 61 72 74 69  clause for parti
14f10 61 6c 20 69 6e 64 69 63 65 73 20 2a 2f 0a 20 20  al indices */.  
14f20 45 78 70 72 4c 69 73 74 20 2a 61 43 6f 6c 45 78  ExprList *aColEx
14f30 70 72 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75  pr;      /* Colu
14f40 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a  mn expressions *
14f50 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20  /.  int tnum;   
14f60 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
14f70 44 42 20 50 61 67 65 20 63 6f 6e 74 61 69 6e 69  DB Page containi
14f80 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68 69 73 20  ng root of this 
14f90 69 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f 67 45 73  index */.  LogEs
14fa0 74 20 73 7a 49 64 78 52 6f 77 3b 20 20 20 20 20  t szIdxRow;     
14fb0 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64      /* Estimated
14fc0 20 61 76 65 72 61 67 65 20 72 6f 77 20 73 69 7a   average row siz
14fd0 65 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20  e in bytes */.  
14fe0 75 31 36 20 6e 4b 65 79 43 6f 6c 3b 20 20 20 20  u16 nKeyCol;    
14ff0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
15000 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f  er of columns fo
15010 72 6d 69 6e 67 20 74 68 65 20 6b 65 79 20 2a 2f  rming the key */
15020 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20  .  u16 nColumn; 
15030 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
15040 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
15050 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 69   stored in the i
15060 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 6f 6e 45  ndex */.  u8 onE
15070 72 72 6f 72 3b 20 20 20 20 20 20 20 20 20 20 20  rror;           
15080 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c 20     /* OE_Abort, 
15090 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f 52 65  OE_Ignore, OE_Re
150a0 70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e  place, or OE_Non
150b0 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  e */.  unsigned 
150c0 69 64 78 54 79 70 65 3a 32 3b 20 20 20 20 20 20  idxType:2;      
150d0 2f 2a 20 31 3d 3d 55 4e 49 51 55 45 2c 20 32 3d  /* 1==UNIQUE, 2=
150e0 3d 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 30 3d  =PRIMARY KEY, 0=
150f0 3d 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f  =CREATE INDEX */
15100 0a 20 20 75 6e 73 69 67 6e 65 64 20 62 55 6e 6f  .  unsigned bUno
15110 72 64 65 72 65 64 3a 31 3b 20 20 20 2f 2a 20 55  rdered:1;   /* U
15120 73 65 20 74 68 69 73 20 69 6e 64 65 78 20 66 6f  se this index fo
15130 72 20 3d 3d 20 6f 72 20 49 4e 20 71 75 65 72 69  r == or IN queri
15140 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e 73  es only */.  uns
15150 69 67 6e 65 64 20 75 6e 69 71 4e 6f 74 4e 75 6c  igned uniqNotNul
15160 6c 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66  l:1;  /* True if
15170 20 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54 20   UNIQUE and NOT 
15180 4e 55 4c 4c 20 66 6f 72 20 61 6c 6c 20 63 6f 6c  NULL for all col
15190 75 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  umns */.  unsign
151a0 65 64 20 69 73 52 65 73 69 7a 65 64 3a 31 3b 20  ed isResized:1; 
151b0 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65     /* True if re
151c0 73 69 7a 65 49 6e 64 65 78 4f 62 6a 65 63 74 28  sizeIndexObject(
151d0 29 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65  ) has been calle
151e0 64 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  d */.  unsigned 
151f0 69 73 43 6f 76 65 72 69 6e 67 3a 31 3b 20 20 20  isCovering:1;   
15200 2f 2a 20 54 72 75 65 20 69 66 20 74 68 69 73 20  /* True if this 
15210 69 73 20 61 20 63 6f 76 65 72 69 6e 67 20 69 6e  is a covering in
15220 64 65 78 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  dex */.  unsigne
15230 64 20 6e 6f 53 6b 69 70 53 63 61 6e 3a 31 3b 20  d noSkipScan:1; 
15240 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 74 72 79 20    /* Do not try 
15250 74 6f 20 75 73 65 20 73 6b 69 70 2d 73 63 61 6e  to use skip-scan
15260 20 69 66 20 74 72 75 65 20 2a 2f 0a 23 69 66 64   if true */.#ifd
15270 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
15280 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a  _STAT3_OR_STAT4.
15290 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 3b 20 20    int nSample;  
152a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
152b0 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73  mber of elements
152c0 20 69 6e 20 61 53 61 6d 70 6c 65 5b 5d 20 2a 2f   in aSample[] */
152d0 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 43 6f  .  int nSampleCo
152e0 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53  l;          /* S
152f0 69 7a 65 20 6f 66 20 49 6e 64 65 78 53 61 6d 70  ize of IndexSamp
15300 6c 65 2e 61 6e 45 71 5b 5d 20 61 6e 64 20 73 6f  le.anEq[] and so
15310 20 6f 6e 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74   on */.  tRowcnt
15320 20 2a 61 41 76 67 45 71 3b 20 20 20 20 20 20 20   *aAvgEq;       
15330 20 20 2f 2a 20 41 76 65 72 61 67 65 20 6e 45 71    /* Average nEq
15340 20 76 61 6c 75 65 73 20 66 6f 72 20 6b 65 79 73   values for keys
15350 20 6e 6f 74 20 69 6e 20 61 53 61 6d 70 6c 65 20   not in aSample 
15360 2a 2f 0a 20 20 49 6e 64 65 78 53 61 6d 70 6c 65  */.  IndexSample
15370 20 2a 61 53 61 6d 70 6c 65 3b 20 20 20 20 2f 2a   *aSample;    /*
15380 20 53 61 6d 70 6c 65 73 20 6f 66 20 74 68 65 20   Samples of the 
15390 6c 65 66 74 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f  left-most key */
153a0 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 69 52 6f  .  tRowcnt *aiRo
153b0 77 45 73 74 3b 20 20 20 20 20 20 20 2f 2a 20 4e  wEst;       /* N
153c0 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20 73  on-logarithmic s
153d0 74 61 74 31 20 64 61 74 61 20 66 6f 72 20 74 68  tat1 data for th
153e0 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 74 52  is index */.  tR
153f0 6f 77 63 6e 74 20 6e 52 6f 77 45 73 74 30 3b 20  owcnt nRowEst0; 
15400 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f         /* Non-lo
15410 67 61 72 69 74 68 6d 69 63 20 6e 75 6d 62 65 72  garithmic number
15420 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20   of rows in the 
15430 69 6e 64 65 78 20 2a 2f 0a 23 65 6e 64 69 66 0a  index */.#endif.
15440 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  };../*.** Allowe
15450 64 20 76 61 6c 75 65 73 20 66 6f 72 20 49 6e 64  d values for Ind
15460 65 78 2e 69 64 78 54 79 70 65 0a 2a 2f 0a 23 64  ex.idxType.*/.#d
15470 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58  efine SQLITE_IDX
15480 54 59 50 45 5f 41 50 50 44 45 46 20 20 20 20 20  TYPE_APPDEF     
15490 20 30 20 20 20 2f 2a 20 43 72 65 61 74 65 64 20   0   /* Created 
154a0 75 73 69 6e 67 20 43 52 45 41 54 45 20 49 4e 44  using CREATE IND
154b0 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  EX */.#define SQ
154c0 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 55 4e 49  LITE_IDXTYPE_UNI
154d0 51 55 45 20 20 20 20 20 20 31 20 20 20 2f 2a 20  QUE      1   /* 
154e0 49 6d 70 6c 65 6d 65 6e 74 73 20 61 20 55 4e 49  Implements a UNI
154f0 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a  QUE constraint *
15500 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
15510 5f 49 44 58 54 59 50 45 5f 50 52 49 4d 41 52 59  _IDXTYPE_PRIMARY
15520 4b 45 59 20 20 32 20 20 20 2f 2a 20 49 73 20 74  KEY  2   /* Is t
15530 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 66  he PRIMARY KEY f
15540 6f 72 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a  or the table */.
15550 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20  ./* Return true 
15560 69 66 20 69 6e 64 65 78 20 58 20 69 73 20 61 20  if index X is a 
15570 50 52 49 4d 41 52 59 20 4b 45 59 20 69 6e 64 65  PRIMARY KEY inde
15580 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50  x */.#define IsP
15590 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 58  rimaryKeyIndex(X
155a0 29 20 20 28 28 58 29 2d 3e 69 64 78 54 79 70 65  )  ((X)->idxType
155b0 3d 3d 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45  ==SQLITE_IDXTYPE
155c0 5f 50 52 49 4d 41 52 59 4b 45 59 29 0a 0a 2f 2a  _PRIMARYKEY)../*
155d0 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20   Return true if 
155e0 69 6e 64 65 78 20 58 20 69 73 20 61 20 55 4e 49  index X is a UNI
155f0 51 55 45 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65  QUE index */.#de
15600 66 69 6e 65 20 49 73 55 6e 69 71 75 65 49 6e 64  fine IsUniqueInd
15610 65 78 28 58 29 20 20 20 20 20 20 28 28 58 29 2d  ex(X)      ((X)-
15620 3e 6f 6e 45 72 72 6f 72 21 3d 4f 45 5f 4e 6f 6e  >onError!=OE_Non
15630 65 29 0a 0a 2f 2a 20 54 68 65 20 49 6e 64 65 78  e)../* The Index
15640 2e 61 69 43 6f 6c 75 6d 6e 5b 5d 20 76 61 6c 75  .aiColumn[] valu
15650 65 73 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20  es are normally 
15660 70 6f 73 69 74 69 76 65 20 69 6e 74 65 67 65 72  positive integer
15670 2e 20 20 42 75 74 0a 2a 2a 20 74 68 65 72 65 20  .  But.** there 
15680 61 72 65 20 73 6f 6d 65 20 6e 65 67 61 74 69 76  are some negativ
15690 65 20 76 61 6c 75 65 73 20 74 68 61 74 20 68 61  e values that ha
156a0 76 65 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69  ve special meani
156b0 6e 67 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 58  ng:.*/.#define X
156c0 4e 5f 52 4f 57 49 44 20 20 20 20 20 28 2d 31 29  N_ROWID     (-1)
156d0 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 65 64 20       /* Indexed 
156e0 63 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20 72 6f  column is the ro
156f0 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 58  wid */.#define X
15700 4e 5f 45 58 50 52 20 20 20 20 20 20 28 2d 32 29  N_EXPR      (-2)
15710 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 65 64 20       /* Indexed 
15720 63 6f 6c 75 6d 6e 20 69 73 20 61 6e 20 65 78 70  column is an exp
15730 72 65 73 73 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a  ression */../*.*
15740 2a 20 45 61 63 68 20 73 61 6d 70 6c 65 20 73 74  * Each sample st
15750 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69  ored in the sqli
15760 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65 20 69  te_stat3 table i
15770 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e  s represented in
15780 20 6d 65 6d 6f 72 79 0a 2a 2a 20 75 73 69 6e 67   memory.** using
15790 20 61 20 73 74 72 75 63 74 75 72 65 20 6f 66 20   a structure of 
157a0 74 68 69 73 20 74 79 70 65 2e 20 20 53 65 65 20  this type.  See 
157b0 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 74  documentation at
157c0 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65 0a   the top of the.
157d0 2a 2a 20 61 6e 61 6c 79 7a 65 2e 63 20 73 6f 75  ** analyze.c sou
157e0 72 63 65 20 66 69 6c 65 20 66 6f 72 20 61 64 64  rce file for add
157f0 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
15800 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49  ion..*/.struct I
15810 6e 64 65 78 53 61 6d 70 6c 65 20 7b 0a 20 20 76  ndexSample {.  v
15820 6f 69 64 20 2a 70 3b 20 20 20 20 20 20 20 20 20  oid *p;         
15830 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 73   /* Pointer to s
15840 61 6d 70 6c 65 64 20 72 65 63 6f 72 64 20 2a 2f  ampled record */
15850 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20  .  int n;       
15860 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
15870 72 65 63 6f 72 64 20 69 6e 20 62 79 74 65 73 20  record in bytes 
15880 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e  */.  tRowcnt *an
15890 45 71 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e  Eq;    /* Est. n
158a0 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 77 68  umber of rows wh
158b0 65 72 65 20 74 68 65 20 6b 65 79 20 65 71 75 61  ere the key equa
158c0 6c 73 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a  ls this sample *
158d0 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 4c  /.  tRowcnt *anL
158e0 74 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75  t;    /* Est. nu
158f0 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65  mber of rows whe
15900 72 65 20 6b 65 79 20 69 73 20 6c 65 73 73 20 74  re key is less t
15910 68 61 6e 20 74 68 69 73 20 73 61 6d 70 6c 65 20  han this sample 
15920 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e  */.  tRowcnt *an
15930 44 4c 74 3b 20 20 20 2f 2a 20 45 73 74 2e 20 6e  DLt;   /* Est. n
15940 75 6d 62 65 72 20 6f 66 20 64 69 73 74 69 6e 63  umber of distinc
15950 74 20 6b 65 79 73 20 6c 65 73 73 20 74 68 61 6e  t keys less than
15960 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a   this sample */.
15970 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 74  };../*.** Each t
15980 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f 75 74 20  oken coming out 
15990 6f 66 20 74 68 65 20 6c 65 78 65 72 20 69 73 20  of the lexer is 
159a0 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a  an instance of.*
159b0 2a 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  * this structure
159c0 2e 20 20 54 6f 6b 65 6e 73 20 61 72 65 20 61 6c  .  Tokens are al
159d0 73 6f 20 75 73 65 64 20 61 73 20 70 61 72 74 20  so used as part 
159e0 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  of an expression
159f0 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 69 66 20  ..**.** Note if 
15a00 54 6f 6b 65 6e 2e 7a 3d 3d 30 20 74 68 65 6e 20  Token.z==0 then 
15a10 54 6f 6b 65 6e 2e 64 79 6e 20 61 6e 64 20 54 6f  Token.dyn and To
15a20 6b 65 6e 2e 6e 20 61 72 65 20 75 6e 64 65 66 69  ken.n are undefi
15a30 6e 65 64 20 61 6e 64 0a 2a 2a 20 6d 61 79 20 63  ned and.** may c
15a40 6f 6e 74 61 69 6e 20 72 61 6e 64 6f 6d 20 76 61  ontain random va
15a50 6c 75 65 73 2e 20 20 44 6f 20 6e 6f 74 20 6d 61  lues.  Do not ma
15a60 6b 65 20 61 6e 79 20 61 73 73 75 6d 70 74 69 6f  ke any assumptio
15a70 6e 73 20 61 62 6f 75 74 20 54 6f 6b 65 6e 2e 64  ns about Token.d
15a80 79 6e 0a 2a 2a 20 61 6e 64 20 54 6f 6b 65 6e 2e  yn.** and Token.
15a90 6e 20 77 68 65 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d  n when Token.z==
15aa0 30 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 6f 6b  0..*/.struct Tok
15ab0 65 6e 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61  en {.  const cha
15ac0 72 20 2a 7a 3b 20 20 20 20 20 2f 2a 20 54 65 78  r *z;     /* Tex
15ad0 74 20 6f 66 20 74 68 65 20 74 6f 6b 65 6e 2e 20  t of the token. 
15ae0 20 4e 6f 74 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e   Not NULL-termin
15af0 61 74 65 64 21 20 2a 2f 0a 20 20 75 6e 73 69 67  ated! */.  unsig
15b00 6e 65 64 20 69 6e 74 20 6e 3b 20 20 20 20 2f 2a  ned int n;    /*
15b10 20 4e 75 6d 62 65 72 20 6f 66 20 63 68 61 72 61   Number of chara
15b20 63 74 65 72 73 20 69 6e 20 74 68 69 73 20 74 6f  cters in this to
15b30 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ken */.};../*.**
15b40 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
15b50 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 63  this structure c
15b60 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74  ontains informat
15b70 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20 67 65  ion needed to ge
15b80 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66  nerate.** code f
15b90 6f 72 20 61 20 53 45 4c 45 43 54 20 74 68 61 74  or a SELECT that
15ba0 20 63 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67   contains aggreg
15bb0 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a  ate functions..*
15bc0 2a 0a 2a 2a 20 49 66 20 45 78 70 72 2e 6f 70 3d  *.** If Expr.op=
15bd0 3d 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f  =TK_AGG_COLUMN o
15be0 72 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f  r TK_AGG_FUNCTIO
15bf0 4e 20 74 68 65 6e 20 45 78 70 72 2e 70 41 67 67  N then Expr.pAgg
15c00 49 6e 66 6f 20 69 73 20 61 0a 2a 2a 20 70 6f 69  Info is a.** poi
15c10 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72  nter to this str
15c20 75 63 74 75 72 65 2e 20 20 54 68 65 20 45 78 70  ucture.  The Exp
15c30 72 2e 69 43 6f 6c 75 6d 6e 20 66 69 65 6c 64 20  r.iColumn field 
15c40 69 73 20 74 68 65 20 69 6e 64 65 78 20 69 6e 0a  is the index in.
15c50 2a 2a 20 41 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b  ** AggInfo.aCol[
15c60 5d 20 6f 72 20 41 67 67 49 6e 66 6f 2e 61 46 75  ] or AggInfo.aFu
15c70 6e 63 5b 5d 20 6f 66 20 69 6e 66 6f 72 6d 61 74  nc[] of informat
15c80 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20 67 65  ion needed to ge
15c90 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66  nerate.** code f
15ca0 6f 72 20 74 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a  or that node..**
15cb0 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 70 47 72 6f  .** AggInfo.pGro
15cc0 75 70 42 79 20 61 6e 64 20 41 67 67 49 6e 66 6f  upBy and AggInfo
15cd0 2e 61 46 75 6e 63 2e 70 45 78 70 72 20 70 6f 69  .aFunc.pExpr poi
15ce0 6e 74 20 74 6f 20 66 69 65 6c 64 73 20 77 69 74  nt to fields wit
15cf0 68 69 6e 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69  hin the.** origi
15d00 6e 61 6c 20 53 65 6c 65 63 74 20 73 74 72 75 63  nal Select struc
15d10 74 75 72 65 20 74 68 61 74 20 64 65 73 63 72 69  ture that descri
15d20 62 65 73 20 74 68 65 20 53 45 4c 45 43 54 20 73  bes the SELECT s
15d30 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 73 65  tatement.  These
15d40 0a 2a 2a 20 66 69 65 6c 64 73 20 64 6f 20 6e 6f  .** fields do no
15d50 74 20 6e 65 65 64 20 74 6f 20 62 65 20 66 72 65  t need to be fre
15d60 65 64 20 77 68 65 6e 20 64 65 61 6c 6c 6f 63 61  ed when dealloca
15d70 74 69 6e 67 20 74 68 65 20 41 67 67 49 6e 66 6f  ting the AggInfo
15d80 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73   structure..*/.s
15d90 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20 7b 0a  truct AggInfo {.
15da0 20 20 75 38 20 64 69 72 65 63 74 4d 6f 64 65 3b    u8 directMode;
15db0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 69 72            /* Dir
15dc0 65 63 74 20 72 65 6e 64 65 72 69 6e 67 20 6d 6f  ect rendering mo
15dd0 64 65 20 6d 65 61 6e 73 20 74 61 6b 65 20 64 61  de means take da
15de0 74 61 20 64 69 72 65 63 74 6c 79 0a 20 20 20 20  ta directly.    
15df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e00 20 20 20 20 20 20 2a 2a 20 66 72 6f 6d 20 73 6f        ** from so
15e10 75 72 63 65 20 74 61 62 6c 65 73 20 72 61 74 68  urce tables rath
15e20 65 72 20 74 68 61 6e 20 66 72 6f 6d 20 61 63 63  er than from acc
15e30 75 6d 75 6c 61 74 6f 72 73 20 2a 2f 0a 20 20 75  umulators */.  u
15e40 38 20 75 73 65 53 6f 72 74 69 6e 67 49 64 78 3b  8 useSortingIdx;
15e50 20 20 20 20 20 20 20 2f 2a 20 49 6e 20 64 69 72         /* In dir
15e60 65 63 74 20 6d 6f 64 65 2c 20 72 65 66 65 72 65  ect mode, refere
15e70 6e 63 65 20 74 68 65 20 73 6f 72 74 69 6e 67 20  nce the sorting 
15e80 69 6e 64 65 78 20 72 61 74 68 65 72 0a 20 20 20  index rather.   
15e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ea0 20 20 20 20 20 20 20 2a 2a 20 74 68 61 6e 20 74         ** than t
15eb0 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20  he source table 
15ec0 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67  */.  int sorting
15ed0 49 64 78 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Idx;         /* 
15ee0 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66  Cursor number of
15ef0 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64   the sorting ind
15f00 65 78 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74  ex */.  int sort
15f10 69 6e 67 49 64 78 50 54 61 62 3b 20 20 20 20 20  ingIdxPTab;     
15f20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72  /* Cursor number
15f30 20 6f 66 20 70 73 65 75 64 6f 2d 74 61 62 6c 65   of pseudo-table
15f40 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 6f 72 74 69   */.  int nSorti
15f50 6e 67 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a  ngColumn;     /*
15f60 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
15f70 6e 73 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e  ns in the sortin
15f80 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74  g index */.  int
15f90 20 6d 6e 52 65 67 2c 20 6d 78 52 65 67 3b 20 20   mnReg, mxReg;  
15fa0 20 20 20 20 20 2f 2a 20 52 61 6e 67 65 20 6f 66       /* Range of
15fb0 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c 6f 63   registers alloc
15fc0 61 74 65 64 20 66 6f 72 20 61 43 6f 6c 20 61 6e  ated for aCol an
15fd0 64 20 61 46 75 6e 63 20 2a 2f 0a 20 20 45 78 70  d aFunc */.  Exp
15fe0 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b  rList *pGroupBy;
15ff0 20 20 20 20 20 2f 2a 20 54 68 65 20 67 72 6f 75       /* The grou
16000 70 20 62 79 20 63 6c 61 75 73 65 20 2a 2f 0a 20  p by clause */. 
16010 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 5f   struct AggInfo_
16020 63 6f 6c 20 7b 20 20 20 20 2f 2a 20 46 6f 72 20  col {    /* For 
16030 65 61 63 68 20 63 6f 6c 75 6d 6e 20 75 73 65 64  each column used
16040 20 69 6e 20 73 6f 75 72 63 65 20 74 61 62 6c 65   in source table
16050 73 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a  s */.    Table *
16060 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20  pTab;           
16070 20 20 2f 2a 20 53 6f 75 72 63 65 20 74 61 62 6c    /* Source tabl
16080 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 54 61  e */.    int iTa
16090 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ble;            
160a0 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62    /* Cursor numb
160b0 65 72 20 6f 66 20 74 68 65 20 73 6f 75 72 63 65  er of the source
160c0 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e   table */.    in
160d0 74 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  t iColumn;      
160e0 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e         /* Column
160f0 20 6e 75 6d 62 65 72 20 77 69 74 68 69 6e 20 74   number within t
16100 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20  he source table 
16110 2a 2f 0a 20 20 20 20 69 6e 74 20 69 53 6f 72 74  */.    int iSort
16120 65 72 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20  erColumn;       
16130 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  /* Column number
16140 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20   in the sorting 
16150 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 69 6e 74  index */.    int
16160 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20   iMem;          
16170 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20        /* Memory 
16180 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61 63  location that ac
16190 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74 6f  ts as accumulato
161a0 72 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70  r */.    Expr *p
161b0 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20  Expr;           
161c0 20 20 2f 2a 20 54 68 65 20 6f 72 69 67 69 6e 61    /* The origina
161d0 6c 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a  l expression */.
161e0 20 20 7d 20 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74    } *aCol;.  int
161f0 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20   nColumn;       
16200 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
16210 66 20 75 73 65 64 20 65 6e 74 72 69 65 73 20 69  f used entries i
16220 6e 20 61 43 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e  n aCol[] */.  in
16230 74 20 6e 41 63 63 75 6d 75 6c 61 74 6f 72 3b 20  t nAccumulator; 
16240 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
16250 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20  of columns that 
16260 73 68 6f 77 20 74 68 72 6f 75 67 68 20 74 6f 20  show through to 
16270 74 68 65 20 6f 75 74 70 75 74 2e 0a 20 20 20 20  the output..    
16280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16290 20 20 20 20 20 20 2a 2a 20 41 64 64 69 74 69 6f        ** Additio
162a0 6e 61 6c 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20  nal columns are 
162b0 75 73 65 64 20 6f 6e 6c 79 20 61 73 20 70 61 72  used only as par
162c0 61 6d 65 74 65 72 73 20 74 6f 0a 20 20 20 20 20  ameters to.     
162d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162e0 20 20 20 20 20 2a 2a 20 61 67 67 72 65 67 61 74       ** aggregat
162f0 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20  e functions */. 
16300 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 5f   struct AggInfo_
16310 66 75 6e 63 20 7b 20 20 20 2f 2a 20 46 6f 72 20  func {   /* For 
16320 65 61 63 68 20 61 67 67 72 65 67 61 74 65 20 66  each aggregate f
16330 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 45  unction */.    E
16340 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20  xpr *pExpr;     
16350 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65          /* Expre
16360 73 73 69 6f 6e 20 65 6e 63 6f 64 69 6e 67 20 74  ssion encoding t
16370 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  he function */. 
16380 20 20 20 46 75 6e 63 44 65 66 20 2a 70 46 75 6e     FuncDef *pFun
16390 63 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  c;          /* T
163a0 68 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  he aggregate fun
163b0 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61  ction implementa
163c0 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20  tion */.    int 
163d0 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20  iMem;           
163e0 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c       /* Memory l
163f0 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74  ocation that act
16400 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72  s as accumulator
16410 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 44 69 73   */.    int iDis
16420 74 69 6e 63 74 3b 20 20 20 20 20 20 20 20 20 20  tinct;          
16430 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 20 74 61   /* Ephemeral ta
16440 62 6c 65 20 75 73 65 64 20 74 6f 20 65 6e 66 6f  ble used to enfo
16450 72 63 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a  rce DISTINCT */.
16460 20 20 7d 20 2a 61 46 75 6e 63 3b 0a 20 20 69 6e    } *aFunc;.  in
16470 74 20 6e 46 75 6e 63 3b 20 20 20 20 20 20 20 20  t nFunc;        
16480 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
16490 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 46  of entries in aF
164a0 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  unc[] */.};../*.
164b0 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70 65 20  ** The datatype 
164c0 79 6e 56 61 72 20 69 73 20 61 20 73 69 67 6e 65  ynVar is a signe
164d0 64 20 69 6e 74 65 67 65 72 2c 20 65 69 74 68 65  d integer, eithe
164e0 72 20 31 36 2d 62 69 74 20 6f 72 20 33 32 2d 62  r 16-bit or 32-b
164f0 69 74 2e 0a 2a 2a 20 55 73 75 61 6c 6c 79 20 69  it..** Usually i
16500 74 20 69 73 20 31 36 2d 62 69 74 73 2e 20 20 42  t is 16-bits.  B
16510 75 74 20 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  ut if SQLITE_MAX
16520 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52  _VARIABLE_NUMBER
16530 20 69 73 20 67 72 65 61 74 65 72 0a 2a 2a 20 74   is greater.** t
16540 68 61 6e 20 33 32 37 36 37 20 77 65 20 68 61 76  han 32767 we hav
16550 65 20 74 6f 20 6d 61 6b 65 20 69 74 20 33 32 2d  e to make it 32-
16560 62 69 74 2e 20 20 31 36 2d 62 69 74 20 69 73 20  bit.  16-bit is 
16570 70 72 65 66 65 72 72 65 64 20 62 65 63 61 75 73  preferred becaus
16580 65 0a 2a 2a 20 69 74 20 75 73 65 73 20 6c 65 73  e.** it uses les
16590 73 20 6d 65 6d 6f 72 79 20 69 6e 20 74 68 65 20  s memory in the 
165a0 45 78 70 72 20 6f 62 6a 65 63 74 2c 20 77 68 69  Expr object, whi
165b0 63 68 20 69 73 20 61 20 62 69 67 20 6d 65 6d 6f  ch is a big memo
165c0 72 79 20 75 73 65 72 0a 2a 2a 20 69 6e 20 73 79  ry user.** in sy
165d0 73 74 65 6d 73 20 77 69 74 68 20 6c 6f 74 73 20  stems with lots 
165e0 6f 66 20 70 72 65 70 61 72 65 64 20 73 74 61 74  of prepared stat
165f0 65 6d 65 6e 74 73 2e 20 20 41 6e 64 20 66 65 77  ements.  And few
16600 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a   applications.**
16610 20 6e 65 65 64 20 6d 6f 72 65 20 74 68 61 6e 20   need more than 
16620 61 62 6f 75 74 20 31 30 20 6f 72 20 32 30 20 76  about 10 or 20 v
16630 61 72 69 61 62 6c 65 73 2e 20 20 42 75 74 20 73  ariables.  But s
16640 6f 6d 65 20 65 78 74 72 65 6d 65 20 75 73 65 72  ome extreme user
16650 73 20 77 61 6e 74 0a 2a 2a 20 74 6f 20 68 61 76  s want.** to hav
16660 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  e prepared state
16670 6d 65 6e 74 73 20 77 69 74 68 20 6f 76 65 72 20  ments with over 
16680 33 32 37 36 37 20 76 61 72 69 61 62 6c 65 73 2c  32767 variables,
16690 20 61 6e 64 20 66 6f 72 20 74 68 65 6d 0a 2a 2a   and for them.**
166a0 20 74 68 65 20 6f 70 74 69 6f 6e 20 69 73 20 61   the option is a
166b0 76 61 69 6c 61 62 6c 65 20 28 61 74 20 63 6f 6d  vailable (at com
166c0 70 69 6c 65 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23  pile-time)..*/.#
166d0 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41  if SQLITE_MAX_VA
166e0 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33  RIABLE_NUMBER<=3
166f0 32 37 36 37 0a 74 79 70 65 64 65 66 20 69 31 36  2767.typedef i16
16700 20 79 6e 56 61 72 3b 0a 23 65 6c 73 65 0a 74 79   ynVar;.#else.ty
16710 70 65 64 65 66 20 69 6e 74 20 79 6e 56 61 72 3b  pedef int ynVar;
16720 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45  .#endif../*.** E
16730 61 63 68 20 6e 6f 64 65 20 6f 66 20 61 6e 20 65  ach node of an e
16740 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65  xpression in the
16750 20 70 61 72 73 65 20 74 72 65 65 20 69 73 20 61   parse tree is a
16760 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66  n instance.** of
16770 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
16780 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 6f 70 20 69  .**.** Expr.op i
16790 73 20 74 68 65 20 6f 70 63 6f 64 65 2e 20 54 68  s the opcode. Th
167a0 65 20 69 6e 74 65 67 65 72 20 70 61 72 73 65 72  e integer parser
167b0 20 74 6f 6b 65 6e 20 63 6f 64 65 73 20 61 72 65   token codes are
167c0 20 72 65 75 73 65 64 0a 2a 2a 20 61 73 20 6f 70   reused.** as op
167d0 63 6f 64 65 73 20 68 65 72 65 2e 20 46 6f 72 20  codes here. For 
167e0 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 70 61 72  example, the par
167f0 73 65 72 20 64 65 66 69 6e 65 73 20 54 4b 5f 47  ser defines TK_G
16800 45 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67  E to be an integ
16810 65 72 0a 2a 2a 20 63 6f 64 65 20 72 65 70 72 65  er.** code repre
16820 73 65 6e 74 69 6e 67 20 74 68 65 20 22 3e 3d 22  senting the ">="
16830 20 6f 70 65 72 61 74 6f 72 2e 20 54 68 69 73 20   operator. This 
16840 73 61 6d 65 20 69 6e 74 65 67 65 72 20 63 6f 64  same integer cod
16850 65 20 69 73 20 72 65 75 73 65 64 0a 2a 2a 20 74  e is reused.** t
16860 6f 20 72 65 70 72 65 73 65 6e 74 20 74 68 65 20  o represent the 
16870 67 72 65 61 74 65 72 2d 74 68 61 6e 2d 6f 72 2d  greater-than-or-
16880 65 71 75 61 6c 2d 74 6f 20 6f 70 65 72 61 74 6f  equal-to operato
16890 72 20 69 6e 20 74 68 65 20 65 78 70 72 65 73 73  r in the express
168a0 69 6f 6e 0a 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a  ion.** tree..**.
168b0 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73  ** If the expres
168c0 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 6c  sion is an SQL l
168d0 69 74 65 72 61 6c 20 28 54 4b 5f 49 4e 54 45 47  iteral (TK_INTEG
168e0 45 52 2c 20 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b  ER, TK_FLOAT, TK
168f0 5f 42 4c 4f 42 2c 0a 2a 2a 20 6f 72 20 54 4b 5f  _BLOB,.** or TK_
16900 53 54 52 49 4e 47 29 2c 20 74 68 65 6e 20 45 78  STRING), then Ex
16910 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e  pr.token contain
16920 73 20 74 68 65 20 74 65 78 74 20 6f 66 20 74 68  s the text of th
16930 65 20 53 51 4c 20 6c 69 74 65 72 61 6c 2e 20 49  e SQL literal. I
16940 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65 73 73  f.** the express
16950 69 6f 6e 20 69 73 20 61 20 76 61 72 69 61 62 6c  ion is a variabl
16960 65 20 28 54 4b 5f 56 41 52 49 41 42 4c 45 29 2c  e (TK_VARIABLE),
16970 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e   then Expr.token
16980 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 0a 2a 2a   contains the.**
16990 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 2e 20   variable name. 
169a0 46 69 6e 61 6c 6c 79 2c 20 69 66 20 74 68 65 20  Finally, if the 
169b0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
169c0 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 28 54   SQL function (T
169d0 4b 5f 46 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20  K_FUNCTION),.** 
169e0 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20  then Expr.token 
169f0 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6e 61 6d  contains the nam
16a00 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  e of the functio
16a10 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70 52  n..**.** Expr.pR
16a20 69 67 68 74 20 61 6e 64 20 45 78 70 72 2e 70 4c  ight and Expr.pL
16a30 65 66 74 20 61 72 65 20 74 68 65 20 6c 65 66 74  eft are the left
16a40 20 61 6e 64 20 72 69 67 68 74 20 73 75 62 65 78   and right subex
16a50 70 72 65 73 73 69 6f 6e 73 20 6f 66 20 61 0a 2a  pressions of a.*
16a60 2a 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f  * binary operato
16a70 72 2e 20 45 69 74 68 65 72 20 6f 72 20 62 6f 74  r. Either or bot
16a80 68 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a  h may be NULL..*
16a90 2a 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 4c 69 73  *.** Expr.x.pLis
16aa0 74 20 69 73 20 61 20 6c 69 73 74 20 6f 66 20 61  t is a list of a
16ab0 72 67 75 6d 65 6e 74 73 20 69 66 20 74 68 65 20  rguments if the 
16ac0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
16ad0 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a   SQL function,.*
16ae0 2a 20 61 20 43 41 53 45 20 65 78 70 72 65 73 73  * a CASE express
16af0 69 6f 6e 20 6f 72 20 61 6e 20 49 4e 20 65 78 70  ion or an IN exp
16b00 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66  ression of the f
16b10 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 3c  orm "<lhs> IN (<
16b20 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a  y>, <z>...)"..**
16b30 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20   Expr.x.pSelect 
16b40 69 73 20 75 73 65 64 20 69 66 20 74 68 65 20 65  is used if the e
16b50 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73  xpression is a s
16b60 75 62 2d 73 65 6c 65 63 74 20 6f 72 20 61 6e 20  ub-select or an 
16b70 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a  expression of.**
16b80 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e   the form "<lhs>
16b90 20 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29   IN (SELECT ...)
16ba0 22 2e 20 49 66 20 74 68 65 20 45 50 5f 78 49 73  ". If the EP_xIs
16bb0 53 65 6c 65 63 74 20 62 69 74 20 69 73 20 73 65  Select bit is se
16bc0 74 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72  t in the.** Expr
16bd0 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65  .flags mask, the
16be0 6e 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74  n Expr.x.pSelect
16bf0 20 69 73 20 76 61 6c 69 64 2e 20 4f 74 68 65 72   is valid. Other
16c00 77 69 73 65 2c 20 45 78 70 72 2e 78 2e 70 4c 69  wise, Expr.x.pLi
16c10 73 74 20 69 73 0a 2a 2a 20 76 61 6c 69 64 2e 0a  st is.** valid..
16c20 2a 2a 0a 2a 2a 20 41 6e 20 65 78 70 72 65 73 73  **.** An express
16c30 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  ion of the form 
16c40 49 44 20 6f 72 20 49 44 2e 49 44 20 72 65 66 65  ID or ID.ID refe
16c50 72 73 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 69  rs to a column i
16c60 6e 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f  n a table..** Fo
16c70 72 20 73 75 63 68 20 65 78 70 72 65 73 73 69 6f  r such expressio
16c80 6e 73 2c 20 45 78 70 72 2e 6f 70 20 69 73 20 73  ns, Expr.op is s
16c90 65 74 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20  et to TK_COLUMN 
16ca0 61 6e 64 20 45 78 70 72 2e 69 54 61 62 6c 65 20  and Expr.iTable 
16cb0 69 73 0a 2a 2a 20 74 68 65 20 69 6e 74 65 67 65  is.** the intege
16cc0 72 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  r cursor number 
16cd0 6f 66 20 61 20 56 44 42 45 20 63 75 72 73 6f 72  of a VDBE cursor
16ce0 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 61   pointing to tha
16cf0 74 20 74 61 62 6c 65 20 61 6e 64 0a 2a 2a 20 45  t table and.** E
16d00 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 69 73 20 74  xpr.iColumn is t
16d10 68 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  he column number
16d20 20 66 6f 72 20 74 68 65 20 73 70 65 63 69 66 69   for the specifi
16d30 63 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 74 68  c column.  If th
16d40 65 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20  e.** expression 
16d50 69 73 20 75 73 65 64 20 61 73 20 61 20 72 65 73  is used as a res
16d60 75 6c 74 20 69 6e 20 61 6e 20 61 67 67 72 65 67  ult in an aggreg
16d70 61 74 65 20 53 45 4c 45 43 54 2c 20 74 68 65 6e  ate SELECT, then
16d80 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73   the.** value is
16d90 20 61 6c 73 6f 20 73 74 6f 72 65 64 20 69 6e 20   also stored in 
16da0 74 68 65 20 45 78 70 72 2e 69 41 67 67 20 63 6f  the Expr.iAgg co
16db0 6c 75 6d 6e 20 69 6e 20 74 68 65 20 61 67 67 72  lumn in the aggr
16dc0 65 67 61 74 65 20 73 6f 20 74 68 61 74 0a 2a 2a  egate so that.**
16dd0 20 69 74 20 63 61 6e 20 62 65 20 61 63 63 65 73   it can be acces
16de0 73 65 64 20 61 66 74 65 72 20 61 6c 6c 20 61 67  sed after all ag
16df0 67 72 65 67 61 74 65 73 20 61 72 65 20 63 6f 6d  gregates are com
16e00 70 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  puted..**.** If 
16e10 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
16e20 73 20 61 6e 20 75 6e 62 6f 75 6e 64 20 76 61 72  s an unbound var
16e30 69 61 62 6c 65 20 6d 61 72 6b 65 72 20 28 61 20  iable marker (a 
16e40 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 0a 2a 2a  question mark.**
16e50 20 63 68 61 72 61 63 74 65 72 20 27 3f 27 20 69   character '?' i
16e60 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 53  n the original S
16e70 51 4c 29 20 74 68 65 6e 20 74 68 65 20 45 78 70  QL) then the Exp
16e80 72 2e 69 54 61 62 6c 65 20 68 6f 6c 64 73 20 74  r.iTable holds t
16e90 68 65 20 69 6e 64 65 78 0a 2a 2a 20 6e 75 6d 62  he index.** numb
16ea0 65 72 20 66 6f 72 20 74 68 61 74 20 76 61 72 69  er for that vari
16eb0 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  able..**.** If t
16ec0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
16ed0 20 61 20 73 75 62 71 75 65 72 79 20 74 68 65 6e   a subquery then
16ee0 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f   Expr.iColumn ho
16ef0 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a  lds an integer.*
16f00 2a 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65  * register numbe
16f10 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  r containing the
16f20 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 73   result of the s
16f30 75 62 71 75 65 72 79 2e 20 20 49 66 20 74 68 65  ubquery.  If the
16f40 0a 2a 2a 20 73 75 62 71 75 65 72 79 20 67 69 76  .** subquery giv
16f50 65 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 72 65  es a constant re
16f60 73 75 6c 74 2c 20 74 68 65 6e 20 69 54 61 62 6c  sult, then iTabl
16f70 65 20 69 73 20 2d 31 2e 20 20 49 66 20 74 68 65  e is -1.  If the
16f80 20 73 75 62 71 75 65 72 79 0a 2a 2a 20 67 69 76   subquery.** giv
16f90 65 73 20 61 20 64 69 66 66 65 72 65 6e 74 20 61  es a different a
16fa0 6e 73 77 65 72 20 61 74 20 64 69 66 66 65 72 65  nswer at differe
16fb0 6e 74 20 74 69 6d 65 73 20 64 75 72 69 6e 67 20  nt times during 
16fc0 73 74 61 74 65 6d 65 6e 74 20 70 72 6f 63 65 73  statement proces
16fd0 73 69 6e 67 0a 2a 2a 20 74 68 65 6e 20 69 54 61  sing.** then iTa
16fe0 62 6c 65 20 69 73 20 74 68 65 20 61 64 64 72 65  ble is the addre
16ff0 73 73 20 6f 66 20 61 20 73 75 62 72 6f 75 74 69  ss of a subrouti
17000 6e 65 20 74 68 61 74 20 63 6f 6d 70 75 74 65 73  ne that computes
17010 20 74 68 65 20 73 75 62 71 75 65 72 79 2e 0a 2a   the subquery..*
17020 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 78 70 72  *.** If the Expr
17030 20 69 73 20 6f 66 20 74 79 70 65 20 4f 50 5f 43   is of type OP_C
17040 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20 74  olumn, and the t
17050 61 62 6c 65 20 69 74 20 69 73 20 73 65 6c 65 63  able it is selec
17060 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69 73 20  ting from.** is 
17070 61 20 64 69 73 6b 20 74 61 62 6c 65 20 6f 72 20  a disk table or 
17080 74 68 65 20 22 6f 6c 64 2e 2a 22 20 70 73 65 75  the "old.*" pseu
17090 64 6f 2d 74 61 62 6c 65 2c 20 74 68 65 6e 20 70  do-table, then p
170a0 54 61 62 20 70 6f 69 6e 74 73 20 74 6f 20 74 68  Tab points to th
170b0 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69  e.** correspondi
170c0 6e 67 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74  ng table definit
170d0 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43  ion..**.** ALLOC
170e0 41 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a  ATION NOTES:.**.
170f0 2a 2a 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20  ** Expr objects 
17100 63 61 6e 20 75 73 65 20 61 20 6c 6f 74 20 6f 66  can use a lot of
17110 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 69 6e   memory space in
17120 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
17130 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c 70 20 72 65  .  To.** help re
17140 64 75 63 65 20 6d 65 6d 6f 72 79 20 72 65 71 75  duce memory requ
17150 69 72 65 6d 65 6e 74 73 2c 20 73 6f 6d 65 74 69  irements, someti
17160 6d 65 73 20 61 6e 20 45 78 70 72 20 6f 62 6a 65  mes an Expr obje
17170 63 74 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 74 72  ct will be.** tr
17180 75 6e 63 61 74 65 64 2e 20 20 41 6e 64 20 74 6f  uncated.  And to
17190 20 72 65 64 75 63 65 20 74 68 65 20 6e 75 6d 62   reduce the numb
171a0 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c  er of memory all
171b0 6f 63 61 74 69 6f 6e 73 2c 20 73 6f 6d 65 74 69  ocations, someti
171c0 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f  mes.** two or mo
171d0 72 65 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20  re Expr objects 
171e0 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 69  will be stored i
171f0 6e 20 61 20 73 69 6e 67 6c 65 20 6d 65 6d 6f 72  n a single memor
17200 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a  y allocation,.**
17210 20 74 6f 67 65 74 68 65 72 20 77 69 74 68 20 45   together with E
17220 78 70 72 2e 7a 54 6f 6b 65 6e 20 73 74 72 69 6e  xpr.zToken strin
17230 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  gs..**.** If the
17240 20 45 50 5f 52 65 64 75 63 65 64 20 61 6e 64 20   EP_Reduced and 
17250 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61  EP_TokenOnly fla
17260 67 73 20 61 72 65 20 73 65 74 20 77 68 65 6e 0a  gs are set when.
17270 2a 2a 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63  ** an Expr objec
17280 74 20 69 73 20 74 72 75 6e 63 61 74 65 64 2e 20  t is truncated. 
17290 20 57 68 65 6e 20 45 50 5f 52 65 64 75 63 65 64   When EP_Reduced
172a0 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 61 6c   is set, then al
172b0 6c 0a 2a 2a 20 74 68 65 20 63 68 69 6c 64 20 45  l.** the child E
172c0 78 70 72 20 6f 62 6a 65 63 74 73 20 69 6e 20 74  xpr objects in t
172d0 68 65 20 45 78 70 72 2e 70 4c 65 66 74 20 61 6e  he Expr.pLeft an
172e0 64 20 45 78 70 72 2e 70 52 69 67 68 74 20 73 75  d Expr.pRight su
172f0 62 74 72 65 65 73 0a 2a 2a 20 61 72 65 20 63 6f  btrees.** are co
17300 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e 20 74  ntained within t
17310 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72 79 20 61  he same memory a
17320 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 65  llocation.  Note
17330 2c 20 68 6f 77 65 76 65 72 2c 20 74 68 61 74 0a  , however, that.
17340 2a 2a 20 74 68 65 20 73 75 62 74 72 65 65 73 20  ** the subtrees 
17350 69 6e 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20  in Expr.x.pList 
17360 6f 72 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63  or Expr.x.pSelec
17370 74 20 61 72 65 20 61 6c 77 61 79 73 20 73 65 70  t are always sep
17380 61 72 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63  arately.** alloc
17390 61 74 65 64 2c 20 72 65 67 61 72 64 6c 65 73 73  ated, regardless
173a0 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e   of whether or n
173b0 6f 74 20 45 50 5f 52 65 64 75 63 65 64 20 69 73  ot EP_Reduced is
173c0 20 73 65 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20   set..*/.struct 
173d0 45 78 70 72 20 7b 0a 20 20 75 38 20 6f 70 3b 20  Expr {.  u8 op; 
173e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173f0 2f 2a 20 4f 70 65 72 61 74 69 6f 6e 20 70 65 72  /* Operation per
17400 66 6f 72 6d 65 64 20 62 79 20 74 68 69 73 20 6e  formed by this n
17410 6f 64 65 20 2a 2f 0a 20 20 63 68 61 72 20 61 66  ode */.  char af
17420 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20 20 20  finity;         
17430 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20  /* The affinity 
17440 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 72  of the column or
17450 20 30 20 69 66 20 6e 6f 74 20 61 20 63 6f 6c 75   0 if not a colu
17460 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 66 6c 61 67  mn */.  u32 flag
17470 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  s;             /
17480 2a 20 56 61 72 69 6f 75 73 20 66 6c 61 67 73 2e  * Various flags.
17490 20 20 45 50 5f 2a 20 53 65 65 20 62 65 6c 6f 77    EP_* See below
174a0 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20   */.  union {.  
174b0 20 20 63 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20    char *zToken; 
174c0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65           /* Toke
174d0 6e 20 76 61 6c 75 65 2e 20 5a 65 72 6f 20 74 65  n value. Zero te
174e0 72 6d 69 6e 61 74 65 64 20 61 6e 64 20 64 65 71  rminated and deq
174f0 75 6f 74 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74  uoted */.    int
17500 20 69 56 61 6c 75 65 3b 20 20 20 20 20 20 20 20   iValue;        
17510 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74      /* Non-negat
17520 69 76 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  ive integer valu
17530 65 20 69 66 20 45 50 5f 49 6e 74 56 61 6c 75 65  e if EP_IntValue
17540 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a   */.  } u;..  /*
17550 20 49 66 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e   If the EP_Token
17560 4f 6e 6c 79 20 66 6c 61 67 20 69 73 20 73 65 74  Only flag is set
17570 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61   in the Expr.fla
17580 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f  gs mask, then no
17590 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61  .  ** space is a
175a0 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65  llocated for the
175b0 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68   fields below th
175c0 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74  is point. An att
175d0 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63  empt to.  ** acc
175e0 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65  ess them will re
175f0 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75  sult in a segfau
17600 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f  lt or malfunctio
17610 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  n..  ***********
17620 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17630 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17640 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17650 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45  **********/..  E
17660 78 70 72 20 2a 70 4c 65 66 74 3b 20 20 20 20 20  xpr *pLeft;     
17670 20 20 20 20 20 20 2f 2a 20 4c 65 66 74 20 73 75        /* Left su
17680 62 6e 6f 64 65 20 2a 2f 0a 20 20 45 78 70 72 20  bnode */.  Expr 
17690 2a 70 52 69 67 68 74 3b 20 20 20 20 20 20 20 20  *pRight;        
176a0 20 20 2f 2a 20 52 69 67 68 74 20 73 75 62 6e 6f    /* Right subno
176b0 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a  de */.  union {.
176c0 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4c      ExprList *pL
176d0 69 73 74 3b 20 20 20 20 20 2f 2a 20 6f 70 20 3d  ist;     /* op =
176e0 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c   IN, EXISTS, SEL
176f0 45 43 54 2c 20 43 41 53 45 2c 20 46 55 4e 43 54  ECT, CASE, FUNCT
17700 49 4f 4e 2c 20 42 45 54 57 45 45 4e 20 2a 2f 0a  ION, BETWEEN */.
17710 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c      Select *pSel
17720 65 63 74 3b 20 20 20 20 20 2f 2a 20 45 50 5f 78  ect;     /* EP_x
17730 49 73 53 65 6c 65 63 74 20 61 6e 64 20 6f 70 20  IsSelect and op 
17740 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53 45  = IN, EXISTS, SE
17750 4c 45 43 54 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a  LECT */.  } x;..
17760 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 52    /* If the EP_R
17770 65 64 75 63 65 64 20 66 6c 61 67 20 69 73 20 73  educed flag is s
17780 65 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66  et in the Expr.f
17790 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20  lags mask, then 
177a0 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73  no.  ** space is
177b0 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74   allocated for t
177c0 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20  he fields below 
177d0 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61  this point. An a
177e0 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61  ttempt to.  ** a
177f0 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20  ccess them will 
17800 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66  result in a segf
17810 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74  ault or malfunct
17820 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a  ion..  *********
17830 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17840 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17850 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17860 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23  ************/..#
17870 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58  if SQLITE_MAX_EX
17880 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74  PR_DEPTH>0.  int
17890 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20 20 20   nHeight;       
178a0 20 20 20 20 2f 2a 20 48 65 69 67 68 74 20 6f 66      /* Height of
178b0 20 74 68 65 20 74 72 65 65 20 68 65 61 64 65 64   the tree headed
178c0 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f   by this node */
178d0 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 69 54  .#endif.  int iT
178e0 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
178f0 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63   /* TK_COLUMN: c
17900 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
17910 74 61 62 6c 65 20 68 6f 6c 64 69 6e 67 20 63 6f  table holding co
17920 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20  lumn.           
17930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
17940 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20 72 65   TK_REGISTER: re
17950 67 69 73 74 65 72 20 6e 75 6d 62 65 72 0a 20 20  gister number.  
17960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17970 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 54 52 49         ** TK_TRI
17980 47 47 45 52 3a 20 31 20 2d 3e 20 6e 65 77 2c 20  GGER: 1 -> new, 
17990 30 20 2d 3e 20 6f 6c 64 0a 20 20 20 20 20 20 20  0 -> old.       
179a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179b0 20 20 2a 2a 20 45 50 5f 55 6e 6c 69 6b 65 6c 79    ** EP_Unlikely
179c0 3a 20 20 31 33 34 32 31 37 37 32 38 20 74 69 6d  :  134217728 tim
179d0 65 73 20 6c 69 6b 65 6c 69 68 6f 6f 64 0a 20 20  es likelihood.  
179e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179f0 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 53 45 4c         ** TK_SEL
17a00 45 43 54 3a 20 31 73 74 20 72 65 67 69 73 74 65  ECT: 1st registe
17a10 72 20 6f 66 20 72 65 73 75 6c 74 20 76 65 63 74  r of result vect
17a20 6f 72 20 2a 2f 0a 20 20 79 6e 56 61 72 20 69 43  or */.  ynVar iC
17a30 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 2f  olumn;         /
17a40 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c  * TK_COLUMN: col
17a50 75 6d 6e 20 69 6e 64 65 78 2e 20 20 2d 31 20 66  umn index.  -1 f
17a60 6f 72 20 72 6f 77 69 64 2e 0a 20 20 20 20 20 20  or rowid..      
17a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a80 20 20 20 2a 2a 20 54 4b 5f 56 41 52 49 41 42 4c     ** TK_VARIABL
17a90 45 3a 20 76 61 72 69 61 62 6c 65 20 6e 75 6d 62  E: variable numb
17aa0 65 72 20 28 61 6c 77 61 79 73 20 3e 3d 20 31 29  er (always >= 1)
17ab0 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17ac0 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
17ad0 5f 53 45 4c 45 43 54 5f 43 4f 4c 55 4d 4e 3a 20  _SELECT_COLUMN: 
17ae0 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 72 65  column of the re
17af0 73 75 6c 74 20 76 65 63 74 6f 72 20 2a 2f 0a 20  sult vector */. 
17b00 20 69 31 36 20 69 41 67 67 3b 20 20 20 20 20 20   i16 iAgg;      
17b10 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68          /* Which
17b20 20 65 6e 74 72 79 20 69 6e 20 70 41 67 67 49 6e   entry in pAggIn
17b30 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e  fo->aCol[] or ->
17b40 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69 31 36  aFunc[] */.  i16
17b50 20 69 52 69 67 68 74 4a 6f 69 6e 54 61 62 6c 65   iRightJoinTable
17b60 3b 20 20 20 2f 2a 20 49 66 20 45 50 5f 46 72 6f  ;   /* If EP_Fro
17b70 6d 4a 6f 69 6e 2c 20 74 68 65 20 72 69 67 68 74  mJoin, the right
17b80 20 74 61 62 6c 65 20 6f 66 20 74 68 65 20 6a 6f   table of the jo
17b90 69 6e 20 2a 2f 0a 20 20 75 38 20 6f 70 32 3b 20  in */.  u8 op2; 
17ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
17bb0 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20 6f  * TK_REGISTER: o
17bc0 72 69 67 69 6e 61 6c 20 76 61 6c 75 65 20 6f 66  riginal value of
17bd0 20 45 78 70 72 2e 6f 70 0a 20 20 20 20 20 20 20   Expr.op.       
17be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17bf0 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20    ** TK_COLUMN: 
17c00 74 68 65 20 76 61 6c 75 65 20 6f 66 20 70 35 20  the value of p5 
17c10 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e 0a 20 20  for OP_Column.  
17c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c30 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 41 47 47         ** TK_AGG
17c40 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e 65 73 74 69  _FUNCTION: nesti
17c50 6e 67 20 64 65 70 74 68 20 2a 2f 0a 20 20 41 67  ng depth */.  Ag
17c60 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b  gInfo *pAggInfo;
17c70 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62 79 20       /* Used by 
17c80 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e  TK_AGG_COLUMN an
17c90 64 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f  d TK_AGG_FUNCTIO
17ca0 4e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54  N */.  Table *pT
17cb0 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ab;           /*
17cc0 20 54 61 62 6c 65 20 66 6f 72 20 54 4b 5f 43 4f   Table for TK_CO
17cd0 4c 55 4d 4e 20 65 78 70 72 65 73 73 69 6f 6e 73  LUMN expressions
17ce0 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  . */.};../*.** T
17cf0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65  he following are
17d00 20 74 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66   the meanings of
17d10 20 62 69 74 73 20 69 6e 20 74 68 65 20 45 78 70   bits in the Exp
17d20 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  r.flags field..*
17d30 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 46 72 6f  /.#define EP_Fro
17d40 6d 4a 6f 69 6e 20 20 30 78 30 30 30 30 30 31 20  mJoin  0x000001 
17d50 2f 2a 20 4f 72 69 67 69 6e 61 74 65 73 20 69 6e  /* Originates in
17d60 20 4f 4e 2f 55 53 49 4e 47 20 63 6c 61 75 73 65   ON/USING clause
17d70 20 6f 66 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a   of outer join *
17d80 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 67 67  /.#define EP_Agg
17d90 20 20 20 20 20 20 20 30 78 30 30 30 30 30 32 20         0x000002 
17da0 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20  /* Contains one 
17db0 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74  or more aggregat
17dc0 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23  e functions */.#
17dd0 64 65 66 69 6e 65 20 45 50 5f 52 65 73 6f 6c 76  define EP_Resolv
17de0 65 64 20 20 30 78 30 30 30 30 30 34 20 2f 2a 20  ed  0x000004 /* 
17df0 49 44 73 20 68 61 76 65 20 62 65 65 6e 20 72 65  IDs have been re
17e00 73 6f 6c 76 65 64 20 74 6f 20 43 4f 4c 55 4d 4e  solved to COLUMN
17e10 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  s */.#define EP_
17e20 45 72 72 6f 72 20 20 20 20 20 30 78 30 30 30 30  Error     0x0000
17e30 30 38 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e  08 /* Expression
17e40 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72   contains one or
17e50 20 6d 6f 72 65 20 65 72 72 6f 72 73 20 2a 2f 0a   more errors */.
17e60 23 64 65 66 69 6e 65 20 45 50 5f 44 69 73 74 69  #define EP_Disti
17e70 6e 63 74 20 20 30 78 30 30 30 30 31 30 20 2f 2a  nct  0x000010 /*
17e80 20 41 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   Aggregate funct
17e90 69 6f 6e 20 77 69 74 68 20 44 49 53 54 49 4e 43  ion with DISTINC
17ea0 54 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65  T keyword */.#de
17eb0 66 69 6e 65 20 45 50 5f 56 61 72 53 65 6c 65 63  fine EP_VarSelec
17ec0 74 20 30 78 30 30 30 30 32 30 20 2f 2a 20 70 53  t 0x000020 /* pS
17ed0 65 6c 65 63 74 20 69 73 20 63 6f 72 72 65 6c 61  elect is correla
17ee0 74 65 64 2c 20 6e 6f 74 20 63 6f 6e 73 74 61 6e  ted, not constan
17ef0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  t */.#define EP_
17f00 44 62 6c 51 75 6f 74 65 64 20 30 78 30 30 30 30  DblQuoted 0x0000
17f10 34 30 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61  40 /* token.z wa
17f20 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 69 6e 20  s originally in 
17f30 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66 69 6e 65  "..." */.#define
17f40 20 45 50 5f 49 6e 66 69 78 46 75 6e 63 20 30 78   EP_InfixFunc 0x
17f50 30 30 30 30 38 30 20 2f 2a 20 54 72 75 65 20 66  000080 /* True f
17f60 6f 72 20 61 6e 20 69 6e 66 69 78 20 66 75 6e 63  or an infix func
17f70 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42  tion: LIKE, GLOB
17f80 2c 20 65 74 63 20 2a 2f 0a 23 64 65 66 69 6e 65  , etc */.#define
17f90 20 45 50 5f 43 6f 6c 6c 61 74 65 20 20 20 30 78   EP_Collate   0x
17fa0 30 30 30 31 30 30 20 2f 2a 20 54 72 65 65 20 63  000100 /* Tree c
17fb0 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 43 4f 4c  ontains a TK_COL
17fc0 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20 2a 2f  LATE operator */
17fd0 0a 23 64 65 66 69 6e 65 20 45 50 5f 47 65 6e 65  .#define EP_Gene
17fe0 72 69 63 20 20 20 30 78 30 30 30 32 30 30 20 2f  ric   0x000200 /
17ff0 2a 20 49 67 6e 6f 72 65 20 43 4f 4c 4c 41 54 45  * Ignore COLLATE
18000 20 6f 72 20 61 66 66 69 6e 69 74 79 20 6f 6e 20   or affinity on 
18010 74 68 69 73 20 74 72 65 65 20 2a 2f 0a 23 64 65  this tree */.#de
18020 66 69 6e 65 20 45 50 5f 49 6e 74 56 61 6c 75 65  fine EP_IntValue
18030 20 20 30 78 30 30 30 34 30 30 20 2f 2a 20 49 6e    0x000400 /* In
18040 74 65 67 65 72 20 76 61 6c 75 65 20 63 6f 6e 74  teger value cont
18050 61 69 6e 65 64 20 69 6e 20 75 2e 69 56 61 6c 75  ained in u.iValu
18060 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  e */.#define EP_
18070 78 49 73 53 65 6c 65 63 74 20 30 78 30 30 30 38  xIsSelect 0x0008
18080 30 30 20 2f 2a 20 78 2e 70 53 65 6c 65 63 74 20  00 /* x.pSelect 
18090 69 73 20 76 61 6c 69 64 20 28 6f 74 68 65 72 77  is valid (otherw
180a0 69 73 65 20 78 2e 70 4c 69 73 74 20 69 73 29 20  ise x.pList is) 
180b0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 6b  */.#define EP_Sk
180c0 69 70 20 20 20 20 20 20 30 78 30 30 31 30 30 30  ip      0x001000
180d0 20 2f 2a 20 43 4f 4c 4c 41 54 45 2c 20 41 53 2c   /* COLLATE, AS,
180e0 20 6f 72 20 55 4e 4c 49 4b 45 4c 59 20 2a 2f 0a   or UNLIKELY */.
180f0 23 64 65 66 69 6e 65 20 45 50 5f 52 65 64 75 63  #define EP_Reduc
18100 65 64 20 20 20 30 78 30 30 32 30 30 30 20 2f 2a  ed   0x002000 /*
18110 20 45 78 70 72 20 73 74 72 75 63 74 20 45 58 50   Expr struct EXP
18120 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20 62 79  R_REDUCEDSIZE by
18130 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66  tes only */.#def
18140 69 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79  ine EP_TokenOnly
18150 20 30 78 30 30 34 30 30 30 20 2f 2a 20 45 78 70   0x004000 /* Exp
18160 72 20 73 74 72 75 63 74 20 45 58 50 52 5f 54 4f  r struct EXPR_TO
18170 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 62 79 74 65  KENONLYSIZE byte
18180 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e  s only */.#defin
18190 65 20 45 50 5f 53 74 61 74 69 63 20 20 20 20 30  e EP_Static    0
181a0 78 30 30 38 30 30 30 20 2f 2a 20 48 65 6c 64 20  x008000 /* Held 
181b0 69 6e 20 6d 65 6d 6f 72 79 20 6e 6f 74 20 6f 62  in memory not ob
181c0 74 61 69 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c  tained from mall
181d0 6f 63 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  oc() */.#define 
181e0 45 50 5f 4d 65 6d 54 6f 6b 65 6e 20 20 30 78 30  EP_MemToken  0x0
181f0 31 30 30 30 30 20 2f 2a 20 4e 65 65 64 20 74 6f  10000 /* Need to
18200 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29   sqlite3DbFree()
18210 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a   Expr.zToken */.
18220 23 64 65 66 69 6e 65 20 45 50 5f 4e 6f 52 65 64  #define EP_NoRed
18230 75 63 65 20 20 30 78 30 32 30 30 30 30 20 2f 2a  uce  0x020000 /*
18240 20 43 61 6e 6e 6f 74 20 45 58 50 52 44 55 50 5f   Cannot EXPRDUP_
18250 52 45 44 55 43 45 20 74 68 69 73 20 45 78 70 72  REDUCE this Expr
18260 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 55   */.#define EP_U
18270 6e 6c 69 6b 65 6c 79 20 20 30 78 30 34 30 30 30  nlikely  0x04000
18280 30 20 2f 2a 20 75 6e 6c 69 6b 65 6c 79 28 29 20  0 /* unlikely() 
18290 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 29 20  or likelihood() 
182a0 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
182b0 69 6e 65 20 45 50 5f 43 6f 6e 73 74 46 75 6e 63  ine EP_ConstFunc
182c0 20 30 78 30 38 30 30 30 30 20 2f 2a 20 41 20 53   0x080000 /* A S
182d0 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
182e0 41 4e 54 20 6f 72 20 5f 53 4c 4f 43 48 4e 47 20  ANT or _SLOCHNG 
182f0 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
18300 69 6e 65 20 45 50 5f 43 61 6e 42 65 4e 75 6c 6c  ine EP_CanBeNull
18310 20 30 78 31 30 30 30 30 30 20 2f 2a 20 43 61 6e   0x100000 /* Can
18320 20 62 65 20 6e 75 6c 6c 20 64 65 73 70 69 74 65   be null despite
18330 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72   NOT NULL constr
18340 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  aint */.#define 
18350 45 50 5f 53 75 62 71 75 65 72 79 20 20 30 78 32  EP_Subquery  0x2
18360 30 30 30 30 30 20 2f 2a 20 54 72 65 65 20 63 6f  00000 /* Tree co
18370 6e 74 61 69 6e 73 20 61 20 54 4b 5f 53 45 4c 45  ntains a TK_SELE
18380 43 54 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23  CT operator */.#
18390 64 65 66 69 6e 65 20 45 50 5f 41 6c 69 61 73 20  define EP_Alias 
183a0 20 20 20 20 30 78 34 30 30 30 30 30 20 2f 2a 20      0x400000 /* 
183b0 49 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20  Is an alias for 
183c0 61 20 72 65 73 75 6c 74 20 73 65 74 20 63 6f 6c  a result set col
183d0 75 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  umn */.#define E
183e0 50 5f 4c 65 61 66 20 20 20 20 20 20 30 78 38 30  P_Leaf      0x80
183f0 30 30 30 30 20 2f 2a 20 45 78 70 72 2e 70 4c 65  0000 /* Expr.pLe
18400 66 74 2c 20 2e 70 52 69 67 68 74 2c 20 2e 75 2e  ft, .pRight, .u.
18410 70 53 65 6c 65 63 74 20 61 6c 6c 20 4e 55 4c 4c  pSelect all NULL
18420 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6d 62 69   */../*.** Combi
18430 6e 61 74 69 6f 6e 73 20 6f 66 20 74 77 6f 20 6f  nations of two o
18440 72 20 6d 6f 72 65 20 45 50 5f 2a 20 66 6c 61 67  r more EP_* flag
18450 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  s.*/.#define EP_
18460 50 72 6f 70 61 67 61 74 65 20 28 45 50 5f 43 6f  Propagate (EP_Co
18470 6c 6c 61 74 65 7c 45 50 5f 53 75 62 71 75 65 72  llate|EP_Subquer
18480 79 29 20 2f 2a 20 50 72 6f 70 61 67 61 74 65 20  y) /* Propagate 
18490 74 68 65 73 65 20 62 69 74 73 20 75 70 20 74 72  these bits up tr
184a0 65 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  ee */../*.** The
184b0 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65  se macros can be
184c0 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73   used to test, s
184d0 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74  et, or clear bit
184e0 73 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72  s in the.** Expr
184f0 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f  .flags field..*/
18500 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48 61 73  .#define ExprHas
18510 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20  Property(E,P)   
18520 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28    (((E)->flags&(
18530 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20  P))!=0).#define 
18540 45 78 70 72 48 61 73 41 6c 6c 50 72 6f 70 65 72  ExprHasAllProper
18550 74 79 28 45 2c 50 29 20 20 28 28 28 45 29 2d 3e  ty(E,P)  (((E)->
18560 66 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29  flags&(P))==(P))
18570 0a 23 64 65 66 69 6e 65 20 45 78 70 72 53 65 74  .#define ExprSet
18580 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20  Property(E,P)   
18590 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50    (E)->flags|=(P
185a0 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 43 6c  ).#define ExprCl
185b0 65 61 72 50 72 6f 70 65 72 74 79 28 45 2c 50 29  earProperty(E,P)
185c0 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 26 3d 7e     (E)->flags&=~
185d0 28 50 29 0a 0a 2f 2a 20 54 68 65 20 45 78 70 72  (P)../* The Expr
185e0 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28 29  SetVVAProperty()
185f0 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 66   macro is used f
18600 6f 72 20 56 65 72 69 66 69 63 61 74 69 6f 6e 2c  or Verification,
18610 20 56 61 6c 69 64 61 74 69 6f 6e 2c 0a 2a 2a 20   Validation,.** 
18620 61 6e 64 20 41 63 63 72 65 64 69 74 61 74 69 6f  and Accreditatio
18630 6e 20 6f 6e 6c 79 2e 20 20 49 74 20 77 6f 72 6b  n only.  It work
18640 73 20 6c 69 6b 65 20 45 78 70 72 53 65 74 50 72  s like ExprSetPr
18650 6f 70 65 72 74 79 28 29 20 64 75 72 69 6e 67 20  operty() during 
18660 56 56 41 0a 2a 2a 20 70 72 6f 63 65 73 73 65 73  VVA.** processes
18670 20 62 75 74 20 69 73 20 61 20 6e 6f 2d 6f 70 20   but is a no-op 
18680 66 6f 72 20 64 65 6c 69 76 65 72 79 2e 0a 2a 2f  for delivery..*/
18690 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
186a0 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20 45 78  EBUG.# define Ex
186b0 70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79  prSetVVAProperty
186c0 28 45 2c 50 29 20 20 28 45 29 2d 3e 66 6c 61 67  (E,P)  (E)->flag
186d0 73 7c 3d 28 50 29 0a 23 65 6c 73 65 0a 23 20 64  s|=(P).#else.# d
186e0 65 66 69 6e 65 20 45 78 70 72 53 65 74 56 56 41  efine ExprSetVVA
186f0 50 72 6f 70 65 72 74 79 28 45 2c 50 29 0a 23 65  Property(E,P).#e
18700 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72  ndif../*.** Macr
18710 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  os to determine 
18720 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  the number of by
18730 74 65 73 20 72 65 71 75 69 72 65 64 20 62 79 20  tes required by 
18740 61 20 6e 6f 72 6d 61 6c 20 45 78 70 72 0a 2a 2a  a normal Expr.**
18750 20 73 74 72 75 63 74 2c 20 61 6e 20 45 78 70 72   struct, an Expr
18760 20 73 74 72 75 63 74 20 77 69 74 68 20 74 68 65   struct with the
18770 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67   EP_Reduced flag
18780 20 73 65 74 20 69 6e 20 45 78 70 72 2e 66 6c 61   set in Expr.fla
18790 67 73 0a 2a 2a 20 61 6e 64 20 61 6e 20 45 78 70  gs.** and an Exp
187a0 72 20 73 74 72 75 63 74 20 77 69 74 68 20 74 68  r struct with th
187b0 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66  e EP_TokenOnly f
187c0 6c 61 67 20 73 65 74 2e 0a 2a 2f 0a 23 64 65 66  lag set..*/.#def
187d0 69 6e 65 20 45 58 50 52 5f 46 55 4c 4c 53 49 5a  ine EXPR_FULLSIZ
187e0 45 20 20 20 20 20 20 20 20 20 20 20 73 69 7a 65  E           size
187f0 6f 66 28 45 78 70 72 29 20 20 20 20 20 20 20 20  of(Expr)        
18800 20 20 20 2f 2a 20 46 75 6c 6c 20 73 69 7a 65 20     /* Full size 
18810 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f  */.#define EXPR_
18820 52 45 44 55 43 45 44 53 49 5a 45 20 20 20 20 20  REDUCEDSIZE     
18830 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72     offsetof(Expr
18840 2c 69 54 61 62 6c 65 29 20 20 2f 2a 20 43 6f 6d  ,iTable)  /* Com
18850 6d 6f 6e 20 66 65 61 74 75 72 65 73 20 2a 2f 0a  mon features */.
18860 23 64 65 66 69 6e 65 20 45 58 50 52 5f 54 4f 4b  #define EXPR_TOK
18870 45 4e 4f 4e 4c 59 53 49 5a 45 20 20 20 20 20 20  ENONLYSIZE      
18880 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c 70 4c  offsetof(Expr,pL
18890 65 66 74 29 20 20 20 2f 2a 20 46 65 77 65 72 20  eft)   /* Fewer 
188a0 66 65 61 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a  features */../*.
188b0 2a 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64 20  ** Flags passed 
188c0 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 45 78  to the sqlite3Ex
188d0 70 72 44 75 70 28 29 20 66 75 6e 63 74 69 6f 6e  prDup() function
188e0 2e 20 53 65 65 20 74 68 65 20 68 65 61 64 65 72  . See the header
188f0 20 63 6f 6d 6d 65 6e 74 0a 2a 2a 20 61 62 6f 76   comment.** abov
18900 65 20 73 71 6c 69 74 65 33 45 78 70 72 44 75 70  e sqlite3ExprDup
18910 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a  () for details..
18920 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 44  */.#define EXPRD
18930 55 50 5f 52 45 44 55 43 45 20 20 20 20 20 20 20  UP_REDUCE       
18940 20 20 30 78 30 30 30 31 20 20 2f 2a 20 55 73 65    0x0001  /* Use
18950 64 20 72 65 64 75 63 65 64 2d 73 69 7a 65 20 45  d reduced-size E
18960 78 70 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a  xpr nodes */../*
18970 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 65 78  .** A list of ex
18980 70 72 65 73 73 69 6f 6e 73 2e 20 20 45 61 63 68  pressions.  Each
18990 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20   expression may 
189a0 6f 70 74 69 6f 6e 61 6c 6c 79 20 68 61 76 65 20  optionally have 
189b0 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20 41 6e 20 65  a.** name.  An e
189c0 78 70 72 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e 61  xpr/name combina
189d0 74 69 6f 6e 20 63 61 6e 20 62 65 20 75 73 65 64  tion can be used
189e0 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73   in several ways
189f0 2c 20 73 75 63 68 0a 2a 2a 20 61 73 20 74 68 65  , such.** as the
18a00 20 6c 69 73 74 20 6f 66 20 22 65 78 70 72 20 41   list of "expr A
18a10 53 20 49 44 22 20 66 69 65 6c 64 73 20 66 6f 6c  S ID" fields fol
18a20 6c 6f 77 69 6e 67 20 61 20 22 53 45 4c 45 43 54  lowing a "SELECT
18a30 22 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 6c  " or in the.** l
18a40 69 73 74 20 6f 66 20 22 49 44 20 3d 20 65 78 70  ist of "ID = exp
18a50 72 22 20 69 74 65 6d 73 20 69 6e 20 61 6e 20 55  r" items in an U
18a60 50 44 41 54 45 2e 20 20 41 20 6c 69 73 74 20 6f  PDATE.  A list o
18a70 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63 61  f expressions ca
18a80 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 73 65  n.** also be use
18a90 64 20 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e  d as the argumen
18aa0 74 20 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e 2c  t to a function,
18ab0 20 69 6e 20 77 68 69 63 68 20 63 61 73 65 20 74   in which case t
18ac0 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69  he a.zName.** fi
18ad0 65 6c 64 20 69 73 20 6e 6f 74 20 75 73 65 64 2e  eld is not used.
18ae0 0a 2a 2a 0a 2a 2a 20 42 79 20 64 65 66 61 75 6c  .**.** By defaul
18af0 74 20 74 68 65 20 45 78 70 72 2e 7a 53 70 61 6e  t the Expr.zSpan
18b00 20 66 69 65 6c 64 20 68 6f 6c 64 73 20 61 20 68   field holds a h
18b10 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65 20 64 65  uman-readable de
18b20 73 63 72 69 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20  scription of.** 
18b30 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 74  the expression t
18b40 68 61 74 20 69 73 20 75 73 65 64 20 69 6e 20 74  hat is used in t
18b50 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66  he generation of
18b60 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
18b70 61 6e 64 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61  and.** column la
18b80 62 65 6c 73 2e 20 20 49 6e 20 74 68 69 73 20 63  bels.  In this c
18b90 61 73 65 2c 20 45 78 70 72 2e 7a 53 70 61 6e 20  ase, Expr.zSpan 
18ba0 69 73 20 74 79 70 69 63 61 6c 6c 79 20 74 68 65  is typically the
18bb0 20 74 65 78 74 20 6f 66 20 61 0a 2a 2a 20 63 6f   text of a.** co
18bc0 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  lumn expression 
18bd0 61 73 20 69 74 20 65 78 69 73 74 73 20 69 6e 20  as it exists in 
18be0 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
18bf0 6e 74 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 66  nt.  However, if
18c00 0a 2a 2a 20 74 68 65 20 62 53 70 61 6e 49 73 54  .** the bSpanIsT
18c10 61 62 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20  ab flag is set, 
18c20 74 68 65 6e 20 7a 53 70 61 6e 20 69 73 20 6f 76  then zSpan is ov
18c30 65 72 6c 6f 61 64 65 64 20 74 6f 20 6d 65 61 6e  erloaded to mean
18c40 20 74 68 65 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20   the name.** of 
18c50 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d  the result colum
18c60 6e 20 69 6e 20 74 68 65 20 66 6f 72 6d 3a 20 44  n in the form: D
18c70 41 54 41 42 41 53 45 2e 54 41 42 4c 45 2e 43 4f  ATABASE.TABLE.CO
18c80 4c 55 4d 4e 2e 20 20 54 68 69 73 20 6c 61 74 65  LUMN.  This late
18c90 72 0a 2a 2a 20 66 6f 72 6d 20 69 73 20 75 73 65  r.** form is use
18ca0 64 20 66 6f 72 20 6e 61 6d 65 20 72 65 73 6f 6c  d for name resol
18cb0 75 74 69 6f 6e 20 77 69 74 68 20 6e 65 73 74 65  ution with neste
18cc0 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 73 2e 0a  d FROM clauses..
18cd0 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 4c 69  */.struct ExprLi
18ce0 73 74 20 7b 0a 20 20 69 6e 74 20 6e 45 78 70 72  st {.  int nExpr
18cf0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
18d00 20 4e 75 6d 62 65 72 20 6f 66 20 65 78 70 72 65   Number of expre
18d10 73 73 69 6f 6e 73 20 6f 6e 20 74 68 65 20 6c 69  ssions on the li
18d20 73 74 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 45  st */.  struct E
18d30 78 70 72 4c 69 73 74 5f 69 74 65 6d 20 7b 20 2f  xprList_item { /
18d40 2a 20 46 6f 72 20 65 61 63 68 20 65 78 70 72 65  * For each expre
18d50 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73  ssion in the lis
18d60 74 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70  t */.    Expr *p
18d70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20  Expr;           
18d80 20 2f 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20   /* The list of 
18d90 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20  expressions */. 
18da0 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20     char *zName; 
18db0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f             /* To
18dc0 6b 65 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77  ken associated w
18dd0 69 74 68 20 74 68 69 73 20 65 78 70 72 65 73 73  ith this express
18de0 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  ion */.    char 
18df0 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20 20 20 20  *zSpan;         
18e00 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74     /* Original t
18e10 65 78 74 20 6f 66 20 74 68 65 20 65 78 70 72 65  ext of the expre
18e20 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 75 38 20  ssion */.    u8 
18e30 73 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20  sortOrder;      
18e40 20 20 20 20 20 2f 2a 20 31 20 66 6f 72 20 44 45       /* 1 for DE
18e50 53 43 20 6f 72 20 30 20 66 6f 72 20 41 53 43 20  SC or 0 for ASC 
18e60 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
18e70 64 6f 6e 65 20 3a 31 3b 20 20 20 20 20 20 20 2f  done :1;       /
18e80 2a 20 41 20 66 6c 61 67 20 74 6f 20 69 6e 64 69  * A flag to indi
18e90 63 61 74 65 20 77 68 65 6e 20 70 72 6f 63 65 73  cate when proces
18ea0 73 69 6e 67 20 69 73 20 66 69 6e 69 73 68 65 64  sing is finished
18eb0 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
18ec0 20 62 53 70 61 6e 49 73 54 61 62 20 3a 31 3b 20   bSpanIsTab :1; 
18ed0 2f 2a 20 7a 53 70 61 6e 20 68 6f 6c 64 73 20 44  /* zSpan holds D
18ee0 42 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a  B.TABLE.COLUMN *
18ef0 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 72  /.    unsigned r
18f00 65 75 73 61 62 6c 65 20 3a 31 3b 20 20 20 2f 2a  eusable :1;   /*
18f10 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73   Constant expres
18f20 73 69 6f 6e 20 69 73 20 72 65 75 73 61 62 6c 65  sion is reusable
18f30 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a   */.    union {.
18f40 20 20 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20        struct {. 
18f50 20 20 20 20 20 20 20 75 31 36 20 69 4f 72 64 65         u16 iOrde
18f60 72 42 79 43 6f 6c 3b 20 20 20 20 20 20 2f 2a 20  rByCol;      /* 
18f70 46 6f 72 20 4f 52 44 45 52 20 42 59 2c 20 63 6f  For ORDER BY, co
18f80 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 72  lumn number in r
18f90 65 73 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20 20  esult set */.   
18fa0 20 20 20 20 20 75 31 36 20 69 41 6c 69 61 73 3b       u16 iAlias;
18fb0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
18fc0 64 65 78 20 69 6e 74 6f 20 50 61 72 73 65 2e 61  dex into Parse.a
18fd0 41 6c 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d  Alias[] for zNam
18fe0 65 20 2a 2f 0a 20 20 20 20 20 20 7d 20 78 3b 0a  e */.      } x;.
18ff0 20 20 20 20 20 20 69 6e 74 20 69 43 6f 6e 73 74        int iConst
19000 45 78 70 72 52 65 67 3b 20 20 20 20 20 20 2f 2a  ExprReg;      /*
19010 20 52 65 67 69 73 74 65 72 20 69 6e 20 77 68 69   Register in whi
19020 63 68 20 45 78 70 72 20 76 61 6c 75 65 20 69 73  ch Expr value is
19030 20 63 61 63 68 65 64 20 2a 2f 0a 20 20 20 20 7d   cached */.    }
19040 20 75 3b 0a 20 20 7d 20 2a 61 3b 20 20 20 20 20   u;.  } *a;     
19050 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
19060 41 6c 6c 6f 63 20 61 20 70 6f 77 65 72 20 6f 66  Alloc a power of
19070 20 74 77 6f 20 67 72 65 61 74 65 72 20 6f 72 20   two greater or 
19080 65 71 75 61 6c 20 74 6f 20 6e 45 78 70 72 20 2a  equal to nExpr *
19090 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  /.};../*.** An i
190a0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
190b0 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65  structure is use
190c0 64 20 62 79 20 74 68 65 20 70 61 72 73 65 72 20  d by the parser 
190d0 74 6f 20 72 65 63 6f 72 64 20 62 6f 74 68 0a 2a  to record both.*
190e0 2a 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65  * the parse tree
190f0 20 66 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69   for an expressi
19100 6f 6e 20 61 6e 64 20 74 68 65 20 73 70 61 6e 20  on and the span 
19110 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20 66 6f  of input text fo
19120 72 20 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69  r an.** expressi
19130 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78  on..*/.struct Ex
19140 70 72 53 70 61 6e 20 7b 0a 20 20 45 78 70 72 20  prSpan {.  Expr 
19150 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20  *pExpr;         
19160 20 2f 2a 20 54 68 65 20 65 78 70 72 65 73 73 69   /* The expressi
19170 6f 6e 20 70 61 72 73 65 20 74 72 65 65 20 2a 2f  on parse tree */
19180 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
19190 53 74 61 72 74 3b 20 20 20 2f 2a 20 46 69 72 73  Start;   /* Firs
191a0 74 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 69  t character of i
191b0 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a 20 20 63  nput text */.  c
191c0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45 6e 64 3b  onst char *zEnd;
191d0 20 20 20 20 20 2f 2a 20 4f 6e 65 20 63 68 61 72       /* One char
191e0 61 63 74 65 72 20 70 61 73 74 20 74 68 65 20 65  acter past the e
191f0 6e 64 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74  nd of input text
19200 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
19210 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
19220 73 20 73 74 72 75 63 74 75 72 65 20 63 61 6e 20  s structure can 
19230 68 6f 6c 64 20 61 20 73 69 6d 70 6c 65 20 6c 69  hold a simple li
19240 73 74 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72  st of identifier
19250 73 2c 0a 2a 2a 20 73 75 63 68 20 61 73 20 74 68  s,.** such as th
19260 65 20 6c 69 73 74 20 22 61 2c 62 2c 63 22 20 69  e list "a,b,c" i
19270 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  n the following 
19280 73 74 61 74 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a  statements:.**.*
19290 2a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e  *      INSERT IN
192a0 54 4f 20 74 28 61 2c 62 2c 63 29 20 56 41 4c 55  TO t(a,b,c) VALU
192b0 45 53 20 2e 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20  ES ...;.**      
192c0 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 64 78  CREATE INDEX idx
192d0 20 4f 4e 20 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a   ON t(a,b,c);.**
192e0 20 20 20 20 20 20 43 52 45 41 54 45 20 54 52 49        CREATE TRI
192f0 47 47 45 52 20 74 72 69 67 20 42 45 46 4f 52 45  GGER trig BEFORE
19300 20 55 50 44 41 54 45 20 4f 4e 20 74 28 61 2c 62   UPDATE ON t(a,b
19310 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54  ,c) ...;.**.** T
19320 68 65 20 49 64 4c 69 73 74 2e 61 2e 69 64 78 20  he IdList.a.idx 
19330 66 69 65 6c 64 20 69 73 20 75 73 65 64 20 77 68  field is used wh
19340 65 6e 20 74 68 65 20 49 64 4c 69 73 74 20 72 65  en the IdList re
19350 70 72 65 73 65 6e 74 73 20 74 68 65 20 6c 69 73  presents the lis
19360 74 20 6f 66 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e  t of.** column n
19370 61 6d 65 73 20 61 66 74 65 72 20 61 20 74 61 62  ames after a tab
19380 6c 65 20 6e 61 6d 65 20 69 6e 20 61 6e 20 49 4e  le name in an IN
19390 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  SERT statement. 
193a0 20 49 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e   In the statemen
193b0 74 0a 2a 2a 0a 2a 2a 20 20 20 20 20 49 4e 53 45  t.**.**     INSE
193c0 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29  RT INTO t(a,b,c)
193d0 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61   ....**.** If "a
193e0 22 20 69 73 20 74 68 65 20 6b 2d 74 68 20 63 6f  " is the k-th co
193f0 6c 75 6d 6e 20 6f 66 20 74 61 62 6c 65 20 22 74  lumn of table "t
19400 22 2c 20 74 68 65 6e 20 49 64 4c 69 73 74 2e 61  ", then IdList.a
19410 5b 30 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73  [0].idx==k..*/.s
19420 74 72 75 63 74 20 49 64 4c 69 73 74 20 7b 0a 20  truct IdList {. 
19430 20 73 74 72 75 63 74 20 49 64 4c 69 73 74 5f 69   struct IdList_i
19440 74 65 6d 20 7b 0a 20 20 20 20 63 68 61 72 20 2a  tem {.    char *
19450 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e  zName;      /* N
19460 61 6d 65 20 6f 66 20 74 68 65 20 69 64 65 6e 74  ame of the ident
19470 69 66 69 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74  ifier */.    int
19480 20 69 64 78 3b 20 20 20 20 20 20 20 20 20 20 2f   idx;          /
19490 2a 20 49 6e 64 65 78 20 69 6e 20 73 6f 6d 65 20  * Index in some 
194a0 54 61 62 6c 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20  Table.aCol[] of 
194b0 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a  a column named z
194c0 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a  Name */.  } *a;.
194d0 20 20 69 6e 74 20 6e 49 64 3b 20 20 20 20 20 20    int nId;      
194e0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
194f0 69 64 65 6e 74 69 66 69 65 72 73 20 6f 6e 20 74  identifiers on t
19500 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f  he list */.};../
19510 2a 0a 2a 2a 20 54 68 65 20 62 69 74 6d 61 73 6b  *.** The bitmask
19520 20 64 61 74 61 74 79 70 65 20 64 65 66 69 6e 65   datatype define
19530 64 20 62 65 6c 6f 77 20 69 73 20 75 73 65 64 20  d below is used 
19540 66 6f 72 20 76 61 72 69 6f 75 73 20 6f 70 74 69  for various opti
19550 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  mizations..**.**
19560 20 43 68 61 6e 67 69 6e 67 20 74 68 69 73 20 66   Changing this f
19570 72 6f 6d 20 61 20 36 34 2d 62 69 74 20 74 6f 20  rom a 64-bit to 
19580 61 20 33 32 2d 62 69 74 20 74 79 70 65 20 6c 69  a 32-bit type li
19590 6d 69 74 73 20 74 68 65 20 6e 75 6d 62 65 72 20  mits the number 
195a0 6f 66 0a 2a 2a 20 74 61 62 6c 65 73 20 69 6e 20  of.** tables in 
195b0 61 20 6a 6f 69 6e 20 74 6f 20 33 32 20 69 6e 73  a join to 32 ins
195c0 74 65 61 64 20 6f 66 20 36 34 2e 20 20 42 75 74  tead of 64.  But
195d0 20 69 74 20 61 6c 73 6f 20 72 65 64 75 63 65 73   it also reduces
195e0 20 74 68 65 20 73 69 7a 65 0a 2a 2a 20 6f 66 20   the size.** of 
195f0 74 68 65 20 6c 69 62 72 61 72 79 20 62 79 20 37  the library by 7
19600 33 38 20 62 79 74 65 73 20 6f 6e 20 69 78 38 36  38 bytes on ix86
19610 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
19620 54 45 5f 42 49 54 4d 41 53 4b 5f 54 59 50 45 0a  TE_BITMASK_TYPE.
19630 20 20 74 79 70 65 64 65 66 20 53 51 4c 49 54 45    typedef SQLITE
19640 5f 42 49 54 4d 41 53 4b 5f 54 59 50 45 20 42 69  _BITMASK_TYPE Bi
19650 74 6d 61 73 6b 3b 0a 23 65 6c 73 65 0a 20 20 74  tmask;.#else.  t
19660 79 70 65 64 65 66 20 75 36 34 20 42 69 74 6d 61  ypedef u64 Bitma
19670 73 6b 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  sk;.#endif../*.*
19680 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  * The number of 
19690 62 69 74 73 20 69 6e 20 61 20 42 69 74 6d 61 73  bits in a Bitmas
196a0 6b 2e 20 20 22 42 4d 53 22 20 6d 65 61 6e 73 20  k.  "BMS" means 
196b0 22 42 69 74 4d 61 73 6b 20 53 69 7a 65 22 2e 0a  "BitMask Size"..
196c0 2a 2f 0a 23 64 65 66 69 6e 65 20 42 4d 53 20 20  */.#define BMS  
196d0 28 28 69 6e 74 29 28 73 69 7a 65 6f 66 28 42 69  ((int)(sizeof(Bi
196e0 74 6d 61 73 6b 29 2a 38 29 29 0a 0a 2f 2a 0a 2a  tmask)*8))../*.*
196f0 2a 20 41 20 62 69 74 20 69 6e 20 61 20 42 69 74  * A bit in a Bit
19700 6d 61 73 6b 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  mask.*/.#define 
19710 4d 41 53 4b 42 49 54 28 6e 29 20 20 20 28 28 28  MASKBIT(n)   (((
19720 42 69 74 6d 61 73 6b 29 31 29 3c 3c 28 6e 29 29  Bitmask)1)<<(n))
19730 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b 42 49 54  .#define MASKBIT
19740 33 32 28 6e 29 20 28 28 28 75 6e 73 69 67 6e 65  32(n) (((unsigne
19750 64 20 69 6e 74 29 31 29 3c 3c 28 6e 29 29 0a 23  d int)1)<<(n)).#
19760 64 65 66 69 6e 65 20 41 4c 4c 42 49 54 53 20 20  define ALLBITS  
19770 20 20 20 20 28 28 42 69 74 6d 61 73 6b 29 2d 31      ((Bitmask)-1
19780 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  )../*.** The fol
19790 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
197a0 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20 46   describes the F
197b0 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20  ROM clause of a 
197c0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
197d0 2e 0a 2a 2a 20 45 61 63 68 20 74 61 62 6c 65 20  ..** Each table 
197e0 6f 72 20 73 75 62 71 75 65 72 79 20 69 6e 20 74  or subquery in t
197f0 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 69  he FROM clause i
19800 73 20 61 20 73 65 70 61 72 61 74 65 20 65 6c 65  s a separate ele
19810 6d 65 6e 74 20 6f 66 0a 2a 2a 20 74 68 65 20 53  ment of.** the S
19820 72 63 4c 69 73 74 2e 61 5b 5d 20 61 72 72 61 79  rcList.a[] array
19830 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68 20 74 68 65  ..**.** With the
19840 20 61 64 64 69 74 69 6f 6e 20 6f 66 20 6d 75 6c   addition of mul
19850 74 69 70 6c 65 20 64 61 74 61 62 61 73 65 20 73  tiple database s
19860 75 70 70 6f 72 74 2c 20 74 68 65 20 66 6f 6c 6c  upport, the foll
19870 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a  owing structure.
19880 2a 2a 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 75  ** can also be u
19890 73 65 64 20 74 6f 20 64 65 73 63 72 69 62 65 20  sed to describe 
198a0 61 20 70 61 72 74 69 63 75 6c 61 72 20 74 61 62  a particular tab
198b0 6c 65 20 73 75 63 68 20 61 73 20 74 68 65 20 74  le such as the t
198c0 61 62 6c 65 20 74 68 61 74 0a 2a 2a 20 69 73 20  able that.** is 
198d0 6d 6f 64 69 66 69 65 64 20 62 79 20 61 6e 20 49  modified by an I
198e0 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 2c 20 6f  NSERT, DELETE, o
198f0 72 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  r UPDATE stateme
19900 6e 74 2e 20 20 49 6e 20 73 74 61 6e 64 61 72 64  nt.  In standard
19910 20 53 51 4c 2c 0a 2a 2a 20 73 75 63 68 20 61 20   SQL,.** such a 
19920 74 61 62 6c 65 20 6d 75 73 74 20 62 65 20 61 20  table must be a 
19930 73 69 6d 70 6c 65 20 6e 61 6d 65 3a 20 49 44 2e  simple name: ID.
19940 20 20 42 75 74 20 69 6e 20 53 51 4c 69 74 65 2c    But in SQLite,
19950 20 74 68 65 20 74 61 62 6c 65 20 63 61 6e 0a 2a   the table can.*
19960 2a 20 6e 6f 77 20 62 65 20 69 64 65 6e 74 69 66  * now be identif
19970 69 65 64 20 62 79 20 61 20 64 61 74 61 62 61 73  ied by a databas
19980 65 20 6e 61 6d 65 2c 20 61 20 64 6f 74 2c 20 74  e name, a dot, t
19990 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61  hen the table na
199a0 6d 65 3a 20 49 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a  me: ID.ID..**.**
199b0 20 54 68 65 20 6a 6f 69 6e 74 79 70 65 20 73 74   The jointype st
199c0 61 72 74 73 20 6f 75 74 20 73 68 6f 77 69 6e 67  arts out showing
199d0 20 74 68 65 20 6a 6f 69 6e 20 74 79 70 65 20 62   the join type b
199e0 65 74 77 65 65 6e 20 74 68 65 20 63 75 72 72 65  etween the curre
199f0 6e 74 20 74 61 62 6c 65 0a 2a 2a 20 61 6e 64 20  nt table.** and 
19a00 74 68 65 20 6e 65 78 74 20 74 61 62 6c 65 20 6f  the next table o
19a10 6e 20 74 68 65 20 6c 69 73 74 2e 20 20 54 68 65  n the list.  The
19a20 20 70 61 72 73 65 72 20 62 75 69 6c 64 73 20 74   parser builds t
19a30 68 65 20 6c 69 73 74 20 74 68 69 73 20 77 61 79  he list this way
19a40 2e 0a 2a 2a 20 42 75 74 20 73 71 6c 69 74 65 33  ..** But sqlite3
19a50 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e  SrcListShiftJoin
19a60 54 79 70 65 28 29 20 6c 61 74 65 72 20 73 68 69  Type() later shi
19a70 66 74 73 20 74 68 65 20 6a 6f 69 6e 74 79 70 65  fts the jointype
19a80 73 20 73 6f 20 74 68 61 74 20 65 61 63 68 0a 2a  s so that each.*
19a90 2a 20 6a 6f 69 6e 74 79 70 65 20 65 78 70 72 65  * jointype expre
19aa0 73 73 65 73 20 74 68 65 20 6a 6f 69 6e 20 62 65  sses the join be
19ab0 74 77 65 65 6e 20 74 68 65 20 74 61 62 6c 65 20  tween the table 
19ac0 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75 73  and the previous
19ad0 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e   table..**.** In
19ae0 20 74 68 65 20 63 6f 6c 55 73 65 64 20 66 69 65   the colUsed fie
19af0 6c 64 2c 20 74 68 65 20 68 69 67 68 2d 6f 72 64  ld, the high-ord
19b00 65 72 20 62 69 74 20 28 62 69 74 20 36 33 29 20  er bit (bit 63) 
19b10 69 73 20 73 65 74 20 69 66 20 74 68 65 20 74 61  is set if the ta
19b20 62 6c 65 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20  ble.** contains 
19b30 6d 6f 72 65 20 74 68 61 6e 20 36 33 20 63 6f 6c  more than 63 col
19b40 75 6d 6e 73 20 61 6e 64 20 74 68 65 20 36 34 2d  umns and the 64-
19b50 74 68 20 6f 72 20 6c 61 74 65 72 20 63 6f 6c 75  th or later colu
19b60 6d 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 73  mn is used..*/.s
19b70 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 7b 0a  truct SrcList {.
19b80 20 20 69 6e 74 20 6e 53 72 63 3b 20 20 20 20 20    int nSrc;     
19b90 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
19ba0 74 61 62 6c 65 73 20 6f 72 20 73 75 62 71 75 65  tables or subque
19bb0 72 69 65 73 20 69 6e 20 74 68 65 20 46 52 4f 4d  ries in the FROM
19bc0 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75 33 32   clause */.  u32
19bd0 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a   nAlloc;      /*
19be0 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69   Number of entri
19bf0 65 73 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20  es allocated in 
19c00 61 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 73  a[] below */.  s
19c10 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74  truct SrcList_it
19c20 65 6d 20 7b 0a 20 20 20 20 53 63 68 65 6d 61 20  em {.    Schema 
19c30 2a 70 53 63 68 65 6d 61 3b 20 20 2f 2a 20 53 63  *pSchema;  /* Sc
19c40 68 65 6d 61 20 74 6f 20 77 68 69 63 68 20 74 68  hema to which th
19c50 69 73 20 69 74 65 6d 20 69 73 20 66 69 78 65 64  is item is fixed
19c60 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 44   */.    char *zD
19c70 61 74 61 62 61 73 65 3b 20 20 2f 2a 20 4e 61 6d  atabase;  /* Nam
19c80 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f  e of database ho
19c90 6c 64 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65  lding this table
19ca0 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e   */.    char *zN
19cb0 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d  ame;      /* Nam
19cc0 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 2a  e of the table *
19cd0 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 41 6c 69  /.    char *zAli
19ce0 61 73 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 22  as;     /* The "
19cf0 42 22 20 70 61 72 74 20 6f 66 20 61 20 22 41 20  B" part of a "A 
19d00 41 53 20 42 22 20 70 68 72 61 73 65 2e 20 20 7a  AS B" phrase.  z
19d10 4e 61 6d 65 20 69 73 20 74 68 65 20 22 41 22 20  Name is the "A" 
19d20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54  */.    Table *pT
19d30 61 62 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 53  ab;      /* An S
19d40 51 4c 20 74 61 62 6c 65 20 63 6f 72 72 65 73 70  QL table corresp
19d50 6f 6e 64 69 6e 67 20 74 6f 20 7a 4e 61 6d 65 20  onding to zName 
19d60 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70  */.    Select *p
19d70 53 65 6c 65 63 74 3b 20 20 2f 2a 20 41 20 53 45  Select;  /* A SE
19d80 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 75  LECT statement u
19d90 73 65 64 20 69 6e 20 70 6c 61 63 65 20 6f 66 20  sed in place of 
19da0 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a  a table name */.
19db0 20 20 20 20 69 6e 74 20 61 64 64 72 46 69 6c 6c      int addrFill
19dc0 53 75 62 3b 20 20 2f 2a 20 41 64 64 72 65 73 73  Sub;  /* Address
19dd0 20 6f 66 20 73 75 62 72 6f 75 74 69 6e 65 20 74   of subroutine t
19de0 6f 20 6d 61 6e 69 66 65 73 74 20 61 20 73 75 62  o manifest a sub
19df0 71 75 65 72 79 20 2a 2f 0a 20 20 20 20 69 6e 74  query */.    int
19e00 20 72 65 67 52 65 74 75 72 6e 3b 20 20 20 20 2f   regReturn;    /
19e10 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69  * Register holdi
19e20 6e 67 20 72 65 74 75 72 6e 20 61 64 64 72 65 73  ng return addres
19e30 73 20 6f 66 20 61 64 64 72 46 69 6c 6c 53 75 62  s of addrFillSub
19e40 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52   */.    int regR
19e50 65 73 75 6c 74 3b 20 20 20 20 2f 2a 20 52 65 67  esult;    /* Reg
19e60 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 72  isters holding r
19e70 65 73 75 6c 74 73 20 6f 66 20 61 20 63 6f 2d 72  esults of a co-r
19e80 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20 73 74  outine */.    st
19e90 72 75 63 74 20 7b 0a 20 20 20 20 20 20 75 38 20  ruct {.      u8 
19ea0 6a 6f 69 6e 74 79 70 65 3b 20 20 20 20 20 20 2f  jointype;      /
19eb0 2a 20 54 79 70 65 20 6f 66 20 6a 6f 69 6e 20 62  * Type of join b
19ec0 65 74 77 65 65 6e 20 74 68 69 73 20 74 61 62 6c  etween this tabl
19ed0 65 20 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f  e and the previo
19ee0 75 73 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69  us */.      unsi
19ef0 67 6e 65 64 20 6e 6f 74 49 6e 64 65 78 65 64 20  gned notIndexed 
19f00 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69  :1;    /* True i
19f10 66 20 74 68 65 72 65 20 69 73 20 61 20 4e 4f 54  f there is a NOT
19f20 20 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65 20   INDEXED clause 
19f30 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65  */.      unsigne
19f40 64 20 69 73 49 6e 64 65 78 65 64 42 79 20 3a 31  d isIndexedBy :1
19f50 3b 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74  ;   /* True if t
19f60 68 65 72 65 20 69 73 20 61 6e 20 49 4e 44 45 58  here is an INDEX
19f70 45 44 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a  ED BY clause */.
19f80 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69        unsigned i
19f90 73 54 61 62 46 75 6e 63 20 3a 31 3b 20 20 20 20  sTabFunc :1;    
19fa0 20 2f 2a 20 54 72 75 65 20 69 66 20 74 61 62 6c   /* True if tabl
19fb0 65 2d 76 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f  e-valued-functio
19fc0 6e 20 73 79 6e 74 61 78 20 2a 2f 0a 20 20 20 20  n syntax */.    
19fd0 20 20 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 72    unsigned isCor
19fe0 72 65 6c 61 74 65 64 20 3a 31 3b 20 20 2f 2a 20  related :1;  /* 
19ff0 54 72 75 65 20 69 66 20 73 75 62 2d 71 75 65 72  True if sub-quer
1a000 79 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64 20  y is correlated 
1a010 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65  */.      unsigne
1a020 64 20 76 69 61 43 6f 72 6f 75 74 69 6e 65 20 3a  d viaCoroutine :
1a030 31 3b 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74  1;  /* Implement
1a040 65 64 20 61 73 20 61 20 63 6f 2d 72 6f 75 74 69  ed as a co-routi
1a050 6e 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69  ne */.      unsi
1a060 67 6e 65 64 20 69 73 52 65 63 75 72 73 69 76 65  gned isRecursive
1a070 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 66   :1;   /* True f
1a080 6f 72 20 72 65 63 75 72 73 69 76 65 20 72 65 66  or recursive ref
1a090 65 72 65 6e 63 65 20 69 6e 20 57 49 54 48 20 2a  erence in WITH *
1a0a0 2f 0a 20 20 20 20 7d 20 66 67 3b 0a 23 69 66 6e  /.    } fg;.#ifn
1a0b0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1a0c0 45 58 50 4c 41 49 4e 0a 20 20 20 20 75 38 20 69  EXPLAIN.    u8 i
1a0d0 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20 2f 2a  SelectId;     /*
1a0e0 20 49 66 20 70 53 65 6c 65 63 74 21 3d 30 2c 20   If pSelect!=0, 
1a0f0 74 68 65 20 69 64 20 6f 66 20 74 68 65 20 73 75  the id of the su
1a100 62 2d 73 65 6c 65 63 74 20 69 6e 20 45 51 50 20  b-select in EQP 
1a110 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 6e  */.#endif.    in
1a120 74 20 69 43 75 72 73 6f 72 3b 20 20 20 20 20 20  t iCursor;      
1a130 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72 73  /* The VDBE curs
1a140 6f 72 20 6e 75 6d 62 65 72 20 75 73 65 64 20 74  or number used t
1a150 6f 20 61 63 63 65 73 73 20 74 68 69 73 20 74 61  o access this ta
1a160 62 6c 65 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  ble */.    Expr 
1a170 2a 70 4f 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20  *pOn;        /* 
1a180 54 68 65 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66  The ON clause of
1a190 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49   a join */.    I
1a1a0 64 4c 69 73 74 20 2a 70 55 73 69 6e 67 3b 20 20  dList *pUsing;  
1a1b0 20 2f 2a 20 54 68 65 20 55 53 49 4e 47 20 63 6c   /* The USING cl
1a1c0 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a  ause of a join *
1a1d0 2f 0a 20 20 20 20 42 69 74 6d 61 73 6b 20 63 6f  /.    Bitmask co
1a1e0 6c 55 73 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e  lUsed;  /* Bit N
1a1f0 20 28 31 3c 3c 4e 29 20 73 65 74 20 69 66 20 63   (1<<N) set if c
1a200 6f 6c 75 6d 6e 20 4e 20 6f 66 20 70 54 61 62 20  olumn N of pTab 
1a210 69 73 20 75 73 65 64 20 2a 2f 0a 20 20 20 20 75  is used */.    u
1a220 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20 63 68 61  nion {.      cha
1a230 72 20 2a 7a 49 6e 64 65 78 65 64 42 79 3b 20 20  r *zIndexedBy;  
1a240 20 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 20    /* Identifier 
1a250 66 72 6f 6d 20 22 49 4e 44 45 58 45 44 20 42 59  from "INDEXED BY
1a260 20 3c 7a 49 6e 64 65 78 3e 22 20 63 6c 61 75 73   <zIndex>" claus
1a270 65 20 2a 2f 0a 20 20 20 20 20 20 45 78 70 72 4c  e */.      ExprL
1a280 69 73 74 20 2a 70 46 75 6e 63 41 72 67 3b 20 20  ist *pFuncArg;  
1a290 2f 2a 20 41 72 67 75 6d 65 6e 74 73 20 74 6f 20  /* Arguments to 
1a2a0 74 61 62 6c 65 2d 76 61 6c 75 65 64 2d 66 75 6e  table-valued-fun
1a2b0 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 7d 20 75  ction */.    } u
1a2c0 31 3b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49  1;.    Index *pI
1a2d0 42 49 6e 64 65 78 3b 20 20 2f 2a 20 49 6e 64 65  BIndex;  /* Inde
1a2e0 78 20 73 74 72 75 63 74 75 72 65 20 63 6f 72 72  x structure corr
1a2f0 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 75 31 2e  esponding to u1.
1a300 7a 49 6e 64 65 78 65 64 42 79 20 2a 2f 0a 20 20  zIndexedBy */.  
1a310 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20 20  } a[1];         
1a320 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79      /* One entry
1a330 20 66 6f 72 20 65 61 63 68 20 69 64 65 6e 74 69   for each identi
1a340 66 69 65 72 20 6f 6e 20 74 68 65 20 6c 69 73 74  fier on the list
1a350 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65   */.};../*.** Pe
1a360 72 6d 69 74 74 65 64 20 76 61 6c 75 65 73 20 6f  rmitted values o
1a370 66 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61 2e  f the SrcList.a.
1a380 6a 6f 69 6e 74 79 70 65 20 66 69 65 6c 64 0a 2a  jointype field.*
1a390 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 49 4e 4e  /.#define JT_INN
1a3a0 45 52 20 20 20 20 20 30 78 30 30 30 31 20 20 20  ER     0x0001   
1a3b0 20 2f 2a 20 41 6e 79 20 6b 69 6e 64 20 6f 66 20   /* Any kind of 
1a3c0 69 6e 6e 65 72 20 6f 72 20 63 72 6f 73 73 20 6a  inner or cross j
1a3d0 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  oin */.#define J
1a3e0 54 5f 43 52 4f 53 53 20 20 20 20 20 30 78 30 30  T_CROSS     0x00
1a3f0 30 32 20 20 20 20 2f 2a 20 45 78 70 6c 69 63 69  02    /* Explici
1a400 74 20 75 73 65 20 6f 66 20 74 68 65 20 43 52 4f  t use of the CRO
1a410 53 53 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64  SS keyword */.#d
1a420 65 66 69 6e 65 20 4a 54 5f 4e 41 54 55 52 41 4c  efine JT_NATURAL
1a430 20 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20     0x0004    /* 
1a440 54 72 75 65 20 66 6f 72 20 61 20 22 6e 61 74 75  True for a "natu
1a450 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  ral" join */.#de
1a460 66 69 6e 65 20 4a 54 5f 4c 45 46 54 20 20 20 20  fine JT_LEFT    
1a470 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20 4c    0x0008    /* L
1a480 65 66 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a  eft outer join *
1a490 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 52 49 47  /.#define JT_RIG
1a4a0 48 54 20 20 20 20 20 30 78 30 30 31 30 20 20 20  HT     0x0010   
1a4b0 20 2f 2a 20 52 69 67 68 74 20 6f 75 74 65 72 20   /* Right outer 
1a4c0 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
1a4d0 4a 54 5f 4f 55 54 45 52 20 20 20 20 20 30 78 30  JT_OUTER     0x0
1a4e0 30 32 30 20 20 20 20 2f 2a 20 54 68 65 20 22 4f  020    /* The "O
1a4f0 55 54 45 52 22 20 6b 65 79 77 6f 72 64 20 69 73  UTER" keyword is
1a500 20 70 72 65 73 65 6e 74 20 2a 2f 0a 23 64 65 66   present */.#def
1a510 69 6e 65 20 4a 54 5f 45 52 52 4f 52 20 20 20 20  ine JT_ERROR    
1a520 20 30 78 30 30 34 30 20 20 20 20 2f 2a 20 75 6e   0x0040    /* un
1a530 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73 75 70 70 6f  known or unsuppo
1a540 72 74 65 64 20 6a 6f 69 6e 20 74 79 70 65 20 2a  rted join type *
1a550 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20  /.../*.** Flags 
1a560 61 70 70 72 6f 70 72 69 61 74 65 20 66 6f 72 20  appropriate for 
1a570 74 68 65 20 77 63 74 72 6c 46 6c 61 67 73 20 70  the wctrlFlags p
1a580 61 72 61 6d 65 74 65 72 20 6f 66 20 73 71 6c 69  arameter of sqli
1a590 74 65 33 57 68 65 72 65 42 65 67 69 6e 28 29 0a  te3WhereBegin().
1a5a0 2a 2a 20 61 6e 64 20 74 68 65 20 57 68 65 72 65  ** and the Where
1a5b0 49 6e 66 6f 2e 77 63 74 72 6c 46 6c 61 67 73 20  Info.wctrlFlags 
1a5c0 6d 65 6d 62 65 72 2e 0a 2a 2a 0a 2a 2a 20 56 61  member..**.** Va
1a5d0 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  lue constraints 
1a5e0 28 65 6e 66 6f 72 63 65 64 20 76 69 61 20 61 73  (enforced via as
1a5f0 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20  sert()):.**     
1a600 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d 49 54 20  WHERE_USE_LIMIT 
1a610 20 3d 3d 20 53 46 5f 46 69 78 65 64 4c 69 6d 69   == SF_FixedLimi
1a620 74 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  t.*/.#define WHE
1a630 52 45 5f 4f 52 44 45 52 42 59 5f 4e 4f 52 4d 41  RE_ORDERBY_NORMA
1a640 4c 20 20 20 30 78 30 30 30 30 20 2f 2a 20 4e 6f  L   0x0000 /* No
1a650 2d 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  -op */.#define W
1a660 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 49 4e  HERE_ORDERBY_MIN
1a670 20 20 20 20 20 20 30 78 30 30 30 31 20 2f 2a 20        0x0001 /* 
1a680 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65 73 73  ORDER BY process
1a690 69 6e 67 20 66 6f 72 20 6d 69 6e 28 29 20 66 75  ing for min() fu
1a6a0 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  nc */.#define WH
1a6b0 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 41 58 20  ERE_ORDERBY_MAX 
1a6c0 20 20 20 20 20 30 78 30 30 30 32 20 2f 2a 20 4f       0x0002 /* O
1a6d0 52 44 45 52 20 42 59 20 70 72 6f 63 65 73 73 69  RDER BY processi
1a6e0 6e 67 20 66 6f 72 20 6d 61 78 28 29 20 66 75 6e  ng for max() fun
1a6f0 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  c */.#define WHE
1a700 52 45 5f 4f 4e 45 50 41 53 53 5f 44 45 53 49 52  RE_ONEPASS_DESIR
1a710 45 44 20 20 30 78 30 30 30 34 20 2f 2a 20 57 61  ED  0x0004 /* Wa
1a720 6e 74 20 74 6f 20 64 6f 20 6f 6e 65 2d 70 61 73  nt to do one-pas
1a730 73 20 55 50 44 41 54 45 2f 44 45 4c 45 54 45 20  s UPDATE/DELETE 
1a740 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1a750 5f 4f 4e 45 50 41 53 53 5f 4d 55 4c 54 49 52 4f  _ONEPASS_MULTIRO
1a760 57 20 30 78 30 30 30 38 20 2f 2a 20 4f 4e 45 50  W 0x0008 /* ONEP
1a770 41 53 53 20 69 73 20 6f 6b 20 77 69 74 68 20 6d  ASS is ok with m
1a780 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a  ultiple rows */.
1a790 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 55  #define WHERE_DU
1a7a0 50 4c 49 43 41 54 45 53 5f 4f 4b 20 20 20 20 30  PLICATES_OK    0
1a7b0 78 30 30 31 30 20 2f 2a 20 4f 6b 20 74 6f 20 72  x0010 /* Ok to r
1a7c0 65 74 75 72 6e 20 61 20 72 6f 77 20 6d 6f 72 65  eturn a row more
1a7d0 20 74 68 61 6e 20 6f 6e 63 65 20 2a 2f 0a 23 64   than once */.#d
1a7e0 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 5f 53  efine WHERE_OR_S
1a7f0 55 42 43 4c 41 55 53 45 20 20 20 20 20 30 78 30  UBCLAUSE     0x0
1a800 30 32 30 20 2f 2a 20 50 72 6f 63 65 73 73 69 6e  020 /* Processin
1a810 67 20 61 20 73 75 62 2d 57 48 45 52 45 20 61 73  g a sub-WHERE as
1a820 20 70 61 72 74 20 6f 66 0a 20 20 20 20 20 20 20   part of.       
1a830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
1a850 2a 20 74 68 65 20 4f 52 20 6f 70 74 69 6d 69 7a  * the OR optimiz
1a860 61 74 69 6f 6e 20 20 2a 2f 0a 23 64 65 66 69 6e  ation  */.#defin
1a870 65 20 57 48 45 52 45 5f 47 52 4f 55 50 42 59 20  e WHERE_GROUPBY 
1a880 20 20 20 20 20 20 20 20 20 30 78 30 30 34 30 20           0x0040 
1a890 2f 2a 20 70 4f 72 64 65 72 42 79 20 69 73 20 72  /* pOrderBy is r
1a8a0 65 61 6c 6c 79 20 61 20 47 52 4f 55 50 20 42 59  eally a GROUP BY
1a8b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1a8c0 45 5f 44 49 53 54 49 4e 43 54 42 59 20 20 20 20  E_DISTINCTBY    
1a8d0 20 20 20 30 78 30 30 38 30 20 2f 2a 20 70 4f 72     0x0080 /* pOr
1a8e0 64 65 72 62 79 20 69 73 20 72 65 61 6c 6c 79 20  derby is really 
1a8f0 61 20 44 49 53 54 49 4e 43 54 20 63 6c 61 75 73  a DISTINCT claus
1a900 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  e */.#define WHE
1a910 52 45 5f 57 41 4e 54 5f 44 49 53 54 49 4e 43 54  RE_WANT_DISTINCT
1a920 20 20 20 20 30 78 30 31 30 30 20 2f 2a 20 41 6c      0x0100 /* Al
1a930 6c 20 6f 75 74 70 75 74 20 6e 65 65 64 73 20 74  l output needs t
1a940 6f 20 62 65 20 64 69 73 74 69 6e 63 74 20 2a 2f  o be distinct */
1a950 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 53  .#define WHERE_S
1a960 4f 52 54 42 59 47 52 4f 55 50 20 20 20 20 20 20  ORTBYGROUP      
1a970 30 78 30 32 30 30 20 2f 2a 20 53 75 70 70 6f 72  0x0200 /* Suppor
1a980 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73  t sqlite3WhereIs
1a990 53 6f 72 74 65 64 28 29 20 2a 2f 0a 23 64 65 66  Sorted() */.#def
1a9a0 69 6e 65 20 57 48 45 52 45 5f 53 45 45 4b 5f 54  ine WHERE_SEEK_T
1a9b0 41 42 4c 45 20 20 20 20 20 20 20 30 78 30 34 30  ABLE       0x040
1a9c0 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 64 65 66 65  0 /* Do not defe
1a9d0 72 20 73 65 65 6b 73 20 6f 6e 20 6d 61 69 6e 20  r seeks on main 
1a9e0 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65  table */.#define
1a9f0 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4c   WHERE_ORDERBY_L
1aa00 49 4d 49 54 20 20 20 20 30 78 30 38 30 30 20 2f  IMIT    0x0800 /
1aa10 2a 20 4f 52 44 45 52 42 59 2b 4c 49 4d 49 54 20  * ORDERBY+LIMIT 
1aa20 6f 6e 20 74 68 65 20 69 6e 6e 65 72 20 6c 6f 6f  on the inner loo
1aa30 70 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  p */.           
1aa40 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1aa50 20 20 20 20 30 78 31 30 30 30 20 20 20 20 6e 6f      0x1000    no
1aa60 74 20 63 75 72 72 65 6e 74 6c 79 20 75 73 65 64  t currently used
1aa70 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
1aa80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20              /*  
1aa90 20 20 20 30 78 32 30 30 30 20 20 20 20 6e 6f 74     0x2000    not
1aaa0 20 63 75 72 72 65 6e 74 6c 79 20 75 73 65 64 20   currently used 
1aab0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1aac0 5f 55 53 45 5f 4c 49 4d 49 54 20 20 20 20 20 20  _USE_LIMIT      
1aad0 20 20 30 78 34 30 30 30 20 2f 2a 20 55 73 65 20    0x4000 /* Use 
1aae0 74 68 65 20 4c 49 4d 49 54 20 69 6e 20 63 6f 73  the LIMIT in cos
1aaf0 74 20 65 73 74 69 6d 61 74 65 73 20 2a 2f 0a 20  t estimates */. 
1ab00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab10 20 20 20 20 20 20 20 2f 2a 20 20 20 20 20 30 78         /*     0x
1ab20 38 30 30 30 20 20 20 20 6e 6f 74 20 63 75 72 72  8000    not curr
1ab30 65 6e 74 6c 79 20 75 73 65 64 20 2a 2f 0a 0a 2f  ently used */../
1ab40 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e  * Allowed return
1ab50 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c   values from sql
1ab60 69 74 65 33 57 68 65 72 65 49 73 44 69 73 74 69  ite3WhereIsDisti
1ab70 6e 63 74 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65  nct().*/.#define
1ab80 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f   WHERE_DISTINCT_
1ab90 4e 4f 4f 50 20 20 20 20 20 20 30 20 20 2f 2a 20  NOOP      0  /* 
1aba0 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64  DISTINCT keyword
1abb0 20 6e 6f 74 20 75 73 65 64 20 2a 2f 0a 23 64 65   not used */.#de
1abc0 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49  fine WHERE_DISTI
1abd0 4e 43 54 5f 55 4e 49 51 55 45 20 20 20 20 31 20  NCT_UNIQUE    1 
1abe0 20 2f 2a 20 4e 6f 20 64 75 70 6c 69 63 61 74 65   /* No duplicate
1abf0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  s */.#define WHE
1ac00 52 45 5f 44 49 53 54 49 4e 43 54 5f 4f 52 44 45  RE_DISTINCT_ORDE
1ac10 52 45 44 20 20 20 32 20 20 2f 2a 20 41 6c 6c 20  RED   2  /* All 
1ac20 64 75 70 6c 69 63 61 74 65 73 20 61 72 65 20 61  duplicates are a
1ac30 64 6a 61 63 65 6e 74 20 2a 2f 0a 23 64 65 66 69  djacent */.#defi
1ac40 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
1ac50 54 5f 55 4e 4f 52 44 45 52 45 44 20 33 20 20 2f  T_UNORDERED 3  /
1ac60 2a 20 44 75 70 6c 69 63 61 74 65 73 20 61 72 65  * Duplicates are
1ac70 20 73 63 61 74 74 65 72 65 64 20 2a 2f 0a 0a 2f   scattered */../
1ac80 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e 74 65  *.** A NameConte
1ac90 78 74 20 64 65 66 69 6e 65 73 20 61 20 63 6f 6e  xt defines a con
1aca0 74 65 78 74 20 69 6e 20 77 68 69 63 68 20 74 6f  text in which to
1acb0 20 72 65 73 6f 6c 76 65 20 74 61 62 6c 65 20 61   resolve table a
1acc0 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d  nd column.** nam
1acd0 65 73 2e 20 20 54 68 65 20 63 6f 6e 74 65 78 74  es.  The context
1ace0 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6c   consists of a l
1acf0 69 73 74 20 6f 66 20 74 61 62 6c 65 73 20 28 74  ist of tables (t
1ad00 68 65 20 70 53 72 63 4c 69 73 74 29 20 66 69 65  he pSrcList) fie
1ad10 6c 64 20 61 6e 64 0a 2a 2a 20 61 20 6c 69 73 74  ld and.** a list
1ad20 20 6f 66 20 6e 61 6d 65 64 20 65 78 70 72 65 73   of named expres
1ad30 73 69 6f 6e 20 28 70 45 4c 69 73 74 29 2e 20 20  sion (pEList).  
1ad40 54 68 65 20 6e 61 6d 65 64 20 65 78 70 72 65 73  The named expres
1ad50 73 69 6f 6e 20 6c 69 73 74 20 6d 61 79 0a 2a 2a  sion list may.**
1ad60 20 62 65 20 4e 55 4c 4c 2e 20 20 54 68 65 20 70   be NULL.  The p
1ad70 53 72 63 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  Src corresponds 
1ad80 74 6f 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  to the FROM clau
1ad90 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20 6f  se of a SELECT o
1ada0 72 0a 2a 2a 20 74 6f 20 74 68 65 20 74 61 62 6c  r.** to the tabl
1adb0 65 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64  e being operated
1adc0 20 6f 6e 20 62 79 20 49 4e 53 45 52 54 2c 20 55   on by INSERT, U
1add0 50 44 41 54 45 2c 20 6f 72 20 44 45 4c 45 54 45  PDATE, or DELETE
1ade0 2e 20 20 54 68 65 0a 2a 2a 20 70 45 4c 69 73 74  .  The.** pEList
1adf0 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
1ae00 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 6f  the result set o
1ae10 66 20 61 20 53 45 4c 45 43 54 20 61 6e 64 20 69  f a SELECT and i
1ae20 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f 74  s NULL for.** ot
1ae30 68 65 72 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  her statements..
1ae40 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78  **.** NameContex
1ae50 74 73 20 63 61 6e 20 62 65 20 6e 65 73 74 65 64  ts can be nested
1ae60 2e 20 20 57 68 65 6e 20 72 65 73 6f 6c 76 69 6e  .  When resolvin
1ae70 67 20 6e 61 6d 65 73 2c 20 74 68 65 20 69 6e 6e  g names, the inn
1ae80 65 72 2d 6d 6f 73 74 0a 2a 2a 20 63 6f 6e 74 65  er-most.** conte
1ae90 78 74 20 69 73 20 73 65 61 72 63 68 65 64 20 66  xt is searched f
1aea0 69 72 73 74 2e 20 20 49 66 20 6e 6f 20 6d 61 74  irst.  If no mat
1aeb0 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65  ch is found, the
1aec0 20 6e 65 78 74 20 6f 75 74 65 72 0a 2a 2a 20 63   next outer.** c
1aed0 6f 6e 74 65 78 74 20 69 73 20 63 68 65 63 6b 65  ontext is checke
1aee0 64 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20  d.  If there is 
1aef0 73 74 69 6c 6c 20 6e 6f 20 6d 61 74 63 68 2c 20  still no match, 
1af00 74 68 65 20 6e 65 78 74 20 63 6f 6e 74 65 78 74  the next context
1af10 0a 2a 2a 20 69 73 20 63 68 65 63 6b 65 64 2e 20  .** is checked. 
1af20 20 54 68 69 73 20 70 72 6f 63 65 73 73 20 63 6f   This process co
1af30 6e 74 69 6e 75 65 73 20 75 6e 74 69 6c 20 65 69  ntinues until ei
1af40 74 68 65 72 20 61 20 6d 61 74 63 68 20 69 73 20  ther a match is 
1af50 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c 6c 20  found.** or all 
1af60 63 6f 6e 74 65 78 74 73 20 61 72 65 20 63 68 65  contexts are che
1af70 63 6b 2e 20 20 57 68 65 6e 20 61 20 6d 61 74 63  ck.  When a matc
1af80 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20  h is found, the 
1af90 6e 52 65 66 20 6d 65 6d 62 65 72 20 6f 66 0a 2a  nRef member of.*
1afa0 2a 20 74 68 65 20 63 6f 6e 74 65 78 74 20 63 6f  * the context co
1afb0 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 6d 61 74  ntaining the mat
1afc0 63 68 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  ch is incremente
1afd0 64 2e 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 73 75  d..**.** Each su
1afe0 62 71 75 65 72 79 20 67 65 74 73 20 61 20 6e 65  bquery gets a ne
1aff0 77 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2e 20 20  w NameContext.  
1b000 54 68 65 20 70 4e 65 78 74 20 66 69 65 6c 64 20  The pNext field 
1b010 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a  points to the.**
1b020 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 69 6e 20   NameContext in 
1b030 74 68 65 20 70 61 72 65 6e 74 20 71 75 65 72 79  the parent query
1b040 2e 20 20 54 68 75 73 20 74 68 65 20 70 72 6f 63  .  Thus the proc
1b050 65 73 73 20 6f 66 20 73 63 61 6e 6e 69 6e 67 20  ess of scanning 
1b060 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65  the.** NameConte
1b070 78 74 20 6c 69 73 74 20 63 6f 72 72 65 73 70 6f  xt list correspo
1b080 6e 64 73 20 74 6f 20 73 65 61 72 63 68 69 6e 67  nds to searching
1b090 20 74 68 72 6f 75 67 68 20 73 75 63 63 65 73 73   through success
1b0a0 69 76 65 6c 79 20 6f 75 74 65 72 0a 2a 2a 20 73  ively outer.** s
1b0b0 75 62 71 75 65 72 69 65 73 20 6c 6f 6f 6b 69 6e  ubqueries lookin
1b0c0 67 20 66 6f 72 20 61 20 6d 61 74 63 68 2e 0a 2a  g for a match..*
1b0d0 2f 0a 73 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e  /.struct NameCon
1b0e0 74 65 78 74 20 7b 0a 20 20 50 61 72 73 65 20 2a  text {.  Parse *
1b0f0 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 2f 2a  pParse;       /*
1b100 20 54 68 65 20 70 61 72 73 65 72 20 2a 2f 0a 20   The parser */. 
1b110 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69   SrcList *pSrcLi
1b120 73 74 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20  st;   /* One or 
1b130 6d 6f 72 65 20 74 61 62 6c 65 73 20 75 73 65 64  more tables used
1b140 20 74 6f 20 72 65 73 6f 6c 76 65 20 6e 61 6d 65   to resolve name
1b150 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  s */.  ExprList 
1b160 2a 70 45 4c 69 73 74 3b 20 20 20 20 2f 2a 20 4f  *pEList;    /* O
1b170 70 74 69 6f 6e 61 6c 20 6c 69 73 74 20 6f 66 20  ptional list of 
1b180 72 65 73 75 6c 74 2d 73 65 74 20 63 6f 6c 75 6d  result-set colum
1b190 6e 73 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20  ns */.  AggInfo 
1b1a0 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 2f 2a 20  *pAggInfo;   /* 
1b1b0 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  Information abou
1b1c0 74 20 61 67 67 72 65 67 61 74 65 73 20 61 74 20  t aggregates at 
1b1d0 74 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a 20 20  this level */.  
1b1e0 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 65  NameContext *pNe
1b1f0 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 75 74  xt;  /* Next out
1b200 65 72 20 6e 61 6d 65 20 63 6f 6e 74 65 78 74 2e  er name context.
1b210 20 20 4e 55 4c 4c 20 66 6f 72 20 6f 75 74 65 72    NULL for outer
1b220 6d 6f 73 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 52  most */.  int nR
1b230 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ef;            /
1b240 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 61 6d 65  * Number of name
1b250 73 20 72 65 73 6f 6c 76 65 64 20 62 79 20 74 68  s resolved by th
1b260 69 73 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20  is context */.  
1b270 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20  int nErr;       
1b280 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1b290 66 20 65 72 72 6f 72 73 20 65 6e 63 6f 75 6e 74  f errors encount
1b2a0 65 72 65 64 20 77 68 69 6c 65 20 72 65 73 6f 6c  ered while resol
1b2b0 76 69 6e 67 20 6e 61 6d 65 73 20 2a 2f 0a 20 20  ving names */.  
1b2c0 75 31 36 20 6e 63 46 6c 61 67 73 3b 20 20 20 20  u16 ncFlags;    
1b2d0 20 20 20 20 20 2f 2a 20 5a 65 72 6f 20 6f 72 20       /* Zero or 
1b2e0 6d 6f 72 65 20 4e 43 5f 2a 20 66 6c 61 67 73 20  more NC_* flags 
1b2f0 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 2a 2f  defined below */
1b300 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  .};../*.** Allow
1b310 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  ed values for th
1b320 65 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2c 20 6e  e NameContext, n
1b330 63 46 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a  cFlags field..**
1b340 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72  .** Value constr
1b350 61 69 6e 74 73 20 28 61 6c 6c 20 63 68 65 63 6b  aints (all check
1b360 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29  ed via assert())
1b370 3a 0a 2a 2a 20 20 20 20 4e 43 5f 48 61 73 41 67  :.**    NC_HasAg
1b380 67 20 20 20 20 3d 3d 20 53 46 5f 48 61 73 41 67  g    == SF_HasAg
1b390 67 0a 2a 2a 20 20 20 20 4e 43 5f 4d 69 6e 4d 61  g.**    NC_MinMa
1b3a0 78 41 67 67 20 3d 3d 20 53 46 5f 4d 69 6e 4d 61  xAgg == SF_MinMa
1b3b0 78 41 67 67 20 3d 3d 20 53 51 4c 49 54 45 5f 46  xAgg == SQLITE_F
1b3c0 55 4e 43 5f 4d 49 4e 4d 41 58 0a 2a 2a 0a 2a 2f  UNC_MINMAX.**.*/
1b3d0 0a 23 64 65 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f  .#define NC_Allo
1b3e0 77 41 67 67 20 20 30 78 30 30 30 31 20 20 2f 2a  wAgg  0x0001  /*
1b3f0 20 41 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   Aggregate funct
1b400 69 6f 6e 73 20 61 72 65 20 61 6c 6c 6f 77 65 64  ions are allowed
1b410 20 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65   here */.#define
1b420 20 4e 43 5f 50 61 72 74 49 64 78 20 20 20 30 78   NC_PartIdx   0x
1b430 30 30 30 32 20 20 2f 2a 20 54 72 75 65 20 69 66  0002  /* True if
1b440 20 72 65 73 6f 6c 76 69 6e 67 20 61 20 70 61 72   resolving a par
1b450 74 69 61 6c 20 69 6e 64 65 78 20 57 48 45 52 45  tial index WHERE
1b460 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49   */.#define NC_I
1b470 73 43 68 65 63 6b 20 20 20 30 78 30 30 30 34 20  sCheck   0x0004 
1b480 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f   /* True if reso
1b490 6c 76 69 6e 67 20 6e 61 6d 65 73 20 69 6e 20 61  lving names in a
1b4a0 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e   CHECK constrain
1b4b0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  t */.#define NC_
1b4c0 49 6e 41 67 67 46 75 6e 63 20 30 78 30 30 30 38  InAggFunc 0x0008
1b4d0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61 6e 61    /* True if ana
1b4e0 6c 79 7a 69 6e 67 20 61 72 67 75 6d 65 6e 74 73  lyzing arguments
1b4f0 20 74 6f 20 61 6e 20 61 67 67 20 66 75 6e 63 20   to an agg func 
1b500 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48 61  */.#define NC_Ha
1b510 73 41 67 67 20 20 20 20 30 78 30 30 31 30 20 20  sAgg    0x0010  
1b520 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 61  /* One or more a
1b530 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
1b540 6e 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69  ns seen */.#defi
1b550 6e 65 20 4e 43 5f 49 64 78 45 78 70 72 20 20 20  ne NC_IdxExpr   
1b560 30 78 30 30 32 30 20 20 2f 2a 20 54 72 75 65 20  0x0020  /* True 
1b570 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 63 6f 6c  if resolving col
1b580 75 6d 6e 73 20 6f 66 20 43 52 45 41 54 45 20 49  umns of CREATE I
1b590 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NDEX */.#define 
1b5a0 4e 43 5f 56 61 72 53 65 6c 65 63 74 20 30 78 30  NC_VarSelect 0x0
1b5b0 30 34 30 20 20 2f 2a 20 41 20 63 6f 72 72 65 6c  040  /* A correl
1b5c0 61 74 65 64 20 73 75 62 71 75 65 72 79 20 68 61  ated subquery ha
1b5d0 73 20 62 65 65 6e 20 73 65 65 6e 20 2a 2f 0a 23  s been seen */.#
1b5e0 64 65 66 69 6e 65 20 4e 43 5f 4d 69 6e 4d 61 78  define NC_MinMax
1b5f0 41 67 67 20 30 78 31 30 30 30 20 20 2f 2a 20 6d  Agg 0x1000  /* m
1b600 69 6e 2f 6d 61 78 20 61 67 67 72 65 67 61 74 65  in/max aggregate
1b610 73 20 73 65 65 6e 2e 20 20 53 65 65 20 6e 6f 74  s seen.  See not
1b620 65 20 61 62 6f 76 65 20 2a 2f 0a 0a 2f 2a 0a 2a  e above */../*.*
1b630 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
1b640 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
1b650 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e  tructure contain
1b660 73 20 61 6c 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  s all informatio
1b670 6e 0a 2a 2a 20 6e 65 65 64 65 64 20 74 6f 20 67  n.** needed to g
1b680 65 6e 65 72 61 74 65 20 63 6f 64 65 20 66 6f 72  enerate code for
1b690 20 61 20 73 69 6e 67 6c 65 20 53 45 4c 45 43 54   a single SELECT
1b6a0 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a   statement..**.*
1b6b0 2a 20 6e 4c 69 6d 69 74 20 69 73 20 73 65 74 20  * nLimit is set 
1b6c0 74 6f 20 2d 31 20 69 66 20 74 68 65 72 65 20 69  to -1 if there i
1b6d0 73 20 6e 6f 20 4c 49 4d 49 54 20 63 6c 61 75 73  s no LIMIT claus
1b6e0 65 2e 20 20 6e 4f 66 66 73 65 74 20 69 73 20 73  e.  nOffset is s
1b6f0 65 74 20 74 6f 20 30 2e 0a 2a 2a 20 49 66 20 74  et to 0..** If t
1b700 68 65 72 65 20 69 73 20 61 20 4c 49 4d 49 54 20  here is a LIMIT 
1b710 63 6c 61 75 73 65 2c 20 74 68 65 20 70 61 72 73  clause, the pars
1b720 65 72 20 73 65 74 73 20 6e 4c 69 6d 69 74 20 74  er sets nLimit t
1b730 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  o the value of t
1b740 68 65 0a 2a 2a 20 6c 69 6d 69 74 20 61 6e 64 20  he.** limit and 
1b750 6e 4f 66 66 73 65 74 20 74 6f 20 74 68 65 20 76  nOffset to the v
1b760 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 66 66 73  alue of the offs
1b770 65 74 20 28 6f 72 20 30 20 69 66 20 74 68 65 72  et (or 0 if ther
1b780 65 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 66 66 73  e is not.** offs
1b790 65 74 29 2e 20 20 42 75 74 20 6c 61 74 65 72 20  et).  But later 
1b7a0 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61 6e 64 20 6e  on, nLimit and n
1b7b0 4f 66 66 73 65 74 20 62 65 63 6f 6d 65 20 74 68  Offset become th
1b7c0 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f  e memory locatio
1b7d0 6e 73 0a 2a 2a 20 69 6e 20 74 68 65 20 56 44 42  ns.** in the VDB
1b7e0 45 20 74 68 61 74 20 72 65 63 6f 72 64 20 74 68  E that record th
1b7f0 65 20 6c 69 6d 69 74 20 61 6e 64 20 6f 66 66 73  e limit and offs
1b800 65 74 20 63 6f 75 6e 74 65 72 73 2e 0a 2a 2a 0a  et counters..**.
1b810 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b  ** addrOpenEphm[
1b820 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e 74 61 69  ] entries contai
1b830 6e 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66  n the address of
1b840 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
1b850 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20 54 68  l opcodes..** Th
1b860 65 73 65 20 61 64 64 72 65 73 73 65 73 20 6d 75  ese addresses mu
1b870 73 74 20 62 65 20 73 74 6f 72 65 64 20 73 6f 20  st be stored so 
1b880 74 68 61 74 20 77 65 20 63 61 6e 20 67 6f 20 62  that we can go b
1b890 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20 69 6e 0a  ack and fill in.
1b8a0 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59 49 4e 46  ** the P4_KEYINF
1b8b0 4f 20 61 6e 64 20 50 32 20 70 61 72 61 6d 65 74  O and P2 paramet
1b8c0 65 72 73 20 6c 61 74 65 72 2e 20 20 4e 65 69 74  ers later.  Neit
1b8d0 68 65 72 20 74 68 65 20 4b 65 79 49 6e 66 6f 20  her the KeyInfo 
1b8e0 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65  nor.** the numbe
1b8f0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
1b900 50 32 20 63 61 6e 20 62 65 20 63 6f 6d 70 75 74  P2 can be comput
1b910 65 64 20 61 74 20 74 68 65 20 73 61 6d 65 20 74  ed at the same t
1b920 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65 20 4f 50  ime.** as the OP
1b930 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73 74 72 75  _OpenEphm instru
1b940 63 74 69 6f 6e 20 69 73 20 63 6f 64 65 64 20 62  ction is coded b
1b950 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a 20 65 6e  ecause not.** en
1b960 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ough information
1b970 20 61 62 6f 75 74 20 74 68 65 20 63 6f 6d 70 6f   about the compo
1b980 75 6e 64 20 71 75 65 72 79 20 69 73 20 6b 6e 6f  und query is kno
1b990 77 6e 20 61 74 20 74 68 61 74 20 70 6f 69 6e 74  wn at that point
1b9a0 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49 6e 66 6f  ..** The KeyInfo
1b9b0 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 54 72 61   for addrOpenTra
1b9c0 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20 63 6f 6e  n[0] and [1] con
1b9d0 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 20  tains collating 
1b9e0 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20 66 6f 72  sequences.** for
1b9f0 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e   the result set.
1ba00 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f    The KeyInfo fo
1ba10 72 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32  r addrOpenEphm[2
1ba20 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61  ] contains colla
1ba30 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65 6e 63 65  ting.** sequence
1ba40 73 20 66 6f 72 20 74 68 65 20 4f 52 44 45 52 20  s for the ORDER 
1ba50 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74  BY clause..*/.st
1ba60 72 75 63 74 20 53 65 6c 65 63 74 20 7b 0a 20 20  ruct Select {.  
1ba70 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74  ExprList *pEList
1ba80 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 66 69  ;      /* The fi
1ba90 65 6c 64 73 20 6f 66 20 74 68 65 20 72 65 73 75  elds of the resu
1baa0 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20  lt */.  u8 op;  
1bab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1bac0 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55 4e 49  * One of: TK_UNI
1bad0 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49 4e 54  ON TK_ALL TK_INT
1bae0 45 52 53 45 43 54 20 54 4b 5f 45 58 43 45 50 54  ERSECT TK_EXCEPT
1baf0 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 6e 53 65   */.  LogEst nSe
1bb00 6c 65 63 74 52 6f 77 3b 20 20 20 20 20 2f 2a 20  lectRow;     /* 
1bb10 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65 72  Estimated number
1bb20 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73 20   of result rows 
1bb30 2a 2f 0a 20 20 75 33 32 20 73 65 6c 46 6c 61 67  */.  u32 selFlag
1bb40 73 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56  s;          /* V
1bb50 61 72 69 6f 75 73 20 53 46 5f 2a 20 76 61 6c 75  arious SF_* valu
1bb60 65 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4c 69 6d  es */.  int iLim
1bb70 69 74 2c 20 69 4f 66 66 73 65 74 3b 20 20 20 2f  it, iOffset;   /
1bb80 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65  * Memory registe
1bb90 72 73 20 68 6f 6c 64 69 6e 67 20 4c 49 4d 49 54  rs holding LIMIT
1bba0 20 26 20 4f 46 46 53 45 54 20 63 6f 75 6e 74 65   & OFFSET counte
1bbb0 72 73 20 2a 2f 0a 23 69 66 20 53 45 4c 45 43 54  rs */.#if SELECT
1bbc0 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a 20 20  TRACE_ENABLED.  
1bbd0 63 68 61 72 20 7a 53 65 6c 4e 61 6d 65 5b 31 32  char zSelName[12
1bbe0 5d 3b 20 20 20 20 20 2f 2a 20 53 79 6d 62 6f 6c  ];     /* Symbol
1bbf0 69 63 20 6e 61 6d 65 20 6f 66 20 74 68 69 73 20  ic name of this 
1bc00 53 45 4c 45 43 54 20 75 73 65 20 66 6f 72 20 64  SELECT use for d
1bc10 65 62 75 67 67 69 6e 67 20 2a 2f 0a 23 65 6e 64  ebugging */.#end
1bc20 69 66 0a 20 20 69 6e 74 20 61 64 64 72 4f 70 65  if.  int addrOpe
1bc30 6e 45 70 68 6d 5b 32 5d 3b 20 20 20 2f 2a 20 4f  nEphm[2];   /* O
1bc40 50 5f 4f 70 65 6e 45 70 68 65 6d 20 6f 70 63 6f  P_OpenEphem opco
1bc50 64 65 73 20 72 65 6c 61 74 65 64 20 74 6f 20 74  des related to t
1bc60 68 69 73 20 73 65 6c 65 63 74 20 2a 2f 0a 20 20  his select */.  
1bc70 53 72 63 4c 69 73 74 20 2a 70 53 72 63 3b 20 20  SrcList *pSrc;  
1bc80 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 46 52         /* The FR
1bc90 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45  OM clause */.  E
1bca0 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20  xpr *pWhere;    
1bcb0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45        /* The WHE
1bcc0 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45  RE clause */.  E
1bcd0 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42  xprList *pGroupB
1bce0 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 47 52 4f  y;    /* The GRO
1bcf0 55 50 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a  UP BY clause */.
1bd00 20 20 45 78 70 72 20 2a 70 48 61 76 69 6e 67 3b    Expr *pHaving;
1bd10 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1bd20 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20 2a 2f  HAVING clause */
1bd30 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72  .  ExprList *pOr
1bd40 64 65 72 42 79 3b 20 20 20 20 2f 2a 20 54 68 65  derBy;    /* The
1bd50 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
1bd60 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 50   */.  Select *pP
1bd70 72 69 6f 72 3b 20 20 20 20 20 20 20 20 2f 2a 20  rior;        /* 
1bd80 50 72 69 6f 72 20 73 65 6c 65 63 74 20 69 6e 20  Prior select in 
1bd90 61 20 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63  a compound selec
1bda0 74 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20  t statement */. 
1bdb0 20 53 65 6c 65 63 74 20 2a 70 4e 65 78 74 3b 20   Select *pNext; 
1bdc0 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20          /* Next 
1bdd0 73 65 6c 65 63 74 20 74 6f 20 74 68 65 20 6c 65  select to the le
1bde0 66 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64  ft in a compound
1bdf0 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4c 69 6d   */.  Expr *pLim
1be00 69 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  it;          /* 
1be10 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f 6e  LIMIT expression
1be20 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74  . NULL means not
1be30 20 75 73 65 64 2e 20 2a 2f 0a 20 20 45 78 70 72   used. */.  Expr
1be40 20 2a 70 4f 66 66 73 65 74 3b 20 20 20 20 20 20   *pOffset;      
1be50 20 20 20 2f 2a 20 4f 46 46 53 45 54 20 65 78 70     /* OFFSET exp
1be60 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65  ression. NULL me
1be70 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f  ans not used. */
1be80 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68 3b 20  .  With *pWith; 
1be90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 49 54            /* WIT
1bea0 48 20 63 6c 61 75 73 65 20 61 74 74 61 63 68 65  H clause attache
1beb0 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74  d to this select
1bec0 2e 20 4f 72 20 4e 55 4c 4c 2e 20 2a 2f 0a 7d 3b  . Or NULL. */.};
1bed0 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
1bee0 76 61 6c 75 65 73 20 66 6f 72 20 53 65 6c 65 63  values for Selec
1bef0 74 2e 73 65 6c 46 6c 61 67 73 2e 20 20 54 68 65  t.selFlags.  The
1bf00 20 22 53 46 22 20 70 72 65 66 69 78 20 73 74 61   "SF" prefix sta
1bf10 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 53 65 6c 65  nds for.** "Sele
1bf20 63 74 20 46 6c 61 67 22 2e 0a 2a 2a 0a 2a 2a 20  ct Flag"..**.** 
1bf30 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74  Value constraint
1bf40 73 20 28 61 6c 6c 20 63 68 65 63 6b 65 64 20 76  s (all checked v
1bf50 69 61 20 61 73 73 65 72 74 28 29 29 0a 2a 2a 20  ia assert()).** 
1bf60 20 20 20 20 53 46 5f 48 61 73 41 67 67 20 20 20      SF_HasAgg   
1bf70 20 20 3d 3d 20 4e 43 5f 48 61 73 41 67 67 0a 2a    == NC_HasAgg.*
1bf80 2a 20 20 20 20 20 53 46 5f 4d 69 6e 4d 61 78 41  *     SF_MinMaxA
1bf90 67 67 20 20 3d 3d 20 4e 43 5f 4d 69 6e 4d 61 78  gg  == NC_MinMax
1bfa0 41 67 67 20 20 20 20 20 3d 3d 20 53 51 4c 49 54  Agg     == SQLIT
1bfb0 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 0a 2a 2a  E_FUNC_MINMAX.**
1bfc0 20 20 20 20 20 53 46 5f 46 69 78 65 64 4c 69 6d       SF_FixedLim
1bfd0 69 74 20 3d 3d 20 57 48 45 52 45 5f 55 53 45 5f  it == WHERE_USE_
1bfe0 4c 49 4d 49 54 0a 2a 2f 0a 23 64 65 66 69 6e 65  LIMIT.*/.#define
1bff0 20 53 46 5f 44 69 73 74 69 6e 63 74 20 20 20 20   SF_Distinct    
1c000 20 20 20 30 78 30 30 30 30 31 20 20 2f 2a 20 4f     0x00001  /* O
1c010 75 74 70 75 74 20 73 68 6f 75 6c 64 20 62 65 20  utput should be 
1c020 44 49 53 54 49 4e 43 54 20 2a 2f 0a 23 64 65 66  DISTINCT */.#def
1c030 69 6e 65 20 53 46 5f 41 6c 6c 20 20 20 20 20 20  ine SF_All      
1c040 20 20 20 20 20 20 30 78 30 30 30 30 32 20 20 2f        0x00002  /
1c050 2a 20 49 6e 63 6c 75 64 65 73 20 74 68 65 20 41  * Includes the A
1c060 4c 4c 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64  LL keyword */.#d
1c070 65 66 69 6e 65 20 53 46 5f 52 65 73 6f 6c 76 65  efine SF_Resolve
1c080 64 20 20 20 20 20 20 20 30 78 30 30 30 30 34 20  d       0x00004 
1c090 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 73 20   /* Identifiers 
1c0a0 68 61 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76  have been resolv
1c0b0 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ed */.#define SF
1c0c0 5f 41 67 67 72 65 67 61 74 65 20 20 20 20 20 20  _Aggregate      
1c0d0 30 78 30 30 30 30 38 20 20 2f 2a 20 43 6f 6e 74  0x00008  /* Cont
1c0e0 61 69 6e 73 20 61 67 67 20 66 75 6e 63 74 69 6f  ains agg functio
1c0f0 6e 73 20 6f 72 20 61 20 47 52 4f 55 50 20 42 59  ns or a GROUP BY
1c100 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 48   */.#define SF_H
1c110 61 73 41 67 67 20 20 20 20 20 20 20 20 20 30 78  asAgg         0x
1c120 30 30 30 31 30 20 20 2f 2a 20 43 6f 6e 74 61 69  00010  /* Contai
1c130 6e 73 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  ns aggregate fun
1c140 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  ctions */.#defin
1c150 65 20 53 46 5f 55 73 65 73 45 70 68 65 6d 65 72  e SF_UsesEphemer
1c160 61 6c 20 20 30 78 30 30 30 32 30 20 20 2f 2a 20  al  0x00020  /* 
1c170 55 73 65 73 20 74 68 65 20 4f 70 65 6e 45 70 68  Uses the OpenEph
1c180 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 20 2a 2f  emeral opcode */
1c190 0a 23 64 65 66 69 6e 65 20 53 46 5f 45 78 70 61  .#define SF_Expa
1c1a0 6e 64 65 64 20 20 20 20 20 20 20 30 78 30 30 30  nded       0x000
1c1b0 34 30 20 20 2f 2a 20 73 71 6c 69 74 65 33 53 65  40  /* sqlite3Se
1c1c0 6c 65 63 74 45 78 70 61 6e 64 28 29 20 63 61 6c  lectExpand() cal
1c1d0 6c 65 64 20 6f 6e 20 74 68 69 73 20 2a 2f 0a 23  led on this */.#
1c1e0 64 65 66 69 6e 65 20 53 46 5f 48 61 73 54 79 70  define SF_HasTyp
1c1f0 65 49 6e 66 6f 20 20 20 20 30 78 30 30 30 38 30  eInfo    0x00080
1c200 20 20 2f 2a 20 46 52 4f 4d 20 73 75 62 71 75 65    /* FROM subque
1c210 72 69 65 73 20 68 61 76 65 20 54 61 62 6c 65 20  ries have Table 
1c220 6d 65 74 61 64 61 74 61 20 2a 2f 0a 23 64 65 66  metadata */.#def
1c230 69 6e 65 20 53 46 5f 43 6f 6d 70 6f 75 6e 64 20  ine SF_Compound 
1c240 20 20 20 20 20 20 30 78 30 30 31 30 30 20 20 2f        0x00100  /
1c250 2a 20 50 61 72 74 20 6f 66 20 61 20 63 6f 6d 70  * Part of a comp
1c260 6f 75 6e 64 20 71 75 65 72 79 20 2a 2f 0a 23 64  ound query */.#d
1c270 65 66 69 6e 65 20 53 46 5f 56 61 6c 75 65 73 20  efine SF_Values 
1c280 20 20 20 20 20 20 20 20 30 78 30 30 32 30 30 20          0x00200 
1c290 20 2f 2a 20 53 79 6e 74 68 65 73 69 7a 65 64 20   /* Synthesized 
1c2a0 66 72 6f 6d 20 56 41 4c 55 45 53 20 63 6c 61 75  from VALUES clau
1c2b0 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  se */.#define SF
1c2c0 5f 4d 75 6c 74 69 56 61 6c 75 65 20 20 20 20 20  _MultiValue     
1c2d0 30 78 30 30 34 30 30 20 20 2f 2a 20 53 69 6e 67  0x00400  /* Sing
1c2e0 6c 65 20 56 41 4c 55 45 53 20 74 65 72 6d 20 77  le VALUES term w
1c2f0 69 74 68 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77  ith multiple row
1c300 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  s */.#define SF_
1c310 4e 65 73 74 65 64 46 72 6f 6d 20 20 20 20 20 30  NestedFrom     0
1c320 78 30 30 38 30 30 20 20 2f 2a 20 50 61 72 74 20  x00800  /* Part 
1c330 6f 66 20 61 20 70 61 72 65 6e 74 68 65 73 69 7a  of a parenthesiz
1c340 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a  ed FROM clause *
1c350 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 69 6e  /.#define SF_Min
1c360 4d 61 78 41 67 67 20 20 20 20 20 20 30 78 30 31  MaxAgg      0x01
1c370 30 30 30 20 20 2f 2a 20 41 67 67 72 65 67 61 74  000  /* Aggregat
1c380 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 6d 69 6e  e containing min
1c390 28 29 20 6f 72 20 6d 61 78 28 29 20 2a 2f 0a 23  () or max() */.#
1c3a0 64 65 66 69 6e 65 20 53 46 5f 52 65 63 75 72 73  define SF_Recurs
1c3b0 69 76 65 20 20 20 20 20 20 30 78 30 32 30 30 30  ive      0x02000
1c3c0 20 20 2f 2a 20 54 68 65 20 72 65 63 75 72 73 69    /* The recursi
1c3d0 76 65 20 70 61 72 74 20 6f 66 20 61 20 72 65 63  ve part of a rec
1c3e0 75 72 73 69 76 65 20 43 54 45 20 2a 2f 0a 23 64  ursive CTE */.#d
1c3f0 65 66 69 6e 65 20 53 46 5f 46 69 78 65 64 4c 69  efine SF_FixedLi
1c400 6d 69 74 20 20 20 20 20 30 78 30 34 30 30 30 20  mit     0x04000 
1c410 20 2f 2a 20 6e 53 65 6c 65 63 74 52 6f 77 20 73   /* nSelectRow s
1c420 65 74 20 62 79 20 61 20 63 6f 6e 73 74 61 6e 74  et by a constant
1c430 20 4c 49 4d 49 54 20 2a 2f 0a 23 64 65 66 69 6e   LIMIT */.#defin
1c440 65 20 53 46 5f 4d 61 79 62 65 43 6f 6e 76 65 72  e SF_MaybeConver
1c450 74 20 20 20 30 78 30 38 30 30 30 20 20 2f 2a 20  t   0x08000  /* 
1c460 4e 65 65 64 20 63 6f 6e 76 65 72 74 43 6f 6d 70  Need convertComp
1c470 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71  oundSelectToSubq
1c480 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e  uery() */.#defin
1c490 65 20 53 46 5f 43 6f 6e 76 65 72 74 65 64 20 20  e SF_Converted  
1c4a0 20 20 20 20 30 78 31 30 30 30 30 20 20 2f 2a 20      0x10000  /* 
1c4b0 42 79 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75  By convertCompou
1c4c0 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65  ndSelectToSubque
1c4d0 72 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ry() */.#define 
1c4e0 53 46 5f 49 6e 63 6c 75 64 65 48 69 64 64 65 6e  SF_IncludeHidden
1c4f0 20 20 30 78 32 30 30 30 30 20 20 2f 2a 20 49 6e    0x20000  /* In
1c500 63 6c 75 64 65 20 68 69 64 64 65 6e 20 63 6f 6c  clude hidden col
1c510 75 6d 6e 73 20 69 6e 20 6f 75 74 70 75 74 20 2a  umns in output *
1c520 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 65  /.../*.** The re
1c530 73 75 6c 74 73 20 6f 66 20 61 20 53 45 4c 45 43  sults of a SELEC
1c540 54 20 63 61 6e 20 62 65 20 64 69 73 74 72 69 62  T can be distrib
1c550 75 74 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20  uted in several 
1c560 77 61 79 73 2c 20 61 73 20 64 65 66 69 6e 65 64  ways, as defined
1c570 0a 2a 2a 20 62 79 20 6f 6e 65 20 6f 66 20 74 68  .** by one of th
1c580 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
1c590 6f 73 2e 20 20 54 68 65 20 22 53 52 54 22 20 70  os.  The "SRT" p
1c5a0 72 65 66 69 78 20 6d 65 61 6e 73 20 22 53 45 4c  refix means "SEL
1c5b0 45 43 54 20 52 65 73 75 6c 74 0a 2a 2a 20 54 79  ECT Result.** Ty
1c5c0 70 65 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  pe"..**.**     S
1c5d0 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 53  RT_Union       S
1c5e0 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73 20  tore results as 
1c5f0 61 20 6b 65 79 20 69 6e 20 61 20 74 65 6d 70 6f  a key in a tempo
1c600 72 61 72 79 20 69 6e 64 65 78 0a 2a 2a 20 20 20  rary index.**   
1c610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c620 20 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20    identified by 
1c630 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a  pDest->iSDParm..
1c640 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 78  **.**     SRT_Ex
1c650 63 65 70 74 20 20 20 20 20 20 52 65 6d 6f 76 65  cept      Remove
1c660 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 74 68   results from th
1c670 65 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64 65  e temporary inde
1c680 78 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  x pDest->iSDParm
1c690 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1c6a0 45 78 69 73 74 73 20 20 20 20 20 20 53 74 6f 72  Exists      Stor
1c6b0 65 20 61 20 31 20 69 6e 20 6d 65 6d 6f 72 79 20  e a 1 in memory 
1c6c0 63 65 6c 6c 20 70 44 65 73 74 2d 3e 69 53 44 50  cell pDest->iSDP
1c6d0 61 72 6d 20 69 66 20 74 68 65 20 72 65 73 75 6c  arm if the resul
1c6e0 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  t.**            
1c6f0 20 20 20 20 20 20 20 20 20 73 65 74 20 69 73 20           set is 
1c700 6e 6f 74 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a  not empty..**.**
1c710 20 20 20 20 20 53 52 54 5f 44 69 73 63 61 72 64       SRT_Discard
1c720 20 20 20 20 20 54 68 72 6f 77 20 74 68 65 20 72       Throw the r
1c730 65 73 75 6c 74 73 20 61 77 61 79 2e 20 20 54 68  esults away.  Th
1c740 69 73 20 69 73 20 75 73 65 64 20 62 79 20 53 45  is is used by SE
1c750 4c 45 43 54 0a 2a 2a 20 20 20 20 20 20 20 20 20  LECT.**         
1c760 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74              stat
1c770 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74 72  ements within tr
1c780 69 67 67 65 72 73 20 77 68 6f 73 65 20 6f 6e 6c  iggers whose onl
1c790 79 20 70 75 72 70 6f 73 65 20 69 73 0a 2a 2a 20  y purpose is.** 
1c7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c7b0 20 20 20 20 74 68 65 20 73 69 64 65 2d 65 66 66      the side-eff
1c7c0 65 63 74 73 20 6f 66 20 66 75 6e 63 74 69 6f 6e  ects of function
1c7d0 73 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20  s..**.** All of 
1c7e0 74 68 65 20 61 62 6f 76 65 20 61 72 65 20 66 72  the above are fr
1c7f0 65 65 20 74 6f 20 69 67 6e 6f 72 65 20 74 68 65  ee to ignore the
1c800 69 72 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  ir ORDER BY clau
1c810 73 65 2e 20 54 68 6f 73 65 20 74 68 61 74 0a 2a  se. Those that.*
1c820 2a 20 66 6f 6c 6c 6f 77 20 6d 75 73 74 20 68 6f  * follow must ho
1c830 6e 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42 59  nor the ORDER BY
1c840 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20   clause..**.**  
1c850 20 20 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20     SRT_Output   
1c860 20 20 20 47 65 6e 65 72 61 74 65 20 61 20 72 6f     Generate a ro
1c870 77 20 6f 66 20 6f 75 74 70 75 74 20 28 75 73 69  w of output (usi
1c880 6e 67 20 74 68 65 20 4f 50 5f 52 65 73 75 6c 74  ng the OP_Result
1c890 52 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  Row.**          
1c8a0 20 20 20 20 20 20 20 20 20 20 20 6f 70 63 6f 64             opcod
1c8b0 65 29 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20  e) for each row 
1c8c0 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  in the result se
1c8d0 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  t..**.**     SRT
1c8e0 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 4f 6e 6c  _Mem         Onl
1c8f0 79 20 76 61 6c 69 64 20 69 66 20 74 68 65 20 72  y valid if the r
1c900 65 73 75 6c 74 20 69 73 20 61 20 73 69 6e 67 6c  esult is a singl
1c910 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 20 20 20  e column..**    
1c920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c930 20 53 74 6f 72 65 20 74 68 65 20 66 69 72 73 74   Store the first
1c940 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 66   column of the f
1c950 69 72 73 74 20 72 65 73 75 6c 74 20 72 6f 77 0a  irst result row.
1c960 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1c970 20 20 20 20 20 20 20 69 6e 20 72 65 67 69 73 74         in regist
1c980 65 72 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  er pDest->iSDPar
1c990 6d 20 74 68 65 6e 20 61 62 61 6e 64 6f 6e 20 74  m then abandon t
1c9a0 68 65 20 72 65 73 74 0a 2a 2a 20 20 20 20 20 20  he rest.**      
1c9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
1c9c0 66 20 74 68 65 20 71 75 65 72 79 2e 20 20 54 68  f the query.  Th
1c9d0 69 73 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 69  is destination i
1c9e0 6d 70 6c 69 65 73 20 22 4c 49 4d 49 54 20 31 22  mplies "LIMIT 1"
1c9f0 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1ca00 53 65 74 20 20 20 20 20 20 20 20 20 54 68 65 20  Set         The 
1ca10 72 65 73 75 6c 74 20 6d 75 73 74 20 62 65 20 61  result must be a
1ca20 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20   single column. 
1ca30 20 53 74 6f 72 65 20 65 61 63 68 0a 2a 2a 20 20   Store each.**  
1ca40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca50 20 20 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74     row of result
1ca60 20 61 73 20 74 68 65 20 6b 65 79 20 69 6e 20 74   as the key in t
1ca70 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50  able pDest->iSDP
1ca80 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20  arm..**         
1ca90 20 20 20 20 20 20 20 20 20 20 20 20 41 70 70 6c              Appl
1caa0 79 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 70  y the affinity p
1cab0 44 65 73 74 2d 3e 61 66 66 53 64 73 74 20 62 65  Dest->affSdst be
1cac0 66 6f 72 65 20 73 74 6f 72 69 6e 67 0a 2a 2a 20  fore storing.** 
1cad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cae0 20 20 20 20 72 65 73 75 6c 74 73 2e 20 20 55 73      results.  Us
1caf0 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20  ed to implement 
1cb00 22 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29  "IN (SELECT ...)
1cb10 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  "..**.**     SRT
1cb20 5f 45 70 68 65 6d 54 61 62 20 20 20 20 43 72 65  _EphemTab    Cre
1cb30 61 74 65 20 61 6e 20 74 65 6d 70 6f 72 61 72 79  ate an temporary
1cb40 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53   table pDest->iS
1cb50 44 50 61 72 6d 20 61 6e 64 20 73 74 6f 72 65 0a  DParm and store.
1cb60 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1cb70 20 20 20 20 20 20 20 74 68 65 20 72 65 73 75 6c         the resul
1cb80 74 20 74 68 65 72 65 2e 20 54 68 65 20 63 75 72  t there. The cur
1cb90 73 6f 72 20 69 73 20 6c 65 66 74 20 6f 70 65 6e  sor is left open
1cba0 20 61 66 74 65 72 0a 2a 2a 20 20 20 20 20 20 20   after.**       
1cbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1cbc0 74 75 72 6e 69 6e 67 2e 20 20 54 68 69 73 20 69  turning.  This i
1cbd0 73 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65  s like SRT_Table
1cbe0 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a 2a 20   except that.** 
1cbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc00 20 20 20 20 74 68 69 73 20 64 65 73 74 69 6e 61      this destina
1cc10 74 69 6f 6e 20 75 73 65 73 20 4f 50 5f 4f 70 65  tion uses OP_Ope
1cc20 6e 45 70 68 65 6d 65 72 61 6c 20 74 6f 20 63 72  nEphemeral to cr
1cc30 65 61 74 65 0a 2a 2a 20 20 20 20 20 20 20 20 20  eate.**         
1cc40 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
1cc50 74 61 62 6c 65 20 66 69 72 73 74 2e 0a 2a 2a 0a  table first..**.
1cc60 2a 2a 20 20 20 20 20 53 52 54 5f 43 6f 72 6f 75  **     SRT_Corou
1cc70 74 69 6e 65 20 20 20 47 65 6e 65 72 61 74 65 20  tine   Generate 
1cc80 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 74 68 61  a co-routine tha
1cc90 74 20 72 65 74 75 72 6e 73 20 61 20 6e 65 77 20  t returns a new 
1cca0 72 6f 77 20 6f 66 0a 2a 2a 20 20 20 20 20 20 20  row of.**       
1ccb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1ccc0 73 75 6c 74 73 20 65 61 63 68 20 74 69 6d 65 20  sults each time 
1ccd0 69 74 20 69 73 20 69 6e 76 6f 6b 65 64 2e 20 20  it is invoked.  
1cce0 54 68 65 20 65 6e 74 72 79 20 70 6f 69 6e 74 0a  The entry point.
1ccf0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1cd00 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f         of the co
1cd10 2d 72 6f 75 74 69 6e 65 20 69 73 20 73 74 6f 72  -routine is stor
1cd20 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 70  ed in register p
1cd30 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 0a 2a 2a  Dest->iSDParm.**
1cd40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd50 20 20 20 20 20 61 6e 64 20 74 68 65 20 72 65 73       and the res
1cd60 75 6c 74 20 72 6f 77 20 69 73 20 73 74 6f 72 65  ult row is store
1cd70 64 20 69 6e 20 70 44 65 73 74 2d 3e 6e 44 65 73  d in pDest->nDes
1cd80 74 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 20  t registers.**  
1cd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cda0 20 20 20 73 74 61 72 74 69 6e 67 20 77 69 74 68     starting with
1cdb0 20 70 44 65 73 74 2d 3e 69 53 64 73 74 2e 0a 2a   pDest->iSdst..*
1cdc0 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 54 61 62  *.**     SRT_Tab
1cdd0 6c 65 20 20 20 20 20 20 20 53 74 6f 72 65 20 72  le       Store r
1cde0 65 73 75 6c 74 73 20 69 6e 20 74 65 6d 70 6f 72  esults in tempor
1cdf0 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d  ary table pDest-
1ce00 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20  >iSDParm..**    
1ce10 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20   SRT_Fifo       
1ce20 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53 52   This is like SR
1ce30 54 5f 45 70 68 65 6d 54 61 62 20 65 78 63 65 70  T_EphemTab excep
1ce40 74 20 74 68 61 74 20 74 68 65 20 74 61 62 6c 65  t that the table
1ce50 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1ce60 20 20 20 20 20 20 20 20 69 73 20 61 73 73 75 6d          is assum
1ce70 65 64 20 74 6f 20 61 6c 72 65 61 64 79 20 62 65  ed to already be
1ce80 20 6f 70 65 6e 2e 20 20 53 52 54 5f 46 69 66 6f   open.  SRT_Fifo
1ce90 20 68 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20   has.**         
1cea0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
1ceb0 61 64 64 69 74 69 6f 6e 61 6c 20 70 72 6f 70 65  additional prope
1cec0 72 74 79 20 6f 66 20 62 65 69 6e 67 20 61 62 6c  rty of being abl
1ced0 65 20 74 6f 20 69 67 6e 6f 72 65 0a 2a 2a 20 20  e to ignore.**  
1cee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cef0 20 20 20 74 68 65 20 4f 52 44 45 52 20 42 59 20     the ORDER BY 
1cf00 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20  clause..**.**   
1cf10 20 20 53 52 54 5f 44 69 73 74 46 69 66 6f 20 20    SRT_DistFifo  
1cf20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20    Store results 
1cf30 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79 20 74  in a temporary t
1cf40 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50  able pDest->iSDP
1cf50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20  arm..**         
1cf60 20 20 20 20 20 20 20 20 20 20 20 20 42 75 74 20              But 
1cf70 61 6c 73 6f 20 75 73 65 20 74 65 6d 70 6f 72 61  also use tempora
1cf80 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e  ry table pDest->
1cf90 69 53 44 50 61 72 6d 2b 31 20 61 73 0a 2a 2a 20  iSDParm+1 as.** 
1cfa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cfb0 20 20 20 20 61 20 72 65 63 6f 72 64 20 6f 66 20      a record of 
1cfc0 61 6c 6c 20 70 72 69 6f 72 20 72 65 73 75 6c 74  all prior result
1cfd0 73 20 61 6e 64 20 69 67 6e 6f 72 65 20 61 6e 79  s and ignore any
1cfe0 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20 20 20   duplicate.**   
1cff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d000 20 20 72 6f 77 73 2e 20 20 4e 61 6d 65 20 6d 65    rows.  Name me
1d010 61 6e 73 3a 20 20 22 44 69 73 74 69 6e 63 74 20  ans:  "Distinct 
1d020 46 69 66 6f 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  Fifo"..**.**    
1d030 20 53 52 54 5f 51 75 65 75 65 20 20 20 20 20 20   SRT_Queue      
1d040 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69   Store results i
1d050 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65 75 65  n priority queue
1d060 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20   pDest->iSDParm 
1d070 28 72 65 61 6c 6c 79 0a 2a 2a 20 20 20 20 20 20  (really.**      
1d080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
1d090 6e 20 69 6e 64 65 78 29 2e 20 20 41 70 70 65 6e  n index).  Appen
1d0a0 64 20 61 20 73 65 71 75 65 6e 63 65 20 6e 75 6d  d a sequence num
1d0b0 62 65 72 20 73 6f 20 74 68 61 74 20 61 6c 6c 20  ber so that all 
1d0c0 65 6e 74 72 69 65 73 0a 2a 2a 20 20 20 20 20 20  entries.**      
1d0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
1d0e0 72 65 20 64 69 73 74 69 6e 63 74 2e 0a 2a 2a 0a  re distinct..**.
1d0f0 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 74 51  **     SRT_DistQ
1d100 75 65 75 65 20 20 20 53 74 6f 72 65 20 72 65 73  ueue   Store res
1d110 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69 74 79  ults in priority
1d120 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e 69 53   queue pDest->iS
1d130 44 50 61 72 6d 20 6f 6e 6c 79 20 69 66 0a 2a 2a  DParm only if.**
1d140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d150 20 20 20 20 20 74 68 65 20 73 61 6d 65 20 72 65       the same re
1d160 63 6f 72 64 20 68 61 73 20 6e 65 76 65 72 20 62  cord has never b
1d170 65 65 6e 20 73 74 6f 72 65 64 20 62 65 66 6f 72  een stored befor
1d180 65 2e 20 20 54 68 65 0a 2a 2a 20 20 20 20 20 20  e.  The.**      
1d190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1d1a0 6e 64 65 78 20 61 74 20 70 44 65 73 74 2d 3e 69  ndex at pDest->i
1d1b0 53 44 50 61 72 6d 2b 31 20 68 6f 6c 64 20 61 6c  SDParm+1 hold al
1d1c0 6c 20 70 72 69 6f 72 20 73 74 6f 72 65 73 2e 0a  l prior stores..
1d1d0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 55  */.#define SRT_U
1d1e0 6e 69 6f 6e 20 20 20 20 20 20 20 20 31 20 20 2f  nion        1  /
1d1f0 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61  * Store result a
1d200 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64  s keys in an ind
1d210 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ex */.#define SR
1d220 54 5f 45 78 63 65 70 74 20 20 20 20 20 20 20 32  T_Except       2
1d230 20 20 2f 2a 20 52 65 6d 6f 76 65 20 72 65 73 75    /* Remove resu
1d240 6c 74 20 66 72 6f 6d 20 61 20 55 4e 49 4f 4e 20  lt from a UNION 
1d250 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65  index */.#define
1d260 20 53 52 54 5f 45 78 69 73 74 73 20 20 20 20 20   SRT_Exists     
1d270 20 20 33 20 20 2f 2a 20 53 74 6f 72 65 20 31 20    3  /* Store 1 
1d280 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  if the result is
1d290 20 6e 6f 74 20 65 6d 70 74 79 20 2a 2f 0a 23 64   not empty */.#d
1d2a0 65 66 69 6e 65 20 53 52 54 5f 44 69 73 63 61 72  efine SRT_Discar
1d2b0 64 20 20 20 20 20 20 34 20 20 2f 2a 20 44 6f 20  d      4  /* Do 
1d2c0 6e 6f 74 20 73 61 76 65 20 74 68 65 20 72 65 73  not save the res
1d2d0 75 6c 74 73 20 61 6e 79 77 68 65 72 65 20 2a 2f  ults anywhere */
1d2e0 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 46 69 66  .#define SRT_Fif
1d2f0 6f 20 20 20 20 20 20 20 20 20 35 20 20 2f 2a 20  o         5  /* 
1d300 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20  Store result as 
1d310 64 61 74 61 20 77 69 74 68 20 61 6e 20 61 75 74  data with an aut
1d320 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a  omatic rowid */.
1d330 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 74  #define SRT_Dist
1d340 46 69 66 6f 20 20 20 20 20 36 20 20 2f 2a 20 4c  Fifo     6  /* L
1d350 69 6b 65 20 53 52 54 5f 46 69 66 6f 2c 20 62 75  ike SRT_Fifo, bu
1d360 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c 74 73  t unique results
1d370 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65   only */.#define
1d380 20 53 52 54 5f 51 75 65 75 65 20 20 20 20 20 20   SRT_Queue      
1d390 20 20 37 20 20 2f 2a 20 53 74 6f 72 65 20 72 65    7  /* Store re
1d3a0 73 75 6c 74 20 69 6e 20 61 6e 20 71 75 65 75 65  sult in an queue
1d3b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1d3c0 44 69 73 74 51 75 65 75 65 20 20 20 20 38 20 20  DistQueue    8  
1d3d0 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 51 75 65 75  /* Like SRT_Queu
1d3e0 65 2c 20 62 75 74 20 75 6e 69 71 75 65 20 72 65  e, but unique re
1d3f0 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f  sults only */../
1d400 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59 20 63  * The ORDER BY c
1d410 6c 61 75 73 65 20 69 73 20 69 67 6e 6f 72 65 64  lause is ignored
1d420 20 66 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65 20   for all of the 
1d430 61 62 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e 65  above */.#define
1d440 20 49 67 6e 6f 72 61 62 6c 65 4f 72 64 65 72 62   IgnorableOrderb
1d450 79 28 58 29 20 28 28 58 2d 3e 65 44 65 73 74 29  y(X) ((X->eDest)
1d460 3c 3d 53 52 54 5f 44 69 73 74 51 75 65 75 65 29  <=SRT_DistQueue)
1d470 0a 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4f 75  ..#define SRT_Ou
1d480 74 70 75 74 20 20 20 20 20 20 20 39 20 20 2f 2a  tput       9  /*
1d490 20 4f 75 74 70 75 74 20 65 61 63 68 20 72 6f 77   Output each row
1d4a0 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64   of result */.#d
1d4b0 65 66 69 6e 65 20 53 52 54 5f 4d 65 6d 20 20 20  efine SRT_Mem   
1d4c0 20 20 20 20 20 20 31 30 20 20 2f 2a 20 53 74 6f        10  /* Sto
1d4d0 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61 20 6d  re result in a m
1d4e0 65 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a 23 64  emory cell */.#d
1d4f0 65 66 69 6e 65 20 53 52 54 5f 53 65 74 20 20 20  efine SRT_Set   
1d500 20 20 20 20 20 20 31 31 20 20 2f 2a 20 53 74 6f        11  /* Sto
1d510 72 65 20 72 65 73 75 6c 74 73 20 61 73 20 6b 65  re results as ke
1d520 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a  ys in an index *
1d530 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 70  /.#define SRT_Ep
1d540 68 65 6d 54 61 62 20 20 20 20 31 32 20 20 2f 2a  hemTab    12  /*
1d550 20 43 72 65 61 74 65 20 74 72 61 6e 73 69 65 6e   Create transien
1d560 74 20 74 61 62 20 61 6e 64 20 73 74 6f 72 65 20  t tab and store 
1d570 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 2a  like SRT_Table *
1d580 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 43 6f  /.#define SRT_Co
1d590 72 6f 75 74 69 6e 65 20 20 20 31 33 20 20 2f 2a  routine   13  /*
1d5a0 20 47 65 6e 65 72 61 74 65 20 61 20 73 69 6e 67   Generate a sing
1d5b0 6c 65 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74  le row of result
1d5c0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1d5d0 54 61 62 6c 65 20 20 20 20 20 20 20 31 34 20 20  Table       14  
1d5e0 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
1d5f0 61 73 20 64 61 74 61 20 77 69 74 68 20 61 6e 20  as data with an 
1d600 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69 64 20  automatic rowid 
1d610 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  */../*.** An ins
1d620 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 62  tance of this ob
1d630 6a 65 63 74 20 64 65 73 63 72 69 62 65 73 20 77  ject describes w
1d640 68 65 72 65 20 74 6f 20 70 75 74 20 6f 66 20 74  here to put of t
1d650 68 65 20 72 65 73 75 6c 74 73 20 6f 66 0a 2a 2a  he results of.**
1d660 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   a SELECT statem
1d670 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  ent..*/.struct S
1d680 65 6c 65 63 74 44 65 73 74 20 7b 0a 20 20 75 38  electDest {.  u8
1d690 20 65 44 65 73 74 3b 20 20 20 20 20 20 20 20 20   eDest;         
1d6a0 20 20 20 2f 2a 20 48 6f 77 20 74 6f 20 64 69 73     /* How to dis
1d6b0 70 6f 73 65 20 6f 66 20 74 68 65 20 72 65 73 75  pose of the resu
1d6c0 6c 74 73 2e 20 20 4f 6e 20 6f 66 20 53 52 54 5f  lts.  On of SRT_
1d6d0 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a 20 20 63 68  * above. */.  ch
1d6e0 61 72 20 2a 7a 41 66 66 53 64 73 74 3b 20 20 20  ar *zAffSdst;   
1d6f0 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 75     /* Affinity u
1d700 73 65 64 20 77 68 65 6e 20 65 44 65 73 74 3d 3d  sed when eDest==
1d710 53 52 54 5f 53 65 74 20 2a 2f 0a 20 20 69 6e 74  SRT_Set */.  int
1d720 20 69 53 44 50 61 72 6d 3b 20 20 20 20 20 20 20   iSDParm;       
1d730 20 20 2f 2a 20 41 20 70 61 72 61 6d 65 74 65 72    /* A parameter
1d740 20 75 73 65 64 20 62 79 20 74 68 65 20 65 44 65   used by the eDe
1d750 73 74 20 64 69 73 70 6f 73 61 6c 20 6d 65 74 68  st disposal meth
1d760 6f 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 64 73  od */.  int iSds
1d770 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
1d780 42 61 73 65 20 72 65 67 69 73 74 65 72 20 77 68  Base register wh
1d790 65 72 65 20 72 65 73 75 6c 74 73 20 61 72 65 20  ere results are 
1d7a0 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74  written */.  int
1d7b0 20 6e 53 64 73 74 3b 20 20 20 20 20 20 20 20 20   nSdst;         
1d7c0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72    /* Number of r
1d7d0 65 67 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74  egisters allocat
1d7e0 65 64 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  ed */.  ExprList
1d7f0 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 2f 2a 20   *pOrderBy;  /* 
1d800 4b 65 79 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20  Key columns for 
1d810 53 52 54 5f 51 75 65 75 65 20 61 6e 64 20 53 52  SRT_Queue and SR
1d820 54 5f 44 69 73 74 51 75 65 75 65 20 2a 2f 0a 7d  T_DistQueue */.}
1d830 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67 20  ;../*.** During 
1d840 63 6f 64 65 20 67 65 6e 65 72 61 74 69 6f 6e 20  code generation 
1d850 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 20 74 68  of statements th
1d860 61 74 20 64 6f 20 69 6e 73 65 72 74 73 20 69 6e  at do inserts in
1d870 74 6f 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  to AUTOINCREMENT
1d880 0a 2a 2a 20 74 61 62 6c 65 73 2c 20 74 68 65 20  .** tables, the 
1d890 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f 72 6d  following inform
1d8a0 61 74 69 6f 6e 20 69 73 20 61 74 74 61 63 68 65  ation is attache
1d8b0 64 20 74 6f 20 74 68 65 20 54 61 62 6c 65 2e 75  d to the Table.u
1d8c0 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f  .autoInc.p.** po
1d8d0 69 6e 74 65 72 20 6f 66 20 65 61 63 68 20 61 75  inter of each au
1d8e0 74 6f 69 6e 63 72 65 6d 65 6e 74 20 74 61 62 6c  toincrement tabl
1d8f0 65 20 74 6f 20 72 65 63 6f 72 64 20 73 6f 6d 65  e to record some
1d900 20 73 69 64 65 20 69 6e 66 6f 72 6d 61 74 69 6f   side informatio
1d910 6e 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 63 6f  n that.** the co
1d920 64 65 20 67 65 6e 65 72 61 74 6f 72 20 6e 65 65  de generator nee
1d930 64 73 2e 20 20 57 65 20 68 61 76 65 20 74 6f 20  ds.  We have to 
1d940 6b 65 65 70 20 70 65 72 2d 74 61 62 6c 65 20 61  keep per-table a
1d950 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20  utoincrement.** 
1d960 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 63  information in c
1d970 61 73 65 20 69 6e 73 65 72 74 73 20 61 72 65 20  ase inserts are 
1d980 64 6f 6e 65 20 77 69 74 68 69 6e 20 74 72 69 67  done within trig
1d990 67 65 72 73 2e 20 20 54 72 69 67 67 65 72 73 20  gers.  Triggers 
1d9a0 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c  do not.** normal
1d9b0 6c 79 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68  ly coordinate th
1d9c0 65 69 72 20 61 63 74 69 76 69 74 69 65 73 2c 20  eir activities, 
1d9d0 62 75 74 20 77 65 20 64 6f 20 6e 65 65 64 20 74  but we do need t
1d9e0 6f 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65  o coordinate the
1d9f0 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20 61 6e 64 20  .** loading and 
1da00 73 61 76 69 6e 67 20 6f 66 20 61 75 74 6f 69 6e  saving of autoin
1da10 63 72 65 6d 65 6e 74 20 69 6e 66 6f 72 6d 61 74  crement informat
1da20 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41  ion..*/.struct A
1da30 75 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20 20 41  utoincInfo {.  A
1da40 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e 65 78  utoincInfo *pNex
1da50 74 3b 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 66  t;   /* Next inf
1da60 6f 20 62 6c 6f 63 6b 20 69 6e 20 61 20 6c 69 73  o block in a lis
1da70 74 20 6f 66 20 74 68 65 6d 20 61 6c 6c 20 2a 2f  t of them all */
1da80 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20  .  Table *pTab; 
1da90 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c           /* Tabl
1daa0 65 20 74 68 69 73 20 69 6e 66 6f 20 62 6c 6f 63  e this info bloc
1dab0 6b 20 72 65 66 65 72 73 20 74 6f 20 2a 2f 0a 20  k refers to */. 
1dac0 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20   int iDb;       
1dad0 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
1dae0 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d  in sqlite3.aDb[]
1daf0 20 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c   of database hol
1db00 64 69 6e 67 20 70 54 61 62 20 2a 2f 0a 20 20 69  ding pTab */.  i
1db10 6e 74 20 72 65 67 43 74 72 3b 20 20 20 20 20 20  nt regCtr;      
1db20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72       /* Memory r
1db30 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
1db40 74 68 65 20 72 6f 77 69 64 20 63 6f 75 6e 74 65  the rowid counte
1db50 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53  r */.};../*.** S
1db60 69 7a 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ize of the colum
1db70 6e 20 63 61 63 68 65 0a 2a 2f 0a 23 69 66 6e 64  n cache.*/.#ifnd
1db80 65 66 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43  ef SQLITE_N_COLC
1db90 41 43 48 45 0a 23 20 64 65 66 69 6e 65 20 53 51  ACHE.# define SQ
1dba0 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 20  LITE_N_COLCACHE 
1dbb0 31 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  10.#endif../*.**
1dbc0 20 41 74 20 6c 65 61 73 74 20 6f 6e 65 20 69 6e   At least one in
1dbd0 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
1dbe0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
1dbf0 65 20 69 73 20 63 72 65 61 74 65 64 20 66 6f 72  e is created for
1dc00 20 65 61 63 68 0a 2a 2a 20 74 72 69 67 67 65 72   each.** trigger
1dc10 20 74 68 61 74 20 6d 61 79 20 62 65 20 66 69 72   that may be fir
1dc20 65 64 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67  ed while parsing
1dc30 20 61 6e 20 49 4e 53 45 52 54 2c 20 55 50 44 41   an INSERT, UPDA
1dc40 54 45 20 6f 72 20 44 45 4c 45 54 45 0a 2a 2a 20  TE or DELETE.** 
1dc50 73 74 61 74 65 6d 65 6e 74 2e 20 41 6c 6c 20 73  statement. All s
1dc60 75 63 68 20 6f 62 6a 65 63 74 73 20 61 72 65 20  uch objects are 
1dc70 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 6c 69  stored in the li
1dc80 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65 64  nked list headed
1dc90 20 61 74 0a 2a 2a 20 50 61 72 73 65 2e 70 54 72   at.** Parse.pTr
1dca0 69 67 67 65 72 50 72 67 20 61 6e 64 20 64 65 6c  iggerPrg and del
1dcb0 65 74 65 64 20 6f 6e 63 65 20 73 74 61 74 65 6d  eted once statem
1dcc0 65 6e 74 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20  ent compilation 
1dcd0 68 61 73 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70  has been.** comp
1dce0 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56  leted..**.** A V
1dcf0 64 62 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  dbe sub-program 
1dd00 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20  that implements 
1dd10 74 68 65 20 62 6f 64 79 20 61 6e 64 20 57 48 45  the body and WHE
1dd20 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 72 69 67  N clause of trig
1dd30 67 65 72 0a 2a 2a 20 54 72 69 67 67 65 72 50 72  ger.** TriggerPr
1dd40 67 2e 70 54 72 69 67 67 65 72 2c 20 61 73 73 75  g.pTrigger, assu
1dd50 6d 69 6e 67 20 61 20 64 65 66 61 75 6c 74 20 4f  ming a default O
1dd60 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73  N CONFLICT claus
1dd70 65 20 6f 66 0a 2a 2a 20 54 72 69 67 67 65 72 50  e of.** TriggerP
1dd80 72 67 2e 6f 72 63 6f 6e 66 2c 20 69 73 20 73 74  rg.orconf, is st
1dd90 6f 72 65 64 20 69 6e 20 74 68 65 20 54 72 69 67  ored in the Trig
1dda0 67 65 72 50 72 67 2e 70 50 72 6f 67 72 61 6d 20  gerPrg.pProgram 
1ddb0 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 20 54 68 65  variable..** The
1ddc0 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50   Parse.pTriggerP
1ddd0 72 67 20 6c 69 73 74 20 6e 65 76 65 72 20 63 6f  rg list never co
1dde0 6e 74 61 69 6e 73 20 74 77 6f 20 65 6e 74 72 69  ntains two entri
1ddf0 65 73 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  es with the same
1de00 0a 2a 2a 20 76 61 6c 75 65 73 20 66 6f 72 20 62  .** values for b
1de10 6f 74 68 20 70 54 72 69 67 67 65 72 20 61 6e 64  oth pTrigger and
1de20 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54   orconf..**.** T
1de30 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 61 43  he TriggerPrg.aC
1de40 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61 72 69 61 62  olmask[0] variab
1de50 6c 65 20 69 73 20 73 65 74 20 74 6f 20 61 20 6d  le is set to a m
1de60 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c  ask of old.* col
1de70 75 6d 6e 73 0a 2a 2a 20 61 63 63 65 73 73 65 64  umns.** accessed
1de80 20 28 6f 72 20 73 65 74 20 74 6f 20 30 20 66 6f   (or set to 0 fo
1de90 72 20 74 72 69 67 67 65 72 73 20 66 69 72 65 64  r triggers fired
1dea0 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f 66 20   as a result of 
1deb0 49 4e 53 45 52 54 0a 2a 2a 20 73 74 61 74 65 6d  INSERT.** statem
1dec0 65 6e 74 73 29 2e 20 53 69 6d 69 6c 61 72 6c 79  ents). Similarly
1ded0 2c 20 74 68 65 20 54 72 69 67 67 65 72 50 72 67  , the TriggerPrg
1dee0 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61 72  .aColmask[1] var
1def0 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 0a  iable is set to.
1df00 2a 2a 20 61 20 6d 61 73 6b 20 6f 66 20 6e 65 77  ** a mask of new
1df10 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75 73 65 64 20  .* columns used 
1df20 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a  by the program..
1df30 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65  */.struct Trigge
1df40 72 50 72 67 20 7b 0a 20 20 54 72 69 67 67 65 72  rPrg {.  Trigger
1df50 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20 20 20   *pTrigger;     
1df60 20 2f 2a 20 54 72 69 67 67 65 72 20 74 68 69 73   /* Trigger this
1df70 20 70 72 6f 67 72 61 6d 20 77 61 73 20 63 6f 64   program was cod
1df80 65 64 20 66 72 6f 6d 20 2a 2f 0a 20 20 54 72 69  ed from */.  Tri
1df90 67 67 65 72 50 72 67 20 2a 70 4e 65 78 74 3b 20  ggerPrg *pNext; 
1dfa0 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74       /* Next ent
1dfb0 72 79 20 69 6e 20 50 61 72 73 65 2e 70 54 72 69  ry in Parse.pTri
1dfc0 67 67 65 72 50 72 67 20 6c 69 73 74 20 2a 2f 0a  ggerPrg list */.
1dfd0 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50    SubProgram *pP
1dfe0 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 50 72 6f  rogram;   /* Pro
1dff0 67 72 61 6d 20 69 6d 70 6c 65 6d 65 6e 74 69 6e  gram implementin
1e000 67 20 70 54 72 69 67 67 65 72 2f 6f 72 63 6f 6e  g pTrigger/orcon
1e010 66 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 63 6f 6e  f */.  int orcon
1e020 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  f;             /
1e030 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e  * Default ON CON
1e040 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 2a 2f 0a  FLICT policy */.
1e050 20 20 75 33 32 20 61 43 6f 6c 6d 61 73 6b 5b 32    u32 aColmask[2
1e060 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73  ];        /* Mas
1e070 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65 77  ks of old.*, new
1e080 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61 63 63 65 73  .* columns acces
1e090 73 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  sed */.};../*.**
1e0a0 20 54 68 65 20 79 44 62 4d 61 73 6b 20 64 61 74   The yDbMask dat
1e0b0 61 74 79 70 65 20 66 6f 72 20 74 68 65 20 62 69  atype for the bi
1e0c0 74 6d 61 73 6b 20 6f 66 20 61 6c 6c 20 61 74 74  tmask of all att
1e0d0 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2e  ached databases.
1e0e0 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  .*/.#if SQLITE_M
1e0f0 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20  AX_ATTACHED>30. 
1e100 20 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65   typedef unsigne
1e110 64 20 63 68 61 72 20 79 44 62 4d 61 73 6b 5b 28  d char yDbMask[(
1e120 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43  SQLITE_MAX_ATTAC
1e130 48 45 44 2b 39 29 2f 38 5d 3b 0a 23 20 64 65 66  HED+9)/8];.# def
1e140 69 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d  ine DbMaskTest(M
1e150 2c 49 29 20 20 20 20 28 28 28 4d 29 5b 28 49 29  ,I)    (((M)[(I)
1e160 2f 38 5d 26 28 31 3c 3c 28 28 49 29 26 37 29 29  /8]&(1<<((I)&7))
1e170 29 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44  )!=0).# define D
1e180 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20  bMaskZero(M)    
1e190 20 20 6d 65 6d 73 65 74 28 28 4d 29 2c 30 2c 73    memset((M),0,s
1e1a0 69 7a 65 6f 66 28 4d 29 29 0a 23 20 64 65 66 69  izeof(M)).# defi
1e1b0 6e 65 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49  ne DbMaskSet(M,I
1e1c0 29 20 20 20 20 20 28 4d 29 5b 28 49 29 2f 38 5d  )     (M)[(I)/8]
1e1d0 7c 3d 28 31 3c 3c 28 28 49 29 26 37 29 29 0a 23  |=(1<<((I)&7)).#
1e1e0 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c   define DbMaskAl
1e1f0 6c 5a 65 72 6f 28 4d 29 20 20 20 73 71 6c 69 74  lZero(M)   sqlit
1e200 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28  e3DbMaskAllZero(
1e210 4d 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  M).# define DbMa
1e220 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28  skNonZero(M)   (
1e230 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c  sqlite3DbMaskAll
1e240 5a 65 72 6f 28 4d 29 3d 3d 30 29 0a 23 65 6c 73  Zero(M)==0).#els
1e250 65 0a 20 20 74 79 70 65 64 65 66 20 75 6e 73 69  e.  typedef unsi
1e260 67 6e 65 64 20 69 6e 74 20 79 44 62 4d 61 73 6b  gned int yDbMask
1e270 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ;.# define DbMas
1e280 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20 28 28  kTest(M,I)    ((
1e290 28 4d 29 26 28 28 28 79 44 62 4d 61 73 6b 29 31  (M)&(((yDbMask)1
1e2a0 29 3c 3c 28 49 29 29 29 21 3d 30 29 0a 23 20 64  )<<(I)))!=0).# d
1e2b0 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f  efine DbMaskZero
1e2c0 28 4d 29 20 20 20 20 20 20 28 4d 29 3d 30 0a 23  (M)      (M)=0.#
1e2d0 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 53 65   define DbMaskSe
1e2e0 74 28 4d 2c 49 29 20 20 20 20 20 28 4d 29 7c 3d  t(M,I)     (M)|=
1e2f0 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28  (((yDbMask)1)<<(
1e300 49 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  I)).# define DbM
1e310 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20  askAllZero(M)   
1e320 28 4d 29 3d 3d 30 0a 23 20 64 65 66 69 6e 65 20  (M)==0.# define 
1e330 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29  DbMaskNonZero(M)
1e340 20 20 20 28 4d 29 21 3d 30 0a 23 65 6e 64 69 66     (M)!=0.#endif
1e350 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20 70  ../*.** An SQL p
1e360 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20  arser context.  
1e370 41 20 63 6f 70 79 20 6f 66 20 74 68 69 73 20 73  A copy of this s
1e380 74 72 75 63 74 75 72 65 20 69 73 20 70 61 73 73  tructure is pass
1e390 65 64 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 68  ed through.** th
1e3a0 65 20 70 61 72 73 65 72 20 61 6e 64 20 64 6f 77  e parser and dow
1e3b0 6e 20 69 6e 74 6f 20 61 6c 6c 20 74 68 65 20 70  n into all the p
1e3c0 61 72 73 65 72 20 61 63 74 69 6f 6e 20 72 6f 75  arser action rou
1e3d0 74 69 6e 65 20 69 6e 20 6f 72 64 65 72 20 74 6f  tine in order to
1e3e0 0a 2a 2a 20 63 61 72 72 79 20 61 72 6f 75 6e 64  .** carry around
1e3f0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61   information tha
1e400 74 20 69 73 20 67 6c 6f 62 61 6c 20 74 6f 20 74  t is global to t
1e410 68 65 20 65 6e 74 69 72 65 20 70 61 72 73 65 2e  he entire parse.
1e420 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 75 63  .**.** The struc
1e430 74 75 72 65 20 69 73 20 64 69 76 69 64 65 64 20  ture is divided 
1e440 69 6e 74 6f 20 74 77 6f 20 70 61 72 74 73 2e 20  into two parts. 
1e450 20 57 68 65 6e 20 74 68 65 20 70 61 72 73 65 72   When the parser
1e460 20 61 6e 64 20 63 6f 64 65 0a 2a 2a 20 67 65 6e   and code.** gen
1e470 65 72 61 74 65 20 63 61 6c 6c 20 74 68 65 6d 73  erate call thems
1e480 65 6c 76 65 73 20 72 65 63 75 72 73 69 76 65 6c  elves recursivel
1e490 79 2c 20 74 68 65 20 66 69 72 73 74 20 70 61 72  y, the first par
1e4a0 74 20 6f 66 20 74 68 65 20 73 74 72 75 63 74 75  t of the structu
1e4b0 72 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 74 61 6e  re.** is constan
1e4c0 74 20 62 75 74 20 74 68 65 20 73 65 63 6f 6e 64  t but the second
1e4d0 20 70 61 72 74 20 69 73 20 72 65 73 65 74 20 61   part is reset a
1e4e0 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  t the beginning 
1e4f0 61 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 61  and end of.** ea
1e500 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a  ch recursion..**
1e510 0a 2a 2a 20 54 68 65 20 6e 54 61 62 6c 65 4c 6f  .** The nTableLo
1e520 63 6b 20 61 6e 64 20 61 54 61 62 6c 65 4c 6f 63  ck and aTableLoc
1e530 6b 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20  k variables are 
1e540 6f 6e 6c 79 20 75 73 65 64 20 69 66 20 74 68 65  only used if the
1e550 20 73 68 61 72 65 64 2d 63 61 63 68 65 0a 2a 2a   shared-cache.**
1e560 20 66 65 61 74 75 72 65 20 69 73 20 65 6e 61 62   feature is enab
1e570 6c 65 64 20 28 69 66 20 73 71 6c 69 74 65 33 54  led (if sqlite3T
1e580 73 64 28 29 2d 3e 75 73 65 53 68 61 72 65 64 44  sd()->useSharedD
1e590 61 74 61 20 69 73 20 74 72 75 65 29 2e 20 54 68  ata is true). Th
1e5a0 65 79 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74  ey are.** used t
1e5b0 6f 20 73 74 6f 72 65 20 74 68 65 20 73 65 74 20  o store the set 
1e5c0 6f 66 20 74 61 62 6c 65 2d 6c 6f 63 6b 73 20 72  of table-locks r
1e5d0 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20 73  equired by the s
1e5e0 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 0a 2a  tatement being.*
1e5f0 2a 20 63 6f 6d 70 69 6c 65 64 2e 20 46 75 6e 63  * compiled. Func
1e600 74 69 6f 6e 20 73 71 6c 69 74 65 33 54 61 62 6c  tion sqlite3Tabl
1e610 65 4c 6f 63 6b 28 29 20 69 73 20 75 73 65 64 20  eLock() is used 
1e620 74 6f 20 61 64 64 20 65 6e 74 72 69 65 73 20 74  to add entries t
1e630 6f 20 74 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a  o the.** list..*
1e640 2f 0a 73 74 72 75 63 74 20 50 61 72 73 65 20 7b  /.struct Parse {
1e650 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
1e660 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6d          /* The m
1e670 61 69 6e 20 64 61 74 61 62 61 73 65 20 73 74 72  ain database str
1e680 75 63 74 75 72 65 20 2a 2f 0a 20 20 63 68 61 72  ucture */.  char
1e690 20 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20 20 20   *zErrMsg;      
1e6a0 20 2f 2a 20 41 6e 20 65 72 72 6f 72 20 6d 65 73   /* An error mes
1e6b0 73 61 67 65 20 2a 2f 0a 20 20 56 64 62 65 20 2a  sage */.  Vdbe *
1e6c0 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 2f  pVdbe;         /
1e6d0 2a 20 41 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20  * An engine for 
1e6e0 65 78 65 63 75 74 69 6e 67 20 64 61 74 61 62 61  executing databa
1e6f0 73 65 20 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20  se bytecode */. 
1e700 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20   int rc;        
1e710 20 20 20 20 20 20 2f 2a 20 52 65 74 75 72 6e 20        /* Return 
1e720 63 6f 64 65 20 66 72 6f 6d 20 65 78 65 63 75 74  code from execut
1e730 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e  ion */.  u8 colN
1e740 61 6d 65 73 53 65 74 3b 20 20 20 20 20 20 2f 2a  amesSet;      /*
1e750 20 54 52 55 45 20 61 66 74 65 72 20 4f 50 5f 43   TRUE after OP_C
1e760 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61 73 20 62 65  olumnName has be
1e770 65 6e 20 69 73 73 75 65 64 20 74 6f 20 70 56 64  en issued to pVd
1e780 62 65 20 2a 2f 0a 20 20 75 38 20 63 68 65 63 6b  be */.  u8 check
1e790 53 63 68 65 6d 61 3b 20 20 20 20 20 20 2f 2a 20  Schema;      /* 
1e7a0 43 61 75 73 65 73 20 73 63 68 65 6d 61 20 63 6f  Causes schema co
1e7b0 6f 6b 69 65 20 63 68 65 63 6b 20 61 66 74 65 72  okie check after
1e7c0 20 61 6e 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75   an error */.  u
1e7d0 38 20 6e 65 73 74 65 64 3b 20 20 20 20 20 20 20  8 nested;       
1e7e0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1e7f0 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f   nested calls to
1e800 20 74 68 65 20 70 61 72 73 65 72 2f 63 6f 64 65   the parser/code
1e810 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20   generator */.  
1e820 75 38 20 6e 54 65 6d 70 52 65 67 3b 20 20 20 20  u8 nTempReg;    
1e830 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1e840 66 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69  f temporary regi
1e850 73 74 65 72 73 20 69 6e 20 61 54 65 6d 70 52 65  sters in aTempRe
1e860 67 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 73 4d 75  g[] */.  u8 isMu
1e870 6c 74 69 57 72 69 74 65 3b 20 20 20 20 20 2f 2a  ltiWrite;     /*
1e880 20 54 72 75 65 20 69 66 20 73 74 61 74 65 6d 65   True if stateme
1e890 6e 74 20 6d 61 79 20 6d 6f 64 69 66 79 2f 69 6e  nt may modify/in
1e8a0 73 65 72 74 20 6d 75 6c 74 69 70 6c 65 20 72 6f  sert multiple ro
1e8b0 77 73 20 2a 2f 0a 20 20 75 38 20 6d 61 79 41 62  ws */.  u8 mayAb
1e8c0 6f 72 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ort;         /* 
1e8d0 54 72 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e  True if statemen
1e8e0 74 20 6d 61 79 20 74 68 72 6f 77 20 61 6e 20 41  t may throw an A
1e8f0 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e 20 2a  BORT exception *
1e900 2f 0a 20 20 75 38 20 68 61 73 43 6f 6d 70 6f 75  /.  u8 hasCompou
1e910 6e 64 3b 20 20 20 20 20 20 2f 2a 20 4e 65 65 64  nd;      /* Need
1e920 20 74 6f 20 69 6e 76 6f 6b 65 20 63 6f 6e 76 65   to invoke conve
1e930 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74  rtCompoundSelect
1e940 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a  ToSubquery() */.
1e950 20 20 75 38 20 6f 6b 43 6f 6e 73 74 46 61 63 74    u8 okConstFact
1e960 6f 72 3b 20 20 20 20 2f 2a 20 4f 4b 20 74 6f 20  or;    /* OK to 
1e970 66 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74  factor out const
1e980 61 6e 74 73 20 2a 2f 0a 20 20 75 38 20 64 69 73  ants */.  u8 dis
1e990 61 62 6c 65 4c 6f 6f 6b 61 73 69 64 65 3b 20 2f  ableLookaside; /
1e9a0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 69 6d 65  * Number of time
1e9b0 73 20 6c 6f 6f 6b 61 73 69 64 65 20 68 61 73 20  s lookaside has 
1e9c0 62 65 65 6e 20 64 69 73 61 62 6c 65 64 20 2a 2f  been disabled */
1e9d0 0a 20 20 75 38 20 6e 43 6f 6c 43 61 63 68 65 3b  .  u8 nColCache;
1e9e0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1e9f0 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  r of entries in 
1ea00 61 43 6f 6c 43 61 63 68 65 5b 5d 20 2a 2f 0a 20  aColCache[] */. 
1ea10 20 69 6e 74 20 6e 52 61 6e 67 65 52 65 67 3b 20   int nRangeReg; 
1ea20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
1ea30 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 72   the temporary r
1ea40 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f  egister block */
1ea50 0a 20 20 69 6e 74 20 69 52 61 6e 67 65 52 65 67  .  int iRangeReg
1ea60 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74  ;       /* First
1ea70 20 72 65 67 69 73 74 65 72 20 69 6e 20 74 65 6d   register in tem
1ea80 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 20  porary register 
1ea90 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e  block */.  int n
1eaa0 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Err;            
1eab0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72  /* Number of err
1eac0 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e  ors seen */.  in
1ead0 74 20 6e 54 61 62 3b 20 20 20 20 20 20 20 20 20  t nTab;         
1eae0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1eaf0 70 72 65 76 69 6f 75 73 6c 79 20 61 6c 6c 6f 63  previously alloc
1eb00 61 74 65 64 20 56 44 42 45 20 63 75 72 73 6f 72  ated VDBE cursor
1eb10 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b  s */.  int nMem;
1eb20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1eb30 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20  umber of memory 
1eb40 63 65 6c 6c 73 20 75 73 65 64 20 73 6f 20 66 61  cells used so fa
1eb50 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 70 41 6c  r */.  int nOpAl
1eb60 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  loc;        /* N
1eb70 75 6d 62 65 72 20 6f 66 20 73 6c 6f 74 73 20 61  umber of slots a
1eb80 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 56 64 62  llocated for Vdb
1eb90 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74  e.aOp[] */.  int
1eba0 20 73 7a 4f 70 41 6c 6c 6f 63 3b 20 20 20 20 20   szOpAlloc;     
1ebb0 20 20 2f 2a 20 42 79 74 65 73 20 6f 66 20 6d 65    /* Bytes of me
1ebc0 6d 6f 72 79 20 73 70 61 63 65 20 61 6c 6c 6f 63  mory space alloc
1ebd0 61 74 65 64 20 66 6f 72 20 56 64 62 65 2e 61 4f  ated for Vdbe.aO
1ebe0 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 63 6b 42  p[] */.  int ckB
1ebf0 61 73 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ase;          /*
1ec00 20 42 61 73 65 20 72 65 67 69 73 74 65 72 20 6f   Base register o
1ec10 66 20 64 61 74 61 20 64 75 72 69 6e 67 20 63 68  f data during ch
1ec20 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  eck constraints 
1ec30 2a 2f 0a 20 20 69 6e 74 20 69 53 65 6c 66 54 61  */.  int iSelfTa
1ec40 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62  b;        /* Tab
1ec50 6c 65 20 6f 66 20 61 6e 20 69 6e 64 65 78 20 77  le of an index w
1ec60 68 6f 73 65 20 65 78 70 72 73 20 61 72 65 20 62  hose exprs are b
1ec70 65 69 6e 67 20 63 6f 64 65 64 20 2a 2f 0a 20 20  eing coded */.  
1ec80 69 6e 74 20 69 43 61 63 68 65 4c 65 76 65 6c 3b  int iCacheLevel;
1ec90 20 20 20 20 20 2f 2a 20 43 6f 6c 43 61 63 68 65       /* ColCache
1eca0 20 76 61 6c 69 64 20 77 68 65 6e 20 61 43 6f 6c   valid when aCol
1ecb0 43 61 63 68 65 5b 5d 2e 69 4c 65 76 65 6c 3c 3d  Cache[].iLevel<=
1ecc0 69 43 61 63 68 65 4c 65 76 65 6c 20 2a 2f 0a 20  iCacheLevel */. 
1ecd0 20 69 6e 74 20 69 43 61 63 68 65 43 6e 74 3b 20   int iCacheCnt; 
1ece0 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72        /* Counter
1ecf0 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74   used to generat
1ed00 65 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 6c 72  e aColCache[].lr
1ed10 75 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e  u values */.  in
1ed20 74 20 6e 4c 61 62 65 6c 3b 20 20 20 20 20 20 20  t nLabel;       
1ed30 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1ed40 6c 61 62 65 6c 73 20 75 73 65 64 20 2a 2f 0a 20  labels used */. 
1ed50 20 69 6e 74 20 2a 61 4c 61 62 65 6c 3b 20 20 20   int *aLabel;   
1ed60 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20 74        /* Space t
1ed70 6f 20 68 6f 6c 64 20 74 68 65 20 6c 61 62 65 6c  o hold the label
1ed80 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  s */.  ExprList 
1ed90 2a 70 43 6f 6e 73 74 45 78 70 72 3b 2f 2a 20 43  *pConstExpr;/* C
1eda0 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69  onstant expressi
1edb0 6f 6e 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 63  ons */.  Token c
1edc0 6f 6e 73 74 72 61 69 6e 74 4e 61 6d 65 3b 2f 2a  onstraintName;/*
1edd0 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e   Name of the con
1ede0 73 74 72 61 69 6e 74 20 63 75 72 72 65 6e 74 6c  straint currentl
1edf0 79 20 62 65 69 6e 67 20 70 61 72 73 65 64 20 2a  y being parsed *
1ee00 2f 0a 20 20 79 44 62 4d 61 73 6b 20 77 72 69 74  /.  yDbMask writ
1ee10 65 4d 61 73 6b 3b 20 20 20 2f 2a 20 53 74 61 72  eMask;   /* Star
1ee20 74 20 61 20 77 72 69 74 65 20 74 72 61 6e 73 61  t a write transa
1ee30 63 74 69 6f 6e 20 6f 6e 20 74 68 65 73 65 20 64  ction on these d
1ee40 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20 79 44  atabases */.  yD
1ee50 62 4d 61 73 6b 20 63 6f 6f 6b 69 65 4d 61 73 6b  bMask cookieMask
1ee60 3b 20 20 2f 2a 20 42 69 74 6d 61 73 6b 20 6f 66  ;  /* Bitmask of
1ee70 20 73 63 68 65 6d 61 20 76 65 72 69 66 69 65 64   schema verified
1ee80 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20   databases */.  
1ee90 69 6e 74 20 72 65 67 52 6f 77 69 64 3b 20 20 20  int regRowid;   
1eea0 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
1eeb0 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69 64 20 6f   holding rowid o
1eec0 66 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 65  f CREATE TABLE e
1eed0 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65  ntry */.  int re
1eee0 67 52 6f 6f 74 3b 20 20 20 20 20 20 20 20 20 2f  gRoot;         /
1eef0 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69  * Register holdi
1ef00 6e 67 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d  ng root page num
1ef10 62 65 72 20 66 6f 72 20 6e 65 77 20 6f 62 6a 65  ber for new obje
1ef20 63 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61  cts */.  int nMa
1ef30 78 41 72 67 3b 20 20 20 20 20 20 20 20 20 2f 2a  xArg;         /*
1ef40 20 4d 61 78 20 61 72 67 73 20 70 61 73 73 65 64   Max args passed
1ef50 20 74 6f 20 75 73 65 72 20 66 75 6e 63 74 69 6f   to user functio
1ef60 6e 20 62 79 20 73 75 62 2d 70 72 6f 67 72 61 6d  n by sub-program
1ef70 20 2a 2f 0a 23 69 66 20 53 45 4c 45 43 54 54 52   */.#if SELECTTR
1ef80 41 43 45 5f 45 4e 41 42 4c 45 44 0a 20 20 69 6e  ACE_ENABLED.  in
1ef90 74 20 6e 53 65 6c 65 63 74 3b 20 20 20 20 20 20  t nSelect;      
1efa0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1efb0 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
1efc0 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20  s seen */.  int 
1efd0 6e 53 65 6c 65 63 74 49 6e 64 65 6e 74 3b 20 20  nSelectIndent;  
1efe0 20 2f 2a 20 48 6f 77 20 66 61 72 20 74 6f 20 69   /* How far to i
1eff0 6e 64 65 6e 74 20 53 45 4c 45 43 54 54 52 41 43  ndent SELECTTRAC
1f000 45 28 29 20 6f 75 74 70 75 74 20 2a 2f 0a 23 65  E() output */.#e
1f010 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
1f020 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f  ITE_OMIT_SHARED_
1f030 43 41 43 48 45 0a 20 20 69 6e 74 20 6e 54 61 62  CACHE.  int nTab
1f040 6c 65 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 2f  leLock;        /
1f050 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 63 6b  * Number of lock
1f060 73 20 69 6e 20 61 54 61 62 6c 65 4c 6f 63 6b 20  s in aTableLock 
1f070 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f 63 6b 20 2a  */.  TableLock *
1f080 61 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f 2a 20 52  aTableLock; /* R
1f090 65 71 75 69 72 65 64 20 74 61 62 6c 65 20 6c 6f  equired table lo
1f0a0 63 6b 73 20 66 6f 72 20 73 68 61 72 65 64 2d 63  cks for shared-c
1f0b0 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 65 6e  ache mode */.#en
1f0c0 64 69 66 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66  dif.  AutoincInf
1f0d0 6f 20 2a 70 41 69 6e 63 3b 20 20 2f 2a 20 49 6e  o *pAinc;  /* In
1f0e0 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
1f0f0 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 63 6f  AUTOINCREMENT co
1f100 75 6e 74 65 72 73 20 2a 2f 0a 20 20 50 61 72 73  unters */.  Pars
1f110 65 20 2a 70 54 6f 70 6c 65 76 65 6c 3b 20 20 20  e *pToplevel;   
1f120 20 2f 2a 20 50 61 72 73 65 20 73 74 72 75 63 74   /* Parse struct
1f130 75 72 65 20 66 6f 72 20 6d 61 69 6e 20 70 72 6f  ure for main pro
1f140 67 72 61 6d 20 28 6f 72 20 4e 55 4c 4c 29 20 2a  gram (or NULL) *
1f150 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 72 69 67  /.  Table *pTrig
1f160 67 65 72 54 61 62 3b 20 20 2f 2a 20 54 61 62 6c  gerTab;  /* Tabl
1f170 65 20 74 72 69 67 67 65 72 73 20 61 72 65 20 62  e triggers are b
1f180 65 69 6e 67 20 63 6f 64 65 64 20 66 6f 72 20 2a  eing coded for *
1f190 2f 0a 20 20 69 6e 74 20 61 64 64 72 43 72 54 61  /.  int addrCrTa
1f1a0 62 3b 20 20 20 20 20 20 20 2f 2a 20 41 64 64 72  b;       /* Addr
1f1b0 65 73 73 20 6f 66 20 4f 50 5f 43 72 65 61 74 65  ess of OP_Create
1f1c0 54 61 62 6c 65 20 6f 70 63 6f 64 65 20 6f 6e 20  Table opcode on 
1f1d0 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a  CREATE TABLE */.
1f1e0 20 20 75 33 32 20 6e 51 75 65 72 79 4c 6f 6f 70    u32 nQueryLoop
1f1f0 3b 20 20 20 20 20 20 2f 2a 20 45 73 74 20 6e 75  ;      /* Est nu
1f200 6d 62 65 72 20 6f 66 20 69 74 65 72 61 74 69 6f  mber of iteratio
1f210 6e 73 20 6f 66 20 61 20 71 75 65 72 79 20 28 31  ns of a query (1
1f220 30 2a 6c 6f 67 32 28 4e 29 29 20 2a 2f 0a 20 20  0*log2(N)) */.  
1f230 75 33 32 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20  u32 oldmask;    
1f240 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20       /* Mask of 
1f250 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65  old.* columns re
1f260 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33  ferenced */.  u3
1f270 32 20 6e 65 77 6d 61 73 6b 3b 20 20 20 20 20 20  2 newmask;      
1f280 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65     /* Mask of ne
1f290 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65  w.* columns refe
1f2a0 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 38 20 65  renced */.  u8 e
1f2b0 54 72 69 67 67 65 72 4f 70 3b 20 20 20 20 20 20  TriggerOp;      
1f2c0 20 2f 2a 20 54 4b 5f 55 50 44 41 54 45 2c 20 54   /* TK_UPDATE, T
1f2d0 4b 5f 49 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44  K_INSERT or TK_D
1f2e0 45 4c 45 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f  ELETE */.  u8 eO
1f2f0 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20  rconf;          
1f300 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f  /* Default ON CO
1f310 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 66 6f  NFLICT policy fo
1f320 72 20 74 72 69 67 67 65 72 20 73 74 65 70 73 20  r trigger steps 
1f330 2a 2f 0a 20 20 75 38 20 64 69 73 61 62 6c 65 54  */.  u8 disableT
1f340 72 69 67 67 65 72 73 3b 20 20 2f 2a 20 54 72 75  riggers;  /* Tru
1f350 65 20 74 6f 20 64 69 73 61 62 6c 65 20 74 72 69  e to disable tri
1f360 67 67 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a  ggers */..  /***
1f370 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f380 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f390 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f3a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f3b0 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 46 69 65  *******.  ** Fie
1f3c0 6c 64 73 20 61 62 6f 76 65 20 6d 75 73 74 20 62  lds above must b
1f3d0 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f  e initialized to
1f3e0 20 7a 65 72 6f 2e 20 20 54 68 65 20 66 69 65 6c   zero.  The fiel
1f3f0 64 73 20 74 68 61 74 20 66 6f 6c 6c 6f 77 2c 0a  ds that follow,.
1f400 20 20 2a 2a 20 64 6f 77 6e 20 74 6f 20 74 68 65    ** down to the
1f410 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68   beginning of th
1f420 65 20 72 65 63 75 72 73 69 76 65 20 73 65 63 74  e recursive sect
1f430 69 6f 6e 2c 20 64 6f 20 6e 6f 74 20 6e 65 65 64  ion, do not need
1f440 20 74 6f 20 62 65 0a 20 20 2a 2a 20 69 6e 69 74   to be.  ** init
1f450 69 61 6c 69 7a 65 64 20 61 73 20 74 68 65 79 20  ialized as they 
1f460 77 69 6c 6c 20 62 65 20 73 65 74 20 62 65 66 6f  will be set befo
1f470 72 65 20 62 65 69 6e 67 20 75 73 65 64 2e 20 20  re being used.  
1f480 54 68 65 20 62 6f 75 6e 64 61 72 79 20 69 73 0a  The boundary is.
1f490 20 20 2a 2a 20 64 65 74 65 72 6d 69 6e 65 64 20    ** determined 
1f4a0 62 79 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73  by offsetof(Pars
1f4b0 65 2c 61 43 6f 6c 43 61 63 68 65 29 2e 0a 20 20  e,aColCache)..  
1f4c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f4d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f4e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f4f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f500 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 73  **********/..  s
1f510 74 72 75 63 74 20 79 43 6f 6c 43 61 63 68 65 20  truct yColCache 
1f520 7b 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65  {.    int iTable
1f530 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
1f540 61 62 6c 65 20 63 75 72 73 6f 72 20 6e 75 6d 62  able cursor numb
1f550 65 72 20 2a 2f 0a 20 20 20 20 69 31 36 20 69 43  er */.    i16 iC
1f560 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
1f570 2f 2a 20 54 61 62 6c 65 20 63 6f 6c 75 6d 6e 20  /* Table column 
1f580 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 75 38  number */.    u8
1f590 20 74 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20   tempReg;       
1f5a0 20 20 20 20 2f 2a 20 69 52 65 67 20 69 73 20 61      /* iReg is a
1f5b0 20 74 65 6d 70 20 72 65 67 69 73 74 65 72 20 74   temp register t
1f5c0 68 61 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20  hat needs to be 
1f5d0 66 72 65 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74  freed */.    int
1f5e0 20 69 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20   iLevel;        
1f5f0 20 20 20 2f 2a 20 4e 65 73 74 69 6e 67 20 6c 65     /* Nesting le
1f600 76 65 6c 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  vel */.    int i
1f610 52 65 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Reg;            
1f620 20 2f 2a 20 52 65 67 20 77 69 74 68 20 76 61 6c   /* Reg with val
1f630 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d  ue of this colum
1f640 6e 2e 20 30 20 6d 65 61 6e 73 20 6e 6f 6e 65 2e  n. 0 means none.
1f650 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6c 72 75 3b   */.    int lru;
1f660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f670 20 4c 65 61 73 74 20 72 65 63 65 6e 74 6c 79 20   Least recently 
1f680 75 73 65 64 20 65 6e 74 72 79 20 68 61 73 20 74  used entry has t
1f690 68 65 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75  he smallest valu
1f6a0 65 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 43 61 63  e */.  } aColCac
1f6b0 68 65 5b 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43  he[SQLITE_N_COLC
1f6c0 41 43 48 45 5d 3b 20 20 2f 2a 20 4f 6e 65 20 66  ACHE];  /* One f
1f6d0 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 63  or each column c
1f6e0 61 63 68 65 20 65 6e 74 72 79 20 2a 2f 0a 20 20  ache entry */.  
1f6f0 69 6e 74 20 61 54 65 6d 70 52 65 67 5b 38 5d 3b  int aTempReg[8];
1f700 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 6c 64 69          /* Holdi
1f710 6e 67 20 61 72 65 61 20 66 6f 72 20 74 65 6d 70  ng area for temp
1f720 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 73 20  orary registers 
1f730 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65  */.  Token sName
1f740 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 2f 2a 20  Token;       /* 
1f750 54 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71 75 61  Token with unqua
1f760 6c 69 66 69 65 64 20 73 63 68 65 6d 61 20 6f 62  lified schema ob
1f770 6a 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 0a 20 20  ject name */..  
1f780 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
1f790 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f7a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f7b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f7c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 41  *********.  ** A
1f7d0 62 6f 76 65 20 69 73 20 63 6f 6e 73 74 61 6e 74  bove is constant
1f7e0 20 62 65 74 77 65 65 6e 20 72 65 63 75 72 73 69   between recursi
1f7f0 6f 6e 73 2e 20 20 42 65 6c 6f 77 20 69 73 20 72  ons.  Below is r
1f800 65 73 65 74 20 62 65 66 6f 72 65 20 61 6e 64 20  eset before and 
1f810 61 66 74 65 72 0a 20 20 2a 2a 20 65 61 63 68 20  after.  ** each 
1f820 72 65 63 75 72 73 69 6f 6e 2e 20 20 54 68 65 20  recursion.  The 
1f830 62 6f 75 6e 64 61 72 79 20 62 65 74 77 65 65 6e  boundary between
1f840 20 74 68 65 73 65 20 74 77 6f 20 72 65 67 69 6f   these two regio
1f850 6e 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  ns is determined
1f860 0a 20 20 2a 2a 20 75 73 69 6e 67 20 6f 66 66 73  .  ** using offs
1f870 65 74 6f 66 28 50 61 72 73 65 2c 73 4c 61 73 74  etof(Parse,sLast
1f880 54 6f 6b 65 6e 29 20 73 6f 20 74 68 65 20 73 4c  Token) so the sL
1f890 61 73 74 54 6f 6b 65 6e 20 66 69 65 6c 64 20 6d  astToken field m
1f8a0 75 73 74 20 62 65 20 74 68 65 0a 20 20 2a 2a 20  ust be the.  ** 
1f8b0 66 69 72 73 74 20 66 69 65 6c 64 20 69 6e 20 74  first field in t
1f8c0 68 65 20 72 65 63 75 72 73 69 76 65 20 72 65 67  he recursive reg
1f8d0 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a  ion..  *********
1f8e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f8f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f900 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f910 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f  ***************/
1f920 0a 0a 20 20 54 6f 6b 65 6e 20 73 4c 61 73 74 54  ..  Token sLastT
1f930 6f 6b 65 6e 3b 20 20 20 20 20 20 20 2f 2a 20 54  oken;       /* T
1f940 68 65 20 6c 61 73 74 20 74 6f 6b 65 6e 20 70 61  he last token pa
1f950 72 73 65 64 20 2a 2f 0a 20 20 79 6e 56 61 72 20  rsed */.  ynVar 
1f960 6e 56 61 72 3b 20 20 20 20 20 20 20 20 20 20 20  nVar;           
1f970 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1f980 20 27 3f 27 20 76 61 72 69 61 62 6c 65 73 20 73   '?' variables s
1f990 65 65 6e 20 69 6e 20 74 68 65 20 53 51 4c 20 73  een in the SQL s
1f9a0 6f 20 66 61 72 20 2a 2f 0a 20 20 75 38 20 69 50  o far */.  u8 iP
1f9b0 6b 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20  kSortOrder;     
1f9c0 20 20 20 20 20 2f 2a 20 41 53 43 20 6f 72 20 44       /* ASC or D
1f9d0 45 53 43 20 66 6f 72 20 49 4e 54 45 47 45 52 20  ESC for INTEGER 
1f9e0 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20  PRIMARY KEY */. 
1f9f0 20 75 38 20 65 78 70 6c 61 69 6e 3b 20 20 20 20   u8 explain;    
1fa00 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1fa10 75 65 20 69 66 20 74 68 65 20 45 58 50 4c 41 49  ue if the EXPLAI
1fa20 4e 20 66 6c 61 67 20 69 73 20 66 6f 75 6e 64 20  N flag is found 
1fa30 6f 6e 20 74 68 65 20 71 75 65 72 79 20 2a 2f 0a  on the query */.
1fa40 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1fa50 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
1fa60 0a 20 20 75 38 20 64 65 63 6c 61 72 65 56 74 61  .  u8 declareVta
1fa70 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  b;           /* 
1fa80 54 72 75 65 20 69 66 20 69 6e 73 69 64 65 20 73  True if inside s
1fa90 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76  qlite3_declare_v
1faa0 74 61 62 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e  tab() */.  int n
1fab0 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20  VtabLock;       
1fac0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1fad0 66 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73  f virtual tables
1fae0 20 74 6f 20 6c 6f 63 6b 20 2a 2f 0a 23 65 6e 64   to lock */.#end
1faf0 69 66 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74  if.  int nHeight
1fb00 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
1fb10 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 74 72 65  * Expression tre
1fb20 65 20 68 65 69 67 68 74 20 6f 66 20 63 75 72 72  e height of curr
1fb30 65 6e 74 20 73 75 62 2d 73 65 6c 65 63 74 20 2a  ent sub-select *
1fb40 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
1fb50 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20  _OMIT_EXPLAIN.  
1fb60 69 6e 74 20 69 53 65 6c 65 63 74 49 64 3b 20 20  int iSelectId;  
1fb70 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 44 20            /* ID 
1fb80 6f 66 20 63 75 72 72 65 6e 74 20 73 65 6c 65 63  of current selec
1fb90 74 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75  t for EXPLAIN ou
1fba0 74 70 75 74 20 2a 2f 0a 20 20 69 6e 74 20 69 4e  tput */.  int iN
1fbb0 65 78 74 53 65 6c 65 63 74 49 64 3b 20 20 20 20  extSelectId;    
1fbc0 20 20 20 20 2f 2a 20 4e 65 78 74 20 61 76 61 69      /* Next avai
1fbd0 6c 61 62 6c 65 20 73 65 6c 65 63 74 20 49 44 20  lable select ID 
1fbe0 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70  for EXPLAIN outp
1fbf0 75 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 56  ut */.#endif.  V
1fc00 4c 69 73 74 20 2a 70 56 4c 69 73 74 3b 20 20 20  List *pVList;   
1fc10 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 70 70           /* Mapp
1fc20 69 6e 67 20 62 65 74 77 65 65 6e 20 76 61 72 69  ing between vari
1fc30 61 62 6c 65 20 6e 61 6d 65 73 20 61 6e 64 20 6e  able names and n
1fc40 75 6d 62 65 72 73 20 2a 2f 0a 20 20 56 64 62 65  umbers */.  Vdbe
1fc50 20 2a 70 52 65 70 72 65 70 61 72 65 3b 20 20 20   *pReprepare;   
1fc60 20 20 20 20 20 20 2f 2a 20 56 4d 20 62 65 69 6e        /* VM bein
1fc70 67 20 72 65 70 72 65 70 61 72 65 64 20 28 73 71  g reprepared (sq
1fc80 6c 69 74 65 33 52 65 70 72 65 70 61 72 65 28 29  lite3Reprepare()
1fc90 29 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  ) */.  const cha
1fca0 72 20 2a 7a 54 61 69 6c 3b 20 20 20 20 20 20 20  r *zTail;       
1fcb0 20 2f 2a 20 41 6c 6c 20 53 51 4c 20 74 65 78 74   /* All SQL text
1fcc0 20 70 61 73 74 20 74 68 65 20 6c 61 73 74 20 73   past the last s
1fcd0 65 6d 69 63 6f 6c 6f 6e 20 70 61 72 73 65 64 20  emicolon parsed 
1fce0 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65 77  */.  Table *pNew
1fcf0 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 2f  Table;         /
1fd00 2a 20 41 20 74 61 62 6c 65 20 62 65 69 6e 67 20  * A table being 
1fd10 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 43  constructed by C
1fd20 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20  REATE TABLE */. 
1fd30 20 54 72 69 67 67 65 72 20 2a 70 4e 65 77 54 72   Trigger *pNewTr
1fd40 69 67 67 65 72 3b 20 20 20 20 20 2f 2a 20 54 72  igger;     /* Tr
1fd50 69 67 67 65 72 20 75 6e 64 65 72 20 63 6f 6e 73  igger under cons
1fd60 74 72 75 63 74 20 62 79 20 61 20 43 52 45 41 54  truct by a CREAT
1fd70 45 20 54 52 49 47 47 45 52 20 2a 2f 0a 20 20 63  E TRIGGER */.  c
1fd80 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68  onst char *zAuth
1fd90 43 6f 6e 74 65 78 74 3b 20 2f 2a 20 54 68 65 20  Context; /* The 
1fda0 36 74 68 20 70 61 72 61 6d 65 74 65 72 20 74 6f  6th parameter to
1fdb0 20 64 62 2d 3e 78 41 75 74 68 20 63 61 6c 6c 62   db->xAuth callb
1fdc0 61 63 6b 73 20 2a 2f 0a 23 69 66 6e 64 65 66 20  acks */.#ifndef 
1fdd0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
1fde0 55 41 4c 54 41 42 4c 45 0a 20 20 54 6f 6b 65 6e  UALTABLE.  Token
1fdf0 20 73 41 72 67 3b 20 20 20 20 20 20 20 20 20 20   sArg;          
1fe00 20 20 20 20 20 2f 2a 20 43 6f 6d 70 6c 65 74 65       /* Complete
1fe10 20 74 65 78 74 20 6f 66 20 61 20 6d 6f 64 75 6c   text of a modul
1fe20 65 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 20 20  e argument */.  
1fe30 54 61 62 6c 65 20 2a 2a 61 70 56 74 61 62 4c 6f  Table **apVtabLo
1fe40 63 6b 3b 20 20 20 20 20 20 20 2f 2a 20 50 6f 69  ck;       /* Poi
1fe50 6e 74 65 72 20 74 6f 20 76 69 72 74 75 61 6c 20  nter to virtual 
1fe60 74 61 62 6c 65 73 20 6e 65 65 64 69 6e 67 20 6c  tables needing l
1fe70 6f 63 6b 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66  ocking */.#endif
1fe80 0a 20 20 54 61 62 6c 65 20 2a 70 5a 6f 6d 62 69  .  Table *pZombi
1fe90 65 54 61 62 3b 20 20 20 20 20 20 20 20 2f 2a 20  eTab;        /* 
1fea0 4c 69 73 74 20 6f 66 20 54 61 62 6c 65 20 6f 62  List of Table ob
1feb0 6a 65 63 74 73 20 74 6f 20 64 65 6c 65 74 65 20  jects to delete 
1fec0 61 66 74 65 72 20 63 6f 64 65 20 67 65 6e 20 2a  after code gen *
1fed0 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67 20 2a  /.  TriggerPrg *
1fee0 70 54 72 69 67 67 65 72 50 72 67 3b 20 20 2f 2a  pTriggerPrg;  /*
1fef0 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20   Linked list of 
1ff00 63 6f 64 65 64 20 74 72 69 67 67 65 72 73 20 2a  coded triggers *
1ff10 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68 3b  /.  With *pWith;
1ff20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1ff30 20 43 75 72 72 65 6e 74 20 57 49 54 48 20 63 6c   Current WITH cl
1ff40 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f  ause, or NULL */
1ff50 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68 54 6f  .  With *pWithTo
1ff60 46 72 65 65 3b 20 20 20 20 20 20 20 20 2f 2a 20  Free;        /* 
1ff70 46 72 65 65 20 74 68 69 73 20 57 49 54 48 20 6f  Free this WITH o
1ff80 62 6a 65 63 74 20 61 74 20 74 68 65 20 65 6e 64  bject at the end
1ff90 20 6f 66 20 74 68 65 20 70 61 72 73 65 20 2a 2f   of the parse */
1ffa0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 73  .};../*.** Sizes
1ffb0 20 61 6e 64 20 70 6f 69 6e 74 65 72 73 20 6f 66   and pointers of
1ffc0 20 76 61 72 69 6f 75 73 20 70 61 72 74 73 20 6f   various parts o
1ffd0 66 20 74 68 65 20 50 61 72 73 65 20 6f 62 6a 65  f the Parse obje
1ffe0 63 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 50  ct..*/.#define P
1fff0 41 52 53 45 5f 48 44 52 5f 53 5a 20 6f 66 66 73  ARSE_HDR_SZ offs
20000 65 74 6f 66 28 50 61 72 73 65 2c 61 43 6f 6c 43  etof(Parse,aColC
20010 61 63 68 65 29 20 2f 2a 20 52 65 63 75 72 73 69  ache) /* Recursi
20020 76 65 20 70 61 72 74 20 77 2f 6f 20 61 43 6f 6c  ve part w/o aCol
20030 43 61 63 68 65 2a 2f 0a 23 64 65 66 69 6e 65 20  Cache*/.#define 
20040 50 41 52 53 45 5f 52 45 43 55 52 53 45 5f 53 5a  PARSE_RECURSE_SZ
20050 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c   offsetof(Parse,
20060 73 4c 61 73 74 54 6f 6b 65 6e 29 20 20 20 20 2f  sLastToken)    /
20070 2a 20 52 65 63 75 72 73 69 76 65 20 70 61 72 74  * Recursive part
20080 20 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41 52 53   */.#define PARS
20090 45 5f 54 41 49 4c 5f 53 5a 20 28 73 69 7a 65 6f  E_TAIL_SZ (sizeo
200a0 66 28 50 61 72 73 65 29 2d 50 41 52 53 45 5f 52  f(Parse)-PARSE_R
200b0 45 43 55 52 53 45 5f 53 5a 29 20 2f 2a 20 4e 6f  ECURSE_SZ) /* No
200c0 6e 2d 72 65 63 75 72 73 69 76 65 20 70 61 72 74  n-recursive part
200d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41 52 53   */.#define PARS
200e0 45 5f 54 41 49 4c 28 58 29 20 28 28 28 63 68 61  E_TAIL(X) (((cha
200f0 72 2a 29 28 58 29 29 2b 50 41 52 53 45 5f 52 45  r*)(X))+PARSE_RE
20100 43 55 52 53 45 5f 53 5a 29 20 20 2f 2a 20 50 6f  CURSE_SZ)  /* Po
20110 69 6e 74 65 72 20 74 6f 20 74 61 69 6c 20 2a 2f  inter to tail */
20120 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  ../*.** Return t
20130 72 75 65 20 69 66 20 63 75 72 72 65 6e 74 6c 79  rue if currently
20140 20 69 6e 73 69 64 65 20 61 6e 20 73 71 6c 69 74   inside an sqlit
20150 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28  e3_declare_vtab(
20160 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65  ) call..*/.#ifde
20170 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
20180 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 23 64 65  RTUALTABLE.  #de
20190 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f  fine IN_DECLARE_
201a0 56 54 41 42 20 30 0a 23 65 6c 73 65 0a 20 20 23  VTAB 0.#else.  #
201b0 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52  define IN_DECLAR
201c0 45 5f 56 54 41 42 20 28 70 50 61 72 73 65 2d 3e  E_VTAB (pParse->
201d0 64 65 63 6c 61 72 65 56 74 61 62 29 0a 23 65 6e  declareVtab).#en
201e0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  dif../*.** An in
201f0 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
20200 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
20210 65 20 63 61 6e 20 62 65 20 64 65 63 6c 61 72 65  e can be declare
20220 64 20 6f 6e 20 61 20 73 74 61 63 6b 20 61 6e 64  d on a stack and
20230 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 76 65   used.** to save
20240 20 74 68 65 20 50 61 72 73 65 2e 7a 41 75 74 68   the Parse.zAuth
20250 43 6f 6e 74 65 78 74 20 76 61 6c 75 65 20 73 6f  Context value so
20260 20 74 68 61 74 20 69 74 20 63 61 6e 20 62 65 20   that it can be 
20270 72 65 73 74 6f 72 65 64 20 6c 61 74 65 72 2e 0a  restored later..
20280 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 68 43 6f  */.struct AuthCo
20290 6e 74 65 78 74 20 7b 0a 20 20 63 6f 6e 73 74 20  ntext {.  const 
202a0 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65  char *zAuthConte
202b0 78 74 3b 20 20 20 2f 2a 20 50 75 74 20 73 61 76  xt;   /* Put sav
202c0 65 64 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f  ed Parse.zAuthCo
202d0 6e 74 65 78 74 20 68 65 72 65 20 2a 2f 0a 20 20  ntext here */.  
202e0 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20  Parse *pParse;  
202f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
20300 68 65 20 50 61 72 73 65 20 73 74 72 75 63 74 75  he Parse structu
20310 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  re */.};../*.** 
20320 42 69 74 66 69 65 6c 64 20 66 6c 61 67 73 20 66  Bitfield flags f
20330 6f 72 20 50 35 20 76 61 6c 75 65 20 69 6e 20 76  or P5 value in v
20340 61 72 69 6f 75 73 20 6f 70 63 6f 64 65 73 2e 0a  arious opcodes..
20350 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73  **.** Value cons
20360 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72 63 65  traints (enforce
20370 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29 3a  d via assert()):
20380 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 4c 45  .**    OPFLAG_LE
20390 4e 47 54 48 41 52 47 20 20 20 20 3d 3d 20 53 51  NGTHARG    == SQ
203a0 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48  LITE_FUNC_LENGTH
203b0 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 54 59  .**    OPFLAG_TY
203c0 50 45 4f 46 41 52 47 20 20 20 20 3d 3d 20 53 51  PEOFARG    == SQ
203d0 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46  LITE_FUNC_TYPEOF
203e0 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 42 55  .**    OPFLAG_BU
203f0 4c 4b 43 53 52 20 20 20 20 20 20 3d 3d 20 42 54  LKCSR      == BT
20400 52 45 45 5f 42 55 4c 4b 4c 4f 41 44 0a 2a 2a 20  REE_BULKLOAD.** 
20410 20 20 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51     OPFLAG_SEEKEQ
20420 20 20 20 20 20 20 20 3d 3d 20 42 54 52 45 45 5f         == BTREE_
20430 53 45 45 4b 5f 45 51 0a 2a 2a 20 20 20 20 4f 50  SEEK_EQ.**    OP
20440 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 20 20  FLAG_FORDELETE  
20450 20 20 3d 3d 20 42 54 52 45 45 5f 46 4f 52 44 45    == BTREE_FORDE
20460 4c 45 54 45 0a 2a 2a 20 20 20 20 4f 50 46 4c 41  LETE.**    OPFLA
20470 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 3d  G_SAVEPOSITION =
20480 3d 20 42 54 52 45 45 5f 53 41 56 45 50 4f 53 49  = BTREE_SAVEPOSI
20490 54 49 4f 4e 0a 2a 2a 20 20 20 20 4f 50 46 4c 41  TION.**    OPFLA
204a0 47 5f 41 55 58 44 45 4c 45 54 45 20 20 20 20 3d  G_AUXDELETE    =
204b0 3d 20 42 54 52 45 45 5f 41 55 58 44 45 4c 45 54  = BTREE_AUXDELET
204c0 45 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  E.*/.#define OPF
204d0 4c 41 47 5f 4e 43 48 41 4e 47 45 20 20 20 20 20  LAG_NCHANGE     
204e0 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f    0x01    /* OP_
204f0 49 6e 73 65 72 74 3a 20 53 65 74 20 74 6f 20 75  Insert: Set to u
20500 70 64 61 74 65 20 64 62 2d 3e 6e 43 68 61 6e 67  pdate db->nChang
20510 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  e */.           
20520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20530 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 73            /* Als
20540 6f 20 75 73 65 64 20 69 6e 20 50 32 20 28 6e 6f  o used in P2 (no
20550 74 20 50 35 29 20 6f 66 20 4f 50 5f 44 65 6c 65  t P5) of OP_Dele
20560 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  te */.#define OP
20570 46 4c 41 47 5f 45 50 48 45 4d 20 20 20 20 20 20  FLAG_EPHEM      
20580 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50     0x01    /* OP
20590 5f 43 6f 6c 75 6d 6e 3a 20 45 70 68 65 6d 65 72  _Column: Ephemer
205a0 61 6c 20 6f 75 74 70 75 74 20 69 73 20 6f 6b 20  al output is ok 
205b0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
205c0 47 5f 4c 41 53 54 52 4f 57 49 44 20 20 20 20 20  G_LASTROWID     
205d0 30 78 32 30 20 20 20 20 2f 2a 20 53 65 74 20 74  0x20    /* Set t
205e0 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6c 61 73  o update db->las
205f0 74 52 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e  tRowid */.#defin
20600 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54  e OPFLAG_ISUPDAT
20610 45 20 20 20 20 20 20 30 78 30 34 20 20 20 20 2f  E      0x04    /
20620 2a 20 54 68 69 73 20 4f 50 5f 49 6e 73 65 72 74  * This OP_Insert
20630 20 69 73 20 61 6e 20 73 71 6c 20 55 50 44 41 54   is an sql UPDAT
20640 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  E */.#define OPF
20650 4c 41 47 5f 41 50 50 45 4e 44 20 20 20 20 20 20  LAG_APPEND      
20660 20 20 30 78 30 38 20 20 20 20 2f 2a 20 54 68 69    0x08    /* Thi
20670 73 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62  s is likely to b
20680 65 20 61 6e 20 61 70 70 65 6e 64 20 2a 2f 0a 23  e an append */.#
20690 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 55 53  define OPFLAG_US
206a0 45 53 45 45 4b 52 45 53 55 4c 54 20 30 78 31 30  ESEEKRESULT 0x10
206b0 20 20 20 20 2f 2a 20 54 72 79 20 74 6f 20 61 76      /* Try to av
206c0 6f 69 64 20 61 20 73 65 65 6b 20 69 6e 20 42 74  oid a seek in Bt
206d0 72 65 65 49 6e 73 65 72 74 28 29 20 2a 2f 0a 23  reeInsert() */.#
206e0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
206f0 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f  BLE_PREUPDATE_HO
20700 4f 4b 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  OK.#define OPFLA
20710 47 5f 49 53 4e 4f 4f 50 20 20 20 20 20 20 20 20  G_ISNOOP        
20720 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 44 65  0x40    /* OP_De
20730 6c 65 74 65 20 64 6f 65 73 20 70 72 65 2d 75 70  lete does pre-up
20740 64 61 74 65 2d 68 6f 6f 6b 20 6f 6e 6c 79 20 2a  date-hook only *
20750 2f 0a 23 65 6e 64 69 66 0a 23 64 65 66 69 6e 65  /.#endif.#define
20760 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52   OPFLAG_LENGTHAR
20770 47 20 20 20 20 20 30 78 34 30 20 20 20 20 2f 2a  G     0x40    /*
20780 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20   OP_Column only 
20790 75 73 65 64 20 66 6f 72 20 6c 65 6e 67 74 68 28  used for length(
207a0 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  ) */.#define OPF
207b0 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 20 20 20  LAG_TYPEOFARG   
207c0 20 20 30 78 38 30 20 20 20 20 2f 2a 20 4f 50 5f    0x80    /* OP_
207d0 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64  Column only used
207e0 20 66 6f 72 20 74 79 70 65 6f 66 28 29 20 2a 2f   for typeof() */
207f0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
20800 42 55 4c 4b 43 53 52 20 20 20 20 20 20 20 30 78  BULKCSR       0x
20810 30 31 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e  01    /* OP_Open
20820 2a 2a 20 75 73 65 64 20 74 6f 20 6f 70 65 6e 20  ** used to open 
20830 62 75 6c 6b 20 63 75 72 73 6f 72 20 2a 2f 0a 23  bulk cursor */.#
20840 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 53 45  define OPFLAG_SE
20850 45 4b 45 51 20 20 20 20 20 20 20 20 30 78 30 32  EKEQ        0x02
20860 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a      /* OP_Open**
20870 20 63 75 72 73 6f 72 20 75 73 65 73 20 45 51 20   cursor uses EQ 
20880 73 65 65 6b 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65  seek only */.#de
20890 66 69 6e 65 20 4f 50 46 4c 41 47 5f 46 4f 52 44  fine OPFLAG_FORD
208a0 45 4c 45 54 45 20 20 20 20 20 30 78 30 38 20 20  ELETE     0x08  
208b0 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 20 73 68 6f    /* OP_Open sho
208c0 75 6c 64 20 75 73 65 20 42 54 52 45 45 5f 46 4f  uld use BTREE_FO
208d0 52 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69  RDELETE */.#defi
208e0 6e 65 20 4f 50 46 4c 41 47 5f 50 32 49 53 52 45  ne OPFLAG_P2ISRE
208f0 47 20 20 20 20 20 20 20 30 78 31 30 20 20 20 20  G       0x10    
20900 2f 2a 20 50 32 20 74 6f 20 4f 50 5f 4f 70 65 6e  /* P2 to OP_Open
20910 2a 2a 20 69 73 20 61 20 72 65 67 69 73 74 65 72  ** is a register
20920 20 6e 75 6d 62 65 72 20 2a 2f 0a 23 64 65 66 69   number */.#defi
20930 6e 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54  ne OPFLAG_PERMUT
20940 45 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20  E       0x01    
20950 2f 2a 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 75  /* OP_Compare: u
20960 73 65 20 74 68 65 20 70 65 72 6d 75 74 61 74 69  se the permutati
20970 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  on */.#define OP
20980 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f  FLAG_SAVEPOSITIO
20990 4e 20 20 30 78 30 32 20 20 20 20 2f 2a 20 4f 50  N  0x02    /* OP
209a0 5f 44 65 6c 65 74 65 2f 49 6e 73 65 72 74 3a 20  _Delete/Insert: 
209b0 73 61 76 65 20 63 75 72 73 6f 72 20 70 6f 73 20  save cursor pos 
209c0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
209d0 47 5f 41 55 58 44 45 4c 45 54 45 20 20 20 20 20  G_AUXDELETE     
209e0 30 78 30 34 20 20 20 20 2f 2a 20 4f 50 5f 44 65  0x04    /* OP_De
209f0 6c 65 74 65 3a 20 69 6e 64 65 78 20 69 6e 20 61  lete: index in a
20a00 20 44 45 4c 45 54 45 20 6f 70 20 2a 2f 0a 0a 2f   DELETE op */../
20a10 2a 0a 20 2a 20 45 61 63 68 20 74 72 69 67 67 65  *. * Each trigge
20a20 72 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65  r present in the
20a30 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
20a40 20 69 73 20 73 74 6f 72 65 64 20 61 73 20 61 6e   is stored as an
20a50 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 20 2a 20   instance of. * 
20a60 73 74 72 75 63 74 20 54 72 69 67 67 65 72 2e 0a  struct Trigger..
20a70 20 2a 0a 20 2a 20 50 6f 69 6e 74 65 72 73 20 74   *. * Pointers t
20a80 6f 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 73  o instances of s
20a90 74 72 75 63 74 20 54 72 69 67 67 65 72 20 61 72  truct Trigger ar
20aa0 65 20 73 74 6f 72 65 64 20 69 6e 20 74 77 6f 20  e stored in two 
20ab0 77 61 79 73 2e 0a 20 2a 20 31 2e 20 49 6e 20 74  ways.. * 1. In t
20ac0 68 65 20 22 74 72 69 67 48 61 73 68 22 20 68 61  he "trigHash" ha
20ad0 73 68 20 74 61 62 6c 65 20 28 70 61 72 74 20 6f  sh table (part o
20ae0 66 20 74 68 65 20 73 71 6c 69 74 65 33 2a 20 74  f the sqlite3* t
20af0 68 61 74 20 72 65 70 72 65 73 65 6e 74 73 20 74  hat represents t
20b00 68 65 0a 20 2a 20 20 20 20 64 61 74 61 62 61 73  he. *    databas
20b10 65 29 2e 20 54 68 69 73 20 61 6c 6c 6f 77 73 20  e). This allows 
20b20 54 72 69 67 67 65 72 20 73 74 72 75 63 74 75 72  Trigger structur
20b30 65 73 20 74 6f 20 62 65 20 72 65 74 72 69 65 76  es to be retriev
20b40 65 64 20 62 79 20 6e 61 6d 65 2e 0a 20 2a 20 32  ed by name.. * 2
20b50 2e 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20 61  . All triggers a
20b60 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
20b70 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 66 6f   single table fo
20b80 72 6d 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  rm a linked list
20b90 2c 20 75 73 69 6e 67 20 74 68 65 0a 20 2a 20 20  , using the. *  
20ba0 20 20 70 4e 65 78 74 20 6d 65 6d 62 65 72 20 6f    pNext member o
20bb0 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
20bc0 2e 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  . A pointer to t
20bd0 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74  he first element
20be0 20 6f 66 20 74 68 65 0a 20 2a 20 20 20 20 6c 69   of the. *    li
20bf0 6e 6b 65 64 20 6c 69 73 74 20 69 73 20 73 74 6f  nked list is sto
20c00 72 65 64 20 61 73 20 74 68 65 20 22 70 54 72 69  red as the "pTri
20c10 67 67 65 72 22 20 6d 65 6d 62 65 72 20 6f 66 20  gger" member of 
20c20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 0a 20  the associated. 
20c30 2a 20 20 20 20 73 74 72 75 63 74 20 54 61 62 6c  *    struct Tabl
20c40 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 73 74  e.. *. * The "st
20c50 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20  ep_list" member 
20c60 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69  points to the fi
20c70 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61  rst element of a
20c80 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 20 2a 20   linked list. * 
20c90 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53  containing the S
20ca0 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70  QL statements sp
20cb0 65 63 69 66 69 65 64 20 61 73 20 74 68 65 20 74  ecified as the t
20cc0 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a  rigger program..
20cd0 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67   */.struct Trigg
20ce0 65 72 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  er {.  char *zNa
20cf0 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  me;            /
20d00 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  * The name of th
20d10 65 20 74 72 69 67 67 65 72 20 20 20 20 20 20 20  e trigger       
20d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d30 20 2a 2f 0a 20 20 63 68 61 72 20 2a 74 61 62 6c   */.  char *tabl
20d40 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
20d50 20 54 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69   The table or vi
20d60 65 77 20 74 6f 20 77 68 69 63 68 20 74 68 65 20  ew to which the 
20d70 74 72 69 67 67 65 72 20 61 70 70 6c 69 65 73 20  trigger applies 
20d80 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20  */.  u8 op;     
20d90 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
20da0 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45  One of TK_DELETE
20db0 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f  , TK_UPDATE, TK_
20dc0 49 4e 53 45 52 54 20 20 20 20 20 20 20 20 20 2a  INSERT         *
20dd0 2f 0a 20 20 75 38 20 74 72 5f 74 6d 3b 20 20 20  /.  u8 tr_tm;   
20de0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
20df0 6e 65 20 6f 66 20 54 52 49 47 47 45 52 5f 42 45  ne of TRIGGER_BE
20e00 46 4f 52 45 2c 20 54 52 49 47 47 45 52 5f 41 46  FORE, TRIGGER_AF
20e10 54 45 52 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  TER */.  Expr *p
20e20 57 68 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20  When;           
20e30 20 2f 2a 20 54 68 65 20 57 48 45 4e 20 63 6c 61   /* The WHEN cla
20e40 75 73 65 20 6f 66 20 74 68 65 20 65 78 70 72 65  use of the expre
20e50 73 73 69 6f 6e 20 28 6d 61 79 20 62 65 20 4e 55  ssion (may be NU
20e60 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20  LL) */.  IdList 
20e70 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20 20 20 20 20  *pColumns;      
20e80 20 2f 2a 20 49 66 20 74 68 69 73 20 69 73 20 61   /* If this is a
20e90 6e 20 55 50 44 41 54 45 20 4f 46 20 3c 63 6f 6c  n UPDATE OF <col
20ea0 75 6d 6e 2d 6c 69 73 74 3e 20 74 72 69 67 67 65  umn-list> trigge
20eb0 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r,.             
20ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ed0 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74  the <column-list
20ee0 3e 20 69 73 20 73 74 6f 72 65 64 20 68 65 72 65  > is stored here
20ef0 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
20f00 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20 2f 2a  chema;        /*
20f10 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69   Schema containi
20f20 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20 2a  ng the trigger *
20f30 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 54 61 62  /.  Schema *pTab
20f40 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53  Schema;     /* S
20f50 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67  chema containing
20f60 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20   the table */.  
20f70 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 74 65  TriggerStep *ste
20f80 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b 20  p_list; /* Link 
20f90 6c 69 73 74 20 6f 66 20 74 72 69 67 67 65 72 20  list of trigger 
20fa0 70 72 6f 67 72 61 6d 20 73 74 65 70 73 20 20 20  program steps   
20fb0 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 54            */.  T
20fc0 72 69 67 67 65 72 20 2a 70 4e 65 78 74 3b 20 20  rigger *pNext;  
20fd0 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 74         /* Next t
20fe0 72 69 67 67 65 72 20 61 73 73 6f 63 69 61 74 65  rigger associate
20ff0 64 20 77 69 74 68 20 74 68 65 20 74 61 62 6c 65  d with the table
21000 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20   */.};../*.** A 
21010 74 72 69 67 67 65 72 20 69 73 20 65 69 74 68 65  trigger is eithe
21020 72 20 61 20 42 45 46 4f 52 45 20 6f 72 20 61 6e  r a BEFORE or an
21030 20 41 46 54 45 52 20 74 72 69 67 67 65 72 2e 20   AFTER trigger. 
21040 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   The following c
21050 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65 74 65  onstants.** dete
21060 72 6d 69 6e 65 20 77 68 69 63 68 2e 0a 2a 2a 0a  rmine which..**.
21070 2a 2a 20 49 66 20 74 68 65 72 65 20 61 72 65 20  ** If there are 
21080 6d 75 6c 74 69 70 6c 65 20 74 72 69 67 67 65 72  multiple trigger
21090 73 2c 20 79 6f 75 20 6d 69 67 68 74 20 6f 66 20  s, you might of 
210a0 73 6f 6d 65 20 42 45 46 4f 52 45 20 61 6e 64 20  some BEFORE and 
210b0 73 6f 6d 65 20 41 46 54 45 52 2e 0a 2a 2a 20 49  some AFTER..** I
210c0 6e 20 74 68 61 74 20 63 61 73 65 73 2c 20 74 68  n that cases, th
210d0 65 20 63 6f 6e 73 74 61 6e 74 73 20 62 65 6c 6f  e constants belo
210e0 77 20 63 61 6e 20 62 65 20 4f 52 65 64 20 74 6f  w can be ORed to
210f0 67 65 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69  gether..*/.#defi
21100 6e 65 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52  ne TRIGGER_BEFOR
21110 45 20 20 31 0a 23 64 65 66 69 6e 65 20 54 52 49  E  1.#define TRI
21120 47 47 45 52 5f 41 46 54 45 52 20 20 20 32 0a 0a  GGER_AFTER   2..
21130 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*. * An instanc
21140 65 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67  e of struct Trig
21150 67 65 72 53 74 65 70 20 69 73 20 75 73 65 64 20  gerStep is used 
21160 74 6f 20 73 74 6f 72 65 20 61 20 73 69 6e 67 6c  to store a singl
21170 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 0a  e SQL statement.
21180 20 2a 20 74 68 61 74 20 69 73 20 61 20 70 61 72   * that is a par
21190 74 20 6f 66 20 61 20 74 72 69 67 67 65 72 2d 70  t of a trigger-p
211a0 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a 20 49 6e  rogram.. *. * In
211b0 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63  stances of struc
211c0 74 20 54 72 69 67 67 65 72 53 74 65 70 20 61 72  t TriggerStep ar
211d0 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69  e stored in a si
211e0 6e 67 6c 79 20 6c 69 6e 6b 65 64 20 6c 69 73 74  ngly linked list
211f0 20 28 6c 69 6e 6b 65 64 0a 20 2a 20 75 73 69 6e   (linked. * usin
21200 67 20 74 68 65 20 22 70 4e 65 78 74 22 20 6d 65  g the "pNext" me
21210 6d 62 65 72 29 20 72 65 66 65 72 65 6e 63 65 64  mber) referenced
21220 20 62 79 20 74 68 65 20 22 73 74 65 70 5f 6c 69   by the "step_li
21230 73 74 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68  st" member of th
21240 65 0a 20 2a 20 61 73 73 6f 63 69 61 74 65 64 20  e. * associated 
21250 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20 69  struct Trigger i
21260 6e 73 74 61 6e 63 65 2e 20 54 68 65 20 66 69 72  nstance. The fir
21270 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68  st element of th
21280 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73  e linked list is
21290 0a 20 2a 20 74 68 65 20 66 69 72 73 74 20 73 74  . * the first st
212a0 65 70 20 6f 66 20 74 68 65 20 74 72 69 67 67 65  ep of the trigge
212b0 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a  r-program.. *. *
212c0 20 54 68 65 20 22 6f 70 22 20 6d 65 6d 62 65 72   The "op" member
212d0 20 69 6e 64 69 63 61 74 65 73 20 77 68 65 74 68   indicates wheth
212e0 65 72 20 74 68 69 73 20 69 73 20 61 20 22 44 45  er this is a "DE
212f0 4c 45 54 45 22 2c 20 22 49 4e 53 45 52 54 22 2c  LETE", "INSERT",
21300 20 22 55 50 44 41 54 45 22 20 6f 72 0a 20 2a 20   "UPDATE" or. * 
21310 22 53 45 4c 45 43 54 22 20 73 74 61 74 65 6d 65  "SELECT" stateme
21320 6e 74 2e 20 54 68 65 20 6d 65 61 6e 69 6e 67 73  nt. The meanings
21330 20 6f 66 20 74 68 65 20 6f 74 68 65 72 20 6d 65   of the other me
21340 6d 62 65 72 73 20 69 73 20 64 65 74 65 72 6d 69  mbers is determi
21350 6e 65 64 20 62 79 20 74 68 65 0a 20 2a 20 76 61  ned by the. * va
21360 6c 75 65 20 6f 66 20 22 6f 70 22 20 61 73 20 66  lue of "op" as f
21370 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f  ollows:. *. * (o
21380 70 20 3d 3d 20 54 4b 5f 49 4e 53 45 52 54 29 0a  p == TK_INSERT).
21390 20 2a 20 6f 72 63 6f 6e 66 20 20 20 20 2d 3e 20   * orconf    -> 
213a0 73 74 6f 72 65 73 20 74 68 65 20 4f 4e 20 43 4f  stores the ON CO
213b0 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d  NFLICT algorithm
213c0 0a 20 2a 20 70 53 65 6c 65 63 74 20 20 20 2d 3e  . * pSelect   ->
213d0 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49   If this is an I
213e0 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 53  NSERT INTO ... S
213f0 45 4c 45 43 54 20 2e 2e 2e 20 73 74 61 74 65 6d  ELECT ... statem
21400 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20  ent, then. *    
21410 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20 73            this s
21420 74 6f 72 65 73 20 61 20 70 6f 69 6e 74 65 72 20  tores a pointer 
21430 74 6f 20 74 68 65 20 53 45 4c 45 43 54 20 73 74  to the SELECT st
21440 61 74 65 6d 65 6e 74 2e 20 4f 74 68 65 72 77 69  atement. Otherwi
21450 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 7a 54 61 72  se NULL.. * zTar
21460 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74 65  get   -> Dequote
21470 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  d name of the ta
21480 62 6c 65 20 74 6f 20 69 6e 73 65 72 74 20 69 6e  ble to insert in
21490 74 6f 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74  to.. * pExprList
214a0 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61   -> If this is a
214b0 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e  n INSERT INTO ..
214c0 2e 20 56 41 4c 55 45 53 20 2e 2e 2e 20 73 74 61  . VALUES ... sta
214d0 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20  tement, then. * 
214e0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
214f0 73 20 73 74 6f 72 65 73 20 76 61 6c 75 65 73 20  s stores values 
21500 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e 20  to be inserted. 
21510 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a  Otherwise NULL..
21520 20 2a 20 70 49 64 4c 69 73 74 20 20 20 2d 3e 20   * pIdList   -> 
21530 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e  If this is an IN
21540 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 28 3c  SERT INTO ... (<
21550 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20 56  column-names>) V
21560 41 4c 55 45 53 20 2e 2e 2e 0a 20 2a 20 20 20 20  ALUES .... *    
21570 20 20 20 20 20 20 20 20 20 20 73 74 61 74 65 6d            statem
21580 65 6e 74 2c 20 74 68 65 6e 20 74 68 69 73 20 73  ent, then this s
21590 74 6f 72 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e  tores the column
215a0 2d 6e 61 6d 65 73 20 74 6f 20 62 65 0a 20 2a 20  -names to be. * 
215b0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 73               ins
215c0 65 72 74 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a 20  erted into.. *. 
215d0 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c 45  * (op == TK_DELE
215e0 54 45 29 0a 20 2a 20 7a 54 61 72 67 65 74 20 20  TE). * zTarget  
215f0 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61 6d   -> Dequoted nam
21600 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
21610 6f 20 64 65 6c 65 74 65 20 66 72 6f 6d 2e 0a 20  o delete from.. 
21620 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54  * pWhere    -> T
21630 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
21640 6f 66 20 74 68 65 20 44 45 4c 45 54 45 20 73 74  of the DELETE st
21650 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69  atement if one i
21660 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20  s specified.. * 
21670 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 74 68               Oth
21680 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 0a  erwise NULL.. *.
21690 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 55 50 44   * (op == TK_UPD
216a0 41 54 45 29 0a 20 2a 20 7a 54 61 72 67 65 74 20  ATE). * zTarget 
216b0 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61    -> Dequoted na
216c0 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
216d0 74 6f 20 75 70 64 61 74 65 2e 0a 20 2a 20 70 57  to update.. * pW
216e0 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57  here    -> The W
216f0 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74  HERE clause of t
21700 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  he UPDATE statem
21710 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70  ent if one is sp
21720 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20  ecified.. *     
21730 20 20 20 20 20 20 20 20 20 4f 74 68 65 72 77 69           Otherwi
21740 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78 70  se NULL.. * pExp
21750 72 4c 69 73 74 20 2d 3e 20 41 20 6c 69 73 74 20  rList -> A list 
21760 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74  of the columns t
21770 6f 20 75 70 64 61 74 65 20 61 6e 64 20 74 68 65  o update and the
21780 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 6f 20   expressions to 
21790 75 70 64 61 74 65 0a 20 2a 20 20 20 20 20 20 20  update. *       
217a0 20 20 20 20 20 20 20 74 68 65 6d 20 74 6f 2e 20         them to. 
217b0 53 65 65 20 73 71 6c 69 74 65 33 55 70 64 61 74  See sqlite3Updat
217c0 65 28 29 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  e() documentatio
217d0 6e 20 6f 66 20 22 70 43 68 61 6e 67 65 73 22 0a  n of "pChanges".
217e0 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
217f0 61 72 67 75 6d 65 6e 74 2e 0a 20 2a 0a 20 2a 2f  argument.. *. */
21800 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53  .struct TriggerS
21810 74 65 70 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20  tep {.  u8 op;  
21820 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
21830 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45  One of TK_DELETE
21840 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f  , TK_UPDATE, TK_
21850 49 4e 53 45 52 54 2c 20 54 4b 5f 53 45 4c 45 43  INSERT, TK_SELEC
21860 54 20 2a 2f 0a 20 20 75 38 20 6f 72 63 6f 6e 66  T */.  u8 orconf
21870 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f  ;           /* O
21880 45 5f 52 6f 6c 6c 62 61 63 6b 20 65 74 63 2e 20  E_Rollback etc. 
21890 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54  */.  Trigger *pT
218a0 72 69 67 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  rig;      /* The
218b0 20 74 72 69 67 67 65 72 20 74 68 61 74 20 74 68   trigger that th
218c0 69 73 20 73 74 65 70 20 69 73 20 61 20 70 61 72  is step is a par
218d0 74 20 6f 66 20 2a 2f 0a 20 20 53 65 6c 65 63 74  t of */.  Select
218e0 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f   *pSelect;     /
218f0 2a 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  * SELECT stateme
21900 6e 74 20 6f 72 20 52 48 53 20 6f 66 20 49 4e 53  nt or RHS of INS
21910 45 52 54 20 49 4e 54 4f 20 53 45 4c 45 43 54 20  ERT INTO SELECT 
21920 2e 2e 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ... */.  char *z
21930 54 61 72 67 65 74 3b 20 20 20 20 20 20 20 2f 2a  Target;       /*
21940 20 54 61 72 67 65 74 20 74 61 62 6c 65 20 66 6f   Target table fo
21950 72 20 44 45 4c 45 54 45 2c 20 55 50 44 41 54 45  r DELETE, UPDATE
21960 2c 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 45 78  , INSERT */.  Ex
21970 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20 20  pr *pWhere;     
21980 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20     /* The WHERE 
21990 63 6c 61 75 73 65 20 66 6f 72 20 44 45 4c 45 54  clause for DELET
219a0 45 20 6f 72 20 55 50 44 41 54 45 20 73 74 65 70  E or UPDATE step
219b0 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  s */.  ExprList 
219c0 2a 70 45 78 70 72 4c 69 73 74 3b 20 2f 2a 20 53  *pExprList; /* S
219d0 45 54 20 63 6c 61 75 73 65 20 66 6f 72 20 55 50  ET clause for UP
219e0 44 41 54 45 2e 20 2a 2f 0a 20 20 49 64 4c 69 73  DATE. */.  IdLis
219f0 74 20 2a 70 49 64 4c 69 73 74 3b 20 20 20 20 20  t *pIdList;     
21a00 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  /* Column names 
21a10 66 6f 72 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20  for INSERT */.  
21a20 54 72 69 67 67 65 72 53 74 65 70 20 2a 70 4e 65  TriggerStep *pNe
21a30 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20  xt;  /* Next in 
21a40 74 68 65 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f  the link-list */
21a50 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
21a60 70 4c 61 73 74 3b 20 20 2f 2a 20 4c 61 73 74 20  pLast;  /* Last 
21a70 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d  element in link-
21a80 6c 69 73 74 2e 20 56 61 6c 69 64 20 66 6f 72 20  list. Valid for 
21a90 31 73 74 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f  1st elem only */
21aa0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  .};../*.** The f
21ab0 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
21ac0 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f  re contains info
21ad0 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20  rmation used by 
21ae0 74 68 65 20 73 71 6c 69 74 65 46 69 78 2e 2e 2e  the sqliteFix...
21af0 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 61 73 20  .** routines as 
21b00 74 68 65 79 20 77 61 6c 6b 20 74 68 65 20 70 61  they walk the pa
21b10 72 73 65 20 74 72 65 65 20 74 6f 20 6d 61 6b 65  rse tree to make
21b20 20 64 61 74 61 62 61 73 65 20 72 65 66 65 72 65   database refere
21b30 6e 63 65 73 0a 2a 2a 20 65 78 70 6c 69 63 69 74  nces.** explicit
21b40 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72  ..*/.typedef str
21b50 75 63 74 20 44 62 46 69 78 65 72 20 44 62 46 69  uct DbFixer DbFi
21b60 78 65 72 3b 0a 73 74 72 75 63 74 20 44 62 46 69  xer;.struct DbFi
21b70 78 65 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70  xer {.  Parse *p
21b80 50 61 72 73 65 3b 20 20 20 20 20 20 2f 2a 20 54  Parse;      /* T
21b90 68 65 20 70 61 72 73 69 6e 67 20 63 6f 6e 74 65  he parsing conte
21ba0 78 74 2e 20 20 45 72 72 6f 72 20 6d 65 73 73 61  xt.  Error messa
21bb0 67 65 73 20 77 72 69 74 74 65 6e 20 68 65 72 65  ges written here
21bc0 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
21bd0 63 68 65 6d 61 3b 20 20 20 20 2f 2a 20 46 69 78  chema;    /* Fix
21be0 20 69 74 65 6d 73 20 74 6f 20 74 68 69 73 20 73   items to this s
21bf0 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 62  chema */.  int b
21c00 56 61 72 4f 6e 6c 79 3b 20 20 20 20 20 20 20 2f  VarOnly;       /
21c10 2a 20 43 68 65 63 6b 20 66 6f 72 20 76 61 72 69  * Check for vari
21c20 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65 73 20  able references 
21c30 6f 6e 6c 79 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  only */.  const 
21c40 63 68 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a  char *zDb;    /*
21c50 20 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f   Make sure all o
21c60 62 6a 65 63 74 73 20 61 72 65 20 63 6f 6e 74 61  bjects are conta
21c70 69 6e 65 64 20 69 6e 20 74 68 69 73 20 64 61 74  ined in this dat
21c80 61 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74  abase */.  const
21c90 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f   char *zType;  /
21ca0 2a 20 54 79 70 65 20 6f 66 20 74 68 65 20 63 6f  * Type of the co
21cb0 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66  ntainer - used f
21cc0 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  or error message
21cd0 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b  s */.  const Tok
21ce0 65 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61  en *pName; /* Na
21cf0 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69  me of the contai
21d00 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65  ner - used for e
21d10 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f  rror messages */
21d20 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62  .};../*.** An ob
21d30 6a 65 63 74 65 64 20 75 73 65 64 20 74 6f 20 61  jected used to a
21d40 63 63 75 6d 75 6c 61 74 65 20 74 68 65 20 74 65  ccumulate the te
21d50 78 74 20 6f 66 20 61 20 73 74 72 69 6e 67 20 77  xt of a string w
21d60 68 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f  here we.** do no
21d70 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20 6b 6e  t necessarily kn
21d80 6f 77 20 68 6f 77 20 62 69 67 20 74 68 65 20 73  ow how big the s
21d90 74 72 69 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e  tring will be in
21da0 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72   the end..*/.str
21db0 75 63 74 20 53 74 72 41 63 63 75 6d 20 7b 0a 20  uct StrAccum {. 
21dc0 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
21dd0 20 20 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61        /* Optiona
21de0 6c 20 64 61 74 61 62 61 73 65 20 66 6f 72 20 6c  l database for l
21df0 6f 6f 6b 61 73 69 64 65 2e 20 20 43 61 6e 20 62  ookaside.  Can b
21e00 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72  e NULL */.  char
21e10 20 2a 7a 42 61 73 65 3b 20 20 20 20 20 20 20 20   *zBase;        
21e20 20 2f 2a 20 41 20 62 61 73 65 20 61 6c 6c 6f 63   /* A base alloc
21e30 61 74 69 6f 6e 2e 20 20 4e 6f 74 20 66 72 6f 6d  ation.  Not from
21e40 20 6d 61 6c 6c 6f 63 2e 20 2a 2f 0a 20 20 63 68   malloc. */.  ch
21e50 61 72 20 2a 7a 54 65 78 74 3b 20 20 20 20 20 20  ar *zText;      
21e60 20 20 20 2f 2a 20 54 68 65 20 73 74 72 69 6e 67     /* The string
21e70 20 63 6f 6c 6c 65 63 74 65 64 20 73 6f 20 66 61   collected so fa
21e80 72 20 2a 2f 0a 20 20 75 33 32 20 20 6e 43 68 61  r */.  u32  nCha
21e90 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  r;          /* L
21ea0 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73 74 72  ength of the str
21eb0 69 6e 67 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  ing so far */.  
21ec0 75 33 32 20 20 6e 41 6c 6c 6f 63 3b 20 20 20 20  u32  nAlloc;    
21ed0 20 20 20 20 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f       /* Amount o
21ee0 66 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65  f space allocate
21ef0 64 20 69 6e 20 7a 54 65 78 74 20 2a 2f 0a 20 20  d in zText */.  
21f00 75 33 32 20 20 6d 78 41 6c 6c 6f 63 3b 20 20 20  u32  mxAlloc;   
21f10 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20       /* Maximum 
21f20 61 6c 6c 6f 77 65 64 20 61 6c 6c 6f 63 61 74 69  allowed allocati
21f30 6f 6e 2e 20 20 30 20 66 6f 72 20 6e 6f 20 6d 61  on.  0 for no ma
21f40 6c 6c 6f 63 20 75 73 61 67 65 20 2a 2f 0a 20 20  lloc usage */.  
21f50 75 38 20 20 20 61 63 63 45 72 72 6f 72 3b 20 20  u8   accError;  
21f60 20 20 20 20 20 2f 2a 20 53 54 52 41 43 43 55 4d       /* STRACCUM
21f70 5f 4e 4f 4d 45 4d 20 6f 72 20 53 54 52 41 43 43  _NOMEM or STRACC
21f80 55 4d 5f 54 4f 4f 42 49 47 20 2a 2f 0a 20 20 75  UM_TOOBIG */.  u
21f90 38 20 20 20 70 72 69 6e 74 66 46 6c 61 67 73 3b  8   printfFlags;
21fa0 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 50 52      /* SQLITE_PR
21fb0 49 4e 54 46 20 66 6c 61 67 73 20 62 65 6c 6f 77  INTF flags below
21fc0 20 2a 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 53   */.};.#define S
21fd0 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20 20 20  TRACCUM_NOMEM   
21fe0 31 0a 23 64 65 66 69 6e 65 20 53 54 52 41 43 43  1.#define STRACC
21ff0 55 4d 5f 54 4f 4f 42 49 47 20 20 32 0a 23 64 65  UM_TOOBIG  2.#de
22000 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e  fine SQLITE_PRIN
22010 54 46 5f 49 4e 54 45 52 4e 41 4c 20 30 78 30 31  TF_INTERNAL 0x01
22020 20 20 2f 2a 20 49 6e 74 65 72 6e 61 6c 2d 75 73    /* Internal-us
22030 65 2d 6f 6e 6c 79 20 63 6f 6e 76 65 72 74 65 72  e-only converter
22040 73 20 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64 65  s allowed */.#de
22050 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e  fine SQLITE_PRIN
22060 54 46 5f 53 51 4c 46 55 4e 43 20 20 30 78 30 32  TF_SQLFUNC  0x02
22070 20 20 2f 2a 20 53 51 4c 20 66 75 6e 63 74 69 6f    /* SQL functio
22080 6e 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 56  n arguments to V
22090 58 50 72 69 6e 74 66 20 2a 2f 0a 23 64 65 66 69  XPrintf */.#defi
220a0 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46  ne SQLITE_PRINTF
220b0 5f 4d 41 4c 4c 4f 43 45 44 20 30 78 30 34 20 20  _MALLOCED 0x04  
220c0 2f 2a 20 54 72 75 65 20 69 66 20 78 54 65 78 74  /* True if xText
220d0 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 73 70   is allocated sp
220e0 61 63 65 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20  ace */..#define 
220f0 69 73 4d 61 6c 6c 6f 63 65 64 28 58 29 20 20 28  isMalloced(X)  (
22100 28 28 58 29 2d 3e 70 72 69 6e 74 66 46 6c 61 67  ((X)->printfFlag
22110 73 20 26 20 53 51 4c 49 54 45 5f 50 52 49 4e 54  s & SQLITE_PRINT
22120 46 5f 4d 41 4c 4c 4f 43 45 44 29 21 3d 30 29 0a  F_MALLOCED)!=0).
22130 0a 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74 65  ../*.** A pointe
22140 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74  r to this struct
22150 75 72 65 20 69 73 20 75 73 65 64 20 74 6f 20 63  ure is used to c
22160 6f 6d 6d 75 6e 69 63 61 74 65 20 69 6e 66 6f 72  ommunicate infor
22170 6d 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73  mation.** from s
22180 71 6c 69 74 65 33 49 6e 69 74 20 61 6e 64 20 4f  qlite3Init and O
22190 50 5f 50 61 72 73 65 53 63 68 65 6d 61 20 69 6e  P_ParseSchema in
221a0 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 49 6e  to the sqlite3In
221b0 69 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74  itCallback..*/.t
221c0 79 70 65 64 65 66 20 73 74 72 75 63 74 20 7b 0a  ypedef struct {.
221d0 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
221e0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74        /* The dat
221f0 61 62 61 73 65 20 62 65 69 6e 67 20 69 6e 69 74  abase being init
22200 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 63 68 61  ialized */.  cha
22210 72 20 2a 2a 70 7a 45 72 72 4d 73 67 3b 20 20 20  r **pzErrMsg;   
22220 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67   /* Error messag
22230 65 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f  e stored here */
22240 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20  .  int iDb;     
22250 20 20 20 20 20 20 20 2f 2a 20 30 20 66 6f 72 20         /* 0 for 
22260 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20 20  main database.  
22270 31 20 66 6f 72 20 54 45 4d 50 2c 20 32 2e 2e 20  1 for TEMP, 2.. 
22280 66 6f 72 20 41 54 54 41 43 48 65 64 20 2a 2f 0a  for ATTACHed */.
22290 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20    int rc;       
222a0 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20        /* Result 
222b0 63 6f 64 65 20 73 74 6f 72 65 64 20 68 65 72 65  code stored here
222c0 20 2a 2f 0a 7d 20 49 6e 69 74 44 61 74 61 3b 0a   */.} InitData;.
222d0 0a 2f 2a 0a 2a 2a 20 53 74 72 75 63 74 75 72 65  ./*.** Structure
222e0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 67 6c 6f 62   containing glob
222f0 61 6c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  al configuration
22300 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 53 51   data for the SQ
22310 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2a  Lite library..**
22320 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74 75  .** This structu
22330 72 65 20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73  re also contains
22340 20 73 6f 6d 65 20 73 74 61 74 65 20 69 6e 66 6f   some state info
22350 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  rmation..*/.stru
22360 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67  ct Sqlite3Config
22370 20 7b 0a 20 20 69 6e 74 20 62 4d 65 6d 73 74 61   {.  int bMemsta
22380 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
22390 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
223a0 6f 20 65 6e 61 62 6c 65 20 6d 65 6d 6f 72 79 20  o enable memory 
223b0 73 74 61 74 75 73 20 2a 2f 0a 20 20 69 6e 74 20  status */.  int 
223c0 62 43 6f 72 65 4d 75 74 65 78 3b 20 20 20 20 20  bCoreMutex;     
223d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
223e0 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20   True to enable 
223f0 63 6f 72 65 20 6d 75 74 65 78 69 6e 67 20 2a 2f  core mutexing */
22400 0a 20 20 69 6e 74 20 62 46 75 6c 6c 4d 75 74 65  .  int bFullMute
22410 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  x;              
22420 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
22430 65 6e 61 62 6c 65 20 66 75 6c 6c 20 6d 75 74 65  enable full mute
22440 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62 4f  xing */.  int bO
22450 70 65 6e 55 72 69 3b 20 20 20 20 20 20 20 20 20  penUri;         
22460 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
22470 72 75 65 20 74 6f 20 69 6e 74 65 72 70 72 65 74  rue to interpret
22480 20 66 69 6c 65 6e 61 6d 65 73 20 61 73 20 55 52   filenames as UR
22490 49 73 20 2a 2f 0a 20 20 69 6e 74 20 62 55 73 65  Is */.  int bUse
224a0 43 69 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  Cis;            
224b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65            /* Use
224c0 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 69 63 65   covering indice
224d0 73 20 66 6f 72 20 66 75 6c 6c 2d 73 63 61 6e 73  s for full-scans
224e0 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 53 74 72 6c   */.  int mxStrl
224f0 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  en;             
22500 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d          /* Maxim
22510 75 6d 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68  um string length
22520 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 76 65 72 43   */.  int neverC
22530 6f 72 72 75 70 74 3b 20 20 20 20 20 20 20 20 20  orrupt;         
22540 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62          /* Datab
22550 61 73 65 20 69 73 20 61 6c 77 61 79 73 20 77 65  ase is always we
22560 6c 6c 2d 66 6f 72 6d 65 64 20 2a 2f 0a 20 20 69  ll-formed */.  i
22570 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20  nt szLookaside; 
22580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22590 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b   /* Default look
225a0 61 73 69 64 65 20 62 75 66 66 65 72 20 73 69 7a  aside buffer siz
225b0 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b  e */.  int nLook
225c0 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20  aside;          
225d0 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
225e0 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75  ult lookaside bu
225f0 66 66 65 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20  ffer count */.  
22600 69 6e 74 20 6e 53 74 6d 74 53 70 69 6c 6c 3b 20  int nStmtSpill; 
22610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22620 20 20 2f 2a 20 53 74 6d 74 2d 6a 6f 75 72 6e 61    /* Stmt-journa
22630 6c 20 73 70 69 6c 6c 2d 74 6f 2d 64 69 73 6b 20  l spill-to-disk 
22640 74 68 72 65 73 68 6f 6c 64 20 2a 2f 0a 20 20 73  threshold */.  s
22650 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f  qlite3_mem_metho
22660 64 73 20 6d 3b 20 20 20 20 20 20 20 20 20 20 20  ds m;           
22670 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65   /* Low-level me
22680 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
22690 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73  interface */.  s
226a0 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74  qlite3_mutex_met
226b0 68 6f 64 73 20 6d 75 74 65 78 3b 20 20 20 20 20  hods mutex;     
226c0 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75   /* Low-level mu
226d0 74 65 78 20 69 6e 74 65 72 66 61 63 65 20 2a 2f  tex interface */
226e0 0a 20 20 73 71 6c 69 74 65 33 5f 70 63 61 63 68  .  sqlite3_pcach
226f0 65 5f 6d 65 74 68 6f 64 73 32 20 70 63 61 63 68  e_methods2 pcach
22700 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65  e2;  /* Low-leve
22710 6c 20 70 61 67 65 2d 63 61 63 68 65 20 69 6e 74  l page-cache int
22720 65 72 66 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64  erface */.  void
22730 20 2a 70 48 65 61 70 3b 20 20 20 20 20 20 20 20   *pHeap;        
22740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
22750 20 48 65 61 70 20 73 74 6f 72 61 67 65 20 73 70   Heap storage sp
22760 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65  ace */.  int nHe
22770 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ap;             
22780 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69             /* Si
22790 7a 65 20 6f 66 20 70 48 65 61 70 5b 5d 20 2a 2f  ze of pHeap[] */
227a0 0a 20 20 69 6e 74 20 6d 6e 52 65 71 2c 20 6d 78  .  int mnReq, mx
227b0 52 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20  Req;            
227c0 20 20 20 20 20 2f 2a 20 4d 69 6e 20 61 6e 64 20       /* Min and 
227d0 6d 61 78 20 68 65 61 70 20 72 65 71 75 65 73 74  max heap request
227e0 73 20 73 69 7a 65 73 20 2a 2f 0a 20 20 73 71 6c  s sizes */.  sql
227f0 69 74 65 33 5f 69 6e 74 36 34 20 73 7a 4d 6d 61  ite3_int64 szMma
22800 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  p;             /
22810 2a 20 6d 6d 61 70 28 29 20 73 70 61 63 65 20 70  * mmap() space p
22820 65 72 20 6f 70 65 6e 20 66 69 6c 65 20 2a 2f 0a  er open file */.
22830 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20    sqlite3_int64 
22840 6d 78 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20  mxMmap;         
22850 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 76      /* Maximum v
22860 61 6c 75 65 20 66 6f 72 20 73 7a 4d 6d 61 70 20  alue for szMmap 
22870 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 63 72 61  */.  void *pScra
22880 74 63 68 3b 20 20 20 20 20 20 20 20 20 20 20 20  tch;            
22890 20 20 20 20 20 20 20 2f 2a 20 53 63 72 61 74 63         /* Scratc
228a0 68 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e  h memory */.  in
228b0 74 20 73 7a 53 63 72 61 74 63 68 3b 20 20 20 20  t szScratch;    
228c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
228d0 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20  /* Size of each 
228e0 73 63 72 61 74 63 68 20 62 75 66 66 65 72 20 2a  scratch buffer *
228f0 2f 0a 20 20 69 6e 74 20 6e 53 63 72 61 74 63 68  /.  int nScratch
22900 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
22910 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
22920 6f 66 20 73 63 72 61 74 63 68 20 62 75 66 66 65  of scratch buffe
22930 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50  rs */.  void *pP
22940 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  age;            
22950 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67            /* Pag
22960 65 20 63 61 63 68 65 20 6d 65 6d 6f 72 79 20 2a  e cache memory *
22970 2f 0a 20 20 69 6e 74 20 73 7a 50 61 67 65 3b 20  /.  int szPage; 
22980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22990 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
229a0 20 65 61 63 68 20 70 61 67 65 20 69 6e 20 70 50   each page in pP
229b0 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e  age[] */.  int n
229c0 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20  Page;           
229d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
229e0 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  Number of pages 
229f0 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20  in pPage[] */.  
22a00 69 6e 74 20 6d 78 50 61 72 73 65 72 53 74 61 63  int mxParserStac
22a10 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  k;              
22a20 20 20 2f 2a 20 6d 61 78 69 6d 75 6d 20 64 65 70    /* maximum dep
22a30 74 68 20 6f 66 20 74 68 65 20 70 61 72 73 65 72  th of the parser
22a40 20 73 74 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20   stack */.  int 
22a50 73 68 61 72 65 64 43 61 63 68 65 45 6e 61 62 6c  sharedCacheEnabl
22a60 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ed;           /*
22a70 20 74 72 75 65 20 69 66 20 73 68 61 72 65 64 2d   true if shared-
22a80 63 61 63 68 65 20 6d 6f 64 65 20 65 6e 61 62 6c  cache mode enabl
22a90 65 64 20 2a 2f 0a 20 20 75 33 32 20 73 7a 50 6d  ed */.  u32 szPm
22aa0 61 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  a;              
22ab0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78            /* Max
22ac0 69 6d 75 6d 20 53 6f 72 74 65 72 20 50 4d 41 20  imum Sorter PMA 
22ad0 73 69 7a 65 20 2a 2f 0a 20 20 2f 2a 20 54 68 65  size */.  /* The
22ae0 20 61 62 6f 76 65 20 6d 69 67 68 74 20 62 65 20   above might be 
22af0 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 6e  initialized to n
22b00 6f 6e 2d 7a 65 72 6f 2e 20 20 54 68 65 20 66 6f  on-zero.  The fo
22b10 6c 6c 6f 77 69 6e 67 20 6e 65 65 64 20 74 6f 20  llowing need to 
22b20 61 6c 77 61 79 73 0a 20 20 2a 2a 20 69 6e 69 74  always.  ** init
22b30 69 61 6c 6c 79 20 62 65 20 7a 65 72 6f 2c 20 68  ially be zero, h
22b40 6f 77 65 76 65 72 2e 20 2a 2f 0a 20 20 69 6e 74  owever. */.  int
22b50 20 69 73 49 6e 69 74 3b 20 20 20 20 20 20 20 20   isInit;        
22b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22b70 2a 20 54 72 75 65 20 61 66 74 65 72 20 69 6e 69  * True after ini
22b80 74 69 61 6c 69 7a 61 74 69 6f 6e 20 68 61 73 20  tialization has 
22b90 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 69 6e  finished */.  in
22ba0 74 20 69 6e 50 72 6f 67 72 65 73 73 3b 20 20 20  t inProgress;   
22bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22bc0 2f 2a 20 54 72 75 65 20 77 68 69 6c 65 20 69 6e  /* True while in
22bd0 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 20  itialization in 
22be0 70 72 6f 67 72 65 73 73 20 2a 2f 0a 20 20 69 6e  progress */.  in
22bf0 74 20 69 73 4d 75 74 65 78 49 6e 69 74 3b 20 20  t isMutexInit;  
22c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c10 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 75  /* True after mu
22c20 74 65 78 65 73 20 61 72 65 20 69 6e 69 74 69 61  texes are initia
22c30 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69  lized */.  int i
22c40 73 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20 20 20 20  sMallocInit;    
22c50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
22c60 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f  True after mallo
22c70 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64  c is initialized
22c80 20 2a 2f 0a 20 20 69 6e 74 20 69 73 50 43 61 63   */.  int isPCac
22c90 68 65 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20  heInit;         
22ca0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
22cb0 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20  after malloc is 
22cc0 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
22cd0 20 69 6e 74 20 6e 52 65 66 49 6e 69 74 4d 75 74   int nRefInitMut
22ce0 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ex;             
22cf0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
22d00 75 73 65 72 73 20 6f 66 20 70 49 6e 69 74 4d 75  users of pInitMu
22d10 74 65 78 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  tex */.  sqlite3
22d20 5f 6d 75 74 65 78 20 2a 70 49 6e 69 74 4d 75 74  _mutex *pInitMut
22d30 65 78 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 75  ex;        /* Mu
22d40 74 65 78 20 75 73 65 64 20 62 79 20 73 71 6c 69  tex used by sqli
22d50 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29  te3_initialize()
22d60 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 4c 6f   */.  void (*xLo
22d70 67 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e  g)(void*,int,con
22d80 73 74 20 63 68 61 72 2a 29 3b 20 2f 2a 20 46 75  st char*); /* Fu
22d90 6e 63 74 69 6f 6e 20 66 6f 72 20 6c 6f 67 67 69  nction for loggi
22da0 6e 67 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 4c  ng */.  void *pL
22db0 6f 67 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  ogArg;          
22dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
22dd0 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74  First argument t
22de0 6f 20 78 4c 6f 67 28 29 20 2a 2f 0a 23 69 66 64  o xLog() */.#ifd
22df0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
22e00 5f 53 51 4c 4c 4f 47 0a 20 20 76 6f 69 64 28 2a  _SQLLOG.  void(*
22e10 78 53 71 6c 6c 6f 67 29 28 76 6f 69 64 2a 2c 73  xSqllog)(void*,s
22e20 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
22e30 61 72 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  ar*, int);.  voi
22e40 64 20 2a 70 53 71 6c 6c 6f 67 41 72 67 3b 0a 23  d *pSqllogArg;.#
22e50 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
22e60 49 54 45 5f 56 44 42 45 5f 43 4f 56 45 52 41 47  ITE_VDBE_COVERAG
22e70 45 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f  E.  /* The follo
22e80 77 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20 28 69  wing callback (i
22e90 66 20 6e 6f 74 20 4e 55 4c 4c 29 20 69 73 20 69  f not NULL) is i
22ea0 6e 76 6f 6b 65 64 20 6f 6e 20 65 76 65 72 79 20  nvoked on every 
22eb0 56 44 42 45 20 62 72 61 6e 63 68 0a 20 20 2a 2a  VDBE branch.  **
22ec0 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 53 65 74   operation.  Set
22ed0 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 75 73   the callback us
22ee0 69 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 43  ing SQLITE_TESTC
22ef0 54 52 4c 5f 56 44 42 45 5f 43 4f 56 45 52 41 47  TRL_VDBE_COVERAG
22f00 45 2e 0a 20 20 2a 2f 0a 20 20 76 6f 69 64 20 28  E..  */.  void (
22f10 2a 78 56 64 62 65 42 72 61 6e 63 68 29 28 76 6f  *xVdbeBranch)(vo
22f20 69 64 2a 2c 69 6e 74 20 69 53 72 63 4c 69 6e 65  id*,int iSrcLine
22f30 2c 75 38 20 65 54 68 69 73 2c 75 38 20 65 4d 78  ,u8 eThis,u8 eMx
22f40 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20  );  /* Callback 
22f50 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 56 64 62 65  */.  void *pVdbe
22f60 42 72 61 6e 63 68 41 72 67 3b 20 20 20 20 20 20  BranchArg;      
22f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22f90 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20 2a  * 1st argument *
22fa0 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
22fb0 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42   SQLITE_UNTESTAB
22fc0 4c 45 0a 20 20 69 6e 74 20 28 2a 78 54 65 73 74  LE.  int (*xTest
22fd0 43 61 6c 6c 62 61 63 6b 29 28 69 6e 74 29 3b 20  Callback)(int); 
22fe0 20 20 20 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65         /* Invoke
22ff0 64 20 62 79 20 73 71 6c 69 74 65 33 46 61 75 6c  d by sqlite3Faul
23000 74 53 69 6d 28 29 20 2a 2f 0a 23 65 6e 64 69 66  tSim() */.#endif
23010 0a 20 20 69 6e 74 20 62 4c 6f 63 61 6c 74 69 6d  .  int bLocaltim
23020 65 46 61 75 6c 74 3b 20 20 20 20 20 20 20 20 20  eFault;         
23030 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
23040 66 61 69 6c 20 6c 6f 63 61 6c 74 69 6d 65 28 29  fail localtime()
23050 20 63 61 6c 6c 73 20 2a 2f 0a 20 20 69 6e 74 20   calls */.  int 
23060 69 4f 6e 63 65 52 65 73 65 74 54 68 72 65 73 68  iOnceResetThresh
23070 6f 6c 64 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  old;          /*
23080 20 57 68 65 6e 20 74 6f 20 72 65 73 65 74 20 4f   When to reset O
23090 50 5f 4f 6e 63 65 20 63 6f 75 6e 74 65 72 73 20  P_Once counters 
230a0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  */.};../*.** Thi
230b0 73 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  s macro is used 
230c0 69 6e 73 69 64 65 20 6f 66 20 61 73 73 65 72 74  inside of assert
230d0 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f  () statements to
230e0 20 69 6e 64 69 63 61 74 65 20 74 68 61 74 0a 2a   indicate that.*
230f0 2a 20 74 68 65 20 61 73 73 65 72 74 20 69 73 20  * the assert is 
23100 6f 6e 6c 79 20 76 61 6c 69 64 20 6f 6e 20 61 20  only valid on a 
23110 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61  well-formed data
23120 62 61 73 65 2e 20 20 49 6e 73 74 65 61 64 20 6f  base.  Instead o
23130 66 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73  f:.**.**     ass
23140 65 72 74 28 20 58 20 29 3b 0a 2a 2a 0a 2a 2a 20  ert( X );.**.** 
23150 4f 6e 65 20 77 72 69 74 65 73 3a 0a 2a 2a 0a 2a  One writes:.**.*
23160 2a 20 20 20 20 20 61 73 73 65 72 74 28 20 58 20  *     assert( X 
23170 7c 7c 20 43 4f 52 52 55 50 54 5f 44 42 20 29 3b  || CORRUPT_DB );
23180 0a 2a 2a 0a 2a 2a 20 43 4f 52 52 55 50 54 5f 44  .**.** CORRUPT_D
23190 42 20 69 73 20 74 72 75 65 20 64 75 72 69 6e 67  B is true during
231a0 20 6e 6f 72 6d 61 6c 20 6f 70 65 72 61 74 69 6f   normal operatio
231b0 6e 2e 20 20 43 4f 52 52 55 50 54 5f 44 42 20 64  n.  CORRUPT_DB d
231c0 6f 65 73 20 6e 6f 74 20 69 6e 64 69 63 61 74 65  oes not indicate
231d0 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 64 61 74  .** that the dat
231e0 61 62 61 73 65 20 69 73 20 64 65 66 69 6e 69 74  abase is definit
231f0 65 6c 79 20 63 6f 72 72 75 70 74 2c 20 6f 6e 6c  ely corrupt, onl
23200 79 20 74 68 61 74 20 69 74 20 6d 69 67 68 74 20  y that it might 
23210 62 65 20 63 6f 72 72 75 70 74 2e 0a 2a 2a 20 46  be corrupt..** F
23220 6f 72 20 6d 6f 73 74 20 74 65 73 74 20 63 61 73  or most test cas
23230 65 73 2c 20 43 4f 52 52 55 50 54 5f 44 42 20 69  es, CORRUPT_DB i
23240 73 20 73 65 74 20 74 6f 20 66 61 6c 73 65 20 75  s set to false u
23250 73 69 6e 67 20 61 20 73 70 65 63 69 61 6c 0a 2a  sing a special.*
23260 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63  * sqlite3_test_c
23270 6f 6e 74 72 6f 6c 28 29 2e 20 20 54 68 69 73 20  ontrol().  This 
23280 65 6e 61 62 6c 65 73 20 61 73 73 65 72 74 28 29  enables assert()
23290 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 70   statements to p
232a0 72 6f 76 65 0a 2a 2a 20 74 68 69 6e 67 73 20 74  rove.** things t
232b0 68 61 74 20 61 72 65 20 61 6c 77 61 79 73 20 74  hat are always t
232c0 72 75 65 20 66 6f 72 20 77 65 6c 6c 2d 66 6f 72  rue for well-for
232d0 6d 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a  med databases..*
232e0 2f 0a 23 64 65 66 69 6e 65 20 43 4f 52 52 55 50  /.#define CORRUP
232f0 54 5f 44 42 20 20 28 73 71 6c 69 74 65 33 43 6f  T_DB  (sqlite3Co
23300 6e 66 69 67 2e 6e 65 76 65 72 43 6f 72 72 75 70  nfig.neverCorrup
23310 74 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e  t==0)../*.** Con
23320 74 65 78 74 20 70 6f 69 6e 74 65 72 20 70 61 73  text pointer pas
23330 73 65 64 20 64 6f 77 6e 20 74 68 72 6f 75 67 68  sed down through
23340 20 74 68 65 20 74 72 65 65 2d 77 61 6c 6b 2e 0a   the tree-walk..
23350 2a 2f 0a 73 74 72 75 63 74 20 57 61 6c 6b 65 72  */.struct Walker
23360 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72   {.  Parse *pPar
23370 73 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  se;             
23380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
23390 2a 20 50 61 72 73 65 72 20 63 6f 6e 74 65 78 74  * Parser context
233a0 2e 20 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 45  .  */.  int (*xE
233b0 78 70 72 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c  xprCallback)(Wal
233c0 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 20 20 20  ker*, Expr*);   
233d0 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f    /* Callback fo
233e0 72 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f  r expressions */
233f0 0a 20 20 69 6e 74 20 28 2a 78 53 65 6c 65 63 74  .  int (*xSelect
23400 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72  Callback)(Walker
23410 2a 2c 53 65 6c 65 63 74 2a 29 3b 20 20 2f 2a 20  *,Select*);  /* 
23420 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c  Callback for SEL
23430 45 43 54 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28  ECTs */.  void (
23440 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b  *xSelectCallback
23450 32 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63  2)(Walker*,Selec
23460 74 2a 29 3b 2f 2a 20 53 65 63 6f 6e 64 20 63 61  t*);/* Second ca
23470 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43  llback for SELEC
23480 54 73 20 2a 2f 0a 20 20 69 6e 74 20 77 61 6c 6b  Ts */.  int walk
23490 65 72 44 65 70 74 68 3b 20 20 20 20 20 20 20 20  erDepth;        
234a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
234b0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73    /* Number of s
234c0 75 62 71 75 65 72 69 65 73 20 2a 2f 0a 20 20 75  ubqueries */.  u
234d0 38 20 65 43 6f 64 65 3b 20 20 20 20 20 20 20 20  8 eCode;        
234e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
234f0 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 73 6d           /* A sm
23500 61 6c 6c 20 70 72 6f 63 65 73 73 69 6e 67 20 63  all processing c
23510 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  ode */.  union {
23520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23540 20 20 20 2f 2a 20 45 78 74 72 61 20 64 61 74 61     /* Extra data
23550 20 66 6f 72 20 63 61 6c 6c 62 61 63 6b 20 2a 2f   for callback */
23560 0a 20 20 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74  .    NameContext
23570 20 2a 70 4e 43 3b 20 20 20 20 20 20 20 20 20 20   *pNC;          
23580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23590 2f 2a 20 4e 61 6d 69 6e 67 20 63 6f 6e 74 65 78  /* Naming contex
235a0 74 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 3b 20  t */.    int n; 
235b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
235c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
235d0 20 20 20 20 2f 2a 20 41 20 63 6f 75 6e 74 65 72      /* A counter
235e0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 75 72   */.    int iCur
235f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
23600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23610 20 20 20 2f 2a 20 41 20 63 75 72 73 6f 72 20 6e     /* A cursor n
23620 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 53 72 63  umber */.    Src
23630 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20  List *pSrcList; 
23640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23650 20 20 20 20 20 20 20 20 2f 2a 20 46 52 4f 4d 20          /* FROM 
23660 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 73 74  clause */.    st
23670 72 75 63 74 20 53 72 63 43 6f 75 6e 74 20 2a 70  ruct SrcCount *p
23680 53 72 63 43 6f 75 6e 74 3b 20 20 20 20 20 20 20  SrcCount;       
23690 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e           /* Coun
236a0 74 69 6e 67 20 63 6f 6c 75 6d 6e 20 72 65 66 65  ting column refe
236b0 72 65 6e 63 65 73 20 2a 2f 0a 20 20 20 20 73 74  rences */.    st
236c0 72 75 63 74 20 43 43 75 72 48 69 6e 74 20 2a 70  ruct CCurHint *p
236d0 43 43 75 72 48 69 6e 74 3b 20 20 20 20 20 20 20  CCurHint;       
236e0 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 64           /* Used
236f0 20 62 79 20 63 6f 64 65 43 75 72 73 6f 72 48 69   by codeCursorHi
23700 6e 74 28 29 20 2a 2f 0a 20 20 20 20 69 6e 74 20  nt() */.    int 
23710 2a 61 69 43 6f 6c 3b 20 20 20 20 20 20 20 20 20  *aiCol;         
23720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23730 20 20 20 20 20 20 20 2f 2a 20 61 72 72 61 79 20         /* array 
23740 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 65  of column indexe
23750 73 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20  s */.    struct 
23760 49 64 78 43 6f 76 65 72 20 2a 70 49 64 78 43 6f  IdxCover *pIdxCo
23770 76 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  ver;            
23780 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 66 6f 72      /* Check for
23790 20 69 6e 64 65 78 20 63 6f 76 65 72 61 67 65 20   index coverage 
237a0 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a  */.  } u;.};../*
237b0 20 46 6f 72 77 61 72 64 20 64 65 63 6c 61 72 61   Forward declara
237c0 74 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73 71 6c  tions */.int sql
237d0 69 74 65 33 57 61 6c 6b 45 78 70 72 28 57 61 6c  ite3WalkExpr(Wal
237e0 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e  ker*, Expr*);.in
237f0 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70  t sqlite3WalkExp
23800 72 4c 69 73 74 28 57 61 6c 6b 65 72 2a 2c 20 45  rList(Walker*, E
23810 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
23820 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74  qlite3WalkSelect
23830 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74  (Walker*, Select
23840 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
23850 61 6c 6b 53 65 6c 65 63 74 45 78 70 72 28 57 61  alkSelectExpr(Wa
23860 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  lker*, Select*);
23870 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b  .int sqlite3Walk
23880 53 65 6c 65 63 74 46 72 6f 6d 28 57 61 6c 6b 65  SelectFrom(Walke
23890 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  r*, Select*);.in
238a0 74 20 73 71 6c 69 74 65 33 45 78 70 72 57 61 6c  t sqlite3ExprWal
238b0 6b 4e 6f 6f 70 28 57 61 6c 6b 65 72 2a 2c 20 45  kNoop(Walker*, E
238c0 78 70 72 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65  xpr*);../*.** Re
238d0 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 74  turn code from t
238e0 68 65 20 70 61 72 73 65 2d 74 72 65 65 20 77 61  he parse-tree wa
238f0 6c 6b 69 6e 67 20 70 72 69 6d 69 74 69 76 65 73  lking primitives
23900 20 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20 63 61   and their.** ca
23910 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66  llbacks..*/.#def
23920 69 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e 75 65  ine WRC_Continue
23930 20 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e 74 69      0   /* Conti
23940 6e 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20 63 68  nue down into ch
23950 69 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  ildren */.#defin
23960 65 20 57 52 43 5f 50 72 75 6e 65 20 20 20 20 20  e WRC_Prune     
23970 20 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20 63 68    1   /* Omit ch
23980 69 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e 74 69  ildren but conti
23990 6e 75 65 20 77 61 6c 6b 69 6e 67 20 73 69 62 6c  nue walking sibl
239a0 69 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ings */.#define 
239b0 57 52 43 5f 41 62 6f 72 74 20 20 20 20 20 20 20  WRC_Abort       
239c0 32 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e 20 74  2   /* Abandon t
239d0 68 65 20 74 72 65 65 20 77 61 6c 6b 20 2a 2f 0a  he tree walk */.
239e0 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
239f0 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ce of this struc
23a00 74 75 72 65 20 72 65 70 72 65 73 65 6e 74 73 20  ture represents 
23a10 61 20 73 65 74 20 6f 66 20 6f 6e 65 20 6f 72 20  a set of one or 
23a20 6d 6f 72 65 20 43 54 45 73 0a 2a 2a 20 28 63 6f  more CTEs.** (co
23a30 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
23a40 73 73 69 6f 6e 73 29 20 63 72 65 61 74 65 64 20  ssions) created 
23a50 62 79 20 61 20 73 69 6e 67 6c 65 20 57 49 54 48  by a single WITH
23a60 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75   clause..*/.stru
23a70 63 74 20 57 69 74 68 20 7b 0a 20 20 69 6e 74 20  ct With {.  int 
23a80 6e 43 74 65 3b 20 20 20 20 20 20 20 20 20 20 20  nCte;           
23a90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
23aa0 75 6d 62 65 72 20 6f 66 20 43 54 45 73 20 69 6e  umber of CTEs in
23ab0 20 74 68 65 20 57 49 54 48 20 63 6c 61 75 73 65   the WITH clause
23ac0 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 4f 75 74   */.  With *pOut
23ad0 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  er;             
23ae0 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e        /* Contain
23af0 69 6e 67 20 57 49 54 48 20 63 6c 61 75 73 65 2c  ing WITH clause,
23b00 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74   or NULL */.  st
23b10 72 75 63 74 20 43 74 65 20 7b 20 20 20 20 20 20  ruct Cte {      
23b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
23b30 20 46 6f 72 20 65 61 63 68 20 43 54 45 20 69 6e   For each CTE in
23b40 20 74 68 65 20 57 49 54 48 20 63 6c 61 75 73 65   the WITH clause
23b50 2e 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72  .... */.    char
23b60 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
23b70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
23b80 61 6d 65 20 6f 66 20 74 68 69 73 20 43 54 45 20  ame of this CTE 
23b90 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20  */.    ExprList 
23ba0 2a 70 43 6f 6c 73 3b 20 20 20 20 20 20 20 20 20  *pCols;         
23bb0 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f         /* List o
23bc0 66 20 65 78 70 6c 69 63 69 74 20 63 6f 6c 75 6d  f explicit colum
23bd0 6e 20 6e 61 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c  n names, or NULL
23be0 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a   */.    Select *
23bf0 70 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20  pSelect;        
23c00 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64          /* The d
23c10 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74 68 69  efinition of thi
23c20 73 20 43 54 45 20 2a 2f 0a 20 20 20 20 63 6f 6e  s CTE */.    con
23c30 73 74 20 63 68 61 72 20 2a 7a 43 74 65 45 72 72  st char *zCteErr
23c40 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
23c50 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20 66 6f  Error message fo
23c60 72 20 63 69 72 63 75 6c 61 72 20 72 65 66 65 72  r circular refer
23c70 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 61 5b 31  ences */.  } a[1
23c80 5d 3b 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51  ];.};..#ifdef SQ
23c90 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a  LITE_DEBUG./*.**
23ca0 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
23cb0 74 68 65 20 54 72 65 65 56 69 65 77 20 6f 62 6a  the TreeView obj
23cc0 65 63 74 20 69 73 20 75 73 65 64 20 66 6f 72 20  ect is used for 
23cd0 70 72 69 6e 74 69 6e 67 20 74 68 65 20 63 6f 6e  printing the con
23ce0 74 65 6e 74 20 6f 66 0a 2a 2a 20 64 61 74 61 20  tent of.** data 
23cf0 73 74 72 75 63 74 75 72 65 73 20 6f 6e 20 73 71  structures on sq
23d00 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66  lite3DebugPrintf
23d10 28 29 20 75 73 69 6e 67 20 61 20 74 72 65 65 2d  () using a tree-
23d20 6c 69 6b 65 20 76 69 65 77 2e 0a 2a 2f 0a 73 74  like view..*/.st
23d30 72 75 63 74 20 54 72 65 65 56 69 65 77 20 7b 0a  ruct TreeView {.
23d40 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20    int iLevel;   
23d50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69            /* Whi
23d60 63 68 20 6c 65 76 65 6c 20 6f 66 20 74 68 65 20  ch level of the 
23d70 74 72 65 65 20 77 65 20 61 72 65 20 6f 6e 20 2a  tree we are on *
23d80 2f 0a 20 20 75 38 20 20 62 4c 69 6e 65 5b 31 30  /.  u8  bLine[10
23d90 30 5d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44  0];         /* D
23da0 72 61 77 20 76 65 72 74 69 63 61 6c 20 69 6e 20  raw vertical in 
23db0 63 6f 6c 75 6d 6e 20 69 20 69 66 20 62 4c 69 6e  column i if bLin
23dc0 65 5b 69 5d 20 69 73 20 74 72 75 65 20 2a 2f 0a  e[i] is true */.
23dd0 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  };.#endif /* SQL
23de0 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 0a 2f 2a  ITE_DEBUG */../*
23df0 0a 2a 2a 20 41 73 73 75 6d 69 6e 67 20 7a 49 6e  .** Assuming zIn
23e00 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66   points to the f
23e10 69 72 73 74 20 62 79 74 65 20 6f 66 20 61 20 55  irst byte of a U
23e20 54 46 2d 38 20 63 68 61 72 61 63 74 65 72 2c 0a  TF-8 character,.
23e30 2a 2a 20 61 64 76 61 6e 63 65 20 7a 49 6e 20 74  ** advance zIn t
23e40 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 66  o point to the f
23e50 69 72 73 74 20 62 79 74 65 20 6f 66 20 74 68 65  irst byte of the
23e60 20 6e 65 78 74 20 55 54 46 2d 38 20 63 68 61 72   next UTF-8 char
23e70 61 63 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  acter..*/.#defin
23e80 65 20 53 51 4c 49 54 45 5f 53 4b 49 50 5f 55 54  e SQLITE_SKIP_UT
23e90 46 38 28 7a 49 6e 29 20 7b 20 20 20 20 20 20 20  F8(zIn) {       
23ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23eb0 20 5c 0a 20 20 69 66 28 20 28 2a 28 7a 49 6e 2b   \.  if( (*(zIn+
23ec0 2b 29 29 3e 3d 30 78 63 30 20 29 7b 20 20 20 20  +))>=0xc0 ){    
23ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ee0 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20            \.    
23ef0 77 68 69 6c 65 28 20 28 2a 7a 49 6e 20 26 20 30  while( (*zIn & 0
23f00 78 63 30 29 3d 3d 30 78 38 30 20 29 7b 20 7a 49  xc0)==0x80 ){ zI
23f10 6e 2b 2b 3b 20 7d 20 20 20 20 20 20 20 20 20 20  n++; }          
23f20 20 20 20 5c 0a 20 20 7d 20 20 20 20 20 20 20 20     \.  }        
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 20 20                  
23f50 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 7d 0a              \.}.
23f60 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54  ./*.** The SQLIT
23f70 45 5f 2a 5f 42 4b 50 54 20 6d 61 63 72 6f 73 20  E_*_BKPT macros 
23f80 61 72 65 20 73 75 62 73 74 69 74 75 74 65 73 20  are substitutes 
23f90 66 6f 72 20 74 68 65 20 65 72 72 6f 72 20 63 6f  for the error co
23fa0 64 65 73 20 77 69 74 68 0a 2a 2a 20 74 68 65 20  des with.** the 
23fb0 73 61 6d 65 20 6e 61 6d 65 20 62 75 74 20 77 69  same name but wi
23fc0 74 68 6f 75 74 20 74 68 65 20 5f 42 4b 50 54 20  thout the _BKPT 
23fd0 73 75 66 66 69 78 2e 20 20 54 68 65 73 65 20 6d  suffix.  These m
23fe0 61 63 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a 2a 20  acros invoke.** 
23ff0 72 6f 75 74 69 6e 65 73 20 74 68 61 74 20 72 65  routines that re
24000 70 6f 72 74 20 74 68 65 20 6c 69 6e 65 2d 6e 75  port the line-nu
24010 6d 62 65 72 20 6f 6e 20 77 68 69 63 68 20 74 68  mber on which th
24020 65 20 65 72 72 6f 72 20 6f 72 69 67 69 6e 61 74  e error originat
24030 65 64 0a 2a 2a 20 75 73 69 6e 67 20 73 71 6c 69  ed.** using sqli
24040 74 65 33 5f 6c 6f 67 28 29 2e 20 20 54 68 65 20  te3_log().  The 
24050 72 6f 75 74 69 6e 65 73 20 61 6c 73 6f 20 70 72  routines also pr
24060 6f 76 69 64 65 20 61 20 63 6f 6e 76 65 6e 69 65  ovide a convenie
24070 6e 74 20 70 6c 61 63 65 0a 2a 2a 20 74 6f 20 73  nt place.** to s
24080 65 74 20 61 20 64 65 62 75 67 67 65 72 20 62 72  et a debugger br
24090 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e 74  eakpoint..*/.int
240a0 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45   sqlite3CorruptE
240b0 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73  rror(int);.int s
240c0 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f  qlite3MisuseErro
240d0 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  r(int);.int sqli
240e0 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72  te3CantopenError
240f0 28 69 6e 74 29 3b 0a 23 64 65 66 69 6e 65 20 53  (int);.#define S
24100 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b  QLITE_CORRUPT_BK
24110 50 54 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70  PT sqlite3Corrup
24120 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29  tError(__LINE__)
24130 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
24140 4d 49 53 55 53 45 5f 42 4b 50 54 20 73 71 6c 69  MISUSE_BKPT sqli
24150 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28 5f  te3MisuseError(_
24160 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65  _LINE__).#define
24170 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e   SQLITE_CANTOPEN
24180 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43 61 6e  _BKPT sqlite3Can
24190 74 6f 70 65 6e 45 72 72 6f 72 28 5f 5f 4c 49 4e  topenError(__LIN
241a0 45 5f 5f 29 0a 23 69 66 64 65 66 20 53 51 4c 49  E__).#ifdef SQLI
241b0 54 45 5f 44 45 42 55 47 0a 20 20 69 6e 74 20 73  TE_DEBUG.  int s
241c0 71 6c 69 74 65 33 4e 6f 6d 65 6d 45 72 72 6f 72  qlite3NomemError
241d0 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c  (int);.  int sql
241e0 69 74 65 33 49 6f 65 72 72 6e 6f 6d 65 6d 45 72  ite3IoerrnomemEr
241f0 72 6f 72 28 69 6e 74 29 3b 0a 23 20 64 65 66 69  ror(int);.# defi
24200 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f  ne SQLITE_NOMEM_
24210 42 4b 50 54 20 73 71 6c 69 74 65 33 4e 6f 6d 65  BKPT sqlite3Nome
24220 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29  mError(__LINE__)
24230 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
24240 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50  _IOERR_NOMEM_BKP
24250 54 20 73 71 6c 69 74 65 33 49 6f 65 72 72 6e 6f  T sqlite3Ioerrno
24260 6d 65 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f  memError(__LINE_
24270 5f 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  _).#else.# defin
24280 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42  e SQLITE_NOMEM_B
24290 4b 50 54 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  KPT SQLITE_NOMEM
242a0 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
242b0 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50  _IOERR_NOMEM_BKP
242c0 54 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e  T SQLITE_IOERR_N
242d0 4f 4d 45 4d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  OMEM.#endif../*.
242e0 2a 2a 20 46 54 53 33 20 61 6e 64 20 46 54 53 34  ** FTS3 and FTS4
242f0 20 62 6f 74 68 20 72 65 71 75 69 72 65 20 76 69   both require vi
24300 72 74 75 61 6c 20 74 61 62 6c 65 20 73 75 70 70  rtual table supp
24310 6f 72 74 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  ort.*/.#if defin
24320 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
24330 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 23 20 75  IRTUALTABLE).# u
24340 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  ndef SQLITE_ENAB
24350 4c 45 5f 46 54 53 33 0a 23 20 75 6e 64 65 66 20  LE_FTS3.# undef 
24360 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
24370 53 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  S4.#endif../*.**
24380 20 46 54 53 34 20 69 73 20 72 65 61 6c 6c 79 20   FTS4 is really 
24390 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f 72  an extension for
243a0 20 46 54 53 33 2e 20 20 49 74 20 69 73 20 65 6e   FTS3.  It is en
243b0 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65 0a  abled using the.
243c0 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ** SQLITE_ENABLE
243d0 5f 46 54 53 33 20 6d 61 63 72 6f 2e 20 20 42 75  _FTS3 macro.  Bu
243e0 74 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75  t to avoid confu
243f0 73 69 6f 6e 20 77 65 20 61 6c 73 6f 20 63 61 6c  sion we also cal
24400 6c 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f  l.** the SQLITE_
24410 45 4e 41 42 4c 45 5f 46 54 53 34 20 6d 61 63 72  ENABLE_FTS4 macr
24420 6f 20 74 6f 20 73 65 72 76 65 20 61 73 20 61 6e  o to serve as an
24430 20 61 6c 69 61 73 20 66 6f 72 20 53 51 4c 49 54   alias for SQLIT
24440 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 2e 0a 2a  E_ENABLE_FTS3..*
24450 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
24460 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34  LITE_ENABLE_FTS4
24470 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
24480 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
24490 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
244a0 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 31 0a  E_ENABLE_FTS3 1.
244b0 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
244c0 65 20 63 74 79 70 65 2e 68 20 68 65 61 64 65 72  e ctype.h header
244d0 20 69 73 20 6e 65 65 64 65 64 20 66 6f 72 20 6e   is needed for n
244e0 6f 6e 2d 41 53 43 49 49 20 73 79 73 74 65 6d 73  on-ASCII systems
244f0 2e 20 20 49 74 20 69 73 20 61 6c 73 6f 0a 2a 2a  .  It is also.**
24500 20 6e 65 65 64 65 64 20 62 79 20 46 54 53 33 20   needed by FTS3 
24510 77 68 65 6e 20 46 54 53 33 20 69 73 20 69 6e 63  when FTS3 is inc
24520 6c 75 64 65 64 20 69 6e 20 74 68 65 20 61 6d 61  luded in the ama
24530 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69  lgamation..*/.#i
24540 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
24550 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c 0a 20 20  E_ASCII) || \.  
24560 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54    (defined(SQLIT
24570 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 20 26  E_ENABLE_FTS3) &
24580 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  & defined(SQLITE
24590 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 29 29 0a  _AMALGAMATION)).
245a0 23 20 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65  # include <ctype
245b0 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  .h>.#endif../*.*
245c0 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
245d0 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20 74 68 65  macros mimic the
245e0 20 73 74 61 6e 64 61 72 64 20 6c 69 62 72 61 72   standard librar
245f0 79 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f 75 70  y functions toup
24600 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73 70 61 63  per(),.** isspac
24610 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28 29 2c 20  e(), isalnum(), 
24620 69 73 64 69 67 69 74 28 29 20 61 6e 64 20 69 73  isdigit() and is
24630 78 64 69 67 69 74 28 29 2c 20 72 65 73 70 65 63  xdigit(), respec
24640 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a 2a 20 73  tively. The.** s
24650 71 6c 69 74 65 20 76 65 72 73 69 6f 6e 73 20 6f  qlite versions o
24660 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20 41 53 43  nly work for ASC
24670 49 49 20 63 68 61 72 61 63 74 65 72 73 2c 20 72  II characters, r
24680 65 67 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63  egardless of loc
24690 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ale..*/.#ifdef S
246a0 51 4c 49 54 45 5f 41 53 43 49 49 0a 23 20 64 65  QLITE_ASCII.# de
246b0 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70  fine sqlite3Toup
246c0 70 65 72 28 78 29 20 20 28 28 78 29 26 7e 28 73  per(x)  ((x)&~(s
246d0 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
246e0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
246f0 29 5d 26 30 78 32 30 29 29 0a 23 20 64 65 66 69  )]&0x20)).# defi
24700 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70 61 63  ne sqlite3Isspac
24710 65 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43  e(x)   (sqlite3C
24720 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
24730 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 31  d char)(x)]&0x01
24740 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
24750 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 28  e3Isalnum(x)   (
24760 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
24770 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
24780 78 29 5d 26 30 78 30 36 29 0a 23 20 64 65 66 69  x)]&0x06).# defi
24790 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68  ne sqlite3Isalph
247a0 61 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43  a(x)   (sqlite3C
247b0 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
247c0 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 32  d char)(x)]&0x02
247d0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
247e0 65 33 49 73 64 69 67 69 74 28 78 29 20 20 20 28  e3Isdigit(x)   (
247f0 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
24800 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
24810 78 29 5d 26 30 78 30 34 29 0a 23 20 64 65 66 69  x)]&0x04).# defi
24820 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64 69 67  ne sqlite3Isxdig
24830 69 74 28 78 29 20 20 28 73 71 6c 69 74 65 33 43  it(x)  (sqlite3C
24840 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
24850 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 38  d char)(x)]&0x08
24860 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
24870 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 28  e3Tolower(x)   (
24880 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f  sqlite3UpperToLo
24890 77 65 72 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  wer[(unsigned ch
248a0 61 72 29 28 78 29 5d 29 0a 23 20 64 65 66 69 6e  ar)(x)]).# defin
248b0 65 20 73 71 6c 69 74 65 33 49 73 71 75 6f 74 65  e sqlite3Isquote
248c0 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74  (x)   (sqlite3Ct
248d0 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
248e0 20 63 68 61 72 29 28 78 29 5d 26 30 78 38 30 29   char)(x)]&0x80)
248f0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
24900 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78  sqlite3Toupper(x
24910 29 20 20 20 74 6f 75 70 70 65 72 28 28 75 6e 73  )   toupper((uns
24920 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
24930 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
24940 49 73 73 70 61 63 65 28 78 29 20 20 20 69 73 73  Isspace(x)   iss
24950 70 61 63 65 28 28 75 6e 73 69 67 6e 65 64 20 63  pace((unsigned c
24960 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
24970 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d  e sqlite3Isalnum
24980 28 78 29 20 20 20 69 73 61 6c 6e 75 6d 28 28 75  (x)   isalnum((u
24990 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
249a0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
249b0 65 33 49 73 61 6c 70 68 61 28 78 29 20 20 20 69  e3Isalpha(x)   i
249c0 73 61 6c 70 68 61 28 28 75 6e 73 69 67 6e 65 64  salpha((unsigned
249d0 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
249e0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69 67  ine sqlite3Isdig
249f0 69 74 28 78 29 20 20 20 69 73 64 69 67 69 74 28  it(x)   isdigit(
24a00 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
24a10 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
24a20 69 74 65 33 49 73 78 64 69 67 69 74 28 78 29 20  ite3Isxdigit(x) 
24a30 20 69 73 78 64 69 67 69 74 28 28 75 6e 73 69 67   isxdigit((unsig
24a40 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
24a50 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f  define sqlite3To
24a60 6c 6f 77 65 72 28 78 29 20 20 20 74 6f 6c 6f 77  lower(x)   tolow
24a70 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  er((unsigned cha
24a80 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
24a90 73 71 6c 69 74 65 33 49 73 71 75 6f 74 65 28 78  sqlite3Isquote(x
24aa0 29 20 20 20 28 28 78 29 3d 3d 27 22 27 7c 7c 28  )   ((x)=='"'||(
24ab0 78 29 3d 3d 27 5c 27 27 7c 7c 28 78 29 3d 3d 27  x)=='\''||(x)=='
24ac0 5b 27 7c 7c 28 78 29 3d 3d 27 60 27 29 0a 23 65  ['||(x)=='`').#e
24ad0 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
24ae0 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45  ITE_OMIT_COMPILE
24af0 4f 50 54 49 4f 4e 5f 44 49 41 47 53 0a 69 6e 74  OPTION_DIAGS.int
24b00 20 73 71 6c 69 74 65 33 49 73 49 64 43 68 61 72   sqlite3IsIdChar
24b10 28 75 38 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  (u8);.#endif../*
24b20 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e  .** Internal fun
24b30 63 74 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73  ction prototypes
24b40 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  .*/.int sqlite3S
24b50 74 72 49 43 6d 70 28 63 6f 6e 73 74 20 63 68 61  trICmp(const cha
24b60 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  r*,const char*);
24b70 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72 6c  .int sqlite3Strl
24b80 65 6e 33 30 28 63 6f 6e 73 74 20 63 68 61 72 2a  en30(const char*
24b90 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
24ba0 43 6f 6c 75 6d 6e 54 79 70 65 28 43 6f 6c 75 6d  ColumnType(Colum
24bb0 6e 2a 2c 63 68 61 72 2a 29 3b 0a 23 64 65 66 69  n*,char*);.#defi
24bc0 6e 65 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43  ne sqlite3StrNIC
24bd0 6d 70 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69  mp sqlite3_strni
24be0 63 6d 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33  cmp..int sqlite3
24bf0 4d 61 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64 29  MallocInit(void)
24c00 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61  ;.void sqlite3Ma
24c10 6c 6c 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a 76  llocEnd(void);.v
24c20 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c  oid *sqlite3Mall
24c30 6f 63 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  oc(u64);.void *s
24c40 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f  qlite3MallocZero
24c50 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  (u64);.void *sql
24c60 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f  ite3DbMallocZero
24c70 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b  (sqlite3*, u64);
24c80 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62  .void *sqlite3Db
24c90 4d 61 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74 65  MallocRaw(sqlite
24ca0 33 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a  3*, u64);.void *
24cb0 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52  sqlite3DbMallocR
24cc0 61 77 4e 4e 28 73 71 6c 69 74 65 33 2a 2c 20 75  awNN(sqlite3*, u
24cd0 36 34 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  64);.char *sqlit
24ce0 65 33 44 62 53 74 72 44 75 70 28 73 71 6c 69 74  e3DbStrDup(sqlit
24cf0 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  e3*,const char*)
24d00 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44  ;.char *sqlite3D
24d10 62 53 74 72 4e 44 75 70 28 73 71 6c 69 74 65 33  bStrNDup(sqlite3
24d20 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75  *,const char*, u
24d30 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  64);.void *sqlit
24d40 65 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c  e3Realloc(void*,
24d50 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c   u64);.void *sql
24d60 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46  ite3DbReallocOrF
24d70 72 65 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 76  ree(sqlite3 *, v
24d80 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69  oid *, u64);.voi
24d90 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c  d *sqlite3DbReal
24da0 6c 6f 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 76  loc(sqlite3 *, v
24db0 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69  oid *, u64);.voi
24dc0 64 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28  d sqlite3DbFree(
24dd0 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29  sqlite3*, void*)
24de0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c  ;.int sqlite3Mal
24df0 6c 6f 63 53 69 7a 65 28 76 6f 69 64 2a 29 3b 0a  locSize(void*);.
24e00 69 6e 74 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  int sqlite3DbMal
24e10 6c 6f 63 53 69 7a 65 28 73 71 6c 69 74 65 33 2a  locSize(sqlite3*
24e20 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a  , void*);.void *
24e30 73 71 6c 69 74 65 33 53 63 72 61 74 63 68 4d 61  sqlite3ScratchMa
24e40 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20  lloc(int);.void 
24e50 73 71 6c 69 74 65 33 53 63 72 61 74 63 68 46 72  sqlite3ScratchFr
24e60 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20  ee(void*);.void 
24e70 2a 73 71 6c 69 74 65 33 50 61 67 65 4d 61 6c 6c  *sqlite3PageMall
24e80 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  oc(int);.void sq
24e90 6c 69 74 65 33 50 61 67 65 46 72 65 65 28 76 6f  lite3PageFree(vo
24ea0 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  id*);.void sqlit
24eb0 65 33 4d 65 6d 53 65 74 44 65 66 61 75 6c 74 28  e3MemSetDefault(
24ec0 76 6f 69 64 29 3b 0a 23 69 66 6e 64 65 66 20 53  void);.#ifndef S
24ed0 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45  QLITE_UNTESTABLE
24ee0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 6e  .void sqlite3Ben
24ef0 69 67 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b 73 28 76  ignMallocHooks(v
24f00 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 2c 20 76  oid (*)(void), v
24f10 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 29 3b 0a  oid (*)(void));.
24f20 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74  #endif.int sqlit
24f30 65 33 48 65 61 70 4e 65 61 72 6c 79 46 75 6c 6c  e3HeapNearlyFull
24f40 28 76 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4f  (void);../*.** O
24f50 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68 20 61  n systems with a
24f60 6d 70 6c 65 20 73 74 61 63 6b 20 73 70 61 63 65  mple stack space
24f70 20 61 6e 64 20 74 68 61 74 20 73 75 70 70 6f 72   and that suppor
24f80 74 20 61 6c 6c 6f 63 61 28 29 2c 20 6d 61 6b 65  t alloca(), make
24f90 0a 2a 2a 20 75 73 65 20 6f 66 20 61 6c 6c 6f 63  .** use of alloc
24fa0 61 28 29 20 74 6f 20 6f 62 74 61 69 6e 20 73 70  a() to obtain sp
24fb0 61 63 65 20 66 6f 72 20 6c 61 72 67 65 20 61 75  ace for large au
24fc0 74 6f 6d 61 74 69 63 20 6f 62 6a 65 63 74 73 2e  tomatic objects.
24fd0 20 20 42 79 20 64 65 66 61 75 6c 74 2c 0a 2a 2a    By default,.**
24fe0 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20 66 72   obtain space fr
24ff0 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e 0a 2a 2a 0a  om malloc()..**.
25000 2a 2a 20 54 68 65 20 61 6c 6c 6f 63 61 28 29 20  ** The alloca() 
25010 72 6f 75 74 69 6e 65 20 6e 65 76 65 72 20 72 65  routine never re
25020 74 75 72 6e 73 20 4e 55 4c 4c 2e 20 20 54 68 69  turns NULL.  Thi
25030 73 20 77 69 6c 6c 20 63 61 75 73 65 20 63 6f 64  s will cause cod
25040 65 20 70 61 74 68 73 0a 2a 2a 20 74 68 61 74 20  e paths.** that 
25050 64 65 61 6c 20 77 69 74 68 20 73 71 6c 69 74 65  deal with sqlite
25060 33 53 74 61 63 6b 41 6c 6c 6f 63 28 29 20 66 61  3StackAlloc() fa
25070 69 6c 75 72 65 73 20 74 6f 20 62 65 20 75 6e 72  ilures to be unr
25080 65 61 63 68 61 62 6c 65 2e 0a 2a 2f 0a 23 69 66  eachable..*/.#if
25090 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45 5f 41  def SQLITE_USE_A
250a0 4c 4c 4f 43 41 0a 23 20 64 65 66 69 6e 65 20 73  LLOCA.# define s
250b0 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
250c0 52 61 77 28 44 2c 4e 29 20 20 20 61 6c 6c 6f 63  Raw(D,N)   alloc
250d0 61 28 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71  a(N).# define sq
250e0 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a  lite3StackAllocZ
250f0 65 72 6f 28 44 2c 4e 29 20 20 6d 65 6d 73 65 74  ero(D,N)  memset
25100 28 61 6c 6c 6f 63 61 28 4e 29 2c 20 30 2c 20 4e  (alloca(N), 0, N
25110 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
25120 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c 50 29  e3StackFree(D,P)
25130 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
25140 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f  sqlite3StackAllo
25150 63 52 61 77 28 44 2c 4e 29 20 20 20 73 71 6c 69  cRaw(D,N)   sqli
25160 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 44  te3DbMallocRaw(D
25170 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,N).# define sql
25180 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65  ite3StackAllocZe
25190 72 6f 28 44 2c 4e 29 20 20 73 71 6c 69 74 65 33  ro(D,N)  sqlite3
251a0 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e  DbMallocZero(D,N
251b0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
251c0 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c 50 29  e3StackFree(D,P)
251d0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62         sqlite3Db
251e0 46 72 65 65 28 44 2c 50 29 0a 23 65 6e 64 69 66  Free(D,P).#endif
251f0 0a 0a 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f  ../* Do not allo
25200 77 20 62 6f 74 68 20 4d 45 4d 53 59 53 35 20 61  w both MEMSYS5 a
25210 6e 64 20 4d 45 4d 53 59 53 33 20 74 6f 20 62 65  nd MEMSYS3 to be
25220 20 64 65 66 69 6e 65 64 20 74 6f 67 65 74 68 65   defined togethe
25230 72 2e 20 20 49 66 20 74 68 65 79 0a 2a 2a 20 61  r.  If they.** a
25240 72 65 2c 20 64 69 73 61 62 6c 65 20 4d 45 4d 53  re, disable MEMS
25250 59 53 33 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  YS3.*/.#ifdef SQ
25260 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53  LITE_ENABLE_MEMS
25270 59 53 35 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65  YS5.const sqlite
25280 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73  3_mem_methods *s
25290 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73  qlite3MemGetMems
252a0 79 73 35 28 76 6f 69 64 29 3b 0a 23 75 6e 64 65  ys5(void);.#unde
252b0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
252c0 4d 45 4d 53 59 53 33 0a 23 65 6e 64 69 66 0a 23  MEMSYS3.#endif.#
252d0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
252e0 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 63 6f 6e 73  BLE_MEMSYS3.cons
252f0 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65  t sqlite3_mem_me
25300 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65  thods *sqlite3Me
25310 6d 47 65 74 4d 65 6d 73 79 73 33 28 76 6f 69 64  mGetMemsys3(void
25320 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e  );.#endif...#ifn
25330 64 65 66 20 53 51 4c 49 54 45 5f 4d 55 54 45 58  def SQLITE_MUTEX
25340 5f 4f 4d 49 54 0a 20 20 73 71 6c 69 74 65 33 5f  _OMIT.  sqlite3_
25350 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f  mutex_methods co
25360 6e 73 74 20 2a 73 71 6c 69 74 65 33 44 65 66 61  nst *sqlite3Defa
25370 75 6c 74 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a  ultMutex(void);.
25380 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f    sqlite3_mutex_
25390 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73  methods const *s
253a0 71 6c 69 74 65 33 4e 6f 6f 70 4d 75 74 65 78 28  qlite3NoopMutex(
253b0 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33  void);.  sqlite3
253c0 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33 4d  _mutex *sqlite3M
253d0 75 74 65 78 41 6c 6c 6f 63 28 69 6e 74 29 3b 0a  utexAlloc(int);.
253e0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74    int sqlite3Mut
253f0 65 78 49 6e 69 74 28 76 6f 69 64 29 3b 0a 20 20  exInit(void);.  
25400 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74 65 78  int sqlite3Mutex
25410 45 6e 64 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69  End(void);.#endi
25420 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  f.#if !defined(S
25430 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54  QLITE_MUTEX_OMIT
25440 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
25450 4c 49 54 45 5f 4d 55 54 45 58 5f 4e 4f 4f 50 29  LITE_MUTEX_NOOP)
25460 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  .  void sqlite3M
25470 65 6d 6f 72 79 42 61 72 72 69 65 72 28 76 6f 69  emoryBarrier(voi
25480 64 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  d);.#else.# defi
25490 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 6f 72 79  ne sqlite3Memory
254a0 42 61 72 72 69 65 72 28 29 0a 23 65 6e 64 69 66  Barrier().#endif
254b0 0a 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20  ..sqlite3_int64 
254c0 73 71 6c 69 74 65 33 53 74 61 74 75 73 56 61 6c  sqlite3StatusVal
254d0 75 65 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  ue(int);.void sq
254e0 6c 69 74 65 33 53 74 61 74 75 73 55 70 28 69 6e  lite3StatusUp(in
254f0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
25500 6c 69 74 65 33 53 74 61 74 75 73 44 6f 77 6e 28  lite3StatusDown(
25510 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
25520 73 71 6c 69 74 65 33 53 74 61 74 75 73 48 69 67  sqlite3StatusHig
25530 68 77 61 74 65 72 28 69 6e 74 2c 20 69 6e 74 29  hwater(int, int)
25540 3b 0a 0a 2f 2a 20 41 63 63 65 73 73 20 74 6f 20  ;../* Access to 
25550 6d 75 74 65 78 65 73 20 75 73 65 64 20 62 79 20  mutexes used by 
25560 73 71 6c 69 74 65 33 5f 73 74 61 74 75 73 28 29  sqlite3_status()
25570 20 2a 2f 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65   */.sqlite3_mute
25580 78 20 2a 73 71 6c 69 74 65 33 50 63 61 63 68 65  x *sqlite3Pcache
25590 31 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 73 71  1Mutex(void);.sq
255a0 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c  lite3_mutex *sql
255b0 69 74 65 33 4d 61 6c 6c 6f 63 4d 75 74 65 78 28  ite3MallocMutex(
255c0 76 6f 69 64 29 3b 0a 0a 23 69 66 6e 64 65 66 20  void);..#ifndef 
255d0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
255e0 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 69 6e 74  TING_POINT.  int
255f0 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 64 6f   sqlite3IsNaN(do
25600 75 62 6c 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64  uble);.#else.# d
25610 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e  efine sqlite3IsN
25620 61 4e 28 58 29 20 20 30 0a 23 65 6e 64 69 66 0a  aN(X)  0.#endif.
25630 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
25640 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
25650 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 68 6f  ing structure ho
25660 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  lds information 
25670 61 62 6f 75 74 20 53 51 4c 0a 2a 2a 20 66 75 6e  about SQL.** fun
25680 63 74 69 6f 6e 73 20 61 72 67 75 6d 65 6e 74 73  ctions arguments
25690 20 74 68 61 74 20 61 72 65 20 74 68 65 20 70 61   that are the pa
256a0 72 61 6d 65 74 65 72 73 20 74 6f 20 74 68 65 20  rameters to the 
256b0 70 72 69 6e 74 66 28 29 20 66 75 6e 63 74 69 6f  printf() functio
256c0 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50 72 69  n..*/.struct Pri
256d0 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 7b 0a 20  ntfArguments {. 
256e0 20 69 6e 74 20 6e 41 72 67 3b 20 20 20 20 20 20   int nArg;      
256f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 74            /* Tot
25700 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67  al number of arg
25710 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20  uments */.  int 
25720 6e 55 73 65 64 3b 20 20 20 20 20 20 20 20 20 20  nUsed;          
25730 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
25740 66 20 61 72 67 75 6d 65 6e 74 73 20 75 73 65 64  f arguments used
25750 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 73 71 6c   so far */.  sql
25760 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70 41  ite3_value **apA
25770 72 67 3b 20 20 20 2f 2a 20 54 68 65 20 61 72 67  rg;   /* The arg
25780 75 6d 65 6e 74 20 76 61 6c 75 65 73 20 2a 2f 0a  ument values */.
25790 7d 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  };..void sqlite3
257a0 56 58 50 72 69 6e 74 66 28 53 74 72 41 63 63 75  VXPrintf(StrAccu
257b0 6d 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  m*, const char*,
257c0 20 76 61 5f 6c 69 73 74 29 3b 0a 76 6f 69 64 20   va_list);.void 
257d0 73 71 6c 69 74 65 33 58 50 72 69 6e 74 66 28 53  sqlite3XPrintf(S
257e0 74 72 41 63 63 75 6d 2a 2c 20 63 6f 6e 73 74 20  trAccum*, const 
257f0 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61  char*, ...);.cha
25800 72 20 2a 73 71 6c 69 74 65 33 4d 50 72 69 6e 74  r *sqlite3MPrint
25810 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  f(sqlite3*,const
25820 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68   char*, ...);.ch
25830 61 72 20 2a 73 71 6c 69 74 65 33 56 4d 50 72 69  ar *sqlite3VMPri
25840 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ntf(sqlite3*,con
25850 73 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73  st char*, va_lis
25860 74 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28  t);.#if defined(
25870 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c  SQLITE_DEBUG) ||
25880 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
25890 48 41 56 45 5f 4f 53 5f 54 52 41 43 45 29 0a 20  HAVE_OS_TRACE). 
258a0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 62   void sqlite3Deb
258b0 75 67 50 72 69 6e 74 66 28 63 6f 6e 73 74 20 63  ugPrintf(const c
258c0 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64  har*, ...);.#end
258d0 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  if.#if defined(S
258e0 51 4c 49 54 45 5f 54 45 53 54 29 0a 20 20 76 6f  QLITE_TEST).  vo
258f0 69 64 20 2a 73 71 6c 69 74 65 33 54 65 73 74 54  id *sqlite3TestT
25900 65 78 74 54 6f 50 74 72 28 63 6f 6e 73 74 20 63  extToPtr(const c
25910 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  har*);.#endif..#
25920 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
25930 45 5f 44 45 42 55 47 29 0a 20 20 76 6f 69 64 20  E_DEBUG).  void 
25940 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 45  sqlite3TreeViewE
25950 78 70 72 28 54 72 65 65 56 69 65 77 2a 2c 20 63  xpr(TreeView*, c
25960 6f 6e 73 74 20 45 78 70 72 2a 2c 20 75 38 29 3b  onst Expr*, u8);
25970 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54  .  void sqlite3T
25980 72 65 65 56 69 65 77 42 61 72 65 45 78 70 72 4c  reeViewBareExprL
25990 69 73 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63  ist(TreeView*, c
259a0 6f 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 2c 20  onst ExprList*, 
259b0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
259c0 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65  void sqlite3Tree
259d0 56 69 65 77 45 78 70 72 4c 69 73 74 28 54 72 65  ViewExprList(Tre
259e0 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78  eView*, const Ex
259f0 70 72 4c 69 73 74 2a 2c 20 75 38 2c 20 63 6f 6e  prList*, u8, con
25a00 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
25a10 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65  d sqlite3TreeVie
25a20 77 53 65 6c 65 63 74 28 54 72 65 65 56 69 65 77  wSelect(TreeView
25a30 2a 2c 20 63 6f 6e 73 74 20 53 65 6c 65 63 74 2a  *, const Select*
25a40 2c 20 75 38 29 3b 0a 20 20 76 6f 69 64 20 73 71  , u8);.  void sq
25a50 6c 69 74 65 33 54 72 65 65 56 69 65 77 57 69 74  lite3TreeViewWit
25a60 68 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e  h(TreeView*, con
25a70 73 74 20 57 69 74 68 2a 2c 20 75 38 29 3b 0a 23  st With*, u8);.#
25a80 65 6e 64 69 66 0a 0a 0a 76 6f 69 64 20 73 71 6c  endif...void sql
25a90 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 63 68  ite3SetString(ch
25aa0 61 72 20 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 2c  ar **, sqlite3*,
25ab0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76   const char*);.v
25ac0 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72  oid sqlite3Error
25ad0 4d 73 67 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73  Msg(Parse*, cons
25ae0 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76  t char*, ...);.v
25af0 6f 69 64 20 73 71 6c 69 74 65 33 44 65 71 75 6f  oid sqlite3Dequo
25b00 74 65 28 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  te(char*);.void 
25b10 73 71 6c 69 74 65 33 54 6f 6b 65 6e 49 6e 69 74  sqlite3TokenInit
25b20 28 54 6f 6b 65 6e 2a 2c 63 68 61 72 2a 29 3b 0a  (Token*,char*);.
25b30 69 6e 74 20 73 71 6c 69 74 65 33 4b 65 79 77 6f  int sqlite3Keywo
25b40 72 64 43 6f 64 65 28 63 6f 6e 73 74 20 75 6e 73  rdCode(const uns
25b50 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 69 6e 74  igned char*, int
25b60 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75  );.int sqlite3Ru
25b70 6e 50 61 72 73 65 72 28 50 61 72 73 65 2a 2c 20  nParser(Parse*, 
25b80 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61  const char*, cha
25b90 72 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  r **);.void sqli
25ba0 74 65 33 46 69 6e 69 73 68 43 6f 64 69 6e 67 28  te3FinishCoding(
25bb0 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  Parse*);.int sql
25bc0 69 74 65 33 47 65 74 54 65 6d 70 52 65 67 28 50  ite3GetTempReg(P
25bd0 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
25be0 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52  ite3ReleaseTempR
25bf0 65 67 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a  eg(Parse*,int);.
25c00 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 65  int sqlite3GetTe
25c10 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69  mpRange(Parse*,i
25c20 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
25c30 33 52 65 6c 65 61 73 65 54 65 6d 70 52 61 6e 67  3ReleaseTempRang
25c40 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74  e(Parse*,int,int
25c50 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
25c60 6c 65 61 72 54 65 6d 70 52 65 67 43 61 63 68 65  learTempRegCache
25c70 28 50 61 72 73 65 2a 29 3b 0a 23 69 66 64 65 66  (Parse*);.#ifdef
25c80 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e   SQLITE_DEBUG.in
25c90 74 20 73 71 6c 69 74 65 33 4e 6f 54 65 6d 70 73  t sqlite3NoTemps
25ca0 49 6e 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69  InRange(Parse*,i
25cb0 6e 74 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  nt,int);.#endif.
25cc0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
25cd0 72 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c  rAlloc(sqlite3*,
25ce0 69 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a  int,const Token*
25cf0 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ,int);.Expr *sql
25d00 69 74 65 33 45 78 70 72 28 73 71 6c 69 74 65 33  ite3Expr(sqlite3
25d10 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
25d20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
25d30 45 78 70 72 41 74 74 61 63 68 53 75 62 74 72 65  ExprAttachSubtre
25d40 65 73 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  es(sqlite3*,Expr
25d50 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a  *,Expr*,Expr*);.
25d60 45 78 70 72 20 2a 73 71 6c 69 74 65 33 50 45 78  Expr *sqlite3PEx
25d70 70 72 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  pr(Parse*, int, 
25d80 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  Expr*, Expr*);.v
25d90 6f 69 64 20 73 71 6c 69 74 65 33 50 45 78 70 72  oid sqlite3PExpr
25da0 41 64 64 53 65 6c 65 63 74 28 50 61 72 73 65 2a  AddSelect(Parse*
25db0 2c 20 45 78 70 72 2a 2c 20 53 65 6c 65 63 74 2a  , Expr*, Select*
25dc0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
25dd0 45 78 70 72 41 6e 64 28 73 71 6c 69 74 65 33 2a  ExprAnd(sqlite3*
25de0 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a  ,Expr*, Expr*);.
25df0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
25e00 72 46 75 6e 63 74 69 6f 6e 28 50 61 72 73 65 2a  rFunction(Parse*
25e10 2c 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65  ,ExprList*, Toke
25e20 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
25e30 33 45 78 70 72 41 73 73 69 67 6e 56 61 72 4e 75  3ExprAssignVarNu
25e40 6d 62 65 72 28 50 61 72 73 65 2a 2c 20 45 78 70  mber(Parse*, Exp
25e50 72 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20 73  r*, u32);.void s
25e60 71 6c 69 74 65 33 45 78 70 72 44 65 6c 65 74 65  qlite3ExprDelete
25e70 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 2a  (sqlite3*, Expr*
25e80 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c  );.ExprList *sql
25e90 69 74 65 33 45 78 70 72 4c 69 73 74 41 70 70 65  ite3ExprListAppe
25ea0 6e 64 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  nd(Parse*,ExprLi
25eb0 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72  st*,Expr*);.Expr
25ec0 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70  List *sqlite3Exp
25ed0 72 4c 69 73 74 41 70 70 65 6e 64 56 65 63 74 6f  rListAppendVecto
25ee0 72 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73  r(Parse*,ExprLis
25ef0 74 2a 2c 49 64 4c 69 73 74 2a 2c 45 78 70 72 2a  t*,IdList*,Expr*
25f00 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
25f10 78 70 72 4c 69 73 74 53 65 74 53 6f 72 74 4f 72  xprListSetSortOr
25f20 64 65 72 28 45 78 70 72 4c 69 73 74 2a 2c 69 6e  der(ExprList*,in
25f30 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
25f40 45 78 70 72 4c 69 73 74 53 65 74 4e 61 6d 65 28  ExprListSetName(
25f50 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
25f60 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f  ,Token*,int);.vo
25f70 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
25f80 73 74 53 65 74 53 70 61 6e 28 50 61 72 73 65 2a  stSetSpan(Parse*
25f90 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 53  ,ExprList*,ExprS
25fa0 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  pan*);.void sqli
25fb0 74 65 33 45 78 70 72 4c 69 73 74 44 65 6c 65 74  te3ExprListDelet
25fc0 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72  e(sqlite3*, Expr
25fd0 4c 69 73 74 2a 29 3b 0a 75 33 32 20 73 71 6c 69  List*);.u32 sqli
25fe0 74 65 33 45 78 70 72 4c 69 73 74 46 6c 61 67 73  te3ExprListFlags
25ff0 28 63 6f 6e 73 74 20 45 78 70 72 4c 69 73 74 2a  (const ExprList*
26000 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
26010 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 63 68 61  it(sqlite3*, cha
26020 72 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  r**);.int sqlite
26030 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 76 6f  3InitCallback(vo
26040 69 64 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2a  id*, int, char**
26050 2c 20 63 68 61 72 2a 2a 29 3b 0a 76 6f 69 64 20  , char**);.void 
26060 73 71 6c 69 74 65 33 50 72 61 67 6d 61 28 50 61  sqlite3Pragma(Pa
26070 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
26080 6e 2a 2c 49 64 4c 69 73 74 2a 29 3b 0a 23 69 66  n*,IdList*);.#if
26090 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
260a0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 4d 6f  _VIRTUALTABLE.Mo
260b0 64 75 6c 65 20 2a 73 71 6c 69 74 65 33 50 72 61  dule *sqlite3Pra
260c0 67 6d 61 56 74 61 62 52 65 67 69 73 74 65 72 28  gmaVtabRegister(
260d0 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
260e0 68 61 72 20 2a 7a 4e 61 6d 65 29 3b 0a 23 65 6e  har *zName);.#en
260f0 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
26100 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f  ResetAllSchemasO
26110 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c 69  fConnection(sqli
26120 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
26130 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d  te3ResetOneSchem
26140 61 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b  a(sqlite3*,int);
26150 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c  .void sqlite3Col
26160 6c 61 70 73 65 44 61 74 61 62 61 73 65 41 72 72  lapseDatabaseArr
26170 61 79 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  ay(sqlite3*);.vo
26180 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74  id sqlite3Commit
26190 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65 73 28  InternalChanges(
261a0 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
261b0 73 71 6c 69 74 65 33 44 65 6c 65 74 65 43 6f 6c  sqlite3DeleteCol
261c0 75 6d 6e 4e 61 6d 65 73 28 73 71 6c 69 74 65 33  umnNames(sqlite3
261d0 2a 2c 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73  *,Table*);.int s
261e0 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 73 46 72 6f  qlite3ColumnsFro
261f0 6d 45 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a  mExprList(Parse*
26200 2c 45 78 70 72 4c 69 73 74 2a 2c 69 31 36 2a 2c  ,ExprList*,i16*,
26210 43 6f 6c 75 6d 6e 2a 2a 29 3b 0a 76 6f 69 64 20  Column**);.void 
26220 73 71 6c 69 74 65 33 53 65 6c 65 63 74 41 64 64  sqlite3SelectAdd
26230 43 6f 6c 75 6d 6e 54 79 70 65 41 6e 64 43 6f 6c  ColumnTypeAndCol
26240 6c 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61  lation(Parse*,Ta
26250 62 6c 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 54  ble*,Select*);.T
26260 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 52 65 73  able *sqlite3Res
26270 75 6c 74 53 65 74 4f 66 53 65 6c 65 63 74 28 50  ultSetOfSelect(P
26280 61 72 73 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a  arse*,Select*);.
26290 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e  void sqlite3Open
262a0 4d 61 73 74 65 72 54 61 62 6c 65 28 50 61 72 73  MasterTable(Pars
262b0 65 20 2a 2c 20 69 6e 74 29 3b 0a 49 6e 64 65 78  e *, int);.Index
262c0 20 2a 73 71 6c 69 74 65 33 50 72 69 6d 61 72 79   *sqlite3Primary
262d0 4b 65 79 49 6e 64 65 78 28 54 61 62 6c 65 2a 29  KeyIndex(Table*)
262e0 3b 0a 69 31 36 20 73 71 6c 69 74 65 33 43 6f 6c  ;.i16 sqlite3Col
262f0 75 6d 6e 4f 66 49 6e 64 65 78 28 49 6e 64 65 78  umnOfIndex(Index
26300 2a 2c 20 69 31 36 29 3b 0a 76 6f 69 64 20 73 71  *, i16);.void sq
26310 6c 69 74 65 33 53 74 61 72 74 54 61 62 6c 65 28  lite3StartTable(
26320 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
26330 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  ken*,int,int,int
26340 2c 69 6e 74 29 3b 0a 23 69 66 20 53 51 4c 49 54  ,int);.#if SQLIT
26350 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f  E_ENABLE_HIDDEN_
26360 43 4f 4c 55 4d 4e 53 0a 20 20 76 6f 69 64 20 73  COLUMNS.  void s
26370 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 50 72 6f 70  qlite3ColumnProp
26380 65 72 74 69 65 73 46 72 6f 6d 4e 61 6d 65 28 54  ertiesFromName(T
26390 61 62 6c 65 2a 2c 20 43 6f 6c 75 6d 6e 2a 29 3b  able*, Column*);
263a0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
263b0 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 50 72 6f  sqlite3ColumnPro
263c0 70 65 72 74 69 65 73 46 72 6f 6d 4e 61 6d 65 28  pertiesFromName(
263d0 54 2c 43 29 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f  T,C) /* no-op */
263e0 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
263f0 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 28 50 61  ite3AddColumn(Pa
26400 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
26410 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
26420 33 41 64 64 4e 6f 74 4e 75 6c 6c 28 50 61 72 73  3AddNotNull(Pars
26430 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
26440 71 6c 69 74 65 33 41 64 64 50 72 69 6d 61 72 79  qlite3AddPrimary
26450 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72  Key(Parse*, Expr
26460 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  List*, int, int,
26470 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
26480 74 65 33 41 64 64 43 68 65 63 6b 43 6f 6e 73 74  te3AddCheckConst
26490 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 45 78  raint(Parse*, Ex
264a0 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
264b0 65 33 41 64 64 44 65 66 61 75 6c 74 56 61 6c 75  e3AddDefaultValu
264c0 65 28 50 61 72 73 65 2a 2c 45 78 70 72 53 70 61  e(Parse*,ExprSpa
264d0 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
264e0 33 41 64 64 43 6f 6c 6c 61 74 65 54 79 70 65 28  3AddCollateType(
264f0 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Parse*, Token*);
26500 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64  .void sqlite3End
26510 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b  Table(Parse*,Tok
26520 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75 38 2c 53 65  en*,Token*,u8,Se
26530 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lect*);.int sqli
26540 74 65 33 50 61 72 73 65 55 72 69 28 63 6f 6e 73  te3ParseUri(cons
26550 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
26560 61 72 2a 2c 75 6e 73 69 67 6e 65 64 20 69 6e 74  ar*,unsigned int
26570 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
26580 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 76         sqlite3_v
26590 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68 61 72  fs**,char**,char
265a0 20 2a 2a 29 3b 0a 42 74 72 65 65 20 2a 73 71 6c   **);.Btree *sql
265b0 69 74 65 33 44 62 4e 61 6d 65 54 6f 42 74 72 65  ite3DbNameToBtre
265c0 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  e(sqlite3*,const
265d0 20 63 68 61 72 2a 29 3b 0a 0a 23 69 66 64 65 66   char*);..#ifdef
265e0 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42   SQLITE_UNTESTAB
265f0 4c 45 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  LE.# define sqli
26600 74 65 33 46 61 75 6c 74 53 69 6d 28 58 29 20 53  te3FaultSim(X) S
26610 51 4c 49 54 45 5f 4f 4b 0a 23 65 6c 73 65 0a 20  QLITE_OK.#else. 
26620 20 69 6e 74 20 73 71 6c 69 74 65 33 46 61 75 6c   int sqlite3Faul
26630 74 53 69 6d 28 69 6e 74 29 3b 0a 23 65 6e 64 69  tSim(int);.#endi
26640 66 0a 0a 42 69 74 76 65 63 20 2a 73 71 6c 69 74  f..Bitvec *sqlit
26650 65 33 42 69 74 76 65 63 43 72 65 61 74 65 28 75  e3BitvecCreate(u
26660 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  32);.int sqlite3
26670 42 69 74 76 65 63 54 65 73 74 28 42 69 74 76 65  BitvecTest(Bitve
26680 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73 71  c*, u32);.int sq
26690 6c 69 74 65 33 42 69 74 76 65 63 54 65 73 74 4e  lite3BitvecTestN
266a0 6f 74 4e 75 6c 6c 28 42 69 74 76 65 63 2a 2c 20  otNull(Bitvec*, 
266b0 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  u32);.int sqlite
266c0 33 42 69 74 76 65 63 53 65 74 28 42 69 74 76 65  3BitvecSet(Bitve
266d0 63 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20 73  c*, u32);.void s
266e0 71 6c 69 74 65 33 42 69 74 76 65 63 43 6c 65 61  qlite3BitvecClea
266f0 72 28 42 69 74 76 65 63 2a 2c 20 75 33 32 2c 20  r(Bitvec*, u32, 
26700 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  void*);.void sql
26710 69 74 65 33 42 69 74 76 65 63 44 65 73 74 72 6f  ite3BitvecDestro
26720 79 28 42 69 74 76 65 63 2a 29 3b 0a 75 33 32 20  y(Bitvec*);.u32 
26730 73 71 6c 69 74 65 33 42 69 74 76 65 63 53 69 7a  sqlite3BitvecSiz
26740 65 28 42 69 74 76 65 63 2a 29 3b 0a 23 69 66 6e  e(Bitvec*);.#ifn
26750 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53  def SQLITE_UNTES
26760 54 41 42 4c 45 0a 69 6e 74 20 73 71 6c 69 74 65  TABLE.int sqlite
26770 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e 54 65  3BitvecBuiltinTe
26780 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a 23 65  st(int,int*);.#e
26790 6e 64 69 66 0a 0a 52 6f 77 53 65 74 20 2a 73 71  ndif..RowSet *sq
267a0 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 69 74 28  lite3RowSetInit(
267b0 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 2c  sqlite3*, void*,
267c0 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 3b 0a   unsigned int);.
267d0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53  void sqlite3RowS
267e0 65 74 43 6c 65 61 72 28 52 6f 77 53 65 74 2a 29  etClear(RowSet*)
267f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  ;.void sqlite3Ro
26800 77 53 65 74 49 6e 73 65 72 74 28 52 6f 77 53 65  wSetInsert(RowSe
26810 74 2a 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71  t*, i64);.int sq
26820 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73 74 28  lite3RowSetTest(
26830 52 6f 77 53 65 74 2a 2c 20 69 6e 74 20 69 42 61  RowSet*, int iBa
26840 74 63 68 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73  tch, i64);.int s
26850 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74  qlite3RowSetNext
26860 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 2a 29 3b  (RowSet*, i64*);
26870 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72  ..void sqlite3Cr
26880 65 61 74 65 56 69 65 77 28 50 61 72 73 65 2a 2c  eateView(Parse*,
26890 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Token*,Token*,To
268a0 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53  ken*,ExprList*,S
268b0 65 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b  elect*,int,int);
268c0 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
268d0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29  QLITE_OMIT_VIEW)
268e0 20 7c 7c 20 21 64 65 66 69 6e 65 64 28 53 51 4c   || !defined(SQL
268f0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
26900 54 41 42 4c 45 29 0a 20 20 69 6e 74 20 73 71 6c  TABLE).  int sql
26910 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d  ite3ViewGetColum
26920 6e 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 54 61  nNames(Parse*,Ta
26930 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  ble*);.#else.# d
26940 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 69 65  efine sqlite3Vie
26950 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28  wGetColumnNames(
26960 41 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a 23  A,B) 0.#endif..#
26970 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54  if SQLITE_MAX_AT
26980 54 41 43 48 45 44 3e 33 30 0a 20 20 69 6e 74 20  TACHED>30.  int 
26990 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c  sqlite3DbMaskAll
269a0 5a 65 72 6f 28 79 44 62 4d 61 73 6b 29 3b 0a 23  Zero(yDbMask);.#
269b0 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
269c0 65 33 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73  e3DropTable(Pars
269d0 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e  e*, SrcList*, in
269e0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
269f0 6c 69 74 65 33 43 6f 64 65 44 72 6f 70 54 61 62  lite3CodeDropTab
26a00 6c 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  le(Parse*, Table
26a10 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
26a20 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
26a30 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20  Table(sqlite3*, 
26a40 54 61 62 6c 65 2a 29 3b 0a 23 69 66 6e 64 65 66  Table*);.#ifndef
26a50 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
26a60 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 76 6f 69  OINCREMENT.  voi
26a70 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63  d sqlite3Autoinc
26a80 72 65 6d 65 6e 74 42 65 67 69 6e 28 50 61 72 73  rementBegin(Pars
26a90 65 20 2a 70 50 61 72 73 65 29 3b 0a 20 20 76 6f  e *pParse);.  vo
26aa0 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e  id sqlite3Autoin
26ab0 63 72 65 6d 65 6e 74 45 6e 64 28 50 61 72 73 65  crementEnd(Parse
26ac0 20 2a 70 50 61 72 73 65 29 3b 0a 23 65 6c 73 65   *pParse);.#else
26ad0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
26ae0 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65  3AutoincrementBe
26af0 67 69 6e 28 58 29 0a 23 20 64 65 66 69 6e 65 20  gin(X).# define 
26b00 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65  sqlite3Autoincre
26b10 6d 65 6e 74 45 6e 64 28 58 29 0a 23 65 6e 64 69  mentEnd(X).#endi
26b20 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e  f.void sqlite3In
26b30 73 65 72 74 28 50 61 72 73 65 2a 2c 20 53 72 63  sert(Parse*, Src
26b40 4c 69 73 74 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  List*, Select*, 
26b50 49 64 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76  IdList*, int);.v
26b60 6f 69 64 20 2a 73 71 6c 69 74 65 33 41 72 72 61  oid *sqlite3Arra
26b70 79 41 6c 6c 6f 63 61 74 65 28 73 71 6c 69 74 65  yAllocate(sqlite
26b80 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c 69 6e 74  3*,void*,int,int
26b90 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c 69 73 74 20  *,int*);.IdList 
26ba0 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74 41 70  *sqlite3IdListAp
26bb0 70 65 6e 64 28 50 61 72 73 65 2a 2c 20 49 64 4c  pend(Parse*, IdL
26bc0 69 73 74 2a 2c 20 63 68 61 72 2a 29 3b 0a 69 6e  ist*, char*);.in
26bd0 74 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74 49  t sqlite3IdListI
26be0 6e 64 65 78 28 49 64 4c 69 73 74 2a 2c 63 6f 6e  ndex(IdList*,con
26bf0 73 74 20 63 68 61 72 2a 29 3b 0a 53 72 63 4c 69  st char*);.SrcLi
26c00 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  st *sqlite3SrcLi
26c10 73 74 45 6e 6c 61 72 67 65 28 73 71 6c 69 74 65  stEnlarge(sqlite
26c20 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e  3*, SrcList*, in
26c30 74 2c 20 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74  t, int);.SrcList
26c40 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74   *sqlite3SrcList
26c50 41 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c  Append(sqlite3*,
26c60 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e   SrcList*, Token
26c70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c  *, Token*);.SrcL
26c80 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c  ist *sqlite3SrcL
26c90 69 73 74 41 70 70 65 6e 64 46 72 6f 6d 54 65 72  istAppendFromTer
26ca0 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  m(Parse*, SrcLis
26cb0 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  t*, Token*, Toke
26cc0 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  n*,.            
26cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26ce0 20 20 20 20 20 20 20 20 20 20 54 6f 6b 65 6e 2a            Token*
26cf0 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 2a  , Select*, Expr*
26d00 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64  , IdList*);.void
26d10 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 49   sqlite3SrcListI
26d20 6e 64 65 78 65 64 42 79 28 50 61 72 73 65 20 2a  ndexedBy(Parse *
26d30 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 6f 6b  , SrcList *, Tok
26d40 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  en *);.void sqli
26d50 74 65 33 53 72 63 4c 69 73 74 46 75 6e 63 41 72  te3SrcListFuncAr
26d60 67 73 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  gs(Parse*, SrcLi
26d70 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  st*, ExprList*);
26d80 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65  .int sqlite3Inde
26d90 78 65 64 42 79 4c 6f 6f 6b 75 70 28 50 61 72 73  xedByLookup(Pars
26da0 65 20 2a 2c 20 73 74 72 75 63 74 20 53 72 63 4c  e *, struct SrcL
26db0 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f 69  ist_item *);.voi
26dc0 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  d sqlite3SrcList
26dd0 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 53 72  ShiftJoinType(Sr
26de0 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  cList*);.void sq
26df0 6c 69 74 65 33 53 72 63 4c 69 73 74 41 73 73 69  lite3SrcListAssi
26e00 67 6e 43 75 72 73 6f 72 73 28 50 61 72 73 65 2a  gnCursors(Parse*
26e10 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69  , SrcList*);.voi
26e20 64 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44  d sqlite3IdListD
26e30 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
26e40 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  IdList*);.void s
26e50 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44 65 6c  qlite3SrcListDel
26e60 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72  ete(sqlite3*, Sr
26e70 63 4c 69 73 74 2a 29 3b 0a 49 6e 64 65 78 20 2a  cList*);.Index *
26e80 73 71 6c 69 74 65 33 41 6c 6c 6f 63 61 74 65 49  sqlite3AllocateI
26e90 6e 64 65 78 4f 62 6a 65 63 74 28 73 71 6c 69 74  ndexObject(sqlit
26ea0 65 33 2a 2c 69 31 36 2c 69 6e 74 2c 63 68 61 72  e3*,i16,int,char
26eb0 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  **);.void sqlite
26ec0 33 43 72 65 61 74 65 49 6e 64 65 78 28 50 61 72  3CreateIndex(Par
26ed0 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  se*,Token*,Token
26ee0 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 4c  *,SrcList*,ExprL
26ef0 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c  ist*,int,Token*,
26f00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26f10 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a             Expr*
26f20 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b  , int, int, u8);
26f30 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f  .void sqlite3Dro
26f40 70 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 53  pIndex(Parse*, S
26f50 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69  rcList*, int);.i
26f60 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  nt sqlite3Select
26f70 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a  (Parse*, Select*
26f80 2c 20 53 65 6c 65 63 74 44 65 73 74 2a 29 3b 0a  , SelectDest*);.
26f90 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53  Select *sqlite3S
26fa0 65 6c 65 63 74 4e 65 77 28 50 61 72 73 65 2a 2c  electNew(Parse*,
26fb0 45 78 70 72 4c 69 73 74 2a 2c 53 72 63 4c 69 73  ExprList*,SrcLis
26fc0 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73  t*,Expr*,ExprLis
26fd0 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t*,.            
26fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70               Exp
26ff0 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 33 32  r*,ExprList*,u32
27000 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 76  ,Expr*,Expr*);.v
27010 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63  oid sqlite3Selec
27020 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  tDelete(sqlite3*
27030 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c  , Select*);.Tabl
27040 65 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73  e *sqlite3SrcLis
27050 74 4c 6f 6f 6b 75 70 28 50 61 72 73 65 2a 2c 20  tLookup(Parse*, 
27060 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  SrcList*);.int s
27070 71 6c 69 74 65 33 49 73 52 65 61 64 4f 6e 6c 79  qlite3IsReadOnly
27080 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
27090 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
270a0 74 65 33 4f 70 65 6e 54 61 62 6c 65 28 50 61 72  te3OpenTable(Par
270b0 73 65 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20 69  se*, int iCur, i
270c0 6e 74 20 69 44 62 2c 20 54 61 62 6c 65 2a 2c 20  nt iDb, Table*, 
270d0 69 6e 74 29 3b 0a 23 69 66 20 64 65 66 69 6e 65  int);.#if define
270e0 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
270f0 55 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49  UPDATE_DELETE_LI
27100 4d 49 54 29 20 26 26 20 21 64 65 66 69 6e 65 64  MIT) && !defined
27110 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42  (SQLITE_OMIT_SUB
27120 51 55 45 52 59 29 0a 45 78 70 72 20 2a 73 71 6c  QUERY).Expr *sql
27130 69 74 65 33 4c 69 6d 69 74 57 68 65 72 65 28 50  ite3LimitWhere(P
27140 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45  arse*,SrcList*,E
27150 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45  xpr*,ExprList*,E
27160 78 70 72 2a 2c 45 78 70 72 2a 2c 63 68 61 72 2a  xpr*,Expr*,char*
27170 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  );.#endif.void s
27180 71 6c 69 74 65 33 44 65 6c 65 74 65 46 72 6f 6d  qlite3DeleteFrom
27190 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
271a0 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
271b0 73 71 6c 69 74 65 33 55 70 64 61 74 65 28 50 61  sqlite3Update(Pa
271c0 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
271d0 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a  ExprList*, Expr*
271e0 2c 20 69 6e 74 29 3b 0a 57 68 65 72 65 49 6e 66  , int);.WhereInf
271f0 6f 20 2a 73 71 6c 69 74 65 33 57 68 65 72 65 42  o *sqlite3WhereB
27200 65 67 69 6e 28 50 61 72 73 65 2a 2c 53 72 63 4c  egin(Parse*,SrcL
27210 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c  ist*,Expr*,ExprL
27220 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75  ist*,ExprList*,u
27230 31 36 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  16,int);.void sq
27240 6c 69 74 65 33 57 68 65 72 65 45 6e 64 28 57 68  lite3WhereEnd(Wh
27250 65 72 65 49 6e 66 6f 2a 29 3b 0a 4c 6f 67 45 73  ereInfo*);.LogEs
27260 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f 75  t sqlite3WhereOu
27270 74 70 75 74 52 6f 77 43 6f 75 6e 74 28 57 68 65  tputRowCount(Whe
27280 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
27290 6c 69 74 65 33 57 68 65 72 65 49 73 44 69 73 74  lite3WhereIsDist
272a0 69 6e 63 74 28 57 68 65 72 65 49 6e 66 6f 2a 29  inct(WhereInfo*)
272b0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
272c0 72 65 49 73 4f 72 64 65 72 65 64 28 57 68 65 72  reIsOrdered(Wher
272d0 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
272e0 69 74 65 33 57 68 65 72 65 4f 72 64 65 72 65 64  ite3WhereOrdered
272f0 49 6e 6e 65 72 4c 6f 6f 70 28 57 68 65 72 65 49  InnerLoop(WhereI
27300 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
27310 65 33 57 68 65 72 65 49 73 53 6f 72 74 65 64 28  e3WhereIsSorted(
27320 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
27330 20 73 71 6c 69 74 65 33 57 68 65 72 65 43 6f 6e   sqlite3WhereCon
27340 74 69 6e 75 65 4c 61 62 65 6c 28 57 68 65 72 65  tinueLabel(Where
27350 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Info*);.int sqli
27360 74 65 33 57 68 65 72 65 42 72 65 61 6b 4c 61 62  te3WhereBreakLab
27370 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  el(WhereInfo*);.
27380 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
27390 4f 6b 4f 6e 65 50 61 73 73 28 57 68 65 72 65 49  OkOnePass(WhereI
273a0 6e 66 6f 2a 2c 20 69 6e 74 2a 29 3b 0a 23 64 65  nfo*, int*);.#de
273b0 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f 4f 46 46  fine ONEPASS_OFF
273c0 20 20 20 20 20 20 30 20 20 20 20 20 20 20 20 2f        0        /
273d0 2a 20 55 73 65 20 6f 66 20 4f 4e 45 50 41 53 53  * Use of ONEPASS
273e0 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 2a 2f 0a   not allowed */.
273f0 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f  #define ONEPASS_
27400 53 49 4e 47 4c 45 20 20 20 31 20 20 20 20 20 20  SINGLE   1      
27410 20 20 2f 2a 20 4f 4e 45 50 41 53 53 20 76 61 6c    /* ONEPASS val
27420 69 64 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20  id for a single 
27430 72 6f 77 20 75 70 64 61 74 65 20 2a 2f 0a 23 64  row update */.#d
27440 65 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f 4d 55  efine ONEPASS_MU
27450 4c 54 49 20 20 20 20 32 20 20 20 20 20 20 20 20  LTI    2        
27460 2f 2a 20 4f 4e 45 50 41 53 53 20 69 73 20 76 61  /* ONEPASS is va
27470 6c 69 64 20 66 6f 72 20 6d 75 6c 74 69 70 6c 65  lid for multiple
27480 20 72 6f 77 73 20 2a 2f 0a 76 6f 69 64 20 73 71   rows */.void sq
27490 6c 69 74 65 33 45 78 70 72 43 6f 64 65 4c 6f 61  lite3ExprCodeLoa
274a0 64 49 6e 64 65 78 43 6f 6c 75 6d 6e 28 50 61 72  dIndexColumn(Par
274b0 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74  se*, Index*, int
274c0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74  , int, int);.int
274d0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
274e0 47 65 74 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a  GetColumn(Parse*
274f0 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
27500 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f  nt, int, u8);.vo
27510 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
27520 64 65 47 65 74 43 6f 6c 75 6d 6e 54 6f 52 65 67  deGetColumnToReg
27530 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
27540 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
27550 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
27560 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66  rCodeGetColumnOf
27570 54 61 62 6c 65 28 56 64 62 65 2a 2c 20 54 61 62  Table(Vdbe*, Tab
27580 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  le*, int, int, i
27590 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
275a0 33 45 78 70 72 43 6f 64 65 4d 6f 76 65 28 50 61  3ExprCodeMove(Pa
275b0 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  rse*, int, int, 
275c0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
275d0 65 33 45 78 70 72 43 61 63 68 65 53 74 6f 72 65  e3ExprCacheStore
275e0 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
275f0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
27600 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 50 75  lite3ExprCachePu
27610 73 68 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  sh(Parse*);.void
27620 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68   sqlite3ExprCach
27630 65 50 6f 70 28 50 61 72 73 65 2a 29 3b 0a 76 6f  ePop(Parse*);.vo
27640 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  id sqlite3ExprCa
27650 63 68 65 52 65 6d 6f 76 65 28 50 61 72 73 65 2a  cheRemove(Parse*
27660 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
27670 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63  d sqlite3ExprCac
27680 68 65 43 6c 65 61 72 28 50 61 72 73 65 2a 29 3b  heClear(Parse*);
27690 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
276a0 72 43 61 63 68 65 41 66 66 69 6e 69 74 79 43 68  rCacheAffinityCh
276b0 61 6e 67 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  ange(Parse*, int
276c0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
276d0 69 74 65 33 45 78 70 72 43 6f 64 65 28 50 61 72  ite3ExprCode(Par
276e0 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
276f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
27700 70 72 43 6f 64 65 43 6f 70 79 28 50 61 72 73 65  prCodeCopy(Parse
27710 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
27720 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
27730 43 6f 64 65 46 61 63 74 6f 72 61 62 6c 65 28 50  CodeFactorable(P
27740 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
27750 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
27760 78 70 72 43 6f 64 65 41 74 49 6e 69 74 28 50 61  xprCodeAtInit(Pa
27770 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
27780 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
27790 70 72 43 6f 64 65 54 65 6d 70 28 50 61 72 73 65  prCodeTemp(Parse
277a0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b  *, Expr*, int*);
277b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
277c0 43 6f 64 65 54 61 72 67 65 74 28 50 61 72 73 65  CodeTarget(Parse
277d0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
277e0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
277f0 43 6f 64 65 41 6e 64 43 61 63 68 65 28 50 61 72  CodeAndCache(Par
27800 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
27810 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
27820 72 43 6f 64 65 45 78 70 72 4c 69 73 74 28 50 61  rCodeExprList(Pa
27830 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
27840 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a   int, int, u8);.
27850 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45  #define SQLITE_E
27860 43 45 4c 5f 44 55 50 20 20 20 20 20 20 30 78 30  CEL_DUP      0x0
27870 31 20 20 2f 2a 20 44 65 65 70 2c 20 6e 6f 74 20  1  /* Deep, not 
27880 73 68 61 6c 6c 6f 77 20 63 6f 70 69 65 73 20 2a  shallow copies *
27890 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
278a0 5f 45 43 45 4c 5f 46 41 43 54 4f 52 20 20 20 30  _ECEL_FACTOR   0
278b0 78 30 32 20 20 2f 2a 20 46 61 63 74 6f 72 20 6f  x02  /* Factor o
278c0 75 74 20 63 6f 6e 73 74 61 6e 74 20 74 65 72 6d  ut constant term
278d0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
278e0 49 54 45 5f 45 43 45 4c 5f 52 45 46 20 20 20 20  ITE_ECEL_REF    
278f0 20 20 30 78 30 34 20 20 2f 2a 20 55 73 65 20 45    0x04  /* Use E
27900 78 70 72 4c 69 73 74 2e 75 2e 78 2e 69 4f 72 64  xprList.u.x.iOrd
27910 65 72 42 79 43 6f 6c 20 2a 2f 0a 23 64 65 66 69  erByCol */.#defi
27920 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 4f  ne SQLITE_ECEL_O
27930 4d 49 54 52 45 46 20 20 30 78 30 38 20 20 2f 2a  MITREF  0x08  /*
27940 20 4f 6d 69 74 20 69 66 20 45 78 70 72 4c 69 73   Omit if ExprLis
27950 74 2e 75 2e 78 2e 69 4f 72 64 65 72 42 79 43 6f  t.u.x.iOrderByCo
27960 6c 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  l */.void sqlite
27970 33 45 78 70 72 49 66 54 72 75 65 28 50 61 72 73  3ExprIfTrue(Pars
27980 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20  e*, Expr*, int, 
27990 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
279a0 65 33 45 78 70 72 49 66 46 61 6c 73 65 28 50 61  e3ExprIfFalse(Pa
279b0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
279c0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
279d0 69 74 65 33 45 78 70 72 49 66 46 61 6c 73 65 44  ite3ExprIfFalseD
279e0 75 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  up(Parse*, Expr*
279f0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61 62  , int, int);.Tab
27a00 6c 65 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 54  le *sqlite3FindT
27a10 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f  able(sqlite3*,co
27a20 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
27a30 20 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65   char*);.#define
27a40 20 4c 4f 43 41 54 45 5f 56 49 45 57 20 20 20 20   LOCATE_VIEW    
27a50 30 78 30 31 0a 23 64 65 66 69 6e 65 20 4c 4f 43  0x01.#define LOC
27a60 41 54 45 5f 4e 4f 45 52 52 20 20 20 30 78 30 32  ATE_NOERR   0x02
27a70 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c  .Table *sqlite3L
27a80 6f 63 61 74 65 54 61 62 6c 65 28 50 61 72 73 65  ocateTable(Parse
27a90 2a 2c 75 33 32 20 66 6c 61 67 73 2c 63 6f 6e 73  *,u32 flags,cons
27aa0 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
27ab0 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71  har*);.Table *sq
27ac0 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65  lite3LocateTable
27ad0 49 74 65 6d 28 50 61 72 73 65 2a 2c 75 33 32 20  Item(Parse*,u32 
27ae0 66 6c 61 67 73 2c 73 74 72 75 63 74 20 53 72 63  flags,struct Src
27af0 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e  List_item *);.In
27b00 64 65 78 20 2a 73 71 6c 69 74 65 33 46 69 6e 64  dex *sqlite3Find
27b10 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 63  Index(sqlite3*,c
27b20 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
27b30 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
27b40 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
27b50 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74  eleteTable(sqlit
27b60 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  e3*,int,const ch
27b70 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
27b80 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
27b90 65 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c  eIndex(sqlite3*,
27ba0 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
27bb0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  ;.void sqlite3Va
27bc0 63 75 75 6d 28 50 61 72 73 65 2a 2c 54 6f 6b 65  cuum(Parse*,Toke
27bd0 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
27be0 52 75 6e 56 61 63 75 75 6d 28 63 68 61 72 2a 2a  RunVacuum(char**
27bf0 2c 20 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29  , sqlite3*, int)
27c00 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4e  ;.char *sqlite3N
27c10 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c  ameFromToken(sql
27c20 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  ite3*, Token*);.
27c30 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
27c40 6f 6d 70 61 72 65 28 45 78 70 72 2a 2c 20 45 78  ompare(Expr*, Ex
27c50 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  pr*, int);.int s
27c60 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43 6f  qlite3ExprListCo
27c70 6d 70 61 72 65 28 45 78 70 72 4c 69 73 74 2a 2c  mpare(ExprList*,
27c80 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29   ExprList*, int)
27c90 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
27ca0 72 49 6d 70 6c 69 65 73 45 78 70 72 28 45 78 70  rImpliesExpr(Exp
27cb0 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  r*, Expr*, int);
27cc0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
27cd0 72 41 6e 61 6c 79 7a 65 41 67 67 72 65 67 61 74  rAnalyzeAggregat
27ce0 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c  es(NameContext*,
27cf0 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
27d00 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65  lite3ExprAnalyze
27d10 41 67 67 4c 69 73 74 28 4e 61 6d 65 43 6f 6e 74  AggList(NameCont
27d20 65 78 74 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b  ext*,ExprList*);
27d30 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
27d40 43 6f 76 65 72 65 64 42 79 49 6e 64 65 78 28 45  CoveredByIndex(E
27d50 78 70 72 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20  xpr*, int iCur, 
27d60 49 6e 64 65 78 20 2a 70 49 64 78 29 3b 0a 69 6e  Index *pIdx);.in
27d70 74 20 73 71 6c 69 74 65 33 46 75 6e 63 74 69 6f  t sqlite3Functio
27d80 6e 55 73 65 73 54 68 69 73 53 72 63 28 45 78 70  nUsesThisSrc(Exp
27d90 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 56  r*, SrcList*);.V
27da0 64 62 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56  dbe *sqlite3GetV
27db0 64 62 65 28 50 61 72 73 65 2a 29 3b 0a 23 69 66  dbe(Parse*);.#if
27dc0 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45  ndef SQLITE_UNTE
27dd0 53 54 41 42 4c 45 0a 76 6f 69 64 20 73 71 6c 69  STABLE.void sqli
27de0 74 65 33 50 72 6e 67 53 61 76 65 53 74 61 74 65  te3PrngSaveState
27df0 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
27e00 69 74 65 33 50 72 6e 67 52 65 73 74 6f 72 65 53  ite3PrngRestoreS
27e10 74 61 74 65 28 76 6f 69 64 29 3b 0a 23 65 6e 64  tate(void);.#end
27e20 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  if.void sqlite3R
27e30 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74  ollbackAll(sqlit
27e40 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e3*,int);.void s
27e50 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79  qlite3CodeVerify
27e60 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 69  Schema(Parse*, i
27e70 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
27e80 33 43 6f 64 65 56 65 72 69 66 79 4e 61 6d 65 64  3CodeVerifyNamed
27e90 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 63  Schema(Parse*, c
27ea0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 29 3b  onst char *zDb);
27eb0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67  .void sqlite3Beg
27ec0 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61  inTransaction(Pa
27ed0 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  rse*, int);.void
27ee0 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 54 72   sqlite3CommitTr
27ef0 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a  ansaction(Parse*
27f00 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
27f10 6f 6c 6c 62 61 63 6b 54 72 61 6e 73 61 63 74 69  ollbackTransacti
27f20 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  on(Parse*);.void
27f30 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e   sqlite3Savepoin
27f40 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54  t(Parse*, int, T
27f50 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
27f60 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69  ite3CloseSavepoi
27f70 6e 74 73 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a  nts(sqlite3 *);.
27f80 76 6f 69 64 20 73 71 6c 69 74 65 33 4c 65 61 76  void sqlite3Leav
27f90 65 4d 75 74 65 78 41 6e 64 43 6c 6f 73 65 5a 6f  eMutexAndCloseZo
27fa0 6d 62 69 65 28 73 71 6c 69 74 65 33 2a 29 3b 0a  mbie(sqlite3*);.
27fb0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
27fc0 73 43 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 29  sConstant(Expr*)
27fd0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
27fe0 72 49 73 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a 6f  rIsConstantNotJo
27ff0 69 6e 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  in(Expr*);.int s
28000 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73  qlite3ExprIsCons
28010 74 61 6e 74 4f 72 46 75 6e 63 74 69 6f 6e 28 45  tantOrFunction(E
28020 78 70 72 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73  xpr*, u8);.int s
28030 71 6c 69 74 65 33 45 78 70 72 49 73 54 61 62 6c  qlite3ExprIsTabl
28040 65 43 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 2c  eConstant(Expr*,
28050 69 6e 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  int);.#ifdef SQL
28060 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55 52 53 4f  ITE_ENABLE_CURSO
28070 52 5f 48 49 4e 54 53 0a 69 6e 74 20 73 71 6c 69  R_HINTS.int sqli
28080 74 65 33 45 78 70 72 43 6f 6e 74 61 69 6e 73 53  te3ExprContainsS
28090 75 62 71 75 65 72 79 28 45 78 70 72 2a 29 3b 0a  ubquery(Expr*);.
280a0 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74  #endif.int sqlit
280b0 65 33 45 78 70 72 49 73 49 6e 74 65 67 65 72 28  e3ExprIsInteger(
280c0 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e  Expr*, int*);.in
280d0 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 6e  t sqlite3ExprCan
280e0 42 65 4e 75 6c 6c 28 63 6f 6e 73 74 20 45 78 70  BeNull(const Exp
280f0 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
28100 45 78 70 72 4e 65 65 64 73 4e 6f 41 66 66 69 6e  ExprNeedsNoAffin
28110 69 74 79 43 68 61 6e 67 65 28 63 6f 6e 73 74 20  ityChange(const 
28120 45 78 70 72 2a 2c 20 63 68 61 72 29 3b 0a 69 6e  Expr*, char);.in
28130 74 20 73 71 6c 69 74 65 33 49 73 52 6f 77 69 64  t sqlite3IsRowid
28140 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  (const char*);.v
28150 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72  oid sqlite3Gener
28160 61 74 65 52 6f 77 44 65 6c 65 74 65 28 0a 20 20  ateRowDelete(.  
28170 20 20 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c    Parse*,Table*,
28180 54 72 69 67 67 65 72 2a 2c 69 6e 74 2c 69 6e 74  Trigger*,int,int
28190 2c 69 6e 74 2c 69 31 36 2c 75 38 2c 75 38 2c 75  ,int,i16,u8,u8,u
281a0 38 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  8,int);.void sql
281b0 69 74 65 33 47 65 6e 65 72 61 74 65 52 6f 77 49  ite3GenerateRowI
281c0 6e 64 65 78 44 65 6c 65 74 65 28 50 61 72 73 65  ndexDelete(Parse
281d0 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
281e0 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b  int, int*, int);
281f0 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 6e 65  .int sqlite3Gene
28200 72 61 74 65 49 6e 64 65 78 4b 65 79 28 50 61 72  rateIndexKey(Par
28210 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74  se*, Index*, int
28220 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a  , int, int, int*
28230 2c 49 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a 76 6f  ,Index*,int);.vo
28240 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76  id sqlite3Resolv
28250 65 50 61 72 74 49 64 78 4c 61 62 65 6c 28 50 61  ePartIdxLabel(Pa
28260 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  rse*,int);.void 
28270 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 43  sqlite3GenerateC
28280 6f 6e 73 74 72 61 69 6e 74 43 68 65 63 6b 73 28  onstraintChecks(
28290 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e  Parse*,Table*,in
282a0 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69  t*,int,int,int,i
282b0 6e 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  nt,.            
282c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
282d0 20 20 20 20 20 20 20 20 20 75 38 2c 75 38 2c 69           u8,u8,i
282e0 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 23  nt,int*,int*);.#
282f0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
28300 42 4c 45 5f 4e 55 4c 4c 5f 54 52 49 4d 0a 20 20  BLE_NULL_TRIM.  
28310 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74 4d  void sqlite3SetM
28320 61 6b 65 52 65 63 6f 72 64 50 35 28 56 64 62 65  akeRecordP5(Vdbe
28330 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65  *,Table*);.#else
28340 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
28350 33 53 65 74 4d 61 6b 65 52 65 63 6f 72 64 50 35  3SetMakeRecordP5
28360 28 41 2c 42 29 0a 23 65 6e 64 69 66 0a 76 6f 69  (A,B).#endif.voi
28370 64 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74  d sqlite3Complet
28380 65 49 6e 73 65 72 74 69 6f 6e 28 50 61 72 73 65  eInsertion(Parse
28390 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e 74  *,Table*,int,int
283a0 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e  ,int,int*,int,in
283b0 74 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  t,int);.int sqli
283c0 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49  te3OpenTableAndI
283d0 6e 64 69 63 65 73 28 50 61 72 73 65 2a 2c 20 54  ndices(Parse*, T
283e0 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 2c 20  able*, int, u8, 
283f0 69 6e 74 2c 20 75 38 2a 2c 20 69 6e 74 2a 2c 20  int, u8*, int*, 
28400 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  int*);.void sqli
28410 74 65 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65  te3BeginWriteOpe
28420 72 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69  ration(Parse*, i
28430 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
28440 71 6c 69 74 65 33 4d 75 6c 74 69 57 72 69 74 65  qlite3MultiWrite
28450 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
28460 71 6c 69 74 65 33 4d 61 79 41 62 6f 72 74 28 50  qlite3MayAbort(P
28470 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
28480 69 74 65 33 48 61 6c 74 43 6f 6e 73 74 72 61 69  ite3HaltConstrai
28490 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  nt(Parse*, int, 
284a0 69 6e 74 2c 20 63 68 61 72 2a 2c 20 69 38 2c 20  int, char*, i8, 
284b0 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
284c0 33 55 6e 69 71 75 65 43 6f 6e 73 74 72 61 69 6e  3UniqueConstrain
284d0 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 49  t(Parse*, int, I
284e0 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ndex*);.void sql
284f0 69 74 65 33 52 6f 77 69 64 43 6f 6e 73 74 72 61  ite3RowidConstra
28500 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  int(Parse*, int,
28510 20 54 61 62 6c 65 2a 29 3b 0a 45 78 70 72 20 2a   Table*);.Expr *
28520 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 73  sqlite3ExprDup(s
28530 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e  qlite3*,Expr*,in
28540 74 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71  t);.ExprList *sq
28550 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44 75 70  lite3ExprListDup
28560 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69  (sqlite3*,ExprLi
28570 73 74 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c 69 73  st*,int);.SrcLis
28580 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73  t *sqlite3SrcLis
28590 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 72  tDup(sqlite3*,Sr
285a0 63 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c  cList*,int);.IdL
285b0 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69  ist *sqlite3IdLi
285c0 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 49  stDup(sqlite3*,I
285d0 64 4c 69 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20  dList*);.Select 
285e0 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 75  *sqlite3SelectDu
285f0 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63  p(sqlite3*,Selec
28600 74 2a 2c 69 6e 74 29 3b 0a 23 69 66 20 53 45 4c  t*,int);.#if SEL
28610 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44  ECTTRACE_ENABLED
28620 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c  .void sqlite3Sel
28630 65 63 74 53 65 74 4e 61 6d 65 28 53 65 6c 65 63  ectSetName(Selec
28640 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  t*,const char*);
28650 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
28660 73 71 6c 69 74 65 33 53 65 6c 65 63 74 53 65 74  sqlite3SelectSet
28670 4e 61 6d 65 28 41 2c 42 29 0a 23 65 6e 64 69 66  Name(A,B).#endif
28680 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 73  .void sqlite3Ins
28690 65 72 74 42 75 69 6c 74 69 6e 46 75 6e 63 73 28  ertBuiltinFuncs(
286a0 46 75 6e 63 44 65 66 2a 2c 69 6e 74 29 3b 0a 46  FuncDef*,int);.F
286b0 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33 46  uncDef *sqlite3F
286c0 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69  indFunction(sqli
286d0 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
286e0 2c 69 6e 74 2c 75 38 2c 75 38 29 3b 0a 76 6f 69  ,int,u8,u8);.voi
286f0 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65  d sqlite3Registe
28700 72 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e  rBuiltinFunction
28710 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  s(void);.void sq
28720 6c 69 74 65 33 52 65 67 69 73 74 65 72 44 61 74  lite3RegisterDat
28730 65 54 69 6d 65 46 75 6e 63 74 69 6f 6e 73 28 76  eTimeFunctions(v
28740 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
28750 65 33 52 65 67 69 73 74 65 72 50 65 72 43 6f 6e  e3RegisterPerCon
28760 6e 65 63 74 69 6f 6e 42 75 69 6c 74 69 6e 46 75  nectionBuiltinFu
28770 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a  nctions(sqlite3*
28780 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61  );.int sqlite3Sa
28790 66 65 74 79 43 68 65 63 6b 4f 6b 28 73 71 6c 69  fetyCheckOk(sqli
287a0 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  te3*);.int sqlit
287b0 65 33 53 61 66 65 74 79 43 68 65 63 6b 53 69 63  e3SafetyCheckSic
287c0 6b 4f 72 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b  kOrOk(sqlite3*);
287d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 68 61  .void sqlite3Cha
287e0 6e 67 65 43 6f 6f 6b 69 65 28 50 61 72 73 65 2a  ngeCookie(Parse*
287f0 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65  , int);..#if !de
28800 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
28810 54 5f 56 49 45 57 29 20 26 26 20 21 64 65 66 69  T_VIEW) && !defi
28820 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
28830 54 52 49 47 47 45 52 29 0a 76 6f 69 64 20 73 71  TRIGGER).void sq
28840 6c 69 74 65 33 4d 61 74 65 72 69 61 6c 69 7a 65  lite3Materialize
28850 56 69 65 77 28 50 61 72 73 65 2a 2c 20 54 61 62  View(Parse*, Tab
28860 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  le*, Expr*, int)
28870 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  ;.#endif..#ifnde
28880 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
28890 49 47 47 45 52 0a 20 20 76 6f 69 64 20 73 71 6c  IGGER.  void sql
288a0 69 74 65 33 42 65 67 69 6e 54 72 69 67 67 65 72  ite3BeginTrigger
288b0 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c  (Parse*, Token*,
288c0 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 49  Token*,int,int,I
288d0 64 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c  dList*,SrcList*,
288e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
288f0 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72              Expr
28900 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76  *,int, int);.  v
28910 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73  oid sqlite3Finis
28920 68 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c  hTrigger(Parse*,
28930 20 54 72 69 67 67 65 72 53 74 65 70 2a 2c 20 54   TriggerStep*, T
28940 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f 69 64 20 73  oken*);.  void s
28950 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65  qlite3DropTrigge
28960 72 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  r(Parse*, SrcLis
28970 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  t*, int);.  void
28980 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67   sqlite3DropTrig
28990 67 65 72 50 74 72 28 50 61 72 73 65 2a 2c 20 54  gerPtr(Parse*, T
289a0 72 69 67 67 65 72 2a 29 3b 0a 20 20 54 72 69 67  rigger*);.  Trig
289b0 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67  ger *sqlite3Trig
289c0 67 65 72 73 45 78 69 73 74 28 50 61 72 73 65 20  gersExist(Parse 
289d0 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
289e0 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 20 2a  ExprList*, int *
289f0 70 4d 61 73 6b 29 3b 0a 20 20 54 72 69 67 67 65  pMask);.  Trigge
28a00 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  r *sqlite3Trigge
28a10 72 4c 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54  rList(Parse *, T
28a20 61 62 6c 65 20 2a 29 3b 0a 20 20 76 6f 69 64 20  able *);.  void 
28a30 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72  sqlite3CodeRowTr
28a40 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72  igger(Parse*, Tr
28a50 69 67 67 65 72 20 2a 2c 20 69 6e 74 2c 20 45 78  igger *, int, Ex
28a60 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 54 61  prList*, int, Ta
28a70 62 6c 65 20 2a 2c 0a 20 20 20 20 20 20 20 20 20  ble *,.         
28a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a90 20 20 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74     int, int, int
28aa0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
28ab0 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44  3CodeRowTriggerD
28ac0 69 72 65 63 74 28 50 61 72 73 65 20 2a 2c 20 54  irect(Parse *, T
28ad0 72 69 67 67 65 72 20 2a 2c 20 54 61 62 6c 65 20  rigger *, Table 
28ae0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
28af0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
28b00 56 69 65 77 54 72 69 67 67 65 72 73 28 50 61 72  ViewTriggers(Par
28b10 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70  se*, Table*, Exp
28b20 72 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73  r*, int, ExprLis
28b30 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  t*);.  void sqli
28b40 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65 72  te3DeleteTrigger
28b50 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 20 54  Step(sqlite3*, T
28b60 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 20 20  riggerStep*);.  
28b70 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c  TriggerStep *sql
28b80 69 74 65 33 54 72 69 67 67 65 72 53 65 6c 65 63  ite3TriggerSelec
28b90 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 53  tStep(sqlite3*,S
28ba0 65 6c 65 63 74 2a 29 3b 0a 20 20 54 72 69 67 67  elect*);.  Trigg
28bb0 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54  erStep *sqlite3T
28bc0 72 69 67 67 65 72 49 6e 73 65 72 74 53 74 65 70  riggerInsertStep
28bd0 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a  (sqlite3*,Token*
28be0 2c 20 49 64 4c 69 73 74 2a 2c 0a 20 20 20 20 20  , IdList*,.     
28bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28c10 20 20 20 53 65 6c 65 63 74 2a 2c 75 38 29 3b 0a     Select*,u8);.
28c20 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
28c30 71 6c 69 74 65 33 54 72 69 67 67 65 72 55 70 64  qlite3TriggerUpd
28c40 61 74 65 53 74 65 70 28 73 71 6c 69 74 65 33 2a  ateStep(sqlite3*
28c50 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74  ,Token*,ExprList
28c60 2a 2c 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20  *, Expr*, u8);. 
28c70 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71   TriggerStep *sq
28c80 6c 69 74 65 33 54 72 69 67 67 65 72 44 65 6c 65  lite3TriggerDele
28c90 74 65 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c  teStep(sqlite3*,
28ca0 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a 29 3b 0a  Token*, Expr*);.
28cb0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65    void sqlite3De
28cc0 6c 65 74 65 54 72 69 67 67 65 72 28 73 71 6c 69  leteTrigger(sqli
28cd0 74 65 33 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b  te3*, Trigger*);
28ce0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 55  .  void sqlite3U
28cf0 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72  nlinkAndDeleteTr
28d00 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 69  igger(sqlite3*,i
28d10 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
28d20 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33 54 72  .  u32 sqlite3Tr
28d30 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 50 61 72  iggerColmask(Par
28d40 73 65 2a 2c 54 72 69 67 67 65 72 2a 2c 45 78 70  se*,Trigger*,Exp
28d50 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54  rList*,int,int,T
28d60 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20 64 65  able*,int);.# de
28d70 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73  fine sqlite3Pars
28d80 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 28 28 70  eToplevel(p) ((p
28d90 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3f 20 28  )->pToplevel ? (
28da0 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3a 20  p)->pToplevel : 
28db0 28 70 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (p)).# define sq
28dc0 6c 69 74 65 33 49 73 54 6f 70 6c 65 76 65 6c 28  lite3IsToplevel(
28dd0 70 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76  p) ((p)->pToplev
28de0 65 6c 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64  el==0).#else.# d
28df0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69  efine sqlite3Tri
28e00 67 67 65 72 73 45 78 69 73 74 28 42 2c 43 2c 44  ggersExist(B,C,D
28e10 2c 45 2c 46 29 20 30 0a 23 20 64 65 66 69 6e 65  ,E,F) 0.# define
28e20 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72   sqlite3DeleteTr
28e30 69 67 67 65 72 28 41 2c 42 29 0a 23 20 64 65 66  igger(A,B).# def
28e40 69 6e 65 20 73 71 6c 69 74 65 33 44 72 6f 70 54  ine sqlite3DropT
28e50 72 69 67 67 65 72 50 74 72 28 41 2c 42 29 0a 23  riggerPtr(A,B).#
28e60 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55   define sqlite3U
28e70 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72  nlinkAndDeleteTr
28e80 69 67 67 65 72 28 41 2c 42 2c 43 29 0a 23 20 64  igger(A,B,C).# d
28e90 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64  efine sqlite3Cod
28ea0 65 52 6f 77 54 72 69 67 67 65 72 28 41 2c 42 2c  eRowTrigger(A,B,
28eb0 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23  C,D,E,F,G,H,I).#
28ec0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43   define sqlite3C
28ed0 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44 69 72  odeRowTriggerDir
28ee0 65 63 74 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29  ect(A,B,C,D,E,F)
28ef0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
28f00 33 54 72 69 67 67 65 72 4c 69 73 74 28 58 2c 20  3TriggerList(X, 
28f10 59 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71  Y) 0.# define sq
28f20 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76  lite3ParseToplev
28f30 65 6c 28 70 29 20 70 0a 23 20 64 65 66 69 6e 65  el(p) p.# define
28f40 20 73 71 6c 69 74 65 33 49 73 54 6f 70 6c 65 76   sqlite3IsToplev
28f50 65 6c 28 70 29 20 31 0a 23 20 64 65 66 69 6e 65  el(p) 1.# define
28f60 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 43   sqlite3TriggerC
28f70 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45  olmask(A,B,C,D,E
28f80 2c 46 2c 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a  ,F,G) 0.#endif..
28f90 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54  int sqlite3JoinT
28fa0 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  ype(Parse*, Toke
28fb0 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  n*, Token*, Toke
28fc0 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
28fd0 33 43 72 65 61 74 65 46 6f 72 65 69 67 6e 4b 65  3CreateForeignKe
28fe0 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  y(Parse*, ExprLi
28ff0 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70  st*, Token*, Exp
29000 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f  rList*, int);.vo
29010 69 64 20 73 71 6c 69 74 65 33 44 65 66 65 72 46  id sqlite3DeferF
29020 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a  oreignKey(Parse*
29030 2c 20 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20  , int);.#ifndef 
29040 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48  SQLITE_OMIT_AUTH
29050 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64  ORIZATION.  void
29060 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64   sqlite3AuthRead
29070 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63  (Parse*,Expr*,Sc
29080 68 65 6d 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b  hema*,SrcList*);
29090 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75  .  int sqlite3Au
290a0 74 68 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 69  thCheck(Parse*,i
290b0 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nt, const char*,
290c0 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
290d0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
290e0 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f  id sqlite3AuthCo
290f0 6e 74 65 78 74 50 75 73 68 28 50 61 72 73 65 2a  ntextPush(Parse*
29100 2c 20 41 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20  , AuthContext*, 
29110 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
29120 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68  void sqlite3Auth
29130 43 6f 6e 74 65 78 74 50 6f 70 28 41 75 74 68 43  ContextPop(AuthC
29140 6f 6e 74 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20  ontext*);.  int 
29150 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 43  sqlite3AuthReadC
29160 6f 6c 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  ol(Parse*, const
29170 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63   char *, const c
29180 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c  har *, int);.#el
29190 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
291a0 74 65 33 41 75 74 68 52 65 61 64 28 61 2c 62 2c  te3AuthRead(a,b,
291b0 63 2c 64 29 0a 23 20 64 65 66 69 6e 65 20 73 71  c,d).# define sq
291c0 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 61  lite3AuthCheck(a
291d0 2c 62 2c 63 2c 64 2c 65 29 20 20 20 20 53 51 4c  ,b,c,d,e)    SQL
291e0 49 54 45 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20  ITE_OK.# define 
291f0 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65  sqlite3AuthConte
29200 78 74 50 75 73 68 28 61 2c 62 2c 63 29 0a 23 20  xtPush(a,b,c).# 
29210 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
29220 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 61 29 20  thContextPop(a) 
29230 20 28 28 76 6f 69 64 29 28 61 29 29 0a 23 65 6e   ((void)(a)).#en
29240 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
29250 41 74 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45  Attach(Parse*, E
29260 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70  xpr*, Expr*, Exp
29270 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
29280 33 44 65 74 61 63 68 28 50 61 72 73 65 2a 2c 20  3Detach(Parse*, 
29290 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
292a0 69 74 65 33 46 69 78 49 6e 69 74 28 44 62 46 69  ite3FixInit(DbFi
292b0 78 65 72 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e  xer*, Parse*, in
292c0 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  t, const char*, 
292d0 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69  const Token*);.i
292e0 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53 72 63  nt sqlite3FixSrc
292f0 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20 53  List(DbFixer*, S
29300 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  rcList*);.int sq
29310 6c 69 74 65 33 46 69 78 53 65 6c 65 63 74 28 44  lite3FixSelect(D
29320 62 46 69 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a  bFixer*, Select*
29330 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
29340 78 45 78 70 72 28 44 62 46 69 78 65 72 2a 2c 20  xExpr(DbFixer*, 
29350 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
29360 74 65 33 46 69 78 45 78 70 72 4c 69 73 74 28 44  te3FixExprList(D
29370 62 46 69 78 65 72 2a 2c 20 45 78 70 72 4c 69 73  bFixer*, ExprLis
29380 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
29390 46 69 78 54 72 69 67 67 65 72 53 74 65 70 28 44  FixTriggerStep(D
293a0 62 46 69 78 65 72 2a 2c 20 54 72 69 67 67 65 72  bFixer*, Trigger
293b0 53 74 65 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Step*);.int sqli
293c0 74 65 33 41 74 6f 46 28 63 6f 6e 73 74 20 63 68  te3AtoF(const ch
293d0 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20  ar *z, double*, 
293e0 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  int, u8);.int sq
293f0 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28 63 6f  lite3GetInt32(co
29400 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a  nst char *, int*
29410 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74  );.int sqlite3At
29420 6f 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  oi(const char*);
29430 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 31  .int sqlite3Utf1
29440 36 42 79 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76  6ByteLen(const v
29450 6f 69 64 20 2a 70 44 61 74 61 2c 20 69 6e 74 20  oid *pData, int 
29460 6e 43 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69  nChar);.int sqli
29470 74 65 33 55 74 66 38 43 68 61 72 4c 65 6e 28 63  te3Utf8CharLen(c
29480 6f 6e 73 74 20 63 68 61 72 20 2a 70 44 61 74 61  onst char *pData
29490 2c 20 69 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33  , int nByte);.u3
294a0 32 20 73 71 6c 69 74 65 33 55 74 66 38 52 65 61  2 sqlite3Utf8Rea
294b0 64 28 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 4c  d(const u8**);.L
294c0 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67  ogEst sqlite3Log
294d0 45 73 74 28 75 36 34 29 3b 0a 4c 6f 67 45 73 74  Est(u64);.LogEst
294e0 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 41 64   sqlite3LogEstAd
294f0 64 28 4c 6f 67 45 73 74 2c 4c 6f 67 45 73 74 29  d(LogEst,LogEst)
29500 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
29510 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
29520 4c 45 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65  LE.LogEst sqlite
29530 33 4c 6f 67 45 73 74 46 72 6f 6d 44 6f 75 62 6c  3LogEstFromDoubl
29540 65 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6e 64 69  e(double);.#endi
29550 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  f.#if defined(SQ
29560 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54  LITE_ENABLE_STMT
29570 5f 53 43 41 4e 53 54 41 54 55 53 29 20 7c 7c 20  _SCANSTATUS) || 
29580 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 53 51  \.    defined(SQ
29590 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
295a0 33 5f 4f 52 5f 53 54 41 54 34 29 20 7c 7c 20 5c  3_OR_STAT4) || \
295b0 0a 20 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c  .    defined(SQL
295c0 49 54 45 5f 45 58 50 4c 41 49 4e 5f 45 53 54 49  ITE_EXPLAIN_ESTI
295d0 4d 41 54 45 44 5f 52 4f 57 53 29 0a 75 36 34 20  MATED_ROWS).u64 
295e0 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49  sqlite3LogEstToI
295f0 6e 74 28 4c 6f 67 45 73 74 29 3b 0a 23 65 6e 64  nt(LogEst);.#end
29600 69 66 0a 56 4c 69 73 74 20 2a 73 71 6c 69 74 65  if.VList *sqlite
29610 33 56 4c 69 73 74 41 64 64 28 73 71 6c 69 74 65  3VListAdd(sqlite
29620 33 2a 2c 56 4c 69 73 74 2a 2c 63 6f 6e 73 74 20  3*,VList*,const 
29630 63 68 61 72 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  char*,int,int);.
29640 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
29650 74 65 33 56 4c 69 73 74 4e 75 6d 54 6f 4e 61 6d  te3VListNumToNam
29660 65 28 56 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 69  e(VList*,int);.i
29670 6e 74 20 73 71 6c 69 74 65 33 56 4c 69 73 74 4e  nt sqlite3VListN
29680 61 6d 65 54 6f 4e 75 6d 28 56 4c 69 73 74 2a 2c  ameToNum(VList*,
29690 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29  const char*,int)
296a0 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65  ;../*.** Routine
296b0 73 20 74 6f 20 72 65 61 64 20 61 6e 64 20 77 72  s to read and wr
296c0 69 74 65 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e  ite variable-len
296d0 67 74 68 20 69 6e 74 65 67 65 72 73 2e 20 20 54  gth integers.  T
296e0 68 65 73 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20  hese used to.** 
296f0 62 65 20 64 65 66 69 6e 65 64 20 6c 6f 63 61 6c  be defined local
29700 6c 79 2c 20 62 75 74 20 6e 6f 77 20 77 65 20 75  ly, but now we u
29710 73 65 20 74 68 65 20 76 61 72 69 6e 74 20 72 6f  se the varint ro
29720 75 74 69 6e 65 73 20 69 6e 20 74 68 65 20 75 74  utines in the ut
29730 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2f  il.c.** file..*/
29740 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 75 74 56  .int sqlite3PutV
29750 61 72 69 6e 74 28 75 6e 73 69 67 6e 65 64 20 63  arint(unsigned c
29760 68 61 72 2a 2c 20 75 36 34 29 3b 0a 75 38 20 73  har*, u64);.u8 s
29770 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 28  qlite3GetVarint(
29780 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
29790 68 61 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a 75  har *, u64 *);.u
297a0 38 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69  8 sqlite3GetVari
297b0 6e 74 33 32 28 63 6f 6e 73 74 20 75 6e 73 69 67  nt32(const unsig
297c0 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 33 32 20  ned char *, u32 
297d0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
297e0 61 72 69 6e 74 4c 65 6e 28 75 36 34 20 76 29 3b  arintLen(u64 v);
297f0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 6d  ../*.** The comm
29800 6f 6e 20 63 61 73 65 20 69 73 20 66 6f 72 20 61  on case is for a
29810 20 76 61 72 69 6e 74 20 74 6f 20 62 65 20 61 20   varint to be a 
29820 73 69 6e 67 6c 65 20 62 79 74 65 2e 20 20 54 68  single byte.  Th
29830 65 79 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20  ey following.** 
29840 6d 61 63 72 6f 73 20 68 61 6e 64 6c 65 20 74 68  macros handle th
29850 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 69  e common case wi
29860 74 68 6f 75 74 20 61 20 70 72 6f 63 65 64 75 72  thout a procedur
29870 65 20 63 61 6c 6c 2c 20 62 75 74 20 74 68 65 6e  e call, but then
29880 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 70 72 6f   call.** the pro
29890 63 65 64 75 72 65 20 66 6f 72 20 6c 61 72 67 65  cedure for large
298a0 72 20 76 61 72 69 6e 74 73 2e 0a 2a 2f 0a 23 64  r varints..*/.#d
298b0 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74 33  efine getVarint3
298c0 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29  2(A,B)  \.  (u8)
298d0 28 28 2a 28 41 29 3c 28 75 38 29 30 78 38 30 29  ((*(A)<(u8)0x80)
298e0 3f 28 28 42 29 3d 28 75 33 32 29 2a 28 41 29 29  ?((B)=(u32)*(A))
298f0 2c 31 3a 73 71 6c 69 74 65 33 47 65 74 56 61 72  ,1:sqlite3GetVar
29900 69 6e 74 33 32 28 28 41 29 2c 28 75 33 32 20 2a  int32((A),(u32 *
29910 29 26 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20  )&(B))).#define 
29920 70 75 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29  putVarint32(A,B)
29930 20 20 5c 0a 20 20 28 75 38 29 28 28 28 75 33 32    \.  (u8)(((u32
29940 29 28 42 29 3c 28 75 33 32 29 30 78 38 30 29 3f  )(B)<(u32)0x80)?
29950 28 2a 28 41 29 3d 28 75 6e 73 69 67 6e 65 64 20  (*(A)=(unsigned 
29960 63 68 61 72 29 28 42 29 29 2c 31 3a 5c 0a 20 20  char)(B)),1:\.  
29970 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74  sqlite3PutVarint
29980 28 28 41 29 2c 28 42 29 29 29 0a 23 64 65 66 69  ((A),(B))).#defi
29990 6e 65 20 67 65 74 56 61 72 69 6e 74 20 20 20 20  ne getVarint    
299a0 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
299b0 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61 72 69  .#define putVari
299c0 6e 74 20 20 20 20 73 71 6c 69 74 65 33 50 75 74  nt    sqlite3Put
299d0 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63  Varint...const c
299e0 68 61 72 20 2a 73 71 6c 69 74 65 33 49 6e 64 65  har *sqlite3Inde
299f0 78 41 66 66 69 6e 69 74 79 53 74 72 28 73 71 6c  xAffinityStr(sql
29a00 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a  ite3*, Index*);.
29a10 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c  void sqlite3Tabl
29a20 65 41 66 66 69 6e 69 74 79 28 56 64 62 65 2a 2c  eAffinity(Vdbe*,
29a30 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 63   Table*, int);.c
29a40 68 61 72 20 73 71 6c 69 74 65 33 43 6f 6d 70 61  har sqlite3Compa
29a50 72 65 41 66 66 69 6e 69 74 79 28 45 78 70 72 20  reAffinity(Expr 
29a60 2a 70 45 78 70 72 2c 20 63 68 61 72 20 61 66 66  *pExpr, char aff
29a70 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  2);.int sqlite3I
29a80 6e 64 65 78 41 66 66 69 6e 69 74 79 4f 6b 28 45  ndexAffinityOk(E
29a90 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72  xpr *pExpr, char
29aa0 20 69 64 78 5f 61 66 66 69 6e 69 74 79 29 3b 0a   idx_affinity);.
29ab0 63 68 61 72 20 73 71 6c 69 74 65 33 54 61 62 6c  char sqlite3Tabl
29ac0 65 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28  eColumnAffinity(
29ad0 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 63 68 61  Table*,int);.cha
29ae0 72 20 73 71 6c 69 74 65 33 45 78 70 72 41 66 66  r sqlite3ExprAff
29af0 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78 70  inity(Expr *pExp
29b00 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  r);.int sqlite3A
29b10 74 6f 69 36 34 28 63 6f 6e 73 74 20 63 68 61 72  toi64(const char
29b20 2a 2c 20 69 36 34 2a 2c 20 69 6e 74 2c 20 75 38  *, i64*, int, u8
29b30 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 65  );.int sqlite3De
29b40 63 4f 72 48 65 78 54 6f 49 36 34 28 63 6f 6e 73  cOrHexToI64(cons
29b50 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 29 3b 0a  t char*, i64*);.
29b60 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f  void sqlite3Erro
29b70 72 57 69 74 68 4d 73 67 28 73 71 6c 69 74 65 33  rWithMsg(sqlite3
29b80 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  *, int, const ch
29b90 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73  ar*,...);.void s
29ba0 71 6c 69 74 65 33 45 72 72 6f 72 28 73 71 6c 69  qlite3Error(sqli
29bb0 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  te3*,int);.void 
29bc0 73 71 6c 69 74 65 33 53 79 73 74 65 6d 45 72 72  sqlite3SystemErr
29bd0 6f 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29  or(sqlite3*,int)
29be0 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 48  ;.void *sqlite3H
29bf0 65 78 54 6f 42 6c 6f 62 28 73 71 6c 69 74 65 33  exToBlob(sqlite3
29c00 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  *, const char *z
29c10 2c 20 69 6e 74 20 6e 29 3b 0a 75 38 20 73 71 6c  , int n);.u8 sql
29c20 69 74 65 33 48 65 78 54 6f 49 6e 74 28 69 6e 74  ite3HexToInt(int
29c30 20 68 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   h);.int sqlite3
29c40 54 77 6f 50 61 72 74 4e 61 6d 65 28 50 61 72 73  TwoPartName(Pars
29c50 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f  e *, Token *, To
29c60 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29  ken *, Token **)
29c70 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  ;..#if defined(S
29c80 51 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e  QLITE_NEED_ERR_N
29c90 41 4d 45 29 0a 63 6f 6e 73 74 20 63 68 61 72 20  AME).const char 
29ca0 2a 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28  *sqlite3ErrName(
29cb0 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 63 6f  int);.#endif..co
29cc0 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
29cd0 33 45 72 72 53 74 72 28 69 6e 74 29 3b 0a 69 6e  3ErrStr(int);.in
29ce0 74 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68  t sqlite3ReadSch
29cf0 65 6d 61 28 50 61 72 73 65 20 2a 70 50 61 72 73  ema(Parse *pPars
29d00 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  e);.CollSeq *sql
29d10 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28  ite3FindCollSeq(
29d20 73 71 6c 69 74 65 33 2a 2c 75 38 20 65 6e 63 2c  sqlite3*,u8 enc,
29d30 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74   const char*,int
29d40 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
29d50 74 65 33 4c 6f 63 61 74 65 43 6f 6c 6c 53 65 71  te3LocateCollSeq
29d60 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
29d70 63 6f 6e 73 74 20 63 68 61 72 2a 7a 4e 61 6d 65  const char*zName
29d80 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
29d90 74 65 33 45 78 70 72 43 6f 6c 6c 53 65 71 28 50  te3ExprCollSeq(P
29da0 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78  arse *pParse, Ex
29db0 70 72 20 2a 70 45 78 70 72 29 3b 0a 45 78 70 72  pr *pExpr);.Expr
29dc0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64 64   *sqlite3ExprAdd
29dd0 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28 50 61 72  CollateToken(Par
29de0 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72  se *pParse, Expr
29df0 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c  *, const Token*,
29e00 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c   int);.Expr *sql
29e10 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c 61  ite3ExprAddColla
29e20 74 65 53 74 72 69 6e 67 28 50 61 72 73 65 2a 2c  teString(Parse*,
29e30 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  Expr*,const char
29e40 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
29e50 33 45 78 70 72 53 6b 69 70 43 6f 6c 6c 61 74 65  3ExprSkipCollate
29e60 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (Expr*);.int sql
29e70 69 74 65 33 43 68 65 63 6b 43 6f 6c 6c 53 65 71  ite3CheckCollSeq
29e80 28 50 61 72 73 65 20 2a 2c 20 43 6f 6c 6c 53 65  (Parse *, CollSe
29e90 71 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  q *);.int sqlite
29ea0 33 43 68 65 63 6b 4f 62 6a 65 63 74 4e 61 6d 65  3CheckObjectName
29eb0 28 50 61 72 73 65 20 2a 2c 20 63 6f 6e 73 74 20  (Parse *, const 
29ec0 63 68 61 72 20 2a 29 3b 0a 76 6f 69 64 20 73 71  char *);.void sq
29ed0 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61 6e  lite3VdbeSetChan
29ee0 67 65 73 28 73 71 6c 69 74 65 33 20 2a 2c 20 69  ges(sqlite3 *, i
29ef0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
29f00 41 64 64 49 6e 74 36 34 28 69 36 34 2a 2c 69 36  AddInt64(i64*,i6
29f10 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  4);.int sqlite3S
29f20 75 62 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34  ubInt64(i64*,i64
29f30 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 75  );.int sqlite3Mu
29f40 6c 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29  lInt64(i64*,i64)
29f50 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 62 73  ;.int sqlite3Abs
29f60 49 6e 74 33 32 28 69 6e 74 29 3b 0a 23 69 66 64  Int32(int);.#ifd
29f70 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
29f80 5f 38 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69 64 20  _8_3_NAMES.void 
29f90 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69  sqlite3FileSuffi
29fa0 78 33 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  x3(const char*, 
29fb0 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  char*);.#else.# 
29fc0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 69  define sqlite3Fi
29fd0 6c 65 53 75 66 66 69 78 33 28 58 2c 59 29 0a 23  leSuffix3(X,Y).#
29fe0 65 6e 64 69 66 0a 75 38 20 73 71 6c 69 74 65 33  endif.u8 sqlite3
29ff0 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74  GetBoolean(const
2a000 20 63 68 61 72 20 2a 7a 2c 75 38 29 3b 0a 0a 63   char *z,u8);..c
2a010 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74  onst void *sqlit
2a020 65 33 56 61 6c 75 65 54 65 78 74 28 73 71 6c 69  e3ValueText(sqli
2a030 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b  te3_value*, u8);
2a040 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75  .int sqlite3Valu
2a050 65 42 79 74 65 73 28 73 71 6c 69 74 65 33 5f 76  eBytes(sqlite3_v
2a060 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 76 6f 69 64  alue*, u8);.void
2a070 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74   sqlite3ValueSet
2a080 53 74 72 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  Str(sqlite3_valu
2a090 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76  e*, int, const v
2a0a0 6f 69 64 20 2a 2c 75 38 2c 0a 20 20 20 20 20 20  oid *,u8,.      
2a0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a0c0 20 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29    void(*)(void*)
2a0d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
2a0e0 61 6c 75 65 53 65 74 4e 75 6c 6c 28 73 71 6c 69  alueSetNull(sqli
2a0f0 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 76 6f 69  te3_value*);.voi
2a100 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72  d sqlite3ValueFr
2a110 65 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ee(sqlite3_value
2a120 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75  *);.sqlite3_valu
2a130 65 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 4e  e *sqlite3ValueN
2a140 65 77 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 63  ew(sqlite3 *);.c
2a150 68 61 72 20 2a 73 71 6c 69 74 65 33 55 74 66 31  har *sqlite3Utf1
2a160 36 74 6f 38 28 73 71 6c 69 74 65 33 20 2a 2c 20  6to8(sqlite3 *, 
2a170 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74  const void*, int
2a180 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74  , u8);.int sqlit
2a190 65 33 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28  e3ValueFromExpr(
2a1a0 73 71 6c 69 74 65 33 20 2a 2c 20 45 78 70 72 20  sqlite3 *, Expr 
2a1b0 2a 2c 20 75 38 2c 20 75 38 2c 20 73 71 6c 69 74  *, u8, u8, sqlit
2a1c0 65 33 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f  e3_value **);.vo
2a1d0 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 41  id sqlite3ValueA
2a1e0 70 70 6c 79 41 66 66 69 6e 69 74 79 28 73 71 6c  pplyAffinity(sql
2a1f0 69 74 65 33 5f 76 61 6c 75 65 20 2a 2c 20 75 38  ite3_value *, u8
2a200 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65 66 20 53  , u8);.#ifndef S
2a210 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49  QLITE_AMALGAMATI
2a220 4f 4e 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  ON.extern const 
2a230 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71  unsigned char sq
2a240 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f 70 65  lite3OpcodePrope
2a250 72 74 79 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f  rty[];.extern co
2a260 6e 73 74 20 63 68 61 72 20 73 71 6c 69 74 65 33  nst char sqlite3
2a270 53 74 72 42 49 4e 41 52 59 5b 5d 3b 0a 65 78 74  StrBINARY[];.ext
2a280 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ern const unsign
2a290 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 55  ed char sqlite3U
2a2a0 70 70 65 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65  pperToLower[];.e
2a2b0 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69  xtern const unsi
2a2c0 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65  gned char sqlite
2a2d0 33 43 74 79 70 65 4d 61 70 5b 5d 3b 0a 65 78 74  3CtypeMap[];.ext
2a2e0 65 72 6e 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20  ern const Token 
2a2f0 73 71 6c 69 74 65 33 49 6e 74 54 6f 6b 65 6e 73  sqlite3IntTokens
2a300 5b 5d 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49 54  [];.extern SQLIT
2a310 45 5f 57 53 44 20 73 74 72 75 63 74 20 53 71 6c  E_WSD struct Sql
2a320 69 74 65 33 43 6f 6e 66 69 67 20 73 71 6c 69 74  ite3Config sqlit
2a330 65 33 43 6f 6e 66 69 67 3b 0a 65 78 74 65 72 6e  e3Config;.extern
2a340 20 46 75 6e 63 44 65 66 48 61 73 68 20 73 71 6c   FuncDefHash sql
2a350 69 74 65 33 42 75 69 6c 74 69 6e 46 75 6e 63 74  ite3BuiltinFunct
2a360 69 6f 6e 73 3b 0a 23 69 66 6e 64 65 66 20 53 51  ions;.#ifndef SQ
2a370 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 65 78  LITE_OMIT_WSD.ex
2a380 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33  tern int sqlite3
2a390 50 65 6e 64 69 6e 67 42 79 74 65 3b 0a 23 65 6e  PendingByte;.#en
2a3a0 64 69 66 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  dif.#endif.void 
2a3b0 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d  sqlite3RootPageM
2a3c0 6f 76 65 64 28 73 71 6c 69 74 65 33 2a 2c 20 69  oved(sqlite3*, i
2a3d0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
2a3e0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 69 6e 64  oid sqlite3Reind
2a3f0 65 78 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  ex(Parse*, Token
2a400 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
2a410 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46 75 6e   sqlite3AlterFun
2a420 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f  ctions(void);.vo
2a430 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 52  id sqlite3AlterR
2a440 65 6e 61 6d 65 54 61 62 6c 65 28 50 61 72 73 65  enameTable(Parse
2a450 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b  *, SrcList*, Tok
2a460 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
2a470 33 47 65 74 54 6f 6b 65 6e 28 63 6f 6e 73 74 20  3GetToken(const 
2a480 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c  unsigned char *,
2a490 20 69 6e 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71   int *);.void sq
2a4a0 6c 69 74 65 33 4e 65 73 74 65 64 50 61 72 73 65  lite3NestedParse
2a4b0 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
2a4c0 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64  har*, ...);.void
2a4d0 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72   sqlite3ExpirePr
2a4e0 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73  eparedStatements
2a4f0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20  (sqlite3*);.int 
2a500 73 71 6c 69 74 65 33 43 6f 64 65 53 75 62 73 65  sqlite3CodeSubse
2a510 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 45 78 70  lect(Parse*, Exp
2a520 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  r *, int, int);.
2a530 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65  void sqlite3Sele
2a540 63 74 50 72 65 70 28 50 61 72 73 65 2a 2c 20 53  ctPrep(Parse*, S
2a550 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74  elect*, NameCont
2a560 65 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ext*);.void sqli
2a570 74 65 33 53 65 6c 65 63 74 57 72 6f 6e 67 4e 75  te3SelectWrongNu
2a580 6d 54 65 72 6d 73 45 72 72 6f 72 28 50 61 72 73  mTermsError(Pars
2a590 65 20 2a 70 50 61 72 73 65 2c 20 53 65 6c 65 63  e *pParse, Selec
2a5a0 74 20 2a 70 29 3b 0a 69 6e 74 20 73 71 6c 69 74  t *p);.int sqlit
2a5b0 65 33 4d 61 74 63 68 53 70 61 6e 4e 61 6d 65 28  e3MatchSpanName(
2a5c0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
2a5d0 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
2a5e0 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
2a5f0 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
2a600 52 65 73 6f 6c 76 65 45 78 70 72 4e 61 6d 65 73  ResolveExprNames
2a610 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45  (NameContext*, E
2a620 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
2a630 65 33 52 65 73 6f 6c 76 65 45 78 70 72 4c 69 73  e3ResolveExprLis
2a640 74 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65  tNames(NameConte
2a650 78 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  xt*, ExprList*);
2a660 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
2a670 6f 6c 76 65 53 65 6c 65 63 74 4e 61 6d 65 73 28  olveSelectNames(
2a680 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c  Parse*, Select*,
2a690 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a   NameContext*);.
2a6a0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f  void sqlite3Reso
2a6b0 6c 76 65 53 65 6c 66 52 65 66 65 72 65 6e 63 65  lveSelfReference
2a6c0 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69  (Parse*,Table*,i
2a6d0 6e 74 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73  nt,Expr*,ExprLis
2a6e0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
2a6f0 52 65 73 6f 6c 76 65 4f 72 64 65 72 47 72 6f 75  ResolveOrderGrou
2a700 70 42 79 28 50 61 72 73 65 2a 2c 20 53 65 6c 65  pBy(Parse*, Sele
2a710 63 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  ct*, ExprList*, 
2a720 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
2a730 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e  id sqlite3Column
2a740 44 65 66 61 75 6c 74 28 56 64 62 65 20 2a 2c 20  Default(Vdbe *, 
2a750 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e  Table *, int, in
2a760 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2a770 41 6c 74 65 72 46 69 6e 69 73 68 41 64 64 43 6f  AlterFinishAddCo
2a780 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 54 6f  lumn(Parse *, To
2a790 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ken *);.void sql
2a7a0 69 74 65 33 41 6c 74 65 72 42 65 67 69 6e 41 64  ite3AlterBeginAd
2a7b0 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c  dColumn(Parse *,
2a7c0 20 53 72 63 4c 69 73 74 20 2a 29 3b 0a 43 6f 6c   SrcList *);.Col
2a7d0 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 47 65 74  lSeq *sqlite3Get
2a7e0 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 2a 2c 20  CollSeq(Parse*, 
2a7f0 75 38 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c 20 63  u8, CollSeq *, c
2a800 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61  onst char*);.cha
2a810 72 20 73 71 6c 69 74 65 33 41 66 66 69 6e 69 74  r sqlite3Affinit
2a820 79 54 79 70 65 28 63 6f 6e 73 74 20 63 68 61 72  yType(const char
2a830 2a 2c 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71  *, u8*);.void sq
2a840 6c 69 74 65 33 41 6e 61 6c 79 7a 65 28 50 61 72  lite3Analyze(Par
2a850 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  se*, Token*, Tok
2a860 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
2a870 33 49 6e 76 6f 6b 65 42 75 73 79 48 61 6e 64 6c  3InvokeBusyHandl
2a880 65 72 28 42 75 73 79 48 61 6e 64 6c 65 72 2a 29  er(BusyHandler*)
2a890 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e  ;.int sqlite3Fin
2a8a0 64 44 62 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f  dDb(sqlite3*, To
2a8b0 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
2a8c0 65 33 46 69 6e 64 44 62 4e 61 6d 65 28 73 71 6c  e3FindDbName(sql
2a8d0 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68  ite3 *, const ch
2a8e0 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ar *);.int sqlit
2a8f0 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 73  e3AnalysisLoad(s
2a900 71 6c 69 74 65 33 2a 2c 69 6e 74 20 69 44 42 29  qlite3*,int iDB)
2a910 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
2a920 6c 65 74 65 49 6e 64 65 78 53 61 6d 70 6c 65 73  leteIndexSamples
2a930 28 73 71 6c 69 74 65 33 2a 2c 49 6e 64 65 78 2a  (sqlite3*,Index*
2a940 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
2a950 65 66 61 75 6c 74 52 6f 77 45 73 74 28 49 6e 64  efaultRowEst(Ind
2a960 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ex*);.void sqlit
2a970 65 33 52 65 67 69 73 74 65 72 4c 69 6b 65 46 75  e3RegisterLikeFu
2a980 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a  nctions(sqlite3*
2a990 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
2a9a0 74 65 33 49 73 4c 69 6b 65 46 75 6e 63 74 69 6f  te3IsLikeFunctio
2a9b0 6e 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a  n(sqlite3*,Expr*
2a9c0 2c 69 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f  ,int*,char*);.vo
2a9d0 69 64 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61  id sqlite3Schema
2a9e0 43 6c 65 61 72 28 76 6f 69 64 20 2a 29 3b 0a 53  Clear(void *);.S
2a9f0 63 68 65 6d 61 20 2a 73 71 6c 69 74 65 33 53 63  chema *sqlite3Sc
2aa00 68 65 6d 61 47 65 74 28 73 71 6c 69 74 65 33 20  hemaGet(sqlite3 
2aa10 2a 2c 20 42 74 72 65 65 20 2a 29 3b 0a 69 6e 74  *, Btree *);.int
2aa20 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 54 6f   sqlite3SchemaTo
2aa30 49 6e 64 65 78 28 73 71 6c 69 74 65 33 20 2a 64  Index(sqlite3 *d
2aa40 62 2c 20 53 63 68 65 6d 61 20 2a 29 3b 0a 4b 65  b, Schema *);.Ke
2aa50 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65  yInfo *sqlite3Ke
2aa60 79 49 6e 66 6f 41 6c 6c 6f 63 28 73 71 6c 69 74  yInfoAlloc(sqlit
2aa70 65 33 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f  e3*,int,int);.vo
2aa80 69 64 20 73 71 6c 69 74 65 33 4b 65 79 49 6e 66  id sqlite3KeyInf
2aa90 6f 55 6e 72 65 66 28 4b 65 79 49 6e 66 6f 2a 29  oUnref(KeyInfo*)
2aaa0 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74  ;.KeyInfo *sqlit
2aab0 65 33 4b 65 79 49 6e 66 6f 52 65 66 28 4b 65 79  e3KeyInfoRef(Key
2aac0 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20  Info*);.KeyInfo 
2aad0 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 4f  *sqlite3KeyInfoO
2aae0 66 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 49  fIndex(Parse*, I
2aaf0 6e 64 65 78 2a 29 3b 0a 23 69 66 64 65 66 20 53  ndex*);.#ifdef S
2ab00 51 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e 74 20  QLITE_DEBUG.int 
2ab10 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 49 73  sqlite3KeyInfoIs
2ab20 57 72 69 74 65 61 62 6c 65 28 4b 65 79 49 6e 66  Writeable(KeyInf
2ab30 6f 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20  o*);.#endif.int 
2ab40 73 71 6c 69 74 65 33 43 72 65 61 74 65 46 75 6e  sqlite3CreateFun
2ab50 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e  c(sqlite3 *, con
2ab60 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20  st char *, int, 
2ab70 69 6e 74 2c 20 76 6f 69 64 20 2a 2c 0a 20 20 76  int, void *,.  v
2ab80 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f  oid (*)(sqlite3_
2ab90 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
2aba0 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a  ite3_value **),.
2abb0 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74    void (*)(sqlit
2abc0 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
2abd0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
2abe0 29 2c 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69  ), void (*)(sqli
2abf0 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20  te3_context*),. 
2ac00 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
2ac10 2a 70 44 65 73 74 72 75 63 74 6f 72 0a 29 3b 0a  *pDestructor.);.
2ac20 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 6f 6d 46  void sqlite3OomF
2ac30 61 75 6c 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ault(sqlite3*);.
2ac40 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 6f 6d 43  void sqlite3OomC
2ac50 6c 65 61 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a  lear(sqlite3*);.
2ac60 69 6e 74 20 73 71 6c 69 74 65 33 41 70 69 45 78  int sqlite3ApiEx
2ac70 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  it(sqlite3 *db, 
2ac80 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2ac90 33 4f 70 65 6e 54 65 6d 70 44 61 74 61 62 61 73  3OpenTempDatabas
2aca0 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a 76 6f 69  e(Parse *);..voi
2acb0 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75  d sqlite3StrAccu
2acc0 6d 49 6e 69 74 28 53 74 72 41 63 63 75 6d 2a 2c  mInit(StrAccum*,
2acd0 20 73 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a   sqlite3*, char*
2ace0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
2acf0 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75  d sqlite3StrAccu
2ad00 6d 41 70 70 65 6e 64 28 53 74 72 41 63 63 75 6d  mAppend(StrAccum
2ad10 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  *,const char*,in
2ad20 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2ad30 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64 41 6c  StrAccumAppendAl
2ad40 6c 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73  l(StrAccum*,cons
2ad50 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
2ad60 71 6c 69 74 65 33 41 70 70 65 6e 64 43 68 61 72  qlite3AppendChar
2ad70 28 53 74 72 41 63 63 75 6d 2a 2c 69 6e 74 2c 63  (StrAccum*,int,c
2ad80 68 61 72 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  har);.char *sqli
2ad90 74 65 33 53 74 72 41 63 63 75 6d 46 69 6e 69 73  te3StrAccumFinis
2ada0 68 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f  h(StrAccum*);.vo
2adb0 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63  id sqlite3StrAcc
2adc0 75 6d 52 65 73 65 74 28 53 74 72 41 63 63 75 6d  umReset(StrAccum
2add0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2ade0 53 65 6c 65 63 74 44 65 73 74 49 6e 69 74 28 53  SelectDestInit(S
2adf0 65 6c 65 63 74 44 65 73 74 2a 2c 69 6e 74 2c 69  electDest*,int,i
2ae00 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  nt);.Expr *sqlit
2ae10 65 33 43 72 65 61 74 65 43 6f 6c 75 6d 6e 45 78  e3CreateColumnEx
2ae20 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 53 72  pr(sqlite3 *, Sr
2ae30 63 4c 69 73 74 20 2a 2c 20 69 6e 74 2c 20 69 6e  cList *, int, in
2ae40 74 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  t);..void sqlite
2ae50 33 42 61 63 6b 75 70 52 65 73 74 61 72 74 28 73  3BackupRestart(s
2ae60 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 29  qlite3_backup *)
2ae70 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61  ;.void sqlite3Ba
2ae80 63 6b 75 70 55 70 64 61 74 65 28 73 71 6c 69 74  ckupUpdate(sqlit
2ae90 65 33 5f 62 61 63 6b 75 70 20 2a 2c 20 50 67 6e  e3_backup *, Pgn
2aea0 6f 2c 20 63 6f 6e 73 74 20 75 38 20 2a 29 3b 0a  o, const u8 *);.
2aeb0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2aec0 4f 4d 49 54 5f 53 55 42 51 55 45 52 59 0a 69 6e  OMIT_SUBQUERY.in
2aed0 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65  t sqlite3ExprChe
2aee0 63 6b 49 4e 28 50 61 72 73 65 2a 2c 20 45 78 70  ckIN(Parse*, Exp
2aef0 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  r*);.#else.# def
2af00 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72 43  ine sqlite3ExprC
2af10 68 65 63 6b 49 4e 28 78 2c 79 29 20 53 51 4c 49  heckIN(x,y) SQLI
2af20 54 45 5f 4f 4b 0a 23 65 6e 64 69 66 0a 0a 23 69  TE_OK.#endif..#i
2af30 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
2af40 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
2af50 34 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e  4.void sqlite3An
2af60 61 6c 79 7a 65 46 75 6e 63 74 69 6f 6e 73 28 76  alyzeFunctions(v
2af70 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  oid);.int sqlite
2af80 33 53 74 61 74 34 50 72 6f 62 65 53 65 74 56 61  3Stat4ProbeSetVa
2af90 6c 75 65 28 0a 20 20 20 20 50 61 72 73 65 2a 2c  lue(.    Parse*,
2afa0 49 6e 64 65 78 2a 2c 55 6e 70 61 63 6b 65 64 52  Index*,UnpackedR
2afb0 65 63 6f 72 64 2a 2a 2c 45 78 70 72 2a 2c 69 6e  ecord**,Expr*,in
2afc0 74 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 69 6e 74  t,int,int*);.int
2afd0 20 73 71 6c 69 74 65 33 53 74 61 74 34 56 61 6c   sqlite3Stat4Val
2afe0 75 65 46 72 6f 6d 45 78 70 72 28 50 61 72 73 65  ueFromExpr(Parse
2aff0 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c 20 73 71  *, Expr*, u8, sq
2b000 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a  lite3_value**);.
2b010 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74  void sqlite3Stat
2b020 34 50 72 6f 62 65 46 72 65 65 28 55 6e 70 61 63  4ProbeFree(Unpac
2b030 6b 65 64 52 65 63 6f 72 64 2a 29 3b 0a 69 6e 74  kedRecord*);.int
2b040 20 73 71 6c 69 74 65 33 53 74 61 74 34 43 6f 6c   sqlite3Stat4Col
2b050 75 6d 6e 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f  umn(sqlite3*, co
2b060 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20  nst void*, int, 
2b070 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  int, sqlite3_val
2b080 75 65 2a 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69  ue**);.char sqli
2b090 74 65 33 49 6e 64 65 78 43 6f 6c 75 6d 6e 41 66  te3IndexColumnAf
2b0a0 66 69 6e 69 74 79 28 73 71 6c 69 74 65 33 2a 2c  finity(sqlite3*,
2b0b0 20 49 6e 64 65 78 2a 2c 20 69 6e 74 29 3b 0a 23   Index*, int);.#
2b0c0 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
2b0d0 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68   interface to th
2b0e0 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61 74 65  e LEMON-generate
2b0f0 64 20 70 61 72 73 65 72 0a 2a 2f 0a 76 6f 69 64  d parser.*/.void
2b100 20 2a 73 71 6c 69 74 65 33 50 61 72 73 65 72 41   *sqlite3ParserA
2b110 6c 6c 6f 63 28 76 6f 69 64 2a 28 2a 29 28 75 36  lloc(void*(*)(u6
2b120 34 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  4));.void sqlite
2b130 33 50 61 72 73 65 72 46 72 65 65 28 76 6f 69 64  3ParserFree(void
2b140 2a 2c 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a  *, void(*)(void*
2b150 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  ));.void sqlite3
2b160 50 61 72 73 65 72 28 76 6f 69 64 2a 2c 20 69 6e  Parser(void*, in
2b170 74 2c 20 54 6f 6b 65 6e 2c 20 50 61 72 73 65 2a  t, Token, Parse*
2b180 29 3b 0a 23 69 66 64 65 66 20 59 59 54 52 41 43  );.#ifdef YYTRAC
2b190 4b 4d 41 58 53 54 41 43 4b 44 45 50 54 48 0a 20  KMAXSTACKDEPTH. 
2b1a0 20 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73   int sqlite3Pars
2b1b0 65 72 53 74 61 63 6b 50 65 61 6b 28 76 6f 69 64  erStackPeak(void
2b1c0 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64  *);.#endif..void
2b1d0 20 73 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64   sqlite3AutoLoad
2b1e0 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74  Extensions(sqlit
2b1f0 65 33 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  e3*);.#ifndef SQ
2b200 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45  LITE_OMIT_LOAD_E
2b210 58 54 45 4e 53 49 4f 4e 0a 20 20 76 6f 69 64 20  XTENSION.  void 
2b220 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65  sqlite3CloseExte
2b230 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29  nsions(sqlite3*)
2b240 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
2b250 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74   sqlite3CloseExt
2b260 65 6e 73 69 6f 6e 73 28 58 29 0a 23 65 6e 64 69  ensions(X).#endi
2b270 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
2b280 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41  E_OMIT_SHARED_CA
2b290 43 48 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  CHE.  void sqlit
2b2a0 65 33 54 61 62 6c 65 4c 6f 63 6b 28 50 61 72 73  e3TableLock(Pars
2b2b0 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75  e *, int, int, u
2b2c0 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  8, const char *)
2b2d0 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
2b2e0 65 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f  e sqlite3TableLo
2b2f0 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65  ck(v,w,x,y,z).#e
2b300 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
2b310 49 54 45 5f 54 45 53 54 0a 20 20 69 6e 74 20 73  ITE_TEST.  int s
2b320 71 6c 69 74 65 33 55 74 66 38 54 6f 38 28 75 6e  qlite3Utf8To8(un
2b330 73 69 67 6e 65 64 20 63 68 61 72 2a 29 3b 0a 23  signed char*);.#
2b340 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
2b350 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2b360 4c 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65  LTABLE.#  define
2b370 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61   sqlite3VtabClea
2b380 72 28 59 29 0a 23 20 20 64 65 66 69 6e 65 20 73  r(Y).#  define s
2b390 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28 58  qlite3VtabSync(X
2b3a0 2c 59 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20  ,Y) SQLITE_OK.# 
2b3b0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2b3c0 74 61 62 52 6f 6c 6c 62 61 63 6b 28 58 29 0a 23  tabRollback(X).#
2b3d0 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2b3e0 56 74 61 62 43 6f 6d 6d 69 74 28 58 29 0a 23 20  VtabCommit(X).# 
2b3f0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2b400 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20 30 0a  tabInSync(db) 0.
2b410 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
2b420 33 56 74 61 62 4c 6f 63 6b 28 58 29 0a 23 20 20  3VtabLock(X).#  
2b430 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
2b440 61 62 55 6e 6c 6f 63 6b 28 58 29 0a 23 20 20 64  abUnlock(X).#  d
2b450 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
2b460 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 58 29 0a 23  bUnlockList(X).#
2b470 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2b480 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 58 2c  VtabSavepoint(X,
2b490 20 59 2c 20 5a 29 20 53 51 4c 49 54 45 5f 4f 4b   Y, Z) SQLITE_OK
2b4a0 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
2b4b0 65 33 47 65 74 56 54 61 62 6c 65 28 58 2c 59 29  e3GetVTable(X,Y)
2b4c0 20 20 28 28 56 54 61 62 6c 65 2a 29 30 29 0a 23    ((VTable*)0).#
2b4d0 65 6c 73 65 0a 20 20 20 76 6f 69 64 20 73 71 6c  else.   void sql
2b4e0 69 74 65 33 56 74 61 62 43 6c 65 61 72 28 73 71  ite3VtabClear(sq
2b4f0 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65  lite3 *db, Table
2b500 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  *);.   void sqli
2b510 74 65 33 56 74 61 62 44 69 73 63 6f 6e 6e 65 63  te3VtabDisconnec
2b520 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54  t(sqlite3 *db, T
2b530 61 62 6c 65 20 2a 70 29 3b 0a 20 20 20 69 6e 74  able *p);.   int
2b540 20 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63   sqlite3VtabSync
2b550 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 56 64  (sqlite3 *db, Vd
2b560 62 65 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c  be*);.   int sql
2b570 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b  ite3VtabRollback
2b580 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20  (sqlite3 *db);. 
2b590 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61    int sqlite3Vta
2b5a0 62 43 6f 6d 6d 69 74 28 73 71 6c 69 74 65 33 20  bCommit(sqlite3 
2b5b0 2a 64 62 29 3b 0a 20 20 20 76 6f 69 64 20 73 71  *db);.   void sq
2b5c0 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 56 54  lite3VtabLock(VT
2b5d0 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64  able *);.   void
2b5e0 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
2b5f0 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20  ck(VTable *);.  
2b600 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
2b610 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 73 71 6c 69  bUnlockList(sqli
2b620 74 65 33 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71  te3*);.   int sq
2b630 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69  lite3VtabSavepoi
2b640 6e 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e  nt(sqlite3 *, in
2b650 74 2c 20 69 6e 74 29 3b 0a 20 20 20 76 6f 69 64  t, int);.   void
2b660 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f   sqlite3VtabImpo
2b670 72 74 45 72 72 6d 73 67 28 56 64 62 65 2a 2c 20  rtErrmsg(Vdbe*, 
2b680 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 29 3b 0a  sqlite3_vtab*);.
2b690 20 20 20 56 54 61 62 6c 65 20 2a 73 71 6c 69 74     VTable *sqlit
2b6a0 65 33 47 65 74 56 54 61 62 6c 65 28 73 71 6c 69  e3GetVTable(sqli
2b6b0 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20  te3*, Table*);. 
2b6c0 20 20 4d 6f 64 75 6c 65 20 2a 73 71 6c 69 74 65    Module *sqlite
2b6d0 33 56 74 61 62 43 72 65 61 74 65 4d 6f 64 75 6c  3VtabCreateModul
2b6e0 65 28 0a 20 20 20 20 20 73 71 6c 69 74 65 33 2a  e(.     sqlite3*
2b6f0 2c 0a 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61  ,.     const cha
2b700 72 2a 2c 0a 20 20 20 20 20 63 6f 6e 73 74 20 73  r*,.     const s
2b710 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 2a 2c 0a  qlite3_module*,.
2b720 20 20 20 20 20 76 6f 69 64 2a 2c 0a 20 20 20 20       void*,.    
2b730 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 0a   void(*)(void*).
2b740 20 20 20 29 3b 0a 23 20 20 64 65 66 69 6e 65 20     );.#  define 
2b750 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e  sqlite3VtabInSyn
2b760 63 28 64 62 29 20 28 28 64 62 29 2d 3e 6e 56 54  c(db) ((db)->nVT
2b770 72 61 6e 73 3e 30 20 26 26 20 28 64 62 29 2d 3e  rans>0 && (db)->
2b780 61 56 54 72 61 6e 73 3d 3d 30 29 0a 23 65 6e 64  aVTrans==0).#end
2b790 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  if.int sqlite3Vt
2b7a0 61 62 45 70 6f 6e 79 6d 6f 75 73 54 61 62 6c 65  abEponymousTable
2b7b0 49 6e 69 74 28 50 61 72 73 65 2a 2c 4d 6f 64 75  Init(Parse*,Modu
2b7c0 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  le*);.void sqlit
2b7d0 65 33 56 74 61 62 45 70 6f 6e 79 6d 6f 75 73 54  e3VtabEponymousT
2b7e0 61 62 6c 65 43 6c 65 61 72 28 73 71 6c 69 74 65  ableClear(sqlite
2b7f0 33 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69  3*,Module*);.voi
2b800 64 20 73 71 6c 69 74 65 33 56 74 61 62 4d 61 6b  d sqlite3VtabMak
2b810 65 57 72 69 74 61 62 6c 65 28 50 61 72 73 65 2a  eWritable(Parse*
2b820 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73  ,Table*);.void s
2b830 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 50  qlite3VtabBeginP
2b840 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  arse(Parse*, Tok
2b850 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  en*, Token*, Tok
2b860 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  en*, int);.void 
2b870 73 71 6c 69 74 65 33 56 74 61 62 46 69 6e 69 73  sqlite3VtabFinis
2b880 68 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54  hParse(Parse*, T
2b890 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
2b8a0 69 74 65 33 56 74 61 62 41 72 67 49 6e 69 74 28  ite3VtabArgInit(
2b8b0 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
2b8c0 6c 69 74 65 33 56 74 61 62 41 72 67 45 78 74 65  lite3VtabArgExte
2b8d0 6e 64 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  nd(Parse*, Token
2b8e0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
2b8f0 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28 73 71  tabCallCreate(sq
2b900 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e  lite3*, int, con
2b910 73 74 20 63 68 61 72 20 2a 2c 20 63 68 61 72 20  st char *, char 
2b920 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  **);.int sqlite3
2b930 56 74 61 62 43 61 6c 6c 43 6f 6e 6e 65 63 74 28  VtabCallConnect(
2b940 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b  Parse*, Table*);
2b950 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62  .int sqlite3Vtab
2b960 43 61 6c 6c 44 65 73 74 72 6f 79 28 73 71 6c 69  CallDestroy(sqli
2b970 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  te3*, int, const
2b980 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71   char *);.int sq
2b990 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 28 73  lite3VtabBegin(s
2b9a0 71 6c 69 74 65 33 20 2a 2c 20 56 54 61 62 6c 65  qlite3 *, VTable
2b9b0 20 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71   *);.FuncDef *sq
2b9c0 6c 69 74 65 33 56 74 61 62 4f 76 65 72 6c 6f 61  lite3VtabOverloa
2b9d0 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65  dFunction(sqlite
2b9e0 33 20 2a 2c 46 75 6e 63 44 65 66 2a 2c 20 69 6e  3 *,FuncDef*, in
2b9f0 74 20 6e 41 72 67 2c 20 45 78 70 72 2a 29 3b 0a  t nArg, Expr*);.
2ba00 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 76 61  void sqlite3Inva
2ba10 6c 69 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69  lidFunction(sqli
2ba20 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
2ba30 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a  ,sqlite3_value**
2ba40 29 3b 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  );.sqlite3_int64
2ba50 20 73 71 6c 69 74 65 33 53 74 6d 74 43 75 72 72   sqlite3StmtCurr
2ba60 65 6e 74 54 69 6d 65 28 73 71 6c 69 74 65 33 5f  entTime(sqlite3_
2ba70 63 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73  context*);.int s
2ba80 71 6c 69 74 65 33 56 64 62 65 50 61 72 61 6d 65  qlite3VdbeParame
2ba90 74 65 72 49 6e 64 65 78 28 56 64 62 65 2a 2c 20  terIndex(Vdbe*, 
2baa0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74  const char*, int
2bab0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 72  );.int sqlite3Tr
2bac0 61 6e 73 66 65 72 42 69 6e 64 69 6e 67 73 28 73  ansferBindings(s
2bad0 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2c 20 73  qlite3_stmt *, s
2bae0 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 29 3b 0a  qlite3_stmt *);.
2baf0 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73  void sqlite3Pars
2bb00 65 72 52 65 73 65 74 28 50 61 72 73 65 2a 29 3b  erReset(Parse*);
2bb10 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 70 72  .int sqlite3Repr
2bb20 65 70 61 72 65 28 56 64 62 65 2a 29 3b 0a 76 6f  epare(Vdbe*);.vo
2bb30 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
2bb40 73 74 43 68 65 63 6b 4c 65 6e 67 74 68 28 50 61  stCheckLength(Pa
2bb50 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
2bb60 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 43   const char*);.C
2bb70 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 42  ollSeq *sqlite3B
2bb80 69 6e 61 72 79 43 6f 6d 70 61 72 65 43 6f 6c 6c  inaryCompareColl
2bb90 53 65 71 28 50 61 72 73 65 20 2a 2c 20 45 78 70  Seq(Parse *, Exp
2bba0 72 20 2a 2c 20 45 78 70 72 20 2a 29 3b 0a 69 6e  r *, Expr *);.in
2bbb0 74 20 73 71 6c 69 74 65 33 54 65 6d 70 49 6e 4d  t sqlite3TempInM
2bbc0 65 6d 6f 72 79 28 63 6f 6e 73 74 20 73 71 6c 69  emory(const sqli
2bbd0 74 65 33 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61  te3*);.const cha
2bbe0 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  r *sqlite3Journa
2bbf0 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 29 3b 0a  lModename(int);.
2bc00 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2bc10 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 73 71  MIT_WAL.  int sq
2bc20 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28  lite3Checkpoint(
2bc30 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69  sqlite3*, int, i
2bc40 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b  nt, int*, int*);
2bc50 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 57 61  .  int sqlite3Wa
2bc60 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 28 76 6f 69  lDefaultHook(voi
2bc70 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  d*,sqlite3*,cons
2bc80 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 23 65  t char*,int);.#e
2bc90 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
2bca0 49 54 45 5f 4f 4d 49 54 5f 43 54 45 0a 20 20 57  ITE_OMIT_CTE.  W
2bcb0 69 74 68 20 2a 73 71 6c 69 74 65 33 57 69 74 68  ith *sqlite3With
2bcc0 41 64 64 28 50 61 72 73 65 2a 2c 57 69 74 68 2a  Add(Parse*,With*
2bcd0 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74  ,Token*,ExprList
2bce0 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f  *,Select*);.  vo
2bcf0 69 64 20 73 71 6c 69 74 65 33 57 69 74 68 44 65  id sqlite3WithDe
2bd00 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 57 69  lete(sqlite3*,Wi
2bd10 74 68 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  th*);.  void sql
2bd20 69 74 65 33 57 69 74 68 50 75 73 68 28 50 61 72  ite3WithPush(Par
2bd30 73 65 2a 2c 20 57 69 74 68 2a 2c 20 75 38 29 3b  se*, With*, u8);
2bd40 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 73  .#else.#define s
2bd50 71 6c 69 74 65 33 57 69 74 68 50 75 73 68 28 78  qlite3WithPush(x
2bd60 2c 79 2c 7a 29 0a 23 64 65 66 69 6e 65 20 73 71  ,y,z).#define sq
2bd70 6c 69 74 65 33 57 69 74 68 44 65 6c 65 74 65 28  lite3WithDelete(
2bd80 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  x,y).#endif../* 
2bd90 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72  Declarations for
2bda0 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20 66 6b   functions in fk
2bdb0 65 79 2e 63 2e 20 41 6c 6c 20 6f 66 20 74 68 65  ey.c. All of the
2bdc0 73 65 20 61 72 65 20 72 65 70 6c 61 63 65 64 20  se are replaced 
2bdd0 62 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72  by.** no-op macr
2bde0 6f 73 20 69 66 20 4f 4d 49 54 5f 46 4f 52 45 49  os if OMIT_FOREI
2bdf0 47 4e 5f 4b 45 59 20 69 73 20 64 65 66 69 6e 65  GN_KEY is define
2be00 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  d. In this case 
2be10 6e 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65  no foreign.** ke
2be20 79 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20  y functionality 
2be30 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 20 49 66  is available. If
2be40 20 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 69 73   OMIT_TRIGGER is
2be50 20 64 65 66 69 6e 65 64 20 62 75 74 0a 2a 2a 20   defined but.** 
2be60 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
2be70 20 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f   is not, only so
2be80 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  me of the functi
2be90 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f 70 65 64 2e  ons are no-oped.
2bea0 20 49 6e 0a 2a 2a 20 74 68 69 73 20 63 61 73 65   In.** this case
2beb0 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 72   foreign keys ar
2bec0 65 20 70 61 72 73 65 64 2c 20 62 75 74 20 6e 6f  e parsed, but no
2bed0 20 6f 74 68 65 72 20 66 75 6e 63 74 69 6f 6e 61   other functiona
2bee0 6c 69 74 79 20 69 73 0a 2a 2a 20 70 72 6f 76 69  lity is.** provi
2bef0 64 65 64 20 28 65 6e 66 6f 72 63 65 6d 65 6e 74  ded (enforcement
2bf00 20 6f 66 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e   of FK constrain
2bf10 74 73 20 72 65 71 75 69 72 65 73 20 74 68 65 20  ts requires the 
2bf20 74 72 69 67 67 65 72 73 20 73 75 62 2d 73 79 73  triggers sub-sys
2bf30 74 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  tem)..*/.#if !de
2bf40 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
2bf50 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26  T_FOREIGN_KEY) &
2bf60 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
2bf70 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a  E_OMIT_TRIGGER).
2bf80 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b    void sqlite3Fk
2bf90 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 20 54 61  Check(Parse*, Ta
2bfa0 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
2bfb0 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f  int*, int);.  vo
2bfc0 69 64 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70  id sqlite3FkDrop
2bfd0 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72  Table(Parse*, Sr
2bfe0 63 4c 69 73 74 20 2a 2c 20 54 61 62 6c 65 2a 29  cList *, Table*)
2bff0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2c000 46 6b 41 63 74 69 6f 6e 73 28 50 61 72 73 65 2a  FkActions(Parse*
2c010 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 4c 69  , Table*, ExprLi
2c020 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20  st*, int, int*, 
2c030 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  int);.  int sqli
2c040 74 65 33 46 6b 52 65 71 75 69 72 65 64 28 50 61  te3FkRequired(Pa
2c050 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
2c060 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 75 33 32 20  t*, int);.  u32 
2c070 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b  sqlite3FkOldmask
2c080 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29  (Parse*, Table*)
2c090 3b 0a 20 20 46 4b 65 79 20 2a 73 71 6c 69 74 65  ;.  FKey *sqlite
2c0a0 33 46 6b 52 65 66 65 72 65 6e 63 65 73 28 54 61  3FkReferences(Ta
2c0b0 62 6c 65 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20  ble *);.#else.  
2c0c0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
2c0d0 6b 41 63 74 69 6f 6e 73 28 61 2c 62 2c 63 2c 64  kActions(a,b,c,d
2c0e0 2c 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20  ,e,f).  #define 
2c0f0 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 61  sqlite3FkCheck(a
2c100 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64  ,b,c,d,e,f).  #d
2c110 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44  efine sqlite3FkD
2c120 72 6f 70 54 61 62 6c 65 28 61 2c 62 2c 63 29 0a  ropTable(a,b,c).
2c130 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
2c140 33 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62 29 20  3FkOldmask(a,b) 
2c150 20 20 20 20 20 20 20 20 30 0a 20 20 23 64 65 66          0.  #def
2c160 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65 71  ine sqlite3FkReq
2c170 75 69 72 65 64 28 61 2c 62 2c 63 2c 64 29 20 20  uired(a,b,c,d)  
2c180 20 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64    0.#endif.#ifnd
2c190 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
2c1a0 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20 76 6f 69  OREIGN_KEY.  voi
2c1b0 64 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74  d sqlite3FkDelet
2c1c0 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 54 61 62  e(sqlite3 *, Tab
2c1d0 6c 65 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  le*);.  int sqli
2c1e0 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78  te3FkLocateIndex
2c1f0 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 46  (Parse*,Table*,F
2c200 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69 6e 74  Key*,Index**,int
2c210 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65  **);.#else.  #de
2c220 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 65  fine sqlite3FkDe
2c230 6c 65 74 65 28 61 2c 62 29 0a 20 20 23 64 65 66  lete(a,b).  #def
2c240 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63  ine sqlite3FkLoc
2c250 61 74 65 49 6e 64 65 78 28 61 2c 62 2c 63 2c 64  ateIndex(a,b,c,d
2c260 2c 65 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a  ,e).#endif.../*.
2c270 2a 2a 20 41 76 61 69 6c 61 62 6c 65 20 66 61 75  ** Available fau
2c280 6c 74 20 69 6e 6a 65 63 74 6f 72 73 2e 20 20 53  lt injectors.  S
2c290 68 6f 75 6c 64 20 62 65 20 6e 75 6d 62 65 72 65  hould be numbere
2c2a0 64 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  d beginning with
2c2b0 20 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53   0..*/.#define S
2c2c0 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43  QLITE_FAULTINJEC
2c2d0 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 30  TOR_MALLOC     0
2c2e0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
2c2f0 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 43 4f  FAULTINJECTOR_CO
2c300 55 4e 54 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a  UNT      1../*.*
2c310 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20  * The interface 
2c320 74 6f 20 74 68 65 20 63 6f 64 65 20 69 6e 20 66  to the code in f
2c330 61 75 6c 74 2e 63 20 75 73 65 64 20 66 6f 72 20  ault.c used for 
2c340 69 64 65 6e 74 69 66 79 69 6e 67 20 22 62 65 6e  identifying "ben
2c350 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20 66  ign".** malloc f
2c360 61 69 6c 75 72 65 73 2e 20 54 68 69 73 20 69 73  ailures. This is
2c370 20 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20 69 66   only present if
2c380 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42   SQLITE_UNTESTAB
2c390 4c 45 0a 2a 2a 20 69 73 20 6e 6f 74 20 64 65 66  LE.** is not def
2c3a0 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  ined..*/.#ifndef
2c3b0 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42   SQLITE_UNTESTAB
2c3c0 4c 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  LE.  void sqlite
2c3d0 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c  3BeginBenignMall
2c3e0 6f 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f 69 64  oc(void);.  void
2c3f0 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67   sqlite3EndBenig
2c400 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 23  nMalloc(void);.#
2c410 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
2c420 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67  qlite3BeginBenig
2c430 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64 65 66  nMalloc().  #def
2c440 69 6e 65 20 73 71 6c 69 74 65 33 45 6e 64 42 65  ine sqlite3EndBe
2c450 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65 6e  nignMalloc().#en
2c460 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  dif../*.** Allow
2c470 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65 73  ed return values
2c480 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 46 69 6e   from sqlite3Fin
2c490 64 49 6e 49 6e 64 65 78 28 29 0a 2a 2f 0a 23 64  dInIndex().*/.#d
2c4a0 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 52  efine IN_INDEX_R
2c4b0 4f 57 49 44 20 20 20 20 20 20 20 20 31 20 20 20  OWID        1   
2c4c0 2f 2a 20 53 65 61 72 63 68 20 74 68 65 20 72 6f  /* Search the ro
2c4d0 77 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c 65  wid of the table
2c4e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
2c4f0 4e 44 45 58 5f 45 50 48 20 20 20 20 20 20 20 20  NDEX_EPH        
2c500 20 20 32 20 20 20 2f 2a 20 53 65 61 72 63 68 20    2   /* Search 
2c510 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 62 2d 74  an ephemeral b-t
2c520 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  ree */.#define I
2c530 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 41 53  N_INDEX_INDEX_AS
2c540 43 20 20 20 20 33 20 20 20 2f 2a 20 45 78 69 73  C    3   /* Exis
2c550 74 69 6e 67 20 69 6e 64 65 78 20 41 53 43 45 4e  ting index ASCEN
2c560 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65 20  DING */.#define 
2c570 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 44  IN_INDEX_INDEX_D
2c580 45 53 43 20 20 20 34 20 20 20 2f 2a 20 45 78 69  ESC   4   /* Exi
2c590 73 74 69 6e 67 20 69 6e 64 65 78 20 44 45 53 43  sting index DESC
2c5a0 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e  ENDING */.#defin
2c5b0 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20  e IN_INDEX_NOOP 
2c5c0 20 20 20 20 20 20 20 20 35 20 20 20 2f 2a 20 4e          5   /* N
2c5d0 6f 20 74 61 62 6c 65 20 61 76 61 69 6c 61 62 6c  o table availabl
2c5e0 65 2e 20 55 73 65 20 63 6f 6d 70 61 72 69 73 6f  e. Use compariso
2c5f0 6e 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  ns */./*.** Allo
2c600 77 65 64 20 66 6c 61 67 73 20 66 6f 72 20 74 68  wed flags for th
2c610 65 20 33 72 64 20 70 61 72 61 6d 65 74 65 72 20  e 3rd parameter 
2c620 74 6f 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e  to sqlite3FindIn
2c630 49 6e 64 65 78 28 29 2e 0a 2a 2f 0a 23 64 65 66  Index()..*/.#def
2c640 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f  ine IN_INDEX_NOO
2c650 50 5f 4f 4b 20 20 20 20 20 30 78 30 30 30 31 20  P_OK     0x0001 
2c660 20 2f 2a 20 4f 4b 20 74 6f 20 72 65 74 75 72 6e   /* OK to return
2c670 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 2a   IN_INDEX_NOOP *
2c680 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
2c690 45 58 5f 4d 45 4d 42 45 52 53 48 49 50 20 20 30  EX_MEMBERSHIP  0
2c6a0 78 30 30 30 32 20 20 2f 2a 20 49 4e 20 6f 70 65  x0002  /* IN ope
2c6b0 72 61 74 6f 72 20 75 73 65 64 20 66 6f 72 20 6d  rator used for m
2c6c0 65 6d 62 65 72 73 68 69 70 20 74 65 73 74 20 2a  embership test *
2c6d0 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
2c6e0 45 58 5f 4c 4f 4f 50 20 20 20 20 20 20 20 20 30  EX_LOOP        0
2c6f0 78 30 30 30 34 20 20 2f 2a 20 49 4e 20 6f 70 65  x0004  /* IN ope
2c700 72 61 74 6f 72 20 75 73 65 64 20 61 73 20 61 20  rator used as a 
2c710 6c 6f 6f 70 20 2a 2f 0a 69 6e 74 20 73 71 6c 69  loop */.int sqli
2c720 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 50  te3FindInIndex(P
2c730 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20  arse *, Expr *, 
2c740 75 33 32 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29  u32, int*, int*)
2c750 3b 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  ;..int sqlite3Jo
2c760 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65  urnalOpen(sqlite
2c770 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20 63  3_vfs *, const c
2c780 68 61 72 20 2a 2c 20 73 71 6c 69 74 65 33 5f 66  har *, sqlite3_f
2c790 69 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  ile *, int, int)
2c7a0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75  ;.int sqlite3Jou
2c7b0 72 6e 61 6c 53 69 7a 65 28 73 71 6c 69 74 65 33  rnalSize(sqlite3
2c7c0 5f 76 66 73 20 2a 29 3b 0a 23 69 66 64 65 66 20  _vfs *);.#ifdef 
2c7d0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 54  SQLITE_ENABLE_AT
2c7e0 4f 4d 49 43 5f 57 52 49 54 45 0a 20 20 69 6e 74  OMIC_WRITE.  int
2c7f0 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43   sqlite3JournalC
2c800 72 65 61 74 65 28 73 71 6c 69 74 65 33 5f 66 69  reate(sqlite3_fi
2c810 6c 65 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 69  le *);.#endif..i
2c820 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  nt sqlite3Journa
2c830 6c 49 73 49 6e 4d 65 6d 6f 72 79 28 73 71 6c 69  lIsInMemory(sqli
2c840 74 65 33 5f 66 69 6c 65 20 2a 70 29 3b 0a 76 6f  te3_file *p);.vo
2c850 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75  id sqlite3MemJou
2c860 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33  rnalOpen(sqlite3
2c870 5f 66 69 6c 65 20 2a 29 3b 0a 0a 76 6f 69 64 20  _file *);..void 
2c880 73 71 6c 69 74 65 33 45 78 70 72 53 65 74 48 65  sqlite3ExprSetHe
2c890 69 67 68 74 41 6e 64 46 6c 61 67 73 28 50 61 72  ightAndFlags(Par
2c8a0 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72  se *pParse, Expr
2c8b0 20 2a 70 29 3b 0a 23 69 66 20 53 51 4c 49 54 45   *p);.#if SQLITE
2c8c0 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e  _MAX_EXPR_DEPTH>
2c8d0 30 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 53  0.  int sqlite3S
2c8e0 65 6c 65 63 74 45 78 70 72 48 65 69 67 68 74 28  electExprHeight(
2c8f0 53 65 6c 65 63 74 20 2a 29 3b 0a 20 20 69 6e 74  Select *);.  int
2c900 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63   sqlite3ExprChec
2c910 6b 48 65 69 67 68 74 28 50 61 72 73 65 2a 2c 20  kHeight(Parse*, 
2c920 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  int);.#else.  #d
2c930 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65 6c  efine sqlite3Sel
2c940 65 63 74 45 78 70 72 48 65 69 67 68 74 28 78 29  ectExprHeight(x)
2c950 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c   0.  #define sql
2c960 69 74 65 33 45 78 70 72 43 68 65 63 6b 48 65 69  ite3ExprCheckHei
2c970 67 68 74 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a  ght(x,y).#endif.
2c980 0a 75 33 32 20 73 71 6c 69 74 65 33 47 65 74 34  .u32 sqlite3Get4
2c990 62 79 74 65 28 63 6f 6e 73 74 20 75 38 2a 29 3b  byte(const u8*);
2c9a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 75 74  .void sqlite3Put
2c9b0 34 62 79 74 65 28 75 38 2a 2c 20 75 33 32 29 3b  4byte(u8*, u32);
2c9c0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
2c9d0 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f  ENABLE_UNLOCK_NO
2c9e0 54 49 46 59 0a 20 20 76 6f 69 64 20 73 71 6c 69  TIFY.  void sqli
2c9f0 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f  te3ConnectionBlo
2ca00 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 2c 20  cked(sqlite3 *, 
2ca10 73 71 6c 69 74 65 33 20 2a 29 3b 0a 20 20 76 6f  sqlite3 *);.  vo
2ca20 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  id sqlite3Connec
2ca30 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 73 71 6c  tionUnlocked(sql
2ca40 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 76 6f 69  ite3 *db);.  voi
2ca50 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  d sqlite3Connect
2ca60 69 6f 6e 43 6c 6f 73 65 64 28 73 71 6c 69 74 65  ionClosed(sqlite
2ca70 33 20 2a 64 62 29 3b 0a 23 65 6c 73 65 0a 20 20  3 *db);.#else.  
2ca80 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43  #define sqlite3C
2ca90 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64  onnectionBlocked
2caa0 28 78 2c 79 29 0a 20 20 23 64 65 66 69 6e 65 20  (x,y).  #define 
2cab0 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
2cac0 6e 55 6e 6c 6f 63 6b 65 64 28 78 29 0a 20 20 23  nUnlocked(x).  #
2cad0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
2cae0 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 78  nnectionClosed(x
2caf0 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ).#endif..#ifdef
2cb00 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
2cb10 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73  void sqlite3Pars
2cb20 65 72 54 72 61 63 65 28 46 49 4c 45 2a 2c 20 63  erTrace(FILE*, c
2cb30 68 61 72 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  har *);.#endif..
2cb40 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c  /*.** If the SQL
2cb50 49 54 45 5f 45 4e 41 42 4c 45 20 49 4f 54 52 41  ITE_ENABLE IOTRA
2cb60 43 45 20 65 78 69 73 74 73 20 74 68 65 6e 20 74  CE exists then t
2cb70 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  he global variab
2cb80 6c 65 0a 2a 2a 20 73 71 6c 69 74 65 33 49 6f 54  le.** sqlite3IoT
2cb90 72 61 63 65 20 69 73 20 61 20 70 6f 69 6e 74 65  race is a pointe
2cba0 72 20 74 6f 20 61 20 70 72 69 6e 74 66 2d 6c 69  r to a printf-li
2cbb0 6b 65 20 72 6f 75 74 69 6e 65 20 75 73 65 64 20  ke routine used 
2cbc0 74 6f 0a 2a 2a 20 70 72 69 6e 74 20 49 2f 4f 20  to.** print I/O 
2cbd0 74 72 61 63 69 6e 67 20 6d 65 73 73 61 67 65 73  tracing messages
2cbe0 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
2cbf0 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43  TE_ENABLE_IOTRAC
2cc00 45 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41  E.# define IOTRA
2cc10 43 45 28 41 29 20 20 69 66 28 20 73 71 6c 69 74  CE(A)  if( sqlit
2cc20 65 33 49 6f 54 72 61 63 65 20 29 7b 20 73 71 6c  e3IoTrace ){ sql
2cc30 69 74 65 33 49 6f 54 72 61 63 65 20 41 3b 20 7d  ite3IoTrace A; }
2cc40 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56  .  void sqlite3V
2cc50 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 56 64  dbeIOTraceSql(Vd
2cc60 62 65 2a 29 3b 0a 53 51 4c 49 54 45 5f 41 50 49  be*);.SQLITE_API
2cc70 20 53 51 4c 49 54 45 5f 45 58 54 45 52 4e 20 76   SQLITE_EXTERN v
2cc80 6f 69 64 20 28 53 51 4c 49 54 45 5f 43 44 45 43  oid (SQLITE_CDEC
2cc90 4c 20 2a 73 71 6c 69 74 65 33 49 6f 54 72 61 63  L *sqlite3IoTrac
2cca0 65 29 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e  e)(const char*,.
2ccb0 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  ..);.#else.# def
2ccc0 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29 0a 23  ine IOTRACE(A).#
2ccd0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2cce0 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 58 29  dbeIOTraceSql(X)
2ccf0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
2cd00 68 65 73 65 20 72 6f 75 74 69 6e 65 73 20 61 72  hese routines ar
2cd10 65 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20  e available for 
2cd20 74 68 65 20 6d 65 6d 32 2e 63 20 64 65 62 75 67  the mem2.c debug
2cd30 67 69 6e 67 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  ging memory allo
2cd40 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20  cator.** only.  
2cd50 54 68 65 79 20 61 72 65 20 75 73 65 64 20 74 6f  They are used to
2cd60 20 76 65 72 69 66 79 20 74 68 61 74 20 64 69 66   verify that dif
2cd70 66 65 72 65 6e 74 20 22 74 79 70 65 73 22 20 6f  ferent "types" o
2cd80 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f  f memory.** allo
2cd90 63 61 74 69 6f 6e 73 20 61 72 65 20 70 72 6f 70  cations are prop
2cda0 65 72 6c 79 20 74 72 61 63 6b 65 64 20 62 79 20  erly tracked by 
2cdb0 74 68 65 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a  the system..**.*
2cdc0 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  * sqlite3Memdebu
2cdd0 67 53 65 74 54 79 70 65 28 29 20 73 65 74 73 20  gSetType() sets 
2cde0 74 68 65 20 22 74 79 70 65 22 20 6f 66 20 61 6e  the "type" of an
2cdf0 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f 20 6f   allocation to o
2ce00 6e 65 20 6f 66 0a 2a 2a 20 74 68 65 20 4d 45 4d  ne of.** the MEM
2ce10 54 59 50 45 5f 2a 20 6d 61 63 72 6f 73 20 64 65  TYPE_* macros de
2ce20 66 69 6e 65 64 20 62 65 6c 6f 77 2e 20 20 54 68  fined below.  Th
2ce30 65 20 74 79 70 65 20 6d 75 73 74 20 62 65 20 61  e type must be a
2ce40 20 62 69 74 6d 61 73 6b 20 77 69 74 68 0a 2a 2a   bitmask with.**
2ce50 20 61 20 73 69 6e 67 6c 65 20 62 69 74 20 73 65   a single bit se
2ce60 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33  t..**.** sqlite3
2ce70 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28  MemdebugHasType(
2ce80 29 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69  ) returns true i
2ce90 66 20 61 6e 79 20 6f 66 20 74 68 65 20 62 69 74  f any of the bit
2cea0 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a  s in its second.
2ceb0 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63  ** argument matc
2cec0 68 20 74 68 65 20 74 79 70 65 20 73 65 74 20 62  h the type set b
2ced0 79 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 73  y the previous s
2cee0 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65  qlite3MemdebugSe
2cef0 74 54 79 70 65 28 29 2e 0a 2a 2a 20 73 71 6c 69  tType()..** sqli
2cf00 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79  te3MemdebugHasTy
2cf10 70 65 28 29 20 69 73 20 69 6e 74 65 6e 64 65 64  pe() is intended
2cf20 20 66 6f 72 20 75 73 65 20 69 6e 73 69 64 65 20   for use inside 
2cf30 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
2cf40 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74  nts..**.** sqlit
2cf50 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65  e3MemdebugNoType
2cf60 28 29 20 72 65 74 75 72 6e 73 20 74 72 75 65 20  () returns true 
2cf70 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 62  if none of the b
2cf80 69 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e  its in its secon
2cf90 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61  d.** argument ma
2cfa0 74 63 68 20 74 68 65 20 74 79 70 65 20 73 65 74  tch the type set
2cfb0 20 62 79 20 74 68 65 20 70 72 65 76 69 6f 75 73   by the previous
2cfc0 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
2cfd0 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a  SetType()..**.**
2cfe0 20 50 65 72 68 61 70 73 20 74 68 65 20 6d 6f 73   Perhaps the mos
2cff0 74 20 69 6d 70 6f 72 74 61 6e 74 20 70 6f 69 6e  t important poin
2d000 74 20 69 73 20 74 68 65 20 64 69 66 66 65 72 65  t is the differe
2d010 6e 63 65 20 62 65 74 77 65 65 6e 20 4d 45 4d 54  nce between MEMT
2d020 59 50 45 5f 48 45 41 50 0a 2a 2a 20 61 6e 64 20  YPE_HEAP.** and 
2d030 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44  MEMTYPE_LOOKASID
2d040 45 2e 20 20 49 66 20 61 6e 20 61 6c 6c 6f 63 61  E.  If an alloca
2d050 74 69 6f 6e 20 69 73 20 4d 45 4d 54 59 50 45 5f  tion is MEMTYPE_
2d060 4c 4f 4f 4b 41 53 49 44 45 2c 20 74 68 61 74 20  LOOKASIDE, that 
2d070 6d 65 61 6e 73 0a 2a 2a 20 69 74 20 6d 69 67 68  means.** it migh
2d080 74 20 68 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f  t have been allo
2d090 63 61 74 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69  cated by lookasi
2d0a0 64 65 2c 20 65 78 63 65 70 74 20 74 68 65 20 61  de, except the a
2d0b0 6c 6c 6f 63 61 74 69 6f 6e 20 77 61 73 0a 2a 2a  llocation was.**
2d0c0 20 74 6f 6f 20 6c 61 72 67 65 20 6f 72 20 6c 6f   too large or lo
2d0d0 6f 6b 61 73 69 64 65 20 77 61 73 20 61 6c 72 65  okaside was alre
2d0e0 61 64 79 20 66 75 6c 6c 2e 20 20 49 74 20 69 73  ady full.  It is
2d0f0 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 76 65   important to ve
2d100 72 69 66 79 0a 2a 2a 20 74 68 61 74 20 61 6c 6c  rify.** that all
2d110 6f 63 61 74 69 6f 6e 73 20 74 68 61 74 20 6d 69  ocations that mi
2d120 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 73 61  ght have been sa
2d130 74 69 73 66 69 65 64 20 62 79 20 6c 6f 6f 6b 61  tisfied by looka
2d140 73 69 64 65 20 61 72 65 20 6e 6f 74 0a 2a 2a 20  side are not.** 
2d150 70 61 73 73 65 64 20 62 61 63 6b 20 74 6f 20 6e  passed back to n
2d160 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65  on-lookaside fre
2d170 65 28 29 20 72 6f 75 74 69 6e 65 73 2e 20 20 41  e() routines.  A
2d180 73 73 65 72 74 73 20 73 75 63 68 20 61 73 20 74  sserts such as t
2d190 68 65 0a 2a 2a 20 65 78 61 6d 70 6c 65 20 61 62  he.** example ab
2d1a0 6f 76 65 20 61 72 65 20 70 6c 61 63 65 64 20 6f  ove are placed o
2d1b0 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73  n the non-lookas
2d1c0 69 64 65 20 66 72 65 65 28 29 20 72 6f 75 74 69  ide free() routi
2d1d0 6e 65 73 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a  nes to verify.**
2d1e0 20 74 68 69 73 20 63 6f 6e 73 74 72 61 69 6e 74   this constraint
2d1f0 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74  ..**.** All of t
2d200 68 69 73 20 69 73 20 6e 6f 2d 6f 70 20 66 6f 72  his is no-op for
2d210 20 61 20 70 72 6f 64 75 63 74 69 6f 6e 20 62 75   a production bu
2d220 69 6c 64 2e 20 20 49 74 20 6f 6e 6c 79 20 63 6f  ild.  It only co
2d230 6d 65 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79  mes into.** play
2d240 20 77 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45   when the SQLITE
2d250 5f 4d 45 4d 44 45 42 55 47 20 63 6f 6d 70 69 6c  _MEMDEBUG compil
2d260 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73  e-time option is
2d270 20 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66   used..*/.#ifdef
2d280 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47   SQLITE_MEMDEBUG
2d290 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  .  void sqlite3M
2d2a0 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 76  emdebugSetType(v
2d2b0 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20  oid*,u8);.  int 
2d2c0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48  sqlite3MemdebugH
2d2d0 61 73 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29  asType(void*,u8)
2d2e0 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
2d2f0 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 76 6f  emdebugNoType(vo
2d300 69 64 2a 2c 75 38 29 3b 0a 23 65 6c 73 65 0a 23  id*,u8);.#else.#
2d310 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d   define sqlite3M
2d320 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 58  emdebugSetType(X
2d330 2c 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f  ,Y)  /* no-op */
2d340 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2d350 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
2d360 28 58 2c 59 29 20 20 31 0a 23 20 64 65 66 69 6e  (X,Y)  1.# defin
2d370 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  e sqlite3Memdebu
2d380 67 4e 6f 54 79 70 65 28 58 2c 59 29 20 20 20 31  gNoType(X,Y)   1
2d390 0a 23 65 6e 64 69 66 0a 23 64 65 66 69 6e 65 20  .#endif.#define 
2d3a0 4d 45 4d 54 59 50 45 5f 48 45 41 50 20 20 20 20  MEMTYPE_HEAP    
2d3b0 20 20 20 30 78 30 31 20 20 2f 2a 20 47 65 6e 65     0x01  /* Gene
2d3c0 72 61 6c 20 68 65 61 70 20 61 6c 6c 6f 63 61 74  ral heap allocat
2d3d0 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
2d3e0 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44  MEMTYPE_LOOKASID
2d3f0 45 20 20 30 78 30 32 20 20 2f 2a 20 48 65 61 70  E  0x02  /* Heap
2d400 20 74 68 61 74 20 6d 69 67 68 74 20 68 61 76 65   that might have
2d410 20 62 65 65 6e 20 6c 6f 6f 6b 61 73 69 64 65 20   been lookaside 
2d420 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59  */.#define MEMTY
2d430 50 45 5f 53 43 52 41 54 43 48 20 20 20 20 30 78  PE_SCRATCH    0x
2d440 30 34 20 20 2f 2a 20 53 63 72 61 74 63 68 20 61  04  /* Scratch a
2d450 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64  llocations */.#d
2d460 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 50 43  efine MEMTYPE_PC
2d470 41 43 48 45 20 20 20 20 20 30 78 30 38 20 20 2f  ACHE     0x08  /
2d480 2a 20 50 61 67 65 20 63 61 63 68 65 20 61 6c 6c  * Page cache all
2d490 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a  ocations */../*.
2d4a0 2a 2a 20 54 68 72 65 61 64 69 6e 67 20 69 6e 74  ** Threading int
2d4b0 65 72 66 61 63 65 0a 2a 2f 0a 23 69 66 20 53 51  erface.*/.#if SQ
2d4c0 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f  LITE_MAX_WORKER_
2d4d0 54 48 52 45 41 44 53 3e 30 0a 69 6e 74 20 73 71  THREADS>0.int sq
2d4e0 6c 69 74 65 33 54 68 72 65 61 64 43 72 65 61 74  lite3ThreadCreat
2d4f0 65 28 53 51 4c 69 74 65 54 68 72 65 61 64 2a 2a  e(SQLiteThread**
2d500 2c 76 6f 69 64 2a 28 2a 29 28 76 6f 69 64 2a 29  ,void*(*)(void*)
2d510 2c 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c  ,void*);.int sql
2d520 69 74 65 33 54 68 72 65 61 64 4a 6f 69 6e 28 53  ite3ThreadJoin(S
2d530 51 4c 69 74 65 54 68 72 65 61 64 2a 2c 20 76 6f  QLiteThread*, vo
2d540 69 64 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  id**);.#endif..#
2d550 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
2d560 45 5f 45 4e 41 42 4c 45 5f 44 42 53 54 41 54 5f  E_ENABLE_DBSTAT_
2d570 56 54 41 42 29 20 7c 7c 20 64 65 66 69 6e 65 64  VTAB) || defined
2d580 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 69 6e  (SQLITE_TEST).in
2d590 74 20 73 71 6c 69 74 65 33 44 62 73 74 61 74 52  t sqlite3DbstatR
2d5a0 65 67 69 73 74 65 72 28 73 71 6c 69 74 65 33 2a  egister(sqlite3*
2d5b0 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73  );.#endif..int s
2d5c0 71 6c 69 74 65 33 45 78 70 72 56 65 63 74 6f 72  qlite3ExprVector
2d5d0 53 69 7a 65 28 45 78 70 72 20 2a 70 45 78 70 72  Size(Expr *pExpr
2d5e0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2d5f0 70 72 49 73 56 65 63 74 6f 72 28 45 78 70 72 20  prIsVector(Expr 
2d600 2a 70 45 78 70 72 29 3b 0a 45 78 70 72 20 2a 73  *pExpr);.Expr *s
2d610 71 6c 69 74 65 33 56 65 63 74 6f 72 46 69 65 6c  qlite3VectorFiel
2d620 64 53 75 62 65 78 70 72 28 45 78 70 72 2a 2c 20  dSubexpr(Expr*, 
2d630 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  int);.Expr *sqli
2d640 74 65 33 45 78 70 72 46 6f 72 56 65 63 74 6f 72  te3ExprForVector
2d650 46 69 65 6c 64 28 50 61 72 73 65 2a 2c 45 78 70  Field(Parse*,Exp
2d660 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  r*,int);.void sq
2d670 6c 69 74 65 33 56 65 63 74 6f 72 45 72 72 6f 72  lite3VectorError
2d680 4d 73 67 28 50 61 72 73 65 2a 2c 20 45 78 70 72  Msg(Parse*, Expr
2d690 2a 29 3b 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53  *);..#endif /* S
2d6a0 51 4c 49 54 45 49 4e 54 5f 48 20 2a 2f 0a        QLITEINT_H */.