/ Hex Artifact Content
Login

Artifact 881e00940c3b48118f104067c28aa80259addc8fe47bd591e04463d26ee40cf6:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 53 51 4c 49 54 45 49 4e 54 5f 48 0a 23  ef SQLITEINT_H.#
01c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 49 4e 54  define SQLITEINT
01d0: 5f 48 0a 0a 2f 2a 20 53 70 65 63 69 61 6c 20 43  _H../* Special C
01e0: 6f 6d 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 53  omments:.**.** S
01f0: 6f 6d 65 20 63 6f 6d 6d 65 6e 74 73 20 68 61 76  ome comments hav
0200: 65 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  e special meanin
0210: 67 20 74 6f 20 74 68 65 20 74 6f 6f 6c 73 20 74  g to the tools t
0220: 68 61 74 20 6d 65 61 73 75 72 65 20 74 65 73 74  hat measure test
0230: 0a 2a 2a 20 63 6f 76 65 72 61 67 65 3a 0a 2a 2a  .** coverage:.**
0240: 0a 2a 2a 20 20 20 20 4e 4f 5f 54 45 53 54 20 20  .**    NO_TEST  
0250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0260: 20 20 20 2d 20 54 68 65 20 62 72 61 6e 63 68 65     - The branche
0270: 73 20 6f 6e 20 74 68 69 73 20 6c 69 6e 65 20 61  s on this line a
0280: 72 65 20 6e 6f 74 0a 2a 2a 20 20 20 20 20 20 20  re not.**       
0290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02a0: 20 20 20 20 20 20 20 20 20 20 20 6d 65 61 73 75             measu
02b0: 72 65 64 20 62 79 20 62 72 61 6e 63 68 20 63 6f  red by branch co
02c0: 76 65 72 61 67 65 2e 20 20 54 68 69 73 20 69 73  verage.  This is
02d0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
02e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02f0: 20 20 20 20 20 75 73 65 64 20 6f 6e 20 6c 69 6e       used on lin
0300: 65 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  es of code that 
0310: 61 63 74 75 61 6c 6c 79 0a 2a 2a 20 20 20 20 20  actually.**     
0320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0330: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6d 70               imp
0340: 6c 65 6d 65 6e 74 20 70 61 72 74 73 20 6f 66 20  lement parts of 
0350: 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67  coverage testing
0360: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d  ..**.**    OPTIM
0370: 49 5a 41 54 49 4f 4e 2d 49 46 2d 54 52 55 45 20  IZATION-IF-TRUE 
0380: 20 20 20 20 20 20 20 2d 20 54 68 69 73 20 62 72         - This br
0390: 61 6e 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20  anch is allowed 
03a0: 74 6f 20 61 6c 77 61 79 20 62 65 20 66 61 6c 73  to alway be fals
03b0: 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
03c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03d0: 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 63 6f        and the co
03e0: 72 72 65 63 74 20 61 6e 73 77 65 72 20 69 73 20  rrect answer is 
03f0: 73 74 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a  still obtained,.
0400: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
0410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0420: 20 20 20 20 74 68 6f 75 67 68 20 70 65 72 68 61      though perha
0430: 70 73 20 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a  ps more slowly..
0440: 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d 49 5a  **.**    OPTIMIZ
0450: 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 20 20  ATION-IF-FALSE  
0460: 20 20 20 20 20 2d 20 54 68 69 73 20 62 72 61 6e       - This bran
0470: 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f  ch is allowed to
0480: 20 61 6c 77 61 79 20 62 65 20 74 72 75 65 0a 2a   alway be true.*
0490: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
04a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04b0: 20 20 20 61 6e 64 20 74 68 65 20 63 6f 72 72 65     and the corre
04c0: 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74 69  ct answer is sti
04d0: 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a 2a 2a 20  ll obtained,.** 
04e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0500: 20 74 68 6f 75 67 68 20 70 65 72 68 61 70 73 20   though perhaps 
0510: 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a 2a 2a 0a  more slowly..**.
0520: 2a 2a 20 20 20 20 50 52 45 56 45 4e 54 53 2d 48  **    PREVENTS-H
0530: 41 52 4d 4c 45 53 53 2d 4f 56 45 52 52 45 41 44  ARMLESS-OVERREAD
0540: 20 20 2d 20 54 68 69 73 20 62 72 61 6e 63 68 20    - This branch 
0550: 70 72 65 76 65 6e 74 73 20 61 20 62 75 66 66 65  prevents a buffe
0560: 72 20 6f 76 65 72 72 65 61 64 0a 2a 2a 20 20 20  r overread.**   
0570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
0590: 68 61 74 20 77 6f 75 6c 64 20 62 65 20 68 61 72  hat would be har
05a0: 6d 6c 65 73 73 20 61 6e 64 20 75 6e 64 65 74 65  mless and undete
05b0: 63 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20  ctable.**       
05c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
05d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 69 74             if it
05e0: 20 64 69 64 20 6f 63 63 75 72 2e 20 20 0a 2a 2a   did occur.  .**
05f0: 0a 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65 73  .** In all cases
0600: 2c 20 74 68 65 20 73 70 65 63 69 61 6c 20 63 6f  , the special co
0610: 6d 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 65 6e  mment must be en
0620: 63 6c 6f 73 65 64 20 69 6e 20 74 68 65 20 75 73  closed in the us
0630: 75 61 6c 0a 2a 2a 20 73 6c 61 73 68 2d 61 73 74  ual.** slash-ast
0640: 65 72 69 73 6b 2e 2e 2e 61 73 74 65 72 69 73 6b  erisk...asterisk
0650: 2d 73 6c 61 73 68 20 63 6f 6d 6d 65 6e 74 20 6d  -slash comment m
0660: 61 72 6b 73 2c 20 77 69 74 68 20 6e 6f 20 73 70  arks, with no sp
0670: 61 63 65 73 20 62 65 74 77 65 65 6e 20 74 68 65  aces between the
0680: 20 0a 2a 2a 20 61 73 74 65 72 69 73 6b 73 20 61   .** asterisks a
0690: 6e 64 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74  nd the comment t
06a0: 65 78 74 2e 0a 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d  ext..*/../*.** M
06b0: 61 6b 65 20 73 75 72 65 20 74 68 65 20 54 63 6c  ake sure the Tcl
06c0: 20 63 61 6c 6c 69 6e 67 20 63 6f 6e 76 65 6e 74   calling convent
06d0: 69 6f 6e 20 6d 61 63 72 6f 20 69 73 20 64 65 66  ion macro is def
06e0: 69 6e 65 64 2e 20 20 54 68 69 73 20 6d 61 63 72  ined.  This macr
06f0: 6f 20 69 73 0a 2a 2a 20 6f 6e 6c 79 20 75 73 65  o is.** only use
0700: 64 20 62 79 20 74 65 73 74 20 63 6f 64 65 20 61  d by test code a
0710: 6e 64 20 54 63 6c 20 69 6e 74 65 67 72 61 74 69  nd Tcl integrati
0720: 6f 6e 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 6e  on code..*/.#ifn
0730: 64 65 66 20 53 51 4c 49 54 45 5f 54 43 4c 41 50  def SQLITE_TCLAP
0740: 49 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49  I.#  define SQLI
0750: 54 45 5f 54 43 4c 41 50 49 0a 23 65 6e 64 69 66  TE_TCLAPI.#endif
0760: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20 73 75 72  ../*.** Make sur
0770: 65 20 74 68 61 74 20 72 61 6e 64 5f 73 28 29 20  e that rand_s() 
0780: 69 73 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e 20  is available on 
0790: 57 69 6e 64 6f 77 73 20 73 79 73 74 65 6d 73 20  Windows systems 
07a0: 77 69 74 68 20 4d 53 56 43 20 32 30 30 35 0a 2a  with MSVC 2005.*
07b0: 2a 20 6f 72 20 68 69 67 68 65 72 2e 0a 2a 2f 0a  * or higher..*/.
07c0: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 4d 53 43  #if defined(_MSC
07d0: 5f 56 45 52 29 20 26 26 20 5f 4d 53 43 5f 56 45  _VER) && _MSC_VE
07e0: 52 3e 3d 31 34 30 30 0a 23 20 20 64 65 66 69 6e  R>=1400.#  defin
07f0: 65 20 5f 43 52 54 5f 52 41 4e 44 5f 53 0a 23 65  e _CRT_RAND_S.#e
0800: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  ndif../*.** Incl
0810: 75 64 65 20 74 68 65 20 68 65 61 64 65 72 20 66  ude the header f
0820: 69 6c 65 20 75 73 65 64 20 74 6f 20 63 75 73 74  ile used to cust
0830: 6f 6d 69 7a 65 20 74 68 65 20 63 6f 6d 70 69 6c  omize the compil
0840: 65 72 20 6f 70 74 69 6f 6e 73 20 66 6f 72 20 4d  er options for M
0850: 53 56 43 2e 0a 2a 2a 20 54 68 69 73 20 73 68 6f  SVC..** This sho
0860: 75 6c 64 20 62 65 20 64 6f 6e 65 20 66 69 72 73  uld be done firs
0870: 74 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e  t so that it can
0880: 20 73 75 63 63 65 73 73 66 75 6c 6c 79 20 70 72   successfully pr
0890: 65 76 65 6e 74 20 73 70 75 72 69 6f 75 73 0a 2a  event spurious.*
08a0: 2a 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69  * compiler warni
08b0: 6e 67 73 20 64 75 65 20 74 6f 20 73 75 62 73 65  ngs due to subse
08c0: 71 75 65 6e 74 20 63 6f 6e 74 65 6e 74 20 69 6e  quent content in
08d0: 20 74 68 69 73 20 66 69 6c 65 20 61 6e 64 20 6f   this file and o
08e0: 74 68 65 72 20 66 69 6c 65 73 0a 2a 2a 20 74 68  ther files.** th
08f0: 61 74 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20  at are included 
0900: 62 79 20 74 68 69 73 20 66 69 6c 65 2e 0a 2a 2f  by this file..*/
0910: 0a 23 69 6e 63 6c 75 64 65 20 22 6d 73 76 63 2e  .#include "msvc.
0920: 68 22 0a 0a 2f 2a 0a 2a 2a 20 53 70 65 63 69 61  h"../*.** Specia
0930: 6c 20 73 65 74 75 70 20 66 6f 72 20 56 78 57 6f  l setup for VxWo
0940: 72 6b 73 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20  rks.*/.#include 
0950: 22 76 78 77 6f 72 6b 73 2e 68 22 0a 0a 2f 2a 0a  "vxworks.h"../*.
0960: 2a 2a 20 54 68 65 73 65 20 23 64 65 66 69 6e 65  ** These #define
0970: 73 20 73 68 6f 75 6c 64 20 65 6e 61 62 6c 65 20  s should enable 
0980: 3e 32 47 42 20 66 69 6c 65 20 73 75 70 70 6f 72  >2GB file suppor
0990: 74 20 6f 6e 20 50 4f 53 49 58 20 69 66 20 74 68  t on POSIX if th
09a0: 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20  e.** underlying 
09b0: 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d  operating system
09c0: 20 73 75 70 70 6f 72 74 73 20 69 74 2e 20 20 49   supports it.  I
09d0: 66 20 74 68 65 20 4f 53 20 6c 61 63 6b 73 0a 2a  f the OS lacks.*
09e0: 2a 20 6c 61 72 67 65 20 66 69 6c 65 20 73 75 70  * large file sup
09f0: 70 6f 72 74 2c 20 6f 72 20 69 66 20 74 68 65 20  port, or if the 
0a00: 4f 53 20 69 73 20 77 69 6e 64 6f 77 73 2c 20 74  OS is windows, t
0a10: 68 65 73 65 20 73 68 6f 75 6c 64 20 62 65 20 6e  hese should be n
0a20: 6f 2d 6f 70 73 2e 0a 2a 2a 0a 2a 2a 20 54 69 63  o-ops..**.** Tic
0a30: 6b 65 74 20 23 32 37 33 39 3a 20 20 54 68 65 20  ket #2739:  The 
0a40: 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55 52 43  _LARGEFILE_SOURC
0a50: 45 20 6d 61 63 72 6f 20 6d 75 73 74 20 61 70 70  E macro must app
0a60: 65 61 72 20 62 65 66 6f 72 65 20 61 6e 79 0a 2a  ear before any.*
0a70: 2a 20 73 79 73 74 65 6d 20 23 69 6e 63 6c 75 64  * system #includ
0a80: 65 73 2e 20 20 48 65 6e 63 65 2c 20 74 68 69 73  es.  Hence, this
0a90: 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 20 6d   block of code m
0aa0: 75 73 74 20 62 65 20 74 68 65 20 76 65 72 79 20  ust be the very 
0ab0: 66 69 72 73 74 0a 2a 2a 20 63 6f 64 65 20 69 6e  first.** code in
0ac0: 20 61 6c 6c 20 73 6f 75 72 63 65 20 66 69 6c 65   all source file
0ad0: 73 2e 0a 2a 2a 0a 2a 2a 20 4c 61 72 67 65 20 66  s..**.** Large f
0ae0: 69 6c 65 20 73 75 70 70 6f 72 74 20 63 61 6e 20  ile support can 
0af0: 62 65 20 64 69 73 61 62 6c 65 64 20 75 73 69 6e  be disabled usin
0b00: 67 20 74 68 65 20 2d 44 53 51 4c 49 54 45 5f 44  g the -DSQLITE_D
0b10: 49 53 41 42 4c 45 5f 4c 46 53 20 73 77 69 74 63  ISABLE_LFS switc
0b20: 68 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f 6d 70  h.** on the comp
0b30: 69 6c 65 72 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e  iler command lin
0b40: 65 2e 20 20 54 68 69 73 20 69 73 20 6e 65 63 65  e.  This is nece
0b50: 73 73 61 72 79 20 69 66 20 79 6f 75 20 61 72 65  ssary if you are
0b60: 20 63 6f 6d 70 69 6c 69 6e 67 0a 2a 2a 20 6f 6e   compiling.** on
0b70: 20 61 20 72 65 63 65 6e 74 20 6d 61 63 68 69 6e   a recent machin
0b80: 65 20 28 65 78 3a 20 52 65 64 20 48 61 74 20 37  e (ex: Red Hat 7
0b90: 2e 32 29 20 62 75 74 20 79 6f 75 20 77 61 6e 74  .2) but you want
0ba0: 20 79 6f 75 72 20 63 6f 64 65 20 74 6f 20 77 6f   your code to wo
0bb0: 72 6b 0a 2a 2a 20 6f 6e 20 61 6e 20 6f 6c 64 65  rk.** on an olde
0bc0: 72 20 6d 61 63 68 69 6e 65 20 28 65 78 3a 20 52  r machine (ex: R
0bd0: 65 64 20 48 61 74 20 36 2e 30 29 2e 20 20 49 66  ed Hat 6.0).  If
0be0: 20 79 6f 75 20 63 6f 6d 70 69 6c 65 20 6f 6e 20   you compile on 
0bf0: 52 65 64 20 48 61 74 20 37 2e 32 0a 2a 2a 20 77  Red Hat 7.2.** w
0c00: 69 74 68 6f 75 74 20 74 68 69 73 20 6f 70 74 69  ithout this opti
0c10: 6f 6e 2c 20 4c 46 53 20 69 73 20 65 6e 61 62 6c  on, LFS is enabl
0c20: 65 2e 20 20 42 75 74 20 4c 46 53 20 64 6f 65 73  e.  But LFS does
0c30: 20 6e 6f 74 20 65 78 69 73 74 20 69 6e 20 74 68   not exist in th
0c40: 65 20 6b 65 72 6e 65 6c 0a 2a 2a 20 69 6e 20 52  e kernel.** in R
0c50: 65 64 20 48 61 74 20 36 2e 30 2c 20 73 6f 20 74  ed Hat 6.0, so t
0c60: 68 65 20 63 6f 64 65 20 77 6f 6e 27 74 20 77 6f  he code won't wo
0c70: 72 6b 2e 20 20 48 65 6e 63 65 2c 20 66 6f 72 20  rk.  Hence, for 
0c80: 6d 61 78 69 6d 75 6d 20 62 69 6e 61 72 79 0a 2a  maximum binary.*
0c90: 2a 20 70 6f 72 74 61 62 69 6c 69 74 79 20 79 6f  * portability yo
0ca0: 75 20 73 68 6f 75 6c 64 20 6f 6d 69 74 20 4c 46  u should omit LF
0cb0: 53 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 72 65  S..**.** The pre
0cc0: 76 69 6f 75 73 20 70 61 72 61 67 72 61 70 68 20  vious paragraph 
0cd0: 77 61 73 20 77 72 69 74 74 65 6e 20 69 6e 20 32  was written in 2
0ce0: 30 30 35 2e 20 20 28 54 68 69 73 20 70 61 72 61  005.  (This para
0cf0: 67 72 61 70 68 20 69 73 20 77 72 69 74 74 65 6e  graph is written
0d00: 0a 2a 2a 20 6f 6e 20 32 30 30 38 2d 31 31 2d 32  .** on 2008-11-2
0d10: 38 2e 29 20 54 68 65 73 65 20 64 61 79 73 2c 20  8.) These days, 
0d20: 61 6c 6c 20 4c 69 6e 75 78 20 6b 65 72 6e 65 6c  all Linux kernel
0d30: 73 20 73 75 70 70 6f 72 74 20 6c 61 72 67 65 20  s support large 
0d40: 66 69 6c 65 73 2c 20 73 6f 0a 2a 2a 20 79 6f 75  files, so.** you
0d50: 20 73 68 6f 75 6c 64 20 70 72 6f 62 61 62 6c 79   should probably
0d60: 20 6c 65 61 76 65 20 4c 46 53 20 65 6e 61 62 6c   leave LFS enabl
0d70: 65 64 2e 20 20 42 75 74 20 73 6f 6d 65 20 65 6d  ed.  But some em
0d80: 62 65 64 64 65 64 20 70 6c 61 74 66 6f 72 6d 73  bedded platforms
0d90: 20 6d 69 67 68 74 0a 2a 2a 20 6c 61 63 6b 20 4c   might.** lack L
0da0: 46 53 20 69 6e 20 77 68 69 63 68 20 63 61 73 65  FS in which case
0db0: 20 74 68 65 20 53 51 4c 49 54 45 5f 44 49 53 41   the SQLITE_DISA
0dc0: 42 4c 45 5f 4c 46 53 20 6d 61 63 72 6f 20 6d 69  BLE_LFS macro mi
0dd0: 67 68 74 20 73 74 69 6c 6c 20 62 65 20 75 73 65  ght still be use
0de0: 66 75 6c 2e 0a 2a 2a 0a 2a 2a 20 53 69 6d 69 6c  ful..**.** Simil
0df0: 61 72 20 69 73 20 74 72 75 65 20 66 6f 72 20 4d  ar is true for M
0e00: 61 63 20 4f 53 20 58 2e 20 20 4c 46 53 20 69 73  ac OS X.  LFS is
0e10: 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74 65 64 20   only supported 
0e20: 6f 6e 20 4d 61 63 20 4f 53 20 58 20 39 20 61 6e  on Mac OS X 9 an
0e30: 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 23 69 66 6e  d later..*/.#ifn
0e40: 64 65 66 20 53 51 4c 49 54 45 5f 44 49 53 41 42  def SQLITE_DISAB
0e50: 4c 45 5f 4c 46 53 0a 23 20 64 65 66 69 6e 65 20  LE_LFS.# define 
0e60: 5f 4c 41 52 47 45 5f 46 49 4c 45 20 20 20 20 20  _LARGE_FILE     
0e70: 20 20 31 0a 23 20 69 66 6e 64 65 66 20 5f 46 49    1.# ifndef _FI
0e80: 4c 45 5f 4f 46 46 53 45 54 5f 42 49 54 53 0a 23  LE_OFFSET_BITS.#
0e90: 20 20 20 64 65 66 69 6e 65 20 5f 46 49 4c 45 5f     define _FILE_
0ea0: 4f 46 46 53 45 54 5f 42 49 54 53 20 36 34 0a 23  OFFSET_BITS 64.#
0eb0: 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20   endif.# define 
0ec0: 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55 52 43  _LARGEFILE_SOURC
0ed0: 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 54  E 1.#endif../* T
0ee0: 68 65 20 47 43 43 5f 56 45 52 53 49 4f 4e 20 61  he GCC_VERSION a
0ef0: 6e 64 20 4d 53 56 43 5f 56 45 52 53 49 4f 4e 20  nd MSVC_VERSION 
0f00: 6d 61 63 72 6f 73 20 61 72 65 20 75 73 65 64 20  macros are used 
0f10: 74 6f 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 61  to.** conditiona
0f20: 6c 6c 79 20 69 6e 63 6c 75 64 65 20 6f 70 74 69  lly include opti
0f30: 6d 69 7a 61 74 69 6f 6e 73 20 66 6f 72 20 65 61  mizations for ea
0f40: 63 68 20 6f 66 20 74 68 65 73 65 20 63 6f 6d 70  ch of these comp
0f50: 69 6c 65 72 73 2e 20 20 41 0a 2a 2a 20 76 61 6c  ilers.  A.** val
0f60: 75 65 20 6f 66 20 30 20 6d 65 61 6e 73 20 74 68  ue of 0 means th
0f70: 61 74 20 63 6f 6d 70 69 6c 65 72 20 69 73 20 6e  at compiler is n
0f80: 6f 74 20 62 65 69 6e 67 20 75 73 65 64 2e 20 20  ot being used.  
0f90: 54 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 44 49  The.** SQLITE_DI
0fa0: 53 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 20  SABLE_INTRINSIC 
0fb0: 6d 61 63 72 6f 20 6d 65 61 6e 73 20 64 6f 20 6e  macro means do n
0fc0: 6f 74 20 75 73 65 20 61 6e 79 20 63 6f 6d 70 69  ot use any compi
0fd0: 6c 65 72 2d 73 70 65 63 69 66 69 63 0a 2a 2a 20  ler-specific.** 
0fe0: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2c 20 61  optimizations, a
0ff0: 6e 64 20 68 65 6e 63 65 20 73 65 74 20 61 6c 6c  nd hence set all
1000: 20 63 6f 6d 70 69 6c 65 72 20 6d 61 63 72 6f 73   compiler macros
1010: 20 74 6f 20 30 0a 2a 2a 0a 2a 2a 20 54 68 65 72   to 0.**.** Ther
1020: 65 20 77 61 73 20 6f 6e 63 65 20 61 6c 73 6f 20  e was once also 
1030: 61 20 43 4c 41 4e 47 5f 56 45 52 53 49 4f 4e 20  a CLANG_VERSION 
1040: 6d 61 63 72 6f 2e 20 20 48 6f 77 65 76 65 72 2c  macro.  However,
1050: 20 77 65 20 6c 65 61 72 6e 20 74 68 61 74 20 74   we learn that t
1060: 68 65 0a 2a 2a 20 76 65 72 73 69 6f 6e 20 6e 75  he.** version nu
1070: 6d 62 65 72 73 20 69 6e 20 63 6c 61 6e 67 20 61  mbers in clang a
1080: 72 65 20 66 6f 72 20 22 6d 61 72 6b 65 74 69 6e  re for "marketin
1090: 67 22 20 6f 6e 6c 79 20 61 6e 64 20 61 72 65 20  g" only and are 
10a0: 69 6e 63 6f 6e 73 69 73 74 65 6e 74 0a 2a 2a 20  inconsistent.** 
10b0: 61 6e 64 20 75 6e 72 65 6c 69 61 62 6c 65 2e 20  and unreliable. 
10c0: 20 46 6f 72 74 75 6e 61 74 65 6c 79 2c 20 61 6c   Fortunately, al
10d0: 6c 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 63 6c  l versions of cl
10e0: 61 6e 67 20 61 6c 73 6f 20 72 65 63 6f 67 6e 69  ang also recogni
10f0: 7a 65 20 74 68 65 0a 2a 2a 20 67 63 63 20 76 65  ze the.** gcc ve
1100: 72 73 69 6f 6e 20 6e 75 6d 62 65 72 73 20 61 6e  rsion numbers an
1110: 64 20 68 61 76 65 20 72 65 61 73 6f 6e 61 62 6c  d have reasonabl
1120: 65 20 73 65 74 74 69 6e 67 73 20 66 6f 72 20 67  e settings for g
1130: 63 63 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65  cc version numbe
1140: 72 73 2c 0a 2a 2a 20 73 6f 20 74 68 65 20 47 43  rs,.** so the GC
1150: 43 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72 6f 20  C_VERSION macro 
1160: 77 69 6c 6c 20 62 65 20 73 65 74 20 74 6f 20 61  will be set to a
1170: 20 63 6f 72 72 65 63 74 20 6e 6f 6e 2d 7a 65 72   correct non-zer
1180: 6f 20 76 61 6c 75 65 20 65 76 65 6e 0a 2a 2a 20  o value even.** 
1190: 77 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 77  when compiling w
11a0: 69 74 68 20 63 6c 61 6e 67 2e 0a 2a 2f 0a 23 69  ith clang..*/.#i
11b0: 66 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43  f defined(__GNUC
11c0: 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  __) && !defined(
11d0: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 49  SQLITE_DISABLE_I
11e0: 4e 54 52 49 4e 53 49 43 29 20 26 26 20 21 64 65  NTRINSIC) && !de
11f0: 66 69 6e 65 64 28 5f 5f 49 43 43 29 0a 23 20 64  fined(__ICC).# d
1200: 65 66 69 6e 65 20 47 43 43 5f 56 45 52 53 49 4f  efine GCC_VERSIO
1210: 4e 20 28 5f 5f 47 4e 55 43 5f 5f 2a 31 30 30 30  N (__GNUC__*1000
1220: 30 30 30 2b 5f 5f 47 4e 55 43 5f 4d 49 4e 4f 52  000+__GNUC_MINOR
1230: 5f 5f 2a 31 30 30 30 2b 5f 5f 47 4e 55 43 5f 50  __*1000+__GNUC_P
1240: 41 54 43 48 4c 45 56 45 4c 5f 5f 29 0a 23 65 6c  ATCHLEVEL__).#el
1250: 73 65 0a 23 20 64 65 66 69 6e 65 20 47 43 43 5f  se.# define GCC_
1260: 56 45 52 53 49 4f 4e 20 30 0a 23 65 6e 64 69 66  VERSION 0.#endif
1270: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 4d 53  .#if defined(_MS
1280: 43 5f 56 45 52 29 20 26 26 20 21 64 65 66 69 6e  C_VER) && !defin
1290: 65 64 28 53 51 4c 49 54 45 5f 44 49 53 41 42 4c  ed(SQLITE_DISABL
12a0: 45 5f 49 4e 54 52 49 4e 53 49 43 29 0a 23 20 64  E_INTRINSIC).# d
12b0: 65 66 69 6e 65 20 4d 53 56 43 5f 56 45 52 53 49  efine MSVC_VERSI
12c0: 4f 4e 20 5f 4d 53 43 5f 56 45 52 0a 23 65 6c 73  ON _MSC_VER.#els
12d0: 65 0a 23 20 64 65 66 69 6e 65 20 4d 53 56 43 5f  e.# define MSVC_
12e0: 56 45 52 53 49 4f 4e 20 30 0a 23 65 6e 64 69 66  VERSION 0.#endif
12f0: 0a 0a 2f 2a 20 4e 65 65 64 65 64 20 66 6f 72 20  ../* Needed for 
1300: 76 61 72 69 6f 75 73 20 64 65 66 69 6e 69 74 69  various definiti
1310: 6f 6e 73 2e 2e 2e 20 2a 2f 0a 23 69 66 20 64 65  ons... */.#if de
1320: 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20  fined(__GNUC__) 
1330: 26 26 20 21 64 65 66 69 6e 65 64 28 5f 47 4e 55  && !defined(_GNU
1340: 5f 53 4f 55 52 43 45 29 0a 23 20 64 65 66 69 6e  _SOURCE).# defin
1350: 65 20 5f 47 4e 55 5f 53 4f 55 52 43 45 0a 23 65  e _GNU_SOURCE.#e
1360: 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65  ndif..#if define
1370: 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20 26  d(__OpenBSD__) &
1380: 26 20 21 64 65 66 69 6e 65 64 28 5f 42 53 44 5f  & !defined(_BSD_
1390: 53 4f 55 52 43 45 29 0a 23 20 64 65 66 69 6e 65  SOURCE).# define
13a0: 20 5f 42 53 44 5f 53 4f 55 52 43 45 0a 23 65 6e   _BSD_SOURCE.#en
13b0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d  dif../*.** For M
13c0: 69 6e 47 57 2c 20 63 68 65 63 6b 20 74 6f 20 73  inGW, check to s
13d0: 65 65 20 69 66 20 77 65 20 63 61 6e 20 69 6e 63  ee if we can inc
13e0: 6c 75 64 65 20 74 68 65 20 68 65 61 64 65 72 20  lude the header 
13f0: 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  file containing 
1400: 69 74 73 0a 2a 2a 20 76 65 72 73 69 6f 6e 20 69  its.** version i
1410: 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 61 6d 6f 6e  nformation, amon
1420: 67 20 6f 74 68 65 72 20 74 68 69 6e 67 73 2e 20  g other things. 
1430: 20 4e 6f 72 6d 61 6c 6c 79 2c 20 74 68 69 73 20   Normally, this 
1440: 69 6e 74 65 72 6e 61 6c 20 4d 69 6e 47 57 0a 2a  internal MinGW.*
1450: 2a 20 68 65 61 64 65 72 20 66 69 6c 65 20 77 6f  * header file wo
1460: 75 6c 64 20 5b 6f 6e 6c 79 5d 20 62 65 20 69 6e  uld [only] be in
1470: 63 6c 75 64 65 64 20 61 75 74 6f 6d 61 74 69 63  cluded automatic
1480: 61 6c 6c 79 20 62 79 20 6f 74 68 65 72 20 4d 69  ally by other Mi
1490: 6e 47 57 20 68 65 61 64 65 72 0a 2a 2a 20 66 69  nGW header.** fi
14a0: 6c 65 73 3b 20 68 6f 77 65 76 65 72 2c 20 74 68  les; however, th
14b0: 65 20 63 6f 6e 74 61 69 6e 65 64 20 76 65 72 73  e contained vers
14c0: 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ion information 
14d0: 69 73 20 6e 6f 77 20 72 65 71 75 69 72 65 64 20  is now required 
14e0: 62 79 20 74 68 69 73 0a 2a 2a 20 68 65 61 64 65  by this.** heade
14f0: 72 20 66 69 6c 65 20 74 6f 20 77 6f 72 6b 20 61  r file to work a
1500: 72 6f 75 6e 64 20 62 69 6e 61 72 79 20 63 6f 6d  round binary com
1510: 70 61 74 69 62 69 6c 69 74 79 20 69 73 73 75 65  patibility issue
1520: 73 20 28 73 65 65 20 62 65 6c 6f 77 29 20 61 6e  s (see below) an
1530: 64 0a 2a 2a 20 74 68 69 73 20 69 73 20 74 68 65  d.** this is the
1540: 20 6f 6e 6c 79 20 6b 6e 6f 77 6e 20 77 61 79 20   only known way 
1550: 74 6f 20 72 65 6c 69 61 62 6c 79 20 6f 62 74 61  to reliably obta
1560: 69 6e 20 69 74 2e 20 20 54 68 69 73 20 65 6e 74  in it.  This ent
1570: 69 72 65 20 23 69 66 20 62 6c 6f 63 6b 0a 2a 2a  ire #if block.**
1580: 20 77 6f 75 6c 64 20 62 65 20 63 6f 6d 70 6c 65   would be comple
1590: 74 65 6c 79 20 75 6e 6e 65 63 65 73 73 61 72 79  tely unnecessary
15a0: 20 69 66 20 74 68 65 72 65 20 77 61 73 20 61 6e   if there was an
15b0: 79 20 6f 74 68 65 72 20 77 61 79 20 6f 66 20 64  y other way of d
15c0: 65 74 65 63 74 69 6e 67 0a 2a 2a 20 4d 69 6e 47  etecting.** MinG
15d0: 57 20 76 69 61 20 74 68 65 69 72 20 70 72 65 70  W via their prep
15e0: 72 6f 63 65 73 73 6f 72 20 28 65 2e 67 2e 20 69  rocessor (e.g. i
15f0: 66 20 74 68 65 79 20 63 75 73 74 6f 6d 69 7a 65  f they customize
1600: 64 20 74 68 65 69 72 20 47 43 43 20 74 6f 20 64  d their GCC to d
1610: 65 66 69 6e 65 0a 2a 2a 20 73 6f 6d 65 20 4d 69  efine.** some Mi
1620: 6e 47 57 2d 73 70 65 63 69 66 69 63 20 6d 61 63  nGW-specific mac
1630: 72 6f 73 29 2e 20 20 57 68 65 6e 20 63 6f 6d 70  ros).  When comp
1640: 69 6c 69 6e 67 20 66 6f 72 20 4d 69 6e 47 57 2c  iling for MinGW,
1650: 20 65 69 74 68 65 72 20 74 68 65 0a 2a 2a 20 5f   either the.** _
1660: 48 41 56 45 5f 4d 49 4e 47 57 5f 48 20 6f 72 20  HAVE_MINGW_H or 
1670: 5f 48 41 56 45 5f 5f 4d 49 4e 47 57 5f 48 20 28  _HAVE__MINGW_H (
1680: 6e 6f 74 65 20 74 68 65 20 65 78 74 72 61 20 75  note the extra u
1690: 6e 64 65 72 73 63 6f 72 65 29 20 6d 61 63 72 6f  nderscore) macro
16a0: 20 6d 75 73 74 20 62 65 0a 2a 2a 20 64 65 66 69   must be.** defi
16b0: 6e 65 64 3b 20 6f 74 68 65 72 77 69 73 65 2c 20  ned; otherwise, 
16c0: 64 65 74 65 63 74 69 6f 6e 20 6f 66 20 63 6f 6e  detection of con
16d0: 64 69 74 69 6f 6e 73 20 73 70 65 63 69 66 69 63  ditions specific
16e0: 20 74 6f 20 4d 69 6e 47 57 20 77 69 6c 6c 20 62   to MinGW will b
16f0: 65 0a 2a 2a 20 64 69 73 61 62 6c 65 64 2e 0a 2a  e.** disabled..*
1700: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 48  /.#if defined(_H
1710: 41 56 45 5f 4d 49 4e 47 57 5f 48 29 0a 23 20 69  AVE_MINGW_H).# i
1720: 6e 63 6c 75 64 65 20 22 6d 69 6e 67 77 2e 68 22  nclude "mingw.h"
1730: 0a 23 65 6c 69 66 20 64 65 66 69 6e 65 64 28 5f  .#elif defined(_
1740: 48 41 56 45 5f 5f 4d 49 4e 47 57 5f 48 29 0a 23  HAVE__MINGW_H).#
1750: 20 69 6e 63 6c 75 64 65 20 22 5f 6d 69 6e 67 77   include "_mingw
1760: 2e 68 22 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  .h".#endif../*.*
1770: 2a 20 46 6f 72 20 4d 69 6e 47 57 20 76 65 72 73  * For MinGW vers
1780: 69 6f 6e 20 34 2e 78 20 28 61 6e 64 20 68 69 67  ion 4.x (and hig
1790: 68 65 72 29 2c 20 63 68 65 63 6b 20 74 6f 20 73  her), check to s
17a0: 65 65 20 69 66 20 74 68 65 20 5f 55 53 45 5f 33  ee if the _USE_3
17b0: 32 42 49 54 5f 54 49 4d 45 5f 54 0a 2a 2a 20 64  2BIT_TIME_T.** d
17c0: 65 66 69 6e 65 20 69 73 20 72 65 71 75 69 72 65  efine is require
17d0: 64 20 74 6f 20 6d 61 69 6e 74 61 69 6e 20 62 69  d to maintain bi
17e0: 6e 61 72 79 20 63 6f 6d 70 61 74 69 62 69 6c 69  nary compatibili
17f0: 74 79 20 77 69 74 68 20 74 68 65 20 4d 53 56 43  ty with the MSVC
1800: 20 72 75 6e 74 69 6d 65 0a 2a 2a 20 6c 69 62 72   runtime.** libr
1810: 61 72 79 20 69 6e 20 75 73 65 20 28 65 2e 67 2e  ary in use (e.g.
1820: 20 66 6f 72 20 57 69 6e 64 6f 77 73 20 58 50 29   for Windows XP)
1830: 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  ..*/.#if !define
1840: 64 28 5f 55 53 45 5f 33 32 42 49 54 5f 54 49 4d  d(_USE_32BIT_TIM
1850: 45 5f 54 29 20 26 26 20 21 64 65 66 69 6e 65 64  E_T) && !defined
1860: 28 5f 55 53 45 5f 36 34 42 49 54 5f 54 49 4d 45  (_USE_64BIT_TIME
1870: 5f 54 29 20 26 26 20 5c 0a 20 20 20 20 64 65 66  _T) && \.    def
1880: 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 26 26 20  ined(_WIN32) && 
1890: 21 64 65 66 69 6e 65 64 28 5f 57 49 4e 36 34 29  !defined(_WIN64)
18a0: 20 26 26 20 5c 0a 20 20 20 20 64 65 66 69 6e 65   && \.    define
18b0: 64 28 5f 5f 4d 49 4e 47 57 5f 4d 41 4a 4f 52 5f  d(__MINGW_MAJOR_
18c0: 56 45 52 53 49 4f 4e 29 20 26 26 20 5f 5f 4d 49  VERSION) && __MI
18d0: 4e 47 57 5f 4d 41 4a 4f 52 5f 56 45 52 53 49 4f  NGW_MAJOR_VERSIO
18e0: 4e 20 3e 3d 20 34 20 26 26 20 5c 0a 20 20 20 20  N >= 4 && \.    
18f0: 64 65 66 69 6e 65 64 28 5f 5f 4d 53 56 43 52 54  defined(__MSVCRT
1900: 5f 5f 29 0a 23 20 64 65 66 69 6e 65 20 5f 55 53  __).# define _US
1910: 45 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54 0a 23  E_32BIT_TIME_T.#
1920: 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65 20 70 75  endif../* The pu
1930: 62 6c 69 63 20 53 51 4c 69 74 65 20 69 6e 74 65  blic SQLite inte
1940: 72 66 61 63 65 2e 20 20 54 68 65 20 5f 46 49 4c  rface.  The _FIL
1950: 45 5f 4f 46 46 53 45 54 5f 42 49 54 53 20 6d 61  E_OFFSET_BITS ma
1960: 63 72 6f 20 6d 75 73 74 20 61 70 70 65 61 72 0a  cro must appear.
1970: 2a 2a 20 66 69 72 73 74 20 69 6e 20 51 4e 58 2e  ** first in QNX.
1980: 20 20 41 6c 73 6f 2c 20 74 68 65 20 5f 55 53 45    Also, the _USE
1990: 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54 20 6d 61  _32BIT_TIME_T ma
19a0: 63 72 6f 20 6d 75 73 74 20 61 70 70 65 61 72 20  cro must appear 
19b0: 66 69 72 73 74 20 66 6f 72 0a 2a 2a 20 4d 69 6e  first for.** Min
19c0: 47 57 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20  GW..*/.#include 
19d0: 22 73 71 6c 69 74 65 33 2e 68 22 0a 0a 2f 2a 0a  "sqlite3.h"../*.
19e0: 2a 2a 20 49 6e 63 6c 75 64 65 20 74 68 65 20 63  ** Include the c
19f0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 68 65 61  onfiguration hea
1a00: 64 65 72 20 6f 75 74 70 75 74 20 62 79 20 27 63  der output by 'c
1a10: 6f 6e 66 69 67 75 72 65 27 20 69 66 20 77 65 27  onfigure' if we'
1a20: 72 65 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20  re using the.** 
1a30: 61 75 74 6f 63 6f 6e 66 2d 62 61 73 65 64 20 62  autoconf-based b
1a40: 75 69 6c 64 0a 2a 2f 0a 23 69 66 20 64 65 66 69  uild.*/.#if defi
1a50: 6e 65 64 28 5f 48 41 56 45 5f 53 51 4c 49 54 45  ned(_HAVE_SQLITE
1a60: 5f 43 4f 4e 46 49 47 5f 48 29 20 26 26 20 21 64  _CONFIG_H) && !d
1a70: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 43 4f 4e  efined(SQLITECON
1a80: 46 49 47 5f 48 29 0a 23 69 6e 63 6c 75 64 65 20  FIG_H).#include 
1a90: 22 63 6f 6e 66 69 67 2e 68 22 0a 23 64 65 66 69  "config.h".#defi
1aa0: 6e 65 20 53 51 4c 49 54 45 43 4f 4e 46 49 47 5f  ne SQLITECONFIG_
1ab0: 48 20 31 0a 23 65 6e 64 69 66 0a 0a 23 69 6e 63  H 1.#endif..#inc
1ac0: 6c 75 64 65 20 22 73 71 6c 69 74 65 4c 69 6d 69  lude "sqliteLimi
1ad0: 74 2e 68 22 0a 0a 2f 2a 20 44 69 73 61 62 6c 65  t.h"../* Disable
1ae0: 20 6e 75 69 73 61 6e 63 65 20 77 61 72 6e 69 6e   nuisance warnin
1af0: 67 73 20 6f 6e 20 42 6f 72 6c 61 6e 64 20 63 6f  gs on Borland co
1b00: 6d 70 69 6c 65 72 73 20 2a 2f 0a 23 69 66 20 64  mpilers */.#if d
1b10: 65 66 69 6e 65 64 28 5f 5f 42 4f 52 4c 41 4e 44  efined(__BORLAND
1b20: 43 5f 5f 29 0a 23 70 72 61 67 6d 61 20 77 61 72  C__).#pragma war
1b30: 6e 20 2d 72 63 68 20 2f 2a 20 75 6e 72 65 61 63  n -rch /* unreac
1b40: 68 61 62 6c 65 20 63 6f 64 65 20 2a 2f 0a 23 70  hable code */.#p
1b50: 72 61 67 6d 61 20 77 61 72 6e 20 2d 63 63 63 20  ragma warn -ccc 
1b60: 2f 2a 20 43 6f 6e 64 69 74 69 6f 6e 20 69 73 20  /* Condition is 
1b70: 61 6c 77 61 79 73 20 74 72 75 65 20 6f 72 20 66  always true or f
1b80: 61 6c 73 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20  alse */.#pragma 
1b90: 77 61 72 6e 20 2d 61 75 73 20 2f 2a 20 41 73 73  warn -aus /* Ass
1ba0: 69 67 6e 65 64 20 76 61 6c 75 65 20 69 73 20 6e  igned value is n
1bb0: 65 76 65 72 20 75 73 65 64 20 2a 2f 0a 23 70 72  ever used */.#pr
1bc0: 61 67 6d 61 20 77 61 72 6e 20 2d 63 73 75 20 2f  agma warn -csu /
1bd0: 2a 20 43 6f 6d 70 61 72 69 6e 67 20 73 69 67 6e  * Comparing sign
1be0: 65 64 20 61 6e 64 20 75 6e 73 69 67 6e 65 64 20  ed and unsigned 
1bf0: 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20  */.#pragma warn 
1c00: 2d 73 70 61 20 2f 2a 20 53 75 73 70 69 63 69 6f  -spa /* Suspicio
1c10: 75 73 20 70 6f 69 6e 74 65 72 20 61 72 69 74 68  us pointer arith
1c20: 6d 65 74 69 63 20 2a 2f 0a 23 65 6e 64 69 66 0a  metic */.#endif.
1c30: 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65 20 73  ./*.** Include s
1c40: 74 61 6e 64 61 72 64 20 68 65 61 64 65 72 20 66  tandard header f
1c50: 69 6c 65 73 20 61 73 20 6e 65 63 65 73 73 61 72  iles as necessar
1c60: 79 0a 2a 2f 0a 23 69 66 64 65 66 20 48 41 56 45  y.*/.#ifdef HAVE
1c70: 5f 53 54 44 49 4e 54 5f 48 0a 23 69 6e 63 6c 75  _STDINT_H.#inclu
1c80: 64 65 20 3c 73 74 64 69 6e 74 2e 68 3e 0a 23 65  de <stdint.h>.#e
1c90: 6e 64 69 66 0a 23 69 66 64 65 66 20 48 41 56 45  ndif.#ifdef HAVE
1ca0: 5f 49 4e 54 54 59 50 45 53 5f 48 0a 23 69 6e 63  _INTTYPES_H.#inc
1cb0: 6c 75 64 65 20 3c 69 6e 74 74 79 70 65 73 2e 68  lude <inttypes.h
1cc0: 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  >.#endif../*.** 
1cd0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
1ce0: 63 72 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f  cros are used to
1cf0: 20 63 61 73 74 20 70 6f 69 6e 74 65 72 73 20 74   cast pointers t
1d00: 6f 20 69 6e 74 65 67 65 72 73 20 61 6e 64 0a 2a  o integers and.*
1d10: 2a 20 69 6e 74 65 67 65 72 73 20 74 6f 20 70 6f  * integers to po
1d20: 69 6e 74 65 72 73 2e 20 20 54 68 65 20 77 61 79  inters.  The way
1d30: 20 79 6f 75 20 64 6f 20 74 68 69 73 20 76 61 72   you do this var
1d40: 69 65 73 20 66 72 6f 6d 20 6f 6e 65 20 63 6f 6d  ies from one com
1d50: 70 69 6c 65 72 0a 2a 2a 20 74 6f 20 74 68 65 20  piler.** to the 
1d60: 6e 65 78 74 2c 20 73 6f 20 77 65 20 68 61 76 65  next, so we have
1d70: 20 64 65 76 65 6c 6f 70 65 64 20 74 68 65 20 66   developed the f
1d80: 6f 6c 6c 6f 77 69 6e 67 20 73 65 74 20 6f 66 20  ollowing set of 
1d90: 23 69 66 20 73 74 61 74 65 6d 65 6e 74 73 0a 2a  #if statements.*
1da0: 2a 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61 70  * to generate ap
1db0: 70 72 6f 70 72 69 61 74 65 20 6d 61 63 72 6f 73  propriate macros
1dc0: 20 66 6f 72 20 61 20 77 69 64 65 20 72 61 6e 67   for a wide rang
1dd0: 65 20 6f 66 20 63 6f 6d 70 69 6c 65 72 73 2e 0a  e of compilers..
1de0: 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 72 72 65 63  **.** The correc
1df0: 74 20 22 41 4e 53 49 22 20 77 61 79 20 74 6f 20  t "ANSI" way to 
1e00: 64 6f 20 74 68 69 73 20 69 73 20 74 6f 20 75 73  do this is to us
1e10: 65 20 74 68 65 20 69 6e 74 70 74 72 5f 74 20 74  e the intptr_t t
1e20: 79 70 65 2e 0a 2a 2a 20 55 6e 66 6f 72 74 75 6e  ype..** Unfortun
1e30: 61 74 65 6c 79 2c 20 74 68 61 74 20 74 79 70 65  ately, that type
1e40: 64 65 66 20 69 73 20 6e 6f 74 20 61 76 61 69 6c  def is not avail
1e50: 61 62 6c 65 20 6f 6e 20 61 6c 6c 20 63 6f 6d 70  able on all comp
1e60: 69 6c 65 72 73 2c 20 6f 72 0a 2a 2a 20 69 66 20  ilers, or.** if 
1e70: 69 74 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c  it is available,
1e80: 20 69 74 20 72 65 71 75 69 72 65 73 20 61 6e 20   it requires an 
1e90: 23 69 6e 63 6c 75 64 65 20 6f 66 20 73 70 65 63  #include of spec
1ea0: 69 66 69 63 20 68 65 61 64 65 72 73 0a 2a 2a 20  ific headers.** 
1eb0: 74 68 61 74 20 76 61 72 79 20 66 72 6f 6d 20 6f  that vary from o
1ec0: 6e 65 20 6d 61 63 68 69 6e 65 20 74 6f 20 74 68  ne machine to th
1ed0: 65 20 6e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 54 69  e next..**.** Ti
1ee0: 63 6b 65 74 20 23 33 38 36 30 3a 20 20 54 68 65  cket #3860:  The
1ef0: 20 6c 6c 76 6d 2d 67 63 63 2d 34 2e 32 20 63 6f   llvm-gcc-4.2 co
1f00: 6d 70 69 6c 65 72 20 66 72 6f 6d 20 41 70 70 6c  mpiler from Appl
1f10: 65 20 63 68 6f 6b 65 73 20 6f 6e 0a 2a 2a 20 74  e chokes on.** t
1f20: 68 65 20 28 28 76 6f 69 64 2a 29 26 28 28 63 68  he ((void*)&((ch
1f30: 61 72 2a 29 30 29 5b 58 5d 29 20 63 6f 6e 73 74  ar*)0)[X]) const
1f40: 72 75 63 74 2e 20 20 42 75 74 20 4d 53 56 43 20  ruct.  But MSVC 
1f50: 63 68 6f 6b 65 73 20 6f 6e 20 28 28 76 6f 69 64  chokes on ((void
1f60: 2a 29 28 58 29 29 2e 0a 2a 2a 20 53 6f 20 77 65  *)(X))..** So we
1f70: 20 68 61 76 65 20 74 6f 20 64 65 66 69 6e 65 20   have to define 
1f80: 74 68 65 20 6d 61 63 72 6f 73 20 69 6e 20 64 69  the macros in di
1f90: 66 66 65 72 65 6e 74 20 77 61 79 73 20 64 65 70  fferent ways dep
1fa0: 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 0a 2a 2a  ending on the.**
1fb0: 20 63 6f 6d 70 69 6c 65 72 2e 0a 2a 2f 0a 23 69   compiler..*/.#i
1fc0: 66 20 64 65 66 69 6e 65 64 28 5f 5f 50 54 52 44  f defined(__PTRD
1fd0: 49 46 46 5f 54 59 50 45 5f 5f 29 20 20 2f 2a 20  IFF_TYPE__)  /* 
1fe0: 54 68 69 73 20 63 61 73 65 20 73 68 6f 75 6c 64  This case should
1ff0: 20 77 6f 72 6b 20 66 6f 72 20 47 43 43 20 2a 2f   work for GCC */
2000: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
2010: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20  _INT_TO_PTR(X)  
2020: 28 28 76 6f 69 64 2a 29 28 5f 5f 50 54 52 44 49  ((void*)(__PTRDI
2030: 46 46 5f 54 59 50 45 5f 5f 29 28 58 29 29 0a 23  FF_TYPE__)(X)).#
2040: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50   define SQLITE_P
2050: 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28  TR_TO_INT(X)  ((
2060: 69 6e 74 29 28 5f 5f 50 54 52 44 49 46 46 5f 54  int)(__PTRDIFF_T
2070: 59 50 45 5f 5f 29 28 58 29 29 0a 23 65 6c 69 66  YPE__)(X)).#elif
2080: 20 21 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43   !defined(__GNUC
2090: 5f 5f 29 20 20 20 20 20 20 20 2f 2a 20 57 6f 72  __)       /* Wor
20a0: 6b 73 20 66 6f 72 20 63 6f 6d 70 69 6c 65 72 73  ks for compilers
20b0: 20 6f 74 68 65 72 20 74 68 61 6e 20 4c 4c 56 4d   other than LLVM
20c0: 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c   */.# define SQL
20d0: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58  ITE_INT_TO_PTR(X
20e0: 29 20 20 28 28 76 6f 69 64 2a 29 26 28 28 63 68  )  ((void*)&((ch
20f0: 61 72 2a 29 30 29 5b 58 5d 29 0a 23 20 64 65 66  ar*)0)[X]).# def
2100: 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54  ine SQLITE_PTR_T
2110: 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29  O_INT(X)  ((int)
2120: 28 28 28 63 68 61 72 2a 29 58 29 2d 28 63 68 61  (((char*)X)-(cha
2130: 72 2a 29 30 29 29 0a 23 65 6c 69 66 20 64 65 66  r*)0)).#elif def
2140: 69 6e 65 64 28 48 41 56 45 5f 53 54 44 49 4e 54  ined(HAVE_STDINT
2150: 5f 48 29 20 20 20 2f 2a 20 55 73 65 20 74 68 69  _H)   /* Use thi
2160: 73 20 63 61 73 65 20 69 66 20 77 65 20 68 61 76  s case if we hav
2170: 65 20 41 4e 53 49 20 68 65 61 64 65 72 73 20 2a  e ANSI headers *
2180: 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  /.# define SQLIT
2190: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20  E_INT_TO_PTR(X) 
21a0: 20 28 28 76 6f 69 64 2a 29 28 69 6e 74 70 74 72   ((void*)(intptr
21b0: 5f 74 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65  _t)(X)).# define
21c0: 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49   SQLITE_PTR_TO_I
21d0: 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 69 6e  NT(X)  ((int)(in
21e0: 74 70 74 72 5f 74 29 28 58 29 29 0a 23 65 6c 73  tptr_t)(X)).#els
21f0: 65 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e               
2200: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 47 65             /* Ge
2210: 6e 65 72 61 74 65 73 20 61 20 77 61 72 6e 69 6e  nerates a warnin
2220: 67 20 2d 20 62 75 74 20 69 74 20 61 6c 77 61 79  g - but it alway
2230: 73 20 77 6f 72 6b 73 20 2a 2f 0a 23 20 64 65 66  s works */.# def
2240: 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  ine SQLITE_INT_T
2250: 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f 69 64  O_PTR(X)  ((void
2260: 2a 29 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20  *)(X)).# define 
2270: 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e  SQLITE_PTR_TO_IN
2280: 54 28 58 29 20 20 28 28 69 6e 74 29 28 58 29 29  T(X)  ((int)(X))
2290: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
22a0: 20 6d 61 63 72 6f 20 74 6f 20 68 69 6e 74 20 74   macro to hint t
22b0: 6f 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 74  o the compiler t
22c0: 68 61 74 20 61 20 66 75 6e 63 74 69 6f 6e 20 73  hat a function s
22d0: 68 6f 75 6c 64 20 6e 6f 74 20 62 65 0a 2a 2a 20  hould not be.** 
22e0: 69 6e 6c 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 20  inlined..*/.#if 
22f0: 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f  defined(__GNUC__
2300: 29 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49  ).#  define SQLI
2310: 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20 5f 5f 61  TE_NOINLINE  __a
2320: 74 74 72 69 62 75 74 65 5f 5f 28 28 6e 6f 69 6e  ttribute__((noin
2330: 6c 69 6e 65 29 29 0a 23 65 6c 69 66 20 64 65 66  line)).#elif def
2340: 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29 20 26  ined(_MSC_VER) &
2350: 26 20 5f 4d 53 43 5f 56 45 52 3e 3d 31 33 31 30  & _MSC_VER>=1310
2360: 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  .#  define SQLIT
2370: 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20 5f 5f 64 65  E_NOINLINE  __de
2380: 63 6c 73 70 65 63 28 6e 6f 69 6e 6c 69 6e 65 29  clspec(noinline)
2390: 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  .#else.#  define
23a0: 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45   SQLITE_NOINLINE
23b0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d  .#endif../*.** M
23c0: 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68  ake sure that th
23d0: 65 20 63 6f 6d 70 69 6c 65 72 20 69 6e 74 72 69  e compiler intri
23e0: 6e 73 69 63 73 20 77 65 20 64 65 73 69 72 65 20  nsics we desire 
23f0: 61 72 65 20 65 6e 61 62 6c 65 64 20 77 68 65 6e  are enabled when
2400: 0a 2a 2a 20 63 6f 6d 70 69 6c 69 6e 67 20 77 69  .** compiling wi
2410: 74 68 20 61 6e 20 61 70 70 72 6f 70 72 69 61 74  th an appropriat
2420: 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 4d 53 56  e version of MSV
2430: 43 20 75 6e 6c 65 73 73 20 70 72 65 76 65 6e 74  C unless prevent
2440: 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 53 51 4c  ed by.** the SQL
2450: 49 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52  ITE_DISABLE_INTR
2460: 49 4e 53 49 43 20 64 65 66 69 6e 65 2e 0a 2a 2f  INSIC define..*/
2470: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
2480: 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54  LITE_DISABLE_INT
2490: 52 49 4e 53 49 43 29 0a 23 20 20 69 66 20 64 65  RINSIC).#  if de
24a0: 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29 20  fined(_MSC_VER) 
24b0: 26 26 20 5f 4d 53 43 5f 56 45 52 3e 3d 31 34 30  && _MSC_VER>=140
24c0: 30 0a 23 20 20 20 20 69 66 20 21 64 65 66 69 6e  0.#    if !defin
24d0: 65 64 28 5f 57 49 4e 33 32 5f 57 43 45 29 0a 23  ed(_WIN32_WCE).#
24e0: 20 20 20 20 20 20 69 6e 63 6c 75 64 65 20 3c 69        include <i
24f0: 6e 74 72 69 6e 2e 68 3e 0a 23 20 20 20 20 20 20  ntrin.h>.#      
2500: 70 72 61 67 6d 61 20 69 6e 74 72 69 6e 73 69 63  pragma intrinsic
2510: 28 5f 62 79 74 65 73 77 61 70 5f 75 73 68 6f 72  (_byteswap_ushor
2520: 74 29 0a 23 20 20 20 20 20 20 70 72 61 67 6d 61  t).#      pragma
2530: 20 69 6e 74 72 69 6e 73 69 63 28 5f 62 79 74 65   intrinsic(_byte
2540: 73 77 61 70 5f 75 6c 6f 6e 67 29 0a 23 20 20 20  swap_ulong).#   
2550: 20 20 20 70 72 61 67 6d 61 20 69 6e 74 72 69 6e     pragma intrin
2560: 73 69 63 28 5f 62 79 74 65 73 77 61 70 5f 75 69  sic(_byteswap_ui
2570: 6e 74 36 34 29 0a 23 20 20 20 20 20 20 70 72 61  nt64).#      pra
2580: 67 6d 61 20 69 6e 74 72 69 6e 73 69 63 28 5f 52  gma intrinsic(_R
2590: 65 61 64 57 72 69 74 65 42 61 72 72 69 65 72 29  eadWriteBarrier)
25a0: 0a 23 20 20 20 20 65 6c 73 65 0a 23 20 20 20 20  .#    else.#    
25b0: 20 20 69 6e 63 6c 75 64 65 20 3c 63 6d 6e 69 6e    include <cmnin
25c0: 74 72 69 6e 2e 68 3e 0a 23 20 20 20 20 65 6e 64  trin.h>.#    end
25d0: 69 66 0a 23 20 20 65 6e 64 69 66 0a 23 65 6e 64  if.#  endif.#end
25e0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51  if../*.** The SQ
25f0: 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 20  LITE_THREADSAFE 
2600: 6d 61 63 72 6f 20 6d 75 73 74 20 62 65 20 64 65  macro must be de
2610: 66 69 6e 65 64 20 61 73 20 30 2c 20 31 2c 20 6f  fined as 0, 1, o
2620: 72 20 32 2e 0a 2a 2a 20 30 20 6d 65 61 6e 73 20  r 2..** 0 means 
2630: 6d 75 74 65 78 65 73 20 61 72 65 20 70 65 72 6d  mutexes are perm
2640: 61 6e 65 6e 74 6c 79 20 64 69 73 61 62 6c 65 20  anently disable 
2650: 61 6e 64 20 74 68 65 20 6c 69 62 72 61 72 79 20  and the library 
2660: 69 73 20 6e 65 76 65 72 0a 2a 2a 20 74 68 72 65  is never.** thre
2670: 61 64 73 61 66 65 2e 20 20 31 20 6d 65 61 6e 73  adsafe.  1 means
2680: 20 74 68 65 20 6c 69 62 72 61 72 79 20 69 73 20   the library is 
2690: 73 65 72 69 61 6c 69 7a 65 64 20 77 68 69 63 68  serialized which
26a0: 20 69 73 20 74 68 65 20 68 69 67 68 65 73 74 0a   is the highest.
26b0: 2a 2a 20 6c 65 76 65 6c 20 6f 66 20 74 68 72 65  ** level of thre
26c0: 61 64 73 61 66 65 74 79 2e 20 20 32 20 6d 65 61  adsafety.  2 mea
26d0: 6e 73 20 74 68 65 20 6c 69 62 72 61 72 79 20 69  ns the library i
26e0: 73 20 6d 75 6c 74 69 74 68 72 65 61 64 65 64 20  s multithreaded 
26f0: 2d 20 6d 75 6c 74 69 70 6c 65 0a 2a 2a 20 74 68  - multiple.** th
2700: 72 65 61 64 73 20 63 61 6e 20 75 73 65 20 53 51  reads can use SQ
2710: 4c 69 74 65 20 61 73 20 6c 6f 6e 67 20 61 73 20  Lite as long as 
2720: 6e 6f 20 74 77 6f 20 74 68 72 65 61 64 73 20 74  no two threads t
2730: 72 79 20 74 6f 20 75 73 65 20 74 68 65 20 73 61  ry to use the sa
2740: 6d 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 63  me.** database c
2750: 6f 6e 6e 65 63 74 69 6f 6e 20 61 74 20 74 68 65  onnection at the
2760: 20 73 61 6d 65 20 74 69 6d 65 2e 0a 2a 2a 0a 2a   same time..**.*
2770: 2a 20 4f 6c 64 65 72 20 76 65 72 73 69 6f 6e 73  * Older versions
2780: 20 6f 66 20 53 51 4c 69 74 65 20 75 73 65 64 20   of SQLite used 
2790: 61 6e 20 6f 70 74 69 6f 6e 61 6c 20 54 48 52 45  an optional THRE
27a0: 41 44 53 41 46 45 20 6d 61 63 72 6f 2e 0a 2a 2a  ADSAFE macro..**
27b0: 20 57 65 20 73 75 70 70 6f 72 74 20 74 68 61 74   We support that
27c0: 20 66 6f 72 20 6c 65 67 61 63 79 2e 0a 2a 2a 0a   for legacy..**.
27d0: 2a 2a 20 54 6f 20 65 6e 73 75 72 65 20 74 68 61  ** To ensure tha
27e0: 74 20 74 68 65 20 63 6f 72 72 65 63 74 20 76 61  t the correct va
27f0: 6c 75 65 20 6f 66 20 22 54 48 52 45 41 44 53 41  lue of "THREADSA
2800: 46 45 22 20 69 73 20 72 65 70 6f 72 74 65 64 20  FE" is reported 
2810: 77 68 65 6e 20 71 75 65 72 79 69 6e 67 0a 2a 2a  when querying.**
2820: 20 66 6f 72 20 63 6f 6d 70 69 6c 65 2d 74 69 6d   for compile-tim
2830: 65 20 6f 70 74 69 6f 6e 73 20 61 74 20 72 75 6e  e options at run
2840: 74 69 6d 65 20 28 65 2e 67 2e 20 22 50 52 41 47  time (e.g. "PRAG
2850: 4d 41 20 63 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f  MA compile_optio
2860: 6e 73 22 29 2c 20 74 68 69 73 0a 2a 2a 20 6c 6f  ns"), this.** lo
2870: 67 69 63 20 69 73 20 70 61 72 74 69 61 6c 6c 79  gic is partially
2880: 20 72 65 70 6c 69 63 61 74 65 64 20 69 6e 20 63   replicated in c
2890: 74 69 6d 65 2e 63 2e 20 49 66 20 69 74 20 69 73  time.c. If it is
28a0: 20 75 70 64 61 74 65 64 20 68 65 72 65 2c 20 69   updated here, i
28b0: 74 20 73 68 6f 75 6c 64 0a 2a 2a 20 61 6c 73 6f  t should.** also
28c0: 20 62 65 20 75 70 64 61 74 65 64 20 74 68 65 72   be updated ther
28d0: 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  e..*/.#if !defin
28e0: 65 64 28 53 51 4c 49 54 45 5f 54 48 52 45 41 44  ed(SQLITE_THREAD
28f0: 53 41 46 45 29 0a 23 20 69 66 20 64 65 66 69 6e  SAFE).# if defin
2900: 65 64 28 54 48 52 45 41 44 53 41 46 45 29 0a 23  ed(THREADSAFE).#
2910: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
2920: 5f 54 48 52 45 41 44 53 41 46 45 20 54 48 52 45  _THREADSAFE THRE
2930: 41 44 53 41 46 45 0a 23 20 65 6c 73 65 0a 23 20  ADSAFE.# else.# 
2940: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
2950: 54 48 52 45 41 44 53 41 46 45 20 31 20 2f 2a 20  THREADSAFE 1 /* 
2960: 49 4d 50 3a 20 52 2d 30 37 32 37 32 2d 32 32 33  IMP: R-07272-223
2970: 30 39 20 2a 2f 0a 23 20 65 6e 64 69 66 0a 23 65  09 */.# endif.#e
2980: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 6f 77 65  ndif../*.** Powe
2990: 72 73 61 66 65 20 6f 76 65 72 77 72 69 74 65 20  rsafe overwrite 
29a0: 69 73 20 6f 6e 20 62 79 20 64 65 66 61 75 6c 74  is on by default
29b0: 2e 20 20 42 75 74 20 63 61 6e 20 62 65 20 74 75  .  But can be tu
29c0: 72 6e 65 64 20 6f 66 66 20 75 73 69 6e 67 0a 2a  rned off using.*
29d0: 2a 20 74 68 65 20 2d 44 53 51 4c 49 54 45 5f 50  * the -DSQLITE_P
29e0: 4f 57 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49  OWERSAFE_OVERWRI
29f0: 54 45 3d 30 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e  TE=0 command-lin
2a00: 65 20 6f 70 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66  e option..*/.#if
2a10: 6e 64 65 66 20 53 51 4c 49 54 45 5f 50 4f 57 45  ndef SQLITE_POWE
2a20: 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45 0a  RSAFE_OVERWRITE.
2a30: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
2a40: 50 4f 57 45 52 53 41 46 45 5f 4f 56 45 52 57 52  POWERSAFE_OVERWR
2a50: 49 54 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ITE 1.#endif../*
2a60: 0a 2a 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a  .** EVIDENCE-OF:
2a70: 20 52 2d 32 35 37 31 35 2d 33 37 30 37 32 20 4d   R-25715-37072 M
2a80: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
2a90: 20 73 74 61 74 69 73 74 69 63 73 20 61 72 65 20   statistics are 
2aa0: 65 6e 61 62 6c 65 64 20 62 79 0a 2a 2a 20 64 65  enabled by.** de
2ab0: 66 61 75 6c 74 20 75 6e 6c 65 73 73 20 53 51 4c  fault unless SQL
2ac0: 69 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64 20  ite is compiled 
2ad0: 77 69 74 68 20 53 51 4c 49 54 45 5f 44 45 46 41  with SQLITE_DEFA
2ae0: 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 3d 30 20  ULT_MEMSTATUS=0 
2af0: 69 6e 0a 2a 2a 20 77 68 69 63 68 20 63 61 73 65  in.** which case
2b00: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
2b10: 6f 6e 20 73 74 61 74 69 73 74 69 63 73 20 61 72  on statistics ar
2b20: 65 20 64 69 73 61 62 6c 65 64 20 62 79 20 64 65  e disabled by de
2b30: 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 21 64  fault..*/.#if !d
2b40: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
2b50: 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 29  FAULT_MEMSTATUS)
2b60: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
2b70: 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54  _DEFAULT_MEMSTAT
2b80: 55 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  US 1.#endif../*.
2b90: 2a 2a 20 45 78 61 63 74 6c 79 20 6f 6e 65 20 6f  ** Exactly one o
2ba0: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
2bb0: 6d 61 63 72 6f 73 20 6d 75 73 74 20 62 65 20 64  macros must be d
2bc0: 65 66 69 6e 65 64 20 69 6e 20 6f 72 64 65 72 20  efined in order 
2bd0: 74 6f 0a 2a 2a 20 73 70 65 63 69 66 79 20 77 68  to.** specify wh
2be0: 69 63 68 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ich memory alloc
2bf0: 61 74 69 6f 6e 20 73 75 62 73 79 73 74 65 6d 20  ation subsystem 
2c00: 74 6f 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20  to use..**.**   
2c10: 20 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f    SQLITE_SYSTEM_
2c20: 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20  MALLOC          
2c30: 2f 2f 20 55 73 65 20 6e 6f 72 6d 61 6c 20 73 79  // Use normal sy
2c40: 73 74 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a  stem malloc().**
2c50: 20 20 20 20 20 53 51 4c 49 54 45 5f 57 49 4e 33       SQLITE_WIN3
2c60: 32 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20 20  2_MALLOC        
2c70: 20 20 20 2f 2f 20 55 73 65 20 57 69 6e 33 32 20     // Use Win32 
2c80: 6e 61 74 69 76 65 20 68 65 61 70 20 41 50 49 0a  native heap API.
2c90: 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 5a 45  **     SQLITE_ZE
2ca0: 52 4f 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20  RO_MALLOC       
2cb0: 20 20 20 20 20 2f 2f 20 55 73 65 20 61 20 73 74       // Use a st
2cc0: 75 62 20 61 6c 6c 6f 63 61 74 6f 72 20 74 68 61  ub allocator tha
2cd0: 74 20 61 6c 77 61 79 73 20 66 61 69 6c 73 0a 2a  t always fails.*
2ce0: 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 4d 45 4d  *     SQLITE_MEM
2cf0: 44 45 42 55 47 20 20 20 20 20 20 20 20 20 20 20  DEBUG           
2d00: 20 20 20 20 2f 2f 20 44 65 62 75 67 67 69 6e 67      // Debugging
2d10: 20 76 65 72 73 69 6f 6e 20 6f 66 20 73 79 73 74   version of syst
2d20: 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 0a 2a  em malloc().**.*
2d30: 2a 20 4f 6e 20 57 69 6e 64 6f 77 73 2c 20 69 66  * On Windows, if
2d40: 20 74 68 65 20 53 51 4c 49 54 45 5f 57 49 4e 33   the SQLITE_WIN3
2d50: 32 5f 4d 41 4c 4c 4f 43 5f 56 41 4c 49 44 41 54  2_MALLOC_VALIDAT
2d60: 45 20 6d 61 63 72 6f 20 69 73 20 64 65 66 69 6e  E macro is defin
2d70: 65 64 20 61 6e 64 20 74 68 65 0a 2a 2a 20 61 73  ed and the.** as
2d80: 73 65 72 74 28 29 20 6d 61 63 72 6f 20 69 73 20  sert() macro is 
2d90: 65 6e 61 62 6c 65 64 2c 20 65 61 63 68 20 63 61  enabled, each ca
2da0: 6c 6c 20 69 6e 74 6f 20 74 68 65 20 57 69 6e 33  ll into the Win3
2db0: 32 20 6e 61 74 69 76 65 20 68 65 61 70 20 73 75  2 native heap su
2dc0: 62 73 79 73 74 65 6d 0a 2a 2a 20 77 69 6c 6c 20  bsystem.** will 
2dd0: 63 61 75 73 65 20 48 65 61 70 56 61 6c 69 64 61  cause HeapValida
2de0: 74 65 20 74 6f 20 62 65 20 63 61 6c 6c 65 64 2e  te to be called.
2df0: 20 20 49 66 20 68 65 61 70 20 76 61 6c 69 64 61    If heap valida
2e00: 74 69 6f 6e 20 73 68 6f 75 6c 64 20 66 61 69 6c  tion should fail
2e10: 2c 20 61 6e 0a 2a 2a 20 61 73 73 65 72 74 69 6f  , an.** assertio
2e20: 6e 20 77 69 6c 6c 20 62 65 20 74 72 69 67 67 65  n will be trigge
2e30: 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 6e 6f  red..**.** If no
2e40: 6e 65 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20  ne of the above 
2e50: 61 72 65 20 64 65 66 69 6e 65 64 2c 20 74 68 65  are defined, the
2e60: 6e 20 73 65 74 20 53 51 4c 49 54 45 5f 53 59 53  n set SQLITE_SYS
2e70: 54 45 4d 5f 4d 41 4c 4c 4f 43 20 61 73 0a 2a 2a  TEM_MALLOC as.**
2e80: 20 74 68 65 20 64 65 66 61 75 6c 74 2e 0a 2a 2f   the default..*/
2e90: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
2ea0: 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f  ITE_SYSTEM_MALLO
2eb0: 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64  C) \.  + defined
2ec0: 28 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41  (SQLITE_WIN32_MA
2ed0: 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69  LLOC) \.  + defi
2ee0: 6e 65 64 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f  ned(SQLITE_ZERO_
2ef0: 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65  MALLOC) \.  + de
2f00: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d  fined(SQLITE_MEM
2f10: 44 45 42 55 47 29 3e 31 0a 23 20 65 72 72 6f 72  DEBUG)>1.# error
2f20: 20 22 54 77 6f 20 6f 72 20 6d 6f 72 65 20 6f 66   "Two or more of
2f30: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   the following c
2f40: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 63 6f 6e 66  ompile-time conf
2f50: 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e  iguration option
2f60: 73 5c 0a 20 61 72 65 20 64 65 66 69 6e 65 64 20  s\. are defined 
2f70: 62 75 74 20 61 74 20 6d 6f 73 74 20 6f 6e 65 20  but at most one 
2f80: 69 73 20 61 6c 6c 6f 77 65 64 3a 5c 0a 20 53 51  is allowed:\. SQ
2f90: 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c  LITE_SYSTEM_MALL
2fa0: 4f 43 2c 20 53 51 4c 49 54 45 5f 57 49 4e 33 32  OC, SQLITE_WIN32
2fb0: 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c 49 54 45 5f  _MALLOC, SQLITE_
2fc0: 4d 45 4d 44 45 42 55 47 2c 5c 0a 20 53 51 4c 49  MEMDEBUG,\. SQLI
2fd0: 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 22 0a  TE_ZERO_MALLOC".
2fe0: 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e  #endif.#if defin
2ff0: 65 64 28 53 51 4c 49 54 45 5f 53 59 53 54 45 4d  ed(SQLITE_SYSTEM
3000: 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64  _MALLOC) \.  + d
3010: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 57 49  efined(SQLITE_WI
3020: 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20  N32_MALLOC) \.  
3030: 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  + defined(SQLITE
3040: 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29 20 5c 0a  _ZERO_MALLOC) \.
3050: 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49    + defined(SQLI
3060: 54 45 5f 4d 45 4d 44 45 42 55 47 29 3d 3d 30 0a  TE_MEMDEBUG)==0.
3070: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
3080: 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 31 0a  SYSTEM_MALLOC 1.
3090: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66  #endif../*.** If
30a0: 20 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53   SQLITE_MALLOC_S
30b0: 4f 46 54 5f 4c 49 4d 49 54 20 69 73 20 6e 6f 74  OFT_LIMIT is not
30c0: 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 72 79 20   zero, then try 
30d0: 74 6f 20 6b 65 65 70 20 74 68 65 0a 2a 2a 20 73  to keep the.** s
30e0: 69 7a 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20 61  izes of memory a
30f0: 6c 6c 6f 63 61 74 69 6f 6e 73 20 62 65 6c 6f 77  llocations below
3100: 20 74 68 69 73 20 76 61 6c 75 65 20 77 68 65 72   this value wher
3110: 65 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2f 0a 23  e possible..*/.#
3120: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
3130: 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c  TE_MALLOC_SOFT_L
3140: 49 4d 49 54 29 0a 23 20 64 65 66 69 6e 65 20 53  IMIT).# define S
3150: 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46  QLITE_MALLOC_SOF
3160: 54 5f 4c 49 4d 49 54 20 31 30 32 34 0a 23 65 6e  T_LIMIT 1024.#en
3170: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 65 20 6e 65  dif../*.** We ne
3180: 65 64 20 74 6f 20 64 65 66 69 6e 65 20 5f 58 4f  ed to define _XO
3190: 50 45 4e 5f 53 4f 55 52 43 45 20 61 73 20 66 6f  PEN_SOURCE as fo
31a0: 6c 6c 6f 77 73 20 69 6e 20 6f 72 64 65 72 20 74  llows in order t
31b0: 6f 20 65 6e 61 62 6c 65 0a 2a 2a 20 72 65 63 75  o enable.** recu
31c0: 72 73 69 76 65 20 6d 75 74 65 78 65 73 20 6f 6e  rsive mutexes on
31d0: 20 6d 6f 73 74 20 55 6e 69 78 20 73 79 73 74 65   most Unix syste
31e0: 6d 73 20 61 6e 64 20 66 63 68 6d 6f 64 28 29 20  ms and fchmod() 
31f0: 6f 6e 20 4f 70 65 6e 42 53 44 2e 0a 2a 2a 20 42  on OpenBSD..** B
3200: 75 74 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45  ut _XOPEN_SOURCE
3210: 20 64 65 66 69 6e 65 20 63 61 75 73 65 73 20 70   define causes p
3220: 72 6f 62 6c 65 6d 73 20 66 6f 72 20 4d 61 63 20  roblems for Mac 
3230: 4f 53 20 58 2c 20 73 6f 20 6f 6d 69 74 0a 2a 2a  OS X, so omit.**
3240: 20 69 74 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66   it..*/.#if !def
3250: 69 6e 65 64 28 5f 58 4f 50 45 4e 5f 53 4f 55 52  ined(_XOPEN_SOUR
3260: 43 45 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  CE) && !defined(
3270: 5f 5f 44 41 52 57 49 4e 5f 5f 29 20 26 26 20 21  __DARWIN__) && !
3280: 64 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f  defined(__APPLE_
3290: 5f 29 0a 23 20 20 64 65 66 69 6e 65 20 5f 58 4f  _).#  define _XO
32a0: 50 45 4e 5f 53 4f 55 52 43 45 20 36 30 30 0a 23  PEN_SOURCE 600.#
32b0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4e 44 45  endif../*.** NDE
32c0: 42 55 47 20 61 6e 64 20 53 51 4c 49 54 45 5f 44  BUG and SQLITE_D
32d0: 45 42 55 47 20 61 72 65 20 6f 70 70 6f 73 69 74  EBUG are opposit
32e0: 65 73 2e 20 20 49 74 20 73 68 6f 75 6c 64 20 61  es.  It should a
32f0: 6c 77 61 79 73 20 62 65 20 74 72 75 65 20 74 68  lways be true th
3300: 61 74 0a 2a 2a 20 64 65 66 69 6e 65 64 28 4e 44  at.** defined(ND
3310: 45 42 55 47 29 3d 3d 21 64 65 66 69 6e 65 64 28  EBUG)==!defined(
3320: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 2e 20 20  SQLITE_DEBUG).  
3330: 49 66 20 74 68 69 73 20 69 73 20 6e 6f 74 20 63  If this is not c
3340: 75 72 72 65 6e 74 6c 79 20 74 72 75 65 2c 0a 2a  urrently true,.*
3350: 2a 20 6d 61 6b 65 20 69 74 20 74 72 75 65 20 62  * make it true b
3360: 79 20 64 65 66 69 6e 69 6e 67 20 6f 72 20 75 6e  y defining or un
3370: 64 65 66 69 6e 69 6e 67 20 4e 44 45 42 55 47 2e  defining NDEBUG.
3380: 0a 2a 2a 0a 2a 2a 20 53 65 74 74 69 6e 67 20 4e  .**.** Setting N
3390: 44 45 42 55 47 20 6d 61 6b 65 73 20 74 68 65 20  DEBUG makes the 
33a0: 63 6f 64 65 20 73 6d 61 6c 6c 65 72 20 61 6e 64  code smaller and
33b0: 20 66 61 73 74 65 72 20 62 79 20 64 69 73 61 62   faster by disab
33c0: 6c 69 6e 67 20 74 68 65 0a 2a 2a 20 61 73 73 65  ling the.** asse
33d0: 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20  rt() statements 
33e0: 69 6e 20 74 68 65 20 63 6f 64 65 2e 20 20 53 6f  in the code.  So
33f0: 20 77 65 20 77 61 6e 74 20 74 68 65 20 64 65 66   we want the def
3400: 61 75 6c 74 20 61 63 74 69 6f 6e 0a 2a 2a 20 74  ault action.** t
3410: 6f 20 62 65 20 66 6f 72 20 4e 44 45 42 55 47 20  o be for NDEBUG 
3420: 74 6f 20 62 65 20 73 65 74 20 61 6e 64 20 4e 44  to be set and ND
3430: 45 42 55 47 20 74 6f 20 62 65 20 75 6e 64 65 66  EBUG to be undef
3440: 69 6e 65 64 20 6f 6e 6c 79 20 69 66 20 53 51 4c  ined only if SQL
3450: 49 54 45 5f 44 45 42 55 47 0a 2a 2a 20 69 73 20  ITE_DEBUG.** is 
3460: 73 65 74 2e 20 20 54 68 75 73 20 4e 44 45 42 55  set.  Thus NDEBU
3470: 47 20 62 65 63 6f 6d 65 73 20 61 6e 20 6f 70 74  G becomes an opt
3480: 2d 69 6e 20 72 61 74 68 65 72 20 74 68 61 6e 20  -in rather than 
3490: 61 6e 20 6f 70 74 2d 6f 75 74 0a 2a 2a 20 66 65  an opt-out.** fe
34a0: 61 74 75 72 65 2e 0a 2a 2f 0a 23 69 66 20 21 64  ature..*/.#if !d
34b0: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 26  efined(NDEBUG) &
34c0: 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
34d0: 45 5f 44 45 42 55 47 29 0a 23 20 64 65 66 69 6e  E_DEBUG).# defin
34e0: 65 20 4e 44 45 42 55 47 20 31 0a 23 65 6e 64 69  e NDEBUG 1.#endi
34f0: 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 4e 44  f.#if defined(ND
3500: 45 42 55 47 29 20 26 26 20 64 65 66 69 6e 65 64  EBUG) && defined
3510: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 23  (SQLITE_DEBUG).#
3520: 20 75 6e 64 65 66 20 4e 44 45 42 55 47 0a 23 65   undef NDEBUG.#e
3530: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 6e 61 62  ndif../*.** Enab
3540: 6c 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  le SQLITE_ENABLE
3550: 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54  _EXPLAIN_COMMENT
3560: 53 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55  S if SQLITE_DEBU
3570: 47 20 69 73 20 74 75 72 6e 65 64 20 6f 6e 2e 0a  G is turned on..
3580: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
3590: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58  SQLITE_ENABLE_EX
35a0: 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 29 20  PLAIN_COMMENTS) 
35b0: 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  && defined(SQLIT
35c0: 45 5f 44 45 42 55 47 29 0a 23 20 64 65 66 69 6e  E_DEBUG).# defin
35d0: 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  e SQLITE_ENABLE_
35e0: 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53  EXPLAIN_COMMENTS
35f0: 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   1.#endif../*.**
3600: 20 54 68 65 20 74 65 73 74 63 61 73 65 28 29 20   The testcase() 
3610: 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 74 6f  macro is used to
3620: 20 61 69 64 20 69 6e 20 63 6f 76 65 72 61 67 65   aid in coverage
3630: 20 74 65 73 74 69 6e 67 2e 20 20 57 68 65 6e 0a   testing.  When.
3640: 2a 2a 20 64 6f 69 6e 67 20 63 6f 76 65 72 61 67  ** doing coverag
3650: 65 20 74 65 73 74 69 6e 67 2c 20 74 68 65 20 63  e testing, the c
3660: 6f 6e 64 69 74 69 6f 6e 20 69 6e 73 69 64 65 20  ondition inside 
3670: 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 0a  the argument to.
3680: 2a 2a 20 74 65 73 74 63 61 73 65 28 29 20 6d 75  ** testcase() mu
3690: 73 74 20 62 65 20 65 76 61 6c 75 61 74 65 64 20  st be evaluated 
36a0: 62 6f 74 68 20 74 72 75 65 20 61 6e 64 20 66 61  both true and fa
36b0: 6c 73 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a  lse in order to.
36c0: 2a 2a 20 67 65 74 20 66 75 6c 6c 20 62 72 61 6e  ** get full bran
36d0: 63 68 20 63 6f 76 65 72 61 67 65 2e 20 20 54 68  ch coverage.  Th
36e0: 65 20 74 65 73 74 63 61 73 65 28 29 20 6d 61 63  e testcase() mac
36f0: 72 6f 20 69 73 20 69 6e 73 65 72 74 65 64 0a 2a  ro is inserted.*
3700: 2a 20 74 6f 20 68 65 6c 70 20 65 6e 73 75 72 65  * to help ensure
3710: 20 61 64 65 71 75 61 74 65 20 74 65 73 74 20 63   adequate test c
3720: 6f 76 65 72 61 67 65 20 69 6e 20 70 6c 61 63 65  overage in place
3730: 73 20 77 68 65 72 65 20 73 69 6d 70 6c 65 0a 2a  s where simple.*
3740: 2a 20 63 6f 6e 64 69 74 69 6f 6e 2f 64 65 63 69  * condition/deci
3750: 73 69 6f 6e 20 63 6f 76 65 72 61 67 65 20 69 73  sion coverage is
3760: 20 69 6e 61 64 65 71 75 61 74 65 2e 20 20 46 6f   inadequate.  Fo
3770: 72 20 65 78 61 6d 70 6c 65 2c 20 74 65 73 74 63  r example, testc
3780: 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20 62 65 20  ase().** can be 
3790: 75 73 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72  used to make sur
37a0: 65 20 62 6f 75 6e 64 61 72 79 20 76 61 6c 75 65  e boundary value
37b0: 73 20 61 72 65 20 74 65 73 74 65 64 2e 20 20 46  s are tested.  F
37c0: 6f 72 0a 2a 2a 20 62 69 74 6d 61 73 6b 20 74 65  or.** bitmask te
37d0: 73 74 73 2c 20 74 65 73 74 63 61 73 65 28 29 20  sts, testcase() 
37e0: 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 6d  can be used to m
37f0: 61 6b 65 20 73 75 72 65 20 65 61 63 68 20 62 69  ake sure each bi
3800: 74 0a 2a 2a 20 69 73 20 73 69 67 6e 69 66 69 63  t.** is signific
3810: 61 6e 74 20 61 6e 64 20 75 73 65 64 20 61 74 20  ant and used at 
3820: 6c 65 61 73 74 20 6f 6e 63 65 2e 20 20 4f 6e 20  least once.  On 
3830: 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74  switch statement
3840: 73 0a 2a 2a 20 77 68 65 72 65 20 6d 75 6c 74 69  s.** where multi
3850: 70 6c 65 20 63 61 73 65 73 20 67 6f 20 74 6f 20  ple cases go to 
3860: 74 68 65 20 73 61 6d 65 20 62 6c 6f 63 6b 20 6f  the same block o
3870: 66 20 63 6f 64 65 2c 20 74 65 73 74 63 61 73 65  f code, testcase
3880: 28 29 0a 2a 2a 20 63 61 6e 20 69 6e 73 75 72 65  ().** can insure
3890: 20 74 68 61 74 20 61 6c 6c 20 63 61 73 65 73 20   that all cases 
38a0: 61 72 65 20 65 76 61 6c 75 61 74 65 64 2e 0a 2a  are evaluated..*
38b0: 2a 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  *.*/.#ifdef SQLI
38c0: 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54  TE_COVERAGE_TEST
38d0: 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
38e0: 6f 76 65 72 61 67 65 28 69 6e 74 29 3b 0a 23 20  overage(int);.# 
38f0: 64 65 66 69 6e 65 20 74 65 73 74 63 61 73 65 28  define testcase(
3900: 58 29 20 20 69 66 28 20 58 20 29 7b 20 73 71 6c  X)  if( X ){ sql
3910: 69 74 65 33 43 6f 76 65 72 61 67 65 28 5f 5f 4c  ite3Coverage(__L
3920: 49 4e 45 5f 5f 29 3b 20 7d 0a 23 65 6c 73 65 0a  INE__); }.#else.
3930: 23 20 64 65 66 69 6e 65 20 74 65 73 74 63 61 73  # define testcas
3940: 65 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  e(X).#endif../*.
3950: 2a 2a 20 54 68 65 20 54 45 53 54 4f 4e 4c 59 20  ** The TESTONLY 
3960: 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 74 6f  macro is used to
3970: 20 65 6e 63 6c 6f 73 65 20 76 61 72 69 61 62 6c   enclose variabl
3980: 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 6f  e declarations o
3990: 72 0a 2a 2a 20 6f 74 68 65 72 20 62 69 74 73 20  r.** other bits 
39a0: 6f 66 20 63 6f 64 65 20 74 68 61 74 20 61 72 65  of code that are
39b0: 20 6e 65 65 64 65 64 20 74 6f 20 73 75 70 70 6f   needed to suppo
39c0: 72 74 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73  rt the arguments
39d0: 0a 2a 2a 20 77 69 74 68 69 6e 20 74 65 73 74 63  .** within testc
39e0: 61 73 65 28 29 20 61 6e 64 20 61 73 73 65 72 74  ase() and assert
39f0: 28 29 20 6d 61 63 72 6f 73 2e 0a 2a 2f 0a 23 69  () macros..*/.#i
3a00: 66 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55  f !defined(NDEBU
3a10: 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  G) || defined(SQ
3a20: 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54 45  LITE_COVERAGE_TE
3a30: 53 54 29 0a 23 20 64 65 66 69 6e 65 20 54 45 53  ST).# define TES
3a40: 54 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c 73  TONLY(X)  X.#els
3a50: 65 0a 23 20 64 65 66 69 6e 65 20 54 45 53 54 4f  e.# define TESTO
3a60: 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f  NLY(X).#endif../
3a70: 2a 0a 2a 2a 20 53 6f 6d 65 74 69 6d 65 73 20 77  *.** Sometimes w
3a80: 65 20 6e 65 65 64 20 61 20 73 6d 61 6c 6c 20 61  e need a small a
3a90: 6d 6f 75 6e 74 20 6f 66 20 63 6f 64 65 20 73 75  mount of code su
3aa0: 63 68 20 61 73 20 61 20 76 61 72 69 61 62 6c 65  ch as a variable
3ab0: 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a   initialization.
3ac0: 2a 2a 20 74 6f 20 73 65 74 75 70 20 66 6f 72 20  ** to setup for 
3ad0: 61 20 6c 61 74 65 72 20 61 73 73 65 72 74 28 29  a later assert()
3ae0: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 57 65 20   statement.  We 
3af0: 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74 68 69 73  do not want this
3b00: 20 63 6f 64 65 20 74 6f 0a 2a 2a 20 61 70 70 65   code to.** appe
3b10: 61 72 20 77 68 65 6e 20 61 73 73 65 72 74 28 29  ar when assert()
3b20: 20 69 73 20 64 69 73 61 62 6c 65 64 2e 20 20 54   is disabled.  T
3b30: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
3b40: 72 6f 20 69 73 20 74 68 65 72 65 66 6f 72 65 0a  ro is therefore.
3b50: 2a 2a 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 61  ** used to conta
3b60: 69 6e 20 74 68 61 74 20 73 65 74 75 70 20 63 6f  in that setup co
3b70: 64 65 2e 20 20 54 68 65 20 22 56 56 41 22 20 61  de.  The "VVA" a
3b80: 63 72 6f 6e 79 6d 20 73 74 61 6e 64 73 20 66 6f  cronym stands fo
3b90: 72 0a 2a 2a 20 22 56 65 72 69 66 69 63 61 74 69  r.** "Verificati
3ba0: 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c 20  on, Validation, 
3bb0: 61 6e 64 20 41 63 63 72 65 64 69 74 61 74 69 6f  and Accreditatio
3bc0: 6e 22 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  n".  In other wo
3bd0: 72 64 73 2c 20 74 68 65 0a 2a 2a 20 63 6f 64 65  rds, the.** code
3be0: 20 77 69 74 68 69 6e 20 56 56 41 5f 4f 4e 4c 59   within VVA_ONLY
3bf0: 28 29 20 77 69 6c 6c 20 6f 6e 6c 79 20 72 75 6e  () will only run
3c00: 20 64 75 72 69 6e 67 20 76 65 72 69 66 69 63 61   during verifica
3c10: 74 69 6f 6e 20 70 72 6f 63 65 73 73 65 73 2e 0a  tion processes..
3c20: 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55  */.#ifndef NDEBU
3c30: 47 0a 23 20 64 65 66 69 6e 65 20 56 56 41 5f 4f  G.# define VVA_O
3c40: 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c 73 65 0a  NLY(X)  X.#else.
3c50: 23 20 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c  # define VVA_ONL
3c60: 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  Y(X).#endif../*.
3c70: 2a 2a 20 54 68 65 20 41 4c 57 41 59 53 20 61 6e  ** The ALWAYS an
3c80: 64 20 4e 45 56 45 52 20 6d 61 63 72 6f 73 20 73  d NEVER macros s
3c90: 75 72 72 6f 75 6e 64 20 62 6f 6f 6c 65 61 6e 20  urround boolean 
3ca0: 65 78 70 72 65 73 73 69 6f 6e 73 20 77 68 69 63  expressions whic
3cb0: 68 0a 2a 2a 20 61 72 65 20 69 6e 74 65 6e 64 65  h.** are intende
3cc0: 64 20 74 6f 20 61 6c 77 61 79 73 20 62 65 20 74  d to always be t
3cd0: 72 75 65 20 6f 72 20 66 61 6c 73 65 2c 20 72 65  rue or false, re
3ce0: 73 70 65 63 74 69 76 65 6c 79 2e 20 20 53 75 63  spectively.  Suc
3cf0: 68 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 73  h.** expressions
3d00: 20 63 6f 75 6c 64 20 62 65 20 6f 6d 69 74 74 65   could be omitte
3d10: 64 20 66 72 6f 6d 20 74 68 65 20 63 6f 64 65 20  d from the code 
3d20: 63 6f 6d 70 6c 65 74 65 6c 79 2e 20 20 42 75 74  completely.  But
3d30: 20 74 68 65 79 0a 2a 2a 20 61 72 65 20 69 6e 63   they.** are inc
3d40: 6c 75 64 65 64 20 69 6e 20 61 20 66 65 77 20 63  luded in a few c
3d50: 61 73 65 73 20 69 6e 20 6f 72 64 65 72 20 74 6f  ases in order to
3d60: 20 65 6e 68 61 6e 63 65 20 74 68 65 20 72 65 73   enhance the res
3d70: 69 6c 69 65 6e 63 65 0a 2a 2a 20 6f 66 20 53 51  ilience.** of SQ
3d80: 4c 69 74 65 20 74 6f 20 75 6e 65 78 70 65 63 74  Lite to unexpect
3d90: 65 64 20 62 65 68 61 76 69 6f 72 20 2d 20 74 6f  ed behavior - to
3da0: 20 6d 61 6b 65 20 74 68 65 20 63 6f 64 65 20 22   make the code "
3db0: 73 65 6c 66 2d 68 65 61 6c 69 6e 67 22 0a 2a 2a  self-healing".**
3dc0: 20 6f 72 20 22 64 75 63 74 69 6c 65 22 20 72 61   or "ductile" ra
3dd0: 74 68 65 72 20 74 68 61 6e 20 62 65 69 6e 67 20  ther than being 
3de0: 22 62 72 69 74 74 6c 65 22 20 61 6e 64 20 63 72  "brittle" and cr
3df0: 61 73 68 69 6e 67 20 61 74 20 74 68 65 20 66 69  ashing at the fi
3e00: 72 73 74 0a 2a 2a 20 68 69 6e 74 20 6f 66 20 75  rst.** hint of u
3e10: 6e 70 6c 61 6e 6e 65 64 20 62 65 68 61 76 69 6f  nplanned behavio
3e20: 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f 74 68 65  r..**.** In othe
3e30: 72 20 77 6f 72 64 73 2c 20 41 4c 57 41 59 53 20  r words, ALWAYS 
3e40: 61 6e 64 20 4e 45 56 45 52 20 61 72 65 20 61 64  and NEVER are ad
3e50: 64 65 64 20 66 6f 72 20 64 65 66 65 6e 73 69 76  ded for defensiv
3e60: 65 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 57 68  e code..**.** Wh
3e70: 65 6e 20 64 6f 69 6e 67 20 63 6f 76 65 72 61 67  en doing coverag
3e80: 65 20 74 65 73 74 69 6e 67 20 41 4c 57 41 59 53  e testing ALWAYS
3e90: 20 61 6e 64 20 4e 45 56 45 52 20 61 72 65 20 68   and NEVER are h
3ea0: 61 72 64 2d 63 6f 64 65 64 20 74 6f 0a 2a 2a 20  ard-coded to.** 
3eb0: 62 65 20 74 72 75 65 20 61 6e 64 20 66 61 6c 73  be true and fals
3ec0: 65 20 73 6f 20 74 68 61 74 20 74 68 65 20 75 6e  e so that the un
3ed0: 72 65 61 63 68 61 62 6c 65 20 63 6f 64 65 20 74  reachable code t
3ee0: 68 65 79 20 73 70 65 63 69 66 79 20 77 69 6c 6c  hey specify will
3ef0: 0a 2a 2a 20 6e 6f 74 20 62 65 20 63 6f 75 6e 74  .** not be count
3f00: 65 64 20 61 73 20 75 6e 74 65 73 74 65 64 20 63  ed as untested c
3f10: 6f 64 65 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  ode..*/.#if defi
3f20: 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f 56 45 52  ned(SQLITE_COVER
3f30: 41 47 45 5f 54 45 53 54 29 20 7c 7c 20 64 65 66  AGE_TEST) || def
3f40: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 41  ined(SQLITE_MUTA
3f50: 54 49 4f 4e 5f 54 45 53 54 29 0a 23 20 64 65 66  TION_TEST).# def
3f60: 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20 20  ine ALWAYS(X)   
3f70: 20 20 20 28 31 29 0a 23 20 64 65 66 69 6e 65 20     (1).# define 
3f80: 4e 45 56 45 52 28 58 29 20 20 20 20 20 20 20 28  NEVER(X)       (
3f90: 30 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65  0).#elif !define
3fa0: 64 28 4e 44 45 42 55 47 29 0a 23 20 64 65 66 69  d(NDEBUG).# defi
3fb0: 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20 20 20  ne ALWAYS(X)    
3fc0: 20 20 28 28 58 29 3f 31 3a 28 61 73 73 65 72 74    ((X)?1:(assert
3fd0: 28 30 29 2c 30 29 29 0a 23 20 64 65 66 69 6e 65  (0),0)).# define
3fe0: 20 4e 45 56 45 52 28 58 29 20 20 20 20 20 20 20   NEVER(X)       
3ff0: 28 28 58 29 3f 28 61 73 73 65 72 74 28 30 29 2c  ((X)?(assert(0),
4000: 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  1):0).#else.# de
4010: 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20 20  fine ALWAYS(X)  
4020: 20 20 20 20 28 58 29 0a 23 20 64 65 66 69 6e 65      (X).# define
4030: 20 4e 45 56 45 52 28 58 29 20 20 20 20 20 20 20   NEVER(X)       
4040: 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (X).#endif../*.*
4050: 2a 20 53 6f 6d 65 20 6d 61 6c 6c 6f 63 20 66 61  * Some malloc fa
4060: 69 6c 75 72 65 73 20 61 72 65 20 6f 6e 6c 79 20  ilures are only 
4070: 70 6f 73 73 69 62 6c 65 20 69 66 20 53 51 4c 49  possible if SQLI
4080: 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c 4f 43 5f  TE_TEST_REALLOC_
4090: 53 54 52 45 53 53 20 69 73 0a 2a 2a 20 64 65 66  STRESS is.** def
40a0: 69 6e 65 64 2e 20 20 57 65 20 6e 65 65 64 20 74  ined.  We need t
40b0: 6f 20 64 65 66 65 6e 64 20 61 67 61 69 6e 73 74  o defend against
40c0: 20 74 68 6f 73 65 20 66 61 69 6c 75 72 65 73 20   those failures 
40d0: 77 68 65 6e 20 74 65 73 74 69 6e 67 20 77 69 74  when testing wit
40e0: 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 54 45 53 54  h.** SQLITE_TEST
40f0: 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53 2c  _REALLOC_STRESS,
4100: 20 62 75 74 20 77 65 20 64 6f 6e 27 74 20 77 61   but we don't wa
4110: 6e 74 20 74 68 65 20 75 6e 72 65 61 63 68 61 62  nt the unreachab
4120: 6c 65 20 62 72 61 6e 63 68 65 73 0a 2a 2a 20 64  le branches.** d
4130: 75 72 69 6e 67 20 61 20 6e 6f 72 6d 61 6c 20 62  uring a normal b
4140: 75 69 6c 64 2e 20 20 54 68 65 20 66 6f 6c 6c 6f  uild.  The follo
4150: 77 69 6e 67 20 6d 61 63 72 6f 20 63 61 6e 20 62  wing macro can b
4160: 65 20 75 73 65 64 20 74 6f 20 64 69 73 61 62 6c  e used to disabl
4170: 65 20 74 65 73 74 73 0a 2a 2a 20 74 68 61 74 20  e tests.** that 
4180: 61 72 65 20 61 6c 77 61 79 73 20 66 61 6c 73 65  are always false
4190: 20 65 78 63 65 70 74 20 77 68 65 6e 20 53 51 4c   except when SQL
41a0: 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c 4f 43  ITE_TEST_REALLOC
41b0: 5f 53 54 52 45 53 53 20 69 73 20 73 65 74 2e 0a  _STRESS is set..
41c0: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  */.#if defined(S
41d0: 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c  QLITE_TEST_REALL
41e0: 4f 43 5f 53 54 52 45 53 53 29 0a 23 20 64 65 66  OC_STRESS).# def
41f0: 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41 4c  ine ONLY_IF_REAL
4200: 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20 28  LOC_STRESS(X)  (
4210: 58 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65  X).#elif !define
4220: 64 28 4e 44 45 42 55 47 29 0a 23 20 64 65 66 69  d(NDEBUG).# defi
4230: 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41 4c 4c  ne ONLY_IF_REALL
4240: 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20 28 28  OC_STRESS(X)  ((
4250: 58 29 3f 28 61 73 73 65 72 74 28 30 29 2c 31 29  X)?(assert(0),1)
4260: 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  :0).#else.# defi
4270: 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45 41 4c 4c  ne ONLY_IF_REALL
4280: 4f 43 5f 53 54 52 45 53 53 28 58 29 20 20 28 30  OC_STRESS(X)  (0
4290: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
42a0: 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 75 73 65  Declarations use
42b0: 64 20 66 6f 72 20 74 72 61 63 69 6e 67 20 74 68  d for tracing th
42c0: 65 20 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74  e operating syst
42d0: 65 6d 20 69 6e 74 65 72 66 61 63 65 73 2e 0a 2a  em interfaces..*
42e0: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
42f0: 4c 49 54 45 5f 46 4f 52 43 45 5f 4f 53 5f 54 52  LITE_FORCE_OS_TR
4300: 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  ACE) || defined(
4310: 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c 20  SQLITE_TEST) || 
4320: 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28 53  \.    (defined(S
4330: 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26 20  QLITE_DEBUG) && 
4340: 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29 0a 20  SQLITE_OS_WIN). 
4350: 20 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69   extern int sqli
4360: 74 65 33 4f 53 54 72 61 63 65 3b 0a 23 20 64 65  te3OSTrace;.# de
4370: 66 69 6e 65 20 4f 53 54 52 41 43 45 28 58 29 20  fine OSTRACE(X) 
4380: 20 20 20 20 20 20 20 20 20 69 66 28 20 73 71 6c           if( sql
4390: 69 74 65 33 4f 53 54 72 61 63 65 20 29 20 73 71  ite3OSTrace ) sq
43a0: 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66  lite3DebugPrintf
43b0: 20 58 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49   X.# define SQLI
43c0: 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41 43 45  TE_HAVE_OS_TRACE
43d0: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
43e0: 4f 53 54 52 41 43 45 28 58 29 0a 23 20 75 6e 64  OSTRACE(X).# und
43f0: 65 66 20 20 53 51 4c 49 54 45 5f 48 41 56 45 5f  ef  SQLITE_HAVE_
4400: 4f 53 5f 54 52 41 43 45 0a 23 65 6e 64 69 66 0a  OS_TRACE.#endif.
4410: 0a 2f 2a 0a 2a 2a 20 49 73 20 74 68 65 20 73 71  ./*.** Is the sq
4420: 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 29 20 66  lite3ErrName() f
4430: 75 6e 63 74 69 6f 6e 20 6e 65 65 64 65 64 20 69  unction needed i
4440: 6e 20 74 68 65 20 62 75 69 6c 64 3f 20 20 43 75  n the build?  Cu
4450: 72 72 65 6e 74 6c 79 2c 0a 2a 2a 20 69 74 20 69  rrently,.** it i
4460: 73 20 6e 65 65 64 65 64 20 62 79 20 22 6d 75 74  s needed by "mut
4470: 65 78 5f 77 33 32 2e 63 22 20 28 77 68 65 6e 20  ex_w32.c" (when 
4480: 64 65 62 75 67 67 69 6e 67 29 2c 20 22 6f 73 5f  debugging), "os_
4490: 77 69 6e 2e 63 22 20 28 77 68 65 6e 0a 2a 2a 20  win.c" (when.** 
44a0: 4f 53 54 52 41 43 45 20 69 73 20 65 6e 61 62 6c  OSTRACE is enabl
44b0: 65 64 29 2c 20 61 6e 64 20 62 79 20 73 65 76 65  ed), and by seve
44c0: 72 61 6c 20 22 74 65 73 74 2a 2e 63 22 20 66 69  ral "test*.c" fi
44d0: 6c 65 73 20 28 77 68 69 63 68 20 61 72 65 0a 2a  les (which are.*
44e0: 2a 20 63 6f 6d 70 69 6c 65 64 20 75 73 69 6e 67  * compiled using
44f0: 20 53 51 4c 49 54 45 5f 54 45 53 54 29 2e 0a 2a   SQLITE_TEST)..*
4500: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
4510: 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41  LITE_HAVE_OS_TRA
4520: 43 45 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53  CE) || defined(S
4530: 51 4c 49 54 45 5f 54 45 53 54 29 20 7c 7c 20 5c  QLITE_TEST) || \
4540: 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28 53 51  .    (defined(SQ
4550: 4c 49 54 45 5f 44 45 42 55 47 29 20 26 26 20 53  LITE_DEBUG) && S
4560: 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29 0a 23 20  QLITE_OS_WIN).# 
4570: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 45  define SQLITE_NE
4580: 45 44 5f 45 52 52 5f 4e 41 4d 45 0a 23 65 6c 73  ED_ERR_NAME.#els
4590: 65 0a 23 20 75 6e 64 65 66 20 20 53 51 4c 49 54  e.# undef  SQLIT
45a0: 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 0a  E_NEED_ERR_NAME.
45b0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 51  #endif../*.** SQ
45c0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c  LITE_ENABLE_EXPL
45d0: 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69 73 20  AIN_COMMENTS is 
45e0: 69 6e 63 6f 6d 70 61 74 69 62 6c 65 20 77 69 74  incompatible wit
45f0: 68 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58  h SQLITE_OMIT_EX
4600: 50 4c 41 49 4e 0a 2a 2f 0a 23 69 66 64 65 66 20  PLAIN.*/.#ifdef 
4610: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c  SQLITE_OMIT_EXPL
4620: 41 49 4e 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  AIN.# undef SQLI
4630: 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49  TE_ENABLE_EXPLAI
4640: 4e 5f 43 4f 4d 4d 45 4e 54 53 0a 23 65 6e 64 69  N_COMMENTS.#endi
4650: 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  f../*.** Return 
4660: 74 72 75 65 20 28 6e 6f 6e 2d 7a 65 72 6f 29 20  true (non-zero) 
4670: 69 66 20 74 68 65 20 69 6e 70 75 74 20 69 73 20  if the input is 
4680: 61 6e 20 69 6e 74 65 67 65 72 20 74 68 61 74 20  an integer that 
4690: 69 73 20 74 6f 6f 20 6c 61 72 67 65 0a 2a 2a 20  is too large.** 
46a0: 74 6f 20 66 69 74 20 69 6e 20 33 32 2d 62 69 74  to fit in 32-bit
46b0: 73 2e 20 20 54 68 69 73 20 6d 61 63 72 6f 20 69  s.  This macro i
46c0: 73 20 75 73 65 64 20 69 6e 73 69 64 65 20 6f 66  s used inside of
46d0: 20 76 61 72 69 6f 75 73 20 74 65 73 74 63 61 73   various testcas
46e0: 65 28 29 0a 2a 2a 20 6d 61 63 72 6f 73 20 74 6f  e().** macros to
46f0: 20 76 65 72 69 66 79 20 74 68 61 74 20 77 65 20   verify that we 
4700: 68 61 76 65 20 74 65 73 74 65 64 20 53 51 4c 69  have tested SQLi
4710: 74 65 20 66 6f 72 20 6c 61 72 67 65 2d 66 69 6c  te for large-fil
4720: 65 20 73 75 70 70 6f 72 74 2e 0a 2a 2f 0a 23 64  e support..*/.#d
4730: 65 66 69 6e 65 20 49 53 5f 42 49 47 5f 49 4e 54  efine IS_BIG_INT
4740: 28 58 29 20 20 28 28 28 58 29 26 7e 28 69 36 34  (X)  (((X)&~(i64
4750: 29 30 78 66 66 66 66 66 66 66 66 29 21 3d 30 29  )0xffffffff)!=0)
4760: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61 63 72  ../*.** The macr
4770: 6f 20 75 6e 6c 69 6b 65 6c 79 28 29 20 69 73 20  o unlikely() is 
4780: 61 20 68 69 6e 74 20 74 68 61 74 20 73 75 72 72  a hint that surr
4790: 6f 75 6e 64 73 20 61 20 62 6f 6f 6c 65 61 6e 0a  ounds a boolean.
47a0: 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68  ** expression th
47b0: 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20 66 61  at is usually fa
47c0: 6c 73 65 2e 20 20 4d 61 63 72 6f 20 6c 69 6b 65  lse.  Macro like
47d0: 6c 79 28 29 20 73 75 72 72 6f 75 6e 64 73 0a 2a  ly() surrounds.*
47e0: 2a 20 61 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72  * a boolean expr
47f0: 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75  ession that is u
4800: 73 75 61 6c 6c 79 20 74 72 75 65 2e 20 20 54 68  sually true.  Th
4810: 65 73 65 20 68 69 6e 74 73 20 63 6f 75 6c 64 2c  ese hints could,
4820: 0a 2a 2a 20 69 6e 20 74 68 65 6f 72 79 2c 20 62  .** in theory, b
4830: 65 20 75 73 65 64 20 62 79 20 74 68 65 20 63 6f  e used by the co
4840: 6d 70 69 6c 65 72 20 74 6f 20 67 65 6e 65 72 61  mpiler to genera
4850: 74 65 20 62 65 74 74 65 72 20 63 6f 64 65 2c 20  te better code, 
4860: 62 75 74 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79  but.** currently
4870: 20 74 68 65 79 20 61 72 65 20 6a 75 73 74 20 63   they are just c
4880: 6f 6d 6d 65 6e 74 73 20 66 6f 72 20 68 75 6d 61  omments for huma
4890: 6e 20 72 65 61 64 65 72 73 2e 0a 2a 2f 0a 23 64  n readers..*/.#d
48a0: 65 66 69 6e 65 20 6c 69 6b 65 6c 79 28 58 29 20  efine likely(X) 
48b0: 20 20 20 28 58 29 0a 23 64 65 66 69 6e 65 20 75     (X).#define u
48c0: 6e 6c 69 6b 65 6c 79 28 58 29 20 20 28 58 29 0a  nlikely(X)  (X).
48d0: 0a 23 69 6e 63 6c 75 64 65 20 22 68 61 73 68 2e  .#include "hash.
48e0: 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 61 72  h".#include "par
48f0: 73 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 3c  se.h".#include <
4900: 73 74 64 69 6f 2e 68 3e 0a 23 69 6e 63 6c 75 64  stdio.h>.#includ
4910: 65 20 3c 73 74 64 6c 69 62 2e 68 3e 0a 23 69 6e  e <stdlib.h>.#in
4920: 63 6c 75 64 65 20 3c 73 74 72 69 6e 67 2e 68 3e  clude <string.h>
4930: 0a 23 69 6e 63 6c 75 64 65 20 3c 61 73 73 65 72  .#include <asser
4940: 74 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73  t.h>.#include <s
4950: 74 64 64 65 66 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20  tddef.h>../*.** 
4960: 55 73 65 20 61 20 6d 61 63 72 6f 20 74 6f 20 72  Use a macro to r
4970: 65 70 6c 61 63 65 20 6d 65 6d 63 70 79 28 29 20  eplace memcpy() 
4980: 69 66 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68  if compiled with
4990: 20 53 51 4c 49 54 45 5f 49 4e 4c 49 4e 45 5f 4d   SQLITE_INLINE_M
49a0: 45 4d 43 50 59 2e 0a 2a 2a 20 54 68 69 73 20 61  EMCPY..** This a
49b0: 6c 6c 6f 77 73 20 62 65 74 74 65 72 20 6d 65 61  llows better mea
49c0: 73 75 72 65 6d 65 6e 74 73 20 6f 66 20 77 68 65  surements of whe
49d0: 72 65 20 6d 65 6d 63 70 79 28 29 20 69 73 20 75  re memcpy() is u
49e0: 73 65 64 20 77 68 65 6e 20 72 75 6e 6e 69 6e 67  sed when running
49f0: 0a 2a 2a 20 63 61 63 68 65 67 72 69 6e 64 2e 20  .** cachegrind. 
4a00: 20 42 75 74 20 74 68 69 73 20 6d 61 63 72 6f 20   But this macro 
4a10: 76 65 72 73 69 6f 6e 20 6f 66 20 6d 65 6d 63 70  version of memcp
4a20: 79 28 29 20 69 73 20 76 65 72 79 20 73 6c 6f 77  y() is very slow
4a30: 20 73 6f 20 69 74 0a 2a 2a 20 73 68 6f 75 6c 64   so it.** should
4a40: 20 6e 6f 74 20 62 65 20 75 73 65 64 20 69 6e 20   not be used in 
4a50: 70 72 6f 64 75 63 74 69 6f 6e 2e 20 20 54 68 69  production.  Thi
4a60: 73 20 69 73 20 61 20 70 65 72 66 6f 72 6d 61 6e  s is a performan
4a70: 63 65 20 6d 65 61 73 75 72 65 6d 65 6e 74 0a 2a  ce measurement.*
4a80: 2a 20 68 61 63 6b 20 6f 6e 6c 79 2e 0a 2a 2f 0a  * hack only..*/.
4a90: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 49 4e  #ifdef SQLITE_IN
4aa0: 4c 49 4e 45 5f 4d 45 4d 43 50 59 0a 23 20 64 65  LINE_MEMCPY.# de
4ab0: 66 69 6e 65 20 6d 65 6d 63 70 79 28 44 2c 53 2c  fine memcpy(D,S,
4ac0: 4e 29 20 7b 63 68 61 72 2a 78 78 64 3d 28 63 68  N) {char*xxd=(ch
4ad0: 61 72 2a 29 28 44 29 3b 63 6f 6e 73 74 20 63 68  ar*)(D);const ch
4ae0: 61 72 2a 78 78 73 3d 28 63 6f 6e 73 74 20 63 68  ar*xxs=(const ch
4af0: 61 72 2a 29 28 53 29 3b 5c 0a 20 20 20 20 20 20  ar*)(S);\.      
4b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4b10: 20 20 69 6e 74 20 78 78 6e 3d 28 4e 29 3b 77 68    int xxn=(N);wh
4b20: 69 6c 65 28 78 78 6e 2d 2d 3e 30 29 2a 28 78 78  ile(xxn-->0)*(xx
4b30: 64 2b 2b 29 3d 2a 28 78 78 73 2b 2b 29 3b 7d 0a  d++)=*(xxs++);}.
4b40: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66  #endif../*.** If
4b50: 20 63 6f 6d 70 69 6c 69 6e 67 20 66 6f 72 20 61   compiling for a
4b60: 20 70 72 6f 63 65 73 73 6f 72 20 74 68 61 74 20   processor that 
4b70: 6c 61 63 6b 73 20 66 6c 6f 61 74 69 6e 67 20 70  lacks floating p
4b80: 6f 69 6e 74 20 73 75 70 70 6f 72 74 2c 0a 2a 2a  oint support,.**
4b90: 20 73 75 62 73 74 69 74 75 74 65 20 69 6e 74 65   substitute inte
4ba0: 67 65 72 20 66 6f 72 20 66 6c 6f 61 74 69 6e 67  ger for floating
4bb0: 2d 70 6f 69 6e 74 0a 2a 2f 0a 23 69 66 64 65 66  -point.*/.#ifdef
4bc0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
4bd0: 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 23 20 64 65  ATING_POINT.# de
4be0: 66 69 6e 65 20 64 6f 75 62 6c 65 20 73 71 6c 69  fine double sqli
4bf0: 74 65 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e  te_int64.# defin
4c00: 65 20 66 6c 6f 61 74 20 73 71 6c 69 74 65 5f 69  e float sqlite_i
4c10: 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20 4c 4f  nt64.# define LO
4c20: 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 73 71  NGDOUBLE_TYPE sq
4c30: 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 69 66 6e  lite_int64.# ifn
4c40: 64 65 66 20 53 51 4c 49 54 45 5f 42 49 47 5f 44  def SQLITE_BIG_D
4c50: 42 4c 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  BL.#   define SQ
4c60: 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20 28 28 28  LITE_BIG_DBL (((
4c70: 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 29 31 29  sqlite3_int64)1)
4c80: 3c 3c 35 30 29 0a 23 20 65 6e 64 69 66 0a 23 20  <<50).# endif.# 
4c90: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d  define SQLITE_OM
4ca0: 49 54 5f 44 41 54 45 54 49 4d 45 5f 46 55 4e 43  IT_DATETIME_FUNC
4cb0: 53 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  S 1.# define SQL
4cc0: 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 20 31  ITE_OMIT_TRACE 1
4cd0: 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f  .# undef SQLITE_
4ce0: 4d 49 58 45 44 5f 45 4e 44 49 41 4e 5f 36 34 42  MIXED_ENDIAN_64B
4cf0: 49 54 5f 46 4c 4f 41 54 0a 23 20 75 6e 64 65 66  IT_FLOAT.# undef
4d00: 20 53 51 4c 49 54 45 5f 48 41 56 45 5f 49 53 4e   SQLITE_HAVE_ISN
4d10: 41 4e 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  AN.#endif.#ifnde
4d20: 66 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c  f SQLITE_BIG_DBL
4d30: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
4d40: 5f 42 49 47 5f 44 42 4c 20 28 31 65 39 39 29 0a  _BIG_DBL (1e99).
4d50: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 4d  #endif../*.** OM
4d60: 49 54 5f 54 45 4d 50 44 42 20 69 73 20 73 65 74  IT_TEMPDB is set
4d70: 20 74 6f 20 31 20 69 66 20 53 51 4c 49 54 45 5f   to 1 if SQLITE_
4d80: 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69 73 20 64  OMIT_TEMPDB is d
4d90: 65 66 69 6e 65 64 2c 20 6f 72 20 30 0a 2a 2a 20  efined, or 0.** 
4da0: 61 66 74 65 72 77 61 72 64 2e 20 48 61 76 69 6e  afterward. Havin
4db0: 67 20 74 68 69 73 20 6d 61 63 72 6f 20 61 6c 6c  g this macro all
4dc0: 6f 77 73 20 75 73 20 74 6f 20 63 61 75 73 65 20  ows us to cause 
4dd0: 74 68 65 20 43 20 63 6f 6d 70 69 6c 65 72 0a 2a  the C compiler.*
4de0: 2a 20 74 6f 20 6f 6d 69 74 20 63 6f 64 65 20 75  * to omit code u
4df0: 73 65 64 20 62 79 20 54 45 4d 50 20 74 61 62 6c  sed by TEMP tabl
4e00: 65 73 20 77 69 74 68 6f 75 74 20 6d 65 73 73 79  es without messy
4e10: 20 23 69 66 6e 64 65 66 20 73 74 61 74 65 6d 65   #ifndef stateme
4e20: 6e 74 73 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  nts..*/.#ifdef S
4e30: 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44  QLITE_OMIT_TEMPD
4e40: 42 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54  B.#define OMIT_T
4e50: 45 4d 50 44 42 20 31 0a 23 65 6c 73 65 0a 23 64  EMPDB 1.#else.#d
4e60: 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44  efine OMIT_TEMPD
4e70: 42 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  B 0.#endif../*.*
4e80: 2a 20 54 68 65 20 22 66 69 6c 65 20 66 6f 72 6d  * The "file form
4e90: 61 74 22 20 6e 75 6d 62 65 72 20 69 73 20 61 6e  at" number is an
4ea0: 20 69 6e 74 65 67 65 72 20 74 68 61 74 20 69 73   integer that is
4eb0: 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 77 68 65   incremented whe
4ec0: 6e 65 76 65 72 0a 2a 2a 20 74 68 65 20 56 44 42  never.** the VDB
4ed0: 45 2d 6c 65 76 65 6c 20 66 69 6c 65 20 66 6f 72  E-level file for
4ee0: 6d 61 74 20 63 68 61 6e 67 65 73 2e 20 20 54 68  mat changes.  Th
4ef0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
4f00: 6f 73 20 64 65 66 69 6e 65 20 74 68 65 0a 2a 2a  os define the.**
4f10: 20 74 68 65 20 64 65 66 61 75 6c 74 20 66 69 6c   the default fil
4f20: 65 20 66 6f 72 6d 61 74 20 66 6f 72 20 6e 65 77  e format for new
4f30: 20 64 61 74 61 62 61 73 65 73 20 61 6e 64 20 74   databases and t
4f40: 68 65 20 6d 61 78 69 6d 75 6d 20 66 69 6c 65 20  he maximum file 
4f50: 66 6f 72 6d 61 74 0a 2a 2a 20 74 68 61 74 20 74  format.** that t
4f60: 68 65 20 6c 69 62 72 61 72 79 20 63 61 6e 20 72  he library can r
4f70: 65 61 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ead..*/.#define 
4f80: 53 51 4c 49 54 45 5f 4d 41 58 5f 46 49 4c 45 5f  SQLITE_MAX_FILE_
4f90: 46 4f 52 4d 41 54 20 34 0a 23 69 66 6e 64 65 66  FORMAT 4.#ifndef
4fa0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
4fb0: 46 49 4c 45 5f 46 4f 52 4d 41 54 0a 23 20 64 65  FILE_FORMAT.# de
4fc0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41  fine SQLITE_DEFA
4fd0: 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20  ULT_FILE_FORMAT 
4fe0: 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  4.#endif../*.** 
4ff0: 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65  Determine whethe
5000: 72 20 74 72 69 67 67 65 72 73 20 61 72 65 20 72  r triggers are r
5010: 65 63 75 72 73 69 76 65 20 62 79 20 64 65 66 61  ecursive by defa
5020: 75 6c 74 2e 20 20 54 68 69 73 20 63 61 6e 20 62  ult.  This can b
5030: 65 0a 2a 2a 20 63 68 61 6e 67 65 64 20 61 74 20  e.** changed at 
5040: 72 75 6e 2d 74 69 6d 65 20 75 73 69 6e 67 20 61  run-time using a
5050: 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 23 69 66 6e   pragma..*/.#ifn
5060: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  def SQLITE_DEFAU
5070: 4c 54 5f 52 45 43 55 52 53 49 56 45 5f 54 52 49  LT_RECURSIVE_TRI
5080: 47 47 45 52 53 0a 23 20 64 65 66 69 6e 65 20 53  GGERS.# define S
5090: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 52 45  QLITE_DEFAULT_RE
50a0: 43 55 52 53 49 56 45 5f 54 52 49 47 47 45 52 53  CURSIVE_TRIGGERS
50b0: 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   0.#endif../*.**
50c0: 20 50 72 6f 76 69 64 65 20 61 20 64 65 66 61 75   Provide a defau
50d0: 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 53 51 4c  lt value for SQL
50e0: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20 69  ITE_TEMP_STORE i
50f0: 6e 20 63 61 73 65 20 69 74 20 69 73 20 6e 6f 74  n case it is not
5100: 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20 6f 6e   specified.** on
5110: 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e   the command-lin
5120: 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  e.*/.#ifndef SQL
5130: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 0a 23  ITE_TEMP_STORE.#
5140: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54   define SQLITE_T
5150: 45 4d 50 5f 53 54 4f 52 45 20 31 0a 23 65 6e 64  EMP_STORE 1.#end
5160: 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 6e 6f 20  if../*.** If no 
5170: 76 61 6c 75 65 20 68 61 73 20 62 65 65 6e 20 70  value has been p
5180: 72 6f 76 69 64 65 64 20 66 6f 72 20 53 51 4c 49  rovided for SQLI
5190: 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48  TE_MAX_WORKER_TH
51a0: 52 45 41 44 53 2c 20 6f 72 20 69 66 0a 2a 2a 20  READS, or if.** 
51b0: 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52  SQLITE_TEMP_STOR
51c0: 45 20 69 73 20 73 65 74 20 74 6f 20 33 20 28 6e  E is set to 3 (n
51d0: 65 76 65 72 20 75 73 65 20 74 65 6d 70 6f 72 61  ever use tempora
51e0: 72 79 20 66 69 6c 65 73 29 2c 20 73 65 74 20 69  ry files), set i
51f0: 74 0a 2a 2a 20 74 6f 20 7a 65 72 6f 2e 0a 2a 2f  t.** to zero..*/
5200: 0a 23 69 66 20 53 51 4c 49 54 45 5f 54 45 4d 50  .#if SQLITE_TEMP
5210: 5f 53 54 4f 52 45 3d 3d 33 20 7c 7c 20 53 51 4c  _STORE==3 || SQL
5220: 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 3d 3d  ITE_THREADSAFE==
5230: 30 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  0.# undef SQLITE
5240: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
5250: 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ADS.# define SQL
5260: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
5270: 48 52 45 41 44 53 20 30 0a 23 65 6e 64 69 66 0a  HREADS 0.#endif.
5280: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d  #ifndef SQLITE_M
5290: 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
52a0: 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  S.# define SQLIT
52b0: 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52  E_MAX_WORKER_THR
52c0: 45 41 44 53 20 38 0a 23 65 6e 64 69 66 0a 23 69  EADS 8.#endif.#i
52d0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
52e0: 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45  AULT_WORKER_THRE
52f0: 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ADS.# define SQL
5300: 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b  ITE_DEFAULT_WORK
5310: 45 52 5f 54 48 52 45 41 44 53 20 30 0a 23 65 6e  ER_THREADS 0.#en
5320: 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45 5f 44  dif.#if SQLITE_D
5330: 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48  EFAULT_WORKER_TH
5340: 52 45 41 44 53 3e 53 51 4c 49 54 45 5f 4d 41 58  READS>SQLITE_MAX
5350: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a  _WORKER_THREADS.
5360: 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d  # undef SQLITE_M
5370: 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
5380: 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  S.# define SQLIT
5390: 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52  E_MAX_WORKER_THR
53a0: 45 41 44 53 20 53 51 4c 49 54 45 5f 44 45 46 41  EADS SQLITE_DEFA
53b0: 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  ULT_WORKER_THREA
53c0: 44 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  DS.#endif../*.**
53d0: 20 54 68 65 20 64 65 66 61 75 6c 74 20 69 6e 69   The default ini
53e0: 74 69 61 6c 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  tial allocation 
53f0: 66 6f 72 20 74 68 65 20 70 61 67 65 63 61 63 68  for the pagecach
5400: 65 20 77 68 65 6e 20 75 73 69 6e 67 20 73 65 70  e when using sep
5410: 61 72 61 74 65 0a 2a 2a 20 70 61 67 65 63 61 63  arate.** pagecac
5420: 68 65 73 20 66 6f 72 20 65 61 63 68 20 64 61 74  hes for each dat
5430: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
5440: 2e 20 20 41 20 70 6f 73 69 74 69 76 65 20 6e 75  .  A positive nu
5450: 6d 62 65 72 20 69 73 20 74 68 65 0a 2a 2a 20 6e  mber is the.** n
5460: 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 2e 20  umber of pages. 
5470: 20 41 20 6e 65 67 61 74 69 76 65 20 6e 75 6d 62   A negative numb
5480: 65 72 20 4e 20 74 72 61 6e 73 6c 61 74 69 6f 6e  er N translation
5490: 73 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 62  s means that a b
54a0: 75 66 66 65 72 0a 2a 2a 20 6f 66 20 2d 31 30 32  uffer.** of -102
54b0: 34 2a 4e 20 62 79 74 65 73 20 69 73 20 61 6c 6c  4*N bytes is all
54c0: 6f 63 61 74 65 64 20 61 6e 64 20 75 73 65 64 20  ocated and used 
54d0: 66 6f 72 20 61 73 20 6d 61 6e 79 20 70 61 67 65  for as many page
54e0: 73 20 61 73 20 69 74 20 77 69 6c 6c 20 68 6f 6c  s as it will hol
54f0: 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64 65 66  d..**.** The def
5500: 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 22 32  ault value of "2
5510: 30 22 20 77 61 73 20 63 68 6f 6f 73 65 6e 20 74  0" was choosen t
5520: 6f 20 6d 69 6e 69 6d 69 7a 65 20 74 68 65 20 72  o minimize the r
5530: 75 6e 2d 74 69 6d 65 20 6f 66 20 74 68 65 0a 2a  un-time of the.*
5540: 2a 20 73 70 65 65 64 74 65 73 74 31 20 74 65 73  * speedtest1 tes
5550: 74 20 70 72 6f 67 72 61 6d 20 77 69 74 68 20 6f  t program with o
5560: 70 74 69 6f 6e 73 3a 20 2d 2d 73 68 72 69 6e 6b  ptions: --shrink
5570: 2d 6d 65 6d 6f 72 79 20 2d 2d 72 65 70 72 65 70  -memory --reprep
5580: 61 72 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  are.*/.#ifndef S
5590: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 50 43  QLITE_DEFAULT_PC
55a0: 41 43 48 45 5f 49 4e 49 54 53 5a 0a 23 20 64 65  ACHE_INITSZ.# de
55b0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41  fine SQLITE_DEFA
55c0: 55 4c 54 5f 50 43 41 43 48 45 5f 49 4e 49 54 53  ULT_PCACHE_INITS
55d0: 5a 20 32 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  Z 20.#endif../*.
55e0: 2a 2a 20 47 43 43 20 64 6f 65 73 20 6e 6f 74 20  ** GCC does not 
55f0: 64 65 66 69 6e 65 20 74 68 65 20 6f 66 66 73 65  define the offse
5600: 74 6f 66 28 29 20 6d 61 63 72 6f 20 73 6f 20 77  tof() macro so w
5610: 65 27 6c 6c 20 68 61 76 65 20 74 6f 20 64 6f 20  e'll have to do 
5620: 69 74 0a 2a 2a 20 6f 75 72 73 65 6c 76 65 73 2e  it.** ourselves.
5630: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 6f 66 66 73  .*/.#ifndef offs
5640: 65 74 6f 66 0a 23 64 65 66 69 6e 65 20 6f 66 66  etof.#define off
5650: 73 65 74 6f 66 28 53 54 52 55 43 54 55 52 45 2c  setof(STRUCTURE,
5660: 46 49 45 4c 44 29 20 28 28 69 6e 74 29 28 28 63  FIELD) ((int)((c
5670: 68 61 72 2a 29 26 28 28 53 54 52 55 43 54 55 52  har*)&((STRUCTUR
5680: 45 2a 29 30 29 2d 3e 46 49 45 4c 44 29 29 0a 23  E*)0)->FIELD)).#
5690: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63  endif../*.** Mac
56a0: 72 6f 73 20 74 6f 20 63 6f 6d 70 75 74 65 20 6d  ros to compute m
56b0: 69 6e 69 6d 75 6d 20 61 6e 64 20 6d 61 78 69 6d  inimum and maxim
56c0: 75 6d 20 6f 66 20 74 77 6f 20 6e 75 6d 62 65 72  um of two number
56d0: 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 4d 49  s..*/.#ifndef MI
56e0: 4e 0a 23 20 64 65 66 69 6e 65 20 4d 49 4e 28 41  N.# define MIN(A
56f0: 2c 42 29 20 28 28 41 29 3c 28 42 29 3f 28 41 29  ,B) ((A)<(B)?(A)
5700: 3a 28 42 29 29 0a 23 65 6e 64 69 66 0a 23 69 66  :(B)).#endif.#if
5710: 6e 64 65 66 20 4d 41 58 0a 23 20 64 65 66 69 6e  ndef MAX.# defin
5720: 65 20 4d 41 58 28 41 2c 42 29 20 28 28 41 29 3e  e MAX(A,B) ((A)>
5730: 28 42 29 3f 28 41 29 3a 28 42 29 29 0a 23 65 6e  (B)?(A):(B)).#en
5740: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 77 61 70 20  dif../*.** Swap 
5750: 74 77 6f 20 6f 62 6a 65 63 74 73 20 6f 66 20 74  two objects of t
5760: 79 70 65 20 54 59 50 45 2e 0a 2a 2f 0a 23 64 65  ype TYPE..*/.#de
5770: 66 69 6e 65 20 53 57 41 50 28 54 59 50 45 2c 41  fine SWAP(TYPE,A
5780: 2c 42 29 20 7b 54 59 50 45 20 74 3d 41 3b 20 41  ,B) {TYPE t=A; A
5790: 3d 42 3b 20 42 3d 74 3b 7d 0a 0a 2f 2a 0a 2a 2a  =B; B=t;}../*.**
57a0: 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66   Check to see if
57b0: 20 74 68 69 73 20 6d 61 63 68 69 6e 65 20 75 73   this machine us
57c0: 65 73 20 45 42 43 44 49 43 2e 20 20 28 59 65 73  es EBCDIC.  (Yes
57d0: 2c 20 62 65 6c 69 65 76 65 20 69 74 20 6f 72 0a  , believe it or.
57e0: 2a 2a 20 6e 6f 74 2c 20 74 68 65 72 65 20 61 72  ** not, there ar
57f0: 65 20 73 74 69 6c 6c 20 6d 61 63 68 69 6e 65 73  e still machines
5800: 20 6f 75 74 20 74 68 65 72 65 20 74 68 61 74 20   out there that 
5810: 75 73 65 20 45 42 43 44 49 43 2e 29 0a 2a 2f 0a  use EBCDIC.).*/.
5820: 23 69 66 20 27 41 27 20 3d 3d 20 27 5c 33 30 31  #if 'A' == '\301
5830: 27 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  '.# define SQLIT
5840: 45 5f 45 42 43 44 49 43 20 31 0a 23 65 6c 73 65  E_EBCDIC 1.#else
5850: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5860: 5f 41 53 43 49 49 20 31 0a 23 65 6e 64 69 66 0a  _ASCII 1.#endif.
5870: 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 67 65 72 73 20  ./*.** Integers 
5880: 6f 66 20 6b 6e 6f 77 6e 20 73 69 7a 65 73 2e 20  of known sizes. 
5890: 20 54 68 65 73 65 20 74 79 70 65 64 65 66 73 20   These typedefs 
58a0: 6d 69 67 68 74 20 63 68 61 6e 67 65 20 66 6f 72  might change for
58b0: 20 61 72 63 68 69 74 65 63 74 75 72 65 73 0a 2a   architectures.*
58c0: 2a 20 77 68 65 72 65 20 74 68 65 20 73 69 7a 65  * where the size
58d0: 73 20 76 65 72 79 2e 20 20 50 72 65 70 72 6f 63  s very.  Preproc
58e0: 65 73 73 6f 72 20 6d 61 63 72 6f 73 20 61 72 65  essor macros are
58f0: 20 61 76 61 69 6c 61 62 6c 65 20 73 6f 20 74 68   available so th
5900: 61 74 20 74 68 65 0a 2a 2a 20 74 79 70 65 73 20  at the.** types 
5910: 63 61 6e 20 62 65 20 63 6f 6e 76 65 6e 69 65 6e  can be convenien
5920: 74 6c 79 20 72 65 64 65 66 69 6e 65 64 20 61 74  tly redefined at
5930: 20 63 6f 6d 70 69 6c 65 2d 74 79 70 65 2e 20 20   compile-type.  
5940: 4c 69 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a 2a  Like this:.**.**
5950: 20 20 20 20 20 20 20 20 20 63 63 20 27 2d 44 55           cc '-DU
5960: 49 4e 54 50 54 52 5f 54 59 50 45 3d 6c 6f 6e 67  INTPTR_TYPE=long
5970: 20 6c 6f 6e 67 20 69 6e 74 27 20 2e 2e 2e 0a 2a   long int' ....*
5980: 2f 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 33 32  /.#ifndef UINT32
5990: 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41  _TYPE.# ifdef HA
59a0: 56 45 5f 55 49 4e 54 33 32 5f 54 0a 23 20 20 64  VE_UINT32_T.#  d
59b0: 65 66 69 6e 65 20 55 49 4e 54 33 32 5f 54 59 50  efine UINT32_TYP
59c0: 45 20 75 69 6e 74 33 32 5f 74 0a 23 20 65 6c 73  E uint32_t.# els
59d0: 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54  e.#  define UINT
59e0: 33 32 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64  32_TYPE unsigned
59f0: 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e   int.# endif.#en
5a00: 64 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e 54  dif.#ifndef UINT
5a10: 31 36 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20  16_TYPE.# ifdef 
5a20: 48 41 56 45 5f 55 49 4e 54 31 36 5f 54 0a 23 20  HAVE_UINT16_T.# 
5a30: 20 64 65 66 69 6e 65 20 55 49 4e 54 31 36 5f 54   define UINT16_T
5a40: 59 50 45 20 75 69 6e 74 31 36 5f 74 0a 23 20 65  YPE uint16_t.# e
5a50: 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49  lse.#  define UI
5a60: 4e 54 31 36 5f 54 59 50 45 20 75 6e 73 69 67 6e  NT16_TYPE unsign
5a70: 65 64 20 73 68 6f 72 74 20 69 6e 74 0a 23 20 65  ed short int.# e
5a80: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e  ndif.#endif.#ifn
5a90: 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45 0a 23  def INT16_TYPE.#
5aa0: 20 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54 31   ifdef HAVE_INT1
5ab0: 36 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 49 4e  6_T.#  define IN
5ac0: 54 31 36 5f 54 59 50 45 20 69 6e 74 31 36 5f 74  T16_TYPE int16_t
5ad0: 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e  .# else.#  defin
5ae0: 65 20 49 4e 54 31 36 5f 54 59 50 45 20 73 68 6f  e INT16_TYPE sho
5af0: 72 74 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23  rt int.# endif.#
5b00: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55 49  endif.#ifndef UI
5b10: 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64 65 66  NT8_TYPE.# ifdef
5b20: 20 48 41 56 45 5f 55 49 4e 54 38 5f 54 0a 23 20   HAVE_UINT8_T.# 
5b30: 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f 54 59   define UINT8_TY
5b40: 50 45 20 75 69 6e 74 38 5f 74 0a 23 20 65 6c 73  PE uint8_t.# els
5b50: 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54  e.#  define UINT
5b60: 38 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20  8_TYPE unsigned 
5b70: 63 68 61 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e  char.# endif.#en
5b80: 64 69 66 0a 23 69 66 6e 64 65 66 20 49 4e 54 38  dif.#ifndef INT8
5b90: 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41  _TYPE.# ifdef HA
5ba0: 56 45 5f 49 4e 54 38 5f 54 0a 23 20 20 64 65 66  VE_INT8_T.#  def
5bb0: 69 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 69 6e  ine INT8_TYPE in
5bc0: 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64  t8_t.# else.#  d
5bd0: 65 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45 20  efine INT8_TYPE 
5be0: 73 69 67 6e 65 64 20 63 68 61 72 0a 23 20 65 6e  signed char.# en
5bf0: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  dif.#endif.#ifnd
5c00: 65 66 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59  ef LONGDOUBLE_TY
5c10: 50 45 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47  PE.# define LONG
5c20: 44 4f 55 42 4c 45 5f 54 59 50 45 20 6c 6f 6e 67  DOUBLE_TYPE long
5c30: 20 64 6f 75 62 6c 65 0a 23 65 6e 64 69 66 0a 74   double.#endif.t
5c40: 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f 69 6e  ypedef sqlite_in
5c50: 74 36 34 20 69 36 34 3b 20 20 20 20 20 20 20 20  t64 i64;        
5c60: 20 20 2f 2a 20 38 2d 62 79 74 65 20 73 69 67 6e    /* 8-byte sign
5c70: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
5c80: 70 65 64 65 66 20 73 71 6c 69 74 65 5f 75 69 6e  pedef sqlite_uin
5c90: 74 36 34 20 75 36 34 3b 20 20 20 20 20 20 20 20  t64 u64;        
5ca0: 20 2f 2a 20 38 2d 62 79 74 65 20 75 6e 73 69 67   /* 8-byte unsig
5cb0: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74  ned integer */.t
5cc0: 79 70 65 64 65 66 20 55 49 4e 54 33 32 5f 54 59  ypedef UINT32_TY
5cd0: 50 45 20 75 33 32 3b 20 20 20 20 20 20 20 20 20  PE u32;         
5ce0: 20 20 2f 2a 20 34 2d 62 79 74 65 20 75 6e 73 69    /* 4-byte unsi
5cf0: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a  gned integer */.
5d00: 74 79 70 65 64 65 66 20 55 49 4e 54 31 36 5f 54  typedef UINT16_T
5d10: 59 50 45 20 75 31 36 3b 20 20 20 20 20 20 20 20  YPE u16;        
5d20: 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 75 6e 73     /* 2-byte uns
5d30: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
5d40: 0a 74 79 70 65 64 65 66 20 49 4e 54 31 36 5f 54  .typedef INT16_T
5d50: 59 50 45 20 69 31 36 3b 20 20 20 20 20 20 20 20  YPE i16;        
5d60: 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 73 69      /* 2-byte si
5d70: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a  gned integer */.
5d80: 74 79 70 65 64 65 66 20 55 49 4e 54 38 5f 54 59  typedef UINT8_TY
5d90: 50 45 20 75 38 3b 20 20 20 20 20 20 20 20 20 20  PE u8;          
5da0: 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 75 6e 73     /* 1-byte uns
5db0: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
5dc0: 0a 74 79 70 65 64 65 66 20 49 4e 54 38 5f 54 59  .typedef INT8_TY
5dd0: 50 45 20 69 38 3b 20 20 20 20 20 20 20 20 20 20  PE i8;          
5de0: 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 73 69      /* 1-byte si
5df0: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a  gned integer */.
5e00: 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d 41  ./*.** SQLITE_MA
5e10: 58 5f 55 33 32 20 69 73 20 61 20 75 36 34 20 63  X_U32 is a u64 c
5e20: 6f 6e 73 74 61 6e 74 20 74 68 61 74 20 69 73 20  onstant that is 
5e30: 74 68 65 20 6d 61 78 69 6d 75 6d 20 75 36 34 20  the maximum u64 
5e40: 76 61 6c 75 65 0a 2a 2a 20 74 68 61 74 20 63 61  value.** that ca
5e50: 6e 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61  n be stored in a
5e60: 20 75 33 32 20 77 69 74 68 6f 75 74 20 6c 6f 73   u32 without los
5e70: 73 20 6f 66 20 64 61 74 61 2e 20 20 54 68 65 20  s of data.  The 
5e80: 76 61 6c 75 65 0a 2a 2a 20 69 73 20 30 78 30 30  value.** is 0x00
5e90: 30 30 30 30 30 30 66 66 66 66 66 66 66 66 2e 20  000000ffffffff. 
5ea0: 20 42 75 74 20 62 65 63 61 75 73 65 20 6f 66 20   But because of 
5eb0: 71 75 69 72 6b 73 20 6f 66 20 73 6f 6d 65 20 63  quirks of some c
5ec0: 6f 6d 70 69 6c 65 72 73 2c 20 77 65 0a 2a 2a 20  ompilers, we.** 
5ed0: 68 61 76 65 20 74 6f 20 73 70 65 63 69 66 79 20  have to specify 
5ee0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 74 68 65  the value in the
5ef0: 20 6c 65 73 73 20 69 6e 74 75 69 74 69 76 65 20   less intuitive 
5f00: 6d 61 6e 6e 65 72 20 73 68 6f 77 6e 3a 0a 2a 2f  manner shown:.*/
5f10: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
5f20: 4d 41 58 5f 55 33 32 20 20 28 28 28 28 75 36 34  MAX_U32  ((((u64
5f30: 29 31 29 3c 3c 33 32 29 2d 31 29 0a 0a 2f 2a 0a  )1)<<32)-1)../*.
5f40: 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70 65 20  ** The datatype 
5f50: 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 65 73  used to store es
5f60: 74 69 6d 61 74 65 73 20 6f 66 20 74 68 65 20 6e  timates of the n
5f70: 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e  umber of rows in
5f80: 20 61 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69   a.** table or i
5f90: 6e 64 65 78 2e 20 20 54 68 69 73 20 69 73 20 61  ndex.  This is a
5fa0: 6e 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67  n unsigned integ
5fb0: 65 72 20 74 79 70 65 2e 20 20 46 6f 72 20 39 39  er type.  For 99
5fc0: 2e 39 25 20 6f 66 0a 2a 2a 20 74 68 65 20 77 6f  .9% of.** the wo
5fd0: 72 6c 64 2c 20 61 20 33 32 2d 62 69 74 20 69 6e  rld, a 32-bit in
5fe0: 74 65 67 65 72 20 69 73 20 73 75 66 66 69 63 69  teger is suffici
5ff0: 65 6e 74 2e 20 20 42 75 74 20 61 20 36 34 2d 62  ent.  But a 64-b
6000: 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63 61  it integer.** ca
6010: 6e 20 62 65 20 75 73 65 64 20 61 74 20 63 6f 6d  n be used at com
6020: 70 69 6c 65 2d 74 69 6d 65 20 69 66 20 64 65 73  pile-time if des
6030: 69 72 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  ired..*/.#ifdef 
6040: 53 51 4c 49 54 45 5f 36 34 42 49 54 5f 53 54 41  SQLITE_64BIT_STA
6050: 54 53 0a 20 74 79 70 65 64 65 66 20 75 36 34 20  TS. typedef u64 
6060: 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20 36  tRowcnt;    /* 6
6070: 34 2d 62 69 74 20 6f 6e 6c 79 20 69 66 20 72 65  4-bit only if re
6080: 71 75 65 73 74 65 64 20 61 74 20 63 6f 6d 70 69  quested at compi
6090: 6c 65 2d 74 69 6d 65 20 2a 2f 0a 23 65 6c 73 65  le-time */.#else
60a0: 0a 20 74 79 70 65 64 65 66 20 75 33 32 20 74 52  . typedef u32 tR
60b0: 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20 33 32 2d  owcnt;    /* 32-
60c0: 62 69 74 20 69 73 20 74 68 65 20 64 65 66 61 75  bit is the defau
60d0: 6c 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a  lt */.#endif../*
60e0: 0a 2a 2a 20 45 73 74 69 6d 61 74 65 64 20 71 75  .** Estimated qu
60f0: 61 6e 74 69 74 69 65 73 20 75 73 65 64 20 66 6f  antities used fo
6100: 72 20 71 75 65 72 79 20 70 6c 61 6e 6e 69 6e 67  r query planning
6110: 20 61 72 65 20 73 74 6f 72 65 64 20 61 73 20 31   are stored as 1
6120: 36 2d 62 69 74 0a 2a 2a 20 6c 6f 67 61 72 69 74  6-bit.** logarit
6130: 68 6d 73 2e 20 20 46 6f 72 20 71 75 61 6e 74 69  hms.  For quanti
6140: 74 79 20 58 2c 20 74 68 65 20 76 61 6c 75 65 20  ty X, the value 
6150: 73 74 6f 72 65 64 20 69 73 20 31 30 2a 6c 6f 67  stored is 10*log
6160: 32 28 58 29 2e 20 20 54 68 69 73 0a 2a 2a 20 67  2(X).  This.** g
6170: 69 76 65 73 20 61 20 70 6f 73 73 69 62 6c 65 20  ives a possible 
6180: 72 61 6e 67 65 20 6f 66 20 76 61 6c 75 65 73 20  range of values 
6190: 6f 66 20 61 70 70 72 6f 78 69 6d 61 74 65 6c 79  of approximately
61a0: 20 31 2e 30 65 39 38 36 20 74 6f 20 31 65 2d 39   1.0e986 to 1e-9
61b0: 38 36 2e 0a 2a 2a 20 42 75 74 20 74 68 65 20 61  86..** But the a
61c0: 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 61 72  llowed values ar
61d0: 65 20 22 67 72 61 69 6e 79 22 2e 20 20 4e 6f 74  e "grainy".  Not
61e0: 20 65 76 65 72 79 20 76 61 6c 75 65 20 69 73 20   every value is 
61f0: 72 65 70 72 65 73 65 6e 74 61 62 6c 65 2e 0a 2a  representable..*
6200: 2a 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 71  * For example, q
6210: 75 61 6e 74 69 74 69 65 73 20 31 36 20 61 6e 64  uantities 16 and
6220: 20 31 37 20 61 72 65 20 62 6f 74 68 20 72 65 70   17 are both rep
6230: 72 65 73 65 6e 74 65 64 20 62 79 20 61 20 4c 6f  resented by a Lo
6240: 67 45 73 74 0a 2a 2a 20 6f 66 20 34 30 2e 20 20  gEst.** of 40.  
6250: 48 6f 77 65 76 65 72 2c 20 73 69 6e 63 65 20 4c  However, since L
6260: 6f 67 45 73 74 20 71 75 61 6e 74 69 74 69 65 73  ogEst quantities
6270: 20 61 72 65 20 73 75 70 70 6f 73 65 20 74 6f 20   are suppose to 
6280: 62 65 20 65 73 74 69 6d 61 74 65 73 2c 0a 2a 2a  be estimates,.**
6290: 20 6e 6f 74 20 65 78 61 63 74 20 76 61 6c 75 65   not exact value
62a0: 73 2c 20 74 68 69 73 20 69 6d 70 72 65 63 69 73  s, this imprecis
62b0: 69 6f 6e 20 69 73 20 6e 6f 74 20 61 20 70 72 6f  ion is not a pro
62c0: 62 6c 65 6d 2e 0a 2a 2a 0a 2a 2a 20 22 4c 6f 67  blem..**.** "Log
62d0: 45 73 74 22 20 69 73 20 73 68 6f 72 74 20 66 6f  Est" is short fo
62e0: 72 20 22 4c 6f 67 61 72 69 74 68 6d 69 63 20 45  r "Logarithmic E
62f0: 73 74 69 6d 61 74 65 22 2e 0a 2a 2a 0a 2a 2a 20  stimate"..**.** 
6300: 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 20 20 20 20  Examples:.**    
6310: 20 20 31 20 2d 3e 20 30 20 20 20 20 20 20 20 20    1 -> 0        
6320: 20 20 20 20 20 20 32 30 20 2d 3e 20 34 33 20 20        20 -> 43  
6330: 20 20 20 20 20 20 20 20 31 30 30 30 30 20 2d 3e          10000 ->
6340: 20 31 33 32 0a 2a 2a 20 20 20 20 20 20 32 20 2d   132.**      2 -
6350: 3e 20 31 30 20 20 20 20 20 20 20 20 20 20 20 20  > 10            
6360: 20 32 35 20 2d 3e 20 34 36 20 20 20 20 20 20 20   25 -> 46       
6370: 20 20 20 32 35 30 30 30 20 2d 3e 20 31 34 36 0a     25000 -> 146.
6380: 2a 2a 20 20 20 20 20 20 33 20 2d 3e 20 31 36 20  **      3 -> 16 
6390: 20 20 20 20 20 20 20 20 20 20 20 31 30 30 20 2d             100 -
63a0: 3e 20 36 36 20 20 20 20 20 20 20 20 31 30 30 30  > 66        1000
63b0: 30 30 30 20 2d 3e 20 31 39 39 0a 2a 2a 20 20 20  000 -> 199.**   
63c0: 20 20 20 34 20 2d 3e 20 32 30 20 20 20 20 20 20     4 -> 20      
63d0: 20 20 20 20 20 31 30 30 30 20 2d 3e 20 39 39 20       1000 -> 99 
63e0: 20 20 20 20 20 20 20 31 30 34 38 35 37 36 20 2d         1048576 -
63f0: 3e 20 32 30 30 0a 2a 2a 20 20 20 20 20 31 30 20  > 200.**     10 
6400: 2d 3e 20 33 33 20 20 20 20 20 20 20 20 20 20 20  -> 33           
6410: 31 30 32 34 20 2d 3e 20 31 30 30 20 20 20 20 34  1024 -> 100    4
6420: 32 39 34 39 36 37 32 39 36 20 2d 3e 20 33 32 30  294967296 -> 320
6430: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 67 45 73  .**.** The LogEs
6440: 74 20 63 61 6e 20 62 65 20 6e 65 67 61 74 69 76  t can be negativ
6450: 65 20 74 6f 20 69 6e 64 69 63 61 74 65 20 66 72  e to indicate fr
6460: 61 63 74 69 6f 6e 61 6c 20 76 61 6c 75 65 73 2e  actional values.
6470: 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a  .** Examples:.**
6480: 0a 2a 2a 20 20 20 20 30 2e 35 20 2d 3e 20 2d 31  .**    0.5 -> -1
6490: 30 20 20 20 20 20 20 20 20 20 20 20 30 2e 31 20  0           0.1 
64a0: 2d 3e 20 2d 33 33 20 20 20 20 20 20 20 20 30 2e  -> -33        0.
64b0: 30 36 32 35 20 2d 3e 20 2d 34 30 0a 2a 2f 0a 74  0625 -> -40.*/.t
64c0: 79 70 65 64 65 66 20 49 4e 54 31 36 5f 54 59 50  ypedef INT16_TYP
64d0: 45 20 4c 6f 67 45 73 74 3b 0a 0a 2f 2a 0a 2a 2a  E LogEst;../*.**
64e0: 20 53 65 74 20 74 68 65 20 53 51 4c 49 54 45 5f   Set the SQLITE_
64f0: 50 54 52 53 49 5a 45 20 6d 61 63 72 6f 20 74 6f  PTRSIZE macro to
6500: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62   the number of b
6510: 79 74 65 73 20 69 6e 20 61 20 70 6f 69 6e 74 65  ytes in a pointe
6520: 72 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  r.*/.#ifndef SQL
6530: 49 54 45 5f 50 54 52 53 49 5a 45 0a 23 20 69 66  ITE_PTRSIZE.# if
6540: 20 64 65 66 69 6e 65 64 28 5f 5f 53 49 5a 45 4f   defined(__SIZEO
6550: 46 5f 50 4f 49 4e 54 45 52 5f 5f 29 0a 23 20 20  F_POINTER__).#  
6560: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50   define SQLITE_P
6570: 54 52 53 49 5a 45 20 5f 5f 53 49 5a 45 4f 46 5f  TRSIZE __SIZEOF_
6580: 50 4f 49 4e 54 45 52 5f 5f 0a 23 20 65 6c 69 66  POINTER__.# elif
6590: 20 64 65 66 69 6e 65 64 28 69 33 38 36 29 20 20   defined(i386)  
65a0: 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f     || defined(__
65b0: 69 33 38 36 5f 5f 29 20 20 20 7c 7c 20 64 65 66  i386__)   || def
65c0: 69 6e 65 64 28 5f 4d 5f 49 58 38 36 29 20 7c 7c  ined(_M_IX86) ||
65d0: 20 20 20 20 5c 0a 20 20 20 20 20 20 20 64 65 66      \.       def
65e0: 69 6e 65 64 28 5f 4d 5f 41 52 4d 29 20 20 20 7c  ined(_M_ARM)   |
65f0: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 61 72 6d 5f  | defined(__arm_
6600: 5f 29 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64  _)    || defined
6610: 28 5f 5f 78 38 36 29 0a 23 20 20 20 64 65 66 69  (__x86).#   defi
6620: 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a  ne SQLITE_PTRSIZ
6630: 45 20 34 0a 23 20 65 6c 73 65 0a 23 20 20 20 64  E 4.# else.#   d
6640: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
6650: 53 49 5a 45 20 38 0a 23 20 65 6e 64 69 66 0a 23  SIZE 8.# endif.#
6660: 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65 20 75 70  endif../* The up
6670: 74 72 20 74 79 70 65 20 69 73 20 61 6e 20 75 6e  tr type is an un
6680: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 6c  signed integer l
6690: 61 72 67 65 20 65 6e 6f 75 67 68 20 74 6f 20 68  arge enough to h
66a0: 6f 6c 64 20 61 20 70 6f 69 6e 74 65 72 0a 2a 2f  old a pointer.*/
66b0: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 48 41 56  .#if defined(HAV
66c0: 45 5f 53 54 44 49 4e 54 5f 48 29 0a 20 20 74 79  E_STDINT_H).  ty
66d0: 70 65 64 65 66 20 75 69 6e 74 70 74 72 5f 74 20  pedef uintptr_t 
66e0: 75 70 74 72 3b 0a 23 65 6c 69 66 20 53 51 4c 49  uptr;.#elif SQLI
66f0: 54 45 5f 50 54 52 53 49 5a 45 3d 3d 34 0a 20 20  TE_PTRSIZE==4.  
6700: 74 79 70 65 64 65 66 20 75 33 32 20 75 70 74 72  typedef u32 uptr
6710: 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64 65  ;.#else.  typede
6720: 66 20 75 36 34 20 75 70 74 72 3b 0a 23 65 6e 64  f u64 uptr;.#end
6730: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51  if../*.** The SQ
6740: 4c 49 54 45 5f 57 49 54 48 49 4e 28 50 2c 53 2c  LITE_WITHIN(P,S,
6750: 45 29 20 6d 61 63 72 6f 20 63 68 65 63 6b 73 20  E) macro checks 
6760: 74 6f 20 73 65 65 20 69 66 20 70 6f 69 6e 74 65  to see if pointe
6770: 72 20 50 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a  r P points to.**
6780: 20 73 6f 6d 65 74 68 69 6e 67 20 62 65 74 77 65   something betwe
6790: 65 6e 20 53 20 28 69 6e 63 6c 75 73 69 76 65 29  en S (inclusive)
67a0: 20 61 6e 64 20 45 20 28 65 78 63 6c 75 73 69 76   and E (exclusiv
67b0: 65 29 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f 74 68  e)..**.** In oth
67c0: 65 72 20 77 6f 72 64 73 2c 20 53 20 69 73 20 61  er words, S is a
67d0: 20 62 75 66 66 65 72 20 61 6e 64 20 45 20 69 73   buffer and E is
67e0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
67f0: 65 20 66 69 72 73 74 20 62 79 74 65 20 61 66 74  e first byte aft
6800: 65 72 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66  er.** the end of
6810: 20 62 75 66 66 65 72 20 53 2e 20 20 54 68 69 73   buffer S.  This
6820: 20 6d 61 63 72 6f 20 72 65 74 75 72 6e 73 20 74   macro returns t
6830: 72 75 65 20 69 66 20 50 20 70 6f 69 6e 74 73 20  rue if P points 
6840: 74 6f 20 73 6f 6d 65 74 68 69 6e 67 0a 2a 2a 20  to something.** 
6850: 63 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e  contained within
6860: 20 74 68 65 20 62 75 66 66 65 72 20 53 2e 0a 2a   the buffer S..*
6870: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
6880: 5f 57 49 54 48 49 4e 28 50 2c 53 2c 45 29 20 28  _WITHIN(P,S,E) (
6890: 28 28 75 70 74 72 29 28 50 29 3e 3d 28 75 70 74  ((uptr)(P)>=(upt
68a0: 72 29 28 53 29 29 26 26 28 28 75 70 74 72 29 28  r)(S))&&((uptr)(
68b0: 50 29 3c 28 75 70 74 72 29 28 45 29 29 29 0a 0a  P)<(uptr)(E)))..
68c0: 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f  ./*.** Macros to
68d0: 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68   determine wheth
68e0: 65 72 20 74 68 65 20 6d 61 63 68 69 6e 65 20 69  er the machine i
68f0: 73 20 62 69 67 20 6f 72 20 6c 69 74 74 6c 65 20  s big or little 
6900: 65 6e 64 69 61 6e 2c 0a 2a 2a 20 61 6e 64 20 77  endian,.** and w
6910: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68  hether or not th
6920: 61 74 20 64 65 74 65 72 6d 69 6e 61 74 69 6f 6e  at determination
6930: 20 69 73 20 72 75 6e 2d 74 69 6d 65 20 6f 72 20   is run-time or 
6940: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2e 0a 2a 2a  compile-time..**
6950: 0a 2a 2a 20 46 6f 72 20 62 65 73 74 20 70 65 72  .** For best per
6960: 66 6f 72 6d 61 6e 63 65 2c 20 61 6e 20 61 74 74  formance, an att
6970: 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20  empt is made to 
6980: 67 75 65 73 73 20 61 74 20 74 68 65 20 62 79 74  guess at the byt
6990: 65 2d 6f 72 64 65 72 0a 2a 2a 20 75 73 69 6e 67  e-order.** using
69a0: 20 43 2d 70 72 65 70 72 6f 63 65 73 73 6f 72 20   C-preprocessor 
69b0: 6d 61 63 72 6f 73 2e 20 20 49 66 20 74 68 61 74  macros.  If that
69c0: 20 69 73 20 75 6e 73 75 63 63 65 73 73 66 75 6c   is unsuccessful
69d0: 2c 20 6f 72 20 69 66 0a 2a 2a 20 2d 44 53 51 4c  , or if.** -DSQL
69e0: 49 54 45 5f 42 59 54 45 4f 52 44 45 52 3d 30 20  ITE_BYTEORDER=0 
69f0: 69 73 20 73 65 74 2c 20 74 68 65 6e 20 62 79 74  is set, then byt
6a00: 65 2d 6f 72 64 65 72 20 69 73 20 64 65 74 65 72  e-order is deter
6a10: 6d 69 6e 65 64 0a 2a 2a 20 61 74 20 72 75 6e 2d  mined.** at run-
6a20: 74 69 6d 65 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  time..*/.#ifndef
6a30: 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45   SQLITE_BYTEORDE
6a40: 52 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28 69  R.# if defined(i
6a50: 33 38 36 29 20 20 20 20 20 7c 7c 20 64 65 66 69  386)     || defi
6a60: 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20 20 20  ned(__i386__)   
6a70: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49 58  || defined(_M_IX
6a80: 38 36 29 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20  86) ||    \.    
6a90: 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36   defined(__x86_6
6aa0: 34 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f  4) || defined(__
6ab0: 78 38 36 5f 36 34 5f 5f 29 20 7c 7c 20 64 65 66  x86_64__) || def
6ac0: 69 6e 65 64 28 5f 4d 5f 58 36 34 29 20 20 7c 7c  ined(_M_X64)  ||
6ad0: 20 20 20 20 5c 0a 20 20 20 20 20 64 65 66 69 6e      \.     defin
6ae0: 65 64 28 5f 4d 5f 41 4d 44 36 34 29 20 7c 7c 20  ed(_M_AMD64) || 
6af0: 64 65 66 69 6e 65 64 28 5f 4d 5f 41 52 4d 29 20  defined(_M_ARM) 
6b00: 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f      || defined(_
6b10: 5f 78 38 36 29 20 20 20 7c 7c 20 20 20 20 5c 0a  _x86)   ||    \.
6b20: 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 61       defined(__a
6b30: 72 6d 5f 5f 29 0a 23 20 20 20 64 65 66 69 6e 65  rm__).#   define
6b40: 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45   SQLITE_BYTEORDE
6b50: 52 20 20 20 20 31 32 33 34 0a 23 20 65 6c 69 66  R    1234.# elif
6b60: 20 64 65 66 69 6e 65 64 28 73 70 61 72 63 29 20   defined(sparc) 
6b70: 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f     || defined(__
6b80: 70 70 63 5f 5f 29 0a 23 20 20 20 64 65 66 69 6e  ppc__).#   defin
6b90: 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44  e SQLITE_BYTEORD
6ba0: 45 52 20 20 20 20 34 33 32 31 0a 23 20 65 6c 73  ER    4321.# els
6bb0: 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  e.#   define SQL
6bc0: 49 54 45 5f 42 59 54 45 4f 52 44 45 52 20 30 0a  ITE_BYTEORDER 0.
6bd0: 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23  # endif.#endif.#
6be0: 69 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52  if SQLITE_BYTEOR
6bf0: 44 45 52 3d 3d 34 33 32 31 0a 23 20 64 65 66 69  DER==4321.# defi
6c00: 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44  ne SQLITE_BIGEND
6c10: 49 41 4e 20 20 20 20 31 0a 23 20 64 65 66 69 6e  IAN    1.# defin
6c20: 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45  e SQLITE_LITTLEE
6c30: 4e 44 49 41 4e 20 30 0a 23 20 64 65 66 69 6e 65  NDIAN 0.# define
6c40: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
6c50: 49 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46 31  IVE  SQLITE_UTF1
6c60: 36 42 45 0a 23 65 6c 69 66 20 53 51 4c 49 54 45  6BE.#elif SQLITE
6c70: 5f 42 59 54 45 4f 52 44 45 52 3d 3d 31 32 33 34  _BYTEORDER==1234
6c80: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
6c90: 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 30 0a  _BIGENDIAN    0.
6ca0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
6cb0: 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 31 0a 23  LITTLEENDIAN 1.#
6cc0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55   define SQLITE_U
6cd0: 54 46 31 36 4e 41 54 49 56 45 20 20 53 51 4c 49  TF16NATIVE  SQLI
6ce0: 54 45 5f 55 54 46 31 36 4c 45 0a 23 65 6c 73 65  TE_UTF16LE.#else
6cf0: 0a 23 20 69 66 64 65 66 20 53 51 4c 49 54 45 5f  .# ifdef SQLITE_
6d00: 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 20 20 63  AMALGAMATION.  c
6d10: 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74 65 33  onst int sqlite3
6d20: 6f 6e 65 20 3d 20 31 3b 0a 23 20 65 6c 73 65 0a  one = 1;.# else.
6d30: 20 20 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 69    extern const i
6d40: 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 3b 0a 23  nt sqlite3one;.#
6d50: 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20   endif.# define 
6d60: 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e  SQLITE_BIGENDIAN
6d70: 20 20 20 20 28 2a 28 63 68 61 72 20 2a 29 28 26      (*(char *)(&
6d80: 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 30 29 0a  sqlite3one)==0).
6d90: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
6da0: 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 28 2a 28  LITTLEENDIAN (*(
6db0: 63 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65 33  char *)(&sqlite3
6dc0: 6f 6e 65 29 3d 3d 31 29 0a 23 20 64 65 66 69 6e  one)==1).# defin
6dd0: 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  e SQLITE_UTF16NA
6de0: 54 49 56 45 20 20 28 53 51 4c 49 54 45 5f 42 49  TIVE  (SQLITE_BI
6df0: 47 45 4e 44 49 41 4e 3f 53 51 4c 49 54 45 5f 55  GENDIAN?SQLITE_U
6e00: 54 46 31 36 42 45 3a 53 51 4c 49 54 45 5f 55 54  TF16BE:SQLITE_UT
6e10: 46 31 36 4c 45 29 0a 23 65 6e 64 69 66 0a 0a 2f  F16LE).#endif../
6e20: 2a 0a 2a 2a 20 43 6f 6e 73 74 61 6e 74 73 20 66  *.** Constants f
6e30: 6f 72 20 74 68 65 20 6c 61 72 67 65 73 74 20 61  or the largest a
6e40: 6e 64 20 73 6d 61 6c 6c 65 73 74 20 70 6f 73 73  nd smallest poss
6e50: 69 62 6c 65 20 36 34 2d 62 69 74 20 73 69 67 6e  ible 64-bit sign
6e60: 65 64 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20  ed integers..** 
6e70: 54 68 65 73 65 20 6d 61 63 72 6f 73 20 61 72 65  These macros are
6e80: 20 64 65 73 69 67 6e 65 64 20 74 6f 20 77 6f 72   designed to wor
6e90: 6b 20 63 6f 72 72 65 63 74 6c 79 20 6f 6e 20 62  k correctly on b
6ea0: 6f 74 68 20 33 32 2d 62 69 74 20 61 6e 64 20 36  oth 32-bit and 6
6eb0: 34 2d 62 69 74 0a 2a 2a 20 63 6f 6d 70 69 6c 65  4-bit.** compile
6ec0: 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4c  rs..*/.#define L
6ed0: 41 52 47 45 53 54 5f 49 4e 54 36 34 20 20 28 30  ARGEST_INT64  (0
6ee0: 78 66 66 66 66 66 66 66 66 7c 28 28 28 69 36 34  xffffffff|(((i64
6ef0: 29 30 78 37 66 66 66 66 66 66 66 29 3c 3c 33 32  )0x7fffffff)<<32
6f00: 29 29 0a 23 64 65 66 69 6e 65 20 53 4d 41 4c 4c  )).#define SMALL
6f10: 45 53 54 5f 49 4e 54 36 34 20 28 28 28 69 36 34  EST_INT64 (((i64
6f20: 29 2d 31 29 20 2d 20 4c 41 52 47 45 53 54 5f 49  )-1) - LARGEST_I
6f30: 4e 54 36 34 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75  NT64)../*.** Rou
6f40: 6e 64 20 75 70 20 61 20 6e 75 6d 62 65 72 20 74  nd up a number t
6f50: 6f 20 74 68 65 20 6e 65 78 74 20 6c 61 72 67 65  o the next large
6f60: 72 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38 2e  r multiple of 8.
6f70: 20 20 54 68 69 73 20 69 73 20 75 73 65 64 0a 2a    This is used.*
6f80: 2a 20 74 6f 20 66 6f 72 63 65 20 38 2d 62 79 74  * to force 8-byt
6f90: 65 20 61 6c 69 67 6e 6d 65 6e 74 20 6f 6e 20 36  e alignment on 6
6fa0: 34 2d 62 69 74 20 61 72 63 68 69 74 65 63 74 75  4-bit architectu
6fb0: 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  res..*/.#define 
6fc0: 52 4f 55 4e 44 38 28 78 29 20 20 20 20 20 28 28  ROUND8(x)     ((
6fd0: 28 78 29 2b 37 29 26 7e 37 29 0a 0a 2f 2a 0a 2a  (x)+7)&~7)../*.*
6fe0: 2a 20 52 6f 75 6e 64 20 64 6f 77 6e 20 74 6f 20  * Round down to 
6ff0: 74 68 65 20 6e 65 61 72 65 73 74 20 6d 75 6c 74  the nearest mult
7000: 69 70 6c 65 20 6f 66 20 38 0a 2a 2f 0a 23 64 65  iple of 8.*/.#de
7010: 66 69 6e 65 20 52 4f 55 4e 44 44 4f 57 4e 38 28  fine ROUNDDOWN8(
7020: 78 29 20 28 28 78 29 26 7e 37 29 0a 0a 2f 2a 0a  x) ((x)&~7)../*.
7030: 2a 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 74  ** Assert that t
7040: 68 65 20 70 6f 69 6e 74 65 72 20 58 20 69 73 20  he pointer X is 
7050: 61 6c 69 67 6e 65 64 20 74 6f 20 61 6e 20 38 2d  aligned to an 8-
7060: 62 79 74 65 20 62 6f 75 6e 64 61 72 79 2e 20 20  byte boundary.  
7070: 54 68 69 73 0a 2a 2a 20 6d 61 63 72 6f 20 69 73  This.** macro is
7080: 20 75 73 65 64 20 6f 6e 6c 79 20 77 69 74 68 69   used only withi
7090: 6e 20 61 73 73 65 72 74 28 29 20 74 6f 20 76 65  n assert() to ve
70a0: 72 69 66 79 20 74 68 61 74 20 74 68 65 20 63 6f  rify that the co
70b0: 64 65 20 67 65 74 73 0a 2a 2a 20 61 6c 6c 20 61  de gets.** all a
70c0: 6c 69 67 6e 6d 65 6e 74 20 72 65 73 74 72 69 63  lignment restric
70d0: 74 69 6f 6e 73 20 63 6f 72 72 65 63 74 2e 0a 2a  tions correct..*
70e0: 2a 0a 2a 2a 20 45 78 63 65 70 74 2c 20 69 66 20  *.** Except, if 
70f0: 53 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c  SQLITE_4_BYTE_AL
7100: 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 20 69 73 20  IGNED_MALLOC is 
7110: 64 65 66 69 6e 65 64 2c 20 74 68 65 6e 20 74 68  defined, then th
7120: 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20  e.** underlying 
7130: 6d 61 6c 6c 6f 63 28 29 20 69 6d 70 6c 65 6d 65  malloc() impleme
7140: 6e 74 61 74 69 6f 6e 20 6d 69 67 68 74 20 72 65  ntation might re
7150: 74 75 72 6e 20 75 73 20 34 2d 62 79 74 65 20 61  turn us 4-byte a
7160: 6c 69 67 6e 65 64 0a 2a 2a 20 70 6f 69 6e 74 65  ligned.** pointe
7170: 72 73 2e 20 20 49 6e 20 74 68 61 74 20 63 61 73  rs.  In that cas
7180: 65 2c 20 6f 6e 6c 79 20 76 65 72 69 66 79 20 34  e, only verify 4
7190: 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65 6e 74 2e  -byte alignment.
71a0: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
71b0: 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44  E_4_BYTE_ALIGNED
71c0: 5f 4d 41 4c 4c 4f 43 0a 23 20 64 65 66 69 6e 65  _MALLOC.# define
71d0: 20 45 49 47 48 54 5f 42 59 54 45 5f 41 4c 49 47   EIGHT_BYTE_ALIG
71e0: 4e 4d 45 4e 54 28 58 29 20 20 20 28 28 28 28 63  NMENT(X)   ((((c
71f0: 68 61 72 2a 29 28 58 29 20 2d 20 28 63 68 61 72  har*)(X) - (char
7200: 2a 29 30 29 26 33 29 3d 3d 30 29 0a 23 65 6c 73  *)0)&3)==0).#els
7210: 65 0a 23 20 64 65 66 69 6e 65 20 45 49 47 48 54  e.# define EIGHT
7220: 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28  _BYTE_ALIGNMENT(
7230: 58 29 20 20 20 28 28 28 28 63 68 61 72 2a 29 28  X)   ((((char*)(
7240: 58 29 20 2d 20 28 63 68 61 72 2a 29 30 29 26 37  X) - (char*)0)&7
7250: 29 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  )==0).#endif../*
7260: 0a 2a 2a 20 44 69 73 61 62 6c 65 20 4d 4d 41 50  .** Disable MMAP
7270: 20 6f 6e 20 70 6c 61 74 66 6f 72 6d 73 20 77 68   on platforms wh
7280: 65 72 65 20 69 74 20 69 73 20 6b 6e 6f 77 6e 20  ere it is known 
7290: 74 6f 20 6e 6f 74 20 77 6f 72 6b 0a 2a 2f 0a 23  to not work.*/.#
72a0: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65  if defined(__Ope
72b0: 6e 42 53 44 5f 5f 29 20 7c 7c 20 64 65 66 69 6e  nBSD__) || defin
72c0: 65 64 28 5f 5f 51 4e 58 4e 54 4f 5f 5f 29 0a 23  ed(__QNXNTO__).#
72d0: 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41   undef SQLITE_MA
72e0: 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65  X_MMAP_SIZE.# de
72f0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
7300: 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 65 6e 64  MMAP_SIZE 0.#end
7310: 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 61 75 6c  if../*.** Defaul
7320: 74 20 6d 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f  t maximum size o
7330: 66 20 6d 65 6d 6f 72 79 20 75 73 65 64 20 62 79  f memory used by
7340: 20 6d 65 6d 6f 72 79 2d 6d 61 70 70 65 64 20 49   memory-mapped I
7350: 2f 4f 20 69 6e 20 74 68 65 20 56 46 53 0a 2a 2f  /O in the VFS.*/
7360: 0a 23 69 66 64 65 66 20 5f 5f 41 50 50 4c 45 5f  .#ifdef __APPLE_
7370: 5f 0a 23 20 69 6e 63 6c 75 64 65 20 3c 54 61 72  _.# include <Tar
7380: 67 65 74 43 6f 6e 64 69 74 69 6f 6e 61 6c 73 2e  getConditionals.
7390: 68 3e 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  h>.#endif.#ifnde
73a0: 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41  f SQLITE_MAX_MMA
73b0: 50 5f 53 49 5a 45 0a 23 20 69 66 20 64 65 66 69  P_SIZE.# if defi
73c0: 6e 65 64 28 5f 5f 6c 69 6e 75 78 5f 5f 29 20 5c  ned(__linux__) \
73d0: 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 57  .  || defined(_W
73e0: 49 4e 33 32 29 20 5c 0a 20 20 7c 7c 20 28 64 65  IN32) \.  || (de
73f0: 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29  fined(__APPLE__)
7400: 20 26 26 20 64 65 66 69 6e 65 64 28 5f 5f 4d 41   && defined(__MA
7410: 43 48 5f 5f 29 29 20 5c 0a 20 20 7c 7c 20 64 65  CH__)) \.  || de
7420: 66 69 6e 65 64 28 5f 5f 73 75 6e 29 20 5c 0a 20  fined(__sun) \. 
7430: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 46 72   || defined(__Fr
7440: 65 65 42 53 44 5f 5f 29 20 5c 0a 20 20 7c 7c 20  eeBSD__) \.  || 
7450: 64 65 66 69 6e 65 64 28 5f 5f 44 72 61 67 6f 6e  defined(__Dragon
7460: 46 6c 79 5f 5f 29 0a 23 20 20 20 64 65 66 69 6e  Fly__).#   defin
7470: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41  e SQLITE_MAX_MMA
7480: 50 5f 53 49 5a 45 20 30 78 37 66 66 66 30 30 30  P_SIZE 0x7fff000
7490: 30 20 20 2f 2a 20 32 31 34 37 34 31 38 31 31 32  0  /* 2147418112
74a0: 20 2a 2f 0a 23 20 65 6c 73 65 0a 23 20 20 20 64   */.# else.#   d
74b0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
74c0: 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 20 65  _MMAP_SIZE 0.# e
74d0: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ndif.#endif../*.
74e0: 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 4d  ** The default M
74f0: 4d 41 50 5f 53 49 5a 45 20 69 73 20 7a 65 72 6f  MAP_SIZE is zero
7500: 20 6f 6e 20 61 6c 6c 20 70 6c 61 74 66 6f 72 6d   on all platform
7510: 73 2e 20 20 4f 72 2c 20 65 76 65 6e 20 69 66 20  s.  Or, even if 
7520: 61 20 6c 61 72 67 65 72 0a 2a 2a 20 64 65 66 61  a larger.** defa
7530: 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20 69 73  ult MMAP_SIZE is
7540: 20 73 70 65 63 69 66 69 65 64 20 61 74 20 63 6f   specified at co
7550: 6d 70 69 6c 65 2d 74 69 6d 65 2c 20 6d 61 6b 65  mpile-time, make
7560: 20 73 75 72 65 20 74 68 61 74 20 69 74 20 64 6f   sure that it do
7570: 65 73 0a 2a 2a 20 6e 6f 74 20 65 78 63 65 65 64  es.** not exceed
7580: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6d 6d 61   the maximum mma
7590: 70 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66 6e 64  p size..*/.#ifnd
75a0: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
75b0: 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65  T_MMAP_SIZE.# de
75c0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41  fine SQLITE_DEFA
75d0: 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a  ULT_MMAP_SIZE 0.
75e0: 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54  #endif.#if SQLIT
75f0: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
7600: 49 5a 45 3e 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  IZE>SQLITE_MAX_M
7610: 4d 41 50 5f 53 49 5a 45 0a 23 20 75 6e 64 65 66  MAP_SIZE.# undef
7620: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
7630: 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69  MMAP_SIZE.# defi
7640: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
7650: 54 5f 4d 4d 41 50 5f 53 49 5a 45 20 53 51 4c 49  T_MMAP_SIZE SQLI
7660: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
7670: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f  .#endif../*.** O
7680: 6e 6c 79 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54  nly one of SQLIT
7690: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 20 6f  E_ENABLE_STAT3 o
76a0: 72 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  r SQLITE_ENABLE_
76b0: 53 54 41 54 34 20 63 61 6e 20 62 65 20 64 65 66  STAT4 can be def
76c0: 69 6e 65 64 2e 0a 2a 2a 20 50 72 69 6f 72 69 74  ined..** Priorit
76d0: 79 20 69 73 20 67 69 76 65 6e 20 74 6f 20 53 51  y is given to SQ
76e0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
76f0: 34 2e 20 20 49 66 20 65 69 74 68 65 72 20 61 72  4.  If either ar
7700: 65 20 64 65 66 69 6e 65 64 2c 20 61 6c 73 6f 0a  e defined, also.
7710: 2a 2a 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ** define SQLITE
7720: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
7730: 5f 53 54 41 54 34 0a 2a 2f 0a 23 69 66 64 65 66  _STAT4.*/.#ifdef
7740: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
7750: 54 41 54 34 0a 23 20 75 6e 64 65 66 20 53 51 4c  TAT4.# undef SQL
7760: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
7770: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
7780: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
7790: 5f 53 54 41 54 34 20 31 0a 23 65 6c 69 66 20 53  _STAT4 1.#elif S
77a0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
77b0: 54 33 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  T3.# define SQLI
77c0: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
77d0: 4f 52 5f 53 54 41 54 34 20 31 0a 23 65 6c 69 66  OR_STAT4 1.#elif
77e0: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
77f0: 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23 20  TAT3_OR_STAT4.# 
7800: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  undef SQLITE_ENA
7810: 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
7820: 54 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  T4.#endif../*.**
7830: 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41   SELECTTRACE_ENA
7840: 42 4c 45 44 20 77 69 6c 6c 20 62 65 20 65 69 74  BLED will be eit
7850: 68 65 72 20 31 20 6f 72 20 30 20 64 65 70 65 6e  her 1 or 0 depen
7860: 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 20  ding on whether 
7870: 6f 72 20 6e 6f 74 0a 2a 2a 20 74 68 65 20 53 65  or not.** the Se
7880: 6c 65 63 74 20 71 75 65 72 79 20 67 65 6e 65 72  lect query gener
7890: 61 74 6f 72 20 74 72 61 63 69 6e 67 20 6c 6f 67  ator tracing log
78a0: 69 63 20 69 73 20 74 75 72 6e 65 64 20 6f 6e 2e  ic is turned on.
78b0: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
78c0: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c  SQLITE_DEBUG) ||
78d0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
78e0: 45 4e 41 42 4c 45 5f 53 45 4c 45 43 54 54 52 41  ENABLE_SELECTTRA
78f0: 43 45 29 0a 23 20 64 65 66 69 6e 65 20 53 45 4c  CE).# define SEL
7900: 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44  ECTTRACE_ENABLED
7910: 20 31 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   1.#else.# defin
7920: 65 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e  e SELECTTRACE_EN
7930: 41 42 4c 45 44 20 30 0a 23 65 6e 64 69 66 0a 0a  ABLED 0.#endif..
7940: 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
7950: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
7960: 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20  ng structure is 
7970: 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
7980: 65 20 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a  e busy-handler.*
7990: 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61  * callback for a
79a0: 20 67 69 76 65 6e 20 73 71 6c 69 74 65 20 68 61   given sqlite ha
79b0: 6e 64 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ndle..**.** The 
79c0: 73 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c  sqlite.busyHandl
79d0: 65 72 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65  er member of the
79e0: 20 73 71 6c 69 74 65 20 73 74 72 75 63 74 20 63   sqlite struct c
79f0: 6f 6e 74 61 69 6e 73 20 74 68 65 20 62 75 73 79  ontains the busy
7a00: 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72  .** callback for
7a10: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61   the database ha
7a20: 6e 64 6c 65 2e 20 45 61 63 68 20 70 61 67 65 72  ndle. Each pager
7a30: 20 6f 70 65 6e 65 64 20 76 69 61 20 74 68 65 20   opened via the 
7a40: 73 71 6c 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65  sqlite.** handle
7a50: 20 69 73 20 70 61 73 73 65 64 20 61 20 70 6f 69   is passed a poi
7a60: 6e 74 65 72 20 74 6f 20 73 71 6c 69 74 65 2e 62  nter to sqlite.b
7a70: 75 73 79 48 61 6e 64 6c 65 72 2e 20 54 68 65 20  usyHandler. The 
7a80: 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20  busy-handler.** 
7a90: 63 61 6c 6c 62 61 63 6b 20 69 73 20 63 75 72 72  callback is curr
7aa0: 65 6e 74 6c 79 20 69 6e 76 6f 6b 65 64 20 6f 6e  ently invoked on
7ab0: 6c 79 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 70  ly from within p
7ac0: 61 67 65 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64  ager.c..*/.typed
7ad0: 65 66 20 73 74 72 75 63 74 20 42 75 73 79 48 61  ef struct BusyHa
7ae0: 6e 64 6c 65 72 20 42 75 73 79 48 61 6e 64 6c 65  ndler BusyHandle
7af0: 72 3b 0a 73 74 72 75 63 74 20 42 75 73 79 48 61  r;.struct BusyHa
7b00: 6e 64 6c 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a  ndler {.  int (*
7b10: 78 46 75 6e 63 29 28 76 6f 69 64 20 2a 2c 69 6e  xFunc)(void *,in
7b20: 74 29 3b 20 20 2f 2a 20 54 68 65 20 62 75 73 79  t);  /* The busy
7b30: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76   callback */.  v
7b40: 6f 69 64 20 2a 70 41 72 67 3b 20 20 20 20 20 20  oid *pArg;      
7b50: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
7b60: 73 74 20 61 72 67 20 74 6f 20 62 75 73 79 20 63  st arg to busy c
7b70: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74  allback */.  int
7b80: 20 6e 42 75 73 79 3b 20 20 20 20 20 20 20 20 20   nBusy;         
7b90: 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 63 72 65          /* Incre
7ba0: 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61 63 68  mented with each
7bb0: 20 62 75 73 79 20 63 61 6c 6c 20 2a 2f 0a 7d 3b   busy call */.};
7bc0: 0a 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20  ../*.** Name of 
7bd0: 74 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62  the master datab
7be0: 61 73 65 20 74 61 62 6c 65 2e 20 20 54 68 65 20  ase table.  The 
7bf0: 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20  master database 
7c00: 74 61 62 6c 65 0a 2a 2a 20 69 73 20 61 20 73 70  table.** is a sp
7c10: 65 63 69 61 6c 20 74 61 62 6c 65 20 74 68 61 74  ecial table that
7c20: 20 68 6f 6c 64 73 20 74 68 65 20 6e 61 6d 65 73   holds the names
7c30: 20 61 6e 64 20 61 74 74 72 69 62 75 74 65 73 20   and attributes 
7c40: 6f 66 20 61 6c 6c 0a 2a 2a 20 75 73 65 72 20 74  of all.** user t
7c50: 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65  ables and indice
7c60: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41  s..*/.#define MA
7c70: 53 54 45 52 5f 4e 41 4d 45 20 20 20 20 20 20 20  STER_NAME       
7c80: 22 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a  "sqlite_master".
7c90: 23 64 65 66 69 6e 65 20 54 45 4d 50 5f 4d 41 53  #define TEMP_MAS
7ca0: 54 45 52 5f 4e 41 4d 45 20 20 22 73 71 6c 69 74  TER_NAME  "sqlit
7cb0: 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 0a 0a  e_temp_master"..
7cc0: 2f 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 2d 70  /*.** The root-p
7cd0: 61 67 65 20 6f 66 20 74 68 65 20 6d 61 73 74 65  age of the maste
7ce0: 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  r database table
7cf0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53  ..*/.#define MAS
7d00: 54 45 52 5f 52 4f 4f 54 20 20 20 20 20 20 20 31  TER_ROOT       1
7d10: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 61 6d 65  ../*.** The name
7d20: 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61 20 74   of the schema t
7d30: 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  able..*/.#define
7d40: 20 53 43 48 45 4d 41 5f 54 41 42 4c 45 28 78 29   SCHEMA_TABLE(x)
7d50: 20 20 28 28 21 4f 4d 49 54 5f 54 45 4d 50 44 42    ((!OMIT_TEMPDB
7d60: 29 26 26 28 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d  )&&(x==1)?TEMP_M
7d70: 41 53 54 45 52 5f 4e 41 4d 45 3a 4d 41 53 54 45  ASTER_NAME:MASTE
7d80: 52 5f 4e 41 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41  R_NAME)../*.** A
7d90: 20 63 6f 6e 76 65 6e 69 65 6e 63 65 20 6d 61 63   convenience mac
7da0: 72 6f 20 74 68 61 74 20 72 65 74 75 72 6e 73 20  ro that returns 
7db0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6c  the number of el
7dc0: 65 6d 65 6e 74 73 20 69 6e 0a 2a 2a 20 61 6e 20  ements in.** an 
7dd0: 61 72 72 61 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e  array..*/.#defin
7de0: 65 20 41 72 72 61 79 53 69 7a 65 28 58 29 20 20  e ArraySize(X)  
7df0: 20 20 28 28 69 6e 74 29 28 73 69 7a 65 6f 66 28    ((int)(sizeof(
7e00: 58 29 2f 73 69 7a 65 6f 66 28 58 5b 30 5d 29 29  X)/sizeof(X[0]))
7e10: 29 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d 69  )../*.** Determi
7e20: 6e 65 20 69 66 20 74 68 65 20 61 72 67 75 6d 65  ne if the argume
7e30: 6e 74 20 69 73 20 61 20 70 6f 77 65 72 20 6f 66  nt is a power of
7e40: 20 74 77 6f 0a 2a 2f 0a 23 64 65 66 69 6e 65 20   two.*/.#define 
7e50: 49 73 50 6f 77 65 72 4f 66 54 77 6f 28 58 29 20  IsPowerOfTwo(X) 
7e60: 28 28 28 58 29 26 28 28 58 29 2d 31 29 29 3d 3d  (((X)&((X)-1))==
7e70: 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  0)../*.** The fo
7e80: 6c 6c 6f 77 69 6e 67 20 76 61 6c 75 65 20 61 73  llowing value as
7e90: 20 61 20 64 65 73 74 72 75 63 74 6f 72 20 6d 65   a destructor me
7ea0: 61 6e 73 20 74 6f 20 75 73 65 20 73 71 6c 69 74  ans to use sqlit
7eb0: 65 33 44 62 46 72 65 65 28 29 2e 0a 2a 2a 20 54  e3DbFree()..** T
7ec0: 68 65 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  he sqlite3DbFree
7ed0: 28 29 20 72 6f 75 74 69 6e 65 20 72 65 71 75 69  () routine requi
7ee0: 72 65 73 20 74 77 6f 20 70 61 72 61 6d 65 74 65  res two paramete
7ef0: 72 73 20 69 6e 73 74 65 61 64 20 6f 66 20 74 68  rs instead of th
7f00: 65 0a 2a 2a 20 6f 6e 65 20 70 61 72 61 6d 65 74  e.** one paramet
7f10: 65 72 20 74 68 61 74 20 64 65 73 74 72 75 63 74  er that destruct
7f20: 6f 72 73 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e  ors normally wan
7f30: 74 2e 20 20 53 6f 20 77 65 20 68 61 76 65 20 74  t.  So we have t
7f40: 6f 20 69 6e 74 72 6f 64 75 63 65 0a 2a 2a 20 74  o introduce.** t
7f50: 68 69 73 20 6d 61 67 69 63 20 76 61 6c 75 65 20  his magic value 
7f60: 74 68 61 74 20 74 68 65 20 63 6f 64 65 20 6b 6e  that the code kn
7f70: 6f 77 73 20 74 6f 20 68 61 6e 64 6c 65 20 64 69  ows to handle di
7f80: 66 66 65 72 65 6e 74 6c 79 2e 20 20 41 6e 79 0a  fferently.  Any.
7f90: 2a 2a 20 70 6f 69 6e 74 65 72 20 77 69 6c 6c 20  ** pointer will 
7fa0: 77 6f 72 6b 20 68 65 72 65 20 61 73 20 6c 6f 6e  work here as lon
7fb0: 67 20 61 73 20 69 74 20 69 73 20 64 69 73 74 69  g as it is disti
7fc0: 6e 63 74 20 66 72 6f 6d 20 53 51 4c 49 54 45 5f  nct from SQLITE_
7fd0: 53 54 41 54 49 43 0a 2a 2a 20 61 6e 64 20 53 51  STATIC.** and SQ
7fe0: 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 2e 0a  LITE_TRANSIENT..
7ff0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
8000: 45 5f 44 59 4e 41 4d 49 43 20 20 20 28 28 73 71  E_DYNAMIC   ((sq
8010: 6c 69 74 65 33 5f 64 65 73 74 72 75 63 74 6f 72  lite3_destructor
8020: 5f 74 79 70 65 29 73 71 6c 69 74 65 33 4d 61 6c  _type)sqlite3Mal
8030: 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a 20  locSize)../*.** 
8040: 57 68 65 6e 20 53 51 4c 49 54 45 5f 4f 4d 49 54  When SQLITE_OMIT
8050: 5f 57 53 44 20 69 73 20 64 65 66 69 6e 65 64 2c  _WSD is defined,
8060: 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74   it means that t
8070: 68 65 20 74 61 72 67 65 74 20 70 6c 61 74 66 6f  he target platfo
8080: 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 73  rm does.** not s
8090: 75 70 70 6f 72 74 20 57 72 69 74 61 62 6c 65 20  upport Writable 
80a0: 53 74 61 74 69 63 20 44 61 74 61 20 28 57 53 44  Static Data (WSD
80b0: 29 20 73 75 63 68 20 61 73 20 67 6c 6f 62 61 6c  ) such as global
80c0: 20 61 6e 64 20 73 74 61 74 69 63 20 76 61 72 69   and static vari
80d0: 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c 20 76 61  ables..** All va
80e0: 72 69 61 62 6c 65 73 20 6d 75 73 74 20 65 69 74  riables must eit
80f0: 68 65 72 20 62 65 20 6f 6e 20 74 68 65 20 73 74  her be on the st
8100: 61 63 6b 20 6f 72 20 64 79 6e 61 6d 69 63 61 6c  ack or dynamical
8110: 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 66 72 6f  ly allocated fro
8120: 6d 0a 2a 2a 20 74 68 65 20 68 65 61 70 2e 20 20  m.** the heap.  
8130: 57 68 65 6e 20 57 53 44 20 69 73 20 75 6e 73 75  When WSD is unsu
8140: 70 70 6f 72 74 65 64 2c 20 74 68 65 20 76 61 72  pported, the var
8150: 69 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f  iable declaratio
8160: 6e 73 20 73 63 61 74 74 65 72 65 64 0a 2a 2a 20  ns scattered.** 
8170: 74 68 72 6f 75 67 68 6f 75 74 20 74 68 65 20 53  throughout the S
8180: 51 4c 69 74 65 20 63 6f 64 65 20 6d 75 73 74 20  QLite code must 
8190: 62 65 63 6f 6d 65 20 63 6f 6e 73 74 61 6e 74 73  become constants
81a0: 20 69 6e 73 74 65 61 64 2e 20 20 54 68 65 20 53   instead.  The S
81b0: 51 4c 49 54 45 5f 57 53 44 0a 2a 2a 20 6d 61 63  QLITE_WSD.** mac
81c0: 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20 74  ro is used for t
81d0: 68 69 73 20 70 75 72 70 6f 73 65 2e 20 20 41 6e  his purpose.  An
81e0: 64 20 69 6e 73 74 65 61 64 20 6f 66 20 72 65 66  d instead of ref
81f0: 65 72 65 6e 63 69 6e 67 20 74 68 65 20 76 61 72  erencing the var
8200: 69 61 62 6c 65 0a 2a 2a 20 64 69 72 65 63 74 6c  iable.** directl
8210: 79 2c 20 77 65 20 75 73 65 20 69 74 73 20 63 6f  y, we use its co
8220: 6e 73 74 61 6e 74 20 61 73 20 61 20 6b 65 79 20  nstant as a key 
8230: 74 6f 20 6c 6f 6f 6b 75 70 20 74 68 65 20 72 75  to lookup the ru
8240: 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64  n-time allocated
8250: 0a 2a 2a 20 62 75 66 66 65 72 20 74 68 61 74 20  .** buffer that 
8260: 68 6f 6c 64 73 20 72 65 61 6c 20 76 61 72 69 61  holds real varia
8270: 62 6c 65 2e 20 20 54 68 65 20 63 6f 6e 73 74 61  ble.  The consta
8280: 6e 74 20 69 73 20 61 6c 73 6f 20 74 68 65 20 69  nt is also the i
8290: 6e 69 74 69 61 6c 69 7a 65 72 0a 2a 2a 20 66 6f  nitializer.** fo
82a0: 72 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61  r the run-time a
82b0: 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72 2e  llocated buffer.
82c0: 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 75 73  .**.** In the us
82d0: 75 61 6c 20 63 61 73 65 20 77 68 65 72 65 20 57  ual case where W
82e0: 53 44 20 69 73 20 73 75 70 70 6f 72 74 65 64 2c  SD is supported,
82f0: 20 74 68 65 20 53 51 4c 49 54 45 5f 57 53 44 20   the SQLITE_WSD 
8300: 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a 20 6d 61  and GLOBAL.** ma
8310: 63 72 6f 73 20 62 65 63 6f 6d 65 20 6e 6f 2d 6f  cros become no-o
8320: 70 73 20 61 6e 64 20 68 61 76 65 20 7a 65 72 6f  ps and have zero
8330: 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 69 6d 70   performance imp
8340: 61 63 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  act..*/.#ifdef S
8350: 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20  QLITE_OMIT_WSD. 
8360: 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f   #define SQLITE_
8370: 57 53 44 20 63 6f 6e 73 74 0a 20 20 23 64 65 66  WSD const.  #def
8380: 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20  ine GLOBAL(t,v) 
8390: 28 2a 28 74 2a 29 73 71 6c 69 74 65 33 5f 77 73  (*(t*)sqlite3_ws
83a0: 64 5f 66 69 6e 64 28 28 76 6f 69 64 2a 29 26 28  d_find((void*)&(
83b0: 76 29 2c 20 73 69 7a 65 6f 66 28 76 29 29 29 0a  v), sizeof(v))).
83c0: 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
83d0: 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 47 4c  3GlobalConfig GL
83e0: 4f 42 41 4c 28 73 74 72 75 63 74 20 53 71 6c 69  OBAL(struct Sqli
83f0: 74 65 33 43 6f 6e 66 69 67 2c 20 73 71 6c 69 74  te3Config, sqlit
8400: 65 33 43 6f 6e 66 69 67 29 0a 20 20 69 6e 74 20  e3Config).  int 
8410: 73 71 6c 69 74 65 33 5f 77 73 64 5f 69 6e 69 74  sqlite3_wsd_init
8420: 28 69 6e 74 20 4e 2c 20 69 6e 74 20 4a 29 3b 0a  (int N, int J);.
8430: 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f    void *sqlite3_
8440: 77 73 64 5f 66 69 6e 64 28 76 6f 69 64 20 2a 4b  wsd_find(void *K
8450: 2c 20 69 6e 74 20 4c 29 3b 0a 23 65 6c 73 65 0a  , int L);.#else.
8460: 20 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45    #define SQLITE
8470: 5f 57 53 44 0a 20 20 23 64 65 66 69 6e 65 20 47  _WSD.  #define G
8480: 4c 4f 42 41 4c 28 74 2c 76 29 20 76 0a 20 20 23  LOBAL(t,v) v.  #
8490: 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 6c  define sqlite3Gl
84a0: 6f 62 61 6c 43 6f 6e 66 69 67 20 73 71 6c 69 74  obalConfig sqlit
84b0: 65 33 43 6f 6e 66 69 67 0a 23 65 6e 64 69 66 0a  e3Config.#endif.
84c0: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
84d0: 77 69 6e 67 20 6d 61 63 72 6f 73 20 61 72 65 20  wing macros are 
84e0: 75 73 65 64 20 74 6f 20 73 75 70 70 72 65 73 73  used to suppress
84f0: 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e   compiler warnin
8500: 67 73 20 61 6e 64 20 74 6f 0a 2a 2a 20 6d 61 6b  gs and to.** mak
8510: 65 20 69 74 20 63 6c 65 61 72 20 74 6f 20 68 75  e it clear to hu
8520: 6d 61 6e 20 72 65 61 64 65 72 73 20 77 68 65 6e  man readers when
8530: 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72 61   a function para
8540: 6d 65 74 65 72 20 69 73 20 64 65 6c 69 62 65 72  meter is deliber
8550: 61 74 65 6c 79 0a 2a 2a 20 6c 65 66 74 20 75 6e  ately.** left un
8560: 75 73 65 64 20 77 69 74 68 69 6e 20 74 68 65 20  used within the 
8570: 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63 74 69  body of a functi
8580: 6f 6e 2e 20 54 68 69 73 20 75 73 75 61 6c 6c 79  on. This usually
8590: 20 68 61 70 70 65 6e 73 20 77 68 65 6e 0a 2a 2a   happens when.**
85a0: 20 61 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 63   a function is c
85b0: 61 6c 6c 65 64 20 76 69 61 20 61 20 66 75 6e 63  alled via a func
85c0: 74 69 6f 6e 20 70 6f 69 6e 74 65 72 2e 20 46 6f  tion pointer. Fo
85d0: 72 20 65 78 61 6d 70 6c 65 20 74 68 65 0a 2a 2a  r example the.**
85e0: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
85f0: 6f 66 20 61 6e 20 53 51 4c 20 61 67 67 72 65 67  of an SQL aggreg
8600: 61 74 65 20 73 74 65 70 20 63 61 6c 6c 62 61 63  ate step callbac
8610: 6b 20 6d 61 79 20 6e 6f 74 20 75 73 65 20 74 68  k may not use th
8620: 65 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 20 69  e.** parameter i
8630: 6e 64 69 63 61 74 69 6e 67 20 74 68 65 20 6e 75  ndicating the nu
8640: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
8650: 73 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20  s passed to the 
8660: 61 67 67 72 65 67 61 74 65 2c 0a 2a 2a 20 69 66  aggregate,.** if
8670: 20 69 74 20 6b 6e 6f 77 73 20 74 68 61 74 20 74   it knows that t
8680: 68 69 73 20 69 73 20 65 6e 66 6f 72 63 65 64 20  his is enforced 
8690: 65 6c 73 65 77 68 65 72 65 2e 0a 2a 2a 0a 2a 2a  elsewhere..**.**
86a0: 20 57 68 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e   When a function
86b0: 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f   parameter is no
86c0: 74 20 75 73 65 64 20 61 74 20 61 6c 6c 20 77 69  t used at all wi
86d0: 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f 66  thin the body of
86e0: 20 61 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20   a function,.** 
86f0: 69 74 20 69 73 20 67 65 6e 65 72 61 6c 6c 79 20  it is generally 
8700: 6e 61 6d 65 64 20 22 4e 6f 74 55 73 65 64 22 20  named "NotUsed" 
8710: 6f 72 20 22 4e 6f 74 55 73 65 64 32 22 20 74 6f  or "NotUsed2" to
8720: 20 6d 61 6b 65 20 74 68 69 6e 67 73 20 65 76 65   make things eve
8730: 6e 20 63 6c 65 61 72 65 72 2e 0a 2a 2a 20 48 6f  n clearer..** Ho
8740: 77 65 76 65 72 2c 20 74 68 65 73 65 20 6d 61 63  wever, these mac
8750: 72 6f 73 20 6d 61 79 20 61 6c 73 6f 20 62 65 20  ros may also be 
8760: 75 73 65 64 20 74 6f 20 73 75 70 70 72 65 73 73  used to suppress
8770: 20 77 61 72 6e 69 6e 67 73 20 72 65 6c 61 74 65   warnings relate
8780: 64 20 74 6f 0a 2a 2a 20 70 61 72 61 6d 65 74 65  d to.** paramete
8790: 72 73 20 74 68 61 74 20 6d 61 79 20 6f 72 20 6d  rs that may or m
87a0: 61 79 20 6e 6f 74 20 62 65 20 75 73 65 64 20 64  ay not be used d
87b0: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 63 6f 6d 70  epending on comp
87c0: 69 6c 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e  ilation options.
87d0: 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c 65 20  .** For example 
87e0: 74 68 6f 73 65 20 70 61 72 61 6d 65 74 65 72 73  those parameters
87f0: 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e 20 61 73   only used in as
8800: 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
8810: 73 2e 20 49 6e 20 74 68 65 73 65 0a 2a 2a 20 63  s. In these.** c
8820: 61 73 65 73 20 74 68 65 20 70 61 72 61 6d 65 74  ases the paramet
8830: 65 72 73 20 61 72 65 20 6e 61 6d 65 64 20 61 73  ers are named as
8840: 20 70 65 72 20 74 68 65 20 75 73 75 61 6c 20 63   per the usual c
8850: 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a 2f 0a 23  onventions..*/.#
8860: 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f 50 41  define UNUSED_PA
8870: 52 41 4d 45 54 45 52 28 78 29 20 28 76 6f 69 64  RAMETER(x) (void
8880: 29 28 78 29 0a 23 64 65 66 69 6e 65 20 55 4e 55  )(x).#define UNU
8890: 53 45 44 5f 50 41 52 41 4d 45 54 45 52 32 28 78  SED_PARAMETER2(x
88a0: 2c 79 29 20 55 4e 55 53 45 44 5f 50 41 52 41 4d  ,y) UNUSED_PARAM
88b0: 45 54 45 52 28 78 29 2c 55 4e 55 53 45 44 5f 50  ETER(x),UNUSED_P
88c0: 41 52 41 4d 45 54 45 52 28 79 29 0a 0a 2f 2a 0a  ARAMETER(y)../*.
88d0: 2a 2a 20 46 6f 72 77 61 72 64 20 72 65 66 65 72  ** Forward refer
88e0: 65 6e 63 65 73 20 74 6f 20 73 74 72 75 63 74 75  ences to structu
88f0: 72 65 73 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  res.*/.typedef s
8900: 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20 41 67  truct AggInfo Ag
8910: 67 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73  gInfo;.typedef s
8920: 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78  truct AuthContex
8930: 74 20 41 75 74 68 43 6f 6e 74 65 78 74 3b 0a 74  t AuthContext;.t
8940: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 41 75  ypedef struct Au
8950: 74 6f 69 6e 63 49 6e 66 6f 20 41 75 74 6f 69 6e  toincInfo Autoin
8960: 63 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73  cInfo;.typedef s
8970: 74 72 75 63 74 20 42 69 74 76 65 63 20 42 69 74  truct Bitvec Bit
8980: 76 65 63 3b 0a 74 79 70 65 64 65 66 20 73 74 72  vec;.typedef str
8990: 75 63 74 20 43 6f 6c 6c 53 65 71 20 43 6f 6c 6c  uct CollSeq Coll
89a0: 53 65 71 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Seq;.typedef str
89b0: 75 63 74 20 43 6f 6c 75 6d 6e 20 43 6f 6c 75 6d  uct Column Colum
89c0: 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  n;.typedef struc
89d0: 74 20 44 62 20 44 62 3b 0a 74 79 70 65 64 65 66  t Db Db;.typedef
89e0: 20 73 74 72 75 63 74 20 53 63 68 65 6d 61 20 53   struct Schema S
89f0: 63 68 65 6d 61 3b 0a 74 79 70 65 64 65 66 20 73  chema;.typedef s
8a00: 74 72 75 63 74 20 45 78 70 72 20 45 78 70 72 3b  truct Expr Expr;
8a10: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8a20: 45 78 70 72 4c 69 73 74 20 45 78 70 72 4c 69 73  ExprList ExprLis
8a30: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
8a40: 74 20 45 78 70 72 53 70 61 6e 20 45 78 70 72 53  t ExprSpan ExprS
8a50: 70 61 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72  pan;.typedef str
8a60: 75 63 74 20 46 4b 65 79 20 46 4b 65 79 3b 0a 74  uct FKey FKey;.t
8a70: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75  ypedef struct Fu
8a80: 6e 63 44 65 73 74 72 75 63 74 6f 72 20 46 75 6e  ncDestructor Fun
8a90: 63 44 65 73 74 72 75 63 74 6f 72 3b 0a 74 79 70  cDestructor;.typ
8aa0: 65 64 65 66 20 73 74 72 75 63 74 20 46 75 6e 63  edef struct Func
8ab0: 44 65 66 20 46 75 6e 63 44 65 66 3b 0a 74 79 70  Def FuncDef;.typ
8ac0: 65 64 65 66 20 73 74 72 75 63 74 20 46 75 6e 63  edef struct Func
8ad0: 44 65 66 48 61 73 68 20 46 75 6e 63 44 65 66 48  DefHash FuncDefH
8ae0: 61 73 68 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ash;.typedef str
8af0: 75 63 74 20 49 64 4c 69 73 74 20 49 64 4c 69 73  uct IdList IdLis
8b00: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
8b10: 74 20 49 6e 64 65 78 20 49 6e 64 65 78 3b 0a 74  t Index Index;.t
8b20: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49 6e  ypedef struct In
8b30: 64 65 78 53 61 6d 70 6c 65 20 49 6e 64 65 78 53  dexSample IndexS
8b40: 61 6d 70 6c 65 3b 0a 74 79 70 65 64 65 66 20 73  ample;.typedef s
8b50: 74 72 75 63 74 20 4b 65 79 43 6c 61 73 73 20 4b  truct KeyClass K
8b60: 65 79 43 6c 61 73 73 3b 0a 74 79 70 65 64 65 66  eyClass;.typedef
8b70: 20 73 74 72 75 63 74 20 4b 65 79 49 6e 66 6f 20   struct KeyInfo 
8b80: 4b 65 79 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66  KeyInfo;.typedef
8b90: 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64   struct Lookasid
8ba0: 65 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74 79 70  e Lookaside;.typ
8bb0: 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b  edef struct Look
8bc0: 61 73 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b 61 73  asideSlot Lookas
8bd0: 69 64 65 53 6c 6f 74 3b 0a 74 79 70 65 64 65 66  ideSlot;.typedef
8be0: 20 73 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 4d   struct Module M
8bf0: 6f 64 75 6c 65 3b 0a 74 79 70 65 64 65 66 20 73  odule;.typedef s
8c00: 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78  truct NameContex
8c10: 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 3b 0a 74  t NameContext;.t
8c20: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 50 61  ypedef struct Pa
8c30: 72 73 65 20 50 61 72 73 65 3b 0a 74 79 70 65 64  rse Parse;.typed
8c40: 65 66 20 73 74 72 75 63 74 20 50 72 65 55 70 64  ef struct PreUpd
8c50: 61 74 65 20 50 72 65 55 70 64 61 74 65 3b 0a 74  ate PreUpdate;.t
8c60: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 50 72  ypedef struct Pr
8c70: 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 50 72  intfArguments Pr
8c80: 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 3b 0a 74  intfArguments;.t
8c90: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 52 6f  ypedef struct Ro
8ca0: 77 53 65 74 20 52 6f 77 53 65 74 3b 0a 74 79 70  wSet RowSet;.typ
8cb0: 65 64 65 66 20 73 74 72 75 63 74 20 53 61 76 65  edef struct Save
8cc0: 70 6f 69 6e 74 20 53 61 76 65 70 6f 69 6e 74 3b  point Savepoint;
8cd0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8ce0: 53 65 6c 65 63 74 20 53 65 6c 65 63 74 3b 0a 74  Select Select;.t
8cf0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 51  ypedef struct SQ
8d00: 4c 69 74 65 54 68 72 65 61 64 20 53 51 4c 69 74  LiteThread SQLit
8d10: 65 54 68 72 65 61 64 3b 0a 74 79 70 65 64 65 66  eThread;.typedef
8d20: 20 73 74 72 75 63 74 20 53 65 6c 65 63 74 44 65   struct SelectDe
8d30: 73 74 20 53 65 6c 65 63 74 44 65 73 74 3b 0a 74  st SelectDest;.t
8d40: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 72  ypedef struct Sr
8d50: 63 4c 69 73 74 20 53 72 63 4c 69 73 74 3b 0a 74  cList SrcList;.t
8d60: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 74  ypedef struct St
8d70: 72 41 63 63 75 6d 20 53 74 72 41 63 63 75 6d 3b  rAccum StrAccum;
8d80: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8d90: 54 61 62 6c 65 20 54 61 62 6c 65 3b 0a 74 79 70  Table Table;.typ
8da0: 65 64 65 66 20 73 74 72 75 63 74 20 54 61 62 6c  edef struct Tabl
8db0: 65 4c 6f 63 6b 20 54 61 62 6c 65 4c 6f 63 6b 3b  eLock TableLock;
8dc0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8dd0: 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b 0a 74 79 70  Token Token;.typ
8de0: 65 64 65 66 20 73 74 72 75 63 74 20 54 72 65 65  edef struct Tree
8df0: 56 69 65 77 20 54 72 65 65 56 69 65 77 3b 0a 74  View TreeView;.t
8e00: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72  ypedef struct Tr
8e10: 69 67 67 65 72 20 54 72 69 67 67 65 72 3b 0a 74  igger Trigger;.t
8e20: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72  ypedef struct Tr
8e30: 69 67 67 65 72 50 72 67 20 54 72 69 67 67 65 72  iggerPrg Trigger
8e40: 50 72 67 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Prg;.typedef str
8e50: 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20  uct TriggerStep 
8e60: 54 72 69 67 67 65 72 53 74 65 70 3b 0a 74 79 70  TriggerStep;.typ
8e70: 65 64 65 66 20 73 74 72 75 63 74 20 55 6e 70 61  edef struct Unpa
8e80: 63 6b 65 64 52 65 63 6f 72 64 20 55 6e 70 61 63  ckedRecord Unpac
8e90: 6b 65 64 52 65 63 6f 72 64 3b 0a 74 79 70 65 64  kedRecord;.typed
8ea0: 65 66 20 73 74 72 75 63 74 20 56 54 61 62 6c 65  ef struct VTable
8eb0: 20 56 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66   VTable;.typedef
8ec0: 20 73 74 72 75 63 74 20 56 74 61 62 43 74 78 20   struct VtabCtx 
8ed0: 56 74 61 62 43 74 78 3b 0a 74 79 70 65 64 65 66  VtabCtx;.typedef
8ee0: 20 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 57   struct Walker W
8ef0: 61 6c 6b 65 72 3b 0a 74 79 70 65 64 65 66 20 73  alker;.typedef s
8f00: 74 72 75 63 74 20 57 68 65 72 65 49 6e 66 6f 20  truct WhereInfo 
8f10: 57 68 65 72 65 49 6e 66 6f 3b 0a 74 79 70 65 64  WhereInfo;.typed
8f20: 65 66 20 73 74 72 75 63 74 20 57 69 74 68 20 57  ef struct With W
8f30: 69 74 68 3b 0a 0a 2f 2a 20 41 20 56 4c 69 73 74  ith;../* A VList
8f40: 20 6f 62 6a 65 63 74 20 72 65 63 6f 72 64 73 20   object records 
8f50: 61 20 6d 61 70 70 69 6e 67 20 62 65 74 77 65 65  a mapping betwee
8f60: 6e 20 70 61 72 61 6d 65 74 65 72 73 2f 76 61 72  n parameters/var
8f70: 69 61 62 6c 65 73 2f 77 69 6c 64 63 61 72 64 73  iables/wildcards
8f80: 0a 2a 2a 20 69 6e 20 74 68 65 20 53 51 4c 20 73  .** in the SQL s
8f90: 74 61 74 65 6d 65 6e 74 20 28 73 75 63 68 20 61  tatement (such a
8fa0: 73 20 24 61 62 63 2c 20 40 70 71 72 2c 20 6f 72  s $abc, @pqr, or
8fb0: 20 3a 78 79 7a 29 20 61 6e 64 20 74 68 65 20 69   :xyz) and the i
8fc0: 6e 74 65 67 65 72 0a 2a 2a 20 76 61 72 69 61 62  nteger.** variab
8fd0: 6c 65 20 6e 75 6d 62 65 72 20 61 73 73 6f 63 69  le number associ
8fe0: 61 74 65 64 20 77 69 74 68 20 74 68 61 74 20 70  ated with that p
8ff0: 61 72 61 6d 65 74 65 72 2e 20 20 53 65 65 20 74  arameter.  See t
9000: 68 65 20 66 6f 72 6d 61 74 20 64 65 73 63 72 69  he format descri
9010: 70 74 69 6f 6e 0a 2a 2a 20 6f 6e 20 74 68 65 20  ption.** on the 
9020: 73 71 6c 69 74 65 33 56 4c 69 73 74 41 64 64 28  sqlite3VListAdd(
9030: 29 20 72 6f 75 74 69 6e 65 20 66 6f 72 20 6d 6f  ) routine for mo
9040: 72 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20  re information. 
9050: 20 41 20 56 4c 69 73 74 20 69 73 20 72 65 61 6c   A VList is real
9060: 6c 79 0a 2a 2a 20 6a 75 73 74 20 61 6e 20 61 72  ly.** just an ar
9070: 72 61 79 20 6f 66 20 69 6e 74 65 67 65 72 73 2e  ray of integers.
9080: 0a 2a 2f 0a 74 79 70 65 64 65 66 20 69 6e 74 20  .*/.typedef int 
9090: 56 4c 69 73 74 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65  VList;../*.** De
90a0: 66 65 72 20 73 6f 75 72 63 69 6e 67 20 76 64 62  fer sourcing vdb
90b0: 65 2e 68 20 61 6e 64 20 62 74 72 65 65 2e 68 20  e.h and btree.h 
90c0: 75 6e 74 69 6c 20 61 66 74 65 72 20 74 68 65 20  until after the 
90d0: 22 75 38 22 20 61 6e 64 0a 2a 2a 20 22 42 75 73  "u8" and.** "Bus
90e0: 79 48 61 6e 64 6c 65 72 22 20 74 79 70 65 64 65  yHandler" typede
90f0: 66 73 2e 20 76 64 62 65 2e 68 20 61 6c 73 6f 20  fs. vdbe.h also 
9100: 72 65 71 75 69 72 65 73 20 61 20 66 65 77 20 6f  requires a few o
9110: 66 20 74 68 65 20 6f 70 61 71 75 65 0a 2a 2a 20  f the opaque.** 
9120: 70 6f 69 6e 74 65 72 20 74 79 70 65 73 20 28 69  pointer types (i
9130: 2e 65 2e 20 46 75 6e 63 44 65 66 29 20 64 65 66  .e. FuncDef) def
9140: 69 6e 65 64 20 61 62 6f 76 65 2e 0a 2a 2f 0a 23  ined above..*/.#
9150: 69 6e 63 6c 75 64 65 20 22 62 74 72 65 65 2e 68  include "btree.h
9160: 22 0a 23 69 6e 63 6c 75 64 65 20 22 76 64 62 65  ".#include "vdbe
9170: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 61  .h".#include "pa
9180: 67 65 72 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  ger.h".#include 
9190: 22 70 63 61 63 68 65 2e 68 22 0a 23 69 6e 63 6c  "pcache.h".#incl
91a0: 75 64 65 20 22 6f 73 2e 68 22 0a 23 69 6e 63 6c  ude "os.h".#incl
91b0: 75 64 65 20 22 6d 75 74 65 78 2e 68 22 0a 0a 2f  ude "mutex.h"../
91c0: 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 45 58 54  * The SQLITE_EXT
91d0: 52 41 5f 44 55 52 41 42 4c 45 20 63 6f 6d 70 69  RA_DURABLE compi
91e0: 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 75  le-time option u
91f0: 73 65 64 20 74 6f 20 73 65 74 20 74 68 65 20 64  sed to set the d
9200: 65 66 61 75 6c 74 0a 2a 2a 20 73 79 6e 63 68 72  efault.** synchr
9210: 6f 6e 6f 75 73 20 73 65 74 74 69 6e 67 20 74 6f  onous setting to
9220: 20 45 58 54 52 41 2e 20 20 49 74 20 69 73 20 6e   EXTRA.  It is n
9230: 6f 20 6c 6f 6e 67 65 72 20 73 75 70 70 6f 72 74  o longer support
9240: 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ed..*/.#ifdef SQ
9250: 4c 49 54 45 5f 45 58 54 52 41 5f 44 55 52 41 42  LITE_EXTRA_DURAB
9260: 4c 45 0a 23 20 77 61 72 6e 69 6e 67 20 55 73 65  LE.# warning Use
9270: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
9280: 53 59 4e 43 48 52 4f 4e 4f 55 53 3d 33 20 69 6e  SYNCHRONOUS=3 in
9290: 73 74 65 61 64 20 6f 66 20 53 51 4c 49 54 45 5f  stead of SQLITE_
92a0: 45 58 54 52 41 5f 44 55 52 41 42 4c 45 0a 23 20  EXTRA_DURABLE.# 
92b0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
92c0: 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55  FAULT_SYNCHRONOU
92d0: 53 20 33 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  S 3.#endif../*.*
92e0: 2a 20 44 65 66 61 75 6c 74 20 73 79 6e 63 68 72  * Default synchr
92f0: 6f 6e 6f 75 73 20 6c 65 76 65 6c 73 2e 0a 2a 2a  onous levels..**
9300: 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 28 66  .** Note that (f
9310: 6f 72 20 68 69 73 74 6f 72 63 61 6c 20 72 65 61  or historcal rea
9320: 73 6f 6e 73 29 20 74 68 65 20 50 41 47 45 52 5f  sons) the PAGER_
9330: 53 59 4e 43 48 52 4f 4e 4f 55 53 5f 2a 20 6d 61  SYNCHRONOUS_* ma
9340: 63 72 6f 73 20 64 69 66 66 65 72 0a 2a 2a 20 66  cros differ.** f
9350: 72 6f 6d 20 74 68 65 20 53 51 4c 49 54 45 5f 44  rom the SQLITE_D
9360: 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f  EFAULT_SYNCHRONO
9370: 55 53 20 76 61 6c 75 65 20 62 79 20 31 2e 0a 2a  US value by 1..*
9380: 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 50  *.**           P
9390: 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e 4f 55 53  AGER_SYNCHRONOUS
93a0: 20 20 20 20 20 20 20 44 45 46 41 55 4c 54 5f 53         DEFAULT_S
93b0: 59 4e 43 48 52 4f 4e 4f 55 53 0a 2a 2a 20 20 20  YNCHRONOUS.**   
93c0: 4f 46 46 20 20 20 20 20 20 20 20 20 20 20 31 20  OFF           1 
93d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
93e0: 20 20 20 20 20 20 20 20 30 0a 2a 2a 20 20 20 4e          0.**   N
93f0: 4f 52 4d 41 4c 20 20 20 20 20 20 20 20 32 20 20  ORMAL        2  
9400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9410: 20 20 20 20 20 20 20 31 0a 2a 2a 20 20 20 46 55         1.**   FU
9420: 4c 4c 20 20 20 20 20 20 20 20 20 20 33 20 20 20  LL          3   
9430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9440: 20 20 20 20 20 20 32 0a 2a 2a 20 20 20 45 58 54        2.**   EXT
9450: 52 41 20 20 20 20 20 20 20 20 20 34 20 20 20 20  RA         4    
9460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9470: 20 20 20 20 20 33 0a 2a 2a 0a 2a 2a 20 54 68 65       3.**.** The
9480: 20 22 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f   "PRAGMA synchro
9490: 6e 6f 75 73 22 20 73 74 61 74 65 6d 65 6e 74 20  nous" statement 
94a0: 61 6c 73 6f 20 75 73 65 73 20 74 68 65 20 7a 65  also uses the ze
94b0: 72 6f 2d 62 61 73 65 64 20 6e 75 6d 62 65 72 73  ro-based numbers
94c0: 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f  ..** In other wo
94d0: 72 64 73 2c 20 74 68 65 20 7a 65 72 6f 2d 62 61  rds, the zero-ba
94e0: 73 65 64 20 6e 75 6d 62 65 72 73 20 61 72 65 20  sed numbers are 
94f0: 75 73 65 64 20 66 6f 72 20 61 6c 6c 20 65 78 74  used for all ext
9500: 65 72 6e 61 6c 20 69 6e 74 65 72 66 61 63 65 73  ernal interfaces
9510: 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6f 6e 65 2d  .** and the one-
9520: 62 61 73 65 64 20 76 61 6c 75 65 73 20 61 72 65  based values are
9530: 20 75 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79   used internally
9540: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
9550: 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43  ITE_DEFAULT_SYNC
9560: 48 52 4f 4e 4f 55 53 0a 23 20 64 65 66 69 6e 65  HRONOUS.# define
9570: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
9580: 53 59 4e 43 48 52 4f 4e 4f 55 53 20 32 0a 23 65  SYNCHRONOUS 2.#e
9590: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
95a0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 41 4c 5f  ITE_DEFAULT_WAL_
95b0: 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 23 20 64 65  SYNCHRONOUS.# de
95c0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41  fine SQLITE_DEFA
95d0: 55 4c 54 5f 57 41 4c 5f 53 59 4e 43 48 52 4f 4e  ULT_WAL_SYNCHRON
95e0: 4f 55 53 20 53 51 4c 49 54 45 5f 44 45 46 41 55  OUS SQLITE_DEFAU
95f0: 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 23  LT_SYNCHRONOUS.#
9600: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  endif../*.** Eac
9610: 68 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  h database file 
9620: 74 6f 20 62 65 20 61 63 63 65 73 73 65 64 20 62  to be accessed b
9630: 79 20 74 68 65 20 73 79 73 74 65 6d 20 69 73 20  y the system is 
9640: 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f  an instance.** o
9650: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
9660: 73 74 72 75 63 74 75 72 65 2e 20 20 54 68 65 72  structure.  Ther
9670: 65 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 74  e are normally t
9680: 77 6f 20 6f 66 20 74 68 65 73 65 20 73 74 72 75  wo of these stru
9690: 63 74 75 72 65 73 0a 2a 2a 20 69 6e 20 74 68 65  ctures.** in the
96a0: 20 73 71 6c 69 74 65 2e 61 44 62 5b 5d 20 61 72   sqlite.aDb[] ar
96b0: 72 61 79 2e 20 20 61 44 62 5b 30 5d 20 69 73 20  ray.  aDb[0] is 
96c0: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
96d0: 65 20 66 69 6c 65 20 61 6e 64 0a 2a 2a 20 61 44  e file and.** aD
96e0: 62 5b 31 5d 20 69 73 20 74 68 65 20 64 61 74 61  b[1] is the data
96f0: 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 74  base file used t
9700: 6f 20 68 6f 6c 64 20 74 65 6d 70 6f 72 61 72 79  o hold temporary
9710: 20 74 61 62 6c 65 73 2e 20 20 41 64 64 69 74 69   tables.  Additi
9720: 6f 6e 61 6c 0a 2a 2a 20 64 61 74 61 62 61 73 65  onal.** database
9730: 73 20 6d 61 79 20 62 65 20 61 74 74 61 63 68 65  s may be attache
9740: 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 44 62 20  d..*/.struct Db 
9750: 7b 0a 20 20 63 68 61 72 20 2a 7a 44 62 53 4e 61  {.  char *zDbSNa
9760: 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65  me;      /* Name
9770: 20 6f 66 20 74 68 69 73 20 64 61 74 61 62 61 73   of this databas
9780: 65 2e 20 28 73 63 68 65 6d 61 20 6e 61 6d 65 2c  e. (schema name,
9790: 20 6e 6f 74 20 66 69 6c 65 6e 61 6d 65 29 20 2a   not filename) *
97a0: 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20  /.  Btree *pBt; 
97b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
97c0: 42 2a 54 72 65 65 20 73 74 72 75 63 74 75 72 65  B*Tree structure
97d0: 20 66 6f 72 20 74 68 69 73 20 64 61 74 61 62 61   for this databa
97e0: 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20  se file */.  u8 
97f0: 73 61 66 65 74 79 5f 6c 65 76 65 6c 3b 20 20 20  safety_level;   
9800: 20 20 2f 2a 20 48 6f 77 20 61 67 67 72 65 73 73    /* How aggress
9810: 69 76 65 20 61 74 20 73 79 6e 63 69 6e 67 20 64  ive at syncing d
9820: 61 74 61 20 74 6f 20 64 69 73 6b 20 2a 2f 0a 20  ata to disk */. 
9830: 20 75 38 20 62 53 79 6e 63 53 65 74 3b 20 20 20   u8 bSyncSet;   
9840: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
9850: 20 22 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f   "PRAGMA synchro
9860: 6e 6f 75 73 3d 4e 22 20 68 61 73 20 62 65 65 6e  nous=N" has been
9870: 20 72 75 6e 20 2a 2f 0a 20 20 53 63 68 65 6d 61   run */.  Schema
9880: 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 2f   *pSchema;     /
9890: 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 64 61 74  * Pointer to dat
98a0: 61 62 61 73 65 20 73 63 68 65 6d 61 20 28 70 6f  abase schema (po
98b0: 73 73 69 62 6c 79 20 73 68 61 72 65 64 29 20 2a  ssibly shared) *
98c0: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  /.};../*.** An i
98d0: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
98e0: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
98f0: 72 65 20 73 74 6f 72 65 73 20 61 20 64 61 74 61  re stores a data
9900: 62 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a  base schema..**.
9910: 2a 2a 20 4d 6f 73 74 20 53 63 68 65 6d 61 20 6f  ** Most Schema o
9920: 62 6a 65 63 74 73 20 61 72 65 20 61 73 73 6f 63  bjects are assoc
9930: 69 61 74 65 64 20 77 69 74 68 20 61 20 42 74 72  iated with a Btr
9940: 65 65 2e 20 20 54 68 65 20 65 78 63 65 70 74 69  ee.  The excepti
9950: 6f 6e 20 69 73 0a 2a 2a 20 74 68 65 20 53 63 68  on is.** the Sch
9960: 65 6d 61 20 66 6f 72 20 74 68 65 20 54 45 4d 50  ema for the TEMP
9970: 20 64 61 74 61 62 61 65 73 20 28 73 71 6c 69 74   databaes (sqlit
9980: 65 33 2e 61 44 62 5b 31 5d 29 20 77 68 69 63 68  e3.aDb[1]) which
9990: 20 69 73 20 66 72 65 65 2d 73 74 61 6e 64 69 6e   is free-standin
99a0: 67 2e 0a 2a 2a 20 49 6e 20 73 68 61 72 65 64 20  g..** In shared 
99b0: 63 61 63 68 65 20 6d 6f 64 65 2c 20 61 20 73 69  cache mode, a si
99c0: 6e 67 6c 65 20 53 63 68 65 6d 61 20 6f 62 6a 65  ngle Schema obje
99d0: 63 74 20 63 61 6e 20 62 65 20 73 68 61 72 65 64  ct can be shared
99e0: 20 62 79 20 6d 75 6c 74 69 70 6c 65 0a 2a 2a 20   by multiple.** 
99f0: 42 74 72 65 65 73 20 74 68 61 74 20 72 65 66 65  Btrees that refe
9a00: 72 20 74 6f 20 74 68 65 20 73 61 6d 65 20 75 6e  r to the same un
9a10: 64 65 72 6c 79 69 6e 67 20 42 74 53 68 61 72 65  derlying BtShare
9a20: 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a 0a 2a 2a 20  d object..**.** 
9a30: 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 20 61  Schema objects a
9a40: 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  re automatically
9a50: 20 64 65 61 6c 6c 6f 63 61 74 65 64 20 77 68 65   deallocated whe
9a60: 6e 20 74 68 65 20 6c 61 73 74 20 42 74 72 65 65  n the last Btree
9a70: 20 74 68 61 74 0a 2a 2a 20 72 65 66 65 72 65 6e   that.** referen
9a80: 63 65 73 20 74 68 65 6d 20 69 73 20 64 65 73 74  ces them is dest
9a90: 72 6f 79 65 64 2e 20 20 20 54 68 65 20 54 45 4d  royed.   The TEM
9aa0: 50 20 53 63 68 65 6d 61 20 69 73 20 6d 61 6e 75  P Schema is manu
9ab0: 61 6c 6c 79 20 66 72 65 65 64 20 62 79 0a 2a 2a  ally freed by.**
9ac0: 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 29   sqlite3_close()
9ad0: 2e 0a 2a 0a 2a 2a 20 41 20 74 68 72 65 61 64 20  ..*.** A thread 
9ae0: 6d 75 73 74 20 62 65 20 68 6f 6c 64 69 6e 67 20  must be holding 
9af0: 61 20 6d 75 74 65 78 20 6f 6e 20 74 68 65 20 63  a mutex on the c
9b00: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 42 74 72  orresponding Btr
9b10: 65 65 20 69 6e 20 6f 72 64 65 72 0a 2a 2a 20 74  ee in order.** t
9b20: 6f 20 61 63 63 65 73 73 20 53 63 68 65 6d 61 20  o access Schema 
9b30: 63 6f 6e 74 65 6e 74 2e 20 20 54 68 69 73 20 69  content.  This i
9b40: 6d 70 6c 69 65 73 20 74 68 61 74 20 74 68 65 20  mplies that the 
9b50: 74 68 72 65 61 64 20 6d 75 73 74 20 61 6c 73 6f  thread must also
9b60: 20 62 65 0a 2a 2a 20 68 6f 6c 64 69 6e 67 20 61   be.** holding a
9b70: 20 6d 75 74 65 78 20 6f 6e 20 74 68 65 20 73 71   mutex on the sq
9b80: 6c 69 74 65 33 20 63 6f 6e 6e 65 63 74 69 6f 6e  lite3 connection
9b90: 20 70 6f 69 6e 74 65 72 20 74 68 61 74 20 6f 77   pointer that ow
9ba0: 6e 73 20 74 68 65 20 42 74 72 65 65 2e 0a 2a 2a  ns the Btree..**
9bb0: 20 46 6f 72 20 61 20 54 45 4d 50 20 53 63 68 65   For a TEMP Sche
9bc0: 6d 61 2c 20 6f 6e 6c 79 20 74 68 65 20 63 6f 6e  ma, only the con
9bd0: 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78 20 69 73  nection mutex is
9be0: 20 72 65 71 75 69 72 65 64 2e 0a 2a 2f 0a 73 74   required..*/.st
9bf0: 72 75 63 74 20 53 63 68 65 6d 61 20 7b 0a 20 20  ruct Schema {.  
9c00: 69 6e 74 20 73 63 68 65 6d 61 5f 63 6f 6f 6b 69  int schema_cooki
9c10: 65 3b 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65  e;   /* Database
9c20: 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 20   schema version 
9c30: 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 69 73 20  number for this 
9c40: 66 69 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 69 47  file */.  int iG
9c50: 65 6e 65 72 61 74 69 6f 6e 3b 20 20 20 20 20 2f  eneration;     /
9c60: 2a 20 47 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75  * Generation cou
9c70: 6e 74 65 72 2e 20 20 49 6e 63 72 65 6d 65 6e 74  nter.  Increment
9c80: 65 64 20 77 69 74 68 20 65 61 63 68 20 63 68 61  ed with each cha
9c90: 6e 67 65 20 2a 2f 0a 20 20 48 61 73 68 20 74 62  nge */.  Hash tb
9ca0: 6c 48 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a  lHash;        /*
9cb0: 20 41 6c 6c 20 74 61 62 6c 65 73 20 69 6e 64 65   All tables inde
9cc0: 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20  xed by name */. 
9cd0: 20 48 61 73 68 20 69 64 78 48 61 73 68 3b 20 20   Hash idxHash;  
9ce0: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 28 6e 61        /* All (na
9cf0: 6d 65 64 29 20 69 6e 64 69 63 65 73 20 69 6e 64  med) indices ind
9d00: 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a  exed by name */.
9d10: 20 20 48 61 73 68 20 74 72 69 67 48 61 73 68 3b    Hash trigHash;
9d20: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74 72         /* All tr
9d30: 69 67 67 65 72 73 20 69 6e 64 65 78 65 64 20 62  iggers indexed b
9d40: 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68  y name */.  Hash
9d50: 20 66 6b 65 79 48 61 73 68 3b 20 20 20 20 20 20   fkeyHash;      
9d60: 20 2f 2a 20 41 6c 6c 20 66 6f 72 65 69 67 6e 20   /* All foreign 
9d70: 6b 65 79 73 20 62 79 20 72 65 66 65 72 65 6e 63  keys by referenc
9d80: 65 64 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f  ed table name */
9d90: 0a 20 20 54 61 62 6c 65 20 2a 70 53 65 71 54 61  .  Table *pSeqTa
9da0: 62 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73  b;      /* The s
9db0: 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74  qlite_sequence t
9dc0: 61 62 6c 65 20 75 73 65 64 20 62 79 20 41 55 54  able used by AUT
9dd0: 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20  OINCREMENT */.  
9de0: 75 38 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20  u8 file_format; 
9df0: 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 66       /* Schema f
9e00: 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e 20 66 6f  ormat version fo
9e10: 72 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20  r this file */. 
9e20: 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20   u8 enc;        
9e30: 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e        /* Text en
9e40: 63 6f 64 69 6e 67 20 75 73 65 64 20 62 79 20 74  coding used by t
9e50: 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a  his database */.
9e60: 20 20 75 31 36 20 73 63 68 65 6d 61 46 6c 61 67    u16 schemaFlag
9e70: 73 3b 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20  s;     /* Flags 
9e80: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
9e90: 74 68 69 73 20 73 63 68 65 6d 61 20 2a 2f 0a 20  this schema */. 
9ea0: 20 69 6e 74 20 63 61 63 68 65 5f 73 69 7a 65 3b   int cache_size;
9eb0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
9ec0: 6f 66 20 70 61 67 65 73 20 74 6f 20 75 73 65 20  of pages to use 
9ed0: 69 6e 20 74 68 65 20 63 61 63 68 65 20 2a 2f 0a  in the cache */.
9ee0: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20  };../*.** These 
9ef0: 6d 61 63 72 6f 73 20 63 61 6e 20 62 65 20 75 73  macros can be us
9f00: 65 64 20 74 6f 20 74 65 73 74 2c 20 73 65 74 2c  ed to test, set,
9f10: 20 6f 72 20 63 6c 65 61 72 20 62 69 74 73 20 69   or clear bits i
9f20: 6e 20 74 68 65 0a 2a 2a 20 44 62 2e 70 53 63 68  n the.** Db.pSch
9f30: 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64  ema->flags field
9f40: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 62 48  ..*/.#define DbH
9f50: 61 73 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50  asProperty(D,I,P
9f60: 29 20 20 20 20 20 28 28 28 44 29 2d 3e 61 44 62  )     (((D)->aDb
9f70: 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68  [I].pSchema->sch
9f80: 65 6d 61 46 6c 61 67 73 26 28 50 29 29 3d 3d 28  emaFlags&(P))==(
9f90: 50 29 29 0a 23 64 65 66 69 6e 65 20 44 62 48 61  P)).#define DbHa
9fa0: 73 41 6e 79 50 72 6f 70 65 72 74 79 28 44 2c 49  sAnyProperty(D,I
9fb0: 2c 50 29 20 20 28 28 28 44 29 2d 3e 61 44 62 5b  ,P)  (((D)->aDb[
9fc0: 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65  I].pSchema->sche
9fd0: 6d 61 46 6c 61 67 73 26 28 50 29 29 21 3d 30 29  maFlags&(P))!=0)
9fe0: 0a 23 64 65 66 69 6e 65 20 44 62 53 65 74 50 72  .#define DbSetPr
9ff0: 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20  operty(D,I,P)   
a000: 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53    (D)->aDb[I].pS
a010: 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61  chema->schemaFla
a020: 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65 20  gs|=(P).#define 
a030: 44 62 43 6c 65 61 72 50 72 6f 70 65 72 74 79 28  DbClearProperty(
a040: 44 2c 49 2c 50 29 20 20 20 28 44 29 2d 3e 61 44  D,I,P)   (D)->aD
a050: 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63  b[I].pSchema->sc
a060: 68 65 6d 61 46 6c 61 67 73 26 3d 7e 28 50 29 0a  hemaFlags&=~(P).
a070: 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76  ./*.** Allowed v
a080: 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 44 42  alues for the DB
a090: 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20  .pSchema->flags 
a0a0: 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  field..**.** The
a0b0: 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64   DB_SchemaLoaded
a0c0: 20 66 6c 61 67 20 69 73 20 73 65 74 20 61 66 74   flag is set aft
a0d0: 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20  er the database 
a0e0: 73 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e 0a  schema has been.
a0f0: 2a 2a 20 72 65 61 64 20 69 6e 74 6f 20 69 6e 74  ** read into int
a100: 65 72 6e 61 6c 20 68 61 73 68 20 74 61 62 6c 65  ernal hash table
a110: 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55 6e 72 65  s..**.** DB_Unre
a120: 73 65 74 56 69 65 77 73 20 6d 65 61 6e 73 20 74  setViews means t
a130: 68 61 74 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  hat one or more 
a140: 76 69 65 77 73 20 68 61 76 65 20 63 6f 6c 75 6d  views have colum
a150: 6e 20 6e 61 6d 65 73 20 74 68 61 74 0a 2a 2a 20  n names that.** 
a160: 68 61 76 65 20 62 65 65 6e 20 66 69 6c 6c 65 64  have been filled
a170: 20 6f 75 74 2e 20 20 49 66 20 74 68 65 20 73 63   out.  If the sc
a180: 68 65 6d 61 20 63 68 61 6e 67 65 73 2c 20 74 68  hema changes, th
a190: 65 73 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  ese column names
a1a0: 20 6d 69 67 68 74 0a 2a 2a 20 63 68 61 6e 67 65   might.** change
a1b0: 73 20 61 6e 64 20 73 6f 20 74 68 65 20 76 69 65  s and so the vie
a1c0: 77 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62  w will need to b
a1d0: 65 20 72 65 73 65 74 2e 0a 2a 2f 0a 23 64 65 66  e reset..*/.#def
a1e0: 69 6e 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61  ine DB_SchemaLoa
a1f0: 64 65 64 20 20 20 20 30 78 30 30 30 31 20 20 2f  ded    0x0001  /
a200: 2a 20 54 68 65 20 73 63 68 65 6d 61 20 68 61 73  * The schema has
a210: 20 62 65 65 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a   been loaded */.
a220: 23 64 65 66 69 6e 65 20 44 42 5f 55 6e 72 65 73  #define DB_Unres
a230: 65 74 56 69 65 77 73 20 20 20 20 30 78 30 30 30  etViews    0x000
a240: 32 20 20 2f 2a 20 53 6f 6d 65 20 76 69 65 77 73  2  /* Some views
a250: 20 68 61 76 65 20 64 65 66 69 6e 65 64 20 63 6f   have defined co
a260: 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a 23 64  lumn names */.#d
a270: 65 66 69 6e 65 20 44 42 5f 45 6d 70 74 79 20 20  efine DB_Empty  
a280: 20 20 20 20 20 20 20 20 20 30 78 30 30 30 34 20           0x0004 
a290: 20 2f 2a 20 54 68 65 20 66 69 6c 65 20 69 73 20   /* The file is 
a2a0: 65 6d 70 74 79 20 28 6c 65 6e 67 74 68 20 30 20  empty (length 0 
a2b0: 62 79 74 65 73 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  bytes) */../*.**
a2c0: 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64   The number of d
a2d0: 69 66 66 65 72 65 6e 74 20 6b 69 6e 64 73 20 6f  ifferent kinds o
a2e0: 66 20 74 68 69 6e 67 73 20 74 68 61 74 20 63 61  f things that ca
a2f0: 6e 20 62 65 20 6c 69 6d 69 74 65 64 0a 2a 2a 20  n be limited.** 
a300: 75 73 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65  using the sqlite
a310: 33 5f 6c 69 6d 69 74 28 29 20 69 6e 74 65 72 66  3_limit() interf
a320: 61 63 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ace..*/.#define 
a330: 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 20 28  SQLITE_N_LIMIT (
a340: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57 4f 52  SQLITE_LIMIT_WOR
a350: 4b 45 52 5f 54 48 52 45 41 44 53 2b 31 29 0a 0a  KER_THREADS+1)..
a360: 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20  /*.** Lookaside 
a370: 6d 61 6c 6c 6f 63 20 69 73 20 61 20 73 65 74 20  malloc is a set 
a380: 6f 66 20 66 69 78 65 64 2d 73 69 7a 65 20 62 75  of fixed-size bu
a390: 66 66 65 72 73 20 74 68 61 74 20 63 61 6e 20 62  ffers that can b
a3a0: 65 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 74  e used.** to sat
a3b0: 69 73 66 79 20 73 6d 61 6c 6c 20 74 72 61 6e 73  isfy small trans
a3c0: 69 65 6e 74 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  ient memory allo
a3d0: 63 61 74 69 6f 6e 20 72 65 71 75 65 73 74 73 20  cation requests 
a3e0: 66 6f 72 20 6f 62 6a 65 63 74 73 0a 2a 2a 20 61  for objects.** a
a3f0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
a400: 20 70 61 72 74 69 63 75 6c 61 72 20 64 61 74 61   particular data
a410: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
a420: 20 20 54 68 65 20 75 73 65 20 6f 66 0a 2a 2a 20    The use of.** 
a430: 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63  lookaside malloc
a440: 20 70 72 6f 76 69 64 65 73 20 61 20 73 69 67 6e   provides a sign
a450: 69 66 69 63 61 6e 74 20 70 65 72 66 6f 72 6d 61  ificant performa
a460: 6e 63 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74 0a  nce enhancement.
a470: 2a 2a 20 28 61 70 70 72 6f 78 20 31 30 25 29 20  ** (approx 10%) 
a480: 62 79 20 61 76 6f 69 64 69 6e 67 20 6e 75 6d 65  by avoiding nume
a490: 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f 66 72 65 65  rous malloc/free
a4a0: 20 72 65 71 75 65 73 74 73 20 77 68 69 6c 65 20   requests while 
a4b0: 70 61 72 73 69 6e 67 0a 2a 2a 20 53 51 4c 20 73  parsing.** SQL s
a4c0: 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a  tatements..**.**
a4d0: 20 54 68 65 20 4c 6f 6f 6b 61 73 69 64 65 20 73   The Lookaside s
a4e0: 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 63  tructure holds c
a4f0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 69 6e 66  onfiguration inf
a500: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74  ormation about t
a510: 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20  he.** lookaside 
a520: 6d 61 6c 6c 6f 63 20 73 75 62 73 79 73 74 65 6d  malloc subsystem
a530: 2e 20 20 45 61 63 68 20 61 76 61 69 6c 61 62 6c  .  Each availabl
a540: 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
a550: 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68 65 20 6c 6f  ion in.** the lo
a560: 6f 6b 61 73 69 64 65 20 73 75 62 73 79 73 74 65  okaside subsyste
a570: 6d 20 69 73 20 73 74 6f 72 65 64 20 6f 6e 20 61  m is stored on a
a580: 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20   linked list of 
a590: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 0a 2a 2a  LookasideSlot.**
a5a0: 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a 20   objects..**.** 
a5b0: 4c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61  Lookaside alloca
a5c0: 74 69 6f 6e 73 20 61 72 65 20 6f 6e 6c 79 20 61  tions are only a
a5d0: 6c 6c 6f 77 65 64 20 66 6f 72 20 6f 62 6a 65 63  llowed for objec
a5e0: 74 73 20 74 68 61 74 20 61 72 65 20 61 73 73 6f  ts that are asso
a5f0: 63 69 61 74 65 64 0a 2a 2a 20 77 69 74 68 20 61  ciated.** with a
a600: 20 70 61 72 74 69 63 75 6c 61 72 20 64 61 74 61   particular data
a610: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
a620: 20 20 48 65 6e 63 65 2c 20 73 63 68 65 6d 61 20    Hence, schema 
a630: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 61 6e 6e  information cann
a640: 6f 74 0a 2a 2a 20 62 65 20 73 74 6f 72 65 64 20  ot.** be stored 
a650: 69 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 62 65 63  in lookaside bec
a660: 61 75 73 65 20 69 6e 20 73 68 61 72 65 64 20 63  ause in shared c
a670: 61 63 68 65 20 6d 6f 64 65 20 74 68 65 20 73 63  ache mode the sc
a680: 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  hema information
a690: 0a 2a 2a 20 69 73 20 73 68 61 72 65 64 20 62 79  .** is shared by
a6a0: 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61   multiple databa
a6b0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 20  se connections. 
a6c0: 20 54 68 65 72 65 66 6f 72 65 2c 20 77 68 69 6c   Therefore, whil
a6d0: 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 73 63 68  e parsing.** sch
a6e0: 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c  ema information,
a6f0: 20 74 68 65 20 4c 6f 6f 6b 61 73 69 64 65 2e 62   the Lookaside.b
a700: 45 6e 61 62 6c 65 64 20 66 6c 61 67 20 69 73 20  Enabled flag is 
a710: 63 6c 65 61 72 65 64 20 73 6f 20 74 68 61 74 0a  cleared so that.
a720: 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c  ** lookaside all
a730: 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6e 6f 74  ocations are not
a740: 20 75 73 65 64 20 74 6f 20 63 6f 6e 73 74 72 75   used to constru
a750: 63 74 20 74 68 65 20 73 63 68 65 6d 61 20 6f 62  ct the schema ob
a760: 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74 72 75 63 74  jects..*/.struct
a770: 20 4c 6f 6f 6b 61 73 69 64 65 20 7b 0a 20 20 75   Lookaside {.  u
a780: 33 32 20 62 44 69 73 61 62 6c 65 3b 20 20 20 20  32 bDisable;    
a790: 20 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 6f         /* Only o
a7a0: 70 65 72 61 74 65 20 74 68 65 20 6c 6f 6f 6b 61  perate the looka
a7b0: 73 69 64 65 20 77 68 65 6e 20 7a 65 72 6f 20 2a  side when zero *
a7c0: 2f 0a 20 20 75 31 36 20 73 7a 3b 20 20 20 20 20  /.  u16 sz;     
a7d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
a7e0: 69 7a 65 20 6f 66 20 65 61 63 68 20 62 75 66 66  ize of each buff
a7f0: 65 72 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20  er in bytes */. 
a800: 20 75 38 20 62 4d 61 6c 6c 6f 63 65 64 3b 20 20   u8 bMalloced;  
a810: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
a820: 20 69 66 20 70 53 74 61 72 74 20 6f 62 74 61 69   if pStart obtai
a830: 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 33  ned from sqlite3
a840: 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 20 20 69  _malloc() */.  i
a850: 6e 74 20 6e 4f 75 74 3b 20 20 20 20 20 20 20 20  nt nOut;        
a860: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
a870: 20 6f 66 20 62 75 66 66 65 72 73 20 63 75 72 72   of buffers curr
a880: 65 6e 74 6c 79 20 63 68 65 63 6b 65 64 20 6f 75  ently checked ou
a890: 74 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 4f 75 74  t */.  int mxOut
a8a0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
a8b0: 2a 20 48 69 67 68 77 61 74 65 72 20 6d 61 72 6b  * Highwater mark
a8c0: 20 66 6f 72 20 6e 4f 75 74 20 2a 2f 0a 20 20 69   for nOut */.  i
a8d0: 6e 74 20 61 6e 53 74 61 74 5b 33 5d 3b 20 20 20  nt anStat[3];   
a8e0: 20 20 20 20 20 20 20 2f 2a 20 30 3a 20 68 69 74         /* 0: hit
a8f0: 73 2e 20 20 31 3a 20 73 69 7a 65 20 6d 69 73 73  s.  1: size miss
a900: 65 73 2e 20 20 32 3a 20 66 75 6c 6c 20 6d 69 73  es.  2: full mis
a910: 73 65 73 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69  ses */.  Lookasi
a920: 64 65 53 6c 6f 74 20 2a 70 46 72 65 65 3b 20 20  deSlot *pFree;  
a930: 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 76 61 69   /* List of avai
a940: 6c 61 62 6c 65 20 62 75 66 66 65 72 73 20 2a 2f  lable buffers */
a950: 0a 20 20 76 6f 69 64 20 2a 70 53 74 61 72 74 3b  .  void *pStart;
a960: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69             /* Fi
a970: 72 73 74 20 62 79 74 65 20 6f 66 20 61 76 61 69  rst byte of avai
a980: 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 70 61  lable memory spa
a990: 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 45  ce */.  void *pE
a9a0: 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nd;             
a9b0: 2f 2a 20 46 69 72 73 74 20 62 79 74 65 20 70 61  /* First byte pa
a9c0: 73 74 20 65 6e 64 20 6f 66 20 61 76 61 69 6c 61  st end of availa
a9d0: 62 6c 65 20 73 70 61 63 65 20 2a 2f 0a 7d 3b 0a  ble space */.};.
a9e0: 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65  struct Lookaside
a9f0: 53 6c 6f 74 20 7b 0a 20 20 4c 6f 6f 6b 61 73 69  Slot {.  Lookasi
aa00: 64 65 53 6c 6f 74 20 2a 70 4e 65 78 74 3b 20 20  deSlot *pNext;  
aa10: 20 20 2f 2a 20 4e 65 78 74 20 62 75 66 66 65 72    /* Next buffer
aa20: 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 20   in the list of 
aa30: 66 72 65 65 20 62 75 66 66 65 72 73 20 2a 2f 0a  free buffers */.
aa40: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 68 61 73 68  };../*.** A hash
aa50: 20 74 61 62 6c 65 20 66 6f 72 20 62 75 69 6c 74   table for built
aa60: 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 20 64 65 66  -in function def
aa70: 69 6e 69 74 69 6f 6e 73 2e 20 20 28 41 70 70 6c  initions.  (Appl
aa80: 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 0a  ication-defined.
aa90: 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 75 73 65  ** functions use
aaa0: 20 61 20 72 65 67 75 6c 61 72 20 74 61 62 6c 65   a regular table
aab0: 20 74 61 62 6c 65 20 66 72 6f 6d 20 68 61 73 68   table from hash
aac0: 2e 68 2e 29 0a 2a 2a 0a 2a 2a 20 48 61 73 68 20  .h.).**.** Hash 
aad0: 65 61 63 68 20 46 75 6e 63 44 65 66 20 73 74 72  each FuncDef str
aae0: 75 63 74 75 72 65 20 69 6e 74 6f 20 6f 6e 65 20  ucture into one 
aaf0: 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66 48 61  of the FuncDefHa
ab00: 73 68 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a 2a  sh.a[] slots..**
ab10: 20 43 6f 6c 6c 69 73 69 6f 6e 73 20 61 72 65 20   Collisions are 
ab20: 6f 6e 20 74 68 65 20 46 75 6e 63 44 65 66 2e 75  on the FuncDef.u
ab30: 2e 70 48 61 73 68 20 63 68 61 69 6e 2e 0a 2a 2f  .pHash chain..*/
ab40: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ab50: 46 55 4e 43 5f 48 41 53 48 5f 53 5a 20 32 33 0a  FUNC_HASH_SZ 23.
ab60: 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 48 61  struct FuncDefHa
ab70: 73 68 20 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a  sh {.  FuncDef *
ab80: 61 5b 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41  a[SQLITE_FUNC_HA
ab90: 53 48 5f 53 5a 5d 3b 20 20 20 20 20 20 20 2f 2a  SH_SZ];       /*
aba0: 20 48 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20   Hash table for 
abb0: 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a  functions */.};.
abc0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55  .#ifdef SQLITE_U
abd0: 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49  SER_AUTHENTICATI
abe0: 4f 4e 0a 2f 2a 0a 2a 2a 20 49 6e 66 6f 72 6d 61  ON./*.** Informa
abf0: 74 69 6f 6e 20 68 65 6c 64 20 69 6e 20 74 68 65  tion held in the
ac00: 20 22 73 71 6c 69 74 65 33 22 20 64 61 74 61 62   "sqlite3" datab
ac10: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f  ase connection o
ac20: 62 6a 65 63 74 20 61 6e 64 20 75 73 65 64 0a 2a  bject and used.*
ac30: 2a 20 74 6f 20 6d 61 6e 61 67 65 20 75 73 65 72  * to manage user
ac40: 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 2e   authentication.
ac50: 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75  .*/.typedef stru
ac60: 63 74 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61  ct sqlite3_usera
ac70: 75 74 68 20 73 71 6c 69 74 65 33 5f 75 73 65 72  uth sqlite3_user
ac80: 61 75 74 68 3b 0a 73 74 72 75 63 74 20 73 71 6c  auth;.struct sql
ac90: 69 74 65 33 5f 75 73 65 72 61 75 74 68 20 7b 0a  ite3_userauth {.
aca0: 20 20 75 38 20 61 75 74 68 4c 65 76 65 6c 3b 20    u8 authLevel; 
acb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
acc0: 2f 2a 20 43 75 72 72 65 6e 74 20 61 75 74 68 65  /* Current authe
acd0: 6e 74 69 63 61 74 69 6f 6e 20 6c 65 76 65 6c 20  ntication level 
ace0: 2a 2f 0a 20 20 69 6e 74 20 6e 41 75 74 68 50 57  */.  int nAuthPW
acf0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
ad00: 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68     /* Size of th
ad10: 65 20 7a 41 75 74 68 50 57 20 69 6e 20 62 79 74  e zAuthPW in byt
ad20: 65 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41  es */.  char *zA
ad30: 75 74 68 50 57 3b 20 20 20 20 20 20 20 20 20 20  uthPW;          
ad40: 20 20 20 20 20 20 2f 2a 20 50 61 73 73 77 6f 72        /* Passwor
ad50: 64 20 75 73 65 64 20 74 6f 20 61 75 74 68 65 6e  d used to authen
ad60: 74 69 63 61 74 65 20 2a 2f 0a 20 20 63 68 61 72  ticate */.  char
ad70: 20 2a 7a 41 75 74 68 55 73 65 72 3b 20 20 20 20   *zAuthUser;    
ad80: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65            /* Use
ad90: 72 20 6e 61 6d 65 20 75 73 65 64 20 74 6f 20 61  r name used to a
ada0: 75 74 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a 7d  uthenticate */.}
adb0: 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61  ;../* Allowed va
adc0: 6c 75 65 73 20 66 6f 72 20 73 71 6c 69 74 65 33  lues for sqlite3
add0: 5f 75 73 65 72 61 75 74 68 2e 61 75 74 68 4c 65  _userauth.authLe
ade0: 76 65 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55  vel */.#define U
adf0: 41 55 54 48 5f 55 6e 6b 6e 6f 77 6e 20 20 20 20  AUTH_Unknown    
ae00: 20 30 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e   0     /* Authen
ae10: 74 69 63 61 74 69 6f 6e 20 6e 6f 74 20 79 65 74  tication not yet
ae20: 20 63 68 65 63 6b 65 64 20 2a 2f 0a 23 64 65 66   checked */.#def
ae30: 69 6e 65 20 55 41 55 54 48 5f 46 61 69 6c 20 20  ine UAUTH_Fail  
ae40: 20 20 20 20 20 20 31 20 20 20 20 20 2f 2a 20 55        1     /* U
ae50: 73 65 72 20 61 75 74 68 65 6e 74 69 63 61 74 69  ser authenticati
ae60: 6f 6e 20 66 61 69 6c 65 64 20 2a 2f 0a 23 64 65  on failed */.#de
ae70: 66 69 6e 65 20 55 41 55 54 48 5f 55 73 65 72 20  fine UAUTH_User 
ae80: 20 20 20 20 20 20 20 32 20 20 20 20 20 2f 2a 20         2     /* 
ae90: 41 75 74 68 65 6e 74 69 63 61 74 65 64 20 61 73  Authenticated as
aea0: 20 61 20 6e 6f 72 6d 61 6c 20 75 73 65 72 20 2a   a normal user *
aeb0: 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f  /.#define UAUTH_
aec0: 41 64 6d 69 6e 20 20 20 20 20 20 20 33 20 20 20  Admin       3   
aed0: 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74    /* Authenticat
aee0: 65 64 20 61 73 20 61 6e 20 61 64 6d 69 6e 69 73  ed as an adminis
aef0: 74 72 61 74 6f 72 20 2a 2f 0a 0a 2f 2a 20 46 75  trator */../* Fu
af00: 6e 63 74 69 6f 6e 73 20 75 73 65 64 20 6f 6e 6c  nctions used onl
af10: 79 20 62 79 20 75 73 65 72 20 61 75 74 68 6f 72  y by user author
af20: 69 7a 61 74 69 6f 6e 20 6c 6f 67 69 63 20 2a 2f  ization logic */
af30: 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 73 65 72  .int sqlite3User
af40: 41 75 74 68 54 61 62 6c 65 28 63 6f 6e 73 74 20  AuthTable(const 
af50: 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  char*);.int sqli
af60: 74 65 33 55 73 65 72 41 75 74 68 43 68 65 63 6b  te3UserAuthCheck
af70: 4c 6f 67 69 6e 28 73 71 6c 69 74 65 33 2a 2c 63  Login(sqlite3*,c
af80: 6f 6e 73 74 20 63 68 61 72 2a 2c 75 38 2a 29 3b  onst char*,u8*);
af90: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 73 65  .void sqlite3Use
afa0: 72 41 75 74 68 49 6e 69 74 28 73 71 6c 69 74 65  rAuthInit(sqlite
afb0: 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
afc0: 33 43 72 79 70 74 46 75 6e 63 28 73 71 6c 69 74  3CryptFunc(sqlit
afd0: 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
afe0: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29  sqlite3_value**)
aff0: 3b 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  ;..#endif /* SQL
b000: 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54  ITE_USER_AUTHENT
b010: 49 43 41 54 49 4f 4e 20 2a 2f 0a 0a 2f 2a 0a 2a  ICATION */../*.*
b020: 2a 20 74 79 70 65 64 65 66 20 66 6f 72 20 74 68  * typedef for th
b030: 65 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20  e authorization 
b040: 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f  callback functio
b050: 6e 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  n..*/.#ifdef SQL
b060: 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54  ITE_USER_AUTHENT
b070: 49 43 41 54 49 4f 4e 0a 20 20 74 79 70 65 64 65  ICATION.  typede
b080: 66 20 69 6e 74 20 28 2a 73 71 6c 69 74 65 33 5f  f int (*sqlite3_
b090: 78 61 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74  xauth)(void*,int
b0a0: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  ,const char*,con
b0b0: 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
b0c0: 68 61 72 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  har*,.          
b0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b0e0: 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a       const char*
b0f0: 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
b100: 23 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20  #else.  typedef 
b110: 69 6e 74 20 28 2a 73 71 6c 69 74 65 33 5f 78 61  int (*sqlite3_xa
b120: 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63  uth)(void*,int,c
b130: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
b140: 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
b150: 72 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  r*,.            
b160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b170: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b     const char*);
b180: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
b190: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50   SQLITE_OMIT_DEP
b1a0: 52 45 43 41 54 45 44 0a 2f 2a 20 54 68 69 73 20  RECATED./* This 
b1b0: 69 73 20 61 6e 20 65 78 74 72 61 20 53 51 4c 49  is an extra SQLI
b1c0: 54 45 5f 54 52 41 43 45 20 6d 61 63 72 6f 20 74  TE_TRACE macro t
b1d0: 68 61 74 20 69 6e 64 69 63 61 74 65 73 20 22 6c  hat indicates "l
b1e0: 65 67 61 63 79 22 20 74 72 61 63 69 6e 67 0a 2a  egacy" tracing.*
b1f0: 2a 20 69 6e 20 74 68 65 20 73 74 79 6c 65 20 6f  * in the style o
b200: 66 20 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28  f sqlite3_trace(
b210: 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ).*/.#define SQL
b220: 49 54 45 5f 54 52 41 43 45 5f 4c 45 47 41 43 59  ITE_TRACE_LEGACY
b230: 20 20 30 78 38 30 0a 23 65 6c 73 65 0a 23 64 65    0x80.#else.#de
b240: 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 52 41 43  fine SQLITE_TRAC
b250: 45 5f 4c 45 47 41 43 59 20 20 30 0a 23 65 6e 64  E_LEGACY  0.#end
b260: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
b270: 54 5f 44 45 50 52 45 43 41 54 45 44 20 2a 2f 0a  T_DEPRECATED */.
b280: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74  ../*.** Each dat
b290: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
b2a0: 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   is an instance 
b2b0: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
b2c0: 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73   structure..*/.s
b2d0: 74 72 75 63 74 20 73 71 6c 69 74 65 33 20 7b 0a  truct sqlite3 {.
b2e0: 20 20 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 70    sqlite3_vfs *p
b2f0: 56 66 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  Vfs;            
b300: 2f 2a 20 4f 53 20 49 6e 74 65 72 66 61 63 65 20  /* OS Interface 
b310: 2a 2f 0a 20 20 73 74 72 75 63 74 20 56 64 62 65  */.  struct Vdbe
b320: 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20 20   *pVdbe;        
b330: 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63     /* List of ac
b340: 74 69 76 65 20 76 69 72 74 75 61 6c 20 6d 61 63  tive virtual mac
b350: 68 69 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53  hines */.  CollS
b360: 65 71 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20  eq *pDfltColl;  
b370: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
b380: 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e  default collatin
b390: 67 20 73 65 71 75 65 6e 63 65 20 28 42 49 4e 41  g sequence (BINA
b3a0: 52 59 29 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  RY) */.  sqlite3
b3b0: 5f 6d 75 74 65 78 20 2a 6d 75 74 65 78 3b 20 20  _mutex *mutex;  
b3c0: 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63         /* Connec
b3d0: 74 69 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20  tion mutex */.  
b3e0: 44 62 20 2a 61 44 62 3b 20 20 20 20 20 20 20 20  Db *aDb;        
b3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b400: 20 41 6c 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f   All backends */
b410: 0a 20 20 69 6e 74 20 6e 44 62 3b 20 20 20 20 20  .  int nDb;     
b420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b430: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 61   /* Number of ba
b440: 63 6b 65 6e 64 73 20 63 75 72 72 65 6e 74 6c 79  ckends currently
b450: 20 69 6e 20 75 73 65 20 2a 2f 0a 20 20 69 6e 74   in use */.  int
b460: 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20   flags;         
b470: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69             /* Mi
b480: 73 63 65 6c 6c 61 6e 65 6f 75 73 20 66 6c 61 67  scellaneous flag
b490: 73 2e 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a  s. See below */.
b4a0: 20 20 69 36 34 20 6c 61 73 74 52 6f 77 69 64 3b    i64 lastRowid;
b4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b4c0: 2f 2a 20 52 4f 57 49 44 20 6f 66 20 6d 6f 73 74  /* ROWID of most
b4d0: 20 72 65 63 65 6e 74 20 69 6e 73 65 72 74 20 28   recent insert (
b4e0: 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20  see above) */.  
b4f0: 69 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20  i64 szMmap;     
b500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b510: 20 44 65 66 61 75 6c 74 20 6d 6d 61 70 5f 73 69   Default mmap_si
b520: 7a 65 20 73 65 74 74 69 6e 67 20 2a 2f 0a 20 20  ze setting */.  
b530: 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6f 70 65  unsigned int ope
b540: 6e 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a  nFlags;       /*
b550: 20 46 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f   Flags passed to
b560: 20 73 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70   sqlite3_vfs.xOp
b570: 65 6e 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72  en() */.  int er
b580: 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20  rCode;          
b590: 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20          /* Most 
b5a0: 72 65 63 65 6e 74 20 65 72 72 6f 72 20 63 6f 64  recent error cod
b5b0: 65 20 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a  e (SQLITE_*) */.
b5c0: 20 20 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20    int errMask;  
b5d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b5e0: 2f 2a 20 26 20 72 65 73 75 6c 74 20 63 6f 64 65  /* & result code
b5f0: 73 20 77 69 74 68 20 74 68 69 73 20 62 65 66 6f  s with this befo
b600: 72 65 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a  re returning */.
b610: 20 20 69 6e 74 20 69 53 79 73 45 72 72 6e 6f 3b    int iSysErrno;
b620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b630: 2f 2a 20 45 72 72 6e 6f 20 76 61 6c 75 65 20 66  /* Errno value f
b640: 72 6f 6d 20 6c 61 73 74 20 73 79 73 74 65 6d 20  rom last system 
b650: 65 72 72 6f 72 20 2a 2f 0a 20 20 75 31 36 20 64  error */.  u16 d
b660: 62 4f 70 74 46 6c 61 67 73 3b 20 20 20 20 20 20  bOptFlags;      
b670: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67           /* Flag
b680: 73 20 74 6f 20 65 6e 61 62 6c 65 2f 64 69 73 61  s to enable/disa
b690: 62 6c 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ble optimization
b6a0: 73 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20  s */.  u8 enc;  
b6b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b6c0: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63       /* Text enc
b6d0: 6f 64 69 6e 67 20 2a 2f 0a 20 20 75 38 20 61 75  oding */.  u8 au
b6e0: 74 6f 43 6f 6d 6d 69 74 3b 20 20 20 20 20 20 20  toCommit;       
b6f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
b700: 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67  auto-commit flag
b710: 2e 20 2a 2f 0a 20 20 75 38 20 74 65 6d 70 5f 73  . */.  u8 temp_s
b720: 74 6f 72 65 3b 20 20 20 20 20 20 20 20 20 20 20  tore;           
b730: 20 20 20 20 20 2f 2a 20 31 3a 20 66 69 6c 65 20       /* 1: file 
b740: 32 3a 20 6d 65 6d 6f 72 79 20 30 3a 20 64 65 66  2: memory 0: def
b750: 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6d 61 6c  ault */.  u8 mal
b760: 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20 20 20 20  locFailed;      
b770: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
b780: 69 66 20 77 65 20 68 61 76 65 20 73 65 65 6e 20  if we have seen 
b790: 61 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65  a malloc failure
b7a0: 20 2a 2f 0a 20 20 75 38 20 62 42 65 6e 69 67 6e   */.  u8 bBenign
b7b0: 4d 61 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20  Malloc;         
b7c0: 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 72 65      /* Do not re
b7d0: 71 75 69 72 65 20 4f 4f 4d 73 20 69 66 20 74 72  quire OOMs if tr
b7e0: 75 65 20 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c  ue */.  u8 dfltL
b7f0: 6f 63 6b 4d 6f 64 65 3b 20 20 20 20 20 20 20 20  ockMode;        
b800: 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74        /* Default
b810: 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f   locking-mode fo
b820: 72 20 61 74 74 61 63 68 65 64 20 64 62 73 20 2a  r attached dbs *
b830: 2f 0a 20 20 73 69 67 6e 65 64 20 63 68 61 72 20  /.  signed char 
b840: 6e 65 78 74 41 75 74 6f 76 61 63 3b 20 20 20 20  nextAutovac;    
b850: 20 20 2f 2a 20 41 75 74 6f 76 61 63 20 73 65 74    /* Autovac set
b860: 74 69 6e 67 20 61 66 74 65 72 20 56 41 43 55 55  ting after VACUU
b870: 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38  M if >=0 */.  u8
b880: 20 73 75 70 70 72 65 73 73 45 72 72 3b 20 20 20   suppressErr;   
b890: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
b8a0: 6f 20 6e 6f 74 20 69 73 73 75 65 20 65 72 72 6f  o not issue erro
b8b0: 72 20 6d 65 73 73 61 67 65 73 20 69 66 20 74 72  r messages if tr
b8c0: 75 65 20 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f  ue */.  u8 vtabO
b8d0: 6e 43 6f 6e 66 6c 69 63 74 3b 20 20 20 20 20 20  nConflict;      
b8e0: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74        /* Value t
b8f0: 6f 20 72 65 74 75 72 6e 20 66 6f 72 20 73 33 5f  o return for s3_
b900: 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74  vtab_on_conflict
b910: 28 29 20 2a 2f 0a 20 20 75 38 20 69 73 54 72 61  () */.  u8 isTra
b920: 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
b930: 74 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  t;    /* True if
b940: 20 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73   the outermost s
b950: 61 76 65 70 6f 69 6e 74 20 69 73 20 61 20 54 53  avepoint is a TS
b960: 20 2a 2f 0a 20 20 75 38 20 6d 54 72 61 63 65 3b   */.  u8 mTrace;
b970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b980: 20 20 20 20 2f 2a 20 7a 65 72 6f 20 6f 72 20 6d      /* zero or m
b990: 6f 72 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45  ore SQLITE_TRACE
b9a0: 20 66 6c 61 67 73 20 2a 2f 0a 20 20 75 38 20 73   flags */.  u8 s
b9b0: 6b 69 70 42 74 72 65 65 4d 75 74 65 78 3b 20 20  kipBtreeMutex;  
b9c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
b9d0: 65 20 69 66 20 6e 6f 20 73 68 61 72 65 64 2d 63  e if no shared-c
b9e0: 61 63 68 65 20 62 61 63 6b 65 6e 64 73 20 2a 2f  ache backends */
b9f0: 0a 20 20 75 38 20 6e 53 71 6c 45 78 65 63 3b 20  .  u8 nSqlExec; 
ba00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ba10: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 65   /* Number of pe
ba20: 6e 64 69 6e 67 20 4f 50 5f 53 71 6c 45 78 65 63  nding OP_SqlExec
ba30: 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 20 20 69 6e   opcodes */.  in
ba40: 74 20 6e 65 78 74 50 61 67 65 73 69 7a 65 3b 20  t nextPagesize; 
ba50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
ba60: 61 67 65 73 69 7a 65 20 61 66 74 65 72 20 56 41  agesize after VA
ba70: 43 55 55 4d 20 69 66 20 3e 30 20 2a 2f 0a 20 20  CUUM if >0 */.  
ba80: 75 33 32 20 6d 61 67 69 63 3b 20 20 20 20 20 20  u32 magic;      
ba90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
baa0: 20 4d 61 67 69 63 20 6e 75 6d 62 65 72 20 66 6f   Magic number fo
bab0: 72 20 64 65 74 65 63 74 20 6c 69 62 72 61 72 79  r detect library
bac0: 20 6d 69 73 75 73 65 20 2a 2f 0a 20 20 69 6e 74   misuse */.  int
bad0: 20 6e 43 68 61 6e 67 65 3b 20 20 20 20 20 20 20   nChange;       
bae0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
baf0: 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20  lue returned by 
bb00: 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28  sqlite3_changes(
bb10: 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 6f 74 61  ) */.  int nTota
bb20: 6c 43 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20  lChange;        
bb30: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65       /* Value re
bb40: 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65  turned by sqlite
bb50: 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28  3_total_changes(
bb60: 29 20 2a 2f 0a 20 20 69 6e 74 20 61 4c 69 6d 69  ) */.  int aLimi
bb70: 74 5b 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54  t[SQLITE_N_LIMIT
bb80: 5d 3b 20 20 20 2f 2a 20 4c 69 6d 69 74 73 20 2a  ];   /* Limits *
bb90: 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 53 6f 72 74  /.  int nMaxSort
bba0: 65 72 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20  erMmap;         
bbb0: 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 69 7a    /* Maximum siz
bbc0: 65 20 6f 66 20 72 65 67 69 6f 6e 73 20 6d 61 70  e of regions map
bbd0: 70 65 64 20 62 79 20 73 6f 72 74 65 72 20 2a 2f  ped by sorter */
bbe0: 0a 20 20 73 74 72 75 63 74 20 73 71 6c 69 74 65  .  struct sqlite
bbf0: 33 49 6e 69 74 49 6e 66 6f 20 7b 20 20 20 20 20  3InitInfo {     
bc00: 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
bc10: 75 73 65 64 20 64 75 72 69 6e 67 20 69 6e 69 74  used during init
bc20: 69 61 6c 69 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20  ialization */.  
bc30: 20 20 69 6e 74 20 6e 65 77 54 6e 75 6d 3b 20 20    int newTnum;  
bc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
bc50: 20 52 6f 6f 74 70 61 67 65 20 6f 66 20 74 61 62   Rootpage of tab
bc60: 6c 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c  le being initial
bc70: 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 69  ized */.    u8 i
bc80: 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Db;             
bc90: 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68          /* Which
bca0: 20 64 62 20 66 69 6c 65 20 69 73 20 62 65 69 6e   db file is bein
bcb0: 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  g initialized */
bcc0: 0a 20 20 20 20 75 38 20 62 75 73 79 3b 20 20 20  .    u8 busy;   
bcd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bce0: 20 2f 2a 20 54 52 55 45 20 69 66 20 63 75 72 72   /* TRUE if curr
bcf0: 65 6e 74 6c 79 20 69 6e 69 74 69 61 6c 69 7a 69  ently initializi
bd00: 6e 67 20 2a 2f 0a 20 20 20 20 75 38 20 6f 72 70  ng */.    u8 orp
bd10: 68 61 6e 54 72 69 67 67 65 72 3b 20 20 20 20 20  hanTrigger;     
bd20: 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 73 74        /* Last st
bd30: 61 74 65 6d 65 6e 74 20 69 73 20 6f 72 70 68 61  atement is orpha
bd40: 6e 65 64 20 54 45 4d 50 20 74 72 69 67 67 65 72  ned TEMP trigger
bd50: 20 2a 2f 0a 20 20 20 20 75 38 20 69 6d 70 6f 73   */.    u8 impos
bd60: 74 65 72 54 61 62 6c 65 3b 20 20 20 20 20 20 20  terTable;       
bd70: 20 20 20 20 2f 2a 20 42 75 69 6c 64 69 6e 67 20      /* Building 
bd80: 61 6e 20 69 6d 70 6f 73 74 65 72 20 74 61 62 6c  an imposter tabl
bd90: 65 20 2a 2f 0a 20 20 7d 20 69 6e 69 74 3b 0a 20  e */.  } init;. 
bda0: 20 69 6e 74 20 6e 56 64 62 65 41 63 74 69 76 65   int nVdbeActive
bdb0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
bdc0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 56 44 42 45  * Number of VDBE
bdd0: 73 20 63 75 72 72 65 6e 74 6c 79 20 72 75 6e 6e  s currently runn
bde0: 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64  ing */.  int nVd
bdf0: 62 65 52 65 61 64 3b 20 20 20 20 20 20 20 20 20  beRead;         
be00: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
be10: 20 6f 66 20 61 63 74 69 76 65 20 56 44 42 45 73   of active VDBEs
be20: 20 74 68 61 74 20 72 65 61 64 20 6f 72 20 77 72   that read or wr
be30: 69 74 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64  ite */.  int nVd
be40: 62 65 57 72 69 74 65 3b 20 20 20 20 20 20 20 20  beWrite;        
be50: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
be60: 20 6f 66 20 61 63 74 69 76 65 20 56 44 42 45 73   of active VDBEs
be70: 20 74 68 61 74 20 72 65 61 64 20 61 6e 64 20 77   that read and w
be80: 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 56  rite */.  int nV
be90: 64 62 65 45 78 65 63 3b 20 20 20 20 20 20 20 20  dbeExec;        
bea0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
beb0: 72 20 6f 66 20 6e 65 73 74 65 64 20 63 61 6c 6c  r of nested call
bec0: 73 20 74 6f 20 56 64 62 65 45 78 65 63 28 29 20  s to VdbeExec() 
bed0: 2a 2f 0a 20 20 69 6e 74 20 6e 56 44 65 73 74 72  */.  int nVDestr
bee0: 6f 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  oy;             
bef0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
bf00: 61 63 74 69 76 65 20 4f 50 5f 56 44 65 73 74 72  active OP_VDestr
bf10: 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73 20 2a 2f  oy operations */
bf20: 0a 20 20 69 6e 74 20 6e 45 78 74 65 6e 73 69 6f  .  int nExtensio
bf30: 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n;              
bf40: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f   /* Number of lo
bf50: 61 64 65 64 20 65 78 74 65 6e 73 69 6f 6e 73 20  aded extensions 
bf60: 2a 2f 0a 20 20 76 6f 69 64 20 2a 2a 61 45 78 74  */.  void **aExt
bf70: 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20  ension;         
bf80: 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 73     /* Array of s
bf90: 68 61 72 65 64 20 6c 69 62 72 61 72 79 20 68 61  hared library ha
bfa0: 6e 64 6c 65 73 20 2a 2f 0a 20 20 69 6e 74 20 28  ndles */.  int (
bfb0: 2a 78 54 72 61 63 65 29 28 75 33 32 2c 76 6f 69  *xTrace)(u32,voi
bfc0: 64 2a 2c 76 6f 69 64 2a 2c 76 6f 69 64 2a 29 3b  d*,void*,void*);
bfd0: 20 20 20 20 20 2f 2a 20 54 72 61 63 65 20 66 75       /* Trace fu
bfe0: 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64  nction */.  void
bff0: 20 2a 70 54 72 61 63 65 41 72 67 3b 20 20 20 20   *pTraceArg;    
c000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c010: 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
c020: 74 20 74 6f 20 74 68 65 20 74 72 61 63 65 20 66  t to the trace f
c030: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69  unction */.  voi
c040: 64 20 28 2a 78 50 72 6f 66 69 6c 65 29 28 76 6f  d (*xProfile)(vo
c050: 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  id*,const char*,
c060: 75 36 34 29 3b 20 20 2f 2a 20 50 72 6f 66 69 6c  u64);  /* Profil
c070: 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ing function */.
c080: 20 20 76 6f 69 64 20 2a 70 50 72 6f 66 69 6c 65    void *pProfile
c090: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
c0a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
c0b0: 72 67 75 6d 65 6e 74 20 74 6f 20 70 72 6f 66 69  rgument to profi
c0c0: 6c 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  le function */. 
c0d0: 20 76 6f 69 64 20 2a 70 43 6f 6d 6d 69 74 41 72   void *pCommitAr
c0e0: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
c0f0: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
c100: 6f 20 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63  o xCommitCallbac
c110: 6b 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78  k() */.  int (*x
c120: 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 29 28  CommitCallback)(
c130: 76 6f 69 64 2a 29 3b 20 20 20 20 2f 2a 20 49 6e  void*);    /* In
c140: 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20 63  voked at every c
c150: 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64  ommit. */.  void
c160: 20 2a 70 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 20   *pRollbackArg; 
c170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c180: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 52 6f   Argument to xRo
c190: 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 28 29  llbackCallback()
c1a0: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f   */.  void (*xRo
c1b0: 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28  llbackCallback)(
c1c0: 76 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b  void*); /* Invok
c1d0: 65 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d  ed at every comm
c1e0: 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  it. */.  void *p
c1f0: 55 70 64 61 74 65 41 72 67 3b 0a 20 20 76 6f 69  UpdateArg;.  voi
c200: 64 20 28 2a 78 55 70 64 61 74 65 43 61 6c 6c 62  d (*xUpdateCallb
c210: 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20  ack)(void*,int, 
c220: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
c230: 74 20 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69  t char*,sqlite_i
c240: 6e 74 36 34 29 3b 0a 23 69 66 64 65 66 20 53 51  nt64);.#ifdef SQ
c250: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55  LITE_ENABLE_PREU
c260: 50 44 41 54 45 5f 48 4f 4f 4b 0a 20 20 76 6f 69  PDATE_HOOK.  voi
c270: 64 20 2a 70 50 72 65 55 70 64 61 74 65 41 72 67  d *pPreUpdateArg
c280: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69  ;          /* Fi
c290: 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  rst argument to 
c2a0: 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61  xPreUpdateCallba
c2b0: 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  ck */.  void (*x
c2c0: 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63  PreUpdateCallbac
c2d0: 6b 29 28 20 20 20 2f 2a 20 52 65 67 69 73 74 65  k)(   /* Registe
c2e0: 72 65 64 20 75 73 69 6e 67 20 73 71 6c 69 74 65  red using sqlite
c2f0: 33 5f 70 72 65 75 70 64 61 74 65 5f 68 6f 6f 6b  3_preupdate_hook
c300: 28 29 20 2a 2f 0a 20 20 20 20 76 6f 69 64 2a 2c  () */.    void*,
c310: 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 68 61  sqlite3*,int,cha
c320: 72 20 63 6f 6e 73 74 2a 2c 63 68 61 72 20 63 6f  r const*,char co
c330: 6e 73 74 2a 2c 73 71 6c 69 74 65 33 5f 69 6e 74  nst*,sqlite3_int
c340: 36 34 2c 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  64,sqlite3_int64
c350: 0a 20 20 29 3b 0a 20 20 50 72 65 55 70 64 61 74  .  );.  PreUpdat
c360: 65 20 2a 70 50 72 65 55 70 64 61 74 65 3b 20 20  e *pPreUpdate;  
c370: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74        /* Context
c380: 20 66 6f 72 20 61 63 74 69 76 65 20 70 72 65 2d   for active pre-
c390: 75 70 64 61 74 65 20 63 61 6c 6c 62 61 63 6b 20  update callback 
c3a0: 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  */.#endif /* SQL
c3b0: 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50  ITE_ENABLE_PREUP
c3c0: 44 41 54 45 5f 48 4f 4f 4b 20 2a 2f 0a 23 69 66  DATE_HOOK */.#if
c3d0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
c3e0: 5f 57 41 4c 0a 20 20 69 6e 74 20 28 2a 78 57 61  _WAL.  int (*xWa
c3f0: 6c 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 20  lCallback)(void 
c400: 2a 2c 20 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f  *, sqlite3 *, co
c410: 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29  nst char *, int)
c420: 3b 0a 20 20 76 6f 69 64 20 2a 70 57 61 6c 41 72  ;.  void *pWalAr
c430: 67 3b 0a 23 65 6e 64 69 66 0a 20 20 76 6f 69 64  g;.#endif.  void
c440: 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 29 28 76  (*xCollNeeded)(v
c450: 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e  oid*,sqlite3*,in
c460: 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74  t eTextRep,const
c470: 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 28   char*);.  void(
c480: 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36 29 28  *xCollNeeded16)(
c490: 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69  void*,sqlite3*,i
c4a0: 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e 73  nt eTextRep,cons
c4b0: 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64  t void*);.  void
c4c0: 20 2a 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67   *pCollNeededArg
c4d0: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  ;.  sqlite3_valu
c4e0: 65 20 2a 70 45 72 72 3b 20 20 20 20 20 20 20 20  e *pErr;        
c4f0: 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74    /* Most recent
c500: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a   error message *
c510: 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20  /.  union {.    
c520: 76 6f 6c 61 74 69 6c 65 20 69 6e 74 20 69 73 49  volatile int isI
c530: 6e 74 65 72 72 75 70 74 65 64 3b 20 2f 2a 20 54  nterrupted; /* T
c540: 72 75 65 20 69 66 20 73 71 6c 69 74 65 33 5f 69  rue if sqlite3_i
c550: 6e 74 65 72 72 75 70 74 20 68 61 73 20 62 65 65  nterrupt has bee
c560: 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 20 20  n called */.    
c570: 64 6f 75 62 6c 65 20 6e 6f 74 55 73 65 64 31 3b  double notUsed1;
c580: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
c590: 70 61 63 65 72 20 2a 2f 0a 20 20 7d 20 75 31 3b  pacer */.  } u1;
c5a0: 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 20 6c 6f 6f  .  Lookaside loo
c5b0: 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20  kaside;         
c5c0: 20 2f 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61   /* Lookaside ma
c5d0: 6c 6c 6f 63 20 63 6f 6e 66 69 67 75 72 61 74 69  lloc configurati
c5e0: 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  on */.#ifndef SQ
c5f0: 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52  LITE_OMIT_AUTHOR
c600: 49 5a 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65  IZATION.  sqlite
c610: 33 5f 78 61 75 74 68 20 78 41 75 74 68 3b 20 20  3_xauth xAuth;  
c620: 20 20 20 20 20 20 20 20 2f 2a 20 41 63 63 65 73          /* Acces
c630: 73 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20  s authorization 
c640: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
c650: 69 64 20 2a 70 41 75 74 68 41 72 67 3b 20 20 20  id *pAuthArg;   
c660: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31              /* 1
c670: 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  st argument to t
c680: 68 65 20 61 63 63 65 73 73 20 61 75 74 68 20 66  he access auth f
c690: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69  unction */.#endi
c6a0: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
c6b0: 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
c6c0: 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74 20 28 2a  ALLBACK.  int (*
c6d0: 78 50 72 6f 67 72 65 73 73 29 28 76 6f 69 64 20  xProgress)(void 
c6e0: 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 70  *);     /* The p
c6f0: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
c700: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f   */.  void *pPro
c710: 67 72 65 73 73 41 72 67 3b 20 20 20 20 20 20 20  gressArg;       
c720: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
c730: 74 6f 20 74 68 65 20 70 72 6f 67 72 65 73 73 20  to the progress 
c740: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 75 6e  callback */.  un
c750: 73 69 67 6e 65 64 20 6e 50 72 6f 67 72 65 73 73  signed nProgress
c760: 4f 70 73 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  Ops;        /* N
c770: 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f 64 65 73  umber of opcodes
c780: 20 66 6f 72 20 70 72 6f 67 72 65 73 73 20 63 61   for progress ca
c790: 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66  llback */.#endif
c7a0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
c7b0: 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
c7c0: 45 0a 20 20 69 6e 74 20 6e 56 54 72 61 6e 73 3b  E.  int nVTrans;
c7d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c7e0: 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64 20 73    /* Allocated s
c7f0: 69 7a 65 20 6f 66 20 61 56 54 72 61 6e 73 20 2a  ize of aVTrans *
c800: 2f 0a 20 20 48 61 73 68 20 61 4d 6f 64 75 6c 65  /.  Hash aModule
c810: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
c820: 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65 64 20 62    /* populated b
c830: 79 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  y sqlite3_create
c840: 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 56  _module() */.  V
c850: 74 61 62 43 74 78 20 2a 70 56 74 61 62 43 74 78  tabCtx *pVtabCtx
c860: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
c870: 43 6f 6e 74 65 78 74 20 66 6f 72 20 61 63 74 69  Context for acti
c880: 76 65 20 76 74 61 62 20 63 6f 6e 6e 65 63 74 2f  ve vtab connect/
c890: 63 72 65 61 74 65 20 2a 2f 0a 20 20 56 54 61 62  create */.  VTab
c8a0: 6c 65 20 2a 2a 61 56 54 72 61 6e 73 3b 20 20 20  le **aVTrans;   
c8b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 69 72            /* Vir
c8c0: 74 75 61 6c 20 74 61 62 6c 65 73 20 77 69 74 68  tual tables with
c8d0: 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f   open transactio
c8e0: 6e 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a  ns */.  VTable *
c8f0: 70 44 69 73 63 6f 6e 6e 65 63 74 3b 20 20 20 20  pDisconnect;    
c900: 2f 2a 20 44 69 73 63 6f 6e 6e 65 63 74 20 74 68  /* Disconnect th
c910: 65 73 65 20 69 6e 20 6e 65 78 74 20 73 71 6c 69  ese in next sqli
c920: 74 65 33 5f 70 72 65 70 61 72 65 28 29 20 2a 2f  te3_prepare() */
c930: 0a 23 65 6e 64 69 66 0a 20 20 48 61 73 68 20 61  .#endif.  Hash a
c940: 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20  Func;           
c950: 20 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68 20          /* Hash 
c960: 74 61 62 6c 65 20 6f 66 20 63 6f 6e 6e 65 63 74  table of connect
c970: 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  ion functions */
c980: 0a 20 20 48 61 73 68 20 61 43 6f 6c 6c 53 65 71  .  Hash aCollSeq
c990: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
c9a0: 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c 61 74 69 6e   /* All collatin
c9b0: 67 20 73 65 71 75 65 6e 63 65 73 20 2a 2f 0a 20  g sequences */. 
c9c0: 20 42 75 73 79 48 61 6e 64 6c 65 72 20 62 75 73   BusyHandler bus
c9d0: 79 48 61 6e 64 6c 65 72 3b 20 20 20 20 20 20 2f  yHandler;      /
c9e0: 2a 20 42 75 73 79 20 63 61 6c 6c 62 61 63 6b 20  * Busy callback 
c9f0: 2a 2f 0a 20 20 44 62 20 61 44 62 53 74 61 74 69  */.  Db aDbStati
ca00: 63 5b 32 5d 3b 20 20 20 20 20 20 20 20 20 20 20  c[2];           
ca10: 20 20 20 2f 2a 20 53 74 61 74 69 63 20 73 70 61     /* Static spa
ca20: 63 65 20 66 6f 72 20 74 68 65 20 32 20 64 65 66  ce for the 2 def
ca30: 61 75 6c 74 20 62 61 63 6b 65 6e 64 73 20 2a 2f  ault backends */
ca40: 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 53  .  Savepoint *pS
ca50: 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20  avepoint;       
ca60: 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69   /* List of acti
ca70: 76 65 20 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f  ve savepoints */
ca80: 0a 20 20 69 6e 74 20 62 75 73 79 54 69 6d 65 6f  .  int busyTimeo
ca90: 75 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ut;             
caa0: 20 2f 2a 20 42 75 73 79 20 68 61 6e 64 6c 65 72   /* Busy handler
cab0: 20 74 69 6d 65 6f 75 74 2c 20 69 6e 20 6d 73 65   timeout, in mse
cac0: 63 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 76 65  c */.  int nSave
cad0: 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20  point;          
cae0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
caf0: 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f  f non-transactio
cb00: 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a  n savepoints */.
cb10: 20 20 69 6e 74 20 6e 53 74 61 74 65 6d 65 6e 74    int nStatement
cb20: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
cb30: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73  /* Number of nes
cb40: 74 65 64 20 73 74 61 74 65 6d 65 6e 74 2d 74 72  ted statement-tr
cb50: 61 6e 73 61 63 74 69 6f 6e 73 20 20 2a 2f 0a 20  ansactions  */. 
cb60: 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 43 6f   i64 nDeferredCo
cb70: 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ns;            /
cb80: 2a 20 4e 65 74 20 64 65 66 65 72 72 65 64 20 63  * Net deferred c
cb90: 6f 6e 73 74 72 61 69 6e 74 73 20 74 68 69 73 20  onstraints this 
cba0: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 2a 2f 0a  transaction. */.
cbb0: 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 49    i64 nDeferredI
cbc0: 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20  mmCons;         
cbd0: 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65 64 20  /* Net deferred 
cbe0: 69 6d 6d 65 64 69 61 74 65 20 63 6f 6e 73 74 72  immediate constr
cbf0: 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 2a  aints */.  int *
cc00: 70 6e 42 79 74 65 73 46 72 65 65 64 3b 20 20 20  pnBytesFreed;   
cc10: 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e           /* If n
cc20: 6f 74 20 4e 55 4c 4c 2c 20 69 6e 63 72 65 6d 65  ot NULL, increme
cc30: 6e 74 20 74 68 69 73 20 69 6e 20 44 62 46 72 65  nt this in DbFre
cc40: 65 28 29 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  e() */.#ifdef SQ
cc50: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f  LITE_ENABLE_UNLO
cc60: 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 2f 2a 20 54  CK_NOTIFY.  /* T
cc70: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 72  he following var
cc80: 69 61 62 6c 65 73 20 61 72 65 20 61 6c 6c 20 70  iables are all p
cc90: 72 6f 74 65 63 74 65 64 20 62 79 20 74 68 65 20  rotected by the 
cca0: 53 54 41 54 49 43 5f 4d 41 53 54 45 52 0a 20 20  STATIC_MASTER.  
ccb0: 2a 2a 20 6d 75 74 65 78 2c 20 6e 6f 74 20 62 79  ** mutex, not by
ccc0: 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 2e 20   sqlite3.mutex. 
ccd0: 54 68 65 79 20 61 72 65 20 75 73 65 64 20 62 79  They are used by
cce0: 20 63 6f 64 65 20 69 6e 20 6e 6f 74 69 66 79 2e   code in notify.
ccf0: 63 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65  c..  **.  ** Whe
cd00: 6e 20 58 2e 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65  n X.pUnlockConne
cd10: 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d  ction==Y, that m
cd20: 65 61 6e 73 20 74 68 61 74 20 58 20 69 73 20 77  eans that X is w
cd30: 61 69 74 69 6e 67 20 66 6f 72 20 59 20 74 6f 0a  aiting for Y to.
cd40: 20 20 2a 2a 20 75 6e 6c 6f 63 6b 20 73 6f 20 74    ** unlock so t
cd50: 68 61 74 20 69 74 20 63 61 6e 20 70 72 6f 63 65  hat it can proce
cd60: 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68  ed..  **.  ** Wh
cd70: 65 6e 20 58 2e 70 42 6c 6f 63 6b 69 6e 67 43 6f  en X.pBlockingCo
cd80: 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61  nnection==Y, tha
cd90: 74 20 6d 65 61 6e 73 20 74 68 61 74 20 73 6f 6d  t means that som
cda0: 65 74 68 69 6e 67 20 74 68 61 74 20 58 20 74 72  ething that X tr
cdb0: 69 65 64 0a 20 20 2a 2a 20 74 72 69 65 64 20 74  ied.  ** tried t
cdc0: 6f 20 64 6f 20 72 65 63 65 6e 74 6c 79 20 66 61  o do recently fa
cdd0: 69 6c 65 64 20 77 69 74 68 20 61 6e 20 53 51 4c  iled with an SQL
cde0: 49 54 45 5f 4c 4f 43 4b 45 44 20 65 72 72 6f 72  ITE_LOCKED error
cdf0: 20 64 75 65 20 74 6f 20 6c 6f 63 6b 73 0a 20 20   due to locks.  
ce00: 2a 2a 20 68 65 6c 64 20 62 79 20 59 2e 0a 20 20  ** held by Y..  
ce10: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 42  */.  sqlite3 *pB
ce20: 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f  lockingConnectio
ce30: 6e 3b 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e  n; /* Connection
ce40: 20 74 68 61 74 20 63 61 75 73 65 64 20 53 51 4c   that caused SQL
ce50: 49 54 45 5f 4c 4f 43 4b 45 44 20 2a 2f 0a 20 20  ITE_LOCKED */.  
ce60: 73 71 6c 69 74 65 33 20 2a 70 55 6e 6c 6f 63 6b  sqlite3 *pUnlock
ce70: 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 20 20 20 20  Connection;     
ce80: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74        /* Connect
ce90: 69 6f 6e 20 74 6f 20 77 61 74 63 68 20 66 6f 72  ion to watch for
cea0: 20 75 6e 6c 6f 63 6b 20 2a 2f 0a 20 20 76 6f 69   unlock */.  voi
ceb0: 64 20 2a 70 55 6e 6c 6f 63 6b 41 72 67 3b 20 20  d *pUnlockArg;  
cec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ced0: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
cee0: 6f 20 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 20  o xUnlockNotify 
cef0: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 55 6e 6c  */.  void (*xUnl
cf00: 6f 63 6b 4e 6f 74 69 66 79 29 28 76 6f 69 64 20  ockNotify)(void 
cf10: 2a 2a 2c 20 69 6e 74 29 3b 20 20 2f 2a 20 55 6e  **, int);  /* Un
cf20: 6c 6f 63 6b 20 6e 6f 74 69 66 79 20 63 61 6c 6c  lock notify call
cf30: 62 61 63 6b 20 2a 2f 0a 20 20 73 71 6c 69 74 65  back */.  sqlite
cf40: 33 20 2a 70 4e 65 78 74 42 6c 6f 63 6b 65 64 3b  3 *pNextBlocked;
cf50: 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20          /* Next 
cf60: 69 6e 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 62  in list of all b
cf70: 6c 6f 63 6b 65 64 20 63 6f 6e 6e 65 63 74 69 6f  locked connectio
cf80: 6e 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66  ns */.#endif.#if
cf90: 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f  def SQLITE_USER_
cfa0: 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20  AUTHENTICATION. 
cfb0: 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74   sqlite3_useraut
cfc0: 68 20 61 75 74 68 3b 20 20 20 20 20 20 20 20 2f  h auth;        /
cfd0: 2a 20 55 73 65 72 20 61 75 74 68 65 6e 74 69 63  * User authentic
cfe0: 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f  ation informatio
cff0: 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a  n */.#endif.};..
d000: 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20 74 6f  /*.** A macro to
d010: 20 64 69 73 63 6f 76 65 72 20 74 68 65 20 65 6e   discover the en
d020: 63 6f 64 69 6e 67 20 6f 66 20 61 20 64 61 74 61  coding of a data
d030: 62 61 73 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  base..*/.#define
d040: 20 53 43 48 45 4d 41 5f 45 4e 43 28 64 62 29 20   SCHEMA_ENC(db) 
d050: 28 28 64 62 29 2d 3e 61 44 62 5b 30 5d 2e 70 53  ((db)->aDb[0].pS
d060: 63 68 65 6d 61 2d 3e 65 6e 63 29 0a 23 64 65 66  chema->enc).#def
d070: 69 6e 65 20 45 4e 43 28 64 62 29 20 20 20 20 20  ine ENC(db)     
d080: 20 20 20 28 28 64 62 29 2d 3e 65 6e 63 29 0a 0a     ((db)->enc)..
d090: 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76  /*.** Possible v
d0a0: 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 73 71  alues for the sq
d0b0: 6c 69 74 65 33 2e 66 6c 61 67 73 2e 0a 2a 2a 0a  lite3.flags..**.
d0c0: 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61  ** Value constra
d0d0: 69 6e 74 73 20 28 65 6e 66 6f 72 63 65 64 20 76  ints (enforced v
d0e0: 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a  ia assert()):.**
d0f0: 20 20 20 20 20 20 53 51 4c 49 54 45 5f 46 75 6c        SQLITE_Ful
d100: 6c 46 53 79 6e 63 20 20 20 20 20 3d 3d 20 50 41  lFSync     == PA
d110: 47 45 52 5f 46 55 4c 4c 46 53 59 4e 43 0a 2a 2a  GER_FULLFSYNC.**
d120: 20 20 20 20 20 20 53 51 4c 49 54 45 5f 43 6b 70        SQLITE_Ckp
d130: 74 46 75 6c 6c 46 53 79 6e 63 20 3d 3d 20 50 41  tFullFSync == PA
d140: 47 45 52 5f 43 4b 50 54 5f 46 55 4c 4c 46 53 59  GER_CKPT_FULLFSY
d150: 4e 43 0a 2a 2a 20 20 20 20 20 20 53 51 4c 49 54  NC.**      SQLIT
d160: 45 5f 43 61 63 68 65 53 70 69 6c 6c 20 20 20 20  E_CacheSpill    
d170: 3d 3d 20 50 41 47 45 52 5f 43 41 43 48 45 5f 53  == PAGER_CACHE_S
d180: 50 49 4c 4c 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  PILL.*/.#define 
d190: 53 51 4c 49 54 45 5f 57 72 69 74 65 53 63 68 65  SQLITE_WriteSche
d1a0: 6d 61 20 20 20 20 30 78 30 30 30 30 30 30 30 31  ma    0x00000001
d1b0: 20 20 2f 2a 20 4f 4b 20 74 6f 20 75 70 64 61 74    /* OK to updat
d1c0: 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20  e SQLITE_MASTER 
d1d0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d1e0: 45 5f 4c 65 67 61 63 79 46 69 6c 65 46 6d 74 20  E_LegacyFileFmt 
d1f0: 20 30 78 30 30 30 30 30 30 30 32 20 20 2f 2a 20   0x00000002  /* 
d200: 43 72 65 61 74 65 20 6e 65 77 20 64 61 74 61 62  Create new datab
d210: 61 73 65 73 20 69 6e 20 66 6f 72 6d 61 74 20 31  ases in format 1
d220: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
d230: 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73 20  TE_FullColNames 
d240: 20 20 30 78 30 30 30 30 30 30 30 34 20 20 2f 2a    0x00000004  /*
d250: 20 53 68 6f 77 20 66 75 6c 6c 20 63 6f 6c 75 6d   Show full colum
d260: 6e 20 6e 61 6d 65 73 20 6f 6e 20 53 45 4c 45 43  n names on SELEC
d270: 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  T */.#define SQL
d280: 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20 20 20  ITE_FullFSync   
d290: 20 20 20 30 78 30 30 30 30 30 30 30 38 20 20 2f     0x00000008  /
d2a0: 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79 6e 63  * Use full fsync
d2b0: 20 6f 6e 20 74 68 65 20 62 61 63 6b 65 6e 64 20   on the backend 
d2c0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d2d0: 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63 20  E_CkptFullFSync 
d2e0: 20 30 78 30 30 30 30 30 30 31 30 20 20 2f 2a 20   0x00000010  /* 
d2f0: 55 73 65 20 66 75 6c 6c 20 66 73 79 6e 63 20 66  Use full fsync f
d300: 6f 72 20 63 68 65 63 6b 70 6f 69 6e 74 20 2a 2f  or checkpoint */
d310: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d320: 43 61 63 68 65 53 70 69 6c 6c 20 20 20 20 20 30  CacheSpill     0
d330: 78 30 30 30 30 30 30 32 30 20 20 2f 2a 20 4f 4b  x00000020  /* OK
d340: 20 74 6f 20 73 70 69 6c 6c 20 70 61 67 65 72 20   to spill pager 
d350: 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65  cache */.#define
d360: 20 53 51 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c   SQLITE_ShortCol
d370: 4e 61 6d 65 73 20 20 30 78 30 30 30 30 30 30 34  Names  0x0000004
d380: 30 20 20 2f 2a 20 53 68 6f 77 20 73 68 6f 72 74  0  /* Show short
d390: 20 63 6f 6c 75 6d 6e 73 20 6e 61 6d 65 73 20 2a   columns names *
d3a0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d3b0: 5f 43 6f 75 6e 74 52 6f 77 73 20 20 20 20 20 20  _CountRows      
d3c0: 30 78 30 30 30 30 30 30 38 30 20 20 2f 2a 20 43  0x00000080  /* C
d3d0: 6f 75 6e 74 20 72 6f 77 73 20 63 68 61 6e 67 65  ount rows change
d3e0: 64 20 62 79 20 49 4e 53 45 52 54 2c 20 2a 2f 0a  d by INSERT, */.
d3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d410: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 44            /*   D
d420: 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45  ELETE, or UPDATE
d430: 20 61 6e 64 20 72 65 74 75 72 6e 20 2a 2f 0a 20   and return */. 
d440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d460: 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 74 68           /*   th
d470: 65 20 63 6f 75 6e 74 20 75 73 69 6e 67 20 61 20  e count using a 
d480: 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23 64 65  callback. */.#de
d490: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 75 6c 6c  fine SQLITE_Null
d4a0: 43 61 6c 6c 62 61 63 6b 20 20 20 30 78 30 30 30  Callback   0x000
d4b0: 30 30 31 30 30 20 20 2f 2a 20 49 6e 76 6f 6b 65  00100  /* Invoke
d4c0: 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 6f 6e   the callback on
d4d0: 63 65 20 69 66 20 74 68 65 20 2a 2f 0a 20 20 20  ce if the */.   
d4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d500: 20 20 20 20 20 20 20 2f 2a 20 20 20 72 65 73 75         /*   resu
d510: 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74 79 20  lt set is empty 
d520: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d530: 45 5f 49 67 6e 6f 72 65 43 68 65 63 6b 73 20 20  E_IgnoreChecks  
d540: 20 30 78 30 30 30 30 30 32 30 30 20 20 2f 2a 20   0x00000200  /* 
d550: 44 6f 20 6e 6f 74 20 65 6e 66 6f 72 63 65 20 63  Do not enforce c
d560: 68 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73  heck constraints
d570: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
d580: 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 20  TE_ReadUncommit 
d590: 20 20 30 78 30 30 30 30 30 34 30 30 20 20 2f 2a    0x00000400  /*
d5a0: 20 52 45 41 44 20 55 4e 43 4f 4d 4d 49 54 54 45   READ UNCOMMITTE
d5b0: 44 20 69 6e 20 73 68 61 72 65 64 2d 63 61 63 68  D in shared-cach
d5c0: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
d5d0: 49 54 45 5f 4e 6f 43 6b 70 74 4f 6e 43 6c 6f 73  ITE_NoCkptOnClos
d5e0: 65 20 20 30 78 30 30 30 30 30 38 30 30 20 20 2f  e  0x00000800  /
d5f0: 2a 20 4e 6f 20 63 68 65 63 6b 70 6f 69 6e 74 20  * No checkpoint 
d600: 6f 6e 20 63 6c 6f 73 65 28 29 2f 44 45 54 41 43  on close()/DETAC
d610: 48 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  H */.#define SQL
d620: 49 54 45 5f 52 65 76 65 72 73 65 4f 72 64 65 72  ITE_ReverseOrder
d630: 20 20 20 30 78 30 30 30 30 31 30 30 30 20 20 2f     0x00001000  /
d640: 2a 20 52 65 76 65 72 73 65 20 75 6e 6f 72 64 65  * Reverse unorde
d650: 72 65 64 20 53 45 4c 45 43 54 73 20 2a 2f 0a 23  red SELECTs */.#
d660: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65  define SQLITE_Re
d670: 63 54 72 69 67 67 65 72 73 20 20 20 20 30 78 30  cTriggers    0x0
d680: 30 30 30 32 30 30 30 20 20 2f 2a 20 45 6e 61 62  0002000  /* Enab
d690: 6c 65 20 72 65 63 75 72 73 69 76 65 20 74 72 69  le recursive tri
d6a0: 67 67 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65  ggers */.#define
d6b0: 20 53 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b   SQLITE_ForeignK
d6c0: 65 79 73 20 20 20 20 30 78 30 30 30 30 34 30 30  eys    0x0000400
d6d0: 30 20 20 2f 2a 20 45 6e 66 6f 72 63 65 20 66 6f  0  /* Enforce fo
d6e0: 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
d6f0: 61 69 6e 74 73 20 20 2a 2f 0a 23 64 65 66 69 6e  aints  */.#defin
d700: 65 20 53 51 4c 49 54 45 5f 41 75 74 6f 49 6e 64  e SQLITE_AutoInd
d710: 65 78 20 20 20 20 20 20 30 78 30 30 30 30 38 30  ex      0x000080
d720: 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 61 75  00  /* Enable au
d730: 74 6f 6d 61 74 69 63 20 69 6e 64 65 78 65 73 20  tomatic indexes 
d740: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d750: 45 5f 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 20  E_LoadExtension 
d760: 20 30 78 30 30 30 31 30 30 30 30 20 20 2f 2a 20   0x00010000  /* 
d770: 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65  Enable load_exte
d780: 6e 73 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  nsion */.#define
d790: 20 53 51 4c 49 54 45 5f 45 6e 61 62 6c 65 54 72   SQLITE_EnableTr
d7a0: 69 67 67 65 72 20 20 30 78 30 30 30 32 30 30 30  igger  0x0002000
d7b0: 30 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e  0  /* True to en
d7c0: 61 62 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f  able triggers */
d7d0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d7e0: 44 65 66 65 72 46 4b 73 20 20 20 20 20 20 20 30  DeferFKs       0
d7f0: 78 30 30 30 34 30 30 30 30 20 20 2f 2a 20 44 65  x00040000  /* De
d800: 66 65 72 20 61 6c 6c 20 46 4b 20 63 6f 6e 73 74  fer all FK const
d810: 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e  raints */.#defin
d820: 65 20 53 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e  e SQLITE_QueryOn
d830: 6c 79 20 20 20 20 20 20 30 78 30 30 30 38 30 30  ly      0x000800
d840: 30 30 20 20 2f 2a 20 44 69 73 61 62 6c 65 20 64  00  /* Disable d
d850: 61 74 61 62 61 73 65 20 63 68 61 6e 67 65 73 20  atabase changes 
d860: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d870: 45 5f 43 65 6c 6c 53 69 7a 65 43 6b 20 20 20 20  E_CellSizeCk    
d880: 20 30 78 30 30 31 30 30 30 30 30 20 20 2f 2a 20   0x00100000  /* 
d890: 43 68 65 63 6b 20 62 74 72 65 65 20 63 65 6c 6c  Check btree cell
d8a0: 20 73 69 7a 65 73 20 6f 6e 20 6c 6f 61 64 20 2a   sizes on load *
d8b0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d8c0: 5f 46 74 73 33 54 6f 6b 65 6e 69 7a 65 72 20 20  _Fts3Tokenizer  
d8d0: 30 78 30 30 32 30 30 30 30 30 20 20 2f 2a 20 45  0x00200000  /* E
d8e0: 6e 61 62 6c 65 20 66 74 73 33 5f 74 6f 6b 65 6e  nable fts3_token
d8f0: 69 7a 65 72 28 32 29 20 2a 2f 0a 23 64 65 66 69  izer(2) */.#defi
d900: 6e 65 20 53 51 4c 49 54 45 5f 45 6e 61 62 6c 65  ne SQLITE_Enable
d910: 51 50 53 47 20 20 20 20 20 30 78 30 30 34 30 30  QPSG     0x00400
d920: 30 30 30 20 20 2f 2a 20 51 75 65 72 79 20 50 6c  000  /* Query Pl
d930: 61 6e 6e 65 72 20 53 74 61 62 69 6c 69 74 79 20  anner Stability 
d940: 47 75 61 72 61 6e 74 65 65 20 2a 2f 0a 2f 2a 20  Guarantee */./* 
d950: 54 68 65 20 6e 65 78 74 20 66 6f 75 72 20 76 61  The next four va
d960: 6c 75 65 73 20 61 72 65 20 6e 6f 74 20 75 73 65  lues are not use
d970: 64 20 62 79 20 50 52 41 47 4d 41 73 20 6f 72 20  d by PRAGMAs or 
d980: 62 79 20 73 71 6c 69 74 65 33 5f 64 62 63 6f 6e  by sqlite3_dbcon
d990: 66 69 67 28 29 20 61 6e 64 0a 2a 2a 20 63 6f 75  fig() and.** cou
d9a0: 6c 64 20 62 65 20 66 61 63 74 6f 72 65 64 20 6f  ld be factored o
d9b0: 75 74 20 69 6e 74 6f 20 61 20 73 65 70 61 72 61  ut into a separa
d9c0: 74 65 20 62 69 74 20 76 65 63 74 6f 72 20 6f 66  te bit vector of
d9d0: 20 74 68 65 20 73 71 6c 69 74 65 33 20 6f 62 6a   the sqlite3 obj
d9e0: 65 63 74 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ect. */.#define 
d9f0: 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61  SQLITE_InternCha
da00: 6e 67 65 73 20 20 30 78 30 30 38 30 30 30 30 30  nges  0x00800000
da10: 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74 65 64    /* Uncommitted
da20: 20 48 61 73 68 20 74 61 62 6c 65 20 63 68 61 6e   Hash table chan
da30: 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ges */.#define S
da40: 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74 46 75 6e  QLITE_LoadExtFun
da50: 63 20 20 20 20 30 78 30 31 30 30 30 30 30 30 20  c    0x01000000 
da60: 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64 5f   /* Enable load_
da70: 65 78 74 65 6e 73 69 6f 6e 28 29 20 53 51 4c 20  extension() SQL 
da80: 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20  func */.#define 
da90: 53 51 4c 49 54 45 5f 50 72 65 66 65 72 42 75 69  SQLITE_PreferBui
daa0: 6c 74 69 6e 20 20 30 78 30 32 30 30 30 30 30 30  ltin  0x02000000
dab0: 20 20 2f 2a 20 50 72 65 66 65 72 65 6e 63 65 20    /* Preference 
dac0: 74 6f 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63  to built-in func
dad0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
dae0: 49 54 45 5f 56 61 63 75 75 6d 20 20 20 20 20 20  ITE_Vacuum      
daf0: 20 20 20 30 78 30 34 30 30 30 30 30 30 20 20 2f     0x04000000  /
db00: 2a 20 43 75 72 72 65 6e 74 6c 79 20 69 6e 20 61  * Currently in a
db10: 20 56 41 43 55 55 4d 20 2a 2f 0a 2f 2a 20 46 6c   VACUUM */./* Fl
db20: 61 67 73 20 75 73 65 64 20 6f 6e 6c 79 20 69 66  ags used only if
db30: 20 64 65 62 75 67 67 69 6e 67 20 2a 2f 0a 23 69   debugging */.#i
db40: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
db50: 47 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  G.#define SQLITE
db60: 5f 53 71 6c 54 72 61 63 65 20 20 20 20 20 20 20  _SqlTrace       
db70: 30 78 30 38 30 30 30 30 30 30 20 20 2f 2a 20 44  0x08000000  /* D
db80: 65 62 75 67 20 70 72 69 6e 74 20 53 51 4c 20 61  ebug print SQL a
db90: 73 20 69 74 20 65 78 65 63 75 74 65 73 20 2a 2f  s it executes */
dba0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
dbb0: 56 64 62 65 4c 69 73 74 69 6e 67 20 20 20 20 30  VdbeListing    0
dbc0: 78 31 30 30 30 30 30 30 30 20 20 2f 2a 20 44 65  x10000000  /* De
dbd0: 62 75 67 20 6c 69 73 74 69 6e 67 73 20 6f 66 20  bug listings of 
dbe0: 56 44 42 45 20 70 72 6f 67 72 61 6d 73 20 2a 2f  VDBE programs */
dbf0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
dc00: 56 64 62 65 54 72 61 63 65 20 20 20 20 20 20 30  VdbeTrace      0
dc10: 78 32 30 30 30 30 30 30 30 20 20 2f 2a 20 54 72  x20000000  /* Tr
dc20: 75 65 20 74 6f 20 74 72 61 63 65 20 56 44 42 45  ue to trace VDBE
dc30: 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 23 64   execution */.#d
dc40: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62  efine SQLITE_Vdb
dc50: 65 41 64 64 6f 70 54 72 61 63 65 20 30 78 34 30  eAddopTrace 0x40
dc60: 30 30 30 30 30 30 20 20 2f 2a 20 54 72 61 63 65  000000  /* Trace
dc70: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
dc80: 70 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 23 64 65  p() calls */.#de
dc90: 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65  fine SQLITE_Vdbe
dca0: 45 51 50 20 20 20 20 20 20 20 20 30 78 38 30 30  EQP        0x800
dcb0: 30 30 30 30 30 20 20 2f 2a 20 44 65 62 75 67 20  00000  /* Debug 
dcc0: 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c  EXPLAIN QUERY PL
dcd0: 41 4e 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 0a 2f  AN */.#endif.../
dce0: 2a 0a 2a 2a 20 42 69 74 73 20 6f 66 20 74 68 65  *.** Bits of the
dcf0: 20 73 71 6c 69 74 65 33 2e 64 62 4f 70 74 46 6c   sqlite3.dbOptFl
dd00: 61 67 73 20 66 69 65 6c 64 20 74 68 61 74 20 61  ags field that a
dd10: 72 65 20 75 73 65 64 20 62 79 20 74 68 65 0a 2a  re used by the.*
dd20: 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63  * sqlite3_test_c
dd30: 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45  ontrol(SQLITE_TE
dd40: 53 54 43 54 52 4c 5f 4f 50 54 49 4d 49 5a 41 54  STCTRL_OPTIMIZAT
dd50: 49 4f 4e 53 2c 2e 2e 2e 29 20 69 6e 74 65 72 66  IONS,...) interf
dd60: 61 63 65 20 74 6f 0a 2a 2a 20 73 65 6c 65 63 74  ace to.** select
dd70: 69 76 65 6c 79 20 64 69 73 61 62 6c 65 20 76 61  ively disable va
dd80: 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74 69  rious optimizati
dd90: 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ons..*/.#define 
dda0: 53 51 4c 49 54 45 5f 51 75 65 72 79 46 6c 61 74  SQLITE_QueryFlat
ddb0: 74 65 6e 65 72 20 30 78 30 30 30 31 20 20 20 2f  tener 0x0001   /
ddc0: 2a 20 51 75 65 72 79 20 66 6c 61 74 74 65 6e 69  * Query flatteni
ddd0: 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ng */.#define SQ
dde0: 4c 49 54 45 5f 43 6f 6c 75 6d 6e 43 61 63 68 65  LITE_ColumnCache
ddf0: 20 20 20 20 30 78 30 30 30 32 20 20 20 2f 2a 20      0x0002   /* 
de00: 43 6f 6c 75 6d 6e 20 63 61 63 68 65 20 2a 2f 0a  Column cache */.
de10: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 47  #define SQLITE_G
de20: 72 6f 75 70 42 79 4f 72 64 65 72 20 20 20 30 78  roupByOrder   0x
de30: 30 30 30 34 20 20 20 2f 2a 20 47 52 4f 55 50 42  0004   /* GROUPB
de40: 59 20 63 6f 76 65 72 20 6f 66 20 4f 52 44 45 52  Y cover of ORDER
de50: 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  BY */.#define SQ
de60: 4c 49 54 45 5f 46 61 63 74 6f 72 4f 75 74 43 6f  LITE_FactorOutCo
de70: 6e 73 74 20 30 78 30 30 30 38 20 20 20 2f 2a 20  nst 0x0008   /* 
de80: 43 6f 6e 73 74 61 6e 74 20 66 61 63 74 6f 72 69  Constant factori
de90: 6e 67 20 2a 2f 0a 2f 2a 20 20 20 20 20 20 20 20  ng */./*        
dea0: 20 20 20 20 20 20 20 20 6e 6f 74 20 75 73 65 64          not used
deb0: 20 20 20 20 30 78 30 30 31 30 20 20 20 2f 2f 20      0x0010   // 
dec0: 57 61 73 3a 20 53 51 4c 49 54 45 5f 49 64 78 52  Was: SQLITE_IdxR
ded0: 65 61 6c 41 73 49 6e 74 20 2a 2f 0a 23 64 65 66  ealAsInt */.#def
dee0: 69 6e 65 20 53 51 4c 49 54 45 5f 44 69 73 74 69  ine SQLITE_Disti
def0: 6e 63 74 4f 70 74 20 20 20 20 30 78 30 30 32 30  nctOpt    0x0020
df00: 20 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 75     /* DISTINCT u
df10: 73 69 6e 67 20 69 6e 64 65 78 65 73 20 2a 2f 0a  sing indexes */.
df20: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
df30: 6f 76 65 72 49 64 78 53 63 61 6e 20 20 20 30 78  overIdxScan   0x
df40: 30 30 34 30 20 20 20 2f 2a 20 43 6f 76 65 72 69  0040   /* Coveri
df50: 6e 67 20 69 6e 64 65 78 20 73 63 61 6e 73 20 2a  ng index scans *
df60: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
df70: 5f 4f 72 64 65 72 42 79 49 64 78 4a 6f 69 6e 20  _OrderByIdxJoin 
df80: 30 78 30 30 38 30 20 20 20 2f 2a 20 4f 52 44 45  0x0080   /* ORDE
df90: 52 20 42 59 20 6f 66 20 6a 6f 69 6e 73 20 76 69  R BY of joins vi
dfa0: 61 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  a index */.#defi
dfb0: 6e 65 20 53 51 4c 49 54 45 5f 53 75 62 71 43 6f  ne SQLITE_SubqCo
dfc0: 72 6f 75 74 69 6e 65 20 20 30 78 30 31 30 30 20  routine  0x0100 
dfd0: 20 20 2f 2a 20 45 76 61 6c 75 61 74 65 20 73 75    /* Evaluate su
dfe0: 62 71 75 65 72 69 65 73 20 61 73 20 63 6f 72 6f  bqueries as coro
dff0: 75 74 69 6e 65 73 20 2a 2f 0a 23 64 65 66 69 6e  utines */.#defin
e000: 65 20 53 51 4c 49 54 45 5f 54 72 61 6e 73 69 74  e SQLITE_Transit
e010: 69 76 65 20 20 20 20 20 30 78 30 32 30 30 20 20  ive     0x0200  
e020: 20 2f 2a 20 54 72 61 6e 73 69 74 69 76 65 20 63   /* Transitive c
e030: 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64  onstraints */.#d
e040: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 6d 69  efine SQLITE_Omi
e050: 74 4e 6f 6f 70 4a 6f 69 6e 20 20 20 30 78 30 34  tNoopJoin   0x04
e060: 30 30 20 20 20 2f 2a 20 4f 6d 69 74 20 75 6e 75  00   /* Omit unu
e070: 73 65 64 20 74 61 62 6c 65 73 20 69 6e 20 6a 6f  sed tables in jo
e080: 69 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ins */.#define S
e090: 51 4c 49 54 45 5f 53 74 61 74 33 34 20 20 20 20  QLITE_Stat34    
e0a0: 20 20 20 20 20 30 78 30 38 30 30 20 20 20 2f 2a       0x0800   /*
e0b0: 20 55 73 65 20 53 54 41 54 33 20 6f 72 20 53 54   Use STAT3 or ST
e0c0: 41 54 34 20 64 61 74 61 20 2a 2f 0a 23 64 65 66  AT4 data */.#def
e0d0: 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74  ine SQLITE_Count
e0e0: 4f 66 56 69 65 77 20 20 20 20 30 78 31 30 30 30  OfView    0x1000
e0f0: 20 20 20 2f 2a 20 54 68 65 20 63 6f 75 6e 74 2d     /* The count-
e100: 6f 66 2d 76 69 65 77 20 6f 70 74 69 6d 69 7a 61  of-view optimiza
e110: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
e120: 53 51 4c 49 54 45 5f 43 75 72 73 6f 72 48 69 6e  SQLITE_CursorHin
e130: 74 73 20 20 20 20 30 78 32 30 30 30 20 20 20 2f  ts    0x2000   /
e140: 2a 20 41 64 64 20 4f 50 5f 43 75 72 73 6f 72 48  * Add OP_CursorH
e150: 69 6e 74 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 23  int opcodes */.#
e160: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 6c  define SQLITE_Al
e170: 6c 4f 70 74 73 20 20 20 20 20 20 20 20 30 78 66  lOpts        0xf
e180: 66 66 66 20 20 20 2f 2a 20 41 6c 6c 20 6f 70 74  fff   /* All opt
e190: 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f  imizations */../
e1a0: 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 66 6f 72 20  *.** Macros for 
e1b0: 74 65 73 74 69 6e 67 20 77 68 65 74 68 65 72 20  testing whether 
e1c0: 6f 72 20 6e 6f 74 20 6f 70 74 69 6d 69 7a 61 74  or not optimizat
e1d0: 69 6f 6e 73 20 61 72 65 20 65 6e 61 62 6c 65 64  ions are enabled
e1e0: 20 6f 72 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f   or disabled..*/
e1f0: 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a  .#define Optimiz
e200: 61 74 69 6f 6e 44 69 73 61 62 6c 65 64 28 64 62  ationDisabled(db
e210: 2c 20 6d 61 73 6b 29 20 20 28 28 28 64 62 29 2d  , mask)  (((db)-
e220: 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73  >dbOptFlags&(mas
e230: 6b 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20  k))!=0).#define 
e240: 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62  OptimizationEnab
e250: 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20  led(db, mask)   
e260: 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61  (((db)->dbOptFla
e270: 67 73 26 28 6d 61 73 6b 29 29 3d 3d 30 29 0a 0a  gs&(mask))==0)..
e280: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75  /*.** Return tru
e290: 65 20 69 66 20 69 74 20 4f 4b 20 74 6f 20 66 61  e if it OK to fa
e2a0: 63 74 6f 72 20 63 6f 6e 73 74 61 6e 74 20 65 78  ctor constant ex
e2b0: 70 72 65 73 73 69 6f 6e 73 20 69 6e 74 6f 20 74  pressions into t
e2c0: 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  he initializatio
e2d0: 6e 0a 2a 2a 20 63 6f 64 65 2e 20 54 68 65 20 61  n.** code. The a
e2e0: 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50 61 72  rgument is a Par
e2f0: 73 65 20 6f 62 6a 65 63 74 20 66 6f 72 20 74 68  se object for th
e300: 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72  e code generator
e310: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 6f 6e  ..*/.#define Con
e320: 73 74 46 61 63 74 6f 72 4f 6b 28 50 29 20 28 28  stFactorOk(P) ((
e330: 50 29 2d 3e 6f 6b 43 6f 6e 73 74 46 61 63 74 6f  P)->okConstFacto
e340: 72 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62  r)../*.** Possib
e350: 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  le values for th
e360: 65 20 73 71 6c 69 74 65 2e 6d 61 67 69 63 20 66  e sqlite.magic f
e370: 69 65 6c 64 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d  ield..** The num
e380: 62 65 72 73 20 61 72 65 20 6f 62 74 61 69 6e 65  bers are obtaine
e390: 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20  d at random and 
e3a0: 68 61 76 65 20 6e 6f 20 73 70 65 63 69 61 6c 20  have no special 
e3b0: 6d 65 61 6e 69 6e 67 2c 20 6f 74 68 65 72 0a 2a  meaning, other.*
e3c0: 2a 20 74 68 61 6e 20 62 65 69 6e 67 20 64 69 73  * than being dis
e3d0: 74 69 6e 63 74 20 66 72 6f 6d 20 6f 6e 65 20 61  tinct from one a
e3e0: 6e 6f 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69  nother..*/.#defi
e3f0: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
e400: 4f 50 45 4e 20 20 20 20 20 30 78 61 30 32 39 61  OPEN     0xa029a
e410: 36 39 37 20 20 2f 2a 20 44 61 74 61 62 61 73 65  697  /* Database
e420: 20 69 73 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66   is open */.#def
e430: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
e440: 5f 43 4c 4f 53 45 44 20 20 20 30 78 39 66 33 63  _CLOSED   0x9f3c
e450: 32 64 33 33 20 20 2f 2a 20 44 61 74 61 62 61 73  2d33  /* Databas
e460: 65 20 69 73 20 63 6c 6f 73 65 64 20 2a 2f 0a 23  e is closed */.#
e470: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
e480: 47 49 43 5f 53 49 43 4b 20 20 20 20 20 30 78 34  GIC_SICK     0x4
e490: 62 37 37 31 32 39 30 20 20 2f 2a 20 45 72 72 6f  b771290  /* Erro
e4a0: 72 20 61 6e 64 20 61 77 61 69 74 69 6e 67 20 63  r and awaiting c
e4b0: 6c 6f 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  lose */.#define 
e4c0: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53  SQLITE_MAGIC_BUS
e4d0: 59 20 20 20 20 20 30 78 66 30 33 62 37 39 30 36  Y     0xf03b7906
e4e0: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63 75    /* Database cu
e4f0: 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a  rrently in use *
e500: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e510: 5f 4d 41 47 49 43 5f 45 52 52 4f 52 20 20 20 20  _MAGIC_ERROR    
e520: 30 78 62 35 33 35 37 39 33 30 20 20 2f 2a 20 41  0xb5357930  /* A
e530: 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20  n SQLITE_MISUSE 
e540: 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20 2a  error occurred *
e550: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e560: 5f 4d 41 47 49 43 5f 5a 4f 4d 42 49 45 20 20 20  _MAGIC_ZOMBIE   
e570: 30 78 36 34 63 66 66 63 37 66 20 20 2f 2a 20 43  0x64cffc7f  /* C
e580: 6c 6f 73 65 20 77 69 74 68 20 6c 61 73 74 20 73  lose with last s
e590: 74 61 74 65 6d 65 6e 74 20 63 6c 6f 73 65 20 2a  tatement close *
e5a0: 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51  /../*.** Each SQ
e5b0: 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 65  L function is de
e5c0: 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74  fined by an inst
e5d0: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
e5e0: 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75  owing.** structu
e5f0: 72 65 2e 20 20 46 6f 72 20 67 6c 6f 62 61 6c 20  re.  For global 
e600: 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f  built-in functio
e610: 6e 73 20 28 65 78 3a 20 73 75 62 73 74 72 28 29  ns (ex: substr()
e620: 2c 20 6d 61 78 28 29 2c 20 63 6f 75 6e 74 28 29  , max(), count()
e630: 29 0a 2a 2a 20 61 20 70 6f 69 6e 74 65 72 20 74  ).** a pointer t
e640: 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  o this structure
e650: 20 69 73 20 68 65 6c 64 20 69 6e 20 74 68 65 20   is held in the 
e660: 73 71 6c 69 74 65 33 42 75 69 6c 74 69 6e 46 75  sqlite3BuiltinFu
e670: 6e 63 74 69 6f 6e 73 20 6f 62 6a 65 63 74 2e 0a  nctions object..
e680: 2a 2a 20 46 6f 72 20 70 65 72 2d 63 6f 6e 6e 65  ** For per-conne
e690: 63 74 69 6f 6e 20 61 70 70 6c 69 63 61 74 69 6f  ction applicatio
e6a0: 6e 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69  n-defined functi
e6b0: 6f 6e 73 2c 20 61 20 70 6f 69 6e 74 65 72 20 74  ons, a pointer t
e6c0: 6f 20 74 68 69 73 0a 2a 2a 20 73 74 72 75 63 74  o this.** struct
e6d0: 75 72 65 20 69 73 20 68 65 6c 64 20 69 6e 20 74  ure is held in t
e6e0: 68 65 20 64 62 2d 3e 61 48 61 73 68 20 68 61 73  he db->aHash has
e6f0: 68 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54  h table..**.** T
e700: 68 65 20 75 2e 70 48 61 73 68 20 66 69 65 6c 64  he u.pHash field
e710: 20 69 73 20 75 73 65 64 20 62 79 20 74 68 65 20   is used by the 
e720: 67 6c 6f 62 61 6c 20 62 75 69 6c 74 2d 69 6e 73  global built-ins
e730: 2e 20 20 54 68 65 20 75 2e 70 44 65 73 74 72 75  .  The u.pDestru
e740: 63 74 6f 72 0a 2a 2a 20 66 69 65 6c 64 20 69 73  ctor.** field is
e750: 20 75 73 65 64 20 62 79 20 70 65 72 2d 63 6f 6e   used by per-con
e760: 6e 65 63 74 69 6f 6e 20 61 70 70 2d 64 65 66 20  nection app-def 
e770: 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2f 0a 73 74  functions..*/.st
e780: 72 75 63 74 20 46 75 6e 63 44 65 66 20 7b 0a 20  ruct FuncDef {. 
e790: 20 69 38 20 6e 41 72 67 3b 20 20 20 20 20 20 20   i8 nArg;       
e7a0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
e7b0: 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 2d  of arguments.  -
e7c0: 31 20 6d 65 61 6e 73 20 75 6e 6c 69 6d 69 74 65  1 means unlimite
e7d0: 64 20 2a 2f 0a 20 20 75 31 36 20 66 75 6e 63 46  d */.  u16 funcF
e7e0: 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 53  lags;       /* S
e7f0: 6f 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20  ome combination 
e800: 6f 66 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 2a  of SQLITE_FUNC_*
e810: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65   */.  void *pUse
e820: 72 44 61 74 61 3b 20 20 20 20 20 2f 2a 20 55 73  rData;     /* Us
e830: 65 72 20 64 61 74 61 20 70 61 72 61 6d 65 74 65  er data paramete
e840: 72 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a  r */.  FuncDef *
e850: 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e  pNext;      /* N
e860: 65 78 74 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  ext function wit
e870: 68 20 73 61 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20  h same name */. 
e880: 20 76 6f 69 64 20 28 2a 78 53 46 75 6e 63 29 28   void (*xSFunc)(
e890: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
e8a0: 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
e8b0: 75 65 2a 2a 29 3b 20 2f 2a 20 66 75 6e 63 20 6f  ue**); /* func o
e8c0: 72 20 61 67 67 2d 73 74 65 70 20 2a 2f 0a 20 20  r agg-step */.  
e8d0: 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c 69 7a 65  void (*xFinalize
e8e0: 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  )(sqlite3_contex
e8f0: 74 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20 20  t*);            
e900: 20 20 20 20 20 20 2f 2a 20 41 67 67 20 66 69 6e        /* Agg fin
e910: 61 6c 69 7a 65 72 20 2a 2f 0a 20 20 63 6f 6e 73  alizer */.  cons
e920: 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20  t char *zName;  
e930: 20 2f 2a 20 53 51 4c 20 6e 61 6d 65 20 6f 66 20   /* SQL name of 
e940: 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 2a 2f  the function. */
e950: 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 46  .  union {.    F
e960: 75 6e 63 44 65 66 20 2a 70 48 61 73 68 3b 20 20  uncDef *pHash;  
e970: 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74 68      /* Next with
e980: 20 61 20 64 69 66 66 65 72 65 6e 74 20 6e 61 6d   a different nam
e990: 65 20 62 75 74 20 74 68 65 20 73 61 6d 65 20 68  e but the same h
e9a0: 61 73 68 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44  ash */.    FuncD
e9b0: 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74  estructor *pDest
e9c0: 72 75 63 74 6f 72 3b 20 20 20 2f 2a 20 52 65 66  ructor;   /* Ref
e9d0: 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 64 20 64  erence counted d
e9e0: 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69  estructor functi
e9f0: 6f 6e 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a  on */.  } u;.};.
ea00: 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75  ./*.** This stru
ea10: 63 74 75 72 65 20 65 6e 63 61 70 73 75 6c 61 74  cture encapsulat
ea20: 65 73 20 61 20 75 73 65 72 2d 66 75 6e 63 74 69  es a user-functi
ea30: 6f 6e 20 64 65 73 74 72 75 63 74 6f 72 20 63 61  on destructor ca
ea40: 6c 6c 62 61 63 6b 20 28 61 73 0a 2a 2a 20 63 6f  llback (as.** co
ea50: 6e 66 69 67 75 72 65 64 20 75 73 69 6e 67 20 63  nfigured using c
ea60: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76  reate_function_v
ea70: 32 28 29 29 20 61 6e 64 20 61 20 72 65 66 65 72  2()) and a refer
ea80: 65 6e 63 65 20 63 6f 75 6e 74 65 72 2e 20 57 68  ence counter. Wh
ea90: 65 6e 0a 2a 2a 20 63 72 65 61 74 65 5f 66 75 6e  en.** create_fun
eaa0: 63 74 69 6f 6e 5f 76 32 28 29 20 69 73 20 63 61  ction_v2() is ca
eab0: 6c 6c 65 64 20 74 6f 20 63 72 65 61 74 65 20 61  lled to create a
eac0: 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 61   function with a
ead0: 20 64 65 73 74 72 75 63 74 6f 72 2c 0a 2a 2a 20   destructor,.** 
eae0: 61 20 73 69 6e 67 6c 65 20 6f 62 6a 65 63 74 20  a single object 
eaf0: 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20  of this type is 
eb00: 61 6c 6c 6f 63 61 74 65 64 2e 20 46 75 6e 63 44  allocated. FuncD
eb10: 65 73 74 72 75 63 74 6f 72 2e 6e 52 65 66 20 69  estructor.nRef i
eb20: 73 20 73 65 74 20 74 6f 0a 2a 2a 20 74 68 65 20  s set to.** the 
eb30: 6e 75 6d 62 65 72 20 6f 66 20 46 75 6e 63 44 65  number of FuncDe
eb40: 66 20 6f 62 6a 65 63 74 73 20 63 72 65 61 74 65  f objects create
eb50: 64 20 28 65 69 74 68 65 72 20 31 20 6f 72 20 33  d (either 1 or 3
eb60: 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77  , depending on w
eb70: 68 65 74 68 65 72 0a 2a 2a 20 6f 72 20 6e 6f 74  hether.** or not
eb80: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 65   the specified e
eb90: 6e 63 6f 64 69 6e 67 20 69 73 20 53 51 4c 49 54  ncoding is SQLIT
eba0: 45 5f 41 4e 59 29 2e 20 54 68 65 20 46 75 6e 63  E_ANY). The Func
ebb0: 44 65 66 2e 70 44 65 73 74 72 75 63 74 6f 72 0a  Def.pDestructor.
ebc0: 2a 2a 20 6d 65 6d 62 65 72 20 6f 66 20 65 61 63  ** member of eac
ebd0: 68 20 6f 66 20 74 68 65 20 6e 65 77 20 46 75 6e  h of the new Fun
ebe0: 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20  cDef objects is 
ebf0: 73 65 74 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20  set to point to 
ec00: 74 68 65 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a  the allocated.**
ec10: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 2e   FuncDestructor.
ec20: 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 61 66 74 65  .**.** Thereafte
ec30: 72 2c 20 77 68 65 6e 20 6f 6e 65 20 6f 66 20 74  r, when one of t
ec40: 68 65 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63  he FuncDef objec
ec50: 74 73 20 69 73 20 64 65 6c 65 74 65 64 2c 20 74  ts is deleted, t
ec60: 68 65 20 72 65 66 65 72 65 6e 63 65 0a 2a 2a 20  he reference.** 
ec70: 63 6f 75 6e 74 20 6f 6e 20 74 68 69 73 20 6f 62  count on this ob
ec80: 6a 65 63 74 20 69 73 20 64 65 63 72 65 6d 65 6e  ject is decremen
ec90: 74 65 64 2e 20 57 68 65 6e 20 69 74 20 72 65 61  ted. When it rea
eca0: 63 68 65 73 20 30 2c 20 74 68 65 20 64 65 73 74  ches 0, the dest
ecb0: 72 75 63 74 6f 72 0a 2a 2a 20 69 73 20 69 6e 76  ructor.** is inv
ecc0: 6f 6b 65 64 20 61 6e 64 20 74 68 65 20 46 75 6e  oked and the Fun
ecd0: 63 44 65 73 74 72 75 63 74 6f 72 20 73 74 72 75  cDestructor stru
ece0: 63 74 75 72 65 20 66 72 65 65 64 2e 0a 2a 2f 0a  cture freed..*/.
ecf0: 73 74 72 75 63 74 20 46 75 6e 63 44 65 73 74 72  struct FuncDestr
ed00: 75 63 74 6f 72 20 7b 0a 20 20 69 6e 74 20 6e 52  uctor {.  int nR
ed10: 65 66 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65  ef;.  void (*xDe
ed20: 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b 0a  stroy)(void *);.
ed30: 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74    void *pUserDat
ed40: 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73  a;.};../*.** Pos
ed50: 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72  sible values for
ed60: 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 2e 20   FuncDef.flags. 
ed70: 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 5f   Note that the _
ed80: 4c 45 4e 47 54 48 20 61 6e 64 20 5f 54 59 50 45  LENGTH and _TYPE
ed90: 4f 46 0a 2a 2a 20 76 61 6c 75 65 73 20 6d 75 73  OF.** values mus
eda0: 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20  t correspond to 
edb0: 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47  OPFLAG_LENGTHARG
edc0: 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50 45   and OPFLAG_TYPE
edd0: 4f 46 41 52 47 2e 20 20 41 6e 64 0a 2a 2a 20 53  OFARG.  And.** S
ede0: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
edf0: 41 4e 54 20 6d 75 73 74 20 62 65 20 74 68 65 20  ANT must be the 
ee00: 73 61 6d 65 20 61 73 20 53 51 4c 49 54 45 5f 44  same as SQLITE_D
ee10: 45 54 45 52 4d 49 4e 49 53 54 49 43 2e 20 20 54  ETERMINISTIC.  T
ee20: 68 65 72 65 0a 2a 2a 20 61 72 65 20 61 73 73 65  here.** are asse
ee30: 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20  rt() statements 
ee40: 69 6e 20 74 68 65 20 63 6f 64 65 20 74 6f 20 76  in the code to v
ee50: 65 72 69 66 79 20 74 68 69 73 2e 0a 2a 2a 0a 2a  erify this..**.*
ee60: 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69  * Value constrai
ee70: 6e 74 73 20 28 65 6e 66 6f 72 63 65 64 20 76 69  nts (enforced vi
ee80: 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20  a assert()):.** 
ee90: 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f      SQLITE_FUNC_
eea0: 4d 49 4e 4d 41 58 20 20 20 20 3d 3d 20 20 4e 43  MINMAX    ==  NC
eeb0: 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20 20 20 20  _MinMaxAgg      
eec0: 3d 3d 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 0a  == SF_MinMaxAgg.
eed0: 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55  **     SQLITE_FU
eee0: 4e 43 5f 4c 45 4e 47 54 48 20 20 20 20 3d 3d 20  NC_LENGTH    == 
eef0: 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52   OPFLAG_LENGTHAR
ef00: 47 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f  G.**     SQLITE_
ef10: 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20 20 3d  FUNC_TYPEOF    =
ef20: 3d 20 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46  =  OPFLAG_TYPEOF
ef30: 41 52 47 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54  ARG.**     SQLIT
ef40: 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20  E_FUNC_CONSTANT 
ef50: 20 3d 3d 20 20 53 51 4c 49 54 45 5f 44 45 54 45   ==  SQLITE_DETE
ef60: 52 4d 49 4e 49 53 54 49 43 20 66 72 6f 6d 20 74  RMINISTIC from t
ef70: 68 65 20 41 50 49 0a 2a 2a 20 20 20 20 20 53 51  he API.**     SQ
ef80: 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43 4d 41 53  LITE_FUNC_ENCMAS
ef90: 4b 20 20 20 64 65 70 65 6e 64 73 20 6f 6e 20 53  K   depends on S
efa0: 51 4c 49 54 45 5f 55 54 46 2a 20 6d 61 63 72 6f  QLITE_UTF* macro
efb0: 73 20 69 6e 20 74 68 65 20 41 50 49 0a 2a 2f 0a  s in the API.*/.
efc0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
efd0: 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 30 78 30  UNC_ENCMASK  0x0
efe0: 30 30 33 20 2f 2a 20 53 51 4c 49 54 45 5f 55 54  003 /* SQLITE_UT
eff0: 46 38 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36  F8, SQLITE_UTF16
f000: 42 45 20 6f 72 20 55 54 46 31 36 4c 45 20 2a 2f  BE or UTF16LE */
f010: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
f020: 46 55 4e 43 5f 4c 49 4b 45 20 20 20 20 20 30 78  FUNC_LIKE     0x
f030: 30 30 30 34 20 2f 2a 20 43 61 6e 64 69 64 61 74  0004 /* Candidat
f040: 65 20 66 6f 72 20 74 68 65 20 4c 49 4b 45 20 6f  e for the LIKE o
f050: 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23  ptimization */.#
f060: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
f070: 4e 43 5f 43 41 53 45 20 20 20 20 20 30 78 30 30  NC_CASE     0x00
f080: 30 38 20 2f 2a 20 43 61 73 65 2d 73 65 6e 73 69  08 /* Case-sensi
f090: 74 69 76 65 20 4c 49 4b 45 2d 74 79 70 65 20 66  tive LIKE-type f
f0a0: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
f0b0: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45  ne SQLITE_FUNC_E
f0c0: 50 48 45 4d 20 20 20 20 30 78 30 30 31 30 20 2f  PHEM    0x0010 /
f0d0: 2a 20 45 70 68 65 6d 65 72 61 6c 2e 20 20 44 65  * Ephemeral.  De
f0e0: 6c 65 74 65 20 77 69 74 68 20 56 44 42 45 20 2a  lete with VDBE *
f0f0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
f100: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 30  _FUNC_NEEDCOLL 0
f110: 78 30 30 32 30 20 2f 2a 20 73 71 6c 69 74 65 33  x0020 /* sqlite3
f120: 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29  GetFuncCollSeq()
f130: 20 6d 69 67 68 74 20 62 65 20 63 61 6c 6c 65 64   might be called
f140: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
f150: 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 20 20 20  E_FUNC_LENGTH   
f160: 30 78 30 30 34 30 20 2f 2a 20 42 75 69 6c 74 2d  0x0040 /* Built-
f170: 69 6e 20 6c 65 6e 67 74 68 28 29 20 66 75 6e 63  in length() func
f180: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
f190: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50 45  SQLITE_FUNC_TYPE
f1a0: 4f 46 20 20 20 30 78 30 30 38 30 20 2f 2a 20 42  OF   0x0080 /* B
f1b0: 75 69 6c 74 2d 69 6e 20 74 79 70 65 6f 66 28 29  uilt-in typeof()
f1c0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
f1d0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
f1e0: 5f 43 4f 55 4e 54 20 20 20 20 30 78 30 31 30 30  _COUNT    0x0100
f1f0: 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 75   /* Built-in cou
f200: 6e 74 28 2a 29 20 61 67 67 72 65 67 61 74 65 20  nt(*) aggregate 
f210: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
f220: 45 5f 46 55 4e 43 5f 43 4f 41 4c 45 53 43 45 20  E_FUNC_COALESCE 
f230: 30 78 30 32 30 30 20 2f 2a 20 42 75 69 6c 74 2d  0x0200 /* Built-
f240: 69 6e 20 63 6f 61 6c 65 73 63 65 28 29 20 6f 72  in coalesce() or
f250: 20 69 66 6e 75 6c 6c 28 29 20 2a 2f 0a 23 64 65   ifnull() */.#de
f260: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
f270: 5f 55 4e 4c 49 4b 45 4c 59 20 30 78 30 34 30 30  _UNLIKELY 0x0400
f280: 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 75 6e 6c   /* Built-in unl
f290: 69 6b 65 6c 79 28 29 20 66 75 6e 63 74 69 6f 6e  ikely() function
f2a0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
f2b0: 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
f2c0: 20 30 78 30 38 30 30 20 2f 2a 20 43 6f 6e 73 74   0x0800 /* Const
f2d0: 61 6e 74 20 69 6e 70 75 74 73 20 67 69 76 65 20  ant inputs give 
f2e0: 61 20 63 6f 6e 73 74 61 6e 74 20 6f 75 74 70 75  a constant outpu
f2f0: 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  t */.#define SQL
f300: 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 20  ITE_FUNC_MINMAX 
f310: 20 20 30 78 31 30 30 30 20 2f 2a 20 54 72 75 65    0x1000 /* True
f320: 20 66 6f 72 20 6d 69 6e 28 29 20 61 6e 64 20 6d   for min() and m
f330: 61 78 28 29 20 61 67 67 72 65 67 61 74 65 73 20  ax() aggregates 
f340: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
f350: 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 20 20  E_FUNC_SLOCHNG  
f360: 30 78 32 30 30 30 20 2f 2a 20 22 53 6c 6f 77 20  0x2000 /* "Slow 
f370: 43 68 61 6e 67 65 22 2e 20 56 61 6c 75 65 20 63  Change". Value c
f380: 6f 6e 73 74 61 6e 74 20 64 75 72 69 6e 67 20 61  onstant during a
f390: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f3b0: 20 20 20 20 20 2a 2a 20 73 69 6e 67 6c 65 20 71       ** single q
f3c0: 75 65 72 79 20 2d 20 6d 69 67 68 74 20 63 68 61  uery - might cha
f3d0: 6e 67 65 20 6f 76 65 72 20 74 69 6d 65 20 2a 2f  nge over time */
f3e0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
f3f0: 46 55 4e 43 5f 41 46 46 49 4e 49 54 59 20 30 78  FUNC_AFFINITY 0x
f400: 34 30 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  4000 /* Built-in
f410: 20 61 66 66 69 6e 69 74 79 28 29 20 66 75 6e 63   affinity() func
f420: 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54  tion */../*.** T
f430: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 72  he following thr
f440: 65 65 20 6d 61 63 72 6f 73 2c 20 46 55 4e 43 54  ee macros, FUNCT
f450: 49 4f 4e 28 29 2c 20 4c 49 4b 45 46 55 4e 43 28  ION(), LIKEFUNC(
f460: 29 20 61 6e 64 20 41 47 47 52 45 47 41 54 45 28  ) and AGGREGATE(
f470: 29 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f  ) are.** used to
f480: 20 63 72 65 61 74 65 20 74 68 65 20 69 6e 69 74   create the init
f490: 69 61 6c 69 7a 65 72 73 20 66 6f 72 20 74 68 65  ializers for the
f4a0: 20 46 75 6e 63 44 65 66 20 73 74 72 75 63 74 75   FuncDef structu
f4b0: 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46 55 4e  res..**.**   FUN
f4c0: 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
f4d0: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
f4e0: 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73 65 64  unc).**     Used
f4f0: 20 74 6f 20 63 72 65 61 74 65 20 61 20 73 63 61   to create a sca
f500: 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66  lar function def
f510: 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e  inition of a fun
f520: 63 74 69 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20 20  ction zName.**  
f530: 20 20 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62     implemented b
f540: 79 20 43 20 66 75 6e 63 74 69 6f 6e 20 78 46 75  y C function xFu
f550: 6e 63 20 74 68 61 74 20 61 63 63 65 70 74 73 20  nc that accepts 
f560: 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73 2e 20  nArg arguments. 
f570: 54 68 65 0a 2a 2a 20 20 20 20 20 76 61 6c 75 65  The.**     value
f580: 20 70 61 73 73 65 64 20 61 73 20 69 41 72 67 20   passed as iArg 
f590: 69 73 20 63 61 73 74 20 74 6f 20 61 20 28 76 6f  is cast to a (vo
f5a0: 69 64 2a 29 20 61 6e 64 20 6d 61 64 65 20 61 76  id*) and made av
f5b0: 61 69 6c 61 62 6c 65 0a 2a 2a 20 20 20 20 20 61  ailable.**     a
f5c0: 73 20 74 68 65 20 75 73 65 72 2d 64 61 74 61 20  s the user-data 
f5d0: 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61  (sqlite3_user_da
f5e0: 74 61 28 29 29 20 66 6f 72 20 74 68 65 20 66 75  ta()) for the fu
f5f0: 6e 63 74 69 6f 6e 2e 20 49 66 0a 2a 2a 20 20 20  nction. If.**   
f600: 20 20 61 72 67 75 6d 65 6e 74 20 62 4e 43 20 69    argument bNC i
f610: 73 20 74 72 75 65 2c 20 74 68 65 6e 20 74 68 65  s true, then the
f620: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45   SQLITE_FUNC_NEE
f630: 44 43 4f 4c 4c 20 66 6c 61 67 20 69 73 20 73 65  DCOLL flag is se
f640: 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 56 46 55 4e 43  t..**.**   VFUNC
f650: 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
f660: 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
f670: 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b 65 20  nc).**     Like 
f680: 46 55 4e 43 54 49 4f 4e 20 65 78 63 65 70 74 20  FUNCTION except 
f690: 69 74 20 6f 6d 69 74 73 20 74 68 65 20 53 51 4c  it omits the SQL
f6a0: 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
f6b0: 54 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20 20 20  T flag..**.**   
f6c0: 44 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c  DFUNCTION(zName,
f6d0: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
f6e0: 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20  , xFunc).**     
f6f0: 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65 78  Like FUNCTION ex
f700: 63 65 70 74 20 69 74 20 6f 6d 69 74 73 20 74 68  cept it omits th
f710: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  e SQLITE_FUNC_CO
f720: 4e 53 54 41 4e 54 20 66 6c 61 67 20 61 6e 64 0a  NSTANT flag and.
f730: 2a 2a 20 20 20 20 20 61 64 64 73 20 74 68 65 20  **     adds the 
f740: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43  SQLITE_FUNC_SLOC
f750: 48 4e 47 20 66 6c 61 67 2e 20 20 55 73 65 64 20  HNG flag.  Used 
f760: 66 6f 72 20 64 61 74 65 20 26 20 74 69 6d 65 20  for date & time 
f770: 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 20 20 20  functions.**    
f780: 20 61 6e 64 20 66 75 6e 63 74 69 6f 6e 73 20 6c   and functions l
f790: 69 6b 65 20 73 71 6c 69 74 65 5f 76 65 72 73 69  ike sqlite_versi
f7a0: 6f 6e 28 29 20 74 68 61 74 20 63 61 6e 20 63 68  on() that can ch
f7b0: 61 6e 67 65 2c 20 62 75 74 20 6e 6f 74 20 64 75  ange, but not du
f7c0: 72 69 6e 67 0a 2a 2a 20 20 20 20 20 61 20 73 69  ring.**     a si
f7d0: 6e 67 6c 65 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a  ngle query..**.*
f7e0: 2a 20 20 20 41 47 47 52 45 47 41 54 45 28 7a 4e  *   AGGREGATE(zN
f7f0: 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
f800: 20 62 4e 43 2c 20 78 53 74 65 70 2c 20 78 46 69   bNC, xStep, xFi
f810: 6e 61 6c 29 0a 2a 2a 20 20 20 20 20 55 73 65 64  nal).**     Used
f820: 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20 61 67   to create an ag
f830: 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
f840: 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c   definition impl
f850: 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20  emented by.**   
f860: 20 20 74 68 65 20 43 20 66 75 6e 63 74 69 6f 6e    the C function
f870: 73 20 78 53 74 65 70 20 61 6e 64 20 78 46 69 6e  s xStep and xFin
f880: 61 6c 2e 20 54 68 65 20 66 69 72 73 74 20 66 6f  al. The first fo
f890: 75 72 20 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a  ur parameters.**
f8a0: 20 20 20 20 20 61 72 65 20 69 6e 74 65 72 70 72       are interpr
f8b0: 65 74 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65  eted in the same
f8c0: 20 77 61 79 20 61 73 20 74 68 65 20 66 69 72 73   way as the firs
f8d0: 74 20 34 20 70 61 72 61 6d 65 74 65 72 73 20 74  t 4 parameters t
f8e0: 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54 49 4f  o.**     FUNCTIO
f8f0: 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b  N()..**.**   LIK
f900: 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72  EFUNC(zName, nAr
f910: 67 2c 20 70 41 72 67 2c 20 66 6c 61 67 73 29 0a  g, pArg, flags).
f920: 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20 63  **     Used to c
f930: 72 65 61 74 65 20 61 20 73 63 61 6c 61 72 20 66  reate a scalar f
f940: 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69  unction definiti
f950: 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e  on of a function
f960: 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20 20 74 68   zName.**     th
f970: 61 74 20 61 63 63 65 70 74 73 20 6e 41 72 67 20  at accepts nArg 
f980: 61 72 67 75 6d 65 6e 74 73 20 61 6e 64 20 69 73  arguments and is
f990: 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20   implemented by 
f9a0: 61 20 63 61 6c 6c 20 74 6f 20 43 0a 2a 2a 20 20  a call to C.**  
f9b0: 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69 6b 65     function like
f9c0: 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74 20 70  Func. Argument p
f9d0: 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20 61  Arg is cast to a
f9e0: 20 28 76 6f 69 64 20 2a 29 20 61 6e 64 20 6d 61   (void *) and ma
f9f0: 64 65 0a 2a 2a 20 20 20 20 20 61 76 61 69 6c 61  de.**     availa
fa00: 62 6c 65 20 61 73 20 74 68 65 20 66 75 6e 63 74  ble as the funct
fa10: 69 6f 6e 20 75 73 65 72 2d 64 61 74 61 20 28 73  ion user-data (s
fa20: 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61  qlite3_user_data
fa30: 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20  ()). The.**     
fa40: 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 20 76 61  FuncDef.flags va
fa50: 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f  riable is set to
fa60: 20 74 68 65 20 76 61 6c 75 65 20 70 61 73 73 65   the value passe
fa70: 64 20 61 73 20 74 68 65 20 66 6c 61 67 73 0a 2a  d as the flags.*
fa80: 2a 20 20 20 20 20 70 61 72 61 6d 65 74 65 72 2e  *     parameter.
fa90: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55 4e 43  .*/.#define FUNC
faa0: 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
fab0: 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
fac0: 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
fad0: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
fae0: 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c  ANT|SQLITE_UTF8|
faf0: 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43  (bNC*SQLITE_FUNC
fb00: 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20  _NEEDCOLL), \.  
fb10: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
fb20: 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75  TR(iArg), 0, xFu
fb30: 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b  nc, 0, #zName, {
fb40: 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 56 46 55  0} }.#define VFU
fb50: 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
fb60: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
fb70: 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  Func) \.  {nArg,
fb80: 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e   SQLITE_UTF8|(bN
fb90: 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  C*SQLITE_FUNC_NE
fba0: 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51  EDCOLL), \.   SQ
fbb0: 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28  LITE_INT_TO_PTR(
fbc0: 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c  iArg), 0, xFunc,
fbd0: 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20   0, #zName, {0} 
fbe0: 7d 0a 23 64 65 66 69 6e 65 20 44 46 55 4e 43 54  }.#define DFUNCT
fbf0: 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ION(zName, nArg,
fc00: 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   iArg, bNC, xFun
fc10: 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  c) \.  {nArg, SQ
fc20: 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e  LITE_FUNC_SLOCHN
fc30: 47 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62  G|SQLITE_UTF8|(b
fc40: 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  NC*SQLITE_FUNC_N
fc50: 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53  EEDCOLL), \.   S
fc60: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
fc70: 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63  (iArg), 0, xFunc
fc80: 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d  , 0, #zName, {0}
fc90: 20 7d 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54   }.#define FUNCT
fca0: 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  ION2(zName, nArg
fcb0: 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
fcc0: 6e 63 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20  nc, extraFlags) 
fcd0: 5c 0a 20 20 7b 6e 41 72 67 2c 53 51 4c 49 54 45  \.  {nArg,SQLITE
fce0: 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53  _FUNC_CONSTANT|S
fcf0: 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a  QLITE_UTF8|(bNC*
fd00: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
fd10: 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73  COLL)|extraFlags
fd20: 2c 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54  ,\.   SQLITE_INT
fd30: 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30  _TO_PTR(iArg), 0
fd40: 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61  , xFunc, 0, #zNa
fd50: 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e  me, {0} }.#defin
fd60: 65 20 53 54 52 5f 46 55 4e 43 54 49 4f 4e 28 7a  e STR_FUNCTION(z
fd70: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67  Name, nArg, pArg
fd80: 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a  , bNC, xFunc) \.
fd90: 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
fda0: 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c  FUNC_SLOCHNG|SQL
fdb0: 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51  ITE_UTF8|(bNC*SQ
fdc0: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
fdd0: 4c 4c 29 2c 20 5c 0a 20 20 20 70 41 72 67 2c 20  LL), \.   pArg, 
fde0: 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e  0, xFunc, 0, #zN
fdf0: 61 6d 65 2c 20 7d 0a 23 64 65 66 69 6e 65 20 4c  ame, }.#define L
fe00: 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e  IKEFUNC(zName, n
fe10: 41 72 67 2c 20 61 72 67 2c 20 66 6c 61 67 73 29  Arg, arg, flags)
fe20: 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
fe30: 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
fe40: 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 66 6c 61  |SQLITE_UTF8|fla
fe50: 67 73 2c 20 5c 0a 20 20 20 28 76 6f 69 64 20 2a  gs, \.   (void *
fe60: 29 61 72 67 2c 20 30 2c 20 6c 69 6b 65 46 75 6e  )arg, 0, likeFun
fe70: 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30  c, 0, #zName, {0
fe80: 7d 20 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52  } }.#define AGGR
fe90: 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72  EGATE(zName, nAr
fea0: 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65  g, arg, nc, xSte
feb0: 70 2c 20 78 46 69 6e 61 6c 29 20 5c 0a 20 20 7b  p, xFinal) \.  {
fec0: 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46  nArg, SQLITE_UTF
fed0: 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e  8|(nc*SQLITE_FUN
fee0: 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20  C_NEEDCOLL), \. 
fef0: 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f    SQLITE_INT_TO_
ff00: 50 54 52 28 61 72 67 29 2c 20 30 2c 20 78 53 74  PTR(arg), 0, xSt
ff10: 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65  ep,xFinal,#zName
ff20: 2c 20 7b 30 7d 7d 0a 23 64 65 66 69 6e 65 20 41  , {0}}.#define A
ff30: 47 47 52 45 47 41 54 45 32 28 7a 4e 61 6d 65 2c  GGREGATE2(zName,
ff40: 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20   nArg, arg, nc, 
ff50: 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20 65  xStep, xFinal, e
ff60: 78 74 72 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b  xtraFlags) \.  {
ff70: 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46  nArg, SQLITE_UTF
ff80: 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e  8|(nc*SQLITE_FUN
ff90: 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72  C_NEEDCOLL)|extr
ffa0: 61 46 6c 61 67 73 2c 20 5c 0a 20 20 20 53 51 4c  aFlags, \.   SQL
ffb0: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61  ITE_INT_TO_PTR(a
ffc0: 72 67 29 2c 20 30 2c 20 78 53 74 65 70 2c 78 46  rg), 0, xStep,xF
ffd0: 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d  inal,#zName, {0}
ffe0: 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20 63 75 72  }../*.** All cur
fff0: 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 73 20  rent savepoints 
10000 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20  are stored in a 
10010 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72  linked list star
10020 74 69 6e 67 20 61 74 0a 2a 2a 20 73 71 6c 69 74  ting at.** sqlit
10030 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 20 54  e3.pSavepoint. T
10040 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74  he first element
10050 20 69 6e 20 74 68 65 20 6c 69 73 74 20 69 73 20   in the list is 
10060 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 6c  the most recentl
10070 79 0a 2a 2a 20 6f 70 65 6e 65 64 20 73 61 76 65  y.** opened save
10080 70 6f 69 6e 74 2e 20 53 61 76 65 70 6f 69 6e 74  point. Savepoint
10090 73 20 61 72 65 20 61 64 64 65 64 20 74 6f 20 74  s are added to t
100a0 68 65 20 6c 69 73 74 20 62 79 20 74 68 65 20 76  he list by the v
100b0 64 62 65 0a 2a 2a 20 4f 50 5f 53 61 76 65 70 6f  dbe.** OP_Savepo
100c0 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  int instruction.
100d0 0a 2a 2f 0a 73 74 72 75 63 74 20 53 61 76 65 70  .*/.struct Savep
100e0 6f 69 6e 74 20 7b 0a 20 20 63 68 61 72 20 2a 7a  oint {.  char *z
100f0 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
10100 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
10110 53 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65 20 28  Savepoint name (
10120 6e 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64 29 20  nul-terminated) 
10130 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72  */.  i64 nDeferr
10140 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20  edCons;         
10150 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
10160 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 66  er of deferred f
10170 6b 20 76 69 6f 6c 61 74 69 6f 6e 73 20 2a 2f 0a  k violations */.
10180 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 49    i64 nDeferredI
10190 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20  mmCons;         
101a0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
101b0 6f 66 20 64 65 66 65 72 72 65 64 20 69 6d 6d 20  of deferred imm 
101c0 66 6b 2e 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69  fk. */.  Savepoi
101d0 6e 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  nt *pNext;      
101e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
101f0 50 61 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74  Parent savepoint
10200 20 28 69 66 20 61 6e 79 29 20 2a 2f 0a 7d 3b 0a   (if any) */.};.
10210 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
10220 77 69 6e 67 20 61 72 65 20 75 73 65 64 20 61 73  wing are used as
10230 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72 61   the second para
10240 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33  meter to sqlite3
10250 53 61 76 65 70 6f 69 6e 74 28 29 2c 0a 2a 2a 20  Savepoint(),.** 
10260 61 6e 64 20 61 73 20 74 68 65 20 50 31 20 61 72  and as the P1 ar
10270 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 4f 50  gument to the OP
10280 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72  _Savepoint instr
10290 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69  uction..*/.#defi
102a0 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47  ne SAVEPOINT_BEG
102b0 49 4e 20 20 20 20 20 20 30 0a 23 64 65 66 69 6e  IN      0.#defin
102c0 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45  e SAVEPOINT_RELE
102d0 41 53 45 20 20 20 20 31 0a 23 64 65 66 69 6e 65  ASE    1.#define
102e0 20 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42   SAVEPOINT_ROLLB
102f0 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20  ACK   2.../*.** 
10300 45 61 63 68 20 53 51 4c 69 74 65 20 6d 6f 64 75  Each SQLite modu
10310 6c 65 20 28 76 69 72 74 75 61 6c 20 74 61 62 6c  le (virtual tabl
10320 65 20 64 65 66 69 6e 69 74 69 6f 6e 29 20 69 73  e definition) is
10330 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 0a 2a   defined by an.*
10340 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  * instance of th
10350 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
10360 63 74 75 72 65 2c 20 73 74 6f 72 65 64 20 69 6e  cture, stored in
10370 20 74 68 65 20 73 71 6c 69 74 65 33 2e 61 4d 6f   the sqlite3.aMo
10380 64 75 6c 65 0a 2a 2a 20 68 61 73 68 20 74 61 62  dule.** hash tab
10390 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4d 6f  le..*/.struct Mo
103a0 64 75 6c 65 20 7b 0a 20 20 63 6f 6e 73 74 20 73  dule {.  const s
103b0 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
103c0 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 2f 2a  Module;       /*
103d0 20 43 61 6c 6c 62 61 63 6b 20 70 6f 69 6e 74 65   Callback pointe
103e0 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  rs */.  const ch
103f0 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
10400 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
10410 4e 61 6d 65 20 70 61 73 73 65 64 20 74 6f 20 63  Name passed to c
10420 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a  reate_module() *
10430 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 78 3b 20  /.  void *pAux; 
10440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10450 20 20 20 20 20 20 20 20 20 2f 2a 20 70 41 75 78           /* pAux
10460 20 70 61 73 73 65 64 20 74 6f 20 63 72 65 61 74   passed to creat
10470 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20  e_module() */.  
10480 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29  void (*xDestroy)
10490 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 20 20  (void *);       
104a0 20 20 20 20 20 2f 2a 20 4d 6f 64 75 6c 65 20 64       /* Module d
104b0 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69  estructor functi
104c0 6f 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  on */.  Table *p
104d0 45 70 6f 54 61 62 3b 20 20 20 20 20 20 20 20 20  EpoTab;         
104e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
104f0 45 70 6f 6e 79 6d 6f 75 73 20 74 61 62 6c 65 20  Eponymous table 
10500 66 6f 72 20 74 68 69 73 20 6d 6f 64 75 6c 65 20  for this module 
10510 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66  */.};../*.** inf
10520 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65  ormation about e
10530 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e  ach column of an
10540 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20 68 65   SQL table is he
10550 6c 64 20 69 6e 20 61 6e 20 69 6e 73 74 61 6e 63  ld in an instanc
10560 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72  e.** of this str
10570 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63  ucture..*/.struc
10580 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20 63 68 61  t Column {.  cha
10590 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 2f 2a  r *zName;     /*
105a0 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 63 6f   Name of this co
105b0 6c 75 6d 6e 2c 20 5c 30 30 30 2c 20 74 68 65 6e  lumn, \000, then
105c0 20 74 68 65 20 74 79 70 65 20 2a 2f 0a 20 20 45   the type */.  E
105d0 78 70 72 20 2a 70 44 66 6c 74 3b 20 20 20 20 20  xpr *pDflt;     
105e0 2f 2a 20 44 65 66 61 75 6c 74 20 76 61 6c 75 65  /* Default value
105f0 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20   of this column 
10600 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 6c  */.  char *zColl
10610 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69  ;     /* Collati
10620 6e 67 20 73 65 71 75 65 6e 63 65 2e 20 20 49 66  ng sequence.  If
10630 20 4e 55 4c 4c 2c 20 75 73 65 20 74 68 65 20 64   NULL, use the d
10640 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6e  efault */.  u8 n
10650 6f 74 4e 75 6c 6c 3b 20 20 20 20 20 20 2f 2a 20  otNull;      /* 
10660 41 6e 20 4f 45 5f 20 63 6f 64 65 20 66 6f 72 20  An OE_ code for 
10670 68 61 6e 64 6c 69 6e 67 20 61 20 4e 4f 54 20 4e  handling a NOT N
10680 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a  ULL constraint *
10690 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74  /.  char affinit
106a0 79 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74  y;   /* One of t
106b0 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 2e 2e  he SQLITE_AFF_..
106c0 2e 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38  . values */.  u8
106d0 20 73 7a 45 73 74 3b 20 20 20 20 20 20 20 20 2f   szEst;        /
106e0 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65  * Estimated size
106f0 20 6f 66 20 76 61 6c 75 65 20 69 6e 20 74 68 69   of value in thi
10700 73 20 63 6f 6c 75 6d 6e 2e 20 73 69 7a 65 6f 66  s column. sizeof
10710 28 49 4e 54 29 3d 3d 31 20 2a 2f 0a 20 20 75 38  (INT)==1 */.  u8
10720 20 63 6f 6c 46 6c 61 67 73 3b 20 20 20 20 20 2f   colFlags;     /
10730 2a 20 42 6f 6f 6c 65 61 6e 20 70 72 6f 70 65 72  * Boolean proper
10740 74 69 65 73 2e 20 20 53 65 65 20 43 4f 4c 46 4c  ties.  See COLFL
10750 41 47 5f 20 64 65 66 69 6e 65 73 20 62 65 6c 6f  AG_ defines belo
10760 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f  w */.};../* Allo
10770 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 43  wed values for C
10780 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61 67 73 3a 0a  olumn.colFlags:.
10790 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c  */.#define COLFL
107a0 41 47 5f 50 52 49 4d 4b 45 59 20 20 30 78 30 30  AG_PRIMKEY  0x00
107b0 30 31 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20  01    /* Column 
107c0 69 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 70  is part of the p
107d0 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64  rimary key */.#d
107e0 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 49  efine COLFLAG_HI
107f0 44 44 45 4e 20 20 20 30 78 30 30 30 32 20 20 20  DDEN   0x0002   
10800 20 2f 2a 20 41 20 68 69 64 64 65 6e 20 63 6f 6c   /* A hidden col
10810 75 6d 6e 20 69 6e 20 61 20 76 69 72 74 75 61 6c  umn in a virtual
10820 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e   table */.#defin
10830 65 20 43 4f 4c 46 4c 41 47 5f 48 41 53 54 59 50  e COLFLAG_HASTYP
10840 45 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20  E  0x0004    /* 
10850 54 79 70 65 20 6e 61 6d 65 20 66 6f 6c 6c 6f 77  Type name follow
10860 73 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 2a 2f  s column name */
10870 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61  ../*.** A "Colla
10880 74 69 6e 67 20 53 65 71 75 65 6e 63 65 22 20 69  ting Sequence" i
10890 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20  s defined by an 
108a0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
108b0 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72  following.** str
108c0 75 63 74 75 72 65 2e 20 43 6f 6e 63 65 70 74 75  ucture. Conceptu
108d0 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61 74 69 6e  ally, a collatin
108e0 67 20 73 65 71 75 65 6e 63 65 20 63 6f 6e 73 69  g sequence consi
108f0 73 74 73 20 6f 66 20 61 20 6e 61 6d 65 20 61 6e  sts of a name an
10900 64 0a 2a 2a 20 61 20 63 6f 6d 70 61 72 69 73 6f  d.** a compariso
10910 6e 20 72 6f 75 74 69 6e 65 20 74 68 61 74 20 64  n routine that d
10920 65 66 69 6e 65 73 20 74 68 65 20 6f 72 64 65 72  efines the order
10930 20 6f 66 20 74 68 61 74 20 73 65 71 75 65 6e 63   of that sequenc
10940 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43 6f 6c 6c  e..**.** If Coll
10950 53 65 71 2e 78 43 6d 70 20 69 73 20 4e 55 4c 4c  Seq.xCmp is NULL
10960 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20  , it means that 
10970 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67  the.** collating
10980 20 73 65 71 75 65 6e 63 65 20 69 73 20 75 6e 64   sequence is und
10990 65 66 69 6e 65 64 2e 20 20 49 6e 64 69 63 65 73  efined.  Indices
109a0 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20 75 6e 64   built on an und
109b0 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c 61 74  efined.** collat
109c0 69 6e 67 20 73 65 71 75 65 6e 63 65 20 6d 61 79  ing sequence may
109d0 20 6e 6f 74 20 62 65 20 72 65 61 64 20 6f 72 20   not be read or 
109e0 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74 72 75  written..*/.stru
109f0 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a 20 20 63  ct CollSeq {.  c
10a00 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
10a10 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
10a20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  the collating se
10a30 71 75 65 6e 63 65 2c 20 55 54 46 2d 38 20 65 6e  quence, UTF-8 en
10a40 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e  coded */.  u8 en
10a50 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
10a60 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e   /* Text encodin
10a70 67 20 68 61 6e 64 6c 65 64 20 62 79 20 78 43 6d  g handled by xCm
10a80 70 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  p() */.  void *p
10a90 55 73 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f  User;          /
10aa0 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74  * First argument
10ab0 20 74 6f 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20   to xCmp() */.  
10ac0 69 6e 74 20 28 2a 78 43 6d 70 29 28 76 6f 69 64  int (*xCmp)(void
10ad0 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69  *,int, const voi
10ae0 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76  d*, int, const v
10af0 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 28 2a  oid*);.  void (*
10b00 78 44 65 6c 29 28 76 6f 69 64 2a 29 3b 20 20 2f  xDel)(void*);  /
10b10 2a 20 44 65 73 74 72 75 63 74 6f 72 20 66 6f 72  * Destructor for
10b20 20 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   pUser */.};../*
10b30 0a 2a 2a 20 41 20 73 6f 72 74 20 6f 72 64 65 72  .** A sort order
10b40 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 20 41   can be either A
10b50 53 43 20 6f 72 20 44 45 53 43 2e 0a 2a 2f 0a 23  SC or DESC..*/.#
10b60 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f  define SQLITE_SO
10b70 5f 41 53 43 20 20 20 20 20 20 20 30 20 20 2f 2a  _ASC       0  /*
10b80 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69   Sort in ascendi
10b90 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66  ng order */.#def
10ba0 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 44 45  ine SQLITE_SO_DE
10bb0 53 43 20 20 20 20 20 20 31 20 20 2f 2a 20 53 6f  SC      1  /* So
10bc0 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20  rt in ascending 
10bd0 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65  order */.#define
10be0 20 53 51 4c 49 54 45 5f 53 4f 5f 55 4e 44 45 46   SQLITE_SO_UNDEF
10bf0 49 4e 45 44 20 2d 31 20 2f 2a 20 4e 6f 20 73 6f  INED -1 /* No so
10c00 72 74 20 6f 72 64 65 72 20 73 70 65 63 69 66 69  rt order specifi
10c10 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c  ed */../*.** Col
10c20 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 79 70  umn affinity typ
10c30 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73 65 20  es..**.** These 
10c40 75 73 65 64 20 74 6f 20 68 61 76 65 20 6d 6e 65  used to have mne
10c50 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c 69 6b 65 20  monic name like 
10c60 27 69 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41  'i' for SQLITE_A
10c70 46 46 5f 49 4e 54 45 47 45 52 20 61 6e 64 0a 2a  FF_INTEGER and.*
10c80 2a 20 27 74 27 20 66 6f 72 20 53 51 4c 49 54 45  * 't' for SQLITE
10c90 5f 41 46 46 5f 54 45 58 54 2e 20 20 42 75 74 20  _AFF_TEXT.  But 
10ca0 77 65 20 63 61 6e 20 73 61 76 65 20 61 20 6c 69  we can save a li
10cb0 74 74 6c 65 20 73 70 61 63 65 20 61 6e 64 20 69  ttle space and i
10cc0 6d 70 72 6f 76 65 0a 2a 2a 20 74 68 65 20 73 70  mprove.** the sp
10cd0 65 65 64 20 61 20 6c 69 74 74 6c 65 20 62 79 20  eed a little by 
10ce0 6e 75 6d 62 65 72 69 6e 67 20 74 68 65 20 76 61  numbering the va
10cf0 6c 75 65 73 20 63 6f 6e 73 65 63 75 74 69 76 65  lues consecutive
10d00 6c 79 2e 0a 2a 2a 0a 2a 2a 20 42 75 74 20 72 61  ly..**.** But ra
10d10 74 68 65 72 20 74 68 61 6e 20 73 74 61 72 74 20  ther than start 
10d20 77 69 74 68 20 30 20 6f 72 20 31 2c 20 77 65 20  with 0 or 1, we 
10d30 62 65 67 69 6e 20 77 69 74 68 20 27 41 27 2e 20  begin with 'A'. 
10d40 20 54 68 61 74 20 77 61 79 2c 0a 2a 2a 20 77 68   That way,.** wh
10d50 65 6e 20 6d 75 6c 74 69 70 6c 65 20 61 66 66 69  en multiple affi
10d60 6e 69 74 79 20 74 79 70 65 73 20 61 72 65 20 63  nity types are c
10d70 6f 6e 63 61 74 65 6e 61 74 65 64 20 69 6e 74 6f  oncatenated into
10d80 20 61 20 73 74 72 69 6e 67 20 61 6e 64 0a 2a 2a   a string and.**
10d90 20 75 73 65 64 20 61 73 20 74 68 65 20 50 34 20   used as the P4 
10da0 6f 70 65 72 61 6e 64 2c 20 74 68 65 79 20 77 69  operand, they wi
10db0 6c 6c 20 62 65 20 6d 6f 72 65 20 72 65 61 64 61  ll be more reada
10dc0 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20  ble..**.** Note 
10dd0 61 6c 73 6f 20 74 68 61 74 20 74 68 65 20 6e 75  also that the nu
10de0 6d 65 72 69 63 20 74 79 70 65 73 20 61 72 65 20  meric types are 
10df0 67 72 6f 75 70 65 64 20 74 6f 67 65 74 68 65 72  grouped together
10e00 20 73 6f 20 74 68 61 74 20 74 65 73 74 69 6e 67   so that testing
10e10 0a 2a 2a 20 66 6f 72 20 61 20 6e 75 6d 65 72 69  .** for a numeri
10e20 63 20 74 79 70 65 20 69 73 20 61 20 73 69 6e 67  c type is a sing
10e30 6c 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20  le comparison.  
10e40 41 6e 64 20 74 68 65 20 42 4c 4f 42 20 74 79 70  And the BLOB typ
10e50 65 20 69 73 20 66 69 72 73 74 2e 0a 2a 2f 0a 23  e is first..*/.#
10e60 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
10e70 46 5f 42 4c 4f 42 20 20 20 20 20 27 41 27 0a 23  F_BLOB     'A'.#
10e80 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
10e90 46 5f 54 45 58 54 20 20 20 20 20 27 42 27 0a 23  F_TEXT     'B'.#
10ea0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
10eb0 46 5f 4e 55 4d 45 52 49 43 20 20 27 43 27 0a 23  F_NUMERIC  'C'.#
10ec0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
10ed0 46 5f 49 4e 54 45 47 45 52 20 20 27 44 27 0a 23  F_INTEGER  'D'.#
10ee0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46  define SQLITE_AF
10ef0 46 5f 52 45 41 4c 20 20 20 20 20 27 45 27 0a 0a  F_REAL     'E'..
10f00 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49  #define sqlite3I
10f10 73 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  sNumericAffinity
10f20 28 58 29 20 20 28 28 58 29 3e 3d 53 51 4c 49 54  (X)  ((X)>=SQLIT
10f30 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 29 0a 0a  E_AFF_NUMERIC)..
10f40 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  /*.** The SQLITE
10f50 5f 41 46 46 5f 4d 41 53 4b 20 76 61 6c 75 65 73  _AFF_MASK values
10f60 20 6d 61 73 6b 73 20 6f 66 66 20 74 68 65 20 73   masks off the s
10f70 69 67 6e 69 66 69 63 61 6e 74 20 62 69 74 73 20  ignificant bits 
10f80 6f 66 20 61 6e 0a 2a 2a 20 61 66 66 69 6e 69 74  of an.** affinit
10f90 79 20 76 61 6c 75 65 2e 0a 2a 2f 0a 23 64 65 66  y value..*/.#def
10fa0 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  ine SQLITE_AFF_M
10fb0 41 53 4b 20 20 20 20 20 30 78 34 37 0a 0a 2f 2a  ASK     0x47../*
10fc0 0a 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 62  .** Additional b
10fd0 69 74 20 76 61 6c 75 65 73 20 74 68 61 74 20 63  it values that c
10fe0 61 6e 20 62 65 20 4f 52 65 64 20 77 69 74 68 20  an be ORed with 
10ff0 61 6e 20 61 66 66 69 6e 69 74 79 20 77 69 74 68  an affinity with
11000 6f 75 74 0a 2a 2a 20 63 68 61 6e 67 69 6e 67 20  out.** changing 
11010 74 68 65 20 61 66 66 69 6e 69 74 79 2e 0a 2a 2a  the affinity..**
11020 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 4e  .** The SQLITE_N
11030 4f 54 4e 55 4c 4c 20 66 6c 61 67 20 69 73 20 61  OTNULL flag is a
11040 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20   combination of 
11050 4e 55 4c 4c 45 51 20 61 6e 64 20 4a 55 4d 50 49  NULLEQ and JUMPI
11060 46 4e 55 4c 4c 2e 0a 2a 2a 20 49 74 20 63 61 75  FNULL..** It cau
11070 73 65 73 20 61 6e 20 61 73 73 65 72 74 28 29 20  ses an assert() 
11080 74 6f 20 66 69 72 65 20 69 66 20 65 69 74 68 65  to fire if eithe
11090 72 20 6f 70 65 72 61 6e 64 20 74 6f 20 61 20 63  r operand to a c
110a0 6f 6d 70 61 72 69 73 6f 6e 0a 2a 2a 20 6f 70 65  omparison.** ope
110b0 72 61 74 6f 72 20 69 73 20 4e 55 4c 4c 2e 20 20  rator is NULL.  
110c0 49 74 20 69 73 20 61 64 64 65 64 20 74 6f 20 63  It is added to c
110d0 65 72 74 61 69 6e 20 63 6f 6d 70 61 72 69 73 6f  ertain compariso
110e0 6e 20 6f 70 65 72 61 74 6f 72 73 20 74 6f 0a 2a  n operators to.*
110f0 2a 20 70 72 6f 76 65 20 74 68 61 74 20 74 68 65  * prove that the
11100 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 61 6c   operands are al
11110 77 61 79 73 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a  ways NOT NULL..*
11120 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
11130 5f 4b 45 45 50 4e 55 4c 4c 20 20 20 20 20 30 78  _KEEPNULL     0x
11140 30 38 20 20 2f 2a 20 55 73 65 64 20 62 79 20 76  08  /* Used by v
11150 65 63 74 6f 72 20 3d 3d 20 6f 72 20 3c 3e 20 2a  ector == or <> *
11160 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
11170 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 20 20 30 78  _JUMPIFNULL   0x
11180 31 30 20 20 2f 2a 20 6a 75 6d 70 73 20 69 66 20  10  /* jumps if 
11190 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
111a0 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e  s NULL */.#defin
111b0 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32  e SQLITE_STOREP2
111c0 20 20 20 20 20 20 30 78 32 30 20 20 2f 2a 20 53        0x20  /* S
111d0 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 72  tore result in r
111e0 65 67 5b 50 32 5d 20 72 61 74 68 65 72 20 74 68  eg[P2] rather th
111f0 61 6e 20 6a 75 6d 70 20 2a 2f 0a 23 64 65 66 69  an jump */.#defi
11200 6e 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  ne SQLITE_NULLEQ
11210 20 20 20 20 20 20 20 30 78 38 30 20 20 2f 2a 20         0x80  /* 
11220 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 23 64 65  NULL=NULL */.#de
11230 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e  fine SQLITE_NOTN
11240 55 4c 4c 20 20 20 20 20 20 30 78 39 30 20 20 2f  ULL      0x90  /
11250 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 6f 70  * Assert that op
11260 65 72 61 6e 64 73 20 61 72 65 20 6e 65 76 65 72  erands are never
11270 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20   NULL */../*.** 
11280 41 6e 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69  An object of thi
11290 73 20 74 79 70 65 20 69 73 20 63 72 65 61 74 65  s type is create
112a0 64 20 66 6f 72 20 65 61 63 68 20 76 69 72 74 75  d for each virtu
112b0 61 6c 20 74 61 62 6c 65 20 70 72 65 73 65 6e 74  al table present
112c0 20 69 6e 0a 2a 2a 20 74 68 65 20 64 61 74 61 62   in.** the datab
112d0 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a  ase schema..**.*
112e0 2a 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73  * If the databas
112f0 65 20 73 63 68 65 6d 61 20 69 73 20 73 68 61 72  e schema is shar
11300 65 64 2c 20 74 68 65 6e 20 74 68 65 72 65 20 69  ed, then there i
11310 73 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f  s one instance o
11320 66 20 74 68 69 73 0a 2a 2a 20 73 74 72 75 63 74  f this.** struct
11330 75 72 65 20 66 6f 72 20 65 61 63 68 20 64 61 74  ure for each dat
11340 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
11350 20 28 73 71 6c 69 74 65 33 2a 29 20 74 68 61 74   (sqlite3*) that
11360 20 75 73 65 73 20 74 68 65 20 73 68 61 72 65 64   uses the shared
11370 0a 2a 2a 20 73 63 68 65 6d 61 2e 20 54 68 69 73  .** schema. This
11380 20 69 73 20 62 65 63 61 75 73 65 20 65 61 63 68   is because each
11390 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
113a0 74 69 6f 6e 20 72 65 71 75 69 72 65 73 20 69 74  tion requires it
113b0 73 20 6f 77 6e 20 75 6e 69 71 75 65 0a 2a 2a 20  s own unique.** 
113c0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
113d0 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61  sqlite3_vtab* ha
113e0 6e 64 6c 65 20 75 73 65 64 20 74 6f 20 61 63 63  ndle used to acc
113f0 65 73 73 20 74 68 65 20 76 69 72 74 75 61 6c 20  ess the virtual 
11400 74 61 62 6c 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65  table.** impleme
11410 6e 74 61 74 69 6f 6e 2e 20 73 71 6c 69 74 65 33  ntation. sqlite3
11420 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 63  _vtab* handles c
11430 61 6e 20 6e 6f 74 20 62 65 20 73 68 61 72 65 64  an not be shared
11440 20 62 65 74 77 65 65 6e 0a 2a 2a 20 64 61 74 61   between.** data
11450 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73  base connections
11460 2c 20 65 76 65 6e 20 77 68 65 6e 20 74 68 65 20  , even when the 
11470 72 65 73 74 20 6f 66 20 74 68 65 20 69 6e 2d 6d  rest of the in-m
11480 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65 0a 2a  emory database.*
11490 2a 20 73 63 68 65 6d 61 20 69 73 20 73 68 61 72  * schema is shar
114a0 65 64 2c 20 61 73 20 74 68 65 20 69 6d 70 6c 65  ed, as the imple
114b0 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 74 65 6e 20  mentation often 
114c0 73 74 6f 72 65 73 20 74 68 65 20 64 61 74 61 62  stores the datab
114d0 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f  ase.** connectio
114e0 6e 20 68 61 6e 64 6c 65 20 70 61 73 73 65 64 20  n handle passed 
114f0 74 6f 20 69 74 20 76 69 61 20 74 68 65 20 78 43  to it via the xC
11500 6f 6e 6e 65 63 74 28 29 20 6f 72 20 78 43 72 65  onnect() or xCre
11510 61 74 65 28 29 20 6d 65 74 68 6f 64 0a 2a 2a 20  ate() method.** 
11520 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a  during initializ
11530 61 74 69 6f 6e 20 69 6e 74 65 72 6e 61 6c 6c 79  ation internally
11540 2e 20 54 68 69 73 20 64 61 74 61 62 61 73 65 20  . This database 
11550 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c  connection handl
11560 65 20 6d 61 79 0a 2a 2a 20 74 68 65 6e 20 62 65  e may.** then be
11570 20 75 73 65 64 20 62 79 20 74 68 65 20 76 69 72   used by the vir
11580 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65  tual table imple
11590 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 61 63 63  mentation to acc
115a0 65 73 73 20 72 65 61 6c 20 74 61 62 6c 65 73 0a  ess real tables.
115b0 2a 2a 20 77 69 74 68 69 6e 20 74 68 65 20 64 61  ** within the da
115c0 74 61 62 61 73 65 2e 20 53 6f 20 74 68 61 74 20  tabase. So that 
115d0 74 68 65 79 20 61 70 70 65 61 72 20 61 73 20 70  they appear as p
115e0 61 72 74 20 6f 66 20 74 68 65 20 63 61 6c 6c 65  art of the calle
115f0 72 73 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f  rs.** transactio
11600 6e 2c 20 74 68 65 73 65 20 61 63 63 65 73 73 65  n, these accesse
11610 73 20 6e 65 65 64 20 74 6f 20 62 65 20 6d 61 64  s need to be mad
11620 65 20 76 69 61 20 74 68 65 20 73 61 6d 65 20 64  e via the same d
11630 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65  atabase.** conne
11640 63 74 69 6f 6e 20 61 73 20 74 68 61 74 20 75 73  ction as that us
11650 65 64 20 74 6f 20 65 78 65 63 75 74 65 20 53 51  ed to execute SQ
11660 4c 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 6e 20  L operations on 
11670 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
11680 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61  e..**.** All VTa
11690 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 68 61 74  ble objects that
116a0 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 61   correspond to a
116b0 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 69 6e   single table in
116c0 20 61 20 73 68 61 72 65 64 0a 2a 2a 20 64 61 74   a shared.** dat
116d0 61 62 61 73 65 20 73 63 68 65 6d 61 20 61 72 65  abase schema are
116e0 20 69 6e 69 74 69 61 6c 6c 79 20 73 74 6f 72 65   initially store
116f0 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c 69  d in a linked-li
11700 73 74 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79  st pointed to by
11710 0a 2a 2a 20 74 68 65 20 54 61 62 6c 65 2e 70 56  .** the Table.pV
11720 54 61 62 6c 65 20 6d 65 6d 62 65 72 20 76 61 72  Table member var
11730 69 61 62 6c 65 20 6f 66 20 74 68 65 20 63 6f 72  iable of the cor
11740 72 65 73 70 6f 6e 64 69 6e 67 20 54 61 62 6c 65  responding Table
11750 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 57 68 65 6e   object..** When
11760 20 61 6e 20 73 71 6c 69 74 65 33 5f 70 72 65 70   an sqlite3_prep
11770 61 72 65 28 29 20 6f 70 65 72 61 74 69 6f 6e 20  are() operation 
11780 69 73 20 72 65 71 75 69 72 65 64 20 74 6f 20 61  is required to a
11790 63 63 65 73 73 20 74 68 65 20 76 69 72 74 75 61  ccess the virtua
117a0 6c 0a 2a 2a 20 74 61 62 6c 65 2c 20 69 74 20 73  l.** table, it s
117b0 65 61 72 63 68 65 73 20 74 68 65 20 6c 69 73 74  earches the list
117c0 20 66 6f 72 20 74 68 65 20 56 54 61 62 6c 65 20   for the VTable 
117d0 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  that corresponds
117e0 20 74 6f 20 74 68 65 0a 2a 2a 20 64 61 74 61 62   to the.** datab
117f0 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64  ase connection d
11800 6f 69 6e 67 20 74 68 65 20 70 72 65 70 61 72 69  oing the prepari
11810 6e 67 20 73 6f 20 61 73 20 74 6f 20 75 73 65 20  ng so as to use 
11820 74 68 65 20 63 6f 72 72 65 63 74 0a 2a 2a 20 73  the correct.** s
11830 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e  qlite3_vtab* han
11840 64 6c 65 20 69 6e 20 74 68 65 20 63 6f 6d 70 69  dle in the compi
11850 6c 65 64 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a  led query..**.**
11860 20 57 68 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f   When an in-memo
11870 72 79 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 20  ry Table object 
11880 69 73 20 64 65 6c 65 74 65 64 20 28 66 6f 72 20  is deleted (for 
11890 65 78 61 6d 70 6c 65 20 77 68 65 6e 20 74 68 65  example when the
118a0 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 62 65  .** schema is be
118b0 69 6e 67 20 72 65 6c 6f 61 64 65 64 20 66 6f 72  ing reloaded for
118c0 20 73 6f 6d 65 20 72 65 61 73 6f 6e 29 2c 20 74   some reason), t
118d0 68 65 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74  he VTable object
118e0 73 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 64 65 6c  s are not.** del
118f0 65 74 65 64 20 61 6e 64 20 74 68 65 20 73 71 6c  eted and the sql
11900 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c  ite3_vtab* handl
11910 65 73 20 61 72 65 20 6e 6f 74 20 78 44 69 73 63  es are not xDisc
11920 6f 6e 6e 65 63 74 28 29 65 64 0a 2a 2a 20 69 6d  onnect()ed.** im
11930 6d 65 64 69 61 74 65 6c 79 2e 20 49 6e 73 74 65  mediately. Inste
11940 61 64 2c 20 74 68 65 79 20 61 72 65 20 6d 6f 76  ad, they are mov
11950 65 64 20 66 72 6f 6d 20 74 68 65 20 54 61 62 6c  ed from the Tabl
11960 65 2e 70 56 54 61 62 6c 65 20 6c 69 73 74 20 74  e.pVTable list t
11970 6f 0a 2a 2a 20 61 6e 6f 74 68 65 72 20 6c 69 6e  o.** another lin
11980 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65 64 20  ked list headed 
11990 62 79 20 74 68 65 20 73 71 6c 69 74 65 33 2e 70  by the sqlite3.p
119a0 44 69 73 63 6f 6e 6e 65 63 74 20 6d 65 6d 62 65  Disconnect membe
119b0 72 20 6f 66 20 74 68 65 0a 2a 2a 20 63 6f 72 72  r of the.** corr
119c0 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65  esponding sqlite
119d0 33 20 73 74 72 75 63 74 75 72 65 2e 20 54 68 65  3 structure. The
119e0 79 20 61 72 65 20 74 68 65 6e 20 64 65 6c 65 74  y are then delet
119f0 65 64 2f 78 44 69 73 63 6f 6e 6e 65 63 74 65 64  ed/xDisconnected
11a00 0a 2a 2a 20 6e 65 78 74 20 74 69 6d 65 20 61 20  .** next time a 
11a10 73 74 61 74 65 6d 65 6e 74 20 69 73 20 70 72 65  statement is pre
11a20 70 61 72 65 64 20 75 73 69 6e 67 20 73 61 69 64  pared using said
11a30 20 73 71 6c 69 74 65 33 2a 2e 20 54 68 69 73 20   sqlite3*. This 
11a40 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76  is done.** to av
11a50 6f 69 64 20 64 65 61 64 6c 6f 63 6b 20 69 73 73  oid deadlock iss
11a60 75 65 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75  ues involving mu
11a70 6c 74 69 70 6c 65 20 73 71 6c 69 74 65 33 2e 6d  ltiple sqlite3.m
11a80 75 74 65 78 20 6d 75 74 65 78 65 73 2e 0a 2a 2a  utex mutexes..**
11a90 20 52 65 66 65 72 20 74 6f 20 63 6f 6d 6d 65 6e   Refer to commen
11aa0 74 73 20 61 62 6f 76 65 20 66 75 6e 63 74 69 6f  ts above functio
11ab0 6e 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c  n sqlite3VtabUnl
11ac0 6f 63 6b 4c 69 73 74 28 29 20 66 6f 72 20 61 6e  ockList() for an
11ad0 0a 2a 2a 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20  .** explanation 
11ae0 61 73 20 74 6f 20 77 68 79 20 69 74 20 69 73 20  as to why it is 
11af0 73 61 66 65 20 74 6f 20 61 64 64 20 61 6e 20 65  safe to add an e
11b00 6e 74 72 79 20 74 6f 20 61 6e 20 73 71 6c 69 74  ntry to an sqlit
11b10 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 0a 2a  e3.pDisconnect.*
11b20 2a 20 6c 69 73 74 20 77 69 74 68 6f 75 74 20 68  * list without h
11b30 6f 6c 64 69 6e 67 20 74 68 65 20 63 6f 72 72 65  olding the corre
11b40 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33  sponding sqlite3
11b50 2e 6d 75 74 65 78 20 6d 75 74 65 78 2e 0a 2a 2a  .mutex mutex..**
11b60 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 66  .** The memory f
11b70 6f 72 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 68  or objects of th
11b80 69 73 20 74 79 70 65 20 69 73 20 61 6c 77 61 79  is type is alway
11b90 73 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 0a 2a  s allocated by.*
11ba0 2a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  * sqlite3DbMallo
11bb0 63 28 29 2c 20 75 73 69 6e 67 20 74 68 65 20 63  c(), using the c
11bc0 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
11bd0 20 73 74 6f 72 65 64 20 69 6e 20 56 54 61 62 6c   stored in VTabl
11be0 65 2e 64 62 20 61 73 0a 2a 2a 20 74 68 65 20 66  e.db as.** the f
11bf0 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 2a  irst argument..*
11c00 2f 0a 73 74 72 75 63 74 20 56 54 61 62 6c 65 20  /.struct VTable 
11c10 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
11c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
11c30 20 44 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   Database connec
11c40 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20  tion associated 
11c50 77 69 74 68 20 74 68 69 73 20 74 61 62 6c 65 20  with this table 
11c60 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f  */.  Module *pMo
11c70 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  d;             /
11c80 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 6d 6f 64  * Pointer to mod
11c90 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ule implementati
11ca0 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  on */.  sqlite3_
11cb0 76 74 61 62 20 2a 70 56 74 61 62 3b 20 20 20 20  vtab *pVtab;    
11cc0 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
11cd0 76 74 61 62 20 69 6e 73 74 61 6e 63 65 20 2a 2f  vtab instance */
11ce0 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20  .  int nRef;    
11cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
11d00 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65  Number of pointe
11d10 72 73 20 74 6f 20 74 68 69 73 20 73 74 72 75 63  rs to this struc
11d20 74 75 72 65 20 2a 2f 0a 20 20 75 38 20 62 43 6f  ture */.  u8 bCo
11d30 6e 73 74 72 61 69 6e 74 3b 20 20 20 20 20 20 20  nstraint;       
11d40 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63      /* True if c
11d50 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65 20 73  onstraints are s
11d60 75 70 70 6f 72 74 65 64 20 2a 2f 0a 20 20 69 6e  upported */.  in
11d70 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 20 20 20  t iSavepoint;   
11d80 20 20 20 20 20 20 20 20 2f 2a 20 44 65 70 74 68          /* Depth
11d90 20 6f 66 20 74 68 65 20 53 41 56 45 50 4f 49 4e   of the SAVEPOIN
11da0 54 20 73 74 61 63 6b 20 2a 2f 0a 20 20 56 54 61  T stack */.  VTa
11db0 62 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  ble *pNext;     
11dc0 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69         /* Next i
11dd0 6e 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 73  n linked list (s
11de0 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b 0a  ee above) */.};.
11df0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73 63 68 65 6d  ./*.** The schem
11e00 61 20 66 6f 72 20 65 61 63 68 20 53 51 4c 20 74  a for each SQL t
11e10 61 62 6c 65 20 61 6e 64 20 76 69 65 77 20 69 73  able and view is
11e20 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20   represented in 
11e30 6d 65 6d 6f 72 79 0a 2a 2a 20 62 79 20 61 6e 20  memory.** by an 
11e40 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
11e50 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
11e60 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54  ure..*/.struct T
11e70 61 62 6c 65 20 7b 0a 20 20 63 68 61 72 20 2a 7a  able {.  char *z
11e80 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  Name;         /*
11e90 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   Name of the tab
11ea0 6c 65 20 6f 72 20 76 69 65 77 20 2a 2f 0a 20 20  le or view */.  
11eb0 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20 20 20  Column *aCol;   
11ec0 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74       /* Informat
11ed0 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63  ion about each c
11ee0 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78  olumn */.  Index
11ef0 20 2a 70 49 6e 64 65 78 3b 20 20 20 20 20 20 20   *pIndex;       
11f00 2f 2a 20 4c 69 73 74 20 6f 66 20 53 51 4c 20 69  /* List of SQL i
11f10 6e 64 65 78 65 73 20 6f 6e 20 74 68 69 73 20 74  ndexes on this t
11f20 61 62 6c 65 2e 20 2a 2f 0a 20 20 53 65 6c 65 63  able. */.  Selec
11f30 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20  t *pSelect;     
11f40 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20 74 61 62 6c  /* NULL for tabl
11f50 65 73 2e 20 20 50 6f 69 6e 74 73 20 74 6f 20 64  es.  Points to d
11f60 65 66 69 6e 69 74 69 6f 6e 20 69 66 20 61 20 76  efinition if a v
11f70 69 65 77 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a  iew. */.  FKey *
11f80 70 46 4b 65 79 3b 20 20 20 20 20 20 20 20 20 2f  pFKey;         /
11f90 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66  * Linked list of
11fa0 20 61 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79   all foreign key
11fb0 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20  s in this table 
11fc0 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41  */.  char *zColA
11fd0 66 66 3b 20 20 20 20 20 20 20 2f 2a 20 53 74 72  ff;       /* Str
11fe0 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65  ing defining the
11ff0 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63   affinity of eac
12000 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78  h column */.  Ex
12010 70 72 4c 69 73 74 20 2a 70 43 68 65 63 6b 3b 20  prList *pCheck; 
12020 20 20 20 2f 2a 20 41 6c 6c 20 43 48 45 43 4b 20     /* All CHECK 
12030 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20  constraints */. 
12040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12050 20 20 20 20 20 20 2f 2a 20 20 20 2e 2e 2e 20 61        /*   ... a
12060 6c 73 6f 20 75 73 65 64 20 61 73 20 63 6f 6c 75  lso used as colu
12070 6d 6e 20 6e 61 6d 65 20 6c 69 73 74 20 69 6e 20  mn name list in 
12080 61 20 56 49 45 57 20 2a 2f 0a 20 20 69 6e 74 20  a VIEW */.  int 
12090 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20  tnum;           
120a0 20 2f 2a 20 52 6f 6f 74 20 42 54 72 65 65 20 70   /* Root BTree p
120b0 61 67 65 20 66 6f 72 20 74 68 69 73 20 74 61 62  age for this tab
120c0 6c 65 20 2a 2f 0a 20 20 75 33 32 20 6e 54 61 62  le */.  u32 nTab
120d0 52 65 66 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Ref;         /* 
120e0 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65  Number of pointe
120f0 72 73 20 74 6f 20 74 68 69 73 20 54 61 62 6c 65  rs to this Table
12100 20 2a 2f 0a 20 20 75 33 32 20 74 61 62 46 6c 61   */.  u32 tabFla
12110 67 73 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  gs;        /* Ma
12120 73 6b 20 6f 66 20 54 46 5f 2a 20 76 61 6c 75 65  sk of TF_* value
12130 73 20 2a 2f 0a 20 20 69 31 36 20 69 50 4b 65 79  s */.  i16 iPKey
12140 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  ;           /* I
12150 66 20 6e 6f 74 20 6e 65 67 61 74 69 76 65 2c 20  f not negative, 
12160 75 73 65 20 61 43 6f 6c 5b 69 50 4b 65 79 5d 20  use aCol[iPKey] 
12170 61 73 20 74 68 65 20 72 6f 77 69 64 20 2a 2f 0a  as the rowid */.
12180 20 20 69 31 36 20 6e 43 6f 6c 3b 20 20 20 20 20    i16 nCol;     
12190 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
121a0 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
121b0 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4c  his table */.  L
121c0 6f 67 45 73 74 20 6e 52 6f 77 4c 6f 67 45 73 74  ogEst nRowLogEst
121d0 3b 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64  ;   /* Estimated
121e0 20 72 6f 77 73 20 69 6e 20 74 61 62 6c 65 20 2d   rows in table -
121f0 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61   from sqlite_sta
12200 74 31 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f  t1 table */.  Lo
12210 67 45 73 74 20 73 7a 54 61 62 52 6f 77 3b 20 20  gEst szTabRow;  
12220 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
12230 73 69 7a 65 20 6f 66 20 65 61 63 68 20 74 61 62  size of each tab
12240 6c 65 20 72 6f 77 20 69 6e 20 62 79 74 65 73 20  le row in bytes 
12250 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
12260 5f 45 4e 41 42 4c 45 5f 43 4f 53 54 4d 55 4c 54  _ENABLE_COSTMULT
12270 0a 20 20 4c 6f 67 45 73 74 20 63 6f 73 74 4d 75  .  LogEst costMu
12280 6c 74 3b 20 20 20 20 20 2f 2a 20 43 6f 73 74 20  lt;     /* Cost 
12290 6d 75 6c 74 69 70 6c 69 65 72 20 66 6f 72 20 75  multiplier for u
122a0 73 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20  sing this table 
122b0 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 75 38 20 6b  */.#endif.  u8 k
122c0 65 79 43 6f 6e 66 3b 20 20 20 20 20 20 20 20 20  eyConf;         
122d0 20 2f 2a 20 57 68 61 74 20 74 6f 20 64 6f 20 69   /* What to do i
122e0 6e 20 63 61 73 65 20 6f 66 20 75 6e 69 71 75 65  n case of unique
122f0 6e 65 73 73 20 63 6f 6e 66 6c 69 63 74 20 6f 6e  ness conflict on
12300 20 69 50 4b 65 79 20 2a 2f 0a 23 69 66 6e 64 65   iPKey */.#ifnde
12310 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c  f SQLITE_OMIT_AL
12320 54 45 52 54 41 42 4c 45 0a 20 20 69 6e 74 20 61  TERTABLE.  int a
12330 64 64 43 6f 6c 4f 66 66 73 65 74 3b 20 20 20 20  ddColOffset;    
12340 2f 2a 20 4f 66 66 73 65 74 20 69 6e 20 43 52 45  /* Offset in CRE
12350 41 54 45 20 54 41 42 4c 45 20 73 74 6d 74 20 74  ATE TABLE stmt t
12360 6f 20 61 64 64 20 61 20 6e 65 77 20 63 6f 6c 75  o add a new colu
12370 6d 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66  mn */.#endif.#if
12380 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
12390 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
123a0 69 6e 74 20 6e 4d 6f 64 75 6c 65 41 72 67 3b 20  int nModuleArg; 
123b0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
123c0 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74  f arguments to t
123d0 68 65 20 6d 6f 64 75 6c 65 20 2a 2f 0a 20 20 63  he module */.  c
123e0 68 61 72 20 2a 2a 61 7a 4d 6f 64 75 6c 65 41 72  har **azModuleAr
123f0 67 3b 20 20 2f 2a 20 30 3a 20 6d 6f 64 75 6c 65  g;  /* 0: module
12400 20 31 3a 20 73 63 68 65 6d 61 20 32 3a 20 76 74   1: schema 2: vt
12410 61 62 20 6e 61 6d 65 20 33 2e 2e 2e 3a 20 61 72  ab name 3...: ar
12420 67 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a  gs */.  VTable *
12430 70 56 54 61 62 6c 65 3b 20 20 20 20 20 2f 2a 20  pVTable;     /* 
12440 4c 69 73 74 20 6f 66 20 56 54 61 62 6c 65 20 6f  List of VTable o
12450 62 6a 65 63 74 73 2e 20 2a 2f 0a 23 65 6e 64 69  bjects. */.#endi
12460 66 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72  f.  Trigger *pTr
12470 69 67 67 65 72 3b 20 20 20 2f 2a 20 4c 69 73 74  igger;   /* List
12480 20 6f 66 20 74 72 69 67 67 65 72 73 20 73 74 6f   of triggers sto
12490 72 65 64 20 69 6e 20 70 53 63 68 65 6d 61 20 2a  red in pSchema *
124a0 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68  /.  Schema *pSch
124b0 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65  ema;     /* Sche
124c0 6d 61 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  ma that contains
124d0 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
124e0 20 54 61 62 6c 65 20 2a 70 4e 65 78 74 5a 6f 6d   Table *pNextZom
124f0 62 69 65 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 6e  bie;  /* Next on
12500 20 74 68 65 20 50 61 72 73 65 2e 70 5a 6f 6d 62   the Parse.pZomb
12510 69 65 54 61 62 20 6c 69 73 74 20 2a 2f 0a 7d 3b  ieTab list */.};
12520 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
12530 76 61 6c 75 65 73 20 66 6f 72 20 54 61 62 6c 65  values for Table
12540 2e 74 61 62 46 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a  .tabFlags..**.**
12550 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 61 70   TF_OOOHidden ap
12560 70 6c 69 65 73 20 74 6f 20 74 61 62 6c 65 73 20  plies to tables 
12570 6f 72 20 76 69 65 77 20 74 68 61 74 20 68 61 76  or view that hav
12580 65 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73  e hidden columns
12590 20 74 68 61 74 20 61 72 65 0a 2a 2a 20 66 6f 6c   that are.** fol
125a0 6c 6f 77 65 64 20 62 79 20 6e 6f 6e 2d 68 69 64  lowed by non-hid
125b0 64 65 6e 20 63 6f 6c 75 6d 6e 73 2e 20 20 45 78  den columns.  Ex
125c0 61 6d 70 6c 65 3a 20 20 22 43 52 45 41 54 45 20  ample:  "CREATE 
125d0 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 78 20  VIRTUAL TABLE x 
125e0 55 53 49 4e 47 0a 2a 2a 20 76 74 61 62 31 28 61  USING.** vtab1(a
125f0 20 48 49 44 44 45 4e 2c 20 62 29 3b 22 2e 20 20   HIDDEN, b);".  
12600 53 69 6e 63 65 20 22 62 22 20 69 73 20 61 20 6e  Since "b" is a n
12610 6f 6e 2d 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e  on-hidden column
12620 20 62 75 74 20 22 61 22 20 69 73 20 68 69 64 64   but "a" is hidd
12630 65 6e 2c 0a 2a 2a 20 74 68 65 20 54 46 5f 4f 4f  en,.** the TF_OO
12640 4f 48 69 64 64 65 6e 20 61 74 74 72 69 62 75 74  OHidden attribut
12650 65 20 77 6f 75 6c 64 20 61 70 70 6c 79 20 69 6e  e would apply in
12660 20 74 68 69 73 20 63 61 73 65 2e 20 20 53 75 63   this case.  Suc
12670 68 20 74 61 62 6c 65 73 20 72 65 71 75 69 72 65  h tables require
12680 0a 2a 2a 20 73 70 65 63 69 61 6c 20 68 61 6e 64  .** special hand
12690 6c 69 6e 67 20 64 75 72 69 6e 67 20 49 4e 53 45  ling during INSE
126a0 52 54 20 70 72 6f 63 65 73 73 69 6e 67 2e 0a 2a  RT processing..*
126b0 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 52 65 61  /.#define TF_Rea
126c0 64 6f 6e 6c 79 20 20 20 20 20 20 20 20 30 78 30  donly        0x0
126d0 30 30 31 20 20 20 20 2f 2a 20 52 65 61 64 2d 6f  001    /* Read-o
126e0 6e 6c 79 20 73 79 73 74 65 6d 20 74 61 62 6c 65  nly system table
126f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 45   */.#define TF_E
12700 70 68 65 6d 65 72 61 6c 20 20 20 20 20 20 20 30  phemeral       0
12710 78 30 30 30 32 20 20 20 20 2f 2a 20 41 6e 20 65  x0002    /* An e
12720 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a  phemeral table *
12730 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73  /.#define TF_Has
12740 50 72 69 6d 61 72 79 4b 65 79 20 20 20 30 78 30  PrimaryKey   0x0
12750 30 30 34 20 20 20 20 2f 2a 20 54 61 62 6c 65 20  004    /* Table 
12760 68 61 73 20 61 20 70 72 69 6d 61 72 79 20 6b 65  has a primary ke
12770 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  y */.#define TF_
12780 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 20 20  Autoincrement   
12790 30 78 30 30 30 38 20 20 20 20 2f 2a 20 49 6e 74  0x0008    /* Int
127a0 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79  eger primary key
127b0 20 69 73 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e   is autoincremen
127c0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  t */.#define TF_
127d0 48 61 73 53 74 61 74 31 20 20 20 20 20 20 20 20  HasStat1        
127e0 30 78 30 30 31 30 20 20 20 20 2f 2a 20 6e 52 6f  0x0010    /* nRo
127f0 77 4c 6f 67 45 73 74 20 73 65 74 20 66 72 6f 6d  wLogEst set from
12800 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 2a 2f   sqlite_stat1 */
12810 0a 23 64 65 66 69 6e 65 20 54 46 5f 57 69 74 68  .#define TF_With
12820 6f 75 74 52 6f 77 69 64 20 20 20 20 30 78 30 30  outRowid    0x00
12830 32 30 20 20 20 20 2f 2a 20 4e 6f 20 72 6f 77 69  20    /* No rowi
12840 64 2e 20 20 50 52 49 4d 41 52 59 20 4b 45 59 20  d.  PRIMARY KEY 
12850 69 73 20 74 68 65 20 6b 65 79 20 2a 2f 0a 23 64  is the key */.#d
12860 65 66 69 6e 65 20 54 46 5f 4e 6f 56 69 73 69 62  efine TF_NoVisib
12870 6c 65 52 6f 77 69 64 20 20 30 78 30 30 34 30 20  leRowid  0x0040 
12880 20 20 20 2f 2a 20 4e 6f 20 75 73 65 72 2d 76 69     /* No user-vi
12890 73 69 62 6c 65 20 22 72 6f 77 69 64 22 20 63 6f  sible "rowid" co
128a0 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  lumn */.#define 
128b0 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 20 20 20  TF_OOOHidden    
128c0 20 20 20 30 78 30 30 38 30 20 20 20 20 2f 2a 20     0x0080    /* 
128d0 4f 75 74 2d 6f 66 2d 4f 72 64 65 72 20 68 69 64  Out-of-Order hid
128e0 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 23  den columns */.#
128f0 64 65 66 69 6e 65 20 54 46 5f 53 74 61 74 73 55  define TF_StatsU
12900 73 65 64 20 20 20 20 20 20 20 30 78 30 31 30 30  sed       0x0100
12910 20 20 20 20 2f 2a 20 51 75 65 72 79 20 70 6c 61      /* Query pla
12920 6e 6e 65 72 20 64 65 63 69 73 69 6f 6e 73 20 61  nner decisions a
12930 66 66 65 63 74 65 64 20 62 79 0a 20 20 20 20 20  ffected by.     
12940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12960 2a 2a 20 49 6e 64 65 78 2e 61 69 52 6f 77 4c 6f  ** Index.aiRowLo
12970 67 45 73 74 5b 5d 20 76 61 6c 75 65 73 20 2a 2f  gEst[] values */
12980 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73 4e  .#define TF_HasN
12990 6f 74 4e 75 6c 6c 20 20 20 20 20 20 30 78 30 32  otNull      0x02
129a0 30 30 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e  00    /* Contain
129b0 73 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74  s NOT NULL const
129c0 72 61 69 6e 74 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  raints */../*.**
129d0 20 54 65 73 74 20 74 6f 20 73 65 65 20 77 68 65   Test to see whe
129e0 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 74 61  ther or not a ta
129f0 62 6c 65 20 69 73 20 61 20 76 69 72 74 75 61 6c  ble is a virtual
12a00 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20 69 73   table.  This is
12a10 0a 2a 2a 20 64 6f 6e 65 20 61 73 20 61 20 6d 61  .** done as a ma
12a20 63 72 6f 20 73 6f 20 74 68 61 74 20 69 74 20 77  cro so that it w
12a30 69 6c 6c 20 62 65 20 6f 70 74 69 6d 69 7a 65 64  ill be optimized
12a40 20 6f 75 74 20 77 68 65 6e 20 76 69 72 74 75 61   out when virtua
12a50 6c 0a 2a 2a 20 74 61 62 6c 65 20 73 75 70 70 6f  l.** table suppo
12a60 72 74 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72  rt is omitted fr
12a70 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a 2f  om the build..*/
12a80 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
12a90 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
12aa0 45 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56 69  E.#  define IsVi
12ab0 72 74 75 61 6c 28 58 29 20 20 20 20 20 20 28 28  rtual(X)      ((
12ac0 58 29 2d 3e 6e 4d 6f 64 75 6c 65 41 72 67 29 0a  X)->nModuleArg).
12ad0 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20  #else.#  define 
12ae0 49 73 56 69 72 74 75 61 6c 28 58 29 20 20 20 20  IsVirtual(X)    
12af0 20 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a    0.#endif../*.*
12b00 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65  * Macros to dete
12b10 72 6d 69 6e 65 20 69 66 20 61 20 63 6f 6c 75 6d  rmine if a colum
12b20 6e 20 69 73 20 68 69 64 64 65 6e 2e 20 20 49 73  n is hidden.  Is
12b30 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f  OrdinaryHiddenCo
12b40 6c 75 6d 6e 28 29 0a 2a 2a 20 6f 6e 6c 79 20 77  lumn().** only w
12b50 6f 72 6b 73 20 66 6f 72 20 6e 6f 6e 2d 76 69 72  orks for non-vir
12b60 74 75 61 6c 20 74 61 62 6c 65 73 20 28 6f 72 64  tual tables (ord
12b70 69 6e 61 72 79 20 74 61 62 6c 65 73 20 61 6e 64  inary tables and
12b80 20 76 69 65 77 73 29 20 61 6e 64 20 69 73 0a 2a   views) and is.*
12b90 2a 20 61 6c 77 61 79 73 20 66 61 6c 73 65 20 75  * always false u
12ba0 6e 6c 65 73 73 20 53 51 4c 49 54 45 5f 45 4e 41  nless SQLITE_ENA
12bb0 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d  BLE_HIDDEN_COLUM
12bc0 4e 53 20 69 73 20 64 65 66 69 6e 65 64 2e 20 20  NS is defined.  
12bd0 54 68 65 0a 2a 2a 20 49 73 48 69 64 64 65 6e 43  The.** IsHiddenC
12be0 6f 6c 75 6d 6e 28 29 20 6d 61 63 72 6f 20 69 73  olumn() macro is
12bf0 20 67 65 6e 65 72 61 6c 20 70 75 72 70 6f 73 65   general purpose
12c00 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
12c10 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48  (SQLITE_ENABLE_H
12c20 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 29 0a 23  IDDEN_COLUMNS).#
12c30 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65    define IsHidde
12c40 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20  nColumn(X)      
12c50 20 20 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61     (((X)->colFla
12c60 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44  gs & COLFLAG_HID
12c70 44 45 4e 29 21 3d 30 29 0a 23 20 20 64 65 66 69  DEN)!=0).#  defi
12c80 6e 65 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64  ne IsOrdinaryHid
12c90 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28  denColumn(X) (((
12ca0 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43  X)->colFlags & C
12cb0 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d  OLFLAG_HIDDEN)!=
12cc0 30 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65  0).#elif !define
12cd0 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  d(SQLITE_OMIT_VI
12ce0 52 54 55 41 4c 54 41 42 4c 45 29 0a 23 20 20 64  RTUALTABLE).#  d
12cf0 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f  efine IsHiddenCo
12d00 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20  lumn(X)         
12d10 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20  (((X)->colFlags 
12d20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e  & COLFLAG_HIDDEN
12d30 29 21 3d 30 29 0a 23 20 20 64 65 66 69 6e 65 20  )!=0).#  define 
12d40 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e  IsOrdinaryHidden
12d50 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6c 73  Column(X) 0.#els
12d60 65 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69  e.#  define IsHi
12d70 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20  ddenColumn(X)   
12d80 20 20 20 20 20 20 30 0a 23 20 20 64 65 66 69 6e        0.#  defin
12d90 65 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64  e IsOrdinaryHidd
12da0 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65  enColumn(X) 0.#e
12db0 6e 64 69 66 0a 0a 0a 2f 2a 20 44 6f 65 73 20 74  ndif.../* Does t
12dc0 68 65 20 74 61 62 6c 65 20 68 61 76 65 20 61 20  he table have a 
12dd0 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65  rowid */.#define
12de0 20 48 61 73 52 6f 77 69 64 28 58 29 20 20 20 20   HasRowid(X)    
12df0 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73   (((X)->tabFlags
12e00 20 26 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77   & TF_WithoutRow
12e10 69 64 29 3d 3d 30 29 0a 23 64 65 66 69 6e 65 20  id)==0).#define 
12e20 56 69 73 69 62 6c 65 52 6f 77 69 64 28 58 29 20  VisibleRowid(X) 
12e30 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20  (((X)->tabFlags 
12e40 26 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f  & TF_NoVisibleRo
12e50 77 69 64 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20  wid)==0)../*.** 
12e60 45 61 63 68 20 66 6f 72 65 69 67 6e 20 6b 65 79  Each foreign key
12e70 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 61   constraint is a
12e80 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
12e90 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
12ea0 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66  cture..**.** A f
12eb0 6f 72 65 69 67 6e 20 6b 65 79 20 69 73 20 61 73  oreign key is as
12ec0 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 77  sociated with tw
12ed0 6f 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20 22  o tables.  The "
12ee0 66 72 6f 6d 22 20 74 61 62 6c 65 20 69 73 0a 2a  from" table is.*
12ef0 2a 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  * the table that
12f00 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 52 45   contains the RE
12f10 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20  FERENCES clause 
12f20 74 68 61 74 20 63 72 65 61 74 65 73 20 74 68 65  that creates the
12f30 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e   foreign.** key.
12f40 20 20 54 68 65 20 22 74 6f 22 20 74 61 62 6c 65    The "to" table
12f50 20 69 73 20 74 68 65 20 74 61 62 6c 65 20 74 68   is the table th
12f60 61 74 20 69 73 20 6e 61 6d 65 64 20 69 6e 20 74  at is named in t
12f70 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c  he REFERENCES cl
12f80 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65  ause..** Conside
12f90 72 20 74 68 69 73 20 65 78 61 6d 70 6c 65 3a 0a  r this example:.
12fa0 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45  **.**     CREATE
12fb0 20 54 41 42 4c 45 20 65 78 31 28 0a 2a 2a 20 20   TABLE ex1(.**  
12fc0 20 20 20 20 20 61 20 49 4e 54 45 47 45 52 20 50       a INTEGER P
12fd0 52 49 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a 20 20  RIMARY KEY,.**  
12fe0 20 20 20 20 20 62 20 49 4e 54 45 47 45 52 20 43       b INTEGER C
12ff0 4f 4e 53 54 52 41 49 4e 54 20 66 6b 31 20 52 45  ONSTRAINT fk1 RE
13000 46 45 52 45 4e 43 45 53 20 65 78 32 28 78 29 0a  FERENCES ex2(x).
13010 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20  **     );.**.** 
13020 46 6f 72 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  For foreign key 
13030 22 66 6b 31 22 2c 20 74 68 65 20 66 72 6f 6d 2d  "fk1", the from-
13040 74 61 62 6c 65 20 69 73 20 22 65 78 31 22 20 61  table is "ex1" a
13050 6e 64 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20  nd the to-table 
13060 69 73 20 22 65 78 32 22 2e 0a 2a 2a 20 45 71 75  is "ex2"..** Equ
13070 69 76 61 6c 65 6e 74 20 6e 61 6d 65 73 3a 0a 2a  ivalent names:.*
13080 2a 0a 2a 2a 20 20 20 20 20 66 72 6f 6d 2d 74 61  *.**     from-ta
13090 62 6c 65 20 3d 3d 20 63 68 69 6c 64 2d 74 61 62  ble == child-tab
130a0 6c 65 0a 2a 2a 20 20 20 20 20 20 20 74 6f 2d 74  le.**       to-t
130b0 61 62 6c 65 20 3d 3d 20 70 61 72 65 6e 74 2d 74  able == parent-t
130c0 61 62 6c 65 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20  able.**.** Each 
130d0 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73  REFERENCES claus
130e0 65 20 67 65 6e 65 72 61 74 65 73 20 61 6e 20 69  e generates an i
130f0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
13100 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
13110 72 65 0a 2a 2a 20 77 68 69 63 68 20 69 73 20 61  re.** which is a
13120 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 66  ttached to the f
13130 72 6f 6d 2d 74 61 62 6c 65 2e 20 20 54 68 65 20  rom-table.  The 
13140 74 6f 2d 74 61 62 6c 65 20 6e 65 65 64 20 6e 6f  to-table need no
13150 74 20 65 78 69 73 74 20 77 68 65 6e 0a 2a 2a 20  t exist when.** 
13160 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69  the from-table i
13170 73 20 63 72 65 61 74 65 64 2e 20 20 54 68 65 20  s created.  The 
13180 65 78 69 73 74 65 6e 63 65 20 6f 66 20 74 68 65  existence of the
13190 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 6e 6f 74   to-table is not
131a0 20 63 68 65 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20   checked..**.** 
131b0 54 68 65 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20  The list of all 
131c0 70 61 72 65 6e 74 73 20 66 6f 72 20 63 68 69 6c  parents for chil
131d0 64 20 54 61 62 6c 65 20 58 20 69 73 20 68 65 6c  d Table X is hel
131e0 64 20 61 74 20 58 2e 70 46 4b 65 79 2e 0a 2a 2a  d at X.pFKey..**
131f0 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 61 6c  .** A list of al
13200 6c 20 63 68 69 6c 64 72 65 6e 20 66 6f 72 20 61  l children for a
13210 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 5a 20 28   table named Z (
13220 77 68 69 63 68 20 6d 69 67 68 74 20 6e 6f 74 20  which might not 
13230 65 76 65 6e 20 65 78 69 73 74 29 0a 2a 2a 20 69  even exist).** i
13240 73 20 68 65 6c 64 20 69 6e 20 53 63 68 65 6d 61  s held in Schema
13250 2e 66 6b 65 79 48 61 73 68 20 77 69 74 68 20 61  .fkeyHash with a
13260 20 68 61 73 68 20 6b 65 79 20 6f 66 20 5a 2e 0a   hash key of Z..
13270 2a 2f 0a 73 74 72 75 63 74 20 46 4b 65 79 20 7b  */.struct FKey {
13280 0a 20 20 54 61 62 6c 65 20 2a 70 46 72 6f 6d 3b  .  Table *pFrom;
13290 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f       /* Table co
132a0 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 52 45 46  ntaining the REF
132b0 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 28  ERENCES clause (
132c0 61 6b 61 3a 20 43 68 69 6c 64 29 20 2a 2f 0a 20  aka: Child) */. 
132d0 20 46 4b 65 79 20 2a 70 4e 65 78 74 46 72 6f 6d   FKey *pNextFrom
132e0 3b 20 20 2f 2a 20 4e 65 78 74 20 46 4b 65 79 20  ;  /* Next FKey 
132f0 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 69 6e  with the same in
13300 20 70 46 72 6f 6d 2e 20 4e 65 78 74 20 70 61 72   pFrom. Next par
13310 65 6e 74 20 6f 66 20 70 46 72 6f 6d 20 2a 2f 0a  ent of pFrom */.
13320 20 20 63 68 61 72 20 2a 7a 54 6f 3b 20 20 20 20    char *zTo;    
13330 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
13340 61 62 6c 65 20 74 68 61 74 20 74 68 65 20 6b 65  able that the ke
13350 79 20 70 6f 69 6e 74 73 20 74 6f 20 28 61 6b 61  y points to (aka
13360 3a 20 50 61 72 65 6e 74 29 20 2a 2f 0a 20 20 46  : Parent) */.  F
13370 4b 65 79 20 2a 70 4e 65 78 74 54 6f 3b 20 20 20  Key *pNextTo;   
13380 20 2f 2a 20 4e 65 78 74 20 77 69 74 68 20 74 68   /* Next with th
13390 65 20 73 61 6d 65 20 7a 54 6f 2e 20 4e 65 78 74  e same zTo. Next
133a0 20 63 68 69 6c 64 20 6f 66 20 7a 54 6f 2e 20 2a   child of zTo. *
133b0 2f 0a 20 20 46 4b 65 79 20 2a 70 50 72 65 76 54  /.  FKey *pPrevT
133c0 6f 3b 20 20 20 20 2f 2a 20 50 72 65 76 69 6f 75  o;    /* Previou
133d0 73 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  s with the same 
133e0 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f  zTo */.  int nCo
133f0 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  l;         /* Nu
13400 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
13410 69 6e 20 74 68 69 73 20 6b 65 79 20 2a 2f 0a 20  in this key */. 
13420 20 2f 2a 20 45 56 3a 20 52 2d 33 30 33 32 33 2d   /* EV: R-30323-
13430 32 31 39 31 37 20 2a 2f 0a 20 20 75 38 20 69 73  21917 */.  u8 is
13440 44 65 66 65 72 72 65 64 3b 20 20 20 20 20 20 20  Deferred;       
13450 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74  /* True if const
13460 72 61 69 6e 74 20 63 68 65 63 6b 69 6e 67 20 69  raint checking i
13470 73 20 64 65 66 65 72 72 65 64 20 74 69 6c 6c 20  s deferred till 
13480 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20 75 38 20 61  COMMIT */.  u8 a
13490 41 63 74 69 6f 6e 5b 32 5d 3b 20 20 20 20 20 20  Action[2];      
134a0 20 20 2f 2a 20 4f 4e 20 44 45 4c 45 54 45 20 61    /* ON DELETE a
134b0 6e 64 20 4f 4e 20 55 50 44 41 54 45 20 61 63 74  nd ON UPDATE act
134c0 69 6f 6e 73 2c 20 72 65 73 70 65 63 74 69 76 65  ions, respective
134d0 6c 79 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20  ly */.  Trigger 
134e0 2a 61 70 54 72 69 67 67 65 72 5b 32 5d 3b 2f 2a  *apTrigger[2];/*
134f0 20 54 72 69 67 67 65 72 73 20 66 6f 72 20 61 41   Triggers for aA
13500 63 74 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73 20  ction[] actions 
13510 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 43 6f 6c  */.  struct sCol
13520 4d 61 70 20 7b 20 20 20 20 20 20 2f 2a 20 4d 61  Map {      /* Ma
13530 70 70 69 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e 73  pping of columns
13540 20 69 6e 20 70 46 72 6f 6d 20 74 6f 20 63 6f 6c   in pFrom to col
13550 75 6d 6e 73 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20  umns in zTo */. 
13560 20 20 20 69 6e 74 20 69 46 72 6f 6d 3b 20 20 20     int iFrom;   
13570 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
13580 78 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 70  x of column in p
13590 46 72 6f 6d 20 2a 2f 0a 20 20 20 20 63 68 61 72  From */.    char
135a0 20 2a 7a 43 6f 6c 3b 20 20 20 20 20 20 20 20 20   *zCol;         
135b0 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 63 6f 6c    /* Name of col
135c0 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20 49 66 20  umn in zTo.  If 
135d0 4e 55 4c 4c 20 75 73 65 20 50 52 49 4d 41 52 59  NULL use PRIMARY
135e0 20 4b 45 59 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c   KEY */.  } aCol
135f0 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20  [1];            
13600 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72  /* One entry for
13610 20 65 61 63 68 20 6f 66 20 6e 43 6f 6c 20 63 6f   each of nCol co
13620 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  lumns */.};../*.
13630 2a 2a 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72  ** SQLite suppor
13640 74 73 20 6d 61 6e 79 20 64 69 66 66 65 72 65 6e  ts many differen
13650 74 20 77 61 79 73 20 74 6f 20 72 65 73 6f 6c 76  t ways to resolv
13660 65 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a  e a constraint.*
13670 2a 20 65 72 72 6f 72 2e 20 20 52 4f 4c 4c 42 41  * error.  ROLLBA
13680 43 4b 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65  CK processing me
13690 61 6e 73 20 74 68 61 74 20 61 20 63 6f 6e 73 74  ans that a const
136a0 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a  raint violation.
136b0 2a 2a 20 63 61 75 73 65 73 20 74 68 65 20 6f 70  ** causes the op
136c0 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65  eration in proce
136d0 73 73 20 74 6f 20 66 61 69 6c 20 61 6e 64 20 66  ss to fail and f
136e0 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  or the current t
136f0 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f  ransaction.** to
13700 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e   be rolled back.
13710 20 20 41 42 4f 52 54 20 70 72 6f 63 65 73 73 69    ABORT processi
13720 6e 67 20 6d 65 61 6e 73 20 74 68 65 20 6f 70 65  ng means the ope
13730 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73  ration in proces
13740 73 0a 2a 2a 20 66 61 69 6c 73 20 61 6e 64 20 61  s.** fails and a
13750 6e 79 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73  ny prior changes
13760 20 66 72 6f 6d 20 74 68 61 74 20 6f 6e 65 20 6f   from that one o
13770 70 65 72 61 74 69 6f 6e 20 61 72 65 20 62 61 63  peration are bac
13780 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20  ked out,.** but 
13790 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
137a0 69 73 20 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61  is not rolled ba
137b0 63 6b 2e 20 20 46 41 49 4c 20 70 72 6f 63 65 73  ck.  FAIL proces
137c0 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 0a  sing means that.
137d0 2a 2a 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  ** the operation
137e0 20 69 6e 20 70 72 6f 67 72 65 73 73 20 73 74 6f   in progress sto
137f0 70 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20 61  ps and returns a
13800 6e 20 65 72 72 6f 72 20 63 6f 64 65 2e 20 20 42  n error code.  B
13810 75 74 20 70 72 69 6f 72 0a 2a 2a 20 63 68 61 6e  ut prior.** chan
13820 67 65 73 20 64 75 65 20 74 6f 20 74 68 65 20 73  ges due to the s
13830 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72  ame operation ar
13840 65 20 6e 6f 74 20 62 61 63 6b 65 64 20 6f 75 74  e not backed out
13850 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b   and no rollback
13860 0a 2a 2a 20 6f 63 63 75 72 73 2e 20 20 49 47 4e  .** occurs.  IGN
13870 4f 52 45 20 6d 65 61 6e 73 20 74 68 61 74 20 74  ORE means that t
13880 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 72 6f  he particular ro
13890 77 20 74 68 61 74 20 63 61 75 73 65 64 20 74 68  w that caused th
138a0 65 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20  e constraint.** 
138b0 65 72 72 6f 72 20 69 73 20 6e 6f 74 20 69 6e 73  error is not ins
138c0 65 72 74 65 64 20 6f 72 20 75 70 64 61 74 65 64  erted or updated
138d0 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f  .  Processing co
138e0 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65  ntinues and no e
138f0 72 72 6f 72 0a 2a 2a 20 69 73 20 72 65 74 75 72  rror.** is retur
13900 6e 65 64 2e 20 20 52 45 50 4c 41 43 45 20 6d 65  ned.  REPLACE me
13910 61 6e 73 20 74 68 61 74 20 70 72 65 65 78 69 73  ans that preexis
13920 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 72 6f  ting database ro
13930 77 73 20 74 68 61 74 20 63 61 75 73 65 64 0a 2a  ws that caused.*
13940 2a 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74  * a UNIQUE const
13950 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
13960 61 72 65 20 72 65 6d 6f 76 65 64 20 73 6f 20 74  are removed so t
13970 68 61 74 20 74 68 65 20 6e 65 77 20 69 6e 73 65  hat the new inse
13980 72 74 20 6f 72 0a 2a 2a 20 75 70 64 61 74 65 20  rt or.** update 
13990 63 61 6e 20 70 72 6f 63 65 65 64 2e 20 20 50 72  can proceed.  Pr
139a0 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75  ocessing continu
139b0 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20  es and no error 
139c0 69 73 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a  is reported..**.
139d0 2a 2a 20 52 45 53 54 52 49 43 54 2c 20 53 45 54  ** RESTRICT, SET
139e0 4e 55 4c 4c 2c 20 61 6e 64 20 43 41 53 43 41 44  NULL, and CASCAD
139f0 45 20 61 63 74 69 6f 6e 73 20 61 70 70 6c 79 20  E actions apply 
13a00 6f 6e 6c 79 20 74 6f 20 66 6f 72 65 69 67 6e 20  only to foreign 
13a10 6b 65 79 73 2e 0a 2a 2a 20 52 45 53 54 52 49 43  keys..** RESTRIC
13a20 54 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73  T is the same as
13a30 20 41 42 4f 52 54 20 66 6f 72 20 49 4d 4d 45 44   ABORT for IMMED
13a40 49 41 54 45 20 66 6f 72 65 69 67 6e 20 6b 65 79  IATE foreign key
13a50 73 20 61 6e 64 20 74 68 65 0a 2a 2a 20 73 61 6d  s and the.** sam
13a60 65 20 61 73 20 52 4f 4c 4c 42 41 43 4b 20 66 6f  e as ROLLBACK fo
13a70 72 20 44 45 46 45 52 52 45 44 20 6b 65 79 73 2e  r DEFERRED keys.
13a80 20 20 53 45 54 4e 55 4c 4c 20 6d 65 61 6e 73 20    SETNULL means 
13a90 74 68 61 74 20 74 68 65 20 66 6f 72 65 69 67 6e  that the foreign
13aa0 0a 2a 2a 20 6b 65 79 20 69 73 20 73 65 74 20 74  .** key is set t
13ab0 6f 20 4e 55 4c 4c 2e 20 20 43 41 53 43 41 44 45  o NULL.  CASCADE
13ac0 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 44 45   means that a DE
13ad0 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 6f  LETE or UPDATE o
13ae0 66 20 74 68 65 0a 2a 2a 20 72 65 66 65 72 65 6e  f the.** referen
13af0 63 65 64 20 74 61 62 6c 65 20 72 6f 77 20 69 73  ced table row is
13b00 20 70 72 6f 70 61 67 61 74 65 64 20 69 6e 74 6f   propagated into
13b10 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 68 6f   the row that ho
13b20 6c 64 73 20 74 68 65 0a 2a 2a 20 66 6f 72 65 69  lds the.** forei
13b30 67 6e 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68  gn key..**.** Th
13b40 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d 62  e following symb
13b50 6f 6c 69 63 20 76 61 6c 75 65 73 20 61 72 65 20  olic values are 
13b60 75 73 65 64 20 74 6f 20 72 65 63 6f 72 64 20 77  used to record w
13b70 68 69 63 68 20 74 79 70 65 0a 2a 2a 20 6f 66 20  hich type.** of 
13b80 61 63 74 69 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a  action to take..
13b90 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 4e 6f  */.#define OE_No
13ba0 6e 65 20 20 20 20 20 30 20 20 20 2f 2a 20 54 68  ne     0   /* Th
13bb0 65 72 65 20 69 73 20 6e 6f 20 63 6f 6e 73 74 72  ere is no constr
13bc0 61 69 6e 74 20 74 6f 20 63 68 65 63 6b 20 2a 2f  aint to check */
13bd0 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c  .#define OE_Roll
13be0 62 61 63 6b 20 31 20 20 20 2f 2a 20 46 61 69 6c  back 1   /* Fail
13bf0 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 61   the operation a
13c00 6e 64 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20  nd rollback the 
13c10 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23  transaction */.#
13c20 64 65 66 69 6e 65 20 4f 45 5f 41 62 6f 72 74 20  define OE_Abort 
13c30 20 20 20 32 20 20 20 2f 2a 20 42 61 63 6b 20 6f     2   /* Back o
13c40 75 74 20 63 68 61 6e 67 65 73 20 62 75 74 20 64  ut changes but d
13c50 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 72  o no rollback tr
13c60 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65  ansaction */.#de
13c70 66 69 6e 65 20 4f 45 5f 46 61 69 6c 20 20 20 20  fine OE_Fail    
13c80 20 33 20 20 20 2f 2a 20 53 74 6f 70 20 74 68 65   3   /* Stop the
13c90 20 6f 70 65 72 61 74 69 6f 6e 20 62 75 74 20 6c   operation but l
13ca0 65 61 76 65 20 61 6c 6c 20 70 72 69 6f 72 20 63  eave all prior c
13cb0 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e  hanges */.#defin
13cc0 65 20 4f 45 5f 49 67 6e 6f 72 65 20 20 20 34 20  e OE_Ignore   4 
13cd0 20 20 2f 2a 20 49 67 6e 6f 72 65 20 74 68 65 20    /* Ignore the 
13ce0 65 72 72 6f 72 2e 20 44 6f 20 6e 6f 74 20 64 6f  error. Do not do
13cf0 20 74 68 65 20 49 4e 53 45 52 54 20 6f 72 20 55   the INSERT or U
13d00 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65  PDATE */.#define
13d10 20 4f 45 5f 52 65 70 6c 61 63 65 20 20 35 20 20   OE_Replace  5  
13d20 20 2f 2a 20 44 65 6c 65 74 65 20 65 78 69 73 74   /* Delete exist
13d30 69 6e 67 20 72 65 63 6f 72 64 2c 20 74 68 65 6e  ing record, then
13d40 20 64 6f 20 49 4e 53 45 52 54 20 6f 72 20 55 50   do INSERT or UP
13d50 44 41 54 45 20 2a 2f 0a 0a 23 64 65 66 69 6e 65  DATE */..#define
13d60 20 4f 45 5f 52 65 73 74 72 69 63 74 20 36 20 20   OE_Restrict 6  
13d70 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 20 66 6f 72   /* OE_Abort for
13d80 20 49 4d 4d 45 44 49 41 54 45 2c 20 4f 45 5f 52   IMMEDIATE, OE_R
13d90 6f 6c 6c 62 61 63 6b 20 66 6f 72 20 44 45 46 45  ollback for DEFE
13da0 52 52 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20  RRED */.#define 
13db0 4f 45 5f 53 65 74 4e 75 6c 6c 20 20 37 20 20 20  OE_SetNull  7   
13dc0 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65 69  /* Set the forei
13dd0 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20  gn key value to 
13de0 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NULL */.#define 
13df0 4f 45 5f 53 65 74 44 66 6c 74 20 20 38 20 20 20  OE_SetDflt  8   
13e00 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65 69  /* Set the forei
13e10 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20  gn key value to 
13e20 69 74 73 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23  its default */.#
13e30 64 65 66 69 6e 65 20 4f 45 5f 43 61 73 63 61 64  define OE_Cascad
13e40 65 20 20 39 20 20 20 2f 2a 20 43 61 73 63 61 64  e  9   /* Cascad
13e50 65 20 74 68 65 20 63 68 61 6e 67 65 73 20 2a 2f  e the changes */
13e60 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f 44 65 66  ..#define OE_Def
13e70 61 75 6c 74 20 20 31 30 20 20 2f 2a 20 44 6f 20  ault  10  /* Do 
13e80 77 68 61 74 65 76 65 72 20 74 68 65 20 64 65 66  whatever the def
13e90 61 75 6c 74 20 61 63 74 69 6f 6e 20 69 73 20 2a  ault action is *
13ea0 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  /.../*.** An ins
13eb0 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
13ec0 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
13ed0 20 69 73 20 70 61 73 73 65 64 20 61 73 20 74 68   is passed as th
13ee0 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d  e first.** argum
13ef0 65 6e 74 20 74 6f 20 73 71 6c 69 74 65 33 56 64  ent to sqlite3Vd
13f00 62 65 4b 65 79 43 6f 6d 70 61 72 65 20 61 6e 64  beKeyCompare and
13f10 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6e 74   is used to cont
13f20 72 6f 6c 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61  rol the.** compa
13f30 72 69 73 6f 6e 20 6f 66 20 74 68 65 20 74 77 6f  rison of the two
13f40 20 69 6e 64 65 78 20 6b 65 79 73 2e 0a 2a 2a 0a   index keys..**.
13f50 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 61 53 6f  ** Note that aSo
13f60 72 74 4f 72 64 65 72 5b 5d 20 61 6e 64 20 61 43  rtOrder[] and aC
13f70 6f 6c 6c 5b 5d 20 68 61 76 65 20 6e 46 69 65 6c  oll[] have nFiel
13f80 64 2b 31 20 73 6c 6f 74 73 2e 20 20 54 68 65 72  d+1 slots.  Ther
13f90 65 0a 2a 2a 20 61 72 65 20 6e 46 69 65 6c 64 20  e.** are nField 
13fa0 73 6c 6f 74 73 20 66 6f 72 20 74 68 65 20 63 6f  slots for the co
13fb0 6c 75 6d 6e 73 20 6f 66 20 61 6e 20 69 6e 64 65  lumns of an inde
13fc0 78 20 74 68 65 6e 20 6f 6e 65 20 65 78 74 72 61  x then one extra
13fd0 20 73 6c 6f 74 0a 2a 2a 20 66 6f 72 20 74 68 65   slot.** for the
13fe0 20 72 6f 77 69 64 20 61 74 20 74 68 65 20 65 6e   rowid at the en
13ff0 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4b 65 79  d..*/.struct Key
14000 49 6e 66 6f 20 7b 0a 20 20 75 33 32 20 6e 52 65  Info {.  u32 nRe
14010 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  f;           /* 
14020 4e 75 6d 62 65 72 20 6f 66 20 72 65 66 65 72 65  Number of refere
14030 6e 63 65 73 20 74 6f 20 74 68 69 73 20 4b 65 79  nces to this Key
14040 49 6e 66 6f 20 6f 62 6a 65 63 74 20 2a 2f 0a 20  Info object */. 
14050 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20   u8 enc;        
14060 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63       /* Text enc
14070 6f 64 69 6e 67 20 2d 20 6f 6e 65 20 6f 66 20 74  oding - one of t
14080 68 65 20 53 51 4c 49 54 45 5f 55 54 46 2a 20 76  he SQLITE_UTF* v
14090 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e  alues */.  u16 n
140a0 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20 2f  Field;         /
140b0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6b 65 79 20  * Number of key 
140c0 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 69  columns in the i
140d0 6e 64 65 78 20 2a 2f 0a 20 20 75 31 36 20 6e 58  ndex */.  u16 nX
140e0 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 2f 2a  Field;        /*
140f0 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
14100 6e 73 20 62 65 79 6f 6e 64 20 74 68 65 20 6b 65  ns beyond the ke
14110 79 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 73  y columns */.  s
14120 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
14130 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
14140 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f  se connection */
14150 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65  .  u8 *aSortOrde
14160 72 3b 20 20 20 20 20 2f 2a 20 53 6f 72 74 20 6f  r;     /* Sort o
14170 72 64 65 72 20 66 6f 72 20 65 61 63 68 20 63 6f  rder for each co
14180 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 43 6f 6c 6c 53  lumn. */.  CollS
14190 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f  eq *aColl[1];  /
141a0 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * Collating sequ
141b0 65 6e 63 65 20 66 6f 72 20 65 61 63 68 20 74 65  ence for each te
141c0 72 6d 20 6f 66 20 74 68 65 20 6b 65 79 20 2a 2f  rm of the key */
141d0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20  .};../*.** This 
141e0 6f 62 6a 65 63 74 20 68 6f 6c 64 73 20 61 20 72  object holds a r
141f0 65 63 6f 72 64 20 77 68 69 63 68 20 68 61 73 20  ecord which has 
14200 62 65 65 6e 20 70 61 72 73 65 64 20 6f 75 74 20  been parsed out 
14210 69 6e 74 6f 20 69 6e 64 69 76 69 64 75 61 6c 0a  into individual.
14220 2a 2a 20 66 69 65 6c 64 73 2c 20 66 6f 72 20 74  ** fields, for t
14230 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 64  he purposes of d
14240 6f 69 6e 67 20 61 20 63 6f 6d 70 61 72 69 73 6f  oing a compariso
14250 6e 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f 72  n..**.** A recor
14260 64 20 69 73 20 61 6e 20 6f 62 6a 65 63 74 20 74  d is an object t
14270 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65  hat contains one
14280 20 6f 72 20 6d 6f 72 65 20 66 69 65 6c 64 73 20   or more fields 
14290 6f 66 20 64 61 74 61 2e 0a 2a 2a 20 52 65 63 6f  of data..** Reco
142a0 72 64 73 20 61 72 65 20 75 73 65 64 20 74 6f 20  rds are used to 
142b0 73 74 6f 72 65 20 74 68 65 20 63 6f 6e 74 65 6e  store the conten
142c0 74 20 6f 66 20 61 20 74 61 62 6c 65 20 72 6f 77  t of a table row
142d0 20 61 6e 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a   and to store.**
142e0 20 74 68 65 20 6b 65 79 20 6f 66 20 61 6e 20 69   the key of an i
142f0 6e 64 65 78 2e 20 20 41 20 62 6c 6f 62 20 65 6e  ndex.  A blob en
14300 63 6f 64 69 6e 67 20 6f 66 20 61 20 72 65 63 6f  coding of a reco
14310 72 64 20 69 73 20 63 72 65 61 74 65 64 20 62 79  rd is created by
14320 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52  .** the OP_MakeR
14330 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 6f 66 20  ecord opcode of 
14340 74 68 65 20 56 44 42 45 20 61 6e 64 20 69 73 20  the VDBE and is 
14350 64 69 73 61 73 73 65 6d 62 6c 65 64 20 62 79 20  disassembled by 
14360 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e  the.** OP_Column
14370 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41   opcode..**.** A
14380 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
14390 69 73 20 6f 62 6a 65 63 74 20 73 65 72 76 65 73  is object serves
143a0 20 61 73 20 61 20 22 6b 65 79 22 20 66 6f 72 20   as a "key" for 
143b0 64 6f 69 6e 67 20 61 20 73 65 61 72 63 68 20 6f  doing a search o
143c0 6e 0a 2a 2a 20 61 6e 20 69 6e 64 65 78 20 62 2b  n.** an index b+
143d0 74 72 65 65 2e 20 54 68 65 20 67 6f 61 6c 20 6f  tree. The goal o
143e0 66 20 74 68 65 20 73 65 61 72 63 68 20 69 73 20  f the search is 
143f0 74 6f 20 66 69 6e 64 20 74 68 65 20 65 6e 74 72  to find the entr
14400 79 20 74 68 61 74 0a 2a 2a 20 69 73 20 63 6c 6f  y that.** is clo
14410 73 65 64 20 74 6f 20 74 68 65 20 6b 65 79 20 64  sed to the key d
14420 65 73 63 72 69 62 65 64 20 62 79 20 74 68 69 73  escribed by this
14430 20 6f 62 6a 65 63 74 2e 20 20 54 68 69 73 20 6f   object.  This o
14440 62 6a 65 63 74 20 6d 69 67 68 74 20 68 6f 6c 64  bject might hold
14450 0a 2a 2a 20 6a 75 73 74 20 61 20 70 72 65 66 69  .** just a prefi
14460 78 20 6f 66 20 74 68 65 20 6b 65 79 2e 20 20 54  x of the key.  T
14470 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 65  he number of fie
14480 6c 64 73 20 69 73 20 67 69 76 65 6e 20 62 79 0a  lds is given by.
14490 2a 2a 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69  ** pKeyInfo->nFi
144a0 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72  eld..**.** The r
144b0 31 20 61 6e 64 20 72 32 20 66 69 65 6c 64 73 20  1 and r2 fields 
144c0 61 72 65 20 74 68 65 20 76 61 6c 75 65 73 20 74  are the values t
144d0 6f 20 72 65 74 75 72 6e 20 69 66 20 74 68 69 73  o return if this
144e0 20 6b 65 79 20 69 73 20 6c 65 73 73 20 74 68 61   key is less tha
144f0 6e 0a 2a 2a 20 6f 72 20 67 72 65 61 74 65 72 20  n.** or greater 
14500 74 68 61 6e 20 61 20 6b 65 79 20 69 6e 20 74 68  than a key in th
14510 65 20 62 74 72 65 65 2c 20 72 65 73 70 65 63 74  e btree, respect
14520 69 76 65 6c 79 2e 20 20 54 68 65 73 65 20 61 72  ively.  These ar
14530 65 20 6e 6f 72 6d 61 6c 6c 79 0a 2a 2a 20 2d 31  e normally.** -1
14540 20 61 6e 64 20 2b 31 20 72 65 73 70 65 63 74 69   and +1 respecti
14550 76 65 6c 79 2c 20 62 75 74 20 6d 69 67 68 74 20  vely, but might 
14560 62 65 20 69 6e 76 65 72 74 65 64 20 74 6f 20 2b  be inverted to +
14570 31 20 61 6e 64 20 2d 31 20 69 66 20 74 68 65 20  1 and -1 if the 
14580 62 2d 74 72 65 65 0a 2a 2a 20 69 73 20 69 6e 20  b-tree.** is in 
14590 44 45 53 43 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a  DESC order..**.*
145a0 2a 20 54 68 65 20 6b 65 79 20 63 6f 6d 70 61 72  * The key compar
145b0 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 61  ison functions a
145c0 63 74 75 61 6c 6c 79 20 72 65 74 75 72 6e 20 64  ctually return d
145d0 65 66 61 75 6c 74 5f 72 63 20 77 68 65 6e 20 74  efault_rc when t
145e0 68 65 79 20 66 69 6e 64 0a 2a 2a 20 61 6e 20 65  hey find.** an e
145f0 71 75 61 6c 73 20 63 6f 6d 70 61 72 69 73 6f 6e  quals comparison
14600 2e 20 20 64 65 66 61 75 6c 74 5f 72 63 20 63 61  .  default_rc ca
14610 6e 20 62 65 20 2d 31 2c 20 30 2c 20 6f 72 20 2b  n be -1, 0, or +
14620 31 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65  1.  If there are
14630 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 65 6e 74  .** multiple ent
14640 72 69 65 73 20 69 6e 20 74 68 65 20 62 2d 74 72  ries in the b-tr
14650 65 65 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  ee with the same
14660 20 6b 65 79 20 28 77 68 65 6e 20 6f 6e 6c 79 20   key (when only 
14670 6c 6f 6f 6b 69 6e 67 0a 2a 2a 20 61 74 20 74 68  looking.** at th
14680 65 20 66 69 72 73 74 20 70 4b 65 79 49 6e 66 6f  e first pKeyInfo
14690 2d 3e 6e 46 69 65 6c 64 73 2c 29 20 74 68 65 6e  ->nFields,) then
146a0 20 64 65 66 61 75 6c 74 5f 72 63 20 63 61 6e 20   default_rc can 
146b0 62 65 20 73 65 74 20 74 6f 20 2d 31 20 74 6f 0a  be set to -1 to.
146c0 2a 2a 20 63 61 75 73 65 20 74 68 65 20 73 65 61  ** cause the sea
146d0 72 63 68 20 74 6f 20 66 69 6e 64 20 74 68 65 20  rch to find the 
146e0 6c 61 73 74 20 6d 61 74 63 68 2c 20 6f 72 20 2b  last match, or +
146f0 31 20 74 6f 20 63 61 75 73 65 20 74 68 65 20 73  1 to cause the s
14700 65 61 72 63 68 20 74 6f 0a 2a 2a 20 66 69 6e 64  earch to.** find
14710 20 74 68 65 20 66 69 72 73 74 20 6d 61 74 63 68   the first match
14720 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6b 65 79 20  ..**.** The key 
14730 63 6f 6d 70 61 72 69 73 6f 6e 20 66 75 6e 63 74  comparison funct
14740 69 6f 6e 73 20 77 69 6c 6c 20 73 65 74 20 65 71  ions will set eq
14750 53 65 65 6e 20 74 6f 20 74 72 75 65 20 69 66 20  Seen to true if 
14760 74 68 65 79 20 65 76 65 72 0a 2a 2a 20 67 65 74  they ever.** get
14770 20 61 6e 64 20 65 71 75 61 6c 20 72 65 73 75 6c   and equal resul
14780 74 73 20 77 68 65 6e 20 63 6f 6d 70 61 72 69 6e  ts when comparin
14790 67 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  g this structure
147a0 20 74 6f 20 61 20 62 2d 74 72 65 65 20 72 65 63   to a b-tree rec
147b0 6f 72 64 2e 0a 2a 2a 20 57 68 65 6e 20 64 65 66  ord..** When def
147c0 61 75 6c 74 5f 72 63 21 3d 30 2c 20 74 68 65 20  ault_rc!=0, the 
147d0 73 65 61 72 63 68 20 6d 69 67 68 74 20 65 6e 64  search might end
147e0 20 75 70 20 6f 6e 20 74 68 65 20 72 65 63 6f 72   up on the recor
147f0 64 20 69 6d 6d 65 64 69 61 74 65 6c 79 0a 2a 2a  d immediately.**
14800 20 62 65 66 6f 72 65 20 74 68 65 20 66 69 72 73   before the firs
14810 74 20 6d 61 74 63 68 20 6f 72 20 69 6d 6d 65 64  t match or immed
14820 69 61 74 65 6c 79 20 61 66 74 65 72 20 74 68 65  iately after the
14830 20 6c 61 73 74 20 6d 61 74 63 68 2e 20 20 54 68   last match.  Th
14840 65 0a 2a 2a 20 65 71 53 65 65 6e 20 66 69 65 6c  e.** eqSeen fiel
14850 64 20 77 69 6c 6c 20 69 6e 64 69 63 61 74 65 20  d will indicate 
14860 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61  whether or not a
14870 6e 20 65 78 61 63 74 20 6d 61 74 63 68 20 65 78  n exact match ex
14880 69 73 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20 62  ists in the.** b
14890 2d 74 72 65 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  -tree..*/.struct
148a0 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
148b0 7b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65  {.  KeyInfo *pKe
148c0 79 49 6e 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61  yInfo;  /* Colla
148d0 74 69 6f 6e 20 61 6e 64 20 73 6f 72 74 2d 6f 72  tion and sort-or
148e0 64 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  der information 
148f0 2a 2f 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20  */.  Mem *aMem; 
14900 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
14910 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65  es */.  u16 nFie
14920 6c 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ld;         /* N
14930 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
14940 20 69 6e 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20   in apMem[] */. 
14950 20 69 38 20 64 65 66 61 75 6c 74 5f 72 63 3b 20   i8 default_rc; 
14960 20 20 20 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73       /* Comparis
14970 6f 6e 20 72 65 73 75 6c 74 20 69 66 20 6b 65 79  on result if key
14980 73 20 61 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20  s are equal */. 
14990 20 75 38 20 65 72 72 43 6f 64 65 3b 20 20 20 20   u8 errCode;    
149a0 20 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 64 65       /* Error de
149b0 74 65 63 74 65 64 20 62 79 20 78 52 65 63 6f 72  tected by xRecor
149c0 64 43 6f 6d 70 61 72 65 20 28 43 4f 52 52 55 50  dCompare (CORRUP
149d0 54 20 6f 72 20 4e 4f 4d 45 4d 29 20 2a 2f 0a 20  T or NOMEM) */. 
149e0 20 69 38 20 72 31 3b 20 20 20 20 20 20 20 20 20   i8 r1;         
149f0 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f       /* Value to
14a00 20 72 65 74 75 72 6e 20 69 66 20 28 6c 68 73 20   return if (lhs 
14a10 3e 20 72 68 73 29 20 2a 2f 0a 20 20 69 38 20 72  > rhs) */.  i8 r
14a20 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  2;              
14a30 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75  /* Value to retu
14a40 72 6e 20 69 66 20 28 72 68 73 20 3c 20 6c 68 73  rn if (rhs < lhs
14a50 29 20 2a 2f 0a 20 20 75 38 20 65 71 53 65 65 6e  ) */.  u8 eqSeen
14a60 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72  ;          /* Tr
14a70 75 65 20 69 66 20 61 6e 20 65 71 75 61 6c 69 74  ue if an equalit
14a80 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20 68 61 73  y comparison has
14a90 20 62 65 65 6e 20 73 65 65 6e 20 2a 2f 0a 7d 3b   been seen */.};
14aa0 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51  .../*.** Each SQ
14ab0 4c 20 69 6e 64 65 78 20 69 73 20 72 65 70 72 65  L index is repre
14ac0 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79  sented in memory
14ad0 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e   by an.** instan
14ae0 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
14af0 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  ing structure..*
14b00 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 73  *.** The columns
14b10 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68   of the table th
14b20 61 74 20 61 72 65 20 74 6f 20 62 65 20 69 6e 64  at are to be ind
14b30 65 78 65 64 20 61 72 65 20 64 65 73 63 72 69 62  exed are describ
14b40 65 64 0a 2a 2a 20 62 79 20 74 68 65 20 61 69 43  ed.** by the aiC
14b50 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f 66  olumn[] field of
14b60 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
14b70 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 73    For example, s
14b80 75 70 70 6f 73 65 0a 2a 2a 20 77 65 20 68 61 76  uppose.** we hav
14b90 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  e the following 
14ba0 74 61 62 6c 65 20 61 6e 64 20 69 6e 64 65 78 3a  table and index:
14bb0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54  .**.**     CREAT
14bc0 45 20 54 41 42 4c 45 20 45 78 31 28 63 31 20 69  E TABLE Ex1(c1 i
14bd0 6e 74 2c 20 63 32 20 69 6e 74 2c 20 63 33 20 74  nt, c2 int, c3 t
14be0 65 78 74 29 3b 0a 2a 2a 20 20 20 20 20 43 52 45  ext);.**     CRE
14bf0 41 54 45 20 49 4e 44 45 58 20 45 78 32 20 4f 4e  ATE INDEX Ex2 ON
14c00 20 45 78 31 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a   Ex1(c3,c1);.**.
14c10 2a 2a 20 49 6e 20 74 68 65 20 54 61 62 6c 65 20  ** In the Table 
14c20 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69  structure descri
14c30 62 69 6e 67 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d  bing Ex1, nCol==
14c40 33 20 62 65 63 61 75 73 65 20 74 68 65 72 65 20  3 because there 
14c50 61 72 65 0a 2a 2a 20 74 68 72 65 65 20 63 6f 6c  are.** three col
14c60 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c  umns in the tabl
14c70 65 2e 20 20 49 6e 20 74 68 65 20 49 6e 64 65 78  e.  In the Index
14c80 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72   structure descr
14c90 69 62 69 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e 43  ibing.** Ex2, nC
14ca0 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63 65 20 32  olumn==2 since 2
14cb0 20 6f 66 20 74 68 65 20 33 20 63 6f 6c 75 6d 6e   of the 3 column
14cc0 73 20 6f 66 20 45 78 31 20 61 72 65 20 69 6e 64  s of Ex1 are ind
14cd0 65 78 65 64 2e 0a 2a 2a 20 54 68 65 20 76 61 6c  exed..** The val
14ce0 75 65 20 6f 66 20 61 69 43 6f 6c 75 6d 6e 20 69  ue of aiColumn i
14cf0 73 20 7b 32 2c 20 30 7d 2e 20 20 61 69 43 6f 6c  s {2, 0}.  aiCol
14d00 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63 61 75 73  umn[0]==2 becaus
14d10 65 20 74 68 65 0a 2a 2a 20 66 69 72 73 74 20 63  e the.** first c
14d20 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65  olumn to be inde
14d30 78 65 64 20 28 63 33 29 20 68 61 73 20 61 6e 20  xed (c3) has an 
14d40 69 6e 64 65 78 20 6f 66 20 32 20 69 6e 20 45 78  index of 2 in Ex
14d50 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65  1.aCol[]..** The
14d60 20 73 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74   second column t
14d70 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28 63 31  o be indexed (c1
14d80 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f  ) has an index o
14d90 66 20 30 20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43  f 0 in.** Ex1.aC
14da0 6f 6c 5b 5d 2c 20 68 65 6e 63 65 20 45 78 32 2e  ol[], hence Ex2.
14db0 61 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a  aiColumn[1]==0..
14dc0 2a 2a 0a 2a 2a 20 54 68 65 20 49 6e 64 65 78 2e  **.** The Index.
14dd0 6f 6e 45 72 72 6f 72 20 66 69 65 6c 64 20 64 65  onError field de
14de0 74 65 72 6d 69 6e 65 73 20 77 68 65 74 68 65 72  termines whether
14df0 20 6f 72 20 6e 6f 74 20 74 68 65 20 69 6e 64 65   or not the inde
14e00 78 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d  xed columns.** m
14e10 75 73 74 20 62 65 20 75 6e 69 71 75 65 20 61 6e  ust be unique an
14e20 64 20 77 68 61 74 20 74 6f 20 64 6f 20 69 66 20  d what to do if 
14e30 74 68 65 79 20 61 72 65 20 6e 6f 74 2e 20 20 57  they are not.  W
14e40 68 65 6e 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f  hen Index.onErro
14e50 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74  r=OE_None,.** it
14e60 20 6d 65 61 6e 73 20 74 68 69 73 20 69 73 20 6e   means this is n
14e70 6f 74 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65  ot a unique inde
14e80 78 2e 20 20 4f 74 68 65 72 77 69 73 65 20 69 74  x.  Otherwise it
14e90 20 69 73 20 61 20 75 6e 69 71 75 65 20 69 6e 64   is a unique ind
14ea0 65 78 0a 2a 2a 20 61 6e 64 20 74 68 65 20 76 61  ex.** and the va
14eb0 6c 75 65 20 6f 66 20 49 6e 64 65 78 2e 6f 6e 45  lue of Index.onE
14ec0 72 72 6f 72 20 69 6e 64 69 63 61 74 65 20 74 68  rror indicate th
14ed0 65 20 77 68 69 63 68 20 63 6f 6e 66 6c 69 63 74  e which conflict
14ee0 20 72 65 73 6f 6c 75 74 69 6f 6e 0a 2a 2a 20 61   resolution.** a
14ef0 6c 67 6f 72 69 74 68 6d 20 74 6f 20 65 6d 70 6c  lgorithm to empl
14f00 6f 79 20 77 68 65 6e 65 76 65 72 20 61 6e 20 61  oy whenever an a
14f10 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74  ttempt is made t
14f20 6f 20 69 6e 73 65 72 74 20 61 20 6e 6f 6e 2d 75  o insert a non-u
14f30 6e 69 71 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74  nique.** element
14f40 2e 0a 2a 2a 0a 2a 2a 20 57 68 69 6c 65 20 70 61  ..**.** While pa
14f50 72 73 69 6e 67 20 61 20 43 52 45 41 54 45 20 54  rsing a CREATE T
14f60 41 42 4c 45 20 6f 72 20 43 52 45 41 54 45 20 49  ABLE or CREATE I
14f70 4e 44 45 58 20 73 74 61 74 65 6d 65 6e 74 20 69  NDEX statement i
14f80 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65  n order to.** ge
14f90 6e 65 72 61 74 65 20 56 44 42 45 20 63 6f 64 65  nerate VDBE code
14fa0 20 28 61 73 20 6f 70 70 6f 73 65 64 20 74 6f 20   (as opposed to 
14fb0 70 61 72 73 69 6e 67 20 6f 6e 65 20 72 65 61 64  parsing one read
14fc0 20 66 72 6f 6d 20 61 6e 20 73 71 6c 69 74 65 5f   from an sqlite_
14fd0 6d 61 73 74 65 72 0a 2a 2a 20 74 61 62 6c 65 20  master.** table 
14fe0 61 73 20 70 61 72 74 20 6f 66 20 70 61 72 73 69  as part of parsi
14ff0 6e 67 20 61 6e 20 65 78 69 73 74 69 6e 67 20 64  ng an existing d
15000 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 29 2c  atabase schema),
15010 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 73 74 61   transient insta
15020 6e 63 65 73 0a 2a 2a 20 6f 66 20 74 68 69 73 20  nces.** of this 
15030 73 74 72 75 63 74 75 72 65 20 6d 61 79 20 62 65  structure may be
15040 20 63 72 65 61 74 65 64 2e 20 49 6e 20 74 68 69   created. In thi
15050 73 20 63 61 73 65 20 74 68 65 20 49 6e 64 65 78  s case the Index
15060 2e 74 6e 75 6d 20 76 61 72 69 61 62 6c 65 20 69  .tnum variable i
15070 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f  s.** used to sto
15080 72 65 20 74 68 65 20 61 64 64 72 65 73 73 20 6f  re the address o
15090 66 20 61 20 56 44 42 45 20 69 6e 73 74 72 75 63  f a VDBE instruc
150a0 74 69 6f 6e 2c 20 6e 6f 74 20 61 20 64 61 74 61  tion, not a data
150b0 62 61 73 65 20 70 61 67 65 0a 2a 2a 20 6e 75 6d  base page.** num
150c0 62 65 72 20 28 69 74 20 63 61 6e 6e 6f 74 20 2d  ber (it cannot -
150d0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 70 61   the database pa
150e0 67 65 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 63 61  ge is not alloca
150f0 74 65 64 20 75 6e 74 69 6c 20 74 68 65 20 56 44  ted until the VD
15100 42 45 0a 2a 2a 20 70 72 6f 67 72 61 6d 20 69 73  BE.** program is
15110 20 65 78 65 63 75 74 65 64 29 2e 20 53 65 65 20   executed). See 
15120 63 6f 6e 76 65 72 74 54 6f 57 69 74 68 6f 75 74  convertToWithout
15130 52 6f 77 69 64 54 61 62 6c 65 28 29 20 66 6f 72  RowidTable() for
15140 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 73 74 72   details..*/.str
15150 75 63 74 20 49 6e 64 65 78 20 7b 0a 20 20 63 68  uct Index {.  ch
15160 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
15170 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
15180 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a  f this index */.
15190 20 20 69 31 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b    i16 *aiColumn;
151a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68             /* Wh
151b0 69 63 68 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20  ich columns are 
151c0 75 73 65 64 20 62 79 20 74 68 69 73 20 69 6e 64  used by this ind
151d0 65 78 2e 20 20 31 73 74 20 69 73 20 30 20 2a 2f  ex.  1st is 0 */
151e0 0a 20 20 4c 6f 67 45 73 74 20 2a 61 69 52 6f 77  .  LogEst *aiRow
151f0 4c 6f 67 45 73 74 3b 20 20 20 20 20 2f 2a 20 46  LogEst;     /* F
15200 72 6f 6d 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74  rom ANALYZE: Est
15210 2e 20 72 6f 77 73 20 73 65 6c 65 63 74 65 64 20  . rows selected 
15220 62 79 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a  by each column *
15230 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 6c  /.  Table *pTabl
15240 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
15250 54 68 65 20 53 51 4c 20 74 61 62 6c 65 20 62 65  The SQL table be
15260 69 6e 67 20 69 6e 64 65 78 65 64 20 2a 2f 0a 20  ing indexed */. 
15270 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20   char *zColAff; 
15280 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 72            /* Str
15290 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65  ing defining the
152a0 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63   affinity of eac
152b0 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e  h column */.  In
152c0 64 65 78 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  dex *pNext;     
152d0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65         /* The ne
152e0 78 74 20 69 6e 64 65 78 20 61 73 73 6f 63 69 61  xt index associa
152f0 74 65 64 20 77 69 74 68 20 74 68 65 20 73 61 6d  ted with the sam
15300 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 53 63 68  e table */.  Sch
15310 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
15320 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20        /* Schema 
15330 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20  containing this 
15340 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61  index */.  u8 *a
15350 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20  SortOrder;      
15360 20 20 20 20 2f 2a 20 66 6f 72 20 65 61 63 68 20      /* for each 
15370 63 6f 6c 75 6d 6e 3a 20 54 72 75 65 3d 3d 44 45  column: True==DE
15380 53 43 2c 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a  SC, False==ASC *
15390 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
153a0 2a 61 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20  *azColl;     /* 
153b0 41 72 72 61 79 20 6f 66 20 63 6f 6c 6c 61 74 69  Array of collati
153c0 6f 6e 20 73 65 71 75 65 6e 63 65 20 6e 61 6d 65  on sequence name
153d0 73 20 66 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20  s for index */. 
153e0 20 45 78 70 72 20 2a 70 50 61 72 74 49 64 78 57   Expr *pPartIdxW
153f0 68 65 72 65 3b 20 20 20 20 20 2f 2a 20 57 48 45  here;     /* WHE
15400 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 70 61  RE clause for pa
15410 72 74 69 61 6c 20 69 6e 64 69 63 65 73 20 2a 2f  rtial indices */
15420 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 61 43 6f  .  ExprList *aCo
15430 6c 45 78 70 72 3b 20 20 20 20 20 20 2f 2a 20 43  lExpr;      /* C
15440 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e  olumn expression
15450 73 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b  s */.  int tnum;
15460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15470 2f 2a 20 44 42 20 50 61 67 65 20 63 6f 6e 74 61  /* DB Page conta
15480 69 6e 69 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68  ining root of th
15490 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f  is index */.  Lo
154a0 67 45 73 74 20 73 7a 49 64 78 52 6f 77 3b 20 20  gEst szIdxRow;  
154b0 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61         /* Estima
154c0 74 65 64 20 61 76 65 72 61 67 65 20 72 6f 77 20  ted average row 
154d0 73 69 7a 65 20 69 6e 20 62 79 74 65 73 20 2a 2f  size in bytes */
154e0 0a 20 20 75 31 36 20 6e 4b 65 79 43 6f 6c 3b 20  .  u16 nKeyCol; 
154f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
15500 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
15510 20 66 6f 72 6d 69 6e 67 20 74 68 65 20 6b 65 79   forming the key
15520 20 2a 2f 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d   */.  u16 nColum
15530 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  n;             /
15540 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
15550 6d 6e 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68  mns stored in th
15560 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20  e index */.  u8 
15570 6f 6e 45 72 72 6f 72 3b 20 20 20 20 20 20 20 20  onError;        
15580 20 20 20 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72        /* OE_Abor
15590 74 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f 45  t, OE_Ignore, OE
155a0 5f 52 65 70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f  _Replace, or OE_
155b0 4e 6f 6e 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  None */.  unsign
155c0 65 64 20 69 64 78 54 79 70 65 3a 32 3b 20 20 20  ed idxType:2;   
155d0 20 20 20 2f 2a 20 31 3d 3d 55 4e 49 51 55 45 2c     /* 1==UNIQUE,
155e0 20 32 3d 3d 50 52 49 4d 41 52 59 20 4b 45 59 2c   2==PRIMARY KEY,
155f0 20 30 3d 3d 43 52 45 41 54 45 20 49 4e 44 45 58   0==CREATE INDEX
15600 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 62   */.  unsigned b
15610 55 6e 6f 72 64 65 72 65 64 3a 31 3b 20 20 20 2f  Unordered:1;   /
15620 2a 20 55 73 65 20 74 68 69 73 20 69 6e 64 65 78  * Use this index
15630 20 66 6f 72 20 3d 3d 20 6f 72 20 49 4e 20 71 75   for == or IN qu
15640 65 72 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20  eries only */.  
15650 75 6e 73 69 67 6e 65 64 20 75 6e 69 71 4e 6f 74  unsigned uniqNot
15660 4e 75 6c 6c 3a 31 3b 20 20 2f 2a 20 54 72 75 65  Null:1;  /* True
15670 20 69 66 20 55 4e 49 51 55 45 20 61 6e 64 20 4e   if UNIQUE and N
15680 4f 54 20 4e 55 4c 4c 20 66 6f 72 20 61 6c 6c 20  OT NULL for all 
15690 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73  columns */.  uns
156a0 69 67 6e 65 64 20 69 73 52 65 73 69 7a 65 64 3a  igned isResized:
156b0 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  1;    /* True if
156c0 20 72 65 73 69 7a 65 49 6e 64 65 78 4f 62 6a 65   resizeIndexObje
156d0 63 74 28 29 20 68 61 73 20 62 65 65 6e 20 63 61  ct() has been ca
156e0 6c 6c 65 64 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  lled */.  unsign
156f0 65 64 20 69 73 43 6f 76 65 72 69 6e 67 3a 31 3b  ed isCovering:1;
15700 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
15710 69 73 20 69 73 20 61 20 63 6f 76 65 72 69 6e 67  is is a covering
15720 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 6e 73 69   index */.  unsi
15730 67 6e 65 64 20 6e 6f 53 6b 69 70 53 63 61 6e 3a  gned noSkipScan:
15740 31 3b 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 74  1;   /* Do not t
15750 72 79 20 74 6f 20 75 73 65 20 73 6b 69 70 2d 73  ry to use skip-s
15760 63 61 6e 20 69 66 20 74 72 75 65 20 2a 2f 0a 20  can if true */. 
15770 20 75 6e 73 69 67 6e 65 64 20 68 61 73 53 74 61   unsigned hasSta
15780 74 31 3a 31 3b 20 20 20 20 20 2f 2a 20 61 69 52  t1:1;     /* aiR
15790 6f 77 4c 6f 67 45 73 74 20 76 61 6c 75 65 73 20  owLogEst values 
157a0 63 6f 6d 65 20 66 72 6f 6d 20 73 71 6c 69 74 65  come from sqlite
157b0 5f 73 74 61 74 31 20 2a 2f 0a 23 69 66 64 65 66  _stat1 */.#ifdef
157c0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
157d0 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 20 20  TAT3_OR_STAT4.  
157e0 69 6e 74 20 6e 53 61 6d 70 6c 65 3b 20 20 20 20  int nSample;    
157f0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
15800 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69  er of elements i
15810 6e 20 61 53 61 6d 70 6c 65 5b 5d 20 2a 2f 0a 20  n aSample[] */. 
15820 20 69 6e 74 20 6e 53 61 6d 70 6c 65 43 6f 6c 3b   int nSampleCol;
15830 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
15840 65 20 6f 66 20 49 6e 64 65 78 53 61 6d 70 6c 65  e of IndexSample
15850 2e 61 6e 45 71 5b 5d 20 61 6e 64 20 73 6f 20 6f  .anEq[] and so o
15860 6e 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a  n */.  tRowcnt *
15870 61 41 76 67 45 71 3b 20 20 20 20 20 20 20 20 20  aAvgEq;         
15880 2f 2a 20 41 76 65 72 61 67 65 20 6e 45 71 20 76  /* Average nEq v
15890 61 6c 75 65 73 20 66 6f 72 20 6b 65 79 73 20 6e  alues for keys n
158a0 6f 74 20 69 6e 20 61 53 61 6d 70 6c 65 20 2a 2f  ot in aSample */
158b0 0a 20 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 2a  .  IndexSample *
158c0 61 53 61 6d 70 6c 65 3b 20 20 20 20 2f 2a 20 53  aSample;    /* S
158d0 61 6d 70 6c 65 73 20 6f 66 20 74 68 65 20 6c 65  amples of the le
158e0 66 74 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f 0a 20  ft-most key */. 
158f0 20 74 52 6f 77 63 6e 74 20 2a 61 69 52 6f 77 45   tRowcnt *aiRowE
15900 73 74 3b 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e  st;       /* Non
15910 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20 73 74 61  -logarithmic sta
15920 74 31 20 64 61 74 61 20 66 6f 72 20 74 68 69 73  t1 data for this
15930 20 69 6e 64 65 78 20 2a 2f 0a 20 20 74 52 6f 77   index */.  tRow
15940 63 6e 74 20 6e 52 6f 77 45 73 74 30 3b 20 20 20  cnt nRowEst0;   
15950 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61       /* Non-loga
15960 72 69 74 68 6d 69 63 20 6e 75 6d 62 65 72 20 6f  rithmic number o
15970 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 69 6e  f rows in the in
15980 64 65 78 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b  dex */.#endif.};
15990 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
159a0 76 61 6c 75 65 73 20 66 6f 72 20 49 6e 64 65 78  values for Index
159b0 2e 69 64 78 54 79 70 65 0a 2a 2f 0a 23 64 65 66  .idxType.*/.#def
159c0 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59  ine SQLITE_IDXTY
159d0 50 45 5f 41 50 50 44 45 46 20 20 20 20 20 20 30  PE_APPDEF      0
159e0 20 20 20 2f 2a 20 43 72 65 61 74 65 64 20 75 73     /* Created us
159f0 69 6e 67 20 43 52 45 41 54 45 20 49 4e 44 45 58  ing CREATE INDEX
15a00 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
15a10 54 45 5f 49 44 58 54 59 50 45 5f 55 4e 49 51 55  TE_IDXTYPE_UNIQU
15a20 45 20 20 20 20 20 20 31 20 20 20 2f 2a 20 49 6d  E      1   /* Im
15a30 70 6c 65 6d 65 6e 74 73 20 61 20 55 4e 49 51 55  plements a UNIQU
15a40 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a  E constraint */.
15a50 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
15a60 44 58 54 59 50 45 5f 50 52 49 4d 41 52 59 4b 45  DXTYPE_PRIMARYKE
15a70 59 20 20 32 20 20 20 2f 2a 20 49 73 20 74 68 65  Y  2   /* Is the
15a80 20 50 52 49 4d 41 52 59 20 4b 45 59 20 66 6f 72   PRIMARY KEY for
15a90 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f   the table */../
15aa0 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66  * Return true if
15ab0 20 69 6e 64 65 78 20 58 20 69 73 20 61 20 50 52   index X is a PR
15ac0 49 4d 41 52 59 20 4b 45 59 20 69 6e 64 65 78 20  IMARY KEY index 
15ad0 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 72 69  */.#define IsPri
15ae0 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 58 29 20  maryKeyIndex(X) 
15af0 20 28 28 58 29 2d 3e 69 64 78 54 79 70 65 3d 3d   ((X)->idxType==
15b00 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 50  SQLITE_IDXTYPE_P
15b10 52 49 4d 41 52 59 4b 45 59 29 0a 0a 2f 2a 20 52  RIMARYKEY)../* R
15b20 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e  eturn true if in
15b30 64 65 78 20 58 20 69 73 20 61 20 55 4e 49 51 55  dex X is a UNIQU
15b40 45 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  E index */.#defi
15b50 6e 65 20 49 73 55 6e 69 71 75 65 49 6e 64 65 78  ne IsUniqueIndex
15b60 28 58 29 20 20 20 20 20 20 28 28 58 29 2d 3e 6f  (X)      ((X)->o
15b70 6e 45 72 72 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 29  nError!=OE_None)
15b80 0a 0a 2f 2a 20 54 68 65 20 49 6e 64 65 78 2e 61  ../* The Index.a
15b90 69 43 6f 6c 75 6d 6e 5b 5d 20 76 61 6c 75 65 73  iColumn[] values
15ba0 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 70 6f   are normally po
15bb0 73 69 74 69 76 65 20 69 6e 74 65 67 65 72 2e 20  sitive integer. 
15bc0 20 42 75 74 0a 2a 2a 20 74 68 65 72 65 20 61 72   But.** there ar
15bd0 65 20 73 6f 6d 65 20 6e 65 67 61 74 69 76 65 20  e some negative 
15be0 76 61 6c 75 65 73 20 74 68 61 74 20 68 61 76 65  values that have
15bf0 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67   special meaning
15c00 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f  :.*/.#define XN_
15c10 52 4f 57 49 44 20 20 20 20 20 28 2d 31 29 20 20  ROWID     (-1)  
15c20 20 20 20 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f     /* Indexed co
15c30 6c 75 6d 6e 20 69 73 20 74 68 65 20 72 6f 77 69  lumn is the rowi
15c40 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f  d */.#define XN_
15c50 45 58 50 52 20 20 20 20 20 20 28 2d 32 29 20 20  EXPR      (-2)  
15c60 20 20 20 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f     /* Indexed co
15c70 6c 75 6d 6e 20 69 73 20 61 6e 20 65 78 70 72 65  lumn is an expre
15c80 73 73 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  ssion */../*.** 
15c90 45 61 63 68 20 73 61 6d 70 6c 65 20 73 74 6f 72  Each sample stor
15ca0 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  ed in the sqlite
15cb0 5f 73 74 61 74 33 20 74 61 62 6c 65 20 69 73 20  _stat3 table is 
15cc0 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d  represented in m
15cd0 65 6d 6f 72 79 0a 2a 2a 20 75 73 69 6e 67 20 61  emory.** using a
15ce0 20 73 74 72 75 63 74 75 72 65 20 6f 66 20 74 68   structure of th
15cf0 69 73 20 74 79 70 65 2e 20 20 53 65 65 20 64 6f  is type.  See do
15d00 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 74 20 74  cumentation at t
15d10 68 65 20 74 6f 70 20 6f 66 20 74 68 65 0a 2a 2a  he top of the.**
15d20 20 61 6e 61 6c 79 7a 65 2e 63 20 73 6f 75 72 63   analyze.c sourc
15d30 65 20 66 69 6c 65 20 66 6f 72 20 61 64 64 69 74  e file for addit
15d40 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
15d50 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64  n..*/.struct Ind
15d60 65 78 53 61 6d 70 6c 65 20 7b 0a 20 20 76 6f 69  exSample {.  voi
15d70 64 20 2a 70 3b 20 20 20 20 20 20 20 20 20 20 2f  d *p;          /
15d80 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 73 61 6d  * Pointer to sam
15d90 70 6c 65 64 20 72 65 63 6f 72 64 20 2a 2f 0a 20  pled record */. 
15da0 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20   int n;         
15db0 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 72 65     /* Size of re
15dc0 63 6f 72 64 20 69 6e 20 62 79 74 65 73 20 2a 2f  cord in bytes */
15dd0 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 45 71  .  tRowcnt *anEq
15de0 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d  ;    /* Est. num
15df0 62 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72  ber of rows wher
15e00 65 20 74 68 65 20 6b 65 79 20 65 71 75 61 6c 73  e the key equals
15e10 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a   this sample */.
15e20 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b    tRowcnt *anLt;
15e30 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62      /* Est. numb
15e40 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65  er of rows where
15e50 20 6b 65 79 20 69 73 20 6c 65 73 73 20 74 68 61   key is less tha
15e60 6e 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f  n this sample */
15e70 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 44 4c  .  tRowcnt *anDL
15e80 74 3b 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d  t;   /* Est. num
15e90 62 65 72 20 6f 66 20 64 69 73 74 69 6e 63 74 20  ber of distinct 
15ea0 6b 65 79 73 20 6c 65 73 73 20 74 68 61 6e 20 74  keys less than t
15eb0 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b  his sample */.};
15ec0 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b  ../*.** Each tok
15ed0 65 6e 20 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66  en coming out of
15ee0 20 74 68 65 20 6c 65 78 65 72 20 69 73 20 61 6e   the lexer is an
15ef0 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20   instance of.** 
15f00 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20  this structure. 
15f10 20 54 6f 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f   Tokens are also
15f20 20 75 73 65 64 20 61 73 20 70 61 72 74 20 6f 66   used as part of
15f30 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a   an expression..
15f40 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 69 66 20 54 6f  **.** Note if To
15f50 6b 65 6e 2e 7a 3d 3d 30 20 74 68 65 6e 20 54 6f  ken.z==0 then To
15f60 6b 65 6e 2e 64 79 6e 20 61 6e 64 20 54 6f 6b 65  ken.dyn and Toke
15f70 6e 2e 6e 20 61 72 65 20 75 6e 64 65 66 69 6e 65  n.n are undefine
15f80 64 20 61 6e 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e  d and.** may con
15f90 74 61 69 6e 20 72 61 6e 64 6f 6d 20 76 61 6c 75  tain random valu
15fa0 65 73 2e 20 20 44 6f 20 6e 6f 74 20 6d 61 6b 65  es.  Do not make
15fb0 20 61 6e 79 20 61 73 73 75 6d 70 74 69 6f 6e 73   any assumptions
15fc0 20 61 62 6f 75 74 20 54 6f 6b 65 6e 2e 64 79 6e   about Token.dyn
15fd0 0a 2a 2a 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20  .** and Token.n 
15fe0 77 68 65 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e  when Token.z==0.
15ff0 0a 2a 2f 0a 73 74 72 75 63 74 20 54 6f 6b 65 6e  .*/.struct Token
16000 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20   {.  const char 
16010 2a 7a 3b 20 20 20 20 20 2f 2a 20 54 65 78 74 20  *z;     /* Text 
16020 6f 66 20 74 68 65 20 74 6f 6b 65 6e 2e 20 20 4e  of the token.  N
16030 6f 74 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61 74  ot NULL-terminat
16040 65 64 21 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  ed! */.  unsigne
16050 64 20 69 6e 74 20 6e 3b 20 20 20 20 2f 2a 20 4e  d int n;    /* N
16060 75 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63 74  umber of charact
16070 65 72 73 20 69 6e 20 74 68 69 73 20 74 6f 6b 65  ers in this toke
16080 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  n */.};../*.** A
16090 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
160a0 69 73 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e  is structure con
160b0 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f  tains informatio
160c0 6e 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65  n needed to gene
160d0 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72  rate.** code for
160e0 20 61 20 53 45 4c 45 43 54 20 74 68 61 74 20 63   a SELECT that c
160f0 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61 74  ontains aggregat
16100 65 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a  e functions..**.
16110 2a 2a 20 49 66 20 45 78 70 72 2e 6f 70 3d 3d 54  ** If Expr.op==T
16120 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20  K_AGG_COLUMN or 
16130 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20  TK_AGG_FUNCTION 
16140 74 68 65 6e 20 45 78 70 72 2e 70 41 67 67 49 6e  then Expr.pAggIn
16150 66 6f 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74  fo is a.** point
16160 65 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63  er to this struc
16170 74 75 72 65 2e 20 20 54 68 65 20 45 78 70 72 2e  ture.  The Expr.
16180 69 43 6f 6c 75 6d 6e 20 66 69 65 6c 64 20 69 73  iColumn field is
16190 20 74 68 65 20 69 6e 64 65 78 20 69 6e 0a 2a 2a   the index in.**
161a0 20 41 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20   AggInfo.aCol[] 
161b0 6f 72 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63  or AggInfo.aFunc
161c0 5b 5d 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f  [] of informatio
161d0 6e 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65  n needed to gene
161e0 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72  rate.** code for
161f0 20 74 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a   that node..**.*
16200 2a 20 41 67 67 49 6e 66 6f 2e 70 47 72 6f 75 70  * AggInfo.pGroup
16210 42 79 20 61 6e 64 20 41 67 67 49 6e 66 6f 2e 61  By and AggInfo.a
16220 46 75 6e 63 2e 70 45 78 70 72 20 70 6f 69 6e 74  Func.pExpr point
16230 20 74 6f 20 66 69 65 6c 64 73 20 77 69 74 68 69   to fields withi
16240 6e 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61  n the.** origina
16250 6c 20 53 65 6c 65 63 74 20 73 74 72 75 63 74 75  l Select structu
16260 72 65 20 74 68 61 74 20 64 65 73 63 72 69 62 65  re that describe
16270 73 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  s the SELECT sta
16280 74 65 6d 65 6e 74 2e 20 20 54 68 65 73 65 0a 2a  tement.  These.*
16290 2a 20 66 69 65 6c 64 73 20 64 6f 20 6e 6f 74 20  * fields do not 
162a0 6e 65 65 64 20 74 6f 20 62 65 20 66 72 65 65 64  need to be freed
162b0 20 77 68 65 6e 20 64 65 61 6c 6c 6f 63 61 74 69   when deallocati
162c0 6e 67 20 74 68 65 20 41 67 67 49 6e 66 6f 20 73  ng the AggInfo s
162d0 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72  tructure..*/.str
162e0 75 63 74 20 41 67 67 49 6e 66 6f 20 7b 0a 20 20  uct AggInfo {.  
162f0 75 38 20 64 69 72 65 63 74 4d 6f 64 65 3b 20 20  u8 directMode;  
16300 20 20 20 20 20 20 20 20 2f 2a 20 44 69 72 65 63          /* Direc
16310 74 20 72 65 6e 64 65 72 69 6e 67 20 6d 6f 64 65  t rendering mode
16320 20 6d 65 61 6e 73 20 74 61 6b 65 20 64 61 74 61   means take data
16330 20 64 69 72 65 63 74 6c 79 0a 20 20 20 20 20 20   directly.      
16340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16350 20 20 20 20 2a 2a 20 66 72 6f 6d 20 73 6f 75 72      ** from sour
16360 63 65 20 74 61 62 6c 65 73 20 72 61 74 68 65 72  ce tables rather
16370 20 74 68 61 6e 20 66 72 6f 6d 20 61 63 63 75 6d   than from accum
16380 75 6c 61 74 6f 72 73 20 2a 2f 0a 20 20 75 38 20  ulators */.  u8 
16390 75 73 65 53 6f 72 74 69 6e 67 49 64 78 3b 20 20  useSortingIdx;  
163a0 20 20 20 20 20 2f 2a 20 49 6e 20 64 69 72 65 63       /* In direc
163b0 74 20 6d 6f 64 65 2c 20 72 65 66 65 72 65 6e 63  t mode, referenc
163c0 65 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e  e the sorting in
163d0 64 65 78 20 72 61 74 68 65 72 0a 20 20 20 20 20  dex rather.     
163e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
163f0 20 20 20 20 20 2a 2a 20 74 68 61 6e 20 74 68 65       ** than the
16400 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f   source table */
16410 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64  .  int sortingId
16420 78 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75  x;         /* Cu
16430 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74  rsor number of t
16440 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78  he sorting index
16450 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e   */.  int sortin
16460 67 49 64 78 50 54 61 62 3b 20 20 20 20 20 2f 2a  gIdxPTab;     /*
16470 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   Cursor number o
16480 66 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 2a  f pseudo-table *
16490 2f 0a 20 20 69 6e 74 20 6e 53 6f 72 74 69 6e 67  /.  int nSorting
164a0 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e  Column;     /* N
164b0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
164c0 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20   in the sorting 
164d0 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 6d  index */.  int m
164e0 6e 52 65 67 2c 20 6d 78 52 65 67 3b 20 20 20 20  nReg, mxReg;    
164f0 20 20 20 2f 2a 20 52 61 6e 67 65 20 6f 66 20 72     /* Range of r
16500 65 67 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74  egisters allocat
16510 65 64 20 66 6f 72 20 61 43 6f 6c 20 61 6e 64 20  ed for aCol and 
16520 61 46 75 6e 63 20 2a 2f 0a 20 20 45 78 70 72 4c  aFunc */.  ExprL
16530 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20  ist *pGroupBy;  
16540 20 20 20 2f 2a 20 54 68 65 20 67 72 6f 75 70 20     /* The group 
16550 62 79 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 73  by clause */.  s
16560 74 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 63 6f  truct AggInfo_co
16570 6c 20 7b 20 20 20 20 2f 2a 20 46 6f 72 20 65 61  l {    /* For ea
16580 63 68 20 63 6f 6c 75 6d 6e 20 75 73 65 64 20 69  ch column used i
16590 6e 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20  n source tables 
165a0 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54  */.    Table *pT
165b0 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ab;             
165c0 2f 2a 20 53 6f 75 72 63 65 20 74 61 62 6c 65 20  /* Source table 
165d0 2a 2f 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c  */.    int iTabl
165e0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
165f0 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72  /* Cursor number
16600 20 6f 66 20 74 68 65 20 73 6f 75 72 63 65 20 74   of the source t
16610 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  able */.    int 
16620 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  iColumn;        
16630 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e       /* Column n
16640 75 6d 62 65 72 20 77 69 74 68 69 6e 20 74 68 65  umber within the
16650 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f   source table */
16660 0a 20 20 20 20 69 6e 74 20 69 53 6f 72 74 65 72  .    int iSorter
16670 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 2f 2a  Column;       /*
16680 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69   Column number i
16690 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e  n the sorting in
166a0 64 65 78 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  dex */.    int i
166b0 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
166c0 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f      /* Memory lo
166d0 63 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73  cation that acts
166e0 20 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20   as accumulator 
166f0 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78  */.    Expr *pEx
16700 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pr;             
16710 2f 2a 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20  /* The original 
16720 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20  expression */.  
16730 7d 20 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e  } *aCol;.  int n
16740 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
16750 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
16760 75 73 65 64 20 65 6e 74 72 69 65 73 20 69 6e 20  used entries in 
16770 61 43 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  aCol[] */.  int 
16780 6e 41 63 63 75 6d 75 6c 61 74 6f 72 3b 20 20 20  nAccumulator;   
16790 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
167a0 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 73 68   columns that sh
167b0 6f 77 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ow through to th
167c0 65 20 6f 75 74 70 75 74 2e 0a 20 20 20 20 20 20  e output..      
167d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167e0 20 20 20 20 2a 2a 20 41 64 64 69 74 69 6f 6e 61      ** Additiona
167f0 6c 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73  l columns are us
16800 65 64 20 6f 6e 6c 79 20 61 73 20 70 61 72 61 6d  ed only as param
16810 65 74 65 72 73 20 74 6f 0a 20 20 20 20 20 20 20  eters to.       
16820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16830 20 20 20 2a 2a 20 61 67 67 72 65 67 61 74 65 20     ** aggregate 
16840 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73  functions */.  s
16850 74 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 66 75  truct AggInfo_fu
16860 6e 63 20 7b 20 20 20 2f 2a 20 46 6f 72 20 65 61  nc {   /* For ea
16870 63 68 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  ch aggregate fun
16880 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 45 78 70  ction */.    Exp
16890 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20  r *pExpr;       
168a0 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73        /* Express
168b0 69 6f 6e 20 65 6e 63 6f 64 69 6e 67 20 74 68 65  ion encoding the
168c0 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20   function */.   
168d0 20 46 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b   FuncDef *pFunc;
168e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
168f0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
16900 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ion implementati
16910 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d  on */.    int iM
16920 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
16930 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63     /* Memory loc
16940 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20  ation that acts 
16950 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a  as accumulator *
16960 2f 0a 20 20 20 20 69 6e 74 20 69 44 69 73 74 69  /.    int iDisti
16970 6e 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  nct;           /
16980 2a 20 45 70 68 65 6d 65 72 61 6c 20 74 61 62 6c  * Ephemeral tabl
16990 65 20 75 73 65 64 20 74 6f 20 65 6e 66 6f 72 63  e used to enforc
169a0 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 20 20  e DISTINCT */.  
169b0 7d 20 2a 61 46 75 6e 63 3b 0a 20 20 69 6e 74 20  } *aFunc;.  int 
169c0 6e 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20  nFunc;          
169d0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
169e0 20 65 6e 74 72 69 65 73 20 69 6e 20 61 46 75 6e   entries in aFun
169f0 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  c[] */.};../*.**
16a00 20 54 68 65 20 64 61 74 61 74 79 70 65 20 79 6e   The datatype yn
16a10 56 61 72 20 69 73 20 61 20 73 69 67 6e 65 64 20  Var is a signed 
16a20 69 6e 74 65 67 65 72 2c 20 65 69 74 68 65 72 20  integer, either 
16a30 31 36 2d 62 69 74 20 6f 72 20 33 32 2d 62 69 74  16-bit or 32-bit
16a40 2e 0a 2a 2a 20 55 73 75 61 6c 6c 79 20 69 74 20  ..** Usually it 
16a50 69 73 20 31 36 2d 62 69 74 73 2e 20 20 42 75 74  is 16-bits.  But
16a60 20 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56   if SQLITE_MAX_V
16a70 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 20 69  ARIABLE_NUMBER i
16a80 73 20 67 72 65 61 74 65 72 0a 2a 2a 20 74 68 61  s greater.** tha
16a90 6e 20 33 32 37 36 37 20 77 65 20 68 61 76 65 20  n 32767 we have 
16aa0 74 6f 20 6d 61 6b 65 20 69 74 20 33 32 2d 62 69  to make it 32-bi
16ab0 74 2e 20 20 31 36 2d 62 69 74 20 69 73 20 70 72  t.  16-bit is pr
16ac0 65 66 65 72 72 65 64 20 62 65 63 61 75 73 65 0a  eferred because.
16ad0 2a 2a 20 69 74 20 75 73 65 73 20 6c 65 73 73 20  ** it uses less 
16ae0 6d 65 6d 6f 72 79 20 69 6e 20 74 68 65 20 45 78  memory in the Ex
16af0 70 72 20 6f 62 6a 65 63 74 2c 20 77 68 69 63 68  pr object, which
16b00 20 69 73 20 61 20 62 69 67 20 6d 65 6d 6f 72 79   is a big memory
16b10 20 75 73 65 72 0a 2a 2a 20 69 6e 20 73 79 73 74   user.** in syst
16b20 65 6d 73 20 77 69 74 68 20 6c 6f 74 73 20 6f 66  ems with lots of
16b30 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
16b40 65 6e 74 73 2e 20 20 41 6e 64 20 66 65 77 20 61  ents.  And few a
16b50 70 70 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e  pplications.** n
16b60 65 65 64 20 6d 6f 72 65 20 74 68 61 6e 20 61 62  eed more than ab
16b70 6f 75 74 20 31 30 20 6f 72 20 32 30 20 76 61 72  out 10 or 20 var
16b80 69 61 62 6c 65 73 2e 20 20 42 75 74 20 73 6f 6d  iables.  But som
16b90 65 20 65 78 74 72 65 6d 65 20 75 73 65 72 73 20  e extreme users 
16ba0 77 61 6e 74 0a 2a 2a 20 74 6f 20 68 61 76 65 20  want.** to have 
16bb0 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
16bc0 6e 74 73 20 77 69 74 68 20 6f 76 65 72 20 33 32  nts with over 32
16bd0 37 36 37 20 76 61 72 69 61 62 6c 65 73 2c 20 61  767 variables, a
16be0 6e 64 20 66 6f 72 20 74 68 65 6d 0a 2a 2a 20 74  nd for them.** t
16bf0 68 65 20 6f 70 74 69 6f 6e 20 69 73 20 61 76 61  he option is ava
16c00 69 6c 61 62 6c 65 20 28 61 74 20 63 6f 6d 70 69  ilable (at compi
16c10 6c 65 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66  le-time)..*/.#if
16c20 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49   SQLITE_MAX_VARI
16c30 41 42 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33 32 37  ABLE_NUMBER<=327
16c40 36 37 0a 74 79 70 65 64 65 66 20 69 31 36 20 79  67.typedef i16 y
16c50 6e 56 61 72 3b 0a 23 65 6c 73 65 0a 74 79 70 65  nVar;.#else.type
16c60 64 65 66 20 69 6e 74 20 79 6e 56 61 72 3b 0a 23  def int ynVar;.#
16c70 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  endif../*.** Eac
16c80 68 20 6e 6f 64 65 20 6f 66 20 61 6e 20 65 78 70  h node of an exp
16c90 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 70  ression in the p
16ca0 61 72 73 65 20 74 72 65 65 20 69 73 20 61 6e 20  arse tree is an 
16cb0 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74  instance.** of t
16cc0 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  his structure..*
16cd0 2a 0a 2a 2a 20 45 78 70 72 2e 6f 70 20 69 73 20  *.** Expr.op is 
16ce0 74 68 65 20 6f 70 63 6f 64 65 2e 20 54 68 65 20  the opcode. The 
16cf0 69 6e 74 65 67 65 72 20 70 61 72 73 65 72 20 74  integer parser t
16d00 6f 6b 65 6e 20 63 6f 64 65 73 20 61 72 65 20 72  oken codes are r
16d10 65 75 73 65 64 0a 2a 2a 20 61 73 20 6f 70 63 6f  eused.** as opco
16d20 64 65 73 20 68 65 72 65 2e 20 46 6f 72 20 65 78  des here. For ex
16d30 61 6d 70 6c 65 2c 20 74 68 65 20 70 61 72 73 65  ample, the parse
16d40 72 20 64 65 66 69 6e 65 73 20 54 4b 5f 47 45 20  r defines TK_GE 
16d50 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72  to be an integer
16d60 0a 2a 2a 20 63 6f 64 65 20 72 65 70 72 65 73 65  .** code represe
16d70 6e 74 69 6e 67 20 74 68 65 20 22 3e 3d 22 20 6f  nting the ">=" o
16d80 70 65 72 61 74 6f 72 2e 20 54 68 69 73 20 73 61  perator. This sa
16d90 6d 65 20 69 6e 74 65 67 65 72 20 63 6f 64 65 20  me integer code 
16da0 69 73 20 72 65 75 73 65 64 0a 2a 2a 20 74 6f 20  is reused.** to 
16db0 72 65 70 72 65 73 65 6e 74 20 74 68 65 20 67 72  represent the gr
16dc0 65 61 74 65 72 2d 74 68 61 6e 2d 6f 72 2d 65 71  eater-than-or-eq
16dd0 75 61 6c 2d 74 6f 20 6f 70 65 72 61 74 6f 72 20  ual-to operator 
16de0 69 6e 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  in the expressio
16df0 6e 0a 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a  n.** tree..**.**
16e00 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69   If the expressi
16e10 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 6c 69 74  on is an SQL lit
16e20 65 72 61 6c 20 28 54 4b 5f 49 4e 54 45 47 45 52  eral (TK_INTEGER
16e30 2c 20 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42  , TK_FLOAT, TK_B
16e40 4c 4f 42 2c 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54  LOB,.** or TK_ST
16e50 52 49 4e 47 29 2c 20 74 68 65 6e 20 45 78 70 72  RING), then Expr
16e60 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20  .token contains 
16e70 74 68 65 20 74 65 78 74 20 6f 66 20 74 68 65 20  the text of the 
16e80 53 51 4c 20 6c 69 74 65 72 61 6c 2e 20 49 66 0a  SQL literal. If.
16e90 2a 2a 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  ** the expressio
16ea0 6e 20 69 73 20 61 20 76 61 72 69 61 62 6c 65 20  n is a variable 
16eb0 28 54 4b 5f 56 41 52 49 41 42 4c 45 29 2c 20 74  (TK_VARIABLE), t
16ec0 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63  hen Expr.token c
16ed0 6f 6e 74 61 69 6e 73 20 74 68 65 0a 2a 2a 20 76  ontains the.** v
16ee0 61 72 69 61 62 6c 65 20 6e 61 6d 65 2e 20 46 69  ariable name. Fi
16ef0 6e 61 6c 6c 79 2c 20 69 66 20 74 68 65 20 65 78  nally, if the ex
16f00 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53  pression is an S
16f10 51 4c 20 66 75 6e 63 74 69 6f 6e 20 28 54 4b 5f  QL function (TK_
16f20 46 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68  FUNCTION),.** th
16f30 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f  en Expr.token co
16f40 6e 74 61 69 6e 73 20 74 68 65 20 6e 61 6d 65 20  ntains the name 
16f50 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e  of the function.
16f60 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70 52 69 67  .**.** Expr.pRig
16f70 68 74 20 61 6e 64 20 45 78 70 72 2e 70 4c 65 66  ht and Expr.pLef
16f80 74 20 61 72 65 20 74 68 65 20 6c 65 66 74 20 61  t are the left a
16f90 6e 64 20 72 69 67 68 74 20 73 75 62 65 78 70 72  nd right subexpr
16fa0 65 73 73 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20  essions of a.** 
16fb0 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 2e  binary operator.
16fc0 20 45 69 74 68 65 72 20 6f 72 20 62 6f 74 68 20   Either or both 
16fd0 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a  may be NULL..**.
16fe0 2a 2a 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20  ** Expr.x.pList 
16ff0 69 73 20 61 20 6c 69 73 74 20 6f 66 20 61 72 67  is a list of arg
17000 75 6d 65 6e 74 73 20 69 66 20 74 68 65 20 65 78  uments if the ex
17010 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53  pression is an S
17020 51 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20  QL function,.** 
17030 61 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f  a CASE expressio
17040 6e 20 6f 72 20 61 6e 20 49 4e 20 65 78 70 72 65  n or an IN expre
17050 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72  ssion of the for
17060 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 3c 79 3e  m "<lhs> IN (<y>
17070 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45  , <z>...)"..** E
17080 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73  xpr.x.pSelect is
17090 20 75 73 65 64 20 69 66 20 74 68 65 20 65 78 70   used if the exp
170a0 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62  ression is a sub
170b0 2d 73 65 6c 65 63 74 20 6f 72 20 61 6e 20 65 78  -select or an ex
170c0 70 72 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74  pression of.** t
170d0 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49  he form "<lhs> I
170e0 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e  N (SELECT ...)".
170f0 20 49 66 20 74 68 65 20 45 50 5f 78 49 73 53 65   If the EP_xIsSe
17100 6c 65 63 74 20 62 69 74 20 69 73 20 73 65 74 20  lect bit is set 
17110 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66  in the.** Expr.f
17120 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20  lags mask, then 
17130 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69  Expr.x.pSelect i
17140 73 20 76 61 6c 69 64 2e 20 4f 74 68 65 72 77 69  s valid. Otherwi
17150 73 65 2c 20 45 78 70 72 2e 78 2e 70 4c 69 73 74  se, Expr.x.pList
17160 20 69 73 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a   is.** valid..**
17170 0a 2a 2a 20 41 6e 20 65 78 70 72 65 73 73 69 6f  .** An expressio
17180 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 49 44  n of the form ID
17190 20 6f 72 20 49 44 2e 49 44 20 72 65 66 65 72 73   or ID.ID refers
171a0 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e 20   to a column in 
171b0 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20  a table..** For 
171c0 73 75 63 68 20 65 78 70 72 65 73 73 69 6f 6e 73  such expressions
171d0 2c 20 45 78 70 72 2e 6f 70 20 69 73 20 73 65 74  , Expr.op is set
171e0 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e   to TK_COLUMN an
171f0 64 20 45 78 70 72 2e 69 54 61 62 6c 65 20 69 73  d Expr.iTable is
17200 0a 2a 2a 20 74 68 65 20 69 6e 74 65 67 65 72 20  .** the integer 
17210 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66  cursor number of
17220 20 61 20 56 44 42 45 20 63 75 72 73 6f 72 20 70   a VDBE cursor p
17230 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 61 74 20  ointing to that 
17240 74 61 62 6c 65 20 61 6e 64 0a 2a 2a 20 45 78 70  table and.** Exp
17250 72 2e 69 43 6f 6c 75 6d 6e 20 69 73 20 74 68 65  r.iColumn is the
17260 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 66   column number f
17270 6f 72 20 74 68 65 20 73 70 65 63 69 66 69 63 20  or the specific 
17280 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65 0a  column.  If the.
17290 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  ** expression is
172a0 20 75 73 65 64 20 61 73 20 61 20 72 65 73 75 6c   used as a resul
172b0 74 20 69 6e 20 61 6e 20 61 67 67 72 65 67 61 74  t in an aggregat
172c0 65 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 20 74  e SELECT, then t
172d0 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 61  he.** value is a
172e0 6c 73 6f 20 73 74 6f 72 65 64 20 69 6e 20 74 68  lso stored in th
172f0 65 20 45 78 70 72 2e 69 41 67 67 20 63 6f 6c 75  e Expr.iAgg colu
17300 6d 6e 20 69 6e 20 74 68 65 20 61 67 67 72 65 67  mn in the aggreg
17310 61 74 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20 69  ate so that.** i
17320 74 20 63 61 6e 20 62 65 20 61 63 63 65 73 73 65  t can be accesse
17330 64 20 61 66 74 65 72 20 61 6c 6c 20 61 67 67 72  d after all aggr
17340 65 67 61 74 65 73 20 61 72 65 20 63 6f 6d 70 75  egates are compu
17350 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ted..**.** If th
17360 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
17370 61 6e 20 75 6e 62 6f 75 6e 64 20 76 61 72 69 61  an unbound varia
17380 62 6c 65 20 6d 61 72 6b 65 72 20 28 61 20 71 75  ble marker (a qu
17390 65 73 74 69 6f 6e 20 6d 61 72 6b 0a 2a 2a 20 63  estion mark.** c
173a0 68 61 72 61 63 74 65 72 20 27 3f 27 20 69 6e 20  haracter '?' in 
173b0 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c  the original SQL
173c0 29 20 74 68 65 6e 20 74 68 65 20 45 78 70 72 2e  ) then the Expr.
173d0 69 54 61 62 6c 65 20 68 6f 6c 64 73 20 74 68 65  iTable holds the
173e0 20 69 6e 64 65 78 0a 2a 2a 20 6e 75 6d 62 65 72   index.** number
173f0 20 66 6f 72 20 74 68 61 74 20 76 61 72 69 61 62   for that variab
17400 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  le..**.** If the
17410 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
17420 20 73 75 62 71 75 65 72 79 20 74 68 65 6e 20 45   subquery then E
17430 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64  xpr.iColumn hold
17440 73 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20  s an integer.** 
17450 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20  register number 
17460 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 72  containing the r
17470 65 73 75 6c 74 20 6f 66 20 74 68 65 20 73 75 62  esult of the sub
17480 71 75 65 72 79 2e 20 20 49 66 20 74 68 65 0a 2a  query.  If the.*
17490 2a 20 73 75 62 71 75 65 72 79 20 67 69 76 65 73  * subquery gives
174a0 20 61 20 63 6f 6e 73 74 61 6e 74 20 72 65 73 75   a constant resu
174b0 6c 74 2c 20 74 68 65 6e 20 69 54 61 62 6c 65 20  lt, then iTable 
174c0 69 73 20 2d 31 2e 20 20 49 66 20 74 68 65 20 73  is -1.  If the s
174d0 75 62 71 75 65 72 79 0a 2a 2a 20 67 69 76 65 73  ubquery.** gives
174e0 20 61 20 64 69 66 66 65 72 65 6e 74 20 61 6e 73   a different ans
174f0 77 65 72 20 61 74 20 64 69 66 66 65 72 65 6e 74  wer at different
17500 20 74 69 6d 65 73 20 64 75 72 69 6e 67 20 73 74   times during st
17510 61 74 65 6d 65 6e 74 20 70 72 6f 63 65 73 73 69  atement processi
17520 6e 67 0a 2a 2a 20 74 68 65 6e 20 69 54 61 62 6c  ng.** then iTabl
17530 65 20 69 73 20 74 68 65 20 61 64 64 72 65 73 73  e is the address
17540 20 6f 66 20 61 20 73 75 62 72 6f 75 74 69 6e 65   of a subroutine
17550 20 74 68 61 74 20 63 6f 6d 70 75 74 65 73 20 74   that computes t
17560 68 65 20 73 75 62 71 75 65 72 79 2e 0a 2a 2a 0a  he subquery..**.
17570 2a 2a 20 49 66 20 74 68 65 20 45 78 70 72 20 69  ** If the Expr i
17580 73 20 6f 66 20 74 79 70 65 20 4f 50 5f 43 6f 6c  s of type OP_Col
17590 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20 74 61 62  umn, and the tab
175a0 6c 65 20 69 74 20 69 73 20 73 65 6c 65 63 74 69  le it is selecti
175b0 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69 73 20 61 20  ng from.** is a 
175c0 64 69 73 6b 20 74 61 62 6c 65 20 6f 72 20 74 68  disk table or th
175d0 65 20 22 6f 6c 64 2e 2a 22 20 70 73 65 75 64 6f  e "old.*" pseudo
175e0 2d 74 61 62 6c 65 2c 20 74 68 65 6e 20 70 54 61  -table, then pTa
175f0 62 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a  b points to the.
17600 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  ** corresponding
17610 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f   table definitio
17620 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54  n..**.** ALLOCAT
17630 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a  ION NOTES:.**.**
17640 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 63 61   Expr objects ca
17650 6e 20 75 73 65 20 61 20 6c 6f 74 20 6f 66 20 6d  n use a lot of m
17660 65 6d 6f 72 79 20 73 70 61 63 65 20 69 6e 20 64  emory space in d
17670 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20  atabase schema. 
17680 20 54 6f 0a 2a 2a 20 68 65 6c 70 20 72 65 64 75   To.** help redu
17690 63 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72  ce memory requir
176a0 65 6d 65 6e 74 73 2c 20 73 6f 6d 65 74 69 6d 65  ements, sometime
176b0 73 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74  s an Expr object
176c0 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 74 72 75 6e   will be.** trun
176d0 63 61 74 65 64 2e 20 20 41 6e 64 20 74 6f 20 72  cated.  And to r
176e0 65 64 75 63 65 20 74 68 65 20 6e 75 6d 62 65 72  educe the number
176f0 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63   of memory alloc
17700 61 74 69 6f 6e 73 2c 20 73 6f 6d 65 74 69 6d 65  ations, sometime
17710 73 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f 72 65  s.** two or more
17720 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 77 69   Expr objects wi
17730 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20  ll be stored in 
17740 61 20 73 69 6e 67 6c 65 20 6d 65 6d 6f 72 79 20  a single memory 
17750 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74  allocation,.** t
17760 6f 67 65 74 68 65 72 20 77 69 74 68 20 45 78 70  ogether with Exp
17770 72 2e 7a 54 6f 6b 65 6e 20 73 74 72 69 6e 67 73  r.zToken strings
17780 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45  ..**.** If the E
17790 50 5f 52 65 64 75 63 65 64 20 61 6e 64 20 45 50  P_Reduced and EP
177a0 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 73  _TokenOnly flags
177b0 20 61 72 65 20 73 65 74 20 77 68 65 6e 0a 2a 2a   are set when.**
177c0 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20   an Expr object 
177d0 69 73 20 74 72 75 6e 63 61 74 65 64 2e 20 20 57  is truncated.  W
177e0 68 65 6e 20 45 50 5f 52 65 64 75 63 65 64 20 69  hen EP_Reduced i
177f0 73 20 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c 0a  s set, then all.
17800 2a 2a 20 74 68 65 20 63 68 69 6c 64 20 45 78 70  ** the child Exp
17810 72 20 6f 62 6a 65 63 74 73 20 69 6e 20 74 68 65  r objects in the
17820 20 45 78 70 72 2e 70 4c 65 66 74 20 61 6e 64 20   Expr.pLeft and 
17830 45 78 70 72 2e 70 52 69 67 68 74 20 73 75 62 74  Expr.pRight subt
17840 72 65 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74  rees.** are cont
17850 61 69 6e 65 64 20 77 69 74 68 69 6e 20 74 68 65  ained within the
17860 20 73 61 6d 65 20 6d 65 6d 6f 72 79 20 61 6c 6c   same memory all
17870 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20  ocation.  Note, 
17880 68 6f 77 65 76 65 72 2c 20 74 68 61 74 0a 2a 2a  however, that.**
17890 20 74 68 65 20 73 75 62 74 72 65 65 73 20 69 6e   the subtrees in
178a0 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 6f 72   Expr.x.pList or
178b0 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20   Expr.x.pSelect 
178c0 61 72 65 20 61 6c 77 61 79 73 20 73 65 70 61 72  are always separ
178d0 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74  ately.** allocat
178e0 65 64 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f  ed, regardless o
178f0 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  f whether or not
17900 20 45 50 5f 52 65 64 75 63 65 64 20 69 73 20 73   EP_Reduced is s
17910 65 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78  et..*/.struct Ex
17920 70 72 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20  pr {.  u8 op;   
17930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
17940 20 4f 70 65 72 61 74 69 6f 6e 20 70 65 72 66 6f   Operation perfo
17950 72 6d 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64  rmed by this nod
17960 65 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69  e */.  char affi
17970 6e 69 74 79 3b 20 20 20 20 20 20 20 20 20 2f 2a  nity;         /*
17980 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66   The affinity of
17990 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 72 20 30   the column or 0
179a0 20 69 66 20 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e   if not a column
179b0 20 2a 2f 0a 20 20 75 33 32 20 66 6c 61 67 73 3b   */.  u32 flags;
179c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
179d0 56 61 72 69 6f 75 73 20 66 6c 61 67 73 2e 20 20  Various flags.  
179e0 45 50 5f 2a 20 53 65 65 20 62 65 6c 6f 77 20 2a  EP_* See below *
179f0 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20  /.  union {.    
17a00 63 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20  char *zToken;   
17a10 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20         /* Token 
17a20 76 61 6c 75 65 2e 20 5a 65 72 6f 20 74 65 72 6d  value. Zero term
17a30 69 6e 61 74 65 64 20 61 6e 64 20 64 65 71 75 6f  inated and dequo
17a40 74 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ted */.    int i
17a50 56 61 6c 75 65 3b 20 20 20 20 20 20 20 20 20 20  Value;          
17a60 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74 69 76    /* Non-negativ
17a70 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  e integer value 
17a80 69 66 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 2a  if EP_IntValue *
17a90 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49  /.  } u;..  /* I
17aa0 66 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e  f the EP_TokenOn
17ab0 6c 79 20 66 6c 61 67 20 69 73 20 73 65 74 20 69  ly flag is set i
17ac0 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73  n the Expr.flags
17ad0 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20   mask, then no. 
17ae0 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c   ** space is all
17af0 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65 20 66  ocated for the f
17b00 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73  ields below this
17b10 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d   point. An attem
17b20 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73  pt to.  ** acces
17b30 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75  s them will resu
17b40 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74  lt in a segfault
17b50 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e   or malfunction.
17b60 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .  *************
17b70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17b80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17b90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17ba0 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70  ********/..  Exp
17bb0 72 20 2a 70 4c 65 66 74 3b 20 20 20 20 20 20 20  r *pLeft;       
17bc0 20 20 20 20 2f 2a 20 4c 65 66 74 20 73 75 62 6e      /* Left subn
17bd0 6f 64 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  ode */.  Expr *p
17be0 52 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20  Right;          
17bf0 2f 2a 20 52 69 67 68 74 20 73 75 62 6e 6f 64 65  /* Right subnode
17c00 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20   */.  union {.  
17c10 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4c 69 73    ExprList *pLis
17c20 74 3b 20 20 20 20 20 2f 2a 20 6f 70 20 3d 20 49  t;     /* op = I
17c30 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43  N, EXISTS, SELEC
17c40 54 2c 20 43 41 53 45 2c 20 46 55 4e 43 54 49 4f  T, CASE, FUNCTIO
17c50 4e 2c 20 42 45 54 57 45 45 4e 20 2a 2f 0a 20 20  N, BETWEEN */.  
17c60 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
17c70 74 3b 20 20 20 20 20 2f 2a 20 45 50 5f 78 49 73  t;     /* EP_xIs
17c80 53 65 6c 65 63 74 20 61 6e 64 20 6f 70 20 3d 20  Select and op = 
17c90 49 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45  IN, EXISTS, SELE
17ca0 43 54 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20  CT */.  } x;..  
17cb0 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65 64  /* If the EP_Red
17cc0 75 63 65 64 20 66 6c 61 67 20 69 73 20 73 65 74  uced flag is set
17cd0 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61   in the Expr.fla
17ce0 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f  gs mask, then no
17cf0 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61  .  ** space is a
17d00 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65  llocated for the
17d10 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68   fields below th
17d20 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74  is point. An att
17d30 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63  empt to.  ** acc
17d40 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65  ess them will re
17d50 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75  sult in a segfau
17d60 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f  lt or malfunctio
17d70 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  n..  ***********
17d80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17d90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17da0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17db0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66  **********/..#if
17dc0 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52   SQLITE_MAX_EXPR
17dd0 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 6e  _DEPTH>0.  int n
17de0 48 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20  Height;         
17df0 20 20 2f 2a 20 48 65 69 67 68 74 20 6f 66 20 74    /* Height of t
17e00 68 65 20 74 72 65 65 20 68 65 61 64 65 64 20 62  he tree headed b
17e10 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 23  y this node */.#
17e20 65 6e 64 69 66 0a 20 20 69 6e 74 20 69 54 61 62  endif.  int iTab
17e30 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  le;            /
17e40 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72  * TK_COLUMN: cur
17e50 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 61  sor number of ta
17e60 62 6c 65 20 68 6f 6c 64 69 6e 67 20 63 6f 6c 75  ble holding colu
17e70 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  mn.             
17e80 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
17e90 4b 5f 52 45 47 49 53 54 45 52 3a 20 72 65 67 69  K_REGISTER: regi
17ea0 73 74 65 72 20 6e 75 6d 62 65 72 0a 20 20 20 20  ster number.    
17eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ec0 20 20 20 20 20 2a 2a 20 54 4b 5f 54 52 49 47 47       ** TK_TRIGG
17ed0 45 52 3a 20 31 20 2d 3e 20 6e 65 77 2c 20 30 20  ER: 1 -> new, 0 
17ee0 2d 3e 20 6f 6c 64 0a 20 20 20 20 20 20 20 20 20  -> old.         
17ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f00 2a 2a 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 3a 20  ** EP_Unlikely: 
17f10 20 31 33 34 32 31 37 37 32 38 20 74 69 6d 65 73   134217728 times
17f20 20 6c 69 6b 65 6c 69 68 6f 6f 64 0a 20 20 20 20   likelihood.    
17f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f40 20 20 20 20 20 2a 2a 20 54 4b 5f 53 45 4c 45 43       ** TK_SELEC
17f50 54 3a 20 31 73 74 20 72 65 67 69 73 74 65 72 20  T: 1st register 
17f60 6f 66 20 72 65 73 75 6c 74 20 76 65 63 74 6f 72  of result vector
17f70 20 2a 2f 0a 20 20 79 6e 56 61 72 20 69 43 6f 6c   */.  ynVar iCol
17f80 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  umn;         /* 
17f90 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d  TK_COLUMN: colum
17fa0 6e 20 69 6e 64 65 78 2e 20 20 2d 31 20 66 6f 72  n index.  -1 for
17fb0 20 72 6f 77 69 64 2e 0a 20 20 20 20 20 20 20 20   rowid..        
17fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17fd0 20 2a 2a 20 54 4b 5f 56 41 52 49 41 42 4c 45 3a   ** TK_VARIABLE:
17fe0 20 76 61 72 69 61 62 6c 65 20 6e 75 6d 62 65 72   variable number
17ff0 20 28 61 6c 77 61 79 73 20 3e 3d 20 31 29 2e 0a   (always >= 1)..
18000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18010 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 53           ** TK_S
18020 45 4c 45 43 54 5f 43 4f 4c 55 4d 4e 3a 20 63 6f  ELECT_COLUMN: co
18030 6c 75 6d 6e 20 6f 66 20 74 68 65 20 72 65 73 75  lumn of the resu
18040 6c 74 20 76 65 63 74 6f 72 20 2a 2f 0a 20 20 69  lt vector */.  i
18050 31 36 20 69 41 67 67 3b 20 20 20 20 20 20 20 20  16 iAgg;        
18060 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 65        /* Which e
18070 6e 74 72 79 20 69 6e 20 70 41 67 67 49 6e 66 6f  ntry in pAggInfo
18080 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46  ->aCol[] or ->aF
18090 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69 31 36 20 69  unc[] */.  i16 i
180a0 52 69 67 68 74 4a 6f 69 6e 54 61 62 6c 65 3b 20  RightJoinTable; 
180b0 20 20 2f 2a 20 49 66 20 45 50 5f 46 72 6f 6d 4a    /* If EP_FromJ
180c0 6f 69 6e 2c 20 74 68 65 20 72 69 67 68 74 20 74  oin, the right t
180d0 61 62 6c 65 20 6f 66 20 74 68 65 20 6a 6f 69 6e  able of the join
180e0 20 2a 2f 0a 20 20 75 38 20 6f 70 32 3b 20 20 20   */.  u8 op2;   
180f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
18100 54 4b 5f 52 45 47 49 53 54 45 52 3a 20 6f 72 69  TK_REGISTER: ori
18110 67 69 6e 61 6c 20 76 61 6c 75 65 20 6f 66 20 45  ginal value of E
18120 78 70 72 2e 6f 70 0a 20 20 20 20 20 20 20 20 20  xpr.op.         
18130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18140 2a 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68  ** TK_COLUMN: th
18150 65 20 76 61 6c 75 65 20 6f 66 20 70 35 20 66 6f  e value of p5 fo
18160 72 20 4f 50 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20  r OP_Column.    
18170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18180 20 20 20 20 20 2a 2a 20 54 4b 5f 41 47 47 5f 46       ** TK_AGG_F
18190 55 4e 43 54 49 4f 4e 3a 20 6e 65 73 74 69 6e 67  UNCTION: nesting
181a0 20 64 65 70 74 68 20 2a 2f 0a 20 20 41 67 67 49   depth */.  AggI
181b0 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20  nfo *pAggInfo;  
181c0 20 20 20 2f 2a 20 55 73 65 64 20 62 79 20 54 4b     /* Used by TK
181d0 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20  _AGG_COLUMN and 
181e0 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20  TK_AGG_FUNCTION 
181f0 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62  */.  Table *pTab
18200 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
18210 61 62 6c 65 20 66 6f 72 20 54 4b 5f 43 4f 4c 55  able for TK_COLU
18220 4d 4e 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20  MN expressions. 
18230 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
18240 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74   following are t
18250 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 62  he meanings of b
18260 69 74 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e  its in the Expr.
18270 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a  flags field..*/.
18280 23 64 65 66 69 6e 65 20 45 50 5f 46 72 6f 6d 4a  #define EP_FromJ
18290 6f 69 6e 20 20 30 78 30 30 30 30 30 31 20 2f 2a  oin  0x000001 /*
182a0 20 4f 72 69 67 69 6e 61 74 65 73 20 69 6e 20 4f   Originates in O
182b0 4e 2f 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f  N/USING clause o
182c0 66 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a  f outer join */.
182d0 23 64 65 66 69 6e 65 20 45 50 5f 41 67 67 20 20  #define EP_Agg  
182e0 20 20 20 20 20 30 78 30 30 30 30 30 32 20 2f 2a       0x000002 /*
182f0 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72   Contains one or
18300 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65 20   more aggregate 
18310 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65  functions */.#de
18320 66 69 6e 65 20 45 50 5f 52 65 73 6f 6c 76 65 64  fine EP_Resolved
18330 20 20 30 78 30 30 30 30 30 34 20 2f 2a 20 49 44    0x000004 /* ID
18340 73 20 68 61 76 65 20 62 65 65 6e 20 72 65 73 6f  s have been reso
18350 6c 76 65 64 20 74 6f 20 43 4f 4c 55 4d 4e 73 20  lved to COLUMNs 
18360 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
18370 20 20 20 20 20 2f 2a 20 30 78 30 30 30 30 30 38       /* 0x000008
18380 20 2f 2f 20 61 76 61 69 6c 61 62 6c 65 20 66 6f   // available fo
18390 72 20 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65  r use */.#define
183a0 20 45 50 5f 44 69 73 74 69 6e 63 74 20 20 30 78   EP_Distinct  0x
183b0 30 30 30 30 31 30 20 2f 2a 20 41 67 67 72 65 67  000010 /* Aggreg
183c0 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 77 69 74  ate function wit
183d0 68 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f  h DISTINCT keywo
183e0 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  rd */.#define EP
183f0 5f 56 61 72 53 65 6c 65 63 74 20 30 78 30 30 30  _VarSelect 0x000
18400 30 32 30 20 2f 2a 20 70 53 65 6c 65 63 74 20 69  020 /* pSelect i
18410 73 20 63 6f 72 72 65 6c 61 74 65 64 2c 20 6e 6f  s correlated, no
18420 74 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23 64  t constant */.#d
18430 65 66 69 6e 65 20 45 50 5f 44 62 6c 51 75 6f 74  efine EP_DblQuot
18440 65 64 20 30 78 30 30 30 30 34 30 20 2f 2a 20 74  ed 0x000040 /* t
18450 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f 72 69 67 69  oken.z was origi
18460 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e 22 20 2a  nally in "..." *
18470 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 66  /.#define EP_Inf
18480 69 78 46 75 6e 63 20 30 78 30 30 30 30 38 30 20  ixFunc 0x000080 
18490 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 6e 20 69  /* True for an i
184a0 6e 66 69 78 20 66 75 6e 63 74 69 6f 6e 3a 20 4c  nfix function: L
184b0 49 4b 45 2c 20 47 4c 4f 42 2c 20 65 74 63 20 2a  IKE, GLOB, etc *
184c0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 6f 6c  /.#define EP_Col
184d0 6c 61 74 65 20 20 20 30 78 30 30 30 31 30 30 20  late   0x000100 
184e0 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61 69 6e 73  /* Tree contains
184f0 20 61 20 54 4b 5f 43 4f 4c 4c 41 54 45 20 6f 70   a TK_COLLATE op
18500 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e  erator */.#defin
18510 65 20 45 50 5f 47 65 6e 65 72 69 63 20 20 20 30  e EP_Generic   0
18520 78 30 30 30 32 30 30 20 2f 2a 20 49 67 6e 6f 72  x000200 /* Ignor
18530 65 20 43 4f 4c 4c 41 54 45 20 6f 72 20 61 66 66  e COLLATE or aff
18540 69 6e 69 74 79 20 6f 6e 20 74 68 69 73 20 74 72  inity on this tr
18550 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ee */.#define EP
18560 5f 49 6e 74 56 61 6c 75 65 20 20 30 78 30 30 30  _IntValue  0x000
18570 34 30 30 20 2f 2a 20 49 6e 74 65 67 65 72 20 76  400 /* Integer v
18580 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64 20 69  alue contained i
18590 6e 20 75 2e 69 56 61 6c 75 65 20 2a 2f 0a 23 64  n u.iValue */.#d
185a0 65 66 69 6e 65 20 45 50 5f 78 49 73 53 65 6c 65  efine EP_xIsSele
185b0 63 74 20 30 78 30 30 30 38 30 30 20 2f 2a 20 78  ct 0x000800 /* x
185c0 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69  .pSelect is vali
185d0 64 20 28 6f 74 68 65 72 77 69 73 65 20 78 2e 70  d (otherwise x.p
185e0 4c 69 73 74 20 69 73 29 20 2a 2f 0a 23 64 65 66  List is) */.#def
185f0 69 6e 65 20 45 50 5f 53 6b 69 70 20 20 20 20 20  ine EP_Skip     
18600 20 30 78 30 30 31 30 30 30 20 2f 2a 20 43 4f 4c   0x001000 /* COL
18610 4c 41 54 45 2c 20 41 53 2c 20 6f 72 20 55 4e 4c  LATE, AS, or UNL
18620 49 4b 45 4c 59 20 2a 2f 0a 23 64 65 66 69 6e 65  IKELY */.#define
18630 20 45 50 5f 52 65 64 75 63 65 64 20 20 20 30 78   EP_Reduced   0x
18640 30 30 32 30 30 30 20 2f 2a 20 45 78 70 72 20 73  002000 /* Expr s
18650 74 72 75 63 74 20 45 58 50 52 5f 52 45 44 55 43  truct EXPR_REDUC
18660 45 44 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c  EDSIZE bytes onl
18670 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  y */.#define EP_
18680 54 6f 6b 65 6e 4f 6e 6c 79 20 30 78 30 30 34 30  TokenOnly 0x0040
18690 30 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63  00 /* Expr struc
186a0 74 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59  t EXPR_TOKENONLY
186b0 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20  SIZE bytes only 
186c0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 74  */.#define EP_St
186d0 61 74 69 63 20 20 20 20 30 78 30 30 38 30 30 30  atic    0x008000
186e0 20 2f 2a 20 48 65 6c 64 20 69 6e 20 6d 65 6d 6f   /* Held in memo
186f0 72 79 20 6e 6f 74 20 6f 62 74 61 69 6e 65 64 20  ry not obtained 
18700 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f  from malloc() */
18710 0a 23 64 65 66 69 6e 65 20 45 50 5f 4d 65 6d 54  .#define EP_MemT
18720 6f 6b 65 6e 20 20 30 78 30 31 30 30 30 30 20 2f  oken  0x010000 /
18730 2a 20 4e 65 65 64 20 74 6f 20 73 71 6c 69 74 65  * Need to sqlite
18740 33 44 62 46 72 65 65 28 29 20 45 78 70 72 2e 7a  3DbFree() Expr.z
18750 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  Token */.#define
18760 20 45 50 5f 4e 6f 52 65 64 75 63 65 20 20 30 78   EP_NoReduce  0x
18770 30 32 30 30 30 30 20 2f 2a 20 43 61 6e 6e 6f 74  020000 /* Cannot
18780 20 45 58 50 52 44 55 50 5f 52 45 44 55 43 45 20   EXPRDUP_REDUCE 
18790 74 68 69 73 20 45 78 70 72 20 2a 2f 0a 23 64 65  this Expr */.#de
187a0 66 69 6e 65 20 45 50 5f 55 6e 6c 69 6b 65 6c 79  fine EP_Unlikely
187b0 20 20 30 78 30 34 30 30 30 30 20 2f 2a 20 75 6e    0x040000 /* un
187c0 6c 69 6b 65 6c 79 28 29 20 6f 72 20 6c 69 6b 65  likely() or like
187d0 6c 69 68 6f 6f 64 28 29 20 66 75 6e 63 74 69 6f  lihood() functio
187e0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  n */.#define EP_
187f0 43 6f 6e 73 74 46 75 6e 63 20 30 78 30 38 30 30  ConstFunc 0x0800
18800 30 30 20 2f 2a 20 41 20 53 51 4c 49 54 45 5f 46  00 /* A SQLITE_F
18810 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 6f 72 20  UNC_CONSTANT or 
18820 5f 53 4c 4f 43 48 4e 47 20 66 75 6e 63 74 69 6f  _SLOCHNG functio
18830 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  n */.#define EP_
18840 43 61 6e 42 65 4e 75 6c 6c 20 30 78 31 30 30 30  CanBeNull 0x1000
18850 30 30 20 2f 2a 20 43 61 6e 20 62 65 20 6e 75 6c  00 /* Can be nul
18860 6c 20 64 65 73 70 69 74 65 20 4e 4f 54 20 4e 55  l despite NOT NU
18870 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f  LL constraint */
18880 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 75 62 71  .#define EP_Subq
18890 75 65 72 79 20 20 30 78 32 30 30 30 30 30 20 2f  uery  0x200000 /
188a0 2a 20 54 72 65 65 20 63 6f 6e 74 61 69 6e 73 20  * Tree contains 
188b0 61 20 54 4b 5f 53 45 4c 45 43 54 20 6f 70 65 72  a TK_SELECT oper
188c0 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ator */.#define 
188d0 45 50 5f 41 6c 69 61 73 20 20 20 20 20 30 78 34  EP_Alias     0x4
188e0 30 30 30 30 30 20 2f 2a 20 49 73 20 61 6e 20 61  00000 /* Is an a
188f0 6c 69 61 73 20 66 6f 72 20 61 20 72 65 73 75 6c  lias for a resul
18900 74 20 73 65 74 20 63 6f 6c 75 6d 6e 20 2a 2f 0a  t set column */.
18910 23 64 65 66 69 6e 65 20 45 50 5f 4c 65 61 66 20  #define EP_Leaf 
18920 20 20 20 20 20 30 78 38 30 30 30 30 30 20 2f 2a       0x800000 /*
18930 20 45 78 70 72 2e 70 4c 65 66 74 2c 20 2e 70 52   Expr.pLeft, .pR
18940 69 67 68 74 2c 20 2e 75 2e 70 53 65 6c 65 63 74  ight, .u.pSelect
18950 20 61 6c 6c 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a   all NULL */../*
18960 0a 2a 2a 20 43 6f 6d 62 69 6e 61 74 69 6f 6e 73  .** Combinations
18970 20 6f 66 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20   of two or more 
18980 45 50 5f 2a 20 66 6c 61 67 73 0a 2a 2f 0a 23 64  EP_* flags.*/.#d
18990 65 66 69 6e 65 20 45 50 5f 50 72 6f 70 61 67 61  efine EP_Propaga
189a0 74 65 20 28 45 50 5f 43 6f 6c 6c 61 74 65 7c 45  te (EP_Collate|E
189b0 50 5f 53 75 62 71 75 65 72 79 29 20 2f 2a 20 50  P_Subquery) /* P
189c0 72 6f 70 61 67 61 74 65 20 74 68 65 73 65 20 62  ropagate these b
189d0 69 74 73 20 75 70 20 74 72 65 65 20 2a 2f 0a 0a  its up tree */..
189e0 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72  /*.** These macr
189f0 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  os can be used t
18a00 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20  o test, set, or 
18a10 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74 68  clear bits in th
18a20 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20  e.** Expr.flags 
18a30 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e  field..*/.#defin
18a40 65 20 45 78 70 72 48 61 73 50 72 6f 70 65 72 74  e ExprHasPropert
18a50 79 28 45 2c 50 29 20 20 20 20 20 28 28 28 45 29  y(E,P)     (((E)
18a60 2d 3e 66 6c 61 67 73 26 28 50 29 29 21 3d 30 29  ->flags&(P))!=0)
18a70 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48 61 73  .#define ExprHas
18a80 41 6c 6c 50 72 6f 70 65 72 74 79 28 45 2c 50 29  AllProperty(E,P)
18a90 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28    (((E)->flags&(
18aa0 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e  P))==(P)).#defin
18ab0 65 20 45 78 70 72 53 65 74 50 72 6f 70 65 72 74  e ExprSetPropert
18ac0 79 28 45 2c 50 29 20 20 20 20 20 28 45 29 2d 3e  y(E,P)     (E)->
18ad0 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69  flags|=(P).#defi
18ae0 6e 65 20 45 78 70 72 43 6c 65 61 72 50 72 6f 70  ne ExprClearProp
18af0 65 72 74 79 28 45 2c 50 29 20 20 20 28 45 29 2d  erty(E,P)   (E)-
18b00 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a  >flags&=~(P)../*
18b10 20 54 68 65 20 45 78 70 72 53 65 74 56 56 41 50   The ExprSetVVAP
18b20 72 6f 70 65 72 74 79 28 29 20 6d 61 63 72 6f 20  roperty() macro 
18b30 69 73 20 75 73 65 64 20 66 6f 72 20 56 65 72 69  is used for Veri
18b40 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61  fication, Valida
18b50 74 69 6f 6e 2c 0a 2a 2a 20 61 6e 64 20 41 63 63  tion,.** and Acc
18b60 72 65 64 69 74 61 74 69 6f 6e 20 6f 6e 6c 79 2e  reditation only.
18b70 20 20 49 74 20 77 6f 72 6b 73 20 6c 69 6b 65 20    It works like 
18b80 45 78 70 72 53 65 74 50 72 6f 70 65 72 74 79 28  ExprSetProperty(
18b90 29 20 64 75 72 69 6e 67 20 56 56 41 0a 2a 2a 20  ) during VVA.** 
18ba0 70 72 6f 63 65 73 73 65 73 20 62 75 74 20 69 73  processes but is
18bb0 20 61 20 6e 6f 2d 6f 70 20 66 6f 72 20 64 65 6c   a no-op for del
18bc0 69 76 65 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  ivery..*/.#ifdef
18bd0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20   SQLITE_DEBUG.# 
18be0 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 56 56  define ExprSetVV
18bf0 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  AProperty(E,P)  
18c00 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a  (E)->flags|=(P).
18c10 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 45  #else.# define E
18c20 78 70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74  xprSetVVAPropert
18c30 79 28 45 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 2f  y(E,P).#endif../
18c40 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64  *.** Macros to d
18c50 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d  etermine the num
18c60 62 65 72 20 6f 66 20 62 79 74 65 73 20 72 65 71  ber of bytes req
18c70 75 69 72 65 64 20 62 79 20 61 20 6e 6f 72 6d 61  uired by a norma
18c80 6c 20 45 78 70 72 0a 2a 2a 20 73 74 72 75 63 74  l Expr.** struct
18c90 2c 20 61 6e 20 45 78 70 72 20 73 74 72 75 63 74  , an Expr struct
18ca0 20 77 69 74 68 20 74 68 65 20 45 50 5f 52 65 64   with the EP_Red
18cb0 75 63 65 64 20 66 6c 61 67 20 73 65 74 20 69 6e  uced flag set in
18cc0 20 45 78 70 72 2e 66 6c 61 67 73 0a 2a 2a 20 61   Expr.flags.** a
18cd0 6e 64 20 61 6e 20 45 78 70 72 20 73 74 72 75 63  nd an Expr struc
18ce0 74 20 77 69 74 68 20 74 68 65 20 45 50 5f 54 6f  t with the EP_To
18cf0 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 73 65 74  kenOnly flag set
18d00 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50  ..*/.#define EXP
18d10 52 5f 46 55 4c 4c 53 49 5a 45 20 20 20 20 20 20  R_FULLSIZE      
18d20 20 20 20 20 20 73 69 7a 65 6f 66 28 45 78 70 72       sizeof(Expr
18d30 29 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  )           /* F
18d40 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23 64 65 66  ull size */.#def
18d50 69 6e 65 20 45 58 50 52 5f 52 45 44 55 43 45 44  ine EXPR_REDUCED
18d60 53 49 5a 45 20 20 20 20 20 20 20 20 6f 66 66 73  SIZE        offs
18d70 65 74 6f 66 28 45 78 70 72 2c 69 54 61 62 6c 65  etof(Expr,iTable
18d80 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65 61  )  /* Common fea
18d90 74 75 72 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tures */.#define
18da0 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53   EXPR_TOKENONLYS
18db0 49 5a 45 20 20 20 20 20 20 6f 66 66 73 65 74 6f  IZE      offseto
18dc0 66 28 45 78 70 72 2c 70 4c 65 66 74 29 20 20 20  f(Expr,pLeft)   
18dd0 2f 2a 20 46 65 77 65 72 20 66 65 61 74 75 72 65  /* Fewer feature
18de0 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67  s */../*.** Flag
18df0 73 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20  s passed to the 
18e00 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 29  sqlite3ExprDup()
18e10 20 66 75 6e 63 74 69 6f 6e 2e 20 53 65 65 20 74   function. See t
18e20 68 65 20 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e  he header commen
18e30 74 0a 2a 2a 20 61 62 6f 76 65 20 73 71 6c 69 74  t.** above sqlit
18e40 65 33 45 78 70 72 44 75 70 28 29 20 66 6f 72 20  e3ExprDup() for 
18e50 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66  details..*/.#def
18e60 69 6e 65 20 45 58 50 52 44 55 50 5f 52 45 44 55  ine EXPRDUP_REDU
18e70 43 45 20 20 20 20 20 20 20 20 20 30 78 30 30 30  CE         0x000
18e80 31 20 20 2f 2a 20 55 73 65 64 20 72 65 64 75 63  1  /* Used reduc
18e90 65 64 2d 73 69 7a 65 20 45 78 70 72 20 6e 6f 64  ed-size Expr nod
18ea0 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c  es */../*.** A l
18eb0 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f  ist of expressio
18ec0 6e 73 2e 20 20 45 61 63 68 20 65 78 70 72 65 73  ns.  Each expres
18ed0 73 69 6f 6e 20 6d 61 79 20 6f 70 74 69 6f 6e 61  sion may optiona
18ee0 6c 6c 79 20 68 61 76 65 20 61 0a 2a 2a 20 6e 61  lly have a.** na
18ef0 6d 65 2e 20 20 41 6e 20 65 78 70 72 2f 6e 61 6d  me.  An expr/nam
18f00 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 63 61  e combination ca
18f10 6e 20 62 65 20 75 73 65 64 20 69 6e 20 73 65 76  n be used in sev
18f20 65 72 61 6c 20 77 61 79 73 2c 20 73 75 63 68 0a  eral ways, such.
18f30 2a 2a 20 61 73 20 74 68 65 20 6c 69 73 74 20 6f  ** as the list o
18f40 66 20 22 65 78 70 72 20 41 53 20 49 44 22 20 66  f "expr AS ID" f
18f50 69 65 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e 67 20  ields following 
18f60 61 20 22 53 45 4c 45 43 54 22 20 6f 72 20 69 6e  a "SELECT" or in
18f70 20 74 68 65 0a 2a 2a 20 6c 69 73 74 20 6f 66 20   the.** list of 
18f80 22 49 44 20 3d 20 65 78 70 72 22 20 69 74 65 6d  "ID = expr" item
18f90 73 20 69 6e 20 61 6e 20 55 50 44 41 54 45 2e 20  s in an UPDATE. 
18fa0 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65   A list of expre
18fb0 73 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61 6c  ssions can.** al
18fc0 73 6f 20 62 65 20 75 73 65 64 20 61 73 20 74 68  so be used as th
18fd0 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 61 20  e argument to a 
18fe0 66 75 6e 63 74 69 6f 6e 2c 20 69 6e 20 77 68 69  function, in whi
18ff0 63 68 20 63 61 73 65 20 74 68 65 20 61 2e 7a 4e  ch case the a.zN
19000 61 6d 65 0a 2a 2a 20 66 69 65 6c 64 20 69 73 20  ame.** field is 
19010 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20  not used..**.** 
19020 42 79 20 64 65 66 61 75 6c 74 20 74 68 65 20 45  By default the E
19030 78 70 72 2e 7a 53 70 61 6e 20 66 69 65 6c 64 20  xpr.zSpan field 
19040 68 6f 6c 64 73 20 61 20 68 75 6d 61 6e 2d 72 65  holds a human-re
19050 61 64 61 62 6c 65 20 64 65 73 63 72 69 70 74 69  adable descripti
19060 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 65 78 70  on of.** the exp
19070 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20  ression that is 
19080 75 73 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65  used in the gene
19090 72 61 74 69 6f 6e 20 6f 66 20 65 72 72 6f 72 20  ration of error 
190a0 6d 65 73 73 61 67 65 73 20 61 6e 64 0a 2a 2a 20  messages and.** 
190b0 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e 20 20  column labels.  
190c0 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 45 78  In this case, Ex
190d0 70 72 2e 7a 53 70 61 6e 20 69 73 20 74 79 70 69  pr.zSpan is typi
190e0 63 61 6c 6c 79 20 74 68 65 20 74 65 78 74 20 6f  cally the text o
190f0 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65 78  f a.** column ex
19100 70 72 65 73 73 69 6f 6e 20 61 73 20 69 74 20 65  pression as it e
19110 78 69 73 74 73 20 69 6e 20 61 20 53 45 4c 45 43  xists in a SELEC
19120 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 48 6f  T statement.  Ho
19130 77 65 76 65 72 2c 20 69 66 0a 2a 2a 20 74 68 65  wever, if.** the
19140 20 62 53 70 61 6e 49 73 54 61 62 20 66 6c 61 67   bSpanIsTab flag
19150 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 7a 53   is set, then zS
19160 70 61 6e 20 69 73 20 6f 76 65 72 6c 6f 61 64 65  pan is overloade
19170 64 20 74 6f 20 6d 65 61 6e 20 74 68 65 20 6e 61  d to mean the na
19180 6d 65 0a 2a 2a 20 6f 66 20 74 68 65 20 72 65 73  me.** of the res
19190 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68  ult column in th
191a0 65 20 66 6f 72 6d 3a 20 44 41 54 41 42 41 53 45  e form: DATABASE
191b0 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20 20  .TABLE.COLUMN.  
191c0 54 68 69 73 20 6c 61 74 65 72 0a 2a 2a 20 66 6f  This later.** fo
191d0 72 6d 20 69 73 20 75 73 65 64 20 66 6f 72 20 6e  rm is used for n
191e0 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20 77  ame resolution w
191f0 69 74 68 20 6e 65 73 74 65 64 20 46 52 4f 4d 20  ith nested FROM 
19200 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73 74 72 75  clauses..*/.stru
19210 63 74 20 45 78 70 72 4c 69 73 74 20 7b 0a 20 20  ct ExprList {.  
19220 69 6e 74 20 6e 45 78 70 72 3b 20 20 20 20 20 20  int nExpr;      
19230 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
19240 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20   of expressions 
19250 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20  on the list */. 
19260 20 69 6e 74 20 6e 41 6c 6c 6f 63 3b 20 20 20 20   int nAlloc;    
19270 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
19280 72 20 6f 66 20 61 5b 5d 20 73 6c 6f 74 73 20 61  r of a[] slots a
19290 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 73 74  llocated */.  st
192a0 72 75 63 74 20 45 78 70 72 4c 69 73 74 5f 69 74  ruct ExprList_it
192b0 65 6d 20 7b 20 2f 2a 20 46 6f 72 20 65 61 63 68  em { /* For each
192c0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74   expression in t
192d0 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 20 20 45  he list */.    E
192e0 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20  xpr *pExpr;     
192f0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61         /* The pa
19300 72 73 65 20 74 72 65 65 20 66 6f 72 20 74 68 69  rse tree for thi
19310 73 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a  s expression */.
19320 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b      char *zName;
19330 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
19340 6f 6b 65 6e 20 61 73 73 6f 63 69 61 74 65 64 20  oken associated 
19350 77 69 74 68 20 74 68 69 73 20 65 78 70 72 65 73  with this expres
19360 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72  sion */.    char
19370 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20 20 20   *zSpan;        
19380 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20      /* Original 
19390 74 65 78 74 20 6f 66 20 74 68 65 20 65 78 70 72  text of the expr
193a0 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 75 38  ession */.    u8
193b0 20 73 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20   sortOrder;     
193c0 20 20 20 20 20 20 2f 2a 20 31 20 66 6f 72 20 44        /* 1 for D
193d0 45 53 43 20 6f 72 20 30 20 66 6f 72 20 41 53 43  ESC or 0 for ASC
193e0 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
193f0 20 64 6f 6e 65 20 3a 31 3b 20 20 20 20 20 20 20   done :1;       
19400 2f 2a 20 41 20 66 6c 61 67 20 74 6f 20 69 6e 64  /* A flag to ind
19410 69 63 61 74 65 20 77 68 65 6e 20 70 72 6f 63 65  icate when proce
19420 73 73 69 6e 67 20 69 73 20 66 69 6e 69 73 68 65  ssing is finishe
19430 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  d */.    unsigne
19440 64 20 62 53 70 61 6e 49 73 54 61 62 20 3a 31 3b  d bSpanIsTab :1;
19450 20 2f 2a 20 7a 53 70 61 6e 20 68 6f 6c 64 73 20   /* zSpan holds 
19460 44 42 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 20  DB.TABLE.COLUMN 
19470 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
19480 72 65 75 73 61 62 6c 65 20 3a 31 3b 20 20 20 2f  reusable :1;   /
19490 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65  * Constant expre
194a0 73 73 69 6f 6e 20 69 73 20 72 65 75 73 61 62 6c  ssion is reusabl
194b0 65 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b  e */.    union {
194c0 0a 20 20 20 20 20 20 73 74 72 75 63 74 20 7b 0a  .      struct {.
194d0 20 20 20 20 20 20 20 20 75 31 36 20 69 4f 72 64          u16 iOrd
194e0 65 72 42 79 43 6f 6c 3b 20 20 20 20 20 20 2f 2a  erByCol;      /*
194f0 20 46 6f 72 20 4f 52 44 45 52 20 42 59 2c 20 63   For ORDER BY, c
19500 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20  olumn number in 
19510 72 65 73 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20  result set */.  
19520 20 20 20 20 20 20 75 31 36 20 69 41 6c 69 61 73        u16 iAlias
19530 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  ;           /* I
19540 6e 64 65 78 20 69 6e 74 6f 20 50 61 72 73 65 2e  ndex into Parse.
19550 61 41 6c 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61  aAlias[] for zNa
19560 6d 65 20 2a 2f 0a 20 20 20 20 20 20 7d 20 78 3b  me */.      } x;
19570 0a 20 20 20 20 20 20 69 6e 74 20 69 43 6f 6e 73  .      int iCons
19580 74 45 78 70 72 52 65 67 3b 20 20 20 20 20 20 2f  tExprReg;      /
19590 2a 20 52 65 67 69 73 74 65 72 20 69 6e 20 77 68  * Register in wh
195a0 69 63 68 20 45 78 70 72 20 76 61 6c 75 65 20 69  ich Expr value i
195b0 73 20 63 61 63 68 65 64 20 2a 2f 0a 20 20 20 20  s cached */.    
195c0 7d 20 75 3b 0a 20 20 7d 20 61 5b 31 5d 3b 20 20  } u;.  } a[1];  
195d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195e0 2f 2a 20 4f 6e 65 20 73 6c 6f 74 20 66 6f 72 20  /* One slot for 
195f0 65 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20  each expression 
19600 69 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d  in the list */.}
19610 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  ;../*.** An inst
19620 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72  ance of this str
19630 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20 62  ucture is used b
19640 79 20 74 68 65 20 70 61 72 73 65 72 20 74 6f 20  y the parser to 
19650 72 65 63 6f 72 64 20 62 6f 74 68 0a 2a 2a 20 74  record both.** t
19660 68 65 20 70 61 72 73 65 20 74 72 65 65 20 66 6f  he parse tree fo
19670 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  r an expression 
19680 61 6e 64 20 74 68 65 20 73 70 61 6e 20 6f 66 20  and the span of 
19690 69 6e 70 75 74 20 74 65 78 74 20 66 6f 72 20 61  input text for a
196a0 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 2e  n.** expression.
196b0 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 53  .*/.struct ExprS
196c0 70 61 6e 20 7b 0a 20 20 45 78 70 72 20 2a 70 45  pan {.  Expr *pE
196d0 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  xpr;          /*
196e0 20 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   The expression 
196f0 70 61 72 73 65 20 74 72 65 65 20 2a 2f 0a 20 20  parse tree */.  
19700 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 61  const char *zSta
19710 72 74 3b 20 20 20 2f 2a 20 46 69 72 73 74 20 63  rt;   /* First c
19720 68 61 72 61 63 74 65 72 20 6f 66 20 69 6e 70 75  haracter of inpu
19730 74 20 74 65 78 74 20 2a 2f 0a 20 20 63 6f 6e 73  t text */.  cons
19740 74 20 63 68 61 72 20 2a 7a 45 6e 64 3b 20 20 20  t char *zEnd;   
19750 20 20 2f 2a 20 4f 6e 65 20 63 68 61 72 61 63 74    /* One charact
19760 65 72 20 70 61 73 74 20 74 68 65 20 65 6e 64 20  er past the end 
19770 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a 2f  of input text */
19780 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  .};../*.** An in
19790 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73  stance of this s
197a0 74 72 75 63 74 75 72 65 20 63 61 6e 20 68 6f 6c  tructure can hol
197b0 64 20 61 20 73 69 6d 70 6c 65 20 6c 69 73 74 20  d a simple list 
197c0 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73 2c 0a  of identifiers,.
197d0 2a 2a 20 73 75 63 68 20 61 73 20 74 68 65 20 6c  ** such as the l
197e0 69 73 74 20 22 61 2c 62 2c 63 22 20 69 6e 20 74  ist "a,b,c" in t
197f0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61  he following sta
19800 74 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20  tements:.**.**  
19810 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
19820 74 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53 20  t(a,b,c) VALUES 
19830 2e 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45  ...;.**      CRE
19840 41 54 45 20 49 4e 44 45 58 20 69 64 78 20 4f 4e  ATE INDEX idx ON
19850 20 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20   t(a,b,c);.**   
19860 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45     CREATE TRIGGE
19870 52 20 74 72 69 67 20 42 45 46 4f 52 45 20 55 50  R trig BEFORE UP
19880 44 41 54 45 20 4f 4e 20 74 28 61 2c 62 2c 63 29  DATE ON t(a,b,c)
19890 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20   ...;.**.** The 
198a0 49 64 4c 69 73 74 2e 61 2e 69 64 78 20 66 69 65  IdList.a.idx fie
198b0 6c 64 20 69 73 20 75 73 65 64 20 77 68 65 6e 20  ld is used when 
198c0 74 68 65 20 49 64 4c 69 73 74 20 72 65 70 72 65  the IdList repre
198d0 73 65 6e 74 73 20 74 68 65 20 6c 69 73 74 20 6f  sents the list o
198e0 66 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  f.** column name
198f0 73 20 61 66 74 65 72 20 61 20 74 61 62 6c 65 20  s after a table 
19900 6e 61 6d 65 20 69 6e 20 61 6e 20 49 4e 53 45 52  name in an INSER
19910 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e  T statement.  In
19920 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 2a   the statement.*
19930 2a 0a 2a 2a 20 20 20 20 20 49 4e 53 45 52 54 20  *.**     INSERT 
19940 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 2e 2e  INTO t(a,b,c) ..
19950 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61 22 20 69  ..**.** If "a" i
19960 73 20 74 68 65 20 6b 2d 74 68 20 63 6f 6c 75 6d  s the k-th colum
19970 6e 20 6f 66 20 74 61 62 6c 65 20 22 74 22 2c 20  n of table "t", 
19980 74 68 65 6e 20 49 64 4c 69 73 74 2e 61 5b 30 5d  then IdList.a[0]
19990 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75  .idx==k..*/.stru
199a0 63 74 20 49 64 4c 69 73 74 20 7b 0a 20 20 73 74  ct IdList {.  st
199b0 72 75 63 74 20 49 64 4c 69 73 74 5f 69 74 65 6d  ruct IdList_item
199c0 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61   {.    char *zNa
199d0 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65  me;      /* Name
199e0 20 6f 66 20 74 68 65 20 69 64 65 6e 74 69 66 69   of the identifi
199f0 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 64  er */.    int id
19a00 78 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  x;          /* I
19a10 6e 64 65 78 20 69 6e 20 73 6f 6d 65 20 54 61 62  ndex in some Tab
19a20 6c 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61 20 63  le.aCol[] of a c
19a30 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d  olumn named zNam
19a40 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20 69  e */.  } *a;.  i
19a50 6e 74 20 6e 49 64 3b 20 20 20 20 20 20 20 20 20  nt nId;         
19a60 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 69 64 65  /* Number of ide
19a70 6e 74 69 66 69 65 72 73 20 6f 6e 20 74 68 65 20  ntifiers on the 
19a80 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  list */.};../*.*
19a90 2a 20 54 68 65 20 62 69 74 6d 61 73 6b 20 64 61  * The bitmask da
19aa0 74 61 74 79 70 65 20 64 65 66 69 6e 65 64 20 62  tatype defined b
19ab0 65 6c 6f 77 20 69 73 20 75 73 65 64 20 66 6f 72  elow is used for
19ac0 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a   various optimiz
19ad0 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43 68  ations..**.** Ch
19ae0 61 6e 67 69 6e 67 20 74 68 69 73 20 66 72 6f 6d  anging this from
19af0 20 61 20 36 34 2d 62 69 74 20 74 6f 20 61 20 33   a 64-bit to a 3
19b00 32 2d 62 69 74 20 74 79 70 65 20 6c 69 6d 69 74  2-bit type limit
19b10 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a  s the number of.
19b20 2a 2a 20 74 61 62 6c 65 73 20 69 6e 20 61 20 6a  ** tables in a j
19b30 6f 69 6e 20 74 6f 20 33 32 20 69 6e 73 74 65 61  oin to 32 instea
19b40 64 20 6f 66 20 36 34 2e 20 20 42 75 74 20 69 74  d of 64.  But it
19b50 20 61 6c 73 6f 20 72 65 64 75 63 65 73 20 74 68   also reduces th
19b60 65 20 73 69 7a 65 0a 2a 2a 20 6f 66 20 74 68 65  e size.** of the
19b70 20 6c 69 62 72 61 72 79 20 62 79 20 37 33 38 20   library by 738 
19b80 62 79 74 65 73 20 6f 6e 20 69 78 38 36 2e 0a 2a  bytes on ix86..*
19b90 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
19ba0 42 49 54 4d 41 53 4b 5f 54 59 50 45 0a 20 20 74  BITMASK_TYPE.  t
19bb0 79 70 65 64 65 66 20 53 51 4c 49 54 45 5f 42 49  ypedef SQLITE_BI
19bc0 54 4d 41 53 4b 5f 54 59 50 45 20 42 69 74 6d 61  TMASK_TYPE Bitma
19bd0 73 6b 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65  sk;.#else.  type
19be0 64 65 66 20 75 36 34 20 42 69 74 6d 61 73 6b 3b  def u64 Bitmask;
19bf0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
19c00 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74  he number of bit
19c10 73 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 2e 20  s in a Bitmask. 
19c20 20 22 42 4d 53 22 20 6d 65 61 6e 73 20 22 42 69   "BMS" means "Bi
19c30 74 4d 61 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f 0a  tMask Size"..*/.
19c40 23 64 65 66 69 6e 65 20 42 4d 53 20 20 28 28 69  #define BMS  ((i
19c50 6e 74 29 28 73 69 7a 65 6f 66 28 42 69 74 6d 61  nt)(sizeof(Bitma
19c60 73 6b 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20 41  sk)*8))../*.** A
19c70 20 62 69 74 20 69 6e 20 61 20 42 69 74 6d 61 73   bit in a Bitmas
19c80 6b 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53  k.*/.#define MAS
19c90 4b 42 49 54 28 6e 29 20 20 20 28 28 28 42 69 74  KBIT(n)   (((Bit
19ca0 6d 61 73 6b 29 31 29 3c 3c 28 6e 29 29 0a 23 64  mask)1)<<(n)).#d
19cb0 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 33 32 28  efine MASKBIT32(
19cc0 6e 29 20 28 28 28 75 6e 73 69 67 6e 65 64 20 69  n) (((unsigned i
19cd0 6e 74 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65 66  nt)1)<<(n)).#def
19ce0 69 6e 65 20 41 4c 4c 42 49 54 53 20 20 20 20 20  ine ALLBITS     
19cf0 20 28 28 42 69 74 6d 61 73 6b 29 2d 31 29 0a 0a   ((Bitmask)-1)..
19d00 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
19d10 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 64 65  ing structure de
19d20 73 63 72 69 62 65 73 20 74 68 65 20 46 52 4f 4d  scribes the FROM
19d30 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c   clause of a SEL
19d40 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a  ECT statement..*
19d50 2a 20 45 61 63 68 20 74 61 62 6c 65 20 6f 72 20  * Each table or 
19d60 73 75 62 71 75 65 72 79 20 69 6e 20 74 68 65 20  subquery in the 
19d70 46 52 4f 4d 20 63 6c 61 75 73 65 20 69 73 20 61  FROM clause is a
19d80 20 73 65 70 61 72 61 74 65 20 65 6c 65 6d 65 6e   separate elemen
19d90 74 20 6f 66 0a 2a 2a 20 74 68 65 20 53 72 63 4c  t of.** the SrcL
19da0 69 73 74 2e 61 5b 5d 20 61 72 72 61 79 2e 0a 2a  ist.a[] array..*
19db0 2a 0a 2a 2a 20 57 69 74 68 20 74 68 65 20 61 64  *.** With the ad
19dc0 64 69 74 69 6f 6e 20 6f 66 20 6d 75 6c 74 69 70  dition of multip
19dd0 6c 65 20 64 61 74 61 62 61 73 65 20 73 75 70 70  le database supp
19de0 6f 72 74 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69  ort, the followi
19df0 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20  ng structure.** 
19e00 63 61 6e 20 61 6c 73 6f 20 62 65 20 75 73 65 64  can also be used
19e10 20 74 6f 20 64 65 73 63 72 69 62 65 20 61 20 70   to describe a p
19e20 61 72 74 69 63 75 6c 61 72 20 74 61 62 6c 65 20  articular table 
19e30 73 75 63 68 20 61 73 20 74 68 65 20 74 61 62 6c  such as the tabl
19e40 65 20 74 68 61 74 0a 2a 2a 20 69 73 20 6d 6f 64  e that.** is mod
19e50 69 66 69 65 64 20 62 79 20 61 6e 20 49 4e 53 45  ified by an INSE
19e60 52 54 2c 20 44 45 4c 45 54 45 2c 20 6f 72 20 55  RT, DELETE, or U
19e70 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e  PDATE statement.
19e80 20 20 49 6e 20 73 74 61 6e 64 61 72 64 20 53 51    In standard SQ
19e90 4c 2c 0a 2a 2a 20 73 75 63 68 20 61 20 74 61 62  L,.** such a tab
19ea0 6c 65 20 6d 75 73 74 20 62 65 20 61 20 73 69 6d  le must be a sim
19eb0 70 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 20 20 42  ple name: ID.  B
19ec0 75 74 20 69 6e 20 53 51 4c 69 74 65 2c 20 74 68  ut in SQLite, th
19ed0 65 20 74 61 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e  e table can.** n
19ee0 6f 77 20 62 65 20 69 64 65 6e 74 69 66 69 65 64  ow be identified
19ef0 20 62 79 20 61 20 64 61 74 61 62 61 73 65 20 6e   by a database n
19f00 61 6d 65 2c 20 61 20 64 6f 74 2c 20 74 68 65 6e  ame, a dot, then
19f10 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 3a   the table name:
19f20 20 49 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68   ID.ID..**.** Th
19f30 65 20 6a 6f 69 6e 74 79 70 65 20 73 74 61 72 74  e jointype start
19f40 73 20 6f 75 74 20 73 68 6f 77 69 6e 67 20 74 68  s out showing th
19f50 65 20 6a 6f 69 6e 20 74 79 70 65 20 62 65 74 77  e join type betw
19f60 65 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20  een the current 
19f70 74 61 62 6c 65 0a 2a 2a 20 61 6e 64 20 74 68 65  table.** and the
19f80 20 6e 65 78 74 20 74 61 62 6c 65 20 6f 6e 20 74   next table on t
19f90 68 65 20 6c 69 73 74 2e 20 20 54 68 65 20 70 61  he list.  The pa
19fa0 72 73 65 72 20 62 75 69 6c 64 73 20 74 68 65 20  rser builds the 
19fb0 6c 69 73 74 20 74 68 69 73 20 77 61 79 2e 0a 2a  list this way..*
19fc0 2a 20 42 75 74 20 73 71 6c 69 74 65 33 53 72 63  * But sqlite3Src
19fd0 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70  ListShiftJoinTyp
19fe0 65 28 29 20 6c 61 74 65 72 20 73 68 69 66 74 73  e() later shifts
19ff0 20 74 68 65 20 6a 6f 69 6e 74 79 70 65 73 20 73   the jointypes s
1a000 6f 20 74 68 61 74 20 65 61 63 68 0a 2a 2a 20 6a  o that each.** j
1a010 6f 69 6e 74 79 70 65 20 65 78 70 72 65 73 73 65  ointype expresse
1a020 73 20 74 68 65 20 6a 6f 69 6e 20 62 65 74 77 65  s the join betwe
1a030 65 6e 20 74 68 65 20 74 61 62 6c 65 20 61 6e 64  en the table and
1a040 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 74 61   the previous ta
1a050 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68  ble..**.** In th
1a060 65 20 63 6f 6c 55 73 65 64 20 66 69 65 6c 64 2c  e colUsed field,
1a070 20 74 68 65 20 68 69 67 68 2d 6f 72 64 65 72 20   the high-order 
1a080 62 69 74 20 28 62 69 74 20 36 33 29 20 69 73 20  bit (bit 63) is 
1a090 73 65 74 20 69 66 20 74 68 65 20 74 61 62 6c 65  set if the table
1a0a0 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72  .** contains mor
1a0b0 65 20 74 68 61 6e 20 36 33 20 63 6f 6c 75 6d 6e  e than 63 column
1a0c0 73 20 61 6e 64 20 74 68 65 20 36 34 2d 74 68 20  s and the 64-th 
1a0d0 6f 72 20 6c 61 74 65 72 20 63 6f 6c 75 6d 6e 20  or later column 
1a0e0 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 73 74 72 75  is used..*/.stru
1a0f0 63 74 20 53 72 63 4c 69 73 74 20 7b 0a 20 20 69  ct SrcList {.  i
1a100 6e 74 20 6e 53 72 63 3b 20 20 20 20 20 20 20 20  nt nSrc;        
1a110 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62  /* Number of tab
1a120 6c 65 73 20 6f 72 20 73 75 62 71 75 65 72 69 65  les or subquerie
1a130 73 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c  s in the FROM cl
1a140 61 75 73 65 20 2a 2f 0a 20 20 75 33 32 20 6e 41  ause */.  u32 nA
1a150 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20 4e 75  lloc;      /* Nu
1a160 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20  mber of entries 
1a170 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 61 5b 5d  allocated in a[]
1a180 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 73 74 72 75   below */.  stru
1a190 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20  ct SrcList_item 
1a1a0 7b 0a 20 20 20 20 53 63 68 65 6d 61 20 2a 70 53  {.    Schema *pS
1a1b0 63 68 65 6d 61 3b 20 20 2f 2a 20 53 63 68 65 6d  chema;  /* Schem
1a1c0 61 20 74 6f 20 77 68 69 63 68 20 74 68 69 73 20  a to which this 
1a1d0 69 74 65 6d 20 69 73 20 66 69 78 65 64 20 2a 2f  item is fixed */
1a1e0 0a 20 20 20 20 63 68 61 72 20 2a 7a 44 61 74 61  .    char *zData
1a1f0 62 61 73 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f  base;  /* Name o
1a200 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69  f database holdi
1a210 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  ng this table */
1a220 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65  .    char *zName
1a230 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f  ;      /* Name o
1a240 66 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20  f the table */. 
1a250 20 20 20 63 68 61 72 20 2a 7a 41 6c 69 61 73 3b     char *zAlias;
1a260 20 20 20 20 20 2f 2a 20 54 68 65 20 22 42 22 20       /* The "B" 
1a270 70 61 72 74 20 6f 66 20 61 20 22 41 20 41 53 20  part of a "A AS 
1a280 42 22 20 70 68 72 61 73 65 2e 20 20 7a 4e 61 6d  B" phrase.  zNam
1a290 65 20 69 73 20 74 68 65 20 22 41 22 20 2a 2f 0a  e is the "A" */.
1a2a0 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b      Table *pTab;
1a2b0 20 20 20 20 20 20 2f 2a 20 41 6e 20 53 51 4c 20        /* An SQL 
1a2c0 74 61 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64  table correspond
1a2d0 69 6e 67 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a  ing to zName */.
1a2e0 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c      Select *pSel
1a2f0 65 63 74 3b 20 20 2f 2a 20 41 20 53 45 4c 45 43  ect;  /* A SELEC
1a300 54 20 73 74 61 74 65 6d 65 6e 74 20 75 73 65 64  T statement used
1a310 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 61 20 74   in place of a t
1a320 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 20  able name */.   
1a330 20 69 6e 74 20 61 64 64 72 46 69 6c 6c 53 75 62   int addrFillSub
1a340 3b 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66  ;  /* Address of
1a350 20 73 75 62 72 6f 75 74 69 6e 65 20 74 6f 20 6d   subroutine to m
1a360 61 6e 69 66 65 73 74 20 61 20 73 75 62 71 75 65  anifest a subque
1a370 72 79 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65  ry */.    int re
1a380 67 52 65 74 75 72 6e 3b 20 20 20 20 2f 2a 20 52  gReturn;    /* R
1a390 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
1a3a0 72 65 74 75 72 6e 20 61 64 64 72 65 73 73 20 6f  return address o
1a3b0 66 20 61 64 64 72 46 69 6c 6c 53 75 62 20 2a 2f  f addrFillSub */
1a3c0 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65 73 75  .    int regResu
1a3d0 6c 74 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74  lt;    /* Regist
1a3e0 65 72 73 20 68 6f 6c 64 69 6e 67 20 72 65 73 75  ers holding resu
1a3f0 6c 74 73 20 6f 66 20 61 20 63 6f 2d 72 6f 75 74  lts of a co-rout
1a400 69 6e 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63  ine */.    struc
1a410 74 20 7b 0a 20 20 20 20 20 20 75 38 20 6a 6f 69  t {.      u8 joi
1a420 6e 74 79 70 65 3b 20 20 20 20 20 20 2f 2a 20 54  ntype;      /* T
1a430 79 70 65 20 6f 66 20 6a 6f 69 6e 20 62 65 74 77  ype of join betw
1a440 65 65 6e 20 74 68 69 73 20 74 61 62 6c 65 20 61  een this table a
1a450 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  nd the previous 
1a460 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65  */.      unsigne
1a470 64 20 6e 6f 74 49 6e 64 65 78 65 64 20 3a 31 3b  d notIndexed :1;
1a480 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74      /* True if t
1a490 68 65 72 65 20 69 73 20 61 20 4e 4f 54 20 49 4e  here is a NOT IN
1a4a0 44 45 58 45 44 20 63 6c 61 75 73 65 20 2a 2f 0a  DEXED clause */.
1a4b0 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69        unsigned i
1a4c0 73 49 6e 64 65 78 65 64 42 79 20 3a 31 3b 20 20  sIndexedBy :1;  
1a4d0 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 72   /* True if ther
1a4e0 65 20 69 73 20 61 6e 20 49 4e 44 45 58 45 44 20  e is an INDEXED 
1a4f0 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20  BY clause */.   
1a500 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 54 61     unsigned isTa
1a510 62 46 75 6e 63 20 3a 31 3b 20 20 20 20 20 2f 2a  bFunc :1;     /*
1a520 20 54 72 75 65 20 69 66 20 74 61 62 6c 65 2d 76   True if table-v
1a530 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f 6e 20 73  alued-function s
1a540 79 6e 74 61 78 20 2a 2f 0a 20 20 20 20 20 20 75  yntax */.      u
1a550 6e 73 69 67 6e 65 64 20 69 73 43 6f 72 72 65 6c  nsigned isCorrel
1a560 61 74 65 64 20 3a 31 3b 20 20 2f 2a 20 54 72 75  ated :1;  /* Tru
1a570 65 20 69 66 20 73 75 62 2d 71 75 65 72 79 20 69  e if sub-query i
1a580 73 20 63 6f 72 72 65 6c 61 74 65 64 20 2a 2f 0a  s correlated */.
1a590 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 76        unsigned v
1a5a0 69 61 43 6f 72 6f 75 74 69 6e 65 20 3a 31 3b 20  iaCoroutine :1; 
1a5b0 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 65 64 20   /* Implemented 
1a5c0 61 73 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20  as a co-routine 
1a5d0 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65  */.      unsigne
1a5e0 64 20 69 73 52 65 63 75 72 73 69 76 65 20 3a 31  d isRecursive :1
1a5f0 3b 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20  ;   /* True for 
1a600 72 65 63 75 72 73 69 76 65 20 72 65 66 65 72 65  recursive refere
1a610 6e 63 65 20 69 6e 20 57 49 54 48 20 2a 2f 0a 20  nce in WITH */. 
1a620 20 20 20 7d 20 66 67 3b 0a 23 69 66 6e 64 65 66     } fg;.#ifndef
1a630 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50   SQLITE_OMIT_EXP
1a640 4c 41 49 4e 0a 20 20 20 20 75 38 20 69 53 65 6c  LAIN.    u8 iSel
1a650 65 63 74 49 64 3b 20 20 20 20 20 2f 2a 20 49 66  ectId;     /* If
1a660 20 70 53 65 6c 65 63 74 21 3d 30 2c 20 74 68 65   pSelect!=0, the
1a670 20 69 64 20 6f 66 20 74 68 65 20 73 75 62 2d 73   id of the sub-s
1a680 65 6c 65 63 74 20 69 6e 20 45 51 50 20 2a 2f 0a  elect in EQP */.
1a690 23 65 6e 64 69 66 0a 20 20 20 20 69 6e 74 20 69  #endif.    int i
1a6a0 43 75 72 73 6f 72 3b 20 20 20 20 20 20 2f 2a 20  Cursor;      /* 
1a6b0 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20  The VDBE cursor 
1a6c0 6e 75 6d 62 65 72 20 75 73 65 64 20 74 6f 20 61  number used to a
1a6d0 63 63 65 73 73 20 74 68 69 73 20 74 61 62 6c 65  ccess this table
1a6e0 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 4f   */.    Expr *pO
1a6f0 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  n;        /* The
1a700 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66 20 61 20   ON clause of a 
1a710 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49 64 4c 69  join */.    IdLi
1a720 73 74 20 2a 70 55 73 69 6e 67 3b 20 20 20 2f 2a  st *pUsing;   /*
1a730 20 54 68 65 20 55 53 49 4e 47 20 63 6c 61 75 73   The USING claus
1a740 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20  e of a join */. 
1a750 20 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c 55 73     Bitmask colUs
1a760 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e 20 28 31  ed;  /* Bit N (1
1a770 3c 3c 4e 29 20 73 65 74 20 69 66 20 63 6f 6c 75  <<N) set if colu
1a780 6d 6e 20 4e 20 6f 66 20 70 54 61 62 20 69 73 20  mn N of pTab is 
1a790 75 73 65 64 20 2a 2f 0a 20 20 20 20 75 6e 69 6f  used */.    unio
1a7a0 6e 20 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a  n {.      char *
1a7b0 7a 49 6e 64 65 78 65 64 42 79 3b 20 20 20 20 2f  zIndexedBy;    /
1a7c0 2a 20 49 64 65 6e 74 69 66 69 65 72 20 66 72 6f  * Identifier fro
1a7d0 6d 20 22 49 4e 44 45 58 45 44 20 42 59 20 3c 7a  m "INDEXED BY <z
1a7e0 49 6e 64 65 78 3e 22 20 63 6c 61 75 73 65 20 2a  Index>" clause *
1a7f0 2f 0a 20 20 20 20 20 20 45 78 70 72 4c 69 73 74  /.      ExprList
1a800 20 2a 70 46 75 6e 63 41 72 67 3b 20 20 2f 2a 20   *pFuncArg;  /* 
1a810 41 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 61 62  Arguments to tab
1a820 6c 65 2d 76 61 6c 75 65 64 2d 66 75 6e 63 74 69  le-valued-functi
1a830 6f 6e 20 2a 2f 0a 20 20 20 20 7d 20 75 31 3b 0a  on */.    } u1;.
1a840 20 20 20 20 49 6e 64 65 78 20 2a 70 49 42 49 6e      Index *pIBIn
1a850 64 65 78 3b 20 20 2f 2a 20 49 6e 64 65 78 20 73  dex;  /* Index s
1a860 74 72 75 63 74 75 72 65 20 63 6f 72 72 65 73 70  tructure corresp
1a870 6f 6e 64 69 6e 67 20 74 6f 20 75 31 2e 7a 49 6e  onding to u1.zIn
1a880 64 65 78 65 64 42 79 20 2a 2f 0a 20 20 7d 20 61  dexedBy */.  } a
1a890 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20  [1];            
1a8a0 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f   /* One entry fo
1a8b0 72 20 65 61 63 68 20 69 64 65 6e 74 69 66 69 65  r each identifie
1a8c0 72 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f  r on the list */
1a8d0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69  .};../*.** Permi
1a8e0 74 74 65 64 20 76 61 6c 75 65 73 20 6f 66 20 74  tted values of t
1a8f0 68 65 20 53 72 63 4c 69 73 74 2e 61 2e 6a 6f 69  he SrcList.a.joi
1a900 6e 74 79 70 65 20 66 69 65 6c 64 0a 2a 2f 0a 23  ntype field.*/.#
1a910 64 65 66 69 6e 65 20 4a 54 5f 49 4e 4e 45 52 20  define JT_INNER 
1a920 20 20 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a      0x0001    /*
1a930 20 41 6e 79 20 6b 69 6e 64 20 6f 66 20 69 6e 6e   Any kind of inn
1a940 65 72 20 6f 72 20 63 72 6f 73 73 20 6a 6f 69 6e  er or cross join
1a950 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 43   */.#define JT_C
1a960 52 4f 53 53 20 20 20 20 20 30 78 30 30 30 32 20  ROSS     0x0002 
1a970 20 20 20 2f 2a 20 45 78 70 6c 69 63 69 74 20 75     /* Explicit u
1a980 73 65 20 6f 66 20 74 68 65 20 43 52 4f 53 53 20  se of the CROSS 
1a990 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69  keyword */.#defi
1a9a0 6e 65 20 4a 54 5f 4e 41 54 55 52 41 4c 20 20 20  ne JT_NATURAL   
1a9b0 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54 72 75  0x0004    /* Tru
1a9c0 65 20 66 6f 72 20 61 20 22 6e 61 74 75 72 61 6c  e for a "natural
1a9d0 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  " join */.#defin
1a9e0 65 20 4a 54 5f 4c 45 46 54 20 20 20 20 20 20 30  e JT_LEFT      0
1a9f0 78 30 30 30 38 20 20 20 20 2f 2a 20 4c 65 66 74  x0008    /* Left
1aa00 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23   outer join */.#
1aa10 64 65 66 69 6e 65 20 4a 54 5f 52 49 47 48 54 20  define JT_RIGHT 
1aa20 20 20 20 20 30 78 30 30 31 30 20 20 20 20 2f 2a      0x0010    /*
1aa30 20 52 69 67 68 74 20 6f 75 74 65 72 20 6a 6f 69   Right outer joi
1aa40 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  n */.#define JT_
1aa50 4f 55 54 45 52 20 20 20 20 20 30 78 30 30 32 30  OUTER     0x0020
1aa60 20 20 20 20 2f 2a 20 54 68 65 20 22 4f 55 54 45      /* The "OUTE
1aa70 52 22 20 6b 65 79 77 6f 72 64 20 69 73 20 70 72  R" keyword is pr
1aa80 65 73 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  esent */.#define
1aa90 20 4a 54 5f 45 52 52 4f 52 20 20 20 20 20 30 78   JT_ERROR     0x
1aaa0 30 30 34 30 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f  0040    /* unkno
1aab0 77 6e 20 6f 72 20 75 6e 73 75 70 70 6f 72 74 65  wn or unsupporte
1aac0 64 20 6a 6f 69 6e 20 74 79 70 65 20 2a 2f 0a 0a  d join type */..
1aad0 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 61 70 70  ./*.** Flags app
1aae0 72 6f 70 72 69 61 74 65 20 66 6f 72 20 74 68 65  ropriate for the
1aaf0 20 77 63 74 72 6c 46 6c 61 67 73 20 70 61 72 61   wctrlFlags para
1ab00 6d 65 74 65 72 20 6f 66 20 73 71 6c 69 74 65 33  meter of sqlite3
1ab10 57 68 65 72 65 42 65 67 69 6e 28 29 0a 2a 2a 20  WhereBegin().** 
1ab20 61 6e 64 20 74 68 65 20 57 68 65 72 65 49 6e 66  and the WhereInf
1ab30 6f 2e 77 63 74 72 6c 46 6c 61 67 73 20 6d 65 6d  o.wctrlFlags mem
1ab40 62 65 72 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65  ber..**.** Value
1ab50 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e   constraints (en
1ab60 66 6f 72 63 65 64 20 76 69 61 20 61 73 73 65 72  forced via asser
1ab70 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20 57 48 45  t()):.**     WHE
1ab80 52 45 5f 55 53 45 5f 4c 49 4d 49 54 20 20 3d 3d  RE_USE_LIMIT  ==
1ab90 20 53 46 5f 46 69 78 65 64 4c 69 6d 69 74 0a 2a   SF_FixedLimit.*
1aba0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1abb0 4f 52 44 45 52 42 59 5f 4e 4f 52 4d 41 4c 20 20  ORDERBY_NORMAL  
1abc0 20 30 78 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70   0x0000 /* No-op
1abd0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1abe0 45 5f 4f 52 44 45 52 42 59 5f 4d 49 4e 20 20 20  E_ORDERBY_MIN   
1abf0 20 20 20 30 78 30 30 30 31 20 2f 2a 20 4f 52 44     0x0001 /* ORD
1ac00 45 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67  ER BY processing
1ac10 20 66 6f 72 20 6d 69 6e 28 29 20 66 75 6e 63 20   for min() func 
1ac20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1ac30 5f 4f 52 44 45 52 42 59 5f 4d 41 58 20 20 20 20  _ORDERBY_MAX    
1ac40 20 20 30 78 30 30 30 32 20 2f 2a 20 4f 52 44 45    0x0002 /* ORDE
1ac50 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20  R BY processing 
1ac60 66 6f 72 20 6d 61 78 28 29 20 66 75 6e 63 20 2a  for max() func *
1ac70 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1ac80 4f 4e 45 50 41 53 53 5f 44 45 53 49 52 45 44 20  ONEPASS_DESIRED 
1ac90 20 30 78 30 30 30 34 20 2f 2a 20 57 61 6e 74 20   0x0004 /* Want 
1aca0 74 6f 20 64 6f 20 6f 6e 65 2d 70 61 73 73 20 55  to do one-pass U
1acb0 50 44 41 54 45 2f 44 45 4c 45 54 45 20 2a 2f 0a  PDATE/DELETE */.
1acc0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e  #define WHERE_ON
1acd0 45 50 41 53 53 5f 4d 55 4c 54 49 52 4f 57 20 30  EPASS_MULTIROW 0
1ace0 78 30 30 30 38 20 2f 2a 20 4f 4e 45 50 41 53 53  x0008 /* ONEPASS
1acf0 20 69 73 20 6f 6b 20 77 69 74 68 20 6d 75 6c 74   is ok with mult
1ad00 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 23 64 65  iple rows */.#de
1ad10 66 69 6e 65 20 57 48 45 52 45 5f 44 55 50 4c 49  fine WHERE_DUPLI
1ad20 43 41 54 45 53 5f 4f 4b 20 20 20 20 30 78 30 30  CATES_OK    0x00
1ad30 31 30 20 2f 2a 20 4f 6b 20 74 6f 20 72 65 74 75  10 /* Ok to retu
1ad40 72 6e 20 61 20 72 6f 77 20 6d 6f 72 65 20 74 68  rn a row more th
1ad50 61 6e 20 6f 6e 63 65 20 2a 2f 0a 23 64 65 66 69  an once */.#defi
1ad60 6e 65 20 57 48 45 52 45 5f 4f 52 5f 53 55 42 43  ne WHERE_OR_SUBC
1ad70 4c 41 55 53 45 20 20 20 20 20 30 78 30 30 32 30  LAUSE     0x0020
1ad80 20 2f 2a 20 50 72 6f 63 65 73 73 69 6e 67 20 61   /* Processing a
1ad90 20 73 75 62 2d 57 48 45 52 45 20 61 73 20 70 61   sub-WHERE as pa
1ada0 72 74 20 6f 66 0a 20 20 20 20 20 20 20 20 20 20  rt of.          
1adb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1adc0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74              ** t
1add0 68 65 20 4f 52 20 6f 70 74 69 6d 69 7a 61 74 69  he OR optimizati
1ade0 6f 6e 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  on  */.#define W
1adf0 48 45 52 45 5f 47 52 4f 55 50 42 59 20 20 20 20  HERE_GROUPBY    
1ae00 20 20 20 20 20 20 30 78 30 30 34 30 20 2f 2a 20        0x0040 /* 
1ae10 70 4f 72 64 65 72 42 79 20 69 73 20 72 65 61 6c  pOrderBy is real
1ae20 6c 79 20 61 20 47 52 4f 55 50 20 42 59 20 2a 2f  ly a GROUP BY */
1ae30 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
1ae40 49 53 54 49 4e 43 54 42 59 20 20 20 20 20 20 20  ISTINCTBY       
1ae50 30 78 30 30 38 30 20 2f 2a 20 70 4f 72 64 65 72  0x0080 /* pOrder
1ae60 62 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20 44  by is really a D
1ae70 49 53 54 49 4e 43 54 20 63 6c 61 75 73 65 20 2a  ISTINCT clause *
1ae80 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1ae90 57 41 4e 54 5f 44 49 53 54 49 4e 43 54 20 20 20  WANT_DISTINCT   
1aea0 20 30 78 30 31 30 30 20 2f 2a 20 41 6c 6c 20 6f   0x0100 /* All o
1aeb0 75 74 70 75 74 20 6e 65 65 64 73 20 74 6f 20 62  utput needs to b
1aec0 65 20 64 69 73 74 69 6e 63 74 20 2a 2f 0a 23 64  e distinct */.#d
1aed0 65 66 69 6e 65 20 57 48 45 52 45 5f 53 4f 52 54  efine WHERE_SORT
1aee0 42 59 47 52 4f 55 50 20 20 20 20 20 20 30 78 30  BYGROUP      0x0
1aef0 32 30 30 20 2f 2a 20 53 75 70 70 6f 72 74 20 73  200 /* Support s
1af00 71 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f 72  qlite3WhereIsSor
1af10 74 65 64 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  ted() */.#define
1af20 20 57 48 45 52 45 5f 53 45 45 4b 5f 54 41 42 4c   WHERE_SEEK_TABL
1af30 45 20 20 20 20 20 20 20 30 78 30 34 30 30 20 2f  E       0x0400 /
1af40 2a 20 44 6f 20 6e 6f 74 20 64 65 66 65 72 20 73  * Do not defer s
1af50 65 65 6b 73 20 6f 6e 20 6d 61 69 6e 20 74 61 62  eeks on main tab
1af60 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  le */.#define WH
1af70 45 52 45 5f 4f 52 44 45 52 42 59 5f 4c 49 4d 49  ERE_ORDERBY_LIMI
1af80 54 20 20 20 20 30 78 30 38 30 30 20 2f 2a 20 4f  T    0x0800 /* O
1af90 52 44 45 52 42 59 2b 4c 49 4d 49 54 20 6f 6e 20  RDERBY+LIMIT on 
1afa0 74 68 65 20 69 6e 6e 65 72 20 6c 6f 6f 70 20 2a  the inner loop *
1afb0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1afc0 53 45 45 4b 5f 55 4e 49 51 5f 54 41 42 4c 45 20  SEEK_UNIQ_TABLE 
1afd0 20 30 78 31 30 30 30 20 2f 2a 20 44 6f 20 6e 6f   0x1000 /* Do no
1afe0 74 20 64 65 66 65 72 20 73 65 65 6b 73 20 69 66  t defer seeks if
1aff0 20 75 6e 69 71 75 65 20 2a 2f 0a 20 20 20 20 20   unique */.     
1b000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b010 20 20 20 2f 2a 20 20 20 20 20 30 78 32 30 30 30     /*     0x2000
1b020 20 20 20 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c      not currentl
1b030 79 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e  y used */.#defin
1b040 65 20 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d 49  e WHERE_USE_LIMI
1b050 54 20 20 20 20 20 20 20 20 30 78 34 30 30 30 20  T        0x4000 
1b060 2f 2a 20 55 73 65 20 74 68 65 20 4c 49 4d 49 54  /* Use the LIMIT
1b070 20 69 6e 20 63 6f 73 74 20 65 73 74 69 6d 61 74   in cost estimat
1b080 65 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  es */.          
1b090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1b0a0 20 20 20 20 20 30 78 38 30 30 30 20 20 20 20 6e       0x8000    n
1b0b0 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 75 73 65  ot currently use
1b0c0 64 20 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64  d */../* Allowed
1b0d0 20 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66   return values f
1b0e0 72 6f 6d 20 73 71 6c 69 74 65 33 57 68 65 72 65  rom sqlite3Where
1b0f0 49 73 44 69 73 74 69 6e 63 74 28 29 0a 2a 2f 0a  IsDistinct().*/.
1b100 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
1b110 53 54 49 4e 43 54 5f 4e 4f 4f 50 20 20 20 20 20  STINCT_NOOP     
1b120 20 30 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20   0  /* DISTINCT 
1b130 6b 65 79 77 6f 72 64 20 6e 6f 74 20 75 73 65 64  keyword not used
1b140 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1b150 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 49 51 55  E_DISTINCT_UNIQU
1b160 45 20 20 20 20 31 20 20 2f 2a 20 4e 6f 20 64 75  E    1  /* No du
1b170 70 6c 69 63 61 74 65 73 20 2a 2f 0a 23 64 65 66  plicates */.#def
1b180 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
1b190 43 54 5f 4f 52 44 45 52 45 44 20 20 20 32 20 20  CT_ORDERED   2  
1b1a0 2f 2a 20 41 6c 6c 20 64 75 70 6c 69 63 61 74 65  /* All duplicate
1b1b0 73 20 61 72 65 20 61 64 6a 61 63 65 6e 74 20 2a  s are adjacent *
1b1c0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1b1d0 44 49 53 54 49 4e 43 54 5f 55 4e 4f 52 44 45 52  DISTINCT_UNORDER
1b1e0 45 44 20 33 20 20 2f 2a 20 44 75 70 6c 69 63 61  ED 3  /* Duplica
1b1f0 74 65 73 20 61 72 65 20 73 63 61 74 74 65 72 65  tes are scattere
1b200 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61  d */../*.** A Na
1b210 6d 65 43 6f 6e 74 65 78 74 20 64 65 66 69 6e 65  meContext define
1b220 73 20 61 20 63 6f 6e 74 65 78 74 20 69 6e 20 77  s a context in w
1b230 68 69 63 68 20 74 6f 20 72 65 73 6f 6c 76 65 20  hich to resolve 
1b240 74 61 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e  table and column
1b250 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20 54 68 65 20  .** names.  The 
1b260 63 6f 6e 74 65 78 74 20 63 6f 6e 73 69 73 74 73  context consists
1b270 20 6f 66 20 61 20 6c 69 73 74 20 6f 66 20 74 61   of a list of ta
1b280 62 6c 65 73 20 28 74 68 65 20 70 53 72 63 4c 69  bles (the pSrcLi
1b290 73 74 29 20 66 69 65 6c 64 20 61 6e 64 0a 2a 2a  st) field and.**
1b2a0 20 61 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64   a list of named
1b2b0 20 65 78 70 72 65 73 73 69 6f 6e 20 28 70 45 4c   expression (pEL
1b2c0 69 73 74 29 2e 20 20 54 68 65 20 6e 61 6d 65 64  ist).  The named
1b2d0 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74   expression list
1b2e0 20 6d 61 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e   may.** be NULL.
1b2f0 20 20 54 68 65 20 70 53 72 63 20 63 6f 72 72 65    The pSrc corre
1b300 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 46 52  sponds to the FR
1b310 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53  OM clause of a S
1b320 45 4c 45 43 54 20 6f 72 0a 2a 2a 20 74 6f 20 74  ELECT or.** to t
1b330 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f  he table being o
1b340 70 65 72 61 74 65 64 20 6f 6e 20 62 79 20 49 4e  perated on by IN
1b350 53 45 52 54 2c 20 55 50 44 41 54 45 2c 20 6f 72  SERT, UPDATE, or
1b360 20 44 45 4c 45 54 45 2e 20 20 54 68 65 0a 2a 2a   DELETE.  The.**
1b370 20 70 45 4c 69 73 74 20 63 6f 72 72 65 73 70 6f   pEList correspo
1b380 6e 64 73 20 74 6f 20 74 68 65 20 72 65 73 75 6c  nds to the resul
1b390 74 20 73 65 74 20 6f 66 20 61 20 53 45 4c 45 43  t set of a SELEC
1b3a0 54 20 61 6e 64 20 69 73 20 4e 55 4c 4c 20 66 6f  T and is NULL fo
1b3b0 72 0a 2a 2a 20 6f 74 68 65 72 20 73 74 61 74 65  r.** other state
1b3c0 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d  ments..**.** Nam
1b3d0 65 43 6f 6e 74 65 78 74 73 20 63 61 6e 20 62 65  eContexts can be
1b3e0 20 6e 65 73 74 65 64 2e 20 20 57 68 65 6e 20 72   nested.  When r
1b3f0 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 2c 20  esolving names, 
1b400 74 68 65 20 69 6e 6e 65 72 2d 6d 6f 73 74 0a 2a  the inner-most.*
1b410 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 73 65 61  * context is sea
1b420 72 63 68 65 64 20 66 69 72 73 74 2e 20 20 49 66  rched first.  If
1b430 20 6e 6f 20 6d 61 74 63 68 20 69 73 20 66 6f 75   no match is fou
1b440 6e 64 2c 20 74 68 65 20 6e 65 78 74 20 6f 75 74  nd, the next out
1b450 65 72 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73  er.** context is
1b460 20 63 68 65 63 6b 65 64 2e 20 20 49 66 20 74 68   checked.  If th
1b470 65 72 65 20 69 73 20 73 74 69 6c 6c 20 6e 6f 20  ere is still no 
1b480 6d 61 74 63 68 2c 20 74 68 65 20 6e 65 78 74 20  match, the next 
1b490 63 6f 6e 74 65 78 74 0a 2a 2a 20 69 73 20 63 68  context.** is ch
1b4a0 65 63 6b 65 64 2e 20 20 54 68 69 73 20 70 72 6f  ecked.  This pro
1b4b0 63 65 73 73 20 63 6f 6e 74 69 6e 75 65 73 20 75  cess continues u
1b4c0 6e 74 69 6c 20 65 69 74 68 65 72 20 61 20 6d 61  ntil either a ma
1b4d0 74 63 68 20 69 73 20 66 6f 75 6e 64 0a 2a 2a 20  tch is found.** 
1b4e0 6f 72 20 61 6c 6c 20 63 6f 6e 74 65 78 74 73 20  or all contexts 
1b4f0 61 72 65 20 63 68 65 63 6b 2e 20 20 57 68 65 6e  are check.  When
1b500 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e   a match is foun
1b510 64 2c 20 74 68 65 20 6e 52 65 66 20 6d 65 6d 62  d, the nRef memb
1b520 65 72 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6e  er of.** the con
1b530 74 65 78 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20  text containing 
1b540 74 68 65 20 6d 61 74 63 68 20 69 73 20 69 6e 63  the match is inc
1b550 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  remented..**.** 
1b560 45 61 63 68 20 73 75 62 71 75 65 72 79 20 67 65  Each subquery ge
1b570 74 73 20 61 20 6e 65 77 20 4e 61 6d 65 43 6f 6e  ts a new NameCon
1b580 74 65 78 74 2e 20 20 54 68 65 20 70 4e 65 78 74  text.  The pNext
1b590 20 66 69 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f   field points to
1b5a0 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74   the.** NameCont
1b5b0 65 78 74 20 69 6e 20 74 68 65 20 70 61 72 65 6e  ext in the paren
1b5c0 74 20 71 75 65 72 79 2e 20 20 54 68 75 73 20 74  t query.  Thus t
1b5d0 68 65 20 70 72 6f 63 65 73 73 20 6f 66 20 73 63  he process of sc
1b5e0 61 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a 20 4e 61  anning the.** Na
1b5f0 6d 65 43 6f 6e 74 65 78 74 20 6c 69 73 74 20 63  meContext list c
1b600 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 73 65  orresponds to se
1b610 61 72 63 68 69 6e 67 20 74 68 72 6f 75 67 68 20  arching through 
1b620 73 75 63 63 65 73 73 69 76 65 6c 79 20 6f 75 74  successively out
1b630 65 72 0a 2a 2a 20 73 75 62 71 75 65 72 69 65 73  er.** subqueries
1b640 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6d   looking for a m
1b650 61 74 63 68 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  atch..*/.struct 
1b660 4e 61 6d 65 43 6f 6e 74 65 78 74 20 7b 0a 20 20  NameContext {.  
1b670 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20  Parse *pParse;  
1b680 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73       /* The pars
1b690 65 72 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20  er */.  SrcList 
1b6a0 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 2f 2a 20  *pSrcList;   /* 
1b6b0 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c  One or more tabl
1b6c0 65 73 20 75 73 65 64 20 74 6f 20 72 65 73 6f 6c  es used to resol
1b6d0 76 65 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 45 78  ve names */.  Ex
1b6e0 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20  prList *pEList; 
1b6f0 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c     /* Optional l
1b700 69 73 74 20 6f 66 20 72 65 73 75 6c 74 2d 73 65  ist of result-se
1b710 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 41  t columns */.  A
1b720 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f  ggInfo *pAggInfo
1b730 3b 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69  ;   /* Informati
1b740 6f 6e 20 61 62 6f 75 74 20 61 67 67 72 65 67 61  on about aggrega
1b750 74 65 73 20 61 74 20 74 68 69 73 20 6c 65 76 65  tes at this leve
1b760 6c 20 2a 2f 0a 20 20 4e 61 6d 65 43 6f 6e 74 65  l */.  NameConte
1b770 78 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e  xt *pNext;  /* N
1b780 65 78 74 20 6f 75 74 65 72 20 6e 61 6d 65 20 63  ext outer name c
1b790 6f 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66 6f  ontext.  NULL fo
1b7a0 72 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a 20  r outermost */. 
1b7b0 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20   int nRef;      
1b7c0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1b7d0 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76 65  of names resolve
1b7e0 64 20 62 79 20 74 68 69 73 20 63 6f 6e 74 65 78  d by this contex
1b7f0 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b  t */.  int nErr;
1b800 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1b810 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20  umber of errors 
1b820 65 6e 63 6f 75 6e 74 65 72 65 64 20 77 68 69 6c  encountered whil
1b830 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65  e resolving name
1b840 73 20 2a 2f 0a 20 20 75 31 36 20 6e 63 46 6c 61  s */.  u16 ncFla
1b850 67 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 5a  gs;         /* Z
1b860 65 72 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a  ero or more NC_*
1b870 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64 20 62   flags defined b
1b880 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  elow */.};../*.*
1b890 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
1b8a0 20 66 6f 72 20 74 68 65 20 4e 61 6d 65 43 6f 6e   for the NameCon
1b8b0 74 65 78 74 2c 20 6e 63 46 6c 61 67 73 20 66 69  text, ncFlags fi
1b8c0 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65  eld..**.** Value
1b8d0 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 61 6c   constraints (al
1b8e0 6c 20 63 68 65 63 6b 65 64 20 76 69 61 20 61 73  l checked via as
1b8f0 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 4e  sert()):.**    N
1b900 43 5f 48 61 73 41 67 67 20 20 20 20 3d 3d 20 53  C_HasAgg    == S
1b910 46 5f 48 61 73 41 67 67 0a 2a 2a 20 20 20 20 4e  F_HasAgg.**    N
1b920 43 5f 4d 69 6e 4d 61 78 41 67 67 20 3d 3d 20 53  C_MinMaxAgg == S
1b930 46 5f 4d 69 6e 4d 61 78 41 67 67 20 3d 3d 20 53  F_MinMaxAgg == S
1b940 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41  QLITE_FUNC_MINMA
1b950 58 0a 2a 2a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  X.**.*/.#define 
1b960 4e 43 5f 41 6c 6c 6f 77 41 67 67 20 20 30 78 30  NC_AllowAgg  0x0
1b970 30 30 31 20 20 2f 2a 20 41 67 67 72 65 67 61 74  001  /* Aggregat
1b980 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20  e functions are 
1b990 61 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f 0a  allowed here */.
1b9a0 23 64 65 66 69 6e 65 20 4e 43 5f 50 61 72 74 49  #define NC_PartI
1b9b0 64 78 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20  dx   0x0002  /* 
1b9c0 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e  True if resolvin
1b9d0 67 20 61 20 70 61 72 74 69 61 6c 20 69 6e 64 65  g a partial inde
1b9e0 78 20 57 48 45 52 45 20 2a 2f 0a 23 64 65 66 69  x WHERE */.#defi
1b9f0 6e 65 20 4e 43 5f 49 73 43 68 65 63 6b 20 20 20  ne NC_IsCheck   
1ba00 30 78 30 30 30 34 20 20 2f 2a 20 54 72 75 65 20  0x0004  /* True 
1ba10 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d  if resolving nam
1ba20 65 73 20 69 6e 20 61 20 43 48 45 43 4b 20 63 6f  es in a CHECK co
1ba30 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66  nstraint */.#def
1ba40 69 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e 63  ine NC_InAggFunc
1ba50 20 30 78 30 30 30 38 20 20 2f 2a 20 54 72 75 65   0x0008  /* True
1ba60 20 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61 72   if analyzing ar
1ba70 67 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61 67  guments to an ag
1ba80 67 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e  g func */.#defin
1ba90 65 20 4e 43 5f 48 61 73 41 67 67 20 20 20 20 30  e NC_HasAgg    0
1baa0 78 30 30 31 30 20 20 2f 2a 20 4f 6e 65 20 6f 72  x0010  /* One or
1bab0 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65 20   more aggregate 
1bac0 66 75 6e 63 74 69 6f 6e 73 20 73 65 65 6e 20 2a  functions seen *
1bad0 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 64 78  /.#define NC_Idx
1bae0 45 78 70 72 20 20 20 30 78 30 30 32 30 20 20 2f  Expr   0x0020  /
1baf0 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76  * True if resolv
1bb00 69 6e 67 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 43  ing columns of C
1bb10 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 23  REATE INDEX */.#
1bb20 64 65 66 69 6e 65 20 4e 43 5f 56 61 72 53 65 6c  define NC_VarSel
1bb30 65 63 74 20 30 78 30 30 34 30 20 20 2f 2a 20 41  ect 0x0040  /* A
1bb40 20 63 6f 72 72 65 6c 61 74 65 64 20 73 75 62 71   correlated subq
1bb50 75 65 72 79 20 68 61 73 20 62 65 65 6e 20 73 65  uery has been se
1bb60 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  en */.#define NC
1bb70 5f 4d 69 6e 4d 61 78 41 67 67 20 30 78 31 30 30  _MinMaxAgg 0x100
1bb80 30 20 20 2f 2a 20 6d 69 6e 2f 6d 61 78 20 61 67  0  /* min/max ag
1bb90 67 72 65 67 61 74 65 73 20 73 65 65 6e 2e 20 20  gregates seen.  
1bba0 53 65 65 20 6e 6f 74 65 20 61 62 6f 76 65 20 2a  See note above *
1bbb0 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  /../*.** An inst
1bbc0 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
1bbd0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
1bbe0 63 6f 6e 74 61 69 6e 73 20 61 6c 6c 20 69 6e 66  contains all inf
1bbf0 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64  ormation.** need
1bc00 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 63  ed to generate c
1bc10 6f 64 65 20 66 6f 72 20 61 20 73 69 6e 67 6c 65  ode for a single
1bc20 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
1bc30 74 2e 0a 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20  t..**.** nLimit 
1bc40 69 73 20 73 65 74 20 74 6f 20 2d 31 20 69 66 20  is set to -1 if 
1bc50 74 68 65 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49  there is no LIMI
1bc60 54 20 63 6c 61 75 73 65 2e 20 20 6e 4f 66 66 73  T clause.  nOffs
1bc70 65 74 20 69 73 20 73 65 74 20 74 6f 20 30 2e 0a  et is set to 0..
1bc80 2a 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 61  ** If there is a
1bc90 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74   LIMIT clause, t
1bca0 68 65 20 70 61 72 73 65 72 20 73 65 74 73 20 6e  he parser sets n
1bcb0 4c 69 6d 69 74 20 74 6f 20 74 68 65 20 76 61 6c  Limit to the val
1bcc0 75 65 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 6d  ue of the.** lim
1bcd0 69 74 20 61 6e 64 20 6e 4f 66 66 73 65 74 20 74  it and nOffset t
1bce0 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  o the value of t
1bcf0 68 65 20 6f 66 66 73 65 74 20 28 6f 72 20 30 20  he offset (or 0 
1bd00 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 74 0a  if there is not.
1bd10 2a 2a 20 6f 66 66 73 65 74 29 2e 20 20 42 75 74  ** offset).  But
1bd20 20 6c 61 74 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69   later on, nLimi
1bd30 74 20 61 6e 64 20 6e 4f 66 66 73 65 74 20 62 65  t and nOffset be
1bd40 63 6f 6d 65 20 74 68 65 20 6d 65 6d 6f 72 79 20  come the memory 
1bd50 6c 6f 63 61 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20  locations.** in 
1bd60 74 68 65 20 56 44 42 45 20 74 68 61 74 20 72 65  the VDBE that re
1bd70 63 6f 72 64 20 74 68 65 20 6c 69 6d 69 74 20 61  cord the limit a
1bd80 6e 64 20 6f 66 66 73 65 74 20 63 6f 75 6e 74 65  nd offset counte
1bd90 72 73 2e 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70  rs..**.** addrOp
1bda0 65 6e 45 70 68 6d 5b 5d 20 65 6e 74 72 69 65 73  enEphm[] entries
1bdb0 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 61 64 64   contain the add
1bdc0 72 65 73 73 20 6f 66 20 4f 50 5f 4f 70 65 6e 45  ress of OP_OpenE
1bdd0 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 73  phemeral opcodes
1bde0 2e 0a 2a 2a 20 54 68 65 73 65 20 61 64 64 72 65  ..** These addre
1bdf0 73 73 65 73 20 6d 75 73 74 20 62 65 20 73 74 6f  sses must be sto
1be00 72 65 64 20 73 6f 20 74 68 61 74 20 77 65 20 63  red so that we c
1be10 61 6e 20 67 6f 20 62 61 63 6b 20 61 6e 64 20 66  an go back and f
1be20 69 6c 6c 20 69 6e 0a 2a 2a 20 74 68 65 20 50 34  ill in.** the P4
1be30 5f 4b 45 59 49 4e 46 4f 20 61 6e 64 20 50 32 20  _KEYINFO and P2 
1be40 70 61 72 61 6d 65 74 65 72 73 20 6c 61 74 65 72  parameters later
1be50 2e 20 20 4e 65 69 74 68 65 72 20 74 68 65 20 4b  .  Neither the K
1be60 65 79 49 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68  eyInfo nor.** th
1be70 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
1be80 6d 6e 73 20 69 6e 20 50 32 20 63 61 6e 20 62 65  mns in P2 can be
1be90 20 63 6f 6d 70 75 74 65 64 20 61 74 20 74 68 65   computed at the
1bea0 20 73 61 6d 65 20 74 69 6d 65 0a 2a 2a 20 61 73   same time.** as
1beb0 20 74 68 65 20 4f 50 5f 4f 70 65 6e 45 70 68 6d   the OP_OpenEphm
1bec0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
1bed0 63 6f 64 65 64 20 62 65 63 61 75 73 65 20 6e 6f  coded because no
1bee0 74 0a 2a 2a 20 65 6e 6f 75 67 68 20 69 6e 66 6f  t.** enough info
1bef0 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68  rmation about th
1bf00 65 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79  e compound query
1bf10 20 69 73 20 6b 6e 6f 77 6e 20 61 74 20 74 68 61   is known at tha
1bf20 74 20 70 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65 20  t point..** The 
1bf30 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72  KeyInfo for addr
1bf40 4f 70 65 6e 54 72 61 6e 5b 30 5d 20 61 6e 64 20  OpenTran[0] and 
1bf50 5b 31 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c  [1] contains col
1bf60 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
1bf70 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 65 73 75  .** for the resu
1bf80 6c 74 20 73 65 74 2e 20 20 54 68 65 20 4b 65 79  lt set.  The Key
1bf90 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65  Info for addrOpe
1bfa0 6e 45 70 68 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e  nEphm[2] contain
1bfb0 73 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73  s collating.** s
1bfc0 65 71 75 65 6e 63 65 73 20 66 6f 72 20 74 68 65  equences for the
1bfd0 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
1bfe0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65  ..*/.struct Sele
1bff0 63 74 20 7b 0a 20 20 45 78 70 72 4c 69 73 74 20  ct {.  ExprList 
1c000 2a 70 45 4c 69 73 74 3b 20 20 20 20 20 20 2f 2a  *pEList;      /*
1c010 20 54 68 65 20 66 69 65 6c 64 73 20 6f 66 20 74   The fields of t
1c020 68 65 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 75  he result */.  u
1c030 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  8 op;           
1c040 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a        /* One of:
1c050 20 54 4b 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c   TK_UNION TK_ALL
1c060 20 54 4b 5f 49 4e 54 45 52 53 45 43 54 20 54 4b   TK_INTERSECT TK
1c070 5f 45 58 43 45 50 54 20 2a 2f 0a 20 20 4c 6f 67  _EXCEPT */.  Log
1c080 45 73 74 20 6e 53 65 6c 65 63 74 52 6f 77 3b 20  Est nSelectRow; 
1c090 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64      /* Estimated
1c0a0 20 6e 75 6d 62 65 72 20 6f 66 20 72 65 73 75 6c   number of resul
1c0b0 74 20 72 6f 77 73 20 2a 2f 0a 20 20 75 33 32 20  t rows */.  u32 
1c0c0 73 65 6c 46 6c 61 67 73 3b 20 20 20 20 20 20 20  selFlags;       
1c0d0 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 53 46     /* Various SF
1c0e0 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69  _* values */.  i
1c0f0 6e 74 20 69 4c 69 6d 69 74 2c 20 69 4f 66 66 73  nt iLimit, iOffs
1c100 65 74 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20  et;   /* Memory 
1c110 72 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e  registers holdin
1c120 67 20 4c 49 4d 49 54 20 26 20 4f 46 46 53 45 54  g LIMIT & OFFSET
1c130 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 23 69 66   counters */.#if
1c140 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41   SELECTTRACE_ENA
1c150 42 4c 45 44 0a 20 20 63 68 61 72 20 7a 53 65 6c  BLED.  char zSel
1c160 4e 61 6d 65 5b 31 32 5d 3b 20 20 20 20 20 2f 2a  Name[12];     /*
1c170 20 53 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 6f   Symbolic name o
1c180 66 20 74 68 69 73 20 53 45 4c 45 43 54 20 75 73  f this SELECT us
1c190 65 20 66 6f 72 20 64 65 62 75 67 67 69 6e 67 20  e for debugging 
1c1a0 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20  */.#endif.  int 
1c1b0 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b  addrOpenEphm[2];
1c1c0 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68     /* OP_OpenEph
1c1d0 65 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c 61 74  em opcodes relat
1c1e0 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63  ed to this selec
1c1f0 74 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a  t */.  SrcList *
1c200 70 53 72 63 3b 20 20 20 20 20 20 20 20 20 2f 2a  pSrc;         /*
1c210 20 54 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   The FROM clause
1c220 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65   */.  Expr *pWhe
1c230 72 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  re;          /* 
1c240 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
1c250 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
1c260 70 47 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20  pGroupBy;    /* 
1c270 54 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61  The GROUP BY cla
1c280 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  use */.  Expr *p
1c290 48 61 76 69 6e 67 3b 20 20 20 20 20 20 20 20 20  Having;         
1c2a0 2f 2a 20 54 68 65 20 48 41 56 49 4e 47 20 63 6c  /* The HAVING cl
1c2b0 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69  ause */.  ExprLi
1c2c0 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 20  st *pOrderBy;   
1c2d0 20 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59   /* The ORDER BY
1c2e0 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c   clause */.  Sel
1c2f0 65 63 74 20 2a 70 50 72 69 6f 72 3b 20 20 20 20  ect *pPrior;    
1c300 20 20 20 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c      /* Prior sel
1c310 65 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e  ect in a compoun
1c320 64 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65  d select stateme
1c330 6e 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a  nt */.  Select *
1c340 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f  pNext;         /
1c350 2a 20 4e 65 78 74 20 73 65 6c 65 63 74 20 74 6f  * Next select to
1c360 20 74 68 65 20 6c 65 66 74 20 69 6e 20 61 20 63   the left in a c
1c370 6f 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20 45 78 70  ompound */.  Exp
1c380 72 20 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20 20  r *pLimit;      
1c390 20 20 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70      /* LIMIT exp
1c3a0 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65  ression. NULL me
1c3b0 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f  ans not used. */
1c3c0 0a 20 20 45 78 70 72 20 2a 70 4f 66 66 73 65 74  .  Expr *pOffset
1c3d0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 46 46  ;         /* OFF
1c3e0 53 45 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  SET expression. 
1c3f0 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75  NULL means not u
1c400 73 65 64 2e 20 2a 2f 0a 20 20 57 69 74 68 20 2a  sed. */.  With *
1c410 70 57 69 74 68 3b 20 20 20 20 20 20 20 20 20 20  pWith;          
1c420 20 2f 2a 20 57 49 54 48 20 63 6c 61 75 73 65 20   /* WITH clause 
1c430 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 69 73  attached to this
1c440 20 73 65 6c 65 63 74 2e 20 4f 72 20 4e 55 4c 4c   select. Or NULL
1c450 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  . */.};../*.** A
1c460 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
1c470 72 20 53 65 6c 65 63 74 2e 73 65 6c 46 6c 61 67  r Select.selFlag
1c480 73 2e 20 20 54 68 65 20 22 53 46 22 20 70 72 65  s.  The "SF" pre
1c490 66 69 78 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a  fix stands for.*
1c4a0 2a 20 22 53 65 6c 65 63 74 20 46 6c 61 67 22 2e  * "Select Flag".
1c4b0 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e  .**.** Value con
1c4c0 73 74 72 61 69 6e 74 73 20 28 61 6c 6c 20 63 68  straints (all ch
1c4d0 65 63 6b 65 64 20 76 69 61 20 61 73 73 65 72 74  ecked via assert
1c4e0 28 29 29 0a 2a 2a 20 20 20 20 20 53 46 5f 48 61  ()).**     SF_Ha
1c4f0 73 41 67 67 20 20 20 20 20 3d 3d 20 4e 43 5f 48  sAgg     == NC_H
1c500 61 73 41 67 67 0a 2a 2a 20 20 20 20 20 53 46 5f  asAgg.**     SF_
1c510 4d 69 6e 4d 61 78 41 67 67 20 20 3d 3d 20 4e 43  MinMaxAgg  == NC
1c520 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20 20 20 3d  _MinMaxAgg     =
1c530 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49  = SQLITE_FUNC_MI
1c540 4e 4d 41 58 0a 2a 2a 20 20 20 20 20 53 46 5f 46  NMAX.**     SF_F
1c550 69 78 65 64 4c 69 6d 69 74 20 3d 3d 20 57 48 45  ixedLimit == WHE
1c560 52 45 5f 55 53 45 5f 4c 49 4d 49 54 0a 2a 2f 0a  RE_USE_LIMIT.*/.
1c570 23 64 65 66 69 6e 65 20 53 46 5f 44 69 73 74 69  #define SF_Disti
1c580 6e 63 74 20 20 20 20 20 20 20 30 78 30 30 30 30  nct       0x0000
1c590 31 20 20 2f 2a 20 4f 75 74 70 75 74 20 73 68 6f  1  /* Output sho
1c5a0 75 6c 64 20 62 65 20 44 49 53 54 49 4e 43 54 20  uld be DISTINCT 
1c5b0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41 6c  */.#define SF_Al
1c5c0 6c 20 20 20 20 20 20 20 20 20 20 20 20 30 78 30  l            0x0
1c5d0 30 30 30 32 20 20 2f 2a 20 49 6e 63 6c 75 64 65  0002  /* Include
1c5e0 73 20 74 68 65 20 41 4c 4c 20 6b 65 79 77 6f 72  s the ALL keywor
1c5f0 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  d */.#define SF_
1c600 52 65 73 6f 6c 76 65 64 20 20 20 20 20 20 20 30  Resolved       0
1c610 78 30 30 30 30 34 20 20 2f 2a 20 49 64 65 6e 74  x00004  /* Ident
1c620 69 66 69 65 72 73 20 68 61 76 65 20 62 65 65 6e  ifiers have been
1c630 20 72 65 73 6f 6c 76 65 64 20 2a 2f 0a 23 64 65   resolved */.#de
1c640 66 69 6e 65 20 53 46 5f 41 67 67 72 65 67 61 74  fine SF_Aggregat
1c650 65 20 20 20 20 20 20 30 78 30 30 30 30 38 20 20  e      0x00008  
1c660 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67 67 20  /* Contains agg 
1c670 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20 61 20 47  functions or a G
1c680 52 4f 55 50 20 42 59 20 2a 2f 0a 23 64 65 66 69  ROUP BY */.#defi
1c690 6e 65 20 53 46 5f 48 61 73 41 67 67 20 20 20 20  ne SF_HasAgg    
1c6a0 20 20 20 20 20 30 78 30 30 30 31 30 20 20 2f 2a       0x00010  /*
1c6b0 20 43 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67   Contains aggreg
1c6c0 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  ate functions */
1c6d0 0a 23 64 65 66 69 6e 65 20 53 46 5f 55 73 65 73  .#define SF_Uses
1c6e0 45 70 68 65 6d 65 72 61 6c 20 20 30 78 30 30 30  Ephemeral  0x000
1c6f0 32 30 20 20 2f 2a 20 55 73 65 73 20 74 68 65 20  20  /* Uses the 
1c700 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70  OpenEphemeral op
1c710 63 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  code */.#define 
1c720 53 46 5f 45 78 70 61 6e 64 65 64 20 20 20 20 20  SF_Expanded     
1c730 20 20 30 78 30 30 30 34 30 20 20 2f 2a 20 73 71    0x00040  /* sq
1c740 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 61 6e  lite3SelectExpan
1c750 64 28 29 20 63 61 6c 6c 65 64 20 6f 6e 20 74 68  d() called on th
1c760 69 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  is */.#define SF
1c770 5f 48 61 73 54 79 70 65 49 6e 66 6f 20 20 20 20  _HasTypeInfo    
1c780 30 78 30 30 30 38 30 20 20 2f 2a 20 46 52 4f 4d  0x00080  /* FROM
1c790 20 73 75 62 71 75 65 72 69 65 73 20 68 61 76 65   subqueries have
1c7a0 20 54 61 62 6c 65 20 6d 65 74 61 64 61 74 61 20   Table metadata 
1c7b0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 43 6f  */.#define SF_Co
1c7c0 6d 70 6f 75 6e 64 20 20 20 20 20 20 20 30 78 30  mpound       0x0
1c7d0 30 31 30 30 20 20 2f 2a 20 50 61 72 74 20 6f 66  0100  /* Part of
1c7e0 20 61 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72   a compound quer
1c7f0 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  y */.#define SF_
1c800 56 61 6c 75 65 73 20 20 20 20 20 20 20 20 20 30  Values         0
1c810 78 30 30 32 30 30 20 20 2f 2a 20 53 79 6e 74 68  x00200  /* Synth
1c820 65 73 69 7a 65 64 20 66 72 6f 6d 20 56 41 4c 55  esized from VALU
1c830 45 53 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65  ES clause */.#de
1c840 66 69 6e 65 20 53 46 5f 4d 75 6c 74 69 56 61 6c  fine SF_MultiVal
1c850 75 65 20 20 20 20 20 30 78 30 30 34 30 30 20 20  ue     0x00400  
1c860 2f 2a 20 53 69 6e 67 6c 65 20 56 41 4c 55 45 53  /* Single VALUES
1c870 20 74 65 72 6d 20 77 69 74 68 20 6d 75 6c 74 69   term with multi
1c880 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 23 64 65 66  ple rows */.#def
1c890 69 6e 65 20 53 46 5f 4e 65 73 74 65 64 46 72 6f  ine SF_NestedFro
1c8a0 6d 20 20 20 20 20 30 78 30 30 38 30 30 20 20 2f  m     0x00800  /
1c8b0 2a 20 50 61 72 74 20 6f 66 20 61 20 70 61 72 65  * Part of a pare
1c8c0 6e 74 68 65 73 69 7a 65 64 20 46 52 4f 4d 20 63  nthesized FROM c
1c8d0 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65  lause */.#define
1c8e0 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20   SF_MinMaxAgg   
1c8f0 20 20 20 30 78 30 31 30 30 30 20 20 2f 2a 20 41     0x01000  /* A
1c900 67 67 72 65 67 61 74 65 20 63 6f 6e 74 61 69 6e  ggregate contain
1c910 69 6e 67 20 6d 69 6e 28 29 20 6f 72 20 6d 61 78  ing min() or max
1c920 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  () */.#define SF
1c930 5f 52 65 63 75 72 73 69 76 65 20 20 20 20 20 20  _Recursive      
1c940 30 78 30 32 30 30 30 20 20 2f 2a 20 54 68 65 20  0x02000  /* The 
1c950 72 65 63 75 72 73 69 76 65 20 70 61 72 74 20 6f  recursive part o
1c960 66 20 61 20 72 65 63 75 72 73 69 76 65 20 43 54  f a recursive CT
1c970 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  E */.#define SF_
1c980 46 69 78 65 64 4c 69 6d 69 74 20 20 20 20 20 30  FixedLimit     0
1c990 78 30 34 30 30 30 20 20 2f 2a 20 6e 53 65 6c 65  x04000  /* nSele
1c9a0 63 74 52 6f 77 20 73 65 74 20 62 79 20 61 20 63  ctRow set by a c
1c9b0 6f 6e 73 74 61 6e 74 20 4c 49 4d 49 54 20 2a 2f  onstant LIMIT */
1c9c0 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 61 79 62  .#define SF_Mayb
1c9d0 65 43 6f 6e 76 65 72 74 20 20 20 30 78 30 38 30  eConvert   0x080
1c9e0 30 30 20 20 2f 2a 20 4e 65 65 64 20 63 6f 6e 76  00  /* Need conv
1c9f0 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63  ertCompoundSelec
1ca00 74 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f  tToSubquery() */
1ca10 0a 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6e 76  .#define SF_Conv
1ca20 65 72 74 65 64 20 20 20 20 20 20 30 78 31 30 30  erted      0x100
1ca30 30 30 20 20 2f 2a 20 42 79 20 63 6f 6e 76 65 72  00  /* By conver
1ca40 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54  tCompoundSelectT
1ca50 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 23  oSubquery() */.#
1ca60 64 65 66 69 6e 65 20 53 46 5f 49 6e 63 6c 75 64  define SF_Includ
1ca70 65 48 69 64 64 65 6e 20 20 30 78 32 30 30 30 30  eHidden  0x20000
1ca80 20 20 2f 2a 20 49 6e 63 6c 75 64 65 20 68 69 64    /* Include hid
1ca90 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 6f  den columns in o
1caa0 75 74 70 75 74 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a  utput */.../*.**
1cab0 20 54 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   The results of 
1cac0 61 20 53 45 4c 45 43 54 20 63 61 6e 20 62 65 20  a SELECT can be 
1cad0 64 69 73 74 72 69 62 75 74 65 64 20 69 6e 20 73  distributed in s
1cae0 65 76 65 72 61 6c 20 77 61 79 73 2c 20 61 73 20  everal ways, as 
1caf0 64 65 66 69 6e 65 64 0a 2a 2a 20 62 79 20 6f 6e  defined.** by on
1cb00 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
1cb10 6e 67 20 6d 61 63 72 6f 73 2e 20 20 54 68 65 20  ng macros.  The 
1cb20 22 53 52 54 22 20 70 72 65 66 69 78 20 6d 65 61  "SRT" prefix mea
1cb30 6e 73 20 22 53 45 4c 45 43 54 20 52 65 73 75 6c  ns "SELECT Resul
1cb40 74 0a 2a 2a 20 54 79 70 65 22 2e 0a 2a 2a 0a 2a  t.** Type"..**.*
1cb50 2a 20 20 20 20 20 53 52 54 5f 55 6e 69 6f 6e 20  *     SRT_Union 
1cb60 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73 75        Store resu
1cb70 6c 74 73 20 61 73 20 61 20 6b 65 79 20 69 6e 20  lts as a key in 
1cb80 61 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64 65  a temporary inde
1cb90 78 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  x.**            
1cba0 20 20 20 20 20 20 20 20 20 69 64 65 6e 74 69 66           identif
1cbb0 69 65 64 20 62 79 20 70 44 65 73 74 2d 3e 69 53  ied by pDest->iS
1cbc0 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  DParm..**.**    
1cbd0 20 53 52 54 5f 45 78 63 65 70 74 20 20 20 20 20   SRT_Except     
1cbe0 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 73 20   Remove results 
1cbf0 66 72 6f 6d 20 74 68 65 20 74 65 6d 70 6f 72 61  from the tempora
1cc00 72 79 20 69 6e 64 65 78 20 70 44 65 73 74 2d 3e  ry index pDest->
1cc10 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20  iSDParm..**.**  
1cc20 20 20 20 53 52 54 5f 45 78 69 73 74 73 20 20 20     SRT_Exists   
1cc30 20 20 20 53 74 6f 72 65 20 61 20 31 20 69 6e 20     Store a 1 in 
1cc40 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 70 44 65 73  memory cell pDes
1cc50 74 2d 3e 69 53 44 50 61 72 6d 20 69 66 20 74 68  t->iSDParm if th
1cc60 65 20 72 65 73 75 6c 74 0a 2a 2a 20 20 20 20 20  e result.**     
1cc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc80 73 65 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79  set is not empty
1cc90 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1cca0 44 69 73 63 61 72 64 20 20 20 20 20 54 68 72 6f  Discard     Thro
1ccb0 77 20 74 68 65 20 72 65 73 75 6c 74 73 20 61 77  w the results aw
1ccc0 61 79 2e 20 20 54 68 69 73 20 69 73 20 75 73 65  ay.  This is use
1ccd0 64 20 62 79 20 53 45 4c 45 43 54 0a 2a 2a 20 20  d by SELECT.**  
1cce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ccf0 20 20 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69     statements wi
1cd00 74 68 69 6e 20 74 72 69 67 67 65 72 73 20 77 68  thin triggers wh
1cd10 6f 73 65 20 6f 6e 6c 79 20 70 75 72 70 6f 73 65  ose only purpose
1cd20 20 69 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20   is.**          
1cd30 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 73             the s
1cd40 69 64 65 2d 65 66 66 65 63 74 73 20 6f 66 20 66  ide-effects of f
1cd50 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20  unctions..**.** 
1cd60 41 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65  All of the above
1cd70 20 61 72 65 20 66 72 65 65 20 74 6f 20 69 67 6e   are free to ign
1cd80 6f 72 65 20 74 68 65 69 72 20 4f 52 44 45 52 20  ore their ORDER 
1cd90 42 59 20 63 6c 61 75 73 65 2e 20 54 68 6f 73 65  BY clause. Those
1cda0 20 74 68 61 74 0a 2a 2a 20 66 6f 6c 6c 6f 77 20   that.** follow 
1cdb0 6d 75 73 74 20 68 6f 6e 6f 72 20 74 68 65 20 4f  must honor the O
1cdc0 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a  RDER BY clause..
1cdd0 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4f 75  **.**     SRT_Ou
1cde0 74 70 75 74 20 20 20 20 20 20 47 65 6e 65 72 61  tput      Genera
1cdf0 74 65 20 61 20 72 6f 77 20 6f 66 20 6f 75 74 70  te a row of outp
1ce00 75 74 20 28 75 73 69 6e 67 20 74 68 65 20 4f 50  ut (using the OP
1ce10 5f 52 65 73 75 6c 74 52 6f 77 0a 2a 2a 20 20 20  _ResultRow.**   
1ce20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce30 20 20 6f 70 63 6f 64 65 29 20 66 6f 72 20 65 61    opcode) for ea
1ce40 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20 72 65  ch row in the re
1ce50 73 75 6c 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20  sult set..**.** 
1ce60 20 20 20 20 53 52 54 5f 4d 65 6d 20 20 20 20 20      SRT_Mem     
1ce70 20 20 20 20 4f 6e 6c 79 20 76 61 6c 69 64 20 69      Only valid i
1ce80 66 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  f the result is 
1ce90 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e  a single column.
1cea0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1ceb0 20 20 20 20 20 20 20 20 53 74 6f 72 65 20 74 68          Store th
1cec0 65 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 6f  e first column o
1ced0 66 20 74 68 65 20 66 69 72 73 74 20 72 65 73 75  f the first resu
1cee0 6c 74 20 72 6f 77 0a 2a 2a 20 20 20 20 20 20 20  lt row.**       
1cef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
1cf00 20 72 65 67 69 73 74 65 72 20 70 44 65 73 74 2d   register pDest-
1cf10 3e 69 53 44 50 61 72 6d 20 74 68 65 6e 20 61 62  >iSDParm then ab
1cf20 61 6e 64 6f 6e 20 74 68 65 20 72 65 73 74 0a 2a  andon the rest.*
1cf30 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1cf40 20 20 20 20 20 20 6f 66 20 74 68 65 20 71 75 65        of the que
1cf50 72 79 2e 20 20 54 68 69 73 20 64 65 73 74 69 6e  ry.  This destin
1cf60 61 74 69 6f 6e 20 69 6d 70 6c 69 65 73 20 22 4c  ation implies "L
1cf70 49 4d 49 54 20 31 22 2e 0a 2a 2a 0a 2a 2a 20 20  IMIT 1"..**.**  
1cf80 20 20 20 53 52 54 5f 53 65 74 20 20 20 20 20 20     SRT_Set      
1cf90 20 20 20 54 68 65 20 72 65 73 75 6c 74 20 6d 75     The result mu
1cfa0 73 74 20 62 65 20 61 20 73 69 6e 67 6c 65 20 63  st be a single c
1cfb0 6f 6c 75 6d 6e 2e 20 20 53 74 6f 72 65 20 65 61  olumn.  Store ea
1cfc0 63 68 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ch.**           
1cfd0 20 20 20 20 20 20 20 20 20 20 72 6f 77 20 6f 66            row of
1cfe0 20 72 65 73 75 6c 74 20 61 73 20 74 68 65 20 6b   result as the k
1cff0 65 79 20 69 6e 20 74 61 62 6c 65 20 70 44 65 73  ey in table pDes
1d000 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20  t->iSDParm..**  
1d010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d020 20 20 20 41 70 70 6c 79 20 74 68 65 20 61 66 66     Apply the aff
1d030 69 6e 69 74 79 20 70 44 65 73 74 2d 3e 61 66 66  inity pDest->aff
1d040 53 64 73 74 20 62 65 66 6f 72 65 20 73 74 6f 72  Sdst before stor
1d050 69 6e 67 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ing.**          
1d060 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
1d070 74 73 2e 20 20 55 73 65 64 20 74 6f 20 69 6d 70  ts.  Used to imp
1d080 6c 65 6d 65 6e 74 20 22 49 4e 20 28 53 45 4c 45  lement "IN (SELE
1d090 43 54 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a 20  CT ...)"..**.** 
1d0a0 20 20 20 20 53 52 54 5f 45 70 68 65 6d 54 61 62      SRT_EphemTab
1d0b0 20 20 20 20 43 72 65 61 74 65 20 61 6e 20 74 65      Create an te
1d0c0 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44  mporary table pD
1d0d0 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 61 6e 64  est->iSDParm and
1d0e0 20 73 74 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20   store.**       
1d0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1d100 65 20 72 65 73 75 6c 74 20 74 68 65 72 65 2e 20  e result there. 
1d110 54 68 65 20 63 75 72 73 6f 72 20 69 73 20 6c 65  The cursor is le
1d120 66 74 20 6f 70 65 6e 20 61 66 74 65 72 0a 2a 2a  ft open after.**
1d130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d140 20 20 20 20 20 72 65 74 75 72 6e 69 6e 67 2e 20       returning. 
1d150 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53 52   This is like SR
1d160 54 5f 54 61 62 6c 65 20 65 78 63 65 70 74 20 74  T_Table except t
1d170 68 61 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  hat.**          
1d180 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20             this 
1d190 64 65 73 74 69 6e 61 74 69 6f 6e 20 75 73 65 73  destination uses
1d1a0 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
1d1b0 6c 20 74 6f 20 63 72 65 61 74 65 0a 2a 2a 20 20  l to create.**  
1d1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d1d0 20 20 20 74 68 65 20 74 61 62 6c 65 20 66 69 72     the table fir
1d1e0 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  st..**.**     SR
1d1f0 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 47 65  T_Coroutine   Ge
1d200 6e 65 72 61 74 65 20 61 20 63 6f 2d 72 6f 75 74  nerate a co-rout
1d210 69 6e 65 20 74 68 61 74 20 72 65 74 75 72 6e 73  ine that returns
1d220 20 61 20 6e 65 77 20 72 6f 77 20 6f 66 0a 2a 2a   a new row of.**
1d230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d240 20 20 20 20 20 72 65 73 75 6c 74 73 20 65 61 63       results eac
1d250 68 20 74 69 6d 65 20 69 74 20 69 73 20 69 6e 76  h time it is inv
1d260 6f 6b 65 64 2e 20 20 54 68 65 20 65 6e 74 72 79  oked.  The entry
1d270 20 70 6f 69 6e 74 0a 2a 2a 20 20 20 20 20 20 20   point.**       
1d280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 66                of
1d290 20 74 68 65 20 63 6f 2d 72 6f 75 74 69 6e 65 20   the co-routine 
1d2a0 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
1d2b0 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53 44  ister pDest->iSD
1d2c0 50 61 72 6d 0a 2a 2a 20 20 20 20 20 20 20 20 20  Parm.**         
1d2d0 20 20 20 20 20 20 20 20 20 20 20 20 61 6e 64 20              and 
1d2e0 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77 20 69  the result row i
1d2f0 73 20 73 74 6f 72 65 64 20 69 6e 20 70 44 65 73  s stored in pDes
1d300 74 2d 3e 6e 44 65 73 74 20 72 65 67 69 73 74 65  t->nDest registe
1d310 72 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  rs.**           
1d320 20 20 20 20 20 20 20 20 20 20 73 74 61 72 74 69            starti
1d330 6e 67 20 77 69 74 68 20 70 44 65 73 74 2d 3e 69  ng with pDest->i
1d340 53 64 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  Sdst..**.**     
1d350 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20  SRT_Table       
1d360 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e  Store results in
1d370 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
1d380 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e   pDest->iSDParm.
1d390 0a 2a 2a 20 20 20 20 20 53 52 54 5f 46 69 66 6f  .**     SRT_Fifo
1d3a0 20 20 20 20 20 20 20 20 54 68 69 73 20 69 73 20          This is 
1d3b0 6c 69 6b 65 20 53 52 54 5f 45 70 68 65 6d 54 61  like SRT_EphemTa
1d3c0 62 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  b except that th
1d3d0 65 20 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20  e table.**      
1d3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1d3f0 73 20 61 73 73 75 6d 65 64 20 74 6f 20 61 6c 72  s assumed to alr
1d400 65 61 64 79 20 62 65 20 6f 70 65 6e 2e 20 20 53  eady be open.  S
1d410 52 54 5f 46 69 66 6f 20 68 61 73 0a 2a 2a 20 20  RT_Fifo has.**  
1d420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d430 20 20 20 74 68 65 20 61 64 64 69 74 69 6f 6e 61     the additiona
1d440 6c 20 70 72 6f 70 65 72 74 79 20 6f 66 20 62 65  l property of be
1d450 69 6e 67 20 61 62 6c 65 20 74 6f 20 69 67 6e 6f  ing able to igno
1d460 72 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  re.**           
1d470 20 20 20 20 20 20 20 20 20 20 74 68 65 20 4f 52            the OR
1d480 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a  DER BY clause..*
1d490 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73  *.**     SRT_Dis
1d4a0 74 46 69 66 6f 20 20 20 20 53 74 6f 72 65 20 72  tFifo    Store r
1d4b0 65 73 75 6c 74 73 20 69 6e 20 61 20 74 65 6d 70  esults in a temp
1d4c0 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73  orary table pDes
1d4d0 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20  t->iSDParm..**  
1d4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d4f0 20 20 20 42 75 74 20 61 6c 73 6f 20 75 73 65 20     But also use 
1d500 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20  temporary table 
1d510 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31  pDest->iSDParm+1
1d520 20 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20   as.**          
1d530 20 20 20 20 20 20 20 20 20 20 20 61 20 72 65 63             a rec
1d540 6f 72 64 20 6f 66 20 61 6c 6c 20 70 72 69 6f 72  ord of all prior
1d550 20 72 65 73 75 6c 74 73 20 61 6e 64 20 69 67 6e   results and ign
1d560 6f 72 65 20 61 6e 79 20 64 75 70 6c 69 63 61 74  ore any duplicat
1d570 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
1d580 20 20 20 20 20 20 20 20 20 72 6f 77 73 2e 20 20           rows.  
1d590 4e 61 6d 65 20 6d 65 61 6e 73 3a 20 20 22 44 69  Name means:  "Di
1d5a0 73 74 69 6e 63 74 20 46 69 66 6f 22 2e 0a 2a 2a  stinct Fifo"..**
1d5b0 0a 2a 2a 20 20 20 20 20 53 52 54 5f 51 75 65 75  .**     SRT_Queu
1d5c0 65 20 20 20 20 20 20 20 53 74 6f 72 65 20 72 65  e       Store re
1d5d0 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69 74  sults in priorit
1d5e0 79 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e 69  y queue pDest->i
1d5f0 53 44 50 61 72 6d 20 28 72 65 61 6c 6c 79 0a 2a  SDParm (really.*
1d600 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1d610 20 20 20 20 20 20 61 6e 20 69 6e 64 65 78 29 2e        an index).
1d620 20 20 41 70 70 65 6e 64 20 61 20 73 65 71 75 65    Append a seque
1d630 6e 63 65 20 6e 75 6d 62 65 72 20 73 6f 20 74 68  nce number so th
1d640 61 74 20 61 6c 6c 20 65 6e 74 72 69 65 73 0a 2a  at all entries.*
1d650 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1d660 20 20 20 20 20 20 61 72 65 20 64 69 73 74 69 6e        are distin
1d670 63 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  ct..**.**     SR
1d680 54 5f 44 69 73 74 51 75 65 75 65 20 20 20 53 74  T_DistQueue   St
1d690 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70  ore results in p
1d6a0 72 69 6f 72 69 74 79 20 71 75 65 75 65 20 70 44  riority queue pD
1d6b0 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 6f 6e 6c  est->iSDParm onl
1d6c0 79 20 69 66 0a 2a 2a 20 20 20 20 20 20 20 20 20  y if.**         
1d6d0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
1d6e0 73 61 6d 65 20 72 65 63 6f 72 64 20 68 61 73 20  same record has 
1d6f0 6e 65 76 65 72 20 62 65 65 6e 20 73 74 6f 72 65  never been store
1d700 64 20 62 65 66 6f 72 65 2e 20 20 54 68 65 0a 2a  d before.  The.*
1d710 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1d720 20 20 20 20 20 20 69 6e 64 65 78 20 61 74 20 70        index at p
1d730 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20  Dest->iSDParm+1 
1d740 68 6f 6c 64 20 61 6c 6c 20 70 72 69 6f 72 20 73  hold all prior s
1d750 74 6f 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  tores..*/.#defin
1d760 65 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20  e SRT_Union     
1d770 20 20 20 31 20 20 2f 2a 20 53 74 6f 72 65 20 72     1  /* Store r
1d780 65 73 75 6c 74 20 61 73 20 6b 65 79 73 20 69 6e  esult as keys in
1d790 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65   an index */.#de
1d7a0 66 69 6e 65 20 53 52 54 5f 45 78 63 65 70 74 20  fine SRT_Except 
1d7b0 20 20 20 20 20 20 32 20 20 2f 2a 20 52 65 6d 6f        2  /* Remo
1d7c0 76 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20 61  ve result from a
1d7d0 20 55 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a   UNION index */.
1d7e0 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78 69 73  #define SRT_Exis
1d7f0 74 73 20 20 20 20 20 20 20 33 20 20 2f 2a 20 53  ts       3  /* S
1d800 74 6f 72 65 20 31 20 69 66 20 74 68 65 20 72 65  tore 1 if the re
1d810 73 75 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70 74  sult is not empt
1d820 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  y */.#define SRT
1d830 5f 44 69 73 63 61 72 64 20 20 20 20 20 20 34 20  _Discard      4 
1d840 20 2f 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65 20   /* Do not save 
1d850 74 68 65 20 72 65 73 75 6c 74 73 20 61 6e 79 77  the results anyw
1d860 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  here */.#define 
1d870 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20 20  SRT_Fifo        
1d880 20 35 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73   5  /* Store res
1d890 75 6c 74 20 61 73 20 64 61 74 61 20 77 69 74 68  ult as data with
1d8a0 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f   an automatic ro
1d8b0 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  wid */.#define S
1d8c0 52 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20 20  RT_DistFifo     
1d8d0 36 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 46  6  /* Like SRT_F
1d8e0 69 66 6f 2c 20 62 75 74 20 75 6e 69 71 75 65 20  ifo, but unique 
1d8f0 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a  results only */.
1d900 23 64 65 66 69 6e 65 20 53 52 54 5f 51 75 65 75  #define SRT_Queu
1d910 65 20 20 20 20 20 20 20 20 37 20 20 2f 2a 20 53  e        7  /* S
1d920 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61  tore result in a
1d930 6e 20 71 75 65 75 65 20 2a 2f 0a 23 64 65 66 69  n queue */.#defi
1d940 6e 65 20 53 52 54 5f 44 69 73 74 51 75 65 75 65  ne SRT_DistQueue
1d950 20 20 20 20 38 20 20 2f 2a 20 4c 69 6b 65 20 53      8  /* Like S
1d960 52 54 5f 51 75 65 75 65 2c 20 62 75 74 20 75 6e  RT_Queue, but un
1d970 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c  ique results onl
1d980 79 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52 44  y */../* The ORD
1d990 45 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 20  ER BY clause is 
1d9a0 69 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c 20  ignored for all 
1d9b0 6f 66 20 74 68 65 20 61 62 6f 76 65 20 2a 2f 0a  of the above */.
1d9c0 23 64 65 66 69 6e 65 20 49 67 6e 6f 72 61 62 6c  #define Ignorabl
1d9d0 65 4f 72 64 65 72 62 79 28 58 29 20 28 28 58 2d  eOrderby(X) ((X-
1d9e0 3e 65 44 65 73 74 29 3c 3d 53 52 54 5f 44 69 73  >eDest)<=SRT_Dis
1d9f0 74 51 75 65 75 65 29 0a 0a 23 64 65 66 69 6e 65  tQueue)..#define
1da00 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20   SRT_Output     
1da10 20 20 39 20 20 2f 2a 20 4f 75 74 70 75 74 20 65    9  /* Output e
1da20 61 63 68 20 72 6f 77 20 6f 66 20 72 65 73 75 6c  ach row of resul
1da30 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  t */.#define SRT
1da40 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 31 30 20  _Mem         10 
1da50 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
1da60 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c   in a memory cel
1da70 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  l */.#define SRT
1da80 5f 53 65 74 20 20 20 20 20 20 20 20 20 31 31 20  _Set         11 
1da90 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
1daa0 73 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20  s as keys in an 
1dab0 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65  index */.#define
1dac0 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20   SRT_EphemTab   
1dad0 20 31 32 20 20 2f 2a 20 43 72 65 61 74 65 20 74   12  /* Create t
1dae0 72 61 6e 73 69 65 6e 74 20 74 61 62 20 61 6e 64  ransient tab and
1daf0 20 73 74 6f 72 65 20 6c 69 6b 65 20 53 52 54 5f   store like SRT_
1db00 54 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65  Table */.#define
1db10 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20   SRT_Coroutine  
1db20 20 31 33 20 20 2f 2a 20 47 65 6e 65 72 61 74 65   13  /* Generate
1db30 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66   a single row of
1db40 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69   result */.#defi
1db50 6e 65 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20  ne SRT_Table    
1db60 20 20 20 31 34 20 20 2f 2a 20 53 74 6f 72 65 20     14  /* Store 
1db70 72 65 73 75 6c 74 20 61 73 20 64 61 74 61 20 77  result as data w
1db80 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63  ith an automatic
1db90 20 72 6f 77 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   rowid */../*.**
1dba0 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
1dbb0 74 68 69 73 20 6f 62 6a 65 63 74 20 64 65 73 63  this object desc
1dbc0 72 69 62 65 73 20 77 68 65 72 65 20 74 6f 20 70  ribes where to p
1dbd0 75 74 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ut of the result
1dbe0 73 20 6f 66 0a 2a 2a 20 61 20 53 45 4c 45 43 54  s of.** a SELECT
1dbf0 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73   statement..*/.s
1dc00 74 72 75 63 74 20 53 65 6c 65 63 74 44 65 73 74  truct SelectDest
1dc10 20 7b 0a 20 20 75 38 20 65 44 65 73 74 3b 20 20   {.  u8 eDest;  
1dc20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 77            /* How
1dc30 20 74 6f 20 64 69 73 70 6f 73 65 20 6f 66 20 74   to dispose of t
1dc40 68 65 20 72 65 73 75 6c 74 73 2e 20 20 4f 6e 20  he results.  On 
1dc50 6f 66 20 53 52 54 5f 2a 20 61 62 6f 76 65 2e 20  of SRT_* above. 
1dc60 2a 2f 0a 20 20 69 6e 74 20 69 53 44 50 61 72 6d  */.  int iSDParm
1dc70 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 70  ;         /* A p
1dc80 61 72 61 6d 65 74 65 72 20 75 73 65 64 20 62 79  arameter used by
1dc90 20 74 68 65 20 65 44 65 73 74 20 64 69 73 70 6f   the eDest dispo
1dca0 73 61 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20  sal method */.  
1dcb0 69 6e 74 20 69 53 64 73 74 3b 20 20 20 20 20 20  int iSdst;      
1dcc0 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67       /* Base reg
1dcd0 69 73 74 65 72 20 77 68 65 72 65 20 72 65 73 75  ister where resu
1dce0 6c 74 73 20 61 72 65 20 77 72 69 74 74 65 6e 20  lts are written 
1dcf0 2a 2f 0a 20 20 69 6e 74 20 6e 53 64 73 74 3b 20  */.  int nSdst; 
1dd00 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1dd10 62 65 72 20 6f 66 20 72 65 67 69 73 74 65 72 73  ber of registers
1dd20 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20   allocated */.  
1dd30 63 68 61 72 20 2a 7a 41 66 66 53 64 73 74 3b 20  char *zAffSdst; 
1dd40 20 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79       /* Affinity
1dd50 20 75 73 65 64 20 77 68 65 6e 20 65 44 65 73 74   used when eDest
1dd60 3d 3d 53 52 54 5f 53 65 74 20 2a 2f 0a 20 20 45  ==SRT_Set */.  E
1dd70 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42  xprList *pOrderB
1dd80 79 3b 20 20 2f 2a 20 4b 65 79 20 63 6f 6c 75 6d  y;  /* Key colum
1dd90 6e 73 20 66 6f 72 20 53 52 54 5f 51 75 65 75 65  ns for SRT_Queue
1dda0 20 61 6e 64 20 53 52 54 5f 44 69 73 74 51 75 65   and SRT_DistQue
1ddb0 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ue */.};../*.** 
1ddc0 44 75 72 69 6e 67 20 63 6f 64 65 20 67 65 6e 65  During code gene
1ddd0 72 61 74 69 6f 6e 20 6f 66 20 73 74 61 74 65 6d  ration of statem
1dde0 65 6e 74 73 20 74 68 61 74 20 64 6f 20 69 6e 73  ents that do ins
1ddf0 65 72 74 73 20 69 6e 74 6f 20 41 55 54 4f 49 4e  erts into AUTOIN
1de00 43 52 45 4d 45 4e 54 0a 2a 2a 20 74 61 62 6c 65  CREMENT.** table
1de10 73 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  s, the following
1de20 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20   information is 
1de30 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20  attached to the 
1de40 54 61 62 6c 65 2e 75 2e 61 75 74 6f 49 6e 63 2e  Table.u.autoInc.
1de50 70 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 6f 66 20  p.** pointer of 
1de60 65 61 63 68 20 61 75 74 6f 69 6e 63 72 65 6d 65  each autoincreme
1de70 6e 74 20 74 61 62 6c 65 20 74 6f 20 72 65 63 6f  nt table to reco
1de80 72 64 20 73 6f 6d 65 20 73 69 64 65 20 69 6e 66  rd some side inf
1de90 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 0a 2a 2a  ormation that.**
1dea0 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61   the code genera
1deb0 74 6f 72 20 6e 65 65 64 73 2e 20 20 57 65 20 68  tor needs.  We h
1dec0 61 76 65 20 74 6f 20 6b 65 65 70 20 70 65 72 2d  ave to keep per-
1ded0 74 61 62 6c 65 20 61 75 74 6f 69 6e 63 72 65 6d  table autoincrem
1dee0 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69  ent.** informati
1def0 6f 6e 20 69 6e 20 63 61 73 65 20 69 6e 73 65 72  on in case inser
1df00 74 73 20 61 72 65 20 64 6f 6e 65 20 77 69 74 68  ts are done with
1df10 69 6e 20 74 72 69 67 67 65 72 73 2e 20 20 54 72  in triggers.  Tr
1df20 69 67 67 65 72 73 20 64 6f 20 6e 6f 74 0a 2a 2a  iggers do not.**
1df30 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72 64 69   normally coordi
1df40 6e 61 74 65 20 74 68 65 69 72 20 61 63 74 69 76  nate their activ
1df50 69 74 69 65 73 2c 20 62 75 74 20 77 65 20 64 6f  ities, but we do
1df60 20 6e 65 65 64 20 74 6f 20 63 6f 6f 72 64 69 6e   need to coordin
1df70 61 74 65 20 74 68 65 0a 2a 2a 20 6c 6f 61 64 69  ate the.** loadi
1df80 6e 67 20 61 6e 64 20 73 61 76 69 6e 67 20 6f 66  ng and saving of
1df90 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 69   autoincrement i
1dfa0 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73  nformation..*/.s
1dfb0 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e 66  truct AutoincInf
1dfc0 6f 20 7b 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66  o {.  AutoincInf
1dfd0 6f 20 2a 70 4e 65 78 74 3b 20 20 20 2f 2a 20 4e  o *pNext;   /* N
1dfe0 65 78 74 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 69  ext info block i
1dff0 6e 20 61 20 6c 69 73 74 20 6f 66 20 74 68 65 6d  n a list of them
1e000 20 61 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c 65 20   all */.  Table 
1e010 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  *pTab;          
1e020 2f 2a 20 54 61 62 6c 65 20 74 68 69 73 20 69 6e  /* Table this in
1e030 66 6f 20 62 6c 6f 63 6b 20 72 65 66 65 72 73 20  fo block refers 
1e040 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b  to */.  int iDb;
1e050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1e060 20 49 6e 64 65 78 20 69 6e 20 73 71 6c 69 74 65   Index in sqlite
1e070 33 2e 61 44 62 5b 5d 20 6f 66 20 64 61 74 61 62  3.aDb[] of datab
1e080 61 73 65 20 68 6f 6c 64 69 6e 67 20 70 54 61 62  ase holding pTab
1e090 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 43 74 72   */.  int regCtr
1e0a0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  ;           /* M
1e0b0 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 20 68  emory register h
1e0c0 6f 6c 64 69 6e 67 20 74 68 65 20 72 6f 77 69 64  olding the rowid
1e0d0 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b 0a 0a   counter */.};..
1e0e0 2f 2a 0a 2a 2a 20 53 69 7a 65 20 6f 66 20 74 68  /*.** Size of th
1e0f0 65 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 0a 2a  e column cache.*
1e100 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
1e110 5f 4e 5f 43 4f 4c 43 41 43 48 45 0a 23 20 64 65  _N_COLCACHE.# de
1e120 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 43 4f  fine SQLITE_N_CO
1e130 4c 43 41 43 48 45 20 31 30 0a 23 65 6e 64 69 66  LCACHE 10.#endif
1e140 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61 73 74  ../*.** At least
1e150 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66   one instance of
1e160 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
1e170 74 72 75 63 74 75 72 65 20 69 73 20 63 72 65 61  tructure is crea
1e180 74 65 64 20 66 6f 72 20 65 61 63 68 0a 2a 2a 20  ted for each.** 
1e190 74 72 69 67 67 65 72 20 74 68 61 74 20 6d 61 79  trigger that may
1e1a0 20 62 65 20 66 69 72 65 64 20 77 68 69 6c 65 20   be fired while 
1e1b0 70 61 72 73 69 6e 67 20 61 6e 20 49 4e 53 45 52  parsing an INSER
1e1c0 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44 45 4c  T, UPDATE or DEL
1e1d0 45 54 45 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74  ETE.** statement
1e1e0 2e 20 41 6c 6c 20 73 75 63 68 20 6f 62 6a 65 63  . All such objec
1e1f0 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e  ts are stored in
1e200 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74   the linked list
1e210 20 68 65 61 64 65 64 20 61 74 0a 2a 2a 20 50 61   headed at.** Pa
1e220 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20  rse.pTriggerPrg 
1e230 61 6e 64 20 64 65 6c 65 74 65 64 20 6f 6e 63 65  and deleted once
1e240 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d 70 69   statement compi
1e250 6c 61 74 69 6f 6e 20 68 61 73 20 62 65 65 6e 0a  lation has been.
1e260 2a 2a 20 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a 2a  ** completed..**
1e270 0a 2a 2a 20 41 20 56 64 62 65 20 73 75 62 2d 70  .** A Vdbe sub-p
1e280 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6d 70 6c  rogram that impl
1e290 65 6d 65 6e 74 73 20 74 68 65 20 62 6f 64 79 20  ements the body 
1e2a0 61 6e 64 20 57 48 45 4e 20 63 6c 61 75 73 65 20  and WHEN clause 
1e2b0 6f 66 20 74 72 69 67 67 65 72 0a 2a 2a 20 54 72  of trigger.** Tr
1e2c0 69 67 67 65 72 50 72 67 2e 70 54 72 69 67 67 65  iggerPrg.pTrigge
1e2d0 72 2c 20 61 73 73 75 6d 69 6e 67 20 61 20 64 65  r, assuming a de
1e2e0 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43  fault ON CONFLIC
1e2f0 54 20 63 6c 61 75 73 65 20 6f 66 0a 2a 2a 20 54  T clause of.** T
1e300 72 69 67 67 65 72 50 72 67 2e 6f 72 63 6f 6e 66  riggerPrg.orconf
1e310 2c 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74  , is stored in t
1e320 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 70 50  he TriggerPrg.pP
1e330 72 6f 67 72 61 6d 20 76 61 72 69 61 62 6c 65 2e  rogram variable.
1e340 0a 2a 2a 20 54 68 65 20 50 61 72 73 65 2e 70 54  .** The Parse.pT
1e350 72 69 67 67 65 72 50 72 67 20 6c 69 73 74 20 6e  riggerPrg list n
1e360 65 76 65 72 20 63 6f 6e 74 61 69 6e 73 20 74 77  ever contains tw
1e370 6f 20 65 6e 74 72 69 65 73 20 77 69 74 68 20 74  o entries with t
1e380 68 65 20 73 61 6d 65 0a 2a 2a 20 76 61 6c 75 65  he same.** value
1e390 73 20 66 6f 72 20 62 6f 74 68 20 70 54 72 69 67  s for both pTrig
1e3a0 67 65 72 20 61 6e 64 20 6f 72 63 6f 6e 66 2e 0a  ger and orconf..
1e3b0 2a 2a 0a 2a 2a 20 54 68 65 20 54 72 69 67 67 65  **.** The Trigge
1e3c0 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30 5d  rPrg.aColmask[0]
1e3d0 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74   variable is set
1e3e0 20 74 6f 20 61 20 6d 61 73 6b 20 6f 66 20 6f 6c   to a mask of ol
1e3f0 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 61  d.* columns.** a
1e400 63 63 65 73 73 65 64 20 28 6f 72 20 73 65 74 20  ccessed (or set 
1e410 74 6f 20 30 20 66 6f 72 20 74 72 69 67 67 65 72  to 0 for trigger
1e420 73 20 66 69 72 65 64 20 61 73 20 61 20 72 65 73  s fired as a res
1e430 75 6c 74 20 6f 66 20 49 4e 53 45 52 54 0a 2a 2a  ult of INSERT.**
1e440 20 73 74 61 74 65 6d 65 6e 74 73 29 2e 20 53 69   statements). Si
1e450 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20 54 72 69  milarly, the Tri
1e460 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b  ggerPrg.aColmask
1e470 5b 31 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20  [1] variable is 
1e480 73 65 74 20 74 6f 0a 2a 2a 20 61 20 6d 61 73 6b  set to.** a mask
1e490 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e   of new.* column
1e4a0 73 20 75 73 65 64 20 62 79 20 74 68 65 20 70 72  s used by the pr
1e4b0 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72 75 63 74  ogram..*/.struct
1e4c0 20 54 72 69 67 67 65 72 50 72 67 20 7b 0a 20 20   TriggerPrg {.  
1e4d0 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 67 65  Trigger *pTrigge
1e4e0 72 3b 20 20 20 20 20 20 2f 2a 20 54 72 69 67 67  r;      /* Trigg
1e4f0 65 72 20 74 68 69 73 20 70 72 6f 67 72 61 6d 20  er this program 
1e500 77 61 73 20 63 6f 64 65 64 20 66 72 6f 6d 20 2a  was coded from *
1e510 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67 20 2a  /.  TriggerPrg *
1e520 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e  pNext;      /* N
1e530 65 78 74 20 65 6e 74 72 79 20 69 6e 20 50 61 72  ext entry in Par
1e540 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20 6c  se.pTriggerPrg l
1e550 69 73 74 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67  ist */.  SubProg
1e560 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20  ram *pProgram;  
1e570 20 2f 2a 20 50 72 6f 67 72 61 6d 20 69 6d 70 6c   /* Program impl
1e580 65 6d 65 6e 74 69 6e 67 20 70 54 72 69 67 67 65  ementing pTrigge
1e590 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a 20 20 69 6e  r/orconf */.  in
1e5a0 74 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20  t orconf;       
1e5b0 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74        /* Default
1e5c0 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c   ON CONFLICT pol
1e5d0 69 63 79 20 2a 2f 0a 20 20 75 33 32 20 61 43 6f  icy */.  u32 aCo
1e5e0 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20 20 20 20 20  lmask[2];       
1e5f0 20 2f 2a 20 4d 61 73 6b 73 20 6f 66 20 6f 6c 64   /* Masks of old
1e600 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e  .*, new.* column
1e610 73 20 61 63 63 65 73 73 65 64 20 2a 2f 0a 7d 3b  s accessed */.};
1e620 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79 44 62 4d  ../*.** The yDbM
1e630 61 73 6b 20 64 61 74 61 74 79 70 65 20 66 6f 72  ask datatype for
1e640 20 74 68 65 20 62 69 74 6d 61 73 6b 20 6f 66 20   the bitmask of 
1e650 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74  all attached dat
1e660 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 69 66 20 53  abases..*/.#if S
1e670 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48  QLITE_MAX_ATTACH
1e680 45 44 3e 33 30 0a 20 20 74 79 70 65 64 65 66 20  ED>30.  typedef 
1e690 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 79 44  unsigned char yD
1e6a0 62 4d 61 73 6b 5b 28 53 51 4c 49 54 45 5f 4d 41  bMask[(SQLITE_MA
1e6b0 58 5f 41 54 54 41 43 48 45 44 2b 39 29 2f 38 5d  X_ATTACHED+9)/8]
1e6c0 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ;.# define DbMas
1e6d0 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20 28 28  kTest(M,I)    ((
1e6e0 28 4d 29 5b 28 49 29 2f 38 5d 26 28 31 3c 3c 28  (M)[(I)/8]&(1<<(
1e6f0 28 49 29 26 37 29 29 29 21 3d 30 29 0a 23 20 64  (I)&7)))!=0).# d
1e700 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f  efine DbMaskZero
1e710 28 4d 29 20 20 20 20 20 20 6d 65 6d 73 65 74 28  (M)      memset(
1e720 28 4d 29 2c 30 2c 73 69 7a 65 6f 66 28 4d 29 29  (M),0,sizeof(M))
1e730 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1e740 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28 4d 29  Set(M,I)     (M)
1e750 5b 28 49 29 2f 38 5d 7c 3d 28 31 3c 3c 28 28 49  [(I)/8]|=(1<<((I
1e760 29 26 37 29 29 0a 23 20 64 65 66 69 6e 65 20 44  )&7)).# define D
1e770 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20  bMaskAllZero(M) 
1e780 20 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41    sqlite3DbMaskA
1e790 6c 6c 5a 65 72 6f 28 4d 29 0a 23 20 64 65 66 69  llZero(M).# defi
1e7a0 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f  ne DbMaskNonZero
1e7b0 28 4d 29 20 20 20 28 73 71 6c 69 74 65 33 44 62  (M)   (sqlite3Db
1e7c0 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 3d 3d  MaskAllZero(M)==
1e7d0 30 29 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64  0).#else.  typed
1e7e0 65 66 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20  ef unsigned int 
1e7f0 79 44 62 4d 61 73 6b 3b 0a 23 20 64 65 66 69 6e  yDbMask;.# defin
1e800 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49  e DbMaskTest(M,I
1e810 29 20 20 20 20 28 28 28 4d 29 26 28 28 28 79 44  )    (((M)&(((yD
1e820 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29 29 21  bMask)1)<<(I)))!
1e830 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  =0).# define DbM
1e840 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20 20  askZero(M)      
1e850 28 4d 29 3d 30 0a 23 20 64 65 66 69 6e 65 20 44  (M)=0.# define D
1e860 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20 20 20  bMaskSet(M,I)   
1e870 20 20 28 4d 29 7c 3d 28 28 28 79 44 62 4d 61 73    (M)|=(((yDbMas
1e880 6b 29 31 29 3c 3c 28 49 29 29 0a 23 20 64 65 66  k)1)<<(I)).# def
1e890 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72  ine DbMaskAllZer
1e8a0 6f 28 4d 29 20 20 20 28 4d 29 3d 3d 30 0a 23 20  o(M)   (M)==0.# 
1e8b0 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e  define DbMaskNon
1e8c0 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 21 3d 30  Zero(M)   (M)!=0
1e8d0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
1e8e0 6e 20 53 51 4c 20 70 61 72 73 65 72 20 63 6f 6e  n SQL parser con
1e8f0 74 65 78 74 2e 20 20 41 20 63 6f 70 79 20 6f 66  text.  A copy of
1e900 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
1e910 69 73 20 70 61 73 73 65 64 20 74 68 72 6f 75 67  is passed throug
1e920 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 72 20  h.** the parser 
1e930 61 6e 64 20 64 6f 77 6e 20 69 6e 74 6f 20 61 6c  and down into al
1e940 6c 20 74 68 65 20 70 61 72 73 65 72 20 61 63 74  l the parser act
1e950 69 6f 6e 20 72 6f 75 74 69 6e 65 20 69 6e 20 6f  ion routine in o
1e960 72 64 65 72 20 74 6f 0a 2a 2a 20 63 61 72 72 79  rder to.** carry
1e970 20 61 72 6f 75 6e 64 20 69 6e 66 6f 72 6d 61 74   around informat
1e980 69 6f 6e 20 74 68 61 74 20 69 73 20 67 6c 6f 62  ion that is glob
1e990 61 6c 20 74 6f 20 74 68 65 20 65 6e 74 69 72 65  al to the entire
1e9a0 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 68   parse..**.** Th
1e9b0 65 20 73 74 72 75 63 74 75 72 65 20 69 73 20 64  e structure is d
1e9c0 69 76 69 64 65 64 20 69 6e 74 6f 20 74 77 6f 20  ivided into two 
1e9d0 70 61 72 74 73 2e 20 20 57 68 65 6e 20 74 68 65  parts.  When the
1e9e0 20 70 61 72 73 65 72 20 61 6e 64 20 63 6f 64 65   parser and code
1e9f0 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 63 61 6c  .** generate cal
1ea00 6c 20 74 68 65 6d 73 65 6c 76 65 73 20 72 65 63  l themselves rec
1ea10 75 72 73 69 76 65 6c 79 2c 20 74 68 65 20 66 69  ursively, the fi
1ea20 72 73 74 20 70 61 72 74 20 6f 66 20 74 68 65 20  rst part of the 
1ea30 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 69 73 20  structure.** is 
1ea40 63 6f 6e 73 74 61 6e 74 20 62 75 74 20 74 68 65  constant but the
1ea50 20 73 65 63 6f 6e 64 20 70 61 72 74 20 69 73 20   second part is 
1ea60 72 65 73 65 74 20 61 74 20 74 68 65 20 62 65 67  reset at the beg
1ea70 69 6e 6e 69 6e 67 20 61 6e 64 20 65 6e 64 20 6f  inning and end o
1ea80 66 0a 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73  f.** each recurs
1ea90 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e  ion..**.** The n
1eaa0 54 61 62 6c 65 4c 6f 63 6b 20 61 6e 64 20 61 54  TableLock and aT
1eab0 61 62 6c 65 4c 6f 63 6b 20 76 61 72 69 61 62 6c  ableLock variabl
1eac0 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73 65 64  es are only used
1ead0 20 69 66 20 74 68 65 20 73 68 61 72 65 64 2d 63   if the shared-c
1eae0 61 63 68 65 0a 2a 2a 20 66 65 61 74 75 72 65 20  ache.** feature 
1eaf0 69 73 20 65 6e 61 62 6c 65 64 20 28 69 66 20 73  is enabled (if s
1eb00 71 6c 69 74 65 33 54 73 64 28 29 2d 3e 75 73 65  qlite3Tsd()->use
1eb10 53 68 61 72 65 64 44 61 74 61 20 69 73 20 74 72  SharedData is tr
1eb20 75 65 29 2e 20 54 68 65 79 20 61 72 65 0a 2a 2a  ue). They are.**
1eb30 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
1eb40 68 65 20 73 65 74 20 6f 66 20 74 61 62 6c 65 2d  he set of table-
1eb50 6c 6f 63 6b 73 20 72 65 71 75 69 72 65 64 20 62  locks required b
1eb60 79 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  y the statement 
1eb70 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70 69 6c 65  being.** compile
1eb80 64 2e 20 46 75 6e 63 74 69 6f 6e 20 73 71 6c 69  d. Function sqli
1eb90 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 29 20 69  te3TableLock() i
1eba0 73 20 75 73 65 64 20 74 6f 20 61 64 64 20 65 6e  s used to add en
1ebb0 74 72 69 65 73 20 74 6f 20 74 68 65 0a 2a 2a 20  tries to the.** 
1ebc0 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  list..*/.struct 
1ebd0 50 61 72 73 65 20 7b 0a 20 20 73 71 6c 69 74 65  Parse {.  sqlite
1ebe0 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 2f  3 *db;         /
1ebf0 2a 20 54 68 65 20 6d 61 69 6e 20 64 61 74 61 62  * The main datab
1ec00 61 73 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f  ase structure */
1ec10 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67  .  char *zErrMsg
1ec20 3b 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 72  ;       /* An er
1ec30 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20  ror message */. 
1ec40 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20 20 20   Vdbe *pVdbe;   
1ec50 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 6e 67 69        /* An engi
1ec60 6e 65 20 66 6f 72 20 65 78 65 63 75 74 69 6e 67  ne for executing
1ec70 20 64 61 74 61 62 61 73 65 20 62 79 74 65 63 6f   database byteco
1ec80 64 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20  de */.  int rc; 
1ec90 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1eca0 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d  Return code from
1ecb0 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 20 20   execution */.  
1ecc0 75 38 20 63 6f 6c 4e 61 6d 65 73 53 65 74 3b 20  u8 colNamesSet; 
1ecd0 20 20 20 20 20 2f 2a 20 54 52 55 45 20 61 66 74       /* TRUE aft
1ece0 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65  er OP_ColumnName
1ecf0 20 68 61 73 20 62 65 65 6e 20 69 73 73 75 65 64   has been issued
1ed00 20 74 6f 20 70 56 64 62 65 20 2a 2f 0a 20 20 75   to pVdbe */.  u
1ed10 38 20 63 68 65 63 6b 53 63 68 65 6d 61 3b 20 20  8 checkSchema;  
1ed20 20 20 20 20 2f 2a 20 43 61 75 73 65 73 20 73 63      /* Causes sc
1ed30 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68 65 63  hema cookie chec
1ed40 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72  k after an error
1ed50 20 2a 2f 0a 20 20 75 38 20 6e 65 73 74 65 64 3b   */.  u8 nested;
1ed60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1ed70 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 63  mber of nested c
1ed80 61 6c 6c 73 20 74 6f 20 74 68 65 20 70 61 72 73  alls to the pars
1ed90 65 72 2f 63 6f 64 65 20 67 65 6e 65 72 61 74 6f  er/code generato
1eda0 72 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d 70 52  r */.  u8 nTempR
1edb0 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  eg;         /* N
1edc0 75 6d 62 65 72 20 6f 66 20 74 65 6d 70 6f 72 61  umber of tempora
1edd0 72 79 20 72 65 67 69 73 74 65 72 73 20 69 6e 20  ry registers in 
1ede0 61 54 65 6d 70 52 65 67 5b 5d 20 2a 2f 0a 20 20  aTempReg[] */.  
1edf0 75 38 20 69 73 4d 75 6c 74 69 57 72 69 74 65 3b  u8 isMultiWrite;
1ee00 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
1ee10 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 6d 6f  statement may mo
1ee20 64 69 66 79 2f 69 6e 73 65 72 74 20 6d 75 6c 74  dify/insert mult
1ee30 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 20 20 75  iple rows */.  u
1ee40 38 20 6d 61 79 41 62 6f 72 74 3b 20 20 20 20 20  8 mayAbort;     
1ee50 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73      /* True if s
1ee60 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 74 68 72  tatement may thr
1ee70 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78 63 65  ow an ABORT exce
1ee80 70 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 68 61  ption */.  u8 ha
1ee90 73 43 6f 6d 70 6f 75 6e 64 3b 20 20 20 20 20 20  sCompound;      
1eea0 2f 2a 20 4e 65 65 64 20 74 6f 20 69 6e 76 6f 6b  /* Need to invok
1eeb0 65 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e  e convertCompoun
1eec0 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72  dSelectToSubquer
1eed0 79 28 29 20 2a 2f 0a 20 20 75 38 20 6f 6b 43 6f  y() */.  u8 okCo
1eee0 6e 73 74 46 61 63 74 6f 72 3b 20 20 20 20 2f 2a  nstFactor;    /*
1eef0 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 6f 75   OK to factor ou
1ef00 74 20 63 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a 20  t constants */. 
1ef10 20 75 38 20 64 69 73 61 62 6c 65 4c 6f 6f 6b 61   u8 disableLooka
1ef20 73 69 64 65 3b 20 2f 2a 20 4e 75 6d 62 65 72 20  side; /* Number 
1ef30 6f 66 20 74 69 6d 65 73 20 6c 6f 6f 6b 61 73 69  of times lookasi
1ef40 64 65 20 68 61 73 20 62 65 65 6e 20 64 69 73 61  de has been disa
1ef50 62 6c 65 64 20 2a 2f 0a 20 20 75 38 20 6e 43 6f  bled */.  u8 nCo
1ef60 6c 43 61 63 68 65 3b 20 20 20 20 20 20 20 20 2f  lCache;        /
1ef70 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  * Number of entr
1ef80 69 65 73 20 69 6e 20 61 43 6f 6c 43 61 63 68 65  ies in aColCache
1ef90 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 61 6e  [] */.  int nRan
1efa0 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20  geReg;       /* 
1efb0 53 69 7a 65 20 6f 66 20 74 68 65 20 74 65 6d 70  Size of the temp
1efc0 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 20 62  orary register b
1efd0 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 69 52  lock */.  int iR
1efe0 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f  angeReg;       /
1eff0 2a 20 46 69 72 73 74 20 72 65 67 69 73 74 65 72  * First register
1f000 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 72 65   in temporary re
1f010 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a  gister block */.
1f020 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20    int nErr;     
1f030 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1f040 20 6f 66 20 65 72 72 6f 72 73 20 73 65 65 6e 20   of errors seen 
1f050 2a 2f 0a 20 20 69 6e 74 20 6e 54 61 62 3b 20 20  */.  int nTab;  
1f060 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1f070 62 65 72 20 6f 66 20 70 72 65 76 69 6f 75 73 6c  ber of previousl
1f080 79 20 61 6c 6c 6f 63 61 74 65 64 20 56 44 42 45  y allocated VDBE
1f090 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20 20 69 6e   cursors */.  in
1f0a0 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20 20  t nMem;         
1f0b0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1f0c0 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73 65  memory cells use
1f0d0 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e  d so far */.  in
1f0e0 74 20 6e 4f 70 41 6c 6c 6f 63 3b 20 20 20 20 20  t nOpAlloc;     
1f0f0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1f100 73 6c 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64 20  slots allocated 
1f110 66 6f 72 20 56 64 62 65 2e 61 4f 70 5b 5d 20 2a  for Vdbe.aOp[] *
1f120 2f 0a 20 20 69 6e 74 20 73 7a 4f 70 41 6c 6c 6f  /.  int szOpAllo
1f130 63 3b 20 20 20 20 20 20 20 2f 2a 20 42 79 74 65  c;       /* Byte
1f140 73 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61 63  s of memory spac
1f150 65 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20  e allocated for 
1f160 56 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20  Vdbe.aOp[] */.  
1f170 69 6e 74 20 63 6b 42 61 73 65 3b 20 20 20 20 20  int ckBase;     
1f180 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67       /* Base reg
1f190 69 73 74 65 72 20 6f 66 20 64 61 74 61 20 64 75  ister of data du
1f1a0 72 69 6e 67 20 63 68 65 63 6b 20 63 6f 6e 73 74  ring check const
1f1b0 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20  raints */.  int 
1f1c0 69 53 65 6c 66 54 61 62 3b 20 20 20 20 20 20 20  iSelfTab;       
1f1d0 20 2f 2a 20 54 61 62 6c 65 20 6f 66 20 61 6e 20   /* Table of an 
1f1e0 69 6e 64 65 78 20 77 68 6f 73 65 20 65 78 70 72  index whose expr
1f1f0 73 20 61 72 65 20 62 65 69 6e 67 20 63 6f 64 65  s are being code
1f200 64 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68  d */.  int iCach
1f210 65 4c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 43  eLevel;     /* C
1f220 6f 6c 43 61 63 68 65 20 76 61 6c 69 64 20 77 68  olCache valid wh
1f230 65 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 69  en aColCache[].i
1f240 4c 65 76 65 6c 3c 3d 69 43 61 63 68 65 4c 65 76  Level<=iCacheLev
1f250 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63  el */.  int iCac
1f260 68 65 43 6e 74 3b 20 20 20 20 20 20 20 2f 2a 20  heCnt;       /* 
1f270 43 6f 75 6e 74 65 72 20 75 73 65 64 20 74 6f 20  Counter used to 
1f280 67 65 6e 65 72 61 74 65 20 61 43 6f 6c 43 61 63  generate aColCac
1f290 68 65 5b 5d 2e 6c 72 75 20 76 61 6c 75 65 73 20  he[].lru values 
1f2a0 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61 62 65 6c 3b  */.  int nLabel;
1f2b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1f2c0 62 65 72 20 6f 66 20 6c 61 62 65 6c 73 20 75 73  ber of labels us
1f2d0 65 64 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 4c 61  ed */.  int *aLa
1f2e0 62 65 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  bel;         /* 
1f2f0 53 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 74 68  Space to hold th
1f300 65 20 6c 61 62 65 6c 73 20 2a 2f 0a 20 20 45 78  e labels */.  Ex
1f310 70 72 4c 69 73 74 20 2a 70 43 6f 6e 73 74 45 78  prList *pConstEx
1f320 70 72 3b 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65  pr;/* Constant e
1f330 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20  xpressions */.  
1f340 54 6f 6b 65 6e 20 63 6f 6e 73 74 72 61 69 6e 74  Token constraint
1f350 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f 66 20  Name;/* Name of 
1f360 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 63  the constraint c
1f370 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 70  urrently being p
1f380 61 72 73 65 64 20 2a 2f 0a 20 20 79 44 62 4d 61  arsed */.  yDbMa
1f390 73 6b 20 77 72 69 74 65 4d 61 73 6b 3b 20 20 20  sk writeMask;   
1f3a0 2f 2a 20 53 74 61 72 74 20 61 20 77 72 69 74 65  /* Start a write
1f3b0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20   transaction on 
1f3c0 74 68 65 73 65 20 64 61 74 61 62 61 73 65 73 20  these databases 
1f3d0 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 63 6f 6f  */.  yDbMask coo
1f3e0 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a 20 42 69 74  kieMask;  /* Bit
1f3f0 6d 61 73 6b 20 6f 66 20 73 63 68 65 6d 61 20 76  mask of schema v
1f400 65 72 69 66 69 65 64 20 64 61 74 61 62 61 73 65  erified database
1f410 73 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f  s */.  int regRo
1f420 77 69 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 52  wid;        /* R
1f430 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
1f440 72 6f 77 69 64 20 6f 66 20 43 52 45 41 54 45 20  rowid of CREATE 
1f450 54 41 42 4c 45 20 65 6e 74 72 79 20 2a 2f 0a 20  TABLE entry */. 
1f460 20 69 6e 74 20 72 65 67 52 6f 6f 74 3b 20 20 20   int regRoot;   
1f470 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
1f480 72 20 68 6f 6c 64 69 6e 67 20 72 6f 6f 74 20 70  r holding root p
1f490 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 6e  age number for n
1f4a0 65 77 20 6f 62 6a 65 63 74 73 20 2a 2f 0a 20 20  ew objects */.  
1f4b0 69 6e 74 20 6e 4d 61 78 41 72 67 3b 20 20 20 20  int nMaxArg;    
1f4c0 20 20 20 20 20 2f 2a 20 4d 61 78 20 61 72 67 73       /* Max args
1f4d0 20 70 61 73 73 65 64 20 74 6f 20 75 73 65 72 20   passed to user 
1f4e0 66 75 6e 63 74 69 6f 6e 20 62 79 20 73 75 62 2d  function by sub-
1f4f0 70 72 6f 67 72 61 6d 20 2a 2f 0a 23 69 66 20 53  program */.#if S
1f500 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c  ELECTTRACE_ENABL
1f510 45 44 0a 20 20 69 6e 74 20 6e 53 65 6c 65 63 74  ED.  int nSelect
1f520 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
1f530 62 65 72 20 6f 66 20 53 45 4c 45 43 54 20 73 74  ber of SELECT st
1f540 61 74 65 6d 65 6e 74 73 20 73 65 65 6e 20 2a 2f  atements seen */
1f550 0a 20 20 69 6e 74 20 6e 53 65 6c 65 63 74 49 6e  .  int nSelectIn
1f560 64 65 6e 74 3b 20 20 20 2f 2a 20 48 6f 77 20 66  dent;   /* How f
1f570 61 72 20 74 6f 20 69 6e 64 65 6e 74 20 53 45 4c  ar to indent SEL
1f580 45 43 54 54 52 41 43 45 28 29 20 6f 75 74 70 75  ECTTRACE() outpu
1f590 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e  t */.#endif.#ifn
1f5a0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1f5b0 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20 69  SHARED_CACHE.  i
1f5c0 6e 74 20 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20 20  nt nTableLock;  
1f5d0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1f5e0 6f 66 20 6c 6f 63 6b 73 20 69 6e 20 61 54 61 62  of locks in aTab
1f5f0 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20 54 61 62 6c  leLock */.  Tabl
1f600 65 4c 6f 63 6b 20 2a 61 54 61 62 6c 65 4c 6f 63  eLock *aTableLoc
1f610 6b 3b 20 2f 2a 20 52 65 71 75 69 72 65 64 20 74  k; /* Required t
1f620 61 62 6c 65 20 6c 6f 63 6b 73 20 66 6f 72 20 73  able locks for s
1f630 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65  hared-cache mode
1f640 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 41 75 74   */.#endif.  Aut
1f650 6f 69 6e 63 49 6e 66 6f 20 2a 70 41 69 6e 63 3b  oincInfo *pAinc;
1f660 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e    /* Information
1f670 20 61 62 6f 75 74 20 41 55 54 4f 49 4e 43 52 45   about AUTOINCRE
1f680 4d 45 4e 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f  MENT counters */
1f690 0a 20 20 50 61 72 73 65 20 2a 70 54 6f 70 6c 65  .  Parse *pTople
1f6a0 76 65 6c 3b 20 20 20 20 2f 2a 20 50 61 72 73 65  vel;    /* Parse
1f6b0 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 6d   structure for m
1f6c0 61 69 6e 20 70 72 6f 67 72 61 6d 20 28 6f 72 20  ain program (or 
1f6d0 4e 55 4c 4c 29 20 2a 2f 0a 20 20 54 61 62 6c 65  NULL) */.  Table
1f6e0 20 2a 70 54 72 69 67 67 65 72 54 61 62 3b 20 20   *pTriggerTab;  
1f6f0 2f 2a 20 54 61 62 6c 65 20 74 72 69 67 67 65 72  /* Table trigger
1f700 73 20 61 72 65 20 62 65 69 6e 67 20 63 6f 64 65  s are being code
1f710 64 20 66 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 61  d for */.  int a
1f720 64 64 72 43 72 54 61 62 3b 20 20 20 20 20 20 20  ddrCrTab;       
1f730 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 4f 50  /* Address of OP
1f740 5f 43 72 65 61 74 65 54 61 62 6c 65 20 6f 70 63  _CreateTable opc
1f750 6f 64 65 20 6f 6e 20 43 52 45 41 54 45 20 54 41  ode on CREATE TA
1f760 42 4c 45 20 2a 2f 0a 20 20 75 33 32 20 6e 51 75  BLE */.  u32 nQu
1f770 65 72 79 4c 6f 6f 70 3b 20 20 20 20 20 20 2f 2a  eryLoop;      /*
1f780 20 45 73 74 20 6e 75 6d 62 65 72 20 6f 66 20 69   Est number of i
1f790 74 65 72 61 74 69 6f 6e 73 20 6f 66 20 61 20 71  terations of a q
1f7a0 75 65 72 79 20 28 31 30 2a 6c 6f 67 32 28 4e 29  uery (10*log2(N)
1f7b0 29 20 2a 2f 0a 20 20 75 33 32 20 6f 6c 64 6d 61  ) */.  u32 oldma
1f7c0 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  sk;         /* M
1f7d0 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c  ask of old.* col
1f7e0 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20  umns referenced 
1f7f0 2a 2f 0a 20 20 75 33 32 20 6e 65 77 6d 61 73 6b  */.  u32 newmask
1f800 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73  ;         /* Mas
1f810 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d  k of new.* colum
1f820 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f  ns referenced */
1f830 0a 20 20 75 38 20 65 54 72 69 67 67 65 72 4f 70  .  u8 eTriggerOp
1f840 3b 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 55 50  ;       /* TK_UP
1f850 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20  DATE, TK_INSERT 
1f860 6f 72 20 54 4b 5f 44 45 4c 45 54 45 20 2a 2f 0a  or TK_DELETE */.
1f870 20 20 75 38 20 65 4f 72 63 6f 6e 66 3b 20 20 20    u8 eOrconf;   
1f880 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
1f890 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f  t ON CONFLICT po
1f8a0 6c 69 63 79 20 66 6f 72 20 74 72 69 67 67 65 72  licy for trigger
1f8b0 20 73 74 65 70 73 20 2a 2f 0a 20 20 75 38 20 64   steps */.  u8 d
1f8c0 69 73 61 62 6c 65 54 72 69 67 67 65 72 73 3b 20  isableTriggers; 
1f8d0 20 2f 2a 20 54 72 75 65 20 74 6f 20 64 69 73 61   /* True to disa
1f8e0 62 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a  ble triggers */.
1f8f0 0a 20 20 2f 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 2a  ****************
1f920 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f930 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20  **************. 
1f940 20 2a 2a 20 46 69 65 6c 64 73 20 61 62 6f 76 65   ** Fields above
1f950 20 6d 75 73 74 20 62 65 20 69 6e 69 74 69 61 6c   must be initial
1f960 69 7a 65 64 20 74 6f 20 7a 65 72 6f 2e 20 20 54  ized to zero.  T
1f970 68 65 20 66 69 65 6c 64 73 20 74 68 61 74 20 66  he fields that f
1f980 6f 6c 6c 6f 77 2c 0a 20 20 2a 2a 20 64 6f 77 6e  ollow,.  ** down
1f990 20 74 6f 20 74 68 65 20 62 65 67 69 6e 6e 69 6e   to the beginnin
1f9a0 67 20 6f 66 20 74 68 65 20 72 65 63 75 72 73 69  g of the recursi
1f9b0 76 65 20 73 65 63 74 69 6f 6e 2c 20 64 6f 20 6e  ve section, do n
1f9c0 6f 74 20 6e 65 65 64 20 74 6f 20 62 65 0a 20 20  ot need to be.  
1f9d0 2a 2a 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 61  ** initialized a
1f9e0 73 20 74 68 65 79 20 77 69 6c 6c 20 62 65 20 73  s they will be s
1f9f0 65 74 20 62 65 66 6f 72 65 20 62 65 69 6e 67 20  et before being 
1fa00 75 73 65 64 2e 20 20 54 68 65 20 62 6f 75 6e 64  used.  The bound
1fa10 61 72 79 20 69 73 0a 20 20 2a 2a 20 64 65 74 65  ary is.  ** dete
1fa20 72 6d 69 6e 65 64 20 62 79 20 6f 66 66 73 65 74  rmined by offset
1fa30 6f 66 28 50 61 72 73 65 2c 61 43 6f 6c 43 61 63  of(Parse,aColCac
1fa40 68 65 29 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a  he)..  *********
1fa50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fa60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fa70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fa80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fa90 2a 2f 0a 0a 20 20 73 74 72 75 63 74 20 79 43 6f  */..  struct yCo
1faa0 6c 43 61 63 68 65 20 7b 0a 20 20 20 20 69 6e 74  lCache {.    int
1fab0 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20   iTable;        
1fac0 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 75 72 73     /* Table curs
1fad0 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20  or number */.   
1fae0 20 69 31 36 20 69 43 6f 6c 75 6d 6e 3b 20 20 20   i16 iColumn;   
1faf0 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20         /* Table 
1fb00 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 2a 2f  column number */
1fb10 0a 20 20 20 20 75 38 20 74 65 6d 70 52 65 67 3b  .    u8 tempReg;
1fb20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 52             /* iR
1fb30 65 67 20 69 73 20 61 20 74 65 6d 70 20 72 65 67  eg is a temp reg
1fb40 69 73 74 65 72 20 74 68 61 74 20 6e 65 65 64 73  ister that needs
1fb50 20 74 6f 20 62 65 20 66 72 65 65 64 20 2a 2f 0a   to be freed */.
1fb60 20 20 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20      int iLevel; 
1fb70 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 73            /* Nes
1fb80 74 69 6e 67 20 6c 65 76 65 6c 20 2a 2f 0a 20 20  ting level */.  
1fb90 20 20 69 6e 74 20 69 52 65 67 3b 20 20 20 20 20    int iReg;     
1fba0 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 20 77          /* Reg w
1fbb0 69 74 68 20 76 61 6c 75 65 20 6f 66 20 74 68 69  ith value of thi
1fbc0 73 20 63 6f 6c 75 6d 6e 2e 20 30 20 6d 65 61 6e  s column. 0 mean
1fbd0 73 20 6e 6f 6e 65 2e 20 2a 2f 0a 20 20 20 20 69  s none. */.    i
1fbe0 6e 74 20 6c 72 75 3b 20 20 20 20 20 20 20 20 20  nt lru;         
1fbf0 20 20 20 20 20 2f 2a 20 4c 65 61 73 74 20 72 65       /* Least re
1fc00 63 65 6e 74 6c 79 20 75 73 65 64 20 65 6e 74 72  cently used entr
1fc10 79 20 68 61 73 20 74 68 65 20 73 6d 61 6c 6c 65  y has the smalle
1fc20 73 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20 7d 20  st value */.  } 
1fc30 61 43 6f 6c 43 61 63 68 65 5b 53 51 4c 49 54 45  aColCache[SQLITE
1fc40 5f 4e 5f 43 4f 4c 43 41 43 48 45 5d 3b 20 20 2f  _N_COLCACHE];  /
1fc50 2a 20 4f 6e 65 20 66 6f 72 20 65 61 63 68 20 63  * One for each c
1fc60 6f 6c 75 6d 6e 20 63 61 63 68 65 20 65 6e 74 72  olumn cache entr
1fc70 79 20 2a 2f 0a 20 20 69 6e 74 20 61 54 65 6d 70  y */.  int aTemp
1fc80 52 65 67 5b 38 5d 3b 20 20 20 20 20 20 20 20 2f  Reg[8];        /
1fc90 2a 20 48 6f 6c 64 69 6e 67 20 61 72 65 61 20 66  * Holding area f
1fca0 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67  or temporary reg
1fcb0 69 73 74 65 72 73 20 2a 2f 0a 20 20 54 6f 6b 65  isters */.  Toke
1fcc0 6e 20 73 4e 61 6d 65 54 6f 6b 65 6e 3b 20 20 20  n sNameToken;   
1fcd0 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 77 69 74      /* Token wit
1fce0 68 20 75 6e 71 75 61 6c 69 66 69 65 64 20 73 63  h unqualified sc
1fcf0 68 65 6d 61 20 6f 62 6a 65 63 74 20 6e 61 6d 65  hema object name
1fd00 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a   */..  /********
1fd10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fd20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fd30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fd40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fd50 0a 20 20 2a 2a 20 41 62 6f 76 65 20 69 73 20 63  .  ** Above is c
1fd60 6f 6e 73 74 61 6e 74 20 62 65 74 77 65 65 6e 20  onstant between 
1fd70 72 65 63 75 72 73 69 6f 6e 73 2e 20 20 42 65 6c  recursions.  Bel
1fd80 6f 77 20 69 73 20 72 65 73 65 74 20 62 65 66 6f  ow is reset befo
1fd90 72 65 20 61 6e 64 20 61 66 74 65 72 0a 20 20 2a  re and after.  *
1fda0 2a 20 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e  * each recursion
1fdb0 2e 20 20 54 68 65 20 62 6f 75 6e 64 61 72 79 20  .  The boundary 
1fdc0 62 65 74 77 65 65 6e 20 74 68 65 73 65 20 74 77  between these tw
1fdd0 6f 20 72 65 67 69 6f 6e 73 20 69 73 20 64 65 74  o regions is det
1fde0 65 72 6d 69 6e 65 64 0a 20 20 2a 2a 20 75 73 69  ermined.  ** usi
1fdf0 6e 67 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73  ng offsetof(Pars
1fe00 65 2c 73 4c 61 73 74 54 6f 6b 65 6e 29 20 73 6f  e,sLastToken) so
1fe10 20 74 68 65 20 73 4c 61 73 74 54 6f 6b 65 6e 20   the sLastToken 
1fe20 66 69 65 6c 64 20 6d 75 73 74 20 62 65 20 74 68  field must be th
1fe30 65 0a 20 20 2a 2a 20 66 69 72 73 74 20 66 69 65  e.  ** first fie
1fe40 6c 64 20 69 6e 20 74 68 65 20 72 65 63 75 72 73  ld in the recurs
1fe50 69 76 65 20 72 65 67 69 6f 6e 2e 0a 20 20 2a 2a  ive region..  **
1fe60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fe70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fe80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fe90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fea0 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 54 6f 6b 65 6e  ******/..  Token
1feb0 20 73 4c 61 73 74 54 6f 6b 65 6e 3b 20 20 20 20   sLastToken;    
1fec0 20 20 20 2f 2a 20 54 68 65 20 6c 61 73 74 20 74     /* The last t
1fed0 6f 6b 65 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20  oken parsed */. 
1fee0 20 79 6e 56 61 72 20 6e 56 61 72 3b 20 20 20 20   ynVar nVar;    
1fef0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1ff00 6d 62 65 72 20 6f 66 20 27 3f 27 20 76 61 72 69  mber of '?' vari
1ff10 61 62 6c 65 73 20 73 65 65 6e 20 69 6e 20 74 68  ables seen in th
1ff20 65 20 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f 0a  e SQL so far */.
1ff30 20 20 75 38 20 69 50 6b 53 6f 72 74 4f 72 64 65    u8 iPkSortOrde
1ff40 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41  r;          /* A
1ff50 53 43 20 6f 72 20 44 45 53 43 20 66 6f 72 20 49  SC or DESC for I
1ff60 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
1ff70 45 59 20 2a 2f 0a 20 20 75 38 20 65 78 70 6c 61  EY */.  u8 expla
1ff80 69 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  in;             
1ff90 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65    /* True if the
1ffa0 20 45 58 50 4c 41 49 4e 20 66 6c 61 67 20 69 73   EXPLAIN flag is
1ffb0 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65 20 71 75   found on the qu
1ffc0 65 72 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ery */.#ifndef S
1ffd0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
1ffe0 41 4c 54 41 42 4c 45 0a 20 20 75 38 20 64 65 63  ALTABLE.  u8 dec
1fff0 6c 61 72 65 56 74 61 62 3b 20 20 20 20 20 20 20  lareVtab;       
20000 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 69      /* True if i
20010 6e 73 69 64 65 20 73 71 6c 69 74 65 33 5f 64 65  nside sqlite3_de
20020 63 6c 61 72 65 5f 76 74 61 62 28 29 20 2a 2f 0a  clare_vtab() */.
20030 20 20 69 6e 74 20 6e 56 74 61 62 4c 6f 63 6b 3b    int nVtabLock;
20040 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
20050 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c  umber of virtual
20060 20 74 61 62 6c 65 73 20 74 6f 20 6c 6f 63 6b 20   tables to lock 
20070 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20  */.#endif.  int 
20080 6e 48 65 69 67 68 74 3b 20 20 20 20 20 20 20 20  nHeight;        
20090 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73        /* Express
200a0 69 6f 6e 20 74 72 65 65 20 68 65 69 67 68 74 20  ion tree height 
200b0 6f 66 20 63 75 72 72 65 6e 74 20 73 75 62 2d 73  of current sub-s
200c0 65 6c 65 63 74 20 2a 2f 0a 23 69 66 6e 64 65 66  elect */.#ifndef
200d0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50   SQLITE_OMIT_EXP
200e0 4c 41 49 4e 0a 20 20 69 6e 74 20 69 53 65 6c 65  LAIN.  int iSele
200f0 63 74 49 64 3b 20 20 20 20 20 20 20 20 20 20 20  ctId;           
20100 20 2f 2a 20 49 44 20 6f 66 20 63 75 72 72 65 6e   /* ID of curren
20110 74 20 73 65 6c 65 63 74 20 66 6f 72 20 45 58 50  t select for EXP
20120 4c 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 20  LAIN output */. 
20130 20 69 6e 74 20 69 4e 65 78 74 53 65 6c 65 63 74   int iNextSelect
20140 49 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65  Id;        /* Ne
20150 78 74 20 61 76 61 69 6c 61 62 6c 65 20 73 65 6c  xt available sel
20160 65 63 74 20 49 44 20 66 6f 72 20 45 58 50 4c 41  ect ID for EXPLA
20170 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 23 65 6e  IN output */.#en
20180 64 69 66 0a 20 20 56 4c 69 73 74 20 2a 70 56 4c  dif.  VList *pVL
20190 69 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ist;            
201a0 2f 2a 20 4d 61 70 70 69 6e 67 20 62 65 74 77 65  /* Mapping betwe
201b0 65 6e 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65  en variable name
201c0 73 20 61 6e 64 20 6e 75 6d 62 65 72 73 20 2a 2f  s and numbers */
201d0 0a 20 20 56 64 62 65 20 2a 70 52 65 70 72 65 70  .  Vdbe *pReprep
201e0 61 72 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  are;         /* 
201f0 56 4d 20 62 65 69 6e 67 20 72 65 70 72 65 70 61  VM being reprepa
20200 72 65 64 20 28 73 71 6c 69 74 65 33 52 65 70 72  red (sqlite3Repr
20210 65 70 61 72 65 28 29 29 20 2a 2f 0a 20 20 63 6f  epare()) */.  co
20220 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 69 6c 3b  nst char *zTail;
20230 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 53          /* All S
20240 51 4c 20 74 65 78 74 20 70 61 73 74 20 74 68 65  QL text past the
20250 20 6c 61 73 74 20 73 65 6d 69 63 6f 6c 6f 6e 20   last semicolon 
20260 70 61 72 73 65 64 20 2a 2f 0a 20 20 54 61 62 6c  parsed */.  Tabl
20270 65 20 2a 70 4e 65 77 54 61 62 6c 65 3b 20 20 20  e *pNewTable;   
20280 20 20 20 20 20 20 2f 2a 20 41 20 74 61 62 6c 65        /* A table
20290 20 62 65 69 6e 67 20 63 6f 6e 73 74 72 75 63 74   being construct
202a0 65 64 20 62 79 20 43 52 45 41 54 45 20 54 41 42  ed by CREATE TAB
202b0 4c 45 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20  LE */.  Trigger 
202c0 2a 70 4e 65 77 54 72 69 67 67 65 72 3b 20 20 20  *pNewTrigger;   
202d0 20 20 2f 2a 20 54 72 69 67 67 65 72 20 75 6e 64    /* Trigger und
202e0 65 72 20 63 6f 6e 73 74 72 75 63 74 20 62 79 20  er construct by 
202f0 61 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52  a CREATE TRIGGER
20300 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
20310 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20   *zAuthContext; 
20320 2f 2a 20 54 68 65 20 36 74 68 20 70 61 72 61 6d  /* The 6th param
20330 65 74 65 72 20 74 6f 20 64 62 2d 3e 78 41 75 74  eter to db->xAut
20340 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a 23  h callbacks */.#
20350 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
20360 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
20370 20 20 54 6f 6b 65 6e 20 73 41 72 67 3b 20 20 20    Token sArg;   
20380 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
20390 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 6f 66 20  omplete text of 
203a0 61 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e  a module argumen
203b0 74 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 2a 61  t */.  Table **a
203c0 70 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20  pVtabLock;      
203d0 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76   /* Pointer to v
203e0 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 6e 65  irtual tables ne
203f0 65 64 69 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a 2f  eding locking */
20400 0a 23 65 6e 64 69 66 0a 20 20 54 61 62 6c 65 20  .#endif.  Table 
20410 2a 70 5a 6f 6d 62 69 65 54 61 62 3b 20 20 20 20  *pZombieTab;    
20420 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 54      /* List of T
20430 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 6f 20  able objects to 
20440 64 65 6c 65 74 65 20 61 66 74 65 72 20 63 6f 64  delete after cod
20450 65 20 67 65 6e 20 2a 2f 0a 20 20 54 72 69 67 67  e gen */.  Trigg
20460 65 72 50 72 67 20 2a 70 54 72 69 67 67 65 72 50  erPrg *pTriggerP
20470 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c  rg;  /* Linked l
20480 69 73 74 20 6f 66 20 63 6f 64 65 64 20 74 72 69  ist of coded tri
20490 67 67 65 72 73 20 2a 2f 0a 20 20 57 69 74 68 20  ggers */.  With 
204a0 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20 20 20  *pWith;         
204b0 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20       /* Current 
204c0 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72 20  WITH clause, or 
204d0 4e 55 4c 4c 20 2a 2f 0a 20 20 57 69 74 68 20 2a  NULL */.  With *
204e0 70 57 69 74 68 54 6f 46 72 65 65 3b 20 20 20 20  pWithToFree;    
204f0 20 20 20 20 2f 2a 20 46 72 65 65 20 74 68 69 73      /* Free this
20500 20 57 49 54 48 20 6f 62 6a 65 63 74 20 61 74 20   WITH object at 
20510 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 70  the end of the p
20520 61 72 73 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  arse */.};../*.*
20530 2a 20 53 69 7a 65 73 20 61 6e 64 20 70 6f 69 6e  * Sizes and poin
20540 74 65 72 73 20 6f 66 20 76 61 72 69 6f 75 73 20  ters of various 
20550 70 61 72 74 73 20 6f 66 20 74 68 65 20 50 61 72  parts of the Par
20560 73 65 20 6f 62 6a 65 63 74 2e 0a 2a 2f 0a 23 64  se object..*/.#d
20570 65 66 69 6e 65 20 50 41 52 53 45 5f 48 44 52 5f  efine PARSE_HDR_
20580 53 5a 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73  SZ offsetof(Pars
20590 65 2c 61 43 6f 6c 43 61 63 68 65 29 20 2f 2a 20  e,aColCache) /* 
205a0 52 65 63 75 72 73 69 76 65 20 70 61 72 74 20 77  Recursive part w
205b0 2f 6f 20 61 43 6f 6c 43 61 63 68 65 2a 2f 0a 23  /o aColCache*/.#
205c0 64 65 66 69 6e 65 20 50 41 52 53 45 5f 52 45 43  define PARSE_REC
205d0 55 52 53 45 5f 53 5a 20 6f 66 66 73 65 74 6f 66  URSE_SZ offsetof
205e0 28 50 61 72 73 65 2c 73 4c 61 73 74 54 6f 6b 65  (Parse,sLastToke
205f0 6e 29 20 20 20 20 2f 2a 20 52 65 63 75 72 73 69  n)    /* Recursi
20600 76 65 20 70 61 72 74 20 2a 2f 0a 23 64 65 66 69  ve part */.#defi
20610 6e 65 20 50 41 52 53 45 5f 54 41 49 4c 5f 53 5a  ne PARSE_TAIL_SZ
20620 20 28 73 69 7a 65 6f 66 28 50 61 72 73 65 29 2d   (sizeof(Parse)-
20630 50 41 52 53 45 5f 52 45 43 55 52 53 45 5f 53 5a  PARSE_RECURSE_SZ
20640 29 20 2f 2a 20 4e 6f 6e 2d 72 65 63 75 72 73 69  ) /* Non-recursi
20650 76 65 20 70 61 72 74 20 2a 2f 0a 23 64 65 66 69  ve part */.#defi
20660 6e 65 20 50 41 52 53 45 5f 54 41 49 4c 28 58 29  ne PARSE_TAIL(X)
20670 20 28 28 28 63 68 61 72 2a 29 28 58 29 29 2b 50   (((char*)(X))+P
20680 41 52 53 45 5f 52 45 43 55 52 53 45 5f 53 5a 29  ARSE_RECURSE_SZ)
20690 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
206a0 74 61 69 6c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52  tail */../*.** R
206b0 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 63 75  eturn true if cu
206c0 72 72 65 6e 74 6c 79 20 69 6e 73 69 64 65 20 61  rrently inside a
206d0 6e 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72  n sqlite3_declar
206e0 65 5f 76 74 61 62 28 29 20 63 61 6c 6c 2e 0a 2a  e_vtab() call..*
206f0 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
20700 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
20710 45 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44  E.  #define IN_D
20720 45 43 4c 41 52 45 5f 56 54 41 42 20 30 0a 23 65  ECLARE_VTAB 0.#e
20730 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 49 4e  lse.  #define IN
20740 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20 28 70  _DECLARE_VTAB (p
20750 50 61 72 73 65 2d 3e 64 65 63 6c 61 72 65 56 74  Parse->declareVt
20760 61 62 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ab).#endif../*.*
20770 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
20780 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
20790 74 72 75 63 74 75 72 65 20 63 61 6e 20 62 65 20  tructure can be 
207a0 64 65 63 6c 61 72 65 64 20 6f 6e 20 61 20 73 74  declared on a st
207b0 61 63 6b 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20  ack and used.** 
207c0 74 6f 20 73 61 76 65 20 74 68 65 20 50 61 72 73  to save the Pars
207d0 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 76  e.zAuthContext v
207e0 61 6c 75 65 20 73 6f 20 74 68 61 74 20 69 74 20  alue so that it 
207f0 63 61 6e 20 62 65 20 72 65 73 74 6f 72 65 64 20  can be restored 
20800 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74 72 75 63 74  later..*/.struct
20810 20 41 75 74 68 43 6f 6e 74 65 78 74 20 7b 0a 20   AuthContext {. 
20820 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75   const char *zAu
20830 74 68 43 6f 6e 74 65 78 74 3b 20 20 20 2f 2a 20  thContext;   /* 
20840 50 75 74 20 73 61 76 65 64 20 50 61 72 73 65 2e  Put saved Parse.
20850 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 68 65 72  zAuthContext her
20860 65 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 50  e */.  Parse *pP
20870 61 72 73 65 3b 20 20 20 20 20 20 20 20 20 20 20  arse;           
20880 20 20 20 2f 2a 20 54 68 65 20 50 61 72 73 65 20     /* The Parse 
20890 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 7d 3b 0a  structure */.};.
208a0 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69 65 6c 64 20  ./*.** Bitfield 
208b0 66 6c 61 67 73 20 66 6f 72 20 50 35 20 76 61 6c  flags for P5 val
208c0 75 65 20 69 6e 20 76 61 72 69 6f 75 73 20 6f 70  ue in various op
208d0 63 6f 64 65 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c  codes..**.** Val
208e0 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28  ue constraints (
208f0 65 6e 66 6f 72 63 65 64 20 76 69 61 20 61 73 73  enforced via ass
20900 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 4f 50  ert()):.**    OP
20910 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 20  FLAG_LENGTHARG  
20920 20 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43    == SQLITE_FUNC
20930 5f 4c 45 4e 47 54 48 0a 2a 2a 20 20 20 20 4f 50  _LENGTH.**    OP
20940 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 20 20  FLAG_TYPEOFARG  
20950 20 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43    == SQLITE_FUNC
20960 5f 54 59 50 45 4f 46 0a 2a 2a 20 20 20 20 4f 50  _TYPEOF.**    OP
20970 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20 20 20  FLAG_BULKCSR    
20980 20 20 3d 3d 20 42 54 52 45 45 5f 42 55 4c 4b 4c    == BTREE_BULKL
20990 4f 41 44 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47  OAD.**    OPFLAG
209a0 5f 53 45 45 4b 45 51 20 20 20 20 20 20 20 3d 3d  _SEEKEQ       ==
209b0 20 42 54 52 45 45 5f 53 45 45 4b 5f 45 51 0a 2a   BTREE_SEEK_EQ.*
209c0 2a 20 20 20 20 4f 50 46 4c 41 47 5f 46 4f 52 44  *    OPFLAG_FORD
209d0 45 4c 45 54 45 20 20 20 20 3d 3d 20 42 54 52 45  ELETE    == BTRE
209e0 45 5f 46 4f 52 44 45 4c 45 54 45 0a 2a 2a 20 20  E_FORDELETE.**  
209f0 20 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53    OPFLAG_SAVEPOS
20a00 49 54 49 4f 4e 20 3d 3d 20 42 54 52 45 45 5f 53  ITION == BTREE_S
20a10 41 56 45 50 4f 53 49 54 49 4f 4e 0a 2a 2a 20 20  AVEPOSITION.**  
20a20 20 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45    OPFLAG_AUXDELE
20a30 54 45 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 41  TE    == BTREE_A
20a40 55 58 44 45 4c 45 54 45 0a 2a 2f 0a 23 64 65 66  UXDELETE.*/.#def
20a50 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  ine OPFLAG_NCHAN
20a60 47 45 20 20 20 20 20 20 20 30 78 30 31 20 20 20  GE       0x01   
20a70 20 2f 2a 20 4f 50 5f 49 6e 73 65 72 74 3a 20 53   /* OP_Insert: S
20a80 65 74 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d  et to update db-
20a90 3e 6e 43 68 61 6e 67 65 20 2a 2f 0a 20 20 20 20  >nChange */.    
20aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ac0 20 2f 2a 20 41 6c 73 6f 20 75 73 65 64 20 69 6e   /* Also used in
20ad0 20 50 32 20 28 6e 6f 74 20 50 35 29 20 6f 66 20   P2 (not P5) of 
20ae0 4f 50 5f 44 65 6c 65 74 65 20 2a 2f 0a 23 64 65  OP_Delete */.#de
20af0 66 69 6e 65 20 4f 50 46 4c 41 47 5f 45 50 48 45  fine OPFLAG_EPHE
20b00 4d 20 20 20 20 20 20 20 20 20 30 78 30 31 20 20  M         0x01  
20b10 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20    /* OP_Column: 
20b20 45 70 68 65 6d 65 72 61 6c 20 6f 75 74 70 75 74  Ephemeral output
20b30 20 69 73 20 6f 6b 20 2a 2f 0a 23 64 65 66 69 6e   is ok */.#defin
20b40 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57  e OPFLAG_LASTROW
20b50 49 44 20 20 20 20 20 30 78 32 30 20 20 20 20 2f  ID     0x20    /
20b60 2a 20 53 65 74 20 74 6f 20 75 70 64 61 74 65 20  * Set to update 
20b70 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 2a 2f  db->lastRowid */
20b80 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
20b90 49 53 55 50 44 41 54 45 20 20 20 20 20 20 30 78  ISUPDATE      0x
20ba0 30 34 20 20 20 20 2f 2a 20 54 68 69 73 20 4f 50  04    /* This OP
20bb0 5f 49 6e 73 65 72 74 20 69 73 20 61 6e 20 73 71  _Insert is an sq
20bc0 6c 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66  l UPDATE */.#def
20bd0 69 6e 65 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e  ine OPFLAG_APPEN
20be0 44 20 20 20 20 20 20 20 20 30 78 30 38 20 20 20  D        0x08   
20bf0 20 2f 2a 20 54 68 69 73 20 69 73 20 6c 69 6b 65   /* This is like
20c00 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65  ly to be an appe
20c10 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  nd */.#define OP
20c20 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55  FLAG_USESEEKRESU
20c30 4c 54 20 30 78 31 30 20 20 20 20 2f 2a 20 54 72  LT 0x10    /* Tr
20c40 79 20 74 6f 20 61 76 6f 69 64 20 61 20 73 65 65  y to avoid a see
20c50 6b 20 69 6e 20 42 74 72 65 65 49 6e 73 65 72 74  k in BtreeInsert
20c60 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  () */.#define OP
20c70 46 4c 41 47 5f 49 53 4e 4f 4f 50 20 20 20 20 20  FLAG_ISNOOP     
20c80 20 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50     0x40    /* OP
20c90 5f 44 65 6c 65 74 65 20 64 6f 65 73 20 70 72 65  _Delete does pre
20ca0 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20 6f 6e 6c  -update-hook onl
20cb0 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  y */.#define OPF
20cc0 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 20 20  LAG_LENGTHARG   
20cd0 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f    0x40    /* OP_
20ce0 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64  Column only used
20cf0 20 66 6f 72 20 6c 65 6e 67 74 68 28 29 20 2a 2f   for length() */
20d00 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
20d10 54 59 50 45 4f 46 41 52 47 20 20 20 20 20 30 78  TYPEOFARG     0x
20d20 38 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75  80    /* OP_Colu
20d30 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72  mn only used for
20d40 20 74 79 70 65 6f 66 28 29 20 2a 2f 0a 23 64 65   typeof() */.#de
20d50 66 69 6e 65 20 4f 50 46 4c 41 47 5f 42 55 4c 4b  fine OPFLAG_BULK
20d60 43 53 52 20 20 20 20 20 20 20 30 78 30 31 20 20  CSR       0x01  
20d70 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75    /* OP_Open** u
20d80 73 65 64 20 74 6f 20 6f 70 65 6e 20 62 75 6c 6b  sed to open bulk
20d90 20 63 75 72 73 6f 72 20 2a 2f 0a 23 64 65 66 69   cursor */.#defi
20da0 6e 65 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51  ne OPFLAG_SEEKEQ
20db0 20 20 20 20 20 20 20 20 30 78 30 32 20 20 20 20          0x02    
20dc0 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 63 75 72  /* OP_Open** cur
20dd0 73 6f 72 20 75 73 65 73 20 45 51 20 73 65 65 6b  sor uses EQ seek
20de0 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65   only */.#define
20df0 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54   OPFLAG_FORDELET
20e00 45 20 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a  E     0x08    /*
20e10 20 4f 50 5f 4f 70 65 6e 20 73 68 6f 75 6c 64 20   OP_Open should 
20e20 75 73 65 20 42 54 52 45 45 5f 46 4f 52 44 45 4c  use BTREE_FORDEL
20e30 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ETE */.#define O
20e40 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20 20 20  PFLAG_P2ISREG   
20e50 20 20 20 20 30 78 31 30 20 20 20 20 2f 2a 20 50      0x10    /* P
20e60 32 20 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20 69  2 to OP_Open** i
20e70 73 20 61 20 72 65 67 69 73 74 65 72 20 6e 75 6d  s a register num
20e80 62 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ber */.#define O
20e90 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 20 20  PFLAG_PERMUTE   
20ea0 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f      0x01    /* O
20eb0 50 5f 43 6f 6d 70 61 72 65 3a 20 75 73 65 20 74  P_Compare: use t
20ec0 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 2a  he permutation *
20ed0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
20ee0 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 20 30  _SAVEPOSITION  0
20ef0 78 30 32 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c  x02    /* OP_Del
20f00 65 74 65 2f 49 6e 73 65 72 74 3a 20 73 61 76 65  ete/Insert: save
20f10 20 63 75 72 73 6f 72 20 70 6f 73 20 2a 2f 0a 23   cursor pos */.#
20f20 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41 55  define OPFLAG_AU
20f30 58 44 45 4c 45 54 45 20 20 20 20 20 30 78 30 34  XDELETE     0x04
20f40 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65      /* OP_Delete
20f50 3a 20 69 6e 64 65 78 20 69 6e 20 61 20 44 45 4c  : index in a DEL
20f60 45 54 45 20 6f 70 20 2a 2f 0a 0a 2f 2a 0a 20 2a  ETE op */../*. *
20f70 20 45 61 63 68 20 74 72 69 67 67 65 72 20 70 72   Each trigger pr
20f80 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74  esent in the dat
20f90 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20  abase schema is 
20fa0 73 74 6f 72 65 64 20 61 73 20 61 6e 20 69 6e 73  stored as an ins
20fb0 74 61 6e 63 65 20 6f 66 0a 20 2a 20 73 74 72 75  tance of. * stru
20fc0 63 74 20 54 72 69 67 67 65 72 2e 0a 20 2a 0a 20  ct Trigger.. *. 
20fd0 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e  * Pointers to in
20fe0 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63  stances of struc
20ff0 74 20 54 72 69 67 67 65 72 20 61 72 65 20 73 74  t Trigger are st
21000 6f 72 65 64 20 69 6e 20 74 77 6f 20 77 61 79 73  ored in two ways
21010 2e 0a 20 2a 20 31 2e 20 49 6e 20 74 68 65 20 22  .. * 1. In the "
21020 74 72 69 67 48 61 73 68 22 20 68 61 73 68 20 74  trigHash" hash t
21030 61 62 6c 65 20 28 70 61 72 74 20 6f 66 20 74 68  able (part of th
21040 65 20 73 71 6c 69 74 65 33 2a 20 74 68 61 74 20  e sqlite3* that 
21050 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 0a 20  represents the. 
21060 2a 20 20 20 20 64 61 74 61 62 61 73 65 29 2e 20  *    database). 
21070 54 68 69 73 20 61 6c 6c 6f 77 73 20 54 72 69 67  This allows Trig
21080 67 65 72 20 73 74 72 75 63 74 75 72 65 73 20 74  ger structures t
21090 6f 20 62 65 20 72 65 74 72 69 65 76 65 64 20 62  o be retrieved b
210a0 79 20 6e 61 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c  y name.. * 2. Al
210b0 6c 20 74 72 69 67 67 65 72 73 20 61 73 73 6f 63  l triggers assoc
210c0 69 61 74 65 64 20 77 69 74 68 20 61 20 73 69 6e  iated with a sin
210d0 67 6c 65 20 74 61 62 6c 65 20 66 6f 72 6d 20 61  gle table form a
210e0 20 6c 69 6e 6b 65 64 20 6c 69 73 74 2c 20 75 73   linked list, us
210f0 69 6e 67 20 74 68 65 0a 20 2a 20 20 20 20 70 4e  ing the. *    pN
21100 65 78 74 20 6d 65 6d 62 65 72 20 6f 66 20 73 74  ext member of st
21110 72 75 63 74 20 54 72 69 67 67 65 72 2e 20 41 20  ruct Trigger. A 
21120 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66  pointer to the f
21130 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20  irst element of 
21140 74 68 65 0a 20 2a 20 20 20 20 6c 69 6e 6b 65 64  the. *    linked
21150 20 6c 69 73 74 20 69 73 20 73 74 6f 72 65 64 20   list is stored 
21160 61 73 20 74 68 65 20 22 70 54 72 69 67 67 65 72  as the "pTrigger
21170 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20  " member of the 
21180 61 73 73 6f 63 69 61 74 65 64 0a 20 2a 20 20 20  associated. *   
21190 20 73 74 72 75 63 74 20 54 61 62 6c 65 2e 0a 20   struct Table.. 
211a0 2a 0a 20 2a 20 54 68 65 20 22 73 74 65 70 5f 6c  *. * The "step_l
211b0 69 73 74 22 20 6d 65 6d 62 65 72 20 70 6f 69 6e  ist" member poin
211c0 74 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  ts to the first 
211d0 65 6c 65 6d 65 6e 74 20 6f 66 20 61 20 6c 69 6e  element of a lin
211e0 6b 65 64 20 6c 69 73 74 0a 20 2a 20 63 6f 6e 74  ked list. * cont
211f0 61 69 6e 69 6e 67 20 74 68 65 20 53 51 4c 20 73  aining the SQL s
21200 74 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66  tatements specif
21210 69 65 64 20 61 73 20 74 68 65 20 74 72 69 67 67  ied as the trigg
21220 65 72 20 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a  er program.. */.
21230 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20 7b  struct Trigger {
21240 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
21250 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
21260 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 72  e name of the tr
21270 69 67 67 65 72 20 20 20 20 20 20 20 20 20 20 20  igger           
21280 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a               */.
21290 20 20 63 68 61 72 20 2a 74 61 62 6c 65 3b 20 20    char *table;  
212a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
212b0 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20 74   table or view t
212c0 6f 20 77 68 69 63 68 20 74 68 65 20 74 72 69 67  o which the trig
212d0 67 65 72 20 61 70 70 6c 69 65 73 20 2a 2f 0a 20  ger applies */. 
212e0 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20   u8 op;         
212f0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
21300 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b  of TK_DELETE, TK
21310 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45  _UPDATE, TK_INSE
21320 52 54 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20  RT         */.  
21330 75 38 20 74 72 5f 74 6d 3b 20 20 20 20 20 20 20  u8 tr_tm;       
21340 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f          /* One o
21350 66 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45  f TRIGGER_BEFORE
21360 2c 20 54 52 49 47 47 45 52 5f 41 46 54 45 52 20  , TRIGGER_AFTER 
21370 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 6e  */.  Expr *pWhen
21380 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
21390 54 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20  The WHEN clause 
213a0 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  of the expressio
213b0 6e 20 28 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20  n (may be NULL) 
213c0 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 43 6f  */.  IdList *pCo
213d0 6c 75 6d 6e 73 3b 20 20 20 20 20 20 20 2f 2a 20  lumns;       /* 
213e0 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 55 50  If this is an UP
213f0 44 41 54 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d  DATE OF <column-
21400 6c 69 73 74 3e 20 74 72 69 67 67 65 72 2c 0a 20  list> trigger,. 
21410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21420 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
21430 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69 73  <column-list> is
21440 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a   stored here */.
21450 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
21460 61 3b 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68  a;        /* Sch
21470 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ema containing t
21480 68 65 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20  he trigger */.  
21490 53 63 68 65 6d 61 20 2a 70 54 61 62 53 63 68 65  Schema *pTabSche
214a0 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d  ma;     /* Schem
214b0 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  a containing the
214c0 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 72 69 67   table */.  Trig
214d0 67 65 72 53 74 65 70 20 2a 73 74 65 70 5f 6c 69  gerStep *step_li
214e0 73 74 3b 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74  st; /* Link list
214f0 20 6f 66 20 74 72 69 67 67 65 72 20 70 72 6f 67   of trigger prog
21500 72 61 6d 20 73 74 65 70 73 20 20 20 20 20 20 20  ram steps       
21510 20 20 20 20 20 20 2a 2f 0a 20 20 54 72 69 67 67        */.  Trigg
21520 65 72 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  er *pNext;      
21530 20 20 20 2f 2a 20 4e 65 78 74 20 74 72 69 67 67     /* Next trigg
21540 65 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  er associated wi
21550 74 68 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a  th the table */.
21560 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69 67  };../*.** A trig
21570 67 65 72 20 69 73 20 65 69 74 68 65 72 20 61 20  ger is either a 
21580 42 45 46 4f 52 45 20 6f 72 20 61 6e 20 41 46 54  BEFORE or an AFT
21590 45 52 20 74 72 69 67 67 65 72 2e 20 20 54 68 65  ER trigger.  The
215a0 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73 74   following const
215b0 61 6e 74 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e  ants.** determin
215c0 65 20 77 68 69 63 68 2e 0a 2a 2a 0a 2a 2a 20 49  e which..**.** I
215d0 66 20 74 68 65 72 65 20 61 72 65 20 6d 75 6c 74  f there are mult
215e0 69 70 6c 65 20 74 72 69 67 67 65 72 73 2c 20 79  iple triggers, y
215f0 6f 75 20 6d 69 67 68 74 20 6f 66 20 73 6f 6d 65  ou might of some
21600 20 42 45 46 4f 52 45 20 61 6e 64 20 73 6f 6d 65   BEFORE and some
21610 20 41 46 54 45 52 2e 0a 2a 2a 20 49 6e 20 74 68   AFTER..** In th
21620 61 74 20 63 61 73 65 73 2c 20 74 68 65 20 63 6f  at cases, the co
21630 6e 73 74 61 6e 74 73 20 62 65 6c 6f 77 20 63 61  nstants below ca
21640 6e 20 62 65 20 4f 52 65 64 20 74 6f 67 65 74 68  n be ORed togeth
21650 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54  er..*/.#define T
21660 52 49 47 47 45 52 5f 42 45 46 4f 52 45 20 20 31  RIGGER_BEFORE  1
21670 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47 45 52  .#define TRIGGER
21680 5f 41 46 54 45 52 20 20 20 32 0a 0a 2f 2a 0a 20  _AFTER   2../*. 
21690 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
216a0 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53   struct TriggerS
216b0 74 65 70 20 69 73 20 75 73 65 64 20 74 6f 20 73  tep is used to s
216c0 74 6f 72 65 20 61 20 73 69 6e 67 6c 65 20 53 51  tore a single SQ
216d0 4c 20 73 74 61 74 65 6d 65 6e 74 0a 20 2a 20 74  L statement. * t
216e0 68 61 74 20 69 73 20 61 20 70 61 72 74 20 6f 66  hat is a part of
216f0 20 61 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72   a trigger-progr
21700 61 6d 2e 0a 20 2a 0a 20 2a 20 49 6e 73 74 61 6e  am.. *. * Instan
21710 63 65 73 20 6f 66 20 73 74 72 75 63 74 20 54 72  ces of struct Tr
21720 69 67 67 65 72 53 74 65 70 20 61 72 65 20 73 74  iggerStep are st
21730 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 79  ored in a singly
21740 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 6c 69   linked list (li
21750 6e 6b 65 64 0a 20 2a 20 75 73 69 6e 67 20 74 68  nked. * using th
21760 65 20 22 70 4e 65 78 74 22 20 6d 65 6d 62 65 72  e "pNext" member
21770 29 20 72 65 66 65 72 65 6e 63 65 64 20 62 79 20  ) referenced by 
21780 74 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20  the "step_list" 
21790 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 0a 20 2a  member of the. *
217a0 20 61 73 73 6f 63 69 61 74 65 64 20 73 74 72 75   associated stru
217b0 63 74 20 54 72 69 67 67 65 72 20 69 6e 73 74 61  ct Trigger insta
217c0 6e 63 65 2e 20 54 68 65 20 66 69 72 73 74 20 65  nce. The first e
217d0 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 6c 69  lement of the li
217e0 6e 6b 65 64 20 6c 69 73 74 20 69 73 0a 20 2a 20  nked list is. * 
217f0 74 68 65 20 66 69 72 73 74 20 73 74 65 70 20 6f  the first step o
21800 66 20 74 68 65 20 74 72 69 67 67 65 72 2d 70 72  f the trigger-pr
21810 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a 20 54 68 65  ogram.. *. * The
21820 20 22 6f 70 22 20 6d 65 6d 62 65 72 20 69 6e 64   "op" member ind
21830 69 63 61 74 65 73 20 77 68 65 74 68 65 72 20 74  icates whether t
21840 68 69 73 20 69 73 20 61 20 22 44 45 4c 45 54 45  his is a "DELETE
21850 22 2c 20 22 49 4e 53 45 52 54 22 2c 20 22 55 50  ", "INSERT", "UP
21860 44 41 54 45 22 20 6f 72 0a 20 2a 20 22 53 45 4c  DATE" or. * "SEL
21870 45 43 54 22 20 73 74 61 74 65 6d 65 6e 74 2e 20  ECT" statement. 
21880 54 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20  The meanings of 
21890 74 68 65 20 6f 74 68 65 72 20 6d 65 6d 62 65 72  the other member
218a0 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20  s is determined 
218b0 62 79 20 74 68 65 0a 20 2a 20 76 61 6c 75 65 20  by the. * value 
218c0 6f 66 20 22 6f 70 22 20 61 73 20 66 6f 6c 6c 6f  of "op" as follo
218d0 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d  ws:. *. * (op ==
218e0 20 54 4b 5f 49 4e 53 45 52 54 29 0a 20 2a 20 6f   TK_INSERT). * o
218f0 72 63 6f 6e 66 20 20 20 20 2d 3e 20 73 74 6f 72  rconf    -> stor
21900 65 73 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49  es the ON CONFLI
21910 43 54 20 61 6c 67 6f 72 69 74 68 6d 0a 20 2a 20  CT algorithm. * 
21920 70 53 65 6c 65 63 74 20 20 20 2d 3e 20 49 66 20  pSelect   -> If 
21930 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52  this is an INSER
21940 54 20 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45 43  T INTO ... SELEC
21950 54 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c  T ... statement,
21960 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20   then. *        
21970 20 20 20 20 20 20 74 68 69 73 20 73 74 6f 72 65        this store
21980 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
21990 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
219a0 65 6e 74 2e 20 4f 74 68 65 72 77 69 73 65 20 4e  ent. Otherwise N
219b0 55 4c 4c 2e 0a 20 2a 20 7a 54 61 72 67 65 74 20  ULL.. * zTarget 
219c0 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61    -> Dequoted na
219d0 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
219e0 74 6f 20 69 6e 73 65 72 74 20 69 6e 74 6f 2e 0a  to insert into..
219f0 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20   * pExprList -> 
21a00 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e  If this is an IN
21a10 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 56 41  SERT INTO ... VA
21a20 4c 55 45 53 20 2e 2e 2e 20 73 74 61 74 65 6d 65  LUES ... stateme
21a30 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20  nt, then. *     
21a40 20 20 20 20 20 20 20 20 20 74 68 69 73 20 73 74           this st
21a50 6f 72 65 73 20 76 61 6c 75 65 73 20 74 6f 20 62  ores values to b
21a60 65 20 69 6e 73 65 72 74 65 64 2e 20 4f 74 68 65  e inserted. Othe
21a70 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70  rwise NULL.. * p
21a80 49 64 4c 69 73 74 20 20 20 2d 3e 20 49 66 20 74  IdList   -> If t
21a90 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54  his is an INSERT
21aa0 20 49 4e 54 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75   INTO ... (<colu
21ab0 6d 6e 2d 6e 61 6d 65 73 3e 29 20 56 41 4c 55 45  mn-names>) VALUE
21ac0 53 20 2e 2e 2e 0a 20 2a 20 20 20 20 20 20 20 20  S .... *        
21ad0 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74 2c        statement,
21ae0 20 74 68 65 6e 20 74 68 69 73 20 73 74 6f 72 65   then this store
21af0 73 20 74 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d  s the column-nam
21b00 65 73 20 74 6f 20 62 65 0a 20 2a 20 20 20 20 20  es to be. *     
21b10 20 20 20 20 20 20 20 20 20 69 6e 73 65 72 74 65           inserte
21b20 64 20 69 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f  d into.. *. * (o
21b30 70 20 3d 3d 20 54 4b 5f 44 45 4c 45 54 45 29 0a  p == TK_DELETE).
21b40 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20   * zTarget   -> 
21b50 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66  Dequoted name of
21b60 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 64 65   the table to de
21b70 6c 65 74 65 20 66 72 6f 6d 2e 0a 20 2a 20 70 57  lete from.. * pW
21b80 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57  here    -> The W
21b90 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74  HERE clause of t
21ba0 68 65 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d  he DELETE statem
21bb0 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70  ent if one is sp
21bc0 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20  ecified.. *     
21bd0 20 20 20 20 20 20 20 20 20 4f 74 68 65 72 77 69           Otherwi
21be0 73 65 20 4e 55 4c 4c 2e 0a 20 2a 0a 20 2a 20 28  se NULL.. *. * (
21bf0 6f 70 20 3d 3d 20 54 4b 5f 55 50 44 41 54 45 29  op == TK_UPDATE)
21c00 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e  . * zTarget   ->
21c10 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f   Dequoted name o
21c20 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 75  f the table to u
21c30 70 64 61 74 65 2e 0a 20 2a 20 70 57 68 65 72 65  pdate.. * pWhere
21c40 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45      -> The WHERE
21c50 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 55   clause of the U
21c60 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  PDATE statement 
21c70 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66  if one is specif
21c80 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20  ied.. *         
21c90 20 20 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e       Otherwise N
21ca0 55 4c 4c 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73  ULL.. * pExprLis
21cb0 74 20 2d 3e 20 41 20 6c 69 73 74 20 6f 66 20 74  t -> A list of t
21cc0 68 65 20 63 6f 6c 75 6d 6e 73 20 74 6f 20 75 70  he columns to up
21cd0 64 61 74 65 20 61 6e 64 20 74 68 65 20 65 78 70  date and the exp
21ce0 72 65 73 73 69 6f 6e 73 20 74 6f 20 75 70 64 61  ressions to upda
21cf0 74 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  te. *           
21d00 20 20 20 74 68 65 6d 20 74 6f 2e 20 53 65 65 20     them to. See 
21d10 73 71 6c 69 74 65 33 55 70 64 61 74 65 28 29 20  sqlite3Update() 
21d20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  documentation of
21d30 20 22 70 43 68 61 6e 67 65 73 22 0a 20 2a 20 20   "pChanges". *  
21d40 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67 75              argu
21d50 6d 65 6e 74 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 72  ment.. *. */.str
21d60 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20  uct TriggerStep 
21d70 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20  {.  u8 op;      
21d80 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
21d90 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b  of TK_DELETE, TK
21da0 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45  _UPDATE, TK_INSE
21db0 52 54 2c 20 54 4b 5f 53 45 4c 45 43 54 20 2a 2f  RT, TK_SELECT */
21dc0 0a 20 20 75 38 20 6f 72 63 6f 6e 66 3b 20 20 20  .  u8 orconf;   
21dd0 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 52 6f          /* OE_Ro
21de0 6c 6c 62 61 63 6b 20 65 74 63 2e 20 2a 2f 0a 20  llback etc. */. 
21df0 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 3b   Trigger *pTrig;
21e00 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74 72 69        /* The tri
21e10 67 67 65 72 20 74 68 61 74 20 74 68 69 73 20 73  gger that this s
21e20 74 65 70 20 69 73 20 61 20 70 61 72 74 20 6f 66  tep is a part of
21e30 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53   */.  Select *pS
21e40 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 53 45  elect;     /* SE
21e50 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 6f  LECT statement o
21e60 72 20 52 48 53 20 6f 66 20 49 4e 53 45 52 54 20  r RHS of INSERT 
21e70 49 4e 54 4f 20 53 45 4c 45 43 54 20 2e 2e 2e 20  INTO SELECT ... 
21e80 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 61 72 67  */.  char *zTarg
21e90 65 74 3b 20 20 20 20 20 20 20 2f 2a 20 54 61 72  et;       /* Tar
21ea0 67 65 74 20 74 61 62 6c 65 20 66 6f 72 20 44 45  get table for DE
21eb0 4c 45 54 45 2c 20 55 50 44 41 54 45 2c 20 49 4e  LETE, UPDATE, IN
21ec0 53 45 52 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a  SERT */.  Expr *
21ed0 70 57 68 65 72 65 3b 20 20 20 20 20 20 20 20 2f  pWhere;        /
21ee0 2a 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75  * The WHERE clau
21ef0 73 65 20 66 6f 72 20 44 45 4c 45 54 45 20 6f 72  se for DELETE or
21f00 20 55 50 44 41 54 45 20 73 74 65 70 73 20 2a 2f   UPDATE steps */
21f10 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 78  .  ExprList *pEx
21f20 70 72 4c 69 73 74 3b 20 2f 2a 20 53 45 54 20 63  prList; /* SET c
21f30 6c 61 75 73 65 20 66 6f 72 20 55 50 44 41 54 45  lause for UPDATE
21f40 2e 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70  . */.  IdList *p
21f50 49 64 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 43  IdList;     /* C
21f60 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 66 6f 72 20  olumn names for 
21f70 49 4e 53 45 52 54 20 2a 2f 0a 20 20 54 72 69 67  INSERT */.  Trig
21f80 67 65 72 53 74 65 70 20 2a 70 4e 65 78 74 3b 20  gerStep *pNext; 
21f90 20 2f 2a 20 4e 65 78 74 20 69 6e 20 74 68 65 20   /* Next in the 
21fa0 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20 54  link-list */.  T
21fb0 72 69 67 67 65 72 53 74 65 70 20 2a 70 4c 61 73  riggerStep *pLas
21fc0 74 3b 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65 6d  t;  /* Last elem
21fd0 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74  ent in link-list
21fe0 2e 20 56 61 6c 69 64 20 66 6f 72 20 31 73 74 20  . Valid for 1st 
21ff0 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a  elem only */.};.
22000 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
22010 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63  wing structure c
22020 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74  ontains informat
22030 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65 20  ion used by the 
22040 73 71 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20  sqliteFix....** 
22050 72 6f 75 74 69 6e 65 73 20 61 73 20 74 68 65 79  routines as they
22060 20 77 61 6c 6b 20 74 68 65 20 70 61 72 73 65 20   walk the parse 
22070 74 72 65 65 20 74 6f 20 6d 61 6b 65 20 64 61 74  tree to make dat
22080 61 62 61 73 65 20 72 65 66 65 72 65 6e 63 65 73  abase references
22090 0a 2a 2a 20 65 78 70 6c 69 63 69 74 2e 0a 2a 2f  .** explicit..*/
220a0 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
220b0 44 62 46 69 78 65 72 20 44 62 46 69 78 65 72 3b  DbFixer DbFixer;
220c0 0a 73 74 72 75 63 74 20 44 62 46 69 78 65 72 20  .struct DbFixer 
220d0 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73  {.  Parse *pPars
220e0 65 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70  e;      /* The p
220f0 61 72 73 69 6e 67 20 63 6f 6e 74 65 78 74 2e 20  arsing context. 
22100 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   Error messages 
22110 77 72 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a  written here */.
22120 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
22130 61 3b 20 20 20 20 2f 2a 20 46 69 78 20 69 74 65  a;    /* Fix ite
22140 6d 73 20 74 6f 20 74 68 69 73 20 73 63 68 65 6d  ms to this schem
22150 61 20 2a 2f 0a 20 20 69 6e 74 20 62 56 61 72 4f  a */.  int bVarO
22160 6e 6c 79 3b 20 20 20 20 20 20 20 2f 2a 20 43 68  nly;       /* Ch
22170 65 63 6b 20 66 6f 72 20 76 61 72 69 61 62 6c 65  eck for variable
22180 20 72 65 66 65 72 65 6e 63 65 73 20 6f 6e 6c 79   references only
22190 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
221a0 20 2a 7a 44 62 3b 20 20 20 20 2f 2a 20 4d 61 6b   *zDb;    /* Mak
221b0 65 20 73 75 72 65 20 61 6c 6c 20 6f 62 6a 65 63  e sure all objec
221c0 74 73 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64  ts are contained
221d0 20 69 6e 20 74 68 69 73 20 64 61 74 61 62 61 73   in this databas
221e0 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  e */.  const cha
221f0 72 20 2a 7a 54 79 70 65 3b 20 20 2f 2a 20 54 79  r *zType;  /* Ty
22200 70 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69  pe of the contai
22210 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65  ner - used for e
22220 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f  rror messages */
22230 0a 20 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a  .  const Token *
22240 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f  pName; /* Name o
22250 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20  f the container 
22260 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72  - used for error
22270 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a   messages */.};.
22280 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74  ./*.** An object
22290 65 64 20 75 73 65 64 20 74 6f 20 61 63 63 75 6d  ed used to accum
222a0 75 6c 61 74 65 20 74 68 65 20 74 65 78 74 20 6f  ulate the text o
222b0 66 20 61 20 73 74 72 69 6e 67 20 77 68 65 72 65  f a string where
222c0 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65   we.** do not ne
222d0 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20 68  cessarily know h
222e0 6f 77 20 62 69 67 20 74 68 65 20 73 74 72 69 6e  ow big the strin
222f0 67 20 77 69 6c 6c 20 62 65 20 69 6e 20 74 68 65  g will be in the
22300 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20   end..*/.struct 
22310 53 74 72 41 63 63 75 6d 20 7b 0a 20 20 73 71 6c  StrAccum {.  sql
22320 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
22330 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 61    /* Optional da
22340 74 61 62 61 73 65 20 66 6f 72 20 6c 6f 6f 6b 61  tabase for looka
22350 73 69 64 65 2e 20 20 43 61 6e 20 62 65 20 4e 55  side.  Can be NU
22360 4c 4c 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 42  LL */.  char *zB
22370 61 73 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ase;         /* 
22380 41 20 62 61 73 65 20 61 6c 6c 6f 63 61 74 69 6f  A base allocatio
22390 6e 2e 20 20 4e 6f 74 20 66 72 6f 6d 20 6d 61 6c  n.  Not from mal
223a0 6c 6f 63 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a  loc. */.  char *
223b0 7a 54 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f  zText;         /
223c0 2a 20 54 68 65 20 73 74 72 69 6e 67 20 63 6f 6c  * The string col
223d0 6c 65 63 74 65 64 20 73 6f 20 66 61 72 20 2a 2f  lected so far */
223e0 0a 20 20 75 33 32 20 20 6e 43 68 61 72 3b 20 20  .  u32  nChar;  
223f0 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74          /* Lengt
22400 68 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20  h of the string 
22410 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75 33 32 20  so far */.  u32 
22420 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20   nAlloc;        
22430 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66 20 73 70   /* Amount of sp
22440 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e  ace allocated in
22450 20 7a 54 65 78 74 20 2a 2f 0a 20 20 75 33 32 20   zText */.  u32 
22460 20 6d 78 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20   mxAlloc;       
22470 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61 6c 6c 6f   /* Maximum allo
22480 77 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20  wed allocation. 
22490 20 30 20 66 6f 72 20 6e 6f 20 6d 61 6c 6c 6f 63   0 for no malloc
224a0 20 75 73 61 67 65 20 2a 2f 0a 20 20 75 38 20 20   usage */.  u8  
224b0 20 61 63 63 45 72 72 6f 72 3b 20 20 20 20 20 20   accError;      
224c0 20 2f 2a 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d   /* STRACCUM_NOM
224d0 45 4d 20 6f 72 20 53 54 52 41 43 43 55 4d 5f 54  EM or STRACCUM_T
224e0 4f 4f 42 49 47 20 2a 2f 0a 20 20 75 38 20 20 20  OOBIG */.  u8   
224f0 70 72 69 6e 74 66 46 6c 61 67 73 3b 20 20 20 20  printfFlags;    
22500 2f 2a 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46  /* SQLITE_PRINTF
22510 20 66 6c 61 67 73 20 62 65 6c 6f 77 20 2a 2f 0a   flags below */.
22520 7d 3b 0a 23 64 65 66 69 6e 65 20 53 54 52 41 43  };.#define STRAC
22530 43 55 4d 5f 4e 4f 4d 45 4d 20 20 20 31 0a 23 64  CUM_NOMEM   1.#d
22540 65 66 69 6e 65 20 53 54 52 41 43 43 55 4d 5f 54  efine STRACCUM_T
22550 4f 4f 42 49 47 20 20 32 0a 23 64 65 66 69 6e 65  OOBIG  2.#define
22560 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 49   SQLITE_PRINTF_I
22570 4e 54 45 52 4e 41 4c 20 30 78 30 31 20 20 2f 2a  NTERNAL 0x01  /*
22580 20 49 6e 74 65 72 6e 61 6c 2d 75 73 65 2d 6f 6e   Internal-use-on
22590 6c 79 20 63 6f 6e 76 65 72 74 65 72 73 20 61 6c  ly converters al
225a0 6c 6f 77 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  lowed */.#define
225b0 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 53   SQLITE_PRINTF_S
225c0 51 4c 46 55 4e 43 20 20 30 78 30 32 20 20 2f 2a  QLFUNC  0x02  /*
225d0 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 61 72   SQL function ar
225e0 67 75 6d 65 6e 74 73 20 74 6f 20 56 58 50 72 69  guments to VXPri
225f0 6e 74 66 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ntf */.#define S
22600 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 4d 41 4c  QLITE_PRINTF_MAL
22610 4c 4f 43 45 44 20 30 78 30 34 20 20 2f 2a 20 54  LOCED 0x04  /* T
22620 72 75 65 20 69 66 20 78 54 65 78 74 20 69 73 20  rue if xText is 
22630 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20  allocated space 
22640 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 69 73 4d 61  */..#define isMa
22650 6c 6c 6f 63 65 64 28 58 29 20 20 28 28 28 58 29  lloced(X)  (((X)
22660 2d 3e 70 72 69 6e 74 66 46 6c 61 67 73 20 26 20  ->printfFlags & 
22670 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 4d 41  SQLITE_PRINTF_MA
22680 4c 4c 4f 43 45 44 29 21 3d 30 29 0a 0a 0a 2f 2a  LLOCED)!=0).../*
22690 0a 2a 2a 20 41 20 70 6f 69 6e 74 65 72 20 74 6f  .** A pointer to
226a0 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
226b0 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 6d 75  is used to commu
226c0 6e 69 63 61 74 65 20 69 6e 66 6f 72 6d 61 74 69  nicate informati
226d0 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74  on.** from sqlit
226e0 65 33 49 6e 69 74 20 61 6e 64 20 4f 50 5f 50 61  e3Init and OP_Pa
226f0 72 73 65 53 63 68 65 6d 61 20 69 6e 74 6f 20 74  rseSchema into t
22700 68 65 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61  he sqlite3InitCa
22710 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64  llback..*/.typed
22720 65 66 20 73 74 72 75 63 74 20 7b 0a 20 20 73 71  ef struct {.  sq
22730 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20  lite3 *db;      
22740 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73    /* The databas
22750 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69  e being initiali
22760 7a 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a  zed */.  char **
22770 70 7a 45 72 72 4d 73 67 3b 20 20 20 20 2f 2a 20  pzErrMsg;    /* 
22780 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74  Error message st
22790 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 69  ored here */.  i
227a0 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20 20 20  nt iDb;         
227b0 20 20 20 2f 2a 20 30 20 66 6f 72 20 6d 61 69 6e     /* 0 for main
227c0 20 64 61 74 61 62 61 73 65 2e 20 20 31 20 66 6f   database.  1 fo
227d0 72 20 54 45 4d 50 2c 20 32 2e 2e 20 66 6f 72 20  r TEMP, 2.. for 
227e0 41 54 54 41 43 48 65 64 20 2a 2f 0a 20 20 69 6e  ATTACHed */.  in
227f0 74 20 72 63 3b 20 20 20 20 20 20 20 20 20 20 20  t rc;           
22800 20 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f 64 65    /* Result code
22810 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a   stored here */.
22820 7d 20 49 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a  } InitData;../*.
22830 2a 2a 20 53 74 72 75 63 74 75 72 65 20 63 6f 6e  ** Structure con
22840 74 61 69 6e 69 6e 67 20 67 6c 6f 62 61 6c 20 63  taining global c
22850 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 64 61 74  onfiguration dat
22860 61 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65  a for the SQLite
22870 20 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20   library..**.** 
22880 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20 61  This structure a
22890 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20 73 6f 6d  lso contains som
228a0 65 20 73 74 61 74 65 20 69 6e 66 6f 72 6d 61 74  e state informat
228b0 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  ion..*/.struct S
228c0 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 7b 0a 20  qlite3Config {. 
228d0 20 69 6e 74 20 62 4d 65 6d 73 74 61 74 3b 20 20   int bMemstat;  
228e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
228f0 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e     /* True to en
22900 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 74 61 74  able memory stat
22910 75 73 20 2a 2f 0a 20 20 69 6e 74 20 62 43 6f 72  us */.  int bCor
22920 65 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20  eMutex;         
22930 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
22940 65 20 74 6f 20 65 6e 61 62 6c 65 20 63 6f 72 65  e to enable core
22950 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69   mutexing */.  i
22960 6e 74 20 62 46 75 6c 6c 4d 75 74 65 78 3b 20 20  nt bFullMutex;  
22970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22980 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
22990 6c 65 20 66 75 6c 6c 20 6d 75 74 65 78 69 6e 67  le full mutexing
229a0 20 2a 2f 0a 20 20 69 6e 74 20 62 4f 70 65 6e 55   */.  int bOpenU
229b0 72 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ri;             
229c0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
229d0 74 6f 20 69 6e 74 65 72 70 72 65 74 20 66 69 6c  to interpret fil
229e0 65 6e 61 6d 65 73 20 61 73 20 55 52 49 73 20 2a  enames as URIs *
229f0 2f 0a 20 20 69 6e 74 20 62 55 73 65 43 69 73 3b  /.  int bUseCis;
22a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a10 20 20 20 20 20 20 2f 2a 20 55 73 65 20 63 6f 76        /* Use cov
22a20 65 72 69 6e 67 20 69 6e 64 69 63 65 73 20 66 6f  ering indices fo
22a30 72 20 66 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a  r full-scans */.
22a40 20 20 69 6e 74 20 6d 78 53 74 72 6c 65 6e 3b 20    int mxStrlen; 
22a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a60 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73      /* Maximum s
22a70 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a  tring length */.
22a80 20 20 69 6e 74 20 6e 65 76 65 72 43 6f 72 72 75    int neverCorru
22a90 70 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pt;             
22aa0 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20      /* Database 
22ab0 69 73 20 61 6c 77 61 79 73 20 77 65 6c 6c 2d 66  is always well-f
22ac0 6f 72 6d 65 64 20 2a 2f 0a 20 20 69 6e 74 20 73  ormed */.  int s
22ad0 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20  zLookaside;     
22ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
22af0 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64  Default lookasid
22b00 65 20 62 75 66 66 65 72 20 73 69 7a 65 20 2a 2f  e buffer size */
22b10 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64  .  int nLookasid
22b20 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
22b30 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
22b40 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72  lookaside buffer
22b50 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 69 6e 74 20   count */.  int 
22b60 6e 53 74 6d 74 53 70 69 6c 6c 3b 20 20 20 20 20  nStmtSpill;     
22b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
22b80 20 53 74 6d 74 2d 6a 6f 75 72 6e 61 6c 20 73 70   Stmt-journal sp
22b90 69 6c 6c 2d 74 6f 2d 64 69 73 6b 20 74 68 72 65  ill-to-disk thre
22ba0 73 68 6f 6c 64 20 2a 2f 0a 20 20 73 71 6c 69 74  shold */.  sqlit
22bb0 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 6d  e3_mem_methods m
22bc0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
22bd0 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72 79  Low-level memory
22be0 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 74 65   allocation inte
22bf0 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74  rface */.  sqlit
22c00 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73  e3_mutex_methods
22c10 20 6d 75 74 65 78 3b 20 20 20 20 20 20 2f 2a 20   mutex;      /* 
22c20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75 74 65 78 20  Low-level mutex 
22c30 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73  interface */.  s
22c40 71 6c 69 74 65 33 5f 70 63 61 63 68 65 5f 6d 65  qlite3_pcache_me
22c50 74 68 6f 64 73 32 20 70 63 61 63 68 65 32 3b 20  thods2 pcache2; 
22c60 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 70 61   /* Low-level pa
22c70 67 65 2d 63 61 63 68 65 20 69 6e 74 65 72 66 61  ge-cache interfa
22c80 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 48  ce */.  void *pH
22c90 65 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  eap;            
22ca0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65 61            /* Hea
22cb0 70 20 73 74 6f 72 61 67 65 20 73 70 61 63 65 20  p storage space 
22cc0 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 61 70 3b 20  */.  int nHeap; 
22cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ce0 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
22cf0 66 20 70 48 65 61 70 5b 5d 20 2a 2f 0a 20 20 69  f pHeap[] */.  i
22d00 6e 74 20 6d 6e 52 65 71 2c 20 6d 78 52 65 71 3b  nt mnReq, mxReq;
22d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d20 20 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d 61 78 20   /* Min and max 
22d30 68 65 61 70 20 72 65 71 75 65 73 74 73 20 73 69  heap requests si
22d40 7a 65 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  zes */.  sqlite3
22d50 5f 69 6e 74 36 34 20 73 7a 4d 6d 61 70 3b 20 20  _int64 szMmap;  
22d60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 6d             /* mm
22d70 61 70 28 29 20 73 70 61 63 65 20 70 65 72 20 6f  ap() space per o
22d80 70 65 6e 20 66 69 6c 65 20 2a 2f 0a 20 20 73 71  pen file */.  sq
22d90 6c 69 74 65 33 5f 69 6e 74 36 34 20 6d 78 4d 6d  lite3_int64 mxMm
22da0 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ap;             
22db0 2f 2a 20 4d 61 78 69 6d 75 6d 20 76 61 6c 75 65  /* Maximum value
22dc0 20 66 6f 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a 20   for szMmap */. 
22dd0 20 76 6f 69 64 20 2a 70 53 63 72 61 74 63 68 3b   void *pScratch;
22de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22df0 20 20 20 2f 2a 20 53 63 72 61 74 63 68 20 6d 65     /* Scratch me
22e00 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a  mory */.  int sz
22e10 53 63 72 61 74 63 68 3b 20 20 20 20 20 20 20 20  Scratch;        
22e20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
22e30 69 7a 65 20 6f 66 20 65 61 63 68 20 73 63 72 61  ize of each scra
22e40 74 63 68 20 62 75 66 66 65 72 20 2a 2f 0a 20 20  tch buffer */.  
22e50 69 6e 74 20 6e 53 63 72 61 74 63 68 3b 20 20 20  int nScratch;   
22e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e70 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73    /* Number of s
22e80 63 72 61 74 63 68 20 62 75 66 66 65 72 73 20 2a  cratch buffers *
22e90 2f 0a 20 20 76 6f 69 64 20 2a 70 50 61 67 65 3b  /.  void *pPage;
22ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22eb0 20 20 20 20 20 20 2f 2a 20 50 61 67 65 20 63 61        /* Page ca
22ec0 63 68 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20  che memory */.  
22ed0 69 6e 74 20 73 7a 50 61 67 65 3b 20 20 20 20 20  int szPage;     
22ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ef0 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63    /* Size of eac
22f00 68 20 70 61 67 65 20 69 6e 20 70 50 61 67 65 5b  h page in pPage[
22f10 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 61 67 65  ] */.  int nPage
22f20 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
22f30 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
22f40 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 70  er of pages in p
22f50 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  Page[] */.  int 
22f60 6d 78 50 61 72 73 65 72 53 74 61 63 6b 3b 20 20  mxParserStack;  
22f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
22f80 20 6d 61 78 69 6d 75 6d 20 64 65 70 74 68 20 6f   maximum depth o
22f90 66 20 74 68 65 20 70 61 72 73 65 72 20 73 74 61  f the parser sta
22fa0 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 73 68 61 72  ck */.  int shar
22fb0 65 64 43 61 63 68 65 45 6e 61 62 6c 65 64 3b 20  edCacheEnabled; 
22fc0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 72 75            /* tru
22fd0 65 20 69 66 20 73 68 61 72 65 64 2d 63 61 63 68  e if shared-cach
22fe0 65 20 6d 6f 64 65 20 65 6e 61 62 6c 65 64 20 2a  e mode enabled *
22ff0 2f 0a 20 20 75 33 32 20 73 7a 50 6d 61 3b 20 20  /.  u32 szPma;  
23000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23010 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d        /* Maximum
23020 20 53 6f 72 74 65 72 20 50 4d 41 20 73 69 7a 65   Sorter PMA size
23030 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 61 62 6f   */.  /* The abo
23040 76 65 20 6d 69 67 68 74 20 62 65 20 69 6e 69 74  ve might be init
23050 69 61 6c 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a  ialized to non-z
23060 65 72 6f 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77  ero.  The follow
23070 69 6e 67 20 6e 65 65 64 20 74 6f 20 61 6c 77 61  ing need to alwa
23080 79 73 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c 6c  ys.  ** initiall
23090 79 20 62 65 20 7a 65 72 6f 2c 20 68 6f 77 65 76  y be zero, howev
230a0 65 72 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 73 49  er. */.  int isI
230b0 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  nit;            
230c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
230d0 75 65 20 61 66 74 65 72 20 69 6e 69 74 69 61 6c  ue after initial
230e0 69 7a 61 74 69 6f 6e 20 68 61 73 20 66 69 6e 69  ization has fini
230f0 73 68 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 6e  shed */.  int in
23100 50 72 6f 67 72 65 73 73 3b 20 20 20 20 20 20 20  Progress;       
23110 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
23120 72 75 65 20 77 68 69 6c 65 20 69 6e 69 74 69 61  rue while initia
23130 6c 69 7a 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67  lization in prog
23140 72 65 73 73 20 2a 2f 0a 20 20 69 6e 74 20 69 73  ress */.  int is
23150 4d 75 74 65 78 49 6e 69 74 3b 20 20 20 20 20 20  MutexInit;      
23160 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
23170 72 75 65 20 61 66 74 65 72 20 6d 75 74 65 78 65  rue after mutexe
23180 73 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65  s are initialize
23190 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 61 6c  d */.  int isMal
231a0 6c 6f 63 49 6e 69 74 3b 20 20 20 20 20 20 20 20  locInit;        
231b0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
231c0 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73   after malloc is
231d0 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
231e0 20 20 69 6e 74 20 69 73 50 43 61 63 68 65 49 6e    int isPCacheIn
231f0 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
23200 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65      /* True afte
23210 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74  r malloc is init
23220 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74  ialized */.  int
23230 20 6e 52 65 66 49 6e 69 74 4d 75 74 65 78 3b 20   nRefInitMutex; 
23240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
23250 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 72  * Number of user
23260 73 20 6f 66 20 70 49 6e 69 74 4d 75 74 65 78 20  s of pInitMutex 
23270 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  */.  sqlite3_mut
23280 65 78 20 2a 70 49 6e 69 74 4d 75 74 65 78 3b 20  ex *pInitMutex; 
23290 20 20 20 20 20 20 20 2f 2a 20 4d 75 74 65 78 20         /* Mutex 
232a0 75 73 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  used by sqlite3_
232b0 69 6e 69 74 69 61 6c 69 7a 65 28 29 20 2a 2f 0a  initialize() */.
232c0 20 20 76 6f 69 64 20 28 2a 78 4c 6f 67 29 28 76    void (*xLog)(v
232d0 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  oid*,int,const c
232e0 68 61 72 2a 29 3b 20 2f 2a 20 46 75 6e 63 74 69  har*); /* Functi
232f0 6f 6e 20 66 6f 72 20 6c 6f 67 67 69 6e 67 20 2a  on for logging *
23300 2f 0a 20 20 76 6f 69 64 20 2a 70 4c 6f 67 41 72  /.  void *pLogAr
23310 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
23320 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
23330 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 4c  t argument to xL
23340 6f 67 28 29 20 2a 2f 0a 23 69 66 64 65 66 20 53  og() */.#ifdef S
23350 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c  QLITE_ENABLE_SQL
23360 4c 4f 47 0a 20 20 76 6f 69 64 28 2a 78 53 71 6c  LOG.  void(*xSql
23370 6c 6f 67 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74  log)(void*,sqlit
23380 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
23390 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70   int);.  void *p
233a0 53 71 6c 6c 6f 67 41 72 67 3b 0a 23 65 6e 64 69  SqllogArg;.#endi
233b0 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
233c0 56 44 42 45 5f 43 4f 56 45 52 41 47 45 0a 20 20  VDBE_COVERAGE.  
233d0 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  /* The following
233e0 20 63 61 6c 6c 62 61 63 6b 20 28 69 66 20 6e 6f   callback (if no
233f0 74 20 4e 55 4c 4c 29 20 69 73 20 69 6e 76 6f 6b  t NULL) is invok
23400 65 64 20 6f 6e 20 65 76 65 72 79 20 56 44 42 45  ed on every VDBE
23410 20 62 72 61 6e 63 68 0a 20 20 2a 2a 20 6f 70 65   branch.  ** ope
23420 72 61 74 69 6f 6e 2e 20 20 53 65 74 20 74 68 65  ration.  Set the
23430 20 63 61 6c 6c 62 61 63 6b 20 75 73 69 6e 67 20   callback using 
23440 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f  SQLITE_TESTCTRL_
23450 56 44 42 45 5f 43 4f 56 45 52 41 47 45 2e 0a 20  VDBE_COVERAGE.. 
23460 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 56 64   */.  void (*xVd
23470 62 65 42 72 61 6e 63 68 29 28 76 6f 69 64 2a 2c  beBranch)(void*,
23480 69 6e 74 20 69 53 72 63 4c 69 6e 65 2c 75 38 20  int iSrcLine,u8 
23490 65 54 68 69 73 2c 75 38 20 65 4d 78 29 3b 20 20  eThis,u8 eMx);  
234a0 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  /* Callback */. 
234b0 20 76 6f 69 64 20 2a 70 56 64 62 65 42 72 61 6e   void *pVdbeBran
234c0 63 68 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  chArg;          
234d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
234e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73             /* 1s
234f0 74 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 23 65  t argument */.#e
23500 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
23510 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 20  ITE_UNTESTABLE. 
23520 20 69 6e 74 20 28 2a 78 54 65 73 74 43 61 6c 6c   int (*xTestCall
23530 62 61 63 6b 29 28 69 6e 74 29 3b 20 20 20 20 20  back)(int);     
23540 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 62 79     /* Invoked by
23550 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d   sqlite3FaultSim
23560 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69  () */.#endif.  i
23570 6e 74 20 62 4c 6f 63 61 6c 74 69 6d 65 46 61 75  nt bLocaltimeFau
23580 6c 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  lt;             
23590 20 2f 2a 20 54 72 75 65 20 74 6f 20 66 61 69 6c   /* True to fail
235a0 20 6c 6f 63 61 6c 74 69 6d 65 28 29 20 63 61 6c   localtime() cal
235b0 6c 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4f 6e 63  ls */.  int iOnc
235c0 65 52 65 73 65 74 54 68 72 65 73 68 6f 6c 64 3b  eResetThreshold;
235d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65            /* Whe
235e0 6e 20 74 6f 20 72 65 73 65 74 20 4f 50 5f 4f 6e  n to reset OP_On
235f0 63 65 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 7d  ce counters */.}
23600 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d 61  ;../*.** This ma
23610 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69  cro is used insi
23620 64 65 20 6f 66 20 61 73 73 65 72 74 28 29 20 73  de of assert() s
23630 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 69 6e 64  tatements to ind
23640 69 63 61 74 65 20 74 68 61 74 0a 2a 2a 20 74 68  icate that.** th
23650 65 20 61 73 73 65 72 74 20 69 73 20 6f 6e 6c 79  e assert is only
23660 20 76 61 6c 69 64 20 6f 6e 20 61 20 77 65 6c 6c   valid on a well
23670 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65  -formed database
23680 2e 20 20 49 6e 73 74 65 61 64 20 6f 66 3a 0a 2a  .  Instead of:.*
23690 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28  *.**     assert(
236a0 20 58 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20   X );.**.** One 
236b0 77 72 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20  writes:.**.**   
236c0 20 20 61 73 73 65 72 74 28 20 58 20 7c 7c 20 43    assert( X || C
236d0 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a 2a 2a 0a  ORRUPT_DB );.**.
236e0 2a 2a 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73  ** CORRUPT_DB is
236f0 20 74 72 75 65 20 64 75 72 69 6e 67 20 6e 6f 72   true during nor
23700 6d 61 6c 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20  mal operation.  
23710 43 4f 52 52 55 50 54 5f 44 42 20 64 6f 65 73 20  CORRUPT_DB does 
23720 6e 6f 74 20 69 6e 64 69 63 61 74 65 0a 2a 2a 20  not indicate.** 
23730 74 68 61 74 20 74 68 65 20 64 61 74 61 62 61 73  that the databas
23740 65 20 69 73 20 64 65 66 69 6e 69 74 65 6c 79 20  e is definitely 
23750 63 6f 72 72 75 70 74 2c 20 6f 6e 6c 79 20 74 68  corrupt, only th
23760 61 74 20 69 74 20 6d 69 67 68 74 20 62 65 20 63  at it might be c
23770 6f 72 72 75 70 74 2e 0a 2a 2a 20 46 6f 72 20 6d  orrupt..** For m
23780 6f 73 74 20 74 65 73 74 20 63 61 73 65 73 2c 20  ost test cases, 
23790 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20 73 65  CORRUPT_DB is se
237a0 74 20 74 6f 20 66 61 6c 73 65 20 75 73 69 6e 67  t to false using
237b0 20 61 20 73 70 65 63 69 61 6c 0a 2a 2a 20 73 71   a special.** sq
237c0 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72  lite3_test_contr
237d0 6f 6c 28 29 2e 20 20 54 68 69 73 20 65 6e 61 62  ol().  This enab
237e0 6c 65 73 20 61 73 73 65 72 74 28 29 20 73 74 61  les assert() sta
237f0 74 65 6d 65 6e 74 73 20 74 6f 20 70 72 6f 76 65  tements to prove
23800 0a 2a 2a 20 74 68 69 6e 67 73 20 74 68 61 74 20  .** things that 
23810 61 72 65 20 61 6c 77 61 79 73 20 74 72 75 65 20  are always true 
23820 66 6f 72 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20  for well-formed 
23830 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 64  databases..*/.#d
23840 65 66 69 6e 65 20 43 4f 52 52 55 50 54 5f 44 42  efine CORRUPT_DB
23850 20 20 28 73 71 6c 69 74 65 33 43 6f 6e 66 69 67    (sqlite3Config
23860 2e 6e 65 76 65 72 43 6f 72 72 75 70 74 3d 3d 30  .neverCorrupt==0
23870 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74  )../*.** Context
23880 20 70 6f 69 6e 74 65 72 20 70 61 73 73 65 64 20   pointer passed 
23890 64 6f 77 6e 20 74 68 72 6f 75 67 68 20 74 68 65  down through the
238a0 20 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73   tree-walk..*/.s
238b0 74 72 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a 20  truct Walker {. 
238c0 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20   Parse *pParse; 
238d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
238e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
238f0 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 2a  rser context.  *
23900 2f 0a 20 20 69 6e 74 20 28 2a 78 45 78 70 72 43  /.  int (*xExprC
23910 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a  allback)(Walker*
23920 2c 20 45 78 70 72 2a 29 3b 20 20 20 20 20 2f 2a  , Expr*);     /*
23930 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 65 78   Callback for ex
23940 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69  pressions */.  i
23950 6e 74 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c  nt (*xSelectCall
23960 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 53 65  back)(Walker*,Se
23970 6c 65 63 74 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c  lect*);  /* Call
23980 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73  back for SELECTs
23990 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 65   */.  void (*xSe
239a0 6c 65 63 74 43 61 6c 6c 62 61 63 6b 32 29 28 57  lectCallback2)(W
239b0 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b  alker*,Select*);
239c0 2f 2a 20 53 65 63 6f 6e 64 20 63 61 6c 6c 62 61  /* Second callba
239d0 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a  ck for SELECTs *
239e0 2f 0a 20 20 69 6e 74 20 77 61 6c 6b 65 72 44 65  /.  int walkerDe
239f0 70 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 20  pth;            
23a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
23a10 20 4e 75 6d 62 65 72 20 6f 66 20 73 75 62 71 75   Number of subqu
23a20 65 72 69 65 73 20 2a 2f 0a 20 20 75 38 20 65 43  eries */.  u8 eC
23a30 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ode;            
23a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a50 20 20 20 20 20 2f 2a 20 41 20 73 6d 61 6c 6c 20       /* A small 
23a60 70 72 6f 63 65 73 73 69 6e 67 20 63 6f 64 65 20  processing code 
23a70 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20  */.  union {    
23a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
23aa0 2a 20 45 78 74 72 61 20 64 61 74 61 20 66 6f 72  * Extra data for
23ab0 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 20   callback */.   
23ac0 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e   NameContext *pN
23ad0 43 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  C;              
23ae0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
23af0 6d 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a  ming context */.
23b00 20 20 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20      int n;      
23b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
23b30 20 41 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20   A counter */.  
23b40 20 20 69 6e 74 20 69 43 75 72 3b 20 20 20 20 20    int iCur;     
23b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
23b70 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a   cursor number *
23b80 2f 0a 20 20 20 20 53 72 63 4c 69 73 74 20 2a 70  /.    SrcList *p
23b90 53 72 63 4c 69 73 74 3b 20 20 20 20 20 20 20 20  SrcList;        
23ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23bb0 2f 2a 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a  /* FROM clause *
23bc0 2f 0a 20 20 20 20 73 74 72 75 63 74 20 53 72 63  /.    struct Src
23bd0 43 6f 75 6e 74 20 2a 70 53 72 63 43 6f 75 6e 74  Count *pSrcCount
23be0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
23bf0 2f 2a 20 43 6f 75 6e 74 69 6e 67 20 63 6f 6c 75  /* Counting colu
23c00 6d 6e 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f  mn references */
23c10 0a 20 20 20 20 73 74 72 75 63 74 20 43 43 75 72  .    struct CCur
23c20 48 69 6e 74 20 2a 70 43 43 75 72 48 69 6e 74 3b  Hint *pCCurHint;
23c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
23c40 2a 20 55 73 65 64 20 62 79 20 63 6f 64 65 43 75  * Used by codeCu
23c50 72 73 6f 72 48 69 6e 74 28 29 20 2a 2f 0a 20 20  rsorHint() */.  
23c60 20 20 69 6e 74 20 2a 61 69 43 6f 6c 3b 20 20 20    int *aiCol;   
23c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23c80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 61              /* a
23c90 72 72 61 79 20 6f 66 20 63 6f 6c 75 6d 6e 20 69  rray of column i
23ca0 6e 64 65 78 65 73 20 2a 2f 0a 20 20 20 20 73 74  ndexes */.    st
23cb0 72 75 63 74 20 49 64 78 43 6f 76 65 72 20 2a 70  ruct IdxCover *p
23cc0 49 64 78 43 6f 76 65 72 3b 20 20 20 20 20 20 20  IdxCover;       
23cd0 20 20 20 20 20 20 20 20 2f 2a 20 43 68 65 63 6b          /* Check
23ce0 20 66 6f 72 20 69 6e 64 65 78 20 63 6f 76 65 72   for index cover
23cf0 61 67 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63  age */.    struc
23d00 74 20 49 64 78 45 78 70 72 54 72 61 6e 73 20 2a  t IdxExprTrans *
23d10 70 49 64 78 54 72 61 6e 73 3b 20 20 20 20 20 20  pIdxTrans;      
23d20 20 20 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74 20       /* Convert 
23d30 69 6e 64 65 78 65 64 20 65 78 70 72 20 74 6f 20  indexed expr to 
23d40 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 20 20 45 78  column */.    Ex
23d50 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79  prList *pGroupBy
23d60 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
23d70 20 20 20 20 20 20 20 20 2f 2a 20 47 52 4f 55 50          /* GROUP
23d80 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20   BY clause */.  
23d90 20 20 73 74 72 75 63 74 20 48 61 76 69 6e 67 54    struct HavingT
23da0 6f 57 68 65 72 65 43 74 78 20 2a 70 48 61 76 69  oWhereCtx *pHavi
23db0 6e 67 43 74 78 3b 20 20 20 20 20 20 2f 2a 20 48  ngCtx;      /* H
23dc0 41 56 49 4e 47 20 74 6f 20 57 48 45 52 45 20 63  AVING to WHERE c
23dd0 6c 61 75 73 65 20 63 74 78 20 2a 2f 0a 20 20 7d  lause ctx */.  }
23de0 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61   u;.};../* Forwa
23df0 72 64 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20  rd declarations 
23e00 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  */.int sqlite3Wa
23e10 6c 6b 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20  lkExpr(Walker*, 
23e20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
23e30 74 65 33 57 61 6c 6b 45 78 70 72 4c 69 73 74 28  te3WalkExprList(
23e40 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 4c 69 73  Walker*, ExprLis
23e50 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
23e60 57 61 6c 6b 53 65 6c 65 63 74 28 57 61 6c 6b 65  WalkSelect(Walke
23e70 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  r*, Select*);.in
23e80 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c  t sqlite3WalkSel
23e90 65 63 74 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c  ectExpr(Walker*,
23ea0 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73   Select*);.int s
23eb0 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74  qlite3WalkSelect
23ec0 46 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20 53 65  From(Walker*, Se
23ed0 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lect*);.int sqli
23ee0 74 65 33 45 78 70 72 57 61 6c 6b 4e 6f 6f 70 28  te3ExprWalkNoop(
23ef0 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b  Walker*, Expr*);
23f00 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65  .int sqlite3Sele
23f10 63 74 57 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65  ctWalkNoop(Walke
23f20 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 23 69  r*, Select*);.#i
23f30 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
23f40 47 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  G.void sqlite3Se
23f50 6c 65 63 74 57 61 6c 6b 41 73 73 65 72 74 32 28  lectWalkAssert2(
23f60 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a  Walker*, Select*
23f70 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  );.#endif../*.**
23f80 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f   Return code fro
23f90 6d 20 74 68 65 20 70 61 72 73 65 2d 74 72 65 65  m the parse-tree
23fa0 20 77 61 6c 6b 69 6e 67 20 70 72 69 6d 69 74 69   walking primiti
23fb0 76 65 73 20 61 6e 64 20 74 68 65 69 72 0a 2a 2a  ves and their.**
23fc0 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23   callbacks..*/.#
23fd0 64 65 66 69 6e 65 20 57 52 43 5f 43 6f 6e 74 69  define WRC_Conti
23fe0 6e 75 65 20 20 20 20 30 20 20 20 2f 2a 20 43 6f  nue    0   /* Co
23ff0 6e 74 69 6e 75 65 20 64 6f 77 6e 20 69 6e 74 6f  ntinue down into
24000 20 63 68 69 6c 64 72 65 6e 20 2a 2f 0a 23 64 65   children */.#de
24010 66 69 6e 65 20 57 52 43 5f 50 72 75 6e 65 20 20  fine WRC_Prune  
24020 20 20 20 20 20 31 20 20 20 2f 2a 20 4f 6d 69 74       1   /* Omit
24030 20 63 68 69 6c 64 72 65 6e 20 62 75 74 20 63 6f   children but co
24040 6e 74 69 6e 75 65 20 77 61 6c 6b 69 6e 67 20 73  ntinue walking s
24050 69 62 6c 69 6e 67 73 20 2a 2f 0a 23 64 65 66 69  iblings */.#defi
24060 6e 65 20 57 52 43 5f 41 62 6f 72 74 20 20 20 20  ne WRC_Abort    
24070 20 20 20 32 20 20 20 2f 2a 20 41 62 61 6e 64 6f     2   /* Abando
24080 6e 20 74 68 65 20 74 72 65 65 20 77 61 6c 6b 20  n the tree walk 
24090 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  */../*.** An ins
240a0 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
240b0 72 75 63 74 75 72 65 20 72 65 70 72 65 73 65 6e  ructure represen
240c0 74 73 20 61 20 73 65 74 20 6f 66 20 6f 6e 65 20  ts a set of one 
240d0 6f 72 20 6d 6f 72 65 20 43 54 45 73 0a 2a 2a 20  or more CTEs.** 
240e0 28 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78  (common table ex
240f0 70 72 65 73 73 69 6f 6e 73 29 20 63 72 65 61 74  pressions) creat
24100 65 64 20 62 79 20 61 20 73 69 6e 67 6c 65 20 57  ed by a single W
24110 49 54 48 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73  ITH clause..*/.s
24120 74 72 75 63 74 20 57 69 74 68 20 7b 0a 20 20 69  truct With {.  i
24130 6e 74 20 6e 43 74 65 3b 20 20 20 20 20 20 20 20  nt nCte;        
24140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
24150 2a 20 4e 75 6d 62 65 72 20 6f 66 20 43 54 45 73  * Number of CTEs
24160 20 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61   in the WITH cla
24170 75 73 65 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70  use */.  With *p
24180 4f 75 74 65 72 3b 20 20 20 20 20 20 20 20 20 20  Outer;          
24190 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74           /* Cont
241a0 61 69 6e 69 6e 67 20 57 49 54 48 20 63 6c 61 75  aining WITH clau
241b0 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20  se, or NULL */. 
241c0 20 73 74 72 75 63 74 20 43 74 65 20 7b 20 20 20   struct Cte {   
241d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
241e0 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 43 54 45   /* For each CTE
241f0 20 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61   in the WITH cla
24200 75 73 65 2e 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63  use.... */.    c
24210 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
24220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
24230 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 43  * Name of this C
24240 54 45 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69  TE */.    ExprLi
24250 73 74 20 2a 70 43 6f 6c 73 3b 20 20 20 20 20 20  st *pCols;      
24260 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73            /* Lis
24270 74 20 6f 66 20 65 78 70 6c 69 63 69 74 20 63 6f  t of explicit co
24280 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20 6f 72 20 4e  lumn names, or N
24290 55 4c 4c 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63  ULL */.    Selec
242a0 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20  t *pSelect;     
242b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
242c0 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20  e definition of 
242d0 74 68 69 73 20 43 54 45 20 2a 2f 0a 20 20 20 20  this CTE */.    
242e0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 74 65  const char *zCte
242f0 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Err;            
24300 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65  /* Error message
24310 20 66 6f 72 20 63 69 72 63 75 6c 61 72 20 72 65   for circular re
24320 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20  ferences */.  } 
24330 61 5b 31 5d 3b 0a 7d 3b 0a 0a 23 69 66 64 65 66  a[1];.};..#ifdef
24340 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a   SQLITE_DEBUG./*
24350 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
24360 6f 66 20 74 68 65 20 54 72 65 65 56 69 65 77 20  of the TreeView 
24370 6f 62 6a 65 63 74 20 69 73 20 75 73 65 64 20 66  object is used f
24380 6f 72 20 70 72 69 6e 74 69 6e 67 20 74 68 65 20  or printing the 
24390 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 64 61  content of.** da
243a0 74 61 20 73 74 72 75 63 74 75 72 65 73 20 6f 6e  ta structures on
243b0 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69   sqlite3DebugPri
243c0 6e 74 66 28 29 20 75 73 69 6e 67 20 61 20 74 72  ntf() using a tr
243d0 65 65 2d 6c 69 6b 65 20 76 69 65 77 2e 0a 2a 2f  ee-like view..*/
243e0 0a 73 74 72 75 63 74 20 54 72 65 65 56 69 65 77  .struct TreeView
243f0 20 7b 0a 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b   {.  int iLevel;
24400 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24410 57 68 69 63 68 20 6c 65 76 65 6c 20 6f 66 20 74  Which level of t
24420 68 65 20 74 72 65 65 20 77 65 20 61 72 65 20 6f  he tree we are o
24430 6e 20 2a 2f 0a 20 20 75 38 20 20 62 4c 69 6e 65  n */.  u8  bLine
24440 5b 31 30 30 5d 3b 20 20 20 20 20 20 20 20 20 2f  [100];         /
24450 2a 20 44 72 61 77 20 76 65 72 74 69 63 61 6c 20  * Draw vertical 
24460 69 6e 20 63 6f 6c 75 6d 6e 20 69 20 69 66 20 62  in column i if b
24470 4c 69 6e 65 5b 69 5d 20 69 73 20 74 72 75 65 20  Line[i] is true 
24480 2a 2f 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  */.};.#endif /* 
24490 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a  SQLITE_DEBUG */.
244a0 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e 67 20  ./*.** Assuming 
244b0 7a 49 6e 20 70 6f 69 6e 74 73 20 74 6f 20 74 68  zIn points to th
244c0 65 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20  e first byte of 
244d0 61 20 55 54 46 2d 38 20 63 68 61 72 61 63 74 65  a UTF-8 characte
244e0 72 2c 0a 2a 2a 20 61 64 76 61 6e 63 65 20 7a 49  r,.** advance zI
244f0 6e 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68  n to point to th
24500 65 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20  e first byte of 
24510 74 68 65 20 6e 65 78 74 20 55 54 46 2d 38 20 63  the next UTF-8 c
24520 68 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 23 64 65  haracter..*/.#de
24530 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4b 49 50  fine SQLITE_SKIP
24540 5f 55 54 46 38 28 7a 49 6e 29 20 7b 20 20 20 20  _UTF8(zIn) {    
24550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24560 20 20 20 20 5c 0a 20 20 69 66 28 20 28 2a 28 7a      \.  if( (*(z
24570 49 6e 2b 2b 29 29 3e 3d 30 78 63 30 20 29 7b 20  In++))>=0xc0 ){ 
24580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24590 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20               \. 
245a0 20 20 20 77 68 69 6c 65 28 20 28 2a 7a 49 6e 20     while( (*zIn 
245b0 26 20 30 78 63 30 29 3d 3d 30 78 38 30 20 29 7b  & 0xc0)==0x80 ){
245c0 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20 20 20 20   zIn++; }       
245d0 20 20 20 20 20 20 5c 0a 20 20 7d 20 20 20 20 20        \.  }     
245e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
245f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c                 \
24610 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51  .}../*.** The SQ
24620 4c 49 54 45 5f 2a 5f 42 4b 50 54 20 6d 61 63 72  LITE_*_BKPT macr
24630 6f 73 20 61 72 65 20 73 75 62 73 74 69 74 75 74  os are substitut
24640 65 73 20 66 6f 72 20 74 68 65 20 65 72 72 6f 72  es for the error
24650 20 63 6f 64 65 73 20 77 69 74 68 0a 2a 2a 20 74   codes with.** t
24660 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 62 75 74  he same name but
24670 20 77 69 74 68 6f 75 74 20 74 68 65 20 5f 42 4b   without the _BK
24680 50 54 20 73 75 66 66 69 78 2e 20 20 54 68 65 73  PT suffix.  Thes
24690 65 20 6d 61 63 72 6f 73 20 69 6e 76 6f 6b 65 0a  e macros invoke.
246a0 2a 2a 20 72 6f 75 74 69 6e 65 73 20 74 68 61 74  ** routines that
246b0 20 72 65 70 6f 72 74 20 74 68 65 20 6c 69 6e 65   report the line
246c0 2d 6e 75 6d 62 65 72 20 6f 6e 20 77 68 69 63 68  -number on which
246d0 20 74 68 65 20 65 72 72 6f 72 20 6f 72 69 67 69   the error origi
246e0 6e 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 73  nated.** using s
246f0 71 6c 69 74 65 33 5f 6c 6f 67 28 29 2e 20 20 54  qlite3_log().  T
24700 68 65 20 72 6f 75 74 69 6e 65 73 20 61 6c 73 6f  he routines also
24710 20 70 72 6f 76 69 64 65 20 61 20 63 6f 6e 76 65   provide a conve
24720 6e 69 65 6e 74 20 70 6c 61 63 65 0a 2a 2a 20 74  nient place.** t
24730 6f 20 73 65 74 20 61 20 64 65 62 75 67 67 65 72  o set a debugger
24740 20 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a   breakpoint..*/.
24750 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72 75  int sqlite3Corru
24760 70 74 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e  ptError(int);.in
24770 74 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45  t sqlite3MisuseE
24780 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73  rror(int);.int s
24790 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72  qlite3CantopenEr
247a0 72 6f 72 28 69 6e 74 29 3b 0a 23 64 65 66 69 6e  ror(int);.#defin
247b0 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  e SQLITE_CORRUPT
247c0 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43 6f 72  _BKPT sqlite3Cor
247d0 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  ruptError(__LINE
247e0 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  __).#define SQLI
247f0 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 20 73  TE_MISUSE_BKPT s
24800 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f  qlite3MisuseErro
24810 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66  r(__LINE__).#def
24820 69 6e 65 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f  ine SQLITE_CANTO
24830 50 45 4e 5f 42 4b 50 54 20 73 71 6c 69 74 65 33  PEN_BKPT sqlite3
24840 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 5f 5f  CantopenError(__
24850 4c 49 4e 45 5f 5f 29 0a 23 69 66 64 65 66 20 53  LINE__).#ifdef S
24860 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 6e  QLITE_DEBUG.  in
24870 74 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d 45 72  t sqlite3NomemEr
24880 72 6f 72 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20  ror(int);.  int 
24890 73 71 6c 69 74 65 33 49 6f 65 72 72 6e 6f 6d 65  sqlite3Ioerrnome
248a0 6d 45 72 72 6f 72 28 69 6e 74 29 3b 0a 20 20 69  mError(int);.  i
248b0 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70  nt sqlite3Corrup
248c0 74 50 67 6e 6f 45 72 72 6f 72 28 69 6e 74 2c 50  tPgnoError(int,P
248d0 67 6e 6f 29 3b 0a 23 20 64 65 66 69 6e 65 20 53  gno);.# define S
248e0 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54  QLITE_NOMEM_BKPT
248f0 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d 45 72 72   sqlite3NomemErr
24900 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 20 64  or(__LINE__).# d
24910 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4f 45  efine SQLITE_IOE
24920 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 73 71  RR_NOMEM_BKPT sq
24930 6c 69 74 65 33 49 6f 65 72 72 6e 6f 6d 65 6d 45  lite3IoerrnomemE
24940 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23  rror(__LINE__).#
24950 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43   define SQLITE_C
24960 4f 52 52 55 50 54 5f 50 47 4e 4f 28 50 29 20 73  ORRUPT_PGNO(P) s
24970 71 6c 69 74 65 33 43 6f 72 72 75 70 74 50 67 6e  qlite3CorruptPgn
24980 6f 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 2c  oError(__LINE__,
24990 28 50 29 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  (P)).#else.# def
249a0 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  ine SQLITE_NOMEM
249b0 5f 42 4b 50 54 20 53 51 4c 49 54 45 5f 4e 4f 4d  _BKPT SQLITE_NOM
249c0 45 4d 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  EM.# define SQLI
249d0 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42  TE_IOERR_NOMEM_B
249e0 4b 50 54 20 53 51 4c 49 54 45 5f 49 4f 45 52 52  KPT SQLITE_IOERR
249f0 5f 4e 4f 4d 45 4d 0a 23 20 64 65 66 69 6e 65 20  _NOMEM.# define 
24a00 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 50  SQLITE_CORRUPT_P
24a10 47 4e 4f 28 50 29 20 73 71 6c 69 74 65 33 43 6f  GNO(P) sqlite3Co
24a20 72 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e  rruptError(__LIN
24a30 45 5f 5f 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E__).#endif../*.
24a40 2a 2a 20 46 54 53 33 20 61 6e 64 20 46 54 53 34  ** FTS3 and FTS4
24a50 20 62 6f 74 68 20 72 65 71 75 69 72 65 20 76 69   both require vi
24a60 72 74 75 61 6c 20 74 61 62 6c 65 20 73 75 70 70  rtual table supp
24a70 6f 72 74 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  ort.*/.#if defin
24a80 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
24a90 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 23 20 75  IRTUALTABLE).# u
24aa0 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  ndef SQLITE_ENAB
24ab0 4c 45 5f 46 54 53 33 0a 23 20 75 6e 64 65 66 20  LE_FTS3.# undef 
24ac0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
24ad0 53 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  S4.#endif../*.**
24ae0 20 46 54 53 34 20 69 73 20 72 65 61 6c 6c 79 20   FTS4 is really 
24af0 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f 72  an extension for
24b00 20 46 54 53 33 2e 20 20 49 74 20 69 73 20 65 6e   FTS3.  It is en
24b10 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65 0a  abled using the.
24b20 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ** SQLITE_ENABLE
24b30 5f 46 54 53 33 20 6d 61 63 72 6f 2e 20 20 42 75  _FTS3 macro.  Bu
24b40 74 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75  t to avoid confu
24b50 73 69 6f 6e 20 77 65 20 61 6c 73 6f 20 63 61 6c  sion we also cal
24b60 6c 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f  l.** the SQLITE_
24b70 45 4e 41 42 4c 45 5f 46 54 53 34 20 6d 61 63 72  ENABLE_FTS4 macr
24b80 6f 20 74 6f 20 73 65 72 76 65 20 61 73 20 61 6e  o to serve as an
24b90 20 61 6c 69 61 73 20 66 6f 72 20 53 51 4c 49 54   alias for SQLIT
24ba0 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 2e 0a 2a  E_ENABLE_FTS3..*
24bb0 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
24bc0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34  LITE_ENABLE_FTS4
24bd0 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
24be0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
24bf0 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
24c00 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 31 0a  E_ENABLE_FTS3 1.
24c10 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
24c20 65 20 63 74 79 70 65 2e 68 20 68 65 61 64 65 72  e ctype.h header
24c30 20 69 73 20 6e 65 65 64 65 64 20 66 6f 72 20 6e   is needed for n
24c40 6f 6e 2d 41 53 43 49 49 20 73 79 73 74 65 6d 73  on-ASCII systems
24c50 2e 20 20 49 74 20 69 73 20 61 6c 73 6f 0a 2a 2a  .  It is also.**
24c60 20 6e 65 65 64 65 64 20 62 79 20 46 54 53 33 20   needed by FTS3 
24c70 77 68 65 6e 20 46 54 53 33 20 69 73 20 69 6e 63  when FTS3 is inc
24c80 6c 75 64 65 64 20 69 6e 20 74 68 65 20 61 6d 61  luded in the ama
24c90 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69  lgamation..*/.#i
24ca0 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
24cb0 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c 0a 20 20  E_ASCII) || \.  
24cc0 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54    (defined(SQLIT
24cd0 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 20 26  E_ENABLE_FTS3) &
24ce0 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  & defined(SQLITE
24cf0 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 29 29 0a  _AMALGAMATION)).
24d00 23 20 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65  # include <ctype
24d10 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  .h>.#endif../*.*
24d20 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
24d30 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20 74 68 65  macros mimic the
24d40 20 73 74 61 6e 64 61 72 64 20 6c 69 62 72 61 72   standard librar
24d50 79 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f 75 70  y functions toup
24d60 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73 70 61 63  per(),.** isspac
24d70 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28 29 2c 20  e(), isalnum(), 
24d80 69 73 64 69 67 69 74 28 29 20 61 6e 64 20 69 73  isdigit() and is
24d90 78 64 69 67 69 74 28 29 2c 20 72 65 73 70 65 63  xdigit(), respec
24da0 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a 2a 20 73  tively. The.** s
24db0 71 6c 69 74 65 20 76 65 72 73 69 6f 6e 73 20 6f  qlite versions o
24dc0 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20 41 53 43  nly work for ASC
24dd0 49 49 20 63 68 61 72 61 63 74 65 72 73 2c 20 72  II characters, r
24de0 65 67 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63  egardless of loc
24df0 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ale..*/.#ifdef S
24e00 51 4c 49 54 45 5f 41 53 43 49 49 0a 23 20 64 65  QLITE_ASCII.# de
24e10 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70  fine sqlite3Toup
24e20 70 65 72 28 78 29 20 20 28 28 78 29 26 7e 28 73  per(x)  ((x)&~(s
24e30 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
24e40 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
24e50 29 5d 26 30 78 32 30 29 29 0a 23 20 64 65 66 69  )]&0x20)).# defi
24e60 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70 61 63  ne sqlite3Isspac
24e70 65 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43  e(x)   (sqlite3C
24e80 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
24e90 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 31  d char)(x)]&0x01
24ea0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
24eb0 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 28  e3Isalnum(x)   (
24ec0 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
24ed0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
24ee0 78 29 5d 26 30 78 30 36 29 0a 23 20 64 65 66 69  x)]&0x06).# defi
24ef0 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68  ne sqlite3Isalph
24f00 61 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43  a(x)   (sqlite3C
24f10 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
24f20 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 32  d char)(x)]&0x02
24f30 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
24f40 65 33 49 73 64 69 67 69 74 28 78 29 20 20 20 28  e3Isdigit(x)   (
24f50 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
24f60 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
24f70 78 29 5d 26 30 78 30 34 29 0a 23 20 64 65 66 69  x)]&0x04).# defi
24f80 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64 69 67  ne sqlite3Isxdig
24f90 69 74 28 78 29 20 20 28 73 71 6c 69 74 65 33 43  it(x)  (sqlite3C
24fa0 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
24fb0 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 38  d char)(x)]&0x08
24fc0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
24fd0 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 28  e3Tolower(x)   (
24fe0 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f  sqlite3UpperToLo
24ff0 77 65 72 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  wer[(unsigned ch
25000 61 72 29 28 78 29 5d 29 0a 23 20 64 65 66 69 6e  ar)(x)]).# defin
25010 65 20 73 71 6c 69 74 65 33 49 73 71 75 6f 74 65  e sqlite3Isquote
25020 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74  (x)   (sqlite3Ct
25030 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
25040 20 63 68 61 72 29 28 78 29 5d 26 30 78 38 30 29   char)(x)]&0x80)
25050 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
25060 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78  sqlite3Toupper(x
25070 29 20 20 20 74 6f 75 70 70 65 72 28 28 75 6e 73  )   toupper((uns
25080 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
25090 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
250a0 49 73 73 70 61 63 65 28 78 29 20 20 20 69 73 73  Isspace(x)   iss
250b0 70 61 63 65 28 28 75 6e 73 69 67 6e 65 64 20 63  pace((unsigned c
250c0 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
250d0 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d  e sqlite3Isalnum
250e0 28 78 29 20 20 20 69 73 61 6c 6e 75 6d 28 28 75  (x)   isalnum((u
250f0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
25100 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
25110 65 33 49 73 61 6c 70 68 61 28 78 29 20 20 20 69  e3Isalpha(x)   i
25120 73 61 6c 70 68 61 28 28 75 6e 73 69 67 6e 65 64  salpha((unsigned
25130 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
25140 69 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69 67  ine sqlite3Isdig
25150 69 74 28 78 29 20 20 20 69 73 64 69 67 69 74 28  it(x)   isdigit(
25160 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
25170 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
25180 69 74 65 33 49 73 78 64 69 67 69 74 28 78 29 20  ite3Isxdigit(x) 
25190 20 69 73 78 64 69 67 69 74 28 28 75 6e 73 69 67   isxdigit((unsig
251a0 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
251b0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f  define sqlite3To
251c0 6c 6f 77 65 72 28 78 29 20 20 20 74 6f 6c 6f 77  lower(x)   tolow
251d0 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  er((unsigned cha
251e0 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
251f0 73 71 6c 69 74 65 33 49 73 71 75 6f 74 65 28 78  sqlite3Isquote(x
25200 29 20 20 20 28 28 78 29 3d 3d 27 22 27 7c 7c 28  )   ((x)=='"'||(
25210 78 29 3d 3d 27 5c 27 27 7c 7c 28 78 29 3d 3d 27  x)=='\''||(x)=='
25220 5b 27 7c 7c 28 78 29 3d 3d 27 60 27 29 0a 23 65  ['||(x)=='`').#e
25230 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
25240 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45  ITE_OMIT_COMPILE
25250 4f 50 54 49 4f 4e 5f 44 49 41 47 53 0a 69 6e 74  OPTION_DIAGS.int
25260 20 73 71 6c 69 74 65 33 49 73 49 64 43 68 61 72   sqlite3IsIdChar
25270 28 75 38 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  (u8);.#endif../*
25280 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e  .** Internal fun
25290 63 74 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73  ction prototypes
252a0 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  .*/.int sqlite3S
252b0 74 72 49 43 6d 70 28 63 6f 6e 73 74 20 63 68 61  trICmp(const cha
252c0 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  r*,const char*);
252d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72 6c  .int sqlite3Strl
252e0 65 6e 33 30 28 63 6f 6e 73 74 20 63 68 61 72 2a  en30(const char*
252f0 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
25300 43 6f 6c 75 6d 6e 54 79 70 65 28 43 6f 6c 75 6d  ColumnType(Colum
25310 6e 2a 2c 63 68 61 72 2a 29 3b 0a 23 64 65 66 69  n*,char*);.#defi
25320 6e 65 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43  ne sqlite3StrNIC
25330 6d 70 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69  mp sqlite3_strni
25340 63 6d 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33  cmp..int sqlite3
25350 4d 61 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64 29  MallocInit(void)
25360 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61  ;.void sqlite3Ma
25370 6c 6c 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a 76  llocEnd(void);.v
25380 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c  oid *sqlite3Mall
25390 6f 63 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  oc(u64);.void *s
253a0 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f  qlite3MallocZero
253b0 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  (u64);.void *sql
253c0 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f  ite3DbMallocZero
253d0 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b  (sqlite3*, u64);
253e0 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62  .void *sqlite3Db
253f0 4d 61 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74 65  MallocRaw(sqlite
25400 33 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a  3*, u64);.void *
25410 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52  sqlite3DbMallocR
25420 61 77 4e 4e 28 73 71 6c 69 74 65 33 2a 2c 20 75  awNN(sqlite3*, u
25430 36 34 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  64);.char *sqlit
25440 65 33 44 62 53 74 72 44 75 70 28 73 71 6c 69 74  e3DbStrDup(sqlit
25450 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  e3*,const char*)
25460 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44  ;.char *sqlite3D
25470 62 53 74 72 4e 44 75 70 28 73 71 6c 69 74 65 33  bStrNDup(sqlite3
25480 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75  *,const char*, u
25490 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  64);.void *sqlit
254a0 65 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c  e3Realloc(void*,
254b0 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c   u64);.void *sql
254c0 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46  ite3DbReallocOrF
254d0 72 65 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 76  ree(sqlite3 *, v
254e0 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69  oid *, u64);.voi
254f0 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c  d *sqlite3DbReal
25500 6c 6f 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 76  loc(sqlite3 *, v
25510 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69  oid *, u64);.voi
25520 64 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28  d sqlite3DbFree(
25530 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29  sqlite3*, void*)
25540 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62  ;.void sqlite3Db
25550 46 72 65 65 4e 4e 28 73 71 6c 69 74 65 33 2a 2c  FreeNN(sqlite3*,
25560 20 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c   void*);.int sql
25570 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76  ite3MallocSize(v
25580 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  oid*);.int sqlit
25590 65 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73  e3DbMallocSize(s
255a0 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b  qlite3*, void*);
255b0 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 53 63  .void *sqlite3Sc
255c0 72 61 74 63 68 4d 61 6c 6c 6f 63 28 69 6e 74 29  ratchMalloc(int)
255d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63  ;.void sqlite3Sc
255e0 72 61 74 63 68 46 72 65 65 28 76 6f 69 64 2a 29  ratchFree(void*)
255f0 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50  ;.void *sqlite3P
25600 61 67 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a  ageMalloc(int);.
25610 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 67 65  void sqlite3Page
25620 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69  Free(void*);.voi
25630 64 20 73 71 6c 69 74 65 33 4d 65 6d 53 65 74 44  d sqlite3MemSetD
25640 65 66 61 75 6c 74 28 76 6f 69 64 29 3b 0a 23 69  efault(void);.#i
25650 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54  fndef SQLITE_UNT
25660 45 53 54 41 42 4c 45 0a 76 6f 69 64 20 73 71 6c  ESTABLE.void sql
25670 69 74 65 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  ite3BenignMalloc
25680 48 6f 6f 6b 73 28 76 6f 69 64 20 28 2a 29 28 76  Hooks(void (*)(v
25690 6f 69 64 29 2c 20 76 6f 69 64 20 28 2a 29 28 76  oid), void (*)(v
256a0 6f 69 64 29 29 3b 0a 23 65 6e 64 69 66 0a 69 6e  oid));.#endif.in
256b0 74 20 73 71 6c 69 74 65 33 48 65 61 70 4e 65 61  t sqlite3HeapNea
256c0 72 6c 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a  rlyFull(void);..
256d0 2f 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73  /*.** On systems
256e0 20 77 69 74 68 20 61 6d 70 6c 65 20 73 74 61 63   with ample stac
256f0 6b 20 73 70 61 63 65 20 61 6e 64 20 74 68 61 74  k space and that
25700 20 73 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28   support alloca(
25710 29 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f  ), make.** use o
25720 66 20 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62  f alloca() to ob
25730 74 61 69 6e 20 73 70 61 63 65 20 66 6f 72 20 6c  tain space for l
25740 61 72 67 65 20 61 75 74 6f 6d 61 74 69 63 20 6f  arge automatic o
25750 62 6a 65 63 74 73 2e 20 20 42 79 20 64 65 66 61  bjects.  By defa
25760 75 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73  ult,.** obtain s
25770 70 61 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63  pace from malloc
25780 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c  ()..**.** The al
25790 6c 6f 63 61 28 29 20 72 6f 75 74 69 6e 65 20 6e  loca() routine n
257a0 65 76 65 72 20 72 65 74 75 72 6e 73 20 4e 55 4c  ever returns NUL
257b0 4c 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61  L.  This will ca
257c0 75 73 65 20 63 6f 64 65 20 70 61 74 68 73 0a 2a  use code paths.*
257d0 2a 20 74 68 61 74 20 64 65 61 6c 20 77 69 74 68  * that deal with
257e0 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
257f0 6f 63 28 29 20 66 61 69 6c 75 72 65 73 20 74 6f  oc() failures to
25800 20 62 65 20 75 6e 72 65 61 63 68 61 62 6c 65 2e   be unreachable.
25810 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
25820 45 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64  E_USE_ALLOCA.# d
25830 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
25840 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20  ckAllocRaw(D,N) 
25850 20 20 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65    alloca(N).# de
25860 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
25870 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20  kAllocZero(D,N) 
25880 20 6d 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e   memset(alloca(N
25890 29 2c 20 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e  ), 0, N).# defin
258a0 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72  e sqlite3StackFr
258b0 65 65 28 44 2c 50 29 0a 23 65 6c 73 65 0a 23 20  ee(D,P).#else.# 
258c0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
258d0 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29  ackAllocRaw(D,N)
258e0 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c     sqlite3DbMall
258f0 6f 63 52 61 77 28 44 2c 4e 29 0a 23 20 64 65 66  ocRaw(D,N).# def
25900 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
25910 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20  AllocZero(D,N)  
25920 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a  sqlite3DbMallocZ
25930 65 72 6f 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e  ero(D,N).# defin
25940 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72  e sqlite3StackFr
25950 65 65 28 44 2c 50 29 20 20 20 20 20 20 20 73 71  ee(D,P)       sq
25960 6c 69 74 65 33 44 62 46 72 65 65 28 44 2c 50 29  lite3DbFree(D,P)
25970 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 6f 20 6e  .#endif../* Do n
25980 6f 74 20 61 6c 6c 6f 77 20 62 6f 74 68 20 4d 45  ot allow both ME
25990 4d 53 59 53 35 20 61 6e 64 20 4d 45 4d 53 59 53  MSYS5 and MEMSYS
259a0 33 20 74 6f 20 62 65 20 64 65 66 69 6e 65 64 20  3 to be defined 
259b0 74 6f 67 65 74 68 65 72 2e 20 20 49 66 20 74 68  together.  If th
259c0 65 79 0a 2a 2a 20 61 72 65 2c 20 64 69 73 61 62  ey.** are, disab
259d0 6c 65 20 4d 45 4d 53 59 53 33 0a 2a 2f 0a 23 69  le MEMSYS3.*/.#i
259e0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
259f0 4c 45 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e 73 74  LE_MEMSYS5.const
25a00 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74   sqlite3_mem_met
25a10 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d  hods *sqlite3Mem
25a20 47 65 74 4d 65 6d 73 79 73 35 28 76 6f 69 64 29  GetMemsys5(void)
25a30 3b 0a 23 75 6e 64 65 66 20 53 51 4c 49 54 45 5f  ;.#undef SQLITE_
25a40 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 23  ENABLE_MEMSYS3.#
25a50 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
25a60 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59  ITE_ENABLE_MEMSY
25a70 53 33 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  S3.const sqlite3
25a80 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71  _mem_methods *sq
25a90 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79  lite3MemGetMemsy
25aa0 73 33 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66  s3(void);.#endif
25ab0 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ...#ifndef SQLIT
25ac0 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a 20 20 73  E_MUTEX_OMIT.  s
25ad0 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74  qlite3_mutex_met
25ae0 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69  hods const *sqli
25af0 74 65 33 44 65 66 61 75 6c 74 4d 75 74 65 78 28  te3DefaultMutex(
25b00 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33  void);.  sqlite3
25b10 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63  _mutex_methods c
25b20 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 4e 6f 6f  onst *sqlite3Noo
25b30 70 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20  pMutex(void);.  
25b40 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73  sqlite3_mutex *s
25b50 71 6c 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63  qlite3MutexAlloc
25b60 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c  (int);.  int sql
25b70 69 74 65 33 4d 75 74 65 78 49 6e 69 74 28 76 6f  ite3MutexInit(vo
25b80 69 64 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  id);.  int sqlit
25b90 65 33 4d 75 74 65 78 45 6e 64 28 76 6f 69 64 29  e3MutexEnd(void)
25ba0 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65  ;.#endif.#if !de
25bb0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54  fined(SQLITE_MUT
25bc0 45 58 5f 4f 4d 49 54 29 20 26 26 20 21 64 65 66  EX_OMIT) && !def
25bd0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45  ined(SQLITE_MUTE
25be0 58 5f 4e 4f 4f 50 29 0a 20 20 76 6f 69 64 20 73  X_NOOP).  void s
25bf0 71 6c 69 74 65 33 4d 65 6d 6f 72 79 42 61 72 72  qlite3MemoryBarr
25c00 69 65 72 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65  ier(void);.#else
25c10 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
25c20 33 4d 65 6d 6f 72 79 42 61 72 72 69 65 72 28 29  3MemoryBarrier()
25c30 0a 23 65 6e 64 69 66 0a 0a 73 71 6c 69 74 65 33  .#endif..sqlite3
25c40 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74  _int64 sqlite3St
25c50 61 74 75 73 56 61 6c 75 65 28 69 6e 74 29 3b 0a  atusValue(int);.
25c60 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74  void sqlite3Stat
25c70 75 73 55 70 28 69 6e 74 2c 20 69 6e 74 29 3b 0a  usUp(int, int);.
25c80 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74  void sqlite3Stat
25c90 75 73 44 6f 77 6e 28 69 6e 74 2c 20 69 6e 74 29  usDown(int, int)
25ca0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
25cb0 61 74 75 73 48 69 67 68 77 61 74 65 72 28 69 6e  atusHighwater(in
25cc0 74 2c 20 69 6e 74 29 3b 0a 0a 2f 2a 20 41 63 63  t, int);../* Acc
25cd0 65 73 73 20 74 6f 20 6d 75 74 65 78 65 73 20 75  ess to mutexes u
25ce0 73 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 73  sed by sqlite3_s
25cf0 74 61 74 75 73 28 29 20 2a 2f 0a 73 71 6c 69 74  tatus() */.sqlit
25d00 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65  e3_mutex *sqlite
25d10 33 50 63 61 63 68 65 31 4d 75 74 65 78 28 76 6f  3Pcache1Mutex(vo
25d20 69 64 29 3b 0a 73 71 6c 69 74 65 33 5f 6d 75 74  id);.sqlite3_mut
25d30 65 78 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  ex *sqlite3Mallo
25d40 63 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 0a 23  cMutex(void);..#
25d50 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
25d60 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
25d70 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 49  T.  int sqlite3I
25d80 73 4e 61 4e 28 64 6f 75 62 6c 65 29 3b 0a 23 65  sNaN(double);.#e
25d90 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
25da0 69 74 65 33 49 73 4e 61 4e 28 58 29 20 20 30 0a  ite3IsNaN(X)  0.
25db0 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e  #endif../*.** An
25dc0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
25dd0 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
25de0 74 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72  ture holds infor
25df0 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 53 51 4c  mation about SQL
25e00 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 61 72  .** functions ar
25e10 67 75 6d 65 6e 74 73 20 74 68 61 74 20 61 72 65  guments that are
25e20 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20   the parameters 
25e30 74 6f 20 74 68 65 20 70 72 69 6e 74 66 28 29 20  to the printf() 
25e40 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72  function..*/.str
25e50 75 63 74 20 50 72 69 6e 74 66 41 72 67 75 6d 65  uct PrintfArgume
25e60 6e 74 73 20 7b 0a 20 20 69 6e 74 20 6e 41 72 67  nts {.  int nArg
25e70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
25e80 20 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d 62 65 72   /* Total number
25e90 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f   of arguments */
25ea0 0a 20 20 69 6e 74 20 6e 55 73 65 64 3b 20 20 20  .  int nUsed;   
25eb0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
25ec0 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
25ed0 74 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a  ts used so far *
25ee0 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  /.  sqlite3_valu
25ef0 65 20 2a 2a 61 70 41 72 67 3b 20 20 20 2f 2a 20  e **apArg;   /* 
25f00 54 68 65 20 61 72 67 75 6d 65 6e 74 20 76 61 6c  The argument val
25f10 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 76 6f 69 64 20  ues */.};..void 
25f20 73 71 6c 69 74 65 33 56 58 50 72 69 6e 74 66 28  sqlite3VXPrintf(
25f30 53 74 72 41 63 63 75 6d 2a 2c 20 63 6f 6e 73 74  StrAccum*, const
25f40 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29   char*, va_list)
25f50 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 58 50  ;.void sqlite3XP
25f60 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d 2a 2c  rintf(StrAccum*,
25f70 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e   const char*, ..
25f80 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  .);.char *sqlite
25f90 33 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33  3MPrintf(sqlite3
25fa0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  *,const char*, .
25fb0 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  ..);.char *sqlit
25fc0 65 33 56 4d 50 72 69 6e 74 66 28 73 71 6c 69 74  e3VMPrintf(sqlit
25fd0 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
25fe0 20 76 61 5f 6c 69 73 74 29 3b 0a 23 69 66 20 64   va_list);.#if d
25ff0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
26000 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  BUG) || defined(
26010 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54  SQLITE_HAVE_OS_T
26020 52 41 43 45 29 0a 20 20 76 6f 69 64 20 73 71 6c  RACE).  void sql
26030 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28  ite3DebugPrintf(
26040 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
26050 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65  );.#endif.#if de
26060 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53  fined(SQLITE_TES
26070 54 29 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74  T).  void *sqlit
26080 65 33 54 65 73 74 54 65 78 74 54 6f 50 74 72 28  e3TestTextToPtr(
26090 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65  const char*);.#e
260a0 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65  ndif..#if define
260b0 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a  d(SQLITE_DEBUG).
260c0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72    void sqlite3Tr
260d0 65 65 56 69 65 77 45 78 70 72 28 54 72 65 65 56  eeViewExpr(TreeV
260e0 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72  iew*, const Expr
260f0 2a 2c 20 75 38 29 3b 0a 20 20 76 6f 69 64 20 73  *, u8);.  void s
26100 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 42 61  qlite3TreeViewBa
26110 72 65 45 78 70 72 4c 69 73 74 28 54 72 65 65 56  reExprList(TreeV
26120 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72  iew*, const Expr
26130 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61  List*, const cha
26140 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  r*);.  void sqli
26150 74 65 33 54 72 65 65 56 69 65 77 45 78 70 72 4c  te3TreeViewExprL
26160 69 73 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63  ist(TreeView*, c
26170 6f 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 2c 20  onst ExprList*, 
26180 75 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  u8, const char*)
26190 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
261a0 54 72 65 65 56 69 65 77 53 65 6c 65 63 74 28 54  TreeViewSelect(T
261b0 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20  reeView*, const 
261c0 53 65 6c 65 63 74 2a 2c 20 75 38 29 3b 0a 20 20  Select*, u8);.  
261d0 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65  void sqlite3Tree
261e0 56 69 65 77 57 69 74 68 28 54 72 65 65 56 69 65  ViewWith(TreeVie
261f0 77 2a 2c 20 63 6f 6e 73 74 20 57 69 74 68 2a 2c  w*, const With*,
26200 20 75 38 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 76   u8);.#endif...v
26210 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74 53 74  oid sqlite3SetSt
26220 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73 71  ring(char **, sq
26230 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68  lite3*, const ch
26240 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
26250 65 33 45 72 72 6f 72 4d 73 67 28 50 61 72 73 65  e3ErrorMsg(Parse
26260 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
26270 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ...);.void sqlit
26280 65 33 44 65 71 75 6f 74 65 28 63 68 61 72 2a 29  e3Dequote(char*)
26290 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54 6f  ;.void sqlite3To
262a0 6b 65 6e 49 6e 69 74 28 54 6f 6b 65 6e 2a 2c 63  kenInit(Token*,c
262b0 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  har*);.int sqlit
262c0 65 33 4b 65 79 77 6f 72 64 43 6f 64 65 28 63 6f  e3KeywordCode(co
262d0 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
262e0 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  r*, int);.int sq
262f0 6c 69 74 65 33 52 75 6e 50 61 72 73 65 72 28 50  lite3RunParser(P
26300 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  arse*, const cha
26310 72 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 76 6f  r*, char **);.vo
26320 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68  id sqlite3Finish
26330 43 6f 64 69 6e 67 28 50 61 72 73 65 2a 29 3b 0a  Coding(Parse*);.
26340 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 65  int sqlite3GetTe
26350 6d 70 52 65 67 28 50 61 72 73 65 2a 29 3b 0a 76  mpReg(Parse*);.v
26360 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61  oid sqlite3Relea
26370 73 65 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a  seTempReg(Parse*
26380 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,int);.int sqlit
26390 65 33 47 65 74 54 65 6d 70 52 61 6e 67 65 28 50  e3GetTempRange(P
263a0 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  arse*,int);.void
263b0 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54   sqlite3ReleaseT
263c0 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c  empRange(Parse*,
263d0 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  int,int);.void s
263e0 71 6c 69 74 65 33 43 6c 65 61 72 54 65 6d 70 52  qlite3ClearTempR
263f0 65 67 43 61 63 68 65 28 50 61 72 73 65 2a 29 3b  egCache(Parse*);
26400 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
26410 45 42 55 47 0a 69 6e 74 20 73 71 6c 69 74 65 33  EBUG.int sqlite3
26420 4e 6f 54 65 6d 70 73 49 6e 52 61 6e 67 65 28 50  NoTempsInRange(P
26430 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  arse*,int,int);.
26440 23 65 6e 64 69 66 0a 45 78 70 72 20 2a 73 71 6c  #endif.Expr *sql
26450 69 74 65 33 45 78 70 72 41 6c 6c 6f 63 28 73 71  ite3ExprAlloc(sq
26460 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74  lite3*,int,const
26470 20 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 45 78   Token*,int);.Ex
26480 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 28  pr *sqlite3Expr(
26490 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e  sqlite3*,int,con
264a0 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
264b0 73 71 6c 69 74 65 33 45 78 70 72 41 74 74 61 63  sqlite3ExprAttac
264c0 68 53 75 62 74 72 65 65 73 28 73 71 6c 69 74 65  hSubtrees(sqlite
264d0 33 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c 45  3*,Expr*,Expr*,E
264e0 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  xpr*);.Expr *sql
264f0 69 74 65 33 50 45 78 70 72 28 50 61 72 73 65 2a  ite3PExpr(Parse*
26500 2c 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20 45 78  , int, Expr*, Ex
26510 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
26520 65 33 50 45 78 70 72 41 64 64 53 65 6c 65 63 74  e3PExprAddSelect
26530 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
26540 53 65 6c 65 63 74 2a 29 3b 0a 45 78 70 72 20 2a  Select*);.Expr *
26550 73 71 6c 69 74 65 33 45 78 70 72 41 6e 64 28 73  sqlite3ExprAnd(s
26560 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 20 45  qlite3*,Expr*, E
26570 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  xpr*);.Expr *sql
26580 69 74 65 33 45 78 70 72 46 75 6e 63 74 69 6f 6e  ite3ExprFunction
26590 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
265a0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
265b0 20 73 71 6c 69 74 65 33 45 78 70 72 41 73 73 69   sqlite3ExprAssi
265c0 67 6e 56 61 72 4e 75 6d 62 65 72 28 50 61 72 73  gnVarNumber(Pars
265d0 65 2a 2c 20 45 78 70 72 2a 2c 20 75 33 32 29 3b  e*, Expr*, u32);
265e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
265f0 72 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  rDelete(sqlite3*
26600 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69  , Expr*);.ExprLi
26610 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c  st *sqlite3ExprL
26620 69 73 74 41 70 70 65 6e 64 28 50 61 72 73 65 2a  istAppend(Parse*
26630 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a  ,ExprList*,Expr*
26640 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c  );.ExprList *sql
26650 69 74 65 33 45 78 70 72 4c 69 73 74 41 70 70 65  ite3ExprListAppe
26660 6e 64 56 65 63 74 6f 72 28 50 61 72 73 65 2a 2c  ndVector(Parse*,
26670 45 78 70 72 4c 69 73 74 2a 2c 49 64 4c 69 73 74  ExprList*,IdList
26680 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  *,Expr*);.void s
26690 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53 65  qlite3ExprListSe
266a0 74 53 6f 72 74 4f 72 64 65 72 28 45 78 70 72 4c  tSortOrder(ExprL
266b0 69 73 74 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ist*,int);.void 
266c0 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53  sqlite3ExprListS
266d0 65 74 4e 61 6d 65 28 50 61 72 73 65 2a 2c 45 78  etName(Parse*,Ex
266e0 70 72 4c 69 73 74 2a 2c 54 6f 6b 65 6e 2a 2c 69  prList*,Token*,i
266f0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
26700 33 45 78 70 72 4c 69 73 74 53 65 74 53 70 61 6e  3ExprListSetSpan
26710 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
26720 2a 2c 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f  *,ExprSpan*);.vo
26730 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
26740 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  stDelete(sqlite3
26750 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 75  *, ExprList*);.u
26760 33 32 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  32 sqlite3ExprLi
26770 73 74 46 6c 61 67 73 28 63 6f 6e 73 74 20 45 78  stFlags(const Ex
26780 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
26790 6c 69 74 65 33 49 6e 69 74 28 73 71 6c 69 74 65  lite3Init(sqlite
267a0 33 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74  3*, char**);.int
267b0 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c   sqlite3InitCall
267c0 62 61 63 6b 28 76 6f 69 64 2a 2c 20 69 6e 74 2c  back(void*, int,
267d0 20 63 68 61 72 2a 2a 2c 20 63 68 61 72 2a 2a 29   char**, char**)
267e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72  ;.void sqlite3Pr
267f0 61 67 6d 61 28 50 61 72 73 65 2a 2c 54 6f 6b 65  agma(Parse*,Toke
26800 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  n*,Token*,Token*
26810 2c 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53  ,int);.#ifndef S
26820 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
26830 41 4c 54 41 42 4c 45 0a 4d 6f 64 75 6c 65 20 2a  ALTABLE.Module *
26840 73 71 6c 69 74 65 33 50 72 61 67 6d 61 56 74 61  sqlite3PragmaVta
26850 62 52 65 67 69 73 74 65 72 28 73 71 6c 69 74 65  bRegister(sqlite
26860 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  3*,const char *z
26870 4e 61 6d 65 29 3b 0a 23 65 6e 64 69 66 0a 76 6f  Name);.#endif.vo
26880 69 64 20 73 71 6c 69 74 65 33 52 65 73 65 74 41  id sqlite3ResetA
26890 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65  llSchemasOfConne
268a0 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 29 3b  ction(sqlite3*);
268b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
268c0 65 74 4f 6e 65 53 63 68 65 6d 61 28 73 71 6c 69  etOneSchema(sqli
268d0 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  te3*,int);.void 
268e0 73 71 6c 69 74 65 33 43 6f 6c 6c 61 70 73 65 44  sqlite3CollapseD
268f0 61 74 61 62 61 73 65 41 72 72 61 79 28 73 71 6c  atabaseArray(sql
26900 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
26910 69 74 65 33 43 6f 6d 6d 69 74 49 6e 74 65 72 6e  ite3CommitIntern
26920 61 6c 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65  alChanges(sqlite
26930 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
26940 33 44 65 6c 65 74 65 43 6f 6c 75 6d 6e 4e 61 6d  3DeleteColumnNam
26950 65 73 28 73 71 6c 69 74 65 33 2a 2c 54 61 62 6c  es(sqlite3*,Tabl
26960 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  e*);.int sqlite3
26970 43 6f 6c 75 6d 6e 73 46 72 6f 6d 45 78 70 72 4c  ColumnsFromExprL
26980 69 73 74 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  ist(Parse*,ExprL
26990 69 73 74 2a 2c 69 31 36 2a 2c 43 6f 6c 75 6d 6e  ist*,i16*,Column
269a0 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  **);.void sqlite
269b0 33 53 65 6c 65 63 74 41 64 64 43 6f 6c 75 6d 6e  3SelectAddColumn
269c0 54 79 70 65 41 6e 64 43 6f 6c 6c 61 74 69 6f 6e  TypeAndCollation
269d0 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 53  (Parse*,Table*,S
269e0 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a  elect*);.Table *
269f0 73 71 6c 69 74 65 33 52 65 73 75 6c 74 53 65 74  sqlite3ResultSet
26a00 4f 66 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c  OfSelect(Parse*,
26a10 53 65 6c 65 63 74 2a 29 3b 0a 76 6f 69 64 20 73  Select*);.void s
26a20 71 6c 69 74 65 33 4f 70 65 6e 4d 61 73 74 65 72  qlite3OpenMaster
26a30 54 61 62 6c 65 28 50 61 72 73 65 20 2a 2c 20 69  Table(Parse *, i
26a40 6e 74 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69  nt);.Index *sqli
26a50 74 65 33 50 72 69 6d 61 72 79 4b 65 79 49 6e 64  te3PrimaryKeyInd
26a60 65 78 28 54 61 62 6c 65 2a 29 3b 0a 69 31 36 20  ex(Table*);.i16 
26a70 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 4f 66 49  sqlite3ColumnOfI
26a80 6e 64 65 78 28 49 6e 64 65 78 2a 2c 20 69 31 36  ndex(Index*, i16
26a90 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
26aa0 74 61 72 74 54 61 62 6c 65 28 50 61 72 73 65 2a  tartTable(Parse*
26ab0 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69  ,Token*,Token*,i
26ac0 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b  nt,int,int,int);
26ad0 0a 23 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  .#if SQLITE_ENAB
26ae0 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e  LE_HIDDEN_COLUMN
26af0 53 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  S.  void sqlite3
26b00 43 6f 6c 75 6d 6e 50 72 6f 70 65 72 74 69 65 73  ColumnProperties
26b10 46 72 6f 6d 4e 61 6d 65 28 54 61 62 6c 65 2a 2c  FromName(Table*,
26b20 20 43 6f 6c 75 6d 6e 2a 29 3b 0a 23 65 6c 73 65   Column*);.#else
26b30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
26b40 33 43 6f 6c 75 6d 6e 50 72 6f 70 65 72 74 69 65  3ColumnPropertie
26b50 73 46 72 6f 6d 4e 61 6d 65 28 54 2c 43 29 20 2f  sFromName(T,C) /
26b60 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 65 6e 64 69  * no-op */.#endi
26b70 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  f.void sqlite3Ad
26b80 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 54  dColumn(Parse*,T
26b90 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76  oken*,Token*);.v
26ba0 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 4e 6f  oid sqlite3AddNo
26bb0 74 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20 69 6e  tNull(Parse*, in
26bc0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
26bd0 41 64 64 50 72 69 6d 61 72 79 4b 65 79 28 50 61  AddPrimaryKey(Pa
26be0 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
26bf0 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
26c00 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
26c10 43 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e 74 28  CheckConstraint(
26c20 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a  Parse*, Expr*);.
26c30 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 44  void sqlite3AddD
26c40 65 66 61 75 6c 74 56 61 6c 75 65 28 50 61 72 73  efaultValue(Pars
26c50 65 2a 2c 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76  e*,ExprSpan*);.v
26c60 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f  oid sqlite3AddCo
26c70 6c 6c 61 74 65 54 79 70 65 28 50 61 72 73 65 2a  llateType(Parse*
26c80 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
26c90 73 71 6c 69 74 65 33 45 6e 64 54 61 62 6c 65 28  sqlite3EndTable(
26ca0 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
26cb0 6b 65 6e 2a 2c 75 38 2c 53 65 6c 65 63 74 2a 29  ken*,u8,Select*)
26cc0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72  ;.int sqlite3Par
26cd0 73 65 55 72 69 28 63 6f 6e 73 74 20 63 68 61 72  seUri(const char
26ce0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 6e  *,const char*,un
26cf0 73 69 67 6e 65 64 20 69 6e 74 2a 2c 0a 20 20 20  signed int*,.   
26d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d10 20 73 71 6c 69 74 65 33 5f 76 66 73 2a 2a 2c 63   sqlite3_vfs**,c
26d20 68 61 72 2a 2a 2c 63 68 61 72 20 2a 2a 29 3b 0a  har**,char **);.
26d30 42 74 72 65 65 20 2a 73 71 6c 69 74 65 33 44 62  Btree *sqlite3Db
26d40 4e 61 6d 65 54 6f 42 74 72 65 65 28 73 71 6c 69  NameToBtree(sqli
26d50 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
26d60 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
26d70 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 23 20 64  E_UNTESTABLE.# d
26d80 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 61 75  efine sqlite3Fau
26d90 6c 74 53 69 6d 28 58 29 20 53 51 4c 49 54 45 5f  ltSim(X) SQLITE_
26da0 4f 4b 0a 23 65 6c 73 65 0a 20 20 69 6e 74 20 73  OK.#else.  int s
26db0 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28 69  qlite3FaultSim(i
26dc0 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 42 69 74  nt);.#endif..Bit
26dd0 76 65 63 20 2a 73 71 6c 69 74 65 33 42 69 74 76  vec *sqlite3Bitv
26de0 65 63 43 72 65 61 74 65 28 75 33 32 29 3b 0a 69  ecCreate(u32);.i
26df0 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  nt sqlite3Bitvec
26e00 54 65 73 74 28 42 69 74 76 65 63 2a 2c 20 75 33  Test(Bitvec*, u3
26e10 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42  2);.int sqlite3B
26e20 69 74 76 65 63 54 65 73 74 4e 6f 74 4e 75 6c 6c  itvecTestNotNull
26e30 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a  (Bitvec*, u32);.
26e40 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65  int sqlite3Bitve
26e50 63 53 65 74 28 42 69 74 76 65 63 2a 2c 20 75 33  cSet(Bitvec*, u3
26e60 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  2);.void sqlite3
26e70 42 69 74 76 65 63 43 6c 65 61 72 28 42 69 74 76  BitvecClear(Bitv
26e80 65 63 2a 2c 20 75 33 32 2c 20 76 6f 69 64 2a 29  ec*, u32, void*)
26e90 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69  ;.void sqlite3Bi
26ea0 74 76 65 63 44 65 73 74 72 6f 79 28 42 69 74 76  tvecDestroy(Bitv
26eb0 65 63 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65  ec*);.u32 sqlite
26ec0 33 42 69 74 76 65 63 53 69 7a 65 28 42 69 74 76  3BitvecSize(Bitv
26ed0 65 63 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  ec*);.#ifndef SQ
26ee0 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a  LITE_UNTESTABLE.
26ef0 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65  int sqlite3Bitve
26f00 63 42 75 69 6c 74 69 6e 54 65 73 74 28 69 6e 74  cBuiltinTest(int
26f10 2c 69 6e 74 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  ,int*);.#endif..
26f20 52 6f 77 53 65 74 20 2a 73 71 6c 69 74 65 33 52  RowSet *sqlite3R
26f30 6f 77 53 65 74 49 6e 69 74 28 73 71 6c 69 74 65  owSetInit(sqlite
26f40 33 2a 2c 20 76 6f 69 64 2a 2c 20 75 6e 73 69 67  3*, void*, unsig
26f50 6e 65 64 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  ned int);.void s
26f60 71 6c 69 74 65 33 52 6f 77 53 65 74 43 6c 65 61  qlite3RowSetClea
26f70 72 28 52 6f 77 53 65 74 2a 29 3b 0a 76 6f 69 64  r(RowSet*);.void
26f80 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e   sqlite3RowSetIn
26f90 73 65 72 74 28 52 6f 77 53 65 74 2a 2c 20 69 36  sert(RowSet*, i6
26fa0 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  4);.int sqlite3R
26fb0 6f 77 53 65 74 54 65 73 74 28 52 6f 77 53 65 74  owSetTest(RowSet
26fc0 2a 2c 20 69 6e 74 20 69 42 61 74 63 68 2c 20 69  *, int iBatch, i
26fd0 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
26fe0 52 6f 77 53 65 74 4e 65 78 74 28 52 6f 77 53 65  RowSetNext(RowSe
26ff0 74 2a 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64  t*, i64*);..void
27000 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 56 69   sqlite3CreateVi
27010 65 77 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  ew(Parse*,Token*
27020 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 45  ,Token*,Token*,E
27030 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a  xprList*,Select*
27040 2c 69 6e 74 2c 69 6e 74 29 3b 0a 0a 23 69 66 20  ,int,int);..#if 
27050 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
27060 4f 4d 49 54 5f 56 49 45 57 29 20 7c 7c 20 21 64  OMIT_VIEW) || !d
27070 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
27080 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29  IT_VIRTUALTABLE)
27090 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 69  .  int sqlite3Vi
270a0 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73  ewGetColumnNames
270b0 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b  (Parse*,Table*);
270c0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
270d0 73 71 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f  sqlite3ViewGetCo
270e0 6c 75 6d 6e 4e 61 6d 65 73 28 41 2c 42 29 20 30  lumnNames(A,B) 0
270f0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 53 51 4c  .#endif..#if SQL
27100 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44  ITE_MAX_ATTACHED
27110 3e 33 30 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  >30.  int sqlite
27120 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 79  3DbMaskAllZero(y
27130 44 62 4d 61 73 6b 29 3b 0a 23 65 6e 64 69 66 0a  DbMask);.#endif.
27140 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70  void sqlite3Drop
27150 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72  Table(Parse*, Sr
27160 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74  cList*, int, int
27170 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
27180 6f 64 65 44 72 6f 70 54 61 62 6c 65 28 50 61 72  odeDropTable(Par
27190 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
271a0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
271b0 69 74 65 33 44 65 6c 65 74 65 54 61 62 6c 65 28  ite3DeleteTable(
271c0 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a  sqlite3*, Table*
271d0 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
271e0 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45  E_OMIT_AUTOINCRE
271f0 4d 45 4e 54 0a 20 20 76 6f 69 64 20 73 71 6c 69  MENT.  void sqli
27200 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74  te3Autoincrement
27210 42 65 67 69 6e 28 50 61 72 73 65 20 2a 70 50 61  Begin(Parse *pPa
27220 72 73 65 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  rse);.  void sql
27230 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e  ite3Autoincremen
27240 74 45 6e 64 28 50 61 72 73 65 20 2a 70 50 61 72  tEnd(Parse *pPar
27250 73 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  se);.#else.# def
27260 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69  ine sqlite3Autoi
27270 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 58 29  ncrementBegin(X)
27280 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
27290 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e  3AutoincrementEn
272a0 64 28 58 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64  d(X).#endif.void
272b0 20 73 71 6c 69 74 65 33 49 6e 73 65 72 74 28 50   sqlite3Insert(P
272c0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
272d0 20 53 65 6c 65 63 74 2a 2c 20 49 64 4c 69 73 74   Select*, IdList
272e0 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73  *, int);.void *s
272f0 71 6c 69 74 65 33 41 72 72 61 79 41 6c 6c 6f 63  qlite3ArrayAlloc
27300 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 76 6f 69  ate(sqlite3*,voi
27310 64 2a 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a  d*,int,int*,int*
27320 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74  );.IdList *sqlit
27330 65 33 49 64 4c 69 73 74 41 70 70 65 6e 64 28 73  e3IdListAppend(s
27340 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a  qlite3*, IdList*
27350 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
27360 71 6c 69 74 65 33 49 64 4c 69 73 74 49 6e 64 65  qlite3IdListInde
27370 78 28 49 64 4c 69 73 74 2a 2c 63 6f 6e 73 74 20  x(IdList*,const 
27380 63 68 61 72 2a 29 3b 0a 53 72 63 4c 69 73 74 20  char*);.SrcList 
27390 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 45  *sqlite3SrcListE
273a0 6e 6c 61 72 67 65 28 73 71 6c 69 74 65 33 2a 2c  nlarge(sqlite3*,
273b0 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20   SrcList*, int, 
273c0 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73  int);.SrcList *s
273d0 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70 70  qlite3SrcListApp
273e0 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20 53 72  end(sqlite3*, Sr
273f0 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  cList*, Token*, 
27400 54 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69 73 74  Token*);.SrcList
27410 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74   *sqlite3SrcList
27420 41 70 70 65 6e 64 46 72 6f 6d 54 65 72 6d 28 50  AppendFromTerm(P
27430 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
27440 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c   Token*, Token*,
27450 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27470 20 20 20 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 53         Token*, S
27480 65 6c 65 63 74 2a 2c 20 45 78 70 72 2a 2c 20 49  elect*, Expr*, I
27490 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  dList*);.void sq
274a0 6c 69 74 65 33 53 72 63 4c 69 73 74 49 6e 64 65  lite3SrcListInde
274b0 78 65 64 42 79 28 50 61 72 73 65 20 2a 2c 20 53  xedBy(Parse *, S
274c0 72 63 4c 69 73 74 20 2a 2c 20 54 6f 6b 65 6e 20  rcList *, Token 
274d0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
274e0 53 72 63 4c 69 73 74 46 75 6e 63 41 72 67 73 28  SrcListFuncArgs(
274f0 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
27500 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  , ExprList*);.in
27510 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78 65 64  t sqlite3Indexed
27520 42 79 4c 6f 6f 6b 75 70 28 50 61 72 73 65 20 2a  ByLookup(Parse *
27530 2c 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74  , struct SrcList
27540 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f 69 64 20 73  _item *);.void s
27550 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68 69  qlite3SrcListShi
27560 66 74 4a 6f 69 6e 54 79 70 65 28 53 72 63 4c 69  ftJoinType(SrcLi
27570 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
27580 65 33 53 72 63 4c 69 73 74 41 73 73 69 67 6e 43  e3SrcListAssignC
27590 75 72 73 6f 72 73 28 50 61 72 73 65 2a 2c 20 53  ursors(Parse*, S
275a0 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  rcList*);.void s
275b0 71 6c 69 74 65 33 49 64 4c 69 73 74 44 65 6c 65  qlite3IdListDele
275c0 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c  te(sqlite3*, IdL
275d0 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
275e0 74 65 33 53 72 63 4c 69 73 74 44 65 6c 65 74 65  te3SrcListDelete
275f0 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69  (sqlite3*, SrcLi
27600 73 74 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c  st*);.Index *sql
27610 69 74 65 33 41 6c 6c 6f 63 61 74 65 49 6e 64 65  ite3AllocateInde
27620 78 4f 62 6a 65 63 74 28 73 71 6c 69 74 65 33 2a  xObject(sqlite3*
27630 2c 69 31 36 2c 69 6e 74 2c 63 68 61 72 2a 2a 29  ,i16,int,char**)
27640 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72  ;.void sqlite3Cr
27650 65 61 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a  eateIndex(Parse*
27660 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53  ,Token*,Token*,S
27670 72 63 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74  rcList*,ExprList
27680 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20  *,int,Token*,.  
27690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
276a0 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 20 69          Expr*, i
276b0 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f  nt, int, u8);.vo
276c0 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 49 6e  id sqlite3DropIn
276d0 64 65 78 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  dex(Parse*, SrcL
276e0 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  ist*, int);.int 
276f0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 28 50 61  sqlite3Select(Pa
27700 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53  rse*, Select*, S
27710 65 6c 65 63 74 44 65 73 74 2a 29 3b 0a 53 65 6c  electDest*);.Sel
27720 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65  ect *sqlite3Sele
27730 63 74 4e 65 77 28 50 61 72 73 65 2a 2c 45 78 70  ctNew(Parse*,Exp
27740 72 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c  rList*,SrcList*,
27750 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  Expr*,ExprList*,
27760 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27770 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c            Expr*,
27780 45 78 70 72 4c 69 73 74 2a 2c 75 33 32 2c 45 78  ExprList*,u32,Ex
27790 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64  pr*,Expr*);.void
277a0 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65   sqlite3SelectDe
277b0 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53  lete(sqlite3*, S
277c0 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a  elect*);.Table *
277d0 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 4c 6f  sqlite3SrcListLo
277e0 6f 6b 75 70 28 50 61 72 73 65 2a 2c 20 53 72 63  okup(Parse*, Src
277f0 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
27800 74 65 33 49 73 52 65 61 64 4f 6e 6c 79 28 50 61  te3IsReadOnly(Pa
27810 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
27820 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
27830 4f 70 65 6e 54 61 62 6c 65 28 50 61 72 73 65 2a  OpenTable(Parse*
27840 2c 20 69 6e 74 20 69 43 75 72 2c 20 69 6e 74 20  , int iCur, int 
27850 69 44 62 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  iDb, Table*, int
27860 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  );.#if defined(S
27870 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44  QLITE_ENABLE_UPD
27880 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54  ATE_DELETE_LIMIT
27890 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
278a0 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45  LITE_OMIT_SUBQUE
278b0 52 59 29 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  RY).Expr *sqlite
278c0 33 4c 69 6d 69 74 57 68 65 72 65 28 50 61 72 73  3LimitWhere(Pars
278d0 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72  e*,SrcList*,Expr
278e0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  *,ExprList*,Expr
278f0 2a 2c 45 78 70 72 2a 2c 63 68 61 72 2a 29 3b 0a  *,Expr*,char*);.
27900 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
27910 74 65 33 44 65 6c 65 74 65 46 72 6f 6d 28 50 61  te3DeleteFrom(Pa
27920 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
27930 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
27940 69 74 65 33 55 70 64 61 74 65 28 50 61 72 73 65  ite3Update(Parse
27950 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70  *, SrcList*, Exp
27960 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 69  rList*, Expr*, i
27970 6e 74 29 3b 0a 57 68 65 72 65 49 6e 66 6f 20 2a  nt);.WhereInfo *
27980 73 71 6c 69 74 65 33 57 68 65 72 65 42 65 67 69  sqlite3WhereBegi
27990 6e 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74  n(Parse*,SrcList
279a0 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74  *,Expr*,ExprList
279b0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c  *,ExprList*,u16,
279c0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
279d0 65 33 57 68 65 72 65 45 6e 64 28 57 68 65 72 65  e3WhereEnd(Where
279e0 49 6e 66 6f 2a 29 3b 0a 4c 6f 67 45 73 74 20 73  Info*);.LogEst s
279f0 71 6c 69 74 65 33 57 68 65 72 65 4f 75 74 70 75  qlite3WhereOutpu
27a00 74 52 6f 77 43 6f 75 6e 74 28 57 68 65 72 65 49  tRowCount(WhereI
27a10 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
27a20 65 33 57 68 65 72 65 49 73 44 69 73 74 69 6e 63  e3WhereIsDistinc
27a30 74 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  t(WhereInfo*);.i
27a40 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  nt sqlite3WhereI
27a50 73 4f 72 64 65 72 65 64 28 57 68 65 72 65 49 6e  sOrdered(WhereIn
27a60 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  fo*);.int sqlite
27a70 33 57 68 65 72 65 4f 72 64 65 72 65 64 49 6e 6e  3WhereOrderedInn
27a80 65 72 4c 6f 6f 70 28 57 68 65 72 65 49 6e 66 6f  erLoop(WhereInfo
27a90 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
27aa0 68 65 72 65 49 73 53 6f 72 74 65 64 28 57 68 65  hereIsSorted(Whe
27ab0 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
27ac0 6c 69 74 65 33 57 68 65 72 65 43 6f 6e 74 69 6e  lite3WhereContin
27ad0 75 65 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66  ueLabel(WhereInf
27ae0 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
27af0 57 68 65 72 65 42 72 65 61 6b 4c 61 62 65 6c 28  WhereBreakLabel(
27b00 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
27b10 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f 6b 4f   sqlite3WhereOkO
27b20 6e 65 50 61 73 73 28 57 68 65 72 65 49 6e 66 6f  nePass(WhereInfo
27b30 2a 2c 20 69 6e 74 2a 29 3b 0a 23 64 65 66 69 6e  *, int*);.#defin
27b40 65 20 4f 4e 45 50 41 53 53 5f 4f 46 46 20 20 20  e ONEPASS_OFF   
27b50 20 20 20 30 20 20 20 20 20 20 20 20 2f 2a 20 55     0        /* U
27b60 73 65 20 6f 66 20 4f 4e 45 50 41 53 53 20 6e 6f  se of ONEPASS no
27b70 74 20 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64 65  t allowed */.#de
27b80 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f 53 49 4e  fine ONEPASS_SIN
27b90 47 4c 45 20 20 20 31 20 20 20 20 20 20 20 20 2f  GLE   1        /
27ba0 2a 20 4f 4e 45 50 41 53 53 20 76 61 6c 69 64 20  * ONEPASS valid 
27bb0 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 72 6f 77  for a single row
27bc0 20 75 70 64 61 74 65 20 2a 2f 0a 23 64 65 66 69   update */.#defi
27bd0 6e 65 20 4f 4e 45 50 41 53 53 5f 4d 55 4c 54 49  ne ONEPASS_MULTI
27be0 20 20 20 20 32 20 20 20 20 20 20 20 20 2f 2a 20      2        /* 
27bf0 4f 4e 45 50 41 53 53 20 69 73 20 76 61 6c 69 64  ONEPASS is valid
27c00 20 66 6f 72 20 6d 75 6c 74 69 70 6c 65 20 72 6f   for multiple ro
27c10 77 73 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  ws */.void sqlit
27c20 65 33 45 78 70 72 43 6f 64 65 4c 6f 61 64 49 6e  e3ExprCodeLoadIn
27c30 64 65 78 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a  dexColumn(Parse*
27c40 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69  , Index*, int, i
27c50 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  nt, int);.int sq
27c60 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74  lite3ExprCodeGet
27c70 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 54  Column(Parse*, T
27c80 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  able*, int, int,
27c90 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20   int, u8);.void 
27ca0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47  sqlite3ExprCodeG
27cb0 65 74 43 6f 6c 75 6d 6e 54 6f 52 65 67 28 50 61  etColumnToReg(Pa
27cc0 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
27cd0 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
27ce0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
27cf0 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62  deGetColumnOfTab
27d00 6c 65 28 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a  le(Vdbe*, Table*
27d10 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
27d20 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
27d30 70 72 43 6f 64 65 4d 6f 76 65 28 50 61 72 73 65  prCodeMove(Parse
27d40 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
27d50 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
27d60 78 70 72 43 61 63 68 65 53 74 6f 72 65 28 50 61  xprCacheStore(Pa
27d70 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  rse*, int, int, 
27d80 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
27d90 65 33 45 78 70 72 43 61 63 68 65 50 75 73 68 28  e3ExprCachePush(
27da0 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
27db0 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 50 6f  lite3ExprCachePo
27dc0 70 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  p(Parse*);.void 
27dd0 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65  sqlite3ExprCache
27de0 52 65 6d 6f 76 65 28 50 61 72 73 65 2a 2c 20 69  Remove(Parse*, i
27df0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
27e00 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 43  qlite3ExprCacheC
27e10 6c 65 61 72 28 50 61 72 73 65 2a 29 3b 0a 76 6f  lear(Parse*);.vo
27e20 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  id sqlite3ExprCa
27e30 63 68 65 41 66 66 69 6e 69 74 79 43 68 61 6e 67  cheAffinityChang
27e40 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  e(Parse*, int, i
27e50 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
27e60 33 45 78 70 72 43 6f 64 65 28 50 61 72 73 65 2a  3ExprCode(Parse*
27e70 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76  , Expr*, int);.v
27e80 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
27e90 6f 64 65 43 6f 70 79 28 50 61 72 73 65 2a 2c 20  odeCopy(Parse*, 
27ea0 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  Expr*, int);.voi
27eb0 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
27ec0 65 46 61 63 74 6f 72 61 62 6c 65 28 50 61 72 73  eFactorable(Pars
27ed0 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
27ee0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
27ef0 43 6f 64 65 41 74 49 6e 69 74 28 50 61 72 73 65  CodeAtInit(Parse
27f00 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
27f10 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
27f20 6f 64 65 54 65 6d 70 28 50 61 72 73 65 2a 2c 20  odeTemp(Parse*, 
27f30 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e  Expr*, int*);.in
27f40 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  t sqlite3ExprCod
27f50 65 54 61 72 67 65 74 28 50 61 72 73 65 2a 2c 20  eTarget(Parse*, 
27f60 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  Expr*, int);.voi
27f70 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
27f80 65 41 6e 64 43 61 63 68 65 28 50 61 72 73 65 2a  eAndCache(Parse*
27f90 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69  , Expr*, int);.i
27fa0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
27fb0 64 65 45 78 70 72 4c 69 73 74 28 50 61 72 73 65  deExprList(Parse
27fc0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  *, ExprList*, in
27fd0 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 23 64 65  t, int, u8);.#de
27fe0 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c  fine SQLITE_ECEL
27ff0 5f 44 55 50 20 20 20 20 20 20 30 78 30 31 20 20  _DUP      0x01  
28000 2f 2a 20 44 65 65 70 2c 20 6e 6f 74 20 73 68 61  /* Deep, not sha
28010 6c 6c 6f 77 20 63 6f 70 69 65 73 20 2a 2f 0a 23  llow copies */.#
28020 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43  define SQLITE_EC
28030 45 4c 5f 46 41 43 54 4f 52 20 20 20 30 78 30 32  EL_FACTOR   0x02
28040 20 20 2f 2a 20 46 61 63 74 6f 72 20 6f 75 74 20    /* Factor out 
28050 63 6f 6e 73 74 61 6e 74 20 74 65 72 6d 73 20 2a  constant terms *
28060 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
28070 5f 45 43 45 4c 5f 52 45 46 20 20 20 20 20 20 30  _ECEL_REF      0
28080 78 30 34 20 20 2f 2a 20 55 73 65 20 45 78 70 72  x04  /* Use Expr
28090 4c 69 73 74 2e 75 2e 78 2e 69 4f 72 64 65 72 42  List.u.x.iOrderB
280a0 79 43 6f 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  yCol */.#define 
280b0 53 51 4c 49 54 45 5f 45 43 45 4c 5f 4f 4d 49 54  SQLITE_ECEL_OMIT
280c0 52 45 46 20 20 30 78 30 38 20 20 2f 2a 20 4f 6d  REF  0x08  /* Om
280d0 69 74 20 69 66 20 45 78 70 72 4c 69 73 74 2e 75  it if ExprList.u
280e0 2e 78 2e 69 4f 72 64 65 72 42 79 43 6f 6c 20 2a  .x.iOrderByCol *
280f0 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  /.void sqlite3Ex
28100 70 72 49 66 54 72 75 65 28 50 61 72 73 65 2a 2c  prIfTrue(Parse*,
28110 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74   Expr*, int, int
28120 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
28130 78 70 72 49 66 46 61 6c 73 65 28 50 61 72 73 65  xprIfFalse(Parse
28140 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69  *, Expr*, int, i
28150 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
28160 33 45 78 70 72 49 66 46 61 6c 73 65 44 75 70 28  3ExprIfFalseDup(
28170 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
28180 6e 74 2c 20 69 6e 74 29 3b 0a 54 61 62 6c 65 20  nt, int);.Table 
28190 2a 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c  *sqlite3FindTabl
281a0 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  e(sqlite3*,const
281b0 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
281c0 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20 4c 4f  ar*);.#define LO
281d0 43 41 54 45 5f 56 49 45 57 20 20 20 20 30 78 30  CATE_VIEW    0x0
281e0 31 0a 23 64 65 66 69 6e 65 20 4c 4f 43 41 54 45  1.#define LOCATE
281f0 5f 4e 4f 45 52 52 20 20 20 30 78 30 32 0a 54 61  _NOERR   0x02.Ta
28200 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61  ble *sqlite3Loca
28210 74 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 75  teTable(Parse*,u
28220 33 32 20 66 6c 61 67 73 2c 63 6f 6e 73 74 20 63  32 flags,const c
28230 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
28240 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74  *);.Table *sqlit
28250 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 49 74 65  e3LocateTableIte
28260 6d 28 50 61 72 73 65 2a 2c 75 33 32 20 66 6c 61  m(Parse*,u32 fla
28270 67 73 2c 73 74 72 75 63 74 20 53 72 63 4c 69 73  gs,struct SrcLis
28280 74 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e 64 65 78  t_item *);.Index
28290 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 64   *sqlite3FindInd
282a0 65 78 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  ex(sqlite3*,cons
282b0 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
282c0 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
282d0 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
282e0 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a  teTable(sqlite3*
282f0 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
28300 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
28310 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e  nlinkAndDeleteIn
28320 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  dex(sqlite3*,int
28330 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  ,const char*);.v
28340 6f 69 64 20 73 71 6c 69 74 65 33 56 61 63 75 75  oid sqlite3Vacuu
28350 6d 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29  m(Parse*,Token*)
28360 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e  ;.int sqlite3Run
28370 56 61 63 75 75 6d 28 63 68 61 72 2a 2a 2c 20 73  Vacuum(char**, s
28380 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 63  qlite3*, int);.c
28390 68 61 72 20 2a 73 71 6c 69 74 65 33 4e 61 6d 65  har *sqlite3Name
283a0 46 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69 74 65  FromToken(sqlite
283b0 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  3*, Token*);.int
283c0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6d 70   sqlite3ExprComp
283d0 61 72 65 28 50 61 72 73 65 2a 2c 45 78 70 72 2a  are(Parse*,Expr*
283e0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69  , Expr*, int);.i
283f0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
28400 6d 70 61 72 65 53 6b 69 70 28 45 78 70 72 2a 2c  mpareSkip(Expr*,
28410 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   Expr*, int);.in
28420 74 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  t sqlite3ExprLis
28430 74 43 6f 6d 70 61 72 65 28 45 78 70 72 4c 69 73  tCompare(ExprLis
28440 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  t*, ExprList*, i
28450 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
28460 45 78 70 72 49 6d 70 6c 69 65 73 45 78 70 72 28  ExprImpliesExpr(
28470 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 20 45 78  Parse*,Expr*, Ex
28480 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  pr*, int);.void 
28490 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79  sqlite3ExprAnaly
284a0 7a 65 41 67 67 72 65 67 61 74 65 73 28 4e 61 6d  zeAggregates(Nam
284b0 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a  eContext*, Expr*
284c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
284d0 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 4c 69 73  xprAnalyzeAggLis
284e0 74 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 45  t(NameContext*,E
284f0 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
28500 71 6c 69 74 65 33 45 78 70 72 43 6f 76 65 72 65  qlite3ExprCovere
28510 64 42 79 49 6e 64 65 78 28 45 78 70 72 2a 2c 20  dByIndex(Expr*, 
28520 69 6e 74 20 69 43 75 72 2c 20 49 6e 64 65 78 20  int iCur, Index 
28530 2a 70 49 64 78 29 3b 0a 69 6e 74 20 73 71 6c 69  *pIdx);.int sqli
28540 74 65 33 46 75 6e 63 74 69 6f 6e 55 73 65 73 54  te3FunctionUsesT
28550 68 69 73 53 72 63 28 45 78 70 72 2a 2c 20 53 72  hisSrc(Expr*, Sr
28560 63 4c 69 73 74 2a 29 3b 0a 56 64 62 65 20 2a 73  cList*);.Vdbe *s
28570 71 6c 69 74 65 33 47 65 74 56 64 62 65 28 50 61  qlite3GetVdbe(Pa
28580 72 73 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53  rse*);.#ifndef S
28590 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45  QLITE_UNTESTABLE
285a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e  .void sqlite3Prn
285b0 67 53 61 76 65 53 74 61 74 65 28 76 6f 69 64 29  gSaveState(void)
285c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72  ;.void sqlite3Pr
285d0 6e 67 52 65 73 74 6f 72 65 53 74 61 74 65 28 76  ngRestoreState(v
285e0 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69  oid);.#endif.voi
285f0 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63  d sqlite3Rollbac
28600 6b 41 6c 6c 28 73 71 6c 69 74 65 33 2a 2c 69 6e  kAll(sqlite3*,in
28610 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
28620 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61  CodeVerifySchema
28630 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76  (Parse*, int);.v
28640 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56  oid sqlite3CodeV
28650 65 72 69 66 79 4e 61 6d 65 64 53 63 68 65 6d 61  erifyNamedSchema
28660 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
28670 68 61 72 20 2a 7a 44 62 29 3b 0a 76 6f 69 64 20  har *zDb);.void 
28680 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72 61 6e  sqlite3BeginTran
28690 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20  saction(Parse*, 
286a0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
286b0 65 33 45 6e 64 54 72 61 6e 73 61 63 74 69 6f 6e  e3EndTransaction
286c0 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f  (Parse*,int);.vo
286d0 69 64 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f  id sqlite3Savepo
286e0 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  int(Parse*, int,
286f0 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
28700 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70  qlite3CloseSavep
28710 6f 69 6e 74 73 28 73 71 6c 69 74 65 33 20 2a 29  oints(sqlite3 *)
28720 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4c 65  ;.void sqlite3Le
28730 61 76 65 4d 75 74 65 78 41 6e 64 43 6c 6f 73 65  aveMutexAndClose
28740 5a 6f 6d 62 69 65 28 73 71 6c 69 74 65 33 2a 29  Zombie(sqlite3*)
28750 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
28760 72 49 73 43 6f 6e 73 74 61 6e 74 28 45 78 70 72  rIsConstant(Expr
28770 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
28780 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4e 6f 74  xprIsConstantNot
28790 4a 6f 69 6e 28 45 78 70 72 2a 29 3b 0a 69 6e 74  Join(Expr*);.int
287a0 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f   sqlite3ExprIsCo
287b0 6e 73 74 61 6e 74 4f 72 46 75 6e 63 74 69 6f 6e  nstantOrFunction
287c0 28 45 78 70 72 2a 2c 20 75 38 29 3b 0a 69 6e 74  (Expr*, u8);.int
287d0 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f   sqlite3ExprIsCo
287e0 6e 73 74 61 6e 74 4f 72 47 72 6f 75 70 42 79 28  nstantOrGroupBy(
287f0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45  Parse*, Expr*, E
28800 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
28810 71 6c 69 74 65 33 45 78 70 72 49 73 54 61 62 6c  qlite3ExprIsTabl
28820 65 43 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 2c  eConstant(Expr*,
28830 69 6e 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  int);.#ifdef SQL
28840 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55 52 53 4f  ITE_ENABLE_CURSO
28850 52 5f 48 49 4e 54 53 0a 69 6e 74 20 73 71 6c 69  R_HINTS.int sqli
28860 74 65 33 45 78 70 72 43 6f 6e 74 61 69 6e 73 53  te3ExprContainsS
28870 75 62 71 75 65 72 79 28 45 78 70 72 2a 29 3b 0a  ubquery(Expr*);.
28880 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74  #endif.int sqlit
28890 65 33 45 78 70 72 49 73 49 6e 74 65 67 65 72 28  e3ExprIsInteger(
288a0 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e  Expr*, int*);.in
288b0 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 6e  t sqlite3ExprCan
288c0 42 65 4e 75 6c 6c 28 63 6f 6e 73 74 20 45 78 70  BeNull(const Exp
288d0 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
288e0 45 78 70 72 4e 65 65 64 73 4e 6f 41 66 66 69 6e  ExprNeedsNoAffin
288f0 69 74 79 43 68 61 6e 67 65 28 63 6f 6e 73 74 20  ityChange(const 
28900 45 78 70 72 2a 2c 20 63 68 61 72 29 3b 0a 69 6e  Expr*, char);.in
28910 74 20 73 71 6c 69 74 65 33 49 73 52 6f 77 69 64  t sqlite3IsRowid
28920 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  (const char*);.v
28930 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72  oid sqlite3Gener
28940 61 74 65 52 6f 77 44 65 6c 65 74 65 28 0a 20 20  ateRowDelete(.  
28950 20 20 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c    Parse*,Table*,
28960 54 72 69 67 67 65 72 2a 2c 69 6e 74 2c 69 6e 74  Trigger*,int,int
28970 2c 69 6e 74 2c 69 31 36 2c 75 38 2c 75 38 2c 75  ,int,i16,u8,u8,u
28980 38 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  8,int);.void sql
28990 69 74 65 33 47 65 6e 65 72 61 74 65 52 6f 77 49  ite3GenerateRowI
289a0 6e 64 65 78 44 65 6c 65 74 65 28 50 61 72 73 65  ndexDelete(Parse
289b0 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
289c0 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b  int, int*, int);
289d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 6e 65  .int sqlite3Gene
289e0 72 61 74 65 49 6e 64 65 78 4b 65 79 28 50 61 72  rateIndexKey(Par
289f0 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74  se*, Index*, int
28a00 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a  , int, int, int*
28a10 2c 49 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a 76 6f  ,Index*,int);.vo
28a20 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76  id sqlite3Resolv
28a30 65 50 61 72 74 49 64 78 4c 61 62 65 6c 28 50 61  ePartIdxLabel(Pa
28a40 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  rse*,int);.void 
28a50 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 43  sqlite3GenerateC
28a60 6f 6e 73 74 72 61 69 6e 74 43 68 65 63 6b 73 28  onstraintChecks(
28a70 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e  Parse*,Table*,in
28a80 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69  t*,int,int,int,i
28a90 6e 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  nt,.            
28aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28ab0 20 20 20 20 20 20 20 20 20 75 38 2c 75 38 2c 69           u8,u8,i
28ac0 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 23  nt,int*,int*);.#
28ad0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
28ae0 42 4c 45 5f 4e 55 4c 4c 5f 54 52 49 4d 0a 20 20  BLE_NULL_TRIM.  
28af0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74 4d  void sqlite3SetM
28b00 61 6b 65 52 65 63 6f 72 64 50 35 28 56 64 62 65  akeRecordP5(Vdbe
28b10 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65  *,Table*);.#else
28b20 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
28b30 33 53 65 74 4d 61 6b 65 52 65 63 6f 72 64 50 35  3SetMakeRecordP5
28b40 28 41 2c 42 29 0a 23 65 6e 64 69 66 0a 76 6f 69  (A,B).#endif.voi
28b50 64 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74  d sqlite3Complet
28b60 65 49 6e 73 65 72 74 69 6f 6e 28 50 61 72 73 65  eInsertion(Parse
28b70 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e 74  *,Table*,int,int
28b80 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e  ,int,int*,int,in
28b90 74 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  t,int);.int sqli
28ba0 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49  te3OpenTableAndI
28bb0 6e 64 69 63 65 73 28 50 61 72 73 65 2a 2c 20 54  ndices(Parse*, T
28bc0 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 2c 20  able*, int, u8, 
28bd0 69 6e 74 2c 20 75 38 2a 2c 20 69 6e 74 2a 2c 20  int, u8*, int*, 
28be0 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  int*);.void sqli
28bf0 74 65 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65  te3BeginWriteOpe
28c00 72 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69  ration(Parse*, i
28c10 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
28c20 71 6c 69 74 65 33 4d 75 6c 74 69 57 72 69 74 65  qlite3MultiWrite
28c30 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
28c40 71 6c 69 74 65 33 4d 61 79 41 62 6f 72 74 28 50  qlite3MayAbort(P
28c50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
28c60 69 74 65 33 48 61 6c 74 43 6f 6e 73 74 72 61 69  ite3HaltConstrai
28c70 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  nt(Parse*, int, 
28c80 69 6e 74 2c 20 63 68 61 72 2a 2c 20 69 38 2c 20  int, char*, i8, 
28c90 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
28ca0 33 55 6e 69 71 75 65 43 6f 6e 73 74 72 61 69 6e  3UniqueConstrain
28cb0 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 49  t(Parse*, int, I
28cc0 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ndex*);.void sql
28cd0 69 74 65 33 52 6f 77 69 64 43 6f 6e 73 74 72 61  ite3RowidConstra
28ce0 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  int(Parse*, int,
28cf0 20 54 61 62 6c 65 2a 29 3b 0a 45 78 70 72 20 2a   Table*);.Expr *
28d00 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 73  sqlite3ExprDup(s
28d10 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e  qlite3*,Expr*,in
28d20 74 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71  t);.ExprList *sq
28d30 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44 75 70  lite3ExprListDup
28d40 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69  (sqlite3*,ExprLi
28d50 73 74 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c 69 73  st*,int);.SrcLis
28d60 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73  t *sqlite3SrcLis
28d70 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 72  tDup(sqlite3*,Sr
28d80 63 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c  cList*,int);.IdL
28d90 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69  ist *sqlite3IdLi
28da0 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 49  stDup(sqlite3*,I
28db0 64 4c 69 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20  dList*);.Select 
28dc0 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 75  *sqlite3SelectDu
28dd0 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63  p(sqlite3*,Selec
28de0 74 2a 2c 69 6e 74 29 3b 0a 23 69 66 20 53 45 4c  t*,int);.#if SEL
28df0 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44  ECTTRACE_ENABLED
28e00 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c  .void sqlite3Sel
28e10 65 63 74 53 65 74 4e 61 6d 65 28 53 65 6c 65 63  ectSetName(Selec
28e20 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  t*,const char*);
28e30 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
28e40 73 71 6c 69 74 65 33 53 65 6c 65 63 74 53 65 74  sqlite3SelectSet
28e50 4e 61 6d 65 28 41 2c 42 29 0a 23 65 6e 64 69 66  Name(A,B).#endif
28e60 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 73  .void sqlite3Ins
28e70 65 72 74 42 75 69 6c 74 69 6e 46 75 6e 63 73 28  ertBuiltinFuncs(
28e80 46 75 6e 63 44 65 66 2a 2c 69 6e 74 29 3b 0a 46  FuncDef*,int);.F
28e90 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33 46  uncDef *sqlite3F
28ea0 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69  indFunction(sqli
28eb0 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
28ec0 2c 69 6e 74 2c 75 38 2c 75 38 29 3b 0a 76 6f 69  ,int,u8,u8);.voi
28ed0 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65  d sqlite3Registe
28ee0 72 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e  rBuiltinFunction
28ef0 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  s(void);.void sq
28f00 6c 69 74 65 33 52 65 67 69 73 74 65 72 44 61 74  lite3RegisterDat
28f10 65 54 69 6d 65 46 75 6e 63 74 69 6f 6e 73 28 76  eTimeFunctions(v
28f20 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
28f30 65 33 52 65 67 69 73 74 65 72 50 65 72 43 6f 6e  e3RegisterPerCon
28f40 6e 65 63 74 69 6f 6e 42 75 69 6c 74 69 6e 46 75  nectionBuiltinFu
28f50 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a  nctions(sqlite3*
28f60 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61  );.int sqlite3Sa
28f70 66 65 74 79 43 68 65 63 6b 4f 6b 28 73 71 6c 69  fetyCheckOk(sqli
28f80 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  te3*);.int sqlit
28f90 65 33 53 61 66 65 74 79 43 68 65 63 6b 53 69 63  e3SafetyCheckSic
28fa0 6b 4f 72 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b  kOrOk(sqlite3*);
28fb0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 68 61  .void sqlite3Cha
28fc0 6e 67 65 43 6f 6f 6b 69 65 28 50 61 72 73 65 2a  ngeCookie(Parse*
28fd0 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65  , int);..#if !de
28fe0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
28ff0 54 5f 56 49 45 57 29 20 26 26 20 21 64 65 66 69  T_VIEW) && !defi
29000 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
29010 54 52 49 47 47 45 52 29 0a 76 6f 69 64 20 73 71  TRIGGER).void sq
29020 6c 69 74 65 33 4d 61 74 65 72 69 61 6c 69 7a 65  lite3Materialize
29030 56 69 65 77 28 50 61 72 73 65 2a 2c 20 54 61 62  View(Parse*, Tab
29040 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  le*, Expr*, int)
29050 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  ;.#endif..#ifnde
29060 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
29070 49 47 47 45 52 0a 20 20 76 6f 69 64 20 73 71 6c  IGGER.  void sql
29080 69 74 65 33 42 65 67 69 6e 54 72 69 67 67 65 72  ite3BeginTrigger
29090 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c  (Parse*, Token*,
290a0 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 49  Token*,int,int,I
290b0 64 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c  dList*,SrcList*,
290c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
290d0 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72              Expr
290e0 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76  *,int, int);.  v
290f0 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73  oid sqlite3Finis
29100 68 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c  hTrigger(Parse*,
29110 20 54 72 69 67 67 65 72 53 74 65 70 2a 2c 20 54   TriggerStep*, T
29120 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f 69 64 20 73  oken*);.  void s
29130 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65  qlite3DropTrigge
29140 72 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  r(Parse*, SrcLis
29150 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  t*, int);.  void
29160 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67   sqlite3DropTrig
29170 67 65 72 50 74 72 28 50 61 72 73 65 2a 2c 20 54  gerPtr(Parse*, T
29180 72 69 67 67 65 72 2a 29 3b 0a 20 20 54 72 69 67  rigger*);.  Trig
29190 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67  ger *sqlite3Trig
291a0 67 65 72 73 45 78 69 73 74 28 50 61 72 73 65 20  gersExist(Parse 
291b0 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
291c0 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 20 2a  ExprList*, int *
291d0 70 4d 61 73 6b 29 3b 0a 20 20 54 72 69 67 67 65  pMask);.  Trigge
291e0 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  r *sqlite3Trigge
291f0 72 4c 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54  rList(Parse *, T
29200 61 62 6c 65 20 2a 29 3b 0a 20 20 76 6f 69 64 20  able *);.  void 
29210 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72  sqlite3CodeRowTr
29220 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72  igger(Parse*, Tr
29230 69 67 67 65 72 20 2a 2c 20 69 6e 74 2c 20 45 78  igger *, int, Ex
29240 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 54 61  prList*, int, Ta
29250 62 6c 65 20 2a 2c 0a 20 20 20 20 20 20 20 20 20  ble *,.         
29260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29270 20 20 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74     int, int, int
29280 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
29290 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44  3CodeRowTriggerD
292a0 69 72 65 63 74 28 50 61 72 73 65 20 2a 2c 20 54  irect(Parse *, T
292b0 72 69 67 67 65 72 20 2a 2c 20 54 61 62 6c 65 20  rigger *, Table 
292c0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
292d0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
292e0 56 69 65 77 54 72 69 67 67 65 72 73 28 50 61 72  ViewTriggers(Par
292f0 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70  se*, Table*, Exp
29300 72 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73  r*, int, ExprLis
29310 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  t*);.  void sqli
29320 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65 72  te3DeleteTrigger
29330 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 20 54  Step(sqlite3*, T
29340 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 20 20  riggerStep*);.  
29350 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c  TriggerStep *sql
29360 69 74 65 33 54 72 69 67 67 65 72 53 65 6c 65 63  ite3TriggerSelec
29370 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 53  tStep(sqlite3*,S
29380 65 6c 65 63 74 2a 29 3b 0a 20 20 54 72 69 67 67  elect*);.  Trigg
29390 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54  erStep *sqlite3T
293a0 72 69 67 67 65 72 49 6e 73 65 72 74 53 74 65 70  riggerInsertStep
293b0 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a  (sqlite3*,Token*
293c0 2c 20 49 64 4c 69 73 74 2a 2c 0a 20 20 20 20 20  , IdList*,.     
293d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
293e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
293f0 20 20 20 53 65 6c 65 63 74 2a 2c 75 38 29 3b 0a     Select*,u8);.
29400 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
29410 71 6c 69 74 65 33 54 72 69 67 67 65 72 55 70 64  qlite3TriggerUpd
29420 61 74 65 53 74 65 70 28 73 71 6c 69 74 65 33 2a  ateStep(sqlite3*
29430 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74  ,Token*,ExprList
29440 2a 2c 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20  *, Expr*, u8);. 
29450 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71   TriggerStep *sq
29460 6c 69 74 65 33 54 72 69 67 67 65 72 44 65 6c 65  lite3TriggerDele
29470 74 65 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c  teStep(sqlite3*,
29480 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a 29 3b 0a  Token*, Expr*);.
29490 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65    void sqlite3De
294a0 6c 65 74 65 54 72 69 67 67 65 72 28 73 71 6c 69  leteTrigger(sqli
294b0 74 65 33 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b  te3*, Trigger*);
294c0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 55  .  void sqlite3U
294d0 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72  nlinkAndDeleteTr
294e0 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 69  igger(sqlite3*,i
294f0 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
29500 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33 54 72  .  u32 sqlite3Tr
29510 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 50 61 72  iggerColmask(Par
29520 73 65 2a 2c 54 72 69 67 67 65 72 2a 2c 45 78 70  se*,Trigger*,Exp
29530 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54  rList*,int,int,T
29540 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20 64 65  able*,int);.# de
29550 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73  fine sqlite3Pars
29560 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 28 28 70  eToplevel(p) ((p
29570 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3f 20 28  )->pToplevel ? (
29580 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3a 20  p)->pToplevel : 
29590 28 70 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (p)).# define sq
295a0 6c 69 74 65 33 49 73 54 6f 70 6c 65 76 65 6c 28  lite3IsToplevel(
295b0 70 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76  p) ((p)->pToplev
295c0 65 6c 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64  el==0).#else.# d
295d0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69  efine sqlite3Tri
295e0 67 67 65 72 73 45 78 69 73 74 28 42 2c 43 2c 44  ggersExist(B,C,D
295f0 2c 45 2c 46 29 20 30 0a 23 20 64 65 66 69 6e 65  ,E,F) 0.# define
29600 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72   sqlite3DeleteTr
29610 69 67 67 65 72 28 41 2c 42 29 0a 23 20 64 65 66  igger(A,B).# def
29620 69 6e 65 20 73 71 6c 69 74 65 33 44 72 6f 70 54  ine sqlite3DropT
29630 72 69 67 67 65 72 50 74 72 28 41 2c 42 29 0a 23  riggerPtr(A,B).#
29640 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55   define sqlite3U
29650 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72  nlinkAndDeleteTr
29660 69 67 67 65 72 28 41 2c 42 2c 43 29 0a 23 20 64  igger(A,B,C).# d
29670 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64  efine sqlite3Cod
29680 65 52 6f 77 54 72 69 67 67 65 72 28 41 2c 42 2c  eRowTrigger(A,B,
29690 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23  C,D,E,F,G,H,I).#
296a0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43   define sqlite3C
296b0 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44 69 72  odeRowTriggerDir
296c0 65 63 74 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29  ect(A,B,C,D,E,F)
296d0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
296e0 33 54 72 69 67 67 65 72 4c 69 73 74 28 58 2c 20  3TriggerList(X, 
296f0 59 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71  Y) 0.# define sq
29700 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76  lite3ParseToplev
29710 65 6c 28 70 29 20 70 0a 23 20 64 65 66 69 6e 65  el(p) p.# define
29720 20 73 71 6c 69 74 65 33 49 73 54 6f 70 6c 65 76   sqlite3IsToplev
29730 65 6c 28 70 29 20 31 0a 23 20 64 65 66 69 6e 65  el(p) 1.# define
29740 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 43   sqlite3TriggerC
29750 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45  olmask(A,B,C,D,E
29760 2c 46 2c 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a  ,F,G) 0.#endif..
29770 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54  int sqlite3JoinT
29780 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  ype(Parse*, Toke
29790 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  n*, Token*, Toke
297a0 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
297b0 33 43 72 65 61 74 65 46 6f 72 65 69 67 6e 4b 65  3CreateForeignKe
297c0 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  y(Parse*, ExprLi
297d0 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70  st*, Token*, Exp
297e0 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f  rList*, int);.vo
297f0 69 64 20 73 71 6c 69 74 65 33 44 65 66 65 72 46  id sqlite3DeferF
29800 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a  oreignKey(Parse*
29810 2c 20 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20  , int);.#ifndef 
29820 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48  SQLITE_OMIT_AUTH
29830 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64  ORIZATION.  void
29840 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64   sqlite3AuthRead
29850 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63  (Parse*,Expr*,Sc
29860 68 65 6d 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b  hema*,SrcList*);
29870 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75  .  int sqlite3Au
29880 74 68 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 69  thCheck(Parse*,i
29890 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nt, const char*,
298a0 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
298b0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
298c0 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f  id sqlite3AuthCo
298d0 6e 74 65 78 74 50 75 73 68 28 50 61 72 73 65 2a  ntextPush(Parse*
298e0 2c 20 41 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20  , AuthContext*, 
298f0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
29900 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68  void sqlite3Auth
29910 43 6f 6e 74 65 78 74 50 6f 70 28 41 75 74 68 43  ContextPop(AuthC
29920 6f 6e 74 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20  ontext*);.  int 
29930 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 43  sqlite3AuthReadC
29940 6f 6c 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  ol(Parse*, const
29950 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63   char *, const c
29960 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c  har *, int);.#el
29970 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
29980 74 65 33 41 75 74 68 52 65 61 64 28 61 2c 62 2c  te3AuthRead(a,b,
29990 63 2c 64 29 0a 23 20 64 65 66 69 6e 65 20 73 71  c,d).# define sq
299a0 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 61  lite3AuthCheck(a
299b0 2c 62 2c 63 2c 64 2c 65 29 20 20 20 20 53 51 4c  ,b,c,d,e)    SQL
299c0 49 54 45 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20  ITE_OK.# define 
299d0 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65  sqlite3AuthConte
299e0 78 74 50 75 73 68 28 61 2c 62 2c 63 29 0a 23 20  xtPush(a,b,c).# 
299f0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
29a00 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 61 29 20  thContextPop(a) 
29a10 20 28 28 76 6f 69 64 29 28 61 29 29 0a 23 65 6e   ((void)(a)).#en
29a20 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
29a30 41 74 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45  Attach(Parse*, E
29a40 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70  xpr*, Expr*, Exp
29a50 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
29a60 33 44 65 74 61 63 68 28 50 61 72 73 65 2a 2c 20  3Detach(Parse*, 
29a70 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
29a80 69 74 65 33 46 69 78 49 6e 69 74 28 44 62 46 69  ite3FixInit(DbFi
29a90 78 65 72 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e  xer*, Parse*, in
29aa0 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  t, const char*, 
29ab0 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69  const Token*);.i
29ac0 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53 72 63  nt sqlite3FixSrc
29ad0 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20 53  List(DbFixer*, S
29ae0 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  rcList*);.int sq
29af0 6c 69 74 65 33 46 69 78 53 65 6c 65 63 74 28 44  lite3FixSelect(D
29b00 62 46 69 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a  bFixer*, Select*
29b10 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
29b20 78 45 78 70 72 28 44 62 46 69 78 65 72 2a 2c 20  xExpr(DbFixer*, 
29b30 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
29b40 74 65 33 46 69 78 45 78 70 72 4c 69 73 74 28 44  te3FixExprList(D
29b50 62 46 69 78 65 72 2a 2c 20 45 78 70 72 4c 69 73  bFixer*, ExprLis
29b60 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
29b70 46 69 78 54 72 69 67 67 65 72 53 74 65 70 28 44  FixTriggerStep(D
29b80 62 46 69 78 65 72 2a 2c 20 54 72 69 67 67 65 72  bFixer*, Trigger
29b90 53 74 65 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Step*);.int sqli
29ba0 74 65 33 41 74 6f 46 28 63 6f 6e 73 74 20 63 68  te3AtoF(const ch
29bb0 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20  ar *z, double*, 
29bc0 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  int, u8);.int sq
29bd0 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28 63 6f  lite3GetInt32(co
29be0 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a  nst char *, int*
29bf0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74  );.int sqlite3At
29c00 6f 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  oi(const char*);
29c10 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 31  .int sqlite3Utf1
29c20 36 42 79 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76  6ByteLen(const v
29c30 6f 69 64 20 2a 70 44 61 74 61 2c 20 69 6e 74 20  oid *pData, int 
29c40 6e 43 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69  nChar);.int sqli
29c50 74 65 33 55 74 66 38 43 68 61 72 4c 65 6e 28 63  te3Utf8CharLen(c
29c60 6f 6e 73 74 20 63 68 61 72 20 2a 70 44 61 74 61  onst char *pData
29c70 2c 20 69 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33  , int nByte);.u3
29c80 32 20 73 71 6c 69 74 65 33 55 74 66 38 52 65 61  2 sqlite3Utf8Rea
29c90 64 28 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 4c  d(const u8**);.L
29ca0 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67  ogEst sqlite3Log
29cb0 45 73 74 28 75 36 34 29 3b 0a 4c 6f 67 45 73 74  Est(u64);.LogEst
29cc0 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 41 64   sqlite3LogEstAd
29cd0 64 28 4c 6f 67 45 73 74 2c 4c 6f 67 45 73 74 29  d(LogEst,LogEst)
29ce0 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
29cf0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
29d00 4c 45 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65  LE.LogEst sqlite
29d10 33 4c 6f 67 45 73 74 46 72 6f 6d 44 6f 75 62 6c  3LogEstFromDoubl
29d20 65 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6e 64 69  e(double);.#endi
29d30 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  f.#if defined(SQ
29d40 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54  LITE_ENABLE_STMT
29d50 5f 53 43 41 4e 53 54 41 54 55 53 29 20 7c 7c 20  _SCANSTATUS) || 
29d60 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 53 51  \.    defined(SQ
29d70 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
29d80 33 5f 4f 52 5f 53 54 41 54 34 29 20 7c 7c 20 5c  3_OR_STAT4) || \
29d90 0a 20 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c  .    defined(SQL
29da0 49 54 45 5f 45 58 50 4c 41 49 4e 5f 45 53 54 49  ITE_EXPLAIN_ESTI
29db0 4d 41 54 45 44 5f 52 4f 57 53 29 0a 75 36 34 20  MATED_ROWS).u64 
29dc0 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49  sqlite3LogEstToI
29dd0 6e 74 28 4c 6f 67 45 73 74 29 3b 0a 23 65 6e 64  nt(LogEst);.#end
29de0 69 66 0a 56 4c 69 73 74 20 2a 73 71 6c 69 74 65  if.VList *sqlite
29df0 33 56 4c 69 73 74 41 64 64 28 73 71 6c 69 74 65  3VListAdd(sqlite
29e00 33 2a 2c 56 4c 69 73 74 2a 2c 63 6f 6e 73 74 20  3*,VList*,const 
29e10 63 68 61 72 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  char*,int,int);.
29e20 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
29e30 74 65 33 56 4c 69 73 74 4e 75 6d 54 6f 4e 61 6d  te3VListNumToNam
29e40 65 28 56 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 69  e(VList*,int);.i
29e50 6e 74 20 73 71 6c 69 74 65 33 56 4c 69 73 74 4e  nt sqlite3VListN
29e60 61 6d 65 54 6f 4e 75 6d 28 56 4c 69 73 74 2a 2c  ameToNum(VList*,
29e70 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29  const char*,int)
29e80 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65  ;../*.** Routine
29e90 73 20 74 6f 20 72 65 61 64 20 61 6e 64 20 77 72  s to read and wr
29ea0 69 74 65 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e  ite variable-len
29eb0 67 74 68 20 69 6e 74 65 67 65 72 73 2e 20 20 54  gth integers.  T
29ec0 68 65 73 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20  hese used to.** 
29ed0 62 65 20 64 65 66 69 6e 65 64 20 6c 6f 63 61 6c  be defined local
29ee0 6c 79 2c 20 62 75 74 20 6e 6f 77 20 77 65 20 75  ly, but now we u
29ef0 73 65 20 74 68 65 20 76 61 72 69 6e 74 20 72 6f  se the varint ro
29f00 75 74 69 6e 65 73 20 69 6e 20 74 68 65 20 75 74  utines in the ut
29f10 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2f  il.c.** file..*/
29f20 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 75 74 56  .int sqlite3PutV
29f30 61 72 69 6e 74 28 75 6e 73 69 67 6e 65 64 20 63  arint(unsigned c
29f40 68 61 72 2a 2c 20 75 36 34 29 3b 0a 75 38 20 73  har*, u64);.u8 s
29f50 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 28  qlite3GetVarint(
29f60 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
29f70 68 61 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a 75  har *, u64 *);.u
29f80 38 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69  8 sqlite3GetVari
29f90 6e 74 33 32 28 63 6f 6e 73 74 20 75 6e 73 69 67  nt32(const unsig
29fa0 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 33 32 20  ned char *, u32 
29fb0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
29fc0 61 72 69 6e 74 4c 65 6e 28 75 36 34 20 76 29 3b  arintLen(u64 v);
29fd0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 6d  ../*.** The comm
29fe0 6f 6e 20 63 61 73 65 20 69 73 20 66 6f 72 20 61  on case is for a
29ff0 20 76 61 72 69 6e 74 20 74 6f 20 62 65 20 61 20   varint to be a 
2a000 73 69 6e 67 6c 65 20 62 79 74 65 2e 20 20 54 68  single byte.  Th
2a010 65 79 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20  ey following.** 
2a020 6d 61 63 72 6f 73 20 68 61 6e 64 6c 65 20 74 68  macros handle th
2a030 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 69  e common case wi
2a040 74 68 6f 75 74 20 61 20 70 72 6f 63 65 64 75 72  thout a procedur
2a050 65 20 63 61 6c 6c 2c 20 62 75 74 20 74 68 65 6e  e call, but then
2a060 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 70 72 6f   call.** the pro
2a070 63 65 64 75 72 65 20 66 6f 72 20 6c 61 72 67 65  cedure for large
2a080 72 20 76 61 72 69 6e 74 73 2e 0a 2a 2f 0a 23 64  r varints..*/.#d
2a090 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74 33  efine getVarint3
2a0a0 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29  2(A,B)  \.  (u8)
2a0b0 28 28 2a 28 41 29 3c 28 75 38 29 30 78 38 30 29  ((*(A)<(u8)0x80)
2a0c0 3f 28 28 42 29 3d 28 75 33 32 29 2a 28 41 29 29  ?((B)=(u32)*(A))
2a0d0 2c 31 3a 73 71 6c 69 74 65 33 47 65 74 56 61 72  ,1:sqlite3GetVar
2a0e0 69 6e 74 33 32 28 28 41 29 2c 28 75 33 32 20 2a  int32((A),(u32 *
2a0f0 29 26 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20  )&(B))).#define 
2a100 70 75 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29  putVarint32(A,B)
2a110 20 20 5c 0a 20 20 28 75 38 29 28 28 28 75 33 32    \.  (u8)(((u32
2a120 29 28 42 29 3c 28 75 33 32 29 30 78 38 30 29 3f  )(B)<(u32)0x80)?
2a130 28 2a 28 41 29 3d 28 75 6e 73 69 67 6e 65 64 20  (*(A)=(unsigned 
2a140 63 68 61 72 29 28 42 29 29 2c 31 3a 5c 0a 20 20  char)(B)),1:\.  
2a150 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74  sqlite3PutVarint
2a160 28 28 41 29 2c 28 42 29 29 29 0a 23 64 65 66 69  ((A),(B))).#defi
2a170 6e 65 20 67 65 74 56 61 72 69 6e 74 20 20 20 20  ne getVarint    
2a180 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
2a190 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61 72 69  .#define putVari
2a1a0 6e 74 20 20 20 20 73 71 6c 69 74 65 33 50 75 74  nt    sqlite3Put
2a1b0 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63  Varint...const c
2a1c0 68 61 72 20 2a 73 71 6c 69 74 65 33 49 6e 64 65  har *sqlite3Inde
2a1d0 78 41 66 66 69 6e 69 74 79 53 74 72 28 73 71 6c  xAffinityStr(sql
2a1e0 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a  ite3*, Index*);.
2a1f0 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c  void sqlite3Tabl
2a200 65 41 66 66 69 6e 69 74 79 28 56 64 62 65 2a 2c  eAffinity(Vdbe*,
2a210 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 63   Table*, int);.c
2a220 68 61 72 20 73 71 6c 69 74 65 33 43 6f 6d 70 61  har sqlite3Compa
2a230 72 65 41 66 66 69 6e 69 74 79 28 45 78 70 72 20  reAffinity(Expr 
2a240 2a 70 45 78 70 72 2c 20 63 68 61 72 20 61 66 66  *pExpr, char aff
2a250 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  2);.int sqlite3I
2a260 6e 64 65 78 41 66 66 69 6e 69 74 79 4f 6b 28 45  ndexAffinityOk(E
2a270 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72  xpr *pExpr, char
2a280 20 69 64 78 5f 61 66 66 69 6e 69 74 79 29 3b 0a   idx_affinity);.
2a290 63 68 61 72 20 73 71 6c 69 74 65 33 54 61 62 6c  char sqlite3Tabl
2a2a0 65 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28  eColumnAffinity(
2a2b0 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 63 68 61  Table*,int);.cha
2a2c0 72 20 73 71 6c 69 74 65 33 45 78 70 72 41 66 66  r sqlite3ExprAff
2a2d0 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78 70  inity(Expr *pExp
2a2e0 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  r);.int sqlite3A
2a2f0 74 6f 69 36 34 28 63 6f 6e 73 74 20 63 68 61 72  toi64(const char
2a300 2a 2c 20 69 36 34 2a 2c 20 69 6e 74 2c 20 75 38  *, i64*, int, u8
2a310 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 65  );.int sqlite3De
2a320 63 4f 72 48 65 78 54 6f 49 36 34 28 63 6f 6e 73  cOrHexToI64(cons
2a330 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 29 3b 0a  t char*, i64*);.
2a340 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f  void sqlite3Erro
2a350 72 57 69 74 68 4d 73 67 28 73 71 6c 69 74 65 33  rWithMsg(sqlite3
2a360 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  *, int, const ch
2a370 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73  ar*,...);.void s
2a380 71 6c 69 74 65 33 45 72 72 6f 72 28 73 71 6c 69  qlite3Error(sqli
2a390 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  te3*,int);.void 
2a3a0 73 71 6c 69 74 65 33 53 79 73 74 65 6d 45 72 72  sqlite3SystemErr
2a3b0 6f 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29  or(sqlite3*,int)
2a3c0 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 48  ;.void *sqlite3H
2a3d0 65 78 54 6f 42 6c 6f 62 28 73 71 6c 69 74 65 33  exToBlob(sqlite3
2a3e0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  *, const char *z
2a3f0 2c 20 69 6e 74 20 6e 29 3b 0a 75 38 20 73 71 6c  , int n);.u8 sql
2a400 69 74 65 33 48 65 78 54 6f 49 6e 74 28 69 6e 74  ite3HexToInt(int
2a410 20 68 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   h);.int sqlite3
2a420 54 77 6f 50 61 72 74 4e 61 6d 65 28 50 61 72 73  TwoPartName(Pars
2a430 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f  e *, Token *, To
2a440 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29  ken *, Token **)
2a450 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  ;..#if defined(S
2a460 51 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e  QLITE_NEED_ERR_N
2a470 41 4d 45 29 0a 63 6f 6e 73 74 20 63 68 61 72 20  AME).const char 
2a480 2a 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28  *sqlite3ErrName(
2a490 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 63 6f  int);.#endif..co
2a4a0 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
2a4b0 33 45 72 72 53 74 72 28 69 6e 74 29 3b 0a 69 6e  3ErrStr(int);.in
2a4c0 74 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68  t sqlite3ReadSch
2a4d0 65 6d 61 28 50 61 72 73 65 20 2a 70 50 61 72 73  ema(Parse *pPars
2a4e0 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  e);.CollSeq *sql
2a4f0 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28  ite3FindCollSeq(
2a500 73 71 6c 69 74 65 33 2a 2c 75 38 20 65 6e 63 2c  sqlite3*,u8 enc,
2a510 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74   const char*,int
2a520 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
2a530 74 65 33 4c 6f 63 61 74 65 43 6f 6c 6c 53 65 71  te3LocateCollSeq
2a540 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
2a550 63 6f 6e 73 74 20 63 68 61 72 2a 7a 4e 61 6d 65  const char*zName
2a560 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
2a570 74 65 33 45 78 70 72 43 6f 6c 6c 53 65 71 28 50  te3ExprCollSeq(P
2a580 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78  arse *pParse, Ex
2a590 70 72 20 2a 70 45 78 70 72 29 3b 0a 45 78 70 72  pr *pExpr);.Expr
2a5a0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64 64   *sqlite3ExprAdd
2a5b0 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28 50 61 72  CollateToken(Par
2a5c0 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72  se *pParse, Expr
2a5d0 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c  *, const Token*,
2a5e0 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c   int);.Expr *sql
2a5f0 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c 61  ite3ExprAddColla
2a600 74 65 53 74 72 69 6e 67 28 50 61 72 73 65 2a 2c  teString(Parse*,
2a610 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  Expr*,const char
2a620 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
2a630 33 45 78 70 72 53 6b 69 70 43 6f 6c 6c 61 74 65  3ExprSkipCollate
2a640 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c  (Expr*);.int sql
2a650 69 74 65 33 43 68 65 63 6b 43 6f 6c 6c 53 65 71  ite3CheckCollSeq
2a660 28 50 61 72 73 65 20 2a 2c 20 43 6f 6c 6c 53 65  (Parse *, CollSe
2a670 71 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  q *);.int sqlite
2a680 33 43 68 65 63 6b 4f 62 6a 65 63 74 4e 61 6d 65  3CheckObjectName
2a690 28 50 61 72 73 65 20 2a 2c 20 63 6f 6e 73 74 20  (Parse *, const 
2a6a0 63 68 61 72 20 2a 29 3b 0a 76 6f 69 64 20 73 71  char *);.void sq
2a6b0 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61 6e  lite3VdbeSetChan
2a6c0 67 65 73 28 73 71 6c 69 74 65 33 20 2a 2c 20 69  ges(sqlite3 *, i
2a6d0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2a6e0 41 64 64 49 6e 74 36 34 28 69 36 34 2a 2c 69 36  AddInt64(i64*,i6
2a6f0 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  4);.int sqlite3S
2a700 75 62 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34  ubInt64(i64*,i64
2a710 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 75  );.int sqlite3Mu
2a720 6c 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29  lInt64(i64*,i64)
2a730 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 62 73  ;.int sqlite3Abs
2a740 49 6e 74 33 32 28 69 6e 74 29 3b 0a 23 69 66 64  Int32(int);.#ifd
2a750 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
2a760 5f 38 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69 64 20  _8_3_NAMES.void 
2a770 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69  sqlite3FileSuffi
2a780 78 33 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  x3(const char*, 
2a790 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  char*);.#else.# 
2a7a0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 69  define sqlite3Fi
2a7b0 6c 65 53 75 66 66 69 78 33 28 58 2c 59 29 0a 23  leSuffix3(X,Y).#
2a7c0 65 6e 64 69 66 0a 75 38 20 73 71 6c 69 74 65 33  endif.u8 sqlite3
2a7d0 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74  GetBoolean(const
2a7e0 20 63 68 61 72 20 2a 7a 2c 75 38 29 3b 0a 0a 63   char *z,u8);..c
2a7f0 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74  onst void *sqlit
2a800 65 33 56 61 6c 75 65 54 65 78 74 28 73 71 6c 69  e3ValueText(sqli
2a810 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b  te3_value*, u8);
2a820 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75  .int sqlite3Valu
2a830 65 42 79 74 65 73 28 73 71 6c 69 74 65 33 5f 76  eBytes(sqlite3_v
2a840 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 76 6f 69 64  alue*, u8);.void
2a850 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74   sqlite3ValueSet
2a860 53 74 72 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  Str(sqlite3_valu
2a870 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76  e*, int, const v
2a880 6f 69 64 20 2a 2c 75 38 2c 0a 20 20 20 20 20 20  oid *,u8,.      
2a890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a8a0 20 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29    void(*)(void*)
2a8b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
2a8c0 61 6c 75 65 53 65 74 4e 75 6c 6c 28 73 71 6c 69  alueSetNull(sqli
2a8d0 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 76 6f 69  te3_value*);.voi
2a8e0 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72  d sqlite3ValueFr
2a8f0 65 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ee(sqlite3_value
2a900 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75  *);.sqlite3_valu
2a910 65 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 4e  e *sqlite3ValueN
2a920 65 77 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 63  ew(sqlite3 *);.c
2a930 68 61 72 20 2a 73 71 6c 69 74 65 33 55 74 66 31  har *sqlite3Utf1
2a940 36 74 6f 38 28 73 71 6c 69 74 65 33 20 2a 2c 20  6to8(sqlite3 *, 
2a950 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74  const void*, int
2a960 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74  , u8);.int sqlit
2a970 65 33 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28  e3ValueFromExpr(
2a980 73 71 6c 69 74 65 33 20 2a 2c 20 45 78 70 72 20  sqlite3 *, Expr 
2a990 2a 2c 20 75 38 2c 20 75 38 2c 20 73 71 6c 69 74  *, u8, u8, sqlit
2a9a0 65 33 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f  e3_value **);.vo
2a9b0 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 41  id sqlite3ValueA
2a9c0 70 70 6c 79 41 66 66 69 6e 69 74 79 28 73 71 6c  pplyAffinity(sql
2a9d0 69 74 65 33 5f 76 61 6c 75 65 20 2a 2c 20 75 38  ite3_value *, u8
2a9e0 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65 66 20 53  , u8);.#ifndef S
2a9f0 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49  QLITE_AMALGAMATI
2aa00 4f 4e 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20  ON.extern const 
2aa10 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71  unsigned char sq
2aa20 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f 70 65  lite3OpcodePrope
2aa30 72 74 79 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f  rty[];.extern co
2aa40 6e 73 74 20 63 68 61 72 20 73 71 6c 69 74 65 33  nst char sqlite3
2aa50 53 74 72 42 49 4e 41 52 59 5b 5d 3b 0a 65 78 74  StrBINARY[];.ext
2aa60 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ern const unsign
2aa70 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 55  ed char sqlite3U
2aa80 70 70 65 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65  pperToLower[];.e
2aa90 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69  xtern const unsi
2aaa0 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65  gned char sqlite
2aab0 33 43 74 79 70 65 4d 61 70 5b 5d 3b 0a 65 78 74  3CtypeMap[];.ext
2aac0 65 72 6e 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20  ern const Token 
2aad0 73 71 6c 69 74 65 33 49 6e 74 54 6f 6b 65 6e 73  sqlite3IntTokens
2aae0 5b 5d 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49 54  [];.extern SQLIT
2aaf0 45 5f 57 53 44 20 73 74 72 75 63 74 20 53 71 6c  E_WSD struct Sql
2ab00 69 74 65 33 43 6f 6e 66 69 67 20 73 71 6c 69 74  ite3Config sqlit
2ab10 65 33 43 6f 6e 66 69 67 3b 0a 65 78 74 65 72 6e  e3Config;.extern
2ab20 20 46 75 6e 63 44 65 66 48 61 73 68 20 73 71 6c   FuncDefHash sql
2ab30 69 74 65 33 42 75 69 6c 74 69 6e 46 75 6e 63 74  ite3BuiltinFunct
2ab40 69 6f 6e 73 3b 0a 23 69 66 6e 64 65 66 20 53 51  ions;.#ifndef SQ
2ab50 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 65 78  LITE_OMIT_WSD.ex
2ab60 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33  tern int sqlite3
2ab70 50 65 6e 64 69 6e 67 42 79 74 65 3b 0a 23 65 6e  PendingByte;.#en
2ab80 64 69 66 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  dif.#endif.void 
2ab90 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d  sqlite3RootPageM
2aba0 6f 76 65 64 28 73 71 6c 69 74 65 33 2a 2c 20 69  oved(sqlite3*, i
2abb0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
2abc0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 69 6e 64  oid sqlite3Reind
2abd0 65 78 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  ex(Parse*, Token
2abe0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
2abf0 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46 75 6e   sqlite3AlterFun
2ac00 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f  ctions(void);.vo
2ac10 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 52  id sqlite3AlterR
2ac20 65 6e 61 6d 65 54 61 62 6c 65 28 50 61 72 73 65  enameTable(Parse
2ac30 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b  *, SrcList*, Tok
2ac40 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
2ac50 33 47 65 74 54 6f 6b 65 6e 28 63 6f 6e 73 74 20  3GetToken(const 
2ac60 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c  unsigned char *,
2ac70 20 69 6e 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71   int *);.void sq
2ac80 6c 69 74 65 33 4e 65 73 74 65 64 50 61 72 73 65  lite3NestedParse
2ac90 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
2aca0 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64  har*, ...);.void
2acb0 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72   sqlite3ExpirePr
2acc0 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73  eparedStatements
2acd0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20  (sqlite3*);.int 
2ace0 73 71 6c 69 74 65 33 43 6f 64 65 53 75 62 73 65  sqlite3CodeSubse
2acf0 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 45 78 70  lect(Parse*, Exp
2ad00 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  r *, int, int);.
2ad10 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65  void sqlite3Sele
2ad20 63 74 50 72 65 70 28 50 61 72 73 65 2a 2c 20 53  ctPrep(Parse*, S
2ad30 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74  elect*, NameCont
2ad40 65 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ext*);.void sqli
2ad50 74 65 33 53 65 6c 65 63 74 57 72 6f 6e 67 4e 75  te3SelectWrongNu
2ad60 6d 54 65 72 6d 73 45 72 72 6f 72 28 50 61 72 73  mTermsError(Pars
2ad70 65 20 2a 70 50 61 72 73 65 2c 20 53 65 6c 65 63  e *pParse, Selec
2ad80 74 20 2a 70 29 3b 0a 69 6e 74 20 73 71 6c 69 74  t *p);.int sqlit
2ad90 65 33 4d 61 74 63 68 53 70 61 6e 4e 61 6d 65 28  e3MatchSpanName(
2ada0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
2adb0 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
2adc0 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
2add0 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
2ade0 52 65 73 6f 6c 76 65 45 78 70 72 4e 61 6d 65 73  ResolveExprNames
2adf0 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45  (NameContext*, E
2ae00 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
2ae10 65 33 52 65 73 6f 6c 76 65 45 78 70 72 4c 69 73  e3ResolveExprLis
2ae20 74 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65  tNames(NameConte
2ae30 78 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  xt*, ExprList*);
2ae40 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
2ae50 6f 6c 76 65 53 65 6c 65 63 74 4e 61 6d 65 73 28  olveSelectNames(
2ae60 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c  Parse*, Select*,
2ae70 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a   NameContext*);.
2ae80 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f  void sqlite3Reso
2ae90 6c 76 65 53 65 6c 66 52 65 66 65 72 65 6e 63 65  lveSelfReference
2aea0 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69  (Parse*,Table*,i
2aeb0 6e 74 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73  nt,Expr*,ExprLis
2aec0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
2aed0 52 65 73 6f 6c 76 65 4f 72 64 65 72 47 72 6f 75  ResolveOrderGrou
2aee0 70 42 79 28 50 61 72 73 65 2a 2c 20 53 65 6c 65  pBy(Parse*, Sele
2aef0 63 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  ct*, ExprList*, 
2af00 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
2af10 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e  id sqlite3Column
2af20 44 65 66 61 75 6c 74 28 56 64 62 65 20 2a 2c 20  Default(Vdbe *, 
2af30 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e  Table *, int, in
2af40 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2af50 41 6c 74 65 72 46 69 6e 69 73 68 41 64 64 43 6f  AlterFinishAddCo
2af60 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 54 6f  lumn(Parse *, To
2af70 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ken *);.void sql
2af80 69 74 65 33 41 6c 74 65 72 42 65 67 69 6e 41 64  ite3AlterBeginAd
2af90 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c  dColumn(Parse *,
2afa0 20 53 72 63 4c 69 73 74 20 2a 29 3b 0a 43 6f 6c   SrcList *);.Col
2afb0 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 47 65 74  lSeq *sqlite3Get
2afc0 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 2a 2c 20  CollSeq(Parse*, 
2afd0 75 38 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c 20 63  u8, CollSeq *, c
2afe0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61  onst char*);.cha
2aff0 72 20 73 71 6c 69 74 65 33 41 66 66 69 6e 69 74  r sqlite3Affinit
2b000 79 54 79 70 65 28 63 6f 6e 73 74 20 63 68 61 72  yType(const char
2b010 2a 2c 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71  *, u8*);.void sq
2b020 6c 69 74 65 33 41 6e 61 6c 79 7a 65 28 50 61 72  lite3Analyze(Par
2b030 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  se*, Token*, Tok
2b040 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
2b050 33 49 6e 76 6f 6b 65 42 75 73 79 48 61 6e 64 6c  3InvokeBusyHandl
2b060 65 72 28 42 75 73 79 48 61 6e 64 6c 65 72 2a 29  er(BusyHandler*)
2b070 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e  ;.int sqlite3Fin
2b080 64 44 62 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f  dDb(sqlite3*, To
2b090 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
2b0a0 65 33 46 69 6e 64 44 62 4e 61 6d 65 28 73 71 6c  e3FindDbName(sql
2b0b0 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68  ite3 *, const ch
2b0c0 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ar *);.int sqlit
2b0d0 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 73  e3AnalysisLoad(s
2b0e0 71 6c 69 74 65 33 2a 2c 69 6e 74 20 69 44 42 29  qlite3*,int iDB)
2b0f0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
2b100 6c 65 74 65 49 6e 64 65 78 53 61 6d 70 6c 65 73  leteIndexSamples
2b110 28 73 71 6c 69 74 65 33 2a 2c 49 6e 64 65 78 2a  (sqlite3*,Index*
2b120 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
2b130 65 66 61 75 6c 74 52 6f 77 45 73 74 28 49 6e 64  efaultRowEst(Ind
2b140 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ex*);.void sqlit
2b150 65 33 52 65 67 69 73 74 65 72 4c 69 6b 65 46 75  e3RegisterLikeFu
2b160 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a  nctions(sqlite3*
2b170 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
2b180 74 65 33 49 73 4c 69 6b 65 46 75 6e 63 74 69 6f  te3IsLikeFunctio
2b190 6e 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a  n(sqlite3*,Expr*
2b1a0 2c 69 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f  ,int*,char*);.vo
2b1b0 69 64 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61  id sqlite3Schema
2b1c0 43 6c 65 61 72 28 76 6f 69 64 20 2a 29 3b 0a 53  Clear(void *);.S
2b1d0 63 68 65 6d 61 20 2a 73 71 6c 69 74 65 33 53 63  chema *sqlite3Sc
2b1e0 68 65 6d 61 47 65 74 28 73 71 6c 69 74 65 33 20  hemaGet(sqlite3 
2b1f0 2a 2c 20 42 74 72 65 65 20 2a 29 3b 0a 69 6e 74  *, Btree *);.int
2b200 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 54 6f   sqlite3SchemaTo
2b210 49 6e 64 65 78 28 73 71 6c 69 74 65 33 20 2a 64  Index(sqlite3 *d
2b220 62 2c 20 53 63 68 65 6d 61 20 2a 29 3b 0a 4b 65  b, Schema *);.Ke
2b230 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65  yInfo *sqlite3Ke
2b240 79 49 6e 66 6f 41 6c 6c 6f 63 28 73 71 6c 69 74  yInfoAlloc(sqlit
2b250 65 33 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f  e3*,int,int);.vo
2b260 69 64 20 73 71 6c 69 74 65 33 4b 65 79 49 6e 66  id sqlite3KeyInf
2b270 6f 55 6e 72 65 66 28 4b 65 79 49 6e 66 6f 2a 29  oUnref(KeyInfo*)
2b280 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74  ;.KeyInfo *sqlit
2b290 65 33 4b 65 79 49 6e 66 6f 52 65 66 28 4b 65 79  e3KeyInfoRef(Key
2b2a0 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20  Info*);.KeyInfo 
2b2b0 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 4f  *sqlite3KeyInfoO
2b2c0 66 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 49  fIndex(Parse*, I
2b2d0 6e 64 65 78 2a 29 3b 0a 23 69 66 64 65 66 20 53  ndex*);.#ifdef S
2b2e0 51 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e 74 20  QLITE_DEBUG.int 
2b2f0 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 49 73  sqlite3KeyInfoIs
2b300 57 72 69 74 65 61 62 6c 65 28 4b 65 79 49 6e 66  Writeable(KeyInf
2b310 6f 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20  o*);.#endif.int 
2b320 73 71 6c 69 74 65 33 43 72 65 61 74 65 46 75 6e  sqlite3CreateFun
2b330 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e  c(sqlite3 *, con
2b340 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20  st char *, int, 
2b350 69 6e 74 2c 20 76 6f 69 64 20 2a 2c 0a 20 20 76  int, void *,.  v
2b360 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f  oid (*)(sqlite3_
2b370 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
2b380 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a  ite3_value **),.
2b390 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74    void (*)(sqlit
2b3a0 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
2b3b0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
2b3c0 29 2c 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69  ), void (*)(sqli
2b3d0 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20  te3_context*),. 
2b3e0 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
2b3f0 2a 70 44 65 73 74 72 75 63 74 6f 72 0a 29 3b 0a  *pDestructor.);.
2b400 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 6f 6d 46  void sqlite3OomF
2b410 61 75 6c 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ault(sqlite3*);.
2b420 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 6f 6d 43  void sqlite3OomC
2b430 6c 65 61 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a  lear(sqlite3*);.
2b440 69 6e 74 20 73 71 6c 69 74 65 33 41 70 69 45 78  int sqlite3ApiEx
2b450 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  it(sqlite3 *db, 
2b460 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2b470 33 4f 70 65 6e 54 65 6d 70 44 61 74 61 62 61 73  3OpenTempDatabas
2b480 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a 76 6f 69  e(Parse *);..voi
2b490 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75  d sqlite3StrAccu
2b4a0 6d 49 6e 69 74 28 53 74 72 41 63 63 75 6d 2a 2c  mInit(StrAccum*,
2b4b0 20 73 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a   sqlite3*, char*
2b4c0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
2b4d0 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75  d sqlite3StrAccu
2b4e0 6d 41 70 70 65 6e 64 28 53 74 72 41 63 63 75 6d  mAppend(StrAccum
2b4f0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  *,const char*,in
2b500 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2b510 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64 41 6c  StrAccumAppendAl
2b520 6c 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73  l(StrAccum*,cons
2b530 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
2b540 71 6c 69 74 65 33 41 70 70 65 6e 64 43 68 61 72  qlite3AppendChar
2b550 28 53 74 72 41 63 63 75 6d 2a 2c 69 6e 74 2c 63  (StrAccum*,int,c
2b560 68 61 72 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  har);.char *sqli
2b570 74 65 33 53 74 72 41 63 63 75 6d 46 69 6e 69 73  te3StrAccumFinis
2b580 68 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f  h(StrAccum*);.vo
2b590 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63  id sqlite3StrAcc
2b5a0 75 6d 52 65 73 65 74 28 53 74 72 41 63 63 75 6d  umReset(StrAccum
2b5b0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2b5c0 53 65 6c 65 63 74 44 65 73 74 49 6e 69 74 28 53  SelectDestInit(S
2b5d0 65 6c 65 63 74 44 65 73 74 2a 2c 69 6e 74 2c 69  electDest*,int,i
2b5e0 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  nt);.Expr *sqlit
2b5f0 65 33 43 72 65 61 74 65 43 6f 6c 75 6d 6e 45 78  e3CreateColumnEx
2b600 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 53 72  pr(sqlite3 *, Sr
2b610 63 4c 69 73 74 20 2a 2c 20 69 6e 74 2c 20 69 6e  cList *, int, in
2b620 74 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  t);..void sqlite
2b630 33 42 61 63 6b 75 70 52 65 73 74 61 72 74 28 73  3BackupRestart(s
2b640 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 29  qlite3_backup *)
2b650 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61  ;.void sqlite3Ba
2b660 63 6b 75 70 55 70 64 61 74 65 28 73 71 6c 69 74  ckupUpdate(sqlit
2b670 65 33 5f 62 61 63 6b 75 70 20 2a 2c 20 50 67 6e  e3_backup *, Pgn
2b680 6f 2c 20 63 6f 6e 73 74 20 75 38 20 2a 29 3b 0a  o, const u8 *);.
2b690 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2b6a0 4f 4d 49 54 5f 53 55 42 51 55 45 52 59 0a 69 6e  OMIT_SUBQUERY.in
2b6b0 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65  t sqlite3ExprChe
2b6c0 63 6b 49 4e 28 50 61 72 73 65 2a 2c 20 45 78 70  ckIN(Parse*, Exp
2b6d0 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  r*);.#else.# def
2b6e0 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72 43  ine sqlite3ExprC
2b6f0 68 65 63 6b 49 4e 28 78 2c 79 29 20 53 51 4c 49  heckIN(x,y) SQLI
2b700 54 45 5f 4f 4b 0a 23 65 6e 64 69 66 0a 0a 23 69  TE_OK.#endif..#i
2b710 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
2b720 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
2b730 34 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e  4.void sqlite3An
2b740 61 6c 79 7a 65 46 75 6e 63 74 69 6f 6e 73 28 76  alyzeFunctions(v
2b750 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  oid);.int sqlite
2b760 33 53 74 61 74 34 50 72 6f 62 65 53 65 74 56 61  3Stat4ProbeSetVa
2b770 6c 75 65 28 0a 20 20 20 20 50 61 72 73 65 2a 2c  lue(.    Parse*,
2b780 49 6e 64 65 78 2a 2c 55 6e 70 61 63 6b 65 64 52  Index*,UnpackedR
2b790 65 63 6f 72 64 2a 2a 2c 45 78 70 72 2a 2c 69 6e  ecord**,Expr*,in
2b7a0 74 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 69 6e 74  t,int,int*);.int
2b7b0 20 73 71 6c 69 74 65 33 53 74 61 74 34 56 61 6c   sqlite3Stat4Val
2b7c0 75 65 46 72 6f 6d 45 78 70 72 28 50 61 72 73 65  ueFromExpr(Parse
2b7d0 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c 20 73 71  *, Expr*, u8, sq
2b7e0 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a  lite3_value**);.
2b7f0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74  void sqlite3Stat
2b800 34 50 72 6f 62 65 46 72 65 65 28 55 6e 70 61 63  4ProbeFree(Unpac
2b810 6b 65 64 52 65 63 6f 72 64 2a 29 3b 0a 69 6e 74  kedRecord*);.int
2b820 20 73 71 6c 69 74 65 33 53 74 61 74 34 43 6f 6c   sqlite3Stat4Col
2b830 75 6d 6e 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f  umn(sqlite3*, co
2b840 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20  nst void*, int, 
2b850 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  int, sqlite3_val
2b860 75 65 2a 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69  ue**);.char sqli
2b870 74 65 33 49 6e 64 65 78 43 6f 6c 75 6d 6e 41 66  te3IndexColumnAf
2b880 66 69 6e 69 74 79 28 73 71 6c 69 74 65 33 2a 2c  finity(sqlite3*,
2b890 20 49 6e 64 65 78 2a 2c 20 69 6e 74 29 3b 0a 23   Index*, int);.#
2b8a0 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
2b8b0 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68   interface to th
2b8c0 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61 74 65  e LEMON-generate
2b8d0 64 20 70 61 72 73 65 72 0a 2a 2f 0a 23 69 66 6e  d parser.*/.#ifn
2b8e0 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47  def SQLITE_AMALG
2b8f0 41 4d 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20 2a  AMATION.  void *
2b900 73 71 6c 69 74 65 33 50 61 72 73 65 72 41 6c 6c  sqlite3ParserAll
2b910 6f 63 28 76 6f 69 64 2a 28 2a 29 28 75 36 34 29  oc(void*(*)(u64)
2b920 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2b930 33 50 61 72 73 65 72 46 72 65 65 28 76 6f 69 64  3ParserFree(void
2b940 2a 2c 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a  *, void(*)(void*
2b950 29 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  ));.#endif.void 
2b960 73 71 6c 69 74 65 33 50 61 72 73 65 72 28 76 6f  sqlite3Parser(vo
2b970 69 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2c  id*, int, Token,
2b980 20 50 61 72 73 65 2a 29 3b 0a 23 69 66 64 65 66   Parse*);.#ifdef
2b990 20 59 59 54 52 41 43 4b 4d 41 58 53 54 41 43 4b   YYTRACKMAXSTACK
2b9a0 44 45 50 54 48 0a 20 20 69 6e 74 20 73 71 6c 69  DEPTH.  int sqli
2b9b0 74 65 33 50 61 72 73 65 72 53 74 61 63 6b 50 65  te3ParserStackPe
2b9c0 61 6b 28 76 6f 69 64 2a 29 3b 0a 23 65 6e 64 69  ak(void*);.#endi
2b9d0 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  f..void sqlite3A
2b9e0 75 74 6f 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e  utoLoadExtension
2b9f0 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 69 66  s(sqlite3*);.#if
2ba00 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2ba10 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a  _LOAD_EXTENSION.
2ba20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c    void sqlite3Cl
2ba30 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 73 71  oseExtensions(sq
2ba40 6c 69 74 65 33 2a 29 3b 0a 23 65 6c 73 65 0a 23  lite3*);.#else.#
2ba50 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43   define sqlite3C
2ba60 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 58  loseExtensions(X
2ba70 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  ).#endif..#ifnde
2ba80 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  f SQLITE_OMIT_SH
2ba90 41 52 45 44 5f 43 41 43 48 45 0a 20 20 76 6f 69  ARED_CACHE.  voi
2baa0 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f  d sqlite3TableLo
2bab0 63 6b 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 2c  ck(Parse *, int,
2bac0 20 69 6e 74 2c 20 75 38 2c 20 63 6f 6e 73 74 20   int, u8, const 
2bad0 63 68 61 72 20 2a 29 3b 0a 23 65 6c 73 65 0a 20  char *);.#else. 
2bae0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2baf0 54 61 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c  TableLock(v,w,x,
2bb00 79 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  y,z).#endif..#if
2bb10 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
2bb20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66    int sqlite3Utf
2bb30 38 54 6f 38 28 75 6e 73 69 67 6e 65 64 20 63 68  8To8(unsigned ch
2bb40 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  ar*);.#endif..#i
2bb50 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
2bb60 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20  _VIRTUALTABLE.# 
2bb70 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2bb80 74 61 62 43 6c 65 61 72 28 59 29 0a 23 20 20 64  tabClear(Y).#  d
2bb90 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
2bba0 62 53 79 6e 63 28 58 2c 59 29 20 53 51 4c 49 54  bSync(X,Y) SQLIT
2bbb0 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73  E_OK.#  define s
2bbc0 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61  qlite3VtabRollba
2bbd0 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  ck(X).#  define 
2bbe0 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69  sqlite3VtabCommi
2bbf0 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73  t(X).#  define s
2bc00 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63  qlite3VtabInSync
2bc10 28 64 62 29 20 30 0a 23 20 20 64 65 66 69 6e 65  (db) 0.#  define
2bc20 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b   sqlite3VtabLock
2bc30 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (X).#  define sq
2bc40 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28  lite3VtabUnlock(
2bc50 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  X).#  define sql
2bc60 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69  ite3VtabUnlockLi
2bc70 73 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  st(X).#  define 
2bc80 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70  sqlite3VtabSavep
2bc90 6f 69 6e 74 28 58 2c 20 59 2c 20 5a 29 20 53 51  oint(X, Y, Z) SQ
2bca0 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e  LITE_OK.#  defin
2bcb0 65 20 73 71 6c 69 74 65 33 47 65 74 56 54 61 62  e sqlite3GetVTab
2bcc0 6c 65 28 58 2c 59 29 20 20 28 28 56 54 61 62 6c  le(X,Y)  ((VTabl
2bcd0 65 2a 29 30 29 0a 23 65 6c 73 65 0a 20 20 20 76  e*)0).#else.   v
2bce0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 43  oid sqlite3VtabC
2bcf0 6c 65 61 72 28 73 71 6c 69 74 65 33 20 2a 64 62  lear(sqlite3 *db
2bd00 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20 76 6f  , Table*);.   vo
2bd10 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 44 69  id sqlite3VtabDi
2bd20 73 63 6f 6e 6e 65 63 74 28 73 71 6c 69 74 65 33  sconnect(sqlite3
2bd30 20 2a 64 62 2c 20 54 61 62 6c 65 20 2a 70 29 3b   *db, Table *p);
2bd40 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56  .   int sqlite3V
2bd50 74 61 62 53 79 6e 63 28 73 71 6c 69 74 65 33 20  tabSync(sqlite3 
2bd60 2a 64 62 2c 20 56 64 62 65 2a 29 3b 0a 20 20 20  *db, Vdbe*);.   
2bd70 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 52  int sqlite3VtabR
2bd80 6f 6c 6c 62 61 63 6b 28 73 71 6c 69 74 65 33 20  ollback(sqlite3 
2bd90 2a 64 62 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c  *db);.   int sql
2bda0 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 73  ite3VtabCommit(s
2bdb0 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20  qlite3 *db);.   
2bdc0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
2bdd0 4c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a  Lock(VTable *);.
2bde0 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
2bdf0 74 61 62 55 6e 6c 6f 63 6b 28 56 54 61 62 6c 65  tabUnlock(VTable
2be00 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c   *);.   void sql
2be10 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69  ite3VtabUnlockLi
2be20 73 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20  st(sqlite3*);.  
2be30 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62   int sqlite3Vtab
2be40 53 61 76 65 70 6f 69 6e 74 28 73 71 6c 69 74 65  Savepoint(sqlite
2be50 33 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  3 *, int, int);.
2be60 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
2be70 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28  tabImportErrmsg(
2be80 56 64 62 65 2a 2c 20 73 71 6c 69 74 65 33 5f 76  Vdbe*, sqlite3_v
2be90 74 61 62 2a 29 3b 0a 20 20 20 56 54 61 62 6c 65  tab*);.   VTable
2bea0 20 2a 73 71 6c 69 74 65 33 47 65 74 56 54 61 62   *sqlite3GetVTab
2beb0 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62  le(sqlite3*, Tab
2bec0 6c 65 2a 29 3b 0a 20 20 20 4d 6f 64 75 6c 65 20  le*);.   Module 
2bed0 2a 73 71 6c 69 74 65 33 56 74 61 62 43 72 65 61  *sqlite3VtabCrea
2bee0 74 65 4d 6f 64 75 6c 65 28 0a 20 20 20 20 20 73  teModule(.     s
2bef0 71 6c 69 74 65 33 2a 2c 0a 20 20 20 20 20 63 6f  qlite3*,.     co
2bf00 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20  nst char*,.     
2bf10 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
2bf20 64 75 6c 65 2a 2c 0a 20 20 20 20 20 76 6f 69 64  dule*,.     void
2bf30 2a 2c 0a 20 20 20 20 20 76 6f 69 64 28 2a 29 28  *,.     void(*)(
2bf40 76 6f 69 64 2a 29 0a 20 20 20 29 3b 0a 23 20 20  void*).   );.#  
2bf50 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
2bf60 61 62 49 6e 53 79 6e 63 28 64 62 29 20 28 28 64  abInSync(db) ((d
2bf70 62 29 2d 3e 6e 56 54 72 61 6e 73 3e 30 20 26 26  b)->nVTrans>0 &&
2bf80 20 28 64 62 29 2d 3e 61 56 54 72 61 6e 73 3d 3d   (db)->aVTrans==
2bf90 30 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71  0).#endif.int sq
2bfa0 6c 69 74 65 33 56 74 61 62 45 70 6f 6e 79 6d 6f  lite3VtabEponymo
2bfb0 75 73 54 61 62 6c 65 49 6e 69 74 28 50 61 72 73  usTableInit(Pars
2bfc0 65 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69  e*,Module*);.voi
2bfd0 64 20 73 71 6c 69 74 65 33 56 74 61 62 45 70 6f  d sqlite3VtabEpo
2bfe0 6e 79 6d 6f 75 73 54 61 62 6c 65 43 6c 65 61 72  nymousTableClear
2bff0 28 73 71 6c 69 74 65 33 2a 2c 4d 6f 64 75 6c 65  (sqlite3*,Module
2c000 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2c010 56 74 61 62 4d 61 6b 65 57 72 69 74 61 62 6c 65  VtabMakeWritable
2c020 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b  (Parse*,Table*);
2c030 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
2c040 62 42 65 67 69 6e 50 61 72 73 65 28 50 61 72 73  bBeginParse(Pars
2c050 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  e*, Token*, Toke
2c060 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29  n*, Token*, int)
2c070 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  ;.void sqlite3Vt
2c080 61 62 46 69 6e 69 73 68 50 61 72 73 65 28 50 61  abFinishParse(Pa
2c090 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  rse*, Token*);.v
2c0a0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 41  oid sqlite3VtabA
2c0b0 72 67 49 6e 69 74 28 50 61 72 73 65 2a 29 3b 0a  rgInit(Parse*);.
2c0c0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
2c0d0 41 72 67 45 78 74 65 6e 64 28 50 61 72 73 65 2a  ArgExtend(Parse*
2c0e0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
2c0f0 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72  qlite3VtabCallCr
2c100 65 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 69  eate(sqlite3*, i
2c110 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  nt, const char *
2c120 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 69 6e 74 20  , char **);.int 
2c130 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43  sqlite3VtabCallC
2c140 6f 6e 6e 65 63 74 28 50 61 72 73 65 2a 2c 20 54  onnect(Parse*, T
2c150 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  able*);.int sqli
2c160 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72  te3VtabCallDestr
2c170 6f 79 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  oy(sqlite3*, int
2c180 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b  , const char *);
2c190 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62  .int sqlite3Vtab
2c1a0 42 65 67 69 6e 28 73 71 6c 69 74 65 33 20 2a 2c  Begin(sqlite3 *,
2c1b0 20 56 54 61 62 6c 65 20 2a 29 3b 0a 46 75 6e 63   VTable *);.Func
2c1c0 44 65 66 20 2a 73 71 6c 69 74 65 33 56 74 61 62  Def *sqlite3Vtab
2c1d0 4f 76 65 72 6c 6f 61 64 46 75 6e 63 74 69 6f 6e  OverloadFunction
2c1e0 28 73 71 6c 69 74 65 33 20 2a 2c 46 75 6e 63 44  (sqlite3 *,FuncD
2c1f0 65 66 2a 2c 20 69 6e 74 20 6e 41 72 67 2c 20 45  ef*, int nArg, E
2c200 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
2c210 74 65 33 49 6e 76 61 6c 69 64 46 75 6e 63 74 69  te3InvalidFuncti
2c220 6f 6e 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  on(sqlite3_conte
2c230 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f  xt*,int,sqlite3_
2c240 76 61 6c 75 65 2a 2a 29 3b 0a 73 71 6c 69 74 65  value**);.sqlite
2c250 33 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33 53  3_int64 sqlite3S
2c260 74 6d 74 43 75 72 72 65 6e 74 54 69 6d 65 28 73  tmtCurrentTime(s
2c270 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29  qlite3_context*)
2c280 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62  ;.int sqlite3Vdb
2c290 65 50 61 72 61 6d 65 74 65 72 49 6e 64 65 78 28  eParameterIndex(
2c2a0 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  Vdbe*, const cha
2c2b0 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  r*, int);.int sq
2c2c0 6c 69 74 65 33 54 72 61 6e 73 66 65 72 42 69 6e  lite3TransferBin
2c2d0 64 69 6e 67 73 28 73 71 6c 69 74 65 33 5f 73 74  dings(sqlite3_st
2c2e0 6d 74 20 2a 2c 20 73 71 6c 69 74 65 33 5f 73 74  mt *, sqlite3_st
2c2f0 6d 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  mt *);.void sqli
2c300 74 65 33 50 61 72 73 65 72 52 65 73 65 74 28 50  te3ParserReset(P
2c310 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  arse*);.int sqli
2c320 74 65 33 52 65 70 72 65 70 61 72 65 28 56 64 62  te3Reprepare(Vdb
2c330 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
2c340 33 45 78 70 72 4c 69 73 74 43 68 65 63 6b 4c 65  3ExprListCheckLe
2c350 6e 67 74 68 28 50 61 72 73 65 2a 2c 20 45 78 70  ngth(Parse*, Exp
2c360 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68  rList*, const ch
2c370 61 72 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  ar*);.CollSeq *s
2c380 71 6c 69 74 65 33 42 69 6e 61 72 79 43 6f 6d 70  qlite3BinaryComp
2c390 61 72 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65  areCollSeq(Parse
2c3a0 20 2a 2c 20 45 78 70 72 20 2a 2c 20 45 78 70 72   *, Expr *, Expr
2c3b0 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
2c3c0 54 65 6d 70 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e  TempInMemory(con
2c3d0 73 74 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 6f  st sqlite3*);.co
2c3e0 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
2c3f0 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65  3JournalModename
2c400 28 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53  (int);.#ifndef S
2c410 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20  QLITE_OMIT_WAL. 
2c420 20 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63   int sqlite3Chec
2c430 6b 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 2a 2c  kpoint(sqlite3*,
2c440 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c   int, int, int*,
2c450 20 69 6e 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71   int*);.  int sq
2c460 6c 69 74 65 33 57 61 6c 44 65 66 61 75 6c 74 48  lite3WalDefaultH
2c470 6f 6f 6b 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65  ook(void*,sqlite
2c480 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69  3*,const char*,i
2c490 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 6e  nt);.#endif.#ifn
2c4a0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2c4b0 43 54 45 0a 20 20 57 69 74 68 20 2a 73 71 6c 69  CTE.  With *sqli
2c4c0 74 65 33 57 69 74 68 41 64 64 28 50 61 72 73 65  te3WithAdd(Parse
2c4d0 2a 2c 57 69 74 68 2a 2c 54 6f 6b 65 6e 2a 2c 45  *,With*,Token*,E
2c4e0 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a  xprList*,Select*
2c4f0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2c500 33 57 69 74 68 44 65 6c 65 74 65 28 73 71 6c 69  3WithDelete(sqli
2c510 74 65 33 2a 2c 57 69 74 68 2a 29 3b 0a 20 20 76  te3*,With*);.  v
2c520 6f 69 64 20 73 71 6c 69 74 65 33 57 69 74 68 50  oid sqlite3WithP
2c530 75 73 68 28 50 61 72 73 65 2a 2c 20 57 69 74 68  ush(Parse*, With
2c540 2a 2c 20 75 38 29 3b 0a 23 65 6c 73 65 0a 23 64  *, u8);.#else.#d
2c550 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74  efine sqlite3Wit
2c560 68 50 75 73 68 28 78 2c 79 2c 7a 29 0a 23 64 65  hPush(x,y,z).#de
2c570 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68  fine sqlite3With
2c580 44 65 6c 65 74 65 28 78 2c 79 29 0a 23 65 6e 64  Delete(x,y).#end
2c590 69 66 0a 0a 2f 2a 20 44 65 63 6c 61 72 61 74 69  if../* Declarati
2c5a0 6f 6e 73 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e  ons for function
2c5b0 73 20 69 6e 20 66 6b 65 79 2e 63 2e 20 41 6c 6c  s in fkey.c. All
2c5c0 20 6f 66 20 74 68 65 73 65 20 61 72 65 20 72 65   of these are re
2c5d0 70 6c 61 63 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d  placed by.** no-
2c5e0 6f 70 20 6d 61 63 72 6f 73 20 69 66 20 4f 4d 49  op macros if OMI
2c5f0 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73  T_FOREIGN_KEY is
2c600 20 64 65 66 69 6e 65 64 2e 20 49 6e 20 74 68 69   defined. In thi
2c610 73 20 63 61 73 65 20 6e 6f 20 66 6f 72 65 69 67  s case no foreig
2c620 6e 0a 2a 2a 20 6b 65 79 20 66 75 6e 63 74 69 6f  n.** key functio
2c630 6e 61 6c 69 74 79 20 69 73 20 61 76 61 69 6c 61  nality is availa
2c640 62 6c 65 2e 20 49 66 20 4f 4d 49 54 5f 54 52 49  ble. If OMIT_TRI
2c650 47 47 45 52 20 69 73 20 64 65 66 69 6e 65 64 20  GGER is defined 
2c660 62 75 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45  but.** OMIT_FORE
2c670 49 47 4e 5f 4b 45 59 20 69 73 20 6e 6f 74 2c 20  IGN_KEY is not, 
2c680 6f 6e 6c 79 20 73 6f 6d 65 20 6f 66 20 74 68 65  only some of the
2c690 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 6e   functions are n
2c6a0 6f 2d 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20 74 68  o-oped. In.** th
2c6b0 69 73 20 63 61 73 65 20 66 6f 72 65 69 67 6e 20  is case foreign 
2c6c0 6b 65 79 73 20 61 72 65 20 70 61 72 73 65 64 2c  keys are parsed,
2c6d0 20 62 75 74 20 6e 6f 20 6f 74 68 65 72 20 66 75   but no other fu
2c6e0 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 0a 2a  nctionality is.*
2c6f0 2a 20 70 72 6f 76 69 64 65 64 20 28 65 6e 66 6f  * provided (enfo
2c700 72 63 65 6d 65 6e 74 20 6f 66 20 46 4b 20 63 6f  rcement of FK co
2c710 6e 73 74 72 61 69 6e 74 73 20 72 65 71 75 69 72  nstraints requir
2c720 65 73 20 74 68 65 20 74 72 69 67 67 65 72 73 20  es the triggers 
2c730 73 75 62 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a  sub-system)..*/.
2c740 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
2c750 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
2c760 5f 4b 45 59 29 20 26 26 20 21 64 65 66 69 6e 65  _KEY) && !define
2c770 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  d(SQLITE_OMIT_TR
2c780 49 47 47 45 52 29 0a 20 20 76 6f 69 64 20 73 71  IGGER).  void sq
2c790 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 50 61 72  lite3FkCheck(Par
2c7a0 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
2c7b0 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74  , int, int*, int
2c7c0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2c7d0 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 50 61 72  3FkDropTable(Par
2c7e0 73 65 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20  se*, SrcList *, 
2c7f0 54 61 62 6c 65 2a 29 3b 0a 20 20 76 6f 69 64 20  Table*);.  void 
2c800 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73  sqlite3FkActions
2c810 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
2c820 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c   ExprList*, int,
2c830 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 69   int*, int);.  i
2c840 6e 74 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75  nt sqlite3FkRequ
2c850 69 72 65 64 28 50 61 72 73 65 2a 2c 20 54 61 62  ired(Parse*, Tab
2c860 6c 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b  le*, int*, int);
2c870 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33 46 6b  .  u32 sqlite3Fk
2c880 4f 6c 64 6d 61 73 6b 28 50 61 72 73 65 2a 2c 20  Oldmask(Parse*, 
2c890 54 61 62 6c 65 2a 29 3b 0a 20 20 46 4b 65 79 20  Table*);.  FKey 
2c8a0 2a 73 71 6c 69 74 65 33 46 6b 52 65 66 65 72 65  *sqlite3FkRefere
2c8b0 6e 63 65 73 28 54 61 62 6c 65 20 2a 29 3b 0a 23  nces(Table *);.#
2c8c0 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
2c8d0 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28  qlite3FkActions(
2c8e0 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23  a,b,c,d,e,f).  #
2c8f0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
2c900 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 2c  Check(a,b,c,d,e,
2c910 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  f).  #define sql
2c920 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28  ite3FkDropTable(
2c930 61 2c 62 2c 63 29 0a 20 20 23 64 65 66 69 6e 65  a,b,c).  #define
2c940 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73   sqlite3FkOldmas
2c950 6b 28 61 2c 62 29 20 20 20 20 20 20 20 20 20 30  k(a,b)         0
2c960 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
2c970 65 33 46 6b 52 65 71 75 69 72 65 64 28 61 2c 62  e3FkRequired(a,b
2c980 2c 63 2c 64 29 20 20 20 20 30 0a 20 20 23 64 65  ,c,d)    0.  #de
2c990 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65  fine sqlite3FkRe
2c9a0 66 65 72 65 6e 63 65 73 28 61 29 20 20 20 20 20  ferences(a)     
2c9b0 20 20 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e     0.#endif.#ifn
2c9c0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2c9d0 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20 76 6f  FOREIGN_KEY.  vo
2c9e0 69 64 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65  id sqlite3FkDele
2c9f0 74 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 54 61  te(sqlite3 *, Ta
2ca00 62 6c 65 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  ble*);.  int sql
2ca10 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65  ite3FkLocateInde
2ca20 78 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c  x(Parse*,Table*,
2ca30 46 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69 6e  FKey*,Index**,in
2ca40 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  t**);.#else.  #d
2ca50 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44  efine sqlite3FkD
2ca60 65 6c 65 74 65 28 61 2c 62 29 0a 20 20 23 64 65  elete(a,b).  #de
2ca70 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4c 6f  fine sqlite3FkLo
2ca80 63 61 74 65 49 6e 64 65 78 28 61 2c 62 2c 63 2c  cateIndex(a,b,c,
2ca90 64 2c 65 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a  d,e).#endif.../*
2caa0 0a 2a 2a 20 41 76 61 69 6c 61 62 6c 65 20 66 61  .** Available fa
2cab0 75 6c 74 20 69 6e 6a 65 63 74 6f 72 73 2e 20 20  ult injectors.  
2cac0 53 68 6f 75 6c 64 20 62 65 20 6e 75 6d 62 65 72  Should be number
2cad0 65 64 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  ed beginning wit
2cae0 68 20 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  h 0..*/.#define 
2caf0 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45  SQLITE_FAULTINJE
2cb00 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20 20 20  CTOR_MALLOC     
2cb10 30 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  0.#define SQLITE
2cb20 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 43  _FAULTINJECTOR_C
2cb30 4f 55 4e 54 20 20 20 20 20 20 31 0a 0a 2f 2a 0a  OUNT      1../*.
2cb40 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65  ** The interface
2cb50 20 74 6f 20 74 68 65 20 63 6f 64 65 20 69 6e 20   to the code in 
2cb60 66 61 75 6c 74 2e 63 20 75 73 65 64 20 66 6f 72  fault.c used for
2cb70 20 69 64 65 6e 74 69 66 79 69 6e 67 20 22 62 65   identifying "be
2cb80 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20  nign".** malloc 
2cb90 66 61 69 6c 75 72 65 73 2e 20 54 68 69 73 20 69  failures. This i
2cba0 73 20 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20 69  s only present i
2cbb0 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41  f SQLITE_UNTESTA
2cbc0 42 4c 45 0a 2a 2a 20 69 73 20 6e 6f 74 20 64 65  BLE.** is not de
2cbd0 66 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65  fined..*/.#ifnde
2cbe0 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41  f SQLITE_UNTESTA
2cbf0 42 4c 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  BLE.  void sqlit
2cc00 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c  e3BeginBenignMal
2cc10 6c 6f 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f 69  loc(void);.  voi
2cc20 64 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69  d sqlite3EndBeni
2cc30 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a  gnMalloc(void);.
2cc40 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
2cc50 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69  sqlite3BeginBeni
2cc60 67 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64 65  gnMalloc().  #de
2cc70 66 69 6e 65 20 73 71 6c 69 74 65 33 45 6e 64 42  fine sqlite3EndB
2cc80 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65  enignMalloc().#e
2cc90 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  ndif../*.** Allo
2cca0 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65  wed return value
2ccb0 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 46 69  s from sqlite3Fi
2ccc0 6e 64 49 6e 49 6e 64 65 78 28 29 0a 2a 2f 0a 23  ndInIndex().*/.#
2ccd0 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
2cce0 52 4f 57 49 44 20 20 20 20 20 20 20 20 31 20 20  ROWID        1  
2ccf0 20 2f 2a 20 53 65 61 72 63 68 20 74 68 65 20 72   /* Search the r
2cd00 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c  owid of the tabl
2cd10 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  e */.#define IN_
2cd20 49 4e 44 45 58 5f 45 50 48 20 20 20 20 20 20 20  INDEX_EPH       
2cd30 20 20 20 32 20 20 20 2f 2a 20 53 65 61 72 63 68     2   /* Search
2cd40 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 62 2d   an ephemeral b-
2cd50 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tree */.#define 
2cd60 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 41  IN_INDEX_INDEX_A
2cd70 53 43 20 20 20 20 33 20 20 20 2f 2a 20 45 78 69  SC    3   /* Exi
2cd80 73 74 69 6e 67 20 69 6e 64 65 78 20 41 53 43 45  sting index ASCE
2cd90 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65  NDING */.#define
2cda0 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f   IN_INDEX_INDEX_
2cdb0 44 45 53 43 20 20 20 34 20 20 20 2f 2a 20 45 78  DESC   4   /* Ex
2cdc0 69 73 74 69 6e 67 20 69 6e 64 65 78 20 44 45 53  isting index DES
2cdd0 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69  CENDING */.#defi
2cde0 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50  ne IN_INDEX_NOOP
2cdf0 20 20 20 20 20 20 20 20 20 35 20 20 20 2f 2a 20           5   /* 
2ce00 4e 6f 20 74 61 62 6c 65 20 61 76 61 69 6c 61 62  No table availab
2ce10 6c 65 2e 20 55 73 65 20 63 6f 6d 70 61 72 69 73  le. Use comparis
2ce20 6f 6e 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c 6c  ons */./*.** All
2ce30 6f 77 65 64 20 66 6c 61 67 73 20 66 6f 72 20 74  owed flags for t
2ce40 68 65 20 33 72 64 20 70 61 72 61 6d 65 74 65 72  he 3rd parameter
2ce50 20 74 6f 20 73 71 6c 69 74 65 33 46 69 6e 64 49   to sqlite3FindI
2ce60 6e 49 6e 64 65 78 28 29 2e 0a 2a 2f 0a 23 64 65  nIndex()..*/.#de
2ce70 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f  fine IN_INDEX_NO
2ce80 4f 50 5f 4f 4b 20 20 20 20 20 30 78 30 30 30 31  OP_OK     0x0001
2ce90 20 20 2f 2a 20 4f 4b 20 74 6f 20 72 65 74 75 72    /* OK to retur
2cea0 6e 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20  n IN_INDEX_NOOP 
2ceb0 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
2cec0 44 45 58 5f 4d 45 4d 42 45 52 53 48 49 50 20 20  DEX_MEMBERSHIP  
2ced0 30 78 30 30 30 32 20 20 2f 2a 20 49 4e 20 6f 70  0x0002  /* IN op
2cee0 65 72 61 74 6f 72 20 75 73 65 64 20 66 6f 72 20  erator used for 
2cef0 6d 65 6d 62 65 72 73 68 69 70 20 74 65 73 74 20  membership test 
2cf00 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
2cf10 44 45 58 5f 4c 4f 4f 50 20 20 20 20 20 20 20 20  DEX_LOOP        
2cf20 30 78 30 30 30 34 20 20 2f 2a 20 49 4e 20 6f 70  0x0004  /* IN op
2cf30 65 72 61 74 6f 72 20 75 73 65 64 20 61 73 20 61  erator used as a
2cf40 20 6c 6f 6f 70 20 2a 2f 0a 69 6e 74 20 73 71 6c   loop */.int sql
2cf50 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28  ite3FindInIndex(
2cf60 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c  Parse *, Expr *,
2cf70 20 75 33 32 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a   u32, int*, int*
2cf80 29 3b 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a  );..int sqlite3J
2cf90 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74  ournalOpen(sqlit
2cfa0 65 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20  e3_vfs *, const 
2cfb0 63 68 61 72 20 2a 2c 20 73 71 6c 69 74 65 33 5f  char *, sqlite3_
2cfc0 66 69 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  file *, int, int
2cfd0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  );.int sqlite3Jo
2cfe0 75 72 6e 61 6c 53 69 7a 65 28 73 71 6c 69 74 65  urnalSize(sqlite
2cff0 33 5f 76 66 73 20 2a 29 3b 0a 23 69 66 64 65 66  3_vfs *);.#ifdef
2d000 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41   SQLITE_ENABLE_A
2d010 54 4f 4d 49 43 5f 57 52 49 54 45 0a 20 20 69 6e  TOMIC_WRITE.  in
2d020 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  t sqlite3Journal
2d030 43 72 65 61 74 65 28 73 71 6c 69 74 65 33 5f 66  Create(sqlite3_f
2d040 69 6c 65 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  ile *);.#endif..
2d050 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e  int sqlite3Journ
2d060 61 6c 49 73 49 6e 4d 65 6d 6f 72 79 28 73 71 6c  alIsInMemory(sql
2d070 69 74 65 33 5f 66 69 6c 65 20 2a 70 29 3b 0a 76  ite3_file *p);.v
2d080 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f  oid sqlite3MemJo
2d090 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65  urnalOpen(sqlite
2d0a0 33 5f 66 69 6c 65 20 2a 29 3b 0a 0a 76 6f 69 64  3_file *);..void
2d0b0 20 73 71 6c 69 74 65 33 45 78 70 72 53 65 74 48   sqlite3ExprSetH
2d0c0 65 69 67 68 74 41 6e 64 46 6c 61 67 73 28 50 61  eightAndFlags(Pa
2d0d0 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70  rse *pParse, Exp
2d0e0 72 20 2a 70 29 3b 0a 23 69 66 20 53 51 4c 49 54  r *p);.#if SQLIT
2d0f0 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48  E_MAX_EXPR_DEPTH
2d100 3e 30 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  >0.  int sqlite3
2d110 53 65 6c 65 63 74 45 78 70 72 48 65 69 67 68 74  SelectExprHeight
2d120 28 53 65 6c 65 63 74 20 2a 29 3b 0a 20 20 69 6e  (Select *);.  in
2d130 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65  t sqlite3ExprChe
2d140 63 6b 48 65 69 67 68 74 28 50 61 72 73 65 2a 2c  ckHeight(Parse*,
2d150 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20 23   int);.#else.  #
2d160 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65  define sqlite3Se
2d170 6c 65 63 74 45 78 70 72 48 65 69 67 68 74 28 78  lectExprHeight(x
2d180 29 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ) 0.  #define sq
2d190 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b 48 65  lite3ExprCheckHe
2d1a0 69 67 68 74 28 78 2c 79 29 0a 23 65 6e 64 69 66  ight(x,y).#endif
2d1b0 0a 0a 75 33 32 20 73 71 6c 69 74 65 33 47 65 74  ..u32 sqlite3Get
2d1c0 34 62 79 74 65 28 63 6f 6e 73 74 20 75 38 2a 29  4byte(const u8*)
2d1d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 75  ;.void sqlite3Pu
2d1e0 74 34 62 79 74 65 28 75 38 2a 2c 20 75 33 32 29  t4byte(u8*, u32)
2d1f0 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
2d200 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e  _ENABLE_UNLOCK_N
2d210 4f 54 49 46 59 0a 20 20 76 6f 69 64 20 73 71 6c  OTIFY.  void sql
2d220 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c  ite3ConnectionBl
2d230 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 2c  ocked(sqlite3 *,
2d240 20 73 71 6c 69 74 65 33 20 2a 29 3b 0a 20 20 76   sqlite3 *);.  v
2d250 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  oid sqlite3Conne
2d260 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 73 71  ctionUnlocked(sq
2d270 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 76 6f  lite3 *db);.  vo
2d280 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  id sqlite3Connec
2d290 74 69 6f 6e 43 6c 6f 73 65 64 28 73 71 6c 69 74  tionClosed(sqlit
2d2a0 65 33 20 2a 64 62 29 3b 0a 23 65 6c 73 65 0a 20  e3 *db);.#else. 
2d2b0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2d2c0 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65  ConnectionBlocke
2d2d0 64 28 78 2c 79 29 0a 20 20 23 64 65 66 69 6e 65  d(x,y).  #define
2d2e0 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
2d2f0 6f 6e 55 6e 6c 6f 63 6b 65 64 28 78 29 0a 20 20  onUnlocked(x).  
2d300 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43  #define sqlite3C
2d310 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28  onnectionClosed(
2d320 78 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  x).#endif..#ifde
2d330 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
2d340 20 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72   void sqlite3Par
2d350 73 65 72 54 72 61 63 65 28 46 49 4c 45 2a 2c 20  serTrace(FILE*, 
2d360 63 68 61 72 20 2a 29 3b 0a 23 65 6e 64 69 66 0a  char *);.#endif.
2d370 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51  ./*.** If the SQ
2d380 4c 49 54 45 5f 45 4e 41 42 4c 45 20 49 4f 54 52  LITE_ENABLE IOTR
2d390 41 43 45 20 65 78 69 73 74 73 20 74 68 65 6e 20  ACE exists then 
2d3a0 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61  the global varia
2d3b0 62 6c 65 0a 2a 2a 20 73 71 6c 69 74 65 33 49 6f  ble.** sqlite3Io
2d3c0 54 72 61 63 65 20 69 73 20 61 20 70 6f 69 6e 74  Trace is a point
2d3d0 65 72 20 74 6f 20 61 20 70 72 69 6e 74 66 2d 6c  er to a printf-l
2d3e0 69 6b 65 20 72 6f 75 74 69 6e 65 20 75 73 65 64  ike routine used
2d3f0 20 74 6f 0a 2a 2a 20 70 72 69 6e 74 20 49 2f 4f   to.** print I/O
2d400 20 74 72 61 63 69 6e 67 20 6d 65 73 73 61 67 65   tracing message
2d410 73 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  s..*/.#ifdef SQL
2d420 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41  ITE_ENABLE_IOTRA
2d430 43 45 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52  CE.# define IOTR
2d440 41 43 45 28 41 29 20 20 69 66 28 20 73 71 6c 69  ACE(A)  if( sqli
2d450 74 65 33 49 6f 54 72 61 63 65 20 29 7b 20 73 71  te3IoTrace ){ sq
2d460 6c 69 74 65 33 49 6f 54 72 61 63 65 20 41 3b 20  lite3IoTrace A; 
2d470 7d 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  }.  void sqlite3
2d480 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 56  VdbeIOTraceSql(V
2d490 64 62 65 2a 29 3b 0a 53 51 4c 49 54 45 5f 41 50  dbe*);.SQLITE_AP
2d4a0 49 20 53 51 4c 49 54 45 5f 45 58 54 45 52 4e 20  I SQLITE_EXTERN 
2d4b0 76 6f 69 64 20 28 53 51 4c 49 54 45 5f 43 44 45  void (SQLITE_CDE
2d4c0 43 4c 20 2a 73 71 6c 69 74 65 33 49 6f 54 72 61  CL *sqlite3IoTra
2d4d0 63 65 29 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ce)(const char*,
2d4e0 2e 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  ...);.#else.# de
2d4f0 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29 0a  fine IOTRACE(A).
2d500 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2d510 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 58  VdbeIOTraceSql(X
2d520 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
2d530 54 68 65 73 65 20 72 6f 75 74 69 6e 65 73 20 61  These routines a
2d540 72 65 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72  re available for
2d550 20 74 68 65 20 6d 65 6d 32 2e 63 20 64 65 62 75   the mem2.c debu
2d560 67 67 69 6e 67 20 6d 65 6d 6f 72 79 20 61 6c 6c  gging memory all
2d570 6f 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20  ocator.** only. 
2d580 20 54 68 65 79 20 61 72 65 20 75 73 65 64 20 74   They are used t
2d590 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 64 69  o verify that di
2d5a0 66 66 65 72 65 6e 74 20 22 74 79 70 65 73 22 20  fferent "types" 
2d5b0 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c  of memory.** all
2d5c0 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 70 72 6f  ocations are pro
2d5d0 70 65 72 6c 79 20 74 72 61 63 6b 65 64 20 62 79  perly tracked by
2d5e0 20 74 68 65 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a   the system..**.
2d5f0 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ** sqlite3Memdeb
2d600 75 67 53 65 74 54 79 70 65 28 29 20 73 65 74 73  ugSetType() sets
2d610 20 74 68 65 20 22 74 79 70 65 22 20 6f 66 20 61   the "type" of a
2d620 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f 20  n allocation to 
2d630 6f 6e 65 20 6f 66 0a 2a 2a 20 74 68 65 20 4d 45  one of.** the ME
2d640 4d 54 59 50 45 5f 2a 20 6d 61 63 72 6f 73 20 64  MTYPE_* macros d
2d650 65 66 69 6e 65 64 20 62 65 6c 6f 77 2e 20 20 54  efined below.  T
2d660 68 65 20 74 79 70 65 20 6d 75 73 74 20 62 65 20  he type must be 
2d670 61 20 62 69 74 6d 61 73 6b 20 77 69 74 68 0a 2a  a bitmask with.*
2d680 2a 20 61 20 73 69 6e 67 6c 65 20 62 69 74 20 73  * a single bit s
2d690 65 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65  et..**.** sqlite
2d6a0 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
2d6b0 28 29 20 72 65 74 75 72 6e 73 20 74 72 75 65 20  () returns true 
2d6c0 69 66 20 61 6e 79 20 6f 66 20 74 68 65 20 62 69  if any of the bi
2d6d0 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64  ts in its second
2d6e0 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74  .** argument mat
2d6f0 63 68 20 74 68 65 20 74 79 70 65 20 73 65 74 20  ch the type set 
2d700 62 79 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  by the previous 
2d710 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
2d720 65 74 54 79 70 65 28 29 2e 0a 2a 2a 20 73 71 6c  etType()..** sql
2d730 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54  ite3MemdebugHasT
2d740 79 70 65 28 29 20 69 73 20 69 6e 74 65 6e 64 65  ype() is intende
2d750 64 20 66 6f 72 20 75 73 65 20 69 6e 73 69 64 65  d for use inside
2d760 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
2d770 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69  ents..**.** sqli
2d780 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70  te3MemdebugNoTyp
2d790 65 28 29 20 72 65 74 75 72 6e 73 20 74 72 75 65  e() returns true
2d7a0 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20   if none of the 
2d7b0 62 69 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f  bits in its seco
2d7c0 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d  nd.** argument m
2d7d0 61 74 63 68 20 74 68 65 20 74 79 70 65 20 73 65  atch the type se
2d7e0 74 20 62 79 20 74 68 65 20 70 72 65 76 69 6f 75  t by the previou
2d7f0 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  s sqlite3Memdebu
2d800 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a  gSetType()..**.*
2d810 2a 20 50 65 72 68 61 70 73 20 74 68 65 20 6d 6f  * Perhaps the mo
2d820 73 74 20 69 6d 70 6f 72 74 61 6e 74 20 70 6f 69  st important poi
2d830 6e 74 20 69 73 20 74 68 65 20 64 69 66 66 65 72  nt is the differ
2d840 65 6e 63 65 20 62 65 74 77 65 65 6e 20 4d 45 4d  ence between MEM
2d850 54 59 50 45 5f 48 45 41 50 0a 2a 2a 20 61 6e 64  TYPE_HEAP.** and
2d860 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49   MEMTYPE_LOOKASI
2d870 44 45 2e 20 20 49 66 20 61 6e 20 61 6c 6c 6f 63  DE.  If an alloc
2d880 61 74 69 6f 6e 20 69 73 20 4d 45 4d 54 59 50 45  ation is MEMTYPE
2d890 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20 74 68 61 74  _LOOKASIDE, that
2d8a0 20 6d 65 61 6e 73 0a 2a 2a 20 69 74 20 6d 69 67   means.** it mig
2d8b0 68 74 20 68 61 76 65 20 62 65 65 6e 20 61 6c 6c  ht have been all
2d8c0 6f 63 61 74 65 64 20 62 79 20 6c 6f 6f 6b 61 73  ocated by lookas
2d8d0 69 64 65 2c 20 65 78 63 65 70 74 20 74 68 65 20  ide, except the 
2d8e0 61 6c 6c 6f 63 61 74 69 6f 6e 20 77 61 73 0a 2a  allocation was.*
2d8f0 2a 20 74 6f 6f 20 6c 61 72 67 65 20 6f 72 20 6c  * too large or l
2d900 6f 6f 6b 61 73 69 64 65 20 77 61 73 20 61 6c 72  ookaside was alr
2d910 65 61 64 79 20 66 75 6c 6c 2e 20 20 49 74 20 69  eady full.  It i
2d920 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 76  s important to v
2d930 65 72 69 66 79 0a 2a 2a 20 74 68 61 74 20 61 6c  erify.** that al
2d940 6c 6f 63 61 74 69 6f 6e 73 20 74 68 61 74 20 6d  locations that m
2d950 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 73  ight have been s
2d960 61 74 69 73 66 69 65 64 20 62 79 20 6c 6f 6f 6b  atisfied by look
2d970 61 73 69 64 65 20 61 72 65 20 6e 6f 74 0a 2a 2a  aside are not.**
2d980 20 70 61 73 73 65 64 20 62 61 63 6b 20 74 6f 20   passed back to 
2d990 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72  non-lookaside fr
2d9a0 65 65 28 29 20 72 6f 75 74 69 6e 65 73 2e 20 20  ee() routines.  
2d9b0 41 73 73 65 72 74 73 20 73 75 63 68 20 61 73 20  Asserts such as 
2d9c0 74 68 65 0a 2a 2a 20 65 78 61 6d 70 6c 65 20 61  the.** example a
2d9d0 62 6f 76 65 20 61 72 65 20 70 6c 61 63 65 64 20  bove are placed 
2d9e0 6f 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61  on the non-looka
2d9f0 73 69 64 65 20 66 72 65 65 28 29 20 72 6f 75 74  side free() rout
2da00 69 6e 65 73 20 74 6f 20 76 65 72 69 66 79 0a 2a  ines to verify.*
2da10 2a 20 74 68 69 73 20 63 6f 6e 73 74 72 61 69 6e  * this constrain
2da20 74 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20  t..**.** All of 
2da30 74 68 69 73 20 69 73 20 6e 6f 2d 6f 70 20 66 6f  this is no-op fo
2da40 72 20 61 20 70 72 6f 64 75 63 74 69 6f 6e 20 62  r a production b
2da50 75 69 6c 64 2e 20 20 49 74 20 6f 6e 6c 79 20 63  uild.  It only c
2da60 6f 6d 65 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61  omes into.** pla
2da70 79 20 77 68 65 6e 20 74 68 65 20 53 51 4c 49 54  y when the SQLIT
2da80 45 5f 4d 45 4d 44 45 42 55 47 20 63 6f 6d 70 69  E_MEMDEBUG compi
2da90 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69  le-time option i
2daa0 73 20 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65  s used..*/.#ifde
2dab0 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  f SQLITE_MEMDEBU
2dac0 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  G.  void sqlite3
2dad0 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
2dae0 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74  void*,u8);.  int
2daf0 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
2db00 48 61 73 54 79 70 65 28 76 6f 69 64 2a 2c 75 38  HasType(void*,u8
2db10 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
2db20 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 76  MemdebugNoType(v
2db30 6f 69 64 2a 2c 75 38 29 3b 0a 23 65 6c 73 65 0a  oid*,u8);.#else.
2db40 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2db50 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
2db60 58 2c 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a  X,Y)  /* no-op *
2db70 2f 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  /.# define sqlit
2db80 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70  e3MemdebugHasTyp
2db90 65 28 58 2c 59 29 20 20 31 0a 23 20 64 65 66 69  e(X,Y)  1.# defi
2dba0 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ne sqlite3Memdeb
2dbb0 75 67 4e 6f 54 79 70 65 28 58 2c 59 29 20 20 20  ugNoType(X,Y)   
2dbc0 31 0a 23 65 6e 64 69 66 0a 23 64 65 66 69 6e 65  1.#endif.#define
2dbd0 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 20 20 20   MEMTYPE_HEAP   
2dbe0 20 20 20 20 30 78 30 31 20 20 2f 2a 20 47 65 6e      0x01  /* Gen
2dbf0 65 72 61 6c 20 68 65 61 70 20 61 6c 6c 6f 63 61  eral heap alloca
2dc00 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tions */.#define
2dc10 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49   MEMTYPE_LOOKASI
2dc20 44 45 20 20 30 78 30 32 20 20 2f 2a 20 48 65 61  DE  0x02  /* Hea
2dc30 70 20 74 68 61 74 20 6d 69 67 68 74 20 68 61 76  p that might hav
2dc40 65 20 62 65 65 6e 20 6c 6f 6f 6b 61 73 69 64 65  e been lookaside
2dc50 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54   */.#define MEMT
2dc60 59 50 45 5f 53 43 52 41 54 43 48 20 20 20 20 30  YPE_SCRATCH    0
2dc70 78 30 34 20 20 2f 2a 20 53 63 72 61 74 63 68 20  x04  /* Scratch 
2dc80 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23  allocations */.#
2dc90 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 50  define MEMTYPE_P
2dca0 43 41 43 48 45 20 20 20 20 20 30 78 30 38 20 20  CACHE     0x08  
2dcb0 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20 61 6c  /* Page cache al
2dcc0 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a  locations */../*
2dcd0 0a 2a 2a 20 54 68 72 65 61 64 69 6e 67 20 69 6e  .** Threading in
2dce0 74 65 72 66 61 63 65 0a 2a 2f 0a 23 69 66 20 53  terface.*/.#if S
2dcf0 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
2dd00 5f 54 48 52 45 41 44 53 3e 30 0a 69 6e 74 20 73  _THREADS>0.int s
2dd10 71 6c 69 74 65 33 54 68 72 65 61 64 43 72 65 61  qlite3ThreadCrea
2dd20 74 65 28 53 51 4c 69 74 65 54 68 72 65 61 64 2a  te(SQLiteThread*
2dd30 2a 2c 76 6f 69 64 2a 28 2a 29 28 76 6f 69 64 2a  *,void*(*)(void*
2dd40 29 2c 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71  ),void*);.int sq
2dd50 6c 69 74 65 33 54 68 72 65 61 64 4a 6f 69 6e 28  lite3ThreadJoin(
2dd60 53 51 4c 69 74 65 54 68 72 65 61 64 2a 2c 20 76  SQLiteThread*, v
2dd70 6f 69 64 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  oid**);.#endif..
2dd80 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
2dd90 54 45 5f 45 4e 41 42 4c 45 5f 44 42 53 54 41 54  TE_ENABLE_DBSTAT
2dda0 5f 56 54 41 42 29 20 7c 7c 20 64 65 66 69 6e 65  _VTAB) || define
2ddb0 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 69  d(SQLITE_TEST).i
2ddc0 6e 74 20 73 71 6c 69 74 65 33 44 62 73 74 61 74  nt sqlite3Dbstat
2ddd0 52 65 67 69 73 74 65 72 28 73 71 6c 69 74 65 33  Register(sqlite3
2dde0 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20  *);.#endif..int 
2ddf0 73 71 6c 69 74 65 33 45 78 70 72 56 65 63 74 6f  sqlite3ExprVecto
2de00 72 53 69 7a 65 28 45 78 70 72 20 2a 70 45 78 70  rSize(Expr *pExp
2de10 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  r);.int sqlite3E
2de20 78 70 72 49 73 56 65 63 74 6f 72 28 45 78 70 72  xprIsVector(Expr
2de30 20 2a 70 45 78 70 72 29 3b 0a 45 78 70 72 20 2a   *pExpr);.Expr *
2de40 73 71 6c 69 74 65 33 56 65 63 74 6f 72 46 69 65  sqlite3VectorFie
2de50 6c 64 53 75 62 65 78 70 72 28 45 78 70 72 2a 2c  ldSubexpr(Expr*,
2de60 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c   int);.Expr *sql
2de70 69 74 65 33 45 78 70 72 46 6f 72 56 65 63 74 6f  ite3ExprForVecto
2de80 72 46 69 65 6c 64 28 50 61 72 73 65 2a 2c 45 78  rField(Parse*,Ex
2de90 70 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  pr*,int);.void s
2dea0 71 6c 69 74 65 33 56 65 63 74 6f 72 45 72 72 6f  qlite3VectorErro
2deb0 72 4d 73 67 28 50 61 72 73 65 2a 2c 20 45 78 70  rMsg(Parse*, Exp
2dec0 72 2a 29 3b 0a 0a 63 6f 6e 73 74 20 63 68 61 72  r*);..const char
2ded0 20 2a 2a 73 71 6c 69 74 65 33 43 6f 6d 70 69 6c   **sqlite3Compil
2dee0 65 4f 70 74 69 6f 6e 73 28 69 6e 74 20 2a 70 6e  eOptions(int *pn
2def0 4f 70 74 29 3b 0a 0a 23 65 6e 64 69 66 20 2f 2a  Opt);..#endif /*
2df00 20 53 51 4c 49 54 45 49 4e 54 5f 48 20 2a 2f 0a   SQLITEINT_H */.