/ Hex Artifact Content
Login

Artifact b8c2e9ea279edf9b544fa29cc1cea60e9f8f2145:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 53 51 4c 49 54 45 49 4e 54 5f 48 0a 23  ef SQLITEINT_H.#
01c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 49 4e 54  define SQLITEINT
01d0: 5f 48 0a 0a 2f 2a 20 53 70 65 63 69 61 6c 20 43  _H../* Special C
01e0: 6f 6d 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 53  omments:.**.** S
01f0: 6f 6d 65 20 63 6f 6d 6d 65 6e 74 73 20 68 61 76  ome comments hav
0200: 65 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  e special meanin
0210: 67 20 74 6f 20 74 68 65 20 74 6f 6f 6c 73 20 74  g to the tools t
0220: 68 61 74 20 6d 65 61 73 75 72 65 20 74 65 73 74  hat measure test
0230: 0a 2a 2a 20 63 6f 76 65 72 61 67 65 3a 0a 2a 2a  .** coverage:.**
0240: 0a 2a 2a 20 20 20 20 4e 4f 5f 54 45 53 54 20 20  .**    NO_TEST  
0250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0260: 20 20 20 2d 20 54 68 65 20 62 72 61 6e 63 68 65     - The branche
0270: 73 20 6f 6e 20 74 68 69 73 20 6c 69 6e 65 20 61  s on this line a
0280: 72 65 20 6e 6f 74 0a 2a 2a 20 20 20 20 20 20 20  re not.**       
0290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02a0: 20 20 20 20 20 20 20 20 20 20 20 6d 65 61 73 75             measu
02b0: 72 65 64 20 62 79 20 62 72 61 6e 63 68 20 63 6f  red by branch co
02c0: 76 65 72 61 67 65 2e 20 20 54 68 69 73 20 69 73  verage.  This is
02d0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
02e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02f0: 20 20 20 20 20 75 73 65 64 20 6f 6e 20 6c 69 6e       used on lin
0300: 65 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  es of code that 
0310: 61 63 74 75 61 6c 6c 79 0a 2a 2a 20 20 20 20 20  actually.**     
0320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0330: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6d 70               imp
0340: 6c 65 6d 65 6e 74 20 70 61 72 74 73 20 6f 66 20  lement parts of 
0350: 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67  coverage testing
0360: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d  ..**.**    OPTIM
0370: 49 5a 41 54 49 4f 4e 2d 49 46 2d 54 52 55 45 20  IZATION-IF-TRUE 
0380: 20 20 20 20 20 20 20 2d 20 54 68 69 73 20 62 72         - This br
0390: 61 6e 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20  anch is allowed 
03a0: 74 6f 20 61 6c 77 61 79 20 62 65 20 66 61 6c 73  to alway be fals
03b0: 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
03c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03d0: 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 63 6f        and the co
03e0: 72 72 65 63 74 20 61 6e 73 77 65 72 20 69 73 20  rrect answer is 
03f0: 73 74 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a  still obtained,.
0400: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
0410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0420: 20 20 20 20 74 68 6f 75 67 68 20 70 65 72 68 61      though perha
0430: 70 73 20 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a  ps more slowly..
0440: 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d 49 5a  **.**    OPTIMIZ
0450: 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 20 20  ATION-IF-FALSE  
0460: 20 20 20 20 20 2d 20 54 68 69 73 20 62 72 61 6e       - This bran
0470: 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f  ch is allowed to
0480: 20 61 6c 77 61 79 20 62 65 20 74 72 75 65 0a 2a   alway be true.*
0490: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
04a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04b0: 20 20 20 61 6e 64 20 74 68 65 20 63 6f 72 72 65     and the corre
04c0: 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74 69  ct answer is sti
04d0: 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a 2a 2a 20  ll obtained,.** 
04e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0500: 20 74 68 6f 75 67 68 20 70 65 72 68 61 70 73 20   though perhaps 
0510: 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a 2a 2a 0a  more slowly..**.
0520: 2a 2a 20 20 20 20 50 52 45 56 45 4e 54 53 2d 48  **    PREVENTS-H
0530: 41 52 4d 4c 45 53 53 2d 4f 56 45 52 52 45 41 44  ARMLESS-OVERREAD
0540: 20 20 2d 20 54 68 69 73 20 62 72 61 6e 63 68 20    - This branch 
0550: 70 72 65 76 65 6e 74 73 20 61 20 62 75 66 66 65  prevents a buffe
0560: 72 20 6f 76 65 72 72 65 61 64 0a 2a 2a 20 20 20  r overread.**   
0570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
0590: 68 61 74 20 77 6f 75 6c 64 20 62 65 20 68 61 72  hat would be har
05a0: 6d 6c 65 73 73 20 61 6e 64 20 75 6e 64 65 74 65  mless and undete
05b0: 63 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20  ctable.**       
05c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
05d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 69 74             if it
05e0: 20 64 69 64 20 6f 63 63 75 72 2e 20 20 0a 2a 2a   did occur.  .**
05f0: 0a 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65 73  .** In all cases
0600: 2c 20 74 68 65 20 73 70 65 63 69 61 6c 20 63 6f  , the special co
0610: 6d 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 65 6e  mment must be en
0620: 63 6c 6f 73 65 64 20 69 6e 20 74 68 65 20 75 73  closed in the us
0630: 75 61 6c 0a 2a 2a 20 73 6c 61 73 68 2d 61 73 74  ual.** slash-ast
0640: 65 72 69 73 6b 2e 2e 2e 61 73 74 65 72 69 73 6b  erisk...asterisk
0650: 2d 73 6c 61 73 68 20 63 6f 6d 6d 65 6e 74 20 6d  -slash comment m
0660: 61 72 6b 73 2c 20 77 69 74 68 20 6e 6f 20 73 70  arks, with no sp
0670: 61 63 65 73 20 62 65 74 77 65 65 6e 20 74 68 65  aces between the
0680: 20 0a 2a 2a 20 61 73 74 65 72 69 73 6b 73 20 61   .** asterisks a
0690: 6e 64 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74  nd the comment t
06a0: 65 78 74 2e 0a 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d  ext..*/../*.** M
06b0: 61 6b 65 20 73 75 72 65 20 74 68 65 20 54 63 6c  ake sure the Tcl
06c0: 20 63 61 6c 6c 69 6e 67 20 63 6f 6e 76 65 6e 74   calling convent
06d0: 69 6f 6e 20 6d 61 63 72 6f 20 69 73 20 64 65 66  ion macro is def
06e0: 69 6e 65 64 2e 20 20 54 68 69 73 20 6d 61 63 72  ined.  This macr
06f0: 6f 20 69 73 0a 2a 2a 20 6f 6e 6c 79 20 75 73 65  o is.** only use
0700: 64 20 62 79 20 74 65 73 74 20 63 6f 64 65 20 61  d by test code a
0710: 6e 64 20 54 63 6c 20 69 6e 74 65 67 72 61 74 69  nd Tcl integrati
0720: 6f 6e 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 6e  on code..*/.#ifn
0730: 64 65 66 20 53 51 4c 49 54 45 5f 54 43 4c 41 50  def SQLITE_TCLAP
0740: 49 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49  I.#  define SQLI
0750: 54 45 5f 54 43 4c 41 50 49 0a 23 65 6e 64 69 66  TE_TCLAPI.#endif
0760: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20 73 75 72  ../*.** Make sur
0770: 65 20 74 68 61 74 20 72 61 6e 64 5f 73 28 29 20  e that rand_s() 
0780: 69 73 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e 20  is available on 
0790: 57 69 6e 64 6f 77 73 20 73 79 73 74 65 6d 73 20  Windows systems 
07a0: 77 69 74 68 20 4d 53 56 43 20 32 30 30 35 0a 2a  with MSVC 2005.*
07b0: 2a 20 6f 72 20 68 69 67 68 65 72 2e 0a 2a 2f 0a  * or higher..*/.
07c0: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 4d 53 43  #if defined(_MSC
07d0: 5f 56 45 52 29 20 26 26 20 5f 4d 53 43 5f 56 45  _VER) && _MSC_VE
07e0: 52 3e 3d 31 34 30 30 0a 23 20 20 64 65 66 69 6e  R>=1400.#  defin
07f0: 65 20 5f 43 52 54 5f 52 41 4e 44 5f 53 0a 23 65  e _CRT_RAND_S.#e
0800: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  ndif../*.** Incl
0810: 75 64 65 20 74 68 65 20 68 65 61 64 65 72 20 66  ude the header f
0820: 69 6c 65 20 75 73 65 64 20 74 6f 20 63 75 73 74  ile used to cust
0830: 6f 6d 69 7a 65 20 74 68 65 20 63 6f 6d 70 69 6c  omize the compil
0840: 65 72 20 6f 70 74 69 6f 6e 73 20 66 6f 72 20 4d  er options for M
0850: 53 56 43 2e 0a 2a 2a 20 54 68 69 73 20 73 68 6f  SVC..** This sho
0860: 75 6c 64 20 62 65 20 64 6f 6e 65 20 66 69 72 73  uld be done firs
0870: 74 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e  t so that it can
0880: 20 73 75 63 63 65 73 73 66 75 6c 6c 79 20 70 72   successfully pr
0890: 65 76 65 6e 74 20 73 70 75 72 69 6f 75 73 0a 2a  event spurious.*
08a0: 2a 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69  * compiler warni
08b0: 6e 67 73 20 64 75 65 20 74 6f 20 73 75 62 73 65  ngs due to subse
08c0: 71 75 65 6e 74 20 63 6f 6e 74 65 6e 74 20 69 6e  quent content in
08d0: 20 74 68 69 73 20 66 69 6c 65 20 61 6e 64 20 6f   this file and o
08e0: 74 68 65 72 20 66 69 6c 65 73 0a 2a 2a 20 74 68  ther files.** th
08f0: 61 74 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20  at are included 
0900: 62 79 20 74 68 69 73 20 66 69 6c 65 2e 0a 2a 2f  by this file..*/
0910: 0a 23 69 6e 63 6c 75 64 65 20 22 6d 73 76 63 2e  .#include "msvc.
0920: 68 22 0a 0a 2f 2a 0a 2a 2a 20 53 70 65 63 69 61  h"../*.** Specia
0930: 6c 20 73 65 74 75 70 20 66 6f 72 20 56 78 57 6f  l setup for VxWo
0940: 72 6b 73 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20  rks.*/.#include 
0950: 22 76 78 77 6f 72 6b 73 2e 68 22 0a 0a 2f 2a 0a  "vxworks.h"../*.
0960: 2a 2a 20 54 68 65 73 65 20 23 64 65 66 69 6e 65  ** These #define
0970: 73 20 73 68 6f 75 6c 64 20 65 6e 61 62 6c 65 20  s should enable 
0980: 3e 32 47 42 20 66 69 6c 65 20 73 75 70 70 6f 72  >2GB file suppor
0990: 74 20 6f 6e 20 50 4f 53 49 58 20 69 66 20 74 68  t on POSIX if th
09a0: 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20  e.** underlying 
09b0: 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d  operating system
09c0: 20 73 75 70 70 6f 72 74 73 20 69 74 2e 20 20 49   supports it.  I
09d0: 66 20 74 68 65 20 4f 53 20 6c 61 63 6b 73 0a 2a  f the OS lacks.*
09e0: 2a 20 6c 61 72 67 65 20 66 69 6c 65 20 73 75 70  * large file sup
09f0: 70 6f 72 74 2c 20 6f 72 20 69 66 20 74 68 65 20  port, or if the 
0a00: 4f 53 20 69 73 20 77 69 6e 64 6f 77 73 2c 20 74  OS is windows, t
0a10: 68 65 73 65 20 73 68 6f 75 6c 64 20 62 65 20 6e  hese should be n
0a20: 6f 2d 6f 70 73 2e 0a 2a 2a 0a 2a 2a 20 54 69 63  o-ops..**.** Tic
0a30: 6b 65 74 20 23 32 37 33 39 3a 20 20 54 68 65 20  ket #2739:  The 
0a40: 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55 52 43  _LARGEFILE_SOURC
0a50: 45 20 6d 61 63 72 6f 20 6d 75 73 74 20 61 70 70  E macro must app
0a60: 65 61 72 20 62 65 66 6f 72 65 20 61 6e 79 0a 2a  ear before any.*
0a70: 2a 20 73 79 73 74 65 6d 20 23 69 6e 63 6c 75 64  * system #includ
0a80: 65 73 2e 20 20 48 65 6e 63 65 2c 20 74 68 69 73  es.  Hence, this
0a90: 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 20 6d   block of code m
0aa0: 75 73 74 20 62 65 20 74 68 65 20 76 65 72 79 20  ust be the very 
0ab0: 66 69 72 73 74 0a 2a 2a 20 63 6f 64 65 20 69 6e  first.** code in
0ac0: 20 61 6c 6c 20 73 6f 75 72 63 65 20 66 69 6c 65   all source file
0ad0: 73 2e 0a 2a 2a 0a 2a 2a 20 4c 61 72 67 65 20 66  s..**.** Large f
0ae0: 69 6c 65 20 73 75 70 70 6f 72 74 20 63 61 6e 20  ile support can 
0af0: 62 65 20 64 69 73 61 62 6c 65 64 20 75 73 69 6e  be disabled usin
0b00: 67 20 74 68 65 20 2d 44 53 51 4c 49 54 45 5f 44  g the -DSQLITE_D
0b10: 49 53 41 42 4c 45 5f 4c 46 53 20 73 77 69 74 63  ISABLE_LFS switc
0b20: 68 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f 6d 70  h.** on the comp
0b30: 69 6c 65 72 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e  iler command lin
0b40: 65 2e 20 20 54 68 69 73 20 69 73 20 6e 65 63 65  e.  This is nece
0b50: 73 73 61 72 79 20 69 66 20 79 6f 75 20 61 72 65  ssary if you are
0b60: 20 63 6f 6d 70 69 6c 69 6e 67 0a 2a 2a 20 6f 6e   compiling.** on
0b70: 20 61 20 72 65 63 65 6e 74 20 6d 61 63 68 69 6e   a recent machin
0b80: 65 20 28 65 78 3a 20 52 65 64 20 48 61 74 20 37  e (ex: Red Hat 7
0b90: 2e 32 29 20 62 75 74 20 79 6f 75 20 77 61 6e 74  .2) but you want
0ba0: 20 79 6f 75 72 20 63 6f 64 65 20 74 6f 20 77 6f   your code to wo
0bb0: 72 6b 0a 2a 2a 20 6f 6e 20 61 6e 20 6f 6c 64 65  rk.** on an olde
0bc0: 72 20 6d 61 63 68 69 6e 65 20 28 65 78 3a 20 52  r machine (ex: R
0bd0: 65 64 20 48 61 74 20 36 2e 30 29 2e 20 20 49 66  ed Hat 6.0).  If
0be0: 20 79 6f 75 20 63 6f 6d 70 69 6c 65 20 6f 6e 20   you compile on 
0bf0: 52 65 64 20 48 61 74 20 37 2e 32 0a 2a 2a 20 77  Red Hat 7.2.** w
0c00: 69 74 68 6f 75 74 20 74 68 69 73 20 6f 70 74 69  ithout this opti
0c10: 6f 6e 2c 20 4c 46 53 20 69 73 20 65 6e 61 62 6c  on, LFS is enabl
0c20: 65 2e 20 20 42 75 74 20 4c 46 53 20 64 6f 65 73  e.  But LFS does
0c30: 20 6e 6f 74 20 65 78 69 73 74 20 69 6e 20 74 68   not exist in th
0c40: 65 20 6b 65 72 6e 65 6c 0a 2a 2a 20 69 6e 20 52  e kernel.** in R
0c50: 65 64 20 48 61 74 20 36 2e 30 2c 20 73 6f 20 74  ed Hat 6.0, so t
0c60: 68 65 20 63 6f 64 65 20 77 6f 6e 27 74 20 77 6f  he code won't wo
0c70: 72 6b 2e 20 20 48 65 6e 63 65 2c 20 66 6f 72 20  rk.  Hence, for 
0c80: 6d 61 78 69 6d 75 6d 20 62 69 6e 61 72 79 0a 2a  maximum binary.*
0c90: 2a 20 70 6f 72 74 61 62 69 6c 69 74 79 20 79 6f  * portability yo
0ca0: 75 20 73 68 6f 75 6c 64 20 6f 6d 69 74 20 4c 46  u should omit LF
0cb0: 53 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 72 65  S..**.** The pre
0cc0: 76 69 6f 75 73 20 70 61 72 61 67 72 61 70 68 20  vious paragraph 
0cd0: 77 61 73 20 77 72 69 74 74 65 6e 20 69 6e 20 32  was written in 2
0ce0: 30 30 35 2e 20 20 28 54 68 69 73 20 70 61 72 61  005.  (This para
0cf0: 67 72 61 70 68 20 69 73 20 77 72 69 74 74 65 6e  graph is written
0d00: 0a 2a 2a 20 6f 6e 20 32 30 30 38 2d 31 31 2d 32  .** on 2008-11-2
0d10: 38 2e 29 20 54 68 65 73 65 20 64 61 79 73 2c 20  8.) These days, 
0d20: 61 6c 6c 20 4c 69 6e 75 78 20 6b 65 72 6e 65 6c  all Linux kernel
0d30: 73 20 73 75 70 70 6f 72 74 20 6c 61 72 67 65 20  s support large 
0d40: 66 69 6c 65 73 2c 20 73 6f 0a 2a 2a 20 79 6f 75  files, so.** you
0d50: 20 73 68 6f 75 6c 64 20 70 72 6f 62 61 62 6c 79   should probably
0d60: 20 6c 65 61 76 65 20 4c 46 53 20 65 6e 61 62 6c   leave LFS enabl
0d70: 65 64 2e 20 20 42 75 74 20 73 6f 6d 65 20 65 6d  ed.  But some em
0d80: 62 65 64 64 65 64 20 70 6c 61 74 66 6f 72 6d 73  bedded platforms
0d90: 20 6d 69 67 68 74 0a 2a 2a 20 6c 61 63 6b 20 4c   might.** lack L
0da0: 46 53 20 69 6e 20 77 68 69 63 68 20 63 61 73 65  FS in which case
0db0: 20 74 68 65 20 53 51 4c 49 54 45 5f 44 49 53 41   the SQLITE_DISA
0dc0: 42 4c 45 5f 4c 46 53 20 6d 61 63 72 6f 20 6d 69  BLE_LFS macro mi
0dd0: 67 68 74 20 73 74 69 6c 6c 20 62 65 20 75 73 65  ght still be use
0de0: 66 75 6c 2e 0a 2a 2a 0a 2a 2a 20 53 69 6d 69 6c  ful..**.** Simil
0df0: 61 72 20 69 73 20 74 72 75 65 20 66 6f 72 20 4d  ar is true for M
0e00: 61 63 20 4f 53 20 58 2e 20 20 4c 46 53 20 69 73  ac OS X.  LFS is
0e10: 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74 65 64 20   only supported 
0e20: 6f 6e 20 4d 61 63 20 4f 53 20 58 20 39 20 61 6e  on Mac OS X 9 an
0e30: 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 23 69 66 6e  d later..*/.#ifn
0e40: 64 65 66 20 53 51 4c 49 54 45 5f 44 49 53 41 42  def SQLITE_DISAB
0e50: 4c 45 5f 4c 46 53 0a 23 20 64 65 66 69 6e 65 20  LE_LFS.# define 
0e60: 5f 4c 41 52 47 45 5f 46 49 4c 45 20 20 20 20 20  _LARGE_FILE     
0e70: 20 20 31 0a 23 20 69 66 6e 64 65 66 20 5f 46 49    1.# ifndef _FI
0e80: 4c 45 5f 4f 46 46 53 45 54 5f 42 49 54 53 0a 23  LE_OFFSET_BITS.#
0e90: 20 20 20 64 65 66 69 6e 65 20 5f 46 49 4c 45 5f     define _FILE_
0ea0: 4f 46 46 53 45 54 5f 42 49 54 53 20 36 34 0a 23  OFFSET_BITS 64.#
0eb0: 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20   endif.# define 
0ec0: 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55 52 43  _LARGEFILE_SOURC
0ed0: 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 54  E 1.#endif../* T
0ee0: 68 65 20 47 43 43 5f 56 45 52 53 49 4f 4e 2c 20  he GCC_VERSION, 
0ef0: 43 4c 41 4e 47 5f 56 45 52 53 49 4f 4e 2c 20 61  CLANG_VERSION, a
0f00: 6e 64 20 4d 53 56 43 5f 56 45 52 53 49 4f 4e 20  nd MSVC_VERSION 
0f10: 6d 61 63 72 6f 73 20 61 72 65 20 75 73 65 64 20  macros are used 
0f20: 74 6f 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 61  to.** conditiona
0f30: 6c 6c 79 20 69 6e 63 6c 75 64 65 20 6f 70 74 69  lly include opti
0f40: 6d 69 7a 61 74 69 6f 6e 73 20 66 6f 72 20 65 61  mizations for ea
0f50: 63 68 20 6f 66 20 74 68 65 73 65 20 63 6f 6d 70  ch of these comp
0f60: 69 6c 65 72 73 2e 20 20 41 0a 2a 2a 20 76 61 6c  ilers.  A.** val
0f70: 75 65 20 6f 66 20 30 20 6d 65 61 6e 73 20 74 68  ue of 0 means th
0f80: 61 74 20 63 6f 6d 70 69 6c 65 72 20 69 73 20 6e  at compiler is n
0f90: 6f 74 20 62 65 69 6e 67 20 75 73 65 64 2e 20 20  ot being used.  
0fa0: 54 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 44 49  The.** SQLITE_DI
0fb0: 53 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 20  SABLE_INTRINSIC 
0fc0: 6d 61 63 72 6f 20 6d 65 61 6e 73 20 64 6f 20 6e  macro means do n
0fd0: 6f 74 20 75 73 65 20 61 6e 79 20 63 6f 6d 70 69  ot use any compi
0fe0: 6c 65 72 2d 73 70 65 63 69 66 69 63 0a 2a 2a 20  ler-specific.** 
0ff0: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2c 20 61  optimizations, a
1000: 6e 64 20 68 65 6e 63 65 20 73 65 74 20 61 6c 6c  nd hence set all
1010: 20 63 6f 6d 70 69 6c 65 72 20 6d 61 63 72 6f 73   compiler macros
1020: 20 74 6f 20 30 0a 2a 2f 0a 23 69 66 20 64 65 66   to 0.*/.#if def
1030: 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 26  ined(__GNUC__) &
1040: 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
1050: 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49 4e  E_DISABLE_INTRIN
1060: 53 49 43 29 0a 23 20 64 65 66 69 6e 65 20 47 43  SIC).# define GC
1070: 43 5f 56 45 52 53 49 4f 4e 20 28 5f 5f 47 4e 55  C_VERSION (__GNU
1080: 43 5f 5f 2a 31 30 30 30 30 30 30 2b 5f 5f 47 4e  C__*1000000+__GN
1090: 55 43 5f 4d 49 4e 4f 52 5f 5f 2a 31 30 30 30 2b  UC_MINOR__*1000+
10a0: 5f 5f 47 4e 55 43 5f 50 41 54 43 48 4c 45 56 45  __GNUC_PATCHLEVE
10b0: 4c 5f 5f 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  L__).#else.# def
10c0: 69 6e 65 20 47 43 43 5f 56 45 52 53 49 4f 4e 20  ine GCC_VERSION 
10d0: 30 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66  0.#endif.#if def
10e0: 69 6e 65 64 28 5f 5f 63 6c 61 6e 67 5f 5f 29 20  ined(__clang__) 
10f0: 26 26 20 21 64 65 66 69 6e 65 64 28 5f 57 49 4e  && !defined(_WIN
1100: 33 32 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  32) && !defined(
1110: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 49  SQLITE_DISABLE_I
1120: 4e 54 52 49 4e 53 49 43 29 0a 23 20 64 65 66 69  NTRINSIC).# defi
1130: 6e 65 20 43 4c 41 4e 47 5f 56 45 52 53 49 4f 4e  ne CLANG_VERSION
1140: 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 28   \.            (
1150: 5f 5f 63 6c 61 6e 67 5f 6d 61 6a 6f 72 5f 5f 2a  __clang_major__*
1160: 31 30 30 30 30 30 30 2b 5f 5f 63 6c 61 6e 67 5f  1000000+__clang_
1170: 6d 69 6e 6f 72 5f 5f 2a 31 30 30 30 2b 5f 5f 63  minor__*1000+__c
1180: 6c 61 6e 67 5f 70 61 74 63 68 6c 65 76 65 6c 5f  lang_patchlevel_
1190: 5f 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  _).#else.# defin
11a0: 65 20 43 4c 41 4e 47 5f 56 45 52 53 49 4f 4e 20  e CLANG_VERSION 
11b0: 30 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66  0.#endif.#if def
11c0: 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29 20 26  ined(_MSC_VER) &
11d0: 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
11e0: 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49 4e  E_DISABLE_INTRIN
11f0: 53 49 43 29 0a 23 20 64 65 66 69 6e 65 20 4d 53  SIC).# define MS
1200: 56 43 5f 56 45 52 53 49 4f 4e 20 5f 4d 53 43 5f  VC_VERSION _MSC_
1210: 56 45 52 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  VER.#else.# defi
1220: 6e 65 20 4d 53 56 43 5f 56 45 52 53 49 4f 4e 20  ne MSVC_VERSION 
1230: 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4e 65 65  0.#endif../* Nee
1240: 64 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73 20  ded for various 
1250: 64 65 66 69 6e 69 74 69 6f 6e 73 2e 2e 2e 20 2a  definitions... *
1260: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  /.#if defined(__
1270: 47 4e 55 43 5f 5f 29 20 26 26 20 21 64 65 66 69  GNUC__) && !defi
1280: 6e 65 64 28 5f 47 4e 55 5f 53 4f 55 52 43 45 29  ned(_GNU_SOURCE)
1290: 0a 23 20 64 65 66 69 6e 65 20 5f 47 4e 55 5f 53  .# define _GNU_S
12a0: 4f 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 23 69  OURCE.#endif..#i
12b0: 66 20 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65 6e  f defined(__Open
12c0: 42 53 44 5f 5f 29 20 26 26 20 21 64 65 66 69 6e  BSD__) && !defin
12d0: 65 64 28 5f 42 53 44 5f 53 4f 55 52 43 45 29 0a  ed(_BSD_SOURCE).
12e0: 23 20 64 65 66 69 6e 65 20 5f 42 53 44 5f 53 4f  # define _BSD_SO
12f0: 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  URCE.#endif../*.
1300: 2a 2a 20 46 6f 72 20 4d 69 6e 47 57 2c 20 63 68  ** For MinGW, ch
1310: 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77 65  eck to see if we
1320: 20 63 61 6e 20 69 6e 63 6c 75 64 65 20 74 68 65   can include the
1330: 20 68 65 61 64 65 72 20 66 69 6c 65 20 63 6f 6e   header file con
1340: 74 61 69 6e 69 6e 67 20 69 74 73 0a 2a 2a 20 76  taining its.** v
1350: 65 72 73 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69  ersion informati
1360: 6f 6e 2c 20 61 6d 6f 6e 67 20 6f 74 68 65 72 20  on, among other 
1370: 74 68 69 6e 67 73 2e 20 20 4e 6f 72 6d 61 6c 6c  things.  Normall
1380: 79 2c 20 74 68 69 73 20 69 6e 74 65 72 6e 61 6c  y, this internal
1390: 20 4d 69 6e 47 57 0a 2a 2a 20 68 65 61 64 65 72   MinGW.** header
13a0: 20 66 69 6c 65 20 77 6f 75 6c 64 20 5b 6f 6e 6c   file would [onl
13b0: 79 5d 20 62 65 20 69 6e 63 6c 75 64 65 64 20 61  y] be included a
13c0: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 62 79 20  utomatically by 
13d0: 6f 74 68 65 72 20 4d 69 6e 47 57 20 68 65 61 64  other MinGW head
13e0: 65 72 0a 2a 2a 20 66 69 6c 65 73 3b 20 68 6f 77  er.** files; how
13f0: 65 76 65 72 2c 20 74 68 65 20 63 6f 6e 74 61 69  ever, the contai
1400: 6e 65 64 20 76 65 72 73 69 6f 6e 20 69 6e 66 6f  ned version info
1410: 72 6d 61 74 69 6f 6e 20 69 73 20 6e 6f 77 20 72  rmation is now r
1420: 65 71 75 69 72 65 64 20 62 79 20 74 68 69 73 0a  equired by this.
1430: 2a 2a 20 68 65 61 64 65 72 20 66 69 6c 65 20 74  ** header file t
1440: 6f 20 77 6f 72 6b 20 61 72 6f 75 6e 64 20 62 69  o work around bi
1450: 6e 61 72 79 20 63 6f 6d 70 61 74 69 62 69 6c 69  nary compatibili
1460: 74 79 20 69 73 73 75 65 73 20 28 73 65 65 20 62  ty issues (see b
1470: 65 6c 6f 77 29 20 61 6e 64 0a 2a 2a 20 74 68 69  elow) and.** thi
1480: 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 6b 6e  s is the only kn
1490: 6f 77 6e 20 77 61 79 20 74 6f 20 72 65 6c 69 61  own way to relia
14a0: 62 6c 79 20 6f 62 74 61 69 6e 20 69 74 2e 20 20  bly obtain it.  
14b0: 54 68 69 73 20 65 6e 74 69 72 65 20 23 69 66 20  This entire #if 
14c0: 62 6c 6f 63 6b 0a 2a 2a 20 77 6f 75 6c 64 20 62  block.** would b
14d0: 65 20 63 6f 6d 70 6c 65 74 65 6c 79 20 75 6e 6e  e completely unn
14e0: 65 63 65 73 73 61 72 79 20 69 66 20 74 68 65 72  ecessary if ther
14f0: 65 20 77 61 73 20 61 6e 79 20 6f 74 68 65 72 20  e was any other 
1500: 77 61 79 20 6f 66 20 64 65 74 65 63 74 69 6e 67  way of detecting
1510: 0a 2a 2a 20 4d 69 6e 47 57 20 76 69 61 20 74 68  .** MinGW via th
1520: 65 69 72 20 70 72 65 70 72 6f 63 65 73 73 6f 72  eir preprocessor
1530: 20 28 65 2e 67 2e 20 69 66 20 74 68 65 79 20 63   (e.g. if they c
1540: 75 73 74 6f 6d 69 7a 65 64 20 74 68 65 69 72 20  ustomized their 
1550: 47 43 43 20 74 6f 20 64 65 66 69 6e 65 0a 2a 2a  GCC to define.**
1560: 20 73 6f 6d 65 20 4d 69 6e 47 57 2d 73 70 65 63   some MinGW-spec
1570: 69 66 69 63 20 6d 61 63 72 6f 73 29 2e 20 20 57  ific macros).  W
1580: 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 66 6f  hen compiling fo
1590: 72 20 4d 69 6e 47 57 2c 20 65 69 74 68 65 72 20  r MinGW, either 
15a0: 74 68 65 0a 2a 2a 20 5f 48 41 56 45 5f 4d 49 4e  the.** _HAVE_MIN
15b0: 47 57 5f 48 20 6f 72 20 5f 48 41 56 45 5f 5f 4d  GW_H or _HAVE__M
15c0: 49 4e 47 57 5f 48 20 28 6e 6f 74 65 20 74 68 65  INGW_H (note the
15d0: 20 65 78 74 72 61 20 75 6e 64 65 72 73 63 6f 72   extra underscor
15e0: 65 29 20 6d 61 63 72 6f 20 6d 75 73 74 20 62 65  e) macro must be
15f0: 0a 2a 2a 20 64 65 66 69 6e 65 64 3b 20 6f 74 68  .** defined; oth
1600: 65 72 77 69 73 65 2c 20 64 65 74 65 63 74 69 6f  erwise, detectio
1610: 6e 20 6f 66 20 63 6f 6e 64 69 74 69 6f 6e 73 20  n of conditions 
1620: 73 70 65 63 69 66 69 63 20 74 6f 20 4d 69 6e 47  specific to MinG
1630: 57 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 64 69 73  W will be.** dis
1640: 61 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 20 64 65  abled..*/.#if de
1650: 66 69 6e 65 64 28 5f 48 41 56 45 5f 4d 49 4e 47  fined(_HAVE_MING
1660: 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64 65 20 22  W_H).# include "
1670: 6d 69 6e 67 77 2e 68 22 0a 23 65 6c 69 66 20 64  mingw.h".#elif d
1680: 65 66 69 6e 65 64 28 5f 48 41 56 45 5f 5f 4d 49  efined(_HAVE__MI
1690: 4e 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64 65  NGW_H).# include
16a0: 20 22 5f 6d 69 6e 67 77 2e 68 22 0a 23 65 6e 64   "_mingw.h".#end
16b0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d 69  if../*.** For Mi
16c0: 6e 47 57 20 76 65 72 73 69 6f 6e 20 34 2e 78 20  nGW version 4.x 
16d0: 28 61 6e 64 20 68 69 67 68 65 72 29 2c 20 63 68  (and higher), ch
16e0: 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74 68  eck to see if th
16f0: 65 20 5f 55 53 45 5f 33 32 42 49 54 5f 54 49 4d  e _USE_32BIT_TIM
1700: 45 5f 54 0a 2a 2a 20 64 65 66 69 6e 65 20 69 73  E_T.** define is
1710: 20 72 65 71 75 69 72 65 64 20 74 6f 20 6d 61 69   required to mai
1720: 6e 74 61 69 6e 20 62 69 6e 61 72 79 20 63 6f 6d  ntain binary com
1730: 70 61 74 69 62 69 6c 69 74 79 20 77 69 74 68 20  patibility with 
1740: 74 68 65 20 4d 53 56 43 20 72 75 6e 74 69 6d 65  the MSVC runtime
1750: 0a 2a 2a 20 6c 69 62 72 61 72 79 20 69 6e 20 75  .** library in u
1760: 73 65 20 28 65 2e 67 2e 20 66 6f 72 20 57 69 6e  se (e.g. for Win
1770: 64 6f 77 73 20 58 50 29 2e 0a 2a 2f 0a 23 69 66  dows XP)..*/.#if
1780: 20 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f 33   !defined(_USE_3
1790: 32 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26 20  2BIT_TIME_T) && 
17a0: 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f 36 34  !defined(_USE_64
17b0: 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26 20 5c  BIT_TIME_T) && \
17c0: 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f 57 49  .    defined(_WI
17d0: 4e 33 32 29 20 26 26 20 21 64 65 66 69 6e 65 64  N32) && !defined
17e0: 28 5f 57 49 4e 36 34 29 20 26 26 20 5c 0a 20 20  (_WIN64) && \.  
17f0: 20 20 64 65 66 69 6e 65 64 28 5f 5f 4d 49 4e 47    defined(__MING
1800: 57 5f 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e 29  W_MAJOR_VERSION)
1810: 20 26 26 20 5f 5f 4d 49 4e 47 57 5f 4d 41 4a 4f   && __MINGW_MAJO
1820: 52 5f 56 45 52 53 49 4f 4e 20 3e 3d 20 34 20 26  R_VERSION >= 4 &
1830: 26 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28  & \.    defined(
1840: 5f 5f 4d 53 56 43 52 54 5f 5f 29 0a 23 20 64 65  __MSVCRT__).# de
1850: 66 69 6e 65 20 5f 55 53 45 5f 33 32 42 49 54 5f  fine _USE_32BIT_
1860: 54 49 4d 45 5f 54 0a 23 65 6e 64 69 66 0a 0a 2f  TIME_T.#endif../
1870: 2a 20 54 68 65 20 70 75 62 6c 69 63 20 53 51 4c  * The public SQL
1880: 69 74 65 20 69 6e 74 65 72 66 61 63 65 2e 20 20  ite interface.  
1890: 54 68 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45 54  The _FILE_OFFSET
18a0: 5f 42 49 54 53 20 6d 61 63 72 6f 20 6d 75 73 74  _BITS macro must
18b0: 20 61 70 70 65 61 72 0a 2a 2a 20 66 69 72 73 74   appear.** first
18c0: 20 69 6e 20 51 4e 58 2e 20 20 41 6c 73 6f 2c 20   in QNX.  Also, 
18d0: 74 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f 54  the _USE_32BIT_T
18e0: 49 4d 45 5f 54 20 6d 61 63 72 6f 20 6d 75 73 74  IME_T macro must
18f0: 20 61 70 70 65 61 72 20 66 69 72 73 74 20 66 6f   appear first fo
1900: 72 0a 2a 2a 20 4d 69 6e 47 57 2e 0a 2a 2f 0a 23  r.** MinGW..*/.#
1910: 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65 33  include "sqlite3
1920: 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75  .h"../*.** Inclu
1930: 64 65 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61  de the configura
1940: 74 69 6f 6e 20 68 65 61 64 65 72 20 6f 75 74 70  tion header outp
1950: 75 74 20 62 79 20 27 63 6f 6e 66 69 67 75 72 65  ut by 'configure
1960: 27 20 69 66 20 77 65 27 72 65 20 75 73 69 6e 67  ' if we're using
1970: 20 74 68 65 0a 2a 2a 20 61 75 74 6f 63 6f 6e 66   the.** autoconf
1980: 2d 62 61 73 65 64 20 62 75 69 6c 64 0a 2a 2f 0a  -based build.*/.
1990: 23 69 66 64 65 66 20 5f 48 41 56 45 5f 53 51 4c  #ifdef _HAVE_SQL
19a0: 49 54 45 5f 43 4f 4e 46 49 47 5f 48 0a 23 69 6e  ITE_CONFIG_H.#in
19b0: 63 6c 75 64 65 20 22 63 6f 6e 66 69 67 2e 68 22  clude "config.h"
19c0: 0a 23 65 6e 64 69 66 0a 0a 23 69 6e 63 6c 75 64  .#endif..#includ
19d0: 65 20 22 73 71 6c 69 74 65 4c 69 6d 69 74 2e 68  e "sqliteLimit.h
19e0: 22 0a 0a 2f 2a 20 44 69 73 61 62 6c 65 20 6e 75  "../* Disable nu
19f0: 69 73 61 6e 63 65 20 77 61 72 6e 69 6e 67 73 20  isance warnings 
1a00: 6f 6e 20 42 6f 72 6c 61 6e 64 20 63 6f 6d 70 69  on Borland compi
1a10: 6c 65 72 73 20 2a 2f 0a 23 69 66 20 64 65 66 69  lers */.#if defi
1a20: 6e 65 64 28 5f 5f 42 4f 52 4c 41 4e 44 43 5f 5f  ned(__BORLANDC__
1a30: 29 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d  ).#pragma warn -
1a40: 72 63 68 20 2f 2a 20 75 6e 72 65 61 63 68 61 62  rch /* unreachab
1a50: 6c 65 20 63 6f 64 65 20 2a 2f 0a 23 70 72 61 67  le code */.#prag
1a60: 6d 61 20 77 61 72 6e 20 2d 63 63 63 20 2f 2a 20  ma warn -ccc /* 
1a70: 43 6f 6e 64 69 74 69 6f 6e 20 69 73 20 61 6c 77  Condition is alw
1a80: 61 79 73 20 74 72 75 65 20 6f 72 20 66 61 6c 73  ays true or fals
1a90: 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72  e */.#pragma war
1aa0: 6e 20 2d 61 75 73 20 2f 2a 20 41 73 73 69 67 6e  n -aus /* Assign
1ab0: 65 64 20 76 61 6c 75 65 20 69 73 20 6e 65 76 65  ed value is neve
1ac0: 72 20 75 73 65 64 20 2a 2f 0a 23 70 72 61 67 6d  r used */.#pragm
1ad0: 61 20 77 61 72 6e 20 2d 63 73 75 20 2f 2a 20 43  a warn -csu /* C
1ae0: 6f 6d 70 61 72 69 6e 67 20 73 69 67 6e 65 64 20  omparing signed 
1af0: 61 6e 64 20 75 6e 73 69 67 6e 65 64 20 2a 2f 0a  and unsigned */.
1b00: 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 73 70  #pragma warn -sp
1b10: 61 20 2f 2a 20 53 75 73 70 69 63 69 6f 75 73 20  a /* Suspicious 
1b20: 70 6f 69 6e 74 65 72 20 61 72 69 74 68 6d 65 74  pointer arithmet
1b30: 69 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ic */.#endif../*
1b40: 0a 2a 2a 20 49 6e 63 6c 75 64 65 20 73 74 61 6e  .** Include stan
1b50: 64 61 72 64 20 68 65 61 64 65 72 20 66 69 6c 65  dard header file
1b60: 73 20 61 73 20 6e 65 63 65 73 73 61 72 79 0a 2a  s as necessary.*
1b70: 2f 0a 23 69 66 64 65 66 20 48 41 56 45 5f 53 54  /.#ifdef HAVE_ST
1b80: 44 49 4e 54 5f 48 0a 23 69 6e 63 6c 75 64 65 20  DINT_H.#include 
1b90: 3c 73 74 64 69 6e 74 2e 68 3e 0a 23 65 6e 64 69  <stdint.h>.#endi
1ba0: 66 0a 23 69 66 64 65 66 20 48 41 56 45 5f 49 4e  f.#ifdef HAVE_IN
1bb0: 54 54 59 50 45 53 5f 48 0a 23 69 6e 63 6c 75 64  TTYPES_H.#includ
1bc0: 65 20 3c 69 6e 74 74 79 70 65 73 2e 68 3e 0a 23  e <inttypes.h>.#
1bd0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
1be0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
1bf0: 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 63 61  s are used to ca
1c00: 73 74 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 69  st pointers to i
1c10: 6e 74 65 67 65 72 73 20 61 6e 64 0a 2a 2a 20 69  ntegers and.** i
1c20: 6e 74 65 67 65 72 73 20 74 6f 20 70 6f 69 6e 74  ntegers to point
1c30: 65 72 73 2e 20 20 54 68 65 20 77 61 79 20 79 6f  ers.  The way yo
1c40: 75 20 64 6f 20 74 68 69 73 20 76 61 72 69 65 73  u do this varies
1c50: 20 66 72 6f 6d 20 6f 6e 65 20 63 6f 6d 70 69 6c   from one compil
1c60: 65 72 0a 2a 2a 20 74 6f 20 74 68 65 20 6e 65 78  er.** to the nex
1c70: 74 2c 20 73 6f 20 77 65 20 68 61 76 65 20 64 65  t, so we have de
1c80: 76 65 6c 6f 70 65 64 20 74 68 65 20 66 6f 6c 6c  veloped the foll
1c90: 6f 77 69 6e 67 20 73 65 74 20 6f 66 20 23 69 66  owing set of #if
1ca0: 20 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a 20 74   statements.** t
1cb0: 6f 20 67 65 6e 65 72 61 74 65 20 61 70 70 72 6f  o generate appro
1cc0: 70 72 69 61 74 65 20 6d 61 63 72 6f 73 20 66 6f  priate macros fo
1cd0: 72 20 61 20 77 69 64 65 20 72 61 6e 67 65 20 6f  r a wide range o
1ce0: 66 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2a 0a  f compilers..**.
1cf0: 2a 2a 20 54 68 65 20 63 6f 72 72 65 63 74 20 22  ** The correct "
1d00: 41 4e 53 49 22 20 77 61 79 20 74 6f 20 64 6f 20  ANSI" way to do 
1d10: 74 68 69 73 20 69 73 20 74 6f 20 75 73 65 20 74  this is to use t
1d20: 68 65 20 69 6e 74 70 74 72 5f 74 20 74 79 70 65  he intptr_t type
1d30: 2e 0a 2a 2a 20 55 6e 66 6f 72 74 75 6e 61 74 65  ..** Unfortunate
1d40: 6c 79 2c 20 74 68 61 74 20 74 79 70 65 64 65 66  ly, that typedef
1d50: 20 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c   is not availabl
1d60: 65 20 6f 6e 20 61 6c 6c 20 63 6f 6d 70 69 6c 65  e on all compile
1d70: 72 73 2c 20 6f 72 0a 2a 2a 20 69 66 20 69 74 20  rs, or.** if it 
1d80: 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 20 69 74  is available, it
1d90: 20 72 65 71 75 69 72 65 73 20 61 6e 20 23 69 6e   requires an #in
1da0: 63 6c 75 64 65 20 6f 66 20 73 70 65 63 69 66 69  clude of specifi
1db0: 63 20 68 65 61 64 65 72 73 0a 2a 2a 20 74 68 61  c headers.** tha
1dc0: 74 20 76 61 72 79 20 66 72 6f 6d 20 6f 6e 65 20  t vary from one 
1dd0: 6d 61 63 68 69 6e 65 20 74 6f 20 74 68 65 20 6e  machine to the n
1de0: 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65  ext..**.** Ticke
1df0: 74 20 23 33 38 36 30 3a 20 20 54 68 65 20 6c 6c  t #3860:  The ll
1e00: 76 6d 2d 67 63 63 2d 34 2e 32 20 63 6f 6d 70 69  vm-gcc-4.2 compi
1e10: 6c 65 72 20 66 72 6f 6d 20 41 70 70 6c 65 20 63  ler from Apple c
1e20: 68 6f 6b 65 73 20 6f 6e 0a 2a 2a 20 74 68 65 20  hokes on.** the 
1e30: 28 28 76 6f 69 64 2a 29 26 28 28 63 68 61 72 2a  ((void*)&((char*
1e40: 29 30 29 5b 58 5d 29 20 63 6f 6e 73 74 72 75 63  )0)[X]) construc
1e50: 74 2e 20 20 42 75 74 20 4d 53 56 43 20 63 68 6f  t.  But MSVC cho
1e60: 6b 65 73 20 6f 6e 20 28 28 76 6f 69 64 2a 29 28  kes on ((void*)(
1e70: 58 29 29 2e 0a 2a 2a 20 53 6f 20 77 65 20 68 61  X))..** So we ha
1e80: 76 65 20 74 6f 20 64 65 66 69 6e 65 20 74 68 65  ve to define the
1e90: 20 6d 61 63 72 6f 73 20 69 6e 20 64 69 66 66 65   macros in diffe
1ea0: 72 65 6e 74 20 77 61 79 73 20 64 65 70 65 6e 64  rent ways depend
1eb0: 69 6e 67 20 6f 6e 20 74 68 65 0a 2a 2a 20 63 6f  ing on the.** co
1ec0: 6d 70 69 6c 65 72 2e 0a 2a 2f 0a 23 69 66 20 64  mpiler..*/.#if d
1ed0: 65 66 69 6e 65 64 28 5f 5f 50 54 52 44 49 46 46  efined(__PTRDIFF
1ee0: 5f 54 59 50 45 5f 5f 29 20 20 2f 2a 20 54 68 69  _TYPE__)  /* Thi
1ef0: 73 20 63 61 73 65 20 73 68 6f 75 6c 64 20 77 6f  s case should wo
1f00: 72 6b 20 66 6f 72 20 47 43 43 20 2a 2f 0a 23 20  rk for GCC */.# 
1f10: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e  define SQLITE_IN
1f20: 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76  T_TO_PTR(X)  ((v
1f30: 6f 69 64 2a 29 28 5f 5f 50 54 52 44 49 46 46 5f  oid*)(__PTRDIFF_
1f40: 54 59 50 45 5f 5f 29 28 58 29 29 0a 23 20 64 65  TYPE__)(X)).# de
1f50: 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f  fine SQLITE_PTR_
1f60: 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74  TO_INT(X)  ((int
1f70: 29 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45  )(__PTRDIFF_TYPE
1f80: 5f 5f 29 28 58 29 29 0a 23 65 6c 69 66 20 21 64  __)(X)).#elif !d
1f90: 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29  efined(__GNUC__)
1fa0: 20 20 20 20 20 20 20 2f 2a 20 57 6f 72 6b 73 20         /* Works 
1fb0: 66 6f 72 20 63 6f 6d 70 69 6c 65 72 73 20 6f 74  for compilers ot
1fc0: 68 65 72 20 74 68 61 6e 20 4c 4c 56 4d 20 2a 2f  her than LLVM */
1fd0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
1fe0: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20  _INT_TO_PTR(X)  
1ff0: 28 28 76 6f 69 64 2a 29 26 28 28 63 68 61 72 2a  ((void*)&((char*
2000: 29 30 29 5b 58 5d 29 0a 23 20 64 65 66 69 6e 65  )0)[X]).# define
2010: 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49   SQLITE_PTR_TO_I
2020: 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 28 28  NT(X)  ((int)(((
2030: 63 68 61 72 2a 29 58 29 2d 28 63 68 61 72 2a 29  char*)X)-(char*)
2040: 30 29 29 0a 23 65 6c 69 66 20 64 65 66 69 6e 65  0)).#elif define
2050: 64 28 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 29  d(HAVE_STDINT_H)
2060: 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20 63     /* Use this c
2070: 61 73 65 20 69 66 20 77 65 20 68 61 76 65 20 41  ase if we have A
2080: 4e 53 49 20 68 65 61 64 65 72 73 20 2a 2f 0a 23  NSI headers */.#
2090: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49   define SQLITE_I
20a0: 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28  NT_TO_PTR(X)  ((
20b0: 76 6f 69 64 2a 29 28 69 6e 74 70 74 72 5f 74 29  void*)(intptr_t)
20c0: 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20 53 51  (X)).# define SQ
20d0: 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28  LITE_PTR_TO_INT(
20e0: 58 29 20 20 28 28 69 6e 74 29 28 69 6e 74 70 74  X)  ((int)(intpt
20f0: 72 5f 74 29 28 58 29 29 0a 23 65 6c 73 65 20 20  r_t)(X)).#else  
2100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2110: 20 20 20 20 20 20 20 20 2f 2a 20 47 65 6e 65 72          /* Gener
2120: 61 74 65 73 20 61 20 77 61 72 6e 69 6e 67 20 2d  ates a warning -
2130: 20 62 75 74 20 69 74 20 61 6c 77 61 79 73 20 77   but it always w
2140: 6f 72 6b 73 20 2a 2f 0a 23 20 64 65 66 69 6e 65  orks */.# define
2150: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
2160: 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a 29 28  TR(X)  ((void*)(
2170: 58 29 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  X)).# define SQL
2180: 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58  ITE_PTR_TO_INT(X
2190: 29 20 20 28 28 69 6e 74 29 28 58 29 29 0a 23 65  )  ((int)(X)).#e
21a0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61  ndif../*.** A ma
21b0: 63 72 6f 20 74 6f 20 68 69 6e 74 20 74 6f 20 74  cro to hint to t
21c0: 68 65 20 63 6f 6d 70 69 6c 65 72 20 74 68 61 74  he compiler that
21d0: 20 61 20 66 75 6e 63 74 69 6f 6e 20 73 68 6f 75   a function shou
21e0: 6c 64 20 6e 6f 74 20 62 65 0a 2a 2a 20 69 6e 6c  ld not be.** inl
21f0: 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  ined..*/.#if def
2200: 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 0a 23  ined(__GNUC__).#
2210: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
2220: 4e 4f 49 4e 4c 49 4e 45 20 20 5f 5f 61 74 74 72  NOINLINE  __attr
2230: 69 62 75 74 65 5f 5f 28 28 6e 6f 69 6e 6c 69 6e  ibute__((noinlin
2240: 65 29 29 0a 23 65 6c 69 66 20 64 65 66 69 6e 65  e)).#elif define
2250: 64 28 5f 4d 53 43 5f 56 45 52 29 20 26 26 20 5f  d(_MSC_VER) && _
2260: 4d 53 43 5f 56 45 52 3e 3d 31 33 31 30 0a 23 20  MSC_VER>=1310.# 
2270: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e   define SQLITE_N
2280: 4f 49 4e 4c 49 4e 45 20 20 5f 5f 64 65 63 6c 73  OINLINE  __decls
2290: 70 65 63 28 6e 6f 69 6e 6c 69 6e 65 29 0a 23 65  pec(noinline).#e
22a0: 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 53 51  lse.#  define SQ
22b0: 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 0a 23 65  LITE_NOINLINE.#e
22c0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65  ndif../*.** Make
22d0: 20 73 75 72 65 20 74 68 61 74 20 74 68 65 20 63   sure that the c
22e0: 6f 6d 70 69 6c 65 72 20 69 6e 74 72 69 6e 73 69  ompiler intrinsi
22f0: 63 73 20 77 65 20 64 65 73 69 72 65 20 61 72 65  cs we desire are
2300: 20 65 6e 61 62 6c 65 64 20 77 68 65 6e 0a 2a 2a   enabled when.**
2310: 20 63 6f 6d 70 69 6c 69 6e 67 20 77 69 74 68 20   compiling with 
2320: 61 6e 20 61 70 70 72 6f 70 72 69 61 74 65 20 76  an appropriate v
2330: 65 72 73 69 6f 6e 20 6f 66 20 4d 53 56 43 20 75  ersion of MSVC u
2340: 6e 6c 65 73 73 20 70 72 65 76 65 6e 74 65 64 20  nless prevented 
2350: 62 79 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45  by.** the SQLITE
2360: 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49 4e 53  _DISABLE_INTRINS
2370: 49 43 20 64 65 66 69 6e 65 2e 0a 2a 2f 0a 23 69  IC define..*/.#i
2380: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
2390: 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49 4e  E_DISABLE_INTRIN
23a0: 53 49 43 29 0a 23 20 20 69 66 20 64 65 66 69 6e  SIC).#  if defin
23b0: 65 64 28 5f 4d 53 43 5f 56 45 52 29 20 26 26 20  ed(_MSC_VER) && 
23c0: 5f 4d 53 43 5f 56 45 52 3e 3d 31 34 30 30 0a 23  _MSC_VER>=1400.#
23d0: 20 20 20 20 69 66 20 21 64 65 66 69 6e 65 64 28      if !defined(
23e0: 5f 57 49 4e 33 32 5f 57 43 45 29 0a 23 20 20 20  _WIN32_WCE).#   
23f0: 20 20 20 69 6e 63 6c 75 64 65 20 3c 69 6e 74 72     include <intr
2400: 69 6e 2e 68 3e 0a 23 20 20 20 20 20 20 70 72 61  in.h>.#      pra
2410: 67 6d 61 20 69 6e 74 72 69 6e 73 69 63 28 5f 62  gma intrinsic(_b
2420: 79 74 65 73 77 61 70 5f 75 73 68 6f 72 74 29 0a  yteswap_ushort).
2430: 23 20 20 20 20 20 20 70 72 61 67 6d 61 20 69 6e  #      pragma in
2440: 74 72 69 6e 73 69 63 28 5f 62 79 74 65 73 77 61  trinsic(_byteswa
2450: 70 5f 75 6c 6f 6e 67 29 0a 23 20 20 20 20 20 20  p_ulong).#      
2460: 70 72 61 67 6d 61 20 69 6e 74 72 69 6e 73 69 63  pragma intrinsic
2470: 28 5f 62 79 74 65 73 77 61 70 5f 75 69 6e 74 36  (_byteswap_uint6
2480: 34 29 0a 23 20 20 20 20 20 20 70 72 61 67 6d 61  4).#      pragma
2490: 20 69 6e 74 72 69 6e 73 69 63 28 5f 52 65 61 64   intrinsic(_Read
24a0: 57 72 69 74 65 42 61 72 72 69 65 72 29 0a 23 20  WriteBarrier).# 
24b0: 20 20 20 65 6c 73 65 0a 23 20 20 20 20 20 20 69     else.#      i
24c0: 6e 63 6c 75 64 65 20 3c 63 6d 6e 69 6e 74 72 69  nclude <cmnintri
24d0: 6e 2e 68 3e 0a 23 20 20 20 20 65 6e 64 69 66 0a  n.h>.#    endif.
24e0: 23 20 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  #  endif.#endif.
24f0: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54  ./*.** The SQLIT
2500: 45 5f 54 48 52 45 41 44 53 41 46 45 20 6d 61 63  E_THREADSAFE mac
2510: 72 6f 20 6d 75 73 74 20 62 65 20 64 65 66 69 6e  ro must be defin
2520: 65 64 20 61 73 20 30 2c 20 31 2c 20 6f 72 20 32  ed as 0, 1, or 2
2530: 2e 0a 2a 2a 20 30 20 6d 65 61 6e 73 20 6d 75 74  ..** 0 means mut
2540: 65 78 65 73 20 61 72 65 20 70 65 72 6d 61 6e 65  exes are permane
2550: 6e 74 6c 79 20 64 69 73 61 62 6c 65 20 61 6e 64  ntly disable and
2560: 20 74 68 65 20 6c 69 62 72 61 72 79 20 69 73 20   the library is 
2570: 6e 65 76 65 72 0a 2a 2a 20 74 68 72 65 61 64 73  never.** threads
2580: 61 66 65 2e 20 20 31 20 6d 65 61 6e 73 20 74 68  afe.  1 means th
2590: 65 20 6c 69 62 72 61 72 79 20 69 73 20 73 65 72  e library is ser
25a0: 69 61 6c 69 7a 65 64 20 77 68 69 63 68 20 69 73  ialized which is
25b0: 20 74 68 65 20 68 69 67 68 65 73 74 0a 2a 2a 20   the highest.** 
25c0: 6c 65 76 65 6c 20 6f 66 20 74 68 72 65 61 64 73  level of threads
25d0: 61 66 65 74 79 2e 20 20 32 20 6d 65 61 6e 73 20  afety.  2 means 
25e0: 74 68 65 20 6c 69 62 72 61 72 79 20 69 73 20 6d  the library is m
25f0: 75 6c 74 69 74 68 72 65 61 64 65 64 20 2d 20 6d  ultithreaded - m
2600: 75 6c 74 69 70 6c 65 0a 2a 2a 20 74 68 72 65 61  ultiple.** threa
2610: 64 73 20 63 61 6e 20 75 73 65 20 53 51 4c 69 74  ds can use SQLit
2620: 65 20 61 73 20 6c 6f 6e 67 20 61 73 20 6e 6f 20  e as long as no 
2630: 74 77 6f 20 74 68 72 65 61 64 73 20 74 72 79 20  two threads try 
2640: 74 6f 20 75 73 65 20 74 68 65 20 73 61 6d 65 0a  to use the same.
2650: 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ** database conn
2660: 65 63 74 69 6f 6e 20 61 74 20 74 68 65 20 73 61  ection at the sa
2670: 6d 65 20 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f  me time..**.** O
2680: 6c 64 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66  lder versions of
2690: 20 53 51 4c 69 74 65 20 75 73 65 64 20 61 6e 20   SQLite used an 
26a0: 6f 70 74 69 6f 6e 61 6c 20 54 48 52 45 41 44 53  optional THREADS
26b0: 41 46 45 20 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65  AFE macro..** We
26c0: 20 73 75 70 70 6f 72 74 20 74 68 61 74 20 66 6f   support that fo
26d0: 72 20 6c 65 67 61 63 79 2e 0a 2a 2f 0a 23 69 66  r legacy..*/.#if
26e0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
26f0: 5f 54 48 52 45 41 44 53 41 46 45 29 0a 23 20 69  _THREADSAFE).# i
2700: 66 20 64 65 66 69 6e 65 64 28 54 48 52 45 41 44  f defined(THREAD
2710: 53 41 46 45 29 0a 23 20 20 20 64 65 66 69 6e 65  SAFE).#   define
2720: 20 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41   SQLITE_THREADSA
2730: 46 45 20 54 48 52 45 41 44 53 41 46 45 0a 23 20  FE THREADSAFE.# 
2740: 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20  else.#   define 
2750: 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46  SQLITE_THREADSAF
2760: 45 20 31 20 2f 2a 20 49 4d 50 3a 20 52 2d 30 37  E 1 /* IMP: R-07
2770: 32 37 32 2d 32 32 33 30 39 20 2a 2f 0a 23 20 65  272-22309 */.# e
2780: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ndif.#endif../*.
2790: 2a 2a 20 50 6f 77 65 72 73 61 66 65 20 6f 76 65  ** Powersafe ove
27a0: 72 77 72 69 74 65 20 69 73 20 6f 6e 20 62 79 20  rwrite is on by 
27b0: 64 65 66 61 75 6c 74 2e 20 20 42 75 74 20 63 61  default.  But ca
27c0: 6e 20 62 65 20 74 75 72 6e 65 64 20 6f 66 66 20  n be turned off 
27d0: 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20 2d 44 53  using.** the -DS
27e0: 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45 5f  QLITE_POWERSAFE_
27f0: 4f 56 45 52 57 52 49 54 45 3d 30 20 63 6f 6d 6d  OVERWRITE=0 comm
2800: 61 6e 64 2d 6c 69 6e 65 20 6f 70 74 69 6f 6e 2e  and-line option.
2810: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
2820: 54 45 5f 50 4f 57 45 52 53 41 46 45 5f 4f 56 45  TE_POWERSAFE_OVE
2830: 52 57 52 49 54 45 0a 23 20 64 65 66 69 6e 65 20  RWRITE.# define 
2840: 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46 45  SQLITE_POWERSAFE
2850: 5f 4f 56 45 52 57 52 49 54 45 20 31 0a 23 65 6e  _OVERWRITE 1.#en
2860: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 56 49 44 45  dif../*.** EVIDE
2870: 4e 43 45 2d 4f 46 3a 20 52 2d 32 35 37 31 35 2d  NCE-OF: R-25715-
2880: 33 37 30 37 32 20 4d 65 6d 6f 72 79 20 61 6c 6c  37072 Memory all
2890: 6f 63 61 74 69 6f 6e 20 73 74 61 74 69 73 74 69  ocation statisti
28a0: 63 73 20 61 72 65 20 65 6e 61 62 6c 65 64 20 62  cs are enabled b
28b0: 79 0a 2a 2a 20 64 65 66 61 75 6c 74 20 75 6e 6c  y.** default unl
28c0: 65 73 73 20 53 51 4c 69 74 65 20 69 73 20 63 6f  ess SQLite is co
28d0: 6d 70 69 6c 65 64 20 77 69 74 68 20 53 51 4c 49  mpiled with SQLI
28e0: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d 53 54  TE_DEFAULT_MEMST
28f0: 41 54 55 53 3d 30 20 69 6e 0a 2a 2a 20 77 68 69  ATUS=0 in.** whi
2900: 63 68 20 63 61 73 65 20 6d 65 6d 6f 72 79 20 61  ch case memory a
2910: 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61 74 69 73  llocation statis
2920: 74 69 63 73 20 61 72 65 20 64 69 73 61 62 6c 65  tics are disable
2930: 64 20 62 79 20 64 65 66 61 75 6c 74 2e 0a 2a 2f  d by default..*/
2940: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
2950: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 45 4d  LITE_DEFAULT_MEM
2960: 53 54 41 54 55 53 29 0a 23 20 64 65 66 69 6e 65  STATUS).# define
2970: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
2980: 4d 45 4d 53 54 41 54 55 53 20 31 0a 23 65 6e 64  MEMSTATUS 1.#end
2990: 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 78 61 63 74 6c  if../*.** Exactl
29a0: 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c  y one of the fol
29b0: 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d 75  lowing macros mu
29c0: 73 74 20 62 65 20 64 65 66 69 6e 65 64 20 69 6e  st be defined in
29d0: 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 73 70 65   order to.** spe
29e0: 63 69 66 79 20 77 68 69 63 68 20 6d 65 6d 6f 72  cify which memor
29f0: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 75 62  y allocation sub
2a00: 73 79 73 74 65 6d 20 74 6f 20 75 73 65 2e 0a 2a  system to use..*
2a10: 2a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f  *.**     SQLITE_
2a20: 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 20 20 20  SYSTEM_MALLOC   
2a30: 20 20 20 20 20 20 20 2f 2f 20 55 73 65 20 6e 6f         // Use no
2a40: 72 6d 61 6c 20 73 79 73 74 65 6d 20 6d 61 6c 6c  rmal system mall
2a50: 6f 63 28 29 0a 2a 2a 20 20 20 20 20 53 51 4c 49  oc().**     SQLI
2a60: 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 20  TE_WIN32_MALLOC 
2a70: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55 73 65            // Use
2a80: 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20 68 65   Win32 native he
2a90: 61 70 20 41 50 49 0a 2a 2a 20 20 20 20 20 53 51  ap API.**     SQ
2aa0: 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43  LITE_ZERO_MALLOC
2ab0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55              // U
2ac0: 73 65 20 61 20 73 74 75 62 20 61 6c 6c 6f 63 61  se a stub alloca
2ad0: 74 6f 72 20 74 68 61 74 20 61 6c 77 61 79 73 20  tor that always 
2ae0: 66 61 69 6c 73 0a 2a 2a 20 20 20 20 20 53 51 4c  fails.**     SQL
2af0: 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 20 20 20  ITE_MEMDEBUG    
2b00: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 44 65             // De
2b10: 62 75 67 67 69 6e 67 20 76 65 72 73 69 6f 6e 20  bugging version 
2b20: 6f 66 20 73 79 73 74 65 6d 20 6d 61 6c 6c 6f 63  of system malloc
2b30: 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e 20 57 69 6e 64  ().**.** On Wind
2b40: 6f 77 73 2c 20 69 66 20 74 68 65 20 53 51 4c 49  ows, if the SQLI
2b50: 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 5f  TE_WIN32_MALLOC_
2b60: 56 41 4c 49 44 41 54 45 20 6d 61 63 72 6f 20 69  VALIDATE macro i
2b70: 73 20 64 65 66 69 6e 65 64 20 61 6e 64 20 74 68  s defined and th
2b80: 65 0a 2a 2a 20 61 73 73 65 72 74 28 29 20 6d 61  e.** assert() ma
2b90: 63 72 6f 20 69 73 20 65 6e 61 62 6c 65 64 2c 20  cro is enabled, 
2ba0: 65 61 63 68 20 63 61 6c 6c 20 69 6e 74 6f 20 74  each call into t
2bb0: 68 65 20 57 69 6e 33 32 20 6e 61 74 69 76 65 20  he Win32 native 
2bc0: 68 65 61 70 20 73 75 62 73 79 73 74 65 6d 0a 2a  heap subsystem.*
2bd0: 2a 20 77 69 6c 6c 20 63 61 75 73 65 20 48 65 61  * will cause Hea
2be0: 70 56 61 6c 69 64 61 74 65 20 74 6f 20 62 65 20  pValidate to be 
2bf0: 63 61 6c 6c 65 64 2e 20 20 49 66 20 68 65 61 70  called.  If heap
2c00: 20 76 61 6c 69 64 61 74 69 6f 6e 20 73 68 6f 75   validation shou
2c10: 6c 64 20 66 61 69 6c 2c 20 61 6e 0a 2a 2a 20 61  ld fail, an.** a
2c20: 73 73 65 72 74 69 6f 6e 20 77 69 6c 6c 20 62 65  ssertion will be
2c30: 20 74 72 69 67 67 65 72 65 64 2e 0a 2a 2a 0a 2a   triggered..**.*
2c40: 2a 20 49 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65  * If none of the
2c50: 20 61 62 6f 76 65 20 61 72 65 20 64 65 66 69 6e   above are defin
2c60: 65 64 2c 20 74 68 65 6e 20 73 65 74 20 53 51 4c  ed, then set SQL
2c70: 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f  ITE_SYSTEM_MALLO
2c80: 43 20 61 73 0a 2a 2a 20 74 68 65 20 64 65 66 61  C as.** the defa
2c90: 75 6c 74 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  ult..*/.#if defi
2ca0: 6e 65 64 28 53 51 4c 49 54 45 5f 53 59 53 54 45  ned(SQLITE_SYSTE
2cb0: 4d 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20  M_MALLOC) \.  + 
2cc0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 57  defined(SQLITE_W
2cd0: 49 4e 33 32 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20  IN32_MALLOC) \. 
2ce0: 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54   + defined(SQLIT
2cf0: 45 5f 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 29 20 5c  E_ZERO_MALLOC) \
2d00: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
2d10: 49 54 45 5f 4d 45 4d 44 45 42 55 47 29 3e 31 0a  ITE_MEMDEBUG)>1.
2d20: 23 20 65 72 72 6f 72 20 22 54 77 6f 20 6f 72 20  # error "Two or 
2d30: 6d 6f 72 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  more of the foll
2d40: 6f 77 69 6e 67 20 63 6f 6d 70 69 6c 65 2d 74 69  owing compile-ti
2d50: 6d 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  me configuration
2d60: 20 6f 70 74 69 6f 6e 73 5c 0a 20 61 72 65 20 64   options\. are d
2d70: 65 66 69 6e 65 64 20 62 75 74 20 61 74 20 6d 6f  efined but at mo
2d80: 73 74 20 6f 6e 65 20 69 73 20 61 6c 6c 6f 77 65  st one is allowe
2d90: 64 3a 5c 0a 20 53 51 4c 49 54 45 5f 53 59 53 54  d:\. SQLITE_SYST
2da0: 45 4d 5f 4d 41 4c 4c 4f 43 2c 20 53 51 4c 49 54  EM_MALLOC, SQLIT
2db0: 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43 2c 20  E_WIN32_MALLOC, 
2dc0: 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 2c  SQLITE_MEMDEBUG,
2dd0: 5c 0a 20 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d  \. SQLITE_ZERO_M
2de0: 41 4c 4c 4f 43 22 0a 23 65 6e 64 69 66 0a 23 69  ALLOC".#endif.#i
2df0: 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
2e00: 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20  _SYSTEM_MALLOC) 
2e10: 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51  \.  + defined(SQ
2e20: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2e30: 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64  C) \.  + defined
2e40: 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c  (SQLITE_ZERO_MAL
2e50: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
2e60: 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  ed(SQLITE_MEMDEB
2e70: 55 47 29 3d 3d 30 0a 23 20 64 65 66 69 6e 65 20  UG)==0.# define 
2e80: 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41  SQLITE_SYSTEM_MA
2e90: 4c 4c 4f 43 20 31 0a 23 65 6e 64 69 66 0a 0a 2f  LLOC 1.#endif../
2ea0: 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f 4d  *.** If SQLITE_M
2eb0: 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54  ALLOC_SOFT_LIMIT
2ec0: 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
2ed0: 65 6e 20 74 72 79 20 74 6f 20 6b 65 65 70 20 74  en try to keep t
2ee0: 68 65 0a 2a 2a 20 73 69 7a 65 73 20 6f 66 20 6d  he.** sizes of m
2ef0: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
2f00: 73 20 62 65 6c 6f 77 20 74 68 69 73 20 76 61 6c  s below this val
2f10: 75 65 20 77 68 65 72 65 20 70 6f 73 73 69 62 6c  ue where possibl
2f20: 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  e..*/.#if !defin
2f30: 65 64 28 53 51 4c 49 54 45 5f 4d 41 4c 4c 4f 43  ed(SQLITE_MALLOC
2f40: 5f 53 4f 46 54 5f 4c 49 4d 49 54 29 0a 23 20 64  _SOFT_LIMIT).# d
2f50: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 4c  efine SQLITE_MAL
2f60: 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54 20 31  LOC_SOFT_LIMIT 1
2f70: 30 32 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  024.#endif../*.*
2f80: 2a 20 57 65 20 6e 65 65 64 20 74 6f 20 64 65 66  * We need to def
2f90: 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43  ine _XOPEN_SOURC
2fa0: 45 20 61 73 20 66 6f 6c 6c 6f 77 73 20 69 6e 20  E as follows in 
2fb0: 6f 72 64 65 72 20 74 6f 20 65 6e 61 62 6c 65 0a  order to enable.
2fc0: 2a 2a 20 72 65 63 75 72 73 69 76 65 20 6d 75 74  ** recursive mut
2fd0: 65 78 65 73 20 6f 6e 20 6d 6f 73 74 20 55 6e 69  exes on most Uni
2fe0: 78 20 73 79 73 74 65 6d 73 20 61 6e 64 20 66 63  x systems and fc
2ff0: 68 6d 6f 64 28 29 20 6f 6e 20 4f 70 65 6e 42 53  hmod() on OpenBS
3000: 44 2e 0a 2a 2a 20 42 75 74 20 5f 58 4f 50 45 4e  D..** But _XOPEN
3010: 5f 53 4f 55 52 43 45 20 64 65 66 69 6e 65 20 63  _SOURCE define c
3020: 61 75 73 65 73 20 70 72 6f 62 6c 65 6d 73 20 66  auses problems f
3030: 6f 72 20 4d 61 63 20 4f 53 20 58 2c 20 73 6f 20  or Mac OS X, so 
3040: 6f 6d 69 74 0a 2a 2a 20 69 74 2e 0a 2a 2f 0a 23  omit.** it..*/.#
3050: 69 66 20 21 64 65 66 69 6e 65 64 28 5f 58 4f 50  if !defined(_XOP
3060: 45 4e 5f 53 4f 55 52 43 45 29 20 26 26 20 21 64  EN_SOURCE) && !d
3070: 65 66 69 6e 65 64 28 5f 5f 44 41 52 57 49 4e 5f  efined(__DARWIN_
3080: 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f  _) && !defined(_
3090: 5f 41 50 50 4c 45 5f 5f 29 0a 23 20 20 64 65 66  _APPLE__).#  def
30a0: 69 6e 65 20 5f 58 4f 50 45 4e 5f 53 4f 55 52 43  ine _XOPEN_SOURC
30b0: 45 20 36 30 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  E 600.#endif../*
30c0: 0a 2a 2a 20 4e 44 45 42 55 47 20 61 6e 64 20 53  .** NDEBUG and S
30d0: 51 4c 49 54 45 5f 44 45 42 55 47 20 61 72 65 20  QLITE_DEBUG are 
30e0: 6f 70 70 6f 73 69 74 65 73 2e 20 20 49 74 20 73  opposites.  It s
30f0: 68 6f 75 6c 64 20 61 6c 77 61 79 73 20 62 65 20  hould always be 
3100: 74 72 75 65 20 74 68 61 74 0a 2a 2a 20 64 65 66  true that.** def
3110: 69 6e 65 64 28 4e 44 45 42 55 47 29 3d 3d 21 64  ined(NDEBUG)==!d
3120: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
3130: 42 55 47 29 2e 20 20 49 66 20 74 68 69 73 20 69  BUG).  If this i
3140: 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20  s not currently 
3150: 74 72 75 65 2c 0a 2a 2a 20 6d 61 6b 65 20 69 74  true,.** make it
3160: 20 74 72 75 65 20 62 79 20 64 65 66 69 6e 69 6e   true by definin
3170: 67 20 6f 72 20 75 6e 64 65 66 69 6e 69 6e 67 20  g or undefining 
3180: 4e 44 45 42 55 47 2e 0a 2a 2a 0a 2a 2a 20 53 65  NDEBUG..**.** Se
3190: 74 74 69 6e 67 20 4e 44 45 42 55 47 20 6d 61 6b  tting NDEBUG mak
31a0: 65 73 20 74 68 65 20 63 6f 64 65 20 73 6d 61 6c  es the code smal
31b0: 6c 65 72 20 61 6e 64 20 66 61 73 74 65 72 20 62  ler and faster b
31c0: 79 20 64 69 73 61 62 6c 69 6e 67 20 74 68 65 0a  y disabling the.
31d0: 2a 2a 20 61 73 73 65 72 74 28 29 20 73 74 61 74  ** assert() stat
31e0: 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 63 6f  ements in the co
31f0: 64 65 2e 20 20 53 6f 20 77 65 20 77 61 6e 74 20  de.  So we want 
3200: 74 68 65 20 64 65 66 61 75 6c 74 20 61 63 74 69  the default acti
3210: 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 66 6f 72 20  on.** to be for 
3220: 4e 44 45 42 55 47 20 74 6f 20 62 65 20 73 65 74  NDEBUG to be set
3230: 20 61 6e 64 20 4e 44 45 42 55 47 20 74 6f 20 62   and NDEBUG to b
3240: 65 20 75 6e 64 65 66 69 6e 65 64 20 6f 6e 6c 79  e undefined only
3250: 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47   if SQLITE_DEBUG
3260: 0a 2a 2a 20 69 73 20 73 65 74 2e 20 20 54 68 75  .** is set.  Thu
3270: 73 20 4e 44 45 42 55 47 20 62 65 63 6f 6d 65 73  s NDEBUG becomes
3280: 20 61 6e 20 6f 70 74 2d 69 6e 20 72 61 74 68 65   an opt-in rathe
3290: 72 20 74 68 61 6e 20 61 6e 20 6f 70 74 2d 6f 75  r than an opt-ou
32a0: 74 0a 2a 2a 20 66 65 61 74 75 72 65 2e 0a 2a 2f  t.** feature..*/
32b0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44  .#if !defined(ND
32c0: 45 42 55 47 29 20 26 26 20 21 64 65 66 69 6e 65  EBUG) && !define
32d0: 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a  d(SQLITE_DEBUG).
32e0: 23 20 64 65 66 69 6e 65 20 4e 44 45 42 55 47 20  # define NDEBUG 
32f0: 31 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66  1.#endif.#if def
3300: 69 6e 65 64 28 4e 44 45 42 55 47 29 20 26 26 20  ined(NDEBUG) && 
3310: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
3320: 45 42 55 47 29 0a 23 20 75 6e 64 65 66 20 4e 44  EBUG).# undef ND
3330: 45 42 55 47 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  EBUG.#endif../*.
3340: 2a 2a 20 45 6e 61 62 6c 65 20 53 51 4c 49 54 45  ** Enable SQLITE
3350: 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f  _ENABLE_EXPLAIN_
3360: 43 4f 4d 4d 45 4e 54 53 20 69 66 20 53 51 4c 49  COMMENTS if SQLI
3370: 54 45 5f 44 45 42 55 47 20 69 73 20 74 75 72 6e  TE_DEBUG is turn
3380: 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64  ed on..*/.#if !d
3390: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
33a0: 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d  ABLE_EXPLAIN_COM
33b0: 4d 45 4e 54 53 29 20 26 26 20 64 65 66 69 6e 65  MENTS) && define
33c0: 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a  d(SQLITE_DEBUG).
33d0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
33e0: 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43  ENABLE_EXPLAIN_C
33f0: 4f 4d 4d 45 4e 54 53 20 31 0a 23 65 6e 64 69 66  OMMENTS 1.#endif
3400: 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 74 65 73 74  ../*.** The test
3410: 63 61 73 65 28 29 20 6d 61 63 72 6f 20 69 73 20  case() macro is 
3420: 75 73 65 64 20 74 6f 20 61 69 64 20 69 6e 20 63  used to aid in c
3430: 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67 2e  overage testing.
3440: 20 20 57 68 65 6e 0a 2a 2a 20 64 6f 69 6e 67 20    When.** doing 
3450: 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67  coverage testing
3460: 2c 20 74 68 65 20 63 6f 6e 64 69 74 69 6f 6e 20  , the condition 
3470: 69 6e 73 69 64 65 20 74 68 65 20 61 72 67 75 6d  inside the argum
3480: 65 6e 74 20 74 6f 0a 2a 2a 20 74 65 73 74 63 61  ent to.** testca
3490: 73 65 28 29 20 6d 75 73 74 20 62 65 20 65 76 61  se() must be eva
34a0: 6c 75 61 74 65 64 20 62 6f 74 68 20 74 72 75 65  luated both true
34b0: 20 61 6e 64 20 66 61 6c 73 65 20 69 6e 20 6f 72   and false in or
34c0: 64 65 72 20 74 6f 0a 2a 2a 20 67 65 74 20 66 75  der to.** get fu
34d0: 6c 6c 20 62 72 61 6e 63 68 20 63 6f 76 65 72 61  ll branch covera
34e0: 67 65 2e 20 20 54 68 65 20 74 65 73 74 63 61 73  ge.  The testcas
34f0: 65 28 29 20 6d 61 63 72 6f 20 69 73 20 69 6e 73  e() macro is ins
3500: 65 72 74 65 64 0a 2a 2a 20 74 6f 20 68 65 6c 70  erted.** to help
3510: 20 65 6e 73 75 72 65 20 61 64 65 71 75 61 74 65   ensure adequate
3520: 20 74 65 73 74 20 63 6f 76 65 72 61 67 65 20 69   test coverage i
3530: 6e 20 70 6c 61 63 65 73 20 77 68 65 72 65 20 73  n places where s
3540: 69 6d 70 6c 65 0a 2a 2a 20 63 6f 6e 64 69 74 69  imple.** conditi
3550: 6f 6e 2f 64 65 63 69 73 69 6f 6e 20 63 6f 76 65  on/decision cove
3560: 72 61 67 65 20 69 73 20 69 6e 61 64 65 71 75 61  rage is inadequa
3570: 74 65 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  te.  For example
3580: 2c 20 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20  , testcase().** 
3590: 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 6d  can be used to m
35a0: 61 6b 65 20 73 75 72 65 20 62 6f 75 6e 64 61 72  ake sure boundar
35b0: 79 20 76 61 6c 75 65 73 20 61 72 65 20 74 65 73  y values are tes
35c0: 74 65 64 2e 20 20 46 6f 72 0a 2a 2a 20 62 69 74  ted.  For.** bit
35d0: 6d 61 73 6b 20 74 65 73 74 73 2c 20 74 65 73 74  mask tests, test
35e0: 63 61 73 65 28 29 20 63 61 6e 20 62 65 20 75 73  case() can be us
35f0: 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  ed to make sure 
3600: 65 61 63 68 20 62 69 74 0a 2a 2a 20 69 73 20 73  each bit.** is s
3610: 69 67 6e 69 66 69 63 61 6e 74 20 61 6e 64 20 75  ignificant and u
3620: 73 65 64 20 61 74 20 6c 65 61 73 74 20 6f 6e 63  sed at least onc
3630: 65 2e 20 20 4f 6e 20 73 77 69 74 63 68 20 73 74  e.  On switch st
3640: 61 74 65 6d 65 6e 74 73 0a 2a 2a 20 77 68 65 72  atements.** wher
3650: 65 20 6d 75 6c 74 69 70 6c 65 20 63 61 73 65 73  e multiple cases
3660: 20 67 6f 20 74 6f 20 74 68 65 20 73 61 6d 65 20   go to the same 
3670: 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 2c 20 74  block of code, t
3680: 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 63 61 6e  estcase().** can
3690: 20 69 6e 73 75 72 65 20 74 68 61 74 20 61 6c 6c   insure that all
36a0: 20 63 61 73 65 73 20 61 72 65 20 65 76 61 6c 75   cases are evalu
36b0: 61 74 65 64 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 64  ated..**.*/.#ifd
36c0: 65 66 20 53 51 4c 49 54 45 5f 43 4f 56 45 52 41  ef SQLITE_COVERA
36d0: 47 45 5f 54 45 53 54 0a 20 20 76 6f 69 64 20 73  GE_TEST.  void s
36e0: 71 6c 69 74 65 33 43 6f 76 65 72 61 67 65 28 69  qlite3Coverage(i
36f0: 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20 74 65  nt);.# define te
3700: 73 74 63 61 73 65 28 58 29 20 20 69 66 28 20 58  stcase(X)  if( X
3710: 20 29 7b 20 73 71 6c 69 74 65 33 43 6f 76 65 72   ){ sqlite3Cover
3720: 61 67 65 28 5f 5f 4c 49 4e 45 5f 5f 29 3b 20 7d  age(__LINE__); }
3730: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
3740: 74 65 73 74 63 61 73 65 28 58 29 0a 23 65 6e 64  testcase(X).#end
3750: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 54 45  if../*.** The TE
3760: 53 54 4f 4e 4c 59 20 6d 61 63 72 6f 20 69 73 20  STONLY macro is 
3770: 75 73 65 64 20 74 6f 20 65 6e 63 6c 6f 73 65 20  used to enclose 
3780: 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61 72 61  variable declara
3790: 74 69 6f 6e 73 20 6f 72 0a 2a 2a 20 6f 74 68 65  tions or.** othe
37a0: 72 20 62 69 74 73 20 6f 66 20 63 6f 64 65 20 74  r bits of code t
37b0: 68 61 74 20 61 72 65 20 6e 65 65 64 65 64 20 74  hat are needed t
37c0: 6f 20 73 75 70 70 6f 72 74 20 74 68 65 20 61 72  o support the ar
37d0: 67 75 6d 65 6e 74 73 0a 2a 2a 20 77 69 74 68 69  guments.** withi
37e0: 6e 20 74 65 73 74 63 61 73 65 28 29 20 61 6e 64  n testcase() and
37f0: 20 61 73 73 65 72 74 28 29 20 6d 61 63 72 6f 73   assert() macros
3800: 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  ..*/.#if !define
3810: 64 28 4e 44 45 42 55 47 29 20 7c 7c 20 64 65 66  d(NDEBUG) || def
3820: 69 6e 65 64 28 53 51 4c 49 54 45 5f 43 4f 56 45  ined(SQLITE_COVE
3830: 52 41 47 45 5f 54 45 53 54 29 0a 23 20 64 65 66  RAGE_TEST).# def
3840: 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28 58 29 20  ine TESTONLY(X) 
3850: 20 58 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   X.#else.# defin
3860: 65 20 54 45 53 54 4f 4e 4c 59 28 58 29 0a 23 65  e TESTONLY(X).#e
3870: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65  ndif../*.** Some
3880: 74 69 6d 65 73 20 77 65 20 6e 65 65 64 20 61 20  times we need a 
3890: 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 6f 66 20  small amount of 
38a0: 63 6f 64 65 20 73 75 63 68 20 61 73 20 61 20 76  code such as a v
38b0: 61 72 69 61 62 6c 65 20 69 6e 69 74 69 61 6c 69  ariable initiali
38c0: 7a 61 74 69 6f 6e 0a 2a 2a 20 74 6f 20 73 65 74  zation.** to set
38d0: 75 70 20 66 6f 72 20 61 20 6c 61 74 65 72 20 61  up for a later a
38e0: 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
38f0: 74 2e 20 20 57 65 20 64 6f 20 6e 6f 74 20 77 61  t.  We do not wa
3900: 6e 74 20 74 68 69 73 20 63 6f 64 65 20 74 6f 0a  nt this code to.
3910: 2a 2a 20 61 70 70 65 61 72 20 77 68 65 6e 20 61  ** appear when a
3920: 73 73 65 72 74 28 29 20 69 73 20 64 69 73 61 62  ssert() is disab
3930: 6c 65 64 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77  led.  The follow
3940: 69 6e 67 20 6d 61 63 72 6f 20 69 73 20 74 68 65  ing macro is the
3950: 72 65 66 6f 72 65 0a 2a 2a 20 75 73 65 64 20 74  refore.** used t
3960: 6f 20 63 6f 6e 74 61 69 6e 20 74 68 61 74 20 73  o contain that s
3970: 65 74 75 70 20 63 6f 64 65 2e 20 20 54 68 65 20  etup code.  The 
3980: 22 56 56 41 22 20 61 63 72 6f 6e 79 6d 20 73 74  "VVA" acronym st
3990: 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 56 65 72  ands for.** "Ver
39a0: 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64  ification, Valid
39b0: 61 74 69 6f 6e 2c 20 61 6e 64 20 41 63 63 72 65  ation, and Accre
39c0: 64 69 74 61 74 69 6f 6e 22 2e 20 20 49 6e 20 6f  ditation".  In o
39d0: 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 0a  ther words, the.
39e0: 2a 2a 20 63 6f 64 65 20 77 69 74 68 69 6e 20 56  ** code within V
39f0: 56 41 5f 4f 4e 4c 59 28 29 20 77 69 6c 6c 20 6f  VA_ONLY() will o
3a00: 6e 6c 79 20 72 75 6e 20 64 75 72 69 6e 67 20 76  nly run during v
3a10: 65 72 69 66 69 63 61 74 69 6f 6e 20 70 72 6f 63  erification proc
3a20: 65 73 73 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65  esses..*/.#ifnde
3a30: 66 20 4e 44 45 42 55 47 0a 23 20 64 65 66 69 6e  f NDEBUG.# defin
3a40: 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29 20 20 58  e VVA_ONLY(X)  X
3a50: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
3a60: 56 56 41 5f 4f 4e 4c 59 28 58 29 0a 23 65 6e 64  VVA_ONLY(X).#end
3a70: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 41 4c  if../*.** The AL
3a80: 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52 20 6d  WAYS and NEVER m
3a90: 61 63 72 6f 73 20 73 75 72 72 6f 75 6e 64 20 62  acros surround b
3aa0: 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69 6f  oolean expressio
3ab0: 6e 73 20 77 68 69 63 68 0a 2a 2a 20 61 72 65 20  ns which.** are 
3ac0: 69 6e 74 65 6e 64 65 64 20 74 6f 20 61 6c 77 61  intended to alwa
3ad0: 79 73 20 62 65 20 74 72 75 65 20 6f 72 20 66 61  ys be true or fa
3ae0: 6c 73 65 2c 20 72 65 73 70 65 63 74 69 76 65 6c  lse, respectivel
3af0: 79 2e 20 20 53 75 63 68 0a 2a 2a 20 65 78 70 72  y.  Such.** expr
3b00: 65 73 73 69 6f 6e 73 20 63 6f 75 6c 64 20 62 65  essions could be
3b10: 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68   omitted from th
3b20: 65 20 63 6f 64 65 20 63 6f 6d 70 6c 65 74 65 6c  e code completel
3b30: 79 2e 20 20 42 75 74 20 74 68 65 79 0a 2a 2a 20  y.  But they.** 
3b40: 61 72 65 20 69 6e 63 6c 75 64 65 64 20 69 6e 20  are included in 
3b50: 61 20 66 65 77 20 63 61 73 65 73 20 69 6e 20 6f  a few cases in o
3b60: 72 64 65 72 20 74 6f 20 65 6e 68 61 6e 63 65 20  rder to enhance 
3b70: 74 68 65 20 72 65 73 69 6c 69 65 6e 63 65 0a 2a  the resilience.*
3b80: 2a 20 6f 66 20 53 51 4c 69 74 65 20 74 6f 20 75  * of SQLite to u
3b90: 6e 65 78 70 65 63 74 65 64 20 62 65 68 61 76 69  nexpected behavi
3ba0: 6f 72 20 2d 20 74 6f 20 6d 61 6b 65 20 74 68 65  or - to make the
3bb0: 20 63 6f 64 65 20 22 73 65 6c 66 2d 68 65 61 6c   code "self-heal
3bc0: 69 6e 67 22 0a 2a 2a 20 6f 72 20 22 64 75 63 74  ing".** or "duct
3bd0: 69 6c 65 22 20 72 61 74 68 65 72 20 74 68 61 6e  ile" rather than
3be0: 20 62 65 69 6e 67 20 22 62 72 69 74 74 6c 65 22   being "brittle"
3bf0: 20 61 6e 64 20 63 72 61 73 68 69 6e 67 20 61 74   and crashing at
3c00: 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 68 69   the first.** hi
3c10: 6e 74 20 6f 66 20 75 6e 70 6c 61 6e 6e 65 64 20  nt of unplanned 
3c20: 62 65 68 61 76 69 6f 72 2e 0a 2a 2a 0a 2a 2a 20  behavior..**.** 
3c30: 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
3c40: 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56 45 52  ALWAYS and NEVER
3c50: 20 61 72 65 20 61 64 64 65 64 20 66 6f 72 20 64   are added for d
3c60: 65 66 65 6e 73 69 76 65 20 63 6f 64 65 2e 0a 2a  efensive code..*
3c70: 2a 0a 2a 2a 20 57 68 65 6e 20 64 6f 69 6e 67 20  *.** When doing 
3c80: 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67  coverage testing
3c90: 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45 56 45   ALWAYS and NEVE
3ca0: 52 20 61 72 65 20 68 61 72 64 2d 63 6f 64 65 64  R are hard-coded
3cb0: 20 74 6f 0a 2a 2a 20 62 65 20 74 72 75 65 20 61   to.** be true a
3cc0: 6e 64 20 66 61 6c 73 65 20 73 6f 20 74 68 61 74  nd false so that
3cd0: 20 74 68 65 20 75 6e 72 65 61 63 68 61 62 6c 65   the unreachable
3ce0: 20 63 6f 64 65 20 74 68 65 79 20 73 70 65 63 69   code they speci
3cf0: 66 79 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 62  fy will.** not b
3d00: 65 20 63 6f 75 6e 74 65 64 20 61 73 20 75 6e 74  e counted as unt
3d10: 65 73 74 65 64 20 63 6f 64 65 2e 0a 2a 2f 0a 23  ested code..*/.#
3d20: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
3d30: 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54 29  E_COVERAGE_TEST)
3d40: 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
3d50: 54 45 5f 4d 55 54 41 54 49 4f 4e 5f 54 45 53 54  TE_MUTATION_TEST
3d60: 29 0a 23 20 64 65 66 69 6e 65 20 41 4c 57 41 59  ).# define ALWAY
3d70: 53 28 58 29 20 20 20 20 20 20 28 31 29 0a 23 20  S(X)      (1).# 
3d80: 64 65 66 69 6e 65 20 4e 45 56 45 52 28 58 29 20  define NEVER(X) 
3d90: 20 20 20 20 20 20 28 30 29 0a 23 65 6c 69 66 20        (0).#elif 
3da0: 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29  !defined(NDEBUG)
3db0: 0a 23 20 64 65 66 69 6e 65 20 41 4c 57 41 59 53  .# define ALWAYS
3dc0: 28 58 29 20 20 20 20 20 20 28 28 58 29 3f 31 3a  (X)      ((X)?1:
3dd0: 28 61 73 73 65 72 74 28 30 29 2c 30 29 29 0a 23  (assert(0),0)).#
3de0: 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28 58 29   define NEVER(X)
3df0: 20 20 20 20 20 20 20 28 28 58 29 3f 28 61 73 73         ((X)?(ass
3e00: 65 72 74 28 30 29 2c 31 29 3a 30 29 0a 23 65 6c  ert(0),1):0).#el
3e10: 73 65 0a 23 20 64 65 66 69 6e 65 20 41 4c 57 41  se.# define ALWA
3e20: 59 53 28 58 29 20 20 20 20 20 20 28 58 29 0a 23  YS(X)      (X).#
3e30: 20 64 65 66 69 6e 65 20 4e 45 56 45 52 28 58 29   define NEVER(X)
3e40: 20 20 20 20 20 20 20 28 58 29 0a 23 65 6e 64 69         (X).#endi
3e50: 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f 6d 65 20 6d 61  f../*.** Some ma
3e60: 6c 6c 6f 63 20 66 61 69 6c 75 72 65 73 20 61 72  lloc failures ar
3e70: 65 20 6f 6e 6c 79 20 70 6f 73 73 69 62 6c 65 20  e only possible 
3e80: 69 66 20 53 51 4c 49 54 45 5f 54 45 53 54 5f 52  if SQLITE_TEST_R
3e90: 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53 20 69 73  EALLOC_STRESS is
3ea0: 0a 2a 2a 20 64 65 66 69 6e 65 64 2e 20 20 57 65  .** defined.  We
3eb0: 20 6e 65 65 64 20 74 6f 20 64 65 66 65 6e 64 20   need to defend 
3ec0: 61 67 61 69 6e 73 74 20 74 68 6f 73 65 20 66 61  against those fa
3ed0: 69 6c 75 72 65 73 20 77 68 65 6e 20 74 65 73 74  ilures when test
3ee0: 69 6e 67 20 77 69 74 68 0a 2a 2a 20 53 51 4c 49  ing with.** SQLI
3ef0: 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c 4f 43 5f  TE_TEST_REALLOC_
3f00: 53 54 52 45 53 53 2c 20 62 75 74 20 77 65 20 64  STRESS, but we d
3f10: 6f 6e 27 74 20 77 61 6e 74 20 74 68 65 20 75 6e  on't want the un
3f20: 72 65 61 63 68 61 62 6c 65 20 62 72 61 6e 63 68  reachable branch
3f30: 65 73 0a 2a 2a 20 64 75 72 69 6e 67 20 61 20 6e  es.** during a n
3f40: 6f 72 6d 61 6c 20 62 75 69 6c 64 2e 20 20 54 68  ormal build.  Th
3f50: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
3f60: 6f 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f  o can be used to
3f70: 20 64 69 73 61 62 6c 65 20 74 65 73 74 73 0a 2a   disable tests.*
3f80: 2a 20 74 68 61 74 20 61 72 65 20 61 6c 77 61 79  * that are alway
3f90: 73 20 66 61 6c 73 65 20 65 78 63 65 70 74 20 77  s false except w
3fa0: 68 65 6e 20 53 51 4c 49 54 45 5f 54 45 53 54 5f  hen SQLITE_TEST_
3fb0: 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53 20 69  REALLOC_STRESS i
3fc0: 73 20 73 65 74 2e 0a 2a 2f 0a 23 69 66 20 64 65  s set..*/.#if de
3fd0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53  fined(SQLITE_TES
3fe0: 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53  T_REALLOC_STRESS
3ff0: 29 0a 23 20 64 65 66 69 6e 65 20 4f 4e 4c 59 5f  ).# define ONLY_
4000: 49 46 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53  IF_REALLOC_STRES
4010: 53 28 58 29 20 20 28 58 29 0a 23 65 6c 69 66 20  S(X)  (X).#elif 
4020: 21 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29  !defined(NDEBUG)
4030: 0a 23 20 64 65 66 69 6e 65 20 4f 4e 4c 59 5f 49  .# define ONLY_I
4040: 46 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53  F_REALLOC_STRESS
4050: 28 58 29 20 20 28 28 58 29 3f 28 61 73 73 65 72  (X)  ((X)?(asser
4060: 74 28 30 29 2c 31 29 3a 30 29 0a 23 65 6c 73 65  t(0),1):0).#else
4070: 0a 23 20 64 65 66 69 6e 65 20 4f 4e 4c 59 5f 49  .# define ONLY_I
4080: 46 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45 53 53  F_REALLOC_STRESS
4090: 28 58 29 20 20 28 30 29 0a 23 65 6e 64 69 66 0a  (X)  (0).#endif.
40a0: 0a 2f 2a 0a 2a 2a 20 44 65 63 6c 61 72 61 74 69  ./*.** Declarati
40b0: 6f 6e 73 20 75 73 65 64 20 66 6f 72 20 74 72 61  ons used for tra
40c0: 63 69 6e 67 20 74 68 65 20 6f 70 65 72 61 74 69  cing the operati
40d0: 6e 67 20 73 79 73 74 65 6d 20 69 6e 74 65 72 66  ng system interf
40e0: 61 63 65 73 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  aces..*/.#if def
40f0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 46 4f 52 43  ined(SQLITE_FORC
4100: 45 5f 4f 53 5f 54 52 41 43 45 29 20 7c 7c 20 64  E_OS_TRACE) || d
4110: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45  efined(SQLITE_TE
4120: 53 54 29 20 7c 7c 20 5c 0a 20 20 20 20 28 64 65  ST) || \.    (de
4130: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
4140: 55 47 29 20 26 26 20 53 51 4c 49 54 45 5f 4f 53  UG) && SQLITE_OS
4150: 5f 57 49 4e 29 0a 20 20 65 78 74 65 72 6e 20 69  _WIN).  extern i
4160: 6e 74 20 73 71 6c 69 74 65 33 4f 53 54 72 61 63  nt sqlite3OSTrac
4170: 65 3b 0a 23 20 64 65 66 69 6e 65 20 4f 53 54 52  e;.# define OSTR
4180: 41 43 45 28 58 29 20 20 20 20 20 20 20 20 20 20  ACE(X)          
4190: 69 66 28 20 73 71 6c 69 74 65 33 4f 53 54 72 61  if( sqlite3OSTra
41a0: 63 65 20 29 20 73 71 6c 69 74 65 33 44 65 62 75  ce ) sqlite3Debu
41b0: 67 50 72 69 6e 74 66 20 58 0a 23 20 64 65 66 69  gPrintf X.# defi
41c0: 6e 65 20 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f  ne SQLITE_HAVE_O
41d0: 53 5f 54 52 41 43 45 0a 23 65 6c 73 65 0a 23 20  S_TRACE.#else.# 
41e0: 64 65 66 69 6e 65 20 4f 53 54 52 41 43 45 28 58  define OSTRACE(X
41f0: 29 0a 23 20 75 6e 64 65 66 20 20 53 51 4c 49 54  ).# undef  SQLIT
4200: 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41 43 45 0a  E_HAVE_OS_TRACE.
4210: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 73  #endif../*.** Is
4220: 20 74 68 65 20 73 71 6c 69 74 65 33 45 72 72 4e   the sqlite3ErrN
4230: 61 6d 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 6e  ame() function n
4240: 65 65 64 65 64 20 69 6e 20 74 68 65 20 62 75 69  eeded in the bui
4250: 6c 64 3f 20 20 43 75 72 72 65 6e 74 6c 79 2c 0a  ld?  Currently,.
4260: 2a 2a 20 69 74 20 69 73 20 6e 65 65 64 65 64 20  ** it is needed 
4270: 62 79 20 22 6d 75 74 65 78 5f 77 33 32 2e 63 22  by "mutex_w32.c"
4280: 20 28 77 68 65 6e 20 64 65 62 75 67 67 69 6e 67   (when debugging
4290: 29 2c 20 22 6f 73 5f 77 69 6e 2e 63 22 20 28 77  ), "os_win.c" (w
42a0: 68 65 6e 0a 2a 2a 20 4f 53 54 52 41 43 45 20 69  hen.** OSTRACE i
42b0: 73 20 65 6e 61 62 6c 65 64 29 2c 20 61 6e 64 20  s enabled), and 
42c0: 62 79 20 73 65 76 65 72 61 6c 20 22 74 65 73 74  by several "test
42d0: 2a 2e 63 22 20 66 69 6c 65 73 20 28 77 68 69 63  *.c" files (whic
42e0: 68 20 61 72 65 0a 2a 2a 20 63 6f 6d 70 69 6c 65  h are.** compile
42f0: 64 20 75 73 69 6e 67 20 53 51 4c 49 54 45 5f 54  d using SQLITE_T
4300: 45 53 54 29 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  EST)..*/.#if def
4310: 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41 56 45  ined(SQLITE_HAVE
4320: 5f 4f 53 5f 54 52 41 43 45 29 20 7c 7c 20 64 65  _OS_TRACE) || de
4330: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53  fined(SQLITE_TES
4340: 54 29 20 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66  T) || \.    (def
4350: 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55  ined(SQLITE_DEBU
4360: 47 29 20 26 26 20 53 51 4c 49 54 45 5f 4f 53 5f  G) && SQLITE_OS_
4370: 57 49 4e 29 0a 23 20 64 65 66 69 6e 65 20 53 51  WIN).# define SQ
4380: 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41  LITE_NEED_ERR_NA
4390: 4d 45 0a 23 65 6c 73 65 0a 23 20 75 6e 64 65 66  ME.#else.# undef
43a0: 20 20 53 51 4c 49 54 45 5f 4e 45 45 44 5f 45 52    SQLITE_NEED_ER
43b0: 52 5f 4e 41 4d 45 0a 23 65 6e 64 69 66 0a 0a 2f  R_NAME.#endif../
43c0: 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42  *.** SQLITE_ENAB
43d0: 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45  LE_EXPLAIN_COMME
43e0: 4e 54 53 20 69 73 20 69 6e 63 6f 6d 70 61 74 69  NTS is incompati
43f0: 62 6c 65 20 77 69 74 68 20 53 51 4c 49 54 45 5f  ble with SQLITE_
4400: 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 2a 2f 0a  OMIT_EXPLAIN.*/.
4410: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
4420: 49 54 5f 45 58 50 4c 41 49 4e 0a 23 20 75 6e 64  IT_EXPLAIN.# und
4430: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
4440: 5f 45 58 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54  _EXPLAIN_COMMENT
4450: 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  S.#endif../*.** 
4460: 52 65 74 75 72 6e 20 74 72 75 65 20 28 6e 6f 6e  Return true (non
4470: 2d 7a 65 72 6f 29 20 69 66 20 74 68 65 20 69 6e  -zero) if the in
4480: 70 75 74 20 69 73 20 61 6e 20 69 6e 74 65 67 65  put is an intege
4490: 72 20 74 68 61 74 20 69 73 20 74 6f 6f 20 6c 61  r that is too la
44a0: 72 67 65 0a 2a 2a 20 74 6f 20 66 69 74 20 69 6e  rge.** to fit in
44b0: 20 33 32 2d 62 69 74 73 2e 20 20 54 68 69 73 20   32-bits.  This 
44c0: 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e  macro is used in
44d0: 73 69 64 65 20 6f 66 20 76 61 72 69 6f 75 73 20  side of various 
44e0: 74 65 73 74 63 61 73 65 28 29 0a 2a 2a 20 6d 61  testcase().** ma
44f0: 63 72 6f 73 20 74 6f 20 76 65 72 69 66 79 20 74  cros to verify t
4500: 68 61 74 20 77 65 20 68 61 76 65 20 74 65 73 74  hat we have test
4510: 65 64 20 53 51 4c 69 74 65 20 66 6f 72 20 6c 61  ed SQLite for la
4520: 72 67 65 2d 66 69 6c 65 20 73 75 70 70 6f 72 74  rge-file support
4530: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 53 5f  ..*/.#define IS_
4540: 42 49 47 5f 49 4e 54 28 58 29 20 20 28 28 28 58  BIG_INT(X)  (((X
4550: 29 26 7e 28 69 36 34 29 30 78 66 66 66 66 66 66  )&~(i64)0xffffff
4560: 66 66 29 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54  ff)!=0)../*.** T
4570: 68 65 20 6d 61 63 72 6f 20 75 6e 6c 69 6b 65 6c  he macro unlikel
4580: 79 28 29 20 69 73 20 61 20 68 69 6e 74 20 74 68  y() is a hint th
4590: 61 74 20 73 75 72 72 6f 75 6e 64 73 20 61 20 62  at surrounds a b
45a0: 6f 6f 6c 65 61 6e 0a 2a 2a 20 65 78 70 72 65 73  oolean.** expres
45b0: 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75  sion that is usu
45c0: 61 6c 6c 79 20 66 61 6c 73 65 2e 20 20 4d 61 63  ally false.  Mac
45d0: 72 6f 20 6c 69 6b 65 6c 79 28 29 20 73 75 72 72  ro likely() surr
45e0: 6f 75 6e 64 73 0a 2a 2a 20 61 20 62 6f 6f 6c 65  ounds.** a boole
45f0: 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68  an expression th
4600: 61 74 20 69 73 20 75 73 75 61 6c 6c 79 20 74 72  at is usually tr
4610: 75 65 2e 20 20 54 68 65 73 65 20 68 69 6e 74 73  ue.  These hints
4620: 20 63 6f 75 6c 64 2c 0a 2a 2a 20 69 6e 20 74 68   could,.** in th
4630: 65 6f 72 79 2c 20 62 65 20 75 73 65 64 20 62 79  eory, be used by
4640: 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 74 6f   the compiler to
4650: 20 67 65 6e 65 72 61 74 65 20 62 65 74 74 65 72   generate better
4660: 20 63 6f 64 65 2c 20 62 75 74 0a 2a 2a 20 63 75   code, but.** cu
4670: 72 72 65 6e 74 6c 79 20 74 68 65 79 20 61 72 65  rrently they are
4680: 20 6a 75 73 74 20 63 6f 6d 6d 65 6e 74 73 20 66   just comments f
4690: 6f 72 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73  or human readers
46a0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 6c 69 6b  ..*/.#define lik
46b0: 65 6c 79 28 58 29 20 20 20 20 28 58 29 0a 23 64  ely(X)    (X).#d
46c0: 65 66 69 6e 65 20 75 6e 6c 69 6b 65 6c 79 28 58  efine unlikely(X
46d0: 29 20 20 28 58 29 0a 0a 23 69 6e 63 6c 75 64 65  )  (X)..#include
46e0: 20 22 68 61 73 68 2e 68 22 0a 23 69 6e 63 6c 75   "hash.h".#inclu
46f0: 64 65 20 22 70 61 72 73 65 2e 68 22 0a 23 69 6e  de "parse.h".#in
4700: 63 6c 75 64 65 20 3c 73 74 64 69 6f 2e 68 3e 0a  clude <stdio.h>.
4710: 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 6c 69 62  #include <stdlib
4720: 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74  .h>.#include <st
4730: 72 69 6e 67 2e 68 3e 0a 23 69 6e 63 6c 75 64 65  ring.h>.#include
4740: 20 3c 61 73 73 65 72 74 2e 68 3e 0a 23 69 6e 63   <assert.h>.#inc
4750: 6c 75 64 65 20 3c 73 74 64 64 65 66 2e 68 3e 0a  lude <stddef.h>.
4760: 0a 2f 2a 0a 2a 2a 20 55 73 65 20 61 20 6d 61 63  ./*.** Use a mac
4770: 72 6f 20 74 6f 20 72 65 70 6c 61 63 65 20 6d 65  ro to replace me
4780: 6d 63 70 79 28 29 20 69 66 20 63 6f 6d 70 69 6c  mcpy() if compil
4790: 65 64 20 77 69 74 68 20 53 51 4c 49 54 45 5f 49  ed with SQLITE_I
47a0: 4e 4c 49 4e 45 5f 4d 45 4d 43 50 59 2e 0a 2a 2a  NLINE_MEMCPY..**
47b0: 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 62 65 74   This allows bet
47c0: 74 65 72 20 6d 65 61 73 75 72 65 6d 65 6e 74 73  ter measurements
47d0: 20 6f 66 20 77 68 65 72 65 20 6d 65 6d 63 70 79   of where memcpy
47e0: 28 29 20 69 73 20 75 73 65 64 20 77 68 65 6e 20  () is used when 
47f0: 72 75 6e 6e 69 6e 67 0a 2a 2a 20 63 61 63 68 65  running.** cache
4800: 67 72 69 6e 64 2e 20 20 42 75 74 20 74 68 69 73  grind.  But this
4810: 20 6d 61 63 72 6f 20 76 65 72 73 69 6f 6e 20 6f   macro version o
4820: 66 20 6d 65 6d 63 70 79 28 29 20 69 73 20 76 65  f memcpy() is ve
4830: 72 79 20 73 6c 6f 77 20 73 6f 20 69 74 0a 2a 2a  ry slow so it.**
4840: 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 20 75   should not be u
4850: 73 65 64 20 69 6e 20 70 72 6f 64 75 63 74 69 6f  sed in productio
4860: 6e 2e 20 20 54 68 69 73 20 69 73 20 61 20 70 65  n.  This is a pe
4870: 72 66 6f 72 6d 61 6e 63 65 20 6d 65 61 73 75 72  rformance measur
4880: 65 6d 65 6e 74 0a 2a 2a 20 68 61 63 6b 20 6f 6e  ement.** hack on
4890: 6c 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ly..*/.#ifdef SQ
48a0: 4c 49 54 45 5f 49 4e 4c 49 4e 45 5f 4d 45 4d 43  LITE_INLINE_MEMC
48b0: 50 59 0a 23 20 64 65 66 69 6e 65 20 6d 65 6d 63  PY.# define memc
48c0: 70 79 28 44 2c 53 2c 4e 29 20 7b 63 68 61 72 2a  py(D,S,N) {char*
48d0: 78 78 64 3d 28 63 68 61 72 2a 29 28 44 29 3b 63  xxd=(char*)(D);c
48e0: 6f 6e 73 74 20 63 68 61 72 2a 78 78 73 3d 28 63  onst char*xxs=(c
48f0: 6f 6e 73 74 20 63 68 61 72 2a 29 28 53 29 3b 5c  onst char*)(S);\
4900: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4910: 20 20 20 20 20 20 20 20 20 69 6e 74 20 78 78 6e           int xxn
4920: 3d 28 4e 29 3b 77 68 69 6c 65 28 78 78 6e 2d 2d  =(N);while(xxn--
4930: 3e 30 29 2a 28 78 78 64 2b 2b 29 3d 2a 28 78 78  >0)*(xxd++)=*(xx
4940: 73 2b 2b 29 3b 7d 0a 23 65 6e 64 69 66 0a 0a 2f  s++);}.#endif../
4950: 2a 0a 2a 2a 20 49 66 20 63 6f 6d 70 69 6c 69 6e  *.** If compilin
4960: 67 20 66 6f 72 20 61 20 70 72 6f 63 65 73 73 6f  g for a processo
4970: 72 20 74 68 61 74 20 6c 61 63 6b 73 20 66 6c 6f  r that lacks flo
4980: 61 74 69 6e 67 20 70 6f 69 6e 74 20 73 75 70 70  ating point supp
4990: 6f 72 74 2c 0a 2a 2a 20 73 75 62 73 74 69 74 75  ort,.** substitu
49a0: 74 65 20 69 6e 74 65 67 65 72 20 66 6f 72 20 66  te integer for f
49b0: 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 0a 2a 2f  loating-point.*/
49c0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
49d0: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
49e0: 4e 54 0a 23 20 64 65 66 69 6e 65 20 64 6f 75 62  NT.# define doub
49f0: 6c 65 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 0a  le sqlite_int64.
4a00: 23 20 64 65 66 69 6e 65 20 66 6c 6f 61 74 20 73  # define float s
4a10: 71 6c 69 74 65 5f 69 6e 74 36 34 0a 23 20 64 65  qlite_int64.# de
4a20: 66 69 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f  fine LONGDOUBLE_
4a30: 54 59 50 45 20 73 71 6c 69 74 65 5f 69 6e 74 36  TYPE sqlite_int6
4a40: 34 0a 23 20 69 66 6e 64 65 66 20 53 51 4c 49 54  4.# ifndef SQLIT
4a50: 45 5f 42 49 47 5f 44 42 4c 0a 23 20 20 20 64 65  E_BIG_DBL.#   de
4a60: 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 5f  fine SQLITE_BIG_
4a70: 44 42 4c 20 28 28 28 73 71 6c 69 74 65 33 5f 69  DBL (((sqlite3_i
4a80: 6e 74 36 34 29 31 29 3c 3c 35 30 29 0a 23 20 65  nt64)1)<<50).# e
4a90: 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20 53 51  ndif.# define SQ
4aa0: 4c 49 54 45 5f 4f 4d 49 54 5f 44 41 54 45 54 49  LITE_OMIT_DATETI
4ab0: 4d 45 5f 46 55 4e 43 53 20 31 0a 23 20 64 65 66  ME_FUNCS 1.# def
4ac0: 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ine SQLITE_OMIT_
4ad0: 54 52 41 43 45 20 31 0a 23 20 75 6e 64 65 66 20  TRACE 1.# undef 
4ae0: 53 51 4c 49 54 45 5f 4d 49 58 45 44 5f 45 4e 44  SQLITE_MIXED_END
4af0: 49 41 4e 5f 36 34 42 49 54 5f 46 4c 4f 41 54 0a  IAN_64BIT_FLOAT.
4b00: 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 48  # undef SQLITE_H
4b10: 41 56 45 5f 49 53 4e 41 4e 0a 23 65 6e 64 69 66  AVE_ISNAN.#endif
4b20: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
4b30: 42 49 47 5f 44 42 4c 0a 23 20 64 65 66 69 6e 65  BIG_DBL.# define
4b40: 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 20   SQLITE_BIG_DBL 
4b50: 28 31 65 39 39 29 0a 23 65 6e 64 69 66 0a 0a 2f  (1e99).#endif../
4b60: 2a 0a 2a 2a 20 4f 4d 49 54 5f 54 45 4d 50 44 42  *.** OMIT_TEMPDB
4b70: 20 69 73 20 73 65 74 20 74 6f 20 31 20 69 66 20   is set to 1 if 
4b80: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50  SQLITE_OMIT_TEMP
4b90: 44 42 20 69 73 20 64 65 66 69 6e 65 64 2c 20 6f  DB is defined, o
4ba0: 72 20 30 0a 2a 2a 20 61 66 74 65 72 77 61 72 64  r 0.** afterward
4bb0: 2e 20 48 61 76 69 6e 67 20 74 68 69 73 20 6d 61  . Having this ma
4bc0: 63 72 6f 20 61 6c 6c 6f 77 73 20 75 73 20 74 6f  cro allows us to
4bd0: 20 63 61 75 73 65 20 74 68 65 20 43 20 63 6f 6d   cause the C com
4be0: 70 69 6c 65 72 0a 2a 2a 20 74 6f 20 6f 6d 69 74  piler.** to omit
4bf0: 20 63 6f 64 65 20 75 73 65 64 20 62 79 20 54 45   code used by TE
4c00: 4d 50 20 74 61 62 6c 65 73 20 77 69 74 68 6f 75  MP tables withou
4c10: 74 20 6d 65 73 73 79 20 23 69 66 6e 64 65 66 20  t messy #ifndef 
4c20: 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2f 0a 23  statements..*/.#
4c30: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
4c40: 54 5f 54 45 4d 50 44 42 0a 23 64 65 66 69 6e 65  T_TEMPDB.#define
4c50: 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 31 0a 23   OMIT_TEMPDB 1.#
4c60: 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 4f 4d 49  else.#define OMI
4c70: 54 5f 54 45 4d 50 44 42 20 30 0a 23 65 6e 64 69  T_TEMPDB 0.#endi
4c80: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 22 66 69  f../*.** The "fi
4c90: 6c 65 20 66 6f 72 6d 61 74 22 20 6e 75 6d 62 65  le format" numbe
4ca0: 72 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  r is an integer 
4cb0: 74 68 61 74 20 69 73 20 69 6e 63 72 65 6d 65 6e  that is incremen
4cc0: 74 65 64 20 77 68 65 6e 65 76 65 72 0a 2a 2a 20  ted whenever.** 
4cd0: 74 68 65 20 56 44 42 45 2d 6c 65 76 65 6c 20 66  the VDBE-level f
4ce0: 69 6c 65 20 66 6f 72 6d 61 74 20 63 68 61 6e 67  ile format chang
4cf0: 65 73 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69  es.  The followi
4d00: 6e 67 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65  ng macros define
4d10: 20 74 68 65 0a 2a 2a 20 74 68 65 20 64 65 66 61   the.** the defa
4d20: 75 6c 74 20 66 69 6c 65 20 66 6f 72 6d 61 74 20  ult file format 
4d30: 66 6f 72 20 6e 65 77 20 64 61 74 61 62 61 73 65  for new database
4d40: 73 20 61 6e 64 20 74 68 65 20 6d 61 78 69 6d 75  s and the maximu
4d50: 6d 20 66 69 6c 65 20 66 6f 72 6d 61 74 0a 2a 2a  m file format.**
4d60: 20 74 68 61 74 20 74 68 65 20 6c 69 62 72 61 72   that the librar
4d70: 79 20 63 61 6e 20 72 65 61 64 2e 0a 2a 2f 0a 23  y can read..*/.#
4d80: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
4d90: 58 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 34 0a  X_FILE_FORMAT 4.
4da0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
4db0: 45 46 41 55 4c 54 5f 46 49 4c 45 5f 46 4f 52 4d  EFAULT_FILE_FORM
4dc0: 41 54 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  AT.# define SQLI
4dd0: 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45 5f  TE_DEFAULT_FILE_
4de0: 46 4f 52 4d 41 54 20 34 0a 23 65 6e 64 69 66 0a  FORMAT 4.#endif.
4df0: 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65  ./*.** Determine
4e00: 20 77 68 65 74 68 65 72 20 74 72 69 67 67 65 72   whether trigger
4e10: 73 20 61 72 65 20 72 65 63 75 72 73 69 76 65 20  s are recursive 
4e20: 62 79 20 64 65 66 61 75 6c 74 2e 20 20 54 68 69  by default.  Thi
4e30: 73 20 63 61 6e 20 62 65 0a 2a 2a 20 63 68 61 6e  s can be.** chan
4e40: 67 65 64 20 61 74 20 72 75 6e 2d 74 69 6d 65 20  ged at run-time 
4e50: 75 73 69 6e 67 20 61 20 70 72 61 67 6d 61 2e 0a  using a pragma..
4e60: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
4e70: 45 5f 44 45 46 41 55 4c 54 5f 52 45 43 55 52 53  E_DEFAULT_RECURS
4e80: 49 56 45 5f 54 52 49 47 47 45 52 53 0a 23 20 64  IVE_TRIGGERS.# d
4e90: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
4ea0: 41 55 4c 54 5f 52 45 43 55 52 53 49 56 45 5f 54  AULT_RECURSIVE_T
4eb0: 52 49 47 47 45 52 53 20 30 0a 23 65 6e 64 69 66  RIGGERS 0.#endif
4ec0: 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 76 69 64 65 20  ../*.** Provide 
4ed0: 61 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  a default value 
4ee0: 66 6f 72 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f  for SQLITE_TEMP_
4ef0: 53 54 4f 52 45 20 69 6e 20 63 61 73 65 20 69 74  STORE in case it
4f00: 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66 69 65   is not specifie
4f10: 64 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f 6d 6d  d.** on the comm
4f20: 61 6e 64 2d 6c 69 6e 65 0a 2a 2f 0a 23 69 66 6e  and-line.*/.#ifn
4f30: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f  def SQLITE_TEMP_
4f40: 53 54 4f 52 45 0a 23 20 64 65 66 69 6e 65 20 53  STORE.# define S
4f50: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
4f60: 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49   1.# define SQLI
4f70: 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 5f 78 63  TE_TEMP_STORE_xc
4f80: 20 31 20 20 2f 2a 20 45 78 63 6c 75 64 65 20 66   1  /* Exclude f
4f90: 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a 23  rom ctime.c */.#
4fa0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20  endif../*.** If 
4fb0: 6e 6f 20 76 61 6c 75 65 20 68 61 73 20 62 65 65  no value has bee
4fc0: 6e 20 70 72 6f 76 69 64 65 64 20 66 6f 72 20 53  n provided for S
4fd0: 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52  QLITE_MAX_WORKER
4fe0: 5f 54 48 52 45 41 44 53 2c 20 6f 72 20 69 66 0a  _THREADS, or if.
4ff0: 2a 2a 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53  ** SQLITE_TEMP_S
5000: 54 4f 52 45 20 69 73 20 73 65 74 20 74 6f 20 33  TORE is set to 3
5010: 20 28 6e 65 76 65 72 20 75 73 65 20 74 65 6d 70   (never use temp
5020: 6f 72 61 72 79 20 66 69 6c 65 73 29 2c 20 73 65  orary files), se
5030: 74 20 69 74 0a 2a 2a 20 74 6f 20 7a 65 72 6f 2e  t it.** to zero.
5040: 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 54  .*/.#if SQLITE_T
5050: 45 4d 50 5f 53 54 4f 52 45 3d 3d 33 20 7c 7c 20  EMP_STORE==3 || 
5060: 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46  SQLITE_THREADSAF
5070: 45 3d 3d 30 0a 23 20 75 6e 64 65 66 20 53 51 4c  E==0.# undef SQL
5080: 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
5090: 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20  HREADS.# define 
50a0: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
50b0: 52 5f 54 48 52 45 41 44 53 20 30 0a 23 65 6e 64  R_THREADS 0.#end
50c0: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
50d0: 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52  E_MAX_WORKER_THR
50e0: 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51  EADS.# define SQ
50f0: 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f  LITE_MAX_WORKER_
5100: 54 48 52 45 41 44 53 20 38 0a 23 65 6e 64 69 66  THREADS 8.#endif
5110: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
5120: 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54  DEFAULT_WORKER_T
5130: 48 52 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20  HREADS.# define 
5140: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57  SQLITE_DEFAULT_W
5150: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20 30 0a  ORKER_THREADS 0.
5160: 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54  #endif.#if SQLIT
5170: 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52  E_DEFAULT_WORKER
5180: 5f 54 48 52 45 41 44 53 3e 53 51 4c 49 54 45 5f  _THREADS>SQLITE_
5190: 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  MAX_WORKER_THREA
51a0: 44 53 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54  DS.# undef SQLIT
51b0: 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52  E_MAX_WORKER_THR
51c0: 45 41 44 53 0a 23 20 64 65 66 69 6e 65 20 53 51  EADS.# define SQ
51d0: 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f  LITE_MAX_WORKER_
51e0: 54 48 52 45 41 44 53 20 53 51 4c 49 54 45 5f 44  THREADS SQLITE_D
51f0: 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48  EFAULT_WORKER_TH
5200: 52 45 41 44 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a  READS.#endif../*
5210: 0a 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20  .** The default 
5220: 69 6e 69 74 69 61 6c 20 61 6c 6c 6f 63 61 74 69  initial allocati
5230: 6f 6e 20 66 6f 72 20 74 68 65 20 70 61 67 65 63  on for the pagec
5240: 61 63 68 65 20 77 68 65 6e 20 75 73 69 6e 67 20  ache when using 
5250: 73 65 70 61 72 61 74 65 0a 2a 2a 20 70 61 67 65  separate.** page
5260: 63 61 63 68 65 73 20 66 6f 72 20 65 61 63 68 20  caches for each 
5270: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
5280: 69 6f 6e 2e 20 20 41 20 70 6f 73 69 74 69 76 65  ion.  A positive
5290: 20 6e 75 6d 62 65 72 20 69 73 20 74 68 65 0a 2a   number is the.*
52a0: 2a 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  * number of page
52b0: 73 2e 20 20 41 20 6e 65 67 61 74 69 76 65 20 6e  s.  A negative n
52c0: 75 6d 62 65 72 20 4e 20 74 72 61 6e 73 6c 61 74  umber N translat
52d0: 69 6f 6e 73 20 6d 65 61 6e 73 20 74 68 61 74 20  ions means that 
52e0: 61 20 62 75 66 66 65 72 0a 2a 2a 20 6f 66 20 2d  a buffer.** of -
52f0: 31 30 32 34 2a 4e 20 62 79 74 65 73 20 69 73 20  1024*N bytes is 
5300: 61 6c 6c 6f 63 61 74 65 64 20 61 6e 64 20 75 73  allocated and us
5310: 65 64 20 66 6f 72 20 61 73 20 6d 61 6e 79 20 70  ed for as many p
5320: 61 67 65 73 20 61 73 20 69 74 20 77 69 6c 6c 20  ages as it will 
5330: 68 6f 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  hold..**.** The 
5340: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66  default value of
5350: 20 22 32 30 22 20 77 61 73 20 63 68 6f 6f 73 65   "20" was choose
5360: 6e 20 74 6f 20 6d 69 6e 69 6d 69 7a 65 20 74 68  n to minimize th
5370: 65 20 72 75 6e 2d 74 69 6d 65 20 6f 66 20 74 68  e run-time of th
5380: 65 0a 2a 2a 20 73 70 65 65 64 74 65 73 74 31 20  e.** speedtest1 
5390: 74 65 73 74 20 70 72 6f 67 72 61 6d 20 77 69 74  test program wit
53a0: 68 20 6f 70 74 69 6f 6e 73 3a 20 2d 2d 73 68 72  h options: --shr
53b0: 69 6e 6b 2d 6d 65 6d 6f 72 79 20 2d 2d 72 65 70  ink-memory --rep
53c0: 72 65 70 61 72 65 0a 2a 2f 0a 23 69 66 6e 64 65  repare.*/.#ifnde
53d0: 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  f SQLITE_DEFAULT
53e0: 5f 50 43 41 43 48 45 5f 49 4e 49 54 53 5a 0a 23  _PCACHE_INITSZ.#
53f0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44   define SQLITE_D
5400: 45 46 41 55 4c 54 5f 50 43 41 43 48 45 5f 49 4e  EFAULT_PCACHE_IN
5410: 49 54 53 5a 20 32 30 0a 23 65 6e 64 69 66 0a 0a  ITSZ 20.#endif..
5420: 2f 2a 0a 2a 2a 20 47 43 43 20 64 6f 65 73 20 6e  /*.** GCC does n
5430: 6f 74 20 64 65 66 69 6e 65 20 74 68 65 20 6f 66  ot define the of
5440: 66 73 65 74 6f 66 28 29 20 6d 61 63 72 6f 20 73  fsetof() macro s
5450: 6f 20 77 65 27 6c 6c 20 68 61 76 65 20 74 6f 20  o we'll have to 
5460: 64 6f 20 69 74 0a 2a 2a 20 6f 75 72 73 65 6c 76  do it.** ourselv
5470: 65 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 6f  es..*/.#ifndef o
5480: 66 66 73 65 74 6f 66 0a 23 64 65 66 69 6e 65 20  ffsetof.#define 
5490: 6f 66 66 73 65 74 6f 66 28 53 54 52 55 43 54 55  offsetof(STRUCTU
54a0: 52 45 2c 46 49 45 4c 44 29 20 28 28 69 6e 74 29  RE,FIELD) ((int)
54b0: 28 28 63 68 61 72 2a 29 26 28 28 53 54 52 55 43  ((char*)&((STRUC
54c0: 54 55 52 45 2a 29 30 29 2d 3e 46 49 45 4c 44 29  TURE*)0)->FIELD)
54d0: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
54e0: 4d 61 63 72 6f 73 20 74 6f 20 63 6f 6d 70 75 74  Macros to comput
54f0: 65 20 6d 69 6e 69 6d 75 6d 20 61 6e 64 20 6d 61  e minimum and ma
5500: 78 69 6d 75 6d 20 6f 66 20 74 77 6f 20 6e 75 6d  ximum of two num
5510: 62 65 72 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  bers..*/.#ifndef
5520: 20 4d 49 4e 0a 23 20 64 65 66 69 6e 65 20 4d 49   MIN.# define MI
5530: 4e 28 41 2c 42 29 20 28 28 41 29 3c 28 42 29 3f  N(A,B) ((A)<(B)?
5540: 28 41 29 3a 28 42 29 29 0a 23 65 6e 64 69 66 0a  (A):(B)).#endif.
5550: 23 69 66 6e 64 65 66 20 4d 41 58 0a 23 20 64 65  #ifndef MAX.# de
5560: 66 69 6e 65 20 4d 41 58 28 41 2c 42 29 20 28 28  fine MAX(A,B) ((
5570: 41 29 3e 28 42 29 3f 28 41 29 3a 28 42 29 29 0a  A)>(B)?(A):(B)).
5580: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 77  #endif../*.** Sw
5590: 61 70 20 74 77 6f 20 6f 62 6a 65 63 74 73 20 6f  ap two objects o
55a0: 66 20 74 79 70 65 20 54 59 50 45 2e 0a 2a 2f 0a  f type TYPE..*/.
55b0: 23 64 65 66 69 6e 65 20 53 57 41 50 28 54 59 50  #define SWAP(TYP
55c0: 45 2c 41 2c 42 29 20 7b 54 59 50 45 20 74 3d 41  E,A,B) {TYPE t=A
55d0: 3b 20 41 3d 42 3b 20 42 3d 74 3b 7d 0a 0a 2f 2a  ; A=B; B=t;}../*
55e0: 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65  .** Check to see
55f0: 20 69 66 20 74 68 69 73 20 6d 61 63 68 69 6e 65   if this machine
5600: 20 75 73 65 73 20 45 42 43 44 49 43 2e 20 20 28   uses EBCDIC.  (
5610: 59 65 73 2c 20 62 65 6c 69 65 76 65 20 69 74 20  Yes, believe it 
5620: 6f 72 0a 2a 2a 20 6e 6f 74 2c 20 74 68 65 72 65  or.** not, there
5630: 20 61 72 65 20 73 74 69 6c 6c 20 6d 61 63 68 69   are still machi
5640: 6e 65 73 20 6f 75 74 20 74 68 65 72 65 20 74 68  nes out there th
5650: 61 74 20 75 73 65 20 45 42 43 44 49 43 2e 29 0a  at use EBCDIC.).
5660: 2a 2f 0a 23 69 66 20 27 41 27 20 3d 3d 20 27 5c  */.#if 'A' == '\
5670: 33 30 31 27 0a 23 20 64 65 66 69 6e 65 20 53 51  301'.# define SQ
5680: 4c 49 54 45 5f 45 42 43 44 49 43 20 31 0a 23 65  LITE_EBCDIC 1.#e
5690: 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  lse.# define SQL
56a0: 49 54 45 5f 41 53 43 49 49 20 31 0a 23 65 6e 64  ITE_ASCII 1.#end
56b0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 67 65  if../*.** Intege
56c0: 72 73 20 6f 66 20 6b 6e 6f 77 6e 20 73 69 7a 65  rs of known size
56d0: 73 2e 20 20 54 68 65 73 65 20 74 79 70 65 64 65  s.  These typede
56e0: 66 73 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20  fs might change 
56f0: 66 6f 72 20 61 72 63 68 69 74 65 63 74 75 72 65  for architecture
5700: 73 0a 2a 2a 20 77 68 65 72 65 20 74 68 65 20 73  s.** where the s
5710: 69 7a 65 73 20 76 65 72 79 2e 20 20 50 72 65 70  izes very.  Prep
5720: 72 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 20  rocessor macros 
5730: 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 73 6f  are available so
5740: 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 74 79 70   that the.** typ
5750: 65 73 20 63 61 6e 20 62 65 20 63 6f 6e 76 65 6e  es can be conven
5760: 69 65 6e 74 6c 79 20 72 65 64 65 66 69 6e 65 64  iently redefined
5770: 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 79 70 65   at compile-type
5780: 2e 20 20 4c 69 6b 65 20 74 68 69 73 3a 0a 2a 2a  .  Like this:.**
5790: 0a 2a 2a 20 20 20 20 20 20 20 20 20 63 63 20 27  .**         cc '
57a0: 2d 44 55 49 4e 54 50 54 52 5f 54 59 50 45 3d 6c  -DUINTPTR_TYPE=l
57b0: 6f 6e 67 20 6c 6f 6e 67 20 69 6e 74 27 20 2e 2e  ong long int' ..
57c0: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 55 49 4e  ..*/.#ifndef UIN
57d0: 54 33 32 5f 54 59 50 45 0a 23 20 69 66 64 65 66  T32_TYPE.# ifdef
57e0: 20 48 41 56 45 5f 55 49 4e 54 33 32 5f 54 0a 23   HAVE_UINT32_T.#
57f0: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f    define UINT32_
5800: 54 59 50 45 20 75 69 6e 74 33 32 5f 74 0a 23 20  TYPE uint32_t.# 
5810: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55  else.#  define U
5820: 49 4e 54 33 32 5f 54 59 50 45 20 75 6e 73 69 67  INT32_TYPE unsig
5830: 6e 65 64 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a  ned int.# endif.
5840: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 55  #endif.#ifndef U
5850: 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69 66 64  INT16_TYPE.# ifd
5860: 65 66 20 48 41 56 45 5f 55 49 4e 54 31 36 5f 54  ef HAVE_UINT16_T
5870: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31  .#  define UINT1
5880: 36 5f 54 59 50 45 20 75 69 6e 74 31 36 5f 74 0a  6_TYPE uint16_t.
5890: 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  # else.#  define
58a0: 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75 6e 73   UINT16_TYPE uns
58b0: 69 67 6e 65 64 20 73 68 6f 72 74 20 69 6e 74 0a  igned short int.
58c0: 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23  # endif.#endif.#
58d0: 69 66 6e 64 65 66 20 49 4e 54 31 36 5f 54 59 50  ifndef INT16_TYP
58e0: 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 49  E.# ifdef HAVE_I
58f0: 4e 54 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65  NT16_T.#  define
5900: 20 49 4e 54 31 36 5f 54 59 50 45 20 69 6e 74 31   INT16_TYPE int1
5910: 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65  6_t.# else.#  de
5920: 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50 45 20  fine INT16_TYPE 
5930: 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69  short int.# endi
5940: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
5950: 20 55 49 4e 54 38 5f 54 59 50 45 0a 23 20 69 66   UINT8_TYPE.# if
5960: 64 65 66 20 48 41 56 45 5f 55 49 4e 54 38 5f 54  def HAVE_UINT8_T
5970: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38  .#  define UINT8
5980: 5f 54 59 50 45 20 75 69 6e 74 38 5f 74 0a 23 20  _TYPE uint8_t.# 
5990: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 55  else.#  define U
59a0: 49 4e 54 38 5f 54 59 50 45 20 75 6e 73 69 67 6e  INT8_TYPE unsign
59b0: 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69 66 0a  ed char.# endif.
59c0: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 49  #endif.#ifndef I
59d0: 4e 54 38 5f 54 59 50 45 0a 23 20 69 66 64 65 66  NT8_TYPE.# ifdef
59e0: 20 48 41 56 45 5f 49 4e 54 38 5f 54 0a 23 20 20   HAVE_INT8_T.#  
59f0: 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59 50 45  define INT8_TYPE
5a00: 20 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23   int8_t.# else.#
5a10: 20 20 64 65 66 69 6e 65 20 49 4e 54 38 5f 54 59    define INT8_TY
5a20: 50 45 20 73 69 67 6e 65 64 20 63 68 61 72 0a 23  PE signed char.#
5a30: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69   endif.#endif.#i
5a40: 66 6e 64 65 66 20 4c 4f 4e 47 44 4f 55 42 4c 45  fndef LONGDOUBLE
5a50: 5f 54 59 50 45 0a 23 20 64 65 66 69 6e 65 20 4c  _TYPE.# define L
5a60: 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 20 6c  ONGDOUBLE_TYPE l
5a70: 6f 6e 67 20 64 6f 75 62 6c 65 0a 23 65 6e 64 69  ong double.#endi
5a80: 66 0a 74 79 70 65 64 65 66 20 73 71 6c 69 74 65  f.typedef sqlite
5a90: 5f 69 6e 74 36 34 20 69 36 34 3b 20 20 20 20 20  _int64 i64;     
5aa0: 20 20 20 20 20 2f 2a 20 38 2d 62 79 74 65 20 73       /* 8-byte s
5ab0: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a 2f  igned integer */
5ac0: 0a 74 79 70 65 64 65 66 20 73 71 6c 69 74 65 5f  .typedef sqlite_
5ad0: 75 69 6e 74 36 34 20 75 36 34 3b 20 20 20 20 20  uint64 u64;     
5ae0: 20 20 20 20 2f 2a 20 38 2d 62 79 74 65 20 75 6e      /* 8-byte un
5af0: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 2a  signed integer *
5b00: 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54 33 32  /.typedef UINT32
5b10: 5f 54 59 50 45 20 75 33 32 3b 20 20 20 20 20 20  _TYPE u32;      
5b20: 20 20 20 20 20 2f 2a 20 34 2d 62 79 74 65 20 75       /* 4-byte u
5b30: 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20  nsigned integer 
5b40: 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54 31  */.typedef UINT1
5b50: 36 5f 54 59 50 45 20 75 31 36 3b 20 20 20 20 20  6_TYPE u16;     
5b60: 20 20 20 20 20 20 2f 2a 20 32 2d 62 79 74 65 20        /* 2-byte 
5b70: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
5b80: 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31   */.typedef INT1
5b90: 36 5f 54 59 50 45 20 69 31 36 3b 20 20 20 20 20  6_TYPE i16;     
5ba0: 20 20 20 20 20 20 20 2f 2a 20 32 2d 62 79 74 65         /* 2-byte
5bb0: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
5bc0: 2a 2f 0a 74 79 70 65 64 65 66 20 55 49 4e 54 38  */.typedef UINT8
5bd0: 5f 54 59 50 45 20 75 38 3b 20 20 20 20 20 20 20  _TYPE u8;       
5be0: 20 20 20 20 20 20 2f 2a 20 31 2d 62 79 74 65 20        /* 1-byte 
5bf0: 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  unsigned integer
5c00: 20 2a 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 38   */.typedef INT8
5c10: 5f 54 59 50 45 20 69 38 3b 20 20 20 20 20 20 20  _TYPE i8;       
5c20: 20 20 20 20 20 20 20 2f 2a 20 31 2d 62 79 74 65         /* 1-byte
5c30: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20   signed integer 
5c40: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45  */../*.** SQLITE
5c50: 5f 4d 41 58 5f 55 33 32 20 69 73 20 61 20 75 36  _MAX_U32 is a u6
5c60: 34 20 63 6f 6e 73 74 61 6e 74 20 74 68 61 74 20  4 constant that 
5c70: 69 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 75  is the maximum u
5c80: 36 34 20 76 61 6c 75 65 0a 2a 2a 20 74 68 61 74  64 value.** that
5c90: 20 63 61 6e 20 62 65 20 73 74 6f 72 65 64 20 69   can be stored i
5ca0: 6e 20 61 20 75 33 32 20 77 69 74 68 6f 75 74 20  n a u32 without 
5cb0: 6c 6f 73 73 20 6f 66 20 64 61 74 61 2e 20 20 54  loss of data.  T
5cc0: 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 30  he value.** is 0
5cd0: 78 30 30 30 30 30 30 30 30 66 66 66 66 66 66 66  x00000000fffffff
5ce0: 66 2e 20 20 42 75 74 20 62 65 63 61 75 73 65 20  f.  But because 
5cf0: 6f 66 20 71 75 69 72 6b 73 20 6f 66 20 73 6f 6d  of quirks of som
5d00: 65 20 63 6f 6d 70 69 6c 65 72 73 2c 20 77 65 0a  e compilers, we.
5d10: 2a 2a 20 68 61 76 65 20 74 6f 20 73 70 65 63 69  ** have to speci
5d20: 66 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  fy the value in 
5d30: 74 68 65 20 6c 65 73 73 20 69 6e 74 75 69 74 69  the less intuiti
5d40: 76 65 20 6d 61 6e 6e 65 72 20 73 68 6f 77 6e 3a  ve manner shown:
5d50: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
5d60: 54 45 5f 4d 41 58 5f 55 33 32 20 20 28 28 28 28  TE_MAX_U32  ((((
5d70: 75 36 34 29 31 29 3c 3c 33 32 29 2d 31 29 0a 0a  u64)1)<<32)-1)..
5d80: 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61 74 79  /*.** The dataty
5d90: 70 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  pe used to store
5da0: 20 65 73 74 69 6d 61 74 65 73 20 6f 66 20 74 68   estimates of th
5db0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  e number of rows
5dc0: 20 69 6e 20 61 0a 2a 2a 20 74 61 62 6c 65 20 6f   in a.** table o
5dd0: 72 20 69 6e 64 65 78 2e 20 20 54 68 69 73 20 69  r index.  This i
5de0: 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20 69 6e  s an unsigned in
5df0: 74 65 67 65 72 20 74 79 70 65 2e 20 20 46 6f 72  teger type.  For
5e00: 20 39 39 2e 39 25 20 6f 66 0a 2a 2a 20 74 68 65   99.9% of.** the
5e10: 20 77 6f 72 6c 64 2c 20 61 20 33 32 2d 62 69 74   world, a 32-bit
5e20: 20 69 6e 74 65 67 65 72 20 69 73 20 73 75 66 66   integer is suff
5e30: 69 63 69 65 6e 74 2e 20 20 42 75 74 20 61 20 36  icient.  But a 6
5e40: 34 2d 62 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a  4-bit integer.**
5e50: 20 63 61 6e 20 62 65 20 75 73 65 64 20 61 74 20   can be used at 
5e60: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 69 66 20  compile-time if 
5e70: 64 65 73 69 72 65 64 2e 0a 2a 2f 0a 23 69 66 64  desired..*/.#ifd
5e80: 65 66 20 53 51 4c 49 54 45 5f 36 34 42 49 54 5f  ef SQLITE_64BIT_
5e90: 53 54 41 54 53 0a 20 74 79 70 65 64 65 66 20 75  STATS. typedef u
5ea0: 36 34 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f  64 tRowcnt;    /
5eb0: 2a 20 36 34 2d 62 69 74 20 6f 6e 6c 79 20 69 66  * 64-bit only if
5ec0: 20 72 65 71 75 65 73 74 65 64 20 61 74 20 63 6f   requested at co
5ed0: 6d 70 69 6c 65 2d 74 69 6d 65 20 2a 2f 0a 23 65  mpile-time */.#e
5ee0: 6c 73 65 0a 20 74 79 70 65 64 65 66 20 75 33 32  lse. typedef u32
5ef0: 20 74 52 6f 77 63 6e 74 3b 20 20 20 20 2f 2a 20   tRowcnt;    /* 
5f00: 33 32 2d 62 69 74 20 69 73 20 74 68 65 20 64 65  32-bit is the de
5f10: 66 61 75 6c 74 20 2a 2f 0a 23 65 6e 64 69 66 0a  fault */.#endif.
5f20: 0a 2f 2a 0a 2a 2a 20 45 73 74 69 6d 61 74 65 64  ./*.** Estimated
5f30: 20 71 75 61 6e 74 69 74 69 65 73 20 75 73 65 64   quantities used
5f40: 20 66 6f 72 20 71 75 65 72 79 20 70 6c 61 6e 6e   for query plann
5f50: 69 6e 67 20 61 72 65 20 73 74 6f 72 65 64 20 61  ing are stored a
5f60: 73 20 31 36 2d 62 69 74 0a 2a 2a 20 6c 6f 67 61  s 16-bit.** loga
5f70: 72 69 74 68 6d 73 2e 20 20 46 6f 72 20 71 75 61  rithms.  For qua
5f80: 6e 74 69 74 79 20 58 2c 20 74 68 65 20 76 61 6c  ntity X, the val
5f90: 75 65 20 73 74 6f 72 65 64 20 69 73 20 31 30 2a  ue stored is 10*
5fa0: 6c 6f 67 32 28 58 29 2e 20 20 54 68 69 73 0a 2a  log2(X).  This.*
5fb0: 2a 20 67 69 76 65 73 20 61 20 70 6f 73 73 69 62  * gives a possib
5fc0: 6c 65 20 72 61 6e 67 65 20 6f 66 20 76 61 6c 75  le range of valu
5fd0: 65 73 20 6f 66 20 61 70 70 72 6f 78 69 6d 61 74  es of approximat
5fe0: 65 6c 79 20 31 2e 30 65 39 38 36 20 74 6f 20 31  ely 1.0e986 to 1
5ff0: 65 2d 39 38 36 2e 0a 2a 2a 20 42 75 74 20 74 68  e-986..** But th
6000: 65 20 61 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  e allowed values
6010: 20 61 72 65 20 22 67 72 61 69 6e 79 22 2e 20 20   are "grainy".  
6020: 4e 6f 74 20 65 76 65 72 79 20 76 61 6c 75 65 20  Not every value 
6030: 69 73 20 72 65 70 72 65 73 65 6e 74 61 62 6c 65  is representable
6040: 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c 65  ..** For example
6050: 2c 20 71 75 61 6e 74 69 74 69 65 73 20 31 36 20  , quantities 16 
6060: 61 6e 64 20 31 37 20 61 72 65 20 62 6f 74 68 20  and 17 are both 
6070: 72 65 70 72 65 73 65 6e 74 65 64 20 62 79 20 61  represented by a
6080: 20 4c 6f 67 45 73 74 0a 2a 2a 20 6f 66 20 34 30   LogEst.** of 40
6090: 2e 20 20 48 6f 77 65 76 65 72 2c 20 73 69 6e 63  .  However, sinc
60a0: 65 20 4c 6f 67 45 73 74 20 71 75 61 6e 74 69 74  e LogEst quantit
60b0: 69 65 73 20 61 72 65 20 73 75 70 70 6f 73 65 20  ies are suppose 
60c0: 74 6f 20 62 65 20 65 73 74 69 6d 61 74 65 73 2c  to be estimates,
60d0: 0a 2a 2a 20 6e 6f 74 20 65 78 61 63 74 20 76 61  .** not exact va
60e0: 6c 75 65 73 2c 20 74 68 69 73 20 69 6d 70 72 65  lues, this impre
60f0: 63 69 73 69 6f 6e 20 69 73 20 6e 6f 74 20 61 20  cision is not a 
6100: 70 72 6f 62 6c 65 6d 2e 0a 2a 2a 0a 2a 2a 20 22  problem..**.** "
6110: 4c 6f 67 45 73 74 22 20 69 73 20 73 68 6f 72 74  LogEst" is short
6120: 20 66 6f 72 20 22 4c 6f 67 61 72 69 74 68 6d 69   for "Logarithmi
6130: 63 20 45 73 74 69 6d 61 74 65 22 2e 0a 2a 2a 0a  c Estimate"..**.
6140: 2a 2a 20 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 20  ** Examples:.** 
6150: 20 20 20 20 20 31 20 2d 3e 20 30 20 20 20 20 20       1 -> 0     
6160: 20 20 20 20 20 20 20 20 20 32 30 20 2d 3e 20 34           20 -> 4
6170: 33 20 20 20 20 20 20 20 20 20 20 31 30 30 30 30  3          10000
6180: 20 2d 3e 20 31 33 32 0a 2a 2a 20 20 20 20 20 20   -> 132.**      
6190: 32 20 2d 3e 20 31 30 20 20 20 20 20 20 20 20 20  2 -> 10         
61a0: 20 20 20 20 32 35 20 2d 3e 20 34 36 20 20 20 20      25 -> 46    
61b0: 20 20 20 20 20 20 32 35 30 30 30 20 2d 3e 20 31        25000 -> 1
61c0: 34 36 0a 2a 2a 20 20 20 20 20 20 33 20 2d 3e 20  46.**      3 -> 
61d0: 31 36 20 20 20 20 20 20 20 20 20 20 20 20 31 30  16            10
61e0: 30 20 2d 3e 20 36 36 20 20 20 20 20 20 20 20 31  0 -> 66        1
61f0: 30 30 30 30 30 30 20 2d 3e 20 31 39 39 0a 2a 2a  000000 -> 199.**
6200: 20 20 20 20 20 20 34 20 2d 3e 20 32 30 20 20 20        4 -> 20   
6210: 20 20 20 20 20 20 20 20 31 30 30 30 20 2d 3e 20          1000 -> 
6220: 39 39 20 20 20 20 20 20 20 20 31 30 34 38 35 37  99        104857
6230: 36 20 2d 3e 20 32 30 30 0a 2a 2a 20 20 20 20 20  6 -> 200.**     
6240: 31 30 20 2d 3e 20 33 33 20 20 20 20 20 20 20 20  10 -> 33        
6250: 20 20 20 31 30 32 34 20 2d 3e 20 31 30 30 20 20     1024 -> 100  
6260: 20 20 34 32 39 34 39 36 37 32 39 36 20 2d 3e 20    4294967296 -> 
6270: 33 32 30 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f  320.**.** The Lo
6280: 67 45 73 74 20 63 61 6e 20 62 65 20 6e 65 67 61  gEst can be nega
6290: 74 69 76 65 20 74 6f 20 69 6e 64 69 63 61 74 65  tive to indicate
62a0: 20 66 72 61 63 74 69 6f 6e 61 6c 20 76 61 6c 75   fractional valu
62b0: 65 73 2e 0a 2a 2a 20 45 78 61 6d 70 6c 65 73 3a  es..** Examples:
62c0: 0a 2a 2a 0a 2a 2a 20 20 20 20 30 2e 35 20 2d 3e  .**.**    0.5 ->
62d0: 20 2d 31 30 20 20 20 20 20 20 20 20 20 20 20 30   -10           0
62e0: 2e 31 20 2d 3e 20 2d 33 33 20 20 20 20 20 20 20  .1 -> -33       
62f0: 20 30 2e 30 36 32 35 20 2d 3e 20 2d 34 30 0a 2a   0.0625 -> -40.*
6300: 2f 0a 74 79 70 65 64 65 66 20 49 4e 54 31 36 5f  /.typedef INT16_
6310: 54 59 50 45 20 4c 6f 67 45 73 74 3b 0a 0a 2f 2a  TYPE LogEst;../*
6320: 0a 2a 2a 20 53 65 74 20 74 68 65 20 53 51 4c 49  .** Set the SQLI
6330: 54 45 5f 50 54 52 53 49 5a 45 20 6d 61 63 72 6f  TE_PTRSIZE macro
6340: 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   to the number o
6350: 66 20 62 79 74 65 73 20 69 6e 20 61 20 70 6f 69  f bytes in a poi
6360: 6e 74 65 72 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  nter.*/.#ifndef 
6370: 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 0a 23  SQLITE_PTRSIZE.#
6380: 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 53 49   if defined(__SI
6390: 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f 29 0a  ZEOF_POINTER__).
63a0: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
63b0: 45 5f 50 54 52 53 49 5a 45 20 5f 5f 53 49 5a 45  E_PTRSIZE __SIZE
63c0: 4f 46 5f 50 4f 49 4e 54 45 52 5f 5f 0a 23 20 65  OF_POINTER__.# e
63d0: 6c 69 66 20 64 65 66 69 6e 65 64 28 69 33 38 36  lif defined(i386
63e0: 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64  )     || defined
63f0: 28 5f 5f 69 33 38 36 5f 5f 29 20 20 20 7c 7c 20  (__i386__)   || 
6400: 64 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38 36 29  defined(_M_IX86)
6410: 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 20 20   ||    \.       
6420: 64 65 66 69 6e 65 64 28 5f 4d 5f 41 52 4d 29 20  defined(_M_ARM) 
6430: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 61    || defined(__a
6440: 72 6d 5f 5f 29 20 20 20 20 7c 7c 20 64 65 66 69  rm__)    || defi
6450: 6e 65 64 28 5f 5f 78 38 36 29 0a 23 20 20 20 64  ned(__x86).#   d
6460: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
6470: 53 49 5a 45 20 34 0a 23 20 65 6c 73 65 0a 23 20  SIZE 4.# else.# 
6480: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
6490: 50 54 52 53 49 5a 45 20 38 0a 23 20 65 6e 64 69  PTRSIZE 8.# endi
64a0: 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 54 68 65  f.#endif../* The
64b0: 20 75 70 74 72 20 74 79 70 65 20 69 73 20 61 6e   uptr type is an
64c0: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65   unsigned intege
64d0: 72 20 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74  r large enough t
64e0: 6f 20 68 6f 6c 64 20 61 20 70 6f 69 6e 74 65 72  o hold a pointer
64f0: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
6500: 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 29 0a 20  HAVE_STDINT_H). 
6510: 20 74 79 70 65 64 65 66 20 75 69 6e 74 70 74 72   typedef uintptr
6520: 5f 74 20 75 70 74 72 3b 0a 23 65 6c 69 66 20 53  _t uptr;.#elif S
6530: 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 3d 3d 34  QLITE_PTRSIZE==4
6540: 0a 20 20 74 79 70 65 64 65 66 20 75 33 32 20 75  .  typedef u32 u
6550: 70 74 72 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70  ptr;.#else.  typ
6560: 65 64 65 66 20 75 36 34 20 75 70 74 72 3b 0a 23  edef u64 uptr;.#
6570: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
6580: 20 53 51 4c 49 54 45 5f 57 49 54 48 49 4e 28 50   SQLITE_WITHIN(P
6590: 2c 53 2c 45 29 20 6d 61 63 72 6f 20 63 68 65 63  ,S,E) macro chec
65a0: 6b 73 20 74 6f 20 73 65 65 20 69 66 20 70 6f 69  ks to see if poi
65b0: 6e 74 65 72 20 50 20 70 6f 69 6e 74 73 20 74 6f  nter P points to
65c0: 0a 2a 2a 20 73 6f 6d 65 74 68 69 6e 67 20 62 65  .** something be
65d0: 74 77 65 65 6e 20 53 20 28 69 6e 63 6c 75 73 69  tween S (inclusi
65e0: 76 65 29 20 61 6e 64 20 45 20 28 65 78 63 6c 75  ve) and E (exclu
65f0: 73 69 76 65 29 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20  sive)..**.** In 
6600: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 53 20 69  other words, S i
6610: 73 20 61 20 62 75 66 66 65 72 20 61 6e 64 20 45  s a buffer and E
6620: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
6630: 20 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20   the first byte 
6640: 61 66 74 65 72 0a 2a 2a 20 74 68 65 20 65 6e 64  after.** the end
6650: 20 6f 66 20 62 75 66 66 65 72 20 53 2e 20 20 54   of buffer S.  T
6660: 68 69 73 20 6d 61 63 72 6f 20 72 65 74 75 72 6e  his macro return
6670: 73 20 74 72 75 65 20 69 66 20 50 20 70 6f 69 6e  s true if P poin
6680: 74 73 20 74 6f 20 73 6f 6d 65 74 68 69 6e 67 0a  ts to something.
6690: 2a 2a 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74  ** contained wit
66a0: 68 69 6e 20 74 68 65 20 62 75 66 66 65 72 20 53  hin the buffer S
66b0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
66c0: 49 54 45 5f 57 49 54 48 49 4e 28 50 2c 53 2c 45  ITE_WITHIN(P,S,E
66d0: 29 20 28 28 28 75 70 74 72 29 28 50 29 3e 3d 28  ) (((uptr)(P)>=(
66e0: 75 70 74 72 29 28 53 29 29 26 26 28 28 75 70 74  uptr)(S))&&((upt
66f0: 72 29 28 50 29 3c 28 75 70 74 72 29 28 45 29 29  r)(P)<(uptr)(E))
6700: 29 0a 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  ).../*.** Macros
6710: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68   to determine wh
6720: 65 74 68 65 72 20 74 68 65 20 6d 61 63 68 69 6e  ether the machin
6730: 65 20 69 73 20 62 69 67 20 6f 72 20 6c 69 74 74  e is big or litt
6740: 6c 65 20 65 6e 64 69 61 6e 2c 0a 2a 2a 20 61 6e  le endian,.** an
6750: 64 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  d whether or not
6760: 20 74 68 61 74 20 64 65 74 65 72 6d 69 6e 61 74   that determinat
6770: 69 6f 6e 20 69 73 20 72 75 6e 2d 74 69 6d 65 20  ion is run-time 
6780: 6f 72 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2e  or compile-time.
6790: 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 62 65 73 74 20  .**.** For best 
67a0: 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20 61 6e 20  performance, an 
67b0: 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20  attempt is made 
67c0: 74 6f 20 67 75 65 73 73 20 61 74 20 74 68 65 20  to guess at the 
67d0: 62 79 74 65 2d 6f 72 64 65 72 0a 2a 2a 20 75 73  byte-order.** us
67e0: 69 6e 67 20 43 2d 70 72 65 70 72 6f 63 65 73 73  ing C-preprocess
67f0: 6f 72 20 6d 61 63 72 6f 73 2e 20 20 49 66 20 74  or macros.  If t
6800: 68 61 74 20 69 73 20 75 6e 73 75 63 63 65 73 73  hat is unsuccess
6810: 66 75 6c 2c 20 6f 72 20 69 66 0a 2a 2a 20 2d 44  ful, or if.** -D
6820: 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52  SQLITE_BYTEORDER
6830: 3d 30 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  =0 is set, then 
6840: 62 79 74 65 2d 6f 72 64 65 72 20 69 73 20 64 65  byte-order is de
6850: 74 65 72 6d 69 6e 65 64 0a 2a 2a 20 61 74 20 72  termined.** at r
6860: 75 6e 2d 74 69 6d 65 2e 0a 2a 2f 0a 23 69 66 6e  un-time..*/.#ifn
6870: 64 65 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f  def SQLITE_BYTEO
6880: 52 44 45 52 0a 23 20 69 66 20 64 65 66 69 6e 65  RDER.# if define
6890: 64 28 69 33 38 36 29 20 20 20 20 20 7c 7c 20 64  d(i386)     || d
68a0: 65 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29  efined(__i386__)
68b0: 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d     || defined(_M
68c0: 5f 49 58 38 36 29 20 7c 7c 20 20 20 20 5c 0a 20  _IX86) ||    \. 
68d0: 20 20 20 20 64 65 66 69 6e 65 64 28 5f 5f 78 38      defined(__x8
68e0: 36 5f 36 34 29 20 7c 7c 20 64 65 66 69 6e 65 64  6_64) || defined
68f0: 28 5f 5f 78 38 36 5f 36 34 5f 5f 29 20 7c 7c 20  (__x86_64__) || 
6900: 64 65 66 69 6e 65 64 28 5f 4d 5f 58 36 34 29 20  defined(_M_X64) 
6910: 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65   ||    \.     de
6920: 66 69 6e 65 64 28 5f 4d 5f 41 4d 44 36 34 29 20  fined(_M_AMD64) 
6930: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 52  || defined(_M_AR
6940: 4d 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65  M)     || define
6950: 64 28 5f 5f 78 38 36 29 20 20 20 7c 7c 20 20 20  d(__x86)   ||   
6960: 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28   \.     defined(
6970: 5f 5f 61 72 6d 5f 5f 29 0a 23 20 20 20 64 65 66  __arm__).#   def
6980: 69 6e 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f  ine SQLITE_BYTEO
6990: 52 44 45 52 20 20 20 20 31 32 33 34 0a 23 20 65  RDER    1234.# e
69a0: 6c 69 66 20 64 65 66 69 6e 65 64 28 73 70 61 72  lif defined(spar
69b0: 63 29 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64  c)    || defined
69c0: 28 5f 5f 70 70 63 5f 5f 29 0a 23 20 20 20 64 65  (__ppc__).#   de
69d0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59 54 45  fine SQLITE_BYTE
69e0: 4f 52 44 45 52 20 20 20 20 34 33 32 31 0a 23 20  ORDER    4321.# 
69f0: 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20  else.#   define 
6a00: 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52  SQLITE_BYTEORDER
6a10: 20 30 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69   0.# endif.#endi
6a20: 66 0a 23 69 66 20 53 51 4c 49 54 45 5f 42 59 54  f.#if SQLITE_BYT
6a30: 45 4f 52 44 45 52 3d 3d 34 33 32 31 0a 23 20 64  EORDER==4321.# d
6a40: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47  efine SQLITE_BIG
6a50: 45 4e 44 49 41 4e 20 20 20 20 31 0a 23 20 64 65  ENDIAN    1.# de
6a60: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54  fine SQLITE_LITT
6a70: 4c 45 45 4e 44 49 41 4e 20 30 0a 23 20 64 65 66  LEENDIAN 0.# def
6a80: 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36  ine SQLITE_UTF16
6a90: 4e 41 54 49 56 45 20 20 53 51 4c 49 54 45 5f 55  NATIVE  SQLITE_U
6aa0: 54 46 31 36 42 45 0a 23 65 6c 69 66 20 53 51 4c  TF16BE.#elif SQL
6ab0: 49 54 45 5f 42 59 54 45 4f 52 44 45 52 3d 3d 31  ITE_BYTEORDER==1
6ac0: 32 33 34 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  234.# define SQL
6ad0: 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20  ITE_BIGENDIAN   
6ae0: 20 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49   0.# define SQLI
6af0: 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20  TE_LITTLEENDIAN 
6b00: 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  1.# define SQLIT
6b10: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 53  E_UTF16NATIVE  S
6b20: 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 0a 23 65  QLITE_UTF16LE.#e
6b30: 6c 73 65 0a 23 20 69 66 64 65 66 20 53 51 4c 49  lse.# ifdef SQLI
6b40: 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a  TE_AMALGAMATION.
6b50: 20 20 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69    const int sqli
6b60: 74 65 33 6f 6e 65 20 3d 20 31 3b 0a 23 20 65 6c  te3one = 1;.# el
6b70: 73 65 0a 20 20 65 78 74 65 72 6e 20 63 6f 6e 73  se.  extern cons
6b80: 74 20 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65  t int sqlite3one
6b90: 3b 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69  ;.# endif.# defi
6ba0: 6e 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44  ne SQLITE_BIGEND
6bb0: 49 41 4e 20 20 20 20 28 2a 28 63 68 61 72 20 2a  IAN    (*(char *
6bc0: 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d  )(&sqlite3one)==
6bd0: 30 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  0).# define SQLI
6be0: 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20  TE_LITTLEENDIAN 
6bf0: 28 2a 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69  (*(char *)(&sqli
6c00: 74 65 33 6f 6e 65 29 3d 3d 31 29 0a 23 20 64 65  te3one)==1).# de
6c10: 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31  fine SQLITE_UTF1
6c20: 36 4e 41 54 49 56 45 20 20 28 53 51 4c 49 54 45  6NATIVE  (SQLITE
6c30: 5f 42 49 47 45 4e 44 49 41 4e 3f 53 51 4c 49 54  _BIGENDIAN?SQLIT
6c40: 45 5f 55 54 46 31 36 42 45 3a 53 51 4c 49 54 45  E_UTF16BE:SQLITE
6c50: 5f 55 54 46 31 36 4c 45 29 0a 23 65 6e 64 69 66  _UTF16LE).#endif
6c60: 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 73 74 61 6e 74  ../*.** Constant
6c70: 73 20 66 6f 72 20 74 68 65 20 6c 61 72 67 65 73  s for the larges
6c80: 74 20 61 6e 64 20 73 6d 61 6c 6c 65 73 74 20 70  t and smallest p
6c90: 6f 73 73 69 62 6c 65 20 36 34 2d 62 69 74 20 73  ossible 64-bit s
6ca0: 69 67 6e 65 64 20 69 6e 74 65 67 65 72 73 2e 0a  igned integers..
6cb0: 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20  ** These macros 
6cc0: 61 72 65 20 64 65 73 69 67 6e 65 64 20 74 6f 20  are designed to 
6cd0: 77 6f 72 6b 20 63 6f 72 72 65 63 74 6c 79 20 6f  work correctly o
6ce0: 6e 20 62 6f 74 68 20 33 32 2d 62 69 74 20 61 6e  n both 32-bit an
6cf0: 64 20 36 34 2d 62 69 74 0a 2a 2a 20 63 6f 6d 70  d 64-bit.** comp
6d00: 69 6c 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ilers..*/.#defin
6d10: 65 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34 20  e LARGEST_INT64 
6d20: 20 28 30 78 66 66 66 66 66 66 66 66 7c 28 28 28   (0xffffffff|(((
6d30: 69 36 34 29 30 78 37 66 66 66 66 66 66 66 29 3c  i64)0x7fffffff)<
6d40: 3c 33 32 29 29 0a 23 64 65 66 69 6e 65 20 53 4d  <32)).#define SM
6d50: 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 28 28 28  ALLEST_INT64 (((
6d60: 69 36 34 29 2d 31 29 20 2d 20 4c 41 52 47 45 53  i64)-1) - LARGES
6d70: 54 5f 49 4e 54 36 34 29 0a 0a 2f 2a 0a 2a 2a 20  T_INT64)../*.** 
6d80: 52 6f 75 6e 64 20 75 70 20 61 20 6e 75 6d 62 65  Round up a numbe
6d90: 72 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6c 61  r to the next la
6da0: 72 67 65 72 20 6d 75 6c 74 69 70 6c 65 20 6f 66  rger multiple of
6db0: 20 38 2e 20 20 54 68 69 73 20 69 73 20 75 73 65   8.  This is use
6dc0: 64 0a 2a 2a 20 74 6f 20 66 6f 72 63 65 20 38 2d  d.** to force 8-
6dd0: 62 79 74 65 20 61 6c 69 67 6e 6d 65 6e 74 20 6f  byte alignment o
6de0: 6e 20 36 34 2d 62 69 74 20 61 72 63 68 69 74 65  n 64-bit archite
6df0: 63 74 75 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69  ctures..*/.#defi
6e00: 6e 65 20 52 4f 55 4e 44 38 28 78 29 20 20 20 20  ne ROUND8(x)    
6e10: 20 28 28 28 78 29 2b 37 29 26 7e 37 29 0a 0a 2f   (((x)+7)&~7)../
6e20: 2a 0a 2a 2a 20 52 6f 75 6e 64 20 64 6f 77 6e 20  *.** Round down 
6e30: 74 6f 20 74 68 65 20 6e 65 61 72 65 73 74 20 6d  to the nearest m
6e40: 75 6c 74 69 70 6c 65 20 6f 66 20 38 0a 2a 2f 0a  ultiple of 8.*/.
6e50: 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 44 4f 57  #define ROUNDDOW
6e60: 4e 38 28 78 29 20 28 28 78 29 26 7e 37 29 0a 0a  N8(x) ((x)&~7)..
6e70: 2f 2a 0a 2a 2a 20 41 73 73 65 72 74 20 74 68 61  /*.** Assert tha
6e80: 74 20 74 68 65 20 70 6f 69 6e 74 65 72 20 58 20  t the pointer X 
6e90: 69 73 20 61 6c 69 67 6e 65 64 20 74 6f 20 61 6e  is aligned to an
6ea0: 20 38 2d 62 79 74 65 20 62 6f 75 6e 64 61 72 79   8-byte boundary
6eb0: 2e 20 20 54 68 69 73 0a 2a 2a 20 6d 61 63 72 6f  .  This.** macro
6ec0: 20 69 73 20 75 73 65 64 20 6f 6e 6c 79 20 77 69   is used only wi
6ed0: 74 68 69 6e 20 61 73 73 65 72 74 28 29 20 74 6f  thin assert() to
6ee0: 20 76 65 72 69 66 79 20 74 68 61 74 20 74 68 65   verify that the
6ef0: 20 63 6f 64 65 20 67 65 74 73 0a 2a 2a 20 61 6c   code gets.** al
6f00: 6c 20 61 6c 69 67 6e 6d 65 6e 74 20 72 65 73 74  l alignment rest
6f10: 72 69 63 74 69 6f 6e 73 20 63 6f 72 72 65 63 74  rictions correct
6f20: 2e 0a 2a 2a 0a 2a 2a 20 45 78 63 65 70 74 2c 20  ..**.** Except, 
6f30: 69 66 20 53 51 4c 49 54 45 5f 34 5f 42 59 54 45  if SQLITE_4_BYTE
6f40: 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 20  _ALIGNED_MALLOC 
6f50: 69 73 20 64 65 66 69 6e 65 64 2c 20 74 68 65 6e  is defined, then
6f60: 20 74 68 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69   the.** underlyi
6f70: 6e 67 20 6d 61 6c 6c 6f 63 28 29 20 69 6d 70 6c  ng malloc() impl
6f80: 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 69 67 68 74  ementation might
6f90: 20 72 65 74 75 72 6e 20 75 73 20 34 2d 62 79 74   return us 4-byt
6fa0: 65 20 61 6c 69 67 6e 65 64 0a 2a 2a 20 70 6f 69  e aligned.** poi
6fb0: 6e 74 65 72 73 2e 20 20 49 6e 20 74 68 61 74 20  nters.  In that 
6fc0: 63 61 73 65 2c 20 6f 6e 6c 79 20 76 65 72 69 66  case, only verif
6fd0: 79 20 34 2d 62 79 74 65 20 61 6c 69 67 6e 6d 65  y 4-byte alignme
6fe0: 6e 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  nt..*/.#ifdef SQ
6ff0: 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47  LITE_4_BYTE_ALIG
7000: 4e 45 44 5f 4d 41 4c 4c 4f 43 0a 23 20 64 65 66  NED_MALLOC.# def
7010: 69 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41  ine EIGHT_BYTE_A
7020: 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28  LIGNMENT(X)   ((
7030: 28 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63  ((char*)(X) - (c
7040: 68 61 72 2a 29 30 29 26 33 29 3d 3d 30 29 0a 23  har*)0)&3)==0).#
7050: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 45 49  else.# define EI
7060: 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45  GHT_BYTE_ALIGNME
7070: 4e 54 28 58 29 20 20 20 28 28 28 28 63 68 61 72  NT(X)   ((((char
7080: 2a 29 28 58 29 20 2d 20 28 63 68 61 72 2a 29 30  *)(X) - (char*)0
7090: 29 26 37 29 3d 3d 30 29 0a 23 65 6e 64 69 66 0a  )&7)==0).#endif.
70a0: 0a 2f 2a 0a 2a 2a 20 44 69 73 61 62 6c 65 20 4d  ./*.** Disable M
70b0: 4d 41 50 20 6f 6e 20 70 6c 61 74 66 6f 72 6d 73  MAP on platforms
70c0: 20 77 68 65 72 65 20 69 74 20 69 73 20 6b 6e 6f   where it is kno
70d0: 77 6e 20 74 6f 20 6e 6f 74 20 77 6f 72 6b 0a 2a  wn to not work.*
70e0: 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f  /.#if defined(__
70f0: 4f 70 65 6e 42 53 44 5f 5f 29 20 7c 7c 20 64 65  OpenBSD__) || de
7100: 66 69 6e 65 64 28 5f 5f 51 4e 58 4e 54 4f 5f 5f  fined(__QNXNTO__
7110: 29 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  ).# undef SQLITE
7120: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23  _MAX_MMAP_SIZE.#
7130: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
7140: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23  AX_MMAP_SIZE 0.#
7150: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 66  endif../*.** Def
7160: 61 75 6c 74 20 6d 61 78 69 6d 75 6d 20 73 69 7a  ault maximum siz
7170: 65 20 6f 66 20 6d 65 6d 6f 72 79 20 75 73 65 64  e of memory used
7180: 20 62 79 20 6d 65 6d 6f 72 79 2d 6d 61 70 70 65   by memory-mappe
7190: 64 20 49 2f 4f 20 69 6e 20 74 68 65 20 56 46 53  d I/O in the VFS
71a0: 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 5f 41 50 50  .*/.#ifdef __APP
71b0: 4c 45 5f 5f 0a 23 20 69 6e 63 6c 75 64 65 20 3c  LE__.# include <
71c0: 54 61 72 67 65 74 43 6f 6e 64 69 74 69 6f 6e 61  TargetConditiona
71d0: 6c 73 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69 66  ls.h>.#endif.#if
71e0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  ndef SQLITE_MAX_
71f0: 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 69 66 20 64  MMAP_SIZE.# if d
7200: 65 66 69 6e 65 64 28 5f 5f 6c 69 6e 75 78 5f 5f  efined(__linux__
7210: 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64  ) \.  || defined
7220: 28 5f 57 49 4e 33 32 29 20 5c 0a 20 20 7c 7c 20  (_WIN32) \.  || 
7230: 28 64 65 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45  (defined(__APPLE
7240: 5f 5f 29 20 26 26 20 64 65 66 69 6e 65 64 28 5f  __) && defined(_
7250: 5f 4d 41 43 48 5f 5f 29 29 20 5c 0a 20 20 7c 7c  _MACH__)) \.  ||
7260: 20 64 65 66 69 6e 65 64 28 5f 5f 73 75 6e 29 20   defined(__sun) 
7270: 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  \.  || defined(_
7280: 5f 46 72 65 65 42 53 44 5f 5f 29 20 5c 0a 20 20  _FreeBSD__) \.  
7290: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 44 72 61  || defined(__Dra
72a0: 67 6f 6e 46 6c 79 5f 5f 29 0a 23 20 20 20 64 65  gonFly__).#   de
72b0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
72c0: 4d 4d 41 50 5f 53 49 5a 45 20 30 78 37 66 66 66  MMAP_SIZE 0x7fff
72d0: 30 30 30 30 20 20 2f 2a 20 32 31 34 37 34 31 38  0000  /* 2147418
72e0: 31 31 32 20 2a 2f 0a 23 20 65 6c 73 65 0a 23 20  112 */.# else.# 
72f0: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
7300: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a  MAX_MMAP_SIZE 0.
7310: 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65  # endif.# define
7320: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
7330: 5f 53 49 5a 45 5f 78 63 20 31 20 2f 2a 20 65 78  _SIZE_xc 1 /* ex
7340: 63 6c 75 64 65 20 66 72 6f 6d 20 63 74 69 6d 65  clude from ctime
7350: 2e 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a  .c */.#endif../*
7360: 0a 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20  .** The default 
7370: 4d 4d 41 50 5f 53 49 5a 45 20 69 73 20 7a 65 72  MMAP_SIZE is zer
7380: 6f 20 6f 6e 20 61 6c 6c 20 70 6c 61 74 66 6f 72  o on all platfor
7390: 6d 73 2e 20 20 4f 72 2c 20 65 76 65 6e 20 69 66  ms.  Or, even if
73a0: 20 61 20 6c 61 72 67 65 72 0a 2a 2a 20 64 65 66   a larger.** def
73b0: 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20 69  ault MMAP_SIZE i
73c0: 73 20 73 70 65 63 69 66 69 65 64 20 61 74 20 63  s specified at c
73d0: 6f 6d 70 69 6c 65 2d 74 69 6d 65 2c 20 6d 61 6b  ompile-time, mak
73e0: 65 20 73 75 72 65 20 74 68 61 74 20 69 74 20 64  e sure that it d
73f0: 6f 65 73 0a 2a 2a 20 6e 6f 74 20 65 78 63 65 65  oes.** not excee
7400: 64 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6d 6d  d the maximum mm
7410: 61 70 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66 6e  ap size..*/.#ifn
7420: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  def SQLITE_DEFAU
7430: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64  LT_MMAP_SIZE.# d
7440: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
7450: 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 20 30  AULT_MMAP_SIZE 0
7460: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
7470: 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49  _DEFAULT_MMAP_SI
7480: 5a 45 5f 78 63 20 31 20 20 2f 2a 20 45 78 63 6c  ZE_xc 1  /* Excl
7490: 75 64 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63  ude from ctime.c
74a0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 20 53   */.#endif.#if S
74b0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d  QLITE_DEFAULT_MM
74c0: 41 50 5f 53 49 5a 45 3e 53 51 4c 49 54 45 5f 4d  AP_SIZE>SQLITE_M
74d0: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 75  AX_MMAP_SIZE.# u
74e0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41  ndef SQLITE_DEFA
74f0: 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 20  ULT_MMAP_SIZE.# 
7500: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
7510: 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 20  FAULT_MMAP_SIZE 
7520: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
7530: 53 49 5a 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  SIZE.#endif../*.
7540: 2a 2a 20 4f 6e 6c 79 20 6f 6e 65 20 6f 66 20 53  ** Only one of S
7550: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
7560: 54 33 20 6f 72 20 53 51 4c 49 54 45 5f 45 4e 41  T3 or SQLITE_ENA
7570: 42 4c 45 5f 53 54 41 54 34 20 63 61 6e 20 62 65  BLE_STAT4 can be
7580: 20 64 65 66 69 6e 65 64 2e 0a 2a 2a 20 50 72 69   defined..** Pri
7590: 6f 72 69 74 79 20 69 73 20 67 69 76 65 6e 20 74  ority is given t
75a0: 6f 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  o SQLITE_ENABLE_
75b0: 53 54 41 54 34 2e 20 20 49 66 20 65 69 74 68 65  STAT4.  If eithe
75c0: 72 20 61 72 65 20 64 65 66 69 6e 65 64 2c 20 61  r are defined, a
75d0: 6c 73 6f 0a 2a 2a 20 64 65 66 69 6e 65 20 53 51  lso.** define SQ
75e0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
75f0: 33 5f 4f 52 5f 53 54 41 54 34 0a 2a 2f 0a 23 69  3_OR_STAT4.*/.#i
7600: 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
7610: 4c 45 5f 53 54 41 54 34 0a 23 20 75 6e 64 65 66  LE_STAT4.# undef
7620: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
7630: 54 41 54 33 0a 23 20 64 65 66 69 6e 65 20 53 51  TAT3.# define SQ
7640: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
7650: 33 5f 4f 52 5f 53 54 41 54 34 20 31 0a 23 65 6c  3_OR_STAT4 1.#el
7660: 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  if SQLITE_ENABLE
7670: 5f 53 54 41 54 33 0a 23 20 64 65 66 69 6e 65 20  _STAT3.# define 
7680: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
7690: 41 54 33 5f 4f 52 5f 53 54 41 54 34 20 31 0a 23  AT3_OR_STAT4 1.#
76a0: 65 6c 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  elif SQLITE_ENAB
76b0: 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
76c0: 34 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  4.# undef SQLITE
76d0: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
76e0: 5f 53 54 41 54 34 0a 23 65 6e 64 69 66 0a 0a 2f  _STAT4.#endif../
76f0: 2a 0a 2a 2a 20 53 45 4c 45 43 54 54 52 41 43 45  *.** SELECTTRACE
7700: 5f 45 4e 41 42 4c 45 44 20 77 69 6c 6c 20 62 65  _ENABLED will be
7710: 20 65 69 74 68 65 72 20 31 20 6f 72 20 30 20 64   either 1 or 0 d
7720: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74  epending on whet
7730: 68 65 72 20 6f 72 20 6e 6f 74 0a 2a 2a 20 74 68  her or not.** th
7740: 65 20 53 65 6c 65 63 74 20 71 75 65 72 79 20 67  e Select query g
7750: 65 6e 65 72 61 74 6f 72 20 74 72 61 63 69 6e 67  enerator tracing
7760: 20 6c 6f 67 69 63 20 69 73 20 74 75 72 6e 65 64   logic is turned
7770: 20 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69   on..*/.#if defi
7780: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
7790: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  ) || defined(SQL
77a0: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 45 4c 45 43  ITE_ENABLE_SELEC
77b0: 54 54 52 41 43 45 29 0a 23 20 64 65 66 69 6e 65  TTRACE).# define
77c0: 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41   SELECTTRACE_ENA
77d0: 42 4c 45 44 20 31 0a 23 65 6c 73 65 0a 23 20 64  BLED 1.#else.# d
77e0: 65 66 69 6e 65 20 53 45 4c 45 43 54 54 52 41 43  efine SELECTTRAC
77f0: 45 5f 45 4e 41 42 4c 45 44 20 30 0a 23 65 6e 64  E_ENABLED 0.#end
7800: 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  if../*.** An ins
7810: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
7820: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
7830: 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72   is used to stor
7840: 65 20 74 68 65 20 62 75 73 79 2d 68 61 6e 64 6c  e the busy-handl
7850: 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 66  er.** callback f
7860: 6f 72 20 61 20 67 69 76 65 6e 20 73 71 6c 69 74  or a given sqlit
7870: 65 20 68 61 6e 64 6c 65 2e 0a 2a 2a 0a 2a 2a 20  e handle..**.** 
7880: 54 68 65 20 73 71 6c 69 74 65 2e 62 75 73 79 48  The sqlite.busyH
7890: 61 6e 64 6c 65 72 20 6d 65 6d 62 65 72 20 6f 66  andler member of
78a0: 20 74 68 65 20 73 71 6c 69 74 65 20 73 74 72 75   the sqlite stru
78b0: 63 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  ct contains the 
78c0: 62 75 73 79 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b  busy.** callback
78d0: 20 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73   for the databas
78e0: 65 20 68 61 6e 64 6c 65 2e 20 45 61 63 68 20 70  e handle. Each p
78f0: 61 67 65 72 20 6f 70 65 6e 65 64 20 76 69 61 20  ager opened via 
7900: 74 68 65 20 73 71 6c 69 74 65 0a 2a 2a 20 68 61  the sqlite.** ha
7910: 6e 64 6c 65 20 69 73 20 70 61 73 73 65 64 20 61  ndle is passed a
7920: 20 70 6f 69 6e 74 65 72 20 74 6f 20 73 71 6c 69   pointer to sqli
7930: 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72 2e 20  te.busyHandler. 
7940: 54 68 65 20 62 75 73 79 2d 68 61 6e 64 6c 65 72  The busy-handler
7950: 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 69 73 20  .** callback is 
7960: 63 75 72 72 65 6e 74 6c 79 20 69 6e 76 6f 6b 65  currently invoke
7970: 64 20 6f 6e 6c 79 20 66 72 6f 6d 20 77 69 74 68  d only from with
7980: 69 6e 20 70 61 67 65 72 2e 63 2e 0a 2a 2f 0a 74  in pager.c..*/.t
7990: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 42 75  ypedef struct Bu
79a0: 73 79 48 61 6e 64 6c 65 72 20 42 75 73 79 48 61  syHandler BusyHa
79b0: 6e 64 6c 65 72 3b 0a 73 74 72 75 63 74 20 42 75  ndler;.struct Bu
79c0: 73 79 48 61 6e 64 6c 65 72 20 7b 0a 20 20 69 6e  syHandler {.  in
79d0: 74 20 28 2a 78 46 75 6e 63 29 28 76 6f 69 64 20  t (*xFunc)(void 
79e0: 2a 2c 69 6e 74 29 3b 20 20 2f 2a 20 54 68 65 20  *,int);  /* The 
79f0: 62 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  busy callback */
7a00: 0a 20 20 76 6f 69 64 20 2a 70 41 72 67 3b 20 20  .  void *pArg;  
7a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
7a20: 20 46 69 72 73 74 20 61 72 67 20 74 6f 20 62 75   First arg to bu
7a30: 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  sy callback */. 
7a40: 20 69 6e 74 20 6e 42 75 73 79 3b 20 20 20 20 20   int nBusy;     
7a50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
7a60: 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20  ncremented with 
7a70: 65 61 63 68 20 62 75 73 79 20 63 61 6c 6c 20 2a  each busy call *
7a80: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65  /.};../*.** Name
7a90: 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64   of the master d
7aa0: 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e 20 20  atabase table.  
7ab0: 54 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62  The master datab
7ac0: 61 73 65 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20  ase table.** is 
7ad0: 61 20 73 70 65 63 69 61 6c 20 74 61 62 6c 65 20  a special table 
7ae0: 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 6e  that holds the n
7af0: 61 6d 65 73 20 61 6e 64 20 61 74 74 72 69 62 75  ames and attribu
7b00: 74 65 73 20 6f 66 20 61 6c 6c 0a 2a 2a 20 75 73  tes of all.** us
7b10: 65 72 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e  er tables and in
7b20: 64 69 63 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  dices..*/.#defin
7b30: 65 20 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 20  e MASTER_NAME   
7b40: 20 20 20 20 22 73 71 6c 69 74 65 5f 6d 61 73 74      "sqlite_mast
7b50: 65 72 22 0a 23 64 65 66 69 6e 65 20 54 45 4d 50  er".#define TEMP
7b60: 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 20 20 22 73  _MASTER_NAME  "s
7b70: 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65  qlite_temp_maste
7b80: 72 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 6f  r"../*.** The ro
7b90: 6f 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20 6d  ot-page of the m
7ba0: 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74  aster database t
7bb0: 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  able..*/.#define
7bc0: 20 4d 41 53 54 45 52 5f 52 4f 4f 54 20 20 20 20   MASTER_ROOT    
7bd0: 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20     1../*.** The 
7be0: 6e 61 6d 65 20 6f 66 20 74 68 65 20 73 63 68 65  name of the sche
7bf0: 6d 61 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64 65  ma table..*/.#de
7c00: 66 69 6e 65 20 53 43 48 45 4d 41 5f 54 41 42 4c  fine SCHEMA_TABL
7c10: 45 28 78 29 20 20 28 28 21 4f 4d 49 54 5f 54 45  E(x)  ((!OMIT_TE
7c20: 4d 50 44 42 29 26 26 28 78 3d 3d 31 29 3f 54 45  MPDB)&&(x==1)?TE
7c30: 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d 45 3a 4d  MP_MASTER_NAME:M
7c40: 41 53 54 45 52 5f 4e 41 4d 45 29 0a 0a 2f 2a 0a  ASTER_NAME)../*.
7c50: 2a 2a 20 41 20 63 6f 6e 76 65 6e 69 65 6e 63 65  ** A convenience
7c60: 20 6d 61 63 72 6f 20 74 68 61 74 20 72 65 74 75   macro that retu
7c70: 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  rns the number o
7c80: 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 0a 2a 2a  f elements in.**
7c90: 20 61 6e 20 61 72 72 61 79 2e 0a 2a 2f 0a 23 64   an array..*/.#d
7ca0: 65 66 69 6e 65 20 41 72 72 61 79 53 69 7a 65 28  efine ArraySize(
7cb0: 58 29 20 20 20 20 28 28 69 6e 74 29 28 73 69 7a  X)    ((int)(siz
7cc0: 65 6f 66 28 58 29 2f 73 69 7a 65 6f 66 28 58 5b  eof(X)/sizeof(X[
7cd0: 30 5d 29 29 29 0a 0a 2f 2a 0a 2a 2a 20 44 65 74  0])))../*.** Det
7ce0: 65 72 6d 69 6e 65 20 69 66 20 74 68 65 20 61 72  ermine if the ar
7cf0: 67 75 6d 65 6e 74 20 69 73 20 61 20 70 6f 77 65  gument is a powe
7d00: 72 20 6f 66 20 74 77 6f 0a 2a 2f 0a 23 64 65 66  r of two.*/.#def
7d10: 69 6e 65 20 49 73 50 6f 77 65 72 4f 66 54 77 6f  ine IsPowerOfTwo
7d20: 28 58 29 20 28 28 28 58 29 26 28 28 58 29 2d 31  (X) (((X)&((X)-1
7d30: 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 54 68  ))==0)../*.** Th
7d40: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 6c 75  e following valu
7d50: 65 20 61 73 20 61 20 64 65 73 74 72 75 63 74 6f  e as a destructo
7d60: 72 20 6d 65 61 6e 73 20 74 6f 20 75 73 65 20 73  r means to use s
7d70: 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 2e 0a  qlite3DbFree()..
7d80: 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 33 44 62  ** The sqlite3Db
7d90: 46 72 65 65 28 29 20 72 6f 75 74 69 6e 65 20 72  Free() routine r
7da0: 65 71 75 69 72 65 73 20 74 77 6f 20 70 61 72 61  equires two para
7db0: 6d 65 74 65 72 73 20 69 6e 73 74 65 61 64 20 6f  meters instead o
7dc0: 66 20 74 68 65 0a 2a 2a 20 6f 6e 65 20 70 61 72  f the.** one par
7dd0: 61 6d 65 74 65 72 20 74 68 61 74 20 64 65 73 74  ameter that dest
7de0: 72 75 63 74 6f 72 73 20 6e 6f 72 6d 61 6c 6c 79  ructors normally
7df0: 20 77 61 6e 74 2e 20 20 53 6f 20 77 65 20 68 61   want.  So we ha
7e00: 76 65 20 74 6f 20 69 6e 74 72 6f 64 75 63 65 0a  ve to introduce.
7e10: 2a 2a 20 74 68 69 73 20 6d 61 67 69 63 20 76 61  ** this magic va
7e20: 6c 75 65 20 74 68 61 74 20 74 68 65 20 63 6f 64  lue that the cod
7e30: 65 20 6b 6e 6f 77 73 20 74 6f 20 68 61 6e 64 6c  e knows to handl
7e40: 65 20 64 69 66 66 65 72 65 6e 74 6c 79 2e 20 20  e differently.  
7e50: 41 6e 79 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 77  Any.** pointer w
7e60: 69 6c 6c 20 77 6f 72 6b 20 68 65 72 65 20 61 73  ill work here as
7e70: 20 6c 6f 6e 67 20 61 73 20 69 74 20 69 73 20 64   long as it is d
7e80: 69 73 74 69 6e 63 74 20 66 72 6f 6d 20 53 51 4c  istinct from SQL
7e90: 49 54 45 5f 53 54 41 54 49 43 0a 2a 2a 20 61 6e  ITE_STATIC.** an
7ea0: 64 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45  d SQLITE_TRANSIE
7eb0: 4e 54 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  NT..*/.#define S
7ec0: 51 4c 49 54 45 5f 44 59 4e 41 4d 49 43 20 20 20  QLITE_DYNAMIC   
7ed0: 28 28 73 71 6c 69 74 65 33 5f 64 65 73 74 72 75  ((sqlite3_destru
7ee0: 63 74 6f 72 5f 74 79 70 65 29 73 71 6c 69 74 65  ctor_type)sqlite
7ef0: 33 4d 61 6c 6c 6f 63 53 69 7a 65 29 0a 0a 2f 2a  3MallocSize)../*
7f00: 0a 2a 2a 20 57 68 65 6e 20 53 51 4c 49 54 45 5f  .** When SQLITE_
7f10: 4f 4d 49 54 5f 57 53 44 20 69 73 20 64 65 66 69  OMIT_WSD is defi
7f20: 6e 65 64 2c 20 69 74 20 6d 65 61 6e 73 20 74 68  ned, it means th
7f30: 61 74 20 74 68 65 20 74 61 72 67 65 74 20 70 6c  at the target pl
7f40: 61 74 66 6f 72 6d 20 64 6f 65 73 0a 2a 2a 20 6e  atform does.** n
7f50: 6f 74 20 73 75 70 70 6f 72 74 20 57 72 69 74 61  ot support Writa
7f60: 62 6c 65 20 53 74 61 74 69 63 20 44 61 74 61 20  ble Static Data 
7f70: 28 57 53 44 29 20 73 75 63 68 20 61 73 20 67 6c  (WSD) such as gl
7f80: 6f 62 61 6c 20 61 6e 64 20 73 74 61 74 69 63 20  obal and static 
7f90: 76 61 72 69 61 62 6c 65 73 2e 0a 2a 2a 20 41 6c  variables..** Al
7fa0: 6c 20 76 61 72 69 61 62 6c 65 73 20 6d 75 73 74  l variables must
7fb0: 20 65 69 74 68 65 72 20 62 65 20 6f 6e 20 74 68   either be on th
7fc0: 65 20 73 74 61 63 6b 20 6f 72 20 64 79 6e 61 6d  e stack or dynam
7fd0: 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64  ically allocated
7fe0: 20 66 72 6f 6d 0a 2a 2a 20 74 68 65 20 68 65 61   from.** the hea
7ff0: 70 2e 20 20 57 68 65 6e 20 57 53 44 20 69 73 20  p.  When WSD is 
8000: 75 6e 73 75 70 70 6f 72 74 65 64 2c 20 74 68 65  unsupported, the
8010: 20 76 61 72 69 61 62 6c 65 20 64 65 63 6c 61 72   variable declar
8020: 61 74 69 6f 6e 73 20 73 63 61 74 74 65 72 65 64  ations scattered
8030: 0a 2a 2a 20 74 68 72 6f 75 67 68 6f 75 74 20 74  .** throughout t
8040: 68 65 20 53 51 4c 69 74 65 20 63 6f 64 65 20 6d  he SQLite code m
8050: 75 73 74 20 62 65 63 6f 6d 65 20 63 6f 6e 73 74  ust become const
8060: 61 6e 74 73 20 69 6e 73 74 65 61 64 2e 20 20 54  ants instead.  T
8070: 68 65 20 53 51 4c 49 54 45 5f 57 53 44 0a 2a 2a  he SQLITE_WSD.**
8080: 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 66   macro is used f
8090: 6f 72 20 74 68 69 73 20 70 75 72 70 6f 73 65 2e  or this purpose.
80a0: 20 20 41 6e 64 20 69 6e 73 74 65 61 64 20 6f 66    And instead of
80b0: 20 72 65 66 65 72 65 6e 63 69 6e 67 20 74 68 65   referencing the
80c0: 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20 64 69 72   variable.** dir
80d0: 65 63 74 6c 79 2c 20 77 65 20 75 73 65 20 69 74  ectly, we use it
80e0: 73 20 63 6f 6e 73 74 61 6e 74 20 61 73 20 61 20  s constant as a 
80f0: 6b 65 79 20 74 6f 20 6c 6f 6f 6b 75 70 20 74 68  key to lookup th
8100: 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63  e run-time alloc
8110: 61 74 65 64 0a 2a 2a 20 62 75 66 66 65 72 20 74  ated.** buffer t
8120: 68 61 74 20 68 6f 6c 64 73 20 72 65 61 6c 20 76  hat holds real v
8130: 61 72 69 61 62 6c 65 2e 20 20 54 68 65 20 63 6f  ariable.  The co
8140: 6e 73 74 61 6e 74 20 69 73 20 61 6c 73 6f 20 74  nstant is also t
8150: 68 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 0a 2a  he initializer.*
8160: 2a 20 66 6f 72 20 74 68 65 20 72 75 6e 2d 74 69  * for the run-ti
8170: 6d 65 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66  me allocated buf
8180: 66 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68  fer..**.** In th
8190: 65 20 75 73 75 61 6c 20 63 61 73 65 20 77 68 65  e usual case whe
81a0: 72 65 20 57 53 44 20 69 73 20 73 75 70 70 6f 72  re WSD is suppor
81b0: 74 65 64 2c 20 74 68 65 20 53 51 4c 49 54 45 5f  ted, the SQLITE_
81c0: 57 53 44 20 61 6e 64 20 47 4c 4f 42 41 4c 0a 2a  WSD and GLOBAL.*
81d0: 2a 20 6d 61 63 72 6f 73 20 62 65 63 6f 6d 65 20  * macros become 
81e0: 6e 6f 2d 6f 70 73 20 61 6e 64 20 68 61 76 65 20  no-ops and have 
81f0: 7a 65 72 6f 20 70 65 72 66 6f 72 6d 61 6e 63 65  zero performance
8200: 20 69 6d 70 61 63 74 2e 0a 2a 2f 0a 23 69 66 64   impact..*/.#ifd
8210: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
8220: 53 44 0a 20 20 23 64 65 66 69 6e 65 20 53 51 4c  SD.  #define SQL
8230: 49 54 45 5f 57 53 44 20 63 6f 6e 73 74 0a 20 20  ITE_WSD const.  
8240: 23 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74  #define GLOBAL(t
8250: 2c 76 29 20 28 2a 28 74 2a 29 73 71 6c 69 74 65  ,v) (*(t*)sqlite
8260: 33 5f 77 73 64 5f 66 69 6e 64 28 28 76 6f 69 64  3_wsd_find((void
8270: 2a 29 26 28 76 29 2c 20 73 69 7a 65 6f 66 28 76  *)&(v), sizeof(v
8280: 29 29 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ))).  #define sq
8290: 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
82a0: 67 20 47 4c 4f 42 41 4c 28 73 74 72 75 63 74 20  g GLOBAL(struct 
82b0: 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 2c 20 73  Sqlite3Config, s
82c0: 71 6c 69 74 65 33 43 6f 6e 66 69 67 29 0a 20 20  qlite3Config).  
82d0: 69 6e 74 20 73 71 6c 69 74 65 33 5f 77 73 64 5f  int sqlite3_wsd_
82e0: 69 6e 69 74 28 69 6e 74 20 4e 2c 20 69 6e 74 20  init(int N, int 
82f0: 4a 29 3b 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69  J);.  void *sqli
8300: 74 65 33 5f 77 73 64 5f 66 69 6e 64 28 76 6f 69  te3_wsd_find(voi
8310: 64 20 2a 4b 2c 20 69 6e 74 20 4c 29 3b 0a 23 65  d *K, int L);.#e
8320: 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 53 51  lse.  #define SQ
8330: 4c 49 54 45 5f 57 53 44 0a 20 20 23 64 65 66 69  LITE_WSD.  #defi
8340: 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 76  ne GLOBAL(t,v) v
8350: 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
8360: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 73  e3GlobalConfig s
8370: 71 6c 69 74 65 33 43 6f 6e 66 69 67 0a 23 65 6e  qlite3Config.#en
8380: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  dif../*.** The f
8390: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
83a0: 61 72 65 20 75 73 65 64 20 74 6f 20 73 75 70 70  are used to supp
83b0: 72 65 73 73 20 63 6f 6d 70 69 6c 65 72 20 77 61  ress compiler wa
83c0: 72 6e 69 6e 67 73 20 61 6e 64 20 74 6f 0a 2a 2a  rnings and to.**
83d0: 20 6d 61 6b 65 20 69 74 20 63 6c 65 61 72 20 74   make it clear t
83e0: 6f 20 68 75 6d 61 6e 20 72 65 61 64 65 72 73 20  o human readers 
83f0: 77 68 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20  when a function 
8400: 70 61 72 61 6d 65 74 65 72 20 69 73 20 64 65 6c  parameter is del
8410: 69 62 65 72 61 74 65 6c 79 0a 2a 2a 20 6c 65 66  iberately.** lef
8420: 74 20 75 6e 75 73 65 64 20 77 69 74 68 69 6e 20  t unused within 
8430: 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75  the body of a fu
8440: 6e 63 74 69 6f 6e 2e 20 54 68 69 73 20 75 73 75  nction. This usu
8450: 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 77 68 65  ally happens whe
8460: 6e 0a 2a 2a 20 61 20 66 75 6e 63 74 69 6f 6e 20  n.** a function 
8470: 69 73 20 63 61 6c 6c 65 64 20 76 69 61 20 61 20  is called via a 
8480: 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72  function pointer
8490: 2e 20 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68  . For example th
84a0: 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74  e.** implementat
84b0: 69 6f 6e 20 6f 66 20 61 6e 20 53 51 4c 20 61 67  ion of an SQL ag
84c0: 67 72 65 67 61 74 65 20 73 74 65 70 20 63 61 6c  gregate step cal
84d0: 6c 62 61 63 6b 20 6d 61 79 20 6e 6f 74 20 75 73  lback may not us
84e0: 65 20 74 68 65 0a 2a 2a 20 70 61 72 61 6d 65 74  e the.** paramet
84f0: 65 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68  er indicating th
8500: 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  e number of argu
8510: 6d 65 6e 74 73 20 70 61 73 73 65 64 20 74 6f 20  ments passed to 
8520: 74 68 65 20 61 67 67 72 65 67 61 74 65 2c 0a 2a  the aggregate,.*
8530: 2a 20 69 66 20 69 74 20 6b 6e 6f 77 73 20 74 68  * if it knows th
8540: 61 74 20 74 68 69 73 20 69 73 20 65 6e 66 6f 72  at this is enfor
8550: 63 65 64 20 65 6c 73 65 77 68 65 72 65 2e 0a 2a  ced elsewhere..*
8560: 2a 0a 2a 2a 20 57 68 65 6e 20 61 20 66 75 6e 63  *.** When a func
8570: 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69  tion parameter i
8580: 73 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c  s not used at al
8590: 6c 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64  l within the bod
85a0: 79 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2c  y of a function,
85b0: 0a 2a 2a 20 69 74 20 69 73 20 67 65 6e 65 72 61  .** it is genera
85c0: 6c 6c 79 20 6e 61 6d 65 64 20 22 4e 6f 74 55 73  lly named "NotUs
85d0: 65 64 22 20 6f 72 20 22 4e 6f 74 55 73 65 64 32  ed" or "NotUsed2
85e0: 22 20 74 6f 20 6d 61 6b 65 20 74 68 69 6e 67 73  " to make things
85f0: 20 65 76 65 6e 20 63 6c 65 61 72 65 72 2e 0a 2a   even clearer..*
8600: 2a 20 48 6f 77 65 76 65 72 2c 20 74 68 65 73 65  * However, these
8610: 20 6d 61 63 72 6f 73 20 6d 61 79 20 61 6c 73 6f   macros may also
8620: 20 62 65 20 75 73 65 64 20 74 6f 20 73 75 70 70   be used to supp
8630: 72 65 73 73 20 77 61 72 6e 69 6e 67 73 20 72 65  ress warnings re
8640: 6c 61 74 65 64 20 74 6f 0a 2a 2a 20 70 61 72 61  lated to.** para
8650: 6d 65 74 65 72 73 20 74 68 61 74 20 6d 61 79 20  meters that may 
8660: 6f 72 20 6d 61 79 20 6e 6f 74 20 62 65 20 75 73  or may not be us
8670: 65 64 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  ed depending on 
8680: 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 70 74 69  compilation opti
8690: 6f 6e 73 2e 0a 2a 2a 20 46 6f 72 20 65 78 61 6d  ons..** For exam
86a0: 70 6c 65 20 74 68 6f 73 65 20 70 61 72 61 6d 65  ple those parame
86b0: 74 65 72 73 20 6f 6e 6c 79 20 75 73 65 64 20 69  ters only used i
86c0: 6e 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  n assert() state
86d0: 6d 65 6e 74 73 2e 20 49 6e 20 74 68 65 73 65 0a  ments. In these.
86e0: 2a 2a 20 63 61 73 65 73 20 74 68 65 20 70 61 72  ** cases the par
86f0: 61 6d 65 74 65 72 73 20 61 72 65 20 6e 61 6d 65  ameters are name
8700: 64 20 61 73 20 70 65 72 20 74 68 65 20 75 73 75  d as per the usu
8710: 61 6c 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2e 0a  al conventions..
8720: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45  */.#define UNUSE
8730: 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29 20 28  D_PARAMETER(x) (
8740: 76 6f 69 64 29 28 78 29 0a 23 64 65 66 69 6e 65  void)(x).#define
8750: 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45   UNUSED_PARAMETE
8760: 52 32 28 78 2c 79 29 20 55 4e 55 53 45 44 5f 50  R2(x,y) UNUSED_P
8770: 41 52 41 4d 45 54 45 52 28 78 29 2c 55 4e 55 53  ARAMETER(x),UNUS
8780: 45 44 5f 50 41 52 41 4d 45 54 45 52 28 79 29 0a  ED_PARAMETER(y).
8790: 0a 2f 2a 0a 2a 2a 20 46 6f 72 77 61 72 64 20 72  ./*.** Forward r
87a0: 65 66 65 72 65 6e 63 65 73 20 74 6f 20 73 74 72  eferences to str
87b0: 75 63 74 75 72 65 73 0a 2a 2f 0a 74 79 70 65 64  uctures.*/.typed
87c0: 65 66 20 73 74 72 75 63 74 20 41 67 67 49 6e 66  ef struct AggInf
87d0: 6f 20 41 67 67 49 6e 66 6f 3b 0a 74 79 70 65 64  o AggInfo;.typed
87e0: 65 66 20 73 74 72 75 63 74 20 41 75 74 68 43 6f  ef struct AuthCo
87f0: 6e 74 65 78 74 20 41 75 74 68 43 6f 6e 74 65 78  ntext AuthContex
8800: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
8810: 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 41 75  t AutoincInfo Au
8820: 74 6f 69 6e 63 49 6e 66 6f 3b 0a 74 79 70 65 64  toincInfo;.typed
8830: 65 66 20 73 74 72 75 63 74 20 42 69 74 76 65 63  ef struct Bitvec
8840: 20 42 69 74 76 65 63 3b 0a 74 79 70 65 64 65 66   Bitvec;.typedef
8850: 20 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20   struct CollSeq 
8860: 43 6f 6c 6c 53 65 71 3b 0a 74 79 70 65 64 65 66  CollSeq;.typedef
8870: 20 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 43   struct Column C
8880: 6f 6c 75 6d 6e 3b 0a 74 79 70 65 64 65 66 20 73  olumn;.typedef s
8890: 74 72 75 63 74 20 44 62 20 44 62 3b 0a 74 79 70  truct Db Db;.typ
88a0: 65 64 65 66 20 73 74 72 75 63 74 20 53 63 68 65  edef struct Sche
88b0: 6d 61 20 53 63 68 65 6d 61 3b 0a 74 79 70 65 64  ma Schema;.typed
88c0: 65 66 20 73 74 72 75 63 74 20 45 78 70 72 20 45  ef struct Expr E
88d0: 78 70 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72  xpr;.typedef str
88e0: 75 63 74 20 45 78 70 72 4c 69 73 74 20 45 78 70  uct ExprList Exp
88f0: 72 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73  rList;.typedef s
8900: 74 72 75 63 74 20 45 78 70 72 53 70 61 6e 20 45  truct ExprSpan E
8910: 78 70 72 53 70 61 6e 3b 0a 74 79 70 65 64 65 66  xprSpan;.typedef
8920: 20 73 74 72 75 63 74 20 46 4b 65 79 20 46 4b 65   struct FKey FKe
8930: 79 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  y;.typedef struc
8940: 74 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72  t FuncDestructor
8950: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 3b   FuncDestructor;
8960: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8970: 46 75 6e 63 44 65 66 20 46 75 6e 63 44 65 66 3b  FuncDef FuncDef;
8980: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8990: 46 75 6e 63 44 65 66 48 61 73 68 20 46 75 6e 63  FuncDefHash Func
89a0: 44 65 66 48 61 73 68 3b 0a 74 79 70 65 64 65 66  DefHash;.typedef
89b0: 20 73 74 72 75 63 74 20 49 64 4c 69 73 74 20 49   struct IdList I
89c0: 64 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20 73  dList;.typedef s
89d0: 74 72 75 63 74 20 49 6e 64 65 78 20 49 6e 64 65  truct Index Inde
89e0: 78 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  x;.typedef struc
89f0: 74 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 49 6e  t IndexSample In
8a00: 64 65 78 53 61 6d 70 6c 65 3b 0a 74 79 70 65 64  dexSample;.typed
8a10: 65 66 20 73 74 72 75 63 74 20 4b 65 79 43 6c 61  ef struct KeyCla
8a20: 73 73 20 4b 65 79 43 6c 61 73 73 3b 0a 74 79 70  ss KeyClass;.typ
8a30: 65 64 65 66 20 73 74 72 75 63 74 20 4b 65 79 49  edef struct KeyI
8a40: 6e 66 6f 20 4b 65 79 49 6e 66 6f 3b 0a 74 79 70  nfo KeyInfo;.typ
8a50: 65 64 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b  edef struct Look
8a60: 61 73 69 64 65 20 4c 6f 6f 6b 61 73 69 64 65 3b  aside Lookaside;
8a70: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8a80: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 4c 6f  LookasideSlot Lo
8a90: 6f 6b 61 73 69 64 65 53 6c 6f 74 3b 0a 74 79 70  okasideSlot;.typ
8aa0: 65 64 65 66 20 73 74 72 75 63 74 20 4d 6f 64 75  edef struct Modu
8ab0: 6c 65 20 4d 6f 64 75 6c 65 3b 0a 74 79 70 65 64  le Module;.typed
8ac0: 65 66 20 73 74 72 75 63 74 20 4e 61 6d 65 43 6f  ef struct NameCo
8ad0: 6e 74 65 78 74 20 4e 61 6d 65 43 6f 6e 74 65 78  ntext NameContex
8ae0: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
8af0: 74 20 50 61 72 73 65 20 50 61 72 73 65 3b 0a 74  t Parse Parse;.t
8b00: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 50 72  ypedef struct Pr
8b10: 65 55 70 64 61 74 65 20 50 72 65 55 70 64 61 74  eUpdate PreUpdat
8b20: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
8b30: 74 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74  t PrintfArgument
8b40: 73 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74  s PrintfArgument
8b50: 73 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  s;.typedef struc
8b60: 74 20 52 6f 77 53 65 74 20 52 6f 77 53 65 74 3b  t RowSet RowSet;
8b70: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8b80: 53 61 76 65 70 6f 69 6e 74 20 53 61 76 65 70 6f  Savepoint Savepo
8b90: 69 6e 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  int;.typedef str
8ba0: 75 63 74 20 53 65 6c 65 63 74 20 53 65 6c 65 63  uct Select Selec
8bb0: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
8bc0: 74 20 53 51 4c 69 74 65 54 68 72 65 61 64 20 53  t SQLiteThread S
8bd0: 51 4c 69 74 65 54 68 72 65 61 64 3b 0a 74 79 70  QLiteThread;.typ
8be0: 65 64 65 66 20 73 74 72 75 63 74 20 53 65 6c 65  edef struct Sele
8bf0: 63 74 44 65 73 74 20 53 65 6c 65 63 74 44 65 73  ctDest SelectDes
8c00: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
8c10: 74 20 53 72 63 4c 69 73 74 20 53 72 63 4c 69 73  t SrcList SrcLis
8c20: 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  t;.typedef struc
8c30: 74 20 53 74 72 41 63 63 75 6d 20 53 74 72 41 63  t StrAccum StrAc
8c40: 63 75 6d 3b 0a 74 79 70 65 64 65 66 20 73 74 72  cum;.typedef str
8c50: 75 63 74 20 54 61 62 6c 65 20 54 61 62 6c 65 3b  uct Table Table;
8c60: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8c70: 54 61 62 6c 65 4c 6f 63 6b 20 54 61 62 6c 65 4c  TableLock TableL
8c80: 6f 63 6b 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ock;.typedef str
8c90: 75 63 74 20 54 6f 6b 65 6e 20 54 6f 6b 65 6e 3b  uct Token Token;
8ca0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8cb0: 54 72 65 65 56 69 65 77 20 54 72 65 65 56 69 65  TreeView TreeVie
8cc0: 77 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  w;.typedef struc
8cd0: 74 20 54 72 69 67 67 65 72 20 54 72 69 67 67 65  t Trigger Trigge
8ce0: 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  r;.typedef struc
8cf0: 74 20 54 72 69 67 67 65 72 50 72 67 20 54 72 69  t TriggerPrg Tri
8d00: 67 67 65 72 50 72 67 3b 0a 74 79 70 65 64 65 66  ggerPrg;.typedef
8d10: 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53   struct TriggerS
8d20: 74 65 70 20 54 72 69 67 67 65 72 53 74 65 70 3b  tep TriggerStep;
8d30: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8d40: 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 55  UnpackedRecord U
8d50: 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 3b 0a 74  npackedRecord;.t
8d60: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 56 54  ypedef struct VT
8d70: 61 62 6c 65 20 56 54 61 62 6c 65 3b 0a 74 79 70  able VTable;.typ
8d80: 65 64 65 66 20 73 74 72 75 63 74 20 56 74 61 62  edef struct Vtab
8d90: 43 74 78 20 56 74 61 62 43 74 78 3b 0a 74 79 70  Ctx VtabCtx;.typ
8da0: 65 64 65 66 20 73 74 72 75 63 74 20 57 61 6c 6b  edef struct Walk
8db0: 65 72 20 57 61 6c 6b 65 72 3b 0a 74 79 70 65 64  er Walker;.typed
8dc0: 65 66 20 73 74 72 75 63 74 20 57 68 65 72 65 49  ef struct WhereI
8dd0: 6e 66 6f 20 57 68 65 72 65 49 6e 66 6f 3b 0a 74  nfo WhereInfo;.t
8de0: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57 69  ypedef struct Wi
8df0: 74 68 20 57 69 74 68 3b 0a 0a 2f 2a 20 41 20 56  th With;../* A V
8e00: 4c 69 73 74 20 6f 62 6a 65 63 74 20 72 65 63 6f  List object reco
8e10: 72 64 73 20 61 20 6d 61 70 70 69 6e 67 20 62 65  rds a mapping be
8e20: 74 77 65 65 6e 20 70 61 72 61 6d 65 74 65 72 73  tween parameters
8e30: 2f 76 61 72 69 61 62 6c 65 73 2f 77 69 6c 64 63  /variables/wildc
8e40: 61 72 64 73 0a 2a 2a 20 69 6e 20 74 68 65 20 53  ards.** in the S
8e50: 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 28 73 75  QL statement (su
8e60: 63 68 20 61 73 20 24 61 62 63 2c 20 40 70 71 72  ch as $abc, @pqr
8e70: 2c 20 6f 72 20 3a 78 79 7a 29 20 61 6e 64 20 74  , or :xyz) and t
8e80: 68 65 20 69 6e 74 65 67 65 72 0a 2a 2a 20 76 61  he integer.** va
8e90: 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 61 73  riable number as
8ea0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
8eb0: 61 74 20 70 61 72 61 6d 65 74 65 72 2e 20 20 53  at parameter.  S
8ec0: 65 65 20 74 68 65 20 66 6f 72 6d 61 74 20 64 65  ee the format de
8ed0: 73 63 72 69 70 74 69 6f 6e 0a 2a 2a 20 6f 6e 20  scription.** on 
8ee0: 74 68 65 20 73 71 6c 69 74 65 33 56 4c 69 73 74  the sqlite3VList
8ef0: 41 64 64 28 29 20 72 6f 75 74 69 6e 65 20 66 6f  Add() routine fo
8f00: 72 20 6d 6f 72 65 20 69 6e 66 6f 72 6d 61 74 69  r more informati
8f10: 6f 6e 2e 20 20 41 20 56 4c 69 73 74 20 69 73 20  on.  A VList is 
8f20: 72 65 61 6c 6c 79 0a 2a 2a 20 6a 75 73 74 20 61  really.** just a
8f30: 6e 20 61 72 72 61 79 20 6f 66 20 69 6e 74 65 67  n array of integ
8f40: 65 72 73 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  ers..*/.typedef 
8f50: 69 6e 74 20 56 4c 69 73 74 3b 0a 0a 2f 2a 0a 2a  int VList;../*.*
8f60: 2a 20 44 65 66 65 72 20 73 6f 75 72 63 69 6e 67  * Defer sourcing
8f70: 20 76 64 62 65 2e 68 20 61 6e 64 20 62 74 72 65   vdbe.h and btre
8f80: 65 2e 68 20 75 6e 74 69 6c 20 61 66 74 65 72 20  e.h until after 
8f90: 74 68 65 20 22 75 38 22 20 61 6e 64 0a 2a 2a 20  the "u8" and.** 
8fa0: 22 42 75 73 79 48 61 6e 64 6c 65 72 22 20 74 79  "BusyHandler" ty
8fb0: 70 65 64 65 66 73 2e 20 76 64 62 65 2e 68 20 61  pedefs. vdbe.h a
8fc0: 6c 73 6f 20 72 65 71 75 69 72 65 73 20 61 20 66  lso requires a f
8fd0: 65 77 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65  ew of the opaque
8fe0: 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74 79 70 65  .** pointer type
8ff0: 73 20 28 69 2e 65 2e 20 46 75 6e 63 44 65 66 29  s (i.e. FuncDef)
9000: 20 64 65 66 69 6e 65 64 20 61 62 6f 76 65 2e 0a   defined above..
9010: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 62 74 72  */.#include "btr
9020: 65 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22  ee.h".#include "
9030: 76 64 62 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65  vdbe.h".#include
9040: 20 22 70 61 67 65 72 2e 68 22 0a 23 69 6e 63 6c   "pager.h".#incl
9050: 75 64 65 20 22 70 63 61 63 68 65 2e 68 22 0a 23  ude "pcache.h".#
9060: 69 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23  include "os.h".#
9070: 69 6e 63 6c 75 64 65 20 22 6d 75 74 65 78 2e 68  include "mutex.h
9080: 22 0a 0a 2f 2a 20 54 68 65 20 53 51 4c 49 54 45  "../* The SQLITE
9090: 5f 45 58 54 52 41 5f 44 55 52 41 42 4c 45 20 63  _EXTRA_DURABLE c
90a0: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
90b0: 6f 6e 20 75 73 65 64 20 74 6f 20 73 65 74 20 74  on used to set t
90c0: 68 65 20 64 65 66 61 75 6c 74 0a 2a 2a 20 73 79  he default.** sy
90d0: 6e 63 68 72 6f 6e 6f 75 73 20 73 65 74 74 69 6e  nchronous settin
90e0: 67 20 74 6f 20 45 58 54 52 41 2e 20 20 49 74 20  g to EXTRA.  It 
90f0: 69 73 20 6e 6f 20 6c 6f 6e 67 65 72 20 73 75 70  is no longer sup
9100: 70 6f 72 74 65 64 2e 0a 2a 2f 0a 23 69 66 64 65  ported..*/.#ifde
9110: 66 20 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44  f SQLITE_EXTRA_D
9120: 55 52 41 42 4c 45 0a 23 20 77 61 72 6e 69 6e 67  URABLE.# warning
9130: 20 55 73 65 20 53 51 4c 49 54 45 5f 44 45 46 41   Use SQLITE_DEFA
9140: 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 3d  ULT_SYNCHRONOUS=
9150: 33 20 69 6e 73 74 65 61 64 20 6f 66 20 53 51 4c  3 instead of SQL
9160: 49 54 45 5f 45 58 54 52 41 5f 44 55 52 41 42 4c  ITE_EXTRA_DURABL
9170: 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  E.# define SQLIT
9180: 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52  E_DEFAULT_SYNCHR
9190: 4f 4e 4f 55 53 20 33 0a 23 65 6e 64 69 66 0a 0a  ONOUS 3.#endif..
91a0: 2f 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 73 79  /*.** Default sy
91b0: 6e 63 68 72 6f 6e 6f 75 73 20 6c 65 76 65 6c 73  nchronous levels
91c0: 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61  ..**.** Note tha
91d0: 74 20 28 66 6f 72 20 68 69 73 74 6f 72 63 61 6c  t (for historcal
91e0: 20 72 65 61 73 6f 6e 73 29 20 74 68 65 20 50 41   reasons) the PA
91f0: 47 45 52 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 5f  GER_SYNCHRONOUS_
9200: 2a 20 6d 61 63 72 6f 73 20 64 69 66 66 65 72 0a  * macros differ.
9210: 2a 2a 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49  ** from the SQLI
9220: 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48  TE_DEFAULT_SYNCH
9230: 52 4f 4e 4f 55 53 20 76 61 6c 75 65 20 62 79 20  RONOUS value by 
9240: 31 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20  1..**.**        
9250: 20 20 20 50 41 47 45 52 5f 53 59 4e 43 48 52 4f     PAGER_SYNCHRO
9260: 4e 4f 55 53 20 20 20 20 20 20 20 44 45 46 41 55  NOUS       DEFAU
9270: 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 2a  LT_SYNCHRONOUS.*
9280: 2a 20 20 20 4f 46 46 20 20 20 20 20 20 20 20 20  *   OFF         
9290: 20 20 31 20 20 20 20 20 20 20 20 20 20 20 20 20    1             
92a0: 20 20 20 20 20 20 20 20 20 20 20 20 30 0a 2a 2a              0.**
92b0: 20 20 20 4e 4f 52 4d 41 4c 20 20 20 20 20 20 20     NORMAL       
92c0: 20 32 20 20 20 20 20 20 20 20 20 20 20 20 20 20   2              
92d0: 20 20 20 20 20 20 20 20 20 20 20 31 0a 2a 2a 20             1.** 
92e0: 20 20 46 55 4c 4c 20 20 20 20 20 20 20 20 20 20    FULL          
92f0: 33 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  3               
9300: 20 20 20 20 20 20 20 20 20 20 32 0a 2a 2a 20 20            2.**  
9310: 20 45 58 54 52 41 20 20 20 20 20 20 20 20 20 34   EXTRA         4
9320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9330: 20 20 20 20 20 20 20 20 20 33 0a 2a 2a 0a 2a 2a           3.**.**
9340: 20 54 68 65 20 22 50 52 41 47 4d 41 20 73 79 6e   The "PRAGMA syn
9350: 63 68 72 6f 6e 6f 75 73 22 20 73 74 61 74 65 6d  chronous" statem
9360: 65 6e 74 20 61 6c 73 6f 20 75 73 65 73 20 74 68  ent also uses th
9370: 65 20 7a 65 72 6f 2d 62 61 73 65 64 20 6e 75 6d  e zero-based num
9380: 62 65 72 73 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65  bers..** In othe
9390: 72 20 77 6f 72 64 73 2c 20 74 68 65 20 7a 65 72  r words, the zer
93a0: 6f 2d 62 61 73 65 64 20 6e 75 6d 62 65 72 73 20  o-based numbers 
93b0: 61 72 65 20 75 73 65 64 20 66 6f 72 20 61 6c 6c  are used for all
93c0: 20 65 78 74 65 72 6e 61 6c 20 69 6e 74 65 72 66   external interf
93d0: 61 63 65 73 0a 2a 2a 20 61 6e 64 20 74 68 65 20  aces.** and the 
93e0: 6f 6e 65 2d 62 61 73 65 64 20 76 61 6c 75 65 73  one-based values
93f0: 20 61 72 65 20 75 73 65 64 20 69 6e 74 65 72 6e   are used intern
9400: 61 6c 6c 79 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  ally..*/.#ifndef
9410: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
9420: 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 23 20 64 65  SYNCHRONOUS.# de
9430: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41  fine SQLITE_DEFA
9440: 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20  ULT_SYNCHRONOUS 
9450: 28 50 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e 4f  (PAGER_SYNCHRONO
9460: 55 53 5f 46 55 4c 4c 2d 31 29 0a 23 65 6e 64 69  US_FULL-1).#endi
9470: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
9480: 5f 44 45 46 41 55 4c 54 5f 57 41 4c 5f 53 59 4e  _DEFAULT_WAL_SYN
9490: 43 48 52 4f 4e 4f 55 53 0a 23 20 64 65 66 69 6e  CHRONOUS.# defin
94a0: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
94b0: 5f 57 41 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55 53  _WAL_SYNCHRONOUS
94c0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
94d0: 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 23 65 6e 64  SYNCHRONOUS.#end
94e0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64  if../*.** Each d
94f0: 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20  atabase file to 
9500: 62 65 20 61 63 63 65 73 73 65 64 20 62 79 20 74  be accessed by t
9510: 68 65 20 73 79 73 74 65 6d 20 69 73 20 61 6e 20  he system is an 
9520: 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74  instance.** of t
9530: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
9540: 75 63 74 75 72 65 2e 20 20 54 68 65 72 65 20 61  ucture.  There a
9550: 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20  re normally two 
9560: 6f 66 20 74 68 65 73 65 20 73 74 72 75 63 74 75  of these structu
9570: 72 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71  res.** in the sq
9580: 6c 69 74 65 2e 61 44 62 5b 5d 20 61 72 72 61 79  lite.aDb[] array
9590: 2e 20 20 61 44 62 5b 30 5d 20 69 73 20 74 68 65  .  aDb[0] is the
95a0: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
95b0: 69 6c 65 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31  ile and.** aDb[1
95c0: 5d 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73  ] is the databas
95d0: 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 68  e file used to h
95e0: 6f 6c 64 20 74 65 6d 70 6f 72 61 72 79 20 74 61  old temporary ta
95f0: 62 6c 65 73 2e 20 20 41 64 64 69 74 69 6f 6e 61  bles.  Additiona
9600: 6c 0a 2a 2a 20 64 61 74 61 62 61 73 65 73 20 6d  l.** databases m
9610: 61 79 20 62 65 20 61 74 74 61 63 68 65 64 2e 0a  ay be attached..
9620: 2a 2f 0a 73 74 72 75 63 74 20 44 62 20 7b 0a 20  */.struct Db {. 
9630: 20 63 68 61 72 20 2a 7a 44 62 53 4e 61 6d 65 3b   char *zDbSName;
9640: 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
9650: 20 74 68 69 73 20 64 61 74 61 62 61 73 65 2e 20   this database. 
9660: 28 73 63 68 65 6d 61 20 6e 61 6d 65 2c 20 6e 6f  (schema name, no
9670: 74 20 66 69 6c 65 6e 61 6d 65 29 20 2a 2f 0a 20  t filename) */. 
9680: 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20   Btree *pBt;    
9690: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 42 2a 54        /* The B*T
96a0: 72 65 65 20 73 74 72 75 63 74 75 72 65 20 66 6f  ree structure fo
96b0: 72 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20  r this database 
96c0: 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 73 61 66  file */.  u8 saf
96d0: 65 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20 2f  ety_level;     /
96e0: 2a 20 48 6f 77 20 61 67 67 72 65 73 73 69 76 65  * How aggressive
96f0: 20 61 74 20 73 79 6e 63 69 6e 67 20 64 61 74 61   at syncing data
9700: 20 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 75 38   to disk */.  u8
9710: 20 62 53 79 6e 63 53 65 74 3b 20 20 20 20 20 20   bSyncSet;      
9720: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 22 50     /* True if "P
9730: 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75  RAGMA synchronou
9740: 73 3d 4e 22 20 68 61 73 20 62 65 65 6e 20 72 75  s=N" has been ru
9750: 6e 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  n */.  Schema *p
9760: 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 50  Schema;     /* P
9770: 6f 69 6e 74 65 72 20 74 6f 20 64 61 74 61 62 61  ointer to databa
9780: 73 65 20 73 63 68 65 6d 61 20 28 70 6f 73 73 69  se schema (possi
9790: 62 6c 79 20 73 68 61 72 65 64 29 20 2a 2f 0a 7d  bly shared) */.}
97a0: 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  ;../*.** An inst
97b0: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
97c0: 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
97d0: 73 74 6f 72 65 73 20 61 20 64 61 74 61 62 61 73  stores a databas
97e0: 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20  e schema..**.** 
97f0: 4d 6f 73 74 20 53 63 68 65 6d 61 20 6f 62 6a 65  Most Schema obje
9800: 63 74 73 20 61 72 65 20 61 73 73 6f 63 69 61 74  cts are associat
9810: 65 64 20 77 69 74 68 20 61 20 42 74 72 65 65 2e  ed with a Btree.
9820: 20 20 54 68 65 20 65 78 63 65 70 74 69 6f 6e 20    The exception 
9830: 69 73 0a 2a 2a 20 74 68 65 20 53 63 68 65 6d 61  is.** the Schema
9840: 20 66 6f 72 20 74 68 65 20 54 45 4d 50 20 64 61   for the TEMP da
9850: 74 61 62 61 65 73 20 28 73 71 6c 69 74 65 33 2e  tabaes (sqlite3.
9860: 61 44 62 5b 31 5d 29 20 77 68 69 63 68 20 69 73  aDb[1]) which is
9870: 20 66 72 65 65 2d 73 74 61 6e 64 69 6e 67 2e 0a   free-standing..
9880: 2a 2a 20 49 6e 20 73 68 61 72 65 64 20 63 61 63  ** In shared cac
9890: 68 65 20 6d 6f 64 65 2c 20 61 20 73 69 6e 67 6c  he mode, a singl
98a0: 65 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 20  e Schema object 
98b0: 63 61 6e 20 62 65 20 73 68 61 72 65 64 20 62 79  can be shared by
98c0: 20 6d 75 6c 74 69 70 6c 65 0a 2a 2a 20 42 74 72   multiple.** Btr
98d0: 65 65 73 20 74 68 61 74 20 72 65 66 65 72 20 74  ees that refer t
98e0: 6f 20 74 68 65 20 73 61 6d 65 20 75 6e 64 65 72  o the same under
98f0: 6c 79 69 6e 67 20 42 74 53 68 61 72 65 64 20 6f  lying BtShared o
9900: 62 6a 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 53 63 68  bject..**.** Sch
9910: 65 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20  ema objects are 
9920: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65  automatically de
9930: 61 6c 6c 6f 63 61 74 65 64 20 77 68 65 6e 20 74  allocated when t
9940: 68 65 20 6c 61 73 74 20 42 74 72 65 65 20 74 68  he last Btree th
9950: 61 74 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 73  at.** references
9960: 20 74 68 65 6d 20 69 73 20 64 65 73 74 72 6f 79   them is destroy
9970: 65 64 2e 20 20 20 54 68 65 20 54 45 4d 50 20 53  ed.   The TEMP S
9980: 63 68 65 6d 61 20 69 73 20 6d 61 6e 75 61 6c 6c  chema is manuall
9990: 79 20 66 72 65 65 64 20 62 79 0a 2a 2a 20 73 71  y freed by.** sq
99a0: 6c 69 74 65 33 5f 63 6c 6f 73 65 28 29 2e 0a 2a  lite3_close()..*
99b0: 0a 2a 2a 20 41 20 74 68 72 65 61 64 20 6d 75 73  .** A thread mus
99c0: 74 20 62 65 20 68 6f 6c 64 69 6e 67 20 61 20 6d  t be holding a m
99d0: 75 74 65 78 20 6f 6e 20 74 68 65 20 63 6f 72 72  utex on the corr
99e0: 65 73 70 6f 6e 64 69 6e 67 20 42 74 72 65 65 20  esponding Btree 
99f0: 69 6e 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 61  in order.** to a
9a00: 63 63 65 73 73 20 53 63 68 65 6d 61 20 63 6f 6e  ccess Schema con
9a10: 74 65 6e 74 2e 20 20 54 68 69 73 20 69 6d 70 6c  tent.  This impl
9a20: 69 65 73 20 74 68 61 74 20 74 68 65 20 74 68 72  ies that the thr
9a30: 65 61 64 20 6d 75 73 74 20 61 6c 73 6f 20 62 65  ead must also be
9a40: 0a 2a 2a 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75  .** holding a mu
9a50: 74 65 78 20 6f 6e 20 74 68 65 20 73 71 6c 69 74  tex on the sqlit
9a60: 65 33 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f  e3 connection po
9a70: 69 6e 74 65 72 20 74 68 61 74 20 6f 77 6e 73 20  inter that owns 
9a80: 74 68 65 20 42 74 72 65 65 2e 0a 2a 2a 20 46 6f  the Btree..** Fo
9a90: 72 20 61 20 54 45 4d 50 20 53 63 68 65 6d 61 2c  r a TEMP Schema,
9aa0: 20 6f 6e 6c 79 20 74 68 65 20 63 6f 6e 6e 65 63   only the connec
9ab0: 74 69 6f 6e 20 6d 75 74 65 78 20 69 73 20 72 65  tion mutex is re
9ac0: 71 75 69 72 65 64 2e 0a 2a 2f 0a 73 74 72 75 63  quired..*/.struc
9ad0: 74 20 53 63 68 65 6d 61 20 7b 0a 20 20 69 6e 74  t Schema {.  int
9ae0: 20 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20   schema_cookie; 
9af0: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 73 63    /* Database sc
9b00: 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d  hema version num
9b10: 62 65 72 20 66 6f 72 20 74 68 69 73 20 66 69 6c  ber for this fil
9b20: 65 20 2a 2f 0a 20 20 69 6e 74 20 69 47 65 6e 65  e */.  int iGene
9b30: 72 61 74 69 6f 6e 3b 20 20 20 20 20 2f 2a 20 47  ration;     /* G
9b40: 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65  eneration counte
9b50: 72 2e 20 20 49 6e 63 72 65 6d 65 6e 74 65 64 20  r.  Incremented 
9b60: 77 69 74 68 20 65 61 63 68 20 63 68 61 6e 67 65  with each change
9b70: 20 2a 2f 0a 20 20 48 61 73 68 20 74 62 6c 48 61   */.  Hash tblHa
9b80: 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c  sh;        /* Al
9b90: 6c 20 74 61 62 6c 65 73 20 69 6e 64 65 78 65 64  l tables indexed
9ba0: 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61   by name */.  Ha
9bb0: 73 68 20 69 64 78 48 61 73 68 3b 20 20 20 20 20  sh idxHash;     
9bc0: 20 20 20 2f 2a 20 41 6c 6c 20 28 6e 61 6d 65 64     /* All (named
9bd0: 29 20 69 6e 64 69 63 65 73 20 69 6e 64 65 78 65  ) indices indexe
9be0: 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48  d by name */.  H
9bf0: 61 73 68 20 74 72 69 67 48 61 73 68 3b 20 20 20  ash trigHash;   
9c00: 20 20 20 20 2f 2a 20 41 6c 6c 20 74 72 69 67 67      /* All trigg
9c10: 65 72 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e  ers indexed by n
9c20: 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 66 6b  ame */.  Hash fk
9c30: 65 79 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a  eyHash;       /*
9c40: 20 41 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79   All foreign key
9c50: 73 20 62 79 20 72 65 66 65 72 65 6e 63 65 64 20  s by referenced 
9c60: 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20  table name */.  
9c70: 54 61 62 6c 65 20 2a 70 53 65 71 54 61 62 3b 20  Table *pSeqTab; 
9c80: 20 20 20 20 20 2f 2a 20 54 68 65 20 73 71 6c 69       /* The sqli
9c90: 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c  te_sequence tabl
9ca0: 65 20 75 73 65 64 20 62 79 20 41 55 54 4f 49 4e  e used by AUTOIN
9cb0: 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 75 38 20  CREMENT */.  u8 
9cc0: 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20  file_format;    
9cd0: 20 20 2f 2a 20 53 63 68 65 6d 61 20 66 6f 72 6d    /* Schema form
9ce0: 61 74 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 74  at version for t
9cf0: 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38  his file */.  u8
9d00: 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20   enc;           
9d10: 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64     /* Text encod
9d20: 69 6e 67 20 75 73 65 64 20 62 79 20 74 68 69 73  ing used by this
9d30: 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75   database */.  u
9d40: 31 36 20 73 63 68 65 6d 61 46 6c 61 67 73 3b 20  16 schemaFlags; 
9d50: 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 61 73 73      /* Flags ass
9d60: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69  ociated with thi
9d70: 73 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e  s schema */.  in
9d80: 74 20 63 61 63 68 65 5f 73 69 7a 65 3b 20 20 20  t cache_size;   
9d90: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
9da0: 70 61 67 65 73 20 74 6f 20 75 73 65 20 69 6e 20  pages to use in 
9db0: 74 68 65 20 63 61 63 68 65 20 2a 2f 0a 7d 3b 0a  the cache */.};.
9dc0: 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63  ./*.** These mac
9dd0: 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64 20  ros can be used 
9de0: 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72  to test, set, or
9df0: 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74   clear bits in t
9e00: 68 65 0a 2a 2a 20 44 62 2e 70 53 63 68 65 6d 61  he.** Db.pSchema
9e10: 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  ->flags field..*
9e20: 2f 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73 50  /.#define DbHasP
9e30: 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20  roperty(D,I,P)  
9e40: 20 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d     (((D)->aDb[I]
9e50: 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61  .pSchema->schema
9e60: 46 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29  Flags&(P))==(P))
9e70: 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73 41 6e  .#define DbHasAn
9e80: 79 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29  yProperty(D,I,P)
9e90: 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e    (((D)->aDb[I].
9ea0: 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46  pSchema->schemaF
9eb0: 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64  lags&(P))!=0).#d
9ec0: 65 66 69 6e 65 20 44 62 53 65 74 50 72 6f 70 65  efine DbSetPrope
9ed0: 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28  rty(D,I,P)     (
9ee0: 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65  D)->aDb[I].pSche
9ef0: 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 7c  ma->schemaFlags|
9f00: 3d 28 50 29 0a 23 64 65 66 69 6e 65 20 44 62 43  =(P).#define DbC
9f10: 6c 65 61 72 50 72 6f 70 65 72 74 79 28 44 2c 49  learProperty(D,I
9f20: 2c 50 29 20 20 20 28 44 29 2d 3e 61 44 62 5b 49  ,P)   (D)->aDb[I
9f30: 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d  ].pSchema->schem
9f40: 61 46 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a  aFlags&=~(P)../*
9f50: 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
9f60: 65 73 20 66 6f 72 20 74 68 65 20 44 42 2e 70 53  es for the DB.pS
9f70: 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65  chema->flags fie
9f80: 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 44 42  ld..**.** The DB
9f90: 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 66 6c  _SchemaLoaded fl
9fa0: 61 67 20 69 73 20 73 65 74 20 61 66 74 65 72 20  ag is set after 
9fb0: 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
9fc0: 65 6d 61 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20  ema has been.** 
9fd0: 72 65 61 64 20 69 6e 74 6f 20 69 6e 74 65 72 6e  read into intern
9fe0: 61 6c 20 68 61 73 68 20 74 61 62 6c 65 73 2e 0a  al hash tables..
9ff0: 2a 2a 0a 2a 2a 20 44 42 5f 55 6e 72 65 73 65 74  **.** DB_Unreset
a000: 56 69 65 77 73 20 6d 65 61 6e 73 20 74 68 61 74  Views means that
a010: 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 76 69 65   one or more vie
a020: 77 73 20 68 61 76 65 20 63 6f 6c 75 6d 6e 20 6e  ws have column n
a030: 61 6d 65 73 20 74 68 61 74 0a 2a 2a 20 68 61 76  ames that.** hav
a040: 65 20 62 65 65 6e 20 66 69 6c 6c 65 64 20 6f 75  e been filled ou
a050: 74 2e 20 20 49 66 20 74 68 65 20 73 63 68 65 6d  t.  If the schem
a060: 61 20 63 68 61 6e 67 65 73 2c 20 74 68 65 73 65  a changes, these
a070: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6d 69   column names mi
a080: 67 68 74 0a 2a 2a 20 63 68 61 6e 67 65 73 20 61  ght.** changes a
a090: 6e 64 20 73 6f 20 74 68 65 20 76 69 65 77 20 77  nd so the view w
a0a0: 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62 65 20 72  ill need to be r
a0b0: 65 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  eset..*/.#define
a0c0: 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64   DB_SchemaLoaded
a0d0: 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 54      0x0001  /* T
a0e0: 68 65 20 73 63 68 65 6d 61 20 68 61 73 20 62 65  he schema has be
a0f0: 65 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a 23 64 65  en loaded */.#de
a100: 66 69 6e 65 20 44 42 5f 55 6e 72 65 73 65 74 56  fine DB_UnresetV
a110: 69 65 77 73 20 20 20 20 30 78 30 30 30 32 20 20  iews    0x0002  
a120: 2f 2a 20 53 6f 6d 65 20 76 69 65 77 73 20 68 61  /* Some views ha
a130: 76 65 20 64 65 66 69 6e 65 64 20 63 6f 6c 75 6d  ve defined colum
a140: 6e 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69  n names */.#defi
a150: 6e 65 20 44 42 5f 45 6d 70 74 79 20 20 20 20 20  ne DB_Empty     
a160: 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a        0x0004  /*
a170: 20 54 68 65 20 66 69 6c 65 20 69 73 20 65 6d 70   The file is emp
a180: 74 79 20 28 6c 65 6e 67 74 68 20 30 20 62 79 74  ty (length 0 byt
a190: 65 73 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68  es) */../*.** Th
a1a0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 66 66  e number of diff
a1b0: 65 72 65 6e 74 20 6b 69 6e 64 73 20 6f 66 20 74  erent kinds of t
a1c0: 68 69 6e 67 73 20 74 68 61 74 20 63 61 6e 20 62  hings that can b
a1d0: 65 20 6c 69 6d 69 74 65 64 0a 2a 2a 20 75 73 69  e limited.** usi
a1e0: 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f 6c  ng the sqlite3_l
a1f0: 69 6d 69 74 28 29 20 69 6e 74 65 72 66 61 63 65  imit() interface
a200: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
a210: 49 54 45 5f 4e 5f 4c 49 4d 49 54 20 28 53 51 4c  ITE_N_LIMIT (SQL
a220: 49 54 45 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45 52  ITE_LIMIT_WORKER
a230: 5f 54 48 52 45 41 44 53 2b 31 29 0a 0a 2f 2a 0a  _THREADS+1)../*.
a240: 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c  ** Lookaside mal
a250: 6c 6f 63 20 69 73 20 61 20 73 65 74 20 6f 66 20  loc is a set of 
a260: 66 69 78 65 64 2d 73 69 7a 65 20 62 75 66 66 65  fixed-size buffe
a270: 72 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 75  rs that can be u
a280: 73 65 64 0a 2a 2a 20 74 6f 20 73 61 74 69 73 66  sed.** to satisf
a290: 79 20 73 6d 61 6c 6c 20 74 72 61 6e 73 69 65 6e  y small transien
a2a0: 74 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  t memory allocat
a2b0: 69 6f 6e 20 72 65 71 75 65 73 74 73 20 66 6f 72  ion requests for
a2c0: 20 6f 62 6a 65 63 74 73 0a 2a 2a 20 61 73 73 6f   objects.** asso
a2d0: 63 69 61 74 65 64 20 77 69 74 68 20 61 20 70 61  ciated with a pa
a2e0: 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61 73  rticular databas
a2f0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54  e connection.  T
a300: 68 65 20 75 73 65 20 6f 66 0a 2a 2a 20 6c 6f 6f  he use of.** loo
a310: 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 70 72  kaside malloc pr
a320: 6f 76 69 64 65 73 20 61 20 73 69 67 6e 69 66 69  ovides a signifi
a330: 63 61 6e 74 20 70 65 72 66 6f 72 6d 61 6e 63 65  cant performance
a340: 20 65 6e 68 61 6e 63 65 6d 65 6e 74 0a 2a 2a 20   enhancement.** 
a350: 28 61 70 70 72 6f 78 20 31 30 25 29 20 62 79 20  (approx 10%) by 
a360: 61 76 6f 69 64 69 6e 67 20 6e 75 6d 65 72 6f 75  avoiding numerou
a370: 73 20 6d 61 6c 6c 6f 63 2f 66 72 65 65 20 72 65  s malloc/free re
a380: 71 75 65 73 74 73 20 77 68 69 6c 65 20 70 61 72  quests while par
a390: 73 69 6e 67 0a 2a 2a 20 53 51 4c 20 73 74 61 74  sing.** SQL stat
a3a0: 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  ements..**.** Th
a3b0: 65 20 4c 6f 6f 6b 61 73 69 64 65 20 73 74 72 75  e Lookaside stru
a3c0: 63 74 75 72 65 20 68 6f 6c 64 73 20 63 6f 6e 66  cture holds conf
a3d0: 69 67 75 72 61 74 69 6f 6e 20 69 6e 66 6f 72 6d  iguration inform
a3e0: 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 0a  ation about the.
a3f0: 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c  ** lookaside mal
a400: 6c 6f 63 20 73 75 62 73 79 73 74 65 6d 2e 20 20  loc subsystem.  
a410: 45 61 63 68 20 61 76 61 69 6c 61 62 6c 65 20 6d  Each available m
a420: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
a430: 20 69 6e 0a 2a 2a 20 74 68 65 20 6c 6f 6f 6b 61   in.** the looka
a440: 73 69 64 65 20 73 75 62 73 79 73 74 65 6d 20 69  side subsystem i
a450: 73 20 73 74 6f 72 65 64 20 6f 6e 20 61 20 6c 69  s stored on a li
a460: 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 4c 6f 6f  nked list of Loo
a470: 6b 61 73 69 64 65 53 6c 6f 74 0a 2a 2a 20 6f 62  kasideSlot.** ob
a480: 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f  jects..**.** Loo
a490: 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f  kaside allocatio
a4a0: 6e 73 20 61 72 65 20 6f 6e 6c 79 20 61 6c 6c 6f  ns are only allo
a4b0: 77 65 64 20 66 6f 72 20 6f 62 6a 65 63 74 73 20  wed for objects 
a4c0: 74 68 61 74 20 61 72 65 20 61 73 73 6f 63 69 61  that are associa
a4d0: 74 65 64 0a 2a 2a 20 77 69 74 68 20 61 20 70 61  ted.** with a pa
a4e0: 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61 73  rticular databas
a4f0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 48  e connection.  H
a500: 65 6e 63 65 2c 20 73 63 68 65 6d 61 20 69 6e 66  ence, schema inf
a510: 6f 72 6d 61 74 69 6f 6e 20 63 61 6e 6e 6f 74 0a  ormation cannot.
a520: 2a 2a 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20  ** be stored in 
a530: 6c 6f 6f 6b 61 73 69 64 65 20 62 65 63 61 75 73  lookaside becaus
a540: 65 20 69 6e 20 73 68 61 72 65 64 20 63 61 63 68  e in shared cach
a550: 65 20 6d 6f 64 65 20 74 68 65 20 73 63 68 65 6d  e mode the schem
a560: 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a  a information.**
a570: 20 69 73 20 73 68 61 72 65 64 20 62 79 20 6d 75   is shared by mu
a580: 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73 65 20  ltiple database 
a590: 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 20 20 54 68  connections.  Th
a5a0: 65 72 65 66 6f 72 65 2c 20 77 68 69 6c 65 20 70  erefore, while p
a5b0: 61 72 73 69 6e 67 0a 2a 2a 20 73 63 68 65 6d 61  arsing.** schema
a5c0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68   information, th
a5d0: 65 20 4c 6f 6f 6b 61 73 69 64 65 2e 62 45 6e 61  e Lookaside.bEna
a5e0: 62 6c 65 64 20 66 6c 61 67 20 69 73 20 63 6c 65  bled flag is cle
a5f0: 61 72 65 64 20 73 6f 20 74 68 61 74 0a 2a 2a 20  ared so that.** 
a600: 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61  lookaside alloca
a610: 74 69 6f 6e 73 20 61 72 65 20 6e 6f 74 20 75 73  tions are not us
a620: 65 64 20 74 6f 20 63 6f 6e 73 74 72 75 63 74 20  ed to construct 
a630: 74 68 65 20 73 63 68 65 6d 61 20 6f 62 6a 65 63  the schema objec
a640: 74 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4c 6f  ts..*/.struct Lo
a650: 6f 6b 61 73 69 64 65 20 7b 0a 20 20 75 33 32 20  okaside {.  u32 
a660: 62 44 69 73 61 62 6c 65 3b 20 20 20 20 20 20 20  bDisable;       
a670: 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 6f 70 65 72      /* Only oper
a680: 61 74 65 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64  ate the lookasid
a690: 65 20 77 68 65 6e 20 7a 65 72 6f 20 2a 2f 0a 20  e when zero */. 
a6a0: 20 75 31 36 20 73 7a 3b 20 20 20 20 20 20 20 20   u16 sz;        
a6b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
a6c0: 20 6f 66 20 65 61 63 68 20 62 75 66 66 65 72 20   of each buffer 
a6d0: 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75 38  in bytes */.  u8
a6e0: 20 62 4d 61 6c 6c 6f 63 65 64 3b 20 20 20 20 20   bMalloced;     
a6f0: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
a700: 20 70 53 74 61 72 74 20 6f 62 74 61 69 6e 65 64   pStart obtained
a710: 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61   from sqlite3_ma
a720: 6c 6c 6f 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20  lloc() */.  int 
a730: 6e 4f 75 74 3b 20 20 20 20 20 20 20 20 20 20 20  nOut;           
a740: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
a750: 20 62 75 66 66 65 72 73 20 63 75 72 72 65 6e 74   buffers current
a760: 6c 79 20 63 68 65 63 6b 65 64 20 6f 75 74 20 2a  ly checked out *
a770: 2f 0a 20 20 69 6e 74 20 6d 78 4f 75 74 3b 20 20  /.  int mxOut;  
a780: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48              /* H
a790: 69 67 68 77 61 74 65 72 20 6d 61 72 6b 20 66 6f  ighwater mark fo
a7a0: 72 20 6e 4f 75 74 20 2a 2f 0a 20 20 69 6e 74 20  r nOut */.  int 
a7b0: 61 6e 53 74 61 74 5b 33 5d 3b 20 20 20 20 20 20  anStat[3];      
a7c0: 20 20 20 20 2f 2a 20 30 3a 20 68 69 74 73 2e 20      /* 0: hits. 
a7d0: 20 31 3a 20 73 69 7a 65 20 6d 69 73 73 65 73 2e   1: size misses.
a7e0: 20 20 32 3a 20 66 75 6c 6c 20 6d 69 73 73 65 73    2: full misses
a7f0: 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53   */.  LookasideS
a800: 6c 6f 74 20 2a 70 46 72 65 65 3b 20 20 20 2f 2a  lot *pFree;   /*
a810: 20 4c 69 73 74 20 6f 66 20 61 76 61 69 6c 61 62   List of availab
a820: 6c 65 20 62 75 66 66 65 72 73 20 2a 2f 0a 20 20  le buffers */.  
a830: 76 6f 69 64 20 2a 70 53 74 61 72 74 3b 20 20 20  void *pStart;   
a840: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
a850: 20 62 79 74 65 20 6f 66 20 61 76 61 69 6c 61 62   byte of availab
a860: 6c 65 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20  le memory space 
a870: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 45 6e 64 3b  */.  void *pEnd;
a880: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a890: 46 69 72 73 74 20 62 79 74 65 20 70 61 73 74 20  First byte past 
a8a0: 65 6e 64 20 6f 66 20 61 76 61 69 6c 61 62 6c 65  end of available
a8b0: 20 73 70 61 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72   space */.};.str
a8c0: 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f  uct LookasideSlo
a8d0: 74 20 7b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53  t {.  LookasideS
a8e0: 6c 6f 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 2f  lot *pNext;    /
a8f0: 2a 20 4e 65 78 74 20 62 75 66 66 65 72 20 69 6e  * Next buffer in
a900: 20 74 68 65 20 6c 69 73 74 20 6f 66 20 66 72 65   the list of fre
a910: 65 20 62 75 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a  e buffers */.};.
a920: 0a 2f 2a 0a 2a 2a 20 41 20 68 61 73 68 20 74 61  ./*.** A hash ta
a930: 62 6c 65 20 66 6f 72 20 62 75 69 6c 74 2d 69 6e  ble for built-in
a940: 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69   function defini
a950: 74 69 6f 6e 73 2e 20 20 28 41 70 70 6c 69 63 61  tions.  (Applica
a960: 74 69 6f 6e 2d 64 65 66 69 6e 65 64 0a 2a 2a 20  tion-defined.** 
a970: 66 75 6e 63 74 69 6f 6e 73 20 75 73 65 20 61 20  functions use a 
a980: 72 65 67 75 6c 61 72 20 74 61 62 6c 65 20 74 61  regular table ta
a990: 62 6c 65 20 66 72 6f 6d 20 68 61 73 68 2e 68 2e  ble from hash.h.
a9a0: 29 0a 2a 2a 0a 2a 2a 20 48 61 73 68 20 65 61 63  ).**.** Hash eac
a9b0: 68 20 46 75 6e 63 44 65 66 20 73 74 72 75 63 74  h FuncDef struct
a9c0: 75 72 65 20 69 6e 74 6f 20 6f 6e 65 20 6f 66 20  ure into one of 
a9d0: 74 68 65 20 46 75 6e 63 44 65 66 48 61 73 68 2e  the FuncDefHash.
a9e0: 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a 2a 20 43 6f  a[] slots..** Co
a9f0: 6c 6c 69 73 69 6f 6e 73 20 61 72 65 20 6f 6e 20  llisions are on 
aa00: 74 68 65 20 46 75 6e 63 44 65 66 2e 75 2e 70 48  the FuncDef.u.pH
aa10: 61 73 68 20 63 68 61 69 6e 2e 0a 2a 2f 0a 23 64  ash chain..*/.#d
aa20: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
aa30: 43 5f 48 41 53 48 5f 53 5a 20 32 33 0a 73 74 72  C_HASH_SZ 23.str
aa40: 75 63 74 20 46 75 6e 63 44 65 66 48 61 73 68 20  uct FuncDefHash 
aa50: 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a 61 5b 53  {.  FuncDef *a[S
aa60: 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 5f  QLITE_FUNC_HASH_
aa70: 53 5a 5d 3b 20 20 20 20 20 20 20 2f 2a 20 48 61  SZ];       /* Ha
aa80: 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75 6e  sh table for fun
aa90: 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 23 69  ctions */.};..#i
aaa0: 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45 52  fdef SQLITE_USER
aab0: 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a  _AUTHENTICATION.
aac0: 2f 2a 0a 2a 2a 20 49 6e 66 6f 72 6d 61 74 69 6f  /*.** Informatio
aad0: 6e 20 68 65 6c 64 20 69 6e 20 74 68 65 20 22 73  n held in the "s
aae0: 71 6c 69 74 65 33 22 20 64 61 74 61 62 61 73 65  qlite3" database
aaf0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65   connection obje
ab00: 63 74 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74  ct and used.** t
ab10: 6f 20 6d 61 6e 61 67 65 20 75 73 65 72 20 61 75  o manage user au
ab20: 74 68 65 6e 74 69 63 61 74 69 6f 6e 2e 0a 2a 2f  thentication..*/
ab30: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
ab40: 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68  sqlite3_userauth
ab50: 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74   sqlite3_useraut
ab60: 68 3b 0a 73 74 72 75 63 74 20 73 71 6c 69 74 65  h;.struct sqlite
ab70: 33 5f 75 73 65 72 61 75 74 68 20 7b 0a 20 20 75  3_userauth {.  u
ab80: 38 20 61 75 74 68 4c 65 76 65 6c 3b 20 20 20 20  8 authLevel;    
ab90: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
aba0: 43 75 72 72 65 6e 74 20 61 75 74 68 65 6e 74 69  Current authenti
abb0: 63 61 74 69 6f 6e 20 6c 65 76 65 6c 20 2a 2f 0a  cation level */.
abc0: 20 20 69 6e 74 20 6e 41 75 74 68 50 57 3b 20 20    int nAuthPW;  
abd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
abe0: 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 7a  /* Size of the z
abf0: 41 75 74 68 50 57 20 69 6e 20 62 79 74 65 73 20  AuthPW in bytes 
ac00: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75 74 68  */.  char *zAuth
ac10: 50 57 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  PW;             
ac20: 20 20 20 2f 2a 20 50 61 73 73 77 6f 72 64 20 75     /* Password u
ac30: 73 65 64 20 74 6f 20 61 75 74 68 65 6e 74 69 63  sed to authentic
ac40: 61 74 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ate */.  char *z
ac50: 41 75 74 68 55 73 65 72 3b 20 20 20 20 20 20 20  AuthUser;       
ac60: 20 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20 6e         /* User n
ac70: 61 6d 65 20 75 73 65 64 20 74 6f 20 61 75 74 68  ame used to auth
ac80: 65 6e 74 69 63 61 74 65 20 2a 2f 0a 7d 3b 0a 0a  enticate */.};..
ac90: 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  /* Allowed value
aca0: 73 20 66 6f 72 20 73 71 6c 69 74 65 33 5f 75 73  s for sqlite3_us
acb0: 65 72 61 75 74 68 2e 61 75 74 68 4c 65 76 65 6c  erauth.authLevel
acc0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54   */.#define UAUT
acd0: 48 5f 55 6e 6b 6e 6f 77 6e 20 20 20 20 20 30 20  H_Unknown     0 
ace0: 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63      /* Authentic
acf0: 61 74 69 6f 6e 20 6e 6f 74 20 79 65 74 20 63 68  ation not yet ch
ad00: 65 63 6b 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  ecked */.#define
ad10: 20 55 41 55 54 48 5f 46 61 69 6c 20 20 20 20 20   UAUTH_Fail     
ad20: 20 20 20 31 20 20 20 20 20 2f 2a 20 55 73 65 72     1     /* User
ad30: 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20   authentication 
ad40: 66 61 69 6c 65 64 20 2a 2f 0a 23 64 65 66 69 6e  failed */.#defin
ad50: 65 20 55 41 55 54 48 5f 55 73 65 72 20 20 20 20  e UAUTH_User    
ad60: 20 20 20 20 32 20 20 20 20 20 2f 2a 20 41 75 74      2     /* Aut
ad70: 68 65 6e 74 69 63 61 74 65 64 20 61 73 20 61 20  henticated as a 
ad80: 6e 6f 72 6d 61 6c 20 75 73 65 72 20 2a 2f 0a 23  normal user */.#
ad90: 64 65 66 69 6e 65 20 55 41 55 54 48 5f 41 64 6d  define UAUTH_Adm
ada0: 69 6e 20 20 20 20 20 20 20 33 20 20 20 20 20 2f  in       3     /
adb0: 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65 64 20  * Authenticated 
adc0: 61 73 20 61 6e 20 61 64 6d 69 6e 69 73 74 72 61  as an administra
add0: 74 6f 72 20 2a 2f 0a 0a 2f 2a 20 46 75 6e 63 74  tor */../* Funct
ade0: 69 6f 6e 73 20 75 73 65 64 20 6f 6e 6c 79 20 62  ions used only b
adf0: 79 20 75 73 65 72 20 61 75 74 68 6f 72 69 7a 61  y user authoriza
ae00: 74 69 6f 6e 20 6c 6f 67 69 63 20 2a 2f 0a 69 6e  tion logic */.in
ae10: 74 20 73 71 6c 69 74 65 33 55 73 65 72 41 75 74  t sqlite3UserAut
ae20: 68 54 61 62 6c 65 28 63 6f 6e 73 74 20 63 68 61  hTable(const cha
ae30: 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
ae40: 55 73 65 72 41 75 74 68 43 68 65 63 6b 4c 6f 67  UserAuthCheckLog
ae50: 69 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  in(sqlite3*,cons
ae60: 74 20 63 68 61 72 2a 2c 75 38 2a 29 3b 0a 76 6f  t char*,u8*);.vo
ae70: 69 64 20 73 71 6c 69 74 65 33 55 73 65 72 41 75  id sqlite3UserAu
ae80: 74 68 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 29  thInit(sqlite3*)
ae90: 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72  ;.void sqlite3Cr
aea0: 79 70 74 46 75 6e 63 28 73 71 6c 69 74 65 33 5f  yptFunc(sqlite3_
aeb0: 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
aec0: 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 0a  ite3_value**);..
aed0: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
aee0: 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41  _USER_AUTHENTICA
aef0: 54 49 4f 4e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 74  TION */../*.** t
af00: 79 70 65 64 65 66 20 66 6f 72 20 74 68 65 20 61  ypedef for the a
af10: 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 63 61 6c  uthorization cal
af20: 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 2e 0a  lback function..
af30: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
af40: 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41  _USER_AUTHENTICA
af50: 54 49 4f 4e 0a 20 20 74 79 70 65 64 65 66 20 69  TION.  typedef i
af60: 6e 74 20 28 2a 73 71 6c 69 74 65 33 5f 78 61 75  nt (*sqlite3_xau
af70: 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f  th)(void*,int,co
af80: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
af90: 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
afa0: 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
afb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
afc0: 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63    const char*, c
afd0: 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6c  onst char*);.#el
afe0: 73 65 0a 20 20 74 79 70 65 64 65 66 20 69 6e 74  se.  typedef int
aff0: 20 28 2a 73 71 6c 69 74 65 33 5f 78 61 75 74 68   (*sqlite3_xauth
b000: 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73  )(void*,int,cons
b010: 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
b020: 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ar*,const char*,
b030: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b050: 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65  const char*);.#e
b060: 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
b070: 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43  LITE_OMIT_DEPREC
b080: 41 54 45 44 0a 2f 2a 20 54 68 69 73 20 69 73 20  ATED./* This is 
b090: 61 6e 20 65 78 74 72 61 20 53 51 4c 49 54 45 5f  an extra SQLITE_
b0a0: 54 52 41 43 45 20 6d 61 63 72 6f 20 74 68 61 74  TRACE macro that
b0b0: 20 69 6e 64 69 63 61 74 65 73 20 22 6c 65 67 61   indicates "lega
b0c0: 63 79 22 20 74 72 61 63 69 6e 67 0a 2a 2a 20 69  cy" tracing.** i
b0d0: 6e 20 74 68 65 20 73 74 79 6c 65 20 6f 66 20 73  n the style of s
b0e0: 71 6c 69 74 65 33 5f 74 72 61 63 65 28 29 0a 2a  qlite3_trace().*
b0f0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b100: 5f 54 52 41 43 45 5f 4c 45 47 41 43 59 20 20 30  _TRACE_LEGACY  0
b110: 78 38 30 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e  x80.#else.#defin
b120: 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 4c  e SQLITE_TRACE_L
b130: 45 47 41 43 59 20 20 30 0a 23 65 6e 64 69 66 20  EGACY  0.#endif 
b140: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44  /* SQLITE_OMIT_D
b150: 45 50 52 45 43 41 54 45 44 20 2a 2f 0a 0a 0a 2f  EPRECATED */.../
b160: 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61  *.** Each databa
b170: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73  se connection is
b180: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
b190: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
b1a0: 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75  ructure..*/.stru
b1b0: 63 74 20 73 71 6c 69 74 65 33 20 7b 0a 20 20 73  ct sqlite3 {.  s
b1c0: 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 56 66 73  qlite3_vfs *pVfs
b1d0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
b1e0: 4f 53 20 49 6e 74 65 72 66 61 63 65 20 2a 2f 0a  OS Interface */.
b1f0: 20 20 73 74 72 75 63 74 20 56 64 62 65 20 2a 70    struct Vdbe *p
b200: 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 20 20  Vdbe;           
b210: 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76  /* List of activ
b220: 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  e virtual machin
b230: 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20  es */.  CollSeq 
b240: 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20 20 20  *pDfltColl;     
b250: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66        /* The def
b260: 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20 73  ault collating s
b270: 65 71 75 65 6e 63 65 20 28 42 49 4e 41 52 59 29  equence (BINARY)
b280: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75   */.  sqlite3_mu
b290: 74 65 78 20 2a 6d 75 74 65 78 3b 20 20 20 20 20  tex *mutex;     
b2a0: 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f      /* Connectio
b2b0: 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44 62 20  n mutex */.  Db 
b2c0: 2a 61 44 62 3b 20 20 20 20 20 20 20 20 20 20 20  *aDb;           
b2d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
b2e0: 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20  l backends */.  
b2f0: 69 6e 74 20 6e 44 62 3b 20 20 20 20 20 20 20 20  int nDb;        
b300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b310: 20 4e 75 6d 62 65 72 20 6f 66 20 62 61 63 6b 65   Number of backe
b320: 6e 64 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  nds currently in
b330: 20 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 66 6c   use */.  int fl
b340: 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
b350: 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 73 63 65          /* Misce
b360: 6c 6c 61 6e 65 6f 75 73 20 66 6c 61 67 73 2e 20  llaneous flags. 
b370: 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69  See below */.  i
b380: 36 34 20 6c 61 73 74 52 6f 77 69 64 3b 20 20 20  64 lastRowid;   
b390: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b3a0: 52 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20 72 65  ROWID of most re
b3b0: 63 65 6e 74 20 69 6e 73 65 72 74 20 28 73 65 65  cent insert (see
b3c0: 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69 36 34   above) */.  i64
b3d0: 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20   szMmap;        
b3e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
b3f0: 66 61 75 6c 74 20 6d 6d 61 70 5f 73 69 7a 65 20  fault mmap_size 
b400: 73 65 74 74 69 6e 67 20 2a 2f 0a 20 20 75 6e 73  setting */.  uns
b410: 69 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e 46 6c  igned int openFl
b420: 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 46 6c  ags;       /* Fl
b430: 61 67 73 20 70 61 73 73 65 64 20 74 6f 20 73 71  ags passed to sq
b440: 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70 65 6e 28  lite3_vfs.xOpen(
b450: 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43 6f  ) */.  int errCo
b460: 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  de;             
b470: 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63       /* Most rec
b480: 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65 20 28  ent error code (
b490: 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20 69  SQLITE_*) */.  i
b4a0: 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20 20 20 20  nt errMask;     
b4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b4c0: 26 20 72 65 73 75 6c 74 20 63 6f 64 65 73 20 77  & result codes w
b4d0: 69 74 68 20 74 68 69 73 20 62 65 66 6f 72 65 20  ith this before 
b4e0: 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20 69  returning */.  i
b4f0: 6e 74 20 69 53 79 73 45 72 72 6e 6f 3b 20 20 20  nt iSysErrno;   
b500: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b510: 45 72 72 6e 6f 20 76 61 6c 75 65 20 66 72 6f 6d  Errno value from
b520: 20 6c 61 73 74 20 73 79 73 74 65 6d 20 65 72 72   last system err
b530: 6f 72 20 2a 2f 0a 20 20 75 31 36 20 64 62 4f 70  or */.  u16 dbOp
b540: 74 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20  tFlags;         
b550: 20 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 74        /* Flags t
b560: 6f 20 65 6e 61 62 6c 65 2f 64 69 73 61 62 6c 65  o enable/disable
b570: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a   optimizations *
b580: 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20  /.  u8 enc;     
b590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b5a0: 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69    /* Text encodi
b5b0: 6e 67 20 2a 2f 0a 20 20 75 38 20 61 75 74 6f 43  ng */.  u8 autoC
b5c0: 6f 6d 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20  ommit;          
b5d0: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 75 74        /* The aut
b5e0: 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 2e 20 2a  o-commit flag. *
b5f0: 2f 0a 20 20 75 38 20 74 65 6d 70 5f 73 74 6f 72  /.  u8 temp_stor
b600: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
b610: 20 20 2f 2a 20 31 3a 20 66 69 6c 65 20 32 3a 20    /* 1: file 2: 
b620: 6d 65 6d 6f 72 79 20 30 3a 20 64 65 66 61 75 6c  memory 0: defaul
b630: 74 20 2a 2f 0a 20 20 75 38 20 6d 61 6c 6c 6f 63  t */.  u8 malloc
b640: 46 61 69 6c 65 64 3b 20 20 20 20 20 20 20 20 20  Failed;         
b650: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
b660: 77 65 20 68 61 76 65 20 73 65 65 6e 20 61 20 6d  we have seen a m
b670: 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 20 2a 2f  alloc failure */
b680: 0a 20 20 75 38 20 62 42 65 6e 69 67 6e 4d 61 6c  .  u8 bBenignMal
b690: 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  loc;            
b6a0: 20 2f 2a 20 44 6f 20 6e 6f 74 20 72 65 71 75 69   /* Do not requi
b6b0: 72 65 20 4f 4f 4d 73 20 69 66 20 74 72 75 65 20  re OOMs if true 
b6c0: 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c 6f 63 6b  */.  u8 dfltLock
b6d0: 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  Mode;           
b6e0: 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f     /* Default lo
b6f0: 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f 72 20 61  cking-mode for a
b700: 74 74 61 63 68 65 64 20 64 62 73 20 2a 2f 0a 20  ttached dbs */. 
b710: 20 73 69 67 6e 65 64 20 63 68 61 72 20 6e 65 78   signed char nex
b720: 74 41 75 74 6f 76 61 63 3b 20 20 20 20 20 20 2f  tAutovac;      /
b730: 2a 20 41 75 74 6f 76 61 63 20 73 65 74 74 69 6e  * Autovac settin
b740: 67 20 61 66 74 65 72 20 56 41 43 55 55 4d 20 69  g after VACUUM i
b750: 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38 20 73 75  f >=0 */.  u8 su
b760: 70 70 72 65 73 73 45 72 72 3b 20 20 20 20 20 20  ppressErr;      
b770: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e           /* Do n
b780: 6f 74 20 69 73 73 75 65 20 65 72 72 6f 72 20 6d  ot issue error m
b790: 65 73 73 61 67 65 73 20 69 66 20 74 72 75 65 20  essages if true 
b7a0: 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f 6e 43 6f  */.  u8 vtabOnCo
b7b0: 6e 66 6c 69 63 74 3b 20 20 20 20 20 20 20 20 20  nflict;         
b7c0: 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72     /* Value to r
b7d0: 65 74 75 72 6e 20 66 6f 72 20 73 33 5f 76 74 61  eturn for s3_vta
b7e0: 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28 29 20  b_on_conflict() 
b7f0: 2a 2f 0a 20 20 75 38 20 69 73 54 72 61 6e 73 61  */.  u8 isTransa
b800: 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 20  ctionSavepoint; 
b810: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
b820: 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61 76 65  e outermost save
b830: 70 6f 69 6e 74 20 69 73 20 61 20 54 53 20 2a 2f  point is a TS */
b840: 0a 20 20 75 38 20 6d 54 72 61 63 65 3b 20 20 20  .  u8 mTrace;   
b850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b860: 20 2f 2a 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65   /* zero or more
b870: 20 53 51 4c 49 54 45 5f 54 52 41 43 45 20 66 6c   SQLITE_TRACE fl
b880: 61 67 73 20 2a 2f 0a 20 20 75 38 20 73 6b 69 70  ags */.  u8 skip
b890: 42 74 72 65 65 4d 75 74 65 78 3b 20 20 20 20 20  BtreeMutex;     
b8a0: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
b8b0: 66 20 6e 6f 20 73 68 61 72 65 64 2d 63 61 63 68  f no shared-cach
b8c0: 65 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20  e backends */.  
b8d0: 69 6e 74 20 6e 65 78 74 50 61 67 65 73 69 7a 65  int nextPagesize
b8e0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
b8f0: 20 50 61 67 65 73 69 7a 65 20 61 66 74 65 72 20   Pagesize after 
b900: 56 41 43 55 55 4d 20 69 66 20 3e 30 20 2a 2f 0a  VACUUM if >0 */.
b910: 20 20 75 33 32 20 6d 61 67 69 63 3b 20 20 20 20    u32 magic;    
b920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b930: 2f 2a 20 4d 61 67 69 63 20 6e 75 6d 62 65 72 20  /* Magic number 
b940: 66 6f 72 20 64 65 74 65 63 74 20 6c 69 62 72 61  for detect libra
b950: 72 79 20 6d 69 73 75 73 65 20 2a 2f 0a 20 20 69  ry misuse */.  i
b960: 6e 74 20 6e 43 68 61 6e 67 65 3b 20 20 20 20 20  nt nChange;     
b970: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b980: 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62  Value returned b
b990: 79 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65  y sqlite3_change
b9a0: 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 6f  s() */.  int nTo
b9b0: 74 61 6c 43 68 61 6e 67 65 3b 20 20 20 20 20 20  talChange;      
b9c0: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
b9d0: 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69  returned by sqli
b9e0: 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67 65  te3_total_change
b9f0: 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20 61 4c 69  s() */.  int aLi
ba00: 6d 69 74 5b 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d  mit[SQLITE_N_LIM
ba10: 49 54 5d 3b 20 20 20 2f 2a 20 4c 69 6d 69 74 73  IT];   /* Limits
ba20: 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 53 6f   */.  int nMaxSo
ba30: 72 74 65 72 4d 6d 61 70 3b 20 20 20 20 20 20 20  rterMmap;       
ba40: 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73      /* Maximum s
ba50: 69 7a 65 20 6f 66 20 72 65 67 69 6f 6e 73 20 6d  ize of regions m
ba60: 61 70 70 65 64 20 62 79 20 73 6f 72 74 65 72 20  apped by sorter 
ba70: 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 71 6c 69  */.  struct sqli
ba80: 74 65 33 49 6e 69 74 49 6e 66 6f 20 7b 20 20 20  te3InitInfo {   
ba90: 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f     /* Informatio
baa0: 6e 20 75 73 65 64 20 64 75 72 69 6e 67 20 69 6e  n used during in
bab0: 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 2a 2f 0a  itialization */.
bac0: 20 20 20 20 69 6e 74 20 6e 65 77 54 6e 75 6d 3b      int newTnum;
bad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bae0: 2f 2a 20 52 6f 6f 74 70 61 67 65 20 6f 66 20 74  /* Rootpage of t
baf0: 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 69 74 69  able being initi
bb00: 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38  alized */.    u8
bb10: 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20   iDb;           
bb20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69            /* Whi
bb30: 63 68 20 64 62 20 66 69 6c 65 20 69 73 20 62 65  ch db file is be
bb40: 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  ing initialized 
bb50: 2a 2f 0a 20 20 20 20 75 38 20 62 75 73 79 3b 20  */.    u8 busy; 
bb60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bb70: 20 20 20 2f 2a 20 54 52 55 45 20 69 66 20 63 75     /* TRUE if cu
bb80: 72 72 65 6e 74 6c 79 20 69 6e 69 74 69 61 6c 69  rrently initiali
bb90: 7a 69 6e 67 20 2a 2f 0a 20 20 20 20 75 38 20 6f  zing */.    u8 o
bba0: 72 70 68 61 6e 54 72 69 67 67 65 72 3b 20 20 20  rphanTrigger;   
bbb0: 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20          /* Last 
bbc0: 73 74 61 74 65 6d 65 6e 74 20 69 73 20 6f 72 70  statement is orp
bbd0: 68 61 6e 65 64 20 54 45 4d 50 20 74 72 69 67 67  haned TEMP trigg
bbe0: 65 72 20 2a 2f 0a 20 20 20 20 75 38 20 69 6d 70  er */.    u8 imp
bbf0: 6f 73 74 65 72 54 61 62 6c 65 3b 20 20 20 20 20  osterTable;     
bc00: 20 20 20 20 20 20 2f 2a 20 42 75 69 6c 64 69 6e        /* Buildin
bc10: 67 20 61 6e 20 69 6d 70 6f 73 74 65 72 20 74 61  g an imposter ta
bc20: 62 6c 65 20 2a 2f 0a 20 20 7d 20 69 6e 69 74 3b  ble */.  } init;
bc30: 0a 20 20 69 6e 74 20 6e 56 64 62 65 41 63 74 69  .  int nVdbeActi
bc40: 76 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ve;             
bc50: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 56 44   /* Number of VD
bc60: 42 45 73 20 63 75 72 72 65 6e 74 6c 79 20 72 75  BEs currently ru
bc70: 6e 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 6e  nning */.  int n
bc80: 56 64 62 65 52 65 61 64 3b 20 20 20 20 20 20 20  VdbeRead;       
bc90: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
bca0: 65 72 20 6f 66 20 61 63 74 69 76 65 20 56 44 42  er of active VDB
bcb0: 45 73 20 74 68 61 74 20 72 65 61 64 20 6f 72 20  Es that read or 
bcc0: 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  write */.  int n
bcd0: 56 64 62 65 57 72 69 74 65 3b 20 20 20 20 20 20  VdbeWrite;      
bce0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
bcf0: 65 72 20 6f 66 20 61 63 74 69 76 65 20 56 44 42  er of active VDB
bd00: 45 73 20 74 68 61 74 20 72 65 61 64 20 61 6e 64  Es that read and
bd10: 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74 20   write */.  int 
bd20: 6e 56 64 62 65 45 78 65 63 3b 20 20 20 20 20 20  nVdbeExec;      
bd30: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
bd40: 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 63 61  ber of nested ca
bd50: 6c 6c 73 20 74 6f 20 56 64 62 65 45 78 65 63 28  lls to VdbeExec(
bd60: 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 44 65 73  ) */.  int nVDes
bd70: 74 72 6f 79 3b 20 20 20 20 20 20 20 20 20 20 20  troy;           
bd80: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
bd90: 66 20 61 63 74 69 76 65 20 4f 50 5f 56 44 65 73  f active OP_VDes
bda0: 74 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73 20  troy operations 
bdb0: 2a 2f 0a 20 20 69 6e 74 20 6e 45 78 74 65 6e 73  */.  int nExtens
bdc0: 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  ion;            
bdd0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
bde0: 6c 6f 61 64 65 64 20 65 78 74 65 6e 73 69 6f 6e  loaded extension
bdf0: 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 2a 61 45  s */.  void **aE
be00: 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20  xtension;       
be10: 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66       /* Array of
be20: 20 73 68 61 72 65 64 20 6c 69 62 72 61 72 79 20   shared library 
be30: 68 61 6e 64 6c 65 73 20 2a 2f 0a 20 20 69 6e 74  handles */.  int
be40: 20 28 2a 78 54 72 61 63 65 29 28 75 33 32 2c 76   (*xTrace)(u32,v
be50: 6f 69 64 2a 2c 76 6f 69 64 2a 2c 76 6f 69 64 2a  oid*,void*,void*
be60: 29 3b 20 20 20 20 20 2f 2a 20 54 72 61 63 65 20  );     /* Trace 
be70: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
be80: 69 64 20 2a 70 54 72 61 63 65 41 72 67 3b 20 20  id *pTraceArg;  
be90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bea0: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
beb0: 65 6e 74 20 74 6f 20 74 68 65 20 74 72 61 63 65  ent to the trace
bec0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
bed0: 6f 69 64 20 28 2a 78 50 72 6f 66 69 6c 65 29 28  oid (*xProfile)(
bee0: 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72  void*,const char
bef0: 2a 2c 75 36 34 29 3b 20 20 2f 2a 20 50 72 6f 66  *,u64);  /* Prof
bf00: 69 6c 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 2a  iling function *
bf10: 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f 66 69  /.  void *pProfi
bf20: 6c 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  leArg;          
bf30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
bf40: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 70 72 6f   Argument to pro
bf50: 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  file function */
bf60: 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6d 6d 69 74  .  void *pCommit
bf70: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
bf80: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
bf90: 20 74 6f 20 78 43 6f 6d 6d 69 74 43 61 6c 6c 62   to xCommitCallb
bfa0: 61 63 6b 28 29 20 2a 2f 0a 20 20 69 6e 74 20 28  ack() */.  int (
bfb0: 2a 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b  *xCommitCallback
bfc0: 29 28 76 6f 69 64 2a 29 3b 20 20 20 20 2f 2a 20  )(void*);    /* 
bfd0: 49 6e 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79  Invoked at every
bfe0: 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f   commit. */.  vo
bff0: 69 64 20 2a 70 52 6f 6c 6c 62 61 63 6b 41 72 67  id *pRollbackArg
c000: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
c010: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78  /* Argument to x
c020: 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b  RollbackCallback
c030: 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  () */.  void (*x
c040: 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63 6b  RollbackCallback
c050: 29 28 76 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e 76  )(void*); /* Inv
c060: 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20 63 6f  oked at every co
c070: 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20  mmit. */.  void 
c080: 2a 70 55 70 64 61 74 65 41 72 67 3b 0a 20 20 76  *pUpdateArg;.  v
c090: 6f 69 64 20 28 2a 78 55 70 64 61 74 65 43 61 6c  oid (*xUpdateCal
c0a0: 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e 74  lback)(void*,int
c0b0: 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  , const char*,co
c0c0: 6e 73 74 20 63 68 61 72 2a 2c 73 71 6c 69 74 65  nst char*,sqlite
c0d0: 5f 69 6e 74 36 34 29 3b 0a 23 69 66 64 65 66 20  _int64);.#ifdef 
c0e0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52  SQLITE_ENABLE_PR
c0f0: 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20 20 76  EUPDATE_HOOK.  v
c100: 6f 69 64 20 2a 70 50 72 65 55 70 64 61 74 65 41  oid *pPreUpdateA
c110: 72 67 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  rg;          /* 
c120: 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74  First argument t
c130: 6f 20 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c  o xPreUpdateCall
c140: 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 28  back */.  void (
c150: 2a 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62  *xPreUpdateCallb
c160: 61 63 6b 29 28 20 20 20 2f 2a 20 52 65 67 69 73  ack)(   /* Regis
c170: 74 65 72 65 64 20 75 73 69 6e 67 20 73 71 6c 69  tered using sqli
c180: 74 65 33 5f 70 72 65 75 70 64 61 74 65 5f 68 6f  te3_preupdate_ho
c190: 6f 6b 28 29 20 2a 2f 0a 20 20 20 20 76 6f 69 64  ok() */.    void
c1a0: 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  *,sqlite3*,int,c
c1b0: 68 61 72 20 63 6f 6e 73 74 2a 2c 63 68 61 72 20  har const*,char 
c1c0: 63 6f 6e 73 74 2a 2c 73 71 6c 69 74 65 33 5f 69  const*,sqlite3_i
c1d0: 6e 74 36 34 2c 73 71 6c 69 74 65 33 5f 69 6e 74  nt64,sqlite3_int
c1e0: 36 34 0a 20 20 29 3b 0a 20 20 50 72 65 55 70 64  64.  );.  PreUpd
c1f0: 61 74 65 20 2a 70 50 72 65 55 70 64 61 74 65 3b  ate *pPreUpdate;
c200: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65          /* Conte
c210: 78 74 20 66 6f 72 20 61 63 74 69 76 65 20 70 72  xt for active pr
c220: 65 2d 75 70 64 61 74 65 20 63 61 6c 6c 62 61 63  e-update callbac
c230: 6b 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k */.#endif /* S
c240: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45  QLITE_ENABLE_PRE
c250: 55 50 44 41 54 45 5f 48 4f 4f 4b 20 2a 2f 0a 23  UPDATE_HOOK */.#
c260: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
c270: 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 28 2a 78  IT_WAL.  int (*x
c280: 57 61 6c 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  WalCallback)(voi
c290: 64 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 2c 20  d *, sqlite3 *, 
c2a0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e  const char *, in
c2b0: 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 57 61 6c  t);.  void *pWal
c2c0: 41 72 67 3b 0a 23 65 6e 64 69 66 0a 20 20 76 6f  Arg;.#endif.  vo
c2d0: 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 29  id(*xCollNeeded)
c2e0: 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
c2f0: 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f 6e  int eTextRep,con
c300: 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
c310: 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 31 36  d(*xCollNeeded16
c320: 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a  )(void*,sqlite3*
c330: 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f  ,int eTextRep,co
c340: 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f  nst void*);.  vo
c350: 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65 64 41  id *pCollNeededA
c360: 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  rg;.  sqlite3_va
c370: 6c 75 65 20 2a 70 45 72 72 3b 20 20 20 20 20 20  lue *pErr;      
c380: 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65      /* Most rece
c390: 6e 74 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  nt error message
c3a0: 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20   */.  union {.  
c3b0: 20 20 76 6f 6c 61 74 69 6c 65 20 69 6e 74 20 69    volatile int i
c3c0: 73 49 6e 74 65 72 72 75 70 74 65 64 3b 20 2f 2a  sInterrupted; /*
c3d0: 20 54 72 75 65 20 69 66 20 73 71 6c 69 74 65 33   True if sqlite3
c3e0: 5f 69 6e 74 65 72 72 75 70 74 20 68 61 73 20 62  _interrupt has b
c3f0: 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20  een called */.  
c400: 20 20 64 6f 75 62 6c 65 20 6e 6f 74 55 73 65 64    double notUsed
c410: 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  1;            /*
c420: 20 53 70 61 63 65 72 20 2a 2f 0a 20 20 7d 20 75   Spacer */.  } u
c430: 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 20 6c  1;.  Lookaside l
c440: 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20  ookaside;       
c450: 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69 64 65 20     /* Lookaside 
c460: 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69 67 75 72 61  malloc configura
c470: 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65 66 20  tion */.#ifndef 
c480: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48  SQLITE_OMIT_AUTH
c490: 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 73 71 6c 69  ORIZATION.  sqli
c4a0: 74 65 33 5f 78 61 75 74 68 20 78 41 75 74 68 3b  te3_xauth xAuth;
c4b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 63 63            /* Acc
c4c0: 65 73 73 20 61 75 74 68 6f 72 69 7a 61 74 69 6f  ess authorizatio
c4d0: 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  n function */.  
c4e0: 76 6f 69 64 20 2a 70 41 75 74 68 41 72 67 3b 20  void *pAuthArg; 
c4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c500: 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f   1st argument to
c510: 20 74 68 65 20 61 63 63 65 73 73 20 61 75 74 68   the access auth
c520: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e   function */.#en
c530: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
c540: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
c550: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74 20  _CALLBACK.  int 
c560: 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76 6f 69  (*xProgress)(voi
c570: 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68 65  d *);     /* The
c580: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
c590: 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50  ck */.  void *pP
c5a0: 72 6f 67 72 65 73 73 41 72 67 3b 20 20 20 20 20  rogressArg;     
c5b0: 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
c5c0: 74 20 74 6f 20 74 68 65 20 70 72 6f 67 72 65 73  t to the progres
c5d0: 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  s callback */.  
c5e0: 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72 65  unsigned nProgre
c5f0: 73 73 4f 70 73 3b 20 20 20 20 20 20 20 20 2f 2a  ssOps;        /*
c600: 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f 64   Number of opcod
c610: 65 73 20 66 6f 72 20 70 72 6f 67 72 65 73 73 20  es for progress 
c620: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64  callback */.#end
c630: 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
c640: 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
c650: 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72 61 6e  BLE.  int nVTran
c660: 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s;              
c670: 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65 64      /* Allocated
c680: 20 73 69 7a 65 20 6f 66 20 61 56 54 72 61 6e 73   size of aVTrans
c690: 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f 64 75   */.  Hash aModu
c6a0: 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  le;             
c6b0: 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65 64      /* populated
c6c0: 20 62 79 20 73 71 6c 69 74 65 33 5f 63 72 65 61   by sqlite3_crea
c6d0: 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20  te_module() */. 
c6e0: 20 56 74 61 62 43 74 78 20 2a 70 56 74 61 62 43   VtabCtx *pVtabC
c6f0: 74 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  tx;            /
c700: 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61 63  * Context for ac
c710: 74 69 76 65 20 76 74 61 62 20 63 6f 6e 6e 65 63  tive vtab connec
c720: 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20 56 54  t/create */.  VT
c730: 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73 3b 20  able **aVTrans; 
c740: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
c750: 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 77 69  irtual tables wi
c760: 74 68 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74  th open transact
c770: 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65  ions */.  VTable
c780: 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b 20 20   *pDisconnect;  
c790: 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65 63 74 20    /* Disconnect 
c7a0: 74 68 65 73 65 20 69 6e 20 6e 65 78 74 20 73 71  these in next sq
c7b0: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29 20  lite3_prepare() 
c7c0: 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 48 61 73 68  */.#endif.  Hash
c7d0: 20 61 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20   aFunc;         
c7e0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 61 73            /* Has
c7f0: 68 20 74 61 62 6c 65 20 6f 66 20 63 6f 6e 6e 65  h table of conne
c800: 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20  ction functions 
c810: 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f 6c 6c 53  */.  Hash aCollS
c820: 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  eq;             
c830: 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c 61 74     /* All collat
c840: 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 2a 2f  ing sequences */
c850: 0a 20 20 42 75 73 79 48 61 6e 64 6c 65 72 20 62  .  BusyHandler b
c860: 75 73 79 48 61 6e 64 6c 65 72 3b 20 20 20 20 20  usyHandler;     
c870: 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c 62 61 63   /* Busy callbac
c880: 6b 20 2a 2f 0a 20 20 44 62 20 61 44 62 53 74 61  k */.  Db aDbSta
c890: 74 69 63 5b 32 5d 3b 20 20 20 20 20 20 20 20 20  tic[2];         
c8a0: 20 20 20 20 20 2f 2a 20 53 74 61 74 69 63 20 73       /* Static s
c8b0: 70 61 63 65 20 66 6f 72 20 74 68 65 20 32 20 64  pace for the 2 d
c8c0: 65 66 61 75 6c 74 20 62 61 63 6b 65 6e 64 73 20  efault backends 
c8d0: 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  */.  Savepoint *
c8e0: 70 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20  pSavepoint;     
c8f0: 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63     /* List of ac
c900: 74 69 76 65 20 73 61 76 65 70 6f 69 6e 74 73 20  tive savepoints 
c910: 2a 2f 0a 20 20 69 6e 74 20 62 75 73 79 54 69 6d  */.  int busyTim
c920: 65 6f 75 74 3b 20 20 20 20 20 20 20 20 20 20 20  eout;           
c930: 20 20 20 2f 2a 20 42 75 73 79 20 68 61 6e 64 6c     /* Busy handl
c940: 65 72 20 74 69 6d 65 6f 75 74 2c 20 69 6e 20 6d  er timeout, in m
c950: 73 65 63 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61  sec */.  int nSa
c960: 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20  vepoint;        
c970: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
c980: 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74   of non-transact
c990: 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 2a  ion savepoints *
c9a0: 2f 0a 20 20 69 6e 74 20 6e 53 74 61 74 65 6d 65  /.  int nStateme
c9b0: 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nt;             
c9c0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
c9d0: 65 73 74 65 64 20 73 74 61 74 65 6d 65 6e 74 2d  ested statement-
c9e0: 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 20 2a 2f  transactions  */
c9f0: 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64  .  i64 nDeferred
ca00: 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20  Cons;           
ca10: 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65 64   /* Net deferred
ca20: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74 68 69   constraints thi
ca30: 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 2a  s transaction. *
ca40: 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65  /.  i64 nDeferre
ca50: 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20  dImmCons;       
ca60: 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65    /* Net deferre
ca70: 64 20 69 6d 6d 65 64 69 61 74 65 20 63 6f 6e 73  d immediate cons
ca80: 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74  traints */.  int
ca90: 20 2a 70 6e 42 79 74 65 73 46 72 65 65 64 3b 20   *pnBytesFreed; 
caa0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66             /* If
cab0: 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 6e 63 72 65   not NULL, incre
cac0: 6d 65 6e 74 20 74 68 69 73 20 69 6e 20 44 62 46  ment this in DbF
cad0: 72 65 65 28 29 20 2a 2f 0a 23 69 66 64 65 66 20  ree() */.#ifdef 
cae0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e  SQLITE_ENABLE_UN
caf0: 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 2f 2a  LOCK_NOTIFY.  /*
cb00: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 76   The following v
cb10: 61 72 69 61 62 6c 65 73 20 61 72 65 20 61 6c 6c  ariables are all
cb20: 20 70 72 6f 74 65 63 74 65 64 20 62 79 20 74 68   protected by th
cb30: 65 20 53 54 41 54 49 43 5f 4d 41 53 54 45 52 0a  e STATIC_MASTER.
cb40: 20 20 2a 2a 20 6d 75 74 65 78 2c 20 6e 6f 74 20    ** mutex, not 
cb50: 62 79 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78  by sqlite3.mutex
cb60: 2e 20 54 68 65 79 20 61 72 65 20 75 73 65 64 20  . They are used 
cb70: 62 79 20 63 6f 64 65 20 69 6e 20 6e 6f 74 69 66  by code in notif
cb80: 79 2e 63 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57  y.c..  **.  ** W
cb90: 68 65 6e 20 58 2e 70 55 6e 6c 6f 63 6b 43 6f 6e  hen X.pUnlockCon
cba0: 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74  nection==Y, that
cbb0: 20 6d 65 61 6e 73 20 74 68 61 74 20 58 20 69 73   means that X is
cbc0: 20 77 61 69 74 69 6e 67 20 66 6f 72 20 59 20 74   waiting for Y t
cbd0: 6f 0a 20 20 2a 2a 20 75 6e 6c 6f 63 6b 20 73 6f  o.  ** unlock so
cbe0: 20 74 68 61 74 20 69 74 20 63 61 6e 20 70 72 6f   that it can pro
cbf0: 63 65 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ceed..  **.  ** 
cc00: 57 68 65 6e 20 58 2e 70 42 6c 6f 63 6b 69 6e 67  When X.pBlocking
cc10: 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74  Connection==Y, t
cc20: 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 73  hat means that s
cc30: 6f 6d 65 74 68 69 6e 67 20 74 68 61 74 20 58 20  omething that X 
cc40: 74 72 69 65 64 0a 20 20 2a 2a 20 74 72 69 65 64  tried.  ** tried
cc50: 20 74 6f 20 64 6f 20 72 65 63 65 6e 74 6c 79 20   to do recently 
cc60: 66 61 69 6c 65 64 20 77 69 74 68 20 61 6e 20 53  failed with an S
cc70: 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 65 72 72  QLITE_LOCKED err
cc80: 6f 72 20 64 75 65 20 74 6f 20 6c 6f 63 6b 73 0a  or due to locks.
cc90: 20 20 2a 2a 20 68 65 6c 64 20 62 79 20 59 2e 0a    ** held by Y..
cca0: 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a    */.  sqlite3 *
ccb0: 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74  pBlockingConnect
ccc0: 69 6f 6e 3b 20 2f 2a 20 43 6f 6e 6e 65 63 74 69  ion; /* Connecti
ccd0: 6f 6e 20 74 68 61 74 20 63 61 75 73 65 64 20 53  on that caused S
cce0: 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 2a 2f 0a  QLITE_LOCKED */.
ccf0: 20 20 73 71 6c 69 74 65 33 20 2a 70 55 6e 6c 6f    sqlite3 *pUnlo
cd00: 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 20 20  ckConnection;   
cd10: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65          /* Conne
cd20: 63 74 69 6f 6e 20 74 6f 20 77 61 74 63 68 20 66  ction to watch f
cd30: 6f 72 20 75 6e 6c 6f 63 6b 20 2a 2f 0a 20 20 76  or unlock */.  v
cd40: 6f 69 64 20 2a 70 55 6e 6c 6f 63 6b 41 72 67 3b  oid *pUnlockArg;
cd50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd60: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
cd70: 20 74 6f 20 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66   to xUnlockNotif
cd80: 79 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 55  y */.  void (*xU
cd90: 6e 6c 6f 63 6b 4e 6f 74 69 66 79 29 28 76 6f 69  nlockNotify)(voi
cda0: 64 20 2a 2a 2c 20 69 6e 74 29 3b 20 20 2f 2a 20  d **, int);  /* 
cdb0: 55 6e 6c 6f 63 6b 20 6e 6f 74 69 66 79 20 63 61  Unlock notify ca
cdc0: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 73 71 6c 69  llback */.  sqli
cdd0: 74 65 33 20 2a 70 4e 65 78 74 42 6c 6f 63 6b 65  te3 *pNextBlocke
cde0: 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78  d;        /* Nex
cdf0: 74 20 69 6e 20 6c 69 73 74 20 6f 66 20 61 6c 6c  t in list of all
ce00: 20 62 6c 6f 63 6b 65 64 20 63 6f 6e 6e 65 63 74   blocked connect
ce10: 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  ions */.#endif.#
ce20: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45  ifdef SQLITE_USE
ce30: 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e  R_AUTHENTICATION
ce40: 0a 20 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61  .  sqlite3_usera
ce50: 75 74 68 20 61 75 74 68 3b 20 20 20 20 20 20 20  uth auth;       
ce60: 20 2f 2a 20 55 73 65 72 20 61 75 74 68 65 6e 74   /* User authent
ce70: 69 63 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74  ication informat
ce80: 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b  ion */.#endif.};
ce90: 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f 20  ../*.** A macro 
cea0: 74 6f 20 64 69 73 63 6f 76 65 72 20 74 68 65 20  to discover the 
ceb0: 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 64 61  encoding of a da
cec0: 74 61 62 61 73 65 2e 0a 2a 2f 0a 23 64 65 66 69  tabase..*/.#defi
ced0: 6e 65 20 53 43 48 45 4d 41 5f 45 4e 43 28 64 62  ne SCHEMA_ENC(db
cee0: 29 20 28 28 64 62 29 2d 3e 61 44 62 5b 30 5d 2e  ) ((db)->aDb[0].
cef0: 70 53 63 68 65 6d 61 2d 3e 65 6e 63 29 0a 23 64  pSchema->enc).#d
cf00: 65 66 69 6e 65 20 45 4e 43 28 64 62 29 20 20 20  efine ENC(db)   
cf10: 20 20 20 20 20 28 28 64 62 29 2d 3e 65 6e 63 29       ((db)->enc)
cf20: 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65  ../*.** Possible
cf30: 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20   values for the 
cf40: 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 2e 0a 2a  sqlite3.flags..*
cf50: 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74  *.** Value const
cf60: 72 61 69 6e 74 73 20 28 65 6e 66 6f 72 63 65 64  raints (enforced
cf70: 20 76 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a   via assert()):.
cf80: 2a 2a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 46  **      SQLITE_F
cf90: 75 6c 6c 46 53 79 6e 63 20 20 20 20 20 3d 3d 20  ullFSync     == 
cfa0: 50 41 47 45 52 5f 46 55 4c 4c 46 53 59 4e 43 0a  PAGER_FULLFSYNC.
cfb0: 2a 2a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 43  **      SQLITE_C
cfc0: 6b 70 74 46 75 6c 6c 46 53 79 6e 63 20 3d 3d 20  kptFullFSync == 
cfd0: 50 41 47 45 52 5f 43 4b 50 54 5f 46 55 4c 4c 46  PAGER_CKPT_FULLF
cfe0: 53 59 4e 43 0a 2a 2a 20 20 20 20 20 20 53 51 4c  SYNC.**      SQL
cff0: 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 20 20  ITE_CacheSpill  
d000: 20 20 3d 3d 20 50 41 47 45 52 5f 43 41 43 48 45    == PAGER_CACHE
d010: 5f 53 50 49 4c 4c 0a 2a 2f 0a 23 64 65 66 69 6e  _SPILL.*/.#defin
d020: 65 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61  e SQLITE_VdbeTra
d030: 63 65 20 20 20 20 20 20 30 78 30 30 30 30 30 30  ce      0x000000
d040: 30 31 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 74  01  /* True to t
d050: 72 61 63 65 20 56 44 42 45 20 65 78 65 63 75 74  race VDBE execut
d060: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
d070: 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e  QLITE_InternChan
d080: 67 65 73 20 20 30 78 30 30 30 30 30 30 30 32 20  ges  0x00000002 
d090: 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74 65 64 20   /* Uncommitted 
d0a0: 48 61 73 68 20 74 61 62 6c 65 20 63 68 61 6e 67  Hash table chang
d0b0: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
d0c0: 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65  LITE_FullColName
d0d0: 73 20 20 20 30 78 30 30 30 30 30 30 30 34 20 20  s   0x00000004  
d0e0: 2f 2a 20 53 68 6f 77 20 66 75 6c 6c 20 63 6f 6c  /* Show full col
d0f0: 75 6d 6e 20 6e 61 6d 65 73 20 6f 6e 20 53 45 4c  umn names on SEL
d100: 45 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ECT */.#define S
d110: 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20  QLITE_FullFSync 
d120: 20 20 20 20 20 30 78 30 30 30 30 30 30 30 38 20       0x00000008 
d130: 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79   /* Use full fsy
d140: 6e 63 20 6f 6e 20 74 68 65 20 62 61 63 6b 65 6e  nc on the backen
d150: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
d160: 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e  ITE_CkptFullFSyn
d170: 63 20 20 30 78 30 30 30 30 30 30 31 30 20 20 2f  c  0x00000010  /
d180: 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79 6e 63  * Use full fsync
d190: 20 66 6f 72 20 63 68 65 63 6b 70 6f 69 6e 74 20   for checkpoint 
d1a0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d1b0: 45 5f 43 61 63 68 65 53 70 69 6c 6c 20 20 20 20  E_CacheSpill    
d1c0: 20 30 78 30 30 30 30 30 30 32 30 20 20 2f 2a 20   0x00000020  /* 
d1d0: 4f 4b 20 74 6f 20 73 70 69 6c 6c 20 70 61 67 65  OK to spill page
d1e0: 72 20 63 61 63 68 65 20 2a 2f 0a 23 64 65 66 69  r cache */.#defi
d1f0: 6e 65 20 53 51 4c 49 54 45 5f 53 68 6f 72 74 43  ne SQLITE_ShortC
d200: 6f 6c 4e 61 6d 65 73 20 20 30 78 30 30 30 30 30  olNames  0x00000
d210: 30 34 30 20 20 2f 2a 20 53 68 6f 77 20 73 68 6f  040  /* Show sho
d220: 72 74 20 63 6f 6c 75 6d 6e 73 20 6e 61 6d 65 73  rt columns names
d230: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
d240: 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 20 20 20  TE_CountRows    
d250: 20 20 30 78 30 30 30 30 30 30 38 30 20 20 2f 2a    0x00000080  /*
d260: 20 43 6f 75 6e 74 20 72 6f 77 73 20 63 68 61 6e   Count rows chan
d270: 67 65 64 20 62 79 20 49 4e 53 45 52 54 2c 20 2a  ged by INSERT, *
d280: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
d290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d2a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20              /*  
d2b0: 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41   DELETE, or UPDA
d2c0: 54 45 20 61 6e 64 20 72 65 74 75 72 6e 20 2a 2f  TE and return */
d2d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d2f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20             /*   
d300: 74 68 65 20 63 6f 75 6e 74 20 75 73 69 6e 67 20  the count using 
d310: 61 20 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23  a callback. */.#
d320: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 75  define SQLITE_Nu
d330: 6c 6c 43 61 6c 6c 62 61 63 6b 20 20 20 30 78 30  llCallback   0x0
d340: 30 30 30 30 31 30 30 20 20 2f 2a 20 49 6e 76 6f  0000100  /* Invo
d350: 6b 65 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20  ke the callback 
d360: 6f 6e 63 65 20 69 66 20 74 68 65 20 2a 2f 0a 20  once if the */. 
d370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d390: 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 72 65           /*   re
d3a0: 73 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74  sult set is empt
d3b0: 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  y */.#define SQL
d3c0: 49 54 45 5f 53 71 6c 54 72 61 63 65 20 20 20 20  ITE_SqlTrace    
d3d0: 20 20 20 30 78 30 30 30 30 30 32 30 30 20 20 2f     0x00000200  /
d3e0: 2a 20 44 65 62 75 67 20 70 72 69 6e 74 20 53 51  * Debug print SQ
d3f0: 4c 20 61 73 20 69 74 20 65 78 65 63 75 74 65 73  L as it executes
d400: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
d410: 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 20 20  TE_VdbeListing  
d420: 20 20 30 78 30 30 30 30 30 34 30 30 20 20 2f 2a    0x00000400  /*
d430: 20 44 65 62 75 67 20 6c 69 73 74 69 6e 67 73 20   Debug listings 
d440: 6f 66 20 56 44 42 45 20 70 72 6f 67 72 61 6d 73  of VDBE programs
d450: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
d460: 54 45 5f 57 72 69 74 65 53 63 68 65 6d 61 20 20  TE_WriteSchema  
d470: 20 20 30 78 30 30 30 30 30 38 30 30 20 20 2f 2a    0x00000800  /*
d480: 20 4f 4b 20 74 6f 20 75 70 64 61 74 65 20 53 51   OK to update SQ
d490: 4c 49 54 45 5f 4d 41 53 54 45 52 20 2a 2f 0a 23  LITE_MASTER */.#
d4a0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64  define SQLITE_Vd
d4b0: 62 65 41 64 64 6f 70 54 72 61 63 65 20 30 78 30  beAddopTrace 0x0
d4c0: 30 30 30 31 30 30 30 20 20 2f 2a 20 54 72 61 63  0001000  /* Trac
d4d0: 65 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  e sqlite3VdbeAdd
d4e0: 4f 70 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 23 64  Op() calls */.#d
d4f0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 67 6e  efine SQLITE_Ign
d500: 6f 72 65 43 68 65 63 6b 73 20 20 20 30 78 30 30  oreChecks   0x00
d510: 30 30 32 30 30 30 20 20 2f 2a 20 44 6f 20 6e 6f  002000  /* Do no
d520: 74 20 65 6e 66 6f 72 63 65 20 63 68 65 63 6b 20  t enforce check 
d530: 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23  constraints */.#
d540: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65  define SQLITE_Re
d550: 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64 20 30 78  adUncommitted 0x
d560: 30 30 30 34 30 30 30 20 20 2f 2a 20 46 6f 72 20  0004000  /* For 
d570: 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64  shared-cache mod
d580: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
d590: 49 54 45 5f 4c 65 67 61 63 79 46 69 6c 65 46 6d  ITE_LegacyFileFm
d5a0: 74 20 20 30 78 30 30 30 30 38 30 30 30 20 20 2f  t  0x00008000  /
d5b0: 2a 20 43 72 65 61 74 65 20 6e 65 77 20 64 61 74  * Create new dat
d5c0: 61 62 61 73 65 73 20 69 6e 20 66 6f 72 6d 61 74  abases in format
d5d0: 20 31 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51   1 */.#define SQ
d5e0: 4c 49 54 45 5f 52 65 63 6f 76 65 72 79 4d 6f 64  LITE_RecoveryMod
d5f0: 65 20 20 20 30 78 30 30 30 31 30 30 30 30 20 20  e   0x00010000  
d600: 2f 2a 20 49 67 6e 6f 72 65 20 73 63 68 65 6d 61  /* Ignore schema
d610: 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69   errors */.#defi
d620: 6e 65 20 53 51 4c 49 54 45 5f 52 65 76 65 72 73  ne SQLITE_Revers
d630: 65 4f 72 64 65 72 20 20 20 30 78 30 30 30 32 30  eOrder   0x00020
d640: 30 30 30 20 20 2f 2a 20 52 65 76 65 72 73 65 20  000  /* Reverse 
d650: 75 6e 6f 72 64 65 72 65 64 20 53 45 4c 45 43 54  unordered SELECT
d660: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
d670: 49 54 45 5f 52 65 63 54 72 69 67 67 65 72 73 20  ITE_RecTriggers 
d680: 20 20 20 30 78 30 30 30 34 30 30 30 30 20 20 2f     0x00040000  /
d690: 2a 20 45 6e 61 62 6c 65 20 72 65 63 75 72 73 69  * Enable recursi
d6a0: 76 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23  ve triggers */.#
d6b0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 6f  define SQLITE_Fo
d6c0: 72 65 69 67 6e 4b 65 79 73 20 20 20 20 30 78 30  reignKeys    0x0
d6d0: 30 30 38 30 30 30 30 20 20 2f 2a 20 45 6e 66 6f  0080000  /* Enfo
d6e0: 72 63 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  rce foreign key 
d6f0: 63 6f 6e 73 74 72 61 69 6e 74 73 20 20 2a 2f 0a  constraints  */.
d700: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
d710: 75 74 6f 49 6e 64 65 78 20 20 20 20 20 20 30 78  utoIndex      0x
d720: 30 30 31 30 30 30 30 30 20 20 2f 2a 20 45 6e 61  00100000  /* Ena
d730: 62 6c 65 20 61 75 74 6f 6d 61 74 69 63 20 69 6e  ble automatic in
d740: 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  dexes */.#define
d750: 20 53 51 4c 49 54 45 5f 50 72 65 66 65 72 42 75   SQLITE_PreferBu
d760: 69 6c 74 69 6e 20 20 30 78 30 30 32 30 30 30 30  iltin  0x0020000
d770: 30 20 20 2f 2a 20 50 72 65 66 65 72 65 6e 63 65  0  /* Preference
d780: 20 74 6f 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e   to built-in fun
d790: 63 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  cs */.#define SQ
d7a0: 4c 49 54 45 5f 4c 6f 61 64 45 78 74 65 6e 73 69  LITE_LoadExtensi
d7b0: 6f 6e 20 20 30 78 30 30 34 30 30 30 30 30 20 20  on  0x00400000  
d7c0: 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65  /* Enable load_e
d7d0: 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23 64 65 66  xtension */.#def
d7e0: 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64 45  ine SQLITE_LoadE
d7f0: 78 74 46 75 6e 63 20 20 20 20 30 78 30 30 38 30  xtFunc    0x0080
d800: 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20  0000  /* Enable 
d810: 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 29  load_extension()
d820: 20 53 51 4c 20 66 75 6e 63 20 2a 2f 0a 23 64 65   SQL func */.#de
d830: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e 61 62  fine SQLITE_Enab
d840: 6c 65 54 72 69 67 67 65 72 20 20 30 78 30 31 30  leTrigger  0x010
d850: 30 30 30 30 30 20 20 2f 2a 20 54 72 75 65 20 74  00000  /* True t
d860: 6f 20 65 6e 61 62 6c 65 20 74 72 69 67 67 65 72  o enable trigger
d870: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
d880: 49 54 45 5f 44 65 66 65 72 46 4b 73 20 20 20 20  ITE_DeferFKs    
d890: 20 20 20 30 78 30 32 30 30 30 30 30 30 20 20 2f     0x02000000  /
d8a0: 2a 20 44 65 66 65 72 20 61 6c 6c 20 46 4b 20 63  * Defer all FK c
d8b0: 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64  onstraints */.#d
d8c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75 65  efine SQLITE_Que
d8d0: 72 79 4f 6e 6c 79 20 20 20 20 20 20 30 78 30 34  ryOnly      0x04
d8e0: 30 30 30 30 30 30 20 20 2f 2a 20 44 69 73 61 62  000000  /* Disab
d8f0: 6c 65 20 64 61 74 61 62 61 73 65 20 63 68 61 6e  le database chan
d900: 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ges */.#define S
d910: 51 4c 49 54 45 5f 56 64 62 65 45 51 50 20 20 20  QLITE_VdbeEQP   
d920: 20 20 20 20 20 30 78 30 38 30 30 30 30 30 30 20       0x08000000 
d930: 20 2f 2a 20 44 65 62 75 67 20 45 58 50 4c 41 49   /* Debug EXPLAI
d940: 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 2a 2f 0a  N QUERY PLAN */.
d950: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56  #define SQLITE_V
d960: 61 63 75 75 6d 20 20 20 20 20 20 20 20 20 30 78  acuum         0x
d970: 31 30 30 30 30 30 30 30 20 20 2f 2a 20 43 75 72  10000000  /* Cur
d980: 72 65 6e 74 6c 79 20 69 6e 20 61 20 56 41 43 55  rently in a VACU
d990: 55 4d 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  UM */.#define SQ
d9a0: 4c 49 54 45 5f 43 65 6c 6c 53 69 7a 65 43 6b 20  LITE_CellSizeCk 
d9b0: 20 20 20 20 30 78 32 30 30 30 30 30 30 30 20 20      0x20000000  
d9c0: 2f 2a 20 43 68 65 63 6b 20 62 74 72 65 65 20 63  /* Check btree c
d9d0: 65 6c 6c 20 73 69 7a 65 73 20 6f 6e 20 6c 6f 61  ell sizes on loa
d9e0: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
d9f0: 49 54 45 5f 46 74 73 33 54 6f 6b 65 6e 69 7a 65  ITE_Fts3Tokenize
da00: 72 20 20 30 78 34 30 30 30 30 30 30 30 20 20 2f  r  0x40000000  /
da10: 2a 20 45 6e 61 62 6c 65 20 66 74 73 33 5f 74 6f  * Enable fts3_to
da20: 6b 65 6e 69 7a 65 72 28 32 29 20 2a 2f 0a 23 64  kenizer(2) */.#d
da30: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 6f 43  efine SQLITE_NoC
da40: 6b 70 74 4f 6e 43 6c 6f 73 65 20 20 30 78 38 30  kptOnClose  0x80
da50: 30 30 30 30 30 30 20 20 2f 2a 20 4e 6f 20 63 68  000000  /* No ch
da60: 65 63 6b 70 6f 69 6e 74 20 6f 6e 20 63 6c 6f 73  eckpoint on clos
da70: 65 28 29 2f 44 45 54 41 43 48 20 2a 2f 0a 0a 0a  e()/DETACH */...
da80: 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f 66 20 74 68  /*.** Bits of th
da90: 65 20 73 71 6c 69 74 65 33 2e 64 62 4f 70 74 46  e sqlite3.dbOptF
daa0: 6c 61 67 73 20 66 69 65 6c 64 20 74 68 61 74 20  lags field that 
dab0: 61 72 65 20 75 73 65 64 20 62 79 20 74 68 65 0a  are used by the.
dac0: 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f  ** sqlite3_test_
dad0: 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54  control(SQLITE_T
dae0: 45 53 54 43 54 52 4c 5f 4f 50 54 49 4d 49 5a 41  ESTCTRL_OPTIMIZA
daf0: 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69 6e 74 65 72  TIONS,...) inter
db00: 66 61 63 65 20 74 6f 0a 2a 2a 20 73 65 6c 65 63  face to.** selec
db10: 74 69 76 65 6c 79 20 64 69 73 61 62 6c 65 20 76  tively disable v
db20: 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74  arious optimizat
db30: 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ions..*/.#define
db40: 20 53 51 4c 49 54 45 5f 51 75 65 72 79 46 6c 61   SQLITE_QueryFla
db50: 74 74 65 6e 65 72 20 30 78 30 30 30 31 20 20 20  ttener 0x0001   
db60: 2f 2a 20 51 75 65 72 79 20 66 6c 61 74 74 65 6e  /* Query flatten
db70: 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ing */.#define S
db80: 51 4c 49 54 45 5f 43 6f 6c 75 6d 6e 43 61 63 68  QLITE_ColumnCach
db90: 65 20 20 20 20 30 78 30 30 30 32 20 20 20 2f 2a  e    0x0002   /*
dba0: 20 43 6f 6c 75 6d 6e 20 63 61 63 68 65 20 2a 2f   Column cache */
dbb0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
dbc0: 47 72 6f 75 70 42 79 4f 72 64 65 72 20 20 20 30  GroupByOrder   0
dbd0: 78 30 30 30 34 20 20 20 2f 2a 20 47 52 4f 55 50  x0004   /* GROUP
dbe0: 42 59 20 63 6f 76 65 72 20 6f 66 20 4f 52 44 45  BY cover of ORDE
dbf0: 52 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  RBY */.#define S
dc00: 51 4c 49 54 45 5f 46 61 63 74 6f 72 4f 75 74 43  QLITE_FactorOutC
dc10: 6f 6e 73 74 20 30 78 30 30 30 38 20 20 20 2f 2a  onst 0x0008   /*
dc20: 20 43 6f 6e 73 74 61 6e 74 20 66 61 63 74 6f 72   Constant factor
dc30: 69 6e 67 20 2a 2f 0a 2f 2a 20 20 20 20 20 20 20  ing */./*       
dc40: 20 20 20 20 20 20 20 20 20 6e 6f 74 20 75 73 65           not use
dc50: 64 20 20 20 20 30 78 30 30 31 30 20 20 20 2f 2f  d    0x0010   //
dc60: 20 57 61 73 3a 20 53 51 4c 49 54 45 5f 49 64 78   Was: SQLITE_Idx
dc70: 52 65 61 6c 41 73 49 6e 74 20 2a 2f 0a 23 64 65  RealAsInt */.#de
dc80: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 69 73 74  fine SQLITE_Dist
dc90: 69 6e 63 74 4f 70 74 20 20 20 20 30 78 30 30 32  inctOpt    0x002
dca0: 30 20 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20  0   /* DISTINCT 
dcb0: 75 73 69 6e 67 20 69 6e 64 65 78 65 73 20 2a 2f  using indexes */
dcc0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
dcd0: 43 6f 76 65 72 49 64 78 53 63 61 6e 20 20 20 30  CoverIdxScan   0
dce0: 78 30 30 34 30 20 20 20 2f 2a 20 43 6f 76 65 72  x0040   /* Cover
dcf0: 69 6e 67 20 69 6e 64 65 78 20 73 63 61 6e 73 20  ing index scans 
dd00: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
dd10: 45 5f 4f 72 64 65 72 42 79 49 64 78 4a 6f 69 6e  E_OrderByIdxJoin
dd20: 20 30 78 30 30 38 30 20 20 20 2f 2a 20 4f 52 44   0x0080   /* ORD
dd30: 45 52 20 42 59 20 6f 66 20 6a 6f 69 6e 73 20 76  ER BY of joins v
dd40: 69 61 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  ia index */.#def
dd50: 69 6e 65 20 53 51 4c 49 54 45 5f 53 75 62 71 43  ine SQLITE_SubqC
dd60: 6f 72 6f 75 74 69 6e 65 20 20 30 78 30 31 30 30  oroutine  0x0100
dd70: 20 20 20 2f 2a 20 45 76 61 6c 75 61 74 65 20 73     /* Evaluate s
dd80: 75 62 71 75 65 72 69 65 73 20 61 73 20 63 6f 72  ubqueries as cor
dd90: 6f 75 74 69 6e 65 73 20 2a 2f 0a 23 64 65 66 69  outines */.#defi
dda0: 6e 65 20 53 51 4c 49 54 45 5f 54 72 61 6e 73 69  ne SQLITE_Transi
ddb0: 74 69 76 65 20 20 20 20 20 30 78 30 32 30 30 20  tive     0x0200 
ddc0: 20 20 2f 2a 20 54 72 61 6e 73 69 74 69 76 65 20    /* Transitive 
ddd0: 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23  constraints */.#
dde0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 6d  define SQLITE_Om
ddf0: 69 74 4e 6f 6f 70 4a 6f 69 6e 20 20 20 30 78 30  itNoopJoin   0x0
de00: 34 30 30 20 20 20 2f 2a 20 4f 6d 69 74 20 75 6e  400   /* Omit un
de10: 75 73 65 64 20 74 61 62 6c 65 73 20 69 6e 20 6a  used tables in j
de20: 6f 69 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  oins */.#define 
de30: 53 51 4c 49 54 45 5f 53 74 61 74 33 34 20 20 20  SQLITE_Stat34   
de40: 20 20 20 20 20 20 30 78 30 38 30 30 20 20 20 2f        0x0800   /
de50: 2a 20 55 73 65 20 53 54 41 54 33 20 6f 72 20 53  * Use STAT3 or S
de60: 54 41 54 34 20 64 61 74 61 20 2a 2f 0a 23 64 65  TAT4 data */.#de
de70: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 75 72 73  fine SQLITE_Curs
de80: 6f 72 48 69 6e 74 73 20 20 20 20 30 78 32 30 30  orHints    0x200
de90: 30 20 20 20 2f 2a 20 41 64 64 20 4f 50 5f 43 75  0   /* Add OP_Cu
dea0: 72 73 6f 72 48 69 6e 74 20 6f 70 63 6f 64 65 73  rsorHint opcodes
deb0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
dec0: 54 45 5f 41 6c 6c 4f 70 74 73 20 20 20 20 20 20  TE_AllOpts      
ded0: 20 20 30 78 66 66 66 66 20 20 20 2f 2a 20 41 6c    0xffff   /* Al
dee0: 6c 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20  l optimizations 
def0: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  */../*.** Macros
df00: 20 66 6f 72 20 74 65 73 74 69 6e 67 20 77 68 65   for testing whe
df10: 74 68 65 72 20 6f 72 20 6e 6f 74 20 6f 70 74 69  ther or not opti
df20: 6d 69 7a 61 74 69 6f 6e 73 20 61 72 65 20 65 6e  mizations are en
df30: 61 62 6c 65 64 20 6f 72 20 64 69 73 61 62 6c 65  abled or disable
df40: 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 70  d..*/.#define Op
df50: 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61 62 6c  timizationDisabl
df60: 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 28 28  ed(db, mask)  ((
df70: 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73  (db)->dbOptFlags
df80: 26 28 6d 61 73 6b 29 29 21 3d 30 29 0a 23 64 65  &(mask))!=0).#de
df90: 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f  fine Optimizatio
dfa0: 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61 73  nEnabled(db, mas
dfb0: 6b 29 20 20 20 28 28 28 64 62 29 2d 3e 64 62 4f  k)   (((db)->dbO
dfc0: 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29 3d  ptFlags&(mask))=
dfd0: 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  =0)../*.** Retur
dfe0: 6e 20 74 72 75 65 20 69 66 20 69 74 20 4f 4b 20  n true if it OK 
dff0: 74 6f 20 66 61 63 74 6f 72 20 63 6f 6e 73 74 61  to factor consta
e000: 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20 69  nt expressions i
e010: 6e 74 6f 20 74 68 65 20 69 6e 69 74 69 61 6c 69  nto the initiali
e020: 7a 61 74 69 6f 6e 0a 2a 2a 20 63 6f 64 65 2e 20  zation.** code. 
e030: 54 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20  The argument is 
e040: 61 20 50 61 72 73 65 20 6f 62 6a 65 63 74 20 66  a Parse object f
e050: 6f 72 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65  or the code gene
e060: 72 61 74 6f 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  rator..*/.#defin
e070: 65 20 43 6f 6e 73 74 46 61 63 74 6f 72 4f 6b 28  e ConstFactorOk(
e080: 50 29 20 28 28 50 29 2d 3e 6f 6b 43 6f 6e 73 74  P) ((P)->okConst
e090: 46 61 63 74 6f 72 29 0a 0a 2f 2a 0a 2a 2a 20 50  Factor)../*.** P
e0a0: 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66  ossible values f
e0b0: 6f 72 20 74 68 65 20 73 71 6c 69 74 65 2e 6d 61  or the sqlite.ma
e0c0: 67 69 63 20 66 69 65 6c 64 2e 0a 2a 2a 20 54 68  gic field..** Th
e0d0: 65 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6f 62  e numbers are ob
e0e0: 74 61 69 6e 65 64 20 61 74 20 72 61 6e 64 6f 6d  tained at random
e0f0: 20 61 6e 64 20 68 61 76 65 20 6e 6f 20 73 70 65   and have no spe
e100: 63 69 61 6c 20 6d 65 61 6e 69 6e 67 2c 20 6f 74  cial meaning, ot
e110: 68 65 72 0a 2a 2a 20 74 68 61 6e 20 62 65 69 6e  her.** than bein
e120: 67 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d 20  g distinct from 
e130: 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a 2a 2f 0a  one another..*/.
e140: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
e150: 41 47 49 43 5f 4f 50 45 4e 20 20 20 20 20 30 78  AGIC_OPEN     0x
e160: 61 30 32 39 61 36 39 37 20 20 2f 2a 20 44 61 74  a029a697  /* Dat
e170: 61 62 61 73 65 20 69 73 20 6f 70 65 6e 20 2a 2f  abase is open */
e180: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e190: 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20 20 20 30  MAGIC_CLOSED   0
e1a0: 78 39 66 33 63 32 64 33 33 20 20 2f 2a 20 44 61  x9f3c2d33  /* Da
e1b0: 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73 65 64  tabase is closed
e1c0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e1d0: 54 45 5f 4d 41 47 49 43 5f 53 49 43 4b 20 20 20  TE_MAGIC_SICK   
e1e0: 20 20 30 78 34 62 37 37 31 32 39 30 20 20 2f 2a    0x4b771290  /*
e1f0: 20 45 72 72 6f 72 20 61 6e 64 20 61 77 61 69 74   Error and await
e200: 69 6e 67 20 63 6c 6f 73 65 20 2a 2f 0a 23 64 65  ing close */.#de
e210: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49  fine SQLITE_MAGI
e220: 43 5f 42 55 53 59 20 20 20 20 20 30 78 66 30 33  C_BUSY     0xf03
e230: 62 37 39 30 36 20 20 2f 2a 20 44 61 74 61 62 61  b7906  /* Databa
e240: 73 65 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20  se currently in 
e250: 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  use */.#define S
e260: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52 52 4f  QLITE_MAGIC_ERRO
e270: 52 20 20 20 20 30 78 62 35 33 35 37 39 33 30 20  R    0xb5357930 
e280: 20 2f 2a 20 41 6e 20 53 51 4c 49 54 45 5f 4d 49   /* An SQLITE_MI
e290: 53 55 53 45 20 65 72 72 6f 72 20 6f 63 63 75 72  SUSE error occur
e2a0: 72 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  red */.#define S
e2b0: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 5a 4f 4d 42  QLITE_MAGIC_ZOMB
e2c0: 49 45 20 20 20 30 78 36 34 63 66 66 63 37 66 20  IE   0x64cffc7f 
e2d0: 20 2f 2a 20 43 6c 6f 73 65 20 77 69 74 68 20 6c   /* Close with l
e2e0: 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20 63 6c  ast statement cl
e2f0: 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61  ose */../*.** Ea
e300: 63 68 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20  ch SQL function 
e310: 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e  is defined by an
e320: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
e330: 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74   following.** st
e340: 72 75 63 74 75 72 65 2e 20 20 46 6f 72 20 67 6c  ructure.  For gl
e350: 6f 62 61 6c 20 62 75 69 6c 74 2d 69 6e 20 66 75  obal built-in fu
e360: 6e 63 74 69 6f 6e 73 20 28 65 78 3a 20 73 75 62  nctions (ex: sub
e370: 73 74 72 28 29 2c 20 6d 61 78 28 29 2c 20 63 6f  str(), max(), co
e380: 75 6e 74 28 29 29 0a 2a 2a 20 61 20 70 6f 69 6e  unt()).** a poin
e390: 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72 75  ter to this stru
e3a0: 63 74 75 72 65 20 69 73 20 68 65 6c 64 20 69 6e  cture is held in
e3b0: 20 74 68 65 20 73 71 6c 69 74 65 33 42 75 69 6c   the sqlite3Buil
e3c0: 74 69 6e 46 75 6e 63 74 69 6f 6e 73 20 6f 62 6a  tinFunctions obj
e3d0: 65 63 74 2e 0a 2a 2a 20 46 6f 72 20 70 65 72 2d  ect..** For per-
e3e0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 70 70 6c 69  connection appli
e3f0: 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20 66  cation-defined f
e400: 75 6e 63 74 69 6f 6e 73 2c 20 61 20 70 6f 69 6e  unctions, a poin
e410: 74 65 72 20 74 6f 20 74 68 69 73 0a 2a 2a 20 73  ter to this.** s
e420: 74 72 75 63 74 75 72 65 20 69 73 20 68 65 6c 64  tructure is held
e430: 20 69 6e 20 74 68 65 20 64 62 2d 3e 61 48 61 73   in the db->aHas
e440: 68 20 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a 2a  h hash table..**
e450: 0a 2a 2a 20 54 68 65 20 75 2e 70 48 61 73 68 20  .** The u.pHash 
e460: 66 69 65 6c 64 20 69 73 20 75 73 65 64 20 62 79  field is used by
e470: 20 74 68 65 20 67 6c 6f 62 61 6c 20 62 75 69 6c   the global buil
e480: 74 2d 69 6e 73 2e 20 20 54 68 65 20 75 2e 70 44  t-ins.  The u.pD
e490: 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 66 69 65  estructor.** fie
e4a0: 6c 64 20 69 73 20 75 73 65 64 20 62 79 20 70 65  ld is used by pe
e4b0: 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 70 70  r-connection app
e4c0: 2d 64 65 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a  -def functions..
e4d0: 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65  */.struct FuncDe
e4e0: 66 20 7b 0a 20 20 69 38 20 6e 41 72 67 3b 20 20  f {.  i8 nArg;  
e4f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
e500: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
e510: 73 2e 20 20 2d 31 20 6d 65 61 6e 73 20 75 6e 6c  s.  -1 means unl
e520: 69 6d 69 74 65 64 20 2a 2f 0a 20 20 75 31 36 20  imited */.  u16 
e530: 66 75 6e 63 46 6c 61 67 73 3b 20 20 20 20 20 20  funcFlags;      
e540: 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62 69 6e 61   /* Some combina
e550: 74 69 6f 6e 20 6f 66 20 53 51 4c 49 54 45 5f 46  tion of SQLITE_F
e560: 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69 64 20  UNC_* */.  void 
e570: 2a 70 55 73 65 72 44 61 74 61 3b 20 20 20 20 20  *pUserData;     
e580: 2f 2a 20 55 73 65 72 20 64 61 74 61 20 70 61 72  /* User data par
e590: 61 6d 65 74 65 72 20 2a 2f 0a 20 20 46 75 6e 63  ameter */.  Func
e5a0: 44 65 66 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  Def *pNext;     
e5b0: 20 2f 2a 20 4e 65 78 74 20 66 75 6e 63 74 69 6f   /* Next functio
e5c0: 6e 20 77 69 74 68 20 73 61 6d 65 20 6e 61 6d 65  n with same name
e5d0: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 46   */.  void (*xSF
e5e0: 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e  unc)(sqlite3_con
e5f0: 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
e600: 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20 66  3_value**); /* f
e610: 75 6e 63 20 6f 72 20 61 67 67 2d 73 74 65 70 20  unc or agg-step 
e620: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46 69 6e  */.  void (*xFin
e630: 61 6c 69 7a 65 29 28 73 71 6c 69 74 65 33 5f 63  alize)(sqlite3_c
e640: 6f 6e 74 65 78 74 2a 29 3b 20 20 20 20 20 20 20  ontext*);       
e650: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 67             /* Ag
e660: 67 20 66 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a 20  g finalizer */. 
e670: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61   const char *zNa
e680: 6d 65 3b 20 20 20 2f 2a 20 53 51 4c 20 6e 61 6d  me;   /* SQL nam
e690: 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  e of the functio
e6a0: 6e 2e 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a  n. */.  union {.
e6b0: 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70 48 61      FuncDef *pHa
e6c0: 73 68 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74  sh;      /* Next
e6d0: 20 77 69 74 68 20 61 20 64 69 66 66 65 72 65 6e   with a differen
e6e0: 74 20 6e 61 6d 65 20 62 75 74 20 74 68 65 20 73  t name but the s
e6f0: 61 6d 65 20 68 61 73 68 20 2a 2f 0a 20 20 20 20  ame hash */.    
e700: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a  FuncDestructor *
e710: 70 44 65 73 74 72 75 63 74 6f 72 3b 20 20 20 2f  pDestructor;   /
e720: 2a 20 52 65 66 65 72 65 6e 63 65 20 63 6f 75 6e  * Reference coun
e730: 74 65 64 20 64 65 73 74 72 75 63 74 6f 72 20 66  ted destructor f
e740: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 7d 20 75  unction */.  } u
e750: 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73  ;.};../*.** This
e760: 20 73 74 72 75 63 74 75 72 65 20 65 6e 63 61 70   structure encap
e770: 73 75 6c 61 74 65 73 20 61 20 75 73 65 72 2d 66  sulates a user-f
e780: 75 6e 63 74 69 6f 6e 20 64 65 73 74 72 75 63 74  unction destruct
e790: 6f 72 20 63 61 6c 6c 62 61 63 6b 20 28 61 73 0a  or callback (as.
e7a0: 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 75 73  ** configured us
e7b0: 69 6e 67 20 63 72 65 61 74 65 5f 66 75 6e 63 74  ing create_funct
e7c0: 69 6f 6e 5f 76 32 28 29 29 20 61 6e 64 20 61 20  ion_v2()) and a 
e7d0: 72 65 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 65  reference counte
e7e0: 72 2e 20 57 68 65 6e 0a 2a 2a 20 63 72 65 61 74  r. When.** creat
e7f0: 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 20  e_function_v2() 
e800: 69 73 20 63 61 6c 6c 65 64 20 74 6f 20 63 72 65  is called to cre
e810: 61 74 65 20 61 20 66 75 6e 63 74 69 6f 6e 20 77  ate a function w
e820: 69 74 68 20 61 20 64 65 73 74 72 75 63 74 6f 72  ith a destructor
e830: 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 6f 62  ,.** a single ob
e840: 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74 79 70  ject of this typ
e850: 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 2e 20  e is allocated. 
e860: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 2e 6e  FuncDestructor.n
e870: 52 65 66 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a  Ref is set to.**
e880: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 46   the number of F
e890: 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 63  uncDef objects c
e8a0: 72 65 61 74 65 64 20 28 65 69 74 68 65 72 20 31  reated (either 1
e8b0: 20 6f 72 20 33 2c 20 64 65 70 65 6e 64 69 6e 67   or 3, depending
e8c0: 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 6f   on whether.** o
e8d0: 72 20 6e 6f 74 20 74 68 65 20 73 70 65 63 69 66  r not the specif
e8e0: 69 65 64 20 65 6e 63 6f 64 69 6e 67 20 69 73 20  ied encoding is 
e8f0: 53 51 4c 49 54 45 5f 41 4e 59 29 2e 20 54 68 65  SQLITE_ANY). The
e900: 20 46 75 6e 63 44 65 66 2e 70 44 65 73 74 72 75   FuncDef.pDestru
e910: 63 74 6f 72 0a 2a 2a 20 6d 65 6d 62 65 72 20 6f  ctor.** member o
e920: 66 20 65 61 63 68 20 6f 66 20 74 68 65 20 6e 65  f each of the ne
e930: 77 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74  w FuncDef object
e940: 73 20 69 73 20 73 65 74 20 74 6f 20 70 6f 69 6e  s is set to poin
e950: 74 20 74 6f 20 74 68 65 20 61 6c 6c 6f 63 61 74  t to the allocat
e960: 65 64 0a 2a 2a 20 46 75 6e 63 44 65 73 74 72 75  ed.** FuncDestru
e970: 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72  ctor..**.** Ther
e980: 65 61 66 74 65 72 2c 20 77 68 65 6e 20 6f 6e 65  eafter, when one
e990: 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66 20   of the FuncDef 
e9a0: 6f 62 6a 65 63 74 73 20 69 73 20 64 65 6c 65 74  objects is delet
e9b0: 65 64 2c 20 74 68 65 20 72 65 66 65 72 65 6e 63  ed, the referenc
e9c0: 65 0a 2a 2a 20 63 6f 75 6e 74 20 6f 6e 20 74 68  e.** count on th
e9d0: 69 73 20 6f 62 6a 65 63 74 20 69 73 20 64 65 63  is object is dec
e9e0: 72 65 6d 65 6e 74 65 64 2e 20 57 68 65 6e 20 69  remented. When i
e9f0: 74 20 72 65 61 63 68 65 73 20 30 2c 20 74 68 65  t reaches 0, the
ea00: 20 64 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 69   destructor.** i
ea10: 73 20 69 6e 76 6f 6b 65 64 20 61 6e 64 20 74 68  s invoked and th
ea20: 65 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72  e FuncDestructor
ea30: 20 73 74 72 75 63 74 75 72 65 20 66 72 65 65 64   structure freed
ea40: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63  ..*/.struct Func
ea50: 44 65 73 74 72 75 63 74 6f 72 20 7b 0a 20 20 69  Destructor {.  i
ea60: 6e 74 20 6e 52 65 66 3b 0a 20 20 76 6f 69 64 20  nt nRef;.  void 
ea70: 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69 64  (*xDestroy)(void
ea80: 20 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70 55 73   *);.  void *pUs
ea90: 65 72 44 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a  erData;.};../*.*
eaa0: 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65  * Possible value
eab0: 73 20 66 6f 72 20 46 75 6e 63 44 65 66 2e 66 6c  s for FuncDef.fl
eac0: 61 67 73 2e 20 20 4e 6f 74 65 20 74 68 61 74 20  ags.  Note that 
ead0: 74 68 65 20 5f 4c 45 4e 47 54 48 20 61 6e 64 20  the _LENGTH and 
eae0: 5f 54 59 50 45 4f 46 0a 2a 2a 20 76 61 6c 75 65  _TYPEOF.** value
eaf0: 73 20 6d 75 73 74 20 63 6f 72 72 65 73 70 6f 6e  s must correspon
eb00: 64 20 74 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e 47  d to OPFLAG_LENG
eb10: 54 48 41 52 47 20 61 6e 64 20 4f 50 46 4c 41 47  THARG and OPFLAG
eb20: 5f 54 59 50 45 4f 46 41 52 47 2e 20 20 41 6e 64  _TYPEOFARG.  And
eb30: 0a 2a 2a 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  .** SQLITE_FUNC_
eb40: 43 4f 4e 53 54 41 4e 54 20 6d 75 73 74 20 62 65  CONSTANT must be
eb50: 20 74 68 65 20 73 61 6d 65 20 61 73 20 53 51 4c   the same as SQL
eb60: 49 54 45 5f 44 45 54 45 52 4d 49 4e 49 53 54 49  ITE_DETERMINISTI
eb70: 43 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65  C.  There.** are
eb80: 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
eb90: 65 6e 74 73 20 69 6e 20 74 68 65 20 63 6f 64 65  ents in the code
eba0: 20 74 6f 20 76 65 72 69 66 79 20 74 68 69 73 2e   to verify this.
ebb0: 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e  .**.** Value con
ebc0: 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72 63  straints (enforc
ebd0: 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29  ed via assert())
ebe0: 3a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f  :.**     SQLITE_
ebf0: 46 55 4e 43 5f 4d 49 4e 4d 41 58 20 20 20 20 3d  FUNC_MINMAX    =
ec00: 3d 20 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20  =  NC_MinMaxAgg 
ec10: 20 20 20 20 20 3d 3d 20 53 46 5f 4d 69 6e 4d 61       == SF_MinMa
ec20: 78 41 67 67 0a 2a 2a 20 20 20 20 20 53 51 4c 49  xAgg.**     SQLI
ec30: 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 20 20  TE_FUNC_LENGTH  
ec40: 20 20 3d 3d 20 20 4f 50 46 4c 41 47 5f 4c 45 4e    ==  OPFLAG_LEN
ec50: 47 54 48 41 52 47 0a 2a 2a 20 20 20 20 20 53 51  GTHARG.**     SQ
ec60: 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46  LITE_FUNC_TYPEOF
ec70: 20 20 20 20 3d 3d 20 20 4f 50 46 4c 41 47 5f 54      ==  OPFLAG_T
ec80: 59 50 45 4f 46 41 52 47 0a 2a 2a 20 20 20 20 20  YPEOFARG.**     
ec90: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
eca0: 54 41 4e 54 20 20 3d 3d 20 20 53 51 4c 49 54 45  TANT  ==  SQLITE
ecb0: 5f 44 45 54 45 52 4d 49 4e 49 53 54 49 43 20 66  _DETERMINISTIC f
ecc0: 72 6f 6d 20 74 68 65 20 41 50 49 0a 2a 2a 20 20  rom the API.**  
ecd0: 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45     SQLITE_FUNC_E
ece0: 4e 43 4d 41 53 4b 20 20 20 64 65 70 65 6e 64 73  NCMASK   depends
ecf0: 20 6f 6e 20 53 51 4c 49 54 45 5f 55 54 46 2a 20   on SQLITE_UTF* 
ed00: 6d 61 63 72 6f 73 20 69 6e 20 74 68 65 20 41 50  macros in the AP
ed10: 49 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  I.*/.#define SQL
ed20: 49 54 45 5f 46 55 4e 43 5f 45 4e 43 4d 41 53 4b  ITE_FUNC_ENCMASK
ed30: 20 20 30 78 30 30 30 33 20 2f 2a 20 53 51 4c 49    0x0003 /* SQLI
ed40: 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f  TE_UTF8, SQLITE_
ed50: 55 54 46 31 36 42 45 20 6f 72 20 55 54 46 31 36  UTF16BE or UTF16
ed60: 4c 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  LE */.#define SQ
ed70: 4c 49 54 45 5f 46 55 4e 43 5f 4c 49 4b 45 20 20  LITE_FUNC_LIKE  
ed80: 20 20 20 30 78 30 30 30 34 20 2f 2a 20 43 61 6e     0x0004 /* Can
ed90: 64 69 64 61 74 65 20 66 6f 72 20 74 68 65 20 4c  didate for the L
eda0: 49 4b 45 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  IKE optimization
edb0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
edc0: 54 45 5f 46 55 4e 43 5f 43 41 53 45 20 20 20 20  TE_FUNC_CASE    
edd0: 20 30 78 30 30 30 38 20 2f 2a 20 43 61 73 65 2d   0x0008 /* Case-
ede0: 73 65 6e 73 69 74 69 76 65 20 4c 49 4b 45 2d 74  sensitive LIKE-t
edf0: 79 70 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ype function */.
ee00: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
ee10: 55 4e 43 5f 45 50 48 45 4d 20 20 20 20 30 78 30  UNC_EPHEM    0x0
ee20: 30 31 30 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c  010 /* Ephemeral
ee30: 2e 20 20 44 65 6c 65 74 65 20 77 69 74 68 20 56  .  Delete with V
ee40: 44 42 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  DBE */.#define S
ee50: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
ee60: 4f 4c 4c 20 30 78 30 30 32 30 20 2f 2a 20 73 71  OLL 0x0020 /* sq
ee70: 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c  lite3GetFuncColl
ee80: 53 65 71 28 29 20 6d 69 67 68 74 20 62 65 20 63  Seq() might be c
ee90: 61 6c 6c 65 64 2a 2f 0a 23 64 65 66 69 6e 65 20  alled*/.#define 
eea0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47  SQLITE_FUNC_LENG
eeb0: 54 48 20 20 20 30 78 30 30 34 30 20 2f 2a 20 42  TH   0x0040 /* B
eec0: 75 69 6c 74 2d 69 6e 20 6c 65 6e 67 74 68 28 29  uilt-in length()
eed0: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
eee0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
eef0: 5f 54 59 50 45 4f 46 20 20 20 30 78 30 30 38 30  _TYPEOF   0x0080
ef00: 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 74 79 70   /* Built-in typ
ef10: 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a  eof() function *
ef20: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ef30: 5f 46 55 4e 43 5f 43 4f 55 4e 54 20 20 20 20 30  _FUNC_COUNT    0
ef40: 78 30 31 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69  x0100 /* Built-i
ef50: 6e 20 63 6f 75 6e 74 28 2a 29 20 61 67 67 72 65  n count(*) aggre
ef60: 67 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  gate */.#define 
ef70: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 41 4c  SQLITE_FUNC_COAL
ef80: 45 53 43 45 20 30 78 30 32 30 30 20 2f 2a 20 42  ESCE 0x0200 /* B
ef90: 75 69 6c 74 2d 69 6e 20 63 6f 61 6c 65 73 63 65  uilt-in coalesce
efa0: 28 29 20 6f 72 20 69 66 6e 75 6c 6c 28 29 20 2a  () or ifnull() *
efb0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
efc0: 5f 46 55 4e 43 5f 55 4e 4c 49 4b 45 4c 59 20 30  _FUNC_UNLIKELY 0
efd0: 78 30 34 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69  x0400 /* Built-i
efe0: 6e 20 75 6e 6c 69 6b 65 6c 79 28 29 20 66 75 6e  n unlikely() fun
eff0: 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
f000: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
f010: 53 54 41 4e 54 20 30 78 30 38 30 30 20 2f 2a 20  STANT 0x0800 /* 
f020: 43 6f 6e 73 74 61 6e 74 20 69 6e 70 75 74 73 20  Constant inputs 
f030: 67 69 76 65 20 61 20 63 6f 6e 73 74 61 6e 74 20  give a constant 
f040: 6f 75 74 70 75 74 20 2a 2f 0a 23 64 65 66 69 6e  output */.#defin
f050: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49  e SQLITE_FUNC_MI
f060: 4e 4d 41 58 20 20 20 30 78 31 30 30 30 20 2f 2a  NMAX   0x1000 /*
f070: 20 54 72 75 65 20 66 6f 72 20 6d 69 6e 28 29 20   True for min() 
f080: 61 6e 64 20 6d 61 78 28 29 20 61 67 67 72 65 67  and max() aggreg
f090: 61 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ates */.#define 
f0a0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43  SQLITE_FUNC_SLOC
f0b0: 48 4e 47 20 20 30 78 32 30 30 30 20 2f 2a 20 22  HNG  0x2000 /* "
f0c0: 53 6c 6f 77 20 43 68 61 6e 67 65 22 2e 20 56 61  Slow Change". Va
f0d0: 6c 75 65 20 63 6f 6e 73 74 61 6e 74 20 64 75 72  lue constant dur
f0e0: 69 6e 67 20 61 0a 20 20 20 20 20 20 20 20 20 20  ing a.          
f0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f100: 20 20 20 20 20 20 20 20 20 20 2a 2a 20 73 69 6e            ** sin
f110: 67 6c 65 20 71 75 65 72 79 20 2d 20 6d 69 67 68  gle query - migh
f120: 74 20 63 68 61 6e 67 65 20 6f 76 65 72 20 74 69  t change over ti
f130: 6d 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  me */.#define SQ
f140: 4c 49 54 45 5f 46 55 4e 43 5f 41 46 46 49 4e 49  LITE_FUNC_AFFINI
f150: 54 59 20 30 78 34 30 30 30 20 2f 2a 20 42 75 69  TY 0x4000 /* Bui
f160: 6c 74 2d 69 6e 20 61 66 66 69 6e 69 74 79 28 29  lt-in affinity()
f170: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a   function */../*
f180: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
f190: 67 20 74 68 72 65 65 20 6d 61 63 72 6f 73 2c 20  g three macros, 
f1a0: 46 55 4e 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45  FUNCTION(), LIKE
f1b0: 46 55 4e 43 28 29 20 61 6e 64 20 41 47 47 52 45  FUNC() and AGGRE
f1c0: 47 41 54 45 28 29 20 61 72 65 0a 2a 2a 20 75 73  GATE() are.** us
f1d0: 65 64 20 74 6f 20 63 72 65 61 74 65 20 74 68 65  ed to create the
f1e0: 20 69 6e 69 74 69 61 6c 69 7a 65 72 73 20 66 6f   initializers fo
f1f0: 72 20 74 68 65 20 46 75 6e 63 44 65 66 20 73 74  r the FuncDef st
f200: 72 75 63 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20  ructures..**.** 
f210: 20 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65    FUNCTION(zName
f220: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
f230: 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20  C, xFunc).**    
f240: 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20   Used to create 
f250: 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69 6f  a scalar functio
f260: 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20  n definition of 
f270: 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65  a function zName
f280: 0a 2a 2a 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e  .**     implemen
f290: 74 65 64 20 62 79 20 43 20 66 75 6e 63 74 69 6f  ted by C functio
f2a0: 6e 20 78 46 75 6e 63 20 74 68 61 74 20 61 63 63  n xFunc that acc
f2b0: 65 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d 65  epts nArg argume
f2c0: 6e 74 73 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20  nts. The.**     
f2d0: 76 61 6c 75 65 20 70 61 73 73 65 64 20 61 73 20  value passed as 
f2e0: 69 41 72 67 20 69 73 20 63 61 73 74 20 74 6f 20  iArg is cast to 
f2f0: 61 20 28 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61  a (void*) and ma
f300: 64 65 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20  de available.** 
f310: 20 20 20 20 61 73 20 74 68 65 20 75 73 65 72 2d      as the user-
f320: 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73  data (sqlite3_us
f330: 65 72 5f 64 61 74 61 28 29 29 20 66 6f 72 20 74  er_data()) for t
f340: 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66 0a  he function. If.
f350: 2a 2a 20 20 20 20 20 61 72 67 75 6d 65 6e 74 20  **     argument 
f360: 62 4e 43 20 69 73 20 74 72 75 65 2c 20 74 68 65  bNC is true, the
f370: 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e  n the SQLITE_FUN
f380: 43 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20  C_NEEDCOLL flag 
f390: 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20  is set..**.**   
f3a0: 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c  VFUNCTION(zName,
f3b0: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
f3c0: 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20  , xFunc).**     
f3d0: 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65 78  Like FUNCTION ex
f3e0: 63 65 70 74 20 69 74 20 6f 6d 69 74 73 20 74 68  cept it omits th
f3f0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  e SQLITE_FUNC_CO
f400: 4e 53 54 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a  NSTANT flag..**.
f410: 2a 2a 20 20 20 44 46 55 4e 43 54 49 4f 4e 28 7a  **   DFUNCTION(z
f420: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67  Name, nArg, iArg
f430: 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a  , bNC, xFunc).**
f440: 20 20 20 20 20 4c 69 6b 65 20 46 55 4e 43 54 49       Like FUNCTI
f450: 4f 4e 20 65 78 63 65 70 74 20 69 74 20 6f 6d 69  ON except it omi
f460: 74 73 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55  ts the SQLITE_FU
f470: 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67  NC_CONSTANT flag
f480: 20 61 6e 64 0a 2a 2a 20 20 20 20 20 61 64 64 73   and.**     adds
f490: 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43   the SQLITE_FUNC
f4a0: 5f 53 4c 4f 43 48 4e 47 20 66 6c 61 67 2e 20 20  _SLOCHNG flag.  
f4b0: 55 73 65 64 20 66 6f 72 20 64 61 74 65 20 26 20  Used for date & 
f4c0: 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 0a 2a  time functions.*
f4d0: 2a 20 20 20 20 20 61 6e 64 20 66 75 6e 63 74 69  *     and functi
f4e0: 6f 6e 73 20 6c 69 6b 65 20 73 71 6c 69 74 65 5f  ons like sqlite_
f4f0: 76 65 72 73 69 6f 6e 28 29 20 74 68 61 74 20 63  version() that c
f500: 61 6e 20 63 68 61 6e 67 65 2c 20 62 75 74 20 6e  an change, but n
f510: 6f 74 20 64 75 72 69 6e 67 0a 2a 2a 20 20 20 20  ot during.**    
f520: 20 61 20 73 69 6e 67 6c 65 20 71 75 65 72 79 2e   a single query.
f530: 0a 2a 2a 0a 2a 2a 20 20 20 41 47 47 52 45 47 41  .**.**   AGGREGA
f540: 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  TE(zName, nArg, 
f550: 69 41 72 67 2c 20 62 4e 43 2c 20 78 53 74 65 70  iArg, bNC, xStep
f560: 2c 20 78 46 69 6e 61 6c 29 0a 2a 2a 20 20 20 20  , xFinal).**    
f570: 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65 20   Used to create 
f580: 61 6e 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  an aggregate fun
f590: 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e  ction definition
f5a0: 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a   implemented by.
f5b0: 2a 2a 20 20 20 20 20 74 68 65 20 43 20 66 75 6e  **     the C fun
f5c0: 63 74 69 6f 6e 73 20 78 53 74 65 70 20 61 6e 64  ctions xStep and
f5d0: 20 78 46 69 6e 61 6c 2e 20 54 68 65 20 66 69 72   xFinal. The fir
f5e0: 73 74 20 66 6f 75 72 20 70 61 72 61 6d 65 74 65  st four paramete
f5f0: 72 73 0a 2a 2a 20 20 20 20 20 61 72 65 20 69 6e  rs.**     are in
f600: 74 65 72 70 72 65 74 65 64 20 69 6e 20 74 68 65  terpreted in the
f610: 20 73 61 6d 65 20 77 61 79 20 61 73 20 74 68 65   same way as the
f620: 20 66 69 72 73 74 20 34 20 70 61 72 61 6d 65 74   first 4 paramet
f630: 65 72 73 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55  ers to.**     FU
f640: 4e 43 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20  NCTION()..**.** 
f650: 20 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65    LIKEFUNC(zName
f660: 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 66 6c  , nArg, pArg, fl
f670: 61 67 73 29 0a 2a 2a 20 20 20 20 20 55 73 65 64  ags).**     Used
f680: 20 74 6f 20 63 72 65 61 74 65 20 61 20 73 63 61   to create a sca
f690: 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66  lar function def
f6a0: 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e  inition of a fun
f6b0: 63 74 69 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20 20  ction zName.**  
f6c0: 20 20 20 74 68 61 74 20 61 63 63 65 70 74 73 20     that accepts 
f6d0: 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73 20 61  nArg arguments a
f6e0: 6e 64 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65  nd is implemente
f6f0: 64 20 62 79 20 61 20 63 61 6c 6c 20 74 6f 20 43  d by a call to C
f700: 0a 2a 2a 20 20 20 20 20 66 75 6e 63 74 69 6f 6e  .**     function
f710: 20 6c 69 6b 65 46 75 6e 63 2e 20 41 72 67 75 6d   likeFunc. Argum
f720: 65 6e 74 20 70 41 72 67 20 69 73 20 63 61 73 74  ent pArg is cast
f730: 20 74 6f 20 61 20 28 76 6f 69 64 20 2a 29 20 61   to a (void *) a
f740: 6e 64 20 6d 61 64 65 0a 2a 2a 20 20 20 20 20 61  nd made.**     a
f750: 76 61 69 6c 61 62 6c 65 20 61 73 20 74 68 65 20  vailable as the 
f760: 66 75 6e 63 74 69 6f 6e 20 75 73 65 72 2d 64 61  function user-da
f770: 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72  ta (sqlite3_user
f780: 5f 64 61 74 61 28 29 29 2e 20 54 68 65 0a 2a 2a  _data()). The.**
f790: 20 20 20 20 20 46 75 6e 63 44 65 66 2e 66 6c 61       FuncDef.fla
f7a0: 67 73 20 76 61 72 69 61 62 6c 65 20 69 73 20 73  gs variable is s
f7b0: 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  et to the value 
f7c0: 70 61 73 73 65 64 20 61 73 20 74 68 65 20 66 6c  passed as the fl
f7d0: 61 67 73 0a 2a 2a 20 20 20 20 20 70 61 72 61 6d  ags.**     param
f7e0: 65 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  eter..*/.#define
f7f0: 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c   FUNCTION(zName,
f800: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
f810: 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41  , xFunc) \.  {nA
f820: 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  rg, SQLITE_FUNC_
f830: 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f  CONSTANT|SQLITE_
f840: 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45  UTF8|(bNC*SQLITE
f850: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c  _FUNC_NEEDCOLL),
f860: 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54   \.   SQLITE_INT
f870: 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30  _TO_PTR(iArg), 0
f880: 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61  , xFunc, 0, #zNa
f890: 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e  me, {0} }.#defin
f8a0: 65 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d  e VFUNCTION(zNam
f8b0: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
f8c0: 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b  NC, xFunc) \.  {
f8d0: 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46  nArg, SQLITE_UTF
f8e0: 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55  8|(bNC*SQLITE_FU
f8f0: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a  NC_NEEDCOLL), \.
f900: 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
f910: 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78  _PTR(iArg), 0, x
f920: 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  Func, 0, #zName,
f930: 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 44   {0} }.#define D
f940: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
f950: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
f960: 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72   xFunc) \.  {nAr
f970: 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53  g, SQLITE_FUNC_S
f980: 4c 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54  LOCHNG|SQLITE_UT
f990: 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46  F8|(bNC*SQLITE_F
f9a0: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c  UNC_NEEDCOLL), \
f9b0: 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  .   SQLITE_INT_T
f9c0: 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20  O_PTR(iArg), 0, 
f9d0: 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65  xFunc, 0, #zName
f9e0: 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20  , {0} }.#define 
f9f0: 46 55 4e 43 54 49 4f 4e 32 28 7a 4e 61 6d 65 2c  FUNCTION2(zName,
fa00: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
fa10: 2c 20 78 46 75 6e 63 2c 20 65 78 74 72 61 46 6c  , xFunc, extraFl
fa20: 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 53  ags) \.  {nArg,S
fa30: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
fa40: 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c  ANT|SQLITE_UTF8|
fa50: 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43  (bNC*SQLITE_FUNC
fa60: 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61  _NEEDCOLL)|extra
fa70: 46 6c 61 67 73 2c 5c 0a 20 20 20 53 51 4c 49 54  Flags,\.   SQLIT
fa80: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72  E_INT_TO_PTR(iAr
fa90: 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c  g), 0, xFunc, 0,
faa0: 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23   #zName, {0} }.#
fab0: 64 65 66 69 6e 65 20 53 54 52 5f 46 55 4e 43 54  define STR_FUNCT
fac0: 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ION(zName, nArg,
fad0: 20 70 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   pArg, bNC, xFun
fae0: 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  c) \.  {nArg, SQ
faf0: 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e  LITE_FUNC_SLOCHN
fb00: 47 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62  G|SQLITE_UTF8|(b
fb10: 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  NC*SQLITE_FUNC_N
fb20: 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 70  EEDCOLL), \.   p
fb30: 41 72 67 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30  Arg, 0, xFunc, 0
fb40: 2c 20 23 7a 4e 61 6d 65 2c 20 7d 0a 23 64 65 66  , #zName, }.#def
fb50: 69 6e 65 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61  ine LIKEFUNC(zNa
fb60: 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 66  me, nArg, arg, f
fb70: 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  lags) \.  {nArg,
fb80: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
fb90: 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46  STANT|SQLITE_UTF
fba0: 38 7c 66 6c 61 67 73 2c 20 5c 0a 20 20 20 28 76  8|flags, \.   (v
fbb0: 6f 69 64 20 2a 29 61 72 67 2c 20 30 2c 20 6c 69  oid *)arg, 0, li
fbc0: 6b 65 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d  keFunc, 0, #zNam
fbd0: 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65  e, {0} }.#define
fbe0: 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65   AGGREGATE(zName
fbf0: 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c  , nArg, arg, nc,
fc00: 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29 20   xStep, xFinal) 
fc10: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
fc20: 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54  E_UTF8|(nc*SQLIT
fc30: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
fc40: 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e  , \.   SQLITE_IN
fc50: 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c 20 30  T_TO_PTR(arg), 0
fc60: 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c 23  , xStep,xFinal,#
fc70: 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 23 64 65 66  zName, {0}}.#def
fc80: 69 6e 65 20 41 47 47 52 45 47 41 54 45 32 28 7a  ine AGGREGATE2(z
fc90: 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c  Name, nArg, arg,
fca0: 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69 6e   nc, xStep, xFin
fcb0: 61 6c 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20  al, extraFlags) 
fcc0: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
fcd0: 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54  E_UTF8|(nc*SQLIT
fce0: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
fcf0: 7c 65 78 74 72 61 46 6c 61 67 73 2c 20 5c 0a 20  |extraFlags, \. 
fd00: 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f    SQLITE_INT_TO_
fd10: 50 54 52 28 61 72 67 29 2c 20 30 2c 20 78 53 74  PTR(arg), 0, xSt
fd20: 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65  ep,xFinal,#zName
fd30: 2c 20 7b 30 7d 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c  , {0}}../*.** Al
fd40: 6c 20 63 75 72 72 65 6e 74 20 73 61 76 65 70 6f  l current savepo
fd50: 69 6e 74 73 20 61 72 65 20 73 74 6f 72 65 64 20  ints are stored 
fd60: 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74  in a linked list
fd70: 20 73 74 61 72 74 69 6e 67 20 61 74 0a 2a 2a 20   starting at.** 
fd80: 73 71 6c 69 74 65 33 2e 70 53 61 76 65 70 6f 69  sqlite3.pSavepoi
fd90: 6e 74 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c  nt. The first el
fda0: 65 6d 65 6e 74 20 69 6e 20 74 68 65 20 6c 69 73  ement in the lis
fdb0: 74 20 69 73 20 74 68 65 20 6d 6f 73 74 20 72 65  t is the most re
fdc0: 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64  cently.** opened
fdd0: 20 73 61 76 65 70 6f 69 6e 74 2e 20 53 61 76 65   savepoint. Save
fde0: 70 6f 69 6e 74 73 20 61 72 65 20 61 64 64 65 64  points are added
fdf0: 20 74 6f 20 74 68 65 20 6c 69 73 74 20 62 79 20   to the list by 
fe00: 74 68 65 20 76 64 62 65 0a 2a 2a 20 4f 50 5f 53  the vdbe.** OP_S
fe10: 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63  avepoint instruc
fe20: 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tion..*/.struct 
fe30: 53 61 76 65 70 6f 69 6e 74 20 7b 0a 20 20 63 68  Savepoint {.  ch
fe40: 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
fe50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fe60: 20 20 2f 2a 20 53 61 76 65 70 6f 69 6e 74 20 6e    /* Savepoint n
fe70: 61 6d 65 20 28 6e 75 6c 2d 74 65 72 6d 69 6e 61  ame (nul-termina
fe80: 74 65 64 29 20 2a 2f 0a 20 20 69 36 34 20 6e 44  ted) */.  i64 nD
fe90: 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20  eferredCons;    
fea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
feb0: 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72   Number of defer
fec0: 72 65 64 20 66 6b 20 76 69 6f 6c 61 74 69 6f 6e  red fk violation
fed0: 73 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65  s */.  i64 nDefe
fee0: 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20  rredImmCons;    
fef0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
ff00: 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72 65 64  mber of deferred
ff10: 20 69 6d 6d 20 66 6b 2e 20 2a 2f 0a 20 20 53 61   imm fk. */.  Sa
ff20: 76 65 70 6f 69 6e 74 20 2a 70 4e 65 78 74 3b 20  vepoint *pNext; 
ff30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ff40: 20 20 2f 2a 20 50 61 72 65 6e 74 20 73 61 76 65    /* Parent save
ff50: 70 6f 69 6e 74 20 28 69 66 20 61 6e 79 29 20 2a  point (if any) *
ff60: 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
ff70: 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 75 73  following are us
ff80: 65 64 20 61 73 20 74 68 65 20 73 65 63 6f 6e 64  ed as the second
ff90: 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71   parameter to sq
ffa0: 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74 28 29  lite3Savepoint()
ffb0: 2c 0a 2a 2a 20 61 6e 64 20 61 73 20 74 68 65 20  ,.** and as the 
ffc0: 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  P1 argument to t
ffd0: 68 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20  he OP_Savepoint 
ffe0: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
fff0: 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e  #define SAVEPOIN
10000 54 5f 42 45 47 49 4e 20 20 20 20 20 20 30 0a 23  T_BEGIN      0.#
10010 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54  define SAVEPOINT
10020 5f 52 45 4c 45 41 53 45 20 20 20 20 31 0a 23 64  _RELEASE    1.#d
10030 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f  efine SAVEPOINT_
10040 52 4f 4c 4c 42 41 43 4b 20 20 20 32 0a 0a 0a 2f  ROLLBACK   2.../
10050 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 69 74 65  *.** Each SQLite
10060 20 6d 6f 64 75 6c 65 20 28 76 69 72 74 75 61 6c   module (virtual
10070 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f   table definitio
10080 6e 29 20 69 73 20 64 65 66 69 6e 65 64 20 62 79  n) is defined by
10090 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20   an.** instance 
100a0 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
100b0 20 73 74 72 75 63 74 75 72 65 2c 20 73 74 6f 72   structure, stor
100c0 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  ed in the sqlite
100d0 33 2e 61 4d 6f 64 75 6c 65 0a 2a 2a 20 68 61 73  3.aModule.** has
100e0 68 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75  h table..*/.stru
100f0 63 74 20 4d 6f 64 75 6c 65 20 7b 0a 20 20 63 6f  ct Module {.  co
10100 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
10110 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 20 20 20 20  le *pModule;    
10120 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 70     /* Callback p
10130 6f 69 6e 74 65 72 73 20 2a 2f 0a 20 20 63 6f 6e  ointers */.  con
10140 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  st char *zName; 
10150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10160 20 20 2f 2a 20 4e 61 6d 65 20 70 61 73 73 65 64    /* Name passed
10170 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c   to create_modul
10180 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  e() */.  void *p
10190 41 75 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  Aux;            
101a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
101b0 20 70 41 75 78 20 70 61 73 73 65 64 20 74 6f 20   pAux passed to 
101c0 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20  create_module() 
101d0 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73  */.  void (*xDes
101e0 74 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b 20 20  troy)(void *);  
101f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 64            /* Mod
10200 75 6c 65 20 64 65 73 74 72 75 63 74 6f 72 20 66  ule destructor f
10210 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 54 61 62  unction */.  Tab
10220 6c 65 20 2a 70 45 70 6f 54 61 62 3b 20 20 20 20  le *pEpoTab;    
10230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10240 20 20 2f 2a 20 45 70 6f 6e 79 6d 6f 75 73 20 74    /* Eponymous t
10250 61 62 6c 65 20 66 6f 72 20 74 68 69 73 20 6d 6f  able for this mo
10260 64 75 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  dule */.};../*.*
10270 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * information ab
10280 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  out each column 
10290 6f 66 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  of an SQL table 
102a0 69 73 20 68 65 6c 64 20 69 6e 20 61 6e 20 69 6e  is held in an in
102b0 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69  stance.** of thi
102c0 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a  s structure..*/.
102d0 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a  struct Column {.
102e0 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
102f0 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
10300 69 73 20 63 6f 6c 75 6d 6e 2c 20 5c 30 30 30 2c  is column, \000,
10310 20 74 68 65 6e 20 74 68 65 20 74 79 70 65 20 2a   then the type *
10320 2f 0a 20 20 45 78 70 72 20 2a 70 44 66 6c 74 3b  /.  Expr *pDflt;
10330 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
10340 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f  value of this co
10350 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a  lumn */.  char *
10360 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 43 6f  zColl;     /* Co
10370 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
10380 2e 20 20 49 66 20 4e 55 4c 4c 2c 20 75 73 65 20  .  If NULL, use 
10390 74 68 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20  the default */. 
103a0 20 75 38 20 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20   u8 notNull;    
103b0 20 20 2f 2a 20 41 6e 20 4f 45 5f 20 63 6f 64 65    /* An OE_ code
103c0 20 66 6f 72 20 68 61 6e 64 6c 69 6e 67 20 61 20   for handling a 
103d0 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61  NOT NULL constra
103e0 69 6e 74 20 2a 2f 0a 20 20 63 68 61 72 20 61 66  int */.  char af
103f0 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20 4f 6e 65  finity;   /* One
10400 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41   of the SQLITE_A
10410 46 46 5f 2e 2e 2e 20 76 61 6c 75 65 73 20 2a 2f  FF_... values */
10420 0a 20 20 75 38 20 73 7a 45 73 74 3b 20 20 20 20  .  u8 szEst;    
10430 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64      /* Estimated
10440 20 73 69 7a 65 20 6f 66 20 76 61 6c 75 65 20 69   size of value i
10450 6e 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 73  n this column. s
10460 69 7a 65 6f 66 28 49 4e 54 29 3d 3d 31 20 2a 2f  izeof(INT)==1 */
10470 0a 20 20 75 38 20 63 6f 6c 46 6c 61 67 73 3b 20  .  u8 colFlags; 
10480 20 20 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20 70      /* Boolean p
10490 72 6f 70 65 72 74 69 65 73 2e 20 20 53 65 65 20  roperties.  See 
104a0 43 4f 4c 46 4c 41 47 5f 20 64 65 66 69 6e 65 73  COLFLAG_ defines
104b0 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   below */.};../*
104c0 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20   Allowed values 
104d0 66 6f 72 20 43 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c  for Column.colFl
104e0 61 67 73 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ags:.*/.#define 
104f0 43 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b 45 59 20  COLFLAG_PRIMKEY 
10500 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20 43 6f   0x0001    /* Co
10510 6c 75 6d 6e 20 69 73 20 70 61 72 74 20 6f 66 20  lumn is part of 
10520 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20  the primary key 
10530 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c  */.#define COLFL
10540 41 47 5f 48 49 44 44 45 4e 20 20 20 30 78 30 30  AG_HIDDEN   0x00
10550 30 32 20 20 20 20 2f 2a 20 41 20 68 69 64 64 65  02    /* A hidde
10560 6e 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 76 69  n column in a vi
10570 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23  rtual table */.#
10580 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48  define COLFLAG_H
10590 41 53 54 59 50 45 20 20 30 78 30 30 30 34 20 20  ASTYPE  0x0004  
105a0 20 20 2f 2a 20 54 79 70 65 20 6e 61 6d 65 20 66    /* Type name f
105b0 6f 6c 6c 6f 77 73 20 63 6f 6c 75 6d 6e 20 6e 61  ollows column na
105c0 6d 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22  me */../*.** A "
105d0 43 6f 6c 6c 61 74 69 6e 67 20 53 65 71 75 65 6e  Collating Sequen
105e0 63 65 22 20 69 73 20 64 65 66 69 6e 65 64 20 62  ce" is defined b
105f0 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  y an instance of
10600 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a   the following.*
10610 2a 20 73 74 72 75 63 74 75 72 65 2e 20 43 6f 6e  * structure. Con
10620 63 65 70 74 75 61 6c 6c 79 2c 20 61 20 63 6f 6c  ceptually, a col
10630 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
10640 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6e 61  consists of a na
10650 6d 65 20 61 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70  me and.** a comp
10660 61 72 69 73 6f 6e 20 72 6f 75 74 69 6e 65 20 74  arison routine t
10670 68 61 74 20 64 65 66 69 6e 65 73 20 74 68 65 20  hat defines the 
10680 6f 72 64 65 72 20 6f 66 20 74 68 61 74 20 73 65  order of that se
10690 71 75 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  quence..**.** If
106a0 20 43 6f 6c 6c 53 65 71 2e 78 43 6d 70 20 69 73   CollSeq.xCmp is
106b0 20 4e 55 4c 4c 2c 20 69 74 20 6d 65 61 6e 73 20   NULL, it means 
106c0 74 68 61 74 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c  that the.** coll
106d0 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 69  ating sequence i
106e0 73 20 75 6e 64 65 66 69 6e 65 64 2e 20 20 49 6e  s undefined.  In
106f0 64 69 63 65 73 20 62 75 69 6c 74 20 6f 6e 20 61  dices built on a
10700 6e 20 75 6e 64 65 66 69 6e 65 64 0a 2a 2a 20 63  n undefined.** c
10710 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
10720 65 20 6d 61 79 20 6e 6f 74 20 62 65 20 72 65 61  e may not be rea
10730 64 20 6f 72 20 77 72 69 74 74 65 6e 2e 0a 2a 2f  d or written..*/
10740 0a 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71 20  .struct CollSeq 
10750 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
10760 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
10770 65 20 6f 66 20 74 68 65 20 63 6f 6c 6c 61 74 69  e of the collati
10780 6e 67 20 73 65 71 75 65 6e 63 65 2c 20 55 54 46  ng sequence, UTF
10790 2d 38 20 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20  -8 encoded */.  
107a0 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20  u8 enc;         
107b0 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e        /* Text en
107c0 63 6f 64 69 6e 67 20 68 61 6e 64 6c 65 64 20 62  coding handled b
107d0 79 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20 76 6f  y xCmp() */.  vo
107e0 69 64 20 2a 70 55 73 65 72 3b 20 20 20 20 20 20  id *pUser;      
107f0 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67      /* First arg
10800 75 6d 65 6e 74 20 74 6f 20 78 43 6d 70 28 29 20  ument to xCmp() 
10810 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6d 70 29  */.  int (*xCmp)
10820 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73  (void*,int, cons
10830 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 6f  t void*, int, co
10840 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f  nst void*);.  vo
10850 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a  id (*xDel)(void*
10860 29 3b 20 20 2f 2a 20 44 65 73 74 72 75 63 74 6f  );  /* Destructo
10870 72 20 66 6f 72 20 70 55 73 65 72 20 2a 2f 0a 7d  r for pUser */.}
10880 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74 20  ;../*.** A sort 
10890 6f 72 64 65 72 20 63 61 6e 20 62 65 20 65 69 74  order can be eit
108a0 68 65 72 20 41 53 43 20 6f 72 20 44 45 53 43 2e  her ASC or DESC.
108b0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
108c0 54 45 5f 53 4f 5f 41 53 43 20 20 20 20 20 20 20  TE_SO_ASC       
108d0 30 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73  0  /* Sort in as
108e0 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f  cending order */
108f0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
10900 53 4f 5f 44 45 53 43 20 20 20 20 20 20 31 20 20  SO_DESC      1  
10910 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e  /* Sort in ascen
10920 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64  ding order */.#d
10930 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f  efine SQLITE_SO_
10940 55 4e 44 45 46 49 4e 45 44 20 2d 31 20 2f 2a 20  UNDEFINED -1 /* 
10950 4e 6f 20 73 6f 72 74 20 6f 72 64 65 72 20 73 70  No sort order sp
10960 65 63 69 66 69 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a  ecified */../*.*
10970 2a 20 43 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74  * Column affinit
10980 79 20 74 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54  y types..**.** T
10990 68 65 73 65 20 75 73 65 64 20 74 6f 20 68 61 76  hese used to hav
109a0 65 20 6d 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65 20  e mnemonic name 
109b0 6c 69 6b 65 20 27 69 27 20 66 6f 72 20 53 51 4c  like 'i' for SQL
109c0 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20  ITE_AFF_INTEGER 
109d0 61 6e 64 0a 2a 2a 20 27 74 27 20 66 6f 72 20 53  and.** 't' for S
109e0 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2e 20  QLITE_AFF_TEXT. 
109f0 20 42 75 74 20 77 65 20 63 61 6e 20 73 61 76 65   But we can save
10a00 20 61 20 6c 69 74 74 6c 65 20 73 70 61 63 65 20   a little space 
10a10 61 6e 64 20 69 6d 70 72 6f 76 65 0a 2a 2a 20 74  and improve.** t
10a20 68 65 20 73 70 65 65 64 20 61 20 6c 69 74 74 6c  he speed a littl
10a30 65 20 62 79 20 6e 75 6d 62 65 72 69 6e 67 20 74  e by numbering t
10a40 68 65 20 76 61 6c 75 65 73 20 63 6f 6e 73 65 63  he values consec
10a50 75 74 69 76 65 6c 79 2e 0a 2a 2a 0a 2a 2a 20 42  utively..**.** B
10a60 75 74 20 72 61 74 68 65 72 20 74 68 61 6e 20 73  ut rather than s
10a70 74 61 72 74 20 77 69 74 68 20 30 20 6f 72 20 31  tart with 0 or 1
10a80 2c 20 77 65 20 62 65 67 69 6e 20 77 69 74 68 20  , we begin with 
10a90 27 41 27 2e 20 20 54 68 61 74 20 77 61 79 2c 0a  'A'.  That way,.
10aa0 2a 2a 20 77 68 65 6e 20 6d 75 6c 74 69 70 6c 65  ** when multiple
10ab0 20 61 66 66 69 6e 69 74 79 20 74 79 70 65 73 20   affinity types 
10ac0 61 72 65 20 63 6f 6e 63 61 74 65 6e 61 74 65 64  are concatenated
10ad0 20 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 61   into a string a
10ae0 6e 64 0a 2a 2a 20 75 73 65 64 20 61 73 20 74 68  nd.** used as th
10af0 65 20 50 34 20 6f 70 65 72 61 6e 64 2c 20 74 68  e P4 operand, th
10b00 65 79 20 77 69 6c 6c 20 62 65 20 6d 6f 72 65 20  ey will be more 
10b10 72 65 61 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  readable..**.** 
10b20 4e 6f 74 65 20 61 6c 73 6f 20 74 68 61 74 20 74  Note also that t
10b30 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65 73  he numeric types
10b40 20 61 72 65 20 67 72 6f 75 70 65 64 20 74 6f 67   are grouped tog
10b50 65 74 68 65 72 20 73 6f 20 74 68 61 74 20 74 65  ether so that te
10b60 73 74 69 6e 67 0a 2a 2a 20 66 6f 72 20 61 20 6e  sting.** for a n
10b70 75 6d 65 72 69 63 20 74 79 70 65 20 69 73 20 61  umeric type is a
10b80 20 73 69 6e 67 6c 65 20 63 6f 6d 70 61 72 69 73   single comparis
10b90 6f 6e 2e 20 20 41 6e 64 20 74 68 65 20 42 4c 4f  on.  And the BLO
10ba0 42 20 74 79 70 65 20 69 73 20 66 69 72 73 74 2e  B type is first.
10bb0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
10bc0 54 45 5f 41 46 46 5f 42 4c 4f 42 20 20 20 20 20  TE_AFF_BLOB     
10bd0 27 41 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  'A'.#define SQLI
10be0 54 45 5f 41 46 46 5f 54 45 58 54 20 20 20 20 20  TE_AFF_TEXT     
10bf0 27 42 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  'B'.#define SQLI
10c00 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 20  TE_AFF_NUMERIC  
10c10 27 43 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  'C'.#define SQLI
10c20 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 20  TE_AFF_INTEGER  
10c30 27 44 27 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  'D'.#define SQLI
10c40 54 45 5f 41 46 46 5f 52 45 41 4c 20 20 20 20 20  TE_AFF_REAL     
10c50 27 45 27 0a 0a 23 64 65 66 69 6e 65 20 73 71 6c  'E'..#define sql
10c60 69 74 65 33 49 73 4e 75 6d 65 72 69 63 41 66 66  ite3IsNumericAff
10c70 69 6e 69 74 79 28 58 29 20 20 28 28 58 29 3e 3d  inity(X)  ((X)>=
10c80 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52  SQLITE_AFF_NUMER
10c90 49 43 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53  IC)../*.** The S
10ca0 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 76  QLITE_AFF_MASK v
10cb0 61 6c 75 65 73 20 6d 61 73 6b 73 20 6f 66 66 20  alues masks off 
10cc0 74 68 65 20 73 69 67 6e 69 66 69 63 61 6e 74 20  the significant 
10cd0 62 69 74 73 20 6f 66 20 61 6e 0a 2a 2a 20 61 66  bits of an.** af
10ce0 66 69 6e 69 74 79 20 76 61 6c 75 65 2e 0a 2a 2f  finity value..*/
10cf0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
10d00 41 46 46 5f 4d 41 53 4b 20 20 20 20 20 30 78 34  AFF_MASK     0x4
10d10 37 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 69 74 69 6f  7../*.** Additio
10d20 6e 61 6c 20 62 69 74 20 76 61 6c 75 65 73 20 74  nal bit values t
10d30 68 61 74 20 63 61 6e 20 62 65 20 4f 52 65 64 20  hat can be ORed 
10d40 77 69 74 68 20 61 6e 20 61 66 66 69 6e 69 74 79  with an affinity
10d50 20 77 69 74 68 6f 75 74 0a 2a 2a 20 63 68 61 6e   without.** chan
10d60 67 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74  ging the affinit
10d70 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  y..**.** The SQL
10d80 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 66 6c 61 67  ITE_NOTNULL flag
10d90 20 69 73 20 61 20 63 6f 6d 62 69 6e 61 74 69 6f   is a combinatio
10da0 6e 20 6f 66 20 4e 55 4c 4c 45 51 20 61 6e 64 20  n of NULLEQ and 
10db0 4a 55 4d 50 49 46 4e 55 4c 4c 2e 0a 2a 2a 20 49  JUMPIFNULL..** I
10dc0 74 20 63 61 75 73 65 73 20 61 6e 20 61 73 73 65  t causes an asse
10dd0 72 74 28 29 20 74 6f 20 66 69 72 65 20 69 66 20  rt() to fire if 
10de0 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 74  either operand t
10df0 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a  o a comparison.*
10e00 2a 20 6f 70 65 72 61 74 6f 72 20 69 73 20 4e 55  * operator is NU
10e10 4c 4c 2e 20 20 49 74 20 69 73 20 61 64 64 65 64  LL.  It is added
10e20 20 74 6f 20 63 65 72 74 61 69 6e 20 63 6f 6d 70   to certain comp
10e30 61 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 73  arison operators
10e40 20 74 6f 0a 2a 2a 20 70 72 6f 76 65 20 74 68 61   to.** prove tha
10e50 74 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20 61  t the operands a
10e60 72 65 20 61 6c 77 61 79 73 20 4e 4f 54 20 4e 55  re always NOT NU
10e70 4c 4c 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  LL..*/.#define S
10e80 51 4c 49 54 45 5f 4b 45 45 50 4e 55 4c 4c 20 20  QLITE_KEEPNULL  
10e90 20 20 20 30 78 30 38 20 20 2f 2a 20 55 73 65 64     0x08  /* Used
10ea0 20 62 79 20 76 65 63 74 6f 72 20 3d 3d 20 6f 72   by vector == or
10eb0 20 3c 3e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53   <> */.#define S
10ec0 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c  QLITE_JUMPIFNULL
10ed0 20 20 20 30 78 31 30 20 20 2f 2a 20 6a 75 6d 70     0x10  /* jump
10ee0 73 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72  s if either oper
10ef0 61 6e 64 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23  and is NULL */.#
10f00 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 54  define SQLITE_ST
10f10 4f 52 45 50 32 20 20 20 20 20 20 30 78 32 30 20  OREP2      0x20 
10f20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
10f30 20 69 6e 20 72 65 67 5b 50 32 5d 20 72 61 74 68   in reg[P2] rath
10f40 65 72 20 74 68 61 6e 20 6a 75 6d 70 20 2a 2f 0a  er than jump */.
10f50 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e  #define SQLITE_N
10f60 55 4c 4c 45 51 20 20 20 20 20 20 20 30 78 38 30  ULLEQ       0x80
10f70 20 20 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a    /* NULL=NULL *
10f80 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
10f90 5f 4e 4f 54 4e 55 4c 4c 20 20 20 20 20 20 30 78  _NOTNULL      0x
10fa0 39 30 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68  90  /* Assert th
10fb0 61 74 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20  at operands are 
10fc0 6e 65 76 65 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f  never NULL */../
10fd0 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 20 6f  *.** An object o
10fe0 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20 63  f this type is c
10ff0 72 65 61 74 65 64 20 66 6f 72 20 65 61 63 68 20  reated for each 
11000 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 70 72  virtual table pr
11010 65 73 65 6e 74 20 69 6e 0a 2a 2a 20 74 68 65 20  esent in.** the 
11020 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e  database schema.
11030 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 64 61  .**.** If the da
11040 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73  tabase schema is
11050 20 73 68 61 72 65 64 2c 20 74 68 65 6e 20 74 68   shared, then th
11060 65 72 65 20 69 73 20 6f 6e 65 20 69 6e 73 74 61  ere is one insta
11070 6e 63 65 20 6f 66 20 74 68 69 73 0a 2a 2a 20 73  nce of this.** s
11080 74 72 75 63 74 75 72 65 20 66 6f 72 20 65 61 63  tructure for eac
11090 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  h database conne
110a0 63 74 69 6f 6e 20 28 73 71 6c 69 74 65 33 2a 29  ction (sqlite3*)
110b0 20 74 68 61 74 20 75 73 65 73 20 74 68 65 20 73   that uses the s
110c0 68 61 72 65 64 0a 2a 2a 20 73 63 68 65 6d 61 2e  hared.** schema.
110d0 20 54 68 69 73 20 69 73 20 62 65 63 61 75 73 65   This is because
110e0 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63   each database c
110f0 6f 6e 6e 65 63 74 69 6f 6e 20 72 65 71 75 69 72  onnection requir
11100 65 73 20 69 74 73 20 6f 77 6e 20 75 6e 69 71 75  es its own uniqu
11110 65 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66  e.** instance of
11120 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61   the sqlite3_vta
11130 62 2a 20 68 61 6e 64 6c 65 20 75 73 65 64 20 74  b* handle used t
11140 6f 20 61 63 63 65 73 73 20 74 68 65 20 76 69 72  o access the vir
11150 74 75 61 6c 20 74 61 62 6c 65 0a 2a 2a 20 69 6d  tual table.** im
11160 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 73 71  plementation. sq
11170 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64  lite3_vtab* hand
11180 6c 65 73 20 63 61 6e 20 6e 6f 74 20 62 65 20 73  les can not be s
11190 68 61 72 65 64 20 62 65 74 77 65 65 6e 0a 2a 2a  hared between.**
111a0 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
111b0 74 69 6f 6e 73 2c 20 65 76 65 6e 20 77 68 65 6e  tions, even when
111c0 20 74 68 65 20 72 65 73 74 20 6f 66 20 74 68 65   the rest of the
111d0 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62   in-memory datab
111e0 61 73 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73  ase.** schema is
111f0 20 73 68 61 72 65 64 2c 20 61 73 20 74 68 65 20   shared, as the 
11200 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f  implementation o
11210 66 74 65 6e 20 73 74 6f 72 65 73 20 74 68 65 20  ften stores the 
11220 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e  database.** conn
11230 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 70 61  ection handle pa
11240 73 73 65 64 20 74 6f 20 69 74 20 76 69 61 20 74  ssed to it via t
11250 68 65 20 78 43 6f 6e 6e 65 63 74 28 29 20 6f 72  he xConnect() or
11260 20 78 43 72 65 61 74 65 28 29 20 6d 65 74 68 6f   xCreate() metho
11270 64 0a 2a 2a 20 64 75 72 69 6e 67 20 69 6e 69 74  d.** during init
11280 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 74 65 72  ialization inter
11290 6e 61 6c 6c 79 2e 20 54 68 69 73 20 64 61 74 61  nally. This data
112a0 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
112b0 68 61 6e 64 6c 65 20 6d 61 79 0a 2a 2a 20 74 68  handle may.** th
112c0 65 6e 20 62 65 20 75 73 65 64 20 62 79 20 74 68  en be used by th
112d0 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
112e0 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74  implementation t
112f0 6f 20 61 63 63 65 73 73 20 72 65 61 6c 20 74 61  o access real ta
11300 62 6c 65 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74  bles.** within t
11310 68 65 20 64 61 74 61 62 61 73 65 2e 20 53 6f 20  he database. So 
11320 74 68 61 74 20 74 68 65 79 20 61 70 70 65 61 72  that they appear
11330 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20   as part of the 
11340 63 61 6c 6c 65 72 73 0a 2a 2a 20 74 72 61 6e 73  callers.** trans
11350 61 63 74 69 6f 6e 2c 20 74 68 65 73 65 20 61 63  action, these ac
11360 63 65 73 73 65 73 20 6e 65 65 64 20 74 6f 20 62  cesses need to b
11370 65 20 6d 61 64 65 20 76 69 61 20 74 68 65 20 73  e made via the s
11380 61 6d 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  ame database.** 
11390 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 20 74 68  connection as th
113a0 61 74 20 75 73 65 64 20 74 6f 20 65 78 65 63 75  at used to execu
113b0 74 65 20 53 51 4c 20 6f 70 65 72 61 74 69 6f 6e  te SQL operation
113c0 73 20 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c  s on the virtual
113d0 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c   table..**.** Al
113e0 6c 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73  l VTable objects
113f0 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64   that correspond
11400 20 74 6f 20 61 20 73 69 6e 67 6c 65 20 74 61 62   to a single tab
11410 6c 65 20 69 6e 20 61 20 73 68 61 72 65 64 0a 2a  le in a shared.*
11420 2a 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  * database schem
11430 61 20 61 72 65 20 69 6e 69 74 69 61 6c 6c 79 20  a are initially 
11440 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b  stored in a link
11450 65 64 2d 6c 69 73 74 20 70 6f 69 6e 74 65 64 20  ed-list pointed 
11460 74 6f 20 62 79 0a 2a 2a 20 74 68 65 20 54 61 62  to by.** the Tab
11470 6c 65 2e 70 56 54 61 62 6c 65 20 6d 65 6d 62 65  le.pVTable membe
11480 72 20 76 61 72 69 61 62 6c 65 20 6f 66 20 74 68  r variable of th
11490 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
114a0 54 61 62 6c 65 20 6f 62 6a 65 63 74 2e 0a 2a 2a  Table object..**
114b0 20 57 68 65 6e 20 61 6e 20 73 71 6c 69 74 65 33   When an sqlite3
114c0 5f 70 72 65 70 61 72 65 28 29 20 6f 70 65 72 61  _prepare() opera
114d0 74 69 6f 6e 20 69 73 20 72 65 71 75 69 72 65 64  tion is required
114e0 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 76   to access the v
114f0 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 2c  irtual.** table,
11500 20 69 74 20 73 65 61 72 63 68 65 73 20 74 68 65   it searches the
11510 20 6c 69 73 74 20 66 6f 72 20 74 68 65 20 56 54   list for the VT
11520 61 62 6c 65 20 74 68 61 74 20 63 6f 72 72 65 73  able that corres
11530 70 6f 6e 64 73 20 74 6f 20 74 68 65 0a 2a 2a 20  ponds to the.** 
11540 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
11550 69 6f 6e 20 64 6f 69 6e 67 20 74 68 65 20 70 72  ion doing the pr
11560 65 70 61 72 69 6e 67 20 73 6f 20 61 73 20 74 6f  eparing so as to
11570 20 75 73 65 20 74 68 65 20 63 6f 72 72 65 63 74   use the correct
11580 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 76 74 61 62  .** sqlite3_vtab
11590 2a 20 68 61 6e 64 6c 65 20 69 6e 20 74 68 65 20  * handle in the 
115a0 63 6f 6d 70 69 6c 65 64 20 71 75 65 72 79 2e 0a  compiled query..
115b0 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 69 6e  **.** When an in
115c0 2d 6d 65 6d 6f 72 79 20 54 61 62 6c 65 20 6f 62  -memory Table ob
115d0 6a 65 63 74 20 69 73 20 64 65 6c 65 74 65 64 20  ject is deleted 
115e0 28 66 6f 72 20 65 78 61 6d 70 6c 65 20 77 68 65  (for example whe
115f0 6e 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20  n the.** schema 
11600 69 73 20 62 65 69 6e 67 20 72 65 6c 6f 61 64 65  is being reloade
11610 64 20 66 6f 72 20 73 6f 6d 65 20 72 65 61 73 6f  d for some reaso
11620 6e 29 2c 20 74 68 65 20 56 54 61 62 6c 65 20 6f  n), the VTable o
11630 62 6a 65 63 74 73 20 61 72 65 20 6e 6f 74 0a 2a  bjects are not.*
11640 2a 20 64 65 6c 65 74 65 64 20 61 6e 64 20 74 68  * deleted and th
11650 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20  e sqlite3_vtab* 
11660 68 61 6e 64 6c 65 73 20 61 72 65 20 6e 6f 74 20  handles are not 
11670 78 44 69 73 63 6f 6e 6e 65 63 74 28 29 65 64 0a  xDisconnect()ed.
11680 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20  ** immediately. 
11690 49 6e 73 74 65 61 64 2c 20 74 68 65 79 20 61 72  Instead, they ar
116a0 65 20 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68 65  e moved from the
116b0 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20 6c   Table.pVTable l
116c0 69 73 74 20 74 6f 0a 2a 2a 20 61 6e 6f 74 68 65  ist to.** anothe
116d0 72 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65  r linked list he
116e0 61 64 65 64 20 62 79 20 74 68 65 20 73 71 6c 69  aded by the sqli
116f0 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 20  te3.pDisconnect 
11700 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 0a 2a 2a  member of the.**
11710 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73   corresponding s
11720 71 6c 69 74 65 33 20 73 74 72 75 63 74 75 72 65  qlite3 structure
11730 2e 20 54 68 65 79 20 61 72 65 20 74 68 65 6e 20  . They are then 
11740 64 65 6c 65 74 65 64 2f 78 44 69 73 63 6f 6e 6e  deleted/xDisconn
11750 65 63 74 65 64 0a 2a 2a 20 6e 65 78 74 20 74 69  ected.** next ti
11760 6d 65 20 61 20 73 74 61 74 65 6d 65 6e 74 20 69  me a statement i
11770 73 20 70 72 65 70 61 72 65 64 20 75 73 69 6e 67  s prepared using
11780 20 73 61 69 64 20 73 71 6c 69 74 65 33 2a 2e 20   said sqlite3*. 
11790 54 68 69 73 20 69 73 20 64 6f 6e 65 0a 2a 2a 20  This is done.** 
117a0 74 6f 20 61 76 6f 69 64 20 64 65 61 64 6c 6f 63  to avoid deadloc
117b0 6b 20 69 73 73 75 65 73 20 69 6e 76 6f 6c 76 69  k issues involvi
117c0 6e 67 20 6d 75 6c 74 69 70 6c 65 20 73 71 6c 69  ng multiple sqli
117d0 74 65 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 65  te3.mutex mutexe
117e0 73 2e 0a 2a 2a 20 52 65 66 65 72 20 74 6f 20 63  s..** Refer to c
117f0 6f 6d 6d 65 6e 74 73 20 61 62 6f 76 65 20 66 75  omments above fu
11800 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 56 74  nction sqlite3Vt
11810 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 29 20 66  abUnlockList() f
11820 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 6c 61 6e 61  or an.** explana
11830 74 69 6f 6e 20 61 73 20 74 6f 20 77 68 79 20 69  tion as to why i
11840 74 20 69 73 20 73 61 66 65 20 74 6f 20 61 64 64  t is safe to add
11850 20 61 6e 20 65 6e 74 72 79 20 74 6f 20 61 6e 20   an entry to an 
11860 73 71 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e  sqlite3.pDisconn
11870 65 63 74 0a 2a 2a 20 6c 69 73 74 20 77 69 74 68  ect.** list with
11880 6f 75 74 20 68 6f 6c 64 69 6e 67 20 74 68 65 20  out holding the 
11890 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 71  corresponding sq
118a0 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75 74 65  lite3.mutex mute
118b0 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d  x..**.** The mem
118c0 6f 72 79 20 66 6f 72 20 6f 62 6a 65 63 74 73 20  ory for objects 
118d0 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20  of this type is 
118e0 61 6c 77 61 79 73 20 61 6c 6c 6f 63 61 74 65 64  always allocated
118f0 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 44 62   by.** sqlite3Db
11900 4d 61 6c 6c 6f 63 28 29 2c 20 75 73 69 6e 67 20  Malloc(), using 
11910 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  the connection h
11920 61 6e 64 6c 65 20 73 74 6f 72 65 64 20 69 6e 20  andle stored in 
11930 56 54 61 62 6c 65 2e 64 62 20 61 73 0a 2a 2a 20  VTable.db as.** 
11940 74 68 65 20 66 69 72 73 74 20 61 72 67 75 6d 65  the first argume
11950 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 56 54  nt..*/.struct VT
11960 61 62 6c 65 20 7b 0a 20 20 73 71 6c 69 74 65 33  able {.  sqlite3
11970 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 20 20   *db;           
11980 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63     /* Database c
11990 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 73 6f 63 69  onnection associ
119a0 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 74  ated with this t
119b0 61 62 6c 65 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65  able */.  Module
119c0 20 2a 70 4d 6f 64 3b 20 20 20 20 20 20 20 20 20   *pMod;         
119d0 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
119e0 6f 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65  o module impleme
119f0 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c  ntation */.  sql
11a00 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
11a10 3b 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65  ;      /* Pointe
11a20 72 20 74 6f 20 76 74 61 62 20 69 6e 73 74 61 6e  r to vtab instan
11a30 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66  ce */.  int nRef
11a40 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
11a50 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70    /* Number of p
11a60 6f 69 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20  ointers to this 
11a70 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 75  structure */.  u
11a80 38 20 62 43 6f 6e 73 74 72 61 69 6e 74 3b 20 20  8 bConstraint;  
11a90 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
11aa0 20 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 73 20   if constraints 
11ab0 61 72 65 20 73 75 70 70 6f 72 74 65 64 20 2a 2f  are supported */
11ac0 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e  .  int iSavepoin
11ad0 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
11ae0 44 65 70 74 68 20 6f 66 20 74 68 65 20 53 41 56  Depth of the SAV
11af0 45 50 4f 49 4e 54 20 73 74 61 63 6b 20 2a 2f 0a  EPOINT stack */.
11b00 20 20 56 54 61 62 6c 65 20 2a 70 4e 65 78 74 3b    VTable *pNext;
11b10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
11b20 65 78 74 20 69 6e 20 6c 69 6e 6b 65 64 20 6c 69  ext in linked li
11b30 73 74 20 28 73 65 65 20 61 62 6f 76 65 29 20 2a  st (see above) *
11b40 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
11b50 73 63 68 65 6d 61 20 66 6f 72 20 65 61 63 68 20  schema for each 
11b60 53 51 4c 20 74 61 62 6c 65 20 61 6e 64 20 76 69  SQL table and vi
11b70 65 77 20 69 73 20 72 65 70 72 65 73 65 6e 74 65  ew is represente
11b80 64 20 69 6e 20 6d 65 6d 6f 72 79 0a 2a 2a 20 62  d in memory.** b
11b90 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  y an instance of
11ba0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
11bb0 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72  tructure..*/.str
11bc0 75 63 74 20 54 61 62 6c 65 20 7b 0a 20 20 63 68  uct Table {.  ch
11bd0 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
11be0 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
11bf0 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20  e table or view 
11c00 2a 2f 0a 20 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f  */.  Column *aCo
11c10 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 66  l;        /* Inf
11c20 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65  ormation about e
11c30 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  ach column */.  
11c40 49 6e 64 65 78 20 2a 70 49 6e 64 65 78 3b 20 20  Index *pIndex;  
11c50 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
11c60 53 51 4c 20 69 6e 64 65 78 65 73 20 6f 6e 20 74  SQL indexes on t
11c70 68 69 73 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20  his table. */.  
11c80 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
11c90 20 20 20 20 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72       /* NULL for
11ca0 20 74 61 62 6c 65 73 2e 20 20 50 6f 69 6e 74 73   tables.  Points
11cb0 20 74 6f 20 64 65 66 69 6e 69 74 69 6f 6e 20 69   to definition i
11cc0 66 20 61 20 76 69 65 77 2e 20 2a 2f 0a 20 20 46  f a view. */.  F
11cd0 4b 65 79 20 2a 70 46 4b 65 79 3b 20 20 20 20 20  Key *pFKey;     
11ce0 20 20 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69      /* Linked li
11cf0 73 74 20 6f 66 20 61 6c 6c 20 66 6f 72 65 69 67  st of all foreig
11d00 6e 20 6b 65 79 73 20 69 6e 20 74 68 69 73 20 74  n keys in this t
11d10 61 62 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a  able */.  char *
11d20 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20 2f  zColAff;       /
11d30 2a 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69 6e  * String definin
11d40 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 6f  g the affinity o
11d50 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f  f each column */
11d60 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43 68  .  ExprList *pCh
11d70 65 63 6b 3b 20 20 20 20 2f 2a 20 41 6c 6c 20 43  eck;    /* All C
11d80 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73  HECK constraints
11d90 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
11da0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20             /*   
11db0 2e 2e 2e 20 61 6c 73 6f 20 75 73 65 64 20 61 73  ... also used as
11dc0 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 6c 69 73   column name lis
11dd0 74 20 69 6e 20 61 20 56 49 45 57 20 2a 2f 0a 20  t in a VIEW */. 
11de0 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20   int tnum;      
11df0 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 42 54        /* Root BT
11e00 72 65 65 20 70 61 67 65 20 66 6f 72 20 74 68 69  ree page for thi
11e10 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 75 33 32  s table */.  u32
11e20 20 6e 54 61 62 52 65 66 3b 20 20 20 20 20 20 20   nTabRef;       
11e30 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70    /* Number of p
11e40 6f 69 6e 74 65 72 73 20 74 6f 20 74 68 69 73 20  ointers to this 
11e50 54 61 62 6c 65 20 2a 2f 0a 20 20 69 31 36 20 69  Table */.  i16 i
11e60 50 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20 20  PKey;           
11e70 2f 2a 20 49 66 20 6e 6f 74 20 6e 65 67 61 74 69  /* If not negati
11e80 76 65 2c 20 75 73 65 20 61 43 6f 6c 5b 69 50 4b  ve, use aCol[iPK
11e90 65 79 5d 20 61 73 20 74 68 65 20 72 6f 77 69 64  ey] as the rowid
11ea0 20 2a 2f 0a 20 20 69 31 36 20 6e 43 6f 6c 3b 20   */.  i16 nCol; 
11eb0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
11ec0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
11ed0 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  in this table */
11ee0 0a 20 20 4c 6f 67 45 73 74 20 6e 52 6f 77 4c 6f  .  LogEst nRowLo
11ef0 67 45 73 74 3b 20 20 20 2f 2a 20 45 73 74 69 6d  gEst;   /* Estim
11f00 61 74 65 64 20 72 6f 77 73 20 69 6e 20 74 61 62  ated rows in tab
11f10 6c 65 20 2d 20 66 72 6f 6d 20 73 71 6c 69 74 65  le - from sqlite
11f20 5f 73 74 61 74 31 20 74 61 62 6c 65 20 2a 2f 0a  _stat1 table */.
11f30 20 20 4c 6f 67 45 73 74 20 73 7a 54 61 62 52 6f    LogEst szTabRo
11f40 77 3b 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61  w;     /* Estima
11f50 74 65 64 20 73 69 7a 65 20 6f 66 20 65 61 63 68  ted size of each
11f60 20 74 61 62 6c 65 20 72 6f 77 20 69 6e 20 62 79   table row in by
11f70 74 65 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  tes */.#ifdef SQ
11f80 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 53 54  LITE_ENABLE_COST
11f90 4d 55 4c 54 0a 20 20 4c 6f 67 45 73 74 20 63 6f  MULT.  LogEst co
11fa0 73 74 4d 75 6c 74 3b 20 20 20 20 20 2f 2a 20 43  stMult;     /* C
11fb0 6f 73 74 20 6d 75 6c 74 69 70 6c 69 65 72 20 66  ost multiplier f
11fc0 6f 72 20 75 73 69 6e 67 20 74 68 69 73 20 74 61  or using this ta
11fd0 62 6c 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ble */.#endif.  
11fe0 75 38 20 74 61 62 46 6c 61 67 73 3b 20 20 20 20  u8 tabFlags;    
11ff0 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20       /* Mask of 
12000 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20  TF_* values */. 
12010 20 75 38 20 6b 65 79 43 6f 6e 66 3b 20 20 20 20   u8 keyConf;    
12020 20 20 20 20 20 20 2f 2a 20 57 68 61 74 20 74 6f        /* What to
12030 20 64 6f 20 69 6e 20 63 61 73 65 20 6f 66 20 75   do in case of u
12040 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 66 6c 69  niqueness confli
12050 63 74 20 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a 23  ct on iPKey */.#
12060 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
12070 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20 20  IT_ALTERTABLE.  
12080 69 6e 74 20 61 64 64 43 6f 6c 4f 66 66 73 65 74  int addColOffset
12090 3b 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20 69  ;    /* Offset i
120a0 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 73  n CREATE TABLE s
120b0 74 6d 74 20 74 6f 20 61 64 64 20 61 20 6e 65 77  tmt to add a new
120c0 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69   column */.#endi
120d0 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
120e0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
120f0 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f 64 75 6c 65  LE.  int nModule
12100 41 72 67 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  Arg;      /* Num
12110 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
12120 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 2a   to the module *
12130 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 4d 6f 64  /.  char **azMod
12140 75 6c 65 41 72 67 3b 20 20 2f 2a 20 30 3a 20 6d  uleArg;  /* 0: m
12150 6f 64 75 6c 65 20 31 3a 20 73 63 68 65 6d 61 20  odule 1: schema 
12160 32 3a 20 76 74 61 62 20 6e 61 6d 65 20 33 2e 2e  2: vtab name 3..
12170 2e 3a 20 61 72 67 73 20 2a 2f 0a 20 20 56 54 61  .: args */.  VTa
12180 62 6c 65 20 2a 70 56 54 61 62 6c 65 3b 20 20 20  ble *pVTable;   
12190 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 56 54 61    /* List of VTa
121a0 62 6c 65 20 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a  ble objects. */.
121b0 23 65 6e 64 69 66 0a 20 20 54 72 69 67 67 65 72  #endif.  Trigger
121c0 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20 2f 2a   *pTrigger;   /*
121d0 20 4c 69 73 74 20 6f 66 20 74 72 69 67 67 65 72   List of trigger
121e0 73 20 73 74 6f 72 65 64 20 69 6e 20 70 53 63 68  s stored in pSch
121f0 65 6d 61 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  ema */.  Schema 
12200 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a  *pSchema;     /*
12210 20 53 63 68 65 6d 61 20 74 68 61 74 20 63 6f 6e   Schema that con
12220 74 61 69 6e 73 20 74 68 69 73 20 74 61 62 6c 65  tains this table
12230 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65   */.  Table *pNe
12240 78 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20 4e 65  xtZombie;  /* Ne
12250 78 74 20 6f 6e 20 74 68 65 20 50 61 72 73 65 2e  xt on the Parse.
12260 70 5a 6f 6d 62 69 65 54 61 62 20 6c 69 73 74 20  pZombieTab list 
12270 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  */.};../*.** All
12280 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
12290 54 61 62 6c 65 2e 74 61 62 46 6c 61 67 73 2e 0a  Table.tabFlags..
122a0 2a 2a 0a 2a 2a 20 54 46 5f 4f 4f 4f 48 69 64 64  **.** TF_OOOHidd
122b0 65 6e 20 61 70 70 6c 69 65 73 20 74 6f 20 74 61  en applies to ta
122c0 62 6c 65 73 20 6f 72 20 76 69 65 77 20 74 68 61  bles or view tha
122d0 74 20 68 61 76 65 20 68 69 64 64 65 6e 20 63 6f  t have hidden co
122e0 6c 75 6d 6e 73 20 74 68 61 74 20 61 72 65 0a 2a  lumns that are.*
122f0 2a 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 6e 6f  * followed by no
12300 6e 2d 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73  n-hidden columns
12310 2e 20 20 45 78 61 6d 70 6c 65 3a 20 20 22 43 52  .  Example:  "CR
12320 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42  EATE VIRTUAL TAB
12330 4c 45 20 78 20 55 53 49 4e 47 0a 2a 2a 20 76 74  LE x USING.** vt
12340 61 62 31 28 61 20 48 49 44 44 45 4e 2c 20 62 29  ab1(a HIDDEN, b)
12350 3b 22 2e 20 20 53 69 6e 63 65 20 22 62 22 20 69  ;".  Since "b" i
12360 73 20 61 20 6e 6f 6e 2d 68 69 64 64 65 6e 20 63  s a non-hidden c
12370 6f 6c 75 6d 6e 20 62 75 74 20 22 61 22 20 69 73  olumn but "a" is
12380 20 68 69 64 64 65 6e 2c 0a 2a 2a 20 74 68 65 20   hidden,.** the 
12390 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 61 74 74  TF_OOOHidden att
123a0 72 69 62 75 74 65 20 77 6f 75 6c 64 20 61 70 70  ribute would app
123b0 6c 79 20 69 6e 20 74 68 69 73 20 63 61 73 65 2e  ly in this case.
123c0 20 20 53 75 63 68 20 74 61 62 6c 65 73 20 72 65    Such tables re
123d0 71 75 69 72 65 0a 2a 2a 20 73 70 65 63 69 61 6c  quire.** special
123e0 20 68 61 6e 64 6c 69 6e 67 20 64 75 72 69 6e 67   handling during
123f0 20 49 4e 53 45 52 54 20 70 72 6f 63 65 73 73 69   INSERT processi
12400 6e 67 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54  ng..*/.#define T
12410 46 5f 52 65 61 64 6f 6e 6c 79 20 20 20 20 20 20  F_Readonly      
12420 20 20 30 78 30 31 20 20 20 20 2f 2a 20 52 65 61    0x01    /* Rea
12430 64 2d 6f 6e 6c 79 20 73 79 73 74 65 6d 20 74 61  d-only system ta
12440 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  ble */.#define T
12450 46 5f 45 70 68 65 6d 65 72 61 6c 20 20 20 20 20  F_Ephemeral     
12460 20 20 30 78 30 32 20 20 20 20 2f 2a 20 41 6e 20    0x02    /* An 
12470 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20  ephemeral table 
12480 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61  */.#define TF_Ha
12490 73 50 72 69 6d 61 72 79 4b 65 79 20 20 20 30 78  sPrimaryKey   0x
124a0 30 34 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 68  04    /* Table h
124b0 61 73 20 61 20 70 72 69 6d 61 72 79 20 6b 65 79  as a primary key
124c0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 41   */.#define TF_A
124d0 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 20 20 30  utoincrement   0
124e0 78 30 38 20 20 20 20 2f 2a 20 49 6e 74 65 67 65  x08    /* Intege
124f0 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 69 73  r primary key is
12500 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a   autoincrement *
12510 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 56 69 72  /.#define TF_Vir
12520 74 75 61 6c 20 20 20 20 20 20 20 20 20 30 78 31  tual         0x1
12530 30 20 20 20 20 2f 2a 20 49 73 20 61 20 76 69 72  0    /* Is a vir
12540 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64  tual table */.#d
12550 65 66 69 6e 65 20 54 46 5f 57 69 74 68 6f 75 74  efine TF_Without
12560 52 6f 77 69 64 20 20 20 20 30 78 32 30 20 20 20  Rowid    0x20   
12570 20 2f 2a 20 4e 6f 20 72 6f 77 69 64 2e 20 20 50   /* No rowid.  P
12580 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20 74 68  RIMARY KEY is th
12590 65 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65  e key */.#define
125a0 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77   TF_NoVisibleRow
125b0 69 64 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4e  id  0x40    /* N
125c0 6f 20 75 73 65 72 2d 76 69 73 69 62 6c 65 20 22  o user-visible "
125d0 72 6f 77 69 64 22 20 63 6f 6c 75 6d 6e 20 2a 2f  rowid" column */
125e0 0a 23 64 65 66 69 6e 65 20 54 46 5f 4f 4f 4f 48  .#define TF_OOOH
125f0 69 64 64 65 6e 20 20 20 20 20 20 20 30 78 38 30  idden       0x80
12600 20 20 20 20 2f 2a 20 4f 75 74 2d 6f 66 2d 4f 72      /* Out-of-Or
12610 64 65 72 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d  der hidden colum
12620 6e 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 65  ns */.../*.** Te
12630 73 74 20 74 6f 20 73 65 65 20 77 68 65 74 68 65  st to see whethe
12640 72 20 6f 72 20 6e 6f 74 20 61 20 74 61 62 6c 65  r or not a table
12650 20 69 73 20 61 20 76 69 72 74 75 61 6c 20 74 61   is a virtual ta
12660 62 6c 65 2e 20 20 54 68 69 73 20 69 73 0a 2a 2a  ble.  This is.**
12670 20 64 6f 6e 65 20 61 73 20 61 20 6d 61 63 72 6f   done as a macro
12680 20 73 6f 20 74 68 61 74 20 69 74 20 77 69 6c 6c   so that it will
12690 20 62 65 20 6f 70 74 69 6d 69 7a 65 64 20 6f 75   be optimized ou
126a0 74 20 77 68 65 6e 20 76 69 72 74 75 61 6c 0a 2a  t when virtual.*
126b0 2a 20 74 61 62 6c 65 20 73 75 70 70 6f 72 74 20  * table support 
126c0 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  is omitted from 
126d0 74 68 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69  the build..*/.#i
126e0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
126f0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23  T_VIRTUALTABLE.#
12700 20 20 64 65 66 69 6e 65 20 49 73 56 69 72 74 75    define IsVirtu
12710 61 6c 28 58 29 20 20 20 20 20 20 28 28 28 58 29  al(X)      (((X)
12720 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f  ->tabFlags & TF_
12730 56 69 72 74 75 61 6c 29 21 3d 30 29 0a 23 65 6c  Virtual)!=0).#el
12740 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56  se.#  define IsV
12750 69 72 74 75 61 6c 28 58 29 20 20 20 20 20 20 30  irtual(X)      0
12760 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d  .#endif../*.** M
12770 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69  acros to determi
12780 6e 65 20 69 66 20 61 20 63 6f 6c 75 6d 6e 20 69  ne if a column i
12790 73 20 68 69 64 64 65 6e 2e 20 20 49 73 4f 72 64  s hidden.  IsOrd
127a0 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d  inaryHiddenColum
127b0 6e 28 29 0a 2a 2a 20 6f 6e 6c 79 20 77 6f 72 6b  n().** only work
127c0 73 20 66 6f 72 20 6e 6f 6e 2d 76 69 72 74 75 61  s for non-virtua
127d0 6c 20 74 61 62 6c 65 73 20 28 6f 72 64 69 6e 61  l tables (ordina
127e0 72 79 20 74 61 62 6c 65 73 20 61 6e 64 20 76 69  ry tables and vi
127f0 65 77 73 29 20 61 6e 64 20 69 73 0a 2a 2a 20 61  ews) and is.** a
12800 6c 77 61 79 73 20 66 61 6c 73 65 20 75 6e 6c 65  lways false unle
12810 73 73 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ss SQLITE_ENABLE
12820 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 20  _HIDDEN_COLUMNS 
12830 69 73 20 64 65 66 69 6e 65 64 2e 20 20 54 68 65  is defined.  The
12840 0a 2a 2a 20 49 73 48 69 64 64 65 6e 43 6f 6c 75  .** IsHiddenColu
12850 6d 6e 28 29 20 6d 61 63 72 6f 20 69 73 20 67 65  mn() macro is ge
12860 6e 65 72 61 6c 20 70 75 72 70 6f 73 65 2e 0a 2a  neral purpose..*
12870 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
12880 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44  LITE_ENABLE_HIDD
12890 45 4e 5f 43 4f 4c 55 4d 4e 53 29 0a 23 20 20 64  EN_COLUMNS).#  d
128a0 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f  efine IsHiddenCo
128b0 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20  lumn(X)         
128c0 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20  (((X)->colFlags 
128d0 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e  & COLFLAG_HIDDEN
128e0 29 21 3d 30 29 0a 23 20 20 64 65 66 69 6e 65 20  )!=0).#  define 
128f0 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e  IsOrdinaryHidden
12900 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28 58 29 2d  Column(X) (((X)-
12910 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46  >colFlags & COLF
12920 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a  LAG_HIDDEN)!=0).
12930 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28 53  #elif !defined(S
12940 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
12950 41 4c 54 41 42 4c 45 29 0a 23 20 20 64 65 66 69  ALTABLE).#  defi
12960 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d  ne IsHiddenColum
12970 6e 28 58 29 20 20 20 20 20 20 20 20 20 28 28 28  n(X)         (((
12980 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43  X)->colFlags & C
12990 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d  OLFLAG_HIDDEN)!=
129a0 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f  0).#  define IsO
129b0 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c  rdinaryHiddenCol
129c0 75 6d 6e 28 58 29 20 30 0a 23 65 6c 73 65 0a 23  umn(X) 0.#else.#
129d0 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65    define IsHidde
129e0 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20  nColumn(X)      
129f0 20 20 20 30 0a 23 20 20 64 65 66 69 6e 65 20 49     0.#  define I
12a00 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43  sOrdinaryHiddenC
12a10 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6e 64 69  olumn(X) 0.#endi
12a20 66 0a 0a 0a 2f 2a 20 44 6f 65 73 20 74 68 65 20  f.../* Does the 
12a30 74 61 62 6c 65 20 68 61 76 65 20 61 20 72 6f 77  table have a row
12a40 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 48 61  id */.#define Ha
12a50 73 52 6f 77 69 64 28 58 29 20 20 20 20 20 28 28  sRowid(X)     ((
12a60 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20  (X)->tabFlags & 
12a70 54 46 5f 57 69 74 68 6f 75 74 52 6f 77 69 64 29  TF_WithoutRowid)
12a80 3d 3d 30 29 0a 23 64 65 66 69 6e 65 20 56 69 73  ==0).#define Vis
12a90 69 62 6c 65 52 6f 77 69 64 28 58 29 20 28 28 28  ibleRowid(X) (((
12aa0 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54  X)->tabFlags & T
12ab0 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69 64  F_NoVisibleRowid
12ac0 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  )==0)../*.** Eac
12ad0 68 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  h foreign key co
12ae0 6e 73 74 72 61 69 6e 74 20 69 73 20 61 6e 20 69  nstraint is an i
12af0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
12b00 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
12b10 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66 6f 72 65  re..**.** A fore
12b20 69 67 6e 20 6b 65 79 20 69 73 20 61 73 73 6f 63  ign key is assoc
12b30 69 61 74 65 64 20 77 69 74 68 20 74 77 6f 20 74  iated with two t
12b40 61 62 6c 65 73 2e 20 20 54 68 65 20 22 66 72 6f  ables.  The "fro
12b50 6d 22 20 74 61 62 6c 65 20 69 73 0a 2a 2a 20 74  m" table is.** t
12b60 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f  he table that co
12b70 6e 74 61 69 6e 73 20 74 68 65 20 52 45 46 45 52  ntains the REFER
12b80 45 4e 43 45 53 20 63 6c 61 75 73 65 20 74 68 61  ENCES clause tha
12b90 74 20 63 72 65 61 74 65 73 20 74 68 65 20 66 6f  t creates the fo
12ba0 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e 20 20 54  reign.** key.  T
12bb0 68 65 20 22 74 6f 22 20 74 61 62 6c 65 20 69 73  he "to" table is
12bc0 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
12bd0 69 73 20 6e 61 6d 65 64 20 69 6e 20 74 68 65 20  is named in the 
12be0 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73  REFERENCES claus
12bf0 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65 72 20 74  e..** Consider t
12c00 68 69 73 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a 0a  his example:.**.
12c10 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 54 41  **     CREATE TA
12c20 42 4c 45 20 65 78 31 28 0a 2a 2a 20 20 20 20 20  BLE ex1(.**     
12c30 20 20 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d    a INTEGER PRIM
12c40 41 52 59 20 4b 45 59 2c 0a 2a 2a 20 20 20 20 20  ARY KEY,.**     
12c50 20 20 62 20 49 4e 54 45 47 45 52 20 43 4f 4e 53    b INTEGER CONS
12c60 54 52 41 49 4e 54 20 66 6b 31 20 52 45 46 45 52  TRAINT fk1 REFER
12c70 45 4e 43 45 53 20 65 78 32 28 78 29 0a 2a 2a 20  ENCES ex2(x).** 
12c80 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72      );.**.** For
12c90 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 22 66 6b   foreign key "fk
12ca0 31 22 2c 20 74 68 65 20 66 72 6f 6d 2d 74 61 62  1", the from-tab
12cb0 6c 65 20 69 73 20 22 65 78 31 22 20 61 6e 64 20  le is "ex1" and 
12cc0 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20  the to-table is 
12cd0 22 65 78 32 22 2e 0a 2a 2a 20 45 71 75 69 76 61  "ex2"..** Equiva
12ce0 6c 65 6e 74 20 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a  lent names:.**.*
12cf0 2a 20 20 20 20 20 66 72 6f 6d 2d 74 61 62 6c 65  *     from-table
12d00 20 3d 3d 20 63 68 69 6c 64 2d 74 61 62 6c 65 0a   == child-table.
12d10 2a 2a 20 20 20 20 20 20 20 74 6f 2d 74 61 62 6c  **       to-tabl
12d20 65 20 3d 3d 20 70 61 72 65 6e 74 2d 74 61 62 6c  e == parent-tabl
12d30 65 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 52 45 46  e.**.** Each REF
12d40 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 67  ERENCES clause g
12d50 65 6e 65 72 61 74 65 73 20 61 6e 20 69 6e 73 74  enerates an inst
12d60 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
12d70 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a  owing structure.
12d80 2a 2a 20 77 68 69 63 68 20 69 73 20 61 74 74 61  ** which is atta
12d90 63 68 65 64 20 74 6f 20 74 68 65 20 66 72 6f 6d  ched to the from
12da0 2d 74 61 62 6c 65 2e 20 20 54 68 65 20 74 6f 2d  -table.  The to-
12db0 74 61 62 6c 65 20 6e 65 65 64 20 6e 6f 74 20 65  table need not e
12dc0 78 69 73 74 20 77 68 65 6e 0a 2a 2a 20 74 68 65  xist when.** the
12dd0 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 63   from-table is c
12de0 72 65 61 74 65 64 2e 20 20 54 68 65 20 65 78 69  reated.  The exi
12df0 73 74 65 6e 63 65 20 6f 66 20 74 68 65 20 74 6f  stence of the to
12e00 2d 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 63 68  -table is not ch
12e10 65 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ecked..**.** The
12e20 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 70 61 72   list of all par
12e30 65 6e 74 73 20 66 6f 72 20 63 68 69 6c 64 20 54  ents for child T
12e40 61 62 6c 65 20 58 20 69 73 20 68 65 6c 64 20 61  able X is held a
12e50 74 20 58 2e 70 46 4b 65 79 2e 0a 2a 2a 0a 2a 2a  t X.pFKey..**.**
12e60 20 41 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 63   A list of all c
12e70 68 69 6c 64 72 65 6e 20 66 6f 72 20 61 20 74 61  hildren for a ta
12e80 62 6c 65 20 6e 61 6d 65 64 20 5a 20 28 77 68 69  ble named Z (whi
12e90 63 68 20 6d 69 67 68 74 20 6e 6f 74 20 65 76 65  ch might not eve
12ea0 6e 20 65 78 69 73 74 29 0a 2a 2a 20 69 73 20 68  n exist).** is h
12eb0 65 6c 64 20 69 6e 20 53 63 68 65 6d 61 2e 66 6b  eld in Schema.fk
12ec0 65 79 48 61 73 68 20 77 69 74 68 20 61 20 68 61  eyHash with a ha
12ed0 73 68 20 6b 65 79 20 6f 66 20 5a 2e 0a 2a 2f 0a  sh key of Z..*/.
12ee0 73 74 72 75 63 74 20 46 4b 65 79 20 7b 0a 20 20  struct FKey {.  
12ef0 54 61 62 6c 65 20 2a 70 46 72 6f 6d 3b 20 20 20  Table *pFrom;   
12f00 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6e 74 61    /* Table conta
12f10 69 6e 69 6e 67 20 74 68 65 20 52 45 46 45 52 45  ining the REFERE
12f20 4e 43 45 53 20 63 6c 61 75 73 65 20 28 61 6b 61  NCES clause (aka
12f30 3a 20 43 68 69 6c 64 29 20 2a 2f 0a 20 20 46 4b  : Child) */.  FK
12f40 65 79 20 2a 70 4e 65 78 74 46 72 6f 6d 3b 20 20  ey *pNextFrom;  
12f50 2f 2a 20 4e 65 78 74 20 46 4b 65 79 20 77 69 74  /* Next FKey wit
12f60 68 20 74 68 65 20 73 61 6d 65 20 69 6e 20 70 46  h the same in pF
12f70 72 6f 6d 2e 20 4e 65 78 74 20 70 61 72 65 6e 74  rom. Next parent
12f80 20 6f 66 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 63   of pFrom */.  c
12f90 68 61 72 20 2a 7a 54 6f 3b 20 20 20 20 20 20 20  har *zTo;       
12fa0 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 61 62 6c   /* Name of tabl
12fb0 65 20 74 68 61 74 20 74 68 65 20 6b 65 79 20 70  e that the key p
12fc0 6f 69 6e 74 73 20 74 6f 20 28 61 6b 61 3a 20 50  oints to (aka: P
12fd0 61 72 65 6e 74 29 20 2a 2f 0a 20 20 46 4b 65 79  arent) */.  FKey
12fe0 20 2a 70 4e 65 78 74 54 6f 3b 20 20 20 20 2f 2a   *pNextTo;    /*
12ff0 20 4e 65 78 74 20 77 69 74 68 20 74 68 65 20 73   Next with the s
13000 61 6d 65 20 7a 54 6f 2e 20 4e 65 78 74 20 63 68  ame zTo. Next ch
13010 69 6c 64 20 6f 66 20 7a 54 6f 2e 20 2a 2f 0a 20  ild of zTo. */. 
13020 20 46 4b 65 79 20 2a 70 50 72 65 76 54 6f 3b 20   FKey *pPrevTo; 
13030 20 20 20 2f 2a 20 50 72 65 76 69 6f 75 73 20 77     /* Previous w
13040 69 74 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f  ith the same zTo
13050 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b 20   */.  int nCol; 
13060 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
13070 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
13080 74 68 69 73 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a  this key */.  /*
13090 20 45 56 3a 20 52 2d 33 30 33 32 33 2d 32 31 39   EV: R-30323-219
130a0 31 37 20 2a 2f 0a 20 20 75 38 20 69 73 44 65 66  17 */.  u8 isDef
130b0 65 72 72 65 64 3b 20 20 20 20 20 20 20 2f 2a 20  erred;       /* 
130c0 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69  True if constrai
130d0 6e 74 20 63 68 65 63 6b 69 6e 67 20 69 73 20 64  nt checking is d
130e0 65 66 65 72 72 65 64 20 74 69 6c 6c 20 43 4f 4d  eferred till COM
130f0 4d 49 54 20 2a 2f 0a 20 20 75 38 20 61 41 63 74  MIT */.  u8 aAct
13100 69 6f 6e 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f  ion[2];        /
13110 2a 20 4f 4e 20 44 45 4c 45 54 45 20 61 6e 64 20  * ON DELETE and 
13120 4f 4e 20 55 50 44 41 54 45 20 61 63 74 69 6f 6e  ON UPDATE action
13130 73 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 20  s, respectively 
13140 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 61 70  */.  Trigger *ap
13150 54 72 69 67 67 65 72 5b 32 5d 3b 2f 2a 20 54 72  Trigger[2];/* Tr
13160 69 67 67 65 72 73 20 66 6f 72 20 61 41 63 74 69  iggers for aActi
13170 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73 20 2a 2f 0a  on[] actions */.
13180 20 20 73 74 72 75 63 74 20 73 43 6f 6c 4d 61 70    struct sColMap
13190 20 7b 20 20 20 20 20 20 2f 2a 20 4d 61 70 70 69   {      /* Mappi
131a0 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  ng of columns in
131b0 20 70 46 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e   pFrom to column
131c0 73 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20 20  s in zTo */.    
131d0 69 6e 74 20 69 46 72 6f 6d 3b 20 20 20 20 20 20  int iFrom;      
131e0 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f        /* Index o
131f0 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 70 46 72 6f  f column in pFro
13200 6d 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  m */.    char *z
13210 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Col;           /
13220 2a 20 4e 61 6d 65 20 6f 66 20 63 6f 6c 75 6d 6e  * Name of column
13230 20 69 6e 20 7a 54 6f 2e 20 20 49 66 20 4e 55 4c   in zTo.  If NUL
13240 4c 20 75 73 65 20 50 52 49 4d 41 52 59 20 4b 45  L use PRIMARY KE
13250 59 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31 5d  Y */.  } aCol[1]
13260 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
13270 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61  One entry for ea
13280 63 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d  ch of nCol colum
13290 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ns */.};../*.** 
132a0 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20  SQLite supports 
132b0 6d 61 6e 79 20 64 69 66 66 65 72 65 6e 74 20 77  many different w
132c0 61 79 73 20 74 6f 20 72 65 73 6f 6c 76 65 20 61  ays to resolve a
132d0 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65   constraint.** e
132e0 72 72 6f 72 2e 20 20 52 4f 4c 4c 42 41 43 4b 20  rror.  ROLLBACK 
132f0 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73  processing means
13300 20 74 68 61 74 20 61 20 63 6f 6e 73 74 72 61 69   that a constrai
13310 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20  nt violation.** 
13320 63 61 75 73 65 73 20 74 68 65 20 6f 70 65 72 61  causes the opera
13330 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 20  tion in process 
13340 74 6f 20 66 61 69 6c 20 61 6e 64 20 66 6f 72 20  to fail and for 
13350 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e  the current tran
13360 73 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65  saction.** to be
13370 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 41   rolled back.  A
13380 42 4f 52 54 20 70 72 6f 63 65 73 73 69 6e 67 20  BORT processing 
13390 6d 65 61 6e 73 20 74 68 65 20 6f 70 65 72 61 74  means the operat
133a0 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 0a 2a  ion in process.*
133b0 2a 20 66 61 69 6c 73 20 61 6e 64 20 61 6e 79 20  * fails and any 
133c0 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 66 72  prior changes fr
133d0 6f 6d 20 74 68 61 74 20 6f 6e 65 20 6f 70 65 72  om that one oper
133e0 61 74 69 6f 6e 20 61 72 65 20 62 61 63 6b 65 64  ation are backed
133f0 20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20 74 68 65   out,.** but the
13400 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
13410 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e  not rolled back.
13420 20 20 46 41 49 4c 20 70 72 6f 63 65 73 73 69 6e    FAIL processin
13430 67 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a 2a 20  g means that.** 
13440 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e  the operation in
13450 20 70 72 6f 67 72 65 73 73 20 73 74 6f 70 73 20   progress stops 
13460 61 6e 64 20 72 65 74 75 72 6e 73 20 61 6e 20 65  and returns an e
13470 72 72 6f 72 20 63 6f 64 65 2e 20 20 42 75 74 20  rror code.  But 
13480 70 72 69 6f 72 0a 2a 2a 20 63 68 61 6e 67 65 73  prior.** changes
13490 20 64 75 65 20 74 6f 20 74 68 65 20 73 61 6d 65   due to the same
134a0 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20 6e   operation are n
134b0 6f 74 20 62 61 63 6b 65 64 20 6f 75 74 20 61 6e  ot backed out an
134c0 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a  d no rollback.**
134d0 20 6f 63 63 75 72 73 2e 20 20 49 47 4e 4f 52 45   occurs.  IGNORE
134e0 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20   means that the 
134f0 70 61 72 74 69 63 75 6c 61 72 20 72 6f 77 20 74  particular row t
13500 68 61 74 20 63 61 75 73 65 64 20 74 68 65 20 63  hat caused the c
13510 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72  onstraint.** err
13520 6f 72 20 69 73 20 6e 6f 74 20 69 6e 73 65 72 74  or is not insert
13530 65 64 20 6f 72 20 75 70 64 61 74 65 64 2e 20 20  ed or updated.  
13540 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69  Processing conti
13550 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f  nues and no erro
13560 72 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65 64  r.** is returned
13570 2e 20 20 52 45 50 4c 41 43 45 20 6d 65 61 6e 73  .  REPLACE means
13580 20 74 68 61 74 20 70 72 65 65 78 69 73 74 69 6e   that preexistin
13590 67 20 64 61 74 61 62 61 73 65 20 72 6f 77 73 20  g database rows 
135a0 74 68 61 74 20 63 61 75 73 65 64 0a 2a 2a 20 61  that caused.** a
135b0 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
135c0 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65  nt violation are
135d0 20 72 65 6d 6f 76 65 64 20 73 6f 20 74 68 61 74   removed so that
135e0 20 74 68 65 20 6e 65 77 20 69 6e 73 65 72 74 20   the new insert 
135f0 6f 72 0a 2a 2a 20 75 70 64 61 74 65 20 63 61 6e  or.** update can
13600 20 70 72 6f 63 65 65 64 2e 20 20 50 72 6f 63 65   proceed.  Proce
13610 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20  ssing continues 
13620 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20 69 73 20  and no error is 
13630 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  reported..**.** 
13640 52 45 53 54 52 49 43 54 2c 20 53 45 54 4e 55 4c  RESTRICT, SETNUL
13650 4c 2c 20 61 6e 64 20 43 41 53 43 41 44 45 20 61  L, and CASCADE a
13660 63 74 69 6f 6e 73 20 61 70 70 6c 79 20 6f 6e 6c  ctions apply onl
13670 79 20 74 6f 20 66 6f 72 65 69 67 6e 20 6b 65 79  y to foreign key
13680 73 2e 0a 2a 2a 20 52 45 53 54 52 49 43 54 20 69  s..** RESTRICT i
13690 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 41 42  s the same as AB
136a0 4f 52 54 20 66 6f 72 20 49 4d 4d 45 44 49 41 54  ORT for IMMEDIAT
136b0 45 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61  E foreign keys a
136c0 6e 64 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20 61  nd the.** same a
136d0 73 20 52 4f 4c 4c 42 41 43 4b 20 66 6f 72 20 44  s ROLLBACK for D
136e0 45 46 45 52 52 45 44 20 6b 65 79 73 2e 20 20 53  EFERRED keys.  S
136f0 45 54 4e 55 4c 4c 20 6d 65 61 6e 73 20 74 68 61  ETNULL means tha
13700 74 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a  t the foreign.**
13710 20 6b 65 79 20 69 73 20 73 65 74 20 74 6f 20 4e   key is set to N
13720 55 4c 4c 2e 20 20 43 41 53 43 41 44 45 20 6d 65  ULL.  CASCADE me
13730 61 6e 73 20 74 68 61 74 20 61 20 44 45 4c 45 54  ans that a DELET
13740 45 20 6f 72 20 55 50 44 41 54 45 20 6f 66 20 74  E or UPDATE of t
13750 68 65 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 64  he.** referenced
13760 20 74 61 62 6c 65 20 72 6f 77 20 69 73 20 70 72   table row is pr
13770 6f 70 61 67 61 74 65 64 20 69 6e 74 6f 20 74 68  opagated into th
13780 65 20 72 6f 77 20 74 68 61 74 20 68 6f 6c 64 73  e row that holds
13790 20 74 68 65 0a 2a 2a 20 66 6f 72 65 69 67 6e 20   the.** foreign 
137a0 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66  key..**.** The f
137b0 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d 62 6f 6c 69  ollowing symboli
137c0 63 20 76 61 6c 75 65 73 20 61 72 65 20 75 73 65  c values are use
137d0 64 20 74 6f 20 72 65 63 6f 72 64 20 77 68 69 63  d to record whic
137e0 68 20 74 79 70 65 0a 2a 2a 20 6f 66 20 61 63 74  h type.** of act
137f0 69 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a  ion to take..*/.
13800 23 64 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20  #define OE_None 
13810 20 20 20 20 30 20 20 20 2f 2a 20 54 68 65 72 65      0   /* There
13820 20 69 73 20 6e 6f 20 63 6f 6e 73 74 72 61 69 6e   is no constrain
13830 74 20 74 6f 20 63 68 65 63 6b 20 2a 2f 0a 23 64  t to check */.#d
13840 65 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61 63  efine OE_Rollbac
13850 6b 20 31 20 20 20 2f 2a 20 46 61 69 6c 20 74 68  k 1   /* Fail th
13860 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64 20  e operation and 
13870 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61  rollback the tra
13880 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  nsaction */.#def
13890 69 6e 65 20 4f 45 5f 41 62 6f 72 74 20 20 20 20  ine OE_Abort    
138a0 32 20 20 20 2f 2a 20 42 61 63 6b 20 6f 75 74 20  2   /* Back out 
138b0 63 68 61 6e 67 65 73 20 62 75 74 20 64 6f 20 6e  changes but do n
138c0 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73  o rollback trans
138d0 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  action */.#defin
138e0 65 20 4f 45 5f 46 61 69 6c 20 20 20 20 20 33 20  e OE_Fail     3 
138f0 20 20 2f 2a 20 53 74 6f 70 20 74 68 65 20 6f 70    /* Stop the op
13900 65 72 61 74 69 6f 6e 20 62 75 74 20 6c 65 61 76  eration but leav
13910 65 20 61 6c 6c 20 70 72 69 6f 72 20 63 68 61 6e  e all prior chan
13920 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ges */.#define O
13930 45 5f 49 67 6e 6f 72 65 20 20 20 34 20 20 20 2f  E_Ignore   4   /
13940 2a 20 49 67 6e 6f 72 65 20 74 68 65 20 65 72 72  * Ignore the err
13950 6f 72 2e 20 44 6f 20 6e 6f 74 20 64 6f 20 74 68  or. Do not do th
13960 65 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41  e INSERT or UPDA
13970 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  TE */.#define OE
13980 5f 52 65 70 6c 61 63 65 20 20 35 20 20 20 2f 2a  _Replace  5   /*
13990 20 44 65 6c 65 74 65 20 65 78 69 73 74 69 6e 67   Delete existing
139a0 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 20 64 6f   record, then do
139b0 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54   INSERT or UPDAT
139c0 45 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45  E */..#define OE
139d0 5f 52 65 73 74 72 69 63 74 20 36 20 20 20 2f 2a  _Restrict 6   /*
139e0 20 4f 45 5f 41 62 6f 72 74 20 66 6f 72 20 49 4d   OE_Abort for IM
139f0 4d 45 44 49 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c  MEDIATE, OE_Roll
13a00 62 61 63 6b 20 66 6f 72 20 44 45 46 45 52 52 45  back for DEFERRE
13a10 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  D */.#define OE_
13a20 53 65 74 4e 75 6c 6c 20 20 37 20 20 20 2f 2a 20  SetNull  7   /* 
13a30 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20  Set the foreign 
13a40 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c  key value to NUL
13a50 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  L */.#define OE_
13a60 53 65 74 44 66 6c 74 20 20 38 20 20 20 2f 2a 20  SetDflt  8   /* 
13a70 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20  Set the foreign 
13a80 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 69 74 73  key value to its
13a90 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 64 65 66   default */.#def
13aa0 69 6e 65 20 4f 45 5f 43 61 73 63 61 64 65 20 20  ine OE_Cascade  
13ab0 39 20 20 20 2f 2a 20 43 61 73 63 61 64 65 20 74  9   /* Cascade t
13ac0 68 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 0a 23  he changes */..#
13ad0 64 65 66 69 6e 65 20 4f 45 5f 44 65 66 61 75 6c  define OE_Defaul
13ae0 74 20 20 31 30 20 20 2f 2a 20 44 6f 20 77 68 61  t  10  /* Do wha
13af0 74 65 76 65 72 20 74 68 65 20 64 65 66 61 75 6c  tever the defaul
13b00 74 20 61 63 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a  t action is */..
13b10 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
13b20 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
13b30 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73  ing structure is
13b40 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20 66   passed as the f
13b50 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  irst.** argument
13b60 20 74 6f 20 73 71 6c 69 74 65 33 56 64 62 65 4b   to sqlite3VdbeK
13b70 65 79 43 6f 6d 70 61 72 65 20 61 6e 64 20 69 73  eyCompare and is
13b80 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c   used to control
13b90 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73   the.** comparis
13ba0 6f 6e 20 6f 66 20 74 68 65 20 74 77 6f 20 69 6e  on of the two in
13bb0 64 65 78 20 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a 20  dex keys..**.** 
13bc0 4e 6f 74 65 20 74 68 61 74 20 61 53 6f 72 74 4f  Note that aSortO
13bd0 72 64 65 72 5b 5d 20 61 6e 64 20 61 43 6f 6c 6c  rder[] and aColl
13be0 5b 5d 20 68 61 76 65 20 6e 46 69 65 6c 64 2b 31  [] have nField+1
13bf0 20 73 6c 6f 74 73 2e 20 20 54 68 65 72 65 0a 2a   slots.  There.*
13c00 2a 20 61 72 65 20 6e 46 69 65 6c 64 20 73 6c 6f  * are nField slo
13c10 74 73 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d  ts for the colum
13c20 6e 73 20 6f 66 20 61 6e 20 69 6e 64 65 78 20 74  ns of an index t
13c30 68 65 6e 20 6f 6e 65 20 65 78 74 72 61 20 73 6c  hen one extra sl
13c40 6f 74 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 6f  ot.** for the ro
13c50 77 69 64 20 61 74 20 74 68 65 20 65 6e 64 2e 0a  wid at the end..
13c60 2a 2f 0a 73 74 72 75 63 74 20 4b 65 79 49 6e 66  */.struct KeyInf
13c70 6f 20 7b 0a 20 20 75 33 32 20 6e 52 65 66 3b 20  o {.  u32 nRef; 
13c80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
13c90 62 65 72 20 6f 66 20 72 65 66 65 72 65 6e 63 65  ber of reference
13ca0 73 20 74 6f 20 74 68 69 73 20 4b 65 79 49 6e 66  s to this KeyInf
13cb0 6f 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 75 38  o object */.  u8
13cc0 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20   enc;           
13cd0 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69    /* Text encodi
13ce0 6e 67 20 2d 20 6f 6e 65 20 6f 66 20 74 68 65 20  ng - one of the 
13cf0 53 51 4c 49 54 45 5f 55 54 46 2a 20 76 61 6c 75  SQLITE_UTF* valu
13d00 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65  es */.  u16 nFie
13d10 6c 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ld;         /* N
13d20 75 6d 62 65 72 20 6f 66 20 6b 65 79 20 63 6f 6c  umber of key col
13d30 75 6d 6e 73 20 69 6e 20 74 68 65 20 69 6e 64 65  umns in the inde
13d40 78 20 2a 2f 0a 20 20 75 31 36 20 6e 58 46 69 65  x */.  u16 nXFie
13d50 6c 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  ld;        /* Nu
13d60 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
13d70 62 65 79 6f 6e 64 20 74 68 65 20 6b 65 79 20 63  beyond the key c
13d80 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 73 71 6c 69  olumns */.  sqli
13d90 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
13da0 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  /* The database 
13db0 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20  connection */.  
13dc0 75 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20  u8 *aSortOrder; 
13dd0 20 20 20 20 2f 2a 20 53 6f 72 74 20 6f 72 64 65      /* Sort orde
13de0 72 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  r for each colum
13df0 6e 2e 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20  n. */.  CollSeq 
13e00 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20 43  *aColl[1];  /* C
13e10 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
13e20 65 20 66 6f 72 20 65 61 63 68 20 74 65 72 6d 20  e for each term 
13e30 6f 66 20 74 68 65 20 6b 65 79 20 2a 2f 0a 7d 3b  of the key */.};
13e40 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6f 62 6a  ../*.** This obj
13e50 65 63 74 20 68 6f 6c 64 73 20 61 20 72 65 63 6f  ect holds a reco
13e60 72 64 20 77 68 69 63 68 20 68 61 73 20 62 65 65  rd which has bee
13e70 6e 20 70 61 72 73 65 64 20 6f 75 74 20 69 6e 74  n parsed out int
13e80 6f 20 69 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20  o individual.** 
13e90 66 69 65 6c 64 73 2c 20 66 6f 72 20 74 68 65 20  fields, for the 
13ea0 70 75 72 70 6f 73 65 73 20 6f 66 20 64 6f 69 6e  purposes of doin
13eb0 67 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a  g a comparison..
13ec0 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64 20 69  **.** A record i
13ed0 73 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61 74  s an object that
13ee0 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72   contains one or
13ef0 20 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f 66 20   more fields of 
13f00 64 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72 64 73  data..** Records
13f10 20 61 72 65 20 75 73 65 64 20 74 6f 20 73 74 6f   are used to sto
13f20 72 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  re the content o
13f30 66 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61 6e  f a table row an
13f40 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 68  d to store.** th
13f50 65 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e 64 65  e key of an inde
13f60 78 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63 6f 64  x.  A blob encod
13f70 69 6e 67 20 6f 66 20 61 20 72 65 63 6f 72 64 20  ing of a record 
13f80 69 73 20 63 72 65 61 74 65 64 20 62 79 0a 2a 2a  is created by.**
13f90 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f   the OP_MakeReco
13fa0 72 64 20 6f 70 63 6f 64 65 20 6f 66 20 74 68 65  rd opcode of the
13fb0 20 56 44 42 45 20 61 6e 64 20 69 73 20 64 69 73   VDBE and is dis
13fc0 61 73 73 65 6d 62 6c 65 64 20 62 79 20 74 68 65  assembled by the
13fd0 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70  .** OP_Column op
13fe0 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 69  code..**.** An i
13ff0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
14000 6f 62 6a 65 63 74 20 73 65 72 76 65 73 20 61 73  object serves as
14010 20 61 20 22 6b 65 79 22 20 66 6f 72 20 64 6f 69   a "key" for doi
14020 6e 67 20 61 20 73 65 61 72 63 68 20 6f 6e 0a 2a  ng a search on.*
14030 2a 20 61 6e 20 69 6e 64 65 78 20 62 2b 74 72 65  * an index b+tre
14040 65 2e 20 54 68 65 20 67 6f 61 6c 20 6f 66 20 74  e. The goal of t
14050 68 65 20 73 65 61 72 63 68 20 69 73 20 74 6f 20  he search is to 
14060 66 69 6e 64 20 74 68 65 20 65 6e 74 72 79 20 74  find the entry t
14070 68 61 74 0a 2a 2a 20 69 73 20 63 6c 6f 73 65 64  hat.** is closed
14080 20 74 6f 20 74 68 65 20 6b 65 79 20 64 65 73 63   to the key desc
14090 72 69 62 65 64 20 62 79 20 74 68 69 73 20 6f 62  ribed by this ob
140a0 6a 65 63 74 2e 20 20 54 68 69 73 20 6f 62 6a 65  ject.  This obje
140b0 63 74 20 6d 69 67 68 74 20 68 6f 6c 64 0a 2a 2a  ct might hold.**
140c0 20 6a 75 73 74 20 61 20 70 72 65 66 69 78 20 6f   just a prefix o
140d0 66 20 74 68 65 20 6b 65 79 2e 20 20 54 68 65 20  f the key.  The 
140e0 6e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73  number of fields
140f0 20 69 73 20 67 69 76 65 6e 20 62 79 0a 2a 2a 20   is given by.** 
14100 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64  pKeyInfo->nField
14110 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 31 20 61  ..**.** The r1 a
14120 6e 64 20 72 32 20 66 69 65 6c 64 73 20 61 72 65  nd r2 fields are
14130 20 74 68 65 20 76 61 6c 75 65 73 20 74 6f 20 72   the values to r
14140 65 74 75 72 6e 20 69 66 20 74 68 69 73 20 6b 65  eturn if this ke
14150 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a  y is less than.*
14160 2a 20 6f 72 20 67 72 65 61 74 65 72 20 74 68 61  * or greater tha
14170 6e 20 61 20 6b 65 79 20 69 6e 20 74 68 65 20 62  n a key in the b
14180 74 72 65 65 2c 20 72 65 73 70 65 63 74 69 76 65  tree, respective
14190 6c 79 2e 20 20 54 68 65 73 65 20 61 72 65 20 6e  ly.  These are n
141a0 6f 72 6d 61 6c 6c 79 0a 2a 2a 20 2d 31 20 61 6e  ormally.** -1 an
141b0 64 20 2b 31 20 72 65 73 70 65 63 74 69 76 65 6c  d +1 respectivel
141c0 79 2c 20 62 75 74 20 6d 69 67 68 74 20 62 65 20  y, but might be 
141d0 69 6e 76 65 72 74 65 64 20 74 6f 20 2b 31 20 61  inverted to +1 a
141e0 6e 64 20 2d 31 20 69 66 20 74 68 65 20 62 2d 74  nd -1 if the b-t
141f0 72 65 65 0a 2a 2a 20 69 73 20 69 6e 20 44 45 53  ree.** is in DES
14200 43 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 54  C order..**.** T
14210 68 65 20 6b 65 79 20 63 6f 6d 70 61 72 69 73 6f  he key compariso
14220 6e 20 66 75 6e 63 74 69 6f 6e 73 20 61 63 74 75  n functions actu
14230 61 6c 6c 79 20 72 65 74 75 72 6e 20 64 65 66 61  ally return defa
14240 75 6c 74 5f 72 63 20 77 68 65 6e 20 74 68 65 79  ult_rc when they
14250 20 66 69 6e 64 0a 2a 2a 20 61 6e 20 65 71 75 61   find.** an equa
14260 6c 73 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20  ls comparison.  
14270 64 65 66 61 75 6c 74 5f 72 63 20 63 61 6e 20 62  default_rc can b
14280 65 20 2d 31 2c 20 30 2c 20 6f 72 20 2b 31 2e 20  e -1, 0, or +1. 
14290 20 49 66 20 74 68 65 72 65 20 61 72 65 0a 2a 2a   If there are.**
142a0 20 6d 75 6c 74 69 70 6c 65 20 65 6e 74 72 69 65   multiple entrie
142b0 73 20 69 6e 20 74 68 65 20 62 2d 74 72 65 65 20  s in the b-tree 
142c0 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 6b 65  with the same ke
142d0 79 20 28 77 68 65 6e 20 6f 6e 6c 79 20 6c 6f 6f  y (when only loo
142e0 6b 69 6e 67 0a 2a 2a 20 61 74 20 74 68 65 20 66  king.** at the f
142f0 69 72 73 74 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e  irst pKeyInfo->n
14300 46 69 65 6c 64 73 2c 29 20 74 68 65 6e 20 64 65  Fields,) then de
14310 66 61 75 6c 74 5f 72 63 20 63 61 6e 20 62 65 20  fault_rc can be 
14320 73 65 74 20 74 6f 20 2d 31 20 74 6f 0a 2a 2a 20  set to -1 to.** 
14330 63 61 75 73 65 20 74 68 65 20 73 65 61 72 63 68  cause the search
14340 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61 73   to find the las
14350 74 20 6d 61 74 63 68 2c 20 6f 72 20 2b 31 20 74  t match, or +1 t
14360 6f 20 63 61 75 73 65 20 74 68 65 20 73 65 61 72  o cause the sear
14370 63 68 20 74 6f 0a 2a 2a 20 66 69 6e 64 20 74 68  ch to.** find th
14380 65 20 66 69 72 73 74 20 6d 61 74 63 68 2e 0a 2a  e first match..*
14390 2a 0a 2a 2a 20 54 68 65 20 6b 65 79 20 63 6f 6d  *.** The key com
143a0 70 61 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e  parison function
143b0 73 20 77 69 6c 6c 20 73 65 74 20 65 71 53 65 65  s will set eqSee
143c0 6e 20 74 6f 20 74 72 75 65 20 69 66 20 74 68 65  n to true if the
143d0 79 20 65 76 65 72 0a 2a 2a 20 67 65 74 20 61 6e  y ever.** get an
143e0 64 20 65 71 75 61 6c 20 72 65 73 75 6c 74 73 20  d equal results 
143f0 77 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 74  when comparing t
14400 68 69 73 20 73 74 72 75 63 74 75 72 65 20 74 6f  his structure to
14410 20 61 20 62 2d 74 72 65 65 20 72 65 63 6f 72 64   a b-tree record
14420 2e 0a 2a 2a 20 57 68 65 6e 20 64 65 66 61 75 6c  ..** When defaul
14430 74 5f 72 63 21 3d 30 2c 20 74 68 65 20 73 65 61  t_rc!=0, the sea
14440 72 63 68 20 6d 69 67 68 74 20 65 6e 64 20 75 70  rch might end up
14450 20 6f 6e 20 74 68 65 20 72 65 63 6f 72 64 20 69   on the record i
14460 6d 6d 65 64 69 61 74 65 6c 79 0a 2a 2a 20 62 65  mmediately.** be
14470 66 6f 72 65 20 74 68 65 20 66 69 72 73 74 20 6d  fore the first m
14480 61 74 63 68 20 6f 72 20 69 6d 6d 65 64 69 61 74  atch or immediat
14490 65 6c 79 20 61 66 74 65 72 20 74 68 65 20 6c 61  ely after the la
144a0 73 74 20 6d 61 74 63 68 2e 20 20 54 68 65 0a 2a  st match.  The.*
144b0 2a 20 65 71 53 65 65 6e 20 66 69 65 6c 64 20 77  * eqSeen field w
144c0 69 6c 6c 20 69 6e 64 69 63 61 74 65 20 77 68 65  ill indicate whe
144d0 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20 65  ther or not an e
144e0 78 61 63 74 20 6d 61 74 63 68 20 65 78 69 73 74  xact match exist
144f0 73 20 69 6e 20 74 68 65 0a 2a 2a 20 62 2d 74 72  s in the.** b-tr
14500 65 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e  ee..*/.struct Un
14510 70 61 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20  packedRecord {. 
14520 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e   KeyInfo *pKeyIn
14530 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f  fo;  /* Collatio
14540 6e 20 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72  n and sort-order
14550 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a   information */.
14560 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20    Mem *aMem;    
14570 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 73 20        /* Values 
14580 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b  */.  u16 nField;
14590 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
145a0 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e  er of entries in
145b0 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69 38   apMem[] */.  i8
145c0 20 64 65 66 61 75 6c 74 5f 72 63 3b 20 20 20 20   default_rc;    
145d0 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20    /* Comparison 
145e0 72 65 73 75 6c 74 20 69 66 20 6b 65 79 73 20 61  result if keys a
145f0 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20 75 38  re equal */.  u8
14600 20 65 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20   errCode;       
14610 20 20 2f 2a 20 45 72 72 6f 72 20 64 65 74 65 63    /* Error detec
14620 74 65 64 20 62 79 20 78 52 65 63 6f 72 64 43 6f  ted by xRecordCo
14630 6d 70 61 72 65 20 28 43 4f 52 52 55 50 54 20 6f  mpare (CORRUPT o
14640 72 20 4e 4f 4d 45 4d 29 20 2a 2f 0a 20 20 69 38  r NOMEM) */.  i8
14650 20 72 31 3b 20 20 20 20 20 20 20 20 20 20 20 20   r1;            
14660 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65    /* Value to re
14670 74 75 72 6e 20 69 66 20 28 6c 68 73 20 3e 20 72  turn if (lhs > r
14680 68 73 29 20 2a 2f 0a 20 20 69 38 20 72 32 3b 20  hs) */.  i8 r2; 
14690 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
146a0 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20  Value to return 
146b0 69 66 20 28 72 68 73 20 3c 20 6c 68 73 29 20 2a  if (rhs < lhs) *
146c0 2f 0a 20 20 75 38 20 65 71 53 65 65 6e 3b 20 20  /.  u8 eqSeen;  
146d0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
146e0 69 66 20 61 6e 20 65 71 75 61 6c 69 74 79 20 63  if an equality c
146f0 6f 6d 70 61 72 69 73 6f 6e 20 68 61 73 20 62 65  omparison has be
14700 65 6e 20 73 65 65 6e 20 2a 2f 0a 7d 3b 0a 0a 0a  en seen */.};...
14710 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 69  /*.** Each SQL i
14720 6e 64 65 78 20 69 73 20 72 65 70 72 65 73 65 6e  ndex is represen
14730 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79  ted in memory by
14740 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20   an.** instance 
14750 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
14760 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a   structure..**.*
14770 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66  * The columns of
14780 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
14790 61 72 65 20 74 6f 20 62 65 20 69 6e 64 65 78 65  are to be indexe
147a0 64 20 61 72 65 20 64 65 73 63 72 69 62 65 64 0a  d are described.
147b0 2a 2a 20 62 79 20 74 68 65 20 61 69 43 6f 6c 75  ** by the aiColu
147c0 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20 74 68  mn[] field of th
147d0 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 46  is structure.  F
147e0 6f 72 20 65 78 61 6d 70 6c 65 2c 20 73 75 70 70  or example, supp
147f0 6f 73 65 0a 2a 2a 20 77 65 20 68 61 76 65 20 74  ose.** we have t
14800 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62  he following tab
14810 6c 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a 2a 2a  le and index:.**
14820 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 54  .**     CREATE T
14830 41 42 4c 45 20 45 78 31 28 63 31 20 69 6e 74 2c  ABLE Ex1(c1 int,
14840 20 63 32 20 69 6e 74 2c 20 63 33 20 74 65 78 74   c2 int, c3 text
14850 29 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45  );.**     CREATE
14860 20 49 4e 44 45 58 20 45 78 32 20 4f 4e 20 45 78   INDEX Ex2 ON Ex
14870 31 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a 20  1(c3,c1);.**.** 
14880 49 6e 20 74 68 65 20 54 61 62 6c 65 20 73 74 72  In the Table str
14890 75 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e  ucture describin
148a0 67 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20 62  g Ex1, nCol==3 b
148b0 65 63 61 75 73 65 20 74 68 65 72 65 20 61 72 65  ecause there are
148c0 0a 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75 6d 6e  .** three column
148d0 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20  s in the table. 
148e0 20 49 6e 20 74 68 65 20 49 6e 64 65 78 20 73 74   In the Index st
148f0 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62 69  ructure describi
14900 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c 75  ng.** Ex2, nColu
14910 6d 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20 6f 66  mn==2 since 2 of
14920 20 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73 20 6f   the 3 columns o
14930 66 20 45 78 31 20 61 72 65 20 69 6e 64 65 78 65  f Ex1 are indexe
14940 64 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20  d..** The value 
14950 6f 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73 20 7b  of aiColumn is {
14960 32 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75 6d 6e  2, 0}.  aiColumn
14970 5b 30 5d 3d 3d 32 20 62 65 63 61 75 73 65 20 74  [0]==2 because t
14980 68 65 0a 2a 2a 20 66 69 72 73 74 20 63 6f 6c 75  he.** first colu
14990 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64  mn to be indexed
149a0 20 28 63 33 29 20 68 61 73 20 61 6e 20 69 6e 64   (c3) has an ind
149b0 65 78 20 6f 66 20 32 20 69 6e 20 45 78 31 2e 61  ex of 2 in Ex1.a
149c0 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73 65  Col[]..** The se
149d0 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 62  cond column to b
149e0 65 20 69 6e 64 65 78 65 64 20 28 63 31 29 20 68  e indexed (c1) h
149f0 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 30  as an index of 0
14a00 20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b   in.** Ex1.aCol[
14a10 5d 2c 20 68 65 6e 63 65 20 45 78 32 2e 61 69 43  ], hence Ex2.aiC
14a20 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a  olumn[1]==0..**.
14a30 2a 2a 20 54 68 65 20 49 6e 64 65 78 2e 6f 6e 45  ** The Index.onE
14a40 72 72 6f 72 20 66 69 65 6c 64 20 64 65 74 65 72  rror field deter
14a50 6d 69 6e 65 73 20 77 68 65 74 68 65 72 20 6f 72  mines whether or
14a60 20 6e 6f 74 20 74 68 65 20 69 6e 64 65 78 65 64   not the indexed
14a70 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74   columns.** must
14a80 20 62 65 20 75 6e 69 71 75 65 20 61 6e 64 20 77   be unique and w
14a90 68 61 74 20 74 6f 20 64 6f 20 69 66 20 74 68 65  hat to do if the
14aa0 79 20 61 72 65 20 6e 6f 74 2e 20 20 57 68 65 6e  y are not.  When
14ab0 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f   Index.onError=O
14ac0 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65  E_None,.** it me
14ad0 61 6e 73 20 74 68 69 73 20 69 73 20 6e 6f 74 20  ans this is not 
14ae0 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 2e 20  a unique index. 
14af0 20 4f 74 68 65 72 77 69 73 65 20 69 74 20 69 73   Otherwise it is
14b00 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 0a   a unique index.
14b10 2a 2a 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65  ** and the value
14b20 20 6f 66 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f   of Index.onErro
14b30 72 20 69 6e 64 69 63 61 74 65 20 74 68 65 20 77  r indicate the w
14b40 68 69 63 68 20 63 6f 6e 66 6c 69 63 74 20 72 65  hich conflict re
14b50 73 6f 6c 75 74 69 6f 6e 0a 2a 2a 20 61 6c 67 6f  solution.** algo
14b60 72 69 74 68 6d 20 74 6f 20 65 6d 70 6c 6f 79 20  rithm to employ 
14b70 77 68 65 6e 65 76 65 72 20 61 6e 20 61 74 74 65  whenever an atte
14b80 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20 69  mpt is made to i
14b90 6e 73 65 72 74 20 61 20 6e 6f 6e 2d 75 6e 69 71  nsert a non-uniq
14ba0 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a  ue.** element..*
14bb0 2a 0a 2a 2a 20 57 68 69 6c 65 20 70 61 72 73 69  *.** While parsi
14bc0 6e 67 20 61 20 43 52 45 41 54 45 20 54 41 42 4c  ng a CREATE TABL
14bd0 45 20 6f 72 20 43 52 45 41 54 45 20 49 4e 44 45  E or CREATE INDE
14be0 58 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 20 6f  X statement in o
14bf0 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65 6e 65 72  rder to.** gener
14c00 61 74 65 20 56 44 42 45 20 63 6f 64 65 20 28 61  ate VDBE code (a
14c10 73 20 6f 70 70 6f 73 65 64 20 74 6f 20 70 61 72  s opposed to par
14c20 73 69 6e 67 20 6f 6e 65 20 72 65 61 64 20 66 72  sing one read fr
14c30 6f 6d 20 61 6e 20 73 71 6c 69 74 65 5f 6d 61 73  om an sqlite_mas
14c40 74 65 72 0a 2a 2a 20 74 61 62 6c 65 20 61 73 20  ter.** table as 
14c50 70 61 72 74 20 6f 66 20 70 61 72 73 69 6e 67 20  part of parsing 
14c60 61 6e 20 65 78 69 73 74 69 6e 67 20 64 61 74 61  an existing data
14c70 62 61 73 65 20 73 63 68 65 6d 61 29 2c 20 74 72  base schema), tr
14c80 61 6e 73 69 65 6e 74 20 69 6e 73 74 61 6e 63 65  ansient instance
14c90 73 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72  s.** of this str
14ca0 75 63 74 75 72 65 20 6d 61 79 20 62 65 20 63 72  ucture may be cr
14cb0 65 61 74 65 64 2e 20 49 6e 20 74 68 69 73 20 63  eated. In this c
14cc0 61 73 65 20 74 68 65 20 49 6e 64 65 78 2e 74 6e  ase the Index.tn
14cd0 75 6d 20 76 61 72 69 61 62 6c 65 20 69 73 0a 2a  um variable is.*
14ce0 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  * used to store 
14cf0 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 61  the address of a
14d00 20 56 44 42 45 20 69 6e 73 74 72 75 63 74 69 6f   VDBE instructio
14d10 6e 2c 20 6e 6f 74 20 61 20 64 61 74 61 62 61 73  n, not a databas
14d20 65 20 70 61 67 65 0a 2a 2a 20 6e 75 6d 62 65 72  e page.** number
14d30 20 28 69 74 20 63 61 6e 6e 6f 74 20 2d 20 74 68   (it cannot - th
14d40 65 20 64 61 74 61 62 61 73 65 20 70 61 67 65 20  e database page 
14d50 69 73 20 6e 6f 74 20 61 6c 6c 6f 63 61 74 65 64  is not allocated
14d60 20 75 6e 74 69 6c 20 74 68 65 20 56 44 42 45 0a   until the VDBE.
14d70 2a 2a 20 70 72 6f 67 72 61 6d 20 69 73 20 65 78  ** program is ex
14d80 65 63 75 74 65 64 29 2e 20 53 65 65 20 63 6f 6e  ecuted). See con
14d90 76 65 72 74 54 6f 57 69 74 68 6f 75 74 52 6f 77  vertToWithoutRow
14da0 69 64 54 61 62 6c 65 28 29 20 66 6f 72 20 64 65  idTable() for de
14db0 74 61 69 6c 73 2e 0a 2a 2f 0a 73 74 72 75 63 74  tails..*/.struct
14dc0 20 49 6e 64 65 78 20 7b 0a 20 20 63 68 61 72 20   Index {.  char 
14dd0 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
14de0 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
14df0 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69  his index */.  i
14e00 31 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20 20  16 *aiColumn;   
14e10 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68          /* Which
14e20 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65   columns are use
14e30 64 20 62 79 20 74 68 69 73 20 69 6e 64 65 78 2e  d by this index.
14e40 20 20 31 73 74 20 69 73 20 30 20 2a 2f 0a 20 20    1st is 0 */.  
14e50 4c 6f 67 45 73 74 20 2a 61 69 52 6f 77 4c 6f 67  LogEst *aiRowLog
14e60 45 73 74 3b 20 20 20 20 20 2f 2a 20 46 72 6f 6d  Est;     /* From
14e70 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74 2e 20 72   ANALYZE: Est. r
14e80 6f 77 73 20 73 65 6c 65 63 74 65 64 20 62 79 20  ows selected by 
14e90 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  each column */. 
14ea0 20 54 61 62 6c 65 20 2a 70 54 61 62 6c 65 3b 20   Table *pTable; 
14eb0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
14ec0 20 53 51 4c 20 74 61 62 6c 65 20 62 65 69 6e 67   SQL table being
14ed0 20 69 6e 64 65 78 65 64 20 2a 2f 0a 20 20 63 68   indexed */.  ch
14ee0 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20  ar *zColAff;    
14ef0 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67         /* String
14f00 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66   defining the af
14f10 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63  finity of each c
14f20 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78  olumn */.  Index
14f30 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20   *pNext;        
14f40 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20      /* The next 
14f50 69 6e 64 65 78 20 61 73 73 6f 63 69 61 74 65 64  index associated
14f60 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 74   with the same t
14f70 61 62 6c 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61  able */.  Schema
14f80 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20   *pSchema;      
14f90 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e     /* Schema con
14fa0 74 61 69 6e 69 6e 67 20 74 68 69 73 20 69 6e 64  taining this ind
14fb0 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72  ex */.  u8 *aSor
14fc0 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20  tOrder;         
14fd0 20 2f 2a 20 66 6f 72 20 65 61 63 68 20 63 6f 6c   /* for each col
14fe0 75 6d 6e 3a 20 54 72 75 65 3d 3d 44 45 53 43 2c  umn: True==DESC,
14ff0 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a 20   False==ASC */. 
15000 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a 61 7a   const char **az
15010 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 41 72 72  Coll;     /* Arr
15020 61 79 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20  ay of collation 
15030 73 65 71 75 65 6e 63 65 20 6e 61 6d 65 73 20 66  sequence names f
15040 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78  or index */.  Ex
15050 70 72 20 2a 70 50 61 72 74 49 64 78 57 68 65 72  pr *pPartIdxWher
15060 65 3b 20 20 20 20 20 2f 2a 20 57 48 45 52 45 20  e;     /* WHERE 
15070 63 6c 61 75 73 65 20 66 6f 72 20 70 61 72 74 69  clause for parti
15080 61 6c 20 69 6e 64 69 63 65 73 20 2a 2f 0a 20 20  al indices */.  
15090 45 78 70 72 4c 69 73 74 20 2a 61 43 6f 6c 45 78  ExprList *aColEx
150a0 70 72 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75  pr;      /* Colu
150b0 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a  mn expressions *
150c0 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20  /.  int tnum;   
150d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
150e0 44 42 20 50 61 67 65 20 63 6f 6e 74 61 69 6e 69  DB Page containi
150f0 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68 69 73 20  ng root of this 
15100 69 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f 67 45 73  index */.  LogEs
15110 74 20 73 7a 49 64 78 52 6f 77 3b 20 20 20 20 20  t szIdxRow;     
15120 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64      /* Estimated
15130 20 61 76 65 72 61 67 65 20 72 6f 77 20 73 69 7a   average row siz
15140 65 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20  e in bytes */.  
15150 75 31 36 20 6e 4b 65 79 43 6f 6c 3b 20 20 20 20  u16 nKeyCol;    
15160 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
15170 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f  er of columns fo
15180 72 6d 69 6e 67 20 74 68 65 20 6b 65 79 20 2a 2f  rming the key */
15190 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20  .  u16 nColumn; 
151a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
151b0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
151c0 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 69   stored in the i
151d0 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 6f 6e 45  ndex */.  u8 onE
151e0 72 72 6f 72 3b 20 20 20 20 20 20 20 20 20 20 20  rror;           
151f0 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c 20     /* OE_Abort, 
15200 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f 52 65  OE_Ignore, OE_Re
15210 70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e  place, or OE_Non
15220 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  e */.  unsigned 
15230 69 64 78 54 79 70 65 3a 32 3b 20 20 20 20 20 20  idxType:2;      
15240 2f 2a 20 31 3d 3d 55 4e 49 51 55 45 2c 20 32 3d  /* 1==UNIQUE, 2=
15250 3d 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 30 3d  =PRIMARY KEY, 0=
15260 3d 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f  =CREATE INDEX */
15270 0a 20 20 75 6e 73 69 67 6e 65 64 20 62 55 6e 6f  .  unsigned bUno
15280 72 64 65 72 65 64 3a 31 3b 20 20 20 2f 2a 20 55  rdered:1;   /* U
15290 73 65 20 74 68 69 73 20 69 6e 64 65 78 20 66 6f  se this index fo
152a0 72 20 3d 3d 20 6f 72 20 49 4e 20 71 75 65 72 69  r == or IN queri
152b0 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e 73  es only */.  uns
152c0 69 67 6e 65 64 20 75 6e 69 71 4e 6f 74 4e 75 6c  igned uniqNotNul
152d0 6c 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66  l:1;  /* True if
152e0 20 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54 20   UNIQUE and NOT 
152f0 4e 55 4c 4c 20 66 6f 72 20 61 6c 6c 20 63 6f 6c  NULL for all col
15300 75 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  umns */.  unsign
15310 65 64 20 69 73 52 65 73 69 7a 65 64 3a 31 3b 20  ed isResized:1; 
15320 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65     /* True if re
15330 73 69 7a 65 49 6e 64 65 78 4f 62 6a 65 63 74 28  sizeIndexObject(
15340 29 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65  ) has been calle
15350 64 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  d */.  unsigned 
15360 69 73 43 6f 76 65 72 69 6e 67 3a 31 3b 20 20 20  isCovering:1;   
15370 2f 2a 20 54 72 75 65 20 69 66 20 74 68 69 73 20  /* True if this 
15380 69 73 20 61 20 63 6f 76 65 72 69 6e 67 20 69 6e  is a covering in
15390 64 65 78 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  dex */.  unsigne
153a0 64 20 6e 6f 53 6b 69 70 53 63 61 6e 3a 31 3b 20  d noSkipScan:1; 
153b0 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 74 72 79 20    /* Do not try 
153c0 74 6f 20 75 73 65 20 73 6b 69 70 2d 73 63 61 6e  to use skip-scan
153d0 20 69 66 20 74 72 75 65 20 2a 2f 0a 23 69 66 64   if true */.#ifd
153e0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
153f0 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a  _STAT3_OR_STAT4.
15400 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 3b 20 20    int nSample;  
15410 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
15420 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73  mber of elements
15430 20 69 6e 20 61 53 61 6d 70 6c 65 5b 5d 20 2a 2f   in aSample[] */
15440 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 43 6f  .  int nSampleCo
15450 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53  l;          /* S
15460 69 7a 65 20 6f 66 20 49 6e 64 65 78 53 61 6d 70  ize of IndexSamp
15470 6c 65 2e 61 6e 45 71 5b 5d 20 61 6e 64 20 73 6f  le.anEq[] and so
15480 20 6f 6e 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74   on */.  tRowcnt
15490 20 2a 61 41 76 67 45 71 3b 20 20 20 20 20 20 20   *aAvgEq;       
154a0 20 20 2f 2a 20 41 76 65 72 61 67 65 20 6e 45 71    /* Average nEq
154b0 20 76 61 6c 75 65 73 20 66 6f 72 20 6b 65 79 73   values for keys
154c0 20 6e 6f 74 20 69 6e 20 61 53 61 6d 70 6c 65 20   not in aSample 
154d0 2a 2f 0a 20 20 49 6e 64 65 78 53 61 6d 70 6c 65  */.  IndexSample
154e0 20 2a 61 53 61 6d 70 6c 65 3b 20 20 20 20 2f 2a   *aSample;    /*
154f0 20 53 61 6d 70 6c 65 73 20 6f 66 20 74 68 65 20   Samples of the 
15500 6c 65 66 74 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f  left-most key */
15510 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 69 52 6f  .  tRowcnt *aiRo
15520 77 45 73 74 3b 20 20 20 20 20 20 20 2f 2a 20 4e  wEst;       /* N
15530 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20 73  on-logarithmic s
15540 74 61 74 31 20 64 61 74 61 20 66 6f 72 20 74 68  tat1 data for th
15550 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 74 52  is index */.  tR
15560 6f 77 63 6e 74 20 6e 52 6f 77 45 73 74 30 3b 20  owcnt nRowEst0; 
15570 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f         /* Non-lo
15580 67 61 72 69 74 68 6d 69 63 20 6e 75 6d 62 65 72  garithmic number
15590 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20   of rows in the 
155a0 69 6e 64 65 78 20 2a 2f 0a 23 65 6e 64 69 66 0a  index */.#endif.
155b0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  };../*.** Allowe
155c0 64 20 76 61 6c 75 65 73 20 66 6f 72 20 49 6e 64  d values for Ind
155d0 65 78 2e 69 64 78 54 79 70 65 0a 2a 2f 0a 23 64  ex.idxType.*/.#d
155e0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58  efine SQLITE_IDX
155f0 54 59 50 45 5f 41 50 50 44 45 46 20 20 20 20 20  TYPE_APPDEF     
15600 20 30 20 20 20 2f 2a 20 43 72 65 61 74 65 64 20   0   /* Created 
15610 75 73 69 6e 67 20 43 52 45 41 54 45 20 49 4e 44  using CREATE IND
15620 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  EX */.#define SQ
15630 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 55 4e 49  LITE_IDXTYPE_UNI
15640 51 55 45 20 20 20 20 20 20 31 20 20 20 2f 2a 20  QUE      1   /* 
15650 49 6d 70 6c 65 6d 65 6e 74 73 20 61 20 55 4e 49  Implements a UNI
15660 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a  QUE constraint *
15670 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
15680 5f 49 44 58 54 59 50 45 5f 50 52 49 4d 41 52 59  _IDXTYPE_PRIMARY
15690 4b 45 59 20 20 32 20 20 20 2f 2a 20 49 73 20 74  KEY  2   /* Is t
156a0 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 66  he PRIMARY KEY f
156b0 6f 72 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a  or the table */.
156c0 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20  ./* Return true 
156d0 69 66 20 69 6e 64 65 78 20 58 20 69 73 20 61 20  if index X is a 
156e0 50 52 49 4d 41 52 59 20 4b 45 59 20 69 6e 64 65  PRIMARY KEY inde
156f0 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50  x */.#define IsP
15700 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 58  rimaryKeyIndex(X
15710 29 20 20 28 28 58 29 2d 3e 69 64 78 54 79 70 65  )  ((X)->idxType
15720 3d 3d 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45  ==SQLITE_IDXTYPE
15730 5f 50 52 49 4d 41 52 59 4b 45 59 29 0a 0a 2f 2a  _PRIMARYKEY)../*
15740 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20   Return true if 
15750 69 6e 64 65 78 20 58 20 69 73 20 61 20 55 4e 49  index X is a UNI
15760 51 55 45 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65  QUE index */.#de
15770 66 69 6e 65 20 49 73 55 6e 69 71 75 65 49 6e 64  fine IsUniqueInd
15780 65 78 28 58 29 20 20 20 20 20 20 28 28 58 29 2d  ex(X)      ((X)-
15790 3e 6f 6e 45 72 72 6f 72 21 3d 4f 45 5f 4e 6f 6e  >onError!=OE_Non
157a0 65 29 0a 0a 2f 2a 20 54 68 65 20 49 6e 64 65 78  e)../* The Index
157b0 2e 61 69 43 6f 6c 75 6d 6e 5b 5d 20 76 61 6c 75  .aiColumn[] valu
157c0 65 73 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20  es are normally 
157d0 70 6f 73 69 74 69 76 65 20 69 6e 74 65 67 65 72  positive integer
157e0 2e 20 20 42 75 74 0a 2a 2a 20 74 68 65 72 65 20  .  But.** there 
157f0 61 72 65 20 73 6f 6d 65 20 6e 65 67 61 74 69 76  are some negativ
15800 65 20 76 61 6c 75 65 73 20 74 68 61 74 20 68 61  e values that ha
15810 76 65 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69  ve special meani
15820 6e 67 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 58  ng:.*/.#define X
15830 4e 5f 52 4f 57 49 44 20 20 20 20 20 28 2d 31 29  N_ROWID     (-1)
15840 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 65 64 20       /* Indexed 
15850 63 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20 72 6f  column is the ro
15860 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 58  wid */.#define X
15870 4e 5f 45 58 50 52 20 20 20 20 20 20 28 2d 32 29  N_EXPR      (-2)
15880 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 65 64 20       /* Indexed 
15890 63 6f 6c 75 6d 6e 20 69 73 20 61 6e 20 65 78 70  column is an exp
158a0 72 65 73 73 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a  ression */../*.*
158b0 2a 20 45 61 63 68 20 73 61 6d 70 6c 65 20 73 74  * Each sample st
158c0 6f 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69  ored in the sqli
158d0 74 65 5f 73 74 61 74 33 20 74 61 62 6c 65 20 69  te_stat3 table i
158e0 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e  s represented in
158f0 20 6d 65 6d 6f 72 79 0a 2a 2a 20 75 73 69 6e 67   memory.** using
15900 20 61 20 73 74 72 75 63 74 75 72 65 20 6f 66 20   a structure of 
15910 74 68 69 73 20 74 79 70 65 2e 20 20 53 65 65 20  this type.  See 
15920 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 74  documentation at
15930 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65 0a   the top of the.
15940 2a 2a 20 61 6e 61 6c 79 7a 65 2e 63 20 73 6f 75  ** analyze.c sou
15950 72 63 65 20 66 69 6c 65 20 66 6f 72 20 61 64 64  rce file for add
15960 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
15970 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49  ion..*/.struct I
15980 6e 64 65 78 53 61 6d 70 6c 65 20 7b 0a 20 20 76  ndexSample {.  v
15990 6f 69 64 20 2a 70 3b 20 20 20 20 20 20 20 20 20  oid *p;         
159a0 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 73   /* Pointer to s
159b0 61 6d 70 6c 65 64 20 72 65 63 6f 72 64 20 2a 2f  ampled record */
159c0 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20  .  int n;       
159d0 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
159e0 72 65 63 6f 72 64 20 69 6e 20 62 79 74 65 73 20  record in bytes 
159f0 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e  */.  tRowcnt *an
15a00 45 71 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e  Eq;    /* Est. n
15a10 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 77 68  umber of rows wh
15a20 65 72 65 20 74 68 65 20 6b 65 79 20 65 71 75 61  ere the key equa
15a30 6c 73 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a  ls this sample *
15a40 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 4c  /.  tRowcnt *anL
15a50 74 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75  t;    /* Est. nu
15a60 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65  mber of rows whe
15a70 72 65 20 6b 65 79 20 69 73 20 6c 65 73 73 20 74  re key is less t
15a80 68 61 6e 20 74 68 69 73 20 73 61 6d 70 6c 65 20  han this sample 
15a90 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e  */.  tRowcnt *an
15aa0 44 4c 74 3b 20 20 20 2f 2a 20 45 73 74 2e 20 6e  DLt;   /* Est. n
15ab0 75 6d 62 65 72 20 6f 66 20 64 69 73 74 69 6e 63  umber of distinc
15ac0 74 20 6b 65 79 73 20 6c 65 73 73 20 74 68 61 6e  t keys less than
15ad0 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a   this sample */.
15ae0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 74  };../*.** Each t
15af0 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f 75 74 20  oken coming out 
15b00 6f 66 20 74 68 65 20 6c 65 78 65 72 20 69 73 20  of the lexer is 
15b10 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a  an instance of.*
15b20 2a 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  * this structure
15b30 2e 20 20 54 6f 6b 65 6e 73 20 61 72 65 20 61 6c  .  Tokens are al
15b40 73 6f 20 75 73 65 64 20 61 73 20 70 61 72 74 20  so used as part 
15b50 6f 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  of an expression
15b60 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 69 66 20  ..**.** Note if 
15b70 54 6f 6b 65 6e 2e 7a 3d 3d 30 20 74 68 65 6e 20  Token.z==0 then 
15b80 54 6f 6b 65 6e 2e 64 79 6e 20 61 6e 64 20 54 6f  Token.dyn and To
15b90 6b 65 6e 2e 6e 20 61 72 65 20 75 6e 64 65 66 69  ken.n are undefi
15ba0 6e 65 64 20 61 6e 64 0a 2a 2a 20 6d 61 79 20 63  ned and.** may c
15bb0 6f 6e 74 61 69 6e 20 72 61 6e 64 6f 6d 20 76 61  ontain random va
15bc0 6c 75 65 73 2e 20 20 44 6f 20 6e 6f 74 20 6d 61  lues.  Do not ma
15bd0 6b 65 20 61 6e 79 20 61 73 73 75 6d 70 74 69 6f  ke any assumptio
15be0 6e 73 20 61 62 6f 75 74 20 54 6f 6b 65 6e 2e 64  ns about Token.d
15bf0 79 6e 0a 2a 2a 20 61 6e 64 20 54 6f 6b 65 6e 2e  yn.** and Token.
15c00 6e 20 77 68 65 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d  n when Token.z==
15c10 30 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 6f 6b  0..*/.struct Tok
15c20 65 6e 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61  en {.  const cha
15c30 72 20 2a 7a 3b 20 20 20 20 20 2f 2a 20 54 65 78  r *z;     /* Tex
15c40 74 20 6f 66 20 74 68 65 20 74 6f 6b 65 6e 2e 20  t of the token. 
15c50 20 4e 6f 74 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e   Not NULL-termin
15c60 61 74 65 64 21 20 2a 2f 0a 20 20 75 6e 73 69 67  ated! */.  unsig
15c70 6e 65 64 20 69 6e 74 20 6e 3b 20 20 20 20 2f 2a  ned int n;    /*
15c80 20 4e 75 6d 62 65 72 20 6f 66 20 63 68 61 72 61   Number of chara
15c90 63 74 65 72 73 20 69 6e 20 74 68 69 73 20 74 6f  cters in this to
15ca0 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ken */.};../*.**
15cb0 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
15cc0 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 63  this structure c
15cd0 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74  ontains informat
15ce0 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20 67 65  ion needed to ge
15cf0 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66  nerate.** code f
15d00 6f 72 20 61 20 53 45 4c 45 43 54 20 74 68 61 74  or a SELECT that
15d10 20 63 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67   contains aggreg
15d20 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a  ate functions..*
15d30 2a 0a 2a 2a 20 49 66 20 45 78 70 72 2e 6f 70 3d  *.** If Expr.op=
15d40 3d 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f  =TK_AGG_COLUMN o
15d50 72 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f  r TK_AGG_FUNCTIO
15d60 4e 20 74 68 65 6e 20 45 78 70 72 2e 70 41 67 67  N then Expr.pAgg
15d70 49 6e 66 6f 20 69 73 20 61 0a 2a 2a 20 70 6f 69  Info is a.** poi
15d80 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72  nter to this str
15d90 75 63 74 75 72 65 2e 20 20 54 68 65 20 45 78 70  ucture.  The Exp
15da0 72 2e 69 43 6f 6c 75 6d 6e 20 66 69 65 6c 64 20  r.iColumn field 
15db0 69 73 20 74 68 65 20 69 6e 64 65 78 20 69 6e 0a  is the index in.
15dc0 2a 2a 20 41 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b  ** AggInfo.aCol[
15dd0 5d 20 6f 72 20 41 67 67 49 6e 66 6f 2e 61 46 75  ] or AggInfo.aFu
15de0 6e 63 5b 5d 20 6f 66 20 69 6e 66 6f 72 6d 61 74  nc[] of informat
15df0 69 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20 67 65  ion needed to ge
15e00 6e 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66  nerate.** code f
15e10 6f 72 20 74 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a  or that node..**
15e20 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 70 47 72 6f  .** AggInfo.pGro
15e30 75 70 42 79 20 61 6e 64 20 41 67 67 49 6e 66 6f  upBy and AggInfo
15e40 2e 61 46 75 6e 63 2e 70 45 78 70 72 20 70 6f 69  .aFunc.pExpr poi
15e50 6e 74 20 74 6f 20 66 69 65 6c 64 73 20 77 69 74  nt to fields wit
15e60 68 69 6e 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69  hin the.** origi
15e70 6e 61 6c 20 53 65 6c 65 63 74 20 73 74 72 75 63  nal Select struc
15e80 74 75 72 65 20 74 68 61 74 20 64 65 73 63 72 69  ture that descri
15e90 62 65 73 20 74 68 65 20 53 45 4c 45 43 54 20 73  bes the SELECT s
15ea0 74 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 73 65  tatement.  These
15eb0 0a 2a 2a 20 66 69 65 6c 64 73 20 64 6f 20 6e 6f  .** fields do no
15ec0 74 20 6e 65 65 64 20 74 6f 20 62 65 20 66 72 65  t need to be fre
15ed0 65 64 20 77 68 65 6e 20 64 65 61 6c 6c 6f 63 61  ed when dealloca
15ee0 74 69 6e 67 20 74 68 65 20 41 67 67 49 6e 66 6f  ting the AggInfo
15ef0 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73   structure..*/.s
15f00 74 72 75 63 74 20 41 67 67 49 6e 66 6f 20 7b 0a  truct AggInfo {.
15f10 20 20 75 38 20 64 69 72 65 63 74 4d 6f 64 65 3b    u8 directMode;
15f20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 69 72            /* Dir
15f30 65 63 74 20 72 65 6e 64 65 72 69 6e 67 20 6d 6f  ect rendering mo
15f40 64 65 20 6d 65 61 6e 73 20 74 61 6b 65 20 64 61  de means take da
15f50 74 61 20 64 69 72 65 63 74 6c 79 0a 20 20 20 20  ta directly.    
15f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f70 20 20 20 20 20 20 2a 2a 20 66 72 6f 6d 20 73 6f        ** from so
15f80 75 72 63 65 20 74 61 62 6c 65 73 20 72 61 74 68  urce tables rath
15f90 65 72 20 74 68 61 6e 20 66 72 6f 6d 20 61 63 63  er than from acc
15fa0 75 6d 75 6c 61 74 6f 72 73 20 2a 2f 0a 20 20 75  umulators */.  u
15fb0 38 20 75 73 65 53 6f 72 74 69 6e 67 49 64 78 3b  8 useSortingIdx;
15fc0 20 20 20 20 20 20 20 2f 2a 20 49 6e 20 64 69 72         /* In dir
15fd0 65 63 74 20 6d 6f 64 65 2c 20 72 65 66 65 72 65  ect mode, refere
15fe0 6e 63 65 20 74 68 65 20 73 6f 72 74 69 6e 67 20  nce the sorting 
15ff0 69 6e 64 65 78 20 72 61 74 68 65 72 0a 20 20 20  index rather.   
16000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16010 20 20 20 20 20 20 20 2a 2a 20 74 68 61 6e 20 74         ** than t
16020 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20  he source table 
16030 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67  */.  int sorting
16040 49 64 78 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Idx;         /* 
16050 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66  Cursor number of
16060 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64   the sorting ind
16070 65 78 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74  ex */.  int sort
16080 69 6e 67 49 64 78 50 54 61 62 3b 20 20 20 20 20  ingIdxPTab;     
16090 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72  /* Cursor number
160a0 20 6f 66 20 70 73 65 75 64 6f 2d 74 61 62 6c 65   of pseudo-table
160b0 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 6f 72 74 69   */.  int nSorti
160c0 6e 67 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a  ngColumn;     /*
160d0 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
160e0 6e 73 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e  ns in the sortin
160f0 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74  g index */.  int
16100 20 6d 6e 52 65 67 2c 20 6d 78 52 65 67 3b 20 20   mnReg, mxReg;  
16110 20 20 20 20 20 2f 2a 20 52 61 6e 67 65 20 6f 66       /* Range of
16120 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c 6f 63   registers alloc
16130 61 74 65 64 20 66 6f 72 20 61 43 6f 6c 20 61 6e  ated for aCol an
16140 64 20 61 46 75 6e 63 20 2a 2f 0a 20 20 45 78 70  d aFunc */.  Exp
16150 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b  rList *pGroupBy;
16160 20 20 20 20 20 2f 2a 20 54 68 65 20 67 72 6f 75       /* The grou
16170 70 20 62 79 20 63 6c 61 75 73 65 20 2a 2f 0a 20  p by clause */. 
16180 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 5f   struct AggInfo_
16190 63 6f 6c 20 7b 20 20 20 20 2f 2a 20 46 6f 72 20  col {    /* For 
161a0 65 61 63 68 20 63 6f 6c 75 6d 6e 20 75 73 65 64  each column used
161b0 20 69 6e 20 73 6f 75 72 63 65 20 74 61 62 6c 65   in source table
161c0 73 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a  s */.    Table *
161d0 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20  pTab;           
161e0 20 20 2f 2a 20 53 6f 75 72 63 65 20 74 61 62 6c    /* Source tabl
161f0 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 54 61  e */.    int iTa
16200 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ble;            
16210 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62    /* Cursor numb
16220 65 72 20 6f 66 20 74 68 65 20 73 6f 75 72 63 65  er of the source
16230 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e   table */.    in
16240 74 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  t iColumn;      
16250 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e         /* Column
16260 20 6e 75 6d 62 65 72 20 77 69 74 68 69 6e 20 74   number within t
16270 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20  he source table 
16280 2a 2f 0a 20 20 20 20 69 6e 74 20 69 53 6f 72 74  */.    int iSort
16290 65 72 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20  erColumn;       
162a0 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  /* Column number
162b0 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20   in the sorting 
162c0 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 69 6e 74  index */.    int
162d0 20 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20   iMem;          
162e0 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20        /* Memory 
162f0 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61 63  location that ac
16300 74 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74 6f  ts as accumulato
16310 72 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70  r */.    Expr *p
16320 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20  Expr;           
16330 20 20 2f 2a 20 54 68 65 20 6f 72 69 67 69 6e 61    /* The origina
16340 6c 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a  l expression */.
16350 20 20 7d 20 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74    } *aCol;.  int
16360 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20   nColumn;       
16370 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
16380 66 20 75 73 65 64 20 65 6e 74 72 69 65 73 20 69  f used entries i
16390 6e 20 61 43 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e  n aCol[] */.  in
163a0 74 20 6e 41 63 63 75 6d 75 6c 61 74 6f 72 3b 20  t nAccumulator; 
163b0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
163c0 6f 66 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20  of columns that 
163d0 73 68 6f 77 20 74 68 72 6f 75 67 68 20 74 6f 20  show through to 
163e0 74 68 65 20 6f 75 74 70 75 74 2e 0a 20 20 20 20  the output..    
163f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16400 20 20 20 20 20 20 2a 2a 20 41 64 64 69 74 69 6f        ** Additio
16410 6e 61 6c 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20  nal columns are 
16420 75 73 65 64 20 6f 6e 6c 79 20 61 73 20 70 61 72  used only as par
16430 61 6d 65 74 65 72 73 20 74 6f 0a 20 20 20 20 20  ameters to.     
16440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16450 20 20 20 20 20 2a 2a 20 61 67 67 72 65 67 61 74       ** aggregat
16460 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20  e functions */. 
16470 20 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 5f   struct AggInfo_
16480 66 75 6e 63 20 7b 20 20 20 2f 2a 20 46 6f 72 20  func {   /* For 
16490 65 61 63 68 20 61 67 67 72 65 67 61 74 65 20 66  each aggregate f
164a0 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 45  unction */.    E
164b0 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20  xpr *pExpr;     
164c0 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65          /* Expre
164d0 73 73 69 6f 6e 20 65 6e 63 6f 64 69 6e 67 20 74  ssion encoding t
164e0 68 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  he function */. 
164f0 20 20 20 46 75 6e 63 44 65 66 20 2a 70 46 75 6e     FuncDef *pFun
16500 63 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  c;          /* T
16510 68 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  he aggregate fun
16520 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61  ction implementa
16530 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20  tion */.    int 
16540 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20  iMem;           
16550 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c       /* Memory l
16560 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74  ocation that act
16570 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72  s as accumulator
16580 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 44 69 73   */.    int iDis
16590 74 69 6e 63 74 3b 20 20 20 20 20 20 20 20 20 20  tinct;          
165a0 20 2f 2a 20 45 70 68 65 6d 65 72 61 6c 20 74 61   /* Ephemeral ta
165b0 62 6c 65 20 75 73 65 64 20 74 6f 20 65 6e 66 6f  ble used to enfo
165c0 72 63 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a  rce DISTINCT */.
165d0 20 20 7d 20 2a 61 46 75 6e 63 3b 0a 20 20 69 6e    } *aFunc;.  in
165e0 74 20 6e 46 75 6e 63 3b 20 20 20 20 20 20 20 20  t nFunc;        
165f0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
16600 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 46  of entries in aF
16610 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  unc[] */.};../*.
16620 2a 2a 20 54 68 65 20 64 61 74 61 74 79 70 65 20  ** The datatype 
16630 79 6e 56 61 72 20 69 73 20 61 20 73 69 67 6e 65  ynVar is a signe
16640 64 20 69 6e 74 65 67 65 72 2c 20 65 69 74 68 65  d integer, eithe
16650 72 20 31 36 2d 62 69 74 20 6f 72 20 33 32 2d 62  r 16-bit or 32-b
16660 69 74 2e 0a 2a 2a 20 55 73 75 61 6c 6c 79 20 69  it..** Usually i
16670 74 20 69 73 20 31 36 2d 62 69 74 73 2e 20 20 42  t is 16-bits.  B
16680 75 74 20 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  ut if SQLITE_MAX
16690 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52  _VARIABLE_NUMBER
166a0 20 69 73 20 67 72 65 61 74 65 72 0a 2a 2a 20 74   is greater.** t
166b0 68 61 6e 20 33 32 37 36 37 20 77 65 20 68 61 76  han 32767 we hav
166c0 65 20 74 6f 20 6d 61 6b 65 20 69 74 20 33 32 2d  e to make it 32-
166d0 62 69 74 2e 20 20 31 36 2d 62 69 74 20 69 73 20  bit.  16-bit is 
166e0 70 72 65 66 65 72 72 65 64 20 62 65 63 61 75 73  preferred becaus
166f0 65 0a 2a 2a 20 69 74 20 75 73 65 73 20 6c 65 73  e.** it uses les
16700 73 20 6d 65 6d 6f 72 79 20 69 6e 20 74 68 65 20  s memory in the 
16710 45 78 70 72 20 6f 62 6a 65 63 74 2c 20 77 68 69  Expr object, whi
16720 63 68 20 69 73 20 61 20 62 69 67 20 6d 65 6d 6f  ch is a big memo
16730 72 79 20 75 73 65 72 0a 2a 2a 20 69 6e 20 73 79  ry user.** in sy
16740 73 74 65 6d 73 20 77 69 74 68 20 6c 6f 74 73 20  stems with lots 
16750 6f 66 20 70 72 65 70 61 72 65 64 20 73 74 61 74  of prepared stat
16760 65 6d 65 6e 74 73 2e 20 20 41 6e 64 20 66 65 77  ements.  And few
16770 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a   applications.**
16780 20 6e 65 65 64 20 6d 6f 72 65 20 74 68 61 6e 20   need more than 
16790 61 62 6f 75 74 20 31 30 20 6f 72 20 32 30 20 76  about 10 or 20 v
167a0 61 72 69 61 62 6c 65 73 2e 20 20 42 75 74 20 73  ariables.  But s
167b0 6f 6d 65 20 65 78 74 72 65 6d 65 20 75 73 65 72  ome extreme user
167c0 73 20 77 61 6e 74 0a 2a 2a 20 74 6f 20 68 61 76  s want.** to hav
167d0 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  e prepared state
167e0 6d 65 6e 74 73 20 77 69 74 68 20 6f 76 65 72 20  ments with over 
167f0 33 32 37 36 37 20 76 61 72 69 61 62 6c 65 73 2c  32767 variables,
16800 20 61 6e 64 20 66 6f 72 20 74 68 65 6d 0a 2a 2a   and for them.**
16810 20 74 68 65 20 6f 70 74 69 6f 6e 20 69 73 20 61   the option is a
16820 76 61 69 6c 61 62 6c 65 20 28 61 74 20 63 6f 6d  vailable (at com
16830 70 69 6c 65 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23  pile-time)..*/.#
16840 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41  if SQLITE_MAX_VA
16850 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33  RIABLE_NUMBER<=3
16860 32 37 36 37 0a 74 79 70 65 64 65 66 20 69 31 36  2767.typedef i16
16870 20 79 6e 56 61 72 3b 0a 23 65 6c 73 65 0a 74 79   ynVar;.#else.ty
16880 70 65 64 65 66 20 69 6e 74 20 79 6e 56 61 72 3b  pedef int ynVar;
16890 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45  .#endif../*.** E
168a0 61 63 68 20 6e 6f 64 65 20 6f 66 20 61 6e 20 65  ach node of an e
168b0 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65  xpression in the
168c0 20 70 61 72 73 65 20 74 72 65 65 20 69 73 20 61   parse tree is a
168d0 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66  n instance.** of
168e0 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
168f0 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 6f 70 20 69  .**.** Expr.op i
16900 73 20 74 68 65 20 6f 70 63 6f 64 65 2e 20 54 68  s the opcode. Th
16910 65 20 69 6e 74 65 67 65 72 20 70 61 72 73 65 72  e integer parser
16920 20 74 6f 6b 65 6e 20 63 6f 64 65 73 20 61 72 65   token codes are
16930 20 72 65 75 73 65 64 0a 2a 2a 20 61 73 20 6f 70   reused.** as op
16940 63 6f 64 65 73 20 68 65 72 65 2e 20 46 6f 72 20  codes here. For 
16950 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 70 61 72  example, the par
16960 73 65 72 20 64 65 66 69 6e 65 73 20 54 4b 5f 47  ser defines TK_G
16970 45 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67  E to be an integ
16980 65 72 0a 2a 2a 20 63 6f 64 65 20 72 65 70 72 65  er.** code repre
16990 73 65 6e 74 69 6e 67 20 74 68 65 20 22 3e 3d 22  senting the ">="
169a0 20 6f 70 65 72 61 74 6f 72 2e 20 54 68 69 73 20   operator. This 
169b0 73 61 6d 65 20 69 6e 74 65 67 65 72 20 63 6f 64  same integer cod
169c0 65 20 69 73 20 72 65 75 73 65 64 0a 2a 2a 20 74  e is reused.** t
169d0 6f 20 72 65 70 72 65 73 65 6e 74 20 74 68 65 20  o represent the 
169e0 67 72 65 61 74 65 72 2d 74 68 61 6e 2d 6f 72 2d  greater-than-or-
169f0 65 71 75 61 6c 2d 74 6f 20 6f 70 65 72 61 74 6f  equal-to operato
16a00 72 20 69 6e 20 74 68 65 20 65 78 70 72 65 73 73  r in the express
16a10 69 6f 6e 0a 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a  ion.** tree..**.
16a20 2a 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73  ** If the expres
16a30 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 6c  sion is an SQL l
16a40 69 74 65 72 61 6c 20 28 54 4b 5f 49 4e 54 45 47  iteral (TK_INTEG
16a50 45 52 2c 20 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b  ER, TK_FLOAT, TK
16a60 5f 42 4c 4f 42 2c 0a 2a 2a 20 6f 72 20 54 4b 5f  _BLOB,.** or TK_
16a70 53 54 52 49 4e 47 29 2c 20 74 68 65 6e 20 45 78  STRING), then Ex
16a80 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e  pr.token contain
16a90 73 20 74 68 65 20 74 65 78 74 20 6f 66 20 74 68  s the text of th
16aa0 65 20 53 51 4c 20 6c 69 74 65 72 61 6c 2e 20 49  e SQL literal. I
16ab0 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65 73 73  f.** the express
16ac0 69 6f 6e 20 69 73 20 61 20 76 61 72 69 61 62 6c  ion is a variabl
16ad0 65 20 28 54 4b 5f 56 41 52 49 41 42 4c 45 29 2c  e (TK_VARIABLE),
16ae0 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e   then Expr.token
16af0 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 0a 2a 2a   contains the.**
16b00 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 2e 20   variable name. 
16b10 46 69 6e 61 6c 6c 79 2c 20 69 66 20 74 68 65 20  Finally, if the 
16b20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
16b30 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 28 54   SQL function (T
16b40 4b 5f 46 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20  K_FUNCTION),.** 
16b50 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20  then Expr.token 
16b60 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6e 61 6d  contains the nam
16b70 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  e of the functio
16b80 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70 52  n..**.** Expr.pR
16b90 69 67 68 74 20 61 6e 64 20 45 78 70 72 2e 70 4c  ight and Expr.pL
16ba0 65 66 74 20 61 72 65 20 74 68 65 20 6c 65 66 74  eft are the left
16bb0 20 61 6e 64 20 72 69 67 68 74 20 73 75 62 65 78   and right subex
16bc0 70 72 65 73 73 69 6f 6e 73 20 6f 66 20 61 0a 2a  pressions of a.*
16bd0 2a 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f  * binary operato
16be0 72 2e 20 45 69 74 68 65 72 20 6f 72 20 62 6f 74  r. Either or bot
16bf0 68 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a  h may be NULL..*
16c00 2a 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 4c 69 73  *.** Expr.x.pLis
16c10 74 20 69 73 20 61 20 6c 69 73 74 20 6f 66 20 61  t is a list of a
16c20 72 67 75 6d 65 6e 74 73 20 69 66 20 74 68 65 20  rguments if the 
16c30 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
16c40 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a   SQL function,.*
16c50 2a 20 61 20 43 41 53 45 20 65 78 70 72 65 73 73  * a CASE express
16c60 69 6f 6e 20 6f 72 20 61 6e 20 49 4e 20 65 78 70  ion or an IN exp
16c70 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66  ression of the f
16c80 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 3c  orm "<lhs> IN (<
16c90 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a  y>, <z>...)"..**
16ca0 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20   Expr.x.pSelect 
16cb0 69 73 20 75 73 65 64 20 69 66 20 74 68 65 20 65  is used if the e
16cc0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73  xpression is a s
16cd0 75 62 2d 73 65 6c 65 63 74 20 6f 72 20 61 6e 20  ub-select or an 
16ce0 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a  expression of.**
16cf0 20 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e   the form "<lhs>
16d00 20 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29   IN (SELECT ...)
16d10 22 2e 20 49 66 20 74 68 65 20 45 50 5f 78 49 73  ". If the EP_xIs
16d20 53 65 6c 65 63 74 20 62 69 74 20 69 73 20 73 65  Select bit is se
16d30 74 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72  t in the.** Expr
16d40 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65  .flags mask, the
16d50 6e 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74  n Expr.x.pSelect
16d60 20 69 73 20 76 61 6c 69 64 2e 20 4f 74 68 65 72   is valid. Other
16d70 77 69 73 65 2c 20 45 78 70 72 2e 78 2e 70 4c 69  wise, Expr.x.pLi
16d80 73 74 20 69 73 0a 2a 2a 20 76 61 6c 69 64 2e 0a  st is.** valid..
16d90 2a 2a 0a 2a 2a 20 41 6e 20 65 78 70 72 65 73 73  **.** An express
16da0 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  ion of the form 
16db0 49 44 20 6f 72 20 49 44 2e 49 44 20 72 65 66 65  ID or ID.ID refe
16dc0 72 73 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 69  rs to a column i
16dd0 6e 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f  n a table..** Fo
16de0 72 20 73 75 63 68 20 65 78 70 72 65 73 73 69 6f  r such expressio
16df0 6e 73 2c 20 45 78 70 72 2e 6f 70 20 69 73 20 73  ns, Expr.op is s
16e00 65 74 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20  et to TK_COLUMN 
16e10 61 6e 64 20 45 78 70 72 2e 69 54 61 62 6c 65 20  and Expr.iTable 
16e20 69 73 0a 2a 2a 20 74 68 65 20 69 6e 74 65 67 65  is.** the intege
16e30 72 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  r cursor number 
16e40 6f 66 20 61 20 56 44 42 45 20 63 75 72 73 6f 72  of a VDBE cursor
16e50 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 61   pointing to tha
16e60 74 20 74 61 62 6c 65 20 61 6e 64 0a 2a 2a 20 45  t table and.** E
16e70 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 69 73 20 74  xpr.iColumn is t
16e80 68 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  he column number
16e90 20 66 6f 72 20 74 68 65 20 73 70 65 63 69 66 69   for the specifi
16ea0 63 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 74 68  c column.  If th
16eb0 65 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20  e.** expression 
16ec0 69 73 20 75 73 65 64 20 61 73 20 61 20 72 65 73  is used as a res
16ed0 75 6c 74 20 69 6e 20 61 6e 20 61 67 67 72 65 67  ult in an aggreg
16ee0 61 74 65 20 53 45 4c 45 43 54 2c 20 74 68 65 6e  ate SELECT, then
16ef0 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73   the.** value is
16f00 20 61 6c 73 6f 20 73 74 6f 72 65 64 20 69 6e 20   also stored in 
16f10 74 68 65 20 45 78 70 72 2e 69 41 67 67 20 63 6f  the Expr.iAgg co
16f20 6c 75 6d 6e 20 69 6e 20 74 68 65 20 61 67 67 72  lumn in the aggr
16f30 65 67 61 74 65 20 73 6f 20 74 68 61 74 0a 2a 2a  egate so that.**
16f40 20 69 74 20 63 61 6e 20 62 65 20 61 63 63 65 73   it can be acces
16f50 73 65 64 20 61 66 74 65 72 20 61 6c 6c 20 61 67  sed after all ag
16f60 67 72 65 67 61 74 65 73 20 61 72 65 20 63 6f 6d  gregates are com
16f70 70 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  puted..**.** If 
16f80 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
16f90 73 20 61 6e 20 75 6e 62 6f 75 6e 64 20 76 61 72  s an unbound var
16fa0 69 61 62 6c 65 20 6d 61 72 6b 65 72 20 28 61 20  iable marker (a 
16fb0 71 75 65 73 74 69 6f 6e 20 6d 61 72 6b 0a 2a 2a  question mark.**
16fc0 20 63 68 61 72 61 63 74 65 72 20 27 3f 27 20 69   character '?' i
16fd0 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 53  n the original S
16fe0 51 4c 29 20 74 68 65 6e 20 74 68 65 20 45 78 70  QL) then the Exp
16ff0 72 2e 69 54 61 62 6c 65 20 68 6f 6c 64 73 20 74  r.iTable holds t
17000 68 65 20 69 6e 64 65 78 0a 2a 2a 20 6e 75 6d 62  he index.** numb
17010 65 72 20 66 6f 72 20 74 68 61 74 20 76 61 72 69  er for that vari
17020 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  able..**.** If t
17030 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
17040 20 61 20 73 75 62 71 75 65 72 79 20 74 68 65 6e   a subquery then
17050 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f   Expr.iColumn ho
17060 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a  lds an integer.*
17070 2a 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65  * register numbe
17080 72 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  r containing the
17090 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 73   result of the s
170a0 75 62 71 75 65 72 79 2e 20 20 49 66 20 74 68 65  ubquery.  If the
170b0 0a 2a 2a 20 73 75 62 71 75 65 72 79 20 67 69 76  .** subquery giv
170c0 65 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 72 65  es a constant re
170d0 73 75 6c 74 2c 20 74 68 65 6e 20 69 54 61 62 6c  sult, then iTabl
170e0 65 20 69 73 20 2d 31 2e 20 20 49 66 20 74 68 65  e is -1.  If the
170f0 20 73 75 62 71 75 65 72 79 0a 2a 2a 20 67 69 76   subquery.** giv
17100 65 73 20 61 20 64 69 66 66 65 72 65 6e 74 20 61  es a different a
17110 6e 73 77 65 72 20 61 74 20 64 69 66 66 65 72 65  nswer at differe
17120 6e 74 20 74 69 6d 65 73 20 64 75 72 69 6e 67 20  nt times during 
17130 73 74 61 74 65 6d 65 6e 74 20 70 72 6f 63 65 73  statement proces
17140 73 69 6e 67 0a 2a 2a 20 74 68 65 6e 20 69 54 61  sing.** then iTa
17150 62 6c 65 20 69 73 20 74 68 65 20 61 64 64 72 65  ble is the addre
17160 73 73 20 6f 66 20 61 20 73 75 62 72 6f 75 74 69  ss of a subrouti
17170 6e 65 20 74 68 61 74 20 63 6f 6d 70 75 74 65 73  ne that computes
17180 20 74 68 65 20 73 75 62 71 75 65 72 79 2e 0a 2a   the subquery..*
17190 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 78 70 72  *.** If the Expr
171a0 20 69 73 20 6f 66 20 74 79 70 65 20 4f 50 5f 43   is of type OP_C
171b0 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20 74  olumn, and the t
171c0 61 62 6c 65 20 69 74 20 69 73 20 73 65 6c 65 63  able it is selec
171d0 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69 73 20  ting from.** is 
171e0 61 20 64 69 73 6b 20 74 61 62 6c 65 20 6f 72 20  a disk table or 
171f0 74 68 65 20 22 6f 6c 64 2e 2a 22 20 70 73 65 75  the "old.*" pseu
17200 64 6f 2d 74 61 62 6c 65 2c 20 74 68 65 6e 20 70  do-table, then p
17210 54 61 62 20 70 6f 69 6e 74 73 20 74 6f 20 74 68  Tab points to th
17220 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69  e.** correspondi
17230 6e 67 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74  ng table definit
17240 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43  ion..**.** ALLOC
17250 41 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a  ATION NOTES:.**.
17260 2a 2a 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20  ** Expr objects 
17270 63 61 6e 20 75 73 65 20 61 20 6c 6f 74 20 6f 66  can use a lot of
17280 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 69 6e   memory space in
17290 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
172a0 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c 70 20 72 65  .  To.** help re
172b0 64 75 63 65 20 6d 65 6d 6f 72 79 20 72 65 71 75  duce memory requ
172c0 69 72 65 6d 65 6e 74 73 2c 20 73 6f 6d 65 74 69  irements, someti
172d0 6d 65 73 20 61 6e 20 45 78 70 72 20 6f 62 6a 65  mes an Expr obje
172e0 63 74 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 74 72  ct will be.** tr
172f0 75 6e 63 61 74 65 64 2e 20 20 41 6e 64 20 74 6f  uncated.  And to
17300 20 72 65 64 75 63 65 20 74 68 65 20 6e 75 6d 62   reduce the numb
17310 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c  er of memory all
17320 6f 63 61 74 69 6f 6e 73 2c 20 73 6f 6d 65 74 69  ocations, someti
17330 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f  mes.** two or mo
17340 72 65 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20  re Expr objects 
17350 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 69  will be stored i
17360 6e 20 61 20 73 69 6e 67 6c 65 20 6d 65 6d 6f 72  n a single memor
17370 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a  y allocation,.**
17380 20 74 6f 67 65 74 68 65 72 20 77 69 74 68 20 45   together with E
17390 78 70 72 2e 7a 54 6f 6b 65 6e 20 73 74 72 69 6e  xpr.zToken strin
173a0 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  gs..**.** If the
173b0 20 45 50 5f 52 65 64 75 63 65 64 20 61 6e 64 20   EP_Reduced and 
173c0 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61  EP_TokenOnly fla
173d0 67 73 20 61 72 65 20 73 65 74 20 77 68 65 6e 0a  gs are set when.
173e0 2a 2a 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63  ** an Expr objec
173f0 74 20 69 73 20 74 72 75 6e 63 61 74 65 64 2e 20  t is truncated. 
17400 20 57 68 65 6e 20 45 50 5f 52 65 64 75 63 65 64   When EP_Reduced
17410 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 61 6c   is set, then al
17420 6c 0a 2a 2a 20 74 68 65 20 63 68 69 6c 64 20 45  l.** the child E
17430 78 70 72 20 6f 62 6a 65 63 74 73 20 69 6e 20 74  xpr objects in t
17440 68 65 20 45 78 70 72 2e 70 4c 65 66 74 20 61 6e  he Expr.pLeft an
17450 64 20 45 78 70 72 2e 70 52 69 67 68 74 20 73 75  d Expr.pRight su
17460 62 74 72 65 65 73 0a 2a 2a 20 61 72 65 20 63 6f  btrees.** are co
17470 6e 74 61 69 6e 65 64 20 77 69 74 68 69 6e 20 74  ntained within t
17480 68 65 20 73 61 6d 65 20 6d 65 6d 6f 72 79 20 61  he same memory a
17490 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 65  llocation.  Note
174a0 2c 20 68 6f 77 65 76 65 72 2c 20 74 68 61 74 0a  , however, that.
174b0 2a 2a 20 74 68 65 20 73 75 62 74 72 65 65 73 20  ** the subtrees 
174c0 69 6e 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20  in Expr.x.pList 
174d0 6f 72 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63  or Expr.x.pSelec
174e0 74 20 61 72 65 20 61 6c 77 61 79 73 20 73 65 70  t are always sep
174f0 61 72 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63  arately.** alloc
17500 61 74 65 64 2c 20 72 65 67 61 72 64 6c 65 73 73  ated, regardless
17510 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e   of whether or n
17520 6f 74 20 45 50 5f 52 65 64 75 63 65 64 20 69 73  ot EP_Reduced is
17530 20 73 65 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20   set..*/.struct 
17540 45 78 70 72 20 7b 0a 20 20 75 38 20 6f 70 3b 20  Expr {.  u8 op; 
17550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17560 2f 2a 20 4f 70 65 72 61 74 69 6f 6e 20 70 65 72  /* Operation per
17570 66 6f 72 6d 65 64 20 62 79 20 74 68 69 73 20 6e  formed by this n
17580 6f 64 65 20 2a 2f 0a 20 20 63 68 61 72 20 61 66  ode */.  char af
17590 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20 20 20  finity;         
175a0 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20  /* The affinity 
175b0 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 72  of the column or
175c0 20 30 20 69 66 20 6e 6f 74 20 61 20 63 6f 6c 75   0 if not a colu
175d0 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 66 6c 61 67  mn */.  u32 flag
175e0 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  s;             /
175f0 2a 20 56 61 72 69 6f 75 73 20 66 6c 61 67 73 2e  * Various flags.
17600 20 20 45 50 5f 2a 20 53 65 65 20 62 65 6c 6f 77    EP_* See below
17610 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20   */.  union {.  
17620 20 20 63 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20    char *zToken; 
17630 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65           /* Toke
17640 6e 20 76 61 6c 75 65 2e 20 5a 65 72 6f 20 74 65  n value. Zero te
17650 72 6d 69 6e 61 74 65 64 20 61 6e 64 20 64 65 71  rminated and deq
17660 75 6f 74 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74  uoted */.    int
17670 20 69 56 61 6c 75 65 3b 20 20 20 20 20 20 20 20   iValue;        
17680 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74      /* Non-negat
17690 69 76 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  ive integer valu
176a0 65 20 69 66 20 45 50 5f 49 6e 74 56 61 6c 75 65  e if EP_IntValue
176b0 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a   */.  } u;..  /*
176c0 20 49 66 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e   If the EP_Token
176d0 4f 6e 6c 79 20 66 6c 61 67 20 69 73 20 73 65 74  Only flag is set
176e0 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61   in the Expr.fla
176f0 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f  gs mask, then no
17700 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61  .  ** space is a
17710 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65  llocated for the
17720 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68   fields below th
17730 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74  is point. An att
17740 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63  empt to.  ** acc
17750 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65  ess them will re
17760 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75  sult in a segfau
17770 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f  lt or malfunctio
17780 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  n..  ***********
17790 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
177a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
177b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
177c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45  **********/..  E
177d0 78 70 72 20 2a 70 4c 65 66 74 3b 20 20 20 20 20  xpr *pLeft;     
177e0 20 20 20 20 20 20 2f 2a 20 4c 65 66 74 20 73 75        /* Left su
177f0 62 6e 6f 64 65 20 2a 2f 0a 20 20 45 78 70 72 20  bnode */.  Expr 
17800 2a 70 52 69 67 68 74 3b 20 20 20 20 20 20 20 20  *pRight;        
17810 20 20 2f 2a 20 52 69 67 68 74 20 73 75 62 6e 6f    /* Right subno
17820 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a  de */.  union {.
17830 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4c      ExprList *pL
17840 69 73 74 3b 20 20 20 20 20 2f 2a 20 6f 70 20 3d  ist;     /* op =
17850 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c   IN, EXISTS, SEL
17860 45 43 54 2c 20 43 41 53 45 2c 20 46 55 4e 43 54  ECT, CASE, FUNCT
17870 49 4f 4e 2c 20 42 45 54 57 45 45 4e 20 2a 2f 0a  ION, BETWEEN */.
17880 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c      Select *pSel
17890 65 63 74 3b 20 20 20 20 20 2f 2a 20 45 50 5f 78  ect;     /* EP_x
178a0 49 73 53 65 6c 65 63 74 20 61 6e 64 20 6f 70 20  IsSelect and op 
178b0 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53 45  = IN, EXISTS, SE
178c0 4c 45 43 54 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a  LECT */.  } x;..
178d0 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 52    /* If the EP_R
178e0 65 64 75 63 65 64 20 66 6c 61 67 20 69 73 20 73  educed flag is s
178f0 65 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66  et in the Expr.f
17900 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20  lags mask, then 
17910 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73  no.  ** space is
17920 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74   allocated for t
17930 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20  he fields below 
17940 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61  this point. An a
17950 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61  ttempt to.  ** a
17960 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20  ccess them will 
17970 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66  result in a segf
17980 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74  ault or malfunct
17990 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a  ion..  *********
179a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
179b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
179c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
179d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23  ************/..#
179e0 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58  if SQLITE_MAX_EX
179f0 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74  PR_DEPTH>0.  int
17a00 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20 20 20   nHeight;       
17a10 20 20 20 20 2f 2a 20 48 65 69 67 68 74 20 6f 66      /* Height of
17a20 20 74 68 65 20 74 72 65 65 20 68 65 61 64 65 64   the tree headed
17a30 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f   by this node */
17a40 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 69 54  .#endif.  int iT
17a50 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
17a60 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63   /* TK_COLUMN: c
17a70 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
17a80 74 61 62 6c 65 20 68 6f 6c 64 69 6e 67 20 63 6f  table holding co
17a90 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20  lumn.           
17aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
17ab0 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20 72 65   TK_REGISTER: re
17ac0 67 69 73 74 65 72 20 6e 75 6d 62 65 72 0a 20 20  gister number.  
17ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ae0 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 54 52 49         ** TK_TRI
17af0 47 47 45 52 3a 20 31 20 2d 3e 20 6e 65 77 2c 20  GGER: 1 -> new, 
17b00 30 20 2d 3e 20 6f 6c 64 0a 20 20 20 20 20 20 20  0 -> old.       
17b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b20 20 20 2a 2a 20 45 50 5f 55 6e 6c 69 6b 65 6c 79    ** EP_Unlikely
17b30 3a 20 20 31 33 34 32 31 37 37 32 38 20 74 69 6d  :  134217728 tim
17b40 65 73 20 6c 69 6b 65 6c 69 68 6f 6f 64 0a 20 20  es likelihood.  
17b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b60 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 53 45 4c         ** TK_SEL
17b70 45 43 54 3a 20 31 73 74 20 72 65 67 69 73 74 65  ECT: 1st registe
17b80 72 20 6f 66 20 72 65 73 75 6c 74 20 76 65 63 74  r of result vect
17b90 6f 72 20 2a 2f 0a 20 20 79 6e 56 61 72 20 69 43  or */.  ynVar iC
17ba0 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 2f  olumn;         /
17bb0 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c  * TK_COLUMN: col
17bc0 75 6d 6e 20 69 6e 64 65 78 2e 20 20 2d 31 20 66  umn index.  -1 f
17bd0 6f 72 20 72 6f 77 69 64 2e 0a 20 20 20 20 20 20  or rowid..      
17be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17bf0 20 20 20 2a 2a 20 54 4b 5f 56 41 52 49 41 42 4c     ** TK_VARIABL
17c00 45 3a 20 76 61 72 69 61 62 6c 65 20 6e 75 6d 62  E: variable numb
17c10 65 72 20 28 61 6c 77 61 79 73 20 3e 3d 20 31 29  er (always >= 1)
17c20 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17c30 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
17c40 5f 53 45 4c 45 43 54 5f 43 4f 4c 55 4d 4e 3a 20  _SELECT_COLUMN: 
17c50 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 72 65  column of the re
17c60 73 75 6c 74 20 76 65 63 74 6f 72 20 2a 2f 0a 20  sult vector */. 
17c70 20 69 31 36 20 69 41 67 67 3b 20 20 20 20 20 20   i16 iAgg;      
17c80 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68          /* Which
17c90 20 65 6e 74 72 79 20 69 6e 20 70 41 67 67 49 6e   entry in pAggIn
17ca0 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e  fo->aCol[] or ->
17cb0 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69 31 36  aFunc[] */.  i16
17cc0 20 69 52 69 67 68 74 4a 6f 69 6e 54 61 62 6c 65   iRightJoinTable
17cd0 3b 20 20 20 2f 2a 20 49 66 20 45 50 5f 46 72 6f  ;   /* If EP_Fro
17ce0 6d 4a 6f 69 6e 2c 20 74 68 65 20 72 69 67 68 74  mJoin, the right
17cf0 20 74 61 62 6c 65 20 6f 66 20 74 68 65 20 6a 6f   table of the jo
17d00 69 6e 20 2a 2f 0a 20 20 75 38 20 6f 70 32 3b 20  in */.  u8 op2; 
17d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
17d20 2a 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20 6f  * TK_REGISTER: o
17d30 72 69 67 69 6e 61 6c 20 76 61 6c 75 65 20 6f 66  riginal value of
17d40 20 45 78 70 72 2e 6f 70 0a 20 20 20 20 20 20 20   Expr.op.       
17d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d60 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20    ** TK_COLUMN: 
17d70 74 68 65 20 76 61 6c 75 65 20 6f 66 20 70 35 20  the value of p5 
17d80 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e 0a 20 20  for OP_Column.  
17d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17da0 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 41 47 47         ** TK_AGG
17db0 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e 65 73 74 69  _FUNCTION: nesti
17dc0 6e 67 20 64 65 70 74 68 20 2a 2f 0a 20 20 41 67  ng depth */.  Ag
17dd0 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b  gInfo *pAggInfo;
17de0 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62 79 20       /* Used by 
17df0 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e  TK_AGG_COLUMN an
17e00 64 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f  d TK_AGG_FUNCTIO
17e10 4e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54  N */.  Table *pT
17e20 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ab;           /*
17e30 20 54 61 62 6c 65 20 66 6f 72 20 54 4b 5f 43 4f   Table for TK_CO
17e40 4c 55 4d 4e 20 65 78 70 72 65 73 73 69 6f 6e 73  LUMN expressions
17e50 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  . */.};../*.** T
17e60 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65  he following are
17e70 20 74 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66   the meanings of
17e80 20 62 69 74 73 20 69 6e 20 74 68 65 20 45 78 70   bits in the Exp
17e90 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  r.flags field..*
17ea0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 46 72 6f  /.#define EP_Fro
17eb0 6d 4a 6f 69 6e 20 20 30 78 30 30 30 30 30 31 20  mJoin  0x000001 
17ec0 2f 2a 20 4f 72 69 67 69 6e 61 74 65 73 20 69 6e  /* Originates in
17ed0 20 4f 4e 2f 55 53 49 4e 47 20 63 6c 61 75 73 65   ON/USING clause
17ee0 20 6f 66 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a   of outer join *
17ef0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 67 67  /.#define EP_Agg
17f00 20 20 20 20 20 20 20 30 78 30 30 30 30 30 32 20         0x000002 
17f10 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20  /* Contains one 
17f20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74  or more aggregat
17f30 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23  e functions */.#
17f40 64 65 66 69 6e 65 20 45 50 5f 52 65 73 6f 6c 76  define EP_Resolv
17f50 65 64 20 20 30 78 30 30 30 30 30 34 20 2f 2a 20  ed  0x000004 /* 
17f60 49 44 73 20 68 61 76 65 20 62 65 65 6e 20 72 65  IDs have been re
17f70 73 6f 6c 76 65 64 20 74 6f 20 43 4f 4c 55 4d 4e  solved to COLUMN
17f80 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  s */.#define EP_
17f90 45 72 72 6f 72 20 20 20 20 20 30 78 30 30 30 30  Error     0x0000
17fa0 30 38 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e  08 /* Expression
17fb0 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72   contains one or
17fc0 20 6d 6f 72 65 20 65 72 72 6f 72 73 20 2a 2f 0a   more errors */.
17fd0 23 64 65 66 69 6e 65 20 45 50 5f 44 69 73 74 69  #define EP_Disti
17fe0 6e 63 74 20 20 30 78 30 30 30 30 31 30 20 2f 2a  nct  0x000010 /*
17ff0 20 41 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   Aggregate funct
18000 69 6f 6e 20 77 69 74 68 20 44 49 53 54 49 4e 43  ion with DISTINC
18010 54 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65  T keyword */.#de
18020 66 69 6e 65 20 45 50 5f 56 61 72 53 65 6c 65 63  fine EP_VarSelec
18030 74 20 30 78 30 30 30 30 32 30 20 2f 2a 20 70 53  t 0x000020 /* pS
18040 65 6c 65 63 74 20 69 73 20 63 6f 72 72 65 6c 61  elect is correla
18050 74 65 64 2c 20 6e 6f 74 20 63 6f 6e 73 74 61 6e  ted, not constan
18060 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  t */.#define EP_
18070 44 62 6c 51 75 6f 74 65 64 20 30 78 30 30 30 30  DblQuoted 0x0000
18080 34 30 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61  40 /* token.z wa
18090 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 69 6e 20  s originally in 
180a0 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65 66 69 6e 65  "..." */.#define
180b0 20 45 50 5f 49 6e 66 69 78 46 75 6e 63 20 30 78   EP_InfixFunc 0x
180c0 30 30 30 30 38 30 20 2f 2a 20 54 72 75 65 20 66  000080 /* True f
180d0 6f 72 20 61 6e 20 69 6e 66 69 78 20 66 75 6e 63  or an infix func
180e0 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42  tion: LIKE, GLOB
180f0 2c 20 65 74 63 20 2a 2f 0a 23 64 65 66 69 6e 65  , etc */.#define
18100 20 45 50 5f 43 6f 6c 6c 61 74 65 20 20 20 30 78   EP_Collate   0x
18110 30 30 30 31 30 30 20 2f 2a 20 54 72 65 65 20 63  000100 /* Tree c
18120 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f 43 4f 4c  ontains a TK_COL
18130 4c 41 54 45 20 6f 70 65 72 61 74 6f 72 20 2a 2f  LATE operator */
18140 0a 23 64 65 66 69 6e 65 20 45 50 5f 47 65 6e 65  .#define EP_Gene
18150 72 69 63 20 20 20 30 78 30 30 30 32 30 30 20 2f  ric   0x000200 /
18160 2a 20 49 67 6e 6f 72 65 20 43 4f 4c 4c 41 54 45  * Ignore COLLATE
18170 20 6f 72 20 61 66 66 69 6e 69 74 79 20 6f 6e 20   or affinity on 
18180 74 68 69 73 20 74 72 65 65 20 2a 2f 0a 23 64 65  this tree */.#de
18190 66 69 6e 65 20 45 50 5f 49 6e 74 56 61 6c 75 65  fine EP_IntValue
181a0 20 20 30 78 30 30 30 34 30 30 20 2f 2a 20 49 6e    0x000400 /* In
181b0 74 65 67 65 72 20 76 61 6c 75 65 20 63 6f 6e 74  teger value cont
181c0 61 69 6e 65 64 20 69 6e 20 75 2e 69 56 61 6c 75  ained in u.iValu
181d0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  e */.#define EP_
181e0 78 49 73 53 65 6c 65 63 74 20 30 78 30 30 30 38  xIsSelect 0x0008
181f0 30 30 20 2f 2a 20 78 2e 70 53 65 6c 65 63 74 20  00 /* x.pSelect 
18200 69 73 20 76 61 6c 69 64 20 28 6f 74 68 65 72 77  is valid (otherw
18210 69 73 65 20 78 2e 70 4c 69 73 74 20 69 73 29 20  ise x.pList is) 
18220 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 6b  */.#define EP_Sk
18230 69 70 20 20 20 20 20 20 30 78 30 30 31 30 30 30  ip      0x001000
18240 20 2f 2a 20 43 4f 4c 4c 41 54 45 2c 20 41 53 2c   /* COLLATE, AS,
18250 20 6f 72 20 55 4e 4c 49 4b 45 4c 59 20 2a 2f 0a   or UNLIKELY */.
18260 23 64 65 66 69 6e 65 20 45 50 5f 52 65 64 75 63  #define EP_Reduc
18270 65 64 20 20 20 30 78 30 30 32 30 30 30 20 2f 2a  ed   0x002000 /*
18280 20 45 78 70 72 20 73 74 72 75 63 74 20 45 58 50   Expr struct EXP
18290 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20 62 79  R_REDUCEDSIZE by
182a0 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66  tes only */.#def
182b0 69 6e 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79  ine EP_TokenOnly
182c0 20 30 78 30 30 34 30 30 30 20 2f 2a 20 45 78 70   0x004000 /* Exp
182d0 72 20 73 74 72 75 63 74 20 45 58 50 52 5f 54 4f  r struct EXPR_TO
182e0 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 62 79 74 65  KENONLYSIZE byte
182f0 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e  s only */.#defin
18300 65 20 45 50 5f 53 74 61 74 69 63 20 20 20 20 30  e EP_Static    0
18310 78 30 30 38 30 30 30 20 2f 2a 20 48 65 6c 64 20  x008000 /* Held 
18320 69 6e 20 6d 65 6d 6f 72 79 20 6e 6f 74 20 6f 62  in memory not ob
18330 74 61 69 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c  tained from mall
18340 6f 63 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  oc() */.#define 
18350 45 50 5f 4d 65 6d 54 6f 6b 65 6e 20 20 30 78 30  EP_MemToken  0x0
18360 31 30 30 30 30 20 2f 2a 20 4e 65 65 64 20 74 6f  10000 /* Need to
18370 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29   sqlite3DbFree()
18380 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a   Expr.zToken */.
18390 23 64 65 66 69 6e 65 20 45 50 5f 4e 6f 52 65 64  #define EP_NoRed
183a0 75 63 65 20 20 30 78 30 32 30 30 30 30 20 2f 2a  uce  0x020000 /*
183b0 20 43 61 6e 6e 6f 74 20 45 58 50 52 44 55 50 5f   Cannot EXPRDUP_
183c0 52 45 44 55 43 45 20 74 68 69 73 20 45 78 70 72  REDUCE this Expr
183d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 55   */.#define EP_U
183e0 6e 6c 69 6b 65 6c 79 20 20 30 78 30 34 30 30 30  nlikely  0x04000
183f0 30 20 2f 2a 20 75 6e 6c 69 6b 65 6c 79 28 29 20  0 /* unlikely() 
18400 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 29 20  or likelihood() 
18410 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
18420 69 6e 65 20 45 50 5f 43 6f 6e 73 74 46 75 6e 63  ine EP_ConstFunc
18430 20 30 78 30 38 30 30 30 30 20 2f 2a 20 41 20 53   0x080000 /* A S
18440 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
18450 41 4e 54 20 6f 72 20 5f 53 4c 4f 43 48 4e 47 20  ANT or _SLOCHNG 
18460 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
18470 69 6e 65 20 45 50 5f 43 61 6e 42 65 4e 75 6c 6c  ine EP_CanBeNull
18480 20 30 78 31 30 30 30 30 30 20 2f 2a 20 43 61 6e   0x100000 /* Can
18490 20 62 65 20 6e 75 6c 6c 20 64 65 73 70 69 74 65   be null despite
184a0 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72   NOT NULL constr
184b0 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  aint */.#define 
184c0 45 50 5f 53 75 62 71 75 65 72 79 20 20 30 78 32  EP_Subquery  0x2
184d0 30 30 30 30 30 20 2f 2a 20 54 72 65 65 20 63 6f  00000 /* Tree co
184e0 6e 74 61 69 6e 73 20 61 20 54 4b 5f 53 45 4c 45  ntains a TK_SELE
184f0 43 54 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23  CT operator */.#
18500 64 65 66 69 6e 65 20 45 50 5f 41 6c 69 61 73 20  define EP_Alias 
18510 20 20 20 20 30 78 34 30 30 30 30 30 20 2f 2a 20      0x400000 /* 
18520 49 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20  Is an alias for 
18530 61 20 72 65 73 75 6c 74 20 73 65 74 20 63 6f 6c  a result set col
18540 75 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  umn */.#define E
18550 50 5f 4c 65 61 66 20 20 20 20 20 20 30 78 38 30  P_Leaf      0x80
18560 30 30 30 30 20 2f 2a 20 45 78 70 72 2e 70 4c 65  0000 /* Expr.pLe
18570 66 74 2c 20 2e 70 52 69 67 68 74 2c 20 2e 75 2e  ft, .pRight, .u.
18580 70 53 65 6c 65 63 74 20 61 6c 6c 20 4e 55 4c 4c  pSelect all NULL
18590 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6d 62 69   */../*.** Combi
185a0 6e 61 74 69 6f 6e 73 20 6f 66 20 74 77 6f 20 6f  nations of two o
185b0 72 20 6d 6f 72 65 20 45 50 5f 2a 20 66 6c 61 67  r more EP_* flag
185c0 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  s.*/.#define EP_
185d0 50 72 6f 70 61 67 61 74 65 20 28 45 50 5f 43 6f  Propagate (EP_Co
185e0 6c 6c 61 74 65 7c 45 50 5f 53 75 62 71 75 65 72  llate|EP_Subquer
185f0 79 29 20 2f 2a 20 50 72 6f 70 61 67 61 74 65 20  y) /* Propagate 
18600 74 68 65 73 65 20 62 69 74 73 20 75 70 20 74 72  these bits up tr
18610 65 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  ee */../*.** The
18620 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65  se macros can be
18630 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73   used to test, s
18640 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74  et, or clear bit
18650 73 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72  s in the.** Expr
18660 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f  .flags field..*/
18670 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48 61 73  .#define ExprHas
18680 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20  Property(E,P)   
18690 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28    (((E)->flags&(
186a0 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20  P))!=0).#define 
186b0 45 78 70 72 48 61 73 41 6c 6c 50 72 6f 70 65 72  ExprHasAllProper
186c0 74 79 28 45 2c 50 29 20 20 28 28 28 45 29 2d 3e  ty(E,P)  (((E)->
186d0 66 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29  flags&(P))==(P))
186e0 0a 23 64 65 66 69 6e 65 20 45 78 70 72 53 65 74  .#define ExprSet
186f0 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20  Property(E,P)   
18700 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50    (E)->flags|=(P
18710 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 43 6c  ).#define ExprCl
18720 65 61 72 50 72 6f 70 65 72 74 79 28 45 2c 50 29  earProperty(E,P)
18730 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 26 3d 7e     (E)->flags&=~
18740 28 50 29 0a 0a 2f 2a 20 54 68 65 20 45 78 70 72  (P)../* The Expr
18750 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28 29  SetVVAProperty()
18760 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 66   macro is used f
18770 6f 72 20 56 65 72 69 66 69 63 61 74 69 6f 6e 2c  or Verification,
18780 20 56 61 6c 69 64 61 74 69 6f 6e 2c 0a 2a 2a 20   Validation,.** 
18790 61 6e 64 20 41 63 63 72 65 64 69 74 61 74 69 6f  and Accreditatio
187a0 6e 20 6f 6e 6c 79 2e 20 20 49 74 20 77 6f 72 6b  n only.  It work
187b0 73 20 6c 69 6b 65 20 45 78 70 72 53 65 74 50 72  s like ExprSetPr
187c0 6f 70 65 72 74 79 28 29 20 64 75 72 69 6e 67 20  operty() during 
187d0 56 56 41 0a 2a 2a 20 70 72 6f 63 65 73 73 65 73  VVA.** processes
187e0 20 62 75 74 20 69 73 20 61 20 6e 6f 2d 6f 70 20   but is a no-op 
187f0 66 6f 72 20 64 65 6c 69 76 65 72 79 2e 0a 2a 2f  for delivery..*/
18800 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
18810 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20 45 78  EBUG.# define Ex
18820 70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79  prSetVVAProperty
18830 28 45 2c 50 29 20 20 28 45 29 2d 3e 66 6c 61 67  (E,P)  (E)->flag
18840 73 7c 3d 28 50 29 0a 23 65 6c 73 65 0a 23 20 64  s|=(P).#else.# d
18850 65 66 69 6e 65 20 45 78 70 72 53 65 74 56 56 41  efine ExprSetVVA
18860 50 72 6f 70 65 72 74 79 28 45 2c 50 29 0a 23 65  Property(E,P).#e
18870 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72  ndif../*.** Macr
18880 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  os to determine 
18890 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  the number of by
188a0 74 65 73 20 72 65 71 75 69 72 65 64 20 62 79 20  tes required by 
188b0 61 20 6e 6f 72 6d 61 6c 20 45 78 70 72 0a 2a 2a  a normal Expr.**
188c0 20 73 74 72 75 63 74 2c 20 61 6e 20 45 78 70 72   struct, an Expr
188d0 20 73 74 72 75 63 74 20 77 69 74 68 20 74 68 65   struct with the
188e0 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67   EP_Reduced flag
188f0 20 73 65 74 20 69 6e 20 45 78 70 72 2e 66 6c 61   set in Expr.fla
18900 67 73 0a 2a 2a 20 61 6e 64 20 61 6e 20 45 78 70  gs.** and an Exp
18910 72 20 73 74 72 75 63 74 20 77 69 74 68 20 74 68  r struct with th
18920 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66  e EP_TokenOnly f
18930 6c 61 67 20 73 65 74 2e 0a 2a 2f 0a 23 64 65 66  lag set..*/.#def
18940 69 6e 65 20 45 58 50 52 5f 46 55 4c 4c 53 49 5a  ine EXPR_FULLSIZ
18950 45 20 20 20 20 20 20 20 20 20 20 20 73 69 7a 65  E           size
18960 6f 66 28 45 78 70 72 29 20 20 20 20 20 20 20 20  of(Expr)        
18970 20 20 20 2f 2a 20 46 75 6c 6c 20 73 69 7a 65 20     /* Full size 
18980 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f  */.#define EXPR_
18990 52 45 44 55 43 45 44 53 49 5a 45 20 20 20 20 20  REDUCEDSIZE     
189a0 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72     offsetof(Expr
189b0 2c 69 54 61 62 6c 65 29 20 20 2f 2a 20 43 6f 6d  ,iTable)  /* Com
189c0 6d 6f 6e 20 66 65 61 74 75 72 65 73 20 2a 2f 0a  mon features */.
189d0 23 64 65 66 69 6e 65 20 45 58 50 52 5f 54 4f 4b  #define EXPR_TOK
189e0 45 4e 4f 4e 4c 59 53 49 5a 45 20 20 20 20 20 20  ENONLYSIZE      
189f0 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c 70 4c  offsetof(Expr,pL
18a00 65 66 74 29 20 20 20 2f 2a 20 46 65 77 65 72 20  eft)   /* Fewer 
18a10 66 65 61 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a  features */../*.
18a20 2a 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64 20  ** Flags passed 
18a30 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 45 78  to the sqlite3Ex
18a40 70 72 44 75 70 28 29 20 66 75 6e 63 74 69 6f 6e  prDup() function
18a50 2e 20 53 65 65 20 74 68 65 20 68 65 61 64 65 72  . See the header
18a60 20 63 6f 6d 6d 65 6e 74 0a 2a 2a 20 61 62 6f 76   comment.** abov
18a70 65 20 73 71 6c 69 74 65 33 45 78 70 72 44 75 70  e sqlite3ExprDup
18a80 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a  () for details..
18a90 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 44  */.#define EXPRD
18aa0 55 50 5f 52 45 44 55 43 45 20 20 20 20 20 20 20  UP_REDUCE       
18ab0 20 20 30 78 30 30 30 31 20 20 2f 2a 20 55 73 65    0x0001  /* Use
18ac0 64 20 72 65 64 75 63 65 64 2d 73 69 7a 65 20 45  d reduced-size E
18ad0 78 70 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a  xpr nodes */../*
18ae0 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 65 78  .** A list of ex
18af0 70 72 65 73 73 69 6f 6e 73 2e 20 20 45 61 63 68  pressions.  Each
18b00 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79 20   expression may 
18b10 6f 70 74 69 6f 6e 61 6c 6c 79 20 68 61 76 65 20  optionally have 
18b20 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20 41 6e 20 65  a.** name.  An e
18b30 78 70 72 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e 61  xpr/name combina
18b40 74 69 6f 6e 20 63 61 6e 20 62 65 20 75 73 65 64  tion can be used
18b50 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73   in several ways
18b60 2c 20 73 75 63 68 0a 2a 2a 20 61 73 20 74 68 65  , such.** as the
18b70 20 6c 69 73 74 20 6f 66 20 22 65 78 70 72 20 41   list of "expr A
18b80 53 20 49 44 22 20 66 69 65 6c 64 73 20 66 6f 6c  S ID" fields fol
18b90 6c 6f 77 69 6e 67 20 61 20 22 53 45 4c 45 43 54  lowing a "SELECT
18ba0 22 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 6c  " or in the.** l
18bb0 69 73 74 20 6f 66 20 22 49 44 20 3d 20 65 78 70  ist of "ID = exp
18bc0 72 22 20 69 74 65 6d 73 20 69 6e 20 61 6e 20 55  r" items in an U
18bd0 50 44 41 54 45 2e 20 20 41 20 6c 69 73 74 20 6f  PDATE.  A list o
18be0 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63 61  f expressions ca
18bf0 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 73 65  n.** also be use
18c00 64 20 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e  d as the argumen
18c10 74 20 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e 2c  t to a function,
18c20 20 69 6e 20 77 68 69 63 68 20 63 61 73 65 20 74   in which case t
18c30 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69  he a.zName.** fi
18c40 65 6c 64 20 69 73 20 6e 6f 74 20 75 73 65 64 2e  eld is not used.
18c50 0a 2a 2a 0a 2a 2a 20 42 79 20 64 65 66 61 75 6c  .**.** By defaul
18c60 74 20 74 68 65 20 45 78 70 72 2e 7a 53 70 61 6e  t the Expr.zSpan
18c70 20 66 69 65 6c 64 20 68 6f 6c 64 73 20 61 20 68   field holds a h
18c80 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65 20 64 65  uman-readable de
18c90 73 63 72 69 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20  scription of.** 
18ca0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 74  the expression t
18cb0 68 61 74 20 69 73 20 75 73 65 64 20 69 6e 20 74  hat is used in t
18cc0 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66  he generation of
18cd0 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20   error messages 
18ce0 61 6e 64 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61  and.** column la
18cf0 62 65 6c 73 2e 20 20 49 6e 20 74 68 69 73 20 63  bels.  In this c
18d00 61 73 65 2c 20 45 78 70 72 2e 7a 53 70 61 6e 20  ase, Expr.zSpan 
18d10 69 73 20 74 79 70 69 63 61 6c 6c 79 20 74 68 65  is typically the
18d20 20 74 65 78 74 20 6f 66 20 61 0a 2a 2a 20 63 6f   text of a.** co
18d30 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  lumn expression 
18d40 61 73 20 69 74 20 65 78 69 73 74 73 20 69 6e 20  as it exists in 
18d50 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  a SELECT stateme
18d60 6e 74 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 66  nt.  However, if
18d70 0a 2a 2a 20 74 68 65 20 62 53 70 61 6e 49 73 54  .** the bSpanIsT
18d80 61 62 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20  ab flag is set, 
18d90 74 68 65 6e 20 7a 53 70 61 6e 20 69 73 20 6f 76  then zSpan is ov
18da0 65 72 6c 6f 61 64 65 64 20 74 6f 20 6d 65 61 6e  erloaded to mean
18db0 20 74 68 65 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20   the name.** of 
18dc0 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d  the result colum
18dd0 6e 20 69 6e 20 74 68 65 20 66 6f 72 6d 3a 20 44  n in the form: D
18de0 41 54 41 42 41 53 45 2e 54 41 42 4c 45 2e 43 4f  ATABASE.TABLE.CO
18df0 4c 55 4d 4e 2e 20 20 54 68 69 73 20 6c 61 74 65  LUMN.  This late
18e00 72 0a 2a 2a 20 66 6f 72 6d 20 69 73 20 75 73 65  r.** form is use
18e10 64 20 66 6f 72 20 6e 61 6d 65 20 72 65 73 6f 6c  d for name resol
18e20 75 74 69 6f 6e 20 77 69 74 68 20 6e 65 73 74 65  ution with neste
18e30 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 73 2e 0a  d FROM clauses..
18e40 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 4c 69  */.struct ExprLi
18e50 73 74 20 7b 0a 20 20 69 6e 74 20 6e 45 78 70 72  st {.  int nExpr
18e60 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
18e70 20 4e 75 6d 62 65 72 20 6f 66 20 65 78 70 72 65   Number of expre
18e80 73 73 69 6f 6e 73 20 6f 6e 20 74 68 65 20 6c 69  ssions on the li
18e90 73 74 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 45  st */.  struct E
18ea0 78 70 72 4c 69 73 74 5f 69 74 65 6d 20 7b 20 2f  xprList_item { /
18eb0 2a 20 46 6f 72 20 65 61 63 68 20 65 78 70 72 65  * For each expre
18ec0 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73  ssion in the lis
18ed0 74 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70  t */.    Expr *p
18ee0 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20  Expr;           
18ef0 20 2f 2a 20 54 68 65 20 6c 69 73 74 20 6f 66 20   /* The list of 
18f00 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20  expressions */. 
18f10 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20     char *zName; 
18f20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f             /* To
18f30 6b 65 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77  ken associated w
18f40 69 74 68 20 74 68 69 73 20 65 78 70 72 65 73 73  ith this express
18f50 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  ion */.    char 
18f60 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20 20 20 20  *zSpan;         
18f70 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74     /* Original t
18f80 65 78 74 20 6f 66 20 74 68 65 20 65 78 70 72 65  ext of the expre
18f90 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 75 38 20  ssion */.    u8 
18fa0 73 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20  sortOrder;      
18fb0 20 20 20 20 20 2f 2a 20 31 20 66 6f 72 20 44 45       /* 1 for DE
18fc0 53 43 20 6f 72 20 30 20 66 6f 72 20 41 53 43 20  SC or 0 for ASC 
18fd0 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
18fe0 64 6f 6e 65 20 3a 31 3b 20 20 20 20 20 20 20 2f  done :1;       /
18ff0 2a 20 41 20 66 6c 61 67 20 74 6f 20 69 6e 64 69  * A flag to indi
19000 63 61 74 65 20 77 68 65 6e 20 70 72 6f 63 65 73  cate when proces
19010 73 69 6e 67 20 69 73 20 66 69 6e 69 73 68 65 64  sing is finished
19020 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
19030 20 62 53 70 61 6e 49 73 54 61 62 20 3a 31 3b 20   bSpanIsTab :1; 
19040 2f 2a 20 7a 53 70 61 6e 20 68 6f 6c 64 73 20 44  /* zSpan holds D
19050 42 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a  B.TABLE.COLUMN *
19060 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 72  /.    unsigned r
19070 65 75 73 61 62 6c 65 20 3a 31 3b 20 20 20 2f 2a  eusable :1;   /*
19080 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73   Constant expres
19090 73 69 6f 6e 20 69 73 20 72 65 75 73 61 62 6c 65  sion is reusable
190a0 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a   */.    union {.
190b0 20 20 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20        struct {. 
190c0 20 20 20 20 20 20 20 75 31 36 20 69 4f 72 64 65         u16 iOrde
190d0 72 42 79 43 6f 6c 3b 20 20 20 20 20 20 2f 2a 20  rByCol;      /* 
190e0 46 6f 72 20 4f 52 44 45 52 20 42 59 2c 20 63 6f  For ORDER BY, co
190f0 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 72  lumn number in r
19100 65 73 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20 20  esult set */.   
19110 20 20 20 20 20 75 31 36 20 69 41 6c 69 61 73 3b       u16 iAlias;
19120 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
19130 64 65 78 20 69 6e 74 6f 20 50 61 72 73 65 2e 61  dex into Parse.a
19140 41 6c 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d  Alias[] for zNam
19150 65 20 2a 2f 0a 20 20 20 20 20 20 7d 20 78 3b 0a  e */.      } x;.
19160 20 20 20 20 20 20 69 6e 74 20 69 43 6f 6e 73 74        int iConst
19170 45 78 70 72 52 65 67 3b 20 20 20 20 20 20 2f 2a  ExprReg;      /*
19180 20 52 65 67 69 73 74 65 72 20 69 6e 20 77 68 69   Register in whi
19190 63 68 20 45 78 70 72 20 76 61 6c 75 65 20 69 73  ch Expr value is
191a0 20 63 61 63 68 65 64 20 2a 2f 0a 20 20 20 20 7d   cached */.    }
191b0 20 75 3b 0a 20 20 7d 20 2a 61 3b 20 20 20 20 20   u;.  } *a;     
191c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
191d0 41 6c 6c 6f 63 20 61 20 70 6f 77 65 72 20 6f 66  Alloc a power of
191e0 20 74 77 6f 20 67 72 65 61 74 65 72 20 6f 72 20   two greater or 
191f0 65 71 75 61 6c 20 74 6f 20 6e 45 78 70 72 20 2a  equal to nExpr *
19200 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  /.};../*.** An i
19210 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
19220 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65  structure is use
19230 64 20 62 79 20 74 68 65 20 70 61 72 73 65 72 20  d by the parser 
19240 74 6f 20 72 65 63 6f 72 64 20 62 6f 74 68 0a 2a  to record both.*
19250 2a 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65  * the parse tree
19260 20 66 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69   for an expressi
19270 6f 6e 20 61 6e 64 20 74 68 65 20 73 70 61 6e 20  on and the span 
19280 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20 66 6f  of input text fo
19290 72 20 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69  r an.** expressi
192a0 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78  on..*/.struct Ex
192b0 70 72 53 70 61 6e 20 7b 0a 20 20 45 78 70 72 20  prSpan {.  Expr 
192c0 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20  *pExpr;         
192d0 20 2f 2a 20 54 68 65 20 65 78 70 72 65 73 73 69   /* The expressi
192e0 6f 6e 20 70 61 72 73 65 20 74 72 65 65 20 2a 2f  on parse tree */
192f0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
19300 53 74 61 72 74 3b 20 20 20 2f 2a 20 46 69 72 73  Start;   /* Firs
19310 74 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 69  t character of i
19320 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a 20 20 63  nput text */.  c
19330 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45 6e 64 3b  onst char *zEnd;
19340 20 20 20 20 20 2f 2a 20 4f 6e 65 20 63 68 61 72       /* One char
19350 61 63 74 65 72 20 70 61 73 74 20 74 68 65 20 65  acter past the e
19360 6e 64 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74  nd of input text
19370 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
19380 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
19390 73 20 73 74 72 75 63 74 75 72 65 20 63 61 6e 20  s structure can 
193a0 68 6f 6c 64 20 61 20 73 69 6d 70 6c 65 20 6c 69  hold a simple li
193b0 73 74 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72  st of identifier
193c0 73 2c 0a 2a 2a 20 73 75 63 68 20 61 73 20 74 68  s,.** such as th
193d0 65 20 6c 69 73 74 20 22 61 2c 62 2c 63 22 20 69  e list "a,b,c" i
193e0 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  n the following 
193f0 73 74 61 74 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a  statements:.**.*
19400 2a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e  *      INSERT IN
19410 54 4f 20 74 28 61 2c 62 2c 63 29 20 56 41 4c 55  TO t(a,b,c) VALU
19420 45 53 20 2e 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20  ES ...;.**      
19430 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 64 78  CREATE INDEX idx
19440 20 4f 4e 20 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a   ON t(a,b,c);.**
19450 20 20 20 20 20 20 43 52 45 41 54 45 20 54 52 49        CREATE TRI
19460 47 47 45 52 20 74 72 69 67 20 42 45 46 4f 52 45  GGER trig BEFORE
19470 20 55 50 44 41 54 45 20 4f 4e 20 74 28 61 2c 62   UPDATE ON t(a,b
19480 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54  ,c) ...;.**.** T
19490 68 65 20 49 64 4c 69 73 74 2e 61 2e 69 64 78 20  he IdList.a.idx 
194a0 66 69 65 6c 64 20 69 73 20 75 73 65 64 20 77 68  field is used wh
194b0 65 6e 20 74 68 65 20 49 64 4c 69 73 74 20 72 65  en the IdList re
194c0 70 72 65 73 65 6e 74 73 20 74 68 65 20 6c 69 73  presents the lis
194d0 74 20 6f 66 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e  t of.** column n
194e0 61 6d 65 73 20 61 66 74 65 72 20 61 20 74 61 62  ames after a tab
194f0 6c 65 20 6e 61 6d 65 20 69 6e 20 61 6e 20 49 4e  le name in an IN
19500 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  SERT statement. 
19510 20 49 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e   In the statemen
19520 74 0a 2a 2a 0a 2a 2a 20 20 20 20 20 49 4e 53 45  t.**.**     INSE
19530 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29  RT INTO t(a,b,c)
19540 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61   ....**.** If "a
19550 22 20 69 73 20 74 68 65 20 6b 2d 74 68 20 63 6f  " is the k-th co
19560 6c 75 6d 6e 20 6f 66 20 74 61 62 6c 65 20 22 74  lumn of table "t
19570 22 2c 20 74 68 65 6e 20 49 64 4c 69 73 74 2e 61  ", then IdList.a
19580 5b 30 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73  [0].idx==k..*/.s
19590 74 72 75 63 74 20 49 64 4c 69 73 74 20 7b 0a 20  truct IdList {. 
195a0 20 73 74 72 75 63 74 20 49 64 4c 69 73 74 5f 69   struct IdList_i
195b0 74 65 6d 20 7b 0a 20 20 20 20 63 68 61 72 20 2a  tem {.    char *
195c0 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e  zName;      /* N
195d0 61 6d 65 20 6f 66 20 74 68 65 20 69 64 65 6e 74  ame of the ident
195e0 69 66 69 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74  ifier */.    int
195f0 20 69 64 78 3b 20 20 20 20 20 20 20 20 20 20 2f   idx;          /
19600 2a 20 49 6e 64 65 78 20 69 6e 20 73 6f 6d 65 20  * Index in some 
19610 54 61 62 6c 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20  Table.aCol[] of 
19620 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a  a column named z
19630 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a  Name */.  } *a;.
19640 20 20 69 6e 74 20 6e 49 64 3b 20 20 20 20 20 20    int nId;      
19650 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
19660 69 64 65 6e 74 69 66 69 65 72 73 20 6f 6e 20 74  identifiers on t
19670 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f  he list */.};../
19680 2a 0a 2a 2a 20 54 68 65 20 62 69 74 6d 61 73 6b  *.** The bitmask
19690 20 64 61 74 61 74 79 70 65 20 64 65 66 69 6e 65   datatype define
196a0 64 20 62 65 6c 6f 77 20 69 73 20 75 73 65 64 20  d below is used 
196b0 66 6f 72 20 76 61 72 69 6f 75 73 20 6f 70 74 69  for various opti
196c0 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  mizations..**.**
196d0 20 43 68 61 6e 67 69 6e 67 20 74 68 69 73 20 66   Changing this f
196e0 72 6f 6d 20 61 20 36 34 2d 62 69 74 20 74 6f 20  rom a 64-bit to 
196f0 61 20 33 32 2d 62 69 74 20 74 79 70 65 20 6c 69  a 32-bit type li
19700 6d 69 74 73 20 74 68 65 20 6e 75 6d 62 65 72 20  mits the number 
19710 6f 66 0a 2a 2a 20 74 61 62 6c 65 73 20 69 6e 20  of.** tables in 
19720 61 20 6a 6f 69 6e 20 74 6f 20 33 32 20 69 6e 73  a join to 32 ins
19730 74 65 61 64 20 6f 66 20 36 34 2e 20 20 42 75 74  tead of 64.  But
19740 20 69 74 20 61 6c 73 6f 20 72 65 64 75 63 65 73   it also reduces
19750 20 74 68 65 20 73 69 7a 65 0a 2a 2a 20 6f 66 20   the size.** of 
19760 74 68 65 20 6c 69 62 72 61 72 79 20 62 79 20 37  the library by 7
19770 33 38 20 62 79 74 65 73 20 6f 6e 20 69 78 38 36  38 bytes on ix86
19780 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
19790 54 45 5f 42 49 54 4d 41 53 4b 5f 54 59 50 45 0a  TE_BITMASK_TYPE.
197a0 20 20 74 79 70 65 64 65 66 20 53 51 4c 49 54 45    typedef SQLITE
197b0 5f 42 49 54 4d 41 53 4b 5f 54 59 50 45 20 42 69  _BITMASK_TYPE Bi
197c0 74 6d 61 73 6b 3b 0a 23 65 6c 73 65 0a 20 20 74  tmask;.#else.  t
197d0 79 70 65 64 65 66 20 75 36 34 20 42 69 74 6d 61  ypedef u64 Bitma
197e0 73 6b 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  sk;.#endif../*.*
197f0 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  * The number of 
19800 62 69 74 73 20 69 6e 20 61 20 42 69 74 6d 61 73  bits in a Bitmas
19810 6b 2e 20 20 22 42 4d 53 22 20 6d 65 61 6e 73 20  k.  "BMS" means 
19820 22 42 69 74 4d 61 73 6b 20 53 69 7a 65 22 2e 0a  "BitMask Size"..
19830 2a 2f 0a 23 64 65 66 69 6e 65 20 42 4d 53 20 20  */.#define BMS  
19840 28 28 69 6e 74 29 28 73 69 7a 65 6f 66 28 42 69  ((int)(sizeof(Bi
19850 74 6d 61 73 6b 29 2a 38 29 29 0a 0a 2f 2a 0a 2a  tmask)*8))../*.*
19860 2a 20 41 20 62 69 74 20 69 6e 20 61 20 42 69 74  * A bit in a Bit
19870 6d 61 73 6b 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  mask.*/.#define 
19880 4d 41 53 4b 42 49 54 28 6e 29 20 20 20 28 28 28  MASKBIT(n)   (((
19890 42 69 74 6d 61 73 6b 29 31 29 3c 3c 28 6e 29 29  Bitmask)1)<<(n))
198a0 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b 42 49 54  .#define MASKBIT
198b0 33 32 28 6e 29 20 28 28 28 75 6e 73 69 67 6e 65  32(n) (((unsigne
198c0 64 20 69 6e 74 29 31 29 3c 3c 28 6e 29 29 0a 23  d int)1)<<(n)).#
198d0 64 65 66 69 6e 65 20 41 4c 4c 42 49 54 53 20 20  define ALLBITS  
198e0 20 20 20 20 28 28 42 69 74 6d 61 73 6b 29 2d 31      ((Bitmask)-1
198f0 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  )../*.** The fol
19900 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
19910 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20 46   describes the F
19920 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20  ROM clause of a 
19930 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
19940 2e 0a 2a 2a 20 45 61 63 68 20 74 61 62 6c 65 20  ..** Each table 
19950 6f 72 20 73 75 62 71 75 65 72 79 20 69 6e 20 74  or subquery in t
19960 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 69  he FROM clause i
19970 73 20 61 20 73 65 70 61 72 61 74 65 20 65 6c 65  s a separate ele
19980 6d 65 6e 74 20 6f 66 0a 2a 2a 20 74 68 65 20 53  ment of.** the S
19990 72 63 4c 69 73 74 2e 61 5b 5d 20 61 72 72 61 79  rcList.a[] array
199a0 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68 20 74 68 65  ..**.** With the
199b0 20 61 64 64 69 74 69 6f 6e 20 6f 66 20 6d 75 6c   addition of mul
199c0 74 69 70 6c 65 20 64 61 74 61 62 61 73 65 20 73  tiple database s
199d0 75 70 70 6f 72 74 2c 20 74 68 65 20 66 6f 6c 6c  upport, the foll
199e0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a  owing structure.
199f0 2a 2a 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 75  ** can also be u
19a00 73 65 64 20 74 6f 20 64 65 73 63 72 69 62 65 20  sed to describe 
19a10 61 20 70 61 72 74 69 63 75 6c 61 72 20 74 61 62  a particular tab
19a20 6c 65 20 73 75 63 68 20 61 73 20 74 68 65 20 74  le such as the t
19a30 61 62 6c 65 20 74 68 61 74 0a 2a 2a 20 69 73 20  able that.** is 
19a40 6d 6f 64 69 66 69 65 64 20 62 79 20 61 6e 20 49  modified by an I
19a50 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 2c 20 6f  NSERT, DELETE, o
19a60 72 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  r UPDATE stateme
19a70 6e 74 2e 20 20 49 6e 20 73 74 61 6e 64 61 72 64  nt.  In standard
19a80 20 53 51 4c 2c 0a 2a 2a 20 73 75 63 68 20 61 20   SQL,.** such a 
19a90 74 61 62 6c 65 20 6d 75 73 74 20 62 65 20 61 20  table must be a 
19aa0 73 69 6d 70 6c 65 20 6e 61 6d 65 3a 20 49 44 2e  simple name: ID.
19ab0 20 20 42 75 74 20 69 6e 20 53 51 4c 69 74 65 2c    But in SQLite,
19ac0 20 74 68 65 20 74 61 62 6c 65 20 63 61 6e 0a 2a   the table can.*
19ad0 2a 20 6e 6f 77 20 62 65 20 69 64 65 6e 74 69 66  * now be identif
19ae0 69 65 64 20 62 79 20 61 20 64 61 74 61 62 61 73  ied by a databas
19af0 65 20 6e 61 6d 65 2c 20 61 20 64 6f 74 2c 20 74  e name, a dot, t
19b00 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61  hen the table na
19b10 6d 65 3a 20 49 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a  me: ID.ID..**.**
19b20 20 54 68 65 20 6a 6f 69 6e 74 79 70 65 20 73 74   The jointype st
19b30 61 72 74 73 20 6f 75 74 20 73 68 6f 77 69 6e 67  arts out showing
19b40 20 74 68 65 20 6a 6f 69 6e 20 74 79 70 65 20 62   the join type b
19b50 65 74 77 65 65 6e 20 74 68 65 20 63 75 72 72 65  etween the curre
19b60 6e 74 20 74 61 62 6c 65 0a 2a 2a 20 61 6e 64 20  nt table.** and 
19b70 74 68 65 20 6e 65 78 74 20 74 61 62 6c 65 20 6f  the next table o
19b80 6e 20 74 68 65 20 6c 69 73 74 2e 20 20 54 68 65  n the list.  The
19b90 20 70 61 72 73 65 72 20 62 75 69 6c 64 73 20 74   parser builds t
19ba0 68 65 20 6c 69 73 74 20 74 68 69 73 20 77 61 79  he list this way
19bb0 2e 0a 2a 2a 20 42 75 74 20 73 71 6c 69 74 65 33  ..** But sqlite3
19bc0 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e  SrcListShiftJoin
19bd0 54 79 70 65 28 29 20 6c 61 74 65 72 20 73 68 69  Type() later shi
19be0 66 74 73 20 74 68 65 20 6a 6f 69 6e 74 79 70 65  fts the jointype
19bf0 73 20 73 6f 20 74 68 61 74 20 65 61 63 68 0a 2a  s so that each.*
19c00 2a 20 6a 6f 69 6e 74 79 70 65 20 65 78 70 72 65  * jointype expre
19c10 73 73 65 73 20 74 68 65 20 6a 6f 69 6e 20 62 65  sses the join be
19c20 74 77 65 65 6e 20 74 68 65 20 74 61 62 6c 65 20  tween the table 
19c30 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75 73  and the previous
19c40 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e   table..**.** In
19c50 20 74 68 65 20 63 6f 6c 55 73 65 64 20 66 69 65   the colUsed fie
19c60 6c 64 2c 20 74 68 65 20 68 69 67 68 2d 6f 72 64  ld, the high-ord
19c70 65 72 20 62 69 74 20 28 62 69 74 20 36 33 29 20  er bit (bit 63) 
19c80 69 73 20 73 65 74 20 69 66 20 74 68 65 20 74 61  is set if the ta
19c90 62 6c 65 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20  ble.** contains 
19ca0 6d 6f 72 65 20 74 68 61 6e 20 36 33 20 63 6f 6c  more than 63 col
19cb0 75 6d 6e 73 20 61 6e 64 20 74 68 65 20 36 34 2d  umns and the 64-
19cc0 74 68 20 6f 72 20 6c 61 74 65 72 20 63 6f 6c 75  th or later colu
19cd0 6d 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 73  mn is used..*/.s
19ce0 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 7b 0a  truct SrcList {.
19cf0 20 20 69 6e 74 20 6e 53 72 63 3b 20 20 20 20 20    int nSrc;     
19d00 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
19d10 74 61 62 6c 65 73 20 6f 72 20 73 75 62 71 75 65  tables or subque
19d20 72 69 65 73 20 69 6e 20 74 68 65 20 46 52 4f 4d  ries in the FROM
19d30 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75 33 32   clause */.  u32
19d40 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a   nAlloc;      /*
19d50 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69   Number of entri
19d60 65 73 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20  es allocated in 
19d70 61 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 73  a[] below */.  s
19d80 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74  truct SrcList_it
19d90 65 6d 20 7b 0a 20 20 20 20 53 63 68 65 6d 61 20  em {.    Schema 
19da0 2a 70 53 63 68 65 6d 61 3b 20 20 2f 2a 20 53 63  *pSchema;  /* Sc
19db0 68 65 6d 61 20 74 6f 20 77 68 69 63 68 20 74 68  hema to which th
19dc0 69 73 20 69 74 65 6d 20 69 73 20 66 69 78 65 64  is item is fixed
19dd0 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 44   */.    char *zD
19de0 61 74 61 62 61 73 65 3b 20 20 2f 2a 20 4e 61 6d  atabase;  /* Nam
19df0 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f  e of database ho
19e00 6c 64 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65  lding this table
19e10 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e   */.    char *zN
19e20 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d  ame;      /* Nam
19e30 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 2a  e of the table *
19e40 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 41 6c 69  /.    char *zAli
19e50 61 73 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 22  as;     /* The "
19e60 42 22 20 70 61 72 74 20 6f 66 20 61 20 22 41 20  B" part of a "A 
19e70 41 53 20 42 22 20 70 68 72 61 73 65 2e 20 20 7a  AS B" phrase.  z
19e80 4e 61 6d 65 20 69 73 20 74 68 65 20 22 41 22 20  Name is the "A" 
19e90 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54  */.    Table *pT
19ea0 61 62 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 53  ab;      /* An S
19eb0 51 4c 20 74 61 62 6c 65 20 63 6f 72 72 65 73 70  QL table corresp
19ec0 6f 6e 64 69 6e 67 20 74 6f 20 7a 4e 61 6d 65 20  onding to zName 
19ed0 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70  */.    Select *p
19ee0 53 65 6c 65 63 74 3b 20 20 2f 2a 20 41 20 53 45  Select;  /* A SE
19ef0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 75  LECT statement u
19f00 73 65 64 20 69 6e 20 70 6c 61 63 65 20 6f 66 20  sed in place of 
19f10 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a  a table name */.
19f20 20 20 20 20 69 6e 74 20 61 64 64 72 46 69 6c 6c      int addrFill
19f30 53 75 62 3b 20 20 2f 2a 20 41 64 64 72 65 73 73  Sub;  /* Address
19f40 20 6f 66 20 73 75 62 72 6f 75 74 69 6e 65 20 74   of subroutine t
19f50 6f 20 6d 61 6e 69 66 65 73 74 20 61 20 73 75 62  o manifest a sub
19f60 71 75 65 72 79 20 2a 2f 0a 20 20 20 20 69 6e 74  query */.    int
19f70 20 72 65 67 52 65 74 75 72 6e 3b 20 20 20 20 2f   regReturn;    /
19f80 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69  * Register holdi
19f90 6e 67 20 72 65 74 75 72 6e 20 61 64 64 72 65 73  ng return addres
19fa0 73 20 6f 66 20 61 64 64 72 46 69 6c 6c 53 75 62  s of addrFillSub
19fb0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52   */.    int regR
19fc0 65 73 75 6c 74 3b 20 20 20 20 2f 2a 20 52 65 67  esult;    /* Reg
19fd0 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 72  isters holding r
19fe0 65 73 75 6c 74 73 20 6f 66 20 61 20 63 6f 2d 72  esults of a co-r
19ff0 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20 73 74  outine */.    st
1a000 72 75 63 74 20 7b 0a 20 20 20 20 20 20 75 38 20  ruct {.      u8 
1a010 6a 6f 69 6e 74 79 70 65 3b 20 20 20 20 20 20 2f  jointype;      /
1a020 2a 20 54 79 70 65 20 6f 66 20 6a 6f 69 6e 20 62  * Type of join b
1a030 65 74 77 65 65 6e 20 74 68 69 73 20 74 61 62 6c  etween this tabl
1a040 65 20 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f  e and the previo
1a050 75 73 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69  us */.      unsi
1a060 67 6e 65 64 20 6e 6f 74 49 6e 64 65 78 65 64 20  gned notIndexed 
1a070 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69  :1;    /* True i
1a080 66 20 74 68 65 72 65 20 69 73 20 61 20 4e 4f 54  f there is a NOT
1a090 20 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65 20   INDEXED clause 
1a0a0 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65  */.      unsigne
1a0b0 64 20 69 73 49 6e 64 65 78 65 64 42 79 20 3a 31  d isIndexedBy :1
1a0c0 3b 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74  ;   /* True if t
1a0d0 68 65 72 65 20 69 73 20 61 6e 20 49 4e 44 45 58  here is an INDEX
1a0e0 45 44 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a  ED BY clause */.
1a0f0 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69        unsigned i
1a100 73 54 61 62 46 75 6e 63 20 3a 31 3b 20 20 20 20  sTabFunc :1;    
1a110 20 2f 2a 20 54 72 75 65 20 69 66 20 74 61 62 6c   /* True if tabl
1a120 65 2d 76 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f  e-valued-functio
1a130 6e 20 73 79 6e 74 61 78 20 2a 2f 0a 20 20 20 20  n syntax */.    
1a140 20 20 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 72    unsigned isCor
1a150 72 65 6c 61 74 65 64 20 3a 31 3b 20 20 2f 2a 20  related :1;  /* 
1a160 54 72 75 65 20 69 66 20 73 75 62 2d 71 75 65 72  True if sub-quer
1a170 79 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64 20  y is correlated 
1a180 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65  */.      unsigne
1a190 64 20 76 69 61 43 6f 72 6f 75 74 69 6e 65 20 3a  d viaCoroutine :
1a1a0 31 3b 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74  1;  /* Implement
1a1b0 65 64 20 61 73 20 61 20 63 6f 2d 72 6f 75 74 69  ed as a co-routi
1a1c0 6e 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69  ne */.      unsi
1a1d0 67 6e 65 64 20 69 73 52 65 63 75 72 73 69 76 65  gned isRecursive
1a1e0 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 66   :1;   /* True f
1a1f0 6f 72 20 72 65 63 75 72 73 69 76 65 20 72 65 66  or recursive ref
1a200 65 72 65 6e 63 65 20 69 6e 20 57 49 54 48 20 2a  erence in WITH *
1a210 2f 0a 20 20 20 20 7d 20 66 67 3b 0a 23 69 66 6e  /.    } fg;.#ifn
1a220 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1a230 45 58 50 4c 41 49 4e 0a 20 20 20 20 75 38 20 69  EXPLAIN.    u8 i
1a240 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20 2f 2a  SelectId;     /*
1a250 20 49 66 20 70 53 65 6c 65 63 74 21 3d 30 2c 20   If pSelect!=0, 
1a260 74 68 65 20 69 64 20 6f 66 20 74 68 65 20 73 75  the id of the su
1a270 62 2d 73 65 6c 65 63 74 20 69 6e 20 45 51 50 20  b-select in EQP 
1a280 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 6e  */.#endif.    in
1a290 74 20 69 43 75 72 73 6f 72 3b 20 20 20 20 20 20  t iCursor;      
1a2a0 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72 73  /* The VDBE curs
1a2b0 6f 72 20 6e 75 6d 62 65 72 20 75 73 65 64 20 74  or number used t
1a2c0 6f 20 61 63 63 65 73 73 20 74 68 69 73 20 74 61  o access this ta
1a2d0 62 6c 65 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  ble */.    Expr 
1a2e0 2a 70 4f 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20  *pOn;        /* 
1a2f0 54 68 65 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66  The ON clause of
1a300 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49   a join */.    I
1a310 64 4c 69 73 74 20 2a 70 55 73 69 6e 67 3b 20 20  dList *pUsing;  
1a320 20 2f 2a 20 54 68 65 20 55 53 49 4e 47 20 63 6c   /* The USING cl
1a330 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a  ause of a join *
1a340 2f 0a 20 20 20 20 42 69 74 6d 61 73 6b 20 63 6f  /.    Bitmask co
1a350 6c 55 73 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e  lUsed;  /* Bit N
1a360 20 28 31 3c 3c 4e 29 20 73 65 74 20 69 66 20 63   (1<<N) set if c
1a370 6f 6c 75 6d 6e 20 4e 20 6f 66 20 70 54 61 62 20  olumn N of pTab 
1a380 69 73 20 75 73 65 64 20 2a 2f 0a 20 20 20 20 75  is used */.    u
1a390 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20 63 68 61  nion {.      cha
1a3a0 72 20 2a 7a 49 6e 64 65 78 65 64 42 79 3b 20 20  r *zIndexedBy;  
1a3b0 20 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 20    /* Identifier 
1a3c0 66 72 6f 6d 20 22 49 4e 44 45 58 45 44 20 42 59  from "INDEXED BY
1a3d0 20 3c 7a 49 6e 64 65 78 3e 22 20 63 6c 61 75 73   <zIndex>" claus
1a3e0 65 20 2a 2f 0a 20 20 20 20 20 20 45 78 70 72 4c  e */.      ExprL
1a3f0 69 73 74 20 2a 70 46 75 6e 63 41 72 67 3b 20 20  ist *pFuncArg;  
1a400 2f 2a 20 41 72 67 75 6d 65 6e 74 73 20 74 6f 20  /* Arguments to 
1a410 74 61 62 6c 65 2d 76 61 6c 75 65 64 2d 66 75 6e  table-valued-fun
1a420 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 7d 20 75  ction */.    } u
1a430 31 3b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49  1;.    Index *pI
1a440 42 49 6e 64 65 78 3b 20 20 2f 2a 20 49 6e 64 65  BIndex;  /* Inde
1a450 78 20 73 74 72 75 63 74 75 72 65 20 63 6f 72 72  x structure corr
1a460 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 75 31 2e  esponding to u1.
1a470 7a 49 6e 64 65 78 65 64 42 79 20 2a 2f 0a 20 20  zIndexedBy */.  
1a480 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20 20  } a[1];         
1a490 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79      /* One entry
1a4a0 20 66 6f 72 20 65 61 63 68 20 69 64 65 6e 74 69   for each identi
1a4b0 66 69 65 72 20 6f 6e 20 74 68 65 20 6c 69 73 74  fier on the list
1a4c0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65   */.};../*.** Pe
1a4d0 72 6d 69 74 74 65 64 20 76 61 6c 75 65 73 20 6f  rmitted values o
1a4e0 66 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61 2e  f the SrcList.a.
1a4f0 6a 6f 69 6e 74 79 70 65 20 66 69 65 6c 64 0a 2a  jointype field.*
1a500 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 49 4e 4e  /.#define JT_INN
1a510 45 52 20 20 20 20 20 30 78 30 30 30 31 20 20 20  ER     0x0001   
1a520 20 2f 2a 20 41 6e 79 20 6b 69 6e 64 20 6f 66 20   /* Any kind of 
1a530 69 6e 6e 65 72 20 6f 72 20 63 72 6f 73 73 20 6a  inner or cross j
1a540 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  oin */.#define J
1a550 54 5f 43 52 4f 53 53 20 20 20 20 20 30 78 30 30  T_CROSS     0x00
1a560 30 32 20 20 20 20 2f 2a 20 45 78 70 6c 69 63 69  02    /* Explici
1a570 74 20 75 73 65 20 6f 66 20 74 68 65 20 43 52 4f  t use of the CRO
1a580 53 53 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64  SS keyword */.#d
1a590 65 66 69 6e 65 20 4a 54 5f 4e 41 54 55 52 41 4c  efine JT_NATURAL
1a5a0 20 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20     0x0004    /* 
1a5b0 54 72 75 65 20 66 6f 72 20 61 20 22 6e 61 74 75  True for a "natu
1a5c0 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  ral" join */.#de
1a5d0 66 69 6e 65 20 4a 54 5f 4c 45 46 54 20 20 20 20  fine JT_LEFT    
1a5e0 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20 4c    0x0008    /* L
1a5f0 65 66 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a  eft outer join *
1a600 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 52 49 47  /.#define JT_RIG
1a610 48 54 20 20 20 20 20 30 78 30 30 31 30 20 20 20  HT     0x0010   
1a620 20 2f 2a 20 52 69 67 68 74 20 6f 75 74 65 72 20   /* Right outer 
1a630 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
1a640 4a 54 5f 4f 55 54 45 52 20 20 20 20 20 30 78 30  JT_OUTER     0x0
1a650 30 32 30 20 20 20 20 2f 2a 20 54 68 65 20 22 4f  020    /* The "O
1a660 55 54 45 52 22 20 6b 65 79 77 6f 72 64 20 69 73  UTER" keyword is
1a670 20 70 72 65 73 65 6e 74 20 2a 2f 0a 23 64 65 66   present */.#def
1a680 69 6e 65 20 4a 54 5f 45 52 52 4f 52 20 20 20 20  ine JT_ERROR    
1a690 20 30 78 30 30 34 30 20 20 20 20 2f 2a 20 75 6e   0x0040    /* un
1a6a0 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73 75 70 70 6f  known or unsuppo
1a6b0 72 74 65 64 20 6a 6f 69 6e 20 74 79 70 65 20 2a  rted join type *
1a6c0 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20  /.../*.** Flags 
1a6d0 61 70 70 72 6f 70 72 69 61 74 65 20 66 6f 72 20  appropriate for 
1a6e0 74 68 65 20 77 63 74 72 6c 46 6c 61 67 73 20 70  the wctrlFlags p
1a6f0 61 72 61 6d 65 74 65 72 20 6f 66 20 73 71 6c 69  arameter of sqli
1a700 74 65 33 57 68 65 72 65 42 65 67 69 6e 28 29 0a  te3WhereBegin().
1a710 2a 2a 20 61 6e 64 20 74 68 65 20 57 68 65 72 65  ** and the Where
1a720 49 6e 66 6f 2e 77 63 74 72 6c 46 6c 61 67 73 20  Info.wctrlFlags 
1a730 6d 65 6d 62 65 72 2e 0a 2a 2a 0a 2a 2a 20 56 61  member..**.** Va
1a740 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  lue constraints 
1a750 28 65 6e 66 6f 72 63 65 64 20 76 69 61 20 61 73  (enforced via as
1a760 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20  sert()):.**     
1a770 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d 49 54 20  WHERE_USE_LIMIT 
1a780 20 3d 3d 20 53 46 5f 46 69 78 65 64 4c 69 6d 69   == SF_FixedLimi
1a790 74 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  t.*/.#define WHE
1a7a0 52 45 5f 4f 52 44 45 52 42 59 5f 4e 4f 52 4d 41  RE_ORDERBY_NORMA
1a7b0 4c 20 20 20 30 78 30 30 30 30 20 2f 2a 20 4e 6f  L   0x0000 /* No
1a7c0 2d 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  -op */.#define W
1a7d0 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 49 4e  HERE_ORDERBY_MIN
1a7e0 20 20 20 20 20 20 30 78 30 30 30 31 20 2f 2a 20        0x0001 /* 
1a7f0 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65 73 73  ORDER BY process
1a800 69 6e 67 20 66 6f 72 20 6d 69 6e 28 29 20 66 75  ing for min() fu
1a810 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  nc */.#define WH
1a820 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 41 58 20  ERE_ORDERBY_MAX 
1a830 20 20 20 20 20 30 78 30 30 30 32 20 2f 2a 20 4f       0x0002 /* O
1a840 52 44 45 52 20 42 59 20 70 72 6f 63 65 73 73 69  RDER BY processi
1a850 6e 67 20 66 6f 72 20 6d 61 78 28 29 20 66 75 6e  ng for max() fun
1a860 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  c */.#define WHE
1a870 52 45 5f 4f 4e 45 50 41 53 53 5f 44 45 53 49 52  RE_ONEPASS_DESIR
1a880 45 44 20 20 30 78 30 30 30 34 20 2f 2a 20 57 61  ED  0x0004 /* Wa
1a890 6e 74 20 74 6f 20 64 6f 20 6f 6e 65 2d 70 61 73  nt to do one-pas
1a8a0 73 20 55 50 44 41 54 45 2f 44 45 4c 45 54 45 20  s UPDATE/DELETE 
1a8b0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1a8c0 5f 4f 4e 45 50 41 53 53 5f 4d 55 4c 54 49 52 4f  _ONEPASS_MULTIRO
1a8d0 57 20 30 78 30 30 30 38 20 2f 2a 20 4f 4e 45 50  W 0x0008 /* ONEP
1a8e0 41 53 53 20 69 73 20 6f 6b 20 77 69 74 68 20 6d  ASS is ok with m
1a8f0 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a  ultiple rows */.
1a900 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 55  #define WHERE_DU
1a910 50 4c 49 43 41 54 45 53 5f 4f 4b 20 20 20 20 30  PLICATES_OK    0
1a920 78 30 30 31 30 20 2f 2a 20 4f 6b 20 74 6f 20 72  x0010 /* Ok to r
1a930 65 74 75 72 6e 20 61 20 72 6f 77 20 6d 6f 72 65  eturn a row more
1a940 20 74 68 61 6e 20 6f 6e 63 65 20 2a 2f 0a 23 64   than once */.#d
1a950 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 5f 53  efine WHERE_OR_S
1a960 55 42 43 4c 41 55 53 45 20 20 20 20 20 30 78 30  UBCLAUSE     0x0
1a970 30 32 30 20 2f 2a 20 50 72 6f 63 65 73 73 69 6e  020 /* Processin
1a980 67 20 61 20 73 75 62 2d 57 48 45 52 45 20 61 73  g a sub-WHERE as
1a990 20 70 61 72 74 20 6f 66 0a 20 20 20 20 20 20 20   part of.       
1a9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
1a9c0 2a 20 74 68 65 20 4f 52 20 6f 70 74 69 6d 69 7a  * the OR optimiz
1a9d0 61 74 69 6f 6e 20 20 2a 2f 0a 23 64 65 66 69 6e  ation  */.#defin
1a9e0 65 20 57 48 45 52 45 5f 47 52 4f 55 50 42 59 20  e WHERE_GROUPBY 
1a9f0 20 20 20 20 20 20 20 20 20 30 78 30 30 34 30 20           0x0040 
1aa00 2f 2a 20 70 4f 72 64 65 72 42 79 20 69 73 20 72  /* pOrderBy is r
1aa10 65 61 6c 6c 79 20 61 20 47 52 4f 55 50 20 42 59  eally a GROUP BY
1aa20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1aa30 45 5f 44 49 53 54 49 4e 43 54 42 59 20 20 20 20  E_DISTINCTBY    
1aa40 20 20 20 30 78 30 30 38 30 20 2f 2a 20 70 4f 72     0x0080 /* pOr
1aa50 64 65 72 62 79 20 69 73 20 72 65 61 6c 6c 79 20  derby is really 
1aa60 61 20 44 49 53 54 49 4e 43 54 20 63 6c 61 75 73  a DISTINCT claus
1aa70 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  e */.#define WHE
1aa80 52 45 5f 57 41 4e 54 5f 44 49 53 54 49 4e 43 54  RE_WANT_DISTINCT
1aa90 20 20 20 20 30 78 30 31 30 30 20 2f 2a 20 41 6c      0x0100 /* Al
1aaa0 6c 20 6f 75 74 70 75 74 20 6e 65 65 64 73 20 74  l output needs t
1aab0 6f 20 62 65 20 64 69 73 74 69 6e 63 74 20 2a 2f  o be distinct */
1aac0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 53  .#define WHERE_S
1aad0 4f 52 54 42 59 47 52 4f 55 50 20 20 20 20 20 20  ORTBYGROUP      
1aae0 30 78 30 32 30 30 20 2f 2a 20 53 75 70 70 6f 72  0x0200 /* Suppor
1aaf0 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73  t sqlite3WhereIs
1ab00 53 6f 72 74 65 64 28 29 20 2a 2f 0a 23 64 65 66  Sorted() */.#def
1ab10 69 6e 65 20 57 48 45 52 45 5f 53 45 45 4b 5f 54  ine WHERE_SEEK_T
1ab20 41 42 4c 45 20 20 20 20 20 20 20 30 78 30 34 30  ABLE       0x040
1ab30 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 64 65 66 65  0 /* Do not defe
1ab40 72 20 73 65 65 6b 73 20 6f 6e 20 6d 61 69 6e 20  r seeks on main 
1ab50 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65  table */.#define
1ab60 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4c   WHERE_ORDERBY_L
1ab70 49 4d 49 54 20 20 20 20 30 78 30 38 30 30 20 2f  IMIT    0x0800 /
1ab80 2a 20 4f 52 44 45 52 42 59 2b 4c 49 4d 49 54 20  * ORDERBY+LIMIT 
1ab90 6f 6e 20 74 68 65 20 69 6e 6e 65 72 20 6c 6f 6f  on the inner loo
1aba0 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  p */.#define WHE
1abb0 52 45 5f 53 45 45 4b 5f 55 4e 49 51 5f 54 41 42  RE_SEEK_UNIQ_TAB
1abc0 4c 45 20 20 30 78 31 30 30 30 20 2f 2a 20 44 6f  LE  0x1000 /* Do
1abd0 20 6e 6f 74 20 64 65 66 65 72 20 73 65 65 6b 73   not defer seeks
1abe0 20 69 66 20 75 6e 69 71 75 65 20 2a 2f 0a 20 20   if unique */.  
1abf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac00 20 20 20 20 20 20 2f 2a 20 20 20 20 20 30 78 32        /*     0x2
1ac10 30 30 30 20 20 20 20 6e 6f 74 20 63 75 72 72 65  000    not curre
1ac20 6e 74 6c 79 20 75 73 65 64 20 2a 2f 0a 23 64 65  ntly used */.#de
1ac30 66 69 6e 65 20 57 48 45 52 45 5f 55 53 45 5f 4c  fine WHERE_USE_L
1ac40 49 4d 49 54 20 20 20 20 20 20 20 20 30 78 34 30  IMIT        0x40
1ac50 30 30 20 2f 2a 20 55 73 65 20 74 68 65 20 4c 49  00 /* Use the LI
1ac60 4d 49 54 20 69 6e 20 63 6f 73 74 20 65 73 74 69  MIT in cost esti
1ac70 6d 61 74 65 73 20 2a 2f 0a 20 20 20 20 20 20 20  mates */.       
1ac80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac90 20 2f 2a 20 20 20 20 20 30 78 38 30 30 30 20 20   /*     0x8000  
1aca0 20 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20    not currently 
1acb0 75 73 65 64 20 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f  used */../* Allo
1acc0 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65  wed return value
1acd0 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 57 68  s from sqlite3Wh
1ace0 65 72 65 49 73 44 69 73 74 69 6e 63 74 28 29 0a  ereIsDistinct().
1acf0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1ad00 5f 44 49 53 54 49 4e 43 54 5f 4e 4f 4f 50 20 20  _DISTINCT_NOOP  
1ad10 20 20 20 20 30 20 20 2f 2a 20 44 49 53 54 49 4e      0  /* DISTIN
1ad20 43 54 20 6b 65 79 77 6f 72 64 20 6e 6f 74 20 75  CT keyword not u
1ad30 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  sed */.#define W
1ad40 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e  HERE_DISTINCT_UN
1ad50 49 51 55 45 20 20 20 20 31 20 20 2f 2a 20 4e 6f  IQUE    1  /* No
1ad60 20 64 75 70 6c 69 63 61 74 65 73 20 2a 2f 0a 23   duplicates */.#
1ad70 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
1ad80 54 49 4e 43 54 5f 4f 52 44 45 52 45 44 20 20 20  TINCT_ORDERED   
1ad90 32 20 20 2f 2a 20 41 6c 6c 20 64 75 70 6c 69 63  2  /* All duplic
1ada0 61 74 65 73 20 61 72 65 20 61 64 6a 61 63 65 6e  ates are adjacen
1adb0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  t */.#define WHE
1adc0 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 4f 52  RE_DISTINCT_UNOR
1add0 44 45 52 45 44 20 33 20 20 2f 2a 20 44 75 70 6c  DERED 3  /* Dupl
1ade0 69 63 61 74 65 73 20 61 72 65 20 73 63 61 74 74  icates are scatt
1adf0 65 72 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  ered */../*.** A
1ae00 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 64 65 66   NameContext def
1ae10 69 6e 65 73 20 61 20 63 6f 6e 74 65 78 74 20 69  ines a context i
1ae20 6e 20 77 68 69 63 68 20 74 6f 20 72 65 73 6f 6c  n which to resol
1ae30 76 65 20 74 61 62 6c 65 20 61 6e 64 20 63 6f 6c  ve table and col
1ae40 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20 54  umn.** names.  T
1ae50 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 73 69  he context consi
1ae60 73 74 73 20 6f 66 20 61 20 6c 69 73 74 20 6f 66  sts of a list of
1ae70 20 74 61 62 6c 65 73 20 28 74 68 65 20 70 53 72   tables (the pSr
1ae80 63 4c 69 73 74 29 20 66 69 65 6c 64 20 61 6e 64  cList) field and
1ae90 0a 2a 2a 20 61 20 6c 69 73 74 20 6f 66 20 6e 61  .** a list of na
1aea0 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20 28  med expression (
1aeb0 70 45 4c 69 73 74 29 2e 20 20 54 68 65 20 6e 61  pEList).  The na
1aec0 6d 65 64 20 65 78 70 72 65 73 73 69 6f 6e 20 6c  med expression l
1aed0 69 73 74 20 6d 61 79 0a 2a 2a 20 62 65 20 4e 55  ist may.** be NU
1aee0 4c 4c 2e 20 20 54 68 65 20 70 53 72 63 20 63 6f  LL.  The pSrc co
1aef0 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
1af00 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20   FROM clause of 
1af10 61 20 53 45 4c 45 43 54 20 6f 72 0a 2a 2a 20 74  a SELECT or.** t
1af20 6f 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  o the table bein
1af30 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 62 79  g operated on by
1af40 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 2c   INSERT, UPDATE,
1af50 20 6f 72 20 44 45 4c 45 54 45 2e 20 20 54 68 65   or DELETE.  The
1af60 0a 2a 2a 20 70 45 4c 69 73 74 20 63 6f 72 72 65  .** pEList corre
1af70 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 72 65  sponds to the re
1af80 73 75 6c 74 20 73 65 74 20 6f 66 20 61 20 53 45  sult set of a SE
1af90 4c 45 43 54 20 61 6e 64 20 69 73 20 4e 55 4c 4c  LECT and is NULL
1afa0 20 66 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 73 74   for.** other st
1afb0 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20  atements..**.** 
1afc0 4e 61 6d 65 43 6f 6e 74 65 78 74 73 20 63 61 6e  NameContexts can
1afd0 20 62 65 20 6e 65 73 74 65 64 2e 20 20 57 68 65   be nested.  Whe
1afe0 6e 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65  n resolving name
1aff0 73 2c 20 74 68 65 20 69 6e 6e 65 72 2d 6d 6f 73  s, the inner-mos
1b000 74 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20  t.** context is 
1b010 73 65 61 72 63 68 65 64 20 66 69 72 73 74 2e 20  searched first. 
1b020 20 49 66 20 6e 6f 20 6d 61 74 63 68 20 69 73 20   If no match is 
1b030 66 6f 75 6e 64 2c 20 74 68 65 20 6e 65 78 74 20  found, the next 
1b040 6f 75 74 65 72 0a 2a 2a 20 63 6f 6e 74 65 78 74  outer.** context
1b050 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20 49 66   is checked.  If
1b060 20 74 68 65 72 65 20 69 73 20 73 74 69 6c 6c 20   there is still 
1b070 6e 6f 20 6d 61 74 63 68 2c 20 74 68 65 20 6e 65  no match, the ne
1b080 78 74 20 63 6f 6e 74 65 78 74 0a 2a 2a 20 69 73  xt context.** is
1b090 20 63 68 65 63 6b 65 64 2e 20 20 54 68 69 73 20   checked.  This 
1b0a0 70 72 6f 63 65 73 73 20 63 6f 6e 74 69 6e 75 65  process continue
1b0b0 73 20 75 6e 74 69 6c 20 65 69 74 68 65 72 20 61  s until either a
1b0c0 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 0a   match is found.
1b0d0 2a 2a 20 6f 72 20 61 6c 6c 20 63 6f 6e 74 65 78  ** or all contex
1b0e0 74 73 20 61 72 65 20 63 68 65 63 6b 2e 20 20 57  ts are check.  W
1b0f0 68 65 6e 20 61 20 6d 61 74 63 68 20 69 73 20 66  hen a match is f
1b100 6f 75 6e 64 2c 20 74 68 65 20 6e 52 65 66 20 6d  ound, the nRef m
1b110 65 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 68 65 20  ember of.** the 
1b120 63 6f 6e 74 65 78 74 20 63 6f 6e 74 61 69 6e 69  context containi
1b130 6e 67 20 74 68 65 20 6d 61 74 63 68 20 69 73 20  ng the match is 
1b140 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a  incremented..**.
1b150 2a 2a 20 45 61 63 68 20 73 75 62 71 75 65 72 79  ** Each subquery
1b160 20 67 65 74 73 20 61 20 6e 65 77 20 4e 61 6d 65   gets a new Name
1b170 43 6f 6e 74 65 78 74 2e 20 20 54 68 65 20 70 4e  Context.  The pN
1b180 65 78 74 20 66 69 65 6c 64 20 70 6f 69 6e 74 73  ext field points
1b190 20 74 6f 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43   to the.** NameC
1b1a0 6f 6e 74 65 78 74 20 69 6e 20 74 68 65 20 70 61  ontext in the pa
1b1b0 72 65 6e 74 20 71 75 65 72 79 2e 20 20 54 68 75  rent query.  Thu
1b1c0 73 20 74 68 65 20 70 72 6f 63 65 73 73 20 6f 66  s the process of
1b1d0 20 73 63 61 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a   scanning the.**
1b1e0 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 6c 69 73   NameContext lis
1b1f0 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
1b200 20 73 65 61 72 63 68 69 6e 67 20 74 68 72 6f 75   searching throu
1b210 67 68 20 73 75 63 63 65 73 73 69 76 65 6c 79 20  gh successively 
1b220 6f 75 74 65 72 0a 2a 2a 20 73 75 62 71 75 65 72  outer.** subquer
1b230 69 65 73 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20  ies looking for 
1b240 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a 73 74 72 75  a match..*/.stru
1b250 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 7b  ct NameContext {
1b260 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65  .  Parse *pParse
1b270 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70  ;       /* The p
1b280 61 72 73 65 72 20 2a 2f 0a 20 20 53 72 63 4c 69  arser */.  SrcLi
1b290 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20  st *pSrcList;   
1b2a0 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 74  /* One or more t
1b2b0 61 62 6c 65 73 20 75 73 65 64 20 74 6f 20 72 65  ables used to re
1b2c0 73 6f 6c 76 65 20 6e 61 6d 65 73 20 2a 2f 0a 20  solve names */. 
1b2d0 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73   ExprList *pELis
1b2e0 74 3b 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61  t;    /* Optiona
1b2f0 6c 20 6c 69 73 74 20 6f 66 20 72 65 73 75 6c 74  l list of result
1b300 2d 73 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a  -set columns */.
1b310 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49    AggInfo *pAggI
1b320 6e 66 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f 72 6d  nfo;   /* Inform
1b330 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 67 67 72  ation about aggr
1b340 65 67 61 74 65 73 20 61 74 20 74 68 69 73 20 6c  egates at this l
1b350 65 76 65 6c 20 2a 2f 0a 20 20 4e 61 6d 65 43 6f  evel */.  NameCo
1b360 6e 74 65 78 74 20 2a 70 4e 65 78 74 3b 20 20 2f  ntext *pNext;  /
1b370 2a 20 4e 65 78 74 20 6f 75 74 65 72 20 6e 61 6d  * Next outer nam
1b380 65 20 63 6f 6e 74 65 78 74 2e 20 20 4e 55 4c 4c  e context.  NULL
1b390 20 66 6f 72 20 6f 75 74 65 72 6d 6f 73 74 20 2a   for outermost *
1b3a0 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20  /.  int nRef;   
1b3b0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1b3c0 65 72 20 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f  er of names reso
1b3d0 6c 76 65 64 20 62 79 20 74 68 69 73 20 63 6f 6e  lved by this con
1b3e0 74 65 78 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45  text */.  int nE
1b3f0 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  rr;            /
1b400 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f  * Number of erro
1b410 72 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 77  rs encountered w
1b420 68 69 6c 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e  hile resolving n
1b430 61 6d 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 63  ames */.  u16 nc
1b440 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 2f  Flags;         /
1b450 2a 20 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 4e  * Zero or more N
1b460 43 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65  C_* flags define
1b470 64 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f  d below */.};../
1b480 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
1b490 75 65 73 20 66 6f 72 20 74 68 65 20 4e 61 6d 65  ues for the Name
1b4a0 43 6f 6e 74 65 78 74 2c 20 6e 63 46 6c 61 67 73  Context, ncFlags
1b4b0 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 56 61   field..**.** Va
1b4c0 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  lue constraints 
1b4d0 28 61 6c 6c 20 63 68 65 63 6b 65 64 20 76 69 61  (all checked via
1b4e0 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20   assert()):.**  
1b4f0 20 20 4e 43 5f 48 61 73 41 67 67 20 20 20 20 3d    NC_HasAgg    =
1b500 3d 20 53 46 5f 48 61 73 41 67 67 0a 2a 2a 20 20  = SF_HasAgg.**  
1b510 20 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 3d    NC_MinMaxAgg =
1b520 3d 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 3d  = SF_MinMaxAgg =
1b530 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49  = SQLITE_FUNC_MI
1b540 4e 4d 41 58 0a 2a 2a 0a 2a 2f 0a 23 64 65 66 69  NMAX.**.*/.#defi
1b550 6e 65 20 4e 43 5f 41 6c 6c 6f 77 41 67 67 20 20  ne NC_AllowAgg  
1b560 30 78 30 30 30 31 20 20 2f 2a 20 41 67 67 72 65  0x0001  /* Aggre
1b570 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 61  gate functions a
1b580 72 65 20 61 6c 6c 6f 77 65 64 20 68 65 72 65 20  re allowed here 
1b590 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 50 61  */.#define NC_Pa
1b5a0 72 74 49 64 78 20 20 20 30 78 30 30 30 32 20 20  rtIdx   0x0002  
1b5b0 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c  /* True if resol
1b5c0 76 69 6e 67 20 61 20 70 61 72 74 69 61 6c 20 69  ving a partial i
1b5d0 6e 64 65 78 20 57 48 45 52 45 20 2a 2f 0a 23 64  ndex WHERE */.#d
1b5e0 65 66 69 6e 65 20 4e 43 5f 49 73 43 68 65 63 6b  efine NC_IsCheck
1b5f0 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20 54 72     0x0004  /* Tr
1b600 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20  ue if resolving 
1b610 6e 61 6d 65 73 20 69 6e 20 61 20 43 48 45 43 4b  names in a CHECK
1b620 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23   constraint */.#
1b630 64 65 66 69 6e 65 20 4e 43 5f 49 6e 41 67 67 46  define NC_InAggF
1b640 75 6e 63 20 30 78 30 30 30 38 20 20 2f 2a 20 54  unc 0x0008  /* T
1b650 72 75 65 20 69 66 20 61 6e 61 6c 79 7a 69 6e 67  rue if analyzing
1b660 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 61 6e   arguments to an
1b670 20 61 67 67 20 66 75 6e 63 20 2a 2f 0a 23 64 65   agg func */.#de
1b680 66 69 6e 65 20 4e 43 5f 48 61 73 41 67 67 20 20  fine NC_HasAgg  
1b690 20 20 30 78 30 30 31 30 20 20 2f 2a 20 4f 6e 65    0x0010  /* One
1b6a0 20 6f 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61   or more aggrega
1b6b0 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 73 65 65  te functions see
1b6c0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  n */.#define NC_
1b6d0 49 64 78 45 78 70 72 20 20 20 30 78 30 30 32 30  IdxExpr   0x0020
1b6e0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73    /* True if res
1b6f0 6f 6c 76 69 6e 67 20 63 6f 6c 75 6d 6e 73 20 6f  olving columns o
1b700 66 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a  f CREATE INDEX *
1b710 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 56 61 72  /.#define NC_Var
1b720 53 65 6c 65 63 74 20 30 78 30 30 34 30 20 20 2f  Select 0x0040  /
1b730 2a 20 41 20 63 6f 72 72 65 6c 61 74 65 64 20 73  * A correlated s
1b740 75 62 71 75 65 72 79 20 68 61 73 20 62 65 65 6e  ubquery has been
1b750 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   seen */.#define
1b760 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 30 78   NC_MinMaxAgg 0x
1b770 31 30 30 30 20 20 2f 2a 20 6d 69 6e 2f 6d 61 78  1000  /* min/max
1b780 20 61 67 67 72 65 67 61 74 65 73 20 73 65 65 6e   aggregates seen
1b790 2e 20 20 53 65 65 20 6e 6f 74 65 20 61 62 6f 76  .  See note abov
1b7a0 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  e */../*.** An i
1b7b0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
1b7c0 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
1b7d0 72 65 20 63 6f 6e 74 61 69 6e 73 20 61 6c 6c 20  re contains all 
1b7e0 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 6e  information.** n
1b7f0 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74  eeded to generat
1b800 65 20 63 6f 64 65 20 66 6f 72 20 61 20 73 69 6e  e code for a sin
1b810 67 6c 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  gle SELECT state
1b820 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 6e 4c 69 6d  ment..**.** nLim
1b830 69 74 20 69 73 20 73 65 74 20 74 6f 20 2d 31 20  it is set to -1 
1b840 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4c  if there is no L
1b850 49 4d 49 54 20 63 6c 61 75 73 65 2e 20 20 6e 4f  IMIT clause.  nO
1b860 66 66 73 65 74 20 69 73 20 73 65 74 20 74 6f 20  ffset is set to 
1b870 30 2e 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 69  0..** If there i
1b880 73 20 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65  s a LIMIT clause
1b890 2c 20 74 68 65 20 70 61 72 73 65 72 20 73 65 74  , the parser set
1b8a0 73 20 6e 4c 69 6d 69 74 20 74 6f 20 74 68 65 20  s nLimit to the 
1b8b0 76 61 6c 75 65 20 6f 66 20 74 68 65 0a 2a 2a 20  value of the.** 
1b8c0 6c 69 6d 69 74 20 61 6e 64 20 6e 4f 66 66 73 65  limit and nOffse
1b8d0 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f  t to the value o
1b8e0 66 20 74 68 65 20 6f 66 66 73 65 74 20 28 6f 72  f the offset (or
1b8f0 20 30 20 69 66 20 74 68 65 72 65 20 69 73 20 6e   0 if there is n
1b900 6f 74 0a 2a 2a 20 6f 66 66 73 65 74 29 2e 20 20  ot.** offset).  
1b910 42 75 74 20 6c 61 74 65 72 20 6f 6e 2c 20 6e 4c  But later on, nL
1b920 69 6d 69 74 20 61 6e 64 20 6e 4f 66 66 73 65 74  imit and nOffset
1b930 20 62 65 63 6f 6d 65 20 74 68 65 20 6d 65 6d 6f   become the memo
1b940 72 79 20 6c 6f 63 61 74 69 6f 6e 73 0a 2a 2a 20  ry locations.** 
1b950 69 6e 20 74 68 65 20 56 44 42 45 20 74 68 61 74  in the VDBE that
1b960 20 72 65 63 6f 72 64 20 74 68 65 20 6c 69 6d 69   record the limi
1b970 74 20 61 6e 64 20 6f 66 66 73 65 74 20 63 6f 75  t and offset cou
1b980 6e 74 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 61 64 64  nters..**.** add
1b990 72 4f 70 65 6e 45 70 68 6d 5b 5d 20 65 6e 74 72  rOpenEphm[] entr
1b9a0 69 65 73 20 63 6f 6e 74 61 69 6e 20 74 68 65 20  ies contain the 
1b9b0 61 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 4f 70  address of OP_Op
1b9c0 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f  enEphemeral opco
1b9d0 64 65 73 2e 0a 2a 2a 20 54 68 65 73 65 20 61 64  des..** These ad
1b9e0 64 72 65 73 73 65 73 20 6d 75 73 74 20 62 65 20  dresses must be 
1b9f0 73 74 6f 72 65 64 20 73 6f 20 74 68 61 74 20 77  stored so that w
1ba00 65 20 63 61 6e 20 67 6f 20 62 61 63 6b 20 61 6e  e can go back an
1ba10 64 20 66 69 6c 6c 20 69 6e 0a 2a 2a 20 74 68 65  d fill in.** the
1ba20 20 50 34 5f 4b 45 59 49 4e 46 4f 20 61 6e 64 20   P4_KEYINFO and 
1ba30 50 32 20 70 61 72 61 6d 65 74 65 72 73 20 6c 61  P2 parameters la
1ba40 74 65 72 2e 20 20 4e 65 69 74 68 65 72 20 74 68  ter.  Neither th
1ba50 65 20 4b 65 79 49 6e 66 6f 20 6e 6f 72 0a 2a 2a  e KeyInfo nor.**
1ba60 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
1ba70 6f 6c 75 6d 6e 73 20 69 6e 20 50 32 20 63 61 6e  olumns in P2 can
1ba80 20 62 65 20 63 6f 6d 70 75 74 65 64 20 61 74 20   be computed at 
1ba90 74 68 65 20 73 61 6d 65 20 74 69 6d 65 0a 2a 2a  the same time.**
1baa0 20 61 73 20 74 68 65 20 4f 50 5f 4f 70 65 6e 45   as the OP_OpenE
1bab0 70 68 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  phm instruction 
1bac0 69 73 20 63 6f 64 65 64 20 62 65 63 61 75 73 65  is coded because
1bad0 20 6e 6f 74 0a 2a 2a 20 65 6e 6f 75 67 68 20 69   not.** enough i
1bae0 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
1baf0 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64 20 71 75   the compound qu
1bb00 65 72 79 20 69 73 20 6b 6e 6f 77 6e 20 61 74 20  ery is known at 
1bb10 74 68 61 74 20 70 6f 69 6e 74 2e 0a 2a 2a 20 54  that point..** T
1bb20 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61  he KeyInfo for a
1bb30 64 64 72 4f 70 65 6e 54 72 61 6e 5b 30 5d 20 61  ddrOpenTran[0] a
1bb40 6e 64 20 5b 31 5d 20 63 6f 6e 74 61 69 6e 73 20  nd [1] contains 
1bb50 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
1bb60 63 65 73 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72  ces.** for the r
1bb70 65 73 75 6c 74 20 73 65 74 2e 20 20 54 68 65 20  esult set.  The 
1bb80 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72  KeyInfo for addr
1bb90 4f 70 65 6e 45 70 68 6d 5b 32 5d 20 63 6f 6e 74  OpenEphm[2] cont
1bba0 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a  ains collating.*
1bbb0 2a 20 73 65 71 75 65 6e 63 65 73 20 66 6f 72 20  * sequences for 
1bbc0 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  the ORDER BY cla
1bbd0 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  use..*/.struct S
1bbe0 65 6c 65 63 74 20 7b 0a 20 20 45 78 70 72 4c 69  elect {.  ExprLi
1bbf0 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 20  st *pEList;     
1bc00 20 2f 2a 20 54 68 65 20 66 69 65 6c 64 73 20 6f   /* The fields o
1bc10 66 20 74 68 65 20 72 65 73 75 6c 74 20 2a 2f 0a  f the result */.
1bc20 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20    u8 op;        
1bc30 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
1bc40 6f 66 3a 20 54 4b 5f 55 4e 49 4f 4e 20 54 4b 5f  of: TK_UNION TK_
1bc50 41 4c 4c 20 54 4b 5f 49 4e 54 45 52 53 45 43 54  ALL TK_INTERSECT
1bc60 20 54 4b 5f 45 58 43 45 50 54 20 2a 2f 0a 20 20   TK_EXCEPT */.  
1bc70 4c 6f 67 45 73 74 20 6e 53 65 6c 65 63 74 52 6f  LogEst nSelectRo
1bc80 77 3b 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61  w;     /* Estima
1bc90 74 65 64 20 6e 75 6d 62 65 72 20 6f 66 20 72 65  ted number of re
1bca0 73 75 6c 74 20 72 6f 77 73 20 2a 2f 0a 20 20 75  sult rows */.  u
1bcb0 33 32 20 73 65 6c 46 6c 61 67 73 3b 20 20 20 20  32 selFlags;    
1bcc0 20 20 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73        /* Various
1bcd0 20 53 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a   SF_* values */.
1bce0 20 20 69 6e 74 20 69 4c 69 6d 69 74 2c 20 69 4f    int iLimit, iO
1bcf0 66 66 73 65 74 3b 20 20 20 2f 2a 20 4d 65 6d 6f  ffset;   /* Memo
1bd00 72 79 20 72 65 67 69 73 74 65 72 73 20 68 6f 6c  ry registers hol
1bd10 64 69 6e 67 20 4c 49 4d 49 54 20 26 20 4f 46 46  ding LIMIT & OFF
1bd20 53 45 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a  SET counters */.
1bd30 23 69 66 20 53 45 4c 45 43 54 54 52 41 43 45 5f  #if SELECTTRACE_
1bd40 45 4e 41 42 4c 45 44 0a 20 20 63 68 61 72 20 7a  ENABLED.  char z
1bd50 53 65 6c 4e 61 6d 65 5b 31 32 5d 3b 20 20 20 20  SelName[12];    
1bd60 20 2f 2a 20 53 79 6d 62 6f 6c 69 63 20 6e 61 6d   /* Symbolic nam
1bd70 65 20 6f 66 20 74 68 69 73 20 53 45 4c 45 43 54  e of this SELECT
1bd80 20 75 73 65 20 66 6f 72 20 64 65 62 75 67 67 69   use for debuggi
1bd90 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69  ng */.#endif.  i
1bda0 6e 74 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b  nt addrOpenEphm[
1bdb0 32 5d 3b 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e  2];   /* OP_Open
1bdc0 45 70 68 65 6d 20 6f 70 63 6f 64 65 73 20 72 65  Ephem opcodes re
1bdd0 6c 61 74 65 64 20 74 6f 20 74 68 69 73 20 73 65  lated to this se
1bde0 6c 65 63 74 20 2a 2f 0a 20 20 53 72 63 4c 69 73  lect */.  SrcLis
1bdf0 74 20 2a 70 53 72 63 3b 20 20 20 20 20 20 20 20  t *pSrc;        
1be00 20 2f 2a 20 54 68 65 20 46 52 4f 4d 20 63 6c 61   /* The FROM cla
1be10 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  use */.  Expr *p
1be20 57 68 65 72 65 3b 20 20 20 20 20 20 20 20 20 20  Where;          
1be30 2f 2a 20 54 68 65 20 57 48 45 52 45 20 63 6c 61  /* The WHERE cla
1be40 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  use */.  ExprLis
1be50 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20  t *pGroupBy;    
1be60 2f 2a 20 54 68 65 20 47 52 4f 55 50 20 42 59 20  /* The GROUP BY 
1be70 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72  clause */.  Expr
1be80 20 2a 70 48 61 76 69 6e 67 3b 20 20 20 20 20 20   *pHaving;      
1be90 20 20 20 2f 2a 20 54 68 65 20 48 41 56 49 4e 47     /* The HAVING
1bea0 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70   clause */.  Exp
1beb0 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b  rList *pOrderBy;
1bec0 20 20 20 20 2f 2a 20 54 68 65 20 4f 52 44 45 52      /* The ORDER
1bed0 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20   BY clause */.  
1bee0 53 65 6c 65 63 74 20 2a 70 50 72 69 6f 72 3b 20  Select *pPrior; 
1bef0 20 20 20 20 20 20 20 2f 2a 20 50 72 69 6f 72 20         /* Prior 
1bf00 73 65 6c 65 63 74 20 69 6e 20 61 20 63 6f 6d 70  select in a comp
1bf10 6f 75 6e 64 20 73 65 6c 65 63 74 20 73 74 61 74  ound select stat
1bf20 65 6d 65 6e 74 20 2a 2f 0a 20 20 53 65 6c 65 63  ement */.  Selec
1bf30 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  t *pNext;       
1bf40 20 20 2f 2a 20 4e 65 78 74 20 73 65 6c 65 63 74    /* Next select
1bf50 20 74 6f 20 74 68 65 20 6c 65 66 74 20 69 6e 20   to the left in 
1bf60 61 20 63 6f 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20  a compound */.  
1bf70 45 78 70 72 20 2a 70 4c 69 6d 69 74 3b 20 20 20  Expr *pLimit;   
1bf80 20 20 20 20 20 20 20 2f 2a 20 4c 49 4d 49 54 20         /* LIMIT 
1bf90 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c  expression. NULL
1bfa0 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e   means not used.
1bfb0 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4f 66 66   */.  Expr *pOff
1bfc0 73 65 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  set;         /* 
1bfd0 4f 46 46 53 45 54 20 65 78 70 72 65 73 73 69 6f  OFFSET expressio
1bfe0 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f  n. NULL means no
1bff0 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20 57 69 74  t used. */.  Wit
1c000 68 20 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20  h *pWith;       
1c010 20 20 20 20 2f 2a 20 57 49 54 48 20 63 6c 61 75      /* WITH clau
1c020 73 65 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  se attached to t
1c030 68 69 73 20 73 65 6c 65 63 74 2e 20 4f 72 20 4e  his select. Or N
1c040 55 4c 4c 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ULL. */.};../*.*
1c050 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
1c060 20 66 6f 72 20 53 65 6c 65 63 74 2e 73 65 6c 46   for Select.selF
1c070 6c 61 67 73 2e 20 20 54 68 65 20 22 53 46 22 20  lags.  The "SF" 
1c080 70 72 65 66 69 78 20 73 74 61 6e 64 73 20 66 6f  prefix stands fo
1c090 72 0a 2a 2a 20 22 53 65 6c 65 63 74 20 46 6c 61  r.** "Select Fla
1c0a0 67 22 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20  g"..**.** Value 
1c0b0 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 61 6c 6c  constraints (all
1c0c0 20 63 68 65 63 6b 65 64 20 76 69 61 20 61 73 73   checked via ass
1c0d0 65 72 74 28 29 29 0a 2a 2a 20 20 20 20 20 53 46  ert()).**     SF
1c0e0 5f 48 61 73 41 67 67 20 20 20 20 20 3d 3d 20 4e  _HasAgg     == N
1c0f0 43 5f 48 61 73 41 67 67 0a 2a 2a 20 20 20 20 20  C_HasAgg.**     
1c100 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 20 3d 3d  SF_MinMaxAgg  ==
1c110 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20   NC_MinMaxAgg   
1c120 20 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43    == SQLITE_FUNC
1c130 5f 4d 49 4e 4d 41 58 0a 2a 2a 20 20 20 20 20 53  _MINMAX.**     S
1c140 46 5f 46 69 78 65 64 4c 69 6d 69 74 20 3d 3d 20  F_FixedLimit == 
1c150 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d 49 54 0a  WHERE_USE_LIMIT.
1c160 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 44 69  */.#define SF_Di
1c170 73 74 69 6e 63 74 20 20 20 20 20 20 20 30 78 30  stinct       0x0
1c180 30 30 30 31 20 20 2f 2a 20 4f 75 74 70 75 74 20  0001  /* Output 
1c190 73 68 6f 75 6c 64 20 62 65 20 44 49 53 54 49 4e  should be DISTIN
1c1a0 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  CT */.#define SF
1c1b0 5f 41 6c 6c 20 20 20 20 20 20 20 20 20 20 20 20  _All            
1c1c0 30 78 30 30 30 30 32 20 20 2f 2a 20 49 6e 63 6c  0x00002  /* Incl
1c1d0 75 64 65 73 20 74 68 65 20 41 4c 4c 20 6b 65 79  udes the ALL key
1c1e0 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  word */.#define 
1c1f0 53 46 5f 52 65 73 6f 6c 76 65 64 20 20 20 20 20  SF_Resolved     
1c200 20 20 30 78 30 30 30 30 34 20 20 2f 2a 20 49 64    0x00004  /* Id
1c210 65 6e 74 69 66 69 65 72 73 20 68 61 76 65 20 62  entifiers have b
1c220 65 65 6e 20 72 65 73 6f 6c 76 65 64 20 2a 2f 0a  een resolved */.
1c230 23 64 65 66 69 6e 65 20 53 46 5f 41 67 67 72 65  #define SF_Aggre
1c240 67 61 74 65 20 20 20 20 20 20 30 78 30 30 30 30  gate      0x0000
1c250 38 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61  8  /* Contains a
1c260 67 67 20 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20  gg functions or 
1c270 61 20 47 52 4f 55 50 20 42 59 20 2a 2f 0a 23 64  a GROUP BY */.#d
1c280 65 66 69 6e 65 20 53 46 5f 48 61 73 41 67 67 20  efine SF_HasAgg 
1c290 20 20 20 20 20 20 20 20 30 78 30 30 30 31 30 20          0x00010 
1c2a0 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67 67   /* Contains agg
1c2b0 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73  regate functions
1c2c0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 55   */.#define SF_U
1c2d0 73 65 73 45 70 68 65 6d 65 72 61 6c 20 20 30 78  sesEphemeral  0x
1c2e0 30 30 30 32 30 20 20 2f 2a 20 55 73 65 73 20 74  00020  /* Uses t
1c2f0 68 65 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  he OpenEphemeral
1c300 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 64 65 66 69   opcode */.#defi
1c310 6e 65 20 53 46 5f 45 78 70 61 6e 64 65 64 20 20  ne SF_Expanded  
1c320 20 20 20 20 20 30 78 30 30 30 34 30 20 20 2f 2a       0x00040  /*
1c330 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78   sqlite3SelectEx
1c340 70 61 6e 64 28 29 20 63 61 6c 6c 65 64 20 6f 6e  pand() called on
1c350 20 74 68 69 73 20 2a 2f 0a 23 64 65 66 69 6e 65   this */.#define
1c360 20 53 46 5f 48 61 73 54 79 70 65 49 6e 66 6f 20   SF_HasTypeInfo 
1c370 20 20 20 30 78 30 30 30 38 30 20 20 2f 2a 20 46     0x00080  /* F
1c380 52 4f 4d 20 73 75 62 71 75 65 72 69 65 73 20 68  ROM subqueries h
1c390 61 76 65 20 54 61 62 6c 65 20 6d 65 74 61 64 61  ave Table metada
1c3a0 74 61 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ta */.#define SF
1c3b0 5f 43 6f 6d 70 6f 75 6e 64 20 20 20 20 20 20 20  _Compound       
1c3c0 30 78 30 30 31 30 30 20 20 2f 2a 20 50 61 72 74  0x00100  /* Part
1c3d0 20 6f 66 20 61 20 63 6f 6d 70 6f 75 6e 64 20 71   of a compound q
1c3e0 75 65 72 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  uery */.#define 
1c3f0 53 46 5f 56 61 6c 75 65 73 20 20 20 20 20 20 20  SF_Values       
1c400 20 20 30 78 30 30 32 30 30 20 20 2f 2a 20 53 79    0x00200  /* Sy
1c410 6e 74 68 65 73 69 7a 65 64 20 66 72 6f 6d 20 56  nthesized from V
1c420 41 4c 55 45 53 20 63 6c 61 75 73 65 20 2a 2f 0a  ALUES clause */.
1c430 23 64 65 66 69 6e 65 20 53 46 5f 4d 75 6c 74 69  #define SF_Multi
1c440 56 61 6c 75 65 20 20 20 20 20 30 78 30 30 34 30  Value     0x0040
1c450 30 20 20 2f 2a 20 53 69 6e 67 6c 65 20 56 41 4c  0  /* Single VAL
1c460 55 45 53 20 74 65 72 6d 20 77 69 74 68 20 6d 75  UES term with mu
1c470 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 23  ltiple rows */.#
1c480 64 65 66 69 6e 65 20 53 46 5f 4e 65 73 74 65 64  define SF_Nested
1c490 46 72 6f 6d 20 20 20 20 20 30 78 30 30 38 30 30  From     0x00800
1c4a0 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 70    /* Part of a p
1c4b0 61 72 65 6e 74 68 65 73 69 7a 65 64 20 46 52 4f  arenthesized FRO
1c4c0 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66  M clause */.#def
1c4d0 69 6e 65 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67  ine SF_MinMaxAgg
1c4e0 20 20 20 20 20 20 30 78 30 31 30 30 30 20 20 2f        0x01000  /
1c4f0 2a 20 41 67 67 72 65 67 61 74 65 20 63 6f 6e 74  * Aggregate cont
1c500 61 69 6e 69 6e 67 20 6d 69 6e 28 29 20 6f 72 20  aining min() or 
1c510 6d 61 78 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  max() */.#define
1c520 20 53 46 5f 52 65 63 75 72 73 69 76 65 20 20 20   SF_Recursive   
1c530 20 20 20 30 78 30 32 30 30 30 20 20 2f 2a 20 54     0x02000  /* T
1c540 68 65 20 72 65 63 75 72 73 69 76 65 20 70 61 72  he recursive par
1c550 74 20 6f 66 20 61 20 72 65 63 75 72 73 69 76 65  t of a recursive
1c560 20 43 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20   CTE */.#define 
1c570 53 46 5f 46 69 78 65 64 4c 69 6d 69 74 20 20 20  SF_FixedLimit   
1c580 20 20 30 78 30 34 30 30 30 20 20 2f 2a 20 6e 53    0x04000  /* nS
1c590 65 6c 65 63 74 52 6f 77 20 73 65 74 20 62 79 20  electRow set by 
1c5a0 61 20 63 6f 6e 73 74 61 6e 74 20 4c 49 4d 49 54  a constant LIMIT
1c5b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d   */.#define SF_M
1c5c0 61 79 62 65 43 6f 6e 76 65 72 74 20 20 20 30 78  aybeConvert   0x
1c5d0 30 38 30 30 30 20 20 2f 2a 20 4e 65 65 64 20 63  08000  /* Need c
1c5e0 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65  onvertCompoundSe
1c5f0 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79 28 29  lectToSubquery()
1c600 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 43   */.#define SF_C
1c610 6f 6e 76 65 72 74 65 64 20 20 20 20 20 20 30 78  onverted      0x
1c620 31 30 30 30 30 20 20 2f 2a 20 42 79 20 63 6f 6e  10000  /* By con
1c630 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65  vertCompoundSele
1c640 63 74 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a  ctToSubquery() *
1c650 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 49 6e 63  /.#define SF_Inc
1c660 6c 75 64 65 48 69 64 64 65 6e 20 20 30 78 32 30  ludeHidden  0x20
1c670 30 30 30 20 20 2f 2a 20 49 6e 63 6c 75 64 65 20  000  /* Include 
1c680 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 69  hidden columns i
1c690 6e 20 6f 75 74 70 75 74 20 2a 2f 0a 0a 0a 2f 2a  n output */.../*
1c6a0 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 73 20  .** The results 
1c6b0 6f 66 20 61 20 53 45 4c 45 43 54 20 63 61 6e 20  of a SELECT can 
1c6c0 62 65 20 64 69 73 74 72 69 62 75 74 65 64 20 69  be distributed i
1c6d0 6e 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20  n several ways, 
1c6e0 61 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20 62 79  as defined.** by
1c6f0 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c   one of the foll
1c700 6f 77 69 6e 67 20 6d 61 63 72 6f 73 2e 20 20 54  owing macros.  T
1c710 68 65 20 22 53 52 54 22 20 70 72 65 66 69 78 20  he "SRT" prefix 
1c720 6d 65 61 6e 73 20 22 53 45 4c 45 43 54 20 52 65  means "SELECT Re
1c730 73 75 6c 74 0a 2a 2a 20 54 79 70 65 22 2e 0a 2a  sult.** Type"..*
1c740 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 55 6e 69  *.**     SRT_Uni
1c750 6f 6e 20 20 20 20 20 20 20 53 74 6f 72 65 20 72  on       Store r
1c760 65 73 75 6c 74 73 20 61 73 20 61 20 6b 65 79 20  esults as a key 
1c770 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79 20 69  in a temporary i
1c780 6e 64 65 78 0a 2a 2a 20 20 20 20 20 20 20 20 20  ndex.**         
1c790 20 20 20 20 20 20 20 20 20 20 20 20 69 64 65 6e              iden
1c7a0 74 69 66 69 65 64 20 62 79 20 70 44 65 73 74 2d  tified by pDest-
1c7b0 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20  >iSDParm..**.** 
1c7c0 20 20 20 20 53 52 54 5f 45 78 63 65 70 74 20 20      SRT_Except  
1c7d0 20 20 20 20 52 65 6d 6f 76 65 20 72 65 73 75 6c      Remove resul
1c7e0 74 73 20 66 72 6f 6d 20 74 68 65 20 74 65 6d 70  ts from the temp
1c7f0 6f 72 61 72 79 20 69 6e 64 65 78 20 70 44 65 73  orary index pDes
1c800 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a  t->iSDParm..**.*
1c810 2a 20 20 20 20 20 53 52 54 5f 45 78 69 73 74 73  *     SRT_Exists
1c820 20 20 20 20 20 20 53 74 6f 72 65 20 61 20 31 20        Store a 1 
1c830 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 70  in memory cell p
1c840 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 69 66  Dest->iSDParm if
1c850 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 20   the result.**  
1c860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c870 20 20 20 73 65 74 20 69 73 20 6e 6f 74 20 65 6d     set is not em
1c880 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  pty..**.**     S
1c890 52 54 5f 44 69 73 63 61 72 64 20 20 20 20 20 54  RT_Discard     T
1c8a0 68 72 6f 77 20 74 68 65 20 72 65 73 75 6c 74 73  hrow the results
1c8b0 20 61 77 61 79 2e 20 20 54 68 69 73 20 69 73 20   away.  This is 
1c8c0 75 73 65 64 20 62 79 20 53 45 4c 45 43 54 0a 2a  used by SELECT.*
1c8d0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1c8e0 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74 73        statements
1c8f0 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72 73   within triggers
1c900 20 77 68 6f 73 65 20 6f 6e 6c 79 20 70 75 72 70   whose only purp
1c910 6f 73 65 20 69 73 0a 2a 2a 20 20 20 20 20 20 20  ose is.**       
1c920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1c930 65 20 73 69 64 65 2d 65 66 66 65 63 74 73 20 6f  e side-effects o
1c940 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a  f functions..**.
1c950 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 65 20 61 62  ** All of the ab
1c960 6f 76 65 20 61 72 65 20 66 72 65 65 20 74 6f 20  ove are free to 
1c970 69 67 6e 6f 72 65 20 74 68 65 69 72 20 4f 52 44  ignore their ORD
1c980 45 52 20 42 59 20 63 6c 61 75 73 65 2e 20 54 68  ER BY clause. Th
1c990 6f 73 65 20 74 68 61 74 0a 2a 2a 20 66 6f 6c 6c  ose that.** foll
1c9a0 6f 77 20 6d 75 73 74 20 68 6f 6e 6f 72 20 74 68  ow must honor th
1c9b0 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
1c9c0 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  e..**.**     SRT
1c9d0 5f 4f 75 74 70 75 74 20 20 20 20 20 20 47 65 6e  _Output      Gen
1c9e0 65 72 61 74 65 20 61 20 72 6f 77 20 6f 66 20 6f  erate a row of o
1c9f0 75 74 70 75 74 20 28 75 73 69 6e 67 20 74 68 65  utput (using the
1ca00 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 0a 2a 2a   OP_ResultRow.**
1ca10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca20 20 20 20 20 20 6f 70 63 6f 64 65 29 20 66 6f 72       opcode) for
1ca30 20 65 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65   each row in the
1ca40 20 72 65 73 75 6c 74 20 73 65 74 2e 0a 2a 2a 0a   result set..**.
1ca50 2a 2a 20 20 20 20 20 53 52 54 5f 4d 65 6d 20 20  **     SRT_Mem  
1ca60 20 20 20 20 20 20 20 4f 6e 6c 79 20 76 61 6c 69         Only vali
1ca70 64 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20  d if the result 
1ca80 69 73 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75  is a single colu
1ca90 6d 6e 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  mn..**          
1caa0 20 20 20 20 20 20 20 20 20 20 20 53 74 6f 72 65             Store
1cab0 20 74 68 65 20 66 69 72 73 74 20 63 6f 6c 75 6d   the first colum
1cac0 6e 20 6f 66 20 74 68 65 20 66 69 72 73 74 20 72  n of the first r
1cad0 65 73 75 6c 74 20 72 6f 77 0a 2a 2a 20 20 20 20  esult row.**    
1cae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1caf0 20 69 6e 20 72 65 67 69 73 74 65 72 20 70 44 65   in register pDe
1cb00 73 74 2d 3e 69 53 44 50 61 72 6d 20 74 68 65 6e  st->iSDParm then
1cb10 20 61 62 61 6e 64 6f 6e 20 74 68 65 20 72 65 73   abandon the res
1cb20 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  t.**            
1cb30 20 20 20 20 20 20 20 20 20 6f 66 20 74 68 65 20           of the 
1cb40 71 75 65 72 79 2e 20 20 54 68 69 73 20 64 65 73  query.  This des
1cb50 74 69 6e 61 74 69 6f 6e 20 69 6d 70 6c 69 65 73  tination implies
1cb60 20 22 4c 49 4d 49 54 20 31 22 2e 0a 2a 2a 0a 2a   "LIMIT 1"..**.*
1cb70 2a 20 20 20 20 20 53 52 54 5f 53 65 74 20 20 20  *     SRT_Set   
1cb80 20 20 20 20 20 20 54 68 65 20 72 65 73 75 6c 74        The result
1cb90 20 6d 75 73 74 20 62 65 20 61 20 73 69 6e 67 6c   must be a singl
1cba0 65 20 63 6f 6c 75 6d 6e 2e 20 20 53 74 6f 72 65  e column.  Store
1cbb0 20 65 61 63 68 0a 2a 2a 20 20 20 20 20 20 20 20   each.**        
1cbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77               row
1cbd0 20 6f 66 20 72 65 73 75 6c 74 20 61 73 20 74 68   of result as th
1cbe0 65 20 6b 65 79 20 69 6e 20 74 61 62 6c 65 20 70  e key in table p
1cbf0 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a  Dest->iSDParm..*
1cc00 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1cc10 20 20 20 20 20 20 41 70 70 6c 79 20 74 68 65 20        Apply the 
1cc20 61 66 66 69 6e 69 74 79 20 70 44 65 73 74 2d 3e  affinity pDest->
1cc30 61 66 66 53 64 73 74 20 62 65 66 6f 72 65 20 73  affSdst before s
1cc40 74 6f 72 69 6e 67 0a 2a 2a 20 20 20 20 20 20 20  toring.**       
1cc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1cc60 73 75 6c 74 73 2e 20 20 55 73 65 64 20 74 6f 20  sults.  Used to 
1cc70 69 6d 70 6c 65 6d 65 6e 74 20 22 49 4e 20 28 53  implement "IN (S
1cc80 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a  ELECT ...)"..**.
1cc90 2a 2a 20 20 20 20 20 53 52 54 5f 45 70 68 65 6d  **     SRT_Ephem
1cca0 54 61 62 20 20 20 20 43 72 65 61 74 65 20 61 6e  Tab    Create an
1ccb0 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
1ccc0 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20   pDest->iSDParm 
1ccd0 61 6e 64 20 73 74 6f 72 65 0a 2a 2a 20 20 20 20  and store.**    
1cce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ccf0 20 74 68 65 20 72 65 73 75 6c 74 20 74 68 65 72   the result ther
1cd00 65 2e 20 54 68 65 20 63 75 72 73 6f 72 20 69 73  e. The cursor is
1cd10 20 6c 65 66 74 20 6f 70 65 6e 20 61 66 74 65 72   left open after
1cd20 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1cd30 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 69 6e          returnin
1cd40 67 2e 20 20 54 68 69 73 20 69 73 20 6c 69 6b 65  g.  This is like
1cd50 20 53 52 54 5f 54 61 62 6c 65 20 65 78 63 65 70   SRT_Table excep
1cd60 74 20 74 68 61 74 0a 2a 2a 20 20 20 20 20 20 20  t that.**       
1cd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1cd80 69 73 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 75  is destination u
1cd90 73 65 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d  ses OP_OpenEphem
1cda0 65 72 61 6c 20 74 6f 20 63 72 65 61 74 65 0a 2a  eral to create.*
1cdb0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1cdc0 20 20 20 20 20 20 74 68 65 20 74 61 62 6c 65 20        the table 
1cdd0 66 69 72 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  first..**.**    
1cde0 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20   SRT_Coroutine  
1cdf0 20 47 65 6e 65 72 61 74 65 20 61 20 63 6f 2d 72   Generate a co-r
1ce00 6f 75 74 69 6e 65 20 74 68 61 74 20 72 65 74 75  outine that retu
1ce10 72 6e 73 20 61 20 6e 65 77 20 72 6f 77 20 6f 66  rns a new row of
1ce20 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1ce30 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 73 20          results 
1ce40 65 61 63 68 20 74 69 6d 65 20 69 74 20 69 73 20  each time it is 
1ce50 69 6e 76 6f 6b 65 64 2e 20 20 54 68 65 20 65 6e  invoked.  The en
1ce60 74 72 79 20 70 6f 69 6e 74 0a 2a 2a 20 20 20 20  try point.**    
1ce70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce80 20 6f 66 20 74 68 65 20 63 6f 2d 72 6f 75 74 69   of the co-routi
1ce90 6e 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ne is stored in 
1cea0 72 65 67 69 73 74 65 72 20 70 44 65 73 74 2d 3e  register pDest->
1ceb0 69 53 44 50 61 72 6d 0a 2a 2a 20 20 20 20 20 20  iSDParm.**      
1cec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
1ced0 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 72 6f  nd the result ro
1cee0 77 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 70  w is stored in p
1cef0 44 65 73 74 2d 3e 6e 44 65 73 74 20 72 65 67 69  Dest->nDest regi
1cf00 73 74 65 72 73 0a 2a 2a 20 20 20 20 20 20 20 20  sters.**        
1cf10 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61               sta
1cf20 72 74 69 6e 67 20 77 69 74 68 20 70 44 65 73 74  rting with pDest
1cf30 2d 3e 69 53 64 73 74 2e 0a 2a 2a 0a 2a 2a 20 20  ->iSdst..**.**  
1cf40 20 20 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20     SRT_Table    
1cf50 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73     Store results
1cf60 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 74 61   in temporary ta
1cf70 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ble pDest->iSDPa
1cf80 72 6d 2e 0a 2a 2a 20 20 20 20 20 53 52 54 5f 46  rm..**     SRT_F
1cf90 69 66 6f 20 20 20 20 20 20 20 20 54 68 69 73 20  ifo        This 
1cfa0 69 73 20 6c 69 6b 65 20 53 52 54 5f 45 70 68 65  is like SRT_Ephe
1cfb0 6d 54 61 62 20 65 78 63 65 70 74 20 74 68 61 74  mTab except that
1cfc0 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 20 20   the table.**   
1cfd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cfe0 20 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20    is assumed to 
1cff0 61 6c 72 65 61 64 79 20 62 65 20 6f 70 65 6e 2e  already be open.
1d000 20 20 53 52 54 5f 46 69 66 6f 20 68 61 73 0a 2a    SRT_Fifo has.*
1d010 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1d020 20 20 20 20 20 20 74 68 65 20 61 64 64 69 74 69        the additi
1d030 6f 6e 61 6c 20 70 72 6f 70 65 72 74 79 20 6f 66  onal property of
1d040 20 62 65 69 6e 67 20 61 62 6c 65 20 74 6f 20 69   being able to i
1d050 67 6e 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20 20  gnore.**        
1d060 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
1d070 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
1d080 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1d090 44 69 73 74 46 69 66 6f 20 20 20 20 53 74 6f 72  DistFifo    Stor
1d0a0 65 20 72 65 73 75 6c 74 73 20 69 6e 20 61 20 74  e results in a t
1d0b0 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70  emporary table p
1d0c0 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a  Dest->iSDParm..*
1d0d0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1d0e0 20 20 20 20 20 20 42 75 74 20 61 6c 73 6f 20 75        But also u
1d0f0 73 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  se temporary tab
1d100 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  le pDest->iSDPar
1d110 6d 2b 31 20 61 73 0a 2a 2a 20 20 20 20 20 20 20  m+1 as.**       
1d120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 20                a 
1d130 72 65 63 6f 72 64 20 6f 66 20 61 6c 6c 20 70 72  record of all pr
1d140 69 6f 72 20 72 65 73 75 6c 74 73 20 61 6e 64 20  ior results and 
1d150 69 67 6e 6f 72 65 20 61 6e 79 20 64 75 70 6c 69  ignore any dupli
1d160 63 61 74 65 0a 2a 2a 20 20 20 20 20 20 20 20 20  cate.**         
1d170 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 73              rows
1d180 2e 20 20 4e 61 6d 65 20 6d 65 61 6e 73 3a 20 20  .  Name means:  
1d190 22 44 69 73 74 69 6e 63 74 20 46 69 66 6f 22 2e  "Distinct Fifo".
1d1a0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 51  .**.**     SRT_Q
1d1b0 75 65 75 65 20 20 20 20 20 20 20 53 74 6f 72 65  ueue       Store
1d1c0 20 72 65 73 75 6c 74 73 20 69 6e 20 70 72 69 6f   results in prio
1d1d0 72 69 74 79 20 71 75 65 75 65 20 70 44 65 73 74  rity queue pDest
1d1e0 2d 3e 69 53 44 50 61 72 6d 20 28 72 65 61 6c 6c  ->iSDParm (reall
1d1f0 79 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  y.**            
1d200 20 20 20 20 20 20 20 20 20 61 6e 20 69 6e 64 65           an inde
1d210 78 29 2e 20 20 41 70 70 65 6e 64 20 61 20 73 65  x).  Append a se
1d220 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 73 6f  quence number so
1d230 20 74 68 61 74 20 61 6c 6c 20 65 6e 74 72 69 65   that all entrie
1d240 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  s.**            
1d250 20 20 20 20 20 20 20 20 20 61 72 65 20 64 69 73           are dis
1d260 74 69 6e 63 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  tinct..**.**    
1d270 20 53 52 54 5f 44 69 73 74 51 75 65 75 65 20 20   SRT_DistQueue  
1d280 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69   Store results i
1d290 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65 75 65  n priority queue
1d2a0 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20   pDest->iSDParm 
1d2b0 6f 6e 6c 79 20 69 66 0a 2a 2a 20 20 20 20 20 20  only if.**      
1d2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1d2d0 68 65 20 73 61 6d 65 20 72 65 63 6f 72 64 20 68  he same record h
1d2e0 61 73 20 6e 65 76 65 72 20 62 65 65 6e 20 73 74  as never been st
1d2f0 6f 72 65 64 20 62 65 66 6f 72 65 2e 20 20 54 68  ored before.  Th
1d300 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
1d310 20 20 20 20 20 20 20 20 20 69 6e 64 65 78 20 61           index a
1d320 74 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  t pDest->iSDParm
1d330 2b 31 20 68 6f 6c 64 20 61 6c 6c 20 70 72 69 6f  +1 hold all prio
1d340 72 20 73 74 6f 72 65 73 2e 0a 2a 2f 0a 23 64 65  r stores..*/.#de
1d350 66 69 6e 65 20 53 52 54 5f 55 6e 69 6f 6e 20 20  fine SRT_Union  
1d360 20 20 20 20 20 20 31 20 20 2f 2a 20 53 74 6f 72        1  /* Stor
1d370 65 20 72 65 73 75 6c 74 20 61 73 20 6b 65 79 73  e result as keys
1d380 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a   in an index */.
1d390 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78 63 65  #define SRT_Exce
1d3a0 70 74 20 20 20 20 20 20 20 32 20 20 2f 2a 20 52  pt       2  /* R
1d3b0 65 6d 6f 76 65 20 72 65 73 75 6c 74 20 66 72 6f  emove result fro
1d3c0 6d 20 61 20 55 4e 49 4f 4e 20 69 6e 64 65 78 20  m a UNION index 
1d3d0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45  */.#define SRT_E
1d3e0 78 69 73 74 73 20 20 20 20 20 20 20 33 20 20 2f  xists       3  /
1d3f0 2a 20 53 74 6f 72 65 20 31 20 69 66 20 74 68 65  * Store 1 if the
1d400 20 72 65 73 75 6c 74 20 69 73 20 6e 6f 74 20 65   result is not e
1d410 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mpty */.#define 
1d420 53 52 54 5f 44 69 73 63 61 72 64 20 20 20 20 20  SRT_Discard     
1d430 20 34 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 73 61   4  /* Do not sa
1d440 76 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 61  ve the results a
1d450 6e 79 77 68 65 72 65 20 2a 2f 0a 23 64 65 66 69  nywhere */.#defi
1d460 6e 65 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20  ne SRT_Fifo     
1d470 20 20 20 20 35 20 20 2f 2a 20 53 74 6f 72 65 20      5  /* Store 
1d480 72 65 73 75 6c 74 20 61 73 20 64 61 74 61 20 77  result as data w
1d490 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63  ith an automatic
1d4a0 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e   rowid */.#defin
1d4b0 65 20 53 52 54 5f 44 69 73 74 46 69 66 6f 20 20  e SRT_DistFifo  
1d4c0 20 20 20 36 20 20 2f 2a 20 4c 69 6b 65 20 53 52     6  /* Like SR
1d4d0 54 5f 46 69 66 6f 2c 20 62 75 74 20 75 6e 69 71  T_Fifo, but uniq
1d4e0 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20  ue results only 
1d4f0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 51  */.#define SRT_Q
1d500 75 65 75 65 20 20 20 20 20 20 20 20 37 20 20 2f  ueue        7  /
1d510 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69  * Store result i
1d520 6e 20 61 6e 20 71 75 65 75 65 20 2a 2f 0a 23 64  n an queue */.#d
1d530 65 66 69 6e 65 20 53 52 54 5f 44 69 73 74 51 75  efine SRT_DistQu
1d540 65 75 65 20 20 20 20 38 20 20 2f 2a 20 4c 69 6b  eue    8  /* Lik
1d550 65 20 53 52 54 5f 51 75 65 75 65 2c 20 62 75 74  e SRT_Queue, but
1d560 20 75 6e 69 71 75 65 20 72 65 73 75 6c 74 73 20   unique results 
1d570 6f 6e 6c 79 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20  only */../* The 
1d580 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20  ORDER BY clause 
1d590 69 73 20 69 67 6e 6f 72 65 64 20 66 6f 72 20 61  is ignored for a
1d5a0 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20  ll of the above 
1d5b0 2a 2f 0a 23 64 65 66 69 6e 65 20 49 67 6e 6f 72  */.#define Ignor
1d5c0 61 62 6c 65 4f 72 64 65 72 62 79 28 58 29 20 28  ableOrderby(X) (
1d5d0 28 58 2d 3e 65 44 65 73 74 29 3c 3d 53 52 54 5f  (X->eDest)<=SRT_
1d5e0 44 69 73 74 51 75 65 75 65 29 0a 0a 23 64 65 66  DistQueue)..#def
1d5f0 69 6e 65 20 53 52 54 5f 4f 75 74 70 75 74 20 20  ine SRT_Output  
1d600 20 20 20 20 20 39 20 20 2f 2a 20 4f 75 74 70 75       9  /* Outpu
1d610 74 20 65 61 63 68 20 72 6f 77 20 6f 66 20 72 65  t each row of re
1d620 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  sult */.#define 
1d630 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20  SRT_Mem         
1d640 31 30 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73  10  /* Store res
1d650 75 6c 74 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20  ult in a memory 
1d660 63 65 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  cell */.#define 
1d670 53 52 54 5f 53 65 74 20 20 20 20 20 20 20 20 20  SRT_Set         
1d680 31 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73  11  /* Store res
1d690 75 6c 74 73 20 61 73 20 6b 65 79 73 20 69 6e 20  ults as keys in 
1d6a0 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  an index */.#def
1d6b0 69 6e 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62  ine SRT_EphemTab
1d6c0 20 20 20 20 31 32 20 20 2f 2a 20 43 72 65 61 74      12  /* Creat
1d6d0 65 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 20  e transient tab 
1d6e0 61 6e 64 20 73 74 6f 72 65 20 6c 69 6b 65 20 53  and store like S
1d6f0 52 54 5f 54 61 62 6c 65 20 2a 2f 0a 23 64 65 66  RT_Table */.#def
1d700 69 6e 65 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e  ine SRT_Coroutin
1d710 65 20 20 20 31 33 20 20 2f 2a 20 47 65 6e 65 72  e   13  /* Gener
1d720 61 74 65 20 61 20 73 69 6e 67 6c 65 20 72 6f 77  ate a single row
1d730 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64   of result */.#d
1d740 65 66 69 6e 65 20 53 52 54 5f 54 61 62 6c 65 20  efine SRT_Table 
1d750 20 20 20 20 20 20 31 34 20 20 2f 2a 20 53 74 6f        14  /* Sto
1d760 72 65 20 72 65 73 75 6c 74 20 61 73 20 64 61 74  re result as dat
1d770 61 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61  a with an automa
1d780 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a 0a 2f 2a  tic rowid */../*
1d790 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
1d7a0 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20 64  of this object d
1d7b0 65 73 63 72 69 62 65 73 20 77 68 65 72 65 20 74  escribes where t
1d7c0 6f 20 70 75 74 20 6f 66 20 74 68 65 20 72 65 73  o put of the res
1d7d0 75 6c 74 73 20 6f 66 0a 2a 2a 20 61 20 53 45 4c  ults of.** a SEL
1d7e0 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a  ECT statement..*
1d7f0 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74 44  /.struct SelectD
1d800 65 73 74 20 7b 0a 20 20 75 38 20 65 44 65 73 74  est {.  u8 eDest
1d810 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1d820 48 6f 77 20 74 6f 20 64 69 73 70 6f 73 65 20 6f  How to dispose o
1d830 66 20 74 68 65 20 72 65 73 75 6c 74 73 2e 20 20  f the results.  
1d840 4f 6e 20 6f 66 20 53 52 54 5f 2a 20 61 62 6f 76  On of SRT_* abov
1d850 65 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41  e. */.  char *zA
1d860 66 66 53 64 73 74 3b 20 20 20 20 20 20 2f 2a 20  ffSdst;      /* 
1d870 41 66 66 69 6e 69 74 79 20 75 73 65 64 20 77 68  Affinity used wh
1d880 65 6e 20 65 44 65 73 74 3d 3d 53 52 54 5f 53 65  en eDest==SRT_Se
1d890 74 20 2a 2f 0a 20 20 69 6e 74 20 69 53 44 50 61  t */.  int iSDPa
1d8a0 72 6d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  rm;         /* A
1d8b0 20 70 61 72 61 6d 65 74 65 72 20 75 73 65 64 20   parameter used 
1d8c0 62 79 20 74 68 65 20 65 44 65 73 74 20 64 69 73  by the eDest dis
1d8d0 70 6f 73 61 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a  posal method */.
1d8e0 20 20 69 6e 74 20 69 53 64 73 74 3b 20 20 20 20    int iSdst;    
1d8f0 20 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72         /* Base r
1d900 65 67 69 73 74 65 72 20 77 68 65 72 65 20 72 65  egister where re
1d910 73 75 6c 74 73 20 61 72 65 20 77 72 69 74 74 65  sults are writte
1d920 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 64 73 74  n */.  int nSdst
1d930 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
1d940 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74 65  umber of registe
1d950 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a  rs allocated */.
1d960 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64    ExprList *pOrd
1d970 65 72 42 79 3b 20 20 2f 2a 20 4b 65 79 20 63 6f  erBy;  /* Key co
1d980 6c 75 6d 6e 73 20 66 6f 72 20 53 52 54 5f 51 75  lumns for SRT_Qu
1d990 65 75 65 20 61 6e 64 20 53 52 54 5f 44 69 73 74  eue and SRT_Dist
1d9a0 51 75 65 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  Queue */.};../*.
1d9b0 2a 2a 20 44 75 72 69 6e 67 20 63 6f 64 65 20 67  ** During code g
1d9c0 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 73 74 61  eneration of sta
1d9d0 74 65 6d 65 6e 74 73 20 74 68 61 74 20 64 6f 20  tements that do 
1d9e0 69 6e 73 65 72 74 73 20 69 6e 74 6f 20 41 55 54  inserts into AUT
1d9f0 4f 49 4e 43 52 45 4d 45 4e 54 0a 2a 2a 20 74 61  OINCREMENT.** ta
1da00 62 6c 65 73 2c 20 74 68 65 20 66 6f 6c 6c 6f 77  bles, the follow
1da10 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ing information 
1da20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74  is attached to t
1da30 68 65 20 54 61 62 6c 65 2e 75 2e 61 75 74 6f 49  he Table.u.autoI
1da40 6e 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74 65 72 20  nc.p.** pointer 
1da50 6f 66 20 65 61 63 68 20 61 75 74 6f 69 6e 63 72  of each autoincr
1da60 65 6d 65 6e 74 20 74 61 62 6c 65 20 74 6f 20 72  ement table to r
1da70 65 63 6f 72 64 20 73 6f 6d 65 20 73 69 64 65 20  ecord some side 
1da80 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74  information that
1da90 0a 2a 2a 20 74 68 65 20 63 6f 64 65 20 67 65 6e  .** the code gen
1daa0 65 72 61 74 6f 72 20 6e 65 65 64 73 2e 20 20 57  erator needs.  W
1dab0 65 20 68 61 76 65 20 74 6f 20 6b 65 65 70 20 70  e have to keep p
1dac0 65 72 2d 74 61 62 6c 65 20 61 75 74 6f 69 6e 63  er-table autoinc
1dad0 72 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d  rement.** inform
1dae0 61 74 69 6f 6e 20 69 6e 20 63 61 73 65 20 69 6e  ation in case in
1daf0 73 65 72 74 73 20 61 72 65 20 64 6f 6e 65 20 77  serts are done w
1db00 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 2e 20  ithin triggers. 
1db10 20 54 72 69 67 67 65 72 73 20 64 6f 20 6e 6f 74   Triggers do not
1db20 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f  .** normally coo
1db30 72 64 69 6e 61 74 65 20 74 68 65 69 72 20 61 63  rdinate their ac
1db40 74 69 76 69 74 69 65 73 2c 20 62 75 74 20 77 65  tivities, but we
1db50 20 64 6f 20 6e 65 65 64 20 74 6f 20 63 6f 6f 72   do need to coor
1db60 64 69 6e 61 74 65 20 74 68 65 0a 2a 2a 20 6c 6f  dinate the.** lo
1db70 61 64 69 6e 67 20 61 6e 64 20 73 61 76 69 6e 67  ading and saving
1db80 20 6f 66 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e   of autoincremen
1db90 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  t information..*
1dba0 2f 0a 73 74 72 75 63 74 20 41 75 74 6f 69 6e 63  /.struct Autoinc
1dbb0 49 6e 66 6f 20 7b 0a 20 20 41 75 74 6f 69 6e 63  Info {.  Autoinc
1dbc0 49 6e 66 6f 20 2a 70 4e 65 78 74 3b 20 20 20 2f  Info *pNext;   /
1dbd0 2a 20 4e 65 78 74 20 69 6e 66 6f 20 62 6c 6f 63  * Next info bloc
1dbe0 6b 20 69 6e 20 61 20 6c 69 73 74 20 6f 66 20 74  k in a list of t
1dbf0 68 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20 54 61 62  hem all */.  Tab
1dc00 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20  le *pTab;       
1dc10 20 20 20 2f 2a 20 54 61 62 6c 65 20 74 68 69 73     /* Table this
1dc20 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 72 65 66 65   info block refe
1dc30 72 73 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 69  rs to */.  int i
1dc40 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Db;             
1dc50 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 71 6c   /* Index in sql
1dc60 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 64 61  ite3.aDb[] of da
1dc70 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 70  tabase holding p
1dc80 54 61 62 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67  Tab */.  int reg
1dc90 43 74 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Ctr;           /
1dca0 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65  * Memory registe
1dcb0 72 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 72 6f  r holding the ro
1dcc0 77 69 64 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d  wid counter */.}
1dcd0 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 20 6f 66  ;../*.** Size of
1dce0 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 61 63 68   the column cach
1dcf0 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  e.*/.#ifndef SQL
1dd00 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 0a 23  ITE_N_COLCACHE.#
1dd10 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e   define SQLITE_N
1dd20 5f 43 4f 4c 43 41 43 48 45 20 31 30 0a 23 65 6e  _COLCACHE 10.#en
1dd30 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65  dif../*.** At le
1dd40 61 73 74 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65  ast one instance
1dd50 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
1dd60 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20 63  g structure is c
1dd70 72 65 61 74 65 64 20 66 6f 72 20 65 61 63 68 0a  reated for each.
1dd80 2a 2a 20 74 72 69 67 67 65 72 20 74 68 61 74 20  ** trigger that 
1dd90 6d 61 79 20 62 65 20 66 69 72 65 64 20 77 68 69  may be fired whi
1dda0 6c 65 20 70 61 72 73 69 6e 67 20 61 6e 20 49 4e  le parsing an IN
1ddb0 53 45 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20  SERT, UPDATE or 
1ddc0 44 45 4c 45 54 45 0a 2a 2a 20 73 74 61 74 65 6d  DELETE.** statem
1ddd0 65 6e 74 2e 20 41 6c 6c 20 73 75 63 68 20 6f 62  ent. All such ob
1dde0 6a 65 63 74 73 20 61 72 65 20 73 74 6f 72 65 64  jects are stored
1ddf0 20 69 6e 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c   in the linked l
1de00 69 73 74 20 68 65 61 64 65 64 20 61 74 0a 2a 2a  ist headed at.**
1de10 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50   Parse.pTriggerP
1de20 72 67 20 61 6e 64 20 64 65 6c 65 74 65 64 20 6f  rg and deleted o
1de30 6e 63 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f  nce statement co
1de40 6d 70 69 6c 61 74 69 6f 6e 20 68 61 73 20 62 65  mpilation has be
1de50 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 64 2e  en.** completed.
1de60 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62 65 20 73 75  .**.** A Vdbe su
1de70 62 2d 70 72 6f 67 72 61 6d 20 74 68 61 74 20 69  b-program that i
1de80 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 62 6f  mplements the bo
1de90 64 79 20 61 6e 64 20 57 48 45 4e 20 63 6c 61 75  dy and WHEN clau
1dea0 73 65 20 6f 66 20 74 72 69 67 67 65 72 0a 2a 2a  se of trigger.**
1deb0 20 54 72 69 67 67 65 72 50 72 67 2e 70 54 72 69   TriggerPrg.pTri
1dec0 67 67 65 72 2c 20 61 73 73 75 6d 69 6e 67 20 61  gger, assuming a
1ded0 20 64 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46   default ON CONF
1dee0 4c 49 43 54 20 63 6c 61 75 73 65 20 6f 66 0a 2a  LICT clause of.*
1def0 2a 20 54 72 69 67 67 65 72 50 72 67 2e 6f 72 63  * TriggerPrg.orc
1df00 6f 6e 66 2c 20 69 73 20 73 74 6f 72 65 64 20 69  onf, is stored i
1df10 6e 20 74 68 65 20 54 72 69 67 67 65 72 50 72 67  n the TriggerPrg
1df20 2e 70 50 72 6f 67 72 61 6d 20 76 61 72 69 61 62  .pProgram variab
1df30 6c 65 2e 0a 2a 2a 20 54 68 65 20 50 61 72 73 65  le..** The Parse
1df40 2e 70 54 72 69 67 67 65 72 50 72 67 20 6c 69 73  .pTriggerPrg lis
1df50 74 20 6e 65 76 65 72 20 63 6f 6e 74 61 69 6e 73  t never contains
1df60 20 74 77 6f 20 65 6e 74 72 69 65 73 20 77 69 74   two entries wit
1df70 68 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 76 61  h the same.** va
1df80 6c 75 65 73 20 66 6f 72 20 62 6f 74 68 20 70 54  lues for both pT
1df90 72 69 67 67 65 72 20 61 6e 64 20 6f 72 63 6f 6e  rigger and orcon
1dfa0 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 54 72 69  f..**.** The Tri
1dfb0 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b  ggerPrg.aColmask
1dfc0 5b 30 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20  [0] variable is 
1dfd0 73 65 74 20 74 6f 20 61 20 6d 61 73 6b 20 6f 66  set to a mask of
1dfe0 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a   old.* columns.*
1dff0 2a 20 61 63 63 65 73 73 65 64 20 28 6f 72 20 73  * accessed (or s
1e000 65 74 20 74 6f 20 30 20 66 6f 72 20 74 72 69 67  et to 0 for trig
1e010 67 65 72 73 20 66 69 72 65 64 20 61 73 20 61 20  gers fired as a 
1e020 72 65 73 75 6c 74 20 6f 66 20 49 4e 53 45 52 54  result of INSERT
1e030 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 29 2e  .** statements).
1e040 20 53 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20   Similarly, the 
1e050 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d  TriggerPrg.aColm
1e060 61 73 6b 5b 31 5d 20 76 61 72 69 61 62 6c 65 20  ask[1] variable 
1e070 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20 61 20 6d  is set to.** a m
1e080 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c  ask of new.* col
1e090 75 6d 6e 73 20 75 73 65 64 20 62 79 20 74 68 65  umns used by the
1e0a0 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72   program..*/.str
1e0b0 75 63 74 20 54 72 69 67 67 65 72 50 72 67 20 7b  uct TriggerPrg {
1e0c0 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69  .  Trigger *pTri
1e0d0 67 67 65 72 3b 20 20 20 20 20 20 2f 2a 20 54 72  gger;      /* Tr
1e0e0 69 67 67 65 72 20 74 68 69 73 20 70 72 6f 67 72  igger this progr
1e0f0 61 6d 20 77 61 73 20 63 6f 64 65 64 20 66 72 6f  am was coded fro
1e100 6d 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72  m */.  TriggerPr
1e110 67 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f  g *pNext;      /
1e120 2a 20 4e 65 78 74 20 65 6e 74 72 79 20 69 6e 20  * Next entry in 
1e130 50 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72  Parse.pTriggerPr
1e140 67 20 6c 69 73 74 20 2a 2f 0a 20 20 53 75 62 50  g list */.  SubP
1e150 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d  rogram *pProgram
1e160 3b 20 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20 69  ;   /* Program i
1e170 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 70 54 72 69  mplementing pTri
1e180 67 67 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a 20  gger/orconf */. 
1e190 20 69 6e 74 20 6f 72 63 6f 6e 66 3b 20 20 20 20   int orconf;    
1e1a0 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
1e1b0 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  ult ON CONFLICT 
1e1c0 70 6f 6c 69 63 79 20 2a 2f 0a 20 20 75 33 32 20  policy */.  u32 
1e1d0 61 43 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20 20  aColmask[2];    
1e1e0 20 20 20 20 2f 2a 20 4d 61 73 6b 73 20 6f 66 20      /* Masks of 
1e1f0 6f 6c 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f 6c  old.*, new.* col
1e200 75 6d 6e 73 20 61 63 63 65 73 73 65 64 20 2a 2f  umns accessed */
1e210 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79  .};../*.** The y
1e220 44 62 4d 61 73 6b 20 64 61 74 61 74 79 70 65 20  DbMask datatype 
1e230 66 6f 72 20 74 68 65 20 62 69 74 6d 61 73 6b 20  for the bitmask 
1e240 6f 66 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20  of all attached 
1e250 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 69  databases..*/.#i
1e260 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54  f SQLITE_MAX_ATT
1e270 41 43 48 45 44 3e 33 30 0a 20 20 74 79 70 65 64  ACHED>30.  typed
1e280 65 66 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  ef unsigned char
1e290 20 79 44 62 4d 61 73 6b 5b 28 53 51 4c 49 54 45   yDbMask[(SQLITE
1e2a0 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 2b 39 29  _MAX_ATTACHED+9)
1e2b0 2f 38 5d 3b 0a 23 20 64 65 66 69 6e 65 20 44 62  /8];.# define Db
1e2c0 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20  MaskTest(M,I)   
1e2d0 20 28 28 28 4d 29 5b 28 49 29 2f 38 5d 26 28 31   (((M)[(I)/8]&(1
1e2e0 3c 3c 28 28 49 29 26 37 29 29 29 21 3d 30 29 0a  <<((I)&7)))!=0).
1e2f0 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a  # define DbMaskZ
1e300 65 72 6f 28 4d 29 20 20 20 20 20 20 6d 65 6d 73  ero(M)      mems
1e310 65 74 28 28 4d 29 2c 30 2c 73 69 7a 65 6f 66 28  et((M),0,sizeof(
1e320 4d 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  M)).# define DbM
1e330 61 73 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20  askSet(M,I)     
1e340 28 4d 29 5b 28 49 29 2f 38 5d 7c 3d 28 31 3c 3c  (M)[(I)/8]|=(1<<
1e350 28 28 49 29 26 37 29 29 0a 23 20 64 65 66 69 6e  ((I)&7)).# defin
1e360 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28  e DbMaskAllZero(
1e370 4d 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61  M)   sqlite3DbMa
1e380 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 0a 23 20 64  skAllZero(M).# d
1e390 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a  efine DbMaskNonZ
1e3a0 65 72 6f 28 4d 29 20 20 20 28 73 71 6c 69 74 65  ero(M)   (sqlite
1e3b0 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d  3DbMaskAllZero(M
1e3c0 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 20 20 74 79  )==0).#else.  ty
1e3d0 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20 69  pedef unsigned i
1e3e0 6e 74 20 79 44 62 4d 61 73 6b 3b 0a 23 20 64 65  nt yDbMask;.# de
1e3f0 66 69 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28  fine DbMaskTest(
1e400 4d 2c 49 29 20 20 20 20 28 28 28 4d 29 26 28 28  M,I)    (((M)&((
1e410 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29  (yDbMask)1)<<(I)
1e420 29 29 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20  ))!=0).# define 
1e430 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20  DbMaskZero(M)   
1e440 20 20 20 28 4d 29 3d 30 0a 23 20 64 65 66 69 6e     (M)=0.# defin
1e450 65 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29  e DbMaskSet(M,I)
1e460 20 20 20 20 20 28 4d 29 7c 3d 28 28 28 79 44 62       (M)|=(((yDb
1e470 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29 0a 23 20  Mask)1)<<(I)).# 
1e480 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c  define DbMaskAll
1e490 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 3d 3d 30  Zero(M)   (M)==0
1e4a0 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1e4b0 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29  NonZero(M)   (M)
1e4c0 21 3d 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  !=0.#endif../*.*
1e4d0 2a 20 41 6e 20 53 51 4c 20 70 61 72 73 65 72 20  * An SQL parser 
1e4e0 63 6f 6e 74 65 78 74 2e 20 20 41 20 63 6f 70 79  context.  A copy
1e4f0 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
1e500 72 65 20 69 73 20 70 61 73 73 65 64 20 74 68 72  re is passed thr
1e510 6f 75 67 68 0a 2a 2a 20 74 68 65 20 70 61 72 73  ough.** the pars
1e520 65 72 20 61 6e 64 20 64 6f 77 6e 20 69 6e 74 6f  er and down into
1e530 20 61 6c 6c 20 74 68 65 20 70 61 72 73 65 72 20   all the parser 
1e540 61 63 74 69 6f 6e 20 72 6f 75 74 69 6e 65 20 69  action routine i
1e550 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63 61  n order to.** ca
1e560 72 72 79 20 61 72 6f 75 6e 64 20 69 6e 66 6f 72  rry around infor
1e570 6d 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20 67  mation that is g
1e580 6c 6f 62 61 6c 20 74 6f 20 74 68 65 20 65 6e 74  lobal to the ent
1e590 69 72 65 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a  ire parse..**.**
1e5a0 20 54 68 65 20 73 74 72 75 63 74 75 72 65 20 69   The structure i
1e5b0 73 20 64 69 76 69 64 65 64 20 69 6e 74 6f 20 74  s divided into t
1e5c0 77 6f 20 70 61 72 74 73 2e 20 20 57 68 65 6e 20  wo parts.  When 
1e5d0 74 68 65 20 70 61 72 73 65 72 20 61 6e 64 20 63  the parser and c
1e5e0 6f 64 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20  ode.** generate 
1e5f0 63 61 6c 6c 20 74 68 65 6d 73 65 6c 76 65 73 20  call themselves 
1e600 72 65 63 75 72 73 69 76 65 6c 79 2c 20 74 68 65  recursively, the
1e610 20 66 69 72 73 74 20 70 61 72 74 20 6f 66 20 74   first part of t
1e620 68 65 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20  he structure.** 
1e630 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 75 74 20  is constant but 
1e640 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72 74 20  the second part 
1e650 69 73 20 72 65 73 65 74 20 61 74 20 74 68 65 20  is reset at the 
1e660 62 65 67 69 6e 6e 69 6e 67 20 61 6e 64 20 65 6e  beginning and en
1e670 64 20 6f 66 0a 2a 2a 20 65 61 63 68 20 72 65 63  d of.** each rec
1e680 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  ursion..**.** Th
1e690 65 20 6e 54 61 62 6c 65 4c 6f 63 6b 20 61 6e 64  e nTableLock and
1e6a0 20 61 54 61 62 6c 65 4c 6f 63 6b 20 76 61 72 69   aTableLock vari
1e6b0 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20 75  ables are only u
1e6c0 73 65 64 20 69 66 20 74 68 65 20 73 68 61 72 65  sed if the share
1e6d0 64 2d 63 61 63 68 65 0a 2a 2a 20 66 65 61 74 75  d-cache.** featu
1e6e0 72 65 20 69 73 20 65 6e 61 62 6c 65 64 20 28 69  re is enabled (i
1e6f0 66 20 73 71 6c 69 74 65 33 54 73 64 28 29 2d 3e  f sqlite3Tsd()->
1e700 75 73 65 53 68 61 72 65 64 44 61 74 61 20 69 73  useSharedData is
1e710 20 74 72 75 65 29 2e 20 54 68 65 79 20 61 72 65   true). They are
1e720 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72  .** used to stor
1e730 65 20 74 68 65 20 73 65 74 20 6f 66 20 74 61 62  e the set of tab
1e740 6c 65 2d 6c 6f 63 6b 73 20 72 65 71 75 69 72 65  le-locks require
1e750 64 20 62 79 20 74 68 65 20 73 74 61 74 65 6d 65  d by the stateme
1e760 6e 74 20 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70  nt being.** comp
1e770 69 6c 65 64 2e 20 46 75 6e 63 74 69 6f 6e 20 73  iled. Function s
1e780 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28  qlite3TableLock(
1e790 29 20 69 73 20 75 73 65 64 20 74 6f 20 61 64 64  ) is used to add
1e7a0 20 65 6e 74 72 69 65 73 20 74 6f 20 74 68 65 0a   entries to the.
1e7b0 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72 75  ** list..*/.stru
1e7c0 63 74 20 50 61 72 73 65 20 7b 0a 20 20 73 71 6c  ct Parse {.  sql
1e7d0 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
1e7e0 20 20 2f 2a 20 54 68 65 20 6d 61 69 6e 20 64 61    /* The main da
1e7f0 74 61 62 61 73 65 20 73 74 72 75 63 74 75 72 65  tabase structure
1e800 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72 72   */.  char *zErr
1e810 4d 73 67 3b 20 20 20 20 20 20 20 2f 2a 20 41 6e  Msg;       /* An
1e820 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a   error message *
1e830 2f 0a 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b  /.  Vdbe *pVdbe;
1e840 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65           /* An e
1e850 6e 67 69 6e 65 20 66 6f 72 20 65 78 65 63 75 74  ngine for execut
1e860 69 6e 67 20 64 61 74 61 62 61 73 65 20 62 79 74  ing database byt
1e870 65 63 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 72  ecode */.  int r
1e880 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
1e890 2f 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66  /* Return code f
1e8a0 72 6f 6d 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f  rom execution */
1e8b0 0a 20 20 75 38 20 63 6f 6c 4e 61 6d 65 73 53 65  .  u8 colNamesSe
1e8c0 74 3b 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20  t;      /* TRUE 
1e8d0 61 66 74 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e  after OP_ColumnN
1e8e0 61 6d 65 20 68 61 73 20 62 65 65 6e 20 69 73 73  ame has been iss
1e8f0 75 65 64 20 74 6f 20 70 56 64 62 65 20 2a 2f 0a  ued to pVdbe */.
1e900 20 20 75 38 20 63 68 65 63 6b 53 63 68 65 6d 61    u8 checkSchema
1e910 3b 20 20 20 20 20 20 2f 2a 20 43 61 75 73 65 73  ;      /* Causes
1e920 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63   schema cookie c
1e930 68 65 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72  heck after an er
1e940 72 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 65 73 74  ror */.  u8 nest
1e950 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ed;           /*
1e960 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65   Number of neste
1e970 64 20 63 61 6c 6c 73 20 74 6f 20 74 68 65 20 70  d calls to the p
1e980 61 72 73 65 72 2f 63 6f 64 65 20 67 65 6e 65 72  arser/code gener
1e990 61 74 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 54 65  ator */.  u8 nTe
1e9a0 6d 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f  mpReg;         /
1e9b0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 65 6d 70  * Number of temp
1e9c0 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 73 20  orary registers 
1e9d0 69 6e 20 61 54 65 6d 70 52 65 67 5b 5d 20 2a 2f  in aTempReg[] */
1e9e0 0a 20 20 75 38 20 69 73 4d 75 6c 74 69 57 72 69  .  u8 isMultiWri
1e9f0 74 65 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20  te;     /* True 
1ea00 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79  if statement may
1ea10 20 6d 6f 64 69 66 79 2f 69 6e 73 65 72 74 20 6d   modify/insert m
1ea20 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a  ultiple rows */.
1ea30 20 20 75 38 20 6d 61 79 41 62 6f 72 74 3b 20 20    u8 mayAbort;  
1ea40 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
1ea50 66 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20  f statement may 
1ea60 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65  throw an ABORT e
1ea70 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 75 38  xception */.  u8
1ea80 20 68 61 73 43 6f 6d 70 6f 75 6e 64 3b 20 20 20   hasCompound;   
1ea90 20 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20 69 6e     /* Need to in
1eaa0 76 6f 6b 65 20 63 6f 6e 76 65 72 74 43 6f 6d 70  voke convertComp
1eab0 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71  oundSelectToSubq
1eac0 75 65 72 79 28 29 20 2a 2f 0a 20 20 75 38 20 6f  uery() */.  u8 o
1ead0 6b 43 6f 6e 73 74 46 61 63 74 6f 72 3b 20 20 20  kConstFactor;   
1eae0 20 2f 2a 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72   /* OK to factor
1eaf0 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 2a   out constants *
1eb00 2f 0a 20 20 75 38 20 64 69 73 61 62 6c 65 4c 6f  /.  u8 disableLo
1eb10 6f 6b 61 73 69 64 65 3b 20 2f 2a 20 4e 75 6d 62  okaside; /* Numb
1eb20 65 72 20 6f 66 20 74 69 6d 65 73 20 6c 6f 6f 6b  er of times look
1eb30 61 73 69 64 65 20 68 61 73 20 62 65 65 6e 20 64  aside has been d
1eb40 69 73 61 62 6c 65 64 20 2a 2f 0a 20 20 75 38 20  isabled */.  u8 
1eb50 6e 43 6f 6c 43 61 63 68 65 3b 20 20 20 20 20 20  nColCache;      
1eb60 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
1eb70 6e 74 72 69 65 73 20 69 6e 20 61 43 6f 6c 43 61  ntries in aColCa
1eb80 63 68 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e  che[] */.  int n
1eb90 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20  RangeReg;       
1eba0 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 74  /* Size of the t
1ebb0 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65  emporary registe
1ebc0 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74  r block */.  int
1ebd0 20 69 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20   iRangeReg;     
1ebe0 20 20 2f 2a 20 46 69 72 73 74 20 72 65 67 69 73    /* First regis
1ebf0 74 65 72 20 69 6e 20 74 65 6d 70 6f 72 61 72 79  ter in temporary
1ec00 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20   register block 
1ec10 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20  */.  int nErr;  
1ec20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1ec30 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 73 65  ber of errors se
1ec40 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 61 62  en */.  int nTab
1ec50 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1ec60 4e 75 6d 62 65 72 20 6f 66 20 70 72 65 76 69 6f  Number of previo
1ec70 75 73 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 56  usly allocated V
1ec80 44 42 45 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20  DBE cursors */. 
1ec90 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20   int nMem;      
1eca0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1ecb0 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  of memory cells 
1ecc0 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20  used so far */. 
1ecd0 20 69 6e 74 20 6e 4f 70 41 6c 6c 6f 63 3b 20 20   int nOpAlloc;  
1ece0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1ecf0 6f 66 20 73 6c 6f 74 73 20 61 6c 6c 6f 63 61 74  of slots allocat
1ed00 65 64 20 66 6f 72 20 56 64 62 65 2e 61 4f 70 5b  ed for Vdbe.aOp[
1ed10 5d 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4f 70 41  ] */.  int szOpA
1ed20 6c 6c 6f 63 3b 20 20 20 20 20 20 20 2f 2a 20 42  lloc;       /* B
1ed30 79 74 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20 73  ytes of memory s
1ed40 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20 66  pace allocated f
1ed50 6f 72 20 56 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f  or Vdbe.aOp[] */
1ed60 0a 20 20 69 6e 74 20 63 6b 42 61 73 65 3b 20 20  .  int ckBase;  
1ed70 20 20 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20          /* Base 
1ed80 72 65 67 69 73 74 65 72 20 6f 66 20 64 61 74 61  register of data
1ed90 20 64 75 72 69 6e 67 20 63 68 65 63 6b 20 63 6f   during check co
1eda0 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69  nstraints */.  i
1edb0 6e 74 20 69 53 65 6c 66 54 61 62 3b 20 20 20 20  nt iSelfTab;    
1edc0 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 6f 66 20      /* Table of 
1edd0 61 6e 20 69 6e 64 65 78 20 77 68 6f 73 65 20 65  an index whose e
1ede0 78 70 72 73 20 61 72 65 20 62 65 69 6e 67 20 63  xprs are being c
1edf0 6f 64 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 43  oded */.  int iC
1ee00 61 63 68 65 4c 65 76 65 6c 3b 20 20 20 20 20 2f  acheLevel;     /
1ee10 2a 20 43 6f 6c 43 61 63 68 65 20 76 61 6c 69 64  * ColCache valid
1ee20 20 77 68 65 6e 20 61 43 6f 6c 43 61 63 68 65 5b   when aColCache[
1ee30 5d 2e 69 4c 65 76 65 6c 3c 3d 69 43 61 63 68 65  ].iLevel<=iCache
1ee40 4c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 69  Level */.  int i
1ee50 43 61 63 68 65 43 6e 74 3b 20 20 20 20 20 20 20  CacheCnt;       
1ee60 2f 2a 20 43 6f 75 6e 74 65 72 20 75 73 65 64 20  /* Counter used 
1ee70 74 6f 20 67 65 6e 65 72 61 74 65 20 61 43 6f 6c  to generate aCol
1ee80 43 61 63 68 65 5b 5d 2e 6c 72 75 20 76 61 6c 75  Cache[].lru valu
1ee90 65 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61 62  es */.  int nLab
1eea0 65 6c 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  el;          /* 
1eeb0 4e 75 6d 62 65 72 20 6f 66 20 6c 61 62 65 6c 73  Number of labels
1eec0 20 75 73 65 64 20 2a 2f 0a 20 20 69 6e 74 20 2a   used */.  int *
1eed0 61 4c 61 62 65 6c 3b 20 20 20 20 20 20 20 20 20  aLabel;         
1eee0 2f 2a 20 53 70 61 63 65 20 74 6f 20 68 6f 6c 64  /* Space to hold
1eef0 20 74 68 65 20 6c 61 62 65 6c 73 20 2a 2f 0a 20   the labels */. 
1ef00 20 45 78 70 72 4c 69 73 74 20 2a 70 43 6f 6e 73   ExprList *pCons
1ef10 74 45 78 70 72 3b 2f 2a 20 43 6f 6e 73 74 61 6e  tExpr;/* Constan
1ef20 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f  t expressions */
1ef30 0a 20 20 54 6f 6b 65 6e 20 63 6f 6e 73 74 72 61  .  Token constra
1ef40 69 6e 74 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20  intName;/* Name 
1ef50 6f 66 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e  of the constrain
1ef60 74 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e  t currently bein
1ef70 67 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 79 44  g parsed */.  yD
1ef80 62 4d 61 73 6b 20 77 72 69 74 65 4d 61 73 6b 3b  bMask writeMask;
1ef90 20 20 20 2f 2a 20 53 74 61 72 74 20 61 20 77 72     /* Start a wr
1efa0 69 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ite transaction 
1efb0 6f 6e 20 74 68 65 73 65 20 64 61 74 61 62 61 73  on these databas
1efc0 65 73 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20  es */.  yDbMask 
1efd0 63 6f 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a 20  cookieMask;  /* 
1efe0 42 69 74 6d 61 73 6b 20 6f 66 20 73 63 68 65 6d  Bitmask of schem
1eff0 61 20 76 65 72 69 66 69 65 64 20 64 61 74 61 62  a verified datab
1f000 61 73 65 73 20 2a 2f 0a 20 20 69 6e 74 20 72 65  ases */.  int re
1f010 67 52 6f 77 69 64 3b 20 20 20 20 20 20 20 20 2f  gRowid;        /
1f020 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69  * Register holdi
1f030 6e 67 20 72 6f 77 69 64 20 6f 66 20 43 52 45 41  ng rowid of CREA
1f040 54 45 20 54 41 42 4c 45 20 65 6e 74 72 79 20 2a  TE TABLE entry *
1f050 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 6f 74 3b  /.  int regRoot;
1f060 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69           /* Regi
1f070 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 6f  ster holding roo
1f080 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f  t page number fo
1f090 72 20 6e 65 77 20 6f 62 6a 65 63 74 73 20 2a 2f  r new objects */
1f0a0 0a 20 20 69 6e 74 20 6e 4d 61 78 41 72 67 3b 20  .  int nMaxArg; 
1f0b0 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 20 61          /* Max a
1f0c0 72 67 73 20 70 61 73 73 65 64 20 74 6f 20 75 73  rgs passed to us
1f0d0 65 72 20 66 75 6e 63 74 69 6f 6e 20 62 79 20 73  er function by s
1f0e0 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 23 69  ub-program */.#i
1f0f0 66 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e  f SELECTTRACE_EN
1f100 41 42 4c 45 44 0a 20 20 69 6e 74 20 6e 53 65 6c  ABLED.  int nSel
1f110 65 63 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ect;         /* 
1f120 4e 75 6d 62 65 72 20 6f 66 20 53 45 4c 45 43 54  Number of SELECT
1f130 20 73 74 61 74 65 6d 65 6e 74 73 20 73 65 65 6e   statements seen
1f140 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65 6c 65 63   */.  int nSelec
1f150 74 49 6e 64 65 6e 74 3b 20 20 20 2f 2a 20 48 6f  tIndent;   /* Ho
1f160 77 20 66 61 72 20 74 6f 20 69 6e 64 65 6e 74 20  w far to indent 
1f170 53 45 4c 45 43 54 54 52 41 43 45 28 29 20 6f 75  SELECTTRACE() ou
1f180 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  tput */.#endif.#
1f190 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
1f1a0 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a  IT_SHARED_CACHE.
1f1b0 20 20 69 6e 74 20 6e 54 61 62 6c 65 4c 6f 63 6b    int nTableLock
1f1c0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
1f1d0 65 72 20 6f 66 20 6c 6f 63 6b 73 20 69 6e 20 61  er of locks in a
1f1e0 54 61 62 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20 54  TableLock */.  T
1f1f0 61 62 6c 65 4c 6f 63 6b 20 2a 61 54 61 62 6c 65  ableLock *aTable
1f200 4c 6f 63 6b 3b 20 2f 2a 20 52 65 71 75 69 72 65  Lock; /* Require
1f210 64 20 74 61 62 6c 65 20 6c 6f 63 6b 73 20 66 6f  d table locks fo
1f220 72 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d  r shared-cache m
1f230 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ode */.#endif.  
1f240 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 41 69  AutoincInfo *pAi
1f250 6e 63 3b 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74  nc;  /* Informat
1f260 69 6f 6e 20 61 62 6f 75 74 20 41 55 54 4f 49 4e  ion about AUTOIN
1f270 43 52 45 4d 45 4e 54 20 63 6f 75 6e 74 65 72 73  CREMENT counters
1f280 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 54 6f   */.  Parse *pTo
1f290 70 6c 65 76 65 6c 3b 20 20 20 20 2f 2a 20 50 61  plevel;    /* Pa
1f2a0 72 73 65 20 73 74 72 75 63 74 75 72 65 20 66 6f  rse structure fo
1f2b0 72 20 6d 61 69 6e 20 70 72 6f 67 72 61 6d 20 28  r main program (
1f2c0 6f 72 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 54 61  or NULL) */.  Ta
1f2d0 62 6c 65 20 2a 70 54 72 69 67 67 65 72 54 61 62  ble *pTriggerTab
1f2e0 3b 20 20 2f 2a 20 54 61 62 6c 65 20 74 72 69 67  ;  /* Table trig
1f2f0 67 65 72 73 20 61 72 65 20 62 65 69 6e 67 20 63  gers are being c
1f300 6f 64 65 64 20 66 6f 72 20 2a 2f 0a 20 20 69 6e  oded for */.  in
1f310 74 20 61 64 64 72 43 72 54 61 62 3b 20 20 20 20  t addrCrTab;    
1f320 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66     /* Address of
1f330 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20   OP_CreateTable 
1f340 6f 70 63 6f 64 65 20 6f 6e 20 43 52 45 41 54 45  opcode on CREATE
1f350 20 54 41 42 4c 45 20 2a 2f 0a 20 20 75 33 32 20   TABLE */.  u32 
1f360 6e 51 75 65 72 79 4c 6f 6f 70 3b 20 20 20 20 20  nQueryLoop;     
1f370 20 2f 2a 20 45 73 74 20 6e 75 6d 62 65 72 20 6f   /* Est number o
1f380 66 20 69 74 65 72 61 74 69 6f 6e 73 20 6f 66 20  f iterations of 
1f390 61 20 71 75 65 72 79 20 28 31 30 2a 6c 6f 67 32  a query (10*log2
1f3a0 28 4e 29 29 20 2a 2f 0a 20 20 75 33 32 20 6f 6c  (N)) */.  u32 ol
1f3b0 64 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f  dmask;         /
1f3c0 2a 20 4d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20  * Mask of old.* 
1f3d0 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63  columns referenc
1f3e0 65 64 20 2a 2f 0a 20 20 75 33 32 20 6e 65 77 6d  ed */.  u32 newm
1f3f0 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ask;         /* 
1f400 4d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f  Mask of new.* co
1f410 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64  lumns referenced
1f420 20 2a 2f 0a 20 20 75 38 20 65 54 72 69 67 67 65   */.  u8 eTrigge
1f430 72 4f 70 3b 20 20 20 20 20 20 20 2f 2a 20 54 4b  rOp;       /* TK
1f440 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45  _UPDATE, TK_INSE
1f450 52 54 20 6f 72 20 54 4b 5f 44 45 4c 45 54 45 20  RT or TK_DELETE 
1f460 2a 2f 0a 20 20 75 38 20 65 4f 72 63 6f 6e 66 3b  */.  u8 eOrconf;
1f470 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
1f480 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  ault ON CONFLICT
1f490 20 70 6f 6c 69 63 79 20 66 6f 72 20 74 72 69 67   policy for trig
1f4a0 67 65 72 20 73 74 65 70 73 20 2a 2f 0a 20 20 75  ger steps */.  u
1f4b0 38 20 64 69 73 61 62 6c 65 54 72 69 67 67 65 72  8 disableTrigger
1f4c0 73 3b 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 64  s;  /* True to d
1f4d0 69 73 61 62 6c 65 20 74 72 69 67 67 65 72 73 20  isable triggers 
1f4e0 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a  */..  /*********
1f4f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f500 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f510 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f520 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f530 2a 0a 20 20 2a 2a 20 46 69 65 6c 64 73 20 61 62  *.  ** Fields ab
1f540 6f 76 65 20 6d 75 73 74 20 62 65 20 69 6e 69 74  ove must be init
1f550 69 61 6c 69 7a 65 64 20 74 6f 20 7a 65 72 6f 2e  ialized to zero.
1f560 20 20 54 68 65 20 66 69 65 6c 64 73 20 74 68 61    The fields tha
1f570 74 20 66 6f 6c 6c 6f 77 2c 0a 20 20 2a 2a 20 64  t follow,.  ** d
1f580 6f 77 6e 20 74 6f 20 74 68 65 20 62 65 67 69 6e  own to the begin
1f590 6e 69 6e 67 20 6f 66 20 74 68 65 20 72 65 63 75  ning of the recu
1f5a0 72 73 69 76 65 20 73 65 63 74 69 6f 6e 2c 20 64  rsive section, d
1f5b0 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62 65  o not need to be
1f5c0 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c 69 7a 65  .  ** initialize
1f5d0 64 20 61 73 20 74 68 65 79 20 77 69 6c 6c 20 62  d as they will b
1f5e0 65 20 73 65 74 20 62 65 66 6f 72 65 20 62 65 69  e set before bei
1f5f0 6e 67 20 75 73 65 64 2e 20 20 54 68 65 20 62 6f  ng used.  The bo
1f600 75 6e 64 61 72 79 20 69 73 0a 20 20 2a 2a 20 64  undary is.  ** d
1f610 65 74 65 72 6d 69 6e 65 64 20 62 79 20 6f 66 66  etermined by off
1f620 73 65 74 6f 66 28 50 61 72 73 65 2c 61 43 6f 6c  setof(Parse,aCol
1f630 43 61 63 68 65 29 2e 0a 20 20 2a 2a 2a 2a 2a 2a  Cache)..  ******
1f640 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f650 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f660 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f670 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f680 2a 2a 2a 2a 2f 0a 0a 20 20 73 74 72 75 63 74 20  ****/..  struct 
1f690 79 43 6f 6c 43 61 63 68 65 20 7b 0a 20 20 20 20  yColCache {.    
1f6a0 69 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20  int iTable;     
1f6b0 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63        /* Table c
1f6c0 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a  ursor number */.
1f6d0 20 20 20 20 69 31 36 20 69 43 6f 6c 75 6d 6e 3b      i16 iColumn;
1f6e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62            /* Tab
1f6f0 6c 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  le column number
1f700 20 2a 2f 0a 20 20 20 20 75 38 20 74 65 6d 70 52   */.    u8 tempR
1f710 65 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  eg;           /*
1f720 20 69 52 65 67 20 69 73 20 61 20 74 65 6d 70 20   iReg is a temp 
1f730 72 65 67 69 73 74 65 72 20 74 68 61 74 20 6e 65  register that ne
1f740 65 64 73 20 74 6f 20 62 65 20 66 72 65 65 64 20  eds to be freed 
1f750 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4c 65 76 65  */.    int iLeve
1f760 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  l;           /* 
1f770 4e 65 73 74 69 6e 67 20 6c 65 76 65 6c 20 2a 2f  Nesting level */
1f780 0a 20 20 20 20 69 6e 74 20 69 52 65 67 3b 20 20  .    int iReg;  
1f790 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
1f7a0 67 20 77 69 74 68 20 76 61 6c 75 65 20 6f 66 20  g with value of 
1f7b0 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 30 20 6d  this column. 0 m
1f7c0 65 61 6e 73 20 6e 6f 6e 65 2e 20 2a 2f 0a 20 20  eans none. */.  
1f7d0 20 20 69 6e 74 20 6c 72 75 3b 20 20 20 20 20 20    int lru;      
1f7e0 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 61 73 74          /* Least
1f7f0 20 72 65 63 65 6e 74 6c 79 20 75 73 65 64 20 65   recently used e
1f800 6e 74 72 79 20 68 61 73 20 74 68 65 20 73 6d 61  ntry has the sma
1f810 6c 6c 65 73 74 20 76 61 6c 75 65 20 2a 2f 0a 20  llest value */. 
1f820 20 7d 20 61 43 6f 6c 43 61 63 68 65 5b 53 51 4c   } aColCache[SQL
1f830 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 5d 3b  ITE_N_COLCACHE];
1f840 20 20 2f 2a 20 4f 6e 65 20 66 6f 72 20 65 61 63    /* One for eac
1f850 68 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20 65  h column cache e
1f860 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74 20 61 54  ntry */.  int aT
1f870 65 6d 70 52 65 67 5b 38 5d 3b 20 20 20 20 20 20  empReg[8];      
1f880 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 61 72 65    /* Holding are
1f890 61 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20  a for temporary 
1f8a0 72 65 67 69 73 74 65 72 73 20 2a 2f 0a 20 20 54  registers */.  T
1f8b0 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b 65 6e 3b  oken sNameToken;
1f8c0 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20         /* Token 
1f8d0 77 69 74 68 20 75 6e 71 75 61 6c 69 66 69 65 64  with unqualified
1f8e0 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 20 6e   schema object n
1f8f0 61 6d 65 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a  ame */..  /*****
1f900 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f910 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f920 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f930 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f940 2a 2a 2a 0a 20 20 2a 2a 20 41 62 6f 76 65 20 69  ***.  ** Above i
1f950 73 20 63 6f 6e 73 74 61 6e 74 20 62 65 74 77 65  s constant betwe
1f960 65 6e 20 72 65 63 75 72 73 69 6f 6e 73 2e 20 20  en recursions.  
1f970 42 65 6c 6f 77 20 69 73 20 72 65 73 65 74 20 62  Below is reset b
1f980 65 66 6f 72 65 20 61 6e 64 20 61 66 74 65 72 0a  efore and after.
1f990 20 20 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73    ** each recurs
1f9a0 69 6f 6e 2e 20 20 54 68 65 20 62 6f 75 6e 64 61  ion.  The bounda
1f9b0 72 79 20 62 65 74 77 65 65 6e 20 74 68 65 73 65  ry between these
1f9c0 20 74 77 6f 20 72 65 67 69 6f 6e 73 20 69 73 20   two regions is 
1f9d0 64 65 74 65 72 6d 69 6e 65 64 0a 20 20 2a 2a 20  determined.  ** 
1f9e0 75 73 69 6e 67 20 6f 66 66 73 65 74 6f 66 28 50  using offsetof(P
1f9f0 61 72 73 65 2c 73 4c 61 73 74 54 6f 6b 65 6e 29  arse,sLastToken)
1fa00 20 73 6f 20 74 68 65 20 73 4c 61 73 74 54 6f 6b   so the sLastTok
1fa10 65 6e 20 66 69 65 6c 64 20 6d 75 73 74 20 62 65  en field must be
1fa20 20 74 68 65 0a 20 20 2a 2a 20 66 69 72 73 74 20   the.  ** first 
1fa30 66 69 65 6c 64 20 69 6e 20 74 68 65 20 72 65 63  field in the rec
1fa40 75 72 73 69 76 65 20 72 65 67 69 6f 6e 2e 0a 20  ursive region.. 
1fa50 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ***************
1fa60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fa70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fa80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fa90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 54 6f  *********/..  To
1faa0 6b 65 6e 20 73 4c 61 73 74 54 6f 6b 65 6e 3b 20  ken sLastToken; 
1fab0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 61 73        /* The las
1fac0 74 20 74 6f 6b 65 6e 20 70 61 72 73 65 64 20 2a  t token parsed *
1fad0 2f 0a 20 20 79 6e 56 61 72 20 6e 56 61 72 3b 20  /.  ynVar nVar; 
1fae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1faf0 20 4e 75 6d 62 65 72 20 6f 66 20 27 3f 27 20 76   Number of '?' v
1fb00 61 72 69 61 62 6c 65 73 20 73 65 65 6e 20 69 6e  ariables seen in
1fb10 20 74 68 65 20 53 51 4c 20 73 6f 20 66 61 72 20   the SQL so far 
1fb20 2a 2f 0a 20 20 75 38 20 69 50 6b 53 6f 72 74 4f  */.  u8 iPkSortO
1fb30 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f  rder;          /
1fb40 2a 20 41 53 43 20 6f 72 20 44 45 53 43 20 66 6f  * ASC or DESC fo
1fb50 72 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  r INTEGER PRIMAR
1fb60 59 20 4b 45 59 20 2a 2f 0a 20 20 75 38 20 65 78  Y KEY */.  u8 ex
1fb70 70 6c 61 69 6e 3b 20 20 20 20 20 20 20 20 20 20  plain;          
1fb80 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
1fb90 74 68 65 20 45 58 50 4c 41 49 4e 20 66 6c 61 67  the EXPLAIN flag
1fba0 20 69 73 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65   is found on the
1fbb0 20 71 75 65 72 79 20 2a 2f 0a 23 69 66 6e 64 65   query */.#ifnde
1fbc0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
1fbd0 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 75 38 20  RTUALTABLE.  u8 
1fbe0 64 65 63 6c 61 72 65 56 74 61 62 3b 20 20 20 20  declareVtab;    
1fbf0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
1fc00 66 20 69 6e 73 69 64 65 20 73 71 6c 69 74 65 33  f inside sqlite3
1fc10 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20  _declare_vtab() 
1fc20 2a 2f 0a 20 20 69 6e 74 20 6e 56 74 61 62 4c 6f  */.  int nVtabLo
1fc30 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ck;            /
1fc40 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76 69 72 74  * Number of virt
1fc50 75 61 6c 20 74 61 62 6c 65 73 20 74 6f 20 6c 6f  ual tables to lo
1fc60 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69  ck */.#endif.  i
1fc70 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20  nt nHeight;     
1fc80 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72           /* Expr
1fc90 65 73 73 69 6f 6e 20 74 72 65 65 20 68 65 69 67  ession tree heig
1fca0 68 74 20 6f 66 20 63 75 72 72 65 6e 74 20 73 75  ht of current su
1fcb0 62 2d 73 65 6c 65 63 74 20 2a 2f 0a 23 69 66 6e  b-select */.#ifn
1fcc0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
1fcd0 45 58 50 4c 41 49 4e 0a 20 20 69 6e 74 20 69 53  EXPLAIN.  int iS
1fce0 65 6c 65 63 74 49 64 3b 20 20 20 20 20 20 20 20  electId;        
1fcf0 20 20 20 20 2f 2a 20 49 44 20 6f 66 20 63 75 72      /* ID of cur
1fd00 72 65 6e 74 20 73 65 6c 65 63 74 20 66 6f 72 20  rent select for 
1fd10 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74 20 2a  EXPLAIN output *
1fd20 2f 0a 20 20 69 6e 74 20 69 4e 65 78 74 53 65 6c  /.  int iNextSel
1fd30 65 63 74 49 64 3b 20 20 20 20 20 20 20 20 2f 2a  ectId;        /*
1fd40 20 4e 65 78 74 20 61 76 61 69 6c 61 62 6c 65 20   Next available 
1fd50 73 65 6c 65 63 74 20 49 44 20 66 6f 72 20 45 58  select ID for EX
1fd60 50 4c 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a  PLAIN output */.
1fd70 23 65 6e 64 69 66 0a 20 20 56 4c 69 73 74 20 2a  #endif.  VList *
1fd80 70 56 4c 69 73 74 3b 20 20 20 20 20 20 20 20 20  pVList;         
1fd90 20 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20 62 65     /* Mapping be
1fda0 74 77 65 65 6e 20 76 61 72 69 61 62 6c 65 20 6e  tween variable n
1fdb0 61 6d 65 73 20 61 6e 64 20 6e 75 6d 62 65 72 73  ames and numbers
1fdc0 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 52 65 70   */.  Vdbe *pRep
1fdd0 72 65 70 61 72 65 3b 20 20 20 20 20 20 20 20 20  repare;         
1fde0 2f 2a 20 56 4d 20 62 65 69 6e 67 20 72 65 70 72  /* VM being repr
1fdf0 65 70 61 72 65 64 20 28 73 71 6c 69 74 65 33 52  epared (sqlite3R
1fe00 65 70 72 65 70 61 72 65 28 29 29 20 2a 2f 0a 20  eprepare()) */. 
1fe10 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61   const char *zTa
1fe20 69 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c  il;        /* Al
1fe30 6c 20 53 51 4c 20 74 65 78 74 20 70 61 73 74 20  l SQL text past 
1fe40 74 68 65 20 6c 61 73 74 20 73 65 6d 69 63 6f 6c  the last semicol
1fe50 6f 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 54  on parsed */.  T
1fe60 61 62 6c 65 20 2a 70 4e 65 77 54 61 62 6c 65 3b  able *pNewTable;
1fe70 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74 61           /* A ta
1fe80 62 6c 65 20 62 65 69 6e 67 20 63 6f 6e 73 74 72  ble being constr
1fe90 75 63 74 65 64 20 62 79 20 43 52 45 41 54 45 20  ucted by CREATE 
1fea0 54 41 42 4c 45 20 2a 2f 0a 20 20 54 72 69 67 67  TABLE */.  Trigg
1feb0 65 72 20 2a 70 4e 65 77 54 72 69 67 67 65 72 3b  er *pNewTrigger;
1fec0 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20       /* Trigger 
1fed0 75 6e 64 65 72 20 63 6f 6e 73 74 72 75 63 74 20  under construct 
1fee0 62 79 20 61 20 43 52 45 41 54 45 20 54 52 49 47  by a CREATE TRIG
1fef0 47 45 52 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  GER */.  const c
1ff00 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78  har *zAuthContex
1ff10 74 3b 20 2f 2a 20 54 68 65 20 36 74 68 20 70 61  t; /* The 6th pa
1ff20 72 61 6d 65 74 65 72 20 74 6f 20 64 62 2d 3e 78  rameter to db->x
1ff30 41 75 74 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a  Auth callbacks *
1ff40 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
1ff50 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
1ff60 4c 45 0a 20 20 54 6f 6b 65 6e 20 73 41 72 67 3b  LE.  Token sArg;
1ff70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1ff80 2a 20 43 6f 6d 70 6c 65 74 65 20 74 65 78 74 20  * Complete text 
1ff90 6f 66 20 61 20 6d 6f 64 75 6c 65 20 61 72 67 75  of a module argu
1ffa0 6d 65 6e 74 20 2a 2f 0a 20 20 54 61 62 6c 65 20  ment */.  Table 
1ffb0 2a 2a 61 70 56 74 61 62 4c 6f 63 6b 3b 20 20 20  **apVtabLock;   
1ffc0 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
1ffd0 6f 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73  o virtual tables
1ffe0 20 6e 65 65 64 69 6e 67 20 6c 6f 63 6b 69 6e 67   needing locking
1fff0 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 61 62   */.#endif.  Tab
20000 6c 65 20 2a 70 5a 6f 6d 62 69 65 54 61 62 3b 20  le *pZombieTab; 
20010 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f         /* List o
20020 66 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20  f Table objects 
20030 74 6f 20 64 65 6c 65 74 65 20 61 66 74 65 72 20  to delete after 
20040 63 6f 64 65 20 67 65 6e 20 2a 2f 0a 20 20 54 72  code gen */.  Tr
20050 69 67 67 65 72 50 72 67 20 2a 70 54 72 69 67 67  iggerPrg *pTrigg
20060 65 72 50 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b 65  erPrg;  /* Linke
20070 64 20 6c 69 73 74 20 6f 66 20 63 6f 64 65 64 20  d list of coded 
20080 74 72 69 67 67 65 72 73 20 2a 2f 0a 20 20 57 69  triggers */.  Wi
20090 74 68 20 2a 70 57 69 74 68 3b 20 20 20 20 20 20  th *pWith;      
200a0 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65          /* Curre
200b0 6e 74 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20  nt WITH clause, 
200c0 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 57 69 74  or NULL */.  Wit
200d0 68 20 2a 70 57 69 74 68 54 6f 46 72 65 65 3b 20  h *pWithToFree; 
200e0 20 20 20 20 20 20 20 2f 2a 20 46 72 65 65 20 74         /* Free t
200f0 68 69 73 20 57 49 54 48 20 6f 62 6a 65 63 74 20  his WITH object 
20100 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
20110 65 20 70 61 72 73 65 20 2a 2f 0a 7d 3b 0a 0a 2f  e parse */.};../
20120 2a 0a 2a 2a 20 53 69 7a 65 73 20 61 6e 64 20 70  *.** Sizes and p
20130 6f 69 6e 74 65 72 73 20 6f 66 20 76 61 72 69 6f  ointers of vario
20140 75 73 20 70 61 72 74 73 20 6f 66 20 74 68 65 20  us parts of the 
20150 50 61 72 73 65 20 6f 62 6a 65 63 74 2e 0a 2a 2f  Parse object..*/
20160 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f 48  .#define PARSE_H
20170 44 52 5f 53 5a 20 6f 66 66 73 65 74 6f 66 28 50  DR_SZ offsetof(P
20180 61 72 73 65 2c 61 43 6f 6c 43 61 63 68 65 29 20  arse,aColCache) 
20190 2f 2a 20 52 65 63 75 72 73 69 76 65 20 70 61 72  /* Recursive par
201a0 74 20 77 2f 6f 20 61 43 6f 6c 43 61 63 68 65 2a  t w/o aColCache*
201b0 2f 0a 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f  /.#define PARSE_
201c0 52 45 43 55 52 53 45 5f 53 5a 20 6f 66 66 73 65  RECURSE_SZ offse
201d0 74 6f 66 28 50 61 72 73 65 2c 73 4c 61 73 74 54  tof(Parse,sLastT
201e0 6f 6b 65 6e 29 20 20 20 20 2f 2a 20 52 65 63 75  oken)    /* Recu
201f0 72 73 69 76 65 20 70 61 72 74 20 2a 2f 0a 23 64  rsive part */.#d
20200 65 66 69 6e 65 20 50 41 52 53 45 5f 54 41 49 4c  efine PARSE_TAIL
20210 5f 53 5a 20 28 73 69 7a 65 6f 66 28 50 61 72 73  _SZ (sizeof(Pars
20220 65 29 2d 50 41 52 53 45 5f 52 45 43 55 52 53 45  e)-PARSE_RECURSE
20230 5f 53 5a 29 20 2f 2a 20 4e 6f 6e 2d 72 65 63 75  _SZ) /* Non-recu
20240 72 73 69 76 65 20 70 61 72 74 20 2a 2f 0a 23 64  rsive part */.#d
20250 65 66 69 6e 65 20 50 41 52 53 45 5f 54 41 49 4c  efine PARSE_TAIL
20260 28 58 29 20 28 28 28 63 68 61 72 2a 29 28 58 29  (X) (((char*)(X)
20270 29 2b 50 41 52 53 45 5f 52 45 43 55 52 53 45 5f  )+PARSE_RECURSE_
20280 53 5a 29 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20  SZ)  /* Pointer 
20290 74 6f 20 74 61 69 6c 20 2a 2f 0a 0a 2f 2a 0a 2a  to tail */../*.*
202a0 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66  * Return true if
202b0 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 73 69 64   currently insid
202c0 65 20 61 6e 20 73 71 6c 69 74 65 33 5f 64 65 63  e an sqlite3_dec
202d0 6c 61 72 65 5f 76 74 61 62 28 29 20 63 61 6c 6c  lare_vtab() call
202e0 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
202f0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
20300 41 42 4c 45 0a 20 20 23 64 65 66 69 6e 65 20 49  ABLE.  #define I
20310 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20 30  N_DECLARE_VTAB 0
20320 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
20330 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42   IN_DECLARE_VTAB
20340 20 28 70 50 61 72 73 65 2d 3e 64 65 63 6c 61 72   (pParse->declar
20350 65 56 74 61 62 29 0a 23 65 6e 64 69 66 0a 0a 2f  eVtab).#endif../
20360 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
20370 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
20380 67 20 73 74 72 75 63 74 75 72 65 20 63 61 6e 20  g structure can 
20390 62 65 20 64 65 63 6c 61 72 65 64 20 6f 6e 20 61  be declared on a
203a0 20 73 74 61 63 6b 20 61 6e 64 20 75 73 65 64 0a   stack and used.
203b0 2a 2a 20 74 6f 20 73 61 76 65 20 74 68 65 20 50  ** to save the P
203c0 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78  arse.zAuthContex
203d0 74 20 76 61 6c 75 65 20 73 6f 20 74 68 61 74 20  t value so that 
203e0 69 74 20 63 61 6e 20 62 65 20 72 65 73 74 6f 72  it can be restor
203f0 65 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74 72  ed later..*/.str
20400 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20  uct AuthContext 
20410 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
20420 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 20 20  zAuthContext;   
20430 2f 2a 20 50 75 74 20 73 61 76 65 64 20 50 61 72  /* Put saved Par
20440 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20  se.zAuthContext 
20450 68 65 72 65 20 2a 2f 0a 20 20 50 61 72 73 65 20  here */.  Parse 
20460 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 20  *pParse;        
20470 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50 61 72        /* The Par
20480 73 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a  se structure */.
20490 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69 65  };../*.** Bitfie
204a0 6c 64 20 66 6c 61 67 73 20 66 6f 72 20 50 35 20  ld flags for P5 
204b0 76 61 6c 75 65 20 69 6e 20 76 61 72 69 6f 75 73  value in various
204c0 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 0a 2a 2a 20   opcodes..**.** 
204d0 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74  Value constraint
204e0 73 20 28 65 6e 66 6f 72 63 65 64 20 76 69 61 20  s (enforced via 
204f0 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20  assert()):.**   
20500 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52   OPFLAG_LENGTHAR
20510 47 20 20 20 20 3d 3d 20 53 51 4c 49 54 45 5f 46  G    == SQLITE_F
20520 55 4e 43 5f 4c 45 4e 47 54 48 0a 2a 2a 20 20 20  UNC_LENGTH.**   
20530 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52   OPFLAG_TYPEOFAR
20540 47 20 20 20 20 3d 3d 20 53 51 4c 49 54 45 5f 46  G    == SQLITE_F
20550 55 4e 43 5f 54 59 50 45 4f 46 0a 2a 2a 20 20 20  UNC_TYPEOF.**   
20560 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20   OPFLAG_BULKCSR 
20570 20 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 42 55       == BTREE_BU
20580 4c 4b 4c 4f 41 44 0a 2a 2a 20 20 20 20 4f 50 46  LKLOAD.**    OPF
20590 4c 41 47 5f 53 45 45 4b 45 51 20 20 20 20 20 20  LAG_SEEKEQ      
205a0 20 3d 3d 20 42 54 52 45 45 5f 53 45 45 4b 5f 45   == BTREE_SEEK_E
205b0 51 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 46  Q.**    OPFLAG_F
205c0 4f 52 44 45 4c 45 54 45 20 20 20 20 3d 3d 20 42  ORDELETE    == B
205d0 54 52 45 45 5f 46 4f 52 44 45 4c 45 54 45 0a 2a  TREE_FORDELETE.*
205e0 2a 20 20 20 20 4f 50 46 4c 41 47 5f 53 41 56 45  *    OPFLAG_SAVE
205f0 50 4f 53 49 54 49 4f 4e 20 3d 3d 20 42 54 52 45  POSITION == BTRE
20600 45 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 0a 2a  E_SAVEPOSITION.*
20610 2a 20 20 20 20 4f 50 46 4c 41 47 5f 41 55 58 44  *    OPFLAG_AUXD
20620 45 4c 45 54 45 20 20 20 20 3d 3d 20 42 54 52 45  ELETE    == BTRE
20630 45 5f 41 55 58 44 45 4c 45 54 45 0a 2a 2f 0a 23  E_AUXDELETE.*/.#
20640 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 43  define OPFLAG_NC
20650 48 41 4e 47 45 20 20 20 20 20 20 20 30 78 30 31  HANGE       0x01
20660 20 20 20 20 2f 2a 20 4f 50 5f 49 6e 73 65 72 74      /* OP_Insert
20670 3a 20 53 65 74 20 74 6f 20 75 70 64 61 74 65 20  : Set to update 
20680 64 62 2d 3e 6e 43 68 61 6e 67 65 20 2a 2f 0a 20  db->nChange */. 
20690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
206a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
206b0 20 20 20 20 2f 2a 20 41 6c 73 6f 20 75 73 65 64      /* Also used
206c0 20 69 6e 20 50 32 20 28 6e 6f 74 20 50 35 29 20   in P2 (not P5) 
206d0 6f 66 20 4f 50 5f 44 65 6c 65 74 65 20 2a 2f 0a  of OP_Delete */.
206e0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 45  #define OPFLAG_E
206f0 50 48 45 4d 20 20 20 20 20 20 20 20 20 30 78 30  PHEM         0x0
20700 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d  1    /* OP_Colum
20710 6e 3a 20 45 70 68 65 6d 65 72 61 6c 20 6f 75 74  n: Ephemeral out
20720 70 75 74 20 69 73 20 6f 6b 20 2a 2f 0a 23 64 65  put is ok */.#de
20730 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54  fine OPFLAG_LAST
20740 52 4f 57 49 44 20 20 20 20 20 30 78 32 30 20 20  ROWID     0x20  
20750 20 20 2f 2a 20 53 65 74 20 74 6f 20 75 70 64 61    /* Set to upda
20760 74 65 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64  te db->lastRowid
20770 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
20780 41 47 5f 49 53 55 50 44 41 54 45 20 20 20 20 20  AG_ISUPDATE     
20790 20 30 78 30 34 20 20 20 20 2f 2a 20 54 68 69 73   0x04    /* This
207a0 20 4f 50 5f 49 6e 73 65 72 74 20 69 73 20 61 6e   OP_Insert is an
207b0 20 73 71 6c 20 55 50 44 41 54 45 20 2a 2f 0a 23   sql UPDATE */.#
207c0 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41 50  define OPFLAG_AP
207d0 50 45 4e 44 20 20 20 20 20 20 20 20 30 78 30 38  PEND        0x08
207e0 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20 6c      /* This is l
207f0 69 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61  ikely to be an a
20800 70 70 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65  ppend */.#define
20810 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
20820 45 53 55 4c 54 20 30 78 31 30 20 20 20 20 2f 2a  ESULT 0x10    /*
20830 20 54 72 79 20 74 6f 20 61 76 6f 69 64 20 61 20   Try to avoid a 
20840 73 65 65 6b 20 69 6e 20 42 74 72 65 65 49 6e 73  seek in BtreeIns
20850 65 72 74 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  ert() */.#define
20860 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 20 20   OPFLAG_ISNOOP  
20870 20 20 20 20 20 20 30 78 34 30 20 20 20 20 2f 2a        0x40    /*
20880 20 4f 50 5f 44 65 6c 65 74 65 20 64 6f 65 73 20   OP_Delete does 
20890 70 72 65 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20  pre-update-hook 
208a0 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  only */.#define 
208b0 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47  OPFLAG_LENGTHARG
208c0 20 20 20 20 20 30 78 34 30 20 20 20 20 2f 2a 20       0x40    /* 
208d0 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75  OP_Column only u
208e0 73 65 64 20 66 6f 72 20 6c 65 6e 67 74 68 28 29  sed for length()
208f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
20900 41 47 5f 54 59 50 45 4f 46 41 52 47 20 20 20 20  AG_TYPEOFARG    
20910 20 30 78 38 30 20 20 20 20 2f 2a 20 4f 50 5f 43   0x80    /* OP_C
20920 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20  olumn only used 
20930 66 6f 72 20 74 79 70 65 6f 66 28 29 20 2a 2f 0a  for typeof() */.
20940 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 42  #define OPFLAG_B
20950 55 4c 4b 43 53 52 20 20 20 20 20 20 20 30 78 30  ULKCSR       0x0
20960 31 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a  1    /* OP_Open*
20970 2a 20 75 73 65 64 20 74 6f 20 6f 70 65 6e 20 62  * used to open b
20980 75 6c 6b 20 63 75 72 73 6f 72 20 2a 2f 0a 23 64  ulk cursor */.#d
20990 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 53 45 45  efine OPFLAG_SEE
209a0 4b 45 51 20 20 20 20 20 20 20 20 30 78 30 32 20  KEQ        0x02 
209b0 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20     /* OP_Open** 
209c0 63 75 72 73 6f 72 20 75 73 65 73 20 45 51 20 73  cursor uses EQ s
209d0 65 65 6b 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66  eek only */.#def
209e0 69 6e 65 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45  ine OPFLAG_FORDE
209f0 4c 45 54 45 20 20 20 20 20 30 78 30 38 20 20 20  LETE     0x08   
20a00 20 2f 2a 20 4f 50 5f 4f 70 65 6e 20 73 68 6f 75   /* OP_Open shou
20a10 6c 64 20 75 73 65 20 42 54 52 45 45 5f 46 4f 52  ld use BTREE_FOR
20a20 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e  DELETE */.#defin
20a30 65 20 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47  e OPFLAG_P2ISREG
20a40 20 20 20 20 20 20 20 30 78 31 30 20 20 20 20 2f         0x10    /
20a50 2a 20 50 32 20 74 6f 20 4f 50 5f 4f 70 65 6e 2a  * P2 to OP_Open*
20a60 2a 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20  * is a register 
20a70 6e 75 6d 62 65 72 20 2a 2f 0a 23 64 65 66 69 6e  number */.#defin
20a80 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45  e OPFLAG_PERMUTE
20a90 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f         0x01    /
20aa0 2a 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 75 73  * OP_Compare: us
20ab0 65 20 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f  e the permutatio
20ac0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  n */.#define OPF
20ad0 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e  LAG_SAVEPOSITION
20ae0 20 20 30 78 30 32 20 20 20 20 2f 2a 20 4f 50 5f    0x02    /* OP_
20af0 44 65 6c 65 74 65 2f 49 6e 73 65 72 74 3a 20 73  Delete/Insert: s
20b00 61 76 65 20 63 75 72 73 6f 72 20 70 6f 73 20 2a  ave cursor pos *
20b10 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
20b20 5f 41 55 58 44 45 4c 45 54 45 20 20 20 20 20 30  _AUXDELETE     0
20b30 78 30 34 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c  x04    /* OP_Del
20b40 65 74 65 3a 20 69 6e 64 65 78 20 69 6e 20 61 20  ete: index in a 
20b50 44 45 4c 45 54 45 20 6f 70 20 2a 2f 0a 0a 2f 2a  DELETE op */../*
20b60 0a 20 2a 20 45 61 63 68 20 74 72 69 67 67 65 72  . * Each trigger
20b70 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20   present in the 
20b80 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
20b90 69 73 20 73 74 6f 72 65 64 20 61 73 20 61 6e 20  is stored as an 
20ba0 69 6e 73 74 61 6e 63 65 20 6f 66 0a 20 2a 20 73  instance of. * s
20bb0 74 72 75 63 74 20 54 72 69 67 67 65 72 2e 0a 20  truct Trigger.. 
20bc0 2a 0a 20 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f  *. * Pointers to
20bd0 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74   instances of st
20be0 72 75 63 74 20 54 72 69 67 67 65 72 20 61 72 65  ruct Trigger are
20bf0 20 73 74 6f 72 65 64 20 69 6e 20 74 77 6f 20 77   stored in two w
20c00 61 79 73 2e 0a 20 2a 20 31 2e 20 49 6e 20 74 68  ays.. * 1. In th
20c10 65 20 22 74 72 69 67 48 61 73 68 22 20 68 61 73  e "trigHash" has
20c20 68 20 74 61 62 6c 65 20 28 70 61 72 74 20 6f 66  h table (part of
20c30 20 74 68 65 20 73 71 6c 69 74 65 33 2a 20 74 68   the sqlite3* th
20c40 61 74 20 72 65 70 72 65 73 65 6e 74 73 20 74 68  at represents th
20c50 65 0a 20 2a 20 20 20 20 64 61 74 61 62 61 73 65  e. *    database
20c60 29 2e 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 54  ). This allows T
20c70 72 69 67 67 65 72 20 73 74 72 75 63 74 75 72 65  rigger structure
20c80 73 20 74 6f 20 62 65 20 72 65 74 72 69 65 76 65  s to be retrieve
20c90 64 20 62 79 20 6e 61 6d 65 2e 0a 20 2a 20 32 2e  d by name.. * 2.
20ca0 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20 61 73   All triggers as
20cb0 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20  sociated with a 
20cc0 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 66 6f 72  single table for
20cd0 6d 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 2c  m a linked list,
20ce0 20 75 73 69 6e 67 20 74 68 65 0a 20 2a 20 20 20   using the. *   
20cf0 20 70 4e 65 78 74 20 6d 65 6d 62 65 72 20 6f 66   pNext member of
20d00 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 2e   struct Trigger.
20d10 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   A pointer to th
20d20 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20  e first element 
20d30 6f 66 20 74 68 65 0a 20 2a 20 20 20 20 6c 69 6e  of the. *    lin
20d40 6b 65 64 20 6c 69 73 74 20 69 73 20 73 74 6f 72  ked list is stor
20d50 65 64 20 61 73 20 74 68 65 20 22 70 54 72 69 67  ed as the "pTrig
20d60 67 65 72 22 20 6d 65 6d 62 65 72 20 6f 66 20 74  ger" member of t
20d70 68 65 20 61 73 73 6f 63 69 61 74 65 64 0a 20 2a  he associated. *
20d80 20 20 20 20 73 74 72 75 63 74 20 54 61 62 6c 65      struct Table
20d90 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 73 74 65  .. *. * The "ste
20da0 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 70  p_list" member p
20db0 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72  oints to the fir
20dc0 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61 20  st element of a 
20dd0 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 20 2a 20 63  linked list. * c
20de0 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53 51  ontaining the SQ
20df0 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70 65  L statements spe
20e00 63 69 66 69 65 64 20 61 73 20 74 68 65 20 74 72  cified as the tr
20e10 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a 20  igger program.. 
20e20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65  */.struct Trigge
20e30 72 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  r {.  char *zNam
20e40 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
20e50 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   The name of the
20e60 20 74 72 69 67 67 65 72 20 20 20 20 20 20 20 20   trigger        
20e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e80 2a 2f 0a 20 20 63 68 61 72 20 2a 74 61 62 6c 65  */.  char *table
20e90 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
20ea0 54 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65  The table or vie
20eb0 77 20 74 6f 20 77 68 69 63 68 20 74 68 65 20 74  w to which the t
20ec0 72 69 67 67 65 72 20 61 70 70 6c 69 65 73 20 2a  rigger applies *
20ed0 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20  /.  u8 op;      
20ee0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
20ef0 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c  ne of TK_DELETE,
20f00 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49   TK_UPDATE, TK_I
20f10 4e 53 45 52 54 20 20 20 20 20 20 20 20 20 2a 2f  NSERT         */
20f20 0a 20 20 75 38 20 74 72 5f 74 6d 3b 20 20 20 20  .  u8 tr_tm;    
20f30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
20f40 65 20 6f 66 20 54 52 49 47 47 45 52 5f 42 45 46  e of TRIGGER_BEF
20f50 4f 52 45 2c 20 54 52 49 47 47 45 52 5f 41 46 54  ORE, TRIGGER_AFT
20f60 45 52 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57  ER */.  Expr *pW
20f70 68 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  hen;            
20f80 2f 2a 20 54 68 65 20 57 48 45 4e 20 63 6c 61 75  /* The WHEN clau
20f90 73 65 20 6f 66 20 74 68 65 20 65 78 70 72 65 73  se of the expres
20fa0 73 69 6f 6e 20 28 6d 61 79 20 62 65 20 4e 55 4c  sion (may be NUL
20fb0 4c 29 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a  L) */.  IdList *
20fc0 70 43 6f 6c 75 6d 6e 73 3b 20 20 20 20 20 20 20  pColumns;       
20fd0 2f 2a 20 49 66 20 74 68 69 73 20 69 73 20 61 6e  /* If this is an
20fe0 20 55 50 44 41 54 45 20 4f 46 20 3c 63 6f 6c 75   UPDATE OF <colu
20ff0 6d 6e 2d 6c 69 73 74 3e 20 74 72 69 67 67 65 72  mn-list> trigger
21000 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
21010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
21020 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e  he <column-list>
21030 20 69 73 20 73 74 6f 72 65 64 20 68 65 72 65 20   is stored here 
21040 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
21050 68 65 6d 61 3b 20 20 20 20 20 20 20 20 2f 2a 20  hema;        /* 
21060 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e  Schema containin
21070 67 20 74 68 65 20 74 72 69 67 67 65 72 20 2a 2f  g the trigger */
21080 0a 20 20 53 63 68 65 6d 61 20 2a 70 54 61 62 53  .  Schema *pTabS
21090 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63  chema;     /* Sc
210a0 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20  hema containing 
210b0 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54  the table */.  T
210c0 72 69 67 67 65 72 53 74 65 70 20 2a 73 74 65 70  riggerStep *step
210d0 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b 20 6c  _list; /* Link l
210e0 69 73 74 20 6f 66 20 74 72 69 67 67 65 72 20 70  ist of trigger p
210f0 72 6f 67 72 61 6d 20 73 74 65 70 73 20 20 20 20  rogram steps    
21100 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 54 72           */.  Tr
21110 69 67 67 65 72 20 2a 70 4e 65 78 74 3b 20 20 20  igger *pNext;   
21120 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 74 72        /* Next tr
21130 69 67 67 65 72 20 61 73 73 6f 63 69 61 74 65 64  igger associated
21140 20 77 69 74 68 20 74 68 65 20 74 61 62 6c 65 20   with the table 
21150 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 74  */.};../*.** A t
21160 72 69 67 67 65 72 20 69 73 20 65 69 74 68 65 72  rigger is either
21170 20 61 20 42 45 46 4f 52 45 20 6f 72 20 61 6e 20   a BEFORE or an 
21180 41 46 54 45 52 20 74 72 69 67 67 65 72 2e 20 20  AFTER trigger.  
21190 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f  The following co
211a0 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65 74 65 72  nstants.** deter
211b0 6d 69 6e 65 20 77 68 69 63 68 2e 0a 2a 2a 0a 2a  mine which..**.*
211c0 2a 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6d  * If there are m
211d0 75 6c 74 69 70 6c 65 20 74 72 69 67 67 65 72 73  ultiple triggers
211e0 2c 20 79 6f 75 20 6d 69 67 68 74 20 6f 66 20 73  , you might of s
211f0 6f 6d 65 20 42 45 46 4f 52 45 20 61 6e 64 20 73  ome BEFORE and s
21200 6f 6d 65 20 41 46 54 45 52 2e 0a 2a 2a 20 49 6e  ome AFTER..** In
21210 20 74 68 61 74 20 63 61 73 65 73 2c 20 74 68 65   that cases, the
21220 20 63 6f 6e 73 74 61 6e 74 73 20 62 65 6c 6f 77   constants below
21230 20 63 61 6e 20 62 65 20 4f 52 65 64 20 74 6f 67   can be ORed tog
21240 65 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ether..*/.#defin
21250 65 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45  e TRIGGER_BEFORE
21260 20 20 31 0a 23 64 65 66 69 6e 65 20 54 52 49 47    1.#define TRIG
21270 47 45 52 5f 41 46 54 45 52 20 20 20 32 0a 0a 2f  GER_AFTER   2../
21280 2a 0a 20 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *. * An instance
21290 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67   of struct Trigg
212a0 65 72 53 74 65 70 20 69 73 20 75 73 65 64 20 74  erStep is used t
212b0 6f 20 73 74 6f 72 65 20 61 20 73 69 6e 67 6c 65  o store a single
212c0 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 0a 20   SQL statement. 
212d0 2a 20 74 68 61 74 20 69 73 20 61 20 70 61 72 74  * that is a part
212e0 20 6f 66 20 61 20 74 72 69 67 67 65 72 2d 70 72   of a trigger-pr
212f0 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a 20 49 6e 73  ogram.. *. * Ins
21300 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74  tances of struct
21310 20 54 72 69 67 67 65 72 53 74 65 70 20 61 72 65   TriggerStep are
21320 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e   stored in a sin
21330 67 6c 79 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  gly linked list 
21340 28 6c 69 6e 6b 65 64 0a 20 2a 20 75 73 69 6e 67  (linked. * using
21350 20 74 68 65 20 22 70 4e 65 78 74 22 20 6d 65 6d   the "pNext" mem
21360 62 65 72 29 20 72 65 66 65 72 65 6e 63 65 64 20  ber) referenced 
21370 62 79 20 74 68 65 20 22 73 74 65 70 5f 6c 69 73  by the "step_lis
21380 74 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65  t" member of the
21390 0a 20 2a 20 61 73 73 6f 63 69 61 74 65 64 20 73  . * associated s
213a0 74 72 75 63 74 20 54 72 69 67 67 65 72 20 69 6e  truct Trigger in
213b0 73 74 61 6e 63 65 2e 20 54 68 65 20 66 69 72 73  stance. The firs
213c0 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65  t element of the
213d0 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 0a   linked list is.
213e0 20 2a 20 74 68 65 20 66 69 72 73 74 20 73 74 65   * the first ste
213f0 70 20 6f 66 20 74 68 65 20 74 72 69 67 67 65 72  p of the trigger
21400 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a 20  -program.. *. * 
21410 54 68 65 20 22 6f 70 22 20 6d 65 6d 62 65 72 20  The "op" member 
21420 69 6e 64 69 63 61 74 65 73 20 77 68 65 74 68 65  indicates whethe
21430 72 20 74 68 69 73 20 69 73 20 61 20 22 44 45 4c  r this is a "DEL
21440 45 54 45 22 2c 20 22 49 4e 53 45 52 54 22 2c 20  ETE", "INSERT", 
21450 22 55 50 44 41 54 45 22 20 6f 72 0a 20 2a 20 22  "UPDATE" or. * "
21460 53 45 4c 45 43 54 22 20 73 74 61 74 65 6d 65 6e  SELECT" statemen
21470 74 2e 20 54 68 65 20 6d 65 61 6e 69 6e 67 73 20  t. The meanings 
21480 6f 66 20 74 68 65 20 6f 74 68 65 72 20 6d 65 6d  of the other mem
21490 62 65 72 73 20 69 73 20 64 65 74 65 72 6d 69 6e  bers is determin
214a0 65 64 20 62 79 20 74 68 65 0a 20 2a 20 76 61 6c  ed by the. * val
214b0 75 65 20 6f 66 20 22 6f 70 22 20 61 73 20 66 6f  ue of "op" as fo
214c0 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f 70  llows:. *. * (op
214d0 20 3d 3d 20 54 4b 5f 49 4e 53 45 52 54 29 0a 20   == TK_INSERT). 
214e0 2a 20 6f 72 63 6f 6e 66 20 20 20 20 2d 3e 20 73  * orconf    -> s
214f0 74 6f 72 65 73 20 74 68 65 20 4f 4e 20 43 4f 4e  tores the ON CON
21500 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 0a  FLICT algorithm.
21510 20 2a 20 70 53 65 6c 65 63 74 20 20 20 2d 3e 20   * pSelect   -> 
21520 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e  If this is an IN
21530 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 53 45  SERT INTO ... SE
21540 4c 45 43 54 20 2e 2e 2e 20 73 74 61 74 65 6d 65  LECT ... stateme
21550 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20  nt, then. *     
21560 20 20 20 20 20 20 20 20 20 74 68 69 73 20 73 74           this st
21570 6f 72 65 73 20 61 20 70 6f 69 6e 74 65 72 20 74  ores a pointer t
21580 6f 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  o the SELECT sta
21590 74 65 6d 65 6e 74 2e 20 4f 74 68 65 72 77 69 73  tement. Otherwis
215a0 65 20 4e 55 4c 4c 2e 0a 20 2a 20 7a 54 61 72 67  e NULL.. * zTarg
215b0 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64  et   -> Dequoted
215c0 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
215d0 6c 65 20 74 6f 20 69 6e 73 65 72 74 20 69 6e 74  le to insert int
215e0 6f 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20  o.. * pExprList 
215f0 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e  -> If this is an
21600 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e   INSERT INTO ...
21610 20 56 41 4c 55 45 53 20 2e 2e 2e 20 73 74 61 74   VALUES ... stat
21620 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20  ement, then. *  
21630 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
21640 20 73 74 6f 72 65 73 20 76 61 6c 75 65 73 20 74   stores values t
21650 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e 20 4f  o be inserted. O
21660 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20  therwise NULL.. 
21670 2a 20 70 49 64 4c 69 73 74 20 20 20 2d 3e 20 49  * pIdList   -> I
21680 66 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53  f this is an INS
21690 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 28 3c 63  ERT INTO ... (<c
216a0 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20 56 41  olumn-names>) VA
216b0 4c 55 45 53 20 2e 2e 2e 0a 20 2a 20 20 20 20 20  LUES .... *     
216c0 20 20 20 20 20 20 20 20 20 73 74 61 74 65 6d 65           stateme
216d0 6e 74 2c 20 74 68 65 6e 20 74 68 69 73 20 73 74  nt, then this st
216e0 6f 72 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 2d  ores the column-
216f0 6e 61 6d 65 73 20 74 6f 20 62 65 0a 20 2a 20 20  names to be. *  
21700 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 73 65              inse
21710 72 74 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a 20 2a  rted into.. *. *
21720 20 28 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c 45 54   (op == TK_DELET
21730 45 29 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20  E). * zTarget   
21740 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65  -> Dequoted name
21750 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f   of the table to
21760 20 64 65 6c 65 74 65 20 66 72 6f 6d 2e 0a 20 2a   delete from.. *
21770 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68   pWhere    -> Th
21780 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f  e WHERE clause o
21790 66 20 74 68 65 20 44 45 4c 45 54 45 20 73 74 61  f the DELETE sta
217a0 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73  tement if one is
217b0 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20   specified.. *  
217c0 20 20 20 20 20 20 20 20 20 20 20 20 4f 74 68 65              Othe
217d0 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 0a 20  rwise NULL.. *. 
217e0 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 55 50 44 41  * (op == TK_UPDA
217f0 54 45 29 0a 20 2a 20 7a 54 61 72 67 65 74 20 20  TE). * zTarget  
21800 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61 6d   -> Dequoted nam
21810 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
21820 6f 20 75 70 64 61 74 65 2e 0a 20 2a 20 70 57 68  o update.. * pWh
21830 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48  ere    -> The WH
21840 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68  ERE clause of th
21850 65 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65  e UPDATE stateme
21860 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65  nt if one is spe
21870 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20  cified.. *      
21880 20 20 20 20 20 20 20 20 4f 74 68 65 72 77 69 73          Otherwis
21890 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78 70 72  e NULL.. * pExpr
218a0 4c 69 73 74 20 2d 3e 20 41 20 6c 69 73 74 20 6f  List -> A list o
218b0 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74 6f  f the columns to
218c0 20 75 70 64 61 74 65 20 61 6e 64 20 74 68 65 20   update and the 
218d0 65 78 70 72 65 73 73 69 6f 6e 73 20 74 6f 20 75  expressions to u
218e0 70 64 61 74 65 0a 20 2a 20 20 20 20 20 20 20 20  pdate. *        
218f0 20 20 20 20 20 20 74 68 65 6d 20 74 6f 2e 20 53        them to. S
21900 65 65 20 73 71 6c 69 74 65 33 55 70 64 61 74 65  ee sqlite3Update
21910 28 29 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  () documentation
21920 20 6f 66 20 22 70 43 68 61 6e 67 65 73 22 0a 20   of "pChanges". 
21930 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61  *              a
21940 72 67 75 6d 65 6e 74 2e 0a 20 2a 0a 20 2a 2f 0a  rgument.. *. */.
21950 73 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74  struct TriggerSt
21960 65 70 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20  ep {.  u8 op;   
21970 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
21980 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c  ne of TK_DELETE,
21990 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49   TK_UPDATE, TK_I
219a0 4e 53 45 52 54 2c 20 54 4b 5f 53 45 4c 45 43 54  NSERT, TK_SELECT
219b0 20 2a 2f 0a 20 20 75 38 20 6f 72 63 6f 6e 66 3b   */.  u8 orconf;
219c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45             /* OE
219d0 5f 52 6f 6c 6c 62 61 63 6b 20 65 74 63 2e 20 2a  _Rollback etc. *
219e0 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54 72  /.  Trigger *pTr
219f0 69 67 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ig;      /* The 
21a00 74 72 69 67 67 65 72 20 74 68 61 74 20 74 68 69  trigger that thi
21a10 73 20 73 74 65 70 20 69 73 20 61 20 70 61 72 74  s step is a part
21a20 20 6f 66 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20   of */.  Select 
21a30 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a  *pSelect;     /*
21a40 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
21a50 74 20 6f 72 20 52 48 53 20 6f 66 20 49 4e 53 45  t or RHS of INSE
21a60 52 54 20 49 4e 54 4f 20 53 45 4c 45 43 54 20 2e  RT INTO SELECT .
21a70 2e 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54  .. */.  char *zT
21a80 61 72 67 65 74 3b 20 20 20 20 20 20 20 2f 2a 20  arget;       /* 
21a90 54 61 72 67 65 74 20 74 61 62 6c 65 20 66 6f 72  Target table for
21aa0 20 44 45 4c 45 54 45 2c 20 55 50 44 41 54 45 2c   DELETE, UPDATE,
21ab0 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 45 78 70   INSERT */.  Exp
21ac0 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20  r *pWhere;      
21ad0 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20 63    /* The WHERE c
21ae0 6c 61 75 73 65 20 66 6f 72 20 44 45 4c 45 54 45  lause for DELETE
21af0 20 6f 72 20 55 50 44 41 54 45 20 73 74 65 70 73   or UPDATE steps
21b00 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
21b10 70 45 78 70 72 4c 69 73 74 3b 20 2f 2a 20 53 45  pExprList; /* SE
21b20 54 20 63 6c 61 75 73 65 20 66 6f 72 20 55 50 44  T clause for UPD
21b30 41 54 45 2e 20 2a 2f 0a 20 20 49 64 4c 69 73 74  ATE. */.  IdList
21b40 20 2a 70 49 64 4c 69 73 74 3b 20 20 20 20 20 2f   *pIdList;     /
21b50 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 66  * Column names f
21b60 6f 72 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 54  or INSERT */.  T
21b70 72 69 67 67 65 72 53 74 65 70 20 2a 70 4e 65 78  riggerStep *pNex
21b80 74 3b 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 74  t;  /* Next in t
21b90 68 65 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a  he link-list */.
21ba0 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 70    TriggerStep *p
21bb0 4c 61 73 74 3b 20 20 2f 2a 20 4c 61 73 74 20 65  Last;  /* Last e
21bc0 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c  lement in link-l
21bd0 69 73 74 2e 20 56 61 6c 69 64 20 66 6f 72 20 31  ist. Valid for 1
21be0 73 74 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a  st elem only */.
21bf0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  };../*.** The fo
21c00 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
21c10 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72  e contains infor
21c20 6d 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74  mation used by t
21c30 68 65 20 73 71 6c 69 74 65 46 69 78 2e 2e 2e 0a  he sqliteFix....
21c40 2a 2a 20 72 6f 75 74 69 6e 65 73 20 61 73 20 74  ** routines as t
21c50 68 65 79 20 77 61 6c 6b 20 74 68 65 20 70 61 72  hey walk the par
21c60 73 65 20 74 72 65 65 20 74 6f 20 6d 61 6b 65 20  se tree to make 
21c70 64 61 74 61 62 61 73 65 20 72 65 66 65 72 65 6e  database referen
21c80 63 65 73 0a 2a 2a 20 65 78 70 6c 69 63 69 74 2e  ces.** explicit.
21c90 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75  .*/.typedef stru
21ca0 63 74 20 44 62 46 69 78 65 72 20 44 62 46 69 78  ct DbFixer DbFix
21cb0 65 72 3b 0a 73 74 72 75 63 74 20 44 62 46 69 78  er;.struct DbFix
21cc0 65 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50  er {.  Parse *pP
21cd0 61 72 73 65 3b 20 20 20 20 20 20 2f 2a 20 54 68  arse;      /* Th
21ce0 65 20 70 61 72 73 69 6e 67 20 63 6f 6e 74 65 78  e parsing contex
21cf0 74 2e 20 20 45 72 72 6f 72 20 6d 65 73 73 61 67  t.  Error messag
21d00 65 73 20 77 72 69 74 74 65 6e 20 68 65 72 65 20  es written here 
21d10 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
21d20 68 65 6d 61 3b 20 20 20 20 2f 2a 20 46 69 78 20  hema;    /* Fix 
21d30 69 74 65 6d 73 20 74 6f 20 74 68 69 73 20 73 63  items to this sc
21d40 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 62 56  hema */.  int bV
21d50 61 72 4f 6e 6c 79 3b 20 20 20 20 20 20 20 2f 2a  arOnly;       /*
21d60 20 43 68 65 63 6b 20 66 6f 72 20 76 61 72 69 61   Check for varia
21d70 62 6c 65 20 72 65 66 65 72 65 6e 63 65 73 20 6f  ble references o
21d80 6e 6c 79 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  nly */.  const c
21d90 68 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a 20  har *zDb;    /* 
21da0 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f 62  Make sure all ob
21db0 6a 65 63 74 73 20 61 72 65 20 63 6f 6e 74 61 69  jects are contai
21dc0 6e 65 64 20 69 6e 20 74 68 69 73 20 64 61 74 61  ned in this data
21dd0 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  base */.  const 
21de0 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f 2a  char *zType;  /*
21df0 20 54 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6e   Type of the con
21e00 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f  tainer - used fo
21e10 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73  r error messages
21e20 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b 65   */.  const Toke
21e30 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d  n *pName; /* Nam
21e40 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e  e of the contain
21e50 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72  er - used for er
21e60 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a  ror messages */.
21e70 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a  };../*.** An obj
21e80 65 63 74 65 64 20 75 73 65 64 20 74 6f 20 61 63  ected used to ac
21e90 63 75 6d 75 6c 61 74 65 20 74 68 65 20 74 65 78  cumulate the tex
21ea0 74 20 6f 66 20 61 20 73 74 72 69 6e 67 20 77 68  t of a string wh
21eb0 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74  ere we.** do not
21ec0 20 6e 65 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f   necessarily kno
21ed0 77 20 68 6f 77 20 62 69 67 20 74 68 65 20 73 74  w how big the st
21ee0 72 69 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e 20  ring will be in 
21ef0 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75  the end..*/.stru
21f00 63 74 20 53 74 72 41 63 63 75 6d 20 7b 0a 20 20  ct StrAccum {.  
21f10 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
21f20 20 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c       /* Optional
21f30 20 64 61 74 61 62 61 73 65 20 66 6f 72 20 6c 6f   database for lo
21f40 6f 6b 61 73 69 64 65 2e 20 20 43 61 6e 20 62 65  okaside.  Can be
21f50 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72 20   NULL */.  char 
21f60 2a 7a 42 61 73 65 3b 20 20 20 20 20 20 20 20 20  *zBase;         
21f70 2f 2a 20 41 20 62 61 73 65 20 61 6c 6c 6f 63 61  /* A base alloca
21f80 74 69 6f 6e 2e 20 20 4e 6f 74 20 66 72 6f 6d 20  tion.  Not from 
21f90 6d 61 6c 6c 6f 63 2e 20 2a 2f 0a 20 20 63 68 61  malloc. */.  cha
21fa0 72 20 2a 7a 54 65 78 74 3b 20 20 20 20 20 20 20  r *zText;       
21fb0 20 20 2f 2a 20 54 68 65 20 73 74 72 69 6e 67 20    /* The string 
21fc0 63 6f 6c 6c 65 63 74 65 64 20 73 6f 20 66 61 72  collected so far
21fd0 20 2a 2f 0a 20 20 75 33 32 20 20 6e 43 68 61 72   */.  u32  nChar
21fe0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65  ;          /* Le
21ff0 6e 67 74 68 20 6f 66 20 74 68 65 20 73 74 72 69  ngth of the stri
22000 6e 67 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75  ng so far */.  u
22010 33 32 20 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20  32  nAlloc;     
22020 20 20 20 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66      /* Amount of
22030 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64   space allocated
22040 20 69 6e 20 7a 54 65 78 74 20 2a 2f 0a 20 20 75   in zText */.  u
22050 33 32 20 20 6d 78 41 6c 6c 6f 63 3b 20 20 20 20  32  mxAlloc;    
22060 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61      /* Maximum a
22070 6c 6c 6f 77 65 64 20 61 6c 6c 6f 63 61 74 69 6f  llowed allocatio
22080 6e 2e 20 20 30 20 66 6f 72 20 6e 6f 20 6d 61 6c  n.  0 for no mal
22090 6c 6f 63 20 75 73 61 67 65 20 2a 2f 0a 20 20 75  loc usage */.  u
220a0 38 20 20 20 61 63 63 45 72 72 6f 72 3b 20 20 20  8   accError;   
220b0 20 20 20 20 2f 2a 20 53 54 52 41 43 43 55 4d 5f      /* STRACCUM_
220c0 4e 4f 4d 45 4d 20 6f 72 20 53 54 52 41 43 43 55  NOMEM or STRACCU
220d0 4d 5f 54 4f 4f 42 49 47 20 2a 2f 0a 20 20 75 38  M_TOOBIG */.  u8
220e0 20 20 20 70 72 69 6e 74 66 46 6c 61 67 73 3b 20     printfFlags; 
220f0 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 50 52 49     /* SQLITE_PRI
22100 4e 54 46 20 66 6c 61 67 73 20 62 65 6c 6f 77 20  NTF flags below 
22110 2a 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 53 54  */.};.#define ST
22120 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20 20 20 31  RACCUM_NOMEM   1
22130 0a 23 64 65 66 69 6e 65 20 53 54 52 41 43 43 55  .#define STRACCU
22140 4d 5f 54 4f 4f 42 49 47 20 20 32 0a 23 64 65 66  M_TOOBIG  2.#def
22150 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54  ine SQLITE_PRINT
22160 46 5f 49 4e 54 45 52 4e 41 4c 20 30 78 30 31 20  F_INTERNAL 0x01 
22170 20 2f 2a 20 49 6e 74 65 72 6e 61 6c 2d 75 73 65   /* Internal-use
22180 2d 6f 6e 6c 79 20 63 6f 6e 76 65 72 74 65 72 73  -only converters
22190 20 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64 65 66   allowed */.#def
221a0 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54  ine SQLITE_PRINT
221b0 46 5f 53 51 4c 46 55 4e 43 20 20 30 78 30 32 20  F_SQLFUNC  0x02 
221c0 20 2f 2a 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e   /* SQL function
221d0 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 56 58   arguments to VX
221e0 50 72 69 6e 74 66 20 2a 2f 0a 23 64 65 66 69 6e  Printf */.#defin
221f0 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f  e SQLITE_PRINTF_
22200 4d 41 4c 4c 4f 43 45 44 20 30 78 30 34 20 20 2f  MALLOCED 0x04  /
22210 2a 20 54 72 75 65 20 69 66 20 78 54 65 78 74 20  * True if xText 
22220 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 73 70 61  is allocated spa
22230 63 65 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 69  ce */..#define i
22240 73 4d 61 6c 6c 6f 63 65 64 28 58 29 20 20 28 28  sMalloced(X)  ((
22250 28 58 29 2d 3e 70 72 69 6e 74 66 46 6c 61 67 73  (X)->printfFlags
22260 20 26 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46   & SQLITE_PRINTF
22270 5f 4d 41 4c 4c 4f 43 45 44 29 21 3d 30 29 0a 0a  _MALLOCED)!=0)..
22280 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74 65 72  ./*.** A pointer
22290 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75   to this structu
222a0 72 65 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f  re is used to co
222b0 6d 6d 75 6e 69 63 61 74 65 20 69 6e 66 6f 72 6d  mmunicate inform
222c0 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71  ation.** from sq
222d0 6c 69 74 65 33 49 6e 69 74 20 61 6e 64 20 4f 50  lite3Init and OP
222e0 5f 50 61 72 73 65 53 63 68 65 6d 61 20 69 6e 74  _ParseSchema int
222f0 6f 20 74 68 65 20 73 71 6c 69 74 65 33 49 6e 69  o the sqlite3Ini
22300 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79  tCallback..*/.ty
22310 70 65 64 65 66 20 73 74 72 75 63 74 20 7b 0a 20  pedef struct {. 
22320 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
22330 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61       /* The data
22340 62 61 73 65 20 62 65 69 6e 67 20 69 6e 69 74 69  base being initi
22350 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 63 68 61 72  alized */.  char
22360 20 2a 2a 70 7a 45 72 72 4d 73 67 3b 20 20 20 20   **pzErrMsg;    
22370 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65  /* Error message
22380 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a   stored here */.
22390 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20    int iDb;      
223a0 20 20 20 20 20 20 2f 2a 20 30 20 66 6f 72 20 6d        /* 0 for m
223b0 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20 20 31  ain database.  1
223c0 20 66 6f 72 20 54 45 4d 50 2c 20 32 2e 2e 20 66   for TEMP, 2.. f
223d0 6f 72 20 41 54 54 41 43 48 65 64 20 2a 2f 0a 20  or ATTACHed */. 
223e0 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20   int rc;        
223f0 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 63       /* Result c
22400 6f 64 65 20 73 74 6f 72 65 64 20 68 65 72 65 20  ode stored here 
22410 2a 2f 0a 7d 20 49 6e 69 74 44 61 74 61 3b 0a 0a  */.} InitData;..
22420 2f 2a 0a 2a 2a 20 53 74 72 75 63 74 75 72 65 20  /*.** Structure 
22430 63 6f 6e 74 61 69 6e 69 6e 67 20 67 6c 6f 62 61  containing globa
22440 6c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  l configuration 
22450 64 61 74 61 20 66 6f 72 20 74 68 65 20 53 51 4c  data for the SQL
22460 69 74 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a  ite library..**.
22470 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74 75 72  ** This structur
22480 65 20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20  e also contains 
22490 73 6f 6d 65 20 73 74 61 74 65 20 69 6e 66 6f 72  some state infor
224a0 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  mation..*/.struc
224b0 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20  t Sqlite3Config 
224c0 7b 0a 20 20 69 6e 74 20 62 4d 65 6d 73 74 61 74  {.  int bMemstat
224d0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
224e0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
224f0 20 65 6e 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73   enable memory s
22500 74 61 74 75 73 20 2a 2f 0a 20 20 69 6e 74 20 62  tatus */.  int b
22510 43 6f 72 65 4d 75 74 65 78 3b 20 20 20 20 20 20  CoreMutex;      
22520 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
22530 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 63  True to enable c
22540 6f 72 65 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a  ore mutexing */.
22550 20 20 69 6e 74 20 62 46 75 6c 6c 4d 75 74 65 78    int bFullMutex
22560 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
22570 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65      /* True to e
22580 6e 61 62 6c 65 20 66 75 6c 6c 20 6d 75 74 65 78  nable full mutex
22590 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62 4f 70  ing */.  int bOp
225a0 65 6e 55 72 69 3b 20 20 20 20 20 20 20 20 20 20  enUri;          
225b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
225c0 75 65 20 74 6f 20 69 6e 74 65 72 70 72 65 74 20  ue to interpret 
225d0 66 69 6c 65 6e 61 6d 65 73 20 61 73 20 55 52 49  filenames as URI
225e0 73 20 2a 2f 0a 20 20 69 6e 74 20 62 55 73 65 43  s */.  int bUseC
225f0 69 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  is;             
22600 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20           /* Use 
22610 63 6f 76 65 72 69 6e 67 20 69 6e 64 69 63 65 73  covering indices
22620 20 66 6f 72 20 66 75 6c 6c 2d 73 63 61 6e 73 20   for full-scans 
22630 2a 2f 0a 20 20 69 6e 74 20 6d 78 53 74 72 6c 65  */.  int mxStrle
22640 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n;              
22650 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75         /* Maximu
22660 6d 20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  m string length 
22670 2a 2f 0a 20 20 69 6e 74 20 6e 65 76 65 72 43 6f  */.  int neverCo
22680 72 72 75 70 74 3b 20 20 20 20 20 20 20 20 20 20  rrupt;          
22690 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61         /* Databa
226a0 73 65 20 69 73 20 61 6c 77 61 79 73 20 77 65 6c  se is always wel
226b0 6c 2d 66 6f 72 6d 65 64 20 2a 2f 0a 20 20 69 6e  l-formed */.  in
226c0 74 20 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20 20  t szLookaside;  
226d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
226e0 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61  /* Default looka
226f0 73 69 64 65 20 62 75 66 66 65 72 20 73 69 7a 65  side buffer size
22700 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61   */.  int nLooka
22710 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  side;           
22720 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
22730 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66  lt lookaside buf
22740 66 65 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 69  fer count */.  i
22750 6e 74 20 6e 53 74 6d 74 53 70 69 6c 6c 3b 20 20  nt nStmtSpill;  
22760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22770 20 2f 2a 20 53 74 6d 74 2d 6a 6f 75 72 6e 61 6c   /* Stmt-journal
22780 20 73 70 69 6c 6c 2d 74 6f 2d 64 69 73 6b 20 74   spill-to-disk t
22790 68 72 65 73 68 6f 6c 64 20 2a 2f 0a 20 20 73 71  hreshold */.  sq
227a0 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64  lite3_mem_method
227b0 73 20 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  s m;            
227c0 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d  /* Low-level mem
227d0 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69  ory allocation i
227e0 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71  nterface */.  sq
227f0 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68  lite3_mutex_meth
22800 6f 64 73 20 6d 75 74 65 78 3b 20 20 20 20 20 20  ods mutex;      
22810 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75 74  /* Low-level mut
22820 65 78 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a  ex interface */.
22830 20 20 73 71 6c 69 74 65 33 5f 70 63 61 63 68 65    sqlite3_pcache
22840 5f 6d 65 74 68 6f 64 73 32 20 70 63 61 63 68 65  _methods2 pcache
22850 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c  2;  /* Low-level
22860 20 70 61 67 65 2d 63 61 63 68 65 20 69 6e 74 65   page-cache inte
22870 72 66 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20  rface */.  void 
22880 2a 70 48 65 61 70 3b 20 20 20 20 20 20 20 20 20  *pHeap;         
22890 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
228a0 48 65 61 70 20 73 74 6f 72 61 67 65 20 73 70 61  Heap storage spa
228b0 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 61  ce */.  int nHea
228c0 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
228d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
228e0 65 20 6f 66 20 70 48 65 61 70 5b 5d 20 2a 2f 0a  e of pHeap[] */.
228f0 20 20 69 6e 74 20 6d 6e 52 65 71 2c 20 6d 78 52    int mnReq, mxR
22900 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  eq;             
22910 20 20 20 20 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d      /* Min and m
22920 61 78 20 68 65 61 70 20 72 65 71 75 65 73 74 73  ax heap requests
22930 20 73 69 7a 65 73 20 2a 2f 0a 20 20 73 71 6c 69   sizes */.  sqli
22940 74 65 33 5f 69 6e 74 36 34 20 73 7a 4d 6d 61 70  te3_int64 szMmap
22950 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
22960 20 6d 6d 61 70 28 29 20 73 70 61 63 65 20 70 65   mmap() space pe
22970 72 20 6f 70 65 6e 20 66 69 6c 65 20 2a 2f 0a 20  r open file */. 
22980 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 6d   sqlite3_int64 m
22990 78 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20  xMmap;          
229a0 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 76 61     /* Maximum va
229b0 6c 75 65 20 66 6f 72 20 73 7a 4d 6d 61 70 20 2a  lue for szMmap *
229c0 2f 0a 20 20 76 6f 69 64 20 2a 70 53 63 72 61 74  /.  void *pScrat
229d0 63 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ch;             
229e0 20 20 20 20 20 20 2f 2a 20 53 63 72 61 74 63 68        /* Scratch
229f0 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74   memory */.  int
22a00 20 73 7a 53 63 72 61 74 63 68 3b 20 20 20 20 20   szScratch;     
22a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22a20 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 73  * Size of each s
22a30 63 72 61 74 63 68 20 62 75 66 66 65 72 20 2a 2f  cratch buffer */
22a40 0a 20 20 69 6e 74 20 6e 53 63 72 61 74 63 68 3b  .  int nScratch;
22a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a60 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
22a70 66 20 73 63 72 61 74 63 68 20 62 75 66 66 65 72  f scratch buffer
22a80 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 61  s */.  void *pPa
22a90 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ge;             
22aa0 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65           /* Page
22ab0 20 63 61 63 68 65 20 6d 65 6d 6f 72 79 20 2a 2f   cache memory */
22ac0 0a 20 20 69 6e 74 20 73 7a 50 61 67 65 3b 20 20  .  int szPage;  
22ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ae0 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
22af0 65 61 63 68 20 70 61 67 65 20 69 6e 20 70 50 61  each page in pPa
22b00 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 50  ge[] */.  int nP
22b10 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  age;            
22b20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
22b30 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69  umber of pages i
22b40 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69  n pPage[] */.  i
22b50 6e 74 20 6d 78 50 61 72 73 65 72 53 74 61 63 6b  nt mxParserStack
22b60 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
22b70 20 2f 2a 20 6d 61 78 69 6d 75 6d 20 64 65 70 74   /* maximum dept
22b80 68 20 6f 66 20 74 68 65 20 70 61 72 73 65 72 20  h of the parser 
22b90 73 74 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 73  stack */.  int s
22ba0 68 61 72 65 64 43 61 63 68 65 45 6e 61 62 6c 65  haredCacheEnable
22bb0 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  d;           /* 
22bc0 74 72 75 65 20 69 66 20 73 68 61 72 65 64 2d 63  true if shared-c
22bd0 61 63 68 65 20 6d 6f 64 65 20 65 6e 61 62 6c 65  ache mode enable
22be0 64 20 2a 2f 0a 20 20 75 33 32 20 73 7a 50 6d 61  d */.  u32 szPma
22bf0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
22c00 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69           /* Maxi
22c10 6d 75 6d 20 53 6f 72 74 65 72 20 50 4d 41 20 73  mum Sorter PMA s
22c20 69 7a 65 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20  ize */.  /* The 
22c30 61 62 6f 76 65 20 6d 69 67 68 74 20 62 65 20 69  above might be i
22c40 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 6e 6f  nitialized to no
22c50 6e 2d 7a 65 72 6f 2e 20 20 54 68 65 20 66 6f 6c  n-zero.  The fol
22c60 6c 6f 77 69 6e 67 20 6e 65 65 64 20 74 6f 20 61  lowing need to a
22c70 6c 77 61 79 73 0a 20 20 2a 2a 20 69 6e 69 74 69  lways.  ** initi
22c80 61 6c 6c 79 20 62 65 20 7a 65 72 6f 2c 20 68 6f  ally be zero, ho
22c90 77 65 76 65 72 2e 20 2a 2f 0a 20 20 69 6e 74 20  wever. */.  int 
22ca0 69 73 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20  isInit;         
22cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
22cc0 20 54 72 75 65 20 61 66 74 65 72 20 69 6e 69 74   True after init
22cd0 69 61 6c 69 7a 61 74 69 6f 6e 20 68 61 73 20 66  ialization has f
22ce0 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 69 6e 74  inished */.  int
22cf0 20 69 6e 50 72 6f 67 72 65 73 73 3b 20 20 20 20   inProgress;    
22d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22d10 2a 20 54 72 75 65 20 77 68 69 6c 65 20 69 6e 69  * True while ini
22d20 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 20 70  tialization in p
22d30 72 6f 67 72 65 73 73 20 2a 2f 0a 20 20 69 6e 74  rogress */.  int
22d40 20 69 73 4d 75 74 65 78 49 6e 69 74 3b 20 20 20   isMutexInit;   
22d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22d60 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 75 74  * True after mut
22d70 65 78 65 73 20 61 72 65 20 69 6e 69 74 69 61 6c  exes are initial
22d80 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73  ized */.  int is
22d90 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20 20 20 20 20  MallocInit;     
22da0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
22db0 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63  rue after malloc
22dc0 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   is initialized 
22dd0 2a 2f 0a 20 20 69 6e 74 20 69 73 50 43 61 63 68  */.  int isPCach
22de0 65 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20  eInit;          
22df0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61         /* True a
22e00 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69  fter malloc is i
22e10 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
22e20 69 6e 74 20 6e 52 65 66 49 6e 69 74 4d 75 74 65  int nRefInitMute
22e30 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  x;              
22e40 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75    /* Number of u
22e50 73 65 72 73 20 6f 66 20 70 49 6e 69 74 4d 75 74  sers of pInitMut
22e60 65 78 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  ex */.  sqlite3_
22e70 6d 75 74 65 78 20 2a 70 49 6e 69 74 4d 75 74 65  mutex *pInitMute
22e80 78 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 75 74  x;        /* Mut
22e90 65 78 20 75 73 65 64 20 62 79 20 73 71 6c 69 74  ex used by sqlit
22ea0 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 20  e3_initialize() 
22eb0 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 4c 6f 67  */.  void (*xLog
22ec0 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73  )(void*,int,cons
22ed0 74 20 63 68 61 72 2a 29 3b 20 2f 2a 20 46 75 6e  t char*); /* Fun
22ee0 63 74 69 6f 6e 20 66 6f 72 20 6c 6f 67 67 69 6e  ction for loggin
22ef0 67 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 4c 6f  g */.  void *pLo
22f00 67 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  gArg;           
22f10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
22f20 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f  irst argument to
22f30 20 78 4c 6f 67 28 29 20 2a 2f 0a 23 69 66 64 65   xLog() */.#ifde
22f40 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
22f50 53 51 4c 4c 4f 47 0a 20 20 76 6f 69 64 28 2a 78  SQLLOG.  void(*x
22f60 53 71 6c 6c 6f 67 29 28 76 6f 69 64 2a 2c 73 71  Sqllog)(void*,sq
22f70 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
22f80 72 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  r*, int);.  void
22f90 20 2a 70 53 71 6c 6c 6f 67 41 72 67 3b 0a 23 65   *pSqllogArg;.#e
22fa0 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
22fb0 54 45 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45  TE_VDBE_COVERAGE
22fc0 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  .  /* The follow
22fd0 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20 28 69 66  ing callback (if
22fe0 20 6e 6f 74 20 4e 55 4c 4c 29 20 69 73 20 69 6e   not NULL) is in
22ff0 76 6f 6b 65 64 20 6f 6e 20 65 76 65 72 79 20 56  voked on every V
23000 44 42 45 20 62 72 61 6e 63 68 0a 20 20 2a 2a 20  DBE branch.  ** 
23010 6f 70 65 72 61 74 69 6f 6e 2e 20 20 53 65 74 20  operation.  Set 
23020 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 75 73 69  the callback usi
23030 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54  ng SQLITE_TESTCT
23040 52 4c 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45  RL_VDBE_COVERAGE
23050 2e 0a 20 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ..  */.  void (*
23060 78 56 64 62 65 42 72 61 6e 63 68 29 28 76 6f 69  xVdbeBranch)(voi
23070 64 2a 2c 69 6e 74 20 69 53 72 63 4c 69 6e 65 2c  d*,int iSrcLine,
23080 75 38 20 65 54 68 69 73 2c 75 38 20 65 4d 78 29  u8 eThis,u8 eMx)
23090 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 2a  ;  /* Callback *
230a0 2f 0a 20 20 76 6f 69 64 20 2a 70 56 64 62 65 42  /.  void *pVdbeB
230b0 72 61 6e 63 68 41 72 67 3b 20 20 20 20 20 20 20  ranchArg;       
230c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
230d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
230e0 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20 2a 2f   1st argument */
230f0 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
23100 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c  SQLITE_UNTESTABL
23110 45 0a 20 20 69 6e 74 20 28 2a 78 54 65 73 74 43  E.  int (*xTestC
23120 61 6c 6c 62 61 63 6b 29 28 69 6e 74 29 3b 20 20  allback)(int);  
23130 20 20 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64        /* Invoked
23140 20 62 79 20 73 71 6c 69 74 65 33 46 61 75 6c 74   by sqlite3Fault
23150 53 69 6d 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a  Sim() */.#endif.
23160 20 20 69 6e 74 20 62 4c 6f 63 61 6c 74 69 6d 65    int bLocaltime
23170 46 61 75 6c 74 3b 20 20 20 20 20 20 20 20 20 20  Fault;          
23180 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 66      /* True to f
23190 61 69 6c 20 6c 6f 63 61 6c 74 69 6d 65 28 29 20  ail localtime() 
231a0 63 61 6c 6c 73 20 2a 2f 0a 20 20 69 6e 74 20 69  calls */.  int i
231b0 4f 6e 63 65 52 65 73 65 74 54 68 72 65 73 68 6f  OnceResetThresho
231c0 6c 64 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ld;          /* 
231d0 57 68 65 6e 20 74 6f 20 72 65 73 65 74 20 4f 50  When to reset OP
231e0 5f 4f 6e 63 65 20 63 6f 75 6e 74 65 72 73 20 2a  _Once counters *
231f0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73  /.};../*.** This
23200 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 69   macro is used i
23210 6e 73 69 64 65 20 6f 66 20 61 73 73 65 72 74 28  nside of assert(
23220 29 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20  ) statements to 
23230 69 6e 64 69 63 61 74 65 20 74 68 61 74 0a 2a 2a  indicate that.**
23240 20 74 68 65 20 61 73 73 65 72 74 20 69 73 20 6f   the assert is o
23250 6e 6c 79 20 76 61 6c 69 64 20 6f 6e 20 61 20 77  nly valid on a w
23260 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62  ell-formed datab
23270 61 73 65 2e 20 20 49 6e 73 74 65 61 64 20 6f 66  ase.  Instead of
23280 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65  :.**.**     asse
23290 72 74 28 20 58 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f  rt( X );.**.** O
232a0 6e 65 20 77 72 69 74 65 73 3a 0a 2a 2a 0a 2a 2a  ne writes:.**.**
232b0 20 20 20 20 20 61 73 73 65 72 74 28 20 58 20 7c       assert( X |
232c0 7c 20 43 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a  | CORRUPT_DB );.
232d0 2a 2a 0a 2a 2a 20 43 4f 52 52 55 50 54 5f 44 42  **.** CORRUPT_DB
232e0 20 69 73 20 74 72 75 65 20 64 75 72 69 6e 67 20   is true during 
232f0 6e 6f 72 6d 61 6c 20 6f 70 65 72 61 74 69 6f 6e  normal operation
23300 2e 20 20 43 4f 52 52 55 50 54 5f 44 42 20 64 6f  .  CORRUPT_DB do
23310 65 73 20 6e 6f 74 20 69 6e 64 69 63 61 74 65 0a  es not indicate.
23320 2a 2a 20 74 68 61 74 20 74 68 65 20 64 61 74 61  ** that the data
23330 62 61 73 65 20 69 73 20 64 65 66 69 6e 69 74 65  base is definite
23340 6c 79 20 63 6f 72 72 75 70 74 2c 20 6f 6e 6c 79  ly corrupt, only
23350 20 74 68 61 74 20 69 74 20 6d 69 67 68 74 20 62   that it might b
23360 65 20 63 6f 72 72 75 70 74 2e 0a 2a 2a 20 46 6f  e corrupt..** Fo
23370 72 20 6d 6f 73 74 20 74 65 73 74 20 63 61 73 65  r most test case
23380 73 2c 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73  s, CORRUPT_DB is
23390 20 73 65 74 20 74 6f 20 66 61 6c 73 65 20 75 73   set to false us
233a0 69 6e 67 20 61 20 73 70 65 63 69 61 6c 0a 2a 2a  ing a special.**
233b0 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f   sqlite3_test_co
233c0 6e 74 72 6f 6c 28 29 2e 20 20 54 68 69 73 20 65  ntrol().  This e
233d0 6e 61 62 6c 65 73 20 61 73 73 65 72 74 28 29 20  nables assert() 
233e0 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 70 72  statements to pr
233f0 6f 76 65 0a 2a 2a 20 74 68 69 6e 67 73 20 74 68  ove.** things th
23400 61 74 20 61 72 65 20 61 6c 77 61 79 73 20 74 72  at are always tr
23410 75 65 20 66 6f 72 20 77 65 6c 6c 2d 66 6f 72 6d  ue for well-form
23420 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f  ed databases..*/
23430 0a 23 64 65 66 69 6e 65 20 43 4f 52 52 55 50 54  .#define CORRUPT
23440 5f 44 42 20 20 28 73 71 6c 69 74 65 33 43 6f 6e  _DB  (sqlite3Con
23450 66 69 67 2e 6e 65 76 65 72 43 6f 72 72 75 70 74  fig.neverCorrupt
23460 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74  ==0)../*.** Cont
23470 65 78 74 20 70 6f 69 6e 74 65 72 20 70 61 73 73  ext pointer pass
23480 65 64 20 64 6f 77 6e 20 74 68 72 6f 75 67 68 20  ed down through 
23490 74 68 65 20 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a  the tree-walk..*
234a0 2f 0a 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20  /.struct Walker 
234b0 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73  {.  Parse *pPars
234c0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
234d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
234e0 20 50 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e   Parser context.
234f0 20 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 45 78    */.  int (*xEx
23500 70 72 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b  prCallback)(Walk
23510 65 72 2a 2c 20 45 78 70 72 2a 29 3b 20 20 20 20  er*, Expr*);    
23520 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72   /* Callback for
23530 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a   expressions */.
23540 20 20 69 6e 74 20 28 2a 78 53 65 6c 65 63 74 43    int (*xSelectC
23550 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a  allback)(Walker*
23560 2c 53 65 6c 65 63 74 2a 29 3b 20 20 2f 2a 20 43  ,Select*);  /* C
23570 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45  allback for SELE
23580 43 54 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  CTs */.  void (*
23590 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b 32  xSelectCallback2
235a0 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74  )(Walker*,Select
235b0 2a 29 3b 2f 2a 20 53 65 63 6f 6e 64 20 63 61 6c  *);/* Second cal
235c0 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54  lback for SELECT
235d0 73 20 2a 2f 0a 20 20 69 6e 74 20 77 61 6c 6b 65  s */.  int walke
235e0 72 44 65 70 74 68 3b 20 20 20 20 20 20 20 20 20  rDepth;         
235f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23600 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 75   /* Number of su
23610 62 71 75 65 72 69 65 73 20 2a 2f 0a 20 20 75 38  bqueries */.  u8
23620 20 65 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20   eCode;         
23630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23640 20 20 20 20 20 20 20 20 2f 2a 20 41 20 73 6d 61          /* A sma
23650 6c 6c 20 70 72 6f 63 65 73 73 69 6e 67 20 63 6f  ll processing co
23660 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20  de */.  union { 
23670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23690 20 20 2f 2a 20 45 78 74 72 61 20 64 61 74 61 20    /* Extra data 
236a0 66 6f 72 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  for callback */.
236b0 20 20 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20      NameContext 
236c0 2a 70 4e 43 3b 20 20 20 20 20 20 20 20 20 20 20  *pNC;           
236d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
236e0 2a 20 4e 61 6d 69 6e 67 20 63 6f 6e 74 65 78 74  * Naming context
236f0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 3b 20 20   */.    int n;  
23700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23720 20 20 20 2f 2a 20 41 20 63 6f 75 6e 74 65 72 20     /* A counter 
23730 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 75 72 3b  */.    int iCur;
23740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23760 20 20 2f 2a 20 41 20 63 75 72 73 6f 72 20 6e 75    /* A cursor nu
23770 6d 62 65 72 20 2a 2f 0a 20 20 20 20 53 72 63 4c  mber */.    SrcL
23780 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20 20  ist *pSrcList;  
23790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
237a0 20 20 20 20 20 20 20 2f 2a 20 46 52 4f 4d 20 63         /* FROM c
237b0 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 73 74 72  lause */.    str
237c0 75 63 74 20 53 72 63 43 6f 75 6e 74 20 2a 70 53  uct SrcCount *pS
237d0 72 63 43 6f 75 6e 74 3b 20 20 20 20 20 20 20 20  rcCount;        
237e0 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74          /* Count
237f0 69 6e 67 20 63 6f 6c 75 6d 6e 20 72 65 66 65 72  ing column refer
23800 65 6e 63 65 73 20 2a 2f 0a 20 20 20 20 73 74 72  ences */.    str
23810 75 63 74 20 43 43 75 72 48 69 6e 74 20 2a 70 43  uct CCurHint *pC
23820 43 75 72 48 69 6e 74 3b 20 20 20 20 20 20 20 20  CurHint;        
23830 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20          /* Used 
23840 62 79 20 63 6f 64 65 43 75 72 73 6f 72 48 69 6e  by codeCursorHin
23850 74 28 29 20 2a 2f 0a 20 20 20 20 69 6e 74 20 2a  t() */.    int *
23860 61 69 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20  aiCol;          
23870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23880 20 20 20 20 20 20 2f 2a 20 61 72 72 61 79 20 6f        /* array o
23890 66 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 65 73  f column indexes
238a0 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 49   */.    struct I
238b0 64 78 43 6f 76 65 72 20 2a 70 49 64 78 43 6f 76  dxCover *pIdxCov
238c0 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  er;             
238d0 20 20 20 2f 2a 20 43 68 65 63 6b 20 66 6f 72 20     /* Check for 
238e0 69 6e 64 65 78 20 63 6f 76 65 72 61 67 65 20 2a  index coverage *
238f0 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20  /.  } u;.};../* 
23900 46 6f 72 77 61 72 64 20 64 65 63 6c 61 72 61 74  Forward declarat
23910 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73 71 6c 69  ions */.int sqli
23920 74 65 33 57 61 6c 6b 45 78 70 72 28 57 61 6c 6b  te3WalkExpr(Walk
23930 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74  er*, Expr*);.int
23940 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72   sqlite3WalkExpr
23950 4c 69 73 74 28 57 61 6c 6b 65 72 2a 2c 20 45 78  List(Walker*, Ex
23960 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
23970 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 28  lite3WalkSelect(
23980 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a  Walker*, Select*
23990 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  );.int sqlite3Wa
239a0 6c 6b 53 65 6c 65 63 74 45 78 70 72 28 57 61 6c  lkSelectExpr(Wal
239b0 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  ker*, Select*);.
239c0 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53  int sqlite3WalkS
239d0 65 6c 65 63 74 46 72 6f 6d 28 57 61 6c 6b 65 72  electFrom(Walker
239e0 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  *, Select*);.int
239f0 20 73 71 6c 69 74 65 33 45 78 70 72 57 61 6c 6b   sqlite3ExprWalk
23a00 4e 6f 6f 70 28 57 61 6c 6b 65 72 2a 2c 20 45 78  Noop(Walker*, Ex
23a10 70 72 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  pr*);../*.** Ret
23a20 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 74 68  urn code from th
23a30 65 20 70 61 72 73 65 2d 74 72 65 65 20 77 61 6c  e parse-tree wal
23a40 6b 69 6e 67 20 70 72 69 6d 69 74 69 76 65 73 20  king primitives 
23a50 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20 63 61 6c  and their.** cal
23a60 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66 69  lbacks..*/.#defi
23a70 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e 75 65 20  ne WRC_Continue 
23a80 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e 74 69 6e     0   /* Contin
23a90 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20 63 68 69  ue down into chi
23aa0 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ldren */.#define
23ab0 20 57 52 43 5f 50 72 75 6e 65 20 20 20 20 20 20   WRC_Prune      
23ac0 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20 63 68 69   1   /* Omit chi
23ad0 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e 74 69 6e  ldren but contin
23ae0 75 65 20 77 61 6c 6b 69 6e 67 20 73 69 62 6c 69  ue walking sibli
23af0 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ngs */.#define W
23b00 52 43 5f 41 62 6f 72 74 20 20 20 20 20 20 20 32  RC_Abort       2
23b10 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e 20 74 68     /* Abandon th
23b20 65 20 74 72 65 65 20 77 61 6c 6b 20 2a 2f 0a 0a  e tree walk */..
23b30 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
23b40 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  e of this struct
23b50 75 72 65 20 72 65 70 72 65 73 65 6e 74 73 20 61  ure represents a
23b60 20 73 65 74 20 6f 66 20 6f 6e 65 20 6f 72 20 6d   set of one or m
23b70 6f 72 65 20 43 54 45 73 0a 2a 2a 20 28 63 6f 6d  ore CTEs.** (com
23b80 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73  mon table expres
23b90 73 69 6f 6e 73 29 20 63 72 65 61 74 65 64 20 62  sions) created b
23ba0 79 20 61 20 73 69 6e 67 6c 65 20 57 49 54 48 20  y a single WITH 
23bb0 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63  clause..*/.struc
23bc0 74 20 57 69 74 68 20 7b 0a 20 20 69 6e 74 20 6e  t With {.  int n
23bd0 43 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  Cte;            
23be0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
23bf0 6d 62 65 72 20 6f 66 20 43 54 45 73 20 69 6e 20  mber of CTEs in 
23c00 74 68 65 20 57 49 54 48 20 63 6c 61 75 73 65 20  the WITH clause 
23c10 2a 2f 0a 20 20 57 69 74 68 20 2a 70 4f 75 74 65  */.  With *pOute
23c20 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
23c30 20 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 69       /* Containi
23c40 6e 67 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20  ng WITH clause, 
23c50 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74 72  or NULL */.  str
23c60 75 63 74 20 43 74 65 20 7b 20 20 20 20 20 20 20  uct Cte {       
23c70 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
23c80 46 6f 72 20 65 61 63 68 20 43 54 45 20 69 6e 20  For each CTE in 
23c90 74 68 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e  the WITH clause.
23ca0 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  ... */.    char 
23cb0 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
23cc0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
23cd0 6d 65 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a  me of this CTE *
23ce0 2f 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a  /.    ExprList *
23cf0 70 43 6f 6c 73 3b 20 20 20 20 20 20 20 20 20 20  pCols;          
23d00 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66        /* List of
23d10 20 65 78 70 6c 69 63 69 74 20 63 6f 6c 75 6d 6e   explicit column
23d20 20 6e 61 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c 20   names, or NULL 
23d30 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70  */.    Select *p
23d40 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20  Select;         
23d50 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65         /* The de
23d60 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74 68 69 73  finition of this
23d70 20 43 54 45 20 2a 2f 0a 20 20 20 20 63 6f 6e 73   CTE */.    cons
23d80 74 20 63 68 61 72 20 2a 7a 43 74 65 45 72 72 3b  t char *zCteErr;
23d90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
23da0 72 72 6f 72 20 6d 65 73 73 61 67 65 20 66 6f 72  rror message for
23db0 20 63 69 72 63 75 6c 61 72 20 72 65 66 65 72 65   circular refere
23dc0 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d  nces */.  } a[1]
23dd0 3b 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  ;.};..#ifdef SQL
23de0 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20  ITE_DEBUG./*.** 
23df0 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
23e00 68 65 20 54 72 65 65 56 69 65 77 20 6f 62 6a 65  he TreeView obje
23e10 63 74 20 69 73 20 75 73 65 64 20 66 6f 72 20 70  ct is used for p
23e20 72 69 6e 74 69 6e 67 20 74 68 65 20 63 6f 6e 74  rinting the cont
23e30 65 6e 74 20 6f 66 0a 2a 2a 20 64 61 74 61 20 73  ent of.** data s
23e40 74 72 75 63 74 75 72 65 73 20 6f 6e 20 73 71 6c  tructures on sql
23e50 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28  ite3DebugPrintf(
23e60 29 20 75 73 69 6e 67 20 61 20 74 72 65 65 2d 6c  ) using a tree-l
23e70 69 6b 65 20 76 69 65 77 2e 0a 2a 2f 0a 73 74 72  ike view..*/.str
23e80 75 63 74 20 54 72 65 65 56 69 65 77 20 7b 0a 20  uct TreeView {. 
23e90 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20 20   int iLevel;    
23ea0 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63           /* Whic
23eb0 68 20 6c 65 76 65 6c 20 6f 66 20 74 68 65 20 74  h level of the t
23ec0 72 65 65 20 77 65 20 61 72 65 20 6f 6e 20 2a 2f  ree we are on */
23ed0 0a 20 20 75 38 20 20 62 4c 69 6e 65 5b 31 30 30  .  u8  bLine[100
23ee0 5d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44 72  ];         /* Dr
23ef0 61 77 20 76 65 72 74 69 63 61 6c 20 69 6e 20 63  aw vertical in c
23f00 6f 6c 75 6d 6e 20 69 20 69 66 20 62 4c 69 6e 65  olumn i if bLine
23f10 5b 69 5d 20 69 73 20 74 72 75 65 20 2a 2f 0a 7d  [i] is true */.}
23f20 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ;.#endif /* SQLI
23f30 54 45 5f 44 45 42 55 47 20 2a 2f 0a 0a 2f 2a 0a  TE_DEBUG */../*.
23f40 2a 2a 20 41 73 73 75 6d 69 6e 67 20 7a 49 6e 20  ** Assuming zIn 
23f50 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69  points to the fi
23f60 72 73 74 20 62 79 74 65 20 6f 66 20 61 20 55 54  rst byte of a UT
23f70 46 2d 38 20 63 68 61 72 61 63 74 65 72 2c 0a 2a  F-8 character,.*
23f80 2a 20 61 64 76 61 6e 63 65 20 7a 49 6e 20 74 6f  * advance zIn to
23f90 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 66 69   point to the fi
23fa0 72 73 74 20 62 79 74 65 20 6f 66 20 74 68 65 20  rst byte of the 
23fb0 6e 65 78 74 20 55 54 46 2d 38 20 63 68 61 72 61  next UTF-8 chara
23fc0 63 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  cter..*/.#define
23fd0 20 53 51 4c 49 54 45 5f 53 4b 49 50 5f 55 54 46   SQLITE_SKIP_UTF
23fe0 38 28 7a 49 6e 29 20 7b 20 20 20 20 20 20 20 20  8(zIn) {        
23ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24000 5c 0a 20 20 69 66 28 20 28 2a 28 7a 49 6e 2b 2b  \.  if( (*(zIn++
24010 29 29 3e 3d 30 78 63 30 20 29 7b 20 20 20 20 20  ))>=0xc0 ){     
24020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24030 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20 77           \.    w
24040 68 69 6c 65 28 20 28 2a 7a 49 6e 20 26 20 30 78  hile( (*zIn & 0x
24050 63 30 29 3d 3d 30 78 38 30 20 29 7b 20 7a 49 6e  c0)==0x80 ){ zIn
24060 2b 2b 3b 20 7d 20 20 20 20 20 20 20 20 20 20 20  ++; }           
24070 20 20 5c 0a 20 20 7d 20 20 20 20 20 20 20 20 20    \.  }         
24080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
240a0 20 20 20 20 20 20 20 20 20 20 20 5c 0a 7d 0a 0a             \.}..
240b0 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  /*.** The SQLITE
240c0 5f 2a 5f 42 4b 50 54 20 6d 61 63 72 6f 73 20 61  _*_BKPT macros a
240d0 72 65 20 73 75 62 73 74 69 74 75 74 65 73 20 66  re substitutes f
240e0 6f 72 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64  or the error cod
240f0 65 73 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 73  es with.** the s
24100 61 6d 65 20 6e 61 6d 65 20 62 75 74 20 77 69 74  ame name but wit
24110 68 6f 75 74 20 74 68 65 20 5f 42 4b 50 54 20 73  hout the _BKPT s
24120 75 66 66 69 78 2e 20 20 54 68 65 73 65 20 6d 61  uffix.  These ma
24130 63 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a 2a 20 72  cros invoke.** r
24140 6f 75 74 69 6e 65 73 20 74 68 61 74 20 72 65 70  outines that rep
24150 6f 72 74 20 74 68 65 20 6c 69 6e 65 2d 6e 75 6d  ort the line-num
24160 62 65 72 20 6f 6e 20 77 68 69 63 68 20 74 68 65  ber on which the
24170 20 65 72 72 6f 72 20 6f 72 69 67 69 6e 61 74 65   error originate
24180 64 0a 2a 2a 20 75 73 69 6e 67 20 73 71 6c 69 74  d.** using sqlit
24190 65 33 5f 6c 6f 67 28 29 2e 20 20 54 68 65 20 72  e3_log().  The r
241a0 6f 75 74 69 6e 65 73 20 61 6c 73 6f 20 70 72 6f  outines also pro
241b0 76 69 64 65 20 61 20 63 6f 6e 76 65 6e 69 65 6e  vide a convenien
241c0 74 20 70 6c 61 63 65 0a 2a 2a 20 74 6f 20 73 65  t place.** to se
241d0 74 20 61 20 64 65 62 75 67 67 65 72 20 62 72 65  t a debugger bre
241e0 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e 74 20  akpoint..*/.int 
241f0 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72  sqlite3CorruptEr
24200 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71  ror(int);.int sq
24210 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72  lite3MisuseError
24220 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  (int);.int sqlit
24230 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28  e3CantopenError(
24240 69 6e 74 29 3b 0a 23 64 65 66 69 6e 65 20 53 51  int);.#define SQ
24250 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50  LITE_CORRUPT_BKP
24260 54 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74  T sqlite3Corrupt
24270 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a  Error(__LINE__).
24280 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
24290 49 53 55 53 45 5f 42 4b 50 54 20 73 71 6c 69 74  ISUSE_BKPT sqlit
242a0 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28 5f 5f  e3MisuseError(__
242b0 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20  LINE__).#define 
242c0 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 5f  SQLITE_CANTOPEN_
242d0 42 4b 50 54 20 73 71 6c 69 74 65 33 43 61 6e 74  BKPT sqlite3Cant
242e0 6f 70 65 6e 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  openError(__LINE
242f0 5f 5f 29 0a 23 69 66 64 65 66 20 53 51 4c 49 54  __).#ifdef SQLIT
24300 45 5f 44 45 42 55 47 0a 20 20 69 6e 74 20 73 71  E_DEBUG.  int sq
24310 6c 69 74 65 33 4e 6f 6d 65 6d 45 72 72 6f 72 28  lite3NomemError(
24320 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  int);.  int sqli
24330 74 65 33 49 6f 65 72 72 6e 6f 6d 65 6d 45 72 72  te3IoerrnomemErr
24340 6f 72 28 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e  or(int);.# defin
24350 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42  e SQLITE_NOMEM_B
24360 4b 50 54 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d  KPT sqlite3Nomem
24370 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a  Error(__LINE__).
24380 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
24390 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54  IOERR_NOMEM_BKPT
243a0 20 73 71 6c 69 74 65 33 49 6f 65 72 72 6e 6f 6d   sqlite3Ioerrnom
243b0 65 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f  emError(__LINE__
243c0 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
243d0 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b   SQLITE_NOMEM_BK
243e0 50 54 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 0a  PT SQLITE_NOMEM.
243f0 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
24400 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54  IOERR_NOMEM_BKPT
24410 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f   SQLITE_IOERR_NO
24420 4d 45 4d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  MEM.#endif../*.*
24430 2a 20 46 54 53 33 20 61 6e 64 20 46 54 53 34 20  * FTS3 and FTS4 
24440 62 6f 74 68 20 72 65 71 75 69 72 65 20 76 69 72  both require vir
24450 74 75 61 6c 20 74 61 62 6c 65 20 73 75 70 70 6f  tual table suppo
24460 72 74 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  rt.*/.#if define
24470 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  d(SQLITE_OMIT_VI
24480 52 54 55 41 4c 54 41 42 4c 45 29 0a 23 20 75 6e  RTUALTABLE).# un
24490 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
244a0 45 5f 46 54 53 33 0a 23 20 75 6e 64 65 66 20 53  E_FTS3.# undef S
244b0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
244c0 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  4.#endif../*.** 
244d0 46 54 53 34 20 69 73 20 72 65 61 6c 6c 79 20 61  FTS4 is really a
244e0 6e 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f 72 20  n extension for 
244f0 46 54 53 33 2e 20 20 49 74 20 69 73 20 65 6e 61  FTS3.  It is ena
24500 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65 0a 2a  bled using the.*
24510 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  * SQLITE_ENABLE_
24520 46 54 53 33 20 6d 61 63 72 6f 2e 20 20 42 75 74  FTS3 macro.  But
24530 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75 73   to avoid confus
24540 69 6f 6e 20 77 65 20 61 6c 73 6f 20 63 61 6c 6c  ion we also call
24550 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 45  .** the SQLITE_E
24560 4e 41 42 4c 45 5f 46 54 53 34 20 6d 61 63 72 6f  NABLE_FTS4 macro
24570 20 74 6f 20 73 65 72 76 65 20 61 73 20 61 6e 20   to serve as an 
24580 61 6c 69 61 73 20 66 6f 72 20 53 51 4c 49 54 45  alias for SQLITE
24590 5f 45 4e 41 42 4c 45 5f 46 54 53 33 2e 0a 2a 2f  _ENABLE_FTS3..*/
245a0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
245b0 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 29  ITE_ENABLE_FTS4)
245c0 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
245d0 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29  ITE_ENABLE_FTS3)
245e0 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
245f0 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 31 0a 23  _ENABLE_FTS3 1.#
24600 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
24610 20 63 74 79 70 65 2e 68 20 68 65 61 64 65 72 20   ctype.h header 
24620 69 73 20 6e 65 65 64 65 64 20 66 6f 72 20 6e 6f  is needed for no
24630 6e 2d 41 53 43 49 49 20 73 79 73 74 65 6d 73 2e  n-ASCII systems.
24640 20 20 49 74 20 69 73 20 61 6c 73 6f 0a 2a 2a 20    It is also.** 
24650 6e 65 65 64 65 64 20 62 79 20 46 54 53 33 20 77  needed by FTS3 w
24660 68 65 6e 20 46 54 53 33 20 69 73 20 69 6e 63 6c  hen FTS3 is incl
24670 75 64 65 64 20 69 6e 20 74 68 65 20 61 6d 61 6c  uded in the amal
24680 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66  gamation..*/.#if
24690 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
246a0 5f 41 53 43 49 49 29 20 7c 7c 20 5c 0a 20 20 20  _ASCII) || \.   
246b0 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   (defined(SQLITE
246c0 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 20 26 26  _ENABLE_FTS3) &&
246d0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
246e0 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 29 29 0a 23  AMALGAMATION)).#
246f0 20 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65 2e   include <ctype.
24700 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  h>.#endif../*.**
24710 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   The following m
24720 61 63 72 6f 73 20 6d 69 6d 69 63 20 74 68 65 20  acros mimic the 
24730 73 74 61 6e 64 61 72 64 20 6c 69 62 72 61 72 79  standard library
24740 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f 75 70 70   functions toupp
24750 65 72 28 29 2c 0a 2a 2a 20 69 73 73 70 61 63 65  er(),.** isspace
24760 28 29 2c 20 69 73 61 6c 6e 75 6d 28 29 2c 20 69  (), isalnum(), i
24770 73 64 69 67 69 74 28 29 20 61 6e 64 20 69 73 78  sdigit() and isx
24780 64 69 67 69 74 28 29 2c 20 72 65 73 70 65 63 74  digit(), respect
24790 69 76 65 6c 79 2e 20 54 68 65 0a 2a 2a 20 73 71  ively. The.** sq
247a0 6c 69 74 65 20 76 65 72 73 69 6f 6e 73 20 6f 6e  lite versions on
247b0 6c 79 20 77 6f 72 6b 20 66 6f 72 20 41 53 43 49  ly work for ASCI
247c0 49 20 63 68 61 72 61 63 74 65 72 73 2c 20 72 65  I characters, re
247d0 67 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63 61  gardless of loca
247e0 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  le..*/.#ifdef SQ
247f0 4c 49 54 45 5f 41 53 43 49 49 0a 23 20 64 65 66  LITE_ASCII.# def
24800 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70  ine sqlite3Toupp
24810 65 72 28 78 29 20 20 28 28 78 29 26 7e 28 73 71  er(x)  ((x)&~(sq
24820 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
24830 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
24840 5d 26 30 78 32 30 29 29 0a 23 20 64 65 66 69 6e  ]&0x20)).# defin
24850 65 20 73 71 6c 69 74 65 33 49 73 73 70 61 63 65  e sqlite3Isspace
24860 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74  (x)   (sqlite3Ct
24870 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
24880 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 31 29   char)(x)]&0x01)
24890 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
248a0 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 28 73  3Isalnum(x)   (s
248b0 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
248c0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
248d0 29 5d 26 30 78 30 36 29 0a 23 20 64 65 66 69 6e  )]&0x06).# defin
248e0 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61  e sqlite3Isalpha
248f0 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74  (x)   (sqlite3Ct
24900 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
24910 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 32 29   char)(x)]&0x02)
24920 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
24930 33 49 73 64 69 67 69 74 28 78 29 20 20 20 28 73  3Isdigit(x)   (s
24940 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
24950 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
24960 29 5d 26 30 78 30 34 29 0a 23 20 64 65 66 69 6e  )]&0x04).# defin
24970 65 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69  e sqlite3Isxdigi
24980 74 28 78 29 20 20 28 73 71 6c 69 74 65 33 43 74  t(x)  (sqlite3Ct
24990 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
249a0 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 38 29   char)(x)]&0x08)
249b0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
249c0 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 28 73  3Tolower(x)   (s
249d0 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77  qlite3UpperToLow
249e0 65 72 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  er[(unsigned cha
249f0 72 29 28 78 29 5d 29 0a 23 20 64 65 66 69 6e 65  r)(x)]).# define
24a00 20 73 71 6c 69 74 65 33 49 73 71 75 6f 74 65 28   sqlite3Isquote(
24a10 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79  x)   (sqlite3Cty
24a20 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
24a30 63 68 61 72 29 28 78 29 5d 26 30 78 38 30 29 0a  char)(x)]&0x80).
24a40 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
24a50 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78 29  qlite3Toupper(x)
24a60 20 20 20 74 6f 75 70 70 65 72 28 28 75 6e 73 69     toupper((unsi
24a70 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
24a80 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
24a90 73 73 70 61 63 65 28 78 29 20 20 20 69 73 73 70  sspace(x)   issp
24aa0 61 63 65 28 28 75 6e 73 69 67 6e 65 64 20 63 68  ace((unsigned ch
24ab0 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
24ac0 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28   sqlite3Isalnum(
24ad0 78 29 20 20 20 69 73 61 6c 6e 75 6d 28 28 75 6e  x)   isalnum((un
24ae0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
24af0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
24b00 33 49 73 61 6c 70 68 61 28 78 29 20 20 20 69 73  3Isalpha(x)   is
24b10 61 6c 70 68 61 28 28 75 6e 73 69 67 6e 65 64 20  alpha((unsigned 
24b20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
24b30 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69 67 69  ne sqlite3Isdigi
24b40 74 28 78 29 20 20 20 69 73 64 69 67 69 74 28 28  t(x)   isdigit((
24b50 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
24b60 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
24b70 74 65 33 49 73 78 64 69 67 69 74 28 78 29 20 20  te3Isxdigit(x)  
24b80 69 73 78 64 69 67 69 74 28 28 75 6e 73 69 67 6e  isxdigit((unsign
24b90 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
24ba0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c  efine sqlite3Tol
24bb0 6f 77 65 72 28 78 29 20 20 20 74 6f 6c 6f 77 65  ower(x)   tolowe
24bc0 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  r((unsigned char
24bd0 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
24be0 71 6c 69 74 65 33 49 73 71 75 6f 74 65 28 78 29  qlite3Isquote(x)
24bf0 20 20 20 28 28 78 29 3d 3d 27 22 27 7c 7c 28 78     ((x)=='"'||(x
24c00 29 3d 3d 27 5c 27 27 7c 7c 28 78 29 3d 3d 27 5b  )=='\''||(x)=='[
24c10 27 7c 7c 28 78 29 3d 3d 27 60 27 29 0a 23 65 6e  '||(x)=='`').#en
24c20 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
24c30 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f  TE_OMIT_COMPILEO
24c40 50 54 49 4f 4e 5f 44 49 41 47 53 0a 69 6e 74 20  PTION_DIAGS.int 
24c50 73 71 6c 69 74 65 33 49 73 49 64 43 68 61 72 28  sqlite3IsIdChar(
24c60 75 38 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  u8);.#endif../*.
24c70 2a 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63  ** Internal func
24c80 74 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a  tion prototypes.
24c90 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74  */.int sqlite3St
24ca0 72 49 43 6d 70 28 63 6f 6e 73 74 20 63 68 61 72  rICmp(const char
24cb0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
24cc0 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72 6c 65  int sqlite3Strle
24cd0 6e 33 30 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  n30(const char*)
24ce0 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 43  ;.char *sqlite3C
24cf0 6f 6c 75 6d 6e 54 79 70 65 28 43 6f 6c 75 6d 6e  olumnType(Column
24d00 2a 2c 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e  *,char*);.#defin
24d10 65 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d  e sqlite3StrNICm
24d20 70 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69 63  p sqlite3_strnic
24d30 6d 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  mp..int sqlite3M
24d40 61 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64 29 3b  allocInit(void);
24d50 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 6c  .void sqlite3Mal
24d60 6c 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a 76 6f  locEnd(void);.vo
24d70 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  id *sqlite3Mallo
24d80 63 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  c(u64);.void *sq
24d90 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28  lite3MallocZero(
24da0 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  u64);.void *sqli
24db0 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28  te3DbMallocZero(
24dc0 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a  sqlite3*, u64);.
24dd0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d  void *sqlite3DbM
24de0 61 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74 65 33  allocRaw(sqlite3
24df0 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  *, u64);.void *s
24e00 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
24e10 77 4e 4e 28 73 71 6c 69 74 65 33 2a 2c 20 75 36  wNN(sqlite3*, u6
24e20 34 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  4);.char *sqlite
24e30 33 44 62 53 74 72 44 75 70 28 73 71 6c 69 74 65  3DbStrDup(sqlite
24e40 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  3*,const char*);
24e50 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62  .char *sqlite3Db
24e60 53 74 72 4e 44 75 70 28 73 71 6c 69 74 65 33 2a  StrNDup(sqlite3*
24e70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75 36  ,const char*, u6
24e80 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  4);.void *sqlite
24e90 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20  3Realloc(void*, 
24ea0 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  u64);.void *sqli
24eb0 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46 72  te3DbReallocOrFr
24ec0 65 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f  ee(sqlite3 *, vo
24ed0 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64  id *, u64);.void
24ee0 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c   *sqlite3DbReall
24ef0 6f 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f  oc(sqlite3 *, vo
24f00 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64  id *, u64);.void
24f10 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 73   sqlite3DbFree(s
24f20 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b  qlite3*, void*);
24f30 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c  .int sqlite3Mall
24f40 6f 63 53 69 7a 65 28 76 6f 69 64 2a 29 3b 0a 69  ocSize(void*);.i
24f50 6e 74 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  nt sqlite3DbMall
24f60 6f 63 53 69 7a 65 28 73 71 6c 69 74 65 33 2a 2c  ocSize(sqlite3*,
24f70 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73   void*);.void *s
24f80 71 6c 69 74 65 33 53 63 72 61 74 63 68 4d 61 6c  qlite3ScratchMal
24f90 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73  loc(int);.void s
24fa0 71 6c 69 74 65 33 53 63 72 61 74 63 68 46 72 65  qlite3ScratchFre
24fb0 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a  e(void*);.void *
24fc0 73 71 6c 69 74 65 33 50 61 67 65 4d 61 6c 6c 6f  sqlite3PageMallo
24fd0 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  c(int);.void sql
24fe0 69 74 65 33 50 61 67 65 46 72 65 65 28 76 6f 69  ite3PageFree(voi
24ff0 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  d*);.void sqlite
25000 33 4d 65 6d 53 65 74 44 65 66 61 75 6c 74 28 76  3MemSetDefault(v
25010 6f 69 64 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  oid);.#ifndef SQ
25020 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a  LITE_UNTESTABLE.
25030 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 6e 69  void sqlite3Beni
25040 67 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f  gnMallocHooks(vo
25050 69 64 20 28 2a 29 28 76 6f 69 64 29 2c 20 76 6f  id (*)(void), vo
25060 69 64 20 28 2a 29 28 76 6f 69 64 29 29 3b 0a 23  id (*)(void));.#
25070 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65  endif.int sqlite
25080 33 48 65 61 70 4e 65 61 72 6c 79 46 75 6c 6c 28  3HeapNearlyFull(
25090 76 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e  void);../*.** On
250a0 20 73 79 73 74 65 6d 73 20 77 69 74 68 20 61 6d   systems with am
250b0 70 6c 65 20 73 74 61 63 6b 20 73 70 61 63 65 20  ple stack space 
250c0 61 6e 64 20 74 68 61 74 20 73 75 70 70 6f 72 74  and that support
250d0 20 61 6c 6c 6f 63 61 28 29 2c 20 6d 61 6b 65 0a   alloca(), make.
250e0 2a 2a 20 75 73 65 20 6f 66 20 61 6c 6c 6f 63 61  ** use of alloca
250f0 28 29 20 74 6f 20 6f 62 74 61 69 6e 20 73 70 61  () to obtain spa
25100 63 65 20 66 6f 72 20 6c 61 72 67 65 20 61 75 74  ce for large aut
25110 6f 6d 61 74 69 63 20 6f 62 6a 65 63 74 73 2e 20  omatic objects. 
25120 20 42 79 20 64 65 66 61 75 6c 74 2c 0a 2a 2a 20   By default,.** 
25130 6f 62 74 61 69 6e 20 73 70 61 63 65 20 66 72 6f  obtain space fro
25140 6d 20 6d 61 6c 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a  m malloc()..**.*
25150 2a 20 54 68 65 20 61 6c 6c 6f 63 61 28 29 20 72  * The alloca() r
25160 6f 75 74 69 6e 65 20 6e 65 76 65 72 20 72 65 74  outine never ret
25170 75 72 6e 73 20 4e 55 4c 4c 2e 20 20 54 68 69 73  urns NULL.  This
25180 20 77 69 6c 6c 20 63 61 75 73 65 20 63 6f 64 65   will cause code
25190 20 70 61 74 68 73 0a 2a 2a 20 74 68 61 74 20 64   paths.** that d
251a0 65 61 6c 20 77 69 74 68 20 73 71 6c 69 74 65 33  eal with sqlite3
251b0 53 74 61 63 6b 41 6c 6c 6f 63 28 29 20 66 61 69  StackAlloc() fai
251c0 6c 75 72 65 73 20 74 6f 20 62 65 20 75 6e 72 65  lures to be unre
251d0 61 63 68 61 62 6c 65 2e 0a 2a 2f 0a 23 69 66 64  achable..*/.#ifd
251e0 65 66 20 53 51 4c 49 54 45 5f 55 53 45 5f 41 4c  ef SQLITE_USE_AL
251f0 4c 4f 43 41 0a 23 20 64 65 66 69 6e 65 20 73 71  LOCA.# define sq
25200 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52  lite3StackAllocR
25210 61 77 28 44 2c 4e 29 20 20 20 61 6c 6c 6f 63 61  aw(D,N)   alloca
25220 28 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  (N).# define sql
25230 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65  ite3StackAllocZe
25240 72 6f 28 44 2c 4e 29 20 20 6d 65 6d 73 65 74 28  ro(D,N)  memset(
25250 61 6c 6c 6f 63 61 28 4e 29 2c 20 30 2c 20 4e 29  alloca(N), 0, N)
25260 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
25270 33 53 74 61 63 6b 46 72 65 65 28 44 2c 50 29 0a  3StackFree(D,P).
25280 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
25290 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
252a0 52 61 77 28 44 2c 4e 29 20 20 20 73 71 6c 69 74  Raw(D,N)   sqlit
252b0 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 44 2c  e3DbMallocRaw(D,
252c0 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  N).# define sqli
252d0 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72  te3StackAllocZer
252e0 6f 28 44 2c 4e 29 20 20 73 71 6c 69 74 65 33 44  o(D,N)  sqlite3D
252f0 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29  bMallocZero(D,N)
25300 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
25310 33 53 74 61 63 6b 46 72 65 65 28 44 2c 50 29 20  3StackFree(D,P) 
25320 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46        sqlite3DbF
25330 72 65 65 28 44 2c 50 29 0a 23 65 6e 64 69 66 0a  ree(D,P).#endif.
25340 0a 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77  ./* Do not allow
25350 20 62 6f 74 68 20 4d 45 4d 53 59 53 35 20 61 6e   both MEMSYS5 an
25360 64 20 4d 45 4d 53 59 53 33 20 74 6f 20 62 65 20  d MEMSYS3 to be 
25370 64 65 66 69 6e 65 64 20 74 6f 67 65 74 68 65 72  defined together
25380 2e 20 20 49 66 20 74 68 65 79 0a 2a 2a 20 61 72  .  If they.** ar
25390 65 2c 20 64 69 73 61 62 6c 65 20 4d 45 4d 53 59  e, disable MEMSY
253a0 53 33 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  S3.*/.#ifdef SQL
253b0 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59  ITE_ENABLE_MEMSY
253c0 53 35 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  S5.const sqlite3
253d0 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71  _mem_methods *sq
253e0 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79  lite3MemGetMemsy
253f0 73 35 28 76 6f 69 64 29 3b 0a 23 75 6e 64 65 66  s5(void);.#undef
25400 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d   SQLITE_ENABLE_M
25410 45 4d 53 59 53 33 0a 23 65 6e 64 69 66 0a 23 69  EMSYS3.#endif.#i
25420 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
25430 4c 45 5f 4d 45 4d 53 59 53 33 0a 63 6f 6e 73 74  LE_MEMSYS3.const
25440 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74   sqlite3_mem_met
25450 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d  hods *sqlite3Mem
25460 47 65 74 4d 65 6d 73 79 73 33 28 76 6f 69 64 29  GetMemsys3(void)
25470 3b 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64  ;.#endif...#ifnd
25480 65 66 20 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f  ef SQLITE_MUTEX_
25490 4f 4d 49 54 0a 20 20 73 71 6c 69 74 65 33 5f 6d  OMIT.  sqlite3_m
254a0 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e  utex_methods con
254b0 73 74 20 2a 73 71 6c 69 74 65 33 44 65 66 61 75  st *sqlite3Defau
254c0 6c 74 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20  ltMutex(void);. 
254d0 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d   sqlite3_mutex_m
254e0 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71  ethods const *sq
254f0 6c 69 74 65 33 4e 6f 6f 70 4d 75 74 65 78 28 76  lite3NoopMutex(v
25500 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  oid);.  sqlite3_
25510 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33 4d 75  mutex *sqlite3Mu
25520 74 65 78 41 6c 6c 6f 63 28 69 6e 74 29 3b 0a 20  texAlloc(int);. 
25530 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74 65   int sqlite3Mute
25540 78 49 6e 69 74 28 76 6f 69 64 29 3b 0a 20 20 69  xInit(void);.  i
25550 6e 74 20 73 71 6c 69 74 65 33 4d 75 74 65 78 45  nt sqlite3MutexE
25560 6e 64 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66  nd(void);.#endif
25570 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
25580 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 29  LITE_MUTEX_OMIT)
25590 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
255a0 49 54 45 5f 4d 55 54 45 58 5f 4e 4f 4f 50 29 0a  ITE_MUTEX_NOOP).
255b0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65    void sqlite3Me
255c0 6d 6f 72 79 42 61 72 72 69 65 72 28 76 6f 69 64  moryBarrier(void
255d0 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
255e0 65 20 73 71 6c 69 74 65 33 4d 65 6d 6f 72 79 42  e sqlite3MemoryB
255f0 61 72 72 69 65 72 28 29 0a 23 65 6e 64 69 66 0a  arrier().#endif.
25600 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 53 51 4c 49  ./*.** When SQLI
25610 54 45 5f 4d 55 54 45 58 5f 41 4c 45 52 54 5f 4d  TE_MUTEX_ALERT_M
25620 49 4c 4c 49 53 45 43 4f 4e 44 53 20 69 73 20 67  ILLISECONDS is g
25630 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f  reater than zero
25640 2c 20 65 78 74 72 61 20 63 6f 64 65 0a 2a 2a 20  , extra code.** 
25650 77 69 6c 6c 20 62 65 20 69 6e 63 6c 75 64 65 64  will be included
25660 20 74 6f 20 69 73 73 75 65 20 77 61 72 6e 69 6e   to issue warnin
25670 67 73 20 76 69 61 20 74 68 65 20 73 71 6c 69 74  gs via the sqlit
25680 65 33 5f 6c 6f 67 28 29 20 69 6e 74 65 72 66 61  e3_log() interfa
25690 63 65 20 69 66 0a 2a 2a 20 61 20 6d 75 74 65 78  ce if.** a mutex
256a0 20 69 73 20 68 65 6c 64 20 66 6f 72 20 6c 6f 6e   is held for lon
256b0 67 65 72 20 74 68 61 6e 20 74 68 65 20 6e 75 6d  ger than the num
256c0 62 65 72 20 6f 66 20 6d 69 6c 6c 69 73 65 63 6f  ber of milliseco
256d0 6e 64 73 20 73 70 65 63 69 66 69 65 64 0a 2a 2a  nds specified.**
256e0 20 62 79 20 53 51 4c 49 54 45 5f 4d 55 54 45 58   by SQLITE_MUTEX
256f0 5f 41 4c 45 52 54 5f 4d 49 4c 4c 49 53 45 43 4f  _ALERT_MILLISECO
25700 4e 44 53 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  NDS..*/.#ifndef 
25710 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 41 4c 45  SQLITE_MUTEX_ALE
25720 52 54 5f 4d 49 4c 4c 49 53 45 43 4f 4e 44 53 0a  RT_MILLISECONDS.
25730 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
25740 4d 55 54 45 58 5f 41 4c 45 52 54 5f 4d 49 4c 4c  MUTEX_ALERT_MILL
25750 49 53 45 43 4f 4e 44 53 20 28 30 29 0a 23 65 6e  ISECONDS (0).#en
25760 64 69 66 0a 0a 23 69 66 20 21 64 65 66 69 6e 65  dif..#if !define
25770 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f  d(SQLITE_MUTEX_O
25780 4d 49 54 29 20 26 26 20 53 51 4c 49 54 45 5f 4d  MIT) && SQLITE_M
25790 55 54 45 58 5f 41 4c 45 52 54 5f 4d 49 4c 4c 49  UTEX_ALERT_MILLI
257a0 53 45 43 4f 4e 44 53 3e 30 0a 20 20 69 36 34 20  SECONDS>0.  i64 
257b0 73 71 6c 69 74 65 33 4d 75 74 65 78 54 69 6d 65  sqlite3MutexTime
257c0 4f 66 44 61 79 28 76 6f 69 64 29 3b 0a 20 20 76  OfDay(void);.  v
257d0 6f 69 64 20 73 71 6c 69 74 65 33 4d 75 74 65 78  oid sqlite3Mutex
257e0 54 69 6d 65 41 6c 65 72 74 28 73 71 6c 69 74 65  TimeAlert(sqlite
257f0 33 5f 6d 75 74 65 78 20 2a 2c 20 69 36 34 29 3b  3_mutex *, i64);
25800 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d 61 63  ../*.** This mac
25810 72 6f 20 72 65 74 75 72 6e 73 20 61 20 36 34 2d  ro returns a 64-
25820 62 69 74 20 69 6e 74 65 67 65 72 20 74 69 6d 65  bit integer time
25830 20 76 61 6c 75 65 2c 20 69 6e 20 6d 69 6c 6c 69   value, in milli
25840 73 65 63 6f 6e 64 73 2c 0a 2a 2a 20 6f 72 20 7a  seconds,.** or z
25850 65 72 6f 20 69 66 20 74 68 61 74 20 69 6e 66 6f  ero if that info
25860 72 6d 61 74 69 6f 6e 20 69 73 20 6e 6f 74 20 61  rmation is not a
25870 76 61 69 6c 61 62 6c 65 2e 0a 2a 2f 0a 23 20 69  vailable..*/.# i
25880 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 47 45 54  fndef SQLITE_GET
25890 5f 4d 55 54 45 58 5f 54 49 4d 45 0a 23 20 20 69  _MUTEX_TIME.#  i
258a0 66 20 53 51 4c 49 54 45 5f 4f 53 5f 55 4e 49 58  f SQLITE_OS_UNIX
258b0 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
258c0 54 45 5f 47 45 54 5f 4d 55 54 45 58 5f 54 49 4d  TE_GET_MUTEX_TIM
258d0 45 28 29 20 20 20 28 28 28 69 36 34 29 74 69 6d  E()   (((i64)tim
258e0 65 28 29 29 2a 31 30 30 30 29 0a 23 20 20 65 6c  e())*1000).#  el
258f0 69 66 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e  if SQLITE_OS_WIN
25900 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
25910 54 45 5f 47 45 54 5f 4d 55 54 45 58 5f 54 49 4d  TE_GET_MUTEX_TIM
25920 45 28 29 20 20 20 28 28 69 36 34 29 47 65 74 54  E()   ((i64)GetT
25930 69 63 6b 43 6f 75 6e 74 28 29 29 0a 23 20 20 65  ickCount()).#  e
25940 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53  lse.#   define S
25950 51 4c 49 54 45 5f 47 45 54 5f 4d 55 54 45 58 5f  QLITE_GET_MUTEX_
25960 54 49 4d 45 28 29 20 20 20 28 30 29 0a 23 20 20  TIME()   (0).#  
25970 65 6e 64 69 66 0a 23 20 65 6e 64 69 66 0a 0a 2f  endif.# endif../
25980 2a 0a 2a 2a 20 54 68 69 73 20 6d 61 63 72 6f 20  *.** This macro 
25990 72 65 74 75 72 6e 73 20 74 68 65 20 69 6e 74 65  returns the inte
259a0 67 65 72 20 74 79 70 65 20 66 6f 72 20 74 68 65  ger type for the
259b0 20 73 70 65 63 69 66 69 65 64 20 6d 75 74 65 78   specified mutex
259c0 20 6f 72 0a 2a 2a 20 6e 65 67 61 74 69 76 65 20   or.** negative 
259d0 6f 6e 65 20 69 66 20 74 68 61 74 20 69 6e 66 6f  one if that info
259e0 72 6d 61 74 69 6f 6e 20 69 73 20 6e 6f 74 20 61  rmation is not a
259f0 76 61 69 6c 61 62 6c 65 2e 0a 2a 2f 0a 23 20 69  vailable..*/.# i
25a00 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 47 45 54  fndef SQLITE_GET
25a10 5f 4d 55 54 45 58 5f 49 44 0a 23 20 20 69 66 20  _MUTEX_ID.#  if 
25a20 53 51 4c 49 54 45 5f 4f 53 5f 55 4e 49 58 0a 23  SQLITE_OS_UNIX.#
25a30 20 20 20 69 66 20 53 51 4c 49 54 45 5f 4d 55 54     if SQLITE_MUT
25a40 45 58 5f 4e 52 45 46 20 7c 7c 20 64 65 66 69 6e  EX_NREF || defin
25a50 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
25a60 5f 41 50 49 5f 41 52 4d 4f 52 29 0a 23 20 20 20  _API_ARMOR).#   
25a70 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 47   define SQLITE_G
25a80 45 54 5f 4d 55 54 45 58 5f 49 44 28 70 29 20 20  ET_MUTEX_ID(p)  
25a90 20 20 5c 0a 20 20 20 20 20 20 20 20 20 2a 28 28    \.         *((
25aa0 69 6e 74 2a 29 28 28 28 75 6e 73 69 67 6e 65 64  int*)(((unsigned
25ab0 20 63 68 61 72 2a 29 28 70 29 29 2b 73 69 7a 65   char*)(p))+size
25ac0 6f 66 28 70 74 68 72 65 61 64 5f 6d 75 74 65 78  of(pthread_mutex
25ad0 5f 74 29 29 29 0a 23 20 20 20 65 6c 73 65 0a 23  _t))).#   else.#
25ae0 20 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54      define SQLIT
25af0 45 5f 47 45 54 5f 4d 55 54 45 58 5f 49 44 28 70  E_GET_MUTEX_ID(p
25b00 29 20 20 20 20 28 2d 31 29 0a 23 20 20 20 65 6e  )    (-1).#   en
25b10 64 69 66 0a 23 20 20 65 6c 69 66 20 53 51 4c 49  dif.#  elif SQLI
25b20 54 45 5f 4f 53 5f 57 49 4e 0a 23 20 20 20 64 65  TE_OS_WIN.#   de
25b30 66 69 6e 65 20 53 51 4c 49 54 45 5f 47 45 54 5f  fine SQLITE_GET_
25b40 4d 55 54 45 58 5f 49 44 28 70 29 20 20 20 20 20  MUTEX_ID(p)     
25b50 5c 0a 20 20 20 20 20 20 20 20 20 2a 28 28 69 6e  \.         *((in
25b60 74 2a 29 28 28 28 75 6e 73 69 67 6e 65 64 20 63  t*)(((unsigned c
25b70 68 61 72 2a 29 28 70 29 29 2b 73 69 7a 65 6f 66  har*)(p))+sizeof
25b80 28 43 52 49 54 49 43 41 4c 5f 53 45 43 54 49 4f  (CRITICAL_SECTIO
25b90 4e 29 29 29 0a 23 20 20 65 6c 73 65 0a 23 20 20  N))).#  else.#  
25ba0 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 47   define SQLITE_G
25bb0 45 54 5f 4d 55 54 45 58 5f 49 44 28 70 29 20 20  ET_MUTEX_ID(p)  
25bc0 20 20 20 28 2d 31 29 0a 23 20 20 65 6e 64 69 66     (-1).#  endif
25bd0 0a 23 20 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  .# endif../*.** 
25be0 54 68 69 73 20 6d 61 63 72 6f 20 72 65 74 75 72  This macro retur
25bf0 6e 73 20 74 68 65 20 69 6e 74 65 67 65 72 20 69  ns the integer i
25c00 64 65 6e 74 69 66 69 65 72 20 66 6f 72 20 74 68  dentifier for th
25c10 65 20 63 75 72 72 65 6e 74 20 74 68 72 65 61 64  e current thread
25c20 0a 2a 2a 20 6f 72 20 7a 65 72 6f 20 69 66 20 74  .** or zero if t
25c30 68 61 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  hat information 
25c40 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65  is not available
25c50 2e 0a 2a 2f 0a 23 20 69 66 6e 64 65 66 20 53 51  ..*/.# ifndef SQ
25c60 4c 49 54 45 5f 47 45 54 5f 54 48 52 45 41 44 5f  LITE_GET_THREAD_
25c70 49 44 0a 23 20 20 69 66 20 53 51 4c 49 54 45 5f  ID.#  if SQLITE_
25c80 4f 53 5f 55 4e 49 58 0a 23 20 20 20 64 65 66 69  OS_UNIX.#   defi
25c90 6e 65 20 53 51 4c 49 54 45 5f 47 45 54 5f 54 48  ne SQLITE_GET_TH
25ca0 52 45 41 44 5f 49 44 28 29 20 20 20 20 20 28 28  READ_ID()     ((
25cb0 76 6f 69 64 20 2a 29 70 74 68 72 65 61 64 5f 73  void *)pthread_s
25cc0 65 6c 66 28 29 29 0a 23 20 20 65 6c 69 66 20 53  elf()).#  elif S
25cd0 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 0a 23 20 20  QLITE_OS_WIN.#  
25ce0 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 47   define SQLITE_G
25cf0 45 54 5f 54 48 52 45 41 44 5f 49 44 28 29 20 20  ET_THREAD_ID()  
25d00 20 20 20 28 28 76 6f 69 64 20 2a 29 47 65 74 43     ((void *)GetC
25d10 75 72 72 65 6e 74 54 68 72 65 61 64 49 64 28 29  urrentThreadId()
25d20 29 0a 23 20 20 65 6c 73 65 0a 23 20 20 20 64 65  ).#  else.#   de
25d30 66 69 6e 65 20 53 51 4c 49 54 45 5f 47 45 54 5f  fine SQLITE_GET_
25d40 54 48 52 45 41 44 5f 49 44 28 29 20 20 20 20 20  THREAD_ID()     
25d50 28 28 76 6f 69 64 20 2a 29 30 29 0a 23 20 20 65  ((void *)0).#  e
25d60 6e 64 69 66 0a 23 20 65 6e 64 69 66 0a 23 65 6c  ndif.# endif.#el
25d70 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
25d80 74 65 33 4d 75 74 65 78 54 69 6d 65 4f 66 44 61  te3MutexTimeOfDa
25d90 79 28 29 20 20 20 20 20 20 28 30 29 0a 23 20 64  y()      (0).# d
25da0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 75 74  efine sqlite3Mut
25db0 65 78 54 69 6d 65 41 6c 65 72 74 28 58 2c 59 29  exTimeAlert(X,Y)
25dc0 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
25dd0 5f 47 45 54 5f 4d 55 54 45 58 5f 54 49 4d 45 28  _GET_MUTEX_TIME(
25de0 29 20 20 20 20 20 20 28 30 29 0a 23 20 64 65 66  )      (0).# def
25df0 69 6e 65 20 53 51 4c 49 54 45 5f 47 45 54 5f 4d  ine SQLITE_GET_M
25e00 55 54 45 58 5f 49 44 28 70 29 20 20 20 20 20 20  UTEX_ID(p)      
25e10 20 28 2d 31 29 0a 23 20 64 65 66 69 6e 65 20 53   (-1).# define S
25e20 51 4c 49 54 45 5f 47 45 54 5f 54 48 52 45 41 44  QLITE_GET_THREAD
25e30 5f 49 44 28 29 20 20 20 20 20 20 20 28 28 76 6f  _ID()       ((vo
25e40 69 64 20 2a 29 30 29 0a 23 65 6e 64 69 66 0a 0a  id *)0).#endif..
25e50 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 71  sqlite3_int64 sq
25e60 6c 69 74 65 33 53 74 61 74 75 73 56 61 6c 75 65  lite3StatusValue
25e70 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  (int);.void sqli
25e80 74 65 33 53 74 61 74 75 73 55 70 28 69 6e 74 2c  te3StatusUp(int,
25e90 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
25ea0 74 65 33 53 74 61 74 75 73 44 6f 77 6e 28 69 6e  te3StatusDown(in
25eb0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
25ec0 6c 69 74 65 33 53 74 61 74 75 73 48 69 67 68 77  lite3StatusHighw
25ed0 61 74 65 72 28 69 6e 74 2c 20 69 6e 74 29 3b 0a  ater(int, int);.
25ee0 0a 2f 2a 20 41 63 63 65 73 73 20 74 6f 20 6d 75  ./* Access to mu
25ef0 74 65 78 65 73 20 75 73 65 64 20 62 79 20 73 71  texes used by sq
25f00 6c 69 74 65 33 5f 73 74 61 74 75 73 28 29 20 2a  lite3_status() *
25f10 2f 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20  /.sqlite3_mutex 
25f20 2a 73 71 6c 69 74 65 33 50 63 61 63 68 65 31 4d  *sqlite3Pcache1M
25f30 75 74 65 78 28 76 6f 69 64 29 3b 0a 73 71 6c 69  utex(void);.sqli
25f40 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74  te3_mutex *sqlit
25f50 65 33 4d 61 6c 6c 6f 63 4d 75 74 65 78 28 76 6f  e3MallocMutex(vo
25f60 69 64 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  id);..#ifndef SQ
25f70 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
25f80 4e 47 5f 50 4f 49 4e 54 0a 20 20 69 6e 74 20 73  NG_POINT.  int s
25f90 71 6c 69 74 65 33 49 73 4e 61 4e 28 64 6f 75 62  qlite3IsNaN(doub
25fa0 6c 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  le);.#else.# def
25fb0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 61 4e  ine sqlite3IsNaN
25fc0 28 58 29 20 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  (X)  0.#endif../
25fd0 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
25fe0 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
25ff0 67 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64  g structure hold
26000 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  s information ab
26010 6f 75 74 20 53 51 4c 0a 2a 2a 20 66 75 6e 63 74  out SQL.** funct
26020 69 6f 6e 73 20 61 72 67 75 6d 65 6e 74 73 20 74  ions arguments t
26030 68 61 74 20 61 72 65 20 74 68 65 20 70 61 72 61  hat are the para
26040 6d 65 74 65 72 73 20 74 6f 20 74 68 65 20 70 72  meters to the pr
26050 69 6e 74 66 28 29 20 66 75 6e 63 74 69 6f 6e 2e  intf() function.
26060 0a 2a 2f 0a 73 74 72 75 63 74 20 50 72 69 6e 74  .*/.struct Print
26070 66 41 72 67 75 6d 65 6e 74 73 20 7b 0a 20 20 69  fArguments {.  i
26080 6e 74 20 6e 41 72 67 3b 20 20 20 20 20 20 20 20  nt nArg;        
26090 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 74 61 6c          /* Total
260a0 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   number of argum
260b0 65 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 55  ents */.  int nU
260c0 73 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  sed;            
260d0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
260e0 61 72 67 75 6d 65 6e 74 73 20 75 73 65 64 20 73  arguments used s
260f0 6f 20 66 61 72 20 2a 2f 0a 20 20 73 71 6c 69 74  o far */.  sqlit
26100 65 33 5f 76 61 6c 75 65 20 2a 2a 61 70 41 72 67  e3_value **apArg
26110 3b 20 20 20 2f 2a 20 54 68 65 20 61 72 67 75 6d  ;   /* The argum
26120 65 6e 74 20 76 61 6c 75 65 73 20 2a 2f 0a 7d 3b  ent values */.};
26130 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 58  ..void sqlite3VX
26140 50 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d 2a  Printf(StrAccum*
26150 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76  , const char*, v
26160 61 5f 6c 69 73 74 29 3b 0a 76 6f 69 64 20 73 71  a_list);.void sq
26170 6c 69 74 65 33 58 50 72 69 6e 74 66 28 53 74 72  lite3XPrintf(Str
26180 41 63 63 75 6d 2a 2c 20 63 6f 6e 73 74 20 63 68  Accum*, const ch
26190 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20  ar*, ...);.char 
261a0 2a 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28  *sqlite3MPrintf(
261b0 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
261c0 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72  har*, ...);.char
261d0 20 2a 73 71 6c 69 74 65 33 56 4d 50 72 69 6e 74   *sqlite3VMPrint
261e0 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  f(sqlite3*,const
261f0 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29   char*, va_list)
26200 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ;.#if defined(SQ
26210 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64  LITE_DEBUG) || d
26220 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41  efined(SQLITE_HA
26230 56 45 5f 4f 53 5f 54 52 41 43 45 29 0a 20 20 76  VE_OS_TRACE).  v
26240 6f 69 64 20 73 71 6c 69 74 65 33 44 65 62 75 67  oid sqlite3Debug
26250 50 72 69 6e 74 66 28 63 6f 6e 73 74 20 63 68 61  Printf(const cha
26260 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66  r*, ...);.#endif
26270 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
26280 49 54 45 5f 54 45 53 54 29 0a 20 20 76 6f 69 64  ITE_TEST).  void
26290 20 2a 73 71 6c 69 74 65 33 54 65 73 74 54 65 78   *sqlite3TestTex
262a0 74 54 6f 50 74 72 28 63 6f 6e 73 74 20 63 68 61  tToPtr(const cha
262b0 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  r*);.#endif..#if
262c0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
262d0 44 45 42 55 47 29 0a 20 20 76 6f 69 64 20 73 71  DEBUG).  void sq
262e0 6c 69 74 65 33 54 72 65 65 56 69 65 77 45 78 70  lite3TreeViewExp
262f0 72 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e  r(TreeView*, con
26300 73 74 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20  st Expr*, u8);. 
26310 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65   void sqlite3Tre
26320 65 56 69 65 77 42 61 72 65 45 78 70 72 4c 69 73  eViewBareExprLis
26330 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e  t(TreeView*, con
26340 73 74 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f  st ExprList*, co
26350 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
26360 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69  id sqlite3TreeVi
26370 65 77 45 78 70 72 4c 69 73 74 28 54 72 65 65 56  ewExprList(TreeV
26380 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72  iew*, const Expr
26390 4c 69 73 74 2a 2c 20 75 38 2c 20 63 6f 6e 73 74  List*, u8, const
263a0 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20   char*);.  void 
263b0 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 53  sqlite3TreeViewS
263c0 65 6c 65 63 74 28 54 72 65 65 56 69 65 77 2a 2c  elect(TreeView*,
263d0 20 63 6f 6e 73 74 20 53 65 6c 65 63 74 2a 2c 20   const Select*, 
263e0 75 38 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  u8);.  void sqli
263f0 74 65 33 54 72 65 65 56 69 65 77 57 69 74 68 28  te3TreeViewWith(
26400 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74  TreeView*, const
26410 20 57 69 74 68 2a 2c 20 75 38 29 3b 0a 23 65 6e   With*, u8);.#en
26420 64 69 66 0a 0a 0a 76 6f 69 64 20 73 71 6c 69 74  dif...void sqlit
26430 65 33 53 65 74 53 74 72 69 6e 67 28 63 68 61 72  e3SetString(char
26440 20 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63   **, sqlite3*, c
26450 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
26460 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73  d sqlite3ErrorMs
26470 67 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  g(Parse*, const 
26480 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69  char*, ...);.voi
26490 64 20 73 71 6c 69 74 65 33 44 65 71 75 6f 74 65  d sqlite3Dequote
264a0 28 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71  (char*);.void sq
264b0 6c 69 74 65 33 54 6f 6b 65 6e 49 6e 69 74 28 54  lite3TokenInit(T
264c0 6f 6b 65 6e 2a 2c 63 68 61 72 2a 29 3b 0a 69 6e  oken*,char*);.in
264d0 74 20 73 71 6c 69 74 65 33 4b 65 79 77 6f 72 64  t sqlite3Keyword
264e0 43 6f 64 65 28 63 6f 6e 73 74 20 75 6e 73 69 67  Code(const unsig
264f0 6e 65 64 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b  ned char*, int);
26500 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 50  .int sqlite3RunP
26510 61 72 73 65 72 28 50 61 72 73 65 2a 2c 20 63 6f  arser(Parse*, co
26520 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72 20  nst char*, char 
26530 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  **);.void sqlite
26540 33 46 69 6e 69 73 68 43 6f 64 69 6e 67 28 50 61  3FinishCoding(Pa
26550 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  rse*);.int sqlit
26560 65 33 47 65 74 54 65 6d 70 52 65 67 28 50 61 72  e3GetTempReg(Par
26570 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
26580 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52 65 67  e3ReleaseTempReg
26590 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e  (Parse*,int);.in
265a0 74 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70  t sqlite3GetTemp
265b0 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74  Range(Parse*,int
265c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
265d0 65 6c 65 61 73 65 54 65 6d 70 52 61 6e 67 65 28  eleaseTempRange(
265e0 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b  Parse*,int,int);
265f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 65  .void sqlite3Cle
26600 61 72 54 65 6d 70 52 65 67 43 61 63 68 65 28 50  arTempRegCache(P
26610 61 72 73 65 2a 29 3b 0a 23 69 66 64 65 66 20 53  arse*);.#ifdef S
26620 51 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e 74 20  QLITE_DEBUG.int 
26630 73 71 6c 69 74 65 33 4e 6f 54 65 6d 70 73 49 6e  sqlite3NoTempsIn
26640 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74  Range(Parse*,int
26650 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 45 78  ,int);.#endif.Ex
26660 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41  pr *sqlite3ExprA
26670 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e  lloc(sqlite3*,in
26680 74 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 69  t,const Token*,i
26690 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  nt);.Expr *sqlit
266a0 65 33 45 78 70 72 28 73 71 6c 69 74 65 33 2a 2c  e3Expr(sqlite3*,
266b0 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
266c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
266d0 70 72 41 74 74 61 63 68 53 75 62 74 72 65 65 73  prAttachSubtrees
266e0 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c  (sqlite3*,Expr*,
266f0 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78  Expr*,Expr*);.Ex
26700 70 72 20 2a 73 71 6c 69 74 65 33 50 45 78 70 72  pr *sqlite3PExpr
26710 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 45 78  (Parse*, int, Ex
26720 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  pr*, Expr*);.voi
26730 64 20 73 71 6c 69 74 65 33 50 45 78 70 72 41 64  d sqlite3PExprAd
26740 64 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20  dSelect(Parse*, 
26750 45 78 70 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  Expr*, Select*);
26760 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78  .Expr *sqlite3Ex
26770 70 72 41 6e 64 28 73 71 6c 69 74 65 33 2a 2c 45  prAnd(sqlite3*,E
26780 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78  xpr*, Expr*);.Ex
26790 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 46  pr *sqlite3ExprF
267a0 75 6e 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 45  unction(Parse*,E
267b0 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  xprList*, Token*
267c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
267d0 78 70 72 41 73 73 69 67 6e 56 61 72 4e 75 6d 62  xprAssignVarNumb
267e0 65 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  er(Parse*, Expr*
267f0 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c  , u32);.void sql
26800 69 74 65 33 45 78 70 72 44 65 6c 65 74 65 28 73  ite3ExprDelete(s
26810 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 2a 29 3b  qlite3*, Expr*);
26820 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74  .ExprList *sqlit
26830 65 33 45 78 70 72 4c 69 73 74 41 70 70 65 6e 64  e3ExprListAppend
26840 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
26850 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69  *,Expr*);.ExprLi
26860 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c  st *sqlite3ExprL
26870 69 73 74 41 70 70 65 6e 64 56 65 63 74 6f 72 28  istAppendVector(
26880 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
26890 2c 49 64 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b  ,IdList*,Expr*);
268a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
268b0 72 4c 69 73 74 53 65 74 53 6f 72 74 4f 72 64 65  rListSetSortOrde
268c0 72 28 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29  r(ExprList*,int)
268d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
268e0 70 72 4c 69 73 74 53 65 74 4e 61 6d 65 28 50 61  prListSetName(Pa
268f0 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 54  rse*,ExprList*,T
26900 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  oken*,int);.void
26910 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
26920 53 65 74 53 70 61 6e 28 50 61 72 73 65 2a 2c 45  SetSpan(Parse*,E
26930 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 53 70 61  xprList*,ExprSpa
26940 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
26950 33 45 78 70 72 4c 69 73 74 44 65 6c 65 74 65 28  3ExprListDelete(
26960 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 4c 69  sqlite3*, ExprLi
26970 73 74 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65  st*);.u32 sqlite
26980 33 45 78 70 72 4c 69 73 74 46 6c 61 67 73 28 63  3ExprListFlags(c
26990 6f 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 29 3b  onst ExprList*);
269a0 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74  .int sqlite3Init
269b0 28 73 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a  (sqlite3*, char*
269c0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
269d0 6e 69 74 43 61 6c 6c 62 61 63 6b 28 76 6f 69 64  nitCallback(void
269e0 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2a 2c 20  *, int, char**, 
269f0 63 68 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73 71  char**);.void sq
26a00 6c 69 74 65 33 50 72 61 67 6d 61 28 50 61 72 73  lite3Pragma(Pars
26a10 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
26a20 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 23 69  ,Token*,int);.#i
26a30 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
26a40 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 4d  T_VIRTUALTABLE.M
26a50 6f 64 75 6c 65 20 2a 73 71 6c 69 74 65 33 50 72  odule *sqlite3Pr
26a60 61 67 6d 61 56 74 61 62 52 65 67 69 73 74 65 72  agmaVtabRegister
26a70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
26a80 63 68 61 72 20 2a 7a 4e 61 6d 65 29 3b 0a 23 65  char *zName);.#e
26a90 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
26aa0 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73  3ResetAllSchemas
26ab0 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c  OfConnection(sql
26ac0 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
26ad0 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65  ite3ResetOneSche
26ae0 6d 61 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29  ma(sqlite3*,int)
26af0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
26b00 6c 6c 61 70 73 65 44 61 74 61 62 61 73 65 41 72  llapseDatabaseAr
26b10 72 61 79 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  ray(sqlite3*);.v
26b20 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69  oid sqlite3Commi
26b30 74 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65 73  tInternalChanges
26b40 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
26b50 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 43 6f   sqlite3DeleteCo
26b60 6c 75 6d 6e 4e 61 6d 65 73 28 73 71 6c 69 74 65  lumnNames(sqlite
26b70 33 2a 2c 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20  3*,Table*);.int 
26b80 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 73 46 72  sqlite3ColumnsFr
26b90 6f 6d 45 78 70 72 4c 69 73 74 28 50 61 72 73 65  omExprList(Parse
26ba0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 31 36 2a  *,ExprList*,i16*
26bb0 2c 43 6f 6c 75 6d 6e 2a 2a 29 3b 0a 76 6f 69 64  ,Column**);.void
26bc0 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 41 64   sqlite3SelectAd
26bd0 64 43 6f 6c 75 6d 6e 54 79 70 65 41 6e 64 43 6f  dColumnTypeAndCo
26be0 6c 6c 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54  llation(Parse*,T
26bf0 61 62 6c 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a  able*,Select*);.
26c00 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 52 65  Table *sqlite3Re
26c10 73 75 6c 74 53 65 74 4f 66 53 65 6c 65 63 74 28  sultSetOfSelect(
26c20 50 61 72 73 65 2a 2c 53 65 6c 65 63 74 2a 29 3b  Parse*,Select*);
26c30 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65  .void sqlite3Ope
26c40 6e 4d 61 73 74 65 72 54 61 62 6c 65 28 50 61 72  nMasterTable(Par
26c50 73 65 20 2a 2c 20 69 6e 74 29 3b 0a 49 6e 64 65  se *, int);.Inde
26c60 78 20 2a 73 71 6c 69 74 65 33 50 72 69 6d 61 72  x *sqlite3Primar
26c70 79 4b 65 79 49 6e 64 65 78 28 54 61 62 6c 65 2a  yKeyIndex(Table*
26c80 29 3b 0a 69 31 36 20 73 71 6c 69 74 65 33 43 6f  );.i16 sqlite3Co
26c90 6c 75 6d 6e 4f 66 49 6e 64 65 78 28 49 6e 64 65  lumnOfIndex(Inde
26ca0 78 2a 2c 20 69 31 36 29 3b 0a 76 6f 69 64 20 73  x*, i16);.void s
26cb0 71 6c 69 74 65 33 53 74 61 72 74 54 61 62 6c 65  qlite3StartTable
26cc0 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
26cd0 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  oken*,int,int,in
26ce0 74 2c 69 6e 74 29 3b 0a 23 69 66 20 53 51 4c 49  t,int);.#if SQLI
26cf0 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e  TE_ENABLE_HIDDEN
26d00 5f 43 4f 4c 55 4d 4e 53 0a 20 20 76 6f 69 64 20  _COLUMNS.  void 
26d10 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 50 72 6f  sqlite3ColumnPro
26d20 70 65 72 74 69 65 73 46 72 6f 6d 4e 61 6d 65 28  pertiesFromName(
26d30 54 61 62 6c 65 2a 2c 20 43 6f 6c 75 6d 6e 2a 29  Table*, Column*)
26d40 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
26d50 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 50 72   sqlite3ColumnPr
26d60 6f 70 65 72 74 69 65 73 46 72 6f 6d 4e 61 6d 65  opertiesFromName
26d70 28 54 2c 43 29 20 2f 2a 20 6e 6f 2d 6f 70 20 2a  (T,C) /* no-op *
26d80 2f 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  /.#endif.void sq
26d90 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 28 50  lite3AddColumn(P
26da0 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
26db0 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
26dc0 65 33 41 64 64 4e 6f 74 4e 75 6c 6c 28 50 61 72  e3AddNotNull(Par
26dd0 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  se*, int);.void 
26de0 73 71 6c 69 74 65 33 41 64 64 50 72 69 6d 61 72  sqlite3AddPrimar
26df0 79 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70  yKey(Parse*, Exp
26e00 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74  rList*, int, int
26e10 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
26e20 69 74 65 33 41 64 64 43 68 65 63 6b 43 6f 6e 73  ite3AddCheckCons
26e30 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 45  traint(Parse*, E
26e40 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
26e50 74 65 33 41 64 64 44 65 66 61 75 6c 74 56 61 6c  te3AddDefaultVal
26e60 75 65 28 50 61 72 73 65 2a 2c 45 78 70 72 53 70  ue(Parse*,ExprSp
26e70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  an*);.void sqlit
26e80 65 33 41 64 64 43 6f 6c 6c 61 74 65 54 79 70 65  e3AddCollateType
26e90 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29  (Parse*, Token*)
26ea0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e  ;.void sqlite3En
26eb0 64 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f  dTable(Parse*,To
26ec0 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75 38 2c 53  ken*,Token*,u8,S
26ed0 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
26ee0 69 74 65 33 50 61 72 73 65 55 72 69 28 63 6f 6e  ite3ParseUri(con
26ef0 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
26f00 68 61 72 2a 2c 75 6e 73 69 67 6e 65 64 20 69 6e  har*,unsigned in
26f10 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t*,.            
26f20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
26f30 76 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68 61  vfs**,char**,cha
26f40 72 20 2a 2a 29 3b 0a 42 74 72 65 65 20 2a 73 71  r **);.Btree *sq
26f50 6c 69 74 65 33 44 62 4e 61 6d 65 54 6f 42 74 72  lite3DbNameToBtr
26f60 65 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  ee(sqlite3*,cons
26f70 74 20 63 68 61 72 2a 29 3b 0a 0a 23 69 66 64 65  t char*);..#ifde
26f80 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41  f SQLITE_UNTESTA
26f90 42 4c 45 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  BLE.# define sql
26fa0 69 74 65 33 46 61 75 6c 74 53 69 6d 28 58 29 20  ite3FaultSim(X) 
26fb0 53 51 4c 49 54 45 5f 4f 4b 0a 23 65 6c 73 65 0a  SQLITE_OK.#else.
26fc0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 61 75    int sqlite3Fau
26fd0 6c 74 53 69 6d 28 69 6e 74 29 3b 0a 23 65 6e 64  ltSim(int);.#end
26fe0 69 66 0a 0a 42 69 74 76 65 63 20 2a 73 71 6c 69  if..Bitvec *sqli
26ff0 74 65 33 42 69 74 76 65 63 43 72 65 61 74 65 28  te3BitvecCreate(
27000 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  u32);.int sqlite
27010 33 42 69 74 76 65 63 54 65 73 74 28 42 69 74 76  3BitvecTest(Bitv
27020 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73  ec*, u32);.int s
27030 71 6c 69 74 65 33 42 69 74 76 65 63 54 65 73 74  qlite3BitvecTest
27040 4e 6f 74 4e 75 6c 6c 28 42 69 74 76 65 63 2a 2c  NotNull(Bitvec*,
27050 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74   u32);.int sqlit
27060 65 33 42 69 74 76 65 63 53 65 74 28 42 69 74 76  e3BitvecSet(Bitv
27070 65 63 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20  ec*, u32);.void 
27080 73 71 6c 69 74 65 33 42 69 74 76 65 63 43 6c 65  sqlite3BitvecCle
27090 61 72 28 42 69 74 76 65 63 2a 2c 20 75 33 32 2c  ar(Bitvec*, u32,
270a0 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71   void*);.void sq
270b0 6c 69 74 65 33 42 69 74 76 65 63 44 65 73 74 72  lite3BitvecDestr
270c0 6f 79 28 42 69 74 76 65 63 2a 29 3b 0a 75 33 32  oy(Bitvec*);.u32
270d0 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 53 69   sqlite3BitvecSi
270e0 7a 65 28 42 69 74 76 65 63 2a 29 3b 0a 23 69 66  ze(Bitvec*);.#if
270f0 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45  ndef SQLITE_UNTE
27100 53 54 41 42 4c 45 0a 69 6e 74 20 73 71 6c 69 74  STABLE.int sqlit
27110 65 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e 54  e3BitvecBuiltinT
27120 65 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a 23  est(int,int*);.#
27130 65 6e 64 69 66 0a 0a 52 6f 77 53 65 74 20 2a 73  endif..RowSet *s
27140 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 69 74  qlite3RowSetInit
27150 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a  (sqlite3*, void*
27160 2c 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 3b  , unsigned int);
27170 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77  .void sqlite3Row
27180 53 65 74 43 6c 65 61 72 28 52 6f 77 53 65 74 2a  SetClear(RowSet*
27190 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
271a0 6f 77 53 65 74 49 6e 73 65 72 74 28 52 6f 77 53  owSetInsert(RowS
271b0 65 74 2a 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73  et*, i64);.int s
271c0 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73 74  qlite3RowSetTest
271d0 28 52 6f 77 53 65 74 2a 2c 20 69 6e 74 20 69 42  (RowSet*, int iB
271e0 61 74 63 68 2c 20 69 36 34 29 3b 0a 69 6e 74 20  atch, i64);.int 
271f0 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78  sqlite3RowSetNex
27200 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 2a 29  t(RowSet*, i64*)
27210 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  ;..void sqlite3C
27220 72 65 61 74 65 56 69 65 77 28 50 61 72 73 65 2a  reateView(Parse*
27230 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54  ,Token*,Token*,T
27240 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  oken*,ExprList*,
27250 53 65 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29  Select*,int,int)
27260 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  ;..#if !defined(
27270 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57  SQLITE_OMIT_VIEW
27280 29 20 7c 7c 20 21 64 65 66 69 6e 65 64 28 53 51  ) || !defined(SQ
27290 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
272a0 4c 54 41 42 4c 45 29 0a 20 20 69 6e 74 20 73 71  LTABLE).  int sq
272b0 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75  lite3ViewGetColu
272c0 6d 6e 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 54  mnNames(Parse*,T
272d0 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  able*);.#else.# 
272e0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 69  define sqlite3Vi
272f0 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73  ewGetColumnNames
27300 28 41 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a  (A,B) 0.#endif..
27310 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41  #if SQLITE_MAX_A
27320 54 54 41 43 48 45 44 3e 33 30 0a 20 20 69 6e 74  TTACHED>30.  int
27330 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c   sqlite3DbMaskAl
27340 6c 5a 65 72 6f 28 79 44 62 4d 61 73 6b 29 3b 0a  lZero(yDbMask);.
27350 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
27360 74 65 33 44 72 6f 70 54 61 62 6c 65 28 50 61 72  te3DropTable(Par
27370 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69  se*, SrcList*, i
27380 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
27390 71 6c 69 74 65 33 43 6f 64 65 44 72 6f 70 54 61  qlite3CodeDropTa
273a0 62 6c 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ble(Parse*, Tabl
273b0 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  e*, int, int);.v
273c0 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
273d0 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c  eTable(sqlite3*,
273e0 20 54 61 62 6c 65 2a 29 3b 0a 23 69 66 6e 64 65   Table*);.#ifnde
273f0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
27400 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 76 6f  TOINCREMENT.  vo
27410 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e  id sqlite3Autoin
27420 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 50 61 72  crementBegin(Par
27430 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 20 20 76  se *pParse);.  v
27440 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69  oid sqlite3Autoi
27450 6e 63 72 65 6d 65 6e 74 45 6e 64 28 50 61 72 73  ncrementEnd(Pars
27460 65 20 2a 70 50 61 72 73 65 29 3b 0a 23 65 6c 73  e *pParse);.#els
27470 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
27480 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42  e3AutoincrementB
27490 65 67 69 6e 28 58 29 0a 23 20 64 65 66 69 6e 65  egin(X).# define
274a0 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72   sqlite3Autoincr
274b0 65 6d 65 6e 74 45 6e 64 28 58 29 0a 23 65 6e 64  ementEnd(X).#end
274c0 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49  if.void sqlite3I
274d0 6e 73 65 72 74 28 50 61 72 73 65 2a 2c 20 53 72  nsert(Parse*, Sr
274e0 63 4c 69 73 74 2a 2c 20 53 65 6c 65 63 74 2a 2c  cList*, Select*,
274f0 20 49 64 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a   IdList*, int);.
27500 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 41 72 72  void *sqlite3Arr
27510 61 79 41 6c 6c 6f 63 61 74 65 28 73 71 6c 69 74  ayAllocate(sqlit
27520 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c 69 6e  e3*,void*,int,in
27530 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c 69 73 74  t*,int*);.IdList
27540 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74 41   *sqlite3IdListA
27550 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20  ppend(sqlite3*, 
27560 49 64 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29  IdList*, Token*)
27570 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 64 4c  ;.int sqlite3IdL
27580 69 73 74 49 6e 64 65 78 28 49 64 4c 69 73 74 2a  istIndex(IdList*
27590 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 53  ,const char*);.S
275a0 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53  rcList *sqlite3S
275b0 72 63 4c 69 73 74 45 6e 6c 61 72 67 65 28 73 71  rcListEnlarge(sq
275c0 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a  lite3*, SrcList*
275d0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 53 72 63  , int, int);.Src
275e0 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63  List *sqlite3Src
275f0 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74  ListAppend(sqlit
27600 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54  e3*, SrcList*, T
27610 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  oken*, Token*);.
27620 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  SrcList *sqlite3
27630 53 72 63 4c 69 73 74 41 70 70 65 6e 64 46 72 6f  SrcListAppendFro
27640 6d 54 65 72 6d 28 50 61 72 73 65 2a 2c 20 53 72  mTerm(Parse*, Sr
27650 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  cList*, Token*, 
27660 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20  Token*,.        
27670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 6f                To
27690 6b 65 6e 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45  ken*, Select*, E
276a0 78 70 72 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a  xpr*, IdList*);.
276b0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c  void sqlite3SrcL
276c0 69 73 74 49 6e 64 65 78 65 64 42 79 28 50 61 72  istIndexedBy(Par
276d0 73 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c  se *, SrcList *,
276e0 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20   Token *);.void 
276f0 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 46 75  sqlite3SrcListFu
27700 6e 63 41 72 67 73 28 50 61 72 73 65 2a 2c 20 53  ncArgs(Parse*, S
27710 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73  rcList*, ExprLis
27720 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
27730 49 6e 64 65 78 65 64 42 79 4c 6f 6f 6b 75 70 28  IndexedByLookup(
27740 50 61 72 73 65 20 2a 2c 20 73 74 72 75 63 74 20  Parse *, struct 
27750 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b  SrcList_item *);
27760 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63  .void sqlite3Src
27770 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70  ListShiftJoinTyp
27780 65 28 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69  e(SrcList*);.voi
27790 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  d sqlite3SrcList
277a0 41 73 73 69 67 6e 43 75 72 73 6f 72 73 28 50 61  AssignCursors(Pa
277b0 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  rse*, SrcList*);
277c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 64 4c  .void sqlite3IdL
277d0 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65  istDelete(sqlite
277e0 33 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f  3*, IdList*);.vo
277f0 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  id sqlite3SrcLis
27800 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  tDelete(sqlite3*
27810 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 49 6e 64  , SrcList*);.Ind
27820 65 78 20 2a 73 71 6c 69 74 65 33 41 6c 6c 6f 63  ex *sqlite3Alloc
27830 61 74 65 49 6e 64 65 78 4f 62 6a 65 63 74 28 73  ateIndexObject(s
27840 71 6c 69 74 65 33 2a 2c 69 31 36 2c 69 6e 74 2c  qlite3*,i16,int,
27850 63 68 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73 71  char**);.void sq
27860 6c 69 74 65 33 43 72 65 61 74 65 49 6e 64 65 78  lite3CreateIndex
27870 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
27880 6f 6b 65 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c 45  oken*,SrcList*,E
27890 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b  xprList*,int,Tok
278a0 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  en*,.           
278b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45                 E
278c0 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  xpr*, int, int, 
278d0 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
278e0 33 44 72 6f 70 49 6e 64 65 78 28 50 61 72 73 65  3DropIndex(Parse
278f0 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74  *, SrcList*, int
27900 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 65  );.int sqlite3Se
27910 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 53 65 6c  lect(Parse*, Sel
27920 65 63 74 2a 2c 20 53 65 6c 65 63 74 44 65 73 74  ect*, SelectDest
27930 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69  *);.Select *sqli
27940 74 65 33 53 65 6c 65 63 74 4e 65 77 28 50 61 72  te3SelectNew(Par
27950 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 72  se*,ExprList*,Sr
27960 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70  cList*,Expr*,Exp
27970 72 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20  rList*,.        
27980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27990 20 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a   Expr*,ExprList*
279a0 2c 75 33 32 2c 45 78 70 72 2a 2c 45 78 70 72 2a  ,u32,Expr*,Expr*
279b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
279c0 65 6c 65 63 74 44 65 6c 65 74 65 28 73 71 6c 69  electDelete(sqli
279d0 74 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  te3*, Select*);.
279e0 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 53 72  Table *sqlite3Sr
279f0 63 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61 72 73  cListLookup(Pars
27a00 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69  e*, SrcList*);.i
27a10 6e 74 20 73 71 6c 69 74 65 33 49 73 52 65 61 64  nt sqlite3IsRead
27a20 4f 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54 61 62  Only(Parse*, Tab
27a30 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  le*, int);.void 
27a40 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65  sqlite3OpenTable
27a50 28 50 61 72 73 65 2a 2c 20 69 6e 74 20 69 43 75  (Parse*, int iCu
27a60 72 2c 20 69 6e 74 20 69 44 62 2c 20 54 61 62 6c  r, int iDb, Tabl
27a70 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20 64 65  e*, int);.#if de
27a80 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
27a90 42 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54  BLE_UPDATE_DELET
27aa0 45 5f 4c 49 4d 49 54 29 20 26 26 20 21 64 65 66  E_LIMIT) && !def
27ab0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
27ac0 5f 53 55 42 51 55 45 52 59 29 0a 45 78 70 72 20  _SUBQUERY).Expr 
27ad0 2a 73 71 6c 69 74 65 33 4c 69 6d 69 74 57 68 65  *sqlite3LimitWhe
27ae0 72 65 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73  re(Parse*,SrcLis
27af0 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73  t*,Expr*,ExprLis
27b00 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c 63  t*,Expr*,Expr*,c
27b10 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 76 6f  har*);.#endif.vo
27b20 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
27b30 46 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53 72 63  From(Parse*, Src
27b40 4c 69 73 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  List*, Expr*);.v
27b50 6f 69 64 20 73 71 6c 69 74 65 33 55 70 64 61 74  oid sqlite3Updat
27b60 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  e(Parse*, SrcLis
27b70 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 45  t*, ExprList*, E
27b80 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 57 68 65 72  xpr*, int);.Wher
27b90 65 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57 68  eInfo *sqlite3Wh
27ba0 65 72 65 42 65 67 69 6e 28 50 61 72 73 65 2a 2c  ereBegin(Parse*,
27bb0 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45  SrcList*,Expr*,E
27bc0 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73  xprList*,ExprLis
27bd0 74 2a 2c 75 31 36 2c 69 6e 74 29 3b 0a 76 6f 69  t*,u16,int);.voi
27be0 64 20 73 71 6c 69 74 65 33 57 68 65 72 65 45 6e  d sqlite3WhereEn
27bf0 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 4c  d(WhereInfo*);.L
27c00 6f 67 45 73 74 20 73 71 6c 69 74 65 33 57 68 65  ogEst sqlite3Whe
27c10 72 65 4f 75 74 70 75 74 52 6f 77 43 6f 75 6e 74  reOutputRowCount
27c20 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
27c30 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73  t sqlite3WhereIs
27c40 44 69 73 74 69 6e 63 74 28 57 68 65 72 65 49 6e  Distinct(WhereIn
27c50 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  fo*);.int sqlite
27c60 33 57 68 65 72 65 49 73 4f 72 64 65 72 65 64 28  3WhereIsOrdered(
27c70 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
27c80 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f 72 64   sqlite3WhereOrd
27c90 65 72 65 64 49 6e 6e 65 72 4c 6f 6f 70 28 57 68  eredInnerLoop(Wh
27ca0 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
27cb0 71 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f 72  qlite3WhereIsSor
27cc0 74 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  ted(WhereInfo*);
27cd0 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
27ce0 65 43 6f 6e 74 69 6e 75 65 4c 61 62 65 6c 28 57  eContinueLabel(W
27cf0 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
27d00 73 71 6c 69 74 65 33 57 68 65 72 65 42 72 65 61  sqlite3WhereBrea
27d10 6b 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f  kLabel(WhereInfo
27d20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
27d30 68 65 72 65 4f 6b 4f 6e 65 50 61 73 73 28 57 68  hereOkOnePass(Wh
27d40 65 72 65 49 6e 66 6f 2a 2c 20 69 6e 74 2a 29 3b  ereInfo*, int*);
27d50 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53 53  .#define ONEPASS
27d60 5f 4f 46 46 20 20 20 20 20 20 30 20 20 20 20 20  _OFF      0     
27d70 20 20 20 2f 2a 20 55 73 65 20 6f 66 20 4f 4e 45     /* Use of ONE
27d80 50 41 53 53 20 6e 6f 74 20 61 6c 6c 6f 77 65 64  PASS not allowed
27d90 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50   */.#define ONEP
27da0 41 53 53 5f 53 49 4e 47 4c 45 20 20 20 31 20 20  ASS_SINGLE   1  
27db0 20 20 20 20 20 20 2f 2a 20 4f 4e 45 50 41 53 53        /* ONEPASS
27dc0 20 76 61 6c 69 64 20 66 6f 72 20 61 20 73 69 6e   valid for a sin
27dd0 67 6c 65 20 72 6f 77 20 75 70 64 61 74 65 20 2a  gle row update *
27de0 2f 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53  /.#define ONEPAS
27df0 53 5f 4d 55 4c 54 49 20 20 20 20 32 20 20 20 20  S_MULTI    2    
27e00 20 20 20 20 2f 2a 20 4f 4e 45 50 41 53 53 20 69      /* ONEPASS i
27e10 73 20 76 61 6c 69 64 20 66 6f 72 20 6d 75 6c 74  s valid for mult
27e20 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 76 6f 69  iple rows */.voi
27e30 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
27e40 65 4c 6f 61 64 49 6e 64 65 78 43 6f 6c 75 6d 6e  eLoadIndexColumn
27e50 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c  (Parse*, Index*,
27e60 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
27e70 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
27e80 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 28 50 61  CodeGetColumn(Pa
27e90 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
27ea0 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29  t, int, int, u8)
27eb0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
27ec0 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 54  prCodeGetColumnT
27ed0 6f 52 65 67 28 50 61 72 73 65 2a 2c 20 54 61 62  oReg(Parse*, Tab
27ee0 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  le*, int, int, i
27ef0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
27f00 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75  3ExprCodeGetColu
27f10 6d 6e 4f 66 54 61 62 6c 65 28 56 64 62 65 2a 2c  mnOfTable(Vdbe*,
27f20 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
27f30 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
27f40 6c 69 74 65 33 45 78 70 72 43 6f 64 65 4d 6f 76  lite3ExprCodeMov
27f50 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  e(Parse*, int, i
27f60 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
27f70 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 53  qlite3ExprCacheS
27f80 74 6f 72 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  tore(Parse*, int
27f90 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
27fa0 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63  d sqlite3ExprCac
27fb0 68 65 50 75 73 68 28 50 61 72 73 65 2a 29 3b 0a  hePush(Parse*);.
27fc0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
27fd0 43 61 63 68 65 50 6f 70 28 50 61 72 73 65 2a 29  CachePop(Parse*)
27fe0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
27ff0 70 72 43 61 63 68 65 52 65 6d 6f 76 65 28 50 61  prCacheRemove(Pa
28000 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  rse*, int, int);
28010 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
28020 72 43 61 63 68 65 43 6c 65 61 72 28 50 61 72 73  rCacheClear(Pars
28030 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
28040 33 45 78 70 72 43 61 63 68 65 41 66 66 69 6e 69  3ExprCacheAffini
28050 74 79 43 68 61 6e 67 65 28 50 61 72 73 65 2a 2c  tyChange(Parse*,
28060 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
28070 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
28080 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
28090 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
280a0 65 33 45 78 70 72 43 6f 64 65 43 6f 70 79 28 50  e3ExprCodeCopy(P
280b0 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
280c0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
280d0 45 78 70 72 43 6f 64 65 46 61 63 74 6f 72 61 62  ExprCodeFactorab
280e0 6c 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  le(Parse*, Expr*
280f0 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
28100 74 65 33 45 78 70 72 43 6f 64 65 41 74 49 6e 69  te3ExprCodeAtIni
28110 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  t(Parse*, Expr*,
28120 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
28130 65 33 45 78 70 72 43 6f 64 65 54 65 6d 70 28 50  e3ExprCodeTemp(P
28140 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
28150 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
28160 45 78 70 72 43 6f 64 65 54 61 72 67 65 74 28 50  ExprCodeTarget(P
28170 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
28180 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
28190 45 78 70 72 43 6f 64 65 41 6e 64 43 61 63 68 65  ExprCodeAndCache
281a0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
281b0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
281c0 33 45 78 70 72 43 6f 64 65 45 78 70 72 4c 69 73  3ExprCodeExprLis
281d0 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  t(Parse*, ExprLi
281e0 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75  st*, int, int, u
281f0 38 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  8);.#define SQLI
28200 54 45 5f 45 43 45 4c 5f 44 55 50 20 20 20 20 20  TE_ECEL_DUP     
28210 20 30 78 30 31 20 20 2f 2a 20 44 65 65 70 2c 20   0x01  /* Deep, 
28220 6e 6f 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70 69  not shallow copi
28230 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
28240 4c 49 54 45 5f 45 43 45 4c 5f 46 41 43 54 4f 52  LITE_ECEL_FACTOR
28250 20 20 20 30 78 30 32 20 20 2f 2a 20 46 61 63 74     0x02  /* Fact
28260 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74 20  or out constant 
28270 74 65 72 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65  terms */.#define
28280 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 52 45 46   SQLITE_ECEL_REF
28290 20 20 20 20 20 20 30 78 30 34 20 20 2f 2a 20 55        0x04  /* U
282a0 73 65 20 45 78 70 72 4c 69 73 74 2e 75 2e 78 2e  se ExprList.u.x.
282b0 69 4f 72 64 65 72 42 79 43 6f 6c 20 2a 2f 0a 23  iOrderByCol */.#
282c0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43  define SQLITE_EC
282d0 45 4c 5f 4f 4d 49 54 52 45 46 20 20 30 78 30 38  EL_OMITREF  0x08
282e0 20 20 2f 2a 20 4f 6d 69 74 20 69 66 20 45 78 70    /* Omit if Exp
282f0 72 4c 69 73 74 2e 75 2e 78 2e 69 4f 72 64 65 72  rList.u.x.iOrder
28300 42 79 43 6f 6c 20 2a 2f 0a 76 6f 69 64 20 73 71  ByCol */.void sq
28310 6c 69 74 65 33 45 78 70 72 49 66 54 72 75 65 28  lite3ExprIfTrue(
28320 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
28330 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
28340 71 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c 73  qlite3ExprIfFals
28350 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
28360 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
28370 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 46 61   sqlite3ExprIfFa
28380 6c 73 65 44 75 70 28 50 61 72 73 65 2a 2c 20 45  lseDup(Parse*, E
28390 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  xpr*, int, int);
283a0 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 46  .Table *sqlite3F
283b0 69 6e 64 54 61 62 6c 65 28 73 71 6c 69 74 65 33  indTable(sqlite3
283c0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  *,const char*, c
283d0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 64 65  onst char*);.#de
283e0 66 69 6e 65 20 4c 4f 43 41 54 45 5f 56 49 45 57  fine LOCATE_VIEW
283f0 20 20 20 20 30 78 30 31 0a 23 64 65 66 69 6e 65      0x01.#define
28400 20 4c 4f 43 41 54 45 5f 4e 4f 45 52 52 20 20 20   LOCATE_NOERR   
28410 30 78 30 32 0a 54 61 62 6c 65 20 2a 73 71 6c 69  0x02.Table *sqli
28420 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 28 50  te3LocateTable(P
28430 61 72 73 65 2a 2c 75 33 32 20 66 6c 61 67 73 2c  arse*,u32 flags,
28440 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
28450 73 74 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65  st char*);.Table
28460 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54   *sqlite3LocateT
28470 61 62 6c 65 49 74 65 6d 28 50 61 72 73 65 2a 2c  ableItem(Parse*,
28480 75 33 32 20 66 6c 61 67 73 2c 73 74 72 75 63 74  u32 flags,struct
28490 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29   SrcList_item *)
284a0 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33  ;.Index *sqlite3
284b0 46 69 6e 64 49 6e 64 65 78 28 73 71 6c 69 74 65  FindIndex(sqlite
284c0 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
284d0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
284e0 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  id sqlite3Unlink
284f0 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28 73  AndDeleteTable(s
28500 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
28510 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
28520 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
28530 65 6c 65 74 65 49 6e 64 65 78 28 73 71 6c 69 74  eleteIndex(sqlit
28540 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  e3*,int,const ch
28550 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
28560 65 33 56 61 63 75 75 6d 28 50 61 72 73 65 2a 2c  e3Vacuum(Parse*,
28570 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
28580 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28 63 68  ite3RunVacuum(ch
28590 61 72 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20  ar**, sqlite3*, 
285a0 69 6e 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  int);.char *sqli
285b0 74 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e  te3NameFromToken
285c0 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e  (sqlite3*, Token
285d0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
285e0 78 70 72 43 6f 6d 70 61 72 65 28 45 78 70 72 2a  xprCompare(Expr*
285f0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69  , Expr*, int);.i
28600 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
28610 6d 70 61 72 65 53 6b 69 70 28 45 78 70 72 2a 2c  mpareSkip(Expr*,
28620 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   Expr*, int);.in
28630 74 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  t sqlite3ExprLis
28640 74 43 6f 6d 70 61 72 65 28 45 78 70 72 4c 69 73  tCompare(ExprLis
28650 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  t*, ExprList*, i
28660 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
28670 45 78 70 72 49 6d 70 6c 69 65 73 45 78 70 72 28  ExprImpliesExpr(
28680 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  Expr*, Expr*, in
28690 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
286a0 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 72 65  ExprAnalyzeAggre
286b0 67 61 74 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78  gates(NameContex
286c0 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  t*, Expr*);.void
286d0 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c   sqlite3ExprAnal
286e0 79 7a 65 41 67 67 4c 69 73 74 28 4e 61 6d 65 43  yzeAggList(NameC
286f0 6f 6e 74 65 78 74 2a 2c 45 78 70 72 4c 69 73 74  ontext*,ExprList
28700 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
28710 78 70 72 43 6f 76 65 72 65 64 42 79 49 6e 64 65  xprCoveredByInde
28720 78 28 45 78 70 72 2a 2c 20 69 6e 74 20 69 43 75  x(Expr*, int iCu
28730 72 2c 20 49 6e 64 65 78 20 2a 70 49 64 78 29 3b  r, Index *pIdx);
28740 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 75 6e 63  .int sqlite3Func
28750 74 69 6f 6e 55 73 65 73 54 68 69 73 53 72 63 28  tionUsesThisSrc(
28760 45 78 70 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29  Expr*, SrcList*)
28770 3b 0a 56 64 62 65 20 2a 73 71 6c 69 74 65 33 47  ;.Vdbe *sqlite3G
28780 65 74 56 64 62 65 28 50 61 72 73 65 2a 29 3b 0a  etVdbe(Parse*);.
28790 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55  #ifndef SQLITE_U
287a0 4e 54 45 53 54 41 42 4c 45 0a 76 6f 69 64 20 73  NTESTABLE.void s
287b0 71 6c 69 74 65 33 50 72 6e 67 53 61 76 65 53 74  qlite3PrngSaveSt
287c0 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  ate(void);.void 
287d0 73 71 6c 69 74 65 33 50 72 6e 67 52 65 73 74 6f  sqlite3PrngResto
287e0 72 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 23  reState(void);.#
287f0 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
28800 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71  e3RollbackAll(sq
28810 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69  lite3*,int);.voi
28820 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72  d sqlite3CodeVer
28830 69 66 79 53 63 68 65 6d 61 28 50 61 72 73 65 2a  ifySchema(Parse*
28840 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
28850 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 4e 61  ite3CodeVerifyNa
28860 6d 65 64 53 63 68 65 6d 61 28 50 61 72 73 65 2a  medSchema(Parse*
28870 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44  , const char *zD
28880 62 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  b);.void sqlite3
28890 42 65 67 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e  BeginTransaction
288a0 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76  (Parse*, int);.v
288b0 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69  oid sqlite3Commi
288c0 74 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72  tTransaction(Par
288d0 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
288e0 65 33 52 6f 6c 6c 62 61 63 6b 54 72 61 6e 73 61  e3RollbackTransa
288f0 63 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 76  ction(Parse*);.v
28900 6f 69 64 20 73 71 6c 69 74 65 33 53 61 76 65 70  oid sqlite3Savep
28910 6f 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  oint(Parse*, int
28920 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
28930 73 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65  sqlite3CloseSave
28940 70 6f 69 6e 74 73 28 73 71 6c 69 74 65 33 20 2a  points(sqlite3 *
28950 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4c  );.void sqlite3L
28960 65 61 76 65 4d 75 74 65 78 41 6e 64 43 6c 6f 73  eaveMutexAndClos
28970 65 5a 6f 6d 62 69 65 28 73 71 6c 69 74 65 33 2a  eZombie(sqlite3*
28980 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
28990 70 72 49 73 43 6f 6e 73 74 61 6e 74 28 45 78 70  prIsConstant(Exp
289a0 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
289b0 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4e 6f  ExprIsConstantNo
289c0 74 4a 6f 69 6e 28 45 78 70 72 2a 29 3b 0a 69 6e  tJoin(Expr*);.in
289d0 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43  t sqlite3ExprIsC
289e0 6f 6e 73 74 61 6e 74 4f 72 46 75 6e 63 74 69 6f  onstantOrFunctio
289f0 6e 28 45 78 70 72 2a 2c 20 75 38 29 3b 0a 69 6e  n(Expr*, u8);.in
28a00 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 54  t sqlite3ExprIsT
28a10 61 62 6c 65 43 6f 6e 73 74 61 6e 74 28 45 78 70  ableConstant(Exp
28a20 72 2a 2c 69 6e 74 29 3b 0a 23 69 66 64 65 66 20  r*,int);.#ifdef 
28a30 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55  SQLITE_ENABLE_CU
28a40 52 53 4f 52 5f 48 49 4e 54 53 0a 69 6e 74 20 73  RSOR_HINTS.int s
28a50 71 6c 69 74 65 33 45 78 70 72 43 6f 6e 74 61 69  qlite3ExprContai
28a60 6e 73 53 75 62 71 75 65 72 79 28 45 78 70 72 2a  nsSubquery(Expr*
28a70 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71  );.#endif.int sq
28a80 6c 69 74 65 33 45 78 70 72 49 73 49 6e 74 65 67  lite3ExprIsInteg
28a90 65 72 28 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b  er(Expr*, int*);
28aa0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
28ab0 43 61 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73 74 20  CanBeNull(const 
28ac0 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
28ad0 74 65 33 45 78 70 72 4e 65 65 64 73 4e 6f 41 66  te3ExprNeedsNoAf
28ae0 66 69 6e 69 74 79 43 68 61 6e 67 65 28 63 6f 6e  finityChange(con
28af0 73 74 20 45 78 70 72 2a 2c 20 63 68 61 72 29 3b  st Expr*, char);
28b00 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 6f  .int sqlite3IsRo
28b10 77 69 64 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  wid(const char*)
28b20 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65  ;.void sqlite3Ge
28b30 6e 65 72 61 74 65 52 6f 77 44 65 6c 65 74 65 28  nerateRowDelete(
28b40 0a 20 20 20 20 50 61 72 73 65 2a 2c 54 61 62 6c  .    Parse*,Tabl
28b50 65 2a 2c 54 72 69 67 67 65 72 2a 2c 69 6e 74 2c  e*,Trigger*,int,
28b60 69 6e 74 2c 69 6e 74 2c 69 31 36 2c 75 38 2c 75  int,int,i16,u8,u
28b70 38 2c 75 38 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  8,u8,int);.void 
28b80 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52  sqlite3GenerateR
28b90 6f 77 49 6e 64 65 78 44 65 6c 65 74 65 28 50 61  owIndexDelete(Pa
28ba0 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
28bb0 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e  t, int, int*, in
28bc0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  t);.int sqlite3G
28bd0 65 6e 65 72 61 74 65 49 6e 64 65 78 4b 65 79 28  enerateIndexKey(
28be0 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20  Parse*, Index*, 
28bf0 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  int, int, int, i
28c00 6e 74 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74 29 3b  nt*,Index*,int);
28c10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
28c20 6f 6c 76 65 50 61 72 74 49 64 78 4c 61 62 65 6c  olvePartIdxLabel
28c30 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f  (Parse*,int);.vo
28c40 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61  id sqlite3Genera
28c50 74 65 43 6f 6e 73 74 72 61 69 6e 74 43 68 65 63  teConstraintChec
28c60 6b 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  ks(Parse*,Table*
28c70 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  ,int*,int,int,in
28c80 74 2c 69 6e 74 2c 0a 20 20 20 20 20 20 20 20 20  t,int,.         
28c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28ca0 20 20 20 20 20 20 20 20 20 20 20 20 75 38 2c 75              u8,u
28cb0 38 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29  8,int,int*,int*)
28cc0 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
28cd0 45 4e 41 42 4c 45 5f 4e 55 4c 4c 5f 54 52 49 4d  ENABLE_NULL_TRIM
28ce0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 53  .  void sqlite3S
28cf0 65 74 4d 61 6b 65 52 65 63 6f 72 64 50 35 28 56  etMakeRecordP5(V
28d00 64 62 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65  dbe*,Table*);.#e
28d10 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
28d20 69 74 65 33 53 65 74 4d 61 6b 65 52 65 63 6f 72  ite3SetMakeRecor
28d30 64 50 35 28 41 2c 42 29 0a 23 65 6e 64 69 66 0a  dP5(A,B).#endif.
28d40 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 70  void sqlite3Comp
28d50 6c 65 74 65 49 6e 73 65 72 74 69 6f 6e 28 50 61  leteInsertion(Pa
28d60 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c  rse*,Table*,int,
28d70 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74  int,int,int*,int
28d80 2c 69 6e 74 2c 69 6e 74 29 3b 0a 69 6e 74 20 73  ,int,int);.int s
28d90 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41  qlite3OpenTableA
28da0 6e 64 49 6e 64 69 63 65 73 28 50 61 72 73 65 2a  ndIndices(Parse*
28db0 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 75  , Table*, int, u
28dc0 38 2c 20 69 6e 74 2c 20 75 38 2a 2c 20 69 6e 74  8, int, u8*, int
28dd0 2a 2c 20 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73  *, int*);.void s
28de0 71 6c 69 74 65 33 42 65 67 69 6e 57 72 69 74 65  qlite3BeginWrite
28df0 4f 70 65 72 61 74 69 6f 6e 28 50 61 72 73 65 2a  Operation(Parse*
28e00 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
28e10 64 20 73 71 6c 69 74 65 33 4d 75 6c 74 69 57 72  d sqlite3MultiWr
28e20 69 74 65 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  ite(Parse*);.voi
28e30 64 20 73 71 6c 69 74 65 33 4d 61 79 41 62 6f 72  d sqlite3MayAbor
28e40 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  t(Parse*);.void 
28e50 73 71 6c 69 74 65 33 48 61 6c 74 43 6f 6e 73 74  sqlite3HaltConst
28e60 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e  raint(Parse*, in
28e70 74 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2c 20 69  t, int, char*, i
28e80 38 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c  8, u8);.void sql
28e90 69 74 65 33 55 6e 69 71 75 65 43 6f 6e 73 74 72  ite3UniqueConstr
28ea0 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  aint(Parse*, int
28eb0 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20  , Index*);.void 
28ec0 73 71 6c 69 74 65 33 52 6f 77 69 64 43 6f 6e 73  sqlite3RowidCons
28ed0 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69  traint(Parse*, i
28ee0 6e 74 2c 20 54 61 62 6c 65 2a 29 3b 0a 45 78 70  nt, Table*);.Exp
28ef0 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 44 75  r *sqlite3ExprDu
28f00 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a  p(sqlite3*,Expr*
28f10 2c 69 6e 74 29 3b 0a 45 78 70 72 4c 69 73 74 20  ,int);.ExprList 
28f20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74  *sqlite3ExprList
28f30 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  Dup(sqlite3*,Exp
28f40 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 53 72 63  rList*,int);.Src
28f50 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63  List *sqlite3Src
28f60 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a  ListDup(sqlite3*
28f70 2c 53 72 63 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a  ,SrcList*,int);.
28f80 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49  IdList *sqlite3I
28f90 64 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33  dListDup(sqlite3
28fa0 2a 2c 49 64 4c 69 73 74 2a 29 3b 0a 53 65 6c 65  *,IdList*);.Sele
28fb0 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63  ct *sqlite3Selec
28fc0 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 65  tDup(sqlite3*,Se
28fd0 6c 65 63 74 2a 2c 69 6e 74 29 3b 0a 23 69 66 20  lect*,int);.#if 
28fe0 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42  SELECTTRACE_ENAB
28ff0 4c 45 44 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  LED.void sqlite3
29000 53 65 6c 65 63 74 53 65 74 4e 61 6d 65 28 53 65  SelectSetName(Se
29010 6c 65 63 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72  lect*,const char
29020 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
29030 6e 65 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  ne sqlite3Select
29040 53 65 74 4e 61 6d 65 28 41 2c 42 29 0a 23 65 6e  SetName(A,B).#en
29050 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
29060 49 6e 73 65 72 74 42 75 69 6c 74 69 6e 46 75 6e  InsertBuiltinFun
29070 63 73 28 46 75 6e 63 44 65 66 2a 2c 69 6e 74 29  cs(FuncDef*,int)
29080 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74  ;.FuncDef *sqlit
29090 65 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73  e3FindFunction(s
290a0 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
290b0 61 72 2a 2c 69 6e 74 2c 75 38 2c 75 38 29 3b 0a  ar*,int,u8,u8);.
290c0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69  void sqlite3Regi
290d0 73 74 65 72 42 75 69 6c 74 69 6e 46 75 6e 63 74  sterBuiltinFunct
290e0 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64  ions(void);.void
290f0 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72   sqlite3Register
29100 44 61 74 65 54 69 6d 65 46 75 6e 63 74 69 6f 6e  DateTimeFunction
29110 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  s(void);.void sq
29120 6c 69 74 65 33 52 65 67 69 73 74 65 72 50 65 72  lite3RegisterPer
29130 43 6f 6e 6e 65 63 74 69 6f 6e 42 75 69 6c 74 69  ConnectionBuilti
29140 6e 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74  nFunctions(sqlit
29150 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  e3*);.int sqlite
29160 33 53 61 66 65 74 79 43 68 65 63 6b 4f 6b 28 73  3SafetyCheckOk(s
29170 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71  qlite3*);.int sq
29180 6c 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b  lite3SafetyCheck
29190 53 69 63 6b 4f 72 4f 6b 28 73 71 6c 69 74 65 33  SickOrOk(sqlite3
291a0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
291b0 43 68 61 6e 67 65 43 6f 6f 6b 69 65 28 50 61 72  ChangeCookie(Par
291c0 73 65 2a 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 20  se*, int);..#if 
291d0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
291e0 4f 4d 49 54 5f 56 49 45 57 29 20 26 26 20 21 64  OMIT_VIEW) && !d
291f0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
29200 49 54 5f 54 52 49 47 47 45 52 29 0a 76 6f 69 64  IT_TRIGGER).void
29210 20 73 71 6c 69 74 65 33 4d 61 74 65 72 69 61 6c   sqlite3Material
29220 69 7a 65 56 69 65 77 28 50 61 72 73 65 2a 2c 20  izeView(Parse*, 
29230 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Table*, Expr*, i
29240 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  nt);.#endif..#if
29250 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
29260 5f 54 52 49 47 47 45 52 0a 20 20 76 6f 69 64 20  _TRIGGER.  void 
29270 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72 69 67  sqlite3BeginTrig
29280 67 65 72 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  ger(Parse*, Toke
29290 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e  n*,Token*,int,in
292a0 74 2c 49 64 4c 69 73 74 2a 2c 53 72 63 4c 69 73  t,IdList*,SrcLis
292b0 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t*,.            
292c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45                 E
292d0 78 70 72 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b 0a  xpr*,int, int);.
292e0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69    void sqlite3Fi
292f0 6e 69 73 68 54 72 69 67 67 65 72 28 50 61 72 73  nishTrigger(Pars
29300 65 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a  e*, TriggerStep*
29310 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f 69  , Token*);.  voi
29320 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69  d sqlite3DropTri
29330 67 67 65 72 28 50 61 72 73 65 2a 2c 20 53 72 63  gger(Parse*, Src
29340 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76  List*, int);.  v
29350 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54  oid sqlite3DropT
29360 72 69 67 67 65 72 50 74 72 28 50 61 72 73 65 2a  riggerPtr(Parse*
29370 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 54  , Trigger*);.  T
29380 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54  rigger *sqlite3T
29390 72 69 67 67 65 72 73 45 78 69 73 74 28 50 61 72  riggersExist(Par
293a0 73 65 20 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  se *, Table*, in
293b0 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  t, ExprList*, in
293c0 74 20 2a 70 4d 61 73 6b 29 3b 0a 20 20 54 72 69  t *pMask);.  Tri
293d0 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69  gger *sqlite3Tri
293e0 67 67 65 72 4c 69 73 74 28 50 61 72 73 65 20 2a  ggerList(Parse *
293f0 2c 20 54 61 62 6c 65 20 2a 29 3b 0a 20 20 76 6f  , Table *);.  vo
29400 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f  id sqlite3CodeRo
29410 77 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c  wTrigger(Parse*,
29420 20 54 72 69 67 67 65 72 20 2a 2c 20 69 6e 74 2c   Trigger *, int,
29430 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c   ExprList*, int,
29440 20 54 61 62 6c 65 20 2a 2c 0a 20 20 20 20 20 20   Table *,.      
29450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29460 20 20 20 20 20 20 69 6e 74 2c 20 69 6e 74 2c 20        int, int, 
29470 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  int);.  void sql
29480 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67  ite3CodeRowTrigg
29490 65 72 44 69 72 65 63 74 28 50 61 72 73 65 20 2a  erDirect(Parse *
294a0 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 54 61 62  , Trigger *, Tab
294b0 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  le *, int, int, 
294c0 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  int);.  void sql
294d0 69 74 65 56 69 65 77 54 72 69 67 67 65 72 73 28  iteViewTriggers(
294e0 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
294f0 45 78 70 72 2a 2c 20 69 6e 74 2c 20 45 78 70 72  Expr*, int, Expr
29500 4c 69 73 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73  List*);.  void s
29510 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67  qlite3DeleteTrig
29520 67 65 72 53 74 65 70 28 73 71 6c 69 74 65 33 2a  gerStep(sqlite3*
29530 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b  , TriggerStep*);
29540 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
29550 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 53 65  sqlite3TriggerSe
29560 6c 65 63 74 53 74 65 70 28 73 71 6c 69 74 65 33  lectStep(sqlite3
29570 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20 54 72  *,Select*);.  Tr
29580 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74  iggerStep *sqlit
29590 65 33 54 72 69 67 67 65 72 49 6e 73 65 72 74 53  e3TriggerInsertS
295a0 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b  tep(sqlite3*,Tok
295b0 65 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c 0a 20 20  en*, IdList*,.  
295c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
295d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
295e0 20 20 20 20 20 20 53 65 6c 65 63 74 2a 2c 75 38        Select*,u8
295f0 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70  );.  TriggerStep
29600 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
29610 55 70 64 61 74 65 53 74 65 70 28 73 71 6c 69 74  UpdateStep(sqlit
29620 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c  e3*,Token*,ExprL
29630 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 75 38 29  ist*, Expr*, u8)
29640 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  ;.  TriggerStep 
29650 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 44  *sqlite3TriggerD
29660 65 6c 65 74 65 53 74 65 70 28 73 71 6c 69 74 65  eleteStep(sqlite
29670 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a  3*,Token*, Expr*
29680 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
29690 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 73  3DeleteTrigger(s
296a0 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72  qlite3*, Trigger
296b0 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
296c0 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
296d0 65 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33  eTrigger(sqlite3
296e0 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
296f0 2a 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65  *);.  u32 sqlite
29700 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28  3TriggerColmask(
29710 50 61 72 73 65 2a 2c 54 72 69 67 67 65 72 2a 2c  Parse*,Trigger*,
29720 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e  ExprList*,int,in
29730 74 2c 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23  t,Table*,int);.#
29740 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50   define sqlite3P
29750 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20  arseToplevel(p) 
29760 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20  ((p)->pToplevel 
29770 3f 20 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c  ? (p)->pToplevel
29780 20 3a 20 28 70 29 29 0a 23 20 64 65 66 69 6e 65   : (p)).# define
29790 20 73 71 6c 69 74 65 33 49 73 54 6f 70 6c 65 76   sqlite3IsToplev
297a0 65 6c 28 70 29 20 28 28 70 29 2d 3e 70 54 6f 70  el(p) ((p)->pTop
297b0 6c 65 76 65 6c 3d 3d 30 29 0a 23 65 6c 73 65 0a  level==0).#else.
297c0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
297d0 54 72 69 67 67 65 72 73 45 78 69 73 74 28 42 2c  TriggersExist(B,
297e0 43 2c 44 2c 45 2c 46 29 20 30 0a 23 20 64 65 66  C,D,E,F) 0.# def
297f0 69 6e 65 20 73 71 6c 69 74 65 33 44 65 6c 65 74  ine sqlite3Delet
29800 65 54 72 69 67 67 65 72 28 41 2c 42 29 0a 23 20  eTrigger(A,B).# 
29810 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44 72  define sqlite3Dr
29820 6f 70 54 72 69 67 67 65 72 50 74 72 28 41 2c 42  opTriggerPtr(A,B
29830 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
29840 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
29850 65 54 72 69 67 67 65 72 28 41 2c 42 2c 43 29 0a  eTrigger(A,B,C).
29860 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
29870 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28 41  CodeRowTrigger(A
29880 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49  ,B,C,D,E,F,G,H,I
29890 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
298a0 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72  e3CodeRowTrigger
298b0 44 69 72 65 63 74 28 41 2c 42 2c 43 2c 44 2c 45  Direct(A,B,C,D,E
298c0 2c 46 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,F).# define sql
298d0 69 74 65 33 54 72 69 67 67 65 72 4c 69 73 74 28  ite3TriggerList(
298e0 58 2c 20 59 29 20 30 0a 23 20 64 65 66 69 6e 65  X, Y) 0.# define
298f0 20 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70   sqlite3ParseTop
29900 6c 65 76 65 6c 28 70 29 20 70 0a 23 20 64 65 66  level(p) p.# def
29910 69 6e 65 20 73 71 6c 69 74 65 33 49 73 54 6f 70  ine sqlite3IsTop
29920 6c 65 76 65 6c 28 70 29 20 31 0a 23 20 64 65 66  level(p) 1.# def
29930 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67  ine sqlite3Trigg
29940 65 72 43 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c  erColmask(A,B,C,
29950 44 2c 45 2c 46 2c 47 29 20 30 0a 23 65 6e 64 69  D,E,F,G) 0.#endi
29960 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  f..int sqlite3Jo
29970 69 6e 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54  inType(Parse*, T
29980 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  oken*, Token*, T
29990 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
299a0 69 74 65 33 43 72 65 61 74 65 46 6f 72 65 69 67  ite3CreateForeig
299b0 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70  nKey(Parse*, Exp
299c0 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  rList*, Token*, 
299d0 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b  ExprList*, int);
299e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66  .void sqlite3Def
299f0 65 72 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72  erForeignKey(Par
29a00 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 6e 64  se*, int);.#ifnd
29a10 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
29a20 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 76  UTHORIZATION.  v
29a30 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 52  oid sqlite3AuthR
29a40 65 61 64 28 50 61 72 73 65 2a 2c 45 78 70 72 2a  ead(Parse*,Expr*
29a50 2c 53 63 68 65 6d 61 2a 2c 53 72 63 4c 69 73 74  ,Schema*,SrcList
29a60 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
29a70 33 41 75 74 68 43 68 65 63 6b 28 50 61 72 73 65  3AuthCheck(Parse
29a80 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  *,int, const cha
29a90 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  r*, const char*,
29aa0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20   const char*);. 
29ab0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74   void sqlite3Aut
29ac0 68 43 6f 6e 74 65 78 74 50 75 73 68 28 50 61 72  hContextPush(Par
29ad0 73 65 2a 2c 20 41 75 74 68 43 6f 6e 74 65 78 74  se*, AuthContext
29ae0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
29af0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
29b00 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 41 75  uthContextPop(Au
29b10 74 68 43 6f 6e 74 65 78 74 2a 29 3b 0a 20 20 69  thContext*);.  i
29b20 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68 52 65  nt sqlite3AuthRe
29b30 61 64 43 6f 6c 28 50 61 72 73 65 2a 2c 20 63 6f  adCol(Parse*, co
29b40 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73  nst char *, cons
29b50 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a  t char *, int);.
29b60 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
29b70 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 28 61  qlite3AuthRead(a
29b80 2c 62 2c 63 2c 64 29 0a 23 20 64 65 66 69 6e 65  ,b,c,d).# define
29b90 20 73 71 6c 69 74 65 33 41 75 74 68 43 68 65 63   sqlite3AuthChec
29ba0 6b 28 61 2c 62 2c 63 2c 64 2c 65 29 20 20 20 20  k(a,b,c,d,e)    
29bb0 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 64 65 66 69  SQLITE_OK.# defi
29bc0 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f  ne sqlite3AuthCo
29bd0 6e 74 65 78 74 50 75 73 68 28 61 2c 62 2c 63 29  ntextPush(a,b,c)
29be0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
29bf0 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28  3AuthContextPop(
29c00 61 29 20 20 28 28 76 6f 69 64 29 28 61 29 29 0a  a)  ((void)(a)).
29c10 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
29c20 74 65 33 41 74 74 61 63 68 28 50 61 72 73 65 2a  te3Attach(Parse*
29c30 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20  , Expr*, Expr*, 
29c40 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
29c50 69 74 65 33 44 65 74 61 63 68 28 50 61 72 73 65  ite3Detach(Parse
29c60 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
29c70 73 71 6c 69 74 65 33 46 69 78 49 6e 69 74 28 44  sqlite3FixInit(D
29c80 62 46 69 78 65 72 2a 2c 20 50 61 72 73 65 2a 2c  bFixer*, Parse*,
29c90 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
29ca0 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29  *, const Token*)
29cb0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
29cc0 53 72 63 4c 69 73 74 28 44 62 46 69 78 65 72 2a  SrcList(DbFixer*
29cd0 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74  , SrcList*);.int
29ce0 20 73 71 6c 69 74 65 33 46 69 78 53 65 6c 65 63   sqlite3FixSelec
29cf0 74 28 44 62 46 69 78 65 72 2a 2c 20 53 65 6c 65  t(DbFixer*, Sele
29d00 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
29d10 33 46 69 78 45 78 70 72 28 44 62 46 69 78 65 72  3FixExpr(DbFixer
29d20 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  *, Expr*);.int s
29d30 71 6c 69 74 65 33 46 69 78 45 78 70 72 4c 69 73  qlite3FixExprLis
29d40 74 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72  t(DbFixer*, Expr
29d50 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
29d60 74 65 33 46 69 78 54 72 69 67 67 65 72 53 74 65  te3FixTriggerSte
29d70 70 28 44 62 46 69 78 65 72 2a 2c 20 54 72 69 67  p(DbFixer*, Trig
29d80 67 65 72 53 74 65 70 2a 29 3b 0a 69 6e 74 20 73  gerStep*);.int s
29d90 71 6c 69 74 65 33 41 74 6f 46 28 63 6f 6e 73 74  qlite3AtoF(const
29da0 20 63 68 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65   char *z, double
29db0 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74  *, int, u8);.int
29dc0 20 73 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32   sqlite3GetInt32
29dd0 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69  (const char *, i
29de0 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
29df0 33 41 74 6f 69 28 63 6f 6e 73 74 20 63 68 61 72  3Atoi(const char
29e00 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 55  *);.int sqlite3U
29e10 74 66 31 36 42 79 74 65 4c 65 6e 28 63 6f 6e 73  tf16ByteLen(cons
29e20 74 20 76 6f 69 64 20 2a 70 44 61 74 61 2c 20 69  t void *pData, i
29e30 6e 74 20 6e 43 68 61 72 29 3b 0a 69 6e 74 20 73  nt nChar);.int s
29e40 71 6c 69 74 65 33 55 74 66 38 43 68 61 72 4c 65  qlite3Utf8CharLe
29e50 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 44  n(const char *pD
29e60 61 74 61 2c 20 69 6e 74 20 6e 42 79 74 65 29 3b  ata, int nByte);
29e70 0a 75 33 32 20 73 71 6c 69 74 65 33 55 74 66 38  .u32 sqlite3Utf8
29e80 52 65 61 64 28 63 6f 6e 73 74 20 75 38 2a 2a 29  Read(const u8**)
29e90 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33  ;.LogEst sqlite3
29ea0 4c 6f 67 45 73 74 28 75 36 34 29 3b 0a 4c 6f 67  LogEst(u64);.Log
29eb0 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73  Est sqlite3LogEs
29ec0 74 41 64 64 28 4c 6f 67 45 73 74 2c 4c 6f 67 45  tAdd(LogEst,LogE
29ed0 73 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  st);.#ifndef SQL
29ee0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
29ef0 54 41 42 4c 45 0a 4c 6f 67 45 73 74 20 73 71 6c  TABLE.LogEst sql
29f00 69 74 65 33 4c 6f 67 45 73 74 46 72 6f 6d 44 6f  ite3LogEstFromDo
29f10 75 62 6c 65 28 64 6f 75 62 6c 65 29 3b 0a 23 65  uble(double);.#e
29f20 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64  ndif.#if defined
29f30 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53  (SQLITE_ENABLE_S
29f40 54 4d 54 5f 53 43 41 4e 53 54 41 54 55 53 29 20  TMT_SCANSTATUS) 
29f50 7c 7c 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64  || \.    defined
29f60 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53  (SQLITE_ENABLE_S
29f70 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 29 20 7c  TAT3_OR_STAT4) |
29f80 7c 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28  | \.    defined(
29f90 53 51 4c 49 54 45 5f 45 58 50 4c 41 49 4e 5f 45  SQLITE_EXPLAIN_E
29fa0 53 54 49 4d 41 54 45 44 5f 52 4f 57 53 29 0a 75  STIMATED_ROWS).u
29fb0 36 34 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74  64 sqlite3LogEst
29fc0 54 6f 49 6e 74 28 4c 6f 67 45 73 74 29 3b 0a 23  ToInt(LogEst);.#
29fd0 65 6e 64 69 66 0a 56 4c 69 73 74 20 2a 73 71 6c  endif.VList *sql
29fe0 69 74 65 33 56 4c 69 73 74 41 64 64 28 73 71 6c  ite3VListAdd(sql
29ff0 69 74 65 33 2a 2c 56 4c 69 73 74 2a 2c 63 6f 6e  ite3*,VList*,con
2a000 73 74 20 63 68 61 72 2a 2c 69 6e 74 2c 69 6e 74  st char*,int,int
2a010 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  );.const char *s
2a020 71 6c 69 74 65 33 56 4c 69 73 74 4e 75 6d 54 6f  qlite3VListNumTo
2a030 4e 61 6d 65 28 56 4c 69 73 74 2a 2c 69 6e 74 29  Name(VList*,int)
2a040 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 4c 69  ;.int sqlite3VLi
2a050 73 74 4e 61 6d 65 54 6f 4e 75 6d 28 56 4c 69 73  stNameToNum(VLis
2a060 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69  t*,const char*,i
2a070 6e 74 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74  nt);../*.** Rout
2a080 69 6e 65 73 20 74 6f 20 72 65 61 64 20 61 6e 64  ines to read and
2a090 20 77 72 69 74 65 20 76 61 72 69 61 62 6c 65 2d   write variable-
2a0a0 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72 73 2e  length integers.
2a0b0 20 20 54 68 65 73 65 20 75 73 65 64 20 74 6f 0a    These used to.
2a0c0 2a 2a 20 62 65 20 64 65 66 69 6e 65 64 20 6c 6f  ** be defined lo
2a0d0 63 61 6c 6c 79 2c 20 62 75 74 20 6e 6f 77 20 77  cally, but now w
2a0e0 65 20 75 73 65 20 74 68 65 20 76 61 72 69 6e 74  e use the varint
2a0f0 20 72 6f 75 74 69 6e 65 73 20 69 6e 20 74 68 65   routines in the
2a100 20 75 74 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e   util.c.** file.
2a110 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 50  .*/.int sqlite3P
2a120 75 74 56 61 72 69 6e 74 28 75 6e 73 69 67 6e 65  utVarint(unsigne
2a130 64 20 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a 75  d char*, u64);.u
2a140 38 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69  8 sqlite3GetVari
2a150 6e 74 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  nt(const unsigne
2a160 64 20 63 68 61 72 20 2a 2c 20 75 36 34 20 2a 29  d char *, u64 *)
2a170 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 56  ;.u8 sqlite3GetV
2a180 61 72 69 6e 74 33 32 28 63 6f 6e 73 74 20 75 6e  arint32(const un
2a190 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75  signed char *, u
2a1a0 33 32 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  32 *);.int sqlit
2a1b0 65 33 56 61 72 69 6e 74 4c 65 6e 28 75 36 34 20  e3VarintLen(u64 
2a1c0 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63  v);../*.** The c
2a1d0 6f 6d 6d 6f 6e 20 63 61 73 65 20 69 73 20 66 6f  ommon case is fo
2a1e0 72 20 61 20 76 61 72 69 6e 74 20 74 6f 20 62 65  r a varint to be
2a1f0 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65 2e 20   a single byte. 
2a200 20 54 68 65 79 20 66 6f 6c 6c 6f 77 69 6e 67 0a   They following.
2a210 2a 2a 20 6d 61 63 72 6f 73 20 68 61 6e 64 6c 65  ** macros handle
2a220 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65   the common case
2a230 20 77 69 74 68 6f 75 74 20 61 20 70 72 6f 63 65   without a proce
2a240 64 75 72 65 20 63 61 6c 6c 2c 20 62 75 74 20 74  dure call, but t
2a250 68 65 6e 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20  hen call.** the 
2a260 70 72 6f 63 65 64 75 72 65 20 66 6f 72 20 6c 61  procedure for la
2a270 72 67 65 72 20 76 61 72 69 6e 74 73 2e 0a 2a 2f  rger varints..*/
2a280 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61 72 69  .#define getVari
2a290 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28  nt32(A,B)  \.  (
2a2a0 75 38 29 28 28 2a 28 41 29 3c 28 75 38 29 30 78  u8)((*(A)<(u8)0x
2a2b0 38 30 29 3f 28 28 42 29 3d 28 75 33 32 29 2a 28  80)?((B)=(u32)*(
2a2c0 41 29 29 2c 31 3a 73 71 6c 69 74 65 33 47 65 74  A)),1:sqlite3Get
2a2d0 56 61 72 69 6e 74 33 32 28 28 41 29 2c 28 75 33  Varint32((A),(u3
2a2e0 32 20 2a 29 26 28 42 29 29 29 0a 23 64 65 66 69  2 *)&(B))).#defi
2a2f0 6e 65 20 70 75 74 56 61 72 69 6e 74 33 32 28 41  ne putVarint32(A
2a300 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28 28  ,B)  \.  (u8)(((
2a310 75 33 32 29 28 42 29 3c 28 75 33 32 29 30 78 38  u32)(B)<(u32)0x8
2a320 30 29 3f 28 2a 28 41 29 3d 28 75 6e 73 69 67 6e  0)?(*(A)=(unsign
2a330 65 64 20 63 68 61 72 29 28 42 29 29 2c 31 3a 5c  ed char)(B)),1:\
2a340 0a 20 20 73 71 6c 69 74 65 33 50 75 74 56 61 72  .  sqlite3PutVar
2a350 69 6e 74 28 28 41 29 2c 28 42 29 29 29 0a 23 64  int((A),(B))).#d
2a360 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74 20  efine getVarint 
2a370 20 20 20 73 71 6c 69 74 65 33 47 65 74 56 61 72     sqlite3GetVar
2a380 69 6e 74 0a 23 64 65 66 69 6e 65 20 70 75 74 56  int.#define putV
2a390 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33  arint    sqlite3
2a3a0 50 75 74 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73  PutVarint...cons
2a3b0 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 49  t char *sqlite3I
2a3c0 6e 64 65 78 41 66 66 69 6e 69 74 79 53 74 72 28  ndexAffinityStr(
2a3d0 73 71 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a  sqlite3*, Index*
2a3e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54  );.void sqlite3T
2a3f0 61 62 6c 65 41 66 66 69 6e 69 74 79 28 56 64 62  ableAffinity(Vdb
2a400 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29  e*, Table*, int)
2a410 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 43 6f  ;.char sqlite3Co
2a420 6d 70 61 72 65 41 66 66 69 6e 69 74 79 28 45 78  mpareAffinity(Ex
2a430 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20  pr *pExpr, char 
2a440 61 66 66 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74  aff2);.int sqlit
2a450 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79 4f  e3IndexAffinityO
2a460 6b 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63  k(Expr *pExpr, c
2a470 68 61 72 20 69 64 78 5f 61 66 66 69 6e 69 74 79  har idx_affinity
2a480 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 54  );.char sqlite3T
2a490 61 62 6c 65 43 6f 6c 75 6d 6e 41 66 66 69 6e 69  ableColumnAffini
2a4a0 74 79 28 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a  ty(Table*,int);.
2a4b0 63 68 61 72 20 73 71 6c 69 74 65 33 45 78 70 72  char sqlite3Expr
2a4c0 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70  Affinity(Expr *p
2a4d0 45 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74  Expr);.int sqlit
2a4e0 65 33 41 74 6f 69 36 34 28 63 6f 6e 73 74 20 63  e3Atoi64(const c
2a4f0 68 61 72 2a 2c 20 69 36 34 2a 2c 20 69 6e 74 2c  har*, i64*, int,
2a500 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   u8);.int sqlite
2a510 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28 63  3DecOrHexToI64(c
2a520 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a  onst char*, i64*
2a530 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
2a540 72 72 6f 72 57 69 74 68 4d 73 67 28 73 71 6c 69  rrorWithMsg(sqli
2a550 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  te3*, int, const
2a560 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69   char*,...);.voi
2a570 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 73  d sqlite3Error(s
2a580 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f  qlite3*,int);.vo
2a590 69 64 20 73 71 6c 69 74 65 33 53 79 73 74 65 6d  id sqlite3System
2a5a0 45 72 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c 69  Error(sqlite3*,i
2a5b0 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  nt);.void *sqlit
2a5c0 65 33 48 65 78 54 6f 42 6c 6f 62 28 73 71 6c 69  e3HexToBlob(sqli
2a5d0 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  te3*, const char
2a5e0 20 2a 7a 2c 20 69 6e 74 20 6e 29 3b 0a 75 38 20   *z, int n);.u8 
2a5f0 73 71 6c 69 74 65 33 48 65 78 54 6f 49 6e 74 28  sqlite3HexToInt(
2a600 69 6e 74 20 68 29 3b 0a 69 6e 74 20 73 71 6c 69  int h);.int sqli
2a610 74 65 33 54 77 6f 50 61 72 74 4e 61 6d 65 28 50  te3TwoPartName(P
2a620 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c  arse *, Token *,
2a630 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20   Token *, Token 
2a640 2a 2a 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65  **);..#if define
2a650 64 28 53 51 4c 49 54 45 5f 4e 45 45 44 5f 45 52  d(SQLITE_NEED_ER
2a660 52 5f 4e 41 4d 45 29 0a 63 6f 6e 73 74 20 63 68  R_NAME).const ch
2a670 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72 4e 61  ar *sqlite3ErrNa
2a680 6d 65 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  me(int);.#endif.
2a690 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
2a6a0 69 74 65 33 45 72 72 53 74 72 28 69 6e 74 29 3b  ite3ErrStr(int);
2a6b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 61 64  .int sqlite3Read
2a6c0 53 63 68 65 6d 61 28 50 61 72 73 65 20 2a 70 50  Schema(Parse *pP
2a6d0 61 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  arse);.CollSeq *
2a6e0 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53  sqlite3FindCollS
2a6f0 65 71 28 73 71 6c 69 74 65 33 2a 2c 75 38 20 65  eq(sqlite3*,u8 e
2a700 6e 63 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nc, const char*,
2a710 69 6e 74 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  int);.CollSeq *s
2a720 71 6c 69 74 65 33 4c 6f 63 61 74 65 43 6f 6c 6c  qlite3LocateColl
2a730 53 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73  Seq(Parse *pPars
2a740 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 7a 4e  e, const char*zN
2a750 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  ame);.CollSeq *s
2a760 71 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c 53 65  qlite3ExprCollSe
2a770 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  q(Parse *pParse,
2a780 20 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 45   Expr *pExpr);.E
2a790 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
2a7a0 41 64 64 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28  AddCollateToken(
2a7b0 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45  Parse *pParse, E
2a7c0 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65  xpr*, const Toke
2a7d0 6e 2a 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a  n*, int);.Expr *
2a7e0 73 71 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f  sqlite3ExprAddCo
2a7f0 6c 6c 61 74 65 53 74 72 69 6e 67 28 50 61 72 73  llateString(Pars
2a800 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63  e*,Expr*,const c
2a810 68 61 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  har*);.Expr *sql
2a820 69 74 65 33 45 78 70 72 53 6b 69 70 43 6f 6c 6c  ite3ExprSkipColl
2a830 61 74 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20  ate(Expr*);.int 
2a840 73 71 6c 69 74 65 33 43 68 65 63 6b 43 6f 6c 6c  sqlite3CheckColl
2a850 53 65 71 28 50 61 72 73 65 20 2a 2c 20 43 6f 6c  Seq(Parse *, Col
2a860 6c 53 65 71 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  lSeq *);.int sql
2a870 69 74 65 33 43 68 65 63 6b 4f 62 6a 65 63 74 4e  ite3CheckObjectN
2a880 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 63 6f 6e  ame(Parse *, con
2a890 73 74 20 63 68 61 72 20 2a 29 3b 0a 76 6f 69 64  st char *);.void
2a8a0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
2a8b0 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33 20 2a  hanges(sqlite3 *
2a8c0 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
2a8d0 74 65 33 41 64 64 49 6e 74 36 34 28 69 36 34 2a  te3AddInt64(i64*
2a8e0 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,i64);.int sqlit
2a8f0 65 33 53 75 62 49 6e 74 36 34 28 69 36 34 2a 2c  e3SubInt64(i64*,
2a900 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  i64);.int sqlite
2a910 33 4d 75 6c 49 6e 74 36 34 28 69 36 34 2a 2c 69  3MulInt64(i64*,i
2a920 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
2a930 41 62 73 49 6e 74 33 32 28 69 6e 74 29 3b 0a 23  AbsInt32(int);.#
2a940 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
2a950 42 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a 76 6f  BLE_8_3_NAMES.vo
2a960 69 64 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75  id sqlite3FileSu
2a970 66 66 69 78 33 28 63 6f 6e 73 74 20 63 68 61 72  ffix3(const char
2a980 2a 2c 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65  *, char*);.#else
2a990 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2a9a0 33 46 69 6c 65 53 75 66 66 69 78 33 28 58 2c 59  3FileSuffix3(X,Y
2a9b0 29 0a 23 65 6e 64 69 66 0a 75 38 20 73 71 6c 69  ).#endif.u8 sqli
2a9c0 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f  te3GetBoolean(co
2a9d0 6e 73 74 20 63 68 61 72 20 2a 7a 2c 75 38 29 3b  nst char *z,u8);
2a9e0 0a 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71  ..const void *sq
2a9f0 6c 69 74 65 33 56 61 6c 75 65 54 65 78 74 28 73  lite3ValueText(s
2aa00 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75  qlite3_value*, u
2aa10 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  8);.int sqlite3V
2aa20 61 6c 75 65 42 79 74 65 73 28 73 71 6c 69 74 65  alueBytes(sqlite
2aa30 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 76  3_value*, u8);.v
2aa40 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
2aa50 53 65 74 53 74 72 28 73 71 6c 69 74 65 33 5f 76  SetStr(sqlite3_v
2aa60 61 6c 75 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  alue*, int, cons
2aa70 74 20 76 6f 69 64 20 2a 2c 75 38 2c 0a 20 20 20  t void *,u8,.   
2aa80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aa90 20 20 20 20 20 76 6f 69 64 28 2a 29 28 76 6f 69       void(*)(voi
2aaa0 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  d*));.void sqlit
2aab0 65 33 56 61 6c 75 65 53 65 74 4e 75 6c 6c 28 73  e3ValueSetNull(s
2aac0 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a  qlite3_value*);.
2aad0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
2aae0 65 46 72 65 65 28 73 71 6c 69 74 65 33 5f 76 61  eFree(sqlite3_va
2aaf0 6c 75 65 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 76  lue*);.sqlite3_v
2ab00 61 6c 75 65 20 2a 73 71 6c 69 74 65 33 56 61 6c  alue *sqlite3Val
2ab10 75 65 4e 65 77 28 73 71 6c 69 74 65 33 20 2a 29  ueNew(sqlite3 *)
2ab20 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 55  ;.char *sqlite3U
2ab30 74 66 31 36 74 6f 38 28 73 71 6c 69 74 65 33 20  tf16to8(sqlite3 
2ab40 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20  *, const void*, 
2ab50 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  int, u8);.int sq
2ab60 6c 69 74 65 33 56 61 6c 75 65 46 72 6f 6d 45 78  lite3ValueFromEx
2ab70 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 45 78  pr(sqlite3 *, Ex
2ab80 70 72 20 2a 2c 20 75 38 2c 20 75 38 2c 20 73 71  pr *, u8, u8, sq
2ab90 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 3b  lite3_value **);
2aba0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c  .void sqlite3Val
2abb0 75 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28  ueApplyAffinity(
2abc0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2c  sqlite3_value *,
2abd0 20 75 38 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65   u8, u8);.#ifnde
2abe0 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d  f SQLITE_AMALGAM
2abf0 41 54 49 4f 4e 0a 65 78 74 65 72 6e 20 63 6f 6e  ATION.extern con
2ac00 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
2ac10 20 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72   sqlite3OpcodePr
2ac20 6f 70 65 72 74 79 5b 5d 3b 0a 65 78 74 65 72 6e  operty[];.extern
2ac30 20 63 6f 6e 73 74 20 63 68 61 72 20 73 71 6c 69   const char sqli
2ac40 74 65 33 53 74 72 42 49 4e 41 52 59 5b 5d 3b 0a  te3StrBINARY[];.
2ac50 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73  extern const uns
2ac60 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74  igned char sqlit
2ac70 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 5d  e3UpperToLower[]
2ac80 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75  ;.extern const u
2ac90 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c  nsigned char sql
2aca0 69 74 65 33 43 74 79 70 65 4d 61 70 5b 5d 3b 0a  ite3CtypeMap[];.
2acb0 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 54 6f 6b  extern const Tok
2acc0 65 6e 20 73 71 6c 69 74 65 33 49 6e 74 54 6f 6b  en sqlite3IntTok
2acd0 65 6e 73 5b 5d 3b 0a 65 78 74 65 72 6e 20 53 51  ens[];.extern SQ
2ace0 4c 49 54 45 5f 57 53 44 20 73 74 72 75 63 74 20  LITE_WSD struct 
2acf0 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 73 71  Sqlite3Config sq
2ad00 6c 69 74 65 33 43 6f 6e 66 69 67 3b 0a 65 78 74  lite3Config;.ext
2ad10 65 72 6e 20 46 75 6e 63 44 65 66 48 61 73 68 20  ern FuncDefHash 
2ad20 73 71 6c 69 74 65 33 42 75 69 6c 74 69 6e 46 75  sqlite3BuiltinFu
2ad30 6e 63 74 69 6f 6e 73 3b 0a 23 69 66 6e 64 65 66  nctions;.#ifndef
2ad40 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44   SQLITE_OMIT_WSD
2ad50 0a 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69  .extern int sqli
2ad60 74 65 33 50 65 6e 64 69 6e 67 42 79 74 65 3b 0a  te3PendingByte;.
2ad70 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 76 6f  #endif.#endif.vo
2ad80 69 64 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61  id sqlite3RootPa
2ad90 67 65 4d 6f 76 65 64 28 73 71 6c 69 74 65 33 2a  geMoved(sqlite3*
2ada0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
2adb0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
2adc0 69 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 54 6f  index(Parse*, To
2add0 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  ken*, Token*);.v
2ade0 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72  oid sqlite3Alter
2adf0 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b  Functions(void);
2ae00 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74  .void sqlite3Alt
2ae10 65 72 52 65 6e 61 6d 65 54 61 62 6c 65 28 50 61  erRenameTable(Pa
2ae20 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
2ae30 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
2ae40 69 74 65 33 47 65 74 54 6f 6b 65 6e 28 63 6f 6e  ite3GetToken(con
2ae50 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
2ae60 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f 69 64   *, int *);.void
2ae70 20 73 71 6c 69 74 65 33 4e 65 73 74 65 64 50 61   sqlite3NestedPa
2ae80 72 73 65 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73  rse(Parse*, cons
2ae90 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76  t char*, ...);.v
2aea0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 69 72  oid sqlite3Expir
2aeb0 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65  ePreparedStateme
2aec0 6e 74 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69  nts(sqlite3*);.i
2aed0 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65 53 75  nt sqlite3CodeSu
2aee0 62 73 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20  bselect(Parse*, 
2aef0 45 78 70 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  Expr *, int, int
2af00 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
2af10 65 6c 65 63 74 50 72 65 70 28 50 61 72 73 65 2a  electPrep(Parse*
2af20 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43  , Select*, NameC
2af30 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64 20 73  ontext*);.void s
2af40 71 6c 69 74 65 33 53 65 6c 65 63 74 57 72 6f 6e  qlite3SelectWron
2af50 67 4e 75 6d 54 65 72 6d 73 45 72 72 6f 72 28 50  gNumTermsError(P
2af60 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 53 65  arse *pParse, Se
2af70 6c 65 63 74 20 2a 70 29 3b 0a 69 6e 74 20 73 71  lect *p);.int sq
2af80 6c 69 74 65 33 4d 61 74 63 68 53 70 61 6e 4e 61  lite3MatchSpanNa
2af90 6d 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  me(const char*, 
2afa0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
2afb0 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
2afc0 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  char*);.int sqli
2afd0 74 65 33 52 65 73 6f 6c 76 65 45 78 70 72 4e 61  te3ResolveExprNa
2afe0 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  mes(NameContext*
2aff0 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  , Expr*);.int sq
2b000 6c 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70 72  lite3ResolveExpr
2b010 4c 69 73 74 4e 61 6d 65 73 28 4e 61 6d 65 43 6f  ListNames(NameCo
2b020 6e 74 65 78 74 2a 2c 20 45 78 70 72 4c 69 73 74  ntext*, ExprList
2b030 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2b040 52 65 73 6f 6c 76 65 53 65 6c 65 63 74 4e 61 6d  ResolveSelectNam
2b050 65 73 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63  es(Parse*, Selec
2b060 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  t*, NameContext*
2b070 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
2b080 65 73 6f 6c 76 65 53 65 6c 66 52 65 66 65 72 65  esolveSelfRefere
2b090 6e 63 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  nce(Parse*,Table
2b0a0 2a 2c 69 6e 74 2c 45 78 70 72 2a 2c 45 78 70 72  *,int,Expr*,Expr
2b0b0 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
2b0c0 74 65 33 52 65 73 6f 6c 76 65 4f 72 64 65 72 47  te3ResolveOrderG
2b0d0 72 6f 75 70 42 79 28 50 61 72 73 65 2a 2c 20 53  roupBy(Parse*, S
2b0e0 65 6c 65 63 74 2a 2c 20 45 78 70 72 4c 69 73 74  elect*, ExprList
2b0f0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
2b100 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c  .void sqlite3Col
2b110 75 6d 6e 44 65 66 61 75 6c 74 28 56 64 62 65 20  umnDefault(Vdbe 
2b120 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c  *, Table *, int,
2b130 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
2b140 74 65 33 41 6c 74 65 72 46 69 6e 69 73 68 41 64  te3AlterFinishAd
2b150 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c  dColumn(Parse *,
2b160 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20   Token *);.void 
2b170 73 71 6c 69 74 65 33 41 6c 74 65 72 42 65 67 69  sqlite3AlterBegi
2b180 6e 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65  nAddColumn(Parse
2b190 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 29 3b 0a   *, SrcList *);.
2b1a0 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33  CollSeq *sqlite3
2b1b0 47 65 74 43 6f 6c 6c 53 65 71 28 50 61 72 73 65  GetCollSeq(Parse
2b1c0 2a 2c 20 75 38 2c 20 43 6f 6c 6c 53 65 71 20 2a  *, u8, CollSeq *
2b1d0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
2b1e0 63 68 61 72 20 73 71 6c 69 74 65 33 41 66 66 69  char sqlite3Affi
2b1f0 6e 69 74 79 54 79 70 65 28 63 6f 6e 73 74 20 63  nityType(const c
2b200 68 61 72 2a 2c 20 75 38 2a 29 3b 0a 76 6f 69 64  har*, u8*);.void
2b210 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 28   sqlite3Analyze(
2b220 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Parse*, Token*, 
2b230 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
2b240 69 74 65 33 49 6e 76 6f 6b 65 42 75 73 79 48 61  ite3InvokeBusyHa
2b250 6e 64 6c 65 72 28 42 75 73 79 48 61 6e 64 6c 65  ndler(BusyHandle
2b260 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
2b270 46 69 6e 64 44 62 28 73 71 6c 69 74 65 33 2a 2c  FindDb(sqlite3*,
2b280 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
2b290 6c 69 74 65 33 46 69 6e 64 44 62 4e 61 6d 65 28  lite3FindDbName(
2b2a0 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74  sqlite3 *, const
2b2b0 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71   char *);.int sq
2b2c0 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61  lite3AnalysisLoa
2b2d0 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 69  d(sqlite3*,int i
2b2e0 44 42 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  DB);.void sqlite
2b2f0 33 44 65 6c 65 74 65 49 6e 64 65 78 53 61 6d 70  3DeleteIndexSamp
2b300 6c 65 73 28 73 71 6c 69 74 65 33 2a 2c 49 6e 64  les(sqlite3*,Ind
2b310 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ex*);.void sqlit
2b320 65 33 44 65 66 61 75 6c 74 52 6f 77 45 73 74 28  e3DefaultRowEst(
2b330 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71  Index*);.void sq
2b340 6c 69 74 65 33 52 65 67 69 73 74 65 72 4c 69 6b  lite3RegisterLik
2b350 65 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74  eFunctions(sqlit
2b360 65 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  e3*, int);.int s
2b370 71 6c 69 74 65 33 49 73 4c 69 6b 65 46 75 6e 63  qlite3IsLikeFunc
2b380 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 45 78  tion(sqlite3*,Ex
2b390 70 72 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a 29 3b  pr*,int*,char*);
2b3a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63 68  .void sqlite3Sch
2b3b0 65 6d 61 43 6c 65 61 72 28 76 6f 69 64 20 2a 29  emaClear(void *)
2b3c0 3b 0a 53 63 68 65 6d 61 20 2a 73 71 6c 69 74 65  ;.Schema *sqlite
2b3d0 33 53 63 68 65 6d 61 47 65 74 28 73 71 6c 69 74  3SchemaGet(sqlit
2b3e0 65 33 20 2a 2c 20 42 74 72 65 65 20 2a 29 3b 0a  e3 *, Btree *);.
2b3f0 69 6e 74 20 73 71 6c 69 74 65 33 53 63 68 65 6d  int sqlite3Schem
2b400 61 54 6f 49 6e 64 65 78 28 73 71 6c 69 74 65 33  aToIndex(sqlite3
2b410 20 2a 64 62 2c 20 53 63 68 65 6d 61 20 2a 29 3b   *db, Schema *);
2b420 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65  .KeyInfo *sqlite
2b430 33 4b 65 79 49 6e 66 6f 41 6c 6c 6f 63 28 73 71  3KeyInfoAlloc(sq
2b440 6c 69 74 65 33 2a 2c 69 6e 74 2c 69 6e 74 29 3b  lite3*,int,int);
2b450 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4b 65 79  .void sqlite3Key
2b460 49 6e 66 6f 55 6e 72 65 66 28 4b 65 79 49 6e 66  InfoUnref(KeyInf
2b470 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71  o*);.KeyInfo *sq
2b480 6c 69 74 65 33 4b 65 79 49 6e 66 6f 52 65 66 28  lite3KeyInfoRef(
2b490 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e  KeyInfo*);.KeyIn
2b4a0 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e  fo *sqlite3KeyIn
2b4b0 66 6f 4f 66 49 6e 64 65 78 28 50 61 72 73 65 2a  foOfIndex(Parse*
2b4c0 2c 20 49 6e 64 65 78 2a 29 3b 0a 23 69 66 64 65  , Index*);.#ifde
2b4d0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 69  f SQLITE_DEBUG.i
2b4e0 6e 74 20 73 71 6c 69 74 65 33 4b 65 79 49 6e 66  nt sqlite3KeyInf
2b4f0 6f 49 73 57 72 69 74 65 61 62 6c 65 28 4b 65 79  oIsWriteable(Key
2b500 49 6e 66 6f 2a 29 3b 0a 23 65 6e 64 69 66 0a 69  Info*);.#endif.i
2b510 6e 74 20 73 71 6c 69 74 65 33 43 72 65 61 74 65  nt sqlite3Create
2b520 46 75 6e 63 28 73 71 6c 69 74 65 33 20 2a 2c 20  Func(sqlite3 *, 
2b530 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e  const char *, in
2b540 74 2c 20 69 6e 74 2c 20 76 6f 69 64 20 2a 2c 0a  t, int, void *,.
2b550 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74    void (*)(sqlit
2b560 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
2b570 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
2b580 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71  ),.  void (*)(sq
2b590 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
2b5a0 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
2b5b0 20 2a 2a 29 2c 20 76 6f 69 64 20 28 2a 29 28 73   **), void (*)(s
2b5c0 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29  qlite3_context*)
2b5d0 2c 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63 74  ,.  FuncDestruct
2b5e0 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 0a  or *pDestructor.
2b5f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f  );.void sqlite3O
2b600 6f 6d 46 61 75 6c 74 28 73 71 6c 69 74 65 33 2a  omFault(sqlite3*
2b610 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f  );.void sqlite3O
2b620 6f 6d 43 6c 65 61 72 28 73 71 6c 69 74 65 33 2a  omClear(sqlite3*
2b630 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 70  );.int sqlite3Ap
2b640 69 45 78 69 74 28 73 71 6c 69 74 65 33 20 2a 64  iExit(sqlite3 *d
2b650 62 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  b, int);.int sql
2b660 69 74 65 33 4f 70 65 6e 54 65 6d 70 44 61 74 61  ite3OpenTempData
2b670 62 61 73 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a  base(Parse *);..
2b680 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41  void sqlite3StrA
2b690 63 63 75 6d 49 6e 69 74 28 53 74 72 41 63 63 75  ccumInit(StrAccu
2b6a0 6d 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 68  m*, sqlite3*, ch
2b6b0 61 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  ar*, int, int);.
2b6c0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41  void sqlite3StrA
2b6d0 63 63 75 6d 41 70 70 65 6e 64 28 53 74 72 41 63  ccumAppend(StrAc
2b6e0 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  cum*,const char*
2b6f0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
2b700 74 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e  te3StrAccumAppen
2b710 64 41 6c 6c 28 53 74 72 41 63 63 75 6d 2a 2c 63  dAll(StrAccum*,c
2b720 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
2b730 64 20 73 71 6c 69 74 65 33 41 70 70 65 6e 64 43  d sqlite3AppendC
2b740 68 61 72 28 53 74 72 41 63 63 75 6d 2a 2c 69 6e  har(StrAccum*,in
2b750 74 2c 63 68 61 72 29 3b 0a 63 68 61 72 20 2a 73  t,char);.char *s
2b760 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46 69  qlite3StrAccumFi
2b770 6e 69 73 68 28 53 74 72 41 63 63 75 6d 2a 29 3b  nish(StrAccum*);
2b780 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72  .void sqlite3Str
2b790 41 63 63 75 6d 52 65 73 65 74 28 53 74 72 41 63  AccumReset(StrAc
2b7a0 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  cum*);.void sqli
2b7b0 74 65 33 53 65 6c 65 63 74 44 65 73 74 49 6e 69  te3SelectDestIni
2b7c0 74 28 53 65 6c 65 63 74 44 65 73 74 2a 2c 69 6e  t(SelectDest*,in
2b7d0 74 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71  t,int);.Expr *sq
2b7e0 6c 69 74 65 33 43 72 65 61 74 65 43 6f 6c 75 6d  lite3CreateColum
2b7f0 6e 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c  nExpr(sqlite3 *,
2b800 20 53 72 63 4c 69 73 74 20 2a 2c 20 69 6e 74 2c   SrcList *, int,
2b810 20 69 6e 74 29 3b 0a 0a 76 6f 69 64 20 73 71 6c   int);..void sql
2b820 69 74 65 33 42 61 63 6b 75 70 52 65 73 74 61 72  ite3BackupRestar
2b830 74 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  t(sqlite3_backup
2b840 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
2b850 33 42 61 63 6b 75 70 55 70 64 61 74 65 28 73 71  3BackupUpdate(sq
2b860 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 2c 20  lite3_backup *, 
2b870 50 67 6e 6f 2c 20 63 6f 6e 73 74 20 75 38 20 2a  Pgno, const u8 *
2b880 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  );..#ifndef SQLI
2b890 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52 59  TE_OMIT_SUBQUERY
2b8a0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2b8b0 43 68 65 63 6b 49 4e 28 50 61 72 73 65 2a 2c 20  CheckIN(Parse*, 
2b8c0 45 78 70 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  Expr*);.#else.# 
2b8d0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78  define sqlite3Ex
2b8e0 70 72 43 68 65 63 6b 49 4e 28 78 2c 79 29 20 53  prCheckIN(x,y) S
2b8f0 51 4c 49 54 45 5f 4f 4b 0a 23 65 6e 64 69 66 0a  QLITE_OK.#endif.
2b900 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
2b910 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53  NABLE_STAT3_OR_S
2b920 54 41 54 34 0a 76 6f 69 64 20 73 71 6c 69 74 65  TAT4.void sqlite
2b930 33 41 6e 61 6c 79 7a 65 46 75 6e 63 74 69 6f 6e  3AnalyzeFunction
2b940 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c  s(void);.int sql
2b950 69 74 65 33 53 74 61 74 34 50 72 6f 62 65 53 65  ite3Stat4ProbeSe
2b960 74 56 61 6c 75 65 28 0a 20 20 20 20 50 61 72 73  tValue(.    Pars
2b970 65 2a 2c 49 6e 64 65 78 2a 2c 55 6e 70 61 63 6b  e*,Index*,Unpack
2b980 65 64 52 65 63 6f 72 64 2a 2a 2c 45 78 70 72 2a  edRecord**,Expr*
2b990 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a  ,int,int,int*);.
2b9a0 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34  int sqlite3Stat4
2b9b0 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 50 61  ValueFromExpr(Pa
2b9c0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c  rse*, Expr*, u8,
2b9d0 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a   sqlite3_value**
2b9e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
2b9f0 74 61 74 34 50 72 6f 62 65 46 72 65 65 28 55 6e  tat4ProbeFree(Un
2ba00 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 29 3b 0a  packedRecord*);.
2ba10 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34  int sqlite3Stat4
2ba20 43 6f 6c 75 6d 6e 28 73 71 6c 69 74 65 33 2a 2c  Column(sqlite3*,
2ba30 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e   const void*, in
2ba40 74 2c 20 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f  t, int, sqlite3_
2ba50 76 61 6c 75 65 2a 2a 29 3b 0a 63 68 61 72 20 73  value**);.char s
2ba60 71 6c 69 74 65 33 49 6e 64 65 78 43 6f 6c 75 6d  qlite3IndexColum
2ba70 6e 41 66 66 69 6e 69 74 79 28 73 71 6c 69 74 65  nAffinity(sqlite
2ba80 33 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 29  3*, Index*, int)
2ba90 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
2baa0 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f  The interface to
2bab0 20 74 68 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72   the LEMON-gener
2bac0 61 74 65 64 20 70 61 72 73 65 72 0a 2a 2f 0a 23  ated parser.*/.#
2bad0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 41 4d  ifndef SQLITE_AM
2bae0 41 4c 47 41 4d 41 54 49 4f 4e 0a 20 20 76 6f 69  ALGAMATION.  voi
2baf0 64 20 2a 73 71 6c 69 74 65 33 50 61 72 73 65 72  d *sqlite3Parser
2bb00 41 6c 6c 6f 63 28 76 6f 69 64 2a 28 2a 29 28 75  Alloc(void*(*)(u
2bb10 36 34 29 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  64));.  void sql
2bb20 69 74 65 33 50 61 72 73 65 72 46 72 65 65 28 76  ite3ParserFree(v
2bb30 6f 69 64 2a 2c 20 76 6f 69 64 28 2a 29 28 76 6f  oid*, void(*)(vo
2bb40 69 64 2a 29 29 3b 0a 23 65 6e 64 69 66 0a 76 6f  id*));.#endif.vo
2bb50 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  id sqlite3Parser
2bb60 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b  (void*, int, Tok
2bb70 65 6e 2c 20 50 61 72 73 65 2a 29 3b 0a 23 69 66  en, Parse*);.#if
2bb80 64 65 66 20 59 59 54 52 41 43 4b 4d 41 58 53 54  def YYTRACKMAXST
2bb90 41 43 4b 44 45 50 54 48 0a 20 20 69 6e 74 20 73  ACKDEPTH.  int s
2bba0 71 6c 69 74 65 33 50 61 72 73 65 72 53 74 61 63  qlite3ParserStac
2bbb0 6b 50 65 61 6b 28 76 6f 69 64 2a 29 3b 0a 23 65  kPeak(void*);.#e
2bbc0 6e 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74  ndif..void sqlit
2bbd0 65 33 41 75 74 6f 4c 6f 61 64 45 78 74 65 6e 73  e3AutoLoadExtens
2bbe0 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ions(sqlite3*);.
2bbf0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2bc00 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49  MIT_LOAD_EXTENSI
2bc10 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ON.  void sqlite
2bc20 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73  3CloseExtensions
2bc30 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6c 73  (sqlite3*);.#els
2bc40 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
2bc50 65 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e  e3CloseExtension
2bc60 73 28 58 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  s(X).#endif..#if
2bc70 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2bc80 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20  _SHARED_CACHE.  
2bc90 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c  void sqlite3Tabl
2bca0 65 4c 6f 63 6b 28 50 61 72 73 65 20 2a 2c 20 69  eLock(Parse *, i
2bcb0 6e 74 2c 20 69 6e 74 2c 20 75 38 2c 20 63 6f 6e  nt, int, u8, con
2bcc0 73 74 20 63 68 61 72 20 2a 29 3b 0a 23 65 6c 73  st char *);.#els
2bcd0 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
2bce0 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 76 2c 77  te3TableLock(v,w
2bcf0 2c 78 2c 79 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a  ,x,y,z).#endif..
2bd00 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
2bd10 53 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  ST.  int sqlite3
2bd20 55 74 66 38 54 6f 38 28 75 6e 73 69 67 6e 65 64  Utf8To8(unsigned
2bd30 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a   char*);.#endif.
2bd40 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
2bd50 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2bd60 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
2bd70 65 33 56 74 61 62 43 6c 65 61 72 28 59 29 0a 23  e3VtabClear(Y).#
2bd80 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2bd90 56 74 61 62 53 79 6e 63 28 58 2c 59 29 20 53 51  VtabSync(X,Y) SQ
2bda0 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e  LITE_OK.#  defin
2bdb0 65 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c  e sqlite3VtabRol
2bdc0 6c 62 61 63 6b 28 58 29 0a 23 20 20 64 65 66 69  lback(X).#  defi
2bdd0 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f  ne sqlite3VtabCo
2bde0 6d 6d 69 74 28 58 29 0a 23 20 20 64 65 66 69 6e  mmit(X).#  defin
2bdf0 65 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53  e sqlite3VtabInS
2be00 79 6e 63 28 64 62 29 20 30 0a 23 20 20 64 65 66  ync(db) 0.#  def
2be10 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 4c  ine sqlite3VtabL
2be20 6f 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65  ock(X).#  define
2be30 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
2be40 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  ck(X).#  define 
2be50 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
2be60 6b 4c 69 73 74 28 58 29 0a 23 20 20 64 65 66 69  kList(X).#  defi
2be70 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 53 61  ne sqlite3VtabSa
2be80 76 65 70 6f 69 6e 74 28 58 2c 20 59 2c 20 5a 29  vepoint(X, Y, Z)
2be90 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65   SQLITE_OK.#  de
2bea0 66 69 6e 65 20 73 71 6c 69 74 65 33 47 65 74 56  fine sqlite3GetV
2beb0 54 61 62 6c 65 28 58 2c 59 29 20 20 28 28 56 54  Table(X,Y)  ((VT
2bec0 61 62 6c 65 2a 29 30 29 0a 23 65 6c 73 65 0a 20  able*)0).#else. 
2bed0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
2bee0 61 62 43 6c 65 61 72 28 73 71 6c 69 74 65 33 20  abClear(sqlite3 
2bef0 2a 64 62 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20  *db, Table*);.  
2bf00 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
2bf10 62 44 69 73 63 6f 6e 6e 65 63 74 28 73 71 6c 69  bDisconnect(sqli
2bf20 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 20 2a  te3 *db, Table *
2bf30 70 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74  p);.   int sqlit
2bf40 65 33 56 74 61 62 53 79 6e 63 28 73 71 6c 69 74  e3VtabSync(sqlit
2bf50 65 33 20 2a 64 62 2c 20 56 64 62 65 2a 29 3b 0a  e3 *db, Vdbe*);.
2bf60 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74     int sqlite3Vt
2bf70 61 62 52 6f 6c 6c 62 61 63 6b 28 73 71 6c 69 74  abRollback(sqlit
2bf80 65 33 20 2a 64 62 29 3b 0a 20 20 20 69 6e 74 20  e3 *db);.   int 
2bf90 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69  sqlite3VtabCommi
2bfa0 74 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a  t(sqlite3 *db);.
2bfb0 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56     void sqlite3V
2bfc0 74 61 62 4c 6f 63 6b 28 56 54 61 62 6c 65 20 2a  tabLock(VTable *
2bfd0 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
2bfe0 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 56 54 61  e3VtabUnlock(VTa
2bff0 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20  ble *);.   void 
2c000 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
2c010 6b 4c 69 73 74 28 73 71 6c 69 74 65 33 2a 29 3b  kList(sqlite3*);
2c020 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56  .   int sqlite3V
2c030 74 61 62 53 61 76 65 70 6f 69 6e 74 28 73 71 6c  tabSavepoint(sql
2c040 69 74 65 33 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  ite3 *, int, int
2c050 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
2c060 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d  e3VtabImportErrm
2c070 73 67 28 56 64 62 65 2a 2c 20 73 71 6c 69 74 65  sg(Vdbe*, sqlite
2c080 33 5f 76 74 61 62 2a 29 3b 0a 20 20 20 56 54 61  3_vtab*);.   VTa
2c090 62 6c 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56  ble *sqlite3GetV
2c0a0 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20  Table(sqlite3*, 
2c0b0 54 61 62 6c 65 2a 29 3b 0a 20 20 20 4d 6f 64 75  Table*);.   Modu
2c0c0 6c 65 20 2a 73 71 6c 69 74 65 33 56 74 61 62 43  le *sqlite3VtabC
2c0d0 72 65 61 74 65 4d 6f 64 75 6c 65 28 0a 20 20 20  reateModule(.   
2c0e0 20 20 73 71 6c 69 74 65 33 2a 2c 0a 20 20 20 20    sqlite3*,.    
2c0f0 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20   const char*,.  
2c100 20 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33     const sqlite3
2c110 5f 6d 6f 64 75 6c 65 2a 2c 0a 20 20 20 20 20 76  _module*,.     v
2c120 6f 69 64 2a 2c 0a 20 20 20 20 20 76 6f 69 64 28  oid*,.     void(
2c130 2a 29 28 76 6f 69 64 2a 29 0a 20 20 20 29 3b 0a  *)(void*).   );.
2c140 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
2c150 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20  3VtabInSync(db) 
2c160 28 28 64 62 29 2d 3e 6e 56 54 72 61 6e 73 3e 30  ((db)->nVTrans>0
2c170 20 26 26 20 28 64 62 29 2d 3e 61 56 54 72 61 6e   && (db)->aVTran
2c180 73 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 69 6e 74  s==0).#endif.int
2c190 20 73 71 6c 69 74 65 33 56 74 61 62 45 70 6f 6e   sqlite3VtabEpon
2c1a0 79 6d 6f 75 73 54 61 62 6c 65 49 6e 69 74 28 50  ymousTableInit(P
2c1b0 61 72 73 65 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a  arse*,Module*);.
2c1c0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
2c1d0 45 70 6f 6e 79 6d 6f 75 73 54 61 62 6c 65 43 6c  EponymousTableCl
2c1e0 65 61 72 28 73 71 6c 69 74 65 33 2a 2c 4d 6f 64  ear(sqlite3*,Mod
2c1f0 75 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ule*);.void sqli
2c200 74 65 33 56 74 61 62 4d 61 6b 65 57 72 69 74 61  te3VtabMakeWrita
2c210 62 6c 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  ble(Parse*,Table
2c220 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2c230 56 74 61 62 42 65 67 69 6e 50 61 72 73 65 28 50  VtabBeginParse(P
2c240 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  arse*, Token*, T
2c250 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69  oken*, Token*, i
2c260 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2c270 33 56 74 61 62 46 69 6e 69 73 68 50 61 72 73 65  3VtabFinishParse
2c280 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29  (Parse*, Token*)
2c290 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  ;.void sqlite3Vt
2c2a0 61 62 41 72 67 49 6e 69 74 28 50 61 72 73 65 2a  abArgInit(Parse*
2c2b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
2c2c0 74 61 62 41 72 67 45 78 74 65 6e 64 28 50 61 72  tabArgExtend(Par
2c2d0 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  se*, Token*);.in
2c2e0 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c  t sqlite3VtabCal
2c2f0 6c 43 72 65 61 74 65 28 73 71 6c 69 74 65 33 2a  lCreate(sqlite3*
2c300 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  , int, const cha
2c310 72 20 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 69  r *, char **);.i
2c320 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61  nt sqlite3VtabCa
2c330 6c 6c 43 6f 6e 6e 65 63 74 28 50 61 72 73 65 2a  llConnect(Parse*
2c340 2c 20 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73  , Table*);.int s
2c350 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65  qlite3VtabCallDe
2c360 73 74 72 6f 79 28 73 71 6c 69 74 65 33 2a 2c 20  stroy(sqlite3*, 
2c370 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  int, const char 
2c380 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
2c390 74 61 62 42 65 67 69 6e 28 73 71 6c 69 74 65 33  tabBegin(sqlite3
2c3a0 20 2a 2c 20 56 54 61 62 6c 65 20 2a 29 3b 0a 46   *, VTable *);.F
2c3b0 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33 56  uncDef *sqlite3V
2c3c0 74 61 62 4f 76 65 72 6c 6f 61 64 46 75 6e 63 74  tabOverloadFunct
2c3d0 69 6f 6e 28 73 71 6c 69 74 65 33 20 2a 2c 46 75  ion(sqlite3 *,Fu
2c3e0 6e 63 44 65 66 2a 2c 20 69 6e 74 20 6e 41 72 67  ncDef*, int nArg
2c3f0 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
2c400 71 6c 69 74 65 33 49 6e 76 61 6c 69 64 46 75 6e  qlite3InvalidFun
2c410 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 5f 63 6f  ction(sqlite3_co
2c420 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
2c430 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 73 71 6c  e3_value**);.sql
2c440 69 74 65 33 5f 69 6e 74 36 34 20 73 71 6c 69 74  ite3_int64 sqlit
2c450 65 33 53 74 6d 74 43 75 72 72 65 6e 74 54 69 6d  e3StmtCurrentTim
2c460 65 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  e(sqlite3_contex
2c470 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
2c480 56 64 62 65 50 61 72 61 6d 65 74 65 72 49 6e 64  VdbeParameterInd
2c490 65 78 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20  ex(Vdbe*, const 
2c4a0 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  char*, int);.int
2c4b0 20 73 71 6c 69 74 65 33 54 72 61 6e 73 66 65 72   sqlite3Transfer
2c4c0 42 69 6e 64 69 6e 67 73 28 73 71 6c 69 74 65 33  Bindings(sqlite3
2c4d0 5f 73 74 6d 74 20 2a 2c 20 73 71 6c 69 74 65 33  _stmt *, sqlite3
2c4e0 5f 73 74 6d 74 20 2a 29 3b 0a 76 6f 69 64 20 73  _stmt *);.void s
2c4f0 71 6c 69 74 65 33 50 61 72 73 65 72 52 65 73 65  qlite3ParserRese
2c500 74 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73  t(Parse*);.int s
2c510 71 6c 69 74 65 33 52 65 70 72 65 70 61 72 65 28  qlite3Reprepare(
2c520 56 64 62 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Vdbe*);.void sql
2c530 69 74 65 33 45 78 70 72 4c 69 73 74 43 68 65 63  ite3ExprListChec
2c540 6b 4c 65 6e 67 74 68 28 50 61 72 73 65 2a 2c 20  kLength(Parse*, 
2c550 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74  ExprList*, const
2c560 20 63 68 61 72 2a 29 3b 0a 43 6f 6c 6c 53 65 71   char*);.CollSeq
2c570 20 2a 73 71 6c 69 74 65 33 42 69 6e 61 72 79 43   *sqlite3BinaryC
2c580 6f 6d 70 61 72 65 43 6f 6c 6c 53 65 71 28 50 61  ompareCollSeq(Pa
2c590 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 45  rse *, Expr *, E
2c5a0 78 70 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  xpr *);.int sqli
2c5b0 74 65 33 54 65 6d 70 49 6e 4d 65 6d 6f 72 79 28  te3TempInMemory(
2c5c0 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 2a 29 3b  const sqlite3*);
2c5d0 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
2c5e0 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e  ite3JournalModen
2c5f0 61 6d 65 28 69 6e 74 29 3b 0a 23 69 66 6e 64 65  ame(int);.#ifnde
2c600 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41  f SQLITE_OMIT_WA
2c610 4c 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 43  L.  int sqlite3C
2c620 68 65 63 6b 70 6f 69 6e 74 28 73 71 6c 69 74 65  heckpoint(sqlite
2c630 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  3*, int, int, in
2c640 74 2a 2c 20 69 6e 74 2a 29 3b 0a 20 20 69 6e 74  t*, int*);.  int
2c650 20 73 71 6c 69 74 65 33 57 61 6c 44 65 66 61 75   sqlite3WalDefau
2c660 6c 74 48 6f 6f 6b 28 76 6f 69 64 2a 2c 73 71 6c  ltHook(void*,sql
2c670 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
2c680 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 23  *,int);.#endif.#
2c690 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2c6a0 49 54 5f 43 54 45 0a 20 20 57 69 74 68 20 2a 73  IT_CTE.  With *s
2c6b0 71 6c 69 74 65 33 57 69 74 68 41 64 64 28 50 61  qlite3WithAdd(Pa
2c6c0 72 73 65 2a 2c 57 69 74 68 2a 2c 54 6f 6b 65 6e  rse*,With*,Token
2c6d0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65  *,ExprList*,Sele
2c6e0 63 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  ct*);.  void sql
2c6f0 69 74 65 33 57 69 74 68 44 65 6c 65 74 65 28 73  ite3WithDelete(s
2c700 71 6c 69 74 65 33 2a 2c 57 69 74 68 2a 29 3b 0a  qlite3*,With*);.
2c710 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69    void sqlite3Wi
2c720 74 68 50 75 73 68 28 50 61 72 73 65 2a 2c 20 57  thPush(Parse*, W
2c730 69 74 68 2a 2c 20 75 38 29 3b 0a 23 65 6c 73 65  ith*, u8);.#else
2c740 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  .#define sqlite3
2c750 57 69 74 68 50 75 73 68 28 78 2c 79 2c 7a 29 0a  WithPush(x,y,z).
2c760 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57  #define sqlite3W
2c770 69 74 68 44 65 6c 65 74 65 28 78 2c 79 29 0a 23  ithDelete(x,y).#
2c780 65 6e 64 69 66 0a 0a 2f 2a 20 44 65 63 6c 61 72  endif../* Declar
2c790 61 74 69 6f 6e 73 20 66 6f 72 20 66 75 6e 63 74  ations for funct
2c7a0 69 6f 6e 73 20 69 6e 20 66 6b 65 79 2e 63 2e 20  ions in fkey.c. 
2c7b0 41 6c 6c 20 6f 66 20 74 68 65 73 65 20 61 72 65  All of these are
2c7c0 20 72 65 70 6c 61 63 65 64 20 62 79 0a 2a 2a 20   replaced by.** 
2c7d0 6e 6f 2d 6f 70 20 6d 61 63 72 6f 73 20 69 66 20  no-op macros if 
2c7e0 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
2c7f0 20 69 73 20 64 65 66 69 6e 65 64 2e 20 49 6e 20   is defined. In 
2c800 74 68 69 73 20 63 61 73 65 20 6e 6f 20 66 6f 72  this case no for
2c810 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 66 75 6e 63  eign.** key func
2c820 74 69 6f 6e 61 6c 69 74 79 20 69 73 20 61 76 61  tionality is ava
2c830 69 6c 61 62 6c 65 2e 20 49 66 20 4f 4d 49 54 5f  ilable. If OMIT_
2c840 54 52 49 47 47 45 52 20 69 73 20 64 65 66 69 6e  TRIGGER is defin
2c850 65 64 20 62 75 74 0a 2a 2a 20 4f 4d 49 54 5f 46  ed but.** OMIT_F
2c860 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 6e 6f  OREIGN_KEY is no
2c870 74 2c 20 6f 6e 6c 79 20 73 6f 6d 65 20 6f 66 20  t, only some of 
2c880 74 68 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72  the functions ar
2c890 65 20 6e 6f 2d 6f 70 65 64 2e 20 49 6e 0a 2a 2a  e no-oped. In.**
2c8a0 20 74 68 69 73 20 63 61 73 65 20 66 6f 72 65 69   this case forei
2c8b0 67 6e 20 6b 65 79 73 20 61 72 65 20 70 61 72 73  gn keys are pars
2c8c0 65 64 2c 20 62 75 74 20 6e 6f 20 6f 74 68 65 72  ed, but no other
2c8d0 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69   functionality i
2c8e0 73 0a 2a 2a 20 70 72 6f 76 69 64 65 64 20 28 65  s.** provided (e
2c8f0 6e 66 6f 72 63 65 6d 65 6e 74 20 6f 66 20 46 4b  nforcement of FK
2c900 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 72 65 71   constraints req
2c910 75 69 72 65 73 20 74 68 65 20 74 72 69 67 67 65  uires the trigge
2c920 72 73 20 73 75 62 2d 73 79 73 74 65 6d 29 2e 0a  rs sub-system)..
2c930 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
2c940 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45  SQLITE_OMIT_FORE
2c950 49 47 4e 5f 4b 45 59 29 20 26 26 20 21 64 65 66  IGN_KEY) && !def
2c960 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
2c970 5f 54 52 49 47 47 45 52 29 0a 20 20 76 6f 69 64  _TRIGGER).  void
2c980 20 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28   sqlite3FkCheck(
2c990 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
2c9a0 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20  int, int, int*, 
2c9b0 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  int);.  void sql
2c9c0 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28  ite3FkDropTable(
2c9d0 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 20  Parse*, SrcList 
2c9e0 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 76 6f  *, Table*);.  vo
2c9f0 69 64 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69  id sqlite3FkActi
2ca00 6f 6e 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ons(Parse*, Tabl
2ca10 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  e*, ExprList*, i
2ca20 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a  nt, int*, int);.
2ca30 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 52    int sqlite3FkR
2ca40 65 71 75 69 72 65 64 28 50 61 72 73 65 2a 2c 20  equired(Parse*, 
2ca50 54 61 62 6c 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e  Table*, int*, in
2ca60 74 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65  t);.  u32 sqlite
2ca70 33 46 6b 4f 6c 64 6d 61 73 6b 28 50 61 72 73 65  3FkOldmask(Parse
2ca80 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 46 4b  *, Table*);.  FK
2ca90 65 79 20 2a 73 71 6c 69 74 65 33 46 6b 52 65 66  ey *sqlite3FkRef
2caa0 65 72 65 6e 63 65 73 28 54 61 62 6c 65 20 2a 29  erences(Table *)
2cab0 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
2cac0 65 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f  e sqlite3FkActio
2cad0 6e 73 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a  ns(a,b,c,d,e,f).
2cae0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
2caf0 33 46 6b 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64  3FkCheck(a,b,c,d
2cb00 2c 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20  ,e,f).  #define 
2cb10 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62  sqlite3FkDropTab
2cb20 6c 65 28 61 2c 62 2c 63 29 0a 20 20 23 64 65 66  le(a,b,c).  #def
2cb30 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64  ine sqlite3FkOld
2cb40 6d 61 73 6b 28 61 2c 62 29 20 20 20 20 20 20 20  mask(a,b)       
2cb50 20 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71    0.  #define sq
2cb60 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65 64 28  lite3FkRequired(
2cb70 61 2c 62 2c 63 2c 64 29 20 20 20 20 30 0a 20 20  a,b,c,d)    0.  
2cb80 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
2cb90 6b 52 65 66 65 72 65 6e 63 65 73 28 61 29 20 20  kReferences(a)  
2cba0 20 20 20 20 20 20 30 0a 23 65 6e 64 69 66 0a 23        0.#endif.#
2cbb0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2cbc0 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20  IT_FOREIGN_KEY. 
2cbd0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44   void sqlite3FkD
2cbe0 65 6c 65 74 65 28 73 71 6c 69 74 65 33 20 2a 2c  elete(sqlite3 *,
2cbf0 20 54 61 62 6c 65 2a 29 3b 0a 20 20 69 6e 74 20   Table*);.  int 
2cc00 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49  sqlite3FkLocateI
2cc10 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 61 62 6c  ndex(Parse*,Tabl
2cc20 65 2a 2c 46 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a  e*,FKey*,Index**
2cc30 2c 69 6e 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20  ,int**);.#else. 
2cc40 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2cc50 46 6b 44 65 6c 65 74 65 28 61 2c 62 29 0a 20 20  FkDelete(a,b).  
2cc60 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
2cc70 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 61 2c 62  kLocateIndex(a,b
2cc80 2c 63 2c 64 2c 65 29 0a 23 65 6e 64 69 66 0a 0a  ,c,d,e).#endif..
2cc90 0a 2f 2a 0a 2a 2a 20 41 76 61 69 6c 61 62 6c 65  ./*.** Available
2cca0 20 66 61 75 6c 74 20 69 6e 6a 65 63 74 6f 72 73   fault injectors
2ccb0 2e 20 20 53 68 6f 75 6c 64 20 62 65 20 6e 75 6d  .  Should be num
2ccc0 62 65 72 65 64 20 62 65 67 69 6e 6e 69 6e 67 20  bered beginning 
2ccd0 77 69 74 68 20 30 2e 0a 2a 2f 0a 23 64 65 66 69  with 0..*/.#defi
2cce0 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49  ne SQLITE_FAULTI
2ccf0 4e 4a 45 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20  NJECTOR_MALLOC  
2cd00 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53 51 4c     0.#define SQL
2cd10 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f  ITE_FAULTINJECTO
2cd20 52 5f 43 4f 55 4e 54 20 20 20 20 20 20 31 0a 0a  R_COUNT      1..
2cd30 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66  /*.** The interf
2cd40 61 63 65 20 74 6f 20 74 68 65 20 63 6f 64 65 20  ace to the code 
2cd50 69 6e 20 66 61 75 6c 74 2e 63 20 75 73 65 64 20  in fault.c used 
2cd60 66 6f 72 20 69 64 65 6e 74 69 66 79 69 6e 67 20  for identifying 
2cd70 22 62 65 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c  "benign".** mall
2cd80 6f 63 20 66 61 69 6c 75 72 65 73 2e 20 54 68 69  oc failures. Thi
2cd90 73 20 69 73 20 6f 6e 6c 79 20 70 72 65 73 65 6e  s is only presen
2cda0 74 20 69 66 20 53 51 4c 49 54 45 5f 55 4e 54 45  t if SQLITE_UNTE
2cdb0 53 54 41 42 4c 45 0a 2a 2a 20 69 73 20 6e 6f 74  STABLE.** is not
2cdc0 20 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66   defined..*/.#if
2cdd0 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45  ndef SQLITE_UNTE
2cde0 53 54 41 42 4c 45 0a 20 20 76 6f 69 64 20 73 71  STABLE.  void sq
2cdf0 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e  lite3BeginBenign
2ce00 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 20 20  Malloc(void);.  
2ce10 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64 42  void sqlite3EndB
2ce20 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64  enignMalloc(void
2ce30 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
2ce40 6e 65 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42  ne sqlite3BeginB
2ce50 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20  enignMalloc().  
2ce60 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45  #define sqlite3E
2ce70 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29  ndBenignMalloc()
2ce80 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
2ce90 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e 20 76 61  llowed return va
2cea0 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c 69 74 65  lues from sqlite
2ceb0 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 29 0a 2a  3FindInIndex().*
2cec0 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
2ced0 45 58 5f 52 4f 57 49 44 20 20 20 20 20 20 20 20  EX_ROWID        
2cee0 31 20 20 20 2f 2a 20 53 65 61 72 63 68 20 74 68  1   /* Search th
2cef0 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74  e rowid of the t
2cf00 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  able */.#define 
2cf10 49 4e 5f 49 4e 44 45 58 5f 45 50 48 20 20 20 20  IN_INDEX_EPH    
2cf20 20 20 20 20 20 20 32 20 20 20 2f 2a 20 53 65 61        2   /* Sea
2cf30 72 63 68 20 61 6e 20 65 70 68 65 6d 65 72 61 6c  rch an ephemeral
2cf40 20 62 2d 74 72 65 65 20 2a 2f 0a 23 64 65 66 69   b-tree */.#defi
2cf50 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45  ne IN_INDEX_INDE
2cf60 58 5f 41 53 43 20 20 20 20 33 20 20 20 2f 2a 20  X_ASC    3   /* 
2cf70 45 78 69 73 74 69 6e 67 20 69 6e 64 65 78 20 41  Existing index A
2cf80 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66  SCENDING */.#def
2cf90 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44  ine IN_INDEX_IND
2cfa0 45 58 5f 44 45 53 43 20 20 20 34 20 20 20 2f 2a  EX_DESC   4   /*
2cfb0 20 45 78 69 73 74 69 6e 67 20 69 6e 64 65 78 20   Existing index 
2cfc0 44 45 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64  DESCENDING */.#d
2cfd0 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e  efine IN_INDEX_N
2cfe0 4f 4f 50 20 20 20 20 20 20 20 20 20 35 20 20 20  OOP         5   
2cff0 2f 2a 20 4e 6f 20 74 61 62 6c 65 20 61 76 61 69  /* No table avai
2d000 6c 61 62 6c 65 2e 20 55 73 65 20 63 6f 6d 70 61  lable. Use compa
2d010 72 69 73 6f 6e 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20  risons */./*.** 
2d020 41 6c 6c 6f 77 65 64 20 66 6c 61 67 73 20 66 6f  Allowed flags fo
2d030 72 20 74 68 65 20 33 72 64 20 70 61 72 61 6d 65  r the 3rd parame
2d040 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33 46 69  ter to sqlite3Fi
2d050 6e 64 49 6e 49 6e 64 65 78 28 29 2e 0a 2a 2f 0a  ndInIndex()..*/.
2d060 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
2d070 5f 4e 4f 4f 50 5f 4f 4b 20 20 20 20 20 30 78 30  _NOOP_OK     0x0
2d080 30 30 31 20 20 2f 2a 20 4f 4b 20 74 6f 20 72 65  001  /* OK to re
2d090 74 75 72 6e 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f  turn IN_INDEX_NO
2d0a0 4f 50 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  OP */.#define IN
2d0b0 5f 49 4e 44 45 58 5f 4d 45 4d 42 45 52 53 48 49  _INDEX_MEMBERSHI
2d0c0 50 20 20 30 78 30 30 30 32 20 20 2f 2a 20 49 4e  P  0x0002  /* IN
2d0d0 20 6f 70 65 72 61 74 6f 72 20 75 73 65 64 20 66   operator used f
2d0e0 6f 72 20 6d 65 6d 62 65 72 73 68 69 70 20 74 65  or membership te
2d0f0 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  st */.#define IN
2d100 5f 49 4e 44 45 58 5f 4c 4f 4f 50 20 20 20 20 20  _INDEX_LOOP     
2d110 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20 49 4e     0x0004  /* IN
2d120 20 6f 70 65 72 61 74 6f 72 20 75 73 65 64 20 61   operator used a
2d130 73 20 61 20 6c 6f 6f 70 20 2a 2f 0a 69 6e 74 20  s a loop */.int 
2d140 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64  sqlite3FindInInd
2d150 65 78 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72  ex(Parse *, Expr
2d160 20 2a 2c 20 75 33 32 2c 20 69 6e 74 2a 2c 20 69   *, u32, int*, i
2d170 6e 74 2a 29 3b 0a 0a 69 6e 74 20 73 71 6c 69 74  nt*);..int sqlit
2d180 65 33 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71  e3JournalOpen(sq
2d190 6c 69 74 65 33 5f 76 66 73 20 2a 2c 20 63 6f 6e  lite3_vfs *, con
2d1a0 73 74 20 63 68 61 72 20 2a 2c 20 73 71 6c 69 74  st char *, sqlit
2d1b0 65 33 5f 66 69 6c 65 20 2a 2c 20 69 6e 74 2c 20  e3_file *, int, 
2d1c0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2d1d0 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 73 71 6c  3JournalSize(sql
2d1e0 69 74 65 33 5f 76 66 73 20 2a 29 3b 0a 23 69 66  ite3_vfs *);.#if
2d1f0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
2d200 45 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 0a 20  E_ATOMIC_WRITE. 
2d210 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72   int sqlite3Jour
2d220 6e 61 6c 43 72 65 61 74 65 28 73 71 6c 69 74 65  nalCreate(sqlite
2d230 33 5f 66 69 6c 65 20 2a 29 3b 0a 23 65 6e 64 69  3_file *);.#endi
2d240 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  f..int sqlite3Jo
2d250 75 72 6e 61 6c 49 73 49 6e 4d 65 6d 6f 72 79 28  urnalIsInMemory(
2d260 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70 29  sqlite3_file *p)
2d270 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65  ;.void sqlite3Me
2d280 6d 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c  mJournalOpen(sql
2d290 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 0a 76  ite3_file *);..v
2d2a0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 53  oid sqlite3ExprS
2d2b0 65 74 48 65 69 67 68 74 41 6e 64 46 6c 61 67 73  etHeightAndFlags
2d2c0 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
2d2d0 45 78 70 72 20 2a 70 29 3b 0a 23 69 66 20 53 51  Expr *p);.#if SQ
2d2e0 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45  LITE_MAX_EXPR_DE
2d2f0 50 54 48 3e 30 0a 20 20 69 6e 74 20 73 71 6c 69  PTH>0.  int sqli
2d300 74 65 33 53 65 6c 65 63 74 45 78 70 72 48 65 69  te3SelectExprHei
2d310 67 68 74 28 53 65 6c 65 63 74 20 2a 29 3b 0a 20  ght(Select *);. 
2d320 20 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72   int sqlite3Expr
2d330 43 68 65 63 6b 48 65 69 67 68 74 28 50 61 72 73  CheckHeight(Pars
2d340 65 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a  e*, int);.#else.
2d350 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
2d360 33 53 65 6c 65 63 74 45 78 70 72 48 65 69 67 68  3SelectExprHeigh
2d370 74 28 78 29 20 30 0a 20 20 23 64 65 66 69 6e 65  t(x) 0.  #define
2d380 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63   sqlite3ExprChec
2d390 6b 48 65 69 67 68 74 28 78 2c 79 29 0a 23 65 6e  kHeight(x,y).#en
2d3a0 64 69 66 0a 0a 75 33 32 20 73 71 6c 69 74 65 33  dif..u32 sqlite3
2d3b0 47 65 74 34 62 79 74 65 28 63 6f 6e 73 74 20 75  Get4byte(const u
2d3c0 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  8*);.void sqlite
2d3d0 33 50 75 74 34 62 79 74 65 28 75 38 2a 2c 20 75  3Put4byte(u8*, u
2d3e0 33 32 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  32);..#ifdef SQL
2d3f0 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43  ITE_ENABLE_UNLOC
2d400 4b 5f 4e 4f 54 49 46 59 0a 20 20 76 6f 69 64 20  K_NOTIFY.  void 
2d410 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
2d420 6e 42 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33  nBlocked(sqlite3
2d430 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 29 3b 0a   *, sqlite3 *);.
2d440 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
2d450 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64  nnectionUnlocked
2d460 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20  (sqlite3 *db);. 
2d470 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e   void sqlite3Con
2d480 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 73 71  nectionClosed(sq
2d490 6c 69 74 65 33 20 2a 64 62 29 3b 0a 23 65 6c 73  lite3 *db);.#els
2d4a0 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
2d4b0 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f  te3ConnectionBlo
2d4c0 63 6b 65 64 28 78 2c 79 29 0a 20 20 23 64 65 66  cked(x,y).  #def
2d4d0 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65  ine sqlite3Conne
2d4e0 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 78 29  ctionUnlocked(x)
2d4f0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
2d500 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73  e3ConnectionClos
2d510 65 64 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23 69  ed(x).#endif..#i
2d520 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
2d530 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  G.  void sqlite3
2d540 50 61 72 73 65 72 54 72 61 63 65 28 46 49 4c 45  ParserTrace(FILE
2d550 2a 2c 20 63 68 61 72 20 2a 29 3b 0a 23 65 6e 64  *, char *);.#end
2d560 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65  if../*.** If the
2d570 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 20 49   SQLITE_ENABLE I
2d580 4f 54 52 41 43 45 20 65 78 69 73 74 73 20 74 68  OTRACE exists th
2d590 65 6e 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61  en the global va
2d5a0 72 69 61 62 6c 65 0a 2a 2a 20 73 71 6c 69 74 65  riable.** sqlite
2d5b0 33 49 6f 54 72 61 63 65 20 69 73 20 61 20 70 6f  3IoTrace is a po
2d5c0 69 6e 74 65 72 20 74 6f 20 61 20 70 72 69 6e 74  inter to a print
2d5d0 66 2d 6c 69 6b 65 20 72 6f 75 74 69 6e 65 20 75  f-like routine u
2d5e0 73 65 64 20 74 6f 0a 2a 2a 20 70 72 69 6e 74 20  sed to.** print 
2d5f0 49 2f 4f 20 74 72 61 63 69 6e 67 20 6d 65 73 73  I/O tracing mess
2d600 61 67 65 73 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  ages..*/.#ifdef 
2d610 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f  SQLITE_ENABLE_IO
2d620 54 52 41 43 45 0a 23 20 64 65 66 69 6e 65 20 49  TRACE.# define I
2d630 4f 54 52 41 43 45 28 41 29 20 20 69 66 28 20 73  OTRACE(A)  if( s
2d640 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 29 7b  qlite3IoTrace ){
2d650 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20   sqlite3IoTrace 
2d660 41 3b 20 7d 0a 20 20 76 6f 69 64 20 73 71 6c 69  A; }.  void sqli
2d670 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71  te3VdbeIOTraceSq
2d680 6c 28 56 64 62 65 2a 29 3b 0a 53 51 4c 49 54 45  l(Vdbe*);.SQLITE
2d690 5f 41 50 49 20 53 51 4c 49 54 45 5f 45 58 54 45  _API SQLITE_EXTE
2d6a0 52 4e 20 76 6f 69 64 20 28 53 51 4c 49 54 45 5f  RN void (SQLITE_
2d6b0 43 44 45 43 4c 20 2a 73 71 6c 69 74 65 33 49 6f  CDECL *sqlite3Io
2d6c0 54 72 61 63 65 29 28 63 6f 6e 73 74 20 63 68 61  Trace)(const cha
2d6d0 72 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23  r*,...);.#else.#
2d6e0 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28   define IOTRACE(
2d6f0 41 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  A).# define sqli
2d700 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71  te3VdbeIOTraceSq
2d710 6c 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  l(X).#endif../*.
2d720 2a 2a 20 54 68 65 73 65 20 72 6f 75 74 69 6e 65  ** These routine
2d730 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20  s are available 
2d740 66 6f 72 20 74 68 65 20 6d 65 6d 32 2e 63 20 64  for the mem2.c d
2d750 65 62 75 67 67 69 6e 67 20 6d 65 6d 6f 72 79 20  ebugging memory 
2d760 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c  allocator.** onl
2d770 79 2e 20 20 54 68 65 79 20 61 72 65 20 75 73 65  y.  They are use
2d780 64 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74  d to verify that
2d790 20 64 69 66 66 65 72 65 6e 74 20 22 74 79 70 65   different "type
2d7a0 73 22 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20  s" of memory.** 
2d7b0 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20  allocations are 
2d7c0 70 72 6f 70 65 72 6c 79 20 74 72 61 63 6b 65 64  properly tracked
2d7d0 20 62 79 20 74 68 65 20 73 79 73 74 65 6d 2e 0a   by the system..
2d7e0 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d  **.** sqlite3Mem
2d7f0 64 65 62 75 67 53 65 74 54 79 70 65 28 29 20 73  debugSetType() s
2d800 65 74 73 20 74 68 65 20 22 74 79 70 65 22 20 6f  ets the "type" o
2d810 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  f an allocation 
2d820 74 6f 20 6f 6e 65 20 6f 66 0a 2a 2a 20 74 68 65  to one of.** the
2d830 20 4d 45 4d 54 59 50 45 5f 2a 20 6d 61 63 72 6f   MEMTYPE_* macro
2d840 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 2e  s defined below.
2d850 20 20 54 68 65 20 74 79 70 65 20 6d 75 73 74 20    The type must 
2d860 62 65 20 61 20 62 69 74 6d 61 73 6b 20 77 69 74  be a bitmask wit
2d870 68 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 62 69  h.** a single bi
2d880 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c  t set..**.** sql
2d890 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54  ite3MemdebugHasT
2d8a0 79 70 65 28 29 20 72 65 74 75 72 6e 73 20 74 72  ype() returns tr
2d8b0 75 65 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65  ue if any of the
2d8c0 20 62 69 74 73 20 69 6e 20 69 74 73 20 73 65 63   bits in its sec
2d8d0 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20  ond.** argument 
2d8e0 6d 61 74 63 68 20 74 68 65 20 74 79 70 65 20 73  match the type s
2d8f0 65 74 20 62 79 20 74 68 65 20 70 72 65 76 69 6f  et by the previo
2d900 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  us sqlite3Memdeb
2d910 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 20  ugSetType()..** 
2d920 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48  sqlite3MemdebugH
2d930 61 73 54 79 70 65 28 29 20 69 73 20 69 6e 74 65  asType() is inte
2d940 6e 64 65 64 20 66 6f 72 20 75 73 65 20 69 6e 73  nded for use ins
2d950 69 64 65 20 61 73 73 65 72 74 28 29 20 73 74 61  ide assert() sta
2d960 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73  tements..**.** s
2d970 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f  qlite3MemdebugNo
2d980 54 79 70 65 28 29 20 72 65 74 75 72 6e 73 20 74  Type() returns t
2d990 72 75 65 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74  rue if none of t
2d9a0 68 65 20 62 69 74 73 20 69 6e 20 69 74 73 20 73  he bits in its s
2d9b0 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e  econd.** argumen
2d9c0 74 20 6d 61 74 63 68 20 74 68 65 20 74 79 70 65  t match the type
2d9d0 20 73 65 74 20 62 79 20 74 68 65 20 70 72 65 76   set by the prev
2d9e0 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64  ious sqlite3Memd
2d9f0 65 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a  ebugSetType()..*
2da00 2a 0a 2a 2a 20 50 65 72 68 61 70 73 20 74 68 65  *.** Perhaps the
2da10 20 6d 6f 73 74 20 69 6d 70 6f 72 74 61 6e 74 20   most important 
2da20 70 6f 69 6e 74 20 69 73 20 74 68 65 20 64 69 66  point is the dif
2da30 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20  ference between 
2da40 4d 45 4d 54 59 50 45 5f 48 45 41 50 0a 2a 2a 20  MEMTYPE_HEAP.** 
2da50 61 6e 64 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b  and MEMTYPE_LOOK
2da60 41 53 49 44 45 2e 20 20 49 66 20 61 6e 20 61 6c  ASIDE.  If an al
2da70 6c 6f 63 61 74 69 6f 6e 20 69 73 20 4d 45 4d 54  location is MEMT
2da80 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20 74  YPE_LOOKASIDE, t
2da90 68 61 74 20 6d 65 61 6e 73 0a 2a 2a 20 69 74 20  hat means.** it 
2daa0 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20  might have been 
2dab0 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 6c 6f 6f  allocated by loo
2dac0 6b 61 73 69 64 65 2c 20 65 78 63 65 70 74 20 74  kaside, except t
2dad0 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 77 61  he allocation wa
2dae0 73 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67 65 20 6f  s.** too large o
2daf0 72 20 6c 6f 6f 6b 61 73 69 64 65 20 77 61 73 20  r lookaside was 
2db00 61 6c 72 65 61 64 79 20 66 75 6c 6c 2e 20 20 49  already full.  I
2db10 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74  t is important t
2db20 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 61 74  o verify.** that
2db30 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 74 68 61   allocations tha
2db40 74 20 6d 69 67 68 74 20 68 61 76 65 20 62 65 65  t might have bee
2db50 6e 20 73 61 74 69 73 66 69 65 64 20 62 79 20 6c  n satisfied by l
2db60 6f 6f 6b 61 73 69 64 65 20 61 72 65 20 6e 6f 74  ookaside are not
2db70 0a 2a 2a 20 70 61 73 73 65 64 20 62 61 63 6b 20  .** passed back 
2db80 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65  to non-lookaside
2db90 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73   free() routines
2dba0 2e 20 20 41 73 73 65 72 74 73 20 73 75 63 68 20  .  Asserts such 
2dbb0 61 73 20 74 68 65 0a 2a 2a 20 65 78 61 6d 70 6c  as the.** exampl
2dbc0 65 20 61 62 6f 76 65 20 61 72 65 20 70 6c 61 63  e above are plac
2dbd0 65 64 20 6f 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f  ed on the non-lo
2dbe0 6f 6b 61 73 69 64 65 20 66 72 65 65 28 29 20 72  okaside free() r
2dbf0 6f 75 74 69 6e 65 73 20 74 6f 20 76 65 72 69 66  outines to verif
2dc00 79 0a 2a 2a 20 74 68 69 73 20 63 6f 6e 73 74 72  y.** this constr
2dc10 61 69 6e 74 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20  aint..**.** All 
2dc20 6f 66 20 74 68 69 73 20 69 73 20 6e 6f 2d 6f 70  of this is no-op
2dc30 20 66 6f 72 20 61 20 70 72 6f 64 75 63 74 69 6f   for a productio
2dc40 6e 20 62 75 69 6c 64 2e 20 20 49 74 20 6f 6e 6c  n build.  It onl
2dc50 79 20 63 6f 6d 65 73 20 69 6e 74 6f 0a 2a 2a 20  y comes into.** 
2dc60 70 6c 61 79 20 77 68 65 6e 20 74 68 65 20 53 51  play when the SQ
2dc70 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 63 6f  LITE_MEMDEBUG co
2dc80 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
2dc90 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 23 69  n is used..*/.#i
2dca0 66 64 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44  fdef SQLITE_MEMD
2dcb0 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69  EBUG.  void sqli
2dcc0 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79  te3MemdebugSetTy
2dcd0 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20  pe(void*,u8);.  
2dce0 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  int sqlite3Memde
2dcf0 62 75 67 48 61 73 54 79 70 65 28 76 6f 69 64 2a  bugHasType(void*
2dd00 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  ,u8);.  int sqli
2dd10 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70  te3MemdebugNoTyp
2dd20 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 23 65 6c  e(void*,u8);.#el
2dd30 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
2dd40 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79  te3MemdebugSetTy
2dd50 70 65 28 58 2c 59 29 20 20 2f 2a 20 6e 6f 2d 6f  pe(X,Y)  /* no-o
2dd60 70 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 73 71  p */.# define sq
2dd70 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73  lite3MemdebugHas
2dd80 54 79 70 65 28 58 2c 59 29 20 20 31 0a 23 20 64  Type(X,Y)  1.# d
2dd90 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d  efine sqlite3Mem
2dda0 64 65 62 75 67 4e 6f 54 79 70 65 28 58 2c 59 29  debugNoType(X,Y)
2ddb0 20 20 20 31 0a 23 65 6e 64 69 66 0a 23 64 65 66     1.#endif.#def
2ddc0 69 6e 65 20 4d 45 4d 54 59 50 45 5f 48 45 41 50  ine MEMTYPE_HEAP
2ddd0 20 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20         0x01  /* 
2dde0 47 65 6e 65 72 61 6c 20 68 65 61 70 20 61 6c 6c  General heap all
2ddf0 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66  ocations */.#def
2de00 69 6e 65 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b  ine MEMTYPE_LOOK
2de10 41 53 49 44 45 20 20 30 78 30 32 20 20 2f 2a 20  ASIDE  0x02  /* 
2de20 48 65 61 70 20 74 68 61 74 20 6d 69 67 68 74 20  Heap that might 
2de30 68 61 76 65 20 62 65 65 6e 20 6c 6f 6f 6b 61 73  have been lookas
2de40 69 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  ide */.#define M
2de50 45 4d 54 59 50 45 5f 53 43 52 41 54 43 48 20 20  EMTYPE_SCRATCH  
2de60 20 20 30 78 30 34 20 20 2f 2a 20 53 63 72 61 74    0x04  /* Scrat
2de70 63 68 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a  ch allocations *
2de80 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50  /.#define MEMTYP
2de90 45 5f 50 43 41 43 48 45 20 20 20 20 20 30 78 30  E_PCACHE     0x0
2dea0 38 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65  8  /* Page cache
2deb0 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a   allocations */.
2dec0 0a 2f 2a 0a 2a 2a 20 54 68 72 65 61 64 69 6e 67  ./*.** Threading
2ded0 20 69 6e 74 65 72 66 61 63 65 0a 2a 2f 0a 23 69   interface.*/.#i
2dee0 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  f SQLITE_MAX_WOR
2def0 4b 45 52 5f 54 48 52 45 41 44 53 3e 30 0a 69 6e  KER_THREADS>0.in
2df00 74 20 73 71 6c 69 74 65 33 54 68 72 65 61 64 43  t sqlite3ThreadC
2df10 72 65 61 74 65 28 53 51 4c 69 74 65 54 68 72 65  reate(SQLiteThre
2df20 61 64 2a 2a 2c 76 6f 69 64 2a 28 2a 29 28 76 6f  ad**,void*(*)(vo
2df30 69 64 2a 29 2c 76 6f 69 64 2a 29 3b 0a 69 6e 74  id*),void*);.int
2df40 20 73 71 6c 69 74 65 33 54 68 72 65 61 64 4a 6f   sqlite3ThreadJo
2df50 69 6e 28 53 51 4c 69 74 65 54 68 72 65 61 64 2a  in(SQLiteThread*
2df60 2c 20 76 6f 69 64 2a 2a 29 3b 0a 23 65 6e 64 69  , void**);.#endi
2df70 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  f..#if defined(S
2df80 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44 42 53  QLITE_ENABLE_DBS
2df90 54 41 54 5f 56 54 41 42 29 20 7c 7c 20 64 65 66  TAT_VTAB) || def
2dfa0 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54  ined(SQLITE_TEST
2dfb0 29 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62 73  ).int sqlite3Dbs
2dfc0 74 61 74 52 65 67 69 73 74 65 72 28 73 71 6c 69  tatRegister(sqli
2dfd0 74 65 33 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 69  te3*);.#endif..i
2dfe0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 56 65  nt sqlite3ExprVe
2dff0 63 74 6f 72 53 69 7a 65 28 45 78 70 72 20 2a 70  ctorSize(Expr *p
2e000 45 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74  Expr);.int sqlit
2e010 65 33 45 78 70 72 49 73 56 65 63 74 6f 72 28 45  e3ExprIsVector(E
2e020 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 45 78 70  xpr *pExpr);.Exp
2e030 72 20 2a 73 71 6c 69 74 65 33 56 65 63 74 6f 72  r *sqlite3Vector
2e040 46 69 65 6c 64 53 75 62 65 78 70 72 28 45 78 70  FieldSubexpr(Exp
2e050 72 2a 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a  r*, int);.Expr *
2e060 73 71 6c 69 74 65 33 45 78 70 72 46 6f 72 56 65  sqlite3ExprForVe
2e070 63 74 6f 72 46 69 65 6c 64 28 50 61 72 73 65 2a  ctorField(Parse*
2e080 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69  ,Expr*,int);.voi
2e090 64 20 73 71 6c 69 74 65 33 56 65 63 74 6f 72 45  d sqlite3VectorE
2e0a0 72 72 6f 72 4d 73 67 28 50 61 72 73 65 2a 2c 20  rrorMsg(Parse*, 
2e0b0 45 78 70 72 2a 29 3b 0a 0a 23 65 6e 64 69 66 20  Expr*);..#endif 
2e0c0 2f 2a 20 53 51 4c 49 54 45 49 4e 54 5f 48 20 2a  /* SQLITEINT_H *
2e0d0 2f 0a                                            /.