/ Hex Artifact Content
Login

Artifact 7a4cf01ef33c0df033104b4caaf97c59497624f9:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 53 51 4c 49 54 45 49 4e 54 5f 48 0a 23  ef SQLITEINT_H.#
01c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 49 4e 54  define SQLITEINT
01d0: 5f 48 0a 0a 2f 2a 20 53 70 65 63 69 61 6c 20 43  _H../* Special C
01e0: 6f 6d 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 53  omments:.**.** S
01f0: 6f 6d 65 20 63 6f 6d 6d 65 6e 74 73 20 68 61 76  ome comments hav
0200: 65 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  e special meanin
0210: 67 20 74 6f 20 74 68 65 20 74 6f 6f 6c 73 20 74  g to the tools t
0220: 68 61 74 20 6d 65 61 73 75 72 65 20 74 65 73 74  hat measure test
0230: 0a 2a 2a 20 63 6f 76 65 72 61 67 65 3a 0a 2a 2a  .** coverage:.**
0240: 0a 2a 2a 20 20 20 20 4e 4f 5f 54 45 53 54 20 20  .**    NO_TEST  
0250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0260: 20 20 20 2d 20 54 68 65 20 62 72 61 6e 63 68 65     - The branche
0270: 73 20 6f 6e 20 74 68 69 73 20 6c 69 6e 65 20 61  s on this line a
0280: 72 65 20 6e 6f 74 0a 2a 2a 20 20 20 20 20 20 20  re not.**       
0290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02a0: 20 20 20 20 20 20 20 20 20 20 20 6d 65 61 73 75             measu
02b0: 72 65 64 20 62 79 20 62 72 61 6e 63 68 20 63 6f  red by branch co
02c0: 76 65 72 61 67 65 2e 20 20 54 68 69 73 20 69 73  verage.  This is
02d0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
02e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02f0: 20 20 20 20 20 75 73 65 64 20 6f 6e 20 6c 69 6e       used on lin
0300: 65 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  es of code that 
0310: 61 63 74 75 61 6c 6c 79 0a 2a 2a 20 20 20 20 20  actually.**     
0320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0330: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6d 70               imp
0340: 6c 65 6d 65 6e 74 20 70 61 72 74 73 20 6f 66 20  lement parts of 
0350: 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67  coverage testing
0360: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d  ..**.**    OPTIM
0370: 49 5a 41 54 49 4f 4e 2d 49 46 2d 54 52 55 45 20  IZATION-IF-TRUE 
0380: 20 20 20 20 20 20 20 2d 20 54 68 69 73 20 62 72         - This br
0390: 61 6e 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20  anch is allowed 
03a0: 74 6f 20 61 6c 77 61 79 20 62 65 20 66 61 6c 73  to alway be fals
03b0: 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
03c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03d0: 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 63 6f        and the co
03e0: 72 72 65 63 74 20 61 6e 73 77 65 72 20 69 73 20  rrect answer is 
03f0: 73 74 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a  still obtained,.
0400: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
0410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0420: 20 20 20 20 74 68 6f 75 67 68 20 70 65 72 68 61      though perha
0430: 70 73 20 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a  ps more slowly..
0440: 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d 49 5a  **.**    OPTIMIZ
0450: 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 20 20  ATION-IF-FALSE  
0460: 20 20 20 20 20 2d 20 54 68 69 73 20 62 72 61 6e       - This bran
0470: 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f  ch is allowed to
0480: 20 61 6c 77 61 79 20 62 65 20 74 72 75 65 0a 2a   alway be true.*
0490: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
04a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04b0: 20 20 20 61 6e 64 20 74 68 65 20 63 6f 72 72 65     and the corre
04c0: 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74 69  ct answer is sti
04d0: 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a 2a 2a 20  ll obtained,.** 
04e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0500: 20 74 68 6f 75 67 68 20 70 65 72 68 61 70 73 20   though perhaps 
0510: 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a 2a 2a 0a  more slowly..**.
0520: 2a 2a 20 20 20 20 50 52 45 56 45 4e 54 53 2d 48  **    PREVENTS-H
0530: 41 52 4d 4c 45 53 53 2d 4f 56 45 52 52 45 41 44  ARMLESS-OVERREAD
0540: 20 20 2d 20 54 68 69 73 20 62 72 61 6e 63 68 20    - This branch 
0550: 70 72 65 76 65 6e 74 73 20 61 20 62 75 66 66 65  prevents a buffe
0560: 72 20 6f 76 65 72 72 65 61 64 0a 2a 2a 20 20 20  r overread.**   
0570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
0590: 68 61 74 20 77 6f 75 6c 64 20 62 65 20 68 61 72  hat would be har
05a0: 6d 6c 65 73 73 20 61 6e 64 20 75 6e 64 65 74 65  mless and undete
05b0: 63 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20  ctable.**       
05c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
05d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 69 74             if it
05e0: 20 64 69 64 20 6f 63 63 75 72 2e 20 20 0a 2a 2a   did occur.  .**
05f0: 0a 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65 73  .** In all cases
0600: 2c 20 74 68 65 20 73 70 65 63 69 61 6c 20 63 6f  , the special co
0610: 6d 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 65 6e  mment must be en
0620: 63 6c 6f 73 65 64 20 69 6e 20 74 68 65 20 75 73  closed in the us
0630: 75 61 6c 0a 2a 2a 20 73 6c 61 73 68 2d 61 73 74  ual.** slash-ast
0640: 65 72 69 73 6b 2e 2e 2e 61 73 74 65 72 69 73 6b  erisk...asterisk
0650: 2d 73 6c 61 73 68 20 63 6f 6d 6d 65 6e 74 20 6d  -slash comment m
0660: 61 72 6b 73 2c 20 77 69 74 68 20 6e 6f 20 73 70  arks, with no sp
0670: 61 63 65 73 20 62 65 74 77 65 65 6e 20 74 68 65  aces between the
0680: 20 0a 2a 2a 20 61 73 74 65 72 69 73 6b 73 20 61   .** asterisks a
0690: 6e 64 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74  nd the comment t
06a0: 65 78 74 2e 0a 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d  ext..*/../*.** M
06b0: 61 6b 65 20 73 75 72 65 20 74 68 65 20 54 63 6c  ake sure the Tcl
06c0: 20 63 61 6c 6c 69 6e 67 20 63 6f 6e 76 65 6e 74   calling convent
06d0: 69 6f 6e 20 6d 61 63 72 6f 20 69 73 20 64 65 66  ion macro is def
06e0: 69 6e 65 64 2e 20 20 54 68 69 73 20 6d 61 63 72  ined.  This macr
06f0: 6f 20 69 73 0a 2a 2a 20 6f 6e 6c 79 20 75 73 65  o is.** only use
0700: 64 20 62 79 20 74 65 73 74 20 63 6f 64 65 20 61  d by test code a
0710: 6e 64 20 54 63 6c 20 69 6e 74 65 67 72 61 74 69  nd Tcl integrati
0720: 6f 6e 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 6e  on code..*/.#ifn
0730: 64 65 66 20 53 51 4c 49 54 45 5f 54 43 4c 41 50  def SQLITE_TCLAP
0740: 49 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49  I.#  define SQLI
0750: 54 45 5f 54 43 4c 41 50 49 0a 23 65 6e 64 69 66  TE_TCLAPI.#endif
0760: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20 73 75 72  ../*.** Make sur
0770: 65 20 74 68 61 74 20 72 61 6e 64 5f 73 28 29 20  e that rand_s() 
0780: 69 73 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e 20  is available on 
0790: 57 69 6e 64 6f 77 73 20 73 79 73 74 65 6d 73 20  Windows systems 
07a0: 77 69 74 68 20 4d 53 56 43 20 32 30 30 35 0a 2a  with MSVC 2005.*
07b0: 2a 20 6f 72 20 68 69 67 68 65 72 2e 0a 2a 2f 0a  * or higher..*/.
07c0: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 4d 53 43  #if defined(_MSC
07d0: 5f 56 45 52 29 20 26 26 20 5f 4d 53 43 5f 56 45  _VER) && _MSC_VE
07e0: 52 3e 3d 31 34 30 30 0a 23 20 20 64 65 66 69 6e  R>=1400.#  defin
07f0: 65 20 5f 43 52 54 5f 52 41 4e 44 5f 53 0a 23 65  e _CRT_RAND_S.#e
0800: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  ndif../*.** Incl
0810: 75 64 65 20 74 68 65 20 68 65 61 64 65 72 20 66  ude the header f
0820: 69 6c 65 20 75 73 65 64 20 74 6f 20 63 75 73 74  ile used to cust
0830: 6f 6d 69 7a 65 20 74 68 65 20 63 6f 6d 70 69 6c  omize the compil
0840: 65 72 20 6f 70 74 69 6f 6e 73 20 66 6f 72 20 4d  er options for M
0850: 53 56 43 2e 0a 2a 2a 20 54 68 69 73 20 73 68 6f  SVC..** This sho
0860: 75 6c 64 20 62 65 20 64 6f 6e 65 20 66 69 72 73  uld be done firs
0870: 74 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e  t so that it can
0880: 20 73 75 63 63 65 73 73 66 75 6c 6c 79 20 70 72   successfully pr
0890: 65 76 65 6e 74 20 73 70 75 72 69 6f 75 73 0a 2a  event spurious.*
08a0: 2a 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69  * compiler warni
08b0: 6e 67 73 20 64 75 65 20 74 6f 20 73 75 62 73 65  ngs due to subse
08c0: 71 75 65 6e 74 20 63 6f 6e 74 65 6e 74 20 69 6e  quent content in
08d0: 20 74 68 69 73 20 66 69 6c 65 20 61 6e 64 20 6f   this file and o
08e0: 74 68 65 72 20 66 69 6c 65 73 0a 2a 2a 20 74 68  ther files.** th
08f0: 61 74 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20  at are included 
0900: 62 79 20 74 68 69 73 20 66 69 6c 65 2e 0a 2a 2f  by this file..*/
0910: 0a 23 69 6e 63 6c 75 64 65 20 22 6d 73 76 63 2e  .#include "msvc.
0920: 68 22 0a 0a 2f 2a 0a 2a 2a 20 53 70 65 63 69 61  h"../*.** Specia
0930: 6c 20 73 65 74 75 70 20 66 6f 72 20 56 78 57 6f  l setup for VxWo
0940: 72 6b 73 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20  rks.*/.#include 
0950: 22 76 78 77 6f 72 6b 73 2e 68 22 0a 0a 2f 2a 0a  "vxworks.h"../*.
0960: 2a 2a 20 54 68 65 73 65 20 23 64 65 66 69 6e 65  ** These #define
0970: 73 20 73 68 6f 75 6c 64 20 65 6e 61 62 6c 65 20  s should enable 
0980: 3e 32 47 42 20 66 69 6c 65 20 73 75 70 70 6f 72  >2GB file suppor
0990: 74 20 6f 6e 20 50 4f 53 49 58 20 69 66 20 74 68  t on POSIX if th
09a0: 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20  e.** underlying 
09b0: 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d  operating system
09c0: 20 73 75 70 70 6f 72 74 73 20 69 74 2e 20 20 49   supports it.  I
09d0: 66 20 74 68 65 20 4f 53 20 6c 61 63 6b 73 0a 2a  f the OS lacks.*
09e0: 2a 20 6c 61 72 67 65 20 66 69 6c 65 20 73 75 70  * large file sup
09f0: 70 6f 72 74 2c 20 6f 72 20 69 66 20 74 68 65 20  port, or if the 
0a00: 4f 53 20 69 73 20 77 69 6e 64 6f 77 73 2c 20 74  OS is windows, t
0a10: 68 65 73 65 20 73 68 6f 75 6c 64 20 62 65 20 6e  hese should be n
0a20: 6f 2d 6f 70 73 2e 0a 2a 2a 0a 2a 2a 20 54 69 63  o-ops..**.** Tic
0a30: 6b 65 74 20 23 32 37 33 39 3a 20 20 54 68 65 20  ket #2739:  The 
0a40: 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55 52 43  _LARGEFILE_SOURC
0a50: 45 20 6d 61 63 72 6f 20 6d 75 73 74 20 61 70 70  E macro must app
0a60: 65 61 72 20 62 65 66 6f 72 65 20 61 6e 79 0a 2a  ear before any.*
0a70: 2a 20 73 79 73 74 65 6d 20 23 69 6e 63 6c 75 64  * system #includ
0a80: 65 73 2e 20 20 48 65 6e 63 65 2c 20 74 68 69 73  es.  Hence, this
0a90: 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 20 6d   block of code m
0aa0: 75 73 74 20 62 65 20 74 68 65 20 76 65 72 79 20  ust be the very 
0ab0: 66 69 72 73 74 0a 2a 2a 20 63 6f 64 65 20 69 6e  first.** code in
0ac0: 20 61 6c 6c 20 73 6f 75 72 63 65 20 66 69 6c 65   all source file
0ad0: 73 2e 0a 2a 2a 0a 2a 2a 20 4c 61 72 67 65 20 66  s..**.** Large f
0ae0: 69 6c 65 20 73 75 70 70 6f 72 74 20 63 61 6e 20  ile support can 
0af0: 62 65 20 64 69 73 61 62 6c 65 64 20 75 73 69 6e  be disabled usin
0b00: 67 20 74 68 65 20 2d 44 53 51 4c 49 54 45 5f 44  g the -DSQLITE_D
0b10: 49 53 41 42 4c 45 5f 4c 46 53 20 73 77 69 74 63  ISABLE_LFS switc
0b20: 68 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f 6d 70  h.** on the comp
0b30: 69 6c 65 72 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e  iler command lin
0b40: 65 2e 20 20 54 68 69 73 20 69 73 20 6e 65 63 65  e.  This is nece
0b50: 73 73 61 72 79 20 69 66 20 79 6f 75 20 61 72 65  ssary if you are
0b60: 20 63 6f 6d 70 69 6c 69 6e 67 0a 2a 2a 20 6f 6e   compiling.** on
0b70: 20 61 20 72 65 63 65 6e 74 20 6d 61 63 68 69 6e   a recent machin
0b80: 65 20 28 65 78 3a 20 52 65 64 20 48 61 74 20 37  e (ex: Red Hat 7
0b90: 2e 32 29 20 62 75 74 20 79 6f 75 20 77 61 6e 74  .2) but you want
0ba0: 20 79 6f 75 72 20 63 6f 64 65 20 74 6f 20 77 6f   your code to wo
0bb0: 72 6b 0a 2a 2a 20 6f 6e 20 61 6e 20 6f 6c 64 65  rk.** on an olde
0bc0: 72 20 6d 61 63 68 69 6e 65 20 28 65 78 3a 20 52  r machine (ex: R
0bd0: 65 64 20 48 61 74 20 36 2e 30 29 2e 20 20 49 66  ed Hat 6.0).  If
0be0: 20 79 6f 75 20 63 6f 6d 70 69 6c 65 20 6f 6e 20   you compile on 
0bf0: 52 65 64 20 48 61 74 20 37 2e 32 0a 2a 2a 20 77  Red Hat 7.2.** w
0c00: 69 74 68 6f 75 74 20 74 68 69 73 20 6f 70 74 69  ithout this opti
0c10: 6f 6e 2c 20 4c 46 53 20 69 73 20 65 6e 61 62 6c  on, LFS is enabl
0c20: 65 2e 20 20 42 75 74 20 4c 46 53 20 64 6f 65 73  e.  But LFS does
0c30: 20 6e 6f 74 20 65 78 69 73 74 20 69 6e 20 74 68   not exist in th
0c40: 65 20 6b 65 72 6e 65 6c 0a 2a 2a 20 69 6e 20 52  e kernel.** in R
0c50: 65 64 20 48 61 74 20 36 2e 30 2c 20 73 6f 20 74  ed Hat 6.0, so t
0c60: 68 65 20 63 6f 64 65 20 77 6f 6e 27 74 20 77 6f  he code won't wo
0c70: 72 6b 2e 20 20 48 65 6e 63 65 2c 20 66 6f 72 20  rk.  Hence, for 
0c80: 6d 61 78 69 6d 75 6d 20 62 69 6e 61 72 79 0a 2a  maximum binary.*
0c90: 2a 20 70 6f 72 74 61 62 69 6c 69 74 79 20 79 6f  * portability yo
0ca0: 75 20 73 68 6f 75 6c 64 20 6f 6d 69 74 20 4c 46  u should omit LF
0cb0: 53 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 72 65  S..**.** The pre
0cc0: 76 69 6f 75 73 20 70 61 72 61 67 72 61 70 68 20  vious paragraph 
0cd0: 77 61 73 20 77 72 69 74 74 65 6e 20 69 6e 20 32  was written in 2
0ce0: 30 30 35 2e 20 20 28 54 68 69 73 20 70 61 72 61  005.  (This para
0cf0: 67 72 61 70 68 20 69 73 20 77 72 69 74 74 65 6e  graph is written
0d00: 0a 2a 2a 20 6f 6e 20 32 30 30 38 2d 31 31 2d 32  .** on 2008-11-2
0d10: 38 2e 29 20 54 68 65 73 65 20 64 61 79 73 2c 20  8.) These days, 
0d20: 61 6c 6c 20 4c 69 6e 75 78 20 6b 65 72 6e 65 6c  all Linux kernel
0d30: 73 20 73 75 70 70 6f 72 74 20 6c 61 72 67 65 20  s support large 
0d40: 66 69 6c 65 73 2c 20 73 6f 0a 2a 2a 20 79 6f 75  files, so.** you
0d50: 20 73 68 6f 75 6c 64 20 70 72 6f 62 61 62 6c 79   should probably
0d60: 20 6c 65 61 76 65 20 4c 46 53 20 65 6e 61 62 6c   leave LFS enabl
0d70: 65 64 2e 20 20 42 75 74 20 73 6f 6d 65 20 65 6d  ed.  But some em
0d80: 62 65 64 64 65 64 20 70 6c 61 74 66 6f 72 6d 73  bedded platforms
0d90: 20 6d 69 67 68 74 0a 2a 2a 20 6c 61 63 6b 20 4c   might.** lack L
0da0: 46 53 20 69 6e 20 77 68 69 63 68 20 63 61 73 65  FS in which case
0db0: 20 74 68 65 20 53 51 4c 49 54 45 5f 44 49 53 41   the SQLITE_DISA
0dc0: 42 4c 45 5f 4c 46 53 20 6d 61 63 72 6f 20 6d 69  BLE_LFS macro mi
0dd0: 67 68 74 20 73 74 69 6c 6c 20 62 65 20 75 73 65  ght still be use
0de0: 66 75 6c 2e 0a 2a 2a 0a 2a 2a 20 53 69 6d 69 6c  ful..**.** Simil
0df0: 61 72 20 69 73 20 74 72 75 65 20 66 6f 72 20 4d  ar is true for M
0e00: 61 63 20 4f 53 20 58 2e 20 20 4c 46 53 20 69 73  ac OS X.  LFS is
0e10: 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74 65 64 20   only supported 
0e20: 6f 6e 20 4d 61 63 20 4f 53 20 58 20 39 20 61 6e  on Mac OS X 9 an
0e30: 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 23 69 66 6e  d later..*/.#ifn
0e40: 64 65 66 20 53 51 4c 49 54 45 5f 44 49 53 41 42  def SQLITE_DISAB
0e50: 4c 45 5f 4c 46 53 0a 23 20 64 65 66 69 6e 65 20  LE_LFS.# define 
0e60: 5f 4c 41 52 47 45 5f 46 49 4c 45 20 20 20 20 20  _LARGE_FILE     
0e70: 20 20 31 0a 23 20 69 66 6e 64 65 66 20 5f 46 49    1.# ifndef _FI
0e80: 4c 45 5f 4f 46 46 53 45 54 5f 42 49 54 53 0a 23  LE_OFFSET_BITS.#
0e90: 20 20 20 64 65 66 69 6e 65 20 5f 46 49 4c 45 5f     define _FILE_
0ea0: 4f 46 46 53 45 54 5f 42 49 54 53 20 36 34 0a 23  OFFSET_BITS 64.#
0eb0: 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20   endif.# define 
0ec0: 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55 52 43  _LARGEFILE_SOURC
0ed0: 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 57  E 1.#endif../* W
0ee0: 68 61 74 20 76 65 72 73 69 6f 6e 20 6f 66 20 47  hat version of G
0ef0: 43 43 20 69 73 20 62 65 69 6e 67 20 75 73 65 64  CC is being used
0f00: 2e 20 20 30 20 6d 65 61 6e 73 20 47 43 43 20 69  .  0 means GCC i
0f10: 73 20 6e 6f 74 20 62 65 69 6e 67 20 75 73 65 64  s not being used
0f20: 20 2a 2f 0a 23 69 66 64 65 66 20 5f 5f 47 4e 55   */.#ifdef __GNU
0f30: 43 5f 5f 0a 23 20 64 65 66 69 6e 65 20 47 43 43  C__.# define GCC
0f40: 5f 56 45 52 53 49 4f 4e 20 28 5f 5f 47 4e 55 43  _VERSION (__GNUC
0f50: 5f 5f 2a 31 30 30 30 30 30 30 2b 5f 5f 47 4e 55  __*1000000+__GNU
0f60: 43 5f 4d 49 4e 4f 52 5f 5f 2a 31 30 30 30 2b 5f  C_MINOR__*1000+_
0f70: 5f 47 4e 55 43 5f 50 41 54 43 48 4c 45 56 45 4c  _GNUC_PATCHLEVEL
0f80: 5f 5f 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  __).#else.# defi
0f90: 6e 65 20 47 43 43 5f 56 45 52 53 49 4f 4e 20 30  ne GCC_VERSION 0
0fa0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 57 68 61 74  .#endif../* What
0fb0: 20 76 65 72 73 69 6f 6e 20 6f 66 20 43 4c 41 4e   version of CLAN
0fc0: 47 20 69 73 20 62 65 69 6e 67 20 75 73 65 64 2e  G is being used.
0fd0: 20 20 30 20 6d 65 61 6e 73 20 43 4c 41 4e 47 20    0 means CLANG 
0fe0: 69 73 20 6e 6f 74 20 62 65 69 6e 67 20 75 73 65  is not being use
0ff0: 64 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  d */.#if defined
1000: 28 5f 5f 63 6c 61 6e 67 5f 5f 29 20 26 26 20 21  (__clang__) && !
1010: 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 0a  defined(_WIN32).
1020: 23 20 64 65 66 69 6e 65 20 43 4c 41 4e 47 5f 56  # define CLANG_V
1030: 45 52 53 49 4f 4e 20 5c 0a 20 20 20 20 20 20 20  ERSION \.       
1040: 20 20 20 20 20 28 5f 5f 63 6c 61 6e 67 5f 6d 61       (__clang_ma
1050: 6a 6f 72 5f 5f 2a 31 30 30 30 30 30 30 2b 5f 5f  jor__*1000000+__
1060: 63 6c 61 6e 67 5f 6d 69 6e 6f 72 5f 5f 2a 31 30  clang_minor__*10
1070: 30 30 2b 5f 5f 63 6c 61 6e 67 5f 70 61 74 63 68  00+__clang_patch
1080: 6c 65 76 65 6c 5f 5f 29 0a 23 65 6c 73 65 0a 23  level__).#else.#
1090: 20 64 65 66 69 6e 65 20 43 4c 41 4e 47 5f 56 45   define CLANG_VE
10a0: 52 53 49 4f 4e 20 30 0a 23 65 6e 64 69 66 0a 0a  RSION 0.#endif..
10b0: 2f 2a 20 4e 65 65 64 65 64 20 66 6f 72 20 76 61  /* Needed for va
10c0: 72 69 6f 75 73 20 64 65 66 69 6e 69 74 69 6f 6e  rious definition
10d0: 73 2e 2e 2e 20 2a 2f 0a 23 69 66 20 64 65 66 69  s... */.#if defi
10e0: 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 26 26  ned(__GNUC__) &&
10f0: 20 21 64 65 66 69 6e 65 64 28 5f 47 4e 55 5f 53   !defined(_GNU_S
1100: 4f 55 52 43 45 29 0a 23 20 64 65 66 69 6e 65 20  OURCE).# define 
1110: 5f 47 4e 55 5f 53 4f 55 52 43 45 0a 23 65 6e 64  _GNU_SOURCE.#end
1120: 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28  if..#if defined(
1130: 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20 26 26 20  __OpenBSD__) && 
1140: 21 64 65 66 69 6e 65 64 28 5f 42 53 44 5f 53 4f  !defined(_BSD_SO
1150: 55 52 43 45 29 0a 23 20 64 65 66 69 6e 65 20 5f  URCE).# define _
1160: 42 53 44 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69  BSD_SOURCE.#endi
1170: 66 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d 69 6e  f../*.** For Min
1180: 47 57 2c 20 63 68 65 63 6b 20 74 6f 20 73 65 65  GW, check to see
1190: 20 69 66 20 77 65 20 63 61 6e 20 69 6e 63 6c 75   if we can inclu
11a0: 64 65 20 74 68 65 20 68 65 61 64 65 72 20 66 69  de the header fi
11b0: 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 69 74  le containing it
11c0: 73 0a 2a 2a 20 76 65 72 73 69 6f 6e 20 69 6e 66  s.** version inf
11d0: 6f 72 6d 61 74 69 6f 6e 2c 20 61 6d 6f 6e 67 20  ormation, among 
11e0: 6f 74 68 65 72 20 74 68 69 6e 67 73 2e 20 20 4e  other things.  N
11f0: 6f 72 6d 61 6c 6c 79 2c 20 74 68 69 73 20 69 6e  ormally, this in
1200: 74 65 72 6e 61 6c 20 4d 69 6e 47 57 0a 2a 2a 20  ternal MinGW.** 
1210: 68 65 61 64 65 72 20 66 69 6c 65 20 77 6f 75 6c  header file woul
1220: 64 20 5b 6f 6e 6c 79 5d 20 62 65 20 69 6e 63 6c  d [only] be incl
1230: 75 64 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c  uded automatical
1240: 6c 79 20 62 79 20 6f 74 68 65 72 20 4d 69 6e 47  ly by other MinG
1250: 57 20 68 65 61 64 65 72 0a 2a 2a 20 66 69 6c 65  W header.** file
1260: 73 3b 20 68 6f 77 65 76 65 72 2c 20 74 68 65 20  s; however, the 
1270: 63 6f 6e 74 61 69 6e 65 64 20 76 65 72 73 69 6f  contained versio
1280: 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73  n information is
1290: 20 6e 6f 77 20 72 65 71 75 69 72 65 64 20 62 79   now required by
12a0: 20 74 68 69 73 0a 2a 2a 20 68 65 61 64 65 72 20   this.** header 
12b0: 66 69 6c 65 20 74 6f 20 77 6f 72 6b 20 61 72 6f  file to work aro
12c0: 75 6e 64 20 62 69 6e 61 72 79 20 63 6f 6d 70 61  und binary compa
12d0: 74 69 62 69 6c 69 74 79 20 69 73 73 75 65 73 20  tibility issues 
12e0: 28 73 65 65 20 62 65 6c 6f 77 29 20 61 6e 64 0a  (see below) and.
12f0: 2a 2a 20 74 68 69 73 20 69 73 20 74 68 65 20 6f  ** this is the o
1300: 6e 6c 79 20 6b 6e 6f 77 6e 20 77 61 79 20 74 6f  nly known way to
1310: 20 72 65 6c 69 61 62 6c 79 20 6f 62 74 61 69 6e   reliably obtain
1320: 20 69 74 2e 20 20 54 68 69 73 20 65 6e 74 69 72   it.  This entir
1330: 65 20 23 69 66 20 62 6c 6f 63 6b 0a 2a 2a 20 77  e #if block.** w
1340: 6f 75 6c 64 20 62 65 20 63 6f 6d 70 6c 65 74 65  ould be complete
1350: 6c 79 20 75 6e 6e 65 63 65 73 73 61 72 79 20 69  ly unnecessary i
1360: 66 20 74 68 65 72 65 20 77 61 73 20 61 6e 79 20  f there was any 
1370: 6f 74 68 65 72 20 77 61 79 20 6f 66 20 64 65 74  other way of det
1380: 65 63 74 69 6e 67 0a 2a 2a 20 4d 69 6e 47 57 20  ecting.** MinGW 
1390: 76 69 61 20 74 68 65 69 72 20 70 72 65 70 72 6f  via their prepro
13a0: 63 65 73 73 6f 72 20 28 65 2e 67 2e 20 69 66 20  cessor (e.g. if 
13b0: 74 68 65 79 20 63 75 73 74 6f 6d 69 7a 65 64 20  they customized 
13c0: 74 68 65 69 72 20 47 43 43 20 74 6f 20 64 65 66  their GCC to def
13d0: 69 6e 65 0a 2a 2a 20 73 6f 6d 65 20 4d 69 6e 47  ine.** some MinG
13e0: 57 2d 73 70 65 63 69 66 69 63 20 6d 61 63 72 6f  W-specific macro
13f0: 73 29 2e 20 20 57 68 65 6e 20 63 6f 6d 70 69 6c  s).  When compil
1400: 69 6e 67 20 66 6f 72 20 4d 69 6e 47 57 2c 20 65  ing for MinGW, e
1410: 69 74 68 65 72 20 74 68 65 0a 2a 2a 20 5f 48 41  ither the.** _HA
1420: 56 45 5f 4d 49 4e 47 57 5f 48 20 6f 72 20 5f 48  VE_MINGW_H or _H
1430: 41 56 45 5f 5f 4d 49 4e 47 57 5f 48 20 28 6e 6f  AVE__MINGW_H (no
1440: 74 65 20 74 68 65 20 65 78 74 72 61 20 75 6e 64  te the extra und
1450: 65 72 73 63 6f 72 65 29 20 6d 61 63 72 6f 20 6d  erscore) macro m
1460: 75 73 74 20 62 65 0a 2a 2a 20 64 65 66 69 6e 65  ust be.** define
1470: 64 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 64 65  d; otherwise, de
1480: 74 65 63 74 69 6f 6e 20 6f 66 20 63 6f 6e 64 69  tection of condi
1490: 74 69 6f 6e 73 20 73 70 65 63 69 66 69 63 20 74  tions specific t
14a0: 6f 20 4d 69 6e 47 57 20 77 69 6c 6c 20 62 65 0a  o MinGW will be.
14b0: 2a 2a 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a  ** disabled..*/.
14c0: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41 56  #if defined(_HAV
14d0: 45 5f 4d 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63  E_MINGW_H).# inc
14e0: 6c 75 64 65 20 22 6d 69 6e 67 77 2e 68 22 0a 23  lude "mingw.h".#
14f0: 65 6c 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41  elif defined(_HA
1500: 56 45 5f 5f 4d 49 4e 47 57 5f 48 29 0a 23 20 69  VE__MINGW_H).# i
1510: 6e 63 6c 75 64 65 20 22 5f 6d 69 6e 67 77 2e 68  nclude "_mingw.h
1520: 22 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ".#endif../*.** 
1530: 46 6f 72 20 4d 69 6e 47 57 20 76 65 72 73 69 6f  For MinGW versio
1540: 6e 20 34 2e 78 20 28 61 6e 64 20 68 69 67 68 65  n 4.x (and highe
1550: 72 29 2c 20 63 68 65 63 6b 20 74 6f 20 73 65 65  r), check to see
1560: 20 69 66 20 74 68 65 20 5f 55 53 45 5f 33 32 42   if the _USE_32B
1570: 49 54 5f 54 49 4d 45 5f 54 0a 2a 2a 20 64 65 66  IT_TIME_T.** def
1580: 69 6e 65 20 69 73 20 72 65 71 75 69 72 65 64 20  ine is required 
1590: 74 6f 20 6d 61 69 6e 74 61 69 6e 20 62 69 6e 61  to maintain bina
15a0: 72 79 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79  ry compatibility
15b0: 20 77 69 74 68 20 74 68 65 20 4d 53 56 43 20 72   with the MSVC r
15c0: 75 6e 74 69 6d 65 0a 2a 2a 20 6c 69 62 72 61 72  untime.** librar
15d0: 79 20 69 6e 20 75 73 65 20 28 65 2e 67 2e 20 66  y in use (e.g. f
15e0: 6f 72 20 57 69 6e 64 6f 77 73 20 58 50 29 2e 0a  or Windows XP)..
15f0: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
1600: 5f 55 53 45 5f 33 32 42 49 54 5f 54 49 4d 45 5f  _USE_32BIT_TIME_
1610: 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f  T) && !defined(_
1620: 55 53 45 5f 36 34 42 49 54 5f 54 49 4d 45 5f 54  USE_64BIT_TIME_T
1630: 29 20 26 26 20 5c 0a 20 20 20 20 64 65 66 69 6e  ) && \.    defin
1640: 65 64 28 5f 57 49 4e 33 32 29 20 26 26 20 21 64  ed(_WIN32) && !d
1650: 65 66 69 6e 65 64 28 5f 57 49 4e 36 34 29 20 26  efined(_WIN64) &
1660: 26 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28  & \.    defined(
1670: 5f 5f 4d 49 4e 47 57 5f 4d 41 4a 4f 52 5f 56 45  __MINGW_MAJOR_VE
1680: 52 53 49 4f 4e 29 20 26 26 20 5f 5f 4d 49 4e 47  RSION) && __MING
1690: 57 5f 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e 20  W_MAJOR_VERSION 
16a0: 3e 3d 20 34 20 26 26 20 5c 0a 20 20 20 20 64 65  >= 4 && \.    de
16b0: 66 69 6e 65 64 28 5f 5f 4d 53 56 43 52 54 5f 5f  fined(__MSVCRT__
16c0: 29 0a 23 20 64 65 66 69 6e 65 20 5f 55 53 45 5f  ).# define _USE_
16d0: 33 32 42 49 54 5f 54 49 4d 45 5f 54 0a 23 65 6e  32BIT_TIME_T.#en
16e0: 64 69 66 0a 0a 2f 2a 20 54 68 65 20 70 75 62 6c  dif../* The publ
16f0: 69 63 20 53 51 4c 69 74 65 20 69 6e 74 65 72 66  ic SQLite interf
1700: 61 63 65 2e 20 20 54 68 65 20 5f 46 49 4c 45 5f  ace.  The _FILE_
1710: 4f 46 46 53 45 54 5f 42 49 54 53 20 6d 61 63 72  OFFSET_BITS macr
1720: 6f 20 6d 75 73 74 20 61 70 70 65 61 72 0a 2a 2a  o must appear.**
1730: 20 66 69 72 73 74 20 69 6e 20 51 4e 58 2e 20 20   first in QNX.  
1740: 41 6c 73 6f 2c 20 74 68 65 20 5f 55 53 45 5f 33  Also, the _USE_3
1750: 32 42 49 54 5f 54 49 4d 45 5f 54 20 6d 61 63 72  2BIT_TIME_T macr
1760: 6f 20 6d 75 73 74 20 61 70 70 65 61 72 20 66 69  o must appear fi
1770: 72 73 74 20 66 6f 72 0a 2a 2a 20 4d 69 6e 47 57  rst for.** MinGW
1780: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
1790: 71 6c 69 74 65 33 2e 68 22 0a 0a 2f 2a 0a 2a 2a  qlite3.h"../*.**
17a0: 20 49 6e 63 6c 75 64 65 20 74 68 65 20 63 6f 6e   Include the con
17b0: 66 69 67 75 72 61 74 69 6f 6e 20 68 65 61 64 65  figuration heade
17c0: 72 20 6f 75 74 70 75 74 20 62 79 20 27 63 6f 6e  r output by 'con
17d0: 66 69 67 75 72 65 27 20 69 66 20 77 65 27 72 65  figure' if we're
17e0: 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 61 75   using the.** au
17f0: 74 6f 63 6f 6e 66 2d 62 61 73 65 64 20 62 75 69  toconf-based bui
1800: 6c 64 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 48 41  ld.*/.#ifdef _HA
1810: 56 45 5f 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  VE_SQLITE_CONFIG
1820: 5f 48 0a 23 69 6e 63 6c 75 64 65 20 22 63 6f 6e  _H.#include "con
1830: 66 69 67 2e 68 22 0a 23 65 6e 64 69 66 0a 0a 23  fig.h".#endif..#
1840: 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65 4c  include "sqliteL
1850: 69 6d 69 74 2e 68 22 0a 0a 2f 2a 20 44 69 73 61  imit.h"../* Disa
1860: 62 6c 65 20 6e 75 69 73 61 6e 63 65 20 77 61 72  ble nuisance war
1870: 6e 69 6e 67 73 20 6f 6e 20 42 6f 72 6c 61 6e 64  nings on Borland
1880: 20 63 6f 6d 70 69 6c 65 72 73 20 2a 2f 0a 23 69   compilers */.#i
1890: 66 20 64 65 66 69 6e 65 64 28 5f 5f 42 4f 52 4c  f defined(__BORL
18a0: 41 4e 44 43 5f 5f 29 0a 23 70 72 61 67 6d 61 20  ANDC__).#pragma 
18b0: 77 61 72 6e 20 2d 72 63 68 20 2f 2a 20 75 6e 72  warn -rch /* unr
18c0: 65 61 63 68 61 62 6c 65 20 63 6f 64 65 20 2a 2f  eachable code */
18d0: 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 63  .#pragma warn -c
18e0: 63 63 20 2f 2a 20 43 6f 6e 64 69 74 69 6f 6e 20  cc /* Condition 
18f0: 69 73 20 61 6c 77 61 79 73 20 74 72 75 65 20 6f  is always true o
1900: 72 20 66 61 6c 73 65 20 2a 2f 0a 23 70 72 61 67  r false */.#prag
1910: 6d 61 20 77 61 72 6e 20 2d 61 75 73 20 2f 2a 20  ma warn -aus /* 
1920: 41 73 73 69 67 6e 65 64 20 76 61 6c 75 65 20 69  Assigned value i
1930: 73 20 6e 65 76 65 72 20 75 73 65 64 20 2a 2f 0a  s never used */.
1940: 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 63 73  #pragma warn -cs
1950: 75 20 2f 2a 20 43 6f 6d 70 61 72 69 6e 67 20 73  u /* Comparing s
1960: 69 67 6e 65 64 20 61 6e 64 20 75 6e 73 69 67 6e  igned and unsign
1970: 65 64 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61  ed */.#pragma wa
1980: 72 6e 20 2d 73 70 61 20 2f 2a 20 53 75 73 70 69  rn -spa /* Suspi
1990: 63 69 6f 75 73 20 70 6f 69 6e 74 65 72 20 61 72  cious pointer ar
19a0: 69 74 68 6d 65 74 69 63 20 2a 2f 0a 23 65 6e 64  ithmetic */.#end
19b0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64  if../*.** Includ
19c0: 65 20 73 74 61 6e 64 61 72 64 20 68 65 61 64 65  e standard heade
19d0: 72 20 66 69 6c 65 73 20 61 73 20 6e 65 63 65 73  r files as neces
19e0: 73 61 72 79 0a 2a 2f 0a 23 69 66 64 65 66 20 48  sary.*/.#ifdef H
19f0: 41 56 45 5f 53 54 44 49 4e 54 5f 48 0a 23 69 6e  AVE_STDINT_H.#in
1a00: 63 6c 75 64 65 20 3c 73 74 64 69 6e 74 2e 68 3e  clude <stdint.h>
1a10: 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 48  .#endif.#ifdef H
1a20: 41 56 45 5f 49 4e 54 54 59 50 45 53 5f 48 0a 23  AVE_INTTYPES_H.#
1a30: 69 6e 63 6c 75 64 65 20 3c 69 6e 74 74 79 70 65  include <inttype
1a40: 73 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  s.h>.#endif../*.
1a50: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
1a60: 20 6d 61 63 72 6f 73 20 61 72 65 20 75 73 65 64   macros are used
1a70: 20 74 6f 20 63 61 73 74 20 70 6f 69 6e 74 65 72   to cast pointer
1a80: 73 20 74 6f 20 69 6e 74 65 67 65 72 73 20 61 6e  s to integers an
1a90: 64 0a 2a 2a 20 69 6e 74 65 67 65 72 73 20 74 6f  d.** integers to
1aa0: 20 70 6f 69 6e 74 65 72 73 2e 20 20 54 68 65 20   pointers.  The 
1ab0: 77 61 79 20 79 6f 75 20 64 6f 20 74 68 69 73 20  way you do this 
1ac0: 76 61 72 69 65 73 20 66 72 6f 6d 20 6f 6e 65 20  varies from one 
1ad0: 63 6f 6d 70 69 6c 65 72 0a 2a 2a 20 74 6f 20 74  compiler.** to t
1ae0: 68 65 20 6e 65 78 74 2c 20 73 6f 20 77 65 20 68  he next, so we h
1af0: 61 76 65 20 64 65 76 65 6c 6f 70 65 64 20 74 68  ave developed th
1b00: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 65 74 20  e following set 
1b10: 6f 66 20 23 69 66 20 73 74 61 74 65 6d 65 6e 74  of #if statement
1b20: 73 0a 2a 2a 20 74 6f 20 67 65 6e 65 72 61 74 65  s.** to generate
1b30: 20 61 70 70 72 6f 70 72 69 61 74 65 20 6d 61 63   appropriate mac
1b40: 72 6f 73 20 66 6f 72 20 61 20 77 69 64 65 20 72  ros for a wide r
1b50: 61 6e 67 65 20 6f 66 20 63 6f 6d 70 69 6c 65 72  ange of compiler
1b60: 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 72  s..**.** The cor
1b70: 72 65 63 74 20 22 41 4e 53 49 22 20 77 61 79 20  rect "ANSI" way 
1b80: 74 6f 20 64 6f 20 74 68 69 73 20 69 73 20 74 6f  to do this is to
1b90: 20 75 73 65 20 74 68 65 20 69 6e 74 70 74 72 5f   use the intptr_
1ba0: 74 20 74 79 70 65 2e 0a 2a 2a 20 55 6e 66 6f 72  t type..** Unfor
1bb0: 74 75 6e 61 74 65 6c 79 2c 20 74 68 61 74 20 74  tunately, that t
1bc0: 79 70 65 64 65 66 20 69 73 20 6e 6f 74 20 61 76  ypedef is not av
1bd0: 61 69 6c 61 62 6c 65 20 6f 6e 20 61 6c 6c 20 63  ailable on all c
1be0: 6f 6d 70 69 6c 65 72 73 2c 20 6f 72 0a 2a 2a 20  ompilers, or.** 
1bf0: 69 66 20 69 74 20 69 73 20 61 76 61 69 6c 61 62  if it is availab
1c00: 6c 65 2c 20 69 74 20 72 65 71 75 69 72 65 73 20  le, it requires 
1c10: 61 6e 20 23 69 6e 63 6c 75 64 65 20 6f 66 20 73  an #include of s
1c20: 70 65 63 69 66 69 63 20 68 65 61 64 65 72 73 0a  pecific headers.
1c30: 2a 2a 20 74 68 61 74 20 76 61 72 79 20 66 72 6f  ** that vary fro
1c40: 6d 20 6f 6e 65 20 6d 61 63 68 69 6e 65 20 74 6f  m one machine to
1c50: 20 74 68 65 20 6e 65 78 74 2e 0a 2a 2a 0a 2a 2a   the next..**.**
1c60: 20 54 69 63 6b 65 74 20 23 33 38 36 30 3a 20 20   Ticket #3860:  
1c70: 54 68 65 20 6c 6c 76 6d 2d 67 63 63 2d 34 2e 32  The llvm-gcc-4.2
1c80: 20 63 6f 6d 70 69 6c 65 72 20 66 72 6f 6d 20 41   compiler from A
1c90: 70 70 6c 65 20 63 68 6f 6b 65 73 20 6f 6e 0a 2a  pple chokes on.*
1ca0: 2a 20 74 68 65 20 28 28 76 6f 69 64 2a 29 26 28  * the ((void*)&(
1cb0: 28 63 68 61 72 2a 29 30 29 5b 58 5d 29 20 63 6f  (char*)0)[X]) co
1cc0: 6e 73 74 72 75 63 74 2e 20 20 42 75 74 20 4d 53  nstruct.  But MS
1cd0: 56 43 20 63 68 6f 6b 65 73 20 6f 6e 20 28 28 76  VC chokes on ((v
1ce0: 6f 69 64 2a 29 28 58 29 29 2e 0a 2a 2a 20 53 6f  oid*)(X))..** So
1cf0: 20 77 65 20 68 61 76 65 20 74 6f 20 64 65 66 69   we have to defi
1d00: 6e 65 20 74 68 65 20 6d 61 63 72 6f 73 20 69 6e  ne the macros in
1d10: 20 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20   different ways 
1d20: 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65  depending on the
1d30: 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 2e 0a 2a 2f  .** compiler..*/
1d40: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 50  .#if defined(__P
1d50: 54 52 44 49 46 46 5f 54 59 50 45 5f 5f 29 20 20  TRDIFF_TYPE__)  
1d60: 2f 2a 20 54 68 69 73 20 63 61 73 65 20 73 68 6f  /* This case sho
1d70: 75 6c 64 20 77 6f 72 6b 20 66 6f 72 20 47 43 43  uld work for GCC
1d80: 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c   */.# define SQL
1d90: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58  ITE_INT_TO_PTR(X
1da0: 29 20 20 28 28 76 6f 69 64 2a 29 28 5f 5f 50 54  )  ((void*)(__PT
1db0: 52 44 49 46 46 5f 54 59 50 45 5f 5f 29 28 58 29  RDIFF_TYPE__)(X)
1dc0: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
1dd0: 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20  E_PTR_TO_INT(X) 
1de0: 20 28 28 69 6e 74 29 28 5f 5f 50 54 52 44 49 46   ((int)(__PTRDIF
1df0: 46 5f 54 59 50 45 5f 5f 29 28 58 29 29 0a 23 65  F_TYPE__)(X)).#e
1e00: 6c 69 66 20 21 64 65 66 69 6e 65 64 28 5f 5f 47  lif !defined(__G
1e10: 4e 55 43 5f 5f 29 20 20 20 20 20 20 20 2f 2a 20  NUC__)       /* 
1e20: 57 6f 72 6b 73 20 66 6f 72 20 63 6f 6d 70 69 6c  Works for compil
1e30: 65 72 73 20 6f 74 68 65 72 20 74 68 61 6e 20 4c  ers other than L
1e40: 4c 56 4d 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20  LVM */.# define 
1e50: 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
1e60: 52 28 58 29 20 20 28 28 76 6f 69 64 2a 29 26 28  R(X)  ((void*)&(
1e70: 28 63 68 61 72 2a 29 30 29 5b 58 5d 29 0a 23 20  (char*)0)[X]).# 
1e80: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54  define SQLITE_PT
1e90: 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69  R_TO_INT(X)  ((i
1ea0: 6e 74 29 28 28 28 63 68 61 72 2a 29 58 29 2d 28  nt)(((char*)X)-(
1eb0: 63 68 61 72 2a 29 30 29 29 0a 23 65 6c 69 66 20  char*)0)).#elif 
1ec0: 64 65 66 69 6e 65 64 28 48 41 56 45 5f 53 54 44  defined(HAVE_STD
1ed0: 49 4e 54 5f 48 29 20 20 20 2f 2a 20 55 73 65 20  INT_H)   /* Use 
1ee0: 74 68 69 73 20 63 61 73 65 20 69 66 20 77 65 20  this case if we 
1ef0: 68 61 76 65 20 41 4e 53 49 20 68 65 61 64 65 72  have ANSI header
1f00: 73 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51  s */.# define SQ
1f10: 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28  LITE_INT_TO_PTR(
1f20: 58 29 20 20 28 28 76 6f 69 64 2a 29 28 69 6e 74  X)  ((void*)(int
1f30: 70 74 72 5f 74 29 28 58 29 29 0a 23 20 64 65 66  ptr_t)(X)).# def
1f40: 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54  ine SQLITE_PTR_T
1f50: 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29  O_INT(X)  ((int)
1f60: 28 69 6e 74 70 74 72 5f 74 29 28 58 29 29 0a 23  (intptr_t)(X)).#
1f70: 65 6c 73 65 20 20 20 20 20 20 20 20 20 20 20 20  else            
1f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f90: 20 47 65 6e 65 72 61 74 65 73 20 61 20 77 61 72   Generates a war
1fa0: 6e 69 6e 67 20 2d 20 62 75 74 20 69 74 20 61 6c  ning - but it al
1fb0: 77 61 79 73 20 77 6f 72 6b 73 20 2a 2f 0a 23 20  ways works */.# 
1fc0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e  define SQLITE_IN
1fd0: 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76  T_TO_PTR(X)  ((v
1fe0: 6f 69 64 2a 29 28 58 29 29 0a 23 20 64 65 66 69  oid*)(X)).# defi
1ff0: 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f  ne SQLITE_PTR_TO
2000: 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28  _INT(X)  ((int)(
2010: 58 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  X)).#endif../*.*
2020: 2a 20 41 20 6d 61 63 72 6f 20 74 6f 20 68 69 6e  * A macro to hin
2030: 74 20 74 6f 20 74 68 65 20 63 6f 6d 70 69 6c 65  t to the compile
2040: 72 20 74 68 61 74 20 61 20 66 75 6e 63 74 69 6f  r that a functio
2050: 6e 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 0a  n should not be.
2060: 2a 2a 20 69 6e 6c 69 6e 65 64 2e 0a 2a 2f 0a 23  ** inlined..*/.#
2070: 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55  if defined(__GNU
2080: 43 5f 5f 29 0a 23 20 20 64 65 66 69 6e 65 20 53  C__).#  define S
2090: 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20  QLITE_NOINLINE  
20a0: 5f 5f 61 74 74 72 69 62 75 74 65 5f 5f 28 28 6e  __attribute__((n
20b0: 6f 69 6e 6c 69 6e 65 29 29 0a 23 65 6c 69 66 20  oinline)).#elif 
20c0: 64 65 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52  defined(_MSC_VER
20d0: 29 20 26 26 20 5f 4d 53 43 5f 56 45 52 3e 3d 31  ) && _MSC_VER>=1
20e0: 33 31 30 0a 23 20 20 64 65 66 69 6e 65 20 53 51  310.#  define SQ
20f0: 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20 5f  LITE_NOINLINE  _
2100: 5f 64 65 63 6c 73 70 65 63 28 6e 6f 69 6e 6c 69  _declspec(noinli
2110: 6e 65 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66  ne).#else.#  def
2120: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c  ine SQLITE_NOINL
2130: 49 4e 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  INE.#endif../*.*
2140: 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 61 74  * Make sure that
2150: 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 69 6e   the compiler in
2160: 74 72 69 6e 73 69 63 73 20 77 65 20 64 65 73 69  trinsics we desi
2170: 72 65 20 61 72 65 20 65 6e 61 62 6c 65 64 20 77  re are enabled w
2180: 68 65 6e 0a 2a 2a 20 63 6f 6d 70 69 6c 69 6e 67  hen.** compiling
2190: 20 77 69 74 68 20 61 6e 20 61 70 70 72 6f 70 72   with an appropr
21a0: 69 61 74 65 20 76 65 72 73 69 6f 6e 20 6f 66 20  iate version of 
21b0: 4d 53 56 43 20 75 6e 6c 65 73 73 20 70 72 65 76  MSVC unless prev
21c0: 65 6e 74 65 64 20 62 79 0a 2a 2a 20 74 68 65 20  ented by.** the 
21d0: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 49  SQLITE_DISABLE_I
21e0: 4e 54 52 49 4e 53 49 43 20 64 65 66 69 6e 65 2e  NTRINSIC define.
21f0: 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
2200: 28 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f  (SQLITE_DISABLE_
2210: 49 4e 54 52 49 4e 53 49 43 29 0a 23 20 20 69 66  INTRINSIC).#  if
2220: 20 64 65 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45   defined(_MSC_VE
2230: 52 29 20 26 26 20 5f 4d 53 43 5f 56 45 52 3e 3d  R) && _MSC_VER>=
2240: 31 34 30 30 0a 23 20 20 20 20 69 66 20 21 64 65  1400.#    if !de
2250: 66 69 6e 65 64 28 5f 57 49 4e 33 32 5f 57 43 45  fined(_WIN32_WCE
2260: 29 0a 23 20 20 20 20 20 20 69 6e 63 6c 75 64 65  ).#      include
2270: 20 3c 69 6e 74 72 69 6e 2e 68 3e 0a 23 20 20 20   <intrin.h>.#   
2280: 20 20 20 70 72 61 67 6d 61 20 69 6e 74 72 69 6e     pragma intrin
2290: 73 69 63 28 5f 62 79 74 65 73 77 61 70 5f 75 73  sic(_byteswap_us
22a0: 68 6f 72 74 29 0a 23 20 20 20 20 20 20 70 72 61  hort).#      pra
22b0: 67 6d 61 20 69 6e 74 72 69 6e 73 69 63 28 5f 62  gma intrinsic(_b
22c0: 79 74 65 73 77 61 70 5f 75 6c 6f 6e 67 29 0a 23  yteswap_ulong).#
22d0: 20 20 20 20 20 20 70 72 61 67 6d 61 20 69 6e 74        pragma int
22e0: 72 69 6e 73 69 63 28 5f 52 65 61 64 57 72 69 74  rinsic(_ReadWrit
22f0: 65 42 61 72 72 69 65 72 29 0a 23 20 20 20 20 65  eBarrier).#    e
2300: 6c 73 65 0a 23 20 20 20 20 20 20 69 6e 63 6c 75  lse.#      inclu
2310: 64 65 20 3c 63 6d 6e 69 6e 74 72 69 6e 2e 68 3e  de <cmnintrin.h>
2320: 0a 23 20 20 20 20 65 6e 64 69 66 0a 23 20 20 65  .#    endif.#  e
2330: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ndif.#endif../*.
2340: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 54 48  ** The SQLITE_TH
2350: 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f 20 6d  READSAFE macro m
2360: 75 73 74 20 62 65 20 64 65 66 69 6e 65 64 20 61  ust be defined a
2370: 73 20 30 2c 20 31 2c 20 6f 72 20 32 2e 0a 2a 2a  s 0, 1, or 2..**
2380: 20 30 20 6d 65 61 6e 73 20 6d 75 74 65 78 65 73   0 means mutexes
2390: 20 61 72 65 20 70 65 72 6d 61 6e 65 6e 74 6c 79   are permanently
23a0: 20 64 69 73 61 62 6c 65 20 61 6e 64 20 74 68 65   disable and the
23b0: 20 6c 69 62 72 61 72 79 20 69 73 20 6e 65 76 65   library is neve
23c0: 72 0a 2a 2a 20 74 68 72 65 61 64 73 61 66 65 2e  r.** threadsafe.
23d0: 20 20 31 20 6d 65 61 6e 73 20 74 68 65 20 6c 69    1 means the li
23e0: 62 72 61 72 79 20 69 73 20 73 65 72 69 61 6c 69  brary is seriali
23f0: 7a 65 64 20 77 68 69 63 68 20 69 73 20 74 68 65  zed which is the
2400: 20 68 69 67 68 65 73 74 0a 2a 2a 20 6c 65 76 65   highest.** leve
2410: 6c 20 6f 66 20 74 68 72 65 61 64 73 61 66 65 74  l of threadsafet
2420: 79 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65 20  y.  2 means the 
2430: 6c 69 62 72 61 72 79 20 69 73 20 6d 75 6c 74 69  library is multi
2440: 74 68 72 65 61 64 65 64 20 2d 20 6d 75 6c 74 69  threaded - multi
2450: 70 6c 65 0a 2a 2a 20 74 68 72 65 61 64 73 20 63  ple.** threads c
2460: 61 6e 20 75 73 65 20 53 51 4c 69 74 65 20 61 73  an use SQLite as
2470: 20 6c 6f 6e 67 20 61 73 20 6e 6f 20 74 77 6f 20   long as no two 
2480: 74 68 72 65 61 64 73 20 74 72 79 20 74 6f 20 75  threads try to u
2490: 73 65 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 64  se the same.** d
24a0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
24b0: 6f 6e 20 61 74 20 74 68 65 20 73 61 6d 65 20 74  on at the same t
24c0: 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f 6c 64 65 72  ime..**.** Older
24d0: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53 51 4c   versions of SQL
24e0: 69 74 65 20 75 73 65 64 20 61 6e 20 6f 70 74 69  ite used an opti
24f0: 6f 6e 61 6c 20 54 48 52 45 41 44 53 41 46 45 20  onal THREADSAFE 
2500: 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65 20 73 75 70  macro..** We sup
2510: 70 6f 72 74 20 74 68 61 74 20 66 6f 72 20 6c 65  port that for le
2520: 67 61 63 79 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  gacy..*/.#if !de
2530: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 48 52  fined(SQLITE_THR
2540: 45 41 44 53 41 46 45 29 0a 23 20 69 66 20 64 65  EADSAFE).# if de
2550: 66 69 6e 65 64 28 54 48 52 45 41 44 53 41 46 45  fined(THREADSAFE
2560: 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  ).#   define SQL
2570: 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 20 54  ITE_THREADSAFE T
2580: 48 52 45 41 44 53 41 46 45 0a 23 20 65 6c 73 65  HREADSAFE.# else
2590: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
25a0: 54 45 5f 54 48 52 45 41 44 53 41 46 45 20 31 20  TE_THREADSAFE 1 
25b0: 2f 2a 20 49 4d 50 3a 20 52 2d 30 37 32 37 32 2d  /* IMP: R-07272-
25c0: 32 32 33 30 39 20 2a 2f 0a 23 20 65 6e 64 69 66  22309 */.# endif
25d0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50  .#endif../*.** P
25e0: 6f 77 65 72 73 61 66 65 20 6f 76 65 72 77 72 69  owersafe overwri
25f0: 74 65 20 69 73 20 6f 6e 20 62 79 20 64 65 66 61  te is on by defa
2600: 75 6c 74 2e 20 20 42 75 74 20 63 61 6e 20 62 65  ult.  But can be
2610: 20 74 75 72 6e 65 64 20 6f 66 66 20 75 73 69 6e   turned off usin
2620: 67 0a 2a 2a 20 74 68 65 20 2d 44 53 51 4c 49 54  g.** the -DSQLIT
2630: 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56 45 52  E_POWERSAFE_OVER
2640: 57 52 49 54 45 3d 30 20 63 6f 6d 6d 61 6e 64 2d  WRITE=0 command-
2650: 6c 69 6e 65 20 6f 70 74 69 6f 6e 2e 0a 2a 2f 0a  line option..*/.
2660: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 50  #ifndef SQLITE_P
2670: 4f 57 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49  OWERSAFE_OVERWRI
2680: 54 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  TE.# define SQLI
2690: 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56 45  TE_POWERSAFE_OVE
26a0: 52 57 52 49 54 45 20 31 0a 23 65 6e 64 69 66 0a  RWRITE 1.#endif.
26b0: 0a 2f 2a 0a 2a 2a 20 45 56 49 44 45 4e 43 45 2d  ./*.** EVIDENCE-
26c0: 4f 46 3a 20 52 2d 32 35 37 31 35 2d 33 37 30 37  OF: R-25715-3707
26d0: 32 20 4d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  2 Memory allocat
26e0: 69 6f 6e 20 73 74 61 74 69 73 74 69 63 73 20 61  ion statistics a
26f0: 72 65 20 65 6e 61 62 6c 65 64 20 62 79 0a 2a 2a  re enabled by.**
2700: 20 64 65 66 61 75 6c 74 20 75 6e 6c 65 73 73 20   default unless 
2710: 53 51 4c 69 74 65 20 69 73 20 63 6f 6d 70 69 6c  SQLite is compil
2720: 65 64 20 77 69 74 68 20 53 51 4c 49 54 45 5f 44  ed with SQLITE_D
2730: 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53  EFAULT_MEMSTATUS
2740: 3d 30 20 69 6e 0a 2a 2a 20 77 68 69 63 68 20 63  =0 in.** which c
2750: 61 73 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ase memory alloc
2760: 61 74 69 6f 6e 20 73 74 61 74 69 73 74 69 63 73  ation statistics
2770: 20 61 72 65 20 64 69 73 61 62 6c 65 64 20 62 79   are disabled by
2780: 20 64 65 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66   default..*/.#if
2790: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
27a0: 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54  _DEFAULT_MEMSTAT
27b0: 55 53 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  US).# define SQL
27c0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53  ITE_DEFAULT_MEMS
27d0: 54 41 54 55 53 20 31 0a 23 65 6e 64 69 66 0a 0a  TATUS 1.#endif..
27e0: 2f 2a 0a 2a 2a 20 45 78 61 63 74 6c 79 20 6f 6e  /*.** Exactly on
27f0: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
2800: 6e 67 20 6d 61 63 72 6f 73 20 6d 75 73 74 20 62  ng macros must b
2810: 65 20 64 65 66 69 6e 65 64 20 69 6e 20 6f 72 64  e defined in ord
2820: 65 72 20 74 6f 0a 2a 2a 20 73 70 65 63 69 66 79  er to.** specify
2830: 20 77 68 69 63 68 20 6d 65 6d 6f 72 79 20 61 6c   which memory al
2840: 6c 6f 63 61 74 69 6f 6e 20 73 75 62 73 79 73 74  location subsyst
2850: 65 6d 20 74 6f 20 75 73 65 2e 0a 2a 2a 0a 2a 2a  em to use..**.**
2860: 20 20 20 20 20 53 51 4c 49 54 45 5f 53 59 53 54       SQLITE_SYST
2870: 45 4d 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20  EM_MALLOC       
2880: 20 20 20 2f 2f 20 55 73 65 20 6e 6f 72 6d 61 6c     // Use normal
2890: 20 73 79 73 74 65 6d 20 6d 61 6c 6c 6f 63 28 29   system malloc()
28a0: 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 57  .**     SQLITE_W
28b0: 49 4e 33 32 5f 4d 41 4c 4c 4f 43 20 20 20 20 20  IN32_MALLOC     
28c0: 20 20 20 20 20 20 2f 2f 20 55 73 65 20 57 69 6e        // Use Win
28d0: 33 32 20 6e 61 74 69 76 65 20 68 65 61 70 20 41  32 native heap A
28e0: 50 49 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45  PI.**     SQLITE
28f0: 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 20 20 20 20  _ZERO_MALLOC    
2900: 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20 61          // Use a
2910: 20 73 74 75 62 20 61 6c 6c 6f 63 61 74 6f 72 20   stub allocator 
2920: 74 68 61 74 20 61 6c 77 61 79 73 20 66 61 69 6c  that always fail
2930: 73 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f  s.**     SQLITE_
2940: 4d 45 4d 44 45 42 55 47 20 20 20 20 20 20 20 20  MEMDEBUG        
2950: 20 20 20 20 20 20 20 2f 2f 20 44 65 62 75 67 67         // Debugg
2960: 69 6e 67 20 76 65 72 73 69 6f 6e 20 6f 66 20 73  ing version of s
2970: 79 73 74 65 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a  ystem malloc().*
2980: 2a 0a 2a 2a 20 4f 6e 20 57 69 6e 64 6f 77 73 2c  *.** On Windows,
2990: 20 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f 57   if the SQLITE_W
29a0: 49 4e 33 32 5f 4d 41 4c 4c 4f 43 5f 56 41 4c 49  IN32_MALLOC_VALI
29b0: 44 41 54 45 20 6d 61 63 72 6f 20 69 73 20 64 65  DATE macro is de
29c0: 66 69 6e 65 64 20 61 6e 64 20 74 68 65 0a 2a 2a  fined and the.**
29d0: 20 61 73 73 65 72 74 28 29 20 6d 61 63 72 6f 20   assert() macro 
29e0: 69 73 20 65 6e 61 62 6c 65 64 2c 20 65 61 63 68  is enabled, each
29f0: 20 63 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20 57   call into the W
2a00: 69 6e 33 32 20 6e 61 74 69 76 65 20 68 65 61 70  in32 native heap
2a10: 20 73 75 62 73 79 73 74 65 6d 0a 2a 2a 20 77 69   subsystem.** wi
2a20: 6c 6c 20 63 61 75 73 65 20 48 65 61 70 56 61 6c  ll cause HeapVal
2a30: 69 64 61 74 65 20 74 6f 20 62 65 20 63 61 6c 6c  idate to be call
2a40: 65 64 2e 20 20 49 66 20 68 65 61 70 20 76 61 6c  ed.  If heap val
2a50: 69 64 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 66  idation should f
2a60: 61 69 6c 2c 20 61 6e 0a 2a 2a 20 61 73 73 65 72  ail, an.** asser
2a70: 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 74 72 69  tion will be tri
2a80: 67 67 65 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66  ggered..**.** If
2a90: 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 61 62 6f   none of the abo
2aa0: 76 65 20 61 72 65 20 64 65 66 69 6e 65 64 2c 20  ve are defined, 
2ab0: 74 68 65 6e 20 73 65 74 20 53 51 4c 49 54 45 5f  then set SQLITE_
2ac0: 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 61 73  SYSTEM_MALLOC as
2ad0: 0a 2a 2a 20 74 68 65 20 64 65 66 61 75 6c 74 2e  .** the default.
2ae0: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
2af0: 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41  SQLITE_SYSTEM_MA
2b00: 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69  LLOC) \.  + defi
2b10: 6e 65 64 28 53 51 4c 49 54 45 5f 57 49 4e 33 32  ned(SQLITE_WIN32
2b20: 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64  _MALLOC) \.  + d
2b30: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 5a 45  efined(SQLITE_ZE
2b40: 52 4f 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b  RO_MALLOC) \.  +
2b50: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2b60: 4d 45 4d 44 45 42 55 47 29 3e 31 0a 23 20 65 72  MEMDEBUG)>1.# er
2b70: 72 6f 72 20 22 54 77 6f 20 6f 72 20 6d 6f 72 65  ror "Two or more
2b80: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
2b90: 67 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 63  g compile-time c
2ba0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74  onfiguration opt
2bb0: 69 6f 6e 73 5c 0a 20 61 72 65 20 64 65 66 69 6e  ions\. are defin
2bc0: 65 64 20 62 75 74 20 61 74 20 6d 6f 73 74 20 6f  ed but at most o
2bd0: 6e 65 20 69 73 20 61 6c 6c 6f 77 65 64 3a 5c 0a  ne is allowed:\.
2be0: 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d   SQLITE_SYSTEM_M
2bf0: 41 4c 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 57 49  ALLOC, SQLITE_WI
2c00: 4e 33 32 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c 49  N32_MALLOC, SQLI
2c10: 54 45 5f 4d 45 4d 44 45 42 55 47 2c 5c 0a 20 53  TE_MEMDEBUG,\. S
2c20: 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f  QLITE_ZERO_MALLO
2c30: 43 22 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65  C".#endif.#if de
2c40: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53  fined(SQLITE_SYS
2c50: 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20  TEM_MALLOC) \.  
2c60: 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  + defined(SQLITE
2c70: 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c  _WIN32_MALLOC) \
2c80: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
2c90: 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29  ITE_ZERO_MALLOC)
2ca0: 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53   \.  + defined(S
2cb0: 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3d  QLITE_MEMDEBUG)=
2cc0: 3d 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  =0.# define SQLI
2cd0: 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43  TE_SYSTEM_MALLOC
2ce0: 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   1.#endif../*.**
2cf0: 20 49 66 20 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f   If SQLITE_MALLO
2d00: 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 20 69 73 20  C_SOFT_LIMIT is 
2d10: 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74  not zero, then t
2d20: 72 79 20 74 6f 20 6b 65 65 70 20 74 68 65 0a 2a  ry to keep the.*
2d30: 2a 20 73 69 7a 65 73 20 6f 66 20 6d 65 6d 6f 72  * sizes of memor
2d40: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 62 65  y allocations be
2d50: 6c 6f 77 20 74 68 69 73 20 76 61 6c 75 65 20 77  low this value w
2d60: 68 65 72 65 20 70 6f 73 73 69 62 6c 65 2e 0a 2a  here possible..*
2d70: 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  /.#if !defined(S
2d80: 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46  QLITE_MALLOC_SOF
2d90: 54 5f 4c 49 4d 49 54 29 0a 23 20 64 65 66 69 6e  T_LIMIT).# defin
2da0: 65 20 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f  e SQLITE_MALLOC_
2db0: 53 4f 46 54 5f 4c 49 4d 49 54 20 31 30 32 34 0a  SOFT_LIMIT 1024.
2dc0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 57 65  #endif../*.** We
2dd0: 20 6e 65 65 64 20 74 6f 20 64 65 66 69 6e 65 20   need to define 
2de0: 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 61 73  _XOPEN_SOURCE as
2df0: 20 66 6f 6c 6c 6f 77 73 20 69 6e 20 6f 72 64 65   follows in orde
2e00: 72 20 74 6f 20 65 6e 61 62 6c 65 0a 2a 2a 20 72  r to enable.** r
2e10: 65 63 75 72 73 69 76 65 20 6d 75 74 65 78 65 73  ecursive mutexes
2e20: 20 6f 6e 20 6d 6f 73 74 20 55 6e 69 78 20 73 79   on most Unix sy
2e30: 73 74 65 6d 73 20 61 6e 64 20 66 63 68 6d 6f 64  stems and fchmod
2e40: 28 29 20 6f 6e 20 4f 70 65 6e 42 53 44 2e 0a 2a  () on OpenBSD..*
2e50: 2a 20 42 75 74 20 5f 58 4f 50 45 4e 5f 53 4f 55  * But _XOPEN_SOU
2e60: 52 43 45 20 64 65 66 69 6e 65 20 63 61 75 73 65  RCE define cause
2e70: 73 20 70 72 6f 62 6c 65 6d 73 20 66 6f 72 20 4d  s problems for M
2e80: 61 63 20 4f 53 20 58 2c 20 73 6f 20 6f 6d 69 74  ac OS X, so omit
2e90: 0a 2a 2a 20 69 74 2e 0a 2a 2f 0a 23 69 66 20 21  .** it..*/.#if !
2ea0: 64 65 66 69 6e 65 64 28 5f 58 4f 50 45 4e 5f 53  defined(_XOPEN_S
2eb0: 4f 55 52 43 45 29 20 26 26 20 21 64 65 66 69 6e  OURCE) && !defin
2ec0: 65 64 28 5f 5f 44 41 52 57 49 4e 5f 5f 29 20 26  ed(__DARWIN__) &
2ed0: 26 20 21 64 65 66 69 6e 65 64 28 5f 5f 41 50 50  & !defined(__APP
2ee0: 4c 45 5f 5f 29 0a 23 20 20 64 65 66 69 6e 65 20  LE__).#  define 
2ef0: 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 36 30  _XOPEN_SOURCE 60
2f00: 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
2f10: 4e 44 45 42 55 47 20 61 6e 64 20 53 51 4c 49 54  NDEBUG and SQLIT
2f20: 45 5f 44 45 42 55 47 20 61 72 65 20 6f 70 70 6f  E_DEBUG are oppo
2f30: 73 69 74 65 73 2e 20 20 49 74 20 73 68 6f 75 6c  sites.  It shoul
2f40: 64 20 61 6c 77 61 79 73 20 62 65 20 74 72 75 65  d always be true
2f50: 20 74 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65 64   that.** defined
2f60: 28 4e 44 45 42 55 47 29 3d 3d 21 64 65 66 69 6e  (NDEBUG)==!defin
2f70: 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
2f80: 2e 20 20 49 66 20 74 68 69 73 20 69 73 20 6e 6f  .  If this is no
2f90: 74 20 63 75 72 72 65 6e 74 6c 79 20 74 72 75 65  t currently true
2fa0: 2c 0a 2a 2a 20 6d 61 6b 65 20 69 74 20 74 72 75  ,.** make it tru
2fb0: 65 20 62 79 20 64 65 66 69 6e 69 6e 67 20 6f 72  e by defining or
2fc0: 20 75 6e 64 65 66 69 6e 69 6e 67 20 4e 44 45 42   undefining NDEB
2fd0: 55 47 2e 0a 2a 2a 0a 2a 2a 20 53 65 74 74 69 6e  UG..**.** Settin
2fe0: 67 20 4e 44 45 42 55 47 20 6d 61 6b 65 73 20 74  g NDEBUG makes t
2ff0: 68 65 20 63 6f 64 65 20 73 6d 61 6c 6c 65 72 20  he code smaller 
3000: 61 6e 64 20 66 61 73 74 65 72 20 62 79 20 64 69  and faster by di
3010: 73 61 62 6c 69 6e 67 20 74 68 65 0a 2a 2a 20 61  sabling the.** a
3020: 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
3030: 74 73 20 69 6e 20 74 68 65 20 63 6f 64 65 2e 20  ts in the code. 
3040: 20 53 6f 20 77 65 20 77 61 6e 74 20 74 68 65 20   So we want the 
3050: 64 65 66 61 75 6c 74 20 61 63 74 69 6f 6e 0a 2a  default action.*
3060: 2a 20 74 6f 20 62 65 20 66 6f 72 20 4e 44 45 42  * to be for NDEB
3070: 55 47 20 74 6f 20 62 65 20 73 65 74 20 61 6e 64  UG to be set and
3080: 20 4e 44 45 42 55 47 20 74 6f 20 62 65 20 75 6e   NDEBUG to be un
3090: 64 65 66 69 6e 65 64 20 6f 6e 6c 79 20 69 66 20  defined only if 
30a0: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2a 2a 20  SQLITE_DEBUG.** 
30b0: 69 73 20 73 65 74 2e 20 20 54 68 75 73 20 4e 44  is set.  Thus ND
30c0: 45 42 55 47 20 62 65 63 6f 6d 65 73 20 61 6e 20  EBUG becomes an 
30d0: 6f 70 74 2d 69 6e 20 72 61 74 68 65 72 20 74 68  opt-in rather th
30e0: 61 6e 20 61 6e 20 6f 70 74 2d 6f 75 74 0a 2a 2a  an an opt-out.**
30f0: 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 23 69 66   feature..*/.#if
3100: 20 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47   !defined(NDEBUG
3110: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
3120: 4c 49 54 45 5f 44 45 42 55 47 29 0a 23 20 64 65  LITE_DEBUG).# de
3130: 66 69 6e 65 20 4e 44 45 42 55 47 20 31 0a 23 65  fine NDEBUG 1.#e
3140: 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64  ndif.#if defined
3150: 28 4e 44 45 42 55 47 29 20 26 26 20 64 65 66 69  (NDEBUG) && defi
3160: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
3170: 29 0a 23 20 75 6e 64 65 66 20 4e 44 45 42 55 47  ).# undef NDEBUG
3180: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45  .#endif../*.** E
3190: 6e 61 62 6c 65 20 53 51 4c 49 54 45 5f 45 4e 41  nable SQLITE_ENA
31a0: 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d  BLE_EXPLAIN_COMM
31b0: 45 4e 54 53 20 69 66 20 53 51 4c 49 54 45 5f 44  ENTS if SQLITE_D
31c0: 45 42 55 47 20 69 73 20 74 75 72 6e 65 64 20 6f  EBUG is turned o
31d0: 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  n..*/.#if !defin
31e0: 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
31f0: 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54  _EXPLAIN_COMMENT
3200: 53 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51  S) && defined(SQ
3210: 4c 49 54 45 5f 44 45 42 55 47 29 0a 23 20 64 65  LITE_DEBUG).# de
3220: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  fine SQLITE_ENAB
3230: 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45  LE_EXPLAIN_COMME
3240: 4e 54 53 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  NTS 1.#endif../*
3250: 0a 2a 2a 20 54 68 65 20 74 65 73 74 63 61 73 65  .** The testcase
3260: 28 29 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  () macro is used
3270: 20 74 6f 20 61 69 64 20 69 6e 20 63 6f 76 65 72   to aid in cover
3280: 61 67 65 20 74 65 73 74 69 6e 67 2e 20 20 57 68  age testing.  Wh
3290: 65 6e 0a 2a 2a 20 64 6f 69 6e 67 20 63 6f 76 65  en.** doing cove
32a0: 72 61 67 65 20 74 65 73 74 69 6e 67 2c 20 74 68  rage testing, th
32b0: 65 20 63 6f 6e 64 69 74 69 6f 6e 20 69 6e 73 69  e condition insi
32c0: 64 65 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  de the argument 
32d0: 74 6f 0a 2a 2a 20 74 65 73 74 63 61 73 65 28 29  to.** testcase()
32e0: 20 6d 75 73 74 20 62 65 20 65 76 61 6c 75 61 74   must be evaluat
32f0: 65 64 20 62 6f 74 68 20 74 72 75 65 20 61 6e 64  ed both true and
3300: 20 66 61 6c 73 65 20 69 6e 20 6f 72 64 65 72 20   false in order 
3310: 74 6f 0a 2a 2a 20 67 65 74 20 66 75 6c 6c 20 62  to.** get full b
3320: 72 61 6e 63 68 20 63 6f 76 65 72 61 67 65 2e 20  ranch coverage. 
3330: 20 54 68 65 20 74 65 73 74 63 61 73 65 28 29 20   The testcase() 
3340: 6d 61 63 72 6f 20 69 73 20 69 6e 73 65 72 74 65  macro is inserte
3350: 64 0a 2a 2a 20 74 6f 20 68 65 6c 70 20 65 6e 73  d.** to help ens
3360: 75 72 65 20 61 64 65 71 75 61 74 65 20 74 65 73  ure adequate tes
3370: 74 20 63 6f 76 65 72 61 67 65 20 69 6e 20 70 6c  t coverage in pl
3380: 61 63 65 73 20 77 68 65 72 65 20 73 69 6d 70 6c  aces where simpl
3390: 65 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 2f 64  e.** condition/d
33a0: 65 63 69 73 69 6f 6e 20 63 6f 76 65 72 61 67 65  ecision coverage
33b0: 20 69 73 20 69 6e 61 64 65 71 75 61 74 65 2e 20   is inadequate. 
33c0: 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 65   For example, te
33d0: 73 74 63 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20  stcase().** can 
33e0: 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20  be used to make 
33f0: 73 75 72 65 20 62 6f 75 6e 64 61 72 79 20 76 61  sure boundary va
3400: 6c 75 65 73 20 61 72 65 20 74 65 73 74 65 64 2e  lues are tested.
3410: 20 20 46 6f 72 0a 2a 2a 20 62 69 74 6d 61 73 6b    For.** bitmask
3420: 20 74 65 73 74 73 2c 20 74 65 73 74 63 61 73 65   tests, testcase
3430: 28 29 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  () can be used t
3440: 6f 20 6d 61 6b 65 20 73 75 72 65 20 65 61 63 68  o make sure each
3450: 20 62 69 74 0a 2a 2a 20 69 73 20 73 69 67 6e 69   bit.** is signi
3460: 66 69 63 61 6e 74 20 61 6e 64 20 75 73 65 64 20  ficant and used 
3470: 61 74 20 6c 65 61 73 74 20 6f 6e 63 65 2e 20 20  at least once.  
3480: 4f 6e 20 73 77 69 74 63 68 20 73 74 61 74 65 6d  On switch statem
3490: 65 6e 74 73 0a 2a 2a 20 77 68 65 72 65 20 6d 75  ents.** where mu
34a0: 6c 74 69 70 6c 65 20 63 61 73 65 73 20 67 6f 20  ltiple cases go 
34b0: 74 6f 20 74 68 65 20 73 61 6d 65 20 62 6c 6f 63  to the same bloc
34c0: 6b 20 6f 66 20 63 6f 64 65 2c 20 74 65 73 74 63  k of code, testc
34d0: 61 73 65 28 29 0a 2a 2a 20 63 61 6e 20 69 6e 73  ase().** can ins
34e0: 75 72 65 20 74 68 61 74 20 61 6c 6c 20 63 61 73  ure that all cas
34f0: 65 73 20 61 72 65 20 65 76 61 6c 75 61 74 65 64  es are evaluated
3500: 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ..**.*/.#ifdef S
3510: 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f 54  QLITE_COVERAGE_T
3520: 45 53 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  EST.  void sqlit
3530: 65 33 43 6f 76 65 72 61 67 65 28 69 6e 74 29 3b  e3Coverage(int);
3540: 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74 63 61  .# define testca
3550: 73 65 28 58 29 20 20 69 66 28 20 58 20 29 7b 20  se(X)  if( X ){ 
3560: 73 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65 28  sqlite3Coverage(
3570: 5f 5f 4c 49 4e 45 5f 5f 29 3b 20 7d 0a 23 65 6c  __LINE__); }.#el
3580: 73 65 0a 23 20 64 65 66 69 6e 65 20 74 65 73 74  se.# define test
3590: 63 61 73 65 28 58 29 0a 23 65 6e 64 69 66 0a 0a  case(X).#endif..
35a0: 2f 2a 0a 2a 2a 20 54 68 65 20 54 45 53 54 4f 4e  /*.** The TESTON
35b0: 4c 59 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  LY macro is used
35c0: 20 74 6f 20 65 6e 63 6c 6f 73 65 20 76 61 72 69   to enclose vari
35d0: 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e  able declaration
35e0: 73 20 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 62 69  s or.** other bi
35f0: 74 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  ts of code that 
3600: 61 72 65 20 6e 65 65 64 65 64 20 74 6f 20 73 75  are needed to su
3610: 70 70 6f 72 74 20 74 68 65 20 61 72 67 75 6d 65  pport the argume
3620: 6e 74 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74 65  nts.** within te
3630: 73 74 63 61 73 65 28 29 20 61 6e 64 20 61 73 73  stcase() and ass
3640: 65 72 74 28 29 20 6d 61 63 72 6f 73 2e 0a 2a 2f  ert() macros..*/
3650: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44  .#if !defined(ND
3660: 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64  EBUG) || defined
3670: 28 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45  (SQLITE_COVERAGE
3680: 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20  _TEST).# define 
3690: 54 45 53 54 4f 4e 4c 59 28 58 29 20 20 58 0a 23  TESTONLY(X)  X.#
36a0: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 54 45  else.# define TE
36b0: 53 54 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66  STONLY(X).#endif
36c0: 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 74 69 6d 65  ../*.** Sometime
36d0: 73 20 77 65 20 6e 65 65 64 20 61 20 73 6d 61 6c  s we need a smal
36e0: 6c 20 61 6d 6f 75 6e 74 20 6f 66 20 63 6f 64 65  l amount of code
36f0: 20 73 75 63 68 20 61 73 20 61 20 76 61 72 69 61   such as a varia
3700: 62 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ble initializati
3710: 6f 6e 0a 2a 2a 20 74 6f 20 73 65 74 75 70 20 66  on.** to setup f
3720: 6f 72 20 61 20 6c 61 74 65 72 20 61 73 73 65 72  or a later asser
3730: 74 28 29 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  t() statement.  
3740: 57 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74  We do not want t
3750: 68 69 73 20 63 6f 64 65 20 74 6f 0a 2a 2a 20 61  his code to.** a
3760: 70 70 65 61 72 20 77 68 65 6e 20 61 73 73 65 72  ppear when asser
3770: 74 28 29 20 69 73 20 64 69 73 61 62 6c 65 64 2e  t() is disabled.
3780: 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
3790: 6d 61 63 72 6f 20 69 73 20 74 68 65 72 65 66 6f  macro is therefo
37a0: 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 6f  re.** used to co
37b0: 6e 74 61 69 6e 20 74 68 61 74 20 73 65 74 75 70  ntain that setup
37c0: 20 63 6f 64 65 2e 20 20 54 68 65 20 22 56 56 41   code.  The "VVA
37d0: 22 20 61 63 72 6f 6e 79 6d 20 73 74 61 6e 64 73  " acronym stands
37e0: 20 66 6f 72 0a 2a 2a 20 22 56 65 72 69 66 69 63   for.** "Verific
37f0: 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f  ation, Validatio
3800: 6e 2c 20 61 6e 64 20 41 63 63 72 65 64 69 74 61  n, and Accredita
3810: 74 69 6f 6e 22 2e 20 20 49 6e 20 6f 74 68 65 72  tion".  In other
3820: 20 77 6f 72 64 73 2c 20 74 68 65 0a 2a 2a 20 63   words, the.** c
3830: 6f 64 65 20 77 69 74 68 69 6e 20 56 56 41 5f 4f  ode within VVA_O
3840: 4e 4c 59 28 29 20 77 69 6c 6c 20 6f 6e 6c 79 20  NLY() will only 
3850: 72 75 6e 20 64 75 72 69 6e 67 20 76 65 72 69 66  run during verif
3860: 69 63 61 74 69 6f 6e 20 70 72 6f 63 65 73 73 65  ication processe
3870: 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44  s..*/.#ifndef ND
3880: 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20 56 56  EBUG.# define VV
3890: 41 5f 4f 4e 4c 59 28 58 29 20 20 58 0a 23 65 6c  A_ONLY(X)  X.#el
38a0: 73 65 0a 23 20 64 65 66 69 6e 65 20 56 56 41 5f  se.# define VVA_
38b0: 4f 4e 4c 59 28 58 29 0a 23 65 6e 64 69 66 0a 0a  ONLY(X).#endif..
38c0: 2f 2a 0a 2a 2a 20 54 68 65 20 41 4c 57 41 59 53  /*.** The ALWAYS
38d0: 20 61 6e 64 20 4e 45 56 45 52 20 6d 61 63 72 6f   and NEVER macro
38e0: 73 20 73 75 72 72 6f 75 6e 64 20 62 6f 6f 6c 65  s surround boole
38f0: 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 20 77  an expressions w
3900: 68 69 63 68 0a 2a 2a 20 61 72 65 20 69 6e 74 65  hich.** are inte
3910: 6e 64 65 64 20 74 6f 20 61 6c 77 61 79 73 20 62  nded to always b
3920: 65 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 2c  e true or false,
3930: 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20   respectively.  
3940: 53 75 63 68 0a 2a 2a 20 65 78 70 72 65 73 73 69  Such.** expressi
3950: 6f 6e 73 20 63 6f 75 6c 64 20 62 65 20 6f 6d 69  ons could be omi
3960: 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 63 6f  tted from the co
3970: 64 65 20 63 6f 6d 70 6c 65 74 65 6c 79 2e 20 20  de completely.  
3980: 42 75 74 20 74 68 65 79 0a 2a 2a 20 61 72 65 20  But they.** are 
3990: 69 6e 63 6c 75 64 65 64 20 69 6e 20 61 20 66 65  included in a fe
39a0: 77 20 63 61 73 65 73 20 69 6e 20 6f 72 64 65 72  w cases in order
39b0: 20 74 6f 20 65 6e 68 61 6e 63 65 20 74 68 65 20   to enhance the 
39c0: 72 65 73 69 6c 69 65 6e 63 65 0a 2a 2a 20 6f 66  resilience.** of
39d0: 20 53 51 4c 69 74 65 20 74 6f 20 75 6e 65 78 70   SQLite to unexp
39e0: 65 63 74 65 64 20 62 65 68 61 76 69 6f 72 20 2d  ected behavior -
39f0: 20 74 6f 20 6d 61 6b 65 20 74 68 65 20 63 6f 64   to make the cod
3a00: 65 20 22 73 65 6c 66 2d 68 65 61 6c 69 6e 67 22  e "self-healing"
3a10: 0a 2a 2a 20 6f 72 20 22 64 75 63 74 69 6c 65 22  .** or "ductile"
3a20: 20 72 61 74 68 65 72 20 74 68 61 6e 20 62 65 69   rather than bei
3a30: 6e 67 20 22 62 72 69 74 74 6c 65 22 20 61 6e 64  ng "brittle" and
3a40: 20 63 72 61 73 68 69 6e 67 20 61 74 20 74 68 65   crashing at the
3a50: 20 66 69 72 73 74 0a 2a 2a 20 68 69 6e 74 20 6f   first.** hint o
3a60: 66 20 75 6e 70 6c 61 6e 6e 65 64 20 62 65 68 61  f unplanned beha
3a70: 76 69 6f 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f  vior..**.** In o
3a80: 74 68 65 72 20 77 6f 72 64 73 2c 20 41 4c 57 41  ther words, ALWA
3a90: 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72 65  YS and NEVER are
3aa0: 20 61 64 64 65 64 20 66 6f 72 20 64 65 66 65 6e   added for defen
3ab0: 73 69 76 65 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  sive code..**.**
3ac0: 20 57 68 65 6e 20 64 6f 69 6e 67 20 63 6f 76 65   When doing cove
3ad0: 72 61 67 65 20 74 65 73 74 69 6e 67 20 41 4c 57  rage testing ALW
3ae0: 41 59 53 20 61 6e 64 20 4e 45 56 45 52 20 61 72  AYS and NEVER ar
3af0: 65 20 68 61 72 64 2d 63 6f 64 65 64 20 74 6f 0a  e hard-coded to.
3b00: 2a 2a 20 62 65 20 74 72 75 65 20 61 6e 64 20 66  ** be true and f
3b10: 61 6c 73 65 20 73 6f 20 74 68 61 74 20 74 68 65  alse so that the
3b20: 20 75 6e 72 65 61 63 68 61 62 6c 65 20 63 6f 64   unreachable cod
3b30: 65 20 74 68 65 79 20 73 70 65 63 69 66 79 20 77  e they specify w
3b40: 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 62 65 20 63 6f  ill.** not be co
3b50: 75 6e 74 65 64 20 61 73 20 75 6e 74 65 73 74 65  unted as unteste
3b60: 64 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 20 64  d code..*/.#if d
3b70: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f  efined(SQLITE_CO
3b80: 56 45 52 41 47 45 5f 54 45 53 54 29 20 7c 7c 20  VERAGE_TEST) || 
3b90: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d  defined(SQLITE_M
3ba0: 55 54 41 54 49 4f 4e 5f 54 45 53 54 29 0a 23 20  UTATION_TEST).# 
3bb0: 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29  define ALWAYS(X)
3bc0: 20 20 20 20 20 20 28 31 29 0a 23 20 64 65 66 69        (1).# defi
3bd0: 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20 20  ne NEVER(X)     
3be0: 20 20 28 30 29 0a 23 65 6c 69 66 20 21 64 65 66    (0).#elif !def
3bf0: 69 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64  ined(NDEBUG).# d
3c00: 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58 29 20  efine ALWAYS(X) 
3c10: 20 20 20 20 20 28 28 58 29 3f 31 3a 28 61 73 73       ((X)?1:(ass
3c20: 65 72 74 28 30 29 2c 30 29 29 0a 23 20 64 65 66  ert(0),0)).# def
3c30: 69 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20  ine NEVER(X)    
3c40: 20 20 20 28 28 58 29 3f 28 61 73 73 65 72 74 28     ((X)?(assert(
3c50: 30 29 2c 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23  0),1):0).#else.#
3c60: 20 64 65 66 69 6e 65 20 41 4c 57 41 59 53 28 58   define ALWAYS(X
3c70: 29 20 20 20 20 20 20 28 58 29 0a 23 20 64 65 66  )      (X).# def
3c80: 69 6e 65 20 4e 45 56 45 52 28 58 29 20 20 20 20  ine NEVER(X)    
3c90: 20 20 20 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f     (X).#endif../
3ca0: 2a 0a 2a 2a 20 53 6f 6d 65 20 6d 61 6c 6c 6f 63  *.** Some malloc
3cb0: 20 66 61 69 6c 75 72 65 73 20 61 72 65 20 6f 6e   failures are on
3cc0: 6c 79 20 70 6f 73 73 69 62 6c 65 20 69 66 20 53  ly possible if S
3cd0: 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c  QLITE_TEST_REALL
3ce0: 4f 43 5f 53 54 52 45 53 53 20 69 73 0a 2a 2a 20  OC_STRESS is.** 
3cf0: 64 65 66 69 6e 65 64 2e 20 20 57 65 20 6e 65 65  defined.  We nee
3d00: 64 20 74 6f 20 64 65 66 65 6e 64 20 61 67 61 69  d to defend agai
3d10: 6e 73 74 20 74 68 6f 73 65 20 66 61 69 6c 75 72  nst those failur
3d20: 65 73 20 77 68 65 6e 20 74 65 73 74 69 6e 67 20  es when testing 
3d30: 77 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 54  with.** SQLITE_T
3d40: 45 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45  EST_REALLOC_STRE
3d50: 53 53 2c 20 62 75 74 20 77 65 20 64 6f 6e 27 74  SS, but we don't
3d60: 20 77 61 6e 74 20 74 68 65 20 75 6e 72 65 61 63   want the unreac
3d70: 68 61 62 6c 65 20 62 72 61 6e 63 68 65 73 0a 2a  hable branches.*
3d80: 2a 20 64 75 72 69 6e 67 20 61 20 6e 6f 72 6d 61  * during a norma
3d90: 6c 20 62 75 69 6c 64 2e 20 20 54 68 65 20 66 6f  l build.  The fo
3da0: 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 63 61  llowing macro ca
3db0: 6e 20 62 65 20 75 73 65 64 20 74 6f 20 64 69 73  n be used to dis
3dc0: 61 62 6c 65 20 74 65 73 74 73 0a 2a 2a 20 74 68  able tests.** th
3dd0: 61 74 20 61 72 65 20 61 6c 77 61 79 73 20 66 61  at are always fa
3de0: 6c 73 65 20 65 78 63 65 70 74 20 77 68 65 6e 20  lse except when 
3df0: 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41 4c  SQLITE_TEST_REAL
3e00: 4c 4f 43 5f 53 54 52 45 53 53 20 69 73 20 73 65  LOC_STRESS is se
3e10: 74 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  t..*/.#if define
3e20: 64 28 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45  d(SQLITE_TEST_RE
3e30: 41 4c 4c 4f 43 5f 53 54 52 45 53 53 29 0a 23 20  ALLOC_STRESS).# 
3e40: 64 65 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52  define ONLY_IF_R
3e50: 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29  EALLOC_STRESS(X)
3e60: 20 20 28 58 29 0a 23 65 6c 69 66 20 21 64 65 66    (X).#elif !def
3e70: 69 6e 65 64 28 4e 44 45 42 55 47 29 0a 23 20 64  ined(NDEBUG).# d
3e80: 65 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45  efine ONLY_IF_RE
3e90: 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20  ALLOC_STRESS(X) 
3ea0: 20 28 28 58 29 3f 28 61 73 73 65 72 74 28 30 29   ((X)?(assert(0)
3eb0: 2c 31 29 3a 30 29 0a 23 65 6c 73 65 0a 23 20 64  ,1):0).#else.# d
3ec0: 65 66 69 6e 65 20 4f 4e 4c 59 5f 49 46 5f 52 45  efine ONLY_IF_RE
3ed0: 41 4c 4c 4f 43 5f 53 54 52 45 53 53 28 58 29 20  ALLOC_STRESS(X) 
3ee0: 20 28 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a   (0).#endif../*.
3ef0: 2a 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73 20  ** Declarations 
3f00: 75 73 65 64 20 66 6f 72 20 74 72 61 63 69 6e 67  used for tracing
3f10: 20 74 68 65 20 6f 70 65 72 61 74 69 6e 67 20 73   the operating s
3f20: 79 73 74 65 6d 20 69 6e 74 65 72 66 61 63 65 73  ystem interfaces
3f30: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
3f40: 28 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f 4f 53  (SQLITE_FORCE_OS
3f50: 5f 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e  _TRACE) || defin
3f60: 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20  ed(SQLITE_TEST) 
3f70: 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65  || \.    (define
3f80: 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
3f90: 26 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e  && SQLITE_OS_WIN
3fa0: 29 0a 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73  ).  extern int s
3fb0: 71 6c 69 74 65 33 4f 53 54 72 61 63 65 3b 0a 23  qlite3OSTrace;.#
3fc0: 20 64 65 66 69 6e 65 20 4f 53 54 52 41 43 45 28   define OSTRACE(
3fd0: 58 29 20 20 20 20 20 20 20 20 20 20 69 66 28 20  X)          if( 
3fe0: 73 71 6c 69 74 65 33 4f 53 54 72 61 63 65 20 29  sqlite3OSTrace )
3ff0: 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69   sqlite3DebugPri
4000: 6e 74 66 20 58 0a 23 20 64 65 66 69 6e 65 20 53  ntf X.# define S
4010: 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52  QLITE_HAVE_OS_TR
4020: 41 43 45 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  ACE.#else.# defi
4030: 6e 65 20 4f 53 54 52 41 43 45 28 58 29 0a 23 20  ne OSTRACE(X).# 
4040: 75 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 48 41  undef  SQLITE_HA
4050: 56 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6e 64  VE_OS_TRACE.#end
4060: 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 73 20 74 68 65  if../*.** Is the
4070: 20 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28   sqlite3ErrName(
4080: 29 20 66 75 6e 63 74 69 6f 6e 20 6e 65 65 64 65  ) function neede
4090: 64 20 69 6e 20 74 68 65 20 62 75 69 6c 64 3f 20  d in the build? 
40a0: 20 43 75 72 72 65 6e 74 6c 79 2c 0a 2a 2a 20 69   Currently,.** i
40b0: 74 20 69 73 20 6e 65 65 64 65 64 20 62 79 20 22  t is needed by "
40c0: 6d 75 74 65 78 5f 77 33 32 2e 63 22 20 28 77 68  mutex_w32.c" (wh
40d0: 65 6e 20 64 65 62 75 67 67 69 6e 67 29 2c 20 22  en debugging), "
40e0: 6f 73 5f 77 69 6e 2e 63 22 20 28 77 68 65 6e 0a  os_win.c" (when.
40f0: 2a 2a 20 4f 53 54 52 41 43 45 20 69 73 20 65 6e  ** OSTRACE is en
4100: 61 62 6c 65 64 29 2c 20 61 6e 64 20 62 79 20 73  abled), and by s
4110: 65 76 65 72 61 6c 20 22 74 65 73 74 2a 2e 63 22  everal "test*.c"
4120: 20 66 69 6c 65 73 20 28 77 68 69 63 68 20 61 72   files (which ar
4130: 65 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 20 75 73  e.** compiled us
4140: 69 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 29  ing SQLITE_TEST)
4150: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
4160: 28 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f  (SQLITE_HAVE_OS_
4170: 54 52 41 43 45 29 20 7c 7c 20 64 65 66 69 6e 65  TRACE) || define
4180: 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 20 7c  d(SQLITE_TEST) |
4190: 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64  | \.    (defined
41a0: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 26  (SQLITE_DEBUG) &
41b0: 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 29  & SQLITE_OS_WIN)
41c0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
41d0: 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 0a 23  _NEED_ERR_NAME.#
41e0: 65 6c 73 65 0a 23 20 75 6e 64 65 66 20 20 53 51  else.# undef  SQ
41f0: 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41  LITE_NEED_ERR_NA
4200: 4d 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  ME.#endif../*.**
4210: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45   SQLITE_ENABLE_E
4220: 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20  XPLAIN_COMMENTS 
4230: 69 73 20 69 6e 63 6f 6d 70 61 74 69 62 6c 65 20  is incompatible 
4240: 77 69 74 68 20 53 51 4c 49 54 45 5f 4f 4d 49 54  with SQLITE_OMIT
4250: 5f 45 58 50 4c 41 49 4e 0a 2a 2f 0a 23 69 66 64  _EXPLAIN.*/.#ifd
4260: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45  ef SQLITE_OMIT_E
4270: 58 50 4c 41 49 4e 0a 23 20 75 6e 64 65 66 20 53  XPLAIN.# undef S
4280: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50  QLITE_ENABLE_EXP
4290: 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 0a 23 65  LAIN_COMMENTS.#e
42a0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  ndif../*.** Retu
42b0: 72 6e 20 74 72 75 65 20 28 6e 6f 6e 2d 7a 65 72  rn true (non-zer
42c0: 6f 29 20 69 66 20 74 68 65 20 69 6e 70 75 74 20  o) if the input 
42d0: 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68  is an integer th
42e0: 61 74 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 0a  at is too large.
42f0: 2a 2a 20 74 6f 20 66 69 74 20 69 6e 20 33 32 2d  ** to fit in 32-
4300: 62 69 74 73 2e 20 20 54 68 69 73 20 6d 61 63 72  bits.  This macr
4310: 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69 64 65  o is used inside
4320: 20 6f 66 20 76 61 72 69 6f 75 73 20 74 65 73 74   of various test
4330: 63 61 73 65 28 29 0a 2a 2a 20 6d 61 63 72 6f 73  case().** macros
4340: 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20   to verify that 
4350: 77 65 20 68 61 76 65 20 74 65 73 74 65 64 20 53  we have tested S
4360: 51 4c 69 74 65 20 66 6f 72 20 6c 61 72 67 65 2d  QLite for large-
4370: 66 69 6c 65 20 73 75 70 70 6f 72 74 2e 0a 2a 2f  file support..*/
4380: 0a 23 64 65 66 69 6e 65 20 49 53 5f 42 49 47 5f  .#define IS_BIG_
4390: 49 4e 54 28 58 29 20 20 28 28 28 58 29 26 7e 28  INT(X)  (((X)&~(
43a0: 69 36 34 29 30 78 66 66 66 66 66 66 66 66 29 21  i64)0xffffffff)!
43b0: 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d  =0)../*.** The m
43c0: 61 63 72 6f 20 75 6e 6c 69 6b 65 6c 79 28 29 20  acro unlikely() 
43d0: 69 73 20 61 20 68 69 6e 74 20 74 68 61 74 20 73  is a hint that s
43e0: 75 72 72 6f 75 6e 64 73 20 61 20 62 6f 6f 6c 65  urrounds a boole
43f0: 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e  an.** expression
4400: 20 74 68 61 74 20 69 73 20 75 73 75 61 6c 6c 79   that is usually
4410: 20 66 61 6c 73 65 2e 20 20 4d 61 63 72 6f 20 6c   false.  Macro l
4420: 69 6b 65 6c 79 28 29 20 73 75 72 72 6f 75 6e 64  ikely() surround
4430: 73 0a 2a 2a 20 61 20 62 6f 6f 6c 65 61 6e 20 65  s.** a boolean e
4440: 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69  xpression that i
4450: 73 20 75 73 75 61 6c 6c 79 20 74 72 75 65 2e 20  s usually true. 
4460: 20 54 68 65 73 65 20 68 69 6e 74 73 20 63 6f 75   These hints cou
4470: 6c 64 2c 0a 2a 2a 20 69 6e 20 74 68 65 6f 72 79  ld,.** in theory
4480: 2c 20 62 65 20 75 73 65 64 20 62 79 20 74 68 65  , be used by the
4490: 20 63 6f 6d 70 69 6c 65 72 20 74 6f 20 67 65 6e   compiler to gen
44a0: 65 72 61 74 65 20 62 65 74 74 65 72 20 63 6f 64  erate better cod
44b0: 65 2c 20 62 75 74 0a 2a 2a 20 63 75 72 72 65 6e  e, but.** curren
44c0: 74 6c 79 20 74 68 65 79 20 61 72 65 20 6a 75 73  tly they are jus
44d0: 74 20 63 6f 6d 6d 65 6e 74 73 20 66 6f 72 20 68  t comments for h
44e0: 75 6d 61 6e 20 72 65 61 64 65 72 73 2e 0a 2a 2f  uman readers..*/
44f0: 0a 23 64 65 66 69 6e 65 20 6c 69 6b 65 6c 79 28  .#define likely(
4500: 58 29 20 20 20 20 28 58 29 0a 23 64 65 66 69 6e  X)    (X).#defin
4510: 65 20 75 6e 6c 69 6b 65 6c 79 28 58 29 20 20 28  e unlikely(X)  (
4520: 58 29 0a 0a 23 69 6e 63 6c 75 64 65 20 22 68 61  X)..#include "ha
4530: 73 68 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  sh.h".#include "
4540: 70 61 72 73 65 2e 68 22 0a 23 69 6e 63 6c 75 64  parse.h".#includ
4550: 65 20 3c 73 74 64 69 6f 2e 68 3e 0a 23 69 6e 63  e <stdio.h>.#inc
4560: 6c 75 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 0a  lude <stdlib.h>.
4570: 23 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67  #include <string
4580: 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 61 73  .h>.#include <as
4590: 73 65 72 74 2e 68 3e 0a 23 69 6e 63 6c 75 64 65  sert.h>.#include
45a0: 20 3c 73 74 64 64 65 66 2e 68 3e 0a 0a 2f 2a 0a   <stddef.h>../*.
45b0: 2a 2a 20 49 66 20 63 6f 6d 70 69 6c 69 6e 67 20  ** If compiling 
45c0: 66 6f 72 20 61 20 70 72 6f 63 65 73 73 6f 72 20  for a processor 
45d0: 74 68 61 74 20 6c 61 63 6b 73 20 66 6c 6f 61 74  that lacks float
45e0: 69 6e 67 20 70 6f 69 6e 74 20 73 75 70 70 6f 72  ing point suppor
45f0: 74 2c 0a 2a 2a 20 73 75 62 73 74 69 74 75 74 65  t,.** substitute
4600: 20 69 6e 74 65 67 65 72 20 66 6f 72 20 66 6c 6f   integer for flo
4610: 61 74 69 6e 67 2d 70 6f 69 6e 74 0a 2a 2f 0a 23  ating-point.*/.#
4620: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
4630: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
4640: 0a 23 20 64 65 66 69 6e 65 20 64 6f 75 62 6c 65  .# define double
4650: 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20   sqlite_int64.# 
4660: 64 65 66 69 6e 65 20 66 6c 6f 61 74 20 73 71 6c  define float sql
4670: 69 74 65 5f 69 6e 74 36 34 0a 23 20 64 65 66 69  ite_int64.# defi
4680: 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59  ne LONGDOUBLE_TY
4690: 50 45 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a  PE sqlite_int64.
46a0: 23 20 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  # ifndef SQLITE_
46b0: 42 49 47 5f 44 42 4c 0a 23 20 20 20 64 65 66 69  BIG_DBL.#   defi
46c0: 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42  ne SQLITE_BIG_DB
46d0: 4c 20 28 28 28 73 71 6c 69 74 65 33 5f 69 6e 74  L (((sqlite3_int
46e0: 36 34 29 31 29 3c 3c 35 30 29 0a 23 20 65 6e 64  64)1)<<50).# end
46f0: 69 66 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  if.# define SQLI
4700: 54 45 5f 4f 4d 49 54 5f 44 41 54 45 54 49 4d 45  TE_OMIT_DATETIME
4710: 5f 46 55 4e 43 53 20 31 0a 23 20 64 65 66 69 6e  _FUNCS 1.# defin
4720: 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  e SQLITE_OMIT_TR
4730: 41 43 45 20 31 0a 23 20 75 6e 64 65 66 20 53 51  ACE 1.# undef SQ
4740: 4c 49 54 45 5f 4d 49 58 45 44 5f 45 4e 44 49 41  LITE_MIXED_ENDIA
4750: 4e 5f 36 34 42 49 54 5f 46 4c 4f 41 54 0a 23 20  N_64BIT_FLOAT.# 
4760: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 48 41 56  undef SQLITE_HAV
4770: 45 5f 49 53 4e 41 4e 0a 23 65 6e 64 69 66 0a 23  E_ISNAN.#endif.#
4780: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 42 49  ifndef SQLITE_BI
4790: 47 5f 44 42 4c 0a 23 20 64 65 66 69 6e 65 20 53  G_DBL.# define S
47a0: 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20 28 31  QLITE_BIG_DBL (1
47b0: 65 39 39 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  e99).#endif../*.
47c0: 2a 2a 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 69  ** OMIT_TEMPDB i
47d0: 73 20 73 65 74 20 74 6f 20 31 20 69 66 20 53 51  s set to 1 if SQ
47e0: 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42  LITE_OMIT_TEMPDB
47f0: 20 69 73 20 64 65 66 69 6e 65 64 2c 20 6f 72 20   is defined, or 
4800: 30 0a 2a 2a 20 61 66 74 65 72 77 61 72 64 2e 20  0.** afterward. 
4810: 48 61 76 69 6e 67 20 74 68 69 73 20 6d 61 63 72  Having this macr
4820: 6f 20 61 6c 6c 6f 77 73 20 75 73 20 74 6f 20 63  o allows us to c
4830: 61 75 73 65 20 74 68 65 20 43 20 63 6f 6d 70 69  ause the C compi
4840: 6c 65 72 0a 2a 2a 20 74 6f 20 6f 6d 69 74 20 63  ler.** to omit c
4850: 6f 64 65 20 75 73 65 64 20 62 79 20 54 45 4d 50  ode used by TEMP
4860: 20 74 61 62 6c 65 73 20 77 69 74 68 6f 75 74 20   tables without 
4870: 6d 65 73 73 79 20 23 69 66 6e 64 65 66 20 73 74  messy #ifndef st
4880: 61 74 65 6d 65 6e 74 73 2e 0a 2a 2f 0a 23 69 66  atements..*/.#if
4890: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
48a0: 54 45 4d 50 44 42 0a 23 64 65 66 69 6e 65 20 4f  TEMPDB.#define O
48b0: 4d 49 54 5f 54 45 4d 50 44 42 20 31 0a 23 65 6c  MIT_TEMPDB 1.#el
48c0: 73 65 0a 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f  se.#define OMIT_
48d0: 54 45 4d 50 44 42 20 30 0a 23 65 6e 64 69 66 0a  TEMPDB 0.#endif.
48e0: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 22 66 69 6c 65  ./*.** The "file
48f0: 20 66 6f 72 6d 61 74 22 20 6e 75 6d 62 65 72 20   format" number 
4900: 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 74 68  is an integer th
4910: 61 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  at is incremente
4920: 64 20 77 68 65 6e 65 76 65 72 0a 2a 2a 20 74 68  d whenever.** th
4930: 65 20 56 44 42 45 2d 6c 65 76 65 6c 20 66 69 6c  e VDBE-level fil
4940: 65 20 66 6f 72 6d 61 74 20 63 68 61 6e 67 65 73  e format changes
4950: 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
4960: 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 20 74   macros define t
4970: 68 65 0a 2a 2a 20 74 68 65 20 64 65 66 61 75 6c  he.** the defaul
4980: 74 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 66 6f  t file format fo
4990: 72 20 6e 65 77 20 64 61 74 61 62 61 73 65 73 20  r new databases 
49a0: 61 6e 64 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  and the maximum 
49b0: 66 69 6c 65 20 66 6f 72 6d 61 74 0a 2a 2a 20 74  file format.** t
49c0: 68 61 74 20 74 68 65 20 6c 69 62 72 61 72 79 20  hat the library 
49d0: 63 61 6e 20 72 65 61 64 2e 0a 2a 2f 0a 23 64 65  can read..*/.#de
49e0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
49f0: 46 49 4c 45 5f 46 4f 52 4d 41 54 20 34 0a 23 69  FILE_FORMAT 4.#i
4a00: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
4a10: 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54  AULT_FILE_FORMAT
4a20: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
4a30: 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f  _DEFAULT_FILE_FO
4a40: 52 4d 41 54 20 34 0a 23 65 6e 64 69 66 0a 0a 2f  RMAT 4.#endif../
4a50: 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20 77  *.** Determine w
4a60: 68 65 74 68 65 72 20 74 72 69 67 67 65 72 73 20  hether triggers 
4a70: 61 72 65 20 72 65 63 75 72 73 69 76 65 20 62 79  are recursive by
4a80: 20 64 65 66 61 75 6c 74 2e 20 20 54 68 69 73 20   default.  This 
4a90: 63 61 6e 20 62 65 0a 2a 2a 20 63 68 61 6e 67 65  can be.** change
4aa0: 64 20 61 74 20 72 75 6e 2d 74 69 6d 65 20 75 73  d at run-time us
4ab0: 69 6e 67 20 61 20 70 72 61 67 6d 61 2e 0a 2a 2f  ing a pragma..*/
4ac0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
4ad0: 44 45 46 41 55 4c 54 5f 52 45 43 55 52 53 49 56  DEFAULT_RECURSIV
4ae0: 45 5f 54 52 49 47 47 45 52 53 0a 23 20 64 65 66  E_TRIGGERS.# def
4af0: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
4b00: 4c 54 5f 52 45 43 55 52 53 49 56 45 5f 54 52 49  LT_RECURSIVE_TRI
4b10: 47 47 45 52 53 20 30 0a 23 65 6e 64 69 66 0a 0a  GGERS 0.#endif..
4b20: 2f 2a 0a 2a 2a 20 50 72 6f 76 69 64 65 20 61 20  /*.** Provide a 
4b30: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66 6f  default value fo
4b40: 72 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  r SQLITE_TEMP_ST
4b50: 4f 52 45 20 69 6e 20 63 61 73 65 20 69 74 20 69  ORE in case it i
4b60: 73 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 0a  s not specified.
4b70: 2a 2a 20 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e  ** on the comman
4b80: 64 2d 6c 69 6e 65 0a 2a 2f 0a 23 69 66 6e 64 65  d-line.*/.#ifnde
4b90: 66 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  f SQLITE_TEMP_ST
4ba0: 4f 52 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ORE.# define SQL
4bb0: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20 31  ITE_TEMP_STORE 1
4bc0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
4bd0: 5f 54 45 4d 50 5f 53 54 4f 52 45 5f 78 63 20 31  _TEMP_STORE_xc 1
4be0: 20 20 2f 2a 20 45 78 63 6c 75 64 65 20 66 72 6f    /* Exclude fro
4bf0: 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e  m ctime.c */.#en
4c00: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 6e 6f  dif../*.** If no
4c10: 20 76 61 6c 75 65 20 68 61 73 20 62 65 65 6e 20   value has been 
4c20: 70 72 6f 76 69 64 65 64 20 66 6f 72 20 53 51 4c  provided for SQL
4c30: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
4c40: 48 52 45 41 44 53 2c 20 6f 72 20 69 66 0a 2a 2a  HREADS, or if.**
4c50: 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f   SQLITE_TEMP_STO
4c60: 52 45 20 69 73 20 73 65 74 20 74 6f 20 33 20 28  RE is set to 3 (
4c70: 6e 65 76 65 72 20 75 73 65 20 74 65 6d 70 6f 72  never use tempor
4c80: 61 72 79 20 66 69 6c 65 73 29 2c 20 73 65 74 20  ary files), set 
4c90: 69 74 0a 2a 2a 20 74 6f 20 7a 65 72 6f 2e 0a 2a  it.** to zero..*
4ca0: 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 54 45 4d  /.#if SQLITE_TEM
4cb0: 50 5f 53 54 4f 52 45 3d 3d 33 20 7c 7c 20 53 51  P_STORE==3 || SQ
4cc0: 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45 3d  LITE_THREADSAFE=
4cd0: 3d 30 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54  =0.# undef SQLIT
4ce0: 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52  E_MAX_WORKER_THR
4cf0: 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51  EADS.# define SQ
4d00: 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f  LITE_MAX_WORKER_
4d10: 54 48 52 45 41 44 53 20 30 0a 23 65 6e 64 69 66  THREADS 0.#endif
4d20: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
4d30: 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  MAX_WORKER_THREA
4d40: 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  DS.# define SQLI
4d50: 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48  TE_MAX_WORKER_TH
4d60: 52 45 41 44 53 20 38 0a 23 65 6e 64 69 66 0a 23  READS 8.#endif.#
4d70: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45  ifndef SQLITE_DE
4d80: 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52  FAULT_WORKER_THR
4d90: 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51  EADS.# define SQ
4da0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52  LITE_DEFAULT_WOR
4db0: 4b 45 52 5f 54 48 52 45 41 44 53 20 30 0a 23 65  KER_THREADS 0.#e
4dc0: 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45 5f  ndif.#if SQLITE_
4dd0: 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54  DEFAULT_WORKER_T
4de0: 48 52 45 41 44 53 3e 53 51 4c 49 54 45 5f 4d 41  HREADS>SQLITE_MA
4df0: 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  X_WORKER_THREADS
4e00: 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f  .# undef SQLITE_
4e10: 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  MAX_WORKER_THREA
4e20: 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  DS.# define SQLI
4e30: 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48  TE_MAX_WORKER_TH
4e40: 52 45 41 44 53 20 53 51 4c 49 54 45 5f 44 45 46  READS SQLITE_DEF
4e50: 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45  AULT_WORKER_THRE
4e60: 41 44 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ADS.#endif../*.*
4e70: 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 69 6e  * The default in
4e80: 69 74 69 61 6c 20 61 6c 6c 6f 63 61 74 69 6f 6e  itial allocation
4e90: 20 66 6f 72 20 74 68 65 20 70 61 67 65 63 61 63   for the pagecac
4ea0: 68 65 20 77 68 65 6e 20 75 73 69 6e 67 20 73 65  he when using se
4eb0: 70 61 72 61 74 65 0a 2a 2a 20 70 61 67 65 63 61  parate.** pageca
4ec0: 63 68 65 73 20 66 6f 72 20 65 61 63 68 20 64 61  ches for each da
4ed0: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
4ee0: 6e 2e 20 20 41 20 70 6f 73 69 74 69 76 65 20 6e  n.  A positive n
4ef0: 75 6d 62 65 72 20 69 73 20 74 68 65 0a 2a 2a 20  umber is the.** 
4f00: 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 2e  number of pages.
4f10: 20 20 41 20 6e 65 67 61 74 69 76 65 20 6e 75 6d    A negative num
4f20: 62 65 72 20 4e 20 74 72 61 6e 73 6c 61 74 69 6f  ber N translatio
4f30: 6e 73 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20  ns means that a 
4f40: 62 75 66 66 65 72 0a 2a 2a 20 6f 66 20 2d 31 30  buffer.** of -10
4f50: 32 34 2a 4e 20 62 79 74 65 73 20 69 73 20 61 6c  24*N bytes is al
4f60: 6c 6f 63 61 74 65 64 20 61 6e 64 20 75 73 65 64  located and used
4f70: 20 66 6f 72 20 61 73 20 6d 61 6e 79 20 70 61 67   for as many pag
4f80: 65 73 20 61 73 20 69 74 20 77 69 6c 6c 20 68 6f  es as it will ho
4f90: 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64 65  ld..**.** The de
4fa0: 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 22  fault value of "
4fb0: 32 30 22 20 77 61 73 20 63 68 6f 6f 73 65 6e 20  20" was choosen 
4fc0: 74 6f 20 6d 69 6e 69 6d 69 7a 65 20 74 68 65 20  to minimize the 
4fd0: 72 75 6e 2d 74 69 6d 65 20 6f 66 20 74 68 65 0a  run-time of the.
4fe0: 2a 2a 20 73 70 65 65 64 74 65 73 74 31 20 74 65  ** speedtest1 te
4ff0: 73 74 20 70 72 6f 67 72 61 6d 20 77 69 74 68 20  st program with 
5000: 6f 70 74 69 6f 6e 73 3a 20 2d 2d 73 68 72 69 6e  options: --shrin
5010: 6b 2d 6d 65 6d 6f 72 79 20 2d 2d 72 65 70 72 65  k-memory --repre
5020: 70 61 72 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  pare.*/.#ifndef 
5030: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 50  SQLITE_DEFAULT_P
5040: 43 41 43 48 45 5f 49 4e 49 54 53 5a 0a 23 20 64  CACHE_INITSZ.# d
5050: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
5060: 41 55 4c 54 5f 50 43 41 43 48 45 5f 49 4e 49 54  AULT_PCACHE_INIT
5070: 53 5a 20 32 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  SZ 20.#endif../*
5080: 0a 2a 2a 20 47 43 43 20 64 6f 65 73 20 6e 6f 74  .** GCC does not
5090: 20 64 65 66 69 6e 65 20 74 68 65 20 6f 66 66 73   define the offs
50a0: 65 74 6f 66 28 29 20 6d 61 63 72 6f 20 73 6f 20  etof() macro so 
50b0: 77 65 27 6c 6c 20 68 61 76 65 20 74 6f 20 64 6f  we'll have to do
50c0: 20 69 74 0a 2a 2a 20 6f 75 72 73 65 6c 76 65 73   it.** ourselves
50d0: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 6f 66 66  ..*/.#ifndef off
50e0: 73 65 74 6f 66 0a 23 64 65 66 69 6e 65 20 6f 66  setof.#define of
50f0: 66 73 65 74 6f 66 28 53 54 52 55 43 54 55 52 45  fsetof(STRUCTURE
5100: 2c 46 49 45 4c 44 29 20 28 28 69 6e 74 29 28 28  ,FIELD) ((int)((
5110: 63 68 61 72 2a 29 26 28 28 53 54 52 55 43 54 55  char*)&((STRUCTU
5120: 52 45 2a 29 30 29 2d 3e 46 49 45 4c 44 29 29 0a  RE*)0)->FIELD)).
5130: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61  #endif../*.** Ma
5140: 63 72 6f 73 20 74 6f 20 63 6f 6d 70 75 74 65 20  cros to compute 
5150: 6d 69 6e 69 6d 75 6d 20 61 6e 64 20 6d 61 78 69  minimum and maxi
5160: 6d 75 6d 20 6f 66 20 74 77 6f 20 6e 75 6d 62 65  mum of two numbe
5170: 72 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 4d  rs..*/.#ifndef M
5180: 49 4e 0a 23 20 64 65 66 69 6e 65 20 4d 49 4e 28  IN.# define MIN(
5190: 41 2c 42 29 20 28 28 41 29 3c 28 42 29 3f 28 41  A,B) ((A)<(B)?(A
51a0: 29 3a 28 42 29 29 0a 23 65 6e 64 69 66 0a 23 69  ):(B)).#endif.#i
51b0: 66 6e 64 65 66 20 4d 41 58 0a 23 20 64 65 66 69  fndef MAX.# defi
51c0: 6e 65 20 4d 41 58 28 41 2c 42 29 20 28 28 41 29  ne MAX(A,B) ((A)
51d0: 3e 28 42 29 3f 28 41 29 3a 28 42 29 29 0a 23 65  >(B)?(A):(B)).#e
51e0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 77 61 70  ndif../*.** Swap
51f0: 20 74 77 6f 20 6f 62 6a 65 63 74 73 20 6f 66 20   two objects of 
5200: 74 79 70 65 20 54 59 50 45 2e 0a 2a 2f 0a 23 64  type TYPE..*/.#d
5210: 65 66 69 6e 65 20 53 57 41 50 28 54 59 50 45 2c  efine SWAP(TYPE,
5220: 41 2c 42 29 20 7b 54 59 50 45 20 74 3d 41 3b 20  A,B) {TYPE t=A; 
5230: 41 3d 42 3b 20 42 3d 74 3b 7d 0a 0a 2f 2a 0a 2a  A=B; B=t;}../*.*
5240: 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69  * Check to see i
5250: 66 20 74 68 69 73 20 6d 61 63 68 69 6e 65 20 75  f this machine u
5260: 73 65 73 20 45 42 43 44 49 43 2e 20 20 28 59 65  ses EBCDIC.  (Ye
5270: 73 2c 20 62 65 6c 69 65 76 65 20 69 74 20 6f 72  s, believe it or
5280: 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65 72 65 20 61  .** not, there a
5290: 72 65 20 73 74 69 6c 6c 20 6d 61 63 68 69 6e 65  re still machine
52a0: 73 20 6f 75 74 20 74 68 65 72 65 20 74 68 61 74  s out there that
52b0: 20 75 73 65 20 45 42 43 44 49 43 2e 29 0a 2a 2f   use EBCDIC.).*/
52c0: 0a 23 69 66 20 27 41 27 20 3d 3d 20 27 5c 33 30  .#if 'A' == '\30
52d0: 31 27 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  1'.# define SQLI
52e0: 54 45 5f 45 42 43 44 49 43 20 31 0a 23 65 6c 73  TE_EBCDIC 1.#els
52f0: 65 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  e.# define SQLIT
5300: 45 5f 41 53 43 49 49 20 31 0a 23 65 6e 64 69 66  E_ASCII 1.#endif
5310: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 67 65 72 73  ../*.** Integers
5320: 20 6f 66 20 6b 6e 6f 77 6e 20 73 69 7a 65 73 2e   of known sizes.
5330: 20 20 54 68 65 73 65 20 74 79 70 65 64 65 66 73    These typedefs
5340: 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 66 6f   might change fo
5350: 72 20 61 72 63 68 69 74 65 63 74 75 72 65 73 0a  r architectures.
5360: 2a 2a 20 77 68 65 72 65 20 74 68 65 20 73 69 7a  ** where the siz
5370: 65 73 20 76 65 72 79 2e 20 20 50 72 65 70 72 6f  es very.  Prepro
5380: 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 20 61 72  cessor macros ar
5390: 65 20 61 76 61 69 6c 61 62 6c 65 20 73 6f 20 74  e available so t
53a0: 68 61 74 20 74 68 65 0a 2a 2a 20 74 79 70 65 73  hat the.** types
53b0: 20 63 61 6e 20 62 65 20 63 6f 6e 76 65 6e 69 65   can be convenie
53c0: 6e 74 6c 79 20 72 65 64 65 66 69 6e 65 64 20 61  ntly redefined a
53d0: 74 20 63 6f 6d 70 69 6c 65 2d 74 79 70 65 2e 20  t compile-type. 
53e0: 20 4c 69 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a   Like this:.**.*
53f0: 2a 20 20 20 20 20 20 20 20 20 63 63 20 27 2d 44  *         cc '-D
5400: 55 49 4e 54 50 54 52 5f 54 59 50 45 3d 6c 6f 6e  UINTPTR_TYPE=lon
5410: 67 20 6c 6f 6e 67 20 69 6e 74 27 20 2e 2e 2e 0a  g long int' ....
5420: 2a 2f 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 33  */.#ifndef UINT3
5430: 32 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  2_TYPE.# ifdef H
5440: 41 56 45 5f 55 49 4e 54 33 32 5f 54 0a 23 20 20  AVE_UINT32_T.#  
5450: 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f 54 59  define UINT32_TY
5460: 50 45 20 75 69 6e 74 33 32 5f 74 0a 23 20 65 6c  PE uint32_t.# el
5470: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  se.#  define UIN
5480: 54 33 32 5f 54 59 50 45 20 75 6e 73 69 67 6e 65  T32_TYPE unsigne
5490: 64 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65  d int.# endif.#e
54a0: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e  ndif.#ifndef UIN
54b0: 54 31 36 5f 54 59 50 45 0a 23 20 69 66 64 65 66  T16_TYPE.# ifdef
54c0: 20 48 41 56 45 5f 55 49 4e 54 31 36 5f 54 0a 23   HAVE_UINT16_T.#
54d0: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31 36 5f    define UINT16_
54e0: 54 59 50 45 20 75 69 6e 74 31 36 5f 74 0a 23 20  TYPE uint16_t.# 
54f0: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55  else.#  define U
5500: 49 4e 54 31 36 5f 54 59 50 45 20 75 6e 73 69 67  INT16_TYPE unsig
5510: 6e 65 64 20 73 68 6f 72 74 20 69 6e 74 0a 23 20  ned short int.# 
5520: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66  endif.#endif.#if
5530: 6e 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45 0a  ndef INT16_TYPE.
5540: 23 20 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54  # ifdef HAVE_INT
5550: 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 49  16_T.#  define I
5560: 4e 54 31 36 5f 54 59 50 45 20 69 6e 74 31 36 5f  NT16_TYPE int16_
5570: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
5580: 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20 73 68  ne INT16_TYPE sh
5590: 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a  ort int.# endif.
55a0: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55  #endif.#ifndef U
55b0: 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64 65  INT8_TYPE.# ifde
55c0: 66 20 48 41 56 45 5f 55 49 4e 54 38 5f 54 0a 23  f HAVE_UINT8_T.#
55d0: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f 54    define UINT8_T
55e0: 59 50 45 20 75 69 6e 74 38 5f 74 0a 23 20 65 6c  YPE uint8_t.# el
55f0: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e  se.#  define UIN
5600: 54 38 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64  T8_TYPE unsigned
5610: 20 63 68 61 72 0a 23 20 65 6e 64 69 66 0a 23 65   char.# endif.#e
5620: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 49 4e 54  ndif.#ifndef INT
5630: 38 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  8_TYPE.# ifdef H
5640: 41 56 45 5f 49 4e 54 38 5f 54 0a 23 20 20 64 65  AVE_INT8_T.#  de
5650: 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 69  fine INT8_TYPE i
5660: 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20  nt8_t.# else.#  
5670: 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45  define INT8_TYPE
5680: 20 73 69 67 6e 65 64 20 63 68 61 72 0a 23 20 65   signed char.# e
5690: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e  ndif.#endif.#ifn
56a0: 64 65 66 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54  def LONGDOUBLE_T
56b0: 59 50 45 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e  YPE.# define LON
56c0: 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 6c 6f 6e  GDOUBLE_TYPE lon
56d0: 67 20 64 6f 75 62 6c 65 0a 23 65 6e 64 69 66 0a  g double.#endif.
56e0: 74 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f 69  typedef sqlite_i
56f0: 6e 74 36 34 20 69 36 34 3b 20 20 20 20 20 20 20  nt64 i64;       
5700: 20 20 20 2f 2a 20 38 2d 62 79 74 65 20 73 69 67     /* 8-byte sig
5710: 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74  ned integer */.t
5720: 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f 75 69  ypedef sqlite_ui
5730: 6e 74 36 34 20 75 36 34 3b 20 20 20 20 20 20 20  nt64 u64;       
5740: 20 20 2f 2a 20 38 2d 62 79 74 65 20 75 6e 73 69    /* 8-byte unsi
5750: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a  gned integer */.
5760: 74 79 70 65 64 65 66 20 55 49 4e 54 33 32 5f 54  typedef UINT32_T
5770: 59 50 45 20 75 33 32 3b 20 20 20 20 20 20 20 20  YPE u32;        
5780: 20 20 20 2f 2a 20 34 2d 62 79 74 65 20 75 6e 73     /* 4-byte uns
5790: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
57a0: 0a 74 79 70 65 64 65 66 20 55 49 4e 54 31 36 5f  .typedef UINT16_
57b0: 54 59 50 45 20 75 31 36 3b 20 20 20 20 20 20 20  TYPE u16;       
57c0: 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 75 6e      /* 2-byte un
57d0: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
57e0: 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31 36 5f  /.typedef INT16_
57f0: 54 59 50 45 20 69 31 36 3b 20 20 20 20 20 20 20  TYPE i16;       
5800: 20 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20 73       /* 2-byte s
5810: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
5820: 0a 74 79 70 65 64 65 66 20 55 49 4e 54 38 5f 54  .typedef UINT8_T
5830: 59 50 45 20 75 38 3b 20 20 20 20 20 20 20 20 20  YPE u8;         
5840: 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 75 6e      /* 1-byte un
5850: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
5860: 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 38 5f 54  /.typedef INT8_T
5870: 59 50 45 20 69 38 3b 20 20 20 20 20 20 20 20 20  YPE i8;         
5880: 20 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20 73       /* 1-byte s
5890: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
58a0: 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d  ../*.** SQLITE_M
58b0: 41 58 5f 55 33 32 20 69 73 20 61 20 75 36 34 20  AX_U32 is a u64 
58c0: 63 6f 6e 73 74 61 6e 74 20 74 68 61 74 20 69 73  constant that is
58d0: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 75 36 34   the maximum u64
58e0: 20 76 61 6c 75 65 0a 2a 2a 20 74 68 61 74 20 63   value.** that c
58f0: 61 6e 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20  an be stored in 
5900: 61 20 75 33 32 20 77 69 74 68 6f 75 74 20 6c 6f  a u32 without lo
5910: 73 73 20 6f 66 20 64 61 74 61 2e 20 20 54 68 65  ss of data.  The
5920: 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 30 78 30   value.** is 0x0
5930: 30 30 30 30 30 30 30 66 66 66 66 66 66 66 66 2e  0000000ffffffff.
5940: 20 20 42 75 74 20 62 65 63 61 75 73 65 20 6f 66    But because of
5950: 20 71 75 69 72 6b 73 20 6f 66 20 73 6f 6d 65 20   quirks of some 
5960: 63 6f 6d 70 69 6c 65 72 73 2c 20 77 65 0a 2a 2a  compilers, we.**
5970: 20 68 61 76 65 20 74 6f 20 73 70 65 63 69 66 79   have to specify
5980: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 74 68   the value in th
5990: 65 20 6c 65 73 73 20 69 6e 74 75 69 74 69 76 65  e less intuitive
59a0: 20 6d 61 6e 6e 65 72 20 73 68 6f 77 6e 3a 0a 2a   manner shown:.*
59b0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
59c0: 5f 4d 41 58 5f 55 33 32 20 20 28 28 28 28 75 36  _MAX_U32  ((((u6
59d0: 34 29 31 29 3c 3c 33 32 29 2d 31 29 0a 0a 2f 2a  4)1)<<32)-1)../*
59e0: 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70 65  .** The datatype
59f0: 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 65   used to store e
5a00: 73 74 69 6d 61 74 65 73 20 6f 66 20 74 68 65 20  stimates of the 
5a10: 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69  number of rows i
5a20: 6e 20 61 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20  n a.** table or 
5a30: 69 6e 64 65 78 2e 20 20 54 68 69 73 20 69 73 20  index.  This is 
5a40: 61 6e 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  an unsigned inte
5a50: 67 65 72 20 74 79 70 65 2e 20 20 46 6f 72 20 39  ger type.  For 9
5a60: 39 2e 39 25 20 6f 66 0a 2a 2a 20 74 68 65 20 77  9.9% of.** the w
5a70: 6f 72 6c 64 2c 20 61 20 33 32 2d 62 69 74 20 69  orld, a 32-bit i
5a80: 6e 74 65 67 65 72 20 69 73 20 73 75 66 66 69 63  nteger is suffic
5a90: 69 65 6e 74 2e 20 20 42 75 74 20 61 20 36 34 2d  ient.  But a 64-
5aa0: 62 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a 20 63  bit integer.** c
5ab0: 61 6e 20 62 65 20 75 73 65 64 20 61 74 20 63 6f  an be used at co
5ac0: 6d 70 69 6c 65 2d 74 69 6d 65 20 69 66 20 64 65  mpile-time if de
5ad0: 73 69 72 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66  sired..*/.#ifdef
5ae0: 20 53 51 4c 49 54 45 5f 36 34 42 49 54 5f 53 54   SQLITE_64BIT_ST
5af0: 41 54 53 0a 20 74 79 70 65 64 65 66 20 75 36 34  ATS. typedef u64
5b00: 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20   tRowcnt;    /* 
5b10: 36 34 2d 62 69 74 20 6f 6e 6c 79 20 69 66 20 72  64-bit only if r
5b20: 65 71 75 65 73 74 65 64 20 61 74 20 63 6f 6d 70  equested at comp
5b30: 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a 23 65 6c 73  ile-time */.#els
5b40: 65 0a 20 74 79 70 65 64 65 66 20 75 33 32 20 74  e. typedef u32 t
5b50: 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20 33 32  Rowcnt;    /* 32
5b60: 2d 62 69 74 20 69 73 20 74 68 65 20 64 65 66 61  -bit is the defa
5b70: 75 6c 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f  ult */.#endif../
5b80: 2a 0a 2a 2a 20 45 73 74 69 6d 61 74 65 64 20 71  *.** Estimated q
5b90: 75 61 6e 74 69 74 69 65 73 20 75 73 65 64 20 66  uantities used f
5ba0: 6f 72 20 71 75 65 72 79 20 70 6c 61 6e 6e 69 6e  or query plannin
5bb0: 67 20 61 72 65 20 73 74 6f 72 65 64 20 61 73 20  g are stored as 
5bc0: 31 36 2d 62 69 74 0a 2a 2a 20 6c 6f 67 61 72 69  16-bit.** logari
5bd0: 74 68 6d 73 2e 20 20 46 6f 72 20 71 75 61 6e 74  thms.  For quant
5be0: 69 74 79 20 58 2c 20 74 68 65 20 76 61 6c 75 65  ity X, the value
5bf0: 20 73 74 6f 72 65 64 20 69 73 20 31 30 2a 6c 6f   stored is 10*lo
5c00: 67 32 28 58 29 2e 20 20 54 68 69 73 0a 2a 2a 20  g2(X).  This.** 
5c10: 67 69 76 65 73 20 61 20 70 6f 73 73 69 62 6c 65  gives a possible
5c20: 20 72 61 6e 67 65 20 6f 66 20 76 61 6c 75 65 73   range of values
5c30: 20 6f 66 20 61 70 70 72 6f 78 69 6d 61 74 65 6c   of approximatel
5c40: 79 20 31 2e 30 65 39 38 36 20 74 6f 20 31 65 2d  y 1.0e986 to 1e-
5c50: 39 38 36 2e 0a 2a 2a 20 42 75 74 20 74 68 65 20  986..** But the 
5c60: 61 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 61  allowed values a
5c70: 72 65 20 22 67 72 61 69 6e 79 22 2e 20 20 4e 6f  re "grainy".  No
5c80: 74 20 65 76 65 72 79 20 76 61 6c 75 65 20 69 73  t every value is
5c90: 20 72 65 70 72 65 73 65 6e 74 61 62 6c 65 2e 0a   representable..
5ca0: 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  ** For example, 
5cb0: 71 75 61 6e 74 69 74 69 65 73 20 31 36 20 61 6e  quantities 16 an
5cc0: 64 20 31 37 20 61 72 65 20 62 6f 74 68 20 72 65  d 17 are both re
5cd0: 70 72 65 73 65 6e 74 65 64 20 62 79 20 61 20 4c  presented by a L
5ce0: 6f 67 45 73 74 0a 2a 2a 20 6f 66 20 34 30 2e 20  ogEst.** of 40. 
5cf0: 20 48 6f 77 65 76 65 72 2c 20 73 69 6e 63 65 20   However, since 
5d00: 4c 6f 67 45 73 74 20 71 75 61 6e 74 69 74 69 65  LogEst quantitie
5d10: 73 20 61 72 65 20 73 75 70 70 6f 73 65 20 74 6f  s are suppose to
5d20: 20 62 65 20 65 73 74 69 6d 61 74 65 73 2c 0a 2a   be estimates,.*
5d30: 2a 20 6e 6f 74 20 65 78 61 63 74 20 76 61 6c 75  * not exact valu
5d40: 65 73 2c 20 74 68 69 73 20 69 6d 70 72 65 63 69  es, this impreci
5d50: 73 69 6f 6e 20 69 73 20 6e 6f 74 20 61 20 70 72  sion is not a pr
5d60: 6f 62 6c 65 6d 2e 0a 2a 2a 0a 2a 2a 20 22 4c 6f  oblem..**.** "Lo
5d70: 67 45 73 74 22 20 69 73 20 73 68 6f 72 74 20 66  gEst" is short f
5d80: 6f 72 20 22 4c 6f 67 61 72 69 74 68 6d 69 63 20  or "Logarithmic 
5d90: 45 73 74 69 6d 61 74 65 22 2e 0a 2a 2a 0a 2a 2a  Estimate"..**.**
5da0: 20 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 20 20 20   Examples:.**   
5db0: 20 20 20 31 20 2d 3e 20 30 20 20 20 20 20 20 20     1 -> 0       
5dc0: 20 20 20 20 20 20 20 32 30 20 2d 3e 20 34 33 20         20 -> 43 
5dd0: 20 20 20 20 20 20 20 20 20 31 30 30 30 30 20 2d           10000 -
5de0: 3e 20 31 33 32 0a 2a 2a 20 20 20 20 20 20 32 20  > 132.**      2 
5df0: 2d 3e 20 31 30 20 20 20 20 20 20 20 20 20 20 20  -> 10           
5e00: 20 20 32 35 20 2d 3e 20 34 36 20 20 20 20 20 20    25 -> 46      
5e10: 20 20 20 20 32 35 30 30 30 20 2d 3e 20 31 34 36      25000 -> 146
5e20: 0a 2a 2a 20 20 20 20 20 20 33 20 2d 3e 20 31 36  .**      3 -> 16
5e30: 20 20 20 20 20 20 20 20 20 20 20 20 31 30 30 20              100 
5e40: 2d 3e 20 36 36 20 20 20 20 20 20 20 20 31 30 30  -> 66        100
5e50: 30 30 30 30 20 2d 3e 20 31 39 39 0a 2a 2a 20 20  0000 -> 199.**  
5e60: 20 20 20 20 34 20 2d 3e 20 32 30 20 20 20 20 20      4 -> 20     
5e70: 20 20 20 20 20 20 31 30 30 30 20 2d 3e 20 39 39        1000 -> 99
5e80: 20 20 20 20 20 20 20 20 31 30 34 38 35 37 36 20          1048576 
5e90: 2d 3e 20 32 30 30 0a 2a 2a 20 20 20 20 20 31 30  -> 200.**     10
5ea0: 20 2d 3e 20 33 33 20 20 20 20 20 20 20 20 20 20   -> 33          
5eb0: 20 31 30 32 34 20 2d 3e 20 31 30 30 20 20 20 20   1024 -> 100    
5ec0: 34 32 39 34 39 36 37 32 39 36 20 2d 3e 20 33 32  4294967296 -> 32
5ed0: 30 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 67 45  0.**.** The LogE
5ee0: 73 74 20 63 61 6e 20 62 65 20 6e 65 67 61 74 69  st can be negati
5ef0: 76 65 20 74 6f 20 69 6e 64 69 63 61 74 65 20 66  ve to indicate f
5f00: 72 61 63 74 69 6f 6e 61 6c 20 76 61 6c 75 65 73  ractional values
5f10: 2e 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a  ..** Examples:.*
5f20: 2a 0a 2a 2a 20 20 20 20 30 2e 35 20 2d 3e 20 2d  *.**    0.5 -> -
5f30: 31 30 20 20 20 20 20 20 20 20 20 20 20 30 2e 31  10           0.1
5f40: 20 2d 3e 20 2d 33 33 20 20 20 20 20 20 20 20 30   -> -33        0
5f50: 2e 30 36 32 35 20 2d 3e 20 2d 34 30 0a 2a 2f 0a  .0625 -> -40.*/.
5f60: 74 79 70 65 64 65 66 20 49 4e 54 31 36 5f 54 59  typedef INT16_TY
5f70: 50 45 20 4c 6f 67 45 73 74 3b 0a 0a 2f 2a 0a 2a  PE LogEst;../*.*
5f80: 2a 20 53 65 74 20 74 68 65 20 53 51 4c 49 54 45  * Set the SQLITE
5f90: 5f 50 54 52 53 49 5a 45 20 6d 61 63 72 6f 20 74  _PTRSIZE macro t
5fa0: 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  o the number of 
5fb0: 62 79 74 65 73 20 69 6e 20 61 20 70 6f 69 6e 74  bytes in a point
5fc0: 65 72 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  er.*/.#ifndef SQ
5fd0: 4c 49 54 45 5f 50 54 52 53 49 5a 45 0a 23 20 69  LITE_PTRSIZE.# i
5fe0: 66 20 64 65 66 69 6e 65 64 28 5f 5f 53 49 5a 45  f defined(__SIZE
5ff0: 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f 29 0a 23 20  OF_POINTER__).# 
6000: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
6010: 50 54 52 53 49 5a 45 20 5f 5f 53 49 5a 45 4f 46  PTRSIZE __SIZEOF
6020: 5f 50 4f 49 4e 54 45 52 5f 5f 0a 23 20 65 6c 69  _POINTER__.# eli
6030: 66 20 64 65 66 69 6e 65 64 28 69 33 38 36 29 20  f defined(i386) 
6040: 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f      || defined(_
6050: 5f 69 33 38 36 5f 5f 29 20 20 20 7c 7c 20 64 65  _i386__)   || de
6060: 66 69 6e 65 64 28 5f 4d 5f 49 58 38 36 29 20 7c  fined(_M_IX86) |
6070: 7c 20 20 20 20 5c 0a 20 20 20 20 20 20 20 64 65  |    \.       de
6080: 66 69 6e 65 64 28 5f 4d 5f 41 52 4d 29 20 20 20  fined(_M_ARM)   
6090: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 61 72 6d  || defined(__arm
60a0: 5f 5f 29 20 20 20 20 7c 7c 20 64 65 66 69 6e 65  __)    || define
60b0: 64 28 5f 5f 78 38 36 29 0a 23 20 20 20 64 65 66  d(__x86).#   def
60c0: 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 53 49  ine SQLITE_PTRSI
60d0: 5a 45 20 34 0a 23 20 65 6c 73 65 0a 23 20 20 20  ZE 4.# else.#   
60e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54  define SQLITE_PT
60f0: 52 53 49 5a 45 20 38 0a 23 20 65 6e 64 69 66 0a  RSIZE 8.# endif.
6100: 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65 20 75  #endif../* The u
6110: 70 74 72 20 74 79 70 65 20 69 73 20 61 6e 20 75  ptr type is an u
6120: 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20  nsigned integer 
6130: 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74 6f 20  large enough to 
6140: 68 6f 6c 64 20 61 20 70 6f 69 6e 74 65 72 0a 2a  hold a pointer.*
6150: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 48 41  /.#if defined(HA
6160: 56 45 5f 53 54 44 49 4e 54 5f 48 29 0a 20 20 74  VE_STDINT_H).  t
6170: 79 70 65 64 65 66 20 75 69 6e 74 70 74 72 5f 74  ypedef uintptr_t
6180: 20 75 70 74 72 3b 0a 23 65 6c 69 66 20 53 51 4c   uptr;.#elif SQL
6190: 49 54 45 5f 50 54 52 53 49 5a 45 3d 3d 34 0a 20  ITE_PTRSIZE==4. 
61a0: 20 74 79 70 65 64 65 66 20 75 33 32 20 75 70 74   typedef u32 upt
61b0: 72 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64  r;.#else.  typed
61c0: 65 66 20 75 36 34 20 75 70 74 72 3b 0a 23 65 6e  ef u64 uptr;.#en
61d0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53  dif../*.** The S
61e0: 51 4c 49 54 45 5f 57 49 54 48 49 4e 28 50 2c 53  QLITE_WITHIN(P,S
61f0: 2c 45 29 20 6d 61 63 72 6f 20 63 68 65 63 6b 73  ,E) macro checks
6200: 20 74 6f 20 73 65 65 20 69 66 20 70 6f 69 6e 74   to see if point
6210: 65 72 20 50 20 70 6f 69 6e 74 73 20 74 6f 0a 2a  er P points to.*
6220: 2a 20 73 6f 6d 65 74 68 69 6e 67 20 62 65 74 77  * something betw
6230: 65 65 6e 20 53 20 28 69 6e 63 6c 75 73 69 76 65  een S (inclusive
6240: 29 20 61 6e 64 20 45 20 28 65 78 63 6c 75 73 69  ) and E (exclusi
6250: 76 65 29 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f 74  ve)..**.** In ot
6260: 68 65 72 20 77 6f 72 64 73 2c 20 53 20 69 73 20  her words, S is 
6270: 61 20 62 75 66 66 65 72 20 61 6e 64 20 45 20 69  a buffer and E i
6280: 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
6290: 68 65 20 66 69 72 73 74 20 62 79 74 65 20 61 66  he first byte af
62a0: 74 65 72 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f  ter.** the end o
62b0: 66 20 62 75 66 66 65 72 20 53 2e 20 20 54 68 69  f buffer S.  Thi
62c0: 73 20 6d 61 63 72 6f 20 72 65 74 75 72 6e 73 20  s macro returns 
62d0: 74 72 75 65 20 69 66 20 50 20 70 6f 69 6e 74 73  true if P points
62e0: 20 74 6f 20 73 6f 6d 65 74 68 69 6e 67 0a 2a 2a   to something.**
62f0: 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69   contained withi
6300: 6e 20 74 68 65 20 62 75 66 66 65 72 20 53 2e 0a  n the buffer S..
6310: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
6320: 45 5f 57 49 54 48 49 4e 28 50 2c 53 2c 45 29 20  E_WITHIN(P,S,E) 
6330: 28 28 28 75 70 74 72 29 28 50 29 3e 3d 28 75 70  (((uptr)(P)>=(up
6340: 74 72 29 28 53 29 29 26 26 28 28 75 70 74 72 29  tr)(S))&&((uptr)
6350: 28 50 29 3c 28 75 70 74 72 29 28 45 29 29 29 0a  (P)<(uptr)(E))).
6360: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74  ../*.** Macros t
6370: 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65 74  o determine whet
6380: 68 65 72 20 74 68 65 20 6d 61 63 68 69 6e 65 20  her the machine 
6390: 69 73 20 62 69 67 20 6f 72 20 6c 69 74 74 6c 65  is big or little
63a0: 20 65 6e 64 69 61 6e 2c 0a 2a 2a 20 61 6e 64 20   endian,.** and 
63b0: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
63c0: 68 61 74 20 64 65 74 65 72 6d 69 6e 61 74 69 6f  hat determinatio
63d0: 6e 20 69 73 20 72 75 6e 2d 74 69 6d 65 20 6f 72  n is run-time or
63e0: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2e 0a 2a   compile-time..*
63f0: 2a 0a 2a 2a 20 46 6f 72 20 62 65 73 74 20 70 65  *.** For best pe
6400: 72 66 6f 72 6d 61 6e 63 65 2c 20 61 6e 20 61 74  rformance, an at
6410: 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f  tempt is made to
6420: 20 67 75 65 73 73 20 61 74 20 74 68 65 20 62 79   guess at the by
6430: 74 65 2d 6f 72 64 65 72 0a 2a 2a 20 75 73 69 6e  te-order.** usin
6440: 67 20 43 2d 70 72 65 70 72 6f 63 65 73 73 6f 72  g C-preprocessor
6450: 20 6d 61 63 72 6f 73 2e 20 20 49 66 20 74 68 61   macros.  If tha
6460: 74 20 69 73 20 75 6e 73 75 63 63 65 73 73 66 75  t is unsuccessfu
6470: 6c 2c 20 6f 72 20 69 66 0a 2a 2a 20 2d 44 53 51  l, or if.** -DSQ
6480: 4c 49 54 45 5f 52 55 4e 54 49 4d 45 5f 42 59 54  LITE_RUNTIME_BYT
6490: 45 4f 52 44 45 52 3d 31 20 69 73 20 73 65 74 2c  EORDER=1 is set,
64a0: 20 74 68 65 6e 20 62 79 74 65 2d 6f 72 64 65 72   then byte-order
64b0: 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 2a   is determined.*
64c0: 2a 20 61 74 20 72 75 6e 2d 74 69 6d 65 2e 0a 2a  * at run-time..*
64d0: 2f 0a 23 69 66 20 28 64 65 66 69 6e 65 64 28 69  /.#if (defined(i
64e0: 33 38 36 29 20 20 20 20 20 7c 7c 20 64 65 66 69  386)     || defi
64f0: 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20 20 20  ned(__i386__)   
6500: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 49 58  || defined(_M_IX
6510: 38 36 29 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20  86) ||    \.    
6520: 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36   defined(__x86_6
6530: 34 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f  4) || defined(__
6540: 78 38 36 5f 36 34 5f 5f 29 20 7c 7c 20 64 65 66  x86_64__) || def
6550: 69 6e 65 64 28 5f 4d 5f 58 36 34 29 20 20 7c 7c  ined(_M_X64)  ||
6560: 20 20 20 20 5c 0a 20 20 20 20 20 64 65 66 69 6e      \.     defin
6570: 65 64 28 5f 4d 5f 41 4d 44 36 34 29 20 7c 7c 20  ed(_M_AMD64) || 
6580: 64 65 66 69 6e 65 64 28 5f 4d 5f 41 52 4d 29 20  defined(_M_ARM) 
6590: 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f      || defined(_
65a0: 5f 78 38 36 29 20 20 20 7c 7c 20 20 20 20 5c 0a  _x86)   ||    \.
65b0: 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 61       defined(__a
65c0: 72 6d 5f 5f 29 29 20 26 26 20 21 64 65 66 69 6e  rm__)) && !defin
65d0: 65 64 28 53 51 4c 49 54 45 5f 52 55 4e 54 49 4d  ed(SQLITE_RUNTIM
65e0: 45 5f 42 59 54 45 4f 52 44 45 52 29 0a 23 20 64  E_BYTEORDER).# d
65f0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59 54  efine SQLITE_BYT
6600: 45 4f 52 44 45 52 20 20 20 20 31 32 33 34 0a 23  EORDER    1234.#
6610: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42   define SQLITE_B
6620: 49 47 45 4e 44 49 41 4e 20 20 20 20 30 0a 23 20  IGENDIAN    0.# 
6630: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49  define SQLITE_LI
6640: 54 54 4c 45 45 4e 44 49 41 4e 20 31 0a 23 20 64  TTLEENDIAN 1.# d
6650: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46  efine SQLITE_UTF
6660: 31 36 4e 41 54 49 56 45 20 20 53 51 4c 49 54 45  16NATIVE  SQLITE
6670: 5f 55 54 46 31 36 4c 45 0a 23 65 6e 64 69 66 0a  _UTF16LE.#endif.
6680: 23 69 66 20 28 64 65 66 69 6e 65 64 28 73 70 61  #if (defined(spa
6690: 72 63 29 20 20 20 20 7c 7c 20 64 65 66 69 6e 65  rc)    || define
66a0: 64 28 5f 5f 70 70 63 5f 5f 29 29 20 20 5c 0a 20  d(__ppc__))  \. 
66b0: 20 20 20 26 26 20 21 64 65 66 69 6e 65 64 28 53     && !defined(S
66c0: 51 4c 49 54 45 5f 52 55 4e 54 49 4d 45 5f 42 59  QLITE_RUNTIME_BY
66d0: 54 45 4f 52 44 45 52 29 0a 23 20 64 65 66 69 6e  TEORDER).# defin
66e0: 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44  e SQLITE_BYTEORD
66f0: 45 52 20 20 20 20 34 33 32 31 0a 23 20 64 65 66  ER    4321.# def
6700: 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e  ine SQLITE_BIGEN
6710: 44 49 41 4e 20 20 20 20 31 0a 23 20 64 65 66 69  DIAN    1.# defi
6720: 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45  ne SQLITE_LITTLE
6730: 45 4e 44 49 41 4e 20 30 0a 23 20 64 65 66 69 6e  ENDIAN 0.# defin
6740: 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  e SQLITE_UTF16NA
6750: 54 49 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46  TIVE  SQLITE_UTF
6760: 31 36 42 45 0a 23 65 6e 64 69 66 0a 23 69 66 20  16BE.#endif.#if 
6770: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
6780: 42 59 54 45 4f 52 44 45 52 29 0a 23 20 69 66 64  BYTEORDER).# ifd
6790: 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41  ef SQLITE_AMALGA
67a0: 4d 41 54 49 4f 4e 0a 20 20 63 6f 6e 73 74 20 69  MATION.  const i
67b0: 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 20 3d 20  nt sqlite3one = 
67c0: 31 3b 0a 23 20 65 6c 73 65 0a 20 20 65 78 74 65  1;.# else.  exte
67d0: 72 6e 20 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c  rn const int sql
67e0: 69 74 65 33 6f 6e 65 3b 0a 23 20 65 6e 64 69 66  ite3one;.# endif
67f0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
6800: 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20 30 20  _BYTEORDER    0 
6810: 20 20 20 20 2f 2a 20 30 20 6d 65 61 6e 73 20 22      /* 0 means "
6820: 75 6e 6b 6e 6f 77 6e 20 61 74 20 63 6f 6d 70 69  unknown at compi
6830: 6c 65 2d 74 69 6d 65 22 20 2a 2f 0a 23 20 64 65  le-time" */.# de
6840: 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45  fine SQLITE_BIGE
6850: 4e 44 49 41 4e 20 20 20 20 28 2a 28 63 68 61 72  NDIAN    (*(char
6860: 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29   *)(&sqlite3one)
6870: 3d 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 53 51  ==0).# define SQ
6880: 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41  LITE_LITTLEENDIA
6890: 4e 20 28 2a 28 63 68 61 72 20 2a 29 28 26 73 71  N (*(char *)(&sq
68a0: 6c 69 74 65 33 6f 6e 65 29 3d 3d 31 29 0a 23 20  lite3one)==1).# 
68b0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54  define SQLITE_UT
68c0: 46 31 36 4e 41 54 49 56 45 20 20 28 53 51 4c 49  F16NATIVE  (SQLI
68d0: 54 45 5f 42 49 47 45 4e 44 49 41 4e 3f 53 51 4c  TE_BIGENDIAN?SQL
68e0: 49 54 45 5f 55 54 46 31 36 42 45 3a 53 51 4c 49  ITE_UTF16BE:SQLI
68f0: 54 45 5f 55 54 46 31 36 4c 45 29 0a 23 65 6e 64  TE_UTF16LE).#end
6900: 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73 74 61  if../*.** Consta
6910: 6e 74 73 20 66 6f 72 20 74 68 65 20 6c 61 72 67  nts for the larg
6920: 65 73 74 20 61 6e 64 20 73 6d 61 6c 6c 65 73 74  est and smallest
6930: 20 70 6f 73 73 69 62 6c 65 20 36 34 2d 62 69 74   possible 64-bit
6940: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 73   signed integers
6950: 2e 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f  ..** These macro
6960: 73 20 61 72 65 20 64 65 73 69 67 6e 65 64 20 74  s are designed t
6970: 6f 20 77 6f 72 6b 20 63 6f 72 72 65 63 74 6c 79  o work correctly
6980: 20 6f 6e 20 62 6f 74 68 20 33 32 2d 62 69 74 20   on both 32-bit 
6990: 61 6e 64 20 36 34 2d 62 69 74 0a 2a 2a 20 63 6f  and 64-bit.** co
69a0: 6d 70 69 6c 65 72 73 2e 0a 2a 2f 0a 23 64 65 66  mpilers..*/.#def
69b0: 69 6e 65 20 4c 41 52 47 45 53 54 5f 49 4e 54 36  ine LARGEST_INT6
69c0: 34 20 20 28 30 78 66 66 66 66 66 66 66 66 7c 28  4  (0xffffffff|(
69d0: 28 28 69 36 34 29 30 78 37 66 66 66 66 66 66 66  ((i64)0x7fffffff
69e0: 29 3c 3c 33 32 29 29 0a 23 64 65 66 69 6e 65 20  )<<32)).#define 
69f0: 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 28  SMALLEST_INT64 (
6a00: 28 28 69 36 34 29 2d 31 29 20 2d 20 4c 41 52 47  ((i64)-1) - LARG
6a10: 45 53 54 5f 49 4e 54 36 34 29 0a 0a 2f 2a 0a 2a  EST_INT64)../*.*
6a20: 2a 20 52 6f 75 6e 64 20 75 70 20 61 20 6e 75 6d  * Round up a num
6a30: 62 65 72 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ber to the next 
6a40: 6c 61 72 67 65 72 20 6d 75 6c 74 69 70 6c 65 20  larger multiple 
6a50: 6f 66 20 38 2e 20 20 54 68 69 73 20 69 73 20 75  of 8.  This is u
6a60: 73 65 64 0a 2a 2a 20 74 6f 20 66 6f 72 63 65 20  sed.** to force 
6a70: 38 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65 6e 74  8-byte alignment
6a80: 20 6f 6e 20 36 34 2d 62 69 74 20 61 72 63 68 69   on 64-bit archi
6a90: 74 65 63 74 75 72 65 73 2e 0a 2a 2f 0a 23 64 65  tectures..*/.#de
6aa0: 66 69 6e 65 20 52 4f 55 4e 44 38 28 78 29 20 20  fine ROUND8(x)  
6ab0: 20 20 20 28 28 28 78 29 2b 37 29 26 7e 37 29 0a     (((x)+7)&~7).
6ac0: 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 64 6f 77  ./*.** Round dow
6ad0: 6e 20 74 6f 20 74 68 65 20 6e 65 61 72 65 73 74  n to the nearest
6ae0: 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38 0a 2a   multiple of 8.*
6af0: 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 44  /.#define ROUNDD
6b00: 4f 57 4e 38 28 78 29 20 28 28 78 29 26 7e 37 29  OWN8(x) ((x)&~7)
6b10: 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65 72 74 20 74  ../*.** Assert t
6b20: 68 61 74 20 74 68 65 20 70 6f 69 6e 74 65 72 20  hat the pointer 
6b30: 58 20 69 73 20 61 6c 69 67 6e 65 64 20 74 6f 20  X is aligned to 
6b40: 61 6e 20 38 2d 62 79 74 65 20 62 6f 75 6e 64 61  an 8-byte bounda
6b50: 72 79 2e 20 20 54 68 69 73 0a 2a 2a 20 6d 61 63  ry.  This.** mac
6b60: 72 6f 20 69 73 20 75 73 65 64 20 6f 6e 6c 79 20  ro is used only 
6b70: 77 69 74 68 69 6e 20 61 73 73 65 72 74 28 29 20  within assert() 
6b80: 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 74  to verify that t
6b90: 68 65 20 63 6f 64 65 20 67 65 74 73 0a 2a 2a 20  he code gets.** 
6ba0: 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e 74 20 72 65  all alignment re
6bb0: 73 74 72 69 63 74 69 6f 6e 73 20 63 6f 72 72 65  strictions corre
6bc0: 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78 63 65 70 74  ct..**.** Except
6bd0: 2c 20 69 66 20 53 51 4c 49 54 45 5f 34 5f 42 59  , if SQLITE_4_BY
6be0: 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f  TE_ALIGNED_MALLO
6bf0: 43 20 69 73 20 64 65 66 69 6e 65 64 2c 20 74 68  C is defined, th
6c00: 65 6e 20 74 68 65 0a 2a 2a 20 75 6e 64 65 72 6c  en the.** underl
6c10: 79 69 6e 67 20 6d 61 6c 6c 6f 63 28 29 20 69 6d  ying malloc() im
6c20: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 69 67  plementation mig
6c30: 68 74 20 72 65 74 75 72 6e 20 75 73 20 34 2d 62  ht return us 4-b
6c40: 79 74 65 20 61 6c 69 67 6e 65 64 0a 2a 2a 20 70  yte aligned.** p
6c50: 6f 69 6e 74 65 72 73 2e 20 20 49 6e 20 74 68 61  ointers.  In tha
6c60: 74 20 63 61 73 65 2c 20 6f 6e 6c 79 20 76 65 72  t case, only ver
6c70: 69 66 79 20 34 2d 62 79 74 65 20 61 6c 69 67 6e  ify 4-byte align
6c80: 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  ment..*/.#ifdef 
6c90: 53 51 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c  SQLITE_4_BYTE_AL
6ca0: 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 0a 23 20 64  IGNED_MALLOC.# d
6cb0: 65 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45  efine EIGHT_BYTE
6cc0: 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20  _ALIGNMENT(X)   
6cd0: 28 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20  ((((char*)(X) - 
6ce0: 28 63 68 61 72 2a 29 30 29 26 33 29 3d 3d 30 29  (char*)0)&3)==0)
6cf0: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
6d00: 45 49 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e  EIGHT_BYTE_ALIGN
6d10: 4d 45 4e 54 28 58 29 20 20 20 28 28 28 28 63 68  MENT(X)   ((((ch
6d20: 61 72 2a 29 28 58 29 20 2d 20 28 63 68 61 72 2a  ar*)(X) - (char*
6d30: 29 30 29 26 37 29 3d 3d 30 29 0a 23 65 6e 64 69  )0)&7)==0).#endi
6d40: 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 61 62 6c 65  f../*.** Disable
6d50: 20 4d 4d 41 50 20 6f 6e 20 70 6c 61 74 66 6f 72   MMAP on platfor
6d60: 6d 73 20 77 68 65 72 65 20 69 74 20 69 73 20 6b  ms where it is k
6d70: 6e 6f 77 6e 20 74 6f 20 6e 6f 74 20 77 6f 72 6b  nown to not work
6d80: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
6d90: 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20 7c 7c 20  __OpenBSD__) || 
6da0: 64 65 66 69 6e 65 64 28 5f 5f 51 4e 58 4e 54 4f  defined(__QNXNTO
6db0: 5f 5f 29 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  __).# undef SQLI
6dc0: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
6dd0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
6de0: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30  _MAX_MMAP_SIZE 0
6df0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44  .#endif../*.** D
6e00: 65 66 61 75 6c 74 20 6d 61 78 69 6d 75 6d 20 73  efault maximum s
6e10: 69 7a 65 20 6f 66 20 6d 65 6d 6f 72 79 20 75 73  ize of memory us
6e20: 65 64 20 62 79 20 6d 65 6d 6f 72 79 2d 6d 61 70  ed by memory-map
6e30: 70 65 64 20 49 2f 4f 20 69 6e 20 74 68 65 20 56  ped I/O in the V
6e40: 46 53 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 5f 41  FS.*/.#ifdef __A
6e50: 50 50 4c 45 5f 5f 0a 23 20 69 6e 63 6c 75 64 65  PPLE__.# include
6e60: 20 3c 54 61 72 67 65 74 43 6f 6e 64 69 74 69 6f   <TargetConditio
6e70: 6e 61 6c 73 2e 68 3e 0a 23 65 6e 64 69 66 0a 23  nals.h>.#endif.#
6e80: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41  ifndef SQLITE_MA
6e90: 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 69 66  X_MMAP_SIZE.# if
6ea0: 20 64 65 66 69 6e 65 64 28 5f 5f 6c 69 6e 75 78   defined(__linux
6eb0: 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e  __) \.  || defin
6ec0: 65 64 28 5f 57 49 4e 33 32 29 20 5c 0a 20 20 7c  ed(_WIN32) \.  |
6ed0: 7c 20 28 64 65 66 69 6e 65 64 28 5f 5f 41 50 50  | (defined(__APP
6ee0: 4c 45 5f 5f 29 20 26 26 20 64 65 66 69 6e 65 64  LE__) && defined
6ef0: 28 5f 5f 4d 41 43 48 5f 5f 29 29 20 5c 0a 20 20  (__MACH__)) \.  
6f00: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 73 75 6e  || defined(__sun
6f10: 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64  ) \.  || defined
6f20: 28 5f 5f 46 72 65 65 42 53 44 5f 5f 29 20 5c 0a  (__FreeBSD__) \.
6f30: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 44    || defined(__D
6f40: 72 61 67 6f 6e 46 6c 79 5f 5f 29 0a 23 20 20 20  ragonFly__).#   
6f50: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
6f60: 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 78 37 66  X_MMAP_SIZE 0x7f
6f70: 66 66 30 30 30 30 20 20 2f 2a 20 32 31 34 37 34  ff0000  /* 21474
6f80: 31 38 31 31 32 20 2a 2f 0a 23 20 65 6c 73 65 0a  18112 */.# else.
6f90: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
6fa0: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20  E_MAX_MMAP_SIZE 
6fb0: 30 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69  0.# endif.# defi
6fc0: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  ne SQLITE_MAX_MM
6fd0: 41 50 5f 53 49 5a 45 5f 78 63 20 31 20 2f 2a 20  AP_SIZE_xc 1 /* 
6fe0: 65 78 63 6c 75 64 65 20 66 72 6f 6d 20 63 74 69  exclude from cti
6ff0: 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a  me.c */.#endif..
7000: 2f 2a 0a 2a 2a 20 54 68 65 20 64 65 66 61 75 6c  /*.** The defaul
7010: 74 20 4d 4d 41 50 5f 53 49 5a 45 20 69 73 20 7a  t MMAP_SIZE is z
7020: 65 72 6f 20 6f 6e 20 61 6c 6c 20 70 6c 61 74 66  ero on all platf
7030: 6f 72 6d 73 2e 20 20 4f 72 2c 20 65 76 65 6e 20  orms.  Or, even 
7040: 69 66 20 61 20 6c 61 72 67 65 72 0a 2a 2a 20 64  if a larger.** d
7050: 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45  efault MMAP_SIZE
7060: 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61 74   is specified at
7070: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2c 20 6d   compile-time, m
7080: 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 69 74  ake sure that it
7090: 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 65 78 63   does.** not exc
70a0: 65 65 64 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  eed the maximum 
70b0: 6d 6d 61 70 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69  mmap size..*/.#i
70c0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
70d0: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23  AULT_MMAP_SIZE.#
70e0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44   define SQLITE_D
70f0: 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45  EFAULT_MMAP_SIZE
7100: 20 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49   0.# define SQLI
7110: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
7120: 53 49 5a 45 5f 78 63 20 31 20 20 2f 2a 20 45 78  SIZE_xc 1  /* Ex
7130: 63 6c 75 64 65 20 66 72 6f 6d 20 63 74 69 6d 65  clude from ctime
7140: 2e 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66  .c */.#endif.#if
7150: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
7160: 4d 4d 41 50 5f 53 49 5a 45 3e 53 51 4c 49 54 45  MMAP_SIZE>SQLITE
7170: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23  _MAX_MMAP_SIZE.#
7180: 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45   undef SQLITE_DE
7190: 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a  FAULT_MMAP_SIZE.
71a0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
71b0: 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a  DEFAULT_MMAP_SIZ
71c0: 45 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41  E SQLITE_MAX_MMA
71d0: 50 5f 53 49 5a 45 0a 23 65 6e 64 69 66 0a 0a 2f  P_SIZE.#endif../
71e0: 2a 0a 2a 2a 20 4f 6e 6c 79 20 6f 6e 65 20 6f 66  *.** Only one of
71f0: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
7200: 54 41 54 33 20 6f 72 20 53 51 4c 49 54 45 5f 45  TAT3 or SQLITE_E
7210: 4e 41 42 4c 45 5f 53 54 41 54 34 20 63 61 6e 20  NABLE_STAT4 can 
7220: 62 65 20 64 65 66 69 6e 65 64 2e 0a 2a 2a 20 50  be defined..** P
7230: 72 69 6f 72 69 74 79 20 69 73 20 67 69 76 65 6e  riority is given
7240: 20 74 6f 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c   to SQLITE_ENABL
7250: 45 5f 53 54 41 54 34 2e 20 20 49 66 20 65 69 74  E_STAT4.  If eit
7260: 68 65 72 20 61 72 65 20 64 65 66 69 6e 65 64 2c  her are defined,
7270: 20 61 6c 73 6f 0a 2a 2a 20 64 65 66 69 6e 65 20   also.** define 
7280: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
7290: 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 2a 2f 0a  AT3_OR_STAT4.*/.
72a0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
72b0: 41 42 4c 45 5f 53 54 41 54 34 0a 23 20 75 6e 64  ABLE_STAT4.# und
72c0: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
72d0: 5f 53 54 41 54 33 0a 23 20 64 65 66 69 6e 65 20  _STAT3.# define 
72e0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
72f0: 41 54 33 5f 4f 52 5f 53 54 41 54 34 20 31 0a 23  AT3_OR_STAT4 1.#
7300: 65 6c 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  elif SQLITE_ENAB
7310: 4c 45 5f 53 54 41 54 33 0a 23 20 64 65 66 69 6e  LE_STAT3.# defin
7320: 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  e SQLITE_ENABLE_
7330: 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 20 31  STAT3_OR_STAT4 1
7340: 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 45 4e  .#elif SQLITE_EN
7350: 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54  ABLE_STAT3_OR_ST
7360: 41 54 34 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  AT4.# undef SQLI
7370: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
7380: 4f 52 5f 53 54 41 54 34 0a 23 65 6e 64 69 66 0a  OR_STAT4.#endif.
7390: 0a 2f 2a 0a 2a 2a 20 53 45 4c 45 43 54 54 52 41  ./*.** SELECTTRA
73a0: 43 45 5f 45 4e 41 42 4c 45 44 20 77 69 6c 6c 20  CE_ENABLED will 
73b0: 62 65 20 65 69 74 68 65 72 20 31 20 6f 72 20 30  be either 1 or 0
73c0: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68   depending on wh
73d0: 65 74 68 65 72 20 6f 72 20 6e 6f 74 0a 2a 2a 20  ether or not.** 
73e0: 74 68 65 20 53 65 6c 65 63 74 20 71 75 65 72 79  the Select query
73f0: 20 67 65 6e 65 72 61 74 6f 72 20 74 72 61 63 69   generator traci
7400: 6e 67 20 6c 6f 67 69 63 20 69 73 20 74 75 72 6e  ng logic is turn
7410: 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 64 65  ed on..*/.#if de
7420: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
7430: 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53  UG) || defined(S
7440: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45 4c  QLITE_ENABLE_SEL
7450: 45 43 54 54 52 41 43 45 29 0a 23 20 64 65 66 69  ECTTRACE).# defi
7460: 6e 65 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45  ne SELECTTRACE_E
7470: 4e 41 42 4c 45 44 20 31 0a 23 65 6c 73 65 0a 23  NABLED 1.#else.#
7480: 20 64 65 66 69 6e 65 20 53 45 4c 45 43 54 54 52   define SELECTTR
7490: 41 43 45 5f 45 4e 41 42 4c 45 44 20 30 0a 23 65  ACE_ENABLED 0.#e
74a0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  ndif../*.** An i
74b0: 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
74c0: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
74d0: 72 65 20 69 73 20 75 73 65 64 20 74 6f 20 73 74  re is used to st
74e0: 6f 72 65 20 74 68 65 20 62 75 73 79 2d 68 61 6e  ore the busy-han
74f0: 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b  dler.** callback
7500: 20 66 6f 72 20 61 20 67 69 76 65 6e 20 73 71 6c   for a given sql
7510: 69 74 65 20 68 61 6e 64 6c 65 2e 0a 2a 2a 0a 2a  ite handle..**.*
7520: 2a 20 54 68 65 20 73 71 6c 69 74 65 2e 62 75 73  * The sqlite.bus
7530: 79 48 61 6e 64 6c 65 72 20 6d 65 6d 62 65 72 20  yHandler member 
7540: 6f 66 20 74 68 65 20 73 71 6c 69 74 65 20 73 74  of the sqlite st
7550: 72 75 63 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  ruct contains th
7560: 65 20 62 75 73 79 0a 2a 2a 20 63 61 6c 6c 62 61  e busy.** callba
7570: 63 6b 20 66 6f 72 20 74 68 65 20 64 61 74 61 62  ck for the datab
7580: 61 73 65 20 68 61 6e 64 6c 65 2e 20 45 61 63 68  ase handle. Each
7590: 20 70 61 67 65 72 20 6f 70 65 6e 65 64 20 76 69   pager opened vi
75a0: 61 20 74 68 65 20 73 71 6c 69 74 65 0a 2a 2a 20  a the sqlite.** 
75b0: 68 61 6e 64 6c 65 20 69 73 20 70 61 73 73 65 64  handle is passed
75c0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 73 71   a pointer to sq
75d0: 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72  lite.busyHandler
75e0: 2e 20 54 68 65 20 62 75 73 79 2d 68 61 6e 64 6c  . The busy-handl
75f0: 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 69  er.** callback i
7600: 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 76 6f  s currently invo
7610: 6b 65 64 20 6f 6e 6c 79 20 66 72 6f 6d 20 77 69  ked only from wi
7620: 74 68 69 6e 20 70 61 67 65 72 2e 63 2e 0a 2a 2f  thin pager.c..*/
7630: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
7640: 42 75 73 79 48 61 6e 64 6c 65 72 20 42 75 73 79  BusyHandler Busy
7650: 48 61 6e 64 6c 65 72 3b 0a 73 74 72 75 63 74 20  Handler;.struct 
7660: 42 75 73 79 48 61 6e 64 6c 65 72 20 7b 0a 20 20  BusyHandler {.  
7670: 69 6e 74 20 28 2a 78 46 75 6e 63 29 28 76 6f 69  int (*xFunc)(voi
7680: 64 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20 54 68  d *,int);  /* Th
7690: 65 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20  e busy callback 
76a0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 72 67 3b  */.  void *pArg;
76b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
76c0: 2f 2a 20 46 69 72 73 74 20 61 72 67 20 74 6f 20  /* First arg to 
76d0: 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  busy callback */
76e0: 0a 20 20 69 6e 74 20 6e 42 75 73 79 3b 20 20 20  .  int nBusy;   
76f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
7700: 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74   Incremented wit
7710: 68 20 65 61 63 68 20 62 75 73 79 20 63 61 6c 6c  h each busy call
7720: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61   */.};../*.** Na
7730: 6d 65 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72  me of the master
7740: 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e   database table.
7750: 20 20 54 68 65 20 6d 61 73 74 65 72 20 64 61 74    The master dat
7760: 61 62 61 73 65 20 74 61 62 6c 65 0a 2a 2a 20 69  abase table.** i
7770: 73 20 61 20 73 70 65 63 69 61 6c 20 74 61 62 6c  s a special tabl
7780: 65 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65  e that holds the
7790: 20 6e 61 6d 65 73 20 61 6e 64 20 61 74 74 72 69   names and attri
77a0: 62 75 74 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a 20  butes of all.** 
77b0: 75 73 65 72 20 74 61 62 6c 65 73 20 61 6e 64 20  user tables and 
77c0: 69 6e 64 69 63 65 73 2e 0a 2a 2f 0a 23 64 65 66  indices..*/.#def
77d0: 69 6e 65 20 4d 41 53 54 45 52 5f 4e 41 4d 45 20  ine MASTER_NAME 
77e0: 20 20 20 20 20 20 22 73 71 6c 69 74 65 5f 6d 61        "sqlite_ma
77f0: 73 74 65 72 22 0a 23 64 65 66 69 6e 65 20 54 45  ster".#define TE
7800: 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20  MP_MASTER_NAME  
7810: 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73  "sqlite_temp_mas
7820: 74 65 72 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ter"../*.** The 
7830: 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74 68 65  root-page of the
7840: 20 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65   master database
7850: 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69   table..*/.#defi
7860: 6e 65 20 4d 41 53 54 45 52 5f 52 4f 4f 54 20 20  ne MASTER_ROOT  
7870: 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68       1../*.** Th
7880: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 73 63  e name of the sc
7890: 68 65 6d 61 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23  hema table..*/.#
78a0: 64 65 66 69 6e 65 20 53 43 48 45 4d 41 5f 54 41  define SCHEMA_TA
78b0: 42 4c 45 28 78 29 20 20 28 28 21 4f 4d 49 54 5f  BLE(x)  ((!OMIT_
78c0: 54 45 4d 50 44 42 29 26 26 28 78 3d 3d 31 29 3f  TEMPDB)&&(x==1)?
78d0: 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45  TEMP_MASTER_NAME
78e0: 3a 4d 41 53 54 45 52 5f 4e 41 4d 45 29 0a 0a 2f  :MASTER_NAME)../
78f0: 2a 0a 2a 2a 20 41 20 63 6f 6e 76 65 6e 69 65 6e  *.** A convenien
7900: 63 65 20 6d 61 63 72 6f 20 74 68 61 74 20 72 65  ce macro that re
7910: 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72  turns the number
7920: 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 0a   of elements in.
7930: 2a 2a 20 61 6e 20 61 72 72 61 79 2e 0a 2a 2f 0a  ** an array..*/.
7940: 23 64 65 66 69 6e 65 20 41 72 72 61 79 53 69 7a  #define ArraySiz
7950: 65 28 58 29 20 20 20 20 28 28 69 6e 74 29 28 73  e(X)    ((int)(s
7960: 69 7a 65 6f 66 28 58 29 2f 73 69 7a 65 6f 66 28  izeof(X)/sizeof(
7970: 58 5b 30 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a 20 44  X[0])))../*.** D
7980: 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68 65 20  etermine if the 
7990: 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 70 6f  argument is a po
79a0: 77 65 72 20 6f 66 20 74 77 6f 0a 2a 2f 0a 23 64  wer of two.*/.#d
79b0: 65 66 69 6e 65 20 49 73 50 6f 77 65 72 4f 66 54  efine IsPowerOfT
79c0: 77 6f 28 58 29 20 28 28 28 58 29 26 28 28 58 29  wo(X) (((X)&((X)
79d0: 2d 31 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20  -1))==0)../*.** 
79e0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61  The following va
79f0: 6c 75 65 20 61 73 20 61 20 64 65 73 74 72 75 63  lue as a destruc
7a00: 74 6f 72 20 6d 65 61 6e 73 20 74 6f 20 75 73 65  tor means to use
7a10: 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29   sqlite3DbFree()
7a20: 2e 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 33  ..** The sqlite3
7a30: 44 62 46 72 65 65 28 29 20 72 6f 75 74 69 6e 65  DbFree() routine
7a40: 20 72 65 71 75 69 72 65 73 20 74 77 6f 20 70 61   requires two pa
7a50: 72 61 6d 65 74 65 72 73 20 69 6e 73 74 65 61 64  rameters instead
7a60: 20 6f 66 20 74 68 65 0a 2a 2a 20 6f 6e 65 20 70   of the.** one p
7a70: 61 72 61 6d 65 74 65 72 20 74 68 61 74 20 64 65  arameter that de
7a80: 73 74 72 75 63 74 6f 72 73 20 6e 6f 72 6d 61 6c  structors normal
7a90: 6c 79 20 77 61 6e 74 2e 20 20 53 6f 20 77 65 20  ly want.  So we 
7aa0: 68 61 76 65 20 74 6f 20 69 6e 74 72 6f 64 75 63  have to introduc
7ab0: 65 0a 2a 2a 20 74 68 69 73 20 6d 61 67 69 63 20  e.** this magic 
7ac0: 76 61 6c 75 65 20 74 68 61 74 20 74 68 65 20 63  value that the c
7ad0: 6f 64 65 20 6b 6e 6f 77 73 20 74 6f 20 68 61 6e  ode knows to han
7ae0: 64 6c 65 20 64 69 66 66 65 72 65 6e 74 6c 79 2e  dle differently.
7af0: 20 20 41 6e 79 0a 2a 2a 20 70 6f 69 6e 74 65 72    Any.** pointer
7b00: 20 77 69 6c 6c 20 77 6f 72 6b 20 68 65 72 65 20   will work here 
7b10: 61 73 20 6c 6f 6e 67 20 61 73 20 69 74 20 69 73  as long as it is
7b20: 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 53   distinct from S
7b30: 51 4c 49 54 45 5f 53 54 41 54 49 43 0a 2a 2a 20  QLITE_STATIC.** 
7b40: 61 6e 64 20 53 51 4c 49 54 45 5f 54 52 41 4e 53  and SQLITE_TRANS
7b50: 49 45 4e 54 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  IENT..*/.#define
7b60: 20 53 51 4c 49 54 45 5f 44 59 4e 41 4d 49 43 20   SQLITE_DYNAMIC 
7b70: 20 20 28 28 73 71 6c 69 74 65 33 5f 64 65 73 74    ((sqlite3_dest
7b80: 72 75 63 74 6f 72 5f 74 79 70 65 29 73 71 6c 69  ructor_type)sqli
7b90: 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 29 0a 0a  te3MallocSize)..
7ba0: 2f 2a 0a 2a 2a 20 57 68 65 6e 20 53 51 4c 49 54  /*.** When SQLIT
7bb0: 45 5f 4f 4d 49 54 5f 57 53 44 20 69 73 20 64 65  E_OMIT_WSD is de
7bc0: 66 69 6e 65 64 2c 20 69 74 20 6d 65 61 6e 73 20  fined, it means 
7bd0: 74 68 61 74 20 74 68 65 20 74 61 72 67 65 74 20  that the target 
7be0: 70 6c 61 74 66 6f 72 6d 20 64 6f 65 73 0a 2a 2a  platform does.**
7bf0: 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 57 72 69   not support Wri
7c00: 74 61 62 6c 65 20 53 74 61 74 69 63 20 44 61 74  table Static Dat
7c10: 61 20 28 57 53 44 29 20 73 75 63 68 20 61 73 20  a (WSD) such as 
7c20: 67 6c 6f 62 61 6c 20 61 6e 64 20 73 74 61 74 69  global and stati
7c30: 63 20 76 61 72 69 61 62 6c 65 73 2e 0a 2a 2a 20  c variables..** 
7c40: 41 6c 6c 20 76 61 72 69 61 62 6c 65 73 20 6d 75  All variables mu
7c50: 73 74 20 65 69 74 68 65 72 20 62 65 20 6f 6e 20  st either be on 
7c60: 74 68 65 20 73 74 61 63 6b 20 6f 72 20 64 79 6e  the stack or dyn
7c70: 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74  amically allocat
7c80: 65 64 20 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 68  ed from.** the h
7c90: 65 61 70 2e 20 20 57 68 65 6e 20 57 53 44 20 69  eap.  When WSD i
7ca0: 73 20 75 6e 73 75 70 70 6f 72 74 65 64 2c 20 74  s unsupported, t
7cb0: 68 65 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c  he variable decl
7cc0: 61 72 61 74 69 6f 6e 73 20 73 63 61 74 74 65 72  arations scatter
7cd0: 65 64 0a 2a 2a 20 74 68 72 6f 75 67 68 6f 75 74  ed.** throughout
7ce0: 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 64 65   the SQLite code
7cf0: 20 6d 75 73 74 20 62 65 63 6f 6d 65 20 63 6f 6e   must become con
7d00: 73 74 61 6e 74 73 20 69 6e 73 74 65 61 64 2e 20  stants instead. 
7d10: 20 54 68 65 20 53 51 4c 49 54 45 5f 57 53 44 0a   The SQLITE_WSD.
7d20: 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  ** macro is used
7d30: 20 66 6f 72 20 74 68 69 73 20 70 75 72 70 6f 73   for this purpos
7d40: 65 2e 20 20 41 6e 64 20 69 6e 73 74 65 61 64 20  e.  And instead 
7d50: 6f 66 20 72 65 66 65 72 65 6e 63 69 6e 67 20 74  of referencing t
7d60: 68 65 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 64  he variable.** d
7d70: 69 72 65 63 74 6c 79 2c 20 77 65 20 75 73 65 20  irectly, we use 
7d80: 69 74 73 20 63 6f 6e 73 74 61 6e 74 20 61 73 20  its constant as 
7d90: 61 20 6b 65 79 20 74 6f 20 6c 6f 6f 6b 75 70 20  a key to lookup 
7da0: 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c  the run-time all
7db0: 6f 63 61 74 65 64 0a 2a 2a 20 62 75 66 66 65 72  ocated.** buffer
7dc0: 20 74 68 61 74 20 68 6f 6c 64 73 20 72 65 61 6c   that holds real
7dd0: 20 76 61 72 69 61 62 6c 65 2e 20 20 54 68 65 20   variable.  The 
7de0: 63 6f 6e 73 74 61 6e 74 20 69 73 20 61 6c 73 6f  constant is also
7df0: 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 65 72   the initializer
7e00: 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 75 6e 2d  .** for the run-
7e10: 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64 20 62  time allocated b
7e20: 75 66 66 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20  uffer..**.** In 
7e30: 74 68 65 20 75 73 75 61 6c 20 63 61 73 65 20 77  the usual case w
7e40: 68 65 72 65 20 57 53 44 20 69 73 20 73 75 70 70  here WSD is supp
7e50: 6f 72 74 65 64 2c 20 74 68 65 20 53 51 4c 49 54  orted, the SQLIT
7e60: 45 5f 57 53 44 20 61 6e 64 20 47 4c 4f 42 41 4c  E_WSD and GLOBAL
7e70: 0a 2a 2a 20 6d 61 63 72 6f 73 20 62 65 63 6f 6d  .** macros becom
7e80: 65 20 6e 6f 2d 6f 70 73 20 61 6e 64 20 68 61 76  e no-ops and hav
7e90: 65 20 7a 65 72 6f 20 70 65 72 66 6f 72 6d 61 6e  e zero performan
7ea0: 63 65 20 69 6d 70 61 63 74 2e 0a 2a 2f 0a 23 69  ce impact..*/.#i
7eb0: 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
7ec0: 5f 57 53 44 0a 20 20 23 64 65 66 69 6e 65 20 53  _WSD.  #define S
7ed0: 51 4c 49 54 45 5f 57 53 44 20 63 6f 6e 73 74 0a  QLITE_WSD const.
7ee0: 20 20 23 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c    #define GLOBAL
7ef0: 28 74 2c 76 29 20 28 2a 28 74 2a 29 73 71 6c 69  (t,v) (*(t*)sqli
7f00: 74 65 33 5f 77 73 64 5f 66 69 6e 64 28 28 76 6f  te3_wsd_find((vo
7f10: 69 64 2a 29 26 28 76 29 2c 20 73 69 7a 65 6f 66  id*)&(v), sizeof
7f20: 28 76 29 29 29 0a 20 20 23 64 65 66 69 6e 65 20  (v))).  #define 
7f30: 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e  sqlite3GlobalCon
7f40: 66 69 67 20 47 4c 4f 42 41 4c 28 73 74 72 75 63  fig GLOBAL(struc
7f50: 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 2c  t Sqlite3Config,
7f60: 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 29 0a   sqlite3Config).
7f70: 20 20 69 6e 74 20 73 71 6c 69 74 65 33 5f 77 73    int sqlite3_ws
7f80: 64 5f 69 6e 69 74 28 69 6e 74 20 4e 2c 20 69 6e  d_init(int N, in
7f90: 74 20 4a 29 3b 0a 20 20 76 6f 69 64 20 2a 73 71  t J);.  void *sq
7fa0: 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64 28 76  lite3_wsd_find(v
7fb0: 6f 69 64 20 2a 4b 2c 20 69 6e 74 20 4c 29 3b 0a  oid *K, int L);.
7fc0: 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
7fd0: 53 51 4c 49 54 45 5f 57 53 44 0a 20 20 23 64 65  SQLITE_WSD.  #de
7fe0: 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29  fine GLOBAL(t,v)
7ff0: 20 76 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c   v.  #define sql
8000: 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67  ite3GlobalConfig
8010: 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 0a 23   sqlite3Config.#
8020: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
8030: 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
8040: 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 73 75  s are used to su
8050: 70 70 72 65 73 73 20 63 6f 6d 70 69 6c 65 72 20  ppress compiler 
8060: 77 61 72 6e 69 6e 67 73 20 61 6e 64 20 74 6f 0a  warnings and to.
8070: 2a 2a 20 6d 61 6b 65 20 69 74 20 63 6c 65 61 72  ** make it clear
8080: 20 74 6f 20 68 75 6d 61 6e 20 72 65 61 64 65 72   to human reader
8090: 73 20 77 68 65 6e 20 61 20 66 75 6e 63 74 69 6f  s when a functio
80a0: 6e 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 64  n parameter is d
80b0: 65 6c 69 62 65 72 61 74 65 6c 79 0a 2a 2a 20 6c  eliberately.** l
80c0: 65 66 74 20 75 6e 75 73 65 64 20 77 69 74 68 69  eft unused withi
80d0: 6e 20 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20  n the body of a 
80e0: 66 75 6e 63 74 69 6f 6e 2e 20 54 68 69 73 20 75  function. This u
80f0: 73 75 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 77  sually happens w
8100: 68 65 6e 0a 2a 2a 20 61 20 66 75 6e 63 74 69 6f  hen.** a functio
8110: 6e 20 69 73 20 63 61 6c 6c 65 64 20 76 69 61 20  n is called via 
8120: 61 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74  a function point
8130: 65 72 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 20  er. For example 
8140: 74 68 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74  the.** implement
8150: 61 74 69 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20  ation of an SQL 
8160: 61 67 67 72 65 67 61 74 65 20 73 74 65 70 20 63  aggregate step c
8170: 61 6c 6c 62 61 63 6b 20 6d 61 79 20 6e 6f 74 20  allback may not 
8180: 75 73 65 20 74 68 65 0a 2a 2a 20 70 61 72 61 6d  use the.** param
8190: 65 74 65 72 20 69 6e 64 69 63 61 74 69 6e 67 20  eter indicating 
81a0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72  the number of ar
81b0: 67 75 6d 65 6e 74 73 20 70 61 73 73 65 64 20 74  guments passed t
81c0: 6f 20 74 68 65 20 61 67 67 72 65 67 61 74 65 2c  o the aggregate,
81d0: 0a 2a 2a 20 69 66 20 69 74 20 6b 6e 6f 77 73 20  .** if it knows 
81e0: 74 68 61 74 20 74 68 69 73 20 69 73 20 65 6e 66  that this is enf
81f0: 6f 72 63 65 64 20 65 6c 73 65 77 68 65 72 65 2e  orced elsewhere.
8200: 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61 20 66 75  .**.** When a fu
8210: 6e 63 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72  nction parameter
8220: 20 69 73 20 6e 6f 74 20 75 73 65 64 20 61 74 20   is not used at 
8230: 61 6c 6c 20 77 69 74 68 69 6e 20 74 68 65 20 62  all within the b
8240: 6f 64 79 20 6f 66 20 61 20 66 75 6e 63 74 69 6f  ody of a functio
8250: 6e 2c 0a 2a 2a 20 69 74 20 69 73 20 67 65 6e 65  n,.** it is gene
8260: 72 61 6c 6c 79 20 6e 61 6d 65 64 20 22 4e 6f 74  rally named "Not
8270: 55 73 65 64 22 20 6f 72 20 22 4e 6f 74 55 73 65  Used" or "NotUse
8280: 64 32 22 20 74 6f 20 6d 61 6b 65 20 74 68 69 6e  d2" to make thin
8290: 67 73 20 65 76 65 6e 20 63 6c 65 61 72 65 72 2e  gs even clearer.
82a0: 0a 2a 2a 20 48 6f 77 65 76 65 72 2c 20 74 68 65  .** However, the
82b0: 73 65 20 6d 61 63 72 6f 73 20 6d 61 79 20 61 6c  se macros may al
82c0: 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20 73 75  so be used to su
82d0: 70 70 72 65 73 73 20 77 61 72 6e 69 6e 67 73 20  ppress warnings 
82e0: 72 65 6c 61 74 65 64 20 74 6f 0a 2a 2a 20 70 61  related to.** pa
82f0: 72 61 6d 65 74 65 72 73 20 74 68 61 74 20 6d 61  rameters that ma
8300: 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 20  y or may not be 
8310: 75 73 65 64 20 64 65 70 65 6e 64 69 6e 67 20 6f  used depending o
8320: 6e 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70  n compilation op
8330: 74 69 6f 6e 73 2e 0a 2a 2a 20 46 6f 72 20 65 78  tions..** For ex
8340: 61 6d 70 6c 65 20 74 68 6f 73 65 20 70 61 72 61  ample those para
8350: 6d 65 74 65 72 73 20 6f 6e 6c 79 20 75 73 65 64  meters only used
8360: 20 69 6e 20 61 73 73 65 72 74 28 29 20 73 74 61   in assert() sta
8370: 74 65 6d 65 6e 74 73 2e 20 49 6e 20 74 68 65 73  tements. In thes
8380: 65 0a 2a 2a 20 63 61 73 65 73 20 74 68 65 20 70  e.** cases the p
8390: 61 72 61 6d 65 74 65 72 73 20 61 72 65 20 6e 61  arameters are na
83a0: 6d 65 64 20 61 73 20 70 65 72 20 74 68 65 20 75  med as per the u
83b0: 73 75 61 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e 73  sual conventions
83c0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55  ..*/.#define UNU
83d0: 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29  SED_PARAMETER(x)
83e0: 20 28 76 6f 69 64 29 28 78 29 0a 23 64 65 66 69   (void)(x).#defi
83f0: 6e 65 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45  ne UNUSED_PARAME
8400: 54 45 52 32 28 78 2c 79 29 20 55 4e 55 53 45 44  TER2(x,y) UNUSED
8410: 5f 50 41 52 41 4d 45 54 45 52 28 78 29 2c 55 4e  _PARAMETER(x),UN
8420: 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28 79  USED_PARAMETER(y
8430: 29 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72 64  )../*.** Forward
8440: 20 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20 73   references to s
8450: 74 72 75 63 74 75 72 65 73 0a 2a 2f 0a 74 79 70  tructures.*/.typ
8460: 65 64 65 66 20 73 74 72 75 63 74 20 41 67 67 49  edef struct AggI
8470: 6e 66 6f 20 41 67 67 49 6e 66 6f 3b 0a 74 79 70  nfo AggInfo;.typ
8480: 65 64 65 66 20 73 74 72 75 63 74 20 41 75 74 68  edef struct Auth
8490: 43 6f 6e 74 65 78 74 20 41 75 74 68 43 6f 6e 74  Context AuthCont
84a0: 65 78 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ext;.typedef str
84b0: 75 63 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20  uct AutoincInfo 
84c0: 41 75 74 6f 69 6e 63 49 6e 66 6f 3b 0a 74 79 70  AutoincInfo;.typ
84d0: 65 64 65 66 20 73 74 72 75 63 74 20 42 69 74 76  edef struct Bitv
84e0: 65 63 20 42 69 74 76 65 63 3b 0a 74 79 70 65 64  ec Bitvec;.typed
84f0: 65 66 20 73 74 72 75 63 74 20 43 6f 6c 6c 53 65  ef struct CollSe
8500: 71 20 43 6f 6c 6c 53 65 71 3b 0a 74 79 70 65 64  q CollSeq;.typed
8510: 65 66 20 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e  ef struct Column
8520: 20 43 6f 6c 75 6d 6e 3b 0a 74 79 70 65 64 65 66   Column;.typedef
8530: 20 73 74 72 75 63 74 20 44 62 20 44 62 3b 0a 74   struct Db Db;.t
8540: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 63  ypedef struct Sc
8550: 68 65 6d 61 20 53 63 68 65 6d 61 3b 0a 74 79 70  hema Schema;.typ
8560: 65 64 65 66 20 73 74 72 75 63 74 20 45 78 70 72  edef struct Expr
8570: 20 45 78 70 72 3b 0a 74 79 70 65 64 65 66 20 73   Expr;.typedef s
8580: 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 20 45  truct ExprList E
8590: 78 70 72 4c 69 73 74 3b 0a 74 79 70 65 64 65 66  xprList;.typedef
85a0: 20 73 74 72 75 63 74 20 45 78 70 72 53 70 61 6e   struct ExprSpan
85b0: 20 45 78 70 72 53 70 61 6e 3b 0a 74 79 70 65 64   ExprSpan;.typed
85c0: 65 66 20 73 74 72 75 63 74 20 46 4b 65 79 20 46  ef struct FKey F
85d0: 4b 65 79 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Key;.typedef str
85e0: 75 63 74 20 46 75 6e 63 44 65 73 74 72 75 63 74  uct FuncDestruct
85f0: 6f 72 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  or FuncDestructo
8600: 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  r;.typedef struc
8610: 74 20 46 75 6e 63 44 65 66 20 46 75 6e 63 44 65  t FuncDef FuncDe
8620: 66 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  f;.typedef struc
8630: 74 20 46 75 6e 63 44 65 66 48 61 73 68 20 46 75  t FuncDefHash Fu
8640: 6e 63 44 65 66 48 61 73 68 3b 0a 74 79 70 65 64  ncDefHash;.typed
8650: 65 66 20 73 74 72 75 63 74 20 49 64 4c 69 73 74  ef struct IdList
8660: 20 49 64 4c 69 73 74 3b 0a 74 79 70 65 64 65 66   IdList;.typedef
8670: 20 73 74 72 75 63 74 20 49 6e 64 65 78 20 49 6e   struct Index In
8680: 64 65 78 3b 0a 74 79 70 65 64 65 66 20 73 74 72  dex;.typedef str
8690: 75 63 74 20 49 6e 64 65 78 53 61 6d 70 6c 65 20  uct IndexSample 
86a0: 49 6e 64 65 78 53 61 6d 70 6c 65 3b 0a 74 79 70  IndexSample;.typ
86b0: 65 64 65 66 20 73 74 72 75 63 74 20 4b 65 79 43  edef struct KeyC
86c0: 6c 61 73 73 20 4b 65 79 43 6c 61 73 73 3b 0a 74  lass KeyClass;.t
86d0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4b 65  ypedef struct Ke
86e0: 79 49 6e 66 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74  yInfo KeyInfo;.t
86f0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f  ypedef struct Lo
8700: 6f 6b 61 73 69 64 65 20 4c 6f 6f 6b 61 73 69 64  okaside Lookasid
8710: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
8720: 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20  t LookasideSlot 
8730: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 3b 0a 74  LookasideSlot;.t
8740: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4d 6f  ypedef struct Mo
8750: 64 75 6c 65 20 4d 6f 64 75 6c 65 3b 0a 74 79 70  dule Module;.typ
8760: 65 64 65 66 20 73 74 72 75 63 74 20 4e 61 6d 65  edef struct Name
8770: 43 6f 6e 74 65 78 74 20 4e 61 6d 65 43 6f 6e 74  Context NameCont
8780: 65 78 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ext;.typedef str
8790: 75 63 74 20 50 61 72 73 65 20 50 61 72 73 65 3b  uct Parse Parse;
87a0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
87b0: 50 72 65 55 70 64 61 74 65 20 50 72 65 55 70 64  PreUpdate PreUpd
87c0: 61 74 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ate;.typedef str
87d0: 75 63 74 20 50 72 69 6e 74 66 41 72 67 75 6d 65  uct PrintfArgume
87e0: 6e 74 73 20 50 72 69 6e 74 66 41 72 67 75 6d 65  nts PrintfArgume
87f0: 6e 74 73 3b 0a 74 79 70 65 64 65 66 20 73 74 72  nts;.typedef str
8800: 75 63 74 20 52 6f 77 53 65 74 20 52 6f 77 53 65  uct RowSet RowSe
8810: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
8820: 74 20 53 61 76 65 70 6f 69 6e 74 20 53 61 76 65  t Savepoint Save
8830: 70 6f 69 6e 74 3b 0a 74 79 70 65 64 65 66 20 73  point;.typedef s
8840: 74 72 75 63 74 20 53 65 6c 65 63 74 20 53 65 6c  truct Select Sel
8850: 65 63 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ect;.typedef str
8860: 75 63 74 20 53 51 4c 69 74 65 54 68 72 65 61 64  uct SQLiteThread
8870: 20 53 51 4c 69 74 65 54 68 72 65 61 64 3b 0a 74   SQLiteThread;.t
8880: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53 65  ypedef struct Se
8890: 6c 65 63 74 44 65 73 74 20 53 65 6c 65 63 74 44  lectDest SelectD
88a0: 65 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  est;.typedef str
88b0: 75 63 74 20 53 72 63 4c 69 73 74 20 53 72 63 4c  uct SrcList SrcL
88c0: 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ist;.typedef str
88d0: 75 63 74 20 53 74 72 41 63 63 75 6d 20 53 74 72  uct StrAccum Str
88e0: 41 63 63 75 6d 3b 0a 74 79 70 65 64 65 66 20 73  Accum;.typedef s
88f0: 74 72 75 63 74 20 54 61 62 6c 65 20 54 61 62 6c  truct Table Tabl
8900: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
8910: 74 20 54 61 62 6c 65 4c 6f 63 6b 20 54 61 62 6c  t TableLock Tabl
8920: 65 4c 6f 63 6b 3b 0a 74 79 70 65 64 65 66 20 73  eLock;.typedef s
8930: 74 72 75 63 74 20 54 6f 6b 65 6e 20 54 6f 6b 65  truct Token Toke
8940: 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  n;.typedef struc
8950: 74 20 54 72 65 65 56 69 65 77 20 54 72 65 65 56  t TreeView TreeV
8960: 69 65 77 3b 0a 74 79 70 65 64 65 66 20 73 74 72  iew;.typedef str
8970: 75 63 74 20 54 72 69 67 67 65 72 20 54 72 69 67  uct Trigger Trig
8980: 67 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ger;.typedef str
8990: 75 63 74 20 54 72 69 67 67 65 72 50 72 67 20 54  uct TriggerPrg T
89a0: 72 69 67 67 65 72 50 72 67 3b 0a 74 79 70 65 64  riggerPrg;.typed
89b0: 65 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  ef struct Trigge
89c0: 72 53 74 65 70 20 54 72 69 67 67 65 72 53 74 65  rStep TriggerSte
89d0: 70 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  p;.typedef struc
89e0: 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  t UnpackedRecord
89f0: 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 3b   UnpackedRecord;
8a00: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8a10: 56 54 61 62 6c 65 20 56 54 61 62 6c 65 3b 0a 74  VTable VTable;.t
8a20: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 56 74  ypedef struct Vt
8a30: 61 62 43 74 78 20 56 74 61 62 43 74 78 3b 0a 74  abCtx VtabCtx;.t
8a40: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57 61  ypedef struct Wa
8a50: 6c 6b 65 72 20 57 61 6c 6b 65 72 3b 0a 74 79 70  lker Walker;.typ
8a60: 65 64 65 66 20 73 74 72 75 63 74 20 57 68 65 72  edef struct Wher
8a70: 65 49 6e 66 6f 20 57 68 65 72 65 49 6e 66 6f 3b  eInfo WhereInfo;
8a80: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8a90: 57 69 74 68 20 57 69 74 68 3b 0a 0a 2f 2a 20 41  With With;../* A
8aa0: 20 56 4c 69 73 74 20 6f 62 6a 65 63 74 20 72 65   VList object re
8ab0: 63 6f 72 64 73 20 61 20 6d 61 70 70 69 6e 67 20  cords a mapping 
8ac0: 62 65 74 77 65 65 6e 20 70 61 72 61 6d 65 74 65  between paramete
8ad0: 72 73 2f 76 61 72 69 61 62 6c 65 73 2f 77 69 6c  rs/variables/wil
8ae0: 64 63 61 72 64 73 0a 2a 2a 20 69 6e 20 74 68 65  dcards.** in the
8af0: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 28   SQL statement (
8b00: 73 75 63 68 20 61 73 20 24 61 62 63 2c 20 40 70  such as $abc, @p
8b10: 71 72 2c 20 6f 72 20 3a 78 79 7a 29 20 61 6e 64  qr, or :xyz) and
8b20: 20 74 68 65 20 69 6e 74 65 67 65 72 0a 2a 2a 20   the integer.** 
8b30: 76 61 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 20  variable number 
8b40: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
8b50: 74 68 61 74 20 70 61 72 61 6d 65 74 65 72 2e 20  that parameter. 
8b60: 20 53 65 65 20 74 68 65 20 66 6f 72 6d 61 74 20   See the format 
8b70: 64 65 73 63 72 69 70 74 69 6f 6e 0a 2a 2a 20 6f  description.** o
8b80: 6e 20 74 68 65 20 73 71 6c 69 74 65 33 56 4c 69  n the sqlite3VLi
8b90: 73 74 41 64 64 28 29 20 72 6f 75 74 69 6e 65 20  stAdd() routine 
8ba0: 66 6f 72 20 6d 6f 72 65 20 69 6e 66 6f 72 6d 61  for more informa
8bb0: 74 69 6f 6e 2e 20 20 41 20 56 4c 69 73 74 20 69  tion.  A VList i
8bc0: 73 20 72 65 61 6c 6c 79 0a 2a 2a 20 6a 75 73 74  s really.** just
8bd0: 20 61 6e 20 61 72 72 61 79 20 6f 66 20 69 6e 74   an array of int
8be0: 65 67 65 72 73 2e 0a 2a 2f 0a 74 79 70 65 64 65  egers..*/.typede
8bf0: 66 20 69 6e 74 20 56 4c 69 73 74 3b 0a 0a 2f 2a  f int VList;../*
8c00: 0a 2a 2a 20 44 65 66 65 72 20 73 6f 75 72 63 69  .** Defer sourci
8c10: 6e 67 20 76 64 62 65 2e 68 20 61 6e 64 20 62 74  ng vdbe.h and bt
8c20: 72 65 65 2e 68 20 75 6e 74 69 6c 20 61 66 74 65  ree.h until afte
8c30: 72 20 74 68 65 20 22 75 38 22 20 61 6e 64 0a 2a  r the "u8" and.*
8c40: 2a 20 22 42 75 73 79 48 61 6e 64 6c 65 72 22 20  * "BusyHandler" 
8c50: 74 79 70 65 64 65 66 73 2e 20 76 64 62 65 2e 68  typedefs. vdbe.h
8c60: 20 61 6c 73 6f 20 72 65 71 75 69 72 65 73 20 61   also requires a
8c70: 20 66 65 77 20 6f 66 20 74 68 65 20 6f 70 61 71   few of the opaq
8c80: 75 65 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 79  ue.** pointer ty
8c90: 70 65 73 20 28 69 2e 65 2e 20 46 75 6e 63 44 65  pes (i.e. FuncDe
8ca0: 66 29 20 64 65 66 69 6e 65 64 20 61 62 6f 76 65  f) defined above
8cb0: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 62  ..*/.#include "b
8cc0: 74 72 65 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65  tree.h".#include
8cd0: 20 22 76 64 62 65 2e 68 22 0a 23 69 6e 63 6c 75   "vdbe.h".#inclu
8ce0: 64 65 20 22 70 61 67 65 72 2e 68 22 0a 23 69 6e  de "pager.h".#in
8cf0: 63 6c 75 64 65 20 22 70 63 61 63 68 65 2e 68 22  clude "pcache.h"
8d00: 0a 23 69 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22  .#include "os.h"
8d10: 0a 23 69 6e 63 6c 75 64 65 20 22 6d 75 74 65 78  .#include "mutex
8d20: 2e 68 22 0a 0a 2f 2a 20 54 68 65 20 53 51 4c 49  .h"../* The SQLI
8d30: 54 45 5f 45 58 54 52 41 5f 44 55 52 41 42 4c 45  TE_EXTRA_DURABLE
8d40: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70   compile-time op
8d50: 74 69 6f 6e 20 75 73 65 64 20 74 6f 20 73 65 74  tion used to set
8d60: 20 74 68 65 20 64 65 66 61 75 6c 74 0a 2a 2a 20   the default.** 
8d70: 73 79 6e 63 68 72 6f 6e 6f 75 73 20 73 65 74 74  synchronous sett
8d80: 69 6e 67 20 74 6f 20 45 58 54 52 41 2e 20 20 49  ing to EXTRA.  I
8d90: 74 20 69 73 20 6e 6f 20 6c 6f 6e 67 65 72 20 73  t is no longer s
8da0: 75 70 70 6f 72 74 65 64 2e 0a 2a 2f 0a 23 69 66  upported..*/.#if
8db0: 64 65 66 20 53 51 4c 49 54 45 5f 45 58 54 52 41  def SQLITE_EXTRA
8dc0: 5f 44 55 52 41 42 4c 45 0a 23 20 77 61 72 6e 69  _DURABLE.# warni
8dd0: 6e 67 20 55 73 65 20 53 51 4c 49 54 45 5f 44 45  ng Use SQLITE_DE
8de0: 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55  FAULT_SYNCHRONOU
8df0: 53 3d 33 20 69 6e 73 74 65 61 64 20 6f 66 20 53  S=3 instead of S
8e00: 51 4c 49 54 45 5f 45 58 54 52 41 5f 44 55 52 41  QLITE_EXTRA_DURA
8e10: 42 4c 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  BLE.# define SQL
8e20: 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43  ITE_DEFAULT_SYNC
8e30: 48 52 4f 4e 4f 55 53 20 33 0a 23 65 6e 64 69 66  HRONOUS 3.#endif
8e40: 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20  ../*.** Default 
8e50: 73 79 6e 63 68 72 6f 6e 6f 75 73 20 6c 65 76 65  synchronous leve
8e60: 6c 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74  ls..**.** Note t
8e70: 68 61 74 20 28 66 6f 72 20 68 69 73 74 6f 72 63  hat (for historc
8e80: 61 6c 20 72 65 61 73 6f 6e 73 29 20 74 68 65 20  al reasons) the 
8e90: 50 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e 4f 55  PAGER_SYNCHRONOU
8ea0: 53 5f 2a 20 6d 61 63 72 6f 73 20 64 69 66 66 65  S_* macros diffe
8eb0: 72 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 53 51  r.** from the SQ
8ec0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e  LITE_DEFAULT_SYN
8ed0: 43 48 52 4f 4e 4f 55 53 20 76 61 6c 75 65 20 62  CHRONOUS value b
8ee0: 79 20 31 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20  y 1..**.**      
8ef0: 20 20 20 20 20 50 41 47 45 52 5f 53 59 4e 43 48       PAGER_SYNCH
8f00: 52 4f 4e 4f 55 53 20 20 20 20 20 20 20 44 45 46  RONOUS       DEF
8f10: 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53  AULT_SYNCHRONOUS
8f20: 0a 2a 2a 20 20 20 4f 46 46 20 20 20 20 20 20 20  .**   OFF       
8f30: 20 20 20 20 31 20 20 20 20 20 20 20 20 20 20 20      1           
8f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 0a                0.
8f50: 2a 2a 20 20 20 4e 4f 52 4d 41 4c 20 20 20 20 20  **   NORMAL     
8f60: 20 20 20 32 20 20 20 20 20 20 20 20 20 20 20 20     2            
8f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 31 0a 2a               1.*
8f80: 2a 20 20 20 46 55 4c 4c 20 20 20 20 20 20 20 20  *   FULL        
8f90: 20 20 33 20 20 20 20 20 20 20 20 20 20 20 20 20    3             
8fa0: 20 20 20 20 20 20 20 20 20 20 20 20 32 0a 2a 2a              2.**
8fb0: 20 20 20 45 58 54 52 41 20 20 20 20 20 20 20 20     EXTRA        
8fc0: 20 34 20 20 20 20 20 20 20 20 20 20 20 20 20 20   4              
8fd0: 20 20 20 20 20 20 20 20 20 20 20 33 0a 2a 2a 0a             3.**.
8fe0: 2a 2a 20 54 68 65 20 22 50 52 41 47 4d 41 20 73  ** The "PRAGMA s
8ff0: 79 6e 63 68 72 6f 6e 6f 75 73 22 20 73 74 61 74  ynchronous" stat
9000: 65 6d 65 6e 74 20 61 6c 73 6f 20 75 73 65 73 20  ement also uses 
9010: 74 68 65 20 7a 65 72 6f 2d 62 61 73 65 64 20 6e  the zero-based n
9020: 75 6d 62 65 72 73 2e 0a 2a 2a 20 49 6e 20 6f 74  umbers..** In ot
9030: 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 7a  her words, the z
9040: 65 72 6f 2d 62 61 73 65 64 20 6e 75 6d 62 65 72  ero-based number
9050: 73 20 61 72 65 20 75 73 65 64 20 66 6f 72 20 61  s are used for a
9060: 6c 6c 20 65 78 74 65 72 6e 61 6c 20 69 6e 74 65  ll external inte
9070: 72 66 61 63 65 73 0a 2a 2a 20 61 6e 64 20 74 68  rfaces.** and th
9080: 65 20 6f 6e 65 2d 62 61 73 65 64 20 76 61 6c 75  e one-based valu
9090: 65 73 20 61 72 65 20 75 73 65 64 20 69 6e 74 65  es are used inte
90a0: 72 6e 61 6c 6c 79 2e 0a 2a 2f 0a 23 69 66 6e 64  rnally..*/.#ifnd
90b0: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
90c0: 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 23 20  T_SYNCHRONOUS.# 
90d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
90e0: 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55  FAULT_SYNCHRONOU
90f0: 53 20 28 50 41 47 45 52 5f 53 59 4e 43 48 52 4f  S (PAGER_SYNCHRO
9100: 4e 4f 55 53 5f 46 55 4c 4c 2d 31 29 0a 23 65 6e  NOUS_FULL-1).#en
9110: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
9120: 54 45 5f 44 45 46 41 55 4c 54 5f 57 41 4c 5f 53  TE_DEFAULT_WAL_S
9130: 59 4e 43 48 52 4f 4e 4f 55 53 0a 23 20 64 65 66  YNCHRONOUS.# def
9140: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
9150: 4c 54 5f 57 41 4c 5f 53 59 4e 43 48 52 4f 4e 4f  LT_WAL_SYNCHRONO
9160: 55 53 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  US SQLITE_DEFAUL
9170: 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 23 65  T_SYNCHRONOUS.#e
9180: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  ndif../*.** Each
9190: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74   database file t
91a0: 6f 20 62 65 20 61 63 63 65 73 73 65 64 20 62 79  o be accessed by
91b0: 20 74 68 65 20 73 79 73 74 65 6d 20 69 73 20 61   the system is a
91c0: 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66  n instance.** of
91d0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
91e0: 74 72 75 63 74 75 72 65 2e 20 20 54 68 65 72 65  tructure.  There
91f0: 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 74 77   are normally tw
9200: 6f 20 6f 66 20 74 68 65 73 65 20 73 74 72 75 63  o of these struc
9210: 74 75 72 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20  tures.** in the 
9220: 73 71 6c 69 74 65 2e 61 44 62 5b 5d 20 61 72 72  sqlite.aDb[] arr
9230: 61 79 2e 20 20 61 44 62 5b 30 5d 20 69 73 20 74  ay.  aDb[0] is t
9240: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
9250: 20 66 69 6c 65 20 61 6e 64 0a 2a 2a 20 61 44 62   file and.** aDb
9260: 5b 31 5d 20 69 73 20 74 68 65 20 64 61 74 61 62  [1] is the datab
9270: 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f  ase file used to
9280: 20 68 6f 6c 64 20 74 65 6d 70 6f 72 61 72 79 20   hold temporary 
9290: 74 61 62 6c 65 73 2e 20 20 41 64 64 69 74 69 6f  tables.  Additio
92a0: 6e 61 6c 0a 2a 2a 20 64 61 74 61 62 61 73 65 73  nal.** databases
92b0: 20 6d 61 79 20 62 65 20 61 74 74 61 63 68 65 64   may be attached
92c0: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 44 62 20 7b  ..*/.struct Db {
92d0: 0a 20 20 63 68 61 72 20 2a 7a 44 62 53 4e 61 6d  .  char *zDbSNam
92e0: 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20  e;      /* Name 
92f0: 6f 66 20 74 68 69 73 20 64 61 74 61 62 61 73 65  of this database
9300: 2e 20 28 73 63 68 65 6d 61 20 6e 61 6d 65 2c 20  . (schema name, 
9310: 6e 6f 74 20 66 69 6c 65 6e 61 6d 65 29 20 2a 2f  not filename) */
9320: 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20  .  Btree *pBt;  
9330: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 42          /* The B
9340: 2a 54 72 65 65 20 73 74 72 75 63 74 75 72 65 20  *Tree structure 
9350: 66 6f 72 20 74 68 69 73 20 64 61 74 61 62 61 73  for this databas
9360: 65 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 73  e file */.  u8 s
9370: 61 66 65 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20  afety_level;    
9380: 20 2f 2a 20 48 6f 77 20 61 67 67 72 65 73 73 69   /* How aggressi
9390: 76 65 20 61 74 20 73 79 6e 63 69 6e 67 20 64 61  ve at syncing da
93a0: 74 61 20 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20  ta to disk */.  
93b0: 75 38 20 62 53 79 6e 63 53 65 74 3b 20 20 20 20  u8 bSyncSet;    
93c0: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
93d0: 22 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e  "PRAGMA synchron
93e0: 6f 75 73 3d 4e 22 20 68 61 73 20 62 65 65 6e 20  ous=N" has been 
93f0: 72 75 6e 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  run */.  Schema 
9400: 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a  *pSchema;     /*
9410: 20 50 6f 69 6e 74 65 72 20 74 6f 20 64 61 74 61   Pointer to data
9420: 62 61 73 65 20 73 63 68 65 6d 61 20 28 70 6f 73  base schema (pos
9430: 73 69 62 6c 79 20 73 68 61 72 65 64 29 20 2a 2f  sibly shared) */
9440: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  .};../*.** An in
9450: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
9460: 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
9470: 65 20 73 74 6f 72 65 73 20 61 20 64 61 74 61 62  e stores a datab
9480: 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a  ase schema..**.*
9490: 2a 20 4d 6f 73 74 20 53 63 68 65 6d 61 20 6f 62  * Most Schema ob
94a0: 6a 65 63 74 73 20 61 72 65 20 61 73 73 6f 63 69  jects are associ
94b0: 61 74 65 64 20 77 69 74 68 20 61 20 42 74 72 65  ated with a Btre
94c0: 65 2e 20 20 54 68 65 20 65 78 63 65 70 74 69 6f  e.  The exceptio
94d0: 6e 20 69 73 0a 2a 2a 20 74 68 65 20 53 63 68 65  n is.** the Sche
94e0: 6d 61 20 66 6f 72 20 74 68 65 20 54 45 4d 50 20  ma for the TEMP 
94f0: 64 61 74 61 62 61 65 73 20 28 73 71 6c 69 74 65  databaes (sqlite
9500: 33 2e 61 44 62 5b 31 5d 29 20 77 68 69 63 68 20  3.aDb[1]) which 
9510: 69 73 20 66 72 65 65 2d 73 74 61 6e 64 69 6e 67  is free-standing
9520: 2e 0a 2a 2a 20 49 6e 20 73 68 61 72 65 64 20 63  ..** In shared c
9530: 61 63 68 65 20 6d 6f 64 65 2c 20 61 20 73 69 6e  ache mode, a sin
9540: 67 6c 65 20 53 63 68 65 6d 61 20 6f 62 6a 65 63  gle Schema objec
9550: 74 20 63 61 6e 20 62 65 20 73 68 61 72 65 64 20  t can be shared 
9560: 62 79 20 6d 75 6c 74 69 70 6c 65 0a 2a 2a 20 42  by multiple.** B
9570: 74 72 65 65 73 20 74 68 61 74 20 72 65 66 65 72  trees that refer
9580: 20 74 6f 20 74 68 65 20 73 61 6d 65 20 75 6e 64   to the same und
9590: 65 72 6c 79 69 6e 67 20 42 74 53 68 61 72 65 64  erlying BtShared
95a0: 20 6f 62 6a 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 53   object..**.** S
95b0: 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 20 61 72  chema objects ar
95c0: 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  e automatically 
95d0: 64 65 61 6c 6c 6f 63 61 74 65 64 20 77 68 65 6e  deallocated when
95e0: 20 74 68 65 20 6c 61 73 74 20 42 74 72 65 65 20   the last Btree 
95f0: 74 68 61 74 0a 2a 2a 20 72 65 66 65 72 65 6e 63  that.** referenc
9600: 65 73 20 74 68 65 6d 20 69 73 20 64 65 73 74 72  es them is destr
9610: 6f 79 65 64 2e 20 20 20 54 68 65 20 54 45 4d 50  oyed.   The TEMP
9620: 20 53 63 68 65 6d 61 20 69 73 20 6d 61 6e 75 61   Schema is manua
9630: 6c 6c 79 20 66 72 65 65 64 20 62 79 0a 2a 2a 20  lly freed by.** 
9640: 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 29 2e  sqlite3_close().
9650: 0a 2a 0a 2a 2a 20 41 20 74 68 72 65 61 64 20 6d  .*.** A thread m
9660: 75 73 74 20 62 65 20 68 6f 6c 64 69 6e 67 20 61  ust be holding a
9670: 20 6d 75 74 65 78 20 6f 6e 20 74 68 65 20 63 6f   mutex on the co
9680: 72 72 65 73 70 6f 6e 64 69 6e 67 20 42 74 72 65  rresponding Btre
9690: 65 20 69 6e 20 6f 72 64 65 72 0a 2a 2a 20 74 6f  e in order.** to
96a0: 20 61 63 63 65 73 73 20 53 63 68 65 6d 61 20 63   access Schema c
96b0: 6f 6e 74 65 6e 74 2e 20 20 54 68 69 73 20 69 6d  ontent.  This im
96c0: 70 6c 69 65 73 20 74 68 61 74 20 74 68 65 20 74  plies that the t
96d0: 68 72 65 61 64 20 6d 75 73 74 20 61 6c 73 6f 20  hread must also 
96e0: 62 65 0a 2a 2a 20 68 6f 6c 64 69 6e 67 20 61 20  be.** holding a 
96f0: 6d 75 74 65 78 20 6f 6e 20 74 68 65 20 73 71 6c  mutex on the sql
9700: 69 74 65 33 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  ite3 connection 
9710: 70 6f 69 6e 74 65 72 20 74 68 61 74 20 6f 77 6e  pointer that own
9720: 73 20 74 68 65 20 42 74 72 65 65 2e 0a 2a 2a 20  s the Btree..** 
9730: 46 6f 72 20 61 20 54 45 4d 50 20 53 63 68 65 6d  For a TEMP Schem
9740: 61 2c 20 6f 6e 6c 79 20 74 68 65 20 63 6f 6e 6e  a, only the conn
9750: 65 63 74 69 6f 6e 20 6d 75 74 65 78 20 69 73 20  ection mutex is 
9760: 72 65 71 75 69 72 65 64 2e 0a 2a 2f 0a 73 74 72  required..*/.str
9770: 75 63 74 20 53 63 68 65 6d 61 20 7b 0a 20 20 69  uct Schema {.  i
9780: 6e 74 20 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65  nt schema_cookie
9790: 3b 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20  ;   /* Database 
97a0: 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 6e  schema version n
97b0: 75 6d 62 65 72 20 66 6f 72 20 74 68 69 73 20 66  umber for this f
97c0: 69 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 69 47 65  ile */.  int iGe
97d0: 6e 65 72 61 74 69 6f 6e 3b 20 20 20 20 20 2f 2a  neration;     /*
97e0: 20 47 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e   Generation coun
97f0: 74 65 72 2e 20 20 49 6e 63 72 65 6d 65 6e 74 65  ter.  Incremente
9800: 64 20 77 69 74 68 20 65 61 63 68 20 63 68 61 6e  d with each chan
9810: 67 65 20 2a 2f 0a 20 20 48 61 73 68 20 74 62 6c  ge */.  Hash tbl
9820: 48 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20  Hash;        /* 
9830: 41 6c 6c 20 74 61 62 6c 65 73 20 69 6e 64 65 78  All tables index
9840: 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20  ed by name */.  
9850: 48 61 73 68 20 69 64 78 48 61 73 68 3b 20 20 20  Hash idxHash;   
9860: 20 20 20 20 20 2f 2a 20 41 6c 6c 20 28 6e 61 6d       /* All (nam
9870: 65 64 29 20 69 6e 64 69 63 65 73 20 69 6e 64 65  ed) indices inde
9880: 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20  xed by name */. 
9890: 20 48 61 73 68 20 74 72 69 67 48 61 73 68 3b 20   Hash trigHash; 
98a0: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74 72 69        /* All tri
98b0: 67 67 65 72 73 20 69 6e 64 65 78 65 64 20 62 79  ggers indexed by
98c0: 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20   name */.  Hash 
98d0: 66 6b 65 79 48 61 73 68 3b 20 20 20 20 20 20 20  fkeyHash;       
98e0: 2f 2a 20 41 6c 6c 20 66 6f 72 65 69 67 6e 20 6b  /* All foreign k
98f0: 65 79 73 20 62 79 20 72 65 66 65 72 65 6e 63 65  eys by reference
9900: 64 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a  d table name */.
9910: 20 20 54 61 62 6c 65 20 2a 70 53 65 71 54 61 62    Table *pSeqTab
9920: 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73 71  ;      /* The sq
9930: 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61  lite_sequence ta
9940: 62 6c 65 20 75 73 65 64 20 62 79 20 41 55 54 4f  ble used by AUTO
9950: 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 75  INCREMENT */.  u
9960: 38 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20  8 file_format;  
9970: 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 66 6f      /* Schema fo
9980: 72 6d 61 74 20 76 65 72 73 69 6f 6e 20 66 6f 72  rmat version for
9990: 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20   this file */.  
99a0: 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20  u8 enc;         
99b0: 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63       /* Text enc
99c0: 6f 64 69 6e 67 20 75 73 65 64 20 62 79 20 74 68  oding used by th
99d0: 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20  is database */. 
99e0: 20 75 31 36 20 73 63 68 65 6d 61 46 6c 61 67 73   u16 schemaFlags
99f0: 3b 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 61  ;     /* Flags a
9a00: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
9a10: 68 69 73 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20  his schema */.  
9a20: 69 6e 74 20 63 61 63 68 65 5f 73 69 7a 65 3b 20  int cache_size; 
9a30: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
9a40: 66 20 70 61 67 65 73 20 74 6f 20 75 73 65 20 69  f pages to use i
9a50: 6e 20 74 68 65 20 63 61 63 68 65 20 2a 2f 0a 7d  n the cache */.}
9a60: 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d  ;../*.** These m
9a70: 61 63 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65  acros can be use
9a80: 64 20 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20  d to test, set, 
9a90: 6f 72 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e  or clear bits in
9aa0: 20 74 68 65 0a 2a 2a 20 44 62 2e 70 53 63 68 65   the.** Db.pSche
9ab0: 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e  ma->flags field.
9ac0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 62 48 61  .*/.#define DbHa
9ad0: 73 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29  sProperty(D,I,P)
9ae0: 20 20 20 20 20 28 28 28 44 29 2d 3e 61 44 62 5b       (((D)->aDb[
9af0: 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65  I].pSchema->sche
9b00: 6d 61 46 6c 61 67 73 26 28 50 29 29 3d 3d 28 50  maFlags&(P))==(P
9b10: 29 29 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73  )).#define DbHas
9b20: 41 6e 79 50 72 6f 70 65 72 74 79 28 44 2c 49 2c  AnyProperty(D,I,
9b30: 50 29 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49  P)  (((D)->aDb[I
9b40: 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d  ].pSchema->schem
9b50: 61 46 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a  aFlags&(P))!=0).
9b60: 23 64 65 66 69 6e 65 20 44 62 53 65 74 50 72 6f  #define DbSetPro
9b70: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20  perty(D,I,P)    
9b80: 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63   (D)->aDb[I].pSc
9b90: 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67  hema->schemaFlag
9ba0: 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65 20 44  s|=(P).#define D
9bb0: 62 43 6c 65 61 72 50 72 6f 70 65 72 74 79 28 44  bClearProperty(D
9bc0: 2c 49 2c 50 29 20 20 20 28 44 29 2d 3e 61 44 62  ,I,P)   (D)->aDb
9bd0: 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68  [I].pSchema->sch
9be0: 65 6d 61 46 6c 61 67 73 26 3d 7e 28 50 29 0a 0a  emaFlags&=~(P)..
9bf0: 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
9c00: 6c 75 65 73 20 66 6f 72 20 74 68 65 20 44 42 2e  lues for the DB.
9c10: 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66  pSchema->flags f
9c20: 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ield..**.** The 
9c30: 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20  DB_SchemaLoaded 
9c40: 66 6c 61 67 20 69 73 20 73 65 74 20 61 66 74 65  flag is set afte
9c50: 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  r the database s
9c60: 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e 0a 2a  chema has been.*
9c70: 2a 20 72 65 61 64 20 69 6e 74 6f 20 69 6e 74 65  * read into inte
9c80: 72 6e 61 6c 20 68 61 73 68 20 74 61 62 6c 65 73  rnal hash tables
9c90: 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55 6e 72 65 73  ..**.** DB_Unres
9ca0: 65 74 56 69 65 77 73 20 6d 65 61 6e 73 20 74 68  etViews means th
9cb0: 61 74 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 76  at one or more v
9cc0: 69 65 77 73 20 68 61 76 65 20 63 6f 6c 75 6d 6e  iews have column
9cd0: 20 6e 61 6d 65 73 20 74 68 61 74 0a 2a 2a 20 68   names that.** h
9ce0: 61 76 65 20 62 65 65 6e 20 66 69 6c 6c 65 64 20  ave been filled 
9cf0: 6f 75 74 2e 20 20 49 66 20 74 68 65 20 73 63 68  out.  If the sch
9d00: 65 6d 61 20 63 68 61 6e 67 65 73 2c 20 74 68 65  ema changes, the
9d10: 73 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  se column names 
9d20: 6d 69 67 68 74 0a 2a 2a 20 63 68 61 6e 67 65 73  might.** changes
9d30: 20 61 6e 64 20 73 6f 20 74 68 65 20 76 69 65 77   and so the view
9d40: 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62 65   will need to be
9d50: 20 72 65 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69   reset..*/.#defi
9d60: 6e 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64  ne DB_SchemaLoad
9d70: 65 64 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a  ed    0x0001  /*
9d80: 20 54 68 65 20 73 63 68 65 6d 61 20 68 61 73 20   The schema has 
9d90: 62 65 65 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a 23  been loaded */.#
9da0: 64 65 66 69 6e 65 20 44 42 5f 55 6e 72 65 73 65  define DB_Unrese
9db0: 74 56 69 65 77 73 20 20 20 20 30 78 30 30 30 32  tViews    0x0002
9dc0: 20 20 2f 2a 20 53 6f 6d 65 20 76 69 65 77 73 20    /* Some views 
9dd0: 68 61 76 65 20 64 65 66 69 6e 65 64 20 63 6f 6c  have defined col
9de0: 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65  umn names */.#de
9df0: 66 69 6e 65 20 44 42 5f 45 6d 70 74 79 20 20 20  fine DB_Empty   
9e00: 20 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20          0x0004  
9e10: 2f 2a 20 54 68 65 20 66 69 6c 65 20 69 73 20 65  /* The file is e
9e20: 6d 70 74 79 20 28 6c 65 6e 67 74 68 20 30 20 62  mpty (length 0 b
9e30: 79 74 65 73 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  ytes) */../*.** 
9e40: 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 69  The number of di
9e50: 66 66 65 72 65 6e 74 20 6b 69 6e 64 73 20 6f 66  fferent kinds of
9e60: 20 74 68 69 6e 67 73 20 74 68 61 74 20 63 61 6e   things that can
9e70: 20 62 65 20 6c 69 6d 69 74 65 64 0a 2a 2a 20 75   be limited.** u
9e80: 73 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33  sing the sqlite3
9e90: 5f 6c 69 6d 69 74 28 29 20 69 6e 74 65 72 66 61  _limit() interfa
9ea0: 63 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ce..*/.#define S
9eb0: 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 20 28 53  QLITE_N_LIMIT (S
9ec0: 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57 4f 52 4b  QLITE_LIMIT_WORK
9ed0: 45 52 5f 54 48 52 45 41 44 53 2b 31 29 0a 0a 2f  ER_THREADS+1)../
9ee0: 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d  *.** Lookaside m
9ef0: 61 6c 6c 6f 63 20 69 73 20 61 20 73 65 74 20 6f  alloc is a set o
9f00: 66 20 66 69 78 65 64 2d 73 69 7a 65 20 62 75 66  f fixed-size buf
9f10: 66 65 72 73 20 74 68 61 74 20 63 61 6e 20 62 65  fers that can be
9f20: 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61 74 69   used.** to sati
9f30: 73 66 79 20 73 6d 61 6c 6c 20 74 72 61 6e 73 69  sfy small transi
9f40: 65 6e 74 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ent memory alloc
9f50: 61 74 69 6f 6e 20 72 65 71 75 65 73 74 73 20 66  ation requests f
9f60: 6f 72 20 6f 62 6a 65 63 74 73 0a 2a 2a 20 61 73  or objects.** as
9f70: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20  sociated with a 
9f80: 70 61 72 74 69 63 75 6c 61 72 20 64 61 74 61 62  particular datab
9f90: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20  ase connection. 
9fa0: 20 54 68 65 20 75 73 65 20 6f 66 0a 2a 2a 20 6c   The use of.** l
9fb0: 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20  ookaside malloc 
9fc0: 70 72 6f 76 69 64 65 73 20 61 20 73 69 67 6e 69  provides a signi
9fd0: 66 69 63 61 6e 74 20 70 65 72 66 6f 72 6d 61 6e  ficant performan
9fe0: 63 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74 0a 2a  ce enhancement.*
9ff0: 2a 20 28 61 70 70 72 6f 78 20 31 30 25 29 20 62  * (approx 10%) b
a000: 79 20 61 76 6f 69 64 69 6e 67 20 6e 75 6d 65 72  y avoiding numer
a010: 6f 75 73 20 6d 61 6c 6c 6f 63 2f 66 72 65 65 20  ous malloc/free 
a020: 72 65 71 75 65 73 74 73 20 77 68 69 6c 65 20 70  requests while p
a030: 61 72 73 69 6e 67 0a 2a 2a 20 53 51 4c 20 73 74  arsing.** SQL st
a040: 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20  atements..**.** 
a050: 54 68 65 20 4c 6f 6f 6b 61 73 69 64 65 20 73 74  The Lookaside st
a060: 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 63 6f  ructure holds co
a070: 6e 66 69 67 75 72 61 74 69 6f 6e 20 69 6e 66 6f  nfiguration info
a080: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68  rmation about th
a090: 65 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d  e.** lookaside m
a0a0: 61 6c 6c 6f 63 20 73 75 62 73 79 73 74 65 6d 2e  alloc subsystem.
a0b0: 20 20 45 61 63 68 20 61 76 61 69 6c 61 62 6c 65    Each available
a0c0: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
a0d0: 6f 6e 20 69 6e 0a 2a 2a 20 74 68 65 20 6c 6f 6f  on in.** the loo
a0e0: 6b 61 73 69 64 65 20 73 75 62 73 79 73 74 65 6d  kaside subsystem
a0f0: 20 69 73 20 73 74 6f 72 65 64 20 6f 6e 20 61 20   is stored on a 
a100: 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 4c  linked list of L
a110: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 0a 2a 2a 20  ookasideSlot.** 
a120: 6f 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c  objects..**.** L
a130: 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74  ookaside allocat
a140: 69 6f 6e 73 20 61 72 65 20 6f 6e 6c 79 20 61 6c  ions are only al
a150: 6c 6f 77 65 64 20 66 6f 72 20 6f 62 6a 65 63 74  lowed for object
a160: 73 20 74 68 61 74 20 61 72 65 20 61 73 73 6f 63  s that are assoc
a170: 69 61 74 65 64 0a 2a 2a 20 77 69 74 68 20 61 20  iated.** with a 
a180: 70 61 72 74 69 63 75 6c 61 72 20 64 61 74 61 62  particular datab
a190: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20  ase connection. 
a1a0: 20 48 65 6e 63 65 2c 20 73 63 68 65 6d 61 20 69   Hence, schema i
a1b0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 61 6e 6e 6f  nformation canno
a1c0: 74 0a 2a 2a 20 62 65 20 73 74 6f 72 65 64 20 69  t.** be stored i
a1d0: 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 62 65 63 61  n lookaside beca
a1e0: 75 73 65 20 69 6e 20 73 68 61 72 65 64 20 63 61  use in shared ca
a1f0: 63 68 65 20 6d 6f 64 65 20 74 68 65 20 73 63 68  che mode the sch
a200: 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  ema information.
a210: 2a 2a 20 69 73 20 73 68 61 72 65 64 20 62 79 20  ** is shared by 
a220: 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73  multiple databas
a230: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 20 20  e connections.  
a240: 54 68 65 72 65 66 6f 72 65 2c 20 77 68 69 6c 65  Therefore, while
a250: 20 70 61 72 73 69 6e 67 0a 2a 2a 20 73 63 68 65   parsing.** sche
a260: 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20  ma information, 
a270: 74 68 65 20 4c 6f 6f 6b 61 73 69 64 65 2e 62 45  the Lookaside.bE
a280: 6e 61 62 6c 65 64 20 66 6c 61 67 20 69 73 20 63  nabled flag is c
a290: 6c 65 61 72 65 64 20 73 6f 20 74 68 61 74 0a 2a  leared so that.*
a2a0: 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f  * lookaside allo
a2b0: 63 61 74 69 6f 6e 73 20 61 72 65 20 6e 6f 74 20  cations are not 
a2c0: 75 73 65 64 20 74 6f 20 63 6f 6e 73 74 72 75 63  used to construc
a2d0: 74 20 74 68 65 20 73 63 68 65 6d 61 20 6f 62 6a  t the schema obj
a2e0: 65 63 74 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ects..*/.struct 
a2f0: 4c 6f 6f 6b 61 73 69 64 65 20 7b 0a 20 20 75 33  Lookaside {.  u3
a300: 32 20 62 44 69 73 61 62 6c 65 3b 20 20 20 20 20  2 bDisable;     
a310: 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 6f 70        /* Only op
a320: 65 72 61 74 65 20 74 68 65 20 6c 6f 6f 6b 61 73  erate the lookas
a330: 69 64 65 20 77 68 65 6e 20 7a 65 72 6f 20 2a 2f  ide when zero */
a340: 0a 20 20 75 31 36 20 73 7a 3b 20 20 20 20 20 20  .  u16 sz;      
a350: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69             /* Si
a360: 7a 65 20 6f 66 20 65 61 63 68 20 62 75 66 66 65  ze of each buffe
a370: 72 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20  r in bytes */.  
a380: 75 38 20 62 4d 61 6c 6c 6f 63 65 64 3b 20 20 20  u8 bMalloced;   
a390: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
a3a0: 69 66 20 70 53 74 61 72 74 20 6f 62 74 61 69 6e  if pStart obtain
a3b0: 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f  ed from sqlite3_
a3c0: 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 20 20 69 6e  malloc() */.  in
a3d0: 74 20 6e 4f 75 74 3b 20 20 20 20 20 20 20 20 20  t nOut;         
a3e0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
a3f0: 6f 66 20 62 75 66 66 65 72 73 20 63 75 72 72 65  of buffers curre
a400: 6e 74 6c 79 20 63 68 65 63 6b 65 64 20 6f 75 74  ntly checked out
a410: 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 4f 75 74 3b   */.  int mxOut;
a420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a430: 20 48 69 67 68 77 61 74 65 72 20 6d 61 72 6b 20   Highwater mark 
a440: 66 6f 72 20 6e 4f 75 74 20 2a 2f 0a 20 20 69 6e  for nOut */.  in
a450: 74 20 61 6e 53 74 61 74 5b 33 5d 3b 20 20 20 20  t anStat[3];    
a460: 20 20 20 20 20 20 2f 2a 20 30 3a 20 68 69 74 73        /* 0: hits
a470: 2e 20 20 31 3a 20 73 69 7a 65 20 6d 69 73 73 65  .  1: size misse
a480: 73 2e 20 20 32 3a 20 66 75 6c 6c 20 6d 69 73 73  s.  2: full miss
a490: 65 73 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64  es */.  Lookasid
a4a0: 65 53 6c 6f 74 20 2a 70 46 72 65 65 3b 20 20 20  eSlot *pFree;   
a4b0: 2f 2a 20 4c 69 73 74 20 6f 66 20 61 76 61 69 6c  /* List of avail
a4c0: 61 62 6c 65 20 62 75 66 66 65 72 73 20 2a 2f 0a  able buffers */.
a4d0: 20 20 76 6f 69 64 20 2a 70 53 74 61 72 74 3b 20    void *pStart; 
a4e0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
a4f0: 73 74 20 62 79 74 65 20 6f 66 20 61 76 61 69 6c  st byte of avail
a500: 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 70 61 63  able memory spac
a510: 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 45 6e  e */.  void *pEn
a520: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  d;             /
a530: 2a 20 46 69 72 73 74 20 62 79 74 65 20 70 61 73  * First byte pas
a540: 74 20 65 6e 64 20 6f 66 20 61 76 61 69 6c 61 62  t end of availab
a550: 6c 65 20 73 70 61 63 65 20 2a 2f 0a 7d 3b 0a 73  le space */.};.s
a560: 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53  truct LookasideS
a570: 6c 6f 74 20 7b 0a 20 20 4c 6f 6f 6b 61 73 69 64  lot {.  Lookasid
a580: 65 53 6c 6f 74 20 2a 70 4e 65 78 74 3b 20 20 20  eSlot *pNext;   
a590: 20 2f 2a 20 4e 65 78 74 20 62 75 66 66 65 72 20   /* Next buffer 
a5a0: 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 20 66  in the list of f
a5b0: 72 65 65 20 62 75 66 66 65 72 73 20 2a 2f 0a 7d  ree buffers */.}
a5c0: 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 68 61 73 68 20  ;../*.** A hash 
a5d0: 74 61 62 6c 65 20 66 6f 72 20 62 75 69 6c 74 2d  table for built-
a5e0: 69 6e 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69  in function defi
a5f0: 6e 69 74 69 6f 6e 73 2e 20 20 28 41 70 70 6c 69  nitions.  (Appli
a600: 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 0a 2a  cation-defined.*
a610: 2a 20 66 75 6e 63 74 69 6f 6e 73 20 75 73 65 20  * functions use 
a620: 61 20 72 65 67 75 6c 61 72 20 74 61 62 6c 65 20  a regular table 
a630: 74 61 62 6c 65 20 66 72 6f 6d 20 68 61 73 68 2e  table from hash.
a640: 68 2e 29 0a 2a 2a 0a 2a 2a 20 48 61 73 68 20 65  h.).**.** Hash e
a650: 61 63 68 20 46 75 6e 63 44 65 66 20 73 74 72 75  ach FuncDef stru
a660: 63 74 75 72 65 20 69 6e 74 6f 20 6f 6e 65 20 6f  cture into one o
a670: 66 20 74 68 65 20 46 75 6e 63 44 65 66 48 61 73  f the FuncDefHas
a680: 68 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a 2a 20  h.a[] slots..** 
a690: 43 6f 6c 6c 69 73 69 6f 6e 73 20 61 72 65 20 6f  Collisions are o
a6a0: 6e 20 74 68 65 20 46 75 6e 63 44 65 66 2e 75 2e  n the FuncDef.u.
a6b0: 70 48 61 73 68 20 63 68 61 69 6e 2e 0a 2a 2f 0a  pHash chain..*/.
a6c0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
a6d0: 55 4e 43 5f 48 41 53 48 5f 53 5a 20 32 33 0a 73  UNC_HASH_SZ 23.s
a6e0: 74 72 75 63 74 20 46 75 6e 63 44 65 66 48 61 73  truct FuncDefHas
a6f0: 68 20 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a 61  h {.  FuncDef *a
a700: 5b 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53  [SQLITE_FUNC_HAS
a710: 48 5f 53 5a 5d 3b 20 20 20 20 20 20 20 2f 2a 20  H_SZ];       /* 
a720: 48 61 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66  Hash table for f
a730: 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a  unctions */.};..
a740: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53  #ifdef SQLITE_US
a750: 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f  ER_AUTHENTICATIO
a760: 4e 0a 2f 2a 0a 2a 2a 20 49 6e 66 6f 72 6d 61 74  N./*.** Informat
a770: 69 6f 6e 20 68 65 6c 64 20 69 6e 20 74 68 65 20  ion held in the 
a780: 22 73 71 6c 69 74 65 33 22 20 64 61 74 61 62 61  "sqlite3" databa
a790: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62  se connection ob
a7a0: 6a 65 63 74 20 61 6e 64 20 75 73 65 64 0a 2a 2a  ject and used.**
a7b0: 20 74 6f 20 6d 61 6e 61 67 65 20 75 73 65 72 20   to manage user 
a7c0: 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 2e 0a  authentication..
a7d0: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
a7e0: 74 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75  t sqlite3_userau
a7f0: 74 68 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61  th sqlite3_usera
a800: 75 74 68 3b 0a 73 74 72 75 63 74 20 73 71 6c 69  uth;.struct sqli
a810: 74 65 33 5f 75 73 65 72 61 75 74 68 20 7b 0a 20  te3_userauth {. 
a820: 20 75 38 20 61 75 74 68 4c 65 76 65 6c 3b 20 20   u8 authLevel;  
a830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
a840: 2a 20 43 75 72 72 65 6e 74 20 61 75 74 68 65 6e  * Current authen
a850: 74 69 63 61 74 69 6f 6e 20 6c 65 76 65 6c 20 2a  tication level *
a860: 2f 0a 20 20 69 6e 74 20 6e 41 75 74 68 50 57 3b  /.  int nAuthPW;
a870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a880: 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65    /* Size of the
a890: 20 7a 41 75 74 68 50 57 20 69 6e 20 62 79 74 65   zAuthPW in byte
a8a0: 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75  s */.  char *zAu
a8b0: 74 68 50 57 3b 20 20 20 20 20 20 20 20 20 20 20  thPW;           
a8c0: 20 20 20 20 20 2f 2a 20 50 61 73 73 77 6f 72 64       /* Password
a8d0: 20 75 73 65 64 20 74 6f 20 61 75 74 68 65 6e 74   used to authent
a8e0: 69 63 61 74 65 20 2a 2f 0a 20 20 63 68 61 72 20  icate */.  char 
a8f0: 2a 7a 41 75 74 68 55 73 65 72 3b 20 20 20 20 20  *zAuthUser;     
a900: 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 72           /* User
a910: 20 6e 61 6d 65 20 75 73 65 64 20 74 6f 20 61 75   name used to au
a920: 74 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a 7d 3b  thenticate */.};
a930: 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  ../* Allowed val
a940: 75 65 73 20 66 6f 72 20 73 71 6c 69 74 65 33 5f  ues for sqlite3_
a950: 75 73 65 72 61 75 74 68 2e 61 75 74 68 4c 65 76  userauth.authLev
a960: 65 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41  el */.#define UA
a970: 55 54 48 5f 55 6e 6b 6e 6f 77 6e 20 20 20 20 20  UTH_Unknown     
a980: 30 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74  0     /* Authent
a990: 69 63 61 74 69 6f 6e 20 6e 6f 74 20 79 65 74 20  ication not yet 
a9a0: 63 68 65 63 6b 65 64 20 2a 2f 0a 23 64 65 66 69  checked */.#defi
a9b0: 6e 65 20 55 41 55 54 48 5f 46 61 69 6c 20 20 20  ne UAUTH_Fail   
a9c0: 20 20 20 20 20 31 20 20 20 20 20 2f 2a 20 55 73       1     /* Us
a9d0: 65 72 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f  er authenticatio
a9e0: 6e 20 66 61 69 6c 65 64 20 2a 2f 0a 23 64 65 66  n failed */.#def
a9f0: 69 6e 65 20 55 41 55 54 48 5f 55 73 65 72 20 20  ine UAUTH_User  
aa00: 20 20 20 20 20 20 32 20 20 20 20 20 2f 2a 20 41        2     /* A
aa10: 75 74 68 65 6e 74 69 63 61 74 65 64 20 61 73 20  uthenticated as 
aa20: 61 20 6e 6f 72 6d 61 6c 20 75 73 65 72 20 2a 2f  a normal user */
aa30: 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 41  .#define UAUTH_A
aa40: 64 6d 69 6e 20 20 20 20 20 20 20 33 20 20 20 20  dmin       3    
aa50: 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65   /* Authenticate
aa60: 64 20 61 73 20 61 6e 20 61 64 6d 69 6e 69 73 74  d as an administ
aa70: 72 61 74 6f 72 20 2a 2f 0a 0a 2f 2a 20 46 75 6e  rator */../* Fun
aa80: 63 74 69 6f 6e 73 20 75 73 65 64 20 6f 6e 6c 79  ctions used only
aa90: 20 62 79 20 75 73 65 72 20 61 75 74 68 6f 72 69   by user authori
aaa0: 7a 61 74 69 6f 6e 20 6c 6f 67 69 63 20 2a 2f 0a  zation logic */.
aab0: 69 6e 74 20 73 71 6c 69 74 65 33 55 73 65 72 41  int sqlite3UserA
aac0: 75 74 68 54 61 62 6c 65 28 63 6f 6e 73 74 20 63  uthTable(const c
aad0: 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  har*);.int sqlit
aae0: 65 33 55 73 65 72 41 75 74 68 43 68 65 63 6b 4c  e3UserAuthCheckL
aaf0: 6f 67 69 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f  ogin(sqlite3*,co
ab00: 6e 73 74 20 63 68 61 72 2a 2c 75 38 2a 29 3b 0a  nst char*,u8*);.
ab10: 76 6f 69 64 20 73 71 6c 69 74 65 33 55 73 65 72  void sqlite3User
ab20: 41 75 74 68 49 6e 69 74 28 73 71 6c 69 74 65 33  AuthInit(sqlite3
ab30: 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
ab40: 43 72 79 70 74 46 75 6e 63 28 73 71 6c 69 74 65  CryptFunc(sqlite
ab50: 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
ab60: 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b  qlite3_value**);
ab70: 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ..#endif /* SQLI
ab80: 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49  TE_USER_AUTHENTI
ab90: 43 41 54 49 4f 4e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  CATION */../*.**
aba0: 20 74 79 70 65 64 65 66 20 66 6f 72 20 74 68 65   typedef for the
abb0: 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 63   authorization c
abc0: 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e  allback function
abd0: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
abe0: 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49  TE_USER_AUTHENTI
abf0: 43 41 54 49 4f 4e 0a 20 20 74 79 70 65 64 65 66  CATION.  typedef
ac00: 20 69 6e 74 20 28 2a 73 71 6c 69 74 65 33 5f 78   int (*sqlite3_x
ac10: 61 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  auth)(void*,int,
ac20: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
ac30: 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
ac40: 61 72 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ar*,.           
ac50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac60: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c      const char*,
ac70: 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23   const char*);.#
ac80: 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20 69  else.  typedef i
ac90: 6e 74 20 28 2a 73 71 6c 69 74 65 33 5f 78 61 75  nt (*sqlite3_xau
aca0: 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f  th)(void*,int,co
acb0: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
acc0: 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
acd0: 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
ace0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
acf0: 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a    const char*);.
ad00: 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
ad10: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52  SQLITE_OMIT_DEPR
ad20: 45 43 41 54 45 44 0a 2f 2a 20 54 68 69 73 20 69  ECATED./* This i
ad30: 73 20 61 6e 20 65 78 74 72 61 20 53 51 4c 49 54  s an extra SQLIT
ad40: 45 5f 54 52 41 43 45 20 6d 61 63 72 6f 20 74 68  E_TRACE macro th
ad50: 61 74 20 69 6e 64 69 63 61 74 65 73 20 22 6c 65  at indicates "le
ad60: 67 61 63 79 22 20 74 72 61 63 69 6e 67 0a 2a 2a  gacy" tracing.**
ad70: 20 69 6e 20 74 68 65 20 73 74 79 6c 65 20 6f 66   in the style of
ad80: 20 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28 29   sqlite3_trace()
ad90: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
ada0: 54 45 5f 54 52 41 43 45 5f 4c 45 47 41 43 59 20  TE_TRACE_LEGACY 
adb0: 20 30 78 38 30 0a 23 65 6c 73 65 0a 23 64 65 66   0x80.#else.#def
adc0: 69 6e 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45  ine SQLITE_TRACE
add0: 5f 4c 45 47 41 43 59 20 20 30 0a 23 65 6e 64 69  _LEGACY  0.#endi
ade0: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
adf0: 5f 44 45 50 52 45 43 41 54 45 44 20 2a 2f 0a 0a  _DEPRECATED */..
ae00: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61  ./*.** Each data
ae10: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
ae20: 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  is an instance o
ae30: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
ae40: 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74  structure..*/.st
ae50: 72 75 63 74 20 73 71 6c 69 74 65 33 20 7b 0a 20  ruct sqlite3 {. 
ae60: 20 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 56   sqlite3_vfs *pV
ae70: 66 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  fs;            /
ae80: 2a 20 4f 53 20 49 6e 74 65 72 66 61 63 65 20 2a  * OS Interface *
ae90: 2f 0a 20 20 73 74 72 75 63 74 20 56 64 62 65 20  /.  struct Vdbe 
aea0: 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20  *pVdbe;         
aeb0: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74    /* List of act
aec0: 69 76 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68  ive virtual mach
aed0: 69 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65  ines */.  CollSe
aee0: 71 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20  q *pDfltColl;   
aef0: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64          /* The d
af00: 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67  efault collating
af10: 20 73 65 71 75 65 6e 63 65 20 28 42 49 4e 41 52   sequence (BINAR
af20: 59 29 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  Y) */.  sqlite3_
af30: 6d 75 74 65 78 20 2a 6d 75 74 65 78 3b 20 20 20  mutex *mutex;   
af40: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74        /* Connect
af50: 69 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44  ion mutex */.  D
af60: 62 20 2a 61 44 62 3b 20 20 20 20 20 20 20 20 20  b *aDb;         
af70: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
af80: 41 6c 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a  All backends */.
af90: 20 20 69 6e 74 20 6e 44 62 3b 20 20 20 20 20 20    int nDb;      
afa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
afb0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 61 63  /* Number of bac
afc0: 6b 65 6e 64 73 20 63 75 72 72 65 6e 74 6c 79 20  kends currently 
afd0: 69 6e 20 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20  in use */.  int 
afe0: 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  flags;          
aff0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 73            /* Mis
b000: 63 65 6c 6c 61 6e 65 6f 75 73 20 66 6c 61 67 73  cellaneous flags
b010: 2e 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20  . See below */. 
b020: 20 69 36 34 20 6c 61 73 74 52 6f 77 69 64 3b 20   i64 lastRowid; 
b030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b040: 2a 20 52 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20  * ROWID of most 
b050: 72 65 63 65 6e 74 20 69 6e 73 65 72 74 20 28 73  recent insert (s
b060: 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69  ee above) */.  i
b070: 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20  64 szMmap;      
b080: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b090: 44 65 66 61 75 6c 74 20 6d 6d 61 70 5f 73 69 7a  Default mmap_siz
b0a0: 65 20 73 65 74 74 69 6e 67 20 2a 2f 0a 20 20 75  e setting */.  u
b0b0: 6e 73 69 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e  nsigned int open
b0c0: 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20  Flags;       /* 
b0d0: 46 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20  Flags passed to 
b0e0: 73 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70 65  sqlite3_vfs.xOpe
b0f0: 6e 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72  n() */.  int err
b100: 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  Code;           
b110: 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72         /* Most r
b120: 65 63 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65  ecent error code
b130: 20 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20   (SQLITE_*) */. 
b140: 20 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20 20   int errMask;   
b150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b160: 2a 20 26 20 72 65 73 75 6c 74 20 63 6f 64 65 73  * & result codes
b170: 20 77 69 74 68 20 74 68 69 73 20 62 65 66 6f 72   with this befor
b180: 65 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20  e returning */. 
b190: 20 69 6e 74 20 69 53 79 73 45 72 72 6e 6f 3b 20   int iSysErrno; 
b1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b1b0: 2a 20 45 72 72 6e 6f 20 76 61 6c 75 65 20 66 72  * Errno value fr
b1c0: 6f 6d 20 6c 61 73 74 20 73 79 73 74 65 6d 20 65  om last system e
b1d0: 72 72 6f 72 20 2a 2f 0a 20 20 75 31 36 20 64 62  rror */.  u16 db
b1e0: 4f 70 74 46 6c 61 67 73 3b 20 20 20 20 20 20 20  OptFlags;       
b1f0: 20 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67 73          /* Flags
b200: 20 74 6f 20 65 6e 61 62 6c 65 2f 64 69 73 61 62   to enable/disab
b210: 6c 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  le optimizations
b220: 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20   */.  u8 enc;   
b230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b240: 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f      /* Text enco
b250: 64 69 6e 67 20 2a 2f 0a 20 20 75 38 20 61 75 74  ding */.  u8 aut
b260: 6f 43 6f 6d 6d 69 74 3b 20 20 20 20 20 20 20 20  oCommit;        
b270: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61          /* The a
b280: 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 2e  uto-commit flag.
b290: 20 2a 2f 0a 20 20 75 38 20 74 65 6d 70 5f 73 74   */.  u8 temp_st
b2a0: 6f 72 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ore;            
b2b0: 20 20 20 20 2f 2a 20 31 3a 20 66 69 6c 65 20 32      /* 1: file 2
b2c0: 3a 20 6d 65 6d 6f 72 79 20 30 3a 20 64 65 66 61  : memory 0: defa
b2d0: 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6d 61 6c 6c  ult */.  u8 mall
b2e0: 6f 63 46 61 69 6c 65 64 3b 20 20 20 20 20 20 20  ocFailed;       
b2f0: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
b300: 66 20 77 65 20 68 61 76 65 20 73 65 65 6e 20 61  f we have seen a
b310: 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 20   malloc failure 
b320: 2a 2f 0a 20 20 75 38 20 62 42 65 6e 69 67 6e 4d  */.  u8 bBenignM
b330: 61 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 20  alloc;          
b340: 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 72 65 71     /* Do not req
b350: 75 69 72 65 20 4f 4f 4d 73 20 69 66 20 74 72 75  uire OOMs if tru
b360: 65 20 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c 6f  e */.  u8 dfltLo
b370: 63 6b 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20  ckMode;         
b380: 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
b390: 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f 72  locking-mode for
b3a0: 20 61 74 74 61 63 68 65 64 20 64 62 73 20 2a 2f   attached dbs */
b3b0: 0a 20 20 73 69 67 6e 65 64 20 63 68 61 72 20 6e  .  signed char n
b3c0: 65 78 74 41 75 74 6f 76 61 63 3b 20 20 20 20 20  extAutovac;     
b3d0: 20 2f 2a 20 41 75 74 6f 76 61 63 20 73 65 74 74   /* Autovac sett
b3e0: 69 6e 67 20 61 66 74 65 72 20 56 41 43 55 55 4d  ing after VACUUM
b3f0: 20 69 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38 20   if >=0 */.  u8 
b400: 73 75 70 70 72 65 73 73 45 72 72 3b 20 20 20 20  suppressErr;    
b410: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f             /* Do
b420: 20 6e 6f 74 20 69 73 73 75 65 20 65 72 72 6f 72   not issue error
b430: 20 6d 65 73 73 61 67 65 73 20 69 66 20 74 72 75   messages if tru
b440: 65 20 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f 6e  e */.  u8 vtabOn
b450: 43 6f 6e 66 6c 69 63 74 3b 20 20 20 20 20 20 20  Conflict;       
b460: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f       /* Value to
b470: 20 72 65 74 75 72 6e 20 66 6f 72 20 73 33 5f 76   return for s3_v
b480: 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28  tab_on_conflict(
b490: 29 20 2a 2f 0a 20 20 75 38 20 69 73 54 72 61 6e  ) */.  u8 isTran
b4a0: 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74  sactionSavepoint
b4b0: 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  ;    /* True if 
b4c0: 74 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61  the outermost sa
b4d0: 76 65 70 6f 69 6e 74 20 69 73 20 61 20 54 53 20  vepoint is a TS 
b4e0: 2a 2f 0a 20 20 75 38 20 6d 54 72 61 63 65 3b 20  */.  u8 mTrace; 
b4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b500: 20 20 20 2f 2a 20 7a 65 72 6f 20 6f 72 20 6d 6f     /* zero or mo
b510: 72 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45 20  re SQLITE_TRACE 
b520: 66 6c 61 67 73 20 2a 2f 0a 20 20 75 38 20 73 6b  flags */.  u8 sk
b530: 69 70 42 74 72 65 65 4d 75 74 65 78 3b 20 20 20  ipBtreeMutex;   
b540: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
b550: 20 69 66 20 6e 6f 20 73 68 61 72 65 64 2d 63 61   if no shared-ca
b560: 63 68 65 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a  che backends */.
b570: 20 20 69 6e 74 20 6e 65 78 74 50 61 67 65 73 69    int nextPagesi
b580: 7a 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ze;             
b590: 2f 2a 20 50 61 67 65 73 69 7a 65 20 61 66 74 65  /* Pagesize afte
b5a0: 72 20 56 41 43 55 55 4d 20 69 66 20 3e 30 20 2a  r VACUUM if >0 *
b5b0: 2f 0a 20 20 75 33 32 20 6d 61 67 69 63 3b 20 20  /.  u32 magic;  
b5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b5d0: 20 20 2f 2a 20 4d 61 67 69 63 20 6e 75 6d 62 65    /* Magic numbe
b5e0: 72 20 66 6f 72 20 64 65 74 65 63 74 20 6c 69 62  r for detect lib
b5f0: 72 61 72 79 20 6d 69 73 75 73 65 20 2a 2f 0a 20  rary misuse */. 
b600: 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 20 20 20   int nChange;   
b610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b620: 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64  * Value returned
b630: 20 62 79 20 73 71 6c 69 74 65 33 5f 63 68 61 6e   by sqlite3_chan
b640: 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e  ges() */.  int n
b650: 54 6f 74 61 6c 43 68 61 6e 67 65 3b 20 20 20 20  TotalChange;    
b660: 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
b670: 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71  e returned by sq
b680: 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e  lite3_total_chan
b690: 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20 61  ges() */.  int a
b6a0: 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4e 5f 4c  Limit[SQLITE_N_L
b6b0: 49 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c 69 6d 69  IMIT];   /* Limi
b6c0: 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78  ts */.  int nMax
b6d0: 53 6f 72 74 65 72 4d 6d 61 70 3b 20 20 20 20 20  SorterMmap;     
b6e0: 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d        /* Maximum
b6f0: 20 73 69 7a 65 20 6f 66 20 72 65 67 69 6f 6e 73   size of regions
b700: 20 6d 61 70 70 65 64 20 62 79 20 73 6f 72 74 65   mapped by sorte
b710: 72 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 71  r */.  struct sq
b720: 6c 69 74 65 33 49 6e 69 74 49 6e 66 6f 20 7b 20  lite3InitInfo { 
b730: 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74       /* Informat
b740: 69 6f 6e 20 75 73 65 64 20 64 75 72 69 6e 67 20  ion used during 
b750: 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 2a  initialization *
b760: 2f 0a 20 20 20 20 69 6e 74 20 6e 65 77 54 6e 75  /.    int newTnu
b770: 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
b780: 20 20 2f 2a 20 52 6f 6f 74 70 61 67 65 20 6f 66    /* Rootpage of
b790: 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 69   table being ini
b7a0: 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20  tialized */.    
b7b0: 75 38 20 69 44 62 3b 20 20 20 20 20 20 20 20 20  u8 iDb;         
b7c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57              /* W
b7d0: 68 69 63 68 20 64 62 20 66 69 6c 65 20 69 73 20  hich db file is 
b7e0: 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65  being initialize
b7f0: 64 20 2a 2f 0a 20 20 20 20 75 38 20 62 75 73 79  d */.    u8 busy
b800: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
b810: 20 20 20 20 20 2f 2a 20 54 52 55 45 20 69 66 20       /* TRUE if 
b820: 63 75 72 72 65 6e 74 6c 79 20 69 6e 69 74 69 61  currently initia
b830: 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20 20 20 75 38  lizing */.    u8
b840: 20 6f 72 70 68 61 6e 54 72 69 67 67 65 72 3b 20   orphanTrigger; 
b850: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73            /* Las
b860: 74 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 6f  t statement is o
b870: 72 70 68 61 6e 65 64 20 54 45 4d 50 20 74 72 69  rphaned TEMP tri
b880: 67 67 65 72 20 2a 2f 0a 20 20 20 20 75 38 20 69  gger */.    u8 i
b890: 6d 70 6f 73 74 65 72 54 61 62 6c 65 3b 20 20 20  mposterTable;   
b8a0: 20 20 20 20 20 20 20 20 2f 2a 20 42 75 69 6c 64          /* Build
b8b0: 69 6e 67 20 61 6e 20 69 6d 70 6f 73 74 65 72 20  ing an imposter 
b8c0: 74 61 62 6c 65 20 2a 2f 0a 20 20 7d 20 69 6e 69  table */.  } ini
b8d0: 74 3b 0a 20 20 69 6e 74 20 6e 56 64 62 65 41 63  t;.  int nVdbeAc
b8e0: 74 69 76 65 3b 20 20 20 20 20 20 20 20 20 20 20  tive;           
b8f0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
b900: 56 44 42 45 73 20 63 75 72 72 65 6e 74 6c 79 20  VDBEs currently 
b910: 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  running */.  int
b920: 20 6e 56 64 62 65 52 65 61 64 3b 20 20 20 20 20   nVdbeRead;     
b930: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
b940: 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 56  mber of active V
b950: 44 42 45 73 20 74 68 61 74 20 72 65 61 64 20 6f  DBEs that read o
b960: 72 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74  r write */.  int
b970: 20 6e 56 64 62 65 57 72 69 74 65 3b 20 20 20 20   nVdbeWrite;    
b980: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
b990: 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 56  mber of active V
b9a0: 44 42 45 73 20 74 68 61 74 20 72 65 61 64 20 61  DBEs that read a
b9b0: 6e 64 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e  nd write */.  in
b9c0: 74 20 6e 56 64 62 65 45 78 65 63 3b 20 20 20 20  t nVdbeExec;    
b9d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
b9e0: 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20  umber of nested 
b9f0: 63 61 6c 6c 73 20 74 6f 20 56 64 62 65 45 78 65  calls to VdbeExe
ba00: 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 44  c() */.  int nVD
ba10: 65 73 74 72 6f 79 3b 20 20 20 20 20 20 20 20 20  estroy;         
ba20: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
ba30: 20 6f 66 20 61 63 74 69 76 65 20 4f 50 5f 56 44   of active OP_VD
ba40: 65 73 74 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e  estroy operation
ba50: 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 78 74 65  s */.  int nExte
ba60: 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20  nsion;          
ba70: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
ba80: 66 20 6c 6f 61 64 65 64 20 65 78 74 65 6e 73 69  f loaded extensi
ba90: 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 2a  ons */.  void **
baa0: 61 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20  aExtension;     
bab0: 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20         /* Array 
bac0: 6f 66 20 73 68 61 72 65 64 20 6c 69 62 72 61 72  of shared librar
bad0: 79 20 68 61 6e 64 6c 65 73 20 2a 2f 0a 20 20 69  y handles */.  i
bae0: 6e 74 20 28 2a 78 54 72 61 63 65 29 28 75 33 32  nt (*xTrace)(u32
baf0: 2c 76 6f 69 64 2a 2c 76 6f 69 64 2a 2c 76 6f 69  ,void*,void*,voi
bb00: 64 2a 29 3b 20 20 20 20 20 2f 2a 20 54 72 61 63  d*);     /* Trac
bb10: 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  e function */.  
bb20: 76 6f 69 64 20 2a 70 54 72 61 63 65 41 72 67 3b  void *pTraceArg;
bb30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bb40: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
bb50: 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 74 72 61  ument to the tra
bb60: 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  ce function */. 
bb70: 20 76 6f 69 64 20 28 2a 78 50 72 6f 66 69 6c 65   void (*xProfile
bb80: 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68  )(void*,const ch
bb90: 61 72 2a 2c 75 36 34 29 3b 20 20 2f 2a 20 50 72  ar*,u64);  /* Pr
bba0: 6f 66 69 6c 69 6e 67 20 66 75 6e 63 74 69 6f 6e  ofiling function
bbb0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f   */.  void *pPro
bbc0: 66 69 6c 65 41 72 67 3b 20 20 20 20 20 20 20 20  fileArg;        
bbd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bbe0: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 70  /* Argument to p
bbf0: 72 6f 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e 20  rofile function 
bc00: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6d 6d  */.  void *pComm
bc10: 69 74 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  itArg;          
bc20: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
bc30: 6e 74 20 74 6f 20 78 43 6f 6d 6d 69 74 43 61 6c  nt to xCommitCal
bc40: 6c 62 61 63 6b 28 29 20 2a 2f 0a 20 20 69 6e 74  lback() */.  int
bc50: 20 28 2a 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61   (*xCommitCallba
bc60: 63 6b 29 28 76 6f 69 64 2a 29 3b 20 20 20 20 2f  ck)(void*);    /
bc70: 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65 76 65  * Invoked at eve
bc80: 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20  ry commit. */.  
bc90: 76 6f 69 64 20 2a 70 52 6f 6c 6c 62 61 63 6b 41  void *pRollbackA
bca0: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
bcb0: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
bcc0: 20 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61   xRollbackCallba
bcd0: 63 6b 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28  ck() */.  void (
bce0: 2a 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61  *xRollbackCallba
bcf0: 63 6b 29 28 76 6f 69 64 2a 29 3b 20 2f 2a 20 49  ck)(void*); /* I
bd00: 6e 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20  nvoked at every 
bd10: 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69  commit. */.  voi
bd20: 64 20 2a 70 55 70 64 61 74 65 41 72 67 3b 0a 20  d *pUpdateArg;. 
bd30: 20 76 6f 69 64 20 28 2a 78 55 70 64 61 74 65 43   void (*xUpdateC
bd40: 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69  allback)(void*,i
bd50: 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nt, const char*,
bd60: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 73 71 6c 69  const char*,sqli
bd70: 74 65 5f 69 6e 74 36 34 29 3b 0a 23 69 66 64 65  te_int64);.#ifde
bd80: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
bd90: 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20  PREUPDATE_HOOK. 
bda0: 20 76 6f 69 64 20 2a 70 50 72 65 55 70 64 61 74   void *pPreUpdat
bdb0: 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 2f  eArg;          /
bdc0: 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74  * First argument
bdd0: 20 74 6f 20 78 50 72 65 55 70 64 61 74 65 43 61   to xPreUpdateCa
bde0: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64  llback */.  void
bdf0: 20 28 2a 78 50 72 65 55 70 64 61 74 65 43 61 6c   (*xPreUpdateCal
be00: 6c 62 61 63 6b 29 28 20 20 20 2f 2a 20 52 65 67  lback)(   /* Reg
be10: 69 73 74 65 72 65 64 20 75 73 69 6e 67 20 73 71  istered using sq
be20: 6c 69 74 65 33 5f 70 72 65 75 70 64 61 74 65 5f  lite3_preupdate_
be30: 68 6f 6f 6b 28 29 20 2a 2f 0a 20 20 20 20 76 6f  hook() */.    vo
be40: 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74  id*,sqlite3*,int
be50: 2c 63 68 61 72 20 63 6f 6e 73 74 2a 2c 63 68 61  ,char const*,cha
be60: 72 20 63 6f 6e 73 74 2a 2c 73 71 6c 69 74 65 33  r const*,sqlite3
be70: 5f 69 6e 74 36 34 2c 73 71 6c 69 74 65 33 5f 69  _int64,sqlite3_i
be80: 6e 74 36 34 0a 20 20 29 3b 0a 20 20 50 72 65 55  nt64.  );.  PreU
be90: 70 64 61 74 65 20 2a 70 50 72 65 55 70 64 61 74  pdate *pPreUpdat
bea0: 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e  e;        /* Con
beb0: 74 65 78 74 20 66 6f 72 20 61 63 74 69 76 65 20  text for active 
bec0: 70 72 65 2d 75 70 64 61 74 65 20 63 61 6c 6c 62  pre-update callb
bed0: 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a  ack */.#endif /*
bee0: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50   SQLITE_ENABLE_P
bef0: 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 20 2a 2f  REUPDATE_HOOK */
bf00: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
bf10: 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 28  OMIT_WAL.  int (
bf20: 2a 78 57 61 6c 43 61 6c 6c 62 61 63 6b 29 28 76  *xWalCallback)(v
bf30: 6f 69 64 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a  oid *, sqlite3 *
bf40: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
bf50: 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 57  int);.  void *pW
bf60: 61 6c 41 72 67 3b 0a 23 65 6e 64 69 66 0a 20 20  alArg;.#endif.  
bf70: 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65  void(*xCollNeede
bf80: 64 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33  d)(void*,sqlite3
bf90: 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63  *,int eTextRep,c
bfa0: 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76  onst char*);.  v
bfb0: 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64  oid(*xCollNeeded
bfc0: 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65  16)(void*,sqlite
bfd0: 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c  3*,int eTextRep,
bfe0: 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20  const void*);.  
bff0: 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65  void *pCollNeede
c000: 64 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f  dArg;.  sqlite3_
c010: 76 61 6c 75 65 20 2a 70 45 72 72 3b 20 20 20 20  value *pErr;    
c020: 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65        /* Most re
c030: 63 65 6e 74 20 65 72 72 6f 72 20 6d 65 73 73 61  cent error messa
c040: 67 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a  ge */.  union {.
c050: 20 20 20 20 76 6f 6c 61 74 69 6c 65 20 69 6e 74      volatile int
c060: 20 69 73 49 6e 74 65 72 72 75 70 74 65 64 3b 20   isInterrupted; 
c070: 2f 2a 20 54 72 75 65 20 69 66 20 73 71 6c 69 74  /* True if sqlit
c080: 65 33 5f 69 6e 74 65 72 72 75 70 74 20 68 61 73  e3_interrupt has
c090: 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a   been called */.
c0a0: 20 20 20 20 64 6f 75 62 6c 65 20 6e 6f 74 55 73      double notUs
c0b0: 65 64 31 3b 20 20 20 20 20 20 20 20 20 20 20 20  ed1;            
c0c0: 2f 2a 20 53 70 61 63 65 72 20 2a 2f 0a 20 20 7d  /* Spacer */.  }
c0d0: 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65   u1;.  Lookaside
c0e0: 20 6c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20   lookaside;     
c0f0: 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69 64       /* Lookasid
c100: 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69 67 75  e malloc configu
c110: 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65  ration */.#ifnde
c120: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
c130: 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 73 71  THORIZATION.  sq
c140: 6c 69 74 65 33 5f 78 61 75 74 68 20 78 41 75 74  lite3_xauth xAut
c150: 68 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41  h;          /* A
c160: 63 63 65 73 73 20 61 75 74 68 6f 72 69 7a 61 74  ccess authorizat
c170: 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ion function */.
c180: 20 20 76 6f 69 64 20 2a 70 41 75 74 68 41 72 67    void *pAuthArg
c190: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
c1a0: 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20  /* 1st argument 
c1b0: 74 6f 20 74 68 65 20 61 63 63 65 73 73 20 61 75  to the access au
c1c0: 74 68 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  th function */.#
c1d0: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
c1e0: 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45  LITE_OMIT_PROGRE
c1f0: 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e  SS_CALLBACK.  in
c200: 74 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76  t (*xProgress)(v
c210: 6f 69 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54  oid *);     /* T
c220: 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  he progress call
c230: 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  back */.  void *
c240: 70 50 72 6f 67 72 65 73 73 41 72 67 3b 20 20 20  pProgressArg;   
c250: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
c260: 65 6e 74 20 74 6f 20 74 68 65 20 70 72 6f 67 72  ent to the progr
c270: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  ess callback */.
c280: 20 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67    unsigned nProg
c290: 72 65 73 73 4f 70 73 3b 20 20 20 20 20 20 20 20  ressOps;        
c2a0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63  /* Number of opc
c2b0: 6f 64 65 73 20 66 6f 72 20 70 72 6f 67 72 65 73  odes for progres
c2c0: 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65  s callback */.#e
c2d0: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
c2e0: 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
c2f0: 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72  TABLE.  int nVTr
c300: 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ans;            
c310: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74        /* Allocat
c320: 65 64 20 73 69 7a 65 20 6f 66 20 61 56 54 72 61  ed size of aVTra
c330: 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f  ns */.  Hash aMo
c340: 64 75 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  dule;           
c350: 20 20 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74        /* populat
c360: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 72  ed by sqlite3_cr
c370: 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f  eate_module() */
c380: 0a 20 20 56 74 61 62 43 74 78 20 2a 70 56 74 61  .  VtabCtx *pVta
c390: 62 43 74 78 3b 20 20 20 20 20 20 20 20 20 20 20  bCtx;           
c3a0: 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20   /* Context for 
c3b0: 61 63 74 69 76 65 20 76 74 61 62 20 63 6f 6e 6e  active vtab conn
c3c0: 65 63 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20  ect/create */.  
c3d0: 56 54 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73  VTable **aVTrans
c3e0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
c3f0: 20 56 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20   Virtual tables 
c400: 77 69 74 68 20 6f 70 65 6e 20 74 72 61 6e 73 61  with open transa
c410: 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62  ctions */.  VTab
c420: 6c 65 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b  le *pDisconnect;
c430: 20 20 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65 63      /* Disconnec
c440: 74 20 74 68 65 73 65 20 69 6e 20 6e 65 78 74 20  t these in next 
c450: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28  sqlite3_prepare(
c460: 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 48 61  ) */.#endif.  Ha
c470: 73 68 20 61 46 75 6e 63 3b 20 20 20 20 20 20 20  sh aFunc;       
c480: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48              /* H
c490: 61 73 68 20 74 61 62 6c 65 20 6f 66 20 63 6f 6e  ash table of con
c4a0: 6e 65 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e  nection function
c4b0: 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f 6c  s */.  Hash aCol
c4c0: 6c 53 65 71 3b 20 20 20 20 20 20 20 20 20 20 20  lSeq;           
c4d0: 20 20 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c       /* All coll
c4e0: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20  ating sequences 
c4f0: 2a 2f 0a 20 20 42 75 73 79 48 61 6e 64 6c 65 72  */.  BusyHandler
c500: 20 62 75 73 79 48 61 6e 64 6c 65 72 3b 20 20 20   busyHandler;   
c510: 20 20 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c 62     /* Busy callb
c520: 61 63 6b 20 2a 2f 0a 20 20 44 62 20 61 44 62 53  ack */.  Db aDbS
c530: 74 61 74 69 63 5b 32 5d 3b 20 20 20 20 20 20 20  tatic[2];       
c540: 20 20 20 20 20 20 20 2f 2a 20 53 74 61 74 69 63         /* Static
c550: 20 73 70 61 63 65 20 66 6f 72 20 74 68 65 20 32   space for the 2
c560: 20 64 65 66 61 75 6c 74 20 62 61 63 6b 65 6e 64   default backend
c570: 73 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74  s */.  Savepoint
c580: 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 20 20 20   *pSavepoint;   
c590: 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
c5a0: 61 63 74 69 76 65 20 73 61 76 65 70 6f 69 6e 74  active savepoint
c5b0: 73 20 2a 2f 0a 20 20 69 6e 74 20 62 75 73 79 54  s */.  int busyT
c5c0: 69 6d 65 6f 75 74 3b 20 20 20 20 20 20 20 20 20  imeout;         
c5d0: 20 20 20 20 20 2f 2a 20 42 75 73 79 20 68 61 6e       /* Busy han
c5e0: 64 6c 65 72 20 74 69 6d 65 6f 75 74 2c 20 69 6e  dler timeout, in
c5f0: 20 6d 73 65 63 20 2a 2f 0a 20 20 69 6e 74 20 6e   msec */.  int n
c600: 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20  Savepoint;      
c610: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
c620: 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61  er of non-transa
c630: 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73  ction savepoints
c640: 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 61 74 65   */.  int nState
c650: 6d 65 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  ment;           
c660: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
c670: 20 6e 65 73 74 65 64 20 73 74 61 74 65 6d 65 6e   nested statemen
c680: 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 20  t-transactions  
c690: 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72  */.  i64 nDeferr
c6a0: 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20  edCons;         
c6b0: 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72     /* Net deferr
c6c0: 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74  ed constraints t
c6d0: 68 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  his transaction.
c6e0: 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72   */.  i64 nDefer
c6f0: 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20  redImmCons;     
c700: 20 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72      /* Net defer
c710: 72 65 64 20 69 6d 6d 65 64 69 61 74 65 20 63 6f  red immediate co
c720: 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69  nstraints */.  i
c730: 6e 74 20 2a 70 6e 42 79 74 65 73 46 72 65 65 64  nt *pnBytesFreed
c740: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
c750: 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 6e 63  If not NULL, inc
c760: 72 65 6d 65 6e 74 20 74 68 69 73 20 69 6e 20 44  rement this in D
c770: 62 46 72 65 65 28 29 20 2a 2f 0a 23 69 66 64 65  bFree() */.#ifde
c780: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
c790: 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20  UNLOCK_NOTIFY.  
c7a0: 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  /* The following
c7b0: 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 61   variables are a
c7c0: 6c 6c 20 70 72 6f 74 65 63 74 65 64 20 62 79 20  ll protected by 
c7d0: 74 68 65 20 53 54 41 54 49 43 5f 4d 41 53 54 45  the STATIC_MASTE
c7e0: 52 0a 20 20 2a 2a 20 6d 75 74 65 78 2c 20 6e 6f  R.  ** mutex, no
c7f0: 74 20 62 79 20 73 71 6c 69 74 65 33 2e 6d 75 74  t by sqlite3.mut
c800: 65 78 2e 20 54 68 65 79 20 61 72 65 20 75 73 65  ex. They are use
c810: 64 20 62 79 20 63 6f 64 65 20 69 6e 20 6e 6f 74  d by code in not
c820: 69 66 79 2e 63 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  ify.c..  **.  **
c830: 20 57 68 65 6e 20 58 2e 70 55 6e 6c 6f 63 6b 43   When X.pUnlockC
c840: 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68  onnection==Y, th
c850: 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 58 20  at means that X 
c860: 69 73 20 77 61 69 74 69 6e 67 20 66 6f 72 20 59  is waiting for Y
c870: 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f 63 6b 20   to.  ** unlock 
c880: 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 70  so that it can p
c890: 72 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a  roceed..  **.  *
c8a0: 2a 20 57 68 65 6e 20 58 2e 70 42 6c 6f 63 6b 69  * When X.pBlocki
c8b0: 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c  ngConnection==Y,
c8c0: 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74   that means that
c8d0: 20 73 6f 6d 65 74 68 69 6e 67 20 74 68 61 74 20   something that 
c8e0: 58 20 74 72 69 65 64 0a 20 20 2a 2a 20 74 72 69  X tried.  ** tri
c8f0: 65 64 20 74 6f 20 64 6f 20 72 65 63 65 6e 74 6c  ed to do recentl
c900: 79 20 66 61 69 6c 65 64 20 77 69 74 68 20 61 6e  y failed with an
c910: 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 65   SQLITE_LOCKED e
c920: 72 72 6f 72 20 64 75 65 20 74 6f 20 6c 6f 63 6b  rror due to lock
c930: 73 0a 20 20 2a 2a 20 68 65 6c 64 20 62 79 20 59  s.  ** held by Y
c940: 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ..  */.  sqlite3
c950: 20 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65   *pBlockingConne
c960: 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e 6e 65 63  ction; /* Connec
c970: 74 69 6f 6e 20 74 68 61 74 20 63 61 75 73 65 64  tion that caused
c980: 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 2a   SQLITE_LOCKED *
c990: 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 55 6e  /.  sqlite3 *pUn
c9a0: 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20  lockConnection; 
c9b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e            /* Con
c9c0: 6e 65 63 74 69 6f 6e 20 74 6f 20 77 61 74 63 68  nection to watch
c9d0: 20 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a 2f 0a 20   for unlock */. 
c9e0: 20 76 6f 69 64 20 2a 70 55 6e 6c 6f 63 6b 41 72   void *pUnlockAr
c9f0: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
ca00: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
ca10: 6e 74 20 74 6f 20 78 55 6e 6c 6f 63 6b 4e 6f 74  nt to xUnlockNot
ca20: 69 66 79 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ify */.  void (*
ca30: 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 29 28 76  xUnlockNotify)(v
ca40: 6f 69 64 20 2a 2a 2c 20 69 6e 74 29 3b 20 20 2f  oid **, int);  /
ca50: 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69 66 79 20  * Unlock notify 
ca60: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 73 71  callback */.  sq
ca70: 6c 69 74 65 33 20 2a 70 4e 65 78 74 42 6c 6f 63  lite3 *pNextBloc
ca80: 6b 65 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  ked;        /* N
ca90: 65 78 74 20 69 6e 20 6c 69 73 74 20 6f 66 20 61  ext in list of a
caa0: 6c 6c 20 62 6c 6f 63 6b 65 64 20 63 6f 6e 6e 65  ll blocked conne
cab0: 63 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69 66  ctions */.#endif
cac0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55  .#ifdef SQLITE_U
cad0: 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49  SER_AUTHENTICATI
cae0: 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f 75 73 65  ON.  sqlite3_use
caf0: 72 61 75 74 68 20 61 75 74 68 3b 20 20 20 20 20  rauth auth;     
cb00: 20 20 20 2f 2a 20 55 73 65 72 20 61 75 74 68 65     /* User authe
cb10: 6e 74 69 63 61 74 69 6f 6e 20 69 6e 66 6f 72 6d  ntication inform
cb20: 61 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a  ation */.#endif.
cb30: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72  };../*.** A macr
cb40: 6f 20 74 6f 20 64 69 73 63 6f 76 65 72 20 74 68  o to discover th
cb50: 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20  e encoding of a 
cb60: 64 61 74 61 62 61 73 65 2e 0a 2a 2f 0a 23 64 65  database..*/.#de
cb70: 66 69 6e 65 20 53 43 48 45 4d 41 5f 45 4e 43 28  fine SCHEMA_ENC(
cb80: 64 62 29 20 28 28 64 62 29 2d 3e 61 44 62 5b 30  db) ((db)->aDb[0
cb90: 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e 63 29 0a  ].pSchema->enc).
cba0: 23 64 65 66 69 6e 65 20 45 4e 43 28 64 62 29 20  #define ENC(db) 
cbb0: 20 20 20 20 20 20 20 28 28 64 62 29 2d 3e 65 6e         ((db)->en
cbc0: 63 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62  c)../*.** Possib
cbd0: 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  le values for th
cbe0: 65 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 2e  e sqlite3.flags.
cbf0: 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e  .**.** Value con
cc00: 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72 63  straints (enforc
cc10: 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29  ed via assert())
cc20: 3a 0a 2a 2a 20 20 20 20 20 20 53 51 4c 49 54 45  :.**      SQLITE
cc30: 5f 46 75 6c 6c 46 53 79 6e 63 20 20 20 20 20 3d  _FullFSync     =
cc40: 3d 20 50 41 47 45 52 5f 46 55 4c 4c 46 53 59 4e  = PAGER_FULLFSYN
cc50: 43 0a 2a 2a 20 20 20 20 20 20 53 51 4c 49 54 45  C.**      SQLITE
cc60: 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63 20 3d  _CkptFullFSync =
cc70: 3d 20 50 41 47 45 52 5f 43 4b 50 54 5f 46 55 4c  = PAGER_CKPT_FUL
cc80: 4c 46 53 59 4e 43 0a 2a 2a 20 20 20 20 20 20 53  LFSYNC.**      S
cc90: 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c  QLITE_CacheSpill
cca0: 20 20 20 20 3d 3d 20 50 41 47 45 52 5f 43 41 43      == PAGER_CAC
ccb0: 48 45 5f 53 50 49 4c 4c 0a 2a 2f 0a 23 64 65 66  HE_SPILL.*/.#def
ccc0: 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 54  ine SQLITE_VdbeT
ccd0: 72 61 63 65 20 20 20 20 20 20 30 78 30 30 30 30  race      0x0000
cce0: 30 30 30 31 20 20 2f 2a 20 54 72 75 65 20 74 6f  0001  /* True to
ccf0: 20 74 72 61 63 65 20 56 44 42 45 20 65 78 65 63   trace VDBE exec
cd00: 75 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ution */.#define
cd10: 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68   SQLITE_InternCh
cd20: 61 6e 67 65 73 20 20 30 78 30 30 30 30 30 30 30  anges  0x0000000
cd30: 32 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74 65  2  /* Uncommitte
cd40: 64 20 48 61 73 68 20 74 61 62 6c 65 20 63 68 61  d Hash table cha
cd50: 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  nges */.#define 
cd60: 53 51 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61  SQLITE_FullColNa
cd70: 6d 65 73 20 20 20 30 78 30 30 30 30 30 30 30 34  mes   0x00000004
cd80: 20 20 2f 2a 20 53 68 6f 77 20 66 75 6c 6c 20 63    /* Show full c
cd90: 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f 6e 20 53  olumn names on S
cda0: 45 4c 45 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65  ELECT */.#define
cdb0: 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e   SQLITE_FullFSyn
cdc0: 63 20 20 20 20 20 20 30 78 30 30 30 30 30 30 30  c      0x0000000
cdd0: 38 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66  8  /* Use full f
cde0: 73 79 6e 63 20 6f 6e 20 74 68 65 20 62 61 63 6b  sync on the back
cdf0: 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  end */.#define S
ce00: 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53  QLITE_CkptFullFS
ce10: 79 6e 63 20 20 30 78 30 30 30 30 30 30 31 30 20  ync  0x00000010 
ce20: 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79   /* Use full fsy
ce30: 6e 63 20 66 6f 72 20 63 68 65 63 6b 70 6f 69 6e  nc for checkpoin
ce40: 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  t */.#define SQL
ce50: 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 20 20  ITE_CacheSpill  
ce60: 20 20 20 30 78 30 30 30 30 30 30 32 30 20 20 2f     0x00000020  /
ce70: 2a 20 4f 4b 20 74 6f 20 73 70 69 6c 6c 20 70 61  * OK to spill pa
ce80: 67 65 72 20 63 61 63 68 65 20 2a 2f 0a 23 64 65  ger cache */.#de
ce90: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 68 6f 72  fine SQLITE_Shor
cea0: 74 43 6f 6c 4e 61 6d 65 73 20 20 30 78 30 30 30  tColNames  0x000
ceb0: 30 30 30 34 30 20 20 2f 2a 20 53 68 6f 77 20 73  00040  /* Show s
cec0: 68 6f 72 74 20 63 6f 6c 75 6d 6e 73 20 6e 61 6d  hort columns nam
ced0: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
cee0: 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 20  LITE_CountRows  
cef0: 20 20 20 20 30 78 30 30 30 30 30 30 38 30 20 20      0x00000080  
cf00: 2f 2a 20 43 6f 75 6e 74 20 72 6f 77 73 20 63 68  /* Count rows ch
cf10: 61 6e 67 65 64 20 62 79 20 49 4e 53 45 52 54 2c  anged by INSERT,
cf20: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
cf30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cf40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
cf50: 20 20 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50     DELETE, or UP
cf60: 44 41 54 45 20 61 6e 64 20 72 65 74 75 72 6e 20  DATE and return 
cf70: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
cf80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cf90: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
cfa0: 20 20 74 68 65 20 63 6f 75 6e 74 20 75 73 69 6e    the count usin
cfb0: 67 20 61 20 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f  g a callback. */
cfc0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
cfd0: 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 20 20 20 30  NullCallback   0
cfe0: 78 30 30 30 30 30 31 30 30 20 20 2f 2a 20 49 6e  x00000100  /* In
cff0: 76 6f 6b 65 20 74 68 65 20 63 61 6c 6c 62 61 63  voke the callbac
d000: 6b 20 6f 6e 63 65 20 69 66 20 74 68 65 20 2a 2f  k once if the */
d010: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d030: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20             /*   
d040: 72 65 73 75 6c 74 20 73 65 74 20 69 73 20 65 6d  result set is em
d050: 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  pty */.#define S
d060: 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 20 20  QLITE_SqlTrace  
d070: 20 20 20 20 20 30 78 30 30 30 30 30 32 30 30 20       0x00000200 
d080: 20 2f 2a 20 44 65 62 75 67 20 70 72 69 6e 74 20   /* Debug print 
d090: 53 51 4c 20 61 73 20 69 74 20 65 78 65 63 75 74  SQL as it execut
d0a0: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
d0b0: 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67  LITE_VdbeListing
d0c0: 20 20 20 20 30 78 30 30 30 30 30 34 30 30 20 20      0x00000400  
d0d0: 2f 2a 20 44 65 62 75 67 20 6c 69 73 74 69 6e 67  /* Debug listing
d0e0: 73 20 6f 66 20 56 44 42 45 20 70 72 6f 67 72 61  s of VDBE progra
d0f0: 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ms */.#define SQ
d100: 4c 49 54 45 5f 57 72 69 74 65 53 63 68 65 6d 61  LITE_WriteSchema
d110: 20 20 20 20 30 78 30 30 30 30 30 38 30 30 20 20      0x00000800  
d120: 2f 2a 20 4f 4b 20 74 6f 20 75 70 64 61 74 65 20  /* OK to update 
d130: 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 2a 2f  SQLITE_MASTER */
d140: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d150: 56 64 62 65 41 64 64 6f 70 54 72 61 63 65 20 30  VdbeAddopTrace 0
d160: 78 30 30 30 30 31 30 30 30 20 20 2f 2a 20 54 72  x00001000  /* Tr
d170: 61 63 65 20 73 71 6c 69 74 65 33 56 64 62 65 41  ace sqlite3VdbeA
d180: 64 64 4f 70 28 29 20 63 61 6c 6c 73 20 2a 2f 0a  ddOp() calls */.
d190: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
d1a0: 67 6e 6f 72 65 43 68 65 63 6b 73 20 20 20 30 78  gnoreChecks   0x
d1b0: 30 30 30 30 32 30 30 30 20 20 2f 2a 20 44 6f 20  00002000  /* Do 
d1c0: 6e 6f 74 20 65 6e 66 6f 72 63 65 20 63 68 65 63  not enforce chec
d1d0: 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  k constraints */
d1e0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d1f0: 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64 20  ReadUncommitted 
d200: 30 78 30 30 30 34 30 30 30 20 20 2f 2a 20 46 6f  0x0004000  /* Fo
d210: 72 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d  r shared-cache m
d220: 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ode */.#define S
d230: 51 4c 49 54 45 5f 4c 65 67 61 63 79 46 69 6c 65  QLITE_LegacyFile
d240: 46 6d 74 20 20 30 78 30 30 30 30 38 30 30 30 20  Fmt  0x00008000 
d250: 20 2f 2a 20 43 72 65 61 74 65 20 6e 65 77 20 64   /* Create new d
d260: 61 74 61 62 61 73 65 73 20 69 6e 20 66 6f 72 6d  atabases in form
d270: 61 74 20 31 20 2a 2f 0a 23 64 65 66 69 6e 65 20  at 1 */.#define 
d280: 53 51 4c 49 54 45 5f 52 65 63 6f 76 65 72 79 4d  SQLITE_RecoveryM
d290: 6f 64 65 20 20 20 30 78 30 30 30 31 30 30 30 30  ode   0x00010000
d2a0: 20 20 2f 2a 20 49 67 6e 6f 72 65 20 73 63 68 65    /* Ignore sche
d2b0: 6d 61 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65  ma errors */.#de
d2c0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 76 65  fine SQLITE_Reve
d2d0: 72 73 65 4f 72 64 65 72 20 20 20 30 78 30 30 30  rseOrder   0x000
d2e0: 32 30 30 30 30 20 20 2f 2a 20 52 65 76 65 72 73  20000  /* Revers
d2f0: 65 20 75 6e 6f 72 64 65 72 65 64 20 53 45 4c 45  e unordered SELE
d300: 43 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  CTs */.#define S
d310: 51 4c 49 54 45 5f 52 65 63 54 72 69 67 67 65 72  QLITE_RecTrigger
d320: 73 20 20 20 20 30 78 30 30 30 34 30 30 30 30 20  s    0x00040000 
d330: 20 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63 75 72   /* Enable recur
d340: 73 69 76 65 20 74 72 69 67 67 65 72 73 20 2a 2f  sive triggers */
d350: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d360: 46 6f 72 65 69 67 6e 4b 65 79 73 20 20 20 20 30  ForeignKeys    0
d370: 78 30 30 30 38 30 30 30 30 20 20 2f 2a 20 45 6e  x00080000  /* En
d380: 66 6f 72 63 65 20 66 6f 72 65 69 67 6e 20 6b 65  force foreign ke
d390: 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 20 2a  y constraints  *
d3a0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d3b0: 5f 41 75 74 6f 49 6e 64 65 78 20 20 20 20 20 20  _AutoIndex      
d3c0: 30 78 30 30 31 30 30 30 30 30 20 20 2f 2a 20 45  0x00100000  /* E
d3d0: 6e 61 62 6c 65 20 61 75 74 6f 6d 61 74 69 63 20  nable automatic 
d3e0: 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69  indexes */.#defi
d3f0: 6e 65 20 53 51 4c 49 54 45 5f 50 72 65 66 65 72  ne SQLITE_Prefer
d400: 42 75 69 6c 74 69 6e 20 20 30 78 30 30 32 30 30  Builtin  0x00200
d410: 30 30 30 20 20 2f 2a 20 50 72 65 66 65 72 65 6e  000  /* Preferen
d420: 63 65 20 74 6f 20 62 75 69 6c 74 2d 69 6e 20 66  ce to built-in f
d430: 75 6e 63 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  uncs */.#define 
d440: 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74 65 6e  SQLITE_LoadExten
d450: 73 69 6f 6e 20 20 30 78 30 30 34 30 30 30 30 30  sion  0x00400000
d460: 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64    /* Enable load
d470: 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23 64  _extension */.#d
d480: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61  efine SQLITE_Loa
d490: 64 45 78 74 46 75 6e 63 20 20 20 20 30 78 30 30  dExtFunc    0x00
d4a0: 38 30 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c  800000  /* Enabl
d4b0: 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  e load_extension
d4c0: 28 29 20 53 51 4c 20 66 75 6e 63 20 2a 2f 0a 23  () SQL func */.#
d4d0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e  define SQLITE_En
d4e0: 61 62 6c 65 54 72 69 67 67 65 72 20 20 30 78 30  ableTrigger  0x0
d4f0: 31 30 30 30 30 30 30 20 20 2f 2a 20 54 72 75 65  1000000  /* True
d500: 20 74 6f 20 65 6e 61 62 6c 65 20 74 72 69 67 67   to enable trigg
d510: 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ers */.#define S
d520: 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20 20  QLITE_DeferFKs  
d530: 20 20 20 20 20 30 78 30 32 30 30 30 30 30 30 20       0x02000000 
d540: 20 2f 2a 20 44 65 66 65 72 20 61 6c 6c 20 46 4b   /* Defer all FK
d550: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
d560: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51  #define SQLITE_Q
d570: 75 65 72 79 4f 6e 6c 79 20 20 20 20 20 20 30 78  ueryOnly      0x
d580: 30 34 30 30 30 30 30 30 20 20 2f 2a 20 44 69 73  04000000  /* Dis
d590: 61 62 6c 65 20 64 61 74 61 62 61 73 65 20 63 68  able database ch
d5a0: 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  anges */.#define
d5b0: 20 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50 20   SQLITE_VdbeEQP 
d5c0: 20 20 20 20 20 20 20 30 78 30 38 30 30 30 30 30         0x0800000
d5d0: 30 20 20 2f 2a 20 44 65 62 75 67 20 45 58 50 4c  0  /* Debug EXPL
d5e0: 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 2a  AIN QUERY PLAN *
d5f0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d600: 5f 56 61 63 75 75 6d 20 20 20 20 20 20 20 20 20  _Vacuum         
d610: 30 78 31 30 30 30 30 30 30 30 20 20 2f 2a 20 43  0x10000000  /* C
d620: 75 72 72 65 6e 74 6c 79 20 69 6e 20 61 20 56 41  urrently in a VA
d630: 43 55 55 4d 20 2a 2f 0a 23 64 65 66 69 6e 65 20  CUUM */.#define 
d640: 53 51 4c 49 54 45 5f 43 65 6c 6c 53 69 7a 65 43  SQLITE_CellSizeC
d650: 6b 20 20 20 20 20 30 78 32 30 30 30 30 30 30 30  k     0x20000000
d660: 20 20 2f 2a 20 43 68 65 63 6b 20 62 74 72 65 65    /* Check btree
d670: 20 63 65 6c 6c 20 73 69 7a 65 73 20 6f 6e 20 6c   cell sizes on l
d680: 6f 61 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  oad */.#define S
d690: 51 4c 49 54 45 5f 46 74 73 33 54 6f 6b 65 6e 69  QLITE_Fts3Tokeni
d6a0: 7a 65 72 20 20 30 78 34 30 30 30 30 30 30 30 20  zer  0x40000000 
d6b0: 20 2f 2a 20 45 6e 61 62 6c 65 20 66 74 73 33 5f   /* Enable fts3_
d6c0: 74 6f 6b 65 6e 69 7a 65 72 28 32 29 20 2a 2f 0a  tokenizer(2) */.
d6d0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e  #define SQLITE_N
d6e0: 6f 43 6b 70 74 4f 6e 43 6c 6f 73 65 20 20 30 78  oCkptOnClose  0x
d6f0: 38 30 30 30 30 30 30 30 20 20 2f 2a 20 4e 6f 20  80000000  /* No 
d700: 63 68 65 63 6b 70 6f 69 6e 74 20 6f 6e 20 63 6c  checkpoint on cl
d710: 6f 73 65 28 29 2f 44 45 54 41 43 48 20 2a 2f 0a  ose()/DETACH */.
d720: 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f 66 20  ../*.** Bits of 
d730: 74 68 65 20 73 71 6c 69 74 65 33 2e 64 62 4f 70  the sqlite3.dbOp
d740: 74 46 6c 61 67 73 20 66 69 65 6c 64 20 74 68 61  tFlags field tha
d750: 74 20 61 72 65 20 75 73 65 64 20 62 79 20 74 68  t are used by th
d760: 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73  e.** sqlite3_tes
d770: 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45  t_control(SQLITE
d780: 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54 49 4d 49  _TESTCTRL_OPTIMI
d790: 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69 6e 74  ZATIONS,...) int
d7a0: 65 72 66 61 63 65 20 74 6f 0a 2a 2a 20 73 65 6c  erface to.** sel
d7b0: 65 63 74 69 76 65 6c 79 20 64 69 73 61 62 6c 65  ectively disable
d7c0: 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a   various optimiz
d7d0: 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69  ations..*/.#defi
d7e0: 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72 79 46  ne SQLITE_QueryF
d7f0: 6c 61 74 74 65 6e 65 72 20 30 78 30 30 30 31 20  lattener 0x0001 
d800: 20 20 2f 2a 20 51 75 65 72 79 20 66 6c 61 74 74    /* Query flatt
d810: 65 6e 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65  ening */.#define
d820: 20 53 51 4c 49 54 45 5f 43 6f 6c 75 6d 6e 43 61   SQLITE_ColumnCa
d830: 63 68 65 20 20 20 20 30 78 30 30 30 32 20 20 20  che    0x0002   
d840: 2f 2a 20 43 6f 6c 75 6d 6e 20 63 61 63 68 65 20  /* Column cache 
d850: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d860: 45 5f 47 72 6f 75 70 42 79 4f 72 64 65 72 20 20  E_GroupByOrder  
d870: 20 30 78 30 30 30 34 20 20 20 2f 2a 20 47 52 4f   0x0004   /* GRO
d880: 55 50 42 59 20 63 6f 76 65 72 20 6f 66 20 4f 52  UPBY cover of OR
d890: 44 45 52 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65  DERBY */.#define
d8a0: 20 53 51 4c 49 54 45 5f 46 61 63 74 6f 72 4f 75   SQLITE_FactorOu
d8b0: 74 43 6f 6e 73 74 20 30 78 30 30 30 38 20 20 20  tConst 0x0008   
d8c0: 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 66 61 63 74  /* Constant fact
d8d0: 6f 72 69 6e 67 20 2a 2f 0a 2f 2a 20 20 20 20 20  oring */./*     
d8e0: 20 20 20 20 20 20 20 20 20 20 20 6e 6f 74 20 75             not u
d8f0: 73 65 64 20 20 20 20 30 78 30 30 31 30 20 20 20  sed    0x0010   
d900: 2f 2f 20 57 61 73 3a 20 53 51 4c 49 54 45 5f 49  // Was: SQLITE_I
d910: 64 78 52 65 61 6c 41 73 49 6e 74 20 2a 2f 0a 23  dxRealAsInt */.#
d920: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 69  define SQLITE_Di
d930: 73 74 69 6e 63 74 4f 70 74 20 20 20 20 30 78 30  stinctOpt    0x0
d940: 30 32 30 20 20 20 2f 2a 20 44 49 53 54 49 4e 43  020   /* DISTINC
d950: 54 20 75 73 69 6e 67 20 69 6e 64 65 78 65 73 20  T using indexes 
d960: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d970: 45 5f 43 6f 76 65 72 49 64 78 53 63 61 6e 20 20  E_CoverIdxScan  
d980: 20 30 78 30 30 34 30 20 20 20 2f 2a 20 43 6f 76   0x0040   /* Cov
d990: 65 72 69 6e 67 20 69 6e 64 65 78 20 73 63 61 6e  ering index scan
d9a0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
d9b0: 49 54 45 5f 4f 72 64 65 72 42 79 49 64 78 4a 6f  ITE_OrderByIdxJo
d9c0: 69 6e 20 30 78 30 30 38 30 20 20 20 2f 2a 20 4f  in 0x0080   /* O
d9d0: 52 44 45 52 20 42 59 20 6f 66 20 6a 6f 69 6e 73  RDER BY of joins
d9e0: 20 76 69 61 20 69 6e 64 65 78 20 2a 2f 0a 23 64   via index */.#d
d9f0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 75 62  efine SQLITE_Sub
da00: 71 43 6f 72 6f 75 74 69 6e 65 20 20 30 78 30 31  qCoroutine  0x01
da10: 30 30 20 20 20 2f 2a 20 45 76 61 6c 75 61 74 65  00   /* Evaluate
da20: 20 73 75 62 71 75 65 72 69 65 73 20 61 73 20 63   subqueries as c
da30: 6f 72 6f 75 74 69 6e 65 73 20 2a 2f 0a 23 64 65  oroutines */.#de
da40: 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 72 61 6e  fine SQLITE_Tran
da50: 73 69 74 69 76 65 20 20 20 20 20 30 78 30 32 30  sitive     0x020
da60: 30 20 20 20 2f 2a 20 54 72 61 6e 73 69 74 69 76  0   /* Transitiv
da70: 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  e constraints */
da80: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
da90: 4f 6d 69 74 4e 6f 6f 70 4a 6f 69 6e 20 20 20 30  OmitNoopJoin   0
daa0: 78 30 34 30 30 20 20 20 2f 2a 20 4f 6d 69 74 20  x0400   /* Omit 
dab0: 75 6e 75 73 65 64 20 74 61 62 6c 65 73 20 69 6e  unused tables in
dac0: 20 6a 6f 69 6e 73 20 2a 2f 0a 23 64 65 66 69 6e   joins */.#defin
dad0: 65 20 53 51 4c 49 54 45 5f 53 74 61 74 33 34 20  e SQLITE_Stat34 
dae0: 20 20 20 20 20 20 20 20 30 78 30 38 30 30 20 20          0x0800  
daf0: 20 2f 2a 20 55 73 65 20 53 54 41 54 33 20 6f 72   /* Use STAT3 or
db00: 20 53 54 41 54 34 20 64 61 74 61 20 2a 2f 0a 23   STAT4 data */.#
db10: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 75  define SQLITE_Cu
db20: 72 73 6f 72 48 69 6e 74 73 20 20 20 20 30 78 32  rsorHints    0x2
db30: 30 30 30 20 20 20 2f 2a 20 41 64 64 20 4f 50 5f  000   /* Add OP_
db40: 43 75 72 73 6f 72 48 69 6e 74 20 6f 70 63 6f 64  CursorHint opcod
db50: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
db60: 4c 49 54 45 5f 41 6c 6c 4f 70 74 73 20 20 20 20  LITE_AllOpts    
db70: 20 20 20 20 30 78 66 66 66 66 20 20 20 2f 2a 20      0xffff   /* 
db80: 41 6c 6c 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  All optimization
db90: 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72  s */../*.** Macr
dba0: 6f 73 20 66 6f 72 20 74 65 73 74 69 6e 67 20 77  os for testing w
dbb0: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 6f 70  hether or not op
dbc0: 74 69 6d 69 7a 61 74 69 6f 6e 73 20 61 72 65 20  timizations are 
dbd0: 65 6e 61 62 6c 65 64 20 6f 72 20 64 69 73 61 62  enabled or disab
dbe0: 6c 65 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  led..*/.#define 
dbf0: 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61  OptimizationDisa
dc00: 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20  bled(db, mask)  
dc10: 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61  (((db)->dbOptFla
dc20: 67 73 26 28 6d 61 73 6b 29 29 21 3d 30 29 0a 23  gs&(mask))!=0).#
dc30: 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74  define Optimizat
dc40: 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d  ionEnabled(db, m
dc50: 61 73 6b 29 20 20 20 28 28 28 64 62 29 2d 3e 64  ask)   (((db)->d
dc60: 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29  bOptFlags&(mask)
dc70: 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  )==0)../*.** Ret
dc80: 75 72 6e 20 74 72 75 65 20 69 66 20 69 74 20 4f  urn true if it O
dc90: 4b 20 74 6f 20 66 61 63 74 6f 72 20 63 6f 6e 73  K to factor cons
dca0: 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73  tant expressions
dcb0: 20 69 6e 74 6f 20 74 68 65 20 69 6e 69 74 69 61   into the initia
dcc0: 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 63 6f 64 65  lization.** code
dcd0: 2e 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20 69  . The argument i
dce0: 73 20 61 20 50 61 72 73 65 20 6f 62 6a 65 63 74  s a Parse object
dcf0: 20 66 6f 72 20 74 68 65 20 63 6f 64 65 20 67 65   for the code ge
dd00: 6e 65 72 61 74 6f 72 2e 0a 2a 2f 0a 23 64 65 66  nerator..*/.#def
dd10: 69 6e 65 20 43 6f 6e 73 74 46 61 63 74 6f 72 4f  ine ConstFactorO
dd20: 6b 28 50 29 20 28 28 50 29 2d 3e 6f 6b 43 6f 6e  k(P) ((P)->okCon
dd30: 73 74 46 61 63 74 6f 72 29 0a 0a 2f 2a 0a 2a 2a  stFactor)../*.**
dd40: 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73   Possible values
dd50: 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 2e   for the sqlite.
dd60: 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a 2a 2a 20  magic field..** 
dd70: 54 68 65 20 6e 75 6d 62 65 72 73 20 61 72 65 20  The numbers are 
dd80: 6f 62 74 61 69 6e 65 64 20 61 74 20 72 61 6e 64  obtained at rand
dd90: 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e 6f 20 73  om and have no s
dda0: 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 2c 20  pecial meaning, 
ddb0: 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e 20 62 65  other.** than be
ddc0: 69 6e 67 20 64 69 73 74 69 6e 63 74 20 66 72 6f  ing distinct fro
ddd0: 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a 2a  m one another..*
dde0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ddf0: 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20 20 20 20  _MAGIC_OPEN     
de00: 30 78 61 30 32 39 61 36 39 37 20 20 2f 2a 20 44  0xa029a697  /* D
de10: 61 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e 20  atabase is open 
de20: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
de30: 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20 20  E_MAGIC_CLOSED  
de40: 20 30 78 39 66 33 63 32 64 33 33 20 20 2f 2a 20   0x9f3c2d33  /* 
de50: 44 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73  Database is clos
de60: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ed */.#define SQ
de70: 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49 43 4b 20  LITE_MAGIC_SICK 
de80: 20 20 20 20 30 78 34 62 37 37 31 32 39 30 20 20      0x4b771290  
de90: 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20 61 77 61  /* Error and awa
dea0: 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a 2f 0a 23  iting close */.#
deb0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
dec0: 47 49 43 5f 42 55 53 59 20 20 20 20 20 30 78 66  GIC_BUSY     0xf
ded0: 30 33 62 37 39 30 36 20 20 2f 2a 20 44 61 74 61  03b7906  /* Data
dee0: 62 61 73 65 20 63 75 72 72 65 6e 74 6c 79 20 69  base currently i
def0: 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65  n use */.#define
df00: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52   SQLITE_MAGIC_ER
df10: 52 4f 52 20 20 20 20 30 78 62 35 33 35 37 39 33  ROR    0xb535793
df20: 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49 54 45 5f  0  /* An SQLITE_
df30: 4d 49 53 55 53 45 20 65 72 72 6f 72 20 6f 63 63  MISUSE error occ
df40: 75 72 72 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  urred */.#define
df50: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 5a 4f   SQLITE_MAGIC_ZO
df60: 4d 42 49 45 20 20 20 30 78 36 34 63 66 66 63 37  MBIE   0x64cffc7
df70: 66 20 20 2f 2a 20 43 6c 6f 73 65 20 77 69 74 68  f  /* Close with
df80: 20 6c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20   last statement 
df90: 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  close */../*.** 
dfa0: 45 61 63 68 20 53 51 4c 20 66 75 6e 63 74 69 6f  Each SQL functio
dfb0: 6e 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20  n is defined by 
dfc0: 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
dfd0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20  he following.** 
dfe0: 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f 72 20  structure.  For 
dff0: 67 6c 6f 62 61 6c 20 62 75 69 6c 74 2d 69 6e 20  global built-in 
e000: 66 75 6e 63 74 69 6f 6e 73 20 28 65 78 3a 20 73  functions (ex: s
e010: 75 62 73 74 72 28 29 2c 20 6d 61 78 28 29 2c 20  ubstr(), max(), 
e020: 63 6f 75 6e 74 28 29 29 0a 2a 2a 20 61 20 70 6f  count()).** a po
e030: 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74  inter to this st
e040: 72 75 63 74 75 72 65 20 69 73 20 68 65 6c 64 20  ructure is held 
e050: 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33 42 75  in the sqlite3Bu
e060: 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 20 6f  iltinFunctions o
e070: 62 6a 65 63 74 2e 0a 2a 2a 20 46 6f 72 20 70 65  bject..** For pe
e080: 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 70 70  r-connection app
e090: 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64  lication-defined
e0a0: 20 66 75 6e 63 74 69 6f 6e 73 2c 20 61 20 70 6f   functions, a po
e0b0: 69 6e 74 65 72 20 74 6f 20 74 68 69 73 0a 2a 2a  inter to this.**
e0c0: 20 73 74 72 75 63 74 75 72 65 20 69 73 20 68 65   structure is he
e0d0: 6c 64 20 69 6e 20 74 68 65 20 64 62 2d 3e 61 48  ld in the db->aH
e0e0: 61 73 68 20 68 61 73 68 20 74 61 62 6c 65 2e 0a  ash hash table..
e0f0: 2a 2a 0a 2a 2a 20 54 68 65 20 75 2e 70 48 61 73  **.** The u.pHas
e100: 68 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20  h field is used 
e110: 62 79 20 74 68 65 20 67 6c 6f 62 61 6c 20 62 75  by the global bu
e120: 69 6c 74 2d 69 6e 73 2e 20 20 54 68 65 20 75 2e  ilt-ins.  The u.
e130: 70 44 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 66  pDestructor.** f
e140: 69 65 6c 64 20 69 73 20 75 73 65 64 20 62 79 20  ield is used by 
e150: 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 61  per-connection a
e160: 70 70 2d 64 65 66 20 66 75 6e 63 74 69 6f 6e 73  pp-def functions
e170: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63  ..*/.struct Func
e180: 44 65 66 20 7b 0a 20 20 69 38 20 6e 41 72 67 3b  Def {.  i8 nArg;
e190: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
e1a0: 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
e1b0: 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e 73 20 75  nts.  -1 means u
e1c0: 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20 20 75 31  nlimited */.  u1
e1d0: 36 20 66 75 6e 63 46 6c 61 67 73 3b 20 20 20 20  6 funcFlags;    
e1e0: 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62 69     /* Some combi
e1f0: 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c 49 54 45  nation of SQLITE
e200: 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69  _FUNC_* */.  voi
e210: 64 20 2a 70 55 73 65 72 44 61 74 61 3b 20 20 20  d *pUserData;   
e220: 20 20 2f 2a 20 55 73 65 72 20 64 61 74 61 20 70    /* User data p
e230: 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20 46 75  arameter */.  Fu
e240: 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b 20 20 20  ncDef *pNext;   
e250: 20 20 20 2f 2a 20 4e 65 78 74 20 66 75 6e 63 74     /* Next funct
e260: 69 6f 6e 20 77 69 74 68 20 73 61 6d 65 20 6e 61  ion with same na
e270: 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  me */.  void (*x
e280: 53 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63  SFunc)(sqlite3_c
e290: 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
e2a0: 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a  te3_value**); /*
e2b0: 20 66 75 6e 63 20 6f 72 20 61 67 67 2d 73 74 65   func or agg-ste
e2c0: 70 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46  p */.  void (*xF
e2d0: 69 6e 61 6c 69 7a 65 29 28 73 71 6c 69 74 65 33  inalize)(sqlite3
e2e0: 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20 20 20  _context*);     
e2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
e300: 41 67 67 20 66 69 6e 61 6c 69 7a 65 72 20 2a 2f  Agg finalizer */
e310: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
e320: 4e 61 6d 65 3b 20 20 20 2f 2a 20 53 51 4c 20 6e  Name;   /* SQL n
e330: 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ame of the funct
e340: 69 6f 6e 2e 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  ion. */.  union 
e350: 7b 0a 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70  {.    FuncDef *p
e360: 48 61 73 68 3b 20 20 20 20 20 20 2f 2a 20 4e 65  Hash;      /* Ne
e370: 78 74 20 77 69 74 68 20 61 20 64 69 66 66 65 72  xt with a differ
e380: 65 6e 74 20 6e 61 6d 65 20 62 75 74 20 74 68 65  ent name but the
e390: 20 73 61 6d 65 20 68 61 73 68 20 2a 2f 0a 20 20   same hash */.  
e3a0: 20 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72    FuncDestructor
e3b0: 20 2a 70 44 65 73 74 72 75 63 74 6f 72 3b 20 20   *pDestructor;  
e3c0: 20 2f 2a 20 52 65 66 65 72 65 6e 63 65 20 63 6f   /* Reference co
e3d0: 75 6e 74 65 64 20 64 65 73 74 72 75 63 74 6f 72  unted destructor
e3e0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 7d   function */.  }
e3f0: 20 75 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   u;.};../*.** Th
e400: 69 73 20 73 74 72 75 63 74 75 72 65 20 65 6e 63  is structure enc
e410: 61 70 73 75 6c 61 74 65 73 20 61 20 75 73 65 72  apsulates a user
e420: 2d 66 75 6e 63 74 69 6f 6e 20 64 65 73 74 72 75  -function destru
e430: 63 74 6f 72 20 63 61 6c 6c 62 61 63 6b 20 28 61  ctor callback (a
e440: 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20  s.** configured 
e450: 75 73 69 6e 67 20 63 72 65 61 74 65 5f 66 75 6e  using create_fun
e460: 63 74 69 6f 6e 5f 76 32 28 29 29 20 61 6e 64 20  ction_v2()) and 
e470: 61 20 72 65 66 65 72 65 6e 63 65 20 63 6f 75 6e  a reference coun
e480: 74 65 72 2e 20 57 68 65 6e 0a 2a 2a 20 63 72 65  ter. When.** cre
e490: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28  ate_function_v2(
e4a0: 29 20 69 73 20 63 61 6c 6c 65 64 20 74 6f 20 63  ) is called to c
e4b0: 72 65 61 74 65 20 61 20 66 75 6e 63 74 69 6f 6e  reate a function
e4c0: 20 77 69 74 68 20 61 20 64 65 73 74 72 75 63 74   with a destruct
e4d0: 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20  or,.** a single 
e4e0: 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74  object of this t
e4f0: 79 70 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64  ype is allocated
e500: 2e 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72  . FuncDestructor
e510: 2e 6e 52 65 66 20 69 73 20 73 65 74 20 74 6f 0a  .nRef is set to.
e520: 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ** the number of
e530: 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73   FuncDef objects
e540: 20 63 72 65 61 74 65 64 20 28 65 69 74 68 65 72   created (either
e550: 20 31 20 6f 72 20 33 2c 20 64 65 70 65 6e 64 69   1 or 3, dependi
e560: 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a  ng on whether.**
e570: 20 6f 72 20 6e 6f 74 20 74 68 65 20 73 70 65 63   or not the spec
e580: 69 66 69 65 64 20 65 6e 63 6f 64 69 6e 67 20 69  ified encoding i
e590: 73 20 53 51 4c 49 54 45 5f 41 4e 59 29 2e 20 54  s SQLITE_ANY). T
e5a0: 68 65 20 46 75 6e 63 44 65 66 2e 70 44 65 73 74  he FuncDef.pDest
e5b0: 72 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d 62 65 72  ructor.** member
e5c0: 20 6f 66 20 65 61 63 68 20 6f 66 20 74 68 65 20   of each of the 
e5d0: 6e 65 77 20 46 75 6e 63 44 65 66 20 6f 62 6a 65  new FuncDef obje
e5e0: 63 74 73 20 69 73 20 73 65 74 20 74 6f 20 70 6f  cts is set to po
e5f0: 69 6e 74 20 74 6f 20 74 68 65 20 61 6c 6c 6f 63  int to the alloc
e600: 61 74 65 64 0a 2a 2a 20 46 75 6e 63 44 65 73 74  ated.** FuncDest
e610: 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68  ructor..**.** Th
e620: 65 72 65 61 66 74 65 72 2c 20 77 68 65 6e 20 6f  ereafter, when o
e630: 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65  ne of the FuncDe
e640: 66 20 6f 62 6a 65 63 74 73 20 69 73 20 64 65 6c  f objects is del
e650: 65 74 65 64 2c 20 74 68 65 20 72 65 66 65 72 65  eted, the refere
e660: 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74 20 6f 6e 20  nce.** count on 
e670: 74 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20 64  this object is d
e680: 65 63 72 65 6d 65 6e 74 65 64 2e 20 57 68 65 6e  ecremented. When
e690: 20 69 74 20 72 65 61 63 68 65 73 20 30 2c 20 74   it reaches 0, t
e6a0: 68 65 20 64 65 73 74 72 75 63 74 6f 72 0a 2a 2a  he destructor.**
e6b0: 20 69 73 20 69 6e 76 6f 6b 65 64 20 61 6e 64 20   is invoked and 
e6c0: 74 68 65 20 46 75 6e 63 44 65 73 74 72 75 63 74  the FuncDestruct
e6d0: 6f 72 20 73 74 72 75 63 74 75 72 65 20 66 72 65  or structure fre
e6e0: 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75  ed..*/.struct Fu
e6f0: 6e 63 44 65 73 74 72 75 63 74 6f 72 20 7b 0a 20  ncDestructor {. 
e700: 20 69 6e 74 20 6e 52 65 66 3b 0a 20 20 76 6f 69   int nRef;.  voi
e710: 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f  d (*xDestroy)(vo
e720: 69 64 20 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70  id *);.  void *p
e730: 55 73 65 72 44 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a  UserData;.};../*
e740: 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c  .** Possible val
e750: 75 65 73 20 66 6f 72 20 46 75 6e 63 44 65 66 2e  ues for FuncDef.
e760: 66 6c 61 67 73 2e 20 20 4e 6f 74 65 20 74 68 61  flags.  Note tha
e770: 74 20 74 68 65 20 5f 4c 45 4e 47 54 48 20 61 6e  t the _LENGTH an
e780: 64 20 5f 54 59 50 45 4f 46 0a 2a 2a 20 76 61 6c  d _TYPEOF.** val
e790: 75 65 73 20 6d 75 73 74 20 63 6f 72 72 65 73 70  ues must corresp
e7a0: 6f 6e 64 20 74 6f 20 4f 50 46 4c 41 47 5f 4c 45  ond to OPFLAG_LE
e7b0: 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46 4c  NGTHARG and OPFL
e7c0: 41 47 5f 54 59 50 45 4f 46 41 52 47 2e 20 20 41  AG_TYPEOFARG.  A
e7d0: 6e 64 0a 2a 2a 20 53 51 4c 49 54 45 5f 46 55 4e  nd.** SQLITE_FUN
e7e0: 43 5f 43 4f 4e 53 54 41 4e 54 20 6d 75 73 74 20  C_CONSTANT must 
e7f0: 62 65 20 74 68 65 20 73 61 6d 65 20 61 73 20 53  be the same as S
e800: 51 4c 49 54 45 5f 44 45 54 45 52 4d 49 4e 49 53  QLITE_DETERMINIS
e810: 54 49 43 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61  TIC.  There.** a
e820: 72 65 20 61 73 73 65 72 74 28 29 20 73 74 61 74  re assert() stat
e830: 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 63 6f  ements in the co
e840: 64 65 20 74 6f 20 76 65 72 69 66 79 20 74 68 69  de to verify thi
e850: 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63  s..**.** Value c
e860: 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f  onstraints (enfo
e870: 72 63 65 64 20 76 69 61 20 61 73 73 65 72 74 28  rced via assert(
e880: 29 29 3a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54  )):.**     SQLIT
e890: 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 20 20 20  E_FUNC_MINMAX   
e8a0: 20 3d 3d 20 20 4e 43 5f 4d 69 6e 4d 61 78 41 67   ==  NC_MinMaxAg
e8b0: 67 20 20 20 20 20 20 3d 3d 20 53 46 5f 4d 69 6e  g      == SF_Min
e8c0: 4d 61 78 41 67 67 0a 2a 2a 20 20 20 20 20 53 51  MaxAgg.**     SQ
e8d0: 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48  LITE_FUNC_LENGTH
e8e0: 20 20 20 20 3d 3d 20 20 4f 50 46 4c 41 47 5f 4c      ==  OPFLAG_L
e8f0: 45 4e 47 54 48 41 52 47 0a 2a 2a 20 20 20 20 20  ENGTHARG.**     
e900: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50 45  SQLITE_FUNC_TYPE
e910: 4f 46 20 20 20 20 3d 3d 20 20 4f 50 46 4c 41 47  OF    ==  OPFLAG
e920: 5f 54 59 50 45 4f 46 41 52 47 0a 2a 2a 20 20 20  _TYPEOFARG.**   
e930: 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f    SQLITE_FUNC_CO
e940: 4e 53 54 41 4e 54 20 20 3d 3d 20 20 53 51 4c 49  NSTANT  ==  SQLI
e950: 54 45 5f 44 45 54 45 52 4d 49 4e 49 53 54 49 43  TE_DETERMINISTIC
e960: 20 66 72 6f 6d 20 74 68 65 20 41 50 49 0a 2a 2a   from the API.**
e970: 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43       SQLITE_FUNC
e980: 5f 45 4e 43 4d 41 53 4b 20 20 20 64 65 70 65 6e  _ENCMASK   depen
e990: 64 73 20 6f 6e 20 53 51 4c 49 54 45 5f 55 54 46  ds on SQLITE_UTF
e9a0: 2a 20 6d 61 63 72 6f 73 20 69 6e 20 74 68 65 20  * macros in the 
e9b0: 41 50 49 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  API.*/.#define S
e9c0: 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43 4d 41  QLITE_FUNC_ENCMA
e9d0: 53 4b 20 20 30 78 30 30 30 33 20 2f 2a 20 53 51  SK  0x0003 /* SQ
e9e0: 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54  LITE_UTF8, SQLIT
e9f0: 45 5f 55 54 46 31 36 42 45 20 6f 72 20 55 54 46  E_UTF16BE or UTF
ea00: 31 36 4c 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  16LE */.#define 
ea10: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 49 4b 45  SQLITE_FUNC_LIKE
ea20: 20 20 20 20 20 30 78 30 30 30 34 20 2f 2a 20 43       0x0004 /* C
ea30: 61 6e 64 69 64 61 74 65 20 66 6f 72 20 74 68 65  andidate for the
ea40: 20 4c 49 4b 45 20 6f 70 74 69 6d 69 7a 61 74 69   LIKE optimizati
ea50: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
ea60: 4c 49 54 45 5f 46 55 4e 43 5f 43 41 53 45 20 20  LITE_FUNC_CASE  
ea70: 20 20 20 30 78 30 30 30 38 20 2f 2a 20 43 61 73     0x0008 /* Cas
ea80: 65 2d 73 65 6e 73 69 74 69 76 65 20 4c 49 4b 45  e-sensitive LIKE
ea90: 2d 74 79 70 65 20 66 75 6e 63 74 69 6f 6e 20 2a  -type function *
eaa0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
eab0: 5f 46 55 4e 43 5f 45 50 48 45 4d 20 20 20 20 30  _FUNC_EPHEM    0
eac0: 78 30 30 31 30 20 2f 2a 20 45 70 68 65 6d 65 72  x0010 /* Ephemer
ead0: 61 6c 2e 20 20 44 65 6c 65 74 65 20 77 69 74 68  al.  Delete with
eae0: 20 56 44 42 45 20 2a 2f 0a 23 64 65 66 69 6e 65   VDBE */.#define
eaf0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45   SQLITE_FUNC_NEE
eb00: 44 43 4f 4c 4c 20 30 78 30 30 32 30 20 2f 2a 20  DCOLL 0x0020 /* 
eb10: 73 71 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f  sqlite3GetFuncCo
eb20: 6c 6c 53 65 71 28 29 20 6d 69 67 68 74 20 62 65  llSeq() might be
eb30: 20 63 61 6c 6c 65 64 2a 2f 0a 23 64 65 66 69 6e   called*/.#defin
eb40: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45  e SQLITE_FUNC_LE
eb50: 4e 47 54 48 20 20 20 30 78 30 30 34 30 20 2f 2a  NGTH   0x0040 /*
eb60: 20 42 75 69 6c 74 2d 69 6e 20 6c 65 6e 67 74 68   Built-in length
eb70: 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  () function */.#
eb80: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
eb90: 4e 43 5f 54 59 50 45 4f 46 20 20 20 30 78 30 30  NC_TYPEOF   0x00
eba0: 38 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 74  80 /* Built-in t
ebb0: 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e  ypeof() function
ebc0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
ebd0: 54 45 5f 46 55 4e 43 5f 43 4f 55 4e 54 20 20 20  TE_FUNC_COUNT   
ebe0: 20 30 78 30 31 30 30 20 2f 2a 20 42 75 69 6c 74   0x0100 /* Built
ebf0: 2d 69 6e 20 63 6f 75 6e 74 28 2a 29 20 61 67 67  -in count(*) agg
ec00: 72 65 67 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e  regate */.#defin
ec10: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  e SQLITE_FUNC_CO
ec20: 41 4c 45 53 43 45 20 30 78 30 32 30 30 20 2f 2a  ALESCE 0x0200 /*
ec30: 20 42 75 69 6c 74 2d 69 6e 20 63 6f 61 6c 65 73   Built-in coales
ec40: 63 65 28 29 20 6f 72 20 69 66 6e 75 6c 6c 28 29  ce() or ifnull()
ec50: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
ec60: 54 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b 45 4c 59  TE_FUNC_UNLIKELY
ec70: 20 30 78 30 34 30 30 20 2f 2a 20 42 75 69 6c 74   0x0400 /* Built
ec80: 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79 28 29 20 66  -in unlikely() f
ec90: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
eca0: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  ne SQLITE_FUNC_C
ecb0: 4f 4e 53 54 41 4e 54 20 30 78 30 38 30 30 20 2f  ONSTANT 0x0800 /
ecc0: 2a 20 43 6f 6e 73 74 61 6e 74 20 69 6e 70 75 74  * Constant input
ecd0: 73 20 67 69 76 65 20 61 20 63 6f 6e 73 74 61 6e  s give a constan
ece0: 74 20 6f 75 74 70 75 74 20 2a 2f 0a 23 64 65 66  t output */.#def
ecf0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
ed00: 4d 49 4e 4d 41 58 20 20 20 30 78 31 30 30 30 20  MINMAX   0x1000 
ed10: 2f 2a 20 54 72 75 65 20 66 6f 72 20 6d 69 6e 28  /* True for min(
ed20: 29 20 61 6e 64 20 6d 61 78 28 29 20 61 67 67 72  ) and max() aggr
ed30: 65 67 61 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e  egates */.#defin
ed40: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c  e SQLITE_FUNC_SL
ed50: 4f 43 48 4e 47 20 20 30 78 32 30 30 30 20 2f 2a  OCHNG  0x2000 /*
ed60: 20 22 53 6c 6f 77 20 43 68 61 6e 67 65 22 2e 20   "Slow Change". 
ed70: 56 61 6c 75 65 20 63 6f 6e 73 74 61 6e 74 20 64  Value constant d
ed80: 75 72 69 6e 67 20 61 0a 20 20 20 20 20 20 20 20  uring a.        
ed90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eda0: 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 73              ** s
edb0: 69 6e 67 6c 65 20 71 75 65 72 79 20 2d 20 6d 69  ingle query - mi
edc0: 67 68 74 20 63 68 61 6e 67 65 20 6f 76 65 72 20  ght change over 
edd0: 74 69 6d 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  time */.#define 
ede0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 41 46 46 49  SQLITE_FUNC_AFFI
edf0: 4e 49 54 59 20 30 78 34 30 30 30 20 2f 2a 20 42  NITY 0x4000 /* B
ee00: 75 69 6c 74 2d 69 6e 20 61 66 66 69 6e 69 74 79  uilt-in affinity
ee10: 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 0a  () function */..
ee20: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
ee30: 69 6e 67 20 74 68 72 65 65 20 6d 61 63 72 6f 73  ing three macros
ee40: 2c 20 46 55 4e 43 54 49 4f 4e 28 29 2c 20 4c 49  , FUNCTION(), LI
ee50: 4b 45 46 55 4e 43 28 29 20 61 6e 64 20 41 47 47  KEFUNC() and AGG
ee60: 52 45 47 41 54 45 28 29 20 61 72 65 0a 2a 2a 20  REGATE() are.** 
ee70: 75 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 74  used to create t
ee80: 68 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 73 20  he initializers 
ee90: 66 6f 72 20 74 68 65 20 46 75 6e 63 44 65 66 20  for the FuncDef 
eea0: 73 74 72 75 63 74 75 72 65 73 2e 0a 2a 2a 0a 2a  structures..**.*
eeb0: 2a 20 20 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61  *   FUNCTION(zNa
eec0: 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
eed0: 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20  bNC, xFunc).**  
eee0: 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74     Used to creat
eef0: 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74  e a scalar funct
ef00: 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f  ion definition o
ef10: 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61  f a function zNa
ef20: 6d 65 0a 2a 2a 20 20 20 20 20 69 6d 70 6c 65 6d  me.**     implem
ef30: 65 6e 74 65 64 20 62 79 20 43 20 66 75 6e 63 74  ented by C funct
ef40: 69 6f 6e 20 78 46 75 6e 63 20 74 68 61 74 20 61  ion xFunc that a
ef50: 63 63 65 70 74 73 20 6e 41 72 67 20 61 72 67 75  ccepts nArg argu
ef60: 6d 65 6e 74 73 2e 20 54 68 65 0a 2a 2a 20 20 20  ments. The.**   
ef70: 20 20 76 61 6c 75 65 20 70 61 73 73 65 64 20 61    value passed a
ef80: 73 20 69 41 72 67 20 69 73 20 63 61 73 74 20 74  s iArg is cast t
ef90: 6f 20 61 20 28 76 6f 69 64 2a 29 20 61 6e 64 20  o a (void*) and 
efa0: 6d 61 64 65 20 61 76 61 69 6c 61 62 6c 65 0a 2a  made available.*
efb0: 2a 20 20 20 20 20 61 73 20 74 68 65 20 75 73 65  *     as the use
efc0: 72 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f  r-data (sqlite3_
efd0: 75 73 65 72 5f 64 61 74 61 28 29 29 20 66 6f 72  user_data()) for
efe0: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 49   the function. I
eff0: 66 0a 2a 2a 20 20 20 20 20 61 72 67 75 6d 65 6e  f.**     argumen
f000: 74 20 62 4e 43 20 69 73 20 74 72 75 65 2c 20 74  t bNC is true, t
f010: 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 46  hen the SQLITE_F
f020: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c 61  UNC_NEEDCOLL fla
f030: 67 20 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20  g is set..**.** 
f040: 20 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d    VFUNCTION(zNam
f050: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
f060: 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20  NC, xFunc).**   
f070: 20 20 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20    Like FUNCTION 
f080: 65 78 63 65 70 74 20 69 74 20 6f 6d 69 74 73 20  except it omits 
f090: 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  the SQLITE_FUNC_
f0a0: 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67 2e 0a 2a  CONSTANT flag..*
f0b0: 2a 0a 2a 2a 20 20 20 44 46 55 4e 43 54 49 4f 4e  *.**   DFUNCTION
f0c0: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
f0d0: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a  rg, bNC, xFunc).
f0e0: 2a 2a 20 20 20 20 20 4c 69 6b 65 20 46 55 4e 43  **     Like FUNC
f0f0: 54 49 4f 4e 20 65 78 63 65 70 74 20 69 74 20 6f  TION except it o
f100: 6d 69 74 73 20 74 68 65 20 53 51 4c 49 54 45 5f  mits the SQLITE_
f110: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c  FUNC_CONSTANT fl
f120: 61 67 20 61 6e 64 0a 2a 2a 20 20 20 20 20 61 64  ag and.**     ad
f130: 64 73 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55  ds the SQLITE_FU
f140: 4e 43 5f 53 4c 4f 43 48 4e 47 20 66 6c 61 67 2e  NC_SLOCHNG flag.
f150: 20 20 55 73 65 64 20 66 6f 72 20 64 61 74 65 20    Used for date 
f160: 26 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73  & time functions
f170: 0a 2a 2a 20 20 20 20 20 61 6e 64 20 66 75 6e 63  .**     and func
f180: 74 69 6f 6e 73 20 6c 69 6b 65 20 73 71 6c 69 74  tions like sqlit
f190: 65 5f 76 65 72 73 69 6f 6e 28 29 20 74 68 61 74  e_version() that
f1a0: 20 63 61 6e 20 63 68 61 6e 67 65 2c 20 62 75 74   can change, but
f1b0: 20 6e 6f 74 20 64 75 72 69 6e 67 0a 2a 2a 20 20   not during.**  
f1c0: 20 20 20 61 20 73 69 6e 67 6c 65 20 71 75 65 72     a single quer
f1d0: 79 2e 0a 2a 2a 0a 2a 2a 20 20 20 41 47 47 52 45  y..**.**   AGGRE
f1e0: 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  GATE(zName, nArg
f1f0: 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 53 74  , iArg, bNC, xSt
f200: 65 70 2c 20 78 46 69 6e 61 6c 29 0a 2a 2a 20 20  ep, xFinal).**  
f210: 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74     Used to creat
f220: 65 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 66  e an aggregate f
f230: 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69  unction definiti
f240: 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62  on implemented b
f250: 79 0a 2a 2a 20 20 20 20 20 74 68 65 20 43 20 66  y.**     the C f
f260: 75 6e 63 74 69 6f 6e 73 20 78 53 74 65 70 20 61  unctions xStep a
f270: 6e 64 20 78 46 69 6e 61 6c 2e 20 54 68 65 20 66  nd xFinal. The f
f280: 69 72 73 74 20 66 6f 75 72 20 70 61 72 61 6d 65  irst four parame
f290: 74 65 72 73 0a 2a 2a 20 20 20 20 20 61 72 65 20  ters.**     are 
f2a0: 69 6e 74 65 72 70 72 65 74 65 64 20 69 6e 20 74  interpreted in t
f2b0: 68 65 20 73 61 6d 65 20 77 61 79 20 61 73 20 74  he same way as t
f2c0: 68 65 20 66 69 72 73 74 20 34 20 70 61 72 61 6d  he first 4 param
f2d0: 65 74 65 72 73 20 74 6f 0a 2a 2a 20 20 20 20 20  eters to.**     
f2e0: 46 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a  FUNCTION()..**.*
f2f0: 2a 20 20 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61  *   LIKEFUNC(zNa
f300: 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20  me, nArg, pArg, 
f310: 66 6c 61 67 73 29 0a 2a 2a 20 20 20 20 20 55 73  flags).**     Us
f320: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 73  ed to create a s
f330: 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64  calar function d
f340: 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66  efinition of a f
f350: 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a  unction zName.**
f360: 20 20 20 20 20 74 68 61 74 20 61 63 63 65 70 74       that accept
f370: 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73  s nArg arguments
f380: 20 61 6e 64 20 69 73 20 69 6d 70 6c 65 6d 65 6e   and is implemen
f390: 74 65 64 20 62 79 20 61 20 63 61 6c 6c 20 74 6f  ted by a call to
f3a0: 20 43 0a 2a 2a 20 20 20 20 20 66 75 6e 63 74 69   C.**     functi
f3b0: 6f 6e 20 6c 69 6b 65 46 75 6e 63 2e 20 41 72 67  on likeFunc. Arg
f3c0: 75 6d 65 6e 74 20 70 41 72 67 20 69 73 20 63 61  ument pArg is ca
f3d0: 73 74 20 74 6f 20 61 20 28 76 6f 69 64 20 2a 29  st to a (void *)
f3e0: 20 61 6e 64 20 6d 61 64 65 0a 2a 2a 20 20 20 20   and made.**    
f3f0: 20 61 76 61 69 6c 61 62 6c 65 20 61 73 20 74 68   available as th
f400: 65 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 72 2d  e function user-
f410: 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73  data (sqlite3_us
f420: 65 72 5f 64 61 74 61 28 29 29 2e 20 54 68 65 0a  er_data()). The.
f430: 2a 2a 20 20 20 20 20 46 75 6e 63 44 65 66 2e 66  **     FuncDef.f
f440: 6c 61 67 73 20 76 61 72 69 61 62 6c 65 20 69 73  lags variable is
f450: 20 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75   set to the valu
f460: 65 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20  e passed as the 
f470: 66 6c 61 67 73 0a 2a 2a 20 20 20 20 20 70 61 72  flags.**     par
f480: 61 6d 65 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69  ameter..*/.#defi
f490: 6e 65 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d  ne FUNCTION(zNam
f4a0: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
f4b0: 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b  NC, xFunc) \.  {
f4c0: 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e  nArg, SQLITE_FUN
f4d0: 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54  C_CONSTANT|SQLIT
f4e0: 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49  E_UTF8|(bNC*SQLI
f4f0: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
f500: 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49  ), \.   SQLITE_I
f510: 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c  NT_TO_PTR(iArg),
f520: 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23 7a   0, xFunc, 0, #z
f530: 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66  Name, {0} }.#def
f540: 69 6e 65 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e  ine VFUNCTION(zN
f550: 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c  ame, nArg, iArg,
f560: 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20   bNC, xFunc) \. 
f570: 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55   {nArg, SQLITE_U
f580: 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f  TF8|(bNC*SQLITE_
f590: 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20  FUNC_NEEDCOLL), 
f5a0: 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
f5b0: 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c  TO_PTR(iArg), 0,
f5c0: 20 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d   xFunc, 0, #zNam
f5d0: 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65  e, {0} }.#define
f5e0: 20 44 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65   DFUNCTION(zName
f5f0: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
f600: 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e  C, xFunc) \.  {n
f610: 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43  Arg, SQLITE_FUNC
f620: 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f  _SLOCHNG|SQLITE_
f630: 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45  UTF8|(bNC*SQLITE
f640: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c  _FUNC_NEEDCOLL),
f650: 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54   \.   SQLITE_INT
f660: 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30  _TO_PTR(iArg), 0
f670: 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61  , xFunc, 0, #zNa
f680: 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e  me, {0} }.#defin
f690: 65 20 46 55 4e 43 54 49 4f 4e 32 28 7a 4e 61 6d  e FUNCTION2(zNam
f6a0: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
f6b0: 4e 43 2c 20 78 46 75 6e 63 2c 20 65 78 74 72 61  NC, xFunc, extra
f6c0: 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67  Flags) \.  {nArg
f6d0: 2c 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e  ,SQLITE_FUNC_CON
f6e0: 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46  STANT|SQLITE_UTF
f6f0: 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55  8|(bNC*SQLITE_FU
f700: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74  NC_NEEDCOLL)|ext
f710: 72 61 46 6c 61 67 73 2c 5c 0a 20 20 20 53 51 4c  raFlags,\.   SQL
f720: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69  ITE_INT_TO_PTR(i
f730: 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20  Arg), 0, xFunc, 
f740: 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d  0, #zName, {0} }
f750: 0a 23 64 65 66 69 6e 65 20 53 54 52 5f 46 55 4e  .#define STR_FUN
f760: 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
f770: 67 2c 20 70 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, pArg, bNC, xF
f780: 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  unc) \.  {nArg, 
f790: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43  SQLITE_FUNC_SLOC
f7a0: 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c  HNG|SQLITE_UTF8|
f7b0: 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43  (bNC*SQLITE_FUNC
f7c0: 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20  _NEEDCOLL), \.  
f7d0: 20 70 41 72 67 2c 20 30 2c 20 78 46 75 6e 63 2c   pArg, 0, xFunc,
f7e0: 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7d 0a 23 64   0, #zName, }.#d
f7f0: 65 66 69 6e 65 20 4c 49 4b 45 46 55 4e 43 28 7a  efine LIKEFUNC(z
f800: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c  Name, nArg, arg,
f810: 20 66 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72   flags) \.  {nAr
f820: 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  g, SQLITE_FUNC_C
f830: 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55  ONSTANT|SQLITE_U
f840: 54 46 38 7c 66 6c 61 67 73 2c 20 5c 0a 20 20 20  TF8|flags, \.   
f850: 28 76 6f 69 64 20 2a 29 61 72 67 2c 20 30 2c 20  (void *)arg, 0, 
f860: 6c 69 6b 65 46 75 6e 63 2c 20 30 2c 20 23 7a 4e  likeFunc, 0, #zN
f870: 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69  ame, {0} }.#defi
f880: 6e 65 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61  ne AGGREGATE(zNa
f890: 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e  me, nArg, arg, n
f8a0: 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c  c, xStep, xFinal
f8b0: 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
f8c0: 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c  ITE_UTF8|(nc*SQL
f8d0: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
f8e0: 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f  L), \.   SQLITE_
f8f0: 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c  INT_TO_PTR(arg),
f900: 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c   0, xStep,xFinal
f910: 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 23 64  ,#zName, {0}}.#d
f920: 65 66 69 6e 65 20 41 47 47 52 45 47 41 54 45 32  efine AGGREGATE2
f930: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72  (zName, nArg, ar
f940: 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46  g, nc, xStep, xF
f950: 69 6e 61 6c 2c 20 65 78 74 72 61 46 6c 61 67 73  inal, extraFlags
f960: 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
f970: 49 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c  ITE_UTF8|(nc*SQL
f980: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
f990: 4c 29 7c 65 78 74 72 61 46 6c 61 67 73 2c 20 5c  L)|extraFlags, \
f9a0: 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  .   SQLITE_INT_T
f9b0: 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20 78  O_PTR(arg), 0, x
f9c0: 53 74 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61  Step,xFinal,#zNa
f9d0: 6d 65 2c 20 7b 30 7d 7d 0a 0a 2f 2a 0a 2a 2a 20  me, {0}}../*.** 
f9e0: 41 6c 6c 20 63 75 72 72 65 6e 74 20 73 61 76 65  All current save
f9f0: 70 6f 69 6e 74 73 20 61 72 65 20 73 74 6f 72 65  points are store
fa00: 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69  d in a linked li
fa10: 73 74 20 73 74 61 72 74 69 6e 67 20 61 74 0a 2a  st starting at.*
fa20: 2a 20 73 71 6c 69 74 65 33 2e 70 53 61 76 65 70  * sqlite3.pSavep
fa30: 6f 69 6e 74 2e 20 54 68 65 20 66 69 72 73 74 20  oint. The first 
fa40: 65 6c 65 6d 65 6e 74 20 69 6e 20 74 68 65 20 6c  element in the l
fa50: 69 73 74 20 69 73 20 74 68 65 20 6d 6f 73 74 20  ist is the most 
fa60: 72 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65 6e  recently.** open
fa70: 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 53 61  ed savepoint. Sa
fa80: 76 65 70 6f 69 6e 74 73 20 61 72 65 20 61 64 64  vepoints are add
fa90: 65 64 20 74 6f 20 74 68 65 20 6c 69 73 74 20 62  ed to the list b
faa0: 79 20 74 68 65 20 76 64 62 65 0a 2a 2a 20 4f 50  y the vdbe.** OP
fab0: 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72  _Savepoint instr
fac0: 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  uction..*/.struc
fad0: 74 20 53 61 76 65 70 6f 69 6e 74 20 7b 0a 20 20  t Savepoint {.  
fae0: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
faf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fb00: 20 20 20 20 2f 2a 20 53 61 76 65 70 6f 69 6e 74      /* Savepoint
fb10: 20 6e 61 6d 65 20 28 6e 75 6c 2d 74 65 72 6d 69   name (nul-termi
fb20: 6e 61 74 65 64 29 20 2a 2f 0a 20 20 69 36 34 20  nated) */.  i64 
fb30: 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20  nDeferredCons;  
fb40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fb50: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66  /* Number of def
fb60: 65 72 72 65 64 20 66 6b 20 76 69 6f 6c 61 74 69  erred fk violati
fb70: 6f 6e 73 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65  ons */.  i64 nDe
fb80: 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20  ferredImmCons;  
fb90: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
fba0: 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72  Number of deferr
fbb0: 65 64 20 69 6d 6d 20 66 6b 2e 20 2a 2f 0a 20 20  ed imm fk. */.  
fbc0: 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65 78 74  Savepoint *pNext
fbd0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
fbe0: 20 20 20 20 2f 2a 20 50 61 72 65 6e 74 20 73 61      /* Parent sa
fbf0: 76 65 70 6f 69 6e 74 20 28 69 66 20 61 6e 79 29  vepoint (if any)
fc00: 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
fc10: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20  e following are 
fc20: 75 73 65 64 20 61 73 20 74 68 65 20 73 65 63 6f  used as the seco
fc30: 6e 64 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20  nd parameter to 
fc40: 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74  sqlite3Savepoint
fc50: 28 29 2c 0a 2a 2a 20 61 6e 64 20 61 73 20 74 68  (),.** and as th
fc60: 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f  e P1 argument to
fc70: 20 74 68 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e   the OP_Savepoin
fc80: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
fc90: 2f 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f  /.#define SAVEPO
fca0: 49 4e 54 5f 42 45 47 49 4e 20 20 20 20 20 20 30  INT_BEGIN      0
fcb0: 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49  .#define SAVEPOI
fcc0: 4e 54 5f 52 45 4c 45 41 53 45 20 20 20 20 31 0a  NT_RELEASE    1.
fcd0: 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e  #define SAVEPOIN
fce0: 54 5f 52 4f 4c 4c 42 41 43 4b 20 20 20 32 0a 0a  T_ROLLBACK   2..
fcf0: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 69  ./*.** Each SQLi
fd00: 74 65 20 6d 6f 64 75 6c 65 20 28 76 69 72 74 75  te module (virtu
fd10: 61 6c 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74  al table definit
fd20: 69 6f 6e 29 20 69 73 20 64 65 66 69 6e 65 64 20  ion) is defined 
fd30: 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63  by an.** instanc
fd40: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
fd50: 6e 67 20 73 74 72 75 63 74 75 72 65 2c 20 73 74  ng structure, st
fd60: 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69  ored in the sqli
fd70: 74 65 33 2e 61 4d 6f 64 75 6c 65 0a 2a 2a 20 68  te3.aModule.** h
fd80: 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74  ash table..*/.st
fd90: 72 75 63 74 20 4d 6f 64 75 6c 65 20 7b 0a 20 20  ruct Module {.  
fda0: 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
fdb0: 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 20 20  dule *pModule;  
fdc0: 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b       /* Callback
fdd0: 20 70 6f 69 6e 74 65 72 73 20 2a 2f 0a 20 20 63   pointers */.  c
fde0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65  onst char *zName
fdf0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
fe00: 20 20 20 20 2f 2a 20 4e 61 6d 65 20 70 61 73 73      /* Name pass
fe10: 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64  ed to create_mod
fe20: 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20  ule() */.  void 
fe30: 2a 70 41 75 78 3b 20 20 20 20 20 20 20 20 20 20  *pAux;          
fe40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fe50: 2f 2a 20 70 41 75 78 20 70 61 73 73 65 64 20 74  /* pAux passed t
fe60: 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28  o create_module(
fe70: 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 44  ) */.  void (*xD
fe80: 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b  estroy)(void *);
fe90: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
fea0: 6f 64 75 6c 65 20 64 65 73 74 72 75 63 74 6f 72  odule destructor
feb0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 54   function */.  T
fec0: 61 62 6c 65 20 2a 70 45 70 6f 54 61 62 3b 20 20  able *pEpoTab;  
fed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fee0: 20 20 20 20 2f 2a 20 45 70 6f 6e 79 6d 6f 75 73      /* Eponymous
fef0: 20 74 61 62 6c 65 20 66 6f 72 20 74 68 69 73 20   table for this 
ff00: 6d 6f 64 75 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  module */.};../*
ff10: 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  .** information 
ff20: 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d  about each colum
ff30: 6e 20 6f 66 20 61 6e 20 53 51 4c 20 74 61 62 6c  n of an SQL tabl
ff40: 65 20 69 73 20 68 65 6c 64 20 69 6e 20 61 6e 20  e is held in an 
ff50: 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74  instance.** of t
ff60: 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  his structure..*
ff70: 2f 0a 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20  /.struct Column 
ff80: 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
ff90: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
ffa0: 74 68 69 73 20 63 6f 6c 75 6d 6e 2c 20 5c 30 30  this column, \00
ffb0: 30 2c 20 74 68 65 6e 20 74 68 65 20 74 79 70 65  0, then the type
ffc0: 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 44 66 6c   */.  Expr *pDfl
ffd0: 74 3b 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c  t;     /* Defaul
ffe0: 74 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20  t value of this 
fff0: 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72  column */.  char
10000 20 2a 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20   *zColl;     /* 
10010 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  Collating sequen
10020 63 65 2e 20 20 49 66 20 4e 55 4c 4c 2c 20 75 73  ce.  If NULL, us
10030 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 2a 2f  e the default */
10040 0a 20 20 75 38 20 6e 6f 74 4e 75 6c 6c 3b 20 20  .  u8 notNull;  
10050 20 20 20 20 2f 2a 20 41 6e 20 4f 45 5f 20 63 6f      /* An OE_ co
10060 64 65 20 66 6f 72 20 68 61 6e 64 6c 69 6e 67 20  de for handling 
10070 61 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74  a NOT NULL const
10080 72 61 69 6e 74 20 2a 2f 0a 20 20 63 68 61 72 20  raint */.  char 
10090 61 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20 4f  affinity;   /* O
100a0 6e 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45  ne of the SQLITE
100b0 5f 41 46 46 5f 2e 2e 2e 20 76 61 6c 75 65 73 20  _AFF_... values 
100c0 2a 2f 0a 20 20 75 38 20 73 7a 45 73 74 3b 20 20  */.  u8 szEst;  
100d0 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74        /* Estimat
100e0 65 64 20 73 69 7a 65 20 6f 66 20 76 61 6c 75 65  ed size of value
100f0 20 69 6e 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e   in this column.
10100 20 73 69 7a 65 6f 66 28 49 4e 54 29 3d 3d 31 20   sizeof(INT)==1 
10110 2a 2f 0a 20 20 75 38 20 63 6f 6c 46 6c 61 67 73  */.  u8 colFlags
10120 3b 20 20 20 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e  ;     /* Boolean
10130 20 70 72 6f 70 65 72 74 69 65 73 2e 20 20 53 65   properties.  Se
10140 65 20 43 4f 4c 46 4c 41 47 5f 20 64 65 66 69 6e  e COLFLAG_ defin
10150 65 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a  es below */.};..
10160 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  /* Allowed value
10170 73 20 66 6f 72 20 43 6f 6c 75 6d 6e 2e 63 6f 6c  s for Column.col
10180 46 6c 61 67 73 3a 0a 2a 2f 0a 23 64 65 66 69 6e  Flags:.*/.#defin
10190 65 20 43 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b 45  e COLFLAG_PRIMKE
101a0 59 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20  Y  0x0001    /* 
101b0 43 6f 6c 75 6d 6e 20 69 73 20 70 61 72 74 20 6f  Column is part o
101c0 66 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65  f the primary ke
101d0 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c  y */.#define COL
101e0 46 4c 41 47 5f 48 49 44 44 45 4e 20 20 20 30 78  FLAG_HIDDEN   0x
101f0 30 30 30 32 20 20 20 20 2f 2a 20 41 20 68 69 64  0002    /* A hid
10200 64 65 6e 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20  den column in a 
10210 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f  virtual table */
10220 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47  .#define COLFLAG
10230 5f 48 41 53 54 59 50 45 20 20 30 78 30 30 30 34  _HASTYPE  0x0004
10240 20 20 20 20 2f 2a 20 54 79 70 65 20 6e 61 6d 65      /* Type name
10250 20 66 6f 6c 6c 6f 77 73 20 63 6f 6c 75 6d 6e 20   follows column 
10260 6e 61 6d 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  name */../*.** A
10270 20 22 43 6f 6c 6c 61 74 69 6e 67 20 53 65 71 75   "Collating Sequ
10280 65 6e 63 65 22 20 69 73 20 64 65 66 69 6e 65 64  ence" is defined
10290 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   by an instance 
102a0 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
102b0 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20 43  .** structure. C
102c0 6f 6e 63 65 70 74 75 61 6c 6c 79 2c 20 61 20 63  onceptually, a c
102d0 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
102e0 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20  e consists of a 
102f0 6e 61 6d 65 20 61 6e 64 0a 2a 2a 20 61 20 63 6f  name and.** a co
10300 6d 70 61 72 69 73 6f 6e 20 72 6f 75 74 69 6e 65  mparison routine
10310 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 74 68   that defines th
10320 65 20 6f 72 64 65 72 20 6f 66 20 74 68 61 74 20  e order of that 
10330 73 65 71 75 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20  sequence..**.** 
10340 49 66 20 43 6f 6c 6c 53 65 71 2e 78 43 6d 70 20  If CollSeq.xCmp 
10350 69 73 20 4e 55 4c 4c 2c 20 69 74 20 6d 65 61 6e  is NULL, it mean
10360 73 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 63 6f  s that the.** co
10370 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
10380 20 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 20 20   is undefined.  
10390 49 6e 64 69 63 65 73 20 62 75 69 6c 74 20 6f 6e  Indices built on
103a0 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 0a 2a 2a   an undefined.**
103b0 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
103c0 6e 63 65 20 6d 61 79 20 6e 6f 74 20 62 65 20 72  nce may not be r
103d0 65 61 64 20 6f 72 20 77 72 69 74 74 65 6e 2e 0a  ead or written..
103e0 2a 2f 0a 73 74 72 75 63 74 20 43 6f 6c 6c 53 65  */.struct CollSe
103f0 71 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  q {.  char *zNam
10400 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  e;          /* N
10410 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 6c 61  ame of the colla
10420 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2c 20 55  ting sequence, U
10430 54 46 2d 38 20 65 6e 63 6f 64 65 64 20 2a 2f 0a  TF-8 encoded */.
10440 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20    u8 enc;       
10450 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20          /* Text 
10460 65 6e 63 6f 64 69 6e 67 20 68 61 6e 64 6c 65 64  encoding handled
10470 20 62 79 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20   by xCmp() */.  
10480 76 6f 69 64 20 2a 70 55 73 65 72 3b 20 20 20 20  void *pUser;    
10490 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61        /* First a
104a0 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6d 70 28  rgument to xCmp(
104b0 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6d  ) */.  int (*xCm
104c0 70 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f  p)(void*,int, co
104d0 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20  nst void*, int, 
104e0 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20  const void*);.  
104f0 76 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69  void (*xDel)(voi
10500 64 2a 29 3b 20 20 2f 2a 20 44 65 73 74 72 75 63  d*);  /* Destruc
10510 74 6f 72 20 66 6f 72 20 70 55 73 65 72 20 2a 2f  tor for pUser */
10520 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 6f 72  .};../*.** A sor
10530 74 20 6f 72 64 65 72 20 63 61 6e 20 62 65 20 65  t order can be e
10540 69 74 68 65 72 20 41 53 43 20 6f 72 20 44 45 53  ither ASC or DES
10550 43 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  C..*/.#define SQ
10560 4c 49 54 45 5f 53 4f 5f 41 53 43 20 20 20 20 20  LITE_SO_ASC     
10570 20 20 30 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20    0  /* Sort in 
10580 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20  ascending order 
10590 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
105a0 45 5f 53 4f 5f 44 45 53 43 20 20 20 20 20 20 31  E_SO_DESC      1
105b0 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63    /* Sort in asc
105c0 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a  ending order */.
105d0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
105e0 4f 5f 55 4e 44 45 46 49 4e 45 44 20 2d 31 20 2f  O_UNDEFINED -1 /
105f0 2a 20 4e 6f 20 73 6f 72 74 20 6f 72 64 65 72 20  * No sort order 
10600 73 70 65 63 69 66 69 65 64 20 2a 2f 0a 0a 2f 2a  specified */../*
10610 0a 2a 2a 20 43 6f 6c 75 6d 6e 20 61 66 66 69 6e  .** Column affin
10620 69 74 79 20 74 79 70 65 73 2e 0a 2a 2a 0a 2a 2a  ity types..**.**
10630 20 54 68 65 73 65 20 75 73 65 64 20 74 6f 20 68   These used to h
10640 61 76 65 20 6d 6e 65 6d 6f 6e 69 63 20 6e 61 6d  ave mnemonic nam
10650 65 20 6c 69 6b 65 20 27 69 27 20 66 6f 72 20 53  e like 'i' for S
10660 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45  QLITE_AFF_INTEGE
10670 52 20 61 6e 64 0a 2a 2a 20 27 74 27 20 66 6f 72  R and.** 't' for
10680 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54   SQLITE_AFF_TEXT
10690 2e 20 20 42 75 74 20 77 65 20 63 61 6e 20 73 61  .  But we can sa
106a0 76 65 20 61 20 6c 69 74 74 6c 65 20 73 70 61 63  ve a little spac
106b0 65 20 61 6e 64 20 69 6d 70 72 6f 76 65 0a 2a 2a  e and improve.**
106c0 20 74 68 65 20 73 70 65 65 64 20 61 20 6c 69 74   the speed a lit
106d0 74 6c 65 20 62 79 20 6e 75 6d 62 65 72 69 6e 67  tle by numbering
106e0 20 74 68 65 20 76 61 6c 75 65 73 20 63 6f 6e 73   the values cons
106f0 65 63 75 74 69 76 65 6c 79 2e 0a 2a 2a 0a 2a 2a  ecutively..**.**
10700 20 42 75 74 20 72 61 74 68 65 72 20 74 68 61 6e   But rather than
10710 20 73 74 61 72 74 20 77 69 74 68 20 30 20 6f 72   start with 0 or
10720 20 31 2c 20 77 65 20 62 65 67 69 6e 20 77 69 74   1, we begin wit
10730 68 20 27 41 27 2e 20 20 54 68 61 74 20 77 61 79  h 'A'.  That way
10740 2c 0a 2a 2a 20 77 68 65 6e 20 6d 75 6c 74 69 70  ,.** when multip
10750 6c 65 20 61 66 66 69 6e 69 74 79 20 74 79 70 65  le affinity type
10760 73 20 61 72 65 20 63 6f 6e 63 61 74 65 6e 61 74  s are concatenat
10770 65 64 20 69 6e 74 6f 20 61 20 73 74 72 69 6e 67  ed into a string
10780 20 61 6e 64 0a 2a 2a 20 75 73 65 64 20 61 73 20   and.** used as 
10790 74 68 65 20 50 34 20 6f 70 65 72 61 6e 64 2c 20  the P4 operand, 
107a0 74 68 65 79 20 77 69 6c 6c 20 62 65 20 6d 6f 72  they will be mor
107b0 65 20 72 65 61 64 61 62 6c 65 2e 0a 2a 2a 0a 2a  e readable..**.*
107c0 2a 20 4e 6f 74 65 20 61 6c 73 6f 20 74 68 61 74  * Note also that
107d0 20 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70   the numeric typ
107e0 65 73 20 61 72 65 20 67 72 6f 75 70 65 64 20 74  es are grouped t
107f0 6f 67 65 74 68 65 72 20 73 6f 20 74 68 61 74 20  ogether so that 
10800 74 65 73 74 69 6e 67 0a 2a 2a 20 66 6f 72 20 61  testing.** for a
10810 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20 69 73   numeric type is
10820 20 61 20 73 69 6e 67 6c 65 20 63 6f 6d 70 61 72   a single compar
10830 69 73 6f 6e 2e 20 20 41 6e 64 20 74 68 65 20 42  ison.  And the B
10840 4c 4f 42 20 74 79 70 65 20 69 73 20 66 69 72 73  LOB type is firs
10850 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  t..*/.#define SQ
10860 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42 20 20 20  LITE_AFF_BLOB   
10870 20 20 27 41 27 0a 23 64 65 66 69 6e 65 20 53 51    'A'.#define SQ
10880 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20 20 20  LITE_AFF_TEXT   
10890 20 20 27 42 27 0a 23 64 65 66 69 6e 65 20 53 51    'B'.#define SQ
108a0 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43  LITE_AFF_NUMERIC
108b0 20 20 27 43 27 0a 23 64 65 66 69 6e 65 20 53 51    'C'.#define SQ
108c0 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
108d0 20 20 27 44 27 0a 23 64 65 66 69 6e 65 20 53 51    'D'.#define SQ
108e0 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 20 20  LITE_AFF_REAL   
108f0 20 20 27 45 27 0a 0a 23 64 65 66 69 6e 65 20 73    'E'..#define s
10900 71 6c 69 74 65 33 49 73 4e 75 6d 65 72 69 63 41  qlite3IsNumericA
10910 66 66 69 6e 69 74 79 28 58 29 20 20 28 28 58 29  ffinity(X)  ((X)
10920 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  >=SQLITE_AFF_NUM
10930 45 52 49 43 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  ERIC)../*.** The
10940 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b   SQLITE_AFF_MASK
10950 20 76 61 6c 75 65 73 20 6d 61 73 6b 73 20 6f 66   values masks of
10960 66 20 74 68 65 20 73 69 67 6e 69 66 69 63 61 6e  f the significan
10970 74 20 62 69 74 73 20 6f 66 20 61 6e 0a 2a 2a 20  t bits of an.** 
10980 61 66 66 69 6e 69 74 79 20 76 61 6c 75 65 2e 0a  affinity value..
10990 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
109a0 45 5f 41 46 46 5f 4d 41 53 4b 20 20 20 20 20 30  E_AFF_MASK     0
109b0 78 34 37 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 69 74  x47../*.** Addit
109c0 69 6f 6e 61 6c 20 62 69 74 20 76 61 6c 75 65 73  ional bit values
109d0 20 74 68 61 74 20 63 61 6e 20 62 65 20 4f 52 65   that can be ORe
109e0 64 20 77 69 74 68 20 61 6e 20 61 66 66 69 6e 69  d with an affini
109f0 74 79 20 77 69 74 68 6f 75 74 0a 2a 2a 20 63 68  ty without.** ch
10a00 61 6e 67 69 6e 67 20 74 68 65 20 61 66 66 69 6e  anging the affin
10a10 69 74 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53  ity..**.** The S
10a20 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 66 6c  QLITE_NOTNULL fl
10a30 61 67 20 69 73 20 61 20 63 6f 6d 62 69 6e 61 74  ag is a combinat
10a40 69 6f 6e 20 6f 66 20 4e 55 4c 4c 45 51 20 61 6e  ion of NULLEQ an
10a50 64 20 4a 55 4d 50 49 46 4e 55 4c 4c 2e 0a 2a 2a  d JUMPIFNULL..**
10a60 20 49 74 20 63 61 75 73 65 73 20 61 6e 20 61 73   It causes an as
10a70 73 65 72 74 28 29 20 74 6f 20 66 69 72 65 20 69  sert() to fire i
10a80 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64  f either operand
10a90 20 74 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e   to a comparison
10aa0 0a 2a 2a 20 6f 70 65 72 61 74 6f 72 20 69 73 20  .** operator is 
10ab0 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20 61 64 64  NULL.  It is add
10ac0 65 64 20 74 6f 20 63 65 72 74 61 69 6e 20 63 6f  ed to certain co
10ad0 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f  mparison operato
10ae0 72 73 20 74 6f 0a 2a 2a 20 70 72 6f 76 65 20 74  rs to.** prove t
10af0 68 61 74 20 74 68 65 20 6f 70 65 72 61 6e 64 73  hat the operands
10b00 20 61 72 65 20 61 6c 77 61 79 73 20 4e 4f 54 20   are always NOT 
10b10 4e 55 4c 4c 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  NULL..*/.#define
10b20 20 53 51 4c 49 54 45 5f 4b 45 45 50 4e 55 4c 4c   SQLITE_KEEPNULL
10b30 20 20 20 20 20 30 78 30 38 20 20 2f 2a 20 55 73       0x08  /* Us
10b40 65 64 20 62 79 20 76 65 63 74 6f 72 20 3d 3d 20  ed by vector == 
10b50 6f 72 20 3c 3e 20 2a 2f 0a 23 64 65 66 69 6e 65  or <> */.#define
10b60 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55   SQLITE_JUMPIFNU
10b70 4c 4c 20 20 20 30 78 31 30 20 20 2f 2a 20 6a 75  LL   0x10  /* ju
10b80 6d 70 73 20 69 66 20 65 69 74 68 65 72 20 6f 70  mps if either op
10b90 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 2a 2f  erand is NULL */
10ba0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
10bb0 53 54 4f 52 45 50 32 20 20 20 20 20 20 30 78 32  STOREP2      0x2
10bc0 30 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  0  /* Store resu
10bd0 6c 74 20 69 6e 20 72 65 67 5b 50 32 5d 20 72 61  lt in reg[P2] ra
10be0 74 68 65 72 20 74 68 61 6e 20 6a 75 6d 70 20 2a  ther than jump *
10bf0 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
10c00 5f 4e 55 4c 4c 45 51 20 20 20 20 20 20 20 30 78  _NULLEQ       0x
10c10 38 30 20 20 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c  80  /* NULL=NULL
10c20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
10c30 54 45 5f 4e 4f 54 4e 55 4c 4c 20 20 20 20 20 20  TE_NOTNULL      
10c40 30 78 39 30 20 20 2f 2a 20 41 73 73 65 72 74 20  0x90  /* Assert 
10c50 74 68 61 74 20 6f 70 65 72 61 6e 64 73 20 61 72  that operands ar
10c60 65 20 6e 65 76 65 72 20 4e 55 4c 4c 20 2a 2f 0a  e never NULL */.
10c70 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74  ./*.** An object
10c80 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73   of this type is
10c90 20 63 72 65 61 74 65 64 20 66 6f 72 20 65 61 63   created for eac
10ca0 68 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  h virtual table 
10cb0 70 72 65 73 65 6e 74 20 69 6e 0a 2a 2a 20 74 68  present in.** th
10cc0 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
10cd0 61 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  a..**.** If the 
10ce0 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
10cf0 69 73 20 73 68 61 72 65 64 2c 20 74 68 65 6e 20  is shared, then 
10d00 74 68 65 72 65 20 69 73 20 6f 6e 65 20 69 6e 73  there is one ins
10d10 74 61 6e 63 65 20 6f 66 20 74 68 69 73 0a 2a 2a  tance of this.**
10d20 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 65   structure for e
10d30 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ach database con
10d40 6e 65 63 74 69 6f 6e 20 28 73 71 6c 69 74 65 33  nection (sqlite3
10d50 2a 29 20 74 68 61 74 20 75 73 65 73 20 74 68 65  *) that uses the
10d60 20 73 68 61 72 65 64 0a 2a 2a 20 73 63 68 65 6d   shared.** schem
10d70 61 2e 20 54 68 69 73 20 69 73 20 62 65 63 61 75  a. This is becau
10d80 73 65 20 65 61 63 68 20 64 61 74 61 62 61 73 65  se each database
10d90 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 72 65 71 75   connection requ
10da0 69 72 65 73 20 69 74 73 20 6f 77 6e 20 75 6e 69  ires its own uni
10db0 71 75 65 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20  que.** instance 
10dc0 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76  of the sqlite3_v
10dd0 74 61 62 2a 20 68 61 6e 64 6c 65 20 75 73 65 64  tab* handle used
10de0 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 76   to access the v
10df0 69 72 74 75 61 6c 20 74 61 62 6c 65 0a 2a 2a 20  irtual table.** 
10e00 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20  implementation. 
10e10 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61  sqlite3_vtab* ha
10e20 6e 64 6c 65 73 20 63 61 6e 20 6e 6f 74 20 62 65  ndles can not be
10e30 20 73 68 61 72 65 64 20 62 65 74 77 65 65 6e 0a   shared between.
10e40 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ** database conn
10e50 65 63 74 69 6f 6e 73 2c 20 65 76 65 6e 20 77 68  ections, even wh
10e60 65 6e 20 74 68 65 20 72 65 73 74 20 6f 66 20 74  en the rest of t
10e70 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74  he in-memory dat
10e80 61 62 61 73 65 0a 2a 2a 20 73 63 68 65 6d 61 20  abase.** schema 
10e90 69 73 20 73 68 61 72 65 64 2c 20 61 73 20 74 68  is shared, as th
10ea0 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
10eb0 20 6f 66 74 65 6e 20 73 74 6f 72 65 73 20 74 68   often stores th
10ec0 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f  e database.** co
10ed0 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20  nnection handle 
10ee0 70 61 73 73 65 64 20 74 6f 20 69 74 20 76 69 61  passed to it via
10ef0 20 74 68 65 20 78 43 6f 6e 6e 65 63 74 28 29 20   the xConnect() 
10f00 6f 72 20 78 43 72 65 61 74 65 28 29 20 6d 65 74  or xCreate() met
10f10 68 6f 64 0a 2a 2a 20 64 75 72 69 6e 67 20 69 6e  hod.** during in
10f20 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 74  itialization int
10f30 65 72 6e 61 6c 6c 79 2e 20 54 68 69 73 20 64 61  ernally. This da
10f40 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
10f50 6e 20 68 61 6e 64 6c 65 20 6d 61 79 0a 2a 2a 20  n handle may.** 
10f60 74 68 65 6e 20 62 65 20 75 73 65 64 20 62 79 20  then be used by 
10f70 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
10f80 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
10f90 20 74 6f 20 61 63 63 65 73 73 20 72 65 61 6c 20   to access real 
10fa0 74 61 62 6c 65 73 0a 2a 2a 20 77 69 74 68 69 6e  tables.** within
10fb0 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 53   the database. S
10fc0 6f 20 74 68 61 74 20 74 68 65 79 20 61 70 70 65  o that they appe
10fd0 61 72 20 61 73 20 70 61 72 74 20 6f 66 20 74 68  ar as part of th
10fe0 65 20 63 61 6c 6c 65 72 73 0a 2a 2a 20 74 72 61  e callers.** tra
10ff0 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 73 65 20  nsaction, these 
11000 61 63 63 65 73 73 65 73 20 6e 65 65 64 20 74 6f  accesses need to
11010 20 62 65 20 6d 61 64 65 20 76 69 61 20 74 68 65   be made via the
11020 20 73 61 6d 65 20 64 61 74 61 62 61 73 65 0a 2a   same database.*
11030 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 20  * connection as 
11040 74 68 61 74 20 75 73 65 64 20 74 6f 20 65 78 65  that used to exe
11050 63 75 74 65 20 53 51 4c 20 6f 70 65 72 61 74 69  cute SQL operati
11060 6f 6e 73 20 6f 6e 20 74 68 65 20 76 69 72 74 75  ons on the virtu
11070 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  al table..**.** 
11080 41 6c 6c 20 56 54 61 62 6c 65 20 6f 62 6a 65 63  All VTable objec
11090 74 73 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f  ts that correspo
110a0 6e 64 20 74 6f 20 61 20 73 69 6e 67 6c 65 20 74  nd to a single t
110b0 61 62 6c 65 20 69 6e 20 61 20 73 68 61 72 65 64  able in a shared
110c0 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 73 63 68  .** database sch
110d0 65 6d 61 20 61 72 65 20 69 6e 69 74 69 61 6c 6c  ema are initiall
110e0 79 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69  y stored in a li
110f0 6e 6b 65 64 2d 6c 69 73 74 20 70 6f 69 6e 74 65  nked-list pointe
11100 64 20 74 6f 20 62 79 0a 2a 2a 20 74 68 65 20 54  d to by.** the T
11110 61 62 6c 65 2e 70 56 54 61 62 6c 65 20 6d 65 6d  able.pVTable mem
11120 62 65 72 20 76 61 72 69 61 62 6c 65 20 6f 66 20  ber variable of 
11130 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
11140 67 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 2e 0a  g Table object..
11150 2a 2a 20 57 68 65 6e 20 61 6e 20 73 71 6c 69 74  ** When an sqlit
11160 65 33 5f 70 72 65 70 61 72 65 28 29 20 6f 70 65  e3_prepare() ope
11170 72 61 74 69 6f 6e 20 69 73 20 72 65 71 75 69 72  ration is requir
11180 65 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 65  ed to access the
11190 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c   virtual.** tabl
111a0 65 2c 20 69 74 20 73 65 61 72 63 68 65 73 20 74  e, it searches t
111b0 68 65 20 6c 69 73 74 20 66 6f 72 20 74 68 65 20  he list for the 
111c0 56 54 61 62 6c 65 20 74 68 61 74 20 63 6f 72 72  VTable that corr
111d0 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 0a 2a  esponds to the.*
111e0 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  * database conne
111f0 63 74 69 6f 6e 20 64 6f 69 6e 67 20 74 68 65 20  ction doing the 
11200 70 72 65 70 61 72 69 6e 67 20 73 6f 20 61 73 20  preparing so as 
11210 74 6f 20 75 73 65 20 74 68 65 20 63 6f 72 72 65  to use the corre
11220 63 74 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 76 74  ct.** sqlite3_vt
11230 61 62 2a 20 68 61 6e 64 6c 65 20 69 6e 20 74 68  ab* handle in th
11240 65 20 63 6f 6d 70 69 6c 65 64 20 71 75 65 72 79  e compiled query
11250 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61 6e 20  ..**.** When an 
11260 69 6e 2d 6d 65 6d 6f 72 79 20 54 61 62 6c 65 20  in-memory Table 
11270 6f 62 6a 65 63 74 20 69 73 20 64 65 6c 65 74 65  object is delete
11280 64 20 28 66 6f 72 20 65 78 61 6d 70 6c 65 20 77  d (for example w
11290 68 65 6e 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d  hen the.** schem
112a0 61 20 69 73 20 62 65 69 6e 67 20 72 65 6c 6f 61  a is being reloa
112b0 64 65 64 20 66 6f 72 20 73 6f 6d 65 20 72 65 61  ded for some rea
112c0 73 6f 6e 29 2c 20 74 68 65 20 56 54 61 62 6c 65  son), the VTable
112d0 20 6f 62 6a 65 63 74 73 20 61 72 65 20 6e 6f 74   objects are not
112e0 0a 2a 2a 20 64 65 6c 65 74 65 64 20 61 6e 64 20  .** deleted and 
112f0 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
11300 2a 20 68 61 6e 64 6c 65 73 20 61 72 65 20 6e 6f  * handles are no
11310 74 20 78 44 69 73 63 6f 6e 6e 65 63 74 28 29 65  t xDisconnect()e
11320 64 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79  d.** immediately
11330 2e 20 49 6e 73 74 65 61 64 2c 20 74 68 65 79 20  . Instead, they 
11340 61 72 65 20 6d 6f 76 65 64 20 66 72 6f 6d 20 74  are moved from t
11350 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65  he Table.pVTable
11360 20 6c 69 73 74 20 74 6f 0a 2a 2a 20 61 6e 6f 74   list to.** anot
11370 68 65 72 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  her linked list 
11380 68 65 61 64 65 64 20 62 79 20 74 68 65 20 73 71  headed by the sq
11390 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63  lite3.pDisconnec
113a0 74 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 0a  t member of the.
113b0 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  ** corresponding
113c0 20 73 71 6c 69 74 65 33 20 73 74 72 75 63 74 75   sqlite3 structu
113d0 72 65 2e 20 54 68 65 79 20 61 72 65 20 74 68 65  re. They are the
113e0 6e 20 64 65 6c 65 74 65 64 2f 78 44 69 73 63 6f  n deleted/xDisco
113f0 6e 6e 65 63 74 65 64 0a 2a 2a 20 6e 65 78 74 20  nnected.** next 
11400 74 69 6d 65 20 61 20 73 74 61 74 65 6d 65 6e 74  time a statement
11410 20 69 73 20 70 72 65 70 61 72 65 64 20 75 73 69   is prepared usi
11420 6e 67 20 73 61 69 64 20 73 71 6c 69 74 65 33 2a  ng said sqlite3*
11430 2e 20 54 68 69 73 20 69 73 20 64 6f 6e 65 0a 2a  . This is done.*
11440 2a 20 74 6f 20 61 76 6f 69 64 20 64 65 61 64 6c  * to avoid deadl
11450 6f 63 6b 20 69 73 73 75 65 73 20 69 6e 76 6f 6c  ock issues invol
11460 76 69 6e 67 20 6d 75 6c 74 69 70 6c 65 20 73 71  ving multiple sq
11470 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75 74 65  lite3.mutex mute
11480 78 65 73 2e 0a 2a 2a 20 52 65 66 65 72 20 74 6f  xes..** Refer to
11490 20 63 6f 6d 6d 65 6e 74 73 20 61 62 6f 76 65 20   comments above 
114a0 66 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33  function sqlite3
114b0 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 29  VtabUnlockList()
114c0 20 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 6c 61   for an.** expla
114d0 6e 61 74 69 6f 6e 20 61 73 20 74 6f 20 77 68 79  nation as to why
114e0 20 69 74 20 69 73 20 73 61 66 65 20 74 6f 20 61   it is safe to a
114f0 64 64 20 61 6e 20 65 6e 74 72 79 20 74 6f 20 61  dd an entry to a
11500 6e 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63 6f  n sqlite3.pDisco
11510 6e 6e 65 63 74 0a 2a 2a 20 6c 69 73 74 20 77 69  nnect.** list wi
11520 74 68 6f 75 74 20 68 6f 6c 64 69 6e 67 20 74 68  thout holding th
11530 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
11540 73 71 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75  sqlite3.mutex mu
11550 74 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d  tex..**.** The m
11560 65 6d 6f 72 79 20 66 6f 72 20 6f 62 6a 65 63 74  emory for object
11570 73 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69  s of this type i
11580 73 20 61 6c 77 61 79 73 20 61 6c 6c 6f 63 61 74  s always allocat
11590 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33  ed by.** sqlite3
115a0 44 62 4d 61 6c 6c 6f 63 28 29 2c 20 75 73 69 6e  DbMalloc(), usin
115b0 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  g the connection
115c0 20 68 61 6e 64 6c 65 20 73 74 6f 72 65 64 20 69   handle stored i
115d0 6e 20 56 54 61 62 6c 65 2e 64 62 20 61 73 0a 2a  n VTable.db as.*
115e0 2a 20 74 68 65 20 66 69 72 73 74 20 61 72 67 75  * the first argu
115f0 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ment..*/.struct 
11600 56 54 61 62 6c 65 20 7b 0a 20 20 73 71 6c 69 74  VTable {.  sqlit
11610 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20  e3 *db;         
11620 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65       /* Database
11630 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 73 6f   connection asso
11640 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73  ciated with this
11650 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4d 6f 64 75   table */.  Modu
11660 6c 65 20 2a 70 4d 6f 64 3b 20 20 20 20 20 20 20  le *pMod;       
11670 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
11680 20 74 6f 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65   to module imple
11690 6d 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 73  mentation */.  s
116a0 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
116b0 61 62 3b 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e  ab;      /* Poin
116c0 74 65 72 20 74 6f 20 76 74 61 62 20 69 6e 73 74  ter to vtab inst
116d0 61 6e 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 52  ance */.  int nR
116e0 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ef;             
116f0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
11700 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74 68 69   pointers to thi
11710 73 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20  s structure */. 
11720 20 75 38 20 62 43 6f 6e 73 74 72 61 69 6e 74 3b   u8 bConstraint;
11730 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
11740 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e 74  ue if constraint
11750 73 20 61 72 65 20 73 75 70 70 6f 72 74 65 64 20  s are supported 
11760 2a 2f 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f  */.  int iSavepo
11770 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  int;           /
11780 2a 20 44 65 70 74 68 20 6f 66 20 74 68 65 20 53  * Depth of the S
11790 41 56 45 50 4f 49 4e 54 20 73 74 61 63 6b 20 2a  AVEPOINT stack *
117a0 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 4e 65 78  /.  VTable *pNex
117b0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  t;            /*
117c0 20 4e 65 78 74 20 69 6e 20 6c 69 6e 6b 65 64 20   Next in linked 
117d0 6c 69 73 74 20 28 73 65 65 20 61 62 6f 76 65 29  list (see above)
117e0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
117f0 65 20 73 63 68 65 6d 61 20 66 6f 72 20 65 61 63  e schema for eac
11800 68 20 53 51 4c 20 74 61 62 6c 65 20 61 6e 64 20  h SQL table and 
11810 76 69 65 77 20 69 73 20 72 65 70 72 65 73 65 6e  view is represen
11820 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 0a 2a 2a  ted in memory.**
11830 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   by an instance 
11840 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
11850 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73   structure..*/.s
11860 74 72 75 63 74 20 54 61 62 6c 65 20 7b 0a 20 20  truct Table {.  
11870 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
11880 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
11890 74 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65  the table or vie
118a0 77 20 2a 2f 0a 20 20 43 6f 6c 75 6d 6e 20 2a 61  w */.  Column *a
118b0 43 6f 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 49  Col;        /* I
118c0 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
118d0 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   each column */.
118e0 20 20 49 6e 64 65 78 20 2a 70 49 6e 64 65 78 3b    Index *pIndex;
118f0 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f         /* List o
11900 66 20 53 51 4c 20 69 6e 64 65 78 65 73 20 6f 6e  f SQL indexes on
11910 20 74 68 69 73 20 74 61 62 6c 65 2e 20 2a 2f 0a   this table. */.
11920 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
11930 74 3b 20 20 20 20 20 2f 2a 20 4e 55 4c 4c 20 66  t;     /* NULL f
11940 6f 72 20 74 61 62 6c 65 73 2e 20 20 50 6f 69 6e  or tables.  Poin
11950 74 73 20 74 6f 20 64 65 66 69 6e 69 74 69 6f 6e  ts to definition
11960 20 69 66 20 61 20 76 69 65 77 2e 20 2a 2f 0a 20   if a view. */. 
11970 20 46 4b 65 79 20 2a 70 46 4b 65 79 3b 20 20 20   FKey *pFKey;   
11980 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 65 64 20        /* Linked 
11990 6c 69 73 74 20 6f 66 20 61 6c 6c 20 66 6f 72 65  list of all fore
119a0 69 67 6e 20 6b 65 79 73 20 69 6e 20 74 68 69 73  ign keys in this
119b0 20 74 61 62 6c 65 20 2a 2f 0a 20 20 63 68 61 72   table */.  char
119c0 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20   *zColAff;      
119d0 20 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69 6e   /* String defin
119e0 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74 79  ing the affinity
119f0 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20   of each column 
11a00 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
11a10 43 68 65 63 6b 3b 20 20 20 20 2f 2a 20 41 6c 6c  Check;    /* All
11a20 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e   CHECK constrain
11a30 74 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  ts */.          
11a40 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
11a50 20 20 2e 2e 2e 20 61 6c 73 6f 20 75 73 65 64 20    ... also used 
11a60 61 73 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 6c  as column name l
11a70 69 73 74 20 69 6e 20 61 20 56 49 45 57 20 2a 2f  ist in a VIEW */
11a80 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20  .  int tnum;    
11a90 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20          /* Root 
11aa0 42 54 72 65 65 20 70 61 67 65 20 66 6f 72 20 74  BTree page for t
11ab0 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 75  his table */.  u
11ac0 33 32 20 6e 54 61 62 52 65 66 3b 20 20 20 20 20  32 nTabRef;     
11ad0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
11ae0 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 74 68 69   pointers to thi
11af0 73 20 54 61 62 6c 65 20 2a 2f 0a 20 20 69 31 36  s Table */.  i16
11b00 20 69 50 4b 65 79 3b 20 20 20 20 20 20 20 20 20   iPKey;         
11b10 20 20 2f 2a 20 49 66 20 6e 6f 74 20 6e 65 67 61    /* If not nega
11b20 74 69 76 65 2c 20 75 73 65 20 61 43 6f 6c 5b 69  tive, use aCol[i
11b30 50 4b 65 79 5d 20 61 73 20 74 68 65 20 72 6f 77  PKey] as the row
11b40 69 64 20 2a 2f 0a 20 20 69 31 36 20 6e 43 6f 6c  id */.  i16 nCol
11b50 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
11b60 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
11b70 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20  s in this table 
11b80 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 6e 52 6f 77  */.  LogEst nRow
11b90 4c 6f 67 45 73 74 3b 20 20 20 2f 2a 20 45 73 74  LogEst;   /* Est
11ba0 69 6d 61 74 65 64 20 72 6f 77 73 20 69 6e 20 74  imated rows in t
11bb0 61 62 6c 65 20 2d 20 66 72 6f 6d 20 73 71 6c 69  able - from sqli
11bc0 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20 2a  te_stat1 table *
11bd0 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a 54 61 62  /.  LogEst szTab
11be0 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73 74 69  Row;     /* Esti
11bf0 6d 61 74 65 64 20 73 69 7a 65 20 6f 66 20 65 61  mated size of ea
11c00 63 68 20 74 61 62 6c 65 20 72 6f 77 20 69 6e 20  ch table row in 
11c10 62 79 74 65 73 20 2a 2f 0a 23 69 66 64 65 66 20  bytes */.#ifdef 
11c20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f  SQLITE_ENABLE_CO
11c30 53 54 4d 55 4c 54 0a 20 20 4c 6f 67 45 73 74 20  STMULT.  LogEst 
11c40 63 6f 73 74 4d 75 6c 74 3b 20 20 20 20 20 2f 2a  costMult;     /*
11c50 20 43 6f 73 74 20 6d 75 6c 74 69 70 6c 69 65 72   Cost multiplier
11c60 20 66 6f 72 20 75 73 69 6e 67 20 74 68 69 73 20   for using this 
11c70 74 61 62 6c 65 20 2a 2f 0a 23 65 6e 64 69 66 0a  table */.#endif.
11c80 20 20 75 38 20 74 61 62 46 6c 61 67 73 3b 20 20    u8 tabFlags;  
11c90 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f         /* Mask o
11ca0 66 20 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f  f TF_* values */
11cb0 0a 20 20 75 38 20 6b 65 79 43 6f 6e 66 3b 20 20  .  u8 keyConf;  
11cc0 20 20 20 20 20 20 20 20 2f 2a 20 57 68 61 74 20          /* What 
11cd0 74 6f 20 64 6f 20 69 6e 20 63 61 73 65 20 6f 66  to do in case of
11ce0 20 75 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 66   uniqueness conf
11cf0 6c 69 63 74 20 6f 6e 20 69 50 4b 65 79 20 2a 2f  lict on iPKey */
11d00 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
11d10 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a  OMIT_ALTERTABLE.
11d20 20 20 69 6e 74 20 61 64 64 43 6f 6c 4f 66 66 73    int addColOffs
11d30 65 74 3b 20 20 20 20 2f 2a 20 4f 66 66 73 65 74  et;    /* Offset
11d40 20 69 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45   in CREATE TABLE
11d50 20 73 74 6d 74 20 74 6f 20 61 64 64 20 61 20 6e   stmt to add a n
11d60 65 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e  ew column */.#en
11d70 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
11d80 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
11d90 41 42 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f 64 75  ABLE.  int nModu
11da0 6c 65 41 72 67 3b 20 20 20 20 20 20 2f 2a 20 4e  leArg;      /* N
11db0 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
11dc0 74 73 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65  ts to the module
11dd0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 4d   */.  char **azM
11de0 6f 64 75 6c 65 41 72 67 3b 20 20 2f 2a 20 30 3a  oduleArg;  /* 0:
11df0 20 6d 6f 64 75 6c 65 20 31 3a 20 73 63 68 65 6d   module 1: schem
11e00 61 20 32 3a 20 76 74 61 62 20 6e 61 6d 65 20 33  a 2: vtab name 3
11e10 2e 2e 2e 3a 20 61 72 67 73 20 2a 2f 0a 20 20 56  ...: args */.  V
11e20 54 61 62 6c 65 20 2a 70 56 54 61 62 6c 65 3b 20  Table *pVTable; 
11e30 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 56      /* List of V
11e40 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 2e 20 2a  Table objects. *
11e50 2f 0a 23 65 6e 64 69 66 0a 20 20 54 72 69 67 67  /.#endif.  Trigg
11e60 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20  er *pTrigger;   
11e70 2f 2a 20 4c 69 73 74 20 6f 66 20 74 72 69 67 67  /* List of trigg
11e80 65 72 73 20 73 74 6f 72 65 64 20 69 6e 20 70 53  ers stored in pS
11e90 63 68 65 6d 61 20 2a 2f 0a 20 20 53 63 68 65 6d  chema */.  Schem
11ea0 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20  a *pSchema;     
11eb0 2f 2a 20 53 63 68 65 6d 61 20 74 68 61 74 20 63  /* Schema that c
11ec0 6f 6e 74 61 69 6e 73 20 74 68 69 73 20 74 61 62  ontains this tab
11ed0 6c 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  le */.  Table *p
11ee0 4e 65 78 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20  NextZombie;  /* 
11ef0 4e 65 78 74 20 6f 6e 20 74 68 65 20 50 61 72 73  Next on the Pars
11f00 65 2e 70 5a 6f 6d 62 69 65 54 61 62 20 6c 69 73  e.pZombieTab lis
11f10 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  t */.};../*.** A
11f20 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
11f30 72 20 54 61 62 6c 65 2e 74 61 62 46 6c 61 67 73  r Table.tabFlags
11f40 2e 0a 2a 2a 0a 2a 2a 20 54 46 5f 4f 4f 4f 48 69  ..**.** TF_OOOHi
11f50 64 64 65 6e 20 61 70 70 6c 69 65 73 20 74 6f 20  dden applies to 
11f60 74 61 62 6c 65 73 20 6f 72 20 76 69 65 77 20 74  tables or view t
11f70 68 61 74 20 68 61 76 65 20 68 69 64 64 65 6e 20  hat have hidden 
11f80 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 61 72 65  columns that are
11f90 0a 2a 2a 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20  .** followed by 
11fa0 6e 6f 6e 2d 68 69 64 64 65 6e 20 63 6f 6c 75 6d  non-hidden colum
11fb0 6e 73 2e 20 20 45 78 61 6d 70 6c 65 3a 20 20 22  ns.  Example:  "
11fc0 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54  CREATE VIRTUAL T
11fd0 41 42 4c 45 20 78 20 55 53 49 4e 47 0a 2a 2a 20  ABLE x USING.** 
11fe0 76 74 61 62 31 28 61 20 48 49 44 44 45 4e 2c 20  vtab1(a HIDDEN, 
11ff0 62 29 3b 22 2e 20 20 53 69 6e 63 65 20 22 62 22  b);".  Since "b"
12000 20 69 73 20 61 20 6e 6f 6e 2d 68 69 64 64 65 6e   is a non-hidden
12010 20 63 6f 6c 75 6d 6e 20 62 75 74 20 22 61 22 20   column but "a" 
12020 69 73 20 68 69 64 64 65 6e 2c 0a 2a 2a 20 74 68  is hidden,.** th
12030 65 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 61  e TF_OOOHidden a
12040 74 74 72 69 62 75 74 65 20 77 6f 75 6c 64 20 61  ttribute would a
12050 70 70 6c 79 20 69 6e 20 74 68 69 73 20 63 61 73  pply in this cas
12060 65 2e 20 20 53 75 63 68 20 74 61 62 6c 65 73 20  e.  Such tables 
12070 72 65 71 75 69 72 65 0a 2a 2a 20 73 70 65 63 69  require.** speci
12080 61 6c 20 68 61 6e 64 6c 69 6e 67 20 64 75 72 69  al handling duri
12090 6e 67 20 49 4e 53 45 52 54 20 70 72 6f 63 65 73  ng INSERT proces
120a0 73 69 6e 67 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  sing..*/.#define
120b0 20 54 46 5f 52 65 61 64 6f 6e 6c 79 20 20 20 20   TF_Readonly    
120c0 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 52      0x01    /* R
120d0 65 61 64 2d 6f 6e 6c 79 20 73 79 73 74 65 6d 20  ead-only system 
120e0 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65  table */.#define
120f0 20 54 46 5f 45 70 68 65 6d 65 72 61 6c 20 20 20   TF_Ephemeral   
12100 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 41      0x02    /* A
12110 6e 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c  n ephemeral tabl
12120 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  e */.#define TF_
12130 48 61 73 50 72 69 6d 61 72 79 4b 65 79 20 20 20  HasPrimaryKey   
12140 30 78 30 34 20 20 20 20 2f 2a 20 54 61 62 6c 65  0x04    /* Table
12150 20 68 61 73 20 61 20 70 72 69 6d 61 72 79 20 6b   has a primary k
12160 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  ey */.#define TF
12170 5f 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 20  _Autoincrement  
12180 20 30 78 30 38 20 20 20 20 2f 2a 20 49 6e 74 65   0x08    /* Inte
12190 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20  ger primary key 
121a0 69 73 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74  is autoincrement
121b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 56   */.#define TF_V
121c0 69 72 74 75 61 6c 20 20 20 20 20 20 20 20 20 30  irtual         0
121d0 78 31 30 20 20 20 20 2f 2a 20 49 73 20 61 20 76  x10    /* Is a v
121e0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a  irtual table */.
121f0 23 64 65 66 69 6e 65 20 54 46 5f 57 69 74 68 6f  #define TF_Witho
12200 75 74 52 6f 77 69 64 20 20 20 20 30 78 32 30 20  utRowid    0x20 
12210 20 20 20 2f 2a 20 4e 6f 20 72 6f 77 69 64 2e 20     /* No rowid. 
12220 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20   PRIMARY KEY is 
12230 74 68 65 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69  the key */.#defi
12240 6e 65 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52  ne TF_NoVisibleR
12250 6f 77 69 64 20 20 30 78 34 30 20 20 20 20 2f 2a  owid  0x40    /*
12260 20 4e 6f 20 75 73 65 72 2d 76 69 73 69 62 6c 65   No user-visible
12270 20 22 72 6f 77 69 64 22 20 63 6f 6c 75 6d 6e 20   "rowid" column 
12280 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 4f 4f  */.#define TF_OO
12290 4f 48 69 64 64 65 6e 20 20 20 20 20 20 20 30 78  OHidden       0x
122a0 38 30 20 20 20 20 2f 2a 20 4f 75 74 2d 6f 66 2d  80    /* Out-of-
122b0 4f 72 64 65 72 20 68 69 64 64 65 6e 20 63 6f 6c  Order hidden col
122c0 75 6d 6e 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20  umns */.../*.** 
122d0 54 65 73 74 20 74 6f 20 73 65 65 20 77 68 65 74  Test to see whet
122e0 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 74 61 62  her or not a tab
122f0 6c 65 20 69 73 20 61 20 76 69 72 74 75 61 6c 20  le is a virtual 
12300 74 61 62 6c 65 2e 20 20 54 68 69 73 20 69 73 0a  table.  This is.
12310 2a 2a 20 64 6f 6e 65 20 61 73 20 61 20 6d 61 63  ** done as a mac
12320 72 6f 20 73 6f 20 74 68 61 74 20 69 74 20 77 69  ro so that it wi
12330 6c 6c 20 62 65 20 6f 70 74 69 6d 69 7a 65 64 20  ll be optimized 
12340 6f 75 74 20 77 68 65 6e 20 76 69 72 74 75 61 6c  out when virtual
12350 0a 2a 2a 20 74 61 62 6c 65 20 73 75 70 70 6f 72  .** table suppor
12360 74 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f  t is omitted fro
12370 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a  m the build..*/.
12380 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
12390 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
123a0 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56 69 72  .#  define IsVir
123b0 74 75 61 6c 28 58 29 20 20 20 20 20 20 28 28 28  tual(X)      (((
123c0 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54  X)->tabFlags & T
123d0 46 5f 56 69 72 74 75 61 6c 29 21 3d 30 29 0a 23  F_Virtual)!=0).#
123e0 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49  else.#  define I
123f0 73 56 69 72 74 75 61 6c 28 58 29 20 20 20 20 20  sVirtual(X)     
12400 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   0.#endif../*.**
12410 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72   Macros to deter
12420 6d 69 6e 65 20 69 66 20 61 20 63 6f 6c 75 6d 6e  mine if a column
12430 20 69 73 20 68 69 64 64 65 6e 2e 20 20 49 73 4f   is hidden.  IsO
12440 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c  rdinaryHiddenCol
12450 75 6d 6e 28 29 0a 2a 2a 20 6f 6e 6c 79 20 77 6f  umn().** only wo
12460 72 6b 73 20 66 6f 72 20 6e 6f 6e 2d 76 69 72 74  rks for non-virt
12470 75 61 6c 20 74 61 62 6c 65 73 20 28 6f 72 64 69  ual tables (ordi
12480 6e 61 72 79 20 74 61 62 6c 65 73 20 61 6e 64 20  nary tables and 
12490 76 69 65 77 73 29 20 61 6e 64 20 69 73 0a 2a 2a  views) and is.**
124a0 20 61 6c 77 61 79 73 20 66 61 6c 73 65 20 75 6e   always false un
124b0 6c 65 73 73 20 53 51 4c 49 54 45 5f 45 4e 41 42  less SQLITE_ENAB
124c0 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e  LE_HIDDEN_COLUMN
124d0 53 20 69 73 20 64 65 66 69 6e 65 64 2e 20 20 54  S is defined.  T
124e0 68 65 0a 2a 2a 20 49 73 48 69 64 64 65 6e 43 6f  he.** IsHiddenCo
124f0 6c 75 6d 6e 28 29 20 6d 61 63 72 6f 20 69 73 20  lumn() macro is 
12500 67 65 6e 65 72 61 6c 20 70 75 72 70 6f 73 65 2e  general purpose.
12510 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
12520 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49  SQLITE_ENABLE_HI
12530 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 29 0a 23 20  DDEN_COLUMNS).# 
12540 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e   define IsHidden
12550 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20  Column(X)       
12560 20 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67    (((X)->colFlag
12570 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44  s & COLFLAG_HIDD
12580 45 4e 29 21 3d 30 29 0a 23 20 20 64 65 66 69 6e  EN)!=0).#  defin
12590 65 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64  e IsOrdinaryHidd
125a0 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28 58  enColumn(X) (((X
125b0 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f  )->colFlags & CO
125c0 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30  LFLAG_HIDDEN)!=0
125d0 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64  ).#elif !defined
125e0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52  (SQLITE_OMIT_VIR
125f0 54 55 41 4c 54 41 42 4c 45 29 0a 23 20 20 64 65  TUALTABLE).#  de
12600 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c  fine IsHiddenCol
12610 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20 28  umn(X)         (
12620 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26  ((X)->colFlags &
12630 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29   COLFLAG_HIDDEN)
12640 21 3d 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49  !=0).#  define I
12650 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43  sOrdinaryHiddenC
12660 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6c 73 65  olumn(X) 0.#else
12670 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69 64  .#  define IsHid
12680 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20  denColumn(X)    
12690 20 20 20 20 20 30 0a 23 20 20 64 65 66 69 6e 65       0.#  define
126a0 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65   IsOrdinaryHidde
126b0 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6e  nColumn(X) 0.#en
126c0 64 69 66 0a 0a 0a 2f 2a 20 44 6f 65 73 20 74 68  dif.../* Does th
126d0 65 20 74 61 62 6c 65 20 68 61 76 65 20 61 20 72  e table have a r
126e0 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owid */.#define 
126f0 48 61 73 52 6f 77 69 64 28 58 29 20 20 20 20 20  HasRowid(X)     
12700 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20  (((X)->tabFlags 
12710 26 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77 69  & TF_WithoutRowi
12720 64 29 3d 3d 30 29 0a 23 64 65 66 69 6e 65 20 56  d)==0).#define V
12730 69 73 69 62 6c 65 52 6f 77 69 64 28 58 29 20 28  isibleRowid(X) (
12740 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26  ((X)->tabFlags &
12750 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77   TF_NoVisibleRow
12760 69 64 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 45  id)==0)../*.** E
12770 61 63 68 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  ach foreign key 
12780 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 61 6e  constraint is an
12790 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
127a0 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
127b0 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66 6f  ture..**.** A fo
127c0 72 65 69 67 6e 20 6b 65 79 20 69 73 20 61 73 73  reign key is ass
127d0 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 77 6f  ociated with two
127e0 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20 22 66   tables.  The "f
127f0 72 6f 6d 22 20 74 61 62 6c 65 20 69 73 0a 2a 2a  rom" table is.**
12800 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
12810 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 52 45 46  contains the REF
12820 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 74  ERENCES clause t
12830 68 61 74 20 63 72 65 61 74 65 73 20 74 68 65 20  hat creates the 
12840 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e 20  foreign.** key. 
12850 20 54 68 65 20 22 74 6f 22 20 74 61 62 6c 65 20   The "to" table 
12860 69 73 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  is the table tha
12870 74 20 69 73 20 6e 61 6d 65 64 20 69 6e 20 74 68  t is named in th
12880 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61  e REFERENCES cla
12890 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65 72  use..** Consider
128a0 20 74 68 69 73 20 65 78 61 6d 70 6c 65 3a 0a 2a   this example:.*
128b0 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20  *.**     CREATE 
128c0 54 41 42 4c 45 20 65 78 31 28 0a 2a 2a 20 20 20  TABLE ex1(.**   
128d0 20 20 20 20 61 20 49 4e 54 45 47 45 52 20 50 52      a INTEGER PR
128e0 49 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a 20 20 20  IMARY KEY,.**   
128f0 20 20 20 20 62 20 49 4e 54 45 47 45 52 20 43 4f      b INTEGER CO
12900 4e 53 54 52 41 49 4e 54 20 66 6b 31 20 52 45 46  NSTRAINT fk1 REF
12910 45 52 45 4e 43 45 53 20 65 78 32 28 78 29 0a 2a  ERENCES ex2(x).*
12920 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20 46  *     );.**.** F
12930 6f 72 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 22  or foreign key "
12940 66 6b 31 22 2c 20 74 68 65 20 66 72 6f 6d 2d 74  fk1", the from-t
12950 61 62 6c 65 20 69 73 20 22 65 78 31 22 20 61 6e  able is "ex1" an
12960 64 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69  d the to-table i
12970 73 20 22 65 78 32 22 2e 0a 2a 2a 20 45 71 75 69  s "ex2"..** Equi
12980 76 61 6c 65 6e 74 20 6e 61 6d 65 73 3a 0a 2a 2a  valent names:.**
12990 0a 2a 2a 20 20 20 20 20 66 72 6f 6d 2d 74 61 62  .**     from-tab
129a0 6c 65 20 3d 3d 20 63 68 69 6c 64 2d 74 61 62 6c  le == child-tabl
129b0 65 0a 2a 2a 20 20 20 20 20 20 20 74 6f 2d 74 61  e.**       to-ta
129c0 62 6c 65 20 3d 3d 20 70 61 72 65 6e 74 2d 74 61  ble == parent-ta
129d0 62 6c 65 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 52  ble.**.** Each R
129e0 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65  EFERENCES clause
129f0 20 67 65 6e 65 72 61 74 65 73 20 61 6e 20 69 6e   generates an in
12a00 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
12a10 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
12a20 65 0a 2a 2a 20 77 68 69 63 68 20 69 73 20 61 74  e.** which is at
12a30 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 66 72  tached to the fr
12a40 6f 6d 2d 74 61 62 6c 65 2e 20 20 54 68 65 20 74  om-table.  The t
12a50 6f 2d 74 61 62 6c 65 20 6e 65 65 64 20 6e 6f 74  o-table need not
12a60 20 65 78 69 73 74 20 77 68 65 6e 0a 2a 2a 20 74   exist when.** t
12a70 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73  he from-table is
12a80 20 63 72 65 61 74 65 64 2e 20 20 54 68 65 20 65   created.  The e
12a90 78 69 73 74 65 6e 63 65 20 6f 66 20 74 68 65 20  xistence of the 
12aa0 74 6f 2d 74 61 62 6c 65 20 69 73 20 6e 6f 74 20  to-table is not 
12ab0 63 68 65 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20 54  checked..**.** T
12ac0 68 65 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 70  he list of all p
12ad0 61 72 65 6e 74 73 20 66 6f 72 20 63 68 69 6c 64  arents for child
12ae0 20 54 61 62 6c 65 20 58 20 69 73 20 68 65 6c 64   Table X is held
12af0 20 61 74 20 58 2e 70 46 4b 65 79 2e 0a 2a 2a 0a   at X.pFKey..**.
12b00 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 61 6c 6c  ** A list of all
12b10 20 63 68 69 6c 64 72 65 6e 20 66 6f 72 20 61 20   children for a 
12b20 74 61 62 6c 65 20 6e 61 6d 65 64 20 5a 20 28 77  table named Z (w
12b30 68 69 63 68 20 6d 69 67 68 74 20 6e 6f 74 20 65  hich might not e
12b40 76 65 6e 20 65 78 69 73 74 29 0a 2a 2a 20 69 73  ven exist).** is
12b50 20 68 65 6c 64 20 69 6e 20 53 63 68 65 6d 61 2e   held in Schema.
12b60 66 6b 65 79 48 61 73 68 20 77 69 74 68 20 61 20  fkeyHash with a 
12b70 68 61 73 68 20 6b 65 79 20 6f 66 20 5a 2e 0a 2a  hash key of Z..*
12b80 2f 0a 73 74 72 75 63 74 20 46 4b 65 79 20 7b 0a  /.struct FKey {.
12b90 20 20 54 61 62 6c 65 20 2a 70 46 72 6f 6d 3b 20    Table *pFrom; 
12ba0 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6e      /* Table con
12bb0 74 61 69 6e 69 6e 67 20 74 68 65 20 52 45 46 45  taining the REFE
12bc0 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 28 61  RENCES clause (a
12bd0 6b 61 3a 20 43 68 69 6c 64 29 20 2a 2f 0a 20 20  ka: Child) */.  
12be0 46 4b 65 79 20 2a 70 4e 65 78 74 46 72 6f 6d 3b  FKey *pNextFrom;
12bf0 20 20 2f 2a 20 4e 65 78 74 20 46 4b 65 79 20 77    /* Next FKey w
12c00 69 74 68 20 74 68 65 20 73 61 6d 65 20 69 6e 20  ith the same in 
12c10 70 46 72 6f 6d 2e 20 4e 65 78 74 20 70 61 72 65  pFrom. Next pare
12c20 6e 74 20 6f 66 20 70 46 72 6f 6d 20 2a 2f 0a 20  nt of pFrom */. 
12c30 20 63 68 61 72 20 2a 7a 54 6f 3b 20 20 20 20 20   char *zTo;     
12c40 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 61     /* Name of ta
12c50 62 6c 65 20 74 68 61 74 20 74 68 65 20 6b 65 79  ble that the key
12c60 20 70 6f 69 6e 74 73 20 74 6f 20 28 61 6b 61 3a   points to (aka:
12c70 20 50 61 72 65 6e 74 29 20 2a 2f 0a 20 20 46 4b   Parent) */.  FK
12c80 65 79 20 2a 70 4e 65 78 74 54 6f 3b 20 20 20 20  ey *pNextTo;    
12c90 2f 2a 20 4e 65 78 74 20 77 69 74 68 20 74 68 65  /* Next with the
12ca0 20 73 61 6d 65 20 7a 54 6f 2e 20 4e 65 78 74 20   same zTo. Next 
12cb0 63 68 69 6c 64 20 6f 66 20 7a 54 6f 2e 20 2a 2f  child of zTo. */
12cc0 0a 20 20 46 4b 65 79 20 2a 70 50 72 65 76 54 6f  .  FKey *pPrevTo
12cd0 3b 20 20 20 20 2f 2a 20 50 72 65 76 69 6f 75 73  ;    /* Previous
12ce0 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 7a   with the same z
12cf0 54 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c  To */.  int nCol
12d00 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
12d10 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
12d20 6e 20 74 68 69 73 20 6b 65 79 20 2a 2f 0a 20 20  n this key */.  
12d30 2f 2a 20 45 56 3a 20 52 2d 33 30 33 32 33 2d 32  /* EV: R-30323-2
12d40 31 39 31 37 20 2a 2f 0a 20 20 75 38 20 69 73 44  1917 */.  u8 isD
12d50 65 66 65 72 72 65 64 3b 20 20 20 20 20 20 20 2f  eferred;       /
12d60 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72  * True if constr
12d70 61 69 6e 74 20 63 68 65 63 6b 69 6e 67 20 69 73  aint checking is
12d80 20 64 65 66 65 72 72 65 64 20 74 69 6c 6c 20 43   deferred till C
12d90 4f 4d 4d 49 54 20 2a 2f 0a 20 20 75 38 20 61 41  OMMIT */.  u8 aA
12da0 63 74 69 6f 6e 5b 32 5d 3b 20 20 20 20 20 20 20  ction[2];       
12db0 20 2f 2a 20 4f 4e 20 44 45 4c 45 54 45 20 61 6e   /* ON DELETE an
12dc0 64 20 4f 4e 20 55 50 44 41 54 45 20 61 63 74 69  d ON UPDATE acti
12dd0 6f 6e 73 2c 20 72 65 73 70 65 63 74 69 76 65 6c  ons, respectivel
12de0 79 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a  y */.  Trigger *
12df0 61 70 54 72 69 67 67 65 72 5b 32 5d 3b 2f 2a 20  apTrigger[2];/* 
12e00 54 72 69 67 67 65 72 73 20 66 6f 72 20 61 41 63  Triggers for aAc
12e10 74 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73 20 2a  tion[] actions *
12e20 2f 0a 20 20 73 74 72 75 63 74 20 73 43 6f 6c 4d  /.  struct sColM
12e30 61 70 20 7b 20 20 20 20 20 20 2f 2a 20 4d 61 70  ap {      /* Map
12e40 70 69 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  ping of columns 
12e50 69 6e 20 70 46 72 6f 6d 20 74 6f 20 63 6f 6c 75  in pFrom to colu
12e60 6d 6e 73 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20  mns in zTo */.  
12e70 20 20 69 6e 74 20 69 46 72 6f 6d 3b 20 20 20 20    int iFrom;    
12e80 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
12e90 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 70 46   of column in pF
12ea0 72 6f 6d 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  rom */.    char 
12eb0 2a 7a 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20  *zCol;          
12ec0 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 63 6f 6c 75   /* Name of colu
12ed0 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20 49 66 20 4e  mn in zTo.  If N
12ee0 55 4c 4c 20 75 73 65 20 50 52 49 4d 41 52 59 20  ULL use PRIMARY 
12ef0 4b 45 59 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b  KEY */.  } aCol[
12f00 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  1];            /
12f10 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20  * One entry for 
12f20 65 61 63 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c  each of nCol col
12f30 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  umns */.};../*.*
12f40 2a 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74  * SQLite support
12f50 73 20 6d 61 6e 79 20 64 69 66 66 65 72 65 6e 74  s many different
12f60 20 77 61 79 73 20 74 6f 20 72 65 73 6f 6c 76 65   ways to resolve
12f70 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a   a constraint.**
12f80 20 65 72 72 6f 72 2e 20 20 52 4f 4c 4c 42 41 43   error.  ROLLBAC
12f90 4b 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61  K processing mea
12fa0 6e 73 20 74 68 61 74 20 61 20 63 6f 6e 73 74 72  ns that a constr
12fb0 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a  aint violation.*
12fc0 2a 20 63 61 75 73 65 73 20 74 68 65 20 6f 70 65  * causes the ope
12fd0 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73  ration in proces
12fe0 73 20 74 6f 20 66 61 69 6c 20 61 6e 64 20 66 6f  s to fail and fo
12ff0 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72  r the current tr
13000 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20  ansaction.** to 
13010 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20  be rolled back. 
13020 20 41 42 4f 52 54 20 70 72 6f 63 65 73 73 69 6e   ABORT processin
13030 67 20 6d 65 61 6e 73 20 74 68 65 20 6f 70 65 72  g means the oper
13040 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73  ation in process
13050 0a 2a 2a 20 66 61 69 6c 73 20 61 6e 64 20 61 6e  .** fails and an
13060 79 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20  y prior changes 
13070 66 72 6f 6d 20 74 68 61 74 20 6f 6e 65 20 6f 70  from that one op
13080 65 72 61 74 69 6f 6e 20 61 72 65 20 62 61 63 6b  eration are back
13090 65 64 20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20 74  ed out,.** but t
130a0 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  he transaction i
130b0 73 20 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61 63  s not rolled bac
130c0 6b 2e 20 20 46 41 49 4c 20 70 72 6f 63 65 73 73  k.  FAIL process
130d0 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a  ing means that.*
130e0 2a 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  * the operation 
130f0 69 6e 20 70 72 6f 67 72 65 73 73 20 73 74 6f 70  in progress stop
13100 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20 61 6e  s and returns an
13110 20 65 72 72 6f 72 20 63 6f 64 65 2e 20 20 42 75   error code.  Bu
13120 74 20 70 72 69 6f 72 0a 2a 2a 20 63 68 61 6e 67  t prior.** chang
13130 65 73 20 64 75 65 20 74 6f 20 74 68 65 20 73 61  es due to the sa
13140 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65  me operation are
13150 20 6e 6f 74 20 62 61 63 6b 65 64 20 6f 75 74 20   not backed out 
13160 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a  and no rollback.
13170 2a 2a 20 6f 63 63 75 72 73 2e 20 20 49 47 4e 4f  ** occurs.  IGNO
13180 52 45 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  RE means that th
13190 65 20 70 61 72 74 69 63 75 6c 61 72 20 72 6f 77  e particular row
131a0 20 74 68 61 74 20 63 61 75 73 65 64 20 74 68 65   that caused the
131b0 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65   constraint.** e
131c0 72 72 6f 72 20 69 73 20 6e 6f 74 20 69 6e 73 65  rror is not inse
131d0 72 74 65 64 20 6f 72 20 75 70 64 61 74 65 64 2e  rted or updated.
131e0 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e    Processing con
131f0 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72  tinues and no er
13200 72 6f 72 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e  ror.** is return
13210 65 64 2e 20 20 52 45 50 4c 41 43 45 20 6d 65 61  ed.  REPLACE mea
13220 6e 73 20 74 68 61 74 20 70 72 65 65 78 69 73 74  ns that preexist
13230 69 6e 67 20 64 61 74 61 62 61 73 65 20 72 6f 77  ing database row
13240 73 20 74 68 61 74 20 63 61 75 73 65 64 0a 2a 2a  s that caused.**
13250 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72   a UNIQUE constr
13260 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61  aint violation a
13270 72 65 20 72 65 6d 6f 76 65 64 20 73 6f 20 74 68  re removed so th
13280 61 74 20 74 68 65 20 6e 65 77 20 69 6e 73 65 72  at the new inser
13290 74 20 6f 72 0a 2a 2a 20 75 70 64 61 74 65 20 63  t or.** update c
132a0 61 6e 20 70 72 6f 63 65 65 64 2e 20 20 50 72 6f  an proceed.  Pro
132b0 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65  cessing continue
132c0 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20 69  s and no error i
132d0 73 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a  s reported..**.*
132e0 2a 20 52 45 53 54 52 49 43 54 2c 20 53 45 54 4e  * RESTRICT, SETN
132f0 55 4c 4c 2c 20 61 6e 64 20 43 41 53 43 41 44 45  ULL, and CASCADE
13300 20 61 63 74 69 6f 6e 73 20 61 70 70 6c 79 20 6f   actions apply o
13310 6e 6c 79 20 74 6f 20 66 6f 72 65 69 67 6e 20 6b  nly to foreign k
13320 65 79 73 2e 0a 2a 2a 20 52 45 53 54 52 49 43 54  eys..** RESTRICT
13330 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20   is the same as 
13340 41 42 4f 52 54 20 66 6f 72 20 49 4d 4d 45 44 49  ABORT for IMMEDI
13350 41 54 45 20 66 6f 72 65 69 67 6e 20 6b 65 79 73  ATE foreign keys
13360 20 61 6e 64 20 74 68 65 0a 2a 2a 20 73 61 6d 65   and the.** same
13370 20 61 73 20 52 4f 4c 4c 42 41 43 4b 20 66 6f 72   as ROLLBACK for
13380 20 44 45 46 45 52 52 45 44 20 6b 65 79 73 2e 20   DEFERRED keys. 
13390 20 53 45 54 4e 55 4c 4c 20 6d 65 61 6e 73 20 74   SETNULL means t
133a0 68 61 74 20 74 68 65 20 66 6f 72 65 69 67 6e 0a  hat the foreign.
133b0 2a 2a 20 6b 65 79 20 69 73 20 73 65 74 20 74 6f  ** key is set to
133c0 20 4e 55 4c 4c 2e 20 20 43 41 53 43 41 44 45 20   NULL.  CASCADE 
133d0 6d 65 61 6e 73 20 74 68 61 74 20 61 20 44 45 4c  means that a DEL
133e0 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 6f 66  ETE or UPDATE of
133f0 20 74 68 65 0a 2a 2a 20 72 65 66 65 72 65 6e 63   the.** referenc
13400 65 64 20 74 61 62 6c 65 20 72 6f 77 20 69 73 20  ed table row is 
13410 70 72 6f 70 61 67 61 74 65 64 20 69 6e 74 6f 20  propagated into 
13420 74 68 65 20 72 6f 77 20 74 68 61 74 20 68 6f 6c  the row that hol
13430 64 73 20 74 68 65 0a 2a 2a 20 66 6f 72 65 69 67  ds the.** foreig
13440 6e 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  n key..**.** The
13450 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d 62 6f   following symbo
13460 6c 69 63 20 76 61 6c 75 65 73 20 61 72 65 20 75  lic values are u
13470 73 65 64 20 74 6f 20 72 65 63 6f 72 64 20 77 68  sed to record wh
13480 69 63 68 20 74 79 70 65 0a 2a 2a 20 6f 66 20 61  ich type.** of a
13490 63 74 69 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a  ction to take..*
134a0 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e  /.#define OE_Non
134b0 65 20 20 20 20 20 30 20 20 20 2f 2a 20 54 68 65  e     0   /* The
134c0 72 65 20 69 73 20 6e 6f 20 63 6f 6e 73 74 72 61  re is no constra
134d0 69 6e 74 20 74 6f 20 63 68 65 63 6b 20 2a 2f 0a  int to check */.
134e0 23 64 65 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62  #define OE_Rollb
134f0 61 63 6b 20 31 20 20 20 2f 2a 20 46 61 69 6c 20  ack 1   /* Fail 
13500 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e  the operation an
13510 64 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74  d rollback the t
13520 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64  ransaction */.#d
13530 65 66 69 6e 65 20 4f 45 5f 41 62 6f 72 74 20 20  efine OE_Abort  
13540 20 20 32 20 20 20 2f 2a 20 42 61 63 6b 20 6f 75    2   /* Back ou
13550 74 20 63 68 61 6e 67 65 73 20 62 75 74 20 64 6f  t changes but do
13560 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61   no rollback tra
13570 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  nsaction */.#def
13580 69 6e 65 20 4f 45 5f 46 61 69 6c 20 20 20 20 20  ine OE_Fail     
13590 33 20 20 20 2f 2a 20 53 74 6f 70 20 74 68 65 20  3   /* Stop the 
135a0 6f 70 65 72 61 74 69 6f 6e 20 62 75 74 20 6c 65  operation but le
135b0 61 76 65 20 61 6c 6c 20 70 72 69 6f 72 20 63 68  ave all prior ch
135c0 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  anges */.#define
135d0 20 4f 45 5f 49 67 6e 6f 72 65 20 20 20 34 20 20   OE_Ignore   4  
135e0 20 2f 2a 20 49 67 6e 6f 72 65 20 74 68 65 20 65   /* Ignore the e
135f0 72 72 6f 72 2e 20 44 6f 20 6e 6f 74 20 64 6f 20  rror. Do not do 
13600 74 68 65 20 49 4e 53 45 52 54 20 6f 72 20 55 50  the INSERT or UP
13610 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  DATE */.#define 
13620 4f 45 5f 52 65 70 6c 61 63 65 20 20 35 20 20 20  OE_Replace  5   
13630 2f 2a 20 44 65 6c 65 74 65 20 65 78 69 73 74 69  /* Delete existi
13640 6e 67 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 20  ng record, then 
13650 64 6f 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44  do INSERT or UPD
13660 41 54 45 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20  ATE */..#define 
13670 4f 45 5f 52 65 73 74 72 69 63 74 20 36 20 20 20  OE_Restrict 6   
13680 2f 2a 20 4f 45 5f 41 62 6f 72 74 20 66 6f 72 20  /* OE_Abort for 
13690 49 4d 4d 45 44 49 41 54 45 2c 20 4f 45 5f 52 6f  IMMEDIATE, OE_Ro
136a0 6c 6c 62 61 63 6b 20 66 6f 72 20 44 45 46 45 52  llback for DEFER
136b0 52 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  RED */.#define O
136c0 45 5f 53 65 74 4e 75 6c 6c 20 20 37 20 20 20 2f  E_SetNull  7   /
136d0 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65 69 67  * Set the foreig
136e0 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 4e  n key value to N
136f0 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ULL */.#define O
13700 45 5f 53 65 74 44 66 6c 74 20 20 38 20 20 20 2f  E_SetDflt  8   /
13710 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65 69 67  * Set the foreig
13720 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 69  n key value to i
13730 74 73 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 64  ts default */.#d
13740 65 66 69 6e 65 20 4f 45 5f 43 61 73 63 61 64 65  efine OE_Cascade
13750 20 20 39 20 20 20 2f 2a 20 43 61 73 63 61 64 65    9   /* Cascade
13760 20 74 68 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a   the changes */.
13770 0a 23 64 65 66 69 6e 65 20 4f 45 5f 44 65 66 61  .#define OE_Defa
13780 75 6c 74 20 20 31 30 20 20 2f 2a 20 44 6f 20 77  ult  10  /* Do w
13790 68 61 74 65 76 65 72 20 74 68 65 20 64 65 66 61  hatever the defa
137a0 75 6c 74 20 61 63 74 69 6f 6e 20 69 73 20 2a 2f  ult action is */
137b0 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  .../*.** An inst
137c0 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
137d0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
137e0 69 73 20 70 61 73 73 65 64 20 61 73 20 74 68 65  is passed as the
137f0 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65   first.** argume
13800 6e 74 20 74 6f 20 73 71 6c 69 74 65 33 56 64 62  nt to sqlite3Vdb
13810 65 4b 65 79 43 6f 6d 70 61 72 65 20 61 6e 64 20  eKeyCompare and 
13820 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 72  is used to contr
13830 6f 6c 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72  ol the.** compar
13840 69 73 6f 6e 20 6f 66 20 74 68 65 20 74 77 6f 20  ison of the two 
13850 69 6e 64 65 78 20 6b 65 79 73 2e 0a 2a 2a 0a 2a  index keys..**.*
13860 2a 20 4e 6f 74 65 20 74 68 61 74 20 61 53 6f 72  * Note that aSor
13870 74 4f 72 64 65 72 5b 5d 20 61 6e 64 20 61 43 6f  tOrder[] and aCo
13880 6c 6c 5b 5d 20 68 61 76 65 20 6e 46 69 65 6c 64  ll[] have nField
13890 2b 31 20 73 6c 6f 74 73 2e 20 20 54 68 65 72 65  +1 slots.  There
138a0 0a 2a 2a 20 61 72 65 20 6e 46 69 65 6c 64 20 73  .** are nField s
138b0 6c 6f 74 73 20 66 6f 72 20 74 68 65 20 63 6f 6c  lots for the col
138c0 75 6d 6e 73 20 6f 66 20 61 6e 20 69 6e 64 65 78  umns of an index
138d0 20 74 68 65 6e 20 6f 6e 65 20 65 78 74 72 61 20   then one extra 
138e0 73 6c 6f 74 0a 2a 2a 20 66 6f 72 20 74 68 65 20  slot.** for the 
138f0 72 6f 77 69 64 20 61 74 20 74 68 65 20 65 6e 64  rowid at the end
13900 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4b 65 79 49  ..*/.struct KeyI
13910 6e 66 6f 20 7b 0a 20 20 75 33 32 20 6e 52 65 66  nfo {.  u32 nRef
13920 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
13930 75 6d 62 65 72 20 6f 66 20 72 65 66 65 72 65 6e  umber of referen
13940 63 65 73 20 74 6f 20 74 68 69 73 20 4b 65 79 49  ces to this KeyI
13950 6e 66 6f 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20  nfo object */.  
13960 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20  u8 enc;         
13970 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f      /* Text enco
13980 64 69 6e 67 20 2d 20 6f 6e 65 20 6f 66 20 74 68  ding - one of th
13990 65 20 53 51 4c 49 54 45 5f 55 54 46 2a 20 76 61  e SQLITE_UTF* va
139a0 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 46  lues */.  u16 nF
139b0 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20 2f 2a  ield;         /*
139c0 20 4e 75 6d 62 65 72 20 6f 66 20 6b 65 79 20 63   Number of key c
139d0 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 69 6e  olumns in the in
139e0 64 65 78 20 2a 2f 0a 20 20 75 31 36 20 6e 58 46  dex */.  u16 nXF
139f0 69 65 6c 64 3b 20 20 20 20 20 20 20 20 2f 2a 20  ield;        /* 
13a00 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
13a10 73 20 62 65 79 6f 6e 64 20 74 68 65 20 6b 65 79  s beyond the key
13a20 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 73 71   columns */.  sq
13a30 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20  lite3 *db;      
13a40 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73    /* The databas
13a50 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a  e connection */.
13a60 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65 72    u8 *aSortOrder
13a70 3b 20 20 20 20 20 2f 2a 20 53 6f 72 74 20 6f 72  ;     /* Sort or
13a80 64 65 72 20 66 6f 72 20 65 61 63 68 20 63 6f 6c  der for each col
13a90 75 6d 6e 2e 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65  umn. */.  CollSe
13aa0 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a  q *aColl[1];  /*
13ab0 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   Collating seque
13ac0 6e 63 65 20 66 6f 72 20 65 61 63 68 20 74 65 72  nce for each ter
13ad0 6d 20 6f 66 20 74 68 65 20 6b 65 79 20 2a 2f 0a  m of the key */.
13ae0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6f  };../*.** This o
13af0 62 6a 65 63 74 20 68 6f 6c 64 73 20 61 20 72 65  bject holds a re
13b00 63 6f 72 64 20 77 68 69 63 68 20 68 61 73 20 62  cord which has b
13b10 65 65 6e 20 70 61 72 73 65 64 20 6f 75 74 20 69  een parsed out i
13b20 6e 74 6f 20 69 6e 64 69 76 69 64 75 61 6c 0a 2a  nto individual.*
13b30 2a 20 66 69 65 6c 64 73 2c 20 66 6f 72 20 74 68  * fields, for th
13b40 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 64 6f  e purposes of do
13b50 69 6e 67 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e  ing a comparison
13b60 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64  ..**.** A record
13b70 20 69 73 20 61 6e 20 6f 62 6a 65 63 74 20 74 68   is an object th
13b80 61 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20  at contains one 
13b90 6f 72 20 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f  or more fields o
13ba0 66 20 64 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72  f data..** Recor
13bb0 64 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 73  ds are used to s
13bc0 74 6f 72 65 20 74 68 65 20 63 6f 6e 74 65 6e 74  tore the content
13bd0 20 6f 66 20 61 20 74 61 62 6c 65 20 72 6f 77 20   of a table row 
13be0 61 6e 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20  and to store.** 
13bf0 74 68 65 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e  the key of an in
13c00 64 65 78 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63  dex.  A blob enc
13c10 6f 64 69 6e 67 20 6f 66 20 61 20 72 65 63 6f 72  oding of a recor
13c20 64 20 69 73 20 63 72 65 61 74 65 64 20 62 79 0a  d is created by.
13c30 2a 2a 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65  ** the OP_MakeRe
13c40 63 6f 72 64 20 6f 70 63 6f 64 65 20 6f 66 20 74  cord opcode of t
13c50 68 65 20 56 44 42 45 20 61 6e 64 20 69 73 20 64  he VDBE and is d
13c60 69 73 61 73 73 65 6d 62 6c 65 64 20 62 79 20 74  isassembled by t
13c70 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20  he.** OP_Column 
13c80 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 6e  opcode..**.** An
13c90 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
13ca0 73 20 6f 62 6a 65 63 74 20 73 65 72 76 65 73 20  s object serves 
13cb0 61 73 20 61 20 22 6b 65 79 22 20 66 6f 72 20 64  as a "key" for d
13cc0 6f 69 6e 67 20 61 20 73 65 61 72 63 68 20 6f 6e  oing a search on
13cd0 0a 2a 2a 20 61 6e 20 69 6e 64 65 78 20 62 2b 74  .** an index b+t
13ce0 72 65 65 2e 20 54 68 65 20 67 6f 61 6c 20 6f 66  ree. The goal of
13cf0 20 74 68 65 20 73 65 61 72 63 68 20 69 73 20 74   the search is t
13d00 6f 20 66 69 6e 64 20 74 68 65 20 65 6e 74 72 79  o find the entry
13d10 20 74 68 61 74 0a 2a 2a 20 69 73 20 63 6c 6f 73   that.** is clos
13d20 65 64 20 74 6f 20 74 68 65 20 6b 65 79 20 64 65  ed to the key de
13d30 73 63 72 69 62 65 64 20 62 79 20 74 68 69 73 20  scribed by this 
13d40 6f 62 6a 65 63 74 2e 20 20 54 68 69 73 20 6f 62  object.  This ob
13d50 6a 65 63 74 20 6d 69 67 68 74 20 68 6f 6c 64 0a  ject might hold.
13d60 2a 2a 20 6a 75 73 74 20 61 20 70 72 65 66 69 78  ** just a prefix
13d70 20 6f 66 20 74 68 65 20 6b 65 79 2e 20 20 54 68   of the key.  Th
13d80 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c  e number of fiel
13d90 64 73 20 69 73 20 67 69 76 65 6e 20 62 79 0a 2a  ds is given by.*
13da0 2a 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65  * pKeyInfo->nFie
13db0 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 31  ld..**.** The r1
13dc0 20 61 6e 64 20 72 32 20 66 69 65 6c 64 73 20 61   and r2 fields a
13dd0 72 65 20 74 68 65 20 76 61 6c 75 65 73 20 74 6f  re the values to
13de0 20 72 65 74 75 72 6e 20 69 66 20 74 68 69 73 20   return if this 
13df0 6b 65 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e  key is less than
13e00 0a 2a 2a 20 6f 72 20 67 72 65 61 74 65 72 20 74  .** or greater t
13e10 68 61 6e 20 61 20 6b 65 79 20 69 6e 20 74 68 65  han a key in the
13e20 20 62 74 72 65 65 2c 20 72 65 73 70 65 63 74 69   btree, respecti
13e30 76 65 6c 79 2e 20 20 54 68 65 73 65 20 61 72 65  vely.  These are
13e40 20 6e 6f 72 6d 61 6c 6c 79 0a 2a 2a 20 2d 31 20   normally.** -1 
13e50 61 6e 64 20 2b 31 20 72 65 73 70 65 63 74 69 76  and +1 respectiv
13e60 65 6c 79 2c 20 62 75 74 20 6d 69 67 68 74 20 62  ely, but might b
13e70 65 20 69 6e 76 65 72 74 65 64 20 74 6f 20 2b 31  e inverted to +1
13e80 20 61 6e 64 20 2d 31 20 69 66 20 74 68 65 20 62   and -1 if the b
13e90 2d 74 72 65 65 0a 2a 2a 20 69 73 20 69 6e 20 44  -tree.** is in D
13ea0 45 53 43 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a  ESC order..**.**
13eb0 20 54 68 65 20 6b 65 79 20 63 6f 6d 70 61 72 69   The key compari
13ec0 73 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 61 63  son functions ac
13ed0 74 75 61 6c 6c 79 20 72 65 74 75 72 6e 20 64 65  tually return de
13ee0 66 61 75 6c 74 5f 72 63 20 77 68 65 6e 20 74 68  fault_rc when th
13ef0 65 79 20 66 69 6e 64 0a 2a 2a 20 61 6e 20 65 71  ey find.** an eq
13f00 75 61 6c 73 20 63 6f 6d 70 61 72 69 73 6f 6e 2e  uals comparison.
13f10 20 20 64 65 66 61 75 6c 74 5f 72 63 20 63 61 6e    default_rc can
13f20 20 62 65 20 2d 31 2c 20 30 2c 20 6f 72 20 2b 31   be -1, 0, or +1
13f30 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65 0a  .  If there are.
13f40 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 65 6e 74 72  ** multiple entr
13f50 69 65 73 20 69 6e 20 74 68 65 20 62 2d 74 72 65  ies in the b-tre
13f60 65 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  e with the same 
13f70 6b 65 79 20 28 77 68 65 6e 20 6f 6e 6c 79 20 6c  key (when only l
13f80 6f 6f 6b 69 6e 67 0a 2a 2a 20 61 74 20 74 68 65  ooking.** at the
13f90 20 66 69 72 73 74 20 70 4b 65 79 49 6e 66 6f 2d   first pKeyInfo-
13fa0 3e 6e 46 69 65 6c 64 73 2c 29 20 74 68 65 6e 20  >nFields,) then 
13fb0 64 65 66 61 75 6c 74 5f 72 63 20 63 61 6e 20 62  default_rc can b
13fc0 65 20 73 65 74 20 74 6f 20 2d 31 20 74 6f 0a 2a  e set to -1 to.*
13fd0 2a 20 63 61 75 73 65 20 74 68 65 20 73 65 61 72  * cause the sear
13fe0 63 68 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6c  ch to find the l
13ff0 61 73 74 20 6d 61 74 63 68 2c 20 6f 72 20 2b 31  ast match, or +1
14000 20 74 6f 20 63 61 75 73 65 20 74 68 65 20 73 65   to cause the se
14010 61 72 63 68 20 74 6f 0a 2a 2a 20 66 69 6e 64 20  arch to.** find 
14020 74 68 65 20 66 69 72 73 74 20 6d 61 74 63 68 2e  the first match.
14030 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6b 65 79 20 63  .**.** The key c
14040 6f 6d 70 61 72 69 73 6f 6e 20 66 75 6e 63 74 69  omparison functi
14050 6f 6e 73 20 77 69 6c 6c 20 73 65 74 20 65 71 53  ons will set eqS
14060 65 65 6e 20 74 6f 20 74 72 75 65 20 69 66 20 74  een to true if t
14070 68 65 79 20 65 76 65 72 0a 2a 2a 20 67 65 74 20  hey ever.** get 
14080 61 6e 64 20 65 71 75 61 6c 20 72 65 73 75 6c 74  and equal result
14090 73 20 77 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67  s when comparing
140a0 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
140b0 74 6f 20 61 20 62 2d 74 72 65 65 20 72 65 63 6f  to a b-tree reco
140c0 72 64 2e 0a 2a 2a 20 57 68 65 6e 20 64 65 66 61  rd..** When defa
140d0 75 6c 74 5f 72 63 21 3d 30 2c 20 74 68 65 20 73  ult_rc!=0, the s
140e0 65 61 72 63 68 20 6d 69 67 68 74 20 65 6e 64 20  earch might end 
140f0 75 70 20 6f 6e 20 74 68 65 20 72 65 63 6f 72 64  up on the record
14100 20 69 6d 6d 65 64 69 61 74 65 6c 79 0a 2a 2a 20   immediately.** 
14110 62 65 66 6f 72 65 20 74 68 65 20 66 69 72 73 74  before the first
14120 20 6d 61 74 63 68 20 6f 72 20 69 6d 6d 65 64 69   match or immedi
14130 61 74 65 6c 79 20 61 66 74 65 72 20 74 68 65 20  ately after the 
14140 6c 61 73 74 20 6d 61 74 63 68 2e 20 20 54 68 65  last match.  The
14150 0a 2a 2a 20 65 71 53 65 65 6e 20 66 69 65 6c 64  .** eqSeen field
14160 20 77 69 6c 6c 20 69 6e 64 69 63 61 74 65 20 77   will indicate w
14170 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e  hether or not an
14180 20 65 78 61 63 74 20 6d 61 74 63 68 20 65 78 69   exact match exi
14190 73 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20 62 2d  sts in the.** b-
141a0 74 72 65 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tree..*/.struct 
141b0 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 7b  UnpackedRecord {
141c0 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79  .  KeyInfo *pKey
141d0 49 6e 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74  Info;  /* Collat
141e0 69 6f 6e 20 61 6e 64 20 73 6f 72 74 2d 6f 72 64  ion and sort-ord
141f0 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a  er information *
14200 2f 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20  /.  Mem *aMem;  
14210 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
14220 73 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c  s */.  u16 nFiel
14230 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  d;         /* Nu
14240 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20  mber of entries 
14250 69 6e 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20  in apMem[] */.  
14260 69 38 20 64 65 66 61 75 6c 74 5f 72 63 3b 20 20  i8 default_rc;  
14270 20 20 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f      /* Compariso
14280 6e 20 72 65 73 75 6c 74 20 69 66 20 6b 65 79 73  n result if keys
14290 20 61 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20   are equal */.  
142a0 75 38 20 65 72 72 43 6f 64 65 3b 20 20 20 20 20  u8 errCode;     
142b0 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 64 65 74      /* Error det
142c0 65 63 74 65 64 20 62 79 20 78 52 65 63 6f 72 64  ected by xRecord
142d0 43 6f 6d 70 61 72 65 20 28 43 4f 52 52 55 50 54  Compare (CORRUPT
142e0 20 6f 72 20 4e 4f 4d 45 4d 29 20 2a 2f 0a 20 20   or NOMEM) */.  
142f0 69 38 20 72 31 3b 20 20 20 20 20 20 20 20 20 20  i8 r1;          
14300 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20      /* Value to 
14310 72 65 74 75 72 6e 20 69 66 20 28 6c 68 73 20 3e  return if (lhs >
14320 20 72 68 73 29 20 2a 2f 0a 20 20 69 38 20 72 32   rhs) */.  i8 r2
14330 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
14340 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72  * Value to retur
14350 6e 20 69 66 20 28 72 68 73 20 3c 20 6c 68 73 29  n if (rhs < lhs)
14360 20 2a 2f 0a 20 20 75 38 20 65 71 53 65 65 6e 3b   */.  u8 eqSeen;
14370 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
14380 65 20 69 66 20 61 6e 20 65 71 75 61 6c 69 74 79  e if an equality
14390 20 63 6f 6d 70 61 72 69 73 6f 6e 20 68 61 73 20   comparison has 
143a0 62 65 65 6e 20 73 65 65 6e 20 2a 2f 0a 7d 3b 0a  been seen */.};.
143b0 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c  ../*.** Each SQL
143c0 20 69 6e 64 65 78 20 69 73 20 72 65 70 72 65 73   index is repres
143d0 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20  ented in memory 
143e0 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63  by an.** instanc
143f0 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
14400 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  ng structure..**
14410 0a 2a 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20  .** The columns 
14420 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  of the table tha
14430 74 20 61 72 65 20 74 6f 20 62 65 20 69 6e 64 65  t are to be inde
14440 78 65 64 20 61 72 65 20 64 65 73 63 72 69 62 65  xed are describe
14450 64 0a 2a 2a 20 62 79 20 74 68 65 20 61 69 43 6f  d.** by the aiCo
14460 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20  lumn[] field of 
14470 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20  this structure. 
14480 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 73 75   For example, su
14490 70 70 6f 73 65 0a 2a 2a 20 77 65 20 68 61 76 65  ppose.** we have
144a0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   the following t
144b0 61 62 6c 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a  able and index:.
144c0 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45  **.**     CREATE
144d0 20 54 41 42 4c 45 20 45 78 31 28 63 31 20 69 6e   TABLE Ex1(c1 in
144e0 74 2c 20 63 32 20 69 6e 74 2c 20 63 33 20 74 65  t, c2 int, c3 te
144f0 78 74 29 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41  xt);.**     CREA
14500 54 45 20 49 4e 44 45 58 20 45 78 32 20 4f 4e 20  TE INDEX Ex2 ON 
14510 45 78 31 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a  Ex1(c3,c1);.**.*
14520 2a 20 49 6e 20 74 68 65 20 54 61 62 6c 65 20 73  * In the Table s
14530 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62  tructure describ
14540 69 6e 67 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33  ing Ex1, nCol==3
14550 20 62 65 63 61 75 73 65 20 74 68 65 72 65 20 61   because there a
14560 72 65 0a 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75  re.** three colu
14570 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  mns in the table
14580 2e 20 20 49 6e 20 74 68 65 20 49 6e 64 65 78 20  .  In the Index 
14590 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69  structure descri
145a0 62 69 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f  bing.** Ex2, nCo
145b0 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20  lumn==2 since 2 
145c0 6f 66 20 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73  of the 3 columns
145d0 20 6f 66 20 45 78 31 20 61 72 65 20 69 6e 64 65   of Ex1 are inde
145e0 78 65 64 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75  xed..** The valu
145f0 65 20 6f 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73  e of aiColumn is
14600 20 7b 32 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75   {2, 0}.  aiColu
14610 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63 61 75 73 65  mn[0]==2 because
14620 20 74 68 65 0a 2a 2a 20 66 69 72 73 74 20 63 6f   the.** first co
14630 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78  lumn to be index
14640 65 64 20 28 63 33 29 20 68 61 73 20 61 6e 20 69  ed (c3) has an i
14650 6e 64 65 78 20 6f 66 20 32 20 69 6e 20 45 78 31  ndex of 2 in Ex1
14660 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20  .aCol[]..** The 
14670 73 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f  second column to
14680 20 62 65 20 69 6e 64 65 78 65 64 20 28 63 31 29   be indexed (c1)
14690 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66   has an index of
146a0 20 30 20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f   0 in.** Ex1.aCo
146b0 6c 5b 5d 2c 20 68 65 6e 63 65 20 45 78 32 2e 61  l[], hence Ex2.a
146c0 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a  iColumn[1]==0..*
146d0 2a 0a 2a 2a 20 54 68 65 20 49 6e 64 65 78 2e 6f  *.** The Index.o
146e0 6e 45 72 72 6f 72 20 66 69 65 6c 64 20 64 65 74  nError field det
146f0 65 72 6d 69 6e 65 73 20 77 68 65 74 68 65 72 20  ermines whether 
14700 6f 72 20 6e 6f 74 20 74 68 65 20 69 6e 64 65 78  or not the index
14710 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75  ed columns.** mu
14720 73 74 20 62 65 20 75 6e 69 71 75 65 20 61 6e 64  st be unique and
14730 20 77 68 61 74 20 74 6f 20 64 6f 20 69 66 20 74   what to do if t
14740 68 65 79 20 61 72 65 20 6e 6f 74 2e 20 20 57 68  hey are not.  Wh
14750 65 6e 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72  en Index.onError
14760 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20  =OE_None,.** it 
14770 6d 65 61 6e 73 20 74 68 69 73 20 69 73 20 6e 6f  means this is no
14780 74 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78  t a unique index
14790 2e 20 20 4f 74 68 65 72 77 69 73 65 20 69 74 20  .  Otherwise it 
147a0 69 73 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65  is a unique inde
147b0 78 0a 2a 2a 20 61 6e 64 20 74 68 65 20 76 61 6c  x.** and the val
147c0 75 65 20 6f 66 20 49 6e 64 65 78 2e 6f 6e 45 72  ue of Index.onEr
147d0 72 6f 72 20 69 6e 64 69 63 61 74 65 20 74 68 65  ror indicate the
147e0 20 77 68 69 63 68 20 63 6f 6e 66 6c 69 63 74 20   which conflict 
147f0 72 65 73 6f 6c 75 74 69 6f 6e 0a 2a 2a 20 61 6c  resolution.** al
14800 67 6f 72 69 74 68 6d 20 74 6f 20 65 6d 70 6c 6f  gorithm to emplo
14810 79 20 77 68 65 6e 65 76 65 72 20 61 6e 20 61 74  y whenever an at
14820 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f  tempt is made to
14830 20 69 6e 73 65 72 74 20 61 20 6e 6f 6e 2d 75 6e   insert a non-un
14840 69 71 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e  ique.** element.
14850 0a 2a 2a 0a 2a 2a 20 57 68 69 6c 65 20 70 61 72  .**.** While par
14860 73 69 6e 67 20 61 20 43 52 45 41 54 45 20 54 41  sing a CREATE TA
14870 42 4c 45 20 6f 72 20 43 52 45 41 54 45 20 49 4e  BLE or CREATE IN
14880 44 45 58 20 73 74 61 74 65 6d 65 6e 74 20 69 6e  DEX statement in
14890 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65 6e   order to.** gen
148a0 65 72 61 74 65 20 56 44 42 45 20 63 6f 64 65 20  erate VDBE code 
148b0 28 61 73 20 6f 70 70 6f 73 65 64 20 74 6f 20 70  (as opposed to p
148c0 61 72 73 69 6e 67 20 6f 6e 65 20 72 65 61 64 20  arsing one read 
148d0 66 72 6f 6d 20 61 6e 20 73 71 6c 69 74 65 5f 6d  from an sqlite_m
148e0 61 73 74 65 72 0a 2a 2a 20 74 61 62 6c 65 20 61  aster.** table a
148f0 73 20 70 61 72 74 20 6f 66 20 70 61 72 73 69 6e  s part of parsin
14900 67 20 61 6e 20 65 78 69 73 74 69 6e 67 20 64 61  g an existing da
14910 74 61 62 61 73 65 20 73 63 68 65 6d 61 29 2c 20  tabase schema), 
14920 74 72 61 6e 73 69 65 6e 74 20 69 6e 73 74 61 6e  transient instan
14930 63 65 73 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73  ces.** of this s
14940 74 72 75 63 74 75 72 65 20 6d 61 79 20 62 65 20  tructure may be 
14950 63 72 65 61 74 65 64 2e 20 49 6e 20 74 68 69 73  created. In this
14960 20 63 61 73 65 20 74 68 65 20 49 6e 64 65 78 2e   case the Index.
14970 74 6e 75 6d 20 76 61 72 69 61 62 6c 65 20 69 73  tnum variable is
14980 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72  .** used to stor
14990 65 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66  e the address of
149a0 20 61 20 56 44 42 45 20 69 6e 73 74 72 75 63 74   a VDBE instruct
149b0 69 6f 6e 2c 20 6e 6f 74 20 61 20 64 61 74 61 62  ion, not a datab
149c0 61 73 65 20 70 61 67 65 0a 2a 2a 20 6e 75 6d 62  ase page.** numb
149d0 65 72 20 28 69 74 20 63 61 6e 6e 6f 74 20 2d 20  er (it cannot - 
149e0 74 68 65 20 64 61 74 61 62 61 73 65 20 70 61 67  the database pag
149f0 65 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 63 61 74  e is not allocat
14a00 65 64 20 75 6e 74 69 6c 20 74 68 65 20 56 44 42  ed until the VDB
14a10 45 0a 2a 2a 20 70 72 6f 67 72 61 6d 20 69 73 20  E.** program is 
14a20 65 78 65 63 75 74 65 64 29 2e 20 53 65 65 20 63  executed). See c
14a30 6f 6e 76 65 72 74 54 6f 57 69 74 68 6f 75 74 52  onvertToWithoutR
14a40 6f 77 69 64 54 61 62 6c 65 28 29 20 66 6f 72 20  owidTable() for 
14a50 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 73 74 72 75  details..*/.stru
14a60 63 74 20 49 6e 64 65 78 20 7b 0a 20 20 63 68 61  ct Index {.  cha
14a70 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
14a80 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
14a90 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20   this index */. 
14aa0 20 69 31 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20   i16 *aiColumn; 
14ab0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69            /* Whi
14ac0 63 68 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75  ch columns are u
14ad0 73 65 64 20 62 79 20 74 68 69 73 20 69 6e 64 65  sed by this inde
14ae0 78 2e 20 20 31 73 74 20 69 73 20 30 20 2a 2f 0a  x.  1st is 0 */.
14af0 20 20 4c 6f 67 45 73 74 20 2a 61 69 52 6f 77 4c    LogEst *aiRowL
14b00 6f 67 45 73 74 3b 20 20 20 20 20 2f 2a 20 46 72  ogEst;     /* Fr
14b10 6f 6d 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74 2e  om ANALYZE: Est.
14b20 20 72 6f 77 73 20 73 65 6c 65 63 74 65 64 20 62   rows selected b
14b30 79 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f  y each column */
14b40 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 6c 65  .  Table *pTable
14b50 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
14b60 68 65 20 53 51 4c 20 74 61 62 6c 65 20 62 65 69  he SQL table bei
14b70 6e 67 20 69 6e 64 65 78 65 64 20 2a 2f 0a 20 20  ng indexed */.  
14b80 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20  char *zColAff;  
14b90 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69           /* Stri
14ba0 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20  ng defining the 
14bb0 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68  affinity of each
14bc0 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64   column */.  Ind
14bd0 65 78 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20  ex *pNext;      
14be0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78        /* The nex
14bf0 74 20 69 6e 64 65 78 20 61 73 73 6f 63 69 61 74  t index associat
14c00 65 64 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  ed with the same
14c10 20 74 61 62 6c 65 20 2a 2f 0a 20 20 53 63 68 65   table */.  Sche
14c20 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20  ma *pSchema;    
14c30 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63       /* Schema c
14c40 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20 69  ontaining this i
14c50 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53  ndex */.  u8 *aS
14c60 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20  ortOrder;       
14c70 20 20 20 2f 2a 20 66 6f 72 20 65 61 63 68 20 63     /* for each c
14c80 6f 6c 75 6d 6e 3a 20 54 72 75 65 3d 3d 44 45 53  olumn: True==DES
14c90 43 2c 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f  C, False==ASC */
14ca0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a  .  const char **
14cb0 61 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 41  azColl;     /* A
14cc0 72 72 61 79 20 6f 66 20 63 6f 6c 6c 61 74 69 6f  rray of collatio
14cd0 6e 20 73 65 71 75 65 6e 63 65 20 6e 61 6d 65 73  n sequence names
14ce0 20 66 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20   for index */.  
14cf0 45 78 70 72 20 2a 70 50 61 72 74 49 64 78 57 68  Expr *pPartIdxWh
14d00 65 72 65 3b 20 20 20 20 20 2f 2a 20 57 48 45 52  ere;     /* WHER
14d10 45 20 63 6c 61 75 73 65 20 66 6f 72 20 70 61 72  E clause for par
14d20 74 69 61 6c 20 69 6e 64 69 63 65 73 20 2a 2f 0a  tial indices */.
14d30 20 20 45 78 70 72 4c 69 73 74 20 2a 61 43 6f 6c    ExprList *aCol
14d40 45 78 70 72 3b 20 20 20 20 20 20 2f 2a 20 43 6f  Expr;      /* Co
14d50 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 73  lumn expressions
14d60 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20   */.  int tnum; 
14d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
14d80 2a 20 44 42 20 50 61 67 65 20 63 6f 6e 74 61 69  * DB Page contai
14d90 6e 69 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68 69  ning root of thi
14da0 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f 67  s index */.  Log
14db0 45 73 74 20 73 7a 49 64 78 52 6f 77 3b 20 20 20  Est szIdxRow;   
14dc0 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74        /* Estimat
14dd0 65 64 20 61 76 65 72 61 67 65 20 72 6f 77 20 73  ed average row s
14de0 69 7a 65 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a  ize in bytes */.
14df0 20 20 75 31 36 20 6e 4b 65 79 43 6f 6c 3b 20 20    u16 nKeyCol;  
14e00 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
14e10 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
14e20 66 6f 72 6d 69 6e 67 20 74 68 65 20 6b 65 79 20  forming the key 
14e30 2a 2f 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d 6e  */.  u16 nColumn
14e40 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
14e50 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
14e60 6e 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  ns stored in the
14e70 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 6f   index */.  u8 o
14e80 6e 45 72 72 6f 72 3b 20 20 20 20 20 20 20 20 20  nError;         
14e90 20 20 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74       /* OE_Abort
14ea0 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f  , OE_Ignore, OE_
14eb0 52 65 70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f 4e  Replace, or OE_N
14ec0 6f 6e 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  one */.  unsigne
14ed0 64 20 69 64 78 54 79 70 65 3a 32 3b 20 20 20 20  d idxType:2;    
14ee0 20 20 2f 2a 20 31 3d 3d 55 4e 49 51 55 45 2c 20    /* 1==UNIQUE, 
14ef0 32 3d 3d 50 52 49 4d 41 52 59 20 4b 45 59 2c 20  2==PRIMARY KEY, 
14f00 30 3d 3d 43 52 45 41 54 45 20 49 4e 44 45 58 20  0==CREATE INDEX 
14f10 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 62 55  */.  unsigned bU
14f20 6e 6f 72 64 65 72 65 64 3a 31 3b 20 20 20 2f 2a  nordered:1;   /*
14f30 20 55 73 65 20 74 68 69 73 20 69 6e 64 65 78 20   Use this index 
14f40 66 6f 72 20 3d 3d 20 6f 72 20 49 4e 20 71 75 65  for == or IN que
14f50 72 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 75  ries only */.  u
14f60 6e 73 69 67 6e 65 64 20 75 6e 69 71 4e 6f 74 4e  nsigned uniqNotN
14f70 75 6c 6c 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20  ull:1;  /* True 
14f80 69 66 20 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f  if UNIQUE and NO
14f90 54 20 4e 55 4c 4c 20 66 6f 72 20 61 6c 6c 20 63  T NULL for all c
14fa0 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73 69  olumns */.  unsi
14fb0 67 6e 65 64 20 69 73 52 65 73 69 7a 65 64 3a 31  gned isResized:1
14fc0 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  ;    /* True if 
14fd0 72 65 73 69 7a 65 49 6e 64 65 78 4f 62 6a 65 63  resizeIndexObjec
14fe0 74 28 29 20 68 61 73 20 62 65 65 6e 20 63 61 6c  t() has been cal
14ff0 6c 65 64 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  led */.  unsigne
15000 64 20 69 73 43 6f 76 65 72 69 6e 67 3a 31 3b 20  d isCovering:1; 
15010 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 69    /* True if thi
15020 73 20 69 73 20 61 20 63 6f 76 65 72 69 6e 67 20  s is a covering 
15030 69 6e 64 65 78 20 2a 2f 0a 20 20 75 6e 73 69 67  index */.  unsig
15040 6e 65 64 20 6e 6f 53 6b 69 70 53 63 61 6e 3a 31  ned noSkipScan:1
15050 3b 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 74 72  ;   /* Do not tr
15060 79 20 74 6f 20 75 73 65 20 73 6b 69 70 2d 73 63  y to use skip-sc
15070 61 6e 20 69 66 20 74 72 75 65 20 2a 2f 0a 23 69  an if true */.#i
15080 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
15090 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
150a0 34 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 3b  4.  int nSample;
150b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
150c0 4e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e  Number of elemen
150d0 74 73 20 69 6e 20 61 53 61 6d 70 6c 65 5b 5d 20  ts in aSample[] 
150e0 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65  */.  int nSample
150f0 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Col;          /*
15100 20 53 69 7a 65 20 6f 66 20 49 6e 64 65 78 53 61   Size of IndexSa
15110 6d 70 6c 65 2e 61 6e 45 71 5b 5d 20 61 6e 64 20  mple.anEq[] and 
15120 73 6f 20 6f 6e 20 2a 2f 0a 20 20 74 52 6f 77 63  so on */.  tRowc
15130 6e 74 20 2a 61 41 76 67 45 71 3b 20 20 20 20 20  nt *aAvgEq;     
15140 20 20 20 20 2f 2a 20 41 76 65 72 61 67 65 20 6e      /* Average n
15150 45 71 20 76 61 6c 75 65 73 20 66 6f 72 20 6b 65  Eq values for ke
15160 79 73 20 6e 6f 74 20 69 6e 20 61 53 61 6d 70 6c  ys not in aSampl
15170 65 20 2a 2f 0a 20 20 49 6e 64 65 78 53 61 6d 70  e */.  IndexSamp
15180 6c 65 20 2a 61 53 61 6d 70 6c 65 3b 20 20 20 20  le *aSample;    
15190 2f 2a 20 53 61 6d 70 6c 65 73 20 6f 66 20 74 68  /* Samples of th
151a0 65 20 6c 65 66 74 2d 6d 6f 73 74 20 6b 65 79 20  e left-most key 
151b0 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 69  */.  tRowcnt *ai
151c0 52 6f 77 45 73 74 3b 20 20 20 20 20 20 20 2f 2a  RowEst;       /*
151d0 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69 63   Non-logarithmic
151e0 20 73 74 61 74 31 20 64 61 74 61 20 66 6f 72 20   stat1 data for 
151f0 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20  this index */.  
15200 74 52 6f 77 63 6e 74 20 6e 52 6f 77 45 73 74 30  tRowcnt nRowEst0
15210 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d  ;        /* Non-
15220 6c 6f 67 61 72 69 74 68 6d 69 63 20 6e 75 6d 62  logarithmic numb
15230 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68  er of rows in th
15240 65 20 69 6e 64 65 78 20 2a 2f 0a 23 65 6e 64 69  e index */.#endi
15250 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  f.};../*.** Allo
15260 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 49  wed values for I
15270 6e 64 65 78 2e 69 64 78 54 79 70 65 0a 2a 2f 0a  ndex.idxType.*/.
15280 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
15290 44 58 54 59 50 45 5f 41 50 50 44 45 46 20 20 20  DXTYPE_APPDEF   
152a0 20 20 20 30 20 20 20 2f 2a 20 43 72 65 61 74 65     0   /* Create
152b0 64 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 49  d using CREATE I
152c0 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NDEX */.#define 
152d0 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 55  SQLITE_IDXTYPE_U
152e0 4e 49 51 55 45 20 20 20 20 20 20 31 20 20 20 2f  NIQUE      1   /
152f0 2a 20 49 6d 70 6c 65 6d 65 6e 74 73 20 61 20 55  * Implements a U
15300 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74  NIQUE constraint
15310 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
15320 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d 41  TE_IDXTYPE_PRIMA
15330 52 59 4b 45 59 20 20 32 20 20 20 2f 2a 20 49 73  RYKEY  2   /* Is
15340 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
15350 20 66 6f 72 20 74 68 65 20 74 61 62 6c 65 20 2a   for the table *
15360 2f 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72 75  /../* Return tru
15370 65 20 69 66 20 69 6e 64 65 78 20 58 20 69 73 20  e if index X is 
15380 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 6e  a PRIMARY KEY in
15390 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  dex */.#define I
153a0 73 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78  sPrimaryKeyIndex
153b0 28 58 29 20 20 28 28 58 29 2d 3e 69 64 78 54 79  (X)  ((X)->idxTy
153c0 70 65 3d 3d 53 51 4c 49 54 45 5f 49 44 58 54 59  pe==SQLITE_IDXTY
153d0 50 45 5f 50 52 49 4d 41 52 59 4b 45 59 29 0a 0a  PE_PRIMARYKEY)..
153e0 2f 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69  /* Return true i
153f0 66 20 69 6e 64 65 78 20 58 20 69 73 20 61 20 55  f index X is a U
15400 4e 49 51 55 45 20 69 6e 64 65 78 20 2a 2f 0a 23  NIQUE index */.#
15410 64 65 66 69 6e 65 20 49 73 55 6e 69 71 75 65 49  define IsUniqueI
15420 6e 64 65 78 28 58 29 20 20 20 20 20 20 28 28 58  ndex(X)      ((X
15430 29 2d 3e 6f 6e 45 72 72 6f 72 21 3d 4f 45 5f 4e  )->onError!=OE_N
15440 6f 6e 65 29 0a 0a 2f 2a 20 54 68 65 20 49 6e 64  one)../* The Ind
15450 65 78 2e 61 69 43 6f 6c 75 6d 6e 5b 5d 20 76 61  ex.aiColumn[] va
15460 6c 75 65 73 20 61 72 65 20 6e 6f 72 6d 61 6c 6c  lues are normall
15470 79 20 70 6f 73 69 74 69 76 65 20 69 6e 74 65 67  y positive integ
15480 65 72 2e 20 20 42 75 74 0a 2a 2a 20 74 68 65 72  er.  But.** ther
15490 65 20 61 72 65 20 73 6f 6d 65 20 6e 65 67 61 74  e are some negat
154a0 69 76 65 20 76 61 6c 75 65 73 20 74 68 61 74 20  ive values that 
154b0 68 61 76 65 20 73 70 65 63 69 61 6c 20 6d 65 61  have special mea
154c0 6e 69 6e 67 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65  ning:.*/.#define
154d0 20 58 4e 5f 52 4f 57 49 44 20 20 20 20 20 28 2d   XN_ROWID     (-
154e0 31 29 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 65  1)     /* Indexe
154f0 64 20 63 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20  d column is the 
15500 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65  rowid */.#define
15510 20 58 4e 5f 45 58 50 52 20 20 20 20 20 20 28 2d   XN_EXPR      (-
15520 32 29 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 65  2)     /* Indexe
15530 64 20 63 6f 6c 75 6d 6e 20 69 73 20 61 6e 20 65  d column is an e
15540 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 0a 2f 2a  xpression */../*
15550 0a 2a 2a 20 45 61 63 68 20 73 61 6d 70 6c 65 20  .** Each sample 
15560 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71  stored in the sq
15570 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65  lite_stat3 table
15580 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20   is represented 
15590 69 6e 20 6d 65 6d 6f 72 79 0a 2a 2a 20 75 73 69  in memory.** usi
155a0 6e 67 20 61 20 73 74 72 75 63 74 75 72 65 20 6f  ng a structure o
155b0 66 20 74 68 69 73 20 74 79 70 65 2e 20 20 53 65  f this type.  Se
155c0 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20  e documentation 
155d0 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68  at the top of th
155e0 65 0a 2a 2a 20 61 6e 61 6c 79 7a 65 2e 63 20 73  e.** analyze.c s
155f0 6f 75 72 63 65 20 66 69 6c 65 20 66 6f 72 20 61  ource file for a
15600 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
15610 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ation..*/.struct
15620 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 7b 0a 20   IndexSample {. 
15630 20 76 6f 69 64 20 2a 70 3b 20 20 20 20 20 20 20   void *p;       
15640 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
15650 20 73 61 6d 70 6c 65 64 20 72 65 63 6f 72 64 20   sampled record 
15660 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20 20  */.  int n;     
15670 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
15680 66 20 72 65 63 6f 72 64 20 69 6e 20 62 79 74 65  f record in byte
15690 73 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a  s */.  tRowcnt *
156a0 61 6e 45 71 3b 20 20 20 20 2f 2a 20 45 73 74 2e  anEq;    /* Est.
156b0 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
156c0 77 68 65 72 65 20 74 68 65 20 6b 65 79 20 65 71  where the key eq
156d0 75 61 6c 73 20 74 68 69 73 20 73 61 6d 70 6c 65  uals this sample
156e0 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61   */.  tRowcnt *a
156f0 6e 4c 74 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20  nLt;    /* Est. 
15700 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 77  number of rows w
15710 68 65 72 65 20 6b 65 79 20 69 73 20 6c 65 73 73  here key is less
15720 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70 6c   than this sampl
15730 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a  e */.  tRowcnt *
15740 61 6e 44 4c 74 3b 20 20 20 2f 2a 20 45 73 74 2e  anDLt;   /* Est.
15750 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 73 74 69   number of disti
15760 6e 63 74 20 6b 65 79 73 20 6c 65 73 73 20 74 68  nct keys less th
15770 61 6e 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a  an this sample *
15780 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  /.};../*.** Each
15790 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f 75   token coming ou
157a0 74 20 6f 66 20 74 68 65 20 6c 65 78 65 72 20 69  t of the lexer i
157b0 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
157c0 0a 2a 2a 20 74 68 69 73 20 73 74 72 75 63 74 75  .** this structu
157d0 72 65 2e 20 20 54 6f 6b 65 6e 73 20 61 72 65 20  re.  Tokens are 
157e0 61 6c 73 6f 20 75 73 65 64 20 61 73 20 70 61 72  also used as par
157f0 74 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69  t of an expressi
15800 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 69  on..**.** Note i
15810 66 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 20 74 68 65  f Token.z==0 the
15820 6e 20 54 6f 6b 65 6e 2e 64 79 6e 20 61 6e 64 20  n Token.dyn and 
15830 54 6f 6b 65 6e 2e 6e 20 61 72 65 20 75 6e 64 65  Token.n are unde
15840 66 69 6e 65 64 20 61 6e 64 0a 2a 2a 20 6d 61 79  fined and.** may
15850 20 63 6f 6e 74 61 69 6e 20 72 61 6e 64 6f 6d 20   contain random 
15860 76 61 6c 75 65 73 2e 20 20 44 6f 20 6e 6f 74 20  values.  Do not 
15870 6d 61 6b 65 20 61 6e 79 20 61 73 73 75 6d 70 74  make any assumpt
15880 69 6f 6e 73 20 61 62 6f 75 74 20 54 6f 6b 65 6e  ions about Token
15890 2e 64 79 6e 0a 2a 2a 20 61 6e 64 20 54 6f 6b 65  .dyn.** and Toke
158a0 6e 2e 6e 20 77 68 65 6e 20 54 6f 6b 65 6e 2e 7a  n.n when Token.z
158b0 3d 3d 30 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54  ==0..*/.struct T
158c0 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73 74 20 63  oken {.  const c
158d0 68 61 72 20 2a 7a 3b 20 20 20 20 20 2f 2a 20 54  har *z;     /* T
158e0 65 78 74 20 6f 66 20 74 68 65 20 74 6f 6b 65 6e  ext of the token
158f0 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74 65 72 6d  .  Not NULL-term
15900 69 6e 61 74 65 64 21 20 2a 2f 0a 20 20 75 6e 73  inated! */.  uns
15910 69 67 6e 65 64 20 69 6e 74 20 6e 3b 20 20 20 20  igned int n;    
15920 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 68 61  /* Number of cha
15930 72 61 63 74 65 72 73 20 69 6e 20 74 68 69 73 20  racters in this 
15940 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  token */.};../*.
15950 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
15960 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
15970 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d   contains inform
15980 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20  ation needed to 
15990 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65  generate.** code
159a0 20 66 6f 72 20 61 20 53 45 4c 45 43 54 20 74 68   for a SELECT th
159b0 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 67 67 72  at contains aggr
159c0 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 2e  egate functions.
159d0 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78 70 72 2e 6f  .**.** If Expr.o
159e0 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e  p==TK_AGG_COLUMN
159f0 20 6f 72 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54   or TK_AGG_FUNCT
15a00 49 4f 4e 20 74 68 65 6e 20 45 78 70 72 2e 70 41  ION then Expr.pA
15a10 67 67 49 6e 66 6f 20 69 73 20 61 0a 2a 2a 20 70  ggInfo is a.** p
15a20 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73  ointer to this s
15a30 74 72 75 63 74 75 72 65 2e 20 20 54 68 65 20 45  tructure.  The E
15a40 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 66 69 65 6c  xpr.iColumn fiel
15a50 64 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 69  d is the index i
15a60 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 61 43 6f  n.** AggInfo.aCo
15a70 6c 5b 5d 20 6f 72 20 41 67 67 49 6e 66 6f 2e 61  l[] or AggInfo.a
15a80 46 75 6e 63 5b 5d 20 6f 66 20 69 6e 66 6f 72 6d  Func[] of inform
15a90 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20  ation needed to 
15aa0 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65  generate.** code
15ab0 20 66 6f 72 20 74 68 61 74 20 6e 6f 64 65 2e 0a   for that node..
15ac0 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 70 47  **.** AggInfo.pG
15ad0 72 6f 75 70 42 79 20 61 6e 64 20 41 67 67 49 6e  roupBy and AggIn
15ae0 66 6f 2e 61 46 75 6e 63 2e 70 45 78 70 72 20 70  fo.aFunc.pExpr p
15af0 6f 69 6e 74 20 74 6f 20 66 69 65 6c 64 73 20 77  oint to fields w
15b00 69 74 68 69 6e 20 74 68 65 0a 2a 2a 20 6f 72 69  ithin the.** ori
15b10 67 69 6e 61 6c 20 53 65 6c 65 63 74 20 73 74 72  ginal Select str
15b20 75 63 74 75 72 65 20 74 68 61 74 20 64 65 73 63  ucture that desc
15b30 72 69 62 65 73 20 74 68 65 20 53 45 4c 45 43 54  ribes the SELECT
15b40 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65   statement.  The
15b50 73 65 0a 2a 2a 20 66 69 65 6c 64 73 20 64 6f 20  se.** fields do 
15b60 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62 65 20 66  not need to be f
15b70 72 65 65 64 20 77 68 65 6e 20 64 65 61 6c 6c 6f  reed when deallo
15b80 63 61 74 69 6e 67 20 74 68 65 20 41 67 67 49 6e  cating the AggIn
15b90 66 6f 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f  fo structure..*/
15ba0 0a 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20  .struct AggInfo 
15bb0 7b 0a 20 20 75 38 20 64 69 72 65 63 74 4d 6f 64  {.  u8 directMod
15bc0 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44  e;          /* D
15bd0 69 72 65 63 74 20 72 65 6e 64 65 72 69 6e 67 20  irect rendering 
15be0 6d 6f 64 65 20 6d 65 61 6e 73 20 74 61 6b 65 20  mode means take 
15bf0 64 61 74 61 20 64 69 72 65 63 74 6c 79 0a 20 20  data directly.  
15c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15c10 20 20 20 20 20 20 20 20 2a 2a 20 66 72 6f 6d 20          ** from 
15c20 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 72 61  source tables ra
15c30 74 68 65 72 20 74 68 61 6e 20 66 72 6f 6d 20 61  ther than from a
15c40 63 63 75 6d 75 6c 61 74 6f 72 73 20 2a 2f 0a 20  ccumulators */. 
15c50 20 75 38 20 75 73 65 53 6f 72 74 69 6e 67 49 64   u8 useSortingId
15c60 78 3b 20 20 20 20 20 20 20 2f 2a 20 49 6e 20 64  x;       /* In d
15c70 69 72 65 63 74 20 6d 6f 64 65 2c 20 72 65 66 65  irect mode, refe
15c80 72 65 6e 63 65 20 74 68 65 20 73 6f 72 74 69 6e  rence the sortin
15c90 67 20 69 6e 64 65 78 20 72 61 74 68 65 72 0a 20  g index rather. 
15ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15cb0 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68 61 6e           ** than
15cc0 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c   the source tabl
15cd0 65 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69  e */.  int sorti
15ce0 6e 67 49 64 78 3b 20 20 20 20 20 20 20 20 20 2f  ngIdx;         /
15cf0 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  * Cursor number 
15d00 6f 66 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69  of the sorting i
15d10 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 73 6f  ndex */.  int so
15d20 72 74 69 6e 67 49 64 78 50 54 61 62 3b 20 20 20  rtingIdxPTab;   
15d30 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62    /* Cursor numb
15d40 65 72 20 6f 66 20 70 73 65 75 64 6f 2d 74 61 62  er of pseudo-tab
15d50 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 6f 72  le */.  int nSor
15d60 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  tingColumn;     
15d70 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
15d80 75 6d 6e 73 20 69 6e 20 74 68 65 20 73 6f 72 74  umns in the sort
15d90 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69  ing index */.  i
15da0 6e 74 20 6d 6e 52 65 67 2c 20 6d 78 52 65 67 3b  nt mnReg, mxReg;
15db0 20 20 20 20 20 20 20 2f 2a 20 52 61 6e 67 65 20         /* Range 
15dc0 6f 66 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c  of registers all
15dd0 6f 63 61 74 65 64 20 66 6f 72 20 61 43 6f 6c 20  ocated for aCol 
15de0 61 6e 64 20 61 46 75 6e 63 20 2a 2f 0a 20 20 45  and aFunc */.  E
15df0 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42  xprList *pGroupB
15e00 79 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 67 72  y;     /* The gr
15e10 6f 75 70 20 62 79 20 63 6c 61 75 73 65 20 2a 2f  oup by clause */
15e20 0a 20 20 73 74 72 75 63 74 20 41 67 67 49 6e 66  .  struct AggInf
15e30 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f 2a 20 46 6f  o_col {    /* Fo
15e40 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 75 73  r each column us
15e50 65 64 20 69 6e 20 73 6f 75 72 63 65 20 74 61 62  ed in source tab
15e60 6c 65 73 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65  les */.    Table
15e70 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20   *pTab;         
15e80 20 20 20 20 2f 2a 20 53 6f 75 72 63 65 20 74 61      /* Source ta
15e90 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ble */.    int i
15ea0 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  Table;          
15eb0 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75      /* Cursor nu
15ec0 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f 75 72  mber of the sour
15ed0 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  ce table */.    
15ee0 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20  int iColumn;    
15ef0 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75           /* Colu
15f00 6d 6e 20 6e 75 6d 62 65 72 20 77 69 74 68 69 6e  mn number within
15f10 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c   the source tabl
15f20 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 53 6f  e */.    int iSo
15f30 72 74 65 72 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  rterColumn;     
15f40 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62    /* Column numb
15f50 65 72 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e  er in the sortin
15f60 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 69  g index */.    i
15f70 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20  nt iMem;        
15f80 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72          /* Memor
15f90 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20  y location that 
15fa0 61 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61  acts as accumula
15fb0 74 6f 72 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  tor */.    Expr 
15fc0 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20  *pExpr;         
15fd0 20 20 20 20 2f 2a 20 54 68 65 20 6f 72 69 67 69      /* The origi
15fe0 6e 61 6c 20 65 78 70 72 65 73 73 69 6f 6e 20 2a  nal expression *
15ff0 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b 0a 20 20 69  /.  } *aCol;.  i
16000 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  nt nColumn;     
16010 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
16020 20 6f 66 20 75 73 65 64 20 65 6e 74 72 69 65 73   of used entries
16030 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a 2f 0a 20 20   in aCol[] */.  
16040 69 6e 74 20 6e 41 63 63 75 6d 75 6c 61 74 6f 72  int nAccumulator
16050 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  ;       /* Numbe
16060 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68 61  r of columns tha
16070 74 20 73 68 6f 77 20 74 68 72 6f 75 67 68 20 74  t show through t
16080 6f 20 74 68 65 20 6f 75 74 70 75 74 2e 0a 20 20  o the output..  
16090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
160a0 20 20 20 20 20 20 20 20 2a 2a 20 41 64 64 69 74          ** Addit
160b0 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73 20 61 72  ional columns ar
160c0 65 20 75 73 65 64 20 6f 6e 6c 79 20 61 73 20 70  e used only as p
160d0 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 20 20 20  arameters to.   
160e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
160f0 20 20 20 20 20 20 20 2a 2a 20 61 67 67 72 65 67         ** aggreg
16100 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  ate functions */
16110 0a 20 20 73 74 72 75 63 74 20 41 67 67 49 6e 66  .  struct AggInf
16120 6f 5f 66 75 6e 63 20 7b 20 20 20 2f 2a 20 46 6f  o_func {   /* Fo
16130 72 20 65 61 63 68 20 61 67 67 72 65 67 61 74 65  r each aggregate
16140 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20   function */.   
16150 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20   Expr *pExpr;   
16160 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70            /* Exp
16170 72 65 73 73 69 6f 6e 20 65 6e 63 6f 64 69 6e 67  ression encoding
16180 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f   the function */
16190 0a 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70 46  .    FuncDef *pF
161a0 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  unc;          /*
161b0 20 54 68 65 20 61 67 67 72 65 67 61 74 65 20 66   The aggregate f
161c0 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e  unction implemen
161d0 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e  tation */.    in
161e0 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20  t iMem;         
161f0 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79         /* Memory
16200 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61   location that a
16210 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74  cts as accumulat
16220 6f 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 44  or */.    int iD
16230 69 73 74 69 6e 63 74 3b 20 20 20 20 20 20 20 20  istinct;        
16240 20 20 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 20     /* Ephemeral 
16250 74 61 62 6c 65 20 75 73 65 64 20 74 6f 20 65 6e  table used to en
16260 66 6f 72 63 65 20 44 49 53 54 49 4e 43 54 20 2a  force DISTINCT *
16270 2f 0a 20 20 7d 20 2a 61 46 75 6e 63 3b 0a 20 20  /.  } *aFunc;.  
16280 69 6e 74 20 6e 46 75 6e 63 3b 20 20 20 20 20 20  int nFunc;      
16290 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
162a0 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  r of entries in 
162b0 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f  aFunc[] */.};../
162c0 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70  *.** The datatyp
162d0 65 20 79 6e 56 61 72 20 69 73 20 61 20 73 69 67  e ynVar is a sig
162e0 6e 65 64 20 69 6e 74 65 67 65 72 2c 20 65 69 74  ned integer, eit
162f0 68 65 72 20 31 36 2d 62 69 74 20 6f 72 20 33 32  her 16-bit or 32
16300 2d 62 69 74 2e 0a 2a 2a 20 55 73 75 61 6c 6c 79  -bit..** Usually
16310 20 69 74 20 69 73 20 31 36 2d 62 69 74 73 2e 20   it is 16-bits. 
16320 20 42 75 74 20 69 66 20 53 51 4c 49 54 45 5f 4d   But if SQLITE_M
16330 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42  AX_VARIABLE_NUMB
16340 45 52 20 69 73 20 67 72 65 61 74 65 72 0a 2a 2a  ER is greater.**
16350 20 74 68 61 6e 20 33 32 37 36 37 20 77 65 20 68   than 32767 we h
16360 61 76 65 20 74 6f 20 6d 61 6b 65 20 69 74 20 33  ave to make it 3
16370 32 2d 62 69 74 2e 20 20 31 36 2d 62 69 74 20 69  2-bit.  16-bit i
16380 73 20 70 72 65 66 65 72 72 65 64 20 62 65 63 61  s preferred beca
16390 75 73 65 0a 2a 2a 20 69 74 20 75 73 65 73 20 6c  use.** it uses l
163a0 65 73 73 20 6d 65 6d 6f 72 79 20 69 6e 20 74 68  ess memory in th
163b0 65 20 45 78 70 72 20 6f 62 6a 65 63 74 2c 20 77  e Expr object, w
163c0 68 69 63 68 20 69 73 20 61 20 62 69 67 20 6d 65  hich is a big me
163d0 6d 6f 72 79 20 75 73 65 72 0a 2a 2a 20 69 6e 20  mory user.** in 
163e0 73 79 73 74 65 6d 73 20 77 69 74 68 20 6c 6f 74  systems with lot
163f0 73 20 6f 66 20 70 72 65 70 61 72 65 64 20 73 74  s of prepared st
16400 61 74 65 6d 65 6e 74 73 2e 20 20 41 6e 64 20 66  atements.  And f
16410 65 77 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 0a  ew applications.
16420 2a 2a 20 6e 65 65 64 20 6d 6f 72 65 20 74 68 61  ** need more tha
16430 6e 20 61 62 6f 75 74 20 31 30 20 6f 72 20 32 30  n about 10 or 20
16440 20 76 61 72 69 61 62 6c 65 73 2e 20 20 42 75 74   variables.  But
16450 20 73 6f 6d 65 20 65 78 74 72 65 6d 65 20 75 73   some extreme us
16460 65 72 73 20 77 61 6e 74 0a 2a 2a 20 74 6f 20 68  ers want.** to h
16470 61 76 65 20 70 72 65 70 61 72 65 64 20 73 74 61  ave prepared sta
16480 74 65 6d 65 6e 74 73 20 77 69 74 68 20 6f 76 65  tements with ove
16490 72 20 33 32 37 36 37 20 76 61 72 69 61 62 6c 65  r 32767 variable
164a0 73 2c 20 61 6e 64 20 66 6f 72 20 74 68 65 6d 0a  s, and for them.
164b0 2a 2a 20 74 68 65 20 6f 70 74 69 6f 6e 20 69 73  ** the option is
164c0 20 61 76 61 69 6c 61 62 6c 65 20 28 61 74 20 63   available (at c
164d0 6f 6d 70 69 6c 65 2d 74 69 6d 65 29 2e 0a 2a 2f  ompile-time)..*/
164e0 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
164f0 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 3c  VARIABLE_NUMBER<
16500 3d 33 32 37 36 37 0a 74 79 70 65 64 65 66 20 69  =32767.typedef i
16510 31 36 20 79 6e 56 61 72 3b 0a 23 65 6c 73 65 0a  16 ynVar;.#else.
16520 74 79 70 65 64 65 66 20 69 6e 74 20 79 6e 56 61  typedef int ynVa
16530 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  r;.#endif../*.**
16540 20 45 61 63 68 20 6e 6f 64 65 20 6f 66 20 61 6e   Each node of an
16550 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74   expression in t
16560 68 65 20 70 61 72 73 65 20 74 72 65 65 20 69 73  he parse tree is
16570 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20   an instance.** 
16580 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
16590 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 6f 70  e..**.** Expr.op
165a0 20 69 73 20 74 68 65 20 6f 70 63 6f 64 65 2e 20   is the opcode. 
165b0 54 68 65 20 69 6e 74 65 67 65 72 20 70 61 72 73  The integer pars
165c0 65 72 20 74 6f 6b 65 6e 20 63 6f 64 65 73 20 61  er token codes a
165d0 72 65 20 72 65 75 73 65 64 0a 2a 2a 20 61 73 20  re reused.** as 
165e0 6f 70 63 6f 64 65 73 20 68 65 72 65 2e 20 46 6f  opcodes here. Fo
165f0 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 70  r example, the p
16600 61 72 73 65 72 20 64 65 66 69 6e 65 73 20 54 4b  arser defines TK
16610 5f 47 45 20 74 6f 20 62 65 20 61 6e 20 69 6e 74  _GE to be an int
16620 65 67 65 72 0a 2a 2a 20 63 6f 64 65 20 72 65 70  eger.** code rep
16630 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20 22 3e  resenting the ">
16640 3d 22 20 6f 70 65 72 61 74 6f 72 2e 20 54 68 69  =" operator. Thi
16650 73 20 73 61 6d 65 20 69 6e 74 65 67 65 72 20 63  s same integer c
16660 6f 64 65 20 69 73 20 72 65 75 73 65 64 0a 2a 2a  ode is reused.**
16670 20 74 6f 20 72 65 70 72 65 73 65 6e 74 20 74 68   to represent th
16680 65 20 67 72 65 61 74 65 72 2d 74 68 61 6e 2d 6f  e greater-than-o
16690 72 2d 65 71 75 61 6c 2d 74 6f 20 6f 70 65 72 61  r-equal-to opera
166a0 74 6f 72 20 69 6e 20 74 68 65 20 65 78 70 72 65  tor in the expre
166b0 73 73 69 6f 6e 0a 2a 2a 20 74 72 65 65 2e 0a 2a  ssion.** tree..*
166c0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72  *.** If the expr
166d0 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c  ession is an SQL
166e0 20 6c 69 74 65 72 61 6c 20 28 54 4b 5f 49 4e 54   literal (TK_INT
166f0 45 47 45 52 2c 20 54 4b 5f 46 4c 4f 41 54 2c 20  EGER, TK_FLOAT, 
16700 54 4b 5f 42 4c 4f 42 2c 0a 2a 2a 20 6f 72 20 54  TK_BLOB,.** or T
16710 4b 5f 53 54 52 49 4e 47 29 2c 20 74 68 65 6e 20  K_STRING), then 
16720 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61  Expr.token conta
16730 69 6e 73 20 74 68 65 20 74 65 78 74 20 6f 66 20  ins the text of 
16740 74 68 65 20 53 51 4c 20 6c 69 74 65 72 61 6c 2e  the SQL literal.
16750 20 49 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65   If.** the expre
16760 73 73 69 6f 6e 20 69 73 20 61 20 76 61 72 69 61  ssion is a varia
16770 62 6c 65 20 28 54 4b 5f 56 41 52 49 41 42 4c 45  ble (TK_VARIABLE
16780 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b  ), then Expr.tok
16790 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 0a  en contains the.
167a0 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65  ** variable name
167b0 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20 74 68  . Finally, if th
167c0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
167d0 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20  an SQL function 
167e0 28 54 4b 5f 46 55 4e 43 54 49 4f 4e 29 2c 0a 2a  (TK_FUNCTION),.*
167f0 2a 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65  * then Expr.toke
16800 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6e  n contains the n
16810 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ame of the funct
16820 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e  ion..**.** Expr.
16830 70 52 69 67 68 74 20 61 6e 64 20 45 78 70 72 2e  pRight and Expr.
16840 70 4c 65 66 74 20 61 72 65 20 74 68 65 20 6c 65  pLeft are the le
16850 66 74 20 61 6e 64 20 72 69 67 68 74 20 73 75 62  ft and right sub
16860 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 66 20 61  expressions of a
16870 0a 2a 2a 20 62 69 6e 61 72 79 20 6f 70 65 72 61  .** binary opera
16880 74 6f 72 2e 20 45 69 74 68 65 72 20 6f 72 20 62  tor. Either or b
16890 6f 74 68 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e  oth may be NULL.
168a0 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 4c  .**.** Expr.x.pL
168b0 69 73 74 20 69 73 20 61 20 6c 69 73 74 20 6f 66  ist is a list of
168c0 20 61 72 67 75 6d 65 6e 74 73 20 69 66 20 74 68   arguments if th
168d0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
168e0 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2c  an SQL function,
168f0 0a 2a 2a 20 61 20 43 41 53 45 20 65 78 70 72 65  .** a CASE expre
16900 73 73 69 6f 6e 20 6f 72 20 61 6e 20 49 4e 20 65  ssion or an IN e
16910 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65  xpression of the
16920 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20   form "<lhs> IN 
16930 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a  (<y>, <z>...)"..
16940 2a 2a 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63  ** Expr.x.pSelec
16950 74 20 69 73 20 75 73 65 64 20 69 66 20 74 68 65  t is used if the
16960 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
16970 20 73 75 62 2d 73 65 6c 65 63 74 20 6f 72 20 61   sub-select or a
16980 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 0a  n expression of.
16990 2a 2a 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68  ** the form "<lh
169a0 73 3e 20 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e  s> IN (SELECT ..
169b0 2e 29 22 2e 20 49 66 20 74 68 65 20 45 50 5f 78  .)". If the EP_x
169c0 49 73 53 65 6c 65 63 74 20 62 69 74 20 69 73 20  IsSelect bit is 
169d0 73 65 74 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78  set in the.** Ex
169e0 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74  pr.flags mask, t
169f0 68 65 6e 20 45 78 70 72 2e 78 2e 70 53 65 6c 65  hen Expr.x.pSele
16a00 63 74 20 69 73 20 76 61 6c 69 64 2e 20 4f 74 68  ct is valid. Oth
16a10 65 72 77 69 73 65 2c 20 45 78 70 72 2e 78 2e 70  erwise, Expr.x.p
16a20 4c 69 73 74 20 69 73 0a 2a 2a 20 76 61 6c 69 64  List is.** valid
16a30 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 78 70 72 65  ..**.** An expre
16a40 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72  ssion of the for
16a50 6d 20 49 44 20 6f 72 20 49 44 2e 49 44 20 72 65  m ID or ID.ID re
16a60 66 65 72 73 20 74 6f 20 61 20 63 6f 6c 75 6d 6e  fers to a column
16a70 20 69 6e 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20   in a table..** 
16a80 46 6f 72 20 73 75 63 68 20 65 78 70 72 65 73 73  For such express
16a90 69 6f 6e 73 2c 20 45 78 70 72 2e 6f 70 20 69 73  ions, Expr.op is
16aa0 20 73 65 74 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d   set to TK_COLUM
16ab0 4e 20 61 6e 64 20 45 78 70 72 2e 69 54 61 62 6c  N and Expr.iTabl
16ac0 65 20 69 73 0a 2a 2a 20 74 68 65 20 69 6e 74 65  e is.** the inte
16ad0 67 65 72 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  ger cursor numbe
16ae0 72 20 6f 66 20 61 20 56 44 42 45 20 63 75 72 73  r of a VDBE curs
16af0 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74  or pointing to t
16b00 68 61 74 20 74 61 62 6c 65 20 61 6e 64 0a 2a 2a  hat table and.**
16b10 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 69 73   Expr.iColumn is
16b20 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62   the column numb
16b30 65 72 20 66 6f 72 20 74 68 65 20 73 70 65 63 69  er for the speci
16b40 66 69 63 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20  fic column.  If 
16b50 74 68 65 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f  the.** expressio
16b60 6e 20 69 73 20 75 73 65 64 20 61 73 20 61 20 72  n is used as a r
16b70 65 73 75 6c 74 20 69 6e 20 61 6e 20 61 67 67 72  esult in an aggr
16b80 65 67 61 74 65 20 53 45 4c 45 43 54 2c 20 74 68  egate SELECT, th
16b90 65 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20  en the.** value 
16ba0 69 73 20 61 6c 73 6f 20 73 74 6f 72 65 64 20 69  is also stored i
16bb0 6e 20 74 68 65 20 45 78 70 72 2e 69 41 67 67 20  n the Expr.iAgg 
16bc0 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 61 67  column in the ag
16bd0 67 72 65 67 61 74 65 20 73 6f 20 74 68 61 74 0a  gregate so that.
16be0 2a 2a 20 69 74 20 63 61 6e 20 62 65 20 61 63 63  ** it can be acc
16bf0 65 73 73 65 64 20 61 66 74 65 72 20 61 6c 6c 20  essed after all 
16c00 61 67 67 72 65 67 61 74 65 73 20 61 72 65 20 63  aggregates are c
16c10 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49  omputed..**.** I
16c20 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
16c30 20 69 73 20 61 6e 20 75 6e 62 6f 75 6e 64 20 76   is an unbound v
16c40 61 72 69 61 62 6c 65 20 6d 61 72 6b 65 72 20 28  ariable marker (
16c50 61 20 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 0a  a question mark.
16c60 2a 2a 20 63 68 61 72 61 63 74 65 72 20 27 3f 27  ** character '?'
16c70 20 69 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   in the original
16c80 20 53 51 4c 29 20 74 68 65 6e 20 74 68 65 20 45   SQL) then the E
16c90 78 70 72 2e 69 54 61 62 6c 65 20 68 6f 6c 64 73  xpr.iTable holds
16ca0 20 74 68 65 20 69 6e 64 65 78 0a 2a 2a 20 6e 75   the index.** nu
16cb0 6d 62 65 72 20 66 6f 72 20 74 68 61 74 20 76 61  mber for that va
16cc0 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  riable..**.** If
16cd0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
16ce0 69 73 20 61 20 73 75 62 71 75 65 72 79 20 74 68  is a subquery th
16cf0 65 6e 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20  en Expr.iColumn 
16d00 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72  holds an integer
16d10 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 6e 75 6d  .** register num
16d20 62 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ber containing t
16d30 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
16d40 20 73 75 62 71 75 65 72 79 2e 20 20 49 66 20 74   subquery.  If t
16d50 68 65 0a 2a 2a 20 73 75 62 71 75 65 72 79 20 67  he.** subquery g
16d60 69 76 65 73 20 61 20 63 6f 6e 73 74 61 6e 74 20  ives a constant 
16d70 72 65 73 75 6c 74 2c 20 74 68 65 6e 20 69 54 61  result, then iTa
16d80 62 6c 65 20 69 73 20 2d 31 2e 20 20 49 66 20 74  ble is -1.  If t
16d90 68 65 20 73 75 62 71 75 65 72 79 0a 2a 2a 20 67  he subquery.** g
16da0 69 76 65 73 20 61 20 64 69 66 66 65 72 65 6e 74  ives a different
16db0 20 61 6e 73 77 65 72 20 61 74 20 64 69 66 66 65   answer at diffe
16dc0 72 65 6e 74 20 74 69 6d 65 73 20 64 75 72 69 6e  rent times durin
16dd0 67 20 73 74 61 74 65 6d 65 6e 74 20 70 72 6f 63  g statement proc
16de0 65 73 73 69 6e 67 0a 2a 2a 20 74 68 65 6e 20 69  essing.** then i
16df0 54 61 62 6c 65 20 69 73 20 74 68 65 20 61 64 64  Table is the add
16e00 72 65 73 73 20 6f 66 20 61 20 73 75 62 72 6f 75  ress of a subrou
16e10 74 69 6e 65 20 74 68 61 74 20 63 6f 6d 70 75 74  tine that comput
16e20 65 73 20 74 68 65 20 73 75 62 71 75 65 72 79 2e  es the subquery.
16e30 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 78  .**.** If the Ex
16e40 70 72 20 69 73 20 6f 66 20 74 79 70 65 20 4f 50  pr is of type OP
16e50 5f 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65  _Column, and the
16e60 20 74 61 62 6c 65 20 69 74 20 69 73 20 73 65 6c   table it is sel
16e70 65 63 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69  ecting from.** i
16e80 73 20 61 20 64 69 73 6b 20 74 61 62 6c 65 20 6f  s a disk table o
16e90 72 20 74 68 65 20 22 6f 6c 64 2e 2a 22 20 70 73  r the "old.*" ps
16ea0 65 75 64 6f 2d 74 61 62 6c 65 2c 20 74 68 65 6e  eudo-table, then
16eb0 20 70 54 61 62 20 70 6f 69 6e 74 73 20 74 6f 20   pTab points to 
16ec0 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e  the.** correspon
16ed0 64 69 6e 67 20 74 61 62 6c 65 20 64 65 66 69 6e  ding table defin
16ee0 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c  ition..**.** ALL
16ef0 4f 43 41 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a  OCATION NOTES:.*
16f00 2a 0a 2a 2a 20 45 78 70 72 20 6f 62 6a 65 63 74  *.** Expr object
16f10 73 20 63 61 6e 20 75 73 65 20 61 20 6c 6f 74 20  s can use a lot 
16f20 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20  of memory space 
16f30 69 6e 20 64 61 74 61 62 61 73 65 20 73 63 68 65  in database sche
16f40 6d 61 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c 70 20  ma.  To.** help 
16f50 72 65 64 75 63 65 20 6d 65 6d 6f 72 79 20 72 65  reduce memory re
16f60 71 75 69 72 65 6d 65 6e 74 73 2c 20 73 6f 6d 65  quirements, some
16f70 74 69 6d 65 73 20 61 6e 20 45 78 70 72 20 6f 62  times an Expr ob
16f80 6a 65 63 74 20 77 69 6c 6c 20 62 65 0a 2a 2a 20  ject will be.** 
16f90 74 72 75 6e 63 61 74 65 64 2e 20 20 41 6e 64 20  truncated.  And 
16fa0 74 6f 20 72 65 64 75 63 65 20 74 68 65 20 6e 75  to reduce the nu
16fb0 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 61  mber of memory a
16fc0 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20 73 6f 6d 65  llocations, some
16fd0 74 69 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f 72 20  times.** two or 
16fe0 6d 6f 72 65 20 45 78 70 72 20 6f 62 6a 65 63 74  more Expr object
16ff0 73 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64  s will be stored
17000 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 6d 65 6d   in a single mem
17010 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a  ory allocation,.
17020 2a 2a 20 74 6f 67 65 74 68 65 72 20 77 69 74 68  ** together with
17030 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 73 74 72   Expr.zToken str
17040 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ings..**.** If t
17050 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 61 6e  he EP_Reduced an
17060 64 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66  d EP_TokenOnly f
17070 6c 61 67 73 20 61 72 65 20 73 65 74 20 77 68 65  lags are set whe
17080 6e 0a 2a 2a 20 61 6e 20 45 78 70 72 20 6f 62 6a  n.** an Expr obj
17090 65 63 74 20 69 73 20 74 72 75 6e 63 61 74 65 64  ect is truncated
170a0 2e 20 20 57 68 65 6e 20 45 50 5f 52 65 64 75 63  .  When EP_Reduc
170b0 65 64 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  ed is set, then 
170c0 61 6c 6c 0a 2a 2a 20 74 68 65 20 63 68 69 6c 64  all.** the child
170d0 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 69 6e   Expr objects in
170e0 20 74 68 65 20 45 78 70 72 2e 70 4c 65 66 74 20   the Expr.pLeft 
170f0 61 6e 64 20 45 78 70 72 2e 70 52 69 67 68 74 20  and Expr.pRight 
17100 73 75 62 74 72 65 65 73 0a 2a 2a 20 61 72 65 20  subtrees.** are 
17110 63 6f 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e  contained within
17120 20 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72 79   the same memory
17130 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f   allocation.  No
17140 74 65 2c 20 68 6f 77 65 76 65 72 2c 20 74 68 61  te, however, tha
17150 74 0a 2a 2a 20 74 68 65 20 73 75 62 74 72 65 65  t.** the subtree
17160 73 20 69 6e 20 45 78 70 72 2e 78 2e 70 4c 69 73  s in Expr.x.pLis
17170 74 20 6f 72 20 45 78 70 72 2e 78 2e 70 53 65 6c  t or Expr.x.pSel
17180 65 63 74 20 61 72 65 20 61 6c 77 61 79 73 20 73  ect are always s
17190 65 70 61 72 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c  eparately.** all
171a0 6f 63 61 74 65 64 2c 20 72 65 67 61 72 64 6c 65  ocated, regardle
171b0 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72  ss of whether or
171c0 20 6e 6f 74 20 45 50 5f 52 65 64 75 63 65 64 20   not EP_Reduced 
171d0 69 73 20 73 65 74 2e 0a 2a 2f 0a 73 74 72 75 63  is set..*/.struc
171e0 74 20 45 78 70 72 20 7b 0a 20 20 75 38 20 6f 70  t Expr {.  u8 op
171f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
17200 20 20 2f 2a 20 4f 70 65 72 61 74 69 6f 6e 20 70    /* Operation p
17210 65 72 66 6f 72 6d 65 64 20 62 79 20 74 68 69 73  erformed by this
17220 20 6e 6f 64 65 20 2a 2f 0a 20 20 63 68 61 72 20   node */.  char 
17230 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20  affinity;       
17240 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74    /* The affinit
17250 79 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  y of the column 
17260 6f 72 20 30 20 69 66 20 6e 6f 74 20 61 20 63 6f  or 0 if not a co
17270 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 66 6c  lumn */.  u32 fl
17280 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
17290 20 2f 2a 20 56 61 72 69 6f 75 73 20 66 6c 61 67   /* Various flag
172a0 73 2e 20 20 45 50 5f 2a 20 53 65 65 20 62 65 6c  s.  EP_* See bel
172b0 6f 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a  ow */.  union {.
172c0 20 20 20 20 63 68 61 72 20 2a 7a 54 6f 6b 65 6e      char *zToken
172d0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f  ;          /* To
172e0 6b 65 6e 20 76 61 6c 75 65 2e 20 5a 65 72 6f 20  ken value. Zero 
172f0 74 65 72 6d 69 6e 61 74 65 64 20 61 6e 64 20 64  terminated and d
17300 65 71 75 6f 74 65 64 20 2a 2f 0a 20 20 20 20 69  equoted */.    i
17310 6e 74 20 69 56 61 6c 75 65 3b 20 20 20 20 20 20  nt iValue;      
17320 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67        /* Non-neg
17330 61 74 69 76 65 20 69 6e 74 65 67 65 72 20 76 61  ative integer va
17340 6c 75 65 20 69 66 20 45 50 5f 49 6e 74 56 61 6c  lue if EP_IntVal
17350 75 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20  ue */.  } u;..  
17360 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 54 6f 6b  /* If the EP_Tok
17370 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 69 73 20 73  enOnly flag is s
17380 65 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66  et in the Expr.f
17390 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20  lags mask, then 
173a0 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73  no.  ** space is
173b0 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74   allocated for t
173c0 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20  he fields below 
173d0 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61  this point. An a
173e0 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61  ttempt to.  ** a
173f0 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20  ccess them will 
17400 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66  result in a segf
17410 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74  ault or malfunct
17420 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a  ion..  *********
17430 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17440 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17450 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17460 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20  ************/.. 
17470 20 45 78 70 72 20 2a 70 4c 65 66 74 3b 20 20 20   Expr *pLeft;   
17480 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 66 74 20          /* Left 
17490 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 45 78 70  subnode */.  Exp
174a0 72 20 2a 70 52 69 67 68 74 3b 20 20 20 20 20 20  r *pRight;      
174b0 20 20 20 20 2f 2a 20 52 69 67 68 74 20 73 75 62      /* Right sub
174c0 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  node */.  union 
174d0 7b 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a  {.    ExprList *
174e0 70 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 6f 70  pList;     /* op
174f0 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53   = IN, EXISTS, S
17500 45 4c 45 43 54 2c 20 43 41 53 45 2c 20 46 55 4e  ELECT, CASE, FUN
17510 43 54 49 4f 4e 2c 20 42 45 54 57 45 45 4e 20 2a  CTION, BETWEEN *
17520 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53  /.    Select *pS
17530 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 45 50  elect;     /* EP
17540 5f 78 49 73 53 65 6c 65 63 74 20 61 6e 64 20 6f  _xIsSelect and o
17550 70 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20  p = IN, EXISTS, 
17560 53 45 4c 45 43 54 20 2a 2f 0a 20 20 7d 20 78 3b  SELECT */.  } x;
17570 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50  ..  /* If the EP
17580 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20 69 73  _Reduced flag is
17590 20 73 65 74 20 69 6e 20 74 68 65 20 45 78 70 72   set in the Expr
175a0 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65  .flags mask, the
175b0 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20  n no.  ** space 
175c0 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72  is allocated for
175d0 20 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f   the fields belo
175e0 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e  w this point. An
175f0 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a   attempt to.  **
17600 20 61 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c   access them wil
17610 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65  l result in a se
17620 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e  gfault or malfun
17630 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a  ction..  *******
17640 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17650 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17660 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17670 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
17680 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
17690 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69  EXPR_DEPTH>0.  i
176a0 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20  nt nHeight;     
176b0 20 20 20 20 20 20 2f 2a 20 48 65 69 67 68 74 20        /* Height 
176c0 6f 66 20 74 68 65 20 74 72 65 65 20 68 65 61 64  of the tree head
176d0 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20  ed by this node 
176e0 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20  */.#endif.  int 
176f0 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  iTable;         
17700 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a     /* TK_COLUMN:
17710 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   cursor number o
17720 66 20 74 61 62 6c 65 20 68 6f 6c 64 69 6e 67 20  f table holding 
17730 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20  column.         
17740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17750 2a 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20  ** TK_REGISTER: 
17760 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 0a  register number.
17770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17780 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 54           ** TK_T
17790 52 49 47 47 45 52 3a 20 31 20 2d 3e 20 6e 65 77  RIGGER: 1 -> new
177a0 2c 20 30 20 2d 3e 20 6f 6c 64 0a 20 20 20 20 20  , 0 -> old.     
177b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177c0 20 20 20 20 2a 2a 20 45 50 5f 55 6e 6c 69 6b 65      ** EP_Unlike
177d0 6c 79 3a 20 20 31 33 34 32 31 37 37 32 38 20 74  ly:  134217728 t
177e0 69 6d 65 73 20 6c 69 6b 65 6c 69 68 6f 6f 64 0a  imes likelihood.
177f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17800 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 53           ** TK_S
17810 45 4c 45 43 54 3a 20 31 73 74 20 72 65 67 69 73  ELECT: 1st regis
17820 74 65 72 20 6f 66 20 72 65 73 75 6c 74 20 76 65  ter of result ve
17830 63 74 6f 72 20 2a 2f 0a 20 20 79 6e 56 61 72 20  ctor */.  ynVar 
17840 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  iColumn;        
17850 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63   /* TK_COLUMN: c
17860 6f 6c 75 6d 6e 20 69 6e 64 65 78 2e 20 20 2d 31  olumn index.  -1
17870 20 66 6f 72 20 72 6f 77 69 64 2e 0a 20 20 20 20   for rowid..    
17880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17890 20 20 20 20 20 2a 2a 20 54 4b 5f 56 41 52 49 41       ** TK_VARIA
178a0 42 4c 45 3a 20 76 61 72 69 61 62 6c 65 20 6e 75  BLE: variable nu
178b0 6d 62 65 72 20 28 61 6c 77 61 79 73 20 3e 3d 20  mber (always >= 
178c0 31 29 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  1)..            
178d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
178e0 54 4b 5f 53 45 4c 45 43 54 5f 43 4f 4c 55 4d 4e  TK_SELECT_COLUMN
178f0 3a 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20  : column of the 
17900 72 65 73 75 6c 74 20 76 65 63 74 6f 72 20 2a 2f  result vector */
17910 0a 20 20 69 31 36 20 69 41 67 67 3b 20 20 20 20  .  i16 iAgg;    
17920 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69            /* Whi
17930 63 68 20 65 6e 74 72 79 20 69 6e 20 70 41 67 67  ch entry in pAgg
17940 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20  Info->aCol[] or 
17950 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69  ->aFunc[] */.  i
17960 31 36 20 69 52 69 67 68 74 4a 6f 69 6e 54 61 62  16 iRightJoinTab
17970 6c 65 3b 20 20 20 2f 2a 20 49 66 20 45 50 5f 46  le;   /* If EP_F
17980 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20 72 69 67  romJoin, the rig
17990 68 74 20 74 61 62 6c 65 20 6f 66 20 74 68 65 20  ht table of the 
179a0 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38 20 6f 70 32  join */.  u8 op2
179b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
179c0 20 2f 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a   /* TK_REGISTER:
179d0 20 6f 72 69 67 69 6e 61 6c 20 76 61 6c 75 65 20   original value 
179e0 6f 66 20 45 78 70 72 2e 6f 70 0a 20 20 20 20 20  of Expr.op.     
179f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a00 20 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55 4d 4e      ** TK_COLUMN
17a10 3a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 70  : the value of p
17a20 35 20 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e 0a  5 for OP_Column.
17a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a40 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 41           ** TK_A
17a50 47 47 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e 65 73  GG_FUNCTION: nes
17a60 74 69 6e 67 20 64 65 70 74 68 20 2a 2f 0a 20 20  ting depth */.  
17a70 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66  AggInfo *pAggInf
17a80 6f 3b 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62  o;     /* Used b
17a90 79 20 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20  y TK_AGG_COLUMN 
17aa0 61 6e 64 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54  and TK_AGG_FUNCT
17ab0 49 4f 4e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ION */.  Table *
17ac0 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20  pTab;           
17ad0 2f 2a 20 54 61 62 6c 65 20 66 6f 72 20 54 4b 5f  /* Table for TK_
17ae0 43 4f 4c 55 4d 4e 20 65 78 70 72 65 73 73 69 6f  COLUMN expressio
17af0 6e 73 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ns. */.};../*.**
17b00 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61   The following a
17b10 72 65 20 74 68 65 20 6d 65 61 6e 69 6e 67 73 20  re the meanings 
17b20 6f 66 20 62 69 74 73 20 69 6e 20 74 68 65 20 45  of bits in the E
17b30 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e  xpr.flags field.
17b40 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 46  .*/.#define EP_F
17b50 72 6f 6d 4a 6f 69 6e 20 20 30 78 30 30 30 30 30  romJoin  0x00000
17b60 31 20 2f 2a 20 4f 72 69 67 69 6e 61 74 65 73 20  1 /* Originates 
17b70 69 6e 20 4f 4e 2f 55 53 49 4e 47 20 63 6c 61 75  in ON/USING clau
17b80 73 65 20 6f 66 20 6f 75 74 65 72 20 6a 6f 69 6e  se of outer join
17b90 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 41   */.#define EP_A
17ba0 67 67 20 20 20 20 20 20 20 30 78 30 30 30 30 30  gg       0x00000
17bb0 32 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e  2 /* Contains on
17bc0 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67  e or more aggreg
17bd0 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f  ate functions */
17be0 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65 73 6f  .#define EP_Reso
17bf0 6c 76 65 64 20 20 30 78 30 30 30 30 30 34 20 2f  lved  0x000004 /
17c00 2a 20 49 44 73 20 68 61 76 65 20 62 65 65 6e 20  * IDs have been 
17c10 72 65 73 6f 6c 76 65 64 20 74 6f 20 43 4f 4c 55  resolved to COLU
17c20 4d 4e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  MNs */.#define E
17c30 50 5f 45 72 72 6f 72 20 20 20 20 20 30 78 30 30  P_Error     0x00
17c40 30 30 30 38 20 2f 2a 20 45 78 70 72 65 73 73 69  0008 /* Expressi
17c50 6f 6e 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20  on contains one 
17c60 6f 72 20 6d 6f 72 65 20 65 72 72 6f 72 73 20 2a  or more errors *
17c70 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 69 73  /.#define EP_Dis
17c80 74 69 6e 63 74 20 20 30 78 30 30 30 30 31 30 20  tinct  0x000010 
17c90 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 75 6e  /* Aggregate fun
17ca0 63 74 69 6f 6e 20 77 69 74 68 20 44 49 53 54 49  ction with DISTI
17cb0 4e 43 54 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23  NCT keyword */.#
17cc0 64 65 66 69 6e 65 20 45 50 5f 56 61 72 53 65 6c  define EP_VarSel
17cd0 65 63 74 20 30 78 30 30 30 30 32 30 20 2f 2a 20  ect 0x000020 /* 
17ce0 70 53 65 6c 65 63 74 20 69 73 20 63 6f 72 72 65  pSelect is corre
17cf0 6c 61 74 65 64 2c 20 6e 6f 74 20 63 6f 6e 73 74  lated, not const
17d00 61 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ant */.#define E
17d10 50 5f 44 62 6c 51 75 6f 74 65 64 20 30 78 30 30  P_DblQuoted 0x00
17d20 30 30 34 30 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20  0040 /* token.z 
17d30 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 69  was originally i
17d40 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66 69  n "..." */.#defi
17d50 6e 65 20 45 50 5f 49 6e 66 69 78 46 75 6e 63 20  ne EP_InfixFunc 
17d60 30 78 30 30 30 30 38 30 20 2f 2a 20 54 72 75 65  0x000080 /* True
17d70 20 66 6f 72 20 61 6e 20 69 6e 66 69 78 20 66 75   for an infix fu
17d80 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c  nction: LIKE, GL
17d90 4f 42 2c 20 65 74 63 20 2a 2f 0a 23 64 65 66 69  OB, etc */.#defi
17da0 6e 65 20 45 50 5f 43 6f 6c 6c 61 74 65 20 20 20  ne EP_Collate   
17db0 30 78 30 30 30 31 30 30 20 2f 2a 20 54 72 65 65  0x000100 /* Tree
17dc0 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 43   contains a TK_C
17dd0 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20  OLLATE operator 
17de0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 47 65  */.#define EP_Ge
17df0 6e 65 72 69 63 20 20 20 30 78 30 30 30 32 30 30  neric   0x000200
17e00 20 2f 2a 20 49 67 6e 6f 72 65 20 43 4f 4c 4c 41   /* Ignore COLLA
17e10 54 45 20 6f 72 20 61 66 66 69 6e 69 74 79 20 6f  TE or affinity o
17e20 6e 20 74 68 69 73 20 74 72 65 65 20 2a 2f 0a 23  n this tree */.#
17e30 64 65 66 69 6e 65 20 45 50 5f 49 6e 74 56 61 6c  define EP_IntVal
17e40 75 65 20 20 30 78 30 30 30 34 30 30 20 2f 2a 20  ue  0x000400 /* 
17e50 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 63 6f  Integer value co
17e60 6e 74 61 69 6e 65 64 20 69 6e 20 75 2e 69 56 61  ntained in u.iVa
17e70 6c 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  lue */.#define E
17e80 50 5f 78 49 73 53 65 6c 65 63 74 20 30 78 30 30  P_xIsSelect 0x00
17e90 30 38 30 30 20 2f 2a 20 78 2e 70 53 65 6c 65 63  0800 /* x.pSelec
17ea0 74 20 69 73 20 76 61 6c 69 64 20 28 6f 74 68 65  t is valid (othe
17eb0 72 77 69 73 65 20 78 2e 70 4c 69 73 74 20 69 73  rwise x.pList is
17ec0 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  ) */.#define EP_
17ed0 53 6b 69 70 20 20 20 20 20 20 30 78 30 30 31 30  Skip      0x0010
17ee0 30 30 20 2f 2a 20 43 4f 4c 4c 41 54 45 2c 20 41  00 /* COLLATE, A
17ef0 53 2c 20 6f 72 20 55 4e 4c 49 4b 45 4c 59 20 2a  S, or UNLIKELY *
17f00 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65 64  /.#define EP_Red
17f10 75 63 65 64 20 20 20 30 78 30 30 32 30 30 30 20  uced   0x002000 
17f20 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74 20 45  /* Expr struct E
17f30 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20  XPR_REDUCEDSIZE 
17f40 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64  bytes only */.#d
17f50 65 66 69 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e  efine EP_TokenOn
17f60 6c 79 20 30 78 30 30 34 30 30 30 20 2f 2a 20 45  ly 0x004000 /* E
17f70 78 70 72 20 73 74 72 75 63 74 20 45 58 50 52 5f  xpr struct EXPR_
17f80 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 62 79  TOKENONLYSIZE by
17f90 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66  tes only */.#def
17fa0 69 6e 65 20 45 50 5f 53 74 61 74 69 63 20 20 20  ine EP_Static   
17fb0 20 30 78 30 30 38 30 30 30 20 2f 2a 20 48 65 6c   0x008000 /* Hel
17fc0 64 20 69 6e 20 6d 65 6d 6f 72 79 20 6e 6f 74 20  d in memory not 
17fd0 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 6d 61  obtained from ma
17fe0 6c 6c 6f 63 28 29 20 2a 2f 0a 23 64 65 66 69 6e  lloc() */.#defin
17ff0 65 20 45 50 5f 4d 65 6d 54 6f 6b 65 6e 20 20 30  e EP_MemToken  0
18000 78 30 31 30 30 30 30 20 2f 2a 20 4e 65 65 64 20  x010000 /* Need 
18010 74 6f 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  to sqlite3DbFree
18020 28 29 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a  () Expr.zToken *
18030 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4e 6f 52  /.#define EP_NoR
18040 65 64 75 63 65 20 20 30 78 30 32 30 30 30 30 20  educe  0x020000 
18050 2f 2a 20 43 61 6e 6e 6f 74 20 45 58 50 52 44 55  /* Cannot EXPRDU
18060 50 5f 52 45 44 55 43 45 20 74 68 69 73 20 45 78  P_REDUCE this Ex
18070 70 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  pr */.#define EP
18080 5f 55 6e 6c 69 6b 65 6c 79 20 20 30 78 30 34 30  _Unlikely  0x040
18090 30 30 30 20 2f 2a 20 75 6e 6c 69 6b 65 6c 79 28  000 /* unlikely(
180a0 29 20 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64 28  ) or likelihood(
180b0 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
180c0 65 66 69 6e 65 20 45 50 5f 43 6f 6e 73 74 46 75  efine EP_ConstFu
180d0 6e 63 20 30 78 30 38 30 30 30 30 20 2f 2a 20 41  nc 0x080000 /* A
180e0 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
180f0 53 54 41 4e 54 20 6f 72 20 5f 53 4c 4f 43 48 4e  STANT or _SLOCHN
18100 47 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  G function */.#d
18110 65 66 69 6e 65 20 45 50 5f 43 61 6e 42 65 4e 75  efine EP_CanBeNu
18120 6c 6c 20 30 78 31 30 30 30 30 30 20 2f 2a 20 43  ll 0x100000 /* C
18130 61 6e 20 62 65 20 6e 75 6c 6c 20 64 65 73 70 69  an be null despi
18140 74 65 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73  te NOT NULL cons
18150 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  traint */.#defin
18160 65 20 45 50 5f 53 75 62 71 75 65 72 79 20 20 30  e EP_Subquery  0
18170 78 32 30 30 30 30 30 20 2f 2a 20 54 72 65 65 20  x200000 /* Tree 
18180 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 53 45  contains a TK_SE
18190 4c 45 43 54 20 6f 70 65 72 61 74 6f 72 20 2a 2f  LECT operator */
181a0 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 6c 69 61  .#define EP_Alia
181b0 73 20 20 20 20 20 30 78 34 30 30 30 30 30 20 2f  s     0x400000 /
181c0 2a 20 49 73 20 61 6e 20 61 6c 69 61 73 20 66 6f  * Is an alias fo
181d0 72 20 61 20 72 65 73 75 6c 74 20 73 65 74 20 63  r a result set c
181e0 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  olumn */.#define
181f0 20 45 50 5f 4c 65 61 66 20 20 20 20 20 20 30 78   EP_Leaf      0x
18200 38 30 30 30 30 30 20 2f 2a 20 45 78 70 72 2e 70  800000 /* Expr.p
18210 4c 65 66 74 2c 20 2e 70 52 69 67 68 74 2c 20 2e  Left, .pRight, .
18220 75 2e 70 53 65 6c 65 63 74 20 61 6c 6c 20 4e 55  u.pSelect all NU
18230 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6d  LL */../*.** Com
18240 62 69 6e 61 74 69 6f 6e 73 20 6f 66 20 74 77 6f  binations of two
18250 20 6f 72 20 6d 6f 72 65 20 45 50 5f 2a 20 66 6c   or more EP_* fl
18260 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ags.*/.#define E
18270 50 5f 50 72 6f 70 61 67 61 74 65 20 28 45 50 5f  P_Propagate (EP_
18280 43 6f 6c 6c 61 74 65 7c 45 50 5f 53 75 62 71 75  Collate|EP_Subqu
18290 65 72 79 29 20 2f 2a 20 50 72 6f 70 61 67 61 74  ery) /* Propagat
182a0 65 20 74 68 65 73 65 20 62 69 74 73 20 75 70 20  e these bits up 
182b0 74 72 65 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54  tree */../*.** T
182c0 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20  hese macros can 
182d0 62 65 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c  be used to test,
182e0 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62   set, or clear b
182f0 69 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78  its in the.** Ex
18300 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a  pr.flags field..
18310 2a 2f 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48  */.#define ExprH
18320 61 73 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20  asProperty(E,P) 
18330 20 20 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73      (((E)->flags
18340 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e  &(P))!=0).#defin
18350 65 20 45 78 70 72 48 61 73 41 6c 6c 50 72 6f 70  e ExprHasAllProp
18360 65 72 74 79 28 45 2c 50 29 20 20 28 28 28 45 29  erty(E,P)  (((E)
18370 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d 28 50  ->flags&(P))==(P
18380 29 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 53  )).#define ExprS
18390 65 74 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20  etProperty(E,P) 
183a0 20 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d      (E)->flags|=
183b0 28 50 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72  (P).#define Expr
183c0 43 6c 65 61 72 50 72 6f 70 65 72 74 79 28 45 2c  ClearProperty(E,
183d0 50 29 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 26  P)   (E)->flags&
183e0 3d 7e 28 50 29 0a 0a 2f 2a 20 54 68 65 20 45 78  =~(P)../* The Ex
183f0 70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79  prSetVVAProperty
18400 28 29 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  () macro is used
18410 20 66 6f 72 20 56 65 72 69 66 69 63 61 74 69 6f   for Verificatio
18420 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c 0a 2a  n, Validation,.*
18430 2a 20 61 6e 64 20 41 63 63 72 65 64 69 74 61 74  * and Accreditat
18440 69 6f 6e 20 6f 6e 6c 79 2e 20 20 49 74 20 77 6f  ion only.  It wo
18450 72 6b 73 20 6c 69 6b 65 20 45 78 70 72 53 65 74  rks like ExprSet
18460 50 72 6f 70 65 72 74 79 28 29 20 64 75 72 69 6e  Property() durin
18470 67 20 56 56 41 0a 2a 2a 20 70 72 6f 63 65 73 73  g VVA.** process
18480 65 73 20 62 75 74 20 69 73 20 61 20 6e 6f 2d 6f  es but is a no-o
18490 70 20 66 6f 72 20 64 65 6c 69 76 65 72 79 2e 0a  p for delivery..
184a0 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
184b0 5f 44 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20  _DEBUG.# define 
184c0 45 78 70 72 53 65 74 56 56 41 50 72 6f 70 65 72  ExprSetVVAProper
184d0 74 79 28 45 2c 50 29 20 20 28 45 29 2d 3e 66 6c  ty(E,P)  (E)->fl
184e0 61 67 73 7c 3d 28 50 29 0a 23 65 6c 73 65 0a 23  ags|=(P).#else.#
184f0 20 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 56   define ExprSetV
18500 56 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29 0a  VAProperty(E,P).
18510 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61  #endif../*.** Ma
18520 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e  cros to determin
18530 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
18540 62 79 74 65 73 20 72 65 71 75 69 72 65 64 20 62  bytes required b
18550 79 20 61 20 6e 6f 72 6d 61 6c 20 45 78 70 72 0a  y a normal Expr.
18560 2a 2a 20 73 74 72 75 63 74 2c 20 61 6e 20 45 78  ** struct, an Ex
18570 70 72 20 73 74 72 75 63 74 20 77 69 74 68 20 74  pr struct with t
18580 68 65 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c  he EP_Reduced fl
18590 61 67 20 73 65 74 20 69 6e 20 45 78 70 72 2e 66  ag set in Expr.f
185a0 6c 61 67 73 0a 2a 2a 20 61 6e 64 20 61 6e 20 45  lags.** and an E
185b0 78 70 72 20 73 74 72 75 63 74 20 77 69 74 68 20  xpr struct with 
185c0 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79  the EP_TokenOnly
185d0 20 66 6c 61 67 20 73 65 74 2e 0a 2a 2f 0a 23 64   flag set..*/.#d
185e0 65 66 69 6e 65 20 45 58 50 52 5f 46 55 4c 4c 53  efine EXPR_FULLS
185f0 49 5a 45 20 20 20 20 20 20 20 20 20 20 20 73 69  IZE           si
18600 7a 65 6f 66 28 45 78 70 72 29 20 20 20 20 20 20  zeof(Expr)      
18610 20 20 20 20 20 2f 2a 20 46 75 6c 6c 20 73 69 7a       /* Full siz
18620 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50  e */.#define EXP
18630 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20 20 20  R_REDUCEDSIZE   
18640 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78       offsetof(Ex
18650 70 72 2c 69 54 61 62 6c 65 29 20 20 2f 2a 20 43  pr,iTable)  /* C
18660 6f 6d 6d 6f 6e 20 66 65 61 74 75 72 65 73 20 2a  ommon features *
18670 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 54  /.#define EXPR_T
18680 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 20 20 20  OKENONLYSIZE    
18690 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c    offsetof(Expr,
186a0 70 4c 65 66 74 29 20 20 20 2f 2a 20 46 65 77 65  pLeft)   /* Fewe
186b0 72 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 0a 2f  r features */../
186c0 2a 0a 2a 2a 20 46 6c 61 67 73 20 70 61 73 73 65  *.** Flags passe
186d0 64 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33  d to the sqlite3
186e0 45 78 70 72 44 75 70 28 29 20 66 75 6e 63 74 69  ExprDup() functi
186f0 6f 6e 2e 20 53 65 65 20 74 68 65 20 68 65 61 64  on. See the head
18700 65 72 20 63 6f 6d 6d 65 6e 74 0a 2a 2a 20 61 62  er comment.** ab
18710 6f 76 65 20 73 71 6c 69 74 65 33 45 78 70 72 44  ove sqlite3ExprD
18720 75 70 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73  up() for details
18730 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50  ..*/.#define EXP
18740 52 44 55 50 5f 52 45 44 55 43 45 20 20 20 20 20  RDUP_REDUCE     
18750 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 55      0x0001  /* U
18760 73 65 64 20 72 65 64 75 63 65 64 2d 73 69 7a 65  sed reduced-size
18770 20 45 78 70 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a   Expr nodes */..
18780 2f 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20  /*.** A list of 
18790 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 20 45 61  expressions.  Ea
187a0 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61  ch expression ma
187b0 79 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 68 61 76  y optionally hav
187c0 65 20 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20 41 6e  e a.** name.  An
187d0 20 65 78 70 72 2f 6e 61 6d 65 20 63 6f 6d 62 69   expr/name combi
187e0 6e 61 74 69 6f 6e 20 63 61 6e 20 62 65 20 75 73  nation can be us
187f0 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61  ed in several wa
18800 79 73 2c 20 73 75 63 68 0a 2a 2a 20 61 73 20 74  ys, such.** as t
18810 68 65 20 6c 69 73 74 20 6f 66 20 22 65 78 70 72  he list of "expr
18820 20 41 53 20 49 44 22 20 66 69 65 6c 64 73 20 66   AS ID" fields f
18830 6f 6c 6c 6f 77 69 6e 67 20 61 20 22 53 45 4c 45  ollowing a "SELE
18840 43 54 22 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a  CT" or in the.**
18850 20 6c 69 73 74 20 6f 66 20 22 49 44 20 3d 20 65   list of "ID = e
18860 78 70 72 22 20 69 74 65 6d 73 20 69 6e 20 61 6e  xpr" items in an
18870 20 55 50 44 41 54 45 2e 20 20 41 20 6c 69 73 74   UPDATE.  A list
18880 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20   of expressions 
18890 63 61 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75  can.** also be u
188a0 73 65 64 20 61 73 20 74 68 65 20 61 72 67 75 6d  sed as the argum
188b0 65 6e 74 20 74 6f 20 61 20 66 75 6e 63 74 69 6f  ent to a functio
188c0 6e 2c 20 69 6e 20 77 68 69 63 68 20 63 61 73 65  n, in which case
188d0 20 74 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a 2a 20   the a.zName.** 
188e0 66 69 65 6c 64 20 69 73 20 6e 6f 74 20 75 73 65  field is not use
188f0 64 2e 0a 2a 2a 0a 2a 2a 20 42 79 20 64 65 66 61  d..**.** By defa
18900 75 6c 74 20 74 68 65 20 45 78 70 72 2e 7a 53 70  ult the Expr.zSp
18910 61 6e 20 66 69 65 6c 64 20 68 6f 6c 64 73 20 61  an field holds a
18920 20 68 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65 20   human-readable 
18930 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 0a 2a  description of.*
18940 2a 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  * the expression
18950 20 74 68 61 74 20 69 73 20 75 73 65 64 20 69 6e   that is used in
18960 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20   the generation 
18970 6f 66 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  of error message
18980 73 20 61 6e 64 0a 2a 2a 20 63 6f 6c 75 6d 6e 20  s and.** column 
18990 6c 61 62 65 6c 73 2e 20 20 49 6e 20 74 68 69 73  labels.  In this
189a0 20 63 61 73 65 2c 20 45 78 70 72 2e 7a 53 70 61   case, Expr.zSpa
189b0 6e 20 69 73 20 74 79 70 69 63 61 6c 6c 79 20 74  n is typically t
189c0 68 65 20 74 65 78 74 20 6f 66 20 61 0a 2a 2a 20  he text of a.** 
189d0 63 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f  column expressio
189e0 6e 20 61 73 20 69 74 20 65 78 69 73 74 73 20 69  n as it exists i
189f0 6e 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  n a SELECT state
18a00 6d 65 6e 74 2e 20 20 48 6f 77 65 76 65 72 2c 20  ment.  However, 
18a10 69 66 0a 2a 2a 20 74 68 65 20 62 53 70 61 6e 49  if.** the bSpanI
18a20 73 54 61 62 20 66 6c 61 67 20 69 73 20 73 65 74  sTab flag is set
18a30 2c 20 74 68 65 6e 20 7a 53 70 61 6e 20 69 73 20  , then zSpan is 
18a40 6f 76 65 72 6c 6f 61 64 65 64 20 74 6f 20 6d 65  overloaded to me
18a50 61 6e 20 74 68 65 20 6e 61 6d 65 0a 2a 2a 20 6f  an the name.** o
18a60 66 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c  f the result col
18a70 75 6d 6e 20 69 6e 20 74 68 65 20 66 6f 72 6d 3a  umn in the form:
18a80 20 44 41 54 41 42 41 53 45 2e 54 41 42 4c 45 2e   DATABASE.TABLE.
18a90 43 4f 4c 55 4d 4e 2e 20 20 54 68 69 73 20 6c 61  COLUMN.  This la
18aa0 74 65 72 0a 2a 2a 20 66 6f 72 6d 20 69 73 20 75  ter.** form is u
18ab0 73 65 64 20 66 6f 72 20 6e 61 6d 65 20 72 65 73  sed for name res
18ac0 6f 6c 75 74 69 6f 6e 20 77 69 74 68 20 6e 65 73  olution with nes
18ad0 74 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 73  ted FROM clauses
18ae0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72  ..*/.struct Expr
18af0 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 45 78  List {.  int nEx
18b00 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pr;             
18b10 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 78 70  /* Number of exp
18b20 72 65 73 73 69 6f 6e 73 20 6f 6e 20 74 68 65 20  ressions on the 
18b30 6c 69 73 74 20 2a 2f 0a 20 20 73 74 72 75 63 74  list */.  struct
18b40 20 45 78 70 72 4c 69 73 74 5f 69 74 65 6d 20 7b   ExprList_item {
18b50 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 65 78 70   /* For each exp
18b60 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 6c  ression in the l
18b70 69 73 74 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  ist */.    Expr 
18b80 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20  *pExpr;         
18b90 20 20 20 2f 2a 20 54 68 65 20 6c 69 73 74 20 6f     /* The list o
18ba0 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f  f expressions */
18bb0 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65  .    char *zName
18bc0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
18bd0 54 6f 6b 65 6e 20 61 73 73 6f 63 69 61 74 65 64  Token associated
18be0 20 77 69 74 68 20 74 68 69 73 20 65 78 70 72 65   with this expre
18bf0 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61  ssion */.    cha
18c00 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20 20  r *zSpan;       
18c10 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c       /* Original
18c20 20 74 65 78 74 20 6f 66 20 74 68 65 20 65 78 70   text of the exp
18c30 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 75  ression */.    u
18c40 38 20 73 6f 72 74 4f 72 64 65 72 3b 20 20 20 20  8 sortOrder;    
18c50 20 20 20 20 20 20 20 2f 2a 20 31 20 66 6f 72 20         /* 1 for 
18c60 44 45 53 43 20 6f 72 20 30 20 66 6f 72 20 41 53  DESC or 0 for AS
18c70 43 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  C */.    unsigne
18c80 64 20 64 6f 6e 65 20 3a 31 3b 20 20 20 20 20 20  d done :1;      
18c90 20 2f 2a 20 41 20 66 6c 61 67 20 74 6f 20 69 6e   /* A flag to in
18ca0 64 69 63 61 74 65 20 77 68 65 6e 20 70 72 6f 63  dicate when proc
18cb0 65 73 73 69 6e 67 20 69 73 20 66 69 6e 69 73 68  essing is finish
18cc0 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e  ed */.    unsign
18cd0 65 64 20 62 53 70 61 6e 49 73 54 61 62 20 3a 31  ed bSpanIsTab :1
18ce0 3b 20 2f 2a 20 7a 53 70 61 6e 20 68 6f 6c 64 73  ; /* zSpan holds
18cf0 20 44 42 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e   DB.TABLE.COLUMN
18d00 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
18d10 20 72 65 75 73 61 62 6c 65 20 3a 31 3b 20 20 20   reusable :1;   
18d20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72  /* Constant expr
18d30 65 73 73 69 6f 6e 20 69 73 20 72 65 75 73 61 62  ession is reusab
18d40 6c 65 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20  le */.    union 
18d50 7b 0a 20 20 20 20 20 20 73 74 72 75 63 74 20 7b  {.      struct {
18d60 0a 20 20 20 20 20 20 20 20 75 31 36 20 69 4f 72  .        u16 iOr
18d70 64 65 72 42 79 43 6f 6c 3b 20 20 20 20 20 20 2f  derByCol;      /
18d80 2a 20 46 6f 72 20 4f 52 44 45 52 20 42 59 2c 20  * For ORDER BY, 
18d90 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e  column number in
18da0 20 72 65 73 75 6c 74 20 73 65 74 20 2a 2f 0a 20   result set */. 
18db0 20 20 20 20 20 20 20 75 31 36 20 69 41 6c 69 61         u16 iAlia
18dc0 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  s;           /* 
18dd0 49 6e 64 65 78 20 69 6e 74 6f 20 50 61 72 73 65  Index into Parse
18de0 2e 61 41 6c 69 61 73 5b 5d 20 66 6f 72 20 7a 4e  .aAlias[] for zN
18df0 61 6d 65 20 2a 2f 0a 20 20 20 20 20 20 7d 20 78  ame */.      } x
18e00 3b 0a 20 20 20 20 20 20 69 6e 74 20 69 43 6f 6e  ;.      int iCon
18e10 73 74 45 78 70 72 52 65 67 3b 20 20 20 20 20 20  stExprReg;      
18e20 2f 2a 20 52 65 67 69 73 74 65 72 20 69 6e 20 77  /* Register in w
18e30 68 69 63 68 20 45 78 70 72 20 76 61 6c 75 65 20  hich Expr value 
18e40 69 73 20 63 61 63 68 65 64 20 2a 2f 0a 20 20 20  is cached */.   
18e50 20 7d 20 75 3b 0a 20 20 7d 20 2a 61 3b 20 20 20   } u;.  } *a;   
18e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
18e70 2a 20 41 6c 6c 6f 63 20 61 20 70 6f 77 65 72 20  * Alloc a power 
18e80 6f 66 20 74 77 6f 20 67 72 65 61 74 65 72 20 6f  of two greater o
18e90 72 20 65 71 75 61 6c 20 74 6f 20 6e 45 78 70 72  r equal to nExpr
18ea0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
18eb0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
18ec0 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75  s structure is u
18ed0 73 65 64 20 62 79 20 74 68 65 20 70 61 72 73 65  sed by the parse
18ee0 72 20 74 6f 20 72 65 63 6f 72 64 20 62 6f 74 68  r to record both
18ef0 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 20 74 72  .** the parse tr
18f00 65 65 20 66 6f 72 20 61 6e 20 65 78 70 72 65 73  ee for an expres
18f10 73 69 6f 6e 20 61 6e 64 20 74 68 65 20 73 70 61  sion and the spa
18f20 6e 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20  n of input text 
18f30 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 72 65 73  for an.** expres
18f40 73 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  sion..*/.struct 
18f50 45 78 70 72 53 70 61 6e 20 7b 0a 20 20 45 78 70  ExprSpan {.  Exp
18f60 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20  r *pExpr;       
18f70 20 20 20 2f 2a 20 54 68 65 20 65 78 70 72 65 73     /* The expres
18f80 73 69 6f 6e 20 70 61 72 73 65 20 74 72 65 65 20  sion parse tree 
18f90 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
18fa0 2a 7a 53 74 61 72 74 3b 20 20 20 2f 2a 20 46 69  *zStart;   /* Fi
18fb0 72 73 74 20 63 68 61 72 61 63 74 65 72 20 6f 66  rst character of
18fc0 20 69 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a 20   input text */. 
18fd0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45 6e   const char *zEn
18fe0 64 3b 20 20 20 20 20 2f 2a 20 4f 6e 65 20 63 68  d;     /* One ch
18ff0 61 72 61 63 74 65 72 20 70 61 73 74 20 74 68 65  aracter past the
19000 20 65 6e 64 20 6f 66 20 69 6e 70 75 74 20 74 65   end of input te
19010 78 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  xt */.};../*.** 
19020 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
19030 68 69 73 20 73 74 72 75 63 74 75 72 65 20 63 61  his structure ca
19040 6e 20 68 6f 6c 64 20 61 20 73 69 6d 70 6c 65 20  n hold a simple 
19050 6c 69 73 74 20 6f 66 20 69 64 65 6e 74 69 66 69  list of identifi
19060 65 72 73 2c 0a 2a 2a 20 73 75 63 68 20 61 73 20  ers,.** such as 
19070 74 68 65 20 6c 69 73 74 20 22 61 2c 62 2c 63 22  the list "a,b,c"
19080 20 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   in the followin
19090 67 20 73 74 61 74 65 6d 65 6e 74 73 3a 0a 2a 2a  g statements:.**
190a0 0a 2a 2a 20 20 20 20 20 20 49 4e 53 45 52 54 20  .**      INSERT 
190b0 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 56 41  INTO t(a,b,c) VA
190c0 4c 55 45 53 20 2e 2e 2e 3b 0a 2a 2a 20 20 20 20  LUES ...;.**    
190d0 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 69    CREATE INDEX i
190e0 64 78 20 4f 4e 20 74 28 61 2c 62 2c 63 29 3b 0a  dx ON t(a,b,c);.
190f0 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45 20 54  **      CREATE T
19100 52 49 47 47 45 52 20 74 72 69 67 20 42 45 46 4f  RIGGER trig BEFO
19110 52 45 20 55 50 44 41 54 45 20 4f 4e 20 74 28 61  RE UPDATE ON t(a
19120 2c 62 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a  ,b,c) ...;.**.**
19130 20 54 68 65 20 49 64 4c 69 73 74 2e 61 2e 69 64   The IdList.a.id
19140 78 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20  x field is used 
19150 77 68 65 6e 20 74 68 65 20 49 64 4c 69 73 74 20  when the IdList 
19160 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 20 6c  represents the l
19170 69 73 74 20 6f 66 0a 2a 2a 20 63 6f 6c 75 6d 6e  ist of.** column
19180 20 6e 61 6d 65 73 20 61 66 74 65 72 20 61 20 74   names after a t
19190 61 62 6c 65 20 6e 61 6d 65 20 69 6e 20 61 6e 20  able name in an 
191a0 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74  INSERT statement
191b0 2e 20 20 49 6e 20 74 68 65 20 73 74 61 74 65 6d  .  In the statem
191c0 65 6e 74 0a 2a 2a 0a 2a 2a 20 20 20 20 20 49 4e  ent.**.**     IN
191d0 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c  SERT INTO t(a,b,
191e0 63 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  c) ....**.** If 
191f0 22 61 22 20 69 73 20 74 68 65 20 6b 2d 74 68 20  "a" is the k-th 
19200 63 6f 6c 75 6d 6e 20 6f 66 20 74 61 62 6c 65 20  column of table 
19210 22 74 22 2c 20 74 68 65 6e 20 49 64 4c 69 73 74  "t", then IdList
19220 2e 61 5b 30 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f  .a[0].idx==k..*/
19230 0a 73 74 72 75 63 74 20 49 64 4c 69 73 74 20 7b  .struct IdList {
19240 0a 20 20 73 74 72 75 63 74 20 49 64 4c 69 73 74  .  struct IdList
19250 5f 69 74 65 6d 20 7b 0a 20 20 20 20 63 68 61 72  _item {.    char
19260 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a   *zName;      /*
19270 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 69 64 65   Name of the ide
19280 6e 74 69 66 69 65 72 20 2a 2f 0a 20 20 20 20 69  ntifier */.    i
19290 6e 74 20 69 64 78 3b 20 20 20 20 20 20 20 20 20  nt idx;         
192a0 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 6f 6d   /* Index in som
192b0 65 20 54 61 62 6c 65 2e 61 43 6f 6c 5b 5d 20 6f  e Table.aCol[] o
192c0 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64  f a column named
192d0 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61   zName */.  } *a
192e0 3b 0a 20 20 69 6e 74 20 6e 49 64 3b 20 20 20 20  ;.  int nId;    
192f0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
19300 66 20 69 64 65 6e 74 69 66 69 65 72 73 20 6f 6e  f identifiers on
19310 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a   the list */.};.
19320 0a 2f 2a 0a 2a 2a 20 54 68 65 20 62 69 74 6d 61  ./*.** The bitma
19330 73 6b 20 64 61 74 61 74 79 70 65 20 64 65 66 69  sk datatype defi
19340 6e 65 64 20 62 65 6c 6f 77 20 69 73 20 75 73 65  ned below is use
19350 64 20 66 6f 72 20 76 61 72 69 6f 75 73 20 6f 70  d for various op
19360 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2a 0a  timizations..**.
19370 2a 2a 20 43 68 61 6e 67 69 6e 67 20 74 68 69 73  ** Changing this
19380 20 66 72 6f 6d 20 61 20 36 34 2d 62 69 74 20 74   from a 64-bit t
19390 6f 20 61 20 33 32 2d 62 69 74 20 74 79 70 65 20  o a 32-bit type 
193a0 6c 69 6d 69 74 73 20 74 68 65 20 6e 75 6d 62 65  limits the numbe
193b0 72 20 6f 66 0a 2a 2a 20 74 61 62 6c 65 73 20 69  r of.** tables i
193c0 6e 20 61 20 6a 6f 69 6e 20 74 6f 20 33 32 20 69  n a join to 32 i
193d0 6e 73 74 65 61 64 20 6f 66 20 36 34 2e 20 20 42  nstead of 64.  B
193e0 75 74 20 69 74 20 61 6c 73 6f 20 72 65 64 75 63  ut it also reduc
193f0 65 73 20 74 68 65 20 73 69 7a 65 0a 2a 2a 20 6f  es the size.** o
19400 66 20 74 68 65 20 6c 69 62 72 61 72 79 20 62 79  f the library by
19410 20 37 33 38 20 62 79 74 65 73 20 6f 6e 20 69 78   738 bytes on ix
19420 38 36 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  86..*/.#ifdef SQ
19430 4c 49 54 45 5f 42 49 54 4d 41 53 4b 5f 54 59 50  LITE_BITMASK_TYP
19440 45 0a 20 20 74 79 70 65 64 65 66 20 53 51 4c 49  E.  typedef SQLI
19450 54 45 5f 42 49 54 4d 41 53 4b 5f 54 59 50 45 20  TE_BITMASK_TYPE 
19460 42 69 74 6d 61 73 6b 3b 0a 23 65 6c 73 65 0a 20  Bitmask;.#else. 
19470 20 74 79 70 65 64 65 66 20 75 36 34 20 42 69 74   typedef u64 Bit
19480 6d 61 73 6b 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  mask;.#endif../*
19490 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f  .** The number o
194a0 66 20 62 69 74 73 20 69 6e 20 61 20 42 69 74 6d  f bits in a Bitm
194b0 61 73 6b 2e 20 20 22 42 4d 53 22 20 6d 65 61 6e  ask.  "BMS" mean
194c0 73 20 22 42 69 74 4d 61 73 6b 20 53 69 7a 65 22  s "BitMask Size"
194d0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 42 4d 53  ..*/.#define BMS
194e0 20 20 28 28 69 6e 74 29 28 73 69 7a 65 6f 66 28    ((int)(sizeof(
194f0 42 69 74 6d 61 73 6b 29 2a 38 29 29 0a 0a 2f 2a  Bitmask)*8))../*
19500 0a 2a 2a 20 41 20 62 69 74 20 69 6e 20 61 20 42  .** A bit in a B
19510 69 74 6d 61 73 6b 0a 2a 2f 0a 23 64 65 66 69 6e  itmask.*/.#defin
19520 65 20 4d 41 53 4b 42 49 54 28 6e 29 20 20 20 28  e MASKBIT(n)   (
19530 28 28 42 69 74 6d 61 73 6b 29 31 29 3c 3c 28 6e  ((Bitmask)1)<<(n
19540 29 29 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b 42  )).#define MASKB
19550 49 54 33 32 28 6e 29 20 28 28 28 75 6e 73 69 67  IT32(n) (((unsig
19560 6e 65 64 20 69 6e 74 29 31 29 3c 3c 28 6e 29 29  ned int)1)<<(n))
19570 0a 23 64 65 66 69 6e 65 20 41 4c 4c 42 49 54 53  .#define ALLBITS
19580 20 20 20 20 20 20 28 28 42 69 74 6d 61 73 6b 29        ((Bitmask)
19590 2d 31 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  -1)../*.** The f
195a0 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
195b0 72 65 20 64 65 73 63 72 69 62 65 73 20 74 68 65  re describes the
195c0 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20   FROM clause of 
195d0 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
195e0 6e 74 2e 0a 2a 2a 20 45 61 63 68 20 74 61 62 6c  nt..** Each tabl
195f0 65 20 6f 72 20 73 75 62 71 75 65 72 79 20 69 6e  e or subquery in
19600 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
19610 20 69 73 20 61 20 73 65 70 61 72 61 74 65 20 65   is a separate e
19620 6c 65 6d 65 6e 74 20 6f 66 0a 2a 2a 20 74 68 65  lement of.** the
19630 20 53 72 63 4c 69 73 74 2e 61 5b 5d 20 61 72 72   SrcList.a[] arr
19640 61 79 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68 20 74  ay..**.** With t
19650 68 65 20 61 64 64 69 74 69 6f 6e 20 6f 66 20 6d  he addition of m
19660 75 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73 65  ultiple database
19670 20 73 75 70 70 6f 72 74 2c 20 74 68 65 20 66 6f   support, the fo
19680 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
19690 65 0a 2a 2a 20 63 61 6e 20 61 6c 73 6f 20 62 65  e.** can also be
196a0 20 75 73 65 64 20 74 6f 20 64 65 73 63 72 69 62   used to describ
196b0 65 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 74  e a particular t
196c0 61 62 6c 65 20 73 75 63 68 20 61 73 20 74 68 65  able such as the
196d0 20 74 61 62 6c 65 20 74 68 61 74 0a 2a 2a 20 69   table that.** i
196e0 73 20 6d 6f 64 69 66 69 65 64 20 62 79 20 61 6e  s modified by an
196f0 20 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 2c   INSERT, DELETE,
19700 20 6f 72 20 55 50 44 41 54 45 20 73 74 61 74 65   or UPDATE state
19710 6d 65 6e 74 2e 20 20 49 6e 20 73 74 61 6e 64 61  ment.  In standa
19720 72 64 20 53 51 4c 2c 0a 2a 2a 20 73 75 63 68 20  rd SQL,.** such 
19730 61 20 74 61 62 6c 65 20 6d 75 73 74 20 62 65 20  a table must be 
19740 61 20 73 69 6d 70 6c 65 20 6e 61 6d 65 3a 20 49  a simple name: I
19750 44 2e 20 20 42 75 74 20 69 6e 20 53 51 4c 69 74  D.  But in SQLit
19760 65 2c 20 74 68 65 20 74 61 62 6c 65 20 63 61 6e  e, the table can
19770 0a 2a 2a 20 6e 6f 77 20 62 65 20 69 64 65 6e 74  .** now be ident
19780 69 66 69 65 64 20 62 79 20 61 20 64 61 74 61 62  ified by a datab
19790 61 73 65 20 6e 61 6d 65 2c 20 61 20 64 6f 74 2c  ase name, a dot,
197a0 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20   then the table 
197b0 6e 61 6d 65 3a 20 49 44 2e 49 44 2e 0a 2a 2a 0a  name: ID.ID..**.
197c0 2a 2a 20 54 68 65 20 6a 6f 69 6e 74 79 70 65 20  ** The jointype 
197d0 73 74 61 72 74 73 20 6f 75 74 20 73 68 6f 77 69  starts out showi
197e0 6e 67 20 74 68 65 20 6a 6f 69 6e 20 74 79 70 65  ng the join type
197f0 20 62 65 74 77 65 65 6e 20 74 68 65 20 63 75 72   between the cur
19800 72 65 6e 74 20 74 61 62 6c 65 0a 2a 2a 20 61 6e  rent table.** an
19810 64 20 74 68 65 20 6e 65 78 74 20 74 61 62 6c 65  d the next table
19820 20 6f 6e 20 74 68 65 20 6c 69 73 74 2e 20 20 54   on the list.  T
19830 68 65 20 70 61 72 73 65 72 20 62 75 69 6c 64 73  he parser builds
19840 20 74 68 65 20 6c 69 73 74 20 74 68 69 73 20 77   the list this w
19850 61 79 2e 0a 2a 2a 20 42 75 74 20 73 71 6c 69 74  ay..** But sqlit
19860 65 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f  e3SrcListShiftJo
19870 69 6e 54 79 70 65 28 29 20 6c 61 74 65 72 20 73  inType() later s
19880 68 69 66 74 73 20 74 68 65 20 6a 6f 69 6e 74 79  hifts the jointy
19890 70 65 73 20 73 6f 20 74 68 61 74 20 65 61 63 68  pes so that each
198a0 0a 2a 2a 20 6a 6f 69 6e 74 79 70 65 20 65 78 70  .** jointype exp
198b0 72 65 73 73 65 73 20 74 68 65 20 6a 6f 69 6e 20  resses the join 
198c0 62 65 74 77 65 65 6e 20 74 68 65 20 74 61 62 6c  between the tabl
198d0 65 20 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f  e and the previo
198e0 75 73 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  us table..**.** 
198f0 49 6e 20 74 68 65 20 63 6f 6c 55 73 65 64 20 66  In the colUsed f
19900 69 65 6c 64 2c 20 74 68 65 20 68 69 67 68 2d 6f  ield, the high-o
19910 72 64 65 72 20 62 69 74 20 28 62 69 74 20 36 33  rder bit (bit 63
19920 29 20 69 73 20 73 65 74 20 69 66 20 74 68 65 20  ) is set if the 
19930 74 61 62 6c 65 0a 2a 2a 20 63 6f 6e 74 61 69 6e  table.** contain
19940 73 20 6d 6f 72 65 20 74 68 61 6e 20 36 33 20 63  s more than 63 c
19950 6f 6c 75 6d 6e 73 20 61 6e 64 20 74 68 65 20 36  olumns and the 6
19960 34 2d 74 68 20 6f 72 20 6c 61 74 65 72 20 63 6f  4-th or later co
19970 6c 75 6d 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f  lumn is used..*/
19980 0a 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 20  .struct SrcList 
19990 7b 0a 20 20 69 6e 74 20 6e 53 72 63 3b 20 20 20  {.  int nSrc;   
199a0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
199b0 66 20 74 61 62 6c 65 73 20 6f 72 20 73 75 62 71  f tables or subq
199c0 75 65 72 69 65 73 20 69 6e 20 74 68 65 20 46 52  ueries in the FR
199d0 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75  OM clause */.  u
199e0 33 32 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20  32 nAlloc;      
199f0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74  /* Number of ent
19a00 72 69 65 73 20 61 6c 6c 6f 63 61 74 65 64 20 69  ries allocated i
19a10 6e 20 61 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20  n a[] below */. 
19a20 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f   struct SrcList_
19a30 69 74 65 6d 20 7b 0a 20 20 20 20 53 63 68 65 6d  item {.    Schem
19a40 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 2f 2a 20  a *pSchema;  /* 
19a50 53 63 68 65 6d 61 20 74 6f 20 77 68 69 63 68 20  Schema to which 
19a60 74 68 69 73 20 69 74 65 6d 20 69 73 20 66 69 78  this item is fix
19a70 65 64 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  ed */.    char *
19a80 7a 44 61 74 61 62 61 73 65 3b 20 20 2f 2a 20 4e  zDatabase;  /* N
19a90 61 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65 20  ame of database 
19aa0 68 6f 6c 64 69 6e 67 20 74 68 69 73 20 74 61 62  holding this tab
19ab0 6c 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  le */.    char *
19ac0 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e  zName;      /* N
19ad0 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
19ae0 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 41   */.    char *zA
19af0 6c 69 61 73 3b 20 20 20 20 20 2f 2a 20 54 68 65  lias;     /* The
19b00 20 22 42 22 20 70 61 72 74 20 6f 66 20 61 20 22   "B" part of a "
19b10 41 20 41 53 20 42 22 20 70 68 72 61 73 65 2e 20  A AS B" phrase. 
19b20 20 7a 4e 61 6d 65 20 69 73 20 74 68 65 20 22 41   zName is the "A
19b30 22 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a  " */.    Table *
19b40 70 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 41 6e  pTab;      /* An
19b50 20 53 51 4c 20 74 61 62 6c 65 20 63 6f 72 72 65   SQL table corre
19b60 73 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 4e 61 6d  sponding to zNam
19b70 65 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20  e */.    Select 
19b80 2a 70 53 65 6c 65 63 74 3b 20 20 2f 2a 20 41 20  *pSelect;  /* A 
19b90 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
19ba0 20 75 73 65 64 20 69 6e 20 70 6c 61 63 65 20 6f   used in place o
19bb0 66 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a  f a table name *
19bc0 2f 0a 20 20 20 20 69 6e 74 20 61 64 64 72 46 69  /.    int addrFi
19bd0 6c 6c 53 75 62 3b 20 20 2f 2a 20 41 64 64 72 65  llSub;  /* Addre
19be0 73 73 20 6f 66 20 73 75 62 72 6f 75 74 69 6e 65  ss of subroutine
19bf0 20 74 6f 20 6d 61 6e 69 66 65 73 74 20 61 20 73   to manifest a s
19c00 75 62 71 75 65 72 79 20 2a 2f 0a 20 20 20 20 69  ubquery */.    i
19c10 6e 74 20 72 65 67 52 65 74 75 72 6e 3b 20 20 20  nt regReturn;   
19c20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c   /* Register hol
19c30 64 69 6e 67 20 72 65 74 75 72 6e 20 61 64 64 72  ding return addr
19c40 65 73 73 20 6f 66 20 61 64 64 72 46 69 6c 6c 53  ess of addrFillS
19c50 75 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65  ub */.    int re
19c60 67 52 65 73 75 6c 74 3b 20 20 20 20 2f 2a 20 52  gResult;    /* R
19c70 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67  egisters holding
19c80 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20 63 6f   results of a co
19c90 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20  -routine */.    
19ca0 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20 75  struct {.      u
19cb0 38 20 6a 6f 69 6e 74 79 70 65 3b 20 20 20 20 20  8 jointype;     
19cc0 20 2f 2a 20 54 79 70 65 20 6f 66 20 6a 6f 69 6e   /* Type of join
19cd0 20 62 65 74 77 65 65 6e 20 74 68 69 73 20 74 61   between this ta
19ce0 62 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65 76  ble and the prev
19cf0 69 6f 75 73 20 2a 2f 0a 20 20 20 20 20 20 75 6e  ious */.      un
19d00 73 69 67 6e 65 64 20 6e 6f 74 49 6e 64 65 78 65  signed notIndexe
19d10 64 20 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75 65  d :1;    /* True
19d20 20 69 66 20 74 68 65 72 65 20 69 73 20 61 20 4e   if there is a N
19d30 4f 54 20 49 4e 44 45 58 45 44 20 63 6c 61 75 73  OT INDEXED claus
19d40 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67  e */.      unsig
19d50 6e 65 64 20 69 73 49 6e 64 65 78 65 64 42 79 20  ned isIndexedBy 
19d60 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 69 66  :1;   /* True if
19d70 20 74 68 65 72 65 20 69 73 20 61 6e 20 49 4e 44   there is an IND
19d80 45 58 45 44 20 42 59 20 63 6c 61 75 73 65 20 2a  EXED BY clause *
19d90 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64  /.      unsigned
19da0 20 69 73 54 61 62 46 75 6e 63 20 3a 31 3b 20 20   isTabFunc :1;  
19db0 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 61     /* True if ta
19dc0 62 6c 65 2d 76 61 6c 75 65 64 2d 66 75 6e 63 74  ble-valued-funct
19dd0 69 6f 6e 20 73 79 6e 74 61 78 20 2a 2f 0a 20 20  ion syntax */.  
19de0 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 43      unsigned isC
19df0 6f 72 72 65 6c 61 74 65 64 20 3a 31 3b 20 20 2f  orrelated :1;  /
19e00 2a 20 54 72 75 65 20 69 66 20 73 75 62 2d 71 75  * True if sub-qu
19e10 65 72 79 20 69 73 20 63 6f 72 72 65 6c 61 74 65  ery is correlate
19e20 64 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67  d */.      unsig
19e30 6e 65 64 20 76 69 61 43 6f 72 6f 75 74 69 6e 65  ned viaCoroutine
19e40 20 3a 31 3b 20 20 2f 2a 20 49 6d 70 6c 65 6d 65   :1;  /* Impleme
19e50 6e 74 65 64 20 61 73 20 61 20 63 6f 2d 72 6f 75  nted as a co-rou
19e60 74 69 6e 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e  tine */.      un
19e70 73 69 67 6e 65 64 20 69 73 52 65 63 75 72 73 69  signed isRecursi
19e80 76 65 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65  ve :1;   /* True
19e90 20 66 6f 72 20 72 65 63 75 72 73 69 76 65 20 72   for recursive r
19ea0 65 66 65 72 65 6e 63 65 20 69 6e 20 57 49 54 48  eference in WITH
19eb0 20 2a 2f 0a 20 20 20 20 7d 20 66 67 3b 0a 23 69   */.    } fg;.#i
19ec0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
19ed0 54 5f 45 58 50 4c 41 49 4e 0a 20 20 20 20 75 38  T_EXPLAIN.    u8
19ee0 20 69 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20   iSelectId;     
19ef0 2f 2a 20 49 66 20 70 53 65 6c 65 63 74 21 3d 30  /* If pSelect!=0
19f00 2c 20 74 68 65 20 69 64 20 6f 66 20 74 68 65 20  , the id of the 
19f10 73 75 62 2d 73 65 6c 65 63 74 20 69 6e 20 45 51  sub-select in EQ
19f20 50 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 20 20  P */.#endif.    
19f30 69 6e 74 20 69 43 75 72 73 6f 72 3b 20 20 20 20  int iCursor;    
19f40 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75    /* The VDBE cu
19f50 72 73 6f 72 20 6e 75 6d 62 65 72 20 75 73 65 64  rsor number used
19f60 20 74 6f 20 61 63 63 65 73 73 20 74 68 69 73 20   to access this 
19f70 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 45 78 70  table */.    Exp
19f80 72 20 2a 70 4f 6e 3b 20 20 20 20 20 20 20 20 2f  r *pOn;        /
19f90 2a 20 54 68 65 20 4f 4e 20 63 6c 61 75 73 65 20  * The ON clause 
19fa0 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20  of a join */.   
19fb0 20 49 64 4c 69 73 74 20 2a 70 55 73 69 6e 67 3b   IdList *pUsing;
19fc0 20 20 20 2f 2a 20 54 68 65 20 55 53 49 4e 47 20     /* The USING 
19fd0 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e  clause of a join
19fe0 20 2a 2f 0a 20 20 20 20 42 69 74 6d 61 73 6b 20   */.    Bitmask 
19ff0 63 6f 6c 55 73 65 64 3b 20 20 2f 2a 20 42 69 74  colUsed;  /* Bit
1a000 20 4e 20 28 31 3c 3c 4e 29 20 73 65 74 20 69 66   N (1<<N) set if
1a010 20 63 6f 6c 75 6d 6e 20 4e 20 6f 66 20 70 54 61   column N of pTa
1a020 62 20 69 73 20 75 73 65 64 20 2a 2f 0a 20 20 20  b is used */.   
1a030 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20 63   union {.      c
1a040 68 61 72 20 2a 7a 49 6e 64 65 78 65 64 42 79 3b  har *zIndexedBy;
1a050 20 20 20 20 2f 2a 20 49 64 65 6e 74 69 66 69 65      /* Identifie
1a060 72 20 66 72 6f 6d 20 22 49 4e 44 45 58 45 44 20  r from "INDEXED 
1a070 42 59 20 3c 7a 49 6e 64 65 78 3e 22 20 63 6c 61  BY <zIndex>" cla
1a080 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 45 78 70  use */.      Exp
1a090 72 4c 69 73 74 20 2a 70 46 75 6e 63 41 72 67 3b  rList *pFuncArg;
1a0a0 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 73 20 74    /* Arguments t
1a0b0 6f 20 74 61 62 6c 65 2d 76 61 6c 75 65 64 2d 66  o table-valued-f
1a0c0 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 7d  unction */.    }
1a0d0 20 75 31 3b 0a 20 20 20 20 49 6e 64 65 78 20 2a   u1;.    Index *
1a0e0 70 49 42 49 6e 64 65 78 3b 20 20 2f 2a 20 49 6e  pIBIndex;  /* In
1a0f0 64 65 78 20 73 74 72 75 63 74 75 72 65 20 63 6f  dex structure co
1a100 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 75  rresponding to u
1a110 31 2e 7a 49 6e 64 65 78 65 64 42 79 20 2a 2f 0a  1.zIndexedBy */.
1a120 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20 20    } a[1];       
1a130 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74        /* One ent
1a140 72 79 20 66 6f 72 20 65 61 63 68 20 69 64 65 6e  ry for each iden
1a150 74 69 66 69 65 72 20 6f 6e 20 74 68 65 20 6c 69  tifier on the li
1a160 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  st */.};../*.** 
1a170 50 65 72 6d 69 74 74 65 64 20 76 61 6c 75 65 73  Permitted values
1a180 20 6f 66 20 74 68 65 20 53 72 63 4c 69 73 74 2e   of the SrcList.
1a190 61 2e 6a 6f 69 6e 74 79 70 65 20 66 69 65 6c 64  a.jointype field
1a1a0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 49  .*/.#define JT_I
1a1b0 4e 4e 45 52 20 20 20 20 20 30 78 30 30 30 31 20  NNER     0x0001 
1a1c0 20 20 20 2f 2a 20 41 6e 79 20 6b 69 6e 64 20 6f     /* Any kind o
1a1d0 66 20 69 6e 6e 65 72 20 6f 72 20 63 72 6f 73 73  f inner or cross
1a1e0 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   join */.#define
1a1f0 20 4a 54 5f 43 52 4f 53 53 20 20 20 20 20 30 78   JT_CROSS     0x
1a200 30 30 30 32 20 20 20 20 2f 2a 20 45 78 70 6c 69  0002    /* Expli
1a210 63 69 74 20 75 73 65 20 6f 66 20 74 68 65 20 43  cit use of the C
1a220 52 4f 53 53 20 6b 65 79 77 6f 72 64 20 2a 2f 0a  ROSS keyword */.
1a230 23 64 65 66 69 6e 65 20 4a 54 5f 4e 41 54 55 52  #define JT_NATUR
1a240 41 4c 20 20 20 30 78 30 30 30 34 20 20 20 20 2f  AL   0x0004    /
1a250 2a 20 54 72 75 65 20 66 6f 72 20 61 20 22 6e 61  * True for a "na
1a260 74 75 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23  tural" join */.#
1a270 64 65 66 69 6e 65 20 4a 54 5f 4c 45 46 54 20 20  define JT_LEFT  
1a280 20 20 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a      0x0008    /*
1a290 20 4c 65 66 74 20 6f 75 74 65 72 20 6a 6f 69 6e   Left outer join
1a2a0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 52   */.#define JT_R
1a2b0 49 47 48 54 20 20 20 20 20 30 78 30 30 31 30 20  IGHT     0x0010 
1a2c0 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 75 74 65     /* Right oute
1a2d0 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  r join */.#defin
1a2e0 65 20 4a 54 5f 4f 55 54 45 52 20 20 20 20 20 30  e JT_OUTER     0
1a2f0 78 30 30 32 30 20 20 20 20 2f 2a 20 54 68 65 20  x0020    /* The 
1a300 22 4f 55 54 45 52 22 20 6b 65 79 77 6f 72 64 20  "OUTER" keyword 
1a310 69 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 23 64  is present */.#d
1a320 65 66 69 6e 65 20 4a 54 5f 45 52 52 4f 52 20 20  efine JT_ERROR  
1a330 20 20 20 30 78 30 30 34 30 20 20 20 20 2f 2a 20     0x0040    /* 
1a340 75 6e 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73 75 70  unknown or unsup
1a350 70 6f 72 74 65 64 20 6a 6f 69 6e 20 74 79 70 65  ported join type
1a360 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67   */.../*.** Flag
1a370 73 20 61 70 70 72 6f 70 72 69 61 74 65 20 66 6f  s appropriate fo
1a380 72 20 74 68 65 20 77 63 74 72 6c 46 6c 61 67 73  r the wctrlFlags
1a390 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20 73 71   parameter of sq
1a3a0 6c 69 74 65 33 57 68 65 72 65 42 65 67 69 6e 28  lite3WhereBegin(
1a3b0 29 0a 2a 2a 20 61 6e 64 20 74 68 65 20 57 68 65  ).** and the Whe
1a3c0 72 65 49 6e 66 6f 2e 77 63 74 72 6c 46 6c 61 67  reInfo.wctrlFlag
1a3d0 73 20 6d 65 6d 62 65 72 2e 0a 2a 2a 0a 2a 2a 20  s member..**.** 
1a3e0 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74  Value constraint
1a3f0 73 20 28 65 6e 66 6f 72 63 65 64 20 76 69 61 20  s (enforced via 
1a400 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20  assert()):.**   
1a410 20 20 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d 49    WHERE_USE_LIMI
1a420 54 20 20 3d 3d 20 53 46 5f 46 69 78 65 64 4c 69  T  == SF_FixedLi
1a430 6d 69 74 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57  mit.*/.#define W
1a440 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4e 4f 52  HERE_ORDERBY_NOR
1a450 4d 41 4c 20 20 20 30 78 30 30 30 30 20 2f 2a 20  MAL   0x0000 /* 
1a460 4e 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65  No-op */.#define
1a470 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d   WHERE_ORDERBY_M
1a480 49 4e 20 20 20 20 20 20 30 78 30 30 30 31 20 2f  IN      0x0001 /
1a490 2a 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65  * ORDER BY proce
1a4a0 73 73 69 6e 67 20 66 6f 72 20 6d 69 6e 28 29 20  ssing for min() 
1a4b0 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20  func */.#define 
1a4c0 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 41  WHERE_ORDERBY_MA
1a4d0 58 20 20 20 20 20 20 30 78 30 30 30 32 20 2f 2a  X      0x0002 /*
1a4e0 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65 73   ORDER BY proces
1a4f0 73 69 6e 67 20 66 6f 72 20 6d 61 78 28 29 20 66  sing for max() f
1a500 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  unc */.#define W
1a510 48 45 52 45 5f 4f 4e 45 50 41 53 53 5f 44 45 53  HERE_ONEPASS_DES
1a520 49 52 45 44 20 20 30 78 30 30 30 34 20 2f 2a 20  IRED  0x0004 /* 
1a530 57 61 6e 74 20 74 6f 20 64 6f 20 6f 6e 65 2d 70  Want to do one-p
1a540 61 73 73 20 55 50 44 41 54 45 2f 44 45 4c 45 54  ass UPDATE/DELET
1a550 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  E */.#define WHE
1a560 52 45 5f 4f 4e 45 50 41 53 53 5f 4d 55 4c 54 49  RE_ONEPASS_MULTI
1a570 52 4f 57 20 30 78 30 30 30 38 20 2f 2a 20 4f 4e  ROW 0x0008 /* ON
1a580 45 50 41 53 53 20 69 73 20 6f 6b 20 77 69 74 68  EPASS is ok with
1a590 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a   multiple rows *
1a5a0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1a5b0 44 55 50 4c 49 43 41 54 45 53 5f 4f 4b 20 20 20  DUPLICATES_OK   
1a5c0 20 30 78 30 30 31 30 20 2f 2a 20 4f 6b 20 74 6f   0x0010 /* Ok to
1a5d0 20 72 65 74 75 72 6e 20 61 20 72 6f 77 20 6d 6f   return a row mo
1a5e0 72 65 20 74 68 61 6e 20 6f 6e 63 65 20 2a 2f 0a  re than once */.
1a5f0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52  #define WHERE_OR
1a600 5f 53 55 42 43 4c 41 55 53 45 20 20 20 20 20 30  _SUBCLAUSE     0
1a610 78 30 30 32 30 20 2f 2a 20 50 72 6f 63 65 73 73  x0020 /* Process
1a620 69 6e 67 20 61 20 73 75 62 2d 57 48 45 52 45 20  ing a sub-WHERE 
1a630 61 73 20 70 61 72 74 20 6f 66 0a 20 20 20 20 20  as part of.     
1a640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a660 20 2a 2a 20 74 68 65 20 4f 52 20 6f 70 74 69 6d   ** the OR optim
1a670 69 7a 61 74 69 6f 6e 20 20 2a 2f 0a 23 64 65 66  ization  */.#def
1a680 69 6e 65 20 57 48 45 52 45 5f 47 52 4f 55 50 42  ine WHERE_GROUPB
1a690 59 20 20 20 20 20 20 20 20 20 20 30 78 30 30 34  Y          0x004
1a6a0 30 20 2f 2a 20 70 4f 72 64 65 72 42 79 20 69 73  0 /* pOrderBy is
1a6b0 20 72 65 61 6c 6c 79 20 61 20 47 52 4f 55 50 20   really a GROUP 
1a6c0 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  BY */.#define WH
1a6d0 45 52 45 5f 44 49 53 54 49 4e 43 54 42 59 20 20  ERE_DISTINCTBY  
1a6e0 20 20 20 20 20 30 78 30 30 38 30 20 2f 2a 20 70       0x0080 /* p
1a6f0 4f 72 64 65 72 62 79 20 69 73 20 72 65 61 6c 6c  Orderby is reall
1a700 79 20 61 20 44 49 53 54 49 4e 43 54 20 63 6c 61  y a DISTINCT cla
1a710 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  use */.#define W
1a720 48 45 52 45 5f 57 41 4e 54 5f 44 49 53 54 49 4e  HERE_WANT_DISTIN
1a730 43 54 20 20 20 20 30 78 30 31 30 30 20 2f 2a 20  CT    0x0100 /* 
1a740 41 6c 6c 20 6f 75 74 70 75 74 20 6e 65 65 64 73  All output needs
1a750 20 74 6f 20 62 65 20 64 69 73 74 69 6e 63 74 20   to be distinct 
1a760 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1a770 5f 53 4f 52 54 42 59 47 52 4f 55 50 20 20 20 20  _SORTBYGROUP    
1a780 20 20 30 78 30 32 30 30 20 2f 2a 20 53 75 70 70    0x0200 /* Supp
1a790 6f 72 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  ort sqlite3Where
1a7a0 49 73 53 6f 72 74 65 64 28 29 20 2a 2f 0a 23 64  IsSorted() */.#d
1a7b0 65 66 69 6e 65 20 57 48 45 52 45 5f 53 45 45 4b  efine WHERE_SEEK
1a7c0 5f 54 41 42 4c 45 20 20 20 20 20 20 20 30 78 30  _TABLE       0x0
1a7d0 34 30 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 64 65  400 /* Do not de
1a7e0 66 65 72 20 73 65 65 6b 73 20 6f 6e 20 6d 61 69  fer seeks on mai
1a7f0 6e 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  n table */.#defi
1a800 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59  ne WHERE_ORDERBY
1a810 5f 4c 49 4d 49 54 20 20 20 20 30 78 30 38 30 30  _LIMIT    0x0800
1a820 20 2f 2a 20 4f 52 44 45 52 42 59 2b 4c 49 4d 49   /* ORDERBY+LIMI
1a830 54 20 6f 6e 20 74 68 65 20 69 6e 6e 65 72 20 6c  T on the inner l
1a840 6f 6f 70 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  oop */.         
1a850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1a860 2a 20 20 20 20 20 30 78 31 30 30 30 20 20 20 20  *     0x1000    
1a870 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 75 73  not currently us
1a880 65 64 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  ed */.          
1a890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1a8a0 20 20 20 20 20 30 78 32 30 30 30 20 20 20 20 6e       0x2000    n
1a8b0 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 75 73 65  ot currently use
1a8c0 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  d */.#define WHE
1a8d0 52 45 5f 55 53 45 5f 4c 49 4d 49 54 20 20 20 20  RE_USE_LIMIT    
1a8e0 20 20 20 20 30 78 34 30 30 30 20 2f 2a 20 55 73      0x4000 /* Us
1a8f0 65 20 74 68 65 20 4c 49 4d 49 54 20 69 6e 20 63  e the LIMIT in c
1a900 6f 73 74 20 65 73 74 69 6d 61 74 65 73 20 2a 2f  ost estimates */
1a910 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a920 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 20 20           /*     
1a930 30 78 38 30 30 30 20 20 20 20 6e 6f 74 20 63 75  0x8000    not cu
1a940 72 72 65 6e 74 6c 79 20 75 73 65 64 20 2a 2f 0a  rrently used */.
1a950 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75  ./* Allowed retu
1a960 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73  rn values from s
1a970 71 6c 69 74 65 33 57 68 65 72 65 49 73 44 69 73  qlite3WhereIsDis
1a980 74 69 6e 63 74 28 29 0a 2a 2f 0a 23 64 65 66 69  tinct().*/.#defi
1a990 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
1a9a0 54 5f 4e 4f 4f 50 20 20 20 20 20 20 30 20 20 2f  T_NOOP      0  /
1a9b0 2a 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f  * DISTINCT keywo
1a9c0 72 64 20 6e 6f 74 20 75 73 65 64 20 2a 2f 0a 23  rd not used */.#
1a9d0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
1a9e0 54 49 4e 43 54 5f 55 4e 49 51 55 45 20 20 20 20  TINCT_UNIQUE    
1a9f0 31 20 20 2f 2a 20 4e 6f 20 64 75 70 6c 69 63 61  1  /* No duplica
1aa00 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  tes */.#define W
1aa10 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4f 52  HERE_DISTINCT_OR
1aa20 44 45 52 45 44 20 20 20 32 20 20 2f 2a 20 41 6c  DERED   2  /* Al
1aa30 6c 20 64 75 70 6c 69 63 61 74 65 73 20 61 72 65  l duplicates are
1aa40 20 61 64 6a 61 63 65 6e 74 20 2a 2f 0a 23 64 65   adjacent */.#de
1aa50 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49  fine WHERE_DISTI
1aa60 4e 43 54 5f 55 4e 4f 52 44 45 52 45 44 20 33 20  NCT_UNORDERED 3 
1aa70 20 2f 2a 20 44 75 70 6c 69 63 61 74 65 73 20 61   /* Duplicates a
1aa80 72 65 20 73 63 61 74 74 65 72 65 64 20 2a 2f 0a  re scattered */.
1aa90 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e  ./*.** A NameCon
1aaa0 74 65 78 74 20 64 65 66 69 6e 65 73 20 61 20 63  text defines a c
1aab0 6f 6e 74 65 78 74 20 69 6e 20 77 68 69 63 68 20  ontext in which 
1aac0 74 6f 20 72 65 73 6f 6c 76 65 20 74 61 62 6c 65  to resolve table
1aad0 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e   and column.** n
1aae0 61 6d 65 73 2e 20 20 54 68 65 20 63 6f 6e 74 65  ames.  The conte
1aaf0 78 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61  xt consists of a
1ab00 20 6c 69 73 74 20 6f 66 20 74 61 62 6c 65 73 20   list of tables 
1ab10 28 74 68 65 20 70 53 72 63 4c 69 73 74 29 20 66  (the pSrcList) f
1ab20 69 65 6c 64 20 61 6e 64 0a 2a 2a 20 61 20 6c 69  ield and.** a li
1ab30 73 74 20 6f 66 20 6e 61 6d 65 64 20 65 78 70 72  st of named expr
1ab40 65 73 73 69 6f 6e 20 28 70 45 4c 69 73 74 29 2e  ession (pEList).
1ab50 20 20 54 68 65 20 6e 61 6d 65 64 20 65 78 70 72    The named expr
1ab60 65 73 73 69 6f 6e 20 6c 69 73 74 20 6d 61 79 0a  ession list may.
1ab70 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20 20 54 68 65  ** be NULL.  The
1ab80 20 70 53 72 63 20 63 6f 72 72 65 73 70 6f 6e 64   pSrc correspond
1ab90 73 20 74 6f 20 74 68 65 20 46 52 4f 4d 20 63 6c  s to the FROM cl
1aba0 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54  ause of a SELECT
1abb0 20 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20 74 61   or.** to the ta
1abc0 62 6c 65 20 62 65 69 6e 67 20 6f 70 65 72 61 74  ble being operat
1abd0 65 64 20 6f 6e 20 62 79 20 49 4e 53 45 52 54 2c  ed on by INSERT,
1abe0 20 55 50 44 41 54 45 2c 20 6f 72 20 44 45 4c 45   UPDATE, or DELE
1abf0 54 45 2e 20 20 54 68 65 0a 2a 2a 20 70 45 4c 69  TE.  The.** pELi
1ac00 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  st corresponds t
1ac10 6f 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  o the result set
1ac20 20 6f 66 20 61 20 53 45 4c 45 43 54 20 61 6e 64   of a SELECT and
1ac30 20 69 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20   is NULL for.** 
1ac40 6f 74 68 65 72 20 73 74 61 74 65 6d 65 6e 74 73  other statements
1ac50 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74  ..**.** NameCont
1ac60 65 78 74 73 20 63 61 6e 20 62 65 20 6e 65 73 74  exts can be nest
1ac70 65 64 2e 20 20 57 68 65 6e 20 72 65 73 6f 6c 76  ed.  When resolv
1ac80 69 6e 67 20 6e 61 6d 65 73 2c 20 74 68 65 20 69  ing names, the i
1ac90 6e 6e 65 72 2d 6d 6f 73 74 0a 2a 2a 20 63 6f 6e  nner-most.** con
1aca0 74 65 78 74 20 69 73 20 73 65 61 72 63 68 65 64  text is searched
1acb0 20 66 69 72 73 74 2e 20 20 49 66 20 6e 6f 20 6d   first.  If no m
1acc0 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74  atch is found, t
1acd0 68 65 20 6e 65 78 74 20 6f 75 74 65 72 0a 2a 2a  he next outer.**
1ace0 20 63 6f 6e 74 65 78 74 20 69 73 20 63 68 65 63   context is chec
1acf0 6b 65 64 2e 20 20 49 66 20 74 68 65 72 65 20 69  ked.  If there i
1ad00 73 20 73 74 69 6c 6c 20 6e 6f 20 6d 61 74 63 68  s still no match
1ad10 2c 20 74 68 65 20 6e 65 78 74 20 63 6f 6e 74 65  , the next conte
1ad20 78 74 0a 2a 2a 20 69 73 20 63 68 65 63 6b 65 64  xt.** is checked
1ad30 2e 20 20 54 68 69 73 20 70 72 6f 63 65 73 73 20  .  This process 
1ad40 63 6f 6e 74 69 6e 75 65 73 20 75 6e 74 69 6c 20  continues until 
1ad50 65 69 74 68 65 72 20 61 20 6d 61 74 63 68 20 69  either a match i
1ad60 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c  s found.** or al
1ad70 6c 20 63 6f 6e 74 65 78 74 73 20 61 72 65 20 63  l contexts are c
1ad80 68 65 63 6b 2e 20 20 57 68 65 6e 20 61 20 6d 61  heck.  When a ma
1ad90 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68  tch is found, th
1ada0 65 20 6e 52 65 66 20 6d 65 6d 62 65 72 20 6f 66  e nRef member of
1adb0 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 78 74 20  .** the context 
1adc0 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 6d  containing the m
1add0 61 74 63 68 20 69 73 20 69 6e 63 72 65 6d 65 6e  atch is incremen
1ade0 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20  ted..**.** Each 
1adf0 73 75 62 71 75 65 72 79 20 67 65 74 73 20 61 20  subquery gets a 
1ae00 6e 65 77 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2e  new NameContext.
1ae10 20 20 54 68 65 20 70 4e 65 78 74 20 66 69 65 6c    The pNext fiel
1ae20 64 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a  d points to the.
1ae30 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 69  ** NameContext i
1ae40 6e 20 74 68 65 20 70 61 72 65 6e 74 20 71 75 65  n the parent que
1ae50 72 79 2e 20 20 54 68 75 73 20 74 68 65 20 70 72  ry.  Thus the pr
1ae60 6f 63 65 73 73 20 6f 66 20 73 63 61 6e 6e 69 6e  ocess of scannin
1ae70 67 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e  g the.** NameCon
1ae80 74 65 78 74 20 6c 69 73 74 20 63 6f 72 72 65 73  text list corres
1ae90 70 6f 6e 64 73 20 74 6f 20 73 65 61 72 63 68 69  ponds to searchi
1aea0 6e 67 20 74 68 72 6f 75 67 68 20 73 75 63 63 65  ng through succe
1aeb0 73 73 69 76 65 6c 79 20 6f 75 74 65 72 0a 2a 2a  ssively outer.**
1aec0 20 73 75 62 71 75 65 72 69 65 73 20 6c 6f 6f 6b   subqueries look
1aed0 69 6e 67 20 66 6f 72 20 61 20 6d 61 74 63 68 2e  ing for a match.
1aee0 0a 2a 2f 0a 73 74 72 75 63 74 20 4e 61 6d 65 43  .*/.struct NameC
1aef0 6f 6e 74 65 78 74 20 7b 0a 20 20 50 61 72 73 65  ontext {.  Parse
1af00 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20   *pParse;       
1af10 2f 2a 20 54 68 65 20 70 61 72 73 65 72 20 2a 2f  /* The parser */
1af20 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63  .  SrcList *pSrc
1af30 4c 69 73 74 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f  List;   /* One o
1af40 72 20 6d 6f 72 65 20 74 61 62 6c 65 73 20 75 73  r more tables us
1af50 65 64 20 74 6f 20 72 65 73 6f 6c 76 65 20 6e 61  ed to resolve na
1af60 6d 65 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  mes */.  ExprLis
1af70 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 2f 2a  t *pEList;    /*
1af80 20 4f 70 74 69 6f 6e 61 6c 20 6c 69 73 74 20 6f   Optional list o
1af90 66 20 72 65 73 75 6c 74 2d 73 65 74 20 63 6f 6c  f result-set col
1afa0 75 6d 6e 73 20 2a 2f 0a 20 20 41 67 67 49 6e 66  umns */.  AggInf
1afb0 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 2f  o *pAggInfo;   /
1afc0 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * Information ab
1afd0 6f 75 74 20 61 67 67 72 65 67 61 74 65 73 20 61  out aggregates a
1afe0 74 20 74 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a  t this level */.
1aff0 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70    NameContext *p
1b000 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 6f  Next;  /* Next o
1b010 75 74 65 72 20 6e 61 6d 65 20 63 6f 6e 74 65 78  uter name contex
1b020 74 2e 20 20 4e 55 4c 4c 20 66 6f 72 20 6f 75 74  t.  NULL for out
1b030 65 72 6d 6f 73 74 20 2a 2f 0a 20 20 69 6e 74 20  ermost */.  int 
1b040 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20  nRef;           
1b050 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 61   /* Number of na
1b060 6d 65 73 20 72 65 73 6f 6c 76 65 64 20 62 79 20  mes resolved by 
1b070 74 68 69 73 20 63 6f 6e 74 65 78 74 20 2a 2f 0a  this context */.
1b080 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20    int nErr;     
1b090 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1b0a0 20 6f 66 20 65 72 72 6f 72 73 20 65 6e 63 6f 75   of errors encou
1b0b0 6e 74 65 72 65 64 20 77 68 69 6c 65 20 72 65 73  ntered while res
1b0c0 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 2a 2f 0a  olving names */.
1b0d0 20 20 75 31 36 20 6e 63 46 6c 61 67 73 3b 20 20    u16 ncFlags;  
1b0e0 20 20 20 20 20 20 20 2f 2a 20 5a 65 72 6f 20 6f         /* Zero o
1b0f0 72 20 6d 6f 72 65 20 4e 43 5f 2a 20 66 6c 61 67  r more NC_* flag
1b100 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20  s defined below 
1b110 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  */.};../*.** All
1b120 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
1b130 74 68 65 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2c  the NameContext,
1b140 20 6e 63 46 6c 61 67 73 20 66 69 65 6c 64 2e 0a   ncFlags field..
1b150 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73  **.** Value cons
1b160 74 72 61 69 6e 74 73 20 28 61 6c 6c 20 63 68 65  traints (all che
1b170 63 6b 65 64 20 76 69 61 20 61 73 73 65 72 74 28  cked via assert(
1b180 29 29 3a 0a 2a 2a 20 20 20 20 4e 43 5f 48 61 73  )):.**    NC_Has
1b190 41 67 67 20 20 20 20 3d 3d 20 53 46 5f 48 61 73  Agg    == SF_Has
1b1a0 41 67 67 0a 2a 2a 20 20 20 20 4e 43 5f 4d 69 6e  Agg.**    NC_Min
1b1b0 4d 61 78 41 67 67 20 3d 3d 20 53 46 5f 4d 69 6e  MaxAgg == SF_Min
1b1c0 4d 61 78 41 67 67 20 3d 3d 20 53 51 4c 49 54 45  MaxAgg == SQLITE
1b1d0 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 0a 2a 2a 0a  _FUNC_MINMAX.**.
1b1e0 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 41 6c  */.#define NC_Al
1b1f0 6c 6f 77 41 67 67 20 20 30 78 30 30 30 31 20 20  lowAgg  0x0001  
1b200 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 75 6e  /* Aggregate fun
1b210 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 6c 6f 77  ctions are allow
1b220 65 64 20 68 65 72 65 20 2a 2f 0a 23 64 65 66 69  ed here */.#defi
1b230 6e 65 20 4e 43 5f 50 61 72 74 49 64 78 20 20 20  ne NC_PartIdx   
1b240 30 78 30 30 30 32 20 20 2f 2a 20 54 72 75 65 20  0x0002  /* True 
1b250 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 61 20 70  if resolving a p
1b260 61 72 74 69 61 6c 20 69 6e 64 65 78 20 57 48 45  artial index WHE
1b270 52 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  RE */.#define NC
1b280 5f 49 73 43 68 65 63 6b 20 20 20 30 78 30 30 30  _IsCheck   0x000
1b290 34 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65  4  /* True if re
1b2a0 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 69 6e  solving names in
1b2b0 20 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61   a CHECK constra
1b2c0 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  int */.#define N
1b2d0 43 5f 49 6e 41 67 67 46 75 6e 63 20 30 78 30 30  C_InAggFunc 0x00
1b2e0 30 38 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61  08  /* True if a
1b2f0 6e 61 6c 79 7a 69 6e 67 20 61 72 67 75 6d 65 6e  nalyzing argumen
1b300 74 73 20 74 6f 20 61 6e 20 61 67 67 20 66 75 6e  ts to an agg fun
1b310 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  c */.#define NC_
1b320 48 61 73 41 67 67 20 20 20 20 30 78 30 30 31 30  HasAgg    0x0010
1b330 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65    /* One or more
1b340 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
1b350 69 6f 6e 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65  ions seen */.#de
1b360 66 69 6e 65 20 4e 43 5f 49 64 78 45 78 70 72 20  fine NC_IdxExpr 
1b370 20 20 30 78 30 30 32 30 20 20 2f 2a 20 54 72 75    0x0020  /* Tru
1b380 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 63  e if resolving c
1b390 6f 6c 75 6d 6e 73 20 6f 66 20 43 52 45 41 54 45  olumns of CREATE
1b3a0 20 49 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e   INDEX */.#defin
1b3b0 65 20 4e 43 5f 56 61 72 53 65 6c 65 63 74 20 30  e NC_VarSelect 0
1b3c0 78 30 30 34 30 20 20 2f 2a 20 41 20 63 6f 72 72  x0040  /* A corr
1b3d0 65 6c 61 74 65 64 20 73 75 62 71 75 65 72 79 20  elated subquery 
1b3e0 68 61 73 20 62 65 65 6e 20 73 65 65 6e 20 2a 2f  has been seen */
1b3f0 0a 23 64 65 66 69 6e 65 20 4e 43 5f 4d 69 6e 4d  .#define NC_MinM
1b400 61 78 41 67 67 20 30 78 31 30 30 30 20 20 2f 2a  axAgg 0x1000  /*
1b410 20 6d 69 6e 2f 6d 61 78 20 61 67 67 72 65 67 61   min/max aggrega
1b420 74 65 73 20 73 65 65 6e 2e 20 20 53 65 65 20 6e  tes seen.  See n
1b430 6f 74 65 20 61 62 6f 76 65 20 2a 2f 0a 0a 2f 2a  ote above */../*
1b440 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
1b450 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
1b460 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
1b470 69 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d 61 74  ins all informat
1b480 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20 74 6f  ion.** needed to
1b490 20 67 65 6e 65 72 61 74 65 20 63 6f 64 65 20 66   generate code f
1b4a0 6f 72 20 61 20 73 69 6e 67 6c 65 20 53 45 4c 45  or a single SELE
1b4b0 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a  CT statement..**
1b4c0 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69 73 20 73 65  .** nLimit is se
1b4d0 74 20 74 6f 20 2d 31 20 69 66 20 74 68 65 72 65  t to -1 if there
1b4e0 20 69 73 20 6e 6f 20 4c 49 4d 49 54 20 63 6c 61   is no LIMIT cla
1b4f0 75 73 65 2e 20 20 6e 4f 66 66 73 65 74 20 69 73  use.  nOffset is
1b500 20 73 65 74 20 74 6f 20 30 2e 0a 2a 2a 20 49 66   set to 0..** If
1b510 20 74 68 65 72 65 20 69 73 20 61 20 4c 49 4d 49   there is a LIMI
1b520 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20 70 61  T clause, the pa
1b530 72 73 65 72 20 73 65 74 73 20 6e 4c 69 6d 69 74  rser sets nLimit
1b540 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66   to the value of
1b550 20 74 68 65 0a 2a 2a 20 6c 69 6d 69 74 20 61 6e   the.** limit an
1b560 64 20 6e 4f 66 66 73 65 74 20 74 6f 20 74 68 65  d nOffset to the
1b570 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 66   value of the of
1b580 66 73 65 74 20 28 6f 72 20 30 20 69 66 20 74 68  fset (or 0 if th
1b590 65 72 65 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 66  ere is not.** of
1b5a0 66 73 65 74 29 2e 20 20 42 75 74 20 6c 61 74 65  fset).  But late
1b5b0 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61 6e 64  r on, nLimit and
1b5c0 20 6e 4f 66 66 73 65 74 20 62 65 63 6f 6d 65 20   nOffset become 
1b5d0 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74  the memory locat
1b5e0 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68 65 20 56  ions.** in the V
1b5f0 44 42 45 20 74 68 61 74 20 72 65 63 6f 72 64 20  DBE that record 
1b600 74 68 65 20 6c 69 6d 69 74 20 61 6e 64 20 6f 66  the limit and of
1b610 66 73 65 74 20 63 6f 75 6e 74 65 72 73 2e 0a 2a  fset counters..*
1b620 2a 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70 68  *.** addrOpenEph
1b630 6d 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e 74  m[] entries cont
1b640 61 69 6e 20 74 68 65 20 61 64 64 72 65 73 73 20  ain the address 
1b650 6f 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65  of OP_OpenEpheme
1b660 72 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20  ral opcodes..** 
1b670 54 68 65 73 65 20 61 64 64 72 65 73 73 65 73 20  These addresses 
1b680 6d 75 73 74 20 62 65 20 73 74 6f 72 65 64 20 73  must be stored s
1b690 6f 20 74 68 61 74 20 77 65 20 63 61 6e 20 67 6f  o that we can go
1b6a0 20 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20 69   back and fill i
1b6b0 6e 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59 49  n.** the P4_KEYI
1b6c0 4e 46 4f 20 61 6e 64 20 50 32 20 70 61 72 61 6d  NFO and P2 param
1b6d0 65 74 65 72 73 20 6c 61 74 65 72 2e 20 20 4e 65  eters later.  Ne
1b6e0 69 74 68 65 72 20 74 68 65 20 4b 65 79 49 6e 66  ither the KeyInf
1b6f0 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75 6d  o nor.** the num
1b700 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
1b710 6e 20 50 32 20 63 61 6e 20 62 65 20 63 6f 6d 70  n P2 can be comp
1b720 75 74 65 64 20 61 74 20 74 68 65 20 73 61 6d 65  uted at the same
1b730 20 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65 20   time.** as the 
1b740 4f 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73 74  OP_OpenEphm inst
1b750 72 75 63 74 69 6f 6e 20 69 73 20 63 6f 64 65 64  ruction is coded
1b760 20 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a 20   because not.** 
1b770 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74 69  enough informati
1b780 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 63 6f 6d  on about the com
1b790 70 6f 75 6e 64 20 71 75 65 72 79 20 69 73 20 6b  pound query is k
1b7a0 6e 6f 77 6e 20 61 74 20 74 68 61 74 20 70 6f 69  nown at that poi
1b7b0 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49 6e  nt..** The KeyIn
1b7c0 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 54  fo for addrOpenT
1b7d0 72 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20 63  ran[0] and [1] c
1b7e0 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e  ontains collatin
1b7f0 67 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20 66  g sequences.** f
1b800 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  or the result se
1b810 74 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20  t.  The KeyInfo 
1b820 66 6f 72 20 61 64 64 72 4f 70 65 6e 45 70 68 6d  for addrOpenEphm
1b830 5b 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c  [2] contains col
1b840 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65 6e  lating.** sequen
1b850 63 65 73 20 66 6f 72 20 74 68 65 20 4f 52 44 45  ces for the ORDE
1b860 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a  R BY clause..*/.
1b870 73 74 72 75 63 74 20 53 65 6c 65 63 74 20 7b 0a  struct Select {.
1b880 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69    ExprList *pELi
1b890 73 74 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  st;      /* The 
1b8a0 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20 72 65  fields of the re
1b8b0 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70 3b  sult */.  u8 op;
1b8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b8d0 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55   /* One of: TK_U
1b8e0 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49  NION TK_ALL TK_I
1b8f0 4e 54 45 52 53 45 43 54 20 54 4b 5f 45 58 43 45  NTERSECT TK_EXCE
1b900 50 54 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 6e  PT */.  LogEst n
1b910 53 65 6c 65 63 74 52 6f 77 3b 20 20 20 20 20 2f  SelectRow;     /
1b920 2a 20 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62  * Estimated numb
1b930 65 72 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77  er of result row
1b940 73 20 2a 2f 0a 20 20 75 33 32 20 73 65 6c 46 6c  s */.  u32 selFl
1b950 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ags;          /*
1b960 20 56 61 72 69 6f 75 73 20 53 46 5f 2a 20 76 61   Various SF_* va
1b970 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4c  lues */.  int iL
1b980 69 6d 69 74 2c 20 69 4f 66 66 73 65 74 3b 20 20  imit, iOffset;  
1b990 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73   /* Memory regis
1b9a0 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 4c 49 4d  ters holding LIM
1b9b0 49 54 20 26 20 4f 46 46 53 45 54 20 63 6f 75 6e  IT & OFFSET coun
1b9c0 74 65 72 73 20 2a 2f 0a 23 69 66 20 53 45 4c 45  ters */.#if SELE
1b9d0 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a  CTTRACE_ENABLED.
1b9e0 20 20 63 68 61 72 20 7a 53 65 6c 4e 61 6d 65 5b    char zSelName[
1b9f0 31 32 5d 3b 20 20 20 20 20 2f 2a 20 53 79 6d 62  12];     /* Symb
1ba00 6f 6c 69 63 20 6e 61 6d 65 20 6f 66 20 74 68 69  olic name of thi
1ba10 73 20 53 45 4c 45 43 54 20 75 73 65 20 66 6f 72  s SELECT use for
1ba20 20 64 65 62 75 67 67 69 6e 67 20 2a 2f 0a 23 65   debugging */.#e
1ba30 6e 64 69 66 0a 20 20 69 6e 74 20 61 64 64 72 4f  ndif.  int addrO
1ba40 70 65 6e 45 70 68 6d 5b 32 5d 3b 20 20 20 2f 2a  penEphm[2];   /*
1ba50 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 20 6f 70   OP_OpenEphem op
1ba60 63 6f 64 65 73 20 72 65 6c 61 74 65 64 20 74 6f  codes related to
1ba70 20 74 68 69 73 20 73 65 6c 65 63 74 20 2a 2f 0a   this select */.
1ba80 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 3b    SrcList *pSrc;
1ba90 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1baa0 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20  FROM clause */. 
1bab0 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20   Expr *pWhere;  
1bac0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57          /* The W
1bad0 48 45 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a 20  HERE clause */. 
1bae0 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75   ExprList *pGrou
1baf0 70 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 47  pBy;    /* The G
1bb00 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 2a  ROUP BY clause *
1bb10 2f 0a 20 20 45 78 70 72 20 2a 70 48 61 76 69 6e  /.  Expr *pHavin
1bb20 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  g;         /* Th
1bb30 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20  e HAVING clause 
1bb40 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
1bb50 4f 72 64 65 72 42 79 3b 20 20 20 20 2f 2a 20 54  OrderBy;    /* T
1bb60 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
1bb70 73 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a  se */.  Select *
1bb80 70 50 72 69 6f 72 3b 20 20 20 20 20 20 20 20 2f  pPrior;        /
1bb90 2a 20 50 72 69 6f 72 20 73 65 6c 65 63 74 20 69  * Prior select i
1bba0 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73 65 6c  n a compound sel
1bbb0 65 63 74 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f  ect statement */
1bbc0 0a 20 20 53 65 6c 65 63 74 20 2a 70 4e 65 78 74  .  Select *pNext
1bbd0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78  ;         /* Nex
1bbe0 74 20 73 65 6c 65 63 74 20 74 6f 20 74 68 65 20  t select to the 
1bbf0 6c 65 66 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75  left in a compou
1bc00 6e 64 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4c  nd */.  Expr *pL
1bc10 69 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20 2f  imit;          /
1bc20 2a 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69  * LIMIT expressi
1bc30 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e  on. NULL means n
1bc40 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20 45 78  ot used. */.  Ex
1bc50 70 72 20 2a 70 4f 66 66 73 65 74 3b 20 20 20 20  pr *pOffset;    
1bc60 20 20 20 20 20 2f 2a 20 4f 46 46 53 45 54 20 65       /* OFFSET e
1bc70 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20  xpression. NULL 
1bc80 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20  means not used. 
1bc90 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68  */.  With *pWith
1bca0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57  ;           /* W
1bcb0 49 54 48 20 63 6c 61 75 73 65 20 61 74 74 61 63  ITH clause attac
1bcc0 68 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65  hed to this sele
1bcd0 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e 20 2a 2f 0a  ct. Or NULL. */.
1bce0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  };../*.** Allowe
1bcf0 64 20 76 61 6c 75 65 73 20 66 6f 72 20 53 65 6c  d values for Sel
1bd00 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e 20 20 54  ect.selFlags.  T
1bd10 68 65 20 22 53 46 22 20 70 72 65 66 69 78 20 73  he "SF" prefix s
1bd20 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 53 65  tands for.** "Se
1bd30 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a 2a 0a 2a  lect Flag"..**.*
1bd40 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69  * Value constrai
1bd50 6e 74 73 20 28 61 6c 6c 20 63 68 65 63 6b 65 64  nts (all checked
1bd60 20 76 69 61 20 61 73 73 65 72 74 28 29 29 0a 2a   via assert()).*
1bd70 2a 20 20 20 20 20 53 46 5f 48 61 73 41 67 67 20  *     SF_HasAgg 
1bd80 20 20 20 20 3d 3d 20 4e 43 5f 48 61 73 41 67 67      == NC_HasAgg
1bd90 0a 2a 2a 20 20 20 20 20 53 46 5f 4d 69 6e 4d 61  .**     SF_MinMa
1bda0 78 41 67 67 20 20 3d 3d 20 4e 43 5f 4d 69 6e 4d  xAgg  == NC_MinM
1bdb0 61 78 41 67 67 20 20 20 20 20 3d 3d 20 53 51 4c  axAgg     == SQL
1bdc0 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 0a  ITE_FUNC_MINMAX.
1bdd0 2a 2a 20 20 20 20 20 53 46 5f 46 69 78 65 64 4c  **     SF_FixedL
1bde0 69 6d 69 74 20 3d 3d 20 57 48 45 52 45 5f 55 53  imit == WHERE_US
1bdf0 45 5f 4c 49 4d 49 54 0a 2a 2f 0a 23 64 65 66 69  E_LIMIT.*/.#defi
1be00 6e 65 20 53 46 5f 44 69 73 74 69 6e 63 74 20 20  ne SF_Distinct  
1be10 20 20 20 20 20 30 78 30 30 30 30 31 20 20 2f 2a       0x00001  /*
1be20 20 4f 75 74 70 75 74 20 73 68 6f 75 6c 64 20 62   Output should b
1be30 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 23 64  e DISTINCT */.#d
1be40 65 66 69 6e 65 20 53 46 5f 41 6c 6c 20 20 20 20  efine SF_All    
1be50 20 20 20 20 20 20 20 20 30 78 30 30 30 30 32 20          0x00002 
1be60 20 2f 2a 20 49 6e 63 6c 75 64 65 73 20 74 68 65   /* Includes the
1be70 20 41 4c 4c 20 6b 65 79 77 6f 72 64 20 2a 2f 0a   ALL keyword */.
1be80 23 64 65 66 69 6e 65 20 53 46 5f 52 65 73 6f 6c  #define SF_Resol
1be90 76 65 64 20 20 20 20 20 20 20 30 78 30 30 30 30  ved       0x0000
1bea0 34 20 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72  4  /* Identifier
1beb0 73 20 68 61 76 65 20 62 65 65 6e 20 72 65 73 6f  s have been reso
1bec0 6c 76 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  lved */.#define 
1bed0 53 46 5f 41 67 67 72 65 67 61 74 65 20 20 20 20  SF_Aggregate    
1bee0 20 20 30 78 30 30 30 30 38 20 20 2f 2a 20 43 6f    0x00008  /* Co
1bef0 6e 74 61 69 6e 73 20 61 67 67 20 66 75 6e 63 74  ntains agg funct
1bf00 69 6f 6e 73 20 6f 72 20 61 20 47 52 4f 55 50 20  ions or a GROUP 
1bf10 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  BY */.#define SF
1bf20 5f 48 61 73 41 67 67 20 20 20 20 20 20 20 20 20  _HasAgg         
1bf30 30 78 30 30 30 31 30 20 20 2f 2a 20 43 6f 6e 74  0x00010  /* Cont
1bf40 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20 66  ains aggregate f
1bf50 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66  unctions */.#def
1bf60 69 6e 65 20 53 46 5f 55 73 65 73 45 70 68 65 6d  ine SF_UsesEphem
1bf70 65 72 61 6c 20 20 30 78 30 30 30 32 30 20 20 2f  eral  0x00020  /
1bf80 2a 20 55 73 65 73 20 74 68 65 20 4f 70 65 6e 45  * Uses the OpenE
1bf90 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 20  phemeral opcode 
1bfa0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 45 78  */.#define SF_Ex
1bfb0 70 61 6e 64 65 64 20 20 20 20 20 20 20 30 78 30  panded       0x0
1bfc0 30 30 34 30 20 20 2f 2a 20 73 71 6c 69 74 65 33  0040  /* sqlite3
1bfd0 53 65 6c 65 63 74 45 78 70 61 6e 64 28 29 20 63  SelectExpand() c
1bfe0 61 6c 6c 65 64 20 6f 6e 20 74 68 69 73 20 2a 2f  alled on this */
1bff0 0a 23 64 65 66 69 6e 65 20 53 46 5f 48 61 73 54  .#define SF_HasT
1c000 79 70 65 49 6e 66 6f 20 20 20 20 30 78 30 30 30  ypeInfo    0x000
1c010 38 30 20 20 2f 2a 20 46 52 4f 4d 20 73 75 62 71  80  /* FROM subq
1c020 75 65 72 69 65 73 20 68 61 76 65 20 54 61 62 6c  ueries have Tabl
1c030 65 20 6d 65 74 61 64 61 74 61 20 2a 2f 0a 23 64  e metadata */.#d
1c040 65 66 69 6e 65 20 53 46 5f 43 6f 6d 70 6f 75 6e  efine SF_Compoun
1c050 64 20 20 20 20 20 20 20 30 78 30 30 31 30 30 20  d       0x00100 
1c060 20 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 63 6f   /* Part of a co
1c070 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 2a 2f 0a  mpound query */.
1c080 23 64 65 66 69 6e 65 20 53 46 5f 56 61 6c 75 65  #define SF_Value
1c090 73 20 20 20 20 20 20 20 20 20 30 78 30 30 32 30  s         0x0020
1c0a0 30 20 20 2f 2a 20 53 79 6e 74 68 65 73 69 7a 65  0  /* Synthesize
1c0b0 64 20 66 72 6f 6d 20 56 41 4c 55 45 53 20 63 6c  d from VALUES cl
1c0c0 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ause */.#define 
1c0d0 53 46 5f 4d 75 6c 74 69 56 61 6c 75 65 20 20 20  SF_MultiValue   
1c0e0 20 20 30 78 30 30 34 30 30 20 20 2f 2a 20 53 69    0x00400  /* Si
1c0f0 6e 67 6c 65 20 56 41 4c 55 45 53 20 74 65 72 6d  ngle VALUES term
1c100 20 77 69 74 68 20 6d 75 6c 74 69 70 6c 65 20 72   with multiple r
1c110 6f 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ows */.#define S
1c120 46 5f 4e 65 73 74 65 64 46 72 6f 6d 20 20 20 20  F_NestedFrom    
1c130 20 30 78 30 30 38 30 30 20 20 2f 2a 20 50 61 72   0x00800  /* Par
1c140 74 20 6f 66 20 61 20 70 61 72 65 6e 74 68 65 73  t of a parenthes
1c150 69 7a 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65  ized FROM clause
1c160 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d   */.#define SF_M
1c170 69 6e 4d 61 78 41 67 67 20 20 20 20 20 20 30 78  inMaxAgg      0x
1c180 30 31 30 30 30 20 20 2f 2a 20 41 67 67 72 65 67  01000  /* Aggreg
1c190 61 74 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 6d  ate containing m
1c1a0 69 6e 28 29 20 6f 72 20 6d 61 78 28 29 20 2a 2f  in() or max() */
1c1b0 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65 63 75  .#define SF_Recu
1c1c0 72 73 69 76 65 20 20 20 20 20 20 30 78 30 32 30  rsive      0x020
1c1d0 30 30 20 20 2f 2a 20 54 68 65 20 72 65 63 75 72  00  /* The recur
1c1e0 73 69 76 65 20 70 61 72 74 20 6f 66 20 61 20 72  sive part of a r
1c1f0 65 63 75 72 73 69 76 65 20 43 54 45 20 2a 2f 0a  ecursive CTE */.
1c200 23 64 65 66 69 6e 65 20 53 46 5f 46 69 78 65 64  #define SF_Fixed
1c210 4c 69 6d 69 74 20 20 20 20 20 30 78 30 34 30 30  Limit     0x0400
1c220 30 20 20 2f 2a 20 6e 53 65 6c 65 63 74 52 6f 77  0  /* nSelectRow
1c230 20 73 65 74 20 62 79 20 61 20 63 6f 6e 73 74 61   set by a consta
1c240 6e 74 20 4c 49 4d 49 54 20 2a 2f 0a 23 64 65 66  nt LIMIT */.#def
1c250 69 6e 65 20 53 46 5f 4d 61 79 62 65 43 6f 6e 76  ine SF_MaybeConv
1c260 65 72 74 20 20 20 30 78 30 38 30 30 30 20 20 2f  ert   0x08000  /
1c270 2a 20 4e 65 65 64 20 63 6f 6e 76 65 72 74 43 6f  * Need convertCo
1c280 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75  mpoundSelectToSu
1c290 62 71 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66  bquery() */.#def
1c2a0 69 6e 65 20 53 46 5f 43 6f 6e 76 65 72 74 65 64  ine SF_Converted
1c2b0 20 20 20 20 20 20 30 78 31 30 30 30 30 20 20 2f        0x10000  /
1c2c0 2a 20 42 79 20 63 6f 6e 76 65 72 74 43 6f 6d 70  * By convertComp
1c2d0 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71  oundSelectToSubq
1c2e0 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e  uery() */.#defin
1c2f0 65 20 53 46 5f 49 6e 63 6c 75 64 65 48 69 64 64  e SF_IncludeHidd
1c300 65 6e 20 20 30 78 32 30 30 30 30 20 20 2f 2a 20  en  0x20000  /* 
1c310 49 6e 63 6c 75 64 65 20 68 69 64 64 65 6e 20 63  Include hidden c
1c320 6f 6c 75 6d 6e 73 20 69 6e 20 6f 75 74 70 75 74  olumns in output
1c330 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20   */.../*.** The 
1c340 72 65 73 75 6c 74 73 20 6f 66 20 61 20 53 45 4c  results of a SEL
1c350 45 43 54 20 63 61 6e 20 62 65 20 64 69 73 74 72  ECT can be distr
1c360 69 62 75 74 65 64 20 69 6e 20 73 65 76 65 72 61  ibuted in severa
1c370 6c 20 77 61 79 73 2c 20 61 73 20 64 65 66 69 6e  l ways, as defin
1c380 65 64 0a 2a 2a 20 62 79 20 6f 6e 65 20 6f 66 20  ed.** by one of 
1c390 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  the following ma
1c3a0 63 72 6f 73 2e 20 20 54 68 65 20 22 53 52 54 22  cros.  The "SRT"
1c3b0 20 70 72 65 66 69 78 20 6d 65 61 6e 73 20 22 53   prefix means "S
1c3c0 45 4c 45 43 54 20 52 65 73 75 6c 74 0a 2a 2a 20  ELECT Result.** 
1c3d0 54 79 70 65 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  Type"..**.**    
1c3e0 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20   SRT_Union      
1c3f0 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61   Store results a
1c400 73 20 61 20 6b 65 79 20 69 6e 20 61 20 74 65 6d  s a key in a tem
1c410 70 6f 72 61 72 79 20 69 6e 64 65 78 0a 2a 2a 20  porary index.** 
1c420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c430 20 20 20 20 69 64 65 6e 74 69 66 69 65 64 20 62      identified b
1c440 79 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  y pDest->iSDParm
1c450 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1c460 45 78 63 65 70 74 20 20 20 20 20 20 52 65 6d 6f  Except      Remo
1c470 76 65 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20  ve results from 
1c480 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 69 6e  the temporary in
1c490 64 65 78 20 70 44 65 73 74 2d 3e 69 53 44 50 61  dex pDest->iSDPa
1c4a0 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  rm..**.**     SR
1c4b0 54 5f 45 78 69 73 74 73 20 20 20 20 20 20 53 74  T_Exists      St
1c4c0 6f 72 65 20 61 20 31 20 69 6e 20 6d 65 6d 6f 72  ore a 1 in memor
1c4d0 79 20 63 65 6c 6c 20 70 44 65 73 74 2d 3e 69 53  y cell pDest->iS
1c4e0 44 50 61 72 6d 20 69 66 20 74 68 65 20 72 65 73  DParm if the res
1c4f0 75 6c 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ult.**          
1c500 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 69             set i
1c510 73 20 6e 6f 74 20 65 6d 70 74 79 2e 0a 2a 2a 0a  s not empty..**.
1c520 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 63 61  **     SRT_Disca
1c530 72 64 20 20 20 20 20 54 68 72 6f 77 20 74 68 65  rd     Throw the
1c540 20 72 65 73 75 6c 74 73 20 61 77 61 79 2e 20 20   results away.  
1c550 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20  This is used by 
1c560 53 45 4c 45 43 54 0a 2a 2a 20 20 20 20 20 20 20  SELECT.**       
1c570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
1c580 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20  atements within 
1c590 74 72 69 67 67 65 72 73 20 77 68 6f 73 65 20 6f  triggers whose o
1c5a0 6e 6c 79 20 70 75 72 70 6f 73 65 20 69 73 0a 2a  nly purpose is.*
1c5b0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1c5c0 20 20 20 20 20 20 74 68 65 20 73 69 64 65 2d 65        the side-e
1c5d0 66 66 65 63 74 73 20 6f 66 20 66 75 6e 63 74 69  ffects of functi
1c5e0 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f  ons..**.** All o
1c5f0 66 20 74 68 65 20 61 62 6f 76 65 20 61 72 65 20  f the above are 
1c600 66 72 65 65 20 74 6f 20 69 67 6e 6f 72 65 20 74  free to ignore t
1c610 68 65 69 72 20 4f 52 44 45 52 20 42 59 20 63 6c  heir ORDER BY cl
1c620 61 75 73 65 2e 20 54 68 6f 73 65 20 74 68 61 74  ause. Those that
1c630 0a 2a 2a 20 66 6f 6c 6c 6f 77 20 6d 75 73 74 20  .** follow must 
1c640 68 6f 6e 6f 72 20 74 68 65 20 4f 52 44 45 52 20  honor the ORDER 
1c650 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a  BY clause..**.**
1c660 20 20 20 20 20 53 52 54 5f 4f 75 74 70 75 74 20       SRT_Output 
1c670 20 20 20 20 20 47 65 6e 65 72 61 74 65 20 61 20       Generate a 
1c680 72 6f 77 20 6f 66 20 6f 75 74 70 75 74 20 28 75  row of output (u
1c690 73 69 6e 67 20 74 68 65 20 4f 50 5f 52 65 73 75  sing the OP_Resu
1c6a0 6c 74 52 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20  ltRow.**        
1c6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 70 63               opc
1c6c0 6f 64 65 29 20 66 6f 72 20 65 61 63 68 20 72 6f  ode) for each ro
1c6d0 77 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20  w in the result 
1c6e0 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  set..**.**     S
1c6f0 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 4f  RT_Mem         O
1c700 6e 6c 79 20 76 61 6c 69 64 20 69 66 20 74 68 65  nly valid if the
1c710 20 72 65 73 75 6c 74 20 69 73 20 61 20 73 69 6e   result is a sin
1c720 67 6c 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 20  gle column..**  
1c730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c740 20 20 20 53 74 6f 72 65 20 74 68 65 20 66 69 72     Store the fir
1c750 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65  st column of the
1c760 20 66 69 72 73 74 20 72 65 73 75 6c 74 20 72 6f   first result ro
1c770 77 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  w.**            
1c780 20 20 20 20 20 20 20 20 20 69 6e 20 72 65 67 69           in regi
1c790 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53 44 50  ster pDest->iSDP
1c7a0 61 72 6d 20 74 68 65 6e 20 61 62 61 6e 64 6f 6e  arm then abandon
1c7b0 20 74 68 65 20 72 65 73 74 0a 2a 2a 20 20 20 20   the rest.**    
1c7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c7d0 20 6f 66 20 74 68 65 20 71 75 65 72 79 2e 20 20   of the query.  
1c7e0 54 68 69 73 20 64 65 73 74 69 6e 61 74 69 6f 6e  This destination
1c7f0 20 69 6d 70 6c 69 65 73 20 22 4c 49 4d 49 54 20   implies "LIMIT 
1c800 31 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  1"..**.**     SR
1c810 54 5f 53 65 74 20 20 20 20 20 20 20 20 20 54 68  T_Set         Th
1c820 65 20 72 65 73 75 6c 74 20 6d 75 73 74 20 62 65  e result must be
1c830 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e   a single column
1c840 2e 20 20 53 74 6f 72 65 20 65 61 63 68 0a 2a 2a  .  Store each.**
1c850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c860 20 20 20 20 20 72 6f 77 20 6f 66 20 72 65 73 75       row of resu
1c870 6c 74 20 61 73 20 74 68 65 20 6b 65 79 20 69 6e  lt as the key in
1c880 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53   table pDest->iS
1c890 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20  DParm..**       
1c8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 70                Ap
1c8b0 70 6c 79 20 74 68 65 20 61 66 66 69 6e 69 74 79  ply the affinity
1c8c0 20 70 44 65 73 74 2d 3e 61 66 66 53 64 73 74 20   pDest->affSdst 
1c8d0 62 65 66 6f 72 65 20 73 74 6f 72 69 6e 67 0a 2a  before storing.*
1c8e0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1c8f0 20 20 20 20 20 20 72 65 73 75 6c 74 73 2e 20 20        results.  
1c900 55 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e  Used to implemen
1c910 74 20 22 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e  t "IN (SELECT ..
1c920 2e 29 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  .)"..**.**     S
1c930 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20 43  RT_EphemTab    C
1c940 72 65 61 74 65 20 61 6e 20 74 65 6d 70 6f 72 61  reate an tempora
1c950 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e  ry table pDest->
1c960 69 53 44 50 61 72 6d 20 61 6e 64 20 73 74 6f 72  iSDParm and stor
1c970 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
1c980 20 20 20 20 20 20 20 20 20 74 68 65 20 72 65 73           the res
1c990 75 6c 74 20 74 68 65 72 65 2e 20 54 68 65 20 63  ult there. The c
1c9a0 75 72 73 6f 72 20 69 73 20 6c 65 66 74 20 6f 70  ursor is left op
1c9b0 65 6e 20 61 66 74 65 72 0a 2a 2a 20 20 20 20 20  en after.**     
1c9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c9d0 72 65 74 75 72 6e 69 6e 67 2e 20 20 54 68 69 73  returning.  This
1c9e0 20 69 73 20 6c 69 6b 65 20 53 52 54 5f 54 61 62   is like SRT_Tab
1c9f0 6c 65 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a  le except that.*
1ca00 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1ca10 20 20 20 20 20 20 74 68 69 73 20 64 65 73 74 69        this desti
1ca20 6e 61 74 69 6f 6e 20 75 73 65 73 20 4f 50 5f 4f  nation uses OP_O
1ca30 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 74 6f 20  penEphemeral to 
1ca40 63 72 65 61 74 65 0a 2a 2a 20 20 20 20 20 20 20  create.**       
1ca50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1ca60 65 20 74 61 62 6c 65 20 66 69 72 73 74 2e 0a 2a  e table first..*
1ca70 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 43 6f 72  *.**     SRT_Cor
1ca80 6f 75 74 69 6e 65 20 20 20 47 65 6e 65 72 61 74  outine   Generat
1ca90 65 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 74  e a co-routine t
1caa0 68 61 74 20 72 65 74 75 72 6e 73 20 61 20 6e 65  hat returns a ne
1cab0 77 20 72 6f 77 20 6f 66 0a 2a 2a 20 20 20 20 20  w row of.**     
1cac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cad0 72 65 73 75 6c 74 73 20 65 61 63 68 20 74 69 6d  results each tim
1cae0 65 20 69 74 20 69 73 20 69 6e 76 6f 6b 65 64 2e  e it is invoked.
1caf0 20 20 54 68 65 20 65 6e 74 72 79 20 70 6f 69 6e    The entry poin
1cb00 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  t.**            
1cb10 20 20 20 20 20 20 20 20 20 6f 66 20 74 68 65 20           of the 
1cb20 63 6f 2d 72 6f 75 74 69 6e 65 20 69 73 20 73 74  co-routine is st
1cb30 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
1cb40 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 0a   pDest->iSDParm.
1cb50 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1cb60 20 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 72         and the r
1cb70 65 73 75 6c 74 20 72 6f 77 20 69 73 20 73 74 6f  esult row is sto
1cb80 72 65 64 20 69 6e 20 70 44 65 73 74 2d 3e 6e 44  red in pDest->nD
1cb90 65 73 74 20 72 65 67 69 73 74 65 72 73 0a 2a 2a  est registers.**
1cba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cbb0 20 20 20 20 20 73 74 61 72 74 69 6e 67 20 77 69       starting wi
1cbc0 74 68 20 70 44 65 73 74 2d 3e 69 53 64 73 74 2e  th pDest->iSdst.
1cbd0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 54  .**.**     SRT_T
1cbe0 61 62 6c 65 20 20 20 20 20 20 20 53 74 6f 72 65  able       Store
1cbf0 20 72 65 73 75 6c 74 73 20 69 6e 20 74 65 6d 70   results in temp
1cc00 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73  orary table pDes
1cc10 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20  t->iSDParm..**  
1cc20 20 20 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20     SRT_Fifo     
1cc30 20 20 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20     This is like 
1cc40 53 52 54 5f 45 70 68 65 6d 54 61 62 20 65 78 63  SRT_EphemTab exc
1cc50 65 70 74 20 74 68 61 74 20 74 68 65 20 74 61 62  ept that the tab
1cc60 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  le.**           
1cc70 20 20 20 20 20 20 20 20 20 20 69 73 20 61 73 73            is ass
1cc80 75 6d 65 64 20 74 6f 20 61 6c 72 65 61 64 79 20  umed to already 
1cc90 62 65 20 6f 70 65 6e 2e 20 20 53 52 54 5f 46 69  be open.  SRT_Fi
1cca0 66 6f 20 68 61 73 0a 2a 2a 20 20 20 20 20 20 20  fo has.**       
1ccb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1ccc0 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 72 6f  e additional pro
1ccd0 70 65 72 74 79 20 6f 66 20 62 65 69 6e 67 20 61  perty of being a
1cce0 62 6c 65 20 74 6f 20 69 67 6e 6f 72 65 0a 2a 2a  ble to ignore.**
1ccf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd00 20 20 20 20 20 74 68 65 20 4f 52 44 45 52 20 42       the ORDER B
1cd10 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20  Y clause..**.** 
1cd20 20 20 20 20 53 52 54 5f 44 69 73 74 46 69 66 6f      SRT_DistFifo
1cd30 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74      Store result
1cd40 73 20 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79  s in a temporary
1cd50 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53   table pDest->iS
1cd60 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20  DParm..**       
1cd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42 75                Bu
1cd80 74 20 61 6c 73 6f 20 75 73 65 20 74 65 6d 70 6f  t also use tempo
1cd90 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74  rary table pDest
1cda0 2d 3e 69 53 44 50 61 72 6d 2b 31 20 61 73 0a 2a  ->iSDParm+1 as.*
1cdb0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1cdc0 20 20 20 20 20 20 61 20 72 65 63 6f 72 64 20 6f        a record o
1cdd0 66 20 61 6c 6c 20 70 72 69 6f 72 20 72 65 73 75  f all prior resu
1cde0 6c 74 73 20 61 6e 64 20 69 67 6e 6f 72 65 20 61  lts and ignore a
1cdf0 6e 79 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20  ny duplicate.** 
1ce00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce10 20 20 20 20 72 6f 77 73 2e 20 20 4e 61 6d 65 20      rows.  Name 
1ce20 6d 65 61 6e 73 3a 20 20 22 44 69 73 74 69 6e 63  means:  "Distinc
1ce30 74 20 46 69 66 6f 22 2e 0a 2a 2a 0a 2a 2a 20 20  t Fifo"..**.**  
1ce40 20 20 20 53 52 54 5f 51 75 65 75 65 20 20 20 20     SRT_Queue    
1ce50 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73     Store results
1ce60 20 69 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65   in priority que
1ce70 75 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  ue pDest->iSDPar
1ce80 6d 20 28 72 65 61 6c 6c 79 0a 2a 2a 20 20 20 20  m (really.**    
1ce90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cea0 20 61 6e 20 69 6e 64 65 78 29 2e 20 20 41 70 70   an index).  App
1ceb0 65 6e 64 20 61 20 73 65 71 75 65 6e 63 65 20 6e  end a sequence n
1cec0 75 6d 62 65 72 20 73 6f 20 74 68 61 74 20 61 6c  umber so that al
1ced0 6c 20 65 6e 74 72 69 65 73 0a 2a 2a 20 20 20 20  l entries.**    
1cee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cef0 20 61 72 65 20 64 69 73 74 69 6e 63 74 2e 0a 2a   are distinct..*
1cf00 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73  *.**     SRT_Dis
1cf10 74 51 75 65 75 65 20 20 20 53 74 6f 72 65 20 72  tQueue   Store r
1cf20 65 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69  esults in priori
1cf30 74 79 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e  ty queue pDest->
1cf40 69 53 44 50 61 72 6d 20 6f 6e 6c 79 20 69 66 0a  iSDParm only if.
1cf50 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1cf60 20 20 20 20 20 20 20 74 68 65 20 73 61 6d 65 20         the same 
1cf70 72 65 63 6f 72 64 20 68 61 73 20 6e 65 76 65 72  record has never
1cf80 20 62 65 65 6e 20 73 74 6f 72 65 64 20 62 65 66   been stored bef
1cf90 6f 72 65 2e 20 20 54 68 65 0a 2a 2a 20 20 20 20  ore.  The.**    
1cfa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cfb0 20 69 6e 64 65 78 20 61 74 20 70 44 65 73 74 2d   index at pDest-
1cfc0 3e 69 53 44 50 61 72 6d 2b 31 20 68 6f 6c 64 20  >iSDParm+1 hold 
1cfd0 61 6c 6c 20 70 72 69 6f 72 20 73 74 6f 72 65 73  all prior stores
1cfe0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  ..*/.#define SRT
1cff0 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 20 31 20  _Union        1 
1d000 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
1d010 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69   as keys in an i
1d020 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
1d030 53 52 54 5f 45 78 63 65 70 74 20 20 20 20 20 20  SRT_Except      
1d040 20 32 20 20 2f 2a 20 52 65 6d 6f 76 65 20 72 65   2  /* Remove re
1d050 73 75 6c 74 20 66 72 6f 6d 20 61 20 55 4e 49 4f  sult from a UNIO
1d060 4e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  N index */.#defi
1d070 6e 65 20 53 52 54 5f 45 78 69 73 74 73 20 20 20  ne SRT_Exists   
1d080 20 20 20 20 33 20 20 2f 2a 20 53 74 6f 72 65 20      3  /* Store 
1d090 31 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20  1 if the result 
1d0a0 69 73 20 6e 6f 74 20 65 6d 70 74 79 20 2a 2f 0a  is not empty */.
1d0b0 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 63  #define SRT_Disc
1d0c0 61 72 64 20 20 20 20 20 20 34 20 20 2f 2a 20 44  ard      4  /* D
1d0d0 6f 20 6e 6f 74 20 73 61 76 65 20 74 68 65 20 72  o not save the r
1d0e0 65 73 75 6c 74 73 20 61 6e 79 77 68 65 72 65 20  esults anywhere 
1d0f0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 46  */.#define SRT_F
1d100 69 66 6f 20 20 20 20 20 20 20 20 20 35 20 20 2f  ifo         5  /
1d110 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61  * Store result a
1d120 73 20 64 61 74 61 20 77 69 74 68 20 61 6e 20 61  s data with an a
1d130 75 74 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a  utomatic rowid *
1d140 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69  /.#define SRT_Di
1d150 73 74 46 69 66 6f 20 20 20 20 20 36 20 20 2f 2a  stFifo     6  /*
1d160 20 4c 69 6b 65 20 53 52 54 5f 46 69 66 6f 2c 20   Like SRT_Fifo, 
1d170 62 75 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c  but unique resul
1d180 74 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69  ts only */.#defi
1d190 6e 65 20 53 52 54 5f 51 75 65 75 65 20 20 20 20  ne SRT_Queue    
1d1a0 20 20 20 20 37 20 20 2f 2a 20 53 74 6f 72 65 20      7  /* Store 
1d1b0 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 71 75 65  result in an que
1d1c0 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ue */.#define SR
1d1d0 54 5f 44 69 73 74 51 75 65 75 65 20 20 20 20 38  T_DistQueue    8
1d1e0 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 51 75    /* Like SRT_Qu
1d1f0 65 75 65 2c 20 62 75 74 20 75 6e 69 71 75 65 20  eue, but unique 
1d200 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a  results only */.
1d210 0a 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59  ./* The ORDER BY
1d220 20 63 6c 61 75 73 65 20 69 73 20 69 67 6e 6f 72   clause is ignor
1d230 65 64 20 66 6f 72 20 61 6c 6c 20 6f 66 20 74 68  ed for all of th
1d240 65 20 61 62 6f 76 65 20 2a 2f 0a 23 64 65 66 69  e above */.#defi
1d250 6e 65 20 49 67 6e 6f 72 61 62 6c 65 4f 72 64 65  ne IgnorableOrde
1d260 72 62 79 28 58 29 20 28 28 58 2d 3e 65 44 65 73  rby(X) ((X->eDes
1d270 74 29 3c 3d 53 52 54 5f 44 69 73 74 51 75 65 75  t)<=SRT_DistQueu
1d280 65 29 0a 0a 23 64 65 66 69 6e 65 20 53 52 54 5f  e)..#define SRT_
1d290 4f 75 74 70 75 74 20 20 20 20 20 20 20 39 20 20  Output       9  
1d2a0 2f 2a 20 4f 75 74 70 75 74 20 65 61 63 68 20 72  /* Output each r
1d2b0 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a  ow of result */.
1d2c0 23 64 65 66 69 6e 65 20 53 52 54 5f 4d 65 6d 20  #define SRT_Mem 
1d2d0 20 20 20 20 20 20 20 20 31 30 20 20 2f 2a 20 53          10  /* S
1d2e0 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61  tore result in a
1d2f0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a   memory cell */.
1d300 23 64 65 66 69 6e 65 20 53 52 54 5f 53 65 74 20  #define SRT_Set 
1d310 20 20 20 20 20 20 20 20 31 31 20 20 2f 2a 20 53          11  /* S
1d320 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73 20  tore results as 
1d330 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78  keys in an index
1d340 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1d350 45 70 68 65 6d 54 61 62 20 20 20 20 31 32 20 20  EphemTab    12  
1d360 2f 2a 20 43 72 65 61 74 65 20 74 72 61 6e 73 69  /* Create transi
1d370 65 6e 74 20 74 61 62 20 61 6e 64 20 73 74 6f 72  ent tab and stor
1d380 65 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65  e like SRT_Table
1d390 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1d3a0 43 6f 72 6f 75 74 69 6e 65 20 20 20 31 33 20 20  Coroutine   13  
1d3b0 2f 2a 20 47 65 6e 65 72 61 74 65 20 61 20 73 69  /* Generate a si
1d3c0 6e 67 6c 65 20 72 6f 77 20 6f 66 20 72 65 73 75  ngle row of resu
1d3d0 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  lt */.#define SR
1d3e0 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20 31 34  T_Table       14
1d3f0 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
1d400 74 20 61 73 20 64 61 74 61 20 77 69 74 68 20 61  t as data with a
1d410 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69  n automatic rowi
1d420 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  d */../*.** An i
1d430 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
1d440 6f 62 6a 65 63 74 20 64 65 73 63 72 69 62 65 73  object describes
1d450 20 77 68 65 72 65 20 74 6f 20 70 75 74 20 6f 66   where to put of
1d460 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 0a   the results of.
1d470 2a 2a 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  ** a SELECT stat
1d480 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74  ement..*/.struct
1d490 20 53 65 6c 65 63 74 44 65 73 74 20 7b 0a 20 20   SelectDest {.  
1d4a0 75 38 20 65 44 65 73 74 3b 20 20 20 20 20 20 20  u8 eDest;       
1d4b0 20 20 20 20 20 2f 2a 20 48 6f 77 20 74 6f 20 64       /* How to d
1d4c0 69 73 70 6f 73 65 20 6f 66 20 74 68 65 20 72 65  ispose of the re
1d4d0 73 75 6c 74 73 2e 20 20 4f 6e 20 6f 66 20 53 52  sults.  On of SR
1d4e0 54 5f 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a 20 20  T_* above. */.  
1d4f0 63 68 61 72 20 2a 7a 41 66 66 53 64 73 74 3b 20  char *zAffSdst; 
1d500 20 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79       /* Affinity
1d510 20 75 73 65 64 20 77 68 65 6e 20 65 44 65 73 74   used when eDest
1d520 3d 3d 53 52 54 5f 53 65 74 20 2a 2f 0a 20 20 69  ==SRT_Set */.  i
1d530 6e 74 20 69 53 44 50 61 72 6d 3b 20 20 20 20 20  nt iSDParm;     
1d540 20 20 20 20 2f 2a 20 41 20 70 61 72 61 6d 65 74      /* A paramet
1d550 65 72 20 75 73 65 64 20 62 79 20 74 68 65 20 65  er used by the e
1d560 44 65 73 74 20 64 69 73 70 6f 73 61 6c 20 6d 65  Dest disposal me
1d570 74 68 6f 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53  thod */.  int iS
1d580 64 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  dst;           /
1d590 2a 20 42 61 73 65 20 72 65 67 69 73 74 65 72 20  * Base register 
1d5a0 77 68 65 72 65 20 72 65 73 75 6c 74 73 20 61 72  where results ar
1d5b0 65 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69  e written */.  i
1d5c0 6e 74 20 6e 53 64 73 74 3b 20 20 20 20 20 20 20  nt nSdst;       
1d5d0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1d5e0 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c 6f 63   registers alloc
1d5f0 61 74 65 64 20 2a 2f 0a 20 20 45 78 70 72 4c 69  ated */.  ExprLi
1d600 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 2f  st *pOrderBy;  /
1d610 2a 20 4b 65 79 20 63 6f 6c 75 6d 6e 73 20 66 6f  * Key columns fo
1d620 72 20 53 52 54 5f 51 75 65 75 65 20 61 6e 64 20  r SRT_Queue and 
1d630 53 52 54 5f 44 69 73 74 51 75 65 75 65 20 2a 2f  SRT_DistQueue */
1d640 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e  .};../*.** Durin
1d650 67 20 63 6f 64 65 20 67 65 6e 65 72 61 74 69 6f  g code generatio
1d660 6e 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 20  n of statements 
1d670 74 68 61 74 20 64 6f 20 69 6e 73 65 72 74 73 20  that do inserts 
1d680 69 6e 74 6f 20 41 55 54 4f 49 4e 43 52 45 4d 45  into AUTOINCREME
1d690 4e 54 0a 2a 2a 20 74 61 62 6c 65 73 2c 20 74 68  NT.** tables, th
1d6a0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f  e following info
1d6b0 72 6d 61 74 69 6f 6e 20 69 73 20 61 74 74 61 63  rmation is attac
1d6c0 68 65 64 20 74 6f 20 74 68 65 20 54 61 62 6c 65  hed to the Table
1d6d0 2e 75 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20  .u.autoInc.p.** 
1d6e0 70 6f 69 6e 74 65 72 20 6f 66 20 65 61 63 68 20  pointer of each 
1d6f0 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 74 61  autoincrement ta
1d700 62 6c 65 20 74 6f 20 72 65 63 6f 72 64 20 73 6f  ble to record so
1d710 6d 65 20 73 69 64 65 20 69 6e 66 6f 72 6d 61 74  me side informat
1d720 69 6f 6e 20 74 68 61 74 0a 2a 2a 20 74 68 65 20  ion that.** the 
1d730 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 6e  code generator n
1d740 65 65 64 73 2e 20 20 57 65 20 68 61 76 65 20 74  eeds.  We have t
1d750 6f 20 6b 65 65 70 20 70 65 72 2d 74 61 62 6c 65  o keep per-table
1d760 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a   autoincrement.*
1d770 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e  * information in
1d780 20 63 61 73 65 20 69 6e 73 65 72 74 73 20 61 72   case inserts ar
1d790 65 20 64 6f 6e 65 20 77 69 74 68 69 6e 20 74 72  e done within tr
1d7a0 69 67 67 65 72 73 2e 20 20 54 72 69 67 67 65 72  iggers.  Trigger
1d7b0 73 20 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d  s do not.** norm
1d7c0 61 6c 6c 79 20 63 6f 6f 72 64 69 6e 61 74 65 20  ally coordinate 
1d7d0 74 68 65 69 72 20 61 63 74 69 76 69 74 69 65 73  their activities
1d7e0 2c 20 62 75 74 20 77 65 20 64 6f 20 6e 65 65 64  , but we do need
1d7f0 20 74 6f 20 63 6f 6f 72 64 69 6e 61 74 65 20 74   to coordinate t
1d800 68 65 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20 61 6e  he.** loading an
1d810 64 20 73 61 76 69 6e 67 20 6f 66 20 61 75 74 6f  d saving of auto
1d820 69 6e 63 72 65 6d 65 6e 74 20 69 6e 66 6f 72 6d  increment inform
1d830 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ation..*/.struct
1d840 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20   AutoincInfo {. 
1d850 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e   AutoincInfo *pN
1d860 65 78 74 3b 20 20 20 2f 2a 20 4e 65 78 74 20 69  ext;   /* Next i
1d870 6e 66 6f 20 62 6c 6f 63 6b 20 69 6e 20 61 20 6c  nfo block in a l
1d880 69 73 74 20 6f 66 20 74 68 65 6d 20 61 6c 6c 20  ist of them all 
1d890 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62  */.  Table *pTab
1d8a0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61  ;          /* Ta
1d8b0 62 6c 65 20 74 68 69 73 20 69 6e 66 6f 20 62 6c  ble this info bl
1d8c0 6f 63 6b 20 72 65 66 65 72 73 20 74 6f 20 2a 2f  ock refers to */
1d8d0 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20  .  int iDb;     
1d8e0 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
1d8f0 78 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62  x in sqlite3.aDb
1d900 5b 5d 20 6f 66 20 64 61 74 61 62 61 73 65 20 68  [] of database h
1d910 6f 6c 64 69 6e 67 20 70 54 61 62 20 2a 2f 0a 20  olding pTab */. 
1d920 20 69 6e 74 20 72 65 67 43 74 72 3b 20 20 20 20   int regCtr;    
1d930 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79         /* Memory
1d940 20 72 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   register holdin
1d950 67 20 74 68 65 20 72 6f 77 69 64 20 63 6f 75 6e  g the rowid coun
1d960 74 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ter */.};../*.**
1d970 20 53 69 7a 65 20 6f 66 20 74 68 65 20 63 6f 6c   Size of the col
1d980 75 6d 6e 20 63 61 63 68 65 0a 2a 2f 0a 23 69 66  umn cache.*/.#if
1d990 6e 64 65 66 20 53 51 4c 49 54 45 5f 4e 5f 43 4f  ndef SQLITE_N_CO
1d9a0 4c 43 41 43 48 45 0a 23 20 64 65 66 69 6e 65 20  LCACHE.# define 
1d9b0 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48  SQLITE_N_COLCACH
1d9c0 45 20 31 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E 10.#endif../*.
1d9d0 2a 2a 20 41 74 20 6c 65 61 73 74 20 6f 6e 65 20  ** At least one 
1d9e0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
1d9f0 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
1da00 75 72 65 20 69 73 20 63 72 65 61 74 65 64 20 66  ure is created f
1da10 6f 72 20 65 61 63 68 0a 2a 2a 20 74 72 69 67 67  or each.** trigg
1da20 65 72 20 74 68 61 74 20 6d 61 79 20 62 65 20 66  er that may be f
1da30 69 72 65 64 20 77 68 69 6c 65 20 70 61 72 73 69  ired while parsi
1da40 6e 67 20 61 6e 20 49 4e 53 45 52 54 2c 20 55 50  ng an INSERT, UP
1da50 44 41 54 45 20 6f 72 20 44 45 4c 45 54 45 0a 2a  DATE or DELETE.*
1da60 2a 20 73 74 61 74 65 6d 65 6e 74 2e 20 41 6c 6c  * statement. All
1da70 20 73 75 63 68 20 6f 62 6a 65 63 74 73 20 61 72   such objects ar
1da80 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  e stored in the 
1da90 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64  linked list head
1daa0 65 64 20 61 74 0a 2a 2a 20 50 61 72 73 65 2e 70  ed at.** Parse.p
1dab0 54 72 69 67 67 65 72 50 72 67 20 61 6e 64 20 64  TriggerPrg and d
1dac0 65 6c 65 74 65 64 20 6f 6e 63 65 20 73 74 61 74  eleted once stat
1dad0 65 6d 65 6e 74 20 63 6f 6d 70 69 6c 61 74 69 6f  ement compilatio
1dae0 6e 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 63 6f  n has been.** co
1daf0 6d 70 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41  mpleted..**.** A
1db00 20 56 64 62 65 20 73 75 62 2d 70 72 6f 67 72 61   Vdbe sub-progra
1db10 6d 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74  m that implement
1db20 73 20 74 68 65 20 62 6f 64 79 20 61 6e 64 20 57  s the body and W
1db30 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 72  HEN clause of tr
1db40 69 67 67 65 72 0a 2a 2a 20 54 72 69 67 67 65 72  igger.** Trigger
1db50 50 72 67 2e 70 54 72 69 67 67 65 72 2c 20 61 73  Prg.pTrigger, as
1db60 73 75 6d 69 6e 67 20 61 20 64 65 66 61 75 6c 74  suming a default
1db70 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61   ON CONFLICT cla
1db80 75 73 65 20 6f 66 0a 2a 2a 20 54 72 69 67 67 65  use of.** Trigge
1db90 72 50 72 67 2e 6f 72 63 6f 6e 66 2c 20 69 73 20  rPrg.orconf, is 
1dba0 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 54 72  stored in the Tr
1dbb0 69 67 67 65 72 50 72 67 2e 70 50 72 6f 67 72 61  iggerPrg.pProgra
1dbc0 6d 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 20 54  m variable..** T
1dbd0 68 65 20 50 61 72 73 65 2e 70 54 72 69 67 67 65  he Parse.pTrigge
1dbe0 72 50 72 67 20 6c 69 73 74 20 6e 65 76 65 72 20  rPrg list never 
1dbf0 63 6f 6e 74 61 69 6e 73 20 74 77 6f 20 65 6e 74  contains two ent
1dc00 72 69 65 73 20 77 69 74 68 20 74 68 65 20 73 61  ries with the sa
1dc10 6d 65 0a 2a 2a 20 76 61 6c 75 65 73 20 66 6f 72  me.** values for
1dc20 20 62 6f 74 68 20 70 54 72 69 67 67 65 72 20 61   both pTrigger a
1dc30 6e 64 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a  nd orconf..**.**
1dc40 20 54 68 65 20 54 72 69 67 67 65 72 50 72 67 2e   The TriggerPrg.
1dc50 61 43 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61 72 69  aColmask[0] vari
1dc60 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20 61  able is set to a
1dc70 20 6d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63   mask of old.* c
1dc80 6f 6c 75 6d 6e 73 0a 2a 2a 20 61 63 63 65 73 73  olumns.** access
1dc90 65 64 20 28 6f 72 20 73 65 74 20 74 6f 20 30 20  ed (or set to 0 
1dca0 66 6f 72 20 74 72 69 67 67 65 72 73 20 66 69 72  for triggers fir
1dcb0 65 64 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f  ed as a result o
1dcc0 66 20 49 4e 53 45 52 54 0a 2a 2a 20 73 74 61 74  f INSERT.** stat
1dcd0 65 6d 65 6e 74 73 29 2e 20 53 69 6d 69 6c 61 72  ements). Similar
1dce0 6c 79 2c 20 74 68 65 20 54 72 69 67 67 65 72 50  ly, the TriggerP
1dcf0 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76  rg.aColmask[1] v
1dd00 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74  ariable is set t
1dd10 6f 0a 2a 2a 20 61 20 6d 61 73 6b 20 6f 66 20 6e  o.** a mask of n
1dd20 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75 73 65  ew.* columns use
1dd30 64 20 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d  d by the program
1dd40 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67  ..*/.struct Trig
1dd50 67 65 72 50 72 67 20 7b 0a 20 20 54 72 69 67 67  gerPrg {.  Trigg
1dd60 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20  er *pTrigger;   
1dd70 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20 74 68     /* Trigger th
1dd80 69 73 20 70 72 6f 67 72 61 6d 20 77 61 73 20 63  is program was c
1dd90 6f 64 65 64 20 66 72 6f 6d 20 2a 2f 0a 20 20 54  oded from */.  T
1dda0 72 69 67 67 65 72 50 72 67 20 2a 70 4e 65 78 74  riggerPrg *pNext
1ddb0 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 65  ;      /* Next e
1ddc0 6e 74 72 79 20 69 6e 20 50 61 72 73 65 2e 70 54  ntry in Parse.pT
1ddd0 72 69 67 67 65 72 50 72 67 20 6c 69 73 74 20 2a  riggerPrg list *
1dde0 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a  /.  SubProgram *
1ddf0 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 50  pProgram;   /* P
1de00 72 6f 67 72 61 6d 20 69 6d 70 6c 65 6d 65 6e 74  rogram implement
1de10 69 6e 67 20 70 54 72 69 67 67 65 72 2f 6f 72 63  ing pTrigger/orc
1de20 6f 6e 66 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 63  onf */.  int orc
1de30 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20 20  onf;            
1de40 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43   /* Default ON C
1de50 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 2a  ONFLICT policy *
1de60 2f 0a 20 20 75 33 32 20 61 43 6f 6c 6d 61 73 6b  /.  u32 aColmask
1de70 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d  [2];        /* M
1de80 61 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e  asks of old.*, n
1de90 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61 63 63  ew.* columns acc
1dea0 65 73 73 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  essed */.};../*.
1deb0 2a 2a 20 54 68 65 20 79 44 62 4d 61 73 6b 20 64  ** The yDbMask d
1dec0 61 74 61 74 79 70 65 20 66 6f 72 20 74 68 65 20  atatype for the 
1ded0 62 69 74 6d 61 73 6b 20 6f 66 20 61 6c 6c 20 61  bitmask of all a
1dee0 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
1def0 73 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45  s..*/.#if SQLITE
1df00 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30  _MAX_ATTACHED>30
1df10 0a 20 20 74 79 70 65 64 65 66 20 75 6e 73 69 67  .  typedef unsig
1df20 6e 65 64 20 63 68 61 72 20 79 44 62 4d 61 73 6b  ned char yDbMask
1df30 5b 28 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54  [(SQLITE_MAX_ATT
1df40 41 43 48 45 44 2b 39 29 2f 38 5d 3b 0a 23 20 64  ACHED+9)/8];.# d
1df50 65 66 69 6e 65 20 44 62 4d 61 73 6b 54 65 73 74  efine DbMaskTest
1df60 28 4d 2c 49 29 20 20 20 20 28 28 28 4d 29 5b 28  (M,I)    (((M)[(
1df70 49 29 2f 38 5d 26 28 31 3c 3c 28 28 49 29 26 37  I)/8]&(1<<((I)&7
1df80 29 29 29 21 3d 30 29 0a 23 20 64 65 66 69 6e 65  )))!=0).# define
1df90 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20   DbMaskZero(M)  
1dfa0 20 20 20 20 6d 65 6d 73 65 74 28 28 4d 29 2c 30      memset((M),0
1dfb0 2c 73 69 7a 65 6f 66 28 4d 29 29 0a 23 20 64 65  ,sizeof(M)).# de
1dfc0 66 69 6e 65 20 44 62 4d 61 73 6b 53 65 74 28 4d  fine DbMaskSet(M
1dfd0 2c 49 29 20 20 20 20 20 28 4d 29 5b 28 49 29 2f  ,I)     (M)[(I)/
1dfe0 38 5d 7c 3d 28 31 3c 3c 28 28 49 29 26 37 29 29  8]|=(1<<((I)&7))
1dff0 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1e000 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 73 71 6c  AllZero(M)   sql
1e010 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72  ite3DbMaskAllZer
1e020 6f 28 4d 29 0a 23 20 64 65 66 69 6e 65 20 44 62  o(M).# define Db
1e030 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20  MaskNonZero(M)  
1e040 20 28 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41   (sqlite3DbMaskA
1e050 6c 6c 5a 65 72 6f 28 4d 29 3d 3d 30 29 0a 23 65  llZero(M)==0).#e
1e060 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20 75 6e  lse.  typedef un
1e070 73 69 67 6e 65 64 20 69 6e 74 20 79 44 62 4d 61  signed int yDbMa
1e080 73 6b 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  sk;.# define DbM
1e090 61 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20  askTest(M,I)    
1e0a0 28 28 28 4d 29 26 28 28 28 79 44 62 4d 61 73 6b  (((M)&(((yDbMask
1e0b0 29 31 29 3c 3c 28 49 29 29 29 21 3d 30 29 0a 23  )1)<<(I)))!=0).#
1e0c0 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65   define DbMaskZe
1e0d0 72 6f 28 4d 29 20 20 20 20 20 20 28 4d 29 3d 30  ro(M)      (M)=0
1e0e0 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1e0f0 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28 4d 29  Set(M,I)     (M)
1e100 7c 3d 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c  |=(((yDbMask)1)<
1e110 3c 28 49 29 29 0a 23 20 64 65 66 69 6e 65 20 44  <(I)).# define D
1e120 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20  bMaskAllZero(M) 
1e130 20 20 28 4d 29 3d 3d 30 0a 23 20 64 65 66 69 6e    (M)==0.# defin
1e140 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28  e DbMaskNonZero(
1e150 4d 29 20 20 20 28 4d 29 21 3d 30 0a 23 65 6e 64  M)   (M)!=0.#end
1e160 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c  if../*.** An SQL
1e170 20 70 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e   parser context.
1e180 20 20 41 20 63 6f 70 79 20 6f 66 20 74 68 69 73    A copy of this
1e190 20 73 74 72 75 63 74 75 72 65 20 69 73 20 70 61   structure is pa
1e1a0 73 73 65 64 20 74 68 72 6f 75 67 68 0a 2a 2a 20  ssed through.** 
1e1b0 74 68 65 20 70 61 72 73 65 72 20 61 6e 64 20 64  the parser and d
1e1c0 6f 77 6e 20 69 6e 74 6f 20 61 6c 6c 20 74 68 65  own into all the
1e1d0 20 70 61 72 73 65 72 20 61 63 74 69 6f 6e 20 72   parser action r
1e1e0 6f 75 74 69 6e 65 20 69 6e 20 6f 72 64 65 72 20  outine in order 
1e1f0 74 6f 0a 2a 2a 20 63 61 72 72 79 20 61 72 6f 75  to.** carry arou
1e200 6e 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74  nd information t
1e210 68 61 74 20 69 73 20 67 6c 6f 62 61 6c 20 74 6f  hat is global to
1e220 20 74 68 65 20 65 6e 74 69 72 65 20 70 61 72 73   the entire pars
1e230 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72  e..**.** The str
1e240 75 63 74 75 72 65 20 69 73 20 64 69 76 69 64 65  ucture is divide
1e250 64 20 69 6e 74 6f 20 74 77 6f 20 70 61 72 74 73  d into two parts
1e260 2e 20 20 57 68 65 6e 20 74 68 65 20 70 61 72 73  .  When the pars
1e270 65 72 20 61 6e 64 20 63 6f 64 65 0a 2a 2a 20 67  er and code.** g
1e280 65 6e 65 72 61 74 65 20 63 61 6c 6c 20 74 68 65  enerate call the
1e290 6d 73 65 6c 76 65 73 20 72 65 63 75 72 73 69 76  mselves recursiv
1e2a0 65 6c 79 2c 20 74 68 65 20 66 69 72 73 74 20 70  ely, the first p
1e2b0 61 72 74 20 6f 66 20 74 68 65 20 73 74 72 75 63  art of the struc
1e2c0 74 75 72 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 74  ture.** is const
1e2d0 61 6e 74 20 62 75 74 20 74 68 65 20 73 65 63 6f  ant but the seco
1e2e0 6e 64 20 70 61 72 74 20 69 73 20 72 65 73 65 74  nd part is reset
1e2f0 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e   at the beginnin
1e300 67 20 61 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a 20  g and end of.** 
1e310 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 0a  each recursion..
1e320 2a 2a 0a 2a 2a 20 54 68 65 20 6e 54 61 62 6c 65  **.** The nTable
1e330 4c 6f 63 6b 20 61 6e 64 20 61 54 61 62 6c 65 4c  Lock and aTableL
1e340 6f 63 6b 20 76 61 72 69 61 62 6c 65 73 20 61 72  ock variables ar
1e350 65 20 6f 6e 6c 79 20 75 73 65 64 20 69 66 20 74  e only used if t
1e360 68 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 0a  he shared-cache.
1e370 2a 2a 20 66 65 61 74 75 72 65 20 69 73 20 65 6e  ** feature is en
1e380 61 62 6c 65 64 20 28 69 66 20 73 71 6c 69 74 65  abled (if sqlite
1e390 33 54 73 64 28 29 2d 3e 75 73 65 53 68 61 72 65  3Tsd()->useShare
1e3a0 64 44 61 74 61 20 69 73 20 74 72 75 65 29 2e 20  dData is true). 
1e3b0 54 68 65 79 20 61 72 65 0a 2a 2a 20 75 73 65 64  They are.** used
1e3c0 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 73 65   to store the se
1e3d0 74 20 6f 66 20 74 61 62 6c 65 2d 6c 6f 63 6b 73  t of table-locks
1e3e0 20 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65   required by the
1e3f0 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67   statement being
1e400 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 2e 20 46 75  .** compiled. Fu
1e410 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 54 61  nction sqlite3Ta
1e420 62 6c 65 4c 6f 63 6b 28 29 20 69 73 20 75 73 65  bleLock() is use
1e430 64 20 74 6f 20 61 64 64 20 65 6e 74 72 69 65 73  d to add entries
1e440 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 69 73 74 2e   to the.** list.
1e450 0a 2a 2f 0a 73 74 72 75 63 74 20 50 61 72 73 65  .*/.struct Parse
1e460 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62   {.  sqlite3 *db
1e470 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
1e480 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 73   main database s
1e490 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 63 68  tructure */.  ch
1e4a0 61 72 20 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20  ar *zErrMsg;    
1e4b0 20 20 20 2f 2a 20 41 6e 20 65 72 72 6f 72 20 6d     /* An error m
1e4c0 65 73 73 61 67 65 20 2a 2f 0a 20 20 56 64 62 65  essage */.  Vdbe
1e4d0 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20 20   *pVdbe;        
1e4e0 20 2f 2a 20 41 6e 20 65 6e 67 69 6e 65 20 66 6f   /* An engine fo
1e4f0 72 20 65 78 65 63 75 74 69 6e 67 20 64 61 74 61  r executing data
1e500 62 61 73 65 20 62 79 74 65 63 6f 64 65 20 2a 2f  base bytecode */
1e510 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20  .  int rc;      
1e520 20 20 20 20 20 20 20 20 2f 2a 20 52 65 74 75 72          /* Retur
1e530 6e 20 63 6f 64 65 20 66 72 6f 6d 20 65 78 65 63  n code from exec
1e540 75 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 63 6f  ution */.  u8 co
1e550 6c 4e 61 6d 65 73 53 65 74 3b 20 20 20 20 20 20  lNamesSet;      
1e560 2f 2a 20 54 52 55 45 20 61 66 74 65 72 20 4f 50  /* TRUE after OP
1e570 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61 73 20  _ColumnName has 
1e580 62 65 65 6e 20 69 73 73 75 65 64 20 74 6f 20 70  been issued to p
1e590 56 64 62 65 20 2a 2f 0a 20 20 75 38 20 63 68 65  Vdbe */.  u8 che
1e5a0 63 6b 53 63 68 65 6d 61 3b 20 20 20 20 20 20 2f  ckSchema;      /
1e5b0 2a 20 43 61 75 73 65 73 20 73 63 68 65 6d 61 20  * Causes schema 
1e5c0 63 6f 6f 6b 69 65 20 63 68 65 63 6b 20 61 66 74  cookie check aft
1e5d0 65 72 20 61 6e 20 65 72 72 6f 72 20 2a 2f 0a 20  er an error */. 
1e5e0 20 75 38 20 6e 65 73 74 65 64 3b 20 20 20 20 20   u8 nested;     
1e5f0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1e600 6f 66 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20  of nested calls 
1e610 74 6f 20 74 68 65 20 70 61 72 73 65 72 2f 63 6f  to the parser/co
1e620 64 65 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a  de generator */.
1e630 20 20 75 38 20 6e 54 65 6d 70 52 65 67 3b 20 20    u8 nTempReg;  
1e640 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1e650 20 6f 66 20 74 65 6d 70 6f 72 61 72 79 20 72 65   of temporary re
1e660 67 69 73 74 65 72 73 20 69 6e 20 61 54 65 6d 70  gisters in aTemp
1e670 52 65 67 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 73  Reg[] */.  u8 is
1e680 4d 75 6c 74 69 57 72 69 74 65 3b 20 20 20 20 20  MultiWrite;     
1e690 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61 74 65  /* True if state
1e6a0 6d 65 6e 74 20 6d 61 79 20 6d 6f 64 69 66 79 2f  ment may modify/
1e6b0 69 6e 73 65 72 74 20 6d 75 6c 74 69 70 6c 65 20  insert multiple 
1e6c0 72 6f 77 73 20 2a 2f 0a 20 20 75 38 20 6d 61 79  rows */.  u8 may
1e6d0 41 62 6f 72 74 3b 20 20 20 20 20 20 20 20 20 2f  Abort;         /
1e6e0 2a 20 54 72 75 65 20 69 66 20 73 74 61 74 65 6d  * True if statem
1e6f0 65 6e 74 20 6d 61 79 20 74 68 72 6f 77 20 61 6e  ent may throw an
1e700 20 41 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e   ABORT exception
1e710 20 2a 2f 0a 20 20 75 38 20 68 61 73 43 6f 6d 70   */.  u8 hasComp
1e720 6f 75 6e 64 3b 20 20 20 20 20 20 2f 2a 20 4e 65  ound;      /* Ne
1e730 65 64 20 74 6f 20 69 6e 76 6f 6b 65 20 63 6f 6e  ed to invoke con
1e740 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65  vertCompoundSele
1e750 63 74 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a  ctToSubquery() *
1e760 2f 0a 20 20 75 38 20 6f 6b 43 6f 6e 73 74 46 61  /.  u8 okConstFa
1e770 63 74 6f 72 3b 20 20 20 20 2f 2a 20 4f 4b 20 74  ctor;    /* OK t
1e780 6f 20 66 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e  o factor out con
1e790 73 74 61 6e 74 73 20 2a 2f 0a 20 20 75 38 20 64  stants */.  u8 d
1e7a0 69 73 61 62 6c 65 4c 6f 6f 6b 61 73 69 64 65 3b  isableLookaside;
1e7b0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 69   /* Number of ti
1e7c0 6d 65 73 20 6c 6f 6f 6b 61 73 69 64 65 20 68 61  mes lookaside ha
1e7d0 73 20 62 65 65 6e 20 64 69 73 61 62 6c 65 64 20  s been disabled 
1e7e0 2a 2f 0a 20 20 75 38 20 6e 43 6f 6c 43 61 63 68  */.  u8 nColCach
1e7f0 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  e;        /* Num
1e800 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69  ber of entries i
1e810 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d 20 2a 2f  n aColCache[] */
1e820 0a 20 20 69 6e 74 20 6e 52 61 6e 67 65 52 65 67  .  int nRangeReg
1e830 3b 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20  ;       /* Size 
1e840 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79  of the temporary
1e850 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20   register block 
1e860 2a 2f 0a 20 20 69 6e 74 20 69 52 61 6e 67 65 52  */.  int iRangeR
1e870 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 72  eg;       /* Fir
1e880 73 74 20 72 65 67 69 73 74 65 72 20 69 6e 20 74  st register in t
1e890 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65  emporary registe
1e8a0 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74  r block */.  int
1e8b0 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20 20   nErr;          
1e8c0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
1e8d0 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20  rrors seen */.  
1e8e0 69 6e 74 20 6e 54 61 62 3b 20 20 20 20 20 20 20  int nTab;       
1e8f0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1e900 66 20 70 72 65 76 69 6f 75 73 6c 79 20 61 6c 6c  f previously all
1e910 6f 63 61 74 65 64 20 56 44 42 45 20 63 75 72 73  ocated VDBE curs
1e920 6f 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65  ors */.  int nMe
1e930 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  m;            /*
1e940 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72   Number of memor
1e950 79 20 63 65 6c 6c 73 20 75 73 65 64 20 73 6f 20  y cells used so 
1e960 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 70  far */.  int nOp
1e970 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a  Alloc;        /*
1e980 20 4e 75 6d 62 65 72 20 6f 66 20 73 6c 6f 74 73   Number of slots
1e990 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 56   allocated for V
1e9a0 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69  dbe.aOp[] */.  i
1e9b0 6e 74 20 73 7a 4f 70 41 6c 6c 6f 63 3b 20 20 20  nt szOpAlloc;   
1e9c0 20 20 20 20 2f 2a 20 42 79 74 65 73 20 6f 66 20      /* Bytes of 
1e9d0 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 61 6c 6c  memory space all
1e9e0 6f 63 61 74 65 64 20 66 6f 72 20 56 64 62 65 2e  ocated for Vdbe.
1e9f0 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 63  aOp[] */.  int c
1ea00 6b 42 61 73 65 3b 20 20 20 20 20 20 20 20 20 20  kBase;          
1ea10 2f 2a 20 42 61 73 65 20 72 65 67 69 73 74 65 72  /* Base register
1ea20 20 6f 66 20 64 61 74 61 20 64 75 72 69 6e 67 20   of data during 
1ea30 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74  check constraint
1ea40 73 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65 6c 66  s */.  int iSelf
1ea50 54 61 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  Tab;        /* T
1ea60 61 62 6c 65 20 6f 66 20 61 6e 20 69 6e 64 65 78  able of an index
1ea70 20 77 68 6f 73 65 20 65 78 70 72 73 20 61 72 65   whose exprs are
1ea80 20 62 65 69 6e 67 20 63 6f 64 65 64 20 2a 2f 0a   being coded */.
1ea90 20 20 69 6e 74 20 69 43 61 63 68 65 4c 65 76 65    int iCacheLeve
1eaa0 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 43 61 63  l;     /* ColCac
1eab0 68 65 20 76 61 6c 69 64 20 77 68 65 6e 20 61 43  he valid when aC
1eac0 6f 6c 43 61 63 68 65 5b 5d 2e 69 4c 65 76 65 6c  olCache[].iLevel
1ead0 3c 3d 69 43 61 63 68 65 4c 65 76 65 6c 20 2a 2f  <=iCacheLevel */
1eae0 0a 20 20 69 6e 74 20 69 43 61 63 68 65 43 6e 74  .  int iCacheCnt
1eaf0 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74  ;       /* Count
1eb00 65 72 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72  er used to gener
1eb10 61 74 65 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e  ate aColCache[].
1eb20 6c 72 75 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20  lru values */.  
1eb30 69 6e 74 20 6e 4c 61 62 65 6c 3b 20 20 20 20 20  int nLabel;     
1eb40 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1eb50 66 20 6c 61 62 65 6c 73 20 75 73 65 64 20 2a 2f  f labels used */
1eb60 0a 20 20 69 6e 74 20 2a 61 4c 61 62 65 6c 3b 20  .  int *aLabel; 
1eb70 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65          /* Space
1eb80 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 6c 61 62   to hold the lab
1eb90 65 6c 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  els */.  ExprLis
1eba0 74 20 2a 70 43 6f 6e 73 74 45 78 70 72 3b 2f 2a  t *pConstExpr;/*
1ebb0 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73   Constant expres
1ebc0 73 69 6f 6e 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e  sions */.  Token
1ebd0 20 63 6f 6e 73 74 72 61 69 6e 74 4e 61 6d 65 3b   constraintName;
1ebe0 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63  /* Name of the c
1ebf0 6f 6e 73 74 72 61 69 6e 74 20 63 75 72 72 65 6e  onstraint curren
1ec00 74 6c 79 20 62 65 69 6e 67 20 70 61 72 73 65 64  tly being parsed
1ec10 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 77 72   */.  yDbMask wr
1ec20 69 74 65 4d 61 73 6b 3b 20 20 20 2f 2a 20 53 74  iteMask;   /* St
1ec30 61 72 74 20 61 20 77 72 69 74 65 20 74 72 61 6e  art a write tran
1ec40 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 73 65  saction on these
1ec50 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20   databases */.  
1ec60 79 44 62 4d 61 73 6b 20 63 6f 6f 6b 69 65 4d 61  yDbMask cookieMa
1ec70 73 6b 3b 20 20 2f 2a 20 42 69 74 6d 61 73 6b 20  sk;  /* Bitmask 
1ec80 6f 66 20 73 63 68 65 6d 61 20 76 65 72 69 66 69  of schema verifi
1ec90 65 64 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a  ed databases */.
1eca0 20 20 69 6e 74 20 72 65 67 52 6f 77 69 64 3b 20    int regRowid; 
1ecb0 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
1ecc0 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69 64  er holding rowid
1ecd0 20 6f 66 20 43 52 45 41 54 45 20 54 41 42 4c 45   of CREATE TABLE
1ece0 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74 20   entry */.  int 
1ecf0 72 65 67 52 6f 6f 74 3b 20 20 20 20 20 20 20 20  regRoot;        
1ed00 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c   /* Register hol
1ed10 64 69 6e 67 20 72 6f 6f 74 20 70 61 67 65 20 6e  ding root page n
1ed20 75 6d 62 65 72 20 66 6f 72 20 6e 65 77 20 6f 62  umber for new ob
1ed30 6a 65 63 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  jects */.  int n
1ed40 4d 61 78 41 72 67 3b 20 20 20 20 20 20 20 20 20  MaxArg;         
1ed50 2f 2a 20 4d 61 78 20 61 72 67 73 20 70 61 73 73  /* Max args pass
1ed60 65 64 20 74 6f 20 75 73 65 72 20 66 75 6e 63 74  ed to user funct
1ed70 69 6f 6e 20 62 79 20 73 75 62 2d 70 72 6f 67 72  ion by sub-progr
1ed80 61 6d 20 2a 2f 0a 23 69 66 20 53 45 4c 45 43 54  am */.#if SELECT
1ed90 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a 20 20  TRACE_ENABLED.  
1eda0 69 6e 74 20 6e 53 65 6c 65 63 74 3b 20 20 20 20  int nSelect;    
1edb0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1edc0 66 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  f SELECT stateme
1edd0 6e 74 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e  nts seen */.  in
1ede0 74 20 6e 53 65 6c 65 63 74 49 6e 64 65 6e 74 3b  t nSelectIndent;
1edf0 20 20 20 2f 2a 20 48 6f 77 20 66 61 72 20 74 6f     /* How far to
1ee00 20 69 6e 64 65 6e 74 20 53 45 4c 45 43 54 54 52   indent SELECTTR
1ee10 41 43 45 28 29 20 6f 75 74 70 75 74 20 2a 2f 0a  ACE() output */.
1ee20 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
1ee30 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45  QLITE_OMIT_SHARE
1ee40 44 5f 43 41 43 48 45 0a 20 20 69 6e 74 20 6e 54  D_CACHE.  int nT
1ee50 61 62 6c 65 4c 6f 63 6b 3b 20 20 20 20 20 20 20  ableLock;       
1ee60 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f   /* Number of lo
1ee70 63 6b 73 20 69 6e 20 61 54 61 62 6c 65 4c 6f 63  cks in aTableLoc
1ee80 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f 63 6b  k */.  TableLock
1ee90 20 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f 2a   *aTableLock; /*
1eea0 20 52 65 71 75 69 72 65 64 20 74 61 62 6c 65 20   Required table 
1eeb0 6c 6f 63 6b 73 20 66 6f 72 20 73 68 61 72 65 64  locks for shared
1eec0 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23  -cache mode */.#
1eed0 65 6e 64 69 66 0a 20 20 41 75 74 6f 69 6e 63 49  endif.  AutoincI
1eee0 6e 66 6f 20 2a 70 41 69 6e 63 3b 20 20 2f 2a 20  nfo *pAinc;  /* 
1eef0 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  Information abou
1ef00 74 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  t AUTOINCREMENT 
1ef10 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20 50 61  counters */.  Pa
1ef20 72 73 65 20 2a 70 54 6f 70 6c 65 76 65 6c 3b 20  rse *pToplevel; 
1ef30 20 20 20 2f 2a 20 50 61 72 73 65 20 73 74 72 75     /* Parse stru
1ef40 63 74 75 72 65 20 66 6f 72 20 6d 61 69 6e 20 70  cture for main p
1ef50 72 6f 67 72 61 6d 20 28 6f 72 20 4e 55 4c 4c 29  rogram (or NULL)
1ef60 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 72   */.  Table *pTr
1ef70 69 67 67 65 72 54 61 62 3b 20 20 2f 2a 20 54 61  iggerTab;  /* Ta
1ef80 62 6c 65 20 74 72 69 67 67 65 72 73 20 61 72 65  ble triggers are
1ef90 20 62 65 69 6e 67 20 63 6f 64 65 64 20 66 6f 72   being coded for
1efa0 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 43 72   */.  int addrCr
1efb0 54 61 62 3b 20 20 20 20 20 20 20 2f 2a 20 41 64  Tab;       /* Ad
1efc0 64 72 65 73 73 20 6f 66 20 4f 50 5f 43 72 65 61  dress of OP_Crea
1efd0 74 65 54 61 62 6c 65 20 6f 70 63 6f 64 65 20 6f  teTable opcode o
1efe0 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a  n CREATE TABLE *
1eff0 2f 0a 20 20 75 33 32 20 6e 51 75 65 72 79 4c 6f  /.  u32 nQueryLo
1f000 6f 70 3b 20 20 20 20 20 20 2f 2a 20 45 73 74 20  op;      /* Est 
1f010 6e 75 6d 62 65 72 20 6f 66 20 69 74 65 72 61 74  number of iterat
1f020 69 6f 6e 73 20 6f 66 20 61 20 71 75 65 72 79 20  ions of a query 
1f030 28 31 30 2a 6c 6f 67 32 28 4e 29 29 20 2a 2f 0a  (10*log2(N)) */.
1f040 20 20 75 33 32 20 6f 6c 64 6d 61 73 6b 3b 20 20    u32 oldmask;  
1f050 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f         /* Mask o
1f060 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20  f old.* columns 
1f070 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20  referenced */.  
1f080 75 33 32 20 6e 65 77 6d 61 73 6b 3b 20 20 20 20  u32 newmask;    
1f090 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20       /* Mask of 
1f0a0 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65  new.* columns re
1f0b0 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 38  ferenced */.  u8
1f0c0 20 65 54 72 69 67 67 65 72 4f 70 3b 20 20 20 20   eTriggerOp;    
1f0d0 20 20 20 2f 2a 20 54 4b 5f 55 50 44 41 54 45 2c     /* TK_UPDATE,
1f0e0 20 54 4b 5f 49 4e 53 45 52 54 20 6f 72 20 54 4b   TK_INSERT or TK
1f0f0 5f 44 45 4c 45 54 45 20 2a 2f 0a 20 20 75 38 20  _DELETE */.  u8 
1f100 65 4f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20  eOrconf;        
1f110 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20    /* Default ON 
1f120 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20  CONFLICT policy 
1f130 66 6f 72 20 74 72 69 67 67 65 72 20 73 74 65 70  for trigger step
1f140 73 20 2a 2f 0a 20 20 75 38 20 64 69 73 61 62 6c  s */.  u8 disabl
1f150 65 54 72 69 67 67 65 72 73 3b 20 20 2f 2a 20 54  eTriggers;  /* T
1f160 72 75 65 20 74 6f 20 64 69 73 61 62 6c 65 20 74  rue to disable t
1f170 72 69 67 67 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a  riggers */..  /*
1f180 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f190 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f1a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f1b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f1c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 46  *********.  ** F
1f1d0 69 65 6c 64 73 20 61 62 6f 76 65 20 6d 75 73 74  ields above must
1f1e0 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   be initialized 
1f1f0 74 6f 20 7a 65 72 6f 2e 20 20 54 68 65 20 66 69  to zero.  The fi
1f200 65 6c 64 73 20 74 68 61 74 20 66 6f 6c 6c 6f 77  elds that follow
1f210 2c 0a 20 20 2a 2a 20 64 6f 77 6e 20 74 6f 20 74  ,.  ** down to t
1f220 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20  he beginning of 
1f230 74 68 65 20 72 65 63 75 72 73 69 76 65 20 73 65  the recursive se
1f240 63 74 69 6f 6e 2c 20 64 6f 20 6e 6f 74 20 6e 65  ction, do not ne
1f250 65 64 20 74 6f 20 62 65 0a 20 20 2a 2a 20 69 6e  ed to be.  ** in
1f260 69 74 69 61 6c 69 7a 65 64 20 61 73 20 74 68 65  itialized as the
1f270 79 20 77 69 6c 6c 20 62 65 20 73 65 74 20 62 65  y will be set be
1f280 66 6f 72 65 20 62 65 69 6e 67 20 75 73 65 64 2e  fore being used.
1f290 20 20 54 68 65 20 62 6f 75 6e 64 61 72 79 20 69    The boundary i
1f2a0 73 0a 20 20 2a 2a 20 64 65 74 65 72 6d 69 6e 65  s.  ** determine
1f2b0 64 20 62 79 20 6f 66 66 73 65 74 6f 66 28 50 61  d by offsetof(Pa
1f2c0 72 73 65 2c 61 43 6f 6c 43 61 63 68 65 29 2e 0a  rse,aColCache)..
1f2d0 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    **************
1f2e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f2f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f300 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f310 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20  ************/.. 
1f320 20 73 74 72 75 63 74 20 79 43 6f 6c 43 61 63 68   struct yColCach
1f330 65 20 7b 0a 20 20 20 20 69 6e 74 20 69 54 61 62  e {.    int iTab
1f340 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  le;           /*
1f350 20 54 61 62 6c 65 20 63 75 72 73 6f 72 20 6e 75   Table cursor nu
1f360 6d 62 65 72 20 2a 2f 0a 20 20 20 20 69 31 36 20  mber */.    i16 
1f370 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  iColumn;        
1f380 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6c 75 6d    /* Table colum
1f390 6e 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20  n number */.    
1f3a0 75 38 20 74 65 6d 70 52 65 67 3b 20 20 20 20 20  u8 tempReg;     
1f3b0 20 20 20 20 20 20 2f 2a 20 69 52 65 67 20 69 73        /* iReg is
1f3c0 20 61 20 74 65 6d 70 20 72 65 67 69 73 74 65 72   a temp register
1f3d0 20 74 68 61 74 20 6e 65 65 64 73 20 74 6f 20 62   that needs to b
1f3e0 65 20 66 72 65 65 64 20 2a 2f 0a 20 20 20 20 69  e freed */.    i
1f3f0 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20 20 20 20  nt iLevel;      
1f400 20 20 20 20 20 2f 2a 20 4e 65 73 74 69 6e 67 20       /* Nesting 
1f410 6c 65 76 65 6c 20 2a 2f 0a 20 20 20 20 69 6e 74  level */.    int
1f420 20 69 52 65 67 3b 20 20 20 20 20 20 20 20 20 20   iReg;          
1f430 20 20 20 2f 2a 20 52 65 67 20 77 69 74 68 20 76     /* Reg with v
1f440 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c  alue of this col
1f450 75 6d 6e 2e 20 30 20 6d 65 61 6e 73 20 6e 6f 6e  umn. 0 means non
1f460 65 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6c 72  e. */.    int lr
1f470 75 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  u;              
1f480 2f 2a 20 4c 65 61 73 74 20 72 65 63 65 6e 74 6c  /* Least recentl
1f490 79 20 75 73 65 64 20 65 6e 74 72 79 20 68 61 73  y used entry has
1f4a0 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 76 61   the smallest va
1f4b0 6c 75 65 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 43  lue */.  } aColC
1f4c0 61 63 68 65 5b 53 51 4c 49 54 45 5f 4e 5f 43 4f  ache[SQLITE_N_CO
1f4d0 4c 43 41 43 48 45 5d 3b 20 20 2f 2a 20 4f 6e 65  LCACHE];  /* One
1f4e0 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
1f4f0 20 63 61 63 68 65 20 65 6e 74 72 79 20 2a 2f 0a   cache entry */.
1f500 20 20 69 6e 74 20 61 54 65 6d 70 52 65 67 5b 38    int aTempReg[8
1f510 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 6c  ];        /* Hol
1f520 64 69 6e 67 20 61 72 65 61 20 66 6f 72 20 74 65  ding area for te
1f530 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72  mporary register
1f540 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e 61  s */.  Token sNa
1f550 6d 65 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 2f  meToken;       /
1f560 2a 20 54 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71  * Token with unq
1f570 75 61 6c 69 66 69 65 64 20 73 63 68 65 6d 61 20  ualified schema 
1f580 6f 62 6a 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 0a  object name */..
1f590 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    /*************
1f5a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f5b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f5c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f5d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a  ***********.  **
1f5e0 20 41 62 6f 76 65 20 69 73 20 63 6f 6e 73 74 61   Above is consta
1f5f0 6e 74 20 62 65 74 77 65 65 6e 20 72 65 63 75 72  nt between recur
1f600 73 69 6f 6e 73 2e 20 20 42 65 6c 6f 77 20 69 73  sions.  Below is
1f610 20 72 65 73 65 74 20 62 65 66 6f 72 65 20 61 6e   reset before an
1f620 64 20 61 66 74 65 72 0a 20 20 2a 2a 20 65 61 63  d after.  ** eac
1f630 68 20 72 65 63 75 72 73 69 6f 6e 2e 20 20 54 68  h recursion.  Th
1f640 65 20 62 6f 75 6e 64 61 72 79 20 62 65 74 77 65  e boundary betwe
1f650 65 6e 20 74 68 65 73 65 20 74 77 6f 20 72 65 67  en these two reg
1f660 69 6f 6e 73 20 69 73 20 64 65 74 65 72 6d 69 6e  ions is determin
1f670 65 64 0a 20 20 2a 2a 20 75 73 69 6e 67 20 6f 66  ed.  ** using of
1f680 66 73 65 74 6f 66 28 50 61 72 73 65 2c 73 4c 61  fsetof(Parse,sLa
1f690 73 74 54 6f 6b 65 6e 29 20 73 6f 20 74 68 65 20  stToken) so the 
1f6a0 73 4c 61 73 74 54 6f 6b 65 6e 20 66 69 65 6c 64  sLastToken field
1f6b0 20 6d 75 73 74 20 62 65 20 74 68 65 0a 20 20 2a   must be the.  *
1f6c0 2a 20 66 69 72 73 74 20 66 69 65 6c 64 20 69 6e  * first field in
1f6d0 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20 72   the recursive r
1f6e0 65 67 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a  egion..  *******
1f6f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f700 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f710 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f720 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f730 2a 2f 0a 0a 20 20 54 6f 6b 65 6e 20 73 4c 61 73  */..  Token sLas
1f740 74 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 2f 2a  tToken;       /*
1f750 20 54 68 65 20 6c 61 73 74 20 74 6f 6b 65 6e 20   The last token 
1f760 70 61 72 73 65 64 20 2a 2f 0a 20 20 79 6e 56 61  parsed */.  ynVa
1f770 72 20 6e 56 61 72 3b 20 20 20 20 20 20 20 20 20  r nVar;         
1f780 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1f790 6f 66 20 27 3f 27 20 76 61 72 69 61 62 6c 65 73  of '?' variables
1f7a0 20 73 65 65 6e 20 69 6e 20 74 68 65 20 53 51 4c   seen in the SQL
1f7b0 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75 38 20   so far */.  u8 
1f7c0 69 50 6b 53 6f 72 74 4f 72 64 65 72 3b 20 20 20  iPkSortOrder;   
1f7d0 20 20 20 20 20 20 20 2f 2a 20 41 53 43 20 6f 72         /* ASC or
1f7e0 20 44 45 53 43 20 66 6f 72 20 49 4e 54 45 47 45   DESC for INTEGE
1f7f0 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f  R PRIMARY KEY */
1f800 0a 20 20 75 38 20 65 78 70 6c 61 69 6e 3b 20 20  .  u8 explain;  
1f810 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1f820 54 72 75 65 20 69 66 20 74 68 65 20 45 58 50 4c  True if the EXPL
1f830 41 49 4e 20 66 6c 61 67 20 69 73 20 66 6f 75 6e  AIN flag is foun
1f840 64 20 6f 6e 20 74 68 65 20 71 75 65 72 79 20 2a  d on the query *
1f850 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
1f860 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
1f870 4c 45 0a 20 20 75 38 20 64 65 63 6c 61 72 65 56  LE.  u8 declareV
1f880 74 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f  tab;           /
1f890 2a 20 54 72 75 65 20 69 66 20 69 6e 73 69 64 65  * True if inside
1f8a0 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65   sqlite3_declare
1f8b0 5f 76 74 61 62 28 29 20 2a 2f 0a 20 20 69 6e 74  _vtab() */.  int
1f8c0 20 6e 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20   nVtabLock;     
1f8d0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1f8e0 20 6f 66 20 76 69 72 74 75 61 6c 20 74 61 62 6c   of virtual tabl
1f8f0 65 73 20 74 6f 20 6c 6f 63 6b 20 2a 2f 0a 23 65  es to lock */.#e
1f900 6e 64 69 66 0a 20 20 69 6e 74 20 6e 48 65 69 67  ndif.  int nHeig
1f910 68 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ht;             
1f920 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 74   /* Expression t
1f930 72 65 65 20 68 65 69 67 68 74 20 6f 66 20 63 75  ree height of cu
1f940 72 72 65 6e 74 20 73 75 62 2d 73 65 6c 65 63 74  rrent sub-select
1f950 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
1f960 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a  TE_OMIT_EXPLAIN.
1f970 20 20 69 6e 74 20 69 53 65 6c 65 63 74 49 64 3b    int iSelectId;
1f980 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
1f990 44 20 6f 66 20 63 75 72 72 65 6e 74 20 73 65 6c  D of current sel
1f9a0 65 63 74 20 66 6f 72 20 45 58 50 4c 41 49 4e 20  ect for EXPLAIN 
1f9b0 6f 75 74 70 75 74 20 2a 2f 0a 20 20 69 6e 74 20  output */.  int 
1f9c0 69 4e 65 78 74 53 65 6c 65 63 74 49 64 3b 20 20  iNextSelectId;  
1f9d0 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 61 76        /* Next av
1f9e0 61 69 6c 61 62 6c 65 20 73 65 6c 65 63 74 20 49  ailable select I
1f9f0 44 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75  D for EXPLAIN ou
1fa00 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  tput */.#endif. 
1fa10 20 56 4c 69 73 74 20 2a 70 56 4c 69 73 74 3b 20   VList *pVList; 
1fa20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
1fa30 70 70 69 6e 67 20 62 65 74 77 65 65 6e 20 76 61  pping between va
1fa40 72 69 61 62 6c 65 20 6e 61 6d 65 73 20 61 6e 64  riable names and
1fa50 20 6e 75 6d 62 65 72 73 20 2a 2f 0a 20 20 56 64   numbers */.  Vd
1fa60 62 65 20 2a 70 52 65 70 72 65 70 61 72 65 3b 20  be *pReprepare; 
1fa70 20 20 20 20 20 20 20 20 2f 2a 20 56 4d 20 62 65          /* VM be
1fa80 69 6e 67 20 72 65 70 72 65 70 61 72 65 64 20 28  ing reprepared (
1fa90 73 71 6c 69 74 65 33 52 65 70 72 65 70 61 72 65  sqlite3Reprepare
1faa0 28 29 29 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ()) */.  const c
1fab0 68 61 72 20 2a 7a 54 61 69 6c 3b 20 20 20 20 20  har *zTail;     
1fac0 20 20 20 2f 2a 20 41 6c 6c 20 53 51 4c 20 74 65     /* All SQL te
1fad0 78 74 20 70 61 73 74 20 74 68 65 20 6c 61 73 74  xt past the last
1fae0 20 73 65 6d 69 63 6f 6c 6f 6e 20 70 61 72 73 65   semicolon parse
1faf0 64 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e  d */.  Table *pN
1fb00 65 77 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20  ewTable;        
1fb10 20 2f 2a 20 41 20 74 61 62 6c 65 20 62 65 69 6e   /* A table bein
1fb20 67 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79  g constructed by
1fb30 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f   CREATE TABLE */
1fb40 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65 77  .  Trigger *pNew
1fb50 54 72 69 67 67 65 72 3b 20 20 20 20 20 2f 2a 20  Trigger;     /* 
1fb60 54 72 69 67 67 65 72 20 75 6e 64 65 72 20 63 6f  Trigger under co
1fb70 6e 73 74 72 75 63 74 20 62 79 20 61 20 43 52 45  nstruct by a CRE
1fb80 41 54 45 20 54 52 49 47 47 45 52 20 2a 2f 0a 20  ATE TRIGGER */. 
1fb90 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75   const char *zAu
1fba0 74 68 43 6f 6e 74 65 78 74 3b 20 2f 2a 20 54 68  thContext; /* Th
1fbb0 65 20 36 74 68 20 70 61 72 61 6d 65 74 65 72 20  e 6th parameter 
1fbc0 74 6f 20 64 62 2d 3e 78 41 75 74 68 20 63 61 6c  to db->xAuth cal
1fbd0 6c 62 61 63 6b 73 20 2a 2f 0a 23 69 66 6e 64 65  lbacks */.#ifnde
1fbe0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
1fbf0 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 54 6f 6b  RTUALTABLE.  Tok
1fc00 65 6e 20 73 41 72 67 3b 20 20 20 20 20 20 20 20  en sArg;        
1fc10 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 6c 65         /* Comple
1fc20 74 65 20 74 65 78 74 20 6f 66 20 61 20 6d 6f 64  te text of a mod
1fc30 75 6c 65 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a  ule argument */.
1fc40 20 20 54 61 62 6c 65 20 2a 2a 61 70 56 74 61 62    Table **apVtab
1fc50 4c 6f 63 6b 3b 20 20 20 20 20 20 20 2f 2a 20 50  Lock;       /* P
1fc60 6f 69 6e 74 65 72 20 74 6f 20 76 69 72 74 75 61  ointer to virtua
1fc70 6c 20 74 61 62 6c 65 73 20 6e 65 65 64 69 6e 67  l tables needing
1fc80 20 6c 6f 63 6b 69 6e 67 20 2a 2f 0a 23 65 6e 64   locking */.#end
1fc90 69 66 0a 20 20 54 61 62 6c 65 20 2a 70 5a 6f 6d  if.  Table *pZom
1fca0 62 69 65 54 61 62 3b 20 20 20 20 20 20 20 20 2f  bieTab;        /
1fcb0 2a 20 4c 69 73 74 20 6f 66 20 54 61 62 6c 65 20  * List of Table 
1fcc0 6f 62 6a 65 63 74 73 20 74 6f 20 64 65 6c 65 74  objects to delet
1fcd0 65 20 61 66 74 65 72 20 63 6f 64 65 20 67 65 6e  e after code gen
1fce0 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67   */.  TriggerPrg
1fcf0 20 2a 70 54 72 69 67 67 65 72 50 72 67 3b 20 20   *pTriggerPrg;  
1fd00 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f  /* Linked list o
1fd10 66 20 63 6f 64 65 64 20 74 72 69 67 67 65 72 73  f coded triggers
1fd20 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74   */.  With *pWit
1fd30 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  h;              
1fd40 2f 2a 20 43 75 72 72 65 6e 74 20 57 49 54 48 20  /* Current WITH 
1fd50 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20  clause, or NULL 
1fd60 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68  */.  With *pWith
1fd70 54 6f 46 72 65 65 3b 20 20 20 20 20 20 20 20 2f  ToFree;        /
1fd80 2a 20 46 72 65 65 20 74 68 69 73 20 57 49 54 48  * Free this WITH
1fd90 20 6f 62 6a 65 63 74 20 61 74 20 74 68 65 20 65   object at the e
1fda0 6e 64 20 6f 66 20 74 68 65 20 70 61 72 73 65 20  nd of the parse 
1fdb0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a  */.};../*.** Siz
1fdc0 65 73 20 61 6e 64 20 70 6f 69 6e 74 65 72 73 20  es and pointers 
1fdd0 6f 66 20 76 61 72 69 6f 75 73 20 70 61 72 74 73  of various parts
1fde0 20 6f 66 20 74 68 65 20 50 61 72 73 65 20 6f 62   of the Parse ob
1fdf0 6a 65 63 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ject..*/.#define
1fe00 20 50 41 52 53 45 5f 48 44 52 5f 53 5a 20 6f 66   PARSE_HDR_SZ of
1fe10 66 73 65 74 6f 66 28 50 61 72 73 65 2c 61 43 6f  fsetof(Parse,aCo
1fe20 6c 43 61 63 68 65 29 20 2f 2a 20 52 65 63 75 72  lCache) /* Recur
1fe30 73 69 76 65 20 70 61 72 74 20 77 2f 6f 20 61 43  sive part w/o aC
1fe40 6f 6c 43 61 63 68 65 2a 2f 0a 23 64 65 66 69 6e  olCache*/.#defin
1fe50 65 20 50 41 52 53 45 5f 52 45 43 55 52 53 45 5f  e PARSE_RECURSE_
1fe60 53 5a 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73  SZ offsetof(Pars
1fe70 65 2c 73 4c 61 73 74 54 6f 6b 65 6e 29 20 20 20  e,sLastToken)   
1fe80 20 2f 2a 20 52 65 63 75 72 73 69 76 65 20 70 61   /* Recursive pa
1fe90 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41  rt */.#define PA
1fea0 52 53 45 5f 54 41 49 4c 5f 53 5a 20 28 73 69 7a  RSE_TAIL_SZ (siz
1feb0 65 6f 66 28 50 61 72 73 65 29 2d 50 41 52 53 45  eof(Parse)-PARSE
1fec0 5f 52 45 43 55 52 53 45 5f 53 5a 29 20 2f 2a 20  _RECURSE_SZ) /* 
1fed0 4e 6f 6e 2d 72 65 63 75 72 73 69 76 65 20 70 61  Non-recursive pa
1fee0 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41  rt */.#define PA
1fef0 52 53 45 5f 54 41 49 4c 28 58 29 20 28 28 28 63  RSE_TAIL(X) (((c
1ff00 68 61 72 2a 29 28 58 29 29 2b 50 41 52 53 45 5f  har*)(X))+PARSE_
1ff10 52 45 43 55 52 53 45 5f 53 5a 29 20 20 2f 2a 20  RECURSE_SZ)  /* 
1ff20 50 6f 69 6e 74 65 72 20 74 6f 20 74 61 69 6c 20  Pointer to tail 
1ff30 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  */../*.** Return
1ff40 20 74 72 75 65 20 69 66 20 63 75 72 72 65 6e 74   true if current
1ff50 6c 79 20 69 6e 73 69 64 65 20 61 6e 20 73 71 6c  ly inside an sql
1ff60 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61  ite3_declare_vta
1ff70 62 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66  b() call..*/.#if
1ff80 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1ff90 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 23  VIRTUALTABLE.  #
1ffa0 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52  define IN_DECLAR
1ffb0 45 5f 56 54 41 42 20 30 0a 23 65 6c 73 65 0a 20  E_VTAB 0.#else. 
1ffc0 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c   #define IN_DECL
1ffd0 41 52 45 5f 56 54 41 42 20 28 70 50 61 72 73 65  ARE_VTAB (pParse
1ffe0 2d 3e 64 65 63 6c 61 72 65 56 74 61 62 29 0a 23  ->declareVtab).#
1fff0 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  endif../*.** An 
20000 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
20010 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
20020 75 72 65 20 63 61 6e 20 62 65 20 64 65 63 6c 61  ure can be decla
20030 72 65 64 20 6f 6e 20 61 20 73 74 61 63 6b 20 61  red on a stack a
20040 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61  nd used.** to sa
20050 76 65 20 74 68 65 20 50 61 72 73 65 2e 7a 41 75  ve the Parse.zAu
20060 74 68 43 6f 6e 74 65 78 74 20 76 61 6c 75 65 20  thContext value 
20070 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 62  so that it can b
20080 65 20 72 65 73 74 6f 72 65 64 20 6c 61 74 65 72  e restored later
20090 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 68  ..*/.struct Auth
200a0 43 6f 6e 74 65 78 74 20 7b 0a 20 20 63 6f 6e 73  Context {.  cons
200b0 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e  t char *zAuthCon
200c0 74 65 78 74 3b 20 20 20 2f 2a 20 50 75 74 20 73  text;   /* Put s
200d0 61 76 65 64 20 50 61 72 73 65 2e 7a 41 75 74 68  aved Parse.zAuth
200e0 43 6f 6e 74 65 78 74 20 68 65 72 65 20 2a 2f 0a  Context here */.
200f0 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
20100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
20110 20 54 68 65 20 50 61 72 73 65 20 73 74 72 75 63   The Parse struc
20120 74 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ture */.};../*.*
20130 2a 20 42 69 74 66 69 65 6c 64 20 66 6c 61 67 73  * Bitfield flags
20140 20 66 6f 72 20 50 35 20 76 61 6c 75 65 20 69 6e   for P5 value in
20150 20 76 61 72 69 6f 75 73 20 6f 70 63 6f 64 65 73   various opcodes
20160 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f  ..**.** Value co
20170 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72  nstraints (enfor
20180 63 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29  ced via assert()
20190 29 3a 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f  ):.**    OPFLAG_
201a0 4c 45 4e 47 54 48 41 52 47 20 20 20 20 3d 3d 20  LENGTHARG    == 
201b0 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47  SQLITE_FUNC_LENG
201c0 54 48 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f  TH.**    OPFLAG_
201d0 54 59 50 45 4f 46 41 52 47 20 20 20 20 3d 3d 20  TYPEOFARG    == 
201e0 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50 45  SQLITE_FUNC_TYPE
201f0 4f 46 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f  OF.**    OPFLAG_
20200 42 55 4c 4b 43 53 52 20 20 20 20 20 20 3d 3d 20  BULKCSR      == 
20210 42 54 52 45 45 5f 42 55 4c 4b 4c 4f 41 44 0a 2a  BTREE_BULKLOAD.*
20220 2a 20 20 20 20 4f 50 46 4c 41 47 5f 53 45 45 4b  *    OPFLAG_SEEK
20230 45 51 20 20 20 20 20 20 20 3d 3d 20 42 54 52 45  EQ       == BTRE
20240 45 5f 53 45 45 4b 5f 45 51 0a 2a 2a 20 20 20 20  E_SEEK_EQ.**    
20250 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45  OPFLAG_FORDELETE
20260 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 46 4f 52      == BTREE_FOR
20270 44 45 4c 45 54 45 0a 2a 2a 20 20 20 20 4f 50 46  DELETE.**    OPF
20280 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e  LAG_SAVEPOSITION
20290 20 3d 3d 20 42 54 52 45 45 5f 53 41 56 45 50 4f   == BTREE_SAVEPO
202a0 53 49 54 49 4f 4e 0a 2a 2a 20 20 20 20 4f 50 46  SITION.**    OPF
202b0 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 20 20 20  LAG_AUXDELETE   
202c0 20 3d 3d 20 42 54 52 45 45 5f 41 55 58 44 45 4c   == BTREE_AUXDEL
202d0 45 54 45 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ETE.*/.#define O
202e0 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 20 20  PFLAG_NCHANGE   
202f0 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f      0x01    /* O
20300 50 5f 49 6e 73 65 72 74 3a 20 53 65 74 20 74 6f  P_Insert: Set to
20310 20 75 70 64 61 74 65 20 64 62 2d 3e 6e 43 68 61   update db->nCha
20320 6e 67 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  nge */.         
20330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20340 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
20350 6c 73 6f 20 75 73 65 64 20 69 6e 20 50 32 20 28  lso used in P2 (
20360 6e 6f 74 20 50 35 29 20 6f 66 20 4f 50 5f 44 65  not P5) of OP_De
20370 6c 65 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  lete */.#define 
20380 4f 50 46 4c 41 47 5f 45 50 48 45 4d 20 20 20 20  OPFLAG_EPHEM    
20390 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20       0x01    /* 
203a0 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 45 70 68 65 6d  OP_Column: Ephem
203b0 65 72 61 6c 20 6f 75 74 70 75 74 20 69 73 20 6f  eral output is o
203c0 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  k */.#define OPF
203d0 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 20 20  LAG_LASTROWID   
203e0 20 20 30 78 32 30 20 20 20 20 2f 2a 20 53 65 74    0x20    /* Set
203f0 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6c   to update db->l
20400 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23 64 65 66  astRowid */.#def
20410 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44  ine OPFLAG_ISUPD
20420 41 54 45 20 20 20 20 20 20 30 78 30 34 20 20 20  ATE      0x04   
20430 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49 6e 73 65   /* This OP_Inse
20440 72 74 20 69 73 20 61 6e 20 73 71 6c 20 55 50 44  rt is an sql UPD
20450 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ATE */.#define O
20460 50 46 4c 41 47 5f 41 50 50 45 4e 44 20 20 20 20  PFLAG_APPEND    
20470 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20 54      0x08    /* T
20480 68 69 73 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f  his is likely to
20490 20 62 65 20 61 6e 20 61 70 70 65 6e 64 20 2a 2f   be an append */
204a0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
204b0 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 30 78  USESEEKRESULT 0x
204c0 31 30 20 20 20 20 2f 2a 20 54 72 79 20 74 6f 20  10    /* Try to 
204d0 61 76 6f 69 64 20 61 20 73 65 65 6b 20 69 6e 20  avoid a seek in 
204e0 42 74 72 65 65 49 6e 73 65 72 74 28 29 20 2a 2f  BtreeInsert() */
204f0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
20500 4e 41 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f  NABLE_PREUPDATE_
20510 48 4f 4f 4b 0a 23 64 65 66 69 6e 65 20 4f 50 46  HOOK.#define OPF
20520 4c 41 47 5f 49 53 4e 4f 4f 50 20 20 20 20 20 20  LAG_ISNOOP      
20530 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f    0x40    /* OP_
20540 44 65 6c 65 74 65 20 64 6f 65 73 20 70 72 65 2d  Delete does pre-
20550 75 70 64 61 74 65 2d 68 6f 6f 6b 20 6f 6e 6c 79  update-hook only
20560 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 64 65 66 69   */.#endif.#defi
20570 6e 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48  ne OPFLAG_LENGTH
20580 41 52 47 20 20 20 20 20 30 78 34 30 20 20 20 20  ARG     0x40    
20590 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c  /* OP_Column onl
205a0 79 20 75 73 65 64 20 66 6f 72 20 6c 65 6e 67 74  y used for lengt
205b0 68 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  h() */.#define O
205c0 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 20  PFLAG_TYPEOFARG 
205d0 20 20 20 20 30 78 38 30 20 20 20 20 2f 2a 20 4f      0x80    /* O
205e0 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73  P_Column only us
205f0 65 64 20 66 6f 72 20 74 79 70 65 6f 66 28 29 20  ed for typeof() 
20600 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
20610 47 5f 42 55 4c 4b 43 53 52 20 20 20 20 20 20 20  G_BULKCSR       
20620 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 4f 70  0x01    /* OP_Op
20630 65 6e 2a 2a 20 75 73 65 64 20 74 6f 20 6f 70 65  en** used to ope
20640 6e 20 62 75 6c 6b 20 63 75 72 73 6f 72 20 2a 2f  n bulk cursor */
20650 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
20660 53 45 45 4b 45 51 20 20 20 20 20 20 20 20 30 78  SEEKEQ        0x
20670 30 32 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e  02    /* OP_Open
20680 2a 2a 20 63 75 72 73 6f 72 20 75 73 65 73 20 45  ** cursor uses E
20690 51 20 73 65 65 6b 20 6f 6e 6c 79 20 2a 2f 0a 23  Q seek only */.#
206a0 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 46 4f  define OPFLAG_FO
206b0 52 44 45 4c 45 54 45 20 20 20 20 20 30 78 30 38  RDELETE     0x08
206c0 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 20 73      /* OP_Open s
206d0 68 6f 75 6c 64 20 75 73 65 20 42 54 52 45 45 5f  hould use BTREE_
206e0 46 4f 52 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65  FORDELETE */.#de
206f0 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 32 49 53  fine OPFLAG_P2IS
20700 52 45 47 20 20 20 20 20 20 20 30 78 31 30 20 20  REG       0x10  
20710 20 20 2f 2a 20 50 32 20 74 6f 20 4f 50 5f 4f 70    /* P2 to OP_Op
20720 65 6e 2a 2a 20 69 73 20 61 20 72 65 67 69 73 74  en** is a regist
20730 65 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 23 64 65  er number */.#de
20740 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d  fine OPFLAG_PERM
20750 55 54 45 20 20 20 20 20 20 20 30 78 30 31 20 20  UTE       0x01  
20760 20 20 2f 2a 20 4f 50 5f 43 6f 6d 70 61 72 65 3a    /* OP_Compare:
20770 20 75 73 65 20 74 68 65 20 70 65 72 6d 75 74 61   use the permuta
20780 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
20790 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54  OPFLAG_SAVEPOSIT
207a0 49 4f 4e 20 20 30 78 30 32 20 20 20 20 2f 2a 20  ION  0x02    /* 
207b0 4f 50 5f 44 65 6c 65 74 65 2f 49 6e 73 65 72 74  OP_Delete/Insert
207c0 3a 20 73 61 76 65 20 63 75 72 73 6f 72 20 70 6f  : save cursor po
207d0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  s */.#define OPF
207e0 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 20 20 20  LAG_AUXDELETE   
207f0 20 20 30 78 30 34 20 20 20 20 2f 2a 20 4f 50 5f    0x04    /* OP_
20800 44 65 6c 65 74 65 3a 20 69 6e 64 65 78 20 69 6e  Delete: index in
20810 20 61 20 44 45 4c 45 54 45 20 6f 70 20 2a 2f 0a   a DELETE op */.
20820 0a 2f 2a 0a 20 2a 20 45 61 63 68 20 74 72 69 67  ./*. * Each trig
20830 67 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20 74  ger present in t
20840 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
20850 6d 61 20 69 73 20 73 74 6f 72 65 64 20 61 73 20  ma is stored as 
20860 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 20  an instance of. 
20870 2a 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  * struct Trigger
20880 2e 0a 20 2a 0a 20 2a 20 50 6f 69 6e 74 65 72 73  .. *. * Pointers
20890 20 74 6f 20 69 6e 73 74 61 6e 63 65 73 20 6f 66   to instances of
208a0 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20   struct Trigger 
208b0 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 77  are stored in tw
208c0 6f 20 77 61 79 73 2e 0a 20 2a 20 31 2e 20 49 6e  o ways.. * 1. In
208d0 20 74 68 65 20 22 74 72 69 67 48 61 73 68 22 20   the "trigHash" 
208e0 68 61 73 68 20 74 61 62 6c 65 20 28 70 61 72 74  hash table (part
208f0 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 2a   of the sqlite3*
20900 20 74 68 61 74 20 72 65 70 72 65 73 65 6e 74 73   that represents
20910 20 74 68 65 0a 20 2a 20 20 20 20 64 61 74 61 62   the. *    datab
20920 61 73 65 29 2e 20 54 68 69 73 20 61 6c 6c 6f 77  ase). This allow
20930 73 20 54 72 69 67 67 65 72 20 73 74 72 75 63 74  s Trigger struct
20940 75 72 65 73 20 74 6f 20 62 65 20 72 65 74 72 69  ures to be retri
20950 65 76 65 64 20 62 79 20 6e 61 6d 65 2e 0a 20 2a  eved by name.. *
20960 20 32 2e 20 41 6c 6c 20 74 72 69 67 67 65 72 73   2. All triggers
20970 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
20980 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20   a single table 
20990 66 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 20 6c 69  form a linked li
209a0 73 74 2c 20 75 73 69 6e 67 20 74 68 65 0a 20 2a  st, using the. *
209b0 20 20 20 20 70 4e 65 78 74 20 6d 65 6d 62 65 72      pNext member
209c0 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67   of struct Trigg
209d0 65 72 2e 20 41 20 70 6f 69 6e 74 65 72 20 74 6f  er. A pointer to
209e0 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65   the first eleme
209f0 6e 74 20 6f 66 20 74 68 65 0a 20 2a 20 20 20 20  nt of the. *    
20a00 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 20 73  linked list is s
20a10 74 6f 72 65 64 20 61 73 20 74 68 65 20 22 70 54  tored as the "pT
20a20 72 69 67 67 65 72 22 20 6d 65 6d 62 65 72 20 6f  rigger" member o
20a30 66 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64  f the associated
20a40 0a 20 2a 20 20 20 20 73 74 72 75 63 74 20 54 61  . *    struct Ta
20a50 62 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22  ble.. *. * The "
20a60 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65  step_list" membe
20a70 72 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  r points to the 
20a80 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66  first element of
20a90 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 20   a linked list. 
20aa0 2a 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  * containing the
20ab0 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
20ac0 73 70 65 63 69 66 69 65 64 20 61 73 20 74 68 65  specified as the
20ad0 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
20ae0 2e 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69  .. */.struct Tri
20af0 67 67 65 72 20 7b 0a 20 20 63 68 61 72 20 2a 7a  gger {.  char *z
20b00 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
20b10 20 2f 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20   /* The name of 
20b20 74 68 65 20 74 72 69 67 67 65 72 20 20 20 20 20  the trigger     
20b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b40 20 20 20 2a 2f 0a 20 20 63 68 61 72 20 2a 74 61     */.  char *ta
20b50 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ble;            
20b60 2f 2a 20 54 68 65 20 74 61 62 6c 65 20 6f 72 20  /* The table or 
20b70 76 69 65 77 20 74 6f 20 77 68 69 63 68 20 74 68  view to which th
20b80 65 20 74 72 69 67 67 65 72 20 61 70 70 6c 69 65  e trigger applie
20b90 73 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20  s */.  u8 op;   
20ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
20bb0 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45  * One of TK_DELE
20bc0 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54  TE, TK_UPDATE, T
20bd0 4b 5f 49 4e 53 45 52 54 20 20 20 20 20 20 20 20  K_INSERT        
20be0 20 2a 2f 0a 20 20 75 38 20 74 72 5f 74 6d 3b 20   */.  u8 tr_tm; 
20bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
20c00 20 4f 6e 65 20 6f 66 20 54 52 49 47 47 45 52 5f   One of TRIGGER_
20c10 42 45 46 4f 52 45 2c 20 54 52 49 47 47 45 52 5f  BEFORE, TRIGGER_
20c20 41 46 54 45 52 20 2a 2f 0a 20 20 45 78 70 72 20  AFTER */.  Expr 
20c30 2a 70 57 68 65 6e 3b 20 20 20 20 20 20 20 20 20  *pWhen;         
20c40 20 20 20 2f 2a 20 54 68 65 20 57 48 45 4e 20 63     /* The WHEN c
20c50 6c 61 75 73 65 20 6f 66 20 74 68 65 20 65 78 70  lause of the exp
20c60 72 65 73 73 69 6f 6e 20 28 6d 61 79 20 62 65 20  ression (may be 
20c70 4e 55 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c 69 73  NULL) */.  IdLis
20c80 74 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20 20 20  t *pColumns;    
20c90 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 73     /* If this is
20ca0 20 61 6e 20 55 50 44 41 54 45 20 4f 46 20 3c 63   an UPDATE OF <c
20cb0 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74 72 69 67  olumn-list> trig
20cc0 67 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ger,.           
20cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ce0 20 20 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69    the <column-li
20cf0 73 74 3e 20 69 73 20 73 74 6f 72 65 64 20 68 65  st> is stored he
20d00 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  re */.  Schema *
20d10 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20  pSchema;        
20d20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69  /* Schema contai
20d30 6e 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72  ning the trigger
20d40 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 54   */.  Schema *pT
20d50 61 62 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a  abSchema;     /*
20d60 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69   Schema containi
20d70 6e 67 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a  ng the table */.
20d80 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
20d90 74 65 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e  tep_list; /* Lin
20da0 6b 20 6c 69 73 74 20 6f 66 20 74 72 69 67 67 65  k list of trigge
20db0 72 20 70 72 6f 67 72 61 6d 20 73 74 65 70 73 20  r program steps 
20dc0 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20              */. 
20dd0 20 54 72 69 67 67 65 72 20 2a 70 4e 65 78 74 3b   Trigger *pNext;
20de0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74           /* Next
20df0 20 74 72 69 67 67 65 72 20 61 73 73 6f 63 69 61   trigger associa
20e00 74 65 64 20 77 69 74 68 20 74 68 65 20 74 61 62  ted with the tab
20e10 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  le */.};../*.** 
20e20 41 20 74 72 69 67 67 65 72 20 69 73 20 65 69 74  A trigger is eit
20e30 68 65 72 20 61 20 42 45 46 4f 52 45 20 6f 72 20  her a BEFORE or 
20e40 61 6e 20 41 46 54 45 52 20 74 72 69 67 67 65 72  an AFTER trigger
20e50 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
20e60 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65   constants.** de
20e70 74 65 72 6d 69 6e 65 20 77 68 69 63 68 2e 0a 2a  termine which..*
20e80 2a 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 61 72  *.** If there ar
20e90 65 20 6d 75 6c 74 69 70 6c 65 20 74 72 69 67 67  e multiple trigg
20ea0 65 72 73 2c 20 79 6f 75 20 6d 69 67 68 74 20 6f  ers, you might o
20eb0 66 20 73 6f 6d 65 20 42 45 46 4f 52 45 20 61 6e  f some BEFORE an
20ec0 64 20 73 6f 6d 65 20 41 46 54 45 52 2e 0a 2a 2a  d some AFTER..**
20ed0 20 49 6e 20 74 68 61 74 20 63 61 73 65 73 2c 20   In that cases, 
20ee0 74 68 65 20 63 6f 6e 73 74 61 6e 74 73 20 62 65  the constants be
20ef0 6c 6f 77 20 63 61 6e 20 62 65 20 4f 52 65 64 20  low can be ORed 
20f00 74 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a 23 64 65  together..*/.#de
20f10 66 69 6e 65 20 54 52 49 47 47 45 52 5f 42 45 46  fine TRIGGER_BEF
20f20 4f 52 45 20 20 31 0a 23 64 65 66 69 6e 65 20 54  ORE  1.#define T
20f30 52 49 47 47 45 52 5f 41 46 54 45 52 20 20 20 32  RIGGER_AFTER   2
20f40 0a 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74 61  ../*. * An insta
20f50 6e 63 65 20 6f 66 20 73 74 72 75 63 74 20 54 72  nce of struct Tr
20f60 69 67 67 65 72 53 74 65 70 20 69 73 20 75 73 65  iggerStep is use
20f70 64 20 74 6f 20 73 74 6f 72 65 20 61 20 73 69 6e  d to store a sin
20f80 67 6c 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  gle SQL statemen
20f90 74 0a 20 2a 20 74 68 61 74 20 69 73 20 61 20 70  t. * that is a p
20fa0 61 72 74 20 6f 66 20 61 20 74 72 69 67 67 65 72  art of a trigger
20fb0 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a 20  -program.. *. * 
20fc0 49 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72  Instances of str
20fd0 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20  uct TriggerStep 
20fe0 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20  are stored in a 
20ff0 73 69 6e 67 6c 79 20 6c 69 6e 6b 65 64 20 6c 69  singly linked li
21000 73 74 20 28 6c 69 6e 6b 65 64 0a 20 2a 20 75 73  st (linked. * us
21010 69 6e 67 20 74 68 65 20 22 70 4e 65 78 74 22 20  ing the "pNext" 
21020 6d 65 6d 62 65 72 29 20 72 65 66 65 72 65 6e 63  member) referenc
21030 65 64 20 62 79 20 74 68 65 20 22 73 74 65 70 5f  ed by the "step_
21040 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 6f 66 20  list" member of 
21050 74 68 65 0a 20 2a 20 61 73 73 6f 63 69 61 74 65  the. * associate
21060 64 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  d struct Trigger
21070 20 69 6e 73 74 61 6e 63 65 2e 20 54 68 65 20 66   instance. The f
21080 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20  irst element of 
21090 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  the linked list 
210a0 69 73 0a 20 2a 20 74 68 65 20 66 69 72 73 74 20  is. * the first 
210b0 73 74 65 70 20 6f 66 20 74 68 65 20 74 72 69 67  step of the trig
210c0 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a  ger-program.. *.
210d0 20 2a 20 54 68 65 20 22 6f 70 22 20 6d 65 6d 62   * The "op" memb
210e0 65 72 20 69 6e 64 69 63 61 74 65 73 20 77 68 65  er indicates whe
210f0 74 68 65 72 20 74 68 69 73 20 69 73 20 61 20 22  ther this is a "
21100 44 45 4c 45 54 45 22 2c 20 22 49 4e 53 45 52 54  DELETE", "INSERT
21110 22 2c 20 22 55 50 44 41 54 45 22 20 6f 72 0a 20  ", "UPDATE" or. 
21120 2a 20 22 53 45 4c 45 43 54 22 20 73 74 61 74 65  * "SELECT" state
21130 6d 65 6e 74 2e 20 54 68 65 20 6d 65 61 6e 69 6e  ment. The meanin
21140 67 73 20 6f 66 20 74 68 65 20 6f 74 68 65 72 20  gs of the other 
21150 6d 65 6d 62 65 72 73 20 69 73 20 64 65 74 65 72  members is deter
21160 6d 69 6e 65 64 20 62 79 20 74 68 65 0a 20 2a 20  mined by the. * 
21170 76 61 6c 75 65 20 6f 66 20 22 6f 70 22 20 61 73  value of "op" as
21180 20 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20   follows:. *. * 
21190 28 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53 45 52 54  (op == TK_INSERT
211a0 29 0a 20 2a 20 6f 72 63 6f 6e 66 20 20 20 20 2d  ). * orconf    -
211b0 3e 20 73 74 6f 72 65 73 20 74 68 65 20 4f 4e 20  > stores the ON 
211c0 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74  CONFLICT algorit
211d0 68 6d 0a 20 2a 20 70 53 65 6c 65 63 74 20 20 20  hm. * pSelect   
211e0 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e  -> If this is an
211f0 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e   INSERT INTO ...
21200 20 53 45 4c 45 43 54 20 2e 2e 2e 20 73 74 61 74   SELECT ... stat
21210 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20  ement, then. *  
21220 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
21230 20 73 74 6f 72 65 73 20 61 20 70 6f 69 6e 74 65   stores a pointe
21240 72 20 74 6f 20 74 68 65 20 53 45 4c 45 43 54 20  r to the SELECT 
21250 73 74 61 74 65 6d 65 6e 74 2e 20 4f 74 68 65 72  statement. Other
21260 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 7a 54  wise NULL.. * zT
21270 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f  arget   -> Dequo
21280 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  ted name of the 
21290 74 61 62 6c 65 20 74 6f 20 69 6e 73 65 72 74 20  table to insert 
212a0 69 6e 74 6f 2e 0a 20 2a 20 70 45 78 70 72 4c 69  into.. * pExprLi
212b0 73 74 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73  st -> If this is
212c0 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20   an INSERT INTO 
212d0 2e 2e 2e 20 56 41 4c 55 45 53 20 2e 2e 2e 20 73  ... VALUES ... s
212e0 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20  tatement, then. 
212f0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  *              t
21300 68 69 73 20 73 74 6f 72 65 73 20 76 61 6c 75 65  his stores value
21310 73 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64  s to be inserted
21320 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c  . Otherwise NULL
21330 2e 0a 20 2a 20 70 49 64 4c 69 73 74 20 20 20 2d  .. * pIdList   -
21340 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20  > If this is an 
21350 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20  INSERT INTO ... 
21360 28 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29  (<column-names>)
21370 20 56 41 4c 55 45 53 20 2e 2e 2e 0a 20 2a 20 20   VALUES .... *  
21380 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74              stat
21390 65 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 69 73  ement, then this
213a0 20 73 74 6f 72 65 73 20 74 68 65 20 63 6f 6c 75   stores the colu
213b0 6d 6e 2d 6e 61 6d 65 73 20 74 6f 20 62 65 0a 20  mn-names to be. 
213c0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  *              i
213d0 6e 73 65 72 74 65 64 20 69 6e 74 6f 2e 0a 20 2a  nserted into.. *
213e0 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 44 45  . * (op == TK_DE
213f0 4c 45 54 45 29 0a 20 2a 20 7a 54 61 72 67 65 74  LETE). * zTarget
21400 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e     -> Dequoted n
21410 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
21420 20 74 6f 20 64 65 6c 65 74 65 20 66 72 6f 6d 2e   to delete from.
21430 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e  . * pWhere    ->
21440 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   The WHERE claus
21450 65 20 6f 66 20 74 68 65 20 44 45 4c 45 54 45 20  e of the DELETE 
21460 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65  statement if one
21470 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20   is specified.. 
21480 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f  *              O
21490 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20  therwise NULL.. 
214a0 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 55  *. * (op == TK_U
214b0 50 44 41 54 45 29 0a 20 2a 20 7a 54 61 72 67 65  PDATE). * zTarge
214c0 74 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20  t   -> Dequoted 
214d0 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
214e0 65 20 74 6f 20 75 70 64 61 74 65 2e 0a 20 2a 20  e to update.. * 
214f0 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65  pWhere    -> The
21500 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66   WHERE clause of
21510 20 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74   the UPDATE stat
21520 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20  ement if one is 
21530 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20  specified.. *   
21540 20 20 20 20 20 20 20 20 20 20 20 4f 74 68 65 72             Other
21550 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45  wise NULL.. * pE
21560 78 70 72 4c 69 73 74 20 2d 3e 20 41 20 6c 69 73  xprList -> A lis
21570 74 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73  t of the columns
21580 20 74 6f 20 75 70 64 61 74 65 20 61 6e 64 20 74   to update and t
21590 68 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74  he expressions t
215a0 6f 20 75 70 64 61 74 65 0a 20 2a 20 20 20 20 20  o update. *     
215b0 20 20 20 20 20 20 20 20 20 74 68 65 6d 20 74 6f           them to
215c0 2e 20 53 65 65 20 73 71 6c 69 74 65 33 55 70 64  . See sqlite3Upd
215d0 61 74 65 28 29 20 64 6f 63 75 6d 65 6e 74 61 74  ate() documentat
215e0 69 6f 6e 20 6f 66 20 22 70 43 68 61 6e 67 65 73  ion of "pChanges
215f0 22 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  ". *            
21600 20 20 61 72 67 75 6d 65 6e 74 2e 0a 20 2a 0a 20    argument.. *. 
21610 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65  */.struct Trigge
21620 72 53 74 65 70 20 7b 0a 20 20 75 38 20 6f 70 3b  rStep {.  u8 op;
21630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
21640 2a 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45  * One of TK_DELE
21650 54 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54  TE, TK_UPDATE, T
21660 4b 5f 49 4e 53 45 52 54 2c 20 54 4b 5f 53 45 4c  K_INSERT, TK_SEL
21670 45 43 54 20 2a 2f 0a 20 20 75 38 20 6f 72 63 6f  ECT */.  u8 orco
21680 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  nf;           /*
21690 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 65 74 63   OE_Rollback etc
216a0 2e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a  . */.  Trigger *
216b0 70 54 72 69 67 3b 20 20 20 20 20 20 2f 2a 20 54  pTrig;      /* T
216c0 68 65 20 74 72 69 67 67 65 72 20 74 68 61 74 20  he trigger that 
216d0 74 68 69 73 20 73 74 65 70 20 69 73 20 61 20 70  this step is a p
216e0 61 72 74 20 6f 66 20 2a 2f 0a 20 20 53 65 6c 65  art of */.  Sele
216f0 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20  ct *pSelect;    
21700 20 2f 2a 20 53 45 4c 45 43 54 20 73 74 61 74 65   /* SELECT state
21710 6d 65 6e 74 20 6f 72 20 52 48 53 20 6f 66 20 49  ment or RHS of I
21720 4e 53 45 52 54 20 49 4e 54 4f 20 53 45 4c 45 43  NSERT INTO SELEC
21730 54 20 2e 2e 2e 20 2a 2f 0a 20 20 63 68 61 72 20  T ... */.  char 
21740 2a 7a 54 61 72 67 65 74 3b 20 20 20 20 20 20 20  *zTarget;       
21750 2f 2a 20 54 61 72 67 65 74 20 74 61 62 6c 65 20  /* Target table 
21760 66 6f 72 20 44 45 4c 45 54 45 2c 20 55 50 44 41  for DELETE, UPDA
21770 54 45 2c 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20  TE, INSERT */.  
21780 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20  Expr *pWhere;   
21790 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52       /* The WHER
217a0 45 20 63 6c 61 75 73 65 20 66 6f 72 20 44 45 4c  E clause for DEL
217b0 45 54 45 20 6f 72 20 55 50 44 41 54 45 20 73 74  ETE or UPDATE st
217c0 65 70 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  eps */.  ExprLis
217d0 74 20 2a 70 45 78 70 72 4c 69 73 74 3b 20 2f 2a  t *pExprList; /*
217e0 20 53 45 54 20 63 6c 61 75 73 65 20 66 6f 72 20   SET clause for 
217f0 55 50 44 41 54 45 2e 20 2a 2f 0a 20 20 49 64 4c  UPDATE. */.  IdL
21800 69 73 74 20 2a 70 49 64 4c 69 73 74 3b 20 20 20  ist *pIdList;   
21810 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65    /* Column name
21820 73 20 66 6f 72 20 49 4e 53 45 52 54 20 2a 2f 0a  s for INSERT */.
21830 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 70    TriggerStep *p
21840 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 69  Next;  /* Next i
21850 6e 20 74 68 65 20 6c 69 6e 6b 2d 6c 69 73 74 20  n the link-list 
21860 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  */.  TriggerStep
21870 20 2a 70 4c 61 73 74 3b 20 20 2f 2a 20 4c 61 73   *pLast;  /* Las
21880 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 6e  t element in lin
21890 6b 2d 6c 69 73 74 2e 20 56 61 6c 69 64 20 66 6f  k-list. Valid fo
218a0 72 20 31 73 74 20 65 6c 65 6d 20 6f 6e 6c 79 20  r 1st elem only 
218b0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
218c0 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
218d0 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e  ture contains in
218e0 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 62  formation used b
218f0 79 20 74 68 65 20 73 71 6c 69 74 65 46 69 78 2e  y the sqliteFix.
21900 2e 2e 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 61  ...** routines a
21910 73 20 74 68 65 79 20 77 61 6c 6b 20 74 68 65 20  s they walk the 
21920 70 61 72 73 65 20 74 72 65 65 20 74 6f 20 6d 61  parse tree to ma
21930 6b 65 20 64 61 74 61 62 61 73 65 20 72 65 66 65  ke database refe
21940 72 65 6e 63 65 73 0a 2a 2a 20 65 78 70 6c 69 63  rences.** explic
21950 69 74 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  it..*/.typedef s
21960 74 72 75 63 74 20 44 62 46 69 78 65 72 20 44 62  truct DbFixer Db
21970 46 69 78 65 72 3b 0a 73 74 72 75 63 74 20 44 62  Fixer;.struct Db
21980 46 69 78 65 72 20 7b 0a 20 20 50 61 72 73 65 20  Fixer {.  Parse 
21990 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 2f 2a  *pParse;      /*
219a0 20 54 68 65 20 70 61 72 73 69 6e 67 20 63 6f 6e   The parsing con
219b0 74 65 78 74 2e 20 20 45 72 72 6f 72 20 6d 65 73  text.  Error mes
219c0 73 61 67 65 73 20 77 72 69 74 74 65 6e 20 68 65  sages written he
219d0 72 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a  re */.  Schema *
219e0 70 53 63 68 65 6d 61 3b 20 20 20 20 2f 2a 20 46  pSchema;    /* F
219f0 69 78 20 69 74 65 6d 73 20 74 6f 20 74 68 69 73  ix items to this
21a00 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74   schema */.  int
21a10 20 62 56 61 72 4f 6e 6c 79 3b 20 20 20 20 20 20   bVarOnly;      
21a20 20 2f 2a 20 43 68 65 63 6b 20 66 6f 72 20 76 61   /* Check for va
21a30 72 69 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65  riable reference
21a40 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 63 6f 6e 73  s only */.  cons
21a50 74 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 20 20  t char *zDb;    
21a60 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c  /* Make sure all
21a70 20 6f 62 6a 65 63 74 73 20 61 72 65 20 63 6f 6e   objects are con
21a80 74 61 69 6e 65 64 20 69 6e 20 74 68 69 73 20 64  tained in this d
21a90 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e  atabase */.  con
21aa0 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20  st char *zType; 
21ab0 20 2f 2a 20 54 79 70 65 20 6f 66 20 74 68 65 20   /* Type of the 
21ac0 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64  container - used
21ad0 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61   for error messa
21ae0 67 65 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54  ges */.  const T
21af0 6f 6b 65 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20  oken *pName; /* 
21b00 4e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 74  Name of the cont
21b10 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72  ainer - used for
21b20 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
21b30 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
21b40 6f 62 6a 65 63 74 65 64 20 75 73 65 64 20 74 6f  objected used to
21b50 20 61 63 63 75 6d 75 6c 61 74 65 20 74 68 65 20   accumulate the 
21b60 74 65 78 74 20 6f 66 20 61 20 73 74 72 69 6e 67  text of a string
21b70 20 77 68 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20   where we.** do 
21b80 6e 6f 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20  not necessarily 
21b90 6b 6e 6f 77 20 68 6f 77 20 62 69 67 20 74 68 65  know how big the
21ba0 20 73 74 72 69 6e 67 20 77 69 6c 6c 20 62 65 20   string will be 
21bb0 69 6e 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73  in the end..*/.s
21bc0 74 72 75 63 74 20 53 74 72 41 63 63 75 6d 20 7b  truct StrAccum {
21bd0 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
21be0 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 74 69 6f          /* Optio
21bf0 6e 61 6c 20 64 61 74 61 62 61 73 65 20 66 6f 72  nal database for
21c00 20 6c 6f 6f 6b 61 73 69 64 65 2e 20 20 43 61 6e   lookaside.  Can
21c10 20 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68   be NULL */.  ch
21c20 61 72 20 2a 7a 42 61 73 65 3b 20 20 20 20 20 20  ar *zBase;      
21c30 20 20 20 2f 2a 20 41 20 62 61 73 65 20 61 6c 6c     /* A base all
21c40 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 20 66 72  ocation.  Not fr
21c50 6f 6d 20 6d 61 6c 6c 6f 63 2e 20 2a 2f 0a 20 20  om malloc. */.  
21c60 63 68 61 72 20 2a 7a 54 65 78 74 3b 20 20 20 20  char *zText;    
21c70 20 20 20 20 20 2f 2a 20 54 68 65 20 73 74 72 69       /* The stri
21c80 6e 67 20 63 6f 6c 6c 65 63 74 65 64 20 73 6f 20  ng collected so 
21c90 66 61 72 20 2a 2f 0a 20 20 75 33 32 20 20 6e 43  far */.  u32  nC
21ca0 68 61 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  har;          /*
21cb0 20 4c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73   Length of the s
21cc0 74 72 69 6e 67 20 73 6f 20 66 61 72 20 2a 2f 0a  tring so far */.
21cd0 20 20 75 33 32 20 20 6e 41 6c 6c 6f 63 3b 20 20    u32  nAlloc;  
21ce0 20 20 20 20 20 20 20 2f 2a 20 41 6d 6f 75 6e 74         /* Amount
21cf0 20 6f 66 20 73 70 61 63 65 20 61 6c 6c 6f 63 61   of space alloca
21d00 74 65 64 20 69 6e 20 7a 54 65 78 74 20 2a 2f 0a  ted in zText */.
21d10 20 20 75 33 32 20 20 6d 78 41 6c 6c 6f 63 3b 20    u32  mxAlloc; 
21d20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75         /* Maximu
21d30 6d 20 61 6c 6c 6f 77 65 64 20 61 6c 6c 6f 63 61  m allowed alloca
21d40 74 69 6f 6e 2e 20 20 30 20 66 6f 72 20 6e 6f 20  tion.  0 for no 
21d50 6d 61 6c 6c 6f 63 20 75 73 61 67 65 20 2a 2f 0a  malloc usage */.
21d60 20 20 75 38 20 20 20 61 63 63 45 72 72 6f 72 3b    u8   accError;
21d70 20 20 20 20 20 20 20 2f 2a 20 53 54 52 41 43 43         /* STRACC
21d80 55 4d 5f 4e 4f 4d 45 4d 20 6f 72 20 53 54 52 41  UM_NOMEM or STRA
21d90 43 43 55 4d 5f 54 4f 4f 42 49 47 20 2a 2f 0a 20  CCUM_TOOBIG */. 
21da0 20 75 38 20 20 20 70 72 69 6e 74 66 46 6c 61 67   u8   printfFlag
21db0 73 3b 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f  s;    /* SQLITE_
21dc0 50 52 49 4e 54 46 20 66 6c 61 67 73 20 62 65 6c  PRINTF flags bel
21dd0 6f 77 20 2a 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65  ow */.};.#define
21de0 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20   STRACCUM_NOMEM 
21df0 20 20 31 0a 23 64 65 66 69 6e 65 20 53 54 52 41    1.#define STRA
21e00 43 43 55 4d 5f 54 4f 4f 42 49 47 20 20 32 0a 23  CCUM_TOOBIG  2.#
21e10 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52  define SQLITE_PR
21e20 49 4e 54 46 5f 49 4e 54 45 52 4e 41 4c 20 30 78  INTF_INTERNAL 0x
21e30 30 31 20 20 2f 2a 20 49 6e 74 65 72 6e 61 6c 2d  01  /* Internal-
21e40 75 73 65 2d 6f 6e 6c 79 20 63 6f 6e 76 65 72 74  use-only convert
21e50 65 72 73 20 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23  ers allowed */.#
21e60 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52  define SQLITE_PR
21e70 49 4e 54 46 5f 53 51 4c 46 55 4e 43 20 20 30 78  INTF_SQLFUNC  0x
21e80 30 32 20 20 2f 2a 20 53 51 4c 20 66 75 6e 63 74  02  /* SQL funct
21e90 69 6f 6e 20 61 72 67 75 6d 65 6e 74 73 20 74 6f  ion arguments to
21ea0 20 56 58 50 72 69 6e 74 66 20 2a 2f 0a 23 64 65   VXPrintf */.#de
21eb0 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e  fine SQLITE_PRIN
21ec0 54 46 5f 4d 41 4c 4c 4f 43 45 44 20 30 78 30 34  TF_MALLOCED 0x04
21ed0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 78 54 65    /* True if xTe
21ee0 78 74 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20  xt is allocated 
21ef0 73 70 61 63 65 20 2a 2f 0a 0a 23 64 65 66 69 6e  space */..#defin
21f00 65 20 69 73 4d 61 6c 6c 6f 63 65 64 28 58 29 20  e isMalloced(X) 
21f10 20 28 28 28 58 29 2d 3e 70 72 69 6e 74 66 46 6c   (((X)->printfFl
21f20 61 67 73 20 26 20 53 51 4c 49 54 45 5f 50 52 49  ags & SQLITE_PRI
21f30 4e 54 46 5f 4d 41 4c 4c 4f 43 45 44 29 21 3d 30  NTF_MALLOCED)!=0
21f40 29 0a 0a 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69 6e  ).../*.** A poin
21f50 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72 75  ter to this stru
21f60 63 74 75 72 65 20 69 73 20 75 73 65 64 20 74 6f  cture is used to
21f70 20 63 6f 6d 6d 75 6e 69 63 61 74 65 20 69 6e 66   communicate inf
21f80 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f 6d  ormation.** from
21f90 20 73 71 6c 69 74 65 33 49 6e 69 74 20 61 6e 64   sqlite3Init and
21fa0 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61 20   OP_ParseSchema 
21fb0 69 6e 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33  into the sqlite3
21fc0 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f  InitCallback..*/
21fd0 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
21fe0 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
21ff0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64          /* The d
22000 61 74 61 62 61 73 65 20 62 65 69 6e 67 20 69 6e  atabase being in
22010 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 63  itialized */.  c
22020 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67 3b 20  har **pzErrMsg; 
22030 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73     /* Error mess
22040 61 67 65 20 73 74 6f 72 65 64 20 68 65 72 65 20  age stored here 
22050 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20  */.  int iDb;   
22060 20 20 20 20 20 20 20 20 20 2f 2a 20 30 20 66 6f           /* 0 fo
22070 72 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e  r main database.
22080 20 20 31 20 66 6f 72 20 54 45 4d 50 2c 20 32 2e    1 for TEMP, 2.
22090 2e 20 66 6f 72 20 41 54 54 41 43 48 65 64 20 2a  . for ATTACHed *
220a0 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20  /.  int rc;     
220b0 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c          /* Resul
220c0 74 20 63 6f 64 65 20 73 74 6f 72 65 64 20 68 65  t code stored he
220d0 72 65 20 2a 2f 0a 7d 20 49 6e 69 74 44 61 74 61  re */.} InitData
220e0 3b 0a 0a 2f 2a 0a 2a 2a 20 53 74 72 75 63 74 75  ;../*.** Structu
220f0 72 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 67 6c  re containing gl
22100 6f 62 61 6c 20 63 6f 6e 66 69 67 75 72 61 74 69  obal configurati
22110 6f 6e 20 64 61 74 61 20 66 6f 72 20 74 68 65 20  on data for the 
22120 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 0a  SQLite library..
22130 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63  **.** This struc
22140 74 75 72 65 20 61 6c 73 6f 20 63 6f 6e 74 61 69  ture also contai
22150 6e 73 20 73 6f 6d 65 20 73 74 61 74 65 20 69 6e  ns some state in
22160 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74  formation..*/.st
22170 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66  ruct Sqlite3Conf
22180 69 67 20 7b 0a 20 20 69 6e 74 20 62 4d 65 6d 73  ig {.  int bMems
22190 74 61 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  tat;            
221a0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
221b0 20 74 6f 20 65 6e 61 62 6c 65 20 6d 65 6d 6f 72   to enable memor
221c0 79 20 73 74 61 74 75 73 20 2a 2f 0a 20 20 69 6e  y status */.  in
221d0 74 20 62 43 6f 72 65 4d 75 74 65 78 3b 20 20 20  t bCoreMutex;   
221e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
221f0 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c  /* True to enabl
22200 65 20 63 6f 72 65 20 6d 75 74 65 78 69 6e 67 20  e core mutexing 
22210 2a 2f 0a 20 20 69 6e 74 20 62 46 75 6c 6c 4d 75  */.  int bFullMu
22220 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  tex;            
22230 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
22240 6f 20 65 6e 61 62 6c 65 20 66 75 6c 6c 20 6d 75  o enable full mu
22250 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  texing */.  int 
22260 62 4f 70 65 6e 55 72 69 3b 20 20 20 20 20 20 20  bOpenUri;       
22270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
22280 20 54 72 75 65 20 74 6f 20 69 6e 74 65 72 70 72   True to interpr
22290 65 74 20 66 69 6c 65 6e 61 6d 65 73 20 61 73 20  et filenames as 
222a0 55 52 49 73 20 2a 2f 0a 20 20 69 6e 74 20 62 55  URIs */.  int bU
222b0 73 65 43 69 73 3b 20 20 20 20 20 20 20 20 20 20  seCis;          
222c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55              /* U
222d0 73 65 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 69  se covering indi
222e0 63 65 73 20 66 6f 72 20 66 75 6c 6c 2d 73 63 61  ces for full-sca
222f0 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 53 74  ns */.  int mxSt
22300 72 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20  rlen;           
22310 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78            /* Max
22320 69 6d 75 6d 20 73 74 72 69 6e 67 20 6c 65 6e 67  imum string leng
22330 74 68 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 76 65  th */.  int neve
22340 72 43 6f 72 72 75 70 74 3b 20 20 20 20 20 20 20  rCorrupt;       
22350 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74            /* Dat
22360 61 62 61 73 65 20 69 73 20 61 6c 77 61 79 73 20  abase is always 
22370 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 2a 2f 0a 20  well-formed */. 
22380 20 69 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69 64 65   int szLookaside
22390 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
223a0 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f     /* Default lo
223b0 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72 20 73  okaside buffer s
223c0 69 7a 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f  ize */.  int nLo
223d0 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20  okaside;        
223e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
223f0 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20  fault lookaside 
22400 62 75 66 66 65 72 20 63 6f 75 6e 74 20 2a 2f 0a  buffer count */.
22410 20 20 69 6e 74 20 6e 53 74 6d 74 53 70 69 6c 6c    int nStmtSpill
22420 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
22430 20 20 20 20 2f 2a 20 53 74 6d 74 2d 6a 6f 75 72      /* Stmt-jour
22440 6e 61 6c 20 73 70 69 6c 6c 2d 74 6f 2d 64 69 73  nal spill-to-dis
22450 6b 20 74 68 72 65 73 68 6f 6c 64 20 2a 2f 0a 20  k threshold */. 
22460 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74   sqlite3_mem_met
22470 68 6f 64 73 20 6d 3b 20 20 20 20 20 20 20 20 20  hods m;         
22480 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20     /* Low-level 
22490 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
224a0 6e 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20  n interface */. 
224b0 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d   sqlite3_mutex_m
224c0 65 74 68 6f 64 73 20 6d 75 74 65 78 3b 20 20 20  ethods mutex;   
224d0 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20     /* Low-level 
224e0 6d 75 74 65 78 20 69 6e 74 65 72 66 61 63 65 20  mutex interface 
224f0 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 70 63 61  */.  sqlite3_pca
22500 63 68 65 5f 6d 65 74 68 6f 64 73 32 20 70 63 61  che_methods2 pca
22510 63 68 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65  che2;  /* Low-le
22520 76 65 6c 20 70 61 67 65 2d 63 61 63 68 65 20 69  vel page-cache i
22530 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 76 6f  nterface */.  vo
22540 69 64 20 2a 70 48 65 61 70 3b 20 20 20 20 20 20  id *pHeap;      
22550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22560 2f 2a 20 48 65 61 70 20 73 74 6f 72 61 67 65 20  /* Heap storage 
22570 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  space */.  int n
22580 48 65 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Heap;           
22590 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
225a0 53 69 7a 65 20 6f 66 20 70 48 65 61 70 5b 5d 20  Size of pHeap[] 
225b0 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 71 2c 20  */.  int mnReq, 
225c0 6d 78 52 65 71 3b 20 20 20 20 20 20 20 20 20 20  mxReq;          
225d0 20 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20 61 6e         /* Min an
225e0 64 20 6d 61 78 20 68 65 61 70 20 72 65 71 75 65  d max heap reque
225f0 73 74 73 20 73 69 7a 65 73 20 2a 2f 0a 20 20 73  sts sizes */.  s
22600 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 7a 4d  qlite3_int64 szM
22610 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  map;            
22620 20 2f 2a 20 6d 6d 61 70 28 29 20 73 70 61 63 65   /* mmap() space
22630 20 70 65 72 20 6f 70 65 6e 20 66 69 6c 65 20 2a   per open file *
22640 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36  /.  sqlite3_int6
22650 34 20 6d 78 4d 6d 61 70 3b 20 20 20 20 20 20 20  4 mxMmap;       
22660 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d        /* Maximum
22670 20 76 61 6c 75 65 20 66 6f 72 20 73 7a 4d 6d 61   value for szMma
22680 70 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 63  p */.  void *pSc
22690 72 61 74 63 68 3b 20 20 20 20 20 20 20 20 20 20  ratch;          
226a0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 63 72 61           /* Scra
226b0 74 63 68 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20  tch memory */.  
226c0 69 6e 74 20 73 7a 53 63 72 61 74 63 68 3b 20 20  int szScratch;  
226d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
226e0 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63    /* Size of eac
226f0 68 20 73 63 72 61 74 63 68 20 62 75 66 66 65 72  h scratch buffer
22700 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 63 72 61 74   */.  int nScrat
22710 63 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ch;             
22720 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
22730 72 20 6f 66 20 73 63 72 61 74 63 68 20 62 75 66  r of scratch buf
22740 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  fers */.  void *
22750 70 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20  pPage;          
22760 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
22770 61 67 65 20 63 61 63 68 65 20 6d 65 6d 6f 72 79  age cache memory
22780 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 50 61 67 65   */.  int szPage
22790 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
227a0 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
227b0 6f 66 20 65 61 63 68 20 70 61 67 65 20 69 6e 20  of each page in 
227c0 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74  pPage[] */.  int
227d0 20 6e 50 61 67 65 3b 20 20 20 20 20 20 20 20 20   nPage;         
227e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
227f0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  * Number of page
22800 73 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a  s in pPage[] */.
22810 20 20 69 6e 74 20 6d 78 50 61 72 73 65 72 53 74    int mxParserSt
22820 61 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20  ack;            
22830 20 20 20 20 2f 2a 20 6d 61 78 69 6d 75 6d 20 64      /* maximum d
22840 65 70 74 68 20 6f 66 20 74 68 65 20 70 61 72 73  epth of the pars
22850 65 72 20 73 74 61 63 6b 20 2a 2f 0a 20 20 69 6e  er stack */.  in
22860 74 20 73 68 61 72 65 64 43 61 63 68 65 45 6e 61  t sharedCacheEna
22870 62 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  bled;           
22880 2f 2a 20 74 72 75 65 20 69 66 20 73 68 61 72 65  /* true if share
22890 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 65 6e 61  d-cache mode ena
228a0 62 6c 65 64 20 2a 2f 0a 20 20 75 33 32 20 73 7a  bled */.  u32 sz
228b0 50 6d 61 3b 20 20 20 20 20 20 20 20 20 20 20 20  Pma;            
228c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
228d0 61 78 69 6d 75 6d 20 53 6f 72 74 65 72 20 50 4d  aximum Sorter PM
228e0 41 20 73 69 7a 65 20 2a 2f 0a 20 20 2f 2a 20 54  A size */.  /* T
228f0 68 65 20 61 62 6f 76 65 20 6d 69 67 68 74 20 62  he above might b
22900 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f  e initialized to
22910 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 54 68 65 20   non-zero.  The 
22920 66 6f 6c 6c 6f 77 69 6e 67 20 6e 65 65 64 20 74  following need t
22930 6f 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20 69 6e  o always.  ** in
22940 69 74 69 61 6c 6c 79 20 62 65 20 7a 65 72 6f 2c  itially be zero,
22950 20 68 6f 77 65 76 65 72 2e 20 2a 2f 0a 20 20 69   however. */.  i
22960 6e 74 20 69 73 49 6e 69 74 3b 20 20 20 20 20 20  nt isInit;      
22970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22980 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 69   /* True after i
22990 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 68 61  nitialization ha
229a0 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20  s finished */.  
229b0 69 6e 74 20 69 6e 50 72 6f 67 72 65 73 73 3b 20  int inProgress; 
229c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
229d0 20 20 2f 2a 20 54 72 75 65 20 77 68 69 6c 65 20    /* True while 
229e0 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69  initialization i
229f0 6e 20 70 72 6f 67 72 65 73 73 20 2a 2f 0a 20 20  n progress */.  
22a00 69 6e 74 20 69 73 4d 75 74 65 78 49 6e 69 74 3b  int isMutexInit;
22a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20    /* True after 
22a30 6d 75 74 65 78 65 73 20 61 72 65 20 69 6e 69 74  mutexes are init
22a40 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74  ialized */.  int
22a50 20 69 73 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20 20   isMallocInit;  
22a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22a70 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c  * True after mal
22a80 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a  loc is initializ
22a90 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 50 43  ed */.  int isPC
22aa0 61 63 68 65 49 6e 69 74 3b 20 20 20 20 20 20 20  acheInit;       
22ab0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
22ac0 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69  e after malloc i
22ad0 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  s initialized */
22ae0 0a 20 20 69 6e 74 20 6e 52 65 66 49 6e 69 74 4d  .  int nRefInitM
22af0 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20  utex;           
22b00 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
22b10 66 20 75 73 65 72 73 20 6f 66 20 70 49 6e 69 74  f users of pInit
22b20 4d 75 74 65 78 20 2a 2f 0a 20 20 73 71 6c 69 74  Mutex */.  sqlit
22b30 65 33 5f 6d 75 74 65 78 20 2a 70 49 6e 69 74 4d  e3_mutex *pInitM
22b40 75 74 65 78 3b 20 20 20 20 20 20 20 20 2f 2a 20  utex;        /* 
22b50 4d 75 74 65 78 20 75 73 65 64 20 62 79 20 73 71  Mutex used by sq
22b60 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65  lite3_initialize
22b70 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  () */.  void (*x
22b80 4c 6f 67 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63  Log)(void*,int,c
22b90 6f 6e 73 74 20 63 68 61 72 2a 29 3b 20 2f 2a 20  onst char*); /* 
22ba0 46 75 6e 63 74 69 6f 6e 20 66 6f 72 20 6c 6f 67  Function for log
22bb0 67 69 6e 67 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  ging */.  void *
22bc0 70 4c 6f 67 41 72 67 3b 20 20 20 20 20 20 20 20  pLogArg;        
22bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22be0 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74  * First argument
22bf0 20 74 6f 20 78 4c 6f 67 28 29 20 2a 2f 0a 23 69   to xLog() */.#i
22c00 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
22c10 4c 45 5f 53 51 4c 4c 4f 47 0a 20 20 76 6f 69 64  LE_SQLLOG.  void
22c20 28 2a 78 53 71 6c 6c 6f 67 29 28 76 6f 69 64 2a  (*xSqllog)(void*
22c30 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  ,sqlite3*,const 
22c40 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 20 20 76  char*, int);.  v
22c50 6f 69 64 20 2a 70 53 71 6c 6c 6f 67 41 72 67 3b  oid *pSqllogArg;
22c60 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53  .#endif.#ifdef S
22c70 51 4c 49 54 45 5f 56 44 42 45 5f 43 4f 56 45 52  QLITE_VDBE_COVER
22c80 41 47 45 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c  AGE.  /* The fol
22c90 6c 6f 77 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20  lowing callback 
22ca0 28 69 66 20 6e 6f 74 20 4e 55 4c 4c 29 20 69 73  (if not NULL) is
22cb0 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 65 76 65 72   invoked on ever
22cc0 79 20 56 44 42 45 20 62 72 61 6e 63 68 0a 20 20  y VDBE branch.  
22cd0 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 53  ** operation.  S
22ce0 65 74 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20  et the callback 
22cf0 75 73 69 6e 67 20 53 51 4c 49 54 45 5f 54 45 53  using SQLITE_TES
22d00 54 43 54 52 4c 5f 56 44 42 45 5f 43 4f 56 45 52  TCTRL_VDBE_COVER
22d10 41 47 45 2e 0a 20 20 2a 2f 0a 20 20 76 6f 69 64  AGE..  */.  void
22d20 20 28 2a 78 56 64 62 65 42 72 61 6e 63 68 29 28   (*xVdbeBranch)(
22d30 76 6f 69 64 2a 2c 69 6e 74 20 69 53 72 63 4c 69  void*,int iSrcLi
22d40 6e 65 2c 75 38 20 65 54 68 69 73 2c 75 38 20 65  ne,u8 eThis,u8 e
22d50 4d 78 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63  Mx);  /* Callbac
22d60 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 56 64  k */.  void *pVd
22d70 62 65 42 72 61 6e 63 68 41 72 67 3b 20 20 20 20  beBranchArg;    
22d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22da0 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74   /* 1st argument
22db0 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64   */.#endif.#ifnd
22dc0 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54  ef SQLITE_UNTEST
22dd0 41 42 4c 45 0a 20 20 69 6e 74 20 28 2a 78 54 65  ABLE.  int (*xTe
22de0 73 74 43 61 6c 6c 62 61 63 6b 29 28 69 6e 74 29  stCallback)(int)
22df0 3b 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 76 6f  ;        /* Invo
22e00 6b 65 64 20 62 79 20 73 71 6c 69 74 65 33 46 61  ked by sqlite3Fa
22e10 75 6c 74 53 69 6d 28 29 20 2a 2f 0a 23 65 6e 64  ultSim() */.#end
22e20 69 66 0a 20 20 69 6e 74 20 62 4c 6f 63 61 6c 74  if.  int bLocalt
22e30 69 6d 65 46 61 75 6c 74 3b 20 20 20 20 20 20 20  imeFault;       
22e40 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
22e50 6f 20 66 61 69 6c 20 6c 6f 63 61 6c 74 69 6d 65  o fail localtime
22e60 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 20 20 69 6e  () calls */.  in
22e70 74 20 69 4f 6e 63 65 52 65 73 65 74 54 68 72 65  t iOnceResetThre
22e80 73 68 6f 6c 64 3b 20 20 20 20 20 20 20 20 20 20  shold;          
22e90 2f 2a 20 57 68 65 6e 20 74 6f 20 72 65 73 65 74  /* When to reset
22ea0 20 4f 50 5f 4f 6e 63 65 20 63 6f 75 6e 74 65 72   OP_Once counter
22eb0 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  s */.};../*.** T
22ec0 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75 73 65  his macro is use
22ed0 64 20 69 6e 73 69 64 65 20 6f 66 20 61 73 73 65  d inside of asse
22ee0 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20  rt() statements 
22ef0 74 6f 20 69 6e 64 69 63 61 74 65 20 74 68 61 74  to indicate that
22f00 0a 2a 2a 20 74 68 65 20 61 73 73 65 72 74 20 69  .** the assert i
22f10 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 6f 6e 20  s only valid on 
22f20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61  a well-formed da
22f30 74 61 62 61 73 65 2e 20 20 49 6e 73 74 65 61 64  tabase.  Instead
22f40 20 6f 66 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61   of:.**.**     a
22f50 73 73 65 72 74 28 20 58 20 29 3b 0a 2a 2a 0a 2a  ssert( X );.**.*
22f60 2a 20 4f 6e 65 20 77 72 69 74 65 73 3a 0a 2a 2a  * One writes:.**
22f70 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20  .**     assert( 
22f80 58 20 7c 7c 20 43 4f 52 52 55 50 54 5f 44 42 20  X || CORRUPT_DB 
22f90 29 3b 0a 2a 2a 0a 2a 2a 20 43 4f 52 52 55 50 54  );.**.** CORRUPT
22fa0 5f 44 42 20 69 73 20 74 72 75 65 20 64 75 72 69  _DB is true duri
22fb0 6e 67 20 6e 6f 72 6d 61 6c 20 6f 70 65 72 61 74  ng normal operat
22fc0 69 6f 6e 2e 20 20 43 4f 52 52 55 50 54 5f 44 42  ion.  CORRUPT_DB
22fd0 20 64 6f 65 73 20 6e 6f 74 20 69 6e 64 69 63 61   does not indica
22fe0 74 65 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 64  te.** that the d
22ff0 61 74 61 62 61 73 65 20 69 73 20 64 65 66 69 6e  atabase is defin
23000 69 74 65 6c 79 20 63 6f 72 72 75 70 74 2c 20 6f  itely corrupt, o
23010 6e 6c 79 20 74 68 61 74 20 69 74 20 6d 69 67 68  nly that it migh
23020 74 20 62 65 20 63 6f 72 72 75 70 74 2e 0a 2a 2a  t be corrupt..**
23030 20 46 6f 72 20 6d 6f 73 74 20 74 65 73 74 20 63   For most test c
23040 61 73 65 73 2c 20 43 4f 52 52 55 50 54 5f 44 42  ases, CORRUPT_DB
23050 20 69 73 20 73 65 74 20 74 6f 20 66 61 6c 73 65   is set to false
23060 20 75 73 69 6e 67 20 61 20 73 70 65 63 69 61 6c   using a special
23070 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74  .** sqlite3_test
23080 5f 63 6f 6e 74 72 6f 6c 28 29 2e 20 20 54 68 69  _control().  Thi
23090 73 20 65 6e 61 62 6c 65 73 20 61 73 73 65 72 74  s enables assert
230a0 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f  () statements to
230b0 20 70 72 6f 76 65 0a 2a 2a 20 74 68 69 6e 67 73   prove.** things
230c0 20 74 68 61 74 20 61 72 65 20 61 6c 77 61 79 73   that are always
230d0 20 74 72 75 65 20 66 6f 72 20 77 65 6c 6c 2d 66   true for well-f
230e0 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65 73 2e  ormed databases.
230f0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 52 52  .*/.#define CORR
23100 55 50 54 5f 44 42 20 20 28 73 71 6c 69 74 65 33  UPT_DB  (sqlite3
23110 43 6f 6e 66 69 67 2e 6e 65 76 65 72 43 6f 72 72  Config.neverCorr
23120 75 70 74 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 43  upt==0)../*.** C
23130 6f 6e 74 65 78 74 20 70 6f 69 6e 74 65 72 20 70  ontext pointer p
23140 61 73 73 65 64 20 64 6f 77 6e 20 74 68 72 6f 75  assed down throu
23150 67 68 20 74 68 65 20 74 72 65 65 2d 77 61 6c 6b  gh the tree-walk
23160 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 61 6c 6b  ..*/.struct Walk
23170 65 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50  er {.  Parse *pP
23180 61 72 73 65 3b 20 20 20 20 20 20 20 20 20 20 20  arse;           
23190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
231a0 20 2f 2a 20 50 61 72 73 65 72 20 63 6f 6e 74 65   /* Parser conte
231b0 78 74 2e 20 20 2a 2f 0a 20 20 69 6e 74 20 28 2a  xt.  */.  int (*
231c0 78 45 78 70 72 43 61 6c 6c 62 61 63 6b 29 28 57  xExprCallback)(W
231d0 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 20  alker*, Expr*); 
231e0 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20      /* Callback 
231f0 66 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 73 20  for expressions 
23200 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 53 65 6c 65  */.  int (*xSele
23210 63 74 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b  ctCallback)(Walk
23220 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 20 20 2f  er*,Select*);  /
23230 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53  * Callback for S
23240 45 4c 45 43 54 73 20 2a 2f 0a 20 20 76 6f 69 64  ELECTs */.  void
23250 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61   (*xSelectCallba
23260 63 6b 32 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c  ck2)(Walker*,Sel
23270 65 63 74 2a 29 3b 2f 2a 20 53 65 63 6f 6e 64 20  ect*);/* Second 
23280 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c  callback for SEL
23290 45 43 54 73 20 2a 2f 0a 20 20 69 6e 74 20 77 61  ECTs */.  int wa
232a0 6c 6b 65 72 44 65 70 74 68 3b 20 20 20 20 20 20  lkerDepth;      
232b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
232c0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
232d0 20 73 75 62 71 75 65 72 69 65 73 20 2a 2f 0a 20   subqueries */. 
232e0 20 75 38 20 65 43 6f 64 65 3b 20 20 20 20 20 20   u8 eCode;      
232f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23300 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20             /* A 
23310 73 6d 61 6c 6c 20 70 72 6f 63 65 73 73 69 6e 67  small processing
23320 20 63 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e   code */.  union
23330 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
23340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23350 20 20 20 20 20 2f 2a 20 45 78 74 72 61 20 64 61       /* Extra da
23360 74 61 20 66 6f 72 20 63 61 6c 6c 62 61 63 6b 20  ta for callback 
23370 2a 2f 0a 20 20 20 20 4e 61 6d 65 43 6f 6e 74 65  */.    NameConte
23380 78 74 20 2a 70 4e 43 3b 20 20 20 20 20 20 20 20  xt *pNC;        
23390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
233a0 20 20 2f 2a 20 4e 61 6d 69 6e 67 20 63 6f 6e 74    /* Naming cont
233b0 65 78 74 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e  ext */.    int n
233c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
233d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
233e0 20 20 20 20 20 20 2f 2a 20 41 20 63 6f 75 6e 74        /* A count
233f0 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43  er */.    int iC
23400 75 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ur;             
23410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23420 20 20 20 20 20 2f 2a 20 41 20 63 75 72 73 6f 72       /* A cursor
23430 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 53   number */.    S
23440 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74  rcList *pSrcList
23450 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
23460 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 52 4f            /* FRO
23470 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20  M clause */.    
23480 73 74 72 75 63 74 20 53 72 63 43 6f 75 6e 74 20  struct SrcCount 
23490 2a 70 53 72 63 43 6f 75 6e 74 3b 20 20 20 20 20  *pSrcCount;     
234a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
234b0 75 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e 20 72 65  unting column re
234c0 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 20 20  ferences */.    
234d0 73 74 72 75 63 74 20 43 43 75 72 48 69 6e 74 20  struct CCurHint 
234e0 2a 70 43 43 75 72 48 69 6e 74 3b 20 20 20 20 20  *pCCurHint;     
234f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73             /* Us
23500 65 64 20 62 79 20 63 6f 64 65 43 75 72 73 6f 72  ed by codeCursor
23510 48 69 6e 74 28 29 20 2a 2f 0a 20 20 20 20 69 6e  Hint() */.    in
23520 74 20 2a 61 69 43 6f 6c 3b 20 20 20 20 20 20 20  t *aiCol;       
23530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23540 20 20 20 20 20 20 20 20 20 2f 2a 20 61 72 72 61           /* arra
23550 79 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 64 65  y of column inde
23560 78 65 73 20 2a 2f 0a 20 20 20 20 73 74 72 75 63  xes */.    struc
23570 74 20 49 64 78 43 6f 76 65 72 20 2a 70 49 64 78  t IdxCover *pIdx
23580 43 6f 76 65 72 3b 20 20 20 20 20 20 20 20 20 20  Cover;          
23590 20 20 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 66        /* Check f
235a0 6f 72 20 69 6e 64 65 78 20 63 6f 76 65 72 61 67  or index coverag
235b0 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a  e */.  } u;.};..
235c0 2f 2a 20 46 6f 72 77 61 72 64 20 64 65 63 6c 61  /* Forward decla
235d0 72 61 74 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73  rations */.int s
235e0 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 28 57  qlite3WalkExpr(W
235f0 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a  alker*, Expr*);.
23600 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45  int sqlite3WalkE
23610 78 70 72 4c 69 73 74 28 57 61 6c 6b 65 72 2a 2c  xprList(Walker*,
23620 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74   ExprList*);.int
23630 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65   sqlite3WalkSele
23640 63 74 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65  ct(Walker*, Sele
23650 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
23660 33 57 61 6c 6b 53 65 6c 65 63 74 45 78 70 72 28  3WalkSelectExpr(
23670 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a  Walker*, Select*
23680 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  );.int sqlite3Wa
23690 6c 6b 53 65 6c 65 63 74 46 72 6f 6d 28 57 61 6c  lkSelectFrom(Wal
236a0 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  ker*, Select*);.
236b0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 57  int sqlite3ExprW
236c0 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65 72 2a 2c  alkNoop(Walker*,
236d0 20 45 78 70 72 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20   Expr*);../*.** 
236e0 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d  Return code from
236f0 20 74 68 65 20 70 61 72 73 65 2d 74 72 65 65 20   the parse-tree 
23700 77 61 6c 6b 69 6e 67 20 70 72 69 6d 69 74 69 76  walking primitiv
23710 65 73 20 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20  es and their.** 
23720 63 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64  callbacks..*/.#d
23730 65 66 69 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e  efine WRC_Contin
23740 75 65 20 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e  ue    0   /* Con
23750 74 69 6e 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20  tinue down into 
23760 63 68 69 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66  children */.#def
23770 69 6e 65 20 57 52 43 5f 50 72 75 6e 65 20 20 20  ine WRC_Prune   
23780 20 20 20 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20      1   /* Omit 
23790 63 68 69 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e  children but con
237a0 74 69 6e 75 65 20 77 61 6c 6b 69 6e 67 20 73 69  tinue walking si
237b0 62 6c 69 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e  blings */.#defin
237c0 65 20 57 52 43 5f 41 62 6f 72 74 20 20 20 20 20  e WRC_Abort     
237d0 20 20 32 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e    2   /* Abandon
237e0 20 74 68 65 20 74 72 65 65 20 77 61 6c 6b 20 2a   the tree walk *
237f0 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  /../*.** An inst
23800 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72  ance of this str
23810 75 63 74 75 72 65 20 72 65 70 72 65 73 65 6e 74  ucture represent
23820 73 20 61 20 73 65 74 20 6f 66 20 6f 6e 65 20 6f  s a set of one o
23830 72 20 6d 6f 72 65 20 43 54 45 73 0a 2a 2a 20 28  r more CTEs.** (
23840 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70  common table exp
23850 72 65 73 73 69 6f 6e 73 29 20 63 72 65 61 74 65  ressions) create
23860 64 20 62 79 20 61 20 73 69 6e 67 6c 65 20 57 49  d by a single WI
23870 54 48 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74  TH clause..*/.st
23880 72 75 63 74 20 57 69 74 68 20 7b 0a 20 20 69 6e  ruct With {.  in
23890 74 20 6e 43 74 65 3b 20 20 20 20 20 20 20 20 20  t nCte;         
238a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
238b0 20 4e 75 6d 62 65 72 20 6f 66 20 43 54 45 73 20   Number of CTEs 
238c0 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61 75  in the WITH clau
238d0 73 65 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 4f  se */.  With *pO
238e0 75 74 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  uter;           
238f0 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 61          /* Conta
23900 69 6e 69 6e 67 20 57 49 54 48 20 63 6c 61 75 73  ining WITH claus
23910 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20  e, or NULL */.  
23920 73 74 72 75 63 74 20 43 74 65 20 7b 20 20 20 20  struct Cte {    
23930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23940 2f 2a 20 46 6f 72 20 65 61 63 68 20 43 54 45 20  /* For each CTE 
23950 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61 75  in the WITH clau
23960 73 65 2e 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63 68  se.... */.    ch
23970 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
23980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
23990 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 43 54   Name of this CT
239a0 45 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69 73  E */.    ExprLis
239b0 74 20 2a 70 43 6f 6c 73 3b 20 20 20 20 20 20 20  t *pCols;       
239c0 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74           /* List
239d0 20 6f 66 20 65 78 70 6c 69 63 69 74 20 63 6f 6c   of explicit col
239e0 75 6d 6e 20 6e 61 6d 65 73 2c 20 6f 72 20 4e 55  umn names, or NU
239f0 4c 4c 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74  LL */.    Select
23a00 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 20   *pSelect;      
23a10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
23a20 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74   definition of t
23a30 68 69 73 20 43 54 45 20 2a 2f 0a 20 20 20 20 63  his CTE */.    c
23a40 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 74 65 45  onst char *zCteE
23a50 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  rr;            /
23a60 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20  * Error message 
23a70 66 6f 72 20 63 69 72 63 75 6c 61 72 20 72 65 66  for circular ref
23a80 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 61  erences */.  } a
23a90 5b 31 5d 3b 0a 7d 3b 0a 0a 23 69 66 64 65 66 20  [1];.};..#ifdef 
23aa0 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a  SQLITE_DEBUG./*.
23ab0 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
23ac0 66 20 74 68 65 20 54 72 65 65 56 69 65 77 20 6f  f the TreeView o
23ad0 62 6a 65 63 74 20 69 73 20 75 73 65 64 20 66 6f  bject is used fo
23ae0 72 20 70 72 69 6e 74 69 6e 67 20 74 68 65 20 63  r printing the c
23af0 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 64 61 74  ontent of.** dat
23b00 61 20 73 74 72 75 63 74 75 72 65 73 20 6f 6e 20  a structures on 
23b10 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
23b20 74 66 28 29 20 75 73 69 6e 67 20 61 20 74 72 65  tf() using a tre
23b30 65 2d 6c 69 6b 65 20 76 69 65 77 2e 0a 2a 2f 0a  e-like view..*/.
23b40 73 74 72 75 63 74 20 54 72 65 65 56 69 65 77 20  struct TreeView 
23b50 7b 0a 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20  {.  int iLevel; 
23b60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57              /* W
23b70 68 69 63 68 20 6c 65 76 65 6c 20 6f 66 20 74 68  hich level of th
23b80 65 20 74 72 65 65 20 77 65 20 61 72 65 20 6f 6e  e tree we are on
23b90 20 2a 2f 0a 20 20 75 38 20 20 62 4c 69 6e 65 5b   */.  u8  bLine[
23ba0 31 30 30 5d 3b 20 20 20 20 20 20 20 20 20 2f 2a  100];         /*
23bb0 20 44 72 61 77 20 76 65 72 74 69 63 61 6c 20 69   Draw vertical i
23bc0 6e 20 63 6f 6c 75 6d 6e 20 69 20 69 66 20 62 4c  n column i if bL
23bd0 69 6e 65 5b 69 5d 20 69 73 20 74 72 75 65 20 2a  ine[i] is true *
23be0 2f 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53  /.};.#endif /* S
23bf0 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 0a  QLITE_DEBUG */..
23c00 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e 67 20 7a  /*.** Assuming z
23c10 49 6e 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  In points to the
23c20 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20 61   first byte of a
23c30 20 55 54 46 2d 38 20 63 68 61 72 61 63 74 65 72   UTF-8 character
23c40 2c 0a 2a 2a 20 61 64 76 61 6e 63 65 20 7a 49 6e  ,.** advance zIn
23c50 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65   to point to the
23c60 20 66 69 72 73 74 20 62 79 74 65 20 6f 66 20 74   first byte of t
23c70 68 65 20 6e 65 78 74 20 55 54 46 2d 38 20 63 68  he next UTF-8 ch
23c80 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 23 64 65 66  aracter..*/.#def
23c90 69 6e 65 20 53 51 4c 49 54 45 5f 53 4b 49 50 5f  ine SQLITE_SKIP_
23ca0 55 54 46 38 28 7a 49 6e 29 20 7b 20 20 20 20 20  UTF8(zIn) {     
23cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23cc0 20 20 20 5c 0a 20 20 69 66 28 20 28 2a 28 7a 49     \.  if( (*(zI
23cd0 6e 2b 2b 29 29 3e 3d 30 78 63 30 20 29 7b 20 20  n++))>=0xc0 ){  
23ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23cf0 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20              \.  
23d00 20 20 77 68 69 6c 65 28 20 28 2a 7a 49 6e 20 26    while( (*zIn &
23d10 20 30 78 63 30 29 3d 3d 30 78 38 30 20 29 7b 20   0xc0)==0x80 ){ 
23d20 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20 20 20 20 20  zIn++; }        
23d30 20 20 20 20 20 5c 0a 20 20 7d 20 20 20 20 20 20       \.  }      
23d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a                \.
23d70 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  }../*.** The SQL
23d80 49 54 45 5f 2a 5f 42 4b 50 54 20 6d 61 63 72 6f  ITE_*_BKPT macro
23d90 73 20 61 72 65 20 73 75 62 73 74 69 74 75 74 65  s are substitute
23da0 73 20 66 6f 72 20 74 68 65 20 65 72 72 6f 72 20  s for the error 
23db0 63 6f 64 65 73 20 77 69 74 68 0a 2a 2a 20 74 68  codes with.** th
23dc0 65 20 73 61 6d 65 20 6e 61 6d 65 20 62 75 74 20  e same name but 
23dd0 77 69 74 68 6f 75 74 20 74 68 65 20 5f 42 4b 50  without the _BKP
23de0 54 20 73 75 66 66 69 78 2e 20 20 54 68 65 73 65  T suffix.  These
23df0 20 6d 61 63 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a   macros invoke.*
23e00 2a 20 72 6f 75 74 69 6e 65 73 20 74 68 61 74 20  * routines that 
23e10 72 65 70 6f 72 74 20 74 68 65 20 6c 69 6e 65 2d  report the line-
23e20 6e 75 6d 62 65 72 20 6f 6e 20 77 68 69 63 68 20  number on which 
23e30 74 68 65 20 65 72 72 6f 72 20 6f 72 69 67 69 6e  the error origin
23e40 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 73 71  ated.** using sq
23e50 6c 69 74 65 33 5f 6c 6f 67 28 29 2e 20 20 54 68  lite3_log().  Th
23e60 65 20 72 6f 75 74 69 6e 65 73 20 61 6c 73 6f 20  e routines also 
23e70 70 72 6f 76 69 64 65 20 61 20 63 6f 6e 76 65 6e  provide a conven
23e80 69 65 6e 74 20 70 6c 61 63 65 0a 2a 2a 20 74 6f  ient place.** to
23e90 20 73 65 74 20 61 20 64 65 62 75 67 67 65 72 20   set a debugger 
23ea0 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69  breakpoint..*/.i
23eb0 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70  nt sqlite3Corrup
23ec0 74 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74  tError(int);.int
23ed0 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72   sqlite3MisuseEr
23ee0 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71  ror(int);.int sq
23ef0 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72  lite3CantopenErr
23f00 6f 72 28 69 6e 74 29 3b 0a 23 64 65 66 69 6e 65  or(int);.#define
23f10 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f   SQLITE_CORRUPT_
23f20 42 4b 50 54 20 73 71 6c 69 74 65 33 43 6f 72 72  BKPT sqlite3Corr
23f30 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f  uptError(__LINE_
23f40 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  _).#define SQLIT
23f50 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 20 73 71  E_MISUSE_BKPT sq
23f60 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72  lite3MisuseError
23f70 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69  (__LINE__).#defi
23f80 6e 65 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50  ne SQLITE_CANTOP
23f90 45 4e 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43  EN_BKPT sqlite3C
23fa0 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 5f 5f 4c  antopenError(__L
23fb0 49 4e 45 5f 5f 29 0a 23 69 66 64 65 66 20 53 51  INE__).#ifdef SQ
23fc0 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 6e 74  LITE_DEBUG.  int
23fd0 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d 45 72 72   sqlite3NomemErr
23fe0 6f 72 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73  or(int);.  int s
23ff0 71 6c 69 74 65 33 49 6f 65 72 72 6e 6f 6d 65 6d  qlite3Ioerrnomem
24000 45 72 72 6f 72 28 69 6e 74 29 3b 0a 23 20 64 65  Error(int);.# de
24010 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  fine SQLITE_NOME
24020 4d 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 4e 6f  M_BKPT sqlite3No
24030 6d 65 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f  memError(__LINE_
24040 5f 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  _).# define SQLI
24050 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42  TE_IOERR_NOMEM_B
24060 4b 50 54 20 73 71 6c 69 74 65 33 49 6f 65 72 72  KPT sqlite3Ioerr
24070 6e 6f 6d 65 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e  nomemError(__LIN
24080 45 5f 5f 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  E__).#else.# def
24090 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  ine SQLITE_NOMEM
240a0 5f 42 4b 50 54 20 53 51 4c 49 54 45 5f 4e 4f 4d  _BKPT SQLITE_NOM
240b0 45 4d 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  EM.# define SQLI
240c0 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42  TE_IOERR_NOMEM_B
240d0 4b 50 54 20 53 51 4c 49 54 45 5f 49 4f 45 52 52  KPT SQLITE_IOERR
240e0 5f 4e 4f 4d 45 4d 0a 23 65 6e 64 69 66 0a 0a 2f  _NOMEM.#endif../
240f0 2a 0a 2a 2a 20 46 54 53 33 20 61 6e 64 20 46 54  *.** FTS3 and FT
24100 53 34 20 62 6f 74 68 20 72 65 71 75 69 72 65 20  S4 both require 
24110 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73 75  virtual table su
24120 70 70 6f 72 74 0a 2a 2f 0a 23 69 66 20 64 65 66  pport.*/.#if def
24130 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
24140 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 23  _VIRTUALTABLE).#
24150 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e   undef SQLITE_EN
24160 41 42 4c 45 5f 46 54 53 33 0a 23 20 75 6e 64 65  ABLE_FTS3.# unde
24170 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
24180 46 54 53 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  FTS4.#endif../*.
24190 2a 2a 20 46 54 53 34 20 69 73 20 72 65 61 6c 6c  ** FTS4 is reall
241a0 79 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 66  y an extension f
241b0 6f 72 20 46 54 53 33 2e 20 20 49 74 20 69 73 20  or FTS3.  It is 
241c0 65 6e 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68  enabled using th
241d0 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42  e.** SQLITE_ENAB
241e0 4c 45 5f 46 54 53 33 20 6d 61 63 72 6f 2e 20 20  LE_FTS3 macro.  
241f0 42 75 74 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e  But to avoid con
24200 66 75 73 69 6f 6e 20 77 65 20 61 6c 73 6f 20 63  fusion we also c
24210 61 6c 6c 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54  all.** the SQLIT
24220 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 20 6d 61  E_ENABLE_FTS4 ma
24230 63 72 6f 20 74 6f 20 73 65 72 76 65 20 61 73 20  cro to serve as 
24240 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 53 51 4c  an alias for SQL
24250 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 2e  ITE_ENABLE_FTS3.
24260 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
24270 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
24280 53 34 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  S4) && !defined(
24290 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
242a0 53 33 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  S3).# define SQL
242b0 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20  ITE_ENABLE_FTS3 
242c0 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
242d0 54 68 65 20 63 74 79 70 65 2e 68 20 68 65 61 64  The ctype.h head
242e0 65 72 20 69 73 20 6e 65 65 64 65 64 20 66 6f 72  er is needed for
242f0 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79 73 74 65   non-ASCII syste
24300 6d 73 2e 20 20 49 74 20 69 73 20 61 6c 73 6f 0a  ms.  It is also.
24310 2a 2a 20 6e 65 65 64 65 64 20 62 79 20 46 54 53  ** needed by FTS
24320 33 20 77 68 65 6e 20 46 54 53 33 20 69 73 20 69  3 when FTS3 is i
24330 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65 20 61  ncluded in the a
24340 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  malgamation..*/.
24350 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
24360 49 54 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c 0a  ITE_ASCII) || \.
24370 20 20 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c      (defined(SQL
24380 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29  ITE_ENABLE_FTS3)
24390 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49   && defined(SQLI
243a0 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 29  TE_AMALGAMATION)
243b0 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c 63 74 79  ).# include <cty
243c0 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a  pe.h>.#endif../*
243d0 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
243e0 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20 74  g macros mimic t
243f0 68 65 20 73 74 61 6e 64 61 72 64 20 6c 69 62 72  he standard libr
24400 61 72 79 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f  ary functions to
24410 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73 70  upper(),.** issp
24420 61 63 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28 29  ace(), isalnum()
24430 2c 20 69 73 64 69 67 69 74 28 29 20 61 6e 64 20  , isdigit() and 
24440 69 73 78 64 69 67 69 74 28 29 2c 20 72 65 73 70  isxdigit(), resp
24450 65 63 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a 2a  ectively. The.**
24460 20 73 71 6c 69 74 65 20 76 65 72 73 69 6f 6e 73   sqlite versions
24470 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20 41   only work for A
24480 53 43 49 49 20 63 68 61 72 61 63 74 65 72 73 2c  SCII characters,
24490 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 6c   regardless of l
244a0 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66  ocale..*/.#ifdef
244b0 20 53 51 4c 49 54 45 5f 41 53 43 49 49 0a 23 20   SQLITE_ASCII.# 
244c0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f  define sqlite3To
244d0 75 70 70 65 72 28 78 29 20 20 28 28 78 29 26 7e  upper(x)  ((x)&~
244e0 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
244f0 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
24500 28 78 29 5d 26 30 78 32 30 29 29 0a 23 20 64 65  (x)]&0x20)).# de
24510 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70  fine sqlite3Issp
24520 61 63 65 28 78 29 20 20 20 28 73 71 6c 69 74 65  ace(x)   (sqlite
24530 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
24540 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
24550 30 31 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  01).# define sql
24560 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20  ite3Isalnum(x)  
24570 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61   (sqlite3CtypeMa
24580 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
24590 29 28 78 29 5d 26 30 78 30 36 29 0a 23 20 64 65  )(x)]&0x06).# de
245a0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c  fine sqlite3Isal
245b0 70 68 61 28 78 29 20 20 20 28 73 71 6c 69 74 65  pha(x)   (sqlite
245c0 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
245d0 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
245e0 30 32 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  02).# define sql
245f0 69 74 65 33 49 73 64 69 67 69 74 28 78 29 20 20  ite3Isdigit(x)  
24600 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61   (sqlite3CtypeMa
24610 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
24620 29 28 78 29 5d 26 30 78 30 34 29 0a 23 20 64 65  )(x)]&0x04).# de
24630 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64  fine sqlite3Isxd
24640 69 67 69 74 28 78 29 20 20 28 73 71 6c 69 74 65  igit(x)  (sqlite
24650 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
24660 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
24670 30 38 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  08).# define sql
24680 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20  ite3Tolower(x)  
24690 20 28 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f   (sqlite3UpperTo
246a0 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e 65 64 20  Lower[(unsigned 
246b0 63 68 61 72 29 28 78 29 5d 29 0a 23 20 64 65 66  char)(x)]).# def
246c0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 71 75 6f  ine sqlite3Isquo
246d0 74 65 28 78 29 20 20 20 28 73 71 6c 69 74 65 33  te(x)   (sqlite3
246e0 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
246f0 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 38  ed char)(x)]&0x8
24700 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  0).#else.# defin
24710 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72  e sqlite3Toupper
24720 28 78 29 20 20 20 74 6f 75 70 70 65 72 28 28 75  (x)   toupper((u
24730 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
24740 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
24750 65 33 49 73 73 70 61 63 65 28 78 29 20 20 20 69  e3Isspace(x)   i
24760 73 73 70 61 63 65 28 28 75 6e 73 69 67 6e 65 64  sspace((unsigned
24770 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
24780 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e  ine sqlite3Isaln
24790 75 6d 28 78 29 20 20 20 69 73 61 6c 6e 75 6d 28  um(x)   isalnum(
247a0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
247b0 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
247c0 69 74 65 33 49 73 61 6c 70 68 61 28 78 29 20 20  ite3Isalpha(x)  
247d0 20 69 73 61 6c 70 68 61 28 28 75 6e 73 69 67 6e   isalpha((unsign
247e0 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
247f0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 64  efine sqlite3Isd
24800 69 67 69 74 28 78 29 20 20 20 69 73 64 69 67 69  igit(x)   isdigi
24810 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  t((unsigned char
24820 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
24830 71 6c 69 74 65 33 49 73 78 64 69 67 69 74 28 78  qlite3Isxdigit(x
24840 29 20 20 69 73 78 64 69 67 69 74 28 28 75 6e 73  )  isxdigit((uns
24850 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
24860 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
24870 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 74 6f 6c  Tolower(x)   tol
24880 6f 77 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63  ower((unsigned c
24890 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
248a0 65 20 73 71 6c 69 74 65 33 49 73 71 75 6f 74 65  e sqlite3Isquote
248b0 28 78 29 20 20 20 28 28 78 29 3d 3d 27 22 27 7c  (x)   ((x)=='"'|
248c0 7c 28 78 29 3d 3d 27 5c 27 27 7c 7c 28 78 29 3d  |(x)=='\''||(x)=
248d0 3d 27 5b 27 7c 7c 28 78 29 3d 3d 27 60 27 29 0a  ='['||(x)=='`').
248e0 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
248f0 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49  QLITE_OMIT_COMPI
24900 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53 0a 69  LEOPTION_DIAGS.i
24910 6e 74 20 73 71 6c 69 74 65 33 49 73 49 64 43 68  nt sqlite3IsIdCh
24920 61 72 28 75 38 29 3b 0a 23 65 6e 64 69 66 0a 0a  ar(u8);.#endif..
24930 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c 20 66  /*.** Internal f
24940 75 6e 63 74 69 6f 6e 20 70 72 6f 74 6f 74 79 70  unction prototyp
24950 65 73 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  es.*/.int sqlite
24960 33 53 74 72 49 43 6d 70 28 63 6f 6e 73 74 20 63  3StrICmp(const c
24970 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
24980 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74  );.int sqlite3St
24990 72 6c 65 6e 33 30 28 63 6f 6e 73 74 20 63 68 61  rlen30(const cha
249a0 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  r*);.char *sqlit
249b0 65 33 43 6f 6c 75 6d 6e 54 79 70 65 28 43 6f 6c  e3ColumnType(Col
249c0 75 6d 6e 2a 2c 63 68 61 72 2a 29 3b 0a 23 64 65  umn*,char*);.#de
249d0 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 72 4e  fine sqlite3StrN
249e0 49 43 6d 70 20 73 71 6c 69 74 65 33 5f 73 74 72  ICmp sqlite3_str
249f0 6e 69 63 6d 70 0a 0a 69 6e 74 20 73 71 6c 69 74  nicmp..int sqlit
24a00 65 33 4d 61 6c 6c 6f 63 49 6e 69 74 28 76 6f 69  e3MallocInit(voi
24a10 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
24a20 4d 61 6c 6c 6f 63 45 6e 64 28 76 6f 69 64 29 3b  MallocEnd(void);
24a30 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61  .void *sqlite3Ma
24a40 6c 6c 6f 63 28 75 36 34 29 3b 0a 76 6f 69 64 20  lloc(u64);.void 
24a50 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65  *sqlite3MallocZe
24a60 72 6f 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  ro(u64);.void *s
24a70 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65  qlite3DbMallocZe
24a80 72 6f 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34  ro(sqlite3*, u64
24a90 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
24aa0 44 62 4d 61 6c 6c 6f 63 52 61 77 28 73 71 6c 69  DbMallocRaw(sqli
24ab0 74 65 33 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64  te3*, u64);.void
24ac0 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f   *sqlite3DbMallo
24ad0 63 52 61 77 4e 4e 28 73 71 6c 69 74 65 33 2a 2c  cRawNN(sqlite3*,
24ae0 20 75 36 34 29 3b 0a 63 68 61 72 20 2a 73 71 6c   u64);.char *sql
24af0 69 74 65 33 44 62 53 74 72 44 75 70 28 73 71 6c  ite3DbStrDup(sql
24b00 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
24b10 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  *);.char *sqlite
24b20 33 44 62 53 74 72 4e 44 75 70 28 73 71 6c 69 74  3DbStrNDup(sqlit
24b30 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
24b40 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c   u64);.void *sql
24b50 69 74 65 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64  ite3Realloc(void
24b60 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  *, u64);.void *s
24b70 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f  qlite3DbReallocO
24b80 72 46 72 65 65 28 73 71 6c 69 74 65 33 20 2a 2c  rFree(sqlite3 *,
24b90 20 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76   void *, u64);.v
24ba0 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65  oid *sqlite3DbRe
24bb0 61 6c 6c 6f 63 28 73 71 6c 69 74 65 33 20 2a 2c  alloc(sqlite3 *,
24bc0 20 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76   void *, u64);.v
24bd0 6f 69 64 20 73 71 6c 69 74 65 33 44 62 46 72 65  oid sqlite3DbFre
24be0 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64  e(sqlite3*, void
24bf0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  *);.int sqlite3M
24c00 61 6c 6c 6f 63 53 69 7a 65 28 76 6f 69 64 2a 29  allocSize(void*)
24c10 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62 4d  ;.int sqlite3DbM
24c20 61 6c 6c 6f 63 53 69 7a 65 28 73 71 6c 69 74 65  allocSize(sqlite
24c30 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64  3*, void*);.void
24c40 20 2a 73 71 6c 69 74 65 33 53 63 72 61 74 63 68   *sqlite3Scratch
24c50 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69  Malloc(int);.voi
24c60 64 20 73 71 6c 69 74 65 33 53 63 72 61 74 63 68  d sqlite3Scratch
24c70 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69  Free(void*);.voi
24c80 64 20 2a 73 71 6c 69 74 65 33 50 61 67 65 4d 61  d *sqlite3PageMa
24c90 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20  lloc(int);.void 
24ca0 73 71 6c 69 74 65 33 50 61 67 65 46 72 65 65 28  sqlite3PageFree(
24cb0 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  void*);.void sql
24cc0 69 74 65 33 4d 65 6d 53 65 74 44 65 66 61 75 6c  ite3MemSetDefaul
24cd0 74 28 76 6f 69 64 29 3b 0a 23 69 66 6e 64 65 66  t(void);.#ifndef
24ce0 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42   SQLITE_UNTESTAB
24cf0 4c 45 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  LE.void sqlite3B
24d00 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b 73  enignMallocHooks
24d10 28 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 2c  (void (*)(void),
24d20 20 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 29   void (*)(void))
24d30 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c  ;.#endif.int sql
24d40 69 74 65 33 48 65 61 70 4e 65 61 72 6c 79 46 75  ite3HeapNearlyFu
24d50 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a  ll(void);../*.**
24d60 20 4f 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68   On systems with
24d70 20 61 6d 70 6c 65 20 73 74 61 63 6b 20 73 70 61   ample stack spa
24d80 63 65 20 61 6e 64 20 74 68 61 74 20 73 75 70 70  ce and that supp
24d90 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c 20 6d 61  ort alloca(), ma
24da0 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20 61 6c 6c  ke.** use of all
24db0 6f 63 61 28 29 20 74 6f 20 6f 62 74 61 69 6e 20  oca() to obtain 
24dc0 73 70 61 63 65 20 66 6f 72 20 6c 61 72 67 65 20  space for large 
24dd0 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a 65 63 74  automatic object
24de0 73 2e 20 20 42 79 20 64 65 66 61 75 6c 74 2c 0a  s.  By default,.
24df0 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20  ** obtain space 
24e00 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e 0a 2a  from malloc()..*
24e10 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f 63 61 28  *.** The alloca(
24e20 29 20 72 6f 75 74 69 6e 65 20 6e 65 76 65 72 20  ) routine never 
24e30 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e 20 20 54  returns NULL.  T
24e40 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65 20 63  his will cause c
24e50 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20 74 68 61  ode paths.** tha
24e60 74 20 64 65 61 6c 20 77 69 74 68 20 73 71 6c 69  t deal with sqli
24e70 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 28 29 20  te3StackAlloc() 
24e80 66 61 69 6c 75 72 65 73 20 74 6f 20 62 65 20 75  failures to be u
24e90 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a 2f 0a 23  nreachable..*/.#
24ea0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45  ifdef SQLITE_USE
24eb0 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66 69 6e 65  _ALLOCA.# define
24ec0 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
24ed0 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 61 6c 6c  ocRaw(D,N)   all
24ee0 6f 63 61 28 4e 29 0a 23 20 64 65 66 69 6e 65 20  oca(N).# define 
24ef0 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f  sqlite3StackAllo
24f00 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d 65 6d 73  cZero(D,N)  mems
24f10 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c 20 30 2c  et(alloca(N), 0,
24f20 20 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c   N).# define sql
24f30 69 74 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c  ite3StackFree(D,
24f40 50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  P).#else.# defin
24f50 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  e sqlite3StackAl
24f60 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 73 71  locRaw(D,N)   sq
24f70 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
24f80 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73  (D,N).# define s
24f90 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
24fa0 5a 65 72 6f 28 44 2c 4e 29 20 20 73 71 6c 69 74  Zero(D,N)  sqlit
24fb0 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 44  e3DbMallocZero(D
24fc0 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,N).# define sql
24fd0 69 74 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c  ite3StackFree(D,
24fe0 50 29 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  P)       sqlite3
24ff0 44 62 46 72 65 65 28 44 2c 50 29 0a 23 65 6e 64  DbFree(D,P).#end
25000 69 66 0a 0a 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c  if../* Do not al
25010 6c 6f 77 20 62 6f 74 68 20 4d 45 4d 53 59 53 35  low both MEMSYS5
25020 20 61 6e 64 20 4d 45 4d 53 59 53 33 20 74 6f 20   and MEMSYS3 to 
25030 62 65 20 64 65 66 69 6e 65 64 20 74 6f 67 65 74  be defined toget
25040 68 65 72 2e 20 20 49 66 20 74 68 65 79 0a 2a 2a  her.  If they.**
25050 20 61 72 65 2c 20 64 69 73 61 62 6c 65 20 4d 45   are, disable ME
25060 4d 53 59 53 33 0a 2a 2f 0a 23 69 66 64 65 66 20  MSYS3.*/.#ifdef 
25070 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45  SQLITE_ENABLE_ME
25080 4d 53 59 53 35 0a 63 6f 6e 73 74 20 73 71 6c 69  MSYS5.const sqli
25090 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20  te3_mem_methods 
250a0 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65  *sqlite3MemGetMe
250b0 6d 73 79 73 35 28 76 6f 69 64 29 3b 0a 23 75 6e  msys5(void);.#un
250c0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
250d0 45 5f 4d 45 4d 53 59 53 33 0a 23 65 6e 64 69 66  E_MEMSYS3.#endif
250e0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
250f0 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 63 6f  NABLE_MEMSYS3.co
25100 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f  nst sqlite3_mem_
25110 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33  methods *sqlite3
25120 4d 65 6d 47 65 74 4d 65 6d 73 79 73 33 28 76 6f  MemGetMemsys3(vo
25130 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 23 69  id);.#endif...#i
25140 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 55 54  fndef SQLITE_MUT
25150 45 58 5f 4f 4d 49 54 0a 20 20 73 71 6c 69 74 65  EX_OMIT.  sqlite
25160 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20  3_mutex_methods 
25170 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 44 65  const *sqlite3De
25180 66 61 75 6c 74 4d 75 74 65 78 28 76 6f 69 64 29  faultMutex(void)
25190 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  ;.  sqlite3_mute
251a0 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20  x_methods const 
251b0 2a 73 71 6c 69 74 65 33 4e 6f 6f 70 4d 75 74 65  *sqlite3NoopMute
251c0 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74  x(void);.  sqlit
251d0 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65  e3_mutex *sqlite
251e0 33 4d 75 74 65 78 41 6c 6c 6f 63 28 69 6e 74 29  3MutexAlloc(int)
251f0 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
25200 75 74 65 78 49 6e 69 74 28 76 6f 69 64 29 3b 0a  utexInit(void);.
25210 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74    int sqlite3Mut
25220 65 78 45 6e 64 28 76 6f 69 64 29 3b 0a 23 65 6e  exEnd(void);.#en
25230 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64  dif.#if !defined
25240 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d  (SQLITE_MUTEX_OM
25250 49 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  IT) && !defined(
25260 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4e 4f 4f  SQLITE_MUTEX_NOO
25270 50 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  P).  void sqlite
25280 33 4d 65 6d 6f 72 79 42 61 72 72 69 65 72 28 76  3MemoryBarrier(v
25290 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  oid);.#else.# de
252a0 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 6f  fine sqlite3Memo
252b0 72 79 42 61 72 72 69 65 72 28 29 0a 23 65 6e 64  ryBarrier().#end
252c0 69 66 0a 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36  if..sqlite3_int6
252d0 34 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 56  4 sqlite3StatusV
252e0 61 6c 75 65 28 69 6e 74 29 3b 0a 76 6f 69 64 20  alue(int);.void 
252f0 73 71 6c 69 74 65 33 53 74 61 74 75 73 55 70 28  sqlite3StatusUp(
25300 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
25310 73 71 6c 69 74 65 33 53 74 61 74 75 73 44 6f 77  sqlite3StatusDow
25320 6e 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  n(int, int);.voi
25330 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 48  d sqlite3StatusH
25340 69 67 68 77 61 74 65 72 28 69 6e 74 2c 20 69 6e  ighwater(int, in
25350 74 29 3b 0a 0a 2f 2a 20 41 63 63 65 73 73 20 74  t);../* Access t
25360 6f 20 6d 75 74 65 78 65 73 20 75 73 65 64 20 62  o mutexes used b
25370 79 20 73 71 6c 69 74 65 33 5f 73 74 61 74 75 73  y sqlite3_status
25380 28 29 20 2a 2f 0a 73 71 6c 69 74 65 33 5f 6d 75  () */.sqlite3_mu
25390 74 65 78 20 2a 73 71 6c 69 74 65 33 50 63 61 63  tex *sqlite3Pcac
253a0 68 65 31 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a  he1Mutex(void);.
253b0 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73  sqlite3_mutex *s
253c0 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 4d 75 74 65  qlite3MallocMute
253d0 78 28 76 6f 69 64 29 3b 0a 0a 23 69 66 6e 64 65  x(void);..#ifnde
253e0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
253f0 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 69  OATING_POINT.  i
25400 6e 74 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28  nt sqlite3IsNaN(
25410 64 6f 75 62 6c 65 29 3b 0a 23 65 6c 73 65 0a 23  double);.#else.#
25420 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
25430 73 4e 61 4e 28 58 29 20 20 30 0a 23 65 6e 64 69  sNaN(X)  0.#endi
25440 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  f../*.** An inst
25450 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
25460 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
25470 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f  holds informatio
25480 6e 20 61 62 6f 75 74 20 53 51 4c 0a 2a 2a 20 66  n about SQL.** f
25490 75 6e 63 74 69 6f 6e 73 20 61 72 67 75 6d 65 6e  unctions argumen
254a0 74 73 20 74 68 61 74 20 61 72 65 20 74 68 65 20  ts that are the 
254b0 70 61 72 61 6d 65 74 65 72 73 20 74 6f 20 74 68  parameters to th
254c0 65 20 70 72 69 6e 74 66 28 29 20 66 75 6e 63 74  e printf() funct
254d0 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50  ion..*/.struct P
254e0 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 7b  rintfArguments {
254f0 0a 20 20 69 6e 74 20 6e 41 72 67 3b 20 20 20 20  .  int nArg;    
25500 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
25510 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 61  otal number of a
25520 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 69 6e  rguments */.  in
25530 74 20 6e 55 73 65 64 3b 20 20 20 20 20 20 20 20  t nUsed;        
25540 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
25550 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 75 73   of arguments us
25560 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 73  ed so far */.  s
25570 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61  qlite3_value **a
25580 70 41 72 67 3b 20 20 20 2f 2a 20 54 68 65 20 61  pArg;   /* The a
25590 72 67 75 6d 65 6e 74 20 76 61 6c 75 65 73 20 2a  rgument values *
255a0 2f 0a 7d 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74  /.};..void sqlit
255b0 65 33 56 58 50 72 69 6e 74 66 28 53 74 72 41 63  e3VXPrintf(StrAc
255c0 63 75 6d 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  cum*, const char
255d0 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 76 6f 69  *, va_list);.voi
255e0 64 20 73 71 6c 69 74 65 33 58 50 72 69 6e 74 66  d sqlite3XPrintf
255f0 28 53 74 72 41 63 63 75 6d 2a 2c 20 63 6f 6e 73  (StrAccum*, cons
25600 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63  t char*, ...);.c
25610 68 61 72 20 2a 73 71 6c 69 74 65 33 4d 50 72 69  har *sqlite3MPri
25620 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ntf(sqlite3*,con
25630 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
25640 63 68 61 72 20 2a 73 71 6c 69 74 65 33 56 4d 50  char *sqlite3VMP
25650 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63  rintf(sqlite3*,c
25660 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c  onst char*, va_l
25670 69 73 74 29 3b 0a 23 69 66 20 64 65 66 69 6e 65  ist);.#if define
25680 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
25690 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
256a0 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41 43 45 29  E_HAVE_OS_TRACE)
256b0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
256c0 65 62 75 67 50 72 69 6e 74 66 28 63 6f 6e 73 74  ebugPrintf(const
256d0 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65   char*, ...);.#e
256e0 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64  ndif.#if defined
256f0 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 20 20  (SQLITE_TEST).  
25700 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 54 65 73  void *sqlite3Tes
25710 74 54 65 78 74 54 6f 50 74 72 28 63 6f 6e 73 74  tTextToPtr(const
25720 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a   char*);.#endif.
25730 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
25740 49 54 45 5f 44 45 42 55 47 29 0a 20 20 76 6f 69  ITE_DEBUG).  voi
25750 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65  d sqlite3TreeVie
25760 77 45 78 70 72 28 54 72 65 65 56 69 65 77 2a 2c  wExpr(TreeView*,
25770 20 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 75 38   const Expr*, u8
25780 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
25790 33 54 72 65 65 56 69 65 77 42 61 72 65 45 78 70  3TreeViewBareExp
257a0 72 4c 69 73 74 28 54 72 65 65 56 69 65 77 2a 2c  rList(TreeView*,
257b0 20 63 6f 6e 73 74 20 45 78 70 72 4c 69 73 74 2a   const ExprList*
257c0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
257d0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72    void sqlite3Tr
257e0 65 65 56 69 65 77 45 78 70 72 4c 69 73 74 28 54  eeViewExprList(T
257f0 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20  reeView*, const 
25800 45 78 70 72 4c 69 73 74 2a 2c 20 75 38 2c 20 63  ExprList*, u8, c
25810 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76  onst char*);.  v
25820 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56  oid sqlite3TreeV
25830 69 65 77 53 65 6c 65 63 74 28 54 72 65 65 56 69  iewSelect(TreeVi
25840 65 77 2a 2c 20 63 6f 6e 73 74 20 53 65 6c 65 63  ew*, const Selec
25850 74 2a 2c 20 75 38 29 3b 0a 20 20 76 6f 69 64 20  t*, u8);.  void 
25860 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 57  sqlite3TreeViewW
25870 69 74 68 28 54 72 65 65 56 69 65 77 2a 2c 20 63  ith(TreeView*, c
25880 6f 6e 73 74 20 57 69 74 68 2a 2c 20 75 38 29 3b  onst With*, u8);
25890 0a 23 65 6e 64 69 66 0a 0a 0a 76 6f 69 64 20 73  .#endif...void s
258a0 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
258b0 63 68 61 72 20 2a 2a 2c 20 73 71 6c 69 74 65 33  char **, sqlite3
258c0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
258d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72  .void sqlite3Err
258e0 6f 72 4d 73 67 28 50 61 72 73 65 2a 2c 20 63 6f  orMsg(Parse*, co
258f0 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
25900 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 71  .void sqlite3Deq
25910 75 6f 74 65 28 63 68 61 72 2a 29 3b 0a 76 6f 69  uote(char*);.voi
25920 64 20 73 71 6c 69 74 65 33 54 6f 6b 65 6e 49 6e  d sqlite3TokenIn
25930 69 74 28 54 6f 6b 65 6e 2a 2c 63 68 61 72 2a 29  it(Token*,char*)
25940 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b 65 79  ;.int sqlite3Key
25950 77 6f 72 64 43 6f 64 65 28 63 6f 6e 73 74 20 75  wordCode(const u
25960 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 69  nsigned char*, i
25970 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
25980 52 75 6e 50 61 72 73 65 72 28 50 61 72 73 65 2a  RunParser(Parse*
25990 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
259a0 68 61 72 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71  har **);.void sq
259b0 6c 69 74 65 33 46 69 6e 69 73 68 43 6f 64 69 6e  lite3FinishCodin
259c0 67 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73  g(Parse*);.int s
259d0 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52 65 67  qlite3GetTempReg
259e0 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
259f0 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d  qlite3ReleaseTem
25a00 70 52 65 67 28 50 61 72 73 65 2a 2c 69 6e 74 29  pReg(Parse*,int)
25a10 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74  ;.int sqlite3Get
25a20 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a  TempRange(Parse*
25a30 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
25a40 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52 61  te3ReleaseTempRa
25a50 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69  nge(Parse*,int,i
25a60 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
25a70 33 43 6c 65 61 72 54 65 6d 70 52 65 67 43 61 63  3ClearTempRegCac
25a80 68 65 28 50 61 72 73 65 2a 29 3b 0a 23 69 66 64  he(Parse*);.#ifd
25a90 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
25aa0 69 6e 74 20 73 71 6c 69 74 65 33 4e 6f 54 65 6d  int sqlite3NoTem
25ab0 70 73 49 6e 52 61 6e 67 65 28 50 61 72 73 65 2a  psInRange(Parse*
25ac0 2c 69 6e 74 2c 69 6e 74 29 3b 0a 23 65 6e 64 69  ,int,int);.#endi
25ad0 66 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  f.Expr *sqlite3E
25ae0 78 70 72 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33  xprAlloc(sqlite3
25af0 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b 65  *,int,const Toke
25b00 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73  n*,int);.Expr *s
25b10 71 6c 69 74 65 33 45 78 70 72 28 73 71 6c 69 74  qlite3Expr(sqlit
25b20 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  e3*,int,const ch
25b30 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
25b40 65 33 45 78 70 72 41 74 74 61 63 68 53 75 62 74  e3ExprAttachSubt
25b50 72 65 65 73 28 73 71 6c 69 74 65 33 2a 2c 45 78  rees(sqlite3*,Ex
25b60 70 72 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29  pr*,Expr*,Expr*)
25b70 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 50  ;.Expr *sqlite3P
25b80 45 78 70 72 28 50 61 72 73 65 2a 2c 20 69 6e 74  Expr(Parse*, int
25b90 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b  , Expr*, Expr*);
25ba0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 45 78  .void sqlite3PEx
25bb0 70 72 41 64 64 53 65 6c 65 63 74 28 50 61 72 73  prAddSelect(Pars
25bc0 65 2a 2c 20 45 78 70 72 2a 2c 20 53 65 6c 65 63  e*, Expr*, Selec
25bd0 74 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  t*);.Expr *sqlit
25be0 65 33 45 78 70 72 41 6e 64 28 73 71 6c 69 74 65  e3ExprAnd(sqlite
25bf0 33 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a 29  3*,Expr*, Expr*)
25c00 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
25c10 78 70 72 46 75 6e 63 74 69 6f 6e 28 50 61 72 73  xprFunction(Pars
25c20 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f  e*,ExprList*, To
25c30 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
25c40 74 65 33 45 78 70 72 41 73 73 69 67 6e 56 61 72  te3ExprAssignVar
25c50 4e 75 6d 62 65 72 28 50 61 72 73 65 2a 2c 20 45  Number(Parse*, E
25c60 78 70 72 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64  xpr*, u32);.void
25c70 20 73 71 6c 69 74 65 33 45 78 70 72 44 65 6c 65   sqlite3ExprDele
25c80 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70  te(sqlite3*, Exp
25c90 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73  r*);.ExprList *s
25ca0 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 41 70  qlite3ExprListAp
25cb0 70 65 6e 64 28 50 61 72 73 65 2a 2c 45 78 70 72  pend(Parse*,Expr
25cc0 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 45 78  List*,Expr*);.Ex
25cd0 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45  prList *sqlite3E
25ce0 78 70 72 4c 69 73 74 41 70 70 65 6e 64 56 65 63  xprListAppendVec
25cf0 74 6f 72 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  tor(Parse*,ExprL
25d00 69 73 74 2a 2c 49 64 4c 69 73 74 2a 2c 45 78 70  ist*,IdList*,Exp
25d10 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
25d20 33 45 78 70 72 4c 69 73 74 53 65 74 53 6f 72 74  3ExprListSetSort
25d30 4f 72 64 65 72 28 45 78 70 72 4c 69 73 74 2a 2c  Order(ExprList*,
25d40 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
25d50 65 33 45 78 70 72 4c 69 73 74 53 65 74 4e 61 6d  e3ExprListSetNam
25d60 65 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73  e(Parse*,ExprLis
25d70 74 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a  t*,Token*,int);.
25d80 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
25d90 4c 69 73 74 53 65 74 53 70 61 6e 28 50 61 72 73  ListSetSpan(Pars
25da0 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70  e*,ExprList*,Exp
25db0 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  rSpan*);.void sq
25dc0 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44 65 6c  lite3ExprListDel
25dd0 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78  ete(sqlite3*, Ex
25de0 70 72 4c 69 73 74 2a 29 3b 0a 75 33 32 20 73 71  prList*);.u32 sq
25df0 6c 69 74 65 33 45 78 70 72 4c 69 73 74 46 6c 61  lite3ExprListFla
25e00 67 73 28 63 6f 6e 73 74 20 45 78 70 72 4c 69 73  gs(const ExprLis
25e10 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
25e20 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 63  Init(sqlite3*, c
25e30 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  har**);.int sqli
25e40 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28  te3InitCallback(
25e50 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 68 61 72  void*, int, char
25e60 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 76 6f 69  **, char**);.voi
25e70 64 20 73 71 6c 69 74 65 33 50 72 61 67 6d 61 28  d sqlite3Pragma(
25e80 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
25e90 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29  ken*,Token*,int)
25ea0 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
25eb0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
25ec0 4c 45 0a 4d 6f 64 75 6c 65 20 2a 73 71 6c 69 74  LE.Module *sqlit
25ed0 65 33 50 72 61 67 6d 61 56 74 61 62 52 65 67 69  e3PragmaVtabRegi
25ee0 73 74 65 72 28 73 71 6c 69 74 65 33 2a 2c 63 6f  ster(sqlite3*,co
25ef0 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 29  nst char *zName)
25f00 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ;.#endif.void sq
25f10 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68  lite3ResetAllSch
25f20 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e  emasOfConnection
25f30 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
25f40 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65   sqlite3ResetOne
25f50 53 63 68 65 6d 61 28 73 71 6c 69 74 65 33 2a 2c  Schema(sqlite3*,
25f60 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
25f70 65 33 43 6f 6c 6c 61 70 73 65 44 61 74 61 62 61  e3CollapseDataba
25f80 73 65 41 72 72 61 79 28 73 71 6c 69 74 65 33 2a  seArray(sqlite3*
25f90 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
25fa0 6f 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68 61  ommitInternalCha
25fb0 6e 67 65 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  nges(sqlite3*);.
25fc0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
25fd0 74 65 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 73 71  teColumnNames(sq
25fe0 6c 69 74 65 33 2a 2c 54 61 62 6c 65 2a 29 3b 0a  lite3*,Table*);.
25ff0 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d  int sqlite3Colum
26000 6e 73 46 72 6f 6d 45 78 70 72 4c 69 73 74 28 50  nsFromExprList(P
26010 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
26020 69 31 36 2a 2c 43 6f 6c 75 6d 6e 2a 2a 29 3b 0a  i16*,Column**);.
26030 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65  void sqlite3Sele
26040 63 74 41 64 64 43 6f 6c 75 6d 6e 54 79 70 65 41  ctAddColumnTypeA
26050 6e 64 43 6f 6c 6c 61 74 69 6f 6e 28 50 61 72 73  ndCollation(Pars
26060 65 2a 2c 54 61 62 6c 65 2a 2c 53 65 6c 65 63 74  e*,Table*,Select
26070 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74  *);.Table *sqlit
26080 65 33 52 65 73 75 6c 74 53 65 74 4f 66 53 65 6c  e3ResultSetOfSel
26090 65 63 74 28 50 61 72 73 65 2a 2c 53 65 6c 65 63  ect(Parse*,Selec
260a0 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
260b0 33 4f 70 65 6e 4d 61 73 74 65 72 54 61 62 6c 65  3OpenMasterTable
260c0 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 29 3b 0a  (Parse *, int);.
260d0 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 50 72  Index *sqlite3Pr
260e0 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 54 61  imaryKeyIndex(Ta
260f0 62 6c 65 2a 29 3b 0a 69 31 36 20 73 71 6c 69 74  ble*);.i16 sqlit
26100 65 33 43 6f 6c 75 6d 6e 4f 66 49 6e 64 65 78 28  e3ColumnOfIndex(
26110 49 6e 64 65 78 2a 2c 20 69 31 36 29 3b 0a 76 6f  Index*, i16);.vo
26120 69 64 20 73 71 6c 69 74 65 33 53 74 61 72 74 54  id sqlite3StartT
26130 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65  able(Parse*,Toke
26140 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e  n*,Token*,int,in
26150 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 23 69 66 20  t,int,int);.#if 
26160 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49  SQLITE_ENABLE_HI
26170 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 0a 20 20 76  DDEN_COLUMNS.  v
26180 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d  oid sqlite3Colum
26190 6e 50 72 6f 70 65 72 74 69 65 73 46 72 6f 6d 4e  nPropertiesFromN
261a0 61 6d 65 28 54 61 62 6c 65 2a 2c 20 43 6f 6c 75  ame(Table*, Colu
261b0 6d 6e 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  mn*);.#else.# de
261c0 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6c 75  fine sqlite3Colu
261d0 6d 6e 50 72 6f 70 65 72 74 69 65 73 46 72 6f 6d  mnPropertiesFrom
261e0 4e 61 6d 65 28 54 2c 43 29 20 2f 2a 20 6e 6f 2d  Name(T,C) /* no-
261f0 6f 70 20 2a 2f 0a 23 65 6e 64 69 66 0a 76 6f 69  op */.#endif.voi
26200 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75  d sqlite3AddColu
26210 6d 6e 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  mn(Parse*,Token*
26220 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73  ,Token*);.void s
26230 71 6c 69 74 65 33 41 64 64 4e 6f 74 4e 75 6c 6c  qlite3AddNotNull
26240 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76  (Parse*, int);.v
26250 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 50 72  oid sqlite3AddPr
26260 69 6d 61 72 79 4b 65 79 28 50 61 72 73 65 2a 2c  imaryKey(Parse*,
26270 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c   ExprList*, int,
26280 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
26290 20 73 71 6c 69 74 65 33 41 64 64 43 68 65 63 6b   sqlite3AddCheck
262a0 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65  Constraint(Parse
262b0 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
262c0 73 71 6c 69 74 65 33 41 64 64 44 65 66 61 75 6c  sqlite3AddDefaul
262d0 74 56 61 6c 75 65 28 50 61 72 73 65 2a 2c 45 78  tValue(Parse*,Ex
262e0 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73  prSpan*);.void s
262f0 71 6c 69 74 65 33 41 64 64 43 6f 6c 6c 61 74 65  qlite3AddCollate
26300 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  Type(Parse*, Tok
26310 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
26320 65 33 45 6e 64 54 61 62 6c 65 28 50 61 72 73 65  e3EndTable(Parse
26330 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
26340 75 38 2c 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  u8,Select*);.int
26350 20 73 71 6c 69 74 65 33 50 61 72 73 65 55 72 69   sqlite3ParseUri
26360 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  (const char*,con
26370 73 74 20 63 68 61 72 2a 2c 75 6e 73 69 67 6e 65  st char*,unsigne
26380 64 20 69 6e 74 2a 2c 0a 20 20 20 20 20 20 20 20  d int*,.        
26390 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
263a0 74 65 33 5f 76 66 73 2a 2a 2c 63 68 61 72 2a 2a  te3_vfs**,char**
263b0 2c 63 68 61 72 20 2a 2a 29 3b 0a 42 74 72 65 65  ,char **);.Btree
263c0 20 2a 73 71 6c 69 74 65 33 44 62 4e 61 6d 65 54   *sqlite3DbNameT
263d0 6f 42 74 72 65 65 28 73 71 6c 69 74 65 33 2a 2c  oBtree(sqlite3*,
263e0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 0a 23  const char*);..#
263f0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54  ifdef SQLITE_UNT
26400 45 53 54 41 42 4c 45 0a 23 20 64 65 66 69 6e 65  ESTABLE.# define
26410 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d   sqlite3FaultSim
26420 28 58 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 65  (X) SQLITE_OK.#e
26430 6c 73 65 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  lse.  int sqlite
26440 33 46 61 75 6c 74 53 69 6d 28 69 6e 74 29 3b 0a  3FaultSim(int);.
26450 23 65 6e 64 69 66 0a 0a 42 69 74 76 65 63 20 2a  #endif..Bitvec *
26460 73 71 6c 69 74 65 33 42 69 74 76 65 63 43 72 65  sqlite3BitvecCre
26470 61 74 65 28 75 33 32 29 3b 0a 69 6e 74 20 73 71  ate(u32);.int sq
26480 6c 69 74 65 33 42 69 74 76 65 63 54 65 73 74 28  lite3BitvecTest(
26490 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69  Bitvec*, u32);.i
264a0 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  nt sqlite3Bitvec
264b0 54 65 73 74 4e 6f 74 4e 75 6c 6c 28 42 69 74 76  TestNotNull(Bitv
264c0 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73  ec*, u32);.int s
264d0 71 6c 69 74 65 33 42 69 74 76 65 63 53 65 74 28  qlite3BitvecSet(
264e0 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 76  Bitvec*, u32);.v
264f0 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74 76 65  oid sqlite3Bitve
26500 63 43 6c 65 61 72 28 42 69 74 76 65 63 2a 2c 20  cClear(Bitvec*, 
26510 75 33 32 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69  u32, void*);.voi
26520 64 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 44  d sqlite3BitvecD
26530 65 73 74 72 6f 79 28 42 69 74 76 65 63 2a 29 3b  estroy(Bitvec*);
26540 0a 75 33 32 20 73 71 6c 69 74 65 33 42 69 74 76  .u32 sqlite3Bitv
26550 65 63 53 69 7a 65 28 42 69 74 76 65 63 2a 29 3b  ecSize(Bitvec*);
26560 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
26570 55 4e 54 45 53 54 41 42 4c 45 0a 69 6e 74 20 73  UNTESTABLE.int s
26580 71 6c 69 74 65 33 42 69 74 76 65 63 42 75 69 6c  qlite3BitvecBuil
26590 74 69 6e 54 65 73 74 28 69 6e 74 2c 69 6e 74 2a  tinTest(int,int*
265a0 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
265b0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
265c0 54 52 41 4e 53 41 43 54 49 4f 4e 5f 50 41 47 45  TRANSACTION_PAGE
265d0 53 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 42  S.  int sqlite3B
265e0 69 74 76 65 63 54 6f 41 72 72 61 79 28 42 69 74  itvecToArray(Bit
265f0 76 65 63 20 2a 70 2c 20 69 6e 74 20 2a 70 6e 45  vec *p, int *pnE
26600 6c 65 6d 2c 20 75 33 32 20 2a 2a 70 61 45 6c 65  lem, u32 **paEle
26610 6d 29 3b 0a 23 65 6e 64 69 66 0a 0a 52 6f 77 53  m);.#endif..RowS
26620 65 74 20 2a 73 71 6c 69 74 65 33 52 6f 77 53 65  et *sqlite3RowSe
26630 74 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20  tInit(sqlite3*, 
26640 76 6f 69 64 2a 2c 20 75 6e 73 69 67 6e 65 64 20  void*, unsigned 
26650 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
26660 65 33 52 6f 77 53 65 74 43 6c 65 61 72 28 52 6f  e3RowSetClear(Ro
26670 77 53 65 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  wSet*);.void sql
26680 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74  ite3RowSetInsert
26690 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 29 3b 0a  (RowSet*, i64);.
266a0 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53 65  int sqlite3RowSe
266b0 74 54 65 73 74 28 52 6f 77 53 65 74 2a 2c 20 69  tTest(RowSet*, i
266c0 6e 74 20 69 42 61 74 63 68 2c 20 69 36 34 29 3b  nt iBatch, i64);
266d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53  .int sqlite3RowS
266e0 65 74 4e 65 78 74 28 52 6f 77 53 65 74 2a 2c 20  etNext(RowSet*, 
266f0 69 36 34 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c  i64*);..void sql
26700 69 74 65 33 43 72 65 61 74 65 56 69 65 77 28 50  ite3CreateView(P
26710 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
26720 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c  en*,Token*,ExprL
26730 69 73 74 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74  ist*,Select*,int
26740 2c 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66  ,int);..#if !def
26750 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
26760 5f 56 49 45 57 29 20 7c 7c 20 21 64 65 66 69 6e  _VIEW) || !defin
26770 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
26780 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 20 20 69  IRTUALTABLE).  i
26790 6e 74 20 73 71 6c 69 74 65 33 56 69 65 77 47 65  nt sqlite3ViewGe
267a0 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50 61 72  tColumnNames(Par
267b0 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c  se*,Table*);.#el
267c0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
267d0 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e  te3ViewGetColumn
267e0 4e 61 6d 65 73 28 41 2c 42 29 20 30 0a 23 65 6e  Names(A,B) 0.#en
267f0 64 69 66 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f  dif..#if SQLITE_
26800 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a  MAX_ATTACHED>30.
26810 20 20 69 6e 74 20 73 71 6c 69 74 65 33 44 62 4d    int sqlite3DbM
26820 61 73 6b 41 6c 6c 5a 65 72 6f 28 79 44 62 4d 61  askAllZero(yDbMa
26830 73 6b 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64  sk);.#endif.void
26840 20 73 71 6c 69 74 65 33 44 72 6f 70 54 61 62 6c   sqlite3DropTabl
26850 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  e(Parse*, SrcLis
26860 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  t*, int, int);.v
26870 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 44  oid sqlite3CodeD
26880 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ropTable(Parse*,
26890 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
268a0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
268b0 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69  DeleteTable(sqli
268c0 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23  te3*, Table*);.#
268d0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
268e0 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  IT_AUTOINCREMENT
268f0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
26900 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69  utoincrementBegi
26910 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29  n(Parse *pParse)
26920 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
26930 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64  AutoincrementEnd
26940 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b  (Parse *pParse);
26950 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
26960 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65  sqlite3Autoincre
26970 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a 23 20 64  mentBegin(X).# d
26980 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
26990 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 58 29  oincrementEnd(X)
269a0 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
269b0 69 74 65 33 49 6e 73 65 72 74 28 50 61 72 73 65  ite3Insert(Parse
269c0 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 53 65 6c  *, SrcList*, Sel
269d0 65 63 74 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 69  ect*, IdList*, i
269e0 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  nt);.void *sqlit
269f0 65 33 41 72 72 61 79 41 6c 6c 6f 63 61 74 65 28  e3ArrayAllocate(
26a00 73 71 6c 69 74 65 33 2a 2c 76 6f 69 64 2a 2c 69  sqlite3*,void*,i
26a10 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49  nt,int*,int*);.I
26a20 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64  dList *sqlite3Id
26a30 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74  ListAppend(sqlit
26a40 65 33 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 54 6f  e3*, IdList*, To
26a50 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
26a60 65 33 49 64 4c 69 73 74 49 6e 64 65 78 28 49 64  e3IdListIndex(Id
26a70 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72  List*,const char
26a80 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c  *);.SrcList *sql
26a90 69 74 65 33 53 72 63 4c 69 73 74 45 6e 6c 61 72  ite3SrcListEnlar
26aa0 67 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63  ge(sqlite3*, Src
26ab0 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  List*, int, int)
26ac0 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74  ;.SrcList *sqlit
26ad0 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64 28  e3SrcListAppend(
26ae0 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73  sqlite3*, SrcLis
26af0 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  t*, Token*, Toke
26b00 6e 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71  n*);.SrcList *sq
26b10 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70 70 65  lite3SrcListAppe
26b20 6e 64 46 72 6f 6d 54 65 72 6d 28 50 61 72 73 65  ndFromTerm(Parse
26b30 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b  *, SrcList*, Tok
26b40 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20  en*, Token*,.   
26b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26b70 20 20 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65 63     Token*, Selec
26b80 74 2a 2c 20 45 78 70 72 2a 2c 20 49 64 4c 69 73  t*, Expr*, IdLis
26b90 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
26ba0 33 53 72 63 4c 69 73 74 49 6e 64 65 78 65 64 42  3SrcListIndexedB
26bb0 79 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69  y(Parse *, SrcLi
26bc0 73 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a  st *, Token *);.
26bd0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c  void sqlite3SrcL
26be0 69 73 74 46 75 6e 63 41 72 67 73 28 50 61 72 73  istFuncArgs(Pars
26bf0 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78  e*, SrcList*, Ex
26c00 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
26c10 6c 69 74 65 33 49 6e 64 65 78 65 64 42 79 4c 6f  lite3IndexedByLo
26c20 6f 6b 75 70 28 50 61 72 73 65 20 2a 2c 20 73 74  okup(Parse *, st
26c30 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65  ruct SrcList_ite
26c40 6d 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  m *);.void sqlit
26c50 65 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f  e3SrcListShiftJo
26c60 69 6e 54 79 70 65 28 53 72 63 4c 69 73 74 2a 29  inType(SrcList*)
26c70 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72  ;.void sqlite3Sr
26c80 63 4c 69 73 74 41 73 73 69 67 6e 43 75 72 73 6f  cListAssignCurso
26c90 72 73 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  rs(Parse*, SrcLi
26ca0 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
26cb0 65 33 49 64 4c 69 73 74 44 65 6c 65 74 65 28 73  e3IdListDelete(s
26cc0 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a  qlite3*, IdList*
26cd0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
26ce0 72 63 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c  rcListDelete(sql
26cf0 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 29  ite3*, SrcList*)
26d00 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33  ;.Index *sqlite3
26d10 41 6c 6c 6f 63 61 74 65 49 6e 64 65 78 4f 62 6a  AllocateIndexObj
26d20 65 63 74 28 73 71 6c 69 74 65 33 2a 2c 69 31 36  ect(sqlite3*,i16
26d30 2c 69 6e 74 2c 63 68 61 72 2a 2a 29 3b 0a 76 6f  ,int,char**);.vo
26d40 69 64 20 73 71 6c 69 74 65 33 43 72 65 61 74 65  id sqlite3Create
26d50 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 6f 6b  Index(Parse*,Tok
26d60 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63 4c 69  en*,Token*,SrcLi
26d70 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e  st*,ExprList*,in
26d80 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20  t,Token*,.      
26d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26da0 20 20 20 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20      Expr*, int, 
26db0 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73  int, u8);.void s
26dc0 71 6c 69 74 65 33 44 72 6f 70 49 6e 64 65 78 28  qlite3DropIndex(
26dd0 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
26de0 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
26df0 74 65 33 53 65 6c 65 63 74 28 50 61 72 73 65 2a  te3Select(Parse*
26e00 2c 20 53 65 6c 65 63 74 2a 2c 20 53 65 6c 65 63  , Select*, Selec
26e10 74 44 65 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20  tDest*);.Select 
26e20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74 4e 65  *sqlite3SelectNe
26e30 77 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73  w(Parse*,ExprLis
26e40 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72  t*,SrcList*,Expr
26e50 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 0a 20 20 20  *,ExprList*,.   
26e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26e70 20 20 20 20 20 20 45 78 70 72 2a 2c 45 78 70 72        Expr*,Expr
26e80 4c 69 73 74 2a 2c 75 33 32 2c 45 78 70 72 2a 2c  List*,u32,Expr*,
26e90 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
26ea0 69 74 65 33 53 65 6c 65 63 74 44 65 6c 65 74 65  ite3SelectDelete
26eb0 28 73 71 6c 69 74 65 33 2a 2c 20 53 65 6c 65 63  (sqlite3*, Selec
26ec0 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69  t*);.Table *sqli
26ed0 74 65 33 53 72 63 4c 69 73 74 4c 6f 6f 6b 75 70  te3SrcListLookup
26ee0 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
26ef0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
26f00 73 52 65 61 64 4f 6e 6c 79 28 50 61 72 73 65 2a  sReadOnly(Parse*
26f10 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a  , Table*, int);.
26f20 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e  void sqlite3Open
26f30 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 69 6e  Table(Parse*, in
26f40 74 20 69 43 75 72 2c 20 69 6e 74 20 69 44 62 2c  t iCur, int iDb,
26f50 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23   Table*, int);.#
26f60 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
26f70 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f  E_ENABLE_UPDATE_
26f80 44 45 4c 45 54 45 5f 4c 49 4d 49 54 29 20 26 26  DELETE_LIMIT) &&
26f90 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
26fa0 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52 59 29 0a  _OMIT_SUBQUERY).
26fb0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 4c 69 6d  Expr *sqlite3Lim
26fc0 69 74 57 68 65 72 65 28 50 61 72 73 65 2a 2c 53  itWhere(Parse*,S
26fd0 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78  rcList*,Expr*,Ex
26fe0 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78  prList*,Expr*,Ex
26ff0 70 72 2a 2c 63 68 61 72 2a 29 3b 0a 23 65 6e 64  pr*,char*);.#end
27000 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  if.void sqlite3D
27010 65 6c 65 74 65 46 72 6f 6d 28 50 61 72 73 65 2a  eleteFrom(Parse*
27020 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72  , SrcList*, Expr
27030 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
27040 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c 20 53  Update(Parse*, S
27050 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73  rcList*, ExprLis
27060 74 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  t*, Expr*, int);
27070 0a 57 68 65 72 65 49 6e 66 6f 20 2a 73 71 6c 69  .WhereInfo *sqli
27080 74 65 33 57 68 65 72 65 42 65 67 69 6e 28 50 61  te3WhereBegin(Pa
27090 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78  rse*,SrcList*,Ex
270a0 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78  pr*,ExprList*,Ex
270b0 70 72 4c 69 73 74 2a 2c 75 31 36 2c 69 6e 74 29  prList*,u16,int)
270c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 68  ;.void sqlite3Wh
270d0 65 72 65 45 6e 64 28 57 68 65 72 65 49 6e 66 6f  ereEnd(WhereInfo
270e0 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74  *);.LogEst sqlit
270f0 65 33 57 68 65 72 65 4f 75 74 70 75 74 52 6f 77  e3WhereOutputRow
27100 43 6f 75 6e 74 28 57 68 65 72 65 49 6e 66 6f 2a  Count(WhereInfo*
27110 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
27120 65 72 65 49 73 44 69 73 74 69 6e 63 74 28 57 68  ereIsDistinct(Wh
27130 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
27140 71 6c 69 74 65 33 57 68 65 72 65 49 73 4f 72 64  qlite3WhereIsOrd
27150 65 72 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29  ered(WhereInfo*)
27160 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
27170 72 65 4f 72 64 65 72 65 64 49 6e 6e 65 72 4c 6f  reOrderedInnerLo
27180 6f 70 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  op(WhereInfo*);.
27190 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
271a0 49 73 53 6f 72 74 65 64 28 57 68 65 72 65 49 6e  IsSorted(WhereIn
271b0 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  fo*);.int sqlite
271c0 33 57 68 65 72 65 43 6f 6e 74 69 6e 75 65 4c 61  3WhereContinueLa
271d0 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  bel(WhereInfo*);
271e0 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
271f0 65 42 72 65 61 6b 4c 61 62 65 6c 28 57 68 65 72  eBreakLabel(Wher
27200 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
27210 69 74 65 33 57 68 65 72 65 4f 6b 4f 6e 65 50 61  ite3WhereOkOnePa
27220 73 73 28 57 68 65 72 65 49 6e 66 6f 2a 2c 20 69  ss(WhereInfo*, i
27230 6e 74 2a 29 3b 0a 23 64 65 66 69 6e 65 20 4f 4e  nt*);.#define ON
27240 45 50 41 53 53 5f 4f 46 46 20 20 20 20 20 20 30  EPASS_OFF      0
27250 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 6f          /* Use o
27260 66 20 4f 4e 45 50 41 53 53 20 6e 6f 74 20 61 6c  f ONEPASS not al
27270 6c 6f 77 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  lowed */.#define
27280 20 4f 4e 45 50 41 53 53 5f 53 49 4e 47 4c 45 20   ONEPASS_SINGLE 
27290 20 20 31 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e    1        /* ON
272a0 45 50 41 53 53 20 76 61 6c 69 64 20 66 6f 72 20  EPASS valid for 
272b0 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 75 70 64  a single row upd
272c0 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ate */.#define O
272d0 4e 45 50 41 53 53 5f 4d 55 4c 54 49 20 20 20 20  NEPASS_MULTI    
272e0 32 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 45 50  2        /* ONEP
272f0 41 53 53 20 69 73 20 76 61 6c 69 64 20 66 6f 72  ASS is valid for
27300 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a   multiple rows *
27310 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  /.void sqlite3Ex
27320 70 72 43 6f 64 65 4c 6f 61 64 49 6e 64 65 78 43  prCodeLoadIndexC
27330 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 49 6e  olumn(Parse*, In
27340 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  dex*, int, int, 
27350 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
27360 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75  3ExprCodeGetColu
27370 6d 6e 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  mn(Parse*, Table
27380 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
27390 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69  , u8);.void sqli
273a0 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f  te3ExprCodeGetCo
273b0 6c 75 6d 6e 54 6f 52 65 67 28 50 61 72 73 65 2a  lumnToReg(Parse*
273c0 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
273d0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
273e0 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65  qlite3ExprCodeGe
273f0 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 56  tColumnOfTable(V
27400 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  dbe*, Table*, in
27410 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
27420 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
27430 64 65 4d 6f 76 65 28 50 61 72 73 65 2a 2c 20 69  deMove(Parse*, i
27440 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
27450 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
27460 61 63 68 65 53 74 6f 72 65 28 50 61 72 73 65 2a  acheStore(Parse*
27470 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
27480 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
27490 70 72 43 61 63 68 65 50 75 73 68 28 50 61 72 73  prCachePush(Pars
274a0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
274b0 33 45 78 70 72 43 61 63 68 65 50 6f 70 28 50 61  3ExprCachePop(Pa
274c0 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
274d0 74 65 33 45 78 70 72 43 61 63 68 65 52 65 6d 6f  te3ExprCacheRemo
274e0 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  ve(Parse*, int, 
274f0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
27500 65 33 45 78 70 72 43 61 63 68 65 43 6c 65 61 72  e3ExprCacheClear
27510 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
27520 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 41  qlite3ExprCacheA
27530 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28 50 61  ffinityChange(Pa
27540 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  rse*, int, int);
27550 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
27560 72 43 6f 64 65 28 50 61 72 73 65 2a 2c 20 45 78  rCode(Parse*, Ex
27570 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  pr*, int);.void 
27580 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 43  sqlite3ExprCodeC
27590 6f 70 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72  opy(Parse*, Expr
275a0 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
275b0 6c 69 74 65 33 45 78 70 72 43 6f 64 65 46 61 63  lite3ExprCodeFac
275c0 74 6f 72 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  torable(Parse*, 
275d0 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  Expr*, int);.int
275e0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
275f0 41 74 49 6e 69 74 28 50 61 72 73 65 2a 2c 20 45  AtInit(Parse*, E
27600 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  xpr*, int);.int 
27610 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54  sqlite3ExprCodeT
27620 65 6d 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72  emp(Parse*, Expr
27630 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71  *, int*);.int sq
27640 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54 61 72  lite3ExprCodeTar
27650 67 65 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72  get(Parse*, Expr
27660 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
27670 6c 69 74 65 33 45 78 70 72 43 6f 64 65 41 6e 64  lite3ExprCodeAnd
27680 43 61 63 68 65 28 50 61 72 73 65 2a 2c 20 45 78  Cache(Parse*, Ex
27690 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  pr*, int);.int s
276a0 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 45 78  qlite3ExprCodeEx
276b0 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 20 45  prList(Parse*, E
276c0 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69  xprList*, int, i
276d0 6e 74 2c 20 75 38 29 3b 0a 23 64 65 66 69 6e 65  nt, u8);.#define
276e0 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 44 55 50   SQLITE_ECEL_DUP
276f0 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20 44        0x01  /* D
27700 65 65 70 2c 20 6e 6f 74 20 73 68 61 6c 6c 6f 77  eep, not shallow
27710 20 63 6f 70 69 65 73 20 2a 2f 0a 23 64 65 66 69   copies */.#defi
27720 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 46  ne SQLITE_ECEL_F
27730 41 43 54 4f 52 20 20 20 30 78 30 32 20 20 2f 2a  ACTOR   0x02  /*
27740 20 46 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73   Factor out cons
27750 74 61 6e 74 20 74 65 72 6d 73 20 2a 2f 0a 23 64  tant terms */.#d
27760 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45  efine SQLITE_ECE
27770 4c 5f 52 45 46 20 20 20 20 20 20 30 78 30 34 20  L_REF      0x04 
27780 20 2f 2a 20 55 73 65 20 45 78 70 72 4c 69 73 74   /* Use ExprList
27790 2e 75 2e 78 2e 69 4f 72 64 65 72 42 79 43 6f 6c  .u.x.iOrderByCol
277a0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
277b0 54 45 5f 45 43 45 4c 5f 4f 4d 49 54 52 45 46 20  TE_ECEL_OMITREF 
277c0 20 30 78 30 38 20 20 2f 2a 20 4f 6d 69 74 20 69   0x08  /* Omit i
277d0 66 20 45 78 70 72 4c 69 73 74 2e 75 2e 78 2e 69  f ExprList.u.x.i
277e0 4f 72 64 65 72 42 79 43 6f 6c 20 2a 2f 0a 76 6f  OrderByCol */.vo
277f0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66  id sqlite3ExprIf
27800 54 72 75 65 28 50 61 72 73 65 2a 2c 20 45 78 70  True(Parse*, Exp
27810 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  r*, int, int);.v
27820 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 49  oid sqlite3ExprI
27830 66 46 61 6c 73 65 28 50 61 72 73 65 2a 2c 20 45  fFalse(Parse*, E
27840 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  xpr*, int, int);
27850 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
27860 72 49 66 46 61 6c 73 65 44 75 70 28 50 61 72 73  rIfFalseDup(Pars
27870 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20  e*, Expr*, int, 
27880 69 6e 74 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c  int);.Table *sql
27890 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 73 71  ite3FindTable(sq
278a0 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
278b0 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
278c0 3b 0a 23 64 65 66 69 6e 65 20 4c 4f 43 41 54 45  ;.#define LOCATE
278d0 5f 56 49 45 57 20 20 20 20 30 78 30 31 0a 23 64  _VIEW    0x01.#d
278e0 65 66 69 6e 65 20 4c 4f 43 41 54 45 5f 4e 4f 45  efine LOCATE_NOE
278f0 52 52 20 20 20 30 78 30 32 0a 54 61 62 6c 65 20  RR   0x02.Table 
27900 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61  *sqlite3LocateTa
27910 62 6c 65 28 50 61 72 73 65 2a 2c 75 33 32 20 66  ble(Parse*,u32 f
27920 6c 61 67 73 2c 63 6f 6e 73 74 20 63 68 61 72 2a  lags,const char*
27930 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
27940 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f  Table *sqlite3Lo
27950 63 61 74 65 54 61 62 6c 65 49 74 65 6d 28 50 61  cateTableItem(Pa
27960 72 73 65 2a 2c 75 33 32 20 66 6c 61 67 73 2c 73  rse*,u32 flags,s
27970 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74  truct SrcList_it
27980 65 6d 20 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71  em *);.Index *sq
27990 6c 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28 73  lite3FindIndex(s
279a0 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
279b0 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
279c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
279d0 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61  nlinkAndDeleteTa
279e0 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  ble(sqlite3*,int
279f0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  ,const char*);.v
27a00 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  oid sqlite3Unlin
27a10 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28  kAndDeleteIndex(
27a20 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e  sqlite3*,int,con
27a30 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
27a40 73 71 6c 69 74 65 33 56 61 63 75 75 6d 28 50 61  sqlite3Vacuum(Pa
27a50 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  rse*,Token*);.in
27a60 74 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75  t sqlite3RunVacu
27a70 75 6d 28 63 68 61 72 2a 2a 2c 20 73 71 6c 69 74  um(char**, sqlit
27a80 65 33 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20  e3*, int);.char 
27a90 2a 73 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d  *sqlite3NameFrom
27aa0 54 6f 6b 65 6e 28 73 71 6c 69 74 65 33 2a 2c 20  Token(sqlite3*, 
27ab0 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
27ac0 69 74 65 33 45 78 70 72 43 6f 6d 70 61 72 65 28  ite3ExprCompare(
27ad0 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  Expr*, Expr*, in
27ae0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
27af0 78 70 72 4c 69 73 74 43 6f 6d 70 61 72 65 28 45  xprListCompare(E
27b00 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69  xprList*, ExprLi
27b10 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  st*, int);.int s
27b20 71 6c 69 74 65 33 45 78 70 72 49 6d 70 6c 69 65  qlite3ExprImplie
27b30 73 45 78 70 72 28 45 78 70 72 2a 2c 20 45 78 70  sExpr(Expr*, Exp
27b40 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  r*, int);.void s
27b50 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a  qlite3ExprAnalyz
27b60 65 41 67 67 72 65 67 61 74 65 73 28 4e 61 6d 65  eAggregates(Name
27b70 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29  Context*, Expr*)
27b80 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
27b90 70 72 41 6e 61 6c 79 7a 65 41 67 67 4c 69 73 74  prAnalyzeAggList
27ba0 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 45 78  (NameContext*,Ex
27bb0 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
27bc0 6c 69 74 65 33 45 78 70 72 43 6f 76 65 72 65 64  lite3ExprCovered
27bd0 42 79 49 6e 64 65 78 28 45 78 70 72 2a 2c 20 69  ByIndex(Expr*, i
27be0 6e 74 20 69 43 75 72 2c 20 49 6e 64 65 78 20 2a  nt iCur, Index *
27bf0 70 49 64 78 29 3b 0a 69 6e 74 20 73 71 6c 69 74  pIdx);.int sqlit
27c00 65 33 46 75 6e 63 74 69 6f 6e 55 73 65 73 54 68  e3FunctionUsesTh
27c10 69 73 53 72 63 28 45 78 70 72 2a 2c 20 53 72 63  isSrc(Expr*, Src
27c20 4c 69 73 74 2a 29 3b 0a 56 64 62 65 20 2a 73 71  List*);.Vdbe *sq
27c30 6c 69 74 65 33 47 65 74 56 64 62 65 28 50 61 72  lite3GetVdbe(Par
27c40 73 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  se*);.#ifndef SQ
27c50 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a  LITE_UNTESTABLE.
27c60 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67  void sqlite3Prng
27c70 53 61 76 65 53 74 61 74 65 28 76 6f 69 64 29 3b  SaveState(void);
27c80 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e  .void sqlite3Prn
27c90 67 52 65 73 74 6f 72 65 53 74 61 74 65 28 76 6f  gRestoreState(vo
27ca0 69 64 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64  id);.#endif.void
27cb0 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b   sqlite3Rollback
27cc0 41 6c 6c 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  All(sqlite3*,int
27cd0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
27ce0 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28  odeVerifySchema(
27cf0 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Parse*, int);.vo
27d00 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65  id sqlite3CodeVe
27d10 72 69 66 79 4e 61 6d 65 64 53 63 68 65 6d 61 28  rifyNamedSchema(
27d20 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
27d30 61 72 20 2a 7a 44 62 29 3b 0a 76 6f 69 64 20 73  ar *zDb);.void s
27d40 71 6c 69 74 65 33 42 65 67 69 6e 54 72 61 6e 73  qlite3BeginTrans
27d50 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69  action(Parse*, i
27d60 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
27d70 33 43 6f 6d 6d 69 74 54 72 61 6e 73 61 63 74 69  3CommitTransacti
27d80 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  on(Parse*);.void
27d90 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b   sqlite3Rollback
27da0 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73  Transaction(Pars
27db0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
27dc0 33 53 61 76 65 70 6f 69 6e 74 28 50 61 72 73 65  3Savepoint(Parse
27dd0 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b  *, int, Token*);
27de0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f  .void sqlite3Clo
27df0 73 65 53 61 76 65 70 6f 69 6e 74 73 28 73 71 6c  seSavepoints(sql
27e00 69 74 65 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71  ite3 *);.void sq
27e10 6c 69 74 65 33 4c 65 61 76 65 4d 75 74 65 78 41  lite3LeaveMutexA
27e20 6e 64 43 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71  ndCloseZombie(sq
27e30 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c  lite3*);.int sql
27e40 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61  ite3ExprIsConsta
27e50 6e 74 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  nt(Expr*);.int s
27e60 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73  qlite3ExprIsCons
27e70 74 61 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78 70 72  tantNotJoin(Expr
27e80 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
27e90 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72 46  xprIsConstantOrF
27ea0 75 6e 63 74 69 6f 6e 28 45 78 70 72 2a 2c 20 75  unction(Expr*, u
27eb0 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  8);.int sqlite3E
27ec0 78 70 72 49 73 54 61 62 6c 65 43 6f 6e 73 74 61  xprIsTableConsta
27ed0 6e 74 28 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 23  nt(Expr*,int);.#
27ee0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
27ef0 42 4c 45 5f 43 55 52 53 4f 52 5f 48 49 4e 54 53  BLE_CURSOR_HINTS
27f00 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
27f10 43 6f 6e 74 61 69 6e 73 53 75 62 71 75 65 72 79  ContainsSubquery
27f20 28 45 78 70 72 2a 29 3b 0a 23 65 6e 64 69 66 0a  (Expr*);.#endif.
27f30 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
27f40 73 49 6e 74 65 67 65 72 28 45 78 70 72 2a 2c 20  sInteger(Expr*, 
27f50 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  int*);.int sqlit
27f60 65 33 45 78 70 72 43 61 6e 42 65 4e 75 6c 6c 28  e3ExprCanBeNull(
27f70 63 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a 69 6e  const Expr*);.in
27f80 74 20 73 71 6c 69 74 65 33 45 78 70 72 4e 65 65  t sqlite3ExprNee
27f90 64 73 4e 6f 41 66 66 69 6e 69 74 79 43 68 61 6e  dsNoAffinityChan
27fa0 67 65 28 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20  ge(const Expr*, 
27fb0 63 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74  char);.int sqlit
27fc0 65 33 49 73 52 6f 77 69 64 28 63 6f 6e 73 74 20  e3IsRowid(const 
27fd0 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
27fe0 69 74 65 33 47 65 6e 65 72 61 74 65 52 6f 77 44  ite3GenerateRowD
27ff0 65 6c 65 74 65 28 0a 20 20 20 20 50 61 72 73 65  elete(.    Parse
28000 2a 2c 54 61 62 6c 65 2a 2c 54 72 69 67 67 65 72  *,Table*,Trigger
28010 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 31  *,int,int,int,i1
28020 36 2c 75 38 2c 75 38 2c 75 38 2c 69 6e 74 29 3b  6,u8,u8,u8,int);
28030 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e  .void sqlite3Gen
28040 65 72 61 74 65 52 6f 77 49 6e 64 65 78 44 65 6c  erateRowIndexDel
28050 65 74 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ete(Parse*, Tabl
28060 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
28070 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  t*, int);.int sq
28080 6c 69 74 65 33 47 65 6e 65 72 61 74 65 49 6e 64  lite3GenerateInd
28090 65 78 4b 65 79 28 50 61 72 73 65 2a 2c 20 49 6e  exKey(Parse*, In
280a0 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  dex*, int, int, 
280b0 69 6e 74 2c 20 69 6e 74 2a 2c 49 6e 64 65 78 2a  int, int*,Index*
280c0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
280d0 74 65 33 52 65 73 6f 6c 76 65 50 61 72 74 49 64  te3ResolvePartId
280e0 78 4c 61 62 65 6c 28 50 61 72 73 65 2a 2c 69 6e  xLabel(Parse*,in
280f0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
28100 47 65 6e 65 72 61 74 65 43 6f 6e 73 74 72 61 69  GenerateConstrai
28110 6e 74 43 68 65 63 6b 73 28 50 61 72 73 65 2a 2c  ntChecks(Parse*,
28120 54 61 62 6c 65 2a 2c 69 6e 74 2a 2c 69 6e 74 2c  Table*,int*,int,
28130 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20  int,int,int,.   
28140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28160 20 20 75 38 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a    u8,u8,int,int*
28170 2c 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ,int*);.void sql
28180 69 74 65 33 43 6f 6d 70 6c 65 74 65 49 6e 73 65  ite3CompleteInse
28190 72 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62  rtion(Parse*,Tab
281a0 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  le*,int,int,int,
281b0 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  int*,int,int,int
281c0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70  );.int sqlite3Op
281d0 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69 63 65  enTableAndIndice
281e0 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  s(Parse*, Table*
281f0 2c 20 69 6e 74 2c 20 75 38 2c 20 69 6e 74 2c 20  , int, u8, int, 
28200 75 38 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29  u8*, int*, int*)
28210 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65  ;.void sqlite3Be
28220 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f  ginWriteOperatio
28230 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  n(Parse*, int, i
28240 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
28250 33 4d 75 6c 74 69 57 72 69 74 65 28 50 61 72 73  3MultiWrite(Pars
28260 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
28270 33 4d 61 79 41 62 6f 72 74 28 50 61 72 73 65 2a  3MayAbort(Parse*
28280 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 48  );.void sqlite3H
28290 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28 50 61  altConstraint(Pa
282a0 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  rse*, int, int, 
282b0 63 68 61 72 2a 2c 20 69 38 2c 20 75 38 29 3b 0a  char*, i8, u8);.
282c0 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 69 71  void sqlite3Uniq
282d0 75 65 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72  ueConstraint(Par
282e0 73 65 2a 2c 20 69 6e 74 2c 20 49 6e 64 65 78 2a  se*, int, Index*
282f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
28300 6f 77 69 64 43 6f 6e 73 74 72 61 69 6e 74 28 50  owidConstraint(P
28310 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 61 62 6c  arse*, int, Tabl
28320 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  e*);.Expr *sqlit
28330 65 33 45 78 70 72 44 75 70 28 73 71 6c 69 74 65  e3ExprDup(sqlite
28340 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 45  3*,Expr*,int);.E
28350 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  xprList *sqlite3
28360 45 78 70 72 4c 69 73 74 44 75 70 28 73 71 6c 69  ExprListDup(sqli
28370 74 65 33 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69  te3*,ExprList*,i
28380 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71  nt);.SrcList *sq
28390 6c 69 74 65 33 53 72 63 4c 69 73 74 44 75 70 28  lite3SrcListDup(
283a0 73 71 6c 69 74 65 33 2a 2c 53 72 63 4c 69 73 74  sqlite3*,SrcList
283b0 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69 73 74 20 2a  *,int);.IdList *
283c0 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44 75 70  sqlite3IdListDup
283d0 28 73 71 6c 69 74 65 33 2a 2c 49 64 4c 69 73 74  (sqlite3*,IdList
283e0 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69  *);.Select *sqli
283f0 74 65 33 53 65 6c 65 63 74 44 75 70 28 73 71 6c  te3SelectDup(sql
28400 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e  ite3*,Select*,in
28410 74 29 3b 0a 23 69 66 20 53 45 4c 45 43 54 54 52  t);.#if SELECTTR
28420 41 43 45 5f 45 4e 41 42 4c 45 44 0a 76 6f 69 64  ACE_ENABLED.void
28430 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 53 65   sqlite3SelectSe
28440 74 4e 61 6d 65 28 53 65 6c 65 63 74 2a 2c 63 6f  tName(Select*,co
28450 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73  nst char*);.#els
28460 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
28470 65 33 53 65 6c 65 63 74 53 65 74 4e 61 6d 65 28  e3SelectSetName(
28480 41 2c 42 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64  A,B).#endif.void
28490 20 73 71 6c 69 74 65 33 49 6e 73 65 72 74 42 75   sqlite3InsertBu
284a0 69 6c 74 69 6e 46 75 6e 63 73 28 46 75 6e 63 44  iltinFuncs(FuncD
284b0 65 66 2a 2c 69 6e 74 29 3b 0a 46 75 6e 63 44 65  ef*,int);.FuncDe
284c0 66 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 46 75  f *sqlite3FindFu
284d0 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c  nction(sqlite3*,
284e0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 2c  const char*,int,
284f0 75 38 2c 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c  u8,u8);.void sql
28500 69 74 65 33 52 65 67 69 73 74 65 72 42 75 69 6c  ite3RegisterBuil
28510 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69  tinFunctions(voi
28520 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
28530 52 65 67 69 73 74 65 72 44 61 74 65 54 69 6d 65  RegisterDateTime
28540 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b  Functions(void);
28550 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
28560 69 73 74 65 72 50 65 72 43 6f 6e 6e 65 63 74 69  isterPerConnecti
28570 6f 6e 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f  onBuiltinFunctio
28580 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e  ns(sqlite3*);.in
28590 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43  t sqlite3SafetyC
285a0 68 65 63 6b 4f 6b 28 73 71 6c 69 74 65 33 2a 29  heckOk(sqlite3*)
285b0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66  ;.int sqlite3Saf
285c0 65 74 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b  etyCheckSickOrOk
285d0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
285e0 20 73 71 6c 69 74 65 33 43 68 61 6e 67 65 43 6f   sqlite3ChangeCo
285f0 6f 6b 69 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  okie(Parse*, int
28600 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64  );..#if !defined
28610 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45  (SQLITE_OMIT_VIE
28620 57 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  W) && !defined(S
28630 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
28640 45 52 29 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  ER).void sqlite3
28650 4d 61 74 65 72 69 61 6c 69 7a 65 56 69 65 77 28  MaterializeView(
28660 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
28670 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e  Expr*, int);.#en
28680 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
28690 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
286a0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42  .  void sqlite3B
286b0 65 67 69 6e 54 72 69 67 67 65 72 28 50 61 72 73  eginTrigger(Pars
286c0 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  e*, Token*,Token
286d0 2a 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c 69 73 74  *,int,int,IdList
286e0 2a 2c 53 72 63 4c 69 73 74 2a 2c 0a 20 20 20 20  *,SrcList*,.    
286f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28700 20 20 20 20 20 20 20 45 78 70 72 2a 2c 69 6e 74         Expr*,int
28710 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73  , int);.  void s
28720 71 6c 69 74 65 33 46 69 6e 69 73 68 54 72 69 67  qlite3FinishTrig
28730 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67  ger(Parse*, Trig
28740 67 65 72 53 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a  gerStep*, Token*
28750 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
28760 33 44 72 6f 70 54 72 69 67 67 65 72 28 50 61 72  3DropTrigger(Par
28770 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69  se*, SrcList*, i
28780 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
28790 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 50 74  te3DropTriggerPt
287a0 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65  r(Parse*, Trigge
287b0 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a  r*);.  Trigger *
287c0 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 73 45  sqlite3TriggersE
287d0 78 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61  xist(Parse *, Ta
287e0 62 6c 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c  ble*, int, ExprL
287f0 69 73 74 2a 2c 20 69 6e 74 20 2a 70 4d 61 73 6b  ist*, int *pMask
28800 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71  );.  Trigger *sq
28810 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69 73 74  lite3TriggerList
28820 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 20  (Parse *, Table 
28830 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
28840 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72  e3CodeRowTrigger
28850 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72  (Parse*, Trigger
28860 20 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73   *, int, ExprLis
28870 74 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 20 2a  t*, int, Table *
28880 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
28890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
288a0 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20  t, int, int);.  
288b0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65  void sqlite3Code
288c0 52 6f 77 54 72 69 67 67 65 72 44 69 72 65 63 74  RowTriggerDirect
288d0 28 50 61 72 73 65 20 2a 2c 20 54 72 69 67 67 65  (Parse *, Trigge
288e0 72 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e  r *, Table *, in
288f0 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20  t, int, int);.  
28900 76 6f 69 64 20 73 71 6c 69 74 65 56 69 65 77 54  void sqliteViewT
28910 72 69 67 67 65 72 73 28 50 61 72 73 65 2a 2c 20  riggers(Parse*, 
28920 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Table*, Expr*, i
28930 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  nt, ExprList*);.
28940 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65    void sqlite3De
28950 6c 65 74 65 54 72 69 67 67 65 72 53 74 65 70 28  leteTriggerStep(
28960 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65  sqlite3*, Trigge
28970 72 53 74 65 70 2a 29 3b 0a 20 20 54 72 69 67 67  rStep*);.  Trigg
28980 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54  erStep *sqlite3T
28990 72 69 67 67 65 72 53 65 6c 65 63 74 53 74 65 70  riggerSelectStep
289a0 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74  (sqlite3*,Select
289b0 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65  *);.  TriggerSte
289c0 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  p *sqlite3Trigge
289d0 72 49 6e 73 65 72 74 53 74 65 70 28 73 71 6c 69  rInsertStep(sqli
289e0 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c  te3*,Token*, IdL
289f0 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ist*,.          
28a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 65                Se
28a20 6c 65 63 74 2a 2c 75 38 29 3b 0a 20 20 54 72 69  lect*,u8);.  Tri
28a30 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65  ggerStep *sqlite
28a40 33 54 72 69 67 67 65 72 55 70 64 61 74 65 53 74  3TriggerUpdateSt
28a50 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65  ep(sqlite3*,Toke
28a60 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 45 78  n*,ExprList*, Ex
28a70 70 72 2a 2c 20 75 38 29 3b 0a 20 20 54 72 69 67  pr*, u8);.  Trig
28a80 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33  gerStep *sqlite3
28a90 54 72 69 67 67 65 72 44 65 6c 65 74 65 53 74 65  TriggerDeleteSte
28aa0 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e  p(sqlite3*,Token
28ab0 2a 2c 20 45 78 70 72 2a 29 3b 0a 20 20 76 6f 69  *, Expr*);.  voi
28ac0 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54  d sqlite3DeleteT
28ad0 72 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c  rigger(sqlite3*,
28ae0 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 76 6f   Trigger*);.  vo
28af0 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  id sqlite3Unlink
28b00 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72  AndDeleteTrigger
28b10 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f  (sqlite3*,int,co
28b20 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 75 33  nst char*);.  u3
28b30 32 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72  2 sqlite3Trigger
28b40 43 6f 6c 6d 61 73 6b 28 50 61 72 73 65 2a 2c 54  Colmask(Parse*,T
28b50 72 69 67 67 65 72 2a 2c 45 78 70 72 4c 69 73 74  rigger*,ExprList
28b60 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61 62 6c 65 2a  *,int,int,Table*
28b70 2c 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20  ,int);.# define 
28b80 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c  sqlite3ParseTopl
28b90 65 76 65 6c 28 70 29 20 28 28 70 29 2d 3e 70 54  evel(p) ((p)->pT
28ba0 6f 70 6c 65 76 65 6c 20 3f 20 28 70 29 2d 3e 70  oplevel ? (p)->p
28bb0 54 6f 70 6c 65 76 65 6c 20 3a 20 28 70 29 29 0a  Toplevel : (p)).
28bc0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
28bd0 49 73 54 6f 70 6c 65 76 65 6c 28 70 29 20 28 28  IsToplevel(p) ((
28be0 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 3d 3d 30  p)->pToplevel==0
28bf0 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
28c00 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 73   sqlite3Triggers
28c10 45 78 69 73 74 28 42 2c 43 2c 44 2c 45 2c 46 29  Exist(B,C,D,E,F)
28c20 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69   0.# define sqli
28c30 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65 72  te3DeleteTrigger
28c40 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73  (A,B).# define s
28c50 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65  qlite3DropTrigge
28c60 72 50 74 72 28 41 2c 42 29 0a 23 20 64 65 66 69  rPtr(A,B).# defi
28c70 6e 65 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  ne sqlite3Unlink
28c80 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72  AndDeleteTrigger
28c90 28 41 2c 42 2c 43 29 0a 23 20 64 65 66 69 6e 65  (A,B,C).# define
28ca0 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54   sqlite3CodeRowT
28cb0 72 69 67 67 65 72 28 41 2c 42 2c 43 2c 44 2c 45  rigger(A,B,C,D,E
28cc0 2c 46 2c 47 2c 48 2c 49 29 0a 23 20 64 65 66 69  ,F,G,H,I).# defi
28cd0 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f  ne sqlite3CodeRo
28ce0 77 54 72 69 67 67 65 72 44 69 72 65 63 74 28 41  wTriggerDirect(A
28cf0 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a 23 20 64 65  ,B,C,D,E,F).# de
28d00 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67  fine sqlite3Trig
28d10 67 65 72 4c 69 73 74 28 58 2c 20 59 29 20 30 0a  gerList(X, Y) 0.
28d20 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
28d30 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29  ParseToplevel(p)
28d40 20 70 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69   p.# define sqli
28d50 74 65 33 49 73 54 6f 70 6c 65 76 65 6c 28 70 29  te3IsToplevel(p)
28d60 20 31 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69   1.# define sqli
28d70 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73  te3TriggerColmas
28d80 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 29  k(A,B,C,D,E,F,G)
28d90 20 30 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73   0.#endif..int s
28da0 71 6c 69 74 65 33 4a 6f 69 6e 54 79 70 65 28 50  qlite3JoinType(P
28db0 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  arse*, Token*, T
28dc0 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  oken*, Token*);.
28dd0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65 61  void sqlite3Crea
28de0 74 65 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72  teForeignKey(Par
28df0 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
28e00 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c 69 73 74  Token*, ExprList
28e10 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
28e20 6c 69 74 65 33 44 65 66 65 72 46 6f 72 65 69 67  lite3DeferForeig
28e30 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 69 6e 74  nKey(Parse*, int
28e40 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
28e50 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41  E_OMIT_AUTHORIZA
28e60 54 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69  TION.  void sqli
28e70 74 65 33 41 75 74 68 52 65 61 64 28 50 61 72 73  te3AuthRead(Pars
28e80 65 2a 2c 45 78 70 72 2a 2c 53 63 68 65 6d 61 2a  e*,Expr*,Schema*
28e90 2c 53 72 63 4c 69 73 74 2a 29 3b 0a 20 20 69 6e  ,SrcList*);.  in
28ea0 74 20 73 71 6c 69 74 65 33 41 75 74 68 43 68 65  t sqlite3AuthChe
28eb0 63 6b 28 50 61 72 73 65 2a 2c 69 6e 74 2c 20 63  ck(Parse*,int, c
28ec0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
28ed0 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
28ee0 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  har*);.  void sq
28ef0 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74  lite3AuthContext
28f00 50 75 73 68 28 50 61 72 73 65 2a 2c 20 41 75 74  Push(Parse*, Aut
28f10 68 43 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e 73 74  hContext*, const
28f20 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20   char*);.  void 
28f30 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65  sqlite3AuthConte
28f40 78 74 50 6f 70 28 41 75 74 68 43 6f 6e 74 65 78  xtPop(AuthContex
28f50 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  t*);.  int sqlit
28f60 65 33 41 75 74 68 52 65 61 64 43 6f 6c 28 50 61  e3AuthReadCol(Pa
28f70 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
28f80 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
28f90 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 23 20  , int);.#else.# 
28fa0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
28fb0 74 68 52 65 61 64 28 61 2c 62 2c 63 2c 64 29 0a  thRead(a,b,c,d).
28fc0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
28fd0 41 75 74 68 43 68 65 63 6b 28 61 2c 62 2c 63 2c  AuthCheck(a,b,c,
28fe0 64 2c 65 29 20 20 20 20 53 51 4c 49 54 45 5f 4f  d,e)    SQLITE_O
28ff0 4b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  K.# define sqlit
29000 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73  e3AuthContextPus
29010 68 28 61 2c 62 2c 63 29 0a 23 20 64 65 66 69 6e  h(a,b,c).# defin
29020 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e  e sqlite3AuthCon
29030 74 65 78 74 50 6f 70 28 61 29 20 20 28 28 76 6f  textPop(a)  ((vo
29040 69 64 29 28 61 29 29 0a 23 65 6e 64 69 66 0a 76  id)(a)).#endif.v
29050 6f 69 64 20 73 71 6c 69 74 65 33 41 74 74 61 63  oid sqlite3Attac
29060 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  h(Parse*, Expr*,
29070 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a   Expr*, Expr*);.
29080 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 74 61  void sqlite3Deta
29090 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  ch(Parse*, Expr*
290a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46  );.void sqlite3F
290b0 69 78 49 6e 69 74 28 44 62 46 69 78 65 72 2a 2c  ixInit(DbFixer*,
290c0 20 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 63 6f   Parse*, int, co
290d0 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
290e0 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
290f0 6c 69 74 65 33 46 69 78 53 72 63 4c 69 73 74 28  lite3FixSrcList(
29100 44 62 46 69 78 65 72 2a 2c 20 53 72 63 4c 69 73  DbFixer*, SrcLis
29110 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
29120 46 69 78 53 65 6c 65 63 74 28 44 62 46 69 78 65  FixSelect(DbFixe
29130 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  r*, Select*);.in
29140 74 20 73 71 6c 69 74 65 33 46 69 78 45 78 70 72  t sqlite3FixExpr
29150 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72 2a  (DbFixer*, Expr*
29160 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
29170 78 45 78 70 72 4c 69 73 74 28 44 62 46 69 78 65  xExprList(DbFixe
29180 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  r*, ExprList*);.
29190 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 54 72  int sqlite3FixTr
291a0 69 67 67 65 72 53 74 65 70 28 44 62 46 69 78 65  iggerStep(DbFixe
291b0 72 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a  r*, TriggerStep*
291c0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74  );.int sqlite3At
291d0 6f 46 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  oF(const char *z
291e0 2c 20 64 6f 75 62 6c 65 2a 2c 20 69 6e 74 2c 20  , double*, int, 
291f0 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  u8);.int sqlite3
29200 47 65 74 49 6e 74 33 32 28 63 6f 6e 73 74 20 63  GetInt32(const c
29210 68 61 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e  har *, int*);.in
29220 74 20 73 71 6c 69 74 65 33 41 74 6f 69 28 63 6f  t sqlite3Atoi(co
29230 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20  nst char*);.int 
29240 73 71 6c 69 74 65 33 55 74 66 31 36 42 79 74 65  sqlite3Utf16Byte
29250 4c 65 6e 28 63 6f 6e 73 74 20 76 6f 69 64 20 2a  Len(const void *
29260 70 44 61 74 61 2c 20 69 6e 74 20 6e 43 68 61 72  pData, int nChar
29270 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74  );.int sqlite3Ut
29280 66 38 43 68 61 72 4c 65 6e 28 63 6f 6e 73 74 20  f8CharLen(const 
29290 63 68 61 72 20 2a 70 44 61 74 61 2c 20 69 6e 74  char *pData, int
292a0 20 6e 42 79 74 65 29 3b 0a 75 33 32 20 73 71 6c   nByte);.u32 sql
292b0 69 74 65 33 55 74 66 38 52 65 61 64 28 63 6f 6e  ite3Utf8Read(con
292c0 73 74 20 75 38 2a 2a 29 3b 0a 4c 6f 67 45 73 74  st u8**);.LogEst
292d0 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 28 75   sqlite3LogEst(u
292e0 36 34 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69  64);.LogEst sqli
292f0 74 65 33 4c 6f 67 45 73 74 41 64 64 28 4c 6f 67  te3LogEstAdd(Log
29300 45 73 74 2c 4c 6f 67 45 73 74 29 3b 0a 23 69 66  Est,LogEst);.#if
29310 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
29320 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 4c 6f  _VIRTUALTABLE.Lo
29330 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45  gEst sqlite3LogE
29340 73 74 46 72 6f 6d 44 6f 75 62 6c 65 28 64 6f 75  stFromDouble(dou
29350 62 6c 65 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66  ble);.#endif.#if
29360 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
29370 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e  ENABLE_STMT_SCAN
29380 53 54 41 54 55 53 29 20 7c 7c 20 5c 0a 20 20 20  STATUS) || \.   
29390 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
293a0 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f  ENABLE_STAT3_OR_
293b0 53 54 41 54 34 29 20 7c 7c 20 5c 0a 20 20 20 20  STAT4) || \.    
293c0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
293d0 58 50 4c 41 49 4e 5f 45 53 54 49 4d 41 54 45 44  XPLAIN_ESTIMATED
293e0 5f 52 4f 57 53 29 0a 75 36 34 20 73 71 6c 69 74  _ROWS).u64 sqlit
293f0 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28 4c 6f  e3LogEstToInt(Lo
29400 67 45 73 74 29 3b 0a 23 65 6e 64 69 66 0a 56 4c  gEst);.#endif.VL
29410 69 73 74 20 2a 73 71 6c 69 74 65 33 56 4c 69 73  ist *sqlite3VLis
29420 74 41 64 64 28 73 71 6c 69 74 65 33 2a 2c 56 4c  tAdd(sqlite3*,VL
29430 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ist*,const char*
29440 2c 69 6e 74 2c 69 6e 74 29 3b 0a 63 6f 6e 73 74  ,int,int);.const
29450 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 56 4c   char *sqlite3VL
29460 69 73 74 4e 75 6d 54 6f 4e 61 6d 65 28 56 4c 69  istNumToName(VLi
29470 73 74 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71  st*,int);.int sq
29480 6c 69 74 65 33 56 4c 69 73 74 4e 61 6d 65 54 6f  lite3VListNameTo
29490 4e 75 6d 28 56 4c 69 73 74 2a 2c 63 6f 6e 73 74  Num(VList*,const
294a0 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 0a 2f 2a   char*,int);../*
294b0 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20 74 6f 20  .** Routines to 
294c0 72 65 61 64 20 61 6e 64 20 77 72 69 74 65 20 76  read and write v
294d0 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69  ariable-length i
294e0 6e 74 65 67 65 72 73 2e 20 20 54 68 65 73 65 20  ntegers.  These 
294f0 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 64 65  used to.** be de
29500 66 69 6e 65 64 20 6c 6f 63 61 6c 6c 79 2c 20 62  fined locally, b
29510 75 74 20 6e 6f 77 20 77 65 20 75 73 65 20 74 68  ut now we use th
29520 65 20 76 61 72 69 6e 74 20 72 6f 75 74 69 6e 65  e varint routine
29530 73 20 69 6e 20 74 68 65 20 75 74 69 6c 2e 63 0a  s in the util.c.
29540 2a 2a 20 66 69 6c 65 2e 0a 2a 2f 0a 69 6e 74 20  ** file..*/.int 
29550 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74  sqlite3PutVarint
29560 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c  (unsigned char*,
29570 20 75 36 34 29 3b 0a 75 38 20 73 71 6c 69 74 65   u64);.u8 sqlite
29580 33 47 65 74 56 61 72 69 6e 74 28 63 6f 6e 73 74  3GetVarint(const
29590 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
295a0 2c 20 75 36 34 20 2a 29 3b 0a 75 38 20 73 71 6c  , u64 *);.u8 sql
295b0 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28  ite3GetVarint32(
295c0 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
295d0 68 61 72 20 2a 2c 20 75 33 32 20 2a 29 3b 0a 69  har *, u32 *);.i
295e0 6e 74 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74  nt sqlite3Varint
295f0 4c 65 6e 28 75 36 34 20 76 29 3b 0a 0a 2f 2a 0a  Len(u64 v);../*.
29600 2a 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e 20 63 61  ** The common ca
29610 73 65 20 69 73 20 66 6f 72 20 61 20 76 61 72 69  se is for a vari
29620 6e 74 20 74 6f 20 62 65 20 61 20 73 69 6e 67 6c  nt to be a singl
29630 65 20 62 79 74 65 2e 20 20 54 68 65 79 20 66 6f  e byte.  They fo
29640 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 6d 61 63 72 6f  llowing.** macro
29650 73 20 68 61 6e 64 6c 65 20 74 68 65 20 63 6f 6d  s handle the com
29660 6d 6f 6e 20 63 61 73 65 20 77 69 74 68 6f 75 74  mon case without
29670 20 61 20 70 72 6f 63 65 64 75 72 65 20 63 61 6c   a procedure cal
29680 6c 2c 20 62 75 74 20 74 68 65 6e 20 63 61 6c 6c  l, but then call
29690 0a 2a 2a 20 74 68 65 20 70 72 6f 63 65 64 75 72  .** the procedur
296a0 65 20 66 6f 72 20 6c 61 72 67 65 72 20 76 61 72  e for larger var
296b0 69 6e 74 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ints..*/.#define
296c0 20 67 65 74 56 61 72 69 6e 74 33 32 28 41 2c 42   getVarint32(A,B
296d0 29 20 20 5c 0a 20 20 28 75 38 29 28 28 2a 28 41  )  \.  (u8)((*(A
296e0 29 3c 28 75 38 29 30 78 38 30 29 3f 28 28 42 29  )<(u8)0x80)?((B)
296f0 3d 28 75 33 32 29 2a 28 41 29 29 2c 31 3a 73 71  =(u32)*(A)),1:sq
29700 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32  lite3GetVarint32
29710 28 28 41 29 2c 28 75 33 32 20 2a 29 26 28 42 29  ((A),(u32 *)&(B)
29720 29 29 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61  )).#define putVa
29730 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20  rint32(A,B)  \. 
29740 20 28 75 38 29 28 28 28 75 33 32 29 28 42 29 3c   (u8)(((u32)(B)<
29750 28 75 33 32 29 30 78 38 30 29 3f 28 2a 28 41 29  (u32)0x80)?(*(A)
29760 3d 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  =(unsigned char)
29770 28 42 29 29 2c 31 3a 5c 0a 20 20 73 71 6c 69 74  (B)),1:\.  sqlit
29780 65 33 50 75 74 56 61 72 69 6e 74 28 28 41 29 2c  e3PutVarint((A),
29790 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20 67 65  (B))).#define ge
297a0 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74  tVarint    sqlit
297b0 65 33 47 65 74 56 61 72 69 6e 74 0a 23 64 65 66  e3GetVarint.#def
297c0 69 6e 65 20 70 75 74 56 61 72 69 6e 74 20 20 20  ine putVarint   
297d0 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e   sqlite3PutVarin
297e0 74 0a 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  t...const char *
297f0 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69  sqlite3IndexAffi
29800 6e 69 74 79 53 74 72 28 73 71 6c 69 74 65 33 2a  nityStr(sqlite3*
29810 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20  , Index*);.void 
29820 73 71 6c 69 74 65 33 54 61 62 6c 65 41 66 66 69  sqlite3TableAffi
29830 6e 69 74 79 28 56 64 62 65 2a 2c 20 54 61 62 6c  nity(Vdbe*, Tabl
29840 65 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20 73  e*, int);.char s
29850 71 6c 69 74 65 33 43 6f 6d 70 61 72 65 41 66 66  qlite3CompareAff
29860 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78 70  inity(Expr *pExp
29870 72 2c 20 63 68 61 72 20 61 66 66 32 29 3b 0a 69  r, char aff2);.i
29880 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78 41  nt sqlite3IndexA
29890 66 66 69 6e 69 74 79 4f 6b 28 45 78 70 72 20 2a  ffinityOk(Expr *
298a0 70 45 78 70 72 2c 20 63 68 61 72 20 69 64 78 5f  pExpr, char idx_
298b0 61 66 66 69 6e 69 74 79 29 3b 0a 63 68 61 72 20  affinity);.char 
298c0 73 71 6c 69 74 65 33 54 61 62 6c 65 43 6f 6c 75  sqlite3TableColu
298d0 6d 6e 41 66 66 69 6e 69 74 79 28 54 61 62 6c 65  mnAffinity(Table
298e0 2a 2c 69 6e 74 29 3b 0a 63 68 61 72 20 73 71 6c  *,int);.char sql
298f0 69 74 65 33 45 78 70 72 41 66 66 69 6e 69 74 79  ite3ExprAffinity
29900 28 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 69  (Expr *pExpr);.i
29910 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69 36 34  nt sqlite3Atoi64
29920 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36  (const char*, i6
29930 34 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e  4*, int, u8);.in
29940 74 20 73 71 6c 69 74 65 33 44 65 63 4f 72 48 65  t sqlite3DecOrHe
29950 78 54 6f 49 36 34 28 63 6f 6e 73 74 20 63 68 61  xToI64(const cha
29960 72 2a 2c 20 69 36 34 2a 29 3b 0a 76 6f 69 64 20  r*, i64*);.void 
29970 73 71 6c 69 74 65 33 45 72 72 6f 72 57 69 74 68  sqlite3ErrorWith
29980 4d 73 67 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  Msg(sqlite3*, in
29990 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e  t, const char*,.
299a0 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..);.void sqlite
299b0 33 45 72 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c  3Error(sqlite3*,
299c0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
299d0 65 33 53 79 73 74 65 6d 45 72 72 6f 72 28 73 71  e3SystemError(sq
299e0 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69  lite3*,int);.voi
299f0 64 20 2a 73 71 6c 69 74 65 33 48 65 78 54 6f 42  d *sqlite3HexToB
29a00 6c 6f 62 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f  lob(sqlite3*, co
29a10 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74  nst char *z, int
29a20 20 6e 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 48   n);.u8 sqlite3H
29a30 65 78 54 6f 49 6e 74 28 69 6e 74 20 68 29 3b 0a  exToInt(int h);.
29a40 69 6e 74 20 73 71 6c 69 74 65 33 54 77 6f 50 61  int sqlite3TwoPa
29a50 72 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20  rtName(Parse *, 
29a60 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a  Token *, Token *
29a70 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a 23 69  , Token **);..#i
29a80 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
29a90 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 29 0a  _NEED_ERR_NAME).
29aa0 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
29ab0 74 65 33 45 72 72 4e 61 6d 65 28 69 6e 74 29 3b  te3ErrName(int);
29ac0 0a 23 65 6e 64 69 66 0a 0a 63 6f 6e 73 74 20 63  .#endif..const c
29ad0 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72 53  har *sqlite3ErrS
29ae0 74 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  tr(int);.int sql
29af0 69 74 65 33 52 65 61 64 53 63 68 65 6d 61 28 50  ite3ReadSchema(P
29b00 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 43  arse *pParse);.C
29b10 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 46  ollSeq *sqlite3F
29b20 69 6e 64 43 6f 6c 6c 53 65 71 28 73 71 6c 69 74  indCollSeq(sqlit
29b30 65 33 2a 2c 75 38 20 65 6e 63 2c 20 63 6f 6e 73  e3*,u8 enc, cons
29b40 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 43 6f  t char*,int);.Co
29b50 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 4c 6f  llSeq *sqlite3Lo
29b60 63 61 74 65 43 6f 6c 6c 53 65 71 28 50 61 72 73  cateCollSeq(Pars
29b70 65 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74  e *pParse, const
29b80 20 63 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a 43 6f   char*zName);.Co
29b90 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 45 78  llSeq *sqlite3Ex
29ba0 70 72 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20  prCollSeq(Parse 
29bb0 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70  *pParse, Expr *p
29bc0 45 78 70 72 29 3b 0a 45 78 70 72 20 2a 73 71 6c  Expr);.Expr *sql
29bd0 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c 61  ite3ExprAddColla
29be0 74 65 54 6f 6b 65 6e 28 50 61 72 73 65 20 2a 70  teToken(Parse *p
29bf0 50 61 72 73 65 2c 20 45 78 70 72 2a 2c 20 63 6f  Parse, Expr*, co
29c00 6e 73 74 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29  nst Token*, int)
29c10 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
29c20 78 70 72 41 64 64 43 6f 6c 6c 61 74 65 53 74 72  xprAddCollateStr
29c30 69 6e 67 28 50 61 72 73 65 2a 2c 45 78 70 72 2a  ing(Parse*,Expr*
29c40 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 45  ,const char*);.E
29c50 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
29c60 53 6b 69 70 43 6f 6c 6c 61 74 65 28 45 78 70 72  SkipCollate(Expr
29c70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  *);.int sqlite3C
29c80 68 65 63 6b 43 6f 6c 6c 53 65 71 28 50 61 72 73  heckCollSeq(Pars
29c90 65 20 2a 2c 20 43 6f 6c 6c 53 65 71 20 2a 29 3b  e *, CollSeq *);
29ca0 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63  .int sqlite3Chec
29cb0 6b 4f 62 6a 65 63 74 4e 61 6d 65 28 50 61 72 73  kObjectName(Pars
29cc0 65 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  e *, const char 
29cd0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
29ce0 56 64 62 65 53 65 74 43 68 61 6e 67 65 73 28 73  VdbeSetChanges(s
29cf0 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 29 3b 0a  qlite3 *, int);.
29d00 69 6e 74 20 73 71 6c 69 74 65 33 41 64 64 49 6e  int sqlite3AddIn
29d10 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69  t64(i64*,i64);.i
29d20 6e 74 20 73 71 6c 69 74 65 33 53 75 62 49 6e 74  nt sqlite3SubInt
29d30 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e  64(i64*,i64);.in
29d40 74 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36  t sqlite3MulInt6
29d50 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74  4(i64*,i64);.int
29d60 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74 33 32   sqlite3AbsInt32
29d70 28 69 6e 74 29 3b 0a 23 69 66 64 65 66 20 53 51  (int);.#ifdef SQ
29d80 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f  LITE_ENABLE_8_3_
29d90 4e 41 4d 45 53 0a 76 6f 69 64 20 73 71 6c 69 74  NAMES.void sqlit
29da0 65 33 46 69 6c 65 53 75 66 66 69 78 33 28 63 6f  e3FileSuffix3(co
29db0 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72 2a  nst char*, char*
29dc0 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
29dd0 65 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66  e sqlite3FileSuf
29de0 66 69 78 33 28 58 2c 59 29 0a 23 65 6e 64 69 66  fix3(X,Y).#endif
29df0 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 42 6f  .u8 sqlite3GetBo
29e00 6f 6c 65 61 6e 28 63 6f 6e 73 74 20 63 68 61 72  olean(const char
29e10 20 2a 7a 2c 75 38 29 3b 0a 0a 63 6f 6e 73 74 20   *z,u8);..const 
29e20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 56 61 6c  void *sqlite3Val
29e30 75 65 54 65 78 74 28 73 71 6c 69 74 65 33 5f 76  ueText(sqlite3_v
29e40 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 69 6e 74 20  alue*, u8);.int 
29e50 73 71 6c 69 74 65 33 56 61 6c 75 65 42 79 74 65  sqlite3ValueByte
29e60 73 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  s(sqlite3_value*
29e70 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69  , u8);.void sqli
29e80 74 65 33 56 61 6c 75 65 53 65 74 53 74 72 28 73  te3ValueSetStr(s
29e90 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 69  qlite3_value*, i
29ea0 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a  nt, const void *
29eb0 2c 75 38 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ,u8,.           
29ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 76 6f 69               voi
29ed0 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f  d(*)(void*));.vo
29ee0 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53  id sqlite3ValueS
29ef0 65 74 4e 75 6c 6c 28 73 71 6c 69 74 65 33 5f 76  etNull(sqlite3_v
29f00 61 6c 75 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  alue*);.void sql
29f10 69 74 65 33 56 61 6c 75 65 46 72 65 65 28 73 71  ite3ValueFree(sq
29f20 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 73  lite3_value*);.s
29f30 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 73 71  qlite3_value *sq
29f40 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28 73 71  lite3ValueNew(sq
29f50 6c 69 74 65 33 20 2a 29 3b 0a 63 68 61 72 20 2a  lite3 *);.char *
29f60 73 71 6c 69 74 65 33 55 74 66 31 36 74 6f 38 28  sqlite3Utf16to8(
29f70 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74  sqlite3 *, const
29f80 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 75 38 29   void*, int, u8)
29f90 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c  ;.int sqlite3Val
29fa0 75 65 46 72 6f 6d 45 78 70 72 28 73 71 6c 69 74  ueFromExpr(sqlit
29fb0 65 33 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75 38  e3 *, Expr *, u8
29fc0 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61  , u8, sqlite3_va
29fd0 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71  lue **);.void sq
29fe0 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c 79 41  lite3ValueApplyA
29ff0 66 66 69 6e 69 74 79 28 73 71 6c 69 74 65 33 5f  ffinity(sqlite3_
2a000 76 61 6c 75 65 20 2a 2c 20 75 38 2c 20 75 38 29  value *, u8, u8)
2a010 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
2a020 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 65 78  _AMALGAMATION.ex
2a030 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67  tern const unsig
2a040 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33  ned char sqlite3
2a050 4f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d  OpcodeProperty[]
2a060 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 63  ;.extern const c
2a070 68 61 72 20 73 71 6c 69 74 65 33 53 74 72 42 49  har sqlite3StrBI
2a080 4e 41 52 59 5b 5d 3b 0a 65 78 74 65 72 6e 20 63  NARY[];.extern c
2a090 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
2a0a0 61 72 20 73 71 6c 69 74 65 33 55 70 70 65 72 54  ar sqlite3UpperT
2a0b0 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74 65 72 6e  oLower[];.extern
2a0c0 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
2a0d0 63 68 61 72 20 73 71 6c 69 74 65 33 43 74 79 70  char sqlite3Ctyp
2a0e0 65 4d 61 70 5b 5d 3b 0a 65 78 74 65 72 6e 20 63  eMap[];.extern c
2a0f0 6f 6e 73 74 20 54 6f 6b 65 6e 20 73 71 6c 69 74  onst Token sqlit
2a100 65 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65  e3IntTokens[];.e
2a110 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57 53 44  xtern SQLITE_WSD
2a120 20 73 74 72 75 63 74 20 53 71 6c 69 74 65 33 43   struct Sqlite3C
2a130 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e  onfig sqlite3Con
2a140 66 69 67 3b 0a 65 78 74 65 72 6e 20 46 75 6e 63  fig;.extern Func
2a150 44 65 66 48 61 73 68 20 73 71 6c 69 74 65 33 42  DefHash sqlite3B
2a160 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 3b  uiltinFunctions;
2a170 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2a180 4f 4d 49 54 5f 57 53 44 0a 65 78 74 65 72 6e 20  OMIT_WSD.extern 
2a190 69 6e 74 20 73 71 6c 69 74 65 33 50 65 6e 64 69  int sqlite3Pendi
2a1a0 6e 67 42 79 74 65 3b 0a 23 65 6e 64 69 66 0a 23  ngByte;.#endif.#
2a1b0 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
2a1c0 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28  e3RootPageMoved(
2a1d0 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69  sqlite3*, int, i
2a1e0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
2a1f0 71 6c 69 74 65 33 52 65 69 6e 64 65 78 28 50 61  qlite3Reindex(Pa
2a200 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  rse*, Token*, To
2a210 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
2a220 74 65 33 41 6c 74 65 72 46 75 6e 63 74 69 6f 6e  te3AlterFunction
2a230 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  s(void);.void sq
2a240 6c 69 74 65 33 41 6c 74 65 72 52 65 6e 61 6d 65  lite3AlterRename
2a250 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72  Table(Parse*, Sr
2a260 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  cList*, Token*);
2a270 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54  .int sqlite3GetT
2a280 6f 6b 65 6e 28 63 6f 6e 73 74 20 75 6e 73 69 67  oken(const unsig
2a290 6e 65 64 20 63 68 61 72 20 2a 2c 20 69 6e 74 20  ned char *, int 
2a2a0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2a2b0 4e 65 73 74 65 64 50 61 72 73 65 28 50 61 72 73  NestedParse(Pars
2a2c0 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e*, const char*,
2a2d0 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69   ...);.void sqli
2a2e0 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65  te3ExpirePrepare
2a2f0 64 53 74 61 74 65 6d 65 6e 74 73 28 73 71 6c 69  dStatements(sqli
2a300 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  te3*);.int sqlit
2a310 65 33 43 6f 64 65 53 75 62 73 65 6c 65 63 74 28  e3CodeSubselect(
2a320 50 61 72 73 65 2a 2c 20 45 78 70 72 20 2a 2c 20  Parse*, Expr *, 
2a330 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
2a340 73 71 6c 69 74 65 33 53 65 6c 65 63 74 50 72 65  sqlite3SelectPre
2a350 70 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74  p(Parse*, Select
2a360 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29  *, NameContext*)
2a370 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
2a380 6c 65 63 74 57 72 6f 6e 67 4e 75 6d 54 65 72 6d  lectWrongNumTerm
2a390 73 45 72 72 6f 72 28 50 61 72 73 65 20 2a 70 50  sError(Parse *pP
2a3a0 61 72 73 65 2c 20 53 65 6c 65 63 74 20 2a 70 29  arse, Select *p)
2a3b0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 74  ;.int sqlite3Mat
2a3c0 63 68 53 70 61 6e 4e 61 6d 65 28 63 6f 6e 73 74  chSpanName(const
2a3d0 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
2a3e0 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
2a3f0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
2a400 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  int sqlite3Resol
2a410 76 65 45 78 70 72 4e 61 6d 65 73 28 4e 61 6d 65  veExprNames(Name
2a420 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29  Context*, Expr*)
2a430 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73  ;.int sqlite3Res
2a440 6f 6c 76 65 45 78 70 72 4c 69 73 74 4e 61 6d 65  olveExprListName
2a450 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20  s(NameContext*, 
2a460 45 78 70 72 4c 69 73 74 2a 29 3b 0a 76 6f 69 64  ExprList*);.void
2a470 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53   sqlite3ResolveS
2a480 65 6c 65 63 74 4e 61 6d 65 73 28 50 61 72 73 65  electNames(Parse
2a490 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65  *, Select*, Name
2a4a0 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64 20  Context*);.void 
2a4b0 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65  sqlite3ResolveSe
2a4c0 6c 66 52 65 66 65 72 65 6e 63 65 28 50 61 72 73  lfReference(Pars
2a4d0 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 45 78  e*,Table*,int,Ex
2a4e0 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a  pr*,ExprList*);.
2a4f0 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  int sqlite3Resol
2a500 76 65 4f 72 64 65 72 47 72 6f 75 70 42 79 28 50  veOrderGroupBy(P
2a510 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  arse*, Select*, 
2a520 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74  ExprList*, const
2a530 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
2a540 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75  lite3ColumnDefau
2a550 6c 74 28 56 64 62 65 20 2a 2c 20 54 61 62 6c 65  lt(Vdbe *, Table
2a560 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76   *, int, int);.v
2a570 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72  oid sqlite3Alter
2a580 46 69 6e 69 73 68 41 64 64 43 6f 6c 75 6d 6e 28  FinishAddColumn(
2a590 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a  Parse *, Token *
2a5a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
2a5b0 6c 74 65 72 42 65 67 69 6e 41 64 64 43 6f 6c 75  lterBeginAddColu
2a5c0 6d 6e 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c  mn(Parse *, SrcL
2a5d0 69 73 74 20 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20  ist *);.CollSeq 
2a5e0 2a 73 71 6c 69 74 65 33 47 65 74 43 6f 6c 6c 53  *sqlite3GetCollS
2a5f0 65 71 28 50 61 72 73 65 2a 2c 20 75 38 2c 20 43  eq(Parse*, u8, C
2a600 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e 73 74 20  ollSeq *, const 
2a610 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 73 71 6c  char*);.char sql
2a620 69 74 65 33 41 66 66 69 6e 69 74 79 54 79 70 65  ite3AffinityType
2a630 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75 38  (const char*, u8
2a640 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2a650 41 6e 61 6c 79 7a 65 28 50 61 72 73 65 2a 2c 20  Analyze(Parse*, 
2a660 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Token*, Token*);
2a670 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 76 6f  .int sqlite3Invo
2a680 6b 65 42 75 73 79 48 61 6e 64 6c 65 72 28 42 75  keBusyHandler(Bu
2a690 73 79 48 61 6e 64 6c 65 72 2a 29 3b 0a 69 6e 74  syHandler*);.int
2a6a0 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62 28 73   sqlite3FindDb(s
2a6b0 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29  qlite3*, Token*)
2a6c0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e  ;.int sqlite3Fin
2a6d0 64 44 62 4e 61 6d 65 28 73 71 6c 69 74 65 33 20  dDbName(sqlite3 
2a6e0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  *, const char *)
2a6f0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 6e 61  ;.int sqlite3Ana
2a700 6c 79 73 69 73 4c 6f 61 64 28 73 71 6c 69 74 65  lysisLoad(sqlite
2a710 33 2a 2c 69 6e 74 20 69 44 42 29 3b 0a 76 6f 69  3*,int iDB);.voi
2a720 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 49  d sqlite3DeleteI
2a730 6e 64 65 78 53 61 6d 70 6c 65 73 28 73 71 6c 69  ndexSamples(sqli
2a740 74 65 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f  te3*,Index*);.vo
2a750 69 64 20 73 71 6c 69 74 65 33 44 65 66 61 75 6c  id sqlite3Defaul
2a760 74 52 6f 77 45 73 74 28 49 6e 64 65 78 2a 29 3b  tRowEst(Index*);
2a770 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
2a780 69 73 74 65 72 4c 69 6b 65 46 75 6e 63 74 69 6f  isterLikeFunctio
2a790 6e 73 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  ns(sqlite3*, int
2a7a0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73  );.int sqlite3Is
2a7b0 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 28 73 71 6c  LikeFunction(sql
2a7c0 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a  ite3*,Expr*,int*
2a7d0 2c 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71  ,char*);.void sq
2a7e0 6c 69 74 65 33 53 63 68 65 6d 61 43 6c 65 61 72  lite3SchemaClear
2a7f0 28 76 6f 69 64 20 2a 29 3b 0a 53 63 68 65 6d 61  (void *);.Schema
2a800 20 2a 73 71 6c 69 74 65 33 53 63 68 65 6d 61 47   *sqlite3SchemaG
2a810 65 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 42 74  et(sqlite3 *, Bt
2a820 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ree *);.int sqli
2a830 74 65 33 53 63 68 65 6d 61 54 6f 49 6e 64 65 78  te3SchemaToIndex
2a840 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 53 63  (sqlite3 *db, Sc
2a850 68 65 6d 61 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f  hema *);.KeyInfo
2a860 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f   *sqlite3KeyInfo
2a870 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69  Alloc(sqlite3*,i
2a880 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  nt,int);.void sq
2a890 6c 69 74 65 33 4b 65 79 49 6e 66 6f 55 6e 72 65  lite3KeyInfoUnre
2a8a0 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79  f(KeyInfo*);.Key
2a8b0 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79  Info *sqlite3Key
2a8c0 49 6e 66 6f 52 65 66 28 4b 65 79 49 6e 66 6f 2a  InfoRef(KeyInfo*
2a8d0 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69  );.KeyInfo *sqli
2a8e0 74 65 33 4b 65 79 49 6e 66 6f 4f 66 49 6e 64 65  te3KeyInfoOfInde
2a8f0 78 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a  x(Parse*, Index*
2a900 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
2a910 5f 44 45 42 55 47 0a 69 6e 74 20 73 71 6c 69 74  _DEBUG.int sqlit
2a920 65 33 4b 65 79 49 6e 66 6f 49 73 57 72 69 74 65  e3KeyInfoIsWrite
2a930 61 62 6c 65 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a  able(KeyInfo*);.
2a940 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74  #endif.int sqlit
2a950 65 33 43 72 65 61 74 65 46 75 6e 63 28 73 71 6c  e3CreateFunc(sql
2a960 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68  ite3 *, const ch
2a970 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ar *, int, int, 
2a980 76 6f 69 64 20 2a 2c 0a 20 20 76 6f 69 64 20 28  void *,.  void (
2a990 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  *)(sqlite3_conte
2a9a0 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f  xt*,int,sqlite3_
2a9b0 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69  value **),.  voi
2a9c0 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f  d (*)(sqlite3_co
2a9d0 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
2a9e0 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20 76 6f  e3_value **), vo
2a9f0 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63  id (*)(sqlite3_c
2aa00 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 46 75 6e 63  ontext*),.  Func
2aa10 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73  Destructor *pDes
2aa20 74 72 75 63 74 6f 72 0a 29 3b 0a 76 6f 69 64 20  tructor.);.void 
2aa30 73 71 6c 69 74 65 33 4f 6f 6d 46 61 75 6c 74 28  sqlite3OomFault(
2aa40 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
2aa50 73 71 6c 69 74 65 33 4f 6f 6d 43 6c 65 61 72 28  sqlite3OomClear(
2aa60 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73  sqlite3*);.int s
2aa70 71 6c 69 74 65 33 41 70 69 45 78 69 74 28 73 71  qlite3ApiExit(sq
2aa80 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e 74 29 3b  lite3 *db, int);
2aa90 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70 65 6e  .int sqlite3Open
2aaa0 54 65 6d 70 44 61 74 61 62 61 73 65 28 50 61 72  TempDatabase(Par
2aab0 73 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c  se *);..void sql
2aac0 69 74 65 33 53 74 72 41 63 63 75 6d 49 6e 69 74  ite3StrAccumInit
2aad0 28 53 74 72 41 63 63 75 6d 2a 2c 20 73 71 6c 69  (StrAccum*, sqli
2aae0 74 65 33 2a 2c 20 63 68 61 72 2a 2c 20 69 6e 74  te3*, char*, int
2aaf0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2ab00 69 74 65 33 53 74 72 41 63 63 75 6d 41 70 70 65  ite3StrAccumAppe
2ab10 6e 64 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e  nd(StrAccum*,con
2ab20 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 76  st char*,int);.v
2ab30 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63  oid sqlite3StrAc
2ab40 63 75 6d 41 70 70 65 6e 64 41 6c 6c 28 53 74 72  cumAppendAll(Str
2ab50 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61  Accum*,const cha
2ab60 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
2ab70 33 41 70 70 65 6e 64 43 68 61 72 28 53 74 72 41  3AppendChar(StrA
2ab80 63 63 75 6d 2a 2c 69 6e 74 2c 63 68 61 72 29 3b  ccum*,int,char);
2ab90 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 53 74  .char *sqlite3St
2aba0 72 41 63 63 75 6d 46 69 6e 69 73 68 28 53 74 72  rAccumFinish(Str
2abb0 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71  Accum*);.void sq
2abc0 6c 69 74 65 33 53 74 72 41 63 63 75 6d 52 65 73  lite3StrAccumRes
2abd0 65 74 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76  et(StrAccum*);.v
2abe0 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63  oid sqlite3Selec
2abf0 74 44 65 73 74 49 6e 69 74 28 53 65 6c 65 63 74  tDestInit(Select
2ac00 44 65 73 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  Dest*,int,int);.
2ac10 45 78 70 72 20 2a 73 71 6c 69 74 65 33 43 72 65  Expr *sqlite3Cre
2ac20 61 74 65 43 6f 6c 75 6d 6e 45 78 70 72 28 73 71  ateColumnExpr(sq
2ac30 6c 69 74 65 33 20 2a 2c 20 53 72 63 4c 69 73 74  lite3 *, SrcList
2ac40 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a   *, int, int);..
2ac50 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b  void sqlite3Back
2ac60 75 70 52 65 73 74 61 72 74 28 73 71 6c 69 74 65  upRestart(sqlite
2ac70 33 5f 62 61 63 6b 75 70 20 2a 29 3b 0a 76 6f 69  3_backup *);.voi
2ac80 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70 55  d sqlite3BackupU
2ac90 70 64 61 74 65 28 73 71 6c 69 74 65 33 5f 62 61  pdate(sqlite3_ba
2aca0 63 6b 75 70 20 2a 2c 20 50 67 6e 6f 2c 20 63 6f  ckup *, Pgno, co
2acb0 6e 73 74 20 75 38 20 2a 29 3b 0a 0a 23 69 66 6e  nst u8 *);..#ifn
2acc0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2acd0 53 55 42 51 55 45 52 59 0a 69 6e 74 20 73 71 6c  SUBQUERY.int sql
2ace0 69 74 65 33 45 78 70 72 43 68 65 63 6b 49 4e 28  ite3ExprCheckIN(
2acf0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a  Parse*, Expr*);.
2ad00 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
2ad10 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b 49  qlite3ExprCheckI
2ad20 4e 28 78 2c 79 29 20 53 51 4c 49 54 45 5f 4f 4b  N(x,y) SQLITE_OK
2ad30 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
2ad40 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
2ad50 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 76 6f 69  AT3_OR_STAT4.voi
2ad60 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65  d sqlite3Analyze
2ad70 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b  Functions(void);
2ad80 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74  .int sqlite3Stat
2ad90 34 50 72 6f 62 65 53 65 74 56 61 6c 75 65 28 0a  4ProbeSetValue(.
2ada0 20 20 20 20 50 61 72 73 65 2a 2c 49 6e 64 65 78      Parse*,Index
2adb0 2a 2c 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  *,UnpackedRecord
2adc0 2a 2a 2c 45 78 70 72 2a 2c 69 6e 74 2c 69 6e 74  **,Expr*,int,int
2add0 2c 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ,int*);.int sqli
2ade0 74 65 33 53 74 61 74 34 56 61 6c 75 65 46 72 6f  te3Stat4ValueFro
2adf0 6d 45 78 70 72 28 50 61 72 73 65 2a 2c 20 45 78  mExpr(Parse*, Ex
2ae00 70 72 2a 2c 20 75 38 2c 20 73 71 6c 69 74 65 33  pr*, u8, sqlite3
2ae10 5f 76 61 6c 75 65 2a 2a 29 3b 0a 76 6f 69 64 20  _value**);.void 
2ae20 73 71 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62  sqlite3Stat4Prob
2ae30 65 46 72 65 65 28 55 6e 70 61 63 6b 65 64 52 65  eFree(UnpackedRe
2ae40 63 6f 72 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  cord*);.int sqli
2ae50 74 65 33 53 74 61 74 34 43 6f 6c 75 6d 6e 28 73  te3Stat4Column(s
2ae60 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 76  qlite3*, const v
2ae70 6f 69 64 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  oid*, int, int, 
2ae80 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29  sqlite3_value**)
2ae90 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 49 6e  ;.char sqlite3In
2aea0 64 65 78 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74  dexColumnAffinit
2aeb0 79 28 73 71 6c 69 74 65 33 2a 2c 20 49 6e 64 65  y(sqlite3*, Inde
2aec0 78 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66  x*, int);.#endif
2aed0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65  ../*.** The inte
2aee0 72 66 61 63 65 20 74 6f 20 74 68 65 20 4c 45 4d  rface to the LEM
2aef0 4f 4e 2d 67 65 6e 65 72 61 74 65 64 20 70 61 72  ON-generated par
2af00 73 65 72 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c  ser.*/.void *sql
2af10 69 74 65 33 50 61 72 73 65 72 41 6c 6c 6f 63 28  ite3ParserAlloc(
2af20 76 6f 69 64 2a 28 2a 29 28 75 36 34 29 29 3b 0a  void*(*)(u64));.
2af30 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73  void sqlite3Pars
2af40 65 72 46 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f  erFree(void*, vo
2af50 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76  id(*)(void*));.v
2af60 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65  oid sqlite3Parse
2af70 72 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 54 6f  r(void*, int, To
2af80 6b 65 6e 2c 20 50 61 72 73 65 2a 29 3b 0a 23 69  ken, Parse*);.#i
2af90 66 64 65 66 20 59 59 54 52 41 43 4b 4d 41 58 53  fdef YYTRACKMAXS
2afa0 54 41 43 4b 44 45 50 54 48 0a 20 20 69 6e 74 20  TACKDEPTH.  int 
2afb0 73 71 6c 69 74 65 33 50 61 72 73 65 72 53 74 61  sqlite3ParserSta
2afc0 63 6b 50 65 61 6b 28 76 6f 69 64 2a 29 3b 0a 23  ckPeak(void*);.#
2afd0 65 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69  endif..void sqli
2afe0 74 65 33 41 75 74 6f 4c 6f 61 64 45 78 74 65 6e  te3AutoLoadExten
2aff0 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b  sions(sqlite3*);
2b000 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2b010 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53  OMIT_LOAD_EXTENS
2b020 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ION.  void sqlit
2b030 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e  e3CloseExtension
2b040 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6c  s(sqlite3*);.#el
2b050 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
2b060 74 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f  te3CloseExtensio
2b070 6e 73 28 58 29 0a 23 65 6e 64 69 66 0a 0a 23 69  ns(X).#endif..#i
2b080 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2b090 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20  T_SHARED_CACHE. 
2b0a0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62   void sqlite3Tab
2b0b0 6c 65 4c 6f 63 6b 28 50 61 72 73 65 20 2a 2c 20  leLock(Parse *, 
2b0c0 69 6e 74 2c 20 69 6e 74 2c 20 75 38 2c 20 63 6f  int, int, u8, co
2b0d0 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 23 65 6c  nst char *);.#el
2b0e0 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
2b0f0 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 76 2c  ite3TableLock(v,
2b100 77 2c 78 2c 79 2c 7a 29 0a 23 65 6e 64 69 66 0a  w,x,y,z).#endif.
2b110 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
2b120 45 53 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  EST.  int sqlite
2b130 33 55 74 66 38 54 6f 38 28 75 6e 73 69 67 6e 65  3Utf8To8(unsigne
2b140 64 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66  d char*);.#endif
2b150 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
2b160 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2b170 45 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  E.#  define sqli
2b180 74 65 33 56 74 61 62 43 6c 65 61 72 28 59 29 0a  te3VtabClear(Y).
2b190 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
2b1a0 33 56 74 61 62 53 79 6e 63 28 58 2c 59 29 20 53  3VtabSync(X,Y) S
2b1b0 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69  QLITE_OK.#  defi
2b1c0 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f  ne sqlite3VtabRo
2b1d0 6c 6c 62 61 63 6b 28 58 29 0a 23 20 20 64 65 66  llback(X).#  def
2b1e0 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 43  ine sqlite3VtabC
2b1f0 6f 6d 6d 69 74 28 58 29 0a 23 20 20 64 65 66 69  ommit(X).#  defi
2b200 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e  ne sqlite3VtabIn
2b210 53 79 6e 63 28 64 62 29 20 30 0a 23 20 20 64 65  Sync(db) 0.#  de
2b220 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
2b230 4c 6f 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e  Lock(X).#  defin
2b240 65 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c  e sqlite3VtabUnl
2b250 6f 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65  ock(X).#  define
2b260 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
2b270 63 6b 4c 69 73 74 28 58 29 0a 23 20 20 64 65 66  ckList(X).#  def
2b280 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 53  ine sqlite3VtabS
2b290 61 76 65 70 6f 69 6e 74 28 58 2c 20 59 2c 20 5a  avepoint(X, Y, Z
2b2a0 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64  ) SQLITE_OK.#  d
2b2b0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 65 74  efine sqlite3Get
2b2c0 56 54 61 62 6c 65 28 58 2c 59 29 20 20 28 28 56  VTable(X,Y)  ((V
2b2d0 54 61 62 6c 65 2a 29 30 29 0a 23 65 6c 73 65 0a  Table*)0).#else.
2b2e0 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
2b2f0 74 61 62 43 6c 65 61 72 28 73 71 6c 69 74 65 33  tabClear(sqlite3
2b300 20 2a 64 62 2c 20 54 61 62 6c 65 2a 29 3b 0a 20   *db, Table*);. 
2b310 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
2b320 61 62 44 69 73 63 6f 6e 6e 65 63 74 28 73 71 6c  abDisconnect(sql
2b330 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 20  ite3 *db, Table 
2b340 2a 70 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69  *p);.   int sqli
2b350 74 65 33 56 74 61 62 53 79 6e 63 28 73 71 6c 69  te3VtabSync(sqli
2b360 74 65 33 20 2a 64 62 2c 20 56 64 62 65 2a 29 3b  te3 *db, Vdbe*);
2b370 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56  .   int sqlite3V
2b380 74 61 62 52 6f 6c 6c 62 61 63 6b 28 73 71 6c 69  tabRollback(sqli
2b390 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 69 6e 74  te3 *db);.   int
2b3a0 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d   sqlite3VtabComm
2b3b0 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b  it(sqlite3 *db);
2b3c0 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  .   void sqlite3
2b3d0 56 74 61 62 4c 6f 63 6b 28 56 54 61 62 6c 65 20  VtabLock(VTable 
2b3e0 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  *);.   void sqli
2b3f0 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 56 54  te3VtabUnlock(VT
2b400 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64  able *);.   void
2b410 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
2b420 63 6b 4c 69 73 74 28 73 71 6c 69 74 65 33 2a 29  ckList(sqlite3*)
2b430 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33  ;.   int sqlite3
2b440 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 73 71  VtabSavepoint(sq
2b450 6c 69 74 65 33 20 2a 2c 20 69 6e 74 2c 20 69 6e  lite3 *, int, in
2b460 74 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  t);.   void sqli
2b470 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72  te3VtabImportErr
2b480 6d 73 67 28 56 64 62 65 2a 2c 20 73 71 6c 69 74  msg(Vdbe*, sqlit
2b490 65 33 5f 76 74 61 62 2a 29 3b 0a 20 20 20 56 54  e3_vtab*);.   VT
2b4a0 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 47 65 74  able *sqlite3Get
2b4b0 56 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c  VTable(sqlite3*,
2b4c0 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20 4d 6f 64   Table*);.   Mod
2b4d0 75 6c 65 20 2a 73 71 6c 69 74 65 33 56 74 61 62  ule *sqlite3Vtab
2b4e0 43 72 65 61 74 65 4d 6f 64 75 6c 65 28 0a 20 20  CreateModule(.  
2b4f0 20 20 20 73 71 6c 69 74 65 33 2a 2c 0a 20 20 20     sqlite3*,.   
2b500 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20    const char*,. 
2b510 20 20 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65      const sqlite
2b520 33 5f 6d 6f 64 75 6c 65 2a 2c 0a 20 20 20 20 20  3_module*,.     
2b530 76 6f 69 64 2a 2c 0a 20 20 20 20 20 76 6f 69 64  void*,.     void
2b540 28 2a 29 28 76 6f 69 64 2a 29 0a 20 20 20 29 3b  (*)(void*).   );
2b550 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
2b560 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29  e3VtabInSync(db)
2b570 20 28 28 64 62 29 2d 3e 6e 56 54 72 61 6e 73 3e   ((db)->nVTrans>
2b580 30 20 26 26 20 28 64 62 29 2d 3e 61 56 54 72 61  0 && (db)->aVTra
2b590 6e 73 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 69 6e  ns==0).#endif.in
2b5a0 74 20 73 71 6c 69 74 65 33 56 74 61 62 45 70 6f  t sqlite3VtabEpo
2b5b0 6e 79 6d 6f 75 73 54 61 62 6c 65 49 6e 69 74 28  nymousTableInit(
2b5c0 50 61 72 73 65 2a 2c 4d 6f 64 75 6c 65 2a 29 3b  Parse*,Module*);
2b5d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
2b5e0 62 45 70 6f 6e 79 6d 6f 75 73 54 61 62 6c 65 43  bEponymousTableC
2b5f0 6c 65 61 72 28 73 71 6c 69 74 65 33 2a 2c 4d 6f  lear(sqlite3*,Mo
2b600 64 75 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  dule*);.void sql
2b610 69 74 65 33 56 74 61 62 4d 61 6b 65 57 72 69 74  ite3VtabMakeWrit
2b620 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 61 62 6c  able(Parse*,Tabl
2b630 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
2b640 33 56 74 61 62 42 65 67 69 6e 50 61 72 73 65 28  3VtabBeginParse(
2b650 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Parse*, Token*, 
2b660 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Token*, Token*, 
2b670 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2b680 65 33 56 74 61 62 46 69 6e 69 73 68 50 61 72 73  e3VtabFinishPars
2b690 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  e(Parse*, Token*
2b6a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
2b6b0 74 61 62 41 72 67 49 6e 69 74 28 50 61 72 73 65  tabArgInit(Parse
2b6c0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2b6d0 56 74 61 62 41 72 67 45 78 74 65 6e 64 28 50 61  VtabArgExtend(Pa
2b6e0 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  rse*, Token*);.i
2b6f0 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61  nt sqlite3VtabCa
2b700 6c 6c 43 72 65 61 74 65 28 73 71 6c 69 74 65 33  llCreate(sqlite3
2b710 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68  *, int, const ch
2b720 61 72 20 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a  ar *, char **);.
2b730 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43  int sqlite3VtabC
2b740 61 6c 6c 43 6f 6e 6e 65 63 74 28 50 61 72 73 65  allConnect(Parse
2b750 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20  *, Table*);.int 
2b760 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44  sqlite3VtabCallD
2b770 65 73 74 72 6f 79 28 73 71 6c 69 74 65 33 2a 2c  estroy(sqlite3*,
2b780 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
2b790 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
2b7a0 56 74 61 62 42 65 67 69 6e 28 73 71 6c 69 74 65  VtabBegin(sqlite
2b7b0 33 20 2a 2c 20 56 54 61 62 6c 65 20 2a 29 3b 0a  3 *, VTable *);.
2b7c0 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33  FuncDef *sqlite3
2b7d0 56 74 61 62 4f 76 65 72 6c 6f 61 64 46 75 6e 63  VtabOverloadFunc
2b7e0 74 69 6f 6e 28 73 71 6c 69 74 65 33 20 2a 2c 46  tion(sqlite3 *,F
2b7f0 75 6e 63 44 65 66 2a 2c 20 69 6e 74 20 6e 41 72  uncDef*, int nAr
2b800 67 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  g, Expr*);.void 
2b810 73 71 6c 69 74 65 33 49 6e 76 61 6c 69 64 46 75  sqlite3InvalidFu
2b820 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 5f 63  nction(sqlite3_c
2b830 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
2b840 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 73 71  te3_value**);.sq
2b850 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 71 6c 69  lite3_int64 sqli
2b860 74 65 33 53 74 6d 74 43 75 72 72 65 6e 74 54 69  te3StmtCurrentTi
2b870 6d 65 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  me(sqlite3_conte
2b880 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  xt*);.int sqlite
2b890 33 56 64 62 65 50 61 72 61 6d 65 74 65 72 49 6e  3VdbeParameterIn
2b8a0 64 65 78 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74  dex(Vdbe*, const
2b8b0 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   char*, int);.in
2b8c0 74 20 73 71 6c 69 74 65 33 54 72 61 6e 73 66 65  t sqlite3Transfe
2b8d0 72 42 69 6e 64 69 6e 67 73 28 73 71 6c 69 74 65  rBindings(sqlite
2b8e0 33 5f 73 74 6d 74 20 2a 2c 20 73 71 6c 69 74 65  3_stmt *, sqlite
2b8f0 33 5f 73 74 6d 74 20 2a 29 3b 0a 76 6f 69 64 20  3_stmt *);.void 
2b900 73 71 6c 69 74 65 33 50 61 72 73 65 72 52 65 73  sqlite3ParserRes
2b910 65 74 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20  et(Parse*);.int 
2b920 73 71 6c 69 74 65 33 52 65 70 72 65 70 61 72 65  sqlite3Reprepare
2b930 28 56 64 62 65 2a 29 3b 0a 76 6f 69 64 20 73 71  (Vdbe*);.void sq
2b940 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43 68 65  lite3ExprListChe
2b950 63 6b 4c 65 6e 67 74 68 28 50 61 72 73 65 2a 2c  ckLength(Parse*,
2b960 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73   ExprList*, cons
2b970 74 20 63 68 61 72 2a 29 3b 0a 43 6f 6c 6c 53 65  t char*);.CollSe
2b980 71 20 2a 73 71 6c 69 74 65 33 42 69 6e 61 72 79  q *sqlite3Binary
2b990 43 6f 6d 70 61 72 65 43 6f 6c 6c 53 65 71 28 50  CompareCollSeq(P
2b9a0 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20  arse *, Expr *, 
2b9b0 45 78 70 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  Expr *);.int sql
2b9c0 69 74 65 33 54 65 6d 70 49 6e 4d 65 6d 6f 72 79  ite3TempInMemory
2b9d0 28 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 2a 29  (const sqlite3*)
2b9e0 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  ;.const char *sq
2b9f0 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65  lite3JournalMode
2ba00 6e 61 6d 65 28 69 6e 74 29 3b 0a 23 69 66 6e 64  name(int);.#ifnd
2ba10 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
2ba20 41 4c 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  AL.  int sqlite3
2ba30 43 68 65 63 6b 70 6f 69 6e 74 28 73 71 6c 69 74  Checkpoint(sqlit
2ba40 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  e3*, int, int, i
2ba50 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 20 20 69 6e  nt*, int*);.  in
2ba60 74 20 73 71 6c 69 74 65 33 57 61 6c 44 65 66 61  t sqlite3WalDefa
2ba70 75 6c 74 48 6f 6f 6b 28 76 6f 69 64 2a 2c 73 71  ultHook(void*,sq
2ba80 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
2ba90 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  r*,int);.#endif.
2baa0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2bab0 4d 49 54 5f 43 54 45 0a 20 20 57 69 74 68 20 2a  MIT_CTE.  With *
2bac0 73 71 6c 69 74 65 33 57 69 74 68 41 64 64 28 50  sqlite3WithAdd(P
2bad0 61 72 73 65 2a 2c 57 69 74 68 2a 2c 54 6f 6b 65  arse*,With*,Toke
2bae0 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 65 6c  n*,ExprList*,Sel
2baf0 65 63 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ect*);.  void sq
2bb00 6c 69 74 65 33 57 69 74 68 44 65 6c 65 74 65 28  lite3WithDelete(
2bb10 73 71 6c 69 74 65 33 2a 2c 57 69 74 68 2a 29 3b  sqlite3*,With*);
2bb20 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 57  .  void sqlite3W
2bb30 69 74 68 50 75 73 68 28 50 61 72 73 65 2a 2c 20  ithPush(Parse*, 
2bb40 57 69 74 68 2a 2c 20 75 38 29 3b 0a 23 65 6c 73  With*, u8);.#els
2bb50 65 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  e.#define sqlite
2bb60 33 57 69 74 68 50 75 73 68 28 78 2c 79 2c 7a 29  3WithPush(x,y,z)
2bb70 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  .#define sqlite3
2bb80 57 69 74 68 44 65 6c 65 74 65 28 78 2c 79 29 0a  WithDelete(x,y).
2bb90 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 65 63 6c 61  #endif../* Decla
2bba0 72 61 74 69 6f 6e 73 20 66 6f 72 20 66 75 6e 63  rations for func
2bbb0 74 69 6f 6e 73 20 69 6e 20 66 6b 65 79 2e 63 2e  tions in fkey.c.
2bbc0 20 41 6c 6c 20 6f 66 20 74 68 65 73 65 20 61 72   All of these ar
2bbd0 65 20 72 65 70 6c 61 63 65 64 20 62 79 0a 2a 2a  e replaced by.**
2bbe0 20 6e 6f 2d 6f 70 20 6d 61 63 72 6f 73 20 69 66   no-op macros if
2bbf0 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45   OMIT_FOREIGN_KE
2bc00 59 20 69 73 20 64 65 66 69 6e 65 64 2e 20 49 6e  Y is defined. In
2bc10 20 74 68 69 73 20 63 61 73 65 20 6e 6f 20 66 6f   this case no fo
2bc20 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 66 75 6e  reign.** key fun
2bc30 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20 61 76  ctionality is av
2bc40 61 69 6c 61 62 6c 65 2e 20 49 66 20 4f 4d 49 54  ailable. If OMIT
2bc50 5f 54 52 49 47 47 45 52 20 69 73 20 64 65 66 69  _TRIGGER is defi
2bc60 6e 65 64 20 62 75 74 0a 2a 2a 20 4f 4d 49 54 5f  ned but.** OMIT_
2bc70 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 6e  FOREIGN_KEY is n
2bc80 6f 74 2c 20 6f 6e 6c 79 20 73 6f 6d 65 20 6f 66  ot, only some of
2bc90 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 73 20 61   the functions a
2bca0 72 65 20 6e 6f 2d 6f 70 65 64 2e 20 49 6e 0a 2a  re no-oped. In.*
2bcb0 2a 20 74 68 69 73 20 63 61 73 65 20 66 6f 72 65  * this case fore
2bcc0 69 67 6e 20 6b 65 79 73 20 61 72 65 20 70 61 72  ign keys are par
2bcd0 73 65 64 2c 20 62 75 74 20 6e 6f 20 6f 74 68 65  sed, but no othe
2bce0 72 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20  r functionality 
2bcf0 69 73 0a 2a 2a 20 70 72 6f 76 69 64 65 64 20 28  is.** provided (
2bd00 65 6e 66 6f 72 63 65 6d 65 6e 74 20 6f 66 20 46  enforcement of F
2bd10 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 72 65  K constraints re
2bd20 71 75 69 72 65 73 20 74 68 65 20 74 72 69 67 67  quires the trigg
2bd30 65 72 73 20 73 75 62 2d 73 79 73 74 65 6d 29 2e  ers sub-system).
2bd40 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
2bd50 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52  (SQLITE_OMIT_FOR
2bd60 45 49 47 4e 5f 4b 45 59 29 20 26 26 20 21 64 65  EIGN_KEY) && !de
2bd70 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
2bd80 54 5f 54 52 49 47 47 45 52 29 0a 20 20 76 6f 69  T_TRIGGER).  voi
2bd90 64 20 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b  d sqlite3FkCheck
2bda0 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
2bdb0 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c   int, int, int*,
2bdc0 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
2bdd0 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65  lite3FkDropTable
2bde0 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
2bdf0 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 76   *, Table*);.  v
2be00 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 41 63 74  oid sqlite3FkAct
2be10 69 6f 6e 73 28 50 61 72 73 65 2a 2c 20 54 61 62  ions(Parse*, Tab
2be20 6c 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  le*, ExprList*, 
2be30 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b  int, int*, int);
2be40 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b  .  int sqlite3Fk
2be50 52 65 71 75 69 72 65 64 28 50 61 72 73 65 2a 2c  Required(Parse*,
2be60 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2a 2c 20 69   Table*, int*, i
2be70 6e 74 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74  nt);.  u32 sqlit
2be80 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 50 61 72 73  e3FkOldmask(Pars
2be90 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 46  e*, Table*);.  F
2bea0 4b 65 79 20 2a 73 71 6c 69 74 65 33 46 6b 52 65  Key *sqlite3FkRe
2beb0 66 65 72 65 6e 63 65 73 28 54 61 62 6c 65 20 2a  ferences(Table *
2bec0 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
2bed0 6e 65 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69  ne sqlite3FkActi
2bee0 6f 6e 73 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29  ons(a,b,c,d,e,f)
2bef0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
2bf00 65 33 46 6b 43 68 65 63 6b 28 61 2c 62 2c 63 2c  e3FkCheck(a,b,c,
2bf10 64 2c 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65  d,e,f).  #define
2bf20 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61   sqlite3FkDropTa
2bf30 62 6c 65 28 61 2c 62 2c 63 29 0a 20 20 23 64 65  ble(a,b,c).  #de
2bf40 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4f 6c  fine sqlite3FkOl
2bf50 64 6d 61 73 6b 28 61 2c 62 29 20 20 20 20 20 20  dmask(a,b)      
2bf60 20 20 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73     0.  #define s
2bf70 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65 64  qlite3FkRequired
2bf80 28 61 2c 62 2c 63 2c 64 29 20 20 20 20 30 0a 23  (a,b,c,d)    0.#
2bf90 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
2bfa0 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
2bfb0 4e 5f 4b 45 59 0a 20 20 76 6f 69 64 20 73 71 6c  N_KEY.  void sql
2bfc0 69 74 65 33 46 6b 44 65 6c 65 74 65 28 73 71 6c  ite3FkDelete(sql
2bfd0 69 74 65 33 20 2a 2c 20 54 61 62 6c 65 2a 29 3b  ite3 *, Table*);
2bfe0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b  .  int sqlite3Fk
2bff0 4c 6f 63 61 74 65 49 6e 64 65 78 28 50 61 72 73  LocateIndex(Pars
2c000 65 2a 2c 54 61 62 6c 65 2a 2c 46 4b 65 79 2a 2c  e*,Table*,FKey*,
2c010 49 6e 64 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a  Index**,int**);.
2c020 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
2c030 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28  sqlite3FkDelete(
2c040 61 2c 62 29 0a 20 20 23 64 65 66 69 6e 65 20 73  a,b).  #define s
2c050 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e  qlite3FkLocateIn
2c060 64 65 78 28 61 2c 62 2c 63 2c 64 2c 65 29 0a 23  dex(a,b,c,d,e).#
2c070 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76  endif.../*.** Av
2c080 61 69 6c 61 62 6c 65 20 66 61 75 6c 74 20 69 6e  ailable fault in
2c090 6a 65 63 74 6f 72 73 2e 20 20 53 68 6f 75 6c 64  jectors.  Should
2c0a0 20 62 65 20 6e 75 6d 62 65 72 65 64 20 62 65 67   be numbered beg
2c0b0 69 6e 6e 69 6e 67 20 77 69 74 68 20 30 2e 0a 2a  inning with 0..*
2c0c0 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
2c0d0 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d  _FAULTINJECTOR_M
2c0e0 41 4c 4c 4f 43 20 20 20 20 20 30 0a 23 64 65 66  ALLOC     0.#def
2c0f0 69 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54  ine SQLITE_FAULT
2c100 49 4e 4a 45 43 54 4f 52 5f 43 4f 55 4e 54 20 20  INJECTOR_COUNT  
2c110 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65      1../*.** The
2c120 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68   interface to th
2c130 65 20 63 6f 64 65 20 69 6e 20 66 61 75 6c 74 2e  e code in fault.
2c140 63 20 75 73 65 64 20 66 6f 72 20 69 64 65 6e 74  c used for ident
2c150 69 66 79 69 6e 67 20 22 62 65 6e 69 67 6e 22 0a  ifying "benign".
2c160 2a 2a 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72  ** malloc failur
2c170 65 73 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79  es. This is only
2c180 20 70 72 65 73 65 6e 74 20 69 66 20 53 51 4c 49   present if SQLI
2c190 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 2a 2a  TE_UNTESTABLE.**
2c1a0 20 69 73 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e   is not defined.
2c1b0 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
2c1c0 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 20 20  TE_UNTESTABLE.  
2c1d0 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69  void sqlite3Begi
2c1e0 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f  nBenignMalloc(vo
2c1f0 69 64 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  id);.  void sqli
2c200 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c  te3EndBenignMall
2c210 6f 63 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a  oc(void);.#else.
2c220 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
2c230 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c  3BeginBenignMall
2c240 6f 63 28 29 0a 20 20 23 64 65 66 69 6e 65 20 73  oc().  #define s
2c250 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d  qlite3EndBenignM
2c260 61 6c 6c 6f 63 28 29 0a 23 65 6e 64 69 66 0a 0a  alloc().#endif..
2c270 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 72 65  /*.** Allowed re
2c280 74 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d  turn values from
2c290 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e   sqlite3FindInIn
2c2a0 64 65 78 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65  dex().*/.#define
2c2b0 20 49 4e 5f 49 4e 44 45 58 5f 52 4f 57 49 44 20   IN_INDEX_ROWID 
2c2c0 20 20 20 20 20 20 20 31 20 20 20 2f 2a 20 53 65         1   /* Se
2c2d0 61 72 63 68 20 74 68 65 20 72 6f 77 69 64 20 6f  arch the rowid o
2c2e0 66 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 23  f the table */.#
2c2f0 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
2c300 45 50 48 20 20 20 20 20 20 20 20 20 20 32 20 20  EPH          2  
2c310 20 2f 2a 20 53 65 61 72 63 68 20 61 6e 20 65 70   /* Search an ep
2c320 68 65 6d 65 72 61 6c 20 62 2d 74 72 65 65 20 2a  hemeral b-tree *
2c330 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
2c340 45 58 5f 49 4e 44 45 58 5f 41 53 43 20 20 20 20  EX_INDEX_ASC    
2c350 33 20 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20  3   /* Existing 
2c360 69 6e 64 65 78 20 41 53 43 45 4e 44 49 4e 47 20  index ASCENDING 
2c370 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
2c380 44 45 58 5f 49 4e 44 45 58 5f 44 45 53 43 20 20  DEX_INDEX_DESC  
2c390 20 34 20 20 20 2f 2a 20 45 78 69 73 74 69 6e 67   4   /* Existing
2c3a0 20 69 6e 64 65 78 20 44 45 53 43 45 4e 44 49 4e   index DESCENDIN
2c3b0 47 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  G */.#define IN_
2c3c0 49 4e 44 45 58 5f 4e 4f 4f 50 20 20 20 20 20 20  INDEX_NOOP      
2c3d0 20 20 20 35 20 20 20 2f 2a 20 4e 6f 20 74 61 62     5   /* No tab
2c3e0 6c 65 20 61 76 61 69 6c 61 62 6c 65 2e 20 55 73  le available. Us
2c3f0 65 20 63 6f 6d 70 61 72 69 73 6f 6e 73 20 2a 2f  e comparisons */
2c400 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 66  ./*.** Allowed f
2c410 6c 61 67 73 20 66 6f 72 20 74 68 65 20 33 72 64  lags for the 3rd
2c420 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71   parameter to sq
2c430 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78  lite3FindInIndex
2c440 28 29 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49  ()..*/.#define I
2c450 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 5f 4f 4b 20  N_INDEX_NOOP_OK 
2c460 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4f      0x0001  /* O
2c470 4b 20 74 6f 20 72 65 74 75 72 6e 20 49 4e 5f 49  K to return IN_I
2c480 4e 44 45 58 5f 4e 4f 4f 50 20 2a 2f 0a 23 64 65  NDEX_NOOP */.#de
2c490 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4d 45  fine IN_INDEX_ME
2c4a0 4d 42 45 52 53 48 49 50 20 20 30 78 30 30 30 32  MBERSHIP  0x0002
2c4b0 20 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72    /* IN operator
2c4c0 20 75 73 65 64 20 66 6f 72 20 6d 65 6d 62 65 72   used for member
2c4d0 73 68 69 70 20 74 65 73 74 20 2a 2f 0a 23 64 65  ship test */.#de
2c4e0 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4c 4f  fine IN_INDEX_LO
2c4f0 4f 50 20 20 20 20 20 20 20 20 30 78 30 30 30 34  OP        0x0004
2c500 20 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72    /* IN operator
2c510 20 75 73 65 64 20 61 73 20 61 20 6c 6f 6f 70 20   used as a loop 
2c520 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  */.int sqlite3Fi
2c530 6e 64 49 6e 49 6e 64 65 78 28 50 61 72 73 65 20  ndInIndex(Parse 
2c540 2a 2c 20 45 78 70 72 20 2a 2c 20 75 33 32 2c 20  *, Expr *, u32, 
2c550 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 0a 69 6e  int*, int*);..in
2c560 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  t sqlite3Journal
2c570 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 76 66 73  Open(sqlite3_vfs
2c580 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
2c590 2c 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a  , sqlite3_file *
2c5a0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74  , int, int);.int
2c5b0 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53   sqlite3JournalS
2c5c0 69 7a 65 28 73 71 6c 69 74 65 33 5f 76 66 73 20  ize(sqlite3_vfs 
2c5d0 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  *);.#ifdef SQLIT
2c5e0 45 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d 49 43 5f  E_ENABLE_ATOMIC_
2c5f0 57 52 49 54 45 0a 20 20 69 6e 74 20 73 71 6c 69  WRITE.  int sqli
2c600 74 65 33 4a 6f 75 72 6e 61 6c 43 72 65 61 74 65  te3JournalCreate
2c610 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29  (sqlite3_file *)
2c620 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71  ;.#endif..int sq
2c630 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 49 73 49 6e  lite3JournalIsIn
2c640 4d 65 6d 6f 72 79 28 73 71 6c 69 74 65 33 5f 66  Memory(sqlite3_f
2c650 69 6c 65 20 2a 70 29 3b 0a 76 6f 69 64 20 73 71  ile *p);.void sq
2c660 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 4f  lite3MemJournalO
2c670 70 65 6e 28 73 71 6c 69 74 65 33 5f 66 69 6c 65  pen(sqlite3_file
2c680 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74   *);..void sqlit
2c690 65 33 45 78 70 72 53 65 74 48 65 69 67 68 74 41  e3ExprSetHeightA
2c6a0 6e 64 46 6c 61 67 73 28 50 61 72 73 65 20 2a 70  ndFlags(Parse *p
2c6b0 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70 29 3b  Parse, Expr *p);
2c6c0 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
2c6d0 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69  EXPR_DEPTH>0.  i
2c6e0 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  nt sqlite3Select
2c6f0 45 78 70 72 48 65 69 67 68 74 28 53 65 6c 65 63  ExprHeight(Selec
2c700 74 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  t *);.  int sqli
2c710 74 65 33 45 78 70 72 43 68 65 63 6b 48 65 69 67  te3ExprCheckHeig
2c720 68 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  ht(Parse*, int);
2c730 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
2c740 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78   sqlite3SelectEx
2c750 70 72 48 65 69 67 68 74 28 78 29 20 30 0a 20 20  prHeight(x) 0.  
2c760 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45  #define sqlite3E
2c770 78 70 72 43 68 65 63 6b 48 65 69 67 68 74 28 78  xprCheckHeight(x
2c780 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 75 33 32 20  ,y).#endif..u32 
2c790 73 71 6c 69 74 65 33 47 65 74 34 62 79 74 65 28  sqlite3Get4byte(
2c7a0 63 6f 6e 73 74 20 75 38 2a 29 3b 0a 76 6f 69 64  const u8*);.void
2c7b0 20 73 71 6c 69 74 65 33 50 75 74 34 62 79 74 65   sqlite3Put4byte
2c7c0 28 75 38 2a 2c 20 75 33 32 29 3b 0a 0a 23 69 66  (u8*, u32);..#if
2c7d0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
2c7e0 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a  E_UNLOCK_NOTIFY.
2c7f0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
2c800 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28  nnectionBlocked(
2c810 73 71 6c 69 74 65 33 20 2a 2c 20 73 71 6c 69 74  sqlite3 *, sqlit
2c820 65 33 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  e3 *);.  void sq
2c830 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55  lite3ConnectionU
2c840 6e 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20  nlocked(sqlite3 
2c850 2a 64 62 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  *db);.  void sql
2c860 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c  ite3ConnectionCl
2c870 6f 73 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62  osed(sqlite3 *db
2c880 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
2c890 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  ne sqlite3Connec
2c8a0 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 78 2c 79 29  tionBlocked(x,y)
2c8b0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
2c8c0 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f  e3ConnectionUnlo
2c8d0 63 6b 65 64 28 78 29 0a 20 20 23 64 65 66 69 6e  cked(x).  #defin
2c8e0 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  e sqlite3Connect
2c8f0 69 6f 6e 43 6c 6f 73 65 64 28 78 29 0a 23 65 6e  ionClosed(x).#en
2c900 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
2c910 54 45 5f 44 45 42 55 47 0a 20 20 76 6f 69 64 20  TE_DEBUG.  void 
2c920 73 71 6c 69 74 65 33 50 61 72 73 65 72 54 72 61  sqlite3ParserTra
2c930 63 65 28 46 49 4c 45 2a 2c 20 63 68 61 72 20 2a  ce(FILE*, char *
2c940 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  );.#endif../*.**
2c950 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 45   If the SQLITE_E
2c960 4e 41 42 4c 45 20 49 4f 54 52 41 43 45 20 65 78  NABLE IOTRACE ex
2c970 69 73 74 73 20 74 68 65 6e 20 74 68 65 20 67 6c  ists then the gl
2c980 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 0a 2a 2a  obal variable.**
2c990 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20   sqlite3IoTrace 
2c9a0 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
2c9b0 61 20 70 72 69 6e 74 66 2d 6c 69 6b 65 20 72 6f  a printf-like ro
2c9c0 75 74 69 6e 65 20 75 73 65 64 20 74 6f 0a 2a 2a  utine used to.**
2c9d0 20 70 72 69 6e 74 20 49 2f 4f 20 74 72 61 63 69   print I/O traci
2c9e0 6e 67 20 6d 65 73 73 61 67 65 73 2e 0a 2a 2f 0a  ng messages..*/.
2c9f0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
2ca00 41 42 4c 45 5f 49 4f 54 52 41 43 45 0a 23 20 64  ABLE_IOTRACE.# d
2ca10 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29  efine IOTRACE(A)
2ca20 20 20 69 66 28 20 73 71 6c 69 74 65 33 49 6f 54    if( sqlite3IoT
2ca30 72 61 63 65 20 29 7b 20 73 71 6c 69 74 65 33 49  race ){ sqlite3I
2ca40 6f 54 72 61 63 65 20 41 3b 20 7d 0a 20 20 76 6f  oTrace A; }.  vo
2ca50 69 64 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f  id sqlite3VdbeIO
2ca60 54 72 61 63 65 53 71 6c 28 56 64 62 65 2a 29 3b  TraceSql(Vdbe*);
2ca70 0a 53 51 4c 49 54 45 5f 41 50 49 20 53 51 4c 49  .SQLITE_API SQLI
2ca80 54 45 5f 45 58 54 45 52 4e 20 76 6f 69 64 20 28  TE_EXTERN void (
2ca90 53 51 4c 49 54 45 5f 43 44 45 43 4c 20 2a 73 71  SQLITE_CDECL *sq
2caa0 6c 69 74 65 33 49 6f 54 72 61 63 65 29 28 63 6f  lite3IoTrace)(co
2cab0 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a  nst char*,...);.
2cac0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 49  #else.# define I
2cad0 4f 54 52 41 43 45 28 41 29 0a 23 20 64 65 66 69  OTRACE(A).# defi
2cae0 6e 65 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f  ne sqlite3VdbeIO
2caf0 54 72 61 63 65 53 71 6c 28 58 29 0a 23 65 6e 64  TraceSql(X).#end
2cb00 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20  if../*.** These 
2cb10 72 6f 75 74 69 6e 65 73 20 61 72 65 20 61 76 61  routines are ava
2cb20 69 6c 61 62 6c 65 20 66 6f 72 20 74 68 65 20 6d  ilable for the m
2cb30 65 6d 32 2e 63 20 64 65 62 75 67 67 69 6e 67 20  em2.c debugging 
2cb40 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72  memory allocator
2cb50 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 79 20  .** only.  They 
2cb60 61 72 65 20 75 73 65 64 20 74 6f 20 76 65 72 69  are used to veri
2cb70 66 79 20 74 68 61 74 20 64 69 66 66 65 72 65 6e  fy that differen
2cb80 74 20 22 74 79 70 65 73 22 20 6f 66 20 6d 65 6d  t "types" of mem
2cb90 6f 72 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f  ory.** allocatio
2cba0 6e 73 20 61 72 65 20 70 72 6f 70 65 72 6c 79 20  ns are properly 
2cbb0 74 72 61 63 6b 65 64 20 62 79 20 74 68 65 20 73  tracked by the s
2cbc0 79 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c  ystem..**.** sql
2cbd0 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
2cbe0 79 70 65 28 29 20 73 65 74 73 20 74 68 65 20 22  ype() sets the "
2cbf0 74 79 70 65 22 20 6f 66 20 61 6e 20 61 6c 6c 6f  type" of an allo
2cc00 63 61 74 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66  cation to one of
2cc10 0a 2a 2a 20 74 68 65 20 4d 45 4d 54 59 50 45 5f  .** the MEMTYPE_
2cc20 2a 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64  * macros defined
2cc30 20 62 65 6c 6f 77 2e 20 20 54 68 65 20 74 79 70   below.  The typ
2cc40 65 20 6d 75 73 74 20 62 65 20 61 20 62 69 74 6d  e must be a bitm
2cc50 61 73 6b 20 77 69 74 68 0a 2a 2a 20 61 20 73 69  ask with.** a si
2cc60 6e 67 6c 65 20 62 69 74 20 73 65 74 2e 0a 2a 2a  ngle bit set..**
2cc70 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  .** sqlite3Memde
2cc80 62 75 67 48 61 73 54 79 70 65 28 29 20 72 65 74  bugHasType() ret
2cc90 75 72 6e 73 20 74 72 75 65 20 69 66 20 61 6e 79  urns true if any
2cca0 20 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e 20   of the bits in 
2ccb0 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72  its second.** ar
2ccc0 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65  gument match the
2ccd0 20 74 79 70 65 20 73 65 74 20 62 79 20 74 68 65   type set by the
2cce0 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65   previous sqlite
2ccf0 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65  3MemdebugSetType
2cd00 28 29 2e 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65  ()..** sqlite3Me
2cd10 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 29 20  mdebugHasType() 
2cd20 69 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 20  is intended for 
2cd30 75 73 65 20 69 6e 73 69 64 65 20 61 73 73 65 72  use inside asser
2cd40 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  t() statements..
2cd50 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d  **.** sqlite3Mem
2cd60 64 65 62 75 67 4e 6f 54 79 70 65 28 29 20 72 65  debugNoType() re
2cd70 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 6e 6f  turns true if no
2cd80 6e 65 20 6f 66 20 74 68 65 20 62 69 74 73 20 69  ne of the bits i
2cd90 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20  n its second.** 
2cda0 61 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74  argument match t
2cdb0 68 65 20 74 79 70 65 20 73 65 74 20 62 79 20 74  he type set by t
2cdc0 68 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69  he previous sqli
2cdd0 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79  te3MemdebugSetTy
2cde0 70 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68  pe()..**.** Perh
2cdf0 61 70 73 20 74 68 65 20 6d 6f 73 74 20 69 6d 70  aps the most imp
2ce00 6f 72 74 61 6e 74 20 70 6f 69 6e 74 20 69 73 20  ortant point is 
2ce10 74 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 62  the difference b
2ce20 65 74 77 65 65 6e 20 4d 45 4d 54 59 50 45 5f 48  etween MEMTYPE_H
2ce30 45 41 50 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54 59  EAP.** and MEMTY
2ce40 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2e 20 20 49  PE_LOOKASIDE.  I
2ce50 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  f an allocation 
2ce60 69 73 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41  is MEMTYPE_LOOKA
2ce70 53 49 44 45 2c 20 74 68 61 74 20 6d 65 61 6e 73  SIDE, that means
2ce80 0a 2a 2a 20 69 74 20 6d 69 67 68 74 20 68 61 76  .** it might hav
2ce90 65 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64  e been allocated
2cea0 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 2c 20 65   by lookaside, e
2ceb0 78 63 65 70 74 20 74 68 65 20 61 6c 6c 6f 63 61  xcept the alloca
2cec0 74 69 6f 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f 20  tion was.** too 
2ced0 6c 61 72 67 65 20 6f 72 20 6c 6f 6f 6b 61 73 69  large or lookasi
2cee0 64 65 20 77 61 73 20 61 6c 72 65 61 64 79 20 66  de was already f
2cef0 75 6c 6c 2e 20 20 49 74 20 69 73 20 69 6d 70 6f  ull.  It is impo
2cf00 72 74 61 6e 74 20 74 6f 20 76 65 72 69 66 79 0a  rtant to verify.
2cf10 2a 2a 20 74 68 61 74 20 61 6c 6c 6f 63 61 74 69  ** that allocati
2cf20 6f 6e 73 20 74 68 61 74 20 6d 69 67 68 74 20 68  ons that might h
2cf30 61 76 65 20 62 65 65 6e 20 73 61 74 69 73 66 69  ave been satisfi
2cf40 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 20  ed by lookaside 
2cf50 61 72 65 20 6e 6f 74 0a 2a 2a 20 70 61 73 73 65  are not.** passe
2cf60 64 20 62 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f  d back to non-lo
2cf70 6f 6b 61 73 69 64 65 20 66 72 65 65 28 29 20 72  okaside free() r
2cf80 6f 75 74 69 6e 65 73 2e 20 20 41 73 73 65 72 74  outines.  Assert
2cf90 73 20 73 75 63 68 20 61 73 20 74 68 65 0a 2a 2a  s such as the.**
2cfa0 20 65 78 61 6d 70 6c 65 20 61 62 6f 76 65 20 61   example above a
2cfb0 72 65 20 70 6c 61 63 65 64 20 6f 6e 20 74 68 65  re placed on the
2cfc0 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66   non-lookaside f
2cfd0 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73 20 74  ree() routines t
2cfe0 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 69 73  o verify.** this
2cff0 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0a 2a 2a 0a   constraint..**.
2d000 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 69 73 20 69  ** All of this i
2d010 73 20 6e 6f 2d 6f 70 20 66 6f 72 20 61 20 70 72  s no-op for a pr
2d020 6f 64 75 63 74 69 6f 6e 20 62 75 69 6c 64 2e 20  oduction build. 
2d030 20 49 74 20 6f 6e 6c 79 20 63 6f 6d 65 73 20 69   It only comes i
2d040 6e 74 6f 0a 2a 2a 20 70 6c 61 79 20 77 68 65 6e  nto.** play when
2d050 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 45 4d 44   the SQLITE_MEMD
2d060 45 42 55 47 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  EBUG compile-tim
2d070 65 20 6f 70 74 69 6f 6e 20 69 73 20 75 73 65 64  e option is used
2d080 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
2d090 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20 76 6f  TE_MEMDEBUG.  vo
2d0a0 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  id sqlite3Memdeb
2d0b0 75 67 53 65 74 54 79 70 65 28 76 6f 69 64 2a 2c  ugSetType(void*,
2d0c0 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  u8);.  int sqlit
2d0d0 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70  e3MemdebugHasTyp
2d0e0 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69  e(void*,u8);.  i
2d0f0 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  nt sqlite3Memdeb
2d100 75 67 4e 6f 54 79 70 65 28 76 6f 69 64 2a 2c 75  ugNoType(void*,u
2d110 38 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  8);.#else.# defi
2d120 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ne sqlite3Memdeb
2d130 75 67 53 65 74 54 79 70 65 28 58 2c 59 29 20 20  ugSetType(X,Y)  
2d140 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65  /* no-op */.# de
2d150 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64  fine sqlite3Memd
2d160 65 62 75 67 48 61 73 54 79 70 65 28 58 2c 59 29  ebugHasType(X,Y)
2d170 20 20 31 0a 23 20 64 65 66 69 6e 65 20 73 71 6c    1.# define sql
2d180 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79  ite3MemdebugNoTy
2d190 70 65 28 58 2c 59 29 20 20 20 31 0a 23 65 6e 64  pe(X,Y)   1.#end
2d1a0 69 66 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59  if.#define MEMTY
2d1b0 50 45 5f 48 45 41 50 20 20 20 20 20 20 20 30 78  PE_HEAP       0x
2d1c0 30 31 20 20 2f 2a 20 47 65 6e 65 72 61 6c 20 68  01  /* General h
2d1d0 65 61 70 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  eap allocations 
2d1e0 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59  */.#define MEMTY
2d1f0 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 20 20 30 78  PE_LOOKASIDE  0x
2d200 30 32 20 20 2f 2a 20 48 65 61 70 20 74 68 61 74  02  /* Heap that
2d210 20 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e   might have been
2d220 20 6c 6f 6f 6b 61 73 69 64 65 20 2a 2f 0a 23 64   lookaside */.#d
2d230 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 53 43  efine MEMTYPE_SC
2d240 52 41 54 43 48 20 20 20 20 30 78 30 34 20 20 2f  RATCH    0x04  /
2d250 2a 20 53 63 72 61 74 63 68 20 61 6c 6c 6f 63 61  * Scratch alloca
2d260 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tions */.#define
2d270 20 4d 45 4d 54 59 50 45 5f 50 43 41 43 48 45 20   MEMTYPE_PCACHE 
2d280 20 20 20 20 30 78 30 38 20 20 2f 2a 20 50 61 67      0x08  /* Pag
2d290 65 20 63 61 63 68 65 20 61 6c 6c 6f 63 61 74 69  e cache allocati
2d2a0 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68  ons */../*.** Th
2d2b0 72 65 61 64 69 6e 67 20 69 6e 74 65 72 66 61 63  reading interfac
2d2c0 65 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f  e.*/.#if SQLITE_
2d2d0 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  MAX_WORKER_THREA
2d2e0 44 53 3e 30 0a 69 6e 74 20 73 71 6c 69 74 65 33  DS>0.int sqlite3
2d2f0 54 68 72 65 61 64 43 72 65 61 74 65 28 53 51 4c  ThreadCreate(SQL
2d300 69 74 65 54 68 72 65 61 64 2a 2a 2c 76 6f 69 64  iteThread**,void
2d310 2a 28 2a 29 28 76 6f 69 64 2a 29 2c 76 6f 69 64  *(*)(void*),void
2d320 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  *);.int sqlite3T
2d330 68 72 65 61 64 4a 6f 69 6e 28 53 51 4c 69 74 65  hreadJoin(SQLite
2d340 54 68 72 65 61 64 2a 2c 20 76 6f 69 64 2a 2a 29  Thread*, void**)
2d350 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65  ;.#endif..#if de
2d360 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
2d370 42 4c 45 5f 44 42 53 54 41 54 5f 56 54 41 42 29  BLE_DBSTAT_VTAB)
2d380 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
2d390 54 45 5f 54 45 53 54 29 0a 69 6e 74 20 73 71 6c  TE_TEST).int sql
2d3a0 69 74 65 33 44 62 73 74 61 74 52 65 67 69 73 74  ite3DbstatRegist
2d3b0 65 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65  er(sqlite3*);.#e
2d3c0 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65  ndif..int sqlite
2d3d0 33 45 78 70 72 56 65 63 74 6f 72 53 69 7a 65 28  3ExprVectorSize(
2d3e0 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e  Expr *pExpr);.in
2d3f0 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 56  t sqlite3ExprIsV
2d400 65 63 74 6f 72 28 45 78 70 72 20 2a 70 45 78 70  ector(Expr *pExp
2d410 72 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  r);.Expr *sqlite
2d420 33 56 65 63 74 6f 72 46 69 65 6c 64 53 75 62 65  3VectorFieldSube
2d430 78 70 72 28 45 78 70 72 2a 2c 20 69 6e 74 29 3b  xpr(Expr*, int);
2d440 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
2d450 70 72 46 6f 72 56 65 63 74 6f 72 46 69 65 6c 64  prForVectorField
2d460 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 69 6e  (Parse*,Expr*,in
2d470 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2d480 56 65 63 74 6f 72 45 72 72 6f 72 4d 73 67 28 50  VectorErrorMsg(P
2d490 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 0a  arse*, Expr*);..
2d4a0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
2d4b0 49 4e 54 5f 48 20 2a 2f 0a                       INT_H */.