/ Hex Artifact Content
Login

Artifact 60295f5f909e32aef1961075a8fa98df19335a4b7792b4a0b897f1d8789681c9:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 53 51 4c 49 54 45 49 4e 54 5f 48 0a 23  ef SQLITEINT_H.#
01c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 49 4e 54  define SQLITEINT
01d0: 5f 48 0a 0a 2f 2a 20 53 70 65 63 69 61 6c 20 43  _H../* Special C
01e0: 6f 6d 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 53  omments:.**.** S
01f0: 6f 6d 65 20 63 6f 6d 6d 65 6e 74 73 20 68 61 76  ome comments hav
0200: 65 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  e special meanin
0210: 67 20 74 6f 20 74 68 65 20 74 6f 6f 6c 73 20 74  g to the tools t
0220: 68 61 74 20 6d 65 61 73 75 72 65 20 74 65 73 74  hat measure test
0230: 0a 2a 2a 20 63 6f 76 65 72 61 67 65 3a 0a 2a 2a  .** coverage:.**
0240: 0a 2a 2a 20 20 20 20 4e 4f 5f 54 45 53 54 20 20  .**    NO_TEST  
0250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0260: 20 20 20 2d 20 54 68 65 20 62 72 61 6e 63 68 65     - The branche
0270: 73 20 6f 6e 20 74 68 69 73 20 6c 69 6e 65 20 61  s on this line a
0280: 72 65 20 6e 6f 74 0a 2a 2a 20 20 20 20 20 20 20  re not.**       
0290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02a0: 20 20 20 20 20 20 20 20 20 20 20 6d 65 61 73 75             measu
02b0: 72 65 64 20 62 79 20 62 72 61 6e 63 68 20 63 6f  red by branch co
02c0: 76 65 72 61 67 65 2e 20 20 54 68 69 73 20 69 73  verage.  This is
02d0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
02e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02f0: 20 20 20 20 20 75 73 65 64 20 6f 6e 20 6c 69 6e       used on lin
0300: 65 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  es of code that 
0310: 61 63 74 75 61 6c 6c 79 0a 2a 2a 20 20 20 20 20  actually.**     
0320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0330: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6d 70               imp
0340: 6c 65 6d 65 6e 74 20 70 61 72 74 73 20 6f 66 20  lement parts of 
0350: 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67  coverage testing
0360: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d  ..**.**    OPTIM
0370: 49 5a 41 54 49 4f 4e 2d 49 46 2d 54 52 55 45 20  IZATION-IF-TRUE 
0380: 20 20 20 20 20 20 20 2d 20 54 68 69 73 20 62 72         - This br
0390: 61 6e 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20  anch is allowed 
03a0: 74 6f 20 61 6c 77 61 79 20 62 65 20 66 61 6c 73  to alway be fals
03b0: 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
03c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03d0: 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 63 6f        and the co
03e0: 72 72 65 63 74 20 61 6e 73 77 65 72 20 69 73 20  rrect answer is 
03f0: 73 74 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a  still obtained,.
0400: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
0410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0420: 20 20 20 20 74 68 6f 75 67 68 20 70 65 72 68 61      though perha
0430: 70 73 20 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a  ps more slowly..
0440: 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d 49 5a  **.**    OPTIMIZ
0450: 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 20 20  ATION-IF-FALSE  
0460: 20 20 20 20 20 2d 20 54 68 69 73 20 62 72 61 6e       - This bran
0470: 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f  ch is allowed to
0480: 20 61 6c 77 61 79 20 62 65 20 74 72 75 65 0a 2a   alway be true.*
0490: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
04a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04b0: 20 20 20 61 6e 64 20 74 68 65 20 63 6f 72 72 65     and the corre
04c0: 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74 69  ct answer is sti
04d0: 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a 2a 2a 20  ll obtained,.** 
04e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0500: 20 74 68 6f 75 67 68 20 70 65 72 68 61 70 73 20   though perhaps 
0510: 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a 2a 2a 0a  more slowly..**.
0520: 2a 2a 20 20 20 20 50 52 45 56 45 4e 54 53 2d 48  **    PREVENTS-H
0530: 41 52 4d 4c 45 53 53 2d 4f 56 45 52 52 45 41 44  ARMLESS-OVERREAD
0540: 20 20 2d 20 54 68 69 73 20 62 72 61 6e 63 68 20    - This branch 
0550: 70 72 65 76 65 6e 74 73 20 61 20 62 75 66 66 65  prevents a buffe
0560: 72 20 6f 76 65 72 72 65 61 64 0a 2a 2a 20 20 20  r overread.**   
0570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
0590: 68 61 74 20 77 6f 75 6c 64 20 62 65 20 68 61 72  hat would be har
05a0: 6d 6c 65 73 73 20 61 6e 64 20 75 6e 64 65 74 65  mless and undete
05b0: 63 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20  ctable.**       
05c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
05d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 69 74             if it
05e0: 20 64 69 64 20 6f 63 63 75 72 2e 20 20 0a 2a 2a   did occur.  .**
05f0: 0a 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65 73  .** In all cases
0600: 2c 20 74 68 65 20 73 70 65 63 69 61 6c 20 63 6f  , the special co
0610: 6d 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 65 6e  mment must be en
0620: 63 6c 6f 73 65 64 20 69 6e 20 74 68 65 20 75 73  closed in the us
0630: 75 61 6c 0a 2a 2a 20 73 6c 61 73 68 2d 61 73 74  ual.** slash-ast
0640: 65 72 69 73 6b 2e 2e 2e 61 73 74 65 72 69 73 6b  erisk...asterisk
0650: 2d 73 6c 61 73 68 20 63 6f 6d 6d 65 6e 74 20 6d  -slash comment m
0660: 61 72 6b 73 2c 20 77 69 74 68 20 6e 6f 20 73 70  arks, with no sp
0670: 61 63 65 73 20 62 65 74 77 65 65 6e 20 74 68 65  aces between the
0680: 20 0a 2a 2a 20 61 73 74 65 72 69 73 6b 73 20 61   .** asterisks a
0690: 6e 64 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74  nd the comment t
06a0: 65 78 74 2e 0a 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d  ext..*/../*.** M
06b0: 61 6b 65 20 73 75 72 65 20 74 68 65 20 54 63 6c  ake sure the Tcl
06c0: 20 63 61 6c 6c 69 6e 67 20 63 6f 6e 76 65 6e 74   calling convent
06d0: 69 6f 6e 20 6d 61 63 72 6f 20 69 73 20 64 65 66  ion macro is def
06e0: 69 6e 65 64 2e 20 20 54 68 69 73 20 6d 61 63 72  ined.  This macr
06f0: 6f 20 69 73 0a 2a 2a 20 6f 6e 6c 79 20 75 73 65  o is.** only use
0700: 64 20 62 79 20 74 65 73 74 20 63 6f 64 65 20 61  d by test code a
0710: 6e 64 20 54 63 6c 20 69 6e 74 65 67 72 61 74 69  nd Tcl integrati
0720: 6f 6e 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 6e  on code..*/.#ifn
0730: 64 65 66 20 53 51 4c 49 54 45 5f 54 43 4c 41 50  def SQLITE_TCLAP
0740: 49 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49  I.#  define SQLI
0750: 54 45 5f 54 43 4c 41 50 49 0a 23 65 6e 64 69 66  TE_TCLAPI.#endif
0760: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20 73 75 72  ../*.** Make sur
0770: 65 20 74 68 61 74 20 72 61 6e 64 5f 73 28 29 20  e that rand_s() 
0780: 69 73 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e 20  is available on 
0790: 57 69 6e 64 6f 77 73 20 73 79 73 74 65 6d 73 20  Windows systems 
07a0: 77 69 74 68 20 4d 53 56 43 20 32 30 30 35 0a 2a  with MSVC 2005.*
07b0: 2a 20 6f 72 20 68 69 67 68 65 72 2e 0a 2a 2f 0a  * or higher..*/.
07c0: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 4d 53 43  #if defined(_MSC
07d0: 5f 56 45 52 29 20 26 26 20 5f 4d 53 43 5f 56 45  _VER) && _MSC_VE
07e0: 52 3e 3d 31 34 30 30 0a 23 20 20 64 65 66 69 6e  R>=1400.#  defin
07f0: 65 20 5f 43 52 54 5f 52 41 4e 44 5f 53 0a 23 65  e _CRT_RAND_S.#e
0800: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  ndif../*.** Incl
0810: 75 64 65 20 74 68 65 20 68 65 61 64 65 72 20 66  ude the header f
0820: 69 6c 65 20 75 73 65 64 20 74 6f 20 63 75 73 74  ile used to cust
0830: 6f 6d 69 7a 65 20 74 68 65 20 63 6f 6d 70 69 6c  omize the compil
0840: 65 72 20 6f 70 74 69 6f 6e 73 20 66 6f 72 20 4d  er options for M
0850: 53 56 43 2e 0a 2a 2a 20 54 68 69 73 20 73 68 6f  SVC..** This sho
0860: 75 6c 64 20 62 65 20 64 6f 6e 65 20 66 69 72 73  uld be done firs
0870: 74 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e  t so that it can
0880: 20 73 75 63 63 65 73 73 66 75 6c 6c 79 20 70 72   successfully pr
0890: 65 76 65 6e 74 20 73 70 75 72 69 6f 75 73 0a 2a  event spurious.*
08a0: 2a 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69  * compiler warni
08b0: 6e 67 73 20 64 75 65 20 74 6f 20 73 75 62 73 65  ngs due to subse
08c0: 71 75 65 6e 74 20 63 6f 6e 74 65 6e 74 20 69 6e  quent content in
08d0: 20 74 68 69 73 20 66 69 6c 65 20 61 6e 64 20 6f   this file and o
08e0: 74 68 65 72 20 66 69 6c 65 73 0a 2a 2a 20 74 68  ther files.** th
08f0: 61 74 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20  at are included 
0900: 62 79 20 74 68 69 73 20 66 69 6c 65 2e 0a 2a 2f  by this file..*/
0910: 0a 23 69 6e 63 6c 75 64 65 20 22 6d 73 76 63 2e  .#include "msvc.
0920: 68 22 0a 0a 2f 2a 0a 2a 2a 20 53 70 65 63 69 61  h"../*.** Specia
0930: 6c 20 73 65 74 75 70 20 66 6f 72 20 56 78 57 6f  l setup for VxWo
0940: 72 6b 73 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20  rks.*/.#include 
0950: 22 76 78 77 6f 72 6b 73 2e 68 22 0a 0a 2f 2a 0a  "vxworks.h"../*.
0960: 2a 2a 20 54 68 65 73 65 20 23 64 65 66 69 6e 65  ** These #define
0970: 73 20 73 68 6f 75 6c 64 20 65 6e 61 62 6c 65 20  s should enable 
0980: 3e 32 47 42 20 66 69 6c 65 20 73 75 70 70 6f 72  >2GB file suppor
0990: 74 20 6f 6e 20 50 4f 53 49 58 20 69 66 20 74 68  t on POSIX if th
09a0: 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20  e.** underlying 
09b0: 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d  operating system
09c0: 20 73 75 70 70 6f 72 74 73 20 69 74 2e 20 20 49   supports it.  I
09d0: 66 20 74 68 65 20 4f 53 20 6c 61 63 6b 73 0a 2a  f the OS lacks.*
09e0: 2a 20 6c 61 72 67 65 20 66 69 6c 65 20 73 75 70  * large file sup
09f0: 70 6f 72 74 2c 20 6f 72 20 69 66 20 74 68 65 20  port, or if the 
0a00: 4f 53 20 69 73 20 77 69 6e 64 6f 77 73 2c 20 74  OS is windows, t
0a10: 68 65 73 65 20 73 68 6f 75 6c 64 20 62 65 20 6e  hese should be n
0a20: 6f 2d 6f 70 73 2e 0a 2a 2a 0a 2a 2a 20 54 69 63  o-ops..**.** Tic
0a30: 6b 65 74 20 23 32 37 33 39 3a 20 20 54 68 65 20  ket #2739:  The 
0a40: 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55 52 43  _LARGEFILE_SOURC
0a50: 45 20 6d 61 63 72 6f 20 6d 75 73 74 20 61 70 70  E macro must app
0a60: 65 61 72 20 62 65 66 6f 72 65 20 61 6e 79 0a 2a  ear before any.*
0a70: 2a 20 73 79 73 74 65 6d 20 23 69 6e 63 6c 75 64  * system #includ
0a80: 65 73 2e 20 20 48 65 6e 63 65 2c 20 74 68 69 73  es.  Hence, this
0a90: 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 20 6d   block of code m
0aa0: 75 73 74 20 62 65 20 74 68 65 20 76 65 72 79 20  ust be the very 
0ab0: 66 69 72 73 74 0a 2a 2a 20 63 6f 64 65 20 69 6e  first.** code in
0ac0: 20 61 6c 6c 20 73 6f 75 72 63 65 20 66 69 6c 65   all source file
0ad0: 73 2e 0a 2a 2a 0a 2a 2a 20 4c 61 72 67 65 20 66  s..**.** Large f
0ae0: 69 6c 65 20 73 75 70 70 6f 72 74 20 63 61 6e 20  ile support can 
0af0: 62 65 20 64 69 73 61 62 6c 65 64 20 75 73 69 6e  be disabled usin
0b00: 67 20 74 68 65 20 2d 44 53 51 4c 49 54 45 5f 44  g the -DSQLITE_D
0b10: 49 53 41 42 4c 45 5f 4c 46 53 20 73 77 69 74 63  ISABLE_LFS switc
0b20: 68 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f 6d 70  h.** on the comp
0b30: 69 6c 65 72 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e  iler command lin
0b40: 65 2e 20 20 54 68 69 73 20 69 73 20 6e 65 63 65  e.  This is nece
0b50: 73 73 61 72 79 20 69 66 20 79 6f 75 20 61 72 65  ssary if you are
0b60: 20 63 6f 6d 70 69 6c 69 6e 67 0a 2a 2a 20 6f 6e   compiling.** on
0b70: 20 61 20 72 65 63 65 6e 74 20 6d 61 63 68 69 6e   a recent machin
0b80: 65 20 28 65 78 3a 20 52 65 64 20 48 61 74 20 37  e (ex: Red Hat 7
0b90: 2e 32 29 20 62 75 74 20 79 6f 75 20 77 61 6e 74  .2) but you want
0ba0: 20 79 6f 75 72 20 63 6f 64 65 20 74 6f 20 77 6f   your code to wo
0bb0: 72 6b 0a 2a 2a 20 6f 6e 20 61 6e 20 6f 6c 64 65  rk.** on an olde
0bc0: 72 20 6d 61 63 68 69 6e 65 20 28 65 78 3a 20 52  r machine (ex: R
0bd0: 65 64 20 48 61 74 20 36 2e 30 29 2e 20 20 49 66  ed Hat 6.0).  If
0be0: 20 79 6f 75 20 63 6f 6d 70 69 6c 65 20 6f 6e 20   you compile on 
0bf0: 52 65 64 20 48 61 74 20 37 2e 32 0a 2a 2a 20 77  Red Hat 7.2.** w
0c00: 69 74 68 6f 75 74 20 74 68 69 73 20 6f 70 74 69  ithout this opti
0c10: 6f 6e 2c 20 4c 46 53 20 69 73 20 65 6e 61 62 6c  on, LFS is enabl
0c20: 65 2e 20 20 42 75 74 20 4c 46 53 20 64 6f 65 73  e.  But LFS does
0c30: 20 6e 6f 74 20 65 78 69 73 74 20 69 6e 20 74 68   not exist in th
0c40: 65 20 6b 65 72 6e 65 6c 0a 2a 2a 20 69 6e 20 52  e kernel.** in R
0c50: 65 64 20 48 61 74 20 36 2e 30 2c 20 73 6f 20 74  ed Hat 6.0, so t
0c60: 68 65 20 63 6f 64 65 20 77 6f 6e 27 74 20 77 6f  he code won't wo
0c70: 72 6b 2e 20 20 48 65 6e 63 65 2c 20 66 6f 72 20  rk.  Hence, for 
0c80: 6d 61 78 69 6d 75 6d 20 62 69 6e 61 72 79 0a 2a  maximum binary.*
0c90: 2a 20 70 6f 72 74 61 62 69 6c 69 74 79 20 79 6f  * portability yo
0ca0: 75 20 73 68 6f 75 6c 64 20 6f 6d 69 74 20 4c 46  u should omit LF
0cb0: 53 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 72 65  S..**.** The pre
0cc0: 76 69 6f 75 73 20 70 61 72 61 67 72 61 70 68 20  vious paragraph 
0cd0: 77 61 73 20 77 72 69 74 74 65 6e 20 69 6e 20 32  was written in 2
0ce0: 30 30 35 2e 20 20 28 54 68 69 73 20 70 61 72 61  005.  (This para
0cf0: 67 72 61 70 68 20 69 73 20 77 72 69 74 74 65 6e  graph is written
0d00: 0a 2a 2a 20 6f 6e 20 32 30 30 38 2d 31 31 2d 32  .** on 2008-11-2
0d10: 38 2e 29 20 54 68 65 73 65 20 64 61 79 73 2c 20  8.) These days, 
0d20: 61 6c 6c 20 4c 69 6e 75 78 20 6b 65 72 6e 65 6c  all Linux kernel
0d30: 73 20 73 75 70 70 6f 72 74 20 6c 61 72 67 65 20  s support large 
0d40: 66 69 6c 65 73 2c 20 73 6f 0a 2a 2a 20 79 6f 75  files, so.** you
0d50: 20 73 68 6f 75 6c 64 20 70 72 6f 62 61 62 6c 79   should probably
0d60: 20 6c 65 61 76 65 20 4c 46 53 20 65 6e 61 62 6c   leave LFS enabl
0d70: 65 64 2e 20 20 42 75 74 20 73 6f 6d 65 20 65 6d  ed.  But some em
0d80: 62 65 64 64 65 64 20 70 6c 61 74 66 6f 72 6d 73  bedded platforms
0d90: 20 6d 69 67 68 74 0a 2a 2a 20 6c 61 63 6b 20 4c   might.** lack L
0da0: 46 53 20 69 6e 20 77 68 69 63 68 20 63 61 73 65  FS in which case
0db0: 20 74 68 65 20 53 51 4c 49 54 45 5f 44 49 53 41   the SQLITE_DISA
0dc0: 42 4c 45 5f 4c 46 53 20 6d 61 63 72 6f 20 6d 69  BLE_LFS macro mi
0dd0: 67 68 74 20 73 74 69 6c 6c 20 62 65 20 75 73 65  ght still be use
0de0: 66 75 6c 2e 0a 2a 2a 0a 2a 2a 20 53 69 6d 69 6c  ful..**.** Simil
0df0: 61 72 20 69 73 20 74 72 75 65 20 66 6f 72 20 4d  ar is true for M
0e00: 61 63 20 4f 53 20 58 2e 20 20 4c 46 53 20 69 73  ac OS X.  LFS is
0e10: 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74 65 64 20   only supported 
0e20: 6f 6e 20 4d 61 63 20 4f 53 20 58 20 39 20 61 6e  on Mac OS X 9 an
0e30: 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 23 69 66 6e  d later..*/.#ifn
0e40: 64 65 66 20 53 51 4c 49 54 45 5f 44 49 53 41 42  def SQLITE_DISAB
0e50: 4c 45 5f 4c 46 53 0a 23 20 64 65 66 69 6e 65 20  LE_LFS.# define 
0e60: 5f 4c 41 52 47 45 5f 46 49 4c 45 20 20 20 20 20  _LARGE_FILE     
0e70: 20 20 31 0a 23 20 69 66 6e 64 65 66 20 5f 46 49    1.# ifndef _FI
0e80: 4c 45 5f 4f 46 46 53 45 54 5f 42 49 54 53 0a 23  LE_OFFSET_BITS.#
0e90: 20 20 20 64 65 66 69 6e 65 20 5f 46 49 4c 45 5f     define _FILE_
0ea0: 4f 46 46 53 45 54 5f 42 49 54 53 20 36 34 0a 23  OFFSET_BITS 64.#
0eb0: 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20   endif.# define 
0ec0: 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55 52 43  _LARGEFILE_SOURC
0ed0: 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 54  E 1.#endif../* T
0ee0: 68 65 20 47 43 43 5f 56 45 52 53 49 4f 4e 20 61  he GCC_VERSION a
0ef0: 6e 64 20 4d 53 56 43 5f 56 45 52 53 49 4f 4e 20  nd MSVC_VERSION 
0f00: 6d 61 63 72 6f 73 20 61 72 65 20 75 73 65 64 20  macros are used 
0f10: 74 6f 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 61  to.** conditiona
0f20: 6c 6c 79 20 69 6e 63 6c 75 64 65 20 6f 70 74 69  lly include opti
0f30: 6d 69 7a 61 74 69 6f 6e 73 20 66 6f 72 20 65 61  mizations for ea
0f40: 63 68 20 6f 66 20 74 68 65 73 65 20 63 6f 6d 70  ch of these comp
0f50: 69 6c 65 72 73 2e 20 20 41 0a 2a 2a 20 76 61 6c  ilers.  A.** val
0f60: 75 65 20 6f 66 20 30 20 6d 65 61 6e 73 20 74 68  ue of 0 means th
0f70: 61 74 20 63 6f 6d 70 69 6c 65 72 20 69 73 20 6e  at compiler is n
0f80: 6f 74 20 62 65 69 6e 67 20 75 73 65 64 2e 20 20  ot being used.  
0f90: 54 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 44 49  The.** SQLITE_DI
0fa0: 53 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 20  SABLE_INTRINSIC 
0fb0: 6d 61 63 72 6f 20 6d 65 61 6e 73 20 64 6f 20 6e  macro means do n
0fc0: 6f 74 20 75 73 65 20 61 6e 79 20 63 6f 6d 70 69  ot use any compi
0fd0: 6c 65 72 2d 73 70 65 63 69 66 69 63 0a 2a 2a 20  ler-specific.** 
0fe0: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2c 20 61  optimizations, a
0ff0: 6e 64 20 68 65 6e 63 65 20 73 65 74 20 61 6c 6c  nd hence set all
1000: 20 63 6f 6d 70 69 6c 65 72 20 6d 61 63 72 6f 73   compiler macros
1010: 20 74 6f 20 30 0a 2a 2a 0a 2a 2a 20 54 68 65 72   to 0.**.** Ther
1020: 65 20 77 61 73 20 6f 6e 63 65 20 61 6c 73 6f 20  e was once also 
1030: 61 20 43 4c 41 4e 47 5f 56 45 52 53 49 4f 4e 20  a CLANG_VERSION 
1040: 6d 61 63 72 6f 2e 20 20 48 6f 77 65 76 65 72 2c  macro.  However,
1050: 20 77 65 20 6c 65 61 72 6e 20 74 68 61 74 20 74   we learn that t
1060: 68 65 0a 2a 2a 20 76 65 72 73 69 6f 6e 20 6e 75  he.** version nu
1070: 6d 62 65 72 73 20 69 6e 20 63 6c 61 6e 67 20 61  mbers in clang a
1080: 72 65 20 66 6f 72 20 22 6d 61 72 6b 65 74 69 6e  re for "marketin
1090: 67 22 20 6f 6e 6c 79 20 61 6e 64 20 61 72 65 20  g" only and are 
10a0: 69 6e 63 6f 6e 73 69 73 74 65 6e 74 0a 2a 2a 20  inconsistent.** 
10b0: 61 6e 64 20 75 6e 72 65 6c 69 61 62 6c 65 2e 20  and unreliable. 
10c0: 20 46 6f 72 74 75 6e 61 74 65 6c 79 2c 20 61 6c   Fortunately, al
10d0: 6c 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 63 6c  l versions of cl
10e0: 61 6e 67 20 61 6c 73 6f 20 72 65 63 6f 67 6e 69  ang also recogni
10f0: 7a 65 20 74 68 65 0a 2a 2a 20 67 63 63 20 76 65  ze the.** gcc ve
1100: 72 73 69 6f 6e 20 6e 75 6d 62 65 72 73 20 61 6e  rsion numbers an
1110: 64 20 68 61 76 65 20 72 65 61 73 6f 6e 61 62 6c  d have reasonabl
1120: 65 20 73 65 74 74 69 6e 67 73 20 66 6f 72 20 67  e settings for g
1130: 63 63 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65  cc version numbe
1140: 72 73 2c 0a 2a 2a 20 73 6f 20 74 68 65 20 47 43  rs,.** so the GC
1150: 43 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72 6f 20  C_VERSION macro 
1160: 77 69 6c 6c 20 62 65 20 73 65 74 20 74 6f 20 61  will be set to a
1170: 20 63 6f 72 72 65 63 74 20 6e 6f 6e 2d 7a 65 72   correct non-zer
1180: 6f 20 76 61 6c 75 65 20 65 76 65 6e 0a 2a 2a 20  o value even.** 
1190: 77 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 77  when compiling w
11a0: 69 74 68 20 63 6c 61 6e 67 2e 0a 2a 2f 0a 23 69  ith clang..*/.#i
11b0: 66 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43  f defined(__GNUC
11c0: 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  __) && !defined(
11d0: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 49  SQLITE_DISABLE_I
11e0: 4e 54 52 49 4e 53 49 43 29 0a 23 20 64 65 66 69  NTRINSIC).# defi
11f0: 6e 65 20 47 43 43 5f 56 45 52 53 49 4f 4e 20 28  ne GCC_VERSION (
1200: 5f 5f 47 4e 55 43 5f 5f 2a 31 30 30 30 30 30 30  __GNUC__*1000000
1210: 2b 5f 5f 47 4e 55 43 5f 4d 49 4e 4f 52 5f 5f 2a  +__GNUC_MINOR__*
1220: 31 30 30 30 2b 5f 5f 47 4e 55 43 5f 50 41 54 43  1000+__GNUC_PATC
1230: 48 4c 45 56 45 4c 5f 5f 29 0a 23 65 6c 73 65 0a  HLEVEL__).#else.
1240: 23 20 64 65 66 69 6e 65 20 47 43 43 5f 56 45 52  # define GCC_VER
1250: 53 49 4f 4e 20 30 0a 23 65 6e 64 69 66 0a 23 69  SION 0.#endif.#i
1260: 66 20 64 65 66 69 6e 65 64 28 5f 4d 53 43 5f 56  f defined(_MSC_V
1270: 45 52 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  ER) && !defined(
1280: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 49  SQLITE_DISABLE_I
1290: 4e 54 52 49 4e 53 49 43 29 0a 23 20 64 65 66 69  NTRINSIC).# defi
12a0: 6e 65 20 4d 53 56 43 5f 56 45 52 53 49 4f 4e 20  ne MSVC_VERSION 
12b0: 5f 4d 53 43 5f 56 45 52 0a 23 65 6c 73 65 0a 23  _MSC_VER.#else.#
12c0: 20 64 65 66 69 6e 65 20 4d 53 56 43 5f 56 45 52   define MSVC_VER
12d0: 53 49 4f 4e 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  SION 0.#endif../
12e0: 2a 20 4e 65 65 64 65 64 20 66 6f 72 20 76 61 72  * Needed for var
12f0: 69 6f 75 73 20 64 65 66 69 6e 69 74 69 6f 6e 73  ious definitions
1300: 2e 2e 2e 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e  ... */.#if defin
1310: 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 26 26 20  ed(__GNUC__) && 
1320: 21 64 65 66 69 6e 65 64 28 5f 47 4e 55 5f 53 4f  !defined(_GNU_SO
1330: 55 52 43 45 29 0a 23 20 64 65 66 69 6e 65 20 5f  URCE).# define _
1340: 47 4e 55 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69  GNU_SOURCE.#endi
1350: 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  f..#if defined(_
1360: 5f 4f 70 65 6e 42 53 44 5f 5f 29 20 26 26 20 21  _OpenBSD__) && !
1370: 64 65 66 69 6e 65 64 28 5f 42 53 44 5f 53 4f 55  defined(_BSD_SOU
1380: 52 43 45 29 0a 23 20 64 65 66 69 6e 65 20 5f 42  RCE).# define _B
1390: 53 44 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69 66  SD_SOURCE.#endif
13a0: 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47  ../*.** For MinG
13b0: 57 2c 20 63 68 65 63 6b 20 74 6f 20 73 65 65 20  W, check to see 
13c0: 69 66 20 77 65 20 63 61 6e 20 69 6e 63 6c 75 64  if we can includ
13d0: 65 20 74 68 65 20 68 65 61 64 65 72 20 66 69 6c  e the header fil
13e0: 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 69 74 73  e containing its
13f0: 0a 2a 2a 20 76 65 72 73 69 6f 6e 20 69 6e 66 6f  .** version info
1400: 72 6d 61 74 69 6f 6e 2c 20 61 6d 6f 6e 67 20 6f  rmation, among o
1410: 74 68 65 72 20 74 68 69 6e 67 73 2e 20 20 4e 6f  ther things.  No
1420: 72 6d 61 6c 6c 79 2c 20 74 68 69 73 20 69 6e 74  rmally, this int
1430: 65 72 6e 61 6c 20 4d 69 6e 47 57 0a 2a 2a 20 68  ernal MinGW.** h
1440: 65 61 64 65 72 20 66 69 6c 65 20 77 6f 75 6c 64  eader file would
1450: 20 5b 6f 6e 6c 79 5d 20 62 65 20 69 6e 63 6c 75   [only] be inclu
1460: 64 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ded automaticall
1470: 79 20 62 79 20 6f 74 68 65 72 20 4d 69 6e 47 57  y by other MinGW
1480: 20 68 65 61 64 65 72 0a 2a 2a 20 66 69 6c 65 73   header.** files
1490: 3b 20 68 6f 77 65 76 65 72 2c 20 74 68 65 20 63  ; however, the c
14a0: 6f 6e 74 61 69 6e 65 64 20 76 65 72 73 69 6f 6e  ontained version
14b0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20   information is 
14c0: 6e 6f 77 20 72 65 71 75 69 72 65 64 20 62 79 20  now required by 
14d0: 74 68 69 73 0a 2a 2a 20 68 65 61 64 65 72 20 66  this.** header f
14e0: 69 6c 65 20 74 6f 20 77 6f 72 6b 20 61 72 6f 75  ile to work arou
14f0: 6e 64 20 62 69 6e 61 72 79 20 63 6f 6d 70 61 74  nd binary compat
1500: 69 62 69 6c 69 74 79 20 69 73 73 75 65 73 20 28  ibility issues (
1510: 73 65 65 20 62 65 6c 6f 77 29 20 61 6e 64 0a 2a  see below) and.*
1520: 2a 20 74 68 69 73 20 69 73 20 74 68 65 20 6f 6e  * this is the on
1530: 6c 79 20 6b 6e 6f 77 6e 20 77 61 79 20 74 6f 20  ly known way to 
1540: 72 65 6c 69 61 62 6c 79 20 6f 62 74 61 69 6e 20  reliably obtain 
1550: 69 74 2e 20 20 54 68 69 73 20 65 6e 74 69 72 65  it.  This entire
1560: 20 23 69 66 20 62 6c 6f 63 6b 0a 2a 2a 20 77 6f   #if block.** wo
1570: 75 6c 64 20 62 65 20 63 6f 6d 70 6c 65 74 65 6c  uld be completel
1580: 79 20 75 6e 6e 65 63 65 73 73 61 72 79 20 69 66  y unnecessary if
1590: 20 74 68 65 72 65 20 77 61 73 20 61 6e 79 20 6f   there was any o
15a0: 74 68 65 72 20 77 61 79 20 6f 66 20 64 65 74 65  ther way of dete
15b0: 63 74 69 6e 67 0a 2a 2a 20 4d 69 6e 47 57 20 76  cting.** MinGW v
15c0: 69 61 20 74 68 65 69 72 20 70 72 65 70 72 6f 63  ia their preproc
15d0: 65 73 73 6f 72 20 28 65 2e 67 2e 20 69 66 20 74  essor (e.g. if t
15e0: 68 65 79 20 63 75 73 74 6f 6d 69 7a 65 64 20 74  hey customized t
15f0: 68 65 69 72 20 47 43 43 20 74 6f 20 64 65 66 69  heir GCC to defi
1600: 6e 65 0a 2a 2a 20 73 6f 6d 65 20 4d 69 6e 47 57  ne.** some MinGW
1610: 2d 73 70 65 63 69 66 69 63 20 6d 61 63 72 6f 73  -specific macros
1620: 29 2e 20 20 57 68 65 6e 20 63 6f 6d 70 69 6c 69  ).  When compili
1630: 6e 67 20 66 6f 72 20 4d 69 6e 47 57 2c 20 65 69  ng for MinGW, ei
1640: 74 68 65 72 20 74 68 65 0a 2a 2a 20 5f 48 41 56  ther the.** _HAV
1650: 45 5f 4d 49 4e 47 57 5f 48 20 6f 72 20 5f 48 41  E_MINGW_H or _HA
1660: 56 45 5f 5f 4d 49 4e 47 57 5f 48 20 28 6e 6f 74  VE__MINGW_H (not
1670: 65 20 74 68 65 20 65 78 74 72 61 20 75 6e 64 65  e the extra unde
1680: 72 73 63 6f 72 65 29 20 6d 61 63 72 6f 20 6d 75  rscore) macro mu
1690: 73 74 20 62 65 0a 2a 2a 20 64 65 66 69 6e 65 64  st be.** defined
16a0: 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 64 65 74  ; otherwise, det
16b0: 65 63 74 69 6f 6e 20 6f 66 20 63 6f 6e 64 69 74  ection of condit
16c0: 69 6f 6e 73 20 73 70 65 63 69 66 69 63 20 74 6f  ions specific to
16d0: 20 4d 69 6e 47 57 20 77 69 6c 6c 20 62 65 0a 2a   MinGW will be.*
16e0: 2a 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23  * disabled..*/.#
16f0: 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41 56 45  if defined(_HAVE
1700: 5f 4d 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63 6c  _MINGW_H).# incl
1710: 75 64 65 20 22 6d 69 6e 67 77 2e 68 22 0a 23 65  ude "mingw.h".#e
1720: 6c 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41 56  lif defined(_HAV
1730: 45 5f 5f 4d 49 4e 47 57 5f 48 29 0a 23 20 69 6e  E__MINGW_H).# in
1740: 63 6c 75 64 65 20 22 5f 6d 69 6e 67 77 2e 68 22  clude "_mingw.h"
1750: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46  .#endif../*.** F
1760: 6f 72 20 4d 69 6e 47 57 20 76 65 72 73 69 6f 6e  or MinGW version
1770: 20 34 2e 78 20 28 61 6e 64 20 68 69 67 68 65 72   4.x (and higher
1780: 29 2c 20 63 68 65 63 6b 20 74 6f 20 73 65 65 20  ), check to see 
1790: 69 66 20 74 68 65 20 5f 55 53 45 5f 33 32 42 49  if the _USE_32BI
17a0: 54 5f 54 49 4d 45 5f 54 0a 2a 2a 20 64 65 66 69  T_TIME_T.** defi
17b0: 6e 65 20 69 73 20 72 65 71 75 69 72 65 64 20 74  ne is required t
17c0: 6f 20 6d 61 69 6e 74 61 69 6e 20 62 69 6e 61 72  o maintain binar
17d0: 79 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20  y compatibility 
17e0: 77 69 74 68 20 74 68 65 20 4d 53 56 43 20 72 75  with the MSVC ru
17f0: 6e 74 69 6d 65 0a 2a 2a 20 6c 69 62 72 61 72 79  ntime.** library
1800: 20 69 6e 20 75 73 65 20 28 65 2e 67 2e 20 66 6f   in use (e.g. fo
1810: 72 20 57 69 6e 64 6f 77 73 20 58 50 29 2e 0a 2a  r Windows XP)..*
1820: 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f  /.#if !defined(_
1830: 55 53 45 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54  USE_32BIT_TIME_T
1840: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 55  ) && !defined(_U
1850: 53 45 5f 36 34 42 49 54 5f 54 49 4d 45 5f 54 29  SE_64BIT_TIME_T)
1860: 20 26 26 20 5c 0a 20 20 20 20 64 65 66 69 6e 65   && \.    define
1870: 64 28 5f 57 49 4e 33 32 29 20 26 26 20 21 64 65  d(_WIN32) && !de
1880: 66 69 6e 65 64 28 5f 57 49 4e 36 34 29 20 26 26  fined(_WIN64) &&
1890: 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f   \.    defined(_
18a0: 5f 4d 49 4e 47 57 5f 4d 41 4a 4f 52 5f 56 45 52  _MINGW_MAJOR_VER
18b0: 53 49 4f 4e 29 20 26 26 20 5f 5f 4d 49 4e 47 57  SION) && __MINGW
18c0: 5f 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e 20 3e  _MAJOR_VERSION >
18d0: 3d 20 34 20 26 26 20 5c 0a 20 20 20 20 64 65 66  = 4 && \.    def
18e0: 69 6e 65 64 28 5f 5f 4d 53 56 43 52 54 5f 5f 29  ined(__MSVCRT__)
18f0: 0a 23 20 64 65 66 69 6e 65 20 5f 55 53 45 5f 33  .# define _USE_3
1900: 32 42 49 54 5f 54 49 4d 45 5f 54 0a 23 65 6e 64  2BIT_TIME_T.#end
1910: 69 66 0a 0a 2f 2a 20 54 68 65 20 70 75 62 6c 69  if../* The publi
1920: 63 20 53 51 4c 69 74 65 20 69 6e 74 65 72 66 61  c SQLite interfa
1930: 63 65 2e 20 20 54 68 65 20 5f 46 49 4c 45 5f 4f  ce.  The _FILE_O
1940: 46 46 53 45 54 5f 42 49 54 53 20 6d 61 63 72 6f  FFSET_BITS macro
1950: 20 6d 75 73 74 20 61 70 70 65 61 72 0a 2a 2a 20   must appear.** 
1960: 66 69 72 73 74 20 69 6e 20 51 4e 58 2e 20 20 41  first in QNX.  A
1970: 6c 73 6f 2c 20 74 68 65 20 5f 55 53 45 5f 33 32  lso, the _USE_32
1980: 42 49 54 5f 54 49 4d 45 5f 54 20 6d 61 63 72 6f  BIT_TIME_T macro
1990: 20 6d 75 73 74 20 61 70 70 65 61 72 20 66 69 72   must appear fir
19a0: 73 74 20 66 6f 72 0a 2a 2a 20 4d 69 6e 47 57 2e  st for.** MinGW.
19b0: 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73 71  .*/.#include "sq
19c0: 6c 69 74 65 33 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20  lite3.h"../*.** 
19d0: 49 6e 63 6c 75 64 65 20 74 68 65 20 63 6f 6e 66  Include the conf
19e0: 69 67 75 72 61 74 69 6f 6e 20 68 65 61 64 65 72  iguration header
19f0: 20 6f 75 74 70 75 74 20 62 79 20 27 63 6f 6e 66   output by 'conf
1a00: 69 67 75 72 65 27 20 69 66 20 77 65 27 72 65 20  igure' if we're 
1a10: 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 61 75 74  using the.** aut
1a20: 6f 63 6f 6e 66 2d 62 61 73 65 64 20 62 75 69 6c  oconf-based buil
1a30: 64 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  d.*/.#if defined
1a40: 28 5f 48 41 56 45 5f 53 51 4c 49 54 45 5f 43 4f  (_HAVE_SQLITE_CO
1a50: 4e 46 49 47 5f 48 29 20 26 26 20 21 64 65 66 69  NFIG_H) && !defi
1a60: 6e 65 64 28 53 51 4c 49 54 45 43 4f 4e 46 49 47  ned(SQLITECONFIG
1a70: 5f 48 29 0a 23 69 6e 63 6c 75 64 65 20 22 63 6f  _H).#include "co
1a80: 6e 66 69 67 2e 68 22 0a 23 64 65 66 69 6e 65 20  nfig.h".#define 
1a90: 53 51 4c 49 54 45 43 4f 4e 46 49 47 5f 48 20 31  SQLITECONFIG_H 1
1aa0: 0a 23 65 6e 64 69 66 0a 0a 23 69 6e 63 6c 75 64  .#endif..#includ
1ab0: 65 20 22 73 71 6c 69 74 65 4c 69 6d 69 74 2e 68  e "sqliteLimit.h
1ac0: 22 0a 0a 2f 2a 20 44 69 73 61 62 6c 65 20 6e 75  "../* Disable nu
1ad0: 69 73 61 6e 63 65 20 77 61 72 6e 69 6e 67 73 20  isance warnings 
1ae0: 6f 6e 20 42 6f 72 6c 61 6e 64 20 63 6f 6d 70 69  on Borland compi
1af0: 6c 65 72 73 20 2a 2f 0a 23 69 66 20 64 65 66 69  lers */.#if defi
1b00: 6e 65 64 28 5f 5f 42 4f 52 4c 41 4e 44 43 5f 5f  ned(__BORLANDC__
1b10: 29 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d  ).#pragma warn -
1b20: 72 63 68 20 2f 2a 20 75 6e 72 65 61 63 68 61 62  rch /* unreachab
1b30: 6c 65 20 63 6f 64 65 20 2a 2f 0a 23 70 72 61 67  le code */.#prag
1b40: 6d 61 20 77 61 72 6e 20 2d 63 63 63 20 2f 2a 20  ma warn -ccc /* 
1b50: 43 6f 6e 64 69 74 69 6f 6e 20 69 73 20 61 6c 77  Condition is alw
1b60: 61 79 73 20 74 72 75 65 20 6f 72 20 66 61 6c 73  ays true or fals
1b70: 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72  e */.#pragma war
1b80: 6e 20 2d 61 75 73 20 2f 2a 20 41 73 73 69 67 6e  n -aus /* Assign
1b90: 65 64 20 76 61 6c 75 65 20 69 73 20 6e 65 76 65  ed value is neve
1ba0: 72 20 75 73 65 64 20 2a 2f 0a 23 70 72 61 67 6d  r used */.#pragm
1bb0: 61 20 77 61 72 6e 20 2d 63 73 75 20 2f 2a 20 43  a warn -csu /* C
1bc0: 6f 6d 70 61 72 69 6e 67 20 73 69 67 6e 65 64 20  omparing signed 
1bd0: 61 6e 64 20 75 6e 73 69 67 6e 65 64 20 2a 2f 0a  and unsigned */.
1be0: 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 73 70  #pragma warn -sp
1bf0: 61 20 2f 2a 20 53 75 73 70 69 63 69 6f 75 73 20  a /* Suspicious 
1c00: 70 6f 69 6e 74 65 72 20 61 72 69 74 68 6d 65 74  pointer arithmet
1c10: 69 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ic */.#endif../*
1c20: 0a 2a 2a 20 49 6e 63 6c 75 64 65 20 73 74 61 6e  .** Include stan
1c30: 64 61 72 64 20 68 65 61 64 65 72 20 66 69 6c 65  dard header file
1c40: 73 20 61 73 20 6e 65 63 65 73 73 61 72 79 0a 2a  s as necessary.*
1c50: 2f 0a 23 69 66 64 65 66 20 48 41 56 45 5f 53 54  /.#ifdef HAVE_ST
1c60: 44 49 4e 54 5f 48 0a 23 69 6e 63 6c 75 64 65 20  DINT_H.#include 
1c70: 3c 73 74 64 69 6e 74 2e 68 3e 0a 23 65 6e 64 69  <stdint.h>.#endi
1c80: 66 0a 23 69 66 64 65 66 20 48 41 56 45 5f 49 4e  f.#ifdef HAVE_IN
1c90: 54 54 59 50 45 53 5f 48 0a 23 69 6e 63 6c 75 64  TTYPES_H.#includ
1ca0: 65 20 3c 69 6e 74 74 79 70 65 73 2e 68 3e 0a 23  e <inttypes.h>.#
1cb0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
1cc0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
1cd0: 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 63 61  s are used to ca
1ce0: 73 74 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 69  st pointers to i
1cf0: 6e 74 65 67 65 72 73 20 61 6e 64 0a 2a 2a 20 69  ntegers and.** i
1d00: 6e 74 65 67 65 72 73 20 74 6f 20 70 6f 69 6e 74  ntegers to point
1d10: 65 72 73 2e 20 20 54 68 65 20 77 61 79 20 79 6f  ers.  The way yo
1d20: 75 20 64 6f 20 74 68 69 73 20 76 61 72 69 65 73  u do this varies
1d30: 20 66 72 6f 6d 20 6f 6e 65 20 63 6f 6d 70 69 6c   from one compil
1d40: 65 72 0a 2a 2a 20 74 6f 20 74 68 65 20 6e 65 78  er.** to the nex
1d50: 74 2c 20 73 6f 20 77 65 20 68 61 76 65 20 64 65  t, so we have de
1d60: 76 65 6c 6f 70 65 64 20 74 68 65 20 66 6f 6c 6c  veloped the foll
1d70: 6f 77 69 6e 67 20 73 65 74 20 6f 66 20 23 69 66  owing set of #if
1d80: 20 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a 20 74   statements.** t
1d90: 6f 20 67 65 6e 65 72 61 74 65 20 61 70 70 72 6f  o generate appro
1da0: 70 72 69 61 74 65 20 6d 61 63 72 6f 73 20 66 6f  priate macros fo
1db0: 72 20 61 20 77 69 64 65 20 72 61 6e 67 65 20 6f  r a wide range o
1dc0: 66 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2a 0a  f compilers..**.
1dd0: 2a 2a 20 54 68 65 20 63 6f 72 72 65 63 74 20 22  ** The correct "
1de0: 41 4e 53 49 22 20 77 61 79 20 74 6f 20 64 6f 20  ANSI" way to do 
1df0: 74 68 69 73 20 69 73 20 74 6f 20 75 73 65 20 74  this is to use t
1e00: 68 65 20 69 6e 74 70 74 72 5f 74 20 74 79 70 65  he intptr_t type
1e10: 2e 0a 2a 2a 20 55 6e 66 6f 72 74 75 6e 61 74 65  ..** Unfortunate
1e20: 6c 79 2c 20 74 68 61 74 20 74 79 70 65 64 65 66  ly, that typedef
1e30: 20 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c   is not availabl
1e40: 65 20 6f 6e 20 61 6c 6c 20 63 6f 6d 70 69 6c 65  e on all compile
1e50: 72 73 2c 20 6f 72 0a 2a 2a 20 69 66 20 69 74 20  rs, or.** if it 
1e60: 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 20 69 74  is available, it
1e70: 20 72 65 71 75 69 72 65 73 20 61 6e 20 23 69 6e   requires an #in
1e80: 63 6c 75 64 65 20 6f 66 20 73 70 65 63 69 66 69  clude of specifi
1e90: 63 20 68 65 61 64 65 72 73 0a 2a 2a 20 74 68 61  c headers.** tha
1ea0: 74 20 76 61 72 79 20 66 72 6f 6d 20 6f 6e 65 20  t vary from one 
1eb0: 6d 61 63 68 69 6e 65 20 74 6f 20 74 68 65 20 6e  machine to the n
1ec0: 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65  ext..**.** Ticke
1ed0: 74 20 23 33 38 36 30 3a 20 20 54 68 65 20 6c 6c  t #3860:  The ll
1ee0: 76 6d 2d 67 63 63 2d 34 2e 32 20 63 6f 6d 70 69  vm-gcc-4.2 compi
1ef0: 6c 65 72 20 66 72 6f 6d 20 41 70 70 6c 65 20 63  ler from Apple c
1f00: 68 6f 6b 65 73 20 6f 6e 0a 2a 2a 20 74 68 65 20  hokes on.** the 
1f10: 28 28 76 6f 69 64 2a 29 26 28 28 63 68 61 72 2a  ((void*)&((char*
1f20: 29 30 29 5b 58 5d 29 20 63 6f 6e 73 74 72 75 63  )0)[X]) construc
1f30: 74 2e 20 20 42 75 74 20 4d 53 56 43 20 63 68 6f  t.  But MSVC cho
1f40: 6b 65 73 20 6f 6e 20 28 28 76 6f 69 64 2a 29 28  kes on ((void*)(
1f50: 58 29 29 2e 0a 2a 2a 20 53 6f 20 77 65 20 68 61  X))..** So we ha
1f60: 76 65 20 74 6f 20 64 65 66 69 6e 65 20 74 68 65  ve to define the
1f70: 20 6d 61 63 72 6f 73 20 69 6e 20 64 69 66 66 65   macros in diffe
1f80: 72 65 6e 74 20 77 61 79 73 20 64 65 70 65 6e 64  rent ways depend
1f90: 69 6e 67 20 6f 6e 20 74 68 65 0a 2a 2a 20 63 6f  ing on the.** co
1fa0: 6d 70 69 6c 65 72 2e 0a 2a 2f 0a 23 69 66 20 64  mpiler..*/.#if d
1fb0: 65 66 69 6e 65 64 28 5f 5f 50 54 52 44 49 46 46  efined(__PTRDIFF
1fc0: 5f 54 59 50 45 5f 5f 29 20 20 2f 2a 20 54 68 69  _TYPE__)  /* Thi
1fd0: 73 20 63 61 73 65 20 73 68 6f 75 6c 64 20 77 6f  s case should wo
1fe0: 72 6b 20 66 6f 72 20 47 43 43 20 2a 2f 0a 23 20  rk for GCC */.# 
1ff0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e  define SQLITE_IN
2000: 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76  T_TO_PTR(X)  ((v
2010: 6f 69 64 2a 29 28 5f 5f 50 54 52 44 49 46 46 5f  oid*)(__PTRDIFF_
2020: 54 59 50 45 5f 5f 29 28 58 29 29 0a 23 20 64 65  TYPE__)(X)).# de
2030: 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f  fine SQLITE_PTR_
2040: 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74  TO_INT(X)  ((int
2050: 29 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45  )(__PTRDIFF_TYPE
2060: 5f 5f 29 28 58 29 29 0a 23 65 6c 69 66 20 21 64  __)(X)).#elif !d
2070: 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29  efined(__GNUC__)
2080: 20 20 20 20 20 20 20 2f 2a 20 57 6f 72 6b 73 20         /* Works 
2090: 66 6f 72 20 63 6f 6d 70 69 6c 65 72 73 20 6f 74  for compilers ot
20a0: 68 65 72 20 74 68 61 6e 20 4c 4c 56 4d 20 2a 2f  her than LLVM */
20b0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
20c0: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20  _INT_TO_PTR(X)  
20d0: 28 28 76 6f 69 64 2a 29 26 28 28 63 68 61 72 2a  ((void*)&((char*
20e0: 29 30 29 5b 58 5d 29 0a 23 20 64 65 66 69 6e 65  )0)[X]).# define
20f0: 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49   SQLITE_PTR_TO_I
2100: 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 28 28  NT(X)  ((int)(((
2110: 63 68 61 72 2a 29 58 29 2d 28 63 68 61 72 2a 29  char*)X)-(char*)
2120: 30 29 29 0a 23 65 6c 69 66 20 64 65 66 69 6e 65  0)).#elif define
2130: 64 28 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 29  d(HAVE_STDINT_H)
2140: 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20 63     /* Use this c
2150: 61 73 65 20 69 66 20 77 65 20 68 61 76 65 20 41  ase if we have A
2160: 4e 53 49 20 68 65 61 64 65 72 73 20 2a 2f 0a 23  NSI headers */.#
2170: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49   define SQLITE_I
2180: 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28  NT_TO_PTR(X)  ((
2190: 76 6f 69 64 2a 29 28 69 6e 74 70 74 72 5f 74 29  void*)(intptr_t)
21a0: 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20 53 51  (X)).# define SQ
21b0: 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28  LITE_PTR_TO_INT(
21c0: 58 29 20 20 28 28 69 6e 74 29 28 69 6e 74 70 74  X)  ((int)(intpt
21d0: 72 5f 74 29 28 58 29 29 0a 23 65 6c 73 65 20 20  r_t)(X)).#else  
21e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f0: 20 20 20 20 20 20 20 20 2f 2a 20 47 65 6e 65 72          /* Gener
2200: 61 74 65 73 20 61 20 77 61 72 6e 69 6e 67 20 2d  ates a warning -
2210: 20 62 75 74 20 69 74 20 61 6c 77 61 79 73 20 77   but it always w
2220: 6f 72 6b 73 20 2a 2f 0a 23 20 64 65 66 69 6e 65  orks */.# define
2230: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
2240: 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a 29 28  TR(X)  ((void*)(
2250: 58 29 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  X)).# define SQL
2260: 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58  ITE_PTR_TO_INT(X
2270: 29 20 20 28 28 69 6e 74 29 28 58 29 29 0a 23 65  )  ((int)(X)).#e
2280: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61  ndif../*.** A ma
2290: 63 72 6f 20 74 6f 20 68 69 6e 74 20 74 6f 20 74  cro to hint to t
22a0: 68 65 20 63 6f 6d 70 69 6c 65 72 20 74 68 61 74  he compiler that
22b0: 20 61 20 66 75 6e 63 74 69 6f 6e 20 73 68 6f 75   a function shou
22c0: 6c 64 20 6e 6f 74 20 62 65 0a 2a 2a 20 69 6e 6c  ld not be.** inl
22d0: 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  ined..*/.#if def
22e0: 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 0a 23  ined(__GNUC__).#
22f0: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
2300: 4e 4f 49 4e 4c 49 4e 45 20 20 5f 5f 61 74 74 72  NOINLINE  __attr
2310: 69 62 75 74 65 5f 5f 28 28 6e 6f 69 6e 6c 69 6e  ibute__((noinlin
2320: 65 29 29 0a 23 65 6c 69 66 20 64 65 66 69 6e 65  e)).#elif define
2330: 64 28 5f 4d 53 43 5f 56 45 52 29 20 26 26 20 5f  d(_MSC_VER) && _
2340: 4d 53 43 5f 56 45 52 3e 3d 31 33 31 30 0a 23 20  MSC_VER>=1310.# 
2350: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e   define SQLITE_N
2360: 4f 49 4e 4c 49 4e 45 20 20 5f 5f 64 65 63 6c 73  OINLINE  __decls
2370: 70 65 63 28 6e 6f 69 6e 6c 69 6e 65 29 0a 23 65  pec(noinline).#e
2380: 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 53 51  lse.#  define SQ
2390: 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 0a 23 65  LITE_NOINLINE.#e
23a0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65  ndif../*.** Make
23b0: 20 73 75 72 65 20 74 68 61 74 20 74 68 65 20 63   sure that the c
23c0: 6f 6d 70 69 6c 65 72 20 69 6e 74 72 69 6e 73 69  ompiler intrinsi
23d0: 63 73 20 77 65 20 64 65 73 69 72 65 20 61 72 65  cs we desire are
23e0: 20 65 6e 61 62 6c 65 64 20 77 68 65 6e 0a 2a 2a   enabled when.**
23f0: 20 63 6f 6d 70 69 6c 69 6e 67 20 77 69 74 68 20   compiling with 
2400: 61 6e 20 61 70 70 72 6f 70 72 69 61 74 65 20 76  an appropriate v
2410: 65 72 73 69 6f 6e 20 6f 66 20 4d 53 56 43 20 75  ersion of MSVC u
2420: 6e 6c 65 73 73 20 70 72 65 76 65 6e 74 65 64 20  nless prevented 
2430: 62 79 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45  by.** the SQLITE
2440: 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49 4e 53  _DISABLE_INTRINS
2450: 49 43 20 64 65 66 69 6e 65 2e 0a 2a 2f 0a 23 69  IC define..*/.#i
2460: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
2470: 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49 4e  E_DISABLE_INTRIN
2480: 53 49 43 29 0a 23 20 20 69 66 20 64 65 66 69 6e  SIC).#  if defin
2490: 65 64 28 5f 4d 53 43 5f 56 45 52 29 20 26 26 20  ed(_MSC_VER) && 
24a0: 5f 4d 53 43 5f 56 45 52 3e 3d 31 34 30 30 0a 23  _MSC_VER>=1400.#
24b0: 20 20 20 20 69 66 20 21 64 65 66 69 6e 65 64 28      if !defined(
24c0: 5f 57 49 4e 33 32 5f 57 43 45 29 0a 23 20 20 20  _WIN32_WCE).#   
24d0: 20 20 20 69 6e 63 6c 75 64 65 20 3c 69 6e 74 72     include <intr
24e0: 69 6e 2e 68 3e 0a 23 20 20 20 20 20 20 70 72 61  in.h>.#      pra
24f0: 67 6d 61 20 69 6e 74 72 69 6e 73 69 63 28 5f 62  gma intrinsic(_b
2500: 79 74 65 73 77 61 70 5f 75 73 68 6f 72 74 29 0a  yteswap_ushort).
2510: 23 20 20 20 20 20 20 70 72 61 67 6d 61 20 69 6e  #      pragma in
2520: 74 72 69 6e 73 69 63 28 5f 62 79 74 65 73 77 61  trinsic(_byteswa
2530: 70 5f 75 6c 6f 6e 67 29 0a 23 20 20 20 20 20 20  p_ulong).#      
2540: 70 72 61 67 6d 61 20 69 6e 74 72 69 6e 73 69 63  pragma intrinsic
2550: 28 5f 62 79 74 65 73 77 61 70 5f 75 69 6e 74 36  (_byteswap_uint6
2560: 34 29 0a 23 20 20 20 20 20 20 70 72 61 67 6d 61  4).#      pragma
2570: 20 69 6e 74 72 69 6e 73 69 63 28 5f 52 65 61 64   intrinsic(_Read
2580: 57 72 69 74 65 42 61 72 72 69 65 72 29 0a 23 20  WriteBarrier).# 
2590: 20 20 20 65 6c 73 65 0a 23 20 20 20 20 20 20 69     else.#      i
25a0: 6e 63 6c 75 64 65 20 3c 63 6d 6e 69 6e 74 72 69  nclude <cmnintri
25b0: 6e 2e 68 3e 0a 23 20 20 20 20 65 6e 64 69 66 0a  n.h>.#    endif.
25c0: 23 20 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  #  endif.#endif.
25d0: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54  ./*.** The SQLIT
25e0: 45 5f 54 48 52 45 41 44 53 41 46 45 20 6d 61 63  E_THREADSAFE mac
25f0: 72 6f 20 6d 75 73 74 20 62 65 20 64 65 66 69 6e  ro must be defin
2600: 65 64 20 61 73 20 30 2c 20 31 2c 20 6f 72 20 32  ed as 0, 1, or 2
2610: 2e 0a 2a 2a 20 30 20 6d 65 61 6e 73 20 6d 75 74  ..** 0 means mut
2620: 65 78 65 73 20 61 72 65 20 70 65 72 6d 61 6e 65  exes are permane
2630: 6e 74 6c 79 20 64 69 73 61 62 6c 65 20 61 6e 64  ntly disable and
2640: 20 74 68 65 20 6c 69 62 72 61 72 79 20 69 73 20   the library is 
2650: 6e 65 76 65 72 0a 2a 2a 20 74 68 72 65 61 64 73  never.** threads
2660: 61 66 65 2e 20 20 31 20 6d 65 61 6e 73 20 74 68  afe.  1 means th
2670: 65 20 6c 69 62 72 61 72 79 20 69 73 20 73 65 72  e library is ser
2680: 69 61 6c 69 7a 65 64 20 77 68 69 63 68 20 69 73  ialized which is
2690: 20 74 68 65 20 68 69 67 68 65 73 74 0a 2a 2a 20   the highest.** 
26a0: 6c 65 76 65 6c 20 6f 66 20 74 68 72 65 61 64 73  level of threads
26b0: 61 66 65 74 79 2e 20 20 32 20 6d 65 61 6e 73 20  afety.  2 means 
26c0: 74 68 65 20 6c 69 62 72 61 72 79 20 69 73 20 6d  the library is m
26d0: 75 6c 74 69 74 68 72 65 61 64 65 64 20 2d 20 6d  ultithreaded - m
26e0: 75 6c 74 69 70 6c 65 0a 2a 2a 20 74 68 72 65 61  ultiple.** threa
26f0: 64 73 20 63 61 6e 20 75 73 65 20 53 51 4c 69 74  ds can use SQLit
2700: 65 20 61 73 20 6c 6f 6e 67 20 61 73 20 6e 6f 20  e as long as no 
2710: 74 77 6f 20 74 68 72 65 61 64 73 20 74 72 79 20  two threads try 
2720: 74 6f 20 75 73 65 20 74 68 65 20 73 61 6d 65 0a  to use the same.
2730: 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ** database conn
2740: 65 63 74 69 6f 6e 20 61 74 20 74 68 65 20 73 61  ection at the sa
2750: 6d 65 20 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f  me time..**.** O
2760: 6c 64 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66  lder versions of
2770: 20 53 51 4c 69 74 65 20 75 73 65 64 20 61 6e 20   SQLite used an 
2780: 6f 70 74 69 6f 6e 61 6c 20 54 48 52 45 41 44 53  optional THREADS
2790: 41 46 45 20 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65  AFE macro..** We
27a0: 20 73 75 70 70 6f 72 74 20 74 68 61 74 20 66 6f   support that fo
27b0: 72 20 6c 65 67 61 63 79 2e 0a 2a 2a 0a 2a 2a 20  r legacy..**.** 
27c0: 54 6f 20 65 6e 73 75 72 65 20 74 68 61 74 20 74  To ensure that t
27d0: 68 65 20 63 6f 72 72 65 63 74 20 76 61 6c 75 65  he correct value
27e0: 20 6f 66 20 22 54 48 52 45 41 44 53 41 46 45 22   of "THREADSAFE"
27f0: 20 69 73 20 72 65 70 6f 72 74 65 64 20 77 68 65   is reported whe
2800: 6e 20 71 75 65 72 79 69 6e 67 0a 2a 2a 20 66 6f  n querying.** fo
2810: 72 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  r compile-time o
2820: 70 74 69 6f 6e 73 20 61 74 20 72 75 6e 74 69 6d  ptions at runtim
2830: 65 20 28 65 2e 67 2e 20 22 50 52 41 47 4d 41 20  e (e.g. "PRAGMA 
2840: 63 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e 73 22  compile_options"
2850: 29 2c 20 74 68 69 73 0a 2a 2a 20 6c 6f 67 69 63  ), this.** logic
2860: 20 69 73 20 70 61 72 74 69 61 6c 6c 79 20 72 65   is partially re
2870: 70 6c 69 63 61 74 65 64 20 69 6e 20 63 74 69 6d  plicated in ctim
2880: 65 2e 63 2e 20 49 66 20 69 74 20 69 73 20 75 70  e.c. If it is up
2890: 64 61 74 65 64 20 68 65 72 65 2c 20 69 74 20 73  dated here, it s
28a0: 68 6f 75 6c 64 0a 2a 2a 20 61 6c 73 6f 20 62 65  hould.** also be
28b0: 20 75 70 64 61 74 65 64 20 74 68 65 72 65 2e 0a   updated there..
28c0: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
28d0: 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46  SQLITE_THREADSAF
28e0: 45 29 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28  E).# if defined(
28f0: 54 48 52 45 41 44 53 41 46 45 29 0a 23 20 20 20  THREADSAFE).#   
2900: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 48  define SQLITE_TH
2910: 52 45 41 44 53 41 46 45 20 54 48 52 45 41 44 53  READSAFE THREADS
2920: 41 46 45 0a 23 20 65 6c 73 65 0a 23 20 20 20 64  AFE.# else.#   d
2930: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 48 52  efine SQLITE_THR
2940: 45 41 44 53 41 46 45 20 31 20 2f 2a 20 49 4d 50  EADSAFE 1 /* IMP
2950: 3a 20 52 2d 30 37 32 37 32 2d 32 32 33 30 39 20  : R-07272-22309 
2960: 2a 2f 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69  */.# endif.#endi
2970: 66 0a 0a 2f 2a 0a 2a 2a 20 50 6f 77 65 72 73 61  f../*.** Powersa
2980: 66 65 20 6f 76 65 72 77 72 69 74 65 20 69 73 20  fe overwrite is 
2990: 6f 6e 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20  on by default.  
29a0: 42 75 74 20 63 61 6e 20 62 65 20 74 75 72 6e 65  But can be turne
29b0: 64 20 6f 66 66 20 75 73 69 6e 67 0a 2a 2a 20 74  d off using.** t
29c0: 68 65 20 2d 44 53 51 4c 49 54 45 5f 50 4f 57 45  he -DSQLITE_POWE
29d0: 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45 3d  RSAFE_OVERWRITE=
29e0: 30 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f  0 command-line o
29f0: 70 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65  ption..*/.#ifnde
2a00: 66 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41  f SQLITE_POWERSA
2a10: 46 45 5f 4f 56 45 52 57 52 49 54 45 0a 23 20 64  FE_OVERWRITE.# d
2a20: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 4f 57  efine SQLITE_POW
2a30: 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45  ERSAFE_OVERWRITE
2a40: 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   1.#endif../*.**
2a50: 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
2a60: 32 35 37 31 35 2d 33 37 30 37 32 20 4d 65 6d 6f  25715-37072 Memo
2a70: 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 74  ry allocation st
2a80: 61 74 69 73 74 69 63 73 20 61 72 65 20 65 6e 61  atistics are ena
2a90: 62 6c 65 64 20 62 79 0a 2a 2a 20 64 65 66 61 75  bled by.** defau
2aa0: 6c 74 20 75 6e 6c 65 73 73 20 53 51 4c 69 74 65  lt unless SQLite
2ab0: 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74   is compiled wit
2ac0: 68 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  h SQLITE_DEFAULT
2ad0: 5f 4d 45 4d 53 54 41 54 55 53 3d 30 20 69 6e 0a  _MEMSTATUS=0 in.
2ae0: 2a 2a 20 77 68 69 63 68 20 63 61 73 65 20 6d 65  ** which case me
2af0: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
2b00: 73 74 61 74 69 73 74 69 63 73 20 61 72 65 20 64  statistics are d
2b10: 69 73 61 62 6c 65 64 20 62 79 20 64 65 66 61 75  isabled by defau
2b20: 6c 74 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  lt..*/.#if !defi
2b30: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 46 41 55  ned(SQLITE_DEFAU
2b40: 4c 54 5f 4d 45 4d 53 54 41 54 55 53 29 0a 23 20  LT_MEMSTATUS).# 
2b50: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
2b60: 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 20  FAULT_MEMSTATUS 
2b70: 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
2b80: 45 78 61 63 74 6c 79 20 6f 6e 65 20 6f 66 20 74  Exactly one of t
2b90: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
2ba0: 72 6f 73 20 6d 75 73 74 20 62 65 20 64 65 66 69  ros must be defi
2bb0: 6e 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a  ned in order to.
2bc0: 2a 2a 20 73 70 65 63 69 66 79 20 77 68 69 63 68  ** specify which
2bd0: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
2be0: 6f 6e 20 73 75 62 73 79 73 74 65 6d 20 74 6f 20  on subsystem to 
2bf0: 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  use..**.**     S
2c00: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
2c10: 4c 4f 43 20 20 20 20 20 20 20 20 20 20 2f 2f 20  LOC          // 
2c20: 55 73 65 20 6e 6f 72 6d 61 6c 20 73 79 73 74 65  Use normal syste
2c30: 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20  m malloc().**   
2c40: 20 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d    SQLITE_WIN32_M
2c50: 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20 20  ALLOC           
2c60: 2f 2f 20 55 73 65 20 57 69 6e 33 32 20 6e 61 74  // Use Win32 nat
2c70: 69 76 65 20 68 65 61 70 20 41 50 49 0a 2a 2a 20  ive heap API.** 
2c80: 20 20 20 20 53 51 4c 49 54 45 5f 5a 45 52 4f 5f      SQLITE_ZERO_
2c90: 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20  MALLOC          
2ca0: 20 20 2f 2f 20 55 73 65 20 61 20 73 74 75 62 20    // Use a stub 
2cb0: 61 6c 6c 6f 63 61 74 6f 72 20 74 68 61 74 20 61  allocator that a
2cc0: 6c 77 61 79 73 20 66 61 69 6c 73 0a 2a 2a 20 20  lways fails.**  
2cd0: 20 20 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42     SQLITE_MEMDEB
2ce0: 55 47 20 20 20 20 20 20 20 20 20 20 20 20 20 20  UG              
2cf0: 20 2f 2f 20 44 65 62 75 67 67 69 6e 67 20 76 65   // Debugging ve
2d00: 72 73 69 6f 6e 20 6f 66 20 73 79 73 74 65 6d 20  rsion of system 
2d10: 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 0a 2a 2a 20 4f  malloc().**.** O
2d20: 6e 20 57 69 6e 64 6f 77 73 2c 20 69 66 20 74 68  n Windows, if th
2d30: 65 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d  e SQLITE_WIN32_M
2d40: 41 4c 4c 4f 43 5f 56 41 4c 49 44 41 54 45 20 6d  ALLOC_VALIDATE m
2d50: 61 63 72 6f 20 69 73 20 64 65 66 69 6e 65 64 20  acro is defined 
2d60: 61 6e 64 20 74 68 65 0a 2a 2a 20 61 73 73 65 72  and the.** asser
2d70: 74 28 29 20 6d 61 63 72 6f 20 69 73 20 65 6e 61  t() macro is ena
2d80: 62 6c 65 64 2c 20 65 61 63 68 20 63 61 6c 6c 20  bled, each call 
2d90: 69 6e 74 6f 20 74 68 65 20 57 69 6e 33 32 20 6e  into the Win32 n
2da0: 61 74 69 76 65 20 68 65 61 70 20 73 75 62 73 79  ative heap subsy
2db0: 73 74 65 6d 0a 2a 2a 20 77 69 6c 6c 20 63 61 75  stem.** will cau
2dc0: 73 65 20 48 65 61 70 56 61 6c 69 64 61 74 65 20  se HeapValidate 
2dd0: 74 6f 20 62 65 20 63 61 6c 6c 65 64 2e 20 20 49  to be called.  I
2de0: 66 20 68 65 61 70 20 76 61 6c 69 64 61 74 69 6f  f heap validatio
2df0: 6e 20 73 68 6f 75 6c 64 20 66 61 69 6c 2c 20 61  n should fail, a
2e00: 6e 0a 2a 2a 20 61 73 73 65 72 74 69 6f 6e 20 77  n.** assertion w
2e10: 69 6c 6c 20 62 65 20 74 72 69 67 67 65 72 65 64  ill be triggered
2e20: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20  ..**.** If none 
2e30: 6f 66 20 74 68 65 20 61 62 6f 76 65 20 61 72 65  of the above are
2e40: 20 64 65 66 69 6e 65 64 2c 20 74 68 65 6e 20 73   defined, then s
2e50: 65 74 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d  et SQLITE_SYSTEM
2e60: 5f 4d 41 4c 4c 4f 43 20 61 73 0a 2a 2a 20 74 68  _MALLOC as.** th
2e70: 65 20 64 65 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69  e default..*/.#i
2e80: 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
2e90: 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20  _SYSTEM_MALLOC) 
2ea0: 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51  \.  + defined(SQ
2eb0: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2ec0: 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64  C) \.  + defined
2ed0: 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c  (SQLITE_ZERO_MAL
2ee0: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
2ef0: 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  ed(SQLITE_MEMDEB
2f00: 55 47 29 3e 31 0a 23 20 65 72 72 6f 72 20 22 54  UG)>1.# error "T
2f10: 77 6f 20 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68  wo or more of th
2f20: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70  e following comp
2f30: 69 6c 65 2d 74 69 6d 65 20 63 6f 6e 66 69 67 75  ile-time configu
2f40: 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a  ration options\.
2f50: 20 61 72 65 20 64 65 66 69 6e 65 64 20 62 75 74   are defined but
2f60: 20 61 74 20 6d 6f 73 74 20 6f 6e 65 20 69 73 20   at most one is 
2f70: 61 6c 6c 6f 77 65 64 3a 5c 0a 20 53 51 4c 49 54  allowed:\. SQLIT
2f80: 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c  E_SYSTEM_MALLOC,
2f90: 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41   SQLITE_WIN32_MA
2fa0: 4c 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 4d 45 4d  LLOC, SQLITE_MEM
2fb0: 44 45 42 55 47 2c 5c 0a 20 53 51 4c 49 54 45 5f  DEBUG,\. SQLITE_
2fc0: 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e  ZERO_MALLOC".#en
2fd0: 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
2fe0: 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41  SQLITE_SYSTEM_MA
2ff0: 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69  LLOC) \.  + defi
3000: 6e 65 64 28 53 51 4c 49 54 45 5f 57 49 4e 33 32  ned(SQLITE_WIN32
3010: 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64  _MALLOC) \.  + d
3020: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 5a 45  efined(SQLITE_ZE
3030: 52 4f 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b  RO_MALLOC) \.  +
3040: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
3050: 4d 45 4d 44 45 42 55 47 29 3d 3d 30 0a 23 20 64  MEMDEBUG)==0.# d
3060: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 59 53  efine SQLITE_SYS
3070: 54 45 4d 5f 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e  TEM_MALLOC 1.#en
3080: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51  dif../*.** If SQ
3090: 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54  LITE_MALLOC_SOFT
30a0: 5f 4c 49 4d 49 54 20 69 73 20 6e 6f 74 20 7a 65  _LIMIT is not ze
30b0: 72 6f 2c 20 74 68 65 6e 20 74 72 79 20 74 6f 20  ro, then try to 
30c0: 6b 65 65 70 20 74 68 65 0a 2a 2a 20 73 69 7a 65  keep the.** size
30d0: 73 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  s of memory allo
30e0: 63 61 74 69 6f 6e 73 20 62 65 6c 6f 77 20 74 68  cations below th
30f0: 69 73 20 76 61 6c 75 65 20 77 68 65 72 65 20 70  is value where p
3100: 6f 73 73 69 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20  ossible..*/.#if 
3110: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
3120: 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49  MALLOC_SOFT_LIMI
3130: 54 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  T).# define SQLI
3140: 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c  TE_MALLOC_SOFT_L
3150: 49 4d 49 54 20 31 30 32 34 0a 23 65 6e 64 69 66  IMIT 1024.#endif
3160: 0a 0a 2f 2a 0a 2a 2a 20 57 65 20 6e 65 65 64 20  ../*.** We need 
3170: 74 6f 20 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e  to define _XOPEN
3180: 5f 53 4f 55 52 43 45 20 61 73 20 66 6f 6c 6c 6f  _SOURCE as follo
3190: 77 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 65  ws in order to e
31a0: 6e 61 62 6c 65 0a 2a 2a 20 72 65 63 75 72 73 69  nable.** recursi
31b0: 76 65 20 6d 75 74 65 78 65 73 20 6f 6e 20 6d 6f  ve mutexes on mo
31c0: 73 74 20 55 6e 69 78 20 73 79 73 74 65 6d 73 20  st Unix systems 
31d0: 61 6e 64 20 66 63 68 6d 6f 64 28 29 20 6f 6e 20  and fchmod() on 
31e0: 4f 70 65 6e 42 53 44 2e 0a 2a 2a 20 42 75 74 20  OpenBSD..** But 
31f0: 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 64 65  _XOPEN_SOURCE de
3200: 66 69 6e 65 20 63 61 75 73 65 73 20 70 72 6f 62  fine causes prob
3210: 6c 65 6d 73 20 66 6f 72 20 4d 61 63 20 4f 53 20  lems for Mac OS 
3220: 58 2c 20 73 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74  X, so omit.** it
3230: 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  ..*/.#if !define
3240: 64 28 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 29  d(_XOPEN_SOURCE)
3250: 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 5f 44   && !defined(__D
3260: 41 52 57 49 4e 5f 5f 29 20 26 26 20 21 64 65 66  ARWIN__) && !def
3270: 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a  ined(__APPLE__).
3280: 23 20 20 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e  #  define _XOPEN
3290: 5f 53 4f 55 52 43 45 20 36 30 30 0a 23 65 6e 64  _SOURCE 600.#end
32a0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 4e 44 45 42 55 47  if../*.** NDEBUG
32b0: 20 61 6e 64 20 53 51 4c 49 54 45 5f 44 45 42 55   and SQLITE_DEBU
32c0: 47 20 61 72 65 20 6f 70 70 6f 73 69 74 65 73 2e  G are opposites.
32d0: 20 20 49 74 20 73 68 6f 75 6c 64 20 61 6c 77 61    It should alwa
32e0: 79 73 20 62 65 20 74 72 75 65 20 74 68 61 74 0a  ys be true that.
32f0: 2a 2a 20 64 65 66 69 6e 65 64 28 4e 44 45 42 55  ** defined(NDEBU
3300: 47 29 3d 3d 21 64 65 66 69 6e 65 64 28 53 51 4c  G)==!defined(SQL
3310: 49 54 45 5f 44 45 42 55 47 29 2e 20 20 49 66 20  ITE_DEBUG).  If 
3320: 74 68 69 73 20 69 73 20 6e 6f 74 20 63 75 72 72  this is not curr
3330: 65 6e 74 6c 79 20 74 72 75 65 2c 0a 2a 2a 20 6d  ently true,.** m
3340: 61 6b 65 20 69 74 20 74 72 75 65 20 62 79 20 64  ake it true by d
3350: 65 66 69 6e 69 6e 67 20 6f 72 20 75 6e 64 65 66  efining or undef
3360: 69 6e 69 6e 67 20 4e 44 45 42 55 47 2e 0a 2a 2a  ining NDEBUG..**
3370: 0a 2a 2a 20 53 65 74 74 69 6e 67 20 4e 44 45 42  .** Setting NDEB
3380: 55 47 20 6d 61 6b 65 73 20 74 68 65 20 63 6f 64  UG makes the cod
3390: 65 20 73 6d 61 6c 6c 65 72 20 61 6e 64 20 66 61  e smaller and fa
33a0: 73 74 65 72 20 62 79 20 64 69 73 61 62 6c 69 6e  ster by disablin
33b0: 67 20 74 68 65 0a 2a 2a 20 61 73 73 65 72 74 28  g the.** assert(
33c0: 29 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  ) statements in 
33d0: 74 68 65 20 63 6f 64 65 2e 20 20 53 6f 20 77 65  the code.  So we
33e0: 20 77 61 6e 74 20 74 68 65 20 64 65 66 61 75 6c   want the defaul
33f0: 74 20 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62  t action.** to b
3400: 65 20 66 6f 72 20 4e 44 45 42 55 47 20 74 6f 20  e for NDEBUG to 
3410: 62 65 20 73 65 74 20 61 6e 64 20 4e 44 45 42 55  be set and NDEBU
3420: 47 20 74 6f 20 62 65 20 75 6e 64 65 66 69 6e 65  G to be undefine
3430: 64 20 6f 6e 6c 79 20 69 66 20 53 51 4c 49 54 45  d only if SQLITE
3440: 5f 44 45 42 55 47 0a 2a 2a 20 69 73 20 73 65 74  _DEBUG.** is set
3450: 2e 20 20 54 68 75 73 20 4e 44 45 42 55 47 20 62  .  Thus NDEBUG b
3460: 65 63 6f 6d 65 73 20 61 6e 20 6f 70 74 2d 69 6e  ecomes an opt-in
3470: 20 72 61 74 68 65 72 20 74 68 61 6e 20 61 6e 20   rather than an 
3480: 6f 70 74 2d 6f 75 74 0a 2a 2a 20 66 65 61 74 75  opt-out.** featu
3490: 72 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  re..*/.#if !defi
34a0: 6e 65 64 28 4e 44 45 42 55 47 29 20 26 26 20 21  ned(NDEBUG) && !
34b0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
34c0: 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 4e  EBUG).# define N
34d0: 44 45 42 55 47 20 31 0a 23 65 6e 64 69 66 0a 23  DEBUG 1.#endif.#
34e0: 69 66 20 64 65 66 69 6e 65 64 28 4e 44 45 42 55  if defined(NDEBU
34f0: 47 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51  G) && defined(SQ
3500: 4c 49 54 45 5f 44 45 42 55 47 29 0a 23 20 75 6e  LITE_DEBUG).# un
3510: 64 65 66 20 4e 44 45 42 55 47 0a 23 65 6e 64 69  def NDEBUG.#endi
3520: 66 0a 0a 2f 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20  f../*.** Enable 
3530: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58  SQLITE_ENABLE_EX
3540: 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69  PLAIN_COMMENTS i
3550: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 69  f SQLITE_DEBUG i
3560: 73 20 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a  s turned on..*/.
3570: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
3580: 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41  ITE_ENABLE_EXPLA
3590: 49 4e 5f 43 4f 4d 4d 45 4e 54 53 29 20 26 26 20  IN_COMMENTS) && 
35a0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
35b0: 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 53  EBUG).# define S
35c0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50  QLITE_ENABLE_EXP
35d0: 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 31 0a  LAIN_COMMENTS 1.
35e0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
35f0: 65 20 74 65 73 74 63 61 73 65 28 29 20 6d 61 63  e testcase() mac
3600: 72 6f 20 69 73 20 75 73 65 64 20 74 6f 20 61 69  ro is used to ai
3610: 64 20 69 6e 20 63 6f 76 65 72 61 67 65 20 74 65  d in coverage te
3620: 73 74 69 6e 67 2e 20 20 57 68 65 6e 0a 2a 2a 20  sting.  When.** 
3630: 64 6f 69 6e 67 20 63 6f 76 65 72 61 67 65 20 74  doing coverage t
3640: 65 73 74 69 6e 67 2c 20 74 68 65 20 63 6f 6e 64  esting, the cond
3650: 69 74 69 6f 6e 20 69 6e 73 69 64 65 20 74 68 65  ition inside the
3660: 20 61 72 67 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20   argument to.** 
3670: 74 65 73 74 63 61 73 65 28 29 20 6d 75 73 74 20  testcase() must 
3680: 62 65 20 65 76 61 6c 75 61 74 65 64 20 62 6f 74  be evaluated bot
3690: 68 20 74 72 75 65 20 61 6e 64 20 66 61 6c 73 65  h true and false
36a0: 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20   in order to.** 
36b0: 67 65 74 20 66 75 6c 6c 20 62 72 61 6e 63 68 20  get full branch 
36c0: 63 6f 76 65 72 61 67 65 2e 20 20 54 68 65 20 74  coverage.  The t
36d0: 65 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f 20  estcase() macro 
36e0: 69 73 20 69 6e 73 65 72 74 65 64 0a 2a 2a 20 74  is inserted.** t
36f0: 6f 20 68 65 6c 70 20 65 6e 73 75 72 65 20 61 64  o help ensure ad
3700: 65 71 75 61 74 65 20 74 65 73 74 20 63 6f 76 65  equate test cove
3710: 72 61 67 65 20 69 6e 20 70 6c 61 63 65 73 20 77  rage in places w
3720: 68 65 72 65 20 73 69 6d 70 6c 65 0a 2a 2a 20 63  here simple.** c
3730: 6f 6e 64 69 74 69 6f 6e 2f 64 65 63 69 73 69 6f  ondition/decisio
3740: 6e 20 63 6f 76 65 72 61 67 65 20 69 73 20 69 6e  n coverage is in
3750: 61 64 65 71 75 61 74 65 2e 20 20 46 6f 72 20 65  adequate.  For e
3760: 78 61 6d 70 6c 65 2c 20 74 65 73 74 63 61 73 65  xample, testcase
3770: 28 29 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73 65  ().** can be use
3780: 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 62  d to make sure b
3790: 6f 75 6e 64 61 72 79 20 76 61 6c 75 65 73 20 61  oundary values a
37a0: 72 65 20 74 65 73 74 65 64 2e 20 20 46 6f 72 0a  re tested.  For.
37b0: 2a 2a 20 62 69 74 6d 61 73 6b 20 74 65 73 74 73  ** bitmask tests
37c0: 2c 20 74 65 73 74 63 61 73 65 28 29 20 63 61 6e  , testcase() can
37d0: 20 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b 65   be used to make
37e0: 20 73 75 72 65 20 65 61 63 68 20 62 69 74 0a 2a   sure each bit.*
37f0: 2a 20 69 73 20 73 69 67 6e 69 66 69 63 61 6e 74  * is significant
3800: 20 61 6e 64 20 75 73 65 64 20 61 74 20 6c 65 61   and used at lea
3810: 73 74 20 6f 6e 63 65 2e 20 20 4f 6e 20 73 77 69  st once.  On swi
3820: 74 63 68 20 73 74 61 74 65 6d 65 6e 74 73 0a 2a  tch statements.*
3830: 2a 20 77 68 65 72 65 20 6d 75 6c 74 69 70 6c 65  * where multiple
3840: 20 63 61 73 65 73 20 67 6f 20 74 6f 20 74 68 65   cases go to the
3850: 20 73 61 6d 65 20 62 6c 6f 63 6b 20 6f 66 20 63   same block of c
3860: 6f 64 65 2c 20 74 65 73 74 63 61 73 65 28 29 0a  ode, testcase().
3870: 2a 2a 20 63 61 6e 20 69 6e 73 75 72 65 20 74 68  ** can insure th
3880: 61 74 20 61 6c 6c 20 63 61 73 65 73 20 61 72 65  at all cases are
3890: 20 65 76 61 6c 75 61 74 65 64 2e 0a 2a 2a 0a 2a   evaluated..**.*
38a0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
38b0: 43 4f 56 45 52 41 47 45 5f 54 45 53 54 0a 20 20  COVERAGE_TEST.  
38c0: 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 76 65  void sqlite3Cove
38d0: 72 61 67 65 28 69 6e 74 29 3b 0a 23 20 64 65 66  rage(int);.# def
38e0: 69 6e 65 20 74 65 73 74 63 61 73 65 28 58 29 20  ine testcase(X) 
38f0: 20 69 66 28 20 58 20 29 7b 20 73 71 6c 69 74 65   if( X ){ sqlite
3900: 33 43 6f 76 65 72 61 67 65 28 5f 5f 4c 49 4e 45  3Coverage(__LINE
3910: 5f 5f 29 3b 20 7d 0a 23 65 6c 73 65 0a 23 20 64  __); }.#else.# d
3920: 65 66 69 6e 65 20 74 65 73 74 63 61 73 65 28 58  efine testcase(X
3930: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
3940: 54 68 65 20 54 45 53 54 4f 4e 4c 59 20 6d 61 63  The TESTONLY mac
3950: 72 6f 20 69 73 20 75 73 65 64 20 74 6f 20 65 6e  ro is used to en
3960: 63 6c 6f 73 65 20 76 61 72 69 61 62 6c 65 20 64  close variable d
3970: 65 63 6c 61 72 61 74 69 6f 6e 73 20 6f 72 0a 2a  eclarations or.*
3980: 2a 20 6f 74 68 65 72 20 62 69 74 73 20 6f 66 20  * other bits of 
3990: 63 6f 64 65 20 74 68 61 74 20 61 72 65 20 6e 65  code that are ne
39a0: 65 64 65 64 20 74 6f 20 73 75 70 70 6f 72 74 20  eded to support 
39b0: 74 68 65 20 61 72 67 75 6d 65 6e 74 73 0a 2a 2a  the arguments.**
39c0: 20 77 69 74 68 69 6e 20 74 65 73 74 63 61 73 65   within testcase
39d0: 28 29 20 61 6e 64 20 61 73 73 65 72 74 28 29 20  () and assert() 
39e0: 6d 61 63 72 6f 73 2e 0a 2a 2f 0a 23 69 66 20 21  macros..*/.#if !
39f0: 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20  defined(NDEBUG) 
3a00: 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
3a10: 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54 29  E_COVERAGE_TEST)
3a20: 0a 23 20 64 65 66 69 6e 65 20 54 45 53 54 4f 4e  .# define TESTON
3a30: 4c 59 28 58 29 20 20 58 0a 23 65 6c 73 65 0a 23  LY(X)  X.#else.#
3a40: 20 64 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59   define TESTONLY
3a50: 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (X).#endif../*.*
3a60: 2a 20 53 6f 6d 65 74 69 6d 65 73 20 77 65 20 6e  * Sometimes we n
3a70: 65 65 64 20 61 20 73 6d 61 6c 6c 20 61 6d 6f 75  eed a small amou
3a80: 6e 74 20 6f 66 20 63 6f 64 65 20 73 75 63 68 20  nt of code such 
3a90: 61 73 20 61 20 76 61 72 69 61 62 6c 65 20 69 6e  as a variable in
3aa0: 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20  itialization.** 
3ab0: 74 6f 20 73 65 74 75 70 20 66 6f 72 20 61 20 6c  to setup for a l
3ac0: 61 74 65 72 20 61 73 73 65 72 74 28 29 20 73 74  ater assert() st
3ad0: 61 74 65 6d 65 6e 74 2e 20 20 57 65 20 64 6f 20  atement.  We do 
3ae0: 6e 6f 74 20 77 61 6e 74 20 74 68 69 73 20 63 6f  not want this co
3af0: 64 65 20 74 6f 0a 2a 2a 20 61 70 70 65 61 72 20  de to.** appear 
3b00: 77 68 65 6e 20 61 73 73 65 72 74 28 29 20 69 73  when assert() is
3b10: 20 64 69 73 61 62 6c 65 64 2e 20 20 54 68 65 20   disabled.  The 
3b20: 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20  following macro 
3b30: 69 73 20 74 68 65 72 65 66 6f 72 65 0a 2a 2a 20  is therefore.** 
3b40: 75 73 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20  used to contain 
3b50: 74 68 61 74 20 73 65 74 75 70 20 63 6f 64 65 2e  that setup code.
3b60: 20 20 54 68 65 20 22 56 56 41 22 20 61 63 72 6f    The "VVA" acro
3b70: 6e 79 6d 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a  nym stands for.*
3b80: 2a 20 22 56 65 72 69 66 69 63 61 74 69 6f 6e 2c  * "Verification,
3b90: 20 56 61 6c 69 64 61 74 69 6f 6e 2c 20 61 6e 64   Validation, and
3ba0: 20 41 63 63 72 65 64 69 74 61 74 69 6f 6e 22 2e   Accreditation".
3bb0: 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
3bc0: 2c 20 74 68 65 0a 2a 2a 20 63 6f 64 65 20 77 69  , the.** code wi
3bd0: 74 68 69 6e 20 56 56 41 5f 4f 4e 4c 59 28 29 20  thin VVA_ONLY() 
3be0: 77 69 6c 6c 20 6f 6e 6c 79 20 72 75 6e 20 64 75  will only run du
3bf0: 72 69 6e 67 20 76 65 72 69 66 69 63 61 74 69 6f  ring verificatio
3c00: 6e 20 70 72 6f 63 65 73 73 65 73 2e 0a 2a 2f 0a  n processes..*/.
3c10: 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 23  #ifndef NDEBUG.#
3c20: 20 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59   define VVA_ONLY
3c30: 28 58 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64  (X)  X.#else.# d
3c40: 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58  efine VVA_ONLY(X
3c50: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
3c60: 54 68 65 20 41 4c 57 41 59 53 20 61 6e 64 20 4e  The ALWAYS and N
3c70: 45 56 45 52 20 6d 61 63 72 6f 73 20 73 75 72 72  EVER macros surr
3c80: 6f 75 6e 64 20 62 6f 6f 6c 65 61 6e 20 65 78 70  ound boolean exp
3c90: 72 65 73 73 69 6f 6e 73 20 77 68 69 63 68 0a 2a  ressions which.*
3ca0: 2a 20 61 72 65 20 69 6e 74 65 6e 64 65 64 20 74  * are intended t
3cb0: 6f 20 61 6c 77 61 79 73 20 62 65 20 74 72 75 65  o always be true
3cc0: 20 6f 72 20 66 61 6c 73 65 2c 20 72 65 73 70 65   or false, respe
3cd0: 63 74 69 76 65 6c 79 2e 20 20 53 75 63 68 0a 2a  ctively.  Such.*
3ce0: 2a 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63 6f  * expressions co
3cf0: 75 6c 64 20 62 65 20 6f 6d 69 74 74 65 64 20 66  uld be omitted f
3d00: 72 6f 6d 20 74 68 65 20 63 6f 64 65 20 63 6f 6d  rom the code com
3d10: 70 6c 65 74 65 6c 79 2e 20 20 42 75 74 20 74 68  pletely.  But th
3d20: 65 79 0a 2a 2a 20 61 72 65 20 69 6e 63 6c 75 64  ey.** are includ
3d30: 65 64 20 69 6e 20 61 20 66 65 77 20 63 61 73 65  ed in a few case
3d40: 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e  s in order to en
3d50: 68 61 6e 63 65 20 74 68 65 20 72 65 73 69 6c 69  hance the resili
3d60: 65 6e 63 65 0a 2a 2a 20 6f 66 20 53 51 4c 69 74  ence.** of SQLit
3d70: 65 20 74 6f 20 75 6e 65 78 70 65 63 74 65 64 20  e to unexpected 
3d80: 62 65 68 61 76 69 6f 72 20 2d 20 74 6f 20 6d 61  behavior - to ma
3d90: 6b 65 20 74 68 65 20 63 6f 64 65 20 22 73 65 6c  ke the code "sel
3da0: 66 2d 68 65 61 6c 69 6e 67 22 0a 2a 2a 20 6f 72  f-healing".** or
3db0: 20 22 64 75 63 74 69 6c 65 22 20 72 61 74 68 65   "ductile" rathe
3dc0: 72 20 74 68 61 6e 20 62 65 69 6e 67 20 22 62 72  r than being "br
3dd0: 69 74 74 6c 65 22 20 61 6e 64 20 63 72 61 73 68  ittle" and crash
3de0: 69 6e 67 20 61 74 20 74 68 65 20 66 69 72 73 74  ing at the first
3df0: 0a 2a 2a 20 68 69 6e 74 20 6f 66 20 75 6e 70 6c  .** hint of unpl
3e00: 61 6e 6e 65 64 20 62 65 68 61 76 69 6f 72 2e 0a  anned behavior..
3e10: 2a 2a 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77  **.** In other w
3e20: 6f 72 64 73 2c 20 41 4c 57 41 59 53 20 61 6e 64  ords, ALWAYS and
3e30: 20 4e 45 56 45 52 20 61 72 65 20 61 64 64 65 64   NEVER are added
3e40: 20 66 6f 72 20 64 65 66 65 6e 73 69 76 65 20 63   for defensive c
3e50: 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20  ode..**.** When 
3e60: 64 6f 69 6e 67 20 63 6f 76 65 72 61 67 65 20 74  doing coverage t
3e70: 65 73 74 69 6e 67 20 41 4c 57 41 59 53 20 61 6e  esting ALWAYS an
3e80: 64 20 4e 45 56 45 52 20 61 72 65 20 68 61 72 64  d NEVER are hard
3e90: 2d 63 6f 64 65 64 20 74 6f 0a 2a 2a 20 62 65 20  -coded to.** be 
3ea0: 74 72 75 65 20 61 6e 64 20 66 61 6c 73 65 20 73  true and false s
3eb0: 6f 20 74 68 61 74 20 74 68 65 20 75 6e 72 65 61  o that the unrea
3ec0: 63 68 61 62 6c 65 20 63 6f 64 65 20 74 68 65 79  chable code they
3ed0: 20 73 70 65 63 69 66 79 20 77 69 6c 6c 0a 2a 2a   specify will.**
3ee0: 20 6e 6f 74 20 62 65 20 63 6f 75 6e 74 65 64 20   not be counted 
3ef0: 61 73 20 75 6e 74 65 73 74 65 64 20 63 6f 64 65  as untested code
3f00: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
3f10: 28 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45  (SQLITE_COVERAGE
3f20: 5f 54 45 53 54 29 20 7c 7c 20 64 65 66 69 6e 65  _TEST) || define
3f30: 64 28 53 51 4c 49 54 45 5f 4d 55 54 41 54 49 4f  d(SQLITE_MUTATIO
3f40: 4e 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65  N_TEST).# define
3f50: 20 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20   ALWAYS(X)      
3f60: 28 31 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56  (1).# define NEV
3f70: 45 52 28 58 29 20 20 20 20 20 20 20 28 30 29 0a  ER(X)       (0).
3f80: 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28 4e  #elif !defined(N
3f90: 44 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20  DEBUG).# define 
3fa0: 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20 28  ALWAYS(X)      (
3fb0: 28 58 29 3f 31 3a 28 61 73 73 65 72 74 28 30 29  (X)?1:(assert(0)
3fc0: 2c 30 29 29 0a 23 20 64 65 66 69 6e 65 20 4e 45  ,0)).# define NE
3fd0: 56 45 52 28 58 29 20 20 20 20 20 20 20 28 28 58  VER(X)       ((X
3fe0: 29 3f 28 61 73 73 65 72 74 28 30 29 2c 31 29 3a  )?(assert(0),1):
3ff0: 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  0).#else.# defin
4000: 65 20 41 4c 57 41 59 53 28 58 29 20 20 20 20 20  e ALWAYS(X)     
4010: 20 28 58 29 0a 23 20 64 65 66 69 6e 65 20 4e 45   (X).# define NE
4020: 56 45 52 28 58 29 20 20 20 20 20 20 20 28 58 29  VER(X)       (X)
4030: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53  .#endif../*.** S
4040: 6f 6d 65 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75  ome malloc failu
4050: 72 65 73 20 61 72 65 20 6f 6e 6c 79 20 70 6f 73  res are only pos
4060: 73 69 62 6c 65 20 69 66 20 53 51 4c 49 54 45 5f  sible if SQLITE_
4070: 54 45 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52  TEST_REALLOC_STR
4080: 45 53 53 20 69 73 0a 2a 2a 20 64 65 66 69 6e 65  ESS is.** define
4090: 64 2e 20 20 57 65 20 6e 65 65 64 20 74 6f 20 64  d.  We need to d
40a0: 65 66 65 6e 64 20 61 67 61 69 6e 73 74 20 74 68  efend against th
40b0: 6f 73 65 20 66 61 69 6c 75 72 65 73 20 77 68 65  ose failures whe
40c0: 6e 20 74 65 73 74 69 6e 67 20 77 69 74 68 0a 2a  n testing with.*
40d0: 2a 20 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45  * SQLITE_TEST_RE
40e0: 41 4c 4c 4f 43 5f 53 54 52 45 53 53 2c 20 62 75  ALLOC_STRESS, bu
40f0: 74 20 77 65 20 64 6f 6e 27 74 20 77 61 6e 74 20  t we don't want 
4100: 74 68 65 20 75 6e 72 65 61 63 68 61 62 6c 65 20  the unreachable 
4110: 62 72 61 6e 63 68 65 73 0a 2a 2a 20 64 75 72 69  branches.** duri
4120: 6e 67 20 61 20 6e 6f 72 6d 61 6c 20 62 75 69 6c  ng a normal buil
4130: 64 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  d.  The followin
4140: 67 20 6d 61 63 72 6f 20 63 61 6e 20 62 65 20 75  g macro can be u
4150: 73 65 64 20 74 6f 20 64 69 73 61 62 6c 65 20 74  sed to disable t
4160: 65 73 74 73 0a 2a 2a 20 74 68 61 74 20 61 72 65  ests.** that are
4170: 20 61 6c 77 61 79 73 20 66 61 6c 73 65 20 65 78   always false ex
4180: 63 65 70 74 20 77 68 65 6e 20 53 51 4c 49 54 45  cept when SQLITE
4190: 5f 54 45 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54  _TEST_REALLOC_ST
41a0: 52 45 53 53 20 69 73 20 73 65 74 2e 0a 2a 2f 0a  RESS is set..*/.
41b0: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
41c0: 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c 4f 43 5f  TE_TEST_REALLOC_
41d0: 53 54 52 45 53 53 29 0a 23 20 64 65 66 69 6e 65  STRESS).# define
41e0: 20 4f 4e 4c 59 5f 49 46 5f 52 45 41 4c 4c 4f 43   ONLY_IF_REALLOC
41f0: 5f 53 54 52 45 53 53 28 58 29 20 20 28 58 29 0a  _STRESS(X)  (X).
4200: 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28 4e  #elif !defined(N
4210: 44 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20  DEBUG).# define 
4220: 4f 4e 4c 59 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f  ONLY_IF_REALLOC_
4230: 53 54 52 45 53 53 28 58 29 20 20 28 28 58 29 3f  STRESS(X)  ((X)?
4240: 28 61 73 73 65 72 74 28 30 29 2c 31 29 3a 30 29  (assert(0),1):0)
4250: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
4260: 4f 4e 4c 59 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f  ONLY_IF_REALLOC_
4270: 53 54 52 45 53 53 28 58 29 20 20 28 30 29 0a 23  STRESS(X)  (0).#
4280: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 63  endif../*.** Dec
4290: 6c 61 72 61 74 69 6f 6e 73 20 75 73 65 64 20 66  larations used f
42a0: 6f 72 20 74 72 61 63 69 6e 67 20 74 68 65 20 6f  or tracing the o
42b0: 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d 20  perating system 
42c0: 69 6e 74 65 72 66 61 63 65 73 2e 0a 2a 2f 0a 23  interfaces..*/.#
42d0: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
42e0: 45 5f 46 4f 52 43 45 5f 4f 53 5f 54 52 41 43 45  E_FORCE_OS_TRACE
42f0: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  ) || defined(SQL
4300: 49 54 45 5f 54 45 53 54 29 20 7c 7c 20 5c 0a 20  ITE_TEST) || \. 
4310: 20 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49     (defined(SQLI
4320: 54 45 5f 44 45 42 55 47 29 20 26 26 20 53 51 4c  TE_DEBUG) && SQL
4330: 49 54 45 5f 4f 53 5f 57 49 4e 29 0a 20 20 65 78  ITE_OS_WIN).  ex
4340: 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33  tern int sqlite3
4350: 4f 53 54 72 61 63 65 3b 0a 23 20 64 65 66 69 6e  OSTrace;.# defin
4360: 65 20 4f 53 54 52 41 43 45 28 58 29 20 20 20 20  e OSTRACE(X)    
4370: 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
4380: 33 4f 53 54 72 61 63 65 20 29 20 73 71 6c 69 74  3OSTrace ) sqlit
4390: 65 33 44 65 62 75 67 50 72 69 6e 74 66 20 58 0a  e3DebugPrintf X.
43a0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
43b0: 48 41 56 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65  HAVE_OS_TRACE.#e
43c0: 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 4f 53 54  lse.# define OST
43d0: 52 41 43 45 28 58 29 0a 23 20 75 6e 64 65 66 20  RACE(X).# undef 
43e0: 20 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f   SQLITE_HAVE_OS_
43f0: 54 52 41 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a  TRACE.#endif../*
4400: 0a 2a 2a 20 49 73 20 74 68 65 20 73 71 6c 69 74  .** Is the sqlit
4410: 65 33 45 72 72 4e 61 6d 65 28 29 20 66 75 6e 63  e3ErrName() func
4420: 74 69 6f 6e 20 6e 65 65 64 65 64 20 69 6e 20 74  tion needed in t
4430: 68 65 20 62 75 69 6c 64 3f 20 20 43 75 72 72 65  he build?  Curre
4440: 6e 74 6c 79 2c 0a 2a 2a 20 69 74 20 69 73 20 6e  ntly,.** it is n
4450: 65 65 64 65 64 20 62 79 20 22 6d 75 74 65 78 5f  eeded by "mutex_
4460: 77 33 32 2e 63 22 20 28 77 68 65 6e 20 64 65 62  w32.c" (when deb
4470: 75 67 67 69 6e 67 29 2c 20 22 6f 73 5f 77 69 6e  ugging), "os_win
4480: 2e 63 22 20 28 77 68 65 6e 0a 2a 2a 20 4f 53 54  .c" (when.** OST
4490: 52 41 43 45 20 69 73 20 65 6e 61 62 6c 65 64 29  RACE is enabled)
44a0: 2c 20 61 6e 64 20 62 79 20 73 65 76 65 72 61 6c  , and by several
44b0: 20 22 74 65 73 74 2a 2e 63 22 20 66 69 6c 65 73   "test*.c" files
44c0: 20 28 77 68 69 63 68 20 61 72 65 0a 2a 2a 20 63   (which are.** c
44d0: 6f 6d 70 69 6c 65 64 20 75 73 69 6e 67 20 53 51  ompiled using SQ
44e0: 4c 49 54 45 5f 54 45 53 54 29 2e 0a 2a 2f 0a 23  LITE_TEST)..*/.#
44f0: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
4500: 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41 43 45 29  E_HAVE_OS_TRACE)
4510: 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
4520: 54 45 5f 54 45 53 54 29 20 7c 7c 20 5c 0a 20 20  TE_TEST) || \.  
4530: 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54    (defined(SQLIT
4540: 45 5f 44 45 42 55 47 29 20 26 26 20 53 51 4c 49  E_DEBUG) && SQLI
4550: 54 45 5f 4f 53 5f 57 49 4e 29 0a 23 20 64 65 66  TE_OS_WIN).# def
4560: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 45 45 44 5f  ine SQLITE_NEED_
4570: 45 52 52 5f 4e 41 4d 45 0a 23 65 6c 73 65 0a 23  ERR_NAME.#else.#
4580: 20 75 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 4e   undef  SQLITE_N
4590: 45 45 44 5f 45 52 52 5f 4e 41 4d 45 0a 23 65 6e  EED_ERR_NAME.#en
45a0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54  dif../*.** SQLIT
45b0: 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e  E_ENABLE_EXPLAIN
45c0: 5f 43 4f 4d 4d 45 4e 54 53 20 69 73 20 69 6e 63  _COMMENTS is inc
45d0: 6f 6d 70 61 74 69 62 6c 65 20 77 69 74 68 20 53  ompatible with S
45e0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41  QLITE_OMIT_EXPLA
45f0: 49 4e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  IN.*/.#ifdef SQL
4600: 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e  ITE_OMIT_EXPLAIN
4610: 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f  .# undef SQLITE_
4620: 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43  ENABLE_EXPLAIN_C
4630: 4f 4d 4d 45 4e 54 53 0a 23 65 6e 64 69 66 0a 0a  OMMENTS.#endif..
4640: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75  /*.** Return tru
4650: 65 20 28 6e 6f 6e 2d 7a 65 72 6f 29 20 69 66 20  e (non-zero) if 
4660: 74 68 65 20 69 6e 70 75 74 20 69 73 20 61 6e 20  the input is an 
4670: 69 6e 74 65 67 65 72 20 74 68 61 74 20 69 73 20  integer that is 
4680: 74 6f 6f 20 6c 61 72 67 65 0a 2a 2a 20 74 6f 20  too large.** to 
4690: 66 69 74 20 69 6e 20 33 32 2d 62 69 74 73 2e 20  fit in 32-bits. 
46a0: 20 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75   This macro is u
46b0: 73 65 64 20 69 6e 73 69 64 65 20 6f 66 20 76 61  sed inside of va
46c0: 72 69 6f 75 73 20 74 65 73 74 63 61 73 65 28 29  rious testcase()
46d0: 0a 2a 2a 20 6d 61 63 72 6f 73 20 74 6f 20 76 65  .** macros to ve
46e0: 72 69 66 79 20 74 68 61 74 20 77 65 20 68 61 76  rify that we hav
46f0: 65 20 74 65 73 74 65 64 20 53 51 4c 69 74 65 20  e tested SQLite 
4700: 66 6f 72 20 6c 61 72 67 65 2d 66 69 6c 65 20 73  for large-file s
4710: 75 70 70 6f 72 74 2e 0a 2a 2f 0a 23 64 65 66 69  upport..*/.#defi
4720: 6e 65 20 49 53 5f 42 49 47 5f 49 4e 54 28 58 29  ne IS_BIG_INT(X)
4730: 20 20 28 28 28 58 29 26 7e 28 69 36 34 29 30 78    (((X)&~(i64)0x
4740: 66 66 66 66 66 66 66 66 29 21 3d 30 29 0a 0a 2f  ffffffff)!=0)../
4750: 2a 0a 2a 2a 20 54 68 65 20 6d 61 63 72 6f 20 75  *.** The macro u
4760: 6e 6c 69 6b 65 6c 79 28 29 20 69 73 20 61 20 68  nlikely() is a h
4770: 69 6e 74 20 74 68 61 74 20 73 75 72 72 6f 75 6e  int that surroun
4780: 64 73 20 61 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20  ds a boolean.** 
4790: 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20  expression that 
47a0: 69 73 20 75 73 75 61 6c 6c 79 20 66 61 6c 73 65  is usually false
47b0: 2e 20 20 4d 61 63 72 6f 20 6c 69 6b 65 6c 79 28  .  Macro likely(
47c0: 29 20 73 75 72 72 6f 75 6e 64 73 0a 2a 2a 20 61  ) surrounds.** a
47d0: 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73   boolean express
47e0: 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75 61  ion that is usua
47f0: 6c 6c 79 20 74 72 75 65 2e 20 20 54 68 65 73 65  lly true.  These
4800: 20 68 69 6e 74 73 20 63 6f 75 6c 64 2c 0a 2a 2a   hints could,.**
4810: 20 69 6e 20 74 68 65 6f 72 79 2c 20 62 65 20 75   in theory, be u
4820: 73 65 64 20 62 79 20 74 68 65 20 63 6f 6d 70 69  sed by the compi
4830: 6c 65 72 20 74 6f 20 67 65 6e 65 72 61 74 65 20  ler to generate 
4840: 62 65 74 74 65 72 20 63 6f 64 65 2c 20 62 75 74  better code, but
4850: 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 74 68  .** currently th
4860: 65 79 20 61 72 65 20 6a 75 73 74 20 63 6f 6d 6d  ey are just comm
4870: 65 6e 74 73 20 66 6f 72 20 68 75 6d 61 6e 20 72  ents for human r
4880: 65 61 64 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69  eaders..*/.#defi
4890: 6e 65 20 6c 69 6b 65 6c 79 28 58 29 20 20 20 20  ne likely(X)    
48a0: 28 58 29 0a 23 64 65 66 69 6e 65 20 75 6e 6c 69  (X).#define unli
48b0: 6b 65 6c 79 28 58 29 20 20 28 58 29 0a 0a 23 69  kely(X)  (X)..#i
48c0: 6e 63 6c 75 64 65 20 22 68 61 73 68 2e 68 22 0a  nclude "hash.h".
48d0: 23 69 6e 63 6c 75 64 65 20 22 70 61 72 73 65 2e  #include "parse.
48e0: 68 22 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64  h".#include <std
48f0: 69 6f 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  io.h>.#include <
4900: 73 74 64 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c 75  stdlib.h>.#inclu
4910: 64 65 20 3c 73 74 72 69 6e 67 2e 68 3e 0a 23 69  de <string.h>.#i
4920: 6e 63 6c 75 64 65 20 3c 61 73 73 65 72 74 2e 68  nclude <assert.h
4930: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 64  >.#include <stdd
4940: 65 66 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 55 73 65  ef.h>../*.** Use
4950: 20 61 20 6d 61 63 72 6f 20 74 6f 20 72 65 70 6c   a macro to repl
4960: 61 63 65 20 6d 65 6d 63 70 79 28 29 20 69 66 20  ace memcpy() if 
4970: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 53 51  compiled with SQ
4980: 4c 49 54 45 5f 49 4e 4c 49 4e 45 5f 4d 45 4d 43  LITE_INLINE_MEMC
4990: 50 59 2e 0a 2a 2a 20 54 68 69 73 20 61 6c 6c 6f  PY..** This allo
49a0: 77 73 20 62 65 74 74 65 72 20 6d 65 61 73 75 72  ws better measur
49b0: 65 6d 65 6e 74 73 20 6f 66 20 77 68 65 72 65 20  ements of where 
49c0: 6d 65 6d 63 70 79 28 29 20 69 73 20 75 73 65 64  memcpy() is used
49d0: 20 77 68 65 6e 20 72 75 6e 6e 69 6e 67 0a 2a 2a   when running.**
49e0: 20 63 61 63 68 65 67 72 69 6e 64 2e 20 20 42 75   cachegrind.  Bu
49f0: 74 20 74 68 69 73 20 6d 61 63 72 6f 20 76 65 72  t this macro ver
4a00: 73 69 6f 6e 20 6f 66 20 6d 65 6d 63 70 79 28 29  sion of memcpy()
4a10: 20 69 73 20 76 65 72 79 20 73 6c 6f 77 20 73 6f   is very slow so
4a20: 20 69 74 0a 2a 2a 20 73 68 6f 75 6c 64 20 6e 6f   it.** should no
4a30: 74 20 62 65 20 75 73 65 64 20 69 6e 20 70 72 6f  t be used in pro
4a40: 64 75 63 74 69 6f 6e 2e 20 20 54 68 69 73 20 69  duction.  This i
4a50: 73 20 61 20 70 65 72 66 6f 72 6d 61 6e 63 65 20  s a performance 
4a60: 6d 65 61 73 75 72 65 6d 65 6e 74 0a 2a 2a 20 68  measurement.** h
4a70: 61 63 6b 20 6f 6e 6c 79 2e 0a 2a 2f 0a 23 69 66  ack only..*/.#if
4a80: 64 65 66 20 53 51 4c 49 54 45 5f 49 4e 4c 49 4e  def SQLITE_INLIN
4a90: 45 5f 4d 45 4d 43 50 59 0a 23 20 64 65 66 69 6e  E_MEMCPY.# defin
4aa0: 65 20 6d 65 6d 63 70 79 28 44 2c 53 2c 4e 29 20  e memcpy(D,S,N) 
4ab0: 7b 63 68 61 72 2a 78 78 64 3d 28 63 68 61 72 2a  {char*xxd=(char*
4ac0: 29 28 44 29 3b 63 6f 6e 73 74 20 63 68 61 72 2a  )(D);const char*
4ad0: 78 78 73 3d 28 63 6f 6e 73 74 20 63 68 61 72 2a  xxs=(const char*
4ae0: 29 28 53 29 3b 5c 0a 20 20 20 20 20 20 20 20 20  )(S);\.         
4af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
4b00: 6e 74 20 78 78 6e 3d 28 4e 29 3b 77 68 69 6c 65  nt xxn=(N);while
4b10: 28 78 78 6e 2d 2d 3e 30 29 2a 28 78 78 64 2b 2b  (xxn-->0)*(xxd++
4b20: 29 3d 2a 28 78 78 73 2b 2b 29 3b 7d 0a 23 65 6e  )=*(xxs++);}.#en
4b30: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 63 6f  dif../*.** If co
4b40: 6d 70 69 6c 69 6e 67 20 66 6f 72 20 61 20 70 72  mpiling for a pr
4b50: 6f 63 65 73 73 6f 72 20 74 68 61 74 20 6c 61 63  ocessor that lac
4b60: 6b 73 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e  ks floating poin
4b70: 74 20 73 75 70 70 6f 72 74 2c 0a 2a 2a 20 73 75  t support,.** su
4b80: 62 73 74 69 74 75 74 65 20 69 6e 74 65 67 65 72  bstitute integer
4b90: 20 66 6f 72 20 66 6c 6f 61 74 69 6e 67 2d 70 6f   for floating-po
4ba0: 69 6e 74 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  int.*/.#ifdef SQ
4bb0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
4bc0: 4e 47 5f 50 4f 49 4e 54 0a 23 20 64 65 66 69 6e  NG_POINT.# defin
4bd0: 65 20 64 6f 75 62 6c 65 20 73 71 6c 69 74 65 5f  e double sqlite_
4be0: 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20 66  int64.# define f
4bf0: 6c 6f 61 74 20 73 71 6c 69 74 65 5f 69 6e 74 36  loat sqlite_int6
4c00: 34 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44  4.# define LONGD
4c10: 4f 55 42 4c 45 5f 54 59 50 45 20 73 71 6c 69 74  OUBLE_TYPE sqlit
4c20: 65 5f 69 6e 74 36 34 0a 23 20 69 66 6e 64 65 66  e_int64.# ifndef
4c30: 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a   SQLITE_BIG_DBL.
4c40: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
4c50: 45 5f 42 49 47 5f 44 42 4c 20 28 28 28 73 71 6c  E_BIG_DBL (((sql
4c60: 69 74 65 33 5f 69 6e 74 36 34 29 31 29 3c 3c 35  ite3_int64)1)<<5
4c70: 30 29 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66  0).# endif.# def
4c80: 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ine SQLITE_OMIT_
4c90: 44 41 54 45 54 49 4d 45 5f 46 55 4e 43 53 20 31  DATETIME_FUNCS 1
4ca0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
4cb0: 5f 4f 4d 49 54 5f 54 52 41 43 45 20 31 0a 23 20  _OMIT_TRACE 1.# 
4cc0: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 49 58  undef SQLITE_MIX
4cd0: 45 44 5f 45 4e 44 49 41 4e 5f 36 34 42 49 54 5f  ED_ENDIAN_64BIT_
4ce0: 46 4c 4f 41 54 0a 23 20 75 6e 64 65 66 20 53 51  FLOAT.# undef SQ
4cf0: 4c 49 54 45 5f 48 41 56 45 5f 49 53 4e 41 4e 0a  LITE_HAVE_ISNAN.
4d00: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
4d10: 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20  QLITE_BIG_DBL.# 
4d20: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
4d30: 47 5f 44 42 4c 20 28 31 65 39 39 29 0a 23 65 6e  G_DBL (1e99).#en
4d40: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54 5f  dif../*.** OMIT_
4d50: 54 45 4d 50 44 42 20 69 73 20 73 65 74 20 74 6f  TEMPDB is set to
4d60: 20 31 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49   1 if SQLITE_OMI
4d70: 54 5f 54 45 4d 50 44 42 20 69 73 20 64 65 66 69  T_TEMPDB is defi
4d80: 6e 65 64 2c 20 6f 72 20 30 0a 2a 2a 20 61 66 74  ned, or 0.** aft
4d90: 65 72 77 61 72 64 2e 20 48 61 76 69 6e 67 20 74  erward. Having t
4da0: 68 69 73 20 6d 61 63 72 6f 20 61 6c 6c 6f 77 73  his macro allows
4db0: 20 75 73 20 74 6f 20 63 61 75 73 65 20 74 68 65   us to cause the
4dc0: 20 43 20 63 6f 6d 70 69 6c 65 72 0a 2a 2a 20 74   C compiler.** t
4dd0: 6f 20 6f 6d 69 74 20 63 6f 64 65 20 75 73 65 64  o omit code used
4de0: 20 62 79 20 54 45 4d 50 20 74 61 62 6c 65 73 20   by TEMP tables 
4df0: 77 69 74 68 6f 75 74 20 6d 65 73 73 79 20 23 69  without messy #i
4e00: 66 6e 64 65 66 20 73 74 61 74 65 6d 65 6e 74 73  fndef statements
4e10: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
4e20: 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 0a 23  TE_OMIT_TEMPDB.#
4e30: 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50  define OMIT_TEMP
4e40: 44 42 20 31 0a 23 65 6c 73 65 0a 23 64 65 66 69  DB 1.#else.#defi
4e50: 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 30  ne OMIT_TEMPDB 0
4e60: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
4e70: 68 65 20 22 66 69 6c 65 20 66 6f 72 6d 61 74 22  he "file format"
4e80: 20 6e 75 6d 62 65 72 20 69 73 20 61 6e 20 69 6e   number is an in
4e90: 74 65 67 65 72 20 74 68 61 74 20 69 73 20 69 6e  teger that is in
4ea0: 63 72 65 6d 65 6e 74 65 64 20 77 68 65 6e 65 76  cremented whenev
4eb0: 65 72 0a 2a 2a 20 74 68 65 20 56 44 42 45 2d 6c  er.** the VDBE-l
4ec0: 65 76 65 6c 20 66 69 6c 65 20 66 6f 72 6d 61 74  evel file format
4ed0: 20 63 68 61 6e 67 65 73 2e 20 20 54 68 65 20 66   changes.  The f
4ee0: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
4ef0: 64 65 66 69 6e 65 20 74 68 65 0a 2a 2a 20 74 68  define the.** th
4f00: 65 20 64 65 66 61 75 6c 74 20 66 69 6c 65 20 66  e default file f
4f10: 6f 72 6d 61 74 20 66 6f 72 20 6e 65 77 20 64 61  ormat for new da
4f20: 74 61 62 61 73 65 73 20 61 6e 64 20 74 68 65 20  tabases and the 
4f30: 6d 61 78 69 6d 75 6d 20 66 69 6c 65 20 66 6f 72  maximum file for
4f40: 6d 61 74 0a 2a 2a 20 74 68 61 74 20 74 68 65 20  mat.** that the 
4f50: 6c 69 62 72 61 72 79 20 63 61 6e 20 72 65 61 64  library can read
4f60: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
4f70: 49 54 45 5f 4d 41 58 5f 46 49 4c 45 5f 46 4f 52  ITE_MAX_FILE_FOR
4f80: 4d 41 54 20 34 0a 23 69 66 6e 64 65 66 20 53 51  MAT 4.#ifndef SQ
4f90: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c  LITE_DEFAULT_FIL
4fa0: 45 5f 46 4f 52 4d 41 54 0a 23 20 64 65 66 69 6e  E_FORMAT.# defin
4fb0: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
4fc0: 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 34 0a 23  _FILE_FORMAT 4.#
4fd0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 74  endif../*.** Det
4fe0: 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74  ermine whether t
4ff0: 72 69 67 67 65 72 73 20 61 72 65 20 72 65 63 75  riggers are recu
5000: 72 73 69 76 65 20 62 79 20 64 65 66 61 75 6c 74  rsive by default
5010: 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65 0a 2a  .  This can be.*
5020: 2a 20 63 68 61 6e 67 65 64 20 61 74 20 72 75 6e  * changed at run
5030: 2d 74 69 6d 65 20 75 73 69 6e 67 20 61 20 70 72  -time using a pr
5040: 61 67 6d 61 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  agma..*/.#ifndef
5050: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
5060: 52 45 43 55 52 53 49 56 45 5f 54 52 49 47 47 45  RECURSIVE_TRIGGE
5070: 52 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  RS.# define SQLI
5080: 54 45 5f 44 45 46 41 55 4c 54 5f 52 45 43 55 52  TE_DEFAULT_RECUR
5090: 53 49 56 45 5f 54 52 49 47 47 45 52 53 20 30 0a  SIVE_TRIGGERS 0.
50a0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 72  #endif../*.** Pr
50b0: 6f 76 69 64 65 20 61 20 64 65 66 61 75 6c 74 20  ovide a default 
50c0: 76 61 6c 75 65 20 66 6f 72 20 53 51 4c 49 54 45  value for SQLITE
50d0: 5f 54 45 4d 50 5f 53 54 4f 52 45 20 69 6e 20 63  _TEMP_STORE in c
50e0: 61 73 65 20 69 74 20 69 73 20 6e 6f 74 20 73 70  ase it is not sp
50f0: 65 63 69 66 69 65 64 0a 2a 2a 20 6f 6e 20 74 68  ecified.** on th
5100: 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 0a 2a  e command-line.*
5110: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
5120: 5f 54 45 4d 50 5f 53 54 4f 52 45 0a 23 20 64 65  _TEMP_STORE.# de
5130: 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d 50  fine SQLITE_TEMP
5140: 5f 53 54 4f 52 45 20 31 0a 23 65 6e 64 69 66 0a  _STORE 1.#endif.
5150: 0a 2f 2a 0a 2a 2a 20 49 66 20 6e 6f 20 76 61 6c  ./*.** If no val
5160: 75 65 20 68 61 73 20 62 65 65 6e 20 70 72 6f 76  ue has been prov
5170: 69 64 65 64 20 66 6f 72 20 53 51 4c 49 54 45 5f  ided for SQLITE_
5180: 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  MAX_WORKER_THREA
5190: 44 53 2c 20 6f 72 20 69 66 0a 2a 2a 20 53 51 4c  DS, or if.** SQL
51a0: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20 69  ITE_TEMP_STORE i
51b0: 73 20 73 65 74 20 74 6f 20 33 20 28 6e 65 76 65  s set to 3 (neve
51c0: 72 20 75 73 65 20 74 65 6d 70 6f 72 61 72 79 20  r use temporary 
51d0: 66 69 6c 65 73 29 2c 20 73 65 74 20 69 74 0a 2a  files), set it.*
51e0: 2a 20 74 6f 20 7a 65 72 6f 2e 0a 2a 2f 0a 23 69  * to zero..*/.#i
51f0: 66 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  f SQLITE_TEMP_ST
5200: 4f 52 45 3d 3d 33 20 7c 7c 20 53 51 4c 49 54 45  ORE==3 || SQLITE
5210: 5f 54 48 52 45 41 44 53 41 46 45 3d 3d 30 0a 23  _THREADSAFE==0.#
5220: 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41   undef SQLITE_MA
5230: 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  X_WORKER_THREADS
5240: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5250: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
5260: 41 44 53 20 30 0a 23 65 6e 64 69 66 0a 23 69 66  ADS 0.#endif.#if
5270: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  ndef SQLITE_MAX_
5280: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23  WORKER_THREADS.#
5290: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
52a0: 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
52b0: 53 20 38 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  S 8.#endif.#ifnd
52c0: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
52d0: 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  T_WORKER_THREADS
52e0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
52f0: 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f  _DEFAULT_WORKER_
5300: 54 48 52 45 41 44 53 20 30 0a 23 65 6e 64 69 66  THREADS 0.#endif
5310: 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41  .#if SQLITE_DEFA
5320: 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  ULT_WORKER_THREA
5330: 44 53 3e 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f  DS>SQLITE_MAX_WO
5340: 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 75  RKER_THREADS.# u
5350: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  ndef SQLITE_MAX_
5360: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23  WORKER_THREADS.#
5370: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
5380: 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
5390: 53 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  S SQLITE_DEFAULT
53a0: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a  _WORKER_THREADS.
53b0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
53c0: 65 20 64 65 66 61 75 6c 74 20 69 6e 69 74 69 61  e default initia
53d0: 6c 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 66 6f 72  l allocation for
53e0: 20 74 68 65 20 70 61 67 65 63 61 63 68 65 20 77   the pagecache w
53f0: 68 65 6e 20 75 73 69 6e 67 20 73 65 70 61 72 61  hen using separa
5400: 74 65 0a 2a 2a 20 70 61 67 65 63 61 63 68 65 73  te.** pagecaches
5410: 20 66 6f 72 20 65 61 63 68 20 64 61 74 61 62 61   for each databa
5420: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20  se connection.  
5430: 41 20 70 6f 73 69 74 69 76 65 20 6e 75 6d 62 65  A positive numbe
5440: 72 20 69 73 20 74 68 65 0a 2a 2a 20 6e 75 6d 62  r is the.** numb
5450: 65 72 20 6f 66 20 70 61 67 65 73 2e 20 20 41 20  er of pages.  A 
5460: 6e 65 67 61 74 69 76 65 20 6e 75 6d 62 65 72 20  negative number 
5470: 4e 20 74 72 61 6e 73 6c 61 74 69 6f 6e 73 20 6d  N translations m
5480: 65 61 6e 73 20 74 68 61 74 20 61 20 62 75 66 66  eans that a buff
5490: 65 72 0a 2a 2a 20 6f 66 20 2d 31 30 32 34 2a 4e  er.** of -1024*N
54a0: 20 62 79 74 65 73 20 69 73 20 61 6c 6c 6f 63 61   bytes is alloca
54b0: 74 65 64 20 61 6e 64 20 75 73 65 64 20 66 6f 72  ted and used for
54c0: 20 61 73 20 6d 61 6e 79 20 70 61 67 65 73 20 61   as many pages a
54d0: 73 20 69 74 20 77 69 6c 6c 20 68 6f 6c 64 2e 0a  s it will hold..
54e0: 2a 2a 0a 2a 2a 20 54 68 65 20 64 65 66 61 75 6c  **.** The defaul
54f0: 74 20 76 61 6c 75 65 20 6f 66 20 22 32 30 22 20  t value of "20" 
5500: 77 61 73 20 63 68 6f 6f 73 65 6e 20 74 6f 20 6d  was choosen to m
5510: 69 6e 69 6d 69 7a 65 20 74 68 65 20 72 75 6e 2d  inimize the run-
5520: 74 69 6d 65 20 6f 66 20 74 68 65 0a 2a 2a 20 73  time of the.** s
5530: 70 65 65 64 74 65 73 74 31 20 74 65 73 74 20 70  peedtest1 test p
5540: 72 6f 67 72 61 6d 20 77 69 74 68 20 6f 70 74 69  rogram with opti
5550: 6f 6e 73 3a 20 2d 2d 73 68 72 69 6e 6b 2d 6d 65  ons: --shrink-me
5560: 6d 6f 72 79 20 2d 2d 72 65 70 72 65 70 61 72 65  mory --reprepare
5570: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
5580: 54 45 5f 44 45 46 41 55 4c 54 5f 50 43 41 43 48  TE_DEFAULT_PCACH
5590: 45 5f 49 4e 49 54 53 5a 0a 23 20 64 65 66 69 6e  E_INITSZ.# defin
55a0: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
55b0: 5f 50 43 41 43 48 45 5f 49 4e 49 54 53 5a 20 32  _PCACHE_INITSZ 2
55c0: 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
55d0: 54 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  The compile-time
55e0: 20 6f 70 74 69 6f 6e 73 20 53 51 4c 49 54 45 5f   options SQLITE_
55f0: 4d 4d 41 50 5f 52 45 41 44 57 52 49 54 45 20 61  MMAP_READWRITE a
5600: 6e 64 20 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e  nd .** SQLITE_EN
5610: 41 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f 4d 49  ABLE_BATCH_ATOMI
5620: 43 5f 57 52 49 54 45 20 61 72 65 20 6e 6f 74 20  C_WRITE are not 
5630: 63 6f 6d 70 61 74 69 62 6c 65 20 77 69 74 68 20  compatible with 
5640: 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a 2a 2a 20  one another..** 
5650: 59 6f 75 20 6d 75 73 74 20 63 68 6f 6f 73 65 20  You must choose 
5660: 6f 6e 65 20 6f 72 20 74 68 65 20 6f 74 68 65 72  one or the other
5670: 20 28 6f 72 20 6e 65 69 74 68 65 72 29 20 62 75   (or neither) bu
5680: 74 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a 2f 0a 23  t not both..*/.#
5690: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
56a0: 45 5f 4d 4d 41 50 5f 52 45 41 44 57 52 49 54 45  E_MMAP_READWRITE
56b0: 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c  ) && defined(SQL
56c0: 49 54 45 5f 45 4e 41 42 4c 45 5f 42 41 54 43 48  ITE_ENABLE_BATCH
56d0: 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 29 0a 23  _ATOMIC_WRITE).#
56e0: 65 72 72 6f 72 20 43 61 6e 6e 6f 74 20 75 73 65  error Cannot use
56f0: 20 62 6f 74 68 20 53 51 4c 49 54 45 5f 4d 4d 41   both SQLITE_MMA
5700: 50 5f 52 45 41 44 57 52 49 54 45 20 61 6e 64 20  P_READWRITE and 
5710: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 42 41  SQLITE_ENABLE_BA
5720: 54 43 48 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45  TCH_ATOMIC_WRITE
5730: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 47  .#endif../*.** G
5740: 43 43 20 64 6f 65 73 20 6e 6f 74 20 64 65 66 69  CC does not defi
5750: 6e 65 20 74 68 65 20 6f 66 66 73 65 74 6f 66 28  ne the offsetof(
5760: 29 20 6d 61 63 72 6f 20 73 6f 20 77 65 27 6c 6c  ) macro so we'll
5770: 20 68 61 76 65 20 74 6f 20 64 6f 20 69 74 0a 2a   have to do it.*
5780: 2a 20 6f 75 72 73 65 6c 76 65 73 2e 0a 2a 2f 0a  * ourselves..*/.
5790: 23 69 66 6e 64 65 66 20 6f 66 66 73 65 74 6f 66  #ifndef offsetof
57a0: 0a 23 64 65 66 69 6e 65 20 6f 66 66 73 65 74 6f  .#define offseto
57b0: 66 28 53 54 52 55 43 54 55 52 45 2c 46 49 45 4c  f(STRUCTURE,FIEL
57c0: 44 29 20 28 28 69 6e 74 29 28 28 63 68 61 72 2a  D) ((int)((char*
57d0: 29 26 28 28 53 54 52 55 43 54 55 52 45 2a 29 30  )&((STRUCTURE*)0
57e0: 29 2d 3e 46 49 45 4c 44 29 29 0a 23 65 6e 64 69  )->FIELD)).#endi
57f0: 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20  f../*.** Macros 
5800: 74 6f 20 63 6f 6d 70 75 74 65 20 6d 69 6e 69 6d  to compute minim
5810: 75 6d 20 61 6e 64 20 6d 61 78 69 6d 75 6d 20 6f  um and maximum o
5820: 66 20 74 77 6f 20 6e 75 6d 62 65 72 73 2e 0a 2a  f two numbers..*
5830: 2f 0a 23 69 66 6e 64 65 66 20 4d 49 4e 0a 23 20  /.#ifndef MIN.# 
5840: 64 65 66 69 6e 65 20 4d 49 4e 28 41 2c 42 29 20  define MIN(A,B) 
5850: 28 28 41 29 3c 28 42 29 3f 28 41 29 3a 28 42 29  ((A)<(B)?(A):(B)
5860: 29 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  ).#endif.#ifndef
5870: 20 4d 41 58 0a 23 20 64 65 66 69 6e 65 20 4d 41   MAX.# define MA
5880: 58 28 41 2c 42 29 20 28 28 41 29 3e 28 42 29 3f  X(A,B) ((A)>(B)?
5890: 28 41 29 3a 28 42 29 29 0a 23 65 6e 64 69 66 0a  (A):(B)).#endif.
58a0: 0a 2f 2a 0a 2a 2a 20 53 77 61 70 20 74 77 6f 20  ./*.** Swap two 
58b0: 6f 62 6a 65 63 74 73 20 6f 66 20 74 79 70 65 20  objects of type 
58c0: 54 59 50 45 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  TYPE..*/.#define
58d0: 20 53 57 41 50 28 54 59 50 45 2c 41 2c 42 29 20   SWAP(TYPE,A,B) 
58e0: 7b 54 59 50 45 20 74 3d 41 3b 20 41 3d 42 3b 20  {TYPE t=A; A=B; 
58f0: 42 3d 74 3b 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 65  B=t;}../*.** Che
5900: 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74 68 69  ck to see if thi
5910: 73 20 6d 61 63 68 69 6e 65 20 75 73 65 73 20 45  s machine uses E
5920: 42 43 44 49 43 2e 20 20 28 59 65 73 2c 20 62 65  BCDIC.  (Yes, be
5930: 6c 69 65 76 65 20 69 74 20 6f 72 0a 2a 2a 20 6e  lieve it or.** n
5940: 6f 74 2c 20 74 68 65 72 65 20 61 72 65 20 73 74  ot, there are st
5950: 69 6c 6c 20 6d 61 63 68 69 6e 65 73 20 6f 75 74  ill machines out
5960: 20 74 68 65 72 65 20 74 68 61 74 20 75 73 65 20   there that use 
5970: 45 42 43 44 49 43 2e 29 0a 2a 2f 0a 23 69 66 20  EBCDIC.).*/.#if 
5980: 27 41 27 20 3d 3d 20 27 5c 33 30 31 27 0a 23 20  'A' == '\301'.# 
5990: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 42  define SQLITE_EB
59a0: 43 44 49 43 20 31 0a 23 65 6c 73 65 0a 23 20 64  CDIC 1.#else.# d
59b0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 53 43  efine SQLITE_ASC
59c0: 49 49 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  II 1.#endif../*.
59d0: 2a 2a 20 49 6e 74 65 67 65 72 73 20 6f 66 20 6b  ** Integers of k
59e0: 6e 6f 77 6e 20 73 69 7a 65 73 2e 20 20 54 68 65  nown sizes.  The
59f0: 73 65 20 74 79 70 65 64 65 66 73 20 6d 69 67 68  se typedefs migh
5a00: 74 20 63 68 61 6e 67 65 20 66 6f 72 20 61 72 63  t change for arc
5a10: 68 69 74 65 63 74 75 72 65 73 0a 2a 2a 20 77 68  hitectures.** wh
5a20: 65 72 65 20 74 68 65 20 73 69 7a 65 73 20 76 65  ere the sizes ve
5a30: 72 79 2e 20 20 50 72 65 70 72 6f 63 65 73 73 6f  ry.  Preprocesso
5a40: 72 20 6d 61 63 72 6f 73 20 61 72 65 20 61 76 61  r macros are ava
5a50: 69 6c 61 62 6c 65 20 73 6f 20 74 68 61 74 20 74  ilable so that t
5a60: 68 65 0a 2a 2a 20 74 79 70 65 73 20 63 61 6e 20  he.** types can 
5a70: 62 65 20 63 6f 6e 76 65 6e 69 65 6e 74 6c 79 20  be conveniently 
5a80: 72 65 64 65 66 69 6e 65 64 20 61 74 20 63 6f 6d  redefined at com
5a90: 70 69 6c 65 2d 74 79 70 65 2e 20 20 4c 69 6b 65  pile-type.  Like
5aa0: 20 74 68 69 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20   this:.**.**    
5ab0: 20 20 20 20 20 63 63 20 27 2d 44 55 49 4e 54 50       cc '-DUINTP
5ac0: 54 52 5f 54 59 50 45 3d 6c 6f 6e 67 20 6c 6f 6e  TR_TYPE=long lon
5ad0: 67 20 69 6e 74 27 20 2e 2e 2e 0a 2a 2f 0a 23 69  g int' ....*/.#i
5ae0: 66 6e 64 65 66 20 55 49 4e 54 33 32 5f 54 59 50  fndef UINT32_TYP
5af0: 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 55  E.# ifdef HAVE_U
5b00: 49 4e 54 33 32 5f 54 0a 23 20 20 64 65 66 69 6e  INT32_T.#  defin
5b10: 65 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75 69  e UINT32_TYPE ui
5b20: 6e 74 33 32 5f 74 0a 23 20 65 6c 73 65 0a 23 20  nt32_t.# else.# 
5b30: 20 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f 54   define UINT32_T
5b40: 59 50 45 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  YPE unsigned int
5b50: 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  .# endif.#endif.
5b60: 23 69 66 6e 64 65 66 20 55 49 4e 54 31 36 5f 54  #ifndef UINT16_T
5b70: 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45  YPE.# ifdef HAVE
5b80: 5f 55 49 4e 54 31 36 5f 54 0a 23 20 20 64 65 66  _UINT16_T.#  def
5b90: 69 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45 20  ine UINT16_TYPE 
5ba0: 75 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a  uint16_t.# else.
5bb0: 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31 36  #  define UINT16
5bc0: 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20 73  _TYPE unsigned s
5bd0: 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69 66  hort int.# endif
5be0: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
5bf0: 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69 66 64  INT16_TYPE.# ifd
5c00: 65 66 20 48 41 56 45 5f 49 4e 54 31 36 5f 54 0a  ef HAVE_INT16_T.
5c10: 23 20 20 64 65 66 69 6e 65 20 49 4e 54 31 36 5f  #  define INT16_
5c20: 54 59 50 45 20 69 6e 74 31 36 5f 74 0a 23 20 65  TYPE int16_t.# e
5c30: 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 4e  lse.#  define IN
5c40: 54 31 36 5f 54 59 50 45 20 73 68 6f 72 74 20 69  T16_TYPE short i
5c50: 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69  nt.# endif.#endi
5c60: 66 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 38 5f  f.#ifndef UINT8_
5c70: 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56  TYPE.# ifdef HAV
5c80: 45 5f 55 49 4e 54 38 5f 54 0a 23 20 20 64 65 66  E_UINT8_T.#  def
5c90: 69 6e 65 20 55 49 4e 54 38 5f 54 59 50 45 20 75  ine UINT8_TYPE u
5ca0: 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23 20  int8_t.# else.# 
5cb0: 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f 54 59   define UINT8_TY
5cc0: 50 45 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  PE unsigned char
5cd0: 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  .# endif.#endif.
5ce0: 23 69 66 6e 64 65 66 20 49 4e 54 38 5f 54 59 50  #ifndef INT8_TYP
5cf0: 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 49  E.# ifdef HAVE_I
5d00: 4e 54 38 5f 54 0a 23 20 20 64 65 66 69 6e 65 20  NT8_T.#  define 
5d10: 49 4e 54 38 5f 54 59 50 45 20 69 6e 74 38 5f 74  INT8_TYPE int8_t
5d20: 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e  .# else.#  defin
5d30: 65 20 49 4e 54 38 5f 54 59 50 45 20 73 69 67 6e  e INT8_TYPE sign
5d40: 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69 66 0a  ed char.# endif.
5d50: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 4c  #endif.#ifndef L
5d60: 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 0a 23  ONGDOUBLE_TYPE.#
5d70: 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55 42   define LONGDOUB
5d80: 4c 45 5f 54 59 50 45 20 6c 6f 6e 67 20 64 6f 75  LE_TYPE long dou
5d90: 62 6c 65 0a 23 65 6e 64 69 66 0a 74 79 70 65 64  ble.#endif.typed
5da0: 65 66 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20  ef sqlite_int64 
5db0: 69 36 34 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  i64;          /*
5dc0: 20 38 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69   8-byte signed i
5dd0: 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65  nteger */.typede
5de0: 66 20 73 71 6c 69 74 65 5f 75 69 6e 74 36 34 20  f sqlite_uint64 
5df0: 75 36 34 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  u64;         /* 
5e00: 38 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20  8-byte unsigned 
5e10: 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64  integer */.typed
5e20: 65 66 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75  ef UINT32_TYPE u
5e30: 33 32 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  32;           /*
5e40: 20 34 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64   4-byte unsigned
5e50: 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65   integer */.type
5e60: 64 65 66 20 55 49 4e 54 31 36 5f 54 59 50 45 20  def UINT16_TYPE 
5e70: 75 31 36 3b 20 20 20 20 20 20 20 20 20 20 20 2f  u16;           /
5e80: 2a 20 32 2d 62 79 74 65 20 75 6e 73 69 67 6e 65  * 2-byte unsigne
5e90: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70  d integer */.typ
5ea0: 65 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45 20  edef INT16_TYPE 
5eb0: 69 31 36 3b 20 20 20 20 20 20 20 20 20 20 20 20  i16;            
5ec0: 2f 2a 20 32 2d 62 79 74 65 20 73 69 67 6e 65 64  /* 2-byte signed
5ed0: 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65   integer */.type
5ee0: 64 65 66 20 55 49 4e 54 38 5f 54 59 50 45 20 75  def UINT8_TYPE u
5ef0: 38 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  8;             /
5f00: 2a 20 31 2d 62 79 74 65 20 75 6e 73 69 67 6e 65  * 1-byte unsigne
5f10: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70  d integer */.typ
5f20: 65 64 65 66 20 49 4e 54 38 5f 54 59 50 45 20 69  edef INT8_TYPE i
5f30: 38 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  8;              
5f40: 2f 2a 20 31 2d 62 79 74 65 20 73 69 67 6e 65 64  /* 1-byte signed
5f50: 20 69 6e 74 65 67 65 72 20 2a 2f 0a 0a 2f 2a 0a   integer */../*.
5f60: 2a 2a 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33  ** SQLITE_MAX_U3
5f70: 32 20 69 73 20 61 20 75 36 34 20 63 6f 6e 73 74  2 is a u64 const
5f80: 61 6e 74 20 74 68 61 74 20 69 73 20 74 68 65 20  ant that is the 
5f90: 6d 61 78 69 6d 75 6d 20 75 36 34 20 76 61 6c 75  maximum u64 valu
5fa0: 65 0a 2a 2a 20 74 68 61 74 20 63 61 6e 20 62 65  e.** that can be
5fb0: 20 73 74 6f 72 65 64 20 69 6e 20 61 20 75 33 32   stored in a u32
5fc0: 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66   without loss of
5fd0: 20 64 61 74 61 2e 20 20 54 68 65 20 76 61 6c 75   data.  The valu
5fe0: 65 0a 2a 2a 20 69 73 20 30 78 30 30 30 30 30 30  e.** is 0x000000
5ff0: 30 30 66 66 66 66 66 66 66 66 2e 20 20 42 75 74  00ffffffff.  But
6000: 20 62 65 63 61 75 73 65 20 6f 66 20 71 75 69 72   because of quir
6010: 6b 73 20 6f 66 20 73 6f 6d 65 20 63 6f 6d 70 69  ks of some compi
6020: 6c 65 72 73 2c 20 77 65 0a 2a 2a 20 68 61 76 65  lers, we.** have
6030: 20 74 6f 20 73 70 65 63 69 66 79 20 74 68 65 20   to specify the 
6040: 76 61 6c 75 65 20 69 6e 20 74 68 65 20 6c 65 73  value in the les
6050: 73 20 69 6e 74 75 69 74 69 76 65 20 6d 61 6e 6e  s intuitive mann
6060: 65 72 20 73 68 6f 77 6e 3a 0a 2a 2f 0a 23 64 65  er shown:.*/.#de
6070: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
6080: 55 33 32 20 20 28 28 28 28 75 36 34 29 31 29 3c  U32  ((((u64)1)<
6090: 3c 33 32 29 2d 31 29 0a 0a 2f 2a 0a 2a 2a 20 54  <32)-1)../*.** T
60a0: 68 65 20 64 61 74 61 74 79 70 65 20 75 73 65 64  he datatype used
60b0: 20 74 6f 20 73 74 6f 72 65 20 65 73 74 69 6d 61   to store estima
60c0: 74 65 73 20 6f 66 20 74 68 65 20 6e 75 6d 62 65  tes of the numbe
60d0: 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 61 0a 2a  r of rows in a.*
60e0: 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  * table or index
60f0: 2e 20 20 54 68 69 73 20 69 73 20 61 6e 20 75 6e  .  This is an un
6100: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 74  signed integer t
6110: 79 70 65 2e 20 20 46 6f 72 20 39 39 2e 39 25 20  ype.  For 99.9% 
6120: 6f 66 0a 2a 2a 20 74 68 65 20 77 6f 72 6c 64 2c  of.** the world,
6130: 20 61 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65   a 32-bit intege
6140: 72 20 69 73 20 73 75 66 66 69 63 69 65 6e 74 2e  r is sufficient.
6150: 20 20 42 75 74 20 61 20 36 34 2d 62 69 74 20 69    But a 64-bit i
6160: 6e 74 65 67 65 72 0a 2a 2a 20 63 61 6e 20 62 65  nteger.** can be
6170: 20 75 73 65 64 20 61 74 20 63 6f 6d 70 69 6c 65   used at compile
6180: 2d 74 69 6d 65 20 69 66 20 64 65 73 69 72 65 64  -time if desired
6190: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
61a0: 54 45 5f 36 34 42 49 54 5f 53 54 41 54 53 0a 20  TE_64BIT_STATS. 
61b0: 74 79 70 65 64 65 66 20 75 36 34 20 74 52 6f 77  typedef u64 tRow
61c0: 63 6e 74 3b 20 20 20 20 2f 2a 20 36 34 2d 62 69  cnt;    /* 64-bi
61d0: 74 20 6f 6e 6c 79 20 69 66 20 72 65 71 75 65 73  t only if reques
61e0: 74 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74  ted at compile-t
61f0: 69 6d 65 20 2a 2f 0a 23 65 6c 73 65 0a 20 74 79  ime */.#else. ty
6200: 70 65 64 65 66 20 75 33 32 20 74 52 6f 77 63 6e  pedef u32 tRowcn
6210: 74 3b 20 20 20 20 2f 2a 20 33 32 2d 62 69 74 20  t;    /* 32-bit 
6220: 69 73 20 74 68 65 20 64 65 66 61 75 6c 74 20 2a  is the default *
6230: 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  /.#endif../*.** 
6240: 45 73 74 69 6d 61 74 65 64 20 71 75 61 6e 74 69  Estimated quanti
6250: 74 69 65 73 20 75 73 65 64 20 66 6f 72 20 71 75  ties used for qu
6260: 65 72 79 20 70 6c 61 6e 6e 69 6e 67 20 61 72 65  ery planning are
6270: 20 73 74 6f 72 65 64 20 61 73 20 31 36 2d 62 69   stored as 16-bi
6280: 74 0a 2a 2a 20 6c 6f 67 61 72 69 74 68 6d 73 2e  t.** logarithms.
6290: 20 20 46 6f 72 20 71 75 61 6e 74 69 74 79 20 58    For quantity X
62a0: 2c 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72  , the value stor
62b0: 65 64 20 69 73 20 31 30 2a 6c 6f 67 32 28 58 29  ed is 10*log2(X)
62c0: 2e 20 20 54 68 69 73 0a 2a 2a 20 67 69 76 65 73  .  This.** gives
62d0: 20 61 20 70 6f 73 73 69 62 6c 65 20 72 61 6e 67   a possible rang
62e0: 65 20 6f 66 20 76 61 6c 75 65 73 20 6f 66 20 61  e of values of a
62f0: 70 70 72 6f 78 69 6d 61 74 65 6c 79 20 31 2e 30  pproximately 1.0
6300: 65 39 38 36 20 74 6f 20 31 65 2d 39 38 36 2e 0a  e986 to 1e-986..
6310: 2a 2a 20 42 75 74 20 74 68 65 20 61 6c 6c 6f 77  ** But the allow
6320: 65 64 20 76 61 6c 75 65 73 20 61 72 65 20 22 67  ed values are "g
6330: 72 61 69 6e 79 22 2e 20 20 4e 6f 74 20 65 76 65  rainy".  Not eve
6340: 72 79 20 76 61 6c 75 65 20 69 73 20 72 65 70 72  ry value is repr
6350: 65 73 65 6e 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f  esentable..** Fo
6360: 72 20 65 78 61 6d 70 6c 65 2c 20 71 75 61 6e 74  r example, quant
6370: 69 74 69 65 73 20 31 36 20 61 6e 64 20 31 37 20  ities 16 and 17 
6380: 61 72 65 20 62 6f 74 68 20 72 65 70 72 65 73 65  are both represe
6390: 6e 74 65 64 20 62 79 20 61 20 4c 6f 67 45 73 74  nted by a LogEst
63a0: 0a 2a 2a 20 6f 66 20 34 30 2e 20 20 48 6f 77 65  .** of 40.  Howe
63b0: 76 65 72 2c 20 73 69 6e 63 65 20 4c 6f 67 45 73  ver, since LogEs
63c0: 74 20 71 75 61 6e 74 69 74 69 65 73 20 61 72 65  t quantities are
63d0: 20 73 75 70 70 6f 73 65 20 74 6f 20 62 65 20 65   suppose to be e
63e0: 73 74 69 6d 61 74 65 73 2c 0a 2a 2a 20 6e 6f 74  stimates,.** not
63f0: 20 65 78 61 63 74 20 76 61 6c 75 65 73 2c 20 74   exact values, t
6400: 68 69 73 20 69 6d 70 72 65 63 69 73 69 6f 6e 20  his imprecision 
6410: 69 73 20 6e 6f 74 20 61 20 70 72 6f 62 6c 65 6d  is not a problem
6420: 2e 0a 2a 2a 0a 2a 2a 20 22 4c 6f 67 45 73 74 22  ..**.** "LogEst"
6430: 20 69 73 20 73 68 6f 72 74 20 66 6f 72 20 22 4c   is short for "L
6440: 6f 67 61 72 69 74 68 6d 69 63 20 45 73 74 69 6d  ogarithmic Estim
6450: 61 74 65 22 2e 0a 2a 2a 0a 2a 2a 20 45 78 61 6d  ate"..**.** Exam
6460: 70 6c 65 73 3a 0a 2a 2a 20 20 20 20 20 20 31 20  ples:.**      1 
6470: 2d 3e 20 30 20 20 20 20 20 20 20 20 20 20 20 20  -> 0            
6480: 20 20 32 30 20 2d 3e 20 34 33 20 20 20 20 20 20    20 -> 43      
6490: 20 20 20 20 31 30 30 30 30 20 2d 3e 20 31 33 32      10000 -> 132
64a0: 0a 2a 2a 20 20 20 20 20 20 32 20 2d 3e 20 31 30  .**      2 -> 10
64b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 32 35 20               25 
64c0: 2d 3e 20 34 36 20 20 20 20 20 20 20 20 20 20 32  -> 46          2
64d0: 35 30 30 30 20 2d 3e 20 31 34 36 0a 2a 2a 20 20  5000 -> 146.**  
64e0: 20 20 20 20 33 20 2d 3e 20 31 36 20 20 20 20 20      3 -> 16     
64f0: 20 20 20 20 20 20 20 31 30 30 20 2d 3e 20 36 36         100 -> 66
6500: 20 20 20 20 20 20 20 20 31 30 30 30 30 30 30 20          1000000 
6510: 2d 3e 20 31 39 39 0a 2a 2a 20 20 20 20 20 20 34  -> 199.**      4
6520: 20 2d 3e 20 32 30 20 20 20 20 20 20 20 20 20 20   -> 20          
6530: 20 31 30 30 30 20 2d 3e 20 39 39 20 20 20 20 20   1000 -> 99     
6540: 20 20 20 31 30 34 38 35 37 36 20 2d 3e 20 32 30     1048576 -> 20
6550: 30 0a 2a 2a 20 20 20 20 20 31 30 20 2d 3e 20 33  0.**     10 -> 3
6560: 33 20 20 20 20 20 20 20 20 20 20 20 31 30 32 34  3           1024
6570: 20 2d 3e 20 31 30 30 20 20 20 20 34 32 39 34 39   -> 100    42949
6580: 36 37 32 39 36 20 2d 3e 20 33 32 30 0a 2a 2a 0a  67296 -> 320.**.
6590: 2a 2a 20 54 68 65 20 4c 6f 67 45 73 74 20 63 61  ** The LogEst ca
65a0: 6e 20 62 65 20 6e 65 67 61 74 69 76 65 20 74 6f  n be negative to
65b0: 20 69 6e 64 69 63 61 74 65 20 66 72 61 63 74 69   indicate fracti
65c0: 6f 6e 61 6c 20 76 61 6c 75 65 73 2e 0a 2a 2a 20  onal values..** 
65d0: 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 0a 2a 2a 20  Examples:.**.** 
65e0: 20 20 20 30 2e 35 20 2d 3e 20 2d 31 30 20 20 20     0.5 -> -10   
65f0: 20 20 20 20 20 20 20 20 30 2e 31 20 2d 3e 20 2d          0.1 -> -
6600: 33 33 20 20 20 20 20 20 20 20 30 2e 30 36 32 35  33        0.0625
6610: 20 2d 3e 20 2d 34 30 0a 2a 2f 0a 74 79 70 65 64   -> -40.*/.typed
6620: 65 66 20 49 4e 54 31 36 5f 54 59 50 45 20 4c 6f  ef INT16_TYPE Lo
6630: 67 45 73 74 3b 0a 0a 2f 2a 0a 2a 2a 20 53 65 74  gEst;../*.** Set
6640: 20 74 68 65 20 53 51 4c 49 54 45 5f 50 54 52 53   the SQLITE_PTRS
6650: 49 5a 45 20 6d 61 63 72 6f 20 74 6f 20 74 68 65  IZE macro to the
6660: 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
6670: 20 69 6e 20 61 20 70 6f 69 6e 74 65 72 0a 2a 2f   in a pointer.*/
6680: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
6690: 50 54 52 53 49 5a 45 0a 23 20 69 66 20 64 65 66  PTRSIZE.# if def
66a0: 69 6e 65 64 28 5f 5f 53 49 5a 45 4f 46 5f 50 4f  ined(__SIZEOF_PO
66b0: 49 4e 54 45 52 5f 5f 29 0a 23 20 20 20 64 65 66  INTER__).#   def
66c0: 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 53 49  ine SQLITE_PTRSI
66d0: 5a 45 20 5f 5f 53 49 5a 45 4f 46 5f 50 4f 49 4e  ZE __SIZEOF_POIN
66e0: 54 45 52 5f 5f 0a 23 20 65 6c 69 66 20 64 65 66  TER__.# elif def
66f0: 69 6e 65 64 28 69 33 38 36 29 20 20 20 20 20 7c  ined(i386)     |
6700: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69 33 38 36  | defined(__i386
6710: 5f 5f 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64  __)   || defined
6720: 28 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20 20 20  (_M_IX86) ||    
6730: 5c 0a 20 20 20 20 20 20 20 64 65 66 69 6e 65 64  \.       defined
6740: 28 5f 4d 5f 41 52 4d 29 20 20 20 7c 7c 20 64 65  (_M_ARM)   || de
6750: 66 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f 29 20 20  fined(__arm__)  
6760: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78    || defined(__x
6770: 38 36 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53  86).#   define S
6780: 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 34 0a  QLITE_PTRSIZE 4.
6790: 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e  # else.#   defin
67a0: 65 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45  e SQLITE_PTRSIZE
67b0: 20 38 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69   8.# endif.#endi
67c0: 66 0a 0a 2f 2a 20 54 68 65 20 75 70 74 72 20 74  f../* The uptr t
67d0: 79 70 65 20 69 73 20 61 6e 20 75 6e 73 69 67 6e  ype is an unsign
67e0: 65 64 20 69 6e 74 65 67 65 72 20 6c 61 72 67 65  ed integer large
67f0: 20 65 6e 6f 75 67 68 20 74 6f 20 68 6f 6c 64 20   enough to hold 
6800: 61 20 70 6f 69 6e 74 65 72 0a 2a 2f 0a 23 69 66  a pointer.*/.#if
6810: 20 64 65 66 69 6e 65 64 28 48 41 56 45 5f 53 54   defined(HAVE_ST
6820: 44 49 4e 54 5f 48 29 0a 20 20 74 79 70 65 64 65  DINT_H).  typede
6830: 66 20 75 69 6e 74 70 74 72 5f 74 20 75 70 74 72  f uintptr_t uptr
6840: 3b 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 50  ;.#elif SQLITE_P
6850: 54 52 53 49 5a 45 3d 3d 34 0a 20 20 74 79 70 65  TRSIZE==4.  type
6860: 64 65 66 20 75 33 32 20 75 70 74 72 3b 0a 23 65  def u32 uptr;.#e
6870: 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20 75 36  lse.  typedef u6
6880: 34 20 75 70 74 72 3b 0a 23 65 6e 64 69 66 0a 0a  4 uptr;.#endif..
6890: 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  /*.** The SQLITE
68a0: 5f 57 49 54 48 49 4e 28 50 2c 53 2c 45 29 20 6d  _WITHIN(P,S,E) m
68b0: 61 63 72 6f 20 63 68 65 63 6b 73 20 74 6f 20 73  acro checks to s
68c0: 65 65 20 69 66 20 70 6f 69 6e 74 65 72 20 50 20  ee if pointer P 
68d0: 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 6f 6d  points to.** som
68e0: 65 74 68 69 6e 67 20 62 65 74 77 65 65 6e 20 53  ething between S
68f0: 20 28 69 6e 63 6c 75 73 69 76 65 29 20 61 6e 64   (inclusive) and
6900: 20 45 20 28 65 78 63 6c 75 73 69 76 65 29 2e 0a   E (exclusive)..
6910: 2a 2a 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77  **.** In other w
6920: 6f 72 64 73 2c 20 53 20 69 73 20 61 20 62 75 66  ords, S is a buf
6930: 66 65 72 20 61 6e 64 20 45 20 69 73 20 61 20 70  fer and E is a p
6940: 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66 69  ointer to the fi
6950: 72 73 74 20 62 79 74 65 20 61 66 74 65 72 0a 2a  rst byte after.*
6960: 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 62 75 66  * the end of buf
6970: 66 65 72 20 53 2e 20 20 54 68 69 73 20 6d 61 63  fer S.  This mac
6980: 72 6f 20 72 65 74 75 72 6e 73 20 74 72 75 65 20  ro returns true 
6990: 69 66 20 50 20 70 6f 69 6e 74 73 20 74 6f 20 73  if P points to s
69a0: 6f 6d 65 74 68 69 6e 67 0a 2a 2a 20 63 6f 6e 74  omething.** cont
69b0: 61 69 6e 65 64 20 77 69 74 68 69 6e 20 74 68 65  ained within the
69c0: 20 62 75 66 66 65 72 20 53 2e 0a 2a 2f 0a 23 64   buffer S..*/.#d
69d0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 49 54  efine SQLITE_WIT
69e0: 48 49 4e 28 50 2c 53 2c 45 29 20 28 28 28 75 70  HIN(P,S,E) (((up
69f0: 74 72 29 28 50 29 3e 3d 28 75 70 74 72 29 28 53  tr)(P)>=(uptr)(S
6a00: 29 29 26 26 28 28 75 70 74 72 29 28 50 29 3c 28  ))&&((uptr)(P)<(
6a10: 75 70 74 72 29 28 45 29 29 29 0a 0a 0a 2f 2a 0a  uptr)(E))).../*.
6a20: 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74  ** Macros to det
6a30: 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74  ermine whether t
6a40: 68 65 20 6d 61 63 68 69 6e 65 20 69 73 20 62 69  he machine is bi
6a50: 67 20 6f 72 20 6c 69 74 74 6c 65 20 65 6e 64 69  g or little endi
6a60: 61 6e 2c 0a 2a 2a 20 61 6e 64 20 77 68 65 74 68  an,.** and wheth
6a70: 65 72 20 6f 72 20 6e 6f 74 20 74 68 61 74 20 64  er or not that d
6a80: 65 74 65 72 6d 69 6e 61 74 69 6f 6e 20 69 73 20  etermination is 
6a90: 72 75 6e 2d 74 69 6d 65 20 6f 72 20 63 6f 6d 70  run-time or comp
6aa0: 69 6c 65 2d 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20  ile-time..**.** 
6ab0: 46 6f 72 20 62 65 73 74 20 70 65 72 66 6f 72 6d  For best perform
6ac0: 61 6e 63 65 2c 20 61 6e 20 61 74 74 65 6d 70 74  ance, an attempt
6ad0: 20 69 73 20 6d 61 64 65 20 74 6f 20 67 75 65 73   is made to gues
6ae0: 73 20 61 74 20 74 68 65 20 62 79 74 65 2d 6f 72  s at the byte-or
6af0: 64 65 72 0a 2a 2a 20 75 73 69 6e 67 20 43 2d 70  der.** using C-p
6b00: 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63 72  reprocessor macr
6b10: 6f 73 2e 20 20 49 66 20 74 68 61 74 20 69 73 20  os.  If that is 
6b20: 75 6e 73 75 63 63 65 73 73 66 75 6c 2c 20 6f 72  unsuccessful, or
6b30: 20 69 66 0a 2a 2a 20 2d 44 53 51 4c 49 54 45 5f   if.** -DSQLITE_
6b40: 42 59 54 45 4f 52 44 45 52 3d 30 20 69 73 20 73  BYTEORDER=0 is s
6b50: 65 74 2c 20 74 68 65 6e 20 62 79 74 65 2d 6f 72  et, then byte-or
6b60: 64 65 72 20 69 73 20 64 65 74 65 72 6d 69 6e 65  der is determine
6b70: 64 0a 2a 2a 20 61 74 20 72 75 6e 2d 74 69 6d 65  d.** at run-time
6b80: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
6b90: 49 54 45 5f 42 59 54 45 4f 52 44 45 52 0a 23 20  ITE_BYTEORDER.# 
6ba0: 69 66 20 64 65 66 69 6e 65 64 28 69 33 38 36 29  if defined(i386)
6bb0: 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28       || defined(
6bc0: 5f 5f 69 33 38 36 5f 5f 29 20 20 20 7c 7c 20 64  __i386__)   || d
6bd0: 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38 36 29 20  efined(_M_IX86) 
6be0: 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65 66  ||    \.     def
6bf0: 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 29 20 7c  ined(__x86_64) |
6c00: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f  | defined(__x86_
6c10: 36 34 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64  64__) || defined
6c20: 28 5f 4d 5f 58 36 34 29 20 20 7c 7c 20 20 20 20  (_M_X64)  ||    
6c30: 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f  \.     defined(_
6c40: 4d 5f 41 4d 44 36 34 29 20 7c 7c 20 64 65 66 69  M_AMD64) || defi
6c50: 6e 65 64 28 5f 4d 5f 41 52 4d 29 20 20 20 20 20  ned(_M_ARM)     
6c60: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36  || defined(__x86
6c70: 29 20 20 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20  )   ||    \.    
6c80: 20 64 65 66 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f   defined(__arm__
6c90: 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  ).#   define SQL
6ca0: 49 54 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20  ITE_BYTEORDER   
6cb0: 20 31 32 33 34 0a 23 20 65 6c 69 66 20 64 65 66   1234.# elif def
6cc0: 69 6e 65 64 28 73 70 61 72 63 29 20 20 20 20 7c  ined(sparc)    |
6cd0: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 70 70 63 5f  | defined(__ppc_
6ce0: 5f 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  _).#   define SQ
6cf0: 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 20 20  LITE_BYTEORDER  
6d00: 20 20 34 33 32 31 0a 23 20 65 6c 73 65 0a 23 20    4321.# else.# 
6d10: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
6d20: 42 59 54 45 4f 52 44 45 52 20 30 0a 23 20 65 6e  BYTEORDER 0.# en
6d30: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 20 53  dif.#endif.#if S
6d40: 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 3d  QLITE_BYTEORDER=
6d50: 3d 34 33 32 31 0a 23 20 64 65 66 69 6e 65 20 53  =4321.# define S
6d60: 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20  QLITE_BIGENDIAN 
6d70: 20 20 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51     1.# define SQ
6d80: 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41  LITE_LITTLEENDIA
6d90: 4e 20 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  N 0.# define SQL
6da0: 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20  ITE_UTF16NATIVE 
6db0: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 0a   SQLITE_UTF16BE.
6dc0: 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 42 59 54  #elif SQLITE_BYT
6dd0: 45 4f 52 44 45 52 3d 3d 31 32 33 34 0a 23 20 64  EORDER==1234.# d
6de0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47  efine SQLITE_BIG
6df0: 45 4e 44 49 41 4e 20 20 20 20 30 0a 23 20 64 65  ENDIAN    0.# de
6e00: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54  fine SQLITE_LITT
6e10: 4c 45 45 4e 44 49 41 4e 20 31 0a 23 20 64 65 66  LEENDIAN 1.# def
6e20: 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36  ine SQLITE_UTF16
6e30: 4e 41 54 49 56 45 20 20 53 51 4c 49 54 45 5f 55  NATIVE  SQLITE_U
6e40: 54 46 31 36 4c 45 0a 23 65 6c 73 65 0a 23 20 69  TF16LE.#else.# i
6e50: 66 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c  fdef SQLITE_AMAL
6e60: 47 41 4d 41 54 49 4f 4e 0a 20 20 63 6f 6e 73 74  GAMATION.  const
6e70: 20 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 20   int sqlite3one 
6e80: 3d 20 31 3b 0a 23 20 65 6c 73 65 0a 20 20 65 78  = 1;.# else.  ex
6e90: 74 65 72 6e 20 63 6f 6e 73 74 20 69 6e 74 20 73  tern const int s
6ea0: 71 6c 69 74 65 33 6f 6e 65 3b 0a 23 20 65 6e 64  qlite3one;.# end
6eb0: 69 66 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  if.# define SQLI
6ec0: 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20  TE_BIGENDIAN    
6ed0: 28 2a 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69  (*(char *)(&sqli
6ee0: 74 65 33 6f 6e 65 29 3d 3d 30 29 0a 23 20 64 65  te3one)==0).# de
6ef0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54  fine SQLITE_LITT
6f00: 4c 45 45 4e 44 49 41 4e 20 28 2a 28 63 68 61 72  LEENDIAN (*(char
6f10: 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29   *)(&sqlite3one)
6f20: 3d 3d 31 29 0a 23 20 64 65 66 69 6e 65 20 53 51  ==1).# define SQ
6f30: 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
6f40: 20 20 28 53 51 4c 49 54 45 5f 42 49 47 45 4e 44    (SQLITE_BIGEND
6f50: 49 41 4e 3f 53 51 4c 49 54 45 5f 55 54 46 31 36  IAN?SQLITE_UTF16
6f60: 42 45 3a 53 51 4c 49 54 45 5f 55 54 46 31 36 4c  BE:SQLITE_UTF16L
6f70: 45 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  E).#endif../*.**
6f80: 20 43 6f 6e 73 74 61 6e 74 73 20 66 6f 72 20 74   Constants for t
6f90: 68 65 20 6c 61 72 67 65 73 74 20 61 6e 64 20 73  he largest and s
6fa0: 6d 61 6c 6c 65 73 74 20 70 6f 73 73 69 62 6c 65  mallest possible
6fb0: 20 36 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69   64-bit signed i
6fc0: 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73  ntegers..** Thes
6fd0: 65 20 6d 61 63 72 6f 73 20 61 72 65 20 64 65 73  e macros are des
6fe0: 69 67 6e 65 64 20 74 6f 20 77 6f 72 6b 20 63 6f  igned to work co
6ff0: 72 72 65 63 74 6c 79 20 6f 6e 20 62 6f 74 68 20  rrectly on both 
7000: 33 32 2d 62 69 74 20 61 6e 64 20 36 34 2d 62 69  32-bit and 64-bi
7010: 74 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 73 2e 0a  t.** compilers..
7020: 2a 2f 0a 23 64 65 66 69 6e 65 20 4c 41 52 47 45  */.#define LARGE
7030: 53 54 5f 49 4e 54 36 34 20 20 28 30 78 66 66 66  ST_INT64  (0xfff
7040: 66 66 66 66 66 7c 28 28 28 69 36 34 29 30 78 37  fffff|(((i64)0x7
7050: 66 66 66 66 66 66 66 29 3c 3c 33 32 29 29 0a 23  fffffff)<<32)).#
7060: 64 65 66 69 6e 65 20 53 4d 41 4c 4c 45 53 54 5f  define SMALLEST_
7070: 49 4e 54 36 34 20 28 28 28 69 36 34 29 2d 31 29  INT64 (((i64)-1)
7080: 20 2d 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34   - LARGEST_INT64
7090: 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 75  )../*.** Round u
70a0: 70 20 61 20 6e 75 6d 62 65 72 20 74 6f 20 74 68  p a number to th
70b0: 65 20 6e 65 78 74 20 6c 61 72 67 65 72 20 6d 75  e next larger mu
70c0: 6c 74 69 70 6c 65 20 6f 66 20 38 2e 20 20 54 68  ltiple of 8.  Th
70d0: 69 73 20 69 73 20 75 73 65 64 0a 2a 2a 20 74 6f  is is used.** to
70e0: 20 66 6f 72 63 65 20 38 2d 62 79 74 65 20 61 6c   force 8-byte al
70f0: 69 67 6e 6d 65 6e 74 20 6f 6e 20 36 34 2d 62 69  ignment on 64-bi
7100: 74 20 61 72 63 68 69 74 65 63 74 75 72 65 73 2e  t architectures.
7110: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e  .*/.#define ROUN
7120: 44 38 28 78 29 20 20 20 20 20 28 28 28 78 29 2b  D8(x)     (((x)+
7130: 37 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f  7)&~7)../*.** Ro
7140: 75 6e 64 20 64 6f 77 6e 20 74 6f 20 74 68 65 20  und down to the 
7150: 6e 65 61 72 65 73 74 20 6d 75 6c 74 69 70 6c 65  nearest multiple
7160: 20 6f 66 20 38 0a 2a 2f 0a 23 64 65 66 69 6e 65   of 8.*/.#define
7170: 20 52 4f 55 4e 44 44 4f 57 4e 38 28 78 29 20 28   ROUNDDOWN8(x) (
7180: 28 78 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 41  (x)&~7)../*.** A
7190: 73 73 65 72 74 20 74 68 61 74 20 74 68 65 20 70  ssert that the p
71a0: 6f 69 6e 74 65 72 20 58 20 69 73 20 61 6c 69 67  ointer X is alig
71b0: 6e 65 64 20 74 6f 20 61 6e 20 38 2d 62 79 74 65  ned to an 8-byte
71c0: 20 62 6f 75 6e 64 61 72 79 2e 20 20 54 68 69 73   boundary.  This
71d0: 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75 73 65  .** macro is use
71e0: 64 20 6f 6e 6c 79 20 77 69 74 68 69 6e 20 61 73  d only within as
71f0: 73 65 72 74 28 29 20 74 6f 20 76 65 72 69 66 79  sert() to verify
7200: 20 74 68 61 74 20 74 68 65 20 63 6f 64 65 20 67   that the code g
7210: 65 74 73 0a 2a 2a 20 61 6c 6c 20 61 6c 69 67 6e  ets.** all align
7220: 6d 65 6e 74 20 72 65 73 74 72 69 63 74 69 6f 6e  ment restriction
7230: 73 20 63 6f 72 72 65 63 74 2e 0a 2a 2a 0a 2a 2a  s correct..**.**
7240: 20 45 78 63 65 70 74 2c 20 69 66 20 53 51 4c 49   Except, if SQLI
7250: 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45  TE_4_BYTE_ALIGNE
7260: 44 5f 4d 41 4c 4c 4f 43 20 69 73 20 64 65 66 69  D_MALLOC is defi
7270: 6e 65 64 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a  ned, then the.**
7280: 20 75 6e 64 65 72 6c 79 69 6e 67 20 6d 61 6c 6c   underlying mall
7290: 6f 63 28 29 20 69 6d 70 6c 65 6d 65 6e 74 61 74  oc() implementat
72a0: 69 6f 6e 20 6d 69 67 68 74 20 72 65 74 75 72 6e  ion might return
72b0: 20 75 73 20 34 2d 62 79 74 65 20 61 6c 69 67 6e   us 4-byte align
72c0: 65 64 0a 2a 2a 20 70 6f 69 6e 74 65 72 73 2e 20  ed.** pointers. 
72d0: 20 49 6e 20 74 68 61 74 20 63 61 73 65 2c 20 6f   In that case, o
72e0: 6e 6c 79 20 76 65 72 69 66 79 20 34 2d 62 79 74  nly verify 4-byt
72f0: 65 20 61 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a  e alignment..*/.
7300: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 34 5f  #ifdef SQLITE_4_
7310: 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c  BYTE_ALIGNED_MAL
7320: 4c 4f 43 0a 23 20 64 65 66 69 6e 65 20 45 49 47  LOC.# define EIG
7330: 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e  HT_BYTE_ALIGNMEN
7340: 54 28 58 29 20 20 20 28 28 28 28 63 68 61 72 2a  T(X)   ((((char*
7350: 29 28 58 29 20 2d 20 28 63 68 61 72 2a 29 30 29  )(X) - (char*)0)
7360: 26 33 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20  &3)==0).#else.# 
7370: 64 65 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54  define EIGHT_BYT
7380: 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20  E_ALIGNMENT(X)  
7390: 20 28 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d   ((((char*)(X) -
73a0: 20 28 63 68 61 72 2a 29 30 29 26 37 29 3d 3d 30   (char*)0)&7)==0
73b0: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
73c0: 44 69 73 61 62 6c 65 20 4d 4d 41 50 20 6f 6e 20  Disable MMAP on 
73d0: 70 6c 61 74 66 6f 72 6d 73 20 77 68 65 72 65 20  platforms where 
73e0: 69 74 20 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 6e  it is known to n
73f0: 6f 74 20 77 6f 72 6b 0a 2a 2f 0a 23 69 66 20 64  ot work.*/.#if d
7400: 65 66 69 6e 65 64 28 5f 5f 4f 70 65 6e 42 53 44  efined(__OpenBSD
7410: 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  __) || defined(_
7420: 5f 51 4e 58 4e 54 4f 5f 5f 29 0a 23 20 75 6e 64  _QNXNTO__).# und
7430: 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  ef SQLITE_MAX_MM
7440: 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65  AP_SIZE.# define
7450: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
7460: 5f 53 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a 0a  _SIZE 0.#endif..
7470: 2f 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 6d 61  /*.** Default ma
7480: 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20 6d 65  ximum size of me
7490: 6d 6f 72 79 20 75 73 65 64 20 62 79 20 6d 65 6d  mory used by mem
74a0: 6f 72 79 2d 6d 61 70 70 65 64 20 49 2f 4f 20 69  ory-mapped I/O i
74b0: 6e 20 74 68 65 20 56 46 53 0a 2a 2f 0a 23 69 66  n the VFS.*/.#if
74c0: 64 65 66 20 5f 5f 41 50 50 4c 45 5f 5f 0a 23 20  def __APPLE__.# 
74d0: 69 6e 63 6c 75 64 65 20 3c 54 61 72 67 65 74 43  include <TargetC
74e0: 6f 6e 64 69 74 69 6f 6e 61 6c 73 2e 68 3e 0a 23  onditionals.h>.#
74f0: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
7500: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
7510: 5a 45 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28  ZE.# if defined(
7520: 5f 5f 6c 69 6e 75 78 5f 5f 29 20 5c 0a 20 20 7c  __linux__) \.  |
7530: 7c 20 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32  | defined(_WIN32
7540: 29 20 5c 0a 20 20 7c 7c 20 28 64 65 66 69 6e 65  ) \.  || (define
7550: 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20  d(__APPLE__) && 
7560: 64 65 66 69 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f  defined(__MACH__
7570: 29 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65  )) \.  || define
7580: 64 28 5f 5f 73 75 6e 29 20 5c 0a 20 20 7c 7c 20  d(__sun) \.  || 
7590: 64 65 66 69 6e 65 64 28 5f 5f 46 72 65 65 42 53  defined(__FreeBS
75a0: 44 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69  D__) \.  || defi
75b0: 6e 65 64 28 5f 5f 44 72 61 67 6f 6e 46 6c 79 5f  ned(__DragonFly_
75c0: 5f 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  _).#   define SQ
75d0: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
75e0: 5a 45 20 30 78 37 66 66 66 30 30 30 30 20 20 2f  ZE 0x7fff0000  /
75f0: 2a 20 32 31 34 37 34 31 38 31 31 32 20 2a 2f 0a  * 2147418112 */.
7600: 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e  # else.#   defin
7610: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41  e SQLITE_MAX_MMA
7620: 50 5f 53 49 5a 45 20 30 0a 23 20 65 6e 64 69 66  P_SIZE 0.# endif
7630: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
7640: 68 65 20 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f  he default MMAP_
7650: 53 49 5a 45 20 69 73 20 7a 65 72 6f 20 6f 6e 20  SIZE is zero on 
7660: 61 6c 6c 20 70 6c 61 74 66 6f 72 6d 73 2e 20 20  all platforms.  
7670: 4f 72 2c 20 65 76 65 6e 20 69 66 20 61 20 6c 61  Or, even if a la
7680: 72 67 65 72 0a 2a 2a 20 64 65 66 61 75 6c 74 20  rger.** default 
7690: 4d 4d 41 50 5f 53 49 5a 45 20 69 73 20 73 70 65  MMAP_SIZE is spe
76a0: 63 69 66 69 65 64 20 61 74 20 63 6f 6d 70 69 6c  cified at compil
76b0: 65 2d 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72  e-time, make sur
76c0: 65 20 74 68 61 74 20 69 74 20 64 6f 65 73 0a 2a  e that it does.*
76d0: 2a 20 6e 6f 74 20 65 78 63 65 65 64 20 74 68 65  * not exceed the
76e0: 20 6d 61 78 69 6d 75 6d 20 6d 6d 61 70 20 73 69   maximum mmap si
76f0: 7a 65 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ze..*/.#ifndef S
7700: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d  QLITE_DEFAULT_MM
7710: 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65  AP_SIZE.# define
7720: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
7730: 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 65 6e 64  MMAP_SIZE 0.#end
7740: 69 66 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45  if.#if SQLITE_DE
7750: 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e  FAULT_MMAP_SIZE>
7760: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
7770: 53 49 5a 45 0a 23 20 75 6e 64 65 66 20 53 51 4c  SIZE.# undef SQL
7780: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50  ITE_DEFAULT_MMAP
7790: 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53  _SIZE.# define S
77a0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d  QLITE_DEFAULT_MM
77b0: 41 50 5f 53 49 5a 45 20 53 51 4c 49 54 45 5f 4d  AP_SIZE SQLITE_M
77c0: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 65 6e  AX_MMAP_SIZE.#en
77d0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 6c 79 20  dif../*.** Only 
77e0: 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 45 4e  one of SQLITE_EN
77f0: 41 42 4c 45 5f 53 54 41 54 33 20 6f 72 20 53 51  ABLE_STAT3 or SQ
7800: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
7810: 34 20 63 61 6e 20 62 65 20 64 65 66 69 6e 65 64  4 can be defined
7820: 2e 0a 2a 2a 20 50 72 69 6f 72 69 74 79 20 69 73  ..** Priority is
7830: 20 67 69 76 65 6e 20 74 6f 20 53 51 4c 49 54 45   given to SQLITE
7840: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 2e 20 20  _ENABLE_STAT4.  
7850: 49 66 20 65 69 74 68 65 72 20 61 72 65 20 64 65  If either are de
7860: 66 69 6e 65 64 2c 20 61 6c 73 6f 0a 2a 2a 20 64  fined, also.** d
7870: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41  efine SQLITE_ENA
7880: 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
7890: 54 34 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  T4.*/.#ifdef SQL
78a0: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34  ITE_ENABLE_STAT4
78b0: 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f  .# undef SQLITE_
78c0: 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23 20 64  ENABLE_STAT3.# d
78d0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41  efine SQLITE_ENA
78e0: 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
78f0: 54 34 20 31 0a 23 65 6c 69 66 20 53 51 4c 49 54  T4 1.#elif SQLIT
7900: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23  E_ENABLE_STAT3.#
7910: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45   define SQLITE_E
7920: 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53  NABLE_STAT3_OR_S
7930: 54 41 54 34 20 31 0a 23 65 6c 69 66 20 53 51 4c  TAT4 1.#elif SQL
7940: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
7950: 5f 4f 52 5f 53 54 41 54 34 0a 23 20 75 6e 64 65  _OR_STAT4.# unde
7960: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
7970: 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23  STAT3_OR_STAT4.#
7980: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 45 4c  endif../*.** SEL
7990: 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44  ECTTRACE_ENABLED
79a0: 20 77 69 6c 6c 20 62 65 20 65 69 74 68 65 72 20   will be either 
79b0: 31 20 6f 72 20 30 20 64 65 70 65 6e 64 69 6e 67  1 or 0 depending
79c0: 20 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20 6e   on whether or n
79d0: 6f 74 0a 2a 2a 20 74 68 65 20 53 65 6c 65 63 74  ot.** the Select
79e0: 20 71 75 65 72 79 20 67 65 6e 65 72 61 74 6f 72   query generator
79f0: 20 74 72 61 63 69 6e 67 20 6c 6f 67 69 63 20 69   tracing logic i
7a00: 73 20 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a  s turned on..*/.
7a10: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
7a20: 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66  TE_DEBUG) || def
7a30: 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
7a40: 4c 45 5f 53 45 4c 45 43 54 54 52 41 43 45 29 0a  LE_SELECTTRACE).
7a50: 23 20 64 65 66 69 6e 65 20 53 45 4c 45 43 54 54  # define SELECTT
7a60: 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 31 0a 23  RACE_ENABLED 1.#
7a70: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53 45  else.# define SE
7a80: 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45  LECTTRACE_ENABLE
7a90: 44 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  D 0.#endif../*.*
7aa0: 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
7ab0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
7ac0: 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64  tructure is used
7ad0: 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62 75   to store the bu
7ae0: 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61  sy-handler.** ca
7af0: 6c 6c 62 61 63 6b 20 66 6f 72 20 61 20 67 69 76  llback for a giv
7b00: 65 6e 20 73 71 6c 69 74 65 20 68 61 6e 64 6c 65  en sqlite handle
7b10: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71 6c 69  ..**.** The sqli
7b20: 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72 20 6d  te.busyHandler m
7b30: 65 6d 62 65 72 20 6f 66 20 74 68 65 20 73 71 6c  ember of the sql
7b40: 69 74 65 20 73 74 72 75 63 74 20 63 6f 6e 74 61  ite struct conta
7b50: 69 6e 73 20 74 68 65 20 62 75 73 79 0a 2a 2a 20  ins the busy.** 
7b60: 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 74 68 65  callback for the
7b70: 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
7b80: 2e 20 45 61 63 68 20 70 61 67 65 72 20 6f 70 65  . Each pager ope
7b90: 6e 65 64 20 76 69 61 20 74 68 65 20 73 71 6c 69  ned via the sqli
7ba0: 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20 69 73 20  te.** handle is 
7bb0: 70 61 73 73 65 64 20 61 20 70 6f 69 6e 74 65 72  passed a pointer
7bc0: 20 74 6f 20 73 71 6c 69 74 65 2e 62 75 73 79 48   to sqlite.busyH
7bd0: 61 6e 64 6c 65 72 2e 20 54 68 65 20 62 75 73 79  andler. The busy
7be0: 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c  -handler.** call
7bf0: 62 61 63 6b 20 69 73 20 63 75 72 72 65 6e 74 6c  back is currentl
7c00: 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79 20 66  y invoked only f
7c10: 72 6f 6d 20 77 69 74 68 69 6e 20 70 61 67 65 72  rom within pager
7c20: 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  .c..*/.typedef s
7c30: 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65  truct BusyHandle
7c40: 72 20 42 75 73 79 48 61 6e 64 6c 65 72 3b 0a 73  r BusyHandler;.s
7c50: 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65  truct BusyHandle
7c60: 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 46 75 6e  r {.  int (*xFun
7c70: 63 29 28 76 6f 69 64 20 2a 2c 69 6e 74 29 3b 20  c)(void *,int); 
7c80: 20 2f 2a 20 54 68 65 20 62 75 73 79 20 63 61 6c   /* The busy cal
7c90: 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  lback */.  void 
7ca0: 2a 70 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  *pArg;          
7cb0: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61        /* First a
7cc0: 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c 6c 62  rg to busy callb
7cd0: 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75  ack */.  int nBu
7ce0: 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sy;             
7cf0: 20 20 20 20 2f 2a 20 49 6e 63 72 65 6d 65 6e 74      /* Increment
7d00: 65 64 20 77 69 74 68 20 65 61 63 68 20 62 75 73  ed with each bus
7d10: 79 20 63 61 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  y call */.};../*
7d20: 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20  .** Name of the 
7d30: 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20  master database 
7d40: 74 61 62 6c 65 2e 20 20 54 68 65 20 6d 61 73 74  table.  The mast
7d50: 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  er database tabl
7d60: 65 0a 2a 2a 20 69 73 20 61 20 73 70 65 63 69 61  e.** is a specia
7d70: 6c 20 74 61 62 6c 65 20 74 68 61 74 20 68 6f 6c  l table that hol
7d80: 64 73 20 74 68 65 20 6e 61 6d 65 73 20 61 6e 64  ds the names and
7d90: 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 20 61   attributes of a
7da0: 6c 6c 0a 2a 2a 20 75 73 65 72 20 74 61 62 6c 65  ll.** user table
7db0: 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e 0a 2a  s and indices..*
7dc0: 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52  /.#define MASTER
7dd0: 5f 4e 41 4d 45 20 20 20 20 20 20 20 22 73 71 6c  _NAME       "sql
7de0: 69 74 65 5f 6d 61 73 74 65 72 22 0a 23 64 65 66  ite_master".#def
7df0: 69 6e 65 20 54 45 4d 50 5f 4d 41 53 54 45 52 5f  ine TEMP_MASTER_
7e00: 4e 41 4d 45 20 20 22 73 71 6c 69 74 65 5f 74 65  NAME  "sqlite_te
7e10: 6d 70 5f 6d 61 73 74 65 72 22 0a 0a 2f 2a 0a 2a  mp_master"../*.*
7e20: 2a 20 54 68 65 20 72 6f 6f 74 2d 70 61 67 65 20  * The root-page 
7e30: 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64 61  of the master da
7e40: 74 61 62 61 73 65 20 74 61 62 6c 65 2e 0a 2a 2f  tabase table..*/
7e50: 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52 5f  .#define MASTER_
7e60: 52 4f 4f 54 20 20 20 20 20 20 20 31 0a 0a 2f 2a  ROOT       1../*
7e70: 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20  .** The name of 
7e80: 74 68 65 20 73 63 68 65 6d 61 20 74 61 62 6c 65  the schema table
7e90: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48  ..*/.#define SCH
7ea0: 45 4d 41 5f 54 41 42 4c 45 28 78 29 20 20 28 28  EMA_TABLE(x)  ((
7eb0: 21 4f 4d 49 54 5f 54 45 4d 50 44 42 29 26 26 28  !OMIT_TEMPDB)&&(
7ec0: 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d 41 53 54 45  x==1)?TEMP_MASTE
7ed0: 52 5f 4e 41 4d 45 3a 4d 41 53 54 45 52 5f 4e 41  R_NAME:MASTER_NA
7ee0: 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 6f 6e  ME)../*.** A con
7ef0: 76 65 6e 69 65 6e 63 65 20 6d 61 63 72 6f 20 74  venience macro t
7f00: 68 61 74 20 72 65 74 75 72 6e 73 20 74 68 65 20  hat returns the 
7f10: 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e  number of elemen
7f20: 74 73 20 69 6e 0a 2a 2a 20 61 6e 20 61 72 72 61  ts in.** an arra
7f30: 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 41 72  y..*/.#define Ar
7f40: 72 61 79 53 69 7a 65 28 58 29 20 20 20 20 28 28  raySize(X)    ((
7f50: 69 6e 74 29 28 73 69 7a 65 6f 66 28 58 29 2f 73  int)(sizeof(X)/s
7f60: 69 7a 65 6f 66 28 58 5b 30 5d 29 29 29 0a 0a 2f  izeof(X[0])))../
7f70: 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20 69  *.** Determine i
7f80: 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 69  f the argument i
7f90: 73 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f  s a power of two
7fa0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 6f  .*/.#define IsPo
7fb0: 77 65 72 4f 66 54 77 6f 28 58 29 20 28 28 28 58  werOfTwo(X) (((X
7fc0: 29 26 28 28 58 29 2d 31 29 29 3d 3d 30 29 0a 0a  )&((X)-1))==0)..
7fd0: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
7fe0: 69 6e 67 20 76 61 6c 75 65 20 61 73 20 61 20 64  ing value as a d
7ff0: 65 73 74 72 75 63 74 6f 72 20 6d 65 61 6e 73 20  estructor means 
8000: 74 6f 20 75 73 65 20 73 71 6c 69 74 65 33 44 62  to use sqlite3Db
8010: 46 72 65 65 28 29 2e 0a 2a 2a 20 54 68 65 20 73  Free()..** The s
8020: 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20 72  qlite3DbFree() r
8030: 6f 75 74 69 6e 65 20 72 65 71 75 69 72 65 73 20  outine requires 
8040: 74 77 6f 20 70 61 72 61 6d 65 74 65 72 73 20 69  two parameters i
8050: 6e 73 74 65 61 64 20 6f 66 20 74 68 65 0a 2a 2a  nstead of the.**
8060: 20 6f 6e 65 20 70 61 72 61 6d 65 74 65 72 20 74   one parameter t
8070: 68 61 74 20 64 65 73 74 72 75 63 74 6f 72 73 20  hat destructors 
8080: 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 2e 20 20  normally want.  
8090: 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20 69 6e  So we have to in
80a0: 74 72 6f 64 75 63 65 0a 2a 2a 20 74 68 69 73 20  troduce.** this 
80b0: 6d 61 67 69 63 20 76 61 6c 75 65 20 74 68 61 74  magic value that
80c0: 20 74 68 65 20 63 6f 64 65 20 6b 6e 6f 77 73 20   the code knows 
80d0: 74 6f 20 68 61 6e 64 6c 65 20 64 69 66 66 65 72  to handle differ
80e0: 65 6e 74 6c 79 2e 20 20 41 6e 79 0a 2a 2a 20 70  ently.  Any.** p
80f0: 6f 69 6e 74 65 72 20 77 69 6c 6c 20 77 6f 72 6b  ointer will work
8100: 20 68 65 72 65 20 61 73 20 6c 6f 6e 67 20 61 73   here as long as
8110: 20 69 74 20 69 73 20 64 69 73 74 69 6e 63 74 20   it is distinct 
8120: 66 72 6f 6d 20 53 51 4c 49 54 45 5f 53 54 41 54  from SQLITE_STAT
8130: 49 43 0a 2a 2a 20 61 6e 64 20 53 51 4c 49 54 45  IC.** and SQLITE
8140: 5f 54 52 41 4e 53 49 45 4e 54 2e 0a 2a 2f 0a 23  _TRANSIENT..*/.#
8150: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 59  define SQLITE_DY
8160: 4e 41 4d 49 43 20 20 20 28 28 73 71 6c 69 74 65  NAMIC   ((sqlite
8170: 33 5f 64 65 73 74 72 75 63 74 6f 72 5f 74 79 70  3_destructor_typ
8180: 65 29 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53  e)sqlite3MallocS
8190: 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e  ize)../*.** When
81a0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44   SQLITE_OMIT_WSD
81b0: 20 69 73 20 64 65 66 69 6e 65 64 2c 20 69 74 20   is defined, it 
81c0: 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 74  means that the t
81d0: 61 72 67 65 74 20 70 6c 61 74 66 6f 72 6d 20 64  arget platform d
81e0: 6f 65 73 0a 2a 2a 20 6e 6f 74 20 73 75 70 70 6f  oes.** not suppo
81f0: 72 74 20 57 72 69 74 61 62 6c 65 20 53 74 61 74  rt Writable Stat
8200: 69 63 20 44 61 74 61 20 28 57 53 44 29 20 73 75  ic Data (WSD) su
8210: 63 68 20 61 73 20 67 6c 6f 62 61 6c 20 61 6e 64  ch as global and
8220: 20 73 74 61 74 69 63 20 76 61 72 69 61 62 6c 65   static variable
8230: 73 2e 0a 2a 2a 20 41 6c 6c 20 76 61 72 69 61 62  s..** All variab
8240: 6c 65 73 20 6d 75 73 74 20 65 69 74 68 65 72 20  les must either 
8250: 62 65 20 6f 6e 20 74 68 65 20 73 74 61 63 6b 20  be on the stack 
8260: 6f 72 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61  or dynamically a
8270: 6c 6c 6f 63 61 74 65 64 20 66 72 6f 6d 0a 2a 2a  llocated from.**
8280: 20 74 68 65 20 68 65 61 70 2e 20 20 57 68 65 6e   the heap.  When
8290: 20 57 53 44 20 69 73 20 75 6e 73 75 70 70 6f 72   WSD is unsuppor
82a0: 74 65 64 2c 20 74 68 65 20 76 61 72 69 61 62 6c  ted, the variabl
82b0: 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 73  e declarations s
82c0: 63 61 74 74 65 72 65 64 0a 2a 2a 20 74 68 72 6f  cattered.** thro
82d0: 75 67 68 6f 75 74 20 74 68 65 20 53 51 4c 69 74  ughout the SQLit
82e0: 65 20 63 6f 64 65 20 6d 75 73 74 20 62 65 63 6f  e code must beco
82f0: 6d 65 20 63 6f 6e 73 74 61 6e 74 73 20 69 6e 73  me constants ins
8300: 74 65 61 64 2e 20 20 54 68 65 20 53 51 4c 49 54  tead.  The SQLIT
8310: 45 5f 57 53 44 0a 2a 2a 20 6d 61 63 72 6f 20 69  E_WSD.** macro i
8320: 73 20 75 73 65 64 20 66 6f 72 20 74 68 69 73 20  s used for this 
8330: 70 75 72 70 6f 73 65 2e 20 20 41 6e 64 20 69 6e  purpose.  And in
8340: 73 74 65 61 64 20 6f 66 20 72 65 66 65 72 65 6e  stead of referen
8350: 63 69 6e 67 20 74 68 65 20 76 61 72 69 61 62 6c  cing the variabl
8360: 65 0a 2a 2a 20 64 69 72 65 63 74 6c 79 2c 20 77  e.** directly, w
8370: 65 20 75 73 65 20 69 74 73 20 63 6f 6e 73 74 61  e use its consta
8380: 6e 74 20 61 73 20 61 20 6b 65 79 20 74 6f 20 6c  nt as a key to l
8390: 6f 6f 6b 75 70 20 74 68 65 20 72 75 6e 2d 74 69  ookup the run-ti
83a0: 6d 65 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20  me allocated.** 
83b0: 62 75 66 66 65 72 20 74 68 61 74 20 68 6f 6c 64  buffer that hold
83c0: 73 20 72 65 61 6c 20 76 61 72 69 61 62 6c 65 2e  s real variable.
83d0: 20 20 54 68 65 20 63 6f 6e 73 74 61 6e 74 20 69    The constant i
83e0: 73 20 61 6c 73 6f 20 74 68 65 20 69 6e 69 74 69  s also the initi
83f0: 61 6c 69 7a 65 72 0a 2a 2a 20 66 6f 72 20 74 68  alizer.** for th
8400: 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63  e run-time alloc
8410: 61 74 65 64 20 62 75 66 66 65 72 2e 0a 2a 2a 0a  ated buffer..**.
8420: 2a 2a 20 49 6e 20 74 68 65 20 75 73 75 61 6c 20  ** In the usual 
8430: 63 61 73 65 20 77 68 65 72 65 20 57 53 44 20 69  case where WSD i
8440: 73 20 73 75 70 70 6f 72 74 65 64 2c 20 74 68 65  s supported, the
8450: 20 53 51 4c 49 54 45 5f 57 53 44 20 61 6e 64 20   SQLITE_WSD and 
8460: 47 4c 4f 42 41 4c 0a 2a 2a 20 6d 61 63 72 6f 73  GLOBAL.** macros
8470: 20 62 65 63 6f 6d 65 20 6e 6f 2d 6f 70 73 20 61   become no-ops a
8480: 6e 64 20 68 61 76 65 20 7a 65 72 6f 20 70 65 72  nd have zero per
8490: 66 6f 72 6d 61 6e 63 65 20 69 6d 70 61 63 74 2e  formance impact.
84a0: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
84b0: 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20 23 64 65  E_OMIT_WSD.  #de
84c0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 53 44 20  fine SQLITE_WSD 
84d0: 63 6f 6e 73 74 0a 20 20 23 64 65 66 69 6e 65 20  const.  #define 
84e0: 47 4c 4f 42 41 4c 28 74 2c 76 29 20 28 2a 28 74  GLOBAL(t,v) (*(t
84f0: 2a 29 73 71 6c 69 74 65 33 5f 77 73 64 5f 66 69  *)sqlite3_wsd_fi
8500: 6e 64 28 28 76 6f 69 64 2a 29 26 28 76 29 2c 20  nd((void*)&(v), 
8510: 73 69 7a 65 6f 66 28 76 29 29 29 0a 20 20 23 64  sizeof(v))).  #d
8520: 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 6c 6f  efine sqlite3Glo
8530: 62 61 6c 43 6f 6e 66 69 67 20 47 4c 4f 42 41 4c  balConfig GLOBAL
8540: 28 73 74 72 75 63 74 20 53 71 6c 69 74 65 33 43  (struct Sqlite3C
8550: 6f 6e 66 69 67 2c 20 73 71 6c 69 74 65 33 43 6f  onfig, sqlite3Co
8560: 6e 66 69 67 29 0a 20 20 69 6e 74 20 73 71 6c 69  nfig).  int sqli
8570: 74 65 33 5f 77 73 64 5f 69 6e 69 74 28 69 6e 74  te3_wsd_init(int
8580: 20 4e 2c 20 69 6e 74 20 4a 29 3b 0a 20 20 76 6f   N, int J);.  vo
8590: 69 64 20 2a 73 71 6c 69 74 65 33 5f 77 73 64 5f  id *sqlite3_wsd_
85a0: 66 69 6e 64 28 76 6f 69 64 20 2a 4b 2c 20 69 6e  find(void *K, in
85b0: 74 20 4c 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  t L);.#else.  #d
85c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 53 44  efine SQLITE_WSD
85d0: 0a 20 20 23 64 65 66 69 6e 65 20 47 4c 4f 42 41  .  #define GLOBA
85e0: 4c 28 74 2c 76 29 20 76 0a 20 20 23 64 65 66 69  L(t,v) v.  #defi
85f0: 6e 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c  ne sqlite3Global
8600: 43 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f  Config sqlite3Co
8610: 6e 66 69 67 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  nfig.#endif../*.
8620: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
8630: 20 6d 61 63 72 6f 73 20 61 72 65 20 75 73 65 64   macros are used
8640: 20 74 6f 20 73 75 70 70 72 65 73 73 20 63 6f 6d   to suppress com
8650: 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 73 20 61  piler warnings a
8660: 6e 64 20 74 6f 0a 2a 2a 20 6d 61 6b 65 20 69 74  nd to.** make it
8670: 20 63 6c 65 61 72 20 74 6f 20 68 75 6d 61 6e 20   clear to human 
8680: 72 65 61 64 65 72 73 20 77 68 65 6e 20 61 20 66  readers when a f
8690: 75 6e 63 74 69 6f 6e 20 70 61 72 61 6d 65 74 65  unction paramete
86a0: 72 20 69 73 20 64 65 6c 69 62 65 72 61 74 65 6c  r is deliberatel
86b0: 79 0a 2a 2a 20 6c 65 66 74 20 75 6e 75 73 65 64  y.** left unused
86c0: 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79   within the body
86d0: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2e 20   of a function. 
86e0: 54 68 69 73 20 75 73 75 61 6c 6c 79 20 68 61 70  This usually hap
86f0: 70 65 6e 73 20 77 68 65 6e 0a 2a 2a 20 61 20 66  pens when.** a f
8700: 75 6e 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c 65  unction is calle
8710: 64 20 76 69 61 20 61 20 66 75 6e 63 74 69 6f 6e  d via a function
8720: 20 70 6f 69 6e 74 65 72 2e 20 46 6f 72 20 65 78   pointer. For ex
8730: 61 6d 70 6c 65 20 74 68 65 0a 2a 2a 20 69 6d 70  ample the.** imp
8740: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61  lementation of a
8750: 6e 20 53 51 4c 20 61 67 67 72 65 67 61 74 65 20  n SQL aggregate 
8760: 73 74 65 70 20 63 61 6c 6c 62 61 63 6b 20 6d 61  step callback ma
8770: 79 20 6e 6f 74 20 75 73 65 20 74 68 65 0a 2a 2a  y not use the.**
8780: 20 70 61 72 61 6d 65 74 65 72 20 69 6e 64 69 63   parameter indic
8790: 61 74 69 6e 67 20 74 68 65 20 6e 75 6d 62 65 72  ating the number
87a0: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 70 61   of arguments pa
87b0: 73 73 65 64 20 74 6f 20 74 68 65 20 61 67 67 72  ssed to the aggr
87c0: 65 67 61 74 65 2c 0a 2a 2a 20 69 66 20 69 74 20  egate,.** if it 
87d0: 6b 6e 6f 77 73 20 74 68 61 74 20 74 68 69 73 20  knows that this 
87e0: 69 73 20 65 6e 66 6f 72 63 65 64 20 65 6c 73 65  is enforced else
87f0: 77 68 65 72 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65  where..**.** Whe
8800: 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72  n a function par
8810: 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 75 73  ameter is not us
8820: 65 64 20 61 74 20 61 6c 6c 20 77 69 74 68 69 6e  ed at all within
8830: 20 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66   the body of a f
8840: 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 69 74 20 69  unction,.** it i
8850: 73 20 67 65 6e 65 72 61 6c 6c 79 20 6e 61 6d 65  s generally name
8860: 64 20 22 4e 6f 74 55 73 65 64 22 20 6f 72 20 22  d "NotUsed" or "
8870: 4e 6f 74 55 73 65 64 32 22 20 74 6f 20 6d 61 6b  NotUsed2" to mak
8880: 65 20 74 68 69 6e 67 73 20 65 76 65 6e 20 63 6c  e things even cl
8890: 65 61 72 65 72 2e 0a 2a 2a 20 48 6f 77 65 76 65  earer..** Howeve
88a0: 72 2c 20 74 68 65 73 65 20 6d 61 63 72 6f 73 20  r, these macros 
88b0: 6d 61 79 20 61 6c 73 6f 20 62 65 20 75 73 65 64  may also be used
88c0: 20 74 6f 20 73 75 70 70 72 65 73 73 20 77 61 72   to suppress war
88d0: 6e 69 6e 67 73 20 72 65 6c 61 74 65 64 20 74 6f  nings related to
88e0: 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 73 20 74  .** parameters t
88f0: 68 61 74 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e  hat may or may n
8900: 6f 74 20 62 65 20 75 73 65 64 20 64 65 70 65 6e  ot be used depen
8910: 64 69 6e 67 20 6f 6e 20 63 6f 6d 70 69 6c 61 74  ding on compilat
8920: 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e 0a 2a 2a 20  ion options..** 
8930: 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 6f 73  For example thos
8940: 65 20 70 61 72 61 6d 65 74 65 72 73 20 6f 6e 6c  e parameters onl
8950: 79 20 75 73 65 64 20 69 6e 20 61 73 73 65 72 74  y used in assert
8960: 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 49  () statements. I
8970: 6e 20 74 68 65 73 65 0a 2a 2a 20 63 61 73 65 73  n these.** cases
8980: 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20   the parameters 
8990: 61 72 65 20 6e 61 6d 65 64 20 61 73 20 70 65 72  are named as per
89a0: 20 74 68 65 20 75 73 75 61 6c 20 63 6f 6e 76 65   the usual conve
89b0: 6e 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69  ntions..*/.#defi
89c0: 6e 65 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45  ne UNUSED_PARAME
89d0: 54 45 52 28 78 29 20 28 76 6f 69 64 29 28 78 29  TER(x) (void)(x)
89e0: 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f  .#define UNUSED_
89f0: 50 41 52 41 4d 45 54 45 52 32 28 78 2c 79 29 20  PARAMETER2(x,y) 
8a00: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
8a10: 28 78 29 2c 55 4e 55 53 45 44 5f 50 41 52 41 4d  (x),UNUSED_PARAM
8a20: 45 54 45 52 28 79 29 0a 0a 2f 2a 0a 2a 2a 20 46  ETER(y)../*.** F
8a30: 6f 72 77 61 72 64 20 72 65 66 65 72 65 6e 63 65  orward reference
8a40: 73 20 74 6f 20 73 74 72 75 63 74 75 72 65 73 0a  s to structures.
8a50: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
8a60: 74 20 41 67 67 49 6e 66 6f 20 41 67 67 49 6e 66  t AggInfo AggInf
8a70: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
8a80: 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20 41 75  t AuthContext Au
8a90: 74 68 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64  thContext;.typed
8aa0: 65 66 20 73 74 72 75 63 74 20 41 75 74 6f 69 6e  ef struct Autoin
8ab0: 63 49 6e 66 6f 20 41 75 74 6f 69 6e 63 49 6e 66  cInfo AutoincInf
8ac0: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
8ad0: 74 20 42 69 74 76 65 63 20 42 69 74 76 65 63 3b  t Bitvec Bitvec;
8ae0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8af0: 43 6f 6c 6c 53 65 71 20 43 6f 6c 6c 53 65 71 3b  CollSeq CollSeq;
8b00: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8b10: 43 6f 6c 75 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a 74  Column Column;.t
8b20: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44 62  ypedef struct Db
8b30: 20 44 62 3b 0a 74 79 70 65 64 65 66 20 73 74 72   Db;.typedef str
8b40: 75 63 74 20 53 63 68 65 6d 61 20 53 63 68 65 6d  uct Schema Schem
8b50: 61 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  a;.typedef struc
8b60: 74 20 45 78 70 72 20 45 78 70 72 3b 0a 74 79 70  t Expr Expr;.typ
8b70: 65 64 65 66 20 73 74 72 75 63 74 20 45 78 70 72  edef struct Expr
8b80: 4c 69 73 74 20 45 78 70 72 4c 69 73 74 3b 0a 74  List ExprList;.t
8b90: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 45 78  ypedef struct Ex
8ba0: 70 72 53 70 61 6e 20 45 78 70 72 53 70 61 6e 3b  prSpan ExprSpan;
8bb0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8bc0: 46 4b 65 79 20 46 4b 65 79 3b 0a 74 79 70 65 64  FKey FKey;.typed
8bd0: 65 66 20 73 74 72 75 63 74 20 46 75 6e 63 44 65  ef struct FuncDe
8be0: 73 74 72 75 63 74 6f 72 20 46 75 6e 63 44 65 73  structor FuncDes
8bf0: 74 72 75 63 74 6f 72 3b 0a 74 79 70 65 64 65 66  tructor;.typedef
8c00: 20 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 20   struct FuncDef 
8c10: 46 75 6e 63 44 65 66 3b 0a 74 79 70 65 64 65 66  FuncDef;.typedef
8c20: 20 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 48   struct FuncDefH
8c30: 61 73 68 20 46 75 6e 63 44 65 66 48 61 73 68 3b  ash FuncDefHash;
8c40: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8c50: 49 64 4c 69 73 74 20 49 64 4c 69 73 74 3b 0a 74  IdList IdList;.t
8c60: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49 6e  ypedef struct In
8c70: 64 65 78 20 49 6e 64 65 78 3b 0a 74 79 70 65 64  dex Index;.typed
8c80: 65 66 20 73 74 72 75 63 74 20 49 6e 64 65 78 53  ef struct IndexS
8c90: 61 6d 70 6c 65 20 49 6e 64 65 78 53 61 6d 70 6c  ample IndexSampl
8ca0: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
8cb0: 74 20 4b 65 79 43 6c 61 73 73 20 4b 65 79 43 6c  t KeyClass KeyCl
8cc0: 61 73 73 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ass;.typedef str
8cd0: 75 63 74 20 4b 65 79 49 6e 66 6f 20 4b 65 79 49  uct KeyInfo KeyI
8ce0: 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72  nfo;.typedef str
8cf0: 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 4c 6f  uct Lookaside Lo
8d00: 6f 6b 61 73 69 64 65 3b 0a 74 79 70 65 64 65 66  okaside;.typedef
8d10: 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64   struct Lookasid
8d20: 65 53 6c 6f 74 20 4c 6f 6f 6b 61 73 69 64 65 53  eSlot LookasideS
8d30: 6c 6f 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  lot;.typedef str
8d40: 75 63 74 20 4d 6f 64 75 6c 65 20 4d 6f 64 75 6c  uct Module Modul
8d50: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
8d60: 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 4e 61  t NameContext Na
8d70: 6d 65 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64  meContext;.typed
8d80: 65 66 20 73 74 72 75 63 74 20 50 61 72 73 65 20  ef struct Parse 
8d90: 50 61 72 73 65 3b 0a 74 79 70 65 64 65 66 20 73  Parse;.typedef s
8da0: 74 72 75 63 74 20 50 72 65 55 70 64 61 74 65 20  truct PreUpdate 
8db0: 50 72 65 55 70 64 61 74 65 3b 0a 74 79 70 65 64  PreUpdate;.typed
8dc0: 65 66 20 73 74 72 75 63 74 20 50 72 69 6e 74 66  ef struct Printf
8dd0: 41 72 67 75 6d 65 6e 74 73 20 50 72 69 6e 74 66  Arguments Printf
8de0: 41 72 67 75 6d 65 6e 74 73 3b 0a 74 79 70 65 64  Arguments;.typed
8df0: 65 66 20 73 74 72 75 63 74 20 52 6f 77 53 65 74  ef struct RowSet
8e00: 20 52 6f 77 53 65 74 3b 0a 74 79 70 65 64 65 66   RowSet;.typedef
8e10: 20 73 74 72 75 63 74 20 53 61 76 65 70 6f 69 6e   struct Savepoin
8e20: 74 20 53 61 76 65 70 6f 69 6e 74 3b 0a 74 79 70  t Savepoint;.typ
8e30: 65 64 65 66 20 73 74 72 75 63 74 20 53 65 6c 65  edef struct Sele
8e40: 63 74 20 53 65 6c 65 63 74 3b 0a 74 79 70 65 64  ct Select;.typed
8e50: 65 66 20 73 74 72 75 63 74 20 53 51 4c 69 74 65  ef struct SQLite
8e60: 54 68 72 65 61 64 20 53 51 4c 69 74 65 54 68 72  Thread SQLiteThr
8e70: 65 61 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ead;.typedef str
8e80: 75 63 74 20 53 65 6c 65 63 74 44 65 73 74 20 53  uct SelectDest S
8e90: 65 6c 65 63 74 44 65 73 74 3b 0a 74 79 70 65 64  electDest;.typed
8ea0: 65 66 20 73 74 72 75 63 74 20 53 72 63 4c 69 73  ef struct SrcLis
8eb0: 74 20 53 72 63 4c 69 73 74 3b 0a 74 79 70 65 64  t SrcList;.typed
8ec0: 65 66 20 73 74 72 75 63 74 20 53 74 72 41 63 63  ef struct StrAcc
8ed0: 75 6d 20 53 74 72 41 63 63 75 6d 3b 0a 74 79 70  um StrAccum;.typ
8ee0: 65 64 65 66 20 73 74 72 75 63 74 20 54 61 62 6c  edef struct Tabl
8ef0: 65 20 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66  e Table;.typedef
8f00: 20 73 74 72 75 63 74 20 54 61 62 6c 65 4c 6f 63   struct TableLoc
8f10: 6b 20 54 61 62 6c 65 4c 6f 63 6b 3b 0a 74 79 70  k TableLock;.typ
8f20: 65 64 65 66 20 73 74 72 75 63 74 20 54 6f 6b 65  edef struct Toke
8f30: 6e 20 54 6f 6b 65 6e 3b 0a 74 79 70 65 64 65 66  n Token;.typedef
8f40: 20 73 74 72 75 63 74 20 54 72 65 65 56 69 65 77   struct TreeView
8f50: 20 54 72 65 65 56 69 65 77 3b 0a 74 79 70 65 64   TreeView;.typed
8f60: 65 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  ef struct Trigge
8f70: 72 20 54 72 69 67 67 65 72 3b 0a 74 79 70 65 64  r Trigger;.typed
8f80: 65 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  ef struct Trigge
8f90: 72 50 72 67 20 54 72 69 67 67 65 72 50 72 67 3b  rPrg TriggerPrg;
8fa0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8fb0: 54 72 69 67 67 65 72 53 74 65 70 20 54 72 69 67  TriggerStep Trig
8fc0: 67 65 72 53 74 65 70 3b 0a 74 79 70 65 64 65 66  gerStep;.typedef
8fd0: 20 73 74 72 75 63 74 20 55 6e 70 61 63 6b 65 64   struct Unpacked
8fe0: 52 65 63 6f 72 64 20 55 6e 70 61 63 6b 65 64 52  Record UnpackedR
8ff0: 65 63 6f 72 64 3b 0a 74 79 70 65 64 65 66 20 73  ecord;.typedef s
9000: 74 72 75 63 74 20 56 54 61 62 6c 65 20 56 54 61  truct VTable VTa
9010: 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ble;.typedef str
9020: 75 63 74 20 56 74 61 62 43 74 78 20 56 74 61 62  uct VtabCtx Vtab
9030: 43 74 78 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Ctx;.typedef str
9040: 75 63 74 20 57 61 6c 6b 65 72 20 57 61 6c 6b 65  uct Walker Walke
9050: 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  r;.typedef struc
9060: 74 20 57 68 65 72 65 49 6e 66 6f 20 57 68 65 72  t WhereInfo Wher
9070: 65 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73  eInfo;.typedef s
9080: 74 72 75 63 74 20 57 69 74 68 20 57 69 74 68 3b  truct With With;
9090: 0a 0a 2f 2a 20 41 20 56 4c 69 73 74 20 6f 62 6a  ../* A VList obj
90a0: 65 63 74 20 72 65 63 6f 72 64 73 20 61 20 6d 61  ect records a ma
90b0: 70 70 69 6e 67 20 62 65 74 77 65 65 6e 20 70 61  pping between pa
90c0: 72 61 6d 65 74 65 72 73 2f 76 61 72 69 61 62 6c  rameters/variabl
90d0: 65 73 2f 77 69 6c 64 63 61 72 64 73 0a 2a 2a 20  es/wildcards.** 
90e0: 69 6e 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  in the SQL state
90f0: 6d 65 6e 74 20 28 73 75 63 68 20 61 73 20 24 61  ment (such as $a
9100: 62 63 2c 20 40 70 71 72 2c 20 6f 72 20 3a 78 79  bc, @pqr, or :xy
9110: 7a 29 20 61 6e 64 20 74 68 65 20 69 6e 74 65 67  z) and the integ
9120: 65 72 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e  er.** variable n
9130: 75 6d 62 65 72 20 61 73 73 6f 63 69 61 74 65 64  umber associated
9140: 20 77 69 74 68 20 74 68 61 74 20 70 61 72 61 6d   with that param
9150: 65 74 65 72 2e 20 20 53 65 65 20 74 68 65 20 66  eter.  See the f
9160: 6f 72 6d 61 74 20 64 65 73 63 72 69 70 74 69 6f  ormat descriptio
9170: 6e 0a 2a 2a 20 6f 6e 20 74 68 65 20 73 71 6c 69  n.** on the sqli
9180: 74 65 33 56 4c 69 73 74 41 64 64 28 29 20 72 6f  te3VListAdd() ro
9190: 75 74 69 6e 65 20 66 6f 72 20 6d 6f 72 65 20 69  utine for more i
91a0: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 20 41 20 56  nformation.  A V
91b0: 4c 69 73 74 20 69 73 20 72 65 61 6c 6c 79 0a 2a  List is really.*
91c0: 2a 20 6a 75 73 74 20 61 6e 20 61 72 72 61 79 20  * just an array 
91d0: 6f 66 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2f 0a  of integers..*/.
91e0: 74 79 70 65 64 65 66 20 69 6e 74 20 56 4c 69 73  typedef int VLis
91f0: 74 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 65 72 20  t;../*.** Defer 
9200: 73 6f 75 72 63 69 6e 67 20 76 64 62 65 2e 68 20  sourcing vdbe.h 
9210: 61 6e 64 20 62 74 72 65 65 2e 68 20 75 6e 74 69  and btree.h unti
9220: 6c 20 61 66 74 65 72 20 74 68 65 20 22 75 38 22  l after the "u8"
9230: 20 61 6e 64 0a 2a 2a 20 22 42 75 73 79 48 61 6e   and.** "BusyHan
9240: 64 6c 65 72 22 20 74 79 70 65 64 65 66 73 2e 20  dler" typedefs. 
9250: 76 64 62 65 2e 68 20 61 6c 73 6f 20 72 65 71 75  vdbe.h also requ
9260: 69 72 65 73 20 61 20 66 65 77 20 6f 66 20 74 68  ires a few of th
9270: 65 20 6f 70 61 71 75 65 0a 2a 2a 20 70 6f 69 6e  e opaque.** poin
9280: 74 65 72 20 74 79 70 65 73 20 28 69 2e 65 2e 20  ter types (i.e. 
9290: 46 75 6e 63 44 65 66 29 20 64 65 66 69 6e 65 64  FuncDef) defined
92a0: 20 61 62 6f 76 65 2e 0a 2a 2f 0a 23 69 6e 63 6c   above..*/.#incl
92b0: 75 64 65 20 22 62 74 72 65 65 2e 68 22 0a 23 69  ude "btree.h".#i
92c0: 6e 63 6c 75 64 65 20 22 76 64 62 65 2e 68 22 0a  nclude "vdbe.h".
92d0: 23 69 6e 63 6c 75 64 65 20 22 70 61 67 65 72 2e  #include "pager.
92e0: 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 63 61  h".#include "pca
92f0: 63 68 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  che.h".#include 
9300: 22 6f 73 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  "os.h".#include 
9310: 22 6d 75 74 65 78 2e 68 22 0a 0a 2f 2a 20 54 68  "mutex.h"../* Th
9320: 65 20 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44  e SQLITE_EXTRA_D
9330: 55 52 41 42 4c 45 20 63 6f 6d 70 69 6c 65 2d 74  URABLE compile-t
9340: 69 6d 65 20 6f 70 74 69 6f 6e 20 75 73 65 64 20  ime option used 
9350: 74 6f 20 73 65 74 20 74 68 65 20 64 65 66 61 75  to set the defau
9360: 6c 74 0a 2a 2a 20 73 79 6e 63 68 72 6f 6e 6f 75  lt.** synchronou
9370: 73 20 73 65 74 74 69 6e 67 20 74 6f 20 45 58 54  s setting to EXT
9380: 52 41 2e 20 20 49 74 20 69 73 20 6e 6f 20 6c 6f  RA.  It is no lo
9390: 6e 67 65 72 20 73 75 70 70 6f 72 74 65 64 2e 0a  nger supported..
93a0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
93b0: 5f 45 58 54 52 41 5f 44 55 52 41 42 4c 45 0a 23  _EXTRA_DURABLE.#
93c0: 20 77 61 72 6e 69 6e 67 20 55 73 65 20 53 51 4c   warning Use SQL
93d0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43  ITE_DEFAULT_SYNC
93e0: 48 52 4f 4e 4f 55 53 3d 33 20 69 6e 73 74 65 61  HRONOUS=3 instea
93f0: 64 20 6f 66 20 53 51 4c 49 54 45 5f 45 58 54 52  d of SQLITE_EXTR
9400: 41 5f 44 55 52 41 42 4c 45 0a 23 20 64 65 66 69  A_DURABLE.# defi
9410: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
9420: 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 33 0a  T_SYNCHRONOUS 3.
9430: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65  #endif../*.** De
9440: 66 61 75 6c 74 20 73 79 6e 63 68 72 6f 6e 6f 75  fault synchronou
9450: 73 20 6c 65 76 65 6c 73 2e 0a 2a 2a 0a 2a 2a 20  s levels..**.** 
9460: 4e 6f 74 65 20 74 68 61 74 20 28 66 6f 72 20 68  Note that (for h
9470: 69 73 74 6f 72 63 61 6c 20 72 65 61 73 6f 6e 73  istorcal reasons
9480: 29 20 74 68 65 20 50 41 47 45 52 5f 53 59 4e 43  ) the PAGER_SYNC
9490: 48 52 4f 4e 4f 55 53 5f 2a 20 6d 61 63 72 6f 73  HRONOUS_* macros
94a0: 20 64 69 66 66 65 72 0a 2a 2a 20 66 72 6f 6d 20   differ.** from 
94b0: 74 68 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  the SQLITE_DEFAU
94c0: 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 76  LT_SYNCHRONOUS v
94d0: 61 6c 75 65 20 62 79 20 31 2e 0a 2a 2a 0a 2a 2a  alue by 1..**.**
94e0: 20 20 20 20 20 20 20 20 20 20 20 50 41 47 45 52             PAGER
94f0: 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 20 20 20  _SYNCHRONOUS    
9500: 20 20 20 44 45 46 41 55 4c 54 5f 53 59 4e 43 48     DEFAULT_SYNCH
9510: 52 4f 4e 4f 55 53 0a 2a 2a 20 20 20 4f 46 46 20  RONOUS.**   OFF 
9520: 20 20 20 20 20 20 20 20 20 20 31 20 20 20 20 20            1     
9530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9540: 20 20 20 20 30 0a 2a 2a 20 20 20 4e 4f 52 4d 41      0.**   NORMA
9550: 4c 20 20 20 20 20 20 20 20 32 20 20 20 20 20 20  L        2      
9560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9570: 20 20 20 31 0a 2a 2a 20 20 20 46 55 4c 4c 20 20     1.**   FULL  
9580: 20 20 20 20 20 20 20 20 33 20 20 20 20 20 20 20          3       
9590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
95a0: 20 20 32 0a 2a 2a 20 20 20 45 58 54 52 41 20 20    2.**   EXTRA  
95b0: 20 20 20 20 20 20 20 34 20 20 20 20 20 20 20 20         4        
95c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
95d0: 20 33 0a 2a 2a 0a 2a 2a 20 54 68 65 20 22 50 52   3.**.** The "PR
95e0: 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73  AGMA synchronous
95f0: 22 20 73 74 61 74 65 6d 65 6e 74 20 61 6c 73 6f  " statement also
9600: 20 75 73 65 73 20 74 68 65 20 7a 65 72 6f 2d 62   uses the zero-b
9610: 61 73 65 64 20 6e 75 6d 62 65 72 73 2e 0a 2a 2a  ased numbers..**
9620: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
9630: 20 74 68 65 20 7a 65 72 6f 2d 62 61 73 65 64 20   the zero-based 
9640: 6e 75 6d 62 65 72 73 20 61 72 65 20 75 73 65 64  numbers are used
9650: 20 66 6f 72 20 61 6c 6c 20 65 78 74 65 72 6e 61   for all externa
9660: 6c 20 69 6e 74 65 72 66 61 63 65 73 0a 2a 2a 20  l interfaces.** 
9670: 61 6e 64 20 74 68 65 20 6f 6e 65 2d 62 61 73 65  and the one-base
9680: 64 20 76 61 6c 75 65 73 20 61 72 65 20 75 73 65  d values are use
9690: 64 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 0a 2a 2f  d internally..*/
96a0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
96b0: 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e  DEFAULT_SYNCHRON
96c0: 4f 55 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  OUS.# define SQL
96d0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43  ITE_DEFAULT_SYNC
96e0: 48 52 4f 4e 4f 55 53 20 32 0a 23 65 6e 64 69 66  HRONOUS 2.#endif
96f0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
9700: 44 45 46 41 55 4c 54 5f 57 41 4c 5f 53 59 4e 43  DEFAULT_WAL_SYNC
9710: 48 52 4f 4e 4f 55 53 0a 23 20 64 65 66 69 6e 65  HRONOUS.# define
9720: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
9730: 57 41 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20  WAL_SYNCHRONOUS 
9740: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53  SQLITE_DEFAULT_S
9750: 59 4e 43 48 52 4f 4e 4f 55 53 0a 23 65 6e 64 69  YNCHRONOUS.#endi
9760: 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61  f../*.** Each da
9770: 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62  tabase file to b
9780: 65 20 61 63 63 65 73 73 65 64 20 62 79 20 74 68  e accessed by th
9790: 65 20 73 79 73 74 65 6d 20 69 73 20 61 6e 20 69  e system is an i
97a0: 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68  nstance.** of th
97b0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
97c0: 63 74 75 72 65 2e 20 20 54 68 65 72 65 20 61 72  cture.  There ar
97d0: 65 20 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f  e normally two o
97e0: 66 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72  f these structur
97f0: 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c  es.** in the sql
9800: 69 74 65 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e  ite.aDb[] array.
9810: 20 20 61 44 62 5b 30 5d 20 69 73 20 74 68 65 20    aDb[0] is the 
9820: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
9830: 6c 65 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d  le and.** aDb[1]
9840: 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65   is the database
9850: 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 68 6f   file used to ho
9860: 6c 64 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  ld temporary tab
9870: 6c 65 73 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c  les.  Additional
9880: 0a 2a 2a 20 64 61 74 61 62 61 73 65 73 20 6d 61  .** databases ma
9890: 79 20 62 65 20 61 74 74 61 63 68 65 64 2e 0a 2a  y be attached..*
98a0: 2f 0a 73 74 72 75 63 74 20 44 62 20 7b 0a 20 20  /.struct Db {.  
98b0: 63 68 61 72 20 2a 7a 44 62 53 4e 61 6d 65 3b 20  char *zDbSName; 
98c0: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
98d0: 74 68 69 73 20 64 61 74 61 62 61 73 65 2e 20 28  this database. (
98e0: 73 63 68 65 6d 61 20 6e 61 6d 65 2c 20 6e 6f 74  schema name, not
98f0: 20 66 69 6c 65 6e 61 6d 65 29 20 2a 2f 0a 20 20   filename) */.  
9900: 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20  Btree *pBt;     
9910: 20 20 20 20 20 2f 2a 20 54 68 65 20 42 2a 54 72       /* The B*Tr
9920: 65 65 20 73 74 72 75 63 74 75 72 65 20 66 6f 72  ee structure for
9930: 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 66   this database f
9940: 69 6c 65 20 2a 2f 0a 20 20 75 38 20 73 61 66 65  ile */.  u8 safe
9950: 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20 2f 2a  ty_level;     /*
9960: 20 48 6f 77 20 61 67 67 72 65 73 73 69 76 65 20   How aggressive 
9970: 61 74 20 73 79 6e 63 69 6e 67 20 64 61 74 61 20  at syncing data 
9980: 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 75 38 20  to disk */.  u8 
9990: 62 53 79 6e 63 53 65 74 3b 20 20 20 20 20 20 20  bSyncSet;       
99a0: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 22 50 52    /* True if "PR
99b0: 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73  AGMA synchronous
99c0: 3d 4e 22 20 68 61 73 20 62 65 65 6e 20 72 75 6e  =N" has been run
99d0: 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
99e0: 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 50 6f  chema;     /* Po
99f0: 69 6e 74 65 72 20 74 6f 20 64 61 74 61 62 61 73  inter to databas
9a00: 65 20 73 63 68 65 6d 61 20 28 70 6f 73 73 69 62  e schema (possib
9a10: 6c 79 20 73 68 61 72 65 64 29 20 2a 2f 0a 7d 3b  ly shared) */.};
9a20: 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
9a30: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
9a40: 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 73  wing structure s
9a50: 74 6f 72 65 73 20 61 20 64 61 74 61 62 61 73 65  tores a database
9a60: 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d   schema..**.** M
9a70: 6f 73 74 20 53 63 68 65 6d 61 20 6f 62 6a 65 63  ost Schema objec
9a80: 74 73 20 61 72 65 20 61 73 73 6f 63 69 61 74 65  ts are associate
9a90: 64 20 77 69 74 68 20 61 20 42 74 72 65 65 2e 20  d with a Btree. 
9aa0: 20 54 68 65 20 65 78 63 65 70 74 69 6f 6e 20 69   The exception i
9ab0: 73 0a 2a 2a 20 74 68 65 20 53 63 68 65 6d 61 20  s.** the Schema 
9ac0: 66 6f 72 20 74 68 65 20 54 45 4d 50 20 64 61 74  for the TEMP dat
9ad0: 61 62 61 65 73 20 28 73 71 6c 69 74 65 33 2e 61  abaes (sqlite3.a
9ae0: 44 62 5b 31 5d 29 20 77 68 69 63 68 20 69 73 20  Db[1]) which is 
9af0: 66 72 65 65 2d 73 74 61 6e 64 69 6e 67 2e 0a 2a  free-standing..*
9b00: 2a 20 49 6e 20 73 68 61 72 65 64 20 63 61 63 68  * In shared cach
9b10: 65 20 6d 6f 64 65 2c 20 61 20 73 69 6e 67 6c 65  e mode, a single
9b20: 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 20 63   Schema object c
9b30: 61 6e 20 62 65 20 73 68 61 72 65 64 20 62 79 20  an be shared by 
9b40: 6d 75 6c 74 69 70 6c 65 0a 2a 2a 20 42 74 72 65  multiple.** Btre
9b50: 65 73 20 74 68 61 74 20 72 65 66 65 72 20 74 6f  es that refer to
9b60: 20 74 68 65 20 73 61 6d 65 20 75 6e 64 65 72 6c   the same underl
9b70: 79 69 6e 67 20 42 74 53 68 61 72 65 64 20 6f 62  ying BtShared ob
9b80: 6a 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 53 63 68 65  ject..**.** Sche
9b90: 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61  ma objects are a
9ba0: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 61  utomatically dea
9bb0: 6c 6c 6f 63 61 74 65 64 20 77 68 65 6e 20 74 68  llocated when th
9bc0: 65 20 6c 61 73 74 20 42 74 72 65 65 20 74 68 61  e last Btree tha
9bd0: 74 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 73 20  t.** references 
9be0: 74 68 65 6d 20 69 73 20 64 65 73 74 72 6f 79 65  them is destroye
9bf0: 64 2e 20 20 20 54 68 65 20 54 45 4d 50 20 53 63  d.   The TEMP Sc
9c00: 68 65 6d 61 20 69 73 20 6d 61 6e 75 61 6c 6c 79  hema is manually
9c10: 20 66 72 65 65 64 20 62 79 0a 2a 2a 20 73 71 6c   freed by.** sql
9c20: 69 74 65 33 5f 63 6c 6f 73 65 28 29 2e 0a 2a 0a  ite3_close()..*.
9c30: 2a 2a 20 41 20 74 68 72 65 61 64 20 6d 75 73 74  ** A thread must
9c40: 20 62 65 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75   be holding a mu
9c50: 74 65 78 20 6f 6e 20 74 68 65 20 63 6f 72 72 65  tex on the corre
9c60: 73 70 6f 6e 64 69 6e 67 20 42 74 72 65 65 20 69  sponding Btree i
9c70: 6e 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 61 63  n order.** to ac
9c80: 63 65 73 73 20 53 63 68 65 6d 61 20 63 6f 6e 74  cess Schema cont
9c90: 65 6e 74 2e 20 20 54 68 69 73 20 69 6d 70 6c 69  ent.  This impli
9ca0: 65 73 20 74 68 61 74 20 74 68 65 20 74 68 72 65  es that the thre
9cb0: 61 64 20 6d 75 73 74 20 61 6c 73 6f 20 62 65 0a  ad must also be.
9cc0: 2a 2a 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74  ** holding a mut
9cd0: 65 78 20 6f 6e 20 74 68 65 20 73 71 6c 69 74 65  ex on the sqlite
9ce0: 33 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 69  3 connection poi
9cf0: 6e 74 65 72 20 74 68 61 74 20 6f 77 6e 73 20 74  nter that owns t
9d00: 68 65 20 42 74 72 65 65 2e 0a 2a 2a 20 46 6f 72  he Btree..** For
9d10: 20 61 20 54 45 4d 50 20 53 63 68 65 6d 61 2c 20   a TEMP Schema, 
9d20: 6f 6e 6c 79 20 74 68 65 20 63 6f 6e 6e 65 63 74  only the connect
9d30: 69 6f 6e 20 6d 75 74 65 78 20 69 73 20 72 65 71  ion mutex is req
9d40: 75 69 72 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  uired..*/.struct
9d50: 20 53 63 68 65 6d 61 20 7b 0a 20 20 69 6e 74 20   Schema {.  int 
9d60: 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20  schema_cookie;  
9d70: 20 2f 2a 20 44 61 74 61 62 61 73 65 20 73 63 68   /* Database sch
9d80: 65 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62  ema version numb
9d90: 65 72 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65  er for this file
9da0: 20 2a 2f 0a 20 20 69 6e 74 20 69 47 65 6e 65 72   */.  int iGener
9db0: 61 74 69 6f 6e 3b 20 20 20 20 20 2f 2a 20 47 65  ation;     /* Ge
9dc0: 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72  neration counter
9dd0: 2e 20 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77  .  Incremented w
9de0: 69 74 68 20 65 61 63 68 20 63 68 61 6e 67 65 20  ith each change 
9df0: 2a 2f 0a 20 20 48 61 73 68 20 74 62 6c 48 61 73  */.  Hash tblHas
9e00: 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  h;        /* All
9e10: 20 74 61 62 6c 65 73 20 69 6e 64 65 78 65 64 20   tables indexed 
9e20: 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73  by name */.  Has
9e30: 68 20 69 64 78 48 61 73 68 3b 20 20 20 20 20 20  h idxHash;      
9e40: 20 20 2f 2a 20 41 6c 6c 20 28 6e 61 6d 65 64 29    /* All (named)
9e50: 20 69 6e 64 69 63 65 73 20 69 6e 64 65 78 65 64   indices indexed
9e60: 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61   by name */.  Ha
9e70: 73 68 20 74 72 69 67 48 61 73 68 3b 20 20 20 20  sh trigHash;    
9e80: 20 20 20 2f 2a 20 41 6c 6c 20 74 72 69 67 67 65     /* All trigge
9e90: 72 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61  rs indexed by na
9ea0: 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 66 6b 65  me */.  Hash fke
9eb0: 79 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20  yHash;       /* 
9ec0: 41 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73  All foreign keys
9ed0: 20 62 79 20 72 65 66 65 72 65 6e 63 65 64 20 74   by referenced t
9ee0: 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54  able name */.  T
9ef0: 61 62 6c 65 20 2a 70 53 65 71 54 61 62 3b 20 20  able *pSeqTab;  
9f00: 20 20 20 20 2f 2a 20 54 68 65 20 73 71 6c 69 74      /* The sqlit
9f10: 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65  e_sequence table
9f20: 20 75 73 65 64 20 62 79 20 41 55 54 4f 49 4e 43   used by AUTOINC
9f30: 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 75 38 20 66  REMENT */.  u8 f
9f40: 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20  ile_format;     
9f50: 20 2f 2a 20 53 63 68 65 6d 61 20 66 6f 72 6d 61   /* Schema forma
9f60: 74 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 74 68  t version for th
9f70: 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20  is file */.  u8 
9f80: 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  enc;            
9f90: 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69    /* Text encodi
9fa0: 6e 67 20 75 73 65 64 20 62 79 20 74 68 69 73 20  ng used by this 
9fb0: 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 31  database */.  u1
9fc0: 36 20 73 63 68 65 6d 61 46 6c 61 67 73 3b 20 20  6 schemaFlags;  
9fd0: 20 20 20 2f 2a 20 46 6c 61 67 73 20 61 73 73 6f     /* Flags asso
9fe0: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73  ciated with this
9ff0: 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74   schema */.  int
a000: 20 63 61 63 68 65 5f 73 69 7a 65 3b 20 20 20 20   cache_size;    
a010: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70    /* Number of p
a020: 61 67 65 73 20 74 6f 20 75 73 65 20 69 6e 20 74  ages to use in t
a030: 68 65 20 63 61 63 68 65 20 2a 2f 0a 7d 3b 0a 0a  he cache */.};..
a040: 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72  /*.** These macr
a050: 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  os can be used t
a060: 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20  o test, set, or 
a070: 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74 68  clear bits in th
a080: 65 0a 2a 2a 20 44 62 2e 70 53 63 68 65 6d 61 2d  e.** Db.pSchema-
a090: 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f  >flags field..*/
a0a0: 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73 50 72  .#define DbHasPr
a0b0: 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20  operty(D,I,P)   
a0c0: 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e    (((D)->aDb[I].
a0d0: 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46  pSchema->schemaF
a0e0: 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a  lags&(P))==(P)).
a0f0: 23 64 65 66 69 6e 65 20 44 62 48 61 73 41 6e 79  #define DbHasAny
a100: 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20  Property(D,I,P) 
a110: 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70   (((D)->aDb[I].p
a120: 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c  Schema->schemaFl
a130: 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65  ags&(P))!=0).#de
a140: 66 69 6e 65 20 44 62 53 65 74 50 72 6f 70 65 72  fine DbSetProper
a150: 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28 44  ty(D,I,P)     (D
a160: 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d  )->aDb[I].pSchem
a170: 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 7c 3d  a->schemaFlags|=
a180: 28 50 29 0a 23 64 65 66 69 6e 65 20 44 62 43 6c  (P).#define DbCl
a190: 65 61 72 50 72 6f 70 65 72 74 79 28 44 2c 49 2c  earProperty(D,I,
a1a0: 50 29 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d  P)   (D)->aDb[I]
a1b0: 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61  .pSchema->schema
a1c0: 46 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a  Flags&=~(P)../*.
a1d0: 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  ** Allowed value
a1e0: 73 20 66 6f 72 20 74 68 65 20 44 42 2e 70 53 63  s for the DB.pSc
a1f0: 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c  hema->flags fiel
a200: 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 44 42 5f  d..**.** The DB_
a210: 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 66 6c 61  SchemaLoaded fla
a220: 67 20 69 73 20 73 65 74 20 61 66 74 65 72 20 74  g is set after t
a230: 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
a240: 6d 61 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 72  ma has been.** r
a250: 65 61 64 20 69 6e 74 6f 20 69 6e 74 65 72 6e 61  ead into interna
a260: 6c 20 68 61 73 68 20 74 61 62 6c 65 73 2e 0a 2a  l hash tables..*
a270: 2a 0a 2a 2a 20 44 42 5f 55 6e 72 65 73 65 74 56  *.** DB_UnresetV
a280: 69 65 77 73 20 6d 65 61 6e 73 20 74 68 61 74 20  iews means that 
a290: 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 76 69 65 77  one or more view
a2a0: 73 20 68 61 76 65 20 63 6f 6c 75 6d 6e 20 6e 61  s have column na
a2b0: 6d 65 73 20 74 68 61 74 0a 2a 2a 20 68 61 76 65  mes that.** have
a2c0: 20 62 65 65 6e 20 66 69 6c 6c 65 64 20 6f 75 74   been filled out
a2d0: 2e 20 20 49 66 20 74 68 65 20 73 63 68 65 6d 61  .  If the schema
a2e0: 20 63 68 61 6e 67 65 73 2c 20 74 68 65 73 65 20   changes, these 
a2f0: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6d 69 67  column names mig
a300: 68 74 0a 2a 2a 20 63 68 61 6e 67 65 73 20 61 6e  ht.** changes an
a310: 64 20 73 6f 20 74 68 65 20 76 69 65 77 20 77 69  d so the view wi
a320: 6c 6c 20 6e 65 65 64 20 74 6f 20 62 65 20 72 65  ll need to be re
a330: 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  set..*/.#define 
a340: 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20  DB_SchemaLoaded 
a350: 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 54 68     0x0001  /* Th
a360: 65 20 73 63 68 65 6d 61 20 68 61 73 20 62 65 65  e schema has bee
a370: 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a 23 64 65 66  n loaded */.#def
a380: 69 6e 65 20 44 42 5f 55 6e 72 65 73 65 74 56 69  ine DB_UnresetVi
a390: 65 77 73 20 20 20 20 30 78 30 30 30 32 20 20 2f  ews    0x0002  /
a3a0: 2a 20 53 6f 6d 65 20 76 69 65 77 73 20 68 61 76  * Some views hav
a3b0: 65 20 64 65 66 69 6e 65 64 20 63 6f 6c 75 6d 6e  e defined column
a3c0: 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e   names */.#defin
a3d0: 65 20 44 42 5f 45 6d 70 74 79 20 20 20 20 20 20  e DB_Empty      
a3e0: 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20       0x0004  /* 
a3f0: 54 68 65 20 66 69 6c 65 20 69 73 20 65 6d 70 74  The file is empt
a400: 79 20 28 6c 65 6e 67 74 68 20 30 20 62 79 74 65  y (length 0 byte
a410: 73 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42  s) */.#define DB
a420: 5f 52 65 73 65 74 57 61 6e 74 65 64 20 20 20 20  _ResetWanted    
a430: 20 30 78 30 30 30 38 20 20 2f 2a 20 52 65 73 65   0x0008  /* Rese
a440: 74 20 74 68 65 20 73 63 68 65 6d 61 20 77 68 65  t the schema whe
a450: 6e 20 6e 53 63 68 65 6d 61 4c 6f 63 6b 3d 3d 30  n nSchemaLock==0
a460: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e   */../*.** The n
a470: 75 6d 62 65 72 20 6f 66 20 64 69 66 66 65 72 65  umber of differe
a480: 6e 74 20 6b 69 6e 64 73 20 6f 66 20 74 68 69 6e  nt kinds of thin
a490: 67 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 6c  gs that can be l
a4a0: 69 6d 69 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20  imited.** using 
a4b0: 74 68 65 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69  the sqlite3_limi
a4c0: 74 28 29 20 69 6e 74 65 72 66 61 63 65 2e 0a 2a  t() interface..*
a4d0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
a4e0: 5f 4e 5f 4c 49 4d 49 54 20 28 53 51 4c 49 54 45  _N_LIMIT (SQLITE
a4f0: 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48  _LIMIT_WORKER_TH
a500: 52 45 41 44 53 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20  READS+1)../*.** 
a510: 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63  Lookaside malloc
a520: 20 69 73 20 61 20 73 65 74 20 6f 66 20 66 69 78   is a set of fix
a530: 65 64 2d 73 69 7a 65 20 62 75 66 66 65 72 73 20  ed-size buffers 
a540: 74 68 61 74 20 63 61 6e 20 62 65 20 75 73 65 64  that can be used
a550: 0a 2a 2a 20 74 6f 20 73 61 74 69 73 66 79 20 73  .** to satisfy s
a560: 6d 61 6c 6c 20 74 72 61 6e 73 69 65 6e 74 20 6d  mall transient m
a570: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
a580: 20 72 65 71 75 65 73 74 73 20 66 6f 72 20 6f 62   requests for ob
a590: 6a 65 63 74 73 0a 2a 2a 20 61 73 73 6f 63 69 61  jects.** associa
a5a0: 74 65 64 20 77 69 74 68 20 61 20 70 61 72 74 69  ted with a parti
a5b0: 63 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 63  cular database c
a5c0: 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65 20  onnection.  The 
a5d0: 75 73 65 20 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61 73  use of.** lookas
a5e0: 69 64 65 20 6d 61 6c 6c 6f 63 20 70 72 6f 76 69  ide malloc provi
a5f0: 64 65 73 20 61 20 73 69 67 6e 69 66 69 63 61 6e  des a significan
a600: 74 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 65 6e  t performance en
a610: 68 61 6e 63 65 6d 65 6e 74 0a 2a 2a 20 28 61 70  hancement.** (ap
a620: 70 72 6f 78 20 31 30 25 29 20 62 79 20 61 76 6f  prox 10%) by avo
a630: 69 64 69 6e 67 20 6e 75 6d 65 72 6f 75 73 20 6d  iding numerous m
a640: 61 6c 6c 6f 63 2f 66 72 65 65 20 72 65 71 75 65  alloc/free reque
a650: 73 74 73 20 77 68 69 6c 65 20 70 61 72 73 69 6e  sts while parsin
a660: 67 0a 2a 2a 20 53 51 4c 20 73 74 61 74 65 6d 65  g.** SQL stateme
a670: 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c  nts..**.** The L
a680: 6f 6f 6b 61 73 69 64 65 20 73 74 72 75 63 74 75  ookaside structu
a690: 72 65 20 68 6f 6c 64 73 20 63 6f 6e 66 69 67 75  re holds configu
a6a0: 72 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69  ration informati
a6b0: 6f 6e 20 61 62 6f 75 74 20 74 68 65 0a 2a 2a 20  on about the.** 
a6c0: 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63  lookaside malloc
a6d0: 20 73 75 62 73 79 73 74 65 6d 2e 20 20 45 61 63   subsystem.  Eac
a6e0: 68 20 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f  h available memo
a6f0: 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e  ry allocation in
a700: 0a 2a 2a 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64  .** the lookasid
a710: 65 20 73 75 62 73 79 73 74 65 6d 20 69 73 20 73  e subsystem is s
a720: 74 6f 72 65 64 20 6f 6e 20 61 20 6c 69 6e 6b 65  tored on a linke
a730: 64 20 6c 69 73 74 20 6f 66 20 4c 6f 6f 6b 61 73  d list of Lookas
a740: 69 64 65 53 6c 6f 74 0a 2a 2a 20 6f 62 6a 65 63  ideSlot.** objec
a750: 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73  ts..**.** Lookas
a760: 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  ide allocations 
a770: 61 72 65 20 6f 6e 6c 79 20 61 6c 6c 6f 77 65 64  are only allowed
a780: 20 66 6f 72 20 6f 62 6a 65 63 74 73 20 74 68 61   for objects tha
a790: 74 20 61 72 65 20 61 73 73 6f 63 69 61 74 65 64  t are associated
a7a0: 0a 2a 2a 20 77 69 74 68 20 61 20 70 61 72 74 69  .** with a parti
a7b0: 63 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 63  cular database c
a7c0: 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 48 65 6e 63  onnection.  Henc
a7d0: 65 2c 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d  e, schema inform
a7e0: 61 74 69 6f 6e 20 63 61 6e 6e 6f 74 0a 2a 2a 20  ation cannot.** 
a7f0: 62 65 20 73 74 6f 72 65 64 20 69 6e 20 6c 6f 6f  be stored in loo
a800: 6b 61 73 69 64 65 20 62 65 63 61 75 73 65 20 69  kaside because i
a810: 6e 20 73 68 61 72 65 64 20 63 61 63 68 65 20 6d  n shared cache m
a820: 6f 64 65 20 74 68 65 20 73 63 68 65 6d 61 20 69  ode the schema i
a830: 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 69 73  nformation.** is
a840: 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69   shared by multi
a850: 70 6c 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ple database con
a860: 6e 65 63 74 69 6f 6e 73 2e 20 20 54 68 65 72 65  nections.  There
a870: 66 6f 72 65 2c 20 77 68 69 6c 65 20 70 61 72 73  fore, while pars
a880: 69 6e 67 0a 2a 2a 20 73 63 68 65 6d 61 20 69 6e  ing.** schema in
a890: 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20 4c  formation, the L
a8a0: 6f 6f 6b 61 73 69 64 65 2e 62 45 6e 61 62 6c 65  ookaside.bEnable
a8b0: 64 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 65  d flag is cleare
a8c0: 64 20 73 6f 20 74 68 61 74 0a 2a 2a 20 6c 6f 6f  d so that.** loo
a8d0: 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f  kaside allocatio
a8e0: 6e 73 20 61 72 65 20 6e 6f 74 20 75 73 65 64 20  ns are not used 
a8f0: 74 6f 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65  to construct the
a900: 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 2e   schema objects.
a910: 0a 2a 2f 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61  .*/.struct Looka
a920: 73 69 64 65 20 7b 0a 20 20 75 33 32 20 62 44 69  side {.  u32 bDi
a930: 73 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  sable;          
a940: 20 2f 2a 20 4f 6e 6c 79 20 6f 70 65 72 61 74 65   /* Only operate
a950: 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20 77   the lookaside w
a960: 68 65 6e 20 7a 65 72 6f 20 2a 2f 0a 20 20 75 31  hen zero */.  u1
a970: 36 20 73 7a 3b 20 20 20 20 20 20 20 20 20 20 20  6 sz;           
a980: 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
a990: 20 65 61 63 68 20 62 75 66 66 65 72 20 69 6e 20   each buffer in 
a9a0: 62 79 74 65 73 20 2a 2f 0a 20 20 75 38 20 62 4d  bytes */.  u8 bM
a9b0: 61 6c 6c 6f 63 65 64 3b 20 20 20 20 20 20 20 20  alloced;        
a9c0: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70 53     /* True if pS
a9d0: 74 61 72 74 20 6f 62 74 61 69 6e 65 64 20 66 72  tart obtained fr
a9e0: 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f  om sqlite3_mallo
a9f0: 63 28 29 20 2a 2f 0a 20 20 75 33 32 20 6e 53 6c  c() */.  u32 nSl
aa00: 6f 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ot;             
aa10: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f   /* Number of lo
aa20: 6f 6b 61 73 69 64 65 20 73 6c 6f 74 73 20 61 6c  okaside slots al
aa30: 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 75 33 32  located */.  u32
aa40: 20 61 6e 53 74 61 74 5b 33 5d 3b 20 20 20 20 20   anStat[3];     
aa50: 20 20 20 20 20 2f 2a 20 30 3a 20 68 69 74 73 2e       /* 0: hits.
aa60: 20 20 31 3a 20 73 69 7a 65 20 6d 69 73 73 65 73    1: size misses
aa70: 2e 20 20 32 3a 20 66 75 6c 6c 20 6d 69 73 73 65  .  2: full misse
aa80: 73 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64 65  s */.  Lookaside
aa90: 53 6c 6f 74 20 2a 70 49 6e 69 74 3b 20 20 20 2f  Slot *pInit;   /
aaa0: 2a 20 4c 69 73 74 20 6f 66 20 62 75 66 66 65 72  * List of buffer
aab0: 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79  s not previously
aac0: 20 75 73 65 64 20 2a 2f 0a 20 20 4c 6f 6f 6b 61   used */.  Looka
aad0: 73 69 64 65 53 6c 6f 74 20 2a 70 46 72 65 65 3b  sideSlot *pFree;
aae0: 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 76     /* List of av
aaf0: 61 69 6c 61 62 6c 65 20 62 75 66 66 65 72 73 20  ailable buffers 
ab00: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 74 61 72  */.  void *pStar
ab10: 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
ab20: 46 69 72 73 74 20 62 79 74 65 20 6f 66 20 61 76  First byte of av
ab30: 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73  ailable memory s
ab40: 70 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  pace */.  void *
ab50: 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20  pEnd;           
ab60: 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65 20    /* First byte 
ab70: 70 61 73 74 20 65 6e 64 20 6f 66 20 61 76 61 69  past end of avai
ab80: 6c 61 62 6c 65 20 73 70 61 63 65 20 2a 2f 0a 7d  lable space */.}
ab90: 3b 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69  ;.struct Lookasi
aba0: 64 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f 6f 6b 61  deSlot {.  Looka
abb0: 73 69 64 65 53 6c 6f 74 20 2a 70 4e 65 78 74 3b  sideSlot *pNext;
abc0: 20 20 20 20 2f 2a 20 4e 65 78 74 20 62 75 66 66      /* Next buff
abd0: 65 72 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f  er in the list o
abe0: 66 20 66 72 65 65 20 62 75 66 66 65 72 73 20 2a  f free buffers *
abf0: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 68 61  /.};../*.** A ha
ac00: 73 68 20 74 61 62 6c 65 20 66 6f 72 20 62 75 69  sh table for bui
ac10: 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 20 64  lt-in function d
ac20: 65 66 69 6e 69 74 69 6f 6e 73 2e 20 20 28 41 70  efinitions.  (Ap
ac30: 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65  plication-define
ac40: 64 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 75  d.** functions u
ac50: 73 65 20 61 20 72 65 67 75 6c 61 72 20 74 61 62  se a regular tab
ac60: 6c 65 20 74 61 62 6c 65 20 66 72 6f 6d 20 68 61  le table from ha
ac70: 73 68 2e 68 2e 29 0a 2a 2a 0a 2a 2a 20 48 61 73  sh.h.).**.** Has
ac80: 68 20 65 61 63 68 20 46 75 6e 63 44 65 66 20 73  h each FuncDef s
ac90: 74 72 75 63 74 75 72 65 20 69 6e 74 6f 20 6f 6e  tructure into on
aca0: 65 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66  e of the FuncDef
acb0: 48 61 73 68 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a  Hash.a[] slots..
acc0: 2a 2a 20 43 6f 6c 6c 69 73 69 6f 6e 73 20 61 72  ** Collisions ar
acd0: 65 20 6f 6e 20 74 68 65 20 46 75 6e 63 44 65 66  e on the FuncDef
ace0: 2e 75 2e 70 48 61 73 68 20 63 68 61 69 6e 2e 0a  .u.pHash chain..
acf0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ad00: 45 5f 46 55 4e 43 5f 48 41 53 48 5f 53 5a 20 32  E_FUNC_HASH_SZ 2
ad10: 33 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 66  3.struct FuncDef
ad20: 48 61 73 68 20 7b 0a 20 20 46 75 6e 63 44 65 66  Hash {.  FuncDef
ad30: 20 2a 61 5b 53 51 4c 49 54 45 5f 46 55 4e 43 5f   *a[SQLITE_FUNC_
ad40: 48 41 53 48 5f 53 5a 5d 3b 20 20 20 20 20 20 20  HASH_SZ];       
ad50: 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20 66 6f  /* Hash table fo
ad60: 72 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d  r functions */.}
ad70: 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
ad80: 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41  _USER_AUTHENTICA
ad90: 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20 49 6e 66 6f 72  TION./*.** Infor
ada0: 6d 61 74 69 6f 6e 20 68 65 6c 64 20 69 6e 20 74  mation held in t
adb0: 68 65 20 22 73 71 6c 69 74 65 33 22 20 64 61 74  he "sqlite3" dat
adc0: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
add0: 20 6f 62 6a 65 63 74 20 61 6e 64 20 75 73 65 64   object and used
ade0: 0a 2a 2a 20 74 6f 20 6d 61 6e 61 67 65 20 75 73  .** to manage us
adf0: 65 72 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f  er authenticatio
ae00: 6e 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74  n..*/.typedef st
ae10: 72 75 63 74 20 73 71 6c 69 74 65 33 5f 75 73 65  ruct sqlite3_use
ae20: 72 61 75 74 68 20 73 71 6c 69 74 65 33 5f 75 73  rauth sqlite3_us
ae30: 65 72 61 75 74 68 3b 0a 73 74 72 75 63 74 20 73  erauth;.struct s
ae40: 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 20  qlite3_userauth 
ae50: 7b 0a 20 20 75 38 20 61 75 74 68 4c 65 76 65 6c  {.  u8 authLevel
ae60: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
ae70: 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 61 75 74    /* Current aut
ae80: 68 65 6e 74 69 63 61 74 69 6f 6e 20 6c 65 76 65  hentication leve
ae90: 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 75 74 68  l */.  int nAuth
aea0: 50 57 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  PW;             
aeb0: 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
aec0: 74 68 65 20 7a 41 75 74 68 50 57 20 69 6e 20 62  the zAuthPW in b
aed0: 79 74 65 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ytes */.  char *
aee0: 7a 41 75 74 68 50 57 3b 20 20 20 20 20 20 20 20  zAuthPW;        
aef0: 20 20 20 20 20 20 20 20 2f 2a 20 50 61 73 73 77          /* Passw
af00: 6f 72 64 20 75 73 65 64 20 74 6f 20 61 75 74 68  ord used to auth
af10: 65 6e 74 69 63 61 74 65 20 2a 2f 0a 20 20 63 68  enticate */.  ch
af20: 61 72 20 2a 7a 41 75 74 68 55 73 65 72 3b 20 20  ar *zAuthUser;  
af30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55              /* U
af40: 73 65 72 20 6e 61 6d 65 20 75 73 65 64 20 74 6f  ser name used to
af50: 20 61 75 74 68 65 6e 74 69 63 61 74 65 20 2a 2f   authenticate */
af60: 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20  .};../* Allowed 
af70: 76 61 6c 75 65 73 20 66 6f 72 20 73 71 6c 69 74  values for sqlit
af80: 65 33 5f 75 73 65 72 61 75 74 68 2e 61 75 74 68  e3_userauth.auth
af90: 4c 65 76 65 6c 20 2a 2f 0a 23 64 65 66 69 6e 65  Level */.#define
afa0: 20 55 41 55 54 48 5f 55 6e 6b 6e 6f 77 6e 20 20   UAUTH_Unknown  
afb0: 20 20 20 30 20 20 20 20 20 2f 2a 20 41 75 74 68     0     /* Auth
afc0: 65 6e 74 69 63 61 74 69 6f 6e 20 6e 6f 74 20 79  entication not y
afd0: 65 74 20 63 68 65 63 6b 65 64 20 2a 2f 0a 23 64  et checked */.#d
afe0: 65 66 69 6e 65 20 55 41 55 54 48 5f 46 61 69 6c  efine UAUTH_Fail
aff0: 20 20 20 20 20 20 20 20 31 20 20 20 20 20 2f 2a          1     /*
b000: 20 55 73 65 72 20 61 75 74 68 65 6e 74 69 63 61   User authentica
b010: 74 69 6f 6e 20 66 61 69 6c 65 64 20 2a 2f 0a 23  tion failed */.#
b020: 64 65 66 69 6e 65 20 55 41 55 54 48 5f 55 73 65  define UAUTH_Use
b030: 72 20 20 20 20 20 20 20 20 32 20 20 20 20 20 2f  r        2     /
b040: 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65 64 20  * Authenticated 
b050: 61 73 20 61 20 6e 6f 72 6d 61 6c 20 75 73 65 72  as a normal user
b060: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54   */.#define UAUT
b070: 48 5f 41 64 6d 69 6e 20 20 20 20 20 20 20 33 20  H_Admin       3 
b080: 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63      /* Authentic
b090: 61 74 65 64 20 61 73 20 61 6e 20 61 64 6d 69 6e  ated as an admin
b0a0: 69 73 74 72 61 74 6f 72 20 2a 2f 0a 0a 2f 2a 20  istrator */../* 
b0b0: 46 75 6e 63 74 69 6f 6e 73 20 75 73 65 64 20 6f  Functions used o
b0c0: 6e 6c 79 20 62 79 20 75 73 65 72 20 61 75 74 68  nly by user auth
b0d0: 6f 72 69 7a 61 74 69 6f 6e 20 6c 6f 67 69 63 20  orization logic 
b0e0: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 73  */.int sqlite3Us
b0f0: 65 72 41 75 74 68 54 61 62 6c 65 28 63 6f 6e 73  erAuthTable(cons
b100: 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71  t char*);.int sq
b110: 6c 69 74 65 33 55 73 65 72 41 75 74 68 43 68 65  lite3UserAuthChe
b120: 63 6b 4c 6f 67 69 6e 28 73 71 6c 69 74 65 33 2a  ckLogin(sqlite3*
b130: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 38 2a  ,const char*,u8*
b140: 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
b150: 73 65 72 41 75 74 68 49 6e 69 74 28 73 71 6c 69  serAuthInit(sqli
b160: 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
b170: 74 65 33 43 72 79 70 74 46 75 6e 63 28 73 71 6c  te3CryptFunc(sql
b180: 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
b190: 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  t,sqlite3_value*
b1a0: 2a 29 3b 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53  *);..#endif /* S
b1b0: 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45  QLITE_USER_AUTHE
b1c0: 4e 54 49 43 41 54 49 4f 4e 20 2a 2f 0a 0a 2f 2a  NTICATION */../*
b1d0: 0a 2a 2a 20 74 79 70 65 64 65 66 20 66 6f 72 20  .** typedef for 
b1e0: 74 68 65 20 61 75 74 68 6f 72 69 7a 61 74 69 6f  the authorizatio
b1f0: 6e 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74  n callback funct
b200: 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ion..*/.#ifdef S
b210: 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45  QLITE_USER_AUTHE
b220: 4e 54 49 43 41 54 49 4f 4e 0a 20 20 74 79 70 65  NTICATION.  type
b230: 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69 74 65  def int (*sqlite
b240: 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a 2c 69  3_xauth)(void*,i
b250: 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  nt,const char*,c
b260: 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74  onst char*,const
b270: 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20 20 20   char*,.        
b280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b290: 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61         const cha
b2a0: 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
b2b0: 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64 65  ;.#else.  typede
b2c0: 66 20 69 6e 74 20 28 2a 73 71 6c 69 74 65 33 5f  f int (*sqlite3_
b2d0: 78 61 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74  xauth)(void*,int
b2e0: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  ,const char*,con
b2f0: 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
b300: 68 61 72 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  har*,.          
b310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b320: 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a       const char*
b330: 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64  );.#endif..#ifnd
b340: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44  ef SQLITE_OMIT_D
b350: 45 50 52 45 43 41 54 45 44 0a 2f 2a 20 54 68 69  EPRECATED./* Thi
b360: 73 20 69 73 20 61 6e 20 65 78 74 72 61 20 53 51  s is an extra SQ
b370: 4c 49 54 45 5f 54 52 41 43 45 20 6d 61 63 72 6f  LITE_TRACE macro
b380: 20 74 68 61 74 20 69 6e 64 69 63 61 74 65 73 20   that indicates 
b390: 22 6c 65 67 61 63 79 22 20 74 72 61 63 69 6e 67  "legacy" tracing
b3a0: 0a 2a 2a 20 69 6e 20 74 68 65 20 73 74 79 6c 65  .** in the style
b3b0: 20 6f 66 20 73 71 6c 69 74 65 33 5f 74 72 61 63   of sqlite3_trac
b3c0: 65 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  e().*/.#define S
b3d0: 51 4c 49 54 45 5f 54 52 41 43 45 5f 4c 45 47 41  QLITE_TRACE_LEGA
b3e0: 43 59 20 20 30 78 38 30 0a 23 65 6c 73 65 0a 23  CY  0x80.#else.#
b3f0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 52  define SQLITE_TR
b400: 41 43 45 5f 4c 45 47 41 43 59 20 20 30 0a 23 65  ACE_LEGACY  0.#e
b410: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
b420: 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44 20 2a  MIT_DEPRECATED *
b430: 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64  /.../*.** Each d
b440: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
b450: 6f 6e 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  on is an instanc
b460: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
b470: 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f  ng structure..*/
b480: 0a 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 20  .struct sqlite3 
b490: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 66 73 20  {.  sqlite3_vfs 
b4a0: 2a 70 56 66 73 3b 20 20 20 20 20 20 20 20 20 20  *pVfs;          
b4b0: 20 20 2f 2a 20 4f 53 20 49 6e 74 65 72 66 61 63    /* OS Interfac
b4c0: 65 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 56 64  e */.  struct Vd
b4d0: 62 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20  be *pVdbe;      
b4e0: 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
b4f0: 61 63 74 69 76 65 20 76 69 72 74 75 61 6c 20 6d  active virtual m
b500: 61 63 68 69 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c  achines */.  Col
b510: 6c 53 65 71 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b  lSeq *pDfltColl;
b520: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
b530: 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74  e default collat
b540: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 28 42 49  ing sequence (BI
b550: 4e 41 52 59 29 20 2a 2f 0a 20 20 73 71 6c 69 74  NARY) */.  sqlit
b560: 65 33 5f 6d 75 74 65 78 20 2a 6d 75 74 65 78 3b  e3_mutex *mutex;
b570: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e           /* Conn
b580: 65 63 74 69 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a  ection mutex */.
b590: 20 20 44 62 20 2a 61 44 62 3b 20 20 20 20 20 20    Db *aDb;      
b5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b5b0: 2f 2a 20 41 6c 6c 20 62 61 63 6b 65 6e 64 73 20  /* All backends 
b5c0: 2a 2f 0a 20 20 69 6e 74 20 6e 44 62 3b 20 20 20  */.  int nDb;   
b5d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b5e0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
b5f0: 62 61 63 6b 65 6e 64 73 20 63 75 72 72 65 6e 74  backends current
b600: 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a 20 20 75  ly in use */.  u
b610: 33 32 20 6d 44 62 46 6c 61 67 73 3b 20 20 20 20  32 mDbFlags;    
b620: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b630: 66 6c 61 67 73 20 72 65 63 6f 72 64 69 6e 67 20  flags recording 
b640: 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 65 20 2a  internal state *
b650: 2f 0a 20 20 75 33 32 20 66 6c 61 67 73 3b 20 20  /.  u32 flags;  
b660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b670: 20 20 2f 2a 20 66 6c 61 67 73 20 73 65 74 74 61    /* flags setta
b680: 62 6c 65 20 62 79 20 70 72 61 67 6d 61 73 2e 20  ble by pragmas. 
b690: 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69  See below */.  i
b6a0: 36 34 20 6c 61 73 74 52 6f 77 69 64 3b 20 20 20  64 lastRowid;   
b6b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b6c0: 52 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20 72 65  ROWID of most re
b6d0: 63 65 6e 74 20 69 6e 73 65 72 74 20 28 73 65 65  cent insert (see
b6e0: 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69 36 34   above) */.  i64
b6f0: 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20   szMmap;        
b700: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
b710: 66 61 75 6c 74 20 6d 6d 61 70 5f 73 69 7a 65 20  fault mmap_size 
b720: 73 65 74 74 69 6e 67 20 2a 2f 0a 20 20 75 33 32  setting */.  u32
b730: 20 6e 53 63 68 65 6d 61 4c 6f 63 6b 3b 20 20 20   nSchemaLock;   
b740: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f             /* Do
b750: 20 6e 6f 74 20 72 65 73 65 74 20 74 68 65 20 73   not reset the s
b760: 63 68 65 6d 61 20 77 68 65 6e 20 6e 6f 6e 2d 7a  chema when non-z
b770: 65 72 6f 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  ero */.  unsigne
b780: 64 20 69 6e 74 20 6f 70 65 6e 46 6c 61 67 73 3b  d int openFlags;
b790: 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20         /* Flags 
b7a0: 70 61 73 73 65 64 20 74 6f 20 73 71 6c 69 74 65  passed to sqlite
b7b0: 33 5f 76 66 73 2e 78 4f 70 65 6e 28 29 20 2a 2f  3_vfs.xOpen() */
b7c0: 0a 20 20 69 6e 74 20 65 72 72 43 6f 64 65 3b 20  .  int errCode; 
b7d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b7e0: 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20   /* Most recent 
b7f0: 65 72 72 6f 72 20 63 6f 64 65 20 28 53 51 4c 49  error code (SQLI
b800: 54 45 5f 2a 29 20 2a 2f 0a 20 20 69 6e 74 20 65  TE_*) */.  int e
b810: 72 72 4d 61 73 6b 3b 20 20 20 20 20 20 20 20 20  rrMask;         
b820: 20 20 20 20 20 20 20 20 20 2f 2a 20 26 20 72 65           /* & re
b830: 73 75 6c 74 20 63 6f 64 65 73 20 77 69 74 68 20  sult codes with 
b840: 74 68 69 73 20 62 65 66 6f 72 65 20 72 65 74 75  this before retu
b850: 72 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69  rning */.  int i
b860: 53 79 73 45 72 72 6e 6f 3b 20 20 20 20 20 20 20  SysErrno;       
b870: 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6e           /* Errn
b880: 6f 20 76 61 6c 75 65 20 66 72 6f 6d 20 6c 61 73  o value from las
b890: 74 20 73 79 73 74 65 6d 20 65 72 72 6f 72 20 2a  t system error *
b8a0: 2f 0a 20 20 75 31 36 20 64 62 4f 70 74 46 6c 61  /.  u16 dbOptFla
b8b0: 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gs;             
b8c0: 20 20 2f 2a 20 46 6c 61 67 73 20 74 6f 20 65 6e    /* Flags to en
b8d0: 61 62 6c 65 2f 64 69 73 61 62 6c 65 20 6f 70 74  able/disable opt
b8e0: 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20 20  imizations */.  
b8f0: 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20  u8 enc;         
b900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b910: 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a   Text encoding *
b920: 2f 0a 20 20 75 38 20 61 75 74 6f 43 6f 6d 6d 69  /.  u8 autoCommi
b930: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
b940: 20 20 2f 2a 20 54 68 65 20 61 75 74 6f 2d 63 6f    /* The auto-co
b950: 6d 6d 69 74 20 66 6c 61 67 2e 20 2a 2f 0a 20 20  mmit flag. */.  
b960: 75 38 20 74 65 6d 70 5f 73 74 6f 72 65 3b 20 20  u8 temp_store;  
b970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b980: 20 31 3a 20 66 69 6c 65 20 32 3a 20 6d 65 6d 6f   1: file 2: memo
b990: 72 79 20 30 3a 20 64 65 66 61 75 6c 74 20 2a 2f  ry 0: default */
b9a0: 0a 20 20 75 38 20 6d 61 6c 6c 6f 63 46 61 69 6c  .  u8 mallocFail
b9b0: 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ed;             
b9c0: 20 2f 2a 20 54 72 75 65 20 69 66 20 77 65 20 68   /* True if we h
b9d0: 61 76 65 20 73 65 65 6e 20 61 20 6d 61 6c 6c 6f  ave seen a mallo
b9e0: 63 20 66 61 69 6c 75 72 65 20 2a 2f 0a 20 20 75  c failure */.  u
b9f0: 38 20 62 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 3b  8 bBenignMalloc;
ba00: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ba10: 44 6f 20 6e 6f 74 20 72 65 71 75 69 72 65 20 4f  Do not require O
ba20: 4f 4d 73 20 69 66 20 74 72 75 65 20 2a 2f 0a 20  OMs if true */. 
ba30: 20 75 38 20 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65   u8 dfltLockMode
ba40: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
ba50: 2a 20 44 65 66 61 75 6c 74 20 6c 6f 63 6b 69 6e  * Default lockin
ba60: 67 2d 6d 6f 64 65 20 66 6f 72 20 61 74 74 61 63  g-mode for attac
ba70: 68 65 64 20 64 62 73 20 2a 2f 0a 20 20 73 69 67  hed dbs */.  sig
ba80: 6e 65 64 20 63 68 61 72 20 6e 65 78 74 41 75 74  ned char nextAut
ba90: 6f 76 61 63 3b 20 20 20 20 20 20 2f 2a 20 41 75  ovac;      /* Au
baa0: 74 6f 76 61 63 20 73 65 74 74 69 6e 67 20 61 66  tovac setting af
bab0: 74 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e 3d  ter VACUUM if >=
bac0: 30 20 2a 2f 0a 20 20 75 38 20 73 75 70 70 72 65  0 */.  u8 suppre
bad0: 73 73 45 72 72 3b 20 20 20 20 20 20 20 20 20 20  ssErr;          
bae0: 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 69       /* Do not i
baf0: 73 73 75 65 20 65 72 72 6f 72 20 6d 65 73 73 61  ssue error messa
bb00: 67 65 73 20 69 66 20 74 72 75 65 20 2a 2f 0a 20  ges if true */. 
bb10: 20 75 38 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69   u8 vtabOnConfli
bb20: 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ct;            /
bb30: 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72  * Value to retur
bb40: 6e 20 66 6f 72 20 73 33 5f 76 74 61 62 5f 6f 6e  n for s3_vtab_on
bb50: 5f 63 6f 6e 66 6c 69 63 74 28 29 20 2a 2f 0a 20  _conflict() */. 
bb60: 20 75 38 20 69 73 54 72 61 6e 73 61 63 74 69 6f   u8 isTransactio
bb70: 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 2f  nSavepoint;    /
bb80: 2a 20 54 72 75 65 20 69 66 20 74 68 65 20 6f 75  * True if the ou
bb90: 74 65 72 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e  termost savepoin
bba0: 74 20 69 73 20 61 20 54 53 20 2a 2f 0a 20 20 75  t is a TS */.  u
bbb0: 38 20 6d 54 72 61 63 65 3b 20 20 20 20 20 20 20  8 mTrace;       
bbc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
bbd0: 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 53 51 4c  zero or more SQL
bbe0: 49 54 45 5f 54 52 41 43 45 20 66 6c 61 67 73 20  ITE_TRACE flags 
bbf0: 2a 2f 0a 20 20 75 38 20 73 6b 69 70 42 74 72 65  */.  u8 skipBtre
bc00: 65 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20  eMutex;         
bc10: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 6e 6f     /* True if no
bc20: 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 62 61   shared-cache ba
bc30: 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 75 38 20 6e  ckends */.  u8 n
bc40: 53 71 6c 45 78 65 63 3b 20 20 20 20 20 20 20 20  SqlExec;        
bc50: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
bc60: 62 65 72 20 6f 66 20 70 65 6e 64 69 6e 67 20 4f  ber of pending O
bc70: 50 5f 53 71 6c 45 78 65 63 20 6f 70 63 6f 64 65  P_SqlExec opcode
bc80: 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 78 74 50  s */.  int nextP
bc90: 61 67 65 73 69 7a 65 3b 20 20 20 20 20 20 20 20  agesize;        
bca0: 20 20 20 20 20 2f 2a 20 50 61 67 65 73 69 7a 65       /* Pagesize
bcb0: 20 61 66 74 65 72 20 56 41 43 55 55 4d 20 69 66   after VACUUM if
bcc0: 20 3e 30 20 2a 2f 0a 20 20 75 33 32 20 6d 61 67   >0 */.  u32 mag
bcd0: 69 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ic;             
bce0: 20 20 20 20 20 20 20 2f 2a 20 4d 61 67 69 63 20         /* Magic 
bcf0: 6e 75 6d 62 65 72 20 66 6f 72 20 64 65 74 65 63  number for detec
bd00: 74 20 6c 69 62 72 61 72 79 20 6d 69 73 75 73 65  t library misuse
bd10: 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67   */.  int nChang
bd20: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
bd30: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74      /* Value ret
bd40: 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33  urned by sqlite3
bd50: 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20  _changes() */.  
bd60: 69 6e 74 20 6e 54 6f 74 61 6c 43 68 61 6e 67 65  int nTotalChange
bd70: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
bd80: 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20   Value returned 
bd90: 62 79 20 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c  by sqlite3_total
bda0: 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20  _changes() */.  
bdb0: 69 6e 74 20 61 4c 69 6d 69 74 5b 53 51 4c 49 54  int aLimit[SQLIT
bdc0: 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a  E_N_LIMIT];   /*
bdd0: 20 4c 69 6d 69 74 73 20 2a 2f 0a 20 20 69 6e 74   Limits */.  int
bde0: 20 6e 4d 61 78 53 6f 72 74 65 72 4d 6d 61 70 3b   nMaxSorterMmap;
bdf0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
be00: 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20 72 65  ximum size of re
be10: 67 69 6f 6e 73 20 6d 61 70 70 65 64 20 62 79 20  gions mapped by 
be20: 73 6f 72 74 65 72 20 2a 2f 0a 20 20 73 74 72 75  sorter */.  stru
be30: 63 74 20 73 71 6c 69 74 65 33 49 6e 69 74 49 6e  ct sqlite3InitIn
be40: 66 6f 20 7b 20 20 20 20 20 20 2f 2a 20 49 6e 66  fo {      /* Inf
be50: 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 64 75  ormation used du
be60: 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74  ring initializat
be70: 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e  ion */.    int n
be80: 65 77 54 6e 75 6d 3b 20 20 20 20 20 20 20 20 20  ewTnum;         
be90: 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61         /* Rootpa
bea0: 67 65 20 6f 66 20 74 61 62 6c 65 20 62 65 69 6e  ge of table bein
beb0: 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  g initialized */
bec0: 0a 20 20 20 20 75 38 20 69 44 62 3b 20 20 20 20  .    u8 iDb;    
bed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bee0: 20 2f 2a 20 57 68 69 63 68 20 64 62 20 66 69 6c   /* Which db fil
bef0: 65 20 69 73 20 62 65 69 6e 67 20 69 6e 69 74 69  e is being initi
bf00: 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38  alized */.    u8
bf10: 20 62 75 73 79 3b 20 20 20 20 20 20 20 20 20 20   busy;          
bf20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 52 55            /* TRU
bf30: 45 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69  E if currently i
bf40: 6e 69 74 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20  nitializing */. 
bf50: 20 20 20 75 38 20 6f 72 70 68 61 6e 54 72 69 67     u8 orphanTrig
bf60: 67 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ger;           /
bf70: 2a 20 4c 61 73 74 20 73 74 61 74 65 6d 65 6e 74  * Last statement
bf80: 20 69 73 20 6f 72 70 68 61 6e 65 64 20 54 45 4d   is orphaned TEM
bf90: 50 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 20  P trigger */.   
bfa0: 20 75 38 20 69 6d 70 6f 73 74 65 72 54 61 62 6c   u8 imposterTabl
bfb0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
bfc0: 42 75 69 6c 64 69 6e 67 20 61 6e 20 69 6d 70 6f  Building an impo
bfd0: 73 74 65 72 20 74 61 62 6c 65 20 2a 2f 0a 20 20  ster table */.  
bfe0: 7d 20 69 6e 69 74 3b 0a 20 20 69 6e 74 20 6e 56  } init;.  int nV
bff0: 64 62 65 41 63 74 69 76 65 3b 20 20 20 20 20 20  dbeActive;      
c000: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
c010: 72 20 6f 66 20 56 44 42 45 73 20 63 75 72 72 65  r of VDBEs curre
c020: 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a  ntly running */.
c030: 20 20 69 6e 74 20 6e 56 64 62 65 52 65 61 64 3b    int nVdbeRead;
c040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c050: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74  /* Number of act
c060: 69 76 65 20 56 44 42 45 73 20 74 68 61 74 20 72  ive VDBEs that r
c070: 65 61 64 20 6f 72 20 77 72 69 74 65 20 2a 2f 0a  ead or write */.
c080: 20 20 69 6e 74 20 6e 56 64 62 65 57 72 69 74 65    int nVdbeWrite
c090: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
c0a0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74  /* Number of act
c0b0: 69 76 65 20 56 44 42 45 73 20 74 68 61 74 20 72  ive VDBEs that r
c0c0: 65 61 64 20 61 6e 64 20 77 72 69 74 65 20 2a 2f  ead and write */
c0d0: 0a 20 20 69 6e 74 20 6e 56 64 62 65 45 78 65 63  .  int nVdbeExec
c0e0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
c0f0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65   /* Number of ne
c100: 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 56 64  sted calls to Vd
c110: 62 65 45 78 65 63 28 29 20 2a 2f 0a 20 20 69 6e  beExec() */.  in
c120: 74 20 6e 56 44 65 73 74 72 6f 79 3b 20 20 20 20  t nVDestroy;    
c130: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
c140: 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20  umber of active 
c150: 4f 50 5f 56 44 65 73 74 72 6f 79 20 6f 70 65 72  OP_VDestroy oper
c160: 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20  ations */.  int 
c170: 6e 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20  nExtension;     
c180: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
c190: 62 65 72 20 6f 66 20 6c 6f 61 64 65 64 20 65 78  ber of loaded ex
c1a0: 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f  tensions */.  vo
c1b0: 69 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b  id **aExtension;
c1c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
c1d0: 72 72 61 79 20 6f 66 20 73 68 61 72 65 64 20 6c  rray of shared l
c1e0: 69 62 72 61 72 79 20 68 61 6e 64 6c 65 73 20 2a  ibrary handles *
c1f0: 2f 0a 20 20 69 6e 74 20 28 2a 78 54 72 61 63 65  /.  int (*xTrace
c200: 29 28 75 33 32 2c 76 6f 69 64 2a 2c 76 6f 69 64  )(u32,void*,void
c210: 2a 2c 76 6f 69 64 2a 29 3b 20 20 20 20 20 2f 2a  *,void*);     /*
c220: 20 54 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20   Trace function 
c230: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 54 72 61 63  */.  void *pTrac
c240: 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  eArg;           
c250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c260: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  * Argument to th
c270: 65 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e  e trace function
c280: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72   */.  void (*xPr
c290: 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e  ofile)(void*,con
c2a0: 73 74 20 63 68 61 72 2a 2c 75 36 34 29 3b 20 20  st char*,u64);  
c2b0: 2f 2a 20 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e  /* Profiling fun
c2c0: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
c2d0: 2a 70 50 72 6f 66 69 6c 65 41 72 67 3b 20 20 20  *pProfileArg;   
c2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c2f0: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
c300: 20 74 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e 63   to profile func
c310: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  tion */.  void *
c320: 70 43 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20 20  pCommitArg;     
c330: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
c340: 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d 6d  rgument to xComm
c350: 69 74 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 0a  itCallback() */.
c360: 20 20 69 6e 74 20 28 2a 78 43 6f 6d 6d 69 74 43    int (*xCommitC
c370: 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b  allback)(void*);
c380: 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61      /* Invoked a
c390: 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20  t every commit. 
c3a0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 52 6f 6c 6c  */.  void *pRoll
c3b0: 62 61 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20  backArg;        
c3c0: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
c3d0: 6e 74 20 74 6f 20 78 52 6f 6c 6c 62 61 63 6b 43  nt to xRollbackC
c3e0: 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 0a 20 20 76  allback() */.  v
c3f0: 6f 69 64 20 28 2a 78 52 6f 6c 6c 62 61 63 6b 43  oid (*xRollbackC
c400: 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b  allback)(void*);
c410: 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65   /* Invoked at e
c420: 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a  very commit. */.
c430: 20 20 76 6f 69 64 20 2a 70 55 70 64 61 74 65 41    void *pUpdateA
c440: 72 67 3b 0a 20 20 76 6f 69 64 20 28 2a 78 55 70  rg;.  void (*xUp
c450: 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 28 76 6f  dateCallback)(vo
c460: 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63  id*,int, const c
c470: 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
c480: 2c 73 71 6c 69 74 65 5f 69 6e 74 36 34 29 3b 0a  ,sqlite_int64);.
c490: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
c4a0: 41 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48  ABLE_PREUPDATE_H
c4b0: 4f 4f 4b 0a 20 20 76 6f 69 64 20 2a 70 50 72 65  OOK.  void *pPre
c4c0: 55 70 64 61 74 65 41 72 67 3b 20 20 20 20 20 20  UpdateArg;      
c4d0: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67      /* First arg
c4e0: 75 6d 65 6e 74 20 74 6f 20 78 50 72 65 55 70 64  ument to xPreUpd
c4f0: 61 74 65 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  ateCallback */. 
c500: 20 76 6f 69 64 20 28 2a 78 50 72 65 55 70 64 61   void (*xPreUpda
c510: 74 65 43 61 6c 6c 62 61 63 6b 29 28 20 20 20 2f  teCallback)(   /
c520: 2a 20 52 65 67 69 73 74 65 72 65 64 20 75 73 69  * Registered usi
c530: 6e 67 20 73 71 6c 69 74 65 33 5f 70 72 65 75 70  ng sqlite3_preup
c540: 64 61 74 65 5f 68 6f 6f 6b 28 29 20 2a 2f 0a 20  date_hook() */. 
c550: 20 20 20 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33     void*,sqlite3
c560: 2a 2c 69 6e 74 2c 63 68 61 72 20 63 6f 6e 73 74  *,int,char const
c570: 2a 2c 63 68 61 72 20 63 6f 6e 73 74 2a 2c 73 71  *,char const*,sq
c580: 6c 69 74 65 33 5f 69 6e 74 36 34 2c 73 71 6c 69  lite3_int64,sqli
c590: 74 65 33 5f 69 6e 74 36 34 0a 20 20 29 3b 0a 20  te3_int64.  );. 
c5a0: 20 50 72 65 55 70 64 61 74 65 20 2a 70 50 72 65   PreUpdate *pPre
c5b0: 55 70 64 61 74 65 3b 20 20 20 20 20 20 20 20 2f  Update;        /
c5c0: 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61 63  * Context for ac
c5d0: 74 69 76 65 20 70 72 65 2d 75 70 64 61 74 65 20  tive pre-update 
c5e0: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64  callback */.#end
c5f0: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 45 4e 41  if /* SQLITE_ENA
c600: 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f  BLE_PREUPDATE_HO
c610: 4f 4b 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  OK */.#ifndef SQ
c620: 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
c630: 69 6e 74 20 28 2a 78 57 61 6c 43 61 6c 6c 62 61  int (*xWalCallba
c640: 63 6b 29 28 76 6f 69 64 20 2a 2c 20 73 71 6c 69  ck)(void *, sqli
c650: 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  te3 *, const cha
c660: 72 20 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  r *, int);.  voi
c670: 64 20 2a 70 57 61 6c 41 72 67 3b 0a 23 65 6e 64  d *pWalArg;.#end
c680: 69 66 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c  if.  void(*xColl
c690: 4e 65 65 64 65 64 29 28 76 6f 69 64 2a 2c 73 71  Needed)(void*,sq
c6a0: 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74  lite3*,int eText
c6b0: 52 65 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  Rep,const char*)
c6c0: 3b 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e  ;.  void(*xCollN
c6d0: 65 65 64 65 64 31 36 29 28 76 6f 69 64 2a 2c 73  eeded16)(void*,s
c6e0: 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78  qlite3*,int eTex
c6f0: 74 52 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a  tRep,const void*
c700: 29 3b 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c  );.  void *pColl
c710: 4e 65 65 64 65 64 41 72 67 3b 0a 20 20 73 71 6c  NeededArg;.  sql
c720: 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 45 72 72  ite3_value *pErr
c730: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f  ;          /* Mo
c740: 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20  st recent error 
c750: 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 75 6e 69  message */.  uni
c760: 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69 6c  on {.    volatil
c770: 65 20 69 6e 74 20 69 73 49 6e 74 65 72 72 75 70  e int isInterrup
c780: 74 65 64 3b 20 2f 2a 20 54 72 75 65 20 69 66 20  ted; /* True if 
c790: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
c7a0: 74 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65  t has been calle
c7b0: 64 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20  d */.    double 
c7c0: 6e 6f 74 55 73 65 64 31 3b 20 20 20 20 20 20 20  notUsed1;       
c7d0: 20 20 20 20 20 2f 2a 20 53 70 61 63 65 72 20 2a       /* Spacer *
c7e0: 2f 0a 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b  /.  } u1;.  Look
c7f0: 61 73 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65 3b  aside lookaside;
c800: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
c810: 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63 6f  kaside malloc co
c820: 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a 23  nfiguration */.#
c830: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
c840: 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e  IT_AUTHORIZATION
c850: 0a 20 20 73 71 6c 69 74 65 33 5f 78 61 75 74 68  .  sqlite3_xauth
c860: 20 78 41 75 74 68 3b 20 20 20 20 20 20 20 20 20   xAuth;         
c870: 20 2f 2a 20 41 63 63 65 73 73 20 61 75 74 68 6f   /* Access autho
c880: 72 69 7a 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f  rization functio
c890: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75  n */.  void *pAu
c8a0: 74 68 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  thArg;          
c8b0: 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75       /* 1st argu
c8c0: 6d 65 6e 74 20 74 6f 20 74 68 65 20 61 63 63 65  ment to the acce
c8d0: 73 73 20 61 75 74 68 20 66 75 6e 63 74 69 6f 6e  ss auth function
c8e0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64   */.#endif.#ifnd
c8f0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
c900: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
c910: 0a 20 20 69 6e 74 20 28 2a 78 50 72 6f 67 72 65  .  int (*xProgre
c920: 73 73 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20  ss)(void *);    
c930: 20 2f 2a 20 54 68 65 20 70 72 6f 67 72 65 73 73   /* The progress
c940: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76   callback */.  v
c950: 6f 69 64 20 2a 70 50 72 6f 67 72 65 73 73 41 72  oid *pProgressAr
c960: 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  g;           /* 
c970: 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  Argument to the 
c980: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
c990: 6b 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  k */.  unsigned 
c9a0: 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 20 20 20  nProgressOps;   
c9b0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
c9c0: 66 20 6f 70 63 6f 64 65 73 20 66 6f 72 20 70 72  f opcodes for pr
c9d0: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
c9e0: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
c9f0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
ca00: 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74  RTUALTABLE.  int
ca10: 20 6e 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20   nVTrans;       
ca20: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
ca30: 6c 6f 63 61 74 65 64 20 73 69 7a 65 20 6f 66 20  located size of 
ca40: 61 56 54 72 61 6e 73 20 2a 2f 0a 20 20 48 61 73  aVTrans */.  Has
ca50: 68 20 61 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20  h aModule;      
ca60: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 6f             /* po
ca70: 70 75 6c 61 74 65 64 20 62 79 20 73 71 6c 69 74  pulated by sqlit
ca80: 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65  e3_create_module
ca90: 28 29 20 2a 2f 0a 20 20 56 74 61 62 43 74 78 20  () */.  VtabCtx 
caa0: 2a 70 56 74 61 62 43 74 78 3b 20 20 20 20 20 20  *pVtabCtx;      
cab0: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74        /* Context
cac0: 20 66 6f 72 20 61 63 74 69 76 65 20 76 74 61 62   for active vtab
cad0: 20 63 6f 6e 6e 65 63 74 2f 63 72 65 61 74 65 20   connect/create 
cae0: 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 2a 61 56  */.  VTable **aV
caf0: 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20  Trans;          
cb00: 20 20 20 2f 2a 20 56 69 72 74 75 61 6c 20 74 61     /* Virtual ta
cb10: 62 6c 65 73 20 77 69 74 68 20 6f 70 65 6e 20 74  bles with open t
cb20: 72 61 6e 73 61 63 74 69 6f 6e 73 20 2a 2f 0a 20  ransactions */. 
cb30: 20 56 54 61 62 6c 65 20 2a 70 44 69 73 63 6f 6e   VTable *pDiscon
cb40: 6e 65 63 74 3b 20 20 20 20 2f 2a 20 44 69 73 63  nect;    /* Disc
cb50: 6f 6e 6e 65 63 74 20 74 68 65 73 65 20 69 6e 20  onnect these in 
cb60: 6e 65 78 74 20 73 71 6c 69 74 65 33 5f 70 72 65  next sqlite3_pre
cb70: 70 61 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69 66  pare() */.#endif
cb80: 0a 20 20 48 61 73 68 20 61 46 75 6e 63 3b 20 20  .  Hash aFunc;  
cb90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cba0: 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20 6f   /* Hash table o
cbb0: 66 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75 6e  f connection fun
cbc0: 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73 68  ctions */.  Hash
cbd0: 20 61 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20 20   aCollSeq;      
cbe0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c            /* All
cbf0: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
cc00: 6e 63 65 73 20 2a 2f 0a 20 20 42 75 73 79 48 61  nces */.  BusyHa
cc10: 6e 64 6c 65 72 20 62 75 73 79 48 61 6e 64 6c 65  ndler busyHandle
cc20: 72 3b 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20  r;      /* Busy 
cc30: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44 62  callback */.  Db
cc40: 20 61 44 62 53 74 61 74 69 63 5b 32 5d 3b 20 20   aDbStatic[2];  
cc50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
cc60: 74 61 74 69 63 20 73 70 61 63 65 20 66 6f 72 20  tatic space for 
cc70: 74 68 65 20 32 20 64 65 66 61 75 6c 74 20 62 61  the 2 default ba
cc80: 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76 65  ckends */.  Save
cc90: 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e  point *pSavepoin
cca0: 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73  t;        /* Lis
ccb0: 74 20 6f 66 20 61 63 74 69 76 65 20 73 61 76 65  t of active save
ccc0: 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20  points */.  int 
ccd0: 62 75 73 79 54 69 6d 65 6f 75 74 3b 20 20 20 20  busyTimeout;    
cce0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 75 73            /* Bus
ccf0: 79 20 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f 75  y handler timeou
cd00: 74 2c 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20 20  t, in msec */.  
cd10: 69 6e 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b 20  int nSavepoint; 
cd20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
cd30: 20 4e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74   Number of non-t
cd40: 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70  ransaction savep
cd50: 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  oints */.  int n
cd60: 53 74 61 74 65 6d 65 6e 74 3b 20 20 20 20 20 20  Statement;      
cd70: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
cd80: 65 72 20 6f 66 20 6e 65 73 74 65 64 20 73 74 61  er of nested sta
cd90: 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69  tement-transacti
cda0: 6f 6e 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e 44  ons  */.  i64 nD
cdb0: 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20  eferredCons;    
cdc0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64          /* Net d
cdd0: 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69  eferred constrai
cde0: 6e 74 73 20 74 68 69 73 20 74 72 61 6e 73 61 63  nts this transac
cdf0: 74 69 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20 6e  tion. */.  i64 n
ce00: 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b  DeferredImmCons;
ce10: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20           /* Net 
ce20: 64 65 66 65 72 72 65 64 20 69 6d 6d 65 64 69 61  deferred immedia
ce30: 74 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  te constraints *
ce40: 2f 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73  /.  int *pnBytes
ce50: 46 72 65 65 64 3b 20 20 20 20 20 20 20 20 20 20  Freed;          
ce60: 20 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c    /* If not NULL
ce70: 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73  , increment this
ce80: 20 69 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a   in DbFree() */.
ce90: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
cea0: 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49  ABLE_UNLOCK_NOTI
ceb0: 46 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c  FY.  /* The foll
cec0: 6f 77 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20  owing variables 
ced0: 61 72 65 20 61 6c 6c 20 70 72 6f 74 65 63 74 65  are all protecte
cee0: 64 20 62 79 20 74 68 65 20 53 54 41 54 49 43 5f  d by the STATIC_
cef0: 4d 41 53 54 45 52 0a 20 20 2a 2a 20 6d 75 74 65  MASTER.  ** mute
cf00: 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69 74 65  x, not by sqlite
cf10: 33 2e 6d 75 74 65 78 2e 20 54 68 65 79 20 61 72  3.mutex. They ar
cf20: 65 20 75 73 65 64 20 62 79 20 63 6f 64 65 20 69  e used by code i
cf30: 6e 20 6e 6f 74 69 66 79 2e 63 2e 0a 20 20 2a 2a  n notify.c..  **
cf40: 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 55 6e  .  ** When X.pUn
cf50: 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d  lockConnection==
cf60: 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68  Y, that means th
cf70: 61 74 20 58 20 69 73 20 77 61 69 74 69 6e 67 20  at X is waiting 
cf80: 66 6f 72 20 59 20 74 6f 0a 20 20 2a 2a 20 75 6e  for Y to.  ** un
cf90: 6c 6f 63 6b 20 73 6f 20 74 68 61 74 20 69 74 20  lock so that it 
cfa0: 63 61 6e 20 70 72 6f 63 65 65 64 2e 0a 20 20 2a  can proceed..  *
cfb0: 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 42  *.  ** When X.pB
cfc0: 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f  lockingConnectio
cfd0: 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73  n==Y, that means
cfe0: 20 74 68 61 74 20 73 6f 6d 65 74 68 69 6e 67 20   that something 
cff0: 74 68 61 74 20 58 20 74 72 69 65 64 0a 20 20 2a  that X tried.  *
d000: 2a 20 74 72 69 65 64 20 74 6f 20 64 6f 20 72 65  * tried to do re
d010: 63 65 6e 74 6c 79 20 66 61 69 6c 65 64 20 77 69  cently failed wi
d020: 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 4c 4f 43  th an SQLITE_LOC
d030: 4b 45 44 20 65 72 72 6f 72 20 64 75 65 20 74 6f  KED error due to
d040: 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68 65 6c 64   locks.  ** held
d050: 20 62 79 20 59 2e 0a 20 20 2a 2f 0a 20 20 73 71   by Y..  */.  sq
d060: 6c 69 74 65 33 20 2a 70 42 6c 6f 63 6b 69 6e 67  lite3 *pBlocking
d070: 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20 43  Connection; /* C
d080: 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74 20 63  onnection that c
d090: 61 75 73 65 64 20 53 51 4c 49 54 45 5f 4c 4f 43  aused SQLITE_LOC
d0a0: 4b 45 44 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  KED */.  sqlite3
d0b0: 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74   *pUnlockConnect
d0c0: 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ion;           /
d0d0: 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20  * Connection to 
d0e0: 77 61 74 63 68 20 66 6f 72 20 75 6e 6c 6f 63 6b  watch for unlock
d0f0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 6e 6c   */.  void *pUnl
d100: 6f 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20 20  ockArg;         
d110: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
d120: 72 67 75 6d 65 6e 74 20 74 6f 20 78 55 6e 6c 6f  rgument to xUnlo
d130: 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20 20 76 6f  ckNotify */.  vo
d140: 69 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69  id (*xUnlockNoti
d150: 66 79 29 28 76 6f 69 64 20 2a 2a 2c 20 69 6e 74  fy)(void **, int
d160: 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f  );  /* Unlock no
d170: 74 69 66 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  tify callback */
d180: 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 4e 65 78  .  sqlite3 *pNex
d190: 74 42 6c 6f 63 6b 65 64 3b 20 20 20 20 20 20 20  tBlocked;       
d1a0: 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 73 74   /* Next in list
d1b0: 20 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b 65 64 20   of all blocked 
d1c0: 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a 23  connections */.#
d1d0: 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
d1e0: 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54  ITE_USER_AUTHENT
d1f0: 49 43 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65  ICATION.  sqlite
d200: 33 5f 75 73 65 72 61 75 74 68 20 61 75 74 68 3b  3_userauth auth;
d210: 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20          /* User 
d220: 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 69  authentication i
d230: 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 23 65  nformation */.#e
d240: 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  ndif.};../*.** A
d250: 20 6d 61 63 72 6f 20 74 6f 20 64 69 73 63 6f 76   macro to discov
d260: 65 72 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20  er the encoding 
d270: 6f 66 20 61 20 64 61 74 61 62 61 73 65 2e 0a 2a  of a database..*
d280: 2f 0a 23 64 65 66 69 6e 65 20 53 43 48 45 4d 41  /.#define SCHEMA
d290: 5f 45 4e 43 28 64 62 29 20 28 28 64 62 29 2d 3e  _ENC(db) ((db)->
d2a0: 61 44 62 5b 30 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[0].pSchema->
d2b0: 65 6e 63 29 0a 23 64 65 66 69 6e 65 20 45 4e 43  enc).#define ENC
d2c0: 28 64 62 29 20 20 20 20 20 20 20 20 28 28 64 62  (db)        ((db
d2d0: 29 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 50  )->enc)../*.** P
d2e0: 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66  ossible values f
d2f0: 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33 2e 66  or the sqlite3.f
d300: 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75  lags..**.** Valu
d310: 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65  e constraints (e
d320: 6e 66 6f 72 63 65 64 20 76 69 61 20 61 73 73 65  nforced via asse
d330: 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20 20 53  rt()):.**      S
d340: 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20  QLITE_FullFSync 
d350: 20 20 20 20 3d 3d 20 50 41 47 45 52 5f 46 55 4c      == PAGER_FUL
d360: 4c 46 53 59 4e 43 0a 2a 2a 20 20 20 20 20 20 53  LFSYNC.**      S
d370: 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53  QLITE_CkptFullFS
d380: 79 6e 63 20 3d 3d 20 50 41 47 45 52 5f 43 4b 50  ync == PAGER_CKP
d390: 54 5f 46 55 4c 4c 46 53 59 4e 43 0a 2a 2a 20 20  T_FULLFSYNC.**  
d3a0: 20 20 20 20 53 51 4c 49 54 45 5f 43 61 63 68 65      SQLITE_Cache
d3b0: 53 70 69 6c 6c 20 20 20 20 3d 3d 20 50 41 47 45  Spill    == PAGE
d3c0: 52 5f 43 41 43 48 45 5f 53 50 49 4c 4c 0a 2a 2f  R_CACHE_SPILL.*/
d3d0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d3e0: 57 72 69 74 65 53 63 68 65 6d 61 20 20 20 20 30  WriteSchema    0
d3f0: 78 30 30 30 30 30 30 30 31 20 20 2f 2a 20 4f 4b  x00000001  /* OK
d400: 20 74 6f 20 75 70 64 61 74 65 20 53 51 4c 49 54   to update SQLIT
d410: 45 5f 4d 41 53 54 45 52 20 2a 2f 0a 23 64 65 66  E_MASTER */.#def
d420: 69 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67 61 63  ine SQLITE_Legac
d430: 79 46 69 6c 65 46 6d 74 20 20 30 78 30 30 30 30  yFileFmt  0x0000
d440: 30 30 30 32 20 20 2f 2a 20 43 72 65 61 74 65 20  0002  /* Create 
d450: 6e 65 77 20 64 61 74 61 62 61 73 65 73 20 69 6e  new databases in
d460: 20 66 6f 72 6d 61 74 20 31 20 2a 2f 0a 23 64 65   format 1 */.#de
d470: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c  fine SQLITE_Full
d480: 43 6f 6c 4e 61 6d 65 73 20 20 20 30 78 30 30 30  ColNames   0x000
d490: 30 30 30 30 34 20 20 2f 2a 20 53 68 6f 77 20 66  00004  /* Show f
d4a0: 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  ull column names
d4b0: 20 6f 6e 20 53 45 4c 45 43 54 20 2a 2f 0a 23 64   on SELECT */.#d
d4c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c  efine SQLITE_Ful
d4d0: 6c 46 53 79 6e 63 20 20 20 20 20 20 30 78 30 30  lFSync      0x00
d4e0: 30 30 30 30 30 38 20 20 2f 2a 20 55 73 65 20 66  000008  /* Use f
d4f0: 75 6c 6c 20 66 73 79 6e 63 20 6f 6e 20 74 68 65  ull fsync on the
d500: 20 62 61 63 6b 65 6e 64 20 2a 2f 0a 23 64 65 66   backend */.#def
d510: 69 6e 65 20 53 51 4c 49 54 45 5f 43 6b 70 74 46  ine SQLITE_CkptF
d520: 75 6c 6c 46 53 79 6e 63 20 20 30 78 30 30 30 30  ullFSync  0x0000
d530: 30 30 31 30 20 20 2f 2a 20 55 73 65 20 66 75 6c  0010  /* Use ful
d540: 6c 20 66 73 79 6e 63 20 66 6f 72 20 63 68 65 63  l fsync for chec
d550: 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  kpoint */.#defin
d560: 65 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70  e SQLITE_CacheSp
d570: 69 6c 6c 20 20 20 20 20 30 78 30 30 30 30 30 30  ill     0x000000
d580: 32 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 73 70 69  20  /* OK to spi
d590: 6c 6c 20 70 61 67 65 72 20 63 61 63 68 65 20 2a  ll pager cache *
d5a0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d5b0: 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20 20  _ShortColNames  
d5c0: 30 78 30 30 30 30 30 30 34 30 20 20 2f 2a 20 53  0x00000040  /* S
d5d0: 68 6f 77 20 73 68 6f 72 74 20 63 6f 6c 75 6d 6e  how short column
d5e0: 73 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69  s names */.#defi
d5f0: 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52  ne SQLITE_CountR
d600: 6f 77 73 20 20 20 20 20 20 30 78 30 30 30 30 30  ows      0x00000
d610: 30 38 30 20 20 2f 2a 20 43 6f 75 6e 74 20 72 6f  080  /* Count ro
d620: 77 73 20 63 68 61 6e 67 65 64 20 62 79 20 49 4e  ws changed by IN
d630: 53 45 52 54 2c 20 2a 2f 0a 20 20 20 20 20 20 20  SERT, */.       
d640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d660: 20 20 20 2f 2a 20 20 20 44 45 4c 45 54 45 2c 20     /*   DELETE, 
d670: 6f 72 20 55 50 44 41 54 45 20 61 6e 64 20 72 65  or UPDATE and re
d680: 74 75 72 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20  turn */.        
d690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d6b0: 20 20 2f 2a 20 20 20 74 68 65 20 63 6f 75 6e 74    /*   the count
d6c0: 20 75 73 69 6e 67 20 61 20 63 61 6c 6c 62 61 63   using a callbac
d6d0: 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  k. */.#define SQ
d6e0: 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63  LITE_NullCallbac
d6f0: 6b 20 20 20 30 78 30 30 30 30 30 31 30 30 20 20  k   0x00000100  
d700: 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 63 61  /* Invoke the ca
d710: 6c 6c 62 61 63 6b 20 6f 6e 63 65 20 69 66 20 74  llback once if t
d720: 68 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  he */.          
d730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d750: 2f 2a 20 20 20 72 65 73 75 6c 74 20 73 65 74 20  /*   result set 
d760: 69 73 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66  is empty */.#def
d770: 69 6e 65 20 53 51 4c 49 54 45 5f 49 67 6e 6f 72  ine SQLITE_Ignor
d780: 65 43 68 65 63 6b 73 20 20 20 30 78 30 30 30 30  eChecks   0x0000
d790: 30 32 30 30 20 20 2f 2a 20 44 6f 20 6e 6f 74 20  0200  /* Do not 
d7a0: 65 6e 66 6f 72 63 65 20 63 68 65 63 6b 20 63 6f  enforce check co
d7b0: 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65  nstraints */.#de
d7c0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 61 64  fine SQLITE_Read
d7d0: 55 6e 63 6f 6d 6d 69 74 20 20 20 30 78 30 30 30  Uncommit   0x000
d7e0: 30 30 34 30 30 20 20 2f 2a 20 52 45 41 44 20 55  00400  /* READ U
d7f0: 4e 43 4f 4d 4d 49 54 54 45 44 20 69 6e 20 73 68  NCOMMITTED in sh
d800: 61 72 65 64 2d 63 61 63 68 65 20 2a 2f 0a 23 64  ared-cache */.#d
d810: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 6f 43  efine SQLITE_NoC
d820: 6b 70 74 4f 6e 43 6c 6f 73 65 20 20 30 78 30 30  kptOnClose  0x00
d830: 30 30 30 38 30 30 20 20 2f 2a 20 4e 6f 20 63 68  000800  /* No ch
d840: 65 63 6b 70 6f 69 6e 74 20 6f 6e 20 63 6c 6f 73  eckpoint on clos
d850: 65 28 29 2f 44 45 54 41 43 48 20 2a 2f 0a 23 64  e()/DETACH */.#d
d860: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 76  efine SQLITE_Rev
d870: 65 72 73 65 4f 72 64 65 72 20 20 20 30 78 30 30  erseOrder   0x00
d880: 30 30 31 30 30 30 20 20 2f 2a 20 52 65 76 65 72  001000  /* Rever
d890: 73 65 20 75 6e 6f 72 64 65 72 65 64 20 53 45 4c  se unordered SEL
d8a0: 45 43 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ECTs */.#define 
d8b0: 53 51 4c 49 54 45 5f 52 65 63 54 72 69 67 67 65  SQLITE_RecTrigge
d8c0: 72 73 20 20 20 20 30 78 30 30 30 30 32 30 30 30  rs    0x00002000
d8d0: 20 20 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63 75    /* Enable recu
d8e0: 72 73 69 76 65 20 74 72 69 67 67 65 72 73 20 2a  rsive triggers *
d8f0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d900: 5f 46 6f 72 65 69 67 6e 4b 65 79 73 20 20 20 20  _ForeignKeys    
d910: 30 78 30 30 30 30 34 30 30 30 20 20 2f 2a 20 45  0x00004000  /* E
d920: 6e 66 6f 72 63 65 20 66 6f 72 65 69 67 6e 20 6b  nforce foreign k
d930: 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 20  ey constraints  
d940: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d950: 45 5f 41 75 74 6f 49 6e 64 65 78 20 20 20 20 20  E_AutoIndex     
d960: 20 30 78 30 30 30 30 38 30 30 30 20 20 2f 2a 20   0x00008000  /* 
d970: 45 6e 61 62 6c 65 20 61 75 74 6f 6d 61 74 69 63  Enable automatic
d980: 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66   indexes */.#def
d990: 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45  ine SQLITE_LoadE
d9a0: 78 74 65 6e 73 69 6f 6e 20 20 30 78 30 30 30 31  xtension  0x0001
d9b0: 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20  0000  /* Enable 
d9c0: 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20 2a  load_extension *
d9d0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d9e0: 5f 4c 6f 61 64 45 78 74 46 75 6e 63 20 20 20 20  _LoadExtFunc    
d9f0: 30 78 30 30 30 32 30 30 30 30 20 20 2f 2a 20 45  0x00020000  /* E
da00: 6e 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e  nable load_exten
da10: 73 69 6f 6e 28 29 20 53 51 4c 20 66 75 6e 63 20  sion() SQL func 
da20: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
da30: 45 5f 45 6e 61 62 6c 65 54 72 69 67 67 65 72 20  E_EnableTrigger 
da40: 20 30 78 30 30 30 34 30 30 30 30 20 20 2f 2a 20   0x00040000  /* 
da50: 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 74  True to enable t
da60: 72 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66 69  riggers */.#defi
da70: 6e 65 20 53 51 4c 49 54 45 5f 44 65 66 65 72 46  ne SQLITE_DeferF
da80: 4b 73 20 20 20 20 20 20 20 30 78 30 30 30 38 30  Ks       0x00080
da90: 30 30 30 20 20 2f 2a 20 44 65 66 65 72 20 61 6c  000  /* Defer al
daa0: 6c 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73  l FK constraints
dab0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
dac0: 54 45 5f 51 75 65 72 79 4f 6e 6c 79 20 20 20 20  TE_QueryOnly    
dad0: 20 20 30 78 30 30 31 30 30 30 30 30 20 20 2f 2a    0x00100000  /*
dae0: 20 44 69 73 61 62 6c 65 20 64 61 74 61 62 61 73   Disable databas
daf0: 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65  e changes */.#de
db00: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 65 6c 6c  fine SQLITE_Cell
db10: 53 69 7a 65 43 6b 20 20 20 20 20 30 78 30 30 32  SizeCk     0x002
db20: 30 30 30 30 30 20 20 2f 2a 20 43 68 65 63 6b 20  00000  /* Check 
db30: 62 74 72 65 65 20 63 65 6c 6c 20 73 69 7a 65 73  btree cell sizes
db40: 20 6f 6e 20 6c 6f 61 64 20 2a 2f 0a 23 64 65 66   on load */.#def
db50: 69 6e 65 20 53 51 4c 49 54 45 5f 46 74 73 33 54  ine SQLITE_Fts3T
db60: 6f 6b 65 6e 69 7a 65 72 20 20 30 78 30 30 34 30  okenizer  0x0040
db70: 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20  0000  /* Enable 
db80: 66 74 73 33 5f 74 6f 6b 65 6e 69 7a 65 72 28 32  fts3_tokenizer(2
db90: 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ) */.#define SQL
dba0: 49 54 45 5f 45 6e 61 62 6c 65 51 50 53 47 20 20  ITE_EnableQPSG  
dbb0: 20 20 20 30 78 30 30 38 30 30 30 30 30 20 20 2f     0x00800000  /
dbc0: 2a 20 51 75 65 72 79 20 50 6c 61 6e 6e 65 72 20  * Query Planner 
dbd0: 53 74 61 62 69 6c 69 74 79 20 47 75 61 72 61 6e  Stability Guaran
dbe0: 74 65 65 20 2a 2f 0a 2f 2a 20 46 6c 61 67 73 20  tee */./* Flags 
dbf0: 75 73 65 64 20 6f 6e 6c 79 20 69 66 20 64 65 62  used only if deb
dc00: 75 67 67 69 6e 67 20 2a 2f 0a 23 69 66 64 65 66  ugging */.#ifdef
dc10: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 64   SQLITE_DEBUG.#d
dc20: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 71 6c  efine SQLITE_Sql
dc30: 54 72 61 63 65 20 20 20 20 20 20 20 30 78 30 38  Trace       0x08
dc40: 30 30 30 30 30 30 20 20 2f 2a 20 44 65 62 75 67  000000  /* Debug
dc50: 20 70 72 69 6e 74 20 53 51 4c 20 61 73 20 69 74   print SQL as it
dc60: 20 65 78 65 63 75 74 65 73 20 2a 2f 0a 23 64 65   executes */.#de
dc70: 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65  fine SQLITE_Vdbe
dc80: 4c 69 73 74 69 6e 67 20 20 20 20 30 78 31 30 30  Listing    0x100
dc90: 30 30 30 30 30 20 20 2f 2a 20 44 65 62 75 67 20  00000  /* Debug 
dca0: 6c 69 73 74 69 6e 67 73 20 6f 66 20 56 44 42 45  listings of VDBE
dcb0: 20 70 72 6f 67 72 61 6d 73 20 2a 2f 0a 23 64 65   programs */.#de
dcc0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65  fine SQLITE_Vdbe
dcd0: 54 72 61 63 65 20 20 20 20 20 20 30 78 32 30 30  Trace      0x200
dce0: 30 30 30 30 30 20 20 2f 2a 20 54 72 75 65 20 74  00000  /* True t
dcf0: 6f 20 74 72 61 63 65 20 56 44 42 45 20 65 78 65  o trace VDBE exe
dd00: 63 75 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  cution */.#defin
dd10: 65 20 53 51 4c 49 54 45 5f 56 64 62 65 41 64 64  e SQLITE_VdbeAdd
dd20: 6f 70 54 72 61 63 65 20 30 78 34 30 30 30 30 30  opTrace 0x400000
dd30: 30 30 20 20 2f 2a 20 54 72 61 63 65 20 73 71 6c  00  /* Trace sql
dd40: 69 74 65 33 56 64 62 65 41 64 64 4f 70 28 29 20  ite3VdbeAddOp() 
dd50: 63 61 6c 6c 73 20 2a 2f 0a 23 64 65 66 69 6e 65  calls */.#define
dd60: 20 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50 20   SQLITE_VdbeEQP 
dd70: 20 20 20 20 20 20 20 30 78 38 30 30 30 30 30 30         0x8000000
dd80: 30 20 20 2f 2a 20 44 65 62 75 67 20 45 58 50 4c  0  /* Debug EXPL
dd90: 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 2a  AIN QUERY PLAN *
dda0: 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  /.#endif../*.** 
ddb0: 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
ddc0: 6f 72 20 73 71 6c 69 74 65 33 2e 6d 44 62 46 6c  or sqlite3.mDbFl
ddd0: 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44  ags.*/.#define D
dde0: 42 46 4c 41 47 5f 53 63 68 65 6d 61 43 68 61 6e  BFLAG_SchemaChan
ddf0: 67 65 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20  ge   0x0001  /* 
de00: 55 6e 63 6f 6d 6d 69 74 74 65 64 20 48 61 73 68  Uncommitted Hash
de10: 20 74 61 62 6c 65 20 63 68 61 6e 67 65 73 20 2a   table changes *
de20: 2f 0a 23 64 65 66 69 6e 65 20 44 42 46 4c 41 47  /.#define DBFLAG
de30: 5f 50 72 65 66 65 72 42 75 69 6c 74 69 6e 20 20  _PreferBuiltin  
de40: 30 78 30 30 30 32 20 20 2f 2a 20 50 72 65 66 65  0x0002  /* Prefe
de50: 72 65 6e 63 65 20 74 6f 20 62 75 69 6c 74 2d 69  rence to built-i
de60: 6e 20 66 75 6e 63 73 20 2a 2f 0a 23 64 65 66 69  n funcs */.#defi
de70: 6e 65 20 44 42 46 4c 41 47 5f 56 61 63 75 75 6d  ne DBFLAG_Vacuum
de80: 20 20 20 20 20 20 20 20 20 30 78 30 30 30 34 20           0x0004 
de90: 20 2f 2a 20 43 75 72 72 65 6e 74 6c 79 20 69 6e   /* Currently in
dea0: 20 61 20 56 41 43 55 55 4d 20 2a 2f 0a 0a 2f 2a   a VACUUM */../*
deb0: 0a 2a 2a 20 42 69 74 73 20 6f 66 20 74 68 65 20  .** Bits of the 
dec0: 73 71 6c 69 74 65 33 2e 64 62 4f 70 74 46 6c 61  sqlite3.dbOptFla
ded0: 67 73 20 66 69 65 6c 64 20 74 68 61 74 20 61 72  gs field that ar
dee0: 65 20 75 73 65 64 20 62 79 20 74 68 65 0a 2a 2a  e used by the.**
def0: 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f   sqlite3_test_co
df00: 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53  ntrol(SQLITE_TES
df10: 54 43 54 52 4c 5f 4f 50 54 49 4d 49 5a 41 54 49  TCTRL_OPTIMIZATI
df20: 4f 4e 53 2c 2e 2e 2e 29 20 69 6e 74 65 72 66 61  ONS,...) interfa
df30: 63 65 20 74 6f 0a 2a 2a 20 73 65 6c 65 63 74 69  ce to.** selecti
df40: 76 65 6c 79 20 64 69 73 61 62 6c 65 20 76 61 72  vely disable var
df50: 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f  ious optimizatio
df60: 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ns..*/.#define S
df70: 51 4c 49 54 45 5f 51 75 65 72 79 46 6c 61 74 74  QLITE_QueryFlatt
df80: 65 6e 65 72 20 30 78 30 30 30 31 20 20 20 2f 2a  ener 0x0001   /*
df90: 20 51 75 65 72 79 20 66 6c 61 74 74 65 6e 69 6e   Query flattenin
dfa0: 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  g */.#define SQL
dfb0: 49 54 45 5f 43 6f 6c 75 6d 6e 43 61 63 68 65 20  ITE_ColumnCache 
dfc0: 20 20 20 30 78 30 30 30 32 20 20 20 2f 2a 20 43     0x0002   /* C
dfd0: 6f 6c 75 6d 6e 20 63 61 63 68 65 20 2a 2f 0a 23  olumn cache */.#
dfe0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 47 72  define SQLITE_Gr
dff0: 6f 75 70 42 79 4f 72 64 65 72 20 20 20 30 78 30  oupByOrder   0x0
e000: 30 30 34 20 20 20 2f 2a 20 47 52 4f 55 50 42 59  004   /* GROUPBY
e010: 20 63 6f 76 65 72 20 6f 66 20 4f 52 44 45 52 42   cover of ORDERB
e020: 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  Y */.#define SQL
e030: 49 54 45 5f 46 61 63 74 6f 72 4f 75 74 43 6f 6e  ITE_FactorOutCon
e040: 73 74 20 30 78 30 30 30 38 20 20 20 2f 2a 20 43  st 0x0008   /* C
e050: 6f 6e 73 74 61 6e 74 20 66 61 63 74 6f 72 69 6e  onstant factorin
e060: 67 20 2a 2f 0a 2f 2a 20 20 20 20 20 20 20 20 20  g */./*         
e070: 20 20 20 20 20 20 20 6e 6f 74 20 75 73 65 64 20         not used 
e080: 20 20 20 30 78 30 30 31 30 20 20 20 2f 2f 20 57     0x0010   // W
e090: 61 73 3a 20 53 51 4c 49 54 45 5f 49 64 78 52 65  as: SQLITE_IdxRe
e0a0: 61 6c 41 73 49 6e 74 20 2a 2f 0a 23 64 65 66 69  alAsInt */.#defi
e0b0: 6e 65 20 53 51 4c 49 54 45 5f 44 69 73 74 69 6e  ne SQLITE_Distin
e0c0: 63 74 4f 70 74 20 20 20 20 30 78 30 30 32 30 20  ctOpt    0x0020 
e0d0: 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 75 73    /* DISTINCT us
e0e0: 69 6e 67 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23  ing indexes */.#
e0f0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f  define SQLITE_Co
e100: 76 65 72 49 64 78 53 63 61 6e 20 20 20 30 78 30  verIdxScan   0x0
e110: 30 34 30 20 20 20 2f 2a 20 43 6f 76 65 72 69 6e  040   /* Coverin
e120: 67 20 69 6e 64 65 78 20 73 63 61 6e 73 20 2a 2f  g index scans */
e130: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e140: 4f 72 64 65 72 42 79 49 64 78 4a 6f 69 6e 20 30  OrderByIdxJoin 0
e150: 78 30 30 38 30 20 20 20 2f 2a 20 4f 52 44 45 52  x0080   /* ORDER
e160: 20 42 59 20 6f 66 20 6a 6f 69 6e 73 20 76 69 61   BY of joins via
e170: 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
e180: 65 20 53 51 4c 49 54 45 5f 53 75 62 71 43 6f 72  e SQLITE_SubqCor
e190: 6f 75 74 69 6e 65 20 20 30 78 30 31 30 30 20 20  outine  0x0100  
e1a0: 20 2f 2a 20 45 76 61 6c 75 61 74 65 20 73 75 62   /* Evaluate sub
e1b0: 71 75 65 72 69 65 73 20 61 73 20 63 6f 72 6f 75  queries as corou
e1c0: 74 69 6e 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tines */.#define
e1d0: 20 53 51 4c 49 54 45 5f 54 72 61 6e 73 69 74 69   SQLITE_Transiti
e1e0: 76 65 20 20 20 20 20 30 78 30 32 30 30 20 20 20  ve     0x0200   
e1f0: 2f 2a 20 54 72 61 6e 73 69 74 69 76 65 20 63 6f  /* Transitive co
e200: 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65  nstraints */.#de
e210: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 6d 69 74  fine SQLITE_Omit
e220: 4e 6f 6f 70 4a 6f 69 6e 20 20 20 30 78 30 34 30  NoopJoin   0x040
e230: 30 20 20 20 2f 2a 20 4f 6d 69 74 20 75 6e 75 73  0   /* Omit unus
e240: 65 64 20 74 61 62 6c 65 73 20 69 6e 20 6a 6f 69  ed tables in joi
e250: 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ns */.#define SQ
e260: 4c 49 54 45 5f 53 74 61 74 33 34 20 20 20 20 20  LITE_Stat34     
e270: 20 20 20 20 30 78 30 38 30 30 20 20 20 2f 2a 20      0x0800   /* 
e280: 55 73 65 20 53 54 41 54 33 20 6f 72 20 53 54 41  Use STAT3 or STA
e290: 54 34 20 64 61 74 61 20 2a 2f 0a 23 64 65 66 69  T4 data */.#defi
e2a0: 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 4f  ne SQLITE_CountO
e2b0: 66 56 69 65 77 20 20 20 20 30 78 31 30 30 30 20  fView    0x1000 
e2c0: 20 20 2f 2a 20 54 68 65 20 63 6f 75 6e 74 2d 6f    /* The count-o
e2d0: 66 2d 76 69 65 77 20 6f 70 74 69 6d 69 7a 61 74  f-view optimizat
e2e0: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
e2f0: 51 4c 49 54 45 5f 43 75 72 73 6f 72 48 69 6e 74  QLITE_CursorHint
e300: 73 20 20 20 20 30 78 32 30 30 30 20 20 20 2f 2a  s    0x2000   /*
e310: 20 41 64 64 20 4f 50 5f 43 75 72 73 6f 72 48 69   Add OP_CursorHi
e320: 6e 74 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 23 64  nt opcodes */.#d
e330: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 6c 6c  efine SQLITE_All
e340: 4f 70 74 73 20 20 20 20 20 20 20 20 30 78 66 66  Opts        0xff
e350: 66 66 20 20 20 2f 2a 20 41 6c 6c 20 6f 70 74 69  ff   /* All opti
e360: 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a  mizations */../*
e370: 0a 2a 2a 20 4d 61 63 72 6f 73 20 66 6f 72 20 74  .** Macros for t
e380: 65 73 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f  esting whether o
e390: 72 20 6e 6f 74 20 6f 70 74 69 6d 69 7a 61 74 69  r not optimizati
e3a0: 6f 6e 73 20 61 72 65 20 65 6e 61 62 6c 65 64 20  ons are enabled 
e3b0: 6f 72 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a  or disabled..*/.
e3c0: 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61  #define Optimiza
e3d0: 74 69 6f 6e 44 69 73 61 62 6c 65 64 28 64 62 2c  tionDisabled(db,
e3e0: 20 6d 61 73 6b 29 20 20 28 28 28 64 62 29 2d 3e   mask)  (((db)->
e3f0: 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b  dbOptFlags&(mask
e400: 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 4f  ))!=0).#define O
e410: 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c  ptimizationEnabl
e420: 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20 28  ed(db, mask)   (
e430: 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67  ((db)->dbOptFlag
e440: 73 26 28 6d 61 73 6b 29 29 3d 3d 30 29 0a 0a 2f  s&(mask))==0)../
e450: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65  *.** Return true
e460: 20 69 66 20 69 74 20 4f 4b 20 74 6f 20 66 61 63   if it OK to fac
e470: 74 6f 72 20 63 6f 6e 73 74 61 6e 74 20 65 78 70  tor constant exp
e480: 72 65 73 73 69 6f 6e 73 20 69 6e 74 6f 20 74 68  ressions into th
e490: 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  e initialization
e4a0: 0a 2a 2a 20 63 6f 64 65 2e 20 54 68 65 20 61 72  .** code. The ar
e4b0: 67 75 6d 65 6e 74 20 69 73 20 61 20 50 61 72 73  gument is a Pars
e4c0: 65 20 6f 62 6a 65 63 74 20 66 6f 72 20 74 68 65  e object for the
e4d0: 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 2e   code generator.
e4e0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 6f 6e 73  .*/.#define Cons
e4f0: 74 46 61 63 74 6f 72 4f 6b 28 50 29 20 28 28 50  tFactorOk(P) ((P
e500: 29 2d 3e 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72  )->okConstFactor
e510: 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c  )../*.** Possibl
e520: 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  e values for the
e530: 20 73 71 6c 69 74 65 2e 6d 61 67 69 63 20 66 69   sqlite.magic fi
e540: 65 6c 64 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d 62  eld..** The numb
e550: 65 72 73 20 61 72 65 20 6f 62 74 61 69 6e 65 64  ers are obtained
e560: 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 68   at random and h
e570: 61 76 65 20 6e 6f 20 73 70 65 63 69 61 6c 20 6d  ave no special m
e580: 65 61 6e 69 6e 67 2c 20 6f 74 68 65 72 0a 2a 2a  eaning, other.**
e590: 20 74 68 61 6e 20 62 65 69 6e 67 20 64 69 73 74   than being dist
e5a0: 69 6e 63 74 20 66 72 6f 6d 20 6f 6e 65 20 61 6e  inct from one an
e5b0: 6f 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  other..*/.#defin
e5c0: 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f  e SQLITE_MAGIC_O
e5d0: 50 45 4e 20 20 20 20 20 30 78 61 30 32 39 61 36  PEN     0xa029a6
e5e0: 39 37 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20  97  /* Database 
e5f0: 69 73 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69  is open */.#defi
e600: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
e610: 43 4c 4f 53 45 44 20 20 20 30 78 39 66 33 63 32  CLOSED   0x9f3c2
e620: 64 33 33 20 20 2f 2a 20 44 61 74 61 62 61 73 65  d33  /* Database
e630: 20 69 73 20 63 6c 6f 73 65 64 20 2a 2f 0a 23 64   is closed */.#d
e640: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
e650: 49 43 5f 53 49 43 4b 20 20 20 20 20 30 78 34 62  IC_SICK     0x4b
e660: 37 37 31 32 39 30 20 20 2f 2a 20 45 72 72 6f 72  771290  /* Error
e670: 20 61 6e 64 20 61 77 61 69 74 69 6e 67 20 63 6c   and awaiting cl
e680: 6f 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ose */.#define S
e690: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59  QLITE_MAGIC_BUSY
e6a0: 20 20 20 20 20 30 78 66 30 33 62 37 39 30 36 20       0xf03b7906 
e6b0: 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63 75 72   /* Database cur
e6c0: 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f  rently in use */
e6d0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e6e0: 4d 41 47 49 43 5f 45 52 52 4f 52 20 20 20 20 30  MAGIC_ERROR    0
e6f0: 78 62 35 33 35 37 39 33 30 20 20 2f 2a 20 41 6e  xb5357930  /* An
e700: 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 65   SQLITE_MISUSE e
e710: 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20 2a 2f  rror occurred */
e720: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e730: 4d 41 47 49 43 5f 5a 4f 4d 42 49 45 20 20 20 30  MAGIC_ZOMBIE   0
e740: 78 36 34 63 66 66 63 37 66 20 20 2f 2a 20 43 6c  x64cffc7f  /* Cl
e750: 6f 73 65 20 77 69 74 68 20 6c 61 73 74 20 73 74  ose with last st
e760: 61 74 65 6d 65 6e 74 20 63 6c 6f 73 65 20 2a 2f  atement close */
e770: 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c  ../*.** Each SQL
e780: 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 65 66   function is def
e790: 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61  ined by an insta
e7a0: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
e7b0: 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72  wing.** structur
e7c0: 65 2e 20 20 46 6f 72 20 67 6c 6f 62 61 6c 20 62  e.  For global b
e7d0: 75 69 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e  uilt-in function
e7e0: 73 20 28 65 78 3a 20 73 75 62 73 74 72 28 29 2c  s (ex: substr(),
e7f0: 20 6d 61 78 28 29 2c 20 63 6f 75 6e 74 28 29 29   max(), count())
e800: 0a 2a 2a 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  .** a pointer to
e810: 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
e820: 69 73 20 68 65 6c 64 20 69 6e 20 74 68 65 20 73  is held in the s
e830: 71 6c 69 74 65 33 42 75 69 6c 74 69 6e 46 75 6e  qlite3BuiltinFun
e840: 63 74 69 6f 6e 73 20 6f 62 6a 65 63 74 2e 0a 2a  ctions object..*
e850: 2a 20 46 6f 72 20 70 65 72 2d 63 6f 6e 6e 65 63  * For per-connec
e860: 74 69 6f 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e  tion application
e870: 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f  -defined functio
e880: 6e 73 2c 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  ns, a pointer to
e890: 20 74 68 69 73 0a 2a 2a 20 73 74 72 75 63 74 75   this.** structu
e8a0: 72 65 20 69 73 20 68 65 6c 64 20 69 6e 20 74 68  re is held in th
e8b0: 65 20 64 62 2d 3e 61 48 61 73 68 20 68 61 73 68  e db->aHash hash
e8c0: 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68   table..**.** Th
e8d0: 65 20 75 2e 70 48 61 73 68 20 66 69 65 6c 64 20  e u.pHash field 
e8e0: 69 73 20 75 73 65 64 20 62 79 20 74 68 65 20 67  is used by the g
e8f0: 6c 6f 62 61 6c 20 62 75 69 6c 74 2d 69 6e 73 2e  lobal built-ins.
e900: 20 20 54 68 65 20 75 2e 70 44 65 73 74 72 75 63    The u.pDestruc
e910: 74 6f 72 0a 2a 2a 20 66 69 65 6c 64 20 69 73 20  tor.** field is 
e920: 75 73 65 64 20 62 79 20 70 65 72 2d 63 6f 6e 6e  used by per-conn
e930: 65 63 74 69 6f 6e 20 61 70 70 2d 64 65 66 20 66  ection app-def f
e940: 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2f 0a 73 74 72  unctions..*/.str
e950: 75 63 74 20 46 75 6e 63 44 65 66 20 7b 0a 20 20  uct FuncDef {.  
e960: 69 38 20 6e 41 72 67 3b 20 20 20 20 20 20 20 20  i8 nArg;        
e970: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
e980: 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 2d 31  f arguments.  -1
e990: 20 6d 65 61 6e 73 20 75 6e 6c 69 6d 69 74 65 64   means unlimited
e9a0: 20 2a 2f 0a 20 20 75 31 36 20 66 75 6e 63 46 6c   */.  u16 funcFl
e9b0: 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 53 6f  ags;       /* So
e9c0: 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f  me combination o
e9d0: 66 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 2a 20  f SQLITE_FUNC_* 
e9e0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72  */.  void *pUser
e9f0: 44 61 74 61 3b 20 20 20 20 20 2f 2a 20 55 73 65  Data;     /* Use
ea00: 72 20 64 61 74 61 20 70 61 72 61 6d 65 74 65 72  r data parameter
ea10: 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 70   */.  FuncDef *p
ea20: 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65  Next;      /* Ne
ea30: 78 74 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68  xt function with
ea40: 20 73 61 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20 20   same name */.  
ea50: 76 6f 69 64 20 28 2a 78 53 46 75 6e 63 29 28 73  void (*xSFunc)(s
ea60: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c  qlite3_context*,
ea70: 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75  int,sqlite3_valu
ea80: 65 2a 2a 29 3b 20 2f 2a 20 66 75 6e 63 20 6f 72  e**); /* func or
ea90: 20 61 67 67 2d 73 74 65 70 20 2a 2f 0a 20 20 76   agg-step */.  v
eaa0: 6f 69 64 20 28 2a 78 46 69 6e 61 6c 69 7a 65 29  oid (*xFinalize)
eab0: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
eac0: 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  *);             
ead0: 20 20 20 20 20 2f 2a 20 41 67 67 20 66 69 6e 61       /* Agg fina
eae0: 6c 69 7a 65 72 20 2a 2f 0a 20 20 63 6f 6e 73 74  lizer */.  const
eaf0: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
eb00: 2f 2a 20 53 51 4c 20 6e 61 6d 65 20 6f 66 20 74  /* SQL name of t
eb10: 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a  he function. */.
eb20: 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 46 75    union {.    Fu
eb30: 6e 63 44 65 66 20 2a 70 48 61 73 68 3b 20 20 20  ncDef *pHash;   
eb40: 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74 68 20     /* Next with 
eb50: 61 20 64 69 66 66 65 72 65 6e 74 20 6e 61 6d 65  a different name
eb60: 20 62 75 74 20 74 68 65 20 73 61 6d 65 20 68 61   but the same ha
eb70: 73 68 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65  sh */.    FuncDe
eb80: 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72  structor *pDestr
eb90: 75 63 74 6f 72 3b 20 20 20 2f 2a 20 52 65 66 65  uctor;   /* Refe
eba0: 72 65 6e 63 65 20 63 6f 75 6e 74 65 64 20 64 65  rence counted de
ebb0: 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f  structor functio
ebc0: 6e 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a  n */.  } u;.};..
ebd0: 2f 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63  /*.** This struc
ebe0: 74 75 72 65 20 65 6e 63 61 70 73 75 6c 61 74 65  ture encapsulate
ebf0: 73 20 61 20 75 73 65 72 2d 66 75 6e 63 74 69 6f  s a user-functio
ec00: 6e 20 64 65 73 74 72 75 63 74 6f 72 20 63 61 6c  n destructor cal
ec10: 6c 62 61 63 6b 20 28 61 73 0a 2a 2a 20 63 6f 6e  lback (as.** con
ec20: 66 69 67 75 72 65 64 20 75 73 69 6e 67 20 63 72  figured using cr
ec30: 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32  eate_function_v2
ec40: 28 29 29 20 61 6e 64 20 61 20 72 65 66 65 72 65  ()) and a refere
ec50: 6e 63 65 20 63 6f 75 6e 74 65 72 2e 20 57 68 65  nce counter. Whe
ec60: 6e 0a 2a 2a 20 63 72 65 61 74 65 5f 66 75 6e 63  n.** create_func
ec70: 74 69 6f 6e 5f 76 32 28 29 20 69 73 20 63 61 6c  tion_v2() is cal
ec80: 6c 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20  led to create a 
ec90: 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 61 20  function with a 
eca0: 64 65 73 74 72 75 63 74 6f 72 2c 0a 2a 2a 20 61  destructor,.** a
ecb0: 20 73 69 6e 67 6c 65 20 6f 62 6a 65 63 74 20 6f   single object o
ecc0: 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20 61  f this type is a
ecd0: 6c 6c 6f 63 61 74 65 64 2e 20 46 75 6e 63 44 65  llocated. FuncDe
ece0: 73 74 72 75 63 74 6f 72 2e 6e 52 65 66 20 69 73  structor.nRef is
ecf0: 20 73 65 74 20 74 6f 0a 2a 2a 20 74 68 65 20 6e   set to.** the n
ed00: 75 6d 62 65 72 20 6f 66 20 46 75 6e 63 44 65 66  umber of FuncDef
ed10: 20 6f 62 6a 65 63 74 73 20 63 72 65 61 74 65 64   objects created
ed20: 20 28 65 69 74 68 65 72 20 31 20 6f 72 20 33 2c   (either 1 or 3,
ed30: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68   depending on wh
ed40: 65 74 68 65 72 0a 2a 2a 20 6f 72 20 6e 6f 74 20  ether.** or not 
ed50: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 65 6e  the specified en
ed60: 63 6f 64 69 6e 67 20 69 73 20 53 51 4c 49 54 45  coding is SQLITE
ed70: 5f 41 4e 59 29 2e 20 54 68 65 20 46 75 6e 63 44  _ANY). The FuncD
ed80: 65 66 2e 70 44 65 73 74 72 75 63 74 6f 72 0a 2a  ef.pDestructor.*
ed90: 2a 20 6d 65 6d 62 65 72 20 6f 66 20 65 61 63 68  * member of each
eda0: 20 6f 66 20 74 68 65 20 6e 65 77 20 46 75 6e 63   of the new Func
edb0: 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20 73  Def objects is s
edc0: 65 74 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74  et to point to t
edd0: 68 65 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20  he allocated.** 
ede0: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 2e 0a  FuncDestructor..
edf0: 2a 2a 0a 2a 2a 20 54 68 65 72 65 61 66 74 65 72  **.** Thereafter
ee00: 2c 20 77 68 65 6e 20 6f 6e 65 20 6f 66 20 74 68  , when one of th
ee10: 65 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74  e FuncDef object
ee20: 73 20 69 73 20 64 65 6c 65 74 65 64 2c 20 74 68  s is deleted, th
ee30: 65 20 72 65 66 65 72 65 6e 63 65 0a 2a 2a 20 63  e reference.** c
ee40: 6f 75 6e 74 20 6f 6e 20 74 68 69 73 20 6f 62 6a  ount on this obj
ee50: 65 63 74 20 69 73 20 64 65 63 72 65 6d 65 6e 74  ect is decrement
ee60: 65 64 2e 20 57 68 65 6e 20 69 74 20 72 65 61 63  ed. When it reac
ee70: 68 65 73 20 30 2c 20 74 68 65 20 64 65 73 74 72  hes 0, the destr
ee80: 75 63 74 6f 72 0a 2a 2a 20 69 73 20 69 6e 76 6f  uctor.** is invo
ee90: 6b 65 64 20 61 6e 64 20 74 68 65 20 46 75 6e 63  ked and the Func
eea0: 44 65 73 74 72 75 63 74 6f 72 20 73 74 72 75 63  Destructor struc
eeb0: 74 75 72 65 20 66 72 65 65 64 2e 0a 2a 2f 0a 73  ture freed..*/.s
eec0: 74 72 75 63 74 20 46 75 6e 63 44 65 73 74 72 75  truct FuncDestru
eed0: 63 74 6f 72 20 7b 0a 20 20 69 6e 74 20 6e 52 65  ctor {.  int nRe
eee0: 66 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73  f;.  void (*xDes
eef0: 74 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b 0a 20  troy)(void *);. 
ef00: 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61   void *pUserData
ef10: 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73  ;.};../*.** Poss
ef20: 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20  ible values for 
ef30: 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 2e 20 20  FuncDef.flags.  
ef40: 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 5f 4c  Note that the _L
ef50: 45 4e 47 54 48 20 61 6e 64 20 5f 54 59 50 45 4f  ENGTH and _TYPEO
ef60: 46 0a 2a 2a 20 76 61 6c 75 65 73 20 6d 75 73 74  F.** values must
ef70: 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 4f   correspond to O
ef80: 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20  PFLAG_LENGTHARG 
ef90: 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f  and OPFLAG_TYPEO
efa0: 46 41 52 47 2e 20 20 41 6e 64 0a 2a 2a 20 53 51  FARG.  And.** SQ
efb0: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
efc0: 4e 54 20 6d 75 73 74 20 62 65 20 74 68 65 20 73  NT must be the s
efd0: 61 6d 65 20 61 73 20 53 51 4c 49 54 45 5f 44 45  ame as SQLITE_DE
efe0: 54 45 52 4d 49 4e 49 53 54 49 43 2e 20 20 54 68  TERMINISTIC.  Th
eff0: 65 72 65 0a 2a 2a 20 61 72 65 20 61 73 73 65 72  ere.** are asser
f000: 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 69  t() statements i
f010: 6e 20 74 68 65 20 63 6f 64 65 20 74 6f 20 76 65  n the code to ve
f020: 72 69 66 79 20 74 68 69 73 2e 0a 2a 2a 0a 2a 2a  rify this..**.**
f030: 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e   Value constrain
f040: 74 73 20 28 65 6e 66 6f 72 63 65 64 20 76 69 61  ts (enforced via
f050: 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20   assert()):.**  
f060: 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d     SQLITE_FUNC_M
f070: 49 4e 4d 41 58 20 20 20 20 3d 3d 20 20 4e 43 5f  INMAX    ==  NC_
f080: 4d 69 6e 4d 61 78 41 67 67 20 20 20 20 20 20 3d  MinMaxAgg      =
f090: 3d 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 0a 2a  = SF_MinMaxAgg.*
f0a0: 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e  *     SQLITE_FUN
f0b0: 43 5f 4c 45 4e 47 54 48 20 20 20 20 3d 3d 20 20  C_LENGTH    ==  
f0c0: 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47  OPFLAG_LENGTHARG
f0d0: 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46  .**     SQLITE_F
f0e0: 55 4e 43 5f 54 59 50 45 4f 46 20 20 20 20 3d 3d  UNC_TYPEOF    ==
f0f0: 20 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41    OPFLAG_TYPEOFA
f100: 52 47 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45  RG.**     SQLITE
f110: 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 20  _FUNC_CONSTANT  
f120: 3d 3d 20 20 53 51 4c 49 54 45 5f 44 45 54 45 52  ==  SQLITE_DETER
f130: 4d 49 4e 49 53 54 49 43 20 66 72 6f 6d 20 74 68  MINISTIC from th
f140: 65 20 41 50 49 0a 2a 2a 20 20 20 20 20 53 51 4c  e API.**     SQL
f150: 49 54 45 5f 46 55 4e 43 5f 45 4e 43 4d 41 53 4b  ITE_FUNC_ENCMASK
f160: 20 20 20 64 65 70 65 6e 64 73 20 6f 6e 20 53 51     depends on SQ
f170: 4c 49 54 45 5f 55 54 46 2a 20 6d 61 63 72 6f 73  LITE_UTF* macros
f180: 20 69 6e 20 74 68 65 20 41 50 49 0a 2a 2f 0a 23   in the API.*/.#
f190: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
f1a0: 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 30 78 30 30  NC_ENCMASK  0x00
f1b0: 30 33 20 2f 2a 20 53 51 4c 49 54 45 5f 55 54 46  03 /* SQLITE_UTF
f1c0: 38 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42  8, SQLITE_UTF16B
f1d0: 45 20 6f 72 20 55 54 46 31 36 4c 45 20 2a 2f 0a  E or UTF16LE */.
f1e0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
f1f0: 55 4e 43 5f 4c 49 4b 45 20 20 20 20 20 30 78 30  UNC_LIKE     0x0
f200: 30 30 34 20 2f 2a 20 43 61 6e 64 69 64 61 74 65  004 /* Candidate
f210: 20 66 6f 72 20 74 68 65 20 4c 49 4b 45 20 6f 70   for the LIKE op
f220: 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64  timization */.#d
f230: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
f240: 43 5f 43 41 53 45 20 20 20 20 20 30 78 30 30 30  C_CASE     0x000
f250: 38 20 2f 2a 20 43 61 73 65 2d 73 65 6e 73 69 74  8 /* Case-sensit
f260: 69 76 65 20 4c 49 4b 45 2d 74 79 70 65 20 66 75  ive LIKE-type fu
f270: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
f280: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 50  e SQLITE_FUNC_EP
f290: 48 45 4d 20 20 20 20 30 78 30 30 31 30 20 2f 2a  HEM    0x0010 /*
f2a0: 20 45 70 68 65 6d 65 72 61 6c 2e 20 20 44 65 6c   Ephemeral.  Del
f2b0: 65 74 65 20 77 69 74 68 20 56 44 42 45 20 2a 2f  ete with VDBE */
f2c0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
f2d0: 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 30 78  FUNC_NEEDCOLL 0x
f2e0: 30 30 32 30 20 2f 2a 20 73 71 6c 69 74 65 33 47  0020 /* sqlite3G
f2f0: 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 20  etFuncCollSeq() 
f300: 6d 69 67 68 74 20 62 65 20 63 61 6c 6c 65 64 2a  might be called*
f310: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
f320: 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 20 20 20 30  _FUNC_LENGTH   0
f330: 78 30 30 34 30 20 2f 2a 20 42 75 69 6c 74 2d 69  x0040 /* Built-i
f340: 6e 20 6c 65 6e 67 74 68 28 29 20 66 75 6e 63 74  n length() funct
f350: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
f360: 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f  QLITE_FUNC_TYPEO
f370: 46 20 20 20 30 78 30 30 38 30 20 2f 2a 20 42 75  F   0x0080 /* Bu
f380: 69 6c 74 2d 69 6e 20 74 79 70 65 6f 66 28 29 20  ilt-in typeof() 
f390: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
f3a0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
f3b0: 43 4f 55 4e 54 20 20 20 20 30 78 30 31 30 30 20  COUNT    0x0100 
f3c0: 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 75 6e  /* Built-in coun
f3d0: 74 28 2a 29 20 61 67 67 72 65 67 61 74 65 20 2a  t(*) aggregate *
f3e0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
f3f0: 5f 46 55 4e 43 5f 43 4f 41 4c 45 53 43 45 20 30  _FUNC_COALESCE 0
f400: 78 30 32 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69  x0200 /* Built-i
f410: 6e 20 63 6f 61 6c 65 73 63 65 28 29 20 6f 72 20  n coalesce() or 
f420: 69 66 6e 75 6c 6c 28 29 20 2a 2f 0a 23 64 65 66  ifnull() */.#def
f430: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
f440: 55 4e 4c 49 4b 45 4c 59 20 30 78 30 34 30 30 20  UNLIKELY 0x0400 
f450: 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 75 6e 6c 69  /* Built-in unli
f460: 6b 65 6c 79 28 29 20 66 75 6e 63 74 69 6f 6e 20  kely() function 
f470: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
f480: 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20  E_FUNC_CONSTANT 
f490: 30 78 30 38 30 30 20 2f 2a 20 43 6f 6e 73 74 61  0x0800 /* Consta
f4a0: 6e 74 20 69 6e 70 75 74 73 20 67 69 76 65 20 61  nt inputs give a
f4b0: 20 63 6f 6e 73 74 61 6e 74 20 6f 75 74 70 75 74   constant output
f4c0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
f4d0: 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 20 20  TE_FUNC_MINMAX  
f4e0: 20 30 78 31 30 30 30 20 2f 2a 20 54 72 75 65 20   0x1000 /* True 
f4f0: 66 6f 72 20 6d 69 6e 28 29 20 61 6e 64 20 6d 61  for min() and ma
f500: 78 28 29 20 61 67 67 72 65 67 61 74 65 73 20 2a  x() aggregates *
f510: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
f520: 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 20 20 30  _FUNC_SLOCHNG  0
f530: 78 32 30 30 30 20 2f 2a 20 22 53 6c 6f 77 20 43  x2000 /* "Slow C
f540: 68 61 6e 67 65 22 2e 20 56 61 6c 75 65 20 63 6f  hange". Value co
f550: 6e 73 74 61 6e 74 20 64 75 72 69 6e 67 20 61 0a  nstant during a.
f560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f580: 20 20 20 20 2a 2a 20 73 69 6e 67 6c 65 20 71 75      ** single qu
f590: 65 72 79 20 2d 20 6d 69 67 68 74 20 63 68 61 6e  ery - might chan
f5a0: 67 65 20 6f 76 65 72 20 74 69 6d 65 20 2a 2f 0a  ge over time */.
f5b0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
f5c0: 55 4e 43 5f 41 46 46 49 4e 49 54 59 20 30 78 34  UNC_AFFINITY 0x4
f5d0: 30 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20  000 /* Built-in 
f5e0: 61 66 66 69 6e 69 74 79 28 29 20 66 75 6e 63 74  affinity() funct
f5f0: 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68  ion */../*.** Th
f600: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 72 65  e following thre
f610: 65 20 6d 61 63 72 6f 73 2c 20 46 55 4e 43 54 49  e macros, FUNCTI
f620: 4f 4e 28 29 2c 20 4c 49 4b 45 46 55 4e 43 28 29  ON(), LIKEFUNC()
f630: 20 61 6e 64 20 41 47 47 52 45 47 41 54 45 28 29   and AGGREGATE()
f640: 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20   are.** used to 
f650: 63 72 65 61 74 65 20 74 68 65 20 69 6e 69 74 69  create the initi
f660: 61 6c 69 7a 65 72 73 20 66 6f 72 20 74 68 65 20  alizers for the 
f670: 46 75 6e 63 44 65 66 20 73 74 72 75 63 74 75 72  FuncDef structur
f680: 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46 55 4e 43  es..**.**   FUNC
f690: 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
f6a0: 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
f6b0: 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20  nc).**     Used 
f6c0: 74 6f 20 63 72 65 61 74 65 20 61 20 73 63 61 6c  to create a scal
f6d0: 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69  ar function defi
f6e0: 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63  nition of a func
f6f0: 74 69 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20  tion zName.**   
f700: 20 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79    implemented by
f710: 20 43 20 66 75 6e 63 74 69 6f 6e 20 78 46 75 6e   C function xFun
f720: 63 20 74 68 61 74 20 61 63 63 65 70 74 73 20 6e  c that accepts n
f730: 41 72 67 20 61 72 67 75 6d 65 6e 74 73 2e 20 54  Arg arguments. T
f740: 68 65 0a 2a 2a 20 20 20 20 20 76 61 6c 75 65 20  he.**     value 
f750: 70 61 73 73 65 64 20 61 73 20 69 41 72 67 20 69  passed as iArg i
f760: 73 20 63 61 73 74 20 74 6f 20 61 20 28 76 6f 69  s cast to a (voi
f770: 64 2a 29 20 61 6e 64 20 6d 61 64 65 20 61 76 61  d*) and made ava
f780: 69 6c 61 62 6c 65 0a 2a 2a 20 20 20 20 20 61 73  ilable.**     as
f790: 20 74 68 65 20 75 73 65 72 2d 64 61 74 61 20 28   the user-data (
f7a0: 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74  sqlite3_user_dat
f7b0: 61 28 29 29 20 66 6f 72 20 74 68 65 20 66 75 6e  a()) for the fun
f7c0: 63 74 69 6f 6e 2e 20 49 66 0a 2a 2a 20 20 20 20  ction. If.**    
f7d0: 20 61 72 67 75 6d 65 6e 74 20 62 4e 43 20 69 73   argument bNC is
f7e0: 20 74 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20   true, then the 
f7f0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
f800: 43 4f 4c 4c 20 66 6c 61 67 20 69 73 20 73 65 74  COLL flag is set
f810: 2e 0a 2a 2a 0a 2a 2a 20 20 20 56 46 55 4e 43 54  ..**.**   VFUNCT
f820: 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ION(zName, nArg,
f830: 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   iArg, bNC, xFun
f840: 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b 65 20 46  c).**     Like F
f850: 55 4e 43 54 49 4f 4e 20 65 78 63 65 70 74 20 69  UNCTION except i
f860: 74 20 6f 6d 69 74 73 20 74 68 65 20 53 51 4c 49  t omits the SQLI
f870: 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
f880: 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 44   flag..**.**   D
f890: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
f8a0: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
f8b0: 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c   xFunc).**     L
f8c0: 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63  ike FUNCTION exc
f8d0: 65 70 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65  ept it omits the
f8e0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
f8f0: 53 54 41 4e 54 20 66 6c 61 67 20 61 6e 64 0a 2a  STANT flag and.*
f900: 2a 20 20 20 20 20 61 64 64 73 20 74 68 65 20 53  *     adds the S
f910: 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48  QLITE_FUNC_SLOCH
f920: 4e 47 20 66 6c 61 67 2e 20 20 55 73 65 64 20 66  NG flag.  Used f
f930: 6f 72 20 64 61 74 65 20 26 20 74 69 6d 65 20 66  or date & time f
f940: 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 20 20 20 20  unctions.**     
f950: 61 6e 64 20 66 75 6e 63 74 69 6f 6e 73 20 6c 69  and functions li
f960: 6b 65 20 73 71 6c 69 74 65 5f 76 65 72 73 69 6f  ke sqlite_versio
f970: 6e 28 29 20 74 68 61 74 20 63 61 6e 20 63 68 61  n() that can cha
f980: 6e 67 65 2c 20 62 75 74 20 6e 6f 74 20 64 75 72  nge, but not dur
f990: 69 6e 67 0a 2a 2a 20 20 20 20 20 61 20 73 69 6e  ing.**     a sin
f9a0: 67 6c 65 20 71 75 65 72 79 2e 20 20 54 68 65 20  gle query.  The 
f9b0: 69 41 72 67 20 69 73 20 69 67 6e 6f 72 65 64 2e  iArg is ignored.
f9c0: 20 20 54 68 65 20 75 73 65 72 2d 64 61 74 61 20    The user-data 
f9d0: 69 73 20 61 6c 77 61 79 73 20 73 65 74 0a 2a 2a  is always set.**
f9e0: 20 20 20 20 20 74 6f 20 61 20 4e 55 4c 4c 20 70       to a NULL p
f9f0: 6f 69 6e 74 65 72 2e 20 20 54 68 65 20 62 4e 43  ointer.  The bNC
fa00: 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f   parameter is no
fa10: 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 20 20  t used..**.**   
fa20: 50 55 52 45 5f 44 41 54 45 28 7a 4e 61 6d 65 2c  PURE_DATE(zName,
fa30: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
fa40: 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20  , xFunc).**     
fa50: 55 73 65 64 20 66 6f 72 20 22 70 75 72 65 22 20  Used for "pure" 
fa60: 64 61 74 65 2f 74 69 6d 65 20 66 75 6e 63 74 69  date/time functi
fa70: 6f 6e 73 2c 20 74 68 69 73 20 6d 61 63 72 6f 20  ons, this macro 
fa80: 69 73 20 6c 69 6b 65 20 44 46 55 4e 43 54 49 4f  is like DFUNCTIO
fa90: 4e 0a 2a 2a 20 20 20 20 20 65 78 63 65 70 74 20  N.**     except 
faa0: 74 68 61 74 20 69 74 20 64 6f 65 73 20 73 65 74  that it does set
fab0: 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43   the SQLITE_FUNC
fac0: 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67 73 2e  _CONSTANT flags.
fad0: 20 20 69 41 72 67 20 69 73 0a 2a 2a 20 20 20 20    iArg is.**    
fae0: 20 69 67 6e 6f 72 65 64 20 61 6e 64 20 74 68 65   ignored and the
faf0: 20 75 73 65 72 2d 64 61 74 61 20 66 6f 72 20 74   user-data for t
fb00: 68 65 73 65 20 66 75 6e 63 74 69 6f 6e 73 20 69  hese functions i
fb10: 73 20 73 65 74 20 74 6f 20 61 6e 20 0a 2a 2a 20  s set to an .** 
fb20: 20 20 20 20 61 72 62 69 74 72 61 72 79 20 6e 6f      arbitrary no
fb30: 6e 2d 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 2e 20  n-NULL pointer. 
fb40: 20 54 68 65 20 62 4e 43 20 70 61 72 61 6d 65 74   The bNC paramet
fb50: 65 72 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a  er is not used..
fb60: 2a 2a 0a 2a 2a 20 20 20 41 47 47 52 45 47 41 54  **.**   AGGREGAT
fb70: 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  E(zName, nArg, i
fb80: 41 72 67 2c 20 62 4e 43 2c 20 78 53 74 65 70 2c  Arg, bNC, xStep,
fb90: 20 78 46 69 6e 61 6c 29 0a 2a 2a 20 20 20 20 20   xFinal).**     
fba0: 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 61  Used to create a
fbb0: 6e 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  n aggregate func
fbc0: 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20  tion definition 
fbd0: 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a  implemented by.*
fbe0: 2a 20 20 20 20 20 74 68 65 20 43 20 66 75 6e 63  *     the C func
fbf0: 74 69 6f 6e 73 20 78 53 74 65 70 20 61 6e 64 20  tions xStep and 
fc00: 78 46 69 6e 61 6c 2e 20 54 68 65 20 66 69 72 73  xFinal. The firs
fc10: 74 20 66 6f 75 72 20 70 61 72 61 6d 65 74 65 72  t four parameter
fc20: 73 0a 2a 2a 20 20 20 20 20 61 72 65 20 69 6e 74  s.**     are int
fc30: 65 72 70 72 65 74 65 64 20 69 6e 20 74 68 65 20  erpreted in the 
fc40: 73 61 6d 65 20 77 61 79 20 61 73 20 74 68 65 20  same way as the 
fc50: 66 69 72 73 74 20 34 20 70 61 72 61 6d 65 74 65  first 4 paramete
fc60: 72 73 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e  rs to.**     FUN
fc70: 43 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20  CTION()..**.**  
fc80: 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c   LIKEFUNC(zName,
fc90: 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 66 6c 61   nArg, pArg, fla
fca0: 67 73 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20  gs).**     Used 
fcb0: 74 6f 20 63 72 65 61 74 65 20 61 20 73 63 61 6c  to create a scal
fcc0: 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69  ar function defi
fcd0: 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63  nition of a func
fce0: 74 69 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20  tion zName.**   
fcf0: 20 20 74 68 61 74 20 61 63 63 65 70 74 73 20 6e    that accepts n
fd00: 41 72 67 20 61 72 67 75 6d 65 6e 74 73 20 61 6e  Arg arguments an
fd10: 64 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64  d is implemented
fd20: 20 62 79 20 61 20 63 61 6c 6c 20 74 6f 20 43 0a   by a call to C.
fd30: 2a 2a 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20  **     function 
fd40: 6c 69 6b 65 46 75 6e 63 2e 20 41 72 67 75 6d 65  likeFunc. Argume
fd50: 6e 74 20 70 41 72 67 20 69 73 20 63 61 73 74 20  nt pArg is cast 
fd60: 74 6f 20 61 20 28 76 6f 69 64 20 2a 29 20 61 6e  to a (void *) an
fd70: 64 20 6d 61 64 65 0a 2a 2a 20 20 20 20 20 61 76  d made.**     av
fd80: 61 69 6c 61 62 6c 65 20 61 73 20 74 68 65 20 66  ailable as the f
fd90: 75 6e 63 74 69 6f 6e 20 75 73 65 72 2d 64 61 74  unction user-dat
fda0: 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f  a (sqlite3_user_
fdb0: 64 61 74 61 28 29 29 2e 20 54 68 65 0a 2a 2a 20  data()). The.** 
fdc0: 20 20 20 20 46 75 6e 63 44 65 66 2e 66 6c 61 67      FuncDef.flag
fdd0: 73 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65  s variable is se
fde0: 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 70  t to the value p
fdf0: 61 73 73 65 64 20 61 73 20 74 68 65 20 66 6c 61  assed as the fla
fe00: 67 73 0a 2a 2a 20 20 20 20 20 70 61 72 61 6d 65  gs.**     parame
fe10: 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ter..*/.#define 
fe20: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
fe30: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
fe40: 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72   xFunc) \.  {nAr
fe50: 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  g, SQLITE_FUNC_C
fe60: 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55  ONSTANT|SQLITE_U
fe70: 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f  TF8|(bNC*SQLITE_
fe80: 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20  FUNC_NEEDCOLL), 
fe90: 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
fea0: 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c  TO_PTR(iArg), 0,
feb0: 20 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d   xFunc, 0, #zNam
fec0: 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65  e, {0} }.#define
fed0: 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65   VFUNCTION(zName
fee0: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
fef0: 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e  C, xFunc) \.  {n
ff00: 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  Arg, SQLITE_UTF8
ff10: 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e  |(bNC*SQLITE_FUN
ff20: 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20  C_NEEDCOLL), \. 
ff30: 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f    SQLITE_INT_TO_
ff40: 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46  PTR(iArg), 0, xF
ff50: 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  unc, 0, #zName, 
ff60: 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 44 46  {0} }.#define DF
ff70: 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
ff80: 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
ff90: 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67  xFunc) \.  {nArg
ffa0: 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c  , SQLITE_FUNC_SL
ffb0: 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46  OCHNG|SQLITE_UTF
ffc0: 38 2c 20 5c 0a 20 20 20 30 2c 20 30 2c 20 78 46  8, \.   0, 0, xF
ffd0: 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  unc, 0, #zName, 
ffe0: 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 50 55  {0} }.#define PU
fff0: 52 45 5f 44 41 54 45 28 7a 4e 61 6d 65 2c 20 6e  RE_DATE(zName, n
10000 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
10010 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67  xFunc) \.  {nArg
10020 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c  , SQLITE_FUNC_SL
10030 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46  OCHNG|SQLITE_UTF
10040 38 7c 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  8|SQLITE_FUNC_CO
10050 4e 53 54 41 4e 54 2c 20 5c 0a 20 20 20 28 76 6f  NSTANT, \.   (vo
10060 69 64 2a 29 26 73 71 6c 69 74 65 33 43 6f 6e 66  id*)&sqlite3Conf
10070 69 67 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c  ig, 0, xFunc, 0,
10080 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23   #zName, {0} }.#
10090 64 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e 32  define FUNCTION2
100a0 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
100b0 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 2c 20  rg, bNC, xFunc, 
100c0 65 78 74 72 61 46 6c 61 67 73 29 20 5c 0a 20 20  extraFlags) \.  
100d0 7b 6e 41 72 67 2c 53 51 4c 49 54 45 5f 46 55 4e  {nArg,SQLITE_FUN
100e0 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54  C_CONSTANT|SQLIT
100f0 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49  E_UTF8|(bNC*SQLI
10100 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
10110 29 7c 65 78 74 72 61 46 6c 61 67 73 2c 5c 0a 20  )|extraFlags,\. 
10120 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f    SQLITE_INT_TO_
10130 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46  PTR(iArg), 0, xF
10140 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  unc, 0, #zName, 
10150 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 53 54  {0} }.#define ST
10160 52 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65  R_FUNCTION(zName
10170 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 62 4e  , nArg, pArg, bN
10180 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e  C, xFunc) \.  {n
10190 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43  Arg, SQLITE_FUNC
101a0 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f  _SLOCHNG|SQLITE_
101b0 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45  UTF8|(bNC*SQLITE
101c0 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c  _FUNC_NEEDCOLL),
101d0 20 5c 0a 20 20 20 70 41 72 67 2c 20 30 2c 20 78   \.   pArg, 0, x
101e0 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  Func, 0, #zName,
101f0 20 7d 0a 23 64 65 66 69 6e 65 20 4c 49 4b 45 46   }.#define LIKEF
10200 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  UNC(zName, nArg,
10210 20 61 72 67 2c 20 66 6c 61 67 73 29 20 5c 0a 20   arg, flags) \. 
10220 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46   {nArg, SQLITE_F
10230 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c  UNC_CONSTANT|SQL
10240 49 54 45 5f 55 54 46 38 7c 66 6c 61 67 73 2c 20  ITE_UTF8|flags, 
10250 5c 0a 20 20 20 28 76 6f 69 64 20 2a 29 61 72 67  \.   (void *)arg
10260 2c 20 30 2c 20 6c 69 6b 65 46 75 6e 63 2c 20 30  , 0, likeFunc, 0
10270 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a  , #zName, {0} }.
10280 23 64 65 66 69 6e 65 20 41 47 47 52 45 47 41 54  #define AGGREGAT
10290 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61  E(zName, nArg, a
102a0 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78  rg, nc, xStep, x
102b0 46 69 6e 61 6c 29 20 5c 0a 20 20 7b 6e 41 72 67  Final) \.  {nArg
102c0 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e  , SQLITE_UTF8|(n
102d0 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  c*SQLITE_FUNC_NE
102e0 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51  EDCOLL), \.   SQ
102f0 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28  LITE_INT_TO_PTR(
10300 61 72 67 29 2c 20 30 2c 20 78 53 74 65 70 2c 78  arg), 0, xStep,x
10310 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 20 7b 30  Final,#zName, {0
10320 7d 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45  }}.#define AGGRE
10330 47 41 54 45 32 28 7a 4e 61 6d 65 2c 20 6e 41 72  GATE2(zName, nAr
10340 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65  g, arg, nc, xSte
10350 70 2c 20 78 46 69 6e 61 6c 2c 20 65 78 74 72 61  p, xFinal, extra
10360 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67  Flags) \.  {nArg
10370 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e  , SQLITE_UTF8|(n
10380 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  c*SQLITE_FUNC_NE
10390 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61  EDCOLL)|extraFla
103a0 67 73 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f  gs, \.   SQLITE_
103b0 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c  INT_TO_PTR(arg),
103c0 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c   0, xStep,xFinal
103d0 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 0a 2f  ,#zName, {0}}../
103e0 2a 0a 2a 2a 20 41 6c 6c 20 63 75 72 72 65 6e 74  *.** All current
103f0 20 73 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20   savepoints are 
10400 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b  stored in a link
10410 65 64 20 6c 69 73 74 20 73 74 61 72 74 69 6e 67  ed list starting
10420 20 61 74 0a 2a 2a 20 73 71 6c 69 74 65 33 2e 70   at.** sqlite3.p
10430 53 61 76 65 70 6f 69 6e 74 2e 20 54 68 65 20 66  Savepoint. The f
10440 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20  irst element in 
10450 74 68 65 20 6c 69 73 74 20 69 73 20 74 68 65 20  the list is the 
10460 6d 6f 73 74 20 72 65 63 65 6e 74 6c 79 0a 2a 2a  most recently.**
10470 20 6f 70 65 6e 65 64 20 73 61 76 65 70 6f 69 6e   opened savepoin
10480 74 2e 20 53 61 76 65 70 6f 69 6e 74 73 20 61 72  t. Savepoints ar
10490 65 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 6c  e added to the l
104a0 69 73 74 20 62 79 20 74 68 65 20 76 64 62 65 0a  ist by the vdbe.
104b0 2a 2a 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20  ** OP_Savepoint 
104c0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
104d0 73 74 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74  struct Savepoint
104e0 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
104f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
10500 20 20 20 20 20 20 20 20 20 2f 2a 20 53 61 76 65           /* Save
10510 70 6f 69 6e 74 20 6e 61 6d 65 20 28 6e 75 6c 2d  point name (nul-
10520 74 65 72 6d 69 6e 61 74 65 64 29 20 2a 2f 0a 20  terminated) */. 
10530 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 43 6f   i64 nDeferredCo
10540 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ns;             
10550 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
10560 66 20 64 65 66 65 72 72 65 64 20 66 6b 20 76 69  f deferred fk vi
10570 6f 6c 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 36  olations */.  i6
10580 34 20 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  4 nDeferredImmCo
10590 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ns;             
105a0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64    /* Number of d
105b0 65 66 65 72 72 65 64 20 69 6d 6d 20 66 6b 2e 20  eferred imm fk. 
105c0 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  */.  Savepoint *
105d0 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20  pNext;          
105e0 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 65           /* Pare
105f0 6e 74 20 73 61 76 65 70 6f 69 6e 74 20 28 69 66  nt savepoint (if
10600 20 61 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   any) */.};../*.
10610 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
10620 20 61 72 65 20 75 73 65 64 20 61 73 20 74 68 65   are used as the
10630 20 73 65 63 6f 6e 64 20 70 61 72 61 6d 65 74 65   second paramete
10640 72 20 74 6f 20 73 71 6c 69 74 65 33 53 61 76 65  r to sqlite3Save
10650 70 6f 69 6e 74 28 29 2c 0a 2a 2a 20 61 6e 64 20  point(),.** and 
10660 61 73 20 74 68 65 20 50 31 20 61 72 67 75 6d 65  as the P1 argume
10670 6e 74 20 74 6f 20 74 68 65 20 4f 50 5f 53 61 76  nt to the OP_Sav
10680 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69  epoint instructi
10690 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  on..*/.#define S
106a0 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 20  AVEPOINT_BEGIN  
106b0 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53 41      0.#define SA
106c0 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20  VEPOINT_RELEASE 
106d0 20 20 20 31 0a 23 64 65 66 69 6e 65 20 53 41 56     1.#define SAV
106e0 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20  EPOINT_ROLLBACK 
106f0 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68    2.../*.** Each
10700 20 53 51 4c 69 74 65 20 6d 6f 64 75 6c 65 20 28   SQLite module (
10710 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 64 65  virtual table de
10720 66 69 6e 69 74 69 6f 6e 29 20 69 73 20 64 65 66  finition) is def
10730 69 6e 65 64 20 62 79 20 61 6e 0a 2a 2a 20 69 6e  ined by an.** in
10740 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
10750 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
10760 65 2c 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  e, stored in the
10770 20 73 71 6c 69 74 65 33 2e 61 4d 6f 64 75 6c 65   sqlite3.aModule
10780 0a 2a 2a 20 68 61 73 68 20 74 61 62 6c 65 2e 0a  .** hash table..
10790 2a 2f 0a 73 74 72 75 63 74 20 4d 6f 64 75 6c 65  */.struct Module
107a0 20 7b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74   {.  const sqlit
107b0 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
107c0 6c 65 3b 20 20 20 20 20 20 20 2f 2a 20 43 61 6c  le;       /* Cal
107d0 6c 62 61 63 6b 20 70 6f 69 6e 74 65 72 73 20 2a  lback pointers *
107e0 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
107f0 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
10800 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
10810 20 70 61 73 73 65 64 20 74 6f 20 63 72 65 61 74   passed to creat
10820 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20  e_module() */.  
10830 76 6f 69 64 20 2a 70 41 75 78 3b 20 20 20 20 20  void *pAux;     
10840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10850 20 20 20 20 20 2f 2a 20 70 41 75 78 20 70 61 73       /* pAux pas
10860 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f  sed to create_mo
10870 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64  dule() */.  void
10880 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69   (*xDestroy)(voi
10890 64 20 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20  d *);           
108a0 20 2f 2a 20 4d 6f 64 75 6c 65 20 64 65 73 74 72   /* Module destr
108b0 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a  uctor function *
108c0 2f 0a 20 20 54 61 62 6c 65 20 2a 70 45 70 6f 54  /.  Table *pEpoT
108d0 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ab;             
108e0 20 20 20 20 20 20 20 20 20 2f 2a 20 45 70 6f 6e           /* Epon
108f0 79 6d 6f 75 73 20 74 61 62 6c 65 20 66 6f 72 20  ymous table for 
10900 74 68 69 73 20 6d 6f 64 75 6c 65 20 2a 2f 0a 7d  this module */.}
10910 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f 72 6d 61  ;../*.** informa
10920 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20  tion about each 
10930 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20 53 51 4c  column of an SQL
10940 20 74 61 62 6c 65 20 69 73 20 68 65 6c 64 20 69   table is held i
10950 6e 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a  n an instance.**
10960 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
10970 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f  re..*/.struct Co
10980 6c 75 6d 6e 20 7b 0a 20 20 63 68 61 72 20 2a 7a  lumn {.  char *z
10990 4e 61 6d 65 3b 20 20 20 20 20 2f 2a 20 4e 61 6d  Name;     /* Nam
109a0 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e  e of this column
109b0 2c 20 5c 30 30 30 2c 20 74 68 65 6e 20 74 68 65  , \000, then the
109c0 20 74 79 70 65 20 2a 2f 0a 20 20 45 78 70 72 20   type */.  Expr 
109d0 2a 70 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20 44  *pDflt;     /* D
109e0 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
109f0 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  this column */. 
10a00 20 63 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20   char *zColl;   
10a10 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73    /* Collating s
10a20 65 71 75 65 6e 63 65 2e 20 20 49 66 20 4e 55 4c  equence.  If NUL
10a30 4c 2c 20 75 73 65 20 74 68 65 20 64 65 66 61 75  L, use the defau
10a40 6c 74 20 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e 75  lt */.  u8 notNu
10a50 6c 6c 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 4f  ll;      /* An O
10a60 45 5f 20 63 6f 64 65 20 66 6f 72 20 68 61 6e 64  E_ code for hand
10a70 6c 69 6e 67 20 61 20 4e 4f 54 20 4e 55 4c 4c 20  ling a NOT NULL 
10a80 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20  constraint */.  
10a90 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20  char affinity;  
10aa0 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20 53   /* One of the S
10ab0 51 4c 49 54 45 5f 41 46 46 5f 2e 2e 2e 20 76 61  QLITE_AFF_... va
10ac0 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20 73 7a 45  lues */.  u8 szE
10ad0 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 45 73  st;        /* Es
10ae0 74 69 6d 61 74 65 64 20 73 69 7a 65 20 6f 66 20  timated size of 
10af0 76 61 6c 75 65 20 69 6e 20 74 68 69 73 20 63 6f  value in this co
10b00 6c 75 6d 6e 2e 20 73 69 7a 65 6f 66 28 49 4e 54  lumn. sizeof(INT
10b10 29 3d 3d 31 20 2a 2f 0a 20 20 75 38 20 63 6f 6c  )==1 */.  u8 col
10b20 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 42 6f  Flags;     /* Bo
10b30 6f 6c 65 61 6e 20 70 72 6f 70 65 72 74 69 65 73  olean properties
10b40 2e 20 20 53 65 65 20 43 4f 4c 46 4c 41 47 5f 20  .  See COLFLAG_ 
10b50 64 65 66 69 6e 65 73 20 62 65 6c 6f 77 20 2a 2f  defines below */
10b60 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20  .};../* Allowed 
10b70 76 61 6c 75 65 73 20 66 6f 72 20 43 6f 6c 75 6d  values for Colum
10b80 6e 2e 63 6f 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23  n.colFlags:.*/.#
10b90 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 50  define COLFLAG_P
10ba0 52 49 4d 4b 45 59 20 20 30 78 30 30 30 31 20 20  RIMKEY  0x0001  
10bb0 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 69 73 20 70    /* Column is p
10bc0 61 72 74 20 6f 66 20 74 68 65 20 70 72 69 6d 61  art of the prima
10bd0 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e  ry key */.#defin
10be0 65 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e  e COLFLAG_HIDDEN
10bf0 20 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20     0x0002    /* 
10c00 41 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20  A hidden column 
10c10 69 6e 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  in a virtual tab
10c20 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f  le */.#define CO
10c30 4c 46 4c 41 47 5f 48 41 53 54 59 50 45 20 20 30  LFLAG_HASTYPE  0
10c40 78 30 30 30 34 20 20 20 20 2f 2a 20 54 79 70 65  x0004    /* Type
10c50 20 6e 61 6d 65 20 66 6f 6c 6c 6f 77 73 20 63 6f   name follows co
10c60 6c 75 6d 6e 20 6e 61 6d 65 20 2a 2f 0a 0a 2f 2a  lumn name */../*
10c70 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61 74 69 6e 67  .** A "Collating
10c80 20 53 65 71 75 65 6e 63 65 22 20 69 73 20 64 65   Sequence" is de
10c90 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74  fined by an inst
10ca0 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
10cb0 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75  owing.** structu
10cc0 72 65 2e 20 43 6f 6e 63 65 70 74 75 61 6c 6c 79  re. Conceptually
10cd0 2c 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  , a collating se
10ce0 71 75 65 6e 63 65 20 63 6f 6e 73 69 73 74 73 20  quence consists 
10cf0 6f 66 20 61 20 6e 61 6d 65 20 61 6e 64 0a 2a 2a  of a name and.**
10d00 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 20 72 6f   a comparison ro
10d10 75 74 69 6e 65 20 74 68 61 74 20 64 65 66 69 6e  utine that defin
10d20 65 73 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20  es the order of 
10d30 74 68 61 74 20 73 65 71 75 65 6e 63 65 2e 0a 2a  that sequence..*
10d40 2a 0a 2a 2a 20 49 66 20 43 6f 6c 6c 53 65 71 2e  *.** If CollSeq.
10d50 78 43 6d 70 20 69 73 20 4e 55 4c 4c 2c 20 69 74  xCmp is NULL, it
10d60 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 0a   means that the.
10d70 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  ** collating seq
10d80 75 65 6e 63 65 20 69 73 20 75 6e 64 65 66 69 6e  uence is undefin
10d90 65 64 2e 20 20 49 6e 64 69 63 65 73 20 62 75 69  ed.  Indices bui
10da0 6c 74 20 6f 6e 20 61 6e 20 75 6e 64 65 66 69 6e  lt on an undefin
10db0 65 64 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20  ed.** collating 
10dc0 73 65 71 75 65 6e 63 65 20 6d 61 79 20 6e 6f 74  sequence may not
10dd0 20 62 65 20 72 65 61 64 20 6f 72 20 77 72 69 74   be read or writ
10de0 74 65 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43  ten..*/.struct C
10df0 6f 6c 6c 53 65 71 20 7b 0a 20 20 63 68 61 72 20  ollSeq {.  char 
10e00 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
10e10 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
10e20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
10e30 63 65 2c 20 55 54 46 2d 38 20 65 6e 63 6f 64 65  ce, UTF-8 encode
10e40 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20  d */.  u8 enc;  
10e50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
10e60 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 68 61  Text encoding ha
10e70 6e 64 6c 65 64 20 62 79 20 78 43 6d 70 28 29 20  ndled by xCmp() 
10e80 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72  */.  void *pUser
10e90 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69  ;          /* Fi
10ea0 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  rst argument to 
10eb0 78 43 6d 70 28 29 20 2a 2f 0a 20 20 69 6e 74 20  xCmp() */.  int 
10ec0 28 2a 78 43 6d 70 29 28 76 6f 69 64 2a 2c 69 6e  (*xCmp)(void*,in
10ed0 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20  t, const void*, 
10ee0 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a  int, const void*
10ef0 29 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c  );.  void (*xDel
10f00 29 28 76 6f 69 64 2a 29 3b 20 20 2f 2a 20 44 65  )(void*);  /* De
10f10 73 74 72 75 63 74 6f 72 20 66 6f 72 20 70 55 73  structor for pUs
10f20 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  er */.};../*.** 
10f30 41 20 73 6f 72 74 20 6f 72 64 65 72 20 63 61 6e  A sort order can
10f40 20 62 65 20 65 69 74 68 65 72 20 41 53 43 20 6f   be either ASC o
10f50 72 20 44 45 53 43 2e 0a 2a 2f 0a 23 64 65 66 69  r DESC..*/.#defi
10f60 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 41 53 43  ne SQLITE_SO_ASC
10f70 20 20 20 20 20 20 20 30 20 20 2f 2a 20 53 6f 72         0  /* Sor
10f80 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f  t in ascending o
10f90 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rder */.#define 
10fa0 53 51 4c 49 54 45 5f 53 4f 5f 44 45 53 43 20 20  SQLITE_SO_DESC  
10fb0 20 20 20 20 31 20 20 2f 2a 20 53 6f 72 74 20 69      1  /* Sort i
10fc0 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65  n ascending orde
10fd0 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  r */.#define SQL
10fe0 49 54 45 5f 53 4f 5f 55 4e 44 45 46 49 4e 45 44  ITE_SO_UNDEFINED
10ff0 20 2d 31 20 2f 2a 20 4e 6f 20 73 6f 72 74 20 6f   -1 /* No sort o
11000 72 64 65 72 20 73 70 65 63 69 66 69 65 64 20 2a  rder specified *
11010 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20  /../*.** Column 
11020 61 66 66 69 6e 69 74 79 20 74 79 70 65 73 2e 0a  affinity types..
11030 2a 2a 0a 2a 2a 20 54 68 65 73 65 20 75 73 65 64  **.** These used
11040 20 74 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e 69   to have mnemoni
11050 63 20 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27 20  c name like 'i' 
11060 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 49  for SQLITE_AFF_I
11070 4e 54 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27 74  NTEGER and.** 't
11080 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46  ' for SQLITE_AFF
11090 5f 54 45 58 54 2e 20 20 42 75 74 20 77 65 20 63  _TEXT.  But we c
110a0 61 6e 20 73 61 76 65 20 61 20 6c 69 74 74 6c 65  an save a little
110b0 20 73 70 61 63 65 20 61 6e 64 20 69 6d 70 72 6f   space and impro
110c0 76 65 0a 2a 2a 20 74 68 65 20 73 70 65 65 64 20  ve.** the speed 
110d0 61 20 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d 62  a little by numb
110e0 65 72 69 6e 67 20 74 68 65 20 76 61 6c 75 65 73  ering the values
110f0 20 63 6f 6e 73 65 63 75 74 69 76 65 6c 79 2e 0a   consecutively..
11100 2a 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68 65 72  **.** But rather
11110 20 74 68 61 6e 20 73 74 61 72 74 20 77 69 74 68   than start with
11120 20 30 20 6f 72 20 31 2c 20 77 65 20 62 65 67 69   0 or 1, we begi
11130 6e 20 77 69 74 68 20 27 41 27 2e 20 20 54 68 61  n with 'A'.  Tha
11140 74 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d  t way,.** when m
11150 75 6c 74 69 70 6c 65 20 61 66 66 69 6e 69 74 79  ultiple affinity
11160 20 74 79 70 65 73 20 61 72 65 20 63 6f 6e 63 61   types are conca
11170 74 65 6e 61 74 65 64 20 69 6e 74 6f 20 61 20 73  tenated into a s
11180 74 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75 73 65  tring and.** use
11190 64 20 61 73 20 74 68 65 20 50 34 20 6f 70 65 72  d as the P4 oper
111a0 61 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c 20 62  and, they will b
111b0 65 20 6d 6f 72 65 20 72 65 61 64 61 62 6c 65 2e  e more readable.
111c0 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f  .**.** Note also
111d0 20 74 68 61 74 20 74 68 65 20 6e 75 6d 65 72 69   that the numeri
111e0 63 20 74 79 70 65 73 20 61 72 65 20 67 72 6f 75  c types are grou
111f0 70 65 64 20 74 6f 67 65 74 68 65 72 20 73 6f 20  ped together so 
11200 74 68 61 74 20 74 65 73 74 69 6e 67 0a 2a 2a 20  that testing.** 
11210 66 6f 72 20 61 20 6e 75 6d 65 72 69 63 20 74 79  for a numeric ty
11220 70 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63  pe is a single c
11230 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 41 6e 64 20  omparison.  And 
11240 74 68 65 20 42 4c 4f 42 20 74 79 70 65 20 69 73  the BLOB type is
11250 20 66 69 72 73 74 2e 0a 2a 2f 0a 23 64 65 66 69   first..*/.#defi
11260 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c  ne SQLITE_AFF_BL
11270 4f 42 20 20 20 20 20 27 41 27 0a 23 64 65 66 69  OB     'A'.#defi
11280 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  ne SQLITE_AFF_TE
11290 58 54 20 20 20 20 20 27 42 27 0a 23 64 65 66 69  XT     'B'.#defi
112a0 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  ne SQLITE_AFF_NU
112b0 4d 45 52 49 43 20 20 27 43 27 0a 23 64 65 66 69  MERIC  'C'.#defi
112c0 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  ne SQLITE_AFF_IN
112d0 54 45 47 45 52 20 20 27 44 27 0a 23 64 65 66 69  TEGER  'D'.#defi
112e0 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45  ne SQLITE_AFF_RE
112f0 41 4c 20 20 20 20 20 27 45 27 0a 0a 23 64 65 66  AL     'E'..#def
11300 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 75 6d  ine sqlite3IsNum
11310 65 72 69 63 41 66 66 69 6e 69 74 79 28 58 29 20  ericAffinity(X) 
11320 20 28 28 58 29 3e 3d 53 51 4c 49 54 45 5f 41 46   ((X)>=SQLITE_AF
11330 46 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a  F_NUMERIC)../*.*
11340 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46  * The SQLITE_AFF
11350 5f 4d 41 53 4b 20 76 61 6c 75 65 73 20 6d 61 73  _MASK values mas
11360 6b 73 20 6f 66 66 20 74 68 65 20 73 69 67 6e 69  ks off the signi
11370 66 69 63 61 6e 74 20 62 69 74 73 20 6f 66 20 61  ficant bits of a
11380 6e 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 76 61  n.** affinity va
11390 6c 75 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  lue..*/.#define 
113a0 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20  SQLITE_AFF_MASK 
113b0 20 20 20 20 30 78 34 37 0a 0a 2f 2a 0a 2a 2a 20      0x47../*.** 
113c0 41 64 64 69 74 69 6f 6e 61 6c 20 62 69 74 20 76  Additional bit v
113d0 61 6c 75 65 73 20 74 68 61 74 20 63 61 6e 20 62  alues that can b
113e0 65 20 4f 52 65 64 20 77 69 74 68 20 61 6e 20 61  e ORed with an a
113f0 66 66 69 6e 69 74 79 20 77 69 74 68 6f 75 74 0a  ffinity without.
11400 2a 2a 20 63 68 61 6e 67 69 6e 67 20 74 68 65 20  ** changing the 
11410 61 66 66 69 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a 20  affinity..**.** 
11420 54 68 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55  The SQLITE_NOTNU
11430 4c 4c 20 66 6c 61 67 20 69 73 20 61 20 63 6f 6d  LL flag is a com
11440 62 69 6e 61 74 69 6f 6e 20 6f 66 20 4e 55 4c 4c  bination of NULL
11450 45 51 20 61 6e 64 20 4a 55 4d 50 49 46 4e 55 4c  EQ and JUMPIFNUL
11460 4c 2e 0a 2a 2a 20 49 74 20 63 61 75 73 65 73 20  L..** It causes 
11470 61 6e 20 61 73 73 65 72 74 28 29 20 74 6f 20 66  an assert() to f
11480 69 72 65 20 69 66 20 65 69 74 68 65 72 20 6f 70  ire if either op
11490 65 72 61 6e 64 20 74 6f 20 61 20 63 6f 6d 70 61  erand to a compa
114a0 72 69 73 6f 6e 0a 2a 2a 20 6f 70 65 72 61 74 6f  rison.** operato
114b0 72 20 69 73 20 4e 55 4c 4c 2e 20 20 49 74 20 69  r is NULL.  It i
114c0 73 20 61 64 64 65 64 20 74 6f 20 63 65 72 74 61  s added to certa
114d0 69 6e 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70  in comparison op
114e0 65 72 61 74 6f 72 73 20 74 6f 0a 2a 2a 20 70 72  erators to.** pr
114f0 6f 76 65 20 74 68 61 74 20 74 68 65 20 6f 70 65  ove that the ope
11500 72 61 6e 64 73 20 61 72 65 20 61 6c 77 61 79 73  rands are always
11510 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23 64   NOT NULL..*/.#d
11520 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4b 45 45  efine SQLITE_KEE
11530 50 4e 55 4c 4c 20 20 20 20 20 30 78 30 38 20 20  PNULL     0x08  
11540 2f 2a 20 55 73 65 64 20 62 79 20 76 65 63 74 6f  /* Used by vecto
11550 72 20 3d 3d 20 6f 72 20 3c 3e 20 2a 2f 0a 23 64  r == or <> */.#d
11560 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4a 55 4d  efine SQLITE_JUM
11570 50 49 46 4e 55 4c 4c 20 20 20 30 78 31 30 20 20  PIFNULL   0x10  
11580 2f 2a 20 6a 75 6d 70 73 20 69 66 20 65 69 74 68  /* jumps if eith
11590 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
115a0 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  LL */.#define SQ
115b0 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 20 20 20  LITE_STOREP2    
115c0 20 20 30 78 32 30 20 20 2f 2a 20 53 74 6f 72 65    0x20  /* Store
115d0 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 5b 50   result in reg[P
115e0 32 5d 20 72 61 74 68 65 72 20 74 68 61 6e 20 6a  2] rather than j
115f0 75 6d 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ump */.#define S
11600 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 20 20 20  QLITE_NULLEQ    
11610 20 20 20 30 78 38 30 20 20 2f 2a 20 4e 55 4c 4c     0x80  /* NULL
11620 3d 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65  =NULL */.#define
11630 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20   SQLITE_NOTNULL 
11640 20 20 20 20 20 30 78 39 30 20 20 2f 2a 20 41 73       0x90  /* As
11650 73 65 72 74 20 74 68 61 74 20 6f 70 65 72 61 6e  sert that operan
11660 64 73 20 61 72 65 20 6e 65 76 65 72 20 4e 55 4c  ds are never NUL
11670 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f  L */../*.** An o
11680 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74 79  bject of this ty
11690 70 65 20 69 73 20 63 72 65 61 74 65 64 20 66 6f  pe is created fo
116a0 72 20 65 61 63 68 20 76 69 72 74 75 61 6c 20 74  r each virtual t
116b0 61 62 6c 65 20 70 72 65 73 65 6e 74 20 69 6e 0a  able present in.
116c0 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ** the database 
116d0 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 49 66  schema..**.** If
116e0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
116f0 68 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20  hema is shared, 
11700 74 68 65 6e 20 74 68 65 72 65 20 69 73 20 6f 6e  then there is on
11710 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  e instance of th
11720 69 73 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20  is.** structure 
11730 66 6f 72 20 65 61 63 68 20 64 61 74 61 62 61 73  for each databas
11740 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 28 73 71  e connection (sq
11750 6c 69 74 65 33 2a 29 20 74 68 61 74 20 75 73 65  lite3*) that use
11760 73 20 74 68 65 20 73 68 61 72 65 64 0a 2a 2a 20  s the shared.** 
11770 73 63 68 65 6d 61 2e 20 54 68 69 73 20 69 73 20  schema. This is 
11780 62 65 63 61 75 73 65 20 65 61 63 68 20 64 61 74  because each dat
11790 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
117a0 20 72 65 71 75 69 72 65 73 20 69 74 73 20 6f 77   requires its ow
117b0 6e 20 75 6e 69 71 75 65 0a 2a 2a 20 69 6e 73 74  n unique.** inst
117c0 61 6e 63 65 20 6f 66 20 74 68 65 20 73 71 6c 69  ance of the sqli
117d0 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65  te3_vtab* handle
117e0 20 75 73 65 64 20 74 6f 20 61 63 63 65 73 73 20   used to access 
117f0 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
11800 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74  e.** implementat
11810 69 6f 6e 2e 20 73 71 6c 69 74 65 33 5f 76 74 61  ion. sqlite3_vta
11820 62 2a 20 68 61 6e 64 6c 65 73 20 63 61 6e 20 6e  b* handles can n
11830 6f 74 20 62 65 20 73 68 61 72 65 64 20 62 65 74  ot be shared bet
11840 77 65 65 6e 0a 2a 2a 20 64 61 74 61 62 61 73 65  ween.** database
11850 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20 65 76   connections, ev
11860 65 6e 20 77 68 65 6e 20 74 68 65 20 72 65 73 74  en when the rest
11870 20 6f 66 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72   of the in-memor
11880 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 73 63  y database.** sc
11890 68 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20  hema is shared, 
118a0 61 73 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  as the implement
118b0 61 74 69 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72  ation often stor
118c0 65 73 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  es the database.
118d0 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  ** connection ha
118e0 6e 64 6c 65 20 70 61 73 73 65 64 20 74 6f 20 69  ndle passed to i
118f0 74 20 76 69 61 20 74 68 65 20 78 43 6f 6e 6e 65  t via the xConne
11900 63 74 28 29 20 6f 72 20 78 43 72 65 61 74 65 28  ct() or xCreate(
11910 29 20 6d 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69  ) method.** duri
11920 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  ng initializatio
11930 6e 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68  n internally. Th
11940 69 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  is database conn
11950 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61  ection handle ma
11960 79 0a 2a 2a 20 74 68 65 6e 20 62 65 20 75 73 65  y.** then be use
11970 64 20 62 79 20 74 68 65 20 76 69 72 74 75 61 6c  d by the virtual
11980 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74   table implement
11990 61 74 69 6f 6e 20 74 6f 20 61 63 63 65 73 73 20  ation to access 
119a0 72 65 61 6c 20 74 61 62 6c 65 73 0a 2a 2a 20 77  real tables.** w
119b0 69 74 68 69 6e 20 74 68 65 20 64 61 74 61 62 61  ithin the databa
119c0 73 65 2e 20 53 6f 20 74 68 61 74 20 74 68 65 79  se. So that they
119d0 20 61 70 70 65 61 72 20 61 73 20 70 61 72 74 20   appear as part 
119e0 6f 66 20 74 68 65 20 63 61 6c 6c 65 72 73 0a 2a  of the callers.*
119f0 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74  * transaction, t
11a00 68 65 73 65 20 61 63 63 65 73 73 65 73 20 6e 65  hese accesses ne
11a10 65 64 20 74 6f 20 62 65 20 6d 61 64 65 20 76 69  ed to be made vi
11a20 61 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62  a the same datab
11a30 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f  ase.** connectio
11a40 6e 20 61 73 20 74 68 61 74 20 75 73 65 64 20 74  n as that used t
11a50 6f 20 65 78 65 63 75 74 65 20 53 51 4c 20 6f 70  o execute SQL op
11a60 65 72 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20  erations on the 
11a70 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a  virtual table..*
11a80 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20  *.** All VTable 
11a90 6f 62 6a 65 63 74 73 20 74 68 61 74 20 63 6f 72  objects that cor
11aa0 72 65 73 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e  respond to a sin
11ab0 67 6c 65 20 74 61 62 6c 65 20 69 6e 20 61 20 73  gle table in a s
11ac0 68 61 72 65 64 0a 2a 2a 20 64 61 74 61 62 61 73  hared.** databas
11ad0 65 20 73 63 68 65 6d 61 20 61 72 65 20 69 6e 69  e schema are ini
11ae0 74 69 61 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e  tially stored in
11af0 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70   a linked-list p
11b00 6f 69 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20  ointed to by.** 
11b10 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c  the Table.pVTabl
11b20 65 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62 6c  e member variabl
11b30 65 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70  e of the corresp
11b40 6f 6e 64 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a  onding Table obj
11b50 65 63 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20  ect..** When an 
11b60 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28  sqlite3_prepare(
11b70 29 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 72  ) operation is r
11b80 65 71 75 69 72 65 64 20 74 6f 20 61 63 63 65 73  equired to acces
11b90 73 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a  s the virtual.**
11ba0 20 74 61 62 6c 65 2c 20 69 74 20 73 65 61 72 63   table, it searc
11bb0 68 65 73 20 74 68 65 20 6c 69 73 74 20 66 6f 72  hes the list for
11bc0 20 74 68 65 20 56 54 61 62 6c 65 20 74 68 61 74   the VTable that
11bd0 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
11be0 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  the.** database 
11bf0 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67  connection doing
11c00 20 74 68 65 20 70 72 65 70 61 72 69 6e 67 20 73   the preparing s
11c10 6f 20 61 73 20 74 6f 20 75 73 65 20 74 68 65 20  o as to use the 
11c20 63 6f 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74  correct.** sqlit
11c30 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20  e3_vtab* handle 
11c40 69 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20  in the compiled 
11c50 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65  query..**.** Whe
11c60 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54  n an in-memory T
11c70 61 62 6c 65 20 6f 62 6a 65 63 74 20 69 73 20 64  able object is d
11c80 65 6c 65 74 65 64 20 28 66 6f 72 20 65 78 61 6d  eleted (for exam
11c90 70 6c 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20  ple when the.** 
11ca0 73 63 68 65 6d 61 20 69 73 20 62 65 69 6e 67 20  schema is being 
11cb0 72 65 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d  reloaded for som
11cc0 65 20 72 65 61 73 6f 6e 29 2c 20 74 68 65 20 56  e reason), the V
11cd0 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 61 72  Table objects ar
11ce0 65 20 6e 6f 74 0a 2a 2a 20 64 65 6c 65 74 65 64  e not.** deleted
11cf0 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74 65 33   and the sqlite3
11d00 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 61  _vtab* handles a
11d10 72 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e 65  re not xDisconne
11d20 63 74 28 29 65 64 0a 2a 2a 20 69 6d 6d 65 64 69  ct()ed.** immedi
11d30 61 74 65 6c 79 2e 20 49 6e 73 74 65 61 64 2c 20  ately. Instead, 
11d40 74 68 65 79 20 61 72 65 20 6d 6f 76 65 64 20 66  they are moved f
11d50 72 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e 70 56  rom the Table.pV
11d60 54 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a 2a 2a  Table list to.**
11d70 20 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65 64 20   another linked 
11d80 6c 69 73 74 20 68 65 61 64 65 64 20 62 79 20 74  list headed by t
11d90 68 65 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63  he sqlite3.pDisc
11da0 6f 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20 6f 66  onnect member of
11db0 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f   the.** correspo
11dc0 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 20 73 74  nding sqlite3 st
11dd0 72 75 63 74 75 72 65 2e 20 54 68 65 79 20 61 72  ructure. They ar
11de0 65 20 74 68 65 6e 20 64 65 6c 65 74 65 64 2f 78  e then deleted/x
11df0 44 69 73 63 6f 6e 6e 65 63 74 65 64 0a 2a 2a 20  Disconnected.** 
11e00 6e 65 78 74 20 74 69 6d 65 20 61 20 73 74 61 74  next time a stat
11e10 65 6d 65 6e 74 20 69 73 20 70 72 65 70 61 72 65  ement is prepare
11e20 64 20 75 73 69 6e 67 20 73 61 69 64 20 73 71 6c  d using said sql
11e30 69 74 65 33 2a 2e 20 54 68 69 73 20 69 73 20 64  ite3*. This is d
11e40 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20  one.** to avoid 
11e50 64 65 61 64 6c 6f 63 6b 20 69 73 73 75 65 73 20  deadlock issues 
11e60 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69 70  involving multip
11e70 6c 65 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78  le sqlite3.mutex
11e80 20 6d 75 74 65 78 65 73 2e 0a 2a 2a 20 52 65 66   mutexes..** Ref
11e90 65 72 20 74 6f 20 63 6f 6d 6d 65 6e 74 73 20 61  er to comments a
11ea0 62 6f 76 65 20 66 75 6e 63 74 69 6f 6e 20 73 71  bove function sq
11eb0 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c  lite3VtabUnlockL
11ec0 69 73 74 28 29 20 66 6f 72 20 61 6e 0a 2a 2a 20  ist() for an.** 
11ed0 65 78 70 6c 61 6e 61 74 69 6f 6e 20 61 73 20 74  explanation as t
11ee0 6f 20 77 68 79 20 69 74 20 69 73 20 73 61 66 65  o why it is safe
11ef0 20 74 6f 20 61 64 64 20 61 6e 20 65 6e 74 72 79   to add an entry
11f00 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 2e 70   to an sqlite3.p
11f10 44 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c 69  Disconnect.** li
11f20 73 74 20 77 69 74 68 6f 75 74 20 68 6f 6c 64 69  st without holdi
11f30 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  ng the correspon
11f40 64 69 6e 67 20 73 71 6c 69 74 65 33 2e 6d 75 74  ding sqlite3.mut
11f50 65 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a 20  ex mutex..**.** 
11f60 54 68 65 20 6d 65 6d 6f 72 79 20 66 6f 72 20 6f  The memory for o
11f70 62 6a 65 63 74 73 20 6f 66 20 74 68 69 73 20 74  bjects of this t
11f80 79 70 65 20 69 73 20 61 6c 77 61 79 73 20 61 6c  ype is always al
11f90 6c 6f 63 61 74 65 64 20 62 79 0a 2a 2a 20 73 71  located by.** sq
11fa0 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 28 29 2c  lite3DbMalloc(),
11fb0 20 75 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65   using the conne
11fc0 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 73 74 6f  ction handle sto
11fd0 72 65 64 20 69 6e 20 56 54 61 62 6c 65 2e 64 62  red in VTable.db
11fe0 20 61 73 0a 2a 2a 20 74 68 65 20 66 69 72 73 74   as.** the first
11ff0 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74   argument..*/.st
12000 72 75 63 74 20 56 54 61 62 6c 65 20 7b 0a 20 20  ruct VTable {.  
12010 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
12020 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74            /* Dat
12030 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
12040 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
12050 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
12060 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64 3b 20 20   Module *pMod;  
12070 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f             /* Po
12080 69 6e 74 65 72 20 74 6f 20 6d 6f 64 75 6c 65 20  inter to module 
12090 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a  implementation *
120a0 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  /.  sqlite3_vtab
120b0 20 2a 70 56 74 61 62 3b 20 20 20 20 20 20 2f 2a   *pVtab;      /*
120c0 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 74 61 62   Pointer to vtab
120d0 20 69 6e 73 74 61 6e 63 65 20 2a 2f 0a 20 20 69   instance */.  i
120e0 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20  nt nRef;        
120f0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
12100 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74  er of pointers t
12110 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  o this structure
12120 20 2a 2f 0a 20 20 75 38 20 62 43 6f 6e 73 74 72   */.  u8 bConstr
12130 61 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  aint;           
12140 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74  /* True if const
12150 72 61 69 6e 74 73 20 61 72 65 20 73 75 70 70 6f  raints are suppo
12160 72 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53  rted */.  int iS
12170 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20  avepoint;       
12180 20 20 20 20 2f 2a 20 44 65 70 74 68 20 6f 66 20      /* Depth of 
12190 74 68 65 20 53 41 56 45 50 4f 49 4e 54 20 73 74  the SAVEPOINT st
121a0 61 63 6b 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20  ack */.  VTable 
121b0 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
121c0 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69     /* Next in li
121d0 6e 6b 65 64 20 6c 69 73 74 20 28 73 65 65 20 61  nked list (see a
121e0 62 6f 76 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  bove) */.};../*.
121f0 2a 2a 20 54 68 65 20 73 63 68 65 6d 61 20 66 6f  ** The schema fo
12200 72 20 65 61 63 68 20 53 51 4c 20 74 61 62 6c 65  r each SQL table
12210 20 61 6e 64 20 76 69 65 77 20 69 73 20 72 65 70   and view is rep
12220 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f  resented in memo
12230 72 79 0a 2a 2a 20 62 79 20 61 6e 20 69 6e 73 74  ry.** by an inst
12240 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
12250 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e  owing structure.
12260 0a 2a 2f 0a 73 74 72 75 63 74 20 54 61 62 6c 65  .*/.struct Table
12270 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
12280 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d  ;         /* Nam
12290 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f  e of the table o
122a0 72 20 76 69 65 77 20 2a 2f 0a 20 20 43 6f 6c 75  r view */.  Colu
122b0 6d 6e 20 2a 61 43 6f 6c 3b 20 20 20 20 20 20 20  mn *aCol;       
122c0 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
122d0 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d  about each colum
122e0 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49  n */.  Index *pI
122f0 6e 64 65 78 3b 20 20 20 20 20 20 20 2f 2a 20 4c  ndex;       /* L
12300 69 73 74 20 6f 66 20 53 51 4c 20 69 6e 64 65 78  ist of SQL index
12310 65 73 20 6f 6e 20 74 68 69 73 20 74 61 62 6c 65  es on this table
12320 2e 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  . */.  Select *p
12330 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 4e  Select;     /* N
12340 55 4c 4c 20 66 6f 72 20 74 61 62 6c 65 73 2e 20  ULL for tables. 
12350 20 50 6f 69 6e 74 73 20 74 6f 20 64 65 66 69 6e   Points to defin
12360 69 74 69 6f 6e 20 69 66 20 61 20 76 69 65 77 2e  ition if a view.
12370 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 46 4b 65   */.  FKey *pFKe
12380 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69  y;         /* Li
12390 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c  nked list of all
123a0 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 69 6e   foreign keys in
123b0 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
123c0 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20   char *zColAff; 
123d0 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20        /* String 
123e0 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66  defining the aff
123f0 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f  inity of each co
12400 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78 70 72 4c 69  lumn */.  ExprLi
12410 73 74 20 2a 70 43 68 65 63 6b 3b 20 20 20 20 2f  st *pCheck;    /
12420 2a 20 41 6c 6c 20 43 48 45 43 4b 20 63 6f 6e 73  * All CHECK cons
12430 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 20 20 20  traints */.     
12440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12450 20 20 2f 2a 20 20 20 2e 2e 2e 20 61 6c 73 6f 20    /*   ... also 
12460 75 73 65 64 20 61 73 20 63 6f 6c 75 6d 6e 20 6e  used as column n
12470 61 6d 65 20 6c 69 73 74 20 69 6e 20 61 20 56 49  ame list in a VI
12480 45 57 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d  EW */.  int tnum
12490 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
124a0 52 6f 6f 74 20 42 54 72 65 65 20 70 61 67 65 20  Root BTree page 
124b0 66 6f 72 20 74 68 69 73 20 74 61 62 6c 65 20 2a  for this table *
124c0 2f 0a 20 20 75 33 32 20 6e 54 61 62 52 65 66 3b  /.  u32 nTabRef;
124d0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
124e0 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74  er of pointers t
124f0 6f 20 74 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a  o this Table */.
12500 20 20 75 33 32 20 74 61 62 46 6c 61 67 73 3b 20    u32 tabFlags; 
12510 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f         /* Mask o
12520 66 20 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f  f TF_* values */
12530 0a 20 20 69 31 36 20 69 50 4b 65 79 3b 20 20 20  .  i16 iPKey;   
12540 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f          /* If no
12550 74 20 6e 65 67 61 74 69 76 65 2c 20 75 73 65 20  t negative, use 
12560 61 43 6f 6c 5b 69 50 4b 65 79 5d 20 61 73 20 74  aCol[iPKey] as t
12570 68 65 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69 31  he rowid */.  i1
12580 36 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20  6 nCol;         
12590 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
125a0 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20  columns in this 
125b0 74 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73  table */.  LogEs
125c0 74 20 6e 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20  t nRowLogEst;   
125d0 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 72 6f 77  /* Estimated row
125e0 73 20 69 6e 20 74 61 62 6c 65 20 2d 20 66 72 6f  s in table - fro
125f0 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74  m sqlite_stat1 t
12600 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74  able */.  LogEst
12610 20 73 7a 54 61 62 52 6f 77 3b 20 20 20 20 20 2f   szTabRow;     /
12620 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65  * Estimated size
12630 20 6f 66 20 65 61 63 68 20 74 61 62 6c 65 20 72   of each table r
12640 6f 77 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 23  ow in bytes */.#
12650 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
12660 42 4c 45 5f 43 4f 53 54 4d 55 4c 54 0a 20 20 4c  BLE_COSTMULT.  L
12670 6f 67 45 73 74 20 63 6f 73 74 4d 75 6c 74 3b 20  ogEst costMult; 
12680 20 20 20 20 2f 2a 20 43 6f 73 74 20 6d 75 6c 74      /* Cost mult
12690 69 70 6c 69 65 72 20 66 6f 72 20 75 73 69 6e 67  iplier for using
126a0 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 23   this table */.#
126b0 65 6e 64 69 66 0a 20 20 75 38 20 6b 65 79 43 6f  endif.  u8 keyCo
126c0 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  nf;          /* 
126d0 57 68 61 74 20 74 6f 20 64 6f 20 69 6e 20 63 61  What to do in ca
126e0 73 65 20 6f 66 20 75 6e 69 71 75 65 6e 65 73 73  se of uniqueness
126f0 20 63 6f 6e 66 6c 69 63 74 20 6f 6e 20 69 50 4b   conflict on iPK
12700 65 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  ey */.#ifndef SQ
12710 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54  LITE_OMIT_ALTERT
12720 41 42 4c 45 0a 20 20 69 6e 74 20 61 64 64 43 6f  ABLE.  int addCo
12730 6c 4f 66 66 73 65 74 3b 20 20 20 20 2f 2a 20 4f  lOffset;    /* O
12740 66 66 73 65 74 20 69 6e 20 43 52 45 41 54 45 20  ffset in CREATE 
12750 54 41 42 4c 45 20 73 74 6d 74 20 74 6f 20 61 64  TABLE stmt to ad
12760 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a  d a new column *
12770 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
12780 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
12790 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20  TUALTABLE.  int 
127a0 6e 4d 6f 64 75 6c 65 41 72 67 3b 20 20 20 20 20  nModuleArg;     
127b0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
127c0 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 6d  guments to the m
127d0 6f 64 75 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20  odule */.  char 
127e0 2a 2a 61 7a 4d 6f 64 75 6c 65 41 72 67 3b 20 20  **azModuleArg;  
127f0 2f 2a 20 30 3a 20 6d 6f 64 75 6c 65 20 31 3a 20  /* 0: module 1: 
12800 73 63 68 65 6d 61 20 32 3a 20 76 74 61 62 20 6e  schema 2: vtab n
12810 61 6d 65 20 33 2e 2e 2e 3a 20 61 72 67 73 20 2a  ame 3...: args *
12820 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 56 54 61  /.  VTable *pVTa
12830 62 6c 65 3b 20 20 20 20 20 2f 2a 20 4c 69 73 74  ble;     /* List
12840 20 6f 66 20 56 54 61 62 6c 65 20 6f 62 6a 65 63   of VTable objec
12850 74 73 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ts. */.#endif.  
12860 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 67 65  Trigger *pTrigge
12870 72 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20  r;   /* List of 
12880 74 72 69 67 67 65 72 73 20 73 74 6f 72 65 64 20  triggers stored 
12890 69 6e 20 70 53 63 68 65 6d 61 20 2a 2f 0a 20 20  in pSchema */.  
128a0 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
128b0 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 74       /* Schema t
128c0 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 69  hat contains thi
128d0 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 61 62  s table */.  Tab
128e0 6c 65 20 2a 70 4e 65 78 74 5a 6f 6d 62 69 65 3b  le *pNextZombie;
128f0 20 20 2f 2a 20 4e 65 78 74 20 6f 6e 20 74 68 65    /* Next on the
12900 20 50 61 72 73 65 2e 70 5a 6f 6d 62 69 65 54 61   Parse.pZombieTa
12910 62 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  b list */.};../*
12920 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
12930 65 73 20 66 6f 72 20 54 61 62 6c 65 2e 74 61 62  es for Table.tab
12940 46 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 54 46 5f  Flags..**.** TF_
12950 4f 4f 4f 48 69 64 64 65 6e 20 61 70 70 6c 69 65  OOOHidden applie
12960 73 20 74 6f 20 74 61 62 6c 65 73 20 6f 72 20 76  s to tables or v
12970 69 65 77 20 74 68 61 74 20 68 61 76 65 20 68 69  iew that have hi
12980 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 74 68 61  dden columns tha
12990 74 20 61 72 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 65  t are.** followe
129a0 64 20 62 79 20 6e 6f 6e 2d 68 69 64 64 65 6e 20  d by non-hidden 
129b0 63 6f 6c 75 6d 6e 73 2e 20 20 45 78 61 6d 70 6c  columns.  Exampl
129c0 65 3a 20 20 22 43 52 45 41 54 45 20 56 49 52 54  e:  "CREATE VIRT
129d0 55 41 4c 20 54 41 42 4c 45 20 78 20 55 53 49 4e  UAL TABLE x USIN
129e0 47 0a 2a 2a 20 76 74 61 62 31 28 61 20 48 49 44  G.** vtab1(a HID
129f0 44 45 4e 2c 20 62 29 3b 22 2e 20 20 53 69 6e 63  DEN, b);".  Sinc
12a00 65 20 22 62 22 20 69 73 20 61 20 6e 6f 6e 2d 68  e "b" is a non-h
12a10 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 62 75 74  idden column but
12a20 20 22 61 22 20 69 73 20 68 69 64 64 65 6e 2c 0a   "a" is hidden,.
12a30 2a 2a 20 74 68 65 20 54 46 5f 4f 4f 4f 48 69 64  ** the TF_OOOHid
12a40 64 65 6e 20 61 74 74 72 69 62 75 74 65 20 77 6f  den attribute wo
12a50 75 6c 64 20 61 70 70 6c 79 20 69 6e 20 74 68 69  uld apply in thi
12a60 73 20 63 61 73 65 2e 20 20 53 75 63 68 20 74 61  s case.  Such ta
12a70 62 6c 65 73 20 72 65 71 75 69 72 65 0a 2a 2a 20  bles require.** 
12a80 73 70 65 63 69 61 6c 20 68 61 6e 64 6c 69 6e 67  special handling
12a90 20 64 75 72 69 6e 67 20 49 4e 53 45 52 54 20 70   during INSERT p
12aa0 72 6f 63 65 73 73 69 6e 67 2e 0a 2a 2f 0a 23 64  rocessing..*/.#d
12ab0 65 66 69 6e 65 20 54 46 5f 52 65 61 64 6f 6e 6c  efine TF_Readonl
12ac0 79 20 20 20 20 20 20 20 20 30 78 30 30 30 31 20  y        0x0001 
12ad0 20 20 20 2f 2a 20 52 65 61 64 2d 6f 6e 6c 79 20     /* Read-only 
12ae0 73 79 73 74 65 6d 20 74 61 62 6c 65 20 2a 2f 0a  system table */.
12af0 23 64 65 66 69 6e 65 20 54 46 5f 45 70 68 65 6d  #define TF_Ephem
12b00 65 72 61 6c 20 20 20 20 20 20 20 30 78 30 30 30  eral       0x000
12b10 32 20 20 20 20 2f 2a 20 41 6e 20 65 70 68 65 6d  2    /* An ephem
12b20 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64  eral table */.#d
12b30 65 66 69 6e 65 20 54 46 5f 48 61 73 50 72 69 6d  efine TF_HasPrim
12b40 61 72 79 4b 65 79 20 20 20 30 78 30 30 30 34 20  aryKey   0x0004 
12b50 20 20 20 2f 2a 20 54 61 62 6c 65 20 68 61 73 20     /* Table has 
12b60 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f  a primary key */
12b70 0a 23 64 65 66 69 6e 65 20 54 46 5f 41 75 74 6f  .#define TF_Auto
12b80 69 6e 63 72 65 6d 65 6e 74 20 20 20 30 78 30 30  increment   0x00
12b90 30 38 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72  08    /* Integer
12ba0 20 70 72 69 6d 61 72 79 20 6b 65 79 20 69 73 20   primary key is 
12bb0 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f  autoincrement */
12bc0 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73 53  .#define TF_HasS
12bd0 74 61 74 31 20 20 20 20 20 20 20 20 30 78 30 30  tat1        0x00
12be0 31 30 20 20 20 20 2f 2a 20 6e 52 6f 77 4c 6f 67  10    /* nRowLog
12bf0 45 73 74 20 73 65 74 20 66 72 6f 6d 20 73 71 6c  Est set from sql
12c00 69 74 65 5f 73 74 61 74 31 20 2a 2f 0a 23 64 65  ite_stat1 */.#de
12c10 66 69 6e 65 20 54 46 5f 57 69 74 68 6f 75 74 52  fine TF_WithoutR
12c20 6f 77 69 64 20 20 20 20 30 78 30 30 32 30 20 20  owid    0x0020  
12c30 20 20 2f 2a 20 4e 6f 20 72 6f 77 69 64 2e 20 20    /* No rowid.  
12c40 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20 74  PRIMARY KEY is t
12c50 68 65 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e  he key */.#defin
12c60 65 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f  e TF_NoVisibleRo
12c70 77 69 64 20 20 30 78 30 30 34 30 20 20 20 20 2f  wid  0x0040    /
12c80 2a 20 4e 6f 20 75 73 65 72 2d 76 69 73 69 62 6c  * No user-visibl
12c90 65 20 22 72 6f 77 69 64 22 20 63 6f 6c 75 6d 6e  e "rowid" column
12ca0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 4f   */.#define TF_O
12cb0 4f 4f 48 69 64 64 65 6e 20 20 20 20 20 20 20 30  OOHidden       0
12cc0 78 30 30 38 30 20 20 20 20 2f 2a 20 4f 75 74 2d  x0080    /* Out-
12cd0 6f 66 2d 4f 72 64 65 72 20 68 69 64 64 65 6e 20  of-Order hidden 
12ce0 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 23 64 65 66 69  columns */.#defi
12cf0 6e 65 20 54 46 5f 53 74 61 74 73 55 73 65 64 20  ne TF_StatsUsed 
12d00 20 20 20 20 20 20 30 78 30 31 30 30 20 20 20 20        0x0100    
12d10 2f 2a 20 51 75 65 72 79 20 70 6c 61 6e 6e 65 72  /* Query planner
12d20 20 64 65 63 69 73 69 6f 6e 73 20 61 66 66 65 63   decisions affec
12d30 74 65 64 20 62 79 0a 20 20 20 20 20 20 20 20 20  ted by.         
12d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d50 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 49              ** I
12d60 6e 64 65 78 2e 61 69 52 6f 77 4c 6f 67 45 73 74  ndex.aiRowLogEst
12d70 5b 5d 20 76 61 6c 75 65 73 20 2a 2f 0a 23 64 65  [] values */.#de
12d80 66 69 6e 65 20 54 46 5f 48 61 73 4e 6f 74 4e 75  fine TF_HasNotNu
12d90 6c 6c 20 20 20 20 20 20 30 78 30 32 30 30 20 20  ll      0x0200  
12da0 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 4e 4f    /* Contains NO
12db0 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e  T NULL constrain
12dc0 74 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 65 73  ts */../*.** Tes
12dd0 74 20 74 6f 20 73 65 65 20 77 68 65 74 68 65 72  t to see whether
12de0 20 6f 72 20 6e 6f 74 20 61 20 74 61 62 6c 65 20   or not a table 
12df0 69 73 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  is a virtual tab
12e00 6c 65 2e 20 20 54 68 69 73 20 69 73 0a 2a 2a 20  le.  This is.** 
12e10 64 6f 6e 65 20 61 73 20 61 20 6d 61 63 72 6f 20  done as a macro 
12e20 73 6f 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20  so that it will 
12e30 62 65 20 6f 70 74 69 6d 69 7a 65 64 20 6f 75 74  be optimized out
12e40 20 77 68 65 6e 20 76 69 72 74 75 61 6c 0a 2a 2a   when virtual.**
12e50 20 74 61 62 6c 65 20 73 75 70 70 6f 72 74 20 69   table support i
12e60 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74  s omitted from t
12e70 68 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66  he build..*/.#if
12e80 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
12e90 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20  _VIRTUALTABLE.# 
12ea0 20 64 65 66 69 6e 65 20 49 73 56 69 72 74 75 61   define IsVirtua
12eb0 6c 28 58 29 20 20 20 20 20 20 28 28 58 29 2d 3e  l(X)      ((X)->
12ec0 6e 4d 6f 64 75 6c 65 41 72 67 29 0a 23 65 6c 73  nModuleArg).#els
12ed0 65 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56 69  e.#  define IsVi
12ee0 72 74 75 61 6c 28 58 29 20 20 20 20 20 20 30 0a  rtual(X)      0.
12ef0 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61  #endif../*.** Ma
12f00 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e  cros to determin
12f10 65 20 69 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73  e if a column is
12f20 20 68 69 64 64 65 6e 2e 20 20 49 73 4f 72 64 69   hidden.  IsOrdi
12f30 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  naryHiddenColumn
12f40 28 29 0a 2a 2a 20 6f 6e 6c 79 20 77 6f 72 6b 73  ().** only works
12f50 20 66 6f 72 20 6e 6f 6e 2d 76 69 72 74 75 61 6c   for non-virtual
12f60 20 74 61 62 6c 65 73 20 28 6f 72 64 69 6e 61 72   tables (ordinar
12f70 79 20 74 61 62 6c 65 73 20 61 6e 64 20 76 69 65  y tables and vie
12f80 77 73 29 20 61 6e 64 20 69 73 0a 2a 2a 20 61 6c  ws) and is.** al
12f90 77 61 79 73 20 66 61 6c 73 65 20 75 6e 6c 65 73  ways false unles
12fa0 73 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  s SQLITE_ENABLE_
12fb0 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 20 69  HIDDEN_COLUMNS i
12fc0 73 20 64 65 66 69 6e 65 64 2e 20 20 54 68 65 0a  s defined.  The.
12fd0 2a 2a 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d  ** IsHiddenColum
12fe0 6e 28 29 20 6d 61 63 72 6f 20 69 73 20 67 65 6e  n() macro is gen
12ff0 65 72 61 6c 20 70 75 72 70 6f 73 65 2e 0a 2a 2f  eral purpose..*/
13000 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
13010 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45  ITE_ENABLE_HIDDE
13020 4e 5f 43 4f 4c 55 4d 4e 53 29 0a 23 20 20 64 65  N_COLUMNS).#  de
13030 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c  fine IsHiddenCol
13040 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20 28  umn(X)         (
13050 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26  ((X)->colFlags &
13060 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29   COLFLAG_HIDDEN)
13070 21 3d 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49  !=0).#  define I
13080 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43  sOrdinaryHiddenC
13090 6f 6c 75 6d 6e 28 58 29 20 28 28 28 58 29 2d 3e  olumn(X) (((X)->
130a0 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c  colFlags & COLFL
130b0 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23  AG_HIDDEN)!=0).#
130c0 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  elif !defined(SQ
130d0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
130e0 4c 54 41 42 4c 45 29 0a 23 20 20 64 65 66 69 6e  LTABLE).#  defin
130f0 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  e IsHiddenColumn
13100 28 58 29 20 20 20 20 20 20 20 20 20 28 28 28 58  (X)         (((X
13110 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f  )->colFlags & CO
13120 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30  LFLAG_HIDDEN)!=0
13130 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f 72  ).#  define IsOr
13140 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75  dinaryHiddenColu
13150 6d 6e 28 58 29 20 30 0a 23 65 6c 73 65 0a 23 20  mn(X) 0.#else.# 
13160 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e   define IsHidden
13170 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20  Column(X)       
13180 20 20 30 0a 23 20 20 64 65 66 69 6e 65 20 49 73    0.#  define Is
13190 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f  OrdinaryHiddenCo
131a0 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6e 64 69 66  lumn(X) 0.#endif
131b0 0a 0a 0a 2f 2a 20 44 6f 65 73 20 74 68 65 20 74  .../* Does the t
131c0 61 62 6c 65 20 68 61 76 65 20 61 20 72 6f 77 69  able have a rowi
131d0 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 48 61 73  d */.#define Has
131e0 52 6f 77 69 64 28 58 29 20 20 20 20 20 28 28 28  Rowid(X)     (((
131f0 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54  X)->tabFlags & T
13200 46 5f 57 69 74 68 6f 75 74 52 6f 77 69 64 29 3d  F_WithoutRowid)=
13210 3d 30 29 0a 23 64 65 66 69 6e 65 20 56 69 73 69  =0).#define Visi
13220 62 6c 65 52 6f 77 69 64 28 58 29 20 28 28 28 58  bleRowid(X) (((X
13230 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46  )->tabFlags & TF
13240 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69 64 29  _NoVisibleRowid)
13250 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  ==0)../*.** Each
13260 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
13270 73 74 72 61 69 6e 74 20 69 73 20 61 6e 20 69 6e  straint is an in
13280 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
13290 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
132a0 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66 6f 72 65 69  e..**.** A forei
132b0 67 6e 20 6b 65 79 20 69 73 20 61 73 73 6f 63 69  gn key is associ
132c0 61 74 65 64 20 77 69 74 68 20 74 77 6f 20 74 61  ated with two ta
132d0 62 6c 65 73 2e 20 20 54 68 65 20 22 66 72 6f 6d  bles.  The "from
132e0 22 20 74 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68  " table is.** th
132f0 65 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e  e table that con
13300 74 61 69 6e 73 20 74 68 65 20 52 45 46 45 52 45  tains the REFERE
13310 4e 43 45 53 20 63 6c 61 75 73 65 20 74 68 61 74  NCES clause that
13320 20 63 72 65 61 74 65 73 20 74 68 65 20 66 6f 72   creates the for
13330 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e 20 20 54 68  eign.** key.  Th
13340 65 20 22 74 6f 22 20 74 61 62 6c 65 20 69 73 20  e "to" table is 
13350 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 69  the table that i
13360 73 20 6e 61 6d 65 64 20 69 6e 20 74 68 65 20 52  s named in the R
13370 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65  EFERENCES clause
13380 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65 72 20 74 68  ..** Consider th
13390 69 73 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a  is example:.**.*
133a0 2a 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42  *     CREATE TAB
133b0 4c 45 20 65 78 31 28 0a 2a 2a 20 20 20 20 20 20  LE ex1(.**      
133c0 20 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41   a INTEGER PRIMA
133d0 52 59 20 4b 45 59 2c 0a 2a 2a 20 20 20 20 20 20  RY KEY,.**      
133e0 20 62 20 49 4e 54 45 47 45 52 20 43 4f 4e 53 54   b INTEGER CONST
133f0 52 41 49 4e 54 20 66 6b 31 20 52 45 46 45 52 45  RAINT fk1 REFERE
13400 4e 43 45 53 20 65 78 32 28 78 29 0a 2a 2a 20 20  NCES ex2(x).**  
13410 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72 20     );.**.** For 
13420 66 6f 72 65 69 67 6e 20 6b 65 79 20 22 66 6b 31  foreign key "fk1
13430 22 2c 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c  ", the from-tabl
13440 65 20 69 73 20 22 65 78 31 22 20 61 6e 64 20 74  e is "ex1" and t
13450 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 22  he to-table is "
13460 65 78 32 22 2e 0a 2a 2a 20 45 71 75 69 76 61 6c  ex2"..** Equival
13470 65 6e 74 20 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a 2a  ent names:.**.**
13480 20 20 20 20 20 66 72 6f 6d 2d 74 61 62 6c 65 20       from-table 
13490 3d 3d 20 63 68 69 6c 64 2d 74 61 62 6c 65 0a 2a  == child-table.*
134a0 2a 20 20 20 20 20 20 20 74 6f 2d 74 61 62 6c 65  *       to-table
134b0 20 3d 3d 20 70 61 72 65 6e 74 2d 74 61 62 6c 65   == parent-table
134c0 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 52 45 46 45  .**.** Each REFE
134d0 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 67 65  RENCES clause ge
134e0 6e 65 72 61 74 65 73 20 61 6e 20 69 6e 73 74 61  nerates an insta
134f0 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
13500 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a  wing structure.*
13510 2a 20 77 68 69 63 68 20 69 73 20 61 74 74 61 63  * which is attac
13520 68 65 64 20 74 6f 20 74 68 65 20 66 72 6f 6d 2d  hed to the from-
13530 74 61 62 6c 65 2e 20 20 54 68 65 20 74 6f 2d 74  table.  The to-t
13540 61 62 6c 65 20 6e 65 65 64 20 6e 6f 74 20 65 78  able need not ex
13550 69 73 74 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20  ist when.** the 
13560 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 63 72  from-table is cr
13570 65 61 74 65 64 2e 20 20 54 68 65 20 65 78 69 73  eated.  The exis
13580 74 65 6e 63 65 20 6f 66 20 74 68 65 20 74 6f 2d  tence of the to-
13590 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 63 68 65  table is not che
135a0 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  cked..**.** The 
135b0 6c 69 73 74 20 6f 66 20 61 6c 6c 20 70 61 72 65  list of all pare
135c0 6e 74 73 20 66 6f 72 20 63 68 69 6c 64 20 54 61  nts for child Ta
135d0 62 6c 65 20 58 20 69 73 20 68 65 6c 64 20 61 74  ble X is held at
135e0 20 58 2e 70 46 4b 65 79 2e 0a 2a 2a 0a 2a 2a 20   X.pFKey..**.** 
135f0 41 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 63 68  A list of all ch
13600 69 6c 64 72 65 6e 20 66 6f 72 20 61 20 74 61 62  ildren for a tab
13610 6c 65 20 6e 61 6d 65 64 20 5a 20 28 77 68 69 63  le named Z (whic
13620 68 20 6d 69 67 68 74 20 6e 6f 74 20 65 76 65 6e  h might not even
13630 20 65 78 69 73 74 29 0a 2a 2a 20 69 73 20 68 65   exist).** is he
13640 6c 64 20 69 6e 20 53 63 68 65 6d 61 2e 66 6b 65  ld in Schema.fke
13650 79 48 61 73 68 20 77 69 74 68 20 61 20 68 61 73  yHash with a has
13660 68 20 6b 65 79 20 6f 66 20 5a 2e 0a 2a 2f 0a 73  h key of Z..*/.s
13670 74 72 75 63 74 20 46 4b 65 79 20 7b 0a 20 20 54  truct FKey {.  T
13680 61 62 6c 65 20 2a 70 46 72 6f 6d 3b 20 20 20 20  able *pFrom;    
13690 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6e 74 61 69   /* Table contai
136a0 6e 69 6e 67 20 74 68 65 20 52 45 46 45 52 45 4e  ning the REFEREN
136b0 43 45 53 20 63 6c 61 75 73 65 20 28 61 6b 61 3a  CES clause (aka:
136c0 20 43 68 69 6c 64 29 20 2a 2f 0a 20 20 46 4b 65   Child) */.  FKe
136d0 79 20 2a 70 4e 65 78 74 46 72 6f 6d 3b 20 20 2f  y *pNextFrom;  /
136e0 2a 20 4e 65 78 74 20 46 4b 65 79 20 77 69 74 68  * Next FKey with
136f0 20 74 68 65 20 73 61 6d 65 20 69 6e 20 70 46 72   the same in pFr
13700 6f 6d 2e 20 4e 65 78 74 20 70 61 72 65 6e 74 20  om. Next parent 
13710 6f 66 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 63 68  of pFrom */.  ch
13720 61 72 20 2a 7a 54 6f 3b 20 20 20 20 20 20 20 20  ar *zTo;        
13730 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 61 62 6c 65  /* Name of table
13740 20 74 68 61 74 20 74 68 65 20 6b 65 79 20 70 6f   that the key po
13750 69 6e 74 73 20 74 6f 20 28 61 6b 61 3a 20 50 61  ints to (aka: Pa
13760 72 65 6e 74 29 20 2a 2f 0a 20 20 46 4b 65 79 20  rent) */.  FKey 
13770 2a 70 4e 65 78 74 54 6f 3b 20 20 20 20 2f 2a 20  *pNextTo;    /* 
13780 4e 65 78 74 20 77 69 74 68 20 74 68 65 20 73 61  Next with the sa
13790 6d 65 20 7a 54 6f 2e 20 4e 65 78 74 20 63 68 69  me zTo. Next chi
137a0 6c 64 20 6f 66 20 7a 54 6f 2e 20 2a 2f 0a 20 20  ld of zTo. */.  
137b0 46 4b 65 79 20 2a 70 50 72 65 76 54 6f 3b 20 20  FKey *pPrevTo;  
137c0 20 20 2f 2a 20 50 72 65 76 69 6f 75 73 20 77 69    /* Previous wi
137d0 74 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 20  th the same zTo 
137e0 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b 20 20  */.  int nCol;  
137f0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
13800 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
13810 68 69 73 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20  his key */.  /* 
13820 45 56 3a 20 52 2d 33 30 33 32 33 2d 32 31 39 31  EV: R-30323-2191
13830 37 20 2a 2f 0a 20 20 75 38 20 69 73 44 65 66 65  7 */.  u8 isDefe
13840 72 72 65 64 3b 20 20 20 20 20 20 20 2f 2a 20 54  rred;       /* T
13850 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e  rue if constrain
13860 74 20 63 68 65 63 6b 69 6e 67 20 69 73 20 64 65  t checking is de
13870 66 65 72 72 65 64 20 74 69 6c 6c 20 43 4f 4d 4d  ferred till COMM
13880 49 54 20 2a 2f 0a 20 20 75 38 20 61 41 63 74 69  IT */.  u8 aActi
13890 6f 6e 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a  on[2];        /*
138a0 20 4f 4e 20 44 45 4c 45 54 45 20 61 6e 64 20 4f   ON DELETE and O
138b0 4e 20 55 50 44 41 54 45 20 61 63 74 69 6f 6e 73  N UPDATE actions
138c0 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 20 2a  , respectively *
138d0 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 61 70 54  /.  Trigger *apT
138e0 72 69 67 67 65 72 5b 32 5d 3b 2f 2a 20 54 72 69  rigger[2];/* Tri
138f0 67 67 65 72 73 20 66 6f 72 20 61 41 63 74 69 6f  ggers for aActio
13900 6e 5b 5d 20 61 63 74 69 6f 6e 73 20 2a 2f 0a 20  n[] actions */. 
13910 20 73 74 72 75 63 74 20 73 43 6f 6c 4d 61 70 20   struct sColMap 
13920 7b 20 20 20 20 20 20 2f 2a 20 4d 61 70 70 69 6e  {      /* Mappin
13930 67 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  g of columns in 
13940 70 46 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73  pFrom to columns
13950 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20 20 69   in zTo */.    i
13960 6e 74 20 69 46 72 6f 6d 3b 20 20 20 20 20 20 20  nt iFrom;       
13970 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66       /* Index of
13980 20 63 6f 6c 75 6d 6e 20 69 6e 20 70 46 72 6f 6d   column in pFrom
13990 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 43   */.    char *zC
139a0 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ol;           /*
139b0 20 4e 61 6d 65 20 6f 66 20 63 6f 6c 75 6d 6e 20   Name of column 
139c0 69 6e 20 7a 54 6f 2e 20 20 49 66 20 4e 55 4c 4c  in zTo.  If NULL
139d0 20 75 73 65 20 50 52 49 4d 41 52 59 20 4b 45 59   use PRIMARY KEY
139e0 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31 5d 3b   */.  } aCol[1];
139f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
13a00 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63  ne entry for eac
13a10 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e  h of nCol column
13a20 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53  s */.};../*.** S
13a30 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 6d  QLite supports m
13a40 61 6e 79 20 64 69 66 66 65 72 65 6e 74 20 77 61  any different wa
13a50 79 73 20 74 6f 20 72 65 73 6f 6c 76 65 20 61 20  ys to resolve a 
13a60 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72  constraint.** er
13a70 72 6f 72 2e 20 20 52 4f 4c 4c 42 41 43 4b 20 70  ror.  ROLLBACK p
13a80 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20  rocessing means 
13a90 74 68 61 74 20 61 20 63 6f 6e 73 74 72 61 69 6e  that a constrain
13aa0 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20 63  t violation.** c
13ab0 61 75 73 65 73 20 74 68 65 20 6f 70 65 72 61 74  auses the operat
13ac0 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 20 74  ion in process t
13ad0 6f 20 66 61 69 6c 20 61 6e 64 20 66 6f 72 20 74  o fail and for t
13ae0 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73  he current trans
13af0 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20  action.** to be 
13b00 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 41 42  rolled back.  AB
13b10 4f 52 54 20 70 72 6f 63 65 73 73 69 6e 67 20 6d  ORT processing m
13b20 65 61 6e 73 20 74 68 65 20 6f 70 65 72 61 74 69  eans the operati
13b30 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 0a 2a 2a  on in process.**
13b40 20 66 61 69 6c 73 20 61 6e 64 20 61 6e 79 20 70   fails and any p
13b50 72 69 6f 72 20 63 68 61 6e 67 65 73 20 66 72 6f  rior changes fro
13b60 6d 20 74 68 61 74 20 6f 6e 65 20 6f 70 65 72 61  m that one opera
13b70 74 69 6f 6e 20 61 72 65 20 62 61 63 6b 65 64 20  tion are backed 
13b80 6f 75 74 2c 0a 2a 2a 20 62 75 74 20 74 68 65 20  out,.** but the 
13b90 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e  transaction is n
13ba0 6f 74 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20  ot rolled back. 
13bb0 20 46 41 49 4c 20 70 72 6f 63 65 73 73 69 6e 67   FAIL processing
13bc0 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a 2a 20 74   means that.** t
13bd0 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20  he operation in 
13be0 70 72 6f 67 72 65 73 73 20 73 74 6f 70 73 20 61  progress stops a
13bf0 6e 64 20 72 65 74 75 72 6e 73 20 61 6e 20 65 72  nd returns an er
13c00 72 6f 72 20 63 6f 64 65 2e 20 20 42 75 74 20 70  ror code.  But p
13c10 72 69 6f 72 0a 2a 2a 20 63 68 61 6e 67 65 73 20  rior.** changes 
13c20 64 75 65 20 74 6f 20 74 68 65 20 73 61 6d 65 20  due to the same 
13c30 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20 6e 6f  operation are no
13c40 74 20 62 61 63 6b 65 64 20 6f 75 74 20 61 6e 64  t backed out and
13c50 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20   no rollback.** 
13c60 6f 63 63 75 72 73 2e 20 20 49 47 4e 4f 52 45 20  occurs.  IGNORE 
13c70 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 70  means that the p
13c80 61 72 74 69 63 75 6c 61 72 20 72 6f 77 20 74 68  articular row th
13c90 61 74 20 63 61 75 73 65 64 20 74 68 65 20 63 6f  at caused the co
13ca0 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f  nstraint.** erro
13cb0 72 20 69 73 20 6e 6f 74 20 69 6e 73 65 72 74 65  r is not inserte
13cc0 64 20 6f 72 20 75 70 64 61 74 65 64 2e 20 20 50  d or updated.  P
13cd0 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e  rocessing contin
13ce0 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72  ues and no error
13cf0 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65 64 2e  .** is returned.
13d00 20 20 52 45 50 4c 41 43 45 20 6d 65 61 6e 73 20    REPLACE means 
13d10 74 68 61 74 20 70 72 65 65 78 69 73 74 69 6e 67  that preexisting
13d20 20 64 61 74 61 62 61 73 65 20 72 6f 77 73 20 74   database rows t
13d30 68 61 74 20 63 61 75 73 65 64 0a 2a 2a 20 61 20  hat caused.** a 
13d40 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
13d50 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20  t violation are 
13d60 72 65 6d 6f 76 65 64 20 73 6f 20 74 68 61 74 20  removed so that 
13d70 74 68 65 20 6e 65 77 20 69 6e 73 65 72 74 20 6f  the new insert o
13d80 72 0a 2a 2a 20 75 70 64 61 74 65 20 63 61 6e 20  r.** update can 
13d90 70 72 6f 63 65 65 64 2e 20 20 50 72 6f 63 65 73  proceed.  Proces
13da0 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61  sing continues a
13db0 6e 64 20 6e 6f 20 65 72 72 6f 72 20 69 73 20 72  nd no error is r
13dc0 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 52  eported..**.** R
13dd0 45 53 54 52 49 43 54 2c 20 53 45 54 4e 55 4c 4c  ESTRICT, SETNULL
13de0 2c 20 61 6e 64 20 43 41 53 43 41 44 45 20 61 63  , and CASCADE ac
13df0 74 69 6f 6e 73 20 61 70 70 6c 79 20 6f 6e 6c 79  tions apply only
13e00 20 74 6f 20 66 6f 72 65 69 67 6e 20 6b 65 79 73   to foreign keys
13e10 2e 0a 2a 2a 20 52 45 53 54 52 49 43 54 20 69 73  ..** RESTRICT is
13e20 20 74 68 65 20 73 61 6d 65 20 61 73 20 41 42 4f   the same as ABO
13e30 52 54 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45  RT for IMMEDIATE
13e40 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 6e   foreign keys an
13e50 64 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20 61 73  d the.** same as
13e60 20 52 4f 4c 4c 42 41 43 4b 20 66 6f 72 20 44 45   ROLLBACK for DE
13e70 46 45 52 52 45 44 20 6b 65 79 73 2e 20 20 53 45  FERRED keys.  SE
13e80 54 4e 55 4c 4c 20 6d 65 61 6e 73 20 74 68 61 74  TNULL means that
13e90 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20   the foreign.** 
13ea0 6b 65 79 20 69 73 20 73 65 74 20 74 6f 20 4e 55  key is set to NU
13eb0 4c 4c 2e 20 20 43 41 53 43 41 44 45 20 6d 65 61  LL.  CASCADE mea
13ec0 6e 73 20 74 68 61 74 20 61 20 44 45 4c 45 54 45  ns that a DELETE
13ed0 20 6f 72 20 55 50 44 41 54 45 20 6f 66 20 74 68   or UPDATE of th
13ee0 65 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 64 20  e.** referenced 
13ef0 74 61 62 6c 65 20 72 6f 77 20 69 73 20 70 72 6f  table row is pro
13f00 70 61 67 61 74 65 64 20 69 6e 74 6f 20 74 68 65  pagated into the
13f10 20 72 6f 77 20 74 68 61 74 20 68 6f 6c 64 73 20   row that holds 
13f20 74 68 65 0a 2a 2a 20 66 6f 72 65 69 67 6e 20 6b  the.** foreign k
13f30 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f  ey..**.** The fo
13f40 6c 6c 6f 77 69 6e 67 20 73 79 6d 62 6f 6c 69 63  llowing symbolic
13f50 20 76 61 6c 75 65 73 20 61 72 65 20 75 73 65 64   values are used
13f60 20 74 6f 20 72 65 63 6f 72 64 20 77 68 69 63 68   to record which
13f70 20 74 79 70 65 0a 2a 2a 20 6f 66 20 61 63 74 69   type.** of acti
13f80 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a 23  on to take..*/.#
13f90 64 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20 20  define OE_None  
13fa0 20 20 20 30 20 20 20 2f 2a 20 54 68 65 72 65 20     0   /* There 
13fb0 69 73 20 6e 6f 20 63 6f 6e 73 74 72 61 69 6e 74  is no constraint
13fc0 20 74 6f 20 63 68 65 63 6b 20 2a 2f 0a 23 64 65   to check */.#de
13fd0 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b  fine OE_Rollback
13fe0 20 31 20 20 20 2f 2a 20 46 61 69 6c 20 74 68 65   1   /* Fail the
13ff0 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64 20 72   operation and r
14000 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e  ollback the tran
14010 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  saction */.#defi
14020 6e 65 20 4f 45 5f 41 62 6f 72 74 20 20 20 20 32  ne OE_Abort    2
14030 20 20 20 2f 2a 20 42 61 63 6b 20 6f 75 74 20 63     /* Back out c
14040 68 61 6e 67 65 73 20 62 75 74 20 64 6f 20 6e 6f  hanges but do no
14050 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61   rollback transa
14060 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
14070 20 4f 45 5f 46 61 69 6c 20 20 20 20 20 33 20 20   OE_Fail     3  
14080 20 2f 2a 20 53 74 6f 70 20 74 68 65 20 6f 70 65   /* Stop the ope
14090 72 61 74 69 6f 6e 20 62 75 74 20 6c 65 61 76 65  ration but leave
140a0 20 61 6c 6c 20 70 72 69 6f 72 20 63 68 61 6e 67   all prior chang
140b0 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  es */.#define OE
140c0 5f 49 67 6e 6f 72 65 20 20 20 34 20 20 20 2f 2a  _Ignore   4   /*
140d0 20 49 67 6e 6f 72 65 20 74 68 65 20 65 72 72 6f   Ignore the erro
140e0 72 2e 20 44 6f 20 6e 6f 74 20 64 6f 20 74 68 65  r. Do not do the
140f0 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54   INSERT or UPDAT
14100 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  E */.#define OE_
14110 52 65 70 6c 61 63 65 20 20 35 20 20 20 2f 2a 20  Replace  5   /* 
14120 44 65 6c 65 74 65 20 65 78 69 73 74 69 6e 67 20  Delete existing 
14130 72 65 63 6f 72 64 2c 20 74 68 65 6e 20 64 6f 20  record, then do 
14140 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54 45  INSERT or UPDATE
14150 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f   */..#define OE_
14160 52 65 73 74 72 69 63 74 20 36 20 20 20 2f 2a 20  Restrict 6   /* 
14170 4f 45 5f 41 62 6f 72 74 20 66 6f 72 20 49 4d 4d  OE_Abort for IMM
14180 45 44 49 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c 62  EDIATE, OE_Rollb
14190 61 63 6b 20 66 6f 72 20 44 45 46 45 52 52 45 44  ack for DEFERRED
141a0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53   */.#define OE_S
141b0 65 74 4e 75 6c 6c 20 20 37 20 20 20 2f 2a 20 53  etNull  7   /* S
141c0 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b  et the foreign k
141d0 65 79 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c 4c  ey value to NULL
141e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53   */.#define OE_S
141f0 65 74 44 66 6c 74 20 20 38 20 20 20 2f 2a 20 53  etDflt  8   /* S
14200 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b  et the foreign k
14210 65 79 20 76 61 6c 75 65 20 74 6f 20 69 74 73 20  ey value to its 
14220 64 65 66 61 75 6c 74 20 2a 2f 0a 23 64 65 66 69  default */.#defi
14230 6e 65 20 4f 45 5f 43 61 73 63 61 64 65 20 20 39  ne OE_Cascade  9
14240 20 20 20 2f 2a 20 43 61 73 63 61 64 65 20 74 68     /* Cascade th
14250 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 0a 23 64  e changes */..#d
14260 65 66 69 6e 65 20 4f 45 5f 44 65 66 61 75 6c 74  efine OE_Default
14270 20 20 31 30 20 20 2f 2a 20 44 6f 20 77 68 61 74    10  /* Do what
14280 65 76 65 72 20 74 68 65 20 64 65 66 61 75 6c 74  ever the default
14290 20 61 63 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a 0a   action is */...
142a0 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
142b0 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
142c0 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20  ng structure is 
142d0 70 61 73 73 65 64 20 61 73 20 74 68 65 20 66 69  passed as the fi
142e0 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20  rst.** argument 
142f0 74 6f 20 73 71 6c 69 74 65 33 56 64 62 65 4b 65  to sqlite3VdbeKe
14300 79 43 6f 6d 70 61 72 65 20 61 6e 64 20 69 73 20  yCompare and is 
14310 75 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c 20  used to control 
14320 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f  the.** compariso
14330 6e 20 6f 66 20 74 68 65 20 74 77 6f 20 69 6e 64  n of the two ind
14340 65 78 20 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a 20 4e  ex keys..**.** N
14350 6f 74 65 20 74 68 61 74 20 61 53 6f 72 74 4f 72  ote that aSortOr
14360 64 65 72 5b 5d 20 61 6e 64 20 61 43 6f 6c 6c 5b  der[] and aColl[
14370 5d 20 68 61 76 65 20 6e 46 69 65 6c 64 2b 31 20  ] have nField+1 
14380 73 6c 6f 74 73 2e 20 20 54 68 65 72 65 0a 2a 2a  slots.  There.**
14390 20 61 72 65 20 6e 46 69 65 6c 64 20 73 6c 6f 74   are nField slot
143a0 73 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e  s for the column
143b0 73 20 6f 66 20 61 6e 20 69 6e 64 65 78 20 74 68  s of an index th
143c0 65 6e 20 6f 6e 65 20 65 78 74 72 61 20 73 6c 6f  en one extra slo
143d0 74 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 6f 77  t.** for the row
143e0 69 64 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a  id at the end..*
143f0 2f 0a 73 74 72 75 63 74 20 4b 65 79 49 6e 66 6f  /.struct KeyInfo
14400 20 7b 0a 20 20 75 33 32 20 6e 52 65 66 3b 20 20   {.  u32 nRef;  
14410 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
14420 65 72 20 6f 66 20 72 65 66 65 72 65 6e 63 65 73  er of references
14430 20 74 6f 20 74 68 69 73 20 4b 65 79 49 6e 66 6f   to this KeyInfo
14440 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 75 38 20   object */.  u8 
14450 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  enc;            
14460 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e   /* Text encodin
14470 67 20 2d 20 6f 6e 65 20 6f 66 20 74 68 65 20 53  g - one of the S
14480 51 4c 49 54 45 5f 55 54 46 2a 20 76 61 6c 75 65  QLITE_UTF* value
14490 73 20 2a 2f 0a 20 20 75 31 36 20 6e 4b 65 79 46  s */.  u16 nKeyF
144a0 69 65 6c 64 3b 20 20 20 20 20 20 2f 2a 20 4e 75  ield;      /* Nu
144b0 6d 62 65 72 20 6f 66 20 6b 65 79 20 63 6f 6c 75  mber of key colu
144c0 6d 6e 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78  mns in the index
144d0 20 2a 2f 0a 20 20 75 31 36 20 6e 41 6c 6c 46 69   */.  u16 nAllFi
144e0 65 6c 64 3b 20 20 20 20 20 20 2f 2a 20 54 6f 74  eld;      /* Tot
144f0 61 6c 20 63 6f 6c 75 6d 6e 73 2c 20 69 6e 63 6c  al columns, incl
14500 75 64 69 6e 67 20 6b 65 79 20 70 6c 75 73 20 6f  uding key plus o
14510 74 68 65 72 73 20 2a 2f 0a 20 20 73 71 6c 69 74  thers */.  sqlit
14520 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f  e3 *db;        /
14530 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20 63  * The database c
14540 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 75  onnection */.  u
14550 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20  8 *aSortOrder;  
14560 20 20 20 2f 2a 20 53 6f 72 74 20 6f 72 64 65 72     /* Sort order
14570 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
14580 2e 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a  . */.  CollSeq *
14590 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20 43 6f  aColl[1];  /* Co
145a0 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
145b0 20 66 6f 72 20 65 61 63 68 20 74 65 72 6d 20 6f   for each term o
145c0 66 20 74 68 65 20 6b 65 79 20 2a 2f 0a 7d 3b 0a  f the key */.};.
145d0 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6f 62 6a 65  ./*.** This obje
145e0 63 74 20 68 6f 6c 64 73 20 61 20 72 65 63 6f 72  ct holds a recor
145f0 64 20 77 68 69 63 68 20 68 61 73 20 62 65 65 6e  d which has been
14600 20 70 61 72 73 65 64 20 6f 75 74 20 69 6e 74 6f   parsed out into
14610 20 69 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20 66   individual.** f
14620 69 65 6c 64 73 2c 20 66 6f 72 20 74 68 65 20 70  ields, for the p
14630 75 72 70 6f 73 65 73 20 6f 66 20 64 6f 69 6e 67  urposes of doing
14640 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a 2a   a comparison..*
14650 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64 20 69 73  *.** A record is
14660 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61 74 20   an object that 
14670 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20  contains one or 
14680 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f 66 20 64  more fields of d
14690 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72 64 73 20  ata..** Records 
146a0 61 72 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72  are used to stor
146b0 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  e the content of
146c0 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61 6e 64   a table row and
146d0 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65   to store.** the
146e0 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e 64 65 78   key of an index
146f0 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63 6f 64 69  .  A blob encodi
14700 6e 67 20 6f 66 20 61 20 72 65 63 6f 72 64 20 69  ng of a record i
14710 73 20 63 72 65 61 74 65 64 20 62 79 0a 2a 2a 20  s created by.** 
14720 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72  the OP_MakeRecor
14730 64 20 6f 70 63 6f 64 65 20 6f 66 20 74 68 65 20  d opcode of the 
14740 56 44 42 45 20 61 6e 64 20 69 73 20 64 69 73 61  VDBE and is disa
14750 73 73 65 6d 62 6c 65 64 20 62 79 20 74 68 65 0a  ssembled by the.
14760 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63  ** OP_Column opc
14770 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 69 6e  ode..**.** An in
14780 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f  stance of this o
14790 62 6a 65 63 74 20 73 65 72 76 65 73 20 61 73 20  bject serves as 
147a0 61 20 22 6b 65 79 22 20 66 6f 72 20 64 6f 69 6e  a "key" for doin
147b0 67 20 61 20 73 65 61 72 63 68 20 6f 6e 0a 2a 2a  g a search on.**
147c0 20 61 6e 20 69 6e 64 65 78 20 62 2b 74 72 65 65   an index b+tree
147d0 2e 20 54 68 65 20 67 6f 61 6c 20 6f 66 20 74 68  . The goal of th
147e0 65 20 73 65 61 72 63 68 20 69 73 20 74 6f 20 66  e search is to f
147f0 69 6e 64 20 74 68 65 20 65 6e 74 72 79 20 74 68  ind the entry th
14800 61 74 0a 2a 2a 20 69 73 20 63 6c 6f 73 65 64 20  at.** is closed 
14810 74 6f 20 74 68 65 20 6b 65 79 20 64 65 73 63 72  to the key descr
14820 69 62 65 64 20 62 79 20 74 68 69 73 20 6f 62 6a  ibed by this obj
14830 65 63 74 2e 20 20 54 68 69 73 20 6f 62 6a 65 63  ect.  This objec
14840 74 20 6d 69 67 68 74 20 68 6f 6c 64 0a 2a 2a 20  t might hold.** 
14850 6a 75 73 74 20 61 20 70 72 65 66 69 78 20 6f 66  just a prefix of
14860 20 74 68 65 20 6b 65 79 2e 20 20 54 68 65 20 6e   the key.  The n
14870 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20  umber of fields 
14880 69 73 20 67 69 76 65 6e 20 62 79 0a 2a 2a 20 70  is given by.** p
14890 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2e  KeyInfo->nField.
148a0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 31 20 61 6e  .**.** The r1 an
148b0 64 20 72 32 20 66 69 65 6c 64 73 20 61 72 65 20  d r2 fields are 
148c0 74 68 65 20 76 61 6c 75 65 73 20 74 6f 20 72 65  the values to re
148d0 74 75 72 6e 20 69 66 20 74 68 69 73 20 6b 65 79  turn if this key
148e0 20 69 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a   is less than.**
148f0 20 6f 72 20 67 72 65 61 74 65 72 20 74 68 61 6e   or greater than
14900 20 61 20 6b 65 79 20 69 6e 20 74 68 65 20 62 74   a key in the bt
14910 72 65 65 2c 20 72 65 73 70 65 63 74 69 76 65 6c  ree, respectivel
14920 79 2e 20 20 54 68 65 73 65 20 61 72 65 20 6e 6f  y.  These are no
14930 72 6d 61 6c 6c 79 0a 2a 2a 20 2d 31 20 61 6e 64  rmally.** -1 and
14940 20 2b 31 20 72 65 73 70 65 63 74 69 76 65 6c 79   +1 respectively
14950 2c 20 62 75 74 20 6d 69 67 68 74 20 62 65 20 69  , but might be i
14960 6e 76 65 72 74 65 64 20 74 6f 20 2b 31 20 61 6e  nverted to +1 an
14970 64 20 2d 31 20 69 66 20 74 68 65 20 62 2d 74 72  d -1 if the b-tr
14980 65 65 0a 2a 2a 20 69 73 20 69 6e 20 44 45 53 43  ee.** is in DESC
14990 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68   order..**.** Th
149a0 65 20 6b 65 79 20 63 6f 6d 70 61 72 69 73 6f 6e  e key comparison
149b0 20 66 75 6e 63 74 69 6f 6e 73 20 61 63 74 75 61   functions actua
149c0 6c 6c 79 20 72 65 74 75 72 6e 20 64 65 66 61 75  lly return defau
149d0 6c 74 5f 72 63 20 77 68 65 6e 20 74 68 65 79 20  lt_rc when they 
149e0 66 69 6e 64 0a 2a 2a 20 61 6e 20 65 71 75 61 6c  find.** an equal
149f0 73 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 64  s comparison.  d
14a00 65 66 61 75 6c 74 5f 72 63 20 63 61 6e 20 62 65  efault_rc can be
14a10 20 2d 31 2c 20 30 2c 20 6f 72 20 2b 31 2e 20 20   -1, 0, or +1.  
14a20 49 66 20 74 68 65 72 65 20 61 72 65 0a 2a 2a 20  If there are.** 
14a30 6d 75 6c 74 69 70 6c 65 20 65 6e 74 72 69 65 73  multiple entries
14a40 20 69 6e 20 74 68 65 20 62 2d 74 72 65 65 20 77   in the b-tree w
14a50 69 74 68 20 74 68 65 20 73 61 6d 65 20 6b 65 79  ith the same key
14a60 20 28 77 68 65 6e 20 6f 6e 6c 79 20 6c 6f 6f 6b   (when only look
14a70 69 6e 67 0a 2a 2a 20 61 74 20 74 68 65 20 66 69  ing.** at the fi
14a80 72 73 74 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46  rst pKeyInfo->nF
14a90 69 65 6c 64 73 2c 29 20 74 68 65 6e 20 64 65 66  ields,) then def
14aa0 61 75 6c 74 5f 72 63 20 63 61 6e 20 62 65 20 73  ault_rc can be s
14ab0 65 74 20 74 6f 20 2d 31 20 74 6f 0a 2a 2a 20 63  et to -1 to.** c
14ac0 61 75 73 65 20 74 68 65 20 73 65 61 72 63 68 20  ause the search 
14ad0 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61 73 74  to find the last
14ae0 20 6d 61 74 63 68 2c 20 6f 72 20 2b 31 20 74 6f   match, or +1 to
14af0 20 63 61 75 73 65 20 74 68 65 20 73 65 61 72 63   cause the searc
14b00 68 20 74 6f 0a 2a 2a 20 66 69 6e 64 20 74 68 65  h to.** find the
14b10 20 66 69 72 73 74 20 6d 61 74 63 68 2e 0a 2a 2a   first match..**
14b20 0a 2a 2a 20 54 68 65 20 6b 65 79 20 63 6f 6d 70  .** The key comp
14b30 61 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e 73  arison functions
14b40 20 77 69 6c 6c 20 73 65 74 20 65 71 53 65 65 6e   will set eqSeen
14b50 20 74 6f 20 74 72 75 65 20 69 66 20 74 68 65 79   to true if they
14b60 20 65 76 65 72 0a 2a 2a 20 67 65 74 20 61 6e 64   ever.** get and
14b70 20 65 71 75 61 6c 20 72 65 73 75 6c 74 73 20 77   equal results w
14b80 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 74 68  hen comparing th
14b90 69 73 20 73 74 72 75 63 74 75 72 65 20 74 6f 20  is structure to 
14ba0 61 20 62 2d 74 72 65 65 20 72 65 63 6f 72 64 2e  a b-tree record.
14bb0 0a 2a 2a 20 57 68 65 6e 20 64 65 66 61 75 6c 74  .** When default
14bc0 5f 72 63 21 3d 30 2c 20 74 68 65 20 73 65 61 72  _rc!=0, the sear
14bd0 63 68 20 6d 69 67 68 74 20 65 6e 64 20 75 70 20  ch might end up 
14be0 6f 6e 20 74 68 65 20 72 65 63 6f 72 64 20 69 6d  on the record im
14bf0 6d 65 64 69 61 74 65 6c 79 0a 2a 2a 20 62 65 66  mediately.** bef
14c00 6f 72 65 20 74 68 65 20 66 69 72 73 74 20 6d 61  ore the first ma
14c10 74 63 68 20 6f 72 20 69 6d 6d 65 64 69 61 74 65  tch or immediate
14c20 6c 79 20 61 66 74 65 72 20 74 68 65 20 6c 61 73  ly after the las
14c30 74 20 6d 61 74 63 68 2e 20 20 54 68 65 0a 2a 2a  t match.  The.**
14c40 20 65 71 53 65 65 6e 20 66 69 65 6c 64 20 77 69   eqSeen field wi
14c50 6c 6c 20 69 6e 64 69 63 61 74 65 20 77 68 65 74  ll indicate whet
14c60 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20 65 78  her or not an ex
14c70 61 63 74 20 6d 61 74 63 68 20 65 78 69 73 74 73  act match exists
14c80 20 69 6e 20 74 68 65 0a 2a 2a 20 62 2d 74 72 65   in the.** b-tre
14c90 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e 70  e..*/.struct Unp
14ca0 61 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20 20  ackedRecord {.  
14cb0 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66  KeyInfo *pKeyInf
14cc0 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e  o;  /* Collation
14cd0 20 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72 20   and sort-order 
14ce0 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20  information */. 
14cf0 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20 20   Mem *aMem;     
14d00 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 73 20 2a       /* Values *
14d10 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20  /.  u16 nField; 
14d20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
14d30 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  r of entries in 
14d40 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69 38 20  apMem[] */.  i8 
14d50 64 65 66 61 75 6c 74 5f 72 63 3b 20 20 20 20 20  default_rc;     
14d60 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20 72   /* Comparison r
14d70 65 73 75 6c 74 20 69 66 20 6b 65 79 73 20 61 72  esult if keys ar
14d80 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20 75 38 20  e equal */.  u8 
14d90 65 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20  errCode;        
14da0 20 2f 2a 20 45 72 72 6f 72 20 64 65 74 65 63 74   /* Error detect
14db0 65 64 20 62 79 20 78 52 65 63 6f 72 64 43 6f 6d  ed by xRecordCom
14dc0 70 61 72 65 20 28 43 4f 52 52 55 50 54 20 6f 72  pare (CORRUPT or
14dd0 20 4e 4f 4d 45 4d 29 20 2a 2f 0a 20 20 69 38 20   NOMEM) */.  i8 
14de0 72 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  r1;             
14df0 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74   /* Value to ret
14e00 75 72 6e 20 69 66 20 28 6c 68 73 20 3c 20 72 68  urn if (lhs < rh
14e10 73 29 20 2a 2f 0a 20 20 69 38 20 72 32 3b 20 20  s) */.  i8 r2;  
14e20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
14e30 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 69  alue to return i
14e40 66 20 28 6c 68 73 20 3e 20 72 68 73 29 20 2a 2f  f (lhs > rhs) */
14e50 0a 20 20 75 38 20 65 71 53 65 65 6e 3b 20 20 20  .  u8 eqSeen;   
14e60 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
14e70 66 20 61 6e 20 65 71 75 61 6c 69 74 79 20 63 6f  f an equality co
14e80 6d 70 61 72 69 73 6f 6e 20 68 61 73 20 62 65 65  mparison has bee
14e90 6e 20 73 65 65 6e 20 2a 2f 0a 7d 3b 0a 0a 0a 2f  n seen */.};.../
14ea0 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 69 6e  *.** Each SQL in
14eb0 64 65 78 20 69 73 20 72 65 70 72 65 73 65 6e 74  dex is represent
14ec0 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20  ed in memory by 
14ed0 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f  an.** instance o
14ee0 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
14ef0 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
14f00 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20   The columns of 
14f10 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 61  the table that a
14f20 72 65 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64  re to be indexed
14f30 20 61 72 65 20 64 65 73 63 72 69 62 65 64 0a 2a   are described.*
14f40 2a 20 62 79 20 74 68 65 20 61 69 43 6f 6c 75 6d  * by the aiColum
14f50 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20 74 68 69  n[] field of thi
14f60 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f  s structure.  Fo
14f70 72 20 65 78 61 6d 70 6c 65 2c 20 73 75 70 70 6f  r example, suppo
14f80 73 65 0a 2a 2a 20 77 65 20 68 61 76 65 20 74 68  se.** we have th
14f90 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c  e following tabl
14fa0 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a  e and index:.**.
14fb0 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 54 41  **     CREATE TA
14fc0 42 4c 45 20 45 78 31 28 63 31 20 69 6e 74 2c 20  BLE Ex1(c1 int, 
14fd0 63 32 20 69 6e 74 2c 20 63 33 20 74 65 78 74 29  c2 int, c3 text)
14fe0 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20  ;.**     CREATE 
14ff0 49 4e 44 45 58 20 45 78 32 20 4f 4e 20 45 78 31  INDEX Ex2 ON Ex1
15000 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49  (c3,c1);.**.** I
15010 6e 20 74 68 65 20 54 61 62 6c 65 20 73 74 72 75  n the Table stru
15020 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e 67  cture describing
15030 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65   Ex1, nCol==3 be
15040 63 61 75 73 65 20 74 68 65 72 65 20 61 72 65 0a  cause there are.
15050 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75 6d 6e 73  ** three columns
15060 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20   in the table.  
15070 49 6e 20 74 68 65 20 49 6e 64 65 78 20 73 74 72  In the Index str
15080 75 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e  ucture describin
15090 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c 75 6d  g.** Ex2, nColum
150a0 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20 6f 66 20  n==2 since 2 of 
150b0 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73 20 6f 66  the 3 columns of
150c0 20 45 78 31 20 61 72 65 20 69 6e 64 65 78 65 64   Ex1 are indexed
150d0 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f  ..** The value o
150e0 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73 20 7b 32  f aiColumn is {2
150f0 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b  , 0}.  aiColumn[
15100 30 5d 3d 3d 32 20 62 65 63 61 75 73 65 20 74 68  0]==2 because th
15110 65 0a 2a 2a 20 66 69 72 73 74 20 63 6f 6c 75 6d  e.** first colum
15120 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20  n to be indexed 
15130 28 63 33 29 20 68 61 73 20 61 6e 20 69 6e 64 65  (c3) has an inde
15140 78 20 6f 66 20 32 20 69 6e 20 45 78 31 2e 61 43  x of 2 in Ex1.aC
15150 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73 65 63  ol[]..** The sec
15160 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65  ond column to be
15170 20 69 6e 64 65 78 65 64 20 28 63 31 29 20 68 61   indexed (c1) ha
15180 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 30 20  s an index of 0 
15190 69 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b 5d  in.** Ex1.aCol[]
151a0 2c 20 68 65 6e 63 65 20 45 78 32 2e 61 69 43 6f  , hence Ex2.aiCo
151b0 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a  lumn[1]==0..**.*
151c0 2a 20 54 68 65 20 49 6e 64 65 78 2e 6f 6e 45 72  * The Index.onEr
151d0 72 6f 72 20 66 69 65 6c 64 20 64 65 74 65 72 6d  ror field determ
151e0 69 6e 65 73 20 77 68 65 74 68 65 72 20 6f 72 20  ines whether or 
151f0 6e 6f 74 20 74 68 65 20 69 6e 64 65 78 65 64 20  not the indexed 
15200 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74 20  columns.** must 
15210 62 65 20 75 6e 69 71 75 65 20 61 6e 64 20 77 68  be unique and wh
15220 61 74 20 74 6f 20 64 6f 20 69 66 20 74 68 65 79  at to do if they
15230 20 61 72 65 20 6e 6f 74 2e 20 20 57 68 65 6e 20   are not.  When 
15240 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f 45  Index.onError=OE
15250 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65 61  _None,.** it mea
15260 6e 73 20 74 68 69 73 20 69 73 20 6e 6f 74 20 61  ns this is not a
15270 20 75 6e 69 71 75 65 20 69 6e 64 65 78 2e 20 20   unique index.  
15280 4f 74 68 65 72 77 69 73 65 20 69 74 20 69 73 20  Otherwise it is 
15290 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 0a 2a  a unique index.*
152a0 2a 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20  * and the value 
152b0 6f 66 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72  of Index.onError
152c0 20 69 6e 64 69 63 61 74 65 20 74 68 65 20 77 68   indicate the wh
152d0 69 63 68 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  ich conflict res
152e0 6f 6c 75 74 69 6f 6e 0a 2a 2a 20 61 6c 67 6f 72  olution.** algor
152f0 69 74 68 6d 20 74 6f 20 65 6d 70 6c 6f 79 20 77  ithm to employ w
15300 68 65 6e 65 76 65 72 20 61 6e 20 61 74 74 65 6d  henever an attem
15310 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20 69 6e  pt is made to in
15320 73 65 72 74 20 61 20 6e 6f 6e 2d 75 6e 69 71 75  sert a non-uniqu
15330 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2a  e.** element..**
15340 0a 2a 2a 20 57 68 69 6c 65 20 70 61 72 73 69 6e  .** While parsin
15350 67 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45  g a CREATE TABLE
15360 20 6f 72 20 43 52 45 41 54 45 20 49 4e 44 45 58   or CREATE INDEX
15370 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 20 6f 72   statement in or
15380 64 65 72 20 74 6f 0a 2a 2a 20 67 65 6e 65 72 61  der to.** genera
15390 74 65 20 56 44 42 45 20 63 6f 64 65 20 28 61 73  te VDBE code (as
153a0 20 6f 70 70 6f 73 65 64 20 74 6f 20 70 61 72 73   opposed to pars
153b0 69 6e 67 20 6f 6e 65 20 72 65 61 64 20 66 72 6f  ing one read fro
153c0 6d 20 61 6e 20 73 71 6c 69 74 65 5f 6d 61 73 74  m an sqlite_mast
153d0 65 72 0a 2a 2a 20 74 61 62 6c 65 20 61 73 20 70  er.** table as p
153e0 61 72 74 20 6f 66 20 70 61 72 73 69 6e 67 20 61  art of parsing a
153f0 6e 20 65 78 69 73 74 69 6e 67 20 64 61 74 61 62  n existing datab
15400 61 73 65 20 73 63 68 65 6d 61 29 2c 20 74 72 61  ase schema), tra
15410 6e 73 69 65 6e 74 20 69 6e 73 74 61 6e 63 65 73  nsient instances
15420 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75  .** of this stru
15430 63 74 75 72 65 20 6d 61 79 20 62 65 20 63 72 65  cture may be cre
15440 61 74 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61  ated. In this ca
15450 73 65 20 74 68 65 20 49 6e 64 65 78 2e 74 6e 75  se the Index.tnu
15460 6d 20 76 61 72 69 61 62 6c 65 20 69 73 0a 2a 2a  m variable is.**
15470 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
15480 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 61 20  he address of a 
15490 56 44 42 45 20 69 6e 73 74 72 75 63 74 69 6f 6e  VDBE instruction
154a0 2c 20 6e 6f 74 20 61 20 64 61 74 61 62 61 73 65  , not a database
154b0 20 70 61 67 65 0a 2a 2a 20 6e 75 6d 62 65 72 20   page.** number 
154c0 28 69 74 20 63 61 6e 6e 6f 74 20 2d 20 74 68 65  (it cannot - the
154d0 20 64 61 74 61 62 61 73 65 20 70 61 67 65 20 69   database page i
154e0 73 20 6e 6f 74 20 61 6c 6c 6f 63 61 74 65 64 20  s not allocated 
154f0 75 6e 74 69 6c 20 74 68 65 20 56 44 42 45 0a 2a  until the VDBE.*
15500 2a 20 70 72 6f 67 72 61 6d 20 69 73 20 65 78 65  * program is exe
15510 63 75 74 65 64 29 2e 20 53 65 65 20 63 6f 6e 76  cuted). See conv
15520 65 72 74 54 6f 57 69 74 68 6f 75 74 52 6f 77 69  ertToWithoutRowi
15530 64 54 61 62 6c 65 28 29 20 66 6f 72 20 64 65 74  dTable() for det
15540 61 69 6c 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ails..*/.struct 
15550 49 6e 64 65 78 20 7b 0a 20 20 63 68 61 72 20 2a  Index {.  char *
15560 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
15570 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
15580 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 31  is index */.  i1
15590 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20 20 20  6 *aiColumn;    
155a0 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20         /* Which 
155b0 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64  columns are used
155c0 20 62 79 20 74 68 69 73 20 69 6e 64 65 78 2e 20   by this index. 
155d0 20 31 73 74 20 69 73 20 30 20 2a 2f 0a 20 20 4c   1st is 0 */.  L
155e0 6f 67 45 73 74 20 2a 61 69 52 6f 77 4c 6f 67 45  ogEst *aiRowLogE
155f0 73 74 3b 20 20 20 20 20 2f 2a 20 46 72 6f 6d 20  st;     /* From 
15600 41 4e 41 4c 59 5a 45 3a 20 45 73 74 2e 20 72 6f  ANALYZE: Est. ro
15610 77 73 20 73 65 6c 65 63 74 65 64 20 62 79 20 65  ws selected by e
15620 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  ach column */.  
15630 54 61 62 6c 65 20 2a 70 54 61 62 6c 65 3b 20 20  Table *pTable;  
15640 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
15650 53 51 4c 20 74 61 62 6c 65 20 62 65 69 6e 67 20  SQL table being 
15660 69 6e 64 65 78 65 64 20 2a 2f 0a 20 20 63 68 61  indexed */.  cha
15670 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20  r *zColAff;     
15680 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20        /* String 
15690 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66  defining the aff
156a0 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f  inity of each co
156b0 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20  lumn */.  Index 
156c0 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
156d0 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 69     /* The next i
156e0 6e 64 65 78 20 61 73 73 6f 63 69 61 74 65 64 20  ndex associated 
156f0 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 74 61  with the same ta
15700 62 6c 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  ble */.  Schema 
15710 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20  *pSchema;       
15720 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74    /* Schema cont
15730 61 69 6e 69 6e 67 20 74 68 69 73 20 69 6e 64 65  aining this inde
15740 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74  x */.  u8 *aSort
15750 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20  Order;          
15760 2f 2a 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  /* for each colu
15770 6d 6e 3a 20 54 72 75 65 3d 3d 44 45 53 43 2c 20  mn: True==DESC, 
15780 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a 20 20  False==ASC */.  
15790 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a 61 7a 43  const char **azC
157a0 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 41 72 72 61  oll;     /* Arra
157b0 79 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  y of collation s
157c0 65 71 75 65 6e 63 65 20 6e 61 6d 65 73 20 66 6f  equence names fo
157d0 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70  r index */.  Exp
157e0 72 20 2a 70 50 61 72 74 49 64 78 57 68 65 72 65  r *pPartIdxWhere
157f0 3b 20 20 20 20 20 2f 2a 20 57 48 45 52 45 20 63  ;     /* WHERE c
15800 6c 61 75 73 65 20 66 6f 72 20 70 61 72 74 69 61  lause for partia
15810 6c 20 69 6e 64 69 63 65 73 20 2a 2f 0a 20 20 45  l indices */.  E
15820 78 70 72 4c 69 73 74 20 2a 61 43 6f 6c 45 78 70  xprList *aColExp
15830 72 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d  r;      /* Colum
15840 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f  n expressions */
15850 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20  .  int tnum;    
15860 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
15870 42 20 50 61 67 65 20 63 6f 6e 74 61 69 6e 69 6e  B Page containin
15880 67 20 72 6f 6f 74 20 6f 66 20 74 68 69 73 20 69  g root of this i
15890 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f 67 45 73 74  ndex */.  LogEst
158a0 20 73 7a 49 64 78 52 6f 77 3b 20 20 20 20 20 20   szIdxRow;      
158b0 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
158c0 61 76 65 72 61 67 65 20 72 6f 77 20 73 69 7a 65  average row size
158d0 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75   in bytes */.  u
158e0 31 36 20 6e 4b 65 79 43 6f 6c 3b 20 20 20 20 20  16 nKeyCol;     
158f0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
15900 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72  r of columns for
15910 6d 69 6e 67 20 74 68 65 20 6b 65 79 20 2a 2f 0a  ming the key */.
15920 20 20 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20 20    u16 nColumn;  
15930 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
15940 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
15950 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 69 6e  stored in the in
15960 64 65 78 20 2a 2f 0a 20 20 75 38 20 6f 6e 45 72  dex */.  u8 onEr
15970 72 6f 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  ror;            
15980 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c 20 4f    /* OE_Abort, O
15990 45 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f 52 65 70  E_Ignore, OE_Rep
159a0 6c 61 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65  lace, or OE_None
159b0 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
159c0 64 78 54 79 70 65 3a 32 3b 20 20 20 20 20 20 2f  dxType:2;      /
159d0 2a 20 31 3d 3d 55 4e 49 51 55 45 2c 20 32 3d 3d  * 1==UNIQUE, 2==
159e0 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 30 3d 3d  PRIMARY KEY, 0==
159f0 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a  CREATE INDEX */.
15a00 20 20 75 6e 73 69 67 6e 65 64 20 62 55 6e 6f 72    unsigned bUnor
15a10 64 65 72 65 64 3a 31 3b 20 20 20 2f 2a 20 55 73  dered:1;   /* Us
15a20 65 20 74 68 69 73 20 69 6e 64 65 78 20 66 6f 72  e this index for
15a30 20 3d 3d 20 6f 72 20 49 4e 20 71 75 65 72 69 65   == or IN querie
15a40 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e 73 69  s only */.  unsi
15a50 67 6e 65 64 20 75 6e 69 71 4e 6f 74 4e 75 6c 6c  gned uniqNotNull
15a60 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20  :1;  /* True if 
15a70 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e  UNIQUE and NOT N
15a80 55 4c 4c 20 66 6f 72 20 61 6c 6c 20 63 6f 6c 75  ULL for all colu
15a90 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  mns */.  unsigne
15aa0 64 20 69 73 52 65 73 69 7a 65 64 3a 31 3b 20 20  d isResized:1;  
15ab0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73    /* True if res
15ac0 69 7a 65 49 6e 64 65 78 4f 62 6a 65 63 74 28 29  izeIndexObject()
15ad0 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64   has been called
15ae0 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
15af0 73 43 6f 76 65 72 69 6e 67 3a 31 3b 20 20 20 2f  sCovering:1;   /
15b00 2a 20 54 72 75 65 20 69 66 20 74 68 69 73 20 69  * True if this i
15b10 73 20 61 20 63 6f 76 65 72 69 6e 67 20 69 6e 64  s a covering ind
15b20 65 78 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ex */.  unsigned
15b30 20 6e 6f 53 6b 69 70 53 63 61 6e 3a 31 3b 20 20   noSkipScan:1;  
15b40 20 2f 2a 20 44 6f 20 6e 6f 74 20 74 72 79 20 74   /* Do not try t
15b50 6f 20 75 73 65 20 73 6b 69 70 2d 73 63 61 6e 20  o use skip-scan 
15b60 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 6e 73  if true */.  uns
15b70 69 67 6e 65 64 20 68 61 73 53 74 61 74 31 3a 31  igned hasStat1:1
15b80 3b 20 20 20 20 20 2f 2a 20 61 69 52 6f 77 4c 6f  ;     /* aiRowLo
15b90 67 45 73 74 20 76 61 6c 75 65 73 20 63 6f 6d 65  gEst values come
15ba0 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61   from sqlite_sta
15bb0 74 31 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  t1 */.#ifdef SQL
15bc0 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
15bd0 5f 4f 52 5f 53 54 41 54 34 0a 20 20 69 6e 74 20  _OR_STAT4.  int 
15be0 6e 53 61 6d 70 6c 65 3b 20 20 20 20 20 20 20 20  nSample;        
15bf0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
15c00 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 61 53  f elements in aS
15c10 61 6d 70 6c 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74  ample[] */.  int
15c20 20 6e 53 61 6d 70 6c 65 43 6f 6c 3b 20 20 20 20   nSampleCol;    
15c30 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
15c40 20 49 6e 64 65 78 53 61 6d 70 6c 65 2e 61 6e 45   IndexSample.anE
15c50 71 5b 5d 20 61 6e 64 20 73 6f 20 6f 6e 20 2a 2f  q[] and so on */
15c60 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 41 76 67  .  tRowcnt *aAvg
15c70 45 71 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  Eq;         /* A
15c80 76 65 72 61 67 65 20 6e 45 71 20 76 61 6c 75 65  verage nEq value
15c90 73 20 66 6f 72 20 6b 65 79 73 20 6e 6f 74 20 69  s for keys not i
15ca0 6e 20 61 53 61 6d 70 6c 65 20 2a 2f 0a 20 20 49  n aSample */.  I
15cb0 6e 64 65 78 53 61 6d 70 6c 65 20 2a 61 53 61 6d  ndexSample *aSam
15cc0 70 6c 65 3b 20 20 20 20 2f 2a 20 53 61 6d 70 6c  ple;    /* Sampl
15cd0 65 73 20 6f 66 20 74 68 65 20 6c 65 66 74 2d 6d  es of the left-m
15ce0 6f 73 74 20 6b 65 79 20 2a 2f 0a 20 20 74 52 6f  ost key */.  tRo
15cf0 77 63 6e 74 20 2a 61 69 52 6f 77 45 73 74 3b 20  wcnt *aiRowEst; 
15d00 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67        /* Non-log
15d10 61 72 69 74 68 6d 69 63 20 73 74 61 74 31 20 64  arithmic stat1 d
15d20 61 74 61 20 66 6f 72 20 74 68 69 73 20 69 6e 64  ata for this ind
15d30 65 78 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20  ex */.  tRowcnt 
15d40 6e 52 6f 77 45 73 74 30 3b 20 20 20 20 20 20 20  nRowEst0;       
15d50 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68   /* Non-logarith
15d60 6d 69 63 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  mic number of ro
15d70 77 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20  ws in the index 
15d80 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a  */.#endif.};../*
15d90 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
15da0 65 73 20 66 6f 72 20 49 6e 64 65 78 2e 69 64 78  es for Index.idx
15db0 54 79 70 65 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  Type.*/.#define 
15dc0 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 41  SQLITE_IDXTYPE_A
15dd0 50 50 44 45 46 20 20 20 20 20 20 30 20 20 20 2f  PPDEF      0   /
15de0 2a 20 43 72 65 61 74 65 64 20 75 73 69 6e 67 20  * Created using 
15df0 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a  CREATE INDEX */.
15e00 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
15e10 44 58 54 59 50 45 5f 55 4e 49 51 55 45 20 20 20  DXTYPE_UNIQUE   
15e20 20 20 20 31 20 20 20 2f 2a 20 49 6d 70 6c 65 6d     1   /* Implem
15e30 65 6e 74 73 20 61 20 55 4e 49 51 55 45 20 63 6f  ents a UNIQUE co
15e40 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66  nstraint */.#def
15e50 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59  ine SQLITE_IDXTY
15e60 50 45 5f 50 52 49 4d 41 52 59 4b 45 59 20 20 32  PE_PRIMARYKEY  2
15e70 20 20 20 2f 2a 20 49 73 20 74 68 65 20 50 52 49     /* Is the PRI
15e80 4d 41 52 59 20 4b 45 59 20 66 6f 72 20 74 68 65  MARY KEY for the
15e90 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 20 52 65   table */../* Re
15ea0 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64  turn true if ind
15eb0 65 78 20 58 20 69 73 20 61 20 50 52 49 4d 41 52  ex X is a PRIMAR
15ec0 59 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f 0a 23  Y KEY index */.#
15ed0 64 65 66 69 6e 65 20 49 73 50 72 69 6d 61 72 79  define IsPrimary
15ee0 4b 65 79 49 6e 64 65 78 28 58 29 20 20 28 28 58  KeyIndex(X)  ((X
15ef0 29 2d 3e 69 64 78 54 79 70 65 3d 3d 53 51 4c 49  )->idxType==SQLI
15f00 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d 41  TE_IDXTYPE_PRIMA
15f10 52 59 4b 45 59 29 0a 0a 2f 2a 20 52 65 74 75 72  RYKEY)../* Retur
15f20 6e 20 74 72 75 65 20 69 66 20 69 6e 64 65 78 20  n true if index 
15f30 58 20 69 73 20 61 20 55 4e 49 51 55 45 20 69 6e  X is a UNIQUE in
15f40 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  dex */.#define I
15f50 73 55 6e 69 71 75 65 49 6e 64 65 78 28 58 29 20  sUniqueIndex(X) 
15f60 20 20 20 20 20 28 28 58 29 2d 3e 6f 6e 45 72 72       ((X)->onErr
15f70 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f 2a  or!=OE_None)../*
15f80 20 54 68 65 20 49 6e 64 65 78 2e 61 69 43 6f 6c   The Index.aiCol
15f90 75 6d 6e 5b 5d 20 76 61 6c 75 65 73 20 61 72 65  umn[] values are
15fa0 20 6e 6f 72 6d 61 6c 6c 79 20 70 6f 73 69 74 69   normally positi
15fb0 76 65 20 69 6e 74 65 67 65 72 2e 20 20 42 75 74  ve integer.  But
15fc0 0a 2a 2a 20 74 68 65 72 65 20 61 72 65 20 73 6f  .** there are so
15fd0 6d 65 20 6e 65 67 61 74 69 76 65 20 76 61 6c 75  me negative valu
15fe0 65 73 20 74 68 61 74 20 68 61 76 65 20 73 70 65  es that have spe
15ff0 63 69 61 6c 20 6d 65 61 6e 69 6e 67 3a 0a 2a 2f  cial meaning:.*/
16000 0a 23 64 65 66 69 6e 65 20 58 4e 5f 52 4f 57 49  .#define XN_ROWI
16010 44 20 20 20 20 20 28 2d 31 29 20 20 20 20 20 2f  D     (-1)     /
16020 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e  * Indexed column
16030 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 2a 2f   is the rowid */
16040 0a 23 64 65 66 69 6e 65 20 58 4e 5f 45 58 50 52  .#define XN_EXPR
16050 20 20 20 20 20 20 28 2d 32 29 20 20 20 20 20 2f        (-2)     /
16060 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e  * Indexed column
16070 20 69 73 20 61 6e 20 65 78 70 72 65 73 73 69 6f   is an expressio
16080 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  n */../*.** Each
16090 20 73 61 6d 70 6c 65 20 73 74 6f 72 65 64 20 69   sample stored i
160a0 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  n the sqlite_sta
160b0 74 33 20 74 61 62 6c 65 20 69 73 20 72 65 70 72  t3 table is repr
160c0 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72  esented in memor
160d0 79 0a 2a 2a 20 75 73 69 6e 67 20 61 20 73 74 72  y.** using a str
160e0 75 63 74 75 72 65 20 6f 66 20 74 68 69 73 20 74  ucture of this t
160f0 79 70 65 2e 20 20 53 65 65 20 64 6f 63 75 6d 65  ype.  See docume
16100 6e 74 61 74 69 6f 6e 20 61 74 20 74 68 65 20 74  ntation at the t
16110 6f 70 20 6f 66 20 74 68 65 0a 2a 2a 20 61 6e 61  op of the.** ana
16120 6c 79 7a 65 2e 63 20 73 6f 75 72 63 65 20 66 69  lyze.c source fi
16130 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  le for additiona
16140 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
16150 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78 53 61  /.struct IndexSa
16160 6d 70 6c 65 20 7b 0a 20 20 76 6f 69 64 20 2a 70  mple {.  void *p
16170 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f  ;          /* Po
16180 69 6e 74 65 72 20 74 6f 20 73 61 6d 70 6c 65 64  inter to sampled
16190 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
161a0 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f   n;            /
161b0 2a 20 53 69 7a 65 20 6f 66 20 72 65 63 6f 72 64  * Size of record
161c0 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 74   in bytes */.  t
161d0 52 6f 77 63 6e 74 20 2a 61 6e 45 71 3b 20 20 20  Rowcnt *anEq;   
161e0 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20   /* Est. number 
161f0 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 74 68  of rows where th
16200 65 20 6b 65 79 20 65 71 75 61 6c 73 20 74 68 69  e key equals thi
16210 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52  s sample */.  tR
16220 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b 20 20 20 20  owcnt *anLt;    
16230 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f  /* Est. number o
16240 66 20 72 6f 77 73 20 77 68 65 72 65 20 6b 65 79  f rows where key
16250 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68   is less than th
16260 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74  is sample */.  t
16270 52 6f 77 63 6e 74 20 2a 61 6e 44 4c 74 3b 20 20  Rowcnt *anDLt;  
16280 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20   /* Est. number 
16290 6f 66 20 64 69 73 74 69 6e 63 74 20 6b 65 79 73  of distinct keys
162a0 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20   less than this 
162b0 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  sample */.};../*
162c0 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65 6e 20 63  .** Each token c
162d0 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20 74 68 65  oming out of the
162e0 20 6c 65 78 65 72 20 69 73 20 61 6e 20 69 6e 73   lexer is an ins
162f0 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68 69 73  tance of.** this
16300 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 6f 6b   structure.  Tok
16310 65 6e 73 20 61 72 65 20 61 6c 73 6f 20 75 73 65  ens are also use
16320 64 20 61 73 20 70 61 72 74 20 6f 66 20 61 6e 20  d as part of an 
16330 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a  expression..**.*
16340 2a 20 4e 6f 74 65 20 69 66 20 54 6f 6b 65 6e 2e  * Note if Token.
16350 7a 3d 3d 30 20 74 68 65 6e 20 54 6f 6b 65 6e 2e  z==0 then Token.
16360 64 79 6e 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20  dyn and Token.n 
16370 61 72 65 20 75 6e 64 65 66 69 6e 65 64 20 61 6e  are undefined an
16380 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e 74 61 69 6e  d.** may contain
16390 20 72 61 6e 64 6f 6d 20 76 61 6c 75 65 73 2e 20   random values. 
163a0 20 44 6f 20 6e 6f 74 20 6d 61 6b 65 20 61 6e 79   Do not make any
163b0 20 61 73 73 75 6d 70 74 69 6f 6e 73 20 61 62 6f   assumptions abo
163c0 75 74 20 54 6f 6b 65 6e 2e 64 79 6e 0a 2a 2a 20  ut Token.dyn.** 
163d0 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 77 68 65 6e  and Token.n when
163e0 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a 2f 0a   Token.z==0..*/.
163f0 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 7b 0a 20  struct Token {. 
16400 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b 20   const char *z; 
16410 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74      /* Text of t
16420 68 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74 20 4e  he token.  Not N
16430 55 4c 4c 2d 74 65 72 6d 69 6e 61 74 65 64 21 20  ULL-terminated! 
16440 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e  */.  unsigned in
16450 74 20 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d 62 65  t n;    /* Numbe
16460 72 20 6f 66 20 63 68 61 72 61 63 74 65 72 73 20  r of characters 
16470 69 6e 20 74 68 69 73 20 74 6f 6b 65 6e 20 2a 2f  in this token */
16480 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  .};../*.** An in
16490 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73  stance of this s
164a0 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e  tructure contain
164b0 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65  s information ne
164c0 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  eded to generate
164d0 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 61 20 53  .** code for a S
164e0 45 4c 45 43 54 20 74 68 61 74 20 63 6f 6e 74 61  ELECT that conta
164f0 69 6e 73 20 61 67 67 72 65 67 61 74 65 20 66 75  ins aggregate fu
16500 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49  nctions..**.** I
16510 66 20 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f 41 47  f Expr.op==TK_AG
16520 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b 5f 41  G_COLUMN or TK_A
16530 47 47 5f 46 55 4e 43 54 49 4f 4e 20 74 68 65 6e  GG_FUNCTION then
16540 20 45 78 70 72 2e 70 41 67 67 49 6e 66 6f 20 69   Expr.pAggInfo i
16550 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74  s a.** pointer t
16560 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  o this structure
16570 2e 20 20 54 68 65 20 45 78 70 72 2e 69 43 6f 6c  .  The Expr.iCol
16580 75 6d 6e 20 66 69 65 6c 64 20 69 73 20 74 68 65  umn field is the
16590 20 69 6e 64 65 78 20 69 6e 0a 2a 2a 20 41 67 67   index in.** Agg
165a0 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72 20 41  Info.aCol[] or A
165b0 67 67 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d 20 6f  ggInfo.aFunc[] o
165c0 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65  f information ne
165d0 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  eded to generate
165e0 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 74 68 61  .** code for tha
165f0 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 67  t node..**.** Ag
16600 67 49 6e 66 6f 2e 70 47 72 6f 75 70 42 79 20 61  gInfo.pGroupBy a
16610 6e 64 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63  nd AggInfo.aFunc
16620 2e 70 45 78 70 72 20 70 6f 69 6e 74 20 74 6f 20  .pExpr point to 
16630 66 69 65 6c 64 73 20 77 69 74 68 69 6e 20 74 68  fields within th
16640 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 53 65  e.** original Se
16650 6c 65 63 74 20 73 74 72 75 63 74 75 72 65 20 74  lect structure t
16660 68 61 74 20 64 65 73 63 72 69 62 65 73 20 74 68  hat describes th
16670 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
16680 6e 74 2e 20 20 54 68 65 73 65 0a 2a 2a 20 66 69  nt.  These.** fi
16690 65 6c 64 73 20 64 6f 20 6e 6f 74 20 6e 65 65 64  elds do not need
166a0 20 74 6f 20 62 65 20 66 72 65 65 64 20 77 68 65   to be freed whe
166b0 6e 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74  n deallocating t
166c0 68 65 20 41 67 67 49 6e 66 6f 20 73 74 72 75 63  he AggInfo struc
166d0 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ture..*/.struct 
166e0 41 67 67 49 6e 66 6f 20 7b 0a 20 20 75 38 20 64  AggInfo {.  u8 d
166f0 69 72 65 63 74 4d 6f 64 65 3b 20 20 20 20 20 20  irectMode;      
16700 20 20 20 20 2f 2a 20 44 69 72 65 63 74 20 72 65      /* Direct re
16710 6e 64 65 72 69 6e 67 20 6d 6f 64 65 20 6d 65 61  ndering mode mea
16720 6e 73 20 74 61 6b 65 20 64 61 74 61 20 64 69 72  ns take data dir
16730 65 63 74 6c 79 0a 20 20 20 20 20 20 20 20 20 20  ectly.          
16740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16750 2a 2a 20 66 72 6f 6d 20 73 6f 75 72 63 65 20 74  ** from source t
16760 61 62 6c 65 73 20 72 61 74 68 65 72 20 74 68 61  ables rather tha
16770 6e 20 66 72 6f 6d 20 61 63 63 75 6d 75 6c 61 74  n from accumulat
16780 6f 72 73 20 2a 2f 0a 20 20 75 38 20 75 73 65 53  ors */.  u8 useS
16790 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20  ortingIdx;      
167a0 20 2f 2a 20 49 6e 20 64 69 72 65 63 74 20 6d 6f   /* In direct mo
167b0 64 65 2c 20 72 65 66 65 72 65 6e 63 65 20 74 68  de, reference th
167c0 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20  e sorting index 
167d0 72 61 74 68 65 72 0a 20 20 20 20 20 20 20 20 20  rather.         
167e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167f0 20 2a 2a 20 74 68 61 6e 20 74 68 65 20 73 6f 75   ** than the sou
16800 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69  rce table */.  i
16810 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 3b 20 20  nt sortingIdx;  
16820 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72         /* Cursor
16830 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73   number of the s
16840 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a  orting index */.
16850 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78    int sortingIdx
16860 50 54 61 62 3b 20 20 20 20 20 2f 2a 20 43 75 72  PTab;     /* Cur
16870 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 70 73  sor number of ps
16880 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20 20  eudo-table */.  
16890 69 6e 74 20 6e 53 6f 72 74 69 6e 67 43 6f 6c 75  int nSortingColu
168a0 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  mn;     /* Numbe
168b0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
168c0 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  the sorting inde
168d0 78 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 67  x */.  int mnReg
168e0 2c 20 6d 78 52 65 67 3b 20 20 20 20 20 20 20 2f  , mxReg;       /
168f0 2a 20 52 61 6e 67 65 20 6f 66 20 72 65 67 69 73  * Range of regis
16900 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 66  ters allocated f
16910 6f 72 20 61 43 6f 6c 20 61 6e 64 20 61 46 75 6e  or aCol and aFun
16920 63 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  c */.  ExprList 
16930 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20 20 2f  *pGroupBy;     /
16940 2a 20 54 68 65 20 67 72 6f 75 70 20 62 79 20 63  * The group by c
16950 6c 61 75 73 65 20 2a 2f 0a 20 20 73 74 72 75 63  lause */.  struc
16960 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c 20 7b 20  t AggInfo_col { 
16970 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 63     /* For each c
16980 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e 20 73 6f  olumn used in so
16990 75 72 63 65 20 74 61 62 6c 65 73 20 2a 2f 0a 20  urce tables */. 
169a0 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20     Table *pTab; 
169b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
169c0 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
169d0 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20     int iTable;  
169e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
169f0 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
16a00 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65  the source table
16a10 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 6f 6c   */.    int iCol
16a20 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  umn;            
16a30 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65   /* Column numbe
16a40 72 20 77 69 74 68 69 6e 20 74 68 65 20 73 6f 75  r within the sou
16a50 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  rce table */.   
16a60 20 69 6e 74 20 69 53 6f 72 74 65 72 43 6f 6c 75   int iSorterColu
16a70 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c  mn;       /* Col
16a80 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 74 68  umn number in th
16a90 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20  e sorting index 
16aa0 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b  */.    int iMem;
16ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ac0 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69  /* Memory locati
16ad0 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61 73 20  on that acts as 
16ae0 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20  accumulator */. 
16af0 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20     Expr *pExpr; 
16b00 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
16b10 68 65 20 6f 72 69 67 69 6e 61 6c 20 65 78 70 72  he original expr
16b20 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20 2a 61  ession */.  } *a
16b30 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c 75  Col;.  int nColu
16b40 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  mn;            /
16b50 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 64  * Number of used
16b60 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f 6c   entries in aCol
16b70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 63 63  [] */.  int nAcc
16b80 75 6d 75 6c 61 74 6f 72 3b 20 20 20 20 20 20 20  umulator;       
16b90 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
16ba0 75 6d 6e 73 20 74 68 61 74 20 73 68 6f 77 20 74  umns that show t
16bb0 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6f 75  hrough to the ou
16bc0 74 70 75 74 2e 0a 20 20 20 20 20 20 20 20 20 20  tput..          
16bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16be0 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 63 6f  ** Additional co
16bf0 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20 6f  lumns are used o
16c00 6e 6c 79 20 61 73 20 70 61 72 61 6d 65 74 65 72  nly as parameter
16c10 73 20 74 6f 0a 20 20 20 20 20 20 20 20 20 20 20  s to.           
16c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
16c30 2a 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  * aggregate func
16c40 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63  tions */.  struc
16c50 74 20 41 67 67 49 6e 66 6f 5f 66 75 6e 63 20 7b  t AggInfo_func {
16c60 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 61     /* For each a
16c70 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
16c80 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70  n */.    Expr *p
16c90 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20  Expr;           
16ca0 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20    /* Expression 
16cb0 65 6e 63 6f 64 69 6e 67 20 74 68 65 20 66 75 6e  encoding the fun
16cc0 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 46 75 6e  ction */.    Fun
16cd0 63 44 65 66 20 2a 70 46 75 6e 63 3b 20 20 20 20  cDef *pFunc;    
16ce0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 67 67        /* The agg
16cf0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20  regate function 
16d00 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a  implementation *
16d10 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20  /.    int iMem; 
16d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
16d30 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f  * Memory locatio
16d40 6e 20 74 68 61 74 20 61 63 74 73 20 61 73 20 61  n that acts as a
16d50 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20  ccumulator */.  
16d60 20 20 69 6e 74 20 69 44 69 73 74 69 6e 63 74 3b    int iDistinct;
16d70 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 70             /* Ep
16d80 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 75 73  hemeral table us
16d90 65 64 20 74 6f 20 65 6e 66 6f 72 63 65 20 44 49  ed to enforce DI
16da0 53 54 49 4e 43 54 20 2a 2f 0a 20 20 7d 20 2a 61  STINCT */.  } *a
16db0 46 75 6e 63 3b 0a 20 20 69 6e 74 20 6e 46 75 6e  Func;.  int nFun
16dc0 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
16dd0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74  /* Number of ent
16de0 72 69 65 73 20 69 6e 20 61 46 75 6e 63 5b 5d 20  ries in aFunc[] 
16df0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
16e00 20 64 61 74 61 74 79 70 65 20 79 6e 56 61 72 20   datatype ynVar 
16e10 69 73 20 61 20 73 69 67 6e 65 64 20 69 6e 74 65  is a signed inte
16e20 67 65 72 2c 20 65 69 74 68 65 72 20 31 36 2d 62  ger, either 16-b
16e30 69 74 20 6f 72 20 33 32 2d 62 69 74 2e 0a 2a 2a  it or 32-bit..**
16e40 20 55 73 75 61 6c 6c 79 20 69 74 20 69 73 20 31   Usually it is 1
16e50 36 2d 62 69 74 73 2e 20 20 42 75 74 20 69 66 20  6-bits.  But if 
16e60 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41  SQLITE_MAX_VARIA
16e70 42 4c 45 5f 4e 55 4d 42 45 52 20 69 73 20 67 72  BLE_NUMBER is gr
16e80 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20 33 32  eater.** than 32
16e90 37 36 37 20 77 65 20 68 61 76 65 20 74 6f 20 6d  767 we have to m
16ea0 61 6b 65 20 69 74 20 33 32 2d 62 69 74 2e 20 20  ake it 32-bit.  
16eb0 31 36 2d 62 69 74 20 69 73 20 70 72 65 66 65 72  16-bit is prefer
16ec0 72 65 64 20 62 65 63 61 75 73 65 0a 2a 2a 20 69  red because.** i
16ed0 74 20 75 73 65 73 20 6c 65 73 73 20 6d 65 6d 6f  t uses less memo
16ee0 72 79 20 69 6e 20 74 68 65 20 45 78 70 72 20 6f  ry in the Expr o
16ef0 62 6a 65 63 74 2c 20 77 68 69 63 68 20 69 73 20  bject, which is 
16f00 61 20 62 69 67 20 6d 65 6d 6f 72 79 20 75 73 65  a big memory use
16f10 72 0a 2a 2a 20 69 6e 20 73 79 73 74 65 6d 73 20  r.** in systems 
16f20 77 69 74 68 20 6c 6f 74 73 20 6f 66 20 70 72 65  with lots of pre
16f30 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73  pared statements
16f40 2e 20 20 41 6e 64 20 66 65 77 20 61 70 70 6c 69  .  And few appli
16f50 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65 64 20  cations.** need 
16f60 6d 6f 72 65 20 74 68 61 6e 20 61 62 6f 75 74 20  more than about 
16f70 31 30 20 6f 72 20 32 30 20 76 61 72 69 61 62 6c  10 or 20 variabl
16f80 65 73 2e 20 20 42 75 74 20 73 6f 6d 65 20 65 78  es.  But some ex
16f90 74 72 65 6d 65 20 75 73 65 72 73 20 77 61 6e 74  treme users want
16fa0 0a 2a 2a 20 74 6f 20 68 61 76 65 20 70 72 65 70  .** to have prep
16fb0 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20  ared statements 
16fc0 77 69 74 68 20 6f 76 65 72 20 33 32 37 36 37 20  with over 32767 
16fd0 76 61 72 69 61 62 6c 65 73 2c 20 61 6e 64 20 66  variables, and f
16fe0 6f 72 20 74 68 65 6d 0a 2a 2a 20 74 68 65 20 6f  or them.** the o
16ff0 70 74 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62  ption is availab
17000 6c 65 20 28 61 74 20 63 6f 6d 70 69 6c 65 2d 74  le (at compile-t
17010 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c  ime)..*/.#if SQL
17020 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45  ITE_MAX_VARIABLE
17030 5f 4e 55 4d 42 45 52 3c 3d 33 32 37 36 37 0a 74  _NUMBER<=32767.t
17040 79 70 65 64 65 66 20 69 31 36 20 79 6e 56 61 72  ypedef i16 ynVar
17050 3b 0a 23 65 6c 73 65 0a 74 79 70 65 64 65 66 20  ;.#else.typedef 
17060 69 6e 74 20 79 6e 56 61 72 3b 0a 23 65 6e 64 69  int ynVar;.#endi
17070 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f  f../*.** Each no
17080 64 65 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73  de of an express
17090 69 6f 6e 20 69 6e 20 74 68 65 20 70 61 72 73 65  ion in the parse
170a0 20 74 72 65 65 20 69 73 20 61 6e 20 69 6e 73 74   tree is an inst
170b0 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20  ance.** of this 
170c0 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
170d0 20 45 78 70 72 2e 6f 70 20 69 73 20 74 68 65 20   Expr.op is the 
170e0 6f 70 63 6f 64 65 2e 20 54 68 65 20 69 6e 74 65  opcode. The inte
170f0 67 65 72 20 70 61 72 73 65 72 20 74 6f 6b 65 6e  ger parser token
17100 20 63 6f 64 65 73 20 61 72 65 20 72 65 75 73 65   codes are reuse
17110 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64 65 73 20  d.** as opcodes 
17120 68 65 72 65 2e 20 46 6f 72 20 65 78 61 6d 70 6c  here. For exampl
17130 65 2c 20 74 68 65 20 70 61 72 73 65 72 20 64 65  e, the parser de
17140 66 69 6e 65 73 20 54 4b 5f 47 45 20 74 6f 20 62  fines TK_GE to b
17150 65 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20  e an integer.** 
17160 63 6f 64 65 20 72 65 70 72 65 73 65 6e 74 69 6e  code representin
17170 67 20 74 68 65 20 22 3e 3d 22 20 6f 70 65 72 61  g the ">=" opera
17180 74 6f 72 2e 20 54 68 69 73 20 73 61 6d 65 20 69  tor. This same i
17190 6e 74 65 67 65 72 20 63 6f 64 65 20 69 73 20 72  nteger code is r
171a0 65 75 73 65 64 0a 2a 2a 20 74 6f 20 72 65 70 72  eused.** to repr
171b0 65 73 65 6e 74 20 74 68 65 20 67 72 65 61 74 65  esent the greate
171c0 72 2d 74 68 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d  r-than-or-equal-
171d0 74 6f 20 6f 70 65 72 61 74 6f 72 20 69 6e 20 74  to operator in t
171e0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 2a 2a  he expression.**
171f0 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   tree..**.** If 
17200 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
17210 73 20 61 6e 20 53 51 4c 20 6c 69 74 65 72 61 6c  s an SQL literal
17220 20 28 54 4b 5f 49 4e 54 45 47 45 52 2c 20 54 4b   (TK_INTEGER, TK
17230 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f 42 2c  _FLOAT, TK_BLOB,
17240 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52 49 4e 47  .** or TK_STRING
17250 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b  ), then Expr.tok
17260 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  en contains the 
17270 74 65 78 74 20 6f 66 20 74 68 65 20 53 51 4c 20  text of the SQL 
17280 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a 2a 20 74  literal. If.** t
17290 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
172a0 20 61 20 76 61 72 69 61 62 6c 65 20 28 54 4b 5f   a variable (TK_
172b0 56 41 52 49 41 42 4c 45 29 2c 20 74 68 65 6e 20  VARIABLE), then 
172c0 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61  Expr.token conta
172d0 69 6e 73 20 74 68 65 0a 2a 2a 20 76 61 72 69 61  ins the.** varia
172e0 62 6c 65 20 6e 61 6d 65 2e 20 46 69 6e 61 6c 6c  ble name. Finall
172f0 79 2c 20 69 66 20 74 68 65 20 65 78 70 72 65 73  y, if the expres
17300 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 66  sion is an SQL f
17310 75 6e 63 74 69 6f 6e 20 28 54 4b 5f 46 55 4e 43  unction (TK_FUNC
17320 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65 6e 20 45  TION),.** then E
17330 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69  xpr.token contai
17340 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  ns the name of t
17350 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a  he function..**.
17360 2a 2a 20 45 78 70 72 2e 70 52 69 67 68 74 20 61  ** Expr.pRight a
17370 6e 64 20 45 78 70 72 2e 70 4c 65 66 74 20 61 72  nd Expr.pLeft ar
17380 65 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72  e the left and r
17390 69 67 68 74 20 73 75 62 65 78 70 72 65 73 73 69  ight subexpressi
173a0 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20 62 69 6e 61  ons of a.** bina
173b0 72 79 20 6f 70 65 72 61 74 6f 72 2e 20 45 69 74  ry operator. Eit
173c0 68 65 72 20 6f 72 20 62 6f 74 68 20 6d 61 79 20  her or both may 
173d0 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45  be NULL..**.** E
173e0 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73 20 61  xpr.x.pList is a
173f0 20 6c 69 73 74 20 6f 66 20 61 72 67 75 6d 65 6e   list of argumen
17400 74 73 20 69 66 20 74 68 65 20 65 78 70 72 65 73  ts if the expres
17410 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 66  sion is an SQL f
17420 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61 20 43 41  unction,.** a CA
17430 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 72  SE expression or
17440 20 61 6e 20 49 4e 20 65 78 70 72 65 73 73 69 6f   an IN expressio
17450 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 3c  n of the form "<
17460 6c 68 73 3e 20 49 4e 20 28 3c 79 3e 2c 20 3c 7a  lhs> IN (<y>, <z
17470 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78 70 72 2e  >...)"..** Expr.
17480 78 2e 70 53 65 6c 65 63 74 20 69 73 20 75 73 65  x.pSelect is use
17490 64 20 69 66 20 74 68 65 20 65 78 70 72 65 73 73  d if the express
174a0 69 6f 6e 20 69 73 20 61 20 73 75 62 2d 73 65 6c  ion is a sub-sel
174b0 65 63 74 20 6f 72 20 61 6e 20 65 78 70 72 65 73  ect or an expres
174c0 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 66  sion of.** the f
174d0 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 53  orm "<lhs> IN (S
174e0 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 20 49 66 20  ELECT ...)". If 
174f0 74 68 65 20 45 50 5f 78 49 73 53 65 6c 65 63 74  the EP_xIsSelect
17500 20 62 69 74 20 69 73 20 73 65 74 20 69 6e 20 74   bit is set in t
17510 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73  he.** Expr.flags
17520 20 6d 61 73 6b 2c 20 74 68 65 6e 20 45 78 70 72   mask, then Expr
17530 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61  .x.pSelect is va
17540 6c 69 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  lid. Otherwise, 
17550 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73 0a  Expr.x.pList is.
17560 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20  ** valid..**.** 
17570 41 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66  An expression of
17580 20 74 68 65 20 66 6f 72 6d 20 49 44 20 6f 72 20   the form ID or 
17590 49 44 2e 49 44 20 72 65 66 65 72 73 20 74 6f 20  ID.ID refers to 
175a0 61 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 74 61  a column in a ta
175b0 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73 75 63 68  ble..** For such
175c0 20 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 45 78   expressions, Ex
175d0 70 72 2e 6f 70 20 69 73 20 73 65 74 20 74 6f 20  pr.op is set to 
175e0 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 45 78  TK_COLUMN and Ex
175f0 70 72 2e 69 54 61 62 6c 65 20 69 73 0a 2a 2a 20  pr.iTable is.** 
17600 74 68 65 20 69 6e 74 65 67 65 72 20 63 75 72 73  the integer curs
17610 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 61 20 56  or number of a V
17620 44 42 45 20 63 75 72 73 6f 72 20 70 6f 69 6e 74  DBE cursor point
17630 69 6e 67 20 74 6f 20 74 68 61 74 20 74 61 62 6c  ing to that tabl
17640 65 20 61 6e 64 0a 2a 2a 20 45 78 70 72 2e 69 43  e and.** Expr.iC
17650 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20 63 6f 6c  olumn is the col
17660 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74  umn number for t
17670 68 65 20 73 70 65 63 69 66 69 63 20 63 6f 6c 75  he specific colu
17680 6d 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 65  mn.  If the.** e
17690 78 70 72 65 73 73 69 6f 6e 20 69 73 20 75 73 65  xpression is use
176a0 64 20 61 73 20 61 20 72 65 73 75 6c 74 20 69 6e  d as a result in
176b0 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 53 45   an aggregate SE
176c0 4c 45 43 54 2c 20 74 68 65 6e 20 74 68 65 0a 2a  LECT, then the.*
176d0 2a 20 76 61 6c 75 65 20 69 73 20 61 6c 73 6f 20  * value is also 
176e0 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 45 78  stored in the Ex
176f0 70 72 2e 69 41 67 67 20 63 6f 6c 75 6d 6e 20 69  pr.iAgg column i
17700 6e 20 74 68 65 20 61 67 67 72 65 67 61 74 65 20  n the aggregate 
17710 73 6f 20 74 68 61 74 0a 2a 2a 20 69 74 20 63 61  so that.** it ca
17720 6e 20 62 65 20 61 63 63 65 73 73 65 64 20 61 66  n be accessed af
17730 74 65 72 20 61 6c 6c 20 61 67 67 72 65 67 61 74  ter all aggregat
17740 65 73 20 61 72 65 20 63 6f 6d 70 75 74 65 64 2e  es are computed.
17750 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78  .**.** If the ex
17760 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 75  pression is an u
17770 6e 62 6f 75 6e 64 20 76 61 72 69 61 62 6c 65 20  nbound variable 
17780 6d 61 72 6b 65 72 20 28 61 20 71 75 65 73 74 69  marker (a questi
17790 6f 6e 20 6d 61 72 6b 0a 2a 2a 20 63 68 61 72 61  on mark.** chara
177a0 63 74 65 72 20 27 3f 27 20 69 6e 20 74 68 65 20  cter '?' in the 
177b0 6f 72 69 67 69 6e 61 6c 20 53 51 4c 29 20 74 68  original SQL) th
177c0 65 6e 20 74 68 65 20 45 78 70 72 2e 69 54 61 62  en the Expr.iTab
177d0 6c 65 20 68 6f 6c 64 73 20 74 68 65 20 69 6e 64  le holds the ind
177e0 65 78 0a 2a 2a 20 6e 75 6d 62 65 72 20 66 6f 72  ex.** number for
177f0 20 74 68 61 74 20 76 61 72 69 61 62 6c 65 2e 0a   that variable..
17800 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70  **.** If the exp
17810 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62  ression is a sub
17820 71 75 65 72 79 20 74 68 65 6e 20 45 78 70 72 2e  query then Expr.
17830 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 6e  iColumn holds an
17840 20 69 6e 74 65 67 65 72 0a 2a 2a 20 72 65 67 69   integer.** regi
17850 73 74 65 72 20 6e 75 6d 62 65 72 20 63 6f 6e 74  ster number cont
17860 61 69 6e 69 6e 67 20 74 68 65 20 72 65 73 75 6c  aining the resul
17870 74 20 6f 66 20 74 68 65 20 73 75 62 71 75 65 72  t of the subquer
17880 79 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 73 75  y.  If the.** su
17890 62 71 75 65 72 79 20 67 69 76 65 73 20 61 20 63  bquery gives a c
178a0 6f 6e 73 74 61 6e 74 20 72 65 73 75 6c 74 2c 20  onstant result, 
178b0 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20 2d  then iTable is -
178c0 31 2e 20 20 49 66 20 74 68 65 20 73 75 62 71 75  1.  If the subqu
178d0 65 72 79 0a 2a 2a 20 67 69 76 65 73 20 61 20 64  ery.** gives a d
178e0 69 66 66 65 72 65 6e 74 20 61 6e 73 77 65 72 20  ifferent answer 
178f0 61 74 20 64 69 66 66 65 72 65 6e 74 20 74 69 6d  at different tim
17900 65 73 20 64 75 72 69 6e 67 20 73 74 61 74 65 6d  es during statem
17910 65 6e 74 20 70 72 6f 63 65 73 73 69 6e 67 0a 2a  ent processing.*
17920 2a 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73  * then iTable is
17930 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20   the address of 
17940 61 20 73 75 62 72 6f 75 74 69 6e 65 20 74 68 61  a subroutine tha
17950 74 20 63 6f 6d 70 75 74 65 73 20 74 68 65 20 73  t computes the s
17960 75 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49  ubquery..**.** I
17970 66 20 74 68 65 20 45 78 70 72 20 69 73 20 6f 66  f the Expr is of
17980 20 74 79 70 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c   type OP_Column,
17990 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65 20 69   and the table i
179a0 74 20 69 73 20 73 65 6c 65 63 74 69 6e 67 20 66  t is selecting f
179b0 72 6f 6d 0a 2a 2a 20 69 73 20 61 20 64 69 73 6b  rom.** is a disk
179c0 20 74 61 62 6c 65 20 6f 72 20 74 68 65 20 22 6f   table or the "o
179d0 6c 64 2e 2a 22 20 70 73 65 75 64 6f 2d 74 61 62  ld.*" pseudo-tab
179e0 6c 65 2c 20 74 68 65 6e 20 70 54 61 62 20 70 6f  le, then pTab po
179f0 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 63  ints to the.** c
17a00 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 61 62  orresponding tab
17a10 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a  le definition..*
17a20 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54 49 4f 4e 20  *.** ALLOCATION 
17a30 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a 20 45 78 70  NOTES:.**.** Exp
17a40 72 20 6f 62 6a 65 63 74 73 20 63 61 6e 20 75 73  r objects can us
17a50 65 20 61 20 6c 6f 74 20 6f 66 20 6d 65 6d 6f 72  e a lot of memor
17a60 79 20 73 70 61 63 65 20 69 6e 20 64 61 74 61 62  y space in datab
17a70 61 73 65 20 73 63 68 65 6d 61 2e 20 20 54 6f 0a  ase schema.  To.
17a80 2a 2a 20 68 65 6c 70 20 72 65 64 75 63 65 20 6d  ** help reduce m
17a90 65 6d 6f 72 79 20 72 65 71 75 69 72 65 6d 65 6e  emory requiremen
17aa0 74 73 2c 20 73 6f 6d 65 74 69 6d 65 73 20 61 6e  ts, sometimes an
17ab0 20 45 78 70 72 20 6f 62 6a 65 63 74 20 77 69 6c   Expr object wil
17ac0 6c 20 62 65 0a 2a 2a 20 74 72 75 6e 63 61 74 65  l be.** truncate
17ad0 64 2e 20 20 41 6e 64 20 74 6f 20 72 65 64 75 63  d.  And to reduc
17ae0 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
17af0 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
17b00 6e 73 2c 20 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a  ns, sometimes.**
17b10 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 45 78 70   two or more Exp
17b20 72 20 6f 62 6a 65 63 74 73 20 77 69 6c 6c 20 62  r objects will b
17b30 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69  e stored in a si
17b40 6e 67 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  ngle memory allo
17b50 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74 6f 67 65 74  cation,.** toget
17b60 68 65 72 20 77 69 74 68 20 45 78 70 72 2e 7a 54  her with Expr.zT
17b70 6f 6b 65 6e 20 73 74 72 69 6e 67 73 2e 0a 2a 2a  oken strings..**
17b80 0a 2a 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65  .** If the EP_Re
17b90 64 75 63 65 64 20 61 6e 64 20 45 50 5f 54 6f 6b  duced and EP_Tok
17ba0 65 6e 4f 6e 6c 79 20 66 6c 61 67 73 20 61 72 65  enOnly flags are
17bb0 20 73 65 74 20 77 68 65 6e 0a 2a 2a 20 61 6e 20   set when.** an 
17bc0 45 78 70 72 20 6f 62 6a 65 63 74 20 69 73 20 74  Expr object is t
17bd0 72 75 6e 63 61 74 65 64 2e 20 20 57 68 65 6e 20  runcated.  When 
17be0 45 50 5f 52 65 64 75 63 65 64 20 69 73 20 73 65  EP_Reduced is se
17bf0 74 2c 20 74 68 65 6e 20 61 6c 6c 0a 2a 2a 20 74  t, then all.** t
17c00 68 65 20 63 68 69 6c 64 20 45 78 70 72 20 6f 62  he child Expr ob
17c10 6a 65 63 74 73 20 69 6e 20 74 68 65 20 45 78 70  jects in the Exp
17c20 72 2e 70 4c 65 66 74 20 61 6e 64 20 45 78 70 72  r.pLeft and Expr
17c30 2e 70 52 69 67 68 74 20 73 75 62 74 72 65 65 73  .pRight subtrees
17c40 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 61 69 6e 65  .** are containe
17c50 64 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d  d within the sam
17c60 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
17c70 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20 68 6f 77 65  ion.  Note, howe
17c80 76 65 72 2c 20 74 68 61 74 0a 2a 2a 20 74 68 65  ver, that.** the
17c90 20 73 75 62 74 72 65 65 73 20 69 6e 20 45 78 70   subtrees in Exp
17ca0 72 2e 78 2e 70 4c 69 73 74 20 6f 72 20 45 78 70  r.x.pList or Exp
17cb0 72 2e 78 2e 70 53 65 6c 65 63 74 20 61 72 65 20  r.x.pSelect are 
17cc0 61 6c 77 61 79 73 20 73 65 70 61 72 61 74 65 6c  always separatel
17cd0 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20  y.** allocated, 
17ce0 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68  regardless of wh
17cf0 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 45 50 5f  ether or not EP_
17d00 52 65 64 75 63 65 64 20 69 73 20 73 65 74 2e 0a  Reduced is set..
17d10 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 20 7b  */.struct Expr {
17d20 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20  .  u8 op;       
17d30 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 65            /* Ope
17d40 72 61 74 69 6f 6e 20 70 65 72 66 6f 72 6d 65 64  ration performed
17d50 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f   by this node */
17d60 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79  .  char affinity
17d70 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
17d80 20 61 66 66 69 6e 69 74 79 20 6f 66 20 74 68 65   affinity of the
17d90 20 63 6f 6c 75 6d 6e 20 6f 72 20 30 20 69 66 20   column or 0 if 
17da0 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e 20 2a 2f 0a  not a column */.
17db0 20 20 75 33 32 20 66 6c 61 67 73 3b 20 20 20 20    u32 flags;    
17dc0 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69           /* Vari
17dd0 6f 75 73 20 66 6c 61 67 73 2e 20 20 45 50 5f 2a  ous flags.  EP_*
17de0 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20   See below */.  
17df0 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63 68 61 72  union {.    char
17e00 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20   *zToken;       
17e10 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 76 61 6c 75     /* Token valu
17e20 65 2e 20 5a 65 72 6f 20 74 65 72 6d 69 6e 61 74  e. Zero terminat
17e30 65 64 20 61 6e 64 20 64 65 71 75 6f 74 65 64 20  ed and dequoted 
17e40 2a 2f 0a 20 20 20 20 69 6e 74 20 69 56 61 6c 75  */.    int iValu
17e50 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
17e60 20 4e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 69 6e   Non-negative in
17e70 74 65 67 65 72 20 76 61 6c 75 65 20 69 66 20 45  teger value if E
17e80 50 5f 49 6e 74 56 61 6c 75 65 20 2a 2f 0a 20 20  P_IntValue */.  
17e90 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68  } u;..  /* If th
17ea0 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66  e EP_TokenOnly f
17eb0 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 74 68  lag is set in th
17ec0 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73  e Expr.flags mas
17ed0 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20  k, then no.  ** 
17ee0 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74  space is allocat
17ef0 65 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64  ed for the field
17f00 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69  s below this poi
17f10 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74  nt. An attempt t
17f20 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68  o.  ** access th
17f30 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69  em will result i
17f40 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20  n a segfault or 
17f50 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a  malfunction..  *
17f60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17f70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17f80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17f90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17fa0 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72 20 2a 70  ****/..  Expr *p
17fb0 4c 65 66 74 3b 20 20 20 20 20 20 20 20 20 20 20  Left;           
17fc0 2f 2a 20 4c 65 66 74 20 73 75 62 6e 6f 64 65 20  /* Left subnode 
17fd0 2a 2f 0a 20 20 45 78 70 72 20 2a 70 52 69 67 68  */.  Expr *pRigh
17fe0 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52  t;          /* R
17ff0 69 67 68 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a  ight subnode */.
18000 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 45 78    union {.    Ex
18010 70 72 4c 69 73 74 20 2a 70 4c 69 73 74 3b 20 20  prList *pList;  
18020 20 20 20 2f 2a 20 6f 70 20 3d 20 49 4e 2c 20 45     /* op = IN, E
18030 58 49 53 54 53 2c 20 53 45 4c 45 43 54 2c 20 43  XISTS, SELECT, C
18040 41 53 45 2c 20 46 55 4e 43 54 49 4f 4e 2c 20 42  ASE, FUNCTION, B
18050 45 54 57 45 45 4e 20 2a 2f 0a 20 20 20 20 53 65  ETWEEN */.    Se
18060 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20  lect *pSelect;  
18070 20 20 20 2f 2a 20 45 50 5f 78 49 73 53 65 6c 65     /* EP_xIsSele
18080 63 74 20 61 6e 64 20 6f 70 20 3d 20 49 4e 2c 20  ct and op = IN, 
18090 45 58 49 53 54 53 2c 20 53 45 4c 45 43 54 20 2a  EXISTS, SELECT *
180a0 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f 2a 20 49  /.  } x;..  /* I
180b0 66 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64  f the EP_Reduced
180c0 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20   flag is set in 
180d0 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d  the Expr.flags m
180e0 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a  ask, then no.  *
180f0 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63  * space is alloc
18100 61 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 65  ated for the fie
18110 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70  lds below this p
18120 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74  oint. An attempt
18130 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20   to.  ** access 
18140 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74  them will result
18150 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f   in a segfault o
18160 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20  r malfunction.. 
18170 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ***************
18180 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
18190 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
181a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
181b0 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20 53 51 4c  ******/..#if SQL
181c0 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50  ITE_MAX_EXPR_DEP
181d0 54 48 3e 30 0a 20 20 69 6e 74 20 6e 48 65 69 67  TH>0.  int nHeig
181e0 68 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ht;           /*
181f0 20 48 65 69 67 68 74 20 6f 66 20 74 68 65 20 74   Height of the t
18200 72 65 65 20 68 65 61 64 65 64 20 62 79 20 74 68  ree headed by th
18210 69 73 20 6e 6f 64 65 20 2a 2f 0a 23 65 6e 64 69  is node */.#endi
18220 66 0a 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20  f.  int iTable; 
18230 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b             /* TK
18240 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72 73 6f 72 20  _COLUMN: cursor 
18250 6e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 20  number of table 
18260 68 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20  holding column. 
18270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18280 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 52 45          ** TK_RE
18290 47 49 53 54 45 52 3a 20 72 65 67 69 73 74 65 72  GISTER: register
182a0 20 6e 75 6d 62 65 72 0a 20 20 20 20 20 20 20 20   number.        
182b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182c0 20 2a 2a 20 54 4b 5f 54 52 49 47 47 45 52 3a 20   ** TK_TRIGGER: 
182d0 31 20 2d 3e 20 6e 65 77 2c 20 30 20 2d 3e 20 6f  1 -> new, 0 -> o
182e0 6c 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ld.             
182f0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 45              ** E
18300 50 5f 55 6e 6c 69 6b 65 6c 79 3a 20 20 31 33 34  P_Unlikely:  134
18310 32 31 37 37 32 38 20 74 69 6d 65 73 20 6c 69 6b  217728 times lik
18320 65 6c 69 68 6f 6f 64 0a 20 20 20 20 20 20 20 20  elihood.        
18330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18340 20 2a 2a 20 54 4b 5f 53 45 4c 45 43 54 3a 20 31   ** TK_SELECT: 1
18350 73 74 20 72 65 67 69 73 74 65 72 20 6f 66 20 72  st register of r
18360 65 73 75 6c 74 20 76 65 63 74 6f 72 20 2a 2f 0a  esult vector */.
18370 20 20 79 6e 56 61 72 20 69 43 6f 6c 75 6d 6e 3b    ynVar iColumn;
18380 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43           /* TK_C
18390 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 69 6e  OLUMN: column in
183a0 64 65 78 2e 20 20 2d 31 20 66 6f 72 20 72 6f 77  dex.  -1 for row
183b0 69 64 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  id..            
183c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
183d0 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20 76 61 72  TK_VARIABLE: var
183e0 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 28 61 6c  iable number (al
183f0 77 61 79 73 20 3e 3d 20 31 29 2e 0a 20 20 20 20  ways >= 1)..    
18400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18410 20 20 20 20 20 2a 2a 20 54 4b 5f 53 45 4c 45 43       ** TK_SELEC
18420 54 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e  T_COLUMN: column
18430 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 76   of the result v
18440 65 63 74 6f 72 20 2a 2f 0a 20 20 69 31 36 20 69  ector */.  i16 i
18450 41 67 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Agg;            
18460 20 20 2f 2a 20 57 68 69 63 68 20 65 6e 74 72 79    /* Which entry
18470 20 69 6e 20 70 41 67 67 49 6e 66 6f 2d 3e 61 43   in pAggInfo->aC
18480 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46 75 6e 63 5b  ol[] or ->aFunc[
18490 5d 20 2a 2f 0a 20 20 69 31 36 20 69 52 69 67 68  ] */.  i16 iRigh
184a0 74 4a 6f 69 6e 54 61 62 6c 65 3b 20 20 20 2f 2a  tJoinTable;   /*
184b0 20 49 66 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c   If EP_FromJoin,
184c0 20 74 68 65 20 72 69 67 68 74 20 74 61 62 6c 65   the right table
184d0 20 6f 66 20 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a   of the join */.
184e0 20 20 75 38 20 6f 70 32 3b 20 20 20 20 20 20 20    u8 op2;       
184f0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 52           /* TK_R
18500 45 47 49 53 54 45 52 3a 20 6f 72 69 67 69 6e 61  EGISTER: origina
18510 6c 20 76 61 6c 75 65 20 6f 66 20 45 78 70 72 2e  l value of Expr.
18520 6f 70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  op.             
18530 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
18540 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68 65 20 76 61  K_COLUMN: the va
18550 6c 75 65 20 6f 66 20 70 35 20 66 6f 72 20 4f 50  lue of p5 for OP
18560 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20  _Column.        
18570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18580 20 2a 2a 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54   ** TK_AGG_FUNCT
18590 49 4f 4e 3a 20 6e 65 73 74 69 6e 67 20 64 65 70  ION: nesting dep
185a0 74 68 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20  th */.  AggInfo 
185b0 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 20 20 2f  *pAggInfo;     /
185c0 2a 20 55 73 65 64 20 62 79 20 54 4b 5f 41 47 47  * Used by TK_AGG
185d0 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 54 4b 5f 41  _COLUMN and TK_A
185e0 47 47 5f 46 55 4e 43 54 49 4f 4e 20 2a 2f 0a 20  GG_FUNCTION */. 
185f0 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20   Table *pTab;   
18600 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65          /* Table
18610 20 66 6f 72 20 54 4b 5f 43 4f 4c 55 4d 4e 20 65   for TK_COLUMN e
18620 78 70 72 65 73 73 69 6f 6e 73 2e 20 20 43 61 6e  xpressions.  Can
18630 20 62 65 20 4e 55 4c 4c 0a 20 20 20 20 20 20 20   be NULL.       
18640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18650 20 20 2a 2a 20 66 6f 72 20 61 20 63 6f 6c 75 6d    ** for a colum
18660 6e 20 6f 66 20 61 6e 20 69 6e 64 65 78 20 6f 6e  n of an index on
18670 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 2a   an expression *
18680 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
18690 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 68  following are th
186a0 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 62 69  e meanings of bi
186b0 74 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66  ts in the Expr.f
186c0 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23  lags field..*/.#
186d0 64 65 66 69 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f  define EP_FromJo
186e0 69 6e 20 20 30 78 30 30 30 30 30 31 20 2f 2a 20  in  0x000001 /* 
186f0 4f 72 69 67 69 6e 61 74 65 73 20 69 6e 20 4f 4e  Originates in ON
18700 2f 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66  /USING clause of
18710 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23   outer join */.#
18720 64 65 66 69 6e 65 20 45 50 5f 41 67 67 20 20 20  define EP_Agg   
18730 20 20 20 20 30 78 30 30 30 30 30 32 20 2f 2a 20      0x000002 /* 
18740 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20  Contains one or 
18750 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65 20 66  more aggregate f
18760 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 20 20  unctions */.    
18770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
18780 20 30 78 30 30 30 30 30 34 20 2f 2f 20 61 76 61   0x000004 // ava
18790 69 6c 61 62 6c 65 20 66 6f 72 20 75 73 65 20 2a  ilable for use *
187a0 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
187b0 20 20 20 20 2f 2a 20 30 78 30 30 30 30 30 38 20      /* 0x000008 
187c0 2f 2f 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72  // available for
187d0 20 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20   use */.#define 
187e0 45 50 5f 44 69 73 74 69 6e 63 74 20 20 30 78 30  EP_Distinct  0x0
187f0 30 30 30 31 30 20 2f 2a 20 41 67 67 72 65 67 61  00010 /* Aggrega
18800 74 65 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68  te function with
18810 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72   DISTINCT keywor
18820 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  d */.#define EP_
18830 56 61 72 53 65 6c 65 63 74 20 30 78 30 30 30 30  VarSelect 0x0000
18840 32 30 20 2f 2a 20 70 53 65 6c 65 63 74 20 69 73  20 /* pSelect is
18850 20 63 6f 72 72 65 6c 61 74 65 64 2c 20 6e 6f 74   correlated, not
18860 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23 64 65   constant */.#de
18870 66 69 6e 65 20 45 50 5f 44 62 6c 51 75 6f 74 65  fine EP_DblQuote
18880 64 20 30 78 30 30 30 30 34 30 20 2f 2a 20 74 6f  d 0x000040 /* to
18890 6b 65 6e 2e 7a 20 77 61 73 20 6f 72 69 67 69 6e  ken.z was origin
188a0 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e 22 20 2a 2f  ally in "..." */
188b0 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 66 69  .#define EP_Infi
188c0 78 46 75 6e 63 20 30 78 30 30 30 30 38 30 20 2f  xFunc 0x000080 /
188d0 2a 20 54 72 75 65 20 66 6f 72 20 61 6e 20 69 6e  * True for an in
188e0 66 69 78 20 66 75 6e 63 74 69 6f 6e 3a 20 4c 49  fix function: LI
188f0 4b 45 2c 20 47 4c 4f 42 2c 20 65 74 63 20 2a 2f  KE, GLOB, etc */
18900 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 6f 6c 6c  .#define EP_Coll
18910 61 74 65 20 20 20 30 78 30 30 30 31 30 30 20 2f  ate   0x000100 /
18920 2a 20 54 72 65 65 20 63 6f 6e 74 61 69 6e 73 20  * Tree contains 
18930 61 20 54 4b 5f 43 4f 4c 4c 41 54 45 20 6f 70 65  a TK_COLLATE ope
18940 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65  rator */.#define
18950 20 45 50 5f 47 65 6e 65 72 69 63 20 20 20 30 78   EP_Generic   0x
18960 30 30 30 32 30 30 20 2f 2a 20 49 67 6e 6f 72 65  000200 /* Ignore
18970 20 43 4f 4c 4c 41 54 45 20 6f 72 20 61 66 66 69   COLLATE or affi
18980 6e 69 74 79 20 6f 6e 20 74 68 69 73 20 74 72 65  nity on this tre
18990 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  e */.#define EP_
189a0 49 6e 74 56 61 6c 75 65 20 20 30 78 30 30 30 34  IntValue  0x0004
189b0 30 30 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61  00 /* Integer va
189c0 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e  lue contained in
189d0 20 75 2e 69 56 61 6c 75 65 20 2a 2f 0a 23 64 65   u.iValue */.#de
189e0 66 69 6e 65 20 45 50 5f 78 49 73 53 65 6c 65 63  fine EP_xIsSelec
189f0 74 20 30 78 30 30 30 38 30 30 20 2f 2a 20 78 2e  t 0x000800 /* x.
18a00 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64  pSelect is valid
18a10 20 28 6f 74 68 65 72 77 69 73 65 20 78 2e 70 4c   (otherwise x.pL
18a20 69 73 74 20 69 73 29 20 2a 2f 0a 23 64 65 66 69  ist is) */.#defi
18a30 6e 65 20 45 50 5f 53 6b 69 70 20 20 20 20 20 20  ne EP_Skip      
18a40 30 78 30 30 31 30 30 30 20 2f 2a 20 43 4f 4c 4c  0x001000 /* COLL
18a50 41 54 45 2c 20 41 53 2c 20 6f 72 20 55 4e 4c 49  ATE, AS, or UNLI
18a60 4b 45 4c 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20  KELY */.#define 
18a70 45 50 5f 52 65 64 75 63 65 64 20 20 20 30 78 30  EP_Reduced   0x0
18a80 30 32 30 30 30 20 2f 2a 20 45 78 70 72 20 73 74  02000 /* Expr st
18a90 72 75 63 74 20 45 58 50 52 5f 52 45 44 55 43 45  ruct EXPR_REDUCE
18aa0 44 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79  DSIZE bytes only
18ab0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 54   */.#define EP_T
18ac0 6f 6b 65 6e 4f 6e 6c 79 20 30 78 30 30 34 30 30  okenOnly 0x00400
18ad0 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74  0 /* Expr struct
18ae0 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53   EXPR_TOKENONLYS
18af0 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a  IZE bytes only *
18b00 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 74 61  /.#define EP_Sta
18b10 74 69 63 20 20 20 20 30 78 30 30 38 30 30 30 20  tic    0x008000 
18b20 2f 2a 20 48 65 6c 64 20 69 6e 20 6d 65 6d 6f 72  /* Held in memor
18b30 79 20 6e 6f 74 20 6f 62 74 61 69 6e 65 64 20 66  y not obtained f
18b40 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a  rom malloc() */.
18b50 23 64 65 66 69 6e 65 20 45 50 5f 4d 65 6d 54 6f  #define EP_MemTo
18b60 6b 65 6e 20 20 30 78 30 31 30 30 30 30 20 2f 2a  ken  0x010000 /*
18b70 20 4e 65 65 64 20 74 6f 20 73 71 6c 69 74 65 33   Need to sqlite3
18b80 44 62 46 72 65 65 28 29 20 45 78 70 72 2e 7a 54  DbFree() Expr.zT
18b90 6f 6b 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  oken */.#define 
18ba0 45 50 5f 4e 6f 52 65 64 75 63 65 20 20 30 78 30  EP_NoReduce  0x0
18bb0 32 30 30 30 30 20 2f 2a 20 43 61 6e 6e 6f 74 20  20000 /* Cannot 
18bc0 45 58 50 52 44 55 50 5f 52 45 44 55 43 45 20 74  EXPRDUP_REDUCE t
18bd0 68 69 73 20 45 78 70 72 20 2a 2f 0a 23 64 65 66  his Expr */.#def
18be0 69 6e 65 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 20  ine EP_Unlikely 
18bf0 20 30 78 30 34 30 30 30 30 20 2f 2a 20 75 6e 6c   0x040000 /* unl
18c00 69 6b 65 6c 79 28 29 20 6f 72 20 6c 69 6b 65 6c  ikely() or likel
18c10 69 68 6f 6f 64 28 29 20 66 75 6e 63 74 69 6f 6e  ihood() function
18c20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43   */.#define EP_C
18c30 6f 6e 73 74 46 75 6e 63 20 30 78 30 38 30 30 30  onstFunc 0x08000
18c40 30 20 2f 2a 20 41 20 53 51 4c 49 54 45 5f 46 55  0 /* A SQLITE_FU
18c50 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 6f 72 20 5f  NC_CONSTANT or _
18c60 53 4c 4f 43 48 4e 47 20 66 75 6e 63 74 69 6f 6e  SLOCHNG function
18c70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43   */.#define EP_C
18c80 61 6e 42 65 4e 75 6c 6c 20 30 78 31 30 30 30 30  anBeNull 0x10000
18c90 30 20 2f 2a 20 43 61 6e 20 62 65 20 6e 75 6c 6c  0 /* Can be null
18ca0 20 64 65 73 70 69 74 65 20 4e 4f 54 20 4e 55 4c   despite NOT NUL
18cb0 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a  L constraint */.
18cc0 23 64 65 66 69 6e 65 20 45 50 5f 53 75 62 71 75  #define EP_Subqu
18cd0 65 72 79 20 20 30 78 32 30 30 30 30 30 20 2f 2a  ery  0x200000 /*
18ce0 20 54 72 65 65 20 63 6f 6e 74 61 69 6e 73 20 61   Tree contains a
18cf0 20 54 4b 5f 53 45 4c 45 43 54 20 6f 70 65 72 61   TK_SELECT opera
18d00 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  tor */.#define E
18d10 50 5f 41 6c 69 61 73 20 20 20 20 20 30 78 34 30  P_Alias     0x40
18d20 30 30 30 30 20 2f 2a 20 49 73 20 61 6e 20 61 6c  0000 /* Is an al
18d30 69 61 73 20 66 6f 72 20 61 20 72 65 73 75 6c 74  ias for a result
18d40 20 73 65 74 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23   set column */.#
18d50 64 65 66 69 6e 65 20 45 50 5f 4c 65 61 66 20 20  define EP_Leaf  
18d60 20 20 20 20 30 78 38 30 30 30 30 30 20 2f 2a 20      0x800000 /* 
18d70 45 78 70 72 2e 70 4c 65 66 74 2c 20 2e 70 52 69  Expr.pLeft, .pRi
18d80 67 68 74 2c 20 2e 75 2e 70 53 65 6c 65 63 74 20  ght, .u.pSelect 
18d90 61 6c 6c 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a  all NULL */../*.
18da0 2a 2a 20 43 6f 6d 62 69 6e 61 74 69 6f 6e 73 20  ** Combinations 
18db0 6f 66 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 45  of two or more E
18dc0 50 5f 2a 20 66 6c 61 67 73 0a 2a 2f 0a 23 64 65  P_* flags.*/.#de
18dd0 66 69 6e 65 20 45 50 5f 50 72 6f 70 61 67 61 74  fine EP_Propagat
18de0 65 20 28 45 50 5f 43 6f 6c 6c 61 74 65 7c 45 50  e (EP_Collate|EP
18df0 5f 53 75 62 71 75 65 72 79 29 20 2f 2a 20 50 72  _Subquery) /* Pr
18e00 6f 70 61 67 61 74 65 20 74 68 65 73 65 20 62 69  opagate these bi
18e10 74 73 20 75 70 20 74 72 65 65 20 2a 2f 0a 0a 2f  ts up tree */../
18e20 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f  *.** These macro
18e30 73 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  s can be used to
18e40 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63   test, set, or c
18e50 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74 68 65  lear bits in the
18e60 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 66  .** Expr.flags f
18e70 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ield..*/.#define
18e80 20 45 78 70 72 48 61 73 50 72 6f 70 65 72 74 79   ExprHasProperty
18e90 28 45 2c 50 29 20 20 20 20 20 28 28 28 45 29 2d  (E,P)     (((E)-
18ea0 3e 66 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a  >flags&(P))!=0).
18eb0 23 64 65 66 69 6e 65 20 45 78 70 72 48 61 73 41  #define ExprHasA
18ec0 6c 6c 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20  llProperty(E,P) 
18ed0 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50   (((E)->flags&(P
18ee0 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65  ))==(P)).#define
18ef0 20 45 78 70 72 53 65 74 50 72 6f 70 65 72 74 79   ExprSetProperty
18f00 28 45 2c 50 29 20 20 20 20 20 28 45 29 2d 3e 66  (E,P)     (E)->f
18f10 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e  lags|=(P).#defin
18f20 65 20 45 78 70 72 43 6c 65 61 72 50 72 6f 70 65  e ExprClearPrope
18f30 72 74 79 28 45 2c 50 29 20 20 20 28 45 29 2d 3e  rty(E,P)   (E)->
18f40 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 20  flags&=~(P)../* 
18f50 54 68 65 20 45 78 70 72 53 65 74 56 56 41 50 72  The ExprSetVVAPr
18f60 6f 70 65 72 74 79 28 29 20 6d 61 63 72 6f 20 69  operty() macro i
18f70 73 20 75 73 65 64 20 66 6f 72 20 56 65 72 69 66  s used for Verif
18f80 69 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74  ication, Validat
18f90 69 6f 6e 2c 0a 2a 2a 20 61 6e 64 20 41 63 63 72  ion,.** and Accr
18fa0 65 64 69 74 61 74 69 6f 6e 20 6f 6e 6c 79 2e 20  editation only. 
18fb0 20 49 74 20 77 6f 72 6b 73 20 6c 69 6b 65 20 45   It works like E
18fc0 78 70 72 53 65 74 50 72 6f 70 65 72 74 79 28 29  xprSetProperty()
18fd0 20 64 75 72 69 6e 67 20 56 56 41 0a 2a 2a 20 70   during VVA.** p
18fe0 72 6f 63 65 73 73 65 73 20 62 75 74 20 69 73 20  rocesses but is 
18ff0 61 20 6e 6f 2d 6f 70 20 66 6f 72 20 64 65 6c 69  a no-op for deli
19000 76 65 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  very..*/.#ifdef 
19010 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 64  SQLITE_DEBUG.# d
19020 65 66 69 6e 65 20 45 78 70 72 53 65 74 56 56 41  efine ExprSetVVA
19030 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28  Property(E,P)  (
19040 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23  E)->flags|=(P).#
19050 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 45 78  else.# define Ex
19060 70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79  prSetVVAProperty
19070 28 45 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  (E,P).#endif../*
19080 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65  .** Macros to de
19090 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d 62  termine the numb
190a0 65 72 20 6f 66 20 62 79 74 65 73 20 72 65 71 75  er of bytes requ
190b0 69 72 65 64 20 62 79 20 61 20 6e 6f 72 6d 61 6c  ired by a normal
190c0 20 45 78 70 72 0a 2a 2a 20 73 74 72 75 63 74 2c   Expr.** struct,
190d0 20 61 6e 20 45 78 70 72 20 73 74 72 75 63 74 20   an Expr struct 
190e0 77 69 74 68 20 74 68 65 20 45 50 5f 52 65 64 75  with the EP_Redu
190f0 63 65 64 20 66 6c 61 67 20 73 65 74 20 69 6e 20  ced flag set in 
19100 45 78 70 72 2e 66 6c 61 67 73 0a 2a 2a 20 61 6e  Expr.flags.** an
19110 64 20 61 6e 20 45 78 70 72 20 73 74 72 75 63 74  d an Expr struct
19120 20 77 69 74 68 20 74 68 65 20 45 50 5f 54 6f 6b   with the EP_Tok
19130 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 73 65 74 2e  enOnly flag set.
19140 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52  .*/.#define EXPR
19150 5f 46 55 4c 4c 53 49 5a 45 20 20 20 20 20 20 20  _FULLSIZE       
19160 20 20 20 20 73 69 7a 65 6f 66 28 45 78 70 72 29      sizeof(Expr)
19170 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 75             /* Fu
19180 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23 64 65 66 69  ll size */.#defi
19190 6e 65 20 45 58 50 52 5f 52 45 44 55 43 45 44 53  ne EXPR_REDUCEDS
191a0 49 5a 45 20 20 20 20 20 20 20 20 6f 66 66 73 65  IZE        offse
191b0 74 6f 66 28 45 78 70 72 2c 69 54 61 62 6c 65 29  tof(Expr,iTable)
191c0 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65 61 74    /* Common feat
191d0 75 72 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ures */.#define 
191e0 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49  EXPR_TOKENONLYSI
191f0 5a 45 20 20 20 20 20 20 6f 66 66 73 65 74 6f 66  ZE      offsetof
19200 28 45 78 70 72 2c 70 4c 65 66 74 29 20 20 20 2f  (Expr,pLeft)   /
19210 2a 20 46 65 77 65 72 20 66 65 61 74 75 72 65 73  * Fewer features
19220 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73   */../*.** Flags
19230 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20 73   passed to the s
19240 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 29 20  qlite3ExprDup() 
19250 66 75 6e 63 74 69 6f 6e 2e 20 53 65 65 20 74 68  function. See th
19260 65 20 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e 74  e header comment
19270 0a 2a 2a 20 61 62 6f 76 65 20 73 71 6c 69 74 65  .** above sqlite
19280 33 45 78 70 72 44 75 70 28 29 20 66 6f 72 20 64  3ExprDup() for d
19290 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69  etails..*/.#defi
192a0 6e 65 20 45 58 50 52 44 55 50 5f 52 45 44 55 43  ne EXPRDUP_REDUC
192b0 45 20 20 20 20 20 20 20 20 20 30 78 30 30 30 31  E         0x0001
192c0 20 20 2f 2a 20 55 73 65 64 20 72 65 64 75 63 65    /* Used reduce
192d0 64 2d 73 69 7a 65 20 45 78 70 72 20 6e 6f 64 65  d-size Expr node
192e0 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c 69  s */../*.** A li
192f0 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e  st of expression
19300 73 2e 20 20 45 61 63 68 20 65 78 70 72 65 73 73  s.  Each express
19310 69 6f 6e 20 6d 61 79 20 6f 70 74 69 6f 6e 61 6c  ion may optional
19320 6c 79 20 68 61 76 65 20 61 0a 2a 2a 20 6e 61 6d  ly have a.** nam
19330 65 2e 20 20 41 6e 20 65 78 70 72 2f 6e 61 6d 65  e.  An expr/name
19340 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 63 61 6e   combination can
19350 20 62 65 20 75 73 65 64 20 69 6e 20 73 65 76 65   be used in seve
19360 72 61 6c 20 77 61 79 73 2c 20 73 75 63 68 0a 2a  ral ways, such.*
19370 2a 20 61 73 20 74 68 65 20 6c 69 73 74 20 6f 66  * as the list of
19380 20 22 65 78 70 72 20 41 53 20 49 44 22 20 66 69   "expr AS ID" fi
19390 65 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 61  elds following a
193a0 20 22 53 45 4c 45 43 54 22 20 6f 72 20 69 6e 20   "SELECT" or in 
193b0 74 68 65 0a 2a 2a 20 6c 69 73 74 20 6f 66 20 22  the.** list of "
193c0 49 44 20 3d 20 65 78 70 72 22 20 69 74 65 6d 73  ID = expr" items
193d0 20 69 6e 20 61 6e 20 55 50 44 41 54 45 2e 20 20   in an UPDATE.  
193e0 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73  A list of expres
193f0 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61 6c 73  sions can.** als
19400 6f 20 62 65 20 75 73 65 64 20 61 73 20 74 68 65  o be used as the
19410 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 61 20 66   argument to a f
19420 75 6e 63 74 69 6f 6e 2c 20 69 6e 20 77 68 69 63  unction, in whic
19430 68 20 63 61 73 65 20 74 68 65 20 61 2e 7a 4e 61  h case the a.zNa
19440 6d 65 0a 2a 2a 20 66 69 65 6c 64 20 69 73 20 6e  me.** field is n
19450 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 42  ot used..**.** B
19460 79 20 64 65 66 61 75 6c 74 20 74 68 65 20 45 78  y default the Ex
19470 70 72 2e 7a 53 70 61 6e 20 66 69 65 6c 64 20 68  pr.zSpan field h
19480 6f 6c 64 73 20 61 20 68 75 6d 61 6e 2d 72 65 61  olds a human-rea
19490 64 61 62 6c 65 20 64 65 73 63 72 69 70 74 69 6f  dable descriptio
194a0 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 65 78 70 72  n of.** the expr
194b0 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75  ession that is u
194c0 73 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72  sed in the gener
194d0 61 74 69 6f 6e 20 6f 66 20 65 72 72 6f 72 20 6d  ation of error m
194e0 65 73 73 61 67 65 73 20 61 6e 64 0a 2a 2a 20 63  essages and.** c
194f0 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e 20 20 49  olumn labels.  I
19500 6e 20 74 68 69 73 20 63 61 73 65 2c 20 45 78 70  n this case, Exp
19510 72 2e 7a 53 70 61 6e 20 69 73 20 74 79 70 69 63  r.zSpan is typic
19520 61 6c 6c 79 20 74 68 65 20 74 65 78 74 20 6f 66  ally the text of
19530 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65 78 70   a.** column exp
19540 72 65 73 73 69 6f 6e 20 61 73 20 69 74 20 65 78  ression as it ex
19550 69 73 74 73 20 69 6e 20 61 20 53 45 4c 45 43 54  ists in a SELECT
19560 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 48 6f 77   statement.  How
19570 65 76 65 72 2c 20 69 66 0a 2a 2a 20 74 68 65 20  ever, if.** the 
19580 62 53 70 61 6e 49 73 54 61 62 20 66 6c 61 67 20  bSpanIsTab flag 
19590 69 73 20 73 65 74 2c 20 74 68 65 6e 20 7a 53 70  is set, then zSp
195a0 61 6e 20 69 73 20 6f 76 65 72 6c 6f 61 64 65 64  an is overloaded
195b0 20 74 6f 20 6d 65 61 6e 20 74 68 65 20 6e 61 6d   to mean the nam
195c0 65 0a 2a 2a 20 6f 66 20 74 68 65 20 72 65 73 75  e.** of the resu
195d0 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65  lt column in the
195e0 20 66 6f 72 6d 3a 20 44 41 54 41 42 41 53 45 2e   form: DATABASE.
195f0 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20 20 54  TABLE.COLUMN.  T
19600 68 69 73 20 6c 61 74 65 72 0a 2a 2a 20 66 6f 72  his later.** for
19610 6d 20 69 73 20 75 73 65 64 20 66 6f 72 20 6e 61  m is used for na
19620 6d 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20 77 69  me resolution wi
19630 74 68 20 6e 65 73 74 65 64 20 46 52 4f 4d 20 63  th nested FROM c
19640 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73 74 72 75 63  lauses..*/.struc
19650 74 20 45 78 70 72 4c 69 73 74 20 7b 0a 20 20 69  t ExprList {.  i
19660 6e 74 20 6e 45 78 70 72 3b 20 20 20 20 20 20 20  nt nExpr;       
19670 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
19680 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 6f  of expressions o
19690 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20  n the list */.  
196a0 69 6e 74 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20  int nAlloc;     
196b0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
196c0 20 6f 66 20 61 5b 5d 20 73 6c 6f 74 73 20 61 6c   of a[] slots al
196d0 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 73 74 72  located */.  str
196e0 75 63 74 20 45 78 70 72 4c 69 73 74 5f 69 74 65  uct ExprList_ite
196f0 6d 20 7b 20 2f 2a 20 46 6f 72 20 65 61 63 68 20  m { /* For each 
19700 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68  expression in th
19710 65 20 6c 69 73 74 20 2a 2f 0a 20 20 20 20 45 78  e list */.    Ex
19720 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20  pr *pExpr;      
19730 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72        /* The par
19740 73 65 20 74 72 65 65 20 66 6f 72 20 74 68 69 73  se tree for this
19750 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20   expression */. 
19760 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20     char *zName; 
19770 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f             /* To
19780 6b 65 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77  ken associated w
19790 69 74 68 20 74 68 69 73 20 65 78 70 72 65 73 73  ith this express
197a0 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  ion */.    char 
197b0 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20 20 20 20  *zSpan;         
197c0 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74     /* Original t
197d0 65 78 74 20 6f 66 20 74 68 65 20 65 78 70 72 65  ext of the expre
197e0 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 75 38 20  ssion */.    u8 
197f0 73 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20  sortOrder;      
19800 20 20 20 20 20 2f 2a 20 31 20 66 6f 72 20 44 45       /* 1 for DE
19810 53 43 20 6f 72 20 30 20 66 6f 72 20 41 53 43 20  SC or 0 for ASC 
19820 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
19830 64 6f 6e 65 20 3a 31 3b 20 20 20 20 20 20 20 2f  done :1;       /
19840 2a 20 41 20 66 6c 61 67 20 74 6f 20 69 6e 64 69  * A flag to indi
19850 63 61 74 65 20 77 68 65 6e 20 70 72 6f 63 65 73  cate when proces
19860 73 69 6e 67 20 69 73 20 66 69 6e 69 73 68 65 64  sing is finished
19870 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
19880 20 62 53 70 61 6e 49 73 54 61 62 20 3a 31 3b 20   bSpanIsTab :1; 
19890 2f 2a 20 7a 53 70 61 6e 20 68 6f 6c 64 73 20 44  /* zSpan holds D
198a0 42 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a  B.TABLE.COLUMN *
198b0 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 72  /.    unsigned r
198c0 65 75 73 61 62 6c 65 20 3a 31 3b 20 20 20 2f 2a  eusable :1;   /*
198d0 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73   Constant expres
198e0 73 69 6f 6e 20 69 73 20 72 65 75 73 61 62 6c 65  sion is reusable
198f0 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a   */.    union {.
19900 20 20 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20        struct {. 
19910 20 20 20 20 20 20 20 75 31 36 20 69 4f 72 64 65         u16 iOrde
19920 72 42 79 43 6f 6c 3b 20 20 20 20 20 20 2f 2a 20  rByCol;      /* 
19930 46 6f 72 20 4f 52 44 45 52 20 42 59 2c 20 63 6f  For ORDER BY, co
19940 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 72  lumn number in r
19950 65 73 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20 20  esult set */.   
19960 20 20 20 20 20 75 31 36 20 69 41 6c 69 61 73 3b       u16 iAlias;
19970 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
19980 64 65 78 20 69 6e 74 6f 20 50 61 72 73 65 2e 61  dex into Parse.a
19990 41 6c 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d  Alias[] for zNam
199a0 65 20 2a 2f 0a 20 20 20 20 20 20 7d 20 78 3b 0a  e */.      } x;.
199b0 20 20 20 20 20 20 69 6e 74 20 69 43 6f 6e 73 74        int iConst
199c0 45 78 70 72 52 65 67 3b 20 20 20 20 20 20 2f 2a  ExprReg;      /*
199d0 20 52 65 67 69 73 74 65 72 20 69 6e 20 77 68 69   Register in whi
199e0 63 68 20 45 78 70 72 20 76 61 6c 75 65 20 69 73  ch Expr value is
199f0 20 63 61 63 68 65 64 20 2a 2f 0a 20 20 20 20 7d   cached */.    }
19a00 20 75 3b 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20   u;.  } a[1];   
19a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
19a20 2a 20 4f 6e 65 20 73 6c 6f 74 20 66 6f 72 20 65  * One slot for e
19a30 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20 69  ach expression i
19a40 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b  n the list */.};
19a50 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
19a60 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75  nce of this stru
19a70 63 74 75 72 65 20 69 73 20 75 73 65 64 20 62 79  cture is used by
19a80 20 74 68 65 20 70 61 72 73 65 72 20 74 6f 20 72   the parser to r
19a90 65 63 6f 72 64 20 62 6f 74 68 0a 2a 2a 20 74 68  ecord both.** th
19aa0 65 20 70 61 72 73 65 20 74 72 65 65 20 66 6f 72  e parse tree for
19ab0 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61   an expression a
19ac0 6e 64 20 74 68 65 20 73 70 61 6e 20 6f 66 20 69  nd the span of i
19ad0 6e 70 75 74 20 74 65 78 74 20 66 6f 72 20 61 6e  nput text for an
19ae0 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a  .** expression..
19af0 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 53 70  */.struct ExprSp
19b00 61 6e 20 7b 0a 20 20 45 78 70 72 20 2a 70 45 78  an {.  Expr *pEx
19b10 70 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  pr;          /* 
19b20 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 70  The expression p
19b30 61 72 73 65 20 74 72 65 65 20 2a 2f 0a 20 20 63  arse tree */.  c
19b40 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 61 72  onst char *zStar
19b50 74 3b 20 20 20 2f 2a 20 46 69 72 73 74 20 63 68  t;   /* First ch
19b60 61 72 61 63 74 65 72 20 6f 66 20 69 6e 70 75 74  aracter of input
19b70 20 74 65 78 74 20 2a 2f 0a 20 20 63 6f 6e 73 74   text */.  const
19b80 20 63 68 61 72 20 2a 7a 45 6e 64 3b 20 20 20 20   char *zEnd;    
19b90 20 2f 2a 20 4f 6e 65 20 63 68 61 72 61 63 74 65   /* One characte
19ba0 72 20 70 61 73 74 20 74 68 65 20 65 6e 64 20 6f  r past the end o
19bb0 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a  f input text */.
19bc0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
19bd0 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
19be0 72 75 63 74 75 72 65 20 63 61 6e 20 68 6f 6c 64  ructure can hold
19bf0 20 61 20 73 69 6d 70 6c 65 20 6c 69 73 74 20 6f   a simple list o
19c00 66 20 69 64 65 6e 74 69 66 69 65 72 73 2c 0a 2a  f identifiers,.*
19c10 2a 20 73 75 63 68 20 61 73 20 74 68 65 20 6c 69  * such as the li
19c20 73 74 20 22 61 2c 62 2c 63 22 20 69 6e 20 74 68  st "a,b,c" in th
19c30 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74  e following stat
19c40 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20  ements:.**.**   
19c50 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
19c60 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53 20 2e  (a,b,c) VALUES .
19c70 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41  ..;.**      CREA
19c80 54 45 20 49 4e 44 45 58 20 69 64 78 20 4f 4e 20  TE INDEX idx ON 
19c90 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20 20  t(a,b,c);.**    
19ca0 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52    CREATE TRIGGER
19cb0 20 74 72 69 67 20 42 45 46 4f 52 45 20 55 50 44   trig BEFORE UPD
19cc0 41 54 45 20 4f 4e 20 74 28 61 2c 62 2c 63 29 20  ATE ON t(a,b,c) 
19cd0 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49  ...;.**.** The I
19ce0 64 4c 69 73 74 2e 61 2e 69 64 78 20 66 69 65 6c  dList.a.idx fiel
19cf0 64 20 69 73 20 75 73 65 64 20 77 68 65 6e 20 74  d is used when t
19d00 68 65 20 49 64 4c 69 73 74 20 72 65 70 72 65 73  he IdList repres
19d10 65 6e 74 73 20 74 68 65 20 6c 69 73 74 20 6f 66  ents the list of
19d20 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  .** column names
19d30 20 61 66 74 65 72 20 61 20 74 61 62 6c 65 20 6e   after a table n
19d40 61 6d 65 20 69 6e 20 61 6e 20 49 4e 53 45 52 54  ame in an INSERT
19d50 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20   statement.  In 
19d60 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a  the statement.**
19d70 0a 2a 2a 20 20 20 20 20 49 4e 53 45 52 54 20 49  .**     INSERT I
19d80 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e  NTO t(a,b,c) ...
19d90 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61 22 20 69 73  .**.** If "a" is
19da0 20 74 68 65 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e   the k-th column
19db0 20 6f 66 20 74 61 62 6c 65 20 22 74 22 2c 20 74   of table "t", t
19dc0 68 65 6e 20 49 64 4c 69 73 74 2e 61 5b 30 5d 2e  hen IdList.a[0].
19dd0 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63  idx==k..*/.struc
19de0 74 20 49 64 4c 69 73 74 20 7b 0a 20 20 73 74 72  t IdList {.  str
19df0 75 63 74 20 49 64 4c 69 73 74 5f 69 74 65 6d 20  uct IdList_item 
19e00 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d  {.    char *zNam
19e10 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20  e;      /* Name 
19e20 6f 66 20 74 68 65 20 69 64 65 6e 74 69 66 69 65  of the identifie
19e30 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 64 78  r */.    int idx
19e40 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e  ;          /* In
19e50 64 65 78 20 69 6e 20 73 6f 6d 65 20 54 61 62 6c  dex in some Tabl
19e60 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f  e.aCol[] of a co
19e70 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d 65  lumn named zName
19e80 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20 69 6e   */.  } *a;.  in
19e90 74 20 6e 49 64 3b 20 20 20 20 20 20 20 20 20 2f  t nId;         /
19ea0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 69 64 65 6e  * Number of iden
19eb0 74 69 66 69 65 72 73 20 6f 6e 20 74 68 65 20 6c  tifiers on the l
19ec0 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ist */.};../*.**
19ed0 20 54 68 65 20 62 69 74 6d 61 73 6b 20 64 61 74   The bitmask dat
19ee0 61 74 79 70 65 20 64 65 66 69 6e 65 64 20 62 65  atype defined be
19ef0 6c 6f 77 20 69 73 20 75 73 65 64 20 66 6f 72 20  low is used for 
19f00 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61  various optimiza
19f10 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43 68 61  tions..**.** Cha
19f20 6e 67 69 6e 67 20 74 68 69 73 20 66 72 6f 6d 20  nging this from 
19f30 61 20 36 34 2d 62 69 74 20 74 6f 20 61 20 33 32  a 64-bit to a 32
19f40 2d 62 69 74 20 74 79 70 65 20 6c 69 6d 69 74 73  -bit type limits
19f50 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 2a   the number of.*
19f60 2a 20 74 61 62 6c 65 73 20 69 6e 20 61 20 6a 6f  * tables in a jo
19f70 69 6e 20 74 6f 20 33 32 20 69 6e 73 74 65 61 64  in to 32 instead
19f80 20 6f 66 20 36 34 2e 20 20 42 75 74 20 69 74 20   of 64.  But it 
19f90 61 6c 73 6f 20 72 65 64 75 63 65 73 20 74 68 65  also reduces the
19fa0 20 73 69 7a 65 0a 2a 2a 20 6f 66 20 74 68 65 20   size.** of the 
19fb0 6c 69 62 72 61 72 79 20 62 79 20 37 33 38 20 62  library by 738 b
19fc0 79 74 65 73 20 6f 6e 20 69 78 38 36 2e 0a 2a 2f  ytes on ix86..*/
19fd0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 42  .#ifdef SQLITE_B
19fe0 49 54 4d 41 53 4b 5f 54 59 50 45 0a 20 20 74 79  ITMASK_TYPE.  ty
19ff0 70 65 64 65 66 20 53 51 4c 49 54 45 5f 42 49 54  pedef SQLITE_BIT
1a000 4d 41 53 4b 5f 54 59 50 45 20 42 69 74 6d 61 73  MASK_TYPE Bitmas
1a010 6b 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64  k;.#else.  typed
1a020 65 66 20 75 36 34 20 42 69 74 6d 61 73 6b 3b 0a  ef u64 Bitmask;.
1a030 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
1a040 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73  e number of bits
1a050 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 2e 20 20   in a Bitmask.  
1a060 22 42 4d 53 22 20 6d 65 61 6e 73 20 22 42 69 74  "BMS" means "Bit
1a070 4d 61 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f 0a 23  Mask Size"..*/.#
1a080 64 65 66 69 6e 65 20 42 4d 53 20 20 28 28 69 6e  define BMS  ((in
1a090 74 29 28 73 69 7a 65 6f 66 28 42 69 74 6d 61 73  t)(sizeof(Bitmas
1a0a0 6b 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20 41 20  k)*8))../*.** A 
1a0b0 62 69 74 20 69 6e 20 61 20 42 69 74 6d 61 73 6b  bit in a Bitmask
1a0c0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b  .*/.#define MASK
1a0d0 42 49 54 28 6e 29 20 20 20 28 28 28 42 69 74 6d  BIT(n)   (((Bitm
1a0e0 61 73 6b 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65  ask)1)<<(n)).#de
1a0f0 66 69 6e 65 20 4d 41 53 4b 42 49 54 33 32 28 6e  fine MASKBIT32(n
1a100 29 20 28 28 28 75 6e 73 69 67 6e 65 64 20 69 6e  ) (((unsigned in
1a110 74 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65 66 69  t)1)<<(n)).#defi
1a120 6e 65 20 41 4c 4c 42 49 54 53 20 20 20 20 20 20  ne ALLBITS      
1a130 28 28 42 69 74 6d 61 73 6b 29 2d 31 29 0a 0a 2f  ((Bitmask)-1)../
1a140 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
1a150 6e 67 20 73 74 72 75 63 74 75 72 65 20 64 65 73  ng structure des
1a160 63 72 69 62 65 73 20 74 68 65 20 46 52 4f 4d 20  cribes the FROM 
1a170 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45  clause of a SELE
1a180 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a  CT statement..**
1a190 20 45 61 63 68 20 74 61 62 6c 65 20 6f 72 20 73   Each table or s
1a1a0 75 62 71 75 65 72 79 20 69 6e 20 74 68 65 20 46  ubquery in the F
1a1b0 52 4f 4d 20 63 6c 61 75 73 65 20 69 73 20 61 20  ROM clause is a 
1a1c0 73 65 70 61 72 61 74 65 20 65 6c 65 6d 65 6e 74  separate element
1a1d0 20 6f 66 0a 2a 2a 20 74 68 65 20 53 72 63 4c 69   of.** the SrcLi
1a1e0 73 74 2e 61 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a  st.a[] array..**
1a1f0 0a 2a 2a 20 57 69 74 68 20 74 68 65 20 61 64 64  .** With the add
1a200 69 74 69 6f 6e 20 6f 66 20 6d 75 6c 74 69 70 6c  ition of multipl
1a210 65 20 64 61 74 61 62 61 73 65 20 73 75 70 70 6f  e database suppo
1a220 72 74 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  rt, the followin
1a230 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 63  g structure.** c
1a240 61 6e 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20  an also be used 
1a250 74 6f 20 64 65 73 63 72 69 62 65 20 61 20 70 61  to describe a pa
1a260 72 74 69 63 75 6c 61 72 20 74 61 62 6c 65 20 73  rticular table s
1a270 75 63 68 20 61 73 20 74 68 65 20 74 61 62 6c 65  uch as the table
1a280 20 74 68 61 74 0a 2a 2a 20 69 73 20 6d 6f 64 69   that.** is modi
1a290 66 69 65 64 20 62 79 20 61 6e 20 49 4e 53 45 52  fied by an INSER
1a2a0 54 2c 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50  T, DELETE, or UP
1a2b0 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 20  DATE statement. 
1a2c0 20 49 6e 20 73 74 61 6e 64 61 72 64 20 53 51 4c   In standard SQL
1a2d0 2c 0a 2a 2a 20 73 75 63 68 20 61 20 74 61 62 6c  ,.** such a tabl
1a2e0 65 20 6d 75 73 74 20 62 65 20 61 20 73 69 6d 70  e must be a simp
1a2f0 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 20 20 42 75  le name: ID.  Bu
1a300 74 20 69 6e 20 53 51 4c 69 74 65 2c 20 74 68 65  t in SQLite, the
1a310 20 74 61 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f   table can.** no
1a320 77 20 62 65 20 69 64 65 6e 74 69 66 69 65 64 20  w be identified 
1a330 62 79 20 61 20 64 61 74 61 62 61 73 65 20 6e 61  by a database na
1a340 6d 65 2c 20 61 20 64 6f 74 2c 20 74 68 65 6e 20  me, a dot, then 
1a350 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 3a 20  the table name: 
1a360 49 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ID.ID..**.** The
1a370 20 6a 6f 69 6e 74 79 70 65 20 73 74 61 72 74 73   jointype starts
1a380 20 6f 75 74 20 73 68 6f 77 69 6e 67 20 74 68 65   out showing the
1a390 20 6a 6f 69 6e 20 74 79 70 65 20 62 65 74 77 65   join type betwe
1a3a0 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  en the current t
1a3b0 61 62 6c 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20  able.** and the 
1a3c0 6e 65 78 74 20 74 61 62 6c 65 20 6f 6e 20 74 68  next table on th
1a3d0 65 20 6c 69 73 74 2e 20 20 54 68 65 20 70 61 72  e list.  The par
1a3e0 73 65 72 20 62 75 69 6c 64 73 20 74 68 65 20 6c  ser builds the l
1a3f0 69 73 74 20 74 68 69 73 20 77 61 79 2e 0a 2a 2a  ist this way..**
1a400 20 42 75 74 20 73 71 6c 69 74 65 33 53 72 63 4c   But sqlite3SrcL
1a410 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65  istShiftJoinType
1a420 28 29 20 6c 61 74 65 72 20 73 68 69 66 74 73 20  () later shifts 
1a430 74 68 65 20 6a 6f 69 6e 74 79 70 65 73 20 73 6f  the jointypes so
1a440 20 74 68 61 74 20 65 61 63 68 0a 2a 2a 20 6a 6f   that each.** jo
1a450 69 6e 74 79 70 65 20 65 78 70 72 65 73 73 65 73  intype expresses
1a460 20 74 68 65 20 6a 6f 69 6e 20 62 65 74 77 65 65   the join betwee
1a470 6e 20 74 68 65 20 74 61 62 6c 65 20 61 6e 64 20  n the table and 
1a480 74 68 65 20 70 72 65 76 69 6f 75 73 20 74 61 62  the previous tab
1a490 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65  le..**.** In the
1a4a0 20 63 6f 6c 55 73 65 64 20 66 69 65 6c 64 2c 20   colUsed field, 
1a4b0 74 68 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62  the high-order b
1a4c0 69 74 20 28 62 69 74 20 36 33 29 20 69 73 20 73  it (bit 63) is s
1a4d0 65 74 20 69 66 20 74 68 65 20 74 61 62 6c 65 0a  et if the table.
1a4e0 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65  ** contains more
1a4f0 20 74 68 61 6e 20 36 33 20 63 6f 6c 75 6d 6e 73   than 63 columns
1a500 20 61 6e 64 20 74 68 65 20 36 34 2d 74 68 20 6f   and the 64-th o
1a510 72 20 6c 61 74 65 72 20 63 6f 6c 75 6d 6e 20 69  r later column i
1a520 73 20 75 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63  s used..*/.struc
1a530 74 20 53 72 63 4c 69 73 74 20 7b 0a 20 20 69 6e  t SrcList {.  in
1a540 74 20 6e 53 72 63 3b 20 20 20 20 20 20 20 20 2f  t nSrc;        /
1a550 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c  * Number of tabl
1a560 65 73 20 6f 72 20 73 75 62 71 75 65 72 69 65 73  es or subqueries
1a570 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   in the FROM cla
1a580 75 73 65 20 2a 2f 0a 20 20 75 33 32 20 6e 41 6c  use */.  u32 nAl
1a590 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  loc;      /* Num
1a5a0 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 61  ber of entries a
1a5b0 6c 6c 6f 63 61 74 65 64 20 69 6e 20 61 5b 5d 20  llocated in a[] 
1a5c0 62 65 6c 6f 77 20 2a 2f 0a 20 20 73 74 72 75 63  below */.  struc
1a5d0 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 7b  t SrcList_item {
1a5e0 0a 20 20 20 20 53 63 68 65 6d 61 20 2a 70 53 63  .    Schema *pSc
1a5f0 68 65 6d 61 3b 20 20 2f 2a 20 53 63 68 65 6d 61  hema;  /* Schema
1a600 20 74 6f 20 77 68 69 63 68 20 74 68 69 73 20 69   to which this i
1a610 74 65 6d 20 69 73 20 66 69 78 65 64 20 2a 2f 0a  tem is fixed */.
1a620 20 20 20 20 63 68 61 72 20 2a 7a 44 61 74 61 62      char *zDatab
1a630 61 73 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66  ase;  /* Name of
1a640 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e   database holdin
1a650 67 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  g this table */.
1a660 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b      char *zName;
1a670 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
1a680 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20   the table */.  
1a690 20 20 63 68 61 72 20 2a 7a 41 6c 69 61 73 3b 20    char *zAlias; 
1a6a0 20 20 20 20 2f 2a 20 54 68 65 20 22 42 22 20 70      /* The "B" p
1a6b0 61 72 74 20 6f 66 20 61 20 22 41 20 41 53 20 42  art of a "A AS B
1a6c0 22 20 70 68 72 61 73 65 2e 20 20 7a 4e 61 6d 65  " phrase.  zName
1a6d0 20 69 73 20 74 68 65 20 22 41 22 20 2a 2f 0a 20   is the "A" */. 
1a6e0 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20     Table *pTab; 
1a6f0 20 20 20 20 20 2f 2a 20 41 6e 20 53 51 4c 20 74       /* An SQL t
1a700 61 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64 69  able correspondi
1a710 6e 67 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20  ng to zName */. 
1a720 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65     Select *pSele
1a730 63 74 3b 20 20 2f 2a 20 41 20 53 45 4c 45 43 54  ct;  /* A SELECT
1a740 20 73 74 61 74 65 6d 65 6e 74 20 75 73 65 64 20   statement used 
1a750 69 6e 20 70 6c 61 63 65 20 6f 66 20 61 20 74 61  in place of a ta
1a760 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 20 20  ble name */.    
1a770 69 6e 74 20 61 64 64 72 46 69 6c 6c 53 75 62 3b  int addrFillSub;
1a780 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20    /* Address of 
1a790 73 75 62 72 6f 75 74 69 6e 65 20 74 6f 20 6d 61  subroutine to ma
1a7a0 6e 69 66 65 73 74 20 61 20 73 75 62 71 75 65 72  nifest a subquer
1a7b0 79 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67  y */.    int reg
1a7c0 52 65 74 75 72 6e 3b 20 20 20 20 2f 2a 20 52 65  Return;    /* Re
1a7d0 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72  gister holding r
1a7e0 65 74 75 72 6e 20 61 64 64 72 65 73 73 20 6f 66  eturn address of
1a7f0 20 61 64 64 72 46 69 6c 6c 53 75 62 20 2a 2f 0a   addrFillSub */.
1a800 20 20 20 20 69 6e 74 20 72 65 67 52 65 73 75 6c      int regResul
1a810 74 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65  t;    /* Registe
1a820 72 73 20 68 6f 6c 64 69 6e 67 20 72 65 73 75 6c  rs holding resul
1a830 74 73 20 6f 66 20 61 20 63 6f 2d 72 6f 75 74 69  ts of a co-routi
1a840 6e 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74  ne */.    struct
1a850 20 7b 0a 20 20 20 20 20 20 75 38 20 6a 6f 69 6e   {.      u8 join
1a860 74 79 70 65 3b 20 20 20 20 20 20 2f 2a 20 54 79  type;      /* Ty
1a870 70 65 20 6f 66 20 6a 6f 69 6e 20 62 65 74 77 65  pe of join betwe
1a880 65 6e 20 74 68 69 73 20 74 61 62 6c 65 20 61 6e  en this table an
1a890 64 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 2a  d the previous *
1a8a0 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64  /.      unsigned
1a8b0 20 6e 6f 74 49 6e 64 65 78 65 64 20 3a 31 3b 20   notIndexed :1; 
1a8c0 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
1a8d0 65 72 65 20 69 73 20 61 20 4e 4f 54 20 49 4e 44  ere is a NOT IND
1a8e0 45 58 45 44 20 63 6c 61 75 73 65 20 2a 2f 0a 20  EXED clause */. 
1a8f0 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73       unsigned is
1a900 49 6e 64 65 78 65 64 42 79 20 3a 31 3b 20 20 20  IndexedBy :1;   
1a910 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 72 65  /* True if there
1a920 20 69 73 20 61 6e 20 49 4e 44 45 58 45 44 20 42   is an INDEXED B
1a930 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20  Y clause */.    
1a940 20 20 75 6e 73 69 67 6e 65 64 20 69 73 54 61 62    unsigned isTab
1a950 46 75 6e 63 20 3a 31 3b 20 20 20 20 20 2f 2a 20  Func :1;     /* 
1a960 54 72 75 65 20 69 66 20 74 61 62 6c 65 2d 76 61  True if table-va
1a970 6c 75 65 64 2d 66 75 6e 63 74 69 6f 6e 20 73 79  lued-function sy
1a980 6e 74 61 78 20 2a 2f 0a 20 20 20 20 20 20 75 6e  ntax */.      un
1a990 73 69 67 6e 65 64 20 69 73 43 6f 72 72 65 6c 61  signed isCorrela
1a9a0 74 65 64 20 3a 31 3b 20 20 2f 2a 20 54 72 75 65  ted :1;  /* True
1a9b0 20 69 66 20 73 75 62 2d 71 75 65 72 79 20 69 73   if sub-query is
1a9c0 20 63 6f 72 72 65 6c 61 74 65 64 20 2a 2f 0a 20   correlated */. 
1a9d0 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 76 69       unsigned vi
1a9e0 61 43 6f 72 6f 75 74 69 6e 65 20 3a 31 3b 20 20  aCoroutine :1;  
1a9f0 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 65 64 20 61  /* Implemented a
1aa00 73 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a  s a co-routine *
1aa10 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64  /.      unsigned
1aa20 20 69 73 52 65 63 75 72 73 69 76 65 20 3a 31 3b   isRecursive :1;
1aa30 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 72     /* True for r
1aa40 65 63 75 72 73 69 76 65 20 72 65 66 65 72 65 6e  ecursive referen
1aa50 63 65 20 69 6e 20 57 49 54 48 20 2a 2f 0a 20 20  ce in WITH */.  
1aa60 20 20 7d 20 66 67 3b 0a 23 69 66 6e 64 65 66 20    } fg;.#ifndef 
1aa70 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c  SQLITE_OMIT_EXPL
1aa80 41 49 4e 0a 20 20 20 20 75 38 20 69 53 65 6c 65  AIN.    u8 iSele
1aa90 63 74 49 64 3b 20 20 20 20 20 2f 2a 20 49 66 20  ctId;     /* If 
1aaa0 70 53 65 6c 65 63 74 21 3d 30 2c 20 74 68 65 20  pSelect!=0, the 
1aab0 69 64 20 6f 66 20 74 68 65 20 73 75 62 2d 73 65  id of the sub-se
1aac0 6c 65 63 74 20 69 6e 20 45 51 50 20 2a 2f 0a 23  lect in EQP */.#
1aad0 65 6e 64 69 66 0a 20 20 20 20 69 6e 74 20 69 43  endif.    int iC
1aae0 75 72 73 6f 72 3b 20 20 20 20 20 20 2f 2a 20 54  ursor;      /* T
1aaf0 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 6e  he VDBE cursor n
1ab00 75 6d 62 65 72 20 75 73 65 64 20 74 6f 20 61 63  umber used to ac
1ab10 63 65 73 73 20 74 68 69 73 20 74 61 62 6c 65 20  cess this table 
1ab20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 4f 6e  */.    Expr *pOn
1ab30 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ;        /* The 
1ab40 4f 4e 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a  ON clause of a j
1ab50 6f 69 6e 20 2a 2f 0a 20 20 20 20 49 64 4c 69 73  oin */.    IdLis
1ab60 74 20 2a 70 55 73 69 6e 67 3b 20 20 20 2f 2a 20  t *pUsing;   /* 
1ab70 54 68 65 20 55 53 49 4e 47 20 63 6c 61 75 73 65  The USING clause
1ab80 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20   of a join */.  
1ab90 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c 55 73 65    Bitmask colUse
1aba0 64 3b 20 20 2f 2a 20 42 69 74 20 4e 20 28 31 3c  d;  /* Bit N (1<
1abb0 3c 4e 29 20 73 65 74 20 69 66 20 63 6f 6c 75 6d  <N) set if colum
1abc0 6e 20 4e 20 6f 66 20 70 54 61 62 20 69 73 20 75  n N of pTab is u
1abd0 73 65 64 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e  sed */.    union
1abe0 20 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a 7a   {.      char *z
1abf0 49 6e 64 65 78 65 64 42 79 3b 20 20 20 20 2f 2a  IndexedBy;    /*
1ac00 20 49 64 65 6e 74 69 66 69 65 72 20 66 72 6f 6d   Identifier from
1ac10 20 22 49 4e 44 45 58 45 44 20 42 59 20 3c 7a 49   "INDEXED BY <zI
1ac20 6e 64 65 78 3e 22 20 63 6c 61 75 73 65 20 2a 2f  ndex>" clause */
1ac30 0a 20 20 20 20 20 20 45 78 70 72 4c 69 73 74 20  .      ExprList 
1ac40 2a 70 46 75 6e 63 41 72 67 3b 20 20 2f 2a 20 41  *pFuncArg;  /* A
1ac50 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 61 62 6c  rguments to tabl
1ac60 65 2d 76 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f  e-valued-functio
1ac70 6e 20 2a 2f 0a 20 20 20 20 7d 20 75 31 3b 0a 20  n */.    } u1;. 
1ac80 20 20 20 49 6e 64 65 78 20 2a 70 49 42 49 6e 64     Index *pIBInd
1ac90 65 78 3b 20 20 2f 2a 20 49 6e 64 65 78 20 73 74  ex;  /* Index st
1aca0 72 75 63 74 75 72 65 20 63 6f 72 72 65 73 70 6f  ructure correspo
1acb0 6e 64 69 6e 67 20 74 6f 20 75 31 2e 7a 49 6e 64  nding to u1.zInd
1acc0 65 78 65 64 42 79 20 2a 2f 0a 20 20 7d 20 61 5b  exedBy */.  } a[
1acd0 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  1];             
1ace0 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72  /* One entry for
1acf0 20 65 61 63 68 20 69 64 65 6e 74 69 66 69 65 72   each identifier
1ad00 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   on the list */.
1ad10 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69 74  };../*.** Permit
1ad20 74 65 64 20 76 61 6c 75 65 73 20 6f 66 20 74 68  ted values of th
1ad30 65 20 53 72 63 4c 69 73 74 2e 61 2e 6a 6f 69 6e  e SrcList.a.join
1ad40 74 79 70 65 20 66 69 65 6c 64 0a 2a 2f 0a 23 64  type field.*/.#d
1ad50 65 66 69 6e 65 20 4a 54 5f 49 4e 4e 45 52 20 20  efine JT_INNER  
1ad60 20 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20     0x0001    /* 
1ad70 41 6e 79 20 6b 69 6e 64 20 6f 66 20 69 6e 6e 65  Any kind of inne
1ad80 72 20 6f 72 20 63 72 6f 73 73 20 6a 6f 69 6e 20  r or cross join 
1ad90 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 43 52  */.#define JT_CR
1ada0 4f 53 53 20 20 20 20 20 30 78 30 30 30 32 20 20  OSS     0x0002  
1adb0 20 20 2f 2a 20 45 78 70 6c 69 63 69 74 20 75 73    /* Explicit us
1adc0 65 20 6f 66 20 74 68 65 20 43 52 4f 53 53 20 6b  e of the CROSS k
1add0 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e  eyword */.#defin
1ade0 65 20 4a 54 5f 4e 41 54 55 52 41 4c 20 20 20 30  e JT_NATURAL   0
1adf0 78 30 30 30 34 20 20 20 20 2f 2a 20 54 72 75 65  x0004    /* True
1ae00 20 66 6f 72 20 61 20 22 6e 61 74 75 72 61 6c 22   for a "natural"
1ae10 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   join */.#define
1ae20 20 4a 54 5f 4c 45 46 54 20 20 20 20 20 20 30 78   JT_LEFT      0x
1ae30 30 30 30 38 20 20 20 20 2f 2a 20 4c 65 66 74 20  0008    /* Left 
1ae40 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64  outer join */.#d
1ae50 65 66 69 6e 65 20 4a 54 5f 52 49 47 48 54 20 20  efine JT_RIGHT  
1ae60 20 20 20 30 78 30 30 31 30 20 20 20 20 2f 2a 20     0x0010    /* 
1ae70 52 69 67 68 74 20 6f 75 74 65 72 20 6a 6f 69 6e  Right outer join
1ae80 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4f   */.#define JT_O
1ae90 55 54 45 52 20 20 20 20 20 30 78 30 30 32 30 20  UTER     0x0020 
1aea0 20 20 20 2f 2a 20 54 68 65 20 22 4f 55 54 45 52     /* The "OUTER
1aeb0 22 20 6b 65 79 77 6f 72 64 20 69 73 20 70 72 65  " keyword is pre
1aec0 73 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  sent */.#define 
1aed0 4a 54 5f 45 52 52 4f 52 20 20 20 20 20 30 78 30  JT_ERROR     0x0
1aee0 30 34 30 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f 77  040    /* unknow
1aef0 6e 20 6f 72 20 75 6e 73 75 70 70 6f 72 74 65 64  n or unsupported
1af00 20 6a 6f 69 6e 20 74 79 70 65 20 2a 2f 0a 0a 0a   join type */...
1af10 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 61 70 70 72  /*.** Flags appr
1af20 6f 70 72 69 61 74 65 20 66 6f 72 20 74 68 65 20  opriate for the 
1af30 77 63 74 72 6c 46 6c 61 67 73 20 70 61 72 61 6d  wctrlFlags param
1af40 65 74 65 72 20 6f 66 20 73 71 6c 69 74 65 33 57  eter of sqlite3W
1af50 68 65 72 65 42 65 67 69 6e 28 29 0a 2a 2a 20 61  hereBegin().** a
1af60 6e 64 20 74 68 65 20 57 68 65 72 65 49 6e 66 6f  nd the WhereInfo
1af70 2e 77 63 74 72 6c 46 6c 61 67 73 20 6d 65 6d 62  .wctrlFlags memb
1af80 65 72 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20  er..**.** Value 
1af90 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66  constraints (enf
1afa0 6f 72 63 65 64 20 76 69 61 20 61 73 73 65 72 74  orced via assert
1afb0 28 29 29 3a 0a 2a 2a 20 20 20 20 20 57 48 45 52  ()):.**     WHER
1afc0 45 5f 55 53 45 5f 4c 49 4d 49 54 20 20 3d 3d 20  E_USE_LIMIT  == 
1afd0 53 46 5f 46 69 78 65 64 4c 69 6d 69 74 0a 2a 2f  SF_FixedLimit.*/
1afe0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
1aff0 52 44 45 52 42 59 5f 4e 4f 52 4d 41 4c 20 20 20  RDERBY_NORMAL   
1b000 30 78 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20  0x0000 /* No-op 
1b010 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1b020 5f 4f 52 44 45 52 42 59 5f 4d 49 4e 20 20 20 20  _ORDERBY_MIN    
1b030 20 20 30 78 30 30 30 31 20 2f 2a 20 4f 52 44 45    0x0001 /* ORDE
1b040 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20  R BY processing 
1b050 66 6f 72 20 6d 69 6e 28 29 20 66 75 6e 63 20 2a  for min() func *
1b060 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1b070 4f 52 44 45 52 42 59 5f 4d 41 58 20 20 20 20 20  ORDERBY_MAX     
1b080 20 30 78 30 30 30 32 20 2f 2a 20 4f 52 44 45 52   0x0002 /* ORDER
1b090 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66   BY processing f
1b0a0 6f 72 20 6d 61 78 28 29 20 66 75 6e 63 20 2a 2f  or max() func */
1b0b0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
1b0c0 4e 45 50 41 53 53 5f 44 45 53 49 52 45 44 20 20  NEPASS_DESIRED  
1b0d0 30 78 30 30 30 34 20 2f 2a 20 57 61 6e 74 20 74  0x0004 /* Want t
1b0e0 6f 20 64 6f 20 6f 6e 65 2d 70 61 73 73 20 55 50  o do one-pass UP
1b0f0 44 41 54 45 2f 44 45 4c 45 54 45 20 2a 2f 0a 23  DATE/DELETE */.#
1b100 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45  define WHERE_ONE
1b110 50 41 53 53 5f 4d 55 4c 54 49 52 4f 57 20 30 78  PASS_MULTIROW 0x
1b120 30 30 30 38 20 2f 2a 20 4f 4e 45 50 41 53 53 20  0008 /* ONEPASS 
1b130 69 73 20 6f 6b 20 77 69 74 68 20 6d 75 6c 74 69  is ok with multi
1b140 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 23 64 65 66  ple rows */.#def
1b150 69 6e 65 20 57 48 45 52 45 5f 44 55 50 4c 49 43  ine WHERE_DUPLIC
1b160 41 54 45 53 5f 4f 4b 20 20 20 20 30 78 30 30 31  ATES_OK    0x001
1b170 30 20 2f 2a 20 4f 6b 20 74 6f 20 72 65 74 75 72  0 /* Ok to retur
1b180 6e 20 61 20 72 6f 77 20 6d 6f 72 65 20 74 68 61  n a row more tha
1b190 6e 20 6f 6e 63 65 20 2a 2f 0a 23 64 65 66 69 6e  n once */.#defin
1b1a0 65 20 57 48 45 52 45 5f 4f 52 5f 53 55 42 43 4c  e WHERE_OR_SUBCL
1b1b0 41 55 53 45 20 20 20 20 20 30 78 30 30 32 30 20  AUSE     0x0020 
1b1c0 2f 2a 20 50 72 6f 63 65 73 73 69 6e 67 20 61 20  /* Processing a 
1b1d0 73 75 62 2d 57 48 45 52 45 20 61 73 20 70 61 72  sub-WHERE as par
1b1e0 74 20 6f 66 0a 20 20 20 20 20 20 20 20 20 20 20  t of.           
1b1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b200 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68             ** th
1b210 65 20 4f 52 20 6f 70 74 69 6d 69 7a 61 74 69 6f  e OR optimizatio
1b220 6e 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  n  */.#define WH
1b230 45 52 45 5f 47 52 4f 55 50 42 59 20 20 20 20 20  ERE_GROUPBY     
1b240 20 20 20 20 20 30 78 30 30 34 30 20 2f 2a 20 70       0x0040 /* p
1b250 4f 72 64 65 72 42 79 20 69 73 20 72 65 61 6c 6c  OrderBy is reall
1b260 79 20 61 20 47 52 4f 55 50 20 42 59 20 2a 2f 0a  y a GROUP BY */.
1b270 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
1b280 53 54 49 4e 43 54 42 59 20 20 20 20 20 20 20 30  STINCTBY       0
1b290 78 30 30 38 30 20 2f 2a 20 70 4f 72 64 65 72 62  x0080 /* pOrderb
1b2a0 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20 44 49  y is really a DI
1b2b0 53 54 49 4e 43 54 20 63 6c 61 75 73 65 20 2a 2f  STINCT clause */
1b2c0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 57  .#define WHERE_W
1b2d0 41 4e 54 5f 44 49 53 54 49 4e 43 54 20 20 20 20  ANT_DISTINCT    
1b2e0 30 78 30 31 30 30 20 2f 2a 20 41 6c 6c 20 6f 75  0x0100 /* All ou
1b2f0 74 70 75 74 20 6e 65 65 64 73 20 74 6f 20 62 65  tput needs to be
1b300 20 64 69 73 74 69 6e 63 74 20 2a 2f 0a 23 64 65   distinct */.#de
1b310 66 69 6e 65 20 57 48 45 52 45 5f 53 4f 52 54 42  fine WHERE_SORTB
1b320 59 47 52 4f 55 50 20 20 20 20 20 20 30 78 30 32  YGROUP      0x02
1b330 30 30 20 2f 2a 20 53 75 70 70 6f 72 74 20 73 71  00 /* Support sq
1b340 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f 72 74  lite3WhereIsSort
1b350 65 64 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ed() */.#define 
1b360 57 48 45 52 45 5f 53 45 45 4b 5f 54 41 42 4c 45  WHERE_SEEK_TABLE
1b370 20 20 20 20 20 20 20 30 78 30 34 30 30 20 2f 2a         0x0400 /*
1b380 20 44 6f 20 6e 6f 74 20 64 65 66 65 72 20 73 65   Do not defer se
1b390 65 6b 73 20 6f 6e 20 6d 61 69 6e 20 74 61 62 6c  eks on main tabl
1b3a0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  e */.#define WHE
1b3b0 52 45 5f 4f 52 44 45 52 42 59 5f 4c 49 4d 49 54  RE_ORDERBY_LIMIT
1b3c0 20 20 20 20 30 78 30 38 30 30 20 2f 2a 20 4f 52      0x0800 /* OR
1b3d0 44 45 52 42 59 2b 4c 49 4d 49 54 20 6f 6e 20 74  DERBY+LIMIT on t
1b3e0 68 65 20 69 6e 6e 65 72 20 6c 6f 6f 70 20 2a 2f  he inner loop */
1b3f0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 53  .#define WHERE_S
1b400 45 45 4b 5f 55 4e 49 51 5f 54 41 42 4c 45 20 20  EEK_UNIQ_TABLE  
1b410 30 78 31 30 30 30 20 2f 2a 20 44 6f 20 6e 6f 74  0x1000 /* Do not
1b420 20 64 65 66 65 72 20 73 65 65 6b 73 20 69 66 20   defer seeks if 
1b430 75 6e 69 71 75 65 20 2a 2f 0a 20 20 20 20 20 20  unique */.      
1b440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b450 20 20 2f 2a 20 20 20 20 20 30 78 32 30 30 30 20    /*     0x2000 
1b460 20 20 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79     not currently
1b470 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65   used */.#define
1b480 20 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d 49 54   WHERE_USE_LIMIT
1b490 20 20 20 20 20 20 20 20 30 78 34 30 30 30 20 2f          0x4000 /
1b4a0 2a 20 55 73 65 20 74 68 65 20 4c 49 4d 49 54 20  * Use the LIMIT 
1b4b0 69 6e 20 63 6f 73 74 20 65 73 74 69 6d 61 74 65  in cost estimate
1b4c0 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  s */.           
1b4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1b4e0 20 20 20 20 30 78 38 30 30 30 20 20 20 20 6e 6f      0x8000    no
1b4f0 74 20 63 75 72 72 65 6e 74 6c 79 20 75 73 65 64  t currently used
1b500 20 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20   */../* Allowed 
1b510 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66 72  return values fr
1b520 6f 6d 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  om sqlite3WhereI
1b530 73 44 69 73 74 69 6e 63 74 28 29 0a 2a 2f 0a 23  sDistinct().*/.#
1b540 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
1b550 54 49 4e 43 54 5f 4e 4f 4f 50 20 20 20 20 20 20  TINCT_NOOP      
1b560 30 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 6b  0  /* DISTINCT k
1b570 65 79 77 6f 72 64 20 6e 6f 74 20 75 73 65 64 20  eyword not used 
1b580 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1b590 5f 44 49 53 54 49 4e 43 54 5f 55 4e 49 51 55 45  _DISTINCT_UNIQUE
1b5a0 20 20 20 20 31 20 20 2f 2a 20 4e 6f 20 64 75 70      1  /* No dup
1b5b0 6c 69 63 61 74 65 73 20 2a 2f 0a 23 64 65 66 69  licates */.#defi
1b5c0 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
1b5d0 54 5f 4f 52 44 45 52 45 44 20 20 20 32 20 20 2f  T_ORDERED   2  /
1b5e0 2a 20 41 6c 6c 20 64 75 70 6c 69 63 61 74 65 73  * All duplicates
1b5f0 20 61 72 65 20 61 64 6a 61 63 65 6e 74 20 2a 2f   are adjacent */
1b600 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
1b610 49 53 54 49 4e 43 54 5f 55 4e 4f 52 44 45 52 45  ISTINCT_UNORDERE
1b620 44 20 33 20 20 2f 2a 20 44 75 70 6c 69 63 61 74  D 3  /* Duplicat
1b630 65 73 20 61 72 65 20 73 63 61 74 74 65 72 65 64  es are scattered
1b640 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d   */../*.** A Nam
1b650 65 43 6f 6e 74 65 78 74 20 64 65 66 69 6e 65 73  eContext defines
1b660 20 61 20 63 6f 6e 74 65 78 74 20 69 6e 20 77 68   a context in wh
1b670 69 63 68 20 74 6f 20 72 65 73 6f 6c 76 65 20 74  ich to resolve t
1b680 61 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a  able and column.
1b690 2a 2a 20 6e 61 6d 65 73 2e 20 20 54 68 65 20 63  ** names.  The c
1b6a0 6f 6e 74 65 78 74 20 63 6f 6e 73 69 73 74 73 20  ontext consists 
1b6b0 6f 66 20 61 20 6c 69 73 74 20 6f 66 20 74 61 62  of a list of tab
1b6c0 6c 65 73 20 28 74 68 65 20 70 53 72 63 4c 69 73  les (the pSrcLis
1b6d0 74 29 20 66 69 65 6c 64 20 61 6e 64 0a 2a 2a 20  t) field and.** 
1b6e0 61 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64 20  a list of named 
1b6f0 65 78 70 72 65 73 73 69 6f 6e 20 28 70 45 4c 69  expression (pELi
1b700 73 74 29 2e 20 20 54 68 65 20 6e 61 6d 65 64 20  st).  The named 
1b710 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20  expression list 
1b720 6d 61 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20  may.** be NULL. 
1b730 20 54 68 65 20 70 53 72 63 20 63 6f 72 72 65 73   The pSrc corres
1b740 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 46 52 4f  ponds to the FRO
1b750 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45  M clause of a SE
1b760 4c 45 43 54 20 6f 72 0a 2a 2a 20 74 6f 20 74 68  LECT or.** to th
1b770 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70  e table being op
1b780 65 72 61 74 65 64 20 6f 6e 20 62 79 20 49 4e 53  erated on by INS
1b790 45 52 54 2c 20 55 50 44 41 54 45 2c 20 6f 72 20  ERT, UPDATE, or 
1b7a0 44 45 4c 45 54 45 2e 20 20 54 68 65 0a 2a 2a 20  DELETE.  The.** 
1b7b0 70 45 4c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e  pEList correspon
1b7c0 64 73 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74  ds to the result
1b7d0 20 73 65 74 20 6f 66 20 61 20 53 45 4c 45 43 54   set of a SELECT
1b7e0 20 61 6e 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72   and is NULL for
1b7f0 0a 2a 2a 20 6f 74 68 65 72 20 73 74 61 74 65 6d  .** other statem
1b800 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65  ents..**.** Name
1b810 43 6f 6e 74 65 78 74 73 20 63 61 6e 20 62 65 20  Contexts can be 
1b820 6e 65 73 74 65 64 2e 20 20 57 68 65 6e 20 72 65  nested.  When re
1b830 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 2c 20 74  solving names, t
1b840 68 65 20 69 6e 6e 65 72 2d 6d 6f 73 74 0a 2a 2a  he inner-most.**
1b850 20 63 6f 6e 74 65 78 74 20 69 73 20 73 65 61 72   context is sear
1b860 63 68 65 64 20 66 69 72 73 74 2e 20 20 49 66 20  ched first.  If 
1b870 6e 6f 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e  no match is foun
1b880 64 2c 20 74 68 65 20 6e 65 78 74 20 6f 75 74 65  d, the next oute
1b890 72 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20  r.** context is 
1b8a0 63 68 65 63 6b 65 64 2e 20 20 49 66 20 74 68 65  checked.  If the
1b8b0 72 65 20 69 73 20 73 74 69 6c 6c 20 6e 6f 20 6d  re is still no m
1b8c0 61 74 63 68 2c 20 74 68 65 20 6e 65 78 74 20 63  atch, the next c
1b8d0 6f 6e 74 65 78 74 0a 2a 2a 20 69 73 20 63 68 65  ontext.** is che
1b8e0 63 6b 65 64 2e 20 20 54 68 69 73 20 70 72 6f 63  cked.  This proc
1b8f0 65 73 73 20 63 6f 6e 74 69 6e 75 65 73 20 75 6e  ess continues un
1b900 74 69 6c 20 65 69 74 68 65 72 20 61 20 6d 61 74  til either a mat
1b910 63 68 20 69 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f  ch is found.** o
1b920 72 20 61 6c 6c 20 63 6f 6e 74 65 78 74 73 20 61  r all contexts a
1b930 72 65 20 63 68 65 63 6b 2e 20 20 57 68 65 6e 20  re check.  When 
1b940 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64  a match is found
1b950 2c 20 74 68 65 20 6e 52 65 66 20 6d 65 6d 62 65  , the nRef membe
1b960 72 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74  r of.** the cont
1b970 65 78 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ext containing t
1b980 68 65 20 6d 61 74 63 68 20 69 73 20 69 6e 63 72  he match is incr
1b990 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 45  emented..**.** E
1b9a0 61 63 68 20 73 75 62 71 75 65 72 79 20 67 65 74  ach subquery get
1b9b0 73 20 61 20 6e 65 77 20 4e 61 6d 65 43 6f 6e 74  s a new NameCont
1b9c0 65 78 74 2e 20 20 54 68 65 20 70 4e 65 78 74 20  ext.  The pNext 
1b9d0 66 69 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20  field points to 
1b9e0 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65  the.** NameConte
1b9f0 78 74 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74  xt in the parent
1ba00 20 71 75 65 72 79 2e 20 20 54 68 75 73 20 74 68   query.  Thus th
1ba10 65 20 70 72 6f 63 65 73 73 20 6f 66 20 73 63 61  e process of sca
1ba20 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a 20 4e 61 6d  nning the.** Nam
1ba30 65 43 6f 6e 74 65 78 74 20 6c 69 73 74 20 63 6f  eContext list co
1ba40 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 73 65 61  rresponds to sea
1ba50 72 63 68 69 6e 67 20 74 68 72 6f 75 67 68 20 73  rching through s
1ba60 75 63 63 65 73 73 69 76 65 6c 79 20 6f 75 74 65  uccessively oute
1ba70 72 0a 2a 2a 20 73 75 62 71 75 65 72 69 65 73 20  r.** subqueries 
1ba80 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6d 61  looking for a ma
1ba90 74 63 68 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4e  tch..*/.struct N
1baa0 61 6d 65 43 6f 6e 74 65 78 74 20 7b 0a 20 20 50  ameContext {.  P
1bab0 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20  arse *pParse;   
1bac0 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 65      /* The parse
1bad0 72 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a  r */.  SrcList *
1bae0 70 53 72 63 4c 69 73 74 3b 20 20 20 2f 2a 20 4f  pSrcList;   /* O
1baf0 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65  ne or more table
1bb00 73 20 75 73 65 64 20 74 6f 20 72 65 73 6f 6c 76  s used to resolv
1bb10 65 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 45 78 70  e names */.  Exp
1bb20 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20 20  rList *pEList;  
1bb30 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c 69    /* Optional li
1bb40 73 74 20 6f 66 20 72 65 73 75 6c 74 2d 73 65 74  st of result-set
1bb50 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 41 67   columns */.  Ag
1bb60 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b  gInfo *pAggInfo;
1bb70 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f     /* Informatio
1bb80 6e 20 61 62 6f 75 74 20 61 67 67 72 65 67 61 74  n about aggregat
1bb90 65 73 20 61 74 20 74 68 69 73 20 6c 65 76 65 6c  es at this level
1bba0 20 2a 2f 0a 20 20 4e 61 6d 65 43 6f 6e 74 65 78   */.  NameContex
1bbb0 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65  t *pNext;  /* Ne
1bbc0 78 74 20 6f 75 74 65 72 20 6e 61 6d 65 20 63 6f  xt outer name co
1bbd0 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66 6f 72  ntext.  NULL for
1bbe0 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a 20 20   outermost */.  
1bbf0 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20  int nRef;       
1bc00 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1bc10 66 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76 65 64  f names resolved
1bc20 20 62 79 20 74 68 69 73 20 63 6f 6e 74 65 78 74   by this context
1bc30 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20   */.  int nErr; 
1bc40 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1bc50 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 65  mber of errors e
1bc60 6e 63 6f 75 6e 74 65 72 65 64 20 77 68 69 6c 65  ncountered while
1bc70 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73   resolving names
1bc80 20 2a 2f 0a 20 20 75 31 36 20 6e 63 46 6c 61 67   */.  u16 ncFlag
1bc90 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 5a 65  s;         /* Ze
1bca0 72 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a 20  ro or more NC_* 
1bcb0 66 6c 61 67 73 20 64 65 66 69 6e 65 64 20 62 65  flags defined be
1bcc0 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  low */.};../*.**
1bcd0 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
1bce0 66 6f 72 20 74 68 65 20 4e 61 6d 65 43 6f 6e 74  for the NameCont
1bcf0 65 78 74 2c 20 6e 63 46 6c 61 67 73 20 66 69 65  ext, ncFlags fie
1bd00 6c 64 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20  ld..**.** Value 
1bd10 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 61 6c 6c  constraints (all
1bd20 20 63 68 65 63 6b 65 64 20 76 69 61 20 61 73 73   checked via ass
1bd30 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 4e 43  ert()):.**    NC
1bd40 5f 48 61 73 41 67 67 20 20 20 20 3d 3d 20 53 46  _HasAgg    == SF
1bd50 5f 48 61 73 41 67 67 0a 2a 2a 20 20 20 20 4e 43  _HasAgg.**    NC
1bd60 5f 4d 69 6e 4d 61 78 41 67 67 20 3d 3d 20 53 46  _MinMaxAgg == SF
1bd70 5f 4d 69 6e 4d 61 78 41 67 67 20 3d 3d 20 53 51  _MinMaxAgg == SQ
1bd80 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58  LITE_FUNC_MINMAX
1bd90 0a 2a 2a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  .**.*/.#define N
1bda0 43 5f 41 6c 6c 6f 77 41 67 67 20 20 30 78 30 30  C_AllowAgg  0x00
1bdb0 30 31 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65  01  /* Aggregate
1bdc0 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 61   functions are a
1bdd0 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f 0a 23  llowed here */.#
1bde0 64 65 66 69 6e 65 20 4e 43 5f 50 61 72 74 49 64  define NC_PartId
1bdf0 78 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 54  x   0x0002  /* T
1be00 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67  rue if resolving
1be10 20 61 20 70 61 72 74 69 61 6c 20 69 6e 64 65 78   a partial index
1be20 20 57 48 45 52 45 20 2a 2f 0a 23 64 65 66 69 6e   WHERE */.#defin
1be30 65 20 4e 43 5f 49 73 43 68 65 63 6b 20 20 20 30  e NC_IsCheck   0
1be40 78 30 30 30 34 20 20 2f 2a 20 54 72 75 65 20 69  x0004  /* True i
1be50 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65  f resolving name
1be60 73 20 69 6e 20 61 20 43 48 45 43 4b 20 63 6f 6e  s in a CHECK con
1be70 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69  straint */.#defi
1be80 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e 63 20  ne NC_InAggFunc 
1be90 30 78 30 30 30 38 20 20 2f 2a 20 54 72 75 65 20  0x0008  /* True 
1bea0 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61 72 67  if analyzing arg
1beb0 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61 67 67  uments to an agg
1bec0 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65   func */.#define
1bed0 20 4e 43 5f 48 61 73 41 67 67 20 20 20 20 30 78   NC_HasAgg    0x
1bee0 30 30 31 30 20 20 2f 2a 20 4f 6e 65 20 6f 72 20  0010  /* One or 
1bef0 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65 20 66  more aggregate f
1bf00 75 6e 63 74 69 6f 6e 73 20 73 65 65 6e 20 2a 2f  unctions seen */
1bf10 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 64 78 45  .#define NC_IdxE
1bf20 78 70 72 20 20 20 30 78 30 30 32 30 20 20 2f 2a  xpr   0x0020  /*
1bf30 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69   True if resolvi
1bf40 6e 67 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 43 52  ng columns of CR
1bf50 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 23 64  EATE INDEX */.#d
1bf60 65 66 69 6e 65 20 4e 43 5f 56 61 72 53 65 6c 65  efine NC_VarSele
1bf70 63 74 20 30 78 30 30 34 30 20 20 2f 2a 20 41 20  ct 0x0040  /* A 
1bf80 63 6f 72 72 65 6c 61 74 65 64 20 73 75 62 71 75  correlated subqu
1bf90 65 72 79 20 68 61 73 20 62 65 65 6e 20 73 65 65  ery has been see
1bfa0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  n */.#define NC_
1bfb0 4d 69 6e 4d 61 78 41 67 67 20 30 78 31 30 30 30  MinMaxAgg 0x1000
1bfc0 20 20 2f 2a 20 6d 69 6e 2f 6d 61 78 20 61 67 67    /* min/max agg
1bfd0 72 65 67 61 74 65 73 20 73 65 65 6e 2e 20 20 53  regates seen.  S
1bfe0 65 65 20 6e 6f 74 65 20 61 62 6f 76 65 20 2a 2f  ee note above */
1bff0 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
1c000 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
1c010 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63  wing structure c
1c020 6f 6e 74 61 69 6e 73 20 61 6c 6c 20 69 6e 66 6f  ontains all info
1c030 72 6d 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65  rmation.** neede
1c040 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 63 6f  d to generate co
1c050 64 65 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20  de for a single 
1c060 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
1c070 2e 0a 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69  ..**.** nLimit i
1c080 73 20 73 65 74 20 74 6f 20 2d 31 20 69 66 20 74  s set to -1 if t
1c090 68 65 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54  here is no LIMIT
1c0a0 20 63 6c 61 75 73 65 2e 20 20 6e 4f 66 66 73 65   clause.  nOffse
1c0b0 74 20 69 73 20 73 65 74 20 74 6f 20 30 2e 0a 2a  t is set to 0..*
1c0c0 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 61 20  * If there is a 
1c0d0 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68  LIMIT clause, th
1c0e0 65 20 70 61 72 73 65 72 20 73 65 74 73 20 6e 4c  e parser sets nL
1c0f0 69 6d 69 74 20 74 6f 20 74 68 65 20 76 61 6c 75  imit to the valu
1c100 65 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 6d 69  e of the.** limi
1c110 74 20 61 6e 64 20 6e 4f 66 66 73 65 74 20 74 6f  t and nOffset to
1c120 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
1c130 65 20 6f 66 66 73 65 74 20 28 6f 72 20 30 20 69  e offset (or 0 i
1c140 66 20 74 68 65 72 65 20 69 73 20 6e 6f 74 0a 2a  f there is not.*
1c150 2a 20 6f 66 66 73 65 74 29 2e 20 20 42 75 74 20  * offset).  But 
1c160 6c 61 74 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74  later on, nLimit
1c170 20 61 6e 64 20 6e 4f 66 66 73 65 74 20 62 65 63   and nOffset bec
1c180 6f 6d 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c  ome the memory l
1c190 6f 63 61 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74  ocations.** in t
1c1a0 68 65 20 56 44 42 45 20 74 68 61 74 20 72 65 63  he VDBE that rec
1c1b0 6f 72 64 20 74 68 65 20 6c 69 6d 69 74 20 61 6e  ord the limit an
1c1c0 64 20 6f 66 66 73 65 74 20 63 6f 75 6e 74 65 72  d offset counter
1c1d0 73 2e 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70 65  s..**.** addrOpe
1c1e0 6e 45 70 68 6d 5b 5d 20 65 6e 74 72 69 65 73 20  nEphm[] entries 
1c1f0 63 6f 6e 74 61 69 6e 20 74 68 65 20 61 64 64 72  contain the addr
1c200 65 73 73 20 6f 66 20 4f 50 5f 4f 70 65 6e 45 70  ess of OP_OpenEp
1c210 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 73 2e  hemeral opcodes.
1c220 0a 2a 2a 20 54 68 65 73 65 20 61 64 64 72 65 73  .** These addres
1c230 73 65 73 20 6d 75 73 74 20 62 65 20 73 74 6f 72  ses must be stor
1c240 65 64 20 73 6f 20 74 68 61 74 20 77 65 20 63 61  ed so that we ca
1c250 6e 20 67 6f 20 62 61 63 6b 20 61 6e 64 20 66 69  n go back and fi
1c260 6c 6c 20 69 6e 0a 2a 2a 20 74 68 65 20 50 34 5f  ll in.** the P4_
1c270 4b 45 59 49 4e 46 4f 20 61 6e 64 20 50 32 20 70  KEYINFO and P2 p
1c280 61 72 61 6d 65 74 65 72 73 20 6c 61 74 65 72 2e  arameters later.
1c290 20 20 4e 65 69 74 68 65 72 20 74 68 65 20 4b 65    Neither the Ke
1c2a0 79 49 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65  yInfo nor.** the
1c2b0 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
1c2c0 6e 73 20 69 6e 20 50 32 20 63 61 6e 20 62 65 20  ns in P2 can be 
1c2d0 63 6f 6d 70 75 74 65 64 20 61 74 20 74 68 65 20  computed at the 
1c2e0 73 61 6d 65 20 74 69 6d 65 0a 2a 2a 20 61 73 20  same time.** as 
1c2f0 74 68 65 20 4f 50 5f 4f 70 65 6e 45 70 68 6d 20  the OP_OpenEphm 
1c300 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 63  instruction is c
1c310 6f 64 65 64 20 62 65 63 61 75 73 65 20 6e 6f 74  oded because not
1c320 0a 2a 2a 20 65 6e 6f 75 67 68 20 69 6e 66 6f 72  .** enough infor
1c330 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65  mation about the
1c340 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20   compound query 
1c350 69 73 20 6b 6e 6f 77 6e 20 61 74 20 74 68 61 74  is known at that
1c360 20 70 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b   point..** The K
1c370 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f  eyInfo for addrO
1c380 70 65 6e 54 72 61 6e 5b 30 5d 20 61 6e 64 20 5b  penTran[0] and [
1c390 31 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c  1] contains coll
1c3a0 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 0a  ating sequences.
1c3b0 2a 2a 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c  ** for the resul
1c3c0 74 20 73 65 74 2e 20 20 54 68 65 20 4b 65 79 49  t set.  The KeyI
1c3d0 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e  nfo for addrOpen
1c3e0 45 70 68 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e 73  Ephm[2] contains
1c3f0 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65   collating.** se
1c400 71 75 65 6e 63 65 73 20 66 6f 72 20 74 68 65 20  quences for the 
1c410 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e  ORDER BY clause.
1c420 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63  .*/.struct Selec
1c430 74 20 7b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a  t {.  ExprList *
1c440 70 45 4c 69 73 74 3b 20 20 20 20 20 20 2f 2a 20  pEList;      /* 
1c450 54 68 65 20 66 69 65 6c 64 73 20 6f 66 20 74 68  The fields of th
1c460 65 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38  e result */.  u8
1c470 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20   op;            
1c480 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20       /* One of: 
1c490 54 4b 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20  TK_UNION TK_ALL 
1c4a0 54 4b 5f 49 4e 54 45 52 53 45 43 54 20 54 4b 5f  TK_INTERSECT TK_
1c4b0 45 58 43 45 50 54 20 2a 2f 0a 20 20 4c 6f 67 45  EXCEPT */.  LogE
1c4c0 73 74 20 6e 53 65 6c 65 63 74 52 6f 77 3b 20 20  st nSelectRow;  
1c4d0 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
1c4e0 6e 75 6d 62 65 72 20 6f 66 20 72 65 73 75 6c 74  number of result
1c4f0 20 72 6f 77 73 20 2a 2f 0a 20 20 75 33 32 20 73   rows */.  u32 s
1c500 65 6c 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20  elFlags;        
1c510 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 53 46 5f    /* Various SF_
1c520 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e  * values */.  in
1c530 74 20 69 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65  t iLimit, iOffse
1c540 74 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72  t;   /* Memory r
1c550 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67  egisters holding
1c560 20 4c 49 4d 49 54 20 26 20 4f 46 46 53 45 54 20   LIMIT & OFFSET 
1c570 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 23 69 66 20  counters */.#if 
1c580 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42  SELECTTRACE_ENAB
1c590 4c 45 44 0a 20 20 63 68 61 72 20 7a 53 65 6c 4e  LED.  char zSelN
1c5a0 61 6d 65 5b 31 32 5d 3b 20 20 20 20 20 2f 2a 20  ame[12];     /* 
1c5b0 53 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 6f 66  Symbolic name of
1c5c0 20 74 68 69 73 20 53 45 4c 45 43 54 20 75 73 65   this SELECT use
1c5d0 20 66 6f 72 20 64 65 62 75 67 67 69 6e 67 20 2a   for debugging *
1c5e0 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 61  /.#endif.  int a
1c5f0 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b 20  ddrOpenEphm[2]; 
1c600 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65    /* OP_OpenEphe
1c610 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c 61 74 65  m opcodes relate
1c620 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74  d to this select
1c630 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70   */.  SrcList *p
1c640 53 72 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Src;         /* 
1c650 54 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  The FROM clause 
1c660 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72  */.  Expr *pWher
1c670 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  e;          /* T
1c680 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
1c690 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
1c6a0 47 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20 54  GroupBy;    /* T
1c6b0 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75  he GROUP BY clau
1c6c0 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48  se */.  Expr *pH
1c6d0 61 76 69 6e 67 3b 20 20 20 20 20 20 20 20 20 2f  aving;         /
1c6e0 2a 20 54 68 65 20 48 41 56 49 4e 47 20 63 6c 61  * The HAVING cla
1c6f0 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  use */.  ExprLis
1c700 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 20 20  t *pOrderBy;    
1c710 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59 20  /* The ORDER BY 
1c720 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65  clause */.  Sele
1c730 63 74 20 2a 70 50 72 69 6f 72 3b 20 20 20 20 20  ct *pPrior;     
1c740 20 20 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65     /* Prior sele
1c750 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64  ct in a compound
1c760 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e   select statemen
1c770 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  t */.  Select *p
1c780 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  Next;         /*
1c790 20 4e 65 78 74 20 73 65 6c 65 63 74 20 74 6f 20   Next select to 
1c7a0 74 68 65 20 6c 65 66 74 20 69 6e 20 61 20 63 6f  the left in a co
1c7b0 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20 45 78 70 72  mpound */.  Expr
1c7c0 20 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20 20 20   *pLimit;       
1c7d0 20 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72     /* LIMIT expr
1c7e0 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61  ession. NULL mea
1c7f0 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a  ns not used. */.
1c800 20 20 45 78 70 72 20 2a 70 4f 66 66 73 65 74 3b    Expr *pOffset;
1c810 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 46 46 53           /* OFFS
1c820 45 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e  ET expression. N
1c830 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73  ULL means not us
1c840 65 64 2e 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70  ed. */.  With *p
1c850 57 69 74 68 3b 20 20 20 20 20 20 20 20 20 20 20  With;           
1c860 2f 2a 20 57 49 54 48 20 63 6c 61 75 73 65 20 61  /* WITH clause a
1c870 74 74 61 63 68 65 64 20 74 6f 20 74 68 69 73 20  ttached to this 
1c880 73 65 6c 65 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e  select. Or NULL.
1c890 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c   */.};../*.** Al
1c8a0 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
1c8b0 20 53 65 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73   Select.selFlags
1c8c0 2e 20 20 54 68 65 20 22 53 46 22 20 70 72 65 66  .  The "SF" pref
1c8d0 69 78 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a  ix stands for.**
1c8e0 20 22 53 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a   "Select Flag"..
1c8f0 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73  **.** Value cons
1c900 74 72 61 69 6e 74 73 20 28 61 6c 6c 20 63 68 65  traints (all che
1c910 63 6b 65 64 20 76 69 61 20 61 73 73 65 72 74 28  cked via assert(
1c920 29 29 0a 2a 2a 20 20 20 20 20 53 46 5f 48 61 73  )).**     SF_Has
1c930 41 67 67 20 20 20 20 20 3d 3d 20 4e 43 5f 48 61  Agg     == NC_Ha
1c940 73 41 67 67 0a 2a 2a 20 20 20 20 20 53 46 5f 4d  sAgg.**     SF_M
1c950 69 6e 4d 61 78 41 67 67 20 20 3d 3d 20 4e 43 5f  inMaxAgg  == NC_
1c960 4d 69 6e 4d 61 78 41 67 67 20 20 20 20 20 3d 3d  MinMaxAgg     ==
1c970 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e   SQLITE_FUNC_MIN
1c980 4d 41 58 0a 2a 2a 20 20 20 20 20 53 46 5f 46 69  MAX.**     SF_Fi
1c990 78 65 64 4c 69 6d 69 74 20 3d 3d 20 57 48 45 52  xedLimit == WHER
1c9a0 45 5f 55 53 45 5f 4c 49 4d 49 54 0a 2a 2f 0a 23  E_USE_LIMIT.*/.#
1c9b0 64 65 66 69 6e 65 20 53 46 5f 44 69 73 74 69 6e  define SF_Distin
1c9c0 63 74 20 20 20 20 20 20 20 30 78 30 30 30 30 31  ct       0x00001
1c9d0 20 20 2f 2a 20 4f 75 74 70 75 74 20 73 68 6f 75    /* Output shou
1c9e0 6c 64 20 62 65 20 44 49 53 54 49 4e 43 54 20 2a  ld be DISTINCT *
1c9f0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41 6c 6c  /.#define SF_All
1ca00 20 20 20 20 20 20 20 20 20 20 20 20 30 78 30 30              0x00
1ca10 30 30 32 20 20 2f 2a 20 49 6e 63 6c 75 64 65 73  002  /* Includes
1ca20 20 74 68 65 20 41 4c 4c 20 6b 65 79 77 6f 72 64   the ALL keyword
1ca30 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52   */.#define SF_R
1ca40 65 73 6f 6c 76 65 64 20 20 20 20 20 20 20 30 78  esolved       0x
1ca50 30 30 30 30 34 20 20 2f 2a 20 49 64 65 6e 74 69  00004  /* Identi
1ca60 66 69 65 72 73 20 68 61 76 65 20 62 65 65 6e 20  fiers have been 
1ca70 72 65 73 6f 6c 76 65 64 20 2a 2f 0a 23 64 65 66  resolved */.#def
1ca80 69 6e 65 20 53 46 5f 41 67 67 72 65 67 61 74 65  ine SF_Aggregate
1ca90 20 20 20 20 20 20 30 78 30 30 30 30 38 20 20 2f        0x00008  /
1caa0 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67 67 20 66  * Contains agg f
1cab0 75 6e 63 74 69 6f 6e 73 20 6f 72 20 61 20 47 52  unctions or a GR
1cac0 4f 55 50 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e  OUP BY */.#defin
1cad0 65 20 53 46 5f 48 61 73 41 67 67 20 20 20 20 20  e SF_HasAgg     
1cae0 20 20 20 20 30 78 30 30 30 31 30 20 20 2f 2a 20      0x00010  /* 
1caf0 43 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61  Contains aggrega
1cb00 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a  te functions */.
1cb10 23 64 65 66 69 6e 65 20 53 46 5f 55 73 65 73 45  #define SF_UsesE
1cb20 70 68 65 6d 65 72 61 6c 20 20 30 78 30 30 30 32  phemeral  0x0002
1cb30 30 20 20 2f 2a 20 55 73 65 73 20 74 68 65 20 4f  0  /* Uses the O
1cb40 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70 63  penEphemeral opc
1cb50 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ode */.#define S
1cb60 46 5f 45 78 70 61 6e 64 65 64 20 20 20 20 20 20  F_Expanded      
1cb70 20 30 78 30 30 30 34 30 20 20 2f 2a 20 73 71 6c   0x00040  /* sql
1cb80 69 74 65 33 53 65 6c 65 63 74 45 78 70 61 6e 64  ite3SelectExpand
1cb90 28 29 20 63 61 6c 6c 65 64 20 6f 6e 20 74 68 69  () called on thi
1cba0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  s */.#define SF_
1cbb0 48 61 73 54 79 70 65 49 6e 66 6f 20 20 20 20 30  HasTypeInfo    0
1cbc0 78 30 30 30 38 30 20 20 2f 2a 20 46 52 4f 4d 20  x00080  /* FROM 
1cbd0 73 75 62 71 75 65 72 69 65 73 20 68 61 76 65 20  subqueries have 
1cbe0 54 61 62 6c 65 20 6d 65 74 61 64 61 74 61 20 2a  Table metadata *
1cbf0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6d  /.#define SF_Com
1cc00 70 6f 75 6e 64 20 20 20 20 20 20 20 30 78 30 30  pound       0x00
1cc10 31 30 30 20 20 2f 2a 20 50 61 72 74 20 6f 66 20  100  /* Part of 
1cc20 61 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79  a compound query
1cc30 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 56   */.#define SF_V
1cc40 61 6c 75 65 73 20 20 20 20 20 20 20 20 20 30 78  alues         0x
1cc50 30 30 32 30 30 20 20 2f 2a 20 53 79 6e 74 68 65  00200  /* Synthe
1cc60 73 69 7a 65 64 20 66 72 6f 6d 20 56 41 4c 55 45  sized from VALUE
1cc70 53 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66  S clause */.#def
1cc80 69 6e 65 20 53 46 5f 4d 75 6c 74 69 56 61 6c 75  ine SF_MultiValu
1cc90 65 20 20 20 20 20 30 78 30 30 34 30 30 20 20 2f  e     0x00400  /
1cca0 2a 20 53 69 6e 67 6c 65 20 56 41 4c 55 45 53 20  * Single VALUES 
1ccb0 74 65 72 6d 20 77 69 74 68 20 6d 75 6c 74 69 70  term with multip
1ccc0 6c 65 20 72 6f 77 73 20 2a 2f 0a 23 64 65 66 69  le rows */.#defi
1ccd0 6e 65 20 53 46 5f 4e 65 73 74 65 64 46 72 6f 6d  ne SF_NestedFrom
1cce0 20 20 20 20 20 30 78 30 30 38 30 30 20 20 2f 2a       0x00800  /*
1ccf0 20 50 61 72 74 20 6f 66 20 61 20 70 61 72 65 6e   Part of a paren
1cd00 74 68 65 73 69 7a 65 64 20 46 52 4f 4d 20 63 6c  thesized FROM cl
1cd10 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ause */.#define 
1cd20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20 20  SF_MinMaxAgg    
1cd30 20 20 30 78 30 31 30 30 30 20 20 2f 2a 20 41 67    0x01000  /* Ag
1cd40 67 72 65 67 61 74 65 20 63 6f 6e 74 61 69 6e 69  gregate containi
1cd50 6e 67 20 6d 69 6e 28 29 20 6f 72 20 6d 61 78 28  ng min() or max(
1cd60 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  ) */.#define SF_
1cd70 52 65 63 75 72 73 69 76 65 20 20 20 20 20 20 30  Recursive      0
1cd80 78 30 32 30 30 30 20 20 2f 2a 20 54 68 65 20 72  x02000  /* The r
1cd90 65 63 75 72 73 69 76 65 20 70 61 72 74 20 6f 66  ecursive part of
1cda0 20 61 20 72 65 63 75 72 73 69 76 65 20 43 54 45   a recursive CTE
1cdb0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 46   */.#define SF_F
1cdc0 69 78 65 64 4c 69 6d 69 74 20 20 20 20 20 30 78  ixedLimit     0x
1cdd0 30 34 30 30 30 20 20 2f 2a 20 6e 53 65 6c 65 63  04000  /* nSelec
1cde0 74 52 6f 77 20 73 65 74 20 62 79 20 61 20 63 6f  tRow set by a co
1cdf0 6e 73 74 61 6e 74 20 4c 49 4d 49 54 20 2a 2f 0a  nstant LIMIT */.
1ce00 23 64 65 66 69 6e 65 20 53 46 5f 4d 61 79 62 65  #define SF_Maybe
1ce10 43 6f 6e 76 65 72 74 20 20 20 30 78 30 38 30 30  Convert   0x0800
1ce20 30 20 20 2f 2a 20 4e 65 65 64 20 63 6f 6e 76 65  0  /* Need conve
1ce30 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74  rtCompoundSelect
1ce40 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a  ToSubquery() */.
1ce50 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6e 76 65  #define SF_Conve
1ce60 72 74 65 64 20 20 20 20 20 20 30 78 31 30 30 30  rted      0x1000
1ce70 30 20 20 2f 2a 20 42 79 20 63 6f 6e 76 65 72 74  0  /* By convert
1ce80 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f  CompoundSelectTo
1ce90 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 23 64  Subquery() */.#d
1cea0 65 66 69 6e 65 20 53 46 5f 49 6e 63 6c 75 64 65  efine SF_Include
1ceb0 48 69 64 64 65 6e 20 20 30 78 32 30 30 30 30 20  Hidden  0x20000 
1cec0 20 2f 2a 20 49 6e 63 6c 75 64 65 20 68 69 64 64   /* Include hidd
1ced0 65 6e 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 6f 75  en columns in ou
1cee0 74 70 75 74 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20  tput */.../*.** 
1cef0 54 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61  The results of a
1cf00 20 53 45 4c 45 43 54 20 63 61 6e 20 62 65 20 64   SELECT can be d
1cf10 69 73 74 72 69 62 75 74 65 64 20 69 6e 20 73 65  istributed in se
1cf20 76 65 72 61 6c 20 77 61 79 73 2c 20 61 73 20 64  veral ways, as d
1cf30 65 66 69 6e 65 64 0a 2a 2a 20 62 79 20 6f 6e 65  efined.** by one
1cf40 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
1cf50 67 20 6d 61 63 72 6f 73 2e 20 20 54 68 65 20 22  g macros.  The "
1cf60 53 52 54 22 20 70 72 65 66 69 78 20 6d 65 61 6e  SRT" prefix mean
1cf70 73 20 22 53 45 4c 45 43 54 20 52 65 73 75 6c 74  s "SELECT Result
1cf80 0a 2a 2a 20 54 79 70 65 22 2e 0a 2a 2a 0a 2a 2a  .** Type"..**.**
1cf90 20 20 20 20 20 53 52 54 5f 55 6e 69 6f 6e 20 20       SRT_Union  
1cfa0 20 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c       Store resul
1cfb0 74 73 20 61 73 20 61 20 6b 65 79 20 69 6e 20 61  ts as a key in a
1cfc0 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78   temporary index
1cfd0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1cfe0 20 20 20 20 20 20 20 20 69 64 65 6e 74 69 66 69          identifi
1cff0 65 64 20 62 79 20 70 44 65 73 74 2d 3e 69 53 44  ed by pDest->iSD
1d000 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  Parm..**.**     
1d010 53 52 54 5f 45 78 63 65 70 74 20 20 20 20 20 20  SRT_Except      
1d020 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 73 20 66  Remove results f
1d030 72 6f 6d 20 74 68 65 20 74 65 6d 70 6f 72 61 72  rom the temporar
1d040 79 20 69 6e 64 65 78 20 70 44 65 73 74 2d 3e 69  y index pDest->i
1d050 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20  SDParm..**.**   
1d060 20 20 53 52 54 5f 45 78 69 73 74 73 20 20 20 20    SRT_Exists    
1d070 20 20 53 74 6f 72 65 20 61 20 31 20 69 6e 20 6d    Store a 1 in m
1d080 65 6d 6f 72 79 20 63 65 6c 6c 20 70 44 65 73 74  emory cell pDest
1d090 2d 3e 69 53 44 50 61 72 6d 20 69 66 20 74 68 65  ->iSDParm if the
1d0a0 20 72 65 73 75 6c 74 0a 2a 2a 20 20 20 20 20 20   result.**      
1d0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1d0c0 65 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2e  et is not empty.
1d0d0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44  .**.**     SRT_D
1d0e0 69 73 63 61 72 64 20 20 20 20 20 54 68 72 6f 77  iscard     Throw
1d0f0 20 74 68 65 20 72 65 73 75 6c 74 73 20 61 77 61   the results awa
1d100 79 2e 20 20 54 68 69 73 20 69 73 20 75 73 65 64  y.  This is used
1d110 20 62 79 20 53 45 4c 45 43 54 0a 2a 2a 20 20 20   by SELECT.**   
1d120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d130 20 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74    statements wit
1d140 68 69 6e 20 74 72 69 67 67 65 72 73 20 77 68 6f  hin triggers who
1d150 73 65 20 6f 6e 6c 79 20 70 75 72 70 6f 73 65 20  se only purpose 
1d160 69 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  is.**           
1d170 20 20 20 20 20 20 20 20 20 20 74 68 65 20 73 69            the si
1d180 64 65 2d 65 66 66 65 63 74 73 20 6f 66 20 66 75  de-effects of fu
1d190 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 41  nctions..**.** A
1d1a0 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20  ll of the above 
1d1b0 61 72 65 20 66 72 65 65 20 74 6f 20 69 67 6e 6f  are free to igno
1d1c0 72 65 20 74 68 65 69 72 20 4f 52 44 45 52 20 42  re their ORDER B
1d1d0 59 20 63 6c 61 75 73 65 2e 20 54 68 6f 73 65 20  Y clause. Those 
1d1e0 74 68 61 74 0a 2a 2a 20 66 6f 6c 6c 6f 77 20 6d  that.** follow m
1d1f0 75 73 74 20 68 6f 6e 6f 72 20 74 68 65 20 4f 52  ust honor the OR
1d200 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a  DER BY clause..*
1d210 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4f 75 74  *.**     SRT_Out
1d220 70 75 74 20 20 20 20 20 20 47 65 6e 65 72 61 74  put      Generat
1d230 65 20 61 20 72 6f 77 20 6f 66 20 6f 75 74 70 75  e a row of outpu
1d240 74 20 28 75 73 69 6e 67 20 74 68 65 20 4f 50 5f  t (using the OP_
1d250 52 65 73 75 6c 74 52 6f 77 0a 2a 2a 20 20 20 20  ResultRow.**    
1d260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d270 20 6f 70 63 6f 64 65 29 20 66 6f 72 20 65 61 63   opcode) for eac
1d280 68 20 72 6f 77 20 69 6e 20 74 68 65 20 72 65 73  h row in the res
1d290 75 6c 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20  ult set..**.**  
1d2a0 20 20 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20     SRT_Mem      
1d2b0 20 20 20 4f 6e 6c 79 20 76 61 6c 69 64 20 69 66     Only valid if
1d2c0 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 61   the result is a
1d2d0 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 0a   single column..
1d2e0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1d2f0 20 20 20 20 20 20 20 53 74 6f 72 65 20 74 68 65         Store the
1d300 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 6f 66   first column of
1d310 20 74 68 65 20 66 69 72 73 74 20 72 65 73 75 6c   the first resul
1d320 74 20 72 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20  t row.**        
1d330 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 20               in 
1d340 72 65 67 69 73 74 65 72 20 70 44 65 73 74 2d 3e  register pDest->
1d350 69 53 44 50 61 72 6d 20 74 68 65 6e 20 61 62 61  iSDParm then aba
1d360 6e 64 6f 6e 20 74 68 65 20 72 65 73 74 0a 2a 2a  ndon the rest.**
1d370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d380 20 20 20 20 20 6f 66 20 74 68 65 20 71 75 65 72       of the quer
1d390 79 2e 20 20 54 68 69 73 20 64 65 73 74 69 6e 61  y.  This destina
1d3a0 74 69 6f 6e 20 69 6d 70 6c 69 65 73 20 22 4c 49  tion implies "LI
1d3b0 4d 49 54 20 31 22 2e 0a 2a 2a 0a 2a 2a 20 20 20  MIT 1"..**.**   
1d3c0 20 20 53 52 54 5f 53 65 74 20 20 20 20 20 20 20    SRT_Set       
1d3d0 20 20 54 68 65 20 72 65 73 75 6c 74 20 6d 75 73    The result mus
1d3e0 74 20 62 65 20 61 20 73 69 6e 67 6c 65 20 63 6f  t be a single co
1d3f0 6c 75 6d 6e 2e 20 20 53 74 6f 72 65 20 65 61 63  lumn.  Store eac
1d400 68 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  h.**            
1d410 20 20 20 20 20 20 20 20 20 72 6f 77 20 6f 66 20           row of 
1d420 72 65 73 75 6c 74 20 61 73 20 74 68 65 20 6b 65  result as the ke
1d430 79 20 69 6e 20 74 61 62 6c 65 20 70 44 65 73 74  y in table pDest
1d440 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20  ->iSDParm..**   
1d450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d460 20 20 41 70 70 6c 79 20 74 68 65 20 61 66 66 69    Apply the affi
1d470 6e 69 74 79 20 70 44 65 73 74 2d 3e 61 66 66 53  nity pDest->affS
1d480 64 73 74 20 62 65 66 6f 72 65 20 73 74 6f 72 69  dst before stori
1d490 6e 67 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ng.**           
1d4a0 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
1d4b0 73 2e 20 20 55 73 65 64 20 74 6f 20 69 6d 70 6c  s.  Used to impl
1d4c0 65 6d 65 6e 74 20 22 49 4e 20 28 53 45 4c 45 43  ement "IN (SELEC
1d4d0 54 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a 20 20  T ...)"..**.**  
1d4e0 20 20 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20     SRT_EphemTab 
1d4f0 20 20 20 43 72 65 61 74 65 20 61 6e 20 74 65 6d     Create an tem
1d500 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65  porary table pDe
1d510 73 74 2d 3e 69 53 44 50 61 72 6d 20 61 6e 64 20  st->iSDParm and 
1d520 73 74 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20 20  store.**        
1d530 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
1d540 20 72 65 73 75 6c 74 20 74 68 65 72 65 2e 20 54   result there. T
1d550 68 65 20 63 75 72 73 6f 72 20 69 73 20 6c 65 66  he cursor is lef
1d560 74 20 6f 70 65 6e 20 61 66 74 65 72 0a 2a 2a 20  t open after.** 
1d570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d580 20 20 20 20 72 65 74 75 72 6e 69 6e 67 2e 20 20      returning.  
1d590 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53 52 54  This is like SRT
1d5a0 5f 54 61 62 6c 65 20 65 78 63 65 70 74 20 74 68  _Table except th
1d5b0 61 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  at.**           
1d5c0 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20 64            this d
1d5d0 65 73 74 69 6e 61 74 69 6f 6e 20 75 73 65 73 20  estination uses 
1d5e0 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  OP_OpenEphemeral
1d5f0 20 74 6f 20 63 72 65 61 74 65 0a 2a 2a 20 20 20   to create.**   
1d600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d610 20 20 74 68 65 20 74 61 62 6c 65 20 66 69 72 73    the table firs
1d620 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  t..**.**     SRT
1d630 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 47 65 6e  _Coroutine   Gen
1d640 65 72 61 74 65 20 61 20 63 6f 2d 72 6f 75 74 69  erate a co-routi
1d650 6e 65 20 74 68 61 74 20 72 65 74 75 72 6e 73 20  ne that returns 
1d660 61 20 6e 65 77 20 72 6f 77 20 6f 66 0a 2a 2a 20  a new row of.** 
1d670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d680 20 20 20 20 72 65 73 75 6c 74 73 20 65 61 63 68      results each
1d690 20 74 69 6d 65 20 69 74 20 69 73 20 69 6e 76 6f   time it is invo
1d6a0 6b 65 64 2e 20 20 54 68 65 20 65 6e 74 72 79 20  ked.  The entry 
1d6b0 70 6f 69 6e 74 0a 2a 2a 20 20 20 20 20 20 20 20  point.**        
1d6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 20               of 
1d6d0 74 68 65 20 63 6f 2d 72 6f 75 74 69 6e 65 20 69  the co-routine i
1d6e0 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
1d6f0 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53 44 50  ster pDest->iSDP
1d700 61 72 6d 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  arm.**          
1d710 20 20 20 20 20 20 20 20 20 20 20 61 6e 64 20 74             and t
1d720 68 65 20 72 65 73 75 6c 74 20 72 6f 77 20 69 73  he result row is
1d730 20 73 74 6f 72 65 64 20 69 6e 20 70 44 65 73 74   stored in pDest
1d740 2d 3e 6e 44 65 73 74 20 72 65 67 69 73 74 65 72  ->nDest register
1d750 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  s.**            
1d760 20 20 20 20 20 20 20 20 20 73 74 61 72 74 69 6e           startin
1d770 67 20 77 69 74 68 20 70 44 65 73 74 2d 3e 69 53  g with pDest->iS
1d780 64 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  dst..**.**     S
1d790 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20 53  RT_Table       S
1d7a0 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20  tore results in 
1d7b0 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20  temporary table 
1d7c0 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a  pDest->iSDParm..
1d7d0 2a 2a 20 20 20 20 20 53 52 54 5f 46 69 66 6f 20  **     SRT_Fifo 
1d7e0 20 20 20 20 20 20 20 54 68 69 73 20 69 73 20 6c         This is l
1d7f0 69 6b 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62  ike SRT_EphemTab
1d800 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
1d810 20 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20   table.**       
1d820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 73                is
1d830 20 61 73 73 75 6d 65 64 20 74 6f 20 61 6c 72 65   assumed to alre
1d840 61 64 79 20 62 65 20 6f 70 65 6e 2e 20 20 53 52  ady be open.  SR
1d850 54 5f 46 69 66 6f 20 68 61 73 0a 2a 2a 20 20 20  T_Fifo has.**   
1d860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d870 20 20 74 68 65 20 61 64 64 69 74 69 6f 6e 61 6c    the additional
1d880 20 70 72 6f 70 65 72 74 79 20 6f 66 20 62 65 69   property of bei
1d890 6e 67 20 61 62 6c 65 20 74 6f 20 69 67 6e 6f 72  ng able to ignor
1d8a0 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
1d8b0 20 20 20 20 20 20 20 20 20 74 68 65 20 4f 52 44           the ORD
1d8c0 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a  ER BY clause..**
1d8d0 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 74  .**     SRT_Dist
1d8e0 46 69 66 6f 20 20 20 20 53 74 6f 72 65 20 72 65  Fifo    Store re
1d8f0 73 75 6c 74 73 20 69 6e 20 61 20 74 65 6d 70 6f  sults in a tempo
1d900 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74  rary table pDest
1d910 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20  ->iSDParm..**   
1d920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d930 20 20 42 75 74 20 61 6c 73 6f 20 75 73 65 20 74    But also use t
1d940 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70  emporary table p
1d950 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20  Dest->iSDParm+1 
1d960 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  as.**           
1d970 20 20 20 20 20 20 20 20 20 20 61 20 72 65 63 6f            a reco
1d980 72 64 20 6f 66 20 61 6c 6c 20 70 72 69 6f 72 20  rd of all prior 
1d990 72 65 73 75 6c 74 73 20 61 6e 64 20 69 67 6e 6f  results and igno
1d9a0 72 65 20 61 6e 79 20 64 75 70 6c 69 63 61 74 65  re any duplicate
1d9b0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1d9c0 20 20 20 20 20 20 20 20 72 6f 77 73 2e 20 20 4e          rows.  N
1d9d0 61 6d 65 20 6d 65 61 6e 73 3a 20 20 22 44 69 73  ame means:  "Dis
1d9e0 74 69 6e 63 74 20 46 69 66 6f 22 2e 0a 2a 2a 0a  tinct Fifo"..**.
1d9f0 2a 2a 20 20 20 20 20 53 52 54 5f 51 75 65 75 65  **     SRT_Queue
1da00 20 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73         Store res
1da10 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69 74 79  ults in priority
1da20 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e 69 53   queue pDest->iS
1da30 44 50 61 72 6d 20 28 72 65 61 6c 6c 79 0a 2a 2a  DParm (really.**
1da40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da50 20 20 20 20 20 61 6e 20 69 6e 64 65 78 29 2e 20       an index). 
1da60 20 41 70 70 65 6e 64 20 61 20 73 65 71 75 65 6e   Append a sequen
1da70 63 65 20 6e 75 6d 62 65 72 20 73 6f 20 74 68 61  ce number so tha
1da80 74 20 61 6c 6c 20 65 6e 74 72 69 65 73 0a 2a 2a  t all entries.**
1da90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1daa0 20 20 20 20 20 61 72 65 20 64 69 73 74 69 6e 63       are distinc
1dab0 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  t..**.**     SRT
1dac0 5f 44 69 73 74 51 75 65 75 65 20 20 20 53 74 6f  _DistQueue   Sto
1dad0 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70 72  re results in pr
1dae0 69 6f 72 69 74 79 20 71 75 65 75 65 20 70 44 65  iority queue pDe
1daf0 73 74 2d 3e 69 53 44 50 61 72 6d 20 6f 6e 6c 79  st->iSDParm only
1db00 20 69 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20   if.**          
1db10 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 73             the s
1db20 61 6d 65 20 72 65 63 6f 72 64 20 68 61 73 20 6e  ame record has n
1db30 65 76 65 72 20 62 65 65 6e 20 73 74 6f 72 65 64  ever been stored
1db40 20 62 65 66 6f 72 65 2e 20 20 54 68 65 0a 2a 2a   before.  The.**
1db50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db60 20 20 20 20 20 69 6e 64 65 78 20 61 74 20 70 44       index at pD
1db70 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20 68  est->iSDParm+1 h
1db80 6f 6c 64 20 61 6c 6c 20 70 72 69 6f 72 20 73 74  old all prior st
1db90 6f 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ores..*/.#define
1dba0 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20   SRT_Union      
1dbb0 20 20 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65    1  /* Store re
1dbc0 73 75 6c 74 20 61 73 20 6b 65 79 73 20 69 6e 20  sult as keys in 
1dbd0 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  an index */.#def
1dbe0 69 6e 65 20 53 52 54 5f 45 78 63 65 70 74 20 20  ine SRT_Except  
1dbf0 20 20 20 20 20 32 20 20 2f 2a 20 52 65 6d 6f 76       2  /* Remov
1dc00 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20 61 20  e result from a 
1dc10 55 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a 23  UNION index */.#
1dc20 64 65 66 69 6e 65 20 53 52 54 5f 45 78 69 73 74  define SRT_Exist
1dc30 73 20 20 20 20 20 20 20 33 20 20 2f 2a 20 53 74  s       3  /* St
1dc40 6f 72 65 20 31 20 69 66 20 74 68 65 20 72 65 73  ore 1 if the res
1dc50 75 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79  ult is not empty
1dc60 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1dc70 44 69 73 63 61 72 64 20 20 20 20 20 20 34 20 20  Discard      4  
1dc80 2f 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65 20 74  /* Do not save t
1dc90 68 65 20 72 65 73 75 6c 74 73 20 61 6e 79 77 68  he results anywh
1dca0 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ere */.#define S
1dcb0 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20 20 20  RT_Fifo         
1dcc0 35 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  5  /* Store resu
1dcd0 6c 74 20 61 73 20 64 61 74 61 20 77 69 74 68 20  lt as data with 
1dce0 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77  an automatic row
1dcf0 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  id */.#define SR
1dd00 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20 20 36  T_DistFifo     6
1dd10 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 46 69    /* Like SRT_Fi
1dd20 66 6f 2c 20 62 75 74 20 75 6e 69 71 75 65 20 72  fo, but unique r
1dd30 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 23  esults only */.#
1dd40 64 65 66 69 6e 65 20 53 52 54 5f 51 75 65 75 65  define SRT_Queue
1dd50 20 20 20 20 20 20 20 20 37 20 20 2f 2a 20 53 74          7  /* St
1dd60 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61 6e  ore result in an
1dd70 20 71 75 65 75 65 20 2a 2f 0a 23 64 65 66 69 6e   queue */.#defin
1dd80 65 20 53 52 54 5f 44 69 73 74 51 75 65 75 65 20  e SRT_DistQueue 
1dd90 20 20 20 38 20 20 2f 2a 20 4c 69 6b 65 20 53 52     8  /* Like SR
1dda0 54 5f 51 75 65 75 65 2c 20 62 75 74 20 75 6e 69  T_Queue, but uni
1ddb0 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79  que results only
1ddc0 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52 44 45   */../* The ORDE
1ddd0 52 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 69  R BY clause is i
1dde0 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c 20 6f  gnored for all o
1ddf0 66 20 74 68 65 20 61 62 6f 76 65 20 2a 2f 0a 23  f the above */.#
1de00 64 65 66 69 6e 65 20 49 67 6e 6f 72 61 62 6c 65  define Ignorable
1de10 4f 72 64 65 72 62 79 28 58 29 20 28 28 58 2d 3e  Orderby(X) ((X->
1de20 65 44 65 73 74 29 3c 3d 53 52 54 5f 44 69 73 74  eDest)<=SRT_Dist
1de30 51 75 65 75 65 29 0a 0a 23 64 65 66 69 6e 65 20  Queue)..#define 
1de40 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20  SRT_Output      
1de50 20 39 20 20 2f 2a 20 4f 75 74 70 75 74 20 65 61   9  /* Output ea
1de60 63 68 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74  ch row of result
1de70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1de80 4d 65 6d 20 20 20 20 20 20 20 20 20 31 30 20 20  Mem         10  
1de90 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
1dea0 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  in a memory cell
1deb0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1dec0 53 65 74 20 20 20 20 20 20 20 20 20 31 31 20 20  Set         11  
1ded0 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73  /* Store results
1dee0 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69   as keys in an i
1def0 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
1df00 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20  SRT_EphemTab    
1df10 31 32 20 20 2f 2a 20 43 72 65 61 74 65 20 74 72  12  /* Create tr
1df20 61 6e 73 69 65 6e 74 20 74 61 62 20 61 6e 64 20  ansient tab and 
1df30 73 74 6f 72 65 20 6c 69 6b 65 20 53 52 54 5f 54  store like SRT_T
1df40 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  able */.#define 
1df50 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20  SRT_Coroutine   
1df60 31 33 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 20  13  /* Generate 
1df70 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20  a single row of 
1df80 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e  result */.#defin
1df90 65 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20  e SRT_Table     
1dfa0 20 20 31 34 20 20 2f 2a 20 53 74 6f 72 65 20 72    14  /* Store r
1dfb0 65 73 75 6c 74 20 61 73 20 64 61 74 61 20 77 69  esult as data wi
1dfc0 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20  th an automatic 
1dfd0 72 6f 77 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  rowid */../*.** 
1dfe0 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
1dff0 68 69 73 20 6f 62 6a 65 63 74 20 64 65 73 63 72  his object descr
1e000 69 62 65 73 20 77 68 65 72 65 20 74 6f 20 70 75  ibes where to pu
1e010 74 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73  t of the results
1e020 20 6f 66 0a 2a 2a 20 61 20 53 45 4c 45 43 54 20   of.** a SELECT 
1e030 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74  statement..*/.st
1e040 72 75 63 74 20 53 65 6c 65 63 74 44 65 73 74 20  ruct SelectDest 
1e050 7b 0a 20 20 75 38 20 65 44 65 73 74 3b 20 20 20  {.  u8 eDest;   
1e060 20 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 77 20           /* How 
1e070 74 6f 20 64 69 73 70 6f 73 65 20 6f 66 20 74 68  to dispose of th
1e080 65 20 72 65 73 75 6c 74 73 2e 20 20 4f 6e 20 6f  e results.  On o
1e090 66 20 53 52 54 5f 2a 20 61 62 6f 76 65 2e 20 2a  f SRT_* above. *
1e0a0 2f 0a 20 20 69 6e 74 20 69 53 44 50 61 72 6d 3b  /.  int iSDParm;
1e0b0 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 70 61           /* A pa
1e0c0 72 61 6d 65 74 65 72 20 75 73 65 64 20 62 79 20  rameter used by 
1e0d0 74 68 65 20 65 44 65 73 74 20 64 69 73 70 6f 73  the eDest dispos
1e0e0 61 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 69  al method */.  i
1e0f0 6e 74 20 69 53 64 73 74 3b 20 20 20 20 20 20 20  nt iSdst;       
1e100 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69      /* Base regi
1e110 73 74 65 72 20 77 68 65 72 65 20 72 65 73 75 6c  ster where resul
1e120 74 73 20 61 72 65 20 77 72 69 74 74 65 6e 20 2a  ts are written *
1e130 2f 0a 20 20 69 6e 74 20 6e 53 64 73 74 3b 20 20  /.  int nSdst;  
1e140 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1e150 65 72 20 6f 66 20 72 65 67 69 73 74 65 72 73 20  er of registers 
1e160 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 63  allocated */.  c
1e170 68 61 72 20 2a 7a 41 66 66 53 64 73 74 3b 20 20  har *zAffSdst;  
1e180 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79 20      /* Affinity 
1e190 75 73 65 64 20 77 68 65 6e 20 65 44 65 73 74 3d  used when eDest=
1e1a0 3d 53 52 54 5f 53 65 74 20 2a 2f 0a 20 20 45 78  =SRT_Set */.  Ex
1e1b0 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79  prList *pOrderBy
1e1c0 3b 20 20 2f 2a 20 4b 65 79 20 63 6f 6c 75 6d 6e  ;  /* Key column
1e1d0 73 20 66 6f 72 20 53 52 54 5f 51 75 65 75 65 20  s for SRT_Queue 
1e1e0 61 6e 64 20 53 52 54 5f 44 69 73 74 51 75 65 75  and SRT_DistQueu
1e1f0 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44  e */.};../*.** D
1e200 75 72 69 6e 67 20 63 6f 64 65 20 67 65 6e 65 72  uring code gener
1e210 61 74 69 6f 6e 20 6f 66 20 73 74 61 74 65 6d 65  ation of stateme
1e220 6e 74 73 20 74 68 61 74 20 64 6f 20 69 6e 73 65  nts that do inse
1e230 72 74 73 20 69 6e 74 6f 20 41 55 54 4f 49 4e 43  rts into AUTOINC
1e240 52 45 4d 45 4e 54 0a 2a 2a 20 74 61 62 6c 65 73  REMENT.** tables
1e250 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  , the following 
1e260 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 61  information is a
1e270 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 54  ttached to the T
1e280 61 62 6c 65 2e 75 2e 61 75 74 6f 49 6e 63 2e 70  able.u.autoInc.p
1e290 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 6f 66 20 65  .** pointer of e
1e2a0 61 63 68 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e  ach autoincremen
1e2b0 74 20 74 61 62 6c 65 20 74 6f 20 72 65 63 6f 72  t table to recor
1e2c0 64 20 73 6f 6d 65 20 73 69 64 65 20 69 6e 66 6f  d some side info
1e2d0 72 6d 61 74 69 6f 6e 20 74 68 61 74 0a 2a 2a 20  rmation that.** 
1e2e0 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74  the code generat
1e2f0 6f 72 20 6e 65 65 64 73 2e 20 20 57 65 20 68 61  or needs.  We ha
1e300 76 65 20 74 6f 20 6b 65 65 70 20 70 65 72 2d 74  ve to keep per-t
1e310 61 62 6c 65 20 61 75 74 6f 69 6e 63 72 65 6d 65  able autoincreme
1e320 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f  nt.** informatio
1e330 6e 20 69 6e 20 63 61 73 65 20 69 6e 73 65 72 74  n in case insert
1e340 73 20 61 72 65 20 64 6f 6e 65 20 77 69 74 68 69  s are done withi
1e350 6e 20 74 72 69 67 67 65 72 73 2e 20 20 54 72 69  n triggers.  Tri
1e360 67 67 65 72 73 20 64 6f 20 6e 6f 74 0a 2a 2a 20  ggers do not.** 
1e370 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72 64 69 6e  normally coordin
1e380 61 74 65 20 74 68 65 69 72 20 61 63 74 69 76 69  ate their activi
1e390 74 69 65 73 2c 20 62 75 74 20 77 65 20 64 6f 20  ties, but we do 
1e3a0 6e 65 65 64 20 74 6f 20 63 6f 6f 72 64 69 6e 61  need to coordina
1e3b0 74 65 20 74 68 65 0a 2a 2a 20 6c 6f 61 64 69 6e  te the.** loadin
1e3c0 67 20 61 6e 64 20 73 61 76 69 6e 67 20 6f 66 20  g and saving of 
1e3d0 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 69 6e  autoincrement in
1e3e0 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74  formation..*/.st
1e3f0 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f  ruct AutoincInfo
1e400 20 7b 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f   {.  AutoincInfo
1e410 20 2a 70 4e 65 78 74 3b 20 20 20 2f 2a 20 4e 65   *pNext;   /* Ne
1e420 78 74 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 69 6e  xt info block in
1e430 20 61 20 6c 69 73 74 20 6f 66 20 74 68 65 6d 20   a list of them 
1e440 61 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  all */.  Table *
1e450 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 2f  pTab;          /
1e460 2a 20 54 61 62 6c 65 20 74 68 69 73 20 69 6e 66  * Table this inf
1e470 6f 20 62 6c 6f 63 6b 20 72 65 66 65 72 73 20 74  o block refers t
1e480 6f 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20  o */.  int iDb; 
1e490 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1e4a0 49 6e 64 65 78 20 69 6e 20 73 71 6c 69 74 65 33  Index in sqlite3
1e4b0 2e 61 44 62 5b 5d 20 6f 66 20 64 61 74 61 62 61  .aDb[] of databa
1e4c0 73 65 20 68 6f 6c 64 69 6e 67 20 70 54 61 62 20  se holding pTab 
1e4d0 2a 2f 0a 20 20 69 6e 74 20 72 65 67 43 74 72 3b  */.  int regCtr;
1e4e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65             /* Me
1e4f0 6d 6f 72 79 20 72 65 67 69 73 74 65 72 20 68 6f  mory register ho
1e500 6c 64 69 6e 67 20 74 68 65 20 72 6f 77 69 64 20  lding the rowid 
1e510 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f  counter */.};../
1e520 2a 0a 2a 2a 20 53 69 7a 65 20 6f 66 20 74 68 65  *.** Size of the
1e530 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 0a 2a 2f   column cache.*/
1e540 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1e550 4e 5f 43 4f 4c 43 41 43 48 45 0a 23 20 64 65 66  N_COLCACHE.# def
1e560 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c  ine SQLITE_N_COL
1e570 43 41 43 48 45 20 31 30 0a 23 65 6e 64 69 66 0a  CACHE 10.#endif.
1e580 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61 73 74 20  ./*.** At least 
1e590 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  one instance of 
1e5a0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
1e5b0 72 75 63 74 75 72 65 20 69 73 20 63 72 65 61 74  ructure is creat
1e5c0 65 64 20 66 6f 72 20 65 61 63 68 0a 2a 2a 20 74  ed for each.** t
1e5d0 72 69 67 67 65 72 20 74 68 61 74 20 6d 61 79 20  rigger that may 
1e5e0 62 65 20 66 69 72 65 64 20 77 68 69 6c 65 20 70  be fired while p
1e5f0 61 72 73 69 6e 67 20 61 6e 20 49 4e 53 45 52 54  arsing an INSERT
1e600 2c 20 55 50 44 41 54 45 20 6f 72 20 44 45 4c 45  , UPDATE or DELE
1e610 54 45 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 2e  TE.** statement.
1e620 20 41 6c 6c 20 73 75 63 68 20 6f 62 6a 65 63 74   All such object
1e630 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20  s are stored in 
1e640 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  the linked list 
1e650 68 65 61 64 65 64 20 61 74 0a 2a 2a 20 50 61 72  headed at.** Par
1e660 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20 61  se.pTriggerPrg a
1e670 6e 64 20 64 65 6c 65 74 65 64 20 6f 6e 63 65 20  nd deleted once 
1e680 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d 70 69 6c  statement compil
1e690 61 74 69 6f 6e 20 68 61 73 20 62 65 65 6e 0a 2a  ation has been.*
1e6a0 2a 20 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a 2a 0a  * completed..**.
1e6b0 2a 2a 20 41 20 56 64 62 65 20 73 75 62 2d 70 72  ** A Vdbe sub-pr
1e6c0 6f 67 72 61 6d 20 74 68 61 74 20 69 6d 70 6c 65  ogram that imple
1e6d0 6d 65 6e 74 73 20 74 68 65 20 62 6f 64 79 20 61  ments the body a
1e6e0 6e 64 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f  nd WHEN clause o
1e6f0 66 20 74 72 69 67 67 65 72 0a 2a 2a 20 54 72 69  f trigger.** Tri
1e700 67 67 65 72 50 72 67 2e 70 54 72 69 67 67 65 72  ggerPrg.pTrigger
1e710 2c 20 61 73 73 75 6d 69 6e 67 20 61 20 64 65 66  , assuming a def
1e720 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  ault ON CONFLICT
1e730 20 63 6c 61 75 73 65 20 6f 66 0a 2a 2a 20 54 72   clause of.** Tr
1e740 69 67 67 65 72 50 72 67 2e 6f 72 63 6f 6e 66 2c  iggerPrg.orconf,
1e750 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68   is stored in th
1e760 65 20 54 72 69 67 67 65 72 50 72 67 2e 70 50 72  e TriggerPrg.pPr
1e770 6f 67 72 61 6d 20 76 61 72 69 61 62 6c 65 2e 0a  ogram variable..
1e780 2a 2a 20 54 68 65 20 50 61 72 73 65 2e 70 54 72  ** The Parse.pTr
1e790 69 67 67 65 72 50 72 67 20 6c 69 73 74 20 6e 65  iggerPrg list ne
1e7a0 76 65 72 20 63 6f 6e 74 61 69 6e 73 20 74 77 6f  ver contains two
1e7b0 20 65 6e 74 72 69 65 73 20 77 69 74 68 20 74 68   entries with th
1e7c0 65 20 73 61 6d 65 0a 2a 2a 20 76 61 6c 75 65 73  e same.** values
1e7d0 20 66 6f 72 20 62 6f 74 68 20 70 54 72 69 67 67   for both pTrigg
1e7e0 65 72 20 61 6e 64 20 6f 72 63 6f 6e 66 2e 0a 2a  er and orconf..*
1e7f0 2a 0a 2a 2a 20 54 68 65 20 54 72 69 67 67 65 72  *.** The Trigger
1e800 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30 5d 20  Prg.aColmask[0] 
1e810 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20  variable is set 
1e820 74 6f 20 61 20 6d 61 73 6b 20 6f 66 20 6f 6c 64  to a mask of old
1e830 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 61 63  .* columns.** ac
1e840 63 65 73 73 65 64 20 28 6f 72 20 73 65 74 20 74  cessed (or set t
1e850 6f 20 30 20 66 6f 72 20 74 72 69 67 67 65 72 73  o 0 for triggers
1e860 20 66 69 72 65 64 20 61 73 20 61 20 72 65 73 75   fired as a resu
1e870 6c 74 20 6f 66 20 49 4e 53 45 52 54 0a 2a 2a 20  lt of INSERT.** 
1e880 73 74 61 74 65 6d 65 6e 74 73 29 2e 20 53 69 6d  statements). Sim
1e890 69 6c 61 72 6c 79 2c 20 74 68 65 20 54 72 69 67  ilarly, the Trig
1e8a0 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b  gerPrg.aColmask[
1e8b0 31 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20 73  1] variable is s
1e8c0 65 74 20 74 6f 0a 2a 2a 20 61 20 6d 61 73 6b 20  et to.** a mask 
1e8d0 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73  of new.* columns
1e8e0 20 75 73 65 64 20 62 79 20 74 68 65 20 70 72 6f   used by the pro
1e8f0 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  gram..*/.struct 
1e900 54 72 69 67 67 65 72 50 72 67 20 7b 0a 20 20 54  TriggerPrg {.  T
1e910 72 69 67 67 65 72 20 2a 70 54 72 69 67 67 65 72  rigger *pTrigger
1e920 3b 20 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65  ;      /* Trigge
1e930 72 20 74 68 69 73 20 70 72 6f 67 72 61 6d 20 77  r this program w
1e940 61 73 20 63 6f 64 65 64 20 66 72 6f 6d 20 2a 2f  as coded from */
1e950 0a 20 20 54 72 69 67 67 65 72 50 72 67 20 2a 70  .  TriggerPrg *p
1e960 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65  Next;      /* Ne
1e970 78 74 20 65 6e 74 72 79 20 69 6e 20 50 61 72 73  xt entry in Pars
1e980 65 2e 70 54 72 69 67 67 65 72 50 72 67 20 6c 69  e.pTriggerPrg li
1e990 73 74 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72  st */.  SubProgr
1e9a0 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20  am *pProgram;   
1e9b0 2f 2a 20 50 72 6f 67 72 61 6d 20 69 6d 70 6c 65  /* Program imple
1e9c0 6d 65 6e 74 69 6e 67 20 70 54 72 69 67 67 65 72  menting pTrigger
1e9d0 2f 6f 72 63 6f 6e 66 20 2a 2f 0a 20 20 69 6e 74  /orconf */.  int
1e9e0 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20   orconf;        
1e9f0 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
1ea00 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69  ON CONFLICT poli
1ea10 63 79 20 2a 2f 0a 20 20 75 33 32 20 61 43 6f 6c  cy */.  u32 aCol
1ea20 6d 61 73 6b 5b 32 5d 3b 20 20 20 20 20 20 20 20  mask[2];        
1ea30 2f 2a 20 4d 61 73 6b 73 20 6f 66 20 6f 6c 64 2e  /* Masks of old.
1ea40 2a 2c 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73  *, new.* columns
1ea50 20 61 63 63 65 73 73 65 64 20 2a 2f 0a 7d 3b 0a   accessed */.};.
1ea60 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79 44 62 4d 61  ./*.** The yDbMa
1ea70 73 6b 20 64 61 74 61 74 79 70 65 20 66 6f 72 20  sk datatype for 
1ea80 74 68 65 20 62 69 74 6d 61 73 6b 20 6f 66 20 61  the bitmask of a
1ea90 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61  ll attached data
1eaa0 62 61 73 65 73 2e 0a 2a 2f 0a 23 69 66 20 53 51  bases..*/.#if SQ
1eab0 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45  LITE_MAX_ATTACHE
1eac0 44 3e 33 30 0a 20 20 74 79 70 65 64 65 66 20 75  D>30.  typedef u
1ead0 6e 73 69 67 6e 65 64 20 63 68 61 72 20 79 44 62  nsigned char yDb
1eae0 4d 61 73 6b 5b 28 53 51 4c 49 54 45 5f 4d 41 58  Mask[(SQLITE_MAX
1eaf0 5f 41 54 54 41 43 48 45 44 2b 39 29 2f 38 5d 3b  _ATTACHED+9)/8];
1eb00 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1eb10 54 65 73 74 28 4d 2c 49 29 20 20 20 20 28 28 28  Test(M,I)    (((
1eb20 4d 29 5b 28 49 29 2f 38 5d 26 28 31 3c 3c 28 28  M)[(I)/8]&(1<<((
1eb30 49 29 26 37 29 29 29 21 3d 30 29 0a 23 20 64 65  I)&7)))!=0).# de
1eb40 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28  fine DbMaskZero(
1eb50 4d 29 20 20 20 20 20 20 6d 65 6d 73 65 74 28 28  M)      memset((
1eb60 4d 29 2c 30 2c 73 69 7a 65 6f 66 28 4d 29 29 0a  M),0,sizeof(M)).
1eb70 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 53  # define DbMaskS
1eb80 65 74 28 4d 2c 49 29 20 20 20 20 20 28 4d 29 5b  et(M,I)     (M)[
1eb90 28 49 29 2f 38 5d 7c 3d 28 31 3c 3c 28 28 49 29  (I)/8]|=(1<<((I)
1eba0 26 37 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62  &7)).# define Db
1ebb0 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20  MaskAllZero(M)  
1ebc0 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c   sqlite3DbMaskAl
1ebd0 6c 5a 65 72 6f 28 4d 29 0a 23 20 64 65 66 69 6e  lZero(M).# defin
1ebe0 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28  e DbMaskNonZero(
1ebf0 4d 29 20 20 20 28 73 71 6c 69 74 65 33 44 62 4d  M)   (sqlite3DbM
1ec00 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 3d 3d 30  askAllZero(M)==0
1ec10 29 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64 65  ).#else.  typede
1ec20 66 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 79  f unsigned int y
1ec30 44 62 4d 61 73 6b 3b 0a 23 20 64 65 66 69 6e 65  DbMask;.# define
1ec40 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29   DbMaskTest(M,I)
1ec50 20 20 20 20 28 28 28 4d 29 26 28 28 28 79 44 62      (((M)&(((yDb
1ec60 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29 29 21 3d  Mask)1)<<(I)))!=
1ec70 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  0).# define DbMa
1ec80 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20 20 28  skZero(M)      (
1ec90 4d 29 3d 30 0a 23 20 64 65 66 69 6e 65 20 44 62  M)=0.# define Db
1eca0 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20 20 20 20  MaskSet(M,I)    
1ecb0 20 28 4d 29 7c 3d 28 28 28 79 44 62 4d 61 73 6b   (M)|=(((yDbMask
1ecc0 29 31 29 3c 3c 28 49 29 29 0a 23 20 64 65 66 69  )1)<<(I)).# defi
1ecd0 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f  ne DbMaskAllZero
1ece0 28 4d 29 20 20 20 28 4d 29 3d 3d 30 0a 23 20 64  (M)   (M)==0.# d
1ecf0 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a  efine DbMaskNonZ
1ed00 65 72 6f 28 4d 29 20 20 20 28 4d 29 21 3d 30 0a  ero(M)   (M)!=0.
1ed10 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e  #endif../*.** An
1ed20 20 53 51 4c 20 70 61 72 73 65 72 20 63 6f 6e 74   SQL parser cont
1ed30 65 78 74 2e 20 20 41 20 63 6f 70 79 20 6f 66 20  ext.  A copy of 
1ed40 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69  this structure i
1ed50 73 20 70 61 73 73 65 64 20 74 68 72 6f 75 67 68  s passed through
1ed60 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 72 20 61  .** the parser a
1ed70 6e 64 20 64 6f 77 6e 20 69 6e 74 6f 20 61 6c 6c  nd down into all
1ed80 20 74 68 65 20 70 61 72 73 65 72 20 61 63 74 69   the parser acti
1ed90 6f 6e 20 72 6f 75 74 69 6e 65 20 69 6e 20 6f 72  on routine in or
1eda0 64 65 72 20 74 6f 0a 2a 2a 20 63 61 72 72 79 20  der to.** carry 
1edb0 61 72 6f 75 6e 64 20 69 6e 66 6f 72 6d 61 74 69  around informati
1edc0 6f 6e 20 74 68 61 74 20 69 73 20 67 6c 6f 62 61  on that is globa
1edd0 6c 20 74 6f 20 74 68 65 20 65 6e 74 69 72 65 20  l to the entire 
1ede0 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  parse..**.** The
1edf0 20 73 74 72 75 63 74 75 72 65 20 69 73 20 64 69   structure is di
1ee00 76 69 64 65 64 20 69 6e 74 6f 20 74 77 6f 20 70  vided into two p
1ee10 61 72 74 73 2e 20 20 57 68 65 6e 20 74 68 65 20  arts.  When the 
1ee20 70 61 72 73 65 72 20 61 6e 64 20 63 6f 64 65 0a  parser and code.
1ee30 2a 2a 20 67 65 6e 65 72 61 74 65 20 63 61 6c 6c  ** generate call
1ee40 20 74 68 65 6d 73 65 6c 76 65 73 20 72 65 63 75   themselves recu
1ee50 72 73 69 76 65 6c 79 2c 20 74 68 65 20 66 69 72  rsively, the fir
1ee60 73 74 20 70 61 72 74 20 6f 66 20 74 68 65 20 73  st part of the s
1ee70 74 72 75 63 74 75 72 65 0a 2a 2a 20 69 73 20 63  tructure.** is c
1ee80 6f 6e 73 74 61 6e 74 20 62 75 74 20 74 68 65 20  onstant but the 
1ee90 73 65 63 6f 6e 64 20 70 61 72 74 20 69 73 20 72  second part is r
1eea0 65 73 65 74 20 61 74 20 74 68 65 20 62 65 67 69  eset at the begi
1eeb0 6e 6e 69 6e 67 20 61 6e 64 20 65 6e 64 20 6f 66  nning and end of
1eec0 0a 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73 69  .** each recursi
1eed0 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 54  on..**.** The nT
1eee0 61 62 6c 65 4c 6f 63 6b 20 61 6e 64 20 61 54 61  ableLock and aTa
1eef0 62 6c 65 4c 6f 63 6b 20 76 61 72 69 61 62 6c 65  bleLock variable
1ef00 73 20 61 72 65 20 6f 6e 6c 79 20 75 73 65 64 20  s are only used 
1ef10 69 66 20 74 68 65 20 73 68 61 72 65 64 2d 63 61  if the shared-ca
1ef20 63 68 65 0a 2a 2a 20 66 65 61 74 75 72 65 20 69  che.** feature i
1ef30 73 20 65 6e 61 62 6c 65 64 20 28 69 66 20 73 71  s enabled (if sq
1ef40 6c 69 74 65 33 54 73 64 28 29 2d 3e 75 73 65 53  lite3Tsd()->useS
1ef50 68 61 72 65 64 44 61 74 61 20 69 73 20 74 72 75  haredData is tru
1ef60 65 29 2e 20 54 68 65 79 20 61 72 65 0a 2a 2a 20  e). They are.** 
1ef70 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
1ef80 65 20 73 65 74 20 6f 66 20 74 61 62 6c 65 2d 6c  e set of table-l
1ef90 6f 63 6b 73 20 72 65 71 75 69 72 65 64 20 62 79  ocks required by
1efa0 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62   the statement b
1efb0 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64  eing.** compiled
1efc0 2e 20 46 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74  . Function sqlit
1efd0 65 33 54 61 62 6c 65 4c 6f 63 6b 28 29 20 69 73  e3TableLock() is
1efe0 20 75 73 65 64 20 74 6f 20 61 64 64 20 65 6e 74   used to add ent
1eff0 72 69 65 73 20 74 6f 20 74 68 65 0a 2a 2a 20 6c  ries to the.** l
1f000 69 73 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50  ist..*/.struct P
1f010 61 72 73 65 20 7b 0a 20 20 73 71 6c 69 74 65 33  arse {.  sqlite3
1f020 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 2f 2a   *db;         /*
1f030 20 54 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   The main databa
1f040 73 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a  se structure */.
1f050 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 3b    char *zErrMsg;
1f060 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 72 72         /* An err
1f070 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20  or message */.  
1f080 56 64 62 65 20 2a 70 56 64 62 65 3b 20 20 20 20  Vdbe *pVdbe;    
1f090 20 20 20 20 20 2f 2a 20 41 6e 20 65 6e 67 69 6e       /* An engin
1f0a0 65 20 66 6f 72 20 65 78 65 63 75 74 69 6e 67 20  e for executing 
1f0b0 64 61 74 61 62 61 73 65 20 62 79 74 65 63 6f 64  database bytecod
1f0c0 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20  e */.  int rc;  
1f0d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
1f0e0 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20  eturn code from 
1f0f0 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 20 20 75  execution */.  u
1f100 38 20 63 6f 6c 4e 61 6d 65 73 53 65 74 3b 20 20  8 colNamesSet;  
1f110 20 20 20 20 2f 2a 20 54 52 55 45 20 61 66 74 65      /* TRUE afte
1f120 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 20  r OP_ColumnName 
1f130 68 61 73 20 62 65 65 6e 20 69 73 73 75 65 64 20  has been issued 
1f140 74 6f 20 70 56 64 62 65 20 2a 2f 0a 20 20 75 38  to pVdbe */.  u8
1f150 20 63 68 65 63 6b 53 63 68 65 6d 61 3b 20 20 20   checkSchema;   
1f160 20 20 20 2f 2a 20 43 61 75 73 65 73 20 73 63 68     /* Causes sch
1f170 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68 65 63 6b  ema cookie check
1f180 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20   after an error 
1f190 2a 2f 0a 20 20 75 38 20 6e 65 73 74 65 64 3b 20  */.  u8 nested; 
1f1a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1f1b0 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 63 61  ber of nested ca
1f1c0 6c 6c 73 20 74 6f 20 74 68 65 20 70 61 72 73 65  lls to the parse
1f1d0 72 2f 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72  r/code generator
1f1e0 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d 70 52 65   */.  u8 nTempRe
1f1f0 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  g;         /* Nu
1f200 6d 62 65 72 20 6f 66 20 74 65 6d 70 6f 72 61 72  mber of temporar
1f210 79 20 72 65 67 69 73 74 65 72 73 20 69 6e 20 61  y registers in a
1f220 54 65 6d 70 52 65 67 5b 5d 20 2a 2f 0a 20 20 75  TempReg[] */.  u
1f230 38 20 69 73 4d 75 6c 74 69 57 72 69 74 65 3b 20  8 isMultiWrite; 
1f240 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73      /* True if s
1f250 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 6d 6f 64  tatement may mod
1f260 69 66 79 2f 69 6e 73 65 72 74 20 6d 75 6c 74 69  ify/insert multi
1f270 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 20 20 75 38  ple rows */.  u8
1f280 20 6d 61 79 41 62 6f 72 74 3b 20 20 20 20 20 20   mayAbort;      
1f290 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74     /* True if st
1f2a0 61 74 65 6d 65 6e 74 20 6d 61 79 20 74 68 72 6f  atement may thro
1f2b0 77 20 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70  w an ABORT excep
1f2c0 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 68 61 73  tion */.  u8 has
1f2d0 43 6f 6d 70 6f 75 6e 64 3b 20 20 20 20 20 20 2f  Compound;      /
1f2e0 2a 20 4e 65 65 64 20 74 6f 20 69 6e 76 6f 6b 65  * Need to invoke
1f2f0 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64   convertCompound
1f300 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79  SelectToSubquery
1f310 28 29 20 2a 2f 0a 20 20 75 38 20 6f 6b 43 6f 6e  () */.  u8 okCon
1f320 73 74 46 61 63 74 6f 72 3b 20 20 20 20 2f 2a 20  stFactor;    /* 
1f330 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 6f 75 74  OK to factor out
1f340 20 63 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a 20 20   constants */.  
1f350 75 38 20 64 69 73 61 62 6c 65 4c 6f 6f 6b 61 73  u8 disableLookas
1f360 69 64 65 3b 20 2f 2a 20 4e 75 6d 62 65 72 20 6f  ide; /* Number o
1f370 66 20 74 69 6d 65 73 20 6c 6f 6f 6b 61 73 69 64  f times lookasid
1f380 65 20 68 61 73 20 62 65 65 6e 20 64 69 73 61 62  e has been disab
1f390 6c 65 64 20 2a 2f 0a 20 20 75 38 20 6e 43 6f 6c  led */.  u8 nCol
1f3a0 43 61 63 68 65 3b 20 20 20 20 20 20 20 20 2f 2a  Cache;        /*
1f3b0 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69   Number of entri
1f3c0 65 73 20 69 6e 20 61 43 6f 6c 43 61 63 68 65 5b  es in aColCache[
1f3d0 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 61 6e 67  ] */.  int nRang
1f3e0 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 53  eReg;       /* S
1f3f0 69 7a 65 20 6f 66 20 74 68 65 20 74 65 6d 70 6f  ize of the tempo
1f400 72 61 72 79 20 72 65 67 69 73 74 65 72 20 62 6c  rary register bl
1f410 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 69 52 61  ock */.  int iRa
1f420 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a  ngeReg;       /*
1f430 20 46 69 72 73 74 20 72 65 67 69 73 74 65 72 20   First register 
1f440 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67  in temporary reg
1f450 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20  ister block */. 
1f460 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20   int nErr;      
1f470 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1f480 6f 66 20 65 72 72 6f 72 73 20 73 65 65 6e 20 2a  of errors seen *
1f490 2f 0a 20 20 69 6e 74 20 6e 54 61 62 3b 20 20 20  /.  int nTab;   
1f4a0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1f4b0 65 72 20 6f 66 20 70 72 65 76 69 6f 75 73 6c 79  er of previously
1f4c0 20 61 6c 6c 6f 63 61 74 65 64 20 56 44 42 45 20   allocated VDBE 
1f4d0 63 75 72 73 6f 72 73 20 2a 2f 0a 20 20 69 6e 74  cursors */.  int
1f4e0 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20   nMem;          
1f4f0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d    /* Number of m
1f500 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64  emory cells used
1f510 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74   so far */.  int
1f520 20 6e 4f 70 41 6c 6c 6f 63 3b 20 20 20 20 20 20   nOpAlloc;      
1f530 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73    /* Number of s
1f540 6c 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64 20 66  lots allocated f
1f550 6f 72 20 56 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f  or Vdbe.aOp[] */
1f560 0a 20 20 69 6e 74 20 73 7a 4f 70 41 6c 6c 6f 63  .  int szOpAlloc
1f570 3b 20 20 20 20 20 20 20 2f 2a 20 42 79 74 65 73  ;       /* Bytes
1f580 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61 63 65   of memory space
1f590 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 56   allocated for V
1f5a0 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69  dbe.aOp[] */.  i
1f5b0 6e 74 20 69 53 65 6c 66 54 61 62 3b 20 20 20 20  nt iSelfTab;    
1f5c0 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 66 6f 72      /* Table for
1f5d0 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
1f5e0 20 61 6e 20 69 6e 64 65 78 20 6f 6e 20 65 78 70   an index on exp
1f5f0 72 2c 20 6f 72 20 6e 65 67 61 74 69 76 65 0a 20  r, or negative. 
1f600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f610 20 20 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20        ** of the 
1f620 62 61 73 65 20 72 65 67 69 73 74 65 72 20 64 75  base register du
1f630 72 69 6e 67 20 63 68 65 63 6b 2d 63 6f 6e 73 74  ring check-const
1f640 72 61 69 6e 74 20 65 76 61 6c 20 2a 2f 0a 20 20  raint eval */.  
1f650 69 6e 74 20 69 43 61 63 68 65 4c 65 76 65 6c 3b  int iCacheLevel;
1f660 20 20 20 20 20 2f 2a 20 43 6f 6c 43 61 63 68 65       /* ColCache
1f670 20 76 61 6c 69 64 20 77 68 65 6e 20 61 43 6f 6c   valid when aCol
1f680 43 61 63 68 65 5b 5d 2e 69 4c 65 76 65 6c 3c 3d  Cache[].iLevel<=
1f690 69 43 61 63 68 65 4c 65 76 65 6c 20 2a 2f 0a 20  iCacheLevel */. 
1f6a0 20 69 6e 74 20 69 43 61 63 68 65 43 6e 74 3b 20   int iCacheCnt; 
1f6b0 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72        /* Counter
1f6c0 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74   used to generat
1f6d0 65 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 6c 72  e aColCache[].lr
1f6e0 75 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e  u values */.  in
1f6f0 74 20 6e 4c 61 62 65 6c 3b 20 20 20 20 20 20 20  t nLabel;       
1f700 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1f710 6c 61 62 65 6c 73 20 75 73 65 64 20 2a 2f 0a 20  labels used */. 
1f720 20 69 6e 74 20 2a 61 4c 61 62 65 6c 3b 20 20 20   int *aLabel;   
1f730 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20 74        /* Space t
1f740 6f 20 68 6f 6c 64 20 74 68 65 20 6c 61 62 65 6c  o hold the label
1f750 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  s */.  ExprList 
1f760 2a 70 43 6f 6e 73 74 45 78 70 72 3b 2f 2a 20 43  *pConstExpr;/* C
1f770 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69  onstant expressi
1f780 6f 6e 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 63  ons */.  Token c
1f790 6f 6e 73 74 72 61 69 6e 74 4e 61 6d 65 3b 2f 2a  onstraintName;/*
1f7a0 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e   Name of the con
1f7b0 73 74 72 61 69 6e 74 20 63 75 72 72 65 6e 74 6c  straint currentl
1f7c0 79 20 62 65 69 6e 67 20 70 61 72 73 65 64 20 2a  y being parsed *
1f7d0 2f 0a 20 20 79 44 62 4d 61 73 6b 20 77 72 69 74  /.  yDbMask writ
1f7e0 65 4d 61 73 6b 3b 20 20 20 2f 2a 20 53 74 61 72  eMask;   /* Star
1f7f0 74 20 61 20 77 72 69 74 65 20 74 72 61 6e 73 61  t a write transa
1f800 63 74 69 6f 6e 20 6f 6e 20 74 68 65 73 65 20 64  ction on these d
1f810 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20 79 44  atabases */.  yD
1f820 62 4d 61 73 6b 20 63 6f 6f 6b 69 65 4d 61 73 6b  bMask cookieMask
1f830 3b 20 20 2f 2a 20 42 69 74 6d 61 73 6b 20 6f 66  ;  /* Bitmask of
1f840 20 73 63 68 65 6d 61 20 76 65 72 69 66 69 65 64   schema verified
1f850 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20   databases */.  
1f860 69 6e 74 20 72 65 67 52 6f 77 69 64 3b 20 20 20  int regRowid;   
1f870 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
1f880 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69 64 20 6f   holding rowid o
1f890 66 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 65  f CREATE TABLE e
1f8a0 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65  ntry */.  int re
1f8b0 67 52 6f 6f 74 3b 20 20 20 20 20 20 20 20 20 2f  gRoot;         /
1f8c0 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69  * Register holdi
1f8d0 6e 67 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d  ng root page num
1f8e0 62 65 72 20 66 6f 72 20 6e 65 77 20 6f 62 6a 65  ber for new obje
1f8f0 63 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61  cts */.  int nMa
1f900 78 41 72 67 3b 20 20 20 20 20 20 20 20 20 2f 2a  xArg;         /*
1f910 20 4d 61 78 20 61 72 67 73 20 70 61 73 73 65 64   Max args passed
1f920 20 74 6f 20 75 73 65 72 20 66 75 6e 63 74 69 6f   to user functio
1f930 6e 20 62 79 20 73 75 62 2d 70 72 6f 67 72 61 6d  n by sub-program
1f940 20 2a 2f 0a 23 69 66 20 53 45 4c 45 43 54 54 52   */.#if SELECTTR
1f950 41 43 45 5f 45 4e 41 42 4c 45 44 0a 20 20 69 6e  ACE_ENABLED.  in
1f960 74 20 6e 53 65 6c 65 63 74 3b 20 20 20 20 20 20  t nSelect;      
1f970 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1f980 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
1f990 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20  s seen */.  int 
1f9a0 6e 53 65 6c 65 63 74 49 6e 64 65 6e 74 3b 20 20  nSelectIndent;  
1f9b0 20 2f 2a 20 48 6f 77 20 66 61 72 20 74 6f 20 69   /* How far to i
1f9c0 6e 64 65 6e 74 20 53 45 4c 45 43 54 54 52 41 43  ndent SELECTTRAC
1f9d0 45 28 29 20 6f 75 74 70 75 74 20 2a 2f 0a 23 65  E() output */.#e
1f9e0 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
1f9f0 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f  ITE_OMIT_SHARED_
1fa00 43 41 43 48 45 0a 20 20 69 6e 74 20 6e 54 61 62  CACHE.  int nTab
1fa10 6c 65 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 2f  leLock;        /
1fa20 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 63 6b  * Number of lock
1fa30 73 20 69 6e 20 61 54 61 62 6c 65 4c 6f 63 6b 20  s in aTableLock 
1fa40 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f 63 6b 20 2a  */.  TableLock *
1fa50 61 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f 2a 20 52  aTableLock; /* R
1fa60 65 71 75 69 72 65 64 20 74 61 62 6c 65 20 6c 6f  equired table lo
1fa70 63 6b 73 20 66 6f 72 20 73 68 61 72 65 64 2d 63  cks for shared-c
1fa80 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 65 6e  ache mode */.#en
1fa90 64 69 66 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66  dif.  AutoincInf
1faa0 6f 20 2a 70 41 69 6e 63 3b 20 20 2f 2a 20 49 6e  o *pAinc;  /* In
1fab0 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
1fac0 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 63 6f  AUTOINCREMENT co
1fad0 75 6e 74 65 72 73 20 2a 2f 0a 20 20 50 61 72 73  unters */.  Pars
1fae0 65 20 2a 70 54 6f 70 6c 65 76 65 6c 3b 20 20 20  e *pToplevel;   
1faf0 20 2f 2a 20 50 61 72 73 65 20 73 74 72 75 63 74   /* Parse struct
1fb00 75 72 65 20 66 6f 72 20 6d 61 69 6e 20 70 72 6f  ure for main pro
1fb10 67 72 61 6d 20 28 6f 72 20 4e 55 4c 4c 29 20 2a  gram (or NULL) *
1fb20 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 72 69 67  /.  Table *pTrig
1fb30 67 65 72 54 61 62 3b 20 20 2f 2a 20 54 61 62 6c  gerTab;  /* Tabl
1fb40 65 20 74 72 69 67 67 65 72 73 20 61 72 65 20 62  e triggers are b
1fb50 65 69 6e 67 20 63 6f 64 65 64 20 66 6f 72 20 2a  eing coded for *
1fb60 2f 0a 20 20 69 6e 74 20 61 64 64 72 43 72 54 61  /.  int addrCrTa
1fb70 62 3b 20 20 20 20 20 20 20 2f 2a 20 41 64 64 72  b;       /* Addr
1fb80 65 73 73 20 6f 66 20 4f 50 5f 43 72 65 61 74 65  ess of OP_Create
1fb90 42 74 72 65 65 20 6f 70 63 6f 64 65 20 6f 6e 20  Btree opcode on 
1fba0 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a  CREATE TABLE */.
1fbb0 20 20 75 33 32 20 6e 51 75 65 72 79 4c 6f 6f 70    u32 nQueryLoop
1fbc0 3b 20 20 20 20 20 20 2f 2a 20 45 73 74 20 6e 75  ;      /* Est nu
1fbd0 6d 62 65 72 20 6f 66 20 69 74 65 72 61 74 69 6f  mber of iteratio
1fbe0 6e 73 20 6f 66 20 61 20 71 75 65 72 79 20 28 31  ns of a query (1
1fbf0 30 2a 6c 6f 67 32 28 4e 29 29 20 2a 2f 0a 20 20  0*log2(N)) */.  
1fc00 75 33 32 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20  u32 oldmask;    
1fc10 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20       /* Mask of 
1fc20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65  old.* columns re
1fc30 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33  ferenced */.  u3
1fc40 32 20 6e 65 77 6d 61 73 6b 3b 20 20 20 20 20 20  2 newmask;      
1fc50 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65     /* Mask of ne
1fc60 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65  w.* columns refe
1fc70 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 38 20 65  renced */.  u8 e
1fc80 54 72 69 67 67 65 72 4f 70 3b 20 20 20 20 20 20  TriggerOp;      
1fc90 20 2f 2a 20 54 4b 5f 55 50 44 41 54 45 2c 20 54   /* TK_UPDATE, T
1fca0 4b 5f 49 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44  K_INSERT or TK_D
1fcb0 45 4c 45 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f  ELETE */.  u8 eO
1fcc0 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20  rconf;          
1fcd0 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f  /* Default ON CO
1fce0 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 66 6f  NFLICT policy fo
1fcf0 72 20 74 72 69 67 67 65 72 20 73 74 65 70 73 20  r trigger steps 
1fd00 2a 2f 0a 20 20 75 38 20 64 69 73 61 62 6c 65 54  */.  u8 disableT
1fd10 72 69 67 67 65 72 73 3b 20 20 2f 2a 20 54 72 75  riggers;  /* Tru
1fd20 65 20 74 6f 20 64 69 73 61 62 6c 65 20 74 72 69  e to disable tri
1fd30 67 67 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a  ggers */..  /***
1fd40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fd50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fd60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fd70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fd80 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 46 69 65  *******.  ** Fie
1fd90 6c 64 73 20 61 62 6f 76 65 20 6d 75 73 74 20 62  lds above must b
1fda0 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f  e initialized to
1fdb0 20 7a 65 72 6f 2e 20 20 54 68 65 20 66 69 65 6c   zero.  The fiel
1fdc0 64 73 20 74 68 61 74 20 66 6f 6c 6c 6f 77 2c 0a  ds that follow,.
1fdd0 20 20 2a 2a 20 64 6f 77 6e 20 74 6f 20 74 68 65    ** down to the
1fde0 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68   beginning of th
1fdf0 65 20 72 65 63 75 72 73 69 76 65 20 73 65 63 74  e recursive sect
1fe00 69 6f 6e 2c 20 64 6f 20 6e 6f 74 20 6e 65 65 64  ion, do not need
1fe10 20 74 6f 20 62 65 0a 20 20 2a 2a 20 69 6e 69 74   to be.  ** init
1fe20 69 61 6c 69 7a 65 64 20 61 73 20 74 68 65 79 20  ialized as they 
1fe30 77 69 6c 6c 20 62 65 20 73 65 74 20 62 65 66 6f  will be set befo
1fe40 72 65 20 62 65 69 6e 67 20 75 73 65 64 2e 20 20  re being used.  
1fe50 54 68 65 20 62 6f 75 6e 64 61 72 79 20 69 73 0a  The boundary is.
1fe60 20 20 2a 2a 20 64 65 74 65 72 6d 69 6e 65 64 20    ** determined 
1fe70 62 79 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73  by offsetof(Pars
1fe80 65 2c 61 43 6f 6c 43 61 63 68 65 29 2e 0a 20 20  e,aColCache)..  
1fe90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fea0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1feb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fec0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fed0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 73  **********/..  s
1fee0 74 72 75 63 74 20 79 43 6f 6c 43 61 63 68 65 20  truct yColCache 
1fef0 7b 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65  {.    int iTable
1ff00 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
1ff10 61 62 6c 65 20 63 75 72 73 6f 72 20 6e 75 6d 62  able cursor numb
1ff20 65 72 20 2a 2f 0a 20 20 20 20 69 31 36 20 69 43  er */.    i16 iC
1ff30 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
1ff40 2f 2a 20 54 61 62 6c 65 20 63 6f 6c 75 6d 6e 20  /* Table column 
1ff50 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 75 38  number */.    u8
1ff60 20 74 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20   tempReg;       
1ff70 20 20 20 20 2f 2a 20 69 52 65 67 20 69 73 20 61      /* iReg is a
1ff80 20 74 65 6d 70 20 72 65 67 69 73 74 65 72 20 74   temp register t
1ff90 68 61 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20  hat needs to be 
1ffa0 66 72 65 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74  freed */.    int
1ffb0 20 69 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20   iLevel;        
1ffc0 20 20 20 2f 2a 20 4e 65 73 74 69 6e 67 20 6c 65     /* Nesting le
1ffd0 76 65 6c 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  vel */.    int i
1ffe0 52 65 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Reg;            
1fff0 20 2f 2a 20 52 65 67 20 77 69 74 68 20 76 61 6c   /* Reg with val
20000 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d  ue of this colum
20010 6e 2e 20 30 20 6d 65 61 6e 73 20 6e 6f 6e 65 2e  n. 0 means none.
20020 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6c 72 75 3b   */.    int lru;
20030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
20040 20 4c 65 61 73 74 20 72 65 63 65 6e 74 6c 79 20   Least recently 
20050 75 73 65 64 20 65 6e 74 72 79 20 68 61 73 20 74  used entry has t
20060 68 65 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75  he smallest valu
20070 65 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 43 61 63  e */.  } aColCac
20080 68 65 5b 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43  he[SQLITE_N_COLC
20090 41 43 48 45 5d 3b 20 20 2f 2a 20 4f 6e 65 20 66  ACHE];  /* One f
200a0 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 63  or each column c
200b0 61 63 68 65 20 65 6e 74 72 79 20 2a 2f 0a 20 20  ache entry */.  
200c0 69 6e 74 20 61 54 65 6d 70 52 65 67 5b 38 5d 3b  int aTempReg[8];
200d0 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 6c 64 69          /* Holdi
200e0 6e 67 20 61 72 65 61 20 66 6f 72 20 74 65 6d 70  ng area for temp
200f0 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 73 20  orary registers 
20100 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e 61 6d 65  */.  Token sName
20110 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 2f 2a 20  Token;       /* 
20120 54 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71 75 61  Token with unqua
20130 6c 69 66 69 65 64 20 73 63 68 65 6d 61 20 6f 62  lified schema ob
20140 6a 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 0a 20 20  ject name */..  
20150 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
20160 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20170 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20180 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20190 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 41  *********.  ** A
201a0 62 6f 76 65 20 69 73 20 63 6f 6e 73 74 61 6e 74  bove is constant
201b0 20 62 65 74 77 65 65 6e 20 72 65 63 75 72 73 69   between recursi
201c0 6f 6e 73 2e 20 20 42 65 6c 6f 77 20 69 73 20 72  ons.  Below is r
201d0 65 73 65 74 20 62 65 66 6f 72 65 20 61 6e 64 20  eset before and 
201e0 61 66 74 65 72 0a 20 20 2a 2a 20 65 61 63 68 20  after.  ** each 
201f0 72 65 63 75 72 73 69 6f 6e 2e 20 20 54 68 65 20  recursion.  The 
20200 62 6f 75 6e 64 61 72 79 20 62 65 74 77 65 65 6e  boundary between
20210 20 74 68 65 73 65 20 74 77 6f 20 72 65 67 69 6f   these two regio
20220 6e 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  ns is determined
20230 0a 20 20 2a 2a 20 75 73 69 6e 67 20 6f 66 66 73  .  ** using offs
20240 65 74 6f 66 28 50 61 72 73 65 2c 73 4c 61 73 74  etof(Parse,sLast
20250 54 6f 6b 65 6e 29 20 73 6f 20 74 68 65 20 73 4c  Token) so the sL
20260 61 73 74 54 6f 6b 65 6e 20 66 69 65 6c 64 20 6d  astToken field m
20270 75 73 74 20 62 65 20 74 68 65 0a 20 20 2a 2a 20  ust be the.  ** 
20280 66 69 72 73 74 20 66 69 65 6c 64 20 69 6e 20 74  first field in t
20290 68 65 20 72 65 63 75 72 73 69 76 65 20 72 65 67  he recursive reg
202a0 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a  ion..  *********
202b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
202c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
202d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
202e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f  ***************/
202f0 0a 0a 20 20 54 6f 6b 65 6e 20 73 4c 61 73 74 54  ..  Token sLastT
20300 6f 6b 65 6e 3b 20 20 20 20 20 20 20 2f 2a 20 54  oken;       /* T
20310 68 65 20 6c 61 73 74 20 74 6f 6b 65 6e 20 70 61  he last token pa
20320 72 73 65 64 20 2a 2f 0a 20 20 79 6e 56 61 72 20  rsed */.  ynVar 
20330 6e 56 61 72 3b 20 20 20 20 20 20 20 20 20 20 20  nVar;           
20340 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
20350 20 27 3f 27 20 76 61 72 69 61 62 6c 65 73 20 73   '?' variables s
20360 65 65 6e 20 69 6e 20 74 68 65 20 53 51 4c 20 73  een in the SQL s
20370 6f 20 66 61 72 20 2a 2f 0a 20 20 75 38 20 69 50  o far */.  u8 iP
20380 6b 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20  kSortOrder;     
20390 20 20 20 20 20 2f 2a 20 41 53 43 20 6f 72 20 44       /* ASC or D
203a0 45 53 43 20 66 6f 72 20 49 4e 54 45 47 45 52 20  ESC for INTEGER 
203b0 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20  PRIMARY KEY */. 
203c0 20 75 38 20 65 78 70 6c 61 69 6e 3b 20 20 20 20   u8 explain;    
203d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
203e0 75 65 20 69 66 20 74 68 65 20 45 58 50 4c 41 49  ue if the EXPLAI
203f0 4e 20 66 6c 61 67 20 69 73 20 66 6f 75 6e 64 20  N flag is found 
20400 6f 6e 20 74 68 65 20 71 75 65 72 79 20 2a 2f 0a  on the query */.
20410 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
20420 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
20430 0a 20 20 75 38 20 64 65 63 6c 61 72 65 56 74 61  .  u8 declareVta
20440 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  b;           /* 
20450 54 72 75 65 20 69 66 20 69 6e 73 69 64 65 20 73  True if inside s
20460 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76  qlite3_declare_v
20470 74 61 62 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e  tab() */.  int n
20480 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20  VtabLock;       
20490 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
204a0 66 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73  f virtual tables
204b0 20 74 6f 20 6c 6f 63 6b 20 2a 2f 0a 23 65 6e 64   to lock */.#end
204c0 69 66 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74  if.  int nHeight
204d0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
204e0 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 74 72 65  * Expression tre
204f0 65 20 68 65 69 67 68 74 20 6f 66 20 63 75 72 72  e height of curr
20500 65 6e 74 20 73 75 62 2d 73 65 6c 65 63 74 20 2a  ent sub-select *
20510 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
20520 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20  _OMIT_EXPLAIN.  
20530 69 6e 74 20 69 53 65 6c 65 63 74 49 64 3b 20 20  int iSelectId;  
20540 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 44 20            /* ID 
20550 6f 66 20 63 75 72 72 65 6e 74 20 73 65 6c 65 63  of current selec
20560 74 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75  t for EXPLAIN ou
20570 74 70 75 74 20 2a 2f 0a 20 20 69 6e 74 20 69 4e  tput */.  int iN
20580 65 78 74 53 65 6c 65 63 74 49 64 3b 20 20 20 20  extSelectId;    
20590 20 20 20 20 2f 2a 20 4e 65 78 74 20 61 76 61 69      /* Next avai
205a0 6c 61 62 6c 65 20 73 65 6c 65 63 74 20 49 44 20  lable select ID 
205b0 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70  for EXPLAIN outp
205c0 75 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 56  ut */.#endif.  V
205d0 4c 69 73 74 20 2a 70 56 4c 69 73 74 3b 20 20 20  List *pVList;   
205e0 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 70 70           /* Mapp
205f0 69 6e 67 20 62 65 74 77 65 65 6e 20 76 61 72 69  ing between vari
20600 61 62 6c 65 20 6e 61 6d 65 73 20 61 6e 64 20 6e  able names and n
20610 75 6d 62 65 72 73 20 2a 2f 0a 20 20 56 64 62 65  umbers */.  Vdbe
20620 20 2a 70 52 65 70 72 65 70 61 72 65 3b 20 20 20   *pReprepare;   
20630 20 20 20 20 20 20 2f 2a 20 56 4d 20 62 65 69 6e        /* VM bein
20640 67 20 72 65 70 72 65 70 61 72 65 64 20 28 73 71  g reprepared (sq
20650 6c 69 74 65 33 52 65 70 72 65 70 61 72 65 28 29  lite3Reprepare()
20660 29 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  ) */.  const cha
20670 72 20 2a 7a 54 61 69 6c 3b 20 20 20 20 20 20 20  r *zTail;       
20680 20 2f 2a 20 41 6c 6c 20 53 51 4c 20 74 65 78 74   /* All SQL text
20690 20 70 61 73 74 20 74 68 65 20 6c 61 73 74 20 73   past the last s
206a0 65 6d 69 63 6f 6c 6f 6e 20 70 61 72 73 65 64 20  emicolon parsed 
206b0 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65 77  */.  Table *pNew
206c0 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 2f  Table;         /
206d0 2a 20 41 20 74 61 62 6c 65 20 62 65 69 6e 67 20  * A table being 
206e0 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 43  constructed by C
206f0 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20  REATE TABLE */. 
20700 20 54 72 69 67 67 65 72 20 2a 70 4e 65 77 54 72   Trigger *pNewTr
20710 69 67 67 65 72 3b 20 20 20 20 20 2f 2a 20 54 72  igger;     /* Tr
20720 69 67 67 65 72 20 75 6e 64 65 72 20 63 6f 6e 73  igger under cons
20730 74 72 75 63 74 20 62 79 20 61 20 43 52 45 41 54  truct by a CREAT
20740 45 20 54 52 49 47 47 45 52 20 2a 2f 0a 20 20 63  E TRIGGER */.  c
20750 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68  onst char *zAuth
20760 43 6f 6e 74 65 78 74 3b 20 2f 2a 20 54 68 65 20  Context; /* The 
20770 36 74 68 20 70 61 72 61 6d 65 74 65 72 20 74 6f  6th parameter to
20780 20 64 62 2d 3e 78 41 75 74 68 20 63 61 6c 6c 62   db->xAuth callb
20790 61 63 6b 73 20 2a 2f 0a 23 69 66 6e 64 65 66 20  acks */.#ifndef 
207a0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
207b0 55 41 4c 54 41 42 4c 45 0a 20 20 54 6f 6b 65 6e  UALTABLE.  Token
207c0 20 73 41 72 67 3b 20 20 20 20 20 20 20 20 20 20   sArg;          
207d0 20 20 20 20 20 2f 2a 20 43 6f 6d 70 6c 65 74 65       /* Complete
207e0 20 74 65 78 74 20 6f 66 20 61 20 6d 6f 64 75 6c   text of a modul
207f0 65 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 20 20  e argument */.  
20800 54 61 62 6c 65 20 2a 2a 61 70 56 74 61 62 4c 6f  Table **apVtabLo
20810 63 6b 3b 20 20 20 20 20 20 20 2f 2a 20 50 6f 69  ck;       /* Poi
20820 6e 74 65 72 20 74 6f 20 76 69 72 74 75 61 6c 20  nter to virtual 
20830 74 61 62 6c 65 73 20 6e 65 65 64 69 6e 67 20 6c  tables needing l
20840 6f 63 6b 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66  ocking */.#endif
20850 0a 20 20 54 61 62 6c 65 20 2a 70 5a 6f 6d 62 69  .  Table *pZombi
20860 65 54 61 62 3b 20 20 20 20 20 20 20 20 2f 2a 20  eTab;        /* 
20870 4c 69 73 74 20 6f 66 20 54 61 62 6c 65 20 6f 62  List of Table ob
20880 6a 65 63 74 73 20 74 6f 20 64 65 6c 65 74 65 20  jects to delete 
20890 61 66 74 65 72 20 63 6f 64 65 20 67 65 6e 20 2a  after code gen *
208a0 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67 20 2a  /.  TriggerPrg *
208b0 70 54 72 69 67 67 65 72 50 72 67 3b 20 20 2f 2a  pTriggerPrg;  /*
208c0 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20   Linked list of 
208d0 63 6f 64 65 64 20 74 72 69 67 67 65 72 73 20 2a  coded triggers *
208e0 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68 3b  /.  With *pWith;
208f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
20900 20 43 75 72 72 65 6e 74 20 57 49 54 48 20 63 6c   Current WITH cl
20910 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f  ause, or NULL */
20920 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68 54 6f  .  With *pWithTo
20930 46 72 65 65 3b 20 20 20 20 20 20 20 20 2f 2a 20  Free;        /* 
20940 46 72 65 65 20 74 68 69 73 20 57 49 54 48 20 6f  Free this WITH o
20950 62 6a 65 63 74 20 61 74 20 74 68 65 20 65 6e 64  bject at the end
20960 20 6f 66 20 74 68 65 20 70 61 72 73 65 20 2a 2f   of the parse */
20970 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 73  .};../*.** Sizes
20980 20 61 6e 64 20 70 6f 69 6e 74 65 72 73 20 6f 66   and pointers of
20990 20 76 61 72 69 6f 75 73 20 70 61 72 74 73 20 6f   various parts o
209a0 66 20 74 68 65 20 50 61 72 73 65 20 6f 62 6a 65  f the Parse obje
209b0 63 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 50  ct..*/.#define P
209c0 41 52 53 45 5f 48 44 52 5f 53 5a 20 6f 66 66 73  ARSE_HDR_SZ offs
209d0 65 74 6f 66 28 50 61 72 73 65 2c 61 43 6f 6c 43  etof(Parse,aColC
209e0 61 63 68 65 29 20 2f 2a 20 52 65 63 75 72 73 69  ache) /* Recursi
209f0 76 65 20 70 61 72 74 20 77 2f 6f 20 61 43 6f 6c  ve part w/o aCol
20a00 43 61 63 68 65 2a 2f 0a 23 64 65 66 69 6e 65 20  Cache*/.#define 
20a10 50 41 52 53 45 5f 52 45 43 55 52 53 45 5f 53 5a  PARSE_RECURSE_SZ
20a20 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c   offsetof(Parse,
20a30 73 4c 61 73 74 54 6f 6b 65 6e 29 20 20 20 20 2f  sLastToken)    /
20a40 2a 20 52 65 63 75 72 73 69 76 65 20 70 61 72 74  * Recursive part
20a50 20 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41 52 53   */.#define PARS
20a60 45 5f 54 41 49 4c 5f 53 5a 20 28 73 69 7a 65 6f  E_TAIL_SZ (sizeo
20a70 66 28 50 61 72 73 65 29 2d 50 41 52 53 45 5f 52  f(Parse)-PARSE_R
20a80 45 43 55 52 53 45 5f 53 5a 29 20 2f 2a 20 4e 6f  ECURSE_SZ) /* No
20a90 6e 2d 72 65 63 75 72 73 69 76 65 20 70 61 72 74  n-recursive part
20aa0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41 52 53   */.#define PARS
20ab0 45 5f 54 41 49 4c 28 58 29 20 28 28 28 63 68 61  E_TAIL(X) (((cha
20ac0 72 2a 29 28 58 29 29 2b 50 41 52 53 45 5f 52 45  r*)(X))+PARSE_RE
20ad0 43 55 52 53 45 5f 53 5a 29 20 20 2f 2a 20 50 6f  CURSE_SZ)  /* Po
20ae0 69 6e 74 65 72 20 74 6f 20 74 61 69 6c 20 2a 2f  inter to tail */
20af0 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  ../*.** Return t
20b00 72 75 65 20 69 66 20 63 75 72 72 65 6e 74 6c 79  rue if currently
20b10 20 69 6e 73 69 64 65 20 61 6e 20 73 71 6c 69 74   inside an sqlit
20b20 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28  e3_declare_vtab(
20b30 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65  ) call..*/.#ifde
20b40 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
20b50 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 23 64 65  RTUALTABLE.  #de
20b60 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f  fine IN_DECLARE_
20b70 56 54 41 42 20 30 0a 23 65 6c 73 65 0a 20 20 23  VTAB 0.#else.  #
20b80 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52  define IN_DECLAR
20b90 45 5f 56 54 41 42 20 28 70 50 61 72 73 65 2d 3e  E_VTAB (pParse->
20ba0 64 65 63 6c 61 72 65 56 74 61 62 29 0a 23 65 6e  declareVtab).#en
20bb0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  dif../*.** An in
20bc0 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
20bd0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
20be0 65 20 63 61 6e 20 62 65 20 64 65 63 6c 61 72 65  e can be declare
20bf0 64 20 6f 6e 20 61 20 73 74 61 63 6b 20 61 6e 64  d on a stack and
20c00 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 76 65   used.** to save
20c10 20 74 68 65 20 50 61 72 73 65 2e 7a 41 75 74 68   the Parse.zAuth
20c20 43 6f 6e 74 65 78 74 20 76 61 6c 75 65 20 73 6f  Context value so
20c30 20 74 68 61 74 20 69 74 20 63 61 6e 20 62 65 20   that it can be 
20c40 72 65 73 74 6f 72 65 64 20 6c 61 74 65 72 2e 0a  restored later..
20c50 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 68 43 6f  */.struct AuthCo
20c60 6e 74 65 78 74 20 7b 0a 20 20 63 6f 6e 73 74 20  ntext {.  const 
20c70 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65  char *zAuthConte
20c80 78 74 3b 20 20 20 2f 2a 20 50 75 74 20 73 61 76  xt;   /* Put sav
20c90 65 64 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f  ed Parse.zAuthCo
20ca0 6e 74 65 78 74 20 68 65 72 65 20 2a 2f 0a 20 20  ntext here */.  
20cb0 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20  Parse *pParse;  
20cc0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
20cd0 68 65 20 50 61 72 73 65 20 73 74 72 75 63 74 75  he Parse structu
20ce0 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  re */.};../*.** 
20cf0 42 69 74 66 69 65 6c 64 20 66 6c 61 67 73 20 66  Bitfield flags f
20d00 6f 72 20 50 35 20 76 61 6c 75 65 20 69 6e 20 76  or P5 value in v
20d10 61 72 69 6f 75 73 20 6f 70 63 6f 64 65 73 2e 0a  arious opcodes..
20d20 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73  **.** Value cons
20d30 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72 63 65  traints (enforce
20d40 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29 3a  d via assert()):
20d50 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 4c 45  .**    OPFLAG_LE
20d60 4e 47 54 48 41 52 47 20 20 20 20 3d 3d 20 53 51  NGTHARG    == SQ
20d70 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48  LITE_FUNC_LENGTH
20d80 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 54 59  .**    OPFLAG_TY
20d90 50 45 4f 46 41 52 47 20 20 20 20 3d 3d 20 53 51  PEOFARG    == SQ
20da0 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46  LITE_FUNC_TYPEOF
20db0 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 42 55  .**    OPFLAG_BU
20dc0 4c 4b 43 53 52 20 20 20 20 20 20 3d 3d 20 42 54  LKCSR      == BT
20dd0 52 45 45 5f 42 55 4c 4b 4c 4f 41 44 0a 2a 2a 20  REE_BULKLOAD.** 
20de0 20 20 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51     OPFLAG_SEEKEQ
20df0 20 20 20 20 20 20 20 3d 3d 20 42 54 52 45 45 5f         == BTREE_
20e00 53 45 45 4b 5f 45 51 0a 2a 2a 20 20 20 20 4f 50  SEEK_EQ.**    OP
20e10 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 20 20  FLAG_FORDELETE  
20e20 20 20 3d 3d 20 42 54 52 45 45 5f 46 4f 52 44 45    == BTREE_FORDE
20e30 4c 45 54 45 0a 2a 2a 20 20 20 20 4f 50 46 4c 41  LETE.**    OPFLA
20e40 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 3d  G_SAVEPOSITION =
20e50 3d 20 42 54 52 45 45 5f 53 41 56 45 50 4f 53 49  = BTREE_SAVEPOSI
20e60 54 49 4f 4e 0a 2a 2a 20 20 20 20 4f 50 46 4c 41  TION.**    OPFLA
20e70 47 5f 41 55 58 44 45 4c 45 54 45 20 20 20 20 3d  G_AUXDELETE    =
20e80 3d 20 42 54 52 45 45 5f 41 55 58 44 45 4c 45 54  = BTREE_AUXDELET
20e90 45 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  E.*/.#define OPF
20ea0 4c 41 47 5f 4e 43 48 41 4e 47 45 20 20 20 20 20  LAG_NCHANGE     
20eb0 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f    0x01    /* OP_
20ec0 49 6e 73 65 72 74 3a 20 53 65 74 20 74 6f 20 75  Insert: Set to u
20ed0 70 64 61 74 65 20 64 62 2d 3e 6e 43 68 61 6e 67  pdate db->nChang
20ee0 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  e */.           
20ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f00 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 73            /* Als
20f10 6f 20 75 73 65 64 20 69 6e 20 50 32 20 28 6e 6f  o used in P2 (no
20f20 74 20 50 35 29 20 6f 66 20 4f 50 5f 44 65 6c 65  t P5) of OP_Dele
20f30 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  te */.#define OP
20f40 46 4c 41 47 5f 45 50 48 45 4d 20 20 20 20 20 20  FLAG_EPHEM      
20f50 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50     0x01    /* OP
20f60 5f 43 6f 6c 75 6d 6e 3a 20 45 70 68 65 6d 65 72  _Column: Ephemer
20f70 61 6c 20 6f 75 74 70 75 74 20 69 73 20 6f 6b 20  al output is ok 
20f80 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
20f90 47 5f 4c 41 53 54 52 4f 57 49 44 20 20 20 20 20  G_LASTROWID     
20fa0 30 78 32 30 20 20 20 20 2f 2a 20 53 65 74 20 74  0x20    /* Set t
20fb0 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6c 61 73  o update db->las
20fc0 74 52 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e  tRowid */.#defin
20fd0 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54  e OPFLAG_ISUPDAT
20fe0 45 20 20 20 20 20 20 30 78 30 34 20 20 20 20 2f  E      0x04    /
20ff0 2a 20 54 68 69 73 20 4f 50 5f 49 6e 73 65 72 74  * This OP_Insert
21000 20 69 73 20 61 6e 20 73 71 6c 20 55 50 44 41 54   is an sql UPDAT
21010 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  E */.#define OPF
21020 4c 41 47 5f 41 50 50 45 4e 44 20 20 20 20 20 20  LAG_APPEND      
21030 20 20 30 78 30 38 20 20 20 20 2f 2a 20 54 68 69    0x08    /* Thi
21040 73 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62  s is likely to b
21050 65 20 61 6e 20 61 70 70 65 6e 64 20 2a 2f 0a 23  e an append */.#
21060 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 55 53  define OPFLAG_US
21070 45 53 45 45 4b 52 45 53 55 4c 54 20 30 78 31 30  ESEEKRESULT 0x10
21080 20 20 20 20 2f 2a 20 54 72 79 20 74 6f 20 61 76      /* Try to av
21090 6f 69 64 20 61 20 73 65 65 6b 20 69 6e 20 42 74  oid a seek in Bt
210a0 72 65 65 49 6e 73 65 72 74 28 29 20 2a 2f 0a 23  reeInsert() */.#
210b0 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53  define OPFLAG_IS
210c0 4e 4f 4f 50 20 20 20 20 20 20 20 20 30 78 34 30  NOOP        0x40
210d0 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65      /* OP_Delete
210e0 20 64 6f 65 73 20 70 72 65 2d 75 70 64 61 74 65   does pre-update
210f0 2d 68 6f 6f 6b 20 6f 6e 6c 79 20 2a 2f 0a 23 64  -hook only */.#d
21100 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 45 4e  efine OPFLAG_LEN
21110 47 54 48 41 52 47 20 20 20 20 20 30 78 34 30 20  GTHARG     0x40 
21120 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20     /* OP_Column 
21130 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 6c 65  only used for le
21140 6e 67 74 68 28 29 20 2a 2f 0a 23 64 65 66 69 6e  ngth() */.#defin
21150 65 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41  e OPFLAG_TYPEOFA
21160 52 47 20 20 20 20 20 30 78 38 30 20 20 20 20 2f  RG     0x80    /
21170 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79  * OP_Column only
21180 20 75 73 65 64 20 66 6f 72 20 74 79 70 65 6f 66   used for typeof
21190 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  () */.#define OP
211a0 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20 20 20  FLAG_BULKCSR    
211b0 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50     0x01    /* OP
211c0 5f 4f 70 65 6e 2a 2a 20 75 73 65 64 20 74 6f 20  _Open** used to 
211d0 6f 70 65 6e 20 62 75 6c 6b 20 63 75 72 73 6f 72  open bulk cursor
211e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
211f0 41 47 5f 53 45 45 4b 45 51 20 20 20 20 20 20 20  AG_SEEKEQ       
21200 20 30 78 30 32 20 20 20 20 2f 2a 20 4f 50 5f 4f   0x02    /* OP_O
21210 70 65 6e 2a 2a 20 63 75 72 73 6f 72 20 75 73 65  pen** cursor use
21220 73 20 45 51 20 73 65 65 6b 20 6f 6e 6c 79 20 2a  s EQ seek only *
21230 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
21240 5f 46 4f 52 44 45 4c 45 54 45 20 20 20 20 20 30  _FORDELETE     0
21250 78 30 38 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65  x08    /* OP_Ope
21260 6e 20 73 68 6f 75 6c 64 20 75 73 65 20 42 54 52  n should use BTR
21270 45 45 5f 46 4f 52 44 45 4c 45 54 45 20 2a 2f 0a  EE_FORDELETE */.
21280 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50  #define OPFLAG_P
21290 32 49 53 52 45 47 20 20 20 20 20 20 20 30 78 31  2ISREG       0x1
212a0 30 20 20 20 20 2f 2a 20 50 32 20 74 6f 20 4f 50  0    /* P2 to OP
212b0 5f 4f 70 65 6e 2a 2a 20 69 73 20 61 20 72 65 67  _Open** is a reg
212c0 69 73 74 65 72 20 6e 75 6d 62 65 72 20 2a 2f 0a  ister number */.
212d0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50  #define OPFLAG_P
212e0 45 52 4d 55 54 45 20 20 20 20 20 20 20 30 78 30  ERMUTE       0x0
212f0 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6d 70 61  1    /* OP_Compa
21300 72 65 3a 20 75 73 65 20 74 68 65 20 70 65 72 6d  re: use the perm
21310 75 74 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  utation */.#defi
21320 6e 65 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f  ne OPFLAG_SAVEPO
21330 53 49 54 49 4f 4e 20 20 30 78 30 32 20 20 20 20  SITION  0x02    
21340 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 2f 49 6e 73  /* OP_Delete/Ins
21350 65 72 74 3a 20 73 61 76 65 20 63 75 72 73 6f 72  ert: save cursor
21360 20 70 6f 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20   pos */.#define 
21370 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45  OPFLAG_AUXDELETE
21380 20 20 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20       0x04    /* 
21390 4f 50 5f 44 65 6c 65 74 65 3a 20 69 6e 64 65 78  OP_Delete: index
213a0 20 69 6e 20 61 20 44 45 4c 45 54 45 20 6f 70 20   in a DELETE op 
213b0 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63 68 20 74  */../*. * Each t
213c0 72 69 67 67 65 72 20 70 72 65 73 65 6e 74 20 69  rigger present i
213d0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  n the database s
213e0 63 68 65 6d 61 20 69 73 20 73 74 6f 72 65 64 20  chema is stored 
213f0 61 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  as an instance o
21400 66 0a 20 2a 20 73 74 72 75 63 74 20 54 72 69 67  f. * struct Trig
21410 67 65 72 2e 0a 20 2a 0a 20 2a 20 50 6f 69 6e 74  ger.. *. * Point
21420 65 72 73 20 74 6f 20 69 6e 73 74 61 6e 63 65 73  ers to instances
21430 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67   of struct Trigg
21440 65 72 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e  er are stored in
21450 20 74 77 6f 20 77 61 79 73 2e 0a 20 2a 20 31 2e   two ways.. * 1.
21460 20 49 6e 20 74 68 65 20 22 74 72 69 67 48 61 73   In the "trigHas
21470 68 22 20 68 61 73 68 20 74 61 62 6c 65 20 28 70  h" hash table (p
21480 61 72 74 20 6f 66 20 74 68 65 20 73 71 6c 69 74  art of the sqlit
21490 65 33 2a 20 74 68 61 74 20 72 65 70 72 65 73 65  e3* that represe
214a0 6e 74 73 20 74 68 65 0a 20 2a 20 20 20 20 64 61  nts the. *    da
214b0 74 61 62 61 73 65 29 2e 20 54 68 69 73 20 61 6c  tabase). This al
214c0 6c 6f 77 73 20 54 72 69 67 67 65 72 20 73 74 72  lows Trigger str
214d0 75 63 74 75 72 65 73 20 74 6f 20 62 65 20 72 65  uctures to be re
214e0 74 72 69 65 76 65 64 20 62 79 20 6e 61 6d 65 2e  trieved by name.
214f0 0a 20 2a 20 32 2e 20 41 6c 6c 20 74 72 69 67 67  . * 2. All trigg
21500 65 72 73 20 61 73 73 6f 63 69 61 74 65 64 20 77  ers associated w
21510 69 74 68 20 61 20 73 69 6e 67 6c 65 20 74 61 62  ith a single tab
21520 6c 65 20 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64  le form a linked
21530 20 6c 69 73 74 2c 20 75 73 69 6e 67 20 74 68 65   list, using the
21540 0a 20 2a 20 20 20 20 70 4e 65 78 74 20 6d 65 6d  . *    pNext mem
21550 62 65 72 20 6f 66 20 73 74 72 75 63 74 20 54 72  ber of struct Tr
21560 69 67 67 65 72 2e 20 41 20 70 6f 69 6e 74 65 72  igger. A pointer
21570 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c   to the first el
21580 65 6d 65 6e 74 20 6f 66 20 74 68 65 0a 20 2a 20  ement of the. * 
21590 20 20 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69     linked list i
215a0 73 20 73 74 6f 72 65 64 20 61 73 20 74 68 65 20  s stored as the 
215b0 22 70 54 72 69 67 67 65 72 22 20 6d 65 6d 62 65  "pTrigger" membe
215c0 72 20 6f 66 20 74 68 65 20 61 73 73 6f 63 69 61  r of the associa
215d0 74 65 64 0a 20 2a 20 20 20 20 73 74 72 75 63 74  ted. *    struct
215e0 20 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68   Table.. *. * Th
215f0 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65  e "step_list" me
21600 6d 62 65 72 20 70 6f 69 6e 74 73 20 74 6f 20 74  mber points to t
21610 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74  he first element
21620 20 6f 66 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73   of a linked lis
21630 74 0a 20 2a 20 63 6f 6e 74 61 69 6e 69 6e 67 20  t. * containing 
21640 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  the SQL statemen
21650 74 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20  ts specified as 
21660 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67  the trigger prog
21670 72 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75 63 74 20  ram.. */.struct 
21680 54 72 69 67 67 65 72 20 7b 0a 20 20 63 68 61 72  Trigger {.  char
21690 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
216a0 20 20 20 20 2f 2a 20 54 68 65 20 6e 61 6d 65 20      /* The name 
216b0 6f 66 20 74 68 65 20 74 72 69 67 67 65 72 20 20  of the trigger  
216c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
216d0 20 20 20 20 20 20 2a 2f 0a 20 20 63 68 61 72 20        */.  char 
216e0 2a 74 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  *table;         
216f0 20 20 20 2f 2a 20 54 68 65 20 74 61 62 6c 65 20     /* The table 
21700 6f 72 20 76 69 65 77 20 74 6f 20 77 68 69 63 68  or view to which
21710 20 74 68 65 20 74 72 69 67 67 65 72 20 61 70 70   the trigger app
21720 6c 69 65 73 20 2a 2f 0a 20 20 75 38 20 6f 70 3b  lies */.  u8 op;
21730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21740 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44    /* One of TK_D
21750 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45  ELETE, TK_UPDATE
21760 2c 20 54 4b 5f 49 4e 53 45 52 54 20 20 20 20 20  , TK_INSERT     
21770 20 20 20 20 2a 2f 0a 20 20 75 38 20 74 72 5f 74      */.  u8 tr_t
21780 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
21790 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 52 49 47 47   /* One of TRIGG
217a0 45 52 5f 42 45 46 4f 52 45 2c 20 54 52 49 47 47  ER_BEFORE, TRIGG
217b0 45 52 5f 41 46 54 45 52 20 2a 2f 0a 20 20 45 78  ER_AFTER */.  Ex
217c0 70 72 20 2a 70 57 68 65 6e 3b 20 20 20 20 20 20  pr *pWhen;      
217d0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45        /* The WHE
217e0 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20  N clause of the 
217f0 65 78 70 72 65 73 73 69 6f 6e 20 28 6d 61 79 20  expression (may 
21800 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 49 64  be NULL) */.  Id
21810 4c 69 73 74 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20  List *pColumns; 
21820 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73        /* If this
21830 20 69 73 20 61 6e 20 55 50 44 41 54 45 20 4f 46   is an UPDATE OF
21840 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74   <column-list> t
21850 72 69 67 67 65 72 2c 0a 20 20 20 20 20 20 20 20  rigger,.        
21860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21870 20 20 20 20 20 74 68 65 20 3c 63 6f 6c 75 6d 6e       the <column
21880 2d 6c 69 73 74 3e 20 69 73 20 73 74 6f 72 65 64  -list> is stored
21890 20 68 65 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d   here */.  Schem
218a0 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20  a *pSchema;     
218b0 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e     /* Schema con
218c0 74 61 69 6e 69 6e 67 20 74 68 65 20 74 72 69 67  taining the trig
218d0 67 65 72 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  ger */.  Schema 
218e0 2a 70 54 61 62 53 63 68 65 6d 61 3b 20 20 20 20  *pTabSchema;    
218f0 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61   /* Schema conta
21900 69 6e 69 6e 67 20 74 68 65 20 74 61 62 6c 65 20  ining the table 
21910 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  */.  TriggerStep
21920 20 2a 73 74 65 70 5f 6c 69 73 74 3b 20 2f 2a 20   *step_list; /* 
21930 4c 69 6e 6b 20 6c 69 73 74 20 6f 66 20 74 72 69  Link list of tri
21940 67 67 65 72 20 70 72 6f 67 72 61 6d 20 73 74 65  gger program ste
21950 70 73 20 20 20 20 20 20 20 20 20 20 20 20 20 2a  ps             *
21960 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65  /.  Trigger *pNe
21970 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  xt;         /* N
21980 65 78 74 20 74 72 69 67 67 65 72 20 61 73 73 6f  ext trigger asso
21990 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
219a0 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  table */.};../*.
219b0 2a 2a 20 41 20 74 72 69 67 67 65 72 20 69 73 20  ** A trigger is 
219c0 65 69 74 68 65 72 20 61 20 42 45 46 4f 52 45 20  either a BEFORE 
219d0 6f 72 20 61 6e 20 41 46 54 45 52 20 74 72 69 67  or an AFTER trig
219e0 67 65 72 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77  ger.  The follow
219f0 69 6e 67 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a  ing constants.**
21a00 20 64 65 74 65 72 6d 69 6e 65 20 77 68 69 63 68   determine which
21a10 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 72 65  ..**.** If there
21a20 20 61 72 65 20 6d 75 6c 74 69 70 6c 65 20 74 72   are multiple tr
21a30 69 67 67 65 72 73 2c 20 79 6f 75 20 6d 69 67 68  iggers, you migh
21a40 74 20 6f 66 20 73 6f 6d 65 20 42 45 46 4f 52 45  t of some BEFORE
21a50 20 61 6e 64 20 73 6f 6d 65 20 41 46 54 45 52 2e   and some AFTER.
21a60 0a 2a 2a 20 49 6e 20 74 68 61 74 20 63 61 73 65  .** In that case
21a70 73 2c 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 73  s, the constants
21a80 20 62 65 6c 6f 77 20 63 61 6e 20 62 65 20 4f 52   below can be OR
21a90 65 64 20 74 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a  ed together..*/.
21aa0 23 64 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f  #define TRIGGER_
21ab0 42 45 46 4f 52 45 20 20 31 0a 23 64 65 66 69 6e  BEFORE  1.#defin
21ac0 65 20 54 52 49 47 47 45 52 5f 41 46 54 45 52 20  e TRIGGER_AFTER 
21ad0 20 20 32 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e    2../*. * An in
21ae0 73 74 61 6e 63 65 20 6f 66 20 73 74 72 75 63 74  stance of struct
21af0 20 54 72 69 67 67 65 72 53 74 65 70 20 69 73 20   TriggerStep is 
21b00 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 61 20  used to store a 
21b10 73 69 6e 67 6c 65 20 53 51 4c 20 73 74 61 74 65  single SQL state
21b20 6d 65 6e 74 0a 20 2a 20 74 68 61 74 20 69 73 20  ment. * that is 
21b30 61 20 70 61 72 74 20 6f 66 20 61 20 74 72 69 67  a part of a trig
21b40 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a  ger-program.. *.
21b50 20 2a 20 49 6e 73 74 61 6e 63 65 73 20 6f 66 20   * Instances of 
21b60 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74  struct TriggerSt
21b70 65 70 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e  ep are stored in
21b80 20 61 20 73 69 6e 67 6c 79 20 6c 69 6e 6b 65 64   a singly linked
21b90 20 6c 69 73 74 20 28 6c 69 6e 6b 65 64 0a 20 2a   list (linked. *
21ba0 20 75 73 69 6e 67 20 74 68 65 20 22 70 4e 65 78   using the "pNex
21bb0 74 22 20 6d 65 6d 62 65 72 29 20 72 65 66 65 72  t" member) refer
21bc0 65 6e 63 65 64 20 62 79 20 74 68 65 20 22 73 74  enced by the "st
21bd0 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20  ep_list" member 
21be0 6f 66 20 74 68 65 0a 20 2a 20 61 73 73 6f 63 69  of the. * associ
21bf0 61 74 65 64 20 73 74 72 75 63 74 20 54 72 69 67  ated struct Trig
21c00 67 65 72 20 69 6e 73 74 61 6e 63 65 2e 20 54 68  ger instance. Th
21c10 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20  e first element 
21c20 6f 66 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69  of the linked li
21c30 73 74 20 69 73 0a 20 2a 20 74 68 65 20 66 69 72  st is. * the fir
21c40 73 74 20 73 74 65 70 20 6f 66 20 74 68 65 20 74  st step of the t
21c50 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a  rigger-program..
21c60 20 2a 0a 20 2a 20 54 68 65 20 22 6f 70 22 20 6d   *. * The "op" m
21c70 65 6d 62 65 72 20 69 6e 64 69 63 61 74 65 73 20  ember indicates 
21c80 77 68 65 74 68 65 72 20 74 68 69 73 20 69 73 20  whether this is 
21c90 61 20 22 44 45 4c 45 54 45 22 2c 20 22 49 4e 53  a "DELETE", "INS
21ca0 45 52 54 22 2c 20 22 55 50 44 41 54 45 22 20 6f  ERT", "UPDATE" o
21cb0 72 0a 20 2a 20 22 53 45 4c 45 43 54 22 20 73 74  r. * "SELECT" st
21cc0 61 74 65 6d 65 6e 74 2e 20 54 68 65 20 6d 65 61  atement. The mea
21cd0 6e 69 6e 67 73 20 6f 66 20 74 68 65 20 6f 74 68  nings of the oth
21ce0 65 72 20 6d 65 6d 62 65 72 73 20 69 73 20 64 65  er members is de
21cf0 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 0a  termined by the.
21d00 20 2a 20 76 61 6c 75 65 20 6f 66 20 22 6f 70 22   * value of "op"
21d10 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a   as follows:. *.
21d20 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53   * (op == TK_INS
21d30 45 52 54 29 0a 20 2a 20 6f 72 63 6f 6e 66 20 20  ERT). * orconf  
21d40 20 20 2d 3e 20 73 74 6f 72 65 73 20 74 68 65 20    -> stores the 
21d50 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f  ON CONFLICT algo
21d60 72 69 74 68 6d 0a 20 2a 20 70 53 65 6c 65 63 74  rithm. * pSelect
21d70 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73     -> If this is
21d80 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20   an INSERT INTO 
21d90 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 20 73  ... SELECT ... s
21da0 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20  tatement, then. 
21db0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  *              t
21dc0 68 69 73 20 73 74 6f 72 65 73 20 61 20 70 6f 69  his stores a poi
21dd0 6e 74 65 72 20 74 6f 20 74 68 65 20 53 45 4c 45  nter to the SELE
21de0 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 4f 74  CT statement. Ot
21df0 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a  herwise NULL.. *
21e00 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65   zTarget   -> De
21e10 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74  quoted name of t
21e20 68 65 20 74 61 62 6c 65 20 74 6f 20 69 6e 73 65  he table to inse
21e30 72 74 20 69 6e 74 6f 2e 0a 20 2a 20 70 45 78 70  rt into.. * pExp
21e40 72 4c 69 73 74 20 2d 3e 20 49 66 20 74 68 69 73  rList -> If this
21e50 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e   is an INSERT IN
21e60 54 4f 20 2e 2e 2e 20 56 41 4c 55 45 53 20 2e 2e  TO ... VALUES ..
21e70 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65  . statement, the
21e80 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  n. *            
21e90 20 20 74 68 69 73 20 73 74 6f 72 65 73 20 76 61    this stores va
21ea0 6c 75 65 73 20 74 6f 20 62 65 20 69 6e 73 65 72  lues to be inser
21eb0 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65 20 4e  ted. Otherwise N
21ec0 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69 73 74 20  ULL.. * pIdList 
21ed0 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20    -> If this is 
21ee0 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e  an INSERT INTO .
21ef0 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65  .. (<column-name
21f00 73 3e 29 20 56 41 4c 55 45 53 20 2e 2e 2e 0a 20  s>) VALUES .... 
21f10 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73  *              s
21f20 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74  tatement, then t
21f30 68 69 73 20 73 74 6f 72 65 73 20 74 68 65 20 63  his stores the c
21f40 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74 6f 20 62  olumn-names to b
21f50 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  e. *            
21f60 20 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 2e    inserted into.
21f70 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b  . *. * (op == TK
21f80 5f 44 45 4c 45 54 45 29 0a 20 2a 20 7a 54 61 72  _DELETE). * zTar
21f90 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74 65  get   -> Dequote
21fa0 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  d name of the ta
21fb0 62 6c 65 20 74 6f 20 64 65 6c 65 74 65 20 66 72  ble to delete fr
21fc0 6f 6d 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20  om.. * pWhere   
21fd0 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c   -> The WHERE cl
21fe0 61 75 73 65 20 6f 66 20 74 68 65 20 44 45 4c 45  ause of the DELE
21ff0 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20  TE statement if 
22000 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69 65 64  one is specified
22010 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  .. *            
22020 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c    Otherwise NULL
22030 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54  .. *. * (op == T
22040 4b 5f 55 50 44 41 54 45 29 0a 20 2a 20 7a 54 61  K_UPDATE). * zTa
22050 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74  rget   -> Dequot
22060 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  ed name of the t
22070 61 62 6c 65 20 74 6f 20 75 70 64 61 74 65 2e 0a  able to update..
22080 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20   * pWhere    -> 
22090 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
220a0 20 6f 66 20 74 68 65 20 55 50 44 41 54 45 20 73   of the UPDATE s
220b0 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20  tatement if one 
220c0 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a  is specified.. *
220d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 74                Ot
220e0 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a  herwise NULL.. *
220f0 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 41 20   pExprList -> A 
22100 6c 69 73 74 20 6f 66 20 74 68 65 20 63 6f 6c 75  list of the colu
22110 6d 6e 73 20 74 6f 20 75 70 64 61 74 65 20 61 6e  mns to update an
22120 64 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  d the expression
22130 73 20 74 6f 20 75 70 64 61 74 65 0a 20 2a 20 20  s to update. *  
22140 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 6d              them
22150 20 74 6f 2e 20 53 65 65 20 73 71 6c 69 74 65 33   to. See sqlite3
22160 55 70 64 61 74 65 28 29 20 64 6f 63 75 6d 65 6e  Update() documen
22170 74 61 74 69 6f 6e 20 6f 66 20 22 70 43 68 61 6e  tation of "pChan
22180 67 65 73 22 0a 20 2a 20 20 20 20 20 20 20 20 20  ges". *         
22190 20 20 20 20 20 61 72 67 75 6d 65 6e 74 2e 0a 20       argument.. 
221a0 2a 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69  *. */.struct Tri
221b0 67 67 65 72 53 74 65 70 20 7b 0a 20 20 75 38 20  ggerStep {.  u8 
221c0 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  op;             
221d0 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44    /* One of TK_D
221e0 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41 54 45  ELETE, TK_UPDATE
221f0 2c 20 54 4b 5f 49 4e 53 45 52 54 2c 20 54 4b 5f  , TK_INSERT, TK_
22200 53 45 4c 45 43 54 20 2a 2f 0a 20 20 75 38 20 6f  SELECT */.  u8 o
22210 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20  rconf;          
22220 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20   /* OE_Rollback 
22230 65 74 63 2e 20 2a 2f 0a 20 20 54 72 69 67 67 65  etc. */.  Trigge
22240 72 20 2a 70 54 72 69 67 3b 20 20 20 20 20 20 2f  r *pTrig;      /
22250 2a 20 54 68 65 20 74 72 69 67 67 65 72 20 74 68  * The trigger th
22260 61 74 20 74 68 69 73 20 73 74 65 70 20 69 73 20  at this step is 
22270 61 20 70 61 72 74 20 6f 66 20 2a 2f 0a 20 20 53  a part of */.  S
22280 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20  elect *pSelect; 
22290 20 20 20 20 2f 2a 20 53 45 4c 45 43 54 20 73 74      /* SELECT st
222a0 61 74 65 6d 65 6e 74 20 6f 72 20 52 48 53 20 6f  atement or RHS o
222b0 66 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 53 45  f INSERT INTO SE
222c0 4c 45 43 54 20 2e 2e 2e 20 2a 2f 0a 20 20 63 68  LECT ... */.  ch
222d0 61 72 20 2a 7a 54 61 72 67 65 74 3b 20 20 20 20  ar *zTarget;    
222e0 20 20 20 2f 2a 20 54 61 72 67 65 74 20 74 61 62     /* Target tab
222f0 6c 65 20 66 6f 72 20 44 45 4c 45 54 45 2c 20 55  le for DELETE, U
22300 50 44 41 54 45 2c 20 49 4e 53 45 52 54 20 2a 2f  PDATE, INSERT */
22310 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b  .  Expr *pWhere;
22320 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57          /* The W
22330 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20  HERE clause for 
22340 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45  DELETE or UPDATE
22350 20 73 74 65 70 73 20 2a 2f 0a 20 20 45 78 70 72   steps */.  Expr
22360 4c 69 73 74 20 2a 70 45 78 70 72 4c 69 73 74 3b  List *pExprList;
22370 20 2f 2a 20 53 45 54 20 63 6c 61 75 73 65 20 66   /* SET clause f
22380 6f 72 20 55 50 44 41 54 45 2e 20 2a 2f 0a 20 20  or UPDATE. */.  
22390 49 64 4c 69 73 74 20 2a 70 49 64 4c 69 73 74 3b  IdList *pIdList;
223a0 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e       /* Column n
223b0 61 6d 65 73 20 66 6f 72 20 49 4e 53 45 52 54 20  ames for INSERT 
223c0 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  */.  TriggerStep
223d0 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78   *pNext;  /* Nex
223e0 74 20 69 6e 20 74 68 65 20 6c 69 6e 6b 2d 6c 69  t in the link-li
223f0 73 74 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53  st */.  TriggerS
22400 74 65 70 20 2a 70 4c 61 73 74 3b 20 20 2f 2a 20  tep *pLast;  /* 
22410 4c 61 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20  Last element in 
22420 6c 69 6e 6b 2d 6c 69 73 74 2e 20 56 61 6c 69 64  link-list. Valid
22430 20 66 6f 72 20 31 73 74 20 65 6c 65 6d 20 6f 6e   for 1st elem on
22440 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ly */.};../*.** 
22450 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  The following st
22460 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73  ructure contains
22470 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65   information use
22480 64 20 62 79 20 74 68 65 20 73 71 6c 69 74 65 46  d by the sqliteF
22490 69 78 2e 2e 2e 0a 2a 2a 20 72 6f 75 74 69 6e 65  ix....** routine
224a0 73 20 61 73 20 74 68 65 79 20 77 61 6c 6b 20 74  s as they walk t
224b0 68 65 20 70 61 72 73 65 20 74 72 65 65 20 74 6f  he parse tree to
224c0 20 6d 61 6b 65 20 64 61 74 61 62 61 73 65 20 72   make database r
224d0 65 66 65 72 65 6e 63 65 73 0a 2a 2a 20 65 78 70  eferences.** exp
224e0 6c 69 63 69 74 2e 0a 2a 2f 0a 74 79 70 65 64 65  licit..*/.typede
224f0 66 20 73 74 72 75 63 74 20 44 62 46 69 78 65 72  f struct DbFixer
22500 20 44 62 46 69 78 65 72 3b 0a 73 74 72 75 63 74   DbFixer;.struct
22510 20 44 62 46 69 78 65 72 20 7b 0a 20 20 50 61 72   DbFixer {.  Par
22520 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20  se *pParse;     
22530 20 2f 2a 20 54 68 65 20 70 61 72 73 69 6e 67 20   /* The parsing 
22540 63 6f 6e 74 65 78 74 2e 20 20 45 72 72 6f 72 20  context.  Error 
22550 6d 65 73 73 61 67 65 73 20 77 72 69 74 74 65 6e  messages written
22560 20 68 65 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d   here */.  Schem
22570 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 2f  a *pSchema;    /
22580 2a 20 46 69 78 20 69 74 65 6d 73 20 74 6f 20 74  * Fix items to t
22590 68 69 73 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20  his schema */.  
225a0 69 6e 74 20 62 56 61 72 4f 6e 6c 79 3b 20 20 20  int bVarOnly;   
225b0 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 66 6f 72      /* Check for
225c0 20 76 61 72 69 61 62 6c 65 20 72 65 66 65 72 65   variable refere
225d0 6e 63 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 63  nces only */.  c
225e0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 20  onst char *zDb; 
225f0 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20     /* Make sure 
22600 61 6c 6c 20 6f 62 6a 65 63 74 73 20 61 72 65 20  all objects are 
22610 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 69  contained in thi
22620 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20  s database */.  
22630 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70  const char *zTyp
22640 65 3b 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 74  e;  /* Type of t
22650 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75  he container - u
22660 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20 6d 65  sed for error me
22670 73 73 61 67 65 73 20 2a 2f 0a 20 20 63 6f 6e 73  ssages */.  cons
22680 74 20 54 6f 6b 65 6e 20 2a 70 4e 61 6d 65 3b 20  t Token *pName; 
22690 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63  /* Name of the c
226a0 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20  ontainer - used 
226b0 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67  for error messag
226c0 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  es */.};../*.** 
226d0 41 6e 20 6f 62 6a 65 63 74 65 64 20 75 73 65 64  An objected used
226e0 20 74 6f 20 61 63 63 75 6d 75 6c 61 74 65 20 74   to accumulate t
226f0 68 65 20 74 65 78 74 20 6f 66 20 61 20 73 74 72  he text of a str
22700 69 6e 67 20 77 68 65 72 65 20 77 65 0a 2a 2a 20  ing where we.** 
22710 64 6f 20 6e 6f 74 20 6e 65 63 65 73 73 61 72 69  do not necessari
22720 6c 79 20 6b 6e 6f 77 20 68 6f 77 20 62 69 67 20  ly know how big 
22730 74 68 65 20 73 74 72 69 6e 67 20 77 69 6c 6c 20  the string will 
22740 62 65 20 69 6e 20 74 68 65 20 65 6e 64 2e 0a 2a  be in the end..*
22750 2f 0a 73 74 72 75 63 74 20 53 74 72 41 63 63 75  /.struct StrAccu
22760 6d 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  m {.  sqlite3 *d
22770 62 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70  b;         /* Op
22780 74 69 6f 6e 61 6c 20 64 61 74 61 62 61 73 65 20  tional database 
22790 66 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 2e 20 20  for lookaside.  
227a0 43 61 6e 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20  Can be NULL */. 
227b0 20 63 68 61 72 20 2a 7a 54 65 78 74 3b 20 20 20   char *zText;   
227c0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73 74 72        /* The str
227d0 69 6e 67 20 63 6f 6c 6c 65 63 74 65 64 20 73 6f  ing collected so
227e0 20 66 61 72 20 2a 2f 0a 20 20 75 33 32 20 20 6e   far */.  u32  n
227f0 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 2f  Alloc;         /
22800 2a 20 41 6d 6f 75 6e 74 20 6f 66 20 73 70 61 63  * Amount of spac
22810 65 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 7a  e allocated in z
22820 54 65 78 74 20 2a 2f 0a 20 20 75 33 32 20 20 6d  Text */.  u32  m
22830 78 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f  xAlloc;        /
22840 2a 20 4d 61 78 69 6d 75 6d 20 61 6c 6c 6f 77 65  * Maximum allowe
22850 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 30  d allocation.  0
22860 20 66 6f 72 20 6e 6f 20 6d 61 6c 6c 6f 63 20 75   for no malloc u
22870 73 61 67 65 20 2a 2f 0a 20 20 75 33 32 20 20 6e  sage */.  u32  n
22880 43 68 61 72 3b 20 20 20 20 20 20 20 20 20 20 2f  Char;          /
22890 2a 20 4c 65 6e 67 74 68 20 6f 66 20 74 68 65 20  * Length of the 
228a0 73 74 72 69 6e 67 20 73 6f 20 66 61 72 20 2a 2f  string so far */
228b0 0a 20 20 75 38 20 20 20 61 63 63 45 72 72 6f 72  .  u8   accError
228c0 3b 20 20 20 20 20 20 20 2f 2a 20 53 54 52 41 43  ;       /* STRAC
228d0 43 55 4d 5f 4e 4f 4d 45 4d 20 6f 72 20 53 54 52  CUM_NOMEM or STR
228e0 41 43 43 55 4d 5f 54 4f 4f 42 49 47 20 2a 2f 0a  ACCUM_TOOBIG */.
228f0 20 20 75 38 20 20 20 70 72 69 6e 74 66 46 6c 61    u8   printfFla
22900 67 73 3b 20 20 20 20 2f 2a 20 53 51 4c 49 54 45  gs;    /* SQLITE
22910 5f 50 52 49 4e 54 46 20 66 6c 61 67 73 20 62 65  _PRINTF flags be
22920 6c 6f 77 20 2a 2f 0a 7d 3b 0a 23 64 65 66 69 6e  low */.};.#defin
22930 65 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d  e STRACCUM_NOMEM
22940 20 20 20 31 0a 23 64 65 66 69 6e 65 20 53 54 52     1.#define STR
22950 41 43 43 55 4d 5f 54 4f 4f 42 49 47 20 20 32 0a  ACCUM_TOOBIG  2.
22960 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50  #define SQLITE_P
22970 52 49 4e 54 46 5f 49 4e 54 45 52 4e 41 4c 20 30  RINTF_INTERNAL 0
22980 78 30 31 20 20 2f 2a 20 49 6e 74 65 72 6e 61 6c  x01  /* Internal
22990 2d 75 73 65 2d 6f 6e 6c 79 20 63 6f 6e 76 65 72  -use-only conver
229a0 74 65 72 73 20 61 6c 6c 6f 77 65 64 20 2a 2f 0a  ters allowed */.
229b0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50  #define SQLITE_P
229c0 52 49 4e 54 46 5f 53 51 4c 46 55 4e 43 20 20 30  RINTF_SQLFUNC  0
229d0 78 30 32 20 20 2f 2a 20 53 51 4c 20 66 75 6e 63  x02  /* SQL func
229e0 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 73 20 74  tion arguments t
229f0 6f 20 56 58 50 72 69 6e 74 66 20 2a 2f 0a 23 64  o VXPrintf */.#d
22a00 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49  efine SQLITE_PRI
22a10 4e 54 46 5f 4d 41 4c 4c 4f 43 45 44 20 30 78 30  NTF_MALLOCED 0x0
22a20 34 20 20 2f 2a 20 54 72 75 65 20 69 66 20 78 54  4  /* True if xT
22a30 65 78 74 20 69 73 20 61 6c 6c 6f 63 61 74 65 64  ext is allocated
22a40 20 73 70 61 63 65 20 2a 2f 0a 0a 23 64 65 66 69   space */..#defi
22a50 6e 65 20 69 73 4d 61 6c 6c 6f 63 65 64 28 58 29  ne isMalloced(X)
22a60 20 20 28 28 28 58 29 2d 3e 70 72 69 6e 74 66 46    (((X)->printfF
22a70 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 50 52  lags & SQLITE_PR
22a80 49 4e 54 46 5f 4d 41 4c 4c 4f 43 45 44 29 21 3d  INTF_MALLOCED)!=
22a90 30 29 0a 0a 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69  0).../*.** A poi
22aa0 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72  nter to this str
22ab0 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20 74  ucture is used t
22ac0 6f 20 63 6f 6d 6d 75 6e 69 63 61 74 65 20 69 6e  o communicate in
22ad0 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f  formation.** fro
22ae0 6d 20 73 71 6c 69 74 65 33 49 6e 69 74 20 61 6e  m sqlite3Init an
22af0 64 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61  d OP_ParseSchema
22b00 20 69 6e 74 6f 20 74 68 65 20 73 71 6c 69 74 65   into the sqlite
22b10 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a  3InitCallback..*
22b20 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
22b30 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62   {.  sqlite3 *db
22b40 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ;        /* The 
22b50 64 61 74 61 62 61 73 65 20 62 65 69 6e 67 20 69  database being i
22b60 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
22b70 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67 3b  char **pzErrMsg;
22b80 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73      /* Error mes
22b90 73 61 67 65 20 73 74 6f 72 65 64 20 68 65 72 65  sage stored here
22ba0 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20   */.  int iDb;  
22bb0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30 20 66            /* 0 f
22bc0 6f 72 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  or main database
22bd0 2e 20 20 31 20 66 6f 72 20 54 45 4d 50 2c 20 32  .  1 for TEMP, 2
22be0 2e 2e 20 66 6f 72 20 41 54 54 41 43 48 65 64 20  .. for ATTACHed 
22bf0 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20  */.  int rc;    
22c00 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75           /* Resu
22c10 6c 74 20 63 6f 64 65 20 73 74 6f 72 65 64 20 68  lt code stored h
22c20 65 72 65 20 2a 2f 0a 7d 20 49 6e 69 74 44 61 74  ere */.} InitDat
22c30 61 3b 0a 0a 2f 2a 0a 2a 2a 20 53 74 72 75 63 74  a;../*.** Struct
22c40 75 72 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 67  ure containing g
22c50 6c 6f 62 61 6c 20 63 6f 6e 66 69 67 75 72 61 74  lobal configurat
22c60 69 6f 6e 20 64 61 74 61 20 66 6f 72 20 74 68 65  ion data for the
22c70 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e   SQLite library.
22c80 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75  .**.** This stru
22c90 63 74 75 72 65 20 61 6c 73 6f 20 63 6f 6e 74 61  cture also conta
22ca0 69 6e 73 20 73 6f 6d 65 20 73 74 61 74 65 20 69  ins some state i
22cb0 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73  nformation..*/.s
22cc0 74 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e  truct Sqlite3Con
22cd0 66 69 67 20 7b 0a 20 20 69 6e 74 20 62 4d 65 6d  fig {.  int bMem
22ce0 73 74 61 74 3b 20 20 20 20 20 20 20 20 20 20 20  stat;           
22cf0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
22d00 65 20 74 6f 20 65 6e 61 62 6c 65 20 6d 65 6d 6f  e to enable memo
22d10 72 79 20 73 74 61 74 75 73 20 2a 2f 0a 20 20 69  ry status */.  i
22d20 6e 74 20 62 43 6f 72 65 4d 75 74 65 78 3b 20 20  nt bCoreMutex;  
22d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d40 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
22d50 6c 65 20 63 6f 72 65 20 6d 75 74 65 78 69 6e 67  le core mutexing
22d60 20 2a 2f 0a 20 20 69 6e 74 20 62 46 75 6c 6c 4d   */.  int bFullM
22d70 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20  utex;           
22d80 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
22d90 74 6f 20 65 6e 61 62 6c 65 20 66 75 6c 6c 20 6d  to enable full m
22da0 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  utexing */.  int
22db0 20 62 4f 70 65 6e 55 72 69 3b 20 20 20 20 20 20   bOpenUri;      
22dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22dd0 2a 20 54 72 75 65 20 74 6f 20 69 6e 74 65 72 70  * True to interp
22de0 72 65 74 20 66 69 6c 65 6e 61 6d 65 73 20 61 73  ret filenames as
22df0 20 55 52 49 73 20 2a 2f 0a 20 20 69 6e 74 20 62   URIs */.  int b
22e00 55 73 65 43 69 73 3b 20 20 20 20 20 20 20 20 20  UseCis;         
22e10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
22e20 55 73 65 20 63 6f 76 65 72 69 6e 67 20 69 6e 64  Use covering ind
22e30 69 63 65 73 20 66 6f 72 20 66 75 6c 6c 2d 73 63  ices for full-sc
22e40 61 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 62 53 6d  ans */.  int bSm
22e50 61 6c 6c 4d 61 6c 6c 6f 63 3b 20 20 20 20 20 20  allMalloc;      
22e60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 76             /* Av
22e70 6f 69 64 20 6c 61 72 67 65 20 6d 65 6d 6f 72 79  oid large memory
22e80 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 69 66 20   allocations if 
22e90 74 72 75 65 20 2a 2f 0a 20 20 69 6e 74 20 6d 78  true */.  int mx
22ea0 53 74 72 6c 65 6e 3b 20 20 20 20 20 20 20 20 20  Strlen;         
22eb0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
22ec0 61 78 69 6d 75 6d 20 73 74 72 69 6e 67 20 6c 65  aximum string le
22ed0 6e 67 74 68 20 2a 2f 0a 20 20 69 6e 74 20 6e 65  ngth */.  int ne
22ee0 76 65 72 43 6f 72 72 75 70 74 3b 20 20 20 20 20  verCorrupt;     
22ef0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
22f00 61 74 61 62 61 73 65 20 69 73 20 61 6c 77 61 79  atabase is alway
22f10 73 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 2a 2f  s well-formed */
22f20 0a 20 20 69 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69  .  int szLookasi
22f30 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  de;             
22f40 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
22f50 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72  lookaside buffer
22f60 20 73 69 7a 65 20 2a 2f 0a 20 20 69 6e 74 20 6e   size */.  int n
22f70 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20  Lookaside;      
22f80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
22f90 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64  Default lookasid
22fa0 65 20 62 75 66 66 65 72 20 63 6f 75 6e 74 20 2a  e buffer count *
22fb0 2f 0a 20 20 69 6e 74 20 6e 53 74 6d 74 53 70 69  /.  int nStmtSpi
22fc0 6c 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ll;             
22fd0 20 20 20 20 20 20 2f 2a 20 53 74 6d 74 2d 6a 6f        /* Stmt-jo
22fe0 75 72 6e 61 6c 20 73 70 69 6c 6c 2d 74 6f 2d 64  urnal spill-to-d
22ff0 69 73 6b 20 74 68 72 65 73 68 6f 6c 64 20 2a 2f  isk threshold */
23000 0a 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d  .  sqlite3_mem_m
23010 65 74 68 6f 64 73 20 6d 3b 20 20 20 20 20 20 20  ethods m;       
23020 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65       /* Low-leve
23030 6c 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  l memory allocat
23040 69 6f 6e 20 69 6e 74 65 72 66 61 63 65 20 2a 2f  ion interface */
23050 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
23060 5f 6d 65 74 68 6f 64 73 20 6d 75 74 65 78 3b 20  _methods mutex; 
23070 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65       /* Low-leve
23080 6c 20 6d 75 74 65 78 20 69 6e 74 65 72 66 61 63  l mutex interfac
23090 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 70  e */.  sqlite3_p
230a0 63 61 63 68 65 5f 6d 65 74 68 6f 64 73 32 20 70  cache_methods2 p
230b0 63 61 63 68 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d  cache2;  /* Low-
230c0 6c 65 76 65 6c 20 70 61 67 65 2d 63 61 63 68 65  level page-cache
230d0 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20   interface */.  
230e0 76 6f 69 64 20 2a 70 48 65 61 70 3b 20 20 20 20  void *pHeap;    
230f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23100 20 20 2f 2a 20 48 65 61 70 20 73 74 6f 72 61 67    /* Heap storag
23110 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74  e space */.  int
23120 20 6e 48 65 61 70 3b 20 20 20 20 20 20 20 20 20   nHeap;         
23130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
23140 2a 20 53 69 7a 65 20 6f 66 20 70 48 65 61 70 5b  * Size of pHeap[
23150 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 71  ] */.  int mnReq
23160 2c 20 6d 78 52 65 71 3b 20 20 20 20 20 20 20 20  , mxReq;        
23170 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20           /* Min 
23180 61 6e 64 20 6d 61 78 20 68 65 61 70 20 72 65 71  and max heap req
23190 75 65 73 74 73 20 73 69 7a 65 73 20 2a 2f 0a 20  uests sizes */. 
231a0 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73   sqlite3_int64 s
231b0 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20  zMmap;          
231c0 20 20 20 2f 2a 20 6d 6d 61 70 28 29 20 73 70 61     /* mmap() spa
231d0 63 65 20 70 65 72 20 6f 70 65 6e 20 66 69 6c 65  ce per open file
231e0 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e   */.  sqlite3_in
231f0 74 36 34 20 6d 78 4d 6d 61 70 3b 20 20 20 20 20  t64 mxMmap;     
23200 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d          /* Maxim
23210 75 6d 20 76 61 6c 75 65 20 66 6f 72 20 73 7a 4d  um value for szM
23220 6d 61 70 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  map */.  void *p
23230 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20  Page;           
23240 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
23250 67 65 20 63 61 63 68 65 20 6d 65 6d 6f 72 79 20  ge cache memory 
23260 2a 2f 0a 20 20 69 6e 74 20 73 7a 50 61 67 65 3b  */.  int szPage;
23270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23280 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
23290 66 20 65 61 63 68 20 70 61 67 65 20 69 6e 20 70  f each page in p
232a0 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  Page[] */.  int 
232b0 6e 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20  nPage;          
232c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
232d0 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   Number of pages
232e0 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20   in pPage[] */. 
232f0 20 69 6e 74 20 6d 78 50 61 72 73 65 72 53 74 61   int mxParserSta
23300 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ck;             
23310 20 20 20 2f 2a 20 6d 61 78 69 6d 75 6d 20 64 65     /* maximum de
23320 70 74 68 20 6f 66 20 74 68 65 20 70 61 72 73 65  pth of the parse
23330 72 20 73 74 61 63 6b 20 2a 2f 0a 20 20 69 6e 74  r stack */.  int
23340 20 73 68 61 72 65 64 43 61 63 68 65 45 6e 61 62   sharedCacheEnab
23350 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f  led;           /
23360 2a 20 74 72 75 65 20 69 66 20 73 68 61 72 65 64  * true if shared
23370 2d 63 61 63 68 65 20 6d 6f 64 65 20 65 6e 61 62  -cache mode enab
23380 6c 65 64 20 2a 2f 0a 20 20 75 33 32 20 73 7a 50  led */.  u32 szP
23390 6d 61 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ma;             
233a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
233b0 78 69 6d 75 6d 20 53 6f 72 74 65 72 20 50 4d 41  ximum Sorter PMA
233c0 20 73 69 7a 65 20 2a 2f 0a 20 20 2f 2a 20 54 68   size */.  /* Th
233d0 65 20 61 62 6f 76 65 20 6d 69 67 68 74 20 62 65  e above might be
233e0 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20   initialized to 
233f0 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 54 68 65 20 66  non-zero.  The f
23400 6f 6c 6c 6f 77 69 6e 67 20 6e 65 65 64 20 74 6f  ollowing need to
23410 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20 69 6e 69   always.  ** ini
23420 74 69 61 6c 6c 79 20 62 65 20 7a 65 72 6f 2c 20  tially be zero, 
23430 68 6f 77 65 76 65 72 2e 20 2a 2f 0a 20 20 69 6e  however. */.  in
23440 74 20 69 73 49 6e 69 74 3b 20 20 20 20 20 20 20  t isInit;       
23450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23460 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 69 6e  /* True after in
23470 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 68 61 73  itialization has
23480 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 69   finished */.  i
23490 6e 74 20 69 6e 50 72 6f 67 72 65 73 73 3b 20 20  nt inProgress;  
234a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
234b0 20 2f 2a 20 54 72 75 65 20 77 68 69 6c 65 20 69   /* True while i
234c0 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e  nitialization in
234d0 20 70 72 6f 67 72 65 73 73 20 2a 2f 0a 20 20 69   progress */.  i
234e0 6e 74 20 69 73 4d 75 74 65 78 49 6e 69 74 3b 20  nt isMutexInit; 
234f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23500 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d   /* True after m
23510 75 74 65 78 65 73 20 61 72 65 20 69 6e 69 74 69  utexes are initi
23520 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20  alized */.  int 
23530 69 73 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20 20 20  isMallocInit;   
23540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
23550 20 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c   True after mall
23560 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65  oc is initialize
23570 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 50 43 61  d */.  int isPCa
23580 63 68 65 49 6e 69 74 3b 20 20 20 20 20 20 20 20  cheInit;        
23590 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
235a0 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73   after malloc is
235b0 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
235c0 20 20 69 6e 74 20 6e 52 65 66 49 6e 69 74 4d 75    int nRefInitMu
235d0 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  tex;            
235e0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
235f0 20 75 73 65 72 73 20 6f 66 20 70 49 6e 69 74 4d   users of pInitM
23600 75 74 65 78 20 2a 2f 0a 20 20 73 71 6c 69 74 65  utex */.  sqlite
23610 33 5f 6d 75 74 65 78 20 2a 70 49 6e 69 74 4d 75  3_mutex *pInitMu
23620 74 65 78 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d  tex;        /* M
23630 75 74 65 78 20 75 73 65 64 20 62 79 20 73 71 6c  utex used by sql
23640 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28  ite3_initialize(
23650 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 4c  ) */.  void (*xL
23660 6f 67 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f  og)(void*,int,co
23670 6e 73 74 20 63 68 61 72 2a 29 3b 20 2f 2a 20 46  nst char*); /* F
23680 75 6e 63 74 69 6f 6e 20 66 6f 72 20 6c 6f 67 67  unction for logg
23690 69 6e 67 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ing */.  void *p
236a0 4c 6f 67 41 72 67 3b 20 20 20 20 20 20 20 20 20  LogArg;         
236b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
236c0 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20   First argument 
236d0 74 6f 20 78 4c 6f 67 28 29 20 2a 2f 0a 23 69 66  to xLog() */.#if
236e0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
236f0 45 5f 53 51 4c 4c 4f 47 0a 20 20 76 6f 69 64 28  E_SQLLOG.  void(
23700 2a 78 53 71 6c 6c 6f 67 29 28 76 6f 69 64 2a 2c  *xSqllog)(void*,
23710 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
23720 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f  har*, int);.  vo
23730 69 64 20 2a 70 53 71 6c 6c 6f 67 41 72 67 3b 0a  id *pSqllogArg;.
23740 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
23750 4c 49 54 45 5f 56 44 42 45 5f 43 4f 56 45 52 41  LITE_VDBE_COVERA
23760 47 45 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c  GE.  /* The foll
23770 6f 77 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20 28  owing callback (
23780 69 66 20 6e 6f 74 20 4e 55 4c 4c 29 20 69 73 20  if not NULL) is 
23790 69 6e 76 6f 6b 65 64 20 6f 6e 20 65 76 65 72 79  invoked on every
237a0 20 56 44 42 45 20 62 72 61 6e 63 68 0a 20 20 2a   VDBE branch.  *
237b0 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 53 65  * operation.  Se
237c0 74 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 75  t the callback u
237d0 73 69 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54  sing SQLITE_TEST
237e0 43 54 52 4c 5f 56 44 42 45 5f 43 4f 56 45 52 41  CTRL_VDBE_COVERA
237f0 47 45 2e 0a 20 20 2a 2f 0a 20 20 76 6f 69 64 20  GE..  */.  void 
23800 28 2a 78 56 64 62 65 42 72 61 6e 63 68 29 28 76  (*xVdbeBranch)(v
23810 6f 69 64 2a 2c 69 6e 74 20 69 53 72 63 4c 69 6e  oid*,int iSrcLin
23820 65 2c 75 38 20 65 54 68 69 73 2c 75 38 20 65 4d  e,u8 eThis,u8 eM
23830 78 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b  x);  /* Callback
23840 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 56 64 62   */.  void *pVdb
23850 65 42 72 61 6e 63 68 41 72 67 3b 20 20 20 20 20  eBranchArg;     
23860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23880 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20  /* 1st argument 
23890 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
238a0 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41  f SQLITE_UNTESTA
238b0 42 4c 45 0a 20 20 69 6e 74 20 28 2a 78 54 65 73  BLE.  int (*xTes
238c0 74 43 61 6c 6c 62 61 63 6b 29 28 69 6e 74 29 3b  tCallback)(int);
238d0 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 76 6f 6b          /* Invok
238e0 65 64 20 62 79 20 73 71 6c 69 74 65 33 46 61 75  ed by sqlite3Fau
238f0 6c 74 53 69 6d 28 29 20 2a 2f 0a 23 65 6e 64 69  ltSim() */.#endi
23900 66 0a 20 20 69 6e 74 20 62 4c 6f 63 61 6c 74 69  f.  int bLocalti
23910 6d 65 46 61 75 6c 74 3b 20 20 20 20 20 20 20 20  meFault;        
23920 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
23930 20 66 61 69 6c 20 6c 6f 63 61 6c 74 69 6d 65 28   fail localtime(
23940 29 20 63 61 6c 6c 73 20 2a 2f 0a 20 20 69 6e 74  ) calls */.  int
23950 20 69 4f 6e 63 65 52 65 73 65 74 54 68 72 65 73   iOnceResetThres
23960 68 6f 6c 64 3b 20 20 20 20 20 20 20 20 20 20 2f  hold;          /
23970 2a 20 57 68 65 6e 20 74 6f 20 72 65 73 65 74 20  * When to reset 
23980 4f 50 5f 4f 6e 63 65 20 63 6f 75 6e 74 65 72 73  OP_Once counters
23990 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
239a0 69 73 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  is macro is used
239b0 20 69 6e 73 69 64 65 20 6f 66 20 61 73 73 65 72   inside of asser
239c0 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 74  t() statements t
239d0 6f 20 69 6e 64 69 63 61 74 65 20 74 68 61 74 0a  o indicate that.
239e0 2a 2a 20 74 68 65 20 61 73 73 65 72 74 20 69 73  ** the assert is
239f0 20 6f 6e 6c 79 20 76 61 6c 69 64 20 6f 6e 20 61   only valid on a
23a00 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74   well-formed dat
23a10 61 62 61 73 65 2e 20 20 49 6e 73 74 65 61 64 20  abase.  Instead 
23a20 6f 66 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73  of:.**.**     as
23a30 73 65 72 74 28 20 58 20 29 3b 0a 2a 2a 0a 2a 2a  sert( X );.**.**
23a40 20 4f 6e 65 20 77 72 69 74 65 73 3a 0a 2a 2a 0a   One writes:.**.
23a50 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20 58  **     assert( X
23a60 20 7c 7c 20 43 4f 52 52 55 50 54 5f 44 42 20 29   || CORRUPT_DB )
23a70 3b 0a 2a 2a 0a 2a 2a 20 43 4f 52 52 55 50 54 5f  ;.**.** CORRUPT_
23a80 44 42 20 69 73 20 74 72 75 65 20 64 75 72 69 6e  DB is true durin
23a90 67 20 6e 6f 72 6d 61 6c 20 6f 70 65 72 61 74 69  g normal operati
23aa0 6f 6e 2e 20 20 43 4f 52 52 55 50 54 5f 44 42 20  on.  CORRUPT_DB 
23ab0 64 6f 65 73 20 6e 6f 74 20 69 6e 64 69 63 61 74  does not indicat
23ac0 65 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 64 61  e.** that the da
23ad0 74 61 62 61 73 65 20 69 73 20 64 65 66 69 6e 69  tabase is defini
23ae0 74 65 6c 79 20 63 6f 72 72 75 70 74 2c 20 6f 6e  tely corrupt, on
23af0 6c 79 20 74 68 61 74 20 69 74 20 6d 69 67 68 74  ly that it might
23b00 20 62 65 20 63 6f 72 72 75 70 74 2e 0a 2a 2a 20   be corrupt..** 
23b10 46 6f 72 20 6d 6f 73 74 20 74 65 73 74 20 63 61  For most test ca
23b20 73 65 73 2c 20 43 4f 52 52 55 50 54 5f 44 42 20  ses, CORRUPT_DB 
23b30 69 73 20 73 65 74 20 74 6f 20 66 61 6c 73 65 20  is set to false 
23b40 75 73 69 6e 67 20 61 20 73 70 65 63 69 61 6c 0a  using a special.
23b50 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f  ** sqlite3_test_
23b60 63 6f 6e 74 72 6f 6c 28 29 2e 20 20 54 68 69 73  control().  This
23b70 20 65 6e 61 62 6c 65 73 20 61 73 73 65 72 74 28   enables assert(
23b80 29 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20  ) statements to 
23b90 70 72 6f 76 65 0a 2a 2a 20 74 68 69 6e 67 73 20  prove.** things 
23ba0 74 68 61 74 20 61 72 65 20 61 6c 77 61 79 73 20  that are always 
23bb0 74 72 75 65 20 66 6f 72 20 77 65 6c 6c 2d 66 6f  true for well-fo
23bc0 72 6d 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a  rmed databases..
23bd0 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 52 52 55  */.#define CORRU
23be0 50 54 5f 44 42 20 20 28 73 71 6c 69 74 65 33 43  PT_DB  (sqlite3C
23bf0 6f 6e 66 69 67 2e 6e 65 76 65 72 43 6f 72 72 75  onfig.neverCorru
23c00 70 74 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f  pt==0)../*.** Co
23c10 6e 74 65 78 74 20 70 6f 69 6e 74 65 72 20 70 61  ntext pointer pa
23c20 73 73 65 64 20 64 6f 77 6e 20 74 68 72 6f 75 67  ssed down throug
23c30 68 20 74 68 65 20 74 72 65 65 2d 77 61 6c 6b 2e  h the tree-walk.
23c40 0a 2a 2f 0a 73 74 72 75 63 74 20 57 61 6c 6b 65  .*/.struct Walke
23c50 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61  r {.  Parse *pPa
23c60 72 73 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  rse;            
23c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23c80 2f 2a 20 50 61 72 73 65 72 20 63 6f 6e 74 65 78  /* Parser contex
23c90 74 2e 20 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78  t.  */.  int (*x
23ca0 45 78 70 72 43 61 6c 6c 62 61 63 6b 29 28 57 61  ExprCallback)(Wa
23cb0 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 20 20  lker*, Expr*);  
23cc0 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66     /* Callback f
23cd0 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a  or expressions *
23ce0 2f 0a 20 20 69 6e 74 20 28 2a 78 53 65 6c 65 63  /.  int (*xSelec
23cf0 74 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65  tCallback)(Walke
23d00 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 20 20 2f 2a  r*,Select*);  /*
23d10 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45   Callback for SE
23d20 4c 45 43 54 73 20 2a 2f 0a 20 20 76 6f 69 64 20  LECTs */.  void 
23d30 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63  (*xSelectCallbac
23d40 6b 32 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65  k2)(Walker*,Sele
23d50 63 74 2a 29 3b 2f 2a 20 53 65 63 6f 6e 64 20 63  ct*);/* Second c
23d60 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45  allback for SELE
23d70 43 54 73 20 2a 2f 0a 20 20 69 6e 74 20 77 61 6c  CTs */.  int wal
23d80 6b 65 72 44 65 70 74 68 3b 20 20 20 20 20 20 20  kerDepth;       
23d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23da0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
23db0 73 75 62 71 75 65 72 69 65 73 20 2a 2f 0a 20 20  subqueries */.  
23dc0 75 38 20 65 43 6f 64 65 3b 20 20 20 20 20 20 20  u8 eCode;       
23dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23de0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 73            /* A s
23df0 6d 61 6c 6c 20 70 72 6f 63 65 73 73 69 6e 67 20  mall processing 
23e00 63 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  code */.  union 
23e10 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
23e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e30 20 20 20 20 2f 2a 20 45 78 74 72 61 20 64 61 74      /* Extra dat
23e40 61 20 66 6f 72 20 63 61 6c 6c 62 61 63 6b 20 2a  a for callback *
23e50 2f 0a 20 20 20 20 4e 61 6d 65 43 6f 6e 74 65 78  /.    NameContex
23e60 74 20 2a 70 4e 43 3b 20 20 20 20 20 20 20 20 20  t *pNC;         
23e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e80 2f 2a 20 4e 61 6d 69 6e 67 20 63 6f 6e 74 65 78  /* Naming contex
23e90 74 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 3b 20  t */.    int n; 
23ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ec0 20 20 20 2f 2a 20 41 20 63 6f 75 6e 74 65 72 20     /* A counter 
23ed0 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 75 72 3b  */.    int iCur;
23ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f00 20 2f 2a 20 41 20 63 75 72 73 6f 72 20 6e 75 6d   /* A cursor num
23f10 62 65 72 20 2a 2f 0a 20 20 20 20 53 72 63 4c 69  ber */.    SrcLi
23f20 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20  st *pSrcList;   
23f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f40 20 20 20 20 20 2f 2a 20 46 52 4f 4d 20 63 6c 61       /* FROM cla
23f50 75 73 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63  use */.    struc
23f60 74 20 53 72 63 43 6f 75 6e 74 20 2a 70 53 72 63  t SrcCount *pSrc
23f70 43 6f 75 6e 74 3b 20 20 20 20 20 20 20 20 20 20  Count;          
23f80 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 69 6e 67       /* Counting
23f90 20 63 6f 6c 75 6d 6e 20 72 65 66 65 72 65 6e 63   column referenc
23fa0 65 73 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74  es */.    struct
23fb0 20 43 43 75 72 48 69 6e 74 20 2a 70 43 43 75 72   CCurHint *pCCur
23fc0 48 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  Hint;           
23fd0 20 20 20 20 2f 2a 20 55 73 65 64 20 62 79 20 63      /* Used by c
23fe0 6f 64 65 43 75 72 73 6f 72 48 69 6e 74 28 29 20  odeCursorHint() 
23ff0 2a 2f 0a 20 20 20 20 69 6e 74 20 2a 61 69 43 6f  */.    int *aiCo
24000 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  l;              
24010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24020 20 2f 2a 20 61 72 72 61 79 20 6f 66 20 63 6f 6c   /* array of col
24030 75 6d 6e 20 69 6e 64 65 78 65 73 20 2a 2f 0a 20  umn indexes */. 
24040 20 20 20 73 74 72 75 63 74 20 49 64 78 43 6f 76     struct IdxCov
24050 65 72 20 2a 70 49 64 78 43 6f 76 65 72 3b 20 20  er *pIdxCover;  
24060 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24070 43 68 65 63 6b 20 66 6f 72 20 69 6e 64 65 78 20  Check for index 
24080 63 6f 76 65 72 61 67 65 20 2a 2f 0a 20 20 20 20  coverage */.    
24090 73 74 72 75 63 74 20 49 64 78 45 78 70 72 54 72  struct IdxExprTr
240a0 61 6e 73 20 2a 70 49 64 78 54 72 61 6e 73 3b 20  ans *pIdxTrans; 
240b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e            /* Con
240c0 76 65 72 74 20 69 6e 64 65 78 65 64 20 65 78 70  vert indexed exp
240d0 72 20 74 6f 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  r to column */. 
240e0 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72     ExprList *pGr
240f0 6f 75 70 42 79 3b 20 20 20 20 20 20 20 20 20 20  oupBy;          
24100 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24110 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20  GROUP BY clause 
24120 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 48 61  */.    struct Ha
24130 76 69 6e 67 54 6f 57 68 65 72 65 43 74 78 20 2a  vingToWhereCtx *
24140 70 48 61 76 69 6e 67 43 74 78 3b 20 20 20 20 20  pHavingCtx;     
24150 20 2f 2a 20 48 41 56 49 4e 47 20 74 6f 20 57 48   /* HAVING to WH
24160 45 52 45 20 63 6c 61 75 73 65 20 63 74 78 20 2a  ERE clause ctx *
24170 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20  /.  } u;.};../* 
24180 46 6f 72 77 61 72 64 20 64 65 63 6c 61 72 61 74  Forward declarat
24190 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73 71 6c 69  ions */.int sqli
241a0 74 65 33 57 61 6c 6b 45 78 70 72 28 57 61 6c 6b  te3WalkExpr(Walk
241b0 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74  er*, Expr*);.int
241c0 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72   sqlite3WalkExpr
241d0 4c 69 73 74 28 57 61 6c 6b 65 72 2a 2c 20 45 78  List(Walker*, Ex
241e0 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
241f0 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 28  lite3WalkSelect(
24200 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a  Walker*, Select*
24210 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  );.int sqlite3Wa
24220 6c 6b 53 65 6c 65 63 74 45 78 70 72 28 57 61 6c  lkSelectExpr(Wal
24230 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  ker*, Select*);.
24240 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53  int sqlite3WalkS
24250 65 6c 65 63 74 46 72 6f 6d 28 57 61 6c 6b 65 72  electFrom(Walker
24260 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  *, Select*);.int
24270 20 73 71 6c 69 74 65 33 45 78 70 72 57 61 6c 6b   sqlite3ExprWalk
24280 4e 6f 6f 70 28 57 61 6c 6b 65 72 2a 2c 20 45 78  Noop(Walker*, Ex
24290 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
242a0 33 53 65 6c 65 63 74 57 61 6c 6b 4e 6f 6f 70 28  3SelectWalkNoop(
242b0 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a  Walker*, Select*
242c0 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
242d0 5f 44 45 42 55 47 0a 76 6f 69 64 20 73 71 6c 69  _DEBUG.void sqli
242e0 74 65 33 53 65 6c 65 63 74 57 61 6c 6b 41 73 73  te3SelectWalkAss
242f0 65 72 74 32 28 57 61 6c 6b 65 72 2a 2c 20 53 65  ert2(Walker*, Se
24300 6c 65 63 74 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  lect*);.#endif..
24310 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 63 6f 64  /*.** Return cod
24320 65 20 66 72 6f 6d 20 74 68 65 20 70 61 72 73 65  e from the parse
24330 2d 74 72 65 65 20 77 61 6c 6b 69 6e 67 20 70 72  -tree walking pr
24340 69 6d 69 74 69 76 65 73 20 61 6e 64 20 74 68 65  imitives and the
24350 69 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 73 2e  ir.** callbacks.
24360 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f  .*/.#define WRC_
24370 43 6f 6e 74 69 6e 75 65 20 20 20 20 30 20 20 20  Continue    0   
24380 2f 2a 20 43 6f 6e 74 69 6e 75 65 20 64 6f 77 6e  /* Continue down
24390 20 69 6e 74 6f 20 63 68 69 6c 64 72 65 6e 20 2a   into children *
243a0 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 50 72  /.#define WRC_Pr
243b0 75 6e 65 20 20 20 20 20 20 20 31 20 20 20 2f 2a  une       1   /*
243c0 20 4f 6d 69 74 20 63 68 69 6c 64 72 65 6e 20 62   Omit children b
243d0 75 74 20 63 6f 6e 74 69 6e 75 65 20 77 61 6c 6b  ut continue walk
243e0 69 6e 67 20 73 69 62 6c 69 6e 67 73 20 2a 2f 0a  ing siblings */.
243f0 23 64 65 66 69 6e 65 20 57 52 43 5f 41 62 6f 72  #define WRC_Abor
24400 74 20 20 20 20 20 20 20 32 20 20 20 2f 2a 20 41  t       2   /* A
24410 62 61 6e 64 6f 6e 20 74 68 65 20 74 72 65 65 20  bandon the tree 
24420 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  walk */../*.** A
24430 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
24440 69 73 20 73 74 72 75 63 74 75 72 65 20 72 65 70  is structure rep
24450 72 65 73 65 6e 74 73 20 61 20 73 65 74 20 6f 66  resents a set of
24460 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 43 54 45   one or more CTE
24470 73 0a 2a 2a 20 28 63 6f 6d 6d 6f 6e 20 74 61 62  s.** (common tab
24480 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73 29 20  le expressions) 
24490 63 72 65 61 74 65 64 20 62 79 20 61 20 73 69 6e  created by a sin
244a0 67 6c 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e  gle WITH clause.
244b0 0a 2a 2f 0a 73 74 72 75 63 74 20 57 69 74 68 20  .*/.struct With 
244c0 7b 0a 20 20 69 6e 74 20 6e 43 74 65 3b 20 20 20  {.  int nCte;   
244d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
244e0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
244f0 20 43 54 45 73 20 69 6e 20 74 68 65 20 57 49 54   CTEs in the WIT
24500 48 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 57 69  H clause */.  Wi
24510 74 68 20 2a 70 4f 75 74 65 72 3b 20 20 20 20 20  th *pOuter;     
24520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
24530 20 43 6f 6e 74 61 69 6e 69 6e 67 20 57 49 54 48   Containing WITH
24540 20 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c   clause, or NULL
24550 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 43 74 65   */.  struct Cte
24560 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
24570 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63        /* For eac
24580 68 20 43 54 45 20 69 6e 20 74 68 65 20 57 49 54  h CTE in the WIT
24590 48 20 63 6c 61 75 73 65 2e 2e 2e 2e 20 2a 2f 0a  H clause.... */.
245a0 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b      char *zName;
245b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
245c0 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
245d0 68 69 73 20 43 54 45 20 2a 2f 0a 20 20 20 20 45  his CTE */.    E
245e0 78 70 72 4c 69 73 74 20 2a 70 43 6f 6c 73 3b 20  xprList *pCols; 
245f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
24600 2a 20 4c 69 73 74 20 6f 66 20 65 78 70 6c 69 63  * List of explic
24610 69 74 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2c  it column names,
24620 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20   or NULL */.    
24630 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
24640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24650 2f 2a 20 54 68 65 20 64 65 66 69 6e 69 74 69 6f  /* The definitio
24660 6e 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a 2f  n of this CTE */
24670 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20  .    const char 
24680 2a 7a 43 74 65 45 72 72 3b 20 20 20 20 20 20 20  *zCteErr;       
24690 20 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65       /* Error me
246a0 73 73 61 67 65 20 66 6f 72 20 63 69 72 63 75 6c  ssage for circul
246b0 61 72 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f  ar references */
246c0 0a 20 20 7d 20 61 5b 31 5d 3b 0a 7d 3b 0a 0a 23  .  } a[1];.};..#
246d0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
246e0 55 47 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  UG./*.** An inst
246f0 61 6e 63 65 20 6f 66 20 74 68 65 20 54 72 65 65  ance of the Tree
24700 56 69 65 77 20 6f 62 6a 65 63 74 20 69 73 20 75  View object is u
24710 73 65 64 20 66 6f 72 20 70 72 69 6e 74 69 6e 67  sed for printing
24720 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a   the content of.
24730 2a 2a 20 64 61 74 61 20 73 74 72 75 63 74 75 72  ** data structur
24740 65 73 20 6f 6e 20 73 71 6c 69 74 65 33 44 65 62  es on sqlite3Deb
24750 75 67 50 72 69 6e 74 66 28 29 20 75 73 69 6e 67  ugPrintf() using
24760 20 61 20 74 72 65 65 2d 6c 69 6b 65 20 76 69 65   a tree-like vie
24770 77 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72 65  w..*/.struct Tre
24780 65 56 69 65 77 20 7b 0a 20 20 69 6e 74 20 69 4c  eView {.  int iL
24790 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20  evel;           
247a0 20 20 2f 2a 20 57 68 69 63 68 20 6c 65 76 65 6c    /* Which level
247b0 20 6f 66 20 74 68 65 20 74 72 65 65 20 77 65 20   of the tree we 
247c0 61 72 65 20 6f 6e 20 2a 2f 0a 20 20 75 38 20 20  are on */.  u8  
247d0 62 4c 69 6e 65 5b 31 30 30 5d 3b 20 20 20 20 20  bLine[100];     
247e0 20 20 20 20 2f 2a 20 44 72 61 77 20 76 65 72 74      /* Draw vert
247f0 69 63 61 6c 20 69 6e 20 63 6f 6c 75 6d 6e 20 69  ical in column i
24800 20 69 66 20 62 4c 69 6e 65 5b 69 5d 20 69 73 20   if bLine[i] is 
24810 74 72 75 65 20 2a 2f 0a 7d 3b 0a 23 65 6e 64 69  true */.};.#endi
24820 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55  f /* SQLITE_DEBU
24830 47 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75  G */../*.** Assu
24840 6d 69 6e 67 20 7a 49 6e 20 70 6f 69 6e 74 73 20  ming zIn points 
24850 74 6f 20 74 68 65 20 66 69 72 73 74 20 62 79 74  to the first byt
24860 65 20 6f 66 20 61 20 55 54 46 2d 38 20 63 68 61  e of a UTF-8 cha
24870 72 61 63 74 65 72 2c 0a 2a 2a 20 61 64 76 61 6e  racter,.** advan
24880 63 65 20 7a 49 6e 20 74 6f 20 70 6f 69 6e 74 20  ce zIn to point 
24890 74 6f 20 74 68 65 20 66 69 72 73 74 20 62 79 74  to the first byt
248a0 65 20 6f 66 20 74 68 65 20 6e 65 78 74 20 55 54  e of the next UT
248b0 46 2d 38 20 63 68 61 72 61 63 74 65 72 2e 0a 2a  F-8 character..*
248c0 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
248d0 5f 53 4b 49 50 5f 55 54 46 38 28 7a 49 6e 29 20  _SKIP_UTF8(zIn) 
248e0 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
248f0 20 20 20 20 20 20 20 20 20 5c 0a 20 20 69 66 28           \.  if(
24900 20 28 2a 28 7a 49 6e 2b 2b 29 29 3e 3d 30 78 63   (*(zIn++))>=0xc
24910 30 20 29 7b 20 20 20 20 20 20 20 20 20 20 20 20  0 ){            
24920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24930 20 20 5c 0a 20 20 20 20 77 68 69 6c 65 28 20 28    \.    while( (
24940 2a 7a 49 6e 20 26 20 30 78 63 30 29 3d 3d 30 78  *zIn & 0xc0)==0x
24950 38 30 20 29 7b 20 7a 49 6e 2b 2b 3b 20 7d 20 20  80 ){ zIn++; }  
24960 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 7d             \.  }
24970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
249a0 20 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54      \.}../*.** T
249b0 68 65 20 53 51 4c 49 54 45 5f 2a 5f 42 4b 50 54  he SQLITE_*_BKPT
249c0 20 6d 61 63 72 6f 73 20 61 72 65 20 73 75 62 73   macros are subs
249d0 74 69 74 75 74 65 73 20 66 6f 72 20 74 68 65 20  titutes for the 
249e0 65 72 72 6f 72 20 63 6f 64 65 73 20 77 69 74 68  error codes with
249f0 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 6e 61 6d  .** the same nam
24a00 65 20 62 75 74 20 77 69 74 68 6f 75 74 20 74 68  e but without th
24a10 65 20 5f 42 4b 50 54 20 73 75 66 66 69 78 2e 20  e _BKPT suffix. 
24a20 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 69 6e   These macros in
24a30 76 6f 6b 65 0a 2a 2a 20 72 6f 75 74 69 6e 65 73  voke.** routines
24a40 20 74 68 61 74 20 72 65 70 6f 72 74 20 74 68 65   that report the
24a50 20 6c 69 6e 65 2d 6e 75 6d 62 65 72 20 6f 6e 20   line-number on 
24a60 77 68 69 63 68 20 74 68 65 20 65 72 72 6f 72 20  which the error 
24a70 6f 72 69 67 69 6e 61 74 65 64 0a 2a 2a 20 75 73  originated.** us
24a80 69 6e 67 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28  ing sqlite3_log(
24a90 29 2e 20 20 54 68 65 20 72 6f 75 74 69 6e 65 73  ).  The routines
24aa0 20 61 6c 73 6f 20 70 72 6f 76 69 64 65 20 61 20   also provide a 
24ab0 63 6f 6e 76 65 6e 69 65 6e 74 20 70 6c 61 63 65  convenient place
24ac0 0a 2a 2a 20 74 6f 20 73 65 74 20 61 20 64 65 62  .** to set a deb
24ad0 75 67 67 65 72 20 62 72 65 61 6b 70 6f 69 6e 74  ugger breakpoint
24ae0 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
24af0 43 6f 72 72 75 70 74 45 72 72 6f 72 28 69 6e 74  CorruptError(int
24b00 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 69  );.int sqlite3Mi
24b10 73 75 73 65 45 72 72 6f 72 28 69 6e 74 29 3b 0a  suseError(int);.
24b20 69 6e 74 20 73 71 6c 69 74 65 33 43 61 6e 74 6f  int sqlite3Canto
24b30 70 65 6e 45 72 72 6f 72 28 69 6e 74 29 3b 0a 23  penError(int);.#
24b40 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f  define SQLITE_CO
24b50 52 52 55 50 54 5f 42 4b 50 54 20 73 71 6c 69 74  RRUPT_BKPT sqlit
24b60 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28 5f  e3CorruptError(_
24b70 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65  _LINE__).#define
24b80 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42   SQLITE_MISUSE_B
24b90 4b 50 54 20 73 71 6c 69 74 65 33 4d 69 73 75 73  KPT sqlite3Misus
24ba0 65 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29  eError(__LINE__)
24bb0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
24bc0 43 41 4e 54 4f 50 45 4e 5f 42 4b 50 54 20 73 71  CANTOPEN_BKPT sq
24bd0 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72  lite3CantopenErr
24be0 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 69 66  or(__LINE__).#if
24bf0 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
24c00 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4e 6f  .  int sqlite3No
24c10 6d 65 6d 45 72 72 6f 72 28 69 6e 74 29 3b 0a 20  memError(int);. 
24c20 20 69 6e 74 20 73 71 6c 69 74 65 33 49 6f 65 72   int sqlite3Ioer
24c30 72 6e 6f 6d 65 6d 45 72 72 6f 72 28 69 6e 74 29  rnomemError(int)
24c40 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 43  ;.  int sqlite3C
24c50 6f 72 72 75 70 74 50 67 6e 6f 45 72 72 6f 72 28  orruptPgnoError(
24c60 69 6e 74 2c 50 67 6e 6f 29 3b 0a 23 20 64 65 66  int,Pgno);.# def
24c70 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  ine SQLITE_NOMEM
24c80 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 4e 6f 6d  _BKPT sqlite3Nom
24c90 65 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f  emError(__LINE__
24ca0 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
24cb0 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b  E_IOERR_NOMEM_BK
24cc0 50 54 20 73 71 6c 69 74 65 33 49 6f 65 72 72 6e  PT sqlite3Ioerrn
24cd0 6f 6d 65 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  omemError(__LINE
24ce0 5f 5f 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  __).# define SQL
24cf0 49 54 45 5f 43 4f 52 52 55 50 54 5f 50 47 4e 4f  ITE_CORRUPT_PGNO
24d00 28 50 29 20 73 71 6c 69 74 65 33 43 6f 72 72 75  (P) sqlite3Corru
24d10 70 74 50 67 6e 6f 45 72 72 6f 72 28 5f 5f 4c 49  ptPgnoError(__LI
24d20 4e 45 5f 5f 2c 28 50 29 29 0a 23 65 6c 73 65 0a  NE__,(P)).#else.
24d30 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
24d40 4e 4f 4d 45 4d 5f 42 4b 50 54 20 53 51 4c 49 54  NOMEM_BKPT SQLIT
24d50 45 5f 4e 4f 4d 45 4d 0a 23 20 64 65 66 69 6e 65  E_NOMEM.# define
24d60 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f   SQLITE_IOERR_NO
24d70 4d 45 4d 5f 42 4b 50 54 20 53 51 4c 49 54 45 5f  MEM_BKPT SQLITE_
24d80 49 4f 45 52 52 5f 4e 4f 4d 45 4d 0a 23 20 64 65  IOERR_NOMEM.# de
24d90 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52  fine SQLITE_CORR
24da0 55 50 54 5f 50 47 4e 4f 28 50 29 20 73 71 6c 69  UPT_PGNO(P) sqli
24db0 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28  te3CorruptError(
24dc0 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 65 6e 64 69 66  __LINE__).#endif
24dd0 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 33 20 61 6e 64  ../*.** FTS3 and
24de0 20 46 54 53 34 20 62 6f 74 68 20 72 65 71 75 69   FTS4 both requi
24df0 72 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  re virtual table
24e00 20 73 75 70 70 6f 72 74 0a 2a 2f 0a 23 69 66 20   support.*/.#if 
24e10 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
24e20 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
24e30 29 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  ).# undef SQLITE
24e40 5f 45 4e 41 42 4c 45 5f 46 54 53 33 0a 23 20 75  _ENABLE_FTS3.# u
24e50 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  ndef SQLITE_ENAB
24e60 4c 45 5f 46 54 53 34 0a 23 65 6e 64 69 66 0a 0a  LE_FTS4.#endif..
24e70 2f 2a 0a 2a 2a 20 46 54 53 34 20 69 73 20 72 65  /*.** FTS4 is re
24e80 61 6c 6c 79 20 61 6e 20 65 78 74 65 6e 73 69 6f  ally an extensio
24e90 6e 20 66 6f 72 20 46 54 53 33 2e 20 20 49 74 20  n for FTS3.  It 
24ea0 69 73 20 65 6e 61 62 6c 65 64 20 75 73 69 6e 67  is enabled using
24eb0 20 74 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 45   the.** SQLITE_E
24ec0 4e 41 42 4c 45 5f 46 54 53 33 20 6d 61 63 72 6f  NABLE_FTS3 macro
24ed0 2e 20 20 42 75 74 20 74 6f 20 61 76 6f 69 64 20  .  But to avoid 
24ee0 63 6f 6e 66 75 73 69 6f 6e 20 77 65 20 61 6c 73  confusion we als
24ef0 6f 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 53 51  o call.** the SQ
24f00 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34  LITE_ENABLE_FTS4
24f10 20 6d 61 63 72 6f 20 74 6f 20 73 65 72 76 65 20   macro to serve 
24f20 61 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20  as an alias for 
24f30 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
24f40 53 33 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  S3..*/.#if defin
24f50 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
24f60 5f 46 54 53 34 29 20 26 26 20 21 64 65 66 69 6e  _FTS4) && !defin
24f70 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
24f80 5f 46 54 53 33 29 0a 23 20 64 65 66 69 6e 65 20  _FTS3).# define 
24f90 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
24fa0 53 33 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  S3 1.#endif../*.
24fb0 2a 2a 20 54 68 65 20 63 74 79 70 65 2e 68 20 68  ** The ctype.h h
24fc0 65 61 64 65 72 20 69 73 20 6e 65 65 64 65 64 20  eader is needed 
24fd0 66 6f 72 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79  for non-ASCII sy
24fe0 73 74 65 6d 73 2e 20 20 49 74 20 69 73 20 61 6c  stems.  It is al
24ff0 73 6f 0a 2a 2a 20 6e 65 65 64 65 64 20 62 79 20  so.** needed by 
25000 46 54 53 33 20 77 68 65 6e 20 46 54 53 33 20 69  FTS3 when FTS3 i
25010 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68  s included in th
25020 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a  e amalgamation..
25030 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
25040 53 51 4c 49 54 45 5f 41 53 43 49 49 29 20 7c 7c  SQLITE_ASCII) ||
25050 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28   \.    (defined(
25060 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
25070 53 33 29 20 26 26 20 64 65 66 69 6e 65 64 28 53  S3) && defined(S
25080 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49  QLITE_AMALGAMATI
25090 4f 4e 29 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c  ON)).# include <
250a0 63 74 79 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a  ctype.h>.#endif.
250b0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
250c0 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69  wing macros mimi
250d0 63 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 6c  c the standard l
250e0 69 62 72 61 72 79 20 66 75 6e 63 74 69 6f 6e 73  ibrary functions
250f0 20 74 6f 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69   toupper(),.** i
25100 73 73 70 61 63 65 28 29 2c 20 69 73 61 6c 6e 75  sspace(), isalnu
25110 6d 28 29 2c 20 69 73 64 69 67 69 74 28 29 20 61  m(), isdigit() a
25120 6e 64 20 69 73 78 64 69 67 69 74 28 29 2c 20 72  nd isxdigit(), r
25130 65 73 70 65 63 74 69 76 65 6c 79 2e 20 54 68 65  espectively. The
25140 0a 2a 2a 20 73 71 6c 69 74 65 20 76 65 72 73 69  .** sqlite versi
25150 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f  ons only work fo
25160 72 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65  r ASCII characte
25170 72 73 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f  rs, regardless o
25180 66 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66  f locale..*/.#if
25190 64 65 66 20 53 51 4c 49 54 45 5f 41 53 43 49 49  def SQLITE_ASCII
251a0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
251b0 33 54 6f 75 70 70 65 72 28 78 29 20 20 28 28 78  3Toupper(x)  ((x
251c0 29 26 7e 28 73 71 6c 69 74 65 33 43 74 79 70 65  )&~(sqlite3Ctype
251d0 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
251e0 61 72 29 28 78 29 5d 26 30 78 32 30 29 29 0a 23  ar)(x)]&0x20)).#
251f0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
25200 73 73 70 61 63 65 28 78 29 20 20 20 28 73 71 6c  sspace(x)   (sql
25210 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
25220 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
25230 26 30 78 30 31 29 0a 23 20 64 65 66 69 6e 65 20  &0x01).# define 
25240 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78  sqlite3Isalnum(x
25250 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
25260 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
25270 68 61 72 29 28 78 29 5d 26 30 78 30 36 29 0a 23  har)(x)]&0x06).#
25280 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
25290 73 61 6c 70 68 61 28 78 29 20 20 20 28 73 71 6c  salpha(x)   (sql
252a0 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
252b0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
252c0 26 30 78 30 32 29 0a 23 20 64 65 66 69 6e 65 20  &0x02).# define 
252d0 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 78  sqlite3Isdigit(x
252e0 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
252f0 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
25300 68 61 72 29 28 78 29 5d 26 30 78 30 34 29 0a 23  har)(x)]&0x04).#
25310 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
25320 73 78 64 69 67 69 74 28 78 29 20 20 28 73 71 6c  sxdigit(x)  (sql
25330 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
25340 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
25350 26 30 78 30 38 29 0a 23 20 64 65 66 69 6e 65 20  &0x08).# define 
25360 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78  sqlite3Tolower(x
25370 29 20 20 20 28 73 71 6c 69 74 65 33 55 70 70 65  )   (sqlite3Uppe
25380 72 54 6f 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e  rToLower[(unsign
25390 65 64 20 63 68 61 72 29 28 78 29 5d 29 0a 23 20  ed char)(x)]).# 
253a0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
253b0 71 75 6f 74 65 28 78 29 20 20 20 28 73 71 6c 69  quote(x)   (sqli
253c0 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
253d0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
253e0 30 78 38 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  0x80).#else.# de
253f0 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70  fine sqlite3Toup
25400 70 65 72 28 78 29 20 20 20 74 6f 75 70 70 65 72  per(x)   toupper
25410 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
25420 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
25430 6c 69 74 65 33 49 73 73 70 61 63 65 28 78 29 20  lite3Isspace(x) 
25440 20 20 69 73 73 70 61 63 65 28 28 75 6e 73 69 67    isspace((unsig
25450 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
25460 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
25470 61 6c 6e 75 6d 28 78 29 20 20 20 69 73 61 6c 6e  alnum(x)   isaln
25480 75 6d 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  um((unsigned cha
25490 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
254a0 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78  sqlite3Isalpha(x
254b0 29 20 20 20 69 73 61 6c 70 68 61 28 28 75 6e 73  )   isalpha((uns
254c0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
254d0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
254e0 49 73 64 69 67 69 74 28 78 29 20 20 20 69 73 64  Isdigit(x)   isd
254f0 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63  igit((unsigned c
25500 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
25510 65 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69  e sqlite3Isxdigi
25520 74 28 78 29 20 20 69 73 78 64 69 67 69 74 28 28  t(x)  isxdigit((
25530 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
25540 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
25550 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20  te3Tolower(x)   
25560 74 6f 6c 6f 77 65 72 28 28 75 6e 73 69 67 6e 65  tolower((unsigne
25570 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
25580 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 71 75  fine sqlite3Isqu
25590 6f 74 65 28 78 29 20 20 20 28 28 78 29 3d 3d 27  ote(x)   ((x)=='
255a0 22 27 7c 7c 28 78 29 3d 3d 27 5c 27 27 7c 7c 28  "'||(x)=='\''||(
255b0 78 29 3d 3d 27 5b 27 7c 7c 28 78 29 3d 3d 27 60  x)=='['||(x)=='`
255c0 27 29 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  ').#endif.#ifnde
255d0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f  f SQLITE_OMIT_CO
255e0 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47  MPILEOPTION_DIAG
255f0 53 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 49  S.int sqlite3IsI
25600 64 43 68 61 72 28 75 38 29 3b 0a 23 65 6e 64 69  dChar(u8);.#endi
25610 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61  f../*.** Interna
25620 6c 20 66 75 6e 63 74 69 6f 6e 20 70 72 6f 74 6f  l function proto
25630 74 79 70 65 73 0a 2a 2f 0a 69 6e 74 20 73 71 6c  types.*/.int sql
25640 69 74 65 33 53 74 72 49 43 6d 70 28 63 6f 6e 73  ite3StrICmp(cons
25650 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
25660 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
25670 33 53 74 72 6c 65 6e 33 30 28 63 6f 6e 73 74 20  3Strlen30(const 
25680 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71  char*);.char *sq
25690 6c 69 74 65 33 43 6f 6c 75 6d 6e 54 79 70 65 28  lite3ColumnType(
256a0 43 6f 6c 75 6d 6e 2a 2c 63 68 61 72 2a 29 3b 0a  Column*,char*);.
256b0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53  #define sqlite3S
256c0 74 72 4e 49 43 6d 70 20 73 71 6c 69 74 65 33 5f  trNICmp sqlite3_
256d0 73 74 72 6e 69 63 6d 70 0a 0a 69 6e 74 20 73 71  strnicmp..int sq
256e0 6c 69 74 65 33 4d 61 6c 6c 6f 63 49 6e 69 74 28  lite3MallocInit(
256f0 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69  void);.void sqli
25700 74 65 33 4d 61 6c 6c 6f 63 45 6e 64 28 76 6f 69  te3MallocEnd(voi
25710 64 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  d);.void *sqlite
25720 33 4d 61 6c 6c 6f 63 28 75 36 34 29 3b 0a 76 6f  3Malloc(u64);.vo
25730 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  id *sqlite3Mallo
25740 63 5a 65 72 6f 28 75 36 34 29 3b 0a 76 6f 69 64  cZero(u64);.void
25750 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f   *sqlite3DbMallo
25760 63 5a 65 72 6f 28 73 71 6c 69 74 65 33 2a 2c 20  cZero(sqlite3*, 
25770 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  u64);.void *sqli
25780 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 73  te3DbMallocRaw(s
25790 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 76  qlite3*, u64);.v
257a0 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61  oid *sqlite3DbMa
257b0 6c 6c 6f 63 52 61 77 4e 4e 28 73 71 6c 69 74 65  llocRawNN(sqlite
257c0 33 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72 20 2a  3*, u64);.char *
257d0 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70 28  sqlite3DbStrDup(
257e0 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
257f0 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c  har*);.char *sql
25800 69 74 65 33 44 62 53 74 72 4e 44 75 70 28 73 71  ite3DbStrNDup(sq
25810 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
25820 72 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a  r*, u64);.void *
25830 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28 76  sqlite3Realloc(v
25840 6f 69 64 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64  oid*, u64);.void
25850 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c   *sqlite3DbReall
25860 6f 63 4f 72 46 72 65 65 28 73 71 6c 69 74 65 33  ocOrFree(sqlite3
25870 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36 34 29   *, void *, u64)
25880 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44  ;.void *sqlite3D
25890 62 52 65 61 6c 6c 6f 63 28 73 71 6c 69 74 65 33  bRealloc(sqlite3
258a0 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36 34 29   *, void *, u64)
258b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62  ;.void sqlite3Db
258c0 46 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 20 76  Free(sqlite3*, v
258d0 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  oid*);.void sqli
258e0 74 65 33 44 62 46 72 65 65 4e 4e 28 73 71 6c 69  te3DbFreeNN(sqli
258f0 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 69 6e  te3*, void*);.in
25900 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53  t sqlite3MallocS
25910 69 7a 65 28 76 6f 69 64 2a 29 3b 0a 69 6e 74 20  ize(void*);.int 
25920 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 53  sqlite3DbMallocS
25930 69 7a 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f  ize(sqlite3*, vo
25940 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  id*);.void *sqli
25950 74 65 33 50 61 67 65 4d 61 6c 6c 6f 63 28 69 6e  te3PageMalloc(in
25960 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
25970 50 61 67 65 46 72 65 65 28 76 6f 69 64 2a 29 3b  PageFree(void*);
25980 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d  .void sqlite3Mem
25990 53 65 74 44 65 66 61 75 6c 74 28 76 6f 69 64 29  SetDefault(void)
259a0 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
259b0 5f 55 4e 54 45 53 54 41 42 4c 45 0a 76 6f 69 64  _UNTESTABLE.void
259c0 20 73 71 6c 69 74 65 33 42 65 6e 69 67 6e 4d 61   sqlite3BenignMa
259d0 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69 64 20 28  llocHooks(void (
259e0 2a 29 28 76 6f 69 64 29 2c 20 76 6f 69 64 20 28  *)(void), void (
259f0 2a 29 28 76 6f 69 64 29 29 3b 0a 23 65 6e 64 69  *)(void));.#endi
25a00 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 48 65 61  f.int sqlite3Hea
25a10 70 4e 65 61 72 6c 79 46 75 6c 6c 28 76 6f 69 64  pNearlyFull(void
25a20 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73 79 73  );../*.** On sys
25a30 74 65 6d 73 20 77 69 74 68 20 61 6d 70 6c 65 20  tems with ample 
25a40 73 74 61 63 6b 20 73 70 61 63 65 20 61 6e 64 20  stack space and 
25a50 74 68 61 74 20 73 75 70 70 6f 72 74 20 61 6c 6c  that support all
25a60 6f 63 61 28 29 2c 20 6d 61 6b 65 0a 2a 2a 20 75  oca(), make.** u
25a70 73 65 20 6f 66 20 61 6c 6c 6f 63 61 28 29 20 74  se of alloca() t
25a80 6f 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20 66  o obtain space f
25a90 6f 72 20 6c 61 72 67 65 20 61 75 74 6f 6d 61 74  or large automat
25aa0 69 63 20 6f 62 6a 65 63 74 73 2e 20 20 42 79 20  ic objects.  By 
25ab0 64 65 66 61 75 6c 74 2c 0a 2a 2a 20 6f 62 74 61  default,.** obta
25ac0 69 6e 20 73 70 61 63 65 20 66 72 6f 6d 20 6d 61  in space from ma
25ad0 6c 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68  lloc()..**.** Th
25ae0 65 20 61 6c 6c 6f 63 61 28 29 20 72 6f 75 74 69  e alloca() routi
25af0 6e 65 20 6e 65 76 65 72 20 72 65 74 75 72 6e 73  ne never returns
25b00 20 4e 55 4c 4c 2e 20 20 54 68 69 73 20 77 69 6c   NULL.  This wil
25b10 6c 20 63 61 75 73 65 20 63 6f 64 65 20 70 61 74  l cause code pat
25b20 68 73 0a 2a 2a 20 74 68 61 74 20 64 65 61 6c 20  hs.** that deal 
25b30 77 69 74 68 20 73 71 6c 69 74 65 33 53 74 61 63  with sqlite3Stac
25b40 6b 41 6c 6c 6f 63 28 29 20 66 61 69 6c 75 72 65  kAlloc() failure
25b50 73 20 74 6f 20 62 65 20 75 6e 72 65 61 63 68 61  s to be unreacha
25b60 62 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ble..*/.#ifdef S
25b70 51 4c 49 54 45 5f 55 53 45 5f 41 4c 4c 4f 43 41  QLITE_USE_ALLOCA
25b80 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
25b90 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44  3StackAllocRaw(D
25ba0 2c 4e 29 20 20 20 61 6c 6c 6f 63 61 28 4e 29 0a  ,N)   alloca(N).
25bb0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
25bc0 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44  StackAllocZero(D
25bd0 2c 4e 29 20 20 6d 65 6d 73 65 74 28 61 6c 6c 6f  ,N)  memset(allo
25be0 63 61 28 4e 29 2c 20 30 2c 20 4e 29 0a 23 20 64  ca(N), 0, N).# d
25bf0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
25c00 63 6b 46 72 65 65 28 44 2c 50 29 0a 23 65 6c 73  ckFree(D,P).#els
25c10 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
25c20 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28  e3StackAllocRaw(
25c30 44 2c 4e 29 20 20 20 73 71 6c 69 74 65 33 44 62  D,N)   sqlite3Db
25c40 4d 61 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 0a 23  MallocRaw(D,N).#
25c50 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
25c60 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c  tackAllocZero(D,
25c70 4e 29 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  N)  sqlite3DbMal
25c80 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a 23 20 64  locZero(D,N).# d
25c90 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
25ca0 63 6b 46 72 65 65 28 44 2c 50 29 20 20 20 20 20  ckFree(D,P)     
25cb0 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
25cc0 44 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  D,P).#endif../* 
25cd0 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 62 6f 74  Do not allow bot
25ce0 68 20 4d 45 4d 53 59 53 35 20 61 6e 64 20 4d 45  h MEMSYS5 and ME
25cf0 4d 53 59 53 33 20 74 6f 20 62 65 20 64 65 66 69  MSYS3 to be defi
25d00 6e 65 64 20 74 6f 67 65 74 68 65 72 2e 20 20 49  ned together.  I
25d10 66 20 74 68 65 79 0a 2a 2a 20 61 72 65 2c 20 64  f they.** are, d
25d20 69 73 61 62 6c 65 20 4d 45 4d 53 59 53 33 0a 2a  isable MEMSYS3.*
25d30 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
25d40 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 35 0a 63  ENABLE_MEMSYS5.c
25d50 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d  onst sqlite3_mem
25d60 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65  _methods *sqlite
25d70 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 35 28 76  3MemGetMemsys5(v
25d80 6f 69 64 29 3b 0a 23 75 6e 64 65 66 20 53 51 4c  oid);.#undef SQL
25d90 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59  ITE_ENABLE_MEMSY
25da0 53 33 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  S3.#endif.#ifdef
25db0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d   SQLITE_ENABLE_M
25dc0 45 4d 53 59 53 33 0a 63 6f 6e 73 74 20 73 71 6c  EMSYS3.const sql
25dd0 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73  ite3_mem_methods
25de0 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d   *sqlite3MemGetM
25df0 65 6d 73 79 73 33 28 76 6f 69 64 29 3b 0a 23 65  emsys3(void);.#e
25e00 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 53  ndif...#ifndef S
25e10 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54  QLITE_MUTEX_OMIT
25e20 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
25e30 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a  _methods const *
25e40 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74 4d 75  sqlite3DefaultMu
25e50 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c  tex(void);.  sql
25e60 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f  ite3_mutex_metho
25e70 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65  ds const *sqlite
25e80 33 4e 6f 6f 70 4d 75 74 65 78 28 76 6f 69 64 29  3NoopMutex(void)
25e90 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  ;.  sqlite3_mute
25ea0 78 20 2a 73 71 6c 69 74 65 33 4d 75 74 65 78 41  x *sqlite3MutexA
25eb0 6c 6c 6f 63 28 69 6e 74 29 3b 0a 20 20 69 6e 74  lloc(int);.  int
25ec0 20 73 71 6c 69 74 65 33 4d 75 74 65 78 49 6e 69   sqlite3MutexIni
25ed0 74 28 76 6f 69 64 29 3b 0a 20 20 69 6e 74 20 73  t(void);.  int s
25ee0 71 6c 69 74 65 33 4d 75 74 65 78 45 6e 64 28 76  qlite3MutexEnd(v
25ef0 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66  oid);.#endif.#if
25f00 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
25f10 5f 4d 55 54 45 58 5f 4f 4d 49 54 29 20 26 26 20  _MUTEX_OMIT) && 
25f20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
25f30 4d 55 54 45 58 5f 4e 4f 4f 50 29 0a 20 20 76 6f  MUTEX_NOOP).  vo
25f40 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 6f 72 79  id sqlite3Memory
25f50 42 61 72 72 69 65 72 28 76 6f 69 64 29 3b 0a 23  Barrier(void);.#
25f60 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
25f70 6c 69 74 65 33 4d 65 6d 6f 72 79 42 61 72 72 69  lite3MemoryBarri
25f80 65 72 28 29 0a 23 65 6e 64 69 66 0a 0a 73 71 6c  er().#endif..sql
25f90 69 74 65 33 5f 69 6e 74 36 34 20 73 71 6c 69 74  ite3_int64 sqlit
25fa0 65 33 53 74 61 74 75 73 56 61 6c 75 65 28 69 6e  e3StatusValue(in
25fb0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
25fc0 53 74 61 74 75 73 55 70 28 69 6e 74 2c 20 69 6e  StatusUp(int, in
25fd0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
25fe0 53 74 61 74 75 73 44 6f 77 6e 28 69 6e 74 2c 20  StatusDown(int, 
25ff0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
26000 65 33 53 74 61 74 75 73 48 69 67 68 77 61 74 65  e3StatusHighwate
26010 72 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74  r(int, int);.int
26020 20 73 71 6c 69 74 65 33 4c 6f 6f 6b 61 73 69 64   sqlite3Lookasid
26030 65 55 73 65 64 28 73 71 6c 69 74 65 33 2a 2c 69  eUsed(sqlite3*,i
26040 6e 74 2a 29 3b 0a 0a 2f 2a 20 41 63 63 65 73 73  nt*);../* Access
26050 20 74 6f 20 6d 75 74 65 78 65 73 20 75 73 65 64   to mutexes used
26060 20 62 79 20 73 71 6c 69 74 65 33 5f 73 74 61 74   by sqlite3_stat
26070 75 73 28 29 20 2a 2f 0a 73 71 6c 69 74 65 33 5f  us() */.sqlite3_
26080 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33 50 63  mutex *sqlite3Pc
26090 61 63 68 65 31 4d 75 74 65 78 28 76 6f 69 64 29  ache1Mutex(void)
260a0 3b 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20  ;.sqlite3_mutex 
260b0 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 4d 75  *sqlite3MallocMu
260c0 74 65 78 28 76 6f 69 64 29 3b 0a 0a 23 69 66 6e  tex(void);..#ifn
260d0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
260e0 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20  FLOATING_POINT. 
260f0 20 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4e 61   int sqlite3IsNa
26100 4e 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6c 73 65  N(double);.#else
26110 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
26120 33 49 73 4e 61 4e 28 58 29 20 20 30 0a 23 65 6e  3IsNaN(X)  0.#en
26130 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  dif../*.** An in
26140 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
26150 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
26160 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74  e holds informat
26170 69 6f 6e 20 61 62 6f 75 74 20 53 51 4c 0a 2a 2a  ion about SQL.**
26180 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 67 75 6d   functions argum
26190 65 6e 74 73 20 74 68 61 74 20 61 72 65 20 74 68  ents that are th
261a0 65 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 20  e parameters to 
261b0 74 68 65 20 70 72 69 6e 74 66 28 29 20 66 75 6e  the printf() fun
261c0 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ction..*/.struct
261d0 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73   PrintfArguments
261e0 20 7b 0a 20 20 69 6e 74 20 6e 41 72 67 3b 20 20   {.  int nArg;  
261f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
26200 20 54 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   Total number of
26210 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20   arguments */.  
26220 69 6e 74 20 6e 55 73 65 64 3b 20 20 20 20 20 20  int nUsed;      
26230 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
26240 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
26250 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20  used so far */. 
26260 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
26270 2a 61 70 41 72 67 3b 20 20 20 2f 2a 20 54 68 65  *apArg;   /* The
26280 20 61 72 67 75 6d 65 6e 74 20 76 61 6c 75 65 73   argument values
26290 20 2a 2f 0a 7d 3b 0a 0a 76 6f 69 64 20 73 71 6c   */.};..void sql
262a0 69 74 65 33 56 58 50 72 69 6e 74 66 28 53 74 72  ite3VXPrintf(Str
262b0 41 63 63 75 6d 2a 2c 20 63 6f 6e 73 74 20 63 68  Accum*, const ch
262c0 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 76  ar*, va_list);.v
262d0 6f 69 64 20 73 71 6c 69 74 65 33 58 50 72 69 6e  oid sqlite3XPrin
262e0 74 66 28 53 74 72 41 63 63 75 6d 2a 2c 20 63 6f  tf(StrAccum*, co
262f0 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
26300 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4d 50  .char *sqlite3MP
26310 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63  rintf(sqlite3*,c
26320 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
26330 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 56  ;.char *sqlite3V
26340 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a  MPrintf(sqlite3*
26350 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76 61  ,const char*, va
26360 5f 6c 69 73 74 29 3b 0a 23 69 66 20 64 65 66 69  _list);.#if defi
26370 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
26380 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  ) || defined(SQL
26390 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41 43  ITE_HAVE_OS_TRAC
263a0 45 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  E).  void sqlite
263b0 33 44 65 62 75 67 50 72 69 6e 74 66 28 63 6f 6e  3DebugPrintf(con
263c0 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
263d0 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e  #endif.#if defin
263e0 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a  ed(SQLITE_TEST).
263f0 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 54    void *sqlite3T
26400 65 73 74 54 65 78 74 54 6f 50 74 72 28 63 6f 6e  estTextToPtr(con
26410 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69  st char*);.#endi
26420 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  f..#if defined(S
26430 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 20 20 76  QLITE_DEBUG).  v
26440 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56  oid sqlite3TreeV
26450 69 65 77 45 78 70 72 28 54 72 65 65 56 69 65 77  iewExpr(TreeView
26460 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20  *, const Expr*, 
26470 75 38 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  u8);.  void sqli
26480 74 65 33 54 72 65 65 56 69 65 77 42 61 72 65 45  te3TreeViewBareE
26490 78 70 72 4c 69 73 74 28 54 72 65 65 56 69 65 77  xprList(TreeView
264a0 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 4c 69 73  *, const ExprLis
264b0 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  t*, const char*)
264c0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
264d0 54 72 65 65 56 69 65 77 45 78 70 72 4c 69 73 74  TreeViewExprList
264e0 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73  (TreeView*, cons
264f0 74 20 45 78 70 72 4c 69 73 74 2a 2c 20 75 38 2c  t ExprList*, u8,
26500 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20   const char*);. 
26510 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65   void sqlite3Tre
26520 65 56 69 65 77 53 65 6c 65 63 74 28 54 72 65 65  eViewSelect(Tree
26530 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 53 65 6c  View*, const Sel
26540 65 63 74 2a 2c 20 75 38 29 3b 0a 20 20 76 6f 69  ect*, u8);.  voi
26550 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65  d sqlite3TreeVie
26560 77 57 69 74 68 28 54 72 65 65 56 69 65 77 2a 2c  wWith(TreeView*,
26570 20 63 6f 6e 73 74 20 57 69 74 68 2a 2c 20 75 38   const With*, u8
26580 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 76 6f 69 64  );.#endif...void
26590 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
265a0 67 28 63 68 61 72 20 2a 2a 2c 20 73 71 6c 69 74  g(char **, sqlit
265b0 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  e3*, const char*
265c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
265d0 72 72 6f 72 4d 73 67 28 50 61 72 73 65 2a 2c 20  rrorMsg(Parse*, 
265e0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
265f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
26600 65 71 75 6f 74 65 28 63 68 61 72 2a 29 3b 0a 76  equote(char*);.v
26610 6f 69 64 20 73 71 6c 69 74 65 33 54 6f 6b 65 6e  oid sqlite3Token
26620 49 6e 69 74 28 54 6f 6b 65 6e 2a 2c 63 68 61 72  Init(Token*,char
26630 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b  *);.int sqlite3K
26640 65 79 77 6f 72 64 43 6f 64 65 28 63 6f 6e 73 74  eywordCode(const
26650 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c   unsigned char*,
26660 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
26670 65 33 52 75 6e 50 61 72 73 65 72 28 50 61 72 73  e3RunParser(Pars
26680 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e*, const char*,
26690 20 63 68 61 72 20 2a 2a 29 3b 0a 76 6f 69 64 20   char **);.void 
266a0 73 71 6c 69 74 65 33 46 69 6e 69 73 68 43 6f 64  sqlite3FinishCod
266b0 69 6e 67 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74  ing(Parse*);.int
266c0 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52   sqlite3GetTempR
266d0 65 67 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  eg(Parse*);.void
266e0 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54   sqlite3ReleaseT
266f0 65 6d 70 52 65 67 28 50 61 72 73 65 2a 2c 69 6e  empReg(Parse*,in
26700 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  t);.int sqlite3G
26710 65 74 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73  etTempRange(Pars
26720 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  e*,int);.void sq
26730 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70  lite3ReleaseTemp
26740 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74  Range(Parse*,int
26750 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
26760 74 65 33 43 6c 65 61 72 54 65 6d 70 52 65 67 43  te3ClearTempRegC
26770 61 63 68 65 28 50 61 72 73 65 2a 29 3b 0a 23 69  ache(Parse*);.#i
26780 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
26790 47 0a 69 6e 74 20 73 71 6c 69 74 65 33 4e 6f 54  G.int sqlite3NoT
267a0 65 6d 70 73 49 6e 52 61 6e 67 65 28 50 61 72 73  empsInRange(Pars
267b0 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 23 65 6e  e*,int,int);.#en
267c0 64 69 66 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  dif.Expr *sqlite
267d0 33 45 78 70 72 41 6c 6c 6f 63 28 73 71 6c 69 74  3ExprAlloc(sqlit
267e0 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 54 6f  e3*,int,const To
267f0 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 20  ken*,int);.Expr 
26800 2a 73 71 6c 69 74 65 33 45 78 70 72 28 73 71 6c  *sqlite3Expr(sql
26810 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  ite3*,int,const 
26820 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
26830 69 74 65 33 45 78 70 72 41 74 74 61 63 68 53 75  ite3ExprAttachSu
26840 62 74 72 65 65 73 28 73 71 6c 69 74 65 33 2a 2c  btrees(sqlite3*,
26850 45 78 70 72 2a 2c 45 78 70 72 2a 2c 45 78 70 72  Expr*,Expr*,Expr
26860 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
26870 33 50 45 78 70 72 28 50 61 72 73 65 2a 2c 20 69  3PExpr(Parse*, i
26880 6e 74 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a  nt, Expr*, Expr*
26890 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
268a0 45 78 70 72 41 64 64 53 65 6c 65 63 74 28 50 61  ExprAddSelect(Pa
268b0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 53 65 6c  rse*, Expr*, Sel
268c0 65 63 74 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ect*);.Expr *sql
268d0 69 74 65 33 45 78 70 72 41 6e 64 28 73 71 6c 69  ite3ExprAnd(sqli
268e0 74 65 33 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72  te3*,Expr*, Expr
268f0 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
26900 33 45 78 70 72 46 75 6e 63 74 69 6f 6e 28 50 61  3ExprFunction(Pa
26910 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20  rse*,ExprList*, 
26920 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
26930 6c 69 74 65 33 45 78 70 72 41 73 73 69 67 6e 56  lite3ExprAssignV
26940 61 72 4e 75 6d 62 65 72 28 50 61 72 73 65 2a 2c  arNumber(Parse*,
26950 20 45 78 70 72 2a 2c 20 75 33 32 29 3b 0a 76 6f   Expr*, u32);.vo
26960 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 44 65  id sqlite3ExprDe
26970 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45  lete(sqlite3*, E
26980 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20  xpr*);.ExprList 
26990 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74  *sqlite3ExprList
269a0 41 70 70 65 6e 64 28 50 61 72 73 65 2a 2c 45 78  Append(Parse*,Ex
269b0 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a  prList*,Expr*);.
269c0 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65  ExprList *sqlite
269d0 33 45 78 70 72 4c 69 73 74 41 70 70 65 6e 64 56  3ExprListAppendV
269e0 65 63 74 6f 72 28 50 61 72 73 65 2a 2c 45 78 70  ector(Parse*,Exp
269f0 72 4c 69 73 74 2a 2c 49 64 4c 69 73 74 2a 2c 45  rList*,IdList*,E
26a00 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
26a10 74 65 33 45 78 70 72 4c 69 73 74 53 65 74 53 6f  te3ExprListSetSo
26a20 72 74 4f 72 64 65 72 28 45 78 70 72 4c 69 73 74  rtOrder(ExprList
26a30 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
26a40 69 74 65 33 45 78 70 72 4c 69 73 74 53 65 74 4e  ite3ExprListSetN
26a50 61 6d 65 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  ame(Parse*,ExprL
26a60 69 73 74 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29  ist*,Token*,int)
26a70 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
26a80 70 72 4c 69 73 74 53 65 74 53 70 61 6e 28 50 61  prListSetSpan(Pa
26a90 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45  rse*,ExprList*,E
26aa0 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20  xprSpan*);.void 
26ab0 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44  sqlite3ExprListD
26ac0 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
26ad0 45 78 70 72 4c 69 73 74 2a 29 3b 0a 75 33 32 20  ExprList*);.u32 
26ae0 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 46  sqlite3ExprListF
26af0 6c 61 67 73 28 63 6f 6e 73 74 20 45 78 70 72 4c  lags(const ExprL
26b00 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
26b10 65 33 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c  e3Init(sqlite3*,
26b20 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73 71   char**);.int sq
26b30 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63  lite3InitCallbac
26b40 6b 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 68  k(void*, int, ch
26b50 61 72 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 76  ar**, char**);.v
26b60 6f 69 64 20 73 71 6c 69 74 65 33 50 72 61 67 6d  oid sqlite3Pragm
26b70 61 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  a(Parse*,Token*,
26b80 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e  Token*,Token*,in
26b90 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  t);.#ifndef SQLI
26ba0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
26bb0 41 42 4c 45 0a 4d 6f 64 75 6c 65 20 2a 73 71 6c  ABLE.Module *sql
26bc0 69 74 65 33 50 72 61 67 6d 61 56 74 61 62 52 65  ite3PragmaVtabRe
26bd0 67 69 73 74 65 72 28 73 71 6c 69 74 65 33 2a 2c  gister(sqlite3*,
26be0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d  const char *zNam
26bf0 65 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  e);.#endif.void 
26c00 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53  sqlite3ResetAllS
26c10 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69  chemasOfConnecti
26c20 6f 6e 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  on(sqlite3*);.vo
26c30 69 64 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f  id sqlite3ResetO
26c40 6e 65 53 63 68 65 6d 61 28 73 71 6c 69 74 65 33  neSchema(sqlite3
26c50 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
26c60 69 74 65 33 43 6f 6c 6c 61 70 73 65 44 61 74 61  ite3CollapseData
26c70 62 61 73 65 41 72 72 61 79 28 73 71 6c 69 74 65  baseArray(sqlite
26c80 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
26c90 33 43 6f 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43  3CommitInternalC
26ca0 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33 2a 29  hanges(sqlite3*)
26cb0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
26cc0 6c 65 74 65 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28  leteColumnNames(
26cd0 73 71 6c 69 74 65 33 2a 2c 54 61 62 6c 65 2a 29  sqlite3*,Table*)
26ce0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 6c  ;.int sqlite3Col
26cf0 75 6d 6e 73 46 72 6f 6d 45 78 70 72 4c 69 73 74  umnsFromExprList
26d00 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
26d10 2a 2c 69 31 36 2a 2c 43 6f 6c 75 6d 6e 2a 2a 29  *,i16*,Column**)
26d20 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
26d30 6c 65 63 74 41 64 64 43 6f 6c 75 6d 6e 54 79 70  lectAddColumnTyp
26d40 65 41 6e 64 43 6f 6c 6c 61 74 69 6f 6e 28 50 61  eAndCollation(Pa
26d50 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 53 65 6c 65  rse*,Table*,Sele
26d60 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c  ct*);.Table *sql
26d70 69 74 65 33 52 65 73 75 6c 74 53 65 74 4f 66 53  ite3ResultSetOfS
26d80 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 53 65 6c  elect(Parse*,Sel
26d90 65 63 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ect*);.void sqli
26da0 74 65 33 4f 70 65 6e 4d 61 73 74 65 72 54 61 62  te3OpenMasterTab
26db0 6c 65 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 29  le(Parse *, int)
26dc0 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33  ;.Index *sqlite3
26dd0 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28  PrimaryKeyIndex(
26de0 54 61 62 6c 65 2a 29 3b 0a 69 31 36 20 73 71 6c  Table*);.i16 sql
26df0 69 74 65 33 43 6f 6c 75 6d 6e 4f 66 49 6e 64 65  ite3ColumnOfInde
26e00 78 28 49 6e 64 65 78 2a 2c 20 69 31 36 29 3b 0a  x(Index*, i16);.
26e10 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 72  void sqlite3Star
26e20 74 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f  tTable(Parse*,To
26e30 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c  ken*,Token*,int,
26e40 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 23 69  int,int,int);.#i
26e50 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
26e60 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 0a 20  HIDDEN_COLUMNS. 
26e70 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c   void sqlite3Col
26e80 75 6d 6e 50 72 6f 70 65 72 74 69 65 73 46 72 6f  umnPropertiesFro
26e90 6d 4e 61 6d 65 28 54 61 62 6c 65 2a 2c 20 43 6f  mName(Table*, Co
26ea0 6c 75 6d 6e 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  lumn*);.#else.# 
26eb0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
26ec0 6c 75 6d 6e 50 72 6f 70 65 72 74 69 65 73 46 72  lumnPropertiesFr
26ed0 6f 6d 4e 61 6d 65 28 54 2c 43 29 20 2f 2a 20 6e  omName(T,C) /* n
26ee0 6f 2d 6f 70 20 2a 2f 0a 23 65 6e 64 69 66 0a 76  o-op */.#endif.v
26ef0 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f  oid sqlite3AddCo
26f00 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 54 6f 6b 65  lumn(Parse*,Toke
26f10 6e 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  n*,Token*);.void
26f20 20 73 71 6c 69 74 65 33 41 64 64 4e 6f 74 4e 75   sqlite3AddNotNu
26f30 6c 6c 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  ll(Parse*, int);
26f40 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
26f50 50 72 69 6d 61 72 79 4b 65 79 28 50 61 72 73 65  PrimaryKey(Parse
26f60 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  *, ExprList*, in
26f70 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
26f80 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 68 65  id sqlite3AddChe
26f90 63 6b 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72  ckConstraint(Par
26fa0 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  se*, Expr*);.voi
26fb0 64 20 73 71 6c 69 74 65 33 41 64 64 44 65 66 61  d sqlite3AddDefa
26fc0 75 6c 74 56 61 6c 75 65 28 50 61 72 73 65 2a 2c  ultValue(Parse*,
26fd0 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64  ExprSpan*);.void
26fe0 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 6c 61   sqlite3AddColla
26ff0 74 65 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54  teType(Parse*, T
27000 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
27010 69 74 65 33 45 6e 64 54 61 62 6c 65 28 50 61 72  ite3EndTable(Par
27020 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  se*,Token*,Token
27030 2a 2c 75 38 2c 53 65 6c 65 63 74 2a 29 3b 0a 69  *,u8,Select*);.i
27040 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65 55  nt sqlite3ParseU
27050 72 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  ri(const char*,c
27060 6f 6e 73 74 20 63 68 61 72 2a 2c 75 6e 73 69 67  onst char*,unsig
27070 6e 65 64 20 69 6e 74 2a 2c 0a 20 20 20 20 20 20  ned int*,.      
27080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71                sq
27090 6c 69 74 65 33 5f 76 66 73 2a 2a 2c 63 68 61 72  lite3_vfs**,char
270a0 2a 2a 2c 63 68 61 72 20 2a 2a 29 3b 0a 42 74 72  **,char **);.Btr
270b0 65 65 20 2a 73 71 6c 69 74 65 33 44 62 4e 61 6d  ee *sqlite3DbNam
270c0 65 54 6f 42 74 72 65 65 28 73 71 6c 69 74 65 33  eToBtree(sqlite3
270d0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
270e0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55  .#ifdef SQLITE_U
270f0 4e 54 45 53 54 41 42 4c 45 0a 23 20 64 65 66 69  NTESTABLE.# defi
27100 6e 65 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53  ne sqlite3FaultS
27110 69 6d 28 58 29 20 53 51 4c 49 54 45 5f 4f 4b 0a  im(X) SQLITE_OK.
27120 23 65 6c 73 65 0a 20 20 69 6e 74 20 73 71 6c 69  #else.  int sqli
27130 74 65 33 46 61 75 6c 74 53 69 6d 28 69 6e 74 29  te3FaultSim(int)
27140 3b 0a 23 65 6e 64 69 66 0a 0a 42 69 74 76 65 63  ;.#endif..Bitvec
27150 20 2a 73 71 6c 69 74 65 33 42 69 74 76 65 63 43   *sqlite3BitvecC
27160 72 65 61 74 65 28 75 33 32 29 3b 0a 69 6e 74 20  reate(u32);.int 
27170 73 71 6c 69 74 65 33 42 69 74 76 65 63 54 65 73  sqlite3BitvecTes
27180 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b  t(Bitvec*, u32);
27190 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76  .int sqlite3Bitv
271a0 65 63 54 65 73 74 4e 6f 74 4e 75 6c 6c 28 42 69  ecTestNotNull(Bi
271b0 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74  tvec*, u32);.int
271c0 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 53 65   sqlite3BitvecSe
271d0 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b  t(Bitvec*, u32);
271e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74  .void sqlite3Bit
271f0 76 65 63 43 6c 65 61 72 28 42 69 74 76 65 63 2a  vecClear(Bitvec*
27200 2c 20 75 33 32 2c 20 76 6f 69 64 2a 29 3b 0a 76  , u32, void*);.v
27210 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74 76 65  oid sqlite3Bitve
27220 63 44 65 73 74 72 6f 79 28 42 69 74 76 65 63 2a  cDestroy(Bitvec*
27230 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 42 69  );.u32 sqlite3Bi
27240 74 76 65 63 53 69 7a 65 28 42 69 74 76 65 63 2a  tvecSize(Bitvec*
27250 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
27260 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 69 6e 74  E_UNTESTABLE.int
27270 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 42 75   sqlite3BitvecBu
27280 69 6c 74 69 6e 54 65 73 74 28 69 6e 74 2c 69 6e  iltinTest(int,in
27290 74 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 52 6f 77  t*);.#endif..Row
272a0 53 65 74 20 2a 73 71 6c 69 74 65 33 52 6f 77 53  Set *sqlite3RowS
272b0 65 74 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c  etInit(sqlite3*,
272c0 20 76 6f 69 64 2a 2c 20 75 6e 73 69 67 6e 65 64   void*, unsigned
272d0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
272e0 74 65 33 52 6f 77 53 65 74 43 6c 65 61 72 28 52  te3RowSetClear(R
272f0 6f 77 53 65 74 2a 29 3b 0a 76 6f 69 64 20 73 71  owSet*);.void sq
27300 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72  lite3RowSetInser
27310 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 29 3b  t(RowSet*, i64);
27320 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53  .int sqlite3RowS
27330 65 74 54 65 73 74 28 52 6f 77 53 65 74 2a 2c 20  etTest(RowSet*, 
27340 69 6e 74 20 69 42 61 74 63 68 2c 20 69 36 34 29  int iBatch, i64)
27350 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77  ;.int sqlite3Row
27360 53 65 74 4e 65 78 74 28 52 6f 77 53 65 74 2a 2c  SetNext(RowSet*,
27370 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64 20 73 71   i64*);..void sq
27380 6c 69 74 65 33 43 72 65 61 74 65 56 69 65 77 28  lite3CreateView(
27390 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
273a0 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72  ken*,Token*,Expr
273b0 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e  List*,Select*,in
273c0 74 2c 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65  t,int);..#if !de
273d0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
273e0 54 5f 56 49 45 57 29 20 7c 7c 20 21 64 65 66 69  T_VIEW) || !defi
273f0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
27400 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 20 20  VIRTUALTABLE).  
27410 69 6e 74 20 73 71 6c 69 74 65 33 56 69 65 77 47  int sqlite3ViewG
27420 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50 61  etColumnNames(Pa
27430 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65  rse*,Table*);.#e
27440 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
27450 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d  ite3ViewGetColum
27460 6e 4e 61 6d 65 73 28 41 2c 42 29 20 30 0a 23 65  nNames(A,B) 0.#e
27470 6e 64 69 66 0a 0a 23 69 66 20 53 51 4c 49 54 45  ndif..#if SQLITE
27480 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30  _MAX_ATTACHED>30
27490 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 44 62  .  int sqlite3Db
274a0 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 79 44 62 4d  MaskAllZero(yDbM
274b0 61 73 6b 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69  ask);.#endif.voi
274c0 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 61 62  d sqlite3DropTab
274d0 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  le(Parse*, SrcLi
274e0 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  st*, int, int);.
274f0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65  void sqlite3Code
27500 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a  DropTable(Parse*
27510 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
27520 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
27530 33 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c  3DeleteTable(sql
27540 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  ite3*, Table*);.
27550 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
27560 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e  MIT_AUTOINCREMEN
27570 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  T.  void sqlite3
27580 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67  AutoincrementBeg
27590 69 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  in(Parse *pParse
275a0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
275b0 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e  3AutoincrementEn
275c0 64 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29  d(Parse *pParse)
275d0 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
275e0 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72   sqlite3Autoincr
275f0 65 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a 23 20  ementBegin(X).# 
27600 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
27610 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 58  toincrementEnd(X
27620 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ).#endif.void sq
27630 6c 69 74 65 33 49 6e 73 65 72 74 28 50 61 72 73  lite3Insert(Pars
27640 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 53 65  e*, SrcList*, Se
27650 6c 65 63 74 2a 2c 20 49 64 4c 69 73 74 2a 2c 20  lect*, IdList*, 
27660 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  int);.void *sqli
27670 74 65 33 41 72 72 61 79 41 6c 6c 6f 63 61 74 65  te3ArrayAllocate
27680 28 73 71 6c 69 74 65 33 2a 2c 76 6f 69 64 2a 2c  (sqlite3*,void*,
27690 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a  int,int*,int*);.
276a0 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49  IdList *sqlite3I
276b0 64 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69  dListAppend(sqli
276c0 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 54  te3*, IdList*, T
276d0 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
276e0 74 65 33 49 64 4c 69 73 74 49 6e 64 65 78 28 49  te3IdListIndex(I
276f0 64 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61  dList*,const cha
27700 72 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71  r*);.SrcList *sq
27710 6c 69 74 65 33 53 72 63 4c 69 73 74 45 6e 6c 61  lite3SrcListEnla
27720 72 67 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72  rge(sqlite3*, Sr
27730 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74  cList*, int, int
27740 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69  );.SrcList *sqli
27750 74 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64  te3SrcListAppend
27760 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69  (sqlite3*, SrcLi
27770 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  st*, Token*, Tok
27780 65 6e 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73  en*);.SrcList *s
27790 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70 70  qlite3SrcListApp
277a0 65 6e 64 46 72 6f 6d 54 65 72 6d 28 50 61 72 73  endFromTerm(Pars
277b0 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f  e*, SrcList*, To
277c0 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20  ken*, Token*,.  
277d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
277e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
277f0 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65      Token*, Sele
27800 63 74 2a 2c 20 45 78 70 72 2a 2c 20 49 64 4c 69  ct*, Expr*, IdLi
27810 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
27820 65 33 53 72 63 4c 69 73 74 49 6e 64 65 78 65 64  e3SrcListIndexed
27830 42 79 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c  By(Parse *, SrcL
27840 69 73 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b  ist *, Token *);
27850 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63  .void sqlite3Src
27860 4c 69 73 74 46 75 6e 63 41 72 67 73 28 50 61 72  ListFuncArgs(Par
27870 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45  se*, SrcList*, E
27880 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
27890 71 6c 69 74 65 33 49 6e 64 65 78 65 64 42 79 4c  qlite3IndexedByL
278a0 6f 6f 6b 75 70 28 50 61 72 73 65 20 2a 2c 20 73  ookup(Parse *, s
278b0 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74  truct SrcList_it
278c0 65 6d 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  em *);.void sqli
278d0 74 65 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a  te3SrcListShiftJ
278e0 6f 69 6e 54 79 70 65 28 53 72 63 4c 69 73 74 2a  oinType(SrcList*
278f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
27900 72 63 4c 69 73 74 41 73 73 69 67 6e 43 75 72 73  rcListAssignCurs
27910 6f 72 73 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ors(Parse*, SrcL
27920 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
27930 74 65 33 49 64 4c 69 73 74 44 65 6c 65 74 65 28  te3IdListDelete(
27940 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73 74  sqlite3*, IdList
27950 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
27960 53 72 63 4c 69 73 74 44 65 6c 65 74 65 28 73 71  SrcListDelete(sq
27970 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a  lite3*, SrcList*
27980 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65  );.Index *sqlite
27990 33 41 6c 6c 6f 63 61 74 65 49 6e 64 65 78 4f 62  3AllocateIndexOb
279a0 6a 65 63 74 28 73 71 6c 69 74 65 33 2a 2c 69 31  ject(sqlite3*,i1
279b0 36 2c 69 6e 74 2c 63 68 61 72 2a 2a 29 3b 0a 76  6,int,char**);.v
279c0 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65 61 74  oid sqlite3Creat
279d0 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 6f  eIndex(Parse*,To
279e0 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63 4c  ken*,Token*,SrcL
279f0 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69  ist*,ExprList*,i
27a00 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20  nt,Token*,.     
27a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27a20 20 20 20 20 20 45 78 70 72 2a 2c 20 69 6e 74 2c       Expr*, int,
27a30 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20   int, u8);.void 
27a40 73 71 6c 69 74 65 33 44 72 6f 70 49 6e 64 65 78  sqlite3DropIndex
27a50 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
27a60 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
27a70 69 74 65 33 53 65 6c 65 63 74 28 50 61 72 73 65  ite3Select(Parse
27a80 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53 65 6c 65  *, Select*, Sele
27a90 63 74 44 65 73 74 2a 29 3b 0a 53 65 6c 65 63 74  ctDest*);.Select
27aa0 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74 4e   *sqlite3SelectN
27ab0 65 77 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  ew(Parse*,ExprLi
27ac0 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70  st*,SrcList*,Exp
27ad0 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 0a 20 20  r*,ExprList*,.  
27ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27af0 20 20 20 20 20 20 20 45 78 70 72 2a 2c 45 78 70         Expr*,Exp
27b00 72 4c 69 73 74 2a 2c 75 33 32 2c 45 78 70 72 2a  rList*,u32,Expr*
27b10 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71  ,Expr*);.void sq
27b20 6c 69 74 65 33 53 65 6c 65 63 74 44 65 6c 65 74  lite3SelectDelet
27b30 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 65 6c 65  e(sqlite3*, Sele
27b40 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c  ct*);.Table *sql
27b50 69 74 65 33 53 72 63 4c 69 73 74 4c 6f 6f 6b 75  ite3SrcListLooku
27b60 70 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  p(Parse*, SrcLis
27b70 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
27b80 49 73 52 65 61 64 4f 6e 6c 79 28 50 61 72 73 65  IsReadOnly(Parse
27b90 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b  *, Table*, int);
27ba0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65  .void sqlite3Ope
27bb0 6e 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 69  nTable(Parse*, i
27bc0 6e 74 20 69 43 75 72 2c 20 69 6e 74 20 69 44 62  nt iCur, int iDb
27bd0 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a  , Table*, int);.
27be0 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
27bf0 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45  TE_ENABLE_UPDATE
27c00 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 29 20 26  _DELETE_LIMIT) &
27c10 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
27c20 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52 59 29  E_OMIT_SUBQUERY)
27c30 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 4c 69  .Expr *sqlite3Li
27c40 6d 69 74 57 68 65 72 65 28 50 61 72 73 65 2a 2c  mitWhere(Parse*,
27c50 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45  SrcList*,Expr*,E
27c60 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45  xprList*,Expr*,E
27c70 78 70 72 2a 2c 63 68 61 72 2a 29 3b 0a 23 65 6e  xpr*,char*);.#en
27c80 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
27c90 44 65 6c 65 74 65 46 72 6f 6d 28 50 61 72 73 65  DeleteFrom(Parse
27ca0 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70  *, SrcList*, Exp
27cb0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
27cc0 33 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c 20  3Update(Parse*, 
27cd0 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69  SrcList*, ExprLi
27ce0 73 74 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  st*, Expr*, int)
27cf0 3b 0a 57 68 65 72 65 49 6e 66 6f 20 2a 73 71 6c  ;.WhereInfo *sql
27d00 69 74 65 33 57 68 65 72 65 42 65 67 69 6e 28 50  ite3WhereBegin(P
27d10 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45  arse*,SrcList*,E
27d20 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45  xpr*,ExprList*,E
27d30 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 69 6e 74  xprList*,u16,int
27d40 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57  );.void sqlite3W
27d50 68 65 72 65 45 6e 64 28 57 68 65 72 65 49 6e 66  hereEnd(WhereInf
27d60 6f 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69  o*);.LogEst sqli
27d70 74 65 33 57 68 65 72 65 4f 75 74 70 75 74 52 6f  te3WhereOutputRo
27d80 77 43 6f 75 6e 74 28 57 68 65 72 65 49 6e 66 6f  wCount(WhereInfo
27d90 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
27da0 68 65 72 65 49 73 44 69 73 74 69 6e 63 74 28 57  hereIsDistinct(W
27db0 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
27dc0 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 4f 72  sqlite3WhereIsOr
27dd0 64 65 72 65 64 28 57 68 65 72 65 49 6e 66 6f 2a  dered(WhereInfo*
27de0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
27df0 65 72 65 4f 72 64 65 72 65 64 49 6e 6e 65 72 4c  ereOrderedInnerL
27e00 6f 6f 70 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  oop(WhereInfo*);
27e10 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
27e20 65 49 73 53 6f 72 74 65 64 28 57 68 65 72 65 49  eIsSorted(WhereI
27e30 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
27e40 65 33 57 68 65 72 65 43 6f 6e 74 69 6e 75 65 4c  e3WhereContinueL
27e50 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29  abel(WhereInfo*)
27e60 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
27e70 72 65 42 72 65 61 6b 4c 61 62 65 6c 28 57 68 65  reBreakLabel(Whe
27e80 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
27e90 6c 69 74 65 33 57 68 65 72 65 4f 6b 4f 6e 65 50  lite3WhereOkOneP
27ea0 61 73 73 28 57 68 65 72 65 49 6e 66 6f 2a 2c 20  ass(WhereInfo*, 
27eb0 69 6e 74 2a 29 3b 0a 23 64 65 66 69 6e 65 20 4f  int*);.#define O
27ec0 4e 45 50 41 53 53 5f 4f 46 46 20 20 20 20 20 20  NEPASS_OFF      
27ed0 30 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20  0        /* Use 
27ee0 6f 66 20 4f 4e 45 50 41 53 53 20 6e 6f 74 20 61  of ONEPASS not a
27ef0 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64 65 66 69 6e  llowed */.#defin
27f00 65 20 4f 4e 45 50 41 53 53 5f 53 49 4e 47 4c 45  e ONEPASS_SINGLE
27f10 20 20 20 31 20 20 20 20 20 20 20 20 2f 2a 20 4f     1        /* O
27f20 4e 45 50 41 53 53 20 76 61 6c 69 64 20 66 6f 72  NEPASS valid for
27f30 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 75 70   a single row up
27f40 64 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  date */.#define 
27f50 4f 4e 45 50 41 53 53 5f 4d 55 4c 54 49 20 20 20  ONEPASS_MULTI   
27f60 20 32 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 45   2        /* ONE
27f70 50 41 53 53 20 69 73 20 76 61 6c 69 64 20 66 6f  PASS is valid fo
27f80 72 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20  r multiple rows 
27f90 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  */.void sqlite3E
27fa0 78 70 72 43 6f 64 65 4c 6f 61 64 49 6e 64 65 78  xprCodeLoadIndex
27fb0 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 49  Column(Parse*, I
27fc0 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  ndex*, int, int,
27fd0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
27fe0 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c  e3ExprCodeGetCol
27ff0 75 6d 6e 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  umn(Parse*, Tabl
28000 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
28010 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c  t, u8);.void sql
28020 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43  ite3ExprCodeGetC
28030 6f 6c 75 6d 6e 54 6f 52 65 67 28 50 61 72 73 65  olumnToReg(Parse
28040 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
28050 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
28060 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47  sqlite3ExprCodeG
28070 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28  etColumnOfTable(
28080 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  Vdbe*, Table*, i
28090 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
280a0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
280b0 6f 64 65 4d 6f 76 65 28 50 61 72 73 65 2a 2c 20  odeMove(Parse*, 
280c0 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
280d0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
280e0 43 61 63 68 65 53 74 6f 72 65 28 50 61 72 73 65  CacheStore(Parse
280f0 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
28100 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
28110 78 70 72 43 61 63 68 65 50 75 73 68 28 50 61 72  xprCachePush(Par
28120 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
28130 65 33 45 78 70 72 43 61 63 68 65 50 6f 70 28 50  e3ExprCachePop(P
28140 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
28150 69 74 65 33 45 78 70 72 43 61 63 68 65 52 65 6d  ite3ExprCacheRem
28160 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  ove(Parse*, int,
28170 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
28180 74 65 33 45 78 70 72 43 61 63 68 65 43 6c 65 61  te3ExprCacheClea
28190 72 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  r(Parse*);.void 
281a0 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65  sqlite3ExprCache
281b0 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28 50  AffinityChange(P
281c0 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  arse*, int, int)
281d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
281e0 70 72 43 6f 64 65 28 50 61 72 73 65 2a 2c 20 45  prCode(Parse*, E
281f0 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  xpr*, int);.void
28200 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
28210 43 6f 70 79 28 50 61 72 73 65 2a 2c 20 45 78 70  Copy(Parse*, Exp
28220 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  r*, int);.void s
28230 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 46 61  qlite3ExprCodeFa
28240 63 74 6f 72 61 62 6c 65 28 50 61 72 73 65 2a 2c  ctorable(Parse*,
28250 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   Expr*, int);.in
28260 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  t sqlite3ExprCod
28270 65 41 74 49 6e 69 74 28 50 61 72 73 65 2a 2c 20  eAtInit(Parse*, 
28280 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  Expr*, int);.int
28290 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
282a0 54 65 6d 70 28 50 61 72 73 65 2a 2c 20 45 78 70  Temp(Parse*, Exp
282b0 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73  r*, int*);.int s
282c0 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54 61  qlite3ExprCodeTa
282d0 72 67 65 74 28 50 61 72 73 65 2a 2c 20 45 78 70  rget(Parse*, Exp
282e0 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  r*, int);.void s
282f0 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 41 6e  qlite3ExprCodeAn
28300 64 43 61 63 68 65 28 50 61 72 73 65 2a 2c 20 45  dCache(Parse*, E
28310 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  xpr*, int);.int 
28320 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 45  sqlite3ExprCodeE
28330 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 20  xprList(Parse*, 
28340 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20  ExprList*, int, 
28350 69 6e 74 2c 20 75 38 29 3b 0a 23 64 65 66 69 6e  int, u8);.#defin
28360 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 44 55  e SQLITE_ECEL_DU
28370 50 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20  P      0x01  /* 
28380 44 65 65 70 2c 20 6e 6f 74 20 73 68 61 6c 6c 6f  Deep, not shallo
28390 77 20 63 6f 70 69 65 73 20 2a 2f 0a 23 64 65 66  w copies */.#def
283a0 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f  ine SQLITE_ECEL_
283b0 46 41 43 54 4f 52 20 20 20 30 78 30 32 20 20 2f  FACTOR   0x02  /
283c0 2a 20 46 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e  * Factor out con
283d0 73 74 61 6e 74 20 74 65 72 6d 73 20 2a 2f 0a 23  stant terms */.#
283e0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43  define SQLITE_EC
283f0 45 4c 5f 52 45 46 20 20 20 20 20 20 30 78 30 34  EL_REF      0x04
28400 20 20 2f 2a 20 55 73 65 20 45 78 70 72 4c 69 73    /* Use ExprLis
28410 74 2e 75 2e 78 2e 69 4f 72 64 65 72 42 79 43 6f  t.u.x.iOrderByCo
28420 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  l */.#define SQL
28430 49 54 45 5f 45 43 45 4c 5f 4f 4d 49 54 52 45 46  ITE_ECEL_OMITREF
28440 20 20 30 78 30 38 20 20 2f 2a 20 4f 6d 69 74 20    0x08  /* Omit 
28450 69 66 20 45 78 70 72 4c 69 73 74 2e 75 2e 78 2e  if ExprList.u.x.
28460 69 4f 72 64 65 72 42 79 43 6f 6c 20 2a 2f 0a 76  iOrderByCol */.v
28470 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 49  oid sqlite3ExprI
28480 66 54 72 75 65 28 50 61 72 73 65 2a 2c 20 45 78  fTrue(Parse*, Ex
28490 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  pr*, int, int);.
284a0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
284b0 49 66 46 61 6c 73 65 28 50 61 72 73 65 2a 2c 20  IfFalse(Parse*, 
284c0 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  Expr*, int, int)
284d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
284e0 70 72 49 66 46 61 6c 73 65 44 75 70 28 50 61 72  prIfFalseDup(Par
284f0 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c  se*, Expr*, int,
28500 20 69 6e 74 29 3b 0a 54 61 62 6c 65 20 2a 73 71   int);.Table *sq
28510 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 73  lite3FindTable(s
28520 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
28530 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
28540 29 3b 0a 23 64 65 66 69 6e 65 20 4c 4f 43 41 54  );.#define LOCAT
28550 45 5f 56 49 45 57 20 20 20 20 30 78 30 31 0a 23  E_VIEW    0x01.#
28560 64 65 66 69 6e 65 20 4c 4f 43 41 54 45 5f 4e 4f  define LOCATE_NO
28570 45 52 52 20 20 20 30 78 30 32 0a 54 61 62 6c 65  ERR   0x02.Table
28580 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54   *sqlite3LocateT
28590 61 62 6c 65 28 50 61 72 73 65 2a 2c 75 33 32 20  able(Parse*,u32 
285a0 66 6c 61 67 73 2c 63 6f 6e 73 74 20 63 68 61 72  flags,const char
285b0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
285c0 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c  .Table *sqlite3L
285d0 6f 63 61 74 65 54 61 62 6c 65 49 74 65 6d 28 50  ocateTableItem(P
285e0 61 72 73 65 2a 2c 75 33 32 20 66 6c 61 67 73 2c  arse*,u32 flags,
285f0 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69  struct SrcList_i
28600 74 65 6d 20 2a 29 3b 0a 49 6e 64 65 78 20 2a 73  tem *);.Index *s
28610 71 6c 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28  qlite3FindIndex(
28620 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
28630 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
28640 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
28650 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54  UnlinkAndDeleteT
28660 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 69 6e  able(sqlite3*,in
28670 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  t,const char*);.
28680 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69  void sqlite3Unli
28690 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78  nkAndDeleteIndex
286a0 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f  (sqlite3*,int,co
286b0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
286c0 20 73 71 6c 69 74 65 33 56 61 63 75 75 6d 28 50   sqlite3Vacuum(P
286d0 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 69  arse*,Token*);.i
286e0 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63  nt sqlite3RunVac
286f0 75 75 6d 28 63 68 61 72 2a 2a 2c 20 73 71 6c 69  uum(char**, sqli
28700 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72  te3*, int);.char
28710 20 2a 73 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f   *sqlite3NameFro
28720 6d 54 6f 6b 65 6e 28 73 71 6c 69 74 65 33 2a 2c  mToken(sqlite3*,
28730 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
28740 6c 69 74 65 33 45 78 70 72 43 6f 6d 70 61 72 65  lite3ExprCompare
28750 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 20 45  (Parse*,Expr*, E
28760 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  xpr*, int);.int 
28770 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6d 70 61  sqlite3ExprCompa
28780 72 65 53 6b 69 70 28 45 78 70 72 2a 2c 20 45 78  reSkip(Expr*, Ex
28790 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  pr*, int);.int s
287a0 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43 6f  qlite3ExprListCo
287b0 6d 70 61 72 65 28 45 78 70 72 4c 69 73 74 2a 2c  mpare(ExprList*,
287c0 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29   ExprList*, int)
287d0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
287e0 72 49 6d 70 6c 69 65 73 45 78 70 72 28 50 61 72  rImpliesExpr(Par
287f0 73 65 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a  se*,Expr*, Expr*
28800 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
28810 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41  ite3ExprAnalyzeA
28820 67 67 72 65 67 61 74 65 73 28 4e 61 6d 65 43 6f  ggregates(NameCo
28830 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a  ntext*, Expr*);.
28840 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
28850 41 6e 61 6c 79 7a 65 41 67 67 4c 69 73 74 28 4e  AnalyzeAggList(N
28860 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 45 78 70 72  ameContext*,Expr
28870 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
28880 74 65 33 45 78 70 72 43 6f 76 65 72 65 64 42 79  te3ExprCoveredBy
28890 49 6e 64 65 78 28 45 78 70 72 2a 2c 20 69 6e 74  Index(Expr*, int
288a0 20 69 43 75 72 2c 20 49 6e 64 65 78 20 2a 70 49   iCur, Index *pI
288b0 64 78 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  dx);.int sqlite3
288c0 46 75 6e 63 74 69 6f 6e 55 73 65 73 54 68 69 73  FunctionUsesThis
288d0 53 72 63 28 45 78 70 72 2a 2c 20 53 72 63 4c 69  Src(Expr*, SrcLi
288e0 73 74 2a 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69  st*);.Vdbe *sqli
288f0 74 65 33 47 65 74 56 64 62 65 28 50 61 72 73 65  te3GetVdbe(Parse
28900 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  *);.#ifndef SQLI
28910 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 76 6f  TE_UNTESTABLE.vo
28920 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67 53 61  id sqlite3PrngSa
28930 76 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 76  veState(void);.v
28940 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67 52  oid sqlite3PrngR
28950 65 73 74 6f 72 65 53 74 61 74 65 28 76 6f 69 64  estoreState(void
28960 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  );.#endif.void s
28970 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c  qlite3RollbackAl
28980 6c 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b  l(sqlite3*,int);
28990 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64  .void sqlite3Cod
289a0 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 50 61  eVerifySchema(Pa
289b0 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  rse*, int);.void
289c0 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69   sqlite3CodeVeri
289d0 66 79 4e 61 6d 65 64 53 63 68 65 6d 61 28 50 61  fyNamedSchema(Pa
289e0 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
289f0 20 2a 7a 44 62 29 3b 0a 76 6f 69 64 20 73 71 6c   *zDb);.void sql
28a00 69 74 65 33 42 65 67 69 6e 54 72 61 6e 73 61 63  ite3BeginTransac
28a10 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74  tion(Parse*, int
28a20 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
28a30 6e 64 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61  ndTransaction(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 53 61 76 65 70 6f 69 6e 74  sqlite3Savepoint
28a60 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 6f  (Parse*, int, To
28a70 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
28a80 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e  te3CloseSavepoin
28a90 74 73 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 76  ts(sqlite3 *);.v
28aa0 6f 69 64 20 73 71 6c 69 74 65 33 4c 65 61 76 65  oid sqlite3Leave
28ab0 4d 75 74 65 78 41 6e 64 43 6c 6f 73 65 5a 6f 6d  MutexAndCloseZom
28ac0 62 69 65 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69  bie(sqlite3*);.i
28ad0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
28ae0 43 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 29 3b  Constant(Expr*);
28af0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
28b00 49 73 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a 6f 69  IsConstantNotJoi
28b10 6e 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  n(Expr*);.int sq
28b20 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74  lite3ExprIsConst
28b30 61 6e 74 4f 72 46 75 6e 63 74 69 6f 6e 28 45 78  antOrFunction(Ex
28b40 70 72 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  pr*, u8);.int sq
28b50 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74  lite3ExprIsConst
28b60 61 6e 74 4f 72 47 72 6f 75 70 42 79 28 50 61 72  antOrGroupBy(Par
28b70 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72  se*, Expr*, Expr
28b80 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
28b90 74 65 33 45 78 70 72 49 73 54 61 62 6c 65 43 6f  te3ExprIsTableCo
28ba0 6e 73 74 61 6e 74 28 45 78 70 72 2a 2c 69 6e 74  nstant(Expr*,int
28bb0 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
28bc0 5f 45 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f 48  _ENABLE_CURSOR_H
28bd0 49 4e 54 53 0a 69 6e 74 20 73 71 6c 69 74 65 33  INTS.int sqlite3
28be0 45 78 70 72 43 6f 6e 74 61 69 6e 73 53 75 62 71  ExprContainsSubq
28bf0 75 65 72 79 28 45 78 70 72 2a 29 3b 0a 23 65 6e  uery(Expr*);.#en
28c00 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  dif.int sqlite3E
28c10 78 70 72 49 73 49 6e 74 65 67 65 72 28 45 78 70  xprIsInteger(Exp
28c20 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73  r*, int*);.int s
28c30 71 6c 69 74 65 33 45 78 70 72 43 61 6e 42 65 4e  qlite3ExprCanBeN
28c40 75 6c 6c 28 63 6f 6e 73 74 20 45 78 70 72 2a 29  ull(const Expr*)
28c50 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
28c60 72 4e 65 65 64 73 4e 6f 41 66 66 69 6e 69 74 79  rNeedsNoAffinity
28c70 43 68 61 6e 67 65 28 63 6f 6e 73 74 20 45 78 70  Change(const Exp
28c80 72 2a 2c 20 63 68 61 72 29 3b 0a 69 6e 74 20 73  r*, char);.int s
28c90 71 6c 69 74 65 33 49 73 52 6f 77 69 64 28 63 6f  qlite3IsRowid(co
28ca0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
28cb0 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65   sqlite3Generate
28cc0 52 6f 77 44 65 6c 65 74 65 28 0a 20 20 20 20 50  RowDelete(.    P
28cd0 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 54 72 69  arse*,Table*,Tri
28ce0 67 67 65 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  gger*,int,int,in
28cf0 74 2c 69 31 36 2c 75 38 2c 75 38 2c 75 38 2c 69  t,i16,u8,u8,u8,i
28d00 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
28d10 33 47 65 6e 65 72 61 74 65 52 6f 77 49 6e 64 65  3GenerateRowInde
28d20 78 44 65 6c 65 74 65 28 50 61 72 73 65 2a 2c 20  xDelete(Parse*, 
28d30 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
28d40 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e  , int*, int);.in
28d50 74 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  t sqlite3Generat
28d60 65 49 6e 64 65 78 4b 65 79 28 50 61 72 73 65 2a  eIndexKey(Parse*
28d70 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69  , Index*, int, i
28d80 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 49 6e  nt, int, int*,In
28d90 64 65 78 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  dex*,int);.void 
28da0 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 50 61  sqlite3ResolvePa
28db0 72 74 49 64 78 4c 61 62 65 6c 28 50 61 72 73 65  rtIdxLabel(Parse
28dc0 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
28dd0 69 74 65 33 47 65 6e 65 72 61 74 65 43 6f 6e 73  ite3GenerateCons
28de0 74 72 61 69 6e 74 43 68 65 63 6b 73 28 50 61 72  traintChecks(Par
28df0 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2a 2c  se*,Table*,int*,
28e00 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  int,int,int,int,
28e10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28e30 20 20 20 20 20 20 75 38 2c 75 38 2c 69 6e 74 2c        u8,u8,int,
28e40 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 23 69 66 64  int*,int*);.#ifd
28e50 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
28e60 5f 4e 55 4c 4c 5f 54 52 49 4d 0a 20 20 76 6f 69  _NULL_TRIM.  voi
28e70 64 20 73 71 6c 69 74 65 33 53 65 74 4d 61 6b 65  d sqlite3SetMake
28e80 52 65 63 6f 72 64 50 35 28 56 64 62 65 2a 2c 54  RecordP5(Vdbe*,T
28e90 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  able*);.#else.# 
28ea0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65  define sqlite3Se
28eb0 74 4d 61 6b 65 52 65 63 6f 72 64 50 35 28 41 2c  tMakeRecordP5(A,
28ec0 42 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  B).#endif.void s
28ed0 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74 65 49 6e  qlite3CompleteIn
28ee0 73 65 72 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54  sertion(Parse*,T
28ef0 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  able*,int,int,in
28f00 74 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69  t,int*,int,int,i
28f10 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
28f20 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69  OpenTableAndIndi
28f30 63 65 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ces(Parse*, Tabl
28f40 65 2a 2c 20 69 6e 74 2c 20 75 38 2c 20 69 6e 74  e*, int, u8, int
28f50 2c 20 75 38 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74  , u8*, int*, int
28f60 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
28f70 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74  BeginWriteOperat
28f80 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  ion(Parse*, int,
28f90 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
28fa0 74 65 33 4d 75 6c 74 69 57 72 69 74 65 28 50 61  te3MultiWrite(Pa
28fb0 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
28fc0 74 65 33 4d 61 79 41 62 6f 72 74 28 50 61 72 73  te3MayAbort(Pars
28fd0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
28fe0 33 48 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28  3HaltConstraint(
28ff0 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
29000 2c 20 63 68 61 72 2a 2c 20 69 38 2c 20 75 38 29  , char*, i8, u8)
29010 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e  ;.void sqlite3Un
29020 69 71 75 65 43 6f 6e 73 74 72 61 69 6e 74 28 50  iqueConstraint(P
29030 61 72 73 65 2a 2c 20 69 6e 74 2c 20 49 6e 64 65  arse*, int, Inde
29040 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  x*);.void sqlite
29050 33 52 6f 77 69 64 43 6f 6e 73 74 72 61 69 6e 74  3RowidConstraint
29060 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 61  (Parse*, int, Ta
29070 62 6c 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ble*);.Expr *sql
29080 69 74 65 33 45 78 70 72 44 75 70 28 73 71 6c 69  ite3ExprDup(sqli
29090 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b  te3*,Expr*,int);
290a0 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74  .ExprList *sqlit
290b0 65 33 45 78 70 72 4c 69 73 74 44 75 70 28 73 71  e3ExprListDup(sq
290c0 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69 73 74 2a  lite3*,ExprList*
290d0 2c 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a  ,int);.SrcList *
290e0 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44 75  sqlite3SrcListDu
290f0 70 28 73 71 6c 69 74 65 33 2a 2c 53 72 63 4c 69  p(sqlite3*,SrcLi
29100 73 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69 73 74  st*,int);.IdList
29110 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44   *sqlite3IdListD
29120 75 70 28 73 71 6c 69 74 65 33 2a 2c 49 64 4c 69  up(sqlite3*,IdLi
29130 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71  st*);.Select *sq
29140 6c 69 74 65 33 53 65 6c 65 63 74 44 75 70 28 73  lite3SelectDup(s
29150 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c  qlite3*,Select*,
29160 69 6e 74 29 3b 0a 23 69 66 20 53 45 4c 45 43 54  int);.#if SELECT
29170 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a 76 6f  TRACE_ENABLED.vo
29180 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
29190 53 65 74 4e 61 6d 65 28 53 65 6c 65 63 74 2a 2c  SetName(Select*,
291a0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65  const char*);.#e
291b0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
291c0 69 74 65 33 53 65 6c 65 63 74 53 65 74 4e 61 6d  ite3SelectSetNam
291d0 65 28 41 2c 42 29 0a 23 65 6e 64 69 66 0a 76 6f  e(A,B).#endif.vo
291e0 69 64 20 73 71 6c 69 74 65 33 49 6e 73 65 72 74  id sqlite3Insert
291f0 42 75 69 6c 74 69 6e 46 75 6e 63 73 28 46 75 6e  BuiltinFuncs(Fun
29200 63 44 65 66 2a 2c 69 6e 74 29 3b 0a 46 75 6e 63  cDef*,int);.Func
29210 44 65 66 20 2a 73 71 6c 69 74 65 33 46 69 6e 64  Def *sqlite3Find
29220 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  Function(sqlite3
29230 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  *,const char*,in
29240 74 2c 75 38 2c 75 38 29 3b 0a 76 6f 69 64 20 73  t,u8,u8);.void s
29250 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 42 75  qlite3RegisterBu
29260 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28 76  iltinFunctions(v
29270 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
29280 65 33 52 65 67 69 73 74 65 72 44 61 74 65 54 69  e3RegisterDateTi
29290 6d 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64  meFunctions(void
292a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
292b0 65 67 69 73 74 65 72 50 65 72 43 6f 6e 6e 65 63  egisterPerConnec
292c0 74 69 6f 6e 42 75 69 6c 74 69 6e 46 75 6e 63 74  tionBuiltinFunct
292d0 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ions(sqlite3*);.
292e0 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74  int sqlite3Safet
292f0 79 43 68 65 63 6b 4f 6b 28 73 71 6c 69 74 65 33  yCheckOk(sqlite3
29300 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
29310 61 66 65 74 79 43 68 65 63 6b 53 69 63 6b 4f 72  afetyCheckSickOr
29320 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  Ok(sqlite3*);.vo
29330 69 64 20 73 71 6c 69 74 65 33 43 68 61 6e 67 65  id sqlite3Change
29340 43 6f 6f 6b 69 65 28 50 61 72 73 65 2a 2c 20 69  Cookie(Parse*, i
29350 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e  nt);..#if !defin
29360 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
29370 49 45 57 29 20 26 26 20 21 64 65 66 69 6e 65 64  IEW) && !defined
29380 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49  (SQLITE_OMIT_TRI
29390 47 47 45 52 29 0a 76 6f 69 64 20 73 71 6c 69 74  GGER).void sqlit
293a0 65 33 4d 61 74 65 72 69 61 6c 69 7a 65 56 69 65  e3MaterializeVie
293b0 77 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  w(Parse*, Table*
293c0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 23  , Expr*, int);.#
293d0 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
293e0 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
293f0 45 52 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ER.  void sqlite
29400 33 42 65 67 69 6e 54 72 69 67 67 65 72 28 50 61  3BeginTrigger(Pa
29410 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b  rse*, Token*,Tok
29420 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c 69  en*,int,int,IdLi
29430 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 0a 20 20  st*,SrcList*,.  
29440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29450 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 69           Expr*,i
29460 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  nt, int);.  void
29470 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68 54 72   sqlite3FinishTr
29480 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72  igger(Parse*, Tr
29490 69 67 67 65 72 53 74 65 70 2a 2c 20 54 6f 6b 65  iggerStep*, Toke
294a0 6e 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  n*);.  void sqli
294b0 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 28 50  te3DropTrigger(P
294c0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
294d0 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
294e0 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72  lite3DropTrigger
294f0 50 74 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67  Ptr(Parse*, Trig
29500 67 65 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72  ger*);.  Trigger
29510 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
29520 73 45 78 69 73 74 28 50 61 72 73 65 20 2a 2c 20  sExist(Parse *, 
29530 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 45 78 70  Table*, int, Exp
29540 72 4c 69 73 74 2a 2c 20 69 6e 74 20 2a 70 4d 61  rList*, int *pMa
29550 73 6b 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a  sk);.  Trigger *
29560 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69  sqlite3TriggerLi
29570 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c  st(Parse *, Tabl
29580 65 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  e *);.  void sql
29590 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67  ite3CodeRowTrigg
295a0 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67  er(Parse*, Trigg
295b0 65 72 20 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c  er *, int, ExprL
295c0 69 73 74 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65  ist*, int, Table
295d0 20 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20   *,.            
295e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
295f0 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
29600 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
29610 64 65 52 6f 77 54 72 69 67 67 65 72 44 69 72 65  deRowTriggerDire
29620 63 74 28 50 61 72 73 65 20 2a 2c 20 54 72 69 67  ct(Parse *, Trig
29630 67 65 72 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20  ger *, Table *, 
29640 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
29650 20 20 76 6f 69 64 20 73 71 6c 69 74 65 56 69 65    void sqliteVie
29660 77 54 72 69 67 67 65 72 73 28 50 61 72 73 65 2a  wTriggers(Parse*
29670 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c  , Table*, Expr*,
29680 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 29   int, ExprList*)
29690 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
296a0 44 65 6c 65 74 65 54 72 69 67 67 65 72 53 74 65  DeleteTriggerSte
296b0 70 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67  p(sqlite3*, Trig
296c0 67 65 72 53 74 65 70 2a 29 3b 0a 20 20 54 72 69  gerStep*);.  Tri
296d0 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65  ggerStep *sqlite
296e0 33 54 72 69 67 67 65 72 53 65 6c 65 63 74 53 74  3TriggerSelectSt
296f0 65 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65  ep(sqlite3*,Sele
29700 63 74 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53  ct*);.  TriggerS
29710 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
29720 67 65 72 49 6e 73 65 72 74 53 74 65 70 28 73 71  gerInsertStep(sq
29730 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 49  lite3*,Token*, I
29740 64 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20  dList*,.        
29750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29770 53 65 6c 65 63 74 2a 2c 75 38 29 3b 0a 20 20 54  Select*,u8);.  T
29780 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69  riggerStep *sqli
29790 74 65 33 54 72 69 67 67 65 72 55 70 64 61 74 65  te3TriggerUpdate
297a0 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f  Step(sqlite3*,To
297b0 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20  ken*,ExprList*, 
297c0 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20 54 72  Expr*, u8);.  Tr
297d0 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74  iggerStep *sqlit
297e0 65 33 54 72 69 67 67 65 72 44 65 6c 65 74 65 53  e3TriggerDeleteS
297f0 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b  tep(sqlite3*,Tok
29800 65 6e 2a 2c 20 45 78 70 72 2a 29 3b 0a 20 20 76  en*, Expr*);.  v
29810 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
29820 65 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33  eTrigger(sqlite3
29830 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20  *, Trigger*);.  
29840 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69  void sqlite3Unli
29850 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67  nkAndDeleteTrigg
29860 65 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  er(sqlite3*,int,
29870 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
29880 75 33 32 20 73 71 6c 69 74 65 33 54 72 69 67 67  u32 sqlite3Trigg
29890 65 72 43 6f 6c 6d 61 73 6b 28 50 61 72 73 65 2a  erColmask(Parse*
298a0 2c 54 72 69 67 67 65 72 2a 2c 45 78 70 72 4c 69  ,Trigger*,ExprLi
298b0 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61 62 6c  st*,int,int,Tabl
298c0 65 2a 2c 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e  e*,int);.# defin
298d0 65 20 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f  e sqlite3ParseTo
298e0 70 6c 65 76 65 6c 28 70 29 20 28 28 70 29 2d 3e  plevel(p) ((p)->
298f0 70 54 6f 70 6c 65 76 65 6c 20 3f 20 28 70 29 2d  pToplevel ? (p)-
29900 3e 70 54 6f 70 6c 65 76 65 6c 20 3a 20 28 70 29  >pToplevel : (p)
29910 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
29920 65 33 49 73 54 6f 70 6c 65 76 65 6c 28 70 29 20  e3IsToplevel(p) 
29930 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 3d  ((p)->pToplevel=
29940 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  =0).#else.# defi
29950 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65  ne sqlite3Trigge
29960 72 73 45 78 69 73 74 28 42 2c 43 2c 44 2c 45 2c  rsExist(B,C,D,E,
29970 46 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71  F) 0.# define sq
29980 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67  lite3DeleteTrigg
29990 65 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65  er(A,B).# define
299a0 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67   sqlite3DropTrig
299b0 67 65 72 50 74 72 28 41 2c 42 29 0a 23 20 64 65  gerPtr(A,B).# de
299c0 66 69 6e 65 20 73 71 6c 69 74 65 33 55 6e 6c 69  fine sqlite3Unli
299d0 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67  nkAndDeleteTrigg
299e0 65 72 28 41 2c 42 2c 43 29 0a 23 20 64 65 66 69  er(A,B,C).# defi
299f0 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f  ne sqlite3CodeRo
29a00 77 54 72 69 67 67 65 72 28 41 2c 42 2c 43 2c 44  wTrigger(A,B,C,D
29a10 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23 20 64 65  ,E,F,G,H,I).# de
29a20 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65  fine sqlite3Code
29a30 52 6f 77 54 72 69 67 67 65 72 44 69 72 65 63 74  RowTriggerDirect
29a40 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a 23 20  (A,B,C,D,E,F).# 
29a50 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72  define sqlite3Tr
29a60 69 67 67 65 72 4c 69 73 74 28 58 2c 20 59 29 20  iggerList(X, Y) 
29a70 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  0.# define sqlit
29a80 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28  e3ParseToplevel(
29a90 70 29 20 70 0a 23 20 64 65 66 69 6e 65 20 73 71  p) p.# define sq
29aa0 6c 69 74 65 33 49 73 54 6f 70 6c 65 76 65 6c 28  lite3IsToplevel(
29ab0 70 29 20 31 0a 23 20 64 65 66 69 6e 65 20 73 71  p) 1.# define sq
29ac0 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d  lite3TriggerColm
29ad0 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c  ask(A,B,C,D,E,F,
29ae0 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a 69 6e 74  G) 0.#endif..int
29af0 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54 79 70 65   sqlite3JoinType
29b00 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c  (Parse*, Token*,
29b10 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29   Token*, Token*)
29b20 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72  ;.void sqlite3Cr
29b30 65 61 74 65 46 6f 72 65 69 67 6e 4b 65 79 28 50  eateForeignKey(P
29b40 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  arse*, ExprList*
29b50 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c 69  , Token*, ExprLi
29b60 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  st*, int);.void 
29b70 73 71 6c 69 74 65 33 44 65 66 65 72 46 6f 72 65  sqlite3DeferFore
29b80 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 69  ignKey(Parse*, i
29b90 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  nt);.#ifndef SQL
29ba0 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49  ITE_OMIT_AUTHORI
29bb0 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71  ZATION.  void sq
29bc0 6c 69 74 65 33 41 75 74 68 52 65 61 64 28 50 61  lite3AuthRead(Pa
29bd0 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63 68 65 6d  rse*,Expr*,Schem
29be0 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b 0a 20 20  a*,SrcList*);.  
29bf0 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68 43  int sqlite3AuthC
29c00 68 65 63 6b 28 50 61 72 73 65 2a 2c 69 6e 74 2c  heck(Parse*,int,
29c10 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
29c20 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
29c30 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20   char*);.  void 
29c40 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65  sqlite3AuthConte
29c50 78 74 50 75 73 68 28 50 61 72 73 65 2a 2c 20 41  xtPush(Parse*, A
29c60 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e  uthContext*, con
29c70 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
29c80 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e  d sqlite3AuthCon
29c90 74 65 78 74 50 6f 70 28 41 75 74 68 43 6f 6e 74  textPop(AuthCont
29ca0 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  ext*);.  int sql
29cb0 69 74 65 33 41 75 74 68 52 65 61 64 43 6f 6c 28  ite3AuthReadCol(
29cc0 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
29cd0 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  ar *, const char
29ce0 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a   *, int);.#else.
29cf0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
29d00 41 75 74 68 52 65 61 64 28 61 2c 62 2c 63 2c 64  AuthRead(a,b,c,d
29d10 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
29d20 65 33 41 75 74 68 43 68 65 63 6b 28 61 2c 62 2c  e3AuthCheck(a,b,
29d30 63 2c 64 2c 65 29 20 20 20 20 53 51 4c 49 54 45  c,d,e)    SQLITE
29d40 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  _OK.# define sql
29d50 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50  ite3AuthContextP
29d60 75 73 68 28 61 2c 62 2c 63 29 0a 23 20 64 65 66  ush(a,b,c).# def
29d70 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43  ine sqlite3AuthC
29d80 6f 6e 74 65 78 74 50 6f 70 28 61 29 20 20 28 28  ontextPop(a)  ((
29d90 76 6f 69 64 29 28 61 29 29 0a 23 65 6e 64 69 66  void)(a)).#endif
29da0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 74 74  .void sqlite3Att
29db0 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ach(Parse*, Expr
29dc0 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 29  *, Expr*, Expr*)
29dd0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
29de0 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70  tach(Parse*, Exp
29df0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
29e00 33 46 69 78 49 6e 69 74 28 44 62 46 69 78 65 72  3FixInit(DbFixer
29e10 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  *, Parse*, int, 
29e20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
29e30 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  st Token*);.int 
29e40 73 71 6c 69 74 65 33 46 69 78 53 72 63 4c 69 73  sqlite3FixSrcLis
29e50 74 28 44 62 46 69 78 65 72 2a 2c 20 53 72 63 4c  t(DbFixer*, SrcL
29e60 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
29e70 65 33 46 69 78 53 65 6c 65 63 74 28 44 62 46 69  e3FixSelect(DbFi
29e80 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  xer*, Select*);.
29e90 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45 78  int sqlite3FixEx
29ea0 70 72 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70  pr(DbFixer*, Exp
29eb0 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
29ec0 46 69 78 45 78 70 72 4c 69 73 74 28 44 62 46 69  FixExprList(DbFi
29ed0 78 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  xer*, ExprList*)
29ee0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
29ef0 54 72 69 67 67 65 72 53 74 65 70 28 44 62 46 69  TriggerStep(DbFi
29f00 78 65 72 2a 2c 20 54 72 69 67 67 65 72 53 74 65  xer*, TriggerSte
29f10 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  p*);.int sqlite3
29f20 41 74 6f 46 28 63 6f 6e 73 74 20 63 68 61 72 20  AtoF(const char 
29f30 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20 69 6e 74  *z, double*, int
29f40 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74  , u8);.int sqlit
29f50 65 33 47 65 74 49 6e 74 33 32 28 63 6f 6e 73 74  e3GetInt32(const
29f60 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a   char *, int*);.
29f70 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69 28  int sqlite3Atoi(
29f80 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 69  const char*);.#i
29f90 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
29fa0 54 5f 55 54 46 31 36 0a 69 6e 74 20 73 71 6c 69  T_UTF16.int sqli
29fb0 74 65 33 55 74 66 31 36 42 79 74 65 4c 65 6e 28  te3Utf16ByteLen(
29fc0 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 44 61 74  const void *pDat
29fd0 61 2c 20 69 6e 74 20 6e 43 68 61 72 29 3b 0a 23  a, int nChar);.#
29fe0 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65  endif.int sqlite
29ff0 33 55 74 66 38 43 68 61 72 4c 65 6e 28 63 6f 6e  3Utf8CharLen(con
2a000 73 74 20 63 68 61 72 20 2a 70 44 61 74 61 2c 20  st char *pData, 
2a010 69 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33 32 20  int nByte);.u32 
2a020 73 71 6c 69 74 65 33 55 74 66 38 52 65 61 64 28  sqlite3Utf8Read(
2a030 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 4c 6f 67  const u8**);.Log
2a040 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73  Est sqlite3LogEs
2a050 74 28 75 36 34 29 3b 0a 4c 6f 67 45 73 74 20 73  t(u64);.LogEst s
2a060 71 6c 69 74 65 33 4c 6f 67 45 73 74 41 64 64 28  qlite3LogEstAdd(
2a070 4c 6f 67 45 73 74 2c 4c 6f 67 45 73 74 29 3b 0a  LogEst,LogEst);.
2a080 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2a090 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2a0a0 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c  .LogEst sqlite3L
2a0b0 6f 67 45 73 74 46 72 6f 6d 44 6f 75 62 6c 65 28  ogEstFromDouble(
2a0c0 64 6f 75 62 6c 65 29 3b 0a 23 65 6e 64 69 66 0a  double);.#endif.
2a0d0 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
2a0e0 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53  TE_ENABLE_STMT_S
2a0f0 43 41 4e 53 54 41 54 55 53 29 20 7c 7c 20 5c 0a  CANSTATUS) || \.
2a100 20 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c 49      defined(SQLI
2a110 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
2a120 4f 52 5f 53 54 41 54 34 29 20 7c 7c 20 5c 0a 20  OR_STAT4) || \. 
2a130 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54     defined(SQLIT
2a140 45 5f 45 58 50 4c 41 49 4e 5f 45 53 54 49 4d 41  E_EXPLAIN_ESTIMA
2a150 54 45 44 5f 52 4f 57 53 29 0a 75 36 34 20 73 71  TED_ROWS).u64 sq
2a160 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74  lite3LogEstToInt
2a170 28 4c 6f 67 45 73 74 29 3b 0a 23 65 6e 64 69 66  (LogEst);.#endif
2a180 0a 56 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 56  .VList *sqlite3V
2a190 4c 69 73 74 41 64 64 28 73 71 6c 69 74 65 33 2a  ListAdd(sqlite3*
2a1a0 2c 56 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68  ,VList*,const ch
2a1b0 61 72 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 63 6f  ar*,int,int);.co
2a1c0 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
2a1d0 33 56 4c 69 73 74 4e 75 6d 54 6f 4e 61 6d 65 28  3VListNumToName(
2a1e0 56 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 69 6e 74  VList*,int);.int
2a1f0 20 73 71 6c 69 74 65 33 56 4c 69 73 74 4e 61 6d   sqlite3VListNam
2a200 65 54 6f 4e 75 6d 28 56 4c 69 73 74 2a 2c 63 6f  eToNum(VList*,co
2a210 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a  nst char*,int);.
2a220 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20  ./*.** Routines 
2a230 74 6f 20 72 65 61 64 20 61 6e 64 20 77 72 69 74  to read and writ
2a240 65 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74  e variable-lengt
2a250 68 20 69 6e 74 65 67 65 72 73 2e 20 20 54 68 65  h integers.  The
2a260 73 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65  se used to.** be
2a270 20 64 65 66 69 6e 65 64 20 6c 6f 63 61 6c 6c 79   defined locally
2a280 2c 20 62 75 74 20 6e 6f 77 20 77 65 20 75 73 65  , but now we use
2a290 20 74 68 65 20 76 61 72 69 6e 74 20 72 6f 75 74   the varint rout
2a2a0 69 6e 65 73 20 69 6e 20 74 68 65 20 75 74 69 6c  ines in the util
2a2b0 2e 63 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2f 0a 69  .c.** file..*/.i
2a2c0 6e 74 20 73 71 6c 69 74 65 33 50 75 74 56 61 72  nt sqlite3PutVar
2a2d0 69 6e 74 28 75 6e 73 69 67 6e 65 64 20 63 68 61  int(unsigned cha
2a2e0 72 2a 2c 20 75 36 34 29 3b 0a 75 38 20 73 71 6c  r*, u64);.u8 sql
2a2f0 69 74 65 33 47 65 74 56 61 72 69 6e 74 28 63 6f  ite3GetVarint(co
2a300 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
2a310 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a 75 38 20  r *, u64 *);.u8 
2a320 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
2a330 33 32 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  32(const unsigne
2a340 64 20 63 68 61 72 20 2a 2c 20 75 33 32 20 2a 29  d char *, u32 *)
2a350 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 72  ;.int sqlite3Var
2a360 69 6e 74 4c 65 6e 28 75 36 34 20 76 29 3b 0a 0a  intLen(u64 v);..
2a370 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e  /*.** The common
2a380 20 63 61 73 65 20 69 73 20 66 6f 72 20 61 20 76   case is for a v
2a390 61 72 69 6e 74 20 74 6f 20 62 65 20 61 20 73 69  arint to be a si
2a3a0 6e 67 6c 65 20 62 79 74 65 2e 20 20 54 68 65 79  ngle byte.  They
2a3b0 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 6d 61   following.** ma
2a3c0 63 72 6f 73 20 68 61 6e 64 6c 65 20 74 68 65 20  cros handle the 
2a3d0 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 69 74 68  common case with
2a3e0 6f 75 74 20 61 20 70 72 6f 63 65 64 75 72 65 20  out a procedure 
2a3f0 63 61 6c 6c 2c 20 62 75 74 20 74 68 65 6e 20 63  call, but then c
2a400 61 6c 6c 0a 2a 2a 20 74 68 65 20 70 72 6f 63 65  all.** the proce
2a410 64 75 72 65 20 66 6f 72 20 6c 61 72 67 65 72 20  dure for larger 
2a420 76 61 72 69 6e 74 73 2e 0a 2a 2f 0a 23 64 65 66  varints..*/.#def
2a430 69 6e 65 20 67 65 74 56 61 72 69 6e 74 33 32 28  ine getVarint32(
2a440 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28  A,B)  \.  (u8)((
2a450 2a 28 41 29 3c 28 75 38 29 30 78 38 30 29 3f 28  *(A)<(u8)0x80)?(
2a460 28 42 29 3d 28 75 33 32 29 2a 28 41 29 29 2c 31  (B)=(u32)*(A)),1
2a470 3a 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e  :sqlite3GetVarin
2a480 74 33 32 28 28 41 29 2c 28 75 33 32 20 2a 29 26  t32((A),(u32 *)&
2a490 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20 70 75  (B))).#define pu
2a4a0 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20  tVarint32(A,B)  
2a4b0 5c 0a 20 20 28 75 38 29 28 28 28 75 33 32 29 28  \.  (u8)(((u32)(
2a4c0 42 29 3c 28 75 33 32 29 30 78 38 30 29 3f 28 2a  B)<(u32)0x80)?(*
2a4d0 28 41 29 3d 28 75 6e 73 69 67 6e 65 64 20 63 68  (A)=(unsigned ch
2a4e0 61 72 29 28 42 29 29 2c 31 3a 5c 0a 20 20 73 71  ar)(B)),1:\.  sq
2a4f0 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 28 28  lite3PutVarint((
2a500 41 29 2c 28 42 29 29 29 0a 23 64 65 66 69 6e 65  A),(B))).#define
2a510 20 67 65 74 56 61 72 69 6e 74 20 20 20 20 73 71   getVarint    sq
2a520 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 0a 23  lite3GetVarint.#
2a530 64 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74  define putVarint
2a540 20 20 20 20 73 71 6c 69 74 65 33 50 75 74 56 61      sqlite3PutVa
2a550 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63 68 61  rint...const cha
2a560 72 20 2a 73 71 6c 69 74 65 33 49 6e 64 65 78 41  r *sqlite3IndexA
2a570 66 66 69 6e 69 74 79 53 74 72 28 73 71 6c 69 74  ffinityStr(sqlit
2a580 65 33 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f  e3*, Index*);.vo
2a590 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65 41  id sqlite3TableA
2a5a0 66 66 69 6e 69 74 79 28 56 64 62 65 2a 2c 20 54  ffinity(Vdbe*, T
2a5b0 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 63 68 61  able*, int);.cha
2a5c0 72 20 73 71 6c 69 74 65 33 43 6f 6d 70 61 72 65  r sqlite3Compare
2a5d0 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70  Affinity(Expr *p
2a5e0 45 78 70 72 2c 20 63 68 61 72 20 61 66 66 32 29  Expr, char aff2)
2a5f0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64  ;.int sqlite3Ind
2a600 65 78 41 66 66 69 6e 69 74 79 4f 6b 28 45 78 70  exAffinityOk(Exp
2a610 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20 69  r *pExpr, char i
2a620 64 78 5f 61 66 66 69 6e 69 74 79 29 3b 0a 63 68  dx_affinity);.ch
2a630 61 72 20 73 71 6c 69 74 65 33 54 61 62 6c 65 43  ar sqlite3TableC
2a640 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 54 61  olumnAffinity(Ta
2a650 62 6c 65 2a 2c 69 6e 74 29 3b 0a 63 68 61 72 20  ble*,int);.char 
2a660 73 71 6c 69 74 65 33 45 78 70 72 41 66 66 69 6e  sqlite3ExprAffin
2a670 69 74 79 28 45 78 70 72 20 2a 70 45 78 70 72 29  ity(Expr *pExpr)
2a680 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f  ;.int sqlite3Ato
2a690 69 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  i64(const char*,
2a6a0 20 69 36 34 2a 2c 20 69 6e 74 2c 20 75 38 29 3b   i64*, int, u8);
2a6b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 65 63 4f  .int sqlite3DecO
2a6c0 72 48 65 78 54 6f 49 36 34 28 63 6f 6e 73 74 20  rHexToI64(const 
2a6d0 63 68 61 72 2a 2c 20 69 36 34 2a 29 3b 0a 76 6f  char*, i64*);.vo
2a6e0 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 57  id sqlite3ErrorW
2a6f0 69 74 68 4d 73 67 28 73 71 6c 69 74 65 33 2a 2c  ithMsg(sqlite3*,
2a700 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
2a710 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c  *,...);.void sql
2a720 69 74 65 33 45 72 72 6f 72 28 73 71 6c 69 74 65  ite3Error(sqlite
2a730 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  3*,int);.void sq
2a740 6c 69 74 65 33 53 79 73 74 65 6d 45 72 72 6f 72  lite3SystemError
2a750 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a  (sqlite3*,int);.
2a760 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 48 65 78  void *sqlite3Hex
2a770 54 6f 42 6c 6f 62 28 73 71 6c 69 74 65 33 2a 2c  ToBlob(sqlite3*,
2a780 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20   const char *z, 
2a790 69 6e 74 20 6e 29 3b 0a 75 38 20 73 71 6c 69 74  int n);.u8 sqlit
2a7a0 65 33 48 65 78 54 6f 49 6e 74 28 69 6e 74 20 68  e3HexToInt(int h
2a7b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 77  );.int sqlite3Tw
2a7c0 6f 50 61 72 74 4e 61 6d 65 28 50 61 72 73 65 20  oPartName(Parse 
2a7d0 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65  *, Token *, Toke
2a7e0 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a  n *, Token **);.
2a7f0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
2a800 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d  ITE_NEED_ERR_NAM
2a810 45 29 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  E).const char *s
2a820 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 69 6e  qlite3ErrName(in
2a830 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 63 6f 6e 73  t);.#endif..cons
2a840 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45  t char *sqlite3E
2a850 72 72 53 74 72 28 69 6e 74 29 3b 0a 69 6e 74 20  rrStr(int);.int 
2a860 73 71 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d  sqlite3ReadSchem
2a870 61 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29  a(Parse *pParse)
2a880 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
2a890 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28 73 71  e3FindCollSeq(sq
2a8a0 6c 69 74 65 33 2a 2c 75 38 20 65 6e 63 2c 20 63  lite3*,u8 enc, c
2a8b0 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b  onst char*,int);
2a8c0 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
2a8d0 33 4c 6f 63 61 74 65 43 6f 6c 6c 53 65 71 28 50  3LocateCollSeq(P
2a8e0 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 63 6f  arse *pParse, co
2a8f0 6e 73 74 20 63 68 61 72 2a 7a 4e 61 6d 65 29 3b  nst char*zName);
2a900 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
2a910 33 45 78 70 72 43 6f 6c 6c 53 65 71 28 50 61 72  3ExprCollSeq(Par
2a920 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72  se *pParse, Expr
2a930 20 2a 70 45 78 70 72 29 3b 0a 45 78 70 72 20 2a   *pExpr);.Expr *
2a940 73 71 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f  sqlite3ExprAddCo
2a950 6c 6c 61 74 65 54 6f 6b 65 6e 28 50 61 72 73 65  llateToken(Parse
2a960 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 2a 2c   *pParse, Expr*,
2a970 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 20 69   const Token*, i
2a980 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  nt);.Expr *sqlit
2a990 65 33 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65  e3ExprAddCollate
2a9a0 53 74 72 69 6e 67 28 50 61 72 73 65 2a 2c 45 78  String(Parse*,Ex
2a9b0 70 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  pr*,const char*)
2a9c0 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
2a9d0 78 70 72 53 6b 69 70 43 6f 6c 6c 61 74 65 28 45  xprSkipCollate(E
2a9e0 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
2a9f0 65 33 43 68 65 63 6b 43 6f 6c 6c 53 65 71 28 50  e3CheckCollSeq(P
2aa00 61 72 73 65 20 2a 2c 20 43 6f 6c 6c 53 65 71 20  arse *, CollSeq 
2aa10 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  *);.int sqlite3C
2aa20 68 65 63 6b 4f 62 6a 65 63 74 4e 61 6d 65 28 50  heckObjectName(P
2aa30 61 72 73 65 20 2a 2c 20 63 6f 6e 73 74 20 63 68  arse *, const ch
2aa40 61 72 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ar *);.void sqli
2aa50 74 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65  te3VdbeSetChange
2aa60 73 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74  s(sqlite3 *, int
2aa70 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 64  );.int sqlite3Ad
2aa80 64 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29  dInt64(i64*,i64)
2aa90 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 75 62  ;.int sqlite3Sub
2aaa0 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b  Int64(i64*,i64);
2aab0 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 6c 49  .int sqlite3MulI
2aac0 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a  nt64(i64*,i64);.
2aad0 69 6e 74 20 73 71 6c 69 74 65 33 41 62 73 49 6e  int sqlite3AbsIn
2aae0 74 33 32 28 69 6e 74 29 3b 0a 23 69 66 64 65 66  t32(int);.#ifdef
2aaf0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 38   SQLITE_ENABLE_8
2ab00 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69 64 20 73 71  _3_NAMES.void sq
2ab10 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69 78 33  lite3FileSuffix3
2ab20 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68  (const char*, ch
2ab30 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  ar*);.#else.# de
2ab40 66 69 6e 65 20 73 71 6c 69 74 65 33 46 69 6c 65  fine sqlite3File
2ab50 53 75 66 66 69 78 33 28 58 2c 59 29 0a 23 65 6e  Suffix3(X,Y).#en
2ab60 64 69 66 0a 75 38 20 73 71 6c 69 74 65 33 47 65  dif.u8 sqlite3Ge
2ab70 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74 20 63  tBoolean(const c
2ab80 68 61 72 20 2a 7a 2c 75 38 29 3b 0a 0a 63 6f 6e  har *z,u8);..con
2ab90 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  st void *sqlite3
2aba0 56 61 6c 75 65 54 65 78 74 28 73 71 6c 69 74 65  ValueText(sqlite
2abb0 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 69  3_value*, u8);.i
2abc0 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65 42  nt sqlite3ValueB
2abd0 79 74 65 73 28 73 71 6c 69 74 65 33 5f 76 61 6c  ytes(sqlite3_val
2abe0 75 65 2a 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73  ue*, u8);.void s
2abf0 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53 74  qlite3ValueSetSt
2ac00 72 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  r(sqlite3_value*
2ac10 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69  , int, const voi
2ac20 64 20 2a 2c 75 38 2c 0a 20 20 20 20 20 20 20 20  d *,u8,.        
2ac30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ac40 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b  void(*)(void*));
2ac50 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c  .void sqlite3Val
2ac60 75 65 53 65 74 4e 75 6c 6c 28 73 71 6c 69 74 65  ueSetNull(sqlite
2ac70 33 5f 76 61 6c 75 65 2a 29 3b 0a 76 6f 69 64 20  3_value*);.void 
2ac80 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65  sqlite3ValueFree
2ac90 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29  (sqlite3_value*)
2aca0 3b 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  ;.sqlite3_value 
2acb0 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77  *sqlite3ValueNew
2acc0 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 23 69 66  (sqlite3 *);.#if
2acd0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2ace0 5f 55 54 46 31 36 0a 63 68 61 72 20 2a 73 71 6c  _UTF16.char *sql
2acf0 69 74 65 33 55 74 66 31 36 74 6f 38 28 73 71 6c  ite3Utf16to8(sql
2ad00 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 76 6f  ite3 *, const vo
2ad10 69 64 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 23  id*, int, u8);.#
2ad20 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65  endif.int sqlite
2ad30 33 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 73  3ValueFromExpr(s
2ad40 71 6c 69 74 65 33 20 2a 2c 20 45 78 70 72 20 2a  qlite3 *, Expr *
2ad50 2c 20 75 38 2c 20 75 38 2c 20 73 71 6c 69 74 65  , u8, u8, sqlite
2ad60 33 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69  3_value **);.voi
2ad70 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70  d sqlite3ValueAp
2ad80 70 6c 79 41 66 66 69 6e 69 74 79 28 73 71 6c 69  plyAffinity(sqli
2ad90 74 65 33 5f 76 61 6c 75 65 20 2a 2c 20 75 38 2c  te3_value *, u8,
2ada0 20 75 38 29 3b 0a 23 69 66 6e 64 65 66 20 53 51   u8);.#ifndef SQ
2adb0 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f  LITE_AMALGAMATIO
2adc0 4e 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75  N.extern const u
2add0 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c  nsigned char sql
2ade0 69 74 65 33 4f 70 63 6f 64 65 50 72 6f 70 65 72  ite3OpcodeProper
2adf0 74 79 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e  ty[];.extern con
2ae00 73 74 20 63 68 61 72 20 73 71 6c 69 74 65 33 53  st char sqlite3S
2ae10 74 72 42 49 4e 41 52 59 5b 5d 3b 0a 65 78 74 65  trBINARY[];.exte
2ae20 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  rn const unsigne
2ae30 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 55 70  d char sqlite3Up
2ae40 70 65 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78  perToLower[];.ex
2ae50 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67  tern const unsig
2ae60 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33  ned char sqlite3
2ae70 43 74 79 70 65 4d 61 70 5b 5d 3b 0a 65 78 74 65  CtypeMap[];.exte
2ae80 72 6e 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 73  rn const Token s
2ae90 71 6c 69 74 65 33 49 6e 74 54 6f 6b 65 6e 73 5b  qlite3IntTokens[
2aea0 5d 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49 54 45  ];.extern SQLITE
2aeb0 5f 57 53 44 20 73 74 72 75 63 74 20 53 71 6c 69  _WSD struct Sqli
2aec0 74 65 33 43 6f 6e 66 69 67 20 73 71 6c 69 74 65  te3Config sqlite
2aed0 33 43 6f 6e 66 69 67 3b 0a 65 78 74 65 72 6e 20  3Config;.extern 
2aee0 46 75 6e 63 44 65 66 48 61 73 68 20 73 71 6c 69  FuncDefHash sqli
2aef0 74 65 33 42 75 69 6c 74 69 6e 46 75 6e 63 74 69  te3BuiltinFuncti
2af00 6f 6e 73 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  ons;.#ifndef SQL
2af10 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 65 78 74  ITE_OMIT_WSD.ext
2af20 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 50  ern int sqlite3P
2af30 65 6e 64 69 6e 67 42 79 74 65 3b 0a 23 65 6e 64  endingByte;.#end
2af40 69 66 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  if.#endif.void s
2af50 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f  qlite3RootPageMo
2af60 76 65 64 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  ved(sqlite3*, in
2af70 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
2af80 69 64 20 73 71 6c 69 74 65 33 52 65 69 6e 64 65  id sqlite3Reinde
2af90 78 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  x(Parse*, Token*
2afa0 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
2afb0 73 71 6c 69 74 65 33 41 6c 74 65 72 46 75 6e 63  sqlite3AlterFunc
2afc0 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69  tions(void);.voi
2afd0 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 52 65  d sqlite3AlterRe
2afe0 6e 61 6d 65 54 61 62 6c 65 28 50 61 72 73 65 2a  nameTable(Parse*
2aff0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65  , SrcList*, Toke
2b000 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
2b010 47 65 74 54 6f 6b 65 6e 28 63 6f 6e 73 74 20 75  GetToken(const u
2b020 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20  nsigned char *, 
2b030 69 6e 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  int *);.void sql
2b040 69 74 65 33 4e 65 73 74 65 64 50 61 72 73 65 28  ite3NestedParse(
2b050 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
2b060 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20  ar*, ...);.void 
2b070 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65  sqlite3ExpirePre
2b080 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28  paredStatements(
2b090 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73  sqlite3*);.int s
2b0a0 71 6c 69 74 65 33 43 6f 64 65 53 75 62 73 65 6c  qlite3CodeSubsel
2b0b0 65 63 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ect(Parse*, Expr
2b0c0 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76   *, int, int);.v
2b0d0 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63  oid sqlite3Selec
2b0e0 74 50 72 65 70 28 50 61 72 73 65 2a 2c 20 53 65  tPrep(Parse*, Se
2b0f0 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65  lect*, NameConte
2b100 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  xt*);.void sqlit
2b110 65 33 53 65 6c 65 63 74 57 72 6f 6e 67 4e 75 6d  e3SelectWrongNum
2b120 54 65 72 6d 73 45 72 72 6f 72 28 50 61 72 73 65  TermsError(Parse
2b130 20 2a 70 50 61 72 73 65 2c 20 53 65 6c 65 63 74   *pParse, Select
2b140 20 2a 70 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   *p);.int sqlite
2b150 33 4d 61 74 63 68 53 70 61 6e 4e 61 6d 65 28 63  3MatchSpanName(c
2b160 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
2b170 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
2b180 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
2b190 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
2b1a0 65 73 6f 6c 76 65 45 78 70 72 4e 61 6d 65 73 28  esolveExprNames(
2b1b0 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78  NameContext*, Ex
2b1c0 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
2b1d0 33 52 65 73 6f 6c 76 65 45 78 70 72 4c 69 73 74  3ResolveExprList
2b1e0 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78  Names(NameContex
2b1f0 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  t*, ExprList*);.
2b200 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f  void sqlite3Reso
2b210 6c 76 65 53 65 6c 65 63 74 4e 61 6d 65 73 28 50  lveSelectNames(P
2b220 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  arse*, Select*, 
2b230 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76  NameContext*);.v
2b240 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  oid sqlite3Resol
2b250 76 65 53 65 6c 66 52 65 66 65 72 65 6e 63 65 28  veSelfReference(
2b260 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e  Parse*,Table*,in
2b270 74 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74  t,Expr*,ExprList
2b280 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
2b290 65 73 6f 6c 76 65 4f 72 64 65 72 47 72 6f 75 70  esolveOrderGroup
2b2a0 42 79 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63  By(Parse*, Selec
2b2b0 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63  t*, ExprList*, c
2b2c0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
2b2d0 64 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44  d sqlite3ColumnD
2b2e0 65 66 61 75 6c 74 28 56 64 62 65 20 2a 2c 20 54  efault(Vdbe *, T
2b2f0 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  able *, int, int
2b300 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
2b310 6c 74 65 72 46 69 6e 69 73 68 41 64 64 43 6f 6c  lterFinishAddCol
2b320 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b  umn(Parse *, Tok
2b330 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  en *);.void sqli
2b340 74 65 33 41 6c 74 65 72 42 65 67 69 6e 41 64 64  te3AlterBeginAdd
2b350 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20  Column(Parse *, 
2b360 53 72 63 4c 69 73 74 20 2a 29 3b 0a 43 6f 6c 6c  SrcList *);.Coll
2b370 53 65 71 20 2a 73 71 6c 69 74 65 33 47 65 74 43  Seq *sqlite3GetC
2b380 6f 6c 6c 53 65 71 28 50 61 72 73 65 2a 2c 20 75  ollSeq(Parse*, u
2b390 38 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f  8, CollSeq *, co
2b3a0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72  nst char*);.char
2b3b0 20 73 71 6c 69 74 65 33 41 66 66 69 6e 69 74 79   sqlite3Affinity
2b3c0 54 79 70 65 28 63 6f 6e 73 74 20 63 68 61 72 2a  Type(const char*
2b3d0 2c 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  , u8*);.void sql
2b3e0 69 74 65 33 41 6e 61 6c 79 7a 65 28 50 61 72 73  ite3Analyze(Pars
2b3f0 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  e*, Token*, Toke
2b400 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
2b410 49 6e 76 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65  InvokeBusyHandle
2b420 72 28 42 75 73 79 48 61 6e 64 6c 65 72 2a 29 3b  r(BusyHandler*);
2b430 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64  .int sqlite3Find
2b440 44 62 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b  Db(sqlite3*, Tok
2b450 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
2b460 33 46 69 6e 64 44 62 4e 61 6d 65 28 73 71 6c 69  3FindDbName(sqli
2b470 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  te3 *, const cha
2b480 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  r *);.int sqlite
2b490 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 73 71  3AnalysisLoad(sq
2b4a0 6c 69 74 65 33 2a 2c 69 6e 74 20 69 44 42 29 3b  lite3*,int iDB);
2b4b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c  .void sqlite3Del
2b4c0 65 74 65 49 6e 64 65 78 53 61 6d 70 6c 65 73 28  eteIndexSamples(
2b4d0 73 71 6c 69 74 65 33 2a 2c 49 6e 64 65 78 2a 29  sqlite3*,Index*)
2b4e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
2b4f0 66 61 75 6c 74 52 6f 77 45 73 74 28 49 6e 64 65  faultRowEst(Inde
2b500 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  x*);.void sqlite
2b510 33 52 65 67 69 73 74 65 72 4c 69 6b 65 46 75 6e  3RegisterLikeFun
2b520 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 2c  ctions(sqlite3*,
2b530 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
2b540 65 33 49 73 4c 69 6b 65 46 75 6e 63 74 69 6f 6e  e3IsLikeFunction
2b550 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c  (sqlite3*,Expr*,
2b560 69 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f 69  int*,char*);.voi
2b570 64 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 43  d sqlite3SchemaC
2b580 6c 65 61 72 28 76 6f 69 64 20 2a 29 3b 0a 53 63  lear(void *);.Sc
2b590 68 65 6d 61 20 2a 73 71 6c 69 74 65 33 53 63 68  hema *sqlite3Sch
2b5a0 65 6d 61 47 65 74 28 73 71 6c 69 74 65 33 20 2a  emaGet(sqlite3 *
2b5b0 2c 20 42 74 72 65 65 20 2a 29 3b 0a 69 6e 74 20  , Btree *);.int 
2b5c0 73 71 6c 69 74 65 33 53 63 68 65 6d 61 54 6f 49  sqlite3SchemaToI
2b5d0 6e 64 65 78 28 73 71 6c 69 74 65 33 20 2a 64 62  ndex(sqlite3 *db
2b5e0 2c 20 53 63 68 65 6d 61 20 2a 29 3b 0a 4b 65 79  , Schema *);.Key
2b5f0 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79  Info *sqlite3Key
2b600 49 6e 66 6f 41 6c 6c 6f 63 28 73 71 6c 69 74 65  InfoAlloc(sqlite
2b610 33 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69  3*,int,int);.voi
2b620 64 20 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f  d sqlite3KeyInfo
2b630 55 6e 72 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b  Unref(KeyInfo*);
2b640 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65  .KeyInfo *sqlite
2b650 33 4b 65 79 49 6e 66 6f 52 65 66 28 4b 65 79 49  3KeyInfoRef(KeyI
2b660 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a  nfo*);.KeyInfo *
2b670 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 4f 66  sqlite3KeyInfoOf
2b680 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 49 6e  Index(Parse*, In
2b690 64 65 78 2a 29 3b 0a 23 69 66 64 65 66 20 53 51  dex*);.#ifdef SQ
2b6a0 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e 74 20 73  LITE_DEBUG.int s
2b6b0 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 49 73 57  qlite3KeyInfoIsW
2b6c0 72 69 74 65 61 62 6c 65 28 4b 65 79 49 6e 66 6f  riteable(KeyInfo
2b6d0 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73  *);.#endif.int s
2b6e0 71 6c 69 74 65 33 43 72 65 61 74 65 46 75 6e 63  qlite3CreateFunc
2b6f0 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73  (sqlite3 *, cons
2b700 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69  t char *, int, i
2b710 6e 74 2c 20 76 6f 69 64 20 2a 2c 0a 20 20 76 6f  nt, void *,.  vo
2b720 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63  id (*)(sqlite3_c
2b730 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
2b740 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20  te3_value **),. 
2b750 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65   void (*)(sqlite
2b760 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
2b770 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29  qlite3_value **)
2b780 2c 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74  , void (*)(sqlit
2b790 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20  e3_context*),.  
2b7a0 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a  FuncDestructor *
2b7b0 70 44 65 73 74 72 75 63 74 6f 72 0a 29 3b 0a 76  pDestructor.);.v
2b7c0 6f 69 64 20 73 71 6c 69 74 65 33 4f 6f 6d 46 61  oid sqlite3OomFa
2b7d0 75 6c 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  ult(sqlite3*);.v
2b7e0 6f 69 64 20 73 71 6c 69 74 65 33 4f 6f 6d 43 6c  oid sqlite3OomCl
2b7f0 65 61 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69  ear(sqlite3*);.i
2b800 6e 74 20 73 71 6c 69 74 65 33 41 70 69 45 78 69  nt sqlite3ApiExi
2b810 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69  t(sqlite3 *db, i
2b820 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2b830 4f 70 65 6e 54 65 6d 70 44 61 74 61 62 61 73 65  OpenTempDatabase
2b840 28 50 61 72 73 65 20 2a 29 3b 0a 0a 76 6f 69 64  (Parse *);..void
2b850 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
2b860 49 6e 69 74 28 53 74 72 41 63 63 75 6d 2a 2c 20  Init(StrAccum*, 
2b870 73 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a 2c  sqlite3*, char*,
2b880 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
2b890 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
2b8a0 41 70 70 65 6e 64 28 53 74 72 41 63 63 75 6d 2a  Append(StrAccum*
2b8b0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74  ,const char*,int
2b8c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
2b8d0 74 72 41 63 63 75 6d 41 70 70 65 6e 64 41 6c 6c  trAccumAppendAll
2b8e0 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74  (StrAccum*,const
2b8f0 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
2b900 6c 69 74 65 33 41 70 70 65 6e 64 43 68 61 72 28  lite3AppendChar(
2b910 53 74 72 41 63 63 75 6d 2a 2c 69 6e 74 2c 63 68  StrAccum*,int,ch
2b920 61 72 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  ar);.char *sqlit
2b930 65 33 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68  e3StrAccumFinish
2b940 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69  (StrAccum*);.voi
2b950 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75  d sqlite3StrAccu
2b960 6d 52 65 73 65 74 28 53 74 72 41 63 63 75 6d 2a  mReset(StrAccum*
2b970 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
2b980 65 6c 65 63 74 44 65 73 74 49 6e 69 74 28 53 65  electDestInit(Se
2b990 6c 65 63 74 44 65 73 74 2a 2c 69 6e 74 2c 69 6e  lectDest*,int,in
2b9a0 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  t);.Expr *sqlite
2b9b0 33 43 72 65 61 74 65 43 6f 6c 75 6d 6e 45 78 70  3CreateColumnExp
2b9c0 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 53 72 63  r(sqlite3 *, Src
2b9d0 4c 69 73 74 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  List *, int, int
2b9e0 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  );..void sqlite3
2b9f0 42 61 63 6b 75 70 52 65 73 74 61 72 74 28 73 71  BackupRestart(sq
2ba00 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 29 3b  lite3_backup *);
2ba10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63  .void sqlite3Bac
2ba20 6b 75 70 55 70 64 61 74 65 28 73 71 6c 69 74 65  kupUpdate(sqlite
2ba30 33 5f 62 61 63 6b 75 70 20 2a 2c 20 50 67 6e 6f  3_backup *, Pgno
2ba40 2c 20 63 6f 6e 73 74 20 75 38 20 2a 29 3b 0a 0a  , const u8 *);..
2ba50 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2ba60 4d 49 54 5f 53 55 42 51 55 45 52 59 0a 69 6e 74  MIT_SUBQUERY.int
2ba70 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63   sqlite3ExprChec
2ba80 6b 49 4e 28 50 61 72 73 65 2a 2c 20 45 78 70 72  kIN(Parse*, Expr
2ba90 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
2baa0 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72 43 68  ne sqlite3ExprCh
2bab0 65 63 6b 49 4e 28 78 2c 79 29 20 53 51 4c 49 54  eckIN(x,y) SQLIT
2bac0 45 5f 4f 4b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  E_OK.#endif..#if
2bad0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
2bae0 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34  E_STAT3_OR_STAT4
2baf0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e 61  .void sqlite3Ana
2bb00 6c 79 7a 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f  lyzeFunctions(vo
2bb10 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  id);.int sqlite3
2bb20 53 74 61 74 34 50 72 6f 62 65 53 65 74 56 61 6c  Stat4ProbeSetVal
2bb30 75 65 28 0a 20 20 20 20 50 61 72 73 65 2a 2c 49  ue(.    Parse*,I
2bb40 6e 64 65 78 2a 2c 55 6e 70 61 63 6b 65 64 52 65  ndex*,UnpackedRe
2bb50 63 6f 72 64 2a 2a 2c 45 78 70 72 2a 2c 69 6e 74  cord**,Expr*,int
2bb60 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 69 6e 74 20  ,int,int*);.int 
2bb70 73 71 6c 69 74 65 33 53 74 61 74 34 56 61 6c 75  sqlite3Stat4Valu
2bb80 65 46 72 6f 6d 45 78 70 72 28 50 61 72 73 65 2a  eFromExpr(Parse*
2bb90 2c 20 45 78 70 72 2a 2c 20 75 38 2c 20 73 71 6c  , Expr*, u8, sql
2bba0 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 76  ite3_value**);.v
2bbb0 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 34  oid sqlite3Stat4
2bbc0 50 72 6f 62 65 46 72 65 65 28 55 6e 70 61 63 6b  ProbeFree(Unpack
2bbd0 65 64 52 65 63 6f 72 64 2a 29 3b 0a 69 6e 74 20  edRecord*);.int 
2bbe0 73 71 6c 69 74 65 33 53 74 61 74 34 43 6f 6c 75  sqlite3Stat4Colu
2bbf0 6d 6e 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e  mn(sqlite3*, con
2bc00 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 69  st void*, int, i
2bc10 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  nt, sqlite3_valu
2bc20 65 2a 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74  e**);.char sqlit
2bc30 65 33 49 6e 64 65 78 43 6f 6c 75 6d 6e 41 66 66  e3IndexColumnAff
2bc40 69 6e 69 74 79 28 73 71 6c 69 74 65 33 2a 2c 20  inity(sqlite3*, 
2bc50 49 6e 64 65 78 2a 2c 20 69 6e 74 29 3b 0a 23 65  Index*, int);.#e
2bc60 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
2bc70 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68 65  interface to the
2bc80 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61 74 65 64   LEMON-generated
2bc90 20 70 61 72 73 65 72 0a 2a 2f 0a 23 69 66 6e 64   parser.*/.#ifnd
2bca0 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41  ef SQLITE_AMALGA
2bcb0 4d 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20 2a 73  MATION.  void *s
2bcc0 71 6c 69 74 65 33 50 61 72 73 65 72 41 6c 6c 6f  qlite3ParserAllo
2bcd0 63 28 76 6f 69 64 2a 28 2a 29 28 75 36 34 29 29  c(void*(*)(u64))
2bce0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2bcf0 50 61 72 73 65 72 46 72 65 65 28 76 6f 69 64 2a  ParserFree(void*
2bd00 2c 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29  , void(*)(void*)
2bd10 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  );.#endif.void s
2bd20 71 6c 69 74 65 33 50 61 72 73 65 72 28 76 6f 69  qlite3Parser(voi
2bd30 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2c 20  d*, int, Token, 
2bd40 50 61 72 73 65 2a 29 3b 0a 23 69 66 64 65 66 20  Parse*);.#ifdef 
2bd50 59 59 54 52 41 43 4b 4d 41 58 53 54 41 43 4b 44  YYTRACKMAXSTACKD
2bd60 45 50 54 48 0a 20 20 69 6e 74 20 73 71 6c 69 74  EPTH.  int sqlit
2bd70 65 33 50 61 72 73 65 72 53 74 61 63 6b 50 65 61  e3ParserStackPea
2bd80 6b 28 76 6f 69 64 2a 29 3b 0a 23 65 6e 64 69 66  k(void*);.#endif
2bd90 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75  ..void sqlite3Au
2bda0 74 6f 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 73  toLoadExtensions
2bdb0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 69 66 6e  (sqlite3*);.#ifn
2bdc0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2bdd0 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20  LOAD_EXTENSION. 
2bde0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f   void sqlite3Clo
2bdf0 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c  seExtensions(sql
2be00 69 74 65 33 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  ite3*);.#else.# 
2be10 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6c  define sqlite3Cl
2be20 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 58 29  oseExtensions(X)
2be30 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
2be40 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41   SQLITE_OMIT_SHA
2be50 52 45 44 5f 43 41 43 48 45 0a 20 20 76 6f 69 64  RED_CACHE.  void
2be60 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63   sqlite3TableLoc
2be70 6b 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 2c 20  k(Parse *, int, 
2be80 69 6e 74 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63  int, u8, const c
2be90 68 61 72 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20  har *);.#else.  
2bea0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54  #define sqlite3T
2beb0 61 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c 79  ableLock(v,w,x,y
2bec0 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  ,z).#endif..#ifd
2bed0 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
2bee0 20 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38   int sqlite3Utf8
2bef0 54 6f 38 28 75 6e 73 69 67 6e 65 64 20 63 68 61  To8(unsigned cha
2bf00 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  r*);.#endif..#if
2bf10 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2bf20 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20  VIRTUALTABLE.#  
2bf30 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
2bf40 61 62 43 6c 65 61 72 28 59 29 0a 23 20 20 64 65  abClear(Y).#  de
2bf50 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
2bf60 53 79 6e 63 28 58 2c 59 29 20 53 51 4c 49 54 45  Sync(X,Y) SQLITE
2bf70 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73 71  _OK.#  define sq
2bf80 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63  lite3VtabRollbac
2bf90 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73  k(X).#  define s
2bfa0 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74  qlite3VtabCommit
2bfb0 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (X).#  define sq
2bfc0 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28  lite3VtabInSync(
2bfd0 64 62 29 20 30 0a 23 20 20 64 65 66 69 6e 65 20  db) 0.#  define 
2bfe0 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28  sqlite3VtabLock(
2bff0 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  X).#  define sql
2c000 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 58  ite3VtabUnlock(X
2c010 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
2c020 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73  te3VtabUnlockLis
2c030 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73  t(X).#  define s
2c040 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f  qlite3VtabSavepo
2c050 69 6e 74 28 58 2c 20 59 2c 20 5a 29 20 53 51 4c  int(X, Y, Z) SQL
2c060 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65  ITE_OK.#  define
2c070 20 73 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c   sqlite3GetVTabl
2c080 65 28 58 2c 59 29 20 20 28 28 56 54 61 62 6c 65  e(X,Y)  ((VTable
2c090 2a 29 30 29 0a 23 65 6c 73 65 0a 20 20 20 76 6f  *)0).#else.   vo
2c0a0 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c  id sqlite3VtabCl
2c0b0 65 61 72 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  ear(sqlite3 *db,
2c0c0 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20 76 6f 69   Table*);.   voi
2c0d0 64 20 73 71 6c 69 74 65 33 56 74 61 62 44 69 73  d sqlite3VtabDis
2c0e0 63 6f 6e 6e 65 63 74 28 73 71 6c 69 74 65 33 20  connect(sqlite3 
2c0f0 2a 64 62 2c 20 54 61 62 6c 65 20 2a 70 29 3b 0a  *db, Table *p);.
2c100 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74     int sqlite3Vt
2c110 61 62 53 79 6e 63 28 73 71 6c 69 74 65 33 20 2a  abSync(sqlite3 *
2c120 64 62 2c 20 56 64 62 65 2a 29 3b 0a 20 20 20 69  db, Vdbe*);.   i
2c130 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f  nt sqlite3VtabRo
2c140 6c 6c 62 61 63 6b 28 73 71 6c 69 74 65 33 20 2a  llback(sqlite3 *
2c150 64 62 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69  db);.   int sqli
2c160 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 73 71  te3VtabCommit(sq
2c170 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 76  lite3 *db);.   v
2c180 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 4c  oid sqlite3VtabL
2c190 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20  ock(VTable *);. 
2c1a0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
2c1b0 61 62 55 6e 6c 6f 63 6b 28 56 54 61 62 6c 65 20  abUnlock(VTable 
2c1c0 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  *);.   void sqli
2c1d0 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73  te3VtabUnlockLis
2c1e0 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20 20  t(sqlite3*);.   
2c1f0 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 53  int sqlite3VtabS
2c200 61 76 65 70 6f 69 6e 74 28 73 71 6c 69 74 65 33  avepoint(sqlite3
2c210 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20   *, int, int);. 
2c220 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
2c230 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 56  abImportErrmsg(V
2c240 64 62 65 2a 2c 20 73 71 6c 69 74 65 33 5f 76 74  dbe*, sqlite3_vt
2c250 61 62 2a 29 3b 0a 20 20 20 56 54 61 62 6c 65 20  ab*);.   VTable 
2c260 2a 73 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c  *sqlite3GetVTabl
2c270 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c  e(sqlite3*, Tabl
2c280 65 2a 29 3b 0a 20 20 20 4d 6f 64 75 6c 65 20 2a  e*);.   Module *
2c290 73 71 6c 69 74 65 33 56 74 61 62 43 72 65 61 74  sqlite3VtabCreat
2c2a0 65 4d 6f 64 75 6c 65 28 0a 20 20 20 20 20 73 71  eModule(.     sq
2c2b0 6c 69 74 65 33 2a 2c 0a 20 20 20 20 20 63 6f 6e  lite3*,.     con
2c2c0 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 63  st char*,.     c
2c2d0 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64  onst sqlite3_mod
2c2e0 75 6c 65 2a 2c 0a 20 20 20 20 20 76 6f 69 64 2a  ule*,.     void*
2c2f0 2c 0a 20 20 20 20 20 76 6f 69 64 28 2a 29 28 76  ,.     void(*)(v
2c300 6f 69 64 2a 29 0a 20 20 20 29 3b 0a 23 20 20 64  oid*).   );.#  d
2c310 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
2c320 62 49 6e 53 79 6e 63 28 64 62 29 20 28 28 64 62  bInSync(db) ((db
2c330 29 2d 3e 6e 56 54 72 61 6e 73 3e 30 20 26 26 20  )->nVTrans>0 && 
2c340 28 64 62 29 2d 3e 61 56 54 72 61 6e 73 3d 3d 30  (db)->aVTrans==0
2c350 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c  ).#endif.int sql
2c360 69 74 65 33 56 74 61 62 45 70 6f 6e 79 6d 6f 75  ite3VtabEponymou
2c370 73 54 61 62 6c 65 49 6e 69 74 28 50 61 72 73 65  sTableInit(Parse
2c380 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69 64  *,Module*);.void
2c390 20 73 71 6c 69 74 65 33 56 74 61 62 45 70 6f 6e   sqlite3VtabEpon
2c3a0 79 6d 6f 75 73 54 61 62 6c 65 43 6c 65 61 72 28  ymousTableClear(
2c3b0 73 71 6c 69 74 65 33 2a 2c 4d 6f 64 75 6c 65 2a  sqlite3*,Module*
2c3c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
2c3d0 74 61 62 4d 61 6b 65 57 72 69 74 61 62 6c 65 28  tabMakeWritable(
2c3e0 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a  Parse*,Table*);.
2c3f0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
2c400 42 65 67 69 6e 50 61 72 73 65 28 50 61 72 73 65  BeginParse(Parse
2c410 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
2c420 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b  *, Token*, int);
2c430 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
2c440 62 46 69 6e 69 73 68 50 61 72 73 65 28 50 61 72  bFinishParse(Par
2c450 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  se*, Token*);.vo
2c460 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 41 72  id sqlite3VtabAr
2c470 67 49 6e 69 74 28 50 61 72 73 65 2a 29 3b 0a 76  gInit(Parse*);.v
2c480 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 41  oid sqlite3VtabA
2c490 72 67 45 78 74 65 6e 64 28 50 61 72 73 65 2a 2c  rgExtend(Parse*,
2c4a0 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
2c4b0 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65  lite3VtabCallCre
2c4c0 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  ate(sqlite3*, in
2c4d0 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  t, const char *,
2c4e0 20 63 68 61 72 20 2a 2a 29 3b 0a 69 6e 74 20 73   char **);.int s
2c4f0 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 6f  qlite3VtabCallCo
2c500 6e 6e 65 63 74 28 50 61 72 73 65 2a 2c 20 54 61  nnect(Parse*, Ta
2c510 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ble*);.int sqlit
2c520 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72 6f  e3VtabCallDestro
2c530 79 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  y(sqlite3*, int,
2c540 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a   const char *);.
2c550 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 42  int sqlite3VtabB
2c560 65 67 69 6e 28 73 71 6c 69 74 65 33 20 2a 2c 20  egin(sqlite3 *, 
2c570 56 54 61 62 6c 65 20 2a 29 3b 0a 46 75 6e 63 44  VTable *);.FuncD
2c580 65 66 20 2a 73 71 6c 69 74 65 33 56 74 61 62 4f  ef *sqlite3VtabO
2c590 76 65 72 6c 6f 61 64 46 75 6e 63 74 69 6f 6e 28  verloadFunction(
2c5a0 73 71 6c 69 74 65 33 20 2a 2c 46 75 6e 63 44 65  sqlite3 *,FuncDe
2c5b0 66 2a 2c 20 69 6e 74 20 6e 41 72 67 2c 20 45 78  f*, int nArg, Ex
2c5c0 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
2c5d0 65 33 49 6e 76 61 6c 69 64 46 75 6e 63 74 69 6f  e3InvalidFunctio
2c5e0 6e 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  n(sqlite3_contex
2c5f0 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
2c600 61 6c 75 65 2a 2a 29 3b 0a 73 71 6c 69 74 65 33  alue**);.sqlite3
2c610 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74  _int64 sqlite3St
2c620 6d 74 43 75 72 72 65 6e 74 54 69 6d 65 28 73 71  mtCurrentTime(sq
2c630 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b  lite3_context*);
2c640 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65  .int sqlite3Vdbe
2c650 50 61 72 61 6d 65 74 65 72 49 6e 64 65 78 28 56  ParameterIndex(V
2c660 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  dbe*, const char
2c670 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
2c680 69 74 65 33 54 72 61 6e 73 66 65 72 42 69 6e 64  ite3TransferBind
2c690 69 6e 67 73 28 73 71 6c 69 74 65 33 5f 73 74 6d  ings(sqlite3_stm
2c6a0 74 20 2a 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d  t *, sqlite3_stm
2c6b0 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  t *);.void sqlit
2c6c0 65 33 50 61 72 73 65 72 52 65 73 65 74 28 50 61  e3ParserReset(Pa
2c6d0 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  rse*);.int sqlit
2c6e0 65 33 52 65 70 72 65 70 61 72 65 28 56 64 62 65  e3Reprepare(Vdbe
2c6f0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2c700 45 78 70 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e  ExprListCheckLen
2c710 67 74 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72  gth(Parse*, Expr
2c720 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61  List*, const cha
2c730 72 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  r*);.CollSeq *sq
2c740 6c 69 74 65 33 42 69 6e 61 72 79 43 6f 6d 70 61  lite3BinaryCompa
2c750 72 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20  reCollSeq(Parse 
2c760 2a 2c 20 45 78 70 72 20 2a 2c 20 45 78 70 72 20  *, Expr *, Expr 
2c770 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  *);.int sqlite3T
2c780 65 6d 70 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73  empInMemory(cons
2c790 74 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e  t sqlite3*);.con
2c7a0 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
2c7b0 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28  JournalModename(
2c7c0 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  int);.#ifndef SQ
2c7d0 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
2c7e0 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b  int sqlite3Check
2c7f0 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20  point(sqlite3*, 
2c800 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20  int, int, int*, 
2c810 69 6e 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  int*);.  int sql
2c820 69 74 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f  ite3WalDefaultHo
2c830 6f 6b 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33  ok(void*,sqlite3
2c840 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  *,const char*,in
2c850 74 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  t);.#endif.#ifnd
2c860 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ef SQLITE_OMIT_C
2c870 54 45 0a 20 20 57 69 74 68 20 2a 73 71 6c 69 74  TE.  With *sqlit
2c880 65 33 57 69 74 68 41 64 64 28 50 61 72 73 65 2a  e3WithAdd(Parse*
2c890 2c 57 69 74 68 2a 2c 54 6f 6b 65 6e 2a 2c 45 78  ,With*,Token*,Ex
2c8a0 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 29  prList*,Select*)
2c8b0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2c8c0 57 69 74 68 44 65 6c 65 74 65 28 73 71 6c 69 74  WithDelete(sqlit
2c8d0 65 33 2a 2c 57 69 74 68 2a 29 3b 0a 20 20 76 6f  e3*,With*);.  vo
2c8e0 69 64 20 73 71 6c 69 74 65 33 57 69 74 68 50 75  id sqlite3WithPu
2c8f0 73 68 28 50 61 72 73 65 2a 2c 20 57 69 74 68 2a  sh(Parse*, With*
2c900 2c 20 75 38 29 3b 0a 23 65 6c 73 65 0a 23 64 65  , u8);.#else.#de
2c910 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68  fine sqlite3With
2c920 50 75 73 68 28 78 2c 79 2c 7a 29 0a 23 64 65 66  Push(x,y,z).#def
2c930 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68 44  ine sqlite3WithD
2c940 65 6c 65 74 65 28 78 2c 79 29 0a 23 65 6e 64 69  elete(x,y).#endi
2c950 66 0a 0a 2f 2a 20 44 65 63 6c 61 72 61 74 69 6f  f../* Declaratio
2c960 6e 73 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73  ns for functions
2c970 20 69 6e 20 66 6b 65 79 2e 63 2e 20 41 6c 6c 20   in fkey.c. All 
2c980 6f 66 20 74 68 65 73 65 20 61 72 65 20 72 65 70  of these are rep
2c990 6c 61 63 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d 6f  laced by.** no-o
2c9a0 70 20 6d 61 63 72 6f 73 20 69 66 20 4f 4d 49 54  p macros if OMIT
2c9b0 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73 20  _FOREIGN_KEY is 
2c9c0 64 65 66 69 6e 65 64 2e 20 49 6e 20 74 68 69 73  defined. In this
2c9d0 20 63 61 73 65 20 6e 6f 20 66 6f 72 65 69 67 6e   case no foreign
2c9e0 0a 2a 2a 20 6b 65 79 20 66 75 6e 63 74 69 6f 6e  .** key function
2c9f0 61 6c 69 74 79 20 69 73 20 61 76 61 69 6c 61 62  ality is availab
2ca00 6c 65 2e 20 49 66 20 4f 4d 49 54 5f 54 52 49 47  le. If OMIT_TRIG
2ca10 47 45 52 20 69 73 20 64 65 66 69 6e 65 64 20 62  GER is defined b
2ca20 75 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45 49  ut.** OMIT_FOREI
2ca30 47 4e 5f 4b 45 59 20 69 73 20 6e 6f 74 2c 20 6f  GN_KEY is not, o
2ca40 6e 6c 79 20 73 6f 6d 65 20 6f 66 20 74 68 65 20  nly some of the 
2ca50 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 6e 6f  functions are no
2ca60 2d 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20 74 68 69  -oped. In.** thi
2ca70 73 20 63 61 73 65 20 66 6f 72 65 69 67 6e 20 6b  s case foreign k
2ca80 65 79 73 20 61 72 65 20 70 61 72 73 65 64 2c 20  eys are parsed, 
2ca90 62 75 74 20 6e 6f 20 6f 74 68 65 72 20 66 75 6e  but no other fun
2caa0 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 0a 2a 2a  ctionality is.**
2cab0 20 70 72 6f 76 69 64 65 64 20 28 65 6e 66 6f 72   provided (enfor
2cac0 63 65 6d 65 6e 74 20 6f 66 20 46 4b 20 63 6f 6e  cement of FK con
2cad0 73 74 72 61 69 6e 74 73 20 72 65 71 75 69 72 65  straints require
2cae0 73 20 74 68 65 20 74 72 69 67 67 65 72 73 20 73  s the triggers s
2caf0 75 62 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a 23  ub-system)..*/.#
2cb00 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2cb10 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
2cb20 4b 45 59 29 20 26 26 20 21 64 65 66 69 6e 65 64  KEY) && !defined
2cb30 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49  (SQLITE_OMIT_TRI
2cb40 47 47 45 52 29 0a 20 20 76 6f 69 64 20 73 71 6c  GGER).  void sql
2cb50 69 74 65 33 46 6b 43 68 65 63 6b 28 50 61 72 73  ite3FkCheck(Pars
2cb60 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
2cb70 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29   int, int*, int)
2cb80 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2cb90 46 6b 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73  FkDropTable(Pars
2cba0 65 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54  e*, SrcList *, T
2cbb0 61 62 6c 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73  able*);.  void s
2cbc0 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28  qlite3FkActions(
2cbd0 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
2cbe0 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20  ExprList*, int, 
2cbf0 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 69 6e  int*, int);.  in
2cc00 74 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69  t sqlite3FkRequi
2cc10 72 65 64 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  red(Parse*, Tabl
2cc20 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a  e*, int*, int);.
2cc30 20 20 75 33 32 20 73 71 6c 69 74 65 33 46 6b 4f    u32 sqlite3FkO
2cc40 6c 64 6d 61 73 6b 28 50 61 72 73 65 2a 2c 20 54  ldmask(Parse*, T
2cc50 61 62 6c 65 2a 29 3b 0a 20 20 46 4b 65 79 20 2a  able*);.  FKey *
2cc60 73 71 6c 69 74 65 33 46 6b 52 65 66 65 72 65 6e  sqlite3FkReferen
2cc70 63 65 73 28 54 61 62 6c 65 20 2a 29 3b 0a 23 65  ces(Table *);.#e
2cc80 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
2cc90 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 61  lite3FkActions(a
2cca0 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64  ,b,c,d,e,f).  #d
2ccb0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 43  efine sqlite3FkC
2ccc0 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 2c 66  heck(a,b,c,d,e,f
2ccd0 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
2cce0 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 61  te3FkDropTable(a
2ccf0 2c 62 2c 63 29 0a 20 20 23 64 65 66 69 6e 65 20  ,b,c).  #define 
2cd00 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b  sqlite3FkOldmask
2cd10 28 61 2c 62 29 20 20 20 20 20 20 20 20 20 30 0a  (a,b)         0.
2cd20 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
2cd30 33 46 6b 52 65 71 75 69 72 65 64 28 61 2c 62 2c  3FkRequired(a,b,
2cd40 63 2c 64 29 20 20 20 20 30 0a 20 20 23 64 65 66  c,d)    0.  #def
2cd50 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65 66  ine sqlite3FkRef
2cd60 65 72 65 6e 63 65 73 28 61 29 20 20 20 20 20 20  erences(a)      
2cd70 20 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64    0.#endif.#ifnd
2cd80 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
2cd90 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20 76 6f 69  OREIGN_KEY.  voi
2cda0 64 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74  d sqlite3FkDelet
2cdb0 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 54 61 62  e(sqlite3 *, Tab
2cdc0 6c 65 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  le*);.  int sqli
2cdd0 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78  te3FkLocateIndex
2cde0 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 46  (Parse*,Table*,F
2cdf0 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69 6e 74  Key*,Index**,int
2ce00 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65  **);.#else.  #de
2ce10 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 65  fine sqlite3FkDe
2ce20 6c 65 74 65 28 61 2c 62 29 0a 20 20 23 64 65 66  lete(a,b).  #def
2ce30 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63  ine sqlite3FkLoc
2ce40 61 74 65 49 6e 64 65 78 28 61 2c 62 2c 63 2c 64  ateIndex(a,b,c,d
2ce50 2c 65 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a  ,e).#endif.../*.
2ce60 2a 2a 20 41 76 61 69 6c 61 62 6c 65 20 66 61 75  ** Available fau
2ce70 6c 74 20 69 6e 6a 65 63 74 6f 72 73 2e 20 20 53  lt injectors.  S
2ce80 68 6f 75 6c 64 20 62 65 20 6e 75 6d 62 65 72 65  hould be numbere
2ce90 64 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  d beginning with
2cea0 20 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53   0..*/.#define S
2ceb0 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43  QLITE_FAULTINJEC
2cec0 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 30  TOR_MALLOC     0
2ced0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
2cee0 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 43 4f  FAULTINJECTOR_CO
2cef0 55 4e 54 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a  UNT      1../*.*
2cf00 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20  * The interface 
2cf10 74 6f 20 74 68 65 20 63 6f 64 65 20 69 6e 20 66  to the code in f
2cf20 61 75 6c 74 2e 63 20 75 73 65 64 20 66 6f 72 20  ault.c used for 
2cf30 69 64 65 6e 74 69 66 79 69 6e 67 20 22 62 65 6e  identifying "ben
2cf40 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20 66  ign".** malloc f
2cf50 61 69 6c 75 72 65 73 2e 20 54 68 69 73 20 69 73  ailures. This is
2cf60 20 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20 69 66   only present if
2cf70 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42   SQLITE_UNTESTAB
2cf80 4c 45 0a 2a 2a 20 69 73 20 6e 6f 74 20 64 65 66  LE.** is not def
2cf90 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  ined..*/.#ifndef
2cfa0 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42   SQLITE_UNTESTAB
2cfb0 4c 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  LE.  void sqlite
2cfc0 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c  3BeginBenignMall
2cfd0 6f 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f 69 64  oc(void);.  void
2cfe0 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67   sqlite3EndBenig
2cff0 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 23  nMalloc(void);.#
2d000 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
2d010 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67  qlite3BeginBenig
2d020 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64 65 66  nMalloc().  #def
2d030 69 6e 65 20 73 71 6c 69 74 65 33 45 6e 64 42 65  ine sqlite3EndBe
2d040 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65 6e  nignMalloc().#en
2d050 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  dif../*.** Allow
2d060 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65 73  ed return values
2d070 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 46 69 6e   from sqlite3Fin
2d080 64 49 6e 49 6e 64 65 78 28 29 0a 2a 2f 0a 23 64  dInIndex().*/.#d
2d090 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 52  efine IN_INDEX_R
2d0a0 4f 57 49 44 20 20 20 20 20 20 20 20 31 20 20 20  OWID        1   
2d0b0 2f 2a 20 53 65 61 72 63 68 20 74 68 65 20 72 6f  /* Search the ro
2d0c0 77 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c 65  wid of the table
2d0d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
2d0e0 4e 44 45 58 5f 45 50 48 20 20 20 20 20 20 20 20  NDEX_EPH        
2d0f0 20 20 32 20 20 20 2f 2a 20 53 65 61 72 63 68 20    2   /* Search 
2d100 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 62 2d 74  an ephemeral b-t
2d110 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  ree */.#define I
2d120 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 41 53  N_INDEX_INDEX_AS
2d130 43 20 20 20 20 33 20 20 20 2f 2a 20 45 78 69 73  C    3   /* Exis
2d140 74 69 6e 67 20 69 6e 64 65 78 20 41 53 43 45 4e  ting index ASCEN
2d150 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65 20  DING */.#define 
2d160 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 44  IN_INDEX_INDEX_D
2d170 45 53 43 20 20 20 34 20 20 20 2f 2a 20 45 78 69  ESC   4   /* Exi
2d180 73 74 69 6e 67 20 69 6e 64 65 78 20 44 45 53 43  sting index DESC
2d190 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e  ENDING */.#defin
2d1a0 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20  e IN_INDEX_NOOP 
2d1b0 20 20 20 20 20 20 20 20 35 20 20 20 2f 2a 20 4e          5   /* N
2d1c0 6f 20 74 61 62 6c 65 20 61 76 61 69 6c 61 62 6c  o table availabl
2d1d0 65 2e 20 55 73 65 20 63 6f 6d 70 61 72 69 73 6f  e. Use compariso
2d1e0 6e 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  ns */./*.** Allo
2d1f0 77 65 64 20 66 6c 61 67 73 20 66 6f 72 20 74 68  wed flags for th
2d200 65 20 33 72 64 20 70 61 72 61 6d 65 74 65 72 20  e 3rd parameter 
2d210 74 6f 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e  to sqlite3FindIn
2d220 49 6e 64 65 78 28 29 2e 0a 2a 2f 0a 23 64 65 66  Index()..*/.#def
2d230 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f  ine IN_INDEX_NOO
2d240 50 5f 4f 4b 20 20 20 20 20 30 78 30 30 30 31 20  P_OK     0x0001 
2d250 20 2f 2a 20 4f 4b 20 74 6f 20 72 65 74 75 72 6e   /* OK to return
2d260 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 2a   IN_INDEX_NOOP *
2d270 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
2d280 45 58 5f 4d 45 4d 42 45 52 53 48 49 50 20 20 30  EX_MEMBERSHIP  0
2d290 78 30 30 30 32 20 20 2f 2a 20 49 4e 20 6f 70 65  x0002  /* IN ope
2d2a0 72 61 74 6f 72 20 75 73 65 64 20 66 6f 72 20 6d  rator used for m
2d2b0 65 6d 62 65 72 73 68 69 70 20 74 65 73 74 20 2a  embership test *
2d2c0 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
2d2d0 45 58 5f 4c 4f 4f 50 20 20 20 20 20 20 20 20 30  EX_LOOP        0
2d2e0 78 30 30 30 34 20 20 2f 2a 20 49 4e 20 6f 70 65  x0004  /* IN ope
2d2f0 72 61 74 6f 72 20 75 73 65 64 20 61 73 20 61 20  rator used as a 
2d300 6c 6f 6f 70 20 2a 2f 0a 69 6e 74 20 73 71 6c 69  loop */.int sqli
2d310 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 50  te3FindInIndex(P
2d320 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20  arse *, Expr *, 
2d330 75 33 32 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29  u32, int*, int*)
2d340 3b 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  ;..int sqlite3Jo
2d350 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65  urnalOpen(sqlite
2d360 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20 63  3_vfs *, const c
2d370 68 61 72 20 2a 2c 20 73 71 6c 69 74 65 33 5f 66  har *, sqlite3_f
2d380 69 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  ile *, int, int)
2d390 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75  ;.int sqlite3Jou
2d3a0 72 6e 61 6c 53 69 7a 65 28 73 71 6c 69 74 65 33  rnalSize(sqlite3
2d3b0 5f 76 66 73 20 2a 29 3b 0a 23 69 66 20 64 65 66  _vfs *);.#if def
2d3c0 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
2d3d0 4c 45 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 29  LE_ATOMIC_WRITE)
2d3e0 20 5c 0a 20 7c 7c 20 64 65 66 69 6e 65 64 28 53   \. || defined(S
2d3f0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 42 41 54  QLITE_ENABLE_BAT
2d400 43 48 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 29  CH_ATOMIC_WRITE)
2d410 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  .  int sqlite3Jo
2d420 75 72 6e 61 6c 43 72 65 61 74 65 28 73 71 6c 69  urnalCreate(sqli
2d430 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 23 65 6e  te3_file *);.#en
2d440 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33  dif..int sqlite3
2d450 4a 6f 75 72 6e 61 6c 49 73 49 6e 4d 65 6d 6f 72  JournalIsInMemor
2d460 79 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a  y(sqlite3_file *
2d470 70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  p);.void sqlite3
2d480 4d 65 6d 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73  MemJournalOpen(s
2d490 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a  qlite3_file *);.
2d4a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
2d4b0 72 53 65 74 48 65 69 67 68 74 41 6e 64 46 6c 61  rSetHeightAndFla
2d4c0 67 73 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  gs(Parse *pParse
2d4d0 2c 20 45 78 70 72 20 2a 70 29 3b 0a 23 69 66 20  , Expr *p);.#if 
2d4e0 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f  SQLITE_MAX_EXPR_
2d4f0 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 73 71  DEPTH>0.  int sq
2d500 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 72 48  lite3SelectExprH
2d510 65 69 67 68 74 28 53 65 6c 65 63 74 20 2a 29 3b  eight(Select *);
2d520 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 45 78  .  int sqlite3Ex
2d530 70 72 43 68 65 63 6b 48 65 69 67 68 74 28 50 61  prCheckHeight(Pa
2d540 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73  rse*, int);.#els
2d550 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
2d560 74 65 33 53 65 6c 65 63 74 45 78 70 72 48 65 69  te3SelectExprHei
2d570 67 68 74 28 78 29 20 30 0a 20 20 23 64 65 66 69  ght(x) 0.  #defi
2d580 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72 43 68  ne sqlite3ExprCh
2d590 65 63 6b 48 65 69 67 68 74 28 78 2c 79 29 0a 23  eckHeight(x,y).#
2d5a0 65 6e 64 69 66 0a 0a 75 33 32 20 73 71 6c 69 74  endif..u32 sqlit
2d5b0 65 33 47 65 74 34 62 79 74 65 28 63 6f 6e 73 74  e3Get4byte(const
2d5c0 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69   u8*);.void sqli
2d5d0 74 65 33 50 75 74 34 62 79 74 65 28 75 38 2a 2c  te3Put4byte(u8*,
2d5e0 20 75 33 32 29 3b 0a 0a 23 69 66 64 65 66 20 53   u32);..#ifdef S
2d5f0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c  QLITE_ENABLE_UNL
2d600 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 76 6f 69  OCK_NOTIFY.  voi
2d610 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  d sqlite3Connect
2d620 69 6f 6e 42 6c 6f 63 6b 65 64 28 73 71 6c 69 74  ionBlocked(sqlit
2d630 65 33 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 29  e3 *, sqlite3 *)
2d640 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2d650 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b  ConnectionUnlock
2d660 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b  ed(sqlite3 *db);
2d670 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
2d680 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28  onnectionClosed(
2d690 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 23 65  sqlite3 *db);.#e
2d6a0 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
2d6b0 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42  lite3ConnectionB
2d6c0 6c 6f 63 6b 65 64 28 78 2c 79 29 0a 20 20 23 64  locked(x,y).  #d
2d6d0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e  efine sqlite3Con
2d6e0 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28  nectionUnlocked(
2d6f0 78 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  x).  #define sql
2d700 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c  ite3ConnectionCl
2d710 6f 73 65 64 28 78 29 0a 23 65 6e 64 69 66 0a 0a  osed(x).#endif..
2d720 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
2d730 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  BUG.  void sqlit
2d740 65 33 50 61 72 73 65 72 54 72 61 63 65 28 46 49  e3ParserTrace(FI
2d750 4c 45 2a 2c 20 63 68 61 72 20 2a 29 3b 0a 23 65  LE*, char *);.#e
2d760 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74  ndif../*.** If t
2d770 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  he SQLITE_ENABLE
2d780 20 49 4f 54 52 41 43 45 20 65 78 69 73 74 73 20   IOTRACE exists 
2d790 74 68 65 6e 20 74 68 65 20 67 6c 6f 62 61 6c 20  then the global 
2d7a0 76 61 72 69 61 62 6c 65 0a 2a 2a 20 73 71 6c 69  variable.** sqli
2d7b0 74 65 33 49 6f 54 72 61 63 65 20 69 73 20 61 20  te3IoTrace is a 
2d7c0 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 70 72 69  pointer to a pri
2d7d0 6e 74 66 2d 6c 69 6b 65 20 72 6f 75 74 69 6e 65  ntf-like routine
2d7e0 20 75 73 65 64 20 74 6f 0a 2a 2a 20 70 72 69 6e   used to.** prin
2d7f0 74 20 49 2f 4f 20 74 72 61 63 69 6e 67 20 6d 65  t I/O tracing me
2d800 73 73 61 67 65 73 2e 0a 2a 2f 0a 23 69 66 64 65  ssages..*/.#ifde
2d810 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
2d820 49 4f 54 52 41 43 45 0a 23 20 64 65 66 69 6e 65  IOTRACE.# define
2d830 20 49 4f 54 52 41 43 45 28 41 29 20 20 69 66 28   IOTRACE(A)  if(
2d840 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20   sqlite3IoTrace 
2d850 29 7b 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63  ){ sqlite3IoTrac
2d860 65 20 41 3b 20 7d 0a 20 20 76 6f 69 64 20 73 71  e A; }.  void sq
2d870 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61 63 65  lite3VdbeIOTrace
2d880 53 71 6c 28 56 64 62 65 2a 29 3b 0a 53 51 4c 49  Sql(Vdbe*);.SQLI
2d890 54 45 5f 41 50 49 20 53 51 4c 49 54 45 5f 45 58  TE_API SQLITE_EX
2d8a0 54 45 52 4e 20 76 6f 69 64 20 28 53 51 4c 49 54  TERN void (SQLIT
2d8b0 45 5f 43 44 45 43 4c 20 2a 73 71 6c 69 74 65 33  E_CDECL *sqlite3
2d8c0 49 6f 54 72 61 63 65 29 28 63 6f 6e 73 74 20 63  IoTrace)(const c
2d8d0 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c 73 65  har*,...);.#else
2d8e0 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43  .# define IOTRAC
2d8f0 45 28 41 29 0a 23 20 64 65 66 69 6e 65 20 73 71  E(A).# define sq
2d900 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61 63 65  lite3VdbeIOTrace
2d910 53 71 6c 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f  Sql(X).#endif../
2d920 2a 0a 2a 2a 20 54 68 65 73 65 20 72 6f 75 74 69  *.** These routi
2d930 6e 65 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c  nes are availabl
2d940 65 20 66 6f 72 20 74 68 65 20 6d 65 6d 32 2e 63  e for the mem2.c
2d950 20 64 65 62 75 67 67 69 6e 67 20 6d 65 6d 6f 72   debugging memor
2d960 79 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20 6f  y allocator.** o
2d970 6e 6c 79 2e 20 20 54 68 65 79 20 61 72 65 20 75  nly.  They are u
2d980 73 65 64 20 74 6f 20 76 65 72 69 66 79 20 74 68  sed to verify th
2d990 61 74 20 64 69 66 66 65 72 65 6e 74 20 22 74 79  at different "ty
2d9a0 70 65 73 22 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a  pes" of memory.*
2d9b0 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72  * allocations ar
2d9c0 65 20 70 72 6f 70 65 72 6c 79 20 74 72 61 63 6b  e properly track
2d9d0 65 64 20 62 79 20 74 68 65 20 73 79 73 74 65 6d  ed by the system
2d9e0 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d  ..**.** sqlite3M
2d9f0 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29  emdebugSetType()
2da00 20 73 65 74 73 20 74 68 65 20 22 74 79 70 65 22   sets the "type"
2da10 20 6f 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f   of an allocatio
2da20 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a 2a 2a 20 74  n to one of.** t
2da30 68 65 20 4d 45 4d 54 59 50 45 5f 2a 20 6d 61 63  he MEMTYPE_* mac
2da40 72 6f 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f  ros defined belo
2da50 77 2e 20 20 54 68 65 20 74 79 70 65 20 6d 75 73  w.  The type mus
2da60 74 20 62 65 20 61 20 62 69 74 6d 61 73 6b 20 77  t be a bitmask w
2da70 69 74 68 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20  ith.** a single 
2da80 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 73  bit set..**.** s
2da90 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61  qlite3MemdebugHa
2daa0 73 54 79 70 65 28 29 20 72 65 74 75 72 6e 73 20  sType() returns 
2dab0 74 72 75 65 20 69 66 20 61 6e 79 20 6f 66 20 74  true if any of t
2dac0 68 65 20 62 69 74 73 20 69 6e 20 69 74 73 20 73  he bits in its s
2dad0 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e  econd.** argumen
2dae0 74 20 6d 61 74 63 68 20 74 68 65 20 74 79 70 65  t match the type
2daf0 20 73 65 74 20 62 79 20 74 68 65 20 70 72 65 76   set by the prev
2db00 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64  ious sqlite3Memd
2db10 65 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a  ebugSetType()..*
2db20 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  * sqlite3Memdebu
2db30 67 48 61 73 54 79 70 65 28 29 20 69 73 20 69 6e  gHasType() is in
2db40 74 65 6e 64 65 64 20 66 6f 72 20 75 73 65 20 69  tended for use i
2db50 6e 73 69 64 65 20 61 73 73 65 72 74 28 29 20 73  nside assert() s
2db60 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a  tatements..**.**
2db70 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
2db80 4e 6f 54 79 70 65 28 29 20 72 65 74 75 72 6e 73  NoType() returns
2db90 20 74 72 75 65 20 69 66 20 6e 6f 6e 65 20 6f 66   true if none of
2dba0 20 74 68 65 20 62 69 74 73 20 69 6e 20 69 74 73   the bits in its
2dbb0 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d   second.** argum
2dbc0 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74 79  ent match the ty
2dbd0 70 65 20 73 65 74 20 62 79 20 74 68 65 20 70 72  pe set by the pr
2dbe0 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65  evious sqlite3Me
2dbf0 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29 2e  mdebugSetType().
2dc00 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61 70 73 20 74  .**.** Perhaps t
2dc10 68 65 20 6d 6f 73 74 20 69 6d 70 6f 72 74 61 6e  he most importan
2dc20 74 20 70 6f 69 6e 74 20 69 73 20 74 68 65 20 64  t point is the d
2dc30 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65  ifference betwee
2dc40 6e 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 0a 2a  n MEMTYPE_HEAP.*
2dc50 2a 20 61 6e 64 20 4d 45 4d 54 59 50 45 5f 4c 4f  * and MEMTYPE_LO
2dc60 4f 4b 41 53 49 44 45 2e 20 20 49 66 20 61 6e 20  OKASIDE.  If an 
2dc70 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 73 20 4d 45  allocation is ME
2dc80 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2c  MTYPE_LOOKASIDE,
2dc90 20 74 68 61 74 20 6d 65 61 6e 73 0a 2a 2a 20 69   that means.** i
2dca0 74 20 6d 69 67 68 74 20 68 61 76 65 20 62 65 65  t might have bee
2dcb0 6e 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 6c  n allocated by l
2dcc0 6f 6f 6b 61 73 69 64 65 2c 20 65 78 63 65 70 74  ookaside, except
2dcd0 20 74 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 20   the allocation 
2dce0 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67 65  was.** too large
2dcf0 20 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 20 77 61   or lookaside wa
2dd00 73 20 61 6c 72 65 61 64 79 20 66 75 6c 6c 2e 20  s already full. 
2dd10 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74   It is important
2dd20 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74 68   to verify.** th
2dd30 61 74 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 74  at allocations t
2dd40 68 61 74 20 6d 69 67 68 74 20 68 61 76 65 20 62  hat might have b
2dd50 65 65 6e 20 73 61 74 69 73 66 69 65 64 20 62 79  een satisfied by
2dd60 20 6c 6f 6f 6b 61 73 69 64 65 20 61 72 65 20 6e   lookaside are n
2dd70 6f 74 0a 2a 2a 20 70 61 73 73 65 64 20 62 61 63  ot.** passed bac
2dd80 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69  k to non-lookasi
2dd90 64 65 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e  de free() routin
2dda0 65 73 2e 20 20 41 73 73 65 72 74 73 20 73 75 63  es.  Asserts suc
2ddb0 68 20 61 73 20 74 68 65 0a 2a 2a 20 65 78 61 6d  h as the.** exam
2ddc0 70 6c 65 20 61 62 6f 76 65 20 61 72 65 20 70 6c  ple above are pl
2ddd0 61 63 65 64 20 6f 6e 20 74 68 65 20 6e 6f 6e 2d  aced on the non-
2dde0 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28 29  lookaside free()
2ddf0 20 72 6f 75 74 69 6e 65 73 20 74 6f 20 76 65 72   routines to ver
2de00 69 66 79 0a 2a 2a 20 74 68 69 73 20 63 6f 6e 73  ify.** this cons
2de10 74 72 61 69 6e 74 2e 0a 2a 2a 0a 2a 2a 20 41 6c  traint..**.** Al
2de20 6c 20 6f 66 20 74 68 69 73 20 69 73 20 6e 6f 2d  l of this is no-
2de30 6f 70 20 66 6f 72 20 61 20 70 72 6f 64 75 63 74  op for a product
2de40 69 6f 6e 20 62 75 69 6c 64 2e 20 20 49 74 20 6f  ion build.  It o
2de50 6e 6c 79 20 63 6f 6d 65 73 20 69 6e 74 6f 0a 2a  nly comes into.*
2de60 2a 20 70 6c 61 79 20 77 68 65 6e 20 74 68 65 20  * play when the 
2de70 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20  SQLITE_MEMDEBUG 
2de80 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
2de90 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a  ion is used..*/.
2dea0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4d 45  #ifdef SQLITE_ME
2deb0 4d 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71  MDEBUG.  void sq
2dec0 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74  lite3MemdebugSet
2ded0 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a  Type(void*,u8);.
2dee0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d    int sqlite3Mem
2def0 64 65 62 75 67 48 61 73 54 79 70 65 28 76 6f 69  debugHasType(voi
2df00 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71  d*,u8);.  int sq
2df10 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54  lite3MemdebugNoT
2df20 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 23  ype(void*,u8);.#
2df30 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
2df40 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74  lite3MemdebugSet
2df50 54 79 70 65 28 58 2c 59 29 20 20 2f 2a 20 6e 6f  Type(X,Y)  /* no
2df60 2d 6f 70 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20  -op */.# define 
2df70 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48  sqlite3MemdebugH
2df80 61 73 54 79 70 65 28 58 2c 59 29 20 20 31 0a 23  asType(X,Y)  1.#
2df90 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d   define sqlite3M
2dfa0 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 58 2c  emdebugNoType(X,
2dfb0 59 29 20 20 20 31 0a 23 65 6e 64 69 66 0a 23 64  Y)   1.#endif.#d
2dfc0 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 48 45  efine MEMTYPE_HE
2dfd0 41 50 20 20 20 20 20 20 20 30 78 30 31 20 20 2f  AP       0x01  /
2dfe0 2a 20 47 65 6e 65 72 61 6c 20 68 65 61 70 20 61  * General heap a
2dff0 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64  llocations */.#d
2e000 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 4c 4f  efine MEMTYPE_LO
2e010 4f 4b 41 53 49 44 45 20 20 30 78 30 32 20 20 2f  OKASIDE  0x02  /
2e020 2a 20 48 65 61 70 20 74 68 61 74 20 6d 69 67 68  * Heap that migh
2e030 74 20 68 61 76 65 20 62 65 65 6e 20 6c 6f 6f 6b  t have been look
2e040 61 73 69 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65  aside */.#define
2e050 20 4d 45 4d 54 59 50 45 5f 50 43 41 43 48 45 20   MEMTYPE_PCACHE 
2e060 20 20 20 20 30 78 30 34 20 20 2f 2a 20 50 61 67      0x04  /* Pag
2e070 65 20 63 61 63 68 65 20 61 6c 6c 6f 63 61 74 69  e cache allocati
2e080 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68  ons */../*.** Th
2e090 72 65 61 64 69 6e 67 20 69 6e 74 65 72 66 61 63  reading interfac
2e0a0 65 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f  e.*/.#if SQLITE_
2e0b0 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  MAX_WORKER_THREA
2e0c0 44 53 3e 30 0a 69 6e 74 20 73 71 6c 69 74 65 33  DS>0.int sqlite3
2e0d0 54 68 72 65 61 64 43 72 65 61 74 65 28 53 51 4c  ThreadCreate(SQL
2e0e0 69 74 65 54 68 72 65 61 64 2a 2a 2c 76 6f 69 64  iteThread**,void
2e0f0 2a 28 2a 29 28 76 6f 69 64 2a 29 2c 76 6f 69 64  *(*)(void*),void
2e100 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  *);.int sqlite3T
2e110 68 72 65 61 64 4a 6f 69 6e 28 53 51 4c 69 74 65  hreadJoin(SQLite
2e120 54 68 72 65 61 64 2a 2c 20 76 6f 69 64 2a 2a 29  Thread*, void**)
2e130 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65  ;.#endif..#if de
2e140 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
2e150 42 4c 45 5f 44 42 53 54 41 54 5f 56 54 41 42 29  BLE_DBSTAT_VTAB)
2e160 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
2e170 54 45 5f 54 45 53 54 29 0a 69 6e 74 20 73 71 6c  TE_TEST).int sql
2e180 69 74 65 33 44 62 73 74 61 74 52 65 67 69 73 74  ite3DbstatRegist
2e190 65 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65  er(sqlite3*);.#e
2e1a0 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65  ndif..int sqlite
2e1b0 33 45 78 70 72 56 65 63 74 6f 72 53 69 7a 65 28  3ExprVectorSize(
2e1c0 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e  Expr *pExpr);.in
2e1d0 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 56  t sqlite3ExprIsV
2e1e0 65 63 74 6f 72 28 45 78 70 72 20 2a 70 45 78 70  ector(Expr *pExp
2e1f0 72 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  r);.Expr *sqlite
2e200 33 56 65 63 74 6f 72 46 69 65 6c 64 53 75 62 65  3VectorFieldSube
2e210 78 70 72 28 45 78 70 72 2a 2c 20 69 6e 74 29 3b  xpr(Expr*, int);
2e220 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
2e230 70 72 46 6f 72 56 65 63 74 6f 72 46 69 65 6c 64  prForVectorField
2e240 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 69 6e  (Parse*,Expr*,in
2e250 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2e260 56 65 63 74 6f 72 45 72 72 6f 72 4d 73 67 28 50  VectorErrorMsg(P
2e270 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 0a  arse*, Expr*);..
2e280 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2e290 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f  MIT_COMPILEOPTIO
2e2a0 4e 5f 44 49 41 47 53 0a 63 6f 6e 73 74 20 63 68  N_DIAGS.const ch
2e2b0 61 72 20 2a 2a 73 71 6c 69 74 65 33 43 6f 6d 70  ar **sqlite3Comp
2e2c0 69 6c 65 4f 70 74 69 6f 6e 73 28 69 6e 74 20 2a  ileOptions(int *
2e2d0 70 6e 4f 70 74 29 3b 0a 23 65 6e 64 69 66 0a 0a  pnOpt);.#endif..
2e2e0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
2e2f0 49 4e 54 5f 48 20 2a 2f 0a                       INT_H */.