/ Hex Artifact Content
Login

Artifact b7e590bc90ebee66cf79fb41312a7cdbce881b7db316d934c159294ff6087fd5:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 53 51 4c 49 54 45 49 4e 54 5f 48 0a 23  ef SQLITEINT_H.#
01c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 49 4e 54  define SQLITEINT
01d0: 5f 48 0a 0a 2f 2a 20 53 70 65 63 69 61 6c 20 43  _H../* Special C
01e0: 6f 6d 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 53  omments:.**.** S
01f0: 6f 6d 65 20 63 6f 6d 6d 65 6e 74 73 20 68 61 76  ome comments hav
0200: 65 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  e special meanin
0210: 67 20 74 6f 20 74 68 65 20 74 6f 6f 6c 73 20 74  g to the tools t
0220: 68 61 74 20 6d 65 61 73 75 72 65 20 74 65 73 74  hat measure test
0230: 0a 2a 2a 20 63 6f 76 65 72 61 67 65 3a 0a 2a 2a  .** coverage:.**
0240: 0a 2a 2a 20 20 20 20 4e 4f 5f 54 45 53 54 20 20  .**    NO_TEST  
0250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0260: 20 20 20 2d 20 54 68 65 20 62 72 61 6e 63 68 65     - The branche
0270: 73 20 6f 6e 20 74 68 69 73 20 6c 69 6e 65 20 61  s on this line a
0280: 72 65 20 6e 6f 74 0a 2a 2a 20 20 20 20 20 20 20  re not.**       
0290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02a0: 20 20 20 20 20 20 20 20 20 20 20 6d 65 61 73 75             measu
02b0: 72 65 64 20 62 79 20 62 72 61 6e 63 68 20 63 6f  red by branch co
02c0: 76 65 72 61 67 65 2e 20 20 54 68 69 73 20 69 73  verage.  This is
02d0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
02e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02f0: 20 20 20 20 20 75 73 65 64 20 6f 6e 20 6c 69 6e       used on lin
0300: 65 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  es of code that 
0310: 61 63 74 75 61 6c 6c 79 0a 2a 2a 20 20 20 20 20  actually.**     
0320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0330: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6d 70               imp
0340: 6c 65 6d 65 6e 74 20 70 61 72 74 73 20 6f 66 20  lement parts of 
0350: 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67  coverage testing
0360: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d  ..**.**    OPTIM
0370: 49 5a 41 54 49 4f 4e 2d 49 46 2d 54 52 55 45 20  IZATION-IF-TRUE 
0380: 20 20 20 20 20 20 20 2d 20 54 68 69 73 20 62 72         - This br
0390: 61 6e 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20  anch is allowed 
03a0: 74 6f 20 61 6c 77 61 79 20 62 65 20 66 61 6c 73  to alway be fals
03b0: 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
03c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03d0: 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 63 6f        and the co
03e0: 72 72 65 63 74 20 61 6e 73 77 65 72 20 69 73 20  rrect answer is 
03f0: 73 74 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a  still obtained,.
0400: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
0410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0420: 20 20 20 20 74 68 6f 75 67 68 20 70 65 72 68 61      though perha
0430: 70 73 20 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a  ps more slowly..
0440: 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d 49 5a  **.**    OPTIMIZ
0450: 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 20 20  ATION-IF-FALSE  
0460: 20 20 20 20 20 2d 20 54 68 69 73 20 62 72 61 6e       - This bran
0470: 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f  ch is allowed to
0480: 20 61 6c 77 61 79 20 62 65 20 74 72 75 65 0a 2a   alway be true.*
0490: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
04a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04b0: 20 20 20 61 6e 64 20 74 68 65 20 63 6f 72 72 65     and the corre
04c0: 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74 69  ct answer is sti
04d0: 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a 2a 2a 20  ll obtained,.** 
04e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0500: 20 74 68 6f 75 67 68 20 70 65 72 68 61 70 73 20   though perhaps 
0510: 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a 2a 2a 0a  more slowly..**.
0520: 2a 2a 20 20 20 20 50 52 45 56 45 4e 54 53 2d 48  **    PREVENTS-H
0530: 41 52 4d 4c 45 53 53 2d 4f 56 45 52 52 45 41 44  ARMLESS-OVERREAD
0540: 20 20 2d 20 54 68 69 73 20 62 72 61 6e 63 68 20    - This branch 
0550: 70 72 65 76 65 6e 74 73 20 61 20 62 75 66 66 65  prevents a buffe
0560: 72 20 6f 76 65 72 72 65 61 64 0a 2a 2a 20 20 20  r overread.**   
0570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
0590: 68 61 74 20 77 6f 75 6c 64 20 62 65 20 68 61 72  hat would be har
05a0: 6d 6c 65 73 73 20 61 6e 64 20 75 6e 64 65 74 65  mless and undete
05b0: 63 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20  ctable.**       
05c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
05d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 69 74             if it
05e0: 20 64 69 64 20 6f 63 63 75 72 2e 20 20 0a 2a 2a   did occur.  .**
05f0: 0a 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65 73  .** In all cases
0600: 2c 20 74 68 65 20 73 70 65 63 69 61 6c 20 63 6f  , the special co
0610: 6d 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 65 6e  mment must be en
0620: 63 6c 6f 73 65 64 20 69 6e 20 74 68 65 20 75 73  closed in the us
0630: 75 61 6c 0a 2a 2a 20 73 6c 61 73 68 2d 61 73 74  ual.** slash-ast
0640: 65 72 69 73 6b 2e 2e 2e 61 73 74 65 72 69 73 6b  erisk...asterisk
0650: 2d 73 6c 61 73 68 20 63 6f 6d 6d 65 6e 74 20 6d  -slash comment m
0660: 61 72 6b 73 2c 20 77 69 74 68 20 6e 6f 20 73 70  arks, with no sp
0670: 61 63 65 73 20 62 65 74 77 65 65 6e 20 74 68 65  aces between the
0680: 20 0a 2a 2a 20 61 73 74 65 72 69 73 6b 73 20 61   .** asterisks a
0690: 6e 64 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74  nd the comment t
06a0: 65 78 74 2e 0a 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d  ext..*/../*.** M
06b0: 61 6b 65 20 73 75 72 65 20 74 68 65 20 54 63 6c  ake sure the Tcl
06c0: 20 63 61 6c 6c 69 6e 67 20 63 6f 6e 76 65 6e 74   calling convent
06d0: 69 6f 6e 20 6d 61 63 72 6f 20 69 73 20 64 65 66  ion macro is def
06e0: 69 6e 65 64 2e 20 20 54 68 69 73 20 6d 61 63 72  ined.  This macr
06f0: 6f 20 69 73 0a 2a 2a 20 6f 6e 6c 79 20 75 73 65  o is.** only use
0700: 64 20 62 79 20 74 65 73 74 20 63 6f 64 65 20 61  d by test code a
0710: 6e 64 20 54 63 6c 20 69 6e 74 65 67 72 61 74 69  nd Tcl integrati
0720: 6f 6e 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 6e  on code..*/.#ifn
0730: 64 65 66 20 53 51 4c 49 54 45 5f 54 43 4c 41 50  def SQLITE_TCLAP
0740: 49 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49  I.#  define SQLI
0750: 54 45 5f 54 43 4c 41 50 49 0a 23 65 6e 64 69 66  TE_TCLAPI.#endif
0760: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20 73 75 72  ../*.** Make sur
0770: 65 20 74 68 61 74 20 72 61 6e 64 5f 73 28 29 20  e that rand_s() 
0780: 69 73 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e 20  is available on 
0790: 57 69 6e 64 6f 77 73 20 73 79 73 74 65 6d 73 20  Windows systems 
07a0: 77 69 74 68 20 4d 53 56 43 20 32 30 30 35 0a 2a  with MSVC 2005.*
07b0: 2a 20 6f 72 20 68 69 67 68 65 72 2e 0a 2a 2f 0a  * or higher..*/.
07c0: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 4d 53 43  #if defined(_MSC
07d0: 5f 56 45 52 29 20 26 26 20 5f 4d 53 43 5f 56 45  _VER) && _MSC_VE
07e0: 52 3e 3d 31 34 30 30 0a 23 20 20 64 65 66 69 6e  R>=1400.#  defin
07f0: 65 20 5f 43 52 54 5f 52 41 4e 44 5f 53 0a 23 65  e _CRT_RAND_S.#e
0800: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  ndif../*.** Incl
0810: 75 64 65 20 74 68 65 20 68 65 61 64 65 72 20 66  ude the header f
0820: 69 6c 65 20 75 73 65 64 20 74 6f 20 63 75 73 74  ile used to cust
0830: 6f 6d 69 7a 65 20 74 68 65 20 63 6f 6d 70 69 6c  omize the compil
0840: 65 72 20 6f 70 74 69 6f 6e 73 20 66 6f 72 20 4d  er options for M
0850: 53 56 43 2e 0a 2a 2a 20 54 68 69 73 20 73 68 6f  SVC..** This sho
0860: 75 6c 64 20 62 65 20 64 6f 6e 65 20 66 69 72 73  uld be done firs
0870: 74 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e  t so that it can
0880: 20 73 75 63 63 65 73 73 66 75 6c 6c 79 20 70 72   successfully pr
0890: 65 76 65 6e 74 20 73 70 75 72 69 6f 75 73 0a 2a  event spurious.*
08a0: 2a 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69  * compiler warni
08b0: 6e 67 73 20 64 75 65 20 74 6f 20 73 75 62 73 65  ngs due to subse
08c0: 71 75 65 6e 74 20 63 6f 6e 74 65 6e 74 20 69 6e  quent content in
08d0: 20 74 68 69 73 20 66 69 6c 65 20 61 6e 64 20 6f   this file and o
08e0: 74 68 65 72 20 66 69 6c 65 73 0a 2a 2a 20 74 68  ther files.** th
08f0: 61 74 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20  at are included 
0900: 62 79 20 74 68 69 73 20 66 69 6c 65 2e 0a 2a 2f  by this file..*/
0910: 0a 23 69 6e 63 6c 75 64 65 20 22 6d 73 76 63 2e  .#include "msvc.
0920: 68 22 0a 0a 2f 2a 0a 2a 2a 20 53 70 65 63 69 61  h"../*.** Specia
0930: 6c 20 73 65 74 75 70 20 66 6f 72 20 56 78 57 6f  l setup for VxWo
0940: 72 6b 73 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20  rks.*/.#include 
0950: 22 76 78 77 6f 72 6b 73 2e 68 22 0a 0a 2f 2a 0a  "vxworks.h"../*.
0960: 2a 2a 20 54 68 65 73 65 20 23 64 65 66 69 6e 65  ** These #define
0970: 73 20 73 68 6f 75 6c 64 20 65 6e 61 62 6c 65 20  s should enable 
0980: 3e 32 47 42 20 66 69 6c 65 20 73 75 70 70 6f 72  >2GB file suppor
0990: 74 20 6f 6e 20 50 4f 53 49 58 20 69 66 20 74 68  t on POSIX if th
09a0: 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20  e.** underlying 
09b0: 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d  operating system
09c0: 20 73 75 70 70 6f 72 74 73 20 69 74 2e 20 20 49   supports it.  I
09d0: 66 20 74 68 65 20 4f 53 20 6c 61 63 6b 73 0a 2a  f the OS lacks.*
09e0: 2a 20 6c 61 72 67 65 20 66 69 6c 65 20 73 75 70  * large file sup
09f0: 70 6f 72 74 2c 20 6f 72 20 69 66 20 74 68 65 20  port, or if the 
0a00: 4f 53 20 69 73 20 77 69 6e 64 6f 77 73 2c 20 74  OS is windows, t
0a10: 68 65 73 65 20 73 68 6f 75 6c 64 20 62 65 20 6e  hese should be n
0a20: 6f 2d 6f 70 73 2e 0a 2a 2a 0a 2a 2a 20 54 69 63  o-ops..**.** Tic
0a30: 6b 65 74 20 23 32 37 33 39 3a 20 20 54 68 65 20  ket #2739:  The 
0a40: 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55 52 43  _LARGEFILE_SOURC
0a50: 45 20 6d 61 63 72 6f 20 6d 75 73 74 20 61 70 70  E macro must app
0a60: 65 61 72 20 62 65 66 6f 72 65 20 61 6e 79 0a 2a  ear before any.*
0a70: 2a 20 73 79 73 74 65 6d 20 23 69 6e 63 6c 75 64  * system #includ
0a80: 65 73 2e 20 20 48 65 6e 63 65 2c 20 74 68 69 73  es.  Hence, this
0a90: 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 20 6d   block of code m
0aa0: 75 73 74 20 62 65 20 74 68 65 20 76 65 72 79 20  ust be the very 
0ab0: 66 69 72 73 74 0a 2a 2a 20 63 6f 64 65 20 69 6e  first.** code in
0ac0: 20 61 6c 6c 20 73 6f 75 72 63 65 20 66 69 6c 65   all source file
0ad0: 73 2e 0a 2a 2a 0a 2a 2a 20 4c 61 72 67 65 20 66  s..**.** Large f
0ae0: 69 6c 65 20 73 75 70 70 6f 72 74 20 63 61 6e 20  ile support can 
0af0: 62 65 20 64 69 73 61 62 6c 65 64 20 75 73 69 6e  be disabled usin
0b00: 67 20 74 68 65 20 2d 44 53 51 4c 49 54 45 5f 44  g the -DSQLITE_D
0b10: 49 53 41 42 4c 45 5f 4c 46 53 20 73 77 69 74 63  ISABLE_LFS switc
0b20: 68 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f 6d 70  h.** on the comp
0b30: 69 6c 65 72 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e  iler command lin
0b40: 65 2e 20 20 54 68 69 73 20 69 73 20 6e 65 63 65  e.  This is nece
0b50: 73 73 61 72 79 20 69 66 20 79 6f 75 20 61 72 65  ssary if you are
0b60: 20 63 6f 6d 70 69 6c 69 6e 67 0a 2a 2a 20 6f 6e   compiling.** on
0b70: 20 61 20 72 65 63 65 6e 74 20 6d 61 63 68 69 6e   a recent machin
0b80: 65 20 28 65 78 3a 20 52 65 64 20 48 61 74 20 37  e (ex: Red Hat 7
0b90: 2e 32 29 20 62 75 74 20 79 6f 75 20 77 61 6e 74  .2) but you want
0ba0: 20 79 6f 75 72 20 63 6f 64 65 20 74 6f 20 77 6f   your code to wo
0bb0: 72 6b 0a 2a 2a 20 6f 6e 20 61 6e 20 6f 6c 64 65  rk.** on an olde
0bc0: 72 20 6d 61 63 68 69 6e 65 20 28 65 78 3a 20 52  r machine (ex: R
0bd0: 65 64 20 48 61 74 20 36 2e 30 29 2e 20 20 49 66  ed Hat 6.0).  If
0be0: 20 79 6f 75 20 63 6f 6d 70 69 6c 65 20 6f 6e 20   you compile on 
0bf0: 52 65 64 20 48 61 74 20 37 2e 32 0a 2a 2a 20 77  Red Hat 7.2.** w
0c00: 69 74 68 6f 75 74 20 74 68 69 73 20 6f 70 74 69  ithout this opti
0c10: 6f 6e 2c 20 4c 46 53 20 69 73 20 65 6e 61 62 6c  on, LFS is enabl
0c20: 65 2e 20 20 42 75 74 20 4c 46 53 20 64 6f 65 73  e.  But LFS does
0c30: 20 6e 6f 74 20 65 78 69 73 74 20 69 6e 20 74 68   not exist in th
0c40: 65 20 6b 65 72 6e 65 6c 0a 2a 2a 20 69 6e 20 52  e kernel.** in R
0c50: 65 64 20 48 61 74 20 36 2e 30 2c 20 73 6f 20 74  ed Hat 6.0, so t
0c60: 68 65 20 63 6f 64 65 20 77 6f 6e 27 74 20 77 6f  he code won't wo
0c70: 72 6b 2e 20 20 48 65 6e 63 65 2c 20 66 6f 72 20  rk.  Hence, for 
0c80: 6d 61 78 69 6d 75 6d 20 62 69 6e 61 72 79 0a 2a  maximum binary.*
0c90: 2a 20 70 6f 72 74 61 62 69 6c 69 74 79 20 79 6f  * portability yo
0ca0: 75 20 73 68 6f 75 6c 64 20 6f 6d 69 74 20 4c 46  u should omit LF
0cb0: 53 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 72 65  S..**.** The pre
0cc0: 76 69 6f 75 73 20 70 61 72 61 67 72 61 70 68 20  vious paragraph 
0cd0: 77 61 73 20 77 72 69 74 74 65 6e 20 69 6e 20 32  was written in 2
0ce0: 30 30 35 2e 20 20 28 54 68 69 73 20 70 61 72 61  005.  (This para
0cf0: 67 72 61 70 68 20 69 73 20 77 72 69 74 74 65 6e  graph is written
0d00: 0a 2a 2a 20 6f 6e 20 32 30 30 38 2d 31 31 2d 32  .** on 2008-11-2
0d10: 38 2e 29 20 54 68 65 73 65 20 64 61 79 73 2c 20  8.) These days, 
0d20: 61 6c 6c 20 4c 69 6e 75 78 20 6b 65 72 6e 65 6c  all Linux kernel
0d30: 73 20 73 75 70 70 6f 72 74 20 6c 61 72 67 65 20  s support large 
0d40: 66 69 6c 65 73 2c 20 73 6f 0a 2a 2a 20 79 6f 75  files, so.** you
0d50: 20 73 68 6f 75 6c 64 20 70 72 6f 62 61 62 6c 79   should probably
0d60: 20 6c 65 61 76 65 20 4c 46 53 20 65 6e 61 62 6c   leave LFS enabl
0d70: 65 64 2e 20 20 42 75 74 20 73 6f 6d 65 20 65 6d  ed.  But some em
0d80: 62 65 64 64 65 64 20 70 6c 61 74 66 6f 72 6d 73  bedded platforms
0d90: 20 6d 69 67 68 74 0a 2a 2a 20 6c 61 63 6b 20 4c   might.** lack L
0da0: 46 53 20 69 6e 20 77 68 69 63 68 20 63 61 73 65  FS in which case
0db0: 20 74 68 65 20 53 51 4c 49 54 45 5f 44 49 53 41   the SQLITE_DISA
0dc0: 42 4c 45 5f 4c 46 53 20 6d 61 63 72 6f 20 6d 69  BLE_LFS macro mi
0dd0: 67 68 74 20 73 74 69 6c 6c 20 62 65 20 75 73 65  ght still be use
0de0: 66 75 6c 2e 0a 2a 2a 0a 2a 2a 20 53 69 6d 69 6c  ful..**.** Simil
0df0: 61 72 20 69 73 20 74 72 75 65 20 66 6f 72 20 4d  ar is true for M
0e00: 61 63 20 4f 53 20 58 2e 20 20 4c 46 53 20 69 73  ac OS X.  LFS is
0e10: 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74 65 64 20   only supported 
0e20: 6f 6e 20 4d 61 63 20 4f 53 20 58 20 39 20 61 6e  on Mac OS X 9 an
0e30: 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 23 69 66 6e  d later..*/.#ifn
0e40: 64 65 66 20 53 51 4c 49 54 45 5f 44 49 53 41 42  def SQLITE_DISAB
0e50: 4c 45 5f 4c 46 53 0a 23 20 64 65 66 69 6e 65 20  LE_LFS.# define 
0e60: 5f 4c 41 52 47 45 5f 46 49 4c 45 20 20 20 20 20  _LARGE_FILE     
0e70: 20 20 31 0a 23 20 69 66 6e 64 65 66 20 5f 46 49    1.# ifndef _FI
0e80: 4c 45 5f 4f 46 46 53 45 54 5f 42 49 54 53 0a 23  LE_OFFSET_BITS.#
0e90: 20 20 20 64 65 66 69 6e 65 20 5f 46 49 4c 45 5f     define _FILE_
0ea0: 4f 46 46 53 45 54 5f 42 49 54 53 20 36 34 0a 23  OFFSET_BITS 64.#
0eb0: 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20   endif.# define 
0ec0: 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55 52 43  _LARGEFILE_SOURC
0ed0: 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 54  E 1.#endif../* T
0ee0: 68 65 20 47 43 43 5f 56 45 52 53 49 4f 4e 20 61  he GCC_VERSION a
0ef0: 6e 64 20 4d 53 56 43 5f 56 45 52 53 49 4f 4e 20  nd MSVC_VERSION 
0f00: 6d 61 63 72 6f 73 20 61 72 65 20 75 73 65 64 20  macros are used 
0f10: 74 6f 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 61  to.** conditiona
0f20: 6c 6c 79 20 69 6e 63 6c 75 64 65 20 6f 70 74 69  lly include opti
0f30: 6d 69 7a 61 74 69 6f 6e 73 20 66 6f 72 20 65 61  mizations for ea
0f40: 63 68 20 6f 66 20 74 68 65 73 65 20 63 6f 6d 70  ch of these comp
0f50: 69 6c 65 72 73 2e 20 20 41 0a 2a 2a 20 76 61 6c  ilers.  A.** val
0f60: 75 65 20 6f 66 20 30 20 6d 65 61 6e 73 20 74 68  ue of 0 means th
0f70: 61 74 20 63 6f 6d 70 69 6c 65 72 20 69 73 20 6e  at compiler is n
0f80: 6f 74 20 62 65 69 6e 67 20 75 73 65 64 2e 20 20  ot being used.  
0f90: 54 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 44 49  The.** SQLITE_DI
0fa0: 53 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 20  SABLE_INTRINSIC 
0fb0: 6d 61 63 72 6f 20 6d 65 61 6e 73 20 64 6f 20 6e  macro means do n
0fc0: 6f 74 20 75 73 65 20 61 6e 79 20 63 6f 6d 70 69  ot use any compi
0fd0: 6c 65 72 2d 73 70 65 63 69 66 69 63 0a 2a 2a 20  ler-specific.** 
0fe0: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2c 20 61  optimizations, a
0ff0: 6e 64 20 68 65 6e 63 65 20 73 65 74 20 61 6c 6c  nd hence set all
1000: 20 63 6f 6d 70 69 6c 65 72 20 6d 61 63 72 6f 73   compiler macros
1010: 20 74 6f 20 30 0a 2a 2a 0a 2a 2a 20 54 68 65 72   to 0.**.** Ther
1020: 65 20 77 61 73 20 6f 6e 63 65 20 61 6c 73 6f 20  e was once also 
1030: 61 20 43 4c 41 4e 47 5f 56 45 52 53 49 4f 4e 20  a CLANG_VERSION 
1040: 6d 61 63 72 6f 2e 20 20 48 6f 77 65 76 65 72 2c  macro.  However,
1050: 20 77 65 20 6c 65 61 72 6e 20 74 68 61 74 20 74   we learn that t
1060: 68 65 0a 2a 2a 20 76 65 72 73 69 6f 6e 20 6e 75  he.** version nu
1070: 6d 62 65 72 73 20 69 6e 20 63 6c 61 6e 67 20 61  mbers in clang a
1080: 72 65 20 66 6f 72 20 22 6d 61 72 6b 65 74 69 6e  re for "marketin
1090: 67 22 20 6f 6e 6c 79 20 61 6e 64 20 61 72 65 20  g" only and are 
10a0: 69 6e 63 6f 6e 73 69 73 74 65 6e 74 0a 2a 2a 20  inconsistent.** 
10b0: 61 6e 64 20 75 6e 72 65 6c 69 61 62 6c 65 2e 20  and unreliable. 
10c0: 20 46 6f 72 74 75 6e 61 74 65 6c 79 2c 20 61 6c   Fortunately, al
10d0: 6c 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 63 6c  l versions of cl
10e0: 61 6e 67 20 61 6c 73 6f 20 72 65 63 6f 67 6e 69  ang also recogni
10f0: 7a 65 20 74 68 65 0a 2a 2a 20 67 63 63 20 76 65  ze the.** gcc ve
1100: 72 73 69 6f 6e 20 6e 75 6d 62 65 72 73 20 61 6e  rsion numbers an
1110: 64 20 68 61 76 65 20 72 65 61 73 6f 6e 61 62 6c  d have reasonabl
1120: 65 20 73 65 74 74 69 6e 67 73 20 66 6f 72 20 67  e settings for g
1130: 63 63 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65  cc version numbe
1140: 72 73 2c 0a 2a 2a 20 73 6f 20 74 68 65 20 47 43  rs,.** so the GC
1150: 43 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72 6f 20  C_VERSION macro 
1160: 77 69 6c 6c 20 62 65 20 73 65 74 20 74 6f 20 61  will be set to a
1170: 20 63 6f 72 72 65 63 74 20 6e 6f 6e 2d 7a 65 72   correct non-zer
1180: 6f 20 76 61 6c 75 65 20 65 76 65 6e 0a 2a 2a 20  o value even.** 
1190: 77 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 77  when compiling w
11a0: 69 74 68 20 63 6c 61 6e 67 2e 0a 2a 2f 0a 23 69  ith clang..*/.#i
11b0: 66 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43  f defined(__GNUC
11c0: 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  __) && !defined(
11d0: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 49  SQLITE_DISABLE_I
11e0: 4e 54 52 49 4e 53 49 43 29 0a 23 20 64 65 66 69  NTRINSIC).# defi
11f0: 6e 65 20 47 43 43 5f 56 45 52 53 49 4f 4e 20 28  ne GCC_VERSION (
1200: 5f 5f 47 4e 55 43 5f 5f 2a 31 30 30 30 30 30 30  __GNUC__*1000000
1210: 2b 5f 5f 47 4e 55 43 5f 4d 49 4e 4f 52 5f 5f 2a  +__GNUC_MINOR__*
1220: 31 30 30 30 2b 5f 5f 47 4e 55 43 5f 50 41 54 43  1000+__GNUC_PATC
1230: 48 4c 45 56 45 4c 5f 5f 29 0a 23 65 6c 73 65 0a  HLEVEL__).#else.
1240: 23 20 64 65 66 69 6e 65 20 47 43 43 5f 56 45 52  # define GCC_VER
1250: 53 49 4f 4e 20 30 0a 23 65 6e 64 69 66 0a 23 69  SION 0.#endif.#i
1260: 66 20 64 65 66 69 6e 65 64 28 5f 4d 53 43 5f 56  f defined(_MSC_V
1270: 45 52 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  ER) && !defined(
1280: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 49  SQLITE_DISABLE_I
1290: 4e 54 52 49 4e 53 49 43 29 0a 23 20 64 65 66 69  NTRINSIC).# defi
12a0: 6e 65 20 4d 53 56 43 5f 56 45 52 53 49 4f 4e 20  ne MSVC_VERSION 
12b0: 5f 4d 53 43 5f 56 45 52 0a 23 65 6c 73 65 0a 23  _MSC_VER.#else.#
12c0: 20 64 65 66 69 6e 65 20 4d 53 56 43 5f 56 45 52   define MSVC_VER
12d0: 53 49 4f 4e 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  SION 0.#endif../
12e0: 2a 20 4e 65 65 64 65 64 20 66 6f 72 20 76 61 72  * Needed for var
12f0: 69 6f 75 73 20 64 65 66 69 6e 69 74 69 6f 6e 73  ious definitions
1300: 2e 2e 2e 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e  ... */.#if defin
1310: 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 26 26 20  ed(__GNUC__) && 
1320: 21 64 65 66 69 6e 65 64 28 5f 47 4e 55 5f 53 4f  !defined(_GNU_SO
1330: 55 52 43 45 29 0a 23 20 64 65 66 69 6e 65 20 5f  URCE).# define _
1340: 47 4e 55 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69  GNU_SOURCE.#endi
1350: 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  f..#if defined(_
1360: 5f 4f 70 65 6e 42 53 44 5f 5f 29 20 26 26 20 21  _OpenBSD__) && !
1370: 64 65 66 69 6e 65 64 28 5f 42 53 44 5f 53 4f 55  defined(_BSD_SOU
1380: 52 43 45 29 0a 23 20 64 65 66 69 6e 65 20 5f 42  RCE).# define _B
1390: 53 44 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69 66  SD_SOURCE.#endif
13a0: 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47  ../*.** For MinG
13b0: 57 2c 20 63 68 65 63 6b 20 74 6f 20 73 65 65 20  W, check to see 
13c0: 69 66 20 77 65 20 63 61 6e 20 69 6e 63 6c 75 64  if we can includ
13d0: 65 20 74 68 65 20 68 65 61 64 65 72 20 66 69 6c  e the header fil
13e0: 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 69 74 73  e containing its
13f0: 0a 2a 2a 20 76 65 72 73 69 6f 6e 20 69 6e 66 6f  .** version info
1400: 72 6d 61 74 69 6f 6e 2c 20 61 6d 6f 6e 67 20 6f  rmation, among o
1410: 74 68 65 72 20 74 68 69 6e 67 73 2e 20 20 4e 6f  ther things.  No
1420: 72 6d 61 6c 6c 79 2c 20 74 68 69 73 20 69 6e 74  rmally, this int
1430: 65 72 6e 61 6c 20 4d 69 6e 47 57 0a 2a 2a 20 68  ernal MinGW.** h
1440: 65 61 64 65 72 20 66 69 6c 65 20 77 6f 75 6c 64  eader file would
1450: 20 5b 6f 6e 6c 79 5d 20 62 65 20 69 6e 63 6c 75   [only] be inclu
1460: 64 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ded automaticall
1470: 79 20 62 79 20 6f 74 68 65 72 20 4d 69 6e 47 57  y by other MinGW
1480: 20 68 65 61 64 65 72 0a 2a 2a 20 66 69 6c 65 73   header.** files
1490: 3b 20 68 6f 77 65 76 65 72 2c 20 74 68 65 20 63  ; however, the c
14a0: 6f 6e 74 61 69 6e 65 64 20 76 65 72 73 69 6f 6e  ontained version
14b0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20   information is 
14c0: 6e 6f 77 20 72 65 71 75 69 72 65 64 20 62 79 20  now required by 
14d0: 74 68 69 73 0a 2a 2a 20 68 65 61 64 65 72 20 66  this.** header f
14e0: 69 6c 65 20 74 6f 20 77 6f 72 6b 20 61 72 6f 75  ile to work arou
14f0: 6e 64 20 62 69 6e 61 72 79 20 63 6f 6d 70 61 74  nd binary compat
1500: 69 62 69 6c 69 74 79 20 69 73 73 75 65 73 20 28  ibility issues (
1510: 73 65 65 20 62 65 6c 6f 77 29 20 61 6e 64 0a 2a  see below) and.*
1520: 2a 20 74 68 69 73 20 69 73 20 74 68 65 20 6f 6e  * this is the on
1530: 6c 79 20 6b 6e 6f 77 6e 20 77 61 79 20 74 6f 20  ly known way to 
1540: 72 65 6c 69 61 62 6c 79 20 6f 62 74 61 69 6e 20  reliably obtain 
1550: 69 74 2e 20 20 54 68 69 73 20 65 6e 74 69 72 65  it.  This entire
1560: 20 23 69 66 20 62 6c 6f 63 6b 0a 2a 2a 20 77 6f   #if block.** wo
1570: 75 6c 64 20 62 65 20 63 6f 6d 70 6c 65 74 65 6c  uld be completel
1580: 79 20 75 6e 6e 65 63 65 73 73 61 72 79 20 69 66  y unnecessary if
1590: 20 74 68 65 72 65 20 77 61 73 20 61 6e 79 20 6f   there was any o
15a0: 74 68 65 72 20 77 61 79 20 6f 66 20 64 65 74 65  ther way of dete
15b0: 63 74 69 6e 67 0a 2a 2a 20 4d 69 6e 47 57 20 76  cting.** MinGW v
15c0: 69 61 20 74 68 65 69 72 20 70 72 65 70 72 6f 63  ia their preproc
15d0: 65 73 73 6f 72 20 28 65 2e 67 2e 20 69 66 20 74  essor (e.g. if t
15e0: 68 65 79 20 63 75 73 74 6f 6d 69 7a 65 64 20 74  hey customized t
15f0: 68 65 69 72 20 47 43 43 20 74 6f 20 64 65 66 69  heir GCC to defi
1600: 6e 65 0a 2a 2a 20 73 6f 6d 65 20 4d 69 6e 47 57  ne.** some MinGW
1610: 2d 73 70 65 63 69 66 69 63 20 6d 61 63 72 6f 73  -specific macros
1620: 29 2e 20 20 57 68 65 6e 20 63 6f 6d 70 69 6c 69  ).  When compili
1630: 6e 67 20 66 6f 72 20 4d 69 6e 47 57 2c 20 65 69  ng for MinGW, ei
1640: 74 68 65 72 20 74 68 65 0a 2a 2a 20 5f 48 41 56  ther the.** _HAV
1650: 45 5f 4d 49 4e 47 57 5f 48 20 6f 72 20 5f 48 41  E_MINGW_H or _HA
1660: 56 45 5f 5f 4d 49 4e 47 57 5f 48 20 28 6e 6f 74  VE__MINGW_H (not
1670: 65 20 74 68 65 20 65 78 74 72 61 20 75 6e 64 65  e the extra unde
1680: 72 73 63 6f 72 65 29 20 6d 61 63 72 6f 20 6d 75  rscore) macro mu
1690: 73 74 20 62 65 0a 2a 2a 20 64 65 66 69 6e 65 64  st be.** defined
16a0: 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 64 65 74  ; otherwise, det
16b0: 65 63 74 69 6f 6e 20 6f 66 20 63 6f 6e 64 69 74  ection of condit
16c0: 69 6f 6e 73 20 73 70 65 63 69 66 69 63 20 74 6f  ions specific to
16d0: 20 4d 69 6e 47 57 20 77 69 6c 6c 20 62 65 0a 2a   MinGW will be.*
16e0: 2a 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23  * disabled..*/.#
16f0: 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41 56 45  if defined(_HAVE
1700: 5f 4d 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63 6c  _MINGW_H).# incl
1710: 75 64 65 20 22 6d 69 6e 67 77 2e 68 22 0a 23 65  ude "mingw.h".#e
1720: 6c 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41 56  lif defined(_HAV
1730: 45 5f 5f 4d 49 4e 47 57 5f 48 29 0a 23 20 69 6e  E__MINGW_H).# in
1740: 63 6c 75 64 65 20 22 5f 6d 69 6e 67 77 2e 68 22  clude "_mingw.h"
1750: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46  .#endif../*.** F
1760: 6f 72 20 4d 69 6e 47 57 20 76 65 72 73 69 6f 6e  or MinGW version
1770: 20 34 2e 78 20 28 61 6e 64 20 68 69 67 68 65 72   4.x (and higher
1780: 29 2c 20 63 68 65 63 6b 20 74 6f 20 73 65 65 20  ), check to see 
1790: 69 66 20 74 68 65 20 5f 55 53 45 5f 33 32 42 49  if the _USE_32BI
17a0: 54 5f 54 49 4d 45 5f 54 0a 2a 2a 20 64 65 66 69  T_TIME_T.** defi
17b0: 6e 65 20 69 73 20 72 65 71 75 69 72 65 64 20 74  ne is required t
17c0: 6f 20 6d 61 69 6e 74 61 69 6e 20 62 69 6e 61 72  o maintain binar
17d0: 79 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20  y compatibility 
17e0: 77 69 74 68 20 74 68 65 20 4d 53 56 43 20 72 75  with the MSVC ru
17f0: 6e 74 69 6d 65 0a 2a 2a 20 6c 69 62 72 61 72 79  ntime.** library
1800: 20 69 6e 20 75 73 65 20 28 65 2e 67 2e 20 66 6f   in use (e.g. fo
1810: 72 20 57 69 6e 64 6f 77 73 20 58 50 29 2e 0a 2a  r Windows XP)..*
1820: 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f  /.#if !defined(_
1830: 55 53 45 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54  USE_32BIT_TIME_T
1840: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 55  ) && !defined(_U
1850: 53 45 5f 36 34 42 49 54 5f 54 49 4d 45 5f 54 29  SE_64BIT_TIME_T)
1860: 20 26 26 20 5c 0a 20 20 20 20 64 65 66 69 6e 65   && \.    define
1870: 64 28 5f 57 49 4e 33 32 29 20 26 26 20 21 64 65  d(_WIN32) && !de
1880: 66 69 6e 65 64 28 5f 57 49 4e 36 34 29 20 26 26  fined(_WIN64) &&
1890: 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f   \.    defined(_
18a0: 5f 4d 49 4e 47 57 5f 4d 41 4a 4f 52 5f 56 45 52  _MINGW_MAJOR_VER
18b0: 53 49 4f 4e 29 20 26 26 20 5f 5f 4d 49 4e 47 57  SION) && __MINGW
18c0: 5f 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e 20 3e  _MAJOR_VERSION >
18d0: 3d 20 34 20 26 26 20 5c 0a 20 20 20 20 64 65 66  = 4 && \.    def
18e0: 69 6e 65 64 28 5f 5f 4d 53 56 43 52 54 5f 5f 29  ined(__MSVCRT__)
18f0: 0a 23 20 64 65 66 69 6e 65 20 5f 55 53 45 5f 33  .# define _USE_3
1900: 32 42 49 54 5f 54 49 4d 45 5f 54 0a 23 65 6e 64  2BIT_TIME_T.#end
1910: 69 66 0a 0a 2f 2a 20 54 68 65 20 70 75 62 6c 69  if../* The publi
1920: 63 20 53 51 4c 69 74 65 20 69 6e 74 65 72 66 61  c SQLite interfa
1930: 63 65 2e 20 20 54 68 65 20 5f 46 49 4c 45 5f 4f  ce.  The _FILE_O
1940: 46 46 53 45 54 5f 42 49 54 53 20 6d 61 63 72 6f  FFSET_BITS macro
1950: 20 6d 75 73 74 20 61 70 70 65 61 72 0a 2a 2a 20   must appear.** 
1960: 66 69 72 73 74 20 69 6e 20 51 4e 58 2e 20 20 41  first in QNX.  A
1970: 6c 73 6f 2c 20 74 68 65 20 5f 55 53 45 5f 33 32  lso, the _USE_32
1980: 42 49 54 5f 54 49 4d 45 5f 54 20 6d 61 63 72 6f  BIT_TIME_T macro
1990: 20 6d 75 73 74 20 61 70 70 65 61 72 20 66 69 72   must appear fir
19a0: 73 74 20 66 6f 72 0a 2a 2a 20 4d 69 6e 47 57 2e  st for.** MinGW.
19b0: 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73 71  .*/.#include "sq
19c0: 6c 69 74 65 33 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20  lite3.h"../*.** 
19d0: 49 6e 63 6c 75 64 65 20 74 68 65 20 63 6f 6e 66  Include the conf
19e0: 69 67 75 72 61 74 69 6f 6e 20 68 65 61 64 65 72  iguration header
19f0: 20 6f 75 74 70 75 74 20 62 79 20 27 63 6f 6e 66   output by 'conf
1a00: 69 67 75 72 65 27 20 69 66 20 77 65 27 72 65 20  igure' if we're 
1a10: 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 61 75 74  using the.** aut
1a20: 6f 63 6f 6e 66 2d 62 61 73 65 64 20 62 75 69 6c  oconf-based buil
1a30: 64 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 48 41 56  d.*/.#ifdef _HAV
1a40: 45 5f 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f  E_SQLITE_CONFIG_
1a50: 48 0a 23 69 6e 63 6c 75 64 65 20 22 63 6f 6e 66  H.#include "conf
1a60: 69 67 2e 68 22 0a 23 65 6e 64 69 66 0a 0a 23 69  ig.h".#endif..#i
1a70: 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65 4c 69  nclude "sqliteLi
1a80: 6d 69 74 2e 68 22 0a 0a 2f 2a 20 44 69 73 61 62  mit.h"../* Disab
1a90: 6c 65 20 6e 75 69 73 61 6e 63 65 20 77 61 72 6e  le nuisance warn
1aa0: 69 6e 67 73 20 6f 6e 20 42 6f 72 6c 61 6e 64 20  ings on Borland 
1ab0: 63 6f 6d 70 69 6c 65 72 73 20 2a 2f 0a 23 69 66  compilers */.#if
1ac0: 20 64 65 66 69 6e 65 64 28 5f 5f 42 4f 52 4c 41   defined(__BORLA
1ad0: 4e 44 43 5f 5f 29 0a 23 70 72 61 67 6d 61 20 77  NDC__).#pragma w
1ae0: 61 72 6e 20 2d 72 63 68 20 2f 2a 20 75 6e 72 65  arn -rch /* unre
1af0: 61 63 68 61 62 6c 65 20 63 6f 64 65 20 2a 2f 0a  achable code */.
1b00: 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 63 63  #pragma warn -cc
1b10: 63 20 2f 2a 20 43 6f 6e 64 69 74 69 6f 6e 20 69  c /* Condition i
1b20: 73 20 61 6c 77 61 79 73 20 74 72 75 65 20 6f 72  s always true or
1b30: 20 66 61 6c 73 65 20 2a 2f 0a 23 70 72 61 67 6d   false */.#pragm
1b40: 61 20 77 61 72 6e 20 2d 61 75 73 20 2f 2a 20 41  a warn -aus /* A
1b50: 73 73 69 67 6e 65 64 20 76 61 6c 75 65 20 69 73  ssigned value is
1b60: 20 6e 65 76 65 72 20 75 73 65 64 20 2a 2f 0a 23   never used */.#
1b70: 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 63 73 75  pragma warn -csu
1b80: 20 2f 2a 20 43 6f 6d 70 61 72 69 6e 67 20 73 69   /* Comparing si
1b90: 67 6e 65 64 20 61 6e 64 20 75 6e 73 69 67 6e 65  gned and unsigne
1ba0: 64 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72  d */.#pragma war
1bb0: 6e 20 2d 73 70 61 20 2f 2a 20 53 75 73 70 69 63  n -spa /* Suspic
1bc0: 69 6f 75 73 20 70 6f 69 6e 74 65 72 20 61 72 69  ious pointer ari
1bd0: 74 68 6d 65 74 69 63 20 2a 2f 0a 23 65 6e 64 69  thmetic */.#endi
1be0: 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65  f../*.** Include
1bf0: 20 73 74 61 6e 64 61 72 64 20 68 65 61 64 65 72   standard header
1c00: 20 66 69 6c 65 73 20 61 73 20 6e 65 63 65 73 73   files as necess
1c10: 61 72 79 0a 2a 2f 0a 23 69 66 64 65 66 20 48 41  ary.*/.#ifdef HA
1c20: 56 45 5f 53 54 44 49 4e 54 5f 48 0a 23 69 6e 63  VE_STDINT_H.#inc
1c30: 6c 75 64 65 20 3c 73 74 64 69 6e 74 2e 68 3e 0a  lude <stdint.h>.
1c40: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 48 41  #endif.#ifdef HA
1c50: 56 45 5f 49 4e 54 54 59 50 45 53 5f 48 0a 23 69  VE_INTTYPES_H.#i
1c60: 6e 63 6c 75 64 65 20 3c 69 6e 74 74 79 70 65 73  nclude <inttypes
1c70: 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  .h>.#endif../*.*
1c80: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
1c90: 6d 61 63 72 6f 73 20 61 72 65 20 75 73 65 64 20  macros are used 
1ca0: 74 6f 20 63 61 73 74 20 70 6f 69 6e 74 65 72 73  to cast pointers
1cb0: 20 74 6f 20 69 6e 74 65 67 65 72 73 20 61 6e 64   to integers and
1cc0: 0a 2a 2a 20 69 6e 74 65 67 65 72 73 20 74 6f 20  .** integers to 
1cd0: 70 6f 69 6e 74 65 72 73 2e 20 20 54 68 65 20 77  pointers.  The w
1ce0: 61 79 20 79 6f 75 20 64 6f 20 74 68 69 73 20 76  ay you do this v
1cf0: 61 72 69 65 73 20 66 72 6f 6d 20 6f 6e 65 20 63  aries from one c
1d00: 6f 6d 70 69 6c 65 72 0a 2a 2a 20 74 6f 20 74 68  ompiler.** to th
1d10: 65 20 6e 65 78 74 2c 20 73 6f 20 77 65 20 68 61  e next, so we ha
1d20: 76 65 20 64 65 76 65 6c 6f 70 65 64 20 74 68 65  ve developed the
1d30: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 65 74 20 6f   following set o
1d40: 66 20 23 69 66 20 73 74 61 74 65 6d 65 6e 74 73  f #if statements
1d50: 0a 2a 2a 20 74 6f 20 67 65 6e 65 72 61 74 65 20  .** to generate 
1d60: 61 70 70 72 6f 70 72 69 61 74 65 20 6d 61 63 72  appropriate macr
1d70: 6f 73 20 66 6f 72 20 61 20 77 69 64 65 20 72 61  os for a wide ra
1d80: 6e 67 65 20 6f 66 20 63 6f 6d 70 69 6c 65 72 73  nge of compilers
1d90: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 72 72  ..**.** The corr
1da0: 65 63 74 20 22 41 4e 53 49 22 20 77 61 79 20 74  ect "ANSI" way t
1db0: 6f 20 64 6f 20 74 68 69 73 20 69 73 20 74 6f 20  o do this is to 
1dc0: 75 73 65 20 74 68 65 20 69 6e 74 70 74 72 5f 74  use the intptr_t
1dd0: 20 74 79 70 65 2e 0a 2a 2a 20 55 6e 66 6f 72 74   type..** Unfort
1de0: 75 6e 61 74 65 6c 79 2c 20 74 68 61 74 20 74 79  unately, that ty
1df0: 70 65 64 65 66 20 69 73 20 6e 6f 74 20 61 76 61  pedef is not ava
1e00: 69 6c 61 62 6c 65 20 6f 6e 20 61 6c 6c 20 63 6f  ilable on all co
1e10: 6d 70 69 6c 65 72 73 2c 20 6f 72 0a 2a 2a 20 69  mpilers, or.** i
1e20: 66 20 69 74 20 69 73 20 61 76 61 69 6c 61 62 6c  f it is availabl
1e30: 65 2c 20 69 74 20 72 65 71 75 69 72 65 73 20 61  e, it requires a
1e40: 6e 20 23 69 6e 63 6c 75 64 65 20 6f 66 20 73 70  n #include of sp
1e50: 65 63 69 66 69 63 20 68 65 61 64 65 72 73 0a 2a  ecific headers.*
1e60: 2a 20 74 68 61 74 20 76 61 72 79 20 66 72 6f 6d  * that vary from
1e70: 20 6f 6e 65 20 6d 61 63 68 69 6e 65 20 74 6f 20   one machine to 
1e80: 74 68 65 20 6e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20  the next..**.** 
1e90: 54 69 63 6b 65 74 20 23 33 38 36 30 3a 20 20 54  Ticket #3860:  T
1ea0: 68 65 20 6c 6c 76 6d 2d 67 63 63 2d 34 2e 32 20  he llvm-gcc-4.2 
1eb0: 63 6f 6d 70 69 6c 65 72 20 66 72 6f 6d 20 41 70  compiler from Ap
1ec0: 70 6c 65 20 63 68 6f 6b 65 73 20 6f 6e 0a 2a 2a  ple chokes on.**
1ed0: 20 74 68 65 20 28 28 76 6f 69 64 2a 29 26 28 28   the ((void*)&((
1ee0: 63 68 61 72 2a 29 30 29 5b 58 5d 29 20 63 6f 6e  char*)0)[X]) con
1ef0: 73 74 72 75 63 74 2e 20 20 42 75 74 20 4d 53 56  struct.  But MSV
1f00: 43 20 63 68 6f 6b 65 73 20 6f 6e 20 28 28 76 6f  C chokes on ((vo
1f10: 69 64 2a 29 28 58 29 29 2e 0a 2a 2a 20 53 6f 20  id*)(X))..** So 
1f20: 77 65 20 68 61 76 65 20 74 6f 20 64 65 66 69 6e  we have to defin
1f30: 65 20 74 68 65 20 6d 61 63 72 6f 73 20 69 6e 20  e the macros in 
1f40: 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20 64  different ways d
1f50: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 0a  epending on the.
1f60: 2a 2a 20 63 6f 6d 70 69 6c 65 72 2e 0a 2a 2f 0a  ** compiler..*/.
1f70: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 50 54  #if defined(__PT
1f80: 52 44 49 46 46 5f 54 59 50 45 5f 5f 29 20 20 2f  RDIFF_TYPE__)  /
1f90: 2a 20 54 68 69 73 20 63 61 73 65 20 73 68 6f 75  * This case shou
1fa0: 6c 64 20 77 6f 72 6b 20 66 6f 72 20 47 43 43 20  ld work for GCC 
1fb0: 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  */.# define SQLI
1fc0: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29  TE_INT_TO_PTR(X)
1fd0: 20 20 28 28 76 6f 69 64 2a 29 28 5f 5f 50 54 52    ((void*)(__PTR
1fe0: 44 49 46 46 5f 54 59 50 45 5f 5f 29 28 58 29 29  DIFF_TYPE__)(X))
1ff0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
2000: 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20  _PTR_TO_INT(X)  
2010: 28 28 69 6e 74 29 28 5f 5f 50 54 52 44 49 46 46  ((int)(__PTRDIFF
2020: 5f 54 59 50 45 5f 5f 29 28 58 29 29 0a 23 65 6c  _TYPE__)(X)).#el
2030: 69 66 20 21 64 65 66 69 6e 65 64 28 5f 5f 47 4e  if !defined(__GN
2040: 55 43 5f 5f 29 20 20 20 20 20 20 20 2f 2a 20 57  UC__)       /* W
2050: 6f 72 6b 73 20 66 6f 72 20 63 6f 6d 70 69 6c 65  orks for compile
2060: 72 73 20 6f 74 68 65 72 20 74 68 61 6e 20 4c 4c  rs other than LL
2070: 56 4d 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53  VM */.# define S
2080: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
2090: 28 58 29 20 20 28 28 76 6f 69 64 2a 29 26 28 28  (X)  ((void*)&((
20a0: 63 68 61 72 2a 29 30 29 5b 58 5d 29 0a 23 20 64  char*)0)[X]).# d
20b0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
20c0: 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e  _TO_INT(X)  ((in
20d0: 74 29 28 28 28 63 68 61 72 2a 29 58 29 2d 28 63  t)(((char*)X)-(c
20e0: 68 61 72 2a 29 30 29 29 0a 23 65 6c 69 66 20 64  har*)0)).#elif d
20f0: 65 66 69 6e 65 64 28 48 41 56 45 5f 53 54 44 49  efined(HAVE_STDI
2100: 4e 54 5f 48 29 20 20 20 2f 2a 20 55 73 65 20 74  NT_H)   /* Use t
2110: 68 69 73 20 63 61 73 65 20 69 66 20 77 65 20 68  his case if we h
2120: 61 76 65 20 41 4e 53 49 20 68 65 61 64 65 72 73  ave ANSI headers
2130: 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c   */.# define SQL
2140: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58  ITE_INT_TO_PTR(X
2150: 29 20 20 28 28 76 6f 69 64 2a 29 28 69 6e 74 70  )  ((void*)(intp
2160: 74 72 5f 74 29 28 58 29 29 0a 23 20 64 65 66 69  tr_t)(X)).# defi
2170: 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f  ne SQLITE_PTR_TO
2180: 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28  _INT(X)  ((int)(
2190: 69 6e 74 70 74 72 5f 74 29 28 58 29 29 0a 23 65  intptr_t)(X)).#e
21a0: 6c 73 65 20 20 20 20 20 20 20 20 20 20 20 20 20  lse             
21b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
21c0: 47 65 6e 65 72 61 74 65 73 20 61 20 77 61 72 6e  Generates a warn
21d0: 69 6e 67 20 2d 20 62 75 74 20 69 74 20 61 6c 77  ing - but it alw
21e0: 61 79 73 20 77 6f 72 6b 73 20 2a 2f 0a 23 20 64  ays works */.# d
21f0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54  efine SQLITE_INT
2200: 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f  _TO_PTR(X)  ((vo
2210: 69 64 2a 29 28 58 29 29 0a 23 20 64 65 66 69 6e  id*)(X)).# defin
2220: 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f  e SQLITE_PTR_TO_
2230: 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 58  INT(X)  ((int)(X
2240: 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  )).#endif../*.**
2250: 20 41 20 6d 61 63 72 6f 20 74 6f 20 68 69 6e 74   A macro to hint
2260: 20 74 6f 20 74 68 65 20 63 6f 6d 70 69 6c 65 72   to the compiler
2270: 20 74 68 61 74 20 61 20 66 75 6e 63 74 69 6f 6e   that a function
2280: 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 0a 2a   should not be.*
2290: 2a 20 69 6e 6c 69 6e 65 64 2e 0a 2a 2f 0a 23 69  * inlined..*/.#i
22a0: 66 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43  f defined(__GNUC
22b0: 5f 5f 29 0a 23 20 20 64 65 66 69 6e 65 20 53 51  __).#  define SQ
22c0: 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20 5f  LITE_NOINLINE  _
22d0: 5f 61 74 74 72 69 62 75 74 65 5f 5f 28 28 6e 6f  _attribute__((no
22e0: 69 6e 6c 69 6e 65 29 29 0a 23 65 6c 69 66 20 64  inline)).#elif d
22f0: 65 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29  efined(_MSC_VER)
2300: 20 26 26 20 5f 4d 53 43 5f 56 45 52 3e 3d 31 33   && _MSC_VER>=13
2310: 31 30 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c  10.#  define SQL
2320: 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20 5f 5f  ITE_NOINLINE  __
2330: 64 65 63 6c 73 70 65 63 28 6e 6f 69 6e 6c 69 6e  declspec(noinlin
2340: 65 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69  e).#else.#  defi
2350: 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49  ne SQLITE_NOINLI
2360: 4e 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  NE.#endif../*.**
2370: 20 4d 61 6b 65 20 73 75 72 65 20 74 68 61 74 20   Make sure that 
2380: 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 69 6e 74  the compiler int
2390: 72 69 6e 73 69 63 73 20 77 65 20 64 65 73 69 72  rinsics we desir
23a0: 65 20 61 72 65 20 65 6e 61 62 6c 65 64 20 77 68  e are enabled wh
23b0: 65 6e 0a 2a 2a 20 63 6f 6d 70 69 6c 69 6e 67 20  en.** compiling 
23c0: 77 69 74 68 20 61 6e 20 61 70 70 72 6f 70 72 69  with an appropri
23d0: 61 74 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 4d  ate version of M
23e0: 53 56 43 20 75 6e 6c 65 73 73 20 70 72 65 76 65  SVC unless preve
23f0: 6e 74 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 53  nted by.** the S
2400: 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e  QLITE_DISABLE_IN
2410: 54 52 49 4e 53 49 43 20 64 65 66 69 6e 65 2e 0a  TRINSIC define..
2420: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
2430: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 49  SQLITE_DISABLE_I
2440: 4e 54 52 49 4e 53 49 43 29 0a 23 20 20 69 66 20  NTRINSIC).#  if 
2450: 64 65 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52  defined(_MSC_VER
2460: 29 20 26 26 20 5f 4d 53 43 5f 56 45 52 3e 3d 31  ) && _MSC_VER>=1
2470: 34 30 30 0a 23 20 20 20 20 69 66 20 21 64 65 66  400.#    if !def
2480: 69 6e 65 64 28 5f 57 49 4e 33 32 5f 57 43 45 29  ined(_WIN32_WCE)
2490: 0a 23 20 20 20 20 20 20 69 6e 63 6c 75 64 65 20  .#      include 
24a0: 3c 69 6e 74 72 69 6e 2e 68 3e 0a 23 20 20 20 20  <intrin.h>.#    
24b0: 20 20 70 72 61 67 6d 61 20 69 6e 74 72 69 6e 73    pragma intrins
24c0: 69 63 28 5f 62 79 74 65 73 77 61 70 5f 75 73 68  ic(_byteswap_ush
24d0: 6f 72 74 29 0a 23 20 20 20 20 20 20 70 72 61 67  ort).#      prag
24e0: 6d 61 20 69 6e 74 72 69 6e 73 69 63 28 5f 62 79  ma intrinsic(_by
24f0: 74 65 73 77 61 70 5f 75 6c 6f 6e 67 29 0a 23 20  teswap_ulong).# 
2500: 20 20 20 20 20 70 72 61 67 6d 61 20 69 6e 74 72       pragma intr
2510: 69 6e 73 69 63 28 5f 62 79 74 65 73 77 61 70 5f  insic(_byteswap_
2520: 75 69 6e 74 36 34 29 0a 23 20 20 20 20 20 20 70  uint64).#      p
2530: 72 61 67 6d 61 20 69 6e 74 72 69 6e 73 69 63 28  ragma intrinsic(
2540: 5f 52 65 61 64 57 72 69 74 65 42 61 72 72 69 65  _ReadWriteBarrie
2550: 72 29 0a 23 20 20 20 20 65 6c 73 65 0a 23 20 20  r).#    else.#  
2560: 20 20 20 20 69 6e 63 6c 75 64 65 20 3c 63 6d 6e      include <cmn
2570: 69 6e 74 72 69 6e 2e 68 3e 0a 23 20 20 20 20 65  intrin.h>.#    e
2580: 6e 64 69 66 0a 23 20 20 65 6e 64 69 66 0a 23 65  ndif.#  endif.#e
2590: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
25a0: 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46  SQLITE_THREADSAF
25b0: 45 20 6d 61 63 72 6f 20 6d 75 73 74 20 62 65 20  E macro must be 
25c0: 64 65 66 69 6e 65 64 20 61 73 20 30 2c 20 31 2c  defined as 0, 1,
25d0: 20 6f 72 20 32 2e 0a 2a 2a 20 30 20 6d 65 61 6e   or 2..** 0 mean
25e0: 73 20 6d 75 74 65 78 65 73 20 61 72 65 20 70 65  s mutexes are pe
25f0: 72 6d 61 6e 65 6e 74 6c 79 20 64 69 73 61 62 6c  rmanently disabl
2600: 65 20 61 6e 64 20 74 68 65 20 6c 69 62 72 61 72  e and the librar
2610: 79 20 69 73 20 6e 65 76 65 72 0a 2a 2a 20 74 68  y is never.** th
2620: 72 65 61 64 73 61 66 65 2e 20 20 31 20 6d 65 61  readsafe.  1 mea
2630: 6e 73 20 74 68 65 20 6c 69 62 72 61 72 79 20 69  ns the library i
2640: 73 20 73 65 72 69 61 6c 69 7a 65 64 20 77 68 69  s serialized whi
2650: 63 68 20 69 73 20 74 68 65 20 68 69 67 68 65 73  ch is the highes
2660: 74 0a 2a 2a 20 6c 65 76 65 6c 20 6f 66 20 74 68  t.** level of th
2670: 72 65 61 64 73 61 66 65 74 79 2e 20 20 32 20 6d  readsafety.  2 m
2680: 65 61 6e 73 20 74 68 65 20 6c 69 62 72 61 72 79  eans the library
2690: 20 69 73 20 6d 75 6c 74 69 74 68 72 65 61 64 65   is multithreade
26a0: 64 20 2d 20 6d 75 6c 74 69 70 6c 65 0a 2a 2a 20  d - multiple.** 
26b0: 74 68 72 65 61 64 73 20 63 61 6e 20 75 73 65 20  threads can use 
26c0: 53 51 4c 69 74 65 20 61 73 20 6c 6f 6e 67 20 61  SQLite as long a
26d0: 73 20 6e 6f 20 74 77 6f 20 74 68 72 65 61 64 73  s no two threads
26e0: 20 74 72 79 20 74 6f 20 75 73 65 20 74 68 65 20   try to use the 
26f0: 73 61 6d 65 0a 2a 2a 20 64 61 74 61 62 61 73 65  same.** database
2700: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 74 20 74   connection at t
2710: 68 65 20 73 61 6d 65 20 74 69 6d 65 2e 0a 2a 2a  he same time..**
2720: 0a 2a 2a 20 4f 6c 64 65 72 20 76 65 72 73 69 6f  .** Older versio
2730: 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 75 73 65  ns of SQLite use
2740: 64 20 61 6e 20 6f 70 74 69 6f 6e 61 6c 20 54 48  d an optional TH
2750: 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f 2e 0a  READSAFE macro..
2760: 2a 2a 20 57 65 20 73 75 70 70 6f 72 74 20 74 68  ** We support th
2770: 61 74 20 66 6f 72 20 6c 65 67 61 63 79 2e 0a 2a  at for legacy..*
2780: 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  /.#if !defined(S
2790: 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45  QLITE_THREADSAFE
27a0: 29 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28 54  ).# if defined(T
27b0: 48 52 45 41 44 53 41 46 45 29 0a 23 20 20 20 64  HREADSAFE).#   d
27c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 48 52  efine SQLITE_THR
27d0: 45 41 44 53 41 46 45 20 54 48 52 45 41 44 53 41  EADSAFE THREADSA
27e0: 46 45 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65  FE.# else.#   de
27f0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 48 52 45  fine SQLITE_THRE
2800: 41 44 53 41 46 45 20 31 20 2f 2a 20 49 4d 50 3a  ADSAFE 1 /* IMP:
2810: 20 52 2d 30 37 32 37 32 2d 32 32 33 30 39 20 2a   R-07272-22309 *
2820: 2f 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  /.# endif.#endif
2830: 0a 0a 2f 2a 0a 2a 2a 20 50 6f 77 65 72 73 61 66  ../*.** Powersaf
2840: 65 20 6f 76 65 72 77 72 69 74 65 20 69 73 20 6f  e overwrite is o
2850: 6e 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20 42  n by default.  B
2860: 75 74 20 63 61 6e 20 62 65 20 74 75 72 6e 65 64  ut can be turned
2870: 20 6f 66 66 20 75 73 69 6e 67 0a 2a 2a 20 74 68   off using.** th
2880: 65 20 2d 44 53 51 4c 49 54 45 5f 50 4f 57 45 52  e -DSQLITE_POWER
2890: 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45 3d 30  SAFE_OVERWRITE=0
28a0: 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f 70   command-line op
28b0: 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  tion..*/.#ifndef
28c0: 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46   SQLITE_POWERSAF
28d0: 45 5f 4f 56 45 52 57 52 49 54 45 0a 23 20 64 65  E_OVERWRITE.# de
28e0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 4f 57 45  fine SQLITE_POWE
28f0: 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45 20  RSAFE_OVERWRITE 
2900: 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
2910: 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32  EVIDENCE-OF: R-2
2920: 35 37 31 35 2d 33 37 30 37 32 20 4d 65 6d 6f 72  5715-37072 Memor
2930: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61  y allocation sta
2940: 74 69 73 74 69 63 73 20 61 72 65 20 65 6e 61 62  tistics are enab
2950: 6c 65 64 20 62 79 0a 2a 2a 20 64 65 66 61 75 6c  led by.** defaul
2960: 74 20 75 6e 6c 65 73 73 20 53 51 4c 69 74 65 20  t unless SQLite 
2970: 69 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68  is compiled with
2980: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
2990: 4d 45 4d 53 54 41 54 55 53 3d 30 20 69 6e 0a 2a  MEMSTATUS=0 in.*
29a0: 2a 20 77 68 69 63 68 20 63 61 73 65 20 6d 65 6d  * which case mem
29b0: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73  ory allocation s
29c0: 74 61 74 69 73 74 69 63 73 20 61 72 65 20 64 69  tatistics are di
29d0: 73 61 62 6c 65 64 20 62 79 20 64 65 66 61 75 6c  sabled by defaul
29e0: 74 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  t..*/.#if !defin
29f0: 65 64 28 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ed(SQLITE_DEFAUL
2a00: 54 5f 4d 45 4d 53 54 41 54 55 53 29 0a 23 20 64  T_MEMSTATUS).# d
2a10: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
2a20: 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 20 31  AULT_MEMSTATUS 1
2a30: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45  .#endif../*.** E
2a40: 78 61 63 74 6c 79 20 6f 6e 65 20 6f 66 20 74 68  xactly one of th
2a50: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
2a60: 6f 73 20 6d 75 73 74 20 62 65 20 64 65 66 69 6e  os must be defin
2a70: 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a  ed in order to.*
2a80: 2a 20 73 70 65 63 69 66 79 20 77 68 69 63 68 20  * specify which 
2a90: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
2aa0: 6e 20 73 75 62 73 79 73 74 65 6d 20 74 6f 20 75  n subsystem to u
2ab0: 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 51  se..**.**     SQ
2ac0: 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c  LITE_SYSTEM_MALL
2ad0: 4f 43 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55  OC          // U
2ae0: 73 65 20 6e 6f 72 6d 61 6c 20 73 79 73 74 65 6d  se normal system
2af0: 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20 20   malloc().**    
2b00: 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41   SQLITE_WIN32_MA
2b10: 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20 20 2f  LLOC           /
2b20: 2f 20 55 73 65 20 57 69 6e 33 32 20 6e 61 74 69  / Use Win32 nati
2b30: 76 65 20 68 65 61 70 20 41 50 49 0a 2a 2a 20 20  ve heap API.**  
2b40: 20 20 20 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d     SQLITE_ZERO_M
2b50: 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20 20  ALLOC           
2b60: 20 2f 2f 20 55 73 65 20 61 20 73 74 75 62 20 61   // Use a stub a
2b70: 6c 6c 6f 63 61 74 6f 72 20 74 68 61 74 20 61 6c  llocator that al
2b80: 77 61 79 73 20 66 61 69 6c 73 0a 2a 2a 20 20 20  ways fails.**   
2b90: 20 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55    SQLITE_MEMDEBU
2ba0: 47 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  G               
2bb0: 2f 2f 20 44 65 62 75 67 67 69 6e 67 20 76 65 72  // Debugging ver
2bc0: 73 69 6f 6e 20 6f 66 20 73 79 73 74 65 6d 20 6d  sion of system m
2bd0: 61 6c 6c 6f 63 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e  alloc().**.** On
2be0: 20 57 69 6e 64 6f 77 73 2c 20 69 66 20 74 68 65   Windows, if the
2bf0: 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41   SQLITE_WIN32_MA
2c00: 4c 4c 4f 43 5f 56 41 4c 49 44 41 54 45 20 6d 61  LLOC_VALIDATE ma
2c10: 63 72 6f 20 69 73 20 64 65 66 69 6e 65 64 20 61  cro is defined a
2c20: 6e 64 20 74 68 65 0a 2a 2a 20 61 73 73 65 72 74  nd the.** assert
2c30: 28 29 20 6d 61 63 72 6f 20 69 73 20 65 6e 61 62  () macro is enab
2c40: 6c 65 64 2c 20 65 61 63 68 20 63 61 6c 6c 20 69  led, each call i
2c50: 6e 74 6f 20 74 68 65 20 57 69 6e 33 32 20 6e 61  nto the Win32 na
2c60: 74 69 76 65 20 68 65 61 70 20 73 75 62 73 79 73  tive heap subsys
2c70: 74 65 6d 0a 2a 2a 20 77 69 6c 6c 20 63 61 75 73  tem.** will caus
2c80: 65 20 48 65 61 70 56 61 6c 69 64 61 74 65 20 74  e HeapValidate t
2c90: 6f 20 62 65 20 63 61 6c 6c 65 64 2e 20 20 49 66  o be called.  If
2ca0: 20 68 65 61 70 20 76 61 6c 69 64 61 74 69 6f 6e   heap validation
2cb0: 20 73 68 6f 75 6c 64 20 66 61 69 6c 2c 20 61 6e   should fail, an
2cc0: 0a 2a 2a 20 61 73 73 65 72 74 69 6f 6e 20 77 69  .** assertion wi
2cd0: 6c 6c 20 62 65 20 74 72 69 67 67 65 72 65 64 2e  ll be triggered.
2ce0: 0a 2a 2a 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f  .**.** If none o
2cf0: 66 20 74 68 65 20 61 62 6f 76 65 20 61 72 65 20  f the above are 
2d00: 64 65 66 69 6e 65 64 2c 20 74 68 65 6e 20 73 65  defined, then se
2d10: 74 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  t SQLITE_SYSTEM_
2d20: 4d 41 4c 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65  MALLOC as.** the
2d30: 20 64 65 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66   default..*/.#if
2d40: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2d50: 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c  SYSTEM_MALLOC) \
2d60: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
2d70: 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43  ITE_WIN32_MALLOC
2d80: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
2d90: 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c  SQLITE_ZERO_MALL
2da0: 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65  OC) \.  + define
2db0: 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  d(SQLITE_MEMDEBU
2dc0: 47 29 3e 31 0a 23 20 65 72 72 6f 72 20 22 54 77  G)>1.# error "Tw
2dd0: 6f 20 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68 65  o or more of the
2de0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 69   following compi
2df0: 6c 65 2d 74 69 6d 65 20 63 6f 6e 66 69 67 75 72  le-time configur
2e00: 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20  ation options\. 
2e10: 61 72 65 20 64 65 66 69 6e 65 64 20 62 75 74 20  are defined but 
2e20: 61 74 20 6d 6f 73 74 20 6f 6e 65 20 69 73 20 61  at most one is a
2e30: 6c 6c 6f 77 65 64 3a 5c 0a 20 53 51 4c 49 54 45  llowed:\. SQLITE
2e40: 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20  _SYSTEM_MALLOC, 
2e50: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c  SQLITE_WIN32_MAL
2e60: 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 4d 45 4d 44  LOC, SQLITE_MEMD
2e70: 45 42 55 47 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a  EBUG,\. SQLITE_Z
2e80: 45 52 4f 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64  ERO_MALLOC".#end
2e90: 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  if.#if defined(S
2ea0: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
2eb0: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
2ec0: 65 64 28 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f  ed(SQLITE_WIN32_
2ed0: 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65  MALLOC) \.  + de
2ee0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 5a 45 52  fined(SQLITE_ZER
2ef0: 4f 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20  O_MALLOC) \.  + 
2f00: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d  defined(SQLITE_M
2f10: 45 4d 44 45 42 55 47 29 3d 3d 30 0a 23 20 64 65  EMDEBUG)==0.# de
2f20: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 59 53 54  fine SQLITE_SYST
2f30: 45 4d 5f 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64  EM_MALLOC 1.#end
2f40: 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c  if../*.** If SQL
2f50: 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f  ITE_MALLOC_SOFT_
2f60: 4c 49 4d 49 54 20 69 73 20 6e 6f 74 20 7a 65 72  LIMIT is not zer
2f70: 6f 2c 20 74 68 65 6e 20 74 72 79 20 74 6f 20 6b  o, then try to k
2f80: 65 65 70 20 74 68 65 0a 2a 2a 20 73 69 7a 65 73  eep the.** sizes
2f90: 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63   of memory alloc
2fa0: 61 74 69 6f 6e 73 20 62 65 6c 6f 77 20 74 68 69  ations below thi
2fb0: 73 20 76 61 6c 75 65 20 77 68 65 72 65 20 70 6f  s value where po
2fc0: 73 73 69 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21  ssible..*/.#if !
2fd0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d  defined(SQLITE_M
2fe0: 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54  ALLOC_SOFT_LIMIT
2ff0: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
3000: 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49  E_MALLOC_SOFT_LI
3010: 4d 49 54 20 31 30 32 34 0a 23 65 6e 64 69 66 0a  MIT 1024.#endif.
3020: 0a 2f 2a 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74  ./*.** We need t
3030: 6f 20 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f  o define _XOPEN_
3040: 53 4f 55 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77  SOURCE as follow
3050: 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e  s in order to en
3060: 61 62 6c 65 0a 2a 2a 20 72 65 63 75 72 73 69 76  able.** recursiv
3070: 65 20 6d 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73  e mutexes on mos
3080: 74 20 55 6e 69 78 20 73 79 73 74 65 6d 73 20 61  t Unix systems a
3090: 6e 64 20 66 63 68 6d 6f 64 28 29 20 6f 6e 20 4f  nd fchmod() on O
30a0: 70 65 6e 42 53 44 2e 0a 2a 2a 20 42 75 74 20 5f  penBSD..** But _
30b0: 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 64 65 66  XOPEN_SOURCE def
30c0: 69 6e 65 20 63 61 75 73 65 73 20 70 72 6f 62 6c  ine causes probl
30d0: 65 6d 73 20 66 6f 72 20 4d 61 63 20 4f 53 20 58  ems for Mac OS X
30e0: 2c 20 73 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74 2e  , so omit.** it.
30f0: 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
3100: 28 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 29 20  (_XOPEN_SOURCE) 
3110: 26 26 20 21 64 65 66 69 6e 65 64 28 5f 5f 44 41  && !defined(__DA
3120: 52 57 49 4e 5f 5f 29 20 26 26 20 21 64 65 66 69  RWIN__) && !defi
3130: 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 23  ned(__APPLE__).#
3140: 20 20 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f    define _XOPEN_
3150: 53 4f 55 52 43 45 20 36 30 30 0a 23 65 6e 64 69  SOURCE 600.#endi
3160: 66 0a 0a 2f 2a 0a 2a 2a 20 4e 44 45 42 55 47 20  f../*.** NDEBUG 
3170: 61 6e 64 20 53 51 4c 49 54 45 5f 44 45 42 55 47  and SQLITE_DEBUG
3180: 20 61 72 65 20 6f 70 70 6f 73 69 74 65 73 2e 20   are opposites. 
3190: 20 49 74 20 73 68 6f 75 6c 64 20 61 6c 77 61 79   It should alway
31a0: 73 20 62 65 20 74 72 75 65 20 74 68 61 74 0a 2a  s be true that.*
31b0: 2a 20 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47  * defined(NDEBUG
31c0: 29 3d 3d 21 64 65 66 69 6e 65 64 28 53 51 4c 49  )==!defined(SQLI
31d0: 54 45 5f 44 45 42 55 47 29 2e 20 20 49 66 20 74  TE_DEBUG).  If t
31e0: 68 69 73 20 69 73 20 6e 6f 74 20 63 75 72 72 65  his is not curre
31f0: 6e 74 6c 79 20 74 72 75 65 2c 0a 2a 2a 20 6d 61  ntly true,.** ma
3200: 6b 65 20 69 74 20 74 72 75 65 20 62 79 20 64 65  ke it true by de
3210: 66 69 6e 69 6e 67 20 6f 72 20 75 6e 64 65 66 69  fining or undefi
3220: 6e 69 6e 67 20 4e 44 45 42 55 47 2e 0a 2a 2a 0a  ning NDEBUG..**.
3230: 2a 2a 20 53 65 74 74 69 6e 67 20 4e 44 45 42 55  ** Setting NDEBU
3240: 47 20 6d 61 6b 65 73 20 74 68 65 20 63 6f 64 65  G makes the code
3250: 20 73 6d 61 6c 6c 65 72 20 61 6e 64 20 66 61 73   smaller and fas
3260: 74 65 72 20 62 79 20 64 69 73 61 62 6c 69 6e 67  ter by disabling
3270: 20 74 68 65 0a 2a 2a 20 61 73 73 65 72 74 28 29   the.** assert()
3280: 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74   statements in t
3290: 68 65 20 63 6f 64 65 2e 20 20 53 6f 20 77 65 20  he code.  So we 
32a0: 77 61 6e 74 20 74 68 65 20 64 65 66 61 75 6c 74  want the default
32b0: 20 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65   action.** to be
32c0: 20 66 6f 72 20 4e 44 45 42 55 47 20 74 6f 20 62   for NDEBUG to b
32d0: 65 20 73 65 74 20 61 6e 64 20 4e 44 45 42 55 47  e set and NDEBUG
32e0: 20 74 6f 20 62 65 20 75 6e 64 65 66 69 6e 65 64   to be undefined
32f0: 20 6f 6e 6c 79 20 69 66 20 53 51 4c 49 54 45 5f   only if SQLITE_
3300: 44 45 42 55 47 0a 2a 2a 20 69 73 20 73 65 74 2e  DEBUG.** is set.
3310: 20 20 54 68 75 73 20 4e 44 45 42 55 47 20 62 65    Thus NDEBUG be
3320: 63 6f 6d 65 73 20 61 6e 20 6f 70 74 2d 69 6e 20  comes an opt-in 
3330: 72 61 74 68 65 72 20 74 68 61 6e 20 61 6e 20 6f  rather than an o
3340: 70 74 2d 6f 75 74 0a 2a 2a 20 66 65 61 74 75 72  pt-out.** featur
3350: 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  e..*/.#if !defin
3360: 65 64 28 4e 44 45 42 55 47 29 20 26 26 20 21 64  ed(NDEBUG) && !d
3370: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
3380: 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 4e 44  BUG).# define ND
3390: 45 42 55 47 20 31 0a 23 65 6e 64 69 66 0a 23 69  EBUG 1.#endif.#i
33a0: 66 20 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47  f defined(NDEBUG
33b0: 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c  ) && defined(SQL
33c0: 49 54 45 5f 44 45 42 55 47 29 0a 23 20 75 6e 64  ITE_DEBUG).# und
33d0: 65 66 20 4e 44 45 42 55 47 0a 23 65 6e 64 69 66  ef NDEBUG.#endif
33e0: 0a 0a 2f 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20 53  ../*.** Enable S
33f0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50  QLITE_ENABLE_EXP
3400: 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69 66  LAIN_COMMENTS if
3410: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 69 73   SQLITE_DEBUG is
3420: 20 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23   turned on..*/.#
3430: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
3440: 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49  TE_ENABLE_EXPLAI
3450: 4e 5f 43 4f 4d 4d 45 4e 54 53 29 20 26 26 20 64  N_COMMENTS) && d
3460: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
3470: 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 53 51  BUG).# define SQ
3480: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c  LITE_ENABLE_EXPL
3490: 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 31 0a 23  AIN_COMMENTS 1.#
34a0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
34b0: 20 74 65 73 74 63 61 73 65 28 29 20 6d 61 63 72   testcase() macr
34c0: 6f 20 69 73 20 75 73 65 64 20 74 6f 20 61 69 64  o is used to aid
34d0: 20 69 6e 20 63 6f 76 65 72 61 67 65 20 74 65 73   in coverage tes
34e0: 74 69 6e 67 2e 20 20 57 68 65 6e 0a 2a 2a 20 64  ting.  When.** d
34f0: 6f 69 6e 67 20 63 6f 76 65 72 61 67 65 20 74 65  oing coverage te
3500: 73 74 69 6e 67 2c 20 74 68 65 20 63 6f 6e 64 69  sting, the condi
3510: 74 69 6f 6e 20 69 6e 73 69 64 65 20 74 68 65 20  tion inside the 
3520: 61 72 67 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20 74  argument to.** t
3530: 65 73 74 63 61 73 65 28 29 20 6d 75 73 74 20 62  estcase() must b
3540: 65 20 65 76 61 6c 75 61 74 65 64 20 62 6f 74 68  e evaluated both
3550: 20 74 72 75 65 20 61 6e 64 20 66 61 6c 73 65 20   true and false 
3560: 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67  in order to.** g
3570: 65 74 20 66 75 6c 6c 20 62 72 61 6e 63 68 20 63  et full branch c
3580: 6f 76 65 72 61 67 65 2e 20 20 54 68 65 20 74 65  overage.  The te
3590: 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f 20 69  stcase() macro i
35a0: 73 20 69 6e 73 65 72 74 65 64 0a 2a 2a 20 74 6f  s inserted.** to
35b0: 20 68 65 6c 70 20 65 6e 73 75 72 65 20 61 64 65   help ensure ade
35c0: 71 75 61 74 65 20 74 65 73 74 20 63 6f 76 65 72  quate test cover
35d0: 61 67 65 20 69 6e 20 70 6c 61 63 65 73 20 77 68  age in places wh
35e0: 65 72 65 20 73 69 6d 70 6c 65 0a 2a 2a 20 63 6f  ere simple.** co
35f0: 6e 64 69 74 69 6f 6e 2f 64 65 63 69 73 69 6f 6e  ndition/decision
3600: 20 63 6f 76 65 72 61 67 65 20 69 73 20 69 6e 61   coverage is ina
3610: 64 65 71 75 61 74 65 2e 20 20 46 6f 72 20 65 78  dequate.  For ex
3620: 61 6d 70 6c 65 2c 20 74 65 73 74 63 61 73 65 28  ample, testcase(
3630: 29 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64  ).** can be used
3640: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 62 6f   to make sure bo
3650: 75 6e 64 61 72 79 20 76 61 6c 75 65 73 20 61 72  undary values ar
3660: 65 20 74 65 73 74 65 64 2e 20 20 46 6f 72 0a 2a  e tested.  For.*
3670: 2a 20 62 69 74 6d 61 73 6b 20 74 65 73 74 73 2c  * bitmask tests,
3680: 20 74 65 73 74 63 61 73 65 28 29 20 63 61 6e 20   testcase() can 
3690: 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20  be used to make 
36a0: 73 75 72 65 20 65 61 63 68 20 62 69 74 0a 2a 2a  sure each bit.**
36b0: 20 69 73 20 73 69 67 6e 69 66 69 63 61 6e 74 20   is significant 
36c0: 61 6e 64 20 75 73 65 64 20 61 74 20 6c 65 61 73  and used at leas
36d0: 74 20 6f 6e 63 65 2e 20 20 4f 6e 20 73 77 69 74  t once.  On swit
36e0: 63 68 20 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a  ch statements.**
36f0: 20 77 68 65 72 65 20 6d 75 6c 74 69 70 6c 65 20   where multiple 
3700: 63 61 73 65 73 20 67 6f 20 74 6f 20 74 68 65 20  cases go to the 
3710: 73 61 6d 65 20 62 6c 6f 63 6b 20 6f 66 20 63 6f  same block of co
3720: 64 65 2c 20 74 65 73 74 63 61 73 65 28 29 0a 2a  de, testcase().*
3730: 2a 20 63 61 6e 20 69 6e 73 75 72 65 20 74 68 61  * can insure tha
3740: 74 20 61 6c 6c 20 63 61 73 65 73 20 61 72 65 20  t all cases are 
3750: 65 76 61 6c 75 61 74 65 64 2e 0a 2a 2a 0a 2a 2f  evaluated..**.*/
3760: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 43  .#ifdef SQLITE_C
3770: 4f 56 45 52 41 47 45 5f 54 45 53 54 0a 20 20 76  OVERAGE_TEST.  v
3780: 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 76 65 72  oid sqlite3Cover
3790: 61 67 65 28 69 6e 74 29 3b 0a 23 20 64 65 66 69  age(int);.# defi
37a0: 6e 65 20 74 65 73 74 63 61 73 65 28 58 29 20 20  ne testcase(X)  
37b0: 69 66 28 20 58 20 29 7b 20 73 71 6c 69 74 65 33  if( X ){ sqlite3
37c0: 43 6f 76 65 72 61 67 65 28 5f 5f 4c 49 4e 45 5f  Coverage(__LINE_
37d0: 5f 29 3b 20 7d 0a 23 65 6c 73 65 0a 23 20 64 65  _); }.#else.# de
37e0: 66 69 6e 65 20 74 65 73 74 63 61 73 65 28 58 29  fine testcase(X)
37f0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
3800: 68 65 20 54 45 53 54 4f 4e 4c 59 20 6d 61 63 72  he TESTONLY macr
3810: 6f 20 69 73 20 75 73 65 64 20 74 6f 20 65 6e 63  o is used to enc
3820: 6c 6f 73 65 20 76 61 72 69 61 62 6c 65 20 64 65  lose variable de
3830: 63 6c 61 72 61 74 69 6f 6e 73 20 6f 72 0a 2a 2a  clarations or.**
3840: 20 6f 74 68 65 72 20 62 69 74 73 20 6f 66 20 63   other bits of c
3850: 6f 64 65 20 74 68 61 74 20 61 72 65 20 6e 65 65  ode that are nee
3860: 64 65 64 20 74 6f 20 73 75 70 70 6f 72 74 20 74  ded to support t
3870: 68 65 20 61 72 67 75 6d 65 6e 74 73 0a 2a 2a 20  he arguments.** 
3880: 77 69 74 68 69 6e 20 74 65 73 74 63 61 73 65 28  within testcase(
3890: 29 20 61 6e 64 20 61 73 73 65 72 74 28 29 20 6d  ) and assert() m
38a0: 61 63 72 6f 73 2e 0a 2a 2f 0a 23 69 66 20 21 64  acros..*/.#if !d
38b0: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 7c  efined(NDEBUG) |
38c0: 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
38d0: 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54 29 0a  _COVERAGE_TEST).
38e0: 23 20 64 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c  # define TESTONL
38f0: 59 28 58 29 20 20 58 0a 23 65 6c 73 65 0a 23 20  Y(X)  X.#else.# 
3900: 64 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28  define TESTONLY(
3910: 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  X).#endif../*.**
3920: 20 53 6f 6d 65 74 69 6d 65 73 20 77 65 20 6e 65   Sometimes we ne
3930: 65 64 20 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e  ed a small amoun
3940: 74 20 6f 66 20 63 6f 64 65 20 73 75 63 68 20 61  t of code such a
3950: 73 20 61 20 76 61 72 69 61 62 6c 65 20 69 6e 69  s a variable ini
3960: 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74  tialization.** t
3970: 6f 20 73 65 74 75 70 20 66 6f 72 20 61 20 6c 61  o setup for a la
3980: 74 65 72 20 61 73 73 65 72 74 28 29 20 73 74 61  ter assert() sta
3990: 74 65 6d 65 6e 74 2e 20 20 57 65 20 64 6f 20 6e  tement.  We do n
39a0: 6f 74 20 77 61 6e 74 20 74 68 69 73 20 63 6f 64  ot want this cod
39b0: 65 20 74 6f 0a 2a 2a 20 61 70 70 65 61 72 20 77  e to.** appear w
39c0: 68 65 6e 20 61 73 73 65 72 74 28 29 20 69 73 20  hen assert() is 
39d0: 64 69 73 61 62 6c 65 64 2e 20 20 54 68 65 20 66  disabled.  The f
39e0: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 69  ollowing macro i
39f0: 73 20 74 68 65 72 65 66 6f 72 65 0a 2a 2a 20 75  s therefore.** u
3a00: 73 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74  sed to contain t
3a10: 68 61 74 20 73 65 74 75 70 20 63 6f 64 65 2e 20  hat setup code. 
3a20: 20 54 68 65 20 22 56 56 41 22 20 61 63 72 6f 6e   The "VVA" acron
3a30: 79 6d 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a  ym stands for.**
3a40: 20 22 56 65 72 69 66 69 63 61 74 69 6f 6e 2c 20   "Verification, 
3a50: 56 61 6c 69 64 61 74 69 6f 6e 2c 20 61 6e 64 20  Validation, and 
3a60: 41 63 63 72 65 64 69 74 61 74 69 6f 6e 22 2e 20  Accreditation". 
3a70: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
3a80: 20 74 68 65 0a 2a 2a 20 63 6f 64 65 20 77 69 74   the.** code wit
3a90: 68 69 6e 20 56 56 41 5f 4f 4e 4c 59 28 29 20 77  hin VVA_ONLY() w
3aa0: 69 6c 6c 20 6f 6e 6c 79 20 72 75 6e 20 64 75 72  ill only run dur
3ab0: 69 6e 67 20 76 65 72 69 66 69 63 61 74 69 6f 6e  ing verification
3ac0: 20 70 72 6f 63 65 73 73 65 73 2e 0a 2a 2f 0a 23   processes..*/.#
3ad0: 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 23 20  ifndef NDEBUG.# 
3ae0: 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28  define VVA_ONLY(
3af0: 58 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64 65  X)  X.#else.# de
3b00: 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29  fine VVA_ONLY(X)
3b10: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
3b20: 68 65 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45  he ALWAYS and NE
3b30: 56 45 52 20 6d 61 63 72 6f 73 20 73 75 72 72 6f  VER macros surro
3b40: 75 6e 64 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72  und boolean expr
3b50: 65 73 73 69 6f 6e 73 20 77 68 69 63 68 0a 2a 2a  essions which.**
3b60: 20 61 72 65 20 69 6e 74 65 6e 64 65 64 20 74 6f   are intended to
3b70: 20 61 6c 77 61 79 73 20 62 65 20 74 72 75 65 20   always be true 
3b80: 6f 72 20 66 61 6c 73 65 2c 20 72 65 73 70 65 63  or false, respec
3b90: 74 69 76 65 6c 79 2e 20 20 53 75 63 68 0a 2a 2a  tively.  Such.**
3ba0: 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63 6f 75   expressions cou
3bb0: 6c 64 20 62 65 20 6f 6d 69 74 74 65 64 20 66 72  ld be omitted fr
3bc0: 6f 6d 20 74 68 65 20 63 6f 64 65 20 63 6f 6d 70  om the code comp
3bd0: 6c 65 74 65 6c 79 2e 20 20 42 75 74 20 74 68 65  letely.  But the
3be0: 79 0a 2a 2a 20 61 72 65 20 69 6e 63 6c 75 64 65  y.** are include
3bf0: 64 20 69 6e 20 61 20 66 65 77 20 63 61 73 65 73  d in a few cases
3c00: 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e 68   in order to enh
3c10: 61 6e 63 65 20 74 68 65 20 72 65 73 69 6c 69 65  ance the resilie
3c20: 6e 63 65 0a 2a 2a 20 6f 66 20 53 51 4c 69 74 65  nce.** of SQLite
3c30: 20 74 6f 20 75 6e 65 78 70 65 63 74 65 64 20 62   to unexpected b
3c40: 65 68 61 76 69 6f 72 20 2d 20 74 6f 20 6d 61 6b  ehavior - to mak
3c50: 65 20 74 68 65 20 63 6f 64 65 20 22 73 65 6c 66  e the code "self
3c60: 2d 68 65 61 6c 69 6e 67 22 0a 2a 2a 20 6f 72 20  -healing".** or 
3c70: 22 64 75 63 74 69 6c 65 22 20 72 61 74 68 65 72  "ductile" rather
3c80: 20 74 68 61 6e 20 62 65 69 6e 67 20 22 62 72 69   than being "bri
3c90: 74 74 6c 65 22 20 61 6e 64 20 63 72 61 73 68 69  ttle" and crashi
3ca0: 6e 67 20 61 74 20 74 68 65 20 66 69 72 73 74 0a  ng at the first.
3cb0: 2a 2a 20 68 69 6e 74 20 6f 66 20 75 6e 70 6c 61  ** hint of unpla
3cc0: 6e 6e 65 64 20 62 65 68 61 76 69 6f 72 2e 0a 2a  nned behavior..*
3cd0: 2a 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f  *.** In other wo
3ce0: 72 64 73 2c 20 41 4c 57 41 59 53 20 61 6e 64 20  rds, ALWAYS and 
3cf0: 4e 45 56 45 52 20 61 72 65 20 61 64 64 65 64 20  NEVER are added 
3d00: 66 6f 72 20 64 65 66 65 6e 73 69 76 65 20 63 6f  for defensive co
3d10: 64 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 64  de..**.** When d
3d20: 6f 69 6e 67 20 63 6f 76 65 72 61 67 65 20 74 65  oing coverage te
3d30: 73 74 69 6e 67 20 41 4c 57 41 59 53 20 61 6e 64  sting ALWAYS and
3d40: 20 4e 45 56 45 52 20 61 72 65 20 68 61 72 64 2d   NEVER are hard-
3d50: 63 6f 64 65 64 20 74 6f 0a 2a 2a 20 62 65 20 74  coded to.** be t
3d60: 72 75 65 20 61 6e 64 20 66 61 6c 73 65 20 73 6f  rue and false so
3d70: 20 74 68 61 74 20 74 68 65 20 75 6e 72 65 61 63   that the unreac
3d80: 68 61 62 6c 65 20 63 6f 64 65 20 74 68 65 79 20  hable code they 
3d90: 73 70 65 63 69 66 79 20 77 69 6c 6c 0a 2a 2a 20  specify will.** 
3da0: 6e 6f 74 20 62 65 20 63 6f 75 6e 74 65 64 20 61  not be counted a
3db0: 73 20 75 6e 74 65 73 74 65 64 20 63 6f 64 65 2e  s untested code.
3dc0: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
3dd0: 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f  SQLITE_COVERAGE_
3de0: 54 45 53 54 29 20 7c 7c 20 64 65 66 69 6e 65 64  TEST) || defined
3df0: 28 53 51 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e  (SQLITE_MUTATION
3e00: 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20  _TEST).# define 
3e10: 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20 28  ALWAYS(X)      (
3e20: 31 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45  1).# define NEVE
3e30: 52 28 58 29 20 20 20 20 20 20 20 28 30 29 0a 23  R(X)       (0).#
3e40: 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44  elif !defined(ND
3e50: 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 41  EBUG).# define A
3e60: 4c 57 41 59 53 28 58 29 20 20 20 20 20 20 28 28  LWAYS(X)      ((
3e70: 58 29 3f 31 3a 28 61 73 73 65 72 74 28 30 29 2c  X)?1:(assert(0),
3e80: 30 29 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56  0)).# define NEV
3e90: 45 52 28 58 29 20 20 20 20 20 20 20 28 28 58 29  ER(X)       ((X)
3ea0: 3f 28 61 73 73 65 72 74 28 30 29 2c 31 29 3a 30  ?(assert(0),1):0
3eb0: 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
3ec0: 20 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20   ALWAYS(X)      
3ed0: 28 58 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56  (X).# define NEV
3ee0: 45 52 28 58 29 20 20 20 20 20 20 20 28 58 29 0a  ER(X)       (X).
3ef0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f  #endif../*.** So
3f00: 6d 65 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72  me malloc failur
3f10: 65 73 20 61 72 65 20 6f 6e 6c 79 20 70 6f 73 73  es are only poss
3f20: 69 62 6c 65 20 69 66 20 53 51 4c 49 54 45 5f 54  ible if SQLITE_T
3f30: 45 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45  EST_REALLOC_STRE
3f40: 53 53 20 69 73 0a 2a 2a 20 64 65 66 69 6e 65 64  SS is.** defined
3f50: 2e 20 20 57 65 20 6e 65 65 64 20 74 6f 20 64 65  .  We need to de
3f60: 66 65 6e 64 20 61 67 61 69 6e 73 74 20 74 68 6f  fend against tho
3f70: 73 65 20 66 61 69 6c 75 72 65 73 20 77 68 65 6e  se failures when
3f80: 20 74 65 73 74 69 6e 67 20 77 69 74 68 0a 2a 2a   testing with.**
3f90: 20 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41   SQLITE_TEST_REA
3fa0: 4c 4c 4f 43 5f 53 54 52 45 53 53 2c 20 62 75 74  LLOC_STRESS, but
3fb0: 20 77 65 20 64 6f 6e 27 74 20 77 61 6e 74 20 74   we don't want t
3fc0: 68 65 20 75 6e 72 65 61 63 68 61 62 6c 65 20 62  he unreachable b
3fd0: 72 61 6e 63 68 65 73 0a 2a 2a 20 64 75 72 69 6e  ranches.** durin
3fe0: 67 20 61 20 6e 6f 72 6d 61 6c 20 62 75 69 6c 64  g a normal build
3ff0: 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
4000: 20 6d 61 63 72 6f 20 63 61 6e 20 62 65 20 75 73   macro can be us
4010: 65 64 20 74 6f 20 64 69 73 61 62 6c 65 20 74 65  ed to disable te
4020: 73 74 73 0a 2a 2a 20 74 68 61 74 20 61 72 65 20  sts.** that are 
4030: 61 6c 77 61 79 73 20 66 61 6c 73 65 20 65 78 63  always false exc
4040: 65 70 74 20 77 68 65 6e 20 53 51 4c 49 54 45 5f  ept when SQLITE_
4050: 54 45 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52  TEST_REALLOC_STR
4060: 45 53 53 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 23  ESS is set..*/.#
4070: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
4080: 45 5f 54 45 53 54 5f 52 45 41 4c 4c 4f 43 5f 53  E_TEST_REALLOC_S
4090: 54 52 45 53 53 29 0a 23 20 64 65 66 69 6e 65 20  TRESS).# define 
40a0: 4f 4e 4c 59 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f  ONLY_IF_REALLOC_
40b0: 53 54 52 45 53 53 28 58 29 20 20 28 58 29 0a 23  STRESS(X)  (X).#
40c0: 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44  elif !defined(ND
40d0: 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 4f  EBUG).# define O
40e0: 4e 4c 59 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f 53  NLY_IF_REALLOC_S
40f0: 54 52 45 53 53 28 58 29 20 20 28 28 58 29 3f 28  TRESS(X)  ((X)?(
4100: 61 73 73 65 72 74 28 30 29 2c 31 29 3a 30 29 0a  assert(0),1):0).
4110: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 4f  #else.# define O
4120: 4e 4c 59 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f 53  NLY_IF_REALLOC_S
4130: 54 52 45 53 53 28 58 29 20 20 28 30 29 0a 23 65  TRESS(X)  (0).#e
4140: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 63 6c  ndif../*.** Decl
4150: 61 72 61 74 69 6f 6e 73 20 75 73 65 64 20 66 6f  arations used fo
4160: 72 20 74 72 61 63 69 6e 67 20 74 68 65 20 6f 70  r tracing the op
4170: 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d 20 69  erating system i
4180: 6e 74 65 72 66 61 63 65 73 2e 0a 2a 2f 0a 23 69  nterfaces..*/.#i
4190: 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
41a0: 5f 46 4f 52 43 45 5f 4f 53 5f 54 52 41 43 45 29  _FORCE_OS_TRACE)
41b0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
41c0: 54 45 5f 54 45 53 54 29 20 7c 7c 20 5c 0a 20 20  TE_TEST) || \.  
41d0: 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54    (defined(SQLIT
41e0: 45 5f 44 45 42 55 47 29 20 26 26 20 53 51 4c 49  E_DEBUG) && SQLI
41f0: 54 45 5f 4f 53 5f 57 49 4e 29 0a 20 20 65 78 74  TE_OS_WIN).  ext
4200: 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 4f  ern int sqlite3O
4210: 53 54 72 61 63 65 3b 0a 23 20 64 65 66 69 6e 65  STrace;.# define
4220: 20 4f 53 54 52 41 43 45 28 58 29 20 20 20 20 20   OSTRACE(X)     
4230: 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
4240: 4f 53 54 72 61 63 65 20 29 20 73 71 6c 69 74 65  OSTrace ) sqlite
4250: 33 44 65 62 75 67 50 72 69 6e 74 66 20 58 0a 23  3DebugPrintf X.#
4260: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 48   define SQLITE_H
4270: 41 56 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6c  AVE_OS_TRACE.#el
4280: 73 65 0a 23 20 64 65 66 69 6e 65 20 4f 53 54 52  se.# define OSTR
4290: 41 43 45 28 58 29 0a 23 20 75 6e 64 65 66 20 20  ACE(X).# undef  
42a0: 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54  SQLITE_HAVE_OS_T
42b0: 52 41 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  RACE.#endif../*.
42c0: 2a 2a 20 49 73 20 74 68 65 20 73 71 6c 69 74 65  ** Is the sqlite
42d0: 33 45 72 72 4e 61 6d 65 28 29 20 66 75 6e 63 74  3ErrName() funct
42e0: 69 6f 6e 20 6e 65 65 64 65 64 20 69 6e 20 74 68  ion needed in th
42f0: 65 20 62 75 69 6c 64 3f 20 20 43 75 72 72 65 6e  e build?  Curren
4300: 74 6c 79 2c 0a 2a 2a 20 69 74 20 69 73 20 6e 65  tly,.** it is ne
4310: 65 64 65 64 20 62 79 20 22 6d 75 74 65 78 5f 77  eded by "mutex_w
4320: 33 32 2e 63 22 20 28 77 68 65 6e 20 64 65 62 75  32.c" (when debu
4330: 67 67 69 6e 67 29 2c 20 22 6f 73 5f 77 69 6e 2e  gging), "os_win.
4340: 63 22 20 28 77 68 65 6e 0a 2a 2a 20 4f 53 54 52  c" (when.** OSTR
4350: 41 43 45 20 69 73 20 65 6e 61 62 6c 65 64 29 2c  ACE is enabled),
4360: 20 61 6e 64 20 62 79 20 73 65 76 65 72 61 6c 20   and by several 
4370: 22 74 65 73 74 2a 2e 63 22 20 66 69 6c 65 73 20  "test*.c" files 
4380: 28 77 68 69 63 68 20 61 72 65 0a 2a 2a 20 63 6f  (which are.** co
4390: 6d 70 69 6c 65 64 20 75 73 69 6e 67 20 53 51 4c  mpiled using SQL
43a0: 49 54 45 5f 54 45 53 54 29 2e 0a 2a 2f 0a 23 69  ITE_TEST)..*/.#i
43b0: 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
43c0: 5f 48 41 56 45 5f 4f 53 5f 54 52 41 43 45 29 20  _HAVE_OS_TRACE) 
43d0: 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
43e0: 45 5f 54 45 53 54 29 20 7c 7c 20 5c 0a 20 20 20  E_TEST) || \.   
43f0: 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   (defined(SQLITE
4400: 5f 44 45 42 55 47 29 20 26 26 20 53 51 4c 49 54  _DEBUG) && SQLIT
4410: 45 5f 4f 53 5f 57 49 4e 29 0a 23 20 64 65 66 69  E_OS_WIN).# defi
4420: 6e 65 20 53 51 4c 49 54 45 5f 4e 45 45 44 5f 45  ne SQLITE_NEED_E
4430: 52 52 5f 4e 41 4d 45 0a 23 65 6c 73 65 0a 23 20  RR_NAME.#else.# 
4440: 75 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 4e 45  undef  SQLITE_NE
4450: 45 44 5f 45 52 52 5f 4e 41 4d 45 0a 23 65 6e 64  ED_ERR_NAME.#end
4460: 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45  if../*.** SQLITE
4470: 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f  _ENABLE_EXPLAIN_
4480: 43 4f 4d 4d 45 4e 54 53 20 69 73 20 69 6e 63 6f  COMMENTS is inco
4490: 6d 70 61 74 69 62 6c 65 20 77 69 74 68 20 53 51  mpatible with SQ
44a0: 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49  LITE_OMIT_EXPLAI
44b0: 4e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  N.*/.#ifdef SQLI
44c0: 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a  TE_OMIT_EXPLAIN.
44d0: 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45  # undef SQLITE_E
44e0: 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f  NABLE_EXPLAIN_CO
44f0: 4d 4d 45 4e 54 53 0a 23 65 6e 64 69 66 0a 0a 2f  MMENTS.#endif../
4500: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65  *.** Return true
4510: 20 28 6e 6f 6e 2d 7a 65 72 6f 29 20 69 66 20 74   (non-zero) if t
4520: 68 65 20 69 6e 70 75 74 20 69 73 20 61 6e 20 69  he input is an i
4530: 6e 74 65 67 65 72 20 74 68 61 74 20 69 73 20 74  nteger that is t
4540: 6f 6f 20 6c 61 72 67 65 0a 2a 2a 20 74 6f 20 66  oo large.** to f
4550: 69 74 20 69 6e 20 33 32 2d 62 69 74 73 2e 20 20  it in 32-bits.  
4560: 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75 73  This macro is us
4570: 65 64 20 69 6e 73 69 64 65 20 6f 66 20 76 61 72  ed inside of var
4580: 69 6f 75 73 20 74 65 73 74 63 61 73 65 28 29 0a  ious testcase().
4590: 2a 2a 20 6d 61 63 72 6f 73 20 74 6f 20 76 65 72  ** macros to ver
45a0: 69 66 79 20 74 68 61 74 20 77 65 20 68 61 76 65  ify that we have
45b0: 20 74 65 73 74 65 64 20 53 51 4c 69 74 65 20 66   tested SQLite f
45c0: 6f 72 20 6c 61 72 67 65 2d 66 69 6c 65 20 73 75  or large-file su
45d0: 70 70 6f 72 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e  pport..*/.#defin
45e0: 65 20 49 53 5f 42 49 47 5f 49 4e 54 28 58 29 20  e IS_BIG_INT(X) 
45f0: 20 28 28 28 58 29 26 7e 28 69 36 34 29 30 78 66   (((X)&~(i64)0xf
4600: 66 66 66 66 66 66 66 29 21 3d 30 29 0a 0a 2f 2a  fffffff)!=0)../*
4610: 0a 2a 2a 20 54 68 65 20 6d 61 63 72 6f 20 75 6e  .** The macro un
4620: 6c 69 6b 65 6c 79 28 29 20 69 73 20 61 20 68 69  likely() is a hi
4630: 6e 74 20 74 68 61 74 20 73 75 72 72 6f 75 6e 64  nt that surround
4640: 73 20 61 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 65  s a boolean.** e
4650: 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69  xpression that i
4660: 73 20 75 73 75 61 6c 6c 79 20 66 61 6c 73 65 2e  s usually false.
4670: 20 20 4d 61 63 72 6f 20 6c 69 6b 65 6c 79 28 29    Macro likely()
4680: 20 73 75 72 72 6f 75 6e 64 73 0a 2a 2a 20 61 20   surrounds.** a 
4690: 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69  boolean expressi
46a0: 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75 61 6c  on that is usual
46b0: 6c 79 20 74 72 75 65 2e 20 20 54 68 65 73 65 20  ly true.  These 
46c0: 68 69 6e 74 73 20 63 6f 75 6c 64 2c 0a 2a 2a 20  hints could,.** 
46d0: 69 6e 20 74 68 65 6f 72 79 2c 20 62 65 20 75 73  in theory, be us
46e0: 65 64 20 62 79 20 74 68 65 20 63 6f 6d 70 69 6c  ed by the compil
46f0: 65 72 20 74 6f 20 67 65 6e 65 72 61 74 65 20 62  er to generate b
4700: 65 74 74 65 72 20 63 6f 64 65 2c 20 62 75 74 0a  etter code, but.
4710: 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 74 68 65  ** currently the
4720: 79 20 61 72 65 20 6a 75 73 74 20 63 6f 6d 6d 65  y are just comme
4730: 6e 74 73 20 66 6f 72 20 68 75 6d 61 6e 20 72 65  nts for human re
4740: 61 64 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  aders..*/.#defin
4750: 65 20 6c 69 6b 65 6c 79 28 58 29 20 20 20 20 28  e likely(X)    (
4760: 58 29 0a 23 64 65 66 69 6e 65 20 75 6e 6c 69 6b  X).#define unlik
4770: 65 6c 79 28 58 29 20 20 28 58 29 0a 0a 23 69 6e  ely(X)  (X)..#in
4780: 63 6c 75 64 65 20 22 68 61 73 68 2e 68 22 0a 23  clude "hash.h".#
4790: 69 6e 63 6c 75 64 65 20 22 70 61 72 73 65 2e 68  include "parse.h
47a0: 22 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 69  ".#include <stdi
47b0: 6f 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73  o.h>.#include <s
47c0: 74 64 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c 75 64  tdlib.h>.#includ
47d0: 65 20 3c 73 74 72 69 6e 67 2e 68 3e 0a 23 69 6e  e <string.h>.#in
47e0: 63 6c 75 64 65 20 3c 61 73 73 65 72 74 2e 68 3e  clude <assert.h>
47f0: 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 64 65  .#include <stdde
4800: 66 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 55 73 65 20  f.h>../*.** Use 
4810: 61 20 6d 61 63 72 6f 20 74 6f 20 72 65 70 6c 61  a macro to repla
4820: 63 65 20 6d 65 6d 63 70 79 28 29 20 69 66 20 63  ce memcpy() if c
4830: 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 53 51 4c  ompiled with SQL
4840: 49 54 45 5f 49 4e 4c 49 4e 45 5f 4d 45 4d 43 50  ITE_INLINE_MEMCP
4850: 59 2e 0a 2a 2a 20 54 68 69 73 20 61 6c 6c 6f 77  Y..** This allow
4860: 73 20 62 65 74 74 65 72 20 6d 65 61 73 75 72 65  s better measure
4870: 6d 65 6e 74 73 20 6f 66 20 77 68 65 72 65 20 6d  ments of where m
4880: 65 6d 63 70 79 28 29 20 69 73 20 75 73 65 64 20  emcpy() is used 
4890: 77 68 65 6e 20 72 75 6e 6e 69 6e 67 0a 2a 2a 20  when running.** 
48a0: 63 61 63 68 65 67 72 69 6e 64 2e 20 20 42 75 74  cachegrind.  But
48b0: 20 74 68 69 73 20 6d 61 63 72 6f 20 76 65 72 73   this macro vers
48c0: 69 6f 6e 20 6f 66 20 6d 65 6d 63 70 79 28 29 20  ion of memcpy() 
48d0: 69 73 20 76 65 72 79 20 73 6c 6f 77 20 73 6f 20  is very slow so 
48e0: 69 74 0a 2a 2a 20 73 68 6f 75 6c 64 20 6e 6f 74  it.** should not
48f0: 20 62 65 20 75 73 65 64 20 69 6e 20 70 72 6f 64   be used in prod
4900: 75 63 74 69 6f 6e 2e 20 20 54 68 69 73 20 69 73  uction.  This is
4910: 20 61 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 6d   a performance m
4920: 65 61 73 75 72 65 6d 65 6e 74 0a 2a 2a 20 68 61  easurement.** ha
4930: 63 6b 20 6f 6e 6c 79 2e 0a 2a 2f 0a 23 69 66 64  ck only..*/.#ifd
4940: 65 66 20 53 51 4c 49 54 45 5f 49 4e 4c 49 4e 45  ef SQLITE_INLINE
4950: 5f 4d 45 4d 43 50 59 0a 23 20 64 65 66 69 6e 65  _MEMCPY.# define
4960: 20 6d 65 6d 63 70 79 28 44 2c 53 2c 4e 29 20 7b   memcpy(D,S,N) {
4970: 63 68 61 72 2a 78 78 64 3d 28 63 68 61 72 2a 29  char*xxd=(char*)
4980: 28 44 29 3b 63 6f 6e 73 74 20 63 68 61 72 2a 78  (D);const char*x
4990: 78 73 3d 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  xs=(const char*)
49a0: 28 53 29 3b 5c 0a 20 20 20 20 20 20 20 20 20 20  (S);\.          
49b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
49c0: 74 20 78 78 6e 3d 28 4e 29 3b 77 68 69 6c 65 28  t xxn=(N);while(
49d0: 78 78 6e 2d 2d 3e 30 29 2a 28 78 78 64 2b 2b 29  xxn-->0)*(xxd++)
49e0: 3d 2a 28 78 78 73 2b 2b 29 3b 7d 0a 23 65 6e 64  =*(xxs++);}.#end
49f0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 63 6f 6d  if../*.** If com
4a00: 70 69 6c 69 6e 67 20 66 6f 72 20 61 20 70 72 6f  piling for a pro
4a10: 63 65 73 73 6f 72 20 74 68 61 74 20 6c 61 63 6b  cessor that lack
4a20: 73 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74  s floating point
4a30: 20 73 75 70 70 6f 72 74 2c 0a 2a 2a 20 73 75 62   support,.** sub
4a40: 73 74 69 74 75 74 65 20 69 6e 74 65 67 65 72 20  stitute integer 
4a50: 66 6f 72 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69  for floating-poi
4a60: 6e 74 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  nt.*/.#ifdef SQL
4a70: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
4a80: 47 5f 50 4f 49 4e 54 0a 23 20 64 65 66 69 6e 65  G_POINT.# define
4a90: 20 64 6f 75 62 6c 65 20 73 71 6c 69 74 65 5f 69   double sqlite_i
4aa0: 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20 66 6c  nt64.# define fl
4ab0: 6f 61 74 20 73 71 6c 69 74 65 5f 69 6e 74 36 34  oat sqlite_int64
4ac0: 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f  .# define LONGDO
4ad0: 55 42 4c 45 5f 54 59 50 45 20 73 71 6c 69 74 65  UBLE_TYPE sqlite
4ae0: 5f 69 6e 74 36 34 0a 23 20 69 66 6e 64 65 66 20  _int64.# ifndef 
4af0: 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23  SQLITE_BIG_DBL.#
4b00: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
4b10: 5f 42 49 47 5f 44 42 4c 20 28 28 28 73 71 6c 69  _BIG_DBL (((sqli
4b20: 74 65 33 5f 69 6e 74 36 34 29 31 29 3c 3c 35 30  te3_int64)1)<<50
4b30: 29 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69  ).# endif.# defi
4b40: 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44  ne SQLITE_OMIT_D
4b50: 41 54 45 54 49 4d 45 5f 46 55 4e 43 53 20 31 0a  ATETIME_FUNCS 1.
4b60: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
4b70: 4f 4d 49 54 5f 54 52 41 43 45 20 31 0a 23 20 75  OMIT_TRACE 1.# u
4b80: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 49 58 45  ndef SQLITE_MIXE
4b90: 44 5f 45 4e 44 49 41 4e 5f 36 34 42 49 54 5f 46  D_ENDIAN_64BIT_F
4ba0: 4c 4f 41 54 0a 23 20 75 6e 64 65 66 20 53 51 4c  LOAT.# undef SQL
4bb0: 49 54 45 5f 48 41 56 45 5f 49 53 4e 41 4e 0a 23  ITE_HAVE_ISNAN.#
4bc0: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
4bd0: 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20 64  LITE_BIG_DBL.# d
4be0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47  efine SQLITE_BIG
4bf0: 5f 44 42 4c 20 28 31 65 39 39 29 0a 23 65 6e 64  _DBL (1e99).#end
4c00: 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54 5f 54  if../*.** OMIT_T
4c10: 45 4d 50 44 42 20 69 73 20 73 65 74 20 74 6f 20  EMPDB is set to 
4c20: 31 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  1 if SQLITE_OMIT
4c30: 5f 54 45 4d 50 44 42 20 69 73 20 64 65 66 69 6e  _TEMPDB is defin
4c40: 65 64 2c 20 6f 72 20 30 0a 2a 2a 20 61 66 74 65  ed, or 0.** afte
4c50: 72 77 61 72 64 2e 20 48 61 76 69 6e 67 20 74 68  rward. Having th
4c60: 69 73 20 6d 61 63 72 6f 20 61 6c 6c 6f 77 73 20  is macro allows 
4c70: 75 73 20 74 6f 20 63 61 75 73 65 20 74 68 65 20  us to cause the 
4c80: 43 20 63 6f 6d 70 69 6c 65 72 0a 2a 2a 20 74 6f  C compiler.** to
4c90: 20 6f 6d 69 74 20 63 6f 64 65 20 75 73 65 64 20   omit code used 
4ca0: 62 79 20 54 45 4d 50 20 74 61 62 6c 65 73 20 77  by TEMP tables w
4cb0: 69 74 68 6f 75 74 20 6d 65 73 73 79 20 23 69 66  ithout messy #if
4cc0: 6e 64 65 66 20 73 74 61 74 65 6d 65 6e 74 73 2e  ndef statements.
4cd0: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
4ce0: 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 0a 23 64  E_OMIT_TEMPDB.#d
4cf0: 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44  efine OMIT_TEMPD
4d00: 42 20 31 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e  B 1.#else.#defin
4d10: 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 30 0a  e OMIT_TEMPDB 0.
4d20: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
4d30: 65 20 22 66 69 6c 65 20 66 6f 72 6d 61 74 22 20  e "file format" 
4d40: 6e 75 6d 62 65 72 20 69 73 20 61 6e 20 69 6e 74  number is an int
4d50: 65 67 65 72 20 74 68 61 74 20 69 73 20 69 6e 63  eger that is inc
4d60: 72 65 6d 65 6e 74 65 64 20 77 68 65 6e 65 76 65  remented wheneve
4d70: 72 0a 2a 2a 20 74 68 65 20 56 44 42 45 2d 6c 65  r.** the VDBE-le
4d80: 76 65 6c 20 66 69 6c 65 20 66 6f 72 6d 61 74 20  vel file format 
4d90: 63 68 61 6e 67 65 73 2e 20 20 54 68 65 20 66 6f  changes.  The fo
4da0: 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 64  llowing macros d
4db0: 65 66 69 6e 65 20 74 68 65 0a 2a 2a 20 74 68 65  efine the.** the
4dc0: 20 64 65 66 61 75 6c 74 20 66 69 6c 65 20 66 6f   default file fo
4dd0: 72 6d 61 74 20 66 6f 72 20 6e 65 77 20 64 61 74  rmat for new dat
4de0: 61 62 61 73 65 73 20 61 6e 64 20 74 68 65 20 6d  abases and the m
4df0: 61 78 69 6d 75 6d 20 66 69 6c 65 20 66 6f 72 6d  aximum file form
4e00: 61 74 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 6c  at.** that the l
4e10: 69 62 72 61 72 79 20 63 61 6e 20 72 65 61 64 2e  ibrary can read.
4e20: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
4e30: 54 45 5f 4d 41 58 5f 46 49 4c 45 5f 46 4f 52 4d  TE_MAX_FILE_FORM
4e40: 41 54 20 34 0a 23 69 66 6e 64 65 66 20 53 51 4c  AT 4.#ifndef SQL
4e50: 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45  ITE_DEFAULT_FILE
4e60: 5f 46 4f 52 4d 41 54 0a 23 20 64 65 66 69 6e 65  _FORMAT.# define
4e70: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
4e80: 46 49 4c 45 5f 46 4f 52 4d 41 54 20 34 0a 23 65  FILE_FORMAT 4.#e
4e90: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65  ndif../*.** Dete
4ea0: 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74 72  rmine whether tr
4eb0: 69 67 67 65 72 73 20 61 72 65 20 72 65 63 75 72  iggers are recur
4ec0: 73 69 76 65 20 62 79 20 64 65 66 61 75 6c 74 2e  sive by default.
4ed0: 20 20 54 68 69 73 20 63 61 6e 20 62 65 0a 2a 2a    This can be.**
4ee0: 20 63 68 61 6e 67 65 64 20 61 74 20 72 75 6e 2d   changed at run-
4ef0: 74 69 6d 65 20 75 73 69 6e 67 20 61 20 70 72 61  time using a pra
4f00: 67 6d 61 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  gma..*/.#ifndef 
4f10: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 52  SQLITE_DEFAULT_R
4f20: 45 43 55 52 53 49 56 45 5f 54 52 49 47 47 45 52  ECURSIVE_TRIGGER
4f30: 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  S.# define SQLIT
4f40: 45 5f 44 45 46 41 55 4c 54 5f 52 45 43 55 52 53  E_DEFAULT_RECURS
4f50: 49 56 45 5f 54 52 49 47 47 45 52 53 20 30 0a 23  IVE_TRIGGERS 0.#
4f60: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f  endif../*.** Pro
4f70: 76 69 64 65 20 61 20 64 65 66 61 75 6c 74 20 76  vide a default v
4f80: 61 6c 75 65 20 66 6f 72 20 53 51 4c 49 54 45 5f  alue for SQLITE_
4f90: 54 45 4d 50 5f 53 54 4f 52 45 20 69 6e 20 63 61  TEMP_STORE in ca
4fa0: 73 65 20 69 74 20 69 73 20 6e 6f 74 20 73 70 65  se it is not spe
4fb0: 63 69 66 69 65 64 0a 2a 2a 20 6f 6e 20 74 68 65  cified.** on the
4fc0: 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 0a 2a 2f   command-line.*/
4fd0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
4fe0: 54 45 4d 50 5f 53 54 4f 52 45 0a 23 20 64 65 66  TEMP_STORE.# def
4ff0: 69 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f  ine SQLITE_TEMP_
5000: 53 54 4f 52 45 20 31 0a 23 20 64 65 66 69 6e 65  STORE 1.# define
5010: 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f   SQLITE_TEMP_STO
5020: 52 45 5f 78 63 20 31 20 20 2f 2a 20 45 78 63 6c  RE_xc 1  /* Excl
5030: 75 64 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63  ude from ctime.c
5040: 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a   */.#endif../*.*
5050: 2a 20 49 66 20 6e 6f 20 76 61 6c 75 65 20 68 61  * If no value ha
5060: 73 20 62 65 65 6e 20 70 72 6f 76 69 64 65 64 20  s been provided 
5070: 66 6f 72 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57  for SQLITE_MAX_W
5080: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 2c 20 6f  ORKER_THREADS, o
5090: 72 20 69 66 0a 2a 2a 20 53 51 4c 49 54 45 5f 54  r if.** SQLITE_T
50a0: 45 4d 50 5f 53 54 4f 52 45 20 69 73 20 73 65 74  EMP_STORE is set
50b0: 20 74 6f 20 33 20 28 6e 65 76 65 72 20 75 73 65   to 3 (never use
50c0: 20 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65 73   temporary files
50d0: 29 2c 20 73 65 74 20 69 74 0a 2a 2a 20 74 6f 20  ), set it.** to 
50e0: 7a 65 72 6f 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c  zero..*/.#if SQL
50f0: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d  ITE_TEMP_STORE==
5100: 33 20 7c 7c 20 53 51 4c 49 54 45 5f 54 48 52 45  3 || SQLITE_THRE
5110: 41 44 53 41 46 45 3d 3d 30 0a 23 20 75 6e 64 65  ADSAFE==0.# unde
5120: 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  f SQLITE_MAX_WOR
5130: 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65  KER_THREADS.# de
5140: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
5150: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20 30  WORKER_THREADS 0
5160: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
5170: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
5180: 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66 69  R_THREADS.# defi
5190: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f  ne SQLITE_MAX_WO
51a0: 52 4b 45 52 5f 54 48 52 45 41 44 53 20 38 0a 23  RKER_THREADS 8.#
51b0: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
51c0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52  LITE_DEFAULT_WOR
51d0: 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65  KER_THREADS.# de
51e0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41  fine SQLITE_DEFA
51f0: 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  ULT_WORKER_THREA
5200: 44 53 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 20  DS 0.#endif.#if 
5210: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57  SQLITE_DEFAULT_W
5220: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 3e 53 51  ORKER_THREADS>SQ
5230: 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f  LITE_MAX_WORKER_
5240: 54 48 52 45 41 44 53 0a 23 20 75 6e 64 65 66 20  THREADS.# undef 
5250: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
5260: 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66 69  R_THREADS.# defi
5270: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f  ne SQLITE_MAX_WO
5280: 52 4b 45 52 5f 54 48 52 45 41 44 53 20 53 51 4c  RKER_THREADS SQL
5290: 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b  ITE_DEFAULT_WORK
52a0: 45 52 5f 54 48 52 45 41 44 53 0a 23 65 6e 64 69  ER_THREADS.#endi
52b0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 65 66  f../*.** The def
52c0: 61 75 6c 74 20 69 6e 69 74 69 61 6c 20 61 6c 6c  ault initial all
52d0: 6f 63 61 74 69 6f 6e 20 66 6f 72 20 74 68 65 20  ocation for the 
52e0: 70 61 67 65 63 61 63 68 65 20 77 68 65 6e 20 75  pagecache when u
52f0: 73 69 6e 67 20 73 65 70 61 72 61 74 65 0a 2a 2a  sing separate.**
5300: 20 70 61 67 65 63 61 63 68 65 73 20 66 6f 72 20   pagecaches for 
5310: 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f  each database co
5320: 6e 6e 65 63 74 69 6f 6e 2e 20 20 41 20 70 6f 73  nnection.  A pos
5330: 69 74 69 76 65 20 6e 75 6d 62 65 72 20 69 73 20  itive number is 
5340: 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66  the.** number of
5350: 20 70 61 67 65 73 2e 20 20 41 20 6e 65 67 61 74   pages.  A negat
5360: 69 76 65 20 6e 75 6d 62 65 72 20 4e 20 74 72 61  ive number N tra
5370: 6e 73 6c 61 74 69 6f 6e 73 20 6d 65 61 6e 73 20  nslations means 
5380: 74 68 61 74 20 61 20 62 75 66 66 65 72 0a 2a 2a  that a buffer.**
5390: 20 6f 66 20 2d 31 30 32 34 2a 4e 20 62 79 74 65   of -1024*N byte
53a0: 73 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 61  s is allocated a
53b0: 6e 64 20 75 73 65 64 20 66 6f 72 20 61 73 20 6d  nd used for as m
53c0: 61 6e 79 20 70 61 67 65 73 20 61 73 20 69 74 20  any pages as it 
53d0: 77 69 6c 6c 20 68 6f 6c 64 2e 0a 2a 2a 0a 2a 2a  will hold..**.**
53e0: 20 54 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c   The default val
53f0: 75 65 20 6f 66 20 22 32 30 22 20 77 61 73 20 63  ue of "20" was c
5400: 68 6f 6f 73 65 6e 20 74 6f 20 6d 69 6e 69 6d 69  hoosen to minimi
5410: 7a 65 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20  ze the run-time 
5420: 6f 66 20 74 68 65 0a 2a 2a 20 73 70 65 65 64 74  of the.** speedt
5430: 65 73 74 31 20 74 65 73 74 20 70 72 6f 67 72 61  est1 test progra
5440: 6d 20 77 69 74 68 20 6f 70 74 69 6f 6e 73 3a 20  m with options: 
5450: 2d 2d 73 68 72 69 6e 6b 2d 6d 65 6d 6f 72 79 20  --shrink-memory 
5460: 2d 2d 72 65 70 72 65 70 61 72 65 0a 2a 2f 0a 23  --reprepare.*/.#
5470: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45  ifndef SQLITE_DE
5480: 46 41 55 4c 54 5f 50 43 41 43 48 45 5f 49 4e 49  FAULT_PCACHE_INI
5490: 54 53 5a 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  TSZ.# define SQL
54a0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 50 43 41 43  ITE_DEFAULT_PCAC
54b0: 48 45 5f 49 4e 49 54 53 5a 20 32 30 0a 23 65 6e  HE_INITSZ 20.#en
54c0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64  dif../*.** GCC d
54d0: 6f 65 73 20 6e 6f 74 20 64 65 66 69 6e 65 20 74  oes not define t
54e0: 68 65 20 6f 66 66 73 65 74 6f 66 28 29 20 6d 61  he offsetof() ma
54f0: 63 72 6f 20 73 6f 20 77 65 27 6c 6c 20 68 61 76  cro so we'll hav
5500: 65 20 74 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75  e to do it.** ou
5510: 72 73 65 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e  rselves..*/.#ifn
5520: 64 65 66 20 6f 66 66 73 65 74 6f 66 0a 23 64 65  def offsetof.#de
5530: 66 69 6e 65 20 6f 66 66 73 65 74 6f 66 28 53 54  fine offsetof(ST
5540: 52 55 43 54 55 52 45 2c 46 49 45 4c 44 29 20 28  RUCTURE,FIELD) (
5550: 28 69 6e 74 29 28 28 63 68 61 72 2a 29 26 28 28  (int)((char*)&((
5560: 53 54 52 55 43 54 55 52 45 2a 29 30 29 2d 3e 46  STRUCTURE*)0)->F
5570: 49 45 4c 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f  IELD)).#endif../
5580: 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 63  *.** Macros to c
5590: 6f 6d 70 75 74 65 20 6d 69 6e 69 6d 75 6d 20 61  ompute minimum a
55a0: 6e 64 20 6d 61 78 69 6d 75 6d 20 6f 66 20 74 77  nd maximum of tw
55b0: 6f 20 6e 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23 69  o numbers..*/.#i
55c0: 66 6e 64 65 66 20 4d 49 4e 0a 23 20 64 65 66 69  fndef MIN.# defi
55d0: 6e 65 20 4d 49 4e 28 41 2c 42 29 20 28 28 41 29  ne MIN(A,B) ((A)
55e0: 3c 28 42 29 3f 28 41 29 3a 28 42 29 29 0a 23 65  <(B)?(A):(B)).#e
55f0: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 4d 41 58  ndif.#ifndef MAX
5600: 0a 23 20 64 65 66 69 6e 65 20 4d 41 58 28 41 2c  .# define MAX(A,
5610: 42 29 20 28 28 41 29 3e 28 42 29 3f 28 41 29 3a  B) ((A)>(B)?(A):
5620: 28 42 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  (B)).#endif../*.
5630: 2a 2a 20 53 77 61 70 20 74 77 6f 20 6f 62 6a 65  ** Swap two obje
5640: 63 74 73 20 6f 66 20 74 79 70 65 20 54 59 50 45  cts of type TYPE
5650: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 57 41  ..*/.#define SWA
5660: 50 28 54 59 50 45 2c 41 2c 42 29 20 7b 54 59 50  P(TYPE,A,B) {TYP
5670: 45 20 74 3d 41 3b 20 41 3d 42 3b 20 42 3d 74 3b  E t=A; A=B; B=t;
5680: 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74  }../*.** Check t
5690: 6f 20 73 65 65 20 69 66 20 74 68 69 73 20 6d 61  o see if this ma
56a0: 63 68 69 6e 65 20 75 73 65 73 20 45 42 43 44 49  chine uses EBCDI
56b0: 43 2e 20 20 28 59 65 73 2c 20 62 65 6c 69 65 76  C.  (Yes, believ
56c0: 65 20 69 74 20 6f 72 0a 2a 2a 20 6e 6f 74 2c 20  e it or.** not, 
56d0: 74 68 65 72 65 20 61 72 65 20 73 74 69 6c 6c 20  there are still 
56e0: 6d 61 63 68 69 6e 65 73 20 6f 75 74 20 74 68 65  machines out the
56f0: 72 65 20 74 68 61 74 20 75 73 65 20 45 42 43 44  re that use EBCD
5700: 49 43 2e 29 0a 2a 2f 0a 23 69 66 20 27 41 27 20  IC.).*/.#if 'A' 
5710: 3d 3d 20 27 5c 33 30 31 27 0a 23 20 64 65 66 69  == '\301'.# defi
5720: 6e 65 20 53 51 4c 49 54 45 5f 45 42 43 44 49 43  ne SQLITE_EBCDIC
5730: 20 31 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   1.#else.# defin
5740: 65 20 53 51 4c 49 54 45 5f 41 53 43 49 49 20 31  e SQLITE_ASCII 1
5750: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49  .#endif../*.** I
5760: 6e 74 65 67 65 72 73 20 6f 66 20 6b 6e 6f 77 6e  ntegers of known
5770: 20 73 69 7a 65 73 2e 20 20 54 68 65 73 65 20 74   sizes.  These t
5780: 79 70 65 64 65 66 73 20 6d 69 67 68 74 20 63 68  ypedefs might ch
5790: 61 6e 67 65 20 66 6f 72 20 61 72 63 68 69 74 65  ange for archite
57a0: 63 74 75 72 65 73 0a 2a 2a 20 77 68 65 72 65 20  ctures.** where 
57b0: 74 68 65 20 73 69 7a 65 73 20 76 65 72 79 2e 20  the sizes very. 
57c0: 20 50 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61   Preprocessor ma
57d0: 63 72 6f 73 20 61 72 65 20 61 76 61 69 6c 61 62  cros are availab
57e0: 6c 65 20 73 6f 20 74 68 61 74 20 74 68 65 0a 2a  le so that the.*
57f0: 2a 20 74 79 70 65 73 20 63 61 6e 20 62 65 20 63  * types can be c
5800: 6f 6e 76 65 6e 69 65 6e 74 6c 79 20 72 65 64 65  onveniently rede
5810: 66 69 6e 65 64 20 61 74 20 63 6f 6d 70 69 6c 65  fined at compile
5820: 2d 74 79 70 65 2e 20 20 4c 69 6b 65 20 74 68 69  -type.  Like thi
5830: 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20  s:.**.**        
5840: 20 63 63 20 27 2d 44 55 49 4e 54 50 54 52 5f 54   cc '-DUINTPTR_T
5850: 59 50 45 3d 6c 6f 6e 67 20 6c 6f 6e 67 20 69 6e  YPE=long long in
5860: 74 27 20 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e 64 65  t' ....*/.#ifnde
5870: 66 20 55 49 4e 54 33 32 5f 54 59 50 45 0a 23 20  f UINT32_TYPE.# 
5880: 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 33  ifdef HAVE_UINT3
5890: 32 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49  2_T.#  define UI
58a0: 4e 54 33 32 5f 54 59 50 45 20 75 69 6e 74 33 32  NT32_TYPE uint32
58b0: 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66  _t.# else.#  def
58c0: 69 6e 65 20 55 49 4e 54 33 32 5f 54 59 50 45 20  ine UINT32_TYPE 
58d0: 75 6e 73 69 67 6e 65 64 20 69 6e 74 0a 23 20 65  unsigned int.# e
58e0: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e  ndif.#endif.#ifn
58f0: 64 65 66 20 55 49 4e 54 31 36 5f 54 59 50 45 0a  def UINT16_TYPE.
5900: 23 20 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e  # ifdef HAVE_UIN
5910: 54 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65 20  T16_T.#  define 
5920: 55 49 4e 54 31 36 5f 54 59 50 45 20 75 69 6e 74  UINT16_TYPE uint
5930: 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64  16_t.# else.#  d
5940: 65 66 69 6e 65 20 55 49 4e 54 31 36 5f 54 59 50  efine UINT16_TYP
5950: 45 20 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74  E unsigned short
5960: 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e   int.# endif.#en
5970: 64 69 66 0a 23 69 66 6e 64 65 66 20 49 4e 54 31  dif.#ifndef INT1
5980: 36 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  6_TYPE.# ifdef H
5990: 41 56 45 5f 49 4e 54 31 36 5f 54 0a 23 20 20 64  AVE_INT16_T.#  d
59a0: 65 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50 45  efine INT16_TYPE
59b0: 20 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a   int16_t.# else.
59c0: 23 20 20 64 65 66 69 6e 65 20 49 4e 54 31 36 5f  #  define INT16_
59d0: 54 59 50 45 20 73 68 6f 72 74 20 69 6e 74 0a 23  TYPE short int.#
59e0: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69   endif.#endif.#i
59f0: 66 6e 64 65 66 20 55 49 4e 54 38 5f 54 59 50 45  fndef UINT8_TYPE
5a00: 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 55 49  .# ifdef HAVE_UI
5a10: 4e 54 38 5f 54 0a 23 20 20 64 65 66 69 6e 65 20  NT8_T.#  define 
5a20: 55 49 4e 54 38 5f 54 59 50 45 20 75 69 6e 74 38  UINT8_TYPE uint8
5a30: 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66  _t.# else.#  def
5a40: 69 6e 65 20 55 49 4e 54 38 5f 54 59 50 45 20 75  ine UINT8_TYPE u
5a50: 6e 73 69 67 6e 65 64 20 63 68 61 72 0a 23 20 65  nsigned char.# e
5a60: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e  ndif.#endif.#ifn
5a70: 64 65 66 20 49 4e 54 38 5f 54 59 50 45 0a 23 20  def INT8_TYPE.# 
5a80: 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54 38 5f  ifdef HAVE_INT8_
5a90: 54 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 38  T.#  define INT8
5aa0: 5f 54 59 50 45 20 69 6e 74 38 5f 74 0a 23 20 65  _TYPE int8_t.# e
5ab0: 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 4e  lse.#  define IN
5ac0: 54 38 5f 54 59 50 45 20 73 69 67 6e 65 64 20 63  T8_TYPE signed c
5ad0: 68 61 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  har.# endif.#end
5ae0: 69 66 0a 23 69 66 6e 64 65 66 20 4c 4f 4e 47 44  if.#ifndef LONGD
5af0: 4f 55 42 4c 45 5f 54 59 50 45 0a 23 20 64 65 66  OUBLE_TYPE.# def
5b00: 69 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54  ine LONGDOUBLE_T
5b10: 59 50 45 20 6c 6f 6e 67 20 64 6f 75 62 6c 65 0a  YPE long double.
5b20: 23 65 6e 64 69 66 0a 74 79 70 65 64 65 66 20 73  #endif.typedef s
5b30: 71 6c 69 74 65 5f 69 6e 74 36 34 20 69 36 34 3b  qlite_int64 i64;
5b40: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 38 2d 62            /* 8-b
5b50: 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67  yte signed integ
5b60: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 73 71  er */.typedef sq
5b70: 6c 69 74 65 5f 75 69 6e 74 36 34 20 75 36 34 3b  lite_uint64 u64;
5b80: 20 20 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79           /* 8-by
5b90: 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  te unsigned inte
5ba0: 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55  ger */.typedef U
5bb0: 49 4e 54 33 32 5f 54 59 50 45 20 75 33 32 3b 20  INT32_TYPE u32; 
5bc0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 34 2d 62            /* 4-b
5bd0: 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  yte unsigned int
5be0: 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20  eger */.typedef 
5bf0: 55 49 4e 54 31 36 5f 54 59 50 45 20 75 31 36 3b  UINT16_TYPE u16;
5c00: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d             /* 2-
5c10: 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e  byte unsigned in
5c20: 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66  teger */.typedef
5c30: 20 49 4e 54 31 36 5f 54 59 50 45 20 69 31 36 3b   INT16_TYPE i16;
5c40: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32              /* 2
5c50: 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74  -byte signed int
5c60: 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20  eger */.typedef 
5c70: 55 49 4e 54 38 5f 54 59 50 45 20 75 38 3b 20 20  UINT8_TYPE u8;  
5c80: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d             /* 1-
5c90: 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e  byte unsigned in
5ca0: 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66  teger */.typedef
5cb0: 20 49 4e 54 38 5f 54 59 50 45 20 69 38 3b 20 20   INT8_TYPE i8;  
5cc0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31              /* 1
5cd0: 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74  -byte signed int
5ce0: 65 67 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53  eger */../*.** S
5cf0: 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 69 73  QLITE_MAX_U32 is
5d00: 20 61 20 75 36 34 20 63 6f 6e 73 74 61 6e 74 20   a u64 constant 
5d10: 74 68 61 74 20 69 73 20 74 68 65 20 6d 61 78 69  that is the maxi
5d20: 6d 75 6d 20 75 36 34 20 76 61 6c 75 65 0a 2a 2a  mum u64 value.**
5d30: 20 74 68 61 74 20 63 61 6e 20 62 65 20 73 74 6f   that can be sto
5d40: 72 65 64 20 69 6e 20 61 20 75 33 32 20 77 69 74  red in a u32 wit
5d50: 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20 64 61 74  hout loss of dat
5d60: 61 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a  a.  The value.**
5d70: 20 69 73 20 30 78 30 30 30 30 30 30 30 30 66 66   is 0x00000000ff
5d80: 66 66 66 66 66 66 2e 20 20 42 75 74 20 62 65 63  ffffff.  But bec
5d90: 61 75 73 65 20 6f 66 20 71 75 69 72 6b 73 20 6f  ause of quirks o
5da0: 66 20 73 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73  f some compilers
5db0: 2c 20 77 65 0a 2a 2a 20 68 61 76 65 20 74 6f 20  , we.** have to 
5dc0: 73 70 65 63 69 66 79 20 74 68 65 20 76 61 6c 75  specify the valu
5dd0: 65 20 69 6e 20 74 68 65 20 6c 65 73 73 20 69 6e  e in the less in
5de0: 74 75 69 74 69 76 65 20 6d 61 6e 6e 65 72 20 73  tuitive manner s
5df0: 68 6f 77 6e 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65  hown:.*/.#define
5e00: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20   SQLITE_MAX_U32 
5e10: 20 28 28 28 28 75 36 34 29 31 29 3c 3c 33 32 29   ((((u64)1)<<32)
5e20: 2d 31 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64  -1)../*.** The d
5e30: 61 74 61 74 79 70 65 20 75 73 65 64 20 74 6f 20  atatype used to 
5e40: 73 74 6f 72 65 20 65 73 74 69 6d 61 74 65 73 20  store estimates 
5e50: 6f 66 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  of the number of
5e60: 20 72 6f 77 73 20 69 6e 20 61 0a 2a 2a 20 74 61   rows in a.** ta
5e70: 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 54  ble or index.  T
5e80: 68 69 73 20 69 73 20 61 6e 20 75 6e 73 69 67 6e  his is an unsign
5e90: 65 64 20 69 6e 74 65 67 65 72 20 74 79 70 65 2e  ed integer type.
5ea0: 20 20 46 6f 72 20 39 39 2e 39 25 20 6f 66 0a 2a    For 99.9% of.*
5eb0: 2a 20 74 68 65 20 77 6f 72 6c 64 2c 20 61 20 33  * the world, a 3
5ec0: 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20 69 73  2-bit integer is
5ed0: 20 73 75 66 66 69 63 69 65 6e 74 2e 20 20 42 75   sufficient.  Bu
5ee0: 74 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67  t a 64-bit integ
5ef0: 65 72 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73 65  er.** can be use
5f00: 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  d at compile-tim
5f10: 65 20 69 66 20 64 65 73 69 72 65 64 2e 0a 2a 2f  e if desired..*/
5f20: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 36  .#ifdef SQLITE_6
5f30: 34 42 49 54 5f 53 54 41 54 53 0a 20 74 79 70 65  4BIT_STATS. type
5f40: 64 65 66 20 75 36 34 20 74 52 6f 77 63 6e 74 3b  def u64 tRowcnt;
5f50: 20 20 20 20 2f 2a 20 36 34 2d 62 69 74 20 6f 6e      /* 64-bit on
5f60: 6c 79 20 69 66 20 72 65 71 75 65 73 74 65 64 20  ly if requested 
5f70: 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  at compile-time 
5f80: 2a 2f 0a 23 65 6c 73 65 0a 20 74 79 70 65 64 65  */.#else. typede
5f90: 66 20 75 33 32 20 74 52 6f 77 63 6e 74 3b 20 20  f u32 tRowcnt;  
5fa0: 20 20 2f 2a 20 33 32 2d 62 69 74 20 69 73 20 74    /* 32-bit is t
5fb0: 68 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 65  he default */.#e
5fc0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 73 74 69  ndif../*.** Esti
5fd0: 6d 61 74 65 64 20 71 75 61 6e 74 69 74 69 65 73  mated quantities
5fe0: 20 75 73 65 64 20 66 6f 72 20 71 75 65 72 79 20   used for query 
5ff0: 70 6c 61 6e 6e 69 6e 67 20 61 72 65 20 73 74 6f  planning are sto
6000: 72 65 64 20 61 73 20 31 36 2d 62 69 74 0a 2a 2a  red as 16-bit.**
6010: 20 6c 6f 67 61 72 69 74 68 6d 73 2e 20 20 46 6f   logarithms.  Fo
6020: 72 20 71 75 61 6e 74 69 74 79 20 58 2c 20 74 68  r quantity X, th
6030: 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20 69  e value stored i
6040: 73 20 31 30 2a 6c 6f 67 32 28 58 29 2e 20 20 54  s 10*log2(X).  T
6050: 68 69 73 0a 2a 2a 20 67 69 76 65 73 20 61 20 70  his.** gives a p
6060: 6f 73 73 69 62 6c 65 20 72 61 6e 67 65 20 6f 66  ossible range of
6070: 20 76 61 6c 75 65 73 20 6f 66 20 61 70 70 72 6f   values of appro
6080: 78 69 6d 61 74 65 6c 79 20 31 2e 30 65 39 38 36  ximately 1.0e986
6090: 20 74 6f 20 31 65 2d 39 38 36 2e 0a 2a 2a 20 42   to 1e-986..** B
60a0: 75 74 20 74 68 65 20 61 6c 6c 6f 77 65 64 20 76  ut the allowed v
60b0: 61 6c 75 65 73 20 61 72 65 20 22 67 72 61 69 6e  alues are "grain
60c0: 79 22 2e 20 20 4e 6f 74 20 65 76 65 72 79 20 76  y".  Not every v
60d0: 61 6c 75 65 20 69 73 20 72 65 70 72 65 73 65 6e  alue is represen
60e0: 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 65 78  table..** For ex
60f0: 61 6d 70 6c 65 2c 20 71 75 61 6e 74 69 74 69 65  ample, quantitie
6100: 73 20 31 36 20 61 6e 64 20 31 37 20 61 72 65 20  s 16 and 17 are 
6110: 62 6f 74 68 20 72 65 70 72 65 73 65 6e 74 65 64  both represented
6120: 20 62 79 20 61 20 4c 6f 67 45 73 74 0a 2a 2a 20   by a LogEst.** 
6130: 6f 66 20 34 30 2e 20 20 48 6f 77 65 76 65 72 2c  of 40.  However,
6140: 20 73 69 6e 63 65 20 4c 6f 67 45 73 74 20 71 75   since LogEst qu
6150: 61 6e 74 69 74 69 65 73 20 61 72 65 20 73 75 70  antities are sup
6160: 70 6f 73 65 20 74 6f 20 62 65 20 65 73 74 69 6d  pose to be estim
6170: 61 74 65 73 2c 0a 2a 2a 20 6e 6f 74 20 65 78 61  ates,.** not exa
6180: 63 74 20 76 61 6c 75 65 73 2c 20 74 68 69 73 20  ct values, this 
6190: 69 6d 70 72 65 63 69 73 69 6f 6e 20 69 73 20 6e  imprecision is n
61a0: 6f 74 20 61 20 70 72 6f 62 6c 65 6d 2e 0a 2a 2a  ot a problem..**
61b0: 0a 2a 2a 20 22 4c 6f 67 45 73 74 22 20 69 73 20  .** "LogEst" is 
61c0: 73 68 6f 72 74 20 66 6f 72 20 22 4c 6f 67 61 72  short for "Logar
61d0: 69 74 68 6d 69 63 20 45 73 74 69 6d 61 74 65 22  ithmic Estimate"
61e0: 2e 0a 2a 2a 0a 2a 2a 20 45 78 61 6d 70 6c 65 73  ..**.** Examples
61f0: 3a 0a 2a 2a 20 20 20 20 20 20 31 20 2d 3e 20 30  :.**      1 -> 0
6200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 32 30                20
6210: 20 2d 3e 20 34 33 20 20 20 20 20 20 20 20 20 20   -> 43          
6220: 31 30 30 30 30 20 2d 3e 20 31 33 32 0a 2a 2a 20  10000 -> 132.** 
6230: 20 20 20 20 20 32 20 2d 3e 20 31 30 20 20 20 20       2 -> 10    
6240: 20 20 20 20 20 20 20 20 20 32 35 20 2d 3e 20 34           25 -> 4
6250: 36 20 20 20 20 20 20 20 20 20 20 32 35 30 30 30  6          25000
6260: 20 2d 3e 20 31 34 36 0a 2a 2a 20 20 20 20 20 20   -> 146.**      
6270: 33 20 2d 3e 20 31 36 20 20 20 20 20 20 20 20 20  3 -> 16         
6280: 20 20 20 31 30 30 20 2d 3e 20 36 36 20 20 20 20     100 -> 66    
6290: 20 20 20 20 31 30 30 30 30 30 30 20 2d 3e 20 31      1000000 -> 1
62a0: 39 39 0a 2a 2a 20 20 20 20 20 20 34 20 2d 3e 20  99.**      4 -> 
62b0: 32 30 20 20 20 20 20 20 20 20 20 20 20 31 30 30  20           100
62c0: 30 20 2d 3e 20 39 39 20 20 20 20 20 20 20 20 31  0 -> 99        1
62d0: 30 34 38 35 37 36 20 2d 3e 20 32 30 30 0a 2a 2a  048576 -> 200.**
62e0: 20 20 20 20 20 31 30 20 2d 3e 20 33 33 20 20 20       10 -> 33   
62f0: 20 20 20 20 20 20 20 20 31 30 32 34 20 2d 3e 20          1024 -> 
6300: 31 30 30 20 20 20 20 34 32 39 34 39 36 37 32 39  100    429496729
6310: 36 20 2d 3e 20 33 32 30 0a 2a 2a 0a 2a 2a 20 54  6 -> 320.**.** T
6320: 68 65 20 4c 6f 67 45 73 74 20 63 61 6e 20 62 65  he LogEst can be
6330: 20 6e 65 67 61 74 69 76 65 20 74 6f 20 69 6e 64   negative to ind
6340: 69 63 61 74 65 20 66 72 61 63 74 69 6f 6e 61 6c  icate fractional
6350: 20 76 61 6c 75 65 73 2e 0a 2a 2a 20 45 78 61 6d   values..** Exam
6360: 70 6c 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 30  ples:.**.**    0
6370: 2e 35 20 2d 3e 20 2d 31 30 20 20 20 20 20 20 20  .5 -> -10       
6380: 20 20 20 20 30 2e 31 20 2d 3e 20 2d 33 33 20 20      0.1 -> -33  
6390: 20 20 20 20 20 20 30 2e 30 36 32 35 20 2d 3e 20        0.0625 -> 
63a0: 2d 34 30 0a 2a 2f 0a 74 79 70 65 64 65 66 20 49  -40.*/.typedef I
63b0: 4e 54 31 36 5f 54 59 50 45 20 4c 6f 67 45 73 74  NT16_TYPE LogEst
63c0: 3b 0a 0a 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65  ;../*.** Set the
63d0: 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 20   SQLITE_PTRSIZE 
63e0: 6d 61 63 72 6f 20 74 6f 20 74 68 65 20 6e 75 6d  macro to the num
63f0: 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20  ber of bytes in 
6400: 61 20 70 6f 69 6e 74 65 72 0a 2a 2f 0a 23 69 66  a pointer.*/.#if
6410: 6e 64 65 66 20 53 51 4c 49 54 45 5f 50 54 52 53  ndef SQLITE_PTRS
6420: 49 5a 45 0a 23 20 69 66 20 64 65 66 69 6e 65 64  IZE.# if defined
6430: 28 5f 5f 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45  (__SIZEOF_POINTE
6440: 52 5f 5f 29 0a 23 20 20 20 64 65 66 69 6e 65 20  R__).#   define 
6450: 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 5f  SQLITE_PTRSIZE _
6460: 5f 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f  _SIZEOF_POINTER_
6470: 5f 0a 23 20 65 6c 69 66 20 64 65 66 69 6e 65 64  _.# elif defined
6480: 28 69 33 38 36 29 20 20 20 20 20 7c 7c 20 64 65  (i386)     || de
6490: 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20  fined(__i386__) 
64a0: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f    || defined(_M_
64b0: 49 58 38 36 29 20 7c 7c 20 20 20 20 5c 0a 20 20  IX86) ||    \.  
64c0: 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f       defined(_M_
64d0: 41 52 4d 29 20 20 20 7c 7c 20 64 65 66 69 6e 65  ARM)   || define
64e0: 64 28 5f 5f 61 72 6d 5f 5f 29 20 20 20 20 7c 7c  d(__arm__)    ||
64f0: 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 29 0a   defined(__x86).
6500: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
6510: 45 5f 50 54 52 53 49 5a 45 20 34 0a 23 20 65 6c  E_PTRSIZE 4.# el
6520: 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  se.#   define SQ
6530: 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 38 0a 23  LITE_PTRSIZE 8.#
6540: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f   endif.#endif../
6550: 2a 20 54 68 65 20 75 70 74 72 20 74 79 70 65 20  * The uptr type 
6560: 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20 69  is an unsigned i
6570: 6e 74 65 67 65 72 20 6c 61 72 67 65 20 65 6e 6f  nteger large eno
6580: 75 67 68 20 74 6f 20 68 6f 6c 64 20 61 20 70 6f  ugh to hold a po
6590: 69 6e 74 65 72 0a 2a 2f 0a 23 69 66 20 64 65 66  inter.*/.#if def
65a0: 69 6e 65 64 28 48 41 56 45 5f 53 54 44 49 4e 54  ined(HAVE_STDINT
65b0: 5f 48 29 0a 20 20 74 79 70 65 64 65 66 20 75 69  _H).  typedef ui
65c0: 6e 74 70 74 72 5f 74 20 75 70 74 72 3b 0a 23 65  ntptr_t uptr;.#e
65d0: 6c 69 66 20 53 51 4c 49 54 45 5f 50 54 52 53 49  lif SQLITE_PTRSI
65e0: 5a 45 3d 3d 34 0a 20 20 74 79 70 65 64 65 66 20  ZE==4.  typedef 
65f0: 75 33 32 20 75 70 74 72 3b 0a 23 65 6c 73 65 0a  u32 uptr;.#else.
6600: 20 20 74 79 70 65 64 65 66 20 75 36 34 20 75 70    typedef u64 up
6610: 74 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  tr;.#endif../*.*
6620: 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 57 49 54  * The SQLITE_WIT
6630: 48 49 4e 28 50 2c 53 2c 45 29 20 6d 61 63 72 6f  HIN(P,S,E) macro
6640: 20 63 68 65 63 6b 73 20 74 6f 20 73 65 65 20 69   checks to see i
6650: 66 20 70 6f 69 6e 74 65 72 20 50 20 70 6f 69 6e  f pointer P poin
6660: 74 73 20 74 6f 0a 2a 2a 20 73 6f 6d 65 74 68 69  ts to.** somethi
6670: 6e 67 20 62 65 74 77 65 65 6e 20 53 20 28 69 6e  ng between S (in
6680: 63 6c 75 73 69 76 65 29 20 61 6e 64 20 45 20 28  clusive) and E (
6690: 65 78 63 6c 75 73 69 76 65 29 2e 0a 2a 2a 0a 2a  exclusive)..**.*
66a0: 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  * In other words
66b0: 2c 20 53 20 69 73 20 61 20 62 75 66 66 65 72 20  , S is a buffer 
66c0: 61 6e 64 20 45 20 69 73 20 61 20 70 6f 69 6e 74  and E is a point
66d0: 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  er to the first 
66e0: 62 79 74 65 20 61 66 74 65 72 0a 2a 2a 20 74 68  byte after.** th
66f0: 65 20 65 6e 64 20 6f 66 20 62 75 66 66 65 72 20  e end of buffer 
6700: 53 2e 20 20 54 68 69 73 20 6d 61 63 72 6f 20 72  S.  This macro r
6710: 65 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 50  eturns true if P
6720: 20 70 6f 69 6e 74 73 20 74 6f 20 73 6f 6d 65 74   points to somet
6730: 68 69 6e 67 0a 2a 2a 20 63 6f 6e 74 61 69 6e 65  hing.** containe
6740: 64 20 77 69 74 68 69 6e 20 74 68 65 20 62 75 66  d within the buf
6750: 66 65 72 20 53 2e 0a 2a 2f 0a 23 64 65 66 69 6e  fer S..*/.#defin
6760: 65 20 53 51 4c 49 54 45 5f 57 49 54 48 49 4e 28  e SQLITE_WITHIN(
6770: 50 2c 53 2c 45 29 20 28 28 28 75 70 74 72 29 28  P,S,E) (((uptr)(
6780: 50 29 3e 3d 28 75 70 74 72 29 28 53 29 29 26 26  P)>=(uptr)(S))&&
6790: 28 28 75 70 74 72 29 28 50 29 3c 28 75 70 74 72  ((uptr)(P)<(uptr
67a0: 29 28 45 29 29 29 0a 0a 0a 2f 2a 0a 2a 2a 20 4d  )(E))).../*.** M
67b0: 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69  acros to determi
67c0: 6e 65 20 77 68 65 74 68 65 72 20 74 68 65 20 6d  ne whether the m
67d0: 61 63 68 69 6e 65 20 69 73 20 62 69 67 20 6f 72  achine is big or
67e0: 20 6c 69 74 74 6c 65 20 65 6e 64 69 61 6e 2c 0a   little endian,.
67f0: 2a 2a 20 61 6e 64 20 77 68 65 74 68 65 72 20 6f  ** and whether o
6800: 72 20 6e 6f 74 20 74 68 61 74 20 64 65 74 65 72  r not that deter
6810: 6d 69 6e 61 74 69 6f 6e 20 69 73 20 72 75 6e 2d  mination is run-
6820: 74 69 6d 65 20 6f 72 20 63 6f 6d 70 69 6c 65 2d  time or compile-
6830: 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72 20  time..**.** For 
6840: 62 65 73 74 20 70 65 72 66 6f 72 6d 61 6e 63 65  best performance
6850: 2c 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20  , an attempt is 
6860: 6d 61 64 65 20 74 6f 20 67 75 65 73 73 20 61 74  made to guess at
6870: 20 74 68 65 20 62 79 74 65 2d 6f 72 64 65 72 0a   the byte-order.
6880: 2a 2a 20 75 73 69 6e 67 20 43 2d 70 72 65 70 72  ** using C-prepr
6890: 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 2e 20  ocessor macros. 
68a0: 20 49 66 20 74 68 61 74 20 69 73 20 75 6e 73 75   If that is unsu
68b0: 63 63 65 73 73 66 75 6c 2c 20 6f 72 20 69 66 0a  ccessful, or if.
68c0: 2a 2a 20 2d 44 53 51 4c 49 54 45 5f 42 59 54 45  ** -DSQLITE_BYTE
68d0: 4f 52 44 45 52 3d 30 20 69 73 20 73 65 74 2c 20  ORDER=0 is set, 
68e0: 74 68 65 6e 20 62 79 74 65 2d 6f 72 64 65 72 20  then byte-order 
68f0: 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 2a 2a  is determined.**
6900: 20 61 74 20 72 75 6e 2d 74 69 6d 65 2e 0a 2a 2f   at run-time..*/
6910: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
6920: 42 59 54 45 4f 52 44 45 52 0a 23 20 69 66 20 64  BYTEORDER.# if d
6930: 65 66 69 6e 65 64 28 69 33 38 36 29 20 20 20 20  efined(i386)    
6940: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69 33   || defined(__i3
6950: 38 36 5f 5f 29 20 20 20 7c 7c 20 64 65 66 69 6e  86__)   || defin
6960: 65 64 28 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20  ed(_M_IX86) ||  
6970: 20 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64    \.     defined
6980: 28 5f 5f 78 38 36 5f 36 34 29 20 7c 7c 20 64 65  (__x86_64) || de
6990: 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 5f 5f  fined(__x86_64__
69a0: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f  ) || defined(_M_
69b0: 58 36 34 29 20 20 7c 7c 20 20 20 20 5c 0a 20 20  X64)  ||    \.  
69c0: 20 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 4d     defined(_M_AM
69d0: 44 36 34 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  D64) || defined(
69e0: 5f 4d 5f 41 52 4d 29 20 20 20 20 20 7c 7c 20 64  _M_ARM)     || d
69f0: 65 66 69 6e 65 64 28 5f 5f 78 38 36 29 20 20 20  efined(__x86)   
6a00: 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65 66  ||    \.     def
6a10: 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f 29 0a 23 20  ined(__arm__).# 
6a20: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
6a30: 42 59 54 45 4f 52 44 45 52 20 20 20 20 31 32 33  BYTEORDER    123
6a40: 34 0a 23 20 65 6c 69 66 20 64 65 66 69 6e 65 64  4.# elif defined
6a50: 28 73 70 61 72 63 29 20 20 20 20 7c 7c 20 64 65  (sparc)    || de
6a60: 66 69 6e 65 64 28 5f 5f 70 70 63 5f 5f 29 0a 23  fined(__ppc__).#
6a70: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
6a80: 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20 34 33  _BYTEORDER    43
6a90: 32 31 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65  21.# else.#   de
6aa0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59 54 45  fine SQLITE_BYTE
6ab0: 4f 52 44 45 52 20 30 0a 23 20 65 6e 64 69 66 0a  ORDER 0.# endif.
6ac0: 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54  #endif.#if SQLIT
6ad0: 45 5f 42 59 54 45 4f 52 44 45 52 3d 3d 34 33 32  E_BYTEORDER==432
6ae0: 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  1.# define SQLIT
6af0: 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 31  E_BIGENDIAN    1
6b00: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
6b10: 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 30 0a  _LITTLEENDIAN 0.
6b20: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
6b30: 55 54 46 31 36 4e 41 54 49 56 45 20 20 53 51 4c  UTF16NATIVE  SQL
6b40: 49 54 45 5f 55 54 46 31 36 42 45 0a 23 65 6c 69  ITE_UTF16BE.#eli
6b50: 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44  f SQLITE_BYTEORD
6b60: 45 52 3d 3d 31 32 33 34 0a 23 20 64 65 66 69 6e  ER==1234.# defin
6b70: 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49  e SQLITE_BIGENDI
6b80: 41 4e 20 20 20 20 30 0a 23 20 64 65 66 69 6e 65  AN    0.# define
6b90: 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e   SQLITE_LITTLEEN
6ba0: 44 49 41 4e 20 31 0a 23 20 64 65 66 69 6e 65 20  DIAN 1.# define 
6bb0: 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49  SQLITE_UTF16NATI
6bc0: 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36  VE  SQLITE_UTF16
6bd0: 4c 45 0a 23 65 6c 73 65 0a 23 20 69 66 64 65 66  LE.#else.# ifdef
6be0: 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41   SQLITE_AMALGAMA
6bf0: 54 49 4f 4e 0a 20 20 63 6f 6e 73 74 20 69 6e 74  TION.  const int
6c00: 20 73 71 6c 69 74 65 33 6f 6e 65 20 3d 20 31 3b   sqlite3one = 1;
6c10: 0a 23 20 65 6c 73 65 0a 20 20 65 78 74 65 72 6e  .# else.  extern
6c20: 20 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74   const int sqlit
6c30: 65 33 6f 6e 65 3b 0a 23 20 65 6e 64 69 66 0a 23  e3one;.# endif.#
6c40: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42   define SQLITE_B
6c50: 49 47 45 4e 44 49 41 4e 20 20 20 20 28 2a 28 63  IGENDIAN    (*(c
6c60: 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65 33 6f  har *)(&sqlite3o
6c70: 6e 65 29 3d 3d 30 29 0a 23 20 64 65 66 69 6e 65  ne)==0).# define
6c80: 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e   SQLITE_LITTLEEN
6c90: 44 49 41 4e 20 28 2a 28 63 68 61 72 20 2a 29 28  DIAN (*(char *)(
6ca0: 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 31 29  &sqlite3one)==1)
6cb0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
6cc0: 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 28 53  _UTF16NATIVE  (S
6cd0: 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 3f  QLITE_BIGENDIAN?
6ce0: 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 3a 53  SQLITE_UTF16BE:S
6cf0: 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 29 0a 23  QLITE_UTF16LE).#
6d00: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e  endif../*.** Con
6d10: 73 74 61 6e 74 73 20 66 6f 72 20 74 68 65 20 6c  stants for the l
6d20: 61 72 67 65 73 74 20 61 6e 64 20 73 6d 61 6c 6c  argest and small
6d30: 65 73 74 20 70 6f 73 73 69 62 6c 65 20 36 34 2d  est possible 64-
6d40: 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67  bit signed integ
6d50: 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20 6d 61  ers..** These ma
6d60: 63 72 6f 73 20 61 72 65 20 64 65 73 69 67 6e 65  cros are designe
6d70: 64 20 74 6f 20 77 6f 72 6b 20 63 6f 72 72 65 63  d to work correc
6d80: 74 6c 79 20 6f 6e 20 62 6f 74 68 20 33 32 2d 62  tly on both 32-b
6d90: 69 74 20 61 6e 64 20 36 34 2d 62 69 74 0a 2a 2a  it and 64-bit.**
6da0: 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f 0a 23   compilers..*/.#
6db0: 64 65 66 69 6e 65 20 4c 41 52 47 45 53 54 5f 49  define LARGEST_I
6dc0: 4e 54 36 34 20 20 28 30 78 66 66 66 66 66 66 66  NT64  (0xfffffff
6dd0: 66 7c 28 28 28 69 36 34 29 30 78 37 66 66 66 66  f|(((i64)0x7ffff
6de0: 66 66 66 29 3c 3c 33 32 29 29 0a 23 64 65 66 69  fff)<<32)).#defi
6df0: 6e 65 20 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36  ne SMALLEST_INT6
6e00: 34 20 28 28 28 69 36 34 29 2d 31 29 20 2d 20 4c  4 (((i64)-1) - L
6e10: 41 52 47 45 53 54 5f 49 4e 54 36 34 29 0a 0a 2f  ARGEST_INT64)../
6e20: 2a 0a 2a 2a 20 52 6f 75 6e 64 20 75 70 20 61 20  *.** Round up a 
6e30: 6e 75 6d 62 65 72 20 74 6f 20 74 68 65 20 6e 65  number to the ne
6e40: 78 74 20 6c 61 72 67 65 72 20 6d 75 6c 74 69 70  xt larger multip
6e50: 6c 65 20 6f 66 20 38 2e 20 20 54 68 69 73 20 69  le of 8.  This i
6e60: 73 20 75 73 65 64 0a 2a 2a 20 74 6f 20 66 6f 72  s used.** to for
6e70: 63 65 20 38 2d 62 79 74 65 20 61 6c 69 67 6e 6d  ce 8-byte alignm
6e80: 65 6e 74 20 6f 6e 20 36 34 2d 62 69 74 20 61 72  ent on 64-bit ar
6e90: 63 68 69 74 65 63 74 75 72 65 73 2e 0a 2a 2f 0a  chitectures..*/.
6ea0: 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 38 28 78  #define ROUND8(x
6eb0: 29 20 20 20 20 20 28 28 28 78 29 2b 37 29 26 7e  )     (((x)+7)&~
6ec0: 37 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20  7)../*.** Round 
6ed0: 64 6f 77 6e 20 74 6f 20 74 68 65 20 6e 65 61 72  down to the near
6ee0: 65 73 74 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20  est multiple of 
6ef0: 38 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55  8.*/.#define ROU
6f00: 4e 44 44 4f 57 4e 38 28 78 29 20 28 28 78 29 26  NDDOWN8(x) ((x)&
6f10: 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65 72  ~7)../*.** Asser
6f20: 74 20 74 68 61 74 20 74 68 65 20 70 6f 69 6e 74  t that the point
6f30: 65 72 20 58 20 69 73 20 61 6c 69 67 6e 65 64 20  er X is aligned 
6f40: 74 6f 20 61 6e 20 38 2d 62 79 74 65 20 62 6f 75  to an 8-byte bou
6f50: 6e 64 61 72 79 2e 20 20 54 68 69 73 0a 2a 2a 20  ndary.  This.** 
6f60: 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 6f 6e  macro is used on
6f70: 6c 79 20 77 69 74 68 69 6e 20 61 73 73 65 72 74  ly within assert
6f80: 28 29 20 74 6f 20 76 65 72 69 66 79 20 74 68 61  () to verify tha
6f90: 74 20 74 68 65 20 63 6f 64 65 20 67 65 74 73 0a  t the code gets.
6fa0: 2a 2a 20 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e 74  ** all alignment
6fb0: 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20 63 6f   restrictions co
6fc0: 72 72 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78 63  rrect..**.** Exc
6fd0: 65 70 74 2c 20 69 66 20 53 51 4c 49 54 45 5f 34  ept, if SQLITE_4
6fe0: 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41  _BYTE_ALIGNED_MA
6ff0: 4c 4c 4f 43 20 69 73 20 64 65 66 69 6e 65 64 2c  LLOC is defined,
7000: 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 75 6e 64   then the.** und
7010: 65 72 6c 79 69 6e 67 20 6d 61 6c 6c 6f 63 28 29  erlying malloc()
7020: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
7030: 6d 69 67 68 74 20 72 65 74 75 72 6e 20 75 73 20  might return us 
7040: 34 2d 62 79 74 65 20 61 6c 69 67 6e 65 64 0a 2a  4-byte aligned.*
7050: 2a 20 70 6f 69 6e 74 65 72 73 2e 20 20 49 6e 20  * pointers.  In 
7060: 74 68 61 74 20 63 61 73 65 2c 20 6f 6e 6c 79 20  that case, only 
7070: 76 65 72 69 66 79 20 34 2d 62 79 74 65 20 61 6c  verify 4-byte al
7080: 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66 64  ignment..*/.#ifd
7090: 65 66 20 53 51 4c 49 54 45 5f 34 5f 42 59 54 45  ef SQLITE_4_BYTE
70a0: 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 0a  _ALIGNED_MALLOC.
70b0: 23 20 64 65 66 69 6e 65 20 45 49 47 48 54 5f 42  # define EIGHT_B
70c0: 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29  YTE_ALIGNMENT(X)
70d0: 20 20 20 28 28 28 28 63 68 61 72 2a 29 28 58 29     ((((char*)(X)
70e0: 20 2d 20 28 63 68 61 72 2a 29 30 29 26 33 29 3d   - (char*)0)&3)=
70f0: 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  =0).#else.# defi
7100: 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41 4c  ne EIGHT_BYTE_AL
7110: 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28 28  IGNMENT(X)   (((
7120: 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63 68  (char*)(X) - (ch
7130: 61 72 2a 29 30 29 26 37 29 3d 3d 30 29 0a 23 65  ar*)0)&7)==0).#e
7140: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 61  ndif../*.** Disa
7150: 62 6c 65 20 4d 4d 41 50 20 6f 6e 20 70 6c 61 74  ble MMAP on plat
7160: 66 6f 72 6d 73 20 77 68 65 72 65 20 69 74 20 69  forms where it i
7170: 73 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74 20 77  s known to not w
7180: 6f 72 6b 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  ork.*/.#if defin
7190: 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20  ed(__OpenBSD__) 
71a0: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 51 4e 58  || defined(__QNX
71b0: 4e 54 4f 5f 5f 29 0a 23 20 75 6e 64 65 66 20 53  NTO__).# undef S
71c0: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
71d0: 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  IZE.# define SQL
71e0: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
71f0: 45 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  E 0.#endif../*.*
7200: 2a 20 44 65 66 61 75 6c 74 20 6d 61 78 69 6d 75  * Default maximu
7210: 6d 20 73 69 7a 65 20 6f 66 20 6d 65 6d 6f 72 79  m size of memory
7220: 20 75 73 65 64 20 62 79 20 6d 65 6d 6f 72 79 2d   used by memory-
7230: 6d 61 70 70 65 64 20 49 2f 4f 20 69 6e 20 74 68  mapped I/O in th
7240: 65 20 56 46 53 0a 2a 2f 0a 23 69 66 64 65 66 20  e VFS.*/.#ifdef 
7250: 5f 5f 41 50 50 4c 45 5f 5f 0a 23 20 69 6e 63 6c  __APPLE__.# incl
7260: 75 64 65 20 3c 54 61 72 67 65 74 43 6f 6e 64 69  ude <TargetCondi
7270: 74 69 6f 6e 61 6c 73 2e 68 3e 0a 23 65 6e 64 69  tionals.h>.#endi
7280: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
7290: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23  _MAX_MMAP_SIZE.#
72a0: 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 6c 69   if defined(__li
72b0: 6e 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64 65  nux__) \.  || de
72c0: 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 5c 0a  fined(_WIN32) \.
72d0: 20 20 7c 7c 20 28 64 65 66 69 6e 65 64 28 5f 5f    || (defined(__
72e0: 41 50 50 4c 45 5f 5f 29 20 26 26 20 64 65 66 69  APPLE__) && defi
72f0: 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f 29 29 20 5c  ned(__MACH__)) \
7300: 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f  .  || defined(__
7310: 73 75 6e 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69  sun) \.  || defi
7320: 6e 65 64 28 5f 5f 46 72 65 65 42 53 44 5f 5f 29  ned(__FreeBSD__)
7330: 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28   \.  || defined(
7340: 5f 5f 44 72 61 67 6f 6e 46 6c 79 5f 5f 29 0a 23  __DragonFly__).#
7350: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
7360: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30  _MAX_MMAP_SIZE 0
7370: 78 37 66 66 66 30 30 30 30 20 20 2f 2a 20 32 31  x7fff0000  /* 21
7380: 34 37 34 31 38 31 31 32 20 2a 2f 0a 23 20 65 6c  47418112 */.# el
7390: 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  se.#   define SQ
73a0: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
73b0: 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23 20 64  ZE 0.# endif.# d
73c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
73d0: 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78 63 20 31 20  _MMAP_SIZE_xc 1 
73e0: 2f 2a 20 65 78 63 6c 75 64 65 20 66 72 6f 6d 20  /* exclude from 
73f0: 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69  ctime.c */.#endi
7400: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 65 66  f../*.** The def
7410: 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20 69  ault MMAP_SIZE i
7420: 73 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c 20 70 6c  s zero on all pl
7430: 61 74 66 6f 72 6d 73 2e 20 20 4f 72 2c 20 65 76  atforms.  Or, ev
7440: 65 6e 20 69 66 20 61 20 6c 61 72 67 65 72 0a 2a  en if a larger.*
7450: 2a 20 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53  * default MMAP_S
7460: 49 5a 45 20 69 73 20 73 70 65 63 69 66 69 65 64  IZE is specified
7470: 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65   at compile-time
7480: 2c 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61 74  , make sure that
7490: 20 69 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20   it does.** not 
74a0: 65 78 63 65 65 64 20 74 68 65 20 6d 61 78 69 6d  exceed the maxim
74b0: 75 6d 20 6d 6d 61 70 20 73 69 7a 65 2e 0a 2a 2f  um mmap size..*/
74c0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
74d0: 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a  DEFAULT_MMAP_SIZ
74e0: 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  E.# define SQLIT
74f0: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
7500: 49 5a 45 20 30 0a 23 20 64 65 66 69 6e 65 20 53  IZE 0.# define S
7510: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d  QLITE_DEFAULT_MM
7520: 41 50 5f 53 49 5a 45 5f 78 63 20 31 20 20 2f 2a  AP_SIZE_xc 1  /*
7530: 20 45 78 63 6c 75 64 65 20 66 72 6f 6d 20 63 74   Exclude from ct
7540: 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69 66 0a  ime.c */.#endif.
7550: 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  #if SQLITE_DEFAU
7560: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53 51 4c  LT_MMAP_SIZE>SQL
7570: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
7580: 45 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  E.# undef SQLITE
7590: 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49  _DEFAULT_MMAP_SI
75a0: 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  ZE.# define SQLI
75b0: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
75c0: 53 49 5a 45 20 53 51 4c 49 54 45 5f 4d 41 58 5f  SIZE SQLITE_MAX_
75d0: 4d 4d 41 50 5f 53 49 5a 45 0a 23 65 6e 64 69 66  MMAP_SIZE.#endif
75e0: 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 6c 79 20 6f 6e 65  ../*.** Only one
75f0: 20 6f 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c   of SQLITE_ENABL
7600: 45 5f 53 54 41 54 33 20 6f 72 20 53 51 4c 49 54  E_STAT3 or SQLIT
7610: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 20 63  E_ENABLE_STAT4 c
7620: 61 6e 20 62 65 20 64 65 66 69 6e 65 64 2e 0a 2a  an be defined..*
7630: 2a 20 50 72 69 6f 72 69 74 79 20 69 73 20 67 69  * Priority is gi
7640: 76 65 6e 20 74 6f 20 53 51 4c 49 54 45 5f 45 4e  ven to SQLITE_EN
7650: 41 42 4c 45 5f 53 54 41 54 34 2e 20 20 49 66 20  ABLE_STAT4.  If 
7660: 65 69 74 68 65 72 20 61 72 65 20 64 65 66 69 6e  either are defin
7670: 65 64 2c 20 61 6c 73 6f 0a 2a 2a 20 64 65 66 69  ed, also.** defi
7680: 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
7690: 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a  _STAT3_OR_STAT4.
76a0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
76b0: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 0a 23 20  _ENABLE_STAT4.# 
76c0: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  undef SQLITE_ENA
76d0: 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65 66 69  BLE_STAT3.# defi
76e0: 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
76f0: 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 20  _STAT3_OR_STAT4 
7700: 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 45  1.#elif SQLITE_E
7710: 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65  NABLE_STAT3.# de
7720: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  fine SQLITE_ENAB
7730: 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
7740: 34 20 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45  4 1.#elif SQLITE
7750: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
7760: 5f 53 54 41 54 34 0a 23 20 75 6e 64 65 66 20 53  _STAT4.# undef S
7770: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
7780: 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23 65 6e 64  T3_OR_STAT4.#end
7790: 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 45 4c 45 43 54  if../*.** SELECT
77a0: 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 77 69  TRACE_ENABLED wi
77b0: 6c 6c 20 62 65 20 65 69 74 68 65 72 20 31 20 6f  ll be either 1 o
77c0: 72 20 30 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  r 0 depending on
77d0: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 0a   whether or not.
77e0: 2a 2a 20 74 68 65 20 53 65 6c 65 63 74 20 71 75  ** the Select qu
77f0: 65 72 79 20 67 65 6e 65 72 61 74 6f 72 20 74 72  ery generator tr
7800: 61 63 69 6e 67 20 6c 6f 67 69 63 20 69 73 20 74  acing logic is t
7810: 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66  urned on..*/.#if
7820: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
7830: 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65  DEBUG) || define
7840: 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
7850: 53 45 4c 45 43 54 54 52 41 43 45 29 0a 23 20 64  SELECTTRACE).# d
7860: 65 66 69 6e 65 20 53 45 4c 45 43 54 54 52 41 43  efine SELECTTRAC
7870: 45 5f 45 4e 41 42 4c 45 44 20 31 0a 23 65 6c 73  E_ENABLED 1.#els
7880: 65 0a 23 20 64 65 66 69 6e 65 20 53 45 4c 45 43  e.# define SELEC
7890: 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 30  TTRACE_ENABLED 0
78a0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
78b0: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
78c0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
78d0: 63 74 75 72 65 20 69 73 20 75 73 65 64 20 74 6f  cture is used to
78e0: 20 73 74 6f 72 65 20 74 68 65 20 62 75 73 79 2d   store the busy-
78f0: 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62  handler.** callb
7900: 61 63 6b 20 66 6f 72 20 61 20 67 69 76 65 6e 20  ack for a given 
7910: 73 71 6c 69 74 65 20 68 61 6e 64 6c 65 2e 0a 2a  sqlite handle..*
7920: 2a 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 2e  *.** The sqlite.
7930: 62 75 73 79 48 61 6e 64 6c 65 72 20 6d 65 6d 62  busyHandler memb
7940: 65 72 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  er of the sqlite
7950: 20 73 74 72 75 63 74 20 63 6f 6e 74 61 69 6e 73   struct contains
7960: 20 74 68 65 20 62 75 73 79 0a 2a 2a 20 63 61 6c   the busy.** cal
7970: 6c 62 61 63 6b 20 66 6f 72 20 74 68 65 20 64 61  lback for the da
7980: 74 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 20 45  tabase handle. E
7990: 61 63 68 20 70 61 67 65 72 20 6f 70 65 6e 65 64  ach pager opened
79a0: 20 76 69 61 20 74 68 65 20 73 71 6c 69 74 65 0a   via the sqlite.
79b0: 2a 2a 20 68 61 6e 64 6c 65 20 69 73 20 70 61 73  ** handle is pas
79c0: 73 65 64 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  sed a pointer to
79d0: 20 73 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64   sqlite.busyHand
79e0: 6c 65 72 2e 20 54 68 65 20 62 75 73 79 2d 68 61  ler. The busy-ha
79f0: 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63  ndler.** callbac
7a00: 6b 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 69  k is currently i
7a10: 6e 76 6f 6b 65 64 20 6f 6e 6c 79 20 66 72 6f 6d  nvoked only from
7a20: 20 77 69 74 68 69 6e 20 70 61 67 65 72 2e 63 2e   within pager.c.
7a30: 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75  .*/.typedef stru
7a40: 63 74 20 42 75 73 79 48 61 6e 64 6c 65 72 20 42  ct BusyHandler B
7a50: 75 73 79 48 61 6e 64 6c 65 72 3b 0a 73 74 72 75  usyHandler;.stru
7a60: 63 74 20 42 75 73 79 48 61 6e 64 6c 65 72 20 7b  ct BusyHandler {
7a70: 0a 20 20 69 6e 74 20 28 2a 78 46 75 6e 63 29 28  .  int (*xFunc)(
7a80: 76 6f 69 64 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a  void *,int);  /*
7a90: 20 54 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61   The busy callba
7aa0: 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41  ck */.  void *pA
7ab0: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
7ac0: 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 20     /* First arg 
7ad0: 74 6f 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b  to busy callback
7ae0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75 73 79 3b   */.  int nBusy;
7af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b00: 20 2f 2a 20 49 6e 63 72 65 6d 65 6e 74 65 64 20   /* Incremented 
7b10: 77 69 74 68 20 65 61 63 68 20 62 75 73 79 20 63  with each busy c
7b20: 61 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  all */.};../*.**
7b30: 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 6d 61 73   Name of the mas
7b40: 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62  ter database tab
7b50: 6c 65 2e 20 20 54 68 65 20 6d 61 73 74 65 72 20  le.  The master 
7b60: 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 0a 2a  database table.*
7b70: 2a 20 69 73 20 61 20 73 70 65 63 69 61 6c 20 74  * is a special t
7b80: 61 62 6c 65 20 74 68 61 74 20 68 6f 6c 64 73 20  able that holds 
7b90: 74 68 65 20 6e 61 6d 65 73 20 61 6e 64 20 61 74  the names and at
7ba0: 74 72 69 62 75 74 65 73 20 6f 66 20 61 6c 6c 0a  tributes of all.
7bb0: 2a 2a 20 75 73 65 72 20 74 61 62 6c 65 73 20 61  ** user tables a
7bc0: 6e 64 20 69 6e 64 69 63 65 73 2e 0a 2a 2f 0a 23  nd indices..*/.#
7bd0: 64 65 66 69 6e 65 20 4d 41 53 54 45 52 5f 4e 41  define MASTER_NA
7be0: 4d 45 20 20 20 20 20 20 20 22 73 71 6c 69 74 65  ME       "sqlite
7bf0: 5f 6d 61 73 74 65 72 22 0a 23 64 65 66 69 6e 65  _master".#define
7c00: 20 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d   TEMP_MASTER_NAM
7c10: 45 20 20 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f  E  "sqlite_temp_
7c20: 6d 61 73 74 65 72 22 0a 0a 2f 2a 0a 2a 2a 20 54  master"../*.** T
7c30: 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20  he root-page of 
7c40: 74 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62  the master datab
7c50: 61 73 65 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64  ase table..*/.#d
7c60: 65 66 69 6e 65 20 4d 41 53 54 45 52 5f 52 4f 4f  efine MASTER_ROO
7c70: 54 20 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a  T       1../*.**
7c80: 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   The name of the
7c90: 20 73 63 68 65 6d 61 20 74 61 62 6c 65 2e 0a 2a   schema table..*
7ca0: 2f 0a 23 64 65 66 69 6e 65 20 53 43 48 45 4d 41  /.#define SCHEMA
7cb0: 5f 54 41 42 4c 45 28 78 29 20 20 28 28 21 4f 4d  _TABLE(x)  ((!OM
7cc0: 49 54 5f 54 45 4d 50 44 42 29 26 26 28 78 3d 3d  IT_TEMPDB)&&(x==
7cd0: 31 29 3f 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e  1)?TEMP_MASTER_N
7ce0: 41 4d 45 3a 4d 41 53 54 45 52 5f 4e 41 4d 45 29  AME:MASTER_NAME)
7cf0: 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 6f 6e 76 65 6e  ../*.** A conven
7d00: 69 65 6e 63 65 20 6d 61 63 72 6f 20 74 68 61 74  ience macro that
7d10: 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d   returns the num
7d20: 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20  ber of elements 
7d30: 69 6e 0a 2a 2a 20 61 6e 20 61 72 72 61 79 2e 0a  in.** an array..
7d40: 2a 2f 0a 23 64 65 66 69 6e 65 20 41 72 72 61 79  */.#define Array
7d50: 53 69 7a 65 28 58 29 20 20 20 20 28 28 69 6e 74  Size(X)    ((int
7d60: 29 28 73 69 7a 65 6f 66 28 58 29 2f 73 69 7a 65  )(sizeof(X)/size
7d70: 6f 66 28 58 5b 30 5d 29 29 29 0a 0a 2f 2a 0a 2a  of(X[0])))../*.*
7d80: 2a 20 44 65 74 65 72 6d 69 6e 65 20 69 66 20 74  * Determine if t
7d90: 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61  he argument is a
7da0: 20 70 6f 77 65 72 20 6f 66 20 74 77 6f 0a 2a 2f   power of two.*/
7db0: 0a 23 64 65 66 69 6e 65 20 49 73 50 6f 77 65 72  .#define IsPower
7dc0: 4f 66 54 77 6f 28 58 29 20 28 28 28 58 29 26 28  OfTwo(X) (((X)&(
7dd0: 28 58 29 2d 31 29 29 3d 3d 30 29 0a 0a 2f 2a 0a  (X)-1))==0)../*.
7de0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
7df0: 20 76 61 6c 75 65 20 61 73 20 61 20 64 65 73 74   value as a dest
7e00: 72 75 63 74 6f 72 20 6d 65 61 6e 73 20 74 6f 20  ructor means to 
7e10: 75 73 65 20 73 71 6c 69 74 65 33 44 62 46 72 65  use sqlite3DbFre
7e20: 65 28 29 2e 0a 2a 2a 20 54 68 65 20 73 71 6c 69  e()..** The sqli
7e30: 74 65 33 44 62 46 72 65 65 28 29 20 72 6f 75 74  te3DbFree() rout
7e40: 69 6e 65 20 72 65 71 75 69 72 65 73 20 74 77 6f  ine requires two
7e50: 20 70 61 72 61 6d 65 74 65 72 73 20 69 6e 73 74   parameters inst
7e60: 65 61 64 20 6f 66 20 74 68 65 0a 2a 2a 20 6f 6e  ead of the.** on
7e70: 65 20 70 61 72 61 6d 65 74 65 72 20 74 68 61 74  e parameter that
7e80: 20 64 65 73 74 72 75 63 74 6f 72 73 20 6e 6f 72   destructors nor
7e90: 6d 61 6c 6c 79 20 77 61 6e 74 2e 20 20 53 6f 20  mally want.  So 
7ea0: 77 65 20 68 61 76 65 20 74 6f 20 69 6e 74 72 6f  we have to intro
7eb0: 64 75 63 65 0a 2a 2a 20 74 68 69 73 20 6d 61 67  duce.** this mag
7ec0: 69 63 20 76 61 6c 75 65 20 74 68 61 74 20 74 68  ic value that th
7ed0: 65 20 63 6f 64 65 20 6b 6e 6f 77 73 20 74 6f 20  e code knows to 
7ee0: 68 61 6e 64 6c 65 20 64 69 66 66 65 72 65 6e 74  handle different
7ef0: 6c 79 2e 20 20 41 6e 79 0a 2a 2a 20 70 6f 69 6e  ly.  Any.** poin
7f00: 74 65 72 20 77 69 6c 6c 20 77 6f 72 6b 20 68 65  ter will work he
7f10: 72 65 20 61 73 20 6c 6f 6e 67 20 61 73 20 69 74  re as long as it
7f20: 20 69 73 20 64 69 73 74 69 6e 63 74 20 66 72 6f   is distinct fro
7f30: 6d 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 0a  m SQLITE_STATIC.
7f40: 2a 2a 20 61 6e 64 20 53 51 4c 49 54 45 5f 54 52  ** and SQLITE_TR
7f50: 41 4e 53 49 45 4e 54 2e 0a 2a 2f 0a 23 64 65 66  ANSIENT..*/.#def
7f60: 69 6e 65 20 53 51 4c 49 54 45 5f 44 59 4e 41 4d  ine SQLITE_DYNAM
7f70: 49 43 20 20 20 28 28 73 71 6c 69 74 65 33 5f 64  IC   ((sqlite3_d
7f80: 65 73 74 72 75 63 74 6f 72 5f 74 79 70 65 29 73  estructor_type)s
7f90: 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65  qlite3MallocSize
7fa0: 29 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 53 51  )../*.** When SQ
7fb0: 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20 69 73  LITE_OMIT_WSD is
7fc0: 20 64 65 66 69 6e 65 64 2c 20 69 74 20 6d 65 61   defined, it mea
7fd0: 6e 73 20 74 68 61 74 20 74 68 65 20 74 61 72 67  ns that the targ
7fe0: 65 74 20 70 6c 61 74 66 6f 72 6d 20 64 6f 65 73  et platform does
7ff0: 0a 2a 2a 20 6e 6f 74 20 73 75 70 70 6f 72 74 20  .** not support 
8000: 57 72 69 74 61 62 6c 65 20 53 74 61 74 69 63 20  Writable Static 
8010: 44 61 74 61 20 28 57 53 44 29 20 73 75 63 68 20  Data (WSD) such 
8020: 61 73 20 67 6c 6f 62 61 6c 20 61 6e 64 20 73 74  as global and st
8030: 61 74 69 63 20 76 61 72 69 61 62 6c 65 73 2e 0a  atic variables..
8040: 2a 2a 20 41 6c 6c 20 76 61 72 69 61 62 6c 65 73  ** All variables
8050: 20 6d 75 73 74 20 65 69 74 68 65 72 20 62 65 20   must either be 
8060: 6f 6e 20 74 68 65 20 73 74 61 63 6b 20 6f 72 20  on the stack or 
8070: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
8080: 63 61 74 65 64 20 66 72 6f 6d 0a 2a 2a 20 74 68  cated from.** th
8090: 65 20 68 65 61 70 2e 20 20 57 68 65 6e 20 57 53  e heap.  When WS
80a0: 44 20 69 73 20 75 6e 73 75 70 70 6f 72 74 65 64  D is unsupported
80b0: 2c 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 64  , the variable d
80c0: 65 63 6c 61 72 61 74 69 6f 6e 73 20 73 63 61 74  eclarations scat
80d0: 74 65 72 65 64 0a 2a 2a 20 74 68 72 6f 75 67 68  tered.** through
80e0: 6f 75 74 20 74 68 65 20 53 51 4c 69 74 65 20 63  out the SQLite c
80f0: 6f 64 65 20 6d 75 73 74 20 62 65 63 6f 6d 65 20  ode must become 
8100: 63 6f 6e 73 74 61 6e 74 73 20 69 6e 73 74 65 61  constants instea
8110: 64 2e 20 20 54 68 65 20 53 51 4c 49 54 45 5f 57  d.  The SQLITE_W
8120: 53 44 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75  SD.** macro is u
8130: 73 65 64 20 66 6f 72 20 74 68 69 73 20 70 75 72  sed for this pur
8140: 70 6f 73 65 2e 20 20 41 6e 64 20 69 6e 73 74 65  pose.  And inste
8150: 61 64 20 6f 66 20 72 65 66 65 72 65 6e 63 69 6e  ad of referencin
8160: 67 20 74 68 65 20 76 61 72 69 61 62 6c 65 0a 2a  g the variable.*
8170: 2a 20 64 69 72 65 63 74 6c 79 2c 20 77 65 20 75  * directly, we u
8180: 73 65 20 69 74 73 20 63 6f 6e 73 74 61 6e 74 20  se its constant 
8190: 61 73 20 61 20 6b 65 79 20 74 6f 20 6c 6f 6f 6b  as a key to look
81a0: 75 70 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20  up the run-time 
81b0: 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 62 75 66  allocated.** buf
81c0: 66 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20 72  fer that holds r
81d0: 65 61 6c 20 76 61 72 69 61 62 6c 65 2e 20 20 54  eal variable.  T
81e0: 68 65 20 63 6f 6e 73 74 61 6e 74 20 69 73 20 61  he constant is a
81f0: 6c 73 6f 20 74 68 65 20 69 6e 69 74 69 61 6c 69  lso the initiali
8200: 7a 65 72 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72  zer.** for the r
8210: 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65  un-time allocate
8220: 64 20 62 75 66 66 65 72 2e 0a 2a 2a 0a 2a 2a 20  d buffer..**.** 
8230: 49 6e 20 74 68 65 20 75 73 75 61 6c 20 63 61 73  In the usual cas
8240: 65 20 77 68 65 72 65 20 57 53 44 20 69 73 20 73  e where WSD is s
8250: 75 70 70 6f 72 74 65 64 2c 20 74 68 65 20 53 51  upported, the SQ
8260: 4c 49 54 45 5f 57 53 44 20 61 6e 64 20 47 4c 4f  LITE_WSD and GLO
8270: 42 41 4c 0a 2a 2a 20 6d 61 63 72 6f 73 20 62 65  BAL.** macros be
8280: 63 6f 6d 65 20 6e 6f 2d 6f 70 73 20 61 6e 64 20  come no-ops and 
8290: 68 61 76 65 20 7a 65 72 6f 20 70 65 72 66 6f 72  have zero perfor
82a0: 6d 61 6e 63 65 20 69 6d 70 61 63 74 2e 0a 2a 2f  mance impact..*/
82b0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
82c0: 4d 49 54 5f 57 53 44 0a 20 20 23 64 65 66 69 6e  MIT_WSD.  #defin
82d0: 65 20 53 51 4c 49 54 45 5f 57 53 44 20 63 6f 6e  e SQLITE_WSD con
82e0: 73 74 0a 20 20 23 64 65 66 69 6e 65 20 47 4c 4f  st.  #define GLO
82f0: 42 41 4c 28 74 2c 76 29 20 28 2a 28 74 2a 29 73  BAL(t,v) (*(t*)s
8300: 71 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64 28  qlite3_wsd_find(
8310: 28 76 6f 69 64 2a 29 26 28 76 29 2c 20 73 69 7a  (void*)&(v), siz
8320: 65 6f 66 28 76 29 29 29 0a 20 20 23 64 65 66 69  eof(v))).  #defi
8330: 6e 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c  ne sqlite3Global
8340: 43 6f 6e 66 69 67 20 47 4c 4f 42 41 4c 28 73 74  Config GLOBAL(st
8350: 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66  ruct Sqlite3Conf
8360: 69 67 2c 20 73 71 6c 69 74 65 33 43 6f 6e 66 69  ig, sqlite3Confi
8370: 67 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  g).  int sqlite3
8380: 5f 77 73 64 5f 69 6e 69 74 28 69 6e 74 20 4e 2c  _wsd_init(int N,
8390: 20 69 6e 74 20 4a 29 3b 0a 20 20 76 6f 69 64 20   int J);.  void 
83a0: 2a 73 71 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e  *sqlite3_wsd_fin
83b0: 64 28 76 6f 69 64 20 2a 4b 2c 20 69 6e 74 20 4c  d(void *K, int L
83c0: 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
83d0: 6e 65 20 53 51 4c 49 54 45 5f 57 53 44 0a 20 20  ne SQLITE_WSD.  
83e0: 23 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74  #define GLOBAL(t
83f0: 2c 76 29 20 76 0a 20 20 23 64 65 66 69 6e 65 20  ,v) v.  #define 
8400: 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e  sqlite3GlobalCon
8410: 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69  fig sqlite3Confi
8420: 67 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  g.#endif../*.** 
8430: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
8440: 63 72 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f  cros are used to
8450: 20 73 75 70 70 72 65 73 73 20 63 6f 6d 70 69 6c   suppress compil
8460: 65 72 20 77 61 72 6e 69 6e 67 73 20 61 6e 64 20  er warnings and 
8470: 74 6f 0a 2a 2a 20 6d 61 6b 65 20 69 74 20 63 6c  to.** make it cl
8480: 65 61 72 20 74 6f 20 68 75 6d 61 6e 20 72 65 61  ear to human rea
8490: 64 65 72 73 20 77 68 65 6e 20 61 20 66 75 6e 63  ders when a func
84a0: 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69  tion parameter i
84b0: 73 20 64 65 6c 69 62 65 72 61 74 65 6c 79 0a 2a  s deliberately.*
84c0: 2a 20 6c 65 66 74 20 75 6e 75 73 65 64 20 77 69  * left unused wi
84d0: 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f 66  thin the body of
84e0: 20 61 20 66 75 6e 63 74 69 6f 6e 2e 20 54 68 69   a function. Thi
84f0: 73 20 75 73 75 61 6c 6c 79 20 68 61 70 70 65 6e  s usually happen
8500: 73 20 77 68 65 6e 0a 2a 2a 20 61 20 66 75 6e 63  s when.** a func
8510: 74 69 6f 6e 20 69 73 20 63 61 6c 6c 65 64 20 76  tion is called v
8520: 69 61 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 6f  ia a function po
8530: 69 6e 74 65 72 2e 20 46 6f 72 20 65 78 61 6d 70  inter. For examp
8540: 6c 65 20 74 68 65 0a 2a 2a 20 69 6d 70 6c 65 6d  le the.** implem
8550: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61 6e 20 53  entation of an S
8560: 51 4c 20 61 67 67 72 65 67 61 74 65 20 73 74 65  QL aggregate ste
8570: 70 20 63 61 6c 6c 62 61 63 6b 20 6d 61 79 20 6e  p callback may n
8580: 6f 74 20 75 73 65 20 74 68 65 0a 2a 2a 20 70 61  ot use the.** pa
8590: 72 61 6d 65 74 65 72 20 69 6e 64 69 63 61 74 69  rameter indicati
85a0: 6e 67 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ng the number of
85b0: 20 61 72 67 75 6d 65 6e 74 73 20 70 61 73 73 65   arguments passe
85c0: 64 20 74 6f 20 74 68 65 20 61 67 67 72 65 67 61  d to the aggrega
85d0: 74 65 2c 0a 2a 2a 20 69 66 20 69 74 20 6b 6e 6f  te,.** if it kno
85e0: 77 73 20 74 68 61 74 20 74 68 69 73 20 69 73 20  ws that this is 
85f0: 65 6e 66 6f 72 63 65 64 20 65 6c 73 65 77 68 65  enforced elsewhe
8600: 72 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61  re..**.** When a
8610: 20 66 75 6e 63 74 69 6f 6e 20 70 61 72 61 6d 65   function parame
8620: 74 65 72 20 69 73 20 6e 6f 74 20 75 73 65 64 20  ter is not used 
8630: 61 74 20 61 6c 6c 20 77 69 74 68 69 6e 20 74 68  at all within th
8640: 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63  e body of a func
8650: 74 69 6f 6e 2c 0a 2a 2a 20 69 74 20 69 73 20 67  tion,.** it is g
8660: 65 6e 65 72 61 6c 6c 79 20 6e 61 6d 65 64 20 22  enerally named "
8670: 4e 6f 74 55 73 65 64 22 20 6f 72 20 22 4e 6f 74  NotUsed" or "Not
8680: 55 73 65 64 32 22 20 74 6f 20 6d 61 6b 65 20 74  Used2" to make t
8690: 68 69 6e 67 73 20 65 76 65 6e 20 63 6c 65 61 72  hings even clear
86a0: 65 72 2e 0a 2a 2a 20 48 6f 77 65 76 65 72 2c 20  er..** However, 
86b0: 74 68 65 73 65 20 6d 61 63 72 6f 73 20 6d 61 79  these macros may
86c0: 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f   also be used to
86d0: 20 73 75 70 70 72 65 73 73 20 77 61 72 6e 69 6e   suppress warnin
86e0: 67 73 20 72 65 6c 61 74 65 64 20 74 6f 0a 2a 2a  gs related to.**
86f0: 20 70 61 72 61 6d 65 74 65 72 73 20 74 68 61 74   parameters that
8700: 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20   may or may not 
8710: 62 65 20 75 73 65 64 20 64 65 70 65 6e 64 69 6e  be used dependin
8720: 67 20 6f 6e 20 63 6f 6d 70 69 6c 61 74 69 6f 6e  g on compilation
8730: 20 6f 70 74 69 6f 6e 73 2e 0a 2a 2a 20 46 6f 72   options..** For
8740: 20 65 78 61 6d 70 6c 65 20 74 68 6f 73 65 20 70   example those p
8750: 61 72 61 6d 65 74 65 72 73 20 6f 6e 6c 79 20 75  arameters only u
8760: 73 65 64 20 69 6e 20 61 73 73 65 72 74 28 29 20  sed in assert() 
8770: 73 74 61 74 65 6d 65 6e 74 73 2e 20 49 6e 20 74  statements. In t
8780: 68 65 73 65 0a 2a 2a 20 63 61 73 65 73 20 74 68  hese.** cases th
8790: 65 20 70 61 72 61 6d 65 74 65 72 73 20 61 72 65  e parameters are
87a0: 20 6e 61 6d 65 64 20 61 73 20 70 65 72 20 74 68   named as per th
87b0: 65 20 75 73 75 61 6c 20 63 6f 6e 76 65 6e 74 69  e usual conventi
87c0: 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ons..*/.#define 
87d0: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
87e0: 28 78 29 20 28 76 6f 69 64 29 28 78 29 0a 23 64  (x) (void)(x).#d
87f0: 65 66 69 6e 65 20 55 4e 55 53 45 44 5f 50 41 52  efine UNUSED_PAR
8800: 41 4d 45 54 45 52 32 28 78 2c 79 29 20 55 4e 55  AMETER2(x,y) UNU
8810: 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29  SED_PARAMETER(x)
8820: 2c 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45  ,UNUSED_PARAMETE
8830: 52 28 79 29 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 77  R(y)../*.** Forw
8840: 61 72 64 20 72 65 66 65 72 65 6e 63 65 73 20 74  ard references t
8850: 6f 20 73 74 72 75 63 74 75 72 65 73 0a 2a 2f 0a  o structures.*/.
8860: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 41  typedef struct A
8870: 67 67 49 6e 66 6f 20 41 67 67 49 6e 66 6f 3b 0a  ggInfo AggInfo;.
8880: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 41  typedef struct A
8890: 75 74 68 43 6f 6e 74 65 78 74 20 41 75 74 68 43  uthContext AuthC
88a0: 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64 65 66 20  ontext;.typedef 
88b0: 73 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e  struct AutoincIn
88c0: 66 6f 20 41 75 74 6f 69 6e 63 49 6e 66 6f 3b 0a  fo AutoincInfo;.
88d0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 42  typedef struct B
88e0: 69 74 76 65 63 20 42 69 74 76 65 63 3b 0a 74 79  itvec Bitvec;.ty
88f0: 70 65 64 65 66 20 73 74 72 75 63 74 20 43 6f 6c  pedef struct Col
8900: 6c 53 65 71 20 43 6f 6c 6c 53 65 71 3b 0a 74 79  lSeq CollSeq;.ty
8910: 70 65 64 65 66 20 73 74 72 75 63 74 20 43 6f 6c  pedef struct Col
8920: 75 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a 74 79 70 65  umn Column;.type
8930: 64 65 66 20 73 74 72 75 63 74 20 44 62 20 44 62  def struct Db Db
8940: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8950: 20 53 63 68 65 6d 61 20 53 63 68 65 6d 61 3b 0a   Schema Schema;.
8960: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 45  typedef struct E
8970: 78 70 72 20 45 78 70 72 3b 0a 74 79 70 65 64 65  xpr Expr;.typede
8980: 66 20 73 74 72 75 63 74 20 45 78 70 72 4c 69 73  f struct ExprLis
8990: 74 20 45 78 70 72 4c 69 73 74 3b 0a 74 79 70 65  t ExprList;.type
89a0: 64 65 66 20 73 74 72 75 63 74 20 45 78 70 72 53  def struct ExprS
89b0: 70 61 6e 20 45 78 70 72 53 70 61 6e 3b 0a 74 79  pan ExprSpan;.ty
89c0: 70 65 64 65 66 20 73 74 72 75 63 74 20 46 4b 65  pedef struct FKe
89d0: 79 20 46 4b 65 79 3b 0a 74 79 70 65 64 65 66 20  y FKey;.typedef 
89e0: 73 74 72 75 63 74 20 46 75 6e 63 44 65 73 74 72  struct FuncDestr
89f0: 75 63 74 6f 72 20 46 75 6e 63 44 65 73 74 72 75  uctor FuncDestru
8a00: 63 74 6f 72 3b 0a 74 79 70 65 64 65 66 20 73 74  ctor;.typedef st
8a10: 72 75 63 74 20 46 75 6e 63 44 65 66 20 46 75 6e  ruct FuncDef Fun
8a20: 63 44 65 66 3b 0a 74 79 70 65 64 65 66 20 73 74  cDef;.typedef st
8a30: 72 75 63 74 20 46 75 6e 63 44 65 66 48 61 73 68  ruct FuncDefHash
8a40: 20 46 75 6e 63 44 65 66 48 61 73 68 3b 0a 74 79   FuncDefHash;.ty
8a50: 70 65 64 65 66 20 73 74 72 75 63 74 20 49 64 4c  pedef struct IdL
8a60: 69 73 74 20 49 64 4c 69 73 74 3b 0a 74 79 70 65  ist IdList;.type
8a70: 64 65 66 20 73 74 72 75 63 74 20 49 6e 64 65 78  def struct Index
8a80: 20 49 6e 64 65 78 3b 0a 74 79 70 65 64 65 66 20   Index;.typedef 
8a90: 73 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70  struct IndexSamp
8aa0: 6c 65 20 49 6e 64 65 78 53 61 6d 70 6c 65 3b 0a  le IndexSample;.
8ab0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4b  typedef struct K
8ac0: 65 79 43 6c 61 73 73 20 4b 65 79 43 6c 61 73 73  eyClass KeyClass
8ad0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8ae0: 20 4b 65 79 49 6e 66 6f 20 4b 65 79 49 6e 66 6f   KeyInfo KeyInfo
8af0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8b00: 20 4c 6f 6f 6b 61 73 69 64 65 20 4c 6f 6f 6b 61   Lookaside Looka
8b10: 73 69 64 65 3b 0a 74 79 70 65 64 65 66 20 73 74  side;.typedef st
8b20: 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c  ruct LookasideSl
8b30: 6f 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  ot LookasideSlot
8b40: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8b50: 20 4d 6f 64 75 6c 65 20 4d 6f 64 75 6c 65 3b 0a   Module Module;.
8b60: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4e  typedef struct N
8b70: 61 6d 65 43 6f 6e 74 65 78 74 20 4e 61 6d 65 43  ameContext NameC
8b80: 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64 65 66 20  ontext;.typedef 
8b90: 73 74 72 75 63 74 20 50 61 72 73 65 20 50 61 72  struct Parse Par
8ba0: 73 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  se;.typedef stru
8bb0: 63 74 20 50 72 65 55 70 64 61 74 65 20 50 72 65  ct PreUpdate Pre
8bc0: 55 70 64 61 74 65 3b 0a 74 79 70 65 64 65 66 20  Update;.typedef 
8bd0: 73 74 72 75 63 74 20 50 72 69 6e 74 66 41 72 67  struct PrintfArg
8be0: 75 6d 65 6e 74 73 20 50 72 69 6e 74 66 41 72 67  uments PrintfArg
8bf0: 75 6d 65 6e 74 73 3b 0a 74 79 70 65 64 65 66 20  uments;.typedef 
8c00: 73 74 72 75 63 74 20 52 6f 77 53 65 74 20 52 6f  struct RowSet Ro
8c10: 77 53 65 74 3b 0a 74 79 70 65 64 65 66 20 73 74  wSet;.typedef st
8c20: 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20 53  ruct Savepoint S
8c30: 61 76 65 70 6f 69 6e 74 3b 0a 74 79 70 65 64 65  avepoint;.typede
8c40: 66 20 73 74 72 75 63 74 20 53 65 6c 65 63 74 20  f struct Select 
8c50: 53 65 6c 65 63 74 3b 0a 74 79 70 65 64 65 66 20  Select;.typedef 
8c60: 73 74 72 75 63 74 20 53 51 4c 69 74 65 54 68 72  struct SQLiteThr
8c70: 65 61 64 20 53 51 4c 69 74 65 54 68 72 65 61 64  ead SQLiteThread
8c80: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8c90: 20 53 65 6c 65 63 74 44 65 73 74 20 53 65 6c 65   SelectDest Sele
8ca0: 63 74 44 65 73 74 3b 0a 74 79 70 65 64 65 66 20  ctDest;.typedef 
8cb0: 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 53  struct SrcList S
8cc0: 72 63 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20  rcList;.typedef 
8cd0: 73 74 72 75 63 74 20 53 74 72 41 63 63 75 6d 20  struct StrAccum 
8ce0: 53 74 72 41 63 63 75 6d 3b 0a 74 79 70 65 64 65  StrAccum;.typede
8cf0: 66 20 73 74 72 75 63 74 20 54 61 62 6c 65 20 54  f struct Table T
8d00: 61 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74  able;.typedef st
8d10: 72 75 63 74 20 54 61 62 6c 65 4c 6f 63 6b 20 54  ruct TableLock T
8d20: 61 62 6c 65 4c 6f 63 6b 3b 0a 74 79 70 65 64 65  ableLock;.typede
8d30: 66 20 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 54  f struct Token T
8d40: 6f 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20 73 74  oken;.typedef st
8d50: 72 75 63 74 20 54 72 65 65 56 69 65 77 20 54 72  ruct TreeView Tr
8d60: 65 65 56 69 65 77 3b 0a 74 79 70 65 64 65 66 20  eeView;.typedef 
8d70: 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20 54  struct Trigger T
8d80: 72 69 67 67 65 72 3b 0a 74 79 70 65 64 65 66 20  rigger;.typedef 
8d90: 73 74 72 75 63 74 20 54 72 69 67 67 65 72 50 72  struct TriggerPr
8da0: 67 20 54 72 69 67 67 65 72 50 72 67 3b 0a 74 79  g TriggerPrg;.ty
8db0: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69  pedef struct Tri
8dc0: 67 67 65 72 53 74 65 70 20 54 72 69 67 67 65 72  ggerStep Trigger
8dd0: 53 74 65 70 3b 0a 74 79 70 65 64 65 66 20 73 74  Step;.typedef st
8de0: 72 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63  ruct UnpackedRec
8df0: 6f 72 64 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ord UnpackedReco
8e00: 72 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  rd;.typedef stru
8e10: 63 74 20 56 54 61 62 6c 65 20 56 54 61 62 6c 65  ct VTable VTable
8e20: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8e30: 20 56 74 61 62 43 74 78 20 56 74 61 62 43 74 78   VtabCtx VtabCtx
8e40: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8e50: 20 57 61 6c 6b 65 72 20 57 61 6c 6b 65 72 3b 0a   Walker Walker;.
8e60: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57  typedef struct W
8e70: 68 65 72 65 49 6e 66 6f 20 57 68 65 72 65 49 6e  hereInfo WhereIn
8e80: 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  fo;.typedef stru
8e90: 63 74 20 57 69 74 68 20 57 69 74 68 3b 0a 0a 2f  ct With With;../
8ea0: 2a 20 41 20 56 4c 69 73 74 20 6f 62 6a 65 63 74  * A VList object
8eb0: 20 72 65 63 6f 72 64 73 20 61 20 6d 61 70 70 69   records a mappi
8ec0: 6e 67 20 62 65 74 77 65 65 6e 20 70 61 72 61 6d  ng between param
8ed0: 65 74 65 72 73 2f 76 61 72 69 61 62 6c 65 73 2f  eters/variables/
8ee0: 77 69 6c 64 63 61 72 64 73 0a 2a 2a 20 69 6e 20  wildcards.** in 
8ef0: 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  the SQL statemen
8f00: 74 20 28 73 75 63 68 20 61 73 20 24 61 62 63 2c  t (such as $abc,
8f10: 20 40 70 71 72 2c 20 6f 72 20 3a 78 79 7a 29 20   @pqr, or :xyz) 
8f20: 61 6e 64 20 74 68 65 20 69 6e 74 65 67 65 72 0a  and the integer.
8f30: 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 75 6d 62  ** variable numb
8f40: 65 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  er associated wi
8f50: 74 68 20 74 68 61 74 20 70 61 72 61 6d 65 74 65  th that paramete
8f60: 72 2e 20 20 53 65 65 20 74 68 65 20 66 6f 72 6d  r.  See the form
8f70: 61 74 20 64 65 73 63 72 69 70 74 69 6f 6e 0a 2a  at description.*
8f80: 2a 20 6f 6e 20 74 68 65 20 73 71 6c 69 74 65 33  * on the sqlite3
8f90: 56 4c 69 73 74 41 64 64 28 29 20 72 6f 75 74 69  VListAdd() routi
8fa0: 6e 65 20 66 6f 72 20 6d 6f 72 65 20 69 6e 66 6f  ne for more info
8fb0: 72 6d 61 74 69 6f 6e 2e 20 20 41 20 56 4c 69 73  rmation.  A VLis
8fc0: 74 20 69 73 20 72 65 61 6c 6c 79 0a 2a 2a 20 6a  t is really.** j
8fd0: 75 73 74 20 61 6e 20 61 72 72 61 79 20 6f 66 20  ust an array of 
8fe0: 69 6e 74 65 67 65 72 73 2e 0a 2a 2f 0a 74 79 70  integers..*/.typ
8ff0: 65 64 65 66 20 69 6e 74 20 56 4c 69 73 74 3b 0a  edef int VList;.
9000: 0a 2f 2a 0a 2a 2a 20 44 65 66 65 72 20 73 6f 75  ./*.** Defer sou
9010: 72 63 69 6e 67 20 76 64 62 65 2e 68 20 61 6e 64  rcing vdbe.h and
9020: 20 62 74 72 65 65 2e 68 20 75 6e 74 69 6c 20 61   btree.h until a
9030: 66 74 65 72 20 74 68 65 20 22 75 38 22 20 61 6e  fter the "u8" an
9040: 64 0a 2a 2a 20 22 42 75 73 79 48 61 6e 64 6c 65  d.** "BusyHandle
9050: 72 22 20 74 79 70 65 64 65 66 73 2e 20 76 64 62  r" typedefs. vdb
9060: 65 2e 68 20 61 6c 73 6f 20 72 65 71 75 69 72 65  e.h also require
9070: 73 20 61 20 66 65 77 20 6f 66 20 74 68 65 20 6f  s a few of the o
9080: 70 61 71 75 65 0a 2a 2a 20 70 6f 69 6e 74 65 72  paque.** pointer
9090: 20 74 79 70 65 73 20 28 69 2e 65 2e 20 46 75 6e   types (i.e. Fun
90a0: 63 44 65 66 29 20 64 65 66 69 6e 65 64 20 61 62  cDef) defined ab
90b0: 6f 76 65 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65  ove..*/.#include
90c0: 20 22 62 74 72 65 65 2e 68 22 0a 23 69 6e 63 6c   "btree.h".#incl
90d0: 75 64 65 20 22 76 64 62 65 2e 68 22 0a 23 69 6e  ude "vdbe.h".#in
90e0: 63 6c 75 64 65 20 22 70 61 67 65 72 2e 68 22 0a  clude "pager.h".
90f0: 23 69 6e 63 6c 75 64 65 20 22 70 63 61 63 68 65  #include "pcache
9100: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 6f 73  .h".#include "os
9110: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 6d 75  .h".#include "mu
9120: 74 65 78 2e 68 22 0a 0a 2f 2a 20 54 68 65 20 53  tex.h"../* The S
9130: 51 4c 49 54 45 5f 45 58 54 52 41 5f 44 55 52 41  QLITE_EXTRA_DURA
9140: 42 4c 45 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  BLE compile-time
9150: 20 6f 70 74 69 6f 6e 20 75 73 65 64 20 74 6f 20   option used to 
9160: 73 65 74 20 74 68 65 20 64 65 66 61 75 6c 74 0a  set the default.
9170: 2a 2a 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 73  ** synchronous s
9180: 65 74 74 69 6e 67 20 74 6f 20 45 58 54 52 41 2e  etting to EXTRA.
9190: 20 20 49 74 20 69 73 20 6e 6f 20 6c 6f 6e 67 65    It is no longe
91a0: 72 20 73 75 70 70 6f 72 74 65 64 2e 0a 2a 2f 0a  r supported..*/.
91b0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 58  #ifdef SQLITE_EX
91c0: 54 52 41 5f 44 55 52 41 42 4c 45 0a 23 20 77 61  TRA_DURABLE.# wa
91d0: 72 6e 69 6e 67 20 55 73 65 20 53 51 4c 49 54 45  rning Use SQLITE
91e0: 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f  _DEFAULT_SYNCHRO
91f0: 4e 4f 55 53 3d 33 20 69 6e 73 74 65 61 64 20 6f  NOUS=3 instead o
9200: 66 20 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44  f SQLITE_EXTRA_D
9210: 55 52 41 42 4c 45 0a 23 20 64 65 66 69 6e 65 20  URABLE.# define 
9220: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53  SQLITE_DEFAULT_S
9230: 59 4e 43 48 52 4f 4e 4f 55 53 20 33 0a 23 65 6e  YNCHRONOUS 3.#en
9240: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 61 75  dif../*.** Defau
9250: 6c 74 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 6c  lt synchronous l
9260: 65 76 65 6c 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74  evels..**.** Not
9270: 65 20 74 68 61 74 20 28 66 6f 72 20 68 69 73 74  e that (for hist
9280: 6f 72 63 61 6c 20 72 65 61 73 6f 6e 73 29 20 74  orcal reasons) t
9290: 68 65 20 50 41 47 45 52 5f 53 59 4e 43 48 52 4f  he PAGER_SYNCHRO
92a0: 4e 4f 55 53 5f 2a 20 6d 61 63 72 6f 73 20 64 69  NOUS_* macros di
92b0: 66 66 65 72 0a 2a 2a 20 66 72 6f 6d 20 74 68 65  ffer.** from the
92c0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
92d0: 53 59 4e 43 48 52 4f 4e 4f 55 53 20 76 61 6c 75  SYNCHRONOUS valu
92e0: 65 20 62 79 20 31 2e 0a 2a 2a 0a 2a 2a 20 20 20  e by 1..**.**   
92f0: 20 20 20 20 20 20 20 20 50 41 47 45 52 5f 53 59          PAGER_SY
9300: 4e 43 48 52 4f 4e 4f 55 53 20 20 20 20 20 20 20  NCHRONOUS       
9310: 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e  DEFAULT_SYNCHRON
9320: 4f 55 53 0a 2a 2a 20 20 20 4f 46 46 20 20 20 20  OUS.**   OFF    
9330: 20 20 20 20 20 20 20 31 20 20 20 20 20 20 20 20         1        
9340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9350: 20 30 0a 2a 2a 20 20 20 4e 4f 52 4d 41 4c 20 20   0.**   NORMAL  
9360: 20 20 20 20 20 20 32 20 20 20 20 20 20 20 20 20        2         
9370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9380: 31 0a 2a 2a 20 20 20 46 55 4c 4c 20 20 20 20 20  1.**   FULL     
9390: 20 20 20 20 20 33 20 20 20 20 20 20 20 20 20 20       3          
93a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 32                 2
93b0: 0a 2a 2a 20 20 20 45 58 54 52 41 20 20 20 20 20  .**   EXTRA     
93c0: 20 20 20 20 34 20 20 20 20 20 20 20 20 20 20 20      4           
93d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 33 0a                3.
93e0: 2a 2a 0a 2a 2a 20 54 68 65 20 22 50 52 41 47 4d  **.** The "PRAGM
93f0: 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 22 20 73  A synchronous" s
9400: 74 61 74 65 6d 65 6e 74 20 61 6c 73 6f 20 75 73  tatement also us
9410: 65 73 20 74 68 65 20 7a 65 72 6f 2d 62 61 73 65  es the zero-base
9420: 64 20 6e 75 6d 62 65 72 73 2e 0a 2a 2a 20 49 6e  d numbers..** In
9430: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
9440: 65 20 7a 65 72 6f 2d 62 61 73 65 64 20 6e 75 6d  e zero-based num
9450: 62 65 72 73 20 61 72 65 20 75 73 65 64 20 66 6f  bers are used fo
9460: 72 20 61 6c 6c 20 65 78 74 65 72 6e 61 6c 20 69  r all external i
9470: 6e 74 65 72 66 61 63 65 73 0a 2a 2a 20 61 6e 64  nterfaces.** and
9480: 20 74 68 65 20 6f 6e 65 2d 62 61 73 65 64 20 76   the one-based v
9490: 61 6c 75 65 73 20 61 72 65 20 75 73 65 64 20 69  alues are used i
94a0: 6e 74 65 72 6e 61 6c 6c 79 2e 0a 2a 2f 0a 23 69  nternally..*/.#i
94b0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
94c0: 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53  AULT_SYNCHRONOUS
94d0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
94e0: 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f  _DEFAULT_SYNCHRO
94f0: 4e 4f 55 53 20 32 0a 23 65 6e 64 69 66 0a 23 69  NOUS 2.#endif.#i
9500: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
9510: 41 55 4c 54 5f 57 41 4c 5f 53 59 4e 43 48 52 4f  AULT_WAL_SYNCHRO
9520: 4e 4f 55 53 0a 23 20 64 65 66 69 6e 65 20 53 51  NOUS.# define SQ
9530: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 41 4c  LITE_DEFAULT_WAL
9540: 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 53 51 4c  _SYNCHRONOUS SQL
9550: 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43  ITE_DEFAULT_SYNC
9560: 48 52 4f 4e 4f 55 53 0a 23 65 6e 64 69 66 0a 0a  HRONOUS.#endif..
9570: 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62  /*.** Each datab
9580: 61 73 65 20 66 69 6c 65 20 74 6f 20 62 65 20 61  ase file to be a
9590: 63 63 65 73 73 65 64 20 62 79 20 74 68 65 20 73  ccessed by the s
95a0: 79 73 74 65 6d 20 69 73 20 61 6e 20 69 6e 73 74  ystem is an inst
95b0: 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65 20 66  ance.** of the f
95c0: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
95d0: 72 65 2e 20 20 54 68 65 72 65 20 61 72 65 20 6e  re.  There are n
95e0: 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66 20 74  ormally two of t
95f0: 68 65 73 65 20 73 74 72 75 63 74 75 72 65 73 0a  hese structures.
9600: 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  ** in the sqlite
9610: 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e 20 20 61  .aDb[] array.  a
9620: 44 62 5b 30 5d 20 69 73 20 74 68 65 20 6d 61 69  Db[0] is the mai
9630: 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
9640: 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20 69 73  and.** aDb[1] is
9650: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
9660: 6c 65 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20  le used to hold 
9670: 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
9680: 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a  .  Additional.**
9690: 20 64 61 74 61 62 61 73 65 73 20 6d 61 79 20 62   databases may b
96a0: 65 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f 0a 73  e attached..*/.s
96b0: 74 72 75 63 74 20 44 62 20 7b 0a 20 20 63 68 61  truct Db {.  cha
96c0: 72 20 2a 7a 44 62 53 4e 61 6d 65 3b 20 20 20 20  r *zDbSName;    
96d0: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69    /* Name of thi
96e0: 73 20 64 61 74 61 62 61 73 65 2e 20 28 73 63 68  s database. (sch
96f0: 65 6d 61 20 6e 61 6d 65 2c 20 6e 6f 74 20 66 69  ema name, not fi
9700: 6c 65 6e 61 6d 65 29 20 2a 2f 0a 20 20 42 74 72  lename) */.  Btr
9710: 65 65 20 2a 70 42 74 3b 20 20 20 20 20 20 20 20  ee *pBt;        
9720: 20 20 2f 2a 20 54 68 65 20 42 2a 54 72 65 65 20    /* The B*Tree 
9730: 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 74 68  structure for th
9740: 69 73 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  is database file
9750: 20 2a 2f 0a 20 20 75 38 20 73 61 66 65 74 79 5f   */.  u8 safety_
9760: 6c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 48 6f  level;     /* Ho
9770: 77 20 61 67 67 72 65 73 73 69 76 65 20 61 74 20  w aggressive at 
9780: 73 79 6e 63 69 6e 67 20 64 61 74 61 20 74 6f 20  syncing data to 
9790: 64 69 73 6b 20 2a 2f 0a 20 20 75 38 20 62 53 79  disk */.  u8 bSy
97a0: 6e 63 53 65 74 3b 20 20 20 20 20 20 20 20 20 2f  ncSet;         /
97b0: 2a 20 54 72 75 65 20 69 66 20 22 50 52 41 47 4d  * True if "PRAGM
97c0: 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 4e 22  A synchronous=N"
97d0: 20 68 61 73 20 62 65 65 6e 20 72 75 6e 20 2a 2f   has been run */
97e0: 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
97f0: 6d 61 3b 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74  ma;     /* Point
9800: 65 72 20 74 6f 20 64 61 74 61 62 61 73 65 20 73  er to database s
9810: 63 68 65 6d 61 20 28 70 6f 73 73 69 62 6c 79 20  chema (possibly 
9820: 73 68 61 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f  shared) */.};../
9830: 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
9840: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
9850: 67 20 73 74 72 75 63 74 75 72 65 20 73 74 6f 72  g structure stor
9860: 65 73 20 61 20 64 61 74 61 62 61 73 65 20 73 63  es a database sc
9870: 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74  hema..**.** Most
9880: 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 20   Schema objects 
9890: 61 72 65 20 61 73 73 6f 63 69 61 74 65 64 20 77  are associated w
98a0: 69 74 68 20 61 20 42 74 72 65 65 2e 20 20 54 68  ith a Btree.  Th
98b0: 65 20 65 78 63 65 70 74 69 6f 6e 20 69 73 0a 2a  e exception is.*
98c0: 2a 20 74 68 65 20 53 63 68 65 6d 61 20 66 6f 72  * the Schema for
98d0: 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61   the TEMP databa
98e0: 65 73 20 28 73 71 6c 69 74 65 33 2e 61 44 62 5b  es (sqlite3.aDb[
98f0: 31 5d 29 20 77 68 69 63 68 20 69 73 20 66 72 65  1]) which is fre
9900: 65 2d 73 74 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49  e-standing..** I
9910: 6e 20 73 68 61 72 65 64 20 63 61 63 68 65 20 6d  n shared cache m
9920: 6f 64 65 2c 20 61 20 73 69 6e 67 6c 65 20 53 63  ode, a single Sc
9930: 68 65 6d 61 20 6f 62 6a 65 63 74 20 63 61 6e 20  hema object can 
9940: 62 65 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c  be shared by mul
9950: 74 69 70 6c 65 0a 2a 2a 20 42 74 72 65 65 73 20  tiple.** Btrees 
9960: 74 68 61 74 20 72 65 66 65 72 20 74 6f 20 74 68  that refer to th
9970: 65 20 73 61 6d 65 20 75 6e 64 65 72 6c 79 69 6e  e same underlyin
9980: 67 20 42 74 53 68 61 72 65 64 20 6f 62 6a 65 63  g BtShared objec
9990: 74 2e 0a 2a 2a 0a 2a 2a 20 53 63 68 65 6d 61 20  t..**.** Schema 
99a0: 6f 62 6a 65 63 74 73 20 61 72 65 20 61 75 74 6f  objects are auto
99b0: 6d 61 74 69 63 61 6c 6c 79 20 64 65 61 6c 6c 6f  matically deallo
99c0: 63 61 74 65 64 20 77 68 65 6e 20 74 68 65 20 6c  cated when the l
99d0: 61 73 74 20 42 74 72 65 65 20 74 68 61 74 0a 2a  ast Btree that.*
99e0: 2a 20 72 65 66 65 72 65 6e 63 65 73 20 74 68 65  * references the
99f0: 6d 20 69 73 20 64 65 73 74 72 6f 79 65 64 2e 20  m is destroyed. 
9a00: 20 20 54 68 65 20 54 45 4d 50 20 53 63 68 65 6d    The TEMP Schem
9a10: 61 20 69 73 20 6d 61 6e 75 61 6c 6c 79 20 66 72  a is manually fr
9a20: 65 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65  eed by.** sqlite
9a30: 33 5f 63 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20  3_close()..*.** 
9a40: 41 20 74 68 72 65 61 64 20 6d 75 73 74 20 62 65  A thread must be
9a50: 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78   holding a mutex
9a60: 20 6f 6e 20 74 68 65 20 63 6f 72 72 65 73 70 6f   on the correspo
9a70: 6e 64 69 6e 67 20 42 74 72 65 65 20 69 6e 20 6f  nding Btree in o
9a80: 72 64 65 72 0a 2a 2a 20 74 6f 20 61 63 63 65 73  rder.** to acces
9a90: 73 20 53 63 68 65 6d 61 20 63 6f 6e 74 65 6e 74  s Schema content
9aa0: 2e 20 20 54 68 69 73 20 69 6d 70 6c 69 65 73 20  .  This implies 
9ab0: 74 68 61 74 20 74 68 65 20 74 68 72 65 61 64 20  that the thread 
9ac0: 6d 75 73 74 20 61 6c 73 6f 20 62 65 0a 2a 2a 20  must also be.** 
9ad0: 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20  holding a mutex 
9ae0: 6f 6e 20 74 68 65 20 73 71 6c 69 74 65 33 20 63  on the sqlite3 c
9af0: 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65  onnection pointe
9b00: 72 20 74 68 61 74 20 6f 77 6e 73 20 74 68 65 20  r that owns the 
9b10: 42 74 72 65 65 2e 0a 2a 2a 20 46 6f 72 20 61 20  Btree..** For a 
9b20: 54 45 4d 50 20 53 63 68 65 6d 61 2c 20 6f 6e 6c  TEMP Schema, onl
9b30: 79 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  y the connection
9b40: 20 6d 75 74 65 78 20 69 73 20 72 65 71 75 69 72   mutex is requir
9b50: 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 63  ed..*/.struct Sc
9b60: 68 65 6d 61 20 7b 0a 20 20 69 6e 74 20 73 63 68  hema {.  int sch
9b70: 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a  ema_cookie;   /*
9b80: 20 44 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   Database schema
9b90: 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20   version number 
9ba0: 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a 2f  for this file */
9bb0: 0a 20 20 69 6e 74 20 69 47 65 6e 65 72 61 74 69  .  int iGenerati
9bc0: 6f 6e 3b 20 20 20 20 20 2f 2a 20 47 65 6e 65 72  on;     /* Gener
9bd0: 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2e 20 20  ation counter.  
9be0: 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68  Incremented with
9bf0: 20 65 61 63 68 20 63 68 61 6e 67 65 20 2a 2f 0a   each change */.
9c00: 20 20 48 61 73 68 20 74 62 6c 48 61 73 68 3b 20    Hash tblHash; 
9c10: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74 61         /* All ta
9c20: 62 6c 65 73 20 69 6e 64 65 78 65 64 20 62 79 20  bles indexed by 
9c30: 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 69  name */.  Hash i
9c40: 64 78 48 61 73 68 3b 20 20 20 20 20 20 20 20 2f  dxHash;        /
9c50: 2a 20 41 6c 6c 20 28 6e 61 6d 65 64 29 20 69 6e  * All (named) in
9c60: 64 69 63 65 73 20 69 6e 64 65 78 65 64 20 62 79  dices indexed by
9c70: 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20   name */.  Hash 
9c80: 74 72 69 67 48 61 73 68 3b 20 20 20 20 20 20 20  trigHash;       
9c90: 2f 2a 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20  /* All triggers 
9ca0: 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20  indexed by name 
9cb0: 2a 2f 0a 20 20 48 61 73 68 20 66 6b 65 79 48 61  */.  Hash fkeyHa
9cc0: 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  sh;       /* All
9cd0: 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 62 79   foreign keys by
9ce0: 20 72 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c   referenced tabl
9cf0: 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 61 62 6c  e name */.  Tabl
9d00: 65 20 2a 70 53 65 71 54 61 62 3b 20 20 20 20 20  e *pSeqTab;     
9d10: 20 2f 2a 20 54 68 65 20 73 71 6c 69 74 65 5f 73   /* The sqlite_s
9d20: 65 71 75 65 6e 63 65 20 74 61 62 6c 65 20 75 73  equence table us
9d30: 65 64 20 62 79 20 41 55 54 4f 49 4e 43 52 45 4d  ed by AUTOINCREM
9d40: 45 4e 54 20 2a 2f 0a 20 20 75 38 20 66 69 6c 65  ENT */.  u8 file
9d50: 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20 20 2f 2a  _format;      /*
9d60: 20 53 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 76   Schema format v
9d70: 65 72 73 69 6f 6e 20 66 6f 72 20 74 68 69 73 20  ersion for this 
9d80: 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63  file */.  u8 enc
9d90: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
9da0: 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  * Text encoding 
9db0: 75 73 65 64 20 62 79 20 74 68 69 73 20 64 61 74  used by this dat
9dc0: 61 62 61 73 65 20 2a 2f 0a 20 20 75 31 36 20 73  abase */.  u16 s
9dd0: 63 68 65 6d 61 46 6c 61 67 73 3b 20 20 20 20 20  chemaFlags;     
9de0: 2f 2a 20 46 6c 61 67 73 20 61 73 73 6f 63 69 61  /* Flags associa
9df0: 74 65 64 20 77 69 74 68 20 74 68 69 73 20 73 63  ted with this sc
9e00: 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 63 61  hema */.  int ca
9e10: 63 68 65 5f 73 69 7a 65 3b 20 20 20 20 20 20 2f  che_size;      /
9e20: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  * Number of page
9e30: 73 20 74 6f 20 75 73 65 20 69 6e 20 74 68 65 20  s to use in the 
9e40: 63 61 63 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  cache */.};../*.
9e50: 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20  ** These macros 
9e60: 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74  can be used to t
9e70: 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65  est, set, or cle
9e80: 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 0a 2a  ar bits in the.*
9e90: 2a 20 44 62 2e 70 53 63 68 65 6d 61 2d 3e 66 6c  * Db.pSchema->fl
9ea0: 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64  ags field..*/.#d
9eb0: 65 66 69 6e 65 20 44 62 48 61 73 50 72 6f 70 65  efine DbHasPrope
9ec0: 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28  rty(D,I,P)     (
9ed0: 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63  ((D)->aDb[I].pSc
9ee0: 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67  hema->schemaFlag
9ef0: 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65  s&(P))==(P)).#de
9f00: 66 69 6e 65 20 44 62 48 61 73 41 6e 79 50 72 6f  fine DbHasAnyPro
9f10: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 28 28  perty(D,I,P)  ((
9f20: 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68  (D)->aDb[I].pSch
9f30: 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73  ema->schemaFlags
9f40: 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e  &(P))!=0).#defin
9f50: 65 20 44 62 53 65 74 50 72 6f 70 65 72 74 79 28  e DbSetProperty(
9f60: 44 2c 49 2c 50 29 20 20 20 20 20 28 44 29 2d 3e  D,I,P)     (D)->
9f70: 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[I].pSchema->
9f80: 73 63 68 65 6d 61 46 6c 61 67 73 7c 3d 28 50 29  schemaFlags|=(P)
9f90: 0a 23 64 65 66 69 6e 65 20 44 62 43 6c 65 61 72  .#define DbClear
9fa0: 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20  Property(D,I,P) 
9fb0: 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53    (D)->aDb[I].pS
9fc0: 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61  chema->schemaFla
9fd0: 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20  gs&=~(P)../*.** 
9fe0: 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
9ff0: 6f 72 20 74 68 65 20 44 42 2e 70 53 63 68 65 6d  or the DB.pSchem
a000: 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a  a->flags field..
a010: 2a 2a 0a 2a 2a 20 54 68 65 20 44 42 5f 53 63 68  **.** The DB_Sch
a020: 65 6d 61 4c 6f 61 64 65 64 20 66 6c 61 67 20 69  emaLoaded flag i
a030: 73 20 73 65 74 20 61 66 74 65 72 20 74 68 65 20  s set after the 
a040: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
a050: 68 61 73 20 62 65 65 6e 0a 2a 2a 20 72 65 61 64  has been.** read
a060: 20 69 6e 74 6f 20 69 6e 74 65 72 6e 61 6c 20 68   into internal h
a070: 61 73 68 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a  ash tables..**.*
a080: 2a 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65 77  * DB_UnresetView
a090: 73 20 6d 65 61 6e 73 20 74 68 61 74 20 6f 6e 65  s means that one
a0a0: 20 6f 72 20 6d 6f 72 65 20 76 69 65 77 73 20 68   or more views h
a0b0: 61 76 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  ave column names
a0c0: 20 74 68 61 74 0a 2a 2a 20 68 61 76 65 20 62 65   that.** have be
a0d0: 65 6e 20 66 69 6c 6c 65 64 20 6f 75 74 2e 20 20  en filled out.  
a0e0: 49 66 20 74 68 65 20 73 63 68 65 6d 61 20 63 68  If the schema ch
a0f0: 61 6e 67 65 73 2c 20 74 68 65 73 65 20 63 6f 6c  anges, these col
a100: 75 6d 6e 20 6e 61 6d 65 73 20 6d 69 67 68 74 0a  umn names might.
a110: 2a 2a 20 63 68 61 6e 67 65 73 20 61 6e 64 20 73  ** changes and s
a120: 6f 20 74 68 65 20 76 69 65 77 20 77 69 6c 6c 20  o the view will 
a130: 6e 65 65 64 20 74 6f 20 62 65 20 72 65 73 65 74  need to be reset
a140: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f  ..*/.#define DB_
a150: 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 20 20 20  SchemaLoaded    
a160: 30 78 30 30 30 31 20 20 2f 2a 20 54 68 65 20 73  0x0001  /* The s
a170: 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e 20 6c  chema has been l
a180: 6f 61 64 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  oaded */.#define
a190: 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65 77 73   DB_UnresetViews
a1a0: 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 53      0x0002  /* S
a1b0: 6f 6d 65 20 76 69 65 77 73 20 68 61 76 65 20 64  ome views have d
a1c0: 65 66 69 6e 65 64 20 63 6f 6c 75 6d 6e 20 6e 61  efined column na
a1d0: 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44  mes */.#define D
a1e0: 42 5f 45 6d 70 74 79 20 20 20 20 20 20 20 20 20  B_Empty         
a1f0: 20 20 30 78 30 30 30 34 20 20 2f 2a 20 54 68 65    0x0004  /* The
a200: 20 66 69 6c 65 20 69 73 20 65 6d 70 74 79 20 28   file is empty (
a210: 6c 65 6e 67 74 68 20 30 20 62 79 74 65 73 29 20  length 0 bytes) 
a220: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75  */../*.** The nu
a230: 6d 62 65 72 20 6f 66 20 64 69 66 66 65 72 65 6e  mber of differen
a240: 74 20 6b 69 6e 64 73 20 6f 66 20 74 68 69 6e 67  t kinds of thing
a250: 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 6c 69  s that can be li
a260: 6d 69 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 74  mited.** using t
a270: 68 65 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74  he sqlite3_limit
a280: 28 29 20 69 6e 74 65 72 66 61 63 65 2e 0a 2a 2f  () interface..*/
a290: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
a2a0: 4e 5f 4c 49 4d 49 54 20 28 53 51 4c 49 54 45 5f  N_LIMIT (SQLITE_
a2b0: 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52  LIMIT_WORKER_THR
a2c0: 45 41 44 53 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c  EADS+1)../*.** L
a2d0: 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20  ookaside malloc 
a2e0: 69 73 20 61 20 73 65 74 20 6f 66 20 66 69 78 65  is a set of fixe
a2f0: 64 2d 73 69 7a 65 20 62 75 66 66 65 72 73 20 74  d-size buffers t
a300: 68 61 74 20 63 61 6e 20 62 65 20 75 73 65 64 0a  hat can be used.
a310: 2a 2a 20 74 6f 20 73 61 74 69 73 66 79 20 73 6d  ** to satisfy sm
a320: 61 6c 6c 20 74 72 61 6e 73 69 65 6e 74 20 6d 65  all transient me
a330: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
a340: 72 65 71 75 65 73 74 73 20 66 6f 72 20 6f 62 6a  requests for obj
a350: 65 63 74 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74  ects.** associat
a360: 65 64 20 77 69 74 68 20 61 20 70 61 72 74 69 63  ed with a partic
a370: 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 63 6f  ular database co
a380: 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 75  nnection.  The u
a390: 73 65 20 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61 73 69  se of.** lookasi
a3a0: 64 65 20 6d 61 6c 6c 6f 63 20 70 72 6f 76 69 64  de malloc provid
a3b0: 65 73 20 61 20 73 69 67 6e 69 66 69 63 61 6e 74  es a significant
a3c0: 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 65 6e 68   performance enh
a3d0: 61 6e 63 65 6d 65 6e 74 0a 2a 2a 20 28 61 70 70  ancement.** (app
a3e0: 72 6f 78 20 31 30 25 29 20 62 79 20 61 76 6f 69  rox 10%) by avoi
a3f0: 64 69 6e 67 20 6e 75 6d 65 72 6f 75 73 20 6d 61  ding numerous ma
a400: 6c 6c 6f 63 2f 66 72 65 65 20 72 65 71 75 65 73  lloc/free reques
a410: 74 73 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67  ts while parsing
a420: 0a 2a 2a 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  .** SQL statemen
a430: 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f  ts..**.** The Lo
a440: 6f 6b 61 73 69 64 65 20 73 74 72 75 63 74 75 72  okaside structur
a450: 65 20 68 6f 6c 64 73 20 63 6f 6e 66 69 67 75 72  e holds configur
a460: 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f  ation informatio
a470: 6e 20 61 62 6f 75 74 20 74 68 65 0a 2a 2a 20 6c  n about the.** l
a480: 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20  ookaside malloc 
a490: 73 75 62 73 79 73 74 65 6d 2e 20 20 45 61 63 68  subsystem.  Each
a4a0: 20 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72   available memor
a4b0: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 0a  y allocation in.
a4c0: 2a 2a 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65  ** the lookaside
a4d0: 20 73 75 62 73 79 73 74 65 6d 20 69 73 20 73 74   subsystem is st
a4e0: 6f 72 65 64 20 6f 6e 20 61 20 6c 69 6e 6b 65 64  ored on a linked
a4f0: 20 6c 69 73 74 20 6f 66 20 4c 6f 6f 6b 61 73 69   list of Lookasi
a500: 64 65 53 6c 6f 74 0a 2a 2a 20 6f 62 6a 65 63 74  deSlot.** object
a510: 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69  s..**.** Lookasi
a520: 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61  de allocations a
a530: 72 65 20 6f 6e 6c 79 20 61 6c 6c 6f 77 65 64 20  re only allowed 
a540: 66 6f 72 20 6f 62 6a 65 63 74 73 20 74 68 61 74  for objects that
a550: 20 61 72 65 20 61 73 73 6f 63 69 61 74 65 64 0a   are associated.
a560: 2a 2a 20 77 69 74 68 20 61 20 70 61 72 74 69 63  ** with a partic
a570: 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 63 6f  ular database co
a580: 6e 6e 65 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65  nnection.  Hence
a590: 2c 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61  , schema informa
a5a0: 74 69 6f 6e 20 63 61 6e 6e 6f 74 0a 2a 2a 20 62  tion cannot.** b
a5b0: 65 20 73 74 6f 72 65 64 20 69 6e 20 6c 6f 6f 6b  e stored in look
a5c0: 61 73 69 64 65 20 62 65 63 61 75 73 65 20 69 6e  aside because in
a5d0: 20 73 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f   shared cache mo
a5e0: 64 65 20 74 68 65 20 73 63 68 65 6d 61 20 69 6e  de the schema in
a5f0: 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 69 73 20  formation.** is 
a600: 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70  shared by multip
a610: 6c 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  le database conn
a620: 65 63 74 69 6f 6e 73 2e 20 20 54 68 65 72 65 66  ections.  Theref
a630: 6f 72 65 2c 20 77 68 69 6c 65 20 70 61 72 73 69  ore, while parsi
a640: 6e 67 0a 2a 2a 20 73 63 68 65 6d 61 20 69 6e 66  ng.** schema inf
a650: 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20 4c 6f  ormation, the Lo
a660: 6f 6b 61 73 69 64 65 2e 62 45 6e 61 62 6c 65 64  okaside.bEnabled
a670: 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 65 64   flag is cleared
a680: 20 73 6f 20 74 68 61 74 0a 2a 2a 20 6c 6f 6f 6b   so that.** look
a690: 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e  aside allocation
a6a0: 73 20 61 72 65 20 6e 6f 74 20 75 73 65 64 20 74  s are not used t
a6b0: 6f 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20  o construct the 
a6c0: 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 2e 0a  schema objects..
a6d0: 2a 2f 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  */.struct Lookas
a6e0: 69 64 65 20 7b 0a 20 20 75 33 32 20 62 44 69 73  ide {.  u32 bDis
a6f0: 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
a700: 2f 2a 20 4f 6e 6c 79 20 6f 70 65 72 61 74 65 20  /* Only operate 
a710: 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20 77 68  the lookaside wh
a720: 65 6e 20 7a 65 72 6f 20 2a 2f 0a 20 20 75 31 36  en zero */.  u16
a730: 20 73 7a 3b 20 20 20 20 20 20 20 20 20 20 20 20   sz;            
a740: 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
a750: 65 61 63 68 20 62 75 66 66 65 72 20 69 6e 20 62  each buffer in b
a760: 79 74 65 73 20 2a 2f 0a 20 20 75 38 20 62 4d 61  ytes */.  u8 bMa
a770: 6c 6c 6f 63 65 64 3b 20 20 20 20 20 20 20 20 20  lloced;         
a780: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70 53 74    /* True if pSt
a790: 61 72 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f  art obtained fro
a7a0: 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  m sqlite3_malloc
a7b0: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 75 74  () */.  int nOut
a7c0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
a7d0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 75 66  /* Number of buf
a7e0: 66 65 72 73 20 63 75 72 72 65 6e 74 6c 79 20 63  fers currently c
a7f0: 68 65 63 6b 65 64 20 6f 75 74 20 2a 2f 0a 20 20  hecked out */.  
a800: 69 6e 74 20 6d 78 4f 75 74 3b 20 20 20 20 20 20  int mxOut;      
a810: 20 20 20 20 20 20 20 20 2f 2a 20 48 69 67 68 77          /* Highw
a820: 61 74 65 72 20 6d 61 72 6b 20 66 6f 72 20 6e 4f  ater mark for nO
a830: 75 74 20 2a 2f 0a 20 20 69 6e 74 20 61 6e 53 74  ut */.  int anSt
a840: 61 74 5b 33 5d 3b 20 20 20 20 20 20 20 20 20 20  at[3];          
a850: 2f 2a 20 30 3a 20 68 69 74 73 2e 20 20 31 3a 20  /* 0: hits.  1: 
a860: 73 69 7a 65 20 6d 69 73 73 65 73 2e 20 20 32 3a  size misses.  2:
a870: 20 66 75 6c 6c 20 6d 69 73 73 65 73 20 2a 2f 0a   full misses */.
a880: 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20    LookasideSlot 
a890: 2a 70 46 72 65 65 3b 20 20 20 2f 2a 20 4c 69 73  *pFree;   /* Lis
a8a0: 74 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 62  t of available b
a8b0: 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64  uffers */.  void
a8c0: 20 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20 20   *pStart;       
a8d0: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74      /* First byt
a8e0: 65 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 6d  e of available m
a8f0: 65 6d 6f 72 79 20 73 70 61 63 65 20 2a 2f 0a 20  emory space */. 
a900: 20 76 6f 69 64 20 2a 70 45 6e 64 3b 20 20 20 20   void *pEnd;    
a910: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
a920: 74 20 62 79 74 65 20 70 61 73 74 20 65 6e 64 20  t byte past end 
a930: 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73 70 61  of available spa
a940: 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74 20  ce */.};.struct 
a950: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 7b 0a  LookasideSlot {.
a960: 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20    LookasideSlot 
a970: 2a 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20 4e 65  *pNext;    /* Ne
a980: 78 74 20 62 75 66 66 65 72 20 69 6e 20 74 68 65  xt buffer in the
a990: 20 6c 69 73 74 20 6f 66 20 66 72 65 65 20 62 75   list of free bu
a9a0: 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ffers */.};../*.
a9b0: 2a 2a 20 41 20 68 61 73 68 20 74 61 62 6c 65 20  ** A hash table 
a9c0: 66 6f 72 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e  for built-in fun
a9d0: 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e  ction definition
a9e0: 73 2e 20 20 28 41 70 70 6c 69 63 61 74 69 6f 6e  s.  (Application
a9f0: 2d 64 65 66 69 6e 65 64 0a 2a 2a 20 66 75 6e 63  -defined.** func
aa00: 74 69 6f 6e 73 20 75 73 65 20 61 20 72 65 67 75  tions use a regu
aa10: 6c 61 72 20 74 61 62 6c 65 20 74 61 62 6c 65 20  lar table table 
aa20: 66 72 6f 6d 20 68 61 73 68 2e 68 2e 29 0a 2a 2a  from hash.h.).**
aa30: 0a 2a 2a 20 48 61 73 68 20 65 61 63 68 20 46 75  .** Hash each Fu
aa40: 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65 20  ncDef structure 
aa50: 69 6e 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20  into one of the 
aa60: 46 75 6e 63 44 65 66 48 61 73 68 2e 61 5b 5d 20  FuncDefHash.a[] 
aa70: 73 6c 6f 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73  slots..** Collis
aa80: 69 6f 6e 73 20 61 72 65 20 6f 6e 20 74 68 65 20  ions are on the 
aa90: 46 75 6e 63 44 65 66 2e 75 2e 70 48 61 73 68 20  FuncDef.u.pHash 
aaa0: 63 68 61 69 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e  chain..*/.#defin
aab0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41  e SQLITE_FUNC_HA
aac0: 53 48 5f 53 5a 20 32 33 0a 73 74 72 75 63 74 20  SH_SZ 23.struct 
aad0: 46 75 6e 63 44 65 66 48 61 73 68 20 7b 0a 20 20  FuncDefHash {.  
aae0: 46 75 6e 63 44 65 66 20 2a 61 5b 53 51 4c 49 54  FuncDef *a[SQLIT
aaf0: 45 5f 46 55 4e 43 5f 48 41 53 48 5f 53 5a 5d 3b  E_FUNC_HASH_SZ];
ab00: 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68 20 74         /* Hash t
ab10: 61 62 6c 65 20 66 6f 72 20 66 75 6e 63 74 69 6f  able for functio
ab20: 6e 73 20 2a 2f 0a 7d 3b 0a 0a 23 69 66 64 65 66  ns */.};..#ifdef
ab30: 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54   SQLITE_USER_AUT
ab40: 48 45 4e 54 49 43 41 54 49 4f 4e 0a 2f 2a 0a 2a  HENTICATION./*.*
ab50: 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 68 65  * Information he
ab60: 6c 64 20 69 6e 20 74 68 65 20 22 73 71 6c 69 74  ld in the "sqlit
ab70: 65 33 22 20 64 61 74 61 62 61 73 65 20 63 6f 6e  e3" database con
ab80: 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 20 61  nection object a
ab90: 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 6d 61  nd used.** to ma
aba0: 6e 61 67 65 20 75 73 65 72 20 61 75 74 68 65 6e  nage user authen
abb0: 74 69 63 61 74 69 6f 6e 2e 0a 2a 2f 0a 74 79 70  tication..*/.typ
abc0: 65 64 65 66 20 73 74 72 75 63 74 20 73 71 6c 69  edef struct sqli
abd0: 74 65 33 5f 75 73 65 72 61 75 74 68 20 73 71 6c  te3_userauth sql
abe0: 69 74 65 33 5f 75 73 65 72 61 75 74 68 3b 0a 73  ite3_userauth;.s
abf0: 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f 75 73  truct sqlite3_us
ac00: 65 72 61 75 74 68 20 7b 0a 20 20 75 38 20 61 75  erauth {.  u8 au
ac10: 74 68 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20  thLevel;        
ac20: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72           /* Curr
ac30: 65 6e 74 20 61 75 74 68 65 6e 74 69 63 61 74 69  ent authenticati
ac40: 6f 6e 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e  on level */.  in
ac50: 74 20 6e 41 75 74 68 50 57 3b 20 20 20 20 20 20  t nAuthPW;      
ac60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
ac70: 69 7a 65 20 6f 66 20 74 68 65 20 7a 41 75 74 68  ize of the zAuth
ac80: 50 57 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20  PW in bytes */. 
ac90: 20 63 68 61 72 20 2a 7a 41 75 74 68 50 57 3b 20   char *zAuthPW; 
aca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
acb0: 2a 20 50 61 73 73 77 6f 72 64 20 75 73 65 64 20  * Password used 
acc0: 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65 20  to authenticate 
acd0: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75 74 68  */.  char *zAuth
ace0: 55 73 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  User;           
acf0: 20 20 20 2f 2a 20 55 73 65 72 20 6e 61 6d 65 20     /* User name 
ad00: 75 73 65 64 20 74 6f 20 61 75 74 68 65 6e 74 69  used to authenti
ad10: 63 61 74 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41  cate */.};../* A
ad20: 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
ad30: 72 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75  r sqlite3_userau
ad40: 74 68 2e 61 75 74 68 4c 65 76 65 6c 20 2a 2f 0a  th.authLevel */.
ad50: 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 55 6e  #define UAUTH_Un
ad60: 6b 6e 6f 77 6e 20 20 20 20 20 30 20 20 20 20 20  known     0     
ad70: 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 69 6f  /* Authenticatio
ad80: 6e 20 6e 6f 74 20 79 65 74 20 63 68 65 63 6b 65  n not yet checke
ad90: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55  d */.#define UAU
ada0: 54 48 5f 46 61 69 6c 20 20 20 20 20 20 20 20 31  TH_Fail        1
adb0: 20 20 20 20 20 2f 2a 20 55 73 65 72 20 61 75 74       /* User aut
adc0: 68 65 6e 74 69 63 61 74 69 6f 6e 20 66 61 69 6c  hentication fail
add0: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41  ed */.#define UA
ade0: 55 54 48 5f 55 73 65 72 20 20 20 20 20 20 20 20  UTH_User        
adf0: 32 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74  2     /* Authent
ae00: 69 63 61 74 65 64 20 61 73 20 61 20 6e 6f 72 6d  icated as a norm
ae10: 61 6c 20 75 73 65 72 20 2a 2f 0a 23 64 65 66 69  al user */.#defi
ae20: 6e 65 20 55 41 55 54 48 5f 41 64 6d 69 6e 20 20  ne UAUTH_Admin  
ae30: 20 20 20 20 20 33 20 20 20 20 20 2f 2a 20 41 75       3     /* Au
ae40: 74 68 65 6e 74 69 63 61 74 65 64 20 61 73 20 61  thenticated as a
ae50: 6e 20 61 64 6d 69 6e 69 73 74 72 61 74 6f 72 20  n administrator 
ae60: 2a 2f 0a 0a 2f 2a 20 46 75 6e 63 74 69 6f 6e 73  */../* Functions
ae70: 20 75 73 65 64 20 6f 6e 6c 79 20 62 79 20 75 73   used only by us
ae80: 65 72 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e  er authorization
ae90: 20 6c 6f 67 69 63 20 2a 2f 0a 69 6e 74 20 73 71   logic */.int sq
aea0: 6c 69 74 65 33 55 73 65 72 41 75 74 68 54 61 62  lite3UserAuthTab
aeb0: 6c 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  le(const char*);
aec0: 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 73 65 72  .int sqlite3User
aed0: 41 75 74 68 43 68 65 63 6b 4c 6f 67 69 6e 28 73  AuthCheckLogin(s
aee0: 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
aef0: 61 72 2a 2c 75 38 2a 29 3b 0a 76 6f 69 64 20 73  ar*,u8*);.void s
af00: 71 6c 69 74 65 33 55 73 65 72 41 75 74 68 49 6e  qlite3UserAuthIn
af10: 69 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  it(sqlite3*);.vo
af20: 69 64 20 73 71 6c 69 74 65 33 43 72 79 70 74 46  id sqlite3CryptF
af30: 75 6e 63 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  unc(sqlite3_cont
af40: 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
af50: 5f 76 61 6c 75 65 2a 2a 29 3b 0a 0a 23 65 6e 64  _value**);..#end
af60: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 55 53 45  if /* SQLITE_USE
af70: 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e  R_AUTHENTICATION
af80: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 74 79 70 65 64   */../*.** typed
af90: 65 66 20 66 6f 72 20 74 68 65 20 61 75 74 68 6f  ef for the autho
afa0: 72 69 7a 61 74 69 6f 6e 20 63 61 6c 6c 62 61 63  rization callbac
afb0: 6b 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 23  k function..*/.#
afc0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45  ifdef SQLITE_USE
afd0: 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e  R_AUTHENTICATION
afe0: 0a 20 20 74 79 70 65 64 65 66 20 69 6e 74 20 28  .  typedef int (
aff0: 2a 73 71 6c 69 74 65 33 5f 78 61 75 74 68 29 28  *sqlite3_xauth)(
b000: 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  void*,int,const 
b010: 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
b020: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20  *,const char*,. 
b030: 20 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 63 6f                co
b050: 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
b060: 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 20   char*);.#else. 
b070: 20 74 79 70 65 64 65 66 20 69 6e 74 20 28 2a 73   typedef int (*s
b080: 71 6c 69 74 65 33 5f 78 61 75 74 68 29 28 76 6f  qlite3_xauth)(vo
b090: 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  id*,int,const ch
b0a0: 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ar*,const char*,
b0b0: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20  const char*,.   
b0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b0d0: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73              cons
b0e0: 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66  t char*);.#endif
b0f0: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
b100: 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44  _OMIT_DEPRECATED
b110: 0a 2f 2a 20 54 68 69 73 20 69 73 20 61 6e 20 65  ./* This is an e
b120: 78 74 72 61 20 53 51 4c 49 54 45 5f 54 52 41 43  xtra SQLITE_TRAC
b130: 45 20 6d 61 63 72 6f 20 74 68 61 74 20 69 6e 64  E macro that ind
b140: 69 63 61 74 65 73 20 22 6c 65 67 61 63 79 22 20  icates "legacy" 
b150: 74 72 61 63 69 6e 67 0a 2a 2a 20 69 6e 20 74 68  tracing.** in th
b160: 65 20 73 74 79 6c 65 20 6f 66 20 73 71 6c 69 74  e style of sqlit
b170: 65 33 5f 74 72 61 63 65 28 29 0a 2a 2f 0a 23 64  e3_trace().*/.#d
b180: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 52 41  efine SQLITE_TRA
b190: 43 45 5f 4c 45 47 41 43 59 20 20 30 78 38 30 0a  CE_LEGACY  0x80.
b1a0: 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 53 51  #else.#define SQ
b1b0: 4c 49 54 45 5f 54 52 41 43 45 5f 4c 45 47 41 43  LITE_TRACE_LEGAC
b1c0: 59 20 20 30 0a 23 65 6e 64 69 66 20 2f 2a 20 53  Y  0.#endif /* S
b1d0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45  QLITE_OMIT_DEPRE
b1e0: 43 41 54 45 44 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a  CATED */.../*.**
b1f0: 20 45 61 63 68 20 64 61 74 61 62 61 73 65 20 63   Each database c
b200: 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 61 6e 20  onnection is an 
b210: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
b220: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
b230: 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 73  ure..*/.struct s
b240: 71 6c 69 74 65 33 20 7b 0a 20 20 73 71 6c 69 74  qlite3 {.  sqlit
b250: 65 33 5f 76 66 73 20 2a 70 56 66 73 3b 20 20 20  e3_vfs *pVfs;   
b260: 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 53 20 49           /* OS I
b270: 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 74  nterface */.  st
b280: 72 75 63 74 20 56 64 62 65 20 2a 70 56 64 62 65  ruct Vdbe *pVdbe
b290: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  ;           /* L
b2a0: 69 73 74 20 6f 66 20 61 63 74 69 76 65 20 76 69  ist of active vi
b2b0: 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 73 20 2a  rtual machines *
b2c0: 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 44 66  /.  CollSeq *pDf
b2d0: 6c 74 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20 20  ltColl;         
b2e0: 20 20 2f 2a 20 54 68 65 20 64 65 66 61 75 6c 74    /* The default
b2f0: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
b300: 6e 63 65 20 28 42 49 4e 41 52 59 29 20 2a 2f 0a  nce (BINARY) */.
b310: 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20    sqlite3_mutex 
b320: 2a 6d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20  *mutex;         
b330: 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75  /* Connection mu
b340: 74 65 78 20 2a 2f 0a 20 20 44 62 20 2a 61 44 62  tex */.  Db *aDb
b350: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
b360: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 62 61         /* All ba
b370: 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20  ckends */.  int 
b380: 6e 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  nDb;            
b390: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
b3a0: 62 65 72 20 6f 66 20 62 61 63 6b 65 6e 64 73 20  ber of backends 
b3b0: 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65  currently in use
b3c0: 20 2a 2f 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b   */.  int flags;
b3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b3e0: 20 20 20 20 2f 2a 20 4d 69 73 63 65 6c 6c 61 6e      /* Miscellan
b3f0: 65 6f 75 73 20 66 6c 61 67 73 2e 20 53 65 65 20  eous flags. See 
b400: 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 36 34 20 6c  below */.  i64 l
b410: 61 73 74 52 6f 77 69 64 3b 20 20 20 20 20 20 20  astRowid;       
b420: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 4f 57 49           /* ROWI
b430: 44 20 6f 66 20 6d 6f 73 74 20 72 65 63 65 6e 74  D of most recent
b440: 20 69 6e 73 65 72 74 20 28 73 65 65 20 61 62 6f   insert (see abo
b450: 76 65 29 20 2a 2f 0a 20 20 69 36 34 20 73 7a 4d  ve) */.  i64 szM
b460: 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  map;            
b470: 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
b480: 74 20 6d 6d 61 70 5f 73 69 7a 65 20 73 65 74 74  t mmap_size sett
b490: 69 6e 67 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  ing */.  unsigne
b4a0: 64 20 69 6e 74 20 6f 70 65 6e 46 6c 61 67 73 3b  d int openFlags;
b4b0: 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20         /* Flags 
b4c0: 70 61 73 73 65 64 20 74 6f 20 73 71 6c 69 74 65  passed to sqlite
b4d0: 33 5f 76 66 73 2e 78 4f 70 65 6e 28 29 20 2a 2f  3_vfs.xOpen() */
b4e0: 0a 20 20 69 6e 74 20 65 72 72 43 6f 64 65 3b 20  .  int errCode; 
b4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b500: 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20   /* Most recent 
b510: 65 72 72 6f 72 20 63 6f 64 65 20 28 53 51 4c 49  error code (SQLI
b520: 54 45 5f 2a 29 20 2a 2f 0a 20 20 69 6e 74 20 65  TE_*) */.  int e
b530: 72 72 4d 61 73 6b 3b 20 20 20 20 20 20 20 20 20  rrMask;         
b540: 20 20 20 20 20 20 20 20 20 2f 2a 20 26 20 72 65           /* & re
b550: 73 75 6c 74 20 63 6f 64 65 73 20 77 69 74 68 20  sult codes with 
b560: 74 68 69 73 20 62 65 66 6f 72 65 20 72 65 74 75  this before retu
b570: 72 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69  rning */.  int i
b580: 53 79 73 45 72 72 6e 6f 3b 20 20 20 20 20 20 20  SysErrno;       
b590: 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6e           /* Errn
b5a0: 6f 20 76 61 6c 75 65 20 66 72 6f 6d 20 6c 61 73  o value from las
b5b0: 74 20 73 79 73 74 65 6d 20 65 72 72 6f 72 20 2a  t system error *
b5c0: 2f 0a 20 20 75 31 36 20 64 62 4f 70 74 46 6c 61  /.  u16 dbOptFla
b5d0: 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gs;             
b5e0: 20 20 2f 2a 20 46 6c 61 67 73 20 74 6f 20 65 6e    /* Flags to en
b5f0: 61 62 6c 65 2f 64 69 73 61 62 6c 65 20 6f 70 74  able/disable opt
b600: 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20 20  imizations */.  
b610: 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20  u8 enc;         
b620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b630: 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a   Text encoding *
b640: 2f 0a 20 20 75 38 20 61 75 74 6f 43 6f 6d 6d 69  /.  u8 autoCommi
b650: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
b660: 20 20 2f 2a 20 54 68 65 20 61 75 74 6f 2d 63 6f    /* The auto-co
b670: 6d 6d 69 74 20 66 6c 61 67 2e 20 2a 2f 0a 20 20  mmit flag. */.  
b680: 75 38 20 62 43 6f 6e 63 75 72 72 65 6e 74 3b 20  u8 bConcurrent; 
b690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b6a0: 20 43 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63   Current transac
b6b0: 74 69 6f 6e 20 69 73 20 22 43 4f 4e 43 55 52 52  tion is "CONCURR
b6c0: 45 4e 54 22 20 2a 2f 0a 20 20 75 38 20 74 65 6d  ENT" */.  u8 tem
b6d0: 70 5f 73 74 6f 72 65 3b 20 20 20 20 20 20 20 20  p_store;        
b6e0: 20 20 20 20 20 20 20 20 2f 2a 20 31 3a 20 66 69          /* 1: fi
b6f0: 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20 30 3a 20  le 2: memory 0: 
b700: 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20  default */.  u8 
b710: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b 20 20 20  mallocFailed;   
b720: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
b730: 75 65 20 69 66 20 77 65 20 68 61 76 65 20 73 65  ue if we have se
b740: 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66 61 69 6c  en a malloc fail
b750: 75 72 65 20 2a 2f 0a 20 20 75 38 20 62 42 65 6e  ure */.  u8 bBen
b760: 69 67 6e 4d 61 6c 6c 6f 63 3b 20 20 20 20 20 20  ignMalloc;      
b770: 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74         /* Do not
b780: 20 72 65 71 75 69 72 65 20 4f 4f 4d 73 20 69 66   require OOMs if
b790: 20 74 72 75 65 20 2a 2f 0a 20 20 75 38 20 64 66   true */.  u8 df
b7a0: 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20 20 20 20  ltLockMode;     
b7b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
b7c0: 75 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65  ult locking-mode
b7d0: 20 66 6f 72 20 61 74 74 61 63 68 65 64 20 64 62   for attached db
b7e0: 73 20 2a 2f 0a 20 20 73 69 67 6e 65 64 20 63 68  s */.  signed ch
b7f0: 61 72 20 6e 65 78 74 41 75 74 6f 76 61 63 3b 20  ar nextAutovac; 
b800: 20 20 20 20 20 2f 2a 20 41 75 74 6f 76 61 63 20       /* Autovac 
b810: 73 65 74 74 69 6e 67 20 61 66 74 65 72 20 56 41  setting after VA
b820: 43 55 55 4d 20 69 66 20 3e 3d 30 20 2a 2f 0a 20  CUUM if >=0 */. 
b830: 20 75 38 20 73 75 70 70 72 65 73 73 45 72 72 3b   u8 suppressErr;
b840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b850: 2a 20 44 6f 20 6e 6f 74 20 69 73 73 75 65 20 65  * Do not issue e
b860: 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 69 66  rror messages if
b870: 20 74 72 75 65 20 2a 2f 0a 20 20 75 38 20 76 74   true */.  u8 vt
b880: 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 20 20 20  abOnConflict;   
b890: 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
b8a0: 65 20 74 6f 20 72 65 74 75 72 6e 20 66 6f 72 20  e to return for 
b8b0: 73 33 5f 76 74 61 62 5f 6f 6e 5f 63 6f 6e 66 6c  s3_vtab_on_confl
b8c0: 69 63 74 28 29 20 2a 2f 0a 20 20 75 38 20 69 73  ict() */.  u8 is
b8d0: 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70  TransactionSavep
b8e0: 6f 69 6e 74 3b 20 20 20 20 2f 2a 20 54 72 75 65  oint;    /* True
b8f0: 20 69 66 20 74 68 65 20 6f 75 74 65 72 6d 6f 73   if the outermos
b900: 74 20 73 61 76 65 70 6f 69 6e 74 20 69 73 20 61  t savepoint is a
b910: 20 54 53 20 2a 2f 0a 20 20 75 38 20 6d 54 72 61   TS */.  u8 mTra
b920: 63 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ce;             
b930: 20 20 20 20 20 20 20 2f 2a 20 7a 65 72 6f 20 6f         /* zero o
b940: 72 20 6d 6f 72 65 20 53 51 4c 49 54 45 5f 54 52  r more SQLITE_TR
b950: 41 43 45 20 66 6c 61 67 73 20 2a 2f 0a 20 20 75  ACE flags */.  u
b960: 38 20 73 6b 69 70 42 74 72 65 65 4d 75 74 65 78  8 skipBtreeMutex
b970: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
b980: 54 72 75 65 20 69 66 20 6e 6f 20 73 68 61 72 65  True if no share
b990: 64 2d 63 61 63 68 65 20 62 61 63 6b 65 6e 64 73  d-cache backends
b9a0: 20 2a 2f 0a 20 20 75 38 20 6e 53 71 6c 45 78 65   */.  u8 nSqlExe
b9b0: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
b9c0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
b9d0: 20 70 65 6e 64 69 6e 67 20 4f 50 5f 53 71 6c 45   pending OP_SqlE
b9e0: 78 65 63 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 20  xec opcodes */. 
b9f0: 20 69 6e 74 20 6e 65 78 74 50 61 67 65 73 69 7a   int nextPagesiz
ba00: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
ba10: 2a 20 50 61 67 65 73 69 7a 65 20 61 66 74 65 72  * Pagesize after
ba20: 20 56 41 43 55 55 4d 20 69 66 20 3e 30 20 2a 2f   VACUUM if >0 */
ba30: 0a 20 20 75 33 32 20 6d 61 67 69 63 3b 20 20 20  .  u32 magic;   
ba40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ba50: 20 2f 2a 20 4d 61 67 69 63 20 6e 75 6d 62 65 72   /* Magic number
ba60: 20 66 6f 72 20 64 65 74 65 63 74 20 6c 69 62 72   for detect libr
ba70: 61 72 79 20 6d 69 73 75 73 65 20 2a 2f 0a 20 20  ary misuse */.  
ba80: 69 6e 74 20 6e 43 68 61 6e 67 65 3b 20 20 20 20  int nChange;    
ba90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
baa0: 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20   Value returned 
bab0: 62 79 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67  by sqlite3_chang
bac0: 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 54  es() */.  int nT
bad0: 6f 74 61 6c 43 68 61 6e 67 65 3b 20 20 20 20 20  otalChange;     
bae0: 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
baf0: 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c   returned by sql
bb00: 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e 67  ite3_total_chang
bb10: 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20 61 4c  es() */.  int aL
bb20: 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4e 5f 4c 49  imit[SQLITE_N_LI
bb30: 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c 69 6d 69 74  MIT];   /* Limit
bb40: 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78 53  s */.  int nMaxS
bb50: 6f 72 74 65 72 4d 6d 61 70 3b 20 20 20 20 20 20  orterMmap;      
bb60: 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20       /* Maximum 
bb70: 73 69 7a 65 20 6f 66 20 72 65 67 69 6f 6e 73 20  size of regions 
bb80: 6d 61 70 70 65 64 20 62 79 20 73 6f 72 74 65 72  mapped by sorter
bb90: 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 71 6c   */.  struct sql
bba0: 69 74 65 33 49 6e 69 74 49 6e 66 6f 20 7b 20 20  ite3InitInfo {  
bbb0: 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69      /* Informati
bbc0: 6f 6e 20 75 73 65 64 20 64 75 72 69 6e 67 20 69  on used during i
bbd0: 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 2a 2f  nitialization */
bbe0: 0a 20 20 20 20 69 6e 74 20 6e 65 77 54 6e 75 6d  .    int newTnum
bbf0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
bc00: 20 2f 2a 20 52 6f 6f 74 70 61 67 65 20 6f 66 20   /* Rootpage of 
bc10: 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 69 74  table being init
bc20: 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75  ialized */.    u
bc30: 38 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20  8 iDb;          
bc40: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68             /* Wh
bc50: 69 63 68 20 64 62 20 66 69 6c 65 20 69 73 20 62  ich db file is b
bc60: 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64  eing initialized
bc70: 20 2a 2f 0a 20 20 20 20 75 38 20 62 75 73 79 3b   */.    u8 busy;
bc80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc90: 20 20 20 20 2f 2a 20 54 52 55 45 20 69 66 20 63      /* TRUE if c
bca0: 75 72 72 65 6e 74 6c 79 20 69 6e 69 74 69 61 6c  urrently initial
bcb0: 69 7a 69 6e 67 20 2a 2f 0a 20 20 20 20 75 38 20  izing */.    u8 
bcc0: 6f 72 70 68 61 6e 54 72 69 67 67 65 72 3b 20 20  orphanTrigger;  
bcd0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74           /* Last
bce0: 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 6f 72   statement is or
bcf0: 70 68 61 6e 65 64 20 54 45 4d 50 20 74 72 69 67  phaned TEMP trig
bd00: 67 65 72 20 2a 2f 0a 20 20 20 20 75 38 20 69 6d  ger */.    u8 im
bd10: 70 6f 73 74 65 72 54 61 62 6c 65 3b 20 20 20 20  posterTable;    
bd20: 20 20 20 20 20 20 20 2f 2a 20 42 75 69 6c 64 69         /* Buildi
bd30: 6e 67 20 61 6e 20 69 6d 70 6f 73 74 65 72 20 74  ng an imposter t
bd40: 61 62 6c 65 20 2a 2f 0a 20 20 7d 20 69 6e 69 74  able */.  } init
bd50: 3b 0a 20 20 69 6e 74 20 6e 56 64 62 65 41 63 74  ;.  int nVdbeAct
bd60: 69 76 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ive;            
bd70: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 56    /* Number of V
bd80: 44 42 45 73 20 63 75 72 72 65 6e 74 6c 79 20 72  DBEs currently r
bd90: 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  unning */.  int 
bda0: 6e 56 64 62 65 52 65 61 64 3b 20 20 20 20 20 20  nVdbeRead;      
bdb0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
bdc0: 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 56 44  ber of active VD
bdd0: 42 45 73 20 74 68 61 74 20 72 65 61 64 20 6f 72  BEs that read or
bde0: 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74 20   write */.  int 
bdf0: 6e 56 64 62 65 57 72 69 74 65 3b 20 20 20 20 20  nVdbeWrite;     
be00: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
be10: 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 56 44  ber of active VD
be20: 42 45 73 20 74 68 61 74 20 72 65 61 64 20 61 6e  BEs that read an
be30: 64 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74  d write */.  int
be40: 20 6e 56 64 62 65 45 78 65 63 3b 20 20 20 20 20   nVdbeExec;     
be50: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
be60: 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 63  mber of nested c
be70: 61 6c 6c 73 20 74 6f 20 56 64 62 65 45 78 65 63  alls to VdbeExec
be80: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 44 65  () */.  int nVDe
be90: 73 74 72 6f 79 3b 20 20 20 20 20 20 20 20 20 20  stroy;          
bea0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
beb0: 6f 66 20 61 63 74 69 76 65 20 4f 50 5f 56 44 65  of active OP_VDe
bec0: 73 74 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73  stroy operations
bed0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 78 74 65 6e   */.  int nExten
bee0: 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20  sion;           
bef0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
bf00: 20 6c 6f 61 64 65 64 20 65 78 74 65 6e 73 69 6f   loaded extensio
bf10: 6e 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 2a 61  ns */.  void **a
bf20: 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20 20  Extension;      
bf30: 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f        /* Array o
bf40: 66 20 73 68 61 72 65 64 20 6c 69 62 72 61 72 79  f shared library
bf50: 20 68 61 6e 64 6c 65 73 20 2a 2f 0a 20 20 69 6e   handles */.  in
bf60: 74 20 28 2a 78 54 72 61 63 65 29 28 75 33 32 2c  t (*xTrace)(u32,
bf70: 76 6f 69 64 2a 2c 76 6f 69 64 2a 2c 76 6f 69 64  void*,void*,void
bf80: 2a 29 3b 20 20 20 20 20 2f 2a 20 54 72 61 63 65  *);     /* Trace
bf90: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
bfa0: 6f 69 64 20 2a 70 54 72 61 63 65 41 72 67 3b 20  oid *pTraceArg; 
bfb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bfc0: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
bfd0: 6d 65 6e 74 20 74 6f 20 74 68 65 20 74 72 61 63  ment to the trac
bfe0: 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  e function */.  
bff0: 76 6f 69 64 20 28 2a 78 50 72 6f 66 69 6c 65 29  void (*xProfile)
c000: 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61  (void*,const cha
c010: 72 2a 2c 75 36 34 29 3b 20 20 2f 2a 20 50 72 6f  r*,u64);  /* Pro
c020: 66 69 6c 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20  filing function 
c030: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f 66  */.  void *pProf
c040: 69 6c 65 41 72 67 3b 20 20 20 20 20 20 20 20 20  ileArg;         
c050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c060: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 70 72  * Argument to pr
c070: 6f 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e 20 2a  ofile function *
c080: 2f 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6d 6d 69  /.  void *pCommi
c090: 74 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  tArg;           
c0a0: 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
c0b0: 74 20 74 6f 20 78 43 6f 6d 6d 69 74 43 61 6c 6c  t to xCommitCall
c0c0: 62 61 63 6b 28 29 20 2a 2f 0a 20 20 69 6e 74 20  back() */.  int 
c0d0: 28 2a 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63  (*xCommitCallbac
c0e0: 6b 29 28 76 6f 69 64 2a 29 3b 20 20 20 20 2f 2a  k)(void*);    /*
c0f0: 20 49 6e 76 6f 6b 65 64 20 61 74 20 65 76 65 72   Invoked at ever
c100: 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76  y commit. */.  v
c110: 6f 69 64 20 2a 70 52 6f 6c 6c 62 61 63 6b 41 72  oid *pRollbackAr
c120: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
c130: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
c140: 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63  xRollbackCallbac
c150: 6b 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  k() */.  void (*
c160: 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63  xRollbackCallbac
c170: 6b 29 28 76 6f 69 64 2a 29 3b 20 2f 2a 20 49 6e  k)(void*); /* In
c180: 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20 63  voked at every c
c190: 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64  ommit. */.  void
c1a0: 20 2a 70 55 70 64 61 74 65 41 72 67 3b 0a 20 20   *pUpdateArg;.  
c1b0: 76 6f 69 64 20 28 2a 78 55 70 64 61 74 65 43 61  void (*xUpdateCa
c1c0: 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69 6e  llback)(void*,in
c1d0: 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  t, const char*,c
c1e0: 6f 6e 73 74 20 63 68 61 72 2a 2c 73 71 6c 69 74  onst char*,sqlit
c1f0: 65 5f 69 6e 74 36 34 29 3b 0a 23 69 66 64 65 66  e_int64);.#ifdef
c200: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50   SQLITE_ENABLE_P
c210: 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20 20  REUPDATE_HOOK.  
c220: 76 6f 69 64 20 2a 70 50 72 65 55 70 64 61 74 65  void *pPreUpdate
c230: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Arg;          /*
c240: 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20   First argument 
c250: 74 6f 20 78 50 72 65 55 70 64 61 74 65 43 61 6c  to xPreUpdateCal
c260: 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  lback */.  void 
c270: 28 2a 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c  (*xPreUpdateCall
c280: 62 61 63 6b 29 28 20 20 20 2f 2a 20 52 65 67 69  back)(   /* Regi
c290: 73 74 65 72 65 64 20 75 73 69 6e 67 20 73 71 6c  stered using sql
c2a0: 69 74 65 33 5f 70 72 65 75 70 64 61 74 65 5f 68  ite3_preupdate_h
c2b0: 6f 6f 6b 28 29 20 2a 2f 0a 20 20 20 20 76 6f 69  ook() */.    voi
c2c0: 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  d*,sqlite3*,int,
c2d0: 63 68 61 72 20 63 6f 6e 73 74 2a 2c 63 68 61 72  char const*,char
c2e0: 20 63 6f 6e 73 74 2a 2c 73 71 6c 69 74 65 33 5f   const*,sqlite3_
c2f0: 69 6e 74 36 34 2c 73 71 6c 69 74 65 33 5f 69 6e  int64,sqlite3_in
c300: 74 36 34 0a 20 20 29 3b 0a 20 20 50 72 65 55 70  t64.  );.  PreUp
c310: 64 61 74 65 20 2a 70 50 72 65 55 70 64 61 74 65  date *pPreUpdate
c320: 3b 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74  ;        /* Cont
c330: 65 78 74 20 66 6f 72 20 61 63 74 69 76 65 20 70  ext for active p
c340: 72 65 2d 75 70 64 61 74 65 20 63 61 6c 6c 62 61  re-update callba
c350: 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20  ck */.#endif /* 
c360: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52  SQLITE_ENABLE_PR
c370: 45 55 50 44 41 54 45 5f 48 4f 4f 4b 20 2a 2f 0a  EUPDATE_HOOK */.
c380: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
c390: 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 28 2a  MIT_WAL.  int (*
c3a0: 78 57 61 6c 43 61 6c 6c 62 61 63 6b 29 28 76 6f  xWalCallback)(vo
c3b0: 69 64 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 2c  id *, sqlite3 *,
c3c0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69   const char *, i
c3d0: 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 57 61  nt);.  void *pWa
c3e0: 6c 41 72 67 3b 0a 23 65 6e 64 69 66 0a 20 20 76  lArg;.#endif.  v
c3f0: 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64  oid(*xCollNeeded
c400: 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a  )(void*,sqlite3*
c410: 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63 6f  ,int eTextRep,co
c420: 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
c430: 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64 31  id(*xCollNeeded1
c440: 36 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33  6)(void*,sqlite3
c450: 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63  *,int eTextRep,c
c460: 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76  onst void*);.  v
c470: 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65 64  oid *pCollNeeded
c480: 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  Arg;.  sqlite3_v
c490: 61 6c 75 65 20 2a 70 45 72 72 3b 20 20 20 20 20  alue *pErr;     
c4a0: 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63       /* Most rec
c4b0: 65 6e 74 20 65 72 72 6f 72 20 6d 65 73 73 61 67  ent error messag
c4c0: 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20  e */.  union {. 
c4d0: 20 20 20 76 6f 6c 61 74 69 6c 65 20 69 6e 74 20     volatile int 
c4e0: 69 73 49 6e 74 65 72 72 75 70 74 65 64 3b 20 2f  isInterrupted; /
c4f0: 2a 20 54 72 75 65 20 69 66 20 73 71 6c 69 74 65  * True if sqlite
c500: 33 5f 69 6e 74 65 72 72 75 70 74 20 68 61 73 20  3_interrupt has 
c510: 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20  been called */. 
c520: 20 20 20 64 6f 75 62 6c 65 20 6e 6f 74 55 73 65     double notUse
c530: 64 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  d1;            /
c540: 2a 20 53 70 61 63 65 72 20 2a 2f 0a 20 20 7d 20  * Spacer */.  } 
c550: 75 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 20  u1;.  Lookaside 
c560: 6c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20  lookaside;      
c570: 20 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69 64 65      /* Lookaside
c580: 20 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69 67 75 72   malloc configur
c590: 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65 66  ation */.#ifndef
c5a0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
c5b0: 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 73 71 6c  HORIZATION.  sql
c5c0: 69 74 65 33 5f 78 61 75 74 68 20 78 41 75 74 68  ite3_xauth xAuth
c5d0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 63  ;          /* Ac
c5e0: 63 65 73 73 20 61 75 74 68 6f 72 69 7a 61 74 69  cess authorizati
c5f0: 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  on function */. 
c600: 20 76 6f 69 64 20 2a 70 41 75 74 68 41 72 67 3b   void *pAuthArg;
c610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c620: 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20 74  * 1st argument t
c630: 6f 20 74 68 65 20 61 63 63 65 73 73 20 61 75 74  o the access aut
c640: 68 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 65  h function */.#e
c650: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
c660: 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53  ITE_OMIT_PROGRES
c670: 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e 74  S_CALLBACK.  int
c680: 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76 6f   (*xProgress)(vo
c690: 69 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54 68  id *);     /* Th
c6a0: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
c6b0: 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ack */.  void *p
c6c0: 50 72 6f 67 72 65 73 73 41 72 67 3b 20 20 20 20  ProgressArg;    
c6d0: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
c6e0: 6e 74 20 74 6f 20 74 68 65 20 70 72 6f 67 72 65  nt to the progre
c6f0: 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  ss callback */. 
c700: 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72   unsigned nProgr
c710: 65 73 73 4f 70 73 3b 20 20 20 20 20 20 20 20 2f  essOps;        /
c720: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f  * Number of opco
c730: 64 65 73 20 66 6f 72 20 70 72 6f 67 72 65 73 73  des for progress
c740: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e   callback */.#en
c750: 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
c760: 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
c770: 41 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72 61  ABLE.  int nVTra
c780: 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ns;             
c790: 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74 65       /* Allocate
c7a0: 64 20 73 69 7a 65 20 6f 66 20 61 56 54 72 61 6e  d size of aVTran
c7b0: 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f 64  s */.  Hash aMod
c7c0: 75 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ule;            
c7d0: 20 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74 65       /* populate
c7e0: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 72 65  d by sqlite3_cre
c7f0: 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a  ate_module() */.
c800: 20 20 56 74 61 62 43 74 78 20 2a 70 56 74 61 62    VtabCtx *pVtab
c810: 43 74 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  Ctx;            
c820: 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61  /* Context for a
c830: 63 74 69 76 65 20 76 74 61 62 20 63 6f 6e 6e 65  ctive vtab conne
c840: 63 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20 56  ct/create */.  V
c850: 54 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73 3b  Table **aVTrans;
c860: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c870: 56 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 77  Virtual tables w
c880: 69 74 68 20 6f 70 65 6e 20 74 72 61 6e 73 61 63  ith open transac
c890: 74 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62 6c  tions */.  VTabl
c8a0: 65 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b 20  e *pDisconnect; 
c8b0: 20 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65 63 74     /* Disconnect
c8c0: 20 74 68 65 73 65 20 69 6e 20 6e 65 78 74 20 73   these in next s
c8d0: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28 29  qlite3_prepare()
c8e0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 48 61 73   */.#endif.  Has
c8f0: 68 20 61 46 75 6e 63 3b 20 20 20 20 20 20 20 20  h aFunc;        
c900: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 61             /* Ha
c910: 73 68 20 74 61 62 6c 65 20 6f 66 20 63 6f 6e 6e  sh table of conn
c920: 65 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73  ection functions
c930: 20 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f 6c 6c   */.  Hash aColl
c940: 53 65 71 3b 20 20 20 20 20 20 20 20 20 20 20 20  Seq;            
c950: 20 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c 61      /* All colla
c960: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 2a  ting sequences *
c970: 2f 0a 20 20 42 75 73 79 48 61 6e 64 6c 65 72 20  /.  BusyHandler 
c980: 62 75 73 79 48 61 6e 64 6c 65 72 3b 20 20 20 20  busyHandler;    
c990: 20 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c 62 61    /* Busy callba
c9a0: 63 6b 20 2a 2f 0a 20 20 44 62 20 61 44 62 53 74  ck */.  Db aDbSt
c9b0: 61 74 69 63 5b 32 5d 3b 20 20 20 20 20 20 20 20  atic[2];        
c9c0: 20 20 20 20 20 20 2f 2a 20 53 74 61 74 69 63 20        /* Static 
c9d0: 73 70 61 63 65 20 66 6f 72 20 74 68 65 20 32 20  space for the 2 
c9e0: 64 65 66 61 75 6c 74 20 62 61 63 6b 65 6e 64 73  default backends
c9f0: 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20   */.  Savepoint 
ca00: 2a 70 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20  *pSavepoint;    
ca10: 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61      /* List of a
ca20: 63 74 69 76 65 20 73 61 76 65 70 6f 69 6e 74 73  ctive savepoints
ca30: 20 2a 2f 0a 20 20 69 6e 74 20 62 75 73 79 54 69   */.  int busyTi
ca40: 6d 65 6f 75 74 3b 20 20 20 20 20 20 20 20 20 20  meout;          
ca50: 20 20 20 20 2f 2a 20 42 75 73 79 20 68 61 6e 64      /* Busy hand
ca60: 6c 65 72 20 74 69 6d 65 6f 75 74 2c 20 69 6e 20  ler timeout, in 
ca70: 6d 73 65 63 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  msec */.  int nS
ca80: 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20  avepoint;       
ca90: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
caa0: 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63  r of non-transac
cab0: 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20  tion savepoints 
cac0: 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 61 74 65 6d  */.  int nStatem
cad0: 65 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ent;            
cae0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
caf0: 6e 65 73 74 65 64 20 73 74 61 74 65 6d 65 6e 74  nested statement
cb00: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 20 2a  -transactions  *
cb10: 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65  /.  i64 nDeferre
cb20: 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20  dCons;          
cb30: 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72 65    /* Net deferre
cb40: 64 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74 68  d constraints th
cb50: 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  is transaction. 
cb60: 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72  */.  i64 nDeferr
cb70: 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20  edImmCons;      
cb80: 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72     /* Net deferr
cb90: 65 64 20 69 6d 6d 65 64 69 61 74 65 20 63 6f 6e  ed immediate con
cba0: 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e  straints */.  in
cbb0: 74 20 2a 70 6e 42 79 74 65 73 46 72 65 65 64 3b  t *pnBytesFreed;
cbc0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
cbd0: 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 6e 63 72  f not NULL, incr
cbe0: 65 6d 65 6e 74 20 74 68 69 73 20 69 6e 20 44 62  ement this in Db
cbf0: 46 72 65 65 28 29 20 2a 2f 0a 23 69 66 64 65 66  Free() */.#ifdef
cc00: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55   SQLITE_ENABLE_U
cc10: 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 2f  NLOCK_NOTIFY.  /
cc20: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
cc30: 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 61 6c  variables are al
cc40: 6c 20 70 72 6f 74 65 63 74 65 64 20 62 79 20 74  l protected by t
cc50: 68 65 20 53 54 41 54 49 43 5f 4d 41 53 54 45 52  he STATIC_MASTER
cc60: 0a 20 20 2a 2a 20 6d 75 74 65 78 2c 20 6e 6f 74  .  ** mutex, not
cc70: 20 62 79 20 73 71 6c 69 74 65 33 2e 6d 75 74 65   by sqlite3.mute
cc80: 78 2e 20 54 68 65 79 20 61 72 65 20 75 73 65 64  x. They are used
cc90: 20 62 79 20 63 6f 64 65 20 69 6e 20 6e 6f 74 69   by code in noti
cca0: 66 79 2e 63 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  fy.c..  **.  ** 
ccb0: 57 68 65 6e 20 58 2e 70 55 6e 6c 6f 63 6b 43 6f  When X.pUnlockCo
ccc0: 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61  nnection==Y, tha
ccd0: 74 20 6d 65 61 6e 73 20 74 68 61 74 20 58 20 69  t means that X i
cce0: 73 20 77 61 69 74 69 6e 67 20 66 6f 72 20 59 20  s waiting for Y 
ccf0: 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f 63 6b 20 73  to.  ** unlock s
cd00: 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 70 72  o that it can pr
cd10: 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  oceed..  **.  **
cd20: 20 57 68 65 6e 20 58 2e 70 42 6c 6f 63 6b 69 6e   When X.pBlockin
cd30: 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20  gConnection==Y, 
cd40: 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20  that means that 
cd50: 73 6f 6d 65 74 68 69 6e 67 20 74 68 61 74 20 58  something that X
cd60: 20 74 72 69 65 64 0a 20 20 2a 2a 20 74 72 69 65   tried.  ** trie
cd70: 64 20 74 6f 20 64 6f 20 72 65 63 65 6e 74 6c 79  d to do recently
cd80: 20 66 61 69 6c 65 64 20 77 69 74 68 20 61 6e 20   failed with an 
cd90: 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 65 72  SQLITE_LOCKED er
cda0: 72 6f 72 20 64 75 65 20 74 6f 20 6c 6f 63 6b 73  ror due to locks
cdb0: 0a 20 20 2a 2a 20 68 65 6c 64 20 62 79 20 59 2e  .  ** held by Y.
cdc0: 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20  .  */.  sqlite3 
cdd0: 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63  *pBlockingConnec
cde0: 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e 6e 65 63 74  tion; /* Connect
cdf0: 69 6f 6e 20 74 68 61 74 20 63 61 75 73 65 64 20  ion that caused 
ce00: 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 2a 2f  SQLITE_LOCKED */
ce10: 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 55 6e 6c  .  sqlite3 *pUnl
ce20: 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 20  ockConnection;  
ce30: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e           /* Conn
ce40: 65 63 74 69 6f 6e 20 74 6f 20 77 61 74 63 68 20  ection to watch 
ce50: 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a 2f 0a 20 20  for unlock */.  
ce60: 76 6f 69 64 20 2a 70 55 6e 6c 6f 63 6b 41 72 67  void *pUnlockArg
ce70: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
ce80: 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e        /* Argumen
ce90: 74 20 74 6f 20 78 55 6e 6c 6f 63 6b 4e 6f 74 69  t to xUnlockNoti
cea0: 66 79 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  fy */.  void (*x
ceb0: 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 29 28 76 6f  UnlockNotify)(vo
cec0: 69 64 20 2a 2a 2c 20 69 6e 74 29 3b 20 20 2f 2a  id **, int);  /*
ced0: 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69 66 79 20 63   Unlock notify c
cee0: 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 73 71 6c  allback */.  sql
cef0: 69 74 65 33 20 2a 70 4e 65 78 74 42 6c 6f 63 6b  ite3 *pNextBlock
cf00: 65 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65  ed;        /* Ne
cf10: 78 74 20 69 6e 20 6c 69 73 74 20 6f 66 20 61 6c  xt in list of al
cf20: 6c 20 62 6c 6f 63 6b 65 64 20 63 6f 6e 6e 65 63  l blocked connec
cf30: 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69 66 0a  tions */.#endif.
cf40: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53  #ifdef SQLITE_US
cf50: 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f  ER_AUTHENTICATIO
cf60: 4e 0a 20 20 73 71 6c 69 74 65 33 5f 75 73 65 72  N.  sqlite3_user
cf70: 61 75 74 68 20 61 75 74 68 3b 20 20 20 20 20 20  auth auth;      
cf80: 20 20 2f 2a 20 55 73 65 72 20 61 75 74 68 65 6e    /* User authen
cf90: 74 69 63 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61  tication informa
cfa0: 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d  tion */.#endif.}
cfb0: 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72 6f  ;../*.** A macro
cfc0: 20 74 6f 20 64 69 73 63 6f 76 65 72 20 74 68 65   to discover the
cfd0: 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 64   encoding of a d
cfe0: 61 74 61 62 61 73 65 2e 0a 2a 2f 0a 23 64 65 66  atabase..*/.#def
cff0: 69 6e 65 20 53 43 48 45 4d 41 5f 45 4e 43 28 64  ine SCHEMA_ENC(d
d000: 62 29 20 28 28 64 62 29 2d 3e 61 44 62 5b 30 5d  b) ((db)->aDb[0]
d010: 2e 70 53 63 68 65 6d 61 2d 3e 65 6e 63 29 0a 23  .pSchema->enc).#
d020: 64 65 66 69 6e 65 20 45 4e 43 28 64 62 29 20 20  define ENC(db)  
d030: 20 20 20 20 20 20 28 28 64 62 29 2d 3e 65 6e 63        ((db)->enc
d040: 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c  )../*.** Possibl
d050: 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65  e values for the
d060: 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 2e 0a   sqlite3.flags..
d070: 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73  **.** Value cons
d080: 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72 63 65  traints (enforce
d090: 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29 3a  d via assert()):
d0a0: 0a 2a 2a 20 20 20 20 20 20 53 51 4c 49 54 45 5f  .**      SQLITE_
d0b0: 46 75 6c 6c 46 53 79 6e 63 20 20 20 20 20 3d 3d  FullFSync     ==
d0c0: 20 50 41 47 45 52 5f 46 55 4c 4c 46 53 59 4e 43   PAGER_FULLFSYNC
d0d0: 0a 2a 2a 20 20 20 20 20 20 53 51 4c 49 54 45 5f  .**      SQLITE_
d0e0: 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63 20 3d 3d  CkptFullFSync ==
d0f0: 20 50 41 47 45 52 5f 43 4b 50 54 5f 46 55 4c 4c   PAGER_CKPT_FULL
d100: 46 53 59 4e 43 0a 2a 2a 20 20 20 20 20 20 53 51  FSYNC.**      SQ
d110: 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 20  LITE_CacheSpill 
d120: 20 20 20 3d 3d 20 50 41 47 45 52 5f 43 41 43 48     == PAGER_CACH
d130: 45 5f 53 50 49 4c 4c 0a 2a 2f 0a 23 64 65 66 69  E_SPILL.*/.#defi
d140: 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72  ne SQLITE_VdbeTr
d150: 61 63 65 20 20 20 20 20 20 30 78 30 30 30 30 30  ace      0x00000
d160: 30 30 31 20 20 2f 2a 20 54 72 75 65 20 74 6f 20  001  /* True to 
d170: 74 72 61 63 65 20 56 44 42 45 20 65 78 65 63 75  trace VDBE execu
d180: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
d190: 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61  SQLITE_InternCha
d1a0: 6e 67 65 73 20 20 30 78 30 30 30 30 30 30 30 32  nges  0x00000002
d1b0: 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74 65 64    /* Uncommitted
d1c0: 20 48 61 73 68 20 74 61 62 6c 65 20 63 68 61 6e   Hash table chan
d1d0: 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ges */.#define S
d1e0: 51 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d  QLITE_FullColNam
d1f0: 65 73 20 20 20 30 78 30 30 30 30 30 30 30 34 20  es   0x00000004 
d200: 20 2f 2a 20 53 68 6f 77 20 66 75 6c 6c 20 63 6f   /* Show full co
d210: 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f 6e 20 53 45  lumn names on SE
d220: 4c 45 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20  LECT */.#define 
d230: 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63  SQLITE_FullFSync
d240: 20 20 20 20 20 20 30 78 30 30 30 30 30 30 30 38        0x00000008
d250: 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73    /* Use full fs
d260: 79 6e 63 20 6f 6e 20 74 68 65 20 62 61 63 6b 65  ync on the backe
d270: 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  nd */.#define SQ
d280: 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79  LITE_CkptFullFSy
d290: 6e 63 20 20 30 78 30 30 30 30 30 30 31 30 20 20  nc  0x00000010  
d2a0: 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79 6e  /* Use full fsyn
d2b0: 63 20 66 6f 72 20 63 68 65 63 6b 70 6f 69 6e 74  c for checkpoint
d2c0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
d2d0: 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 20 20 20  TE_CacheSpill   
d2e0: 20 20 30 78 30 30 30 30 30 30 32 30 20 20 2f 2a    0x00000020  /*
d2f0: 20 4f 4b 20 74 6f 20 73 70 69 6c 6c 20 70 61 67   OK to spill pag
d300: 65 72 20 63 61 63 68 65 20 2a 2f 0a 23 64 65 66  er cache */.#def
d310: 69 6e 65 20 53 51 4c 49 54 45 5f 53 68 6f 72 74  ine SQLITE_Short
d320: 43 6f 6c 4e 61 6d 65 73 20 20 30 78 30 30 30 30  ColNames  0x0000
d330: 30 30 34 30 20 20 2f 2a 20 53 68 6f 77 20 73 68  0040  /* Show sh
d340: 6f 72 74 20 63 6f 6c 75 6d 6e 73 20 6e 61 6d 65  ort columns name
d350: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
d360: 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 20 20  ITE_CountRows   
d370: 20 20 20 30 78 30 30 30 30 30 30 38 30 20 20 2f     0x00000080  /
d380: 2a 20 43 6f 75 6e 74 20 72 6f 77 73 20 63 68 61  * Count rows cha
d390: 6e 67 65 64 20 62 79 20 49 4e 53 45 52 54 2c 20  nged by INSERT, 
d3a0: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
d3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d3d0: 20 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44    DELETE, or UPD
d3e0: 41 54 45 20 61 6e 64 20 72 65 74 75 72 6e 20 2a  ATE and return *
d3f0: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
d400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d410: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20              /*  
d420: 20 74 68 65 20 63 6f 75 6e 74 20 75 73 69 6e 67   the count using
d430: 20 61 20 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f 0a   a callback. */.
d440: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e  #define SQLITE_N
d450: 75 6c 6c 43 61 6c 6c 62 61 63 6b 20 20 20 30 78  ullCallback   0x
d460: 30 30 30 30 30 31 30 30 20 20 2f 2a 20 49 6e 76  00000100  /* Inv
d470: 6f 6b 65 20 74 68 65 20 63 61 6c 6c 62 61 63 6b  oke the callback
d480: 20 6f 6e 63 65 20 69 66 20 74 68 65 20 2a 2f 0a   once if the */.
d490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d4b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 72            /*   r
d4c0: 65 73 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70  esult set is emp
d4d0: 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ty */.#define SQ
d4e0: 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 20 20 20  LITE_SqlTrace   
d4f0: 20 20 20 20 30 78 30 30 30 30 30 32 30 30 20 20      0x00000200  
d500: 2f 2a 20 44 65 62 75 67 20 70 72 69 6e 74 20 53  /* Debug print S
d510: 51 4c 20 61 73 20 69 74 20 65 78 65 63 75 74 65  QL as it execute
d520: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
d530: 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 20  ITE_VdbeListing 
d540: 20 20 20 30 78 30 30 30 30 30 34 30 30 20 20 2f     0x00000400  /
d550: 2a 20 44 65 62 75 67 20 6c 69 73 74 69 6e 67 73  * Debug listings
d560: 20 6f 66 20 56 44 42 45 20 70 72 6f 67 72 61 6d   of VDBE program
d570: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
d580: 49 54 45 5f 57 72 69 74 65 53 63 68 65 6d 61 20  ITE_WriteSchema 
d590: 20 20 20 30 78 30 30 30 30 30 38 30 30 20 20 2f     0x00000800  /
d5a0: 2a 20 4f 4b 20 74 6f 20 75 70 64 61 74 65 20 53  * OK to update S
d5b0: 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 2a 2f 0a  QLITE_MASTER */.
d5c0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56  #define SQLITE_V
d5d0: 64 62 65 41 64 64 6f 70 54 72 61 63 65 20 30 78  dbeAddopTrace 0x
d5e0: 30 30 30 30 31 30 30 30 20 20 2f 2a 20 54 72 61  00001000  /* Tra
d5f0: 63 65 20 73 71 6c 69 74 65 33 56 64 62 65 41 64  ce sqlite3VdbeAd
d600: 64 4f 70 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 23  dOp() calls */.#
d610: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 67  define SQLITE_Ig
d620: 6e 6f 72 65 43 68 65 63 6b 73 20 20 20 30 78 30  noreChecks   0x0
d630: 30 30 30 32 30 30 30 20 20 2f 2a 20 44 6f 20 6e  0002000  /* Do n
d640: 6f 74 20 65 6e 66 6f 72 63 65 20 63 68 65 63 6b  ot enforce check
d650: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
d660: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52  #define SQLITE_R
d670: 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64 20 30  eadUncommitted 0
d680: 78 30 30 30 34 30 30 30 20 20 2f 2a 20 46 6f 72  x0004000  /* For
d690: 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f   shared-cache mo
d6a0: 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  de */.#define SQ
d6b0: 4c 49 54 45 5f 4c 65 67 61 63 79 46 69 6c 65 46  LITE_LegacyFileF
d6c0: 6d 74 20 20 30 78 30 30 30 30 38 30 30 30 20 20  mt  0x00008000  
d6d0: 2f 2a 20 43 72 65 61 74 65 20 6e 65 77 20 64 61  /* Create new da
d6e0: 74 61 62 61 73 65 73 20 69 6e 20 66 6f 72 6d 61  tabases in forma
d6f0: 74 20 31 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  t 1 */.#define S
d700: 51 4c 49 54 45 5f 52 65 63 6f 76 65 72 79 4d 6f  QLITE_RecoveryMo
d710: 64 65 20 20 20 30 78 30 30 30 31 30 30 30 30 20  de   0x00010000 
d720: 20 2f 2a 20 49 67 6e 6f 72 65 20 73 63 68 65 6d   /* Ignore schem
d730: 61 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65 66  a errors */.#def
d740: 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 76 65 72  ine SQLITE_Rever
d750: 73 65 4f 72 64 65 72 20 20 20 30 78 30 30 30 32  seOrder   0x0002
d760: 30 30 30 30 20 20 2f 2a 20 52 65 76 65 72 73 65  0000  /* Reverse
d770: 20 75 6e 6f 72 64 65 72 65 64 20 53 45 4c 45 43   unordered SELEC
d780: 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  Ts */.#define SQ
d790: 4c 49 54 45 5f 52 65 63 54 72 69 67 67 65 72 73  LITE_RecTriggers
d7a0: 20 20 20 20 30 78 30 30 30 34 30 30 30 30 20 20      0x00040000  
d7b0: 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63 75 72 73  /* Enable recurs
d7c0: 69 76 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a  ive triggers */.
d7d0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
d7e0: 6f 72 65 69 67 6e 4b 65 79 73 20 20 20 20 30 78  oreignKeys    0x
d7f0: 30 30 30 38 30 30 30 30 20 20 2f 2a 20 45 6e 66  00080000  /* Enf
d800: 6f 72 63 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  orce foreign key
d810: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 20 2a 2f   constraints  */
d820: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d830: 41 75 74 6f 49 6e 64 65 78 20 20 20 20 20 20 30  AutoIndex      0
d840: 78 30 30 31 30 30 30 30 30 20 20 2f 2a 20 45 6e  x00100000  /* En
d850: 61 62 6c 65 20 61 75 74 6f 6d 61 74 69 63 20 69  able automatic i
d860: 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e  ndexes */.#defin
d870: 65 20 53 51 4c 49 54 45 5f 50 72 65 66 65 72 42  e SQLITE_PreferB
d880: 75 69 6c 74 69 6e 20 20 30 78 30 30 32 30 30 30  uiltin  0x002000
d890: 30 30 20 20 2f 2a 20 50 72 65 66 65 72 65 6e 63  00  /* Preferenc
d8a0: 65 20 74 6f 20 62 75 69 6c 74 2d 69 6e 20 66 75  e to built-in fu
d8b0: 6e 63 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ncs */.#define S
d8c0: 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74 65 6e 73  QLITE_LoadExtens
d8d0: 69 6f 6e 20 20 30 78 30 30 34 30 30 30 30 30 20  ion  0x00400000 
d8e0: 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64 5f   /* Enable load_
d8f0: 65 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23 64 65  extension */.#de
d900: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64  fine SQLITE_Load
d910: 45 78 74 46 75 6e 63 20 20 20 20 30 78 30 30 38  ExtFunc    0x008
d920: 30 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65  00000  /* Enable
d930: 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28   load_extension(
d940: 29 20 53 51 4c 20 66 75 6e 63 20 2a 2f 0a 23 64  ) SQL func */.#d
d950: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e 61  efine SQLITE_Ena
d960: 62 6c 65 54 72 69 67 67 65 72 20 20 30 78 30 31  bleTrigger  0x01
d970: 30 30 30 30 30 30 20 20 2f 2a 20 54 72 75 65 20  000000  /* True 
d980: 74 6f 20 65 6e 61 62 6c 65 20 74 72 69 67 67 65  to enable trigge
d990: 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  rs */.#define SQ
d9a0: 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20 20 20  LITE_DeferFKs   
d9b0: 20 20 20 20 30 78 30 32 30 30 30 30 30 30 20 20      0x02000000  
d9c0: 2f 2a 20 44 65 66 65 72 20 61 6c 6c 20 46 4b 20  /* Defer all FK 
d9d0: 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23  constraints */.#
d9e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51 75  define SQLITE_Qu
d9f0: 65 72 79 4f 6e 6c 79 20 20 20 20 20 20 30 78 30  eryOnly      0x0
da00: 34 30 30 30 30 30 30 20 20 2f 2a 20 44 69 73 61  4000000  /* Disa
da10: 62 6c 65 20 64 61 74 61 62 61 73 65 20 63 68 61  ble database cha
da20: 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  nges */.#define 
da30: 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50 20 20  SQLITE_VdbeEQP  
da40: 20 20 20 20 20 20 30 78 30 38 30 30 30 30 30 30        0x08000000
da50: 20 20 2f 2a 20 44 65 62 75 67 20 45 58 50 4c 41    /* Debug EXPLA
da60: 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 2a 2f  IN QUERY PLAN */
da70: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
da80: 56 61 63 75 75 6d 20 20 20 20 20 20 20 20 20 30  Vacuum         0
da90: 78 31 30 30 30 30 30 30 30 20 20 2f 2a 20 43 75  x10000000  /* Cu
daa0: 72 72 65 6e 74 6c 79 20 69 6e 20 61 20 56 41 43  rrently in a VAC
dab0: 55 55 4d 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  UUM */.#define S
dac0: 51 4c 49 54 45 5f 43 65 6c 6c 53 69 7a 65 43 6b  QLITE_CellSizeCk
dad0: 20 20 20 20 20 30 78 32 30 30 30 30 30 30 30 20       0x20000000 
dae0: 20 2f 2a 20 43 68 65 63 6b 20 62 74 72 65 65 20   /* Check btree 
daf0: 63 65 6c 6c 20 73 69 7a 65 73 20 6f 6e 20 6c 6f  cell sizes on lo
db00: 61 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ad */.#define SQ
db10: 4c 49 54 45 5f 46 74 73 33 54 6f 6b 65 6e 69 7a  LITE_Fts3Tokeniz
db20: 65 72 20 20 30 78 34 30 30 30 30 30 30 30 20 20  er  0x40000000  
db30: 2f 2a 20 45 6e 61 62 6c 65 20 66 74 73 33 5f 74  /* Enable fts3_t
db40: 6f 6b 65 6e 69 7a 65 72 28 32 29 20 2a 2f 0a 23  okenizer(2) */.#
db50: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 6f  define SQLITE_No
db60: 43 6b 70 74 4f 6e 43 6c 6f 73 65 20 20 30 78 38  CkptOnClose  0x8
db70: 30 30 30 30 30 30 30 20 20 2f 2a 20 4e 6f 20 63  0000000  /* No c
db80: 68 65 63 6b 70 6f 69 6e 74 20 6f 6e 20 63 6c 6f  heckpoint on clo
db90: 73 65 28 29 2f 44 45 54 41 43 48 20 2a 2f 0a 0a  se()/DETACH */..
dba0: 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f 66 20 74  ./*.** Bits of t
dbb0: 68 65 20 73 71 6c 69 74 65 33 2e 64 62 4f 70 74  he sqlite3.dbOpt
dbc0: 46 6c 61 67 73 20 66 69 65 6c 64 20 74 68 61 74  Flags field that
dbd0: 20 61 72 65 20 75 73 65 64 20 62 79 20 74 68 65   are used by the
dbe0: 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74  .** sqlite3_test
dbf0: 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f  _control(SQLITE_
dc00: 54 45 53 54 43 54 52 4c 5f 4f 50 54 49 4d 49 5a  TESTCTRL_OPTIMIZ
dc10: 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69 6e 74 65  ATIONS,...) inte
dc20: 72 66 61 63 65 20 74 6f 0a 2a 2a 20 73 65 6c 65  rface to.** sele
dc30: 63 74 69 76 65 6c 79 20 64 69 73 61 62 6c 65 20  ctively disable 
dc40: 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61  various optimiza
dc50: 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  tions..*/.#defin
dc60: 65 20 53 51 4c 49 54 45 5f 51 75 65 72 79 46 6c  e SQLITE_QueryFl
dc70: 61 74 74 65 6e 65 72 20 30 78 30 30 30 31 20 20  attener 0x0001  
dc80: 20 2f 2a 20 51 75 65 72 79 20 66 6c 61 74 74 65   /* Query flatte
dc90: 6e 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ning */.#define 
dca0: 53 51 4c 49 54 45 5f 43 6f 6c 75 6d 6e 43 61 63  SQLITE_ColumnCac
dcb0: 68 65 20 20 20 20 30 78 30 30 30 32 20 20 20 2f  he    0x0002   /
dcc0: 2a 20 43 6f 6c 75 6d 6e 20 63 61 63 68 65 20 2a  * Column cache *
dcd0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
dce0: 5f 47 72 6f 75 70 42 79 4f 72 64 65 72 20 20 20  _GroupByOrder   
dcf0: 30 78 30 30 30 34 20 20 20 2f 2a 20 47 52 4f 55  0x0004   /* GROU
dd00: 50 42 59 20 63 6f 76 65 72 20 6f 66 20 4f 52 44  PBY cover of ORD
dd10: 45 52 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ERBY */.#define 
dd20: 53 51 4c 49 54 45 5f 46 61 63 74 6f 72 4f 75 74  SQLITE_FactorOut
dd30: 43 6f 6e 73 74 20 30 78 30 30 30 38 20 20 20 2f  Const 0x0008   /
dd40: 2a 20 43 6f 6e 73 74 61 6e 74 20 66 61 63 74 6f  * Constant facto
dd50: 72 69 6e 67 20 2a 2f 0a 2f 2a 20 20 20 20 20 20  ring */./*      
dd60: 20 20 20 20 20 20 20 20 20 20 6e 6f 74 20 75 73            not us
dd70: 65 64 20 20 20 20 30 78 30 30 31 30 20 20 20 2f  ed    0x0010   /
dd80: 2f 20 57 61 73 3a 20 53 51 4c 49 54 45 5f 49 64  / Was: SQLITE_Id
dd90: 78 52 65 61 6c 41 73 49 6e 74 20 2a 2f 0a 23 64  xRealAsInt */.#d
dda0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 69 73  efine SQLITE_Dis
ddb0: 74 69 6e 63 74 4f 70 74 20 20 20 20 30 78 30 30  tinctOpt    0x00
ddc0: 32 30 20 20 20 2f 2a 20 44 49 53 54 49 4e 43 54  20   /* DISTINCT
ddd0: 20 75 73 69 6e 67 20 69 6e 64 65 78 65 73 20 2a   using indexes *
dde0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ddf0: 5f 43 6f 76 65 72 49 64 78 53 63 61 6e 20 20 20  _CoverIdxScan   
de00: 30 78 30 30 34 30 20 20 20 2f 2a 20 43 6f 76 65  0x0040   /* Cove
de10: 72 69 6e 67 20 69 6e 64 65 78 20 73 63 61 6e 73  ring index scans
de20: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
de30: 54 45 5f 4f 72 64 65 72 42 79 49 64 78 4a 6f 69  TE_OrderByIdxJoi
de40: 6e 20 30 78 30 30 38 30 20 20 20 2f 2a 20 4f 52  n 0x0080   /* OR
de50: 44 45 52 20 42 59 20 6f 66 20 6a 6f 69 6e 73 20  DER BY of joins 
de60: 76 69 61 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65  via index */.#de
de70: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 75 62 71  fine SQLITE_Subq
de80: 43 6f 72 6f 75 74 69 6e 65 20 20 30 78 30 31 30  Coroutine  0x010
de90: 30 20 20 20 2f 2a 20 45 76 61 6c 75 61 74 65 20  0   /* Evaluate 
dea0: 73 75 62 71 75 65 72 69 65 73 20 61 73 20 63 6f  subqueries as co
deb0: 72 6f 75 74 69 6e 65 73 20 2a 2f 0a 23 64 65 66  routines */.#def
dec0: 69 6e 65 20 53 51 4c 49 54 45 5f 54 72 61 6e 73  ine SQLITE_Trans
ded0: 69 74 69 76 65 20 20 20 20 20 30 78 30 32 30 30  itive     0x0200
dee0: 20 20 20 2f 2a 20 54 72 61 6e 73 69 74 69 76 65     /* Transitive
def0: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
df00: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f  #define SQLITE_O
df10: 6d 69 74 4e 6f 6f 70 4a 6f 69 6e 20 20 20 30 78  mitNoopJoin   0x
df20: 30 34 30 30 20 20 20 2f 2a 20 4f 6d 69 74 20 75  0400   /* Omit u
df30: 6e 75 73 65 64 20 74 61 62 6c 65 73 20 69 6e 20  nused tables in 
df40: 6a 6f 69 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  joins */.#define
df50: 20 53 51 4c 49 54 45 5f 53 74 61 74 33 34 20 20   SQLITE_Stat34  
df60: 20 20 20 20 20 20 20 30 78 30 38 30 30 20 20 20         0x0800   
df70: 2f 2a 20 55 73 65 20 53 54 41 54 33 20 6f 72 20  /* Use STAT3 or 
df80: 53 54 41 54 34 20 64 61 74 61 20 2a 2f 0a 23 64  STAT4 data */.#d
df90: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 75 72  efine SQLITE_Cur
dfa0: 73 6f 72 48 69 6e 74 73 20 20 20 20 30 78 32 30  sorHints    0x20
dfb0: 30 30 20 20 20 2f 2a 20 41 64 64 20 4f 50 5f 43  00   /* Add OP_C
dfc0: 75 72 73 6f 72 48 69 6e 74 20 6f 70 63 6f 64 65  ursorHint opcode
dfd0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
dfe0: 49 54 45 5f 41 6c 6c 4f 70 74 73 20 20 20 20 20  ITE_AllOpts     
dff0: 20 20 20 30 78 66 66 66 66 20 20 20 2f 2a 20 41     0xffff   /* A
e000: 6c 6c 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  ll optimizations
e010: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f   */../*.** Macro
e020: 73 20 66 6f 72 20 74 65 73 74 69 6e 67 20 77 68  s for testing wh
e030: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 6f 70 74  ether or not opt
e040: 69 6d 69 7a 61 74 69 6f 6e 73 20 61 72 65 20 65  imizations are e
e050: 6e 61 62 6c 65 64 20 6f 72 20 64 69 73 61 62 6c  nabled or disabl
e060: 65 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ed..*/.#define O
e070: 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73 61 62  ptimizationDisab
e080: 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 28  led(db, mask)  (
e090: 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67  ((db)->dbOptFlag
e0a0: 73 26 28 6d 61 73 6b 29 29 21 3d 30 29 0a 23 64  s&(mask))!=0).#d
e0b0: 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69  efine Optimizati
e0c0: 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20 6d 61  onEnabled(db, ma
e0d0: 73 6b 29 20 20 20 28 28 28 64 62 29 2d 3e 64 62  sk)   (((db)->db
e0e0: 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29  OptFlags&(mask))
e0f0: 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  ==0)../*.** Retu
e100: 72 6e 20 74 72 75 65 20 69 66 20 69 74 20 4f 4b  rn true if it OK
e110: 20 74 6f 20 66 61 63 74 6f 72 20 63 6f 6e 73 74   to factor const
e120: 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20  ant expressions 
e130: 69 6e 74 6f 20 74 68 65 20 69 6e 69 74 69 61 6c  into the initial
e140: 69 7a 61 74 69 6f 6e 0a 2a 2a 20 63 6f 64 65 2e  ization.** code.
e150: 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73   The argument is
e160: 20 61 20 50 61 72 73 65 20 6f 62 6a 65 63 74 20   a Parse object 
e170: 66 6f 72 20 74 68 65 20 63 6f 64 65 20 67 65 6e  for the code gen
e180: 65 72 61 74 6f 72 2e 0a 2a 2f 0a 23 64 65 66 69  erator..*/.#defi
e190: 6e 65 20 43 6f 6e 73 74 46 61 63 74 6f 72 4f 6b  ne ConstFactorOk
e1a0: 28 50 29 20 28 28 50 29 2d 3e 6f 6b 43 6f 6e 73  (P) ((P)->okCons
e1b0: 74 46 61 63 74 6f 72 29 0a 0a 2f 2a 0a 2a 2a 20  tFactor)../*.** 
e1c0: 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20  Possible values 
e1d0: 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 2e 6d  for the sqlite.m
e1e0: 61 67 69 63 20 66 69 65 6c 64 2e 0a 2a 2a 20 54  agic field..** T
e1f0: 68 65 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6f  he numbers are o
e200: 62 74 61 69 6e 65 64 20 61 74 20 72 61 6e 64 6f  btained at rando
e210: 6d 20 61 6e 64 20 68 61 76 65 20 6e 6f 20 73 70  m and have no sp
e220: 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 2c 20 6f  ecial meaning, o
e230: 74 68 65 72 0a 2a 2a 20 74 68 61 6e 20 62 65 69  ther.** than bei
e240: 6e 67 20 64 69 73 74 69 6e 63 74 20 66 72 6f 6d  ng distinct from
e250: 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a 2a 2f   one another..*/
e260: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e270: 4d 41 47 49 43 5f 4f 50 45 4e 20 20 20 20 20 30  MAGIC_OPEN     0
e280: 78 61 30 32 39 61 36 39 37 20 20 2f 2a 20 44 61  xa029a697  /* Da
e290: 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e 20 2a  tabase is open *
e2a0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
e2b0: 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44 20 20 20  _MAGIC_CLOSED   
e2c0: 30 78 39 66 33 63 32 64 33 33 20 20 2f 2a 20 44  0x9f3c2d33  /* D
e2d0: 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73 65  atabase is close
e2e0: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
e2f0: 49 54 45 5f 4d 41 47 49 43 5f 53 49 43 4b 20 20  ITE_MAGIC_SICK  
e300: 20 20 20 30 78 34 62 37 37 31 32 39 30 20 20 2f     0x4b771290  /
e310: 2a 20 45 72 72 6f 72 20 61 6e 64 20 61 77 61 69  * Error and awai
e320: 74 69 6e 67 20 63 6c 6f 73 65 20 2a 2f 0a 23 64  ting close */.#d
e330: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
e340: 49 43 5f 42 55 53 59 20 20 20 20 20 30 78 66 30  IC_BUSY     0xf0
e350: 33 62 37 39 30 36 20 20 2f 2a 20 44 61 74 61 62  3b7906  /* Datab
e360: 61 73 65 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  ase currently in
e370: 20 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20   use */.#define 
e380: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 45 52 52  SQLITE_MAGIC_ERR
e390: 4f 52 20 20 20 20 30 78 62 35 33 35 37 39 33 30  OR    0xb5357930
e3a0: 20 20 2f 2a 20 41 6e 20 53 51 4c 49 54 45 5f 4d    /* An SQLITE_M
e3b0: 49 53 55 53 45 20 65 72 72 6f 72 20 6f 63 63 75  ISUSE error occu
e3c0: 72 72 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rred */.#define 
e3d0: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 5a 4f 4d  SQLITE_MAGIC_ZOM
e3e0: 42 49 45 20 20 20 30 78 36 34 63 66 66 63 37 66  BIE   0x64cffc7f
e3f0: 20 20 2f 2a 20 43 6c 6f 73 65 20 77 69 74 68 20    /* Close with 
e400: 6c 61 73 74 20 73 74 61 74 65 6d 65 6e 74 20 63  last statement c
e410: 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45  lose */../*.** E
e420: 61 63 68 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  ach SQL function
e430: 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61   is defined by a
e440: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
e450: 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73  e following.** s
e460: 74 72 75 63 74 75 72 65 2e 20 20 46 6f 72 20 67  tructure.  For g
e470: 6c 6f 62 61 6c 20 62 75 69 6c 74 2d 69 6e 20 66  lobal built-in f
e480: 75 6e 63 74 69 6f 6e 73 20 28 65 78 3a 20 73 75  unctions (ex: su
e490: 62 73 74 72 28 29 2c 20 6d 61 78 28 29 2c 20 63  bstr(), max(), c
e4a0: 6f 75 6e 74 28 29 29 0a 2a 2a 20 61 20 70 6f 69  ount()).** a poi
e4b0: 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72  nter to this str
e4c0: 75 63 74 75 72 65 20 69 73 20 68 65 6c 64 20 69  ucture is held i
e4d0: 6e 20 74 68 65 20 73 71 6c 69 74 65 33 42 75 69  n the sqlite3Bui
e4e0: 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 20 6f 62  ltinFunctions ob
e4f0: 6a 65 63 74 2e 0a 2a 2a 20 46 6f 72 20 70 65 72  ject..** For per
e500: 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 70 70 6c  -connection appl
e510: 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64 20  ication-defined 
e520: 66 75 6e 63 74 69 6f 6e 73 2c 20 61 20 70 6f 69  functions, a poi
e530: 6e 74 65 72 20 74 6f 20 74 68 69 73 0a 2a 2a 20  nter to this.** 
e540: 73 74 72 75 63 74 75 72 65 20 69 73 20 68 65 6c  structure is hel
e550: 64 20 69 6e 20 74 68 65 20 64 62 2d 3e 61 48 61  d in the db->aHa
e560: 73 68 20 68 61 73 68 20 74 61 62 6c 65 2e 0a 2a  sh hash table..*
e570: 2a 0a 2a 2a 20 54 68 65 20 75 2e 70 48 61 73 68  *.** The u.pHash
e580: 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20 62   field is used b
e590: 79 20 74 68 65 20 67 6c 6f 62 61 6c 20 62 75 69  y the global bui
e5a0: 6c 74 2d 69 6e 73 2e 20 20 54 68 65 20 75 2e 70  lt-ins.  The u.p
e5b0: 44 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 66 69  Destructor.** fi
e5c0: 65 6c 64 20 69 73 20 75 73 65 64 20 62 79 20 70  eld is used by p
e5d0: 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 70  er-connection ap
e5e0: 70 2d 64 65 66 20 66 75 6e 63 74 69 6f 6e 73 2e  p-def functions.
e5f0: 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e 63 44  .*/.struct FuncD
e600: 65 66 20 7b 0a 20 20 69 38 20 6e 41 72 67 3b 20  ef {.  i8 nArg; 
e610: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
e620: 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
e630: 74 73 2e 20 20 2d 31 20 6d 65 61 6e 73 20 75 6e  ts.  -1 means un
e640: 6c 69 6d 69 74 65 64 20 2a 2f 0a 20 20 75 31 36  limited */.  u16
e650: 20 66 75 6e 63 46 6c 61 67 73 3b 20 20 20 20 20   funcFlags;     
e660: 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 62 69 6e    /* Some combin
e670: 61 74 69 6f 6e 20 6f 66 20 53 51 4c 49 54 45 5f  ation of SQLITE_
e680: 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76 6f 69 64  FUNC_* */.  void
e690: 20 2a 70 55 73 65 72 44 61 74 61 3b 20 20 20 20   *pUserData;    
e6a0: 20 2f 2a 20 55 73 65 72 20 64 61 74 61 20 70 61   /* User data pa
e6b0: 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20 46 75 6e  rameter */.  Fun
e6c0: 63 44 65 66 20 2a 70 4e 65 78 74 3b 20 20 20 20  cDef *pNext;    
e6d0: 20 20 2f 2a 20 4e 65 78 74 20 66 75 6e 63 74 69    /* Next functi
e6e0: 6f 6e 20 77 69 74 68 20 73 61 6d 65 20 6e 61 6d  on with same nam
e6f0: 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53  e */.  void (*xS
e700: 46 75 6e 63 29 28 73 71 6c 69 74 65 33 5f 63 6f  Func)(sqlite3_co
e710: 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
e720: 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20 2f 2a 20  e3_value**); /* 
e730: 66 75 6e 63 20 6f 72 20 61 67 67 2d 73 74 65 70  func or agg-step
e740: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 46 69   */.  void (*xFi
e750: 6e 61 6c 69 7a 65 29 28 73 71 6c 69 74 65 33 5f  nalize)(sqlite3_
e760: 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20 20 20 20  context*);      
e770: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
e780: 67 67 20 66 69 6e 61 6c 69 7a 65 72 20 2a 2f 0a  gg finalizer */.
e790: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e    const char *zN
e7a0: 61 6d 65 3b 20 20 20 2f 2a 20 53 51 4c 20 6e 61  ame;   /* SQL na
e7b0: 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  me of the functi
e7c0: 6f 6e 2e 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b  on. */.  union {
e7d0: 0a 20 20 20 20 46 75 6e 63 44 65 66 20 2a 70 48  .    FuncDef *pH
e7e0: 61 73 68 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78  ash;      /* Nex
e7f0: 74 20 77 69 74 68 20 61 20 64 69 66 66 65 72 65  t with a differe
e800: 6e 74 20 6e 61 6d 65 20 62 75 74 20 74 68 65 20  nt name but the 
e810: 73 61 6d 65 20 68 61 73 68 20 2a 2f 0a 20 20 20  same hash */.   
e820: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20   FuncDestructor 
e830: 2a 70 44 65 73 74 72 75 63 74 6f 72 3b 20 20 20  *pDestructor;   
e840: 2f 2a 20 52 65 66 65 72 65 6e 63 65 20 63 6f 75  /* Reference cou
e850: 6e 74 65 64 20 64 65 73 74 72 75 63 74 6f 72 20  nted destructor 
e860: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 7d 20  function */.  } 
e870: 75 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69  u;.};../*.** Thi
e880: 73 20 73 74 72 75 63 74 75 72 65 20 65 6e 63 61  s structure enca
e890: 70 73 75 6c 61 74 65 73 20 61 20 75 73 65 72 2d  psulates a user-
e8a0: 66 75 6e 63 74 69 6f 6e 20 64 65 73 74 72 75 63  function destruc
e8b0: 74 6f 72 20 63 61 6c 6c 62 61 63 6b 20 28 61 73  tor callback (as
e8c0: 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 75  .** configured u
e8d0: 73 69 6e 67 20 63 72 65 61 74 65 5f 66 75 6e 63  sing create_func
e8e0: 74 69 6f 6e 5f 76 32 28 29 29 20 61 6e 64 20 61  tion_v2()) and a
e8f0: 20 72 65 66 65 72 65 6e 63 65 20 63 6f 75 6e 74   reference count
e900: 65 72 2e 20 57 68 65 6e 0a 2a 2a 20 63 72 65 61  er. When.** crea
e910: 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29  te_function_v2()
e920: 20 69 73 20 63 61 6c 6c 65 64 20 74 6f 20 63 72   is called to cr
e930: 65 61 74 65 20 61 20 66 75 6e 63 74 69 6f 6e 20  eate a function 
e940: 77 69 74 68 20 61 20 64 65 73 74 72 75 63 74 6f  with a destructo
e950: 72 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 6f  r,.** a single o
e960: 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74 79  bject of this ty
e970: 70 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 2e  pe is allocated.
e980: 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 2e   FuncDestructor.
e990: 6e 52 65 66 20 69 73 20 73 65 74 20 74 6f 0a 2a  nRef is set to.*
e9a0: 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  * the number of 
e9b0: 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20  FuncDef objects 
e9c0: 63 72 65 61 74 65 64 20 28 65 69 74 68 65 72 20  created (either 
e9d0: 31 20 6f 72 20 33 2c 20 64 65 70 65 6e 64 69 6e  1 or 3, dependin
e9e0: 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20  g on whether.** 
e9f0: 6f 72 20 6e 6f 74 20 74 68 65 20 73 70 65 63 69  or not the speci
ea00: 66 69 65 64 20 65 6e 63 6f 64 69 6e 67 20 69 73  fied encoding is
ea10: 20 53 51 4c 49 54 45 5f 41 4e 59 29 2e 20 54 68   SQLITE_ANY). Th
ea20: 65 20 46 75 6e 63 44 65 66 2e 70 44 65 73 74 72  e FuncDef.pDestr
ea30: 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d 62 65 72 20  uctor.** member 
ea40: 6f 66 20 65 61 63 68 20 6f 66 20 74 68 65 20 6e  of each of the n
ea50: 65 77 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63  ew FuncDef objec
ea60: 74 73 20 69 73 20 73 65 74 20 74 6f 20 70 6f 69  ts is set to poi
ea70: 6e 74 20 74 6f 20 74 68 65 20 61 6c 6c 6f 63 61  nt to the alloca
ea80: 74 65 64 0a 2a 2a 20 46 75 6e 63 44 65 73 74 72  ted.** FuncDestr
ea90: 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  uctor..**.** The
eaa0: 72 65 61 66 74 65 72 2c 20 77 68 65 6e 20 6f 6e  reafter, when on
eab0: 65 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66  e of the FuncDef
eac0: 20 6f 62 6a 65 63 74 73 20 69 73 20 64 65 6c 65   objects is dele
ead0: 74 65 64 2c 20 74 68 65 20 72 65 66 65 72 65 6e  ted, the referen
eae0: 63 65 0a 2a 2a 20 63 6f 75 6e 74 20 6f 6e 20 74  ce.** count on t
eaf0: 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20 64 65  his object is de
eb00: 63 72 65 6d 65 6e 74 65 64 2e 20 57 68 65 6e 20  cremented. When 
eb10: 69 74 20 72 65 61 63 68 65 73 20 30 2c 20 74 68  it reaches 0, th
eb20: 65 20 64 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20  e destructor.** 
eb30: 69 73 20 69 6e 76 6f 6b 65 64 20 61 6e 64 20 74  is invoked and t
eb40: 68 65 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  he FuncDestructo
eb50: 72 20 73 74 72 75 63 74 75 72 65 20 66 72 65 65  r structure free
eb60: 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75 6e  d..*/.struct Fun
eb70: 63 44 65 73 74 72 75 63 74 6f 72 20 7b 0a 20 20  cDestructor {.  
eb80: 69 6e 74 20 6e 52 65 66 3b 0a 20 20 76 6f 69 64  int nRef;.  void
eb90: 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69   (*xDestroy)(voi
eba0: 64 20 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70 55  d *);.  void *pU
ebb0: 73 65 72 44 61 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a  serData;.};../*.
ebc0: 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75  ** Possible valu
ebd0: 65 73 20 66 6f 72 20 46 75 6e 63 44 65 66 2e 66  es for FuncDef.f
ebe0: 6c 61 67 73 2e 20 20 4e 6f 74 65 20 74 68 61 74  lags.  Note that
ebf0: 20 74 68 65 20 5f 4c 45 4e 47 54 48 20 61 6e 64   the _LENGTH and
ec00: 20 5f 54 59 50 45 4f 46 0a 2a 2a 20 76 61 6c 75   _TYPEOF.** valu
ec10: 65 73 20 6d 75 73 74 20 63 6f 72 72 65 73 70 6f  es must correspo
ec20: 6e 64 20 74 6f 20 4f 50 46 4c 41 47 5f 4c 45 4e  nd to OPFLAG_LEN
ec30: 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46 4c 41  GTHARG and OPFLA
ec40: 47 5f 54 59 50 45 4f 46 41 52 47 2e 20 20 41 6e  G_TYPEOFARG.  An
ec50: 64 0a 2a 2a 20 53 51 4c 49 54 45 5f 46 55 4e 43  d.** SQLITE_FUNC
ec60: 5f 43 4f 4e 53 54 41 4e 54 20 6d 75 73 74 20 62  _CONSTANT must b
ec70: 65 20 74 68 65 20 73 61 6d 65 20 61 73 20 53 51  e the same as SQ
ec80: 4c 49 54 45 5f 44 45 54 45 52 4d 49 4e 49 53 54  LITE_DETERMINIST
ec90: 49 43 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61 72  IC.  There.** ar
eca0: 65 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  e assert() state
ecb0: 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 63 6f 64  ments in the cod
ecc0: 65 20 74 6f 20 76 65 72 69 66 79 20 74 68 69 73  e to verify this
ecd0: 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f  ..**.** Value co
ece0: 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72  nstraints (enfor
ecf0: 63 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29  ced via assert()
ed00: 29 3a 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45  ):.**     SQLITE
ed10: 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 20 20 20 20  _FUNC_MINMAX    
ed20: 3d 3d 20 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67  ==  NC_MinMaxAgg
ed30: 20 20 20 20 20 20 3d 3d 20 53 46 5f 4d 69 6e 4d        == SF_MinM
ed40: 61 78 41 67 67 0a 2a 2a 20 20 20 20 20 53 51 4c  axAgg.**     SQL
ed50: 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 20  ITE_FUNC_LENGTH 
ed60: 20 20 20 3d 3d 20 20 4f 50 46 4c 41 47 5f 4c 45     ==  OPFLAG_LE
ed70: 4e 47 54 48 41 52 47 0a 2a 2a 20 20 20 20 20 53  NGTHARG.**     S
ed80: 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f  QLITE_FUNC_TYPEO
ed90: 46 20 20 20 20 3d 3d 20 20 4f 50 46 4c 41 47 5f  F    ==  OPFLAG_
eda0: 54 59 50 45 4f 46 41 52 47 0a 2a 2a 20 20 20 20  TYPEOFARG.**    
edb0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
edc0: 53 54 41 4e 54 20 20 3d 3d 20 20 53 51 4c 49 54  STANT  ==  SQLIT
edd0: 45 5f 44 45 54 45 52 4d 49 4e 49 53 54 49 43 20  E_DETERMINISTIC 
ede0: 66 72 6f 6d 20 74 68 65 20 41 50 49 0a 2a 2a 20  from the API.** 
edf0: 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f      SQLITE_FUNC_
ee00: 45 4e 43 4d 41 53 4b 20 20 20 64 65 70 65 6e 64  ENCMASK   depend
ee10: 73 20 6f 6e 20 53 51 4c 49 54 45 5f 55 54 46 2a  s on SQLITE_UTF*
ee20: 20 6d 61 63 72 6f 73 20 69 6e 20 74 68 65 20 41   macros in the A
ee30: 50 49 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  PI.*/.#define SQ
ee40: 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43 4d 41 53  LITE_FUNC_ENCMAS
ee50: 4b 20 20 30 78 30 30 30 33 20 2f 2a 20 53 51 4c  K  0x0003 /* SQL
ee60: 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45  ITE_UTF8, SQLITE
ee70: 5f 55 54 46 31 36 42 45 20 6f 72 20 55 54 46 31  _UTF16BE or UTF1
ee80: 36 4c 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  6LE */.#define S
ee90: 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 49 4b 45 20  QLITE_FUNC_LIKE 
eea0: 20 20 20 20 30 78 30 30 30 34 20 2f 2a 20 43 61      0x0004 /* Ca
eeb0: 6e 64 69 64 61 74 65 20 66 6f 72 20 74 68 65 20  ndidate for the 
eec0: 4c 49 4b 45 20 6f 70 74 69 6d 69 7a 61 74 69 6f  LIKE optimizatio
eed0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
eee0: 49 54 45 5f 46 55 4e 43 5f 43 41 53 45 20 20 20  ITE_FUNC_CASE   
eef0: 20 20 30 78 30 30 30 38 20 2f 2a 20 43 61 73 65    0x0008 /* Case
ef00: 2d 73 65 6e 73 69 74 69 76 65 20 4c 49 4b 45 2d  -sensitive LIKE-
ef10: 74 79 70 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  type function */
ef20: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ef30: 46 55 4e 43 5f 45 50 48 45 4d 20 20 20 20 30 78  FUNC_EPHEM    0x
ef40: 30 30 31 30 20 2f 2a 20 45 70 68 65 6d 65 72 61  0010 /* Ephemera
ef50: 6c 2e 20 20 44 65 6c 65 74 65 20 77 69 74 68 20  l.  Delete with 
ef60: 56 44 42 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  VDBE */.#define 
ef70: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
ef80: 43 4f 4c 4c 20 30 78 30 30 32 30 20 2f 2a 20 73  COLL 0x0020 /* s
ef90: 71 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c  qlite3GetFuncCol
efa0: 6c 53 65 71 28 29 20 6d 69 67 68 74 20 62 65 20  lSeq() might be 
efb0: 63 61 6c 6c 65 64 2a 2f 0a 23 64 65 66 69 6e 65  called*/.#define
efc0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e   SQLITE_FUNC_LEN
efd0: 47 54 48 20 20 20 30 78 30 30 34 30 20 2f 2a 20  GTH   0x0040 /* 
efe0: 42 75 69 6c 74 2d 69 6e 20 6c 65 6e 67 74 68 28  Built-in length(
eff0: 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
f000: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
f010: 43 5f 54 59 50 45 4f 46 20 20 20 30 78 30 30 38  C_TYPEOF   0x008
f020: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 74 79  0 /* Built-in ty
f030: 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 20  peof() function 
f040: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
f050: 45 5f 46 55 4e 43 5f 43 4f 55 4e 54 20 20 20 20  E_FUNC_COUNT    
f060: 30 78 30 31 30 30 20 2f 2a 20 42 75 69 6c 74 2d  0x0100 /* Built-
f070: 69 6e 20 63 6f 75 6e 74 28 2a 29 20 61 67 67 72  in count(*) aggr
f080: 65 67 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65  egate */.#define
f090: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 41   SQLITE_FUNC_COA
f0a0: 4c 45 53 43 45 20 30 78 30 32 30 30 20 2f 2a 20  LESCE 0x0200 /* 
f0b0: 42 75 69 6c 74 2d 69 6e 20 63 6f 61 6c 65 73 63  Built-in coalesc
f0c0: 65 28 29 20 6f 72 20 69 66 6e 75 6c 6c 28 29 20  e() or ifnull() 
f0d0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
f0e0: 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b 45 4c 59 20  E_FUNC_UNLIKELY 
f0f0: 30 78 30 34 30 30 20 2f 2a 20 42 75 69 6c 74 2d  0x0400 /* Built-
f100: 69 6e 20 75 6e 6c 69 6b 65 6c 79 28 29 20 66 75  in unlikely() fu
f110: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
f120: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  e SQLITE_FUNC_CO
f130: 4e 53 54 41 4e 54 20 30 78 30 38 30 30 20 2f 2a  NSTANT 0x0800 /*
f140: 20 43 6f 6e 73 74 61 6e 74 20 69 6e 70 75 74 73   Constant inputs
f150: 20 67 69 76 65 20 61 20 63 6f 6e 73 74 61 6e 74   give a constant
f160: 20 6f 75 74 70 75 74 20 2a 2f 0a 23 64 65 66 69   output */.#defi
f170: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d  ne SQLITE_FUNC_M
f180: 49 4e 4d 41 58 20 20 20 30 78 31 30 30 30 20 2f  INMAX   0x1000 /
f190: 2a 20 54 72 75 65 20 66 6f 72 20 6d 69 6e 28 29  * True for min()
f1a0: 20 61 6e 64 20 6d 61 78 28 29 20 61 67 67 72 65   and max() aggre
f1b0: 67 61 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  gates */.#define
f1c0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f   SQLITE_FUNC_SLO
f1d0: 43 48 4e 47 20 20 30 78 32 30 30 30 20 2f 2a 20  CHNG  0x2000 /* 
f1e0: 22 53 6c 6f 77 20 43 68 61 6e 67 65 22 2e 20 56  "Slow Change". V
f1f0: 61 6c 75 65 20 63 6f 6e 73 74 61 6e 74 20 64 75  alue constant du
f200: 72 69 6e 67 20 61 0a 20 20 20 20 20 20 20 20 20  ring a.         
f210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f220: 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 73 69             ** si
f230: 6e 67 6c 65 20 71 75 65 72 79 20 2d 20 6d 69 67  ngle query - mig
f240: 68 74 20 63 68 61 6e 67 65 20 6f 76 65 72 20 74  ht change over t
f250: 69 6d 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ime */.#define S
f260: 51 4c 49 54 45 5f 46 55 4e 43 5f 41 46 46 49 4e  QLITE_FUNC_AFFIN
f270: 49 54 59 20 30 78 34 30 30 30 20 2f 2a 20 42 75  ITY 0x4000 /* Bu
f280: 69 6c 74 2d 69 6e 20 61 66 66 69 6e 69 74 79 28  ilt-in affinity(
f290: 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 0a 2f  ) function */../
f2a0: 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
f2b0: 6e 67 20 74 68 72 65 65 20 6d 61 63 72 6f 73 2c  ng three macros,
f2c0: 20 46 55 4e 43 54 49 4f 4e 28 29 2c 20 4c 49 4b   FUNCTION(), LIK
f2d0: 45 46 55 4e 43 28 29 20 61 6e 64 20 41 47 47 52  EFUNC() and AGGR
f2e0: 45 47 41 54 45 28 29 20 61 72 65 0a 2a 2a 20 75  EGATE() are.** u
f2f0: 73 65 64 20 74 6f 20 63 72 65 61 74 65 20 74 68  sed to create th
f300: 65 20 69 6e 69 74 69 61 6c 69 7a 65 72 73 20 66  e initializers f
f310: 6f 72 20 74 68 65 20 46 75 6e 63 44 65 66 20 73  or the FuncDef s
f320: 74 72 75 63 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a  tructures..**.**
f330: 20 20 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d     FUNCTION(zNam
f340: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
f350: 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20  NC, xFunc).**   
f360: 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65    Used to create
f370: 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74 69   a scalar functi
f380: 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66  on definition of
f390: 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d   a function zNam
f3a0: 65 0a 2a 2a 20 20 20 20 20 69 6d 70 6c 65 6d 65  e.**     impleme
f3b0: 6e 74 65 64 20 62 79 20 43 20 66 75 6e 63 74 69  nted by C functi
f3c0: 6f 6e 20 78 46 75 6e 63 20 74 68 61 74 20 61 63  on xFunc that ac
f3d0: 63 65 70 74 73 20 6e 41 72 67 20 61 72 67 75 6d  cepts nArg argum
f3e0: 65 6e 74 73 2e 20 54 68 65 0a 2a 2a 20 20 20 20  ents. The.**    
f3f0: 20 76 61 6c 75 65 20 70 61 73 73 65 64 20 61 73   value passed as
f400: 20 69 41 72 67 20 69 73 20 63 61 73 74 20 74 6f   iArg is cast to
f410: 20 61 20 28 76 6f 69 64 2a 29 20 61 6e 64 20 6d   a (void*) and m
f420: 61 64 65 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a  ade available.**
f430: 20 20 20 20 20 61 73 20 74 68 65 20 75 73 65 72       as the user
f440: 2d 64 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75  -data (sqlite3_u
f450: 73 65 72 5f 64 61 74 61 28 29 29 20 66 6f 72 20  ser_data()) for 
f460: 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 49 66  the function. If
f470: 0a 2a 2a 20 20 20 20 20 61 72 67 75 6d 65 6e 74  .**     argument
f480: 20 62 4e 43 20 69 73 20 74 72 75 65 2c 20 74 68   bNC is true, th
f490: 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55  en the SQLITE_FU
f4a0: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 66 6c 61 67  NC_NEEDCOLL flag
f4b0: 20 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20   is set..**.**  
f4c0: 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65   VFUNCTION(zName
f4d0: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
f4e0: 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20  C, xFunc).**    
f4f0: 20 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65   Like FUNCTION e
f500: 78 63 65 70 74 20 69 74 20 6f 6d 69 74 73 20 74  xcept it omits t
f510: 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  he SQLITE_FUNC_C
f520: 4f 4e 53 54 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a  ONSTANT flag..**
f530: 0a 2a 2a 20 20 20 44 46 55 4e 43 54 49 4f 4e 28  .**   DFUNCTION(
f540: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
f550: 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a 2a  g, bNC, xFunc).*
f560: 2a 20 20 20 20 20 4c 69 6b 65 20 46 55 4e 43 54  *     Like FUNCT
f570: 49 4f 4e 20 65 78 63 65 70 74 20 69 74 20 6f 6d  ION except it om
f580: 69 74 73 20 74 68 65 20 53 51 4c 49 54 45 5f 46  its the SQLITE_F
f590: 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61  UNC_CONSTANT fla
f5a0: 67 20 61 6e 64 0a 2a 2a 20 20 20 20 20 61 64 64  g and.**     add
f5b0: 73 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e  s the SQLITE_FUN
f5c0: 43 5f 53 4c 4f 43 48 4e 47 20 66 6c 61 67 2e 20  C_SLOCHNG flag. 
f5d0: 20 55 73 65 64 20 66 6f 72 20 64 61 74 65 20 26   Used for date &
f5e0: 20 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e 73 0a   time functions.
f5f0: 2a 2a 20 20 20 20 20 61 6e 64 20 66 75 6e 63 74  **     and funct
f600: 69 6f 6e 73 20 6c 69 6b 65 20 73 71 6c 69 74 65  ions like sqlite
f610: 5f 76 65 72 73 69 6f 6e 28 29 20 74 68 61 74 20  _version() that 
f620: 63 61 6e 20 63 68 61 6e 67 65 2c 20 62 75 74 20  can change, but 
f630: 6e 6f 74 20 64 75 72 69 6e 67 0a 2a 2a 20 20 20  not during.**   
f640: 20 20 61 20 73 69 6e 67 6c 65 20 71 75 65 72 79    a single query
f650: 2e 0a 2a 2a 0a 2a 2a 20 20 20 41 47 47 52 45 47  ..**.**   AGGREG
f660: 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ATE(zName, nArg,
f670: 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 53 74 65   iArg, bNC, xSte
f680: 70 2c 20 78 46 69 6e 61 6c 29 0a 2a 2a 20 20 20  p, xFinal).**   
f690: 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65    Used to create
f6a0: 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 66 75   an aggregate fu
f6b0: 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f  nction definitio
f6c0: 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79  n implemented by
f6d0: 0a 2a 2a 20 20 20 20 20 74 68 65 20 43 20 66 75  .**     the C fu
f6e0: 6e 63 74 69 6f 6e 73 20 78 53 74 65 70 20 61 6e  nctions xStep an
f6f0: 64 20 78 46 69 6e 61 6c 2e 20 54 68 65 20 66 69  d xFinal. The fi
f700: 72 73 74 20 66 6f 75 72 20 70 61 72 61 6d 65 74  rst four paramet
f710: 65 72 73 0a 2a 2a 20 20 20 20 20 61 72 65 20 69  ers.**     are i
f720: 6e 74 65 72 70 72 65 74 65 64 20 69 6e 20 74 68  nterpreted in th
f730: 65 20 73 61 6d 65 20 77 61 79 20 61 73 20 74 68  e same way as th
f740: 65 20 66 69 72 73 74 20 34 20 70 61 72 61 6d 65  e first 4 parame
f750: 74 65 72 73 20 74 6f 0a 2a 2a 20 20 20 20 20 46  ters to.**     F
f760: 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a  UNCTION()..**.**
f770: 20 20 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d     LIKEFUNC(zNam
f780: 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 66  e, nArg, pArg, f
f790: 6c 61 67 73 29 0a 2a 2a 20 20 20 20 20 55 73 65  lags).**     Use
f7a0: 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 73 63  d to create a sc
f7b0: 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65  alar function de
f7c0: 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75  finition of a fu
f7d0: 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20  nction zName.** 
f7e0: 20 20 20 20 74 68 61 74 20 61 63 63 65 70 74 73      that accepts
f7f0: 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73 20   nArg arguments 
f800: 61 6e 64 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74  and is implement
f810: 65 64 20 62 79 20 61 20 63 61 6c 6c 20 74 6f 20  ed by a call to 
f820: 43 0a 2a 2a 20 20 20 20 20 66 75 6e 63 74 69 6f  C.**     functio
f830: 6e 20 6c 69 6b 65 46 75 6e 63 2e 20 41 72 67 75  n likeFunc. Argu
f840: 6d 65 6e 74 20 70 41 72 67 20 69 73 20 63 61 73  ment pArg is cas
f850: 74 20 74 6f 20 61 20 28 76 6f 69 64 20 2a 29 20  t to a (void *) 
f860: 61 6e 64 20 6d 61 64 65 0a 2a 2a 20 20 20 20 20  and made.**     
f870: 61 76 61 69 6c 61 62 6c 65 20 61 73 20 74 68 65  available as the
f880: 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 72 2d 64   function user-d
f890: 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65  ata (sqlite3_use
f8a0: 72 5f 64 61 74 61 28 29 29 2e 20 54 68 65 0a 2a  r_data()). The.*
f8b0: 2a 20 20 20 20 20 46 75 6e 63 44 65 66 2e 66 6c  *     FuncDef.fl
f8c0: 61 67 73 20 76 61 72 69 61 62 6c 65 20 69 73 20  ags variable is 
f8d0: 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65  set to the value
f8e0: 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20 66   passed as the f
f8f0: 6c 61 67 73 0a 2a 2a 20 20 20 20 20 70 61 72 61  lags.**     para
f900: 6d 65 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  meter..*/.#defin
f910: 65 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65  e FUNCTION(zName
f920: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
f930: 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e  C, xFunc) \.  {n
f940: 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43  Arg, SQLITE_FUNC
f950: 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45  _CONSTANT|SQLITE
f960: 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54  _UTF8|(bNC*SQLIT
f970: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
f980: 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e  , \.   SQLITE_IN
f990: 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20  T_TO_PTR(iArg), 
f9a0: 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e  0, xFunc, 0, #zN
f9b0: 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69  ame, {0} }.#defi
f9c0: 6e 65 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61  ne VFUNCTION(zNa
f9d0: 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
f9e0: 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20  bNC, xFunc) \.  
f9f0: 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54  {nArg, SQLITE_UT
fa00: 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46  F8|(bNC*SQLITE_F
fa10: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c  UNC_NEEDCOLL), \
fa20: 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  .   SQLITE_INT_T
fa30: 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20  O_PTR(iArg), 0, 
fa40: 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65  xFunc, 0, #zName
fa50: 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20  , {0} }.#define 
fa60: 44 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c  DFUNCTION(zName,
fa70: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
fa80: 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41  , xFunc) \.  {nA
fa90: 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  rg, SQLITE_FUNC_
faa0: 53 4c 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55  SLOCHNG|SQLITE_U
fab0: 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f  TF8|(bNC*SQLITE_
fac0: 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20  FUNC_NEEDCOLL), 
fad0: 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f  \.   SQLITE_INT_
fae0: 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c  TO_PTR(iArg), 0,
faf0: 20 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d   xFunc, 0, #zNam
fb00: 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65  e, {0} }.#define
fb10: 20 46 55 4e 43 54 49 4f 4e 32 28 7a 4e 61 6d 65   FUNCTION2(zName
fb20: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
fb30: 43 2c 20 78 46 75 6e 63 2c 20 65 78 74 72 61 46  C, xFunc, extraF
fb40: 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  lags) \.  {nArg,
fb50: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
fb60: 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38  TANT|SQLITE_UTF8
fb70: 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e  |(bNC*SQLITE_FUN
fb80: 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72  C_NEEDCOLL)|extr
fb90: 61 46 6c 61 67 73 2c 5c 0a 20 20 20 53 51 4c 49  aFlags,\.   SQLI
fba0: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41  TE_INT_TO_PTR(iA
fbb0: 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30  rg), 0, xFunc, 0
fbc0: 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a  , #zName, {0} }.
fbd0: 23 64 65 66 69 6e 65 20 53 54 52 5f 46 55 4e 43  #define STR_FUNC
fbe0: 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
fbf0: 2c 20 70 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , pArg, bNC, xFu
fc00: 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
fc10: 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48  QLITE_FUNC_SLOCH
fc20: 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  NG|SQLITE_UTF8|(
fc30: 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  bNC*SQLITE_FUNC_
fc40: 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20  NEEDCOLL), \.   
fc50: 70 41 72 67 2c 20 30 2c 20 78 46 75 6e 63 2c 20  pArg, 0, xFunc, 
fc60: 30 2c 20 23 7a 4e 61 6d 65 2c 20 7d 0a 23 64 65  0, #zName, }.#de
fc70: 66 69 6e 65 20 4c 49 4b 45 46 55 4e 43 28 7a 4e  fine LIKEFUNC(zN
fc80: 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20  ame, nArg, arg, 
fc90: 66 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67  flags) \.  {nArg
fca0: 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  , SQLITE_FUNC_CO
fcb0: 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54  NSTANT|SQLITE_UT
fcc0: 46 38 7c 66 6c 61 67 73 2c 20 5c 0a 20 20 20 28  F8|flags, \.   (
fcd0: 76 6f 69 64 20 2a 29 61 72 67 2c 20 30 2c 20 6c  void *)arg, 0, l
fce0: 69 6b 65 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61  ikeFunc, 0, #zNa
fcf0: 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e  me, {0} }.#defin
fd00: 65 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d  e AGGREGATE(zNam
fd10: 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63  e, nArg, arg, nc
fd20: 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29  , xStep, xFinal)
fd30: 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
fd40: 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49  TE_UTF8|(nc*SQLI
fd50: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
fd60: 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49  ), \.   SQLITE_I
fd70: 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c 20  NT_TO_PTR(arg), 
fd80: 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c 2c  0, xStep,xFinal,
fd90: 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 23 64 65  #zName, {0}}.#de
fda0: 66 69 6e 65 20 41 47 47 52 45 47 41 54 45 32 28  fine AGGREGATE2(
fdb0: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61 72 67  zName, nArg, arg
fdc0: 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78 46 69  , nc, xStep, xFi
fdd0: 6e 61 6c 2c 20 65 78 74 72 61 46 6c 61 67 73 29  nal, extraFlags)
fde0: 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
fdf0: 54 45 5f 55 54 46 38 7c 28 6e 63 2a 53 51 4c 49  TE_UTF8|(nc*SQLI
fe00: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
fe10: 29 7c 65 78 74 72 61 46 6c 61 67 73 2c 20 5c 0a  )|extraFlags, \.
fe20: 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
fe30: 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20 78 53  _PTR(arg), 0, xS
fe40: 74 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d  tep,xFinal,#zNam
fe50: 65 2c 20 7b 30 7d 7d 0a 0a 2f 2a 0a 2a 2a 20 41  e, {0}}../*.** A
fe60: 6c 6c 20 63 75 72 72 65 6e 74 20 73 61 76 65 70  ll current savep
fe70: 6f 69 6e 74 73 20 61 72 65 20 73 74 6f 72 65 64  oints are stored
fe80: 20 69 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73   in a linked lis
fe90: 74 20 73 74 61 72 74 69 6e 67 20 61 74 0a 2a 2a  t starting at.**
fea0: 20 73 71 6c 69 74 65 33 2e 70 53 61 76 65 70 6f   sqlite3.pSavepo
feb0: 69 6e 74 2e 20 54 68 65 20 66 69 72 73 74 20 65  int. The first e
fec0: 6c 65 6d 65 6e 74 20 69 6e 20 74 68 65 20 6c 69  lement in the li
fed0: 73 74 20 69 73 20 74 68 65 20 6d 6f 73 74 20 72  st is the most r
fee0: 65 63 65 6e 74 6c 79 0a 2a 2a 20 6f 70 65 6e 65  ecently.** opene
fef0: 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 53 61 76  d savepoint. Sav
ff00: 65 70 6f 69 6e 74 73 20 61 72 65 20 61 64 64 65  epoints are adde
ff10: 64 20 74 6f 20 74 68 65 20 6c 69 73 74 20 62 79  d to the list by
ff20: 20 74 68 65 20 76 64 62 65 0a 2a 2a 20 4f 50 5f   the vdbe.** OP_
ff30: 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72 75  Savepoint instru
ff40: 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ction..*/.struct
ff50: 20 53 61 76 65 70 6f 69 6e 74 20 7b 0a 20 20 63   Savepoint {.  c
ff60: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
ff70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ff80: 20 20 20 2f 2a 20 53 61 76 65 70 6f 69 6e 74 20     /* Savepoint 
ff90: 6e 61 6d 65 20 28 6e 75 6c 2d 74 65 72 6d 69 6e  name (nul-termin
ffa0: 61 74 65 64 29 20 2a 2f 0a 20 20 69 36 34 20 6e  ated) */.  i64 n
ffb0: 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20  DeferredCons;   
ffc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ffd0: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64 65 66 65  * Number of defe
ffe0: 72 72 65 64 20 66 6b 20 76 69 6f 6c 61 74 69 6f  rred fk violatio
fff0: 6e 73 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66  ns */.  i64 nDef
10000 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20  erredImmCons;   
10010 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
10020 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72 65  umber of deferre
10030 64 20 69 6d 6d 20 66 6b 2e 20 2a 2f 0a 20 20 53  d imm fk. */.  S
10040 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65 78 74 3b  avepoint *pNext;
10050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10060 20 20 20 2f 2a 20 50 61 72 65 6e 74 20 73 61 76     /* Parent sav
10070 65 70 6f 69 6e 74 20 28 69 66 20 61 6e 79 29 20  epoint (if any) 
10080 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
10090 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 75   following are u
100a0 73 65 64 20 61 73 20 74 68 65 20 73 65 63 6f 6e  sed as the secon
100b0 64 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 73  d parameter to s
100c0 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74 28  qlite3Savepoint(
100d0 29 2c 0a 2a 2a 20 61 6e 64 20 61 73 20 74 68 65  ),.** and as the
100e0 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20   P1 argument to 
100f0 74 68 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74  the OP_Savepoint
10100 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
10110 0a 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49  .#define SAVEPOI
10120 4e 54 5f 42 45 47 49 4e 20 20 20 20 20 20 30 0a  NT_BEGIN      0.
10130 23 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e  #define SAVEPOIN
10140 54 5f 52 45 4c 45 41 53 45 20 20 20 20 31 0a 23  T_RELEASE    1.#
10150 64 65 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54  define SAVEPOINT
10160 5f 52 4f 4c 4c 42 41 43 4b 20 20 20 32 0a 0a 0a  _ROLLBACK   2...
10170 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 69 74  /*.** Each SQLit
10180 65 20 6d 6f 64 75 6c 65 20 28 76 69 72 74 75 61  e module (virtua
10190 6c 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69  l table definiti
101a0 6f 6e 29 20 69 73 20 64 65 66 69 6e 65 64 20 62  on) is defined b
101b0 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65  y an.** instance
101c0 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
101d0 67 20 73 74 72 75 63 74 75 72 65 2c 20 73 74 6f  g structure, sto
101e0 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74  red in the sqlit
101f0 65 33 2e 61 4d 6f 64 75 6c 65 0a 2a 2a 20 68 61  e3.aModule.** ha
10200 73 68 20 74 61 62 6c 65 2e 0a 2a 2f 0a 73 74 72  sh table..*/.str
10210 75 63 74 20 4d 6f 64 75 6c 65 20 7b 0a 20 20 63  uct Module {.  c
10220 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64  onst sqlite3_mod
10230 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 20 20 20  ule *pModule;   
10240 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20      /* Callback 
10250 70 6f 69 6e 74 65 72 73 20 2a 2f 0a 20 20 63 6f  pointers */.  co
10260 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  nst char *zName;
10270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10280 20 20 20 2f 2a 20 4e 61 6d 65 20 70 61 73 73 65     /* Name passe
10290 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f 64 75  d to create_modu
102a0 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  le() */.  void *
102b0 70 41 75 78 3b 20 20 20 20 20 20 20 20 20 20 20  pAux;           
102c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
102d0 2a 20 70 41 75 78 20 70 61 73 73 65 64 20 74 6f  * pAux passed to
102e0 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29   create_module()
102f0 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 44 65   */.  void (*xDe
10300 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b 20  stroy)(void *); 
10310 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f             /* Mo
10320 64 75 6c 65 20 64 65 73 74 72 75 63 74 6f 72 20  dule destructor 
10330 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 54 61  function */.  Ta
10340 62 6c 65 20 2a 70 45 70 6f 54 61 62 3b 20 20 20  ble *pEpoTab;   
10350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10360 20 20 20 2f 2a 20 45 70 6f 6e 79 6d 6f 75 73 20     /* Eponymous 
10370 74 61 62 6c 65 20 66 6f 72 20 74 68 69 73 20 6d  table for this m
10380 6f 64 75 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  odule */.};../*.
10390 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  ** information a
103a0 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d 6e  bout each column
103b0 20 6f 66 20 61 6e 20 53 51 4c 20 74 61 62 6c 65   of an SQL table
103c0 20 69 73 20 68 65 6c 64 20 69 6e 20 61 6e 20 69   is held in an i
103d0 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68  nstance.** of th
103e0 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f  is structure..*/
103f0 0a 73 74 72 75 63 74 20 43 6f 6c 75 6d 6e 20 7b  .struct Column {
10400 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
10410 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
10420 68 69 73 20 63 6f 6c 75 6d 6e 2c 20 5c 30 30 30  his column, \000
10430 2c 20 74 68 65 6e 20 74 68 65 20 74 79 70 65 20  , then the type 
10440 2a 2f 0a 20 20 45 78 70 72 20 2a 70 44 66 6c 74  */.  Expr *pDflt
10450 3b 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74  ;     /* Default
10460 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63   value of this c
10470 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 63 68 61 72 20  olumn */.  char 
10480 2a 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 43  *zColl;     /* C
10490 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
104a0 65 2e 20 20 49 66 20 4e 55 4c 4c 2c 20 75 73 65  e.  If NULL, use
104b0 20 74 68 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a   the default */.
104c0 20 20 75 38 20 6e 6f 74 4e 75 6c 6c 3b 20 20 20    u8 notNull;   
104d0 20 20 20 2f 2a 20 41 6e 20 4f 45 5f 20 63 6f 64     /* An OE_ cod
104e0 65 20 66 6f 72 20 68 61 6e 64 6c 69 6e 67 20 61  e for handling a
104f0 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72   NOT NULL constr
10500 61 69 6e 74 20 2a 2f 0a 20 20 63 68 61 72 20 61  aint */.  char a
10510 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20 4f 6e  ffinity;   /* On
10520 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f  e of the SQLITE_
10530 41 46 46 5f 2e 2e 2e 20 76 61 6c 75 65 73 20 2a  AFF_... values *
10540 2f 0a 20 20 75 38 20 73 7a 45 73 74 3b 20 20 20  /.  u8 szEst;   
10550 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65       /* Estimate
10560 64 20 73 69 7a 65 20 6f 66 20 76 61 6c 75 65 20  d size of value 
10570 69 6e 20 74 68 69 73 20 63 6f 6c 75 6d 6e 2e 20  in this column. 
10580 73 69 7a 65 6f 66 28 49 4e 54 29 3d 3d 31 20 2a  sizeof(INT)==1 *
10590 2f 0a 20 20 75 38 20 63 6f 6c 46 6c 61 67 73 3b  /.  u8 colFlags;
105a0 20 20 20 20 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20       /* Boolean 
105b0 70 72 6f 70 65 72 74 69 65 73 2e 20 20 53 65 65  properties.  See
105c0 20 43 4f 4c 46 4c 41 47 5f 20 64 65 66 69 6e 65   COLFLAG_ define
105d0 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f  s below */.};../
105e0 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
105f0 20 66 6f 72 20 43 6f 6c 75 6d 6e 2e 63 6f 6c 46   for Column.colF
10600 6c 61 67 73 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65  lags:.*/.#define
10610 20 43 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b 45 59   COLFLAG_PRIMKEY
10620 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20 43    0x0001    /* C
10630 6f 6c 75 6d 6e 20 69 73 20 70 61 72 74 20 6f 66  olumn is part of
10640 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79   the primary key
10650 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46   */.#define COLF
10660 4c 41 47 5f 48 49 44 44 45 4e 20 20 20 30 78 30  LAG_HIDDEN   0x0
10670 30 30 32 20 20 20 20 2f 2a 20 41 20 68 69 64 64  002    /* A hidd
10680 65 6e 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 76  en column in a v
10690 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a  irtual table */.
106a0 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f  #define COLFLAG_
106b0 48 41 53 54 59 50 45 20 20 30 78 30 30 30 34 20  HASTYPE  0x0004 
106c0 20 20 20 2f 2a 20 54 79 70 65 20 6e 61 6d 65 20     /* Type name 
106d0 66 6f 6c 6c 6f 77 73 20 63 6f 6c 75 6d 6e 20 6e  follows column n
106e0 61 6d 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20  ame */../*.** A 
106f0 22 43 6f 6c 6c 61 74 69 6e 67 20 53 65 71 75 65  "Collating Seque
10700 6e 63 65 22 20 69 73 20 64 65 66 69 6e 65 64 20  nce" is defined 
10710 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  by an instance o
10720 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a  f the following.
10730 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20 43 6f  ** structure. Co
10740 6e 63 65 70 74 75 61 6c 6c 79 2c 20 61 20 63 6f  nceptually, a co
10750 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
10760 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 6e   consists of a n
10770 61 6d 65 20 61 6e 64 0a 2a 2a 20 61 20 63 6f 6d  ame and.** a com
10780 70 61 72 69 73 6f 6e 20 72 6f 75 74 69 6e 65 20  parison routine 
10790 74 68 61 74 20 64 65 66 69 6e 65 73 20 74 68 65  that defines the
107a0 20 6f 72 64 65 72 20 6f 66 20 74 68 61 74 20 73   order of that s
107b0 65 71 75 65 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 49  equence..**.** I
107c0 66 20 43 6f 6c 6c 53 65 71 2e 78 43 6d 70 20 69  f CollSeq.xCmp i
107d0 73 20 4e 55 4c 4c 2c 20 69 74 20 6d 65 61 6e 73  s NULL, it means
107e0 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 63 6f 6c   that the.** col
107f0 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20  lating sequence 
10800 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 20 20 49  is undefined.  I
10810 6e 64 69 63 65 73 20 62 75 69 6c 74 20 6f 6e 20  ndices built on 
10820 61 6e 20 75 6e 64 65 66 69 6e 65 64 0a 2a 2a 20  an undefined.** 
10830 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
10840 63 65 20 6d 61 79 20 6e 6f 74 20 62 65 20 72 65  ce may not be re
10850 61 64 20 6f 72 20 77 72 69 74 74 65 6e 2e 0a 2a  ad or written..*
10860 2f 0a 73 74 72 75 63 74 20 43 6f 6c 6c 53 65 71  /.struct CollSeq
10870 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
10880 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61  ;          /* Na
10890 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 6c 61 74  me of the collat
108a0 69 6e 67 20 73 65 71 75 65 6e 63 65 2c 20 55 54  ing sequence, UT
108b0 46 2d 38 20 65 6e 63 6f 64 65 64 20 2a 2f 0a 20  F-8 encoded */. 
108c0 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20   u8 enc;        
108d0 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65         /* Text e
108e0 6e 63 6f 64 69 6e 67 20 68 61 6e 64 6c 65 64 20  ncoding handled 
108f0 62 79 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20 76  by xCmp() */.  v
10900 6f 69 64 20 2a 70 55 73 65 72 3b 20 20 20 20 20  oid *pUser;     
10910 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72       /* First ar
10920 67 75 6d 65 6e 74 20 74 6f 20 78 43 6d 70 28 29  gument to xCmp()
10930 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6d 70   */.  int (*xCmp
10940 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e  )(void*,int, con
10950 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63  st void*, int, c
10960 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20 76  onst void*);.  v
10970 6f 69 64 20 28 2a 78 44 65 6c 29 28 76 6f 69 64  oid (*xDel)(void
10980 2a 29 3b 20 20 2f 2a 20 44 65 73 74 72 75 63 74  *);  /* Destruct
10990 6f 72 20 66 6f 72 20 70 55 73 65 72 20 2a 2f 0a  or for pUser */.
109a0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74  };../*.** A sort
109b0 20 6f 72 64 65 72 20 63 61 6e 20 62 65 20 65 69   order can be ei
109c0 74 68 65 72 20 41 53 43 20 6f 72 20 44 45 53 43  ther ASC or DESC
109d0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
109e0 49 54 45 5f 53 4f 5f 41 53 43 20 20 20 20 20 20  ITE_SO_ASC      
109f0 20 30 20 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61   0  /* Sort in a
10a00 73 63 65 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a  scending order *
10a10 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
10a20 5f 53 4f 5f 44 45 53 43 20 20 20 20 20 20 31 20  _SO_DESC      1 
10a30 20 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65   /* Sort in asce
10a40 6e 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23  nding order */.#
10a50 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f  define SQLITE_SO
10a60 5f 55 4e 44 45 46 49 4e 45 44 20 2d 31 20 2f 2a  _UNDEFINED -1 /*
10a70 20 4e 6f 20 73 6f 72 74 20 6f 72 64 65 72 20 73   No sort order s
10a80 70 65 63 69 66 69 65 64 20 2a 2f 0a 0a 2f 2a 0a  pecified */../*.
10a90 2a 2a 20 43 6f 6c 75 6d 6e 20 61 66 66 69 6e 69  ** Column affini
10aa0 74 79 20 74 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20  ty types..**.** 
10ab0 54 68 65 73 65 20 75 73 65 64 20 74 6f 20 68 61  These used to ha
10ac0 76 65 20 6d 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65  ve mnemonic name
10ad0 20 6c 69 6b 65 20 27 69 27 20 66 6f 72 20 53 51   like 'i' for SQ
10ae0 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
10af0 20 61 6e 64 0a 2a 2a 20 27 74 27 20 66 6f 72 20   and.** 't' for 
10b00 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2e  SQLITE_AFF_TEXT.
10b10 20 20 42 75 74 20 77 65 20 63 61 6e 20 73 61 76    But we can sav
10b20 65 20 61 20 6c 69 74 74 6c 65 20 73 70 61 63 65  e a little space
10b30 20 61 6e 64 20 69 6d 70 72 6f 76 65 0a 2a 2a 20   and improve.** 
10b40 74 68 65 20 73 70 65 65 64 20 61 20 6c 69 74 74  the speed a litt
10b50 6c 65 20 62 79 20 6e 75 6d 62 65 72 69 6e 67 20  le by numbering 
10b60 74 68 65 20 76 61 6c 75 65 73 20 63 6f 6e 73 65  the values conse
10b70 63 75 74 69 76 65 6c 79 2e 0a 2a 2a 0a 2a 2a 20  cutively..**.** 
10b80 42 75 74 20 72 61 74 68 65 72 20 74 68 61 6e 20  But rather than 
10b90 73 74 61 72 74 20 77 69 74 68 20 30 20 6f 72 20  start with 0 or 
10ba0 31 2c 20 77 65 20 62 65 67 69 6e 20 77 69 74 68  1, we begin with
10bb0 20 27 41 27 2e 20 20 54 68 61 74 20 77 61 79 2c   'A'.  That way,
10bc0 0a 2a 2a 20 77 68 65 6e 20 6d 75 6c 74 69 70 6c  .** when multipl
10bd0 65 20 61 66 66 69 6e 69 74 79 20 74 79 70 65 73  e affinity types
10be0 20 61 72 65 20 63 6f 6e 63 61 74 65 6e 61 74 65   are concatenate
10bf0 64 20 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20  d into a string 
10c00 61 6e 64 0a 2a 2a 20 75 73 65 64 20 61 73 20 74  and.** used as t
10c10 68 65 20 50 34 20 6f 70 65 72 61 6e 64 2c 20 74  he P4 operand, t
10c20 68 65 79 20 77 69 6c 6c 20 62 65 20 6d 6f 72 65  hey will be more
10c30 20 72 65 61 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a   readable..**.**
10c40 20 4e 6f 74 65 20 61 6c 73 6f 20 74 68 61 74 20   Note also that 
10c50 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65  the numeric type
10c60 73 20 61 72 65 20 67 72 6f 75 70 65 64 20 74 6f  s are grouped to
10c70 67 65 74 68 65 72 20 73 6f 20 74 68 61 74 20 74  gether so that t
10c80 65 73 74 69 6e 67 0a 2a 2a 20 66 6f 72 20 61 20  esting.** for a 
10c90 6e 75 6d 65 72 69 63 20 74 79 70 65 20 69 73 20  numeric type is 
10ca0 61 20 73 69 6e 67 6c 65 20 63 6f 6d 70 61 72 69  a single compari
10cb0 73 6f 6e 2e 20 20 41 6e 64 20 74 68 65 20 42 4c  son.  And the BL
10cc0 4f 42 20 74 79 70 65 20 69 73 20 66 69 72 73 74  OB type is first
10cd0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
10ce0 49 54 45 5f 41 46 46 5f 42 4c 4f 42 20 20 20 20  ITE_AFF_BLOB    
10cf0 20 27 41 27 0a 23 64 65 66 69 6e 65 20 53 51 4c   'A'.#define SQL
10d00 49 54 45 5f 41 46 46 5f 54 45 58 54 20 20 20 20  ITE_AFF_TEXT    
10d10 20 27 42 27 0a 23 64 65 66 69 6e 65 20 53 51 4c   'B'.#define SQL
10d20 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20  ITE_AFF_NUMERIC 
10d30 20 27 43 27 0a 23 64 65 66 69 6e 65 20 53 51 4c   'C'.#define SQL
10d40 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20  ITE_AFF_INTEGER 
10d50 20 27 44 27 0a 23 64 65 66 69 6e 65 20 53 51 4c   'D'.#define SQL
10d60 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 20 20 20  ITE_AFF_REAL    
10d70 20 27 45 27 0a 0a 23 64 65 66 69 6e 65 20 73 71   'E'..#define sq
10d80 6c 69 74 65 33 49 73 4e 75 6d 65 72 69 63 41 66  lite3IsNumericAf
10d90 66 69 6e 69 74 79 28 58 29 20 20 28 28 58 29 3e  finity(X)  ((X)>
10da0 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45  =SQLITE_AFF_NUME
10db0 52 49 43 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  RIC)../*.** The 
10dc0 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20  SQLITE_AFF_MASK 
10dd0 76 61 6c 75 65 73 20 6d 61 73 6b 73 20 6f 66 66  values masks off
10de0 20 74 68 65 20 73 69 67 6e 69 66 69 63 61 6e 74   the significant
10df0 20 62 69 74 73 20 6f 66 20 61 6e 0a 2a 2a 20 61   bits of an.** a
10e00 66 66 69 6e 69 74 79 20 76 61 6c 75 65 2e 0a 2a  ffinity value..*
10e10 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
10e20 5f 41 46 46 5f 4d 41 53 4b 20 20 20 20 20 30 78  _AFF_MASK     0x
10e30 34 37 0a 0a 2f 2a 0a 2a 2a 20 41 64 64 69 74 69  47../*.** Additi
10e40 6f 6e 61 6c 20 62 69 74 20 76 61 6c 75 65 73 20  onal bit values 
10e50 74 68 61 74 20 63 61 6e 20 62 65 20 4f 52 65 64  that can be ORed
10e60 20 77 69 74 68 20 61 6e 20 61 66 66 69 6e 69 74   with an affinit
10e70 79 20 77 69 74 68 6f 75 74 0a 2a 2a 20 63 68 61  y without.** cha
10e80 6e 67 69 6e 67 20 74 68 65 20 61 66 66 69 6e 69  nging the affini
10e90 74 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51  ty..**.** The SQ
10ea0 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20 66 6c 61  LITE_NOTNULL fla
10eb0 67 20 69 73 20 61 20 63 6f 6d 62 69 6e 61 74 69  g is a combinati
10ec0 6f 6e 20 6f 66 20 4e 55 4c 4c 45 51 20 61 6e 64  on of NULLEQ and
10ed0 20 4a 55 4d 50 49 46 4e 55 4c 4c 2e 0a 2a 2a 20   JUMPIFNULL..** 
10ee0 49 74 20 63 61 75 73 65 73 20 61 6e 20 61 73 73  It causes an ass
10ef0 65 72 74 28 29 20 74 6f 20 66 69 72 65 20 69 66  ert() to fire if
10f00 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
10f10 74 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 0a  to a comparison.
10f20 2a 2a 20 6f 70 65 72 61 74 6f 72 20 69 73 20 4e  ** operator is N
10f30 55 4c 4c 2e 20 20 49 74 20 69 73 20 61 64 64 65  ULL.  It is adde
10f40 64 20 74 6f 20 63 65 72 74 61 69 6e 20 63 6f 6d  d to certain com
10f50 70 61 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72  parison operator
10f60 73 20 74 6f 0a 2a 2a 20 70 72 6f 76 65 20 74 68  s to.** prove th
10f70 61 74 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20  at the operands 
10f80 61 72 65 20 61 6c 77 61 79 73 20 4e 4f 54 20 4e  are always NOT N
10f90 55 4c 4c 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ULL..*/.#define 
10fa0 53 51 4c 49 54 45 5f 4b 45 45 50 4e 55 4c 4c 20  SQLITE_KEEPNULL 
10fb0 20 20 20 20 30 78 30 38 20 20 2f 2a 20 55 73 65      0x08  /* Use
10fc0 64 20 62 79 20 76 65 63 74 6f 72 20 3d 3d 20 6f  d by vector == o
10fd0 72 20 3c 3e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  r <> */.#define 
10fe0 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
10ff0 4c 20 20 20 30 78 31 30 20 20 2f 2a 20 6a 75 6d  L   0x10  /* jum
11000 70 73 20 69 66 20 65 69 74 68 65 72 20 6f 70 65  ps if either ope
11010 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a  rand is NULL */.
11020 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
11030 54 4f 52 45 50 32 20 20 20 20 20 20 30 78 32 30  TOREP2      0x20
11040 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
11050 74 20 69 6e 20 72 65 67 5b 50 32 5d 20 72 61 74  t in reg[P2] rat
11060 68 65 72 20 74 68 61 6e 20 6a 75 6d 70 20 2a 2f  her than jump */
11070 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
11080 4e 55 4c 4c 45 51 20 20 20 20 20 20 20 30 78 38  NULLEQ       0x8
11090 30 20 20 2f 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c 20  0  /* NULL=NULL 
110a0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
110b0 45 5f 4e 4f 54 4e 55 4c 4c 20 20 20 20 20 20 30  E_NOTNULL      0
110c0 78 39 30 20 20 2f 2a 20 41 73 73 65 72 74 20 74  x90  /* Assert t
110d0 68 61 74 20 6f 70 65 72 61 6e 64 73 20 61 72 65  hat operands are
110e0 20 6e 65 76 65 72 20 4e 55 4c 4c 20 2a 2f 0a 0a   never NULL */..
110f0 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 20  /*.** An object 
11100 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73 20  of this type is 
11110 63 72 65 61 74 65 64 20 66 6f 72 20 65 61 63 68  created for each
11120 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 70   virtual table p
11130 72 65 73 65 6e 74 20 69 6e 0a 2a 2a 20 74 68 65  resent in.** the
11140 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
11150 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 64  ..**.** If the d
11160 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69  atabase schema i
11170 73 20 73 68 61 72 65 64 2c 20 74 68 65 6e 20 74  s shared, then t
11180 68 65 72 65 20 69 73 20 6f 6e 65 20 69 6e 73 74  here is one inst
11190 61 6e 63 65 20 6f 66 20 74 68 69 73 0a 2a 2a 20  ance of this.** 
111a0 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 65 61  structure for ea
111b0 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ch database conn
111c0 65 63 74 69 6f 6e 20 28 73 71 6c 69 74 65 33 2a  ection (sqlite3*
111d0 29 20 74 68 61 74 20 75 73 65 73 20 74 68 65 20  ) that uses the 
111e0 73 68 61 72 65 64 0a 2a 2a 20 73 63 68 65 6d 61  shared.** schema
111f0 2e 20 54 68 69 73 20 69 73 20 62 65 63 61 75 73  . This is becaus
11200 65 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20  e each database 
11210 63 6f 6e 6e 65 63 74 69 6f 6e 20 72 65 71 75 69  connection requi
11220 72 65 73 20 69 74 73 20 6f 77 6e 20 75 6e 69 71  res its own uniq
11230 75 65 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f  ue.** instance o
11240 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  f the sqlite3_vt
11250 61 62 2a 20 68 61 6e 64 6c 65 20 75 73 65 64 20  ab* handle used 
11260 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 76 69  to access the vi
11270 72 74 75 61 6c 20 74 61 62 6c 65 0a 2a 2a 20 69  rtual table.** i
11280 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 73  mplementation. s
11290 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e  qlite3_vtab* han
112a0 64 6c 65 73 20 63 61 6e 20 6e 6f 74 20 62 65 20  dles can not be 
112b0 73 68 61 72 65 64 20 62 65 74 77 65 65 6e 0a 2a  shared between.*
112c0 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  * database conne
112d0 63 74 69 6f 6e 73 2c 20 65 76 65 6e 20 77 68 65  ctions, even whe
112e0 6e 20 74 68 65 20 72 65 73 74 20 6f 66 20 74 68  n the rest of th
112f0 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61  e in-memory data
11300 62 61 73 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69  base.** schema i
11310 73 20 73 68 61 72 65 64 2c 20 61 73 20 74 68 65  s shared, as the
11320 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
11330 6f 66 74 65 6e 20 73 74 6f 72 65 73 20 74 68 65  often stores the
11340 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e   database.** con
11350 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 70  nection handle p
11360 61 73 73 65 64 20 74 6f 20 69 74 20 76 69 61 20  assed to it via 
11370 74 68 65 20 78 43 6f 6e 6e 65 63 74 28 29 20 6f  the xConnect() o
11380 72 20 78 43 72 65 61 74 65 28 29 20 6d 65 74 68  r xCreate() meth
11390 6f 64 0a 2a 2a 20 64 75 72 69 6e 67 20 69 6e 69  od.** during ini
113a0 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 74 65  tialization inte
113b0 72 6e 61 6c 6c 79 2e 20 54 68 69 73 20 64 61 74  rnally. This dat
113c0 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
113d0 20 68 61 6e 64 6c 65 20 6d 61 79 0a 2a 2a 20 74   handle may.** t
113e0 68 65 6e 20 62 65 20 75 73 65 64 20 62 79 20 74  hen be used by t
113f0 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
11400 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
11410 74 6f 20 61 63 63 65 73 73 20 72 65 61 6c 20 74  to access real t
11420 61 62 6c 65 73 0a 2a 2a 20 77 69 74 68 69 6e 20  ables.** within 
11430 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 53 6f  the database. So
11440 20 74 68 61 74 20 74 68 65 79 20 61 70 70 65 61   that they appea
11450 72 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65  r as part of the
11460 20 63 61 6c 6c 65 72 73 0a 2a 2a 20 74 72 61 6e   callers.** tran
11470 73 61 63 74 69 6f 6e 2c 20 74 68 65 73 65 20 61  saction, these a
11480 63 63 65 73 73 65 73 20 6e 65 65 64 20 74 6f 20  ccesses need to 
11490 62 65 20 6d 61 64 65 20 76 69 61 20 74 68 65 20  be made via the 
114a0 73 61 6d 65 20 64 61 74 61 62 61 73 65 0a 2a 2a  same database.**
114b0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 20 74   connection as t
114c0 68 61 74 20 75 73 65 64 20 74 6f 20 65 78 65 63  hat used to exec
114d0 75 74 65 20 53 51 4c 20 6f 70 65 72 61 74 69 6f  ute SQL operatio
114e0 6e 73 20 6f 6e 20 74 68 65 20 76 69 72 74 75 61  ns on the virtua
114f0 6c 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41  l table..**.** A
11500 6c 6c 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74  ll VTable object
11510 73 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e  s that correspon
11520 64 20 74 6f 20 61 20 73 69 6e 67 6c 65 20 74 61  d to a single ta
11530 62 6c 65 20 69 6e 20 61 20 73 68 61 72 65 64 0a  ble in a shared.
11540 2a 2a 20 64 61 74 61 62 61 73 65 20 73 63 68 65  ** database sche
11550 6d 61 20 61 72 65 20 69 6e 69 74 69 61 6c 6c 79  ma are initially
11560 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e   stored in a lin
11570 6b 65 64 2d 6c 69 73 74 20 70 6f 69 6e 74 65 64  ked-list pointed
11580 20 74 6f 20 62 79 0a 2a 2a 20 74 68 65 20 54 61   to by.** the Ta
11590 62 6c 65 2e 70 56 54 61 62 6c 65 20 6d 65 6d 62  ble.pVTable memb
115a0 65 72 20 76 61 72 69 61 62 6c 65 20 6f 66 20 74  er variable of t
115b0 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
115c0 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 2e 0a 2a   Table object..*
115d0 2a 20 57 68 65 6e 20 61 6e 20 73 71 6c 69 74 65  * When an sqlite
115e0 33 5f 70 72 65 70 61 72 65 28 29 20 6f 70 65 72  3_prepare() oper
115f0 61 74 69 6f 6e 20 69 73 20 72 65 71 75 69 72 65  ation is require
11600 64 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20  d to access the 
11610 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65  virtual.** table
11620 2c 20 69 74 20 73 65 61 72 63 68 65 73 20 74 68  , it searches th
11630 65 20 6c 69 73 74 20 66 6f 72 20 74 68 65 20 56  e list for the V
11640 54 61 62 6c 65 20 74 68 61 74 20 63 6f 72 72 65  Table that corre
11650 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 0a 2a 2a  sponds to the.**
11660 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
11670 74 69 6f 6e 20 64 6f 69 6e 67 20 74 68 65 20 70  tion doing the p
11680 72 65 70 61 72 69 6e 67 20 73 6f 20 61 73 20 74  reparing so as t
11690 6f 20 75 73 65 20 74 68 65 20 63 6f 72 72 65 63  o use the correc
116a0 74 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 76 74 61  t.** sqlite3_vta
116b0 62 2a 20 68 61 6e 64 6c 65 20 69 6e 20 74 68 65  b* handle in the
116c0 20 63 6f 6d 70 69 6c 65 64 20 71 75 65 72 79 2e   compiled query.
116d0 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61 6e 20 69  .**.** When an i
116e0 6e 2d 6d 65 6d 6f 72 79 20 54 61 62 6c 65 20 6f  n-memory Table o
116f0 62 6a 65 63 74 20 69 73 20 64 65 6c 65 74 65 64  bject is deleted
11700 20 28 66 6f 72 20 65 78 61 6d 70 6c 65 20 77 68   (for example wh
11710 65 6e 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61  en the.** schema
11720 20 69 73 20 62 65 69 6e 67 20 72 65 6c 6f 61 64   is being reload
11730 65 64 20 66 6f 72 20 73 6f 6d 65 20 72 65 61 73  ed for some reas
11740 6f 6e 29 2c 20 74 68 65 20 56 54 61 62 6c 65 20  on), the VTable 
11750 6f 62 6a 65 63 74 73 20 61 72 65 20 6e 6f 74 0a  objects are not.
11760 2a 2a 20 64 65 6c 65 74 65 64 20 61 6e 64 20 74  ** deleted and t
11770 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a  he sqlite3_vtab*
11780 20 68 61 6e 64 6c 65 73 20 61 72 65 20 6e 6f 74   handles are not
11790 20 78 44 69 73 63 6f 6e 6e 65 63 74 28 29 65 64   xDisconnect()ed
117a0 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e  .** immediately.
117b0 20 49 6e 73 74 65 61 64 2c 20 74 68 65 79 20 61   Instead, they a
117c0 72 65 20 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68  re moved from th
117d0 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c 65 20  e Table.pVTable 
117e0 6c 69 73 74 20 74 6f 0a 2a 2a 20 61 6e 6f 74 68  list to.** anoth
117f0 65 72 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68  er linked list h
11800 65 61 64 65 64 20 62 79 20 74 68 65 20 73 71 6c  eaded by the sql
11810 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74  ite3.pDisconnect
11820 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 0a 2a   member of the.*
11830 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  * corresponding 
11840 73 71 6c 69 74 65 33 20 73 74 72 75 63 74 75 72  sqlite3 structur
11850 65 2e 20 54 68 65 79 20 61 72 65 20 74 68 65 6e  e. They are then
11860 20 64 65 6c 65 74 65 64 2f 78 44 69 73 63 6f 6e   deleted/xDiscon
11870 6e 65 63 74 65 64 0a 2a 2a 20 6e 65 78 74 20 74  nected.** next t
11880 69 6d 65 20 61 20 73 74 61 74 65 6d 65 6e 74 20  ime a statement 
11890 69 73 20 70 72 65 70 61 72 65 64 20 75 73 69 6e  is prepared usin
118a0 67 20 73 61 69 64 20 73 71 6c 69 74 65 33 2a 2e  g said sqlite3*.
118b0 20 54 68 69 73 20 69 73 20 64 6f 6e 65 0a 2a 2a   This is done.**
118c0 20 74 6f 20 61 76 6f 69 64 20 64 65 61 64 6c 6f   to avoid deadlo
118d0 63 6b 20 69 73 73 75 65 73 20 69 6e 76 6f 6c 76  ck issues involv
118e0 69 6e 67 20 6d 75 6c 74 69 70 6c 65 20 73 71 6c  ing multiple sql
118f0 69 74 65 33 2e 6d 75 74 65 78 20 6d 75 74 65 78  ite3.mutex mutex
11900 65 73 2e 0a 2a 2a 20 52 65 66 65 72 20 74 6f 20  es..** Refer to 
11910 63 6f 6d 6d 65 6e 74 73 20 61 62 6f 76 65 20 66  comments above f
11920 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 56  unction sqlite3V
11930 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 29 20  tabUnlockList() 
11940 66 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 6c 61 6e  for an.** explan
11950 61 74 69 6f 6e 20 61 73 20 74 6f 20 77 68 79 20  ation as to why 
11960 69 74 20 69 73 20 73 61 66 65 20 74 6f 20 61 64  it is safe to ad
11970 64 20 61 6e 20 65 6e 74 72 79 20 74 6f 20 61 6e  d an entry to an
11980 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63 6f 6e   sqlite3.pDiscon
11990 6e 65 63 74 0a 2a 2a 20 6c 69 73 74 20 77 69 74  nect.** list wit
119a0 68 6f 75 74 20 68 6f 6c 64 69 6e 67 20 74 68 65  hout holding the
119b0 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 73   corresponding s
119c0 71 6c 69 74 65 33 2e 6d 75 74 65 78 20 6d 75 74  qlite3.mutex mut
119d0 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65  ex..**.** The me
119e0 6d 6f 72 79 20 66 6f 72 20 6f 62 6a 65 63 74 73  mory for objects
119f0 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73   of this type is
11a00 20 61 6c 77 61 79 73 20 61 6c 6c 6f 63 61 74 65   always allocate
11a10 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 44  d by.** sqlite3D
11a20 62 4d 61 6c 6c 6f 63 28 29 2c 20 75 73 69 6e 67  bMalloc(), using
11a30 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   the connection 
11a40 68 61 6e 64 6c 65 20 73 74 6f 72 65 64 20 69 6e  handle stored in
11a50 20 56 54 61 62 6c 65 2e 64 62 20 61 73 0a 2a 2a   VTable.db as.**
11a60 20 74 68 65 20 66 69 72 73 74 20 61 72 67 75 6d   the first argum
11a70 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 56  ent..*/.struct V
11a80 54 61 62 6c 65 20 7b 0a 20 20 73 71 6c 69 74 65  Table {.  sqlite
11a90 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 20  3 *db;          
11aa0 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20      /* Database 
11ab0 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 73 73 6f 63  connection assoc
11ac0 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20  iated with this 
11ad0 74 61 62 6c 65 20 2a 2f 0a 20 20 4d 6f 64 75 6c  table */.  Modul
11ae0 65 20 2a 70 4d 6f 64 3b 20 20 20 20 20 20 20 20  e *pMod;        
11af0 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
11b00 74 6f 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d  to module implem
11b10 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 73 71  entation */.  sq
11b20 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
11b30 62 3b 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74  b;      /* Point
11b40 65 72 20 74 6f 20 76 74 61 62 20 69 6e 73 74 61  er to vtab insta
11b50 6e 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65  nce */.  int nRe
11b60 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  f;              
11b70 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
11b80 70 6f 69 6e 74 65 72 73 20 74 6f 20 74 68 69 73  pointers to this
11b90 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20   structure */.  
11ba0 75 38 20 62 43 6f 6e 73 74 72 61 69 6e 74 3b 20  u8 bConstraint; 
11bb0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
11bc0 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 73  e if constraints
11bd0 20 61 72 65 20 73 75 70 70 6f 72 74 65 64 20 2a   are supported *
11be0 2f 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69  /.  int iSavepoi
11bf0 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  nt;           /*
11c00 20 44 65 70 74 68 20 6f 66 20 74 68 65 20 53 41   Depth of the SA
11c10 56 45 50 4f 49 4e 54 20 73 74 61 63 6b 20 2a 2f  VEPOINT stack */
11c20 0a 20 20 56 54 61 62 6c 65 20 2a 70 4e 65 78 74  .  VTable *pNext
11c30 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
11c40 4e 65 78 74 20 69 6e 20 6c 69 6e 6b 65 64 20 6c  Next in linked l
11c50 69 73 74 20 28 73 65 65 20 61 62 6f 76 65 29 20  ist (see above) 
11c60 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
11c70 20 73 63 68 65 6d 61 20 66 6f 72 20 65 61 63 68   schema for each
11c80 20 53 51 4c 20 74 61 62 6c 65 20 61 6e 64 20 76   SQL table and v
11c90 69 65 77 20 69 73 20 72 65 70 72 65 73 65 6e 74  iew is represent
11ca0 65 64 20 69 6e 20 6d 65 6d 6f 72 79 0a 2a 2a 20  ed in memory.** 
11cb0 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  by an instance o
11cc0 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
11cd0 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74  structure..*/.st
11ce0 72 75 63 74 20 54 61 62 6c 65 20 7b 0a 20 20 63  ruct Table {.  c
11cf0 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
11d00 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
11d10 68 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77  he table or view
11d20 20 2a 2f 0a 20 20 43 6f 6c 75 6d 6e 20 2a 61 43   */.  Column *aC
11d30 6f 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20 49 6e  ol;        /* In
11d40 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
11d50 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  each column */. 
11d60 20 49 6e 64 65 78 20 2a 70 49 6e 64 65 78 3b 20   Index *pIndex; 
11d70 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66        /* List of
11d80 20 53 51 4c 20 69 6e 64 65 78 65 73 20 6f 6e 20   SQL indexes on 
11d90 74 68 69 73 20 74 61 62 6c 65 2e 20 2a 2f 0a 20  this table. */. 
11da0 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
11db0 3b 20 20 20 20 20 2f 2a 20 4e 55 4c 4c 20 66 6f  ;     /* NULL fo
11dc0 72 20 74 61 62 6c 65 73 2e 20 20 50 6f 69 6e 74  r tables.  Point
11dd0 73 20 74 6f 20 64 65 66 69 6e 69 74 69 6f 6e 20  s to definition 
11de0 69 66 20 61 20 76 69 65 77 2e 20 2a 2f 0a 20 20  if a view. */.  
11df0 46 4b 65 79 20 2a 70 46 4b 65 79 3b 20 20 20 20  FKey *pFKey;    
11e00 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c       /* Linked l
11e10 69 73 74 20 6f 66 20 61 6c 6c 20 66 6f 72 65 69  ist of all forei
11e20 67 6e 20 6b 65 79 73 20 69 6e 20 74 68 69 73 20  gn keys in this 
11e30 74 61 62 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20  table */.  char 
11e40 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20  *zColAff;       
11e50 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69  /* String defini
11e60 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  ng the affinity 
11e70 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a  of each column *
11e80 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43  /.  ExprList *pC
11e90 68 65 63 6b 3b 20 20 20 20 2f 2a 20 41 6c 6c 20  heck;    /* All 
11ea0 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
11eb0 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  s */.           
11ec0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20              /*  
11ed0 20 2e 2e 2e 20 61 6c 73 6f 20 75 73 65 64 20 61   ... also used a
11ee0 73 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 6c 69  s column name li
11ef0 73 74 20 69 6e 20 61 20 56 49 45 57 20 2a 2f 0a  st in a VIEW */.
11f00 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20    int tnum;     
11f10 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 42         /* Root B
11f20 54 72 65 65 20 70 61 67 65 20 66 6f 72 20 74 68  Tree page for th
11f30 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 75 33  is table */.  u3
11f40 32 20 6e 54 61 62 52 65 66 3b 20 20 20 20 20 20  2 nTabRef;      
11f50 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
11f60 70 6f 69 6e 74 65 72 73 20 74 6f 20 74 68 69 73  pointers to this
11f70 20 54 61 62 6c 65 20 2a 2f 0a 20 20 75 33 32 20   Table */.  u32 
11f80 74 61 62 46 6c 61 67 73 3b 20 20 20 20 20 20 20  tabFlags;       
11f90 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 54 46 5f 2a   /* Mask of TF_*
11fa0 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 31 36   values */.  i16
11fb0 20 69 50 4b 65 79 3b 20 20 20 20 20 20 20 20 20   iPKey;         
11fc0 20 20 2f 2a 20 49 66 20 6e 6f 74 20 6e 65 67 61    /* If not nega
11fd0 74 69 76 65 2c 20 75 73 65 20 61 43 6f 6c 5b 69  tive, use aCol[i
11fe0 50 4b 65 79 5d 20 61 73 20 74 68 65 20 72 6f 77  PKey] as the row
11ff0 69 64 20 2a 2f 0a 20 20 69 31 36 20 6e 43 6f 6c  id */.  i16 nCol
12000 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
12010 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
12020 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20  s in this table 
12030 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 6e 52 6f 77  */.  LogEst nRow
12040 4c 6f 67 45 73 74 3b 20 20 20 2f 2a 20 45 73 74  LogEst;   /* Est
12050 69 6d 61 74 65 64 20 72 6f 77 73 20 69 6e 20 74  imated rows in t
12060 61 62 6c 65 20 2d 20 66 72 6f 6d 20 73 71 6c 69  able - from sqli
12070 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20 2a  te_stat1 table *
12080 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a 54 61 62  /.  LogEst szTab
12090 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73 74 69  Row;     /* Esti
120a0 6d 61 74 65 64 20 73 69 7a 65 20 6f 66 20 65 61  mated size of ea
120b0 63 68 20 74 61 62 6c 65 20 72 6f 77 20 69 6e 20  ch table row in 
120c0 62 79 74 65 73 20 2a 2f 0a 23 69 66 64 65 66 20  bytes */.#ifdef 
120d0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f  SQLITE_ENABLE_CO
120e0 53 54 4d 55 4c 54 0a 20 20 4c 6f 67 45 73 74 20  STMULT.  LogEst 
120f0 63 6f 73 74 4d 75 6c 74 3b 20 20 20 20 20 2f 2a  costMult;     /*
12100 20 43 6f 73 74 20 6d 75 6c 74 69 70 6c 69 65 72   Cost multiplier
12110 20 66 6f 72 20 75 73 69 6e 67 20 74 68 69 73 20   for using this 
12120 74 61 62 6c 65 20 2a 2f 0a 23 65 6e 64 69 66 0a  table */.#endif.
12130 20 20 75 38 20 6b 65 79 43 6f 6e 66 3b 20 20 20    u8 keyConf;   
12140 20 20 20 20 20 20 20 2f 2a 20 57 68 61 74 20 74         /* What t
12150 6f 20 64 6f 20 69 6e 20 63 61 73 65 20 6f 66 20  o do in case of 
12160 75 6e 69 71 75 65 6e 65 73 73 20 63 6f 6e 66 6c  uniqueness confl
12170 69 63 74 20 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a  ict on iPKey */.
12180 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
12190 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20  MIT_ALTERTABLE. 
121a0 20 69 6e 74 20 61 64 64 43 6f 6c 4f 66 66 73 65   int addColOffse
121b0 74 3b 20 20 20 20 2f 2a 20 4f 66 66 73 65 74 20  t;    /* Offset 
121c0 69 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  in CREATE TABLE 
121d0 73 74 6d 74 20 74 6f 20 61 64 64 20 61 20 6e 65  stmt to add a ne
121e0 77 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 65 6e 64  w column */.#end
121f0 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
12200 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
12210 42 4c 45 0a 20 20 69 6e 74 20 6e 4d 6f 64 75 6c  BLE.  int nModul
12220 65 41 72 67 3b 20 20 20 20 20 20 2f 2a 20 4e 75  eArg;      /* Nu
12230 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
12240 73 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20  s to the module 
12250 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 61 7a 4d 6f  */.  char **azMo
12260 64 75 6c 65 41 72 67 3b 20 20 2f 2a 20 30 3a 20  duleArg;  /* 0: 
12270 6d 6f 64 75 6c 65 20 31 3a 20 73 63 68 65 6d 61  module 1: schema
12280 20 32 3a 20 76 74 61 62 20 6e 61 6d 65 20 33 2e   2: vtab name 3.
12290 2e 2e 3a 20 61 72 67 73 20 2a 2f 0a 20 20 56 54  ..: args */.  VT
122a0 61 62 6c 65 20 2a 70 56 54 61 62 6c 65 3b 20 20  able *pVTable;  
122b0 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 56 54     /* List of VT
122c0 61 62 6c 65 20 6f 62 6a 65 63 74 73 2e 20 2a 2f  able objects. */
122d0 0a 23 65 6e 64 69 66 0a 20 20 54 72 69 67 67 65  .#endif.  Trigge
122e0 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20 2f  r *pTrigger;   /
122f0 2a 20 4c 69 73 74 20 6f 66 20 74 72 69 67 67 65  * List of trigge
12300 72 73 20 73 74 6f 72 65 64 20 69 6e 20 70 53 63  rs stored in pSc
12310 68 65 6d 61 20 2a 2f 0a 20 20 53 63 68 65 6d 61  hema */.  Schema
12320 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 2f   *pSchema;     /
12330 2a 20 53 63 68 65 6d 61 20 74 68 61 74 20 63 6f  * Schema that co
12340 6e 74 61 69 6e 73 20 74 68 69 73 20 74 61 62 6c  ntains this tabl
12350 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e  e */.  Table *pN
12360 65 78 74 5a 6f 6d 62 69 65 3b 20 20 2f 2a 20 4e  extZombie;  /* N
12370 65 78 74 20 6f 6e 20 74 68 65 20 50 61 72 73 65  ext on the Parse
12380 2e 70 5a 6f 6d 62 69 65 54 61 62 20 6c 69 73 74  .pZombieTab list
12390 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c   */.};../*.** Al
123a0 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
123b0 20 54 61 62 6c 65 2e 74 61 62 46 6c 61 67 73 2e   Table.tabFlags.
123c0 0a 2a 2a 0a 2a 2a 20 54 46 5f 4f 4f 4f 48 69 64  .**.** TF_OOOHid
123d0 64 65 6e 20 61 70 70 6c 69 65 73 20 74 6f 20 74  den applies to t
123e0 61 62 6c 65 73 20 6f 72 20 76 69 65 77 20 74 68  ables or view th
123f0 61 74 20 68 61 76 65 20 68 69 64 64 65 6e 20 63  at have hidden c
12400 6f 6c 75 6d 6e 73 20 74 68 61 74 20 61 72 65 0a  olumns that are.
12410 2a 2a 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 6e  ** followed by n
12420 6f 6e 2d 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e  on-hidden column
12430 73 2e 20 20 45 78 61 6d 70 6c 65 3a 20 20 22 43  s.  Example:  "C
12440 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
12450 42 4c 45 20 78 20 55 53 49 4e 47 0a 2a 2a 20 76  BLE x USING.** v
12460 74 61 62 31 28 61 20 48 49 44 44 45 4e 2c 20 62  tab1(a HIDDEN, b
12470 29 3b 22 2e 20 20 53 69 6e 63 65 20 22 62 22 20  );".  Since "b" 
12480 69 73 20 61 20 6e 6f 6e 2d 68 69 64 64 65 6e 20  is a non-hidden 
12490 63 6f 6c 75 6d 6e 20 62 75 74 20 22 61 22 20 69  column but "a" i
124a0 73 20 68 69 64 64 65 6e 2c 0a 2a 2a 20 74 68 65  s hidden,.** the
124b0 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 61 74   TF_OOOHidden at
124c0 74 72 69 62 75 74 65 20 77 6f 75 6c 64 20 61 70  tribute would ap
124d0 70 6c 79 20 69 6e 20 74 68 69 73 20 63 61 73 65  ply in this case
124e0 2e 20 20 53 75 63 68 20 74 61 62 6c 65 73 20 72  .  Such tables r
124f0 65 71 75 69 72 65 0a 2a 2a 20 73 70 65 63 69 61  equire.** specia
12500 6c 20 68 61 6e 64 6c 69 6e 67 20 64 75 72 69 6e  l handling durin
12510 67 20 49 4e 53 45 52 54 20 70 72 6f 63 65 73 73  g INSERT process
12520 69 6e 67 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ing..*/.#define 
12530 54 46 5f 52 65 61 64 6f 6e 6c 79 20 20 20 20 20  TF_Readonly     
12540 20 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20     0x0001    /* 
12550 52 65 61 64 2d 6f 6e 6c 79 20 73 79 73 74 65 6d  Read-only system
12560 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e   table */.#defin
12570 65 20 54 46 5f 45 70 68 65 6d 65 72 61 6c 20 20  e TF_Ephemeral  
12580 20 20 20 20 20 30 78 30 30 30 32 20 20 20 20 2f       0x0002    /
12590 2a 20 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 74  * An ephemeral t
125a0 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  able */.#define 
125b0 54 46 5f 48 61 73 50 72 69 6d 61 72 79 4b 65 79  TF_HasPrimaryKey
125c0 20 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20     0x0004    /* 
125d0 54 61 62 6c 65 20 68 61 73 20 61 20 70 72 69 6d  Table has a prim
125e0 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69  ary key */.#defi
125f0 6e 65 20 54 46 5f 41 75 74 6f 69 6e 63 72 65 6d  ne TF_Autoincrem
12600 65 6e 74 20 20 20 30 78 30 30 30 38 20 20 20 20  ent   0x0008    
12610 2f 2a 20 49 6e 74 65 67 65 72 20 70 72 69 6d 61  /* Integer prima
12620 72 79 20 6b 65 79 20 69 73 20 61 75 74 6f 69 6e  ry key is autoin
12630 63 72 65 6d 65 6e 74 20 2a 2f 0a 23 64 65 66 69  crement */.#defi
12640 6e 65 20 54 46 5f 48 61 73 53 74 61 74 31 20 20  ne TF_HasStat1  
12650 20 20 20 20 20 20 30 78 30 30 31 30 20 20 20 20        0x0010    
12660 2f 2a 20 6e 52 6f 77 4c 6f 67 45 73 74 20 73 65  /* nRowLogEst se
12670 74 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74  t from sqlite_st
12680 61 74 31 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  at1 */.#define T
12690 46 5f 57 69 74 68 6f 75 74 52 6f 77 69 64 20 20  F_WithoutRowid  
126a0 20 20 30 78 30 30 32 30 20 20 20 20 2f 2a 20 4e    0x0020    /* N
126b0 6f 20 72 6f 77 69 64 2e 20 20 50 52 49 4d 41 52  o rowid.  PRIMAR
126c0 59 20 4b 45 59 20 69 73 20 74 68 65 20 6b 65 79  Y KEY is the key
126d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 4e   */.#define TF_N
126e0 6f 56 69 73 69 62 6c 65 52 6f 77 69 64 20 20 30  oVisibleRowid  0
126f0 78 30 30 34 30 20 20 20 20 2f 2a 20 4e 6f 20 75  x0040    /* No u
12700 73 65 72 2d 76 69 73 69 62 6c 65 20 22 72 6f 77  ser-visible "row
12710 69 64 22 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 64  id" column */.#d
12720 65 66 69 6e 65 20 54 46 5f 4f 4f 4f 48 69 64 64  efine TF_OOOHidd
12730 65 6e 20 20 20 20 20 20 20 30 78 30 30 38 30 20  en       0x0080 
12740 20 20 20 2f 2a 20 4f 75 74 2d 6f 66 2d 4f 72 64     /* Out-of-Ord
12750 65 72 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e  er hidden column
12760 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  s */.#define TF_
12770 53 74 61 74 73 55 73 65 64 20 20 20 20 20 20 20  StatsUsed       
12780 30 78 30 31 30 30 20 20 20 20 2f 2a 20 51 75 65  0x0100    /* Que
12790 72 79 20 70 6c 61 6e 6e 65 72 20 64 65 63 69 73  ry planner decis
127a0 69 6f 6e 73 20 61 66 66 65 63 74 65 64 20 62 79  ions affected by
127b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
127c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
127d0 20 20 20 20 20 20 2a 2a 20 49 6e 64 65 78 2e 61        ** Index.a
127e0 69 52 6f 77 4c 6f 67 45 73 74 5b 5d 20 76 61 6c  iRowLogEst[] val
127f0 75 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54  ues */.#define T
12800 46 5f 48 61 73 4e 6f 74 4e 75 6c 6c 20 20 20 20  F_HasNotNull    
12810 20 20 30 78 30 32 30 30 20 20 20 20 2f 2a 20 43    0x0200    /* C
12820 6f 6e 74 61 69 6e 73 20 4e 4f 54 20 4e 55 4c 4c  ontains NOT NULL
12830 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
12840 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 74 6f 20 73  ./*.** Test to s
12850 65 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ee whether or no
12860 74 20 61 20 74 61 62 6c 65 20 69 73 20 61 20 76  t a table is a v
12870 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54  irtual table.  T
12880 68 69 73 20 69 73 0a 2a 2a 20 64 6f 6e 65 20 61  his is.** done a
12890 73 20 61 20 6d 61 63 72 6f 20 73 6f 20 74 68 61  s a macro so tha
128a0 74 20 69 74 20 77 69 6c 6c 20 62 65 20 6f 70 74  t it will be opt
128b0 69 6d 69 7a 65 64 20 6f 75 74 20 77 68 65 6e 20  imized out when 
128c0 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65  virtual.** table
128d0 20 73 75 70 70 6f 72 74 20 69 73 20 6f 6d 69 74   support is omit
128e0 74 65 64 20 66 72 6f 6d 20 74 68 65 20 62 75 69  ted from the bui
128f0 6c 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ld..*/.#ifndef S
12900 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
12910 41 4c 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e  ALTABLE.#  defin
12920 65 20 49 73 56 69 72 74 75 61 6c 28 58 29 20 20  e IsVirtual(X)  
12930 20 20 20 20 28 28 58 29 2d 3e 6e 4d 6f 64 75 6c      ((X)->nModul
12940 65 41 72 67 29 0a 23 65 6c 73 65 0a 23 20 20 64  eArg).#else.#  d
12950 65 66 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28  efine IsVirtual(
12960 58 29 20 20 20 20 20 20 30 0a 23 65 6e 64 69 66  X)      0.#endif
12970 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74  ../*.** Macros t
12980 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20 61  o determine if a
12990 20 63 6f 6c 75 6d 6e 20 69 73 20 68 69 64 64 65   column is hidde
129a0 6e 2e 20 20 49 73 4f 72 64 69 6e 61 72 79 48 69  n.  IsOrdinaryHi
129b0 64 64 65 6e 43 6f 6c 75 6d 6e 28 29 0a 2a 2a 20  ddenColumn().** 
129c0 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 6e  only works for n
129d0 6f 6e 2d 76 69 72 74 75 61 6c 20 74 61 62 6c 65  on-virtual table
129e0 73 20 28 6f 72 64 69 6e 61 72 79 20 74 61 62 6c  s (ordinary tabl
129f0 65 73 20 61 6e 64 20 76 69 65 77 73 29 20 61 6e  es and views) an
12a00 64 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 66  d is.** always f
12a10 61 6c 73 65 20 75 6e 6c 65 73 73 20 53 51 4c 49  alse unless SQLI
12a20 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e  TE_ENABLE_HIDDEN
12a30 5f 43 4f 4c 55 4d 4e 53 20 69 73 20 64 65 66 69  _COLUMNS is defi
12a40 6e 65 64 2e 20 20 54 68 65 0a 2a 2a 20 49 73 48  ned.  The.** IsH
12a50 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 29 20 6d 61  iddenColumn() ma
12a60 63 72 6f 20 69 73 20 67 65 6e 65 72 61 6c 20 70  cro is general p
12a70 75 72 70 6f 73 65 2e 0a 2a 2f 0a 23 69 66 20 64  urpose..*/.#if d
12a80 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
12a90 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55  ABLE_HIDDEN_COLU
12aa0 4d 4e 53 29 0a 23 20 20 64 65 66 69 6e 65 20 49  MNS).#  define I
12ab0 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29  sHiddenColumn(X)
12ac0 20 20 20 20 20 20 20 20 20 28 28 28 58 29 2d 3e           (((X)->
12ad0 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c  colFlags & COLFL
12ae0 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23  AG_HIDDEN)!=0).#
12af0 20 20 64 65 66 69 6e 65 20 49 73 4f 72 64 69 6e    define IsOrdin
12b00 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28  aryHiddenColumn(
12b10 58 29 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61  X) (((X)->colFla
12b20 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44  gs & COLFLAG_HID
12b30 44 45 4e 29 21 3d 30 29 0a 23 65 6c 69 66 20 21  DEN)!=0).#elif !
12b40 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
12b50 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
12b60 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48 69  ).#  define IsHi
12b70 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20  ddenColumn(X)   
12b80 20 20 20 20 20 20 28 28 28 58 29 2d 3e 63 6f 6c        (((X)->col
12b90 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f  Flags & COLFLAG_
12ba0 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 20 20 64  HIDDEN)!=0).#  d
12bb0 65 66 69 6e 65 20 49 73 4f 72 64 69 6e 61 72 79  efine IsOrdinary
12bc0 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20  HiddenColumn(X) 
12bd0 30 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e  0.#else.#  defin
12be0 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  e IsHiddenColumn
12bf0 28 58 29 20 20 20 20 20 20 20 20 20 30 0a 23 20  (X)         0.# 
12c00 20 64 65 66 69 6e 65 20 49 73 4f 72 64 69 6e 61   define IsOrdina
12c10 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58  ryHiddenColumn(X
12c20 29 20 30 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 20  ) 0.#endif.../* 
12c30 44 6f 65 73 20 74 68 65 20 74 61 62 6c 65 20 68  Does the table h
12c40 61 76 65 20 61 20 72 6f 77 69 64 20 2a 2f 0a 23  ave a rowid */.#
12c50 64 65 66 69 6e 65 20 48 61 73 52 6f 77 69 64 28  define HasRowid(
12c60 58 29 20 20 20 20 20 28 28 28 58 29 2d 3e 74 61  X)     (((X)->ta
12c70 62 46 6c 61 67 73 20 26 20 54 46 5f 57 69 74 68  bFlags & TF_With
12c80 6f 75 74 52 6f 77 69 64 29 3d 3d 30 29 0a 23 64  outRowid)==0).#d
12c90 65 66 69 6e 65 20 56 69 73 69 62 6c 65 52 6f 77  efine VisibleRow
12ca0 69 64 28 58 29 20 28 28 28 58 29 2d 3e 74 61 62  id(X) (((X)->tab
12cb0 46 6c 61 67 73 20 26 20 54 46 5f 4e 6f 56 69 73  Flags & TF_NoVis
12cc0 69 62 6c 65 52 6f 77 69 64 29 3d 3d 30 29 0a 0a  ibleRowid)==0)..
12cd0 2f 2a 0a 2a 2a 20 45 61 63 68 20 66 6f 72 65 69  /*.** Each forei
12ce0 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
12cf0 74 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  t is an instance
12d00 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
12d10 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a  g structure..**.
12d20 2a 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b 65 79  ** A foreign key
12d30 20 69 73 20 61 73 73 6f 63 69 61 74 65 64 20 77   is associated w
12d40 69 74 68 20 74 77 6f 20 74 61 62 6c 65 73 2e 20  ith two tables. 
12d50 20 54 68 65 20 22 66 72 6f 6d 22 20 74 61 62 6c   The "from" tabl
12d60 65 20 69 73 0a 2a 2a 20 74 68 65 20 74 61 62 6c  e is.** the tabl
12d70 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  e that contains 
12d80 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63  the REFERENCES c
12d90 6c 61 75 73 65 20 74 68 61 74 20 63 72 65 61 74  lause that creat
12da0 65 73 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a  es the foreign.*
12db0 2a 20 6b 65 79 2e 20 20 54 68 65 20 22 74 6f 22  * key.  The "to"
12dc0 20 74 61 62 6c 65 20 69 73 20 74 68 65 20 74 61   table is the ta
12dd0 62 6c 65 20 74 68 61 74 20 69 73 20 6e 61 6d 65  ble that is name
12de0 64 20 69 6e 20 74 68 65 20 52 45 46 45 52 45 4e  d in the REFEREN
12df0 43 45 53 20 63 6c 61 75 73 65 2e 0a 2a 2a 20 43  CES clause..** C
12e00 6f 6e 73 69 64 65 72 20 74 68 69 73 20 65 78 61  onsider this exa
12e10 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  mple:.**.**     
12e20 43 52 45 41 54 45 20 54 41 42 4c 45 20 65 78 31  CREATE TABLE ex1
12e30 28 0a 2a 2a 20 20 20 20 20 20 20 61 20 49 4e 54  (.**       a INT
12e40 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
12e50 2c 0a 2a 2a 20 20 20 20 20 20 20 62 20 49 4e 54  ,.**       b INT
12e60 45 47 45 52 20 43 4f 4e 53 54 52 41 49 4e 54 20  EGER CONSTRAINT 
12e70 66 6b 31 20 52 45 46 45 52 45 4e 43 45 53 20 65  fk1 REFERENCES e
12e80 78 32 28 78 29 0a 2a 2a 20 20 20 20 20 29 3b 0a  x2(x).**     );.
12e90 2a 2a 0a 2a 2a 20 46 6f 72 20 66 6f 72 65 69 67  **.** For foreig
12ea0 6e 20 6b 65 79 20 22 66 6b 31 22 2c 20 74 68 65  n key "fk1", the
12eb0 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 22   from-table is "
12ec0 65 78 31 22 20 61 6e 64 20 74 68 65 20 74 6f 2d  ex1" and the to-
12ed0 74 61 62 6c 65 20 69 73 20 22 65 78 32 22 2e 0a  table is "ex2"..
12ee0 2a 2a 20 45 71 75 69 76 61 6c 65 6e 74 20 6e 61  ** Equivalent na
12ef0 6d 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 66  mes:.**.**     f
12f00 72 6f 6d 2d 74 61 62 6c 65 20 3d 3d 20 63 68 69  rom-table == chi
12f10 6c 64 2d 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20  ld-table.**     
12f20 20 20 74 6f 2d 74 61 62 6c 65 20 3d 3d 20 70 61    to-table == pa
12f30 72 65 6e 74 2d 74 61 62 6c 65 0a 2a 2a 0a 2a 2a  rent-table.**.**
12f40 20 45 61 63 68 20 52 45 46 45 52 45 4e 43 45 53   Each REFERENCES
12f50 20 63 6c 61 75 73 65 20 67 65 6e 65 72 61 74 65   clause generate
12f60 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  s an instance of
12f70 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
12f80 74 72 75 63 74 75 72 65 0a 2a 2a 20 77 68 69 63  tructure.** whic
12f90 68 20 69 73 20 61 74 74 61 63 68 65 64 20 74 6f  h is attached to
12fa0 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 2e   the from-table.
12fb0 20 20 54 68 65 20 74 6f 2d 74 61 62 6c 65 20 6e    The to-table n
12fc0 65 65 64 20 6e 6f 74 20 65 78 69 73 74 20 77 68  eed not exist wh
12fd0 65 6e 0a 2a 2a 20 74 68 65 20 66 72 6f 6d 2d 74  en.** the from-t
12fe0 61 62 6c 65 20 69 73 20 63 72 65 61 74 65 64 2e  able is created.
12ff0 20 20 54 68 65 20 65 78 69 73 74 65 6e 63 65 20    The existence 
13000 6f 66 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20  of the to-table 
13010 69 73 20 6e 6f 74 20 63 68 65 63 6b 65 64 2e 0a  is not checked..
13020 2a 2a 0a 2a 2a 20 54 68 65 20 6c 69 73 74 20 6f  **.** The list o
13030 66 20 61 6c 6c 20 70 61 72 65 6e 74 73 20 66 6f  f all parents fo
13040 72 20 63 68 69 6c 64 20 54 61 62 6c 65 20 58 20  r child Table X 
13050 69 73 20 68 65 6c 64 20 61 74 20 58 2e 70 46 4b  is held at X.pFK
13060 65 79 2e 0a 2a 2a 0a 2a 2a 20 41 20 6c 69 73 74  ey..**.** A list
13070 20 6f 66 20 61 6c 6c 20 63 68 69 6c 64 72 65 6e   of all children
13080 20 66 6f 72 20 61 20 74 61 62 6c 65 20 6e 61 6d   for a table nam
13090 65 64 20 5a 20 28 77 68 69 63 68 20 6d 69 67 68  ed Z (which migh
130a0 74 20 6e 6f 74 20 65 76 65 6e 20 65 78 69 73 74  t not even exist
130b0 29 0a 2a 2a 20 69 73 20 68 65 6c 64 20 69 6e 20  ).** is held in 
130c0 53 63 68 65 6d 61 2e 66 6b 65 79 48 61 73 68 20  Schema.fkeyHash 
130d0 77 69 74 68 20 61 20 68 61 73 68 20 6b 65 79 20  with a hash key 
130e0 6f 66 20 5a 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  of Z..*/.struct 
130f0 46 4b 65 79 20 7b 0a 20 20 54 61 62 6c 65 20 2a  FKey {.  Table *
13100 70 46 72 6f 6d 3b 20 20 20 20 20 2f 2a 20 54 61  pFrom;     /* Ta
13110 62 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ble containing t
13120 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c  he REFERENCES cl
13130 61 75 73 65 20 28 61 6b 61 3a 20 43 68 69 6c 64  ause (aka: Child
13140 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65  ) */.  FKey *pNe
13150 78 74 46 72 6f 6d 3b 20 20 2f 2a 20 4e 65 78 74  xtFrom;  /* Next
13160 20 46 4b 65 79 20 77 69 74 68 20 74 68 65 20 73   FKey with the s
13170 61 6d 65 20 69 6e 20 70 46 72 6f 6d 2e 20 4e 65  ame in pFrom. Ne
13180 78 74 20 70 61 72 65 6e 74 20 6f 66 20 70 46 72  xt parent of pFr
13190 6f 6d 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54  om */.  char *zT
131a0 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d  o;        /* Nam
131b0 65 20 6f 66 20 74 61 62 6c 65 20 74 68 61 74 20  e of table that 
131c0 74 68 65 20 6b 65 79 20 70 6f 69 6e 74 73 20 74  the key points t
131d0 6f 20 28 61 6b 61 3a 20 50 61 72 65 6e 74 29 20  o (aka: Parent) 
131e0 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 4e 65 78 74  */.  FKey *pNext
131f0 54 6f 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 77  To;    /* Next w
13200 69 74 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f  ith the same zTo
13210 2e 20 4e 65 78 74 20 63 68 69 6c 64 20 6f 66 20  . Next child of 
13220 7a 54 6f 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a  zTo. */.  FKey *
13230 70 50 72 65 76 54 6f 3b 20 20 20 20 2f 2a 20 50  pPrevTo;    /* P
13240 72 65 76 69 6f 75 73 20 77 69 74 68 20 74 68 65  revious with the
13250 20 73 61 6d 65 20 7a 54 6f 20 2a 2f 0a 20 20 69   same zTo */.  i
13260 6e 74 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20  nt nCol;        
13270 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
13280 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20 6b 65  lumns in this ke
13290 79 20 2a 2f 0a 20 20 2f 2a 20 45 56 3a 20 52 2d  y */.  /* EV: R-
132a0 33 30 33 32 33 2d 32 31 39 31 37 20 2a 2f 0a 20  30323-21917 */. 
132b0 20 75 38 20 69 73 44 65 66 65 72 72 65 64 3b 20   u8 isDeferred; 
132c0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
132d0 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 68 65 63   constraint chec
132e0 6b 69 6e 67 20 69 73 20 64 65 66 65 72 72 65 64  king is deferred
132f0 20 74 69 6c 6c 20 43 4f 4d 4d 49 54 20 2a 2f 0a   till COMMIT */.
13300 20 20 75 38 20 61 41 63 74 69 6f 6e 5b 32 5d 3b    u8 aAction[2];
13310 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 20 44 45          /* ON DE
13320 4c 45 54 45 20 61 6e 64 20 4f 4e 20 55 50 44 41  LETE and ON UPDA
13330 54 45 20 61 63 74 69 6f 6e 73 2c 20 72 65 73 70  TE actions, resp
13340 65 63 74 69 76 65 6c 79 20 2a 2f 0a 20 20 54 72  ectively */.  Tr
13350 69 67 67 65 72 20 2a 61 70 54 72 69 67 67 65 72  igger *apTrigger
13360 5b 32 5d 3b 2f 2a 20 54 72 69 67 67 65 72 73 20  [2];/* Triggers 
13370 66 6f 72 20 61 41 63 74 69 6f 6e 5b 5d 20 61 63  for aAction[] ac
13380 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63  tions */.  struc
13390 74 20 73 43 6f 6c 4d 61 70 20 7b 20 20 20 20 20  t sColMap {     
133a0 20 2f 2a 20 4d 61 70 70 69 6e 67 20 6f 66 20 63   /* Mapping of c
133b0 6f 6c 75 6d 6e 73 20 69 6e 20 70 46 72 6f 6d 20  olumns in pFrom 
133c0 74 6f 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 7a 54  to columns in zT
133d0 6f 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 46 72  o */.    int iFr
133e0 6f 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  om;            /
133f0 2a 20 49 6e 64 65 78 20 6f 66 20 63 6f 6c 75 6d  * Index of colum
13400 6e 20 69 6e 20 70 46 72 6f 6d 20 2a 2f 0a 20 20  n in pFrom */.  
13410 20 20 63 68 61 72 20 2a 7a 43 6f 6c 3b 20 20 20    char *zCol;   
13420 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
13430 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 7a 54 6f  of column in zTo
13440 2e 20 20 49 66 20 4e 55 4c 4c 20 75 73 65 20 50  .  If NULL use P
13450 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20 20  RIMARY KEY */.  
13460 7d 20 61 43 6f 6c 5b 31 5d 3b 20 20 20 20 20 20  } aCol[1];      
13470 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74        /* One ent
13480 72 79 20 66 6f 72 20 65 61 63 68 20 6f 66 20 6e  ry for each of n
13490 43 6f 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 7d  Col columns */.}
134a0 3b 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 69 74 65 20  ;../*.** SQLite 
134b0 73 75 70 70 6f 72 74 73 20 6d 61 6e 79 20 64 69  supports many di
134c0 66 66 65 72 65 6e 74 20 77 61 79 73 20 74 6f 20  fferent ways to 
134d0 72 65 73 6f 6c 76 65 20 61 20 63 6f 6e 73 74 72  resolve a constr
134e0 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 2e 20 20  aint.** error.  
134f0 52 4f 4c 4c 42 41 43 4b 20 70 72 6f 63 65 73 73  ROLLBACK process
13500 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 20 61  ing means that a
13510 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
13520 61 74 69 6f 6e 0a 2a 2a 20 63 61 75 73 65 73 20  ation.** causes 
13530 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e  the operation in
13540 20 70 72 6f 63 65 73 73 20 74 6f 20 66 61 69 6c   process to fail
13550 20 61 6e 64 20 66 6f 72 20 74 68 65 20 63 75 72   and for the cur
13560 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  rent transaction
13570 0a 2a 2a 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64  .** to be rolled
13580 20 62 61 63 6b 2e 20 20 41 42 4f 52 54 20 70 72   back.  ABORT pr
13590 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74  ocessing means t
135a0 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20  he operation in 
135b0 70 72 6f 63 65 73 73 0a 2a 2a 20 66 61 69 6c 73  process.** fails
135c0 20 61 6e 64 20 61 6e 79 20 70 72 69 6f 72 20 63   and any prior c
135d0 68 61 6e 67 65 73 20 66 72 6f 6d 20 74 68 61 74  hanges from that
135e0 20 6f 6e 65 20 6f 70 65 72 61 74 69 6f 6e 20 61   one operation a
135f0 72 65 20 62 61 63 6b 65 64 20 6f 75 74 2c 0a 2a  re backed out,.*
13600 2a 20 62 75 74 20 74 68 65 20 74 72 61 6e 73 61  * but the transa
13610 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 72 6f 6c  ction is not rol
13620 6c 65 64 20 62 61 63 6b 2e 20 20 46 41 49 4c 20  led back.  FAIL 
13630 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73  processing means
13640 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 6f 70 65   that.** the ope
13650 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65  ration in progre
13660 73 73 20 73 74 6f 70 73 20 61 6e 64 20 72 65 74  ss stops and ret
13670 75 72 6e 73 20 61 6e 20 65 72 72 6f 72 20 63 6f  urns an error co
13680 64 65 2e 20 20 42 75 74 20 70 72 69 6f 72 0a 2a  de.  But prior.*
13690 2a 20 63 68 61 6e 67 65 73 20 64 75 65 20 74 6f  * changes due to
136a0 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74   the same operat
136b0 69 6f 6e 20 61 72 65 20 6e 6f 74 20 62 61 63 6b  ion are not back
136c0 65 64 20 6f 75 74 20 61 6e 64 20 6e 6f 20 72 6f  ed out and no ro
136d0 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 63 63 75 72 73  llback.** occurs
136e0 2e 20 20 49 47 4e 4f 52 45 20 6d 65 61 6e 73 20  .  IGNORE means 
136f0 74 68 61 74 20 74 68 65 20 70 61 72 74 69 63 75  that the particu
13700 6c 61 72 20 72 6f 77 20 74 68 61 74 20 63 61 75  lar row that cau
13710 73 65 64 20 74 68 65 20 63 6f 6e 73 74 72 61 69  sed the constrai
13720 6e 74 0a 2a 2a 20 65 72 72 6f 72 20 69 73 20 6e  nt.** error is n
13730 6f 74 20 69 6e 73 65 72 74 65 64 20 6f 72 20 75  ot inserted or u
13740 70 64 61 74 65 64 2e 20 20 50 72 6f 63 65 73 73  pdated.  Process
13750 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e  ing continues an
13760 64 20 6e 6f 20 65 72 72 6f 72 0a 2a 2a 20 69 73  d no error.** is
13770 20 72 65 74 75 72 6e 65 64 2e 20 20 52 45 50 4c   returned.  REPL
13780 41 43 45 20 6d 65 61 6e 73 20 74 68 61 74 20 70  ACE means that p
13790 72 65 65 78 69 73 74 69 6e 67 20 64 61 74 61 62  reexisting datab
137a0 61 73 65 20 72 6f 77 73 20 74 68 61 74 20 63 61  ase rows that ca
137b0 75 73 65 64 0a 2a 2a 20 61 20 55 4e 49 51 55 45  used.** a UNIQUE
137c0 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
137d0 61 74 69 6f 6e 20 61 72 65 20 72 65 6d 6f 76 65  ation are remove
137e0 64 20 73 6f 20 74 68 61 74 20 74 68 65 20 6e 65  d so that the ne
137f0 77 20 69 6e 73 65 72 74 20 6f 72 0a 2a 2a 20 75  w insert or.** u
13800 70 64 61 74 65 20 63 61 6e 20 70 72 6f 63 65 65  pdate can procee
13810 64 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63  d.  Processing c
13820 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20  ontinues and no 
13830 65 72 72 6f 72 20 69 73 20 72 65 70 6f 72 74 65  error is reporte
13840 64 2e 0a 2a 2a 0a 2a 2a 20 52 45 53 54 52 49 43  d..**.** RESTRIC
13850 54 2c 20 53 45 54 4e 55 4c 4c 2c 20 61 6e 64 20  T, SETNULL, and 
13860 43 41 53 43 41 44 45 20 61 63 74 69 6f 6e 73 20  CASCADE actions 
13870 61 70 70 6c 79 20 6f 6e 6c 79 20 74 6f 20 66 6f  apply only to fo
13880 72 65 69 67 6e 20 6b 65 79 73 2e 0a 2a 2a 20 52  reign keys..** R
13890 45 53 54 52 49 43 54 20 69 73 20 74 68 65 20 73  ESTRICT is the s
138a0 61 6d 65 20 61 73 20 41 42 4f 52 54 20 66 6f 72  ame as ABORT for
138b0 20 49 4d 4d 45 44 49 41 54 45 20 66 6f 72 65 69   IMMEDIATE forei
138c0 67 6e 20 6b 65 79 73 20 61 6e 64 20 74 68 65 0a  gn keys and the.
138d0 2a 2a 20 73 61 6d 65 20 61 73 20 52 4f 4c 4c 42  ** same as ROLLB
138e0 41 43 4b 20 66 6f 72 20 44 45 46 45 52 52 45 44  ACK for DEFERRED
138f0 20 6b 65 79 73 2e 20 20 53 45 54 4e 55 4c 4c 20   keys.  SETNULL 
13900 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 66  means that the f
13910 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 69 73  oreign.** key is
13920 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 20 20 43   set to NULL.  C
13930 41 53 43 41 44 45 20 6d 65 61 6e 73 20 74 68 61  ASCADE means tha
13940 74 20 61 20 44 45 4c 45 54 45 20 6f 72 20 55 50  t a DELETE or UP
13950 44 41 54 45 20 6f 66 20 74 68 65 0a 2a 2a 20 72  DATE of the.** r
13960 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20  eferenced table 
13970 72 6f 77 20 69 73 20 70 72 6f 70 61 67 61 74 65  row is propagate
13980 64 20 69 6e 74 6f 20 74 68 65 20 72 6f 77 20 74  d into the row t
13990 68 61 74 20 68 6f 6c 64 73 20 74 68 65 0a 2a 2a  hat holds the.**
139a0 20 66 6f 72 65 69 67 6e 20 6b 65 79 2e 0a 2a 2a   foreign key..**
139b0 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
139c0 67 20 73 79 6d 62 6f 6c 69 63 20 76 61 6c 75 65  g symbolic value
139d0 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 72 65  s are used to re
139e0 63 6f 72 64 20 77 68 69 63 68 20 74 79 70 65 0a  cord which type.
139f0 2a 2a 20 6f 66 20 61 63 74 69 6f 6e 20 74 6f 20  ** of action to 
13a00 74 61 6b 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  take..*/.#define
13a10 20 4f 45 5f 4e 6f 6e 65 20 20 20 20 20 30 20 20   OE_None     0  
13a20 20 2f 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20   /* There is no 
13a30 63 6f 6e 73 74 72 61 69 6e 74 20 74 6f 20 63 68  constraint to ch
13a40 65 63 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  eck */.#define O
13a50 45 5f 52 6f 6c 6c 62 61 63 6b 20 31 20 20 20 2f  E_Rollback 1   /
13a60 2a 20 46 61 69 6c 20 74 68 65 20 6f 70 65 72 61  * Fail the opera
13a70 74 69 6f 6e 20 61 6e 64 20 72 6f 6c 6c 62 61 63  tion and rollbac
13a80 6b 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  k the transactio
13a90 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  n */.#define OE_
13aa0 41 62 6f 72 74 20 20 20 20 32 20 20 20 2f 2a 20  Abort    2   /* 
13ab0 42 61 63 6b 20 6f 75 74 20 63 68 61 6e 67 65 73  Back out changes
13ac0 20 62 75 74 20 64 6f 20 6e 6f 20 72 6f 6c 6c 62   but do no rollb
13ad0 61 63 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ack transaction 
13ae0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 46 61  */.#define OE_Fa
13af0 69 6c 20 20 20 20 20 33 20 20 20 2f 2a 20 53 74  il     3   /* St
13b00 6f 70 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  op the operation
13b10 20 62 75 74 20 6c 65 61 76 65 20 61 6c 6c 20 70   but leave all p
13b20 72 69 6f 72 20 63 68 61 6e 67 65 73 20 2a 2f 0a  rior changes */.
13b30 23 64 65 66 69 6e 65 20 4f 45 5f 49 67 6e 6f 72  #define OE_Ignor
13b40 65 20 20 20 34 20 20 20 2f 2a 20 49 67 6e 6f 72  e   4   /* Ignor
13b50 65 20 74 68 65 20 65 72 72 6f 72 2e 20 44 6f 20  e the error. Do 
13b60 6e 6f 74 20 64 6f 20 74 68 65 20 49 4e 53 45 52  not do the INSER
13b70 54 20 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 23  T or UPDATE */.#
13b80 64 65 66 69 6e 65 20 4f 45 5f 52 65 70 6c 61 63  define OE_Replac
13b90 65 20 20 35 20 20 20 2f 2a 20 44 65 6c 65 74 65  e  5   /* Delete
13ba0 20 65 78 69 73 74 69 6e 67 20 72 65 63 6f 72 64   existing record
13bb0 2c 20 74 68 65 6e 20 64 6f 20 49 4e 53 45 52 54  , then do INSERT
13bc0 20 6f 72 20 55 50 44 41 54 45 20 2a 2f 0a 0a 23   or UPDATE */..#
13bd0 64 65 66 69 6e 65 20 4f 45 5f 52 65 73 74 72 69  define OE_Restri
13be0 63 74 20 36 20 20 20 2f 2a 20 4f 45 5f 41 62 6f  ct 6   /* OE_Abo
13bf0 72 74 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45  rt for IMMEDIATE
13c00 2c 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 66 6f  , OE_Rollback fo
13c10 72 20 44 45 46 45 52 52 45 44 20 2a 2f 0a 23 64  r DEFERRED */.#d
13c20 65 66 69 6e 65 20 4f 45 5f 53 65 74 4e 75 6c 6c  efine OE_SetNull
13c30 20 20 37 20 20 20 2f 2a 20 53 65 74 20 74 68 65    7   /* Set the
13c40 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c   foreign key val
13c50 75 65 20 74 6f 20 4e 55 4c 4c 20 2a 2f 0a 23 64  ue to NULL */.#d
13c60 65 66 69 6e 65 20 4f 45 5f 53 65 74 44 66 6c 74  efine OE_SetDflt
13c70 20 20 38 20 20 20 2f 2a 20 53 65 74 20 74 68 65    8   /* Set the
13c80 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 76 61 6c   foreign key val
13c90 75 65 20 74 6f 20 69 74 73 20 64 65 66 61 75 6c  ue to its defaul
13ca0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  t */.#define OE_
13cb0 43 61 73 63 61 64 65 20 20 39 20 20 20 2f 2a 20  Cascade  9   /* 
13cc0 43 61 73 63 61 64 65 20 74 68 65 20 63 68 61 6e  Cascade the chan
13cd0 67 65 73 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20  ges */..#define 
13ce0 4f 45 5f 44 65 66 61 75 6c 74 20 20 31 30 20 20  OE_Default  10  
13cf0 2f 2a 20 44 6f 20 77 68 61 74 65 76 65 72 20 74  /* Do whatever t
13d00 68 65 20 64 65 66 61 75 6c 74 20 61 63 74 69 6f  he default actio
13d10 6e 20 69 73 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20  n is */.../*.** 
13d20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
13d30 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
13d40 75 63 74 75 72 65 20 69 73 20 70 61 73 73 65 64  ucture is passed
13d50 20 61 73 20 74 68 65 20 66 69 72 73 74 0a 2a 2a   as the first.**
13d60 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 73 71 6c   argument to sql
13d70 69 74 65 33 56 64 62 65 4b 65 79 43 6f 6d 70 61  ite3VdbeKeyCompa
13d80 72 65 20 61 6e 64 20 69 73 20 75 73 65 64 20 74  re and is used t
13d90 6f 20 63 6f 6e 74 72 6f 6c 20 74 68 65 0a 2a 2a  o control the.**
13da0 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20 74   comparison of t
13db0 68 65 20 74 77 6f 20 69 6e 64 65 78 20 6b 65 79  he two index key
13dc0 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68  s..**.** Note th
13dd0 61 74 20 61 53 6f 72 74 4f 72 64 65 72 5b 5d 20  at aSortOrder[] 
13de0 61 6e 64 20 61 43 6f 6c 6c 5b 5d 20 68 61 76 65  and aColl[] have
13df0 20 6e 46 69 65 6c 64 2b 31 20 73 6c 6f 74 73 2e   nField+1 slots.
13e00 20 20 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 6e    There.** are n
13e10 46 69 65 6c 64 20 73 6c 6f 74 73 20 66 6f 72 20  Field slots for 
13e20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 61  the columns of a
13e30 6e 20 69 6e 64 65 78 20 74 68 65 6e 20 6f 6e 65  n index then one
13e40 20 65 78 74 72 61 20 73 6c 6f 74 0a 2a 2a 20 66   extra slot.** f
13e50 6f 72 20 74 68 65 20 72 6f 77 69 64 20 61 74 20  or the rowid at 
13e60 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75  the end..*/.stru
13e70 63 74 20 4b 65 79 49 6e 66 6f 20 7b 0a 20 20 75  ct KeyInfo {.  u
13e80 33 32 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20  32 nRef;        
13e90 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
13ea0 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20 74 68  references to th
13eb0 69 73 20 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63  is KeyInfo objec
13ec0 74 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20  t */.  u8 enc;  
13ed0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
13ee0 78 74 20 65 6e 63 6f 64 69 6e 67 20 2d 20 6f 6e  xt encoding - on
13ef0 65 20 6f 66 20 74 68 65 20 53 51 4c 49 54 45 5f  e of the SQLITE_
13f00 55 54 46 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20  UTF* values */. 
13f10 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20 20   u16 nField;    
13f20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
13f30 66 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20 69 6e  f key columns in
13f40 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20   the index */.  
13f50 75 31 36 20 6e 58 46 69 65 6c 64 3b 20 20 20 20  u16 nXField;    
13f60 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
13f70 20 63 6f 6c 75 6d 6e 73 20 62 65 79 6f 6e 64 20   columns beyond 
13f80 74 68 65 20 6b 65 79 20 63 6f 6c 75 6d 6e 73 20  the key columns 
13f90 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  */.  sqlite3 *db
13fa0 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ;        /* The 
13fb0 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
13fc0 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f  ion */.  u8 *aSo
13fd0 72 74 4f 72 64 65 72 3b 20 20 20 20 20 2f 2a 20  rtOrder;     /* 
13fe0 53 6f 72 74 20 6f 72 64 65 72 20 66 6f 72 20 65  Sort order for e
13ff0 61 63 68 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20  ach column. */. 
14000 20 43 6f 6c 6c 53 65 71 20 2a 61 43 6f 6c 6c 5b   CollSeq *aColl[
14010 31 5d 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e  1];  /* Collatin
14020 67 20 73 65 71 75 65 6e 63 65 20 66 6f 72 20 65  g sequence for e
14030 61 63 68 20 74 65 72 6d 20 6f 66 20 74 68 65 20  ach term of the 
14040 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  key */.};../*.**
14050 20 54 68 69 73 20 6f 62 6a 65 63 74 20 68 6f 6c   This object hol
14060 64 73 20 61 20 72 65 63 6f 72 64 20 77 68 69 63  ds a record whic
14070 68 20 68 61 73 20 62 65 65 6e 20 70 61 72 73 65  h has been parse
14080 64 20 6f 75 74 20 69 6e 74 6f 20 69 6e 64 69 76  d out into indiv
14090 69 64 75 61 6c 0a 2a 2a 20 66 69 65 6c 64 73 2c  idual.** fields,
140a0 20 66 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65   for the purpose
140b0 73 20 6f 66 20 64 6f 69 6e 67 20 61 20 63 6f 6d  s of doing a com
140c0 70 61 72 69 73 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41  parison..**.** A
140d0 20 72 65 63 6f 72 64 20 69 73 20 61 6e 20 6f 62   record is an ob
140e0 6a 65 63 74 20 74 68 61 74 20 63 6f 6e 74 61 69  ject that contai
140f0 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 66  ns one or more f
14100 69 65 6c 64 73 20 6f 66 20 64 61 74 61 2e 0a 2a  ields of data..*
14110 2a 20 52 65 63 6f 72 64 73 20 61 72 65 20 75 73  * Records are us
14120 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ed to store the 
14130 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20 74 61 62  content of a tab
14140 6c 65 20 72 6f 77 20 61 6e 64 20 74 6f 20 73 74  le row and to st
14150 6f 72 65 0a 2a 2a 20 74 68 65 20 6b 65 79 20 6f  ore.** the key o
14160 66 20 61 6e 20 69 6e 64 65 78 2e 20 20 41 20 62  f an index.  A b
14170 6c 6f 62 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20  lob encoding of 
14180 61 20 72 65 63 6f 72 64 20 69 73 20 63 72 65 61  a record is crea
14190 74 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 4f 50  ted by.** the OP
141a0 5f 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f  _MakeRecord opco
141b0 64 65 20 6f 66 20 74 68 65 20 56 44 42 45 20 61  de of the VDBE a
141c0 6e 64 20 69 73 20 64 69 73 61 73 73 65 6d 62 6c  nd is disassembl
141d0 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 4f 50 5f  ed by the.** OP_
141e0 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 0a 2a  Column opcode..*
141f0 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
14200 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63 74 20   of this object 
14210 73 65 72 76 65 73 20 61 73 20 61 20 22 6b 65 79  serves as a "key
14220 22 20 66 6f 72 20 64 6f 69 6e 67 20 61 20 73 65  " for doing a se
14230 61 72 63 68 20 6f 6e 0a 2a 2a 20 61 6e 20 69 6e  arch on.** an in
14240 64 65 78 20 62 2b 74 72 65 65 2e 20 54 68 65 20  dex b+tree. The 
14250 67 6f 61 6c 20 6f 66 20 74 68 65 20 73 65 61 72  goal of the sear
14260 63 68 20 69 73 20 74 6f 20 66 69 6e 64 20 74 68  ch is to find th
14270 65 20 65 6e 74 72 79 20 74 68 61 74 0a 2a 2a 20  e entry that.** 
14280 69 73 20 63 6c 6f 73 65 64 20 74 6f 20 74 68 65  is closed to the
14290 20 6b 65 79 20 64 65 73 63 72 69 62 65 64 20 62   key described b
142a0 79 20 74 68 69 73 20 6f 62 6a 65 63 74 2e 20 20  y this object.  
142b0 54 68 69 73 20 6f 62 6a 65 63 74 20 6d 69 67 68  This object migh
142c0 74 20 68 6f 6c 64 0a 2a 2a 20 6a 75 73 74 20 61  t hold.** just a
142d0 20 70 72 65 66 69 78 20 6f 66 20 74 68 65 20 6b   prefix of the k
142e0 65 79 2e 20 20 54 68 65 20 6e 75 6d 62 65 72 20  ey.  The number 
142f0 6f 66 20 66 69 65 6c 64 73 20 69 73 20 67 69 76  of fields is giv
14300 65 6e 20 62 79 0a 2a 2a 20 70 4b 65 79 49 6e 66  en by.** pKeyInf
14310 6f 2d 3e 6e 46 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a  o->nField..**.**
14320 20 54 68 65 20 72 31 20 61 6e 64 20 72 32 20 66   The r1 and r2 f
14330 69 65 6c 64 73 20 61 72 65 20 74 68 65 20 76 61  ields are the va
14340 6c 75 65 73 20 74 6f 20 72 65 74 75 72 6e 20 69  lues to return i
14350 66 20 74 68 69 73 20 6b 65 79 20 69 73 20 6c 65  f this key is le
14360 73 73 20 74 68 61 6e 0a 2a 2a 20 6f 72 20 67 72  ss than.** or gr
14370 65 61 74 65 72 20 74 68 61 6e 20 61 20 6b 65 79  eater than a key
14380 20 69 6e 20 74 68 65 20 62 74 72 65 65 2c 20 72   in the btree, r
14390 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 54 68  espectively.  Th
143a0 65 73 65 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79  ese are normally
143b0 0a 2a 2a 20 2d 31 20 61 6e 64 20 2b 31 20 72 65  .** -1 and +1 re
143c0 73 70 65 63 74 69 76 65 6c 79 2c 20 62 75 74 20  spectively, but 
143d0 6d 69 67 68 74 20 62 65 20 69 6e 76 65 72 74 65  might be inverte
143e0 64 20 74 6f 20 2b 31 20 61 6e 64 20 2d 31 20 69  d to +1 and -1 i
143f0 66 20 74 68 65 20 62 2d 74 72 65 65 0a 2a 2a 20  f the b-tree.** 
14400 69 73 20 69 6e 20 44 45 53 43 20 6f 72 64 65 72  is in DESC order
14410 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6b 65 79 20  ..**.** The key 
14420 63 6f 6d 70 61 72 69 73 6f 6e 20 66 75 6e 63 74  comparison funct
14430 69 6f 6e 73 20 61 63 74 75 61 6c 6c 79 20 72 65  ions actually re
14440 74 75 72 6e 20 64 65 66 61 75 6c 74 5f 72 63 20  turn default_rc 
14450 77 68 65 6e 20 74 68 65 79 20 66 69 6e 64 0a 2a  when they find.*
14460 2a 20 61 6e 20 65 71 75 61 6c 73 20 63 6f 6d 70  * an equals comp
14470 61 72 69 73 6f 6e 2e 20 20 64 65 66 61 75 6c 74  arison.  default
14480 5f 72 63 20 63 61 6e 20 62 65 20 2d 31 2c 20 30  _rc can be -1, 0
14490 2c 20 6f 72 20 2b 31 2e 20 20 49 66 20 74 68 65  , or +1.  If the
144a0 72 65 20 61 72 65 0a 2a 2a 20 6d 75 6c 74 69 70  re are.** multip
144b0 6c 65 20 65 6e 74 72 69 65 73 20 69 6e 20 74 68  le entries in th
144c0 65 20 62 2d 74 72 65 65 20 77 69 74 68 20 74 68  e b-tree with th
144d0 65 20 73 61 6d 65 20 6b 65 79 20 28 77 68 65 6e  e same key (when
144e0 20 6f 6e 6c 79 20 6c 6f 6f 6b 69 6e 67 0a 2a 2a   only looking.**
144f0 20 61 74 20 74 68 65 20 66 69 72 73 74 20 70 4b   at the first pK
14500 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 73 2c  eyInfo->nFields,
14510 29 20 74 68 65 6e 20 64 65 66 61 75 6c 74 5f 72  ) then default_r
14520 63 20 63 61 6e 20 62 65 20 73 65 74 20 74 6f 20  c can be set to 
14530 2d 31 20 74 6f 0a 2a 2a 20 63 61 75 73 65 20 74  -1 to.** cause t
14540 68 65 20 73 65 61 72 63 68 20 74 6f 20 66 69 6e  he search to fin
14550 64 20 74 68 65 20 6c 61 73 74 20 6d 61 74 63 68  d the last match
14560 2c 20 6f 72 20 2b 31 20 74 6f 20 63 61 75 73 65  , or +1 to cause
14570 20 74 68 65 20 73 65 61 72 63 68 20 74 6f 0a 2a   the search to.*
14580 2a 20 66 69 6e 64 20 74 68 65 20 66 69 72 73 74  * find the first
14590 20 6d 61 74 63 68 2e 0a 2a 2a 0a 2a 2a 20 54 68   match..**.** Th
145a0 65 20 6b 65 79 20 63 6f 6d 70 61 72 69 73 6f 6e  e key comparison
145b0 20 66 75 6e 63 74 69 6f 6e 73 20 77 69 6c 6c 20   functions will 
145c0 73 65 74 20 65 71 53 65 65 6e 20 74 6f 20 74 72  set eqSeen to tr
145d0 75 65 20 69 66 20 74 68 65 79 20 65 76 65 72 0a  ue if they ever.
145e0 2a 2a 20 67 65 74 20 61 6e 64 20 65 71 75 61 6c  ** get and equal
145f0 20 72 65 73 75 6c 74 73 20 77 68 65 6e 20 63 6f   results when co
14600 6d 70 61 72 69 6e 67 20 74 68 69 73 20 73 74 72  mparing this str
14610 75 63 74 75 72 65 20 74 6f 20 61 20 62 2d 74 72  ucture to a b-tr
14620 65 65 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 57 68  ee record..** Wh
14630 65 6e 20 64 65 66 61 75 6c 74 5f 72 63 21 3d 30  en default_rc!=0
14640 2c 20 74 68 65 20 73 65 61 72 63 68 20 6d 69 67  , the search mig
14650 68 74 20 65 6e 64 20 75 70 20 6f 6e 20 74 68 65  ht end up on the
14660 20 72 65 63 6f 72 64 20 69 6d 6d 65 64 69 61 74   record immediat
14670 65 6c 79 0a 2a 2a 20 62 65 66 6f 72 65 20 74 68  ely.** before th
14680 65 20 66 69 72 73 74 20 6d 61 74 63 68 20 6f 72  e first match or
14690 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 61 66 74   immediately aft
146a0 65 72 20 74 68 65 20 6c 61 73 74 20 6d 61 74 63  er the last matc
146b0 68 2e 20 20 54 68 65 0a 2a 2a 20 65 71 53 65 65  h.  The.** eqSee
146c0 6e 20 66 69 65 6c 64 20 77 69 6c 6c 20 69 6e 64  n field will ind
146d0 69 63 61 74 65 20 77 68 65 74 68 65 72 20 6f 72  icate whether or
146e0 20 6e 6f 74 20 61 6e 20 65 78 61 63 74 20 6d 61   not an exact ma
146f0 74 63 68 20 65 78 69 73 74 73 20 69 6e 20 74 68  tch exists in th
14700 65 0a 2a 2a 20 62 2d 74 72 65 65 2e 0a 2a 2f 0a  e.** b-tree..*/.
14710 73 74 72 75 63 74 20 55 6e 70 61 63 6b 65 64 52  struct UnpackedR
14720 65 63 6f 72 64 20 7b 0a 20 20 4b 65 79 49 6e 66  ecord {.  KeyInf
14730 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 20 20 2f 2a  o *pKeyInfo;  /*
14740 20 43 6f 6c 6c 61 74 69 6f 6e 20 61 6e 64 20 73   Collation and s
14750 6f 72 74 2d 6f 72 64 65 72 20 69 6e 66 6f 72 6d  ort-order inform
14760 61 74 69 6f 6e 20 2a 2f 0a 20 20 4d 65 6d 20 2a  ation */.  Mem *
14770 61 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f  aMem;          /
14780 2a 20 56 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31  * Values */.  u1
14790 36 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20  6 nField;       
147a0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
147b0 6e 74 72 69 65 73 20 69 6e 20 61 70 4d 65 6d 5b  ntries in apMem[
147c0 5d 20 2a 2f 0a 20 20 69 38 20 64 65 66 61 75 6c  ] */.  i8 defaul
147d0 74 5f 72 63 3b 20 20 20 20 20 20 2f 2a 20 43 6f  t_rc;      /* Co
147e0 6d 70 61 72 69 73 6f 6e 20 72 65 73 75 6c 74 20  mparison result 
147f0 69 66 20 6b 65 79 73 20 61 72 65 20 65 71 75 61  if keys are equa
14800 6c 20 2a 2f 0a 20 20 75 38 20 65 72 72 43 6f 64  l */.  u8 errCod
14810 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72  e;         /* Er
14820 72 6f 72 20 64 65 74 65 63 74 65 64 20 62 79 20  ror detected by 
14830 78 52 65 63 6f 72 64 43 6f 6d 70 61 72 65 20 28  xRecordCompare (
14840 43 4f 52 52 55 50 54 20 6f 72 20 4e 4f 4d 45 4d  CORRUPT or NOMEM
14850 29 20 2a 2f 0a 20 20 69 38 20 72 31 3b 20 20 20  ) */.  i8 r1;   
14860 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
14870 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 69 66  lue to return if
14880 20 28 6c 68 73 20 3e 20 72 68 73 29 20 2a 2f 0a   (lhs > rhs) */.
14890 20 20 69 38 20 72 32 3b 20 20 20 20 20 20 20 20    i8 r2;        
148a0 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74        /* Value t
148b0 6f 20 72 65 74 75 72 6e 20 69 66 20 28 72 68 73  o return if (rhs
148c0 20 3c 20 6c 68 73 29 20 2a 2f 0a 20 20 75 38 20   < lhs) */.  u8 
148d0 65 71 53 65 65 6e 3b 20 20 20 20 20 20 20 20 20  eqSeen;         
148e0 20 2f 2a 20 54 72 75 65 20 69 66 20 61 6e 20 65   /* True if an e
148f0 71 75 61 6c 69 74 79 20 63 6f 6d 70 61 72 69 73  quality comparis
14900 6f 6e 20 68 61 73 20 62 65 65 6e 20 73 65 65 6e  on has been seen
14910 20 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 45   */.};.../*.** E
14920 61 63 68 20 53 51 4c 20 69 6e 64 65 78 20 69 73  ach SQL index is
14930 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20   represented in 
14940 6d 65 6d 6f 72 79 20 62 79 20 61 6e 0a 2a 2a 20  memory by an.** 
14950 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
14960 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
14970 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63  ure..**.** The c
14980 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 74 61  olumns of the ta
14990 62 6c 65 20 74 68 61 74 20 61 72 65 20 74 6f 20  ble that are to 
149a0 62 65 20 69 6e 64 65 78 65 64 20 61 72 65 20 64  be indexed are d
149b0 65 73 63 72 69 62 65 64 0a 2a 2a 20 62 79 20 74  escribed.** by t
149c0 68 65 20 61 69 43 6f 6c 75 6d 6e 5b 5d 20 66 69  he aiColumn[] fi
149d0 65 6c 64 20 6f 66 20 74 68 69 73 20 73 74 72 75  eld of this stru
149e0 63 74 75 72 65 2e 20 20 46 6f 72 20 65 78 61 6d  cture.  For exam
149f0 70 6c 65 2c 20 73 75 70 70 6f 73 65 0a 2a 2a 20  ple, suppose.** 
14a00 77 65 20 68 61 76 65 20 74 68 65 20 66 6f 6c 6c  we have the foll
14a10 6f 77 69 6e 67 20 74 61 62 6c 65 20 61 6e 64 20  owing table and 
14a20 69 6e 64 65 78 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  index:.**.**    
14a30 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 45 78   CREATE TABLE Ex
14a40 31 28 63 31 20 69 6e 74 2c 20 63 32 20 69 6e 74  1(c1 int, c2 int
14a50 2c 20 63 33 20 74 65 78 74 29 3b 0a 2a 2a 20 20  , c3 text);.**  
14a60 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20     CREATE INDEX 
14a70 45 78 32 20 4f 4e 20 45 78 31 28 63 33 2c 63 31  Ex2 ON Ex1(c3,c1
14a80 29 3b 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20  );.**.** In the 
14a90 54 61 62 6c 65 20 73 74 72 75 63 74 75 72 65 20  Table structure 
14aa0 64 65 73 63 72 69 62 69 6e 67 20 45 78 31 2c 20  describing Ex1, 
14ab0 6e 43 6f 6c 3d 3d 33 20 62 65 63 61 75 73 65 20  nCol==3 because 
14ac0 74 68 65 72 65 20 61 72 65 0a 2a 2a 20 74 68 72  there are.** thr
14ad0 65 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  ee columns in th
14ae0 65 20 74 61 62 6c 65 2e 20 20 49 6e 20 74 68 65  e table.  In the
14af0 20 49 6e 64 65 78 20 73 74 72 75 63 74 75 72 65   Index structure
14b00 20 64 65 73 63 72 69 62 69 6e 67 0a 2a 2a 20 45   describing.** E
14b10 78 32 2c 20 6e 43 6f 6c 75 6d 6e 3d 3d 32 20 73  x2, nColumn==2 s
14b20 69 6e 63 65 20 32 20 6f 66 20 74 68 65 20 33 20  ince 2 of the 3 
14b30 63 6f 6c 75 6d 6e 73 20 6f 66 20 45 78 31 20 61  columns of Ex1 a
14b40 72 65 20 69 6e 64 65 78 65 64 2e 0a 2a 2a 20 54  re indexed..** T
14b50 68 65 20 76 61 6c 75 65 20 6f 66 20 61 69 43 6f  he value of aiCo
14b60 6c 75 6d 6e 20 69 73 20 7b 32 2c 20 30 7d 2e 20  lumn is {2, 0}. 
14b70 20 61 69 43 6f 6c 75 6d 6e 5b 30 5d 3d 3d 32 20   aiColumn[0]==2 
14b80 62 65 63 61 75 73 65 20 74 68 65 0a 2a 2a 20 66  because the.** f
14b90 69 72 73 74 20 63 6f 6c 75 6d 6e 20 74 6f 20 62  irst column to b
14ba0 65 20 69 6e 64 65 78 65 64 20 28 63 33 29 20 68  e indexed (c3) h
14bb0 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 32  as an index of 2
14bc0 20 69 6e 20 45 78 31 2e 61 43 6f 6c 5b 5d 2e 0a   in Ex1.aCol[]..
14bd0 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 63 6f  ** The second co
14be0 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78  lumn to be index
14bf0 65 64 20 28 63 31 29 20 68 61 73 20 61 6e 20 69  ed (c1) has an i
14c00 6e 64 65 78 20 6f 66 20 30 20 69 6e 0a 2a 2a 20  ndex of 0 in.** 
14c10 45 78 31 2e 61 43 6f 6c 5b 5d 2c 20 68 65 6e 63  Ex1.aCol[], henc
14c20 65 20 45 78 32 2e 61 69 43 6f 6c 75 6d 6e 5b 31  e Ex2.aiColumn[1
14c30 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ]==0..**.** The 
14c40 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 66 69  Index.onError fi
14c50 65 6c 64 20 64 65 74 65 72 6d 69 6e 65 73 20 77  eld determines w
14c60 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68  hether or not th
14c70 65 20 69 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e  e indexed column
14c80 73 0a 2a 2a 20 6d 75 73 74 20 62 65 20 75 6e 69  s.** must be uni
14c90 71 75 65 20 61 6e 64 20 77 68 61 74 20 74 6f 20  que and what to 
14ca0 64 6f 20 69 66 20 74 68 65 79 20 61 72 65 20 6e  do if they are n
14cb0 6f 74 2e 20 20 57 68 65 6e 20 49 6e 64 65 78 2e  ot.  When Index.
14cc0 6f 6e 45 72 72 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c  onError=OE_None,
14cd0 0a 2a 2a 20 69 74 20 6d 65 61 6e 73 20 74 68 69  .** it means thi
14ce0 73 20 69 73 20 6e 6f 74 20 61 20 75 6e 69 71 75  s is not a uniqu
14cf0 65 20 69 6e 64 65 78 2e 20 20 4f 74 68 65 72 77  e index.  Otherw
14d00 69 73 65 20 69 74 20 69 73 20 61 20 75 6e 69 71  ise it is a uniq
14d10 75 65 20 69 6e 64 65 78 0a 2a 2a 20 61 6e 64 20  ue index.** and 
14d20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 49 6e 64  the value of Ind
14d30 65 78 2e 6f 6e 45 72 72 6f 72 20 69 6e 64 69 63  ex.onError indic
14d40 61 74 65 20 74 68 65 20 77 68 69 63 68 20 63 6f  ate the which co
14d50 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f  nflict resolutio
14d60 6e 0a 2a 2a 20 61 6c 67 6f 72 69 74 68 6d 20 74  n.** algorithm t
14d70 6f 20 65 6d 70 6c 6f 79 20 77 68 65 6e 65 76 65  o employ wheneve
14d80 72 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20  r an attempt is 
14d90 6d 61 64 65 20 74 6f 20 69 6e 73 65 72 74 20 61  made to insert a
14da0 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a 2a 2a 20 65   non-unique.** e
14db0 6c 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 57 68  lement..**.** Wh
14dc0 69 6c 65 20 70 61 72 73 69 6e 67 20 61 20 43 52  ile parsing a CR
14dd0 45 41 54 45 20 54 41 42 4c 45 20 6f 72 20 43 52  EATE TABLE or CR
14de0 45 41 54 45 20 49 4e 44 45 58 20 73 74 61 74 65  EATE INDEX state
14df0 6d 65 6e 74 20 69 6e 20 6f 72 64 65 72 20 74 6f  ment in order to
14e00 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 56 44 42  .** generate VDB
14e10 45 20 63 6f 64 65 20 28 61 73 20 6f 70 70 6f 73  E code (as oppos
14e20 65 64 20 74 6f 20 70 61 72 73 69 6e 67 20 6f 6e  ed to parsing on
14e30 65 20 72 65 61 64 20 66 72 6f 6d 20 61 6e 20 73  e read from an s
14e40 71 6c 69 74 65 5f 6d 61 73 74 65 72 0a 2a 2a 20  qlite_master.** 
14e50 74 61 62 6c 65 20 61 73 20 70 61 72 74 20 6f 66  table as part of
14e60 20 70 61 72 73 69 6e 67 20 61 6e 20 65 78 69 73   parsing an exis
14e70 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 73 63  ting database sc
14e80 68 65 6d 61 29 2c 20 74 72 61 6e 73 69 65 6e 74  hema), transient
14e90 20 69 6e 73 74 61 6e 63 65 73 0a 2a 2a 20 6f 66   instances.** of
14ea0 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20   this structure 
14eb0 6d 61 79 20 62 65 20 63 72 65 61 74 65 64 2e 20  may be created. 
14ec0 49 6e 20 74 68 69 73 20 63 61 73 65 20 74 68 65  In this case the
14ed0 20 49 6e 64 65 78 2e 74 6e 75 6d 20 76 61 72 69   Index.tnum vari
14ee0 61 62 6c 65 20 69 73 0a 2a 2a 20 75 73 65 64 20  able is.** used 
14ef0 74 6f 20 73 74 6f 72 65 20 74 68 65 20 61 64 64  to store the add
14f00 72 65 73 73 20 6f 66 20 61 20 56 44 42 45 20 69  ress of a VDBE i
14f10 6e 73 74 72 75 63 74 69 6f 6e 2c 20 6e 6f 74 20  nstruction, not 
14f20 61 20 64 61 74 61 62 61 73 65 20 70 61 67 65 0a  a database page.
14f30 2a 2a 20 6e 75 6d 62 65 72 20 28 69 74 20 63 61  ** number (it ca
14f40 6e 6e 6f 74 20 2d 20 74 68 65 20 64 61 74 61 62  nnot - the datab
14f50 61 73 65 20 70 61 67 65 20 69 73 20 6e 6f 74 20  ase page is not 
14f60 61 6c 6c 6f 63 61 74 65 64 20 75 6e 74 69 6c 20  allocated until 
14f70 74 68 65 20 56 44 42 45 0a 2a 2a 20 70 72 6f 67  the VDBE.** prog
14f80 72 61 6d 20 69 73 20 65 78 65 63 75 74 65 64 29  ram is executed)
14f90 2e 20 53 65 65 20 63 6f 6e 76 65 72 74 54 6f 57  . See convertToW
14fa0 69 74 68 6f 75 74 52 6f 77 69 64 54 61 62 6c 65  ithoutRowidTable
14fb0 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a  () for details..
14fc0 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78 20  */.struct Index 
14fd0 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
14fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
14ff0 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 69 6e 64  Name of this ind
15000 65 78 20 2a 2f 0a 20 20 69 31 36 20 2a 61 69 43  ex */.  i16 *aiC
15010 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
15020 20 2f 2a 20 57 68 69 63 68 20 63 6f 6c 75 6d 6e   /* Which column
15030 73 20 61 72 65 20 75 73 65 64 20 62 79 20 74 68  s are used by th
15040 69 73 20 69 6e 64 65 78 2e 20 20 31 73 74 20 69  is index.  1st i
15050 73 20 30 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20  s 0 */.  LogEst 
15060 2a 61 69 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20  *aiRowLogEst;   
15070 20 20 2f 2a 20 46 72 6f 6d 20 41 4e 41 4c 59 5a    /* From ANALYZ
15080 45 3a 20 45 73 74 2e 20 72 6f 77 73 20 73 65 6c  E: Est. rows sel
15090 65 63 74 65 64 20 62 79 20 65 61 63 68 20 63 6f  ected by each co
150a0 6c 75 6d 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20  lumn */.  Table 
150b0 2a 70 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20  *pTable;        
150c0 20 20 20 2f 2a 20 54 68 65 20 53 51 4c 20 74 61     /* The SQL ta
150d0 62 6c 65 20 62 65 69 6e 67 20 69 6e 64 65 78 65  ble being indexe
150e0 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f  d */.  char *zCo
150f0 6c 41 66 66 3b 20 20 20 20 20 20 20 20 20 20 20  lAff;           
15100 2f 2a 20 53 74 72 69 6e 67 20 64 65 66 69 6e 69  /* String defini
15110 6e 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  ng the affinity 
15120 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a  of each column *
15130 2f 0a 20 20 49 6e 64 65 78 20 2a 70 4e 65 78 74  /.  Index *pNext
15140 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
15150 54 68 65 20 6e 65 78 74 20 69 6e 64 65 78 20 61  The next index a
15160 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
15170 68 65 20 73 61 6d 65 20 74 61 62 6c 65 20 2a 2f  he same table */
15180 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
15190 6d 61 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53  ma;         /* S
151a0 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67  chema containing
151b0 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20   this index */. 
151c0 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b   u8 *aSortOrder;
151d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 66 6f 72            /* for
151e0 20 65 61 63 68 20 63 6f 6c 75 6d 6e 3a 20 54 72   each column: Tr
151f0 75 65 3d 3d 44 45 53 43 2c 20 46 61 6c 73 65 3d  ue==DESC, False=
15200 3d 41 53 43 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  =ASC */.  const 
15210 63 68 61 72 20 2a 2a 61 7a 43 6f 6c 6c 3b 20 20  char **azColl;  
15220 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 63     /* Array of c
15230 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
15240 65 20 6e 61 6d 65 73 20 66 6f 72 20 69 6e 64 65  e names for inde
15250 78 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 50 61  x */.  Expr *pPa
15260 72 74 49 64 78 57 68 65 72 65 3b 20 20 20 20 20  rtIdxWhere;     
15270 2f 2a 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  /* WHERE clause 
15280 66 6f 72 20 70 61 72 74 69 61 6c 20 69 6e 64 69  for partial indi
15290 63 65 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  ces */.  ExprLis
152a0 74 20 2a 61 43 6f 6c 45 78 70 72 3b 20 20 20 20  t *aColExpr;    
152b0 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 65 78 70 72    /* Column expr
152c0 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74  essions */.  int
152d0 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20   tnum;          
152e0 20 20 20 20 20 20 2f 2a 20 44 42 20 50 61 67 65        /* DB Page
152f0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 72 6f 6f 74   containing root
15300 20 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a   of this index *
15310 2f 0a 20 20 4c 6f 67 45 73 74 20 73 7a 49 64 78  /.  LogEst szIdx
15320 52 6f 77 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Row;         /* 
15330 45 73 74 69 6d 61 74 65 64 20 61 76 65 72 61 67  Estimated averag
15340 65 20 72 6f 77 20 73 69 7a 65 20 69 6e 20 62 79  e row size in by
15350 74 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 4b 65  tes */.  u16 nKe
15360 79 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20  yCol;           
15370 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
15380 6f 6c 75 6d 6e 73 20 66 6f 72 6d 69 6e 67 20 74  olumns forming t
15390 68 65 20 6b 65 79 20 2a 2f 0a 20 20 75 31 36 20  he key */.  u16 
153a0 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  nColumn;        
153b0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
153c0 66 20 63 6f 6c 75 6d 6e 73 20 73 74 6f 72 65 64  f columns stored
153d0 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a 2f   in the index */
153e0 0a 20 20 75 38 20 6f 6e 45 72 72 6f 72 3b 20 20  .  u8 onError;  
153f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
15400 45 5f 41 62 6f 72 74 2c 20 4f 45 5f 49 67 6e 6f  E_Abort, OE_Igno
15410 72 65 2c 20 4f 45 5f 52 65 70 6c 61 63 65 2c 20  re, OE_Replace, 
15420 6f 72 20 4f 45 5f 4e 6f 6e 65 20 2a 2f 0a 20 20  or OE_None */.  
15430 75 6e 73 69 67 6e 65 64 20 69 64 78 54 79 70 65  unsigned idxType
15440 3a 32 3b 20 20 20 20 20 20 2f 2a 20 31 3d 3d 55  :2;      /* 1==U
15450 4e 49 51 55 45 2c 20 32 3d 3d 50 52 49 4d 41 52  NIQUE, 2==PRIMAR
15460 59 20 4b 45 59 2c 20 30 3d 3d 43 52 45 41 54 45  Y KEY, 0==CREATE
15470 20 49 4e 44 45 58 20 2a 2f 0a 20 20 75 6e 73 69   INDEX */.  unsi
15480 67 6e 65 64 20 62 55 6e 6f 72 64 65 72 65 64 3a  gned bUnordered:
15490 31 3b 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73  1;   /* Use this
154a0 20 69 6e 64 65 78 20 66 6f 72 20 3d 3d 20 6f 72   index for == or
154b0 20 49 4e 20 71 75 65 72 69 65 73 20 6f 6e 6c 79   IN queries only
154c0 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 75   */.  unsigned u
154d0 6e 69 71 4e 6f 74 4e 75 6c 6c 3a 31 3b 20 20 2f  niqNotNull:1;  /
154e0 2a 20 54 72 75 65 20 69 66 20 55 4e 49 51 55 45  * True if UNIQUE
154f0 20 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c 20 66 6f   and NOT NULL fo
15500 72 20 61 6c 6c 20 63 6f 6c 75 6d 6e 73 20 2a 2f  r all columns */
15510 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 73 52 65  .  unsigned isRe
15520 73 69 7a 65 64 3a 31 3b 20 20 20 20 2f 2a 20 54  sized:1;    /* T
15530 72 75 65 20 69 66 20 72 65 73 69 7a 65 49 6e 64  rue if resizeInd
15540 65 78 4f 62 6a 65 63 74 28 29 20 68 61 73 20 62  exObject() has b
15550 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a 20 20  een called */.  
15560 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 76 65 72  unsigned isCover
15570 69 6e 67 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65  ing:1;   /* True
15580 20 69 66 20 74 68 69 73 20 69 73 20 61 20 63 6f   if this is a co
15590 76 65 72 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a  vering index */.
155a0 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f 53 6b 69    unsigned noSki
155b0 70 53 63 61 6e 3a 31 3b 20 20 20 2f 2a 20 44 6f  pScan:1;   /* Do
155c0 20 6e 6f 74 20 74 72 79 20 74 6f 20 75 73 65 20   not try to use 
155d0 73 6b 69 70 2d 73 63 61 6e 20 69 66 20 74 72 75  skip-scan if tru
155e0 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  e */.  unsigned 
155f0 68 61 73 53 74 61 74 31 3a 31 3b 20 20 20 20 20  hasStat1:1;     
15600 2f 2a 20 61 69 52 6f 77 4c 6f 67 45 73 74 20 76  /* aiRowLogEst v
15610 61 6c 75 65 73 20 63 6f 6d 65 20 66 72 6f 6d 20  alues come from 
15620 73 71 6c 69 74 65 5f 73 74 61 74 31 20 2a 2f 0a  sqlite_stat1 */.
15630 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
15640 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54  ABLE_STAT3_OR_ST
15650 41 54 34 0a 20 20 69 6e 74 20 6e 53 61 6d 70 6c  AT4.  int nSampl
15660 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  e;             /
15670 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d  * Number of elem
15680 65 6e 74 73 20 69 6e 20 61 53 61 6d 70 6c 65 5b  ents in aSample[
15690 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 6d 70  ] */.  int nSamp
156a0 6c 65 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20  leCol;          
156b0 2f 2a 20 53 69 7a 65 20 6f 66 20 49 6e 64 65 78  /* Size of Index
156c0 53 61 6d 70 6c 65 2e 61 6e 45 71 5b 5d 20 61 6e  Sample.anEq[] an
156d0 64 20 73 6f 20 6f 6e 20 2a 2f 0a 20 20 74 52 6f  d so on */.  tRo
156e0 77 63 6e 74 20 2a 61 41 76 67 45 71 3b 20 20 20  wcnt *aAvgEq;   
156f0 20 20 20 20 20 20 2f 2a 20 41 76 65 72 61 67 65        /* Average
15700 20 6e 45 71 20 76 61 6c 75 65 73 20 66 6f 72 20   nEq values for 
15710 6b 65 79 73 20 6e 6f 74 20 69 6e 20 61 53 61 6d  keys not in aSam
15720 70 6c 65 20 2a 2f 0a 20 20 49 6e 64 65 78 53 61  ple */.  IndexSa
15730 6d 70 6c 65 20 2a 61 53 61 6d 70 6c 65 3b 20 20  mple *aSample;  
15740 20 20 2f 2a 20 53 61 6d 70 6c 65 73 20 6f 66 20    /* Samples of 
15750 74 68 65 20 6c 65 66 74 2d 6d 6f 73 74 20 6b 65  the left-most ke
15760 79 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a  y */.  tRowcnt *
15770 61 69 52 6f 77 45 73 74 3b 20 20 20 20 20 20 20  aiRowEst;       
15780 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68 6d  /* Non-logarithm
15790 69 63 20 73 74 61 74 31 20 64 61 74 61 20 66 6f  ic stat1 data fo
157a0 72 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a  r this index */.
157b0 20 20 74 52 6f 77 63 6e 74 20 6e 52 6f 77 45 73    tRowcnt nRowEs
157c0 74 30 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f  t0;        /* No
157d0 6e 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20 6e 75  n-logarithmic nu
157e0 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20  mber of rows in 
157f0 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 23 65 6e  the index */.#en
15800 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c  dif.};../*.** Al
15810 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
15820 20 49 6e 64 65 78 2e 69 64 78 54 79 70 65 0a 2a   Index.idxType.*
15830 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
15840 5f 49 44 58 54 59 50 45 5f 41 50 50 44 45 46 20  _IDXTYPE_APPDEF 
15850 20 20 20 20 20 30 20 20 20 2f 2a 20 43 72 65 61       0   /* Crea
15860 74 65 64 20 75 73 69 6e 67 20 43 52 45 41 54 45  ted using CREATE
15870 20 49 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e   INDEX */.#defin
15880 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45  e SQLITE_IDXTYPE
15890 5f 55 4e 49 51 55 45 20 20 20 20 20 20 31 20 20  _UNIQUE      1  
158a0 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 73 20 61   /* Implements a
158b0 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
158c0 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  nt */.#define SQ
158d0 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49  LITE_IDXTYPE_PRI
158e0 4d 41 52 59 4b 45 59 20 20 32 20 20 20 2f 2a 20  MARYKEY  2   /* 
158f0 49 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  Is the PRIMARY K
15900 45 59 20 66 6f 72 20 74 68 65 20 74 61 62 6c 65  EY for the table
15910 20 2a 2f 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74   */../* Return t
15920 72 75 65 20 69 66 20 69 6e 64 65 78 20 58 20 69  rue if index X i
15930 73 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20  s a PRIMARY KEY 
15940 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65  index */.#define
15950 20 49 73 50 72 69 6d 61 72 79 4b 65 79 49 6e 64   IsPrimaryKeyInd
15960 65 78 28 58 29 20 20 28 28 58 29 2d 3e 69 64 78  ex(X)  ((X)->idx
15970 54 79 70 65 3d 3d 53 51 4c 49 54 45 5f 49 44 58  Type==SQLITE_IDX
15980 54 59 50 45 5f 50 52 49 4d 41 52 59 4b 45 59 29  TYPE_PRIMARYKEY)
15990 0a 0a 2f 2a 20 52 65 74 75 72 6e 20 74 72 75 65  ../* Return true
159a0 20 69 66 20 69 6e 64 65 78 20 58 20 69 73 20 61   if index X is a
159b0 20 55 4e 49 51 55 45 20 69 6e 64 65 78 20 2a 2f   UNIQUE index */
159c0 0a 23 64 65 66 69 6e 65 20 49 73 55 6e 69 71 75  .#define IsUniqu
159d0 65 49 6e 64 65 78 28 58 29 20 20 20 20 20 20 28  eIndex(X)      (
159e0 28 58 29 2d 3e 6f 6e 45 72 72 6f 72 21 3d 4f 45  (X)->onError!=OE
159f0 5f 4e 6f 6e 65 29 0a 0a 2f 2a 20 54 68 65 20 49  _None)../* The I
15a00 6e 64 65 78 2e 61 69 43 6f 6c 75 6d 6e 5b 5d 20  ndex.aiColumn[] 
15a10 76 61 6c 75 65 73 20 61 72 65 20 6e 6f 72 6d 61  values are norma
15a20 6c 6c 79 20 70 6f 73 69 74 69 76 65 20 69 6e 74  lly positive int
15a30 65 67 65 72 2e 20 20 42 75 74 0a 2a 2a 20 74 68  eger.  But.** th
15a40 65 72 65 20 61 72 65 20 73 6f 6d 65 20 6e 65 67  ere are some neg
15a50 61 74 69 76 65 20 76 61 6c 75 65 73 20 74 68 61  ative values tha
15a60 74 20 68 61 76 65 20 73 70 65 63 69 61 6c 20 6d  t have special m
15a70 65 61 6e 69 6e 67 3a 0a 2a 2f 0a 23 64 65 66 69  eaning:.*/.#defi
15a80 6e 65 20 58 4e 5f 52 4f 57 49 44 20 20 20 20 20  ne XN_ROWID     
15a90 28 2d 31 29 20 20 20 20 20 2f 2a 20 49 6e 64 65  (-1)     /* Inde
15aa0 78 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20 74 68  xed column is th
15ab0 65 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69  e rowid */.#defi
15ac0 6e 65 20 58 4e 5f 45 58 50 52 20 20 20 20 20 20  ne XN_EXPR      
15ad0 28 2d 32 29 20 20 20 20 20 2f 2a 20 49 6e 64 65  (-2)     /* Inde
15ae0 78 65 64 20 63 6f 6c 75 6d 6e 20 69 73 20 61 6e  xed column is an
15af0 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 0a   expression */..
15b00 2f 2a 0a 2a 2a 20 45 61 63 68 20 73 61 6d 70 6c  /*.** Each sampl
15b10 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  e stored in the 
15b20 73 71 6c 69 74 65 5f 73 74 61 74 33 20 74 61 62  sqlite_stat3 tab
15b30 6c 65 20 69 73 20 72 65 70 72 65 73 65 6e 74 65  le is represente
15b40 64 20 69 6e 20 6d 65 6d 6f 72 79 0a 2a 2a 20 75  d in memory.** u
15b50 73 69 6e 67 20 61 20 73 74 72 75 63 74 75 72 65  sing a structure
15b60 20 6f 66 20 74 68 69 73 20 74 79 70 65 2e 20 20   of this type.  
15b70 53 65 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  See documentatio
15b80 6e 20 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20  n at the top of 
15b90 74 68 65 0a 2a 2a 20 61 6e 61 6c 79 7a 65 2e 63  the.** analyze.c
15ba0 20 73 6f 75 72 63 65 20 66 69 6c 65 20 66 6f 72   source file for
15bb0 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
15bc0 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  rmation..*/.stru
15bd0 63 74 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 7b  ct IndexSample {
15be0 0a 20 20 76 6f 69 64 20 2a 70 3b 20 20 20 20 20  .  void *p;     
15bf0 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
15c00 74 6f 20 73 61 6d 70 6c 65 64 20 72 65 63 6f 72  to sampled recor
15c10 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20 20  d */.  int n;   
15c20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
15c30 20 6f 66 20 72 65 63 6f 72 64 20 69 6e 20 62 79   of record in by
15c40 74 65 73 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74  tes */.  tRowcnt
15c50 20 2a 61 6e 45 71 3b 20 20 20 20 2f 2a 20 45 73   *anEq;    /* Es
15c60 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  t. number of row
15c70 73 20 77 68 65 72 65 20 74 68 65 20 6b 65 79 20  s where the key 
15c80 65 71 75 61 6c 73 20 74 68 69 73 20 73 61 6d 70  equals this samp
15c90 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20  le */.  tRowcnt 
15ca0 2a 61 6e 4c 74 3b 20 20 20 20 2f 2a 20 45 73 74  *anLt;    /* Est
15cb0 2e 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  . number of rows
15cc0 20 77 68 65 72 65 20 6b 65 79 20 69 73 20 6c 65   where key is le
15cd0 73 73 20 74 68 61 6e 20 74 68 69 73 20 73 61 6d  ss than this sam
15ce0 70 6c 65 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74  ple */.  tRowcnt
15cf0 20 2a 61 6e 44 4c 74 3b 20 20 20 2f 2a 20 45 73   *anDLt;   /* Es
15d00 74 2e 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 73  t. number of dis
15d10 74 69 6e 63 74 20 6b 65 79 73 20 6c 65 73 73 20  tinct keys less 
15d20 74 68 61 6e 20 74 68 69 73 20 73 61 6d 70 6c 65  than this sample
15d30 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61   */.};../*.** Ea
15d40 63 68 20 74 6f 6b 65 6e 20 63 6f 6d 69 6e 67 20  ch token coming 
15d50 6f 75 74 20 6f 66 20 74 68 65 20 6c 65 78 65 72  out of the lexer
15d60 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20   is an instance 
15d70 6f 66 0a 2a 2a 20 74 68 69 73 20 73 74 72 75 63  of.** this struc
15d80 74 75 72 65 2e 20 20 54 6f 6b 65 6e 73 20 61 72  ture.  Tokens ar
15d90 65 20 61 6c 73 6f 20 75 73 65 64 20 61 73 20 70  e also used as p
15da0 61 72 74 20 6f 66 20 61 6e 20 65 78 70 72 65 73  art of an expres
15db0 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65  sion..**.** Note
15dc0 20 69 66 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 20 74   if Token.z==0 t
15dd0 68 65 6e 20 54 6f 6b 65 6e 2e 64 79 6e 20 61 6e  hen Token.dyn an
15de0 64 20 54 6f 6b 65 6e 2e 6e 20 61 72 65 20 75 6e  d Token.n are un
15df0 64 65 66 69 6e 65 64 20 61 6e 64 0a 2a 2a 20 6d  defined and.** m
15e00 61 79 20 63 6f 6e 74 61 69 6e 20 72 61 6e 64 6f  ay contain rando
15e10 6d 20 76 61 6c 75 65 73 2e 20 20 44 6f 20 6e 6f  m values.  Do no
15e20 74 20 6d 61 6b 65 20 61 6e 79 20 61 73 73 75 6d  t make any assum
15e30 70 74 69 6f 6e 73 20 61 62 6f 75 74 20 54 6f 6b  ptions about Tok
15e40 65 6e 2e 64 79 6e 0a 2a 2a 20 61 6e 64 20 54 6f  en.dyn.** and To
15e50 6b 65 6e 2e 6e 20 77 68 65 6e 20 54 6f 6b 65 6e  ken.n when Token
15e60 2e 7a 3d 3d 30 2e 0a 2a 2f 0a 73 74 72 75 63 74  .z==0..*/.struct
15e70 20 54 6f 6b 65 6e 20 7b 0a 20 20 63 6f 6e 73 74   Token {.  const
15e80 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 2f 2a   char *z;     /*
15e90 20 54 65 78 74 20 6f 66 20 74 68 65 20 74 6f 6b   Text of the tok
15ea0 65 6e 2e 20 20 4e 6f 74 20 4e 55 4c 4c 2d 74 65  en.  Not NULL-te
15eb0 72 6d 69 6e 61 74 65 64 21 20 2a 2f 0a 20 20 75  rminated! */.  u
15ec0 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e 3b 20 20  nsigned int n;  
15ed0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
15ee0 68 61 72 61 63 74 65 72 73 20 69 6e 20 74 68 69  haracters in thi
15ef0 73 20 74 6f 6b 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f  s token */.};../
15f00 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
15f10 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
15f20 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f  re contains info
15f30 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74  rmation needed t
15f40 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f  o generate.** co
15f50 64 65 20 66 6f 72 20 61 20 53 45 4c 45 43 54 20  de for a SELECT 
15f60 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 67  that contains ag
15f70 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
15f80 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 45 78 70 72  s..**.** If Expr
15f90 2e 6f 70 3d 3d 54 4b 5f 41 47 47 5f 43 4f 4c 55  .op==TK_AGG_COLU
15fa0 4d 4e 20 6f 72 20 54 4b 5f 41 47 47 5f 46 55 4e  MN or TK_AGG_FUN
15fb0 43 54 49 4f 4e 20 74 68 65 6e 20 45 78 70 72 2e  CTION then Expr.
15fc0 70 41 67 67 49 6e 66 6f 20 69 73 20 61 0a 2a 2a  pAggInfo is a.**
15fd0 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73   pointer to this
15fe0 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 68 65   structure.  The
15ff0 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 66 69   Expr.iColumn fi
16000 65 6c 64 20 69 73 20 74 68 65 20 69 6e 64 65 78  eld is the index
16010 20 69 6e 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e 61   in.** AggInfo.a
16020 43 6f 6c 5b 5d 20 6f 72 20 41 67 67 49 6e 66 6f  Col[] or AggInfo
16030 2e 61 46 75 6e 63 5b 5d 20 6f 66 20 69 6e 66 6f  .aFunc[] of info
16040 72 6d 61 74 69 6f 6e 20 6e 65 65 64 65 64 20 74  rmation needed t
16050 6f 20 67 65 6e 65 72 61 74 65 0a 2a 2a 20 63 6f  o generate.** co
16060 64 65 20 66 6f 72 20 74 68 61 74 20 6e 6f 64 65  de for that node
16070 2e 0a 2a 2a 0a 2a 2a 20 41 67 67 49 6e 66 6f 2e  ..**.** AggInfo.
16080 70 47 72 6f 75 70 42 79 20 61 6e 64 20 41 67 67  pGroupBy and Agg
16090 49 6e 66 6f 2e 61 46 75 6e 63 2e 70 45 78 70 72  Info.aFunc.pExpr
160a0 20 70 6f 69 6e 74 20 74 6f 20 66 69 65 6c 64 73   point to fields
160b0 20 77 69 74 68 69 6e 20 74 68 65 0a 2a 2a 20 6f   within the.** o
160c0 72 69 67 69 6e 61 6c 20 53 65 6c 65 63 74 20 73  riginal Select s
160d0 74 72 75 63 74 75 72 65 20 74 68 61 74 20 64 65  tructure that de
160e0 73 63 72 69 62 65 73 20 74 68 65 20 53 45 4c 45  scribes the SELE
160f0 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 54  CT statement.  T
16100 68 65 73 65 0a 2a 2a 20 66 69 65 6c 64 73 20 64  hese.** fields d
16110 6f 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62 65  o not need to be
16120 20 66 72 65 65 64 20 77 68 65 6e 20 64 65 61 6c   freed when deal
16130 6c 6f 63 61 74 69 6e 67 20 74 68 65 20 41 67 67  locating the Agg
16140 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 2e 0a  Info structure..
16150 2a 2f 0a 73 74 72 75 63 74 20 41 67 67 49 6e 66  */.struct AggInf
16160 6f 20 7b 0a 20 20 75 38 20 64 69 72 65 63 74 4d  o {.  u8 directM
16170 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ode;          /*
16180 20 44 69 72 65 63 74 20 72 65 6e 64 65 72 69 6e   Direct renderin
16190 67 20 6d 6f 64 65 20 6d 65 61 6e 73 20 74 61 6b  g mode means tak
161a0 65 20 64 61 74 61 20 64 69 72 65 63 74 6c 79 0a  e data directly.
161b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
161c0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 66 72 6f            ** fro
161d0 6d 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20  m source tables 
161e0 72 61 74 68 65 72 20 74 68 61 6e 20 66 72 6f 6d  rather than from
161f0 20 61 63 63 75 6d 75 6c 61 74 6f 72 73 20 2a 2f   accumulators */
16200 0a 20 20 75 38 20 75 73 65 53 6f 72 74 69 6e 67  .  u8 useSorting
16210 49 64 78 3b 20 20 20 20 20 20 20 2f 2a 20 49 6e  Idx;       /* In
16220 20 64 69 72 65 63 74 20 6d 6f 64 65 2c 20 72 65   direct mode, re
16230 66 65 72 65 6e 63 65 20 74 68 65 20 73 6f 72 74  ference the sort
16240 69 6e 67 20 69 6e 64 65 78 20 72 61 74 68 65 72  ing index rather
16250 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16260 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68             ** th
16270 61 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74 61  an the source ta
16280 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72  ble */.  int sor
16290 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20 20 20  tingIdx;        
162a0 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65   /* Cursor numbe
162b0 72 20 6f 66 20 74 68 65 20 73 6f 72 74 69 6e 67  r of the sorting
162c0 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20   index */.  int 
162d0 73 6f 72 74 69 6e 67 49 64 78 50 54 61 62 3b 20  sortingIdxPTab; 
162e0 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75      /* Cursor nu
162f0 6d 62 65 72 20 6f 66 20 70 73 65 75 64 6f 2d 74  mber of pseudo-t
16300 61 62 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  able */.  int nS
16310 6f 72 74 69 6e 67 43 6f 6c 75 6d 6e 3b 20 20 20  ortingColumn;   
16320 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
16330 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 73 6f  olumns in the so
16340 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20  rting index */. 
16350 20 69 6e 74 20 6d 6e 52 65 67 2c 20 6d 78 52 65   int mnReg, mxRe
16360 67 3b 20 20 20 20 20 20 20 2f 2a 20 52 61 6e 67  g;       /* Rang
16370 65 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 61  e of registers a
16380 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 61 43 6f  llocated for aCo
16390 6c 20 61 6e 64 20 61 46 75 6e 63 20 2a 2f 0a 20  l and aFunc */. 
163a0 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75   ExprList *pGrou
163b0 70 42 79 3b 20 20 20 20 20 2f 2a 20 54 68 65 20  pBy;     /* The 
163c0 67 72 6f 75 70 20 62 79 20 63 6c 61 75 73 65 20  group by clause 
163d0 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67 49  */.  struct AggI
163e0 6e 66 6f 5f 63 6f 6c 20 7b 20 20 20 20 2f 2a 20  nfo_col {    /* 
163f0 46 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  For each column 
16400 75 73 65 64 20 69 6e 20 73 6f 75 72 63 65 20 74  used in source t
16410 61 62 6c 65 73 20 2a 2f 0a 20 20 20 20 54 61 62  ables */.    Tab
16420 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20  le *pTab;       
16430 20 20 20 20 20 20 2f 2a 20 53 6f 75 72 63 65 20        /* Source 
16440 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74  table */.    int
16450 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20   iTable;        
16460 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20        /* Cursor 
16470 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73 6f  number of the so
16480 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20  urce table */.  
16490 20 20 69 6e 74 20 69 43 6f 6c 75 6d 6e 3b 20 20    int iColumn;  
164a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
164b0 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 77 69 74 68  lumn number with
164c0 69 6e 20 74 68 65 20 73 6f 75 72 63 65 20 74 61  in the source ta
164d0 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ble */.    int i
164e0 53 6f 72 74 65 72 43 6f 6c 75 6d 6e 3b 20 20 20  SorterColumn;   
164f0 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75      /* Column nu
16500 6d 62 65 72 20 69 6e 20 74 68 65 20 73 6f 72 74  mber in the sort
16510 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20  ing index */.   
16520 20 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20   int iMem;      
16530 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d            /* Mem
16540 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61  ory location tha
16550 74 20 61 63 74 73 20 61 73 20 61 63 63 75 6d 75  t acts as accumu
16560 6c 61 74 6f 72 20 2a 2f 0a 20 20 20 20 45 78 70  lator */.    Exp
16570 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20  r *pExpr;       
16580 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 72 69        /* The ori
16590 67 69 6e 61 6c 20 65 78 70 72 65 73 73 69 6f 6e  ginal expression
165a0 20 2a 2f 0a 20 20 7d 20 2a 61 43 6f 6c 3b 0a 20   */.  } *aCol;. 
165b0 20 69 6e 74 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20   int nColumn;   
165c0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
165d0 65 72 20 6f 66 20 75 73 65 64 20 65 6e 74 72 69  er of used entri
165e0 65 73 20 69 6e 20 61 43 6f 6c 5b 5d 20 2a 2f 0a  es in aCol[] */.
165f0 20 20 69 6e 74 20 6e 41 63 63 75 6d 75 6c 61 74    int nAccumulat
16600 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  or;       /* Num
16610 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74  ber of columns t
16620 68 61 74 20 73 68 6f 77 20 74 68 72 6f 75 67 68  hat show through
16630 20 74 6f 20 74 68 65 20 6f 75 74 70 75 74 2e 0a   to the output..
16640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16650 20 20 20 20 20 20 20 20 20 20 2a 2a 20 41 64 64            ** Add
16660 69 74 69 6f 6e 61 6c 20 63 6f 6c 75 6d 6e 73 20  itional columns 
16670 61 72 65 20 75 73 65 64 20 6f 6e 6c 79 20 61 73  are used only as
16680 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 20   parameters to. 
16690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
166a0 20 20 20 20 20 20 20 20 20 2a 2a 20 61 67 67 72           ** aggr
166b0 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
166c0 2a 2f 0a 20 20 73 74 72 75 63 74 20 41 67 67 49  */.  struct AggI
166d0 6e 66 6f 5f 66 75 6e 63 20 7b 20 20 20 2f 2a 20  nfo_func {   /* 
166e0 46 6f 72 20 65 61 63 68 20 61 67 67 72 65 67 61  For each aggrega
166f0 74 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  te function */. 
16700 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20     Expr *pExpr; 
16710 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
16720 78 70 72 65 73 73 69 6f 6e 20 65 6e 63 6f 64 69  xpression encodi
16730 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  ng the function 
16740 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65 66 20 2a  */.    FuncDef *
16750 70 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20  pFunc;          
16760 2f 2a 20 54 68 65 20 61 67 67 72 65 67 61 74 65  /* The aggregate
16770 20 66 75 6e 63 74 69 6f 6e 20 69 6d 70 6c 65 6d   function implem
16780 65 6e 74 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  entation */.    
16790 69 6e 74 20 69 4d 65 6d 3b 20 20 20 20 20 20 20  int iMem;       
167a0 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f           /* Memo
167b0 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74  ry location that
167c0 20 61 63 74 73 20 61 73 20 61 63 63 75 6d 75 6c   acts as accumul
167d0 61 74 6f 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20  ator */.    int 
167e0 69 44 69 73 74 69 6e 63 74 3b 20 20 20 20 20 20  iDistinct;      
167f0 20 20 20 20 20 2f 2a 20 45 70 68 65 6d 65 72 61       /* Ephemera
16800 6c 20 74 61 62 6c 65 20 75 73 65 64 20 74 6f 20  l table used to 
16810 65 6e 66 6f 72 63 65 20 44 49 53 54 49 4e 43 54  enforce DISTINCT
16820 20 2a 2f 0a 20 20 7d 20 2a 61 46 75 6e 63 3b 0a   */.  } *aFunc;.
16830 20 20 69 6e 74 20 6e 46 75 6e 63 3b 20 20 20 20    int nFunc;    
16840 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
16850 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69  ber of entries i
16860 6e 20 61 46 75 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a  n aFunc[] */.};.
16870 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 61 74 61 74  ./*.** The datat
16880 79 70 65 20 79 6e 56 61 72 20 69 73 20 61 20 73  ype ynVar is a s
16890 69 67 6e 65 64 20 69 6e 74 65 67 65 72 2c 20 65  igned integer, e
168a0 69 74 68 65 72 20 31 36 2d 62 69 74 20 6f 72 20  ither 16-bit or 
168b0 33 32 2d 62 69 74 2e 0a 2a 2a 20 55 73 75 61 6c  32-bit..** Usual
168c0 6c 79 20 69 74 20 69 73 20 31 36 2d 62 69 74 73  ly it is 16-bits
168d0 2e 20 20 42 75 74 20 69 66 20 53 51 4c 49 54 45  .  But if SQLITE
168e0 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55  _MAX_VARIABLE_NU
168f0 4d 42 45 52 20 69 73 20 67 72 65 61 74 65 72 0a  MBER is greater.
16900 2a 2a 20 74 68 61 6e 20 33 32 37 36 37 20 77 65  ** than 32767 we
16910 20 68 61 76 65 20 74 6f 20 6d 61 6b 65 20 69 74   have to make it
16920 20 33 32 2d 62 69 74 2e 20 20 31 36 2d 62 69 74   32-bit.  16-bit
16930 20 69 73 20 70 72 65 66 65 72 72 65 64 20 62 65   is preferred be
16940 63 61 75 73 65 0a 2a 2a 20 69 74 20 75 73 65 73  cause.** it uses
16950 20 6c 65 73 73 20 6d 65 6d 6f 72 79 20 69 6e 20   less memory in 
16960 74 68 65 20 45 78 70 72 20 6f 62 6a 65 63 74 2c  the Expr object,
16970 20 77 68 69 63 68 20 69 73 20 61 20 62 69 67 20   which is a big 
16980 6d 65 6d 6f 72 79 20 75 73 65 72 0a 2a 2a 20 69  memory user.** i
16990 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68 20 6c  n systems with l
169a0 6f 74 73 20 6f 66 20 70 72 65 70 61 72 65 64 20  ots of prepared 
169b0 73 74 61 74 65 6d 65 6e 74 73 2e 20 20 41 6e 64  statements.  And
169c0 20 66 65 77 20 61 70 70 6c 69 63 61 74 69 6f 6e   few application
169d0 73 0a 2a 2a 20 6e 65 65 64 20 6d 6f 72 65 20 74  s.** need more t
169e0 68 61 6e 20 61 62 6f 75 74 20 31 30 20 6f 72 20  han about 10 or 
169f0 32 30 20 76 61 72 69 61 62 6c 65 73 2e 20 20 42  20 variables.  B
16a00 75 74 20 73 6f 6d 65 20 65 78 74 72 65 6d 65 20  ut some extreme 
16a10 75 73 65 72 73 20 77 61 6e 74 0a 2a 2a 20 74 6f  users want.** to
16a20 20 68 61 76 65 20 70 72 65 70 61 72 65 64 20 73   have prepared s
16a30 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 20 6f  tatements with o
16a40 76 65 72 20 33 32 37 36 37 20 76 61 72 69 61 62  ver 32767 variab
16a50 6c 65 73 2c 20 61 6e 64 20 66 6f 72 20 74 68 65  les, and for the
16a60 6d 0a 2a 2a 20 74 68 65 20 6f 70 74 69 6f 6e 20  m.** the option 
16a70 69 73 20 61 76 61 69 6c 61 62 6c 65 20 28 61 74  is available (at
16a80 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 29 2e 0a   compile-time)..
16a90 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  */.#if SQLITE_MA
16aa0 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45  X_VARIABLE_NUMBE
16ab0 52 3c 3d 33 32 37 36 37 0a 74 79 70 65 64 65 66  R<=32767.typedef
16ac0 20 69 31 36 20 79 6e 56 61 72 3b 0a 23 65 6c 73   i16 ynVar;.#els
16ad0 65 0a 74 79 70 65 64 65 66 20 69 6e 74 20 79 6e  e.typedef int yn
16ae0 56 61 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  Var;.#endif../*.
16af0 2a 2a 20 45 61 63 68 20 6e 6f 64 65 20 6f 66 20  ** Each node of 
16b00 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  an expression in
16b10 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20   the parse tree 
16b20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a  is an instance.*
16b30 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  * of this struct
16b40 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e  ure..**.** Expr.
16b50 6f 70 20 69 73 20 74 68 65 20 6f 70 63 6f 64 65  op is the opcode
16b60 2e 20 54 68 65 20 69 6e 74 65 67 65 72 20 70 61  . The integer pa
16b70 72 73 65 72 20 74 6f 6b 65 6e 20 63 6f 64 65 73  rser token codes
16b80 20 61 72 65 20 72 65 75 73 65 64 0a 2a 2a 20 61   are reused.** a
16b90 73 20 6f 70 63 6f 64 65 73 20 68 65 72 65 2e 20  s opcodes here. 
16ba0 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65  For example, the
16bb0 20 70 61 72 73 65 72 20 64 65 66 69 6e 65 73 20   parser defines 
16bc0 54 4b 5f 47 45 20 74 6f 20 62 65 20 61 6e 20 69  TK_GE to be an i
16bd0 6e 74 65 67 65 72 0a 2a 2a 20 63 6f 64 65 20 72  nteger.** code r
16be0 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20  epresenting the 
16bf0 22 3e 3d 22 20 6f 70 65 72 61 74 6f 72 2e 20 54  ">=" operator. T
16c00 68 69 73 20 73 61 6d 65 20 69 6e 74 65 67 65 72  his same integer
16c10 20 63 6f 64 65 20 69 73 20 72 65 75 73 65 64 0a   code is reused.
16c20 2a 2a 20 74 6f 20 72 65 70 72 65 73 65 6e 74 20  ** to represent 
16c30 74 68 65 20 67 72 65 61 74 65 72 2d 74 68 61 6e  the greater-than
16c40 2d 6f 72 2d 65 71 75 61 6c 2d 74 6f 20 6f 70 65  -or-equal-to ope
16c50 72 61 74 6f 72 20 69 6e 20 74 68 65 20 65 78 70  rator in the exp
16c60 72 65 73 73 69 6f 6e 0a 2a 2a 20 74 72 65 65 2e  ression.** tree.
16c70 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78  .**.** If the ex
16c80 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53  pression is an S
16c90 51 4c 20 6c 69 74 65 72 61 6c 20 28 54 4b 5f 49  QL literal (TK_I
16ca0 4e 54 45 47 45 52 2c 20 54 4b 5f 46 4c 4f 41 54  NTEGER, TK_FLOAT
16cb0 2c 20 54 4b 5f 42 4c 4f 42 2c 0a 2a 2a 20 6f 72  , TK_BLOB,.** or
16cc0 20 54 4b 5f 53 54 52 49 4e 47 29 2c 20 74 68 65   TK_STRING), the
16cd0 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e  n Expr.token con
16ce0 74 61 69 6e 73 20 74 68 65 20 74 65 78 74 20 6f  tains the text o
16cf0 66 20 74 68 65 20 53 51 4c 20 6c 69 74 65 72 61  f the SQL litera
16d00 6c 2e 20 49 66 0a 2a 2a 20 74 68 65 20 65 78 70  l. If.** the exp
16d10 72 65 73 73 69 6f 6e 20 69 73 20 61 20 76 61 72  ression is a var
16d20 69 61 62 6c 65 20 28 54 4b 5f 56 41 52 49 41 42  iable (TK_VARIAB
16d30 4c 45 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74  LE), then Expr.t
16d40 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68  oken contains th
16d50 65 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 61  e.** variable na
16d60 6d 65 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20  me. Finally, if 
16d70 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
16d80 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f  s an SQL functio
16d90 6e 20 28 54 4b 5f 46 55 4e 43 54 49 4f 4e 29 2c  n (TK_FUNCTION),
16da0 0a 2a 2a 20 74 68 65 6e 20 45 78 70 72 2e 74 6f  .** then Expr.to
16db0 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  ken contains the
16dc0 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e   name of the fun
16dd0 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 45 78 70  ction..**.** Exp
16de0 72 2e 70 52 69 67 68 74 20 61 6e 64 20 45 78 70  r.pRight and Exp
16df0 72 2e 70 4c 65 66 74 20 61 72 65 20 74 68 65 20  r.pLeft are the 
16e00 6c 65 66 74 20 61 6e 64 20 72 69 67 68 74 20 73  left and right s
16e10 75 62 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 66  ubexpressions of
16e20 20 61 0a 2a 2a 20 62 69 6e 61 72 79 20 6f 70 65   a.** binary ope
16e30 72 61 74 6f 72 2e 20 45 69 74 68 65 72 20 6f 72  rator. Either or
16e40 20 62 6f 74 68 20 6d 61 79 20 62 65 20 4e 55 4c   both may be NUL
16e50 4c 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 78 2e  L..**.** Expr.x.
16e60 70 4c 69 73 74 20 69 73 20 61 20 6c 69 73 74 20  pList is a list 
16e70 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 69 66 20  of arguments if 
16e80 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
16e90 73 20 61 6e 20 53 51 4c 20 66 75 6e 63 74 69 6f  s an SQL functio
16ea0 6e 2c 0a 2a 2a 20 61 20 43 41 53 45 20 65 78 70  n,.** a CASE exp
16eb0 72 65 73 73 69 6f 6e 20 6f 72 20 61 6e 20 49 4e  ression or an IN
16ec0 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66 20 74   expression of t
16ed0 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49  he form "<lhs> I
16ee0 4e 20 28 3c 79 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22  N (<y>, <z>...)"
16ef0 2e 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 53 65 6c  ..** Expr.x.pSel
16f00 65 63 74 20 69 73 20 75 73 65 64 20 69 66 20 74  ect is used if t
16f10 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
16f20 20 61 20 73 75 62 2d 73 65 6c 65 63 74 20 6f 72   a sub-select or
16f30 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f   an expression o
16f40 66 0a 2a 2a 20 74 68 65 20 66 6f 72 6d 20 22 3c  f.** the form "<
16f50 6c 68 73 3e 20 49 4e 20 28 53 45 4c 45 43 54 20  lhs> IN (SELECT 
16f60 2e 2e 2e 29 22 2e 20 49 66 20 74 68 65 20 45 50  ...)". If the EP
16f70 5f 78 49 73 53 65 6c 65 63 74 20 62 69 74 20 69  _xIsSelect bit i
16f80 73 20 73 65 74 20 69 6e 20 74 68 65 0a 2a 2a 20  s set in the.** 
16f90 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c  Expr.flags mask,
16fa0 20 74 68 65 6e 20 45 78 70 72 2e 78 2e 70 53 65   then Expr.x.pSe
16fb0 6c 65 63 74 20 69 73 20 76 61 6c 69 64 2e 20 4f  lect is valid. O
16fc0 74 68 65 72 77 69 73 65 2c 20 45 78 70 72 2e 78  therwise, Expr.x
16fd0 2e 70 4c 69 73 74 20 69 73 0a 2a 2a 20 76 61 6c  .pList is.** val
16fe0 69 64 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 65 78 70  id..**.** An exp
16ff0 72 65 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66  ression of the f
17000 6f 72 6d 20 49 44 20 6f 72 20 49 44 2e 49 44 20  orm ID or ID.ID 
17010 72 65 66 65 72 73 20 74 6f 20 61 20 63 6f 6c 75  refers to a colu
17020 6d 6e 20 69 6e 20 61 20 74 61 62 6c 65 2e 0a 2a  mn in a table..*
17030 2a 20 46 6f 72 20 73 75 63 68 20 65 78 70 72 65  * For such expre
17040 73 73 69 6f 6e 73 2c 20 45 78 70 72 2e 6f 70 20  ssions, Expr.op 
17050 69 73 20 73 65 74 20 74 6f 20 54 4b 5f 43 4f 4c  is set to TK_COL
17060 55 4d 4e 20 61 6e 64 20 45 78 70 72 2e 69 54 61  UMN and Expr.iTa
17070 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20 69 6e  ble is.** the in
17080 74 65 67 65 72 20 63 75 72 73 6f 72 20 6e 75 6d  teger cursor num
17090 62 65 72 20 6f 66 20 61 20 56 44 42 45 20 63 75  ber of a VDBE cu
170a0 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f  rsor pointing to
170b0 20 74 68 61 74 20 74 61 62 6c 65 20 61 6e 64 0a   that table and.
170c0 2a 2a 20 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20  ** Expr.iColumn 
170d0 69 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e 75  is the column nu
170e0 6d 62 65 72 20 66 6f 72 20 74 68 65 20 73 70 65  mber for the spe
170f0 63 69 66 69 63 20 63 6f 6c 75 6d 6e 2e 20 20 49  cific column.  I
17100 66 20 74 68 65 0a 2a 2a 20 65 78 70 72 65 73 73  f the.** express
17110 69 6f 6e 20 69 73 20 75 73 65 64 20 61 73 20 61  ion is used as a
17120 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 61 67   result in an ag
17130 67 72 65 67 61 74 65 20 53 45 4c 45 43 54 2c 20  gregate SELECT, 
17140 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75  then the.** valu
17150 65 20 69 73 20 61 6c 73 6f 20 73 74 6f 72 65 64  e is also stored
17160 20 69 6e 20 74 68 65 20 45 78 70 72 2e 69 41 67   in the Expr.iAg
17170 67 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20  g column in the 
17180 61 67 67 72 65 67 61 74 65 20 73 6f 20 74 68 61  aggregate so tha
17190 74 0a 2a 2a 20 69 74 20 63 61 6e 20 62 65 20 61  t.** it can be a
171a0 63 63 65 73 73 65 64 20 61 66 74 65 72 20 61 6c  ccessed after al
171b0 6c 20 61 67 67 72 65 67 61 74 65 73 20 61 72 65  l aggregates are
171c0 20 63 6f 6d 70 75 74 65 64 2e 0a 2a 2a 0a 2a 2a   computed..**.**
171d0 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69   If the expressi
171e0 6f 6e 20 69 73 20 61 6e 20 75 6e 62 6f 75 6e 64  on is an unbound
171f0 20 76 61 72 69 61 62 6c 65 20 6d 61 72 6b 65 72   variable marker
17200 20 28 61 20 71 75 65 73 74 69 6f 6e 20 6d 61 72   (a question mar
17210 6b 0a 2a 2a 20 63 68 61 72 61 63 74 65 72 20 27  k.** character '
17220 3f 27 20 69 6e 20 74 68 65 20 6f 72 69 67 69 6e  ?' in the origin
17230 61 6c 20 53 51 4c 29 20 74 68 65 6e 20 74 68 65  al SQL) then the
17240 20 45 78 70 72 2e 69 54 61 62 6c 65 20 68 6f 6c   Expr.iTable hol
17250 64 73 20 74 68 65 20 69 6e 64 65 78 0a 2a 2a 20  ds the index.** 
17260 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 61 74 20  number for that 
17270 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  variable..**.** 
17280 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  If the expressio
17290 6e 20 69 73 20 61 20 73 75 62 71 75 65 72 79 20  n is a subquery 
172a0 74 68 65 6e 20 45 78 70 72 2e 69 43 6f 6c 75 6d  then Expr.iColum
172b0 6e 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67  n holds an integ
172c0 65 72 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 6e  er.** register n
172d0 75 6d 62 65 72 20 63 6f 6e 74 61 69 6e 69 6e 67  umber containing
172e0 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
172f0 68 65 20 73 75 62 71 75 65 72 79 2e 20 20 49 66  he subquery.  If
17300 20 74 68 65 0a 2a 2a 20 73 75 62 71 75 65 72 79   the.** subquery
17310 20 67 69 76 65 73 20 61 20 63 6f 6e 73 74 61 6e   gives a constan
17320 74 20 72 65 73 75 6c 74 2c 20 74 68 65 6e 20 69  t result, then i
17330 54 61 62 6c 65 20 69 73 20 2d 31 2e 20 20 49 66  Table is -1.  If
17340 20 74 68 65 20 73 75 62 71 75 65 72 79 0a 2a 2a   the subquery.**
17350 20 67 69 76 65 73 20 61 20 64 69 66 66 65 72 65   gives a differe
17360 6e 74 20 61 6e 73 77 65 72 20 61 74 20 64 69 66  nt answer at dif
17370 66 65 72 65 6e 74 20 74 69 6d 65 73 20 64 75 72  ferent times dur
17380 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 70 72  ing statement pr
17390 6f 63 65 73 73 69 6e 67 0a 2a 2a 20 74 68 65 6e  ocessing.** then
173a0 20 69 54 61 62 6c 65 20 69 73 20 74 68 65 20 61   iTable is the a
173b0 64 64 72 65 73 73 20 6f 66 20 61 20 73 75 62 72  ddress of a subr
173c0 6f 75 74 69 6e 65 20 74 68 61 74 20 63 6f 6d 70  outine that comp
173d0 75 74 65 73 20 74 68 65 20 73 75 62 71 75 65 72  utes the subquer
173e0 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  y..**.** If the 
173f0 45 78 70 72 20 69 73 20 6f 66 20 74 79 70 65 20  Expr is of type 
17400 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 61 6e 64 20 74  OP_Column, and t
17410 68 65 20 74 61 62 6c 65 20 69 74 20 69 73 20 73  he table it is s
17420 65 6c 65 63 74 69 6e 67 20 66 72 6f 6d 0a 2a 2a  electing from.**
17430 20 69 73 20 61 20 64 69 73 6b 20 74 61 62 6c 65   is a disk table
17440 20 6f 72 20 74 68 65 20 22 6f 6c 64 2e 2a 22 20   or the "old.*" 
17450 70 73 65 75 64 6f 2d 74 61 62 6c 65 2c 20 74 68  pseudo-table, th
17460 65 6e 20 70 54 61 62 20 70 6f 69 6e 74 73 20 74  en pTab points t
17470 6f 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70  o the.** corresp
17480 6f 6e 64 69 6e 67 20 74 61 62 6c 65 20 64 65 66  onding table def
17490 69 6e 69 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41  inition..**.** A
174a0 4c 4c 4f 43 41 54 49 4f 4e 20 4e 4f 54 45 53 3a  LLOCATION NOTES:
174b0 0a 2a 2a 0a 2a 2a 20 45 78 70 72 20 6f 62 6a 65  .**.** Expr obje
174c0 63 74 73 20 63 61 6e 20 75 73 65 20 61 20 6c 6f  cts can use a lo
174d0 74 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61 63  t of memory spac
174e0 65 20 69 6e 20 64 61 74 61 62 61 73 65 20 73 63  e in database sc
174f0 68 65 6d 61 2e 20 20 54 6f 0a 2a 2a 20 68 65 6c  hema.  To.** hel
17500 70 20 72 65 64 75 63 65 20 6d 65 6d 6f 72 79 20  p reduce memory 
17510 72 65 71 75 69 72 65 6d 65 6e 74 73 2c 20 73 6f  requirements, so
17520 6d 65 74 69 6d 65 73 20 61 6e 20 45 78 70 72 20  metimes an Expr 
17530 6f 62 6a 65 63 74 20 77 69 6c 6c 20 62 65 0a 2a  object will be.*
17540 2a 20 74 72 75 6e 63 61 74 65 64 2e 20 20 41 6e  * truncated.  An
17550 64 20 74 6f 20 72 65 64 75 63 65 20 74 68 65 20  d to reduce the 
17560 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79  number of memory
17570 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2c 20 73 6f   allocations, so
17580 6d 65 74 69 6d 65 73 0a 2a 2a 20 74 77 6f 20 6f  metimes.** two o
17590 72 20 6d 6f 72 65 20 45 78 70 72 20 6f 62 6a 65  r more Expr obje
175a0 63 74 73 20 77 69 6c 6c 20 62 65 20 73 74 6f 72  cts will be stor
175b0 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 6d  ed in a single m
175c0 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
175d0 2c 0a 2a 2a 20 74 6f 67 65 74 68 65 72 20 77 69  ,.** together wi
175e0 74 68 20 45 78 70 72 2e 7a 54 6f 6b 65 6e 20 73  th Expr.zToken s
175f0 74 72 69 6e 67 73 2e 0a 2a 2a 0a 2a 2a 20 49 66  trings..**.** If
17600 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20   the EP_Reduced 
17610 61 6e 64 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79  and EP_TokenOnly
17620 20 66 6c 61 67 73 20 61 72 65 20 73 65 74 20 77   flags are set w
17630 68 65 6e 0a 2a 2a 20 61 6e 20 45 78 70 72 20 6f  hen.** an Expr o
17640 62 6a 65 63 74 20 69 73 20 74 72 75 6e 63 61 74  bject is truncat
17650 65 64 2e 20 20 57 68 65 6e 20 45 50 5f 52 65 64  ed.  When EP_Red
17660 75 63 65 64 20 69 73 20 73 65 74 2c 20 74 68 65  uced is set, the
17670 6e 20 61 6c 6c 0a 2a 2a 20 74 68 65 20 63 68 69  n all.** the chi
17680 6c 64 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20  ld Expr objects 
17690 69 6e 20 74 68 65 20 45 78 70 72 2e 70 4c 65 66  in the Expr.pLef
176a0 74 20 61 6e 64 20 45 78 70 72 2e 70 52 69 67 68  t and Expr.pRigh
176b0 74 20 73 75 62 74 72 65 65 73 0a 2a 2a 20 61 72  t subtrees.** ar
176c0 65 20 63 6f 6e 74 61 69 6e 65 64 20 77 69 74 68  e contained with
176d0 69 6e 20 74 68 65 20 73 61 6d 65 20 6d 65 6d 6f  in the same memo
176e0 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20  ry allocation.  
176f0 4e 6f 74 65 2c 20 68 6f 77 65 76 65 72 2c 20 74  Note, however, t
17700 68 61 74 0a 2a 2a 20 74 68 65 20 73 75 62 74 72  hat.** the subtr
17710 65 65 73 20 69 6e 20 45 78 70 72 2e 78 2e 70 4c  ees in Expr.x.pL
17720 69 73 74 20 6f 72 20 45 78 70 72 2e 78 2e 70 53  ist or Expr.x.pS
17730 65 6c 65 63 74 20 61 72 65 20 61 6c 77 61 79 73  elect are always
17740 20 73 65 70 61 72 61 74 65 6c 79 0a 2a 2a 20 61   separately.** a
17750 6c 6c 6f 63 61 74 65 64 2c 20 72 65 67 61 72 64  llocated, regard
17760 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20  less of whether 
17770 6f 72 20 6e 6f 74 20 45 50 5f 52 65 64 75 63 65  or not EP_Reduce
17780 64 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 73 74 72  d is set..*/.str
17790 75 63 74 20 45 78 70 72 20 7b 0a 20 20 75 38 20  uct Expr {.  u8 
177a0 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  op;             
177b0 20 20 20 20 2f 2a 20 4f 70 65 72 61 74 69 6f 6e      /* Operation
177c0 20 70 65 72 66 6f 72 6d 65 64 20 62 79 20 74 68   performed by th
177d0 69 73 20 6e 6f 64 65 20 2a 2f 0a 20 20 63 68 61  is node */.  cha
177e0 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20  r affinity;     
177f0 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e      /* The affin
17800 69 74 79 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ity of the colum
17810 6e 20 6f 72 20 30 20 69 66 20 6e 6f 74 20 61 20  n or 0 if not a 
17820 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33 32 20  column */.  u32 
17830 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  flags;          
17840 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 66 6c     /* Various fl
17850 61 67 73 2e 20 20 45 50 5f 2a 20 53 65 65 20 62  ags.  EP_* See b
17860 65 6c 6f 77 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  elow */.  union 
17870 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 54 6f 6b  {.    char *zTok
17880 65 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  en;          /* 
17890 54 6f 6b 65 6e 20 76 61 6c 75 65 2e 20 5a 65 72  Token value. Zer
178a0 6f 20 74 65 72 6d 69 6e 61 74 65 64 20 61 6e 64  o terminated and
178b0 20 64 65 71 75 6f 74 65 64 20 2a 2f 0a 20 20 20   dequoted */.   
178c0 20 69 6e 74 20 69 56 61 6c 75 65 3b 20 20 20 20   int iValue;    
178d0 20 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6e          /* Non-n
178e0 65 67 61 74 69 76 65 20 69 6e 74 65 67 65 72 20  egative integer 
178f0 76 61 6c 75 65 20 69 66 20 45 50 5f 49 6e 74 56  value if EP_IntV
17900 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 75 3b 0a 0a  alue */.  } u;..
17910 20 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 54    /* If the EP_T
17920 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 69 73  okenOnly flag is
17930 20 73 65 74 20 69 6e 20 74 68 65 20 45 78 70 72   set in the Expr
17940 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65  .flags mask, the
17950 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20  n no.  ** space 
17960 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72  is allocated for
17970 20 74 68 65 20 66 69 65 6c 64 73 20 62 65 6c 6f   the fields belo
17980 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e  w this point. An
17990 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a   attempt to.  **
179a0 20 61 63 63 65 73 73 20 74 68 65 6d 20 77 69 6c   access them wil
179b0 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20 73 65  l result in a se
179c0 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e  gfault or malfun
179d0 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a  ction..  *******
179e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
179f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17a00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17a10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
17a20 0a 20 20 45 78 70 72 20 2a 70 4c 65 66 74 3b 20  .  Expr *pLeft; 
17a30 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 66            /* Lef
17a40 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 45  t subnode */.  E
17a50 78 70 72 20 2a 70 52 69 67 68 74 3b 20 20 20 20  xpr *pRight;    
17a60 20 20 20 20 20 20 2f 2a 20 52 69 67 68 74 20 73        /* Right s
17a70 75 62 6e 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f  ubnode */.  unio
17a80 6e 20 7b 0a 20 20 20 20 45 78 70 72 4c 69 73 74  n {.    ExprList
17a90 20 2a 70 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20   *pList;     /* 
17aa0 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53 54 53 2c  op = IN, EXISTS,
17ab0 20 53 45 4c 45 43 54 2c 20 43 41 53 45 2c 20 46   SELECT, CASE, F
17ac0 55 4e 43 54 49 4f 4e 2c 20 42 45 54 57 45 45 4e  UNCTION, BETWEEN
17ad0 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a   */.    Select *
17ae0 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20  pSelect;     /* 
17af0 45 50 5f 78 49 73 53 65 6c 65 63 74 20 61 6e 64  EP_xIsSelect and
17b00 20 6f 70 20 3d 20 49 4e 2c 20 45 58 49 53 54 53   op = IN, EXISTS
17b10 2c 20 53 45 4c 45 43 54 20 2a 2f 0a 20 20 7d 20  , SELECT */.  } 
17b20 78 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20  x;..  /* If the 
17b30 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20  EP_Reduced flag 
17b40 69 73 20 73 65 74 20 69 6e 20 74 68 65 20 45 78  is set in the Ex
17b50 70 72 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74  pr.flags mask, t
17b60 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20 73 70 61 63  hen no.  ** spac
17b70 65 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 66  e is allocated f
17b80 6f 72 20 74 68 65 20 66 69 65 6c 64 73 20 62 65  or the fields be
17b90 6c 6f 77 20 74 68 69 73 20 70 6f 69 6e 74 2e 20  low this point. 
17ba0 41 6e 20 61 74 74 65 6d 70 74 20 74 6f 0a 20 20  An attempt to.  
17bb0 2a 2a 20 61 63 63 65 73 73 20 74 68 65 6d 20 77  ** access them w
17bc0 69 6c 6c 20 72 65 73 75 6c 74 20 69 6e 20 61 20  ill result in a 
17bd0 73 65 67 66 61 75 6c 74 20 6f 72 20 6d 61 6c 66  segfault or malf
17be0 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a  unction..  *****
17bf0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17c00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17c10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17c20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17c30 2f 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  /..#if SQLITE_MA
17c40 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a 20  X_EXPR_DEPTH>0. 
17c50 20 69 6e 74 20 6e 48 65 69 67 68 74 3b 20 20 20   int nHeight;   
17c60 20 20 20 20 20 20 20 20 2f 2a 20 48 65 69 67 68          /* Heigh
17c70 74 20 6f 66 20 74 68 65 20 74 72 65 65 20 68 65  t of the tree he
17c80 61 64 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64  aded by this nod
17c90 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e  e */.#endif.  in
17ca0 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20  t iTable;       
17cb0 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d       /* TK_COLUM
17cc0 4e 3a 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  N: cursor number
17cd0 20 6f 66 20 74 61 62 6c 65 20 68 6f 6c 64 69 6e   of table holdin
17ce0 67 20 63 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20  g column.       
17cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d00 20 20 2a 2a 20 54 4b 5f 52 45 47 49 53 54 45 52    ** TK_REGISTER
17d10 3a 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65  : register numbe
17d20 72 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r.              
17d30 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
17d40 5f 54 52 49 47 47 45 52 3a 20 31 20 2d 3e 20 6e  _TRIGGER: 1 -> n
17d50 65 77 2c 20 30 20 2d 3e 20 6f 6c 64 0a 20 20 20  ew, 0 -> old.   
17d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d70 20 20 20 20 20 20 2a 2a 20 45 50 5f 55 6e 6c 69        ** EP_Unli
17d80 6b 65 6c 79 3a 20 20 31 33 34 32 31 37 37 32 38  kely:  134217728
17d90 20 74 69 6d 65 73 20 6c 69 6b 65 6c 69 68 6f 6f   times likelihoo
17da0 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d.              
17db0 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
17dc0 5f 53 45 4c 45 43 54 3a 20 31 73 74 20 72 65 67  _SELECT: 1st reg
17dd0 69 73 74 65 72 20 6f 66 20 72 65 73 75 6c 74 20  ister of result 
17de0 76 65 63 74 6f 72 20 2a 2f 0a 20 20 79 6e 56 61  vector */.  ynVa
17df0 72 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  r iColumn;      
17e00 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a     /* TK_COLUMN:
17e10 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 2e 20 20   column index.  
17e20 2d 31 20 66 6f 72 20 72 6f 77 69 64 2e 0a 20 20  -1 for rowid..  
17e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e40 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 56 41 52         ** TK_VAR
17e50 49 41 42 4c 45 3a 20 76 61 72 69 61 62 6c 65 20  IABLE: variable 
17e60 6e 75 6d 62 65 72 20 28 61 6c 77 61 79 73 20 3e  number (always >
17e70 3d 20 31 29 2e 0a 20 20 20 20 20 20 20 20 20 20  = 1)..          
17e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
17e90 2a 20 54 4b 5f 53 45 4c 45 43 54 5f 43 4f 4c 55  * TK_SELECT_COLU
17ea0 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68  MN: column of th
17eb0 65 20 72 65 73 75 6c 74 20 76 65 63 74 6f 72 20  e result vector 
17ec0 2a 2f 0a 20 20 69 31 36 20 69 41 67 67 3b 20 20  */.  i16 iAgg;  
17ed0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57              /* W
17ee0 68 69 63 68 20 65 6e 74 72 79 20 69 6e 20 70 41  hich entry in pA
17ef0 67 67 49 6e 66 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f  ggInfo->aCol[] o
17f00 72 20 2d 3e 61 46 75 6e 63 5b 5d 20 2a 2f 0a 20  r ->aFunc[] */. 
17f10 20 69 31 36 20 69 52 69 67 68 74 4a 6f 69 6e 54   i16 iRightJoinT
17f20 61 62 6c 65 3b 20 20 20 2f 2a 20 49 66 20 45 50  able;   /* If EP
17f30 5f 46 72 6f 6d 4a 6f 69 6e 2c 20 74 68 65 20 72  _FromJoin, the r
17f40 69 67 68 74 20 74 61 62 6c 65 20 6f 66 20 74 68  ight table of th
17f50 65 20 6a 6f 69 6e 20 2a 2f 0a 20 20 75 38 20 6f  e join */.  u8 o
17f60 70 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  p2;             
17f70 20 20 20 2f 2a 20 54 4b 5f 52 45 47 49 53 54 45     /* TK_REGISTE
17f80 52 3a 20 6f 72 69 67 69 6e 61 6c 20 76 61 6c 75  R: original valu
17f90 65 20 6f 66 20 45 78 70 72 2e 6f 70 0a 20 20 20  e of Expr.op.   
17fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17fb0 20 20 20 20 20 20 2a 2a 20 54 4b 5f 43 4f 4c 55        ** TK_COLU
17fc0 4d 4e 3a 20 74 68 65 20 76 61 6c 75 65 20 6f 66  MN: the value of
17fd0 20 70 35 20 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d   p5 for OP_Colum
17fe0 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n.              
17ff0 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
18000 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 3a 20 6e  _AGG_FUNCTION: n
18010 65 73 74 69 6e 67 20 64 65 70 74 68 20 2a 2f 0a  esting depth */.
18020 20 20 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49    AggInfo *pAggI
18030 6e 66 6f 3b 20 20 20 20 20 2f 2a 20 55 73 65 64  nfo;     /* Used
18040 20 62 79 20 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d   by TK_AGG_COLUM
18050 4e 20 61 6e 64 20 54 4b 5f 41 47 47 5f 46 55 4e  N and TK_AGG_FUN
18060 43 54 49 4f 4e 20 2a 2f 0a 20 20 54 61 62 6c 65  CTION */.  Table
18070 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20   *pTab;         
18080 20 20 2f 2a 20 54 61 62 6c 65 20 66 6f 72 20 54    /* Table for T
18090 4b 5f 43 4f 4c 55 4d 4e 20 65 78 70 72 65 73 73  K_COLUMN express
180a0 69 6f 6e 73 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ions. */.};../*.
180b0 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
180c0 20 61 72 65 20 74 68 65 20 6d 65 61 6e 69 6e 67   are the meaning
180d0 73 20 6f 66 20 62 69 74 73 20 69 6e 20 74 68 65  s of bits in the
180e0 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c   Expr.flags fiel
180f0 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  d..*/.#define EP
18100 5f 46 72 6f 6d 4a 6f 69 6e 20 20 30 78 30 30 30  _FromJoin  0x000
18110 30 30 31 20 2f 2a 20 4f 72 69 67 69 6e 61 74 65  001 /* Originate
18120 73 20 69 6e 20 4f 4e 2f 55 53 49 4e 47 20 63 6c  s in ON/USING cl
18130 61 75 73 65 20 6f 66 20 6f 75 74 65 72 20 6a 6f  ause of outer jo
18140 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  in */.#define EP
18150 5f 41 67 67 20 20 20 20 20 20 20 30 78 30 30 30  _Agg       0x000
18160 30 30 32 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20  002 /* Contains 
18170 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72  one or more aggr
18180 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
18190 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52 65  */.#define EP_Re
181a0 73 6f 6c 76 65 64 20 20 30 78 30 30 30 30 30 34  solved  0x000004
181b0 20 2f 2a 20 49 44 73 20 68 61 76 65 20 62 65 65   /* IDs have bee
181c0 6e 20 72 65 73 6f 6c 76 65 64 20 74 6f 20 43 4f  n resolved to CO
181d0 4c 55 4d 4e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  LUMNs */.#define
181e0 20 45 50 5f 45 72 72 6f 72 20 20 20 20 20 30 78   EP_Error     0x
181f0 30 30 30 30 30 38 20 2f 2a 20 45 78 70 72 65 73  000008 /* Expres
18200 73 69 6f 6e 20 63 6f 6e 74 61 69 6e 73 20 6f 6e  sion contains on
18210 65 20 6f 72 20 6d 6f 72 65 20 65 72 72 6f 72 73  e or more errors
18220 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44   */.#define EP_D
18230 69 73 74 69 6e 63 74 20 20 30 78 30 30 30 30 31  istinct  0x00001
18240 30 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66  0 /* Aggregate f
18250 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 44 49 53  unction with DIS
18260 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 2a 2f  TINCT keyword */
18270 0a 23 64 65 66 69 6e 65 20 45 50 5f 56 61 72 53  .#define EP_VarS
18280 65 6c 65 63 74 20 30 78 30 30 30 30 32 30 20 2f  elect 0x000020 /
18290 2a 20 70 53 65 6c 65 63 74 20 69 73 20 63 6f 72  * pSelect is cor
182a0 72 65 6c 61 74 65 64 2c 20 6e 6f 74 20 63 6f 6e  related, not con
182b0 73 74 61 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  stant */.#define
182c0 20 45 50 5f 44 62 6c 51 75 6f 74 65 64 20 30 78   EP_DblQuoted 0x
182d0 30 30 30 30 34 30 20 2f 2a 20 74 6f 6b 65 6e 2e  000040 /* token.
182e0 7a 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79  z was originally
182f0 20 69 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64 65   in "..." */.#de
18300 66 69 6e 65 20 45 50 5f 49 6e 66 69 78 46 75 6e  fine EP_InfixFun
18310 63 20 30 78 30 30 30 30 38 30 20 2f 2a 20 54 72  c 0x000080 /* Tr
18320 75 65 20 66 6f 72 20 61 6e 20 69 6e 66 69 78 20  ue for an infix 
18330 66 75 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c 20  function: LIKE, 
18340 47 4c 4f 42 2c 20 65 74 63 20 2a 2f 0a 23 64 65  GLOB, etc */.#de
18350 66 69 6e 65 20 45 50 5f 43 6f 6c 6c 61 74 65 20  fine EP_Collate 
18360 20 20 30 78 30 30 30 31 30 30 20 2f 2a 20 54 72    0x000100 /* Tr
18370 65 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b  ee contains a TK
18380 5f 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74 6f  _COLLATE operato
18390 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  r */.#define EP_
183a0 47 65 6e 65 72 69 63 20 20 20 30 78 30 30 30 32  Generic   0x0002
183b0 30 30 20 2f 2a 20 49 67 6e 6f 72 65 20 43 4f 4c  00 /* Ignore COL
183c0 4c 41 54 45 20 6f 72 20 61 66 66 69 6e 69 74 79  LATE or affinity
183d0 20 6f 6e 20 74 68 69 73 20 74 72 65 65 20 2a 2f   on this tree */
183e0 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 74 56  .#define EP_IntV
183f0 61 6c 75 65 20 20 30 78 30 30 30 34 30 30 20 2f  alue  0x000400 /
18400 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20  * Integer value 
18410 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 75 2e 69  contained in u.i
18420 56 61 6c 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65  Value */.#define
18430 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 30 78   EP_xIsSelect 0x
18440 30 30 30 38 30 30 20 2f 2a 20 78 2e 70 53 65 6c  000800 /* x.pSel
18450 65 63 74 20 69 73 20 76 61 6c 69 64 20 28 6f 74  ect is valid (ot
18460 68 65 72 77 69 73 65 20 78 2e 70 4c 69 73 74 20  herwise x.pList 
18470 69 73 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  is) */.#define E
18480 50 5f 53 6b 69 70 20 20 20 20 20 20 30 78 30 30  P_Skip      0x00
18490 31 30 30 30 20 2f 2a 20 43 4f 4c 4c 41 54 45 2c  1000 /* COLLATE,
184a0 20 41 53 2c 20 6f 72 20 55 4e 4c 49 4b 45 4c 59   AS, or UNLIKELY
184b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 52   */.#define EP_R
184c0 65 64 75 63 65 64 20 20 20 30 78 30 30 32 30 30  educed   0x00200
184d0 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74  0 /* Expr struct
184e0 20 45 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a   EXPR_REDUCEDSIZ
184f0 45 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a  E bytes only */.
18500 23 64 65 66 69 6e 65 20 45 50 5f 54 6f 6b 65 6e  #define EP_Token
18510 4f 6e 6c 79 20 30 78 30 30 34 30 30 30 20 2f 2a  Only 0x004000 /*
18520 20 45 78 70 72 20 73 74 72 75 63 74 20 45 58 50   Expr struct EXP
18530 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20  R_TOKENONLYSIZE 
18540 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64  bytes only */.#d
18550 65 66 69 6e 65 20 45 50 5f 53 74 61 74 69 63 20  efine EP_Static 
18560 20 20 20 30 78 30 30 38 30 30 30 20 2f 2a 20 48     0x008000 /* H
18570 65 6c 64 20 69 6e 20 6d 65 6d 6f 72 79 20 6e 6f  eld in memory no
18580 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20  t obtained from 
18590 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 23 64 65 66  malloc() */.#def
185a0 69 6e 65 20 45 50 5f 4d 65 6d 54 6f 6b 65 6e 20  ine EP_MemToken 
185b0 20 30 78 30 31 30 30 30 30 20 2f 2a 20 4e 65 65   0x010000 /* Nee
185c0 64 20 74 6f 20 73 71 6c 69 74 65 33 44 62 46 72  d to sqlite3DbFr
185d0 65 65 28 29 20 45 78 70 72 2e 7a 54 6f 6b 65 6e  ee() Expr.zToken
185e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4e   */.#define EP_N
185f0 6f 52 65 64 75 63 65 20 20 30 78 30 32 30 30 30  oReduce  0x02000
18600 30 20 2f 2a 20 43 61 6e 6e 6f 74 20 45 58 50 52  0 /* Cannot EXPR
18610 44 55 50 5f 52 45 44 55 43 45 20 74 68 69 73 20  DUP_REDUCE this 
18620 45 78 70 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  Expr */.#define 
18630 45 50 5f 55 6e 6c 69 6b 65 6c 79 20 20 30 78 30  EP_Unlikely  0x0
18640 34 30 30 30 30 20 2f 2a 20 75 6e 6c 69 6b 65 6c  40000 /* unlikel
18650 79 28 29 20 6f 72 20 6c 69 6b 65 6c 69 68 6f 6f  y() or likelihoo
18660 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  d() function */.
18670 23 64 65 66 69 6e 65 20 45 50 5f 43 6f 6e 73 74  #define EP_Const
18680 46 75 6e 63 20 30 78 30 38 30 30 30 30 20 2f 2a  Func 0x080000 /*
18690 20 41 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43   A SQLITE_FUNC_C
186a0 4f 4e 53 54 41 4e 54 20 6f 72 20 5f 53 4c 4f 43  ONSTANT or _SLOC
186b0 48 4e 47 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  HNG function */.
186c0 23 64 65 66 69 6e 65 20 45 50 5f 43 61 6e 42 65  #define EP_CanBe
186d0 4e 75 6c 6c 20 30 78 31 30 30 30 30 30 20 2f 2a  Null 0x100000 /*
186e0 20 43 61 6e 20 62 65 20 6e 75 6c 6c 20 64 65 73   Can be null des
186f0 70 69 74 65 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f  pite NOT NULL co
18700 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66  nstraint */.#def
18710 69 6e 65 20 45 50 5f 53 75 62 71 75 65 72 79 20  ine EP_Subquery 
18720 20 30 78 32 30 30 30 30 30 20 2f 2a 20 54 72 65   0x200000 /* Tre
18730 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b 5f  e contains a TK_
18740 53 45 4c 45 43 54 20 6f 70 65 72 61 74 6f 72 20  SELECT operator 
18750 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 6c  */.#define EP_Al
18760 69 61 73 20 20 20 20 20 30 78 34 30 30 30 30 30  ias     0x400000
18770 20 2f 2a 20 49 73 20 61 6e 20 61 6c 69 61 73 20   /* Is an alias 
18780 66 6f 72 20 61 20 72 65 73 75 6c 74 20 73 65 74  for a result set
18790 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66 69   column */.#defi
187a0 6e 65 20 45 50 5f 4c 65 61 66 20 20 20 20 20 20  ne EP_Leaf      
187b0 30 78 38 30 30 30 30 30 20 2f 2a 20 45 78 70 72  0x800000 /* Expr
187c0 2e 70 4c 65 66 74 2c 20 2e 70 52 69 67 68 74 2c  .pLeft, .pRight,
187d0 20 2e 75 2e 70 53 65 6c 65 63 74 20 61 6c 6c 20   .u.pSelect all 
187e0 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43  NULL */../*.** C
187f0 6f 6d 62 69 6e 61 74 69 6f 6e 73 20 6f 66 20 74  ombinations of t
18800 77 6f 20 6f 72 20 6d 6f 72 65 20 45 50 5f 2a 20  wo or more EP_* 
18810 66 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65  flags.*/.#define
18820 20 45 50 5f 50 72 6f 70 61 67 61 74 65 20 28 45   EP_Propagate (E
18830 50 5f 43 6f 6c 6c 61 74 65 7c 45 50 5f 53 75 62  P_Collate|EP_Sub
18840 71 75 65 72 79 29 20 2f 2a 20 50 72 6f 70 61 67  query) /* Propag
18850 61 74 65 20 74 68 65 73 65 20 62 69 74 73 20 75  ate these bits u
18860 70 20 74 72 65 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  p tree */../*.**
18870 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61   These macros ca
18880 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74 65 73  n be used to tes
18890 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72  t, set, or clear
188a0 20 62 69 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20   bits in the.** 
188b0 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c 64  Expr.flags field
188c0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 78 70  ..*/.#define Exp
188d0 72 48 61 73 50 72 6f 70 65 72 74 79 28 45 2c 50  rHasProperty(E,P
188e0 29 20 20 20 20 20 28 28 28 45 29 2d 3e 66 6c 61  )     (((E)->fla
188f0 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66  gs&(P))!=0).#def
18900 69 6e 65 20 45 78 70 72 48 61 73 41 6c 6c 50 72  ine ExprHasAllPr
18910 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28 28 28  operty(E,P)  (((
18920 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d  E)->flags&(P))==
18930 28 50 29 29 0a 23 64 65 66 69 6e 65 20 45 78 70  (P)).#define Exp
18940 72 53 65 74 50 72 6f 70 65 72 74 79 28 45 2c 50  rSetProperty(E,P
18950 29 20 20 20 20 20 28 45 29 2d 3e 66 6c 61 67 73  )     (E)->flags
18960 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65 20 45 78  |=(P).#define Ex
18970 70 72 43 6c 65 61 72 50 72 6f 70 65 72 74 79 28  prClearProperty(
18980 45 2c 50 29 20 20 20 28 45 29 2d 3e 66 6c 61 67  E,P)   (E)->flag
18990 73 26 3d 7e 28 50 29 0a 0a 2f 2a 20 54 68 65 20  s&=~(P)../* The 
189a0 45 78 70 72 53 65 74 56 56 41 50 72 6f 70 65 72  ExprSetVVAProper
189b0 74 79 28 29 20 6d 61 63 72 6f 20 69 73 20 75 73  ty() macro is us
189c0 65 64 20 66 6f 72 20 56 65 72 69 66 69 63 61 74  ed for Verificat
189d0 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c  ion, Validation,
189e0 0a 2a 2a 20 61 6e 64 20 41 63 63 72 65 64 69 74  .** and Accredit
189f0 61 74 69 6f 6e 20 6f 6e 6c 79 2e 20 20 49 74 20  ation only.  It 
18a00 77 6f 72 6b 73 20 6c 69 6b 65 20 45 78 70 72 53  works like ExprS
18a10 65 74 50 72 6f 70 65 72 74 79 28 29 20 64 75 72  etProperty() dur
18a20 69 6e 67 20 56 56 41 0a 2a 2a 20 70 72 6f 63 65  ing VVA.** proce
18a30 73 73 65 73 20 62 75 74 20 69 73 20 61 20 6e 6f  sses but is a no
18a40 2d 6f 70 20 66 6f 72 20 64 65 6c 69 76 65 72 79  -op for delivery
18a50 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
18a60 54 45 5f 44 45 42 55 47 0a 23 20 64 65 66 69 6e  TE_DEBUG.# defin
18a70 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f 70  e ExprSetVVAProp
18a80 65 72 74 79 28 45 2c 50 29 20 20 28 45 29 2d 3e  erty(E,P)  (E)->
18a90 66 6c 61 67 73 7c 3d 28 50 29 0a 23 65 6c 73 65  flags|=(P).#else
18aa0 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72 53 65  .# define ExprSe
18ab0 74 56 56 41 50 72 6f 70 65 72 74 79 28 45 2c 50  tVVAProperty(E,P
18ac0 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
18ad0 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d  Macros to determ
18ae0 69 6e 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ine the number o
18af0 66 20 62 79 74 65 73 20 72 65 71 75 69 72 65 64  f bytes required
18b00 20 62 79 20 61 20 6e 6f 72 6d 61 6c 20 45 78 70   by a normal Exp
18b10 72 0a 2a 2a 20 73 74 72 75 63 74 2c 20 61 6e 20  r.** struct, an 
18b20 45 78 70 72 20 73 74 72 75 63 74 20 77 69 74 68  Expr struct with
18b30 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64 20   the EP_Reduced 
18b40 66 6c 61 67 20 73 65 74 20 69 6e 20 45 78 70 72  flag set in Expr
18b50 2e 66 6c 61 67 73 0a 2a 2a 20 61 6e 64 20 61 6e  .flags.** and an
18b60 20 45 78 70 72 20 73 74 72 75 63 74 20 77 69 74   Expr struct wit
18b70 68 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e  h the EP_TokenOn
18b80 6c 79 20 66 6c 61 67 20 73 65 74 2e 0a 2a 2f 0a  ly flag set..*/.
18b90 23 64 65 66 69 6e 65 20 45 58 50 52 5f 46 55 4c  #define EXPR_FUL
18ba0 4c 53 49 5a 45 20 20 20 20 20 20 20 20 20 20 20  LSIZE           
18bb0 73 69 7a 65 6f 66 28 45 78 70 72 29 20 20 20 20  sizeof(Expr)    
18bc0 20 20 20 20 20 20 20 2f 2a 20 46 75 6c 6c 20 73         /* Full s
18bd0 69 7a 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ize */.#define E
18be0 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45 20  XPR_REDUCEDSIZE 
18bf0 20 20 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28         offsetof(
18c00 45 78 70 72 2c 69 54 61 62 6c 65 29 20 20 2f 2a  Expr,iTable)  /*
18c10 20 43 6f 6d 6d 6f 6e 20 66 65 61 74 75 72 65 73   Common features
18c20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52   */.#define EXPR
18c30 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 20  _TOKENONLYSIZE  
18c40 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70      offsetof(Exp
18c50 72 2c 70 4c 65 66 74 29 20 20 20 2f 2a 20 46 65  r,pLeft)   /* Fe
18c60 77 65 72 20 66 65 61 74 75 72 65 73 20 2a 2f 0a  wer features */.
18c70 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 70 61 73  ./*.** Flags pas
18c80 73 65 64 20 74 6f 20 74 68 65 20 73 71 6c 69 74  sed to the sqlit
18c90 65 33 45 78 70 72 44 75 70 28 29 20 66 75 6e 63  e3ExprDup() func
18ca0 74 69 6f 6e 2e 20 53 65 65 20 74 68 65 20 68 65  tion. See the he
18cb0 61 64 65 72 20 63 6f 6d 6d 65 6e 74 0a 2a 2a 20  ader comment.** 
18cc0 61 62 6f 76 65 20 73 71 6c 69 74 65 33 45 78 70  above sqlite3Exp
18cd0 72 44 75 70 28 29 20 66 6f 72 20 64 65 74 61 69  rDup() for detai
18ce0 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ls..*/.#define E
18cf0 58 50 52 44 55 50 5f 52 45 44 55 43 45 20 20 20  XPRDUP_REDUCE   
18d00 20 20 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a        0x0001  /*
18d10 20 55 73 65 64 20 72 65 64 75 63 65 64 2d 73 69   Used reduced-si
18d20 7a 65 20 45 78 70 72 20 6e 6f 64 65 73 20 2a 2f  ze Expr nodes */
18d30 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f  ../*.** A list o
18d40 66 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 20  f expressions.  
18d50 45 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20  Each expression 
18d60 6d 61 79 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 68  may optionally h
18d70 61 76 65 20 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20  ave a.** name.  
18d80 41 6e 20 65 78 70 72 2f 6e 61 6d 65 20 63 6f 6d  An expr/name com
18d90 62 69 6e 61 74 69 6f 6e 20 63 61 6e 20 62 65 20  bination can be 
18da0 75 73 65 64 20 69 6e 20 73 65 76 65 72 61 6c 20  used in several 
18db0 77 61 79 73 2c 20 73 75 63 68 0a 2a 2a 20 61 73  ways, such.** as
18dc0 20 74 68 65 20 6c 69 73 74 20 6f 66 20 22 65 78   the list of "ex
18dd0 70 72 20 41 53 20 49 44 22 20 66 69 65 6c 64 73  pr AS ID" fields
18de0 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 22 53 45   following a "SE
18df0 4c 45 43 54 22 20 6f 72 20 69 6e 20 74 68 65 0a  LECT" or in the.
18e00 2a 2a 20 6c 69 73 74 20 6f 66 20 22 49 44 20 3d  ** list of "ID =
18e10 20 65 78 70 72 22 20 69 74 65 6d 73 20 69 6e 20   expr" items in 
18e20 61 6e 20 55 50 44 41 54 45 2e 20 20 41 20 6c 69  an UPDATE.  A li
18e30 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e  st of expression
18e40 73 20 63 61 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65  s can.** also be
18e50 20 75 73 65 64 20 61 73 20 74 68 65 20 61 72 67   used as the arg
18e60 75 6d 65 6e 74 20 74 6f 20 61 20 66 75 6e 63 74  ument to a funct
18e70 69 6f 6e 2c 20 69 6e 20 77 68 69 63 68 20 63 61  ion, in which ca
18e80 73 65 20 74 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a  se the a.zName.*
18e90 2a 20 66 69 65 6c 64 20 69 73 20 6e 6f 74 20 75  * field is not u
18ea0 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 79 20 64 65  sed..**.** By de
18eb0 66 61 75 6c 74 20 74 68 65 20 45 78 70 72 2e 7a  fault the Expr.z
18ec0 53 70 61 6e 20 66 69 65 6c 64 20 68 6f 6c 64 73  Span field holds
18ed0 20 61 20 68 75 6d 61 6e 2d 72 65 61 64 61 62 6c   a human-readabl
18ee0 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f 66  e description of
18ef0 0a 2a 2a 20 74 68 65 20 65 78 70 72 65 73 73 69  .** the expressi
18f00 6f 6e 20 74 68 61 74 20 69 73 20 75 73 65 64 20  on that is used 
18f10 69 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f  in the generatio
18f20 6e 20 6f 66 20 65 72 72 6f 72 20 6d 65 73 73 61  n of error messa
18f30 67 65 73 20 61 6e 64 0a 2a 2a 20 63 6f 6c 75 6d  ges and.** colum
18f40 6e 20 6c 61 62 65 6c 73 2e 20 20 49 6e 20 74 68  n labels.  In th
18f50 69 73 20 63 61 73 65 2c 20 45 78 70 72 2e 7a 53  is case, Expr.zS
18f60 70 61 6e 20 69 73 20 74 79 70 69 63 61 6c 6c 79  pan is typically
18f70 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 0a 2a   the text of a.*
18f80 2a 20 63 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73  * column express
18f90 69 6f 6e 20 61 73 20 69 74 20 65 78 69 73 74 73  ion as it exists
18fa0 20 69 6e 20 61 20 53 45 4c 45 43 54 20 73 74 61   in a SELECT sta
18fb0 74 65 6d 65 6e 74 2e 20 20 48 6f 77 65 76 65 72  tement.  However
18fc0 2c 20 69 66 0a 2a 2a 20 74 68 65 20 62 53 70 61  , if.** the bSpa
18fd0 6e 49 73 54 61 62 20 66 6c 61 67 20 69 73 20 73  nIsTab flag is s
18fe0 65 74 2c 20 74 68 65 6e 20 7a 53 70 61 6e 20 69  et, then zSpan i
18ff0 73 20 6f 76 65 72 6c 6f 61 64 65 64 20 74 6f 20  s overloaded to 
19000 6d 65 61 6e 20 74 68 65 20 6e 61 6d 65 0a 2a 2a  mean the name.**
19010 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 63   of the result c
19020 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 66 6f 72  olumn in the for
19030 6d 3a 20 44 41 54 41 42 41 53 45 2e 54 41 42 4c  m: DATABASE.TABL
19040 45 2e 43 4f 4c 55 4d 4e 2e 20 20 54 68 69 73 20  E.COLUMN.  This 
19050 6c 61 74 65 72 0a 2a 2a 20 66 6f 72 6d 20 69 73  later.** form is
19060 20 75 73 65 64 20 66 6f 72 20 6e 61 6d 65 20 72   used for name r
19070 65 73 6f 6c 75 74 69 6f 6e 20 77 69 74 68 20 6e  esolution with n
19080 65 73 74 65 64 20 46 52 4f 4d 20 63 6c 61 75 73  ested FROM claus
19090 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78  es..*/.struct Ex
190a0 70 72 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e  prList {.  int n
190b0 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20  Expr;           
190c0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
190d0 78 70 72 65 73 73 69 6f 6e 73 20 6f 6e 20 74 68  xpressions on th
190e0 65 20 6c 69 73 74 20 2a 2f 0a 20 20 69 6e 74 20  e list */.  int 
190f0 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20  nAlloc;         
19100 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
19110 61 5b 5d 20 73 6c 6f 74 73 20 61 6c 6c 6f 63 61  a[] slots alloca
19120 74 65 64 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  ted */.  struct 
19130 45 78 70 72 4c 69 73 74 5f 69 74 65 6d 20 7b 20  ExprList_item { 
19140 2f 2a 20 46 6f 72 20 65 61 63 68 20 65 78 70 72  /* For each expr
19150 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 6c 69  ession in the li
19160 73 74 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a  st */.    Expr *
19170 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20  pExpr;          
19180 20 20 2f 2a 20 54 68 65 20 70 61 72 73 65 20 74    /* The parse t
19190 72 65 65 20 66 6f 72 20 74 68 69 73 20 65 78 70  ree for this exp
191a0 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63  ression */.    c
191b0 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
191c0 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20         /* Token 
191d0 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
191e0 74 68 69 73 20 65 78 70 72 65 73 73 69 6f 6e 20  this expression 
191f0 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 53 70  */.    char *zSp
19200 61 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  an;            /
19210 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78 74 20  * Original text 
19220 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  of the expressio
19230 6e 20 2a 2f 0a 20 20 20 20 75 38 20 73 6f 72 74  n */.    u8 sort
19240 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20  Order;          
19250 20 2f 2a 20 31 20 66 6f 72 20 44 45 53 43 20 6f   /* 1 for DESC o
19260 72 20 30 20 66 6f 72 20 41 53 43 20 2a 2f 0a 20  r 0 for ASC */. 
19270 20 20 20 75 6e 73 69 67 6e 65 64 20 64 6f 6e 65     unsigned done
19280 20 3a 31 3b 20 20 20 20 20 20 20 2f 2a 20 41 20   :1;       /* A 
19290 66 6c 61 67 20 74 6f 20 69 6e 64 69 63 61 74 65  flag to indicate
192a0 20 77 68 65 6e 20 70 72 6f 63 65 73 73 69 6e 67   when processing
192b0 20 69 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a   is finished */.
192c0 20 20 20 20 75 6e 73 69 67 6e 65 64 20 62 53 70      unsigned bSp
192d0 61 6e 49 73 54 61 62 20 3a 31 3b 20 2f 2a 20 7a  anIsTab :1; /* z
192e0 53 70 61 6e 20 68 6f 6c 64 73 20 44 42 2e 54 41  Span holds DB.TA
192f0 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a 20 20  BLE.COLUMN */.  
19300 20 20 75 6e 73 69 67 6e 65 64 20 72 65 75 73 61    unsigned reusa
19310 62 6c 65 20 3a 31 3b 20 20 20 2f 2a 20 43 6f 6e  ble :1;   /* Con
19320 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e  stant expression
19330 20 69 73 20 72 65 75 73 61 62 6c 65 20 2a 2f 0a   is reusable */.
19340 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20      union {.    
19350 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20 20    struct {.     
19360 20 20 20 75 31 36 20 69 4f 72 64 65 72 42 79 43     u16 iOrderByC
19370 6f 6c 3b 20 20 20 20 20 20 2f 2a 20 46 6f 72 20  ol;      /* For 
19380 4f 52 44 45 52 20 42 59 2c 20 63 6f 6c 75 6d 6e  ORDER BY, column
19390 20 6e 75 6d 62 65 72 20 69 6e 20 72 65 73 75 6c   number in resul
193a0 74 20 73 65 74 20 2a 2f 0a 20 20 20 20 20 20 20  t set */.       
193b0 20 75 31 36 20 69 41 6c 69 61 73 3b 20 20 20 20   u16 iAlias;    
193c0 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
193d0 69 6e 74 6f 20 50 61 72 73 65 2e 61 41 6c 69 61  into Parse.aAlia
193e0 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65 20 2a 2f  s[] for zName */
193f0 0a 20 20 20 20 20 20 7d 20 78 3b 0a 20 20 20 20  .      } x;.    
19400 20 20 69 6e 74 20 69 43 6f 6e 73 74 45 78 70 72    int iConstExpr
19410 52 65 67 3b 20 20 20 20 20 20 2f 2a 20 52 65 67  Reg;      /* Reg
19420 69 73 74 65 72 20 69 6e 20 77 68 69 63 68 20 45  ister in which E
19430 78 70 72 20 76 61 6c 75 65 20 69 73 20 63 61 63  xpr value is cac
19440 68 65 64 20 2a 2f 0a 20 20 20 20 7d 20 75 3b 0a  hed */.    } u;.
19450 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20 20    } a[1];       
19460 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e             /* On
19470 65 20 73 6c 6f 74 20 66 6f 72 20 65 61 63 68 20  e slot for each 
19480 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68  expression in th
19490 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  e list */.};../*
194a0 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
194b0 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
194c0 65 20 69 73 20 75 73 65 64 20 62 79 20 74 68 65  e is used by the
194d0 20 70 61 72 73 65 72 20 74 6f 20 72 65 63 6f 72   parser to recor
194e0 64 20 62 6f 74 68 0a 2a 2a 20 74 68 65 20 70 61  d both.** the pa
194f0 72 73 65 20 74 72 65 65 20 66 6f 72 20 61 6e 20  rse tree for an 
19500 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 74  expression and t
19510 68 65 20 73 70 61 6e 20 6f 66 20 69 6e 70 75 74  he span of input
19520 20 74 65 78 74 20 66 6f 72 20 61 6e 0a 2a 2a 20   text for an.** 
19530 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2f 0a 73  expression..*/.s
19540 74 72 75 63 74 20 45 78 70 72 53 70 61 6e 20 7b  truct ExprSpan {
19550 0a 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20  .  Expr *pExpr; 
19560 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
19570 65 78 70 72 65 73 73 69 6f 6e 20 70 61 72 73 65  expression parse
19580 20 74 72 65 65 20 2a 2f 0a 20 20 63 6f 6e 73 74   tree */.  const
19590 20 63 68 61 72 20 2a 7a 53 74 61 72 74 3b 20 20   char *zStart;  
195a0 20 2f 2a 20 46 69 72 73 74 20 63 68 61 72 61 63   /* First charac
195b0 74 65 72 20 6f 66 20 69 6e 70 75 74 20 74 65 78  ter of input tex
195c0 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  t */.  const cha
195d0 72 20 2a 7a 45 6e 64 3b 20 20 20 20 20 2f 2a 20  r *zEnd;     /* 
195e0 4f 6e 65 20 63 68 61 72 61 63 74 65 72 20 70 61  One character pa
195f0 73 74 20 74 68 65 20 65 6e 64 20 6f 66 20 69 6e  st the end of in
19600 70 75 74 20 74 65 78 74 20 2a 2f 0a 7d 3b 0a 0a  put text */.};..
19610 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
19620 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  e of this struct
19630 75 72 65 20 63 61 6e 20 68 6f 6c 64 20 61 20 73  ure can hold a s
19640 69 6d 70 6c 65 20 6c 69 73 74 20 6f 66 20 69 64  imple list of id
19650 65 6e 74 69 66 69 65 72 73 2c 0a 2a 2a 20 73 75  entifiers,.** su
19660 63 68 20 61 73 20 74 68 65 20 6c 69 73 74 20 22  ch as the list "
19670 61 2c 62 2c 63 22 20 69 6e 20 74 68 65 20 66 6f  a,b,c" in the fo
19680 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d 65 6e  llowing statemen
19690 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 49  ts:.**.**      I
196a0 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62  NSERT INTO t(a,b
196b0 2c 63 29 20 56 41 4c 55 45 53 20 2e 2e 2e 3b 0a  ,c) VALUES ...;.
196c0 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45 20 49  **      CREATE I
196d0 4e 44 45 58 20 69 64 78 20 4f 4e 20 74 28 61 2c  NDEX idx ON t(a,
196e0 62 2c 63 29 3b 0a 2a 2a 20 20 20 20 20 20 43 52  b,c);.**      CR
196f0 45 41 54 45 20 54 52 49 47 47 45 52 20 74 72 69  EATE TRIGGER tri
19700 67 20 42 45 46 4f 52 45 20 55 50 44 41 54 45 20  g BEFORE UPDATE 
19710 4f 4e 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 3b  ON t(a,b,c) ...;
19720 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 64 4c 69 73  .**.** The IdLis
19730 74 2e 61 2e 69 64 78 20 66 69 65 6c 64 20 69 73  t.a.idx field is
19740 20 75 73 65 64 20 77 68 65 6e 20 74 68 65 20 49   used when the I
19750 64 4c 69 73 74 20 72 65 70 72 65 73 65 6e 74 73  dList represents
19760 20 74 68 65 20 6c 69 73 74 20 6f 66 0a 2a 2a 20   the list of.** 
19770 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61 66 74  column names aft
19780 65 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20  er a table name 
19790 69 6e 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61  in an INSERT sta
197a0 74 65 6d 65 6e 74 2e 20 20 49 6e 20 74 68 65 20  tement.  In the 
197b0 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a 20  statement.**.** 
197c0 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
197d0 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a 0a  t(a,b,c) ....**.
197e0 2a 2a 20 49 66 20 22 61 22 20 69 73 20 74 68 65  ** If "a" is the
197f0 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20   k-th column of 
19800 74 61 62 6c 65 20 22 74 22 2c 20 74 68 65 6e 20  table "t", then 
19810 49 64 4c 69 73 74 2e 61 5b 30 5d 2e 69 64 78 3d  IdList.a[0].idx=
19820 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 64  =k..*/.struct Id
19830 4c 69 73 74 20 7b 0a 20 20 73 74 72 75 63 74 20  List {.  struct 
19840 49 64 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20  IdList_item {.  
19850 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
19860 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
19870 68 65 20 69 64 65 6e 74 69 66 69 65 72 20 2a 2f  he identifier */
19880 0a 20 20 20 20 69 6e 74 20 69 64 78 3b 20 20 20  .    int idx;   
19890 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
198a0 69 6e 20 73 6f 6d 65 20 54 61 62 6c 65 2e 61 43  in some Table.aC
198b0 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c 75 6d 6e  ol[] of a column
198c0 20 6e 61 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f 0a   named zName */.
198d0 20 20 7d 20 2a 61 3b 0a 20 20 69 6e 74 20 6e 49    } *a;.  int nI
198e0 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  d;         /* Nu
198f0 6d 62 65 72 20 6f 66 20 69 64 65 6e 74 69 66 69  mber of identifi
19900 65 72 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20  ers on the list 
19910 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
19920 20 62 69 74 6d 61 73 6b 20 64 61 74 61 74 79 70   bitmask datatyp
19930 65 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20  e defined below 
19940 69 73 20 75 73 65 64 20 66 6f 72 20 76 61 72 69  is used for vari
19950 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ous optimization
19960 73 2e 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69 6e  s..**.** Changin
19970 67 20 74 68 69 73 20 66 72 6f 6d 20 61 20 36 34  g this from a 64
19980 2d 62 69 74 20 74 6f 20 61 20 33 32 2d 62 69 74  -bit to a 32-bit
19990 20 74 79 70 65 20 6c 69 6d 69 74 73 20 74 68 65   type limits the
199a0 20 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 74 61   number of.** ta
199b0 62 6c 65 73 20 69 6e 20 61 20 6a 6f 69 6e 20 74  bles in a join t
199c0 6f 20 33 32 20 69 6e 73 74 65 61 64 20 6f 66 20  o 32 instead of 
199d0 36 34 2e 20 20 42 75 74 20 69 74 20 61 6c 73 6f  64.  But it also
199e0 20 72 65 64 75 63 65 73 20 74 68 65 20 73 69 7a   reduces the siz
199f0 65 0a 2a 2a 20 6f 66 20 74 68 65 20 6c 69 62 72  e.** of the libr
19a00 61 72 79 20 62 79 20 37 33 38 20 62 79 74 65 73  ary by 738 bytes
19a10 20 6f 6e 20 69 78 38 36 2e 0a 2a 2f 0a 23 69 66   on ix86..*/.#if
19a20 64 65 66 20 53 51 4c 49 54 45 5f 42 49 54 4d 41  def SQLITE_BITMA
19a30 53 4b 5f 54 59 50 45 0a 20 20 74 79 70 65 64 65  SK_TYPE.  typede
19a40 66 20 53 51 4c 49 54 45 5f 42 49 54 4d 41 53 4b  f SQLITE_BITMASK
19a50 5f 54 59 50 45 20 42 69 74 6d 61 73 6b 3b 0a 23  _TYPE Bitmask;.#
19a60 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20 75  else.  typedef u
19a70 36 34 20 42 69 74 6d 61 73 6b 3b 0a 23 65 6e 64  64 Bitmask;.#end
19a80 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75  if../*.** The nu
19a90 6d 62 65 72 20 6f 66 20 62 69 74 73 20 69 6e 20  mber of bits in 
19aa0 61 20 42 69 74 6d 61 73 6b 2e 20 20 22 42 4d 53  a Bitmask.  "BMS
19ab0 22 20 6d 65 61 6e 73 20 22 42 69 74 4d 61 73 6b  " means "BitMask
19ac0 20 53 69 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66 69   Size"..*/.#defi
19ad0 6e 65 20 42 4d 53 20 20 28 28 69 6e 74 29 28 73  ne BMS  ((int)(s
19ae0 69 7a 65 6f 66 28 42 69 74 6d 61 73 6b 29 2a 38  izeof(Bitmask)*8
19af0 29 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74 20  ))../*.** A bit 
19b00 69 6e 20 61 20 42 69 74 6d 61 73 6b 0a 2a 2f 0a  in a Bitmask.*/.
19b10 23 64 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 28  #define MASKBIT(
19b20 6e 29 20 20 20 28 28 28 42 69 74 6d 61 73 6b 29  n)   (((Bitmask)
19b30 31 29 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65  1)<<(n)).#define
19b40 20 4d 41 53 4b 42 49 54 33 32 28 6e 29 20 28 28   MASKBIT32(n) ((
19b50 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 31 29  (unsigned int)1)
19b60 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65 20 41  <<(n)).#define A
19b70 4c 4c 42 49 54 53 20 20 20 20 20 20 28 28 42 69  LLBITS      ((Bi
19b80 74 6d 61 73 6b 29 2d 31 29 0a 0a 2f 2a 0a 2a 2a  tmask)-1)../*.**
19b90 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   The following s
19ba0 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62  tructure describ
19bb0 65 73 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  es the FROM clau
19bc0 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20 73  se of a SELECT s
19bd0 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61 63  tatement..** Eac
19be0 68 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71 75  h table or subqu
19bf0 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d 20  ery in the FROM 
19c00 63 6c 61 75 73 65 20 69 73 20 61 20 73 65 70 61  clause is a sepa
19c10 72 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f 66 0a  rate element of.
19c20 2a 2a 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61  ** the SrcList.a
19c30 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a 20  [] array..**.** 
19c40 57 69 74 68 20 74 68 65 20 61 64 64 69 74 69 6f  With the additio
19c50 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20 64 61  n of multiple da
19c60 74 61 62 61 73 65 20 73 75 70 70 6f 72 74 2c 20  tabase support, 
19c70 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
19c80 72 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e 20 61  ructure.** can a
19c90 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20 64  lso be used to d
19ca0 65 73 63 72 69 62 65 20 61 20 70 61 72 74 69 63  escribe a partic
19cb0 75 6c 61 72 20 74 61 62 6c 65 20 73 75 63 68 20  ular table such 
19cc0 61 73 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  as the table tha
19cd0 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69 65 64  t.** is modified
19ce0 20 62 79 20 61 6e 20 49 4e 53 45 52 54 2c 20 44   by an INSERT, D
19cf0 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45  ELETE, or UPDATE
19d00 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20   statement.  In 
19d10 73 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a 2a 2a  standard SQL,.**
19d20 20 73 75 63 68 20 61 20 74 61 62 6c 65 20 6d 75   such a table mu
19d30 73 74 20 62 65 20 61 20 73 69 6d 70 6c 65 20 6e  st be a simple n
19d40 61 6d 65 3a 20 49 44 2e 20 20 42 75 74 20 69 6e  ame: ID.  But in
19d50 20 53 51 4c 69 74 65 2c 20 74 68 65 20 74 61 62   SQLite, the tab
19d60 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62 65  le can.** now be
19d70 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 61   identified by a
19d80 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2c 20   database name, 
19d90 61 20 64 6f 74 2c 20 74 68 65 6e 20 74 68 65 20  a dot, then the 
19da0 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 49  table name: ID.I
19db0 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a 6f 69  D..**.** The joi
19dc0 6e 74 79 70 65 20 73 74 61 72 74 73 20 6f 75 74  ntype starts out
19dd0 20 73 68 6f 77 69 6e 67 20 74 68 65 20 6a 6f 69   showing the joi
19de0 6e 20 74 79 70 65 20 62 65 74 77 65 65 6e 20 74  n type between t
19df0 68 65 20 63 75 72 72 65 6e 74 20 74 61 62 6c 65  he current table
19e00 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e 65 78 74  .** and the next
19e10 20 74 61 62 6c 65 20 6f 6e 20 74 68 65 20 6c 69   table on the li
19e20 73 74 2e 20 20 54 68 65 20 70 61 72 73 65 72 20  st.  The parser 
19e30 62 75 69 6c 64 73 20 74 68 65 20 6c 69 73 74 20  builds the list 
19e40 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20 42 75 74  this way..** But
19e50 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53   sqlite3SrcListS
19e60 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 29 20 6c  hiftJoinType() l
19e70 61 74 65 72 20 73 68 69 66 74 73 20 74 68 65 20  ater shifts the 
19e80 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20 74 68 61  jointypes so tha
19e90 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e 74 79  t each.** jointy
19ea0 70 65 20 65 78 70 72 65 73 73 65 73 20 74 68 65  pe expresses the
19eb0 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74 68   join between th
19ec0 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65 20  e table and the 
19ed0 70 72 65 76 69 6f 75 73 20 74 61 62 6c 65 2e 0a  previous table..
19ee0 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 63 6f 6c  **.** In the col
19ef0 55 73 65 64 20 66 69 65 6c 64 2c 20 74 68 65 20  Used field, the 
19f00 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20 28  high-order bit (
19f10 62 69 74 20 36 33 29 20 69 73 20 73 65 74 20 69  bit 63) is set i
19f20 66 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 63  f the table.** c
19f30 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74 68 61  ontains more tha
19f40 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20 61 6e 64  n 63 columns and
19f50 20 74 68 65 20 36 34 2d 74 68 20 6f 72 20 6c 61   the 64-th or la
19f60 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73  ter column is us
19f70 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 72  ed..*/.struct Sr
19f80 63 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 53  cList {.  int nS
19f90 72 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  rc;        /* Nu
19fa0 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20 6f  mber of tables o
19fb0 72 20 73 75 62 71 75 65 72 69 65 73 20 69 6e 20  r subqueries in 
19fc0 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
19fd0 2a 2f 0a 20 20 75 33 32 20 6e 41 6c 6c 6f 63 3b  */.  u32 nAlloc;
19fe0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
19ff0 6f 66 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f 63  of entries alloc
1a000 61 74 65 64 20 69 6e 20 61 5b 5d 20 62 65 6c 6f  ated in a[] belo
1a010 77 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 53 72  w */.  struct Sr
1a020 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20 20  cList_item {.   
1a030 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
1a040 3b 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 6f 20  ;  /* Schema to 
1a050 77 68 69 63 68 20 74 68 69 73 20 69 74 65 6d 20  which this item 
1a060 69 73 20 66 69 78 65 64 20 2a 2f 0a 20 20 20 20  is fixed */.    
1a070 63 68 61 72 20 2a 7a 44 61 74 61 62 61 73 65 3b  char *zDatabase;
1a080 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74    /* Name of dat
1a090 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 74 68  abase holding th
1a0a0 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  is table */.    
1a0b0 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
1a0c0 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
1a0d0 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63 68   table */.    ch
1a0e0 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20 20 20 20  ar *zAlias;     
1a0f0 2f 2a 20 54 68 65 20 22 42 22 20 70 61 72 74 20  /* The "B" part 
1a100 6f 66 20 61 20 22 41 20 41 53 20 42 22 20 70 68  of a "A AS B" ph
1a110 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20 69 73 20  rase.  zName is 
1a120 74 68 65 20 22 41 22 20 2a 2f 0a 20 20 20 20 54  the "A" */.    T
1a130 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
1a140 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61 62 6c 65   /* An SQL table
1a150 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
1a160 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20 53  o zName */.    S
1a170 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20  elect *pSelect; 
1a180 20 2f 2a 20 41 20 53 45 4c 45 43 54 20 73 74 61   /* A SELECT sta
1a190 74 65 6d 65 6e 74 20 75 73 65 64 20 69 6e 20 70  tement used in p
1a1a0 6c 61 63 65 20 6f 66 20 61 20 74 61 62 6c 65 20  lace of a table 
1a1b0 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  name */.    int 
1a1c0 61 64 64 72 46 69 6c 6c 53 75 62 3b 20 20 2f 2a  addrFillSub;  /*
1a1d0 20 41 64 64 72 65 73 73 20 6f 66 20 73 75 62 72   Address of subr
1a1e0 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6e 69 66 65  outine to manife
1a1f0 73 74 20 61 20 73 75 62 71 75 65 72 79 20 2a 2f  st a subquery */
1a200 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65 74 75  .    int regRetu
1a210 72 6e 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74  rn;    /* Regist
1a220 65 72 20 68 6f 6c 64 69 6e 67 20 72 65 74 75 72  er holding retur
1a230 6e 20 61 64 64 72 65 73 73 20 6f 66 20 61 64 64  n address of add
1a240 72 46 69 6c 6c 53 75 62 20 2a 2f 0a 20 20 20 20  rFillSub */.    
1a250 69 6e 74 20 72 65 67 52 65 73 75 6c 74 3b 20 20  int regResult;  
1a260 20 20 2f 2a 20 52 65 67 69 73 74 65 72 73 20 68    /* Registers h
1a270 6f 6c 64 69 6e 67 20 72 65 73 75 6c 74 73 20 6f  olding results o
1a280 66 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a  f a co-routine *
1a290 2f 0a 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20  /.    struct {. 
1a2a0 20 20 20 20 20 75 38 20 6a 6f 69 6e 74 79 70 65       u8 jointype
1a2b0 3b 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20 6f  ;      /* Type o
1a2c0 66 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74  f join between t
1a2d0 68 69 73 20 74 61 62 6c 65 20 61 6e 64 20 74 68  his table and th
1a2e0 65 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20  e previous */.  
1a2f0 20 20 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f 74      unsigned not
1a300 49 6e 64 65 78 65 64 20 3a 31 3b 20 20 20 20 2f  Indexed :1;    /
1a310 2a 20 54 72 75 65 20 69 66 20 74 68 65 72 65 20  * True if there 
1a320 69 73 20 61 20 4e 4f 54 20 49 4e 44 45 58 45 44  is a NOT INDEXED
1a330 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20   clause */.     
1a340 20 75 6e 73 69 67 6e 65 64 20 69 73 49 6e 64 65   unsigned isInde
1a350 78 65 64 42 79 20 3a 31 3b 20 20 20 2f 2a 20 54  xedBy :1;   /* T
1a360 72 75 65 20 69 66 20 74 68 65 72 65 20 69 73 20  rue if there is 
1a370 61 6e 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c  an INDEXED BY cl
1a380 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e  ause */.      un
1a390 73 69 67 6e 65 64 20 69 73 54 61 62 46 75 6e 63  signed isTabFunc
1a3a0 20 3a 31 3b 20 20 20 20 20 2f 2a 20 54 72 75 65   :1;     /* True
1a3b0 20 69 66 20 74 61 62 6c 65 2d 76 61 6c 75 65 64   if table-valued
1a3c0 2d 66 75 6e 63 74 69 6f 6e 20 73 79 6e 74 61 78  -function syntax
1a3d0 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e   */.      unsign
1a3e0 65 64 20 69 73 43 6f 72 72 65 6c 61 74 65 64 20  ed isCorrelated 
1a3f0 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20  :1;  /* True if 
1a400 73 75 62 2d 71 75 65 72 79 20 69 73 20 63 6f 72  sub-query is cor
1a410 72 65 6c 61 74 65 64 20 2a 2f 0a 20 20 20 20 20  related */.     
1a420 20 75 6e 73 69 67 6e 65 64 20 76 69 61 43 6f 72   unsigned viaCor
1a430 6f 75 74 69 6e 65 20 3a 31 3b 20 20 2f 2a 20 49  outine :1;  /* I
1a440 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20  mplemented as a 
1a450 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20  co-routine */.  
1a460 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 52      unsigned isR
1a470 65 63 75 72 73 69 76 65 20 3a 31 3b 20 20 20 2f  ecursive :1;   /
1a480 2a 20 54 72 75 65 20 66 6f 72 20 72 65 63 75 72  * True for recur
1a490 73 69 76 65 20 72 65 66 65 72 65 6e 63 65 20 69  sive reference i
1a4a0 6e 20 57 49 54 48 20 2a 2f 0a 20 20 20 20 7d 20  n WITH */.    } 
1a4b0 66 67 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  fg;.#ifndef SQLI
1a4c0 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a  TE_OMIT_EXPLAIN.
1a4d0 20 20 20 20 75 38 20 69 53 65 6c 65 63 74 49 64      u8 iSelectId
1a4e0 3b 20 20 20 20 20 2f 2a 20 49 66 20 70 53 65 6c  ;     /* If pSel
1a4f0 65 63 74 21 3d 30 2c 20 74 68 65 20 69 64 20 6f  ect!=0, the id o
1a500 66 20 74 68 65 20 73 75 62 2d 73 65 6c 65 63 74  f the sub-select
1a510 20 69 6e 20 45 51 50 20 2a 2f 0a 23 65 6e 64 69   in EQP */.#endi
1a520 66 0a 20 20 20 20 69 6e 74 20 69 43 75 72 73 6f  f.    int iCurso
1a530 72 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56  r;      /* The V
1a540 44 42 45 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  DBE cursor numbe
1a550 72 20 75 73 65 64 20 74 6f 20 61 63 63 65 73 73  r used to access
1a560 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
1a570 20 20 20 45 78 70 72 20 2a 70 4f 6e 3b 20 20 20     Expr *pOn;   
1a580 20 20 20 20 20 2f 2a 20 54 68 65 20 4f 4e 20 63       /* The ON c
1a590 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20  lause of a join 
1a5a0 2a 2f 0a 20 20 20 20 49 64 4c 69 73 74 20 2a 70  */.    IdList *p
1a5b0 55 73 69 6e 67 3b 20 20 20 2f 2a 20 54 68 65 20  Using;   /* The 
1a5c0 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20  USING clause of 
1a5d0 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 42 69  a join */.    Bi
1a5e0 74 6d 61 73 6b 20 63 6f 6c 55 73 65 64 3b 20 20  tmask colUsed;  
1a5f0 2f 2a 20 42 69 74 20 4e 20 28 31 3c 3c 4e 29 20  /* Bit N (1<<N) 
1a600 73 65 74 20 69 66 20 63 6f 6c 75 6d 6e 20 4e 20  set if column N 
1a610 6f 66 20 70 54 61 62 20 69 73 20 75 73 65 64 20  of pTab is used 
1a620 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20  */.    union {. 
1a630 20 20 20 20 20 63 68 61 72 20 2a 7a 49 6e 64 65       char *zInde
1a640 78 65 64 42 79 3b 20 20 20 20 2f 2a 20 49 64 65  xedBy;    /* Ide
1a650 6e 74 69 66 69 65 72 20 66 72 6f 6d 20 22 49 4e  ntifier from "IN
1a660 44 45 58 45 44 20 42 59 20 3c 7a 49 6e 64 65 78  DEXED BY <zIndex
1a670 3e 22 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20  >" clause */.   
1a680 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 46 75     ExprList *pFu
1a690 6e 63 41 72 67 3b 20 20 2f 2a 20 41 72 67 75 6d  ncArg;  /* Argum
1a6a0 65 6e 74 73 20 74 6f 20 74 61 62 6c 65 2d 76 61  ents to table-va
1a6b0 6c 75 65 64 2d 66 75 6e 63 74 69 6f 6e 20 2a 2f  lued-function */
1a6c0 0a 20 20 20 20 7d 20 75 31 3b 0a 20 20 20 20 49  .    } u1;.    I
1a6d0 6e 64 65 78 20 2a 70 49 42 49 6e 64 65 78 3b 20  ndex *pIBIndex; 
1a6e0 20 2f 2a 20 49 6e 64 65 78 20 73 74 72 75 63 74   /* Index struct
1a6f0 75 72 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  ure correspondin
1a700 67 20 74 6f 20 75 31 2e 7a 49 6e 64 65 78 65 64  g to u1.zIndexed
1a710 42 79 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 20  By */.  } a[1]; 
1a720 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
1a730 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63  ne entry for eac
1a740 68 20 69 64 65 6e 74 69 66 69 65 72 20 6f 6e 20  h identifier on 
1a750 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a  the list */.};..
1a760 2f 2a 0a 2a 2a 20 50 65 72 6d 69 74 74 65 64 20  /*.** Permitted 
1a770 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20 53 72  values of the Sr
1a780 63 4c 69 73 74 2e 61 2e 6a 6f 69 6e 74 79 70 65  cList.a.jointype
1a790 20 66 69 65 6c 64 0a 2a 2f 0a 23 64 65 66 69 6e   field.*/.#defin
1a7a0 65 20 4a 54 5f 49 4e 4e 45 52 20 20 20 20 20 30  e JT_INNER     0
1a7b0 78 30 30 30 31 20 20 20 20 2f 2a 20 41 6e 79 20  x0001    /* Any 
1a7c0 6b 69 6e 64 20 6f 66 20 69 6e 6e 65 72 20 6f 72  kind of inner or
1a7d0 20 63 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f 0a 23   cross join */.#
1a7e0 64 65 66 69 6e 65 20 4a 54 5f 43 52 4f 53 53 20  define JT_CROSS 
1a7f0 20 20 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a      0x0002    /*
1a800 20 45 78 70 6c 69 63 69 74 20 75 73 65 20 6f 66   Explicit use of
1a810 20 74 68 65 20 43 52 4f 53 53 20 6b 65 79 77 6f   the CROSS keywo
1a820 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  rd */.#define JT
1a830 5f 4e 41 54 55 52 41 4c 20 20 20 30 78 30 30 30  _NATURAL   0x000
1a840 34 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72  4    /* True for
1a850 20 61 20 22 6e 61 74 75 72 61 6c 22 20 6a 6f 69   a "natural" joi
1a860 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  n */.#define JT_
1a870 4c 45 46 54 20 20 20 20 20 20 30 78 30 30 30 38  LEFT      0x0008
1a880 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 75 74 65      /* Left oute
1a890 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  r join */.#defin
1a8a0 65 20 4a 54 5f 52 49 47 48 54 20 20 20 20 20 30  e JT_RIGHT     0
1a8b0 78 30 30 31 30 20 20 20 20 2f 2a 20 52 69 67 68  x0010    /* Righ
1a8c0 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a  t outer join */.
1a8d0 23 64 65 66 69 6e 65 20 4a 54 5f 4f 55 54 45 52  #define JT_OUTER
1a8e0 20 20 20 20 20 30 78 30 30 32 30 20 20 20 20 2f       0x0020    /
1a8f0 2a 20 54 68 65 20 22 4f 55 54 45 52 22 20 6b 65  * The "OUTER" ke
1a900 79 77 6f 72 64 20 69 73 20 70 72 65 73 65 6e 74  yword is present
1a910 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 45   */.#define JT_E
1a920 52 52 4f 52 20 20 20 20 20 30 78 30 30 34 30 20  RROR     0x0040 
1a930 20 20 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 6f 72     /* unknown or
1a940 20 75 6e 73 75 70 70 6f 72 74 65 64 20 6a 6f 69   unsupported joi
1a950 6e 20 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a 2a  n type */.../*.*
1a960 2a 20 46 6c 61 67 73 20 61 70 70 72 6f 70 72 69  * Flags appropri
1a970 61 74 65 20 66 6f 72 20 74 68 65 20 77 63 74 72  ate for the wctr
1a980 6c 46 6c 61 67 73 20 70 61 72 61 6d 65 74 65 72  lFlags parameter
1a990 20 6f 66 20 73 71 6c 69 74 65 33 57 68 65 72 65   of sqlite3Where
1a9a0 42 65 67 69 6e 28 29 0a 2a 2a 20 61 6e 64 20 74  Begin().** and t
1a9b0 68 65 20 57 68 65 72 65 49 6e 66 6f 2e 77 63 74  he WhereInfo.wct
1a9c0 72 6c 46 6c 61 67 73 20 6d 65 6d 62 65 72 2e 0a  rlFlags member..
1a9d0 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73  **.** Value cons
1a9e0 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72 63 65  traints (enforce
1a9f0 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29 3a  d via assert()):
1aa00 0a 2a 2a 20 20 20 20 20 57 48 45 52 45 5f 55 53  .**     WHERE_US
1aa10 45 5f 4c 49 4d 49 54 20 20 3d 3d 20 53 46 5f 46  E_LIMIT  == SF_F
1aa20 69 78 65 64 4c 69 6d 69 74 0a 2a 2f 0a 23 64 65  ixedLimit.*/.#de
1aa30 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45 52  fine WHERE_ORDER
1aa40 42 59 5f 4e 4f 52 4d 41 4c 20 20 20 30 78 30 30  BY_NORMAL   0x00
1aa50 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a 23  00 /* No-op */.#
1aa60 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44  define WHERE_ORD
1aa70 45 52 42 59 5f 4d 49 4e 20 20 20 20 20 20 30 78  ERBY_MIN      0x
1aa80 30 30 30 31 20 2f 2a 20 4f 52 44 45 52 20 42 59  0001 /* ORDER BY
1aa90 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20   processing for 
1aaa0 6d 69 6e 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64  min() func */.#d
1aab0 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45  efine WHERE_ORDE
1aac0 52 42 59 5f 4d 41 58 20 20 20 20 20 20 30 78 30  RBY_MAX      0x0
1aad0 30 30 32 20 2f 2a 20 4f 52 44 45 52 20 42 59 20  002 /* ORDER BY 
1aae0 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 6d  processing for m
1aaf0 61 78 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64 65  ax() func */.#de
1ab00 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50 41  fine WHERE_ONEPA
1ab10 53 53 5f 44 45 53 49 52 45 44 20 20 30 78 30 30  SS_DESIRED  0x00
1ab20 30 34 20 2f 2a 20 57 61 6e 74 20 74 6f 20 64 6f  04 /* Want to do
1ab30 20 6f 6e 65 2d 70 61 73 73 20 55 50 44 41 54 45   one-pass UPDATE
1ab40 2f 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69  /DELETE */.#defi
1ab50 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50 41 53 53  ne WHERE_ONEPASS
1ab60 5f 4d 55 4c 54 49 52 4f 57 20 30 78 30 30 30 38  _MULTIROW 0x0008
1ab70 20 2f 2a 20 4f 4e 45 50 41 53 53 20 69 73 20 6f   /* ONEPASS is o
1ab80 6b 20 77 69 74 68 20 6d 75 6c 74 69 70 6c 65 20  k with multiple 
1ab90 72 6f 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rows */.#define 
1aba0 57 48 45 52 45 5f 44 55 50 4c 49 43 41 54 45 53  WHERE_DUPLICATES
1abb0 5f 4f 4b 20 20 20 20 30 78 30 30 31 30 20 2f 2a  _OK    0x0010 /*
1abc0 20 4f 6b 20 74 6f 20 72 65 74 75 72 6e 20 61 20   Ok to return a 
1abd0 72 6f 77 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  row more than on
1abe0 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ce */.#define WH
1abf0 45 52 45 5f 4f 52 5f 53 55 42 43 4c 41 55 53 45  ERE_OR_SUBCLAUSE
1ac00 20 20 20 20 20 30 78 30 30 32 30 20 2f 2a 20 50       0x0020 /* P
1ac10 72 6f 63 65 73 73 69 6e 67 20 61 20 73 75 62 2d  rocessing a sub-
1ac20 57 48 45 52 45 20 61 73 20 70 61 72 74 20 6f 66  WHERE as part of
1ac30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ac40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac50 20 20 20 20 20 20 20 2a 2a 20 74 68 65 20 4f 52         ** the OR
1ac60 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 20 2a   optimization  *
1ac70 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1ac80 47 52 4f 55 50 42 59 20 20 20 20 20 20 20 20 20  GROUPBY         
1ac90 20 30 78 30 30 34 30 20 2f 2a 20 70 4f 72 64 65   0x0040 /* pOrde
1aca0 72 42 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20  rBy is really a 
1acb0 47 52 4f 55 50 20 42 59 20 2a 2f 0a 23 64 65 66  GROUP BY */.#def
1acc0 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
1acd0 43 54 42 59 20 20 20 20 20 20 20 30 78 30 30 38  CTBY       0x008
1ace0 30 20 2f 2a 20 70 4f 72 64 65 72 62 79 20 69 73  0 /* pOrderby is
1acf0 20 72 65 61 6c 6c 79 20 61 20 44 49 53 54 49 4e   really a DISTIN
1ad00 43 54 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65  CT clause */.#de
1ad10 66 69 6e 65 20 57 48 45 52 45 5f 57 41 4e 54 5f  fine WHERE_WANT_
1ad20 44 49 53 54 49 4e 43 54 20 20 20 20 30 78 30 31  DISTINCT    0x01
1ad30 30 30 20 2f 2a 20 41 6c 6c 20 6f 75 74 70 75 74  00 /* All output
1ad40 20 6e 65 65 64 73 20 74 6f 20 62 65 20 64 69 73   needs to be dis
1ad50 74 69 6e 63 74 20 2a 2f 0a 23 64 65 66 69 6e 65  tinct */.#define
1ad60 20 57 48 45 52 45 5f 53 4f 52 54 42 59 47 52 4f   WHERE_SORTBYGRO
1ad70 55 50 20 20 20 20 20 20 30 78 30 32 30 30 20 2f  UP      0x0200 /
1ad80 2a 20 53 75 70 70 6f 72 74 20 73 71 6c 69 74 65  * Support sqlite
1ad90 33 57 68 65 72 65 49 73 53 6f 72 74 65 64 28 29  3WhereIsSorted()
1ada0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1adb0 45 5f 53 45 45 4b 5f 54 41 42 4c 45 20 20 20 20  E_SEEK_TABLE    
1adc0 20 20 20 30 78 30 34 30 30 20 2f 2a 20 44 6f 20     0x0400 /* Do 
1add0 6e 6f 74 20 64 65 66 65 72 20 73 65 65 6b 73 20  not defer seeks 
1ade0 6f 6e 20 6d 61 69 6e 20 74 61 62 6c 65 20 2a 2f  on main table */
1adf0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
1ae00 52 44 45 52 42 59 5f 4c 49 4d 49 54 20 20 20 20  RDERBY_LIMIT    
1ae10 30 78 30 38 30 30 20 2f 2a 20 4f 52 44 45 52 42  0x0800 /* ORDERB
1ae20 59 2b 4c 49 4d 49 54 20 6f 6e 20 74 68 65 20 69  Y+LIMIT on the i
1ae30 6e 6e 65 72 20 6c 6f 6f 70 20 2a 2f 0a 23 64 65  nner loop */.#de
1ae40 66 69 6e 65 20 57 48 45 52 45 5f 53 45 45 4b 5f  fine WHERE_SEEK_
1ae50 55 4e 49 51 5f 54 41 42 4c 45 20 20 30 78 31 30  UNIQ_TABLE  0x10
1ae60 30 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 64 65 66  00 /* Do not def
1ae70 65 72 20 73 65 65 6b 73 20 69 66 20 75 6e 69 71  er seeks if uniq
1ae80 75 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  ue */.          
1ae90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1aea0 20 20 20 20 20 30 78 32 30 30 30 20 20 20 20 6e       0x2000    n
1aeb0 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 75 73 65  ot currently use
1aec0 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  d */.#define WHE
1aed0 52 45 5f 55 53 45 5f 4c 49 4d 49 54 20 20 20 20  RE_USE_LIMIT    
1aee0 20 20 20 20 30 78 34 30 30 30 20 2f 2a 20 55 73      0x4000 /* Us
1aef0 65 20 74 68 65 20 4c 49 4d 49 54 20 69 6e 20 63  e the LIMIT in c
1af00 6f 73 74 20 65 73 74 69 6d 61 74 65 73 20 2a 2f  ost estimates */
1af10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1af20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 20 20           /*     
1af30 30 78 38 30 30 30 20 20 20 20 6e 6f 74 20 63 75  0x8000    not cu
1af40 72 72 65 6e 74 6c 79 20 75 73 65 64 20 2a 2f 0a  rrently used */.
1af50 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75  ./* Allowed retu
1af60 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73  rn values from s
1af70 71 6c 69 74 65 33 57 68 65 72 65 49 73 44 69 73  qlite3WhereIsDis
1af80 74 69 6e 63 74 28 29 0a 2a 2f 0a 23 64 65 66 69  tinct().*/.#defi
1af90 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43  ne WHERE_DISTINC
1afa0 54 5f 4e 4f 4f 50 20 20 20 20 20 20 30 20 20 2f  T_NOOP      0  /
1afb0 2a 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f  * DISTINCT keywo
1afc0 72 64 20 6e 6f 74 20 75 73 65 64 20 2a 2f 0a 23  rd not used */.#
1afd0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
1afe0 54 49 4e 43 54 5f 55 4e 49 51 55 45 20 20 20 20  TINCT_UNIQUE    
1aff0 31 20 20 2f 2a 20 4e 6f 20 64 75 70 6c 69 63 61  1  /* No duplica
1b000 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  tes */.#define W
1b010 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4f 52  HERE_DISTINCT_OR
1b020 44 45 52 45 44 20 20 20 32 20 20 2f 2a 20 41 6c  DERED   2  /* Al
1b030 6c 20 64 75 70 6c 69 63 61 74 65 73 20 61 72 65  l duplicates are
1b040 20 61 64 6a 61 63 65 6e 74 20 2a 2f 0a 23 64 65   adjacent */.#de
1b050 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49  fine WHERE_DISTI
1b060 4e 43 54 5f 55 4e 4f 52 44 45 52 45 44 20 33 20  NCT_UNORDERED 3 
1b070 20 2f 2a 20 44 75 70 6c 69 63 61 74 65 73 20 61   /* Duplicates a
1b080 72 65 20 73 63 61 74 74 65 72 65 64 20 2a 2f 0a  re scattered */.
1b090 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e  ./*.** A NameCon
1b0a0 74 65 78 74 20 64 65 66 69 6e 65 73 20 61 20 63  text defines a c
1b0b0 6f 6e 74 65 78 74 20 69 6e 20 77 68 69 63 68 20  ontext in which 
1b0c0 74 6f 20 72 65 73 6f 6c 76 65 20 74 61 62 6c 65  to resolve table
1b0d0 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e   and column.** n
1b0e0 61 6d 65 73 2e 20 20 54 68 65 20 63 6f 6e 74 65  ames.  The conte
1b0f0 78 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61  xt consists of a
1b100 20 6c 69 73 74 20 6f 66 20 74 61 62 6c 65 73 20   list of tables 
1b110 28 74 68 65 20 70 53 72 63 4c 69 73 74 29 20 66  (the pSrcList) f
1b120 69 65 6c 64 20 61 6e 64 0a 2a 2a 20 61 20 6c 69  ield and.** a li
1b130 73 74 20 6f 66 20 6e 61 6d 65 64 20 65 78 70 72  st of named expr
1b140 65 73 73 69 6f 6e 20 28 70 45 4c 69 73 74 29 2e  ession (pEList).
1b150 20 20 54 68 65 20 6e 61 6d 65 64 20 65 78 70 72    The named expr
1b160 65 73 73 69 6f 6e 20 6c 69 73 74 20 6d 61 79 0a  ession list may.
1b170 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20 20 54 68 65  ** be NULL.  The
1b180 20 70 53 72 63 20 63 6f 72 72 65 73 70 6f 6e 64   pSrc correspond
1b190 73 20 74 6f 20 74 68 65 20 46 52 4f 4d 20 63 6c  s to the FROM cl
1b1a0 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54  ause of a SELECT
1b1b0 20 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20 74 61   or.** to the ta
1b1c0 62 6c 65 20 62 65 69 6e 67 20 6f 70 65 72 61 74  ble being operat
1b1d0 65 64 20 6f 6e 20 62 79 20 49 4e 53 45 52 54 2c  ed on by INSERT,
1b1e0 20 55 50 44 41 54 45 2c 20 6f 72 20 44 45 4c 45   UPDATE, or DELE
1b1f0 54 45 2e 20 20 54 68 65 0a 2a 2a 20 70 45 4c 69  TE.  The.** pELi
1b200 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  st corresponds t
1b210 6f 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  o the result set
1b220 20 6f 66 20 61 20 53 45 4c 45 43 54 20 61 6e 64   of a SELECT and
1b230 20 69 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20   is NULL for.** 
1b240 6f 74 68 65 72 20 73 74 61 74 65 6d 65 6e 74 73  other statements
1b250 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74  ..**.** NameCont
1b260 65 78 74 73 20 63 61 6e 20 62 65 20 6e 65 73 74  exts can be nest
1b270 65 64 2e 20 20 57 68 65 6e 20 72 65 73 6f 6c 76  ed.  When resolv
1b280 69 6e 67 20 6e 61 6d 65 73 2c 20 74 68 65 20 69  ing names, the i
1b290 6e 6e 65 72 2d 6d 6f 73 74 0a 2a 2a 20 63 6f 6e  nner-most.** con
1b2a0 74 65 78 74 20 69 73 20 73 65 61 72 63 68 65 64  text is searched
1b2b0 20 66 69 72 73 74 2e 20 20 49 66 20 6e 6f 20 6d   first.  If no m
1b2c0 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74  atch is found, t
1b2d0 68 65 20 6e 65 78 74 20 6f 75 74 65 72 0a 2a 2a  he next outer.**
1b2e0 20 63 6f 6e 74 65 78 74 20 69 73 20 63 68 65 63   context is chec
1b2f0 6b 65 64 2e 20 20 49 66 20 74 68 65 72 65 20 69  ked.  If there i
1b300 73 20 73 74 69 6c 6c 20 6e 6f 20 6d 61 74 63 68  s still no match
1b310 2c 20 74 68 65 20 6e 65 78 74 20 63 6f 6e 74 65  , the next conte
1b320 78 74 0a 2a 2a 20 69 73 20 63 68 65 63 6b 65 64  xt.** is checked
1b330 2e 20 20 54 68 69 73 20 70 72 6f 63 65 73 73 20  .  This process 
1b340 63 6f 6e 74 69 6e 75 65 73 20 75 6e 74 69 6c 20  continues until 
1b350 65 69 74 68 65 72 20 61 20 6d 61 74 63 68 20 69  either a match i
1b360 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c  s found.** or al
1b370 6c 20 63 6f 6e 74 65 78 74 73 20 61 72 65 20 63  l contexts are c
1b380 68 65 63 6b 2e 20 20 57 68 65 6e 20 61 20 6d 61  heck.  When a ma
1b390 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68  tch is found, th
1b3a0 65 20 6e 52 65 66 20 6d 65 6d 62 65 72 20 6f 66  e nRef member of
1b3b0 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 78 74 20  .** the context 
1b3c0 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 6d  containing the m
1b3d0 61 74 63 68 20 69 73 20 69 6e 63 72 65 6d 65 6e  atch is incremen
1b3e0 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20  ted..**.** Each 
1b3f0 73 75 62 71 75 65 72 79 20 67 65 74 73 20 61 20  subquery gets a 
1b400 6e 65 77 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2e  new NameContext.
1b410 20 20 54 68 65 20 70 4e 65 78 74 20 66 69 65 6c    The pNext fiel
1b420 64 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a  d points to the.
1b430 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 69  ** NameContext i
1b440 6e 20 74 68 65 20 70 61 72 65 6e 74 20 71 75 65  n the parent que
1b450 72 79 2e 20 20 54 68 75 73 20 74 68 65 20 70 72  ry.  Thus the pr
1b460 6f 63 65 73 73 20 6f 66 20 73 63 61 6e 6e 69 6e  ocess of scannin
1b470 67 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e  g the.** NameCon
1b480 74 65 78 74 20 6c 69 73 74 20 63 6f 72 72 65 73  text list corres
1b490 70 6f 6e 64 73 20 74 6f 20 73 65 61 72 63 68 69  ponds to searchi
1b4a0 6e 67 20 74 68 72 6f 75 67 68 20 73 75 63 63 65  ng through succe
1b4b0 73 73 69 76 65 6c 79 20 6f 75 74 65 72 0a 2a 2a  ssively outer.**
1b4c0 20 73 75 62 71 75 65 72 69 65 73 20 6c 6f 6f 6b   subqueries look
1b4d0 69 6e 67 20 66 6f 72 20 61 20 6d 61 74 63 68 2e  ing for a match.
1b4e0 0a 2a 2f 0a 73 74 72 75 63 74 20 4e 61 6d 65 43  .*/.struct NameC
1b4f0 6f 6e 74 65 78 74 20 7b 0a 20 20 50 61 72 73 65  ontext {.  Parse
1b500 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20   *pParse;       
1b510 2f 2a 20 54 68 65 20 70 61 72 73 65 72 20 2a 2f  /* The parser */
1b520 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63  .  SrcList *pSrc
1b530 4c 69 73 74 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f  List;   /* One o
1b540 72 20 6d 6f 72 65 20 74 61 62 6c 65 73 20 75 73  r more tables us
1b550 65 64 20 74 6f 20 72 65 73 6f 6c 76 65 20 6e 61  ed to resolve na
1b560 6d 65 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  mes */.  ExprLis
1b570 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 2f 2a  t *pEList;    /*
1b580 20 4f 70 74 69 6f 6e 61 6c 20 6c 69 73 74 20 6f   Optional list o
1b590 66 20 72 65 73 75 6c 74 2d 73 65 74 20 63 6f 6c  f result-set col
1b5a0 75 6d 6e 73 20 2a 2f 0a 20 20 41 67 67 49 6e 66  umns */.  AggInf
1b5b0 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 2f  o *pAggInfo;   /
1b5c0 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * Information ab
1b5d0 6f 75 74 20 61 67 67 72 65 67 61 74 65 73 20 61  out aggregates a
1b5e0 74 20 74 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a  t this level */.
1b5f0 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70    NameContext *p
1b600 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 6f  Next;  /* Next o
1b610 75 74 65 72 20 6e 61 6d 65 20 63 6f 6e 74 65 78  uter name contex
1b620 74 2e 20 20 4e 55 4c 4c 20 66 6f 72 20 6f 75 74  t.  NULL for out
1b630 65 72 6d 6f 73 74 20 2a 2f 0a 20 20 69 6e 74 20  ermost */.  int 
1b640 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20  nRef;           
1b650 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 61   /* Number of na
1b660 6d 65 73 20 72 65 73 6f 6c 76 65 64 20 62 79 20  mes resolved by 
1b670 74 68 69 73 20 63 6f 6e 74 65 78 74 20 2a 2f 0a  this context */.
1b680 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20    int nErr;     
1b690 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1b6a0 20 6f 66 20 65 72 72 6f 72 73 20 65 6e 63 6f 75   of errors encou
1b6b0 6e 74 65 72 65 64 20 77 68 69 6c 65 20 72 65 73  ntered while res
1b6c0 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 2a 2f 0a  olving names */.
1b6d0 20 20 75 31 36 20 6e 63 46 6c 61 67 73 3b 20 20    u16 ncFlags;  
1b6e0 20 20 20 20 20 20 20 2f 2a 20 5a 65 72 6f 20 6f         /* Zero o
1b6f0 72 20 6d 6f 72 65 20 4e 43 5f 2a 20 66 6c 61 67  r more NC_* flag
1b700 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20  s defined below 
1b710 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  */.};../*.** All
1b720 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
1b730 74 68 65 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2c  the NameContext,
1b740 20 6e 63 46 6c 61 67 73 20 66 69 65 6c 64 2e 0a   ncFlags field..
1b750 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73  **.** Value cons
1b760 74 72 61 69 6e 74 73 20 28 61 6c 6c 20 63 68 65  traints (all che
1b770 63 6b 65 64 20 76 69 61 20 61 73 73 65 72 74 28  cked via assert(
1b780 29 29 3a 0a 2a 2a 20 20 20 20 4e 43 5f 48 61 73  )):.**    NC_Has
1b790 41 67 67 20 20 20 20 3d 3d 20 53 46 5f 48 61 73  Agg    == SF_Has
1b7a0 41 67 67 0a 2a 2a 20 20 20 20 4e 43 5f 4d 69 6e  Agg.**    NC_Min
1b7b0 4d 61 78 41 67 67 20 3d 3d 20 53 46 5f 4d 69 6e  MaxAgg == SF_Min
1b7c0 4d 61 78 41 67 67 20 3d 3d 20 53 51 4c 49 54 45  MaxAgg == SQLITE
1b7d0 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 0a 2a 2a 0a  _FUNC_MINMAX.**.
1b7e0 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 41 6c  */.#define NC_Al
1b7f0 6c 6f 77 41 67 67 20 20 30 78 30 30 30 31 20 20  lowAgg  0x0001  
1b800 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 75 6e  /* Aggregate fun
1b810 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 6c 6f 77  ctions are allow
1b820 65 64 20 68 65 72 65 20 2a 2f 0a 23 64 65 66 69  ed here */.#defi
1b830 6e 65 20 4e 43 5f 50 61 72 74 49 64 78 20 20 20  ne NC_PartIdx   
1b840 30 78 30 30 30 32 20 20 2f 2a 20 54 72 75 65 20  0x0002  /* True 
1b850 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 61 20 70  if resolving a p
1b860 61 72 74 69 61 6c 20 69 6e 64 65 78 20 57 48 45  artial index WHE
1b870 52 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  RE */.#define NC
1b880 5f 49 73 43 68 65 63 6b 20 20 20 30 78 30 30 30  _IsCheck   0x000
1b890 34 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65  4  /* True if re
1b8a0 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 69 6e  solving names in
1b8b0 20 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61   a CHECK constra
1b8c0 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  int */.#define N
1b8d0 43 5f 49 6e 41 67 67 46 75 6e 63 20 30 78 30 30  C_InAggFunc 0x00
1b8e0 30 38 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61  08  /* True if a
1b8f0 6e 61 6c 79 7a 69 6e 67 20 61 72 67 75 6d 65 6e  nalyzing argumen
1b900 74 73 20 74 6f 20 61 6e 20 61 67 67 20 66 75 6e  ts to an agg fun
1b910 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  c */.#define NC_
1b920 48 61 73 41 67 67 20 20 20 20 30 78 30 30 31 30  HasAgg    0x0010
1b930 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65    /* One or more
1b940 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
1b950 69 6f 6e 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65  ions seen */.#de
1b960 66 69 6e 65 20 4e 43 5f 49 64 78 45 78 70 72 20  fine NC_IdxExpr 
1b970 20 20 30 78 30 30 32 30 20 20 2f 2a 20 54 72 75    0x0020  /* Tru
1b980 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 63  e if resolving c
1b990 6f 6c 75 6d 6e 73 20 6f 66 20 43 52 45 41 54 45  olumns of CREATE
1b9a0 20 49 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e   INDEX */.#defin
1b9b0 65 20 4e 43 5f 56 61 72 53 65 6c 65 63 74 20 30  e NC_VarSelect 0
1b9c0 78 30 30 34 30 20 20 2f 2a 20 41 20 63 6f 72 72  x0040  /* A corr
1b9d0 65 6c 61 74 65 64 20 73 75 62 71 75 65 72 79 20  elated subquery 
1b9e0 68 61 73 20 62 65 65 6e 20 73 65 65 6e 20 2a 2f  has been seen */
1b9f0 0a 23 64 65 66 69 6e 65 20 4e 43 5f 4d 69 6e 4d  .#define NC_MinM
1ba00 61 78 41 67 67 20 30 78 31 30 30 30 20 20 2f 2a  axAgg 0x1000  /*
1ba10 20 6d 69 6e 2f 6d 61 78 20 61 67 67 72 65 67 61   min/max aggrega
1ba20 74 65 73 20 73 65 65 6e 2e 20 20 53 65 65 20 6e  tes seen.  See n
1ba30 6f 74 65 20 61 62 6f 76 65 20 2a 2f 0a 0a 2f 2a  ote above */../*
1ba40 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
1ba50 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
1ba60 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
1ba70 69 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d 61 74  ins all informat
1ba80 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20 74 6f  ion.** needed to
1ba90 20 67 65 6e 65 72 61 74 65 20 63 6f 64 65 20 66   generate code f
1baa0 6f 72 20 61 20 73 69 6e 67 6c 65 20 53 45 4c 45  or a single SELE
1bab0 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a  CT statement..**
1bac0 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69 73 20 73 65  .** nLimit is se
1bad0 74 20 74 6f 20 2d 31 20 69 66 20 74 68 65 72 65  t to -1 if there
1bae0 20 69 73 20 6e 6f 20 4c 49 4d 49 54 20 63 6c 61   is no LIMIT cla
1baf0 75 73 65 2e 20 20 6e 4f 66 66 73 65 74 20 69 73  use.  nOffset is
1bb00 20 73 65 74 20 74 6f 20 30 2e 0a 2a 2a 20 49 66   set to 0..** If
1bb10 20 74 68 65 72 65 20 69 73 20 61 20 4c 49 4d 49   there is a LIMI
1bb20 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20 70 61  T clause, the pa
1bb30 72 73 65 72 20 73 65 74 73 20 6e 4c 69 6d 69 74  rser sets nLimit
1bb40 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66   to the value of
1bb50 20 74 68 65 0a 2a 2a 20 6c 69 6d 69 74 20 61 6e   the.** limit an
1bb60 64 20 6e 4f 66 66 73 65 74 20 74 6f 20 74 68 65  d nOffset to the
1bb70 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 66   value of the of
1bb80 66 73 65 74 20 28 6f 72 20 30 20 69 66 20 74 68  fset (or 0 if th
1bb90 65 72 65 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 66  ere is not.** of
1bba0 66 73 65 74 29 2e 20 20 42 75 74 20 6c 61 74 65  fset).  But late
1bbb0 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61 6e 64  r on, nLimit and
1bbc0 20 6e 4f 66 66 73 65 74 20 62 65 63 6f 6d 65 20   nOffset become 
1bbd0 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74  the memory locat
1bbe0 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68 65 20 56  ions.** in the V
1bbf0 44 42 45 20 74 68 61 74 20 72 65 63 6f 72 64 20  DBE that record 
1bc00 74 68 65 20 6c 69 6d 69 74 20 61 6e 64 20 6f 66  the limit and of
1bc10 66 73 65 74 20 63 6f 75 6e 74 65 72 73 2e 0a 2a  fset counters..*
1bc20 2a 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70 68  *.** addrOpenEph
1bc30 6d 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e 74  m[] entries cont
1bc40 61 69 6e 20 74 68 65 20 61 64 64 72 65 73 73 20  ain the address 
1bc50 6f 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65  of OP_OpenEpheme
1bc60 72 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20  ral opcodes..** 
1bc70 54 68 65 73 65 20 61 64 64 72 65 73 73 65 73 20  These addresses 
1bc80 6d 75 73 74 20 62 65 20 73 74 6f 72 65 64 20 73  must be stored s
1bc90 6f 20 74 68 61 74 20 77 65 20 63 61 6e 20 67 6f  o that we can go
1bca0 20 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20 69   back and fill i
1bcb0 6e 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59 49  n.** the P4_KEYI
1bcc0 4e 46 4f 20 61 6e 64 20 50 32 20 70 61 72 61 6d  NFO and P2 param
1bcd0 65 74 65 72 73 20 6c 61 74 65 72 2e 20 20 4e 65  eters later.  Ne
1bce0 69 74 68 65 72 20 74 68 65 20 4b 65 79 49 6e 66  ither the KeyInf
1bcf0 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75 6d  o nor.** the num
1bd00 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
1bd10 6e 20 50 32 20 63 61 6e 20 62 65 20 63 6f 6d 70  n P2 can be comp
1bd20 75 74 65 64 20 61 74 20 74 68 65 20 73 61 6d 65  uted at the same
1bd30 20 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65 20   time.** as the 
1bd40 4f 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73 74  OP_OpenEphm inst
1bd50 72 75 63 74 69 6f 6e 20 69 73 20 63 6f 64 65 64  ruction is coded
1bd60 20 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a 20   because not.** 
1bd70 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74 69  enough informati
1bd80 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 63 6f 6d  on about the com
1bd90 70 6f 75 6e 64 20 71 75 65 72 79 20 69 73 20 6b  pound query is k
1bda0 6e 6f 77 6e 20 61 74 20 74 68 61 74 20 70 6f 69  nown at that poi
1bdb0 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49 6e  nt..** The KeyIn
1bdc0 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 54  fo for addrOpenT
1bdd0 72 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20 63  ran[0] and [1] c
1bde0 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e  ontains collatin
1bdf0 67 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20 66  g sequences.** f
1be00 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  or the result se
1be10 74 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20  t.  The KeyInfo 
1be20 66 6f 72 20 61 64 64 72 4f 70 65 6e 45 70 68 6d  for addrOpenEphm
1be30 5b 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c  [2] contains col
1be40 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65 6e  lating.** sequen
1be50 63 65 73 20 66 6f 72 20 74 68 65 20 4f 52 44 45  ces for the ORDE
1be60 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a  R BY clause..*/.
1be70 73 74 72 75 63 74 20 53 65 6c 65 63 74 20 7b 0a  struct Select {.
1be80 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69    ExprList *pELi
1be90 73 74 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  st;      /* The 
1bea0 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20 72 65  fields of the re
1beb0 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70 3b  sult */.  u8 op;
1bec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bed0 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55   /* One of: TK_U
1bee0 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49  NION TK_ALL TK_I
1bef0 4e 54 45 52 53 45 43 54 20 54 4b 5f 45 58 43 45  NTERSECT TK_EXCE
1bf00 50 54 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 6e  PT */.  LogEst n
1bf10 53 65 6c 65 63 74 52 6f 77 3b 20 20 20 20 20 2f  SelectRow;     /
1bf20 2a 20 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62  * Estimated numb
1bf30 65 72 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77  er of result row
1bf40 73 20 2a 2f 0a 20 20 75 33 32 20 73 65 6c 46 6c  s */.  u32 selFl
1bf50 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ags;          /*
1bf60 20 56 61 72 69 6f 75 73 20 53 46 5f 2a 20 76 61   Various SF_* va
1bf70 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4c  lues */.  int iL
1bf80 69 6d 69 74 2c 20 69 4f 66 66 73 65 74 3b 20 20  imit, iOffset;  
1bf90 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73   /* Memory regis
1bfa0 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 4c 49 4d  ters holding LIM
1bfb0 49 54 20 26 20 4f 46 46 53 45 54 20 63 6f 75 6e  IT & OFFSET coun
1bfc0 74 65 72 73 20 2a 2f 0a 23 69 66 20 53 45 4c 45  ters */.#if SELE
1bfd0 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a  CTTRACE_ENABLED.
1bfe0 20 20 63 68 61 72 20 7a 53 65 6c 4e 61 6d 65 5b    char zSelName[
1bff0 31 32 5d 3b 20 20 20 20 20 2f 2a 20 53 79 6d 62  12];     /* Symb
1c000 6f 6c 69 63 20 6e 61 6d 65 20 6f 66 20 74 68 69  olic name of thi
1c010 73 20 53 45 4c 45 43 54 20 75 73 65 20 66 6f 72  s SELECT use for
1c020 20 64 65 62 75 67 67 69 6e 67 20 2a 2f 0a 23 65   debugging */.#e
1c030 6e 64 69 66 0a 20 20 69 6e 74 20 61 64 64 72 4f  ndif.  int addrO
1c040 70 65 6e 45 70 68 6d 5b 32 5d 3b 20 20 20 2f 2a  penEphm[2];   /*
1c050 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 20 6f 70   OP_OpenEphem op
1c060 63 6f 64 65 73 20 72 65 6c 61 74 65 64 20 74 6f  codes related to
1c070 20 74 68 69 73 20 73 65 6c 65 63 74 20 2a 2f 0a   this select */.
1c080 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 3b    SrcList *pSrc;
1c090 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1c0a0 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20  FROM clause */. 
1c0b0 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20   Expr *pWhere;  
1c0c0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57          /* The W
1c0d0 48 45 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a 20  HERE clause */. 
1c0e0 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75   ExprList *pGrou
1c0f0 70 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 47  pBy;    /* The G
1c100 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 2a  ROUP BY clause *
1c110 2f 0a 20 20 45 78 70 72 20 2a 70 48 61 76 69 6e  /.  Expr *pHavin
1c120 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  g;         /* Th
1c130 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20  e HAVING clause 
1c140 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
1c150 4f 72 64 65 72 42 79 3b 20 20 20 20 2f 2a 20 54  OrderBy;    /* T
1c160 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
1c170 73 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a  se */.  Select *
1c180 70 50 72 69 6f 72 3b 20 20 20 20 20 20 20 20 2f  pPrior;        /
1c190 2a 20 50 72 69 6f 72 20 73 65 6c 65 63 74 20 69  * Prior select i
1c1a0 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73 65 6c  n a compound sel
1c1b0 65 63 74 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f  ect statement */
1c1c0 0a 20 20 53 65 6c 65 63 74 20 2a 70 4e 65 78 74  .  Select *pNext
1c1d0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78  ;         /* Nex
1c1e0 74 20 73 65 6c 65 63 74 20 74 6f 20 74 68 65 20  t select to the 
1c1f0 6c 65 66 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75  left in a compou
1c200 6e 64 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4c  nd */.  Expr *pL
1c210 69 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20 2f  imit;          /
1c220 2a 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69  * LIMIT expressi
1c230 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e  on. NULL means n
1c240 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20 45 78  ot used. */.  Ex
1c250 70 72 20 2a 70 4f 66 66 73 65 74 3b 20 20 20 20  pr *pOffset;    
1c260 20 20 20 20 20 2f 2a 20 4f 46 46 53 45 54 20 65       /* OFFSET e
1c270 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20  xpression. NULL 
1c280 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20  means not used. 
1c290 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68  */.  With *pWith
1c2a0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57  ;           /* W
1c2b0 49 54 48 20 63 6c 61 75 73 65 20 61 74 74 61 63  ITH clause attac
1c2c0 68 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65  hed to this sele
1c2d0 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e 20 2a 2f 0a  ct. Or NULL. */.
1c2e0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  };../*.** Allowe
1c2f0 64 20 76 61 6c 75 65 73 20 66 6f 72 20 53 65 6c  d values for Sel
1c300 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e 20 20 54  ect.selFlags.  T
1c310 68 65 20 22 53 46 22 20 70 72 65 66 69 78 20 73  he "SF" prefix s
1c320 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 53 65  tands for.** "Se
1c330 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a 2a 0a 2a  lect Flag"..**.*
1c340 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69  * Value constrai
1c350 6e 74 73 20 28 61 6c 6c 20 63 68 65 63 6b 65 64  nts (all checked
1c360 20 76 69 61 20 61 73 73 65 72 74 28 29 29 0a 2a   via assert()).*
1c370 2a 20 20 20 20 20 53 46 5f 48 61 73 41 67 67 20  *     SF_HasAgg 
1c380 20 20 20 20 3d 3d 20 4e 43 5f 48 61 73 41 67 67      == NC_HasAgg
1c390 0a 2a 2a 20 20 20 20 20 53 46 5f 4d 69 6e 4d 61  .**     SF_MinMa
1c3a0 78 41 67 67 20 20 3d 3d 20 4e 43 5f 4d 69 6e 4d  xAgg  == NC_MinM
1c3b0 61 78 41 67 67 20 20 20 20 20 3d 3d 20 53 51 4c  axAgg     == SQL
1c3c0 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 0a  ITE_FUNC_MINMAX.
1c3d0 2a 2a 20 20 20 20 20 53 46 5f 46 69 78 65 64 4c  **     SF_FixedL
1c3e0 69 6d 69 74 20 3d 3d 20 57 48 45 52 45 5f 55 53  imit == WHERE_US
1c3f0 45 5f 4c 49 4d 49 54 0a 2a 2f 0a 23 64 65 66 69  E_LIMIT.*/.#defi
1c400 6e 65 20 53 46 5f 44 69 73 74 69 6e 63 74 20 20  ne SF_Distinct  
1c410 20 20 20 20 20 30 78 30 30 30 30 31 20 20 2f 2a       0x00001  /*
1c420 20 4f 75 74 70 75 74 20 73 68 6f 75 6c 64 20 62   Output should b
1c430 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 23 64  e DISTINCT */.#d
1c440 65 66 69 6e 65 20 53 46 5f 41 6c 6c 20 20 20 20  efine SF_All    
1c450 20 20 20 20 20 20 20 20 30 78 30 30 30 30 32 20          0x00002 
1c460 20 2f 2a 20 49 6e 63 6c 75 64 65 73 20 74 68 65   /* Includes the
1c470 20 41 4c 4c 20 6b 65 79 77 6f 72 64 20 2a 2f 0a   ALL keyword */.
1c480 23 64 65 66 69 6e 65 20 53 46 5f 52 65 73 6f 6c  #define SF_Resol
1c490 76 65 64 20 20 20 20 20 20 20 30 78 30 30 30 30  ved       0x0000
1c4a0 34 20 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72  4  /* Identifier
1c4b0 73 20 68 61 76 65 20 62 65 65 6e 20 72 65 73 6f  s have been reso
1c4c0 6c 76 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  lved */.#define 
1c4d0 53 46 5f 41 67 67 72 65 67 61 74 65 20 20 20 20  SF_Aggregate    
1c4e0 20 20 30 78 30 30 30 30 38 20 20 2f 2a 20 43 6f    0x00008  /* Co
1c4f0 6e 74 61 69 6e 73 20 61 67 67 20 66 75 6e 63 74  ntains agg funct
1c500 69 6f 6e 73 20 6f 72 20 61 20 47 52 4f 55 50 20  ions or a GROUP 
1c510 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  BY */.#define SF
1c520 5f 48 61 73 41 67 67 20 20 20 20 20 20 20 20 20  _HasAgg         
1c530 30 78 30 30 30 31 30 20 20 2f 2a 20 43 6f 6e 74  0x00010  /* Cont
1c540 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20 66  ains aggregate f
1c550 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66  unctions */.#def
1c560 69 6e 65 20 53 46 5f 55 73 65 73 45 70 68 65 6d  ine SF_UsesEphem
1c570 65 72 61 6c 20 20 30 78 30 30 30 32 30 20 20 2f  eral  0x00020  /
1c580 2a 20 55 73 65 73 20 74 68 65 20 4f 70 65 6e 45  * Uses the OpenE
1c590 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 20  phemeral opcode 
1c5a0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 45 78  */.#define SF_Ex
1c5b0 70 61 6e 64 65 64 20 20 20 20 20 20 20 30 78 30  panded       0x0
1c5c0 30 30 34 30 20 20 2f 2a 20 73 71 6c 69 74 65 33  0040  /* sqlite3
1c5d0 53 65 6c 65 63 74 45 78 70 61 6e 64 28 29 20 63  SelectExpand() c
1c5e0 61 6c 6c 65 64 20 6f 6e 20 74 68 69 73 20 2a 2f  alled on this */
1c5f0 0a 23 64 65 66 69 6e 65 20 53 46 5f 48 61 73 54  .#define SF_HasT
1c600 79 70 65 49 6e 66 6f 20 20 20 20 30 78 30 30 30  ypeInfo    0x000
1c610 38 30 20 20 2f 2a 20 46 52 4f 4d 20 73 75 62 71  80  /* FROM subq
1c620 75 65 72 69 65 73 20 68 61 76 65 20 54 61 62 6c  ueries have Tabl
1c630 65 20 6d 65 74 61 64 61 74 61 20 2a 2f 0a 23 64  e metadata */.#d
1c640 65 66 69 6e 65 20 53 46 5f 43 6f 6d 70 6f 75 6e  efine SF_Compoun
1c650 64 20 20 20 20 20 20 20 30 78 30 30 31 30 30 20  d       0x00100 
1c660 20 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 63 6f   /* Part of a co
1c670 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 2a 2f 0a  mpound query */.
1c680 23 64 65 66 69 6e 65 20 53 46 5f 56 61 6c 75 65  #define SF_Value
1c690 73 20 20 20 20 20 20 20 20 20 30 78 30 30 32 30  s         0x0020
1c6a0 30 20 20 2f 2a 20 53 79 6e 74 68 65 73 69 7a 65  0  /* Synthesize
1c6b0 64 20 66 72 6f 6d 20 56 41 4c 55 45 53 20 63 6c  d from VALUES cl
1c6c0 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ause */.#define 
1c6d0 53 46 5f 4d 75 6c 74 69 56 61 6c 75 65 20 20 20  SF_MultiValue   
1c6e0 20 20 30 78 30 30 34 30 30 20 20 2f 2a 20 53 69    0x00400  /* Si
1c6f0 6e 67 6c 65 20 56 41 4c 55 45 53 20 74 65 72 6d  ngle VALUES term
1c700 20 77 69 74 68 20 6d 75 6c 74 69 70 6c 65 20 72   with multiple r
1c710 6f 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ows */.#define S
1c720 46 5f 4e 65 73 74 65 64 46 72 6f 6d 20 20 20 20  F_NestedFrom    
1c730 20 30 78 30 30 38 30 30 20 20 2f 2a 20 50 61 72   0x00800  /* Par
1c740 74 20 6f 66 20 61 20 70 61 72 65 6e 74 68 65 73  t of a parenthes
1c750 69 7a 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65  ized FROM clause
1c760 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d   */.#define SF_M
1c770 69 6e 4d 61 78 41 67 67 20 20 20 20 20 20 30 78  inMaxAgg      0x
1c780 30 31 30 30 30 20 20 2f 2a 20 41 67 67 72 65 67  01000  /* Aggreg
1c790 61 74 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 6d  ate containing m
1c7a0 69 6e 28 29 20 6f 72 20 6d 61 78 28 29 20 2a 2f  in() or max() */
1c7b0 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65 63 75  .#define SF_Recu
1c7c0 72 73 69 76 65 20 20 20 20 20 20 30 78 30 32 30  rsive      0x020
1c7d0 30 30 20 20 2f 2a 20 54 68 65 20 72 65 63 75 72  00  /* The recur
1c7e0 73 69 76 65 20 70 61 72 74 20 6f 66 20 61 20 72  sive part of a r
1c7f0 65 63 75 72 73 69 76 65 20 43 54 45 20 2a 2f 0a  ecursive CTE */.
1c800 23 64 65 66 69 6e 65 20 53 46 5f 46 69 78 65 64  #define SF_Fixed
1c810 4c 69 6d 69 74 20 20 20 20 20 30 78 30 34 30 30  Limit     0x0400
1c820 30 20 20 2f 2a 20 6e 53 65 6c 65 63 74 52 6f 77  0  /* nSelectRow
1c830 20 73 65 74 20 62 79 20 61 20 63 6f 6e 73 74 61   set by a consta
1c840 6e 74 20 4c 49 4d 49 54 20 2a 2f 0a 23 64 65 66  nt LIMIT */.#def
1c850 69 6e 65 20 53 46 5f 4d 61 79 62 65 43 6f 6e 76  ine SF_MaybeConv
1c860 65 72 74 20 20 20 30 78 30 38 30 30 30 20 20 2f  ert   0x08000  /
1c870 2a 20 4e 65 65 64 20 63 6f 6e 76 65 72 74 43 6f  * Need convertCo
1c880 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75  mpoundSelectToSu
1c890 62 71 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66  bquery() */.#def
1c8a0 69 6e 65 20 53 46 5f 43 6f 6e 76 65 72 74 65 64  ine SF_Converted
1c8b0 20 20 20 20 20 20 30 78 31 30 30 30 30 20 20 2f        0x10000  /
1c8c0 2a 20 42 79 20 63 6f 6e 76 65 72 74 43 6f 6d 70  * By convertComp
1c8d0 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71  oundSelectToSubq
1c8e0 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e  uery() */.#defin
1c8f0 65 20 53 46 5f 49 6e 63 6c 75 64 65 48 69 64 64  e SF_IncludeHidd
1c900 65 6e 20 20 30 78 32 30 30 30 30 20 20 2f 2a 20  en  0x20000  /* 
1c910 49 6e 63 6c 75 64 65 20 68 69 64 64 65 6e 20 63  Include hidden c
1c920 6f 6c 75 6d 6e 73 20 69 6e 20 6f 75 74 70 75 74  olumns in output
1c930 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20   */.../*.** The 
1c940 72 65 73 75 6c 74 73 20 6f 66 20 61 20 53 45 4c  results of a SEL
1c950 45 43 54 20 63 61 6e 20 62 65 20 64 69 73 74 72  ECT can be distr
1c960 69 62 75 74 65 64 20 69 6e 20 73 65 76 65 72 61  ibuted in severa
1c970 6c 20 77 61 79 73 2c 20 61 73 20 64 65 66 69 6e  l ways, as defin
1c980 65 64 0a 2a 2a 20 62 79 20 6f 6e 65 20 6f 66 20  ed.** by one of 
1c990 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  the following ma
1c9a0 63 72 6f 73 2e 20 20 54 68 65 20 22 53 52 54 22  cros.  The "SRT"
1c9b0 20 70 72 65 66 69 78 20 6d 65 61 6e 73 20 22 53   prefix means "S
1c9c0 45 4c 45 43 54 20 52 65 73 75 6c 74 0a 2a 2a 20  ELECT Result.** 
1c9d0 54 79 70 65 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  Type"..**.**    
1c9e0 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20   SRT_Union      
1c9f0 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61   Store results a
1ca00 73 20 61 20 6b 65 79 20 69 6e 20 61 20 74 65 6d  s a key in a tem
1ca10 70 6f 72 61 72 79 20 69 6e 64 65 78 0a 2a 2a 20  porary index.** 
1ca20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca30 20 20 20 20 69 64 65 6e 74 69 66 69 65 64 20 62      identified b
1ca40 79 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  y pDest->iSDParm
1ca50 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1ca60 45 78 63 65 70 74 20 20 20 20 20 20 52 65 6d 6f  Except      Remo
1ca70 76 65 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20  ve results from 
1ca80 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 69 6e  the temporary in
1ca90 64 65 78 20 70 44 65 73 74 2d 3e 69 53 44 50 61  dex pDest->iSDPa
1caa0 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  rm..**.**     SR
1cab0 54 5f 45 78 69 73 74 73 20 20 20 20 20 20 53 74  T_Exists      St
1cac0 6f 72 65 20 61 20 31 20 69 6e 20 6d 65 6d 6f 72  ore a 1 in memor
1cad0 79 20 63 65 6c 6c 20 70 44 65 73 74 2d 3e 69 53  y cell pDest->iS
1cae0 44 50 61 72 6d 20 69 66 20 74 68 65 20 72 65 73  DParm if the res
1caf0 75 6c 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ult.**          
1cb00 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 69             set i
1cb10 73 20 6e 6f 74 20 65 6d 70 74 79 2e 0a 2a 2a 0a  s not empty..**.
1cb20 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 63 61  **     SRT_Disca
1cb30 72 64 20 20 20 20 20 54 68 72 6f 77 20 74 68 65  rd     Throw the
1cb40 20 72 65 73 75 6c 74 73 20 61 77 61 79 2e 20 20   results away.  
1cb50 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20  This is used by 
1cb60 53 45 4c 45 43 54 0a 2a 2a 20 20 20 20 20 20 20  SELECT.**       
1cb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
1cb80 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20  atements within 
1cb90 74 72 69 67 67 65 72 73 20 77 68 6f 73 65 20 6f  triggers whose o
1cba0 6e 6c 79 20 70 75 72 70 6f 73 65 20 69 73 0a 2a  nly purpose is.*
1cbb0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1cbc0 20 20 20 20 20 20 74 68 65 20 73 69 64 65 2d 65        the side-e
1cbd0 66 66 65 63 74 73 20 6f 66 20 66 75 6e 63 74 69  ffects of functi
1cbe0 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f  ons..**.** All o
1cbf0 66 20 74 68 65 20 61 62 6f 76 65 20 61 72 65 20  f the above are 
1cc00 66 72 65 65 20 74 6f 20 69 67 6e 6f 72 65 20 74  free to ignore t
1cc10 68 65 69 72 20 4f 52 44 45 52 20 42 59 20 63 6c  heir ORDER BY cl
1cc20 61 75 73 65 2e 20 54 68 6f 73 65 20 74 68 61 74  ause. Those that
1cc30 0a 2a 2a 20 66 6f 6c 6c 6f 77 20 6d 75 73 74 20  .** follow must 
1cc40 68 6f 6e 6f 72 20 74 68 65 20 4f 52 44 45 52 20  honor the ORDER 
1cc50 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a  BY clause..**.**
1cc60 20 20 20 20 20 53 52 54 5f 4f 75 74 70 75 74 20       SRT_Output 
1cc70 20 20 20 20 20 47 65 6e 65 72 61 74 65 20 61 20       Generate a 
1cc80 72 6f 77 20 6f 66 20 6f 75 74 70 75 74 20 28 75  row of output (u
1cc90 73 69 6e 67 20 74 68 65 20 4f 50 5f 52 65 73 75  sing the OP_Resu
1cca0 6c 74 52 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20  ltRow.**        
1ccb0 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 70 63               opc
1ccc0 6f 64 65 29 20 66 6f 72 20 65 61 63 68 20 72 6f  ode) for each ro
1ccd0 77 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20  w in the result 
1cce0 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  set..**.**     S
1ccf0 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 4f  RT_Mem         O
1cd00 6e 6c 79 20 76 61 6c 69 64 20 69 66 20 74 68 65  nly valid if the
1cd10 20 72 65 73 75 6c 74 20 69 73 20 61 20 73 69 6e   result is a sin
1cd20 67 6c 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 20  gle column..**  
1cd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd40 20 20 20 53 74 6f 72 65 20 74 68 65 20 66 69 72     Store the fir
1cd50 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65  st column of the
1cd60 20 66 69 72 73 74 20 72 65 73 75 6c 74 20 72 6f   first result ro
1cd70 77 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  w.**            
1cd80 20 20 20 20 20 20 20 20 20 69 6e 20 72 65 67 69           in regi
1cd90 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53 44 50  ster pDest->iSDP
1cda0 61 72 6d 20 74 68 65 6e 20 61 62 61 6e 64 6f 6e  arm then abandon
1cdb0 20 74 68 65 20 72 65 73 74 0a 2a 2a 20 20 20 20   the rest.**    
1cdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cdd0 20 6f 66 20 74 68 65 20 71 75 65 72 79 2e 20 20   of the query.  
1cde0 54 68 69 73 20 64 65 73 74 69 6e 61 74 69 6f 6e  This destination
1cdf0 20 69 6d 70 6c 69 65 73 20 22 4c 49 4d 49 54 20   implies "LIMIT 
1ce00 31 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  1"..**.**     SR
1ce10 54 5f 53 65 74 20 20 20 20 20 20 20 20 20 54 68  T_Set         Th
1ce20 65 20 72 65 73 75 6c 74 20 6d 75 73 74 20 62 65  e result must be
1ce30 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e   a single column
1ce40 2e 20 20 53 74 6f 72 65 20 65 61 63 68 0a 2a 2a  .  Store each.**
1ce50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce60 20 20 20 20 20 72 6f 77 20 6f 66 20 72 65 73 75       row of resu
1ce70 6c 74 20 61 73 20 74 68 65 20 6b 65 79 20 69 6e  lt as the key in
1ce80 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53   table pDest->iS
1ce90 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20  DParm..**       
1cea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 70                Ap
1ceb0 70 6c 79 20 74 68 65 20 61 66 66 69 6e 69 74 79  ply the affinity
1cec0 20 70 44 65 73 74 2d 3e 61 66 66 53 64 73 74 20   pDest->affSdst 
1ced0 62 65 66 6f 72 65 20 73 74 6f 72 69 6e 67 0a 2a  before storing.*
1cee0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1cef0 20 20 20 20 20 20 72 65 73 75 6c 74 73 2e 20 20        results.  
1cf00 55 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e  Used to implemen
1cf10 74 20 22 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e  t "IN (SELECT ..
1cf20 2e 29 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  .)"..**.**     S
1cf30 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20 43  RT_EphemTab    C
1cf40 72 65 61 74 65 20 61 6e 20 74 65 6d 70 6f 72 61  reate an tempora
1cf50 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e  ry table pDest->
1cf60 69 53 44 50 61 72 6d 20 61 6e 64 20 73 74 6f 72  iSDParm and stor
1cf70 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
1cf80 20 20 20 20 20 20 20 20 20 74 68 65 20 72 65 73           the res
1cf90 75 6c 74 20 74 68 65 72 65 2e 20 54 68 65 20 63  ult there. The c
1cfa0 75 72 73 6f 72 20 69 73 20 6c 65 66 74 20 6f 70  ursor is left op
1cfb0 65 6e 20 61 66 74 65 72 0a 2a 2a 20 20 20 20 20  en after.**     
1cfc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cfd0 72 65 74 75 72 6e 69 6e 67 2e 20 20 54 68 69 73  returning.  This
1cfe0 20 69 73 20 6c 69 6b 65 20 53 52 54 5f 54 61 62   is like SRT_Tab
1cff0 6c 65 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a  le except that.*
1d000 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1d010 20 20 20 20 20 20 74 68 69 73 20 64 65 73 74 69        this desti
1d020 6e 61 74 69 6f 6e 20 75 73 65 73 20 4f 50 5f 4f  nation uses OP_O
1d030 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 74 6f 20  penEphemeral to 
1d040 63 72 65 61 74 65 0a 2a 2a 20 20 20 20 20 20 20  create.**       
1d050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1d060 65 20 74 61 62 6c 65 20 66 69 72 73 74 2e 0a 2a  e table first..*
1d070 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 43 6f 72  *.**     SRT_Cor
1d080 6f 75 74 69 6e 65 20 20 20 47 65 6e 65 72 61 74  outine   Generat
1d090 65 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 74  e a co-routine t
1d0a0 68 61 74 20 72 65 74 75 72 6e 73 20 61 20 6e 65  hat returns a ne
1d0b0 77 20 72 6f 77 20 6f 66 0a 2a 2a 20 20 20 20 20  w row of.**     
1d0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d0d0 72 65 73 75 6c 74 73 20 65 61 63 68 20 74 69 6d  results each tim
1d0e0 65 20 69 74 20 69 73 20 69 6e 76 6f 6b 65 64 2e  e it is invoked.
1d0f0 20 20 54 68 65 20 65 6e 74 72 79 20 70 6f 69 6e    The entry poin
1d100 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  t.**            
1d110 20 20 20 20 20 20 20 20 20 6f 66 20 74 68 65 20           of the 
1d120 63 6f 2d 72 6f 75 74 69 6e 65 20 69 73 20 73 74  co-routine is st
1d130 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
1d140 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 0a   pDest->iSDParm.
1d150 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1d160 20 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 72         and the r
1d170 65 73 75 6c 74 20 72 6f 77 20 69 73 20 73 74 6f  esult row is sto
1d180 72 65 64 20 69 6e 20 70 44 65 73 74 2d 3e 6e 44  red in pDest->nD
1d190 65 73 74 20 72 65 67 69 73 74 65 72 73 0a 2a 2a  est registers.**
1d1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d1b0 20 20 20 20 20 73 74 61 72 74 69 6e 67 20 77 69       starting wi
1d1c0 74 68 20 70 44 65 73 74 2d 3e 69 53 64 73 74 2e  th pDest->iSdst.
1d1d0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 54  .**.**     SRT_T
1d1e0 61 62 6c 65 20 20 20 20 20 20 20 53 74 6f 72 65  able       Store
1d1f0 20 72 65 73 75 6c 74 73 20 69 6e 20 74 65 6d 70   results in temp
1d200 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73  orary table pDes
1d210 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20  t->iSDParm..**  
1d220 20 20 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20     SRT_Fifo     
1d230 20 20 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20     This is like 
1d240 53 52 54 5f 45 70 68 65 6d 54 61 62 20 65 78 63  SRT_EphemTab exc
1d250 65 70 74 20 74 68 61 74 20 74 68 65 20 74 61 62  ept that the tab
1d260 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  le.**           
1d270 20 20 20 20 20 20 20 20 20 20 69 73 20 61 73 73            is ass
1d280 75 6d 65 64 20 74 6f 20 61 6c 72 65 61 64 79 20  umed to already 
1d290 62 65 20 6f 70 65 6e 2e 20 20 53 52 54 5f 46 69  be open.  SRT_Fi
1d2a0 66 6f 20 68 61 73 0a 2a 2a 20 20 20 20 20 20 20  fo has.**       
1d2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
1d2c0 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 72 6f  e additional pro
1d2d0 70 65 72 74 79 20 6f 66 20 62 65 69 6e 67 20 61  perty of being a
1d2e0 62 6c 65 20 74 6f 20 69 67 6e 6f 72 65 0a 2a 2a  ble to ignore.**
1d2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d300 20 20 20 20 20 74 68 65 20 4f 52 44 45 52 20 42       the ORDER B
1d310 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20  Y clause..**.** 
1d320 20 20 20 20 53 52 54 5f 44 69 73 74 46 69 66 6f      SRT_DistFifo
1d330 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74      Store result
1d340 73 20 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79  s in a temporary
1d350 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53   table pDest->iS
1d360 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20  DParm..**       
1d370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42 75                Bu
1d380 74 20 61 6c 73 6f 20 75 73 65 20 74 65 6d 70 6f  t also use tempo
1d390 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74  rary table pDest
1d3a0 2d 3e 69 53 44 50 61 72 6d 2b 31 20 61 73 0a 2a  ->iSDParm+1 as.*
1d3b0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1d3c0 20 20 20 20 20 20 61 20 72 65 63 6f 72 64 20 6f        a record o
1d3d0 66 20 61 6c 6c 20 70 72 69 6f 72 20 72 65 73 75  f all prior resu
1d3e0 6c 74 73 20 61 6e 64 20 69 67 6e 6f 72 65 20 61  lts and ignore a
1d3f0 6e 79 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20  ny duplicate.** 
1d400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d410 20 20 20 20 72 6f 77 73 2e 20 20 4e 61 6d 65 20      rows.  Name 
1d420 6d 65 61 6e 73 3a 20 20 22 44 69 73 74 69 6e 63  means:  "Distinc
1d430 74 20 46 69 66 6f 22 2e 0a 2a 2a 0a 2a 2a 20 20  t Fifo"..**.**  
1d440 20 20 20 53 52 54 5f 51 75 65 75 65 20 20 20 20     SRT_Queue    
1d450 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73     Store results
1d460 20 69 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65   in priority que
1d470 75 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  ue pDest->iSDPar
1d480 6d 20 28 72 65 61 6c 6c 79 0a 2a 2a 20 20 20 20  m (really.**    
1d490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d4a0 20 61 6e 20 69 6e 64 65 78 29 2e 20 20 41 70 70   an index).  App
1d4b0 65 6e 64 20 61 20 73 65 71 75 65 6e 63 65 20 6e  end a sequence n
1d4c0 75 6d 62 65 72 20 73 6f 20 74 68 61 74 20 61 6c  umber so that al
1d4d0 6c 20 65 6e 74 72 69 65 73 0a 2a 2a 20 20 20 20  l entries.**    
1d4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d4f0 20 61 72 65 20 64 69 73 74 69 6e 63 74 2e 0a 2a   are distinct..*
1d500 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73  *.**     SRT_Dis
1d510 74 51 75 65 75 65 20 20 20 53 74 6f 72 65 20 72  tQueue   Store r
1d520 65 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69  esults in priori
1d530 74 79 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e  ty queue pDest->
1d540 69 53 44 50 61 72 6d 20 6f 6e 6c 79 20 69 66 0a  iSDParm only if.
1d550 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1d560 20 20 20 20 20 20 20 74 68 65 20 73 61 6d 65 20         the same 
1d570 72 65 63 6f 72 64 20 68 61 73 20 6e 65 76 65 72  record has never
1d580 20 62 65 65 6e 20 73 74 6f 72 65 64 20 62 65 66   been stored bef
1d590 6f 72 65 2e 20 20 54 68 65 0a 2a 2a 20 20 20 20  ore.  The.**    
1d5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d5b0 20 69 6e 64 65 78 20 61 74 20 70 44 65 73 74 2d   index at pDest-
1d5c0 3e 69 53 44 50 61 72 6d 2b 31 20 68 6f 6c 64 20  >iSDParm+1 hold 
1d5d0 61 6c 6c 20 70 72 69 6f 72 20 73 74 6f 72 65 73  all prior stores
1d5e0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  ..*/.#define SRT
1d5f0 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 20 31 20  _Union        1 
1d600 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
1d610 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69   as keys in an i
1d620 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
1d630 53 52 54 5f 45 78 63 65 70 74 20 20 20 20 20 20  SRT_Except      
1d640 20 32 20 20 2f 2a 20 52 65 6d 6f 76 65 20 72 65   2  /* Remove re
1d650 73 75 6c 74 20 66 72 6f 6d 20 61 20 55 4e 49 4f  sult from a UNIO
1d660 4e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  N index */.#defi
1d670 6e 65 20 53 52 54 5f 45 78 69 73 74 73 20 20 20  ne SRT_Exists   
1d680 20 20 20 20 33 20 20 2f 2a 20 53 74 6f 72 65 20      3  /* Store 
1d690 31 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20  1 if the result 
1d6a0 69 73 20 6e 6f 74 20 65 6d 70 74 79 20 2a 2f 0a  is not empty */.
1d6b0 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 63  #define SRT_Disc
1d6c0 61 72 64 20 20 20 20 20 20 34 20 20 2f 2a 20 44  ard      4  /* D
1d6d0 6f 20 6e 6f 74 20 73 61 76 65 20 74 68 65 20 72  o not save the r
1d6e0 65 73 75 6c 74 73 20 61 6e 79 77 68 65 72 65 20  esults anywhere 
1d6f0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 46  */.#define SRT_F
1d700 69 66 6f 20 20 20 20 20 20 20 20 20 35 20 20 2f  ifo         5  /
1d710 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61  * Store result a
1d720 73 20 64 61 74 61 20 77 69 74 68 20 61 6e 20 61  s data with an a
1d730 75 74 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a  utomatic rowid *
1d740 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69  /.#define SRT_Di
1d750 73 74 46 69 66 6f 20 20 20 20 20 36 20 20 2f 2a  stFifo     6  /*
1d760 20 4c 69 6b 65 20 53 52 54 5f 46 69 66 6f 2c 20   Like SRT_Fifo, 
1d770 62 75 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c  but unique resul
1d780 74 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69  ts only */.#defi
1d790 6e 65 20 53 52 54 5f 51 75 65 75 65 20 20 20 20  ne SRT_Queue    
1d7a0 20 20 20 20 37 20 20 2f 2a 20 53 74 6f 72 65 20      7  /* Store 
1d7b0 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 71 75 65  result in an que
1d7c0 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ue */.#define SR
1d7d0 54 5f 44 69 73 74 51 75 65 75 65 20 20 20 20 38  T_DistQueue    8
1d7e0 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 51 75    /* Like SRT_Qu
1d7f0 65 75 65 2c 20 62 75 74 20 75 6e 69 71 75 65 20  eue, but unique 
1d800 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a  results only */.
1d810 0a 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59  ./* The ORDER BY
1d820 20 63 6c 61 75 73 65 20 69 73 20 69 67 6e 6f 72   clause is ignor
1d830 65 64 20 66 6f 72 20 61 6c 6c 20 6f 66 20 74 68  ed for all of th
1d840 65 20 61 62 6f 76 65 20 2a 2f 0a 23 64 65 66 69  e above */.#defi
1d850 6e 65 20 49 67 6e 6f 72 61 62 6c 65 4f 72 64 65  ne IgnorableOrde
1d860 72 62 79 28 58 29 20 28 28 58 2d 3e 65 44 65 73  rby(X) ((X->eDes
1d870 74 29 3c 3d 53 52 54 5f 44 69 73 74 51 75 65 75  t)<=SRT_DistQueu
1d880 65 29 0a 0a 23 64 65 66 69 6e 65 20 53 52 54 5f  e)..#define SRT_
1d890 4f 75 74 70 75 74 20 20 20 20 20 20 20 39 20 20  Output       9  
1d8a0 2f 2a 20 4f 75 74 70 75 74 20 65 61 63 68 20 72  /* Output each r
1d8b0 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a  ow of result */.
1d8c0 23 64 65 66 69 6e 65 20 53 52 54 5f 4d 65 6d 20  #define SRT_Mem 
1d8d0 20 20 20 20 20 20 20 20 31 30 20 20 2f 2a 20 53          10  /* S
1d8e0 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61  tore result in a
1d8f0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a   memory cell */.
1d900 23 64 65 66 69 6e 65 20 53 52 54 5f 53 65 74 20  #define SRT_Set 
1d910 20 20 20 20 20 20 20 20 31 31 20 20 2f 2a 20 53          11  /* S
1d920 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73 20  tore results as 
1d930 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78  keys in an index
1d940 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1d950 45 70 68 65 6d 54 61 62 20 20 20 20 31 32 20 20  EphemTab    12  
1d960 2f 2a 20 43 72 65 61 74 65 20 74 72 61 6e 73 69  /* Create transi
1d970 65 6e 74 20 74 61 62 20 61 6e 64 20 73 74 6f 72  ent tab and stor
1d980 65 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65  e like SRT_Table
1d990 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1d9a0 43 6f 72 6f 75 74 69 6e 65 20 20 20 31 33 20 20  Coroutine   13  
1d9b0 2f 2a 20 47 65 6e 65 72 61 74 65 20 61 20 73 69  /* Generate a si
1d9c0 6e 67 6c 65 20 72 6f 77 20 6f 66 20 72 65 73 75  ngle row of resu
1d9d0 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  lt */.#define SR
1d9e0 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20 31 34  T_Table       14
1d9f0 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
1da00 74 20 61 73 20 64 61 74 61 20 77 69 74 68 20 61  t as data with a
1da10 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69  n automatic rowi
1da20 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  d */../*.** An i
1da30 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
1da40 6f 62 6a 65 63 74 20 64 65 73 63 72 69 62 65 73  object describes
1da50 20 77 68 65 72 65 20 74 6f 20 70 75 74 20 6f 66   where to put of
1da60 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 0a   the results of.
1da70 2a 2a 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  ** a SELECT stat
1da80 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74  ement..*/.struct
1da90 20 53 65 6c 65 63 74 44 65 73 74 20 7b 0a 20 20   SelectDest {.  
1daa0 75 38 20 65 44 65 73 74 3b 20 20 20 20 20 20 20  u8 eDest;       
1dab0 20 20 20 20 20 2f 2a 20 48 6f 77 20 74 6f 20 64       /* How to d
1dac0 69 73 70 6f 73 65 20 6f 66 20 74 68 65 20 72 65  ispose of the re
1dad0 73 75 6c 74 73 2e 20 20 4f 6e 20 6f 66 20 53 52  sults.  On of SR
1dae0 54 5f 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a 20 20  T_* above. */.  
1daf0 63 68 61 72 20 2a 7a 41 66 66 53 64 73 74 3b 20  char *zAffSdst; 
1db00 20 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79       /* Affinity
1db10 20 75 73 65 64 20 77 68 65 6e 20 65 44 65 73 74   used when eDest
1db20 3d 3d 53 52 54 5f 53 65 74 20 2a 2f 0a 20 20 69  ==SRT_Set */.  i
1db30 6e 74 20 69 53 44 50 61 72 6d 3b 20 20 20 20 20  nt iSDParm;     
1db40 20 20 20 20 2f 2a 20 41 20 70 61 72 61 6d 65 74      /* A paramet
1db50 65 72 20 75 73 65 64 20 62 79 20 74 68 65 20 65  er used by the e
1db60 44 65 73 74 20 64 69 73 70 6f 73 61 6c 20 6d 65  Dest disposal me
1db70 74 68 6f 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53  thod */.  int iS
1db80 64 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  dst;           /
1db90 2a 20 42 61 73 65 20 72 65 67 69 73 74 65 72 20  * Base register 
1dba0 77 68 65 72 65 20 72 65 73 75 6c 74 73 20 61 72  where results ar
1dbb0 65 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69  e written */.  i
1dbc0 6e 74 20 6e 53 64 73 74 3b 20 20 20 20 20 20 20  nt nSdst;       
1dbd0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1dbe0 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c 6f 63   registers alloc
1dbf0 61 74 65 64 20 2a 2f 0a 20 20 45 78 70 72 4c 69  ated */.  ExprLi
1dc00 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 2f  st *pOrderBy;  /
1dc10 2a 20 4b 65 79 20 63 6f 6c 75 6d 6e 73 20 66 6f  * Key columns fo
1dc20 72 20 53 52 54 5f 51 75 65 75 65 20 61 6e 64 20  r SRT_Queue and 
1dc30 53 52 54 5f 44 69 73 74 51 75 65 75 65 20 2a 2f  SRT_DistQueue */
1dc40 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e  .};../*.** Durin
1dc50 67 20 63 6f 64 65 20 67 65 6e 65 72 61 74 69 6f  g code generatio
1dc60 6e 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 20  n of statements 
1dc70 74 68 61 74 20 64 6f 20 69 6e 73 65 72 74 73 20  that do inserts 
1dc80 69 6e 74 6f 20 41 55 54 4f 49 4e 43 52 45 4d 45  into AUTOINCREME
1dc90 4e 54 0a 2a 2a 20 74 61 62 6c 65 73 2c 20 74 68  NT.** tables, th
1dca0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f  e following info
1dcb0 72 6d 61 74 69 6f 6e 20 69 73 20 61 74 74 61 63  rmation is attac
1dcc0 68 65 64 20 74 6f 20 74 68 65 20 54 61 62 6c 65  hed to the Table
1dcd0 2e 75 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20  .u.autoInc.p.** 
1dce0 70 6f 69 6e 74 65 72 20 6f 66 20 65 61 63 68 20  pointer of each 
1dcf0 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 74 61  autoincrement ta
1dd00 62 6c 65 20 74 6f 20 72 65 63 6f 72 64 20 73 6f  ble to record so
1dd10 6d 65 20 73 69 64 65 20 69 6e 66 6f 72 6d 61 74  me side informat
1dd20 69 6f 6e 20 74 68 61 74 0a 2a 2a 20 74 68 65 20  ion that.** the 
1dd30 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 6e  code generator n
1dd40 65 65 64 73 2e 20 20 57 65 20 68 61 76 65 20 74  eeds.  We have t
1dd50 6f 20 6b 65 65 70 20 70 65 72 2d 74 61 62 6c 65  o keep per-table
1dd60 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a   autoincrement.*
1dd70 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e  * information in
1dd80 20 63 61 73 65 20 69 6e 73 65 72 74 73 20 61 72   case inserts ar
1dd90 65 20 64 6f 6e 65 20 77 69 74 68 69 6e 20 74 72  e done within tr
1dda0 69 67 67 65 72 73 2e 20 20 54 72 69 67 67 65 72  iggers.  Trigger
1ddb0 73 20 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d  s do not.** norm
1ddc0 61 6c 6c 79 20 63 6f 6f 72 64 69 6e 61 74 65 20  ally coordinate 
1ddd0 74 68 65 69 72 20 61 63 74 69 76 69 74 69 65 73  their activities
1dde0 2c 20 62 75 74 20 77 65 20 64 6f 20 6e 65 65 64  , but we do need
1ddf0 20 74 6f 20 63 6f 6f 72 64 69 6e 61 74 65 20 74   to coordinate t
1de00 68 65 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20 61 6e  he.** loading an
1de10 64 20 73 61 76 69 6e 67 20 6f 66 20 61 75 74 6f  d saving of auto
1de20 69 6e 63 72 65 6d 65 6e 74 20 69 6e 66 6f 72 6d  increment inform
1de30 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ation..*/.struct
1de40 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20   AutoincInfo {. 
1de50 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e   AutoincInfo *pN
1de60 65 78 74 3b 20 20 20 2f 2a 20 4e 65 78 74 20 69  ext;   /* Next i
1de70 6e 66 6f 20 62 6c 6f 63 6b 20 69 6e 20 61 20 6c  nfo block in a l
1de80 69 73 74 20 6f 66 20 74 68 65 6d 20 61 6c 6c 20  ist of them all 
1de90 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62  */.  Table *pTab
1dea0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61  ;          /* Ta
1deb0 62 6c 65 20 74 68 69 73 20 69 6e 66 6f 20 62 6c  ble this info bl
1dec0 6f 63 6b 20 72 65 66 65 72 73 20 74 6f 20 2a 2f  ock refers to */
1ded0 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20  .  int iDb;     
1dee0 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
1def0 78 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62  x in sqlite3.aDb
1df00 5b 5d 20 6f 66 20 64 61 74 61 62 61 73 65 20 68  [] of database h
1df10 6f 6c 64 69 6e 67 20 70 54 61 62 20 2a 2f 0a 20  olding pTab */. 
1df20 20 69 6e 74 20 72 65 67 43 74 72 3b 20 20 20 20   int regCtr;    
1df30 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79         /* Memory
1df40 20 72 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   register holdin
1df50 67 20 74 68 65 20 72 6f 77 69 64 20 63 6f 75 6e  g the rowid coun
1df60 74 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ter */.};../*.**
1df70 20 53 69 7a 65 20 6f 66 20 74 68 65 20 63 6f 6c   Size of the col
1df80 75 6d 6e 20 63 61 63 68 65 0a 2a 2f 0a 23 69 66  umn cache.*/.#if
1df90 6e 64 65 66 20 53 51 4c 49 54 45 5f 4e 5f 43 4f  ndef SQLITE_N_CO
1dfa0 4c 43 41 43 48 45 0a 23 20 64 65 66 69 6e 65 20  LCACHE.# define 
1dfb0 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48  SQLITE_N_COLCACH
1dfc0 45 20 31 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E 10.#endif../*.
1dfd0 2a 2a 20 41 74 20 6c 65 61 73 74 20 6f 6e 65 20  ** At least one 
1dfe0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
1dff0 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
1e000 75 72 65 20 69 73 20 63 72 65 61 74 65 64 20 66  ure is created f
1e010 6f 72 20 65 61 63 68 0a 2a 2a 20 74 72 69 67 67  or each.** trigg
1e020 65 72 20 74 68 61 74 20 6d 61 79 20 62 65 20 66  er that may be f
1e030 69 72 65 64 20 77 68 69 6c 65 20 70 61 72 73 69  ired while parsi
1e040 6e 67 20 61 6e 20 49 4e 53 45 52 54 2c 20 55 50  ng an INSERT, UP
1e050 44 41 54 45 20 6f 72 20 44 45 4c 45 54 45 0a 2a  DATE or DELETE.*
1e060 2a 20 73 74 61 74 65 6d 65 6e 74 2e 20 41 6c 6c  * statement. All
1e070 20 73 75 63 68 20 6f 62 6a 65 63 74 73 20 61 72   such objects ar
1e080 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  e stored in the 
1e090 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64  linked list head
1e0a0 65 64 20 61 74 0a 2a 2a 20 50 61 72 73 65 2e 70  ed at.** Parse.p
1e0b0 54 72 69 67 67 65 72 50 72 67 20 61 6e 64 20 64  TriggerPrg and d
1e0c0 65 6c 65 74 65 64 20 6f 6e 63 65 20 73 74 61 74  eleted once stat
1e0d0 65 6d 65 6e 74 20 63 6f 6d 70 69 6c 61 74 69 6f  ement compilatio
1e0e0 6e 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 63 6f  n has been.** co
1e0f0 6d 70 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41  mpleted..**.** A
1e100 20 56 64 62 65 20 73 75 62 2d 70 72 6f 67 72 61   Vdbe sub-progra
1e110 6d 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74  m that implement
1e120 73 20 74 68 65 20 62 6f 64 79 20 61 6e 64 20 57  s the body and W
1e130 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 72  HEN clause of tr
1e140 69 67 67 65 72 0a 2a 2a 20 54 72 69 67 67 65 72  igger.** Trigger
1e150 50 72 67 2e 70 54 72 69 67 67 65 72 2c 20 61 73  Prg.pTrigger, as
1e160 73 75 6d 69 6e 67 20 61 20 64 65 66 61 75 6c 74  suming a default
1e170 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61   ON CONFLICT cla
1e180 75 73 65 20 6f 66 0a 2a 2a 20 54 72 69 67 67 65  use of.** Trigge
1e190 72 50 72 67 2e 6f 72 63 6f 6e 66 2c 20 69 73 20  rPrg.orconf, is 
1e1a0 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 54 72  stored in the Tr
1e1b0 69 67 67 65 72 50 72 67 2e 70 50 72 6f 67 72 61  iggerPrg.pProgra
1e1c0 6d 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 20 54  m variable..** T
1e1d0 68 65 20 50 61 72 73 65 2e 70 54 72 69 67 67 65  he Parse.pTrigge
1e1e0 72 50 72 67 20 6c 69 73 74 20 6e 65 76 65 72 20  rPrg list never 
1e1f0 63 6f 6e 74 61 69 6e 73 20 74 77 6f 20 65 6e 74  contains two ent
1e200 72 69 65 73 20 77 69 74 68 20 74 68 65 20 73 61  ries with the sa
1e210 6d 65 0a 2a 2a 20 76 61 6c 75 65 73 20 66 6f 72  me.** values for
1e220 20 62 6f 74 68 20 70 54 72 69 67 67 65 72 20 61   both pTrigger a
1e230 6e 64 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a  nd orconf..**.**
1e240 20 54 68 65 20 54 72 69 67 67 65 72 50 72 67 2e   The TriggerPrg.
1e250 61 43 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61 72 69  aColmask[0] vari
1e260 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20 61  able is set to a
1e270 20 6d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63   mask of old.* c
1e280 6f 6c 75 6d 6e 73 0a 2a 2a 20 61 63 63 65 73 73  olumns.** access
1e290 65 64 20 28 6f 72 20 73 65 74 20 74 6f 20 30 20  ed (or set to 0 
1e2a0 66 6f 72 20 74 72 69 67 67 65 72 73 20 66 69 72  for triggers fir
1e2b0 65 64 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f  ed as a result o
1e2c0 66 20 49 4e 53 45 52 54 0a 2a 2a 20 73 74 61 74  f INSERT.** stat
1e2d0 65 6d 65 6e 74 73 29 2e 20 53 69 6d 69 6c 61 72  ements). Similar
1e2e0 6c 79 2c 20 74 68 65 20 54 72 69 67 67 65 72 50  ly, the TriggerP
1e2f0 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76  rg.aColmask[1] v
1e300 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74  ariable is set t
1e310 6f 0a 2a 2a 20 61 20 6d 61 73 6b 20 6f 66 20 6e  o.** a mask of n
1e320 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75 73 65  ew.* columns use
1e330 64 20 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d  d by the program
1e340 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67  ..*/.struct Trig
1e350 67 65 72 50 72 67 20 7b 0a 20 20 54 72 69 67 67  gerPrg {.  Trigg
1e360 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20  er *pTrigger;   
1e370 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20 74 68     /* Trigger th
1e380 69 73 20 70 72 6f 67 72 61 6d 20 77 61 73 20 63  is program was c
1e390 6f 64 65 64 20 66 72 6f 6d 20 2a 2f 0a 20 20 54  oded from */.  T
1e3a0 72 69 67 67 65 72 50 72 67 20 2a 70 4e 65 78 74  riggerPrg *pNext
1e3b0 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 65  ;      /* Next e
1e3c0 6e 74 72 79 20 69 6e 20 50 61 72 73 65 2e 70 54  ntry in Parse.pT
1e3d0 72 69 67 67 65 72 50 72 67 20 6c 69 73 74 20 2a  riggerPrg list *
1e3e0 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a  /.  SubProgram *
1e3f0 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 50  pProgram;   /* P
1e400 72 6f 67 72 61 6d 20 69 6d 70 6c 65 6d 65 6e 74  rogram implement
1e410 69 6e 67 20 70 54 72 69 67 67 65 72 2f 6f 72 63  ing pTrigger/orc
1e420 6f 6e 66 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 63  onf */.  int orc
1e430 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20 20  onf;            
1e440 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43   /* Default ON C
1e450 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 2a  ONFLICT policy *
1e460 2f 0a 20 20 75 33 32 20 61 43 6f 6c 6d 61 73 6b  /.  u32 aColmask
1e470 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d  [2];        /* M
1e480 61 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e  asks of old.*, n
1e490 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61 63 63  ew.* columns acc
1e4a0 65 73 73 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  essed */.};../*.
1e4b0 2a 2a 20 54 68 65 20 79 44 62 4d 61 73 6b 20 64  ** The yDbMask d
1e4c0 61 74 61 74 79 70 65 20 66 6f 72 20 74 68 65 20  atatype for the 
1e4d0 62 69 74 6d 61 73 6b 20 6f 66 20 61 6c 6c 20 61  bitmask of all a
1e4e0 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
1e4f0 73 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45  s..*/.#if SQLITE
1e500 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30  _MAX_ATTACHED>30
1e510 0a 20 20 74 79 70 65 64 65 66 20 75 6e 73 69 67  .  typedef unsig
1e520 6e 65 64 20 63 68 61 72 20 79 44 62 4d 61 73 6b  ned char yDbMask
1e530 5b 28 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54  [(SQLITE_MAX_ATT
1e540 41 43 48 45 44 2b 39 29 2f 38 5d 3b 0a 23 20 64  ACHED+9)/8];.# d
1e550 65 66 69 6e 65 20 44 62 4d 61 73 6b 54 65 73 74  efine DbMaskTest
1e560 28 4d 2c 49 29 20 20 20 20 28 28 28 4d 29 5b 28  (M,I)    (((M)[(
1e570 49 29 2f 38 5d 26 28 31 3c 3c 28 28 49 29 26 37  I)/8]&(1<<((I)&7
1e580 29 29 29 21 3d 30 29 0a 23 20 64 65 66 69 6e 65  )))!=0).# define
1e590 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20   DbMaskZero(M)  
1e5a0 20 20 20 20 6d 65 6d 73 65 74 28 28 4d 29 2c 30      memset((M),0
1e5b0 2c 73 69 7a 65 6f 66 28 4d 29 29 0a 23 20 64 65  ,sizeof(M)).# de
1e5c0 66 69 6e 65 20 44 62 4d 61 73 6b 53 65 74 28 4d  fine DbMaskSet(M
1e5d0 2c 49 29 20 20 20 20 20 28 4d 29 5b 28 49 29 2f  ,I)     (M)[(I)/
1e5e0 38 5d 7c 3d 28 31 3c 3c 28 28 49 29 26 37 29 29  8]|=(1<<((I)&7))
1e5f0 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1e600 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 73 71 6c  AllZero(M)   sql
1e610 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72  ite3DbMaskAllZer
1e620 6f 28 4d 29 0a 23 20 64 65 66 69 6e 65 20 44 62  o(M).# define Db
1e630 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20  MaskNonZero(M)  
1e640 20 28 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41   (sqlite3DbMaskA
1e650 6c 6c 5a 65 72 6f 28 4d 29 3d 3d 30 29 0a 23 65  llZero(M)==0).#e
1e660 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20 75 6e  lse.  typedef un
1e670 73 69 67 6e 65 64 20 69 6e 74 20 79 44 62 4d 61  signed int yDbMa
1e680 73 6b 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  sk;.# define DbM
1e690 61 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20  askTest(M,I)    
1e6a0 28 28 28 4d 29 26 28 28 28 79 44 62 4d 61 73 6b  (((M)&(((yDbMask
1e6b0 29 31 29 3c 3c 28 49 29 29 29 21 3d 30 29 0a 23  )1)<<(I)))!=0).#
1e6c0 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65   define DbMaskZe
1e6d0 72 6f 28 4d 29 20 20 20 20 20 20 28 4d 29 3d 30  ro(M)      (M)=0
1e6e0 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1e6f0 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28 4d 29  Set(M,I)     (M)
1e700 7c 3d 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c  |=(((yDbMask)1)<
1e710 3c 28 49 29 29 0a 23 20 64 65 66 69 6e 65 20 44  <(I)).# define D
1e720 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20  bMaskAllZero(M) 
1e730 20 20 28 4d 29 3d 3d 30 0a 23 20 64 65 66 69 6e    (M)==0.# defin
1e740 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28  e DbMaskNonZero(
1e750 4d 29 20 20 20 28 4d 29 21 3d 30 0a 23 65 6e 64  M)   (M)!=0.#end
1e760 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c  if../*.** An SQL
1e770 20 70 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e   parser context.
1e780 20 20 41 20 63 6f 70 79 20 6f 66 20 74 68 69 73    A copy of this
1e790 20 73 74 72 75 63 74 75 72 65 20 69 73 20 70 61   structure is pa
1e7a0 73 73 65 64 20 74 68 72 6f 75 67 68 0a 2a 2a 20  ssed through.** 
1e7b0 74 68 65 20 70 61 72 73 65 72 20 61 6e 64 20 64  the parser and d
1e7c0 6f 77 6e 20 69 6e 74 6f 20 61 6c 6c 20 74 68 65  own into all the
1e7d0 20 70 61 72 73 65 72 20 61 63 74 69 6f 6e 20 72   parser action r
1e7e0 6f 75 74 69 6e 65 20 69 6e 20 6f 72 64 65 72 20  outine in order 
1e7f0 74 6f 0a 2a 2a 20 63 61 72 72 79 20 61 72 6f 75  to.** carry arou
1e800 6e 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74  nd information t
1e810 68 61 74 20 69 73 20 67 6c 6f 62 61 6c 20 74 6f  hat is global to
1e820 20 74 68 65 20 65 6e 74 69 72 65 20 70 61 72 73   the entire pars
1e830 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72  e..**.** The str
1e840 75 63 74 75 72 65 20 69 73 20 64 69 76 69 64 65  ucture is divide
1e850 64 20 69 6e 74 6f 20 74 77 6f 20 70 61 72 74 73  d into two parts
1e860 2e 20 20 57 68 65 6e 20 74 68 65 20 70 61 72 73  .  When the pars
1e870 65 72 20 61 6e 64 20 63 6f 64 65 0a 2a 2a 20 67  er and code.** g
1e880 65 6e 65 72 61 74 65 20 63 61 6c 6c 20 74 68 65  enerate call the
1e890 6d 73 65 6c 76 65 73 20 72 65 63 75 72 73 69 76  mselves recursiv
1e8a0 65 6c 79 2c 20 74 68 65 20 66 69 72 73 74 20 70  ely, the first p
1e8b0 61 72 74 20 6f 66 20 74 68 65 20 73 74 72 75 63  art of the struc
1e8c0 74 75 72 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 74  ture.** is const
1e8d0 61 6e 74 20 62 75 74 20 74 68 65 20 73 65 63 6f  ant but the seco
1e8e0 6e 64 20 70 61 72 74 20 69 73 20 72 65 73 65 74  nd part is reset
1e8f0 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e   at the beginnin
1e900 67 20 61 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a 20  g and end of.** 
1e910 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 0a  each recursion..
1e920 2a 2a 0a 2a 2a 20 54 68 65 20 6e 54 61 62 6c 65  **.** The nTable
1e930 4c 6f 63 6b 20 61 6e 64 20 61 54 61 62 6c 65 4c  Lock and aTableL
1e940 6f 63 6b 20 76 61 72 69 61 62 6c 65 73 20 61 72  ock variables ar
1e950 65 20 6f 6e 6c 79 20 75 73 65 64 20 69 66 20 74  e only used if t
1e960 68 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 0a  he shared-cache.
1e970 2a 2a 20 66 65 61 74 75 72 65 20 69 73 20 65 6e  ** feature is en
1e980 61 62 6c 65 64 20 28 69 66 20 73 71 6c 69 74 65  abled (if sqlite
1e990 33 54 73 64 28 29 2d 3e 75 73 65 53 68 61 72 65  3Tsd()->useShare
1e9a0 64 44 61 74 61 20 69 73 20 74 72 75 65 29 2e 20  dData is true). 
1e9b0 54 68 65 79 20 61 72 65 0a 2a 2a 20 75 73 65 64  They are.** used
1e9c0 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 73 65   to store the se
1e9d0 74 20 6f 66 20 74 61 62 6c 65 2d 6c 6f 63 6b 73  t of table-locks
1e9e0 20 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65   required by the
1e9f0 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67   statement being
1ea00 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 2e 20 46 75  .** compiled. Fu
1ea10 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 54 61  nction sqlite3Ta
1ea20 62 6c 65 4c 6f 63 6b 28 29 20 69 73 20 75 73 65  bleLock() is use
1ea30 64 20 74 6f 20 61 64 64 20 65 6e 74 72 69 65 73  d to add entries
1ea40 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 69 73 74 2e   to the.** list.
1ea50 0a 2a 2f 0a 73 74 72 75 63 74 20 50 61 72 73 65  .*/.struct Parse
1ea60 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62   {.  sqlite3 *db
1ea70 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
1ea80 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 73   main database s
1ea90 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 63 68  tructure */.  ch
1eaa0 61 72 20 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20  ar *zErrMsg;    
1eab0 20 20 20 2f 2a 20 41 6e 20 65 72 72 6f 72 20 6d     /* An error m
1eac0 65 73 73 61 67 65 20 2a 2f 0a 20 20 56 64 62 65  essage */.  Vdbe
1ead0 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20 20   *pVdbe;        
1eae0 20 2f 2a 20 41 6e 20 65 6e 67 69 6e 65 20 66 6f   /* An engine fo
1eaf0 72 20 65 78 65 63 75 74 69 6e 67 20 64 61 74 61  r executing data
1eb00 62 61 73 65 20 62 79 74 65 63 6f 64 65 20 2a 2f  base bytecode */
1eb10 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20  .  int rc;      
1eb20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 74 75 72          /* Retur
1eb30 6e 20 63 6f 64 65 20 66 72 6f 6d 20 65 78 65 63  n code from exec
1eb40 75 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 63 6f  ution */.  u8 co
1eb50 6c 4e 61 6d 65 73 53 65 74 3b 20 20 20 20 20 20  lNamesSet;      
1eb60 2f 2a 20 54 52 55 45 20 61 66 74 65 72 20 4f 50  /* TRUE after OP
1eb70 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61 73 20  _ColumnName has 
1eb80 62 65 65 6e 20 69 73 73 75 65 64 20 74 6f 20 70  been issued to p
1eb90 56 64 62 65 20 2a 2f 0a 20 20 75 38 20 63 68 65  Vdbe */.  u8 che
1eba0 63 6b 53 63 68 65 6d 61 3b 20 20 20 20 20 20 2f  ckSchema;      /
1ebb0 2a 20 43 61 75 73 65 73 20 73 63 68 65 6d 61 20  * Causes schema 
1ebc0 63 6f 6f 6b 69 65 20 63 68 65 63 6b 20 61 66 74  cookie check aft
1ebd0 65 72 20 61 6e 20 65 72 72 6f 72 20 2a 2f 0a 20  er an error */. 
1ebe0 20 75 38 20 6e 65 73 74 65 64 3b 20 20 20 20 20   u8 nested;     
1ebf0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1ec00 6f 66 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20  of nested calls 
1ec10 74 6f 20 74 68 65 20 70 61 72 73 65 72 2f 63 6f  to the parser/co
1ec20 64 65 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a  de generator */.
1ec30 20 20 75 38 20 6e 54 65 6d 70 52 65 67 3b 20 20    u8 nTempReg;  
1ec40 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1ec50 20 6f 66 20 74 65 6d 70 6f 72 61 72 79 20 72 65   of temporary re
1ec60 67 69 73 74 65 72 73 20 69 6e 20 61 54 65 6d 70  gisters in aTemp
1ec70 52 65 67 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 73  Reg[] */.  u8 is
1ec80 4d 75 6c 74 69 57 72 69 74 65 3b 20 20 20 20 20  MultiWrite;     
1ec90 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61 74 65  /* True if state
1eca0 6d 65 6e 74 20 6d 61 79 20 6d 6f 64 69 66 79 2f  ment may modify/
1ecb0 69 6e 73 65 72 74 20 6d 75 6c 74 69 70 6c 65 20  insert multiple 
1ecc0 72 6f 77 73 20 2a 2f 0a 20 20 75 38 20 6d 61 79  rows */.  u8 may
1ecd0 41 62 6f 72 74 3b 20 20 20 20 20 20 20 20 20 2f  Abort;         /
1ece0 2a 20 54 72 75 65 20 69 66 20 73 74 61 74 65 6d  * True if statem
1ecf0 65 6e 74 20 6d 61 79 20 74 68 72 6f 77 20 61 6e  ent may throw an
1ed00 20 41 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e   ABORT exception
1ed10 20 2a 2f 0a 20 20 75 38 20 68 61 73 43 6f 6d 70   */.  u8 hasComp
1ed20 6f 75 6e 64 3b 20 20 20 20 20 20 2f 2a 20 4e 65  ound;      /* Ne
1ed30 65 64 20 74 6f 20 69 6e 76 6f 6b 65 20 63 6f 6e  ed to invoke con
1ed40 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65  vertCompoundSele
1ed50 63 74 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a  ctToSubquery() *
1ed60 2f 0a 20 20 75 38 20 6f 6b 43 6f 6e 73 74 46 61  /.  u8 okConstFa
1ed70 63 74 6f 72 3b 20 20 20 20 2f 2a 20 4f 4b 20 74  ctor;    /* OK t
1ed80 6f 20 66 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e  o factor out con
1ed90 73 74 61 6e 74 73 20 2a 2f 0a 20 20 75 38 20 64  stants */.  u8 d
1eda0 69 73 61 62 6c 65 4c 6f 6f 6b 61 73 69 64 65 3b  isableLookaside;
1edb0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 69   /* Number of ti
1edc0 6d 65 73 20 6c 6f 6f 6b 61 73 69 64 65 20 68 61  mes lookaside ha
1edd0 73 20 62 65 65 6e 20 64 69 73 61 62 6c 65 64 20  s been disabled 
1ede0 2a 2f 0a 20 20 75 38 20 6e 43 6f 6c 43 61 63 68  */.  u8 nColCach
1edf0 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  e;        /* Num
1ee00 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69  ber of entries i
1ee10 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d 20 2a 2f  n aColCache[] */
1ee20 0a 20 20 69 6e 74 20 6e 52 61 6e 67 65 52 65 67  .  int nRangeReg
1ee30 3b 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20  ;       /* Size 
1ee40 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79  of the temporary
1ee50 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20   register block 
1ee60 2a 2f 0a 20 20 69 6e 74 20 69 52 61 6e 67 65 52  */.  int iRangeR
1ee70 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 72  eg;       /* Fir
1ee80 73 74 20 72 65 67 69 73 74 65 72 20 69 6e 20 74  st register in t
1ee90 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65  emporary registe
1eea0 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74  r block */.  int
1eeb0 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20 20   nErr;          
1eec0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
1eed0 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20  rrors seen */.  
1eee0 69 6e 74 20 6e 54 61 62 3b 20 20 20 20 20 20 20  int nTab;       
1eef0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1ef00 66 20 70 72 65 76 69 6f 75 73 6c 79 20 61 6c 6c  f previously all
1ef10 6f 63 61 74 65 64 20 56 44 42 45 20 63 75 72 73  ocated VDBE curs
1ef20 6f 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65  ors */.  int nMe
1ef30 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  m;            /*
1ef40 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72   Number of memor
1ef50 79 20 63 65 6c 6c 73 20 75 73 65 64 20 73 6f 20  y cells used so 
1ef60 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 70  far */.  int nOp
1ef70 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a  Alloc;        /*
1ef80 20 4e 75 6d 62 65 72 20 6f 66 20 73 6c 6f 74 73   Number of slots
1ef90 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 56   allocated for V
1efa0 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69  dbe.aOp[] */.  i
1efb0 6e 74 20 73 7a 4f 70 41 6c 6c 6f 63 3b 20 20 20  nt szOpAlloc;   
1efc0 20 20 20 20 2f 2a 20 42 79 74 65 73 20 6f 66 20      /* Bytes of 
1efd0 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 61 6c 6c  memory space all
1efe0 6f 63 61 74 65 64 20 66 6f 72 20 56 64 62 65 2e  ocated for Vdbe.
1eff0 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 63  aOp[] */.  int c
1f000 6b 42 61 73 65 3b 20 20 20 20 20 20 20 20 20 20  kBase;          
1f010 2f 2a 20 42 61 73 65 20 72 65 67 69 73 74 65 72  /* Base register
1f020 20 6f 66 20 64 61 74 61 20 64 75 72 69 6e 67 20   of data during 
1f030 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74  check constraint
1f040 73 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65 6c 66  s */.  int iSelf
1f050 54 61 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  Tab;        /* T
1f060 61 62 6c 65 20 6f 66 20 61 6e 20 69 6e 64 65 78  able of an index
1f070 20 77 68 6f 73 65 20 65 78 70 72 73 20 61 72 65   whose exprs are
1f080 20 62 65 69 6e 67 20 63 6f 64 65 64 20 2a 2f 0a   being coded */.
1f090 20 20 69 6e 74 20 69 43 61 63 68 65 4c 65 76 65    int iCacheLeve
1f0a0 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 43 61 63  l;     /* ColCac
1f0b0 68 65 20 76 61 6c 69 64 20 77 68 65 6e 20 61 43  he valid when aC
1f0c0 6f 6c 43 61 63 68 65 5b 5d 2e 69 4c 65 76 65 6c  olCache[].iLevel
1f0d0 3c 3d 69 43 61 63 68 65 4c 65 76 65 6c 20 2a 2f  <=iCacheLevel */
1f0e0 0a 20 20 69 6e 74 20 69 43 61 63 68 65 43 6e 74  .  int iCacheCnt
1f0f0 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74  ;       /* Count
1f100 65 72 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72  er used to gener
1f110 61 74 65 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e  ate aColCache[].
1f120 6c 72 75 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20  lru values */.  
1f130 69 6e 74 20 6e 4c 61 62 65 6c 3b 20 20 20 20 20  int nLabel;     
1f140 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1f150 66 20 6c 61 62 65 6c 73 20 75 73 65 64 20 2a 2f  f labels used */
1f160 0a 20 20 69 6e 74 20 2a 61 4c 61 62 65 6c 3b 20  .  int *aLabel; 
1f170 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65          /* Space
1f180 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 6c 61 62   to hold the lab
1f190 65 6c 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  els */.  ExprLis
1f1a0 74 20 2a 70 43 6f 6e 73 74 45 78 70 72 3b 2f 2a  t *pConstExpr;/*
1f1b0 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73   Constant expres
1f1c0 73 69 6f 6e 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e  sions */.  Token
1f1d0 20 63 6f 6e 73 74 72 61 69 6e 74 4e 61 6d 65 3b   constraintName;
1f1e0 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63  /* Name of the c
1f1f0 6f 6e 73 74 72 61 69 6e 74 20 63 75 72 72 65 6e  onstraint curren
1f200 74 6c 79 20 62 65 69 6e 67 20 70 61 72 73 65 64  tly being parsed
1f210 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 77 72   */.  yDbMask wr
1f220 69 74 65 4d 61 73 6b 3b 20 20 20 2f 2a 20 53 74  iteMask;   /* St
1f230 61 72 74 20 61 20 77 72 69 74 65 20 74 72 61 6e  art a write tran
1f240 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 73 65  saction on these
1f250 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20   databases */.  
1f260 79 44 62 4d 61 73 6b 20 63 6f 6f 6b 69 65 4d 61  yDbMask cookieMa
1f270 73 6b 3b 20 20 2f 2a 20 42 69 74 6d 61 73 6b 20  sk;  /* Bitmask 
1f280 6f 66 20 73 63 68 65 6d 61 20 76 65 72 69 66 69  of schema verifi
1f290 65 64 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a  ed databases */.
1f2a0 20 20 69 6e 74 20 72 65 67 52 6f 77 69 64 3b 20    int regRowid; 
1f2b0 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
1f2c0 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69 64  er holding rowid
1f2d0 20 6f 66 20 43 52 45 41 54 45 20 54 41 42 4c 45   of CREATE TABLE
1f2e0 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74 20   entry */.  int 
1f2f0 72 65 67 52 6f 6f 74 3b 20 20 20 20 20 20 20 20  regRoot;        
1f300 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c   /* Register hol
1f310 64 69 6e 67 20 72 6f 6f 74 20 70 61 67 65 20 6e  ding root page n
1f320 75 6d 62 65 72 20 66 6f 72 20 6e 65 77 20 6f 62  umber for new ob
1f330 6a 65 63 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  jects */.  int n
1f340 4d 61 78 41 72 67 3b 20 20 20 20 20 20 20 20 20  MaxArg;         
1f350 2f 2a 20 4d 61 78 20 61 72 67 73 20 70 61 73 73  /* Max args pass
1f360 65 64 20 74 6f 20 75 73 65 72 20 66 75 6e 63 74  ed to user funct
1f370 69 6f 6e 20 62 79 20 73 75 62 2d 70 72 6f 67 72  ion by sub-progr
1f380 61 6d 20 2a 2f 0a 23 69 66 20 53 45 4c 45 43 54  am */.#if SELECT
1f390 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a 20 20  TRACE_ENABLED.  
1f3a0 69 6e 74 20 6e 53 65 6c 65 63 74 3b 20 20 20 20  int nSelect;    
1f3b0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1f3c0 66 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  f SELECT stateme
1f3d0 6e 74 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e  nts seen */.  in
1f3e0 74 20 6e 53 65 6c 65 63 74 49 6e 64 65 6e 74 3b  t nSelectIndent;
1f3f0 20 20 20 2f 2a 20 48 6f 77 20 66 61 72 20 74 6f     /* How far to
1f400 20 69 6e 64 65 6e 74 20 53 45 4c 45 43 54 54 52   indent SELECTTR
1f410 41 43 45 28 29 20 6f 75 74 70 75 74 20 2a 2f 0a  ACE() output */.
1f420 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
1f430 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45  QLITE_OMIT_SHARE
1f440 44 5f 43 41 43 48 45 0a 20 20 69 6e 74 20 6e 54  D_CACHE.  int nT
1f450 61 62 6c 65 4c 6f 63 6b 3b 20 20 20 20 20 20 20  ableLock;       
1f460 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f   /* Number of lo
1f470 63 6b 73 20 69 6e 20 61 54 61 62 6c 65 4c 6f 63  cks in aTableLoc
1f480 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f 63 6b  k */.  TableLock
1f490 20 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f 2a   *aTableLock; /*
1f4a0 20 52 65 71 75 69 72 65 64 20 74 61 62 6c 65 20   Required table 
1f4b0 6c 6f 63 6b 73 20 66 6f 72 20 73 68 61 72 65 64  locks for shared
1f4c0 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23  -cache mode */.#
1f4d0 65 6e 64 69 66 0a 20 20 41 75 74 6f 69 6e 63 49  endif.  AutoincI
1f4e0 6e 66 6f 20 2a 70 41 69 6e 63 3b 20 20 2f 2a 20  nfo *pAinc;  /* 
1f4f0 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  Information abou
1f500 74 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  t AUTOINCREMENT 
1f510 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20 50 61  counters */.  Pa
1f520 72 73 65 20 2a 70 54 6f 70 6c 65 76 65 6c 3b 20  rse *pToplevel; 
1f530 20 20 20 2f 2a 20 50 61 72 73 65 20 73 74 72 75     /* Parse stru
1f540 63 74 75 72 65 20 66 6f 72 20 6d 61 69 6e 20 70  cture for main p
1f550 72 6f 67 72 61 6d 20 28 6f 72 20 4e 55 4c 4c 29  rogram (or NULL)
1f560 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 72   */.  Table *pTr
1f570 69 67 67 65 72 54 61 62 3b 20 20 2f 2a 20 54 61  iggerTab;  /* Ta
1f580 62 6c 65 20 74 72 69 67 67 65 72 73 20 61 72 65  ble triggers are
1f590 20 62 65 69 6e 67 20 63 6f 64 65 64 20 66 6f 72   being coded for
1f5a0 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 43 72   */.  int addrCr
1f5b0 54 61 62 3b 20 20 20 20 20 20 20 2f 2a 20 41 64  Tab;       /* Ad
1f5c0 64 72 65 73 73 20 6f 66 20 4f 50 5f 43 72 65 61  dress of OP_Crea
1f5d0 74 65 54 61 62 6c 65 20 6f 70 63 6f 64 65 20 6f  teTable opcode o
1f5e0 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a  n CREATE TABLE *
1f5f0 2f 0a 20 20 75 33 32 20 6e 51 75 65 72 79 4c 6f  /.  u32 nQueryLo
1f600 6f 70 3b 20 20 20 20 20 20 2f 2a 20 45 73 74 20  op;      /* Est 
1f610 6e 75 6d 62 65 72 20 6f 66 20 69 74 65 72 61 74  number of iterat
1f620 69 6f 6e 73 20 6f 66 20 61 20 71 75 65 72 79 20  ions of a query 
1f630 28 31 30 2a 6c 6f 67 32 28 4e 29 29 20 2a 2f 0a  (10*log2(N)) */.
1f640 20 20 75 33 32 20 6f 6c 64 6d 61 73 6b 3b 20 20    u32 oldmask;  
1f650 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f         /* Mask o
1f660 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20  f old.* columns 
1f670 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20  referenced */.  
1f680 75 33 32 20 6e 65 77 6d 61 73 6b 3b 20 20 20 20  u32 newmask;    
1f690 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20       /* Mask of 
1f6a0 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65  new.* columns re
1f6b0 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 38  ferenced */.  u8
1f6c0 20 65 54 72 69 67 67 65 72 4f 70 3b 20 20 20 20   eTriggerOp;    
1f6d0 20 20 20 2f 2a 20 54 4b 5f 55 50 44 41 54 45 2c     /* TK_UPDATE,
1f6e0 20 54 4b 5f 49 4e 53 45 52 54 20 6f 72 20 54 4b   TK_INSERT or TK
1f6f0 5f 44 45 4c 45 54 45 20 2a 2f 0a 20 20 75 38 20  _DELETE */.  u8 
1f700 65 4f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20  eOrconf;        
1f710 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20    /* Default ON 
1f720 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20  CONFLICT policy 
1f730 66 6f 72 20 74 72 69 67 67 65 72 20 73 74 65 70  for trigger step
1f740 73 20 2a 2f 0a 20 20 75 38 20 64 69 73 61 62 6c  s */.  u8 disabl
1f750 65 54 72 69 67 67 65 72 73 3b 20 20 2f 2a 20 54  eTriggers;  /* T
1f760 72 75 65 20 74 6f 20 64 69 73 61 62 6c 65 20 74  rue to disable t
1f770 72 69 67 67 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a  riggers */..  /*
1f780 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f790 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f7a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f7b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f7c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 46  *********.  ** F
1f7d0 69 65 6c 64 73 20 61 62 6f 76 65 20 6d 75 73 74  ields above must
1f7e0 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   be initialized 
1f7f0 74 6f 20 7a 65 72 6f 2e 20 20 54 68 65 20 66 69  to zero.  The fi
1f800 65 6c 64 73 20 74 68 61 74 20 66 6f 6c 6c 6f 77  elds that follow
1f810 2c 0a 20 20 2a 2a 20 64 6f 77 6e 20 74 6f 20 74  ,.  ** down to t
1f820 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20  he beginning of 
1f830 74 68 65 20 72 65 63 75 72 73 69 76 65 20 73 65  the recursive se
1f840 63 74 69 6f 6e 2c 20 64 6f 20 6e 6f 74 20 6e 65  ction, do not ne
1f850 65 64 20 74 6f 20 62 65 0a 20 20 2a 2a 20 69 6e  ed to be.  ** in
1f860 69 74 69 61 6c 69 7a 65 64 20 61 73 20 74 68 65  itialized as the
1f870 79 20 77 69 6c 6c 20 62 65 20 73 65 74 20 62 65  y will be set be
1f880 66 6f 72 65 20 62 65 69 6e 67 20 75 73 65 64 2e  fore being used.
1f890 20 20 54 68 65 20 62 6f 75 6e 64 61 72 79 20 69    The boundary i
1f8a0 73 0a 20 20 2a 2a 20 64 65 74 65 72 6d 69 6e 65  s.  ** determine
1f8b0 64 20 62 79 20 6f 66 66 73 65 74 6f 66 28 50 61  d by offsetof(Pa
1f8c0 72 73 65 2c 61 43 6f 6c 43 61 63 68 65 29 2e 0a  rse,aColCache)..
1f8d0 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    **************
1f8e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f8f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f900 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f910 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20  ************/.. 
1f920 20 73 74 72 75 63 74 20 79 43 6f 6c 43 61 63 68   struct yColCach
1f930 65 20 7b 0a 20 20 20 20 69 6e 74 20 69 54 61 62  e {.    int iTab
1f940 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  le;           /*
1f950 20 54 61 62 6c 65 20 63 75 72 73 6f 72 20 6e 75   Table cursor nu
1f960 6d 62 65 72 20 2a 2f 0a 20 20 20 20 69 31 36 20  mber */.    i16 
1f970 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  iColumn;        
1f980 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6c 75 6d    /* Table colum
1f990 6e 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20  n number */.    
1f9a0 75 38 20 74 65 6d 70 52 65 67 3b 20 20 20 20 20  u8 tempReg;     
1f9b0 20 20 20 20 20 20 2f 2a 20 69 52 65 67 20 69 73        /* iReg is
1f9c0 20 61 20 74 65 6d 70 20 72 65 67 69 73 74 65 72   a temp register
1f9d0 20 74 68 61 74 20 6e 65 65 64 73 20 74 6f 20 62   that needs to b
1f9e0 65 20 66 72 65 65 64 20 2a 2f 0a 20 20 20 20 69  e freed */.    i
1f9f0 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20 20 20 20  nt iLevel;      
1fa00 20 20 20 20 20 2f 2a 20 4e 65 73 74 69 6e 67 20       /* Nesting 
1fa10 6c 65 76 65 6c 20 2a 2f 0a 20 20 20 20 69 6e 74  level */.    int
1fa20 20 69 52 65 67 3b 20 20 20 20 20 20 20 20 20 20   iReg;          
1fa30 20 20 20 2f 2a 20 52 65 67 20 77 69 74 68 20 76     /* Reg with v
1fa40 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c  alue of this col
1fa50 75 6d 6e 2e 20 30 20 6d 65 61 6e 73 20 6e 6f 6e  umn. 0 means non
1fa60 65 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6c 72  e. */.    int lr
1fa70 75 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  u;              
1fa80 2f 2a 20 4c 65 61 73 74 20 72 65 63 65 6e 74 6c  /* Least recentl
1fa90 79 20 75 73 65 64 20 65 6e 74 72 79 20 68 61 73  y used entry has
1faa0 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 76 61   the smallest va
1fab0 6c 75 65 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 43  lue */.  } aColC
1fac0 61 63 68 65 5b 53 51 4c 49 54 45 5f 4e 5f 43 4f  ache[SQLITE_N_CO
1fad0 4c 43 41 43 48 45 5d 3b 20 20 2f 2a 20 4f 6e 65  LCACHE];  /* One
1fae0 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
1faf0 20 63 61 63 68 65 20 65 6e 74 72 79 20 2a 2f 0a   cache entry */.
1fb00 20 20 69 6e 74 20 61 54 65 6d 70 52 65 67 5b 38    int aTempReg[8
1fb10 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 6c  ];        /* Hol
1fb20 64 69 6e 67 20 61 72 65 61 20 66 6f 72 20 74 65  ding area for te
1fb30 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72  mporary register
1fb40 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e 61  s */.  Token sNa
1fb50 6d 65 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 2f  meToken;       /
1fb60 2a 20 54 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71  * Token with unq
1fb70 75 61 6c 69 66 69 65 64 20 73 63 68 65 6d 61 20  ualified schema 
1fb80 6f 62 6a 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 0a  object name */..
1fb90 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    /*************
1fba0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fbb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fbc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fbd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a  ***********.  **
1fbe0 20 41 62 6f 76 65 20 69 73 20 63 6f 6e 73 74 61   Above is consta
1fbf0 6e 74 20 62 65 74 77 65 65 6e 20 72 65 63 75 72  nt between recur
1fc00 73 69 6f 6e 73 2e 20 20 42 65 6c 6f 77 20 69 73  sions.  Below is
1fc10 20 72 65 73 65 74 20 62 65 66 6f 72 65 20 61 6e   reset before an
1fc20 64 20 61 66 74 65 72 0a 20 20 2a 2a 20 65 61 63  d after.  ** eac
1fc30 68 20 72 65 63 75 72 73 69 6f 6e 2e 20 20 54 68  h recursion.  Th
1fc40 65 20 62 6f 75 6e 64 61 72 79 20 62 65 74 77 65  e boundary betwe
1fc50 65 6e 20 74 68 65 73 65 20 74 77 6f 20 72 65 67  en these two reg
1fc60 69 6f 6e 73 20 69 73 20 64 65 74 65 72 6d 69 6e  ions is determin
1fc70 65 64 0a 20 20 2a 2a 20 75 73 69 6e 67 20 6f 66  ed.  ** using of
1fc80 66 73 65 74 6f 66 28 50 61 72 73 65 2c 73 4c 61  fsetof(Parse,sLa
1fc90 73 74 54 6f 6b 65 6e 29 20 73 6f 20 74 68 65 20  stToken) so the 
1fca0 73 4c 61 73 74 54 6f 6b 65 6e 20 66 69 65 6c 64  sLastToken field
1fcb0 20 6d 75 73 74 20 62 65 20 74 68 65 0a 20 20 2a   must be the.  *
1fcc0 2a 20 66 69 72 73 74 20 66 69 65 6c 64 20 69 6e  * first field in
1fcd0 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20 72   the recursive r
1fce0 65 67 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a  egion..  *******
1fcf0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fd00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fd10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fd20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fd30 2a 2f 0a 0a 20 20 54 6f 6b 65 6e 20 73 4c 61 73  */..  Token sLas
1fd40 74 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 2f 2a  tToken;       /*
1fd50 20 54 68 65 20 6c 61 73 74 20 74 6f 6b 65 6e 20   The last token 
1fd60 70 61 72 73 65 64 20 2a 2f 0a 20 20 79 6e 56 61  parsed */.  ynVa
1fd70 72 20 6e 56 61 72 3b 20 20 20 20 20 20 20 20 20  r nVar;         
1fd80 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1fd90 6f 66 20 27 3f 27 20 76 61 72 69 61 62 6c 65 73  of '?' variables
1fda0 20 73 65 65 6e 20 69 6e 20 74 68 65 20 53 51 4c   seen in the SQL
1fdb0 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75 38 20   so far */.  u8 
1fdc0 69 50 6b 53 6f 72 74 4f 72 64 65 72 3b 20 20 20  iPkSortOrder;   
1fdd0 20 20 20 20 20 20 20 2f 2a 20 41 53 43 20 6f 72         /* ASC or
1fde0 20 44 45 53 43 20 66 6f 72 20 49 4e 54 45 47 45   DESC for INTEGE
1fdf0 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f  R PRIMARY KEY */
1fe00 0a 20 20 75 38 20 65 78 70 6c 61 69 6e 3b 20 20  .  u8 explain;  
1fe10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1fe20 54 72 75 65 20 69 66 20 74 68 65 20 45 58 50 4c  True if the EXPL
1fe30 41 49 4e 20 66 6c 61 67 20 69 73 20 66 6f 75 6e  AIN flag is foun
1fe40 64 20 6f 6e 20 74 68 65 20 71 75 65 72 79 20 2a  d on the query *
1fe50 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
1fe60 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
1fe70 4c 45 0a 20 20 75 38 20 64 65 63 6c 61 72 65 56  LE.  u8 declareV
1fe80 74 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f  tab;           /
1fe90 2a 20 54 72 75 65 20 69 66 20 69 6e 73 69 64 65  * True if inside
1fea0 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65   sqlite3_declare
1feb0 5f 76 74 61 62 28 29 20 2a 2f 0a 20 20 69 6e 74  _vtab() */.  int
1fec0 20 6e 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20   nVtabLock;     
1fed0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1fee0 20 6f 66 20 76 69 72 74 75 61 6c 20 74 61 62 6c   of virtual tabl
1fef0 65 73 20 74 6f 20 6c 6f 63 6b 20 2a 2f 0a 23 65  es to lock */.#e
1ff00 6e 64 69 66 0a 20 20 69 6e 74 20 6e 48 65 69 67  ndif.  int nHeig
1ff10 68 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ht;             
1ff20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 74   /* Expression t
1ff30 72 65 65 20 68 65 69 67 68 74 20 6f 66 20 63 75  ree height of cu
1ff40 72 72 65 6e 74 20 73 75 62 2d 73 65 6c 65 63 74  rrent sub-select
1ff50 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
1ff60 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a  TE_OMIT_EXPLAIN.
1ff70 20 20 69 6e 74 20 69 53 65 6c 65 63 74 49 64 3b    int iSelectId;
1ff80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
1ff90 44 20 6f 66 20 63 75 72 72 65 6e 74 20 73 65 6c  D of current sel
1ffa0 65 63 74 20 66 6f 72 20 45 58 50 4c 41 49 4e 20  ect for EXPLAIN 
1ffb0 6f 75 74 70 75 74 20 2a 2f 0a 20 20 69 6e 74 20  output */.  int 
1ffc0 69 4e 65 78 74 53 65 6c 65 63 74 49 64 3b 20 20  iNextSelectId;  
1ffd0 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 61 76        /* Next av
1ffe0 61 69 6c 61 62 6c 65 20 73 65 6c 65 63 74 20 49  ailable select I
1fff0 44 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75  D for EXPLAIN ou
20000 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  tput */.#endif. 
20010 20 56 4c 69 73 74 20 2a 70 56 4c 69 73 74 3b 20   VList *pVList; 
20020 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
20030 70 70 69 6e 67 20 62 65 74 77 65 65 6e 20 76 61  pping between va
20040 72 69 61 62 6c 65 20 6e 61 6d 65 73 20 61 6e 64  riable names and
20050 20 6e 75 6d 62 65 72 73 20 2a 2f 0a 20 20 56 64   numbers */.  Vd
20060 62 65 20 2a 70 52 65 70 72 65 70 61 72 65 3b 20  be *pReprepare; 
20070 20 20 20 20 20 20 20 20 2f 2a 20 56 4d 20 62 65          /* VM be
20080 69 6e 67 20 72 65 70 72 65 70 61 72 65 64 20 28  ing reprepared (
20090 73 71 6c 69 74 65 33 52 65 70 72 65 70 61 72 65  sqlite3Reprepare
200a0 28 29 29 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ()) */.  const c
200b0 68 61 72 20 2a 7a 54 61 69 6c 3b 20 20 20 20 20  har *zTail;     
200c0 20 20 20 2f 2a 20 41 6c 6c 20 53 51 4c 20 74 65     /* All SQL te
200d0 78 74 20 70 61 73 74 20 74 68 65 20 6c 61 73 74  xt past the last
200e0 20 73 65 6d 69 63 6f 6c 6f 6e 20 70 61 72 73 65   semicolon parse
200f0 64 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e  d */.  Table *pN
20100 65 77 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20  ewTable;        
20110 20 2f 2a 20 41 20 74 61 62 6c 65 20 62 65 69 6e   /* A table bein
20120 67 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79  g constructed by
20130 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f   CREATE TABLE */
20140 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65 77  .  Trigger *pNew
20150 54 72 69 67 67 65 72 3b 20 20 20 20 20 2f 2a 20  Trigger;     /* 
20160 54 72 69 67 67 65 72 20 75 6e 64 65 72 20 63 6f  Trigger under co
20170 6e 73 74 72 75 63 74 20 62 79 20 61 20 43 52 45  nstruct by a CRE
20180 41 54 45 20 54 52 49 47 47 45 52 20 2a 2f 0a 20  ATE TRIGGER */. 
20190 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75   const char *zAu
201a0 74 68 43 6f 6e 74 65 78 74 3b 20 2f 2a 20 54 68  thContext; /* Th
201b0 65 20 36 74 68 20 70 61 72 61 6d 65 74 65 72 20  e 6th parameter 
201c0 74 6f 20 64 62 2d 3e 78 41 75 74 68 20 63 61 6c  to db->xAuth cal
201d0 6c 62 61 63 6b 73 20 2a 2f 0a 23 69 66 6e 64 65  lbacks */.#ifnde
201e0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
201f0 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 54 6f 6b  RTUALTABLE.  Tok
20200 65 6e 20 73 41 72 67 3b 20 20 20 20 20 20 20 20  en sArg;        
20210 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 6c 65         /* Comple
20220 74 65 20 74 65 78 74 20 6f 66 20 61 20 6d 6f 64  te text of a mod
20230 75 6c 65 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a  ule argument */.
20240 20 20 54 61 62 6c 65 20 2a 2a 61 70 56 74 61 62    Table **apVtab
20250 4c 6f 63 6b 3b 20 20 20 20 20 20 20 2f 2a 20 50  Lock;       /* P
20260 6f 69 6e 74 65 72 20 74 6f 20 76 69 72 74 75 61  ointer to virtua
20270 6c 20 74 61 62 6c 65 73 20 6e 65 65 64 69 6e 67  l tables needing
20280 20 6c 6f 63 6b 69 6e 67 20 2a 2f 0a 23 65 6e 64   locking */.#end
20290 69 66 0a 20 20 54 61 62 6c 65 20 2a 70 5a 6f 6d  if.  Table *pZom
202a0 62 69 65 54 61 62 3b 20 20 20 20 20 20 20 20 2f  bieTab;        /
202b0 2a 20 4c 69 73 74 20 6f 66 20 54 61 62 6c 65 20  * List of Table 
202c0 6f 62 6a 65 63 74 73 20 74 6f 20 64 65 6c 65 74  objects to delet
202d0 65 20 61 66 74 65 72 20 63 6f 64 65 20 67 65 6e  e after code gen
202e0 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67   */.  TriggerPrg
202f0 20 2a 70 54 72 69 67 67 65 72 50 72 67 3b 20 20   *pTriggerPrg;  
20300 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f  /* Linked list o
20310 66 20 63 6f 64 65 64 20 74 72 69 67 67 65 72 73  f coded triggers
20320 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74   */.  With *pWit
20330 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  h;              
20340 2f 2a 20 43 75 72 72 65 6e 74 20 57 49 54 48 20  /* Current WITH 
20350 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20  clause, or NULL 
20360 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68  */.  With *pWith
20370 54 6f 46 72 65 65 3b 20 20 20 20 20 20 20 20 2f  ToFree;        /
20380 2a 20 46 72 65 65 20 74 68 69 73 20 57 49 54 48  * Free this WITH
20390 20 6f 62 6a 65 63 74 20 61 74 20 74 68 65 20 65   object at the e
203a0 6e 64 20 6f 66 20 74 68 65 20 70 61 72 73 65 20  nd of the parse 
203b0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a  */.};../*.** Siz
203c0 65 73 20 61 6e 64 20 70 6f 69 6e 74 65 72 73 20  es and pointers 
203d0 6f 66 20 76 61 72 69 6f 75 73 20 70 61 72 74 73  of various parts
203e0 20 6f 66 20 74 68 65 20 50 61 72 73 65 20 6f 62   of the Parse ob
203f0 6a 65 63 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ject..*/.#define
20400 20 50 41 52 53 45 5f 48 44 52 5f 53 5a 20 6f 66   PARSE_HDR_SZ of
20410 66 73 65 74 6f 66 28 50 61 72 73 65 2c 61 43 6f  fsetof(Parse,aCo
20420 6c 43 61 63 68 65 29 20 2f 2a 20 52 65 63 75 72  lCache) /* Recur
20430 73 69 76 65 20 70 61 72 74 20 77 2f 6f 20 61 43  sive part w/o aC
20440 6f 6c 43 61 63 68 65 2a 2f 0a 23 64 65 66 69 6e  olCache*/.#defin
20450 65 20 50 41 52 53 45 5f 52 45 43 55 52 53 45 5f  e PARSE_RECURSE_
20460 53 5a 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73  SZ offsetof(Pars
20470 65 2c 73 4c 61 73 74 54 6f 6b 65 6e 29 20 20 20  e,sLastToken)   
20480 20 2f 2a 20 52 65 63 75 72 73 69 76 65 20 70 61   /* Recursive pa
20490 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41  rt */.#define PA
204a0 52 53 45 5f 54 41 49 4c 5f 53 5a 20 28 73 69 7a  RSE_TAIL_SZ (siz
204b0 65 6f 66 28 50 61 72 73 65 29 2d 50 41 52 53 45  eof(Parse)-PARSE
204c0 5f 52 45 43 55 52 53 45 5f 53 5a 29 20 2f 2a 20  _RECURSE_SZ) /* 
204d0 4e 6f 6e 2d 72 65 63 75 72 73 69 76 65 20 70 61  Non-recursive pa
204e0 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41  rt */.#define PA
204f0 52 53 45 5f 54 41 49 4c 28 58 29 20 28 28 28 63  RSE_TAIL(X) (((c
20500 68 61 72 2a 29 28 58 29 29 2b 50 41 52 53 45 5f  har*)(X))+PARSE_
20510 52 45 43 55 52 53 45 5f 53 5a 29 20 20 2f 2a 20  RECURSE_SZ)  /* 
20520 50 6f 69 6e 74 65 72 20 74 6f 20 74 61 69 6c 20  Pointer to tail 
20530 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  */../*.** Return
20540 20 74 72 75 65 20 69 66 20 63 75 72 72 65 6e 74   true if current
20550 6c 79 20 69 6e 73 69 64 65 20 61 6e 20 73 71 6c  ly inside an sql
20560 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61  ite3_declare_vta
20570 62 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66  b() call..*/.#if
20580 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
20590 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 23  VIRTUALTABLE.  #
205a0 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52  define IN_DECLAR
205b0 45 5f 56 54 41 42 20 30 0a 23 65 6c 73 65 0a 20  E_VTAB 0.#else. 
205c0 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c   #define IN_DECL
205d0 41 52 45 5f 56 54 41 42 20 28 70 50 61 72 73 65  ARE_VTAB (pParse
205e0 2d 3e 64 65 63 6c 61 72 65 56 74 61 62 29 0a 23  ->declareVtab).#
205f0 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  endif../*.** An 
20600 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
20610 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
20620 75 72 65 20 63 61 6e 20 62 65 20 64 65 63 6c 61  ure can be decla
20630 72 65 64 20 6f 6e 20 61 20 73 74 61 63 6b 20 61  red on a stack a
20640 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61  nd used.** to sa
20650 76 65 20 74 68 65 20 50 61 72 73 65 2e 7a 41 75  ve the Parse.zAu
20660 74 68 43 6f 6e 74 65 78 74 20 76 61 6c 75 65 20  thContext value 
20670 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 62  so that it can b
20680 65 20 72 65 73 74 6f 72 65 64 20 6c 61 74 65 72  e restored later
20690 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 68  ..*/.struct Auth
206a0 43 6f 6e 74 65 78 74 20 7b 0a 20 20 63 6f 6e 73  Context {.  cons
206b0 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e  t char *zAuthCon
206c0 74 65 78 74 3b 20 20 20 2f 2a 20 50 75 74 20 73  text;   /* Put s
206d0 61 76 65 64 20 50 61 72 73 65 2e 7a 41 75 74 68  aved Parse.zAuth
206e0 43 6f 6e 74 65 78 74 20 68 65 72 65 20 2a 2f 0a  Context here */.
206f0 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
20700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
20710 20 54 68 65 20 50 61 72 73 65 20 73 74 72 75 63   The Parse struc
20720 74 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ture */.};../*.*
20730 2a 20 42 69 74 66 69 65 6c 64 20 66 6c 61 67 73  * Bitfield flags
20740 20 66 6f 72 20 50 35 20 76 61 6c 75 65 20 69 6e   for P5 value in
20750 20 76 61 72 69 6f 75 73 20 6f 70 63 6f 64 65 73   various opcodes
20760 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f  ..**.** Value co
20770 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72  nstraints (enfor
20780 63 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29  ced via assert()
20790 29 3a 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f  ):.**    OPFLAG_
207a0 4c 45 4e 47 54 48 41 52 47 20 20 20 20 3d 3d 20  LENGTHARG    == 
207b0 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47  SQLITE_FUNC_LENG
207c0 54 48 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f  TH.**    OPFLAG_
207d0 54 59 50 45 4f 46 41 52 47 20 20 20 20 3d 3d 20  TYPEOFARG    == 
207e0 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50 45  SQLITE_FUNC_TYPE
207f0 4f 46 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f  OF.**    OPFLAG_
20800 42 55 4c 4b 43 53 52 20 20 20 20 20 20 3d 3d 20  BULKCSR      == 
20810 42 54 52 45 45 5f 42 55 4c 4b 4c 4f 41 44 0a 2a  BTREE_BULKLOAD.*
20820 2a 20 20 20 20 4f 50 46 4c 41 47 5f 53 45 45 4b  *    OPFLAG_SEEK
20830 45 51 20 20 20 20 20 20 20 3d 3d 20 42 54 52 45  EQ       == BTRE
20840 45 5f 53 45 45 4b 5f 45 51 0a 2a 2a 20 20 20 20  E_SEEK_EQ.**    
20850 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45  OPFLAG_FORDELETE
20860 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 46 4f 52      == BTREE_FOR
20870 44 45 4c 45 54 45 0a 2a 2a 20 20 20 20 4f 50 46  DELETE.**    OPF
20880 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e  LAG_SAVEPOSITION
20890 20 3d 3d 20 42 54 52 45 45 5f 53 41 56 45 50 4f   == BTREE_SAVEPO
208a0 53 49 54 49 4f 4e 0a 2a 2a 20 20 20 20 4f 50 46  SITION.**    OPF
208b0 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 20 20 20  LAG_AUXDELETE   
208c0 20 3d 3d 20 42 54 52 45 45 5f 41 55 58 44 45 4c   == BTREE_AUXDEL
208d0 45 54 45 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ETE.*/.#define O
208e0 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 20 20  PFLAG_NCHANGE   
208f0 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f      0x01    /* O
20900 50 5f 49 6e 73 65 72 74 3a 20 53 65 74 20 74 6f  P_Insert: Set to
20910 20 75 70 64 61 74 65 20 64 62 2d 3e 6e 43 68 61   update db->nCha
20920 6e 67 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  nge */.         
20930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20940 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
20950 6c 73 6f 20 75 73 65 64 20 69 6e 20 50 32 20 28  lso used in P2 (
20960 6e 6f 74 20 50 35 29 20 6f 66 20 4f 50 5f 44 65  not P5) of OP_De
20970 6c 65 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  lete */.#define 
20980 4f 50 46 4c 41 47 5f 45 50 48 45 4d 20 20 20 20  OPFLAG_EPHEM    
20990 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20       0x01    /* 
209a0 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 45 70 68 65 6d  OP_Column: Ephem
209b0 65 72 61 6c 20 6f 75 74 70 75 74 20 69 73 20 6f  eral output is o
209c0 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  k */.#define OPF
209d0 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 20 20  LAG_LASTROWID   
209e0 20 20 30 78 32 30 20 20 20 20 2f 2a 20 53 65 74    0x20    /* Set
209f0 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6c   to update db->l
20a00 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23 64 65 66  astRowid */.#def
20a10 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44  ine OPFLAG_ISUPD
20a20 41 54 45 20 20 20 20 20 20 30 78 30 34 20 20 20  ATE      0x04   
20a30 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49 6e 73 65   /* This OP_Inse
20a40 72 74 20 69 73 20 61 6e 20 73 71 6c 20 55 50 44  rt is an sql UPD
20a50 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ATE */.#define O
20a60 50 46 4c 41 47 5f 41 50 50 45 4e 44 20 20 20 20  PFLAG_APPEND    
20a70 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20 54      0x08    /* T
20a80 68 69 73 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f  his is likely to
20a90 20 62 65 20 61 6e 20 61 70 70 65 6e 64 20 2a 2f   be an append */
20aa0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
20ab0 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 30 78  USESEEKRESULT 0x
20ac0 31 30 20 20 20 20 2f 2a 20 54 72 79 20 74 6f 20  10    /* Try to 
20ad0 61 76 6f 69 64 20 61 20 73 65 65 6b 20 69 6e 20  avoid a seek in 
20ae0 42 74 72 65 65 49 6e 73 65 72 74 28 29 20 2a 2f  BtreeInsert() */
20af0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
20b00 49 53 4e 4f 4f 50 20 20 20 20 20 20 20 20 30 78  ISNOOP        0x
20b10 34 30 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65  40    /* OP_Dele
20b20 74 65 20 64 6f 65 73 20 70 72 65 2d 75 70 64 61  te does pre-upda
20b30 74 65 2d 68 6f 6f 6b 20 6f 6e 6c 79 20 2a 2f 0a  te-hook only */.
20b40 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c  #define OPFLAG_L
20b50 45 4e 47 54 48 41 52 47 20 20 20 20 20 30 78 34  ENGTHARG     0x4
20b60 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d  0    /* OP_Colum
20b70 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20  n only used for 
20b80 6c 65 6e 67 74 68 28 29 20 2a 2f 0a 23 64 65 66  length() */.#def
20b90 69 6e 65 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f  ine OPFLAG_TYPEO
20ba0 46 41 52 47 20 20 20 20 20 30 78 38 30 20 20 20  FARG     0x80   
20bb0 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e   /* OP_Column on
20bc0 6c 79 20 75 73 65 64 20 66 6f 72 20 74 79 70 65  ly used for type
20bd0 6f 66 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  of() */.#define 
20be0 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20  OPFLAG_BULKCSR  
20bf0 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20       0x01    /* 
20c00 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73 65 64 20 74  OP_Open** used t
20c10 6f 20 6f 70 65 6e 20 62 75 6c 6b 20 63 75 72 73  o open bulk curs
20c20 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  or */.#define OP
20c30 46 4c 41 47 5f 53 45 45 4b 45 51 20 20 20 20 20  FLAG_SEEKEQ     
20c40 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 4f 50     0x02    /* OP
20c50 5f 4f 70 65 6e 2a 2a 20 63 75 72 73 6f 72 20 75  _Open** cursor u
20c60 73 65 73 20 45 51 20 73 65 65 6b 20 6f 6e 6c 79  ses EQ seek only
20c70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
20c80 41 47 5f 46 4f 52 44 45 4c 45 54 45 20 20 20 20  AG_FORDELETE    
20c90 20 30 78 30 38 20 20 20 20 2f 2a 20 4f 50 5f 4f   0x08    /* OP_O
20ca0 70 65 6e 20 73 68 6f 75 6c 64 20 75 73 65 20 42  pen should use B
20cb0 54 52 45 45 5f 46 4f 52 44 45 4c 45 54 45 20 2a  TREE_FORDELETE *
20cc0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
20cd0 5f 50 32 49 53 52 45 47 20 20 20 20 20 20 20 30  _P2ISREG       0
20ce0 78 31 30 20 20 20 20 2f 2a 20 50 32 20 74 6f 20  x10    /* P2 to 
20cf0 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73 20 61 20 72  OP_Open** is a r
20d00 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20 2a  egister number *
20d10 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
20d20 5f 50 45 52 4d 55 54 45 20 20 20 20 20 20 20 30  _PERMUTE       0
20d30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6d  x01    /* OP_Com
20d40 70 61 72 65 3a 20 75 73 65 20 74 68 65 20 70 65  pare: use the pe
20d50 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 23 64 65  rmutation */.#de
20d60 66 69 6e 65 20 4f 50 46 4c 41 47 5f 53 41 56 45  fine OPFLAG_SAVE
20d70 50 4f 53 49 54 49 4f 4e 20 20 30 78 30 32 20 20  POSITION  0x02  
20d80 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 2f 49    /* OP_Delete/I
20d90 6e 73 65 72 74 3a 20 73 61 76 65 20 63 75 72 73  nsert: save curs
20da0 6f 72 20 70 6f 73 20 2a 2f 0a 23 64 65 66 69 6e  or pos */.#defin
20db0 65 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45  e OPFLAG_AUXDELE
20dc0 54 45 20 20 20 20 20 30 78 30 34 20 20 20 20 2f  TE     0x04    /
20dd0 2a 20 4f 50 5f 44 65 6c 65 74 65 3a 20 69 6e 64  * OP_Delete: ind
20de0 65 78 20 69 6e 20 61 20 44 45 4c 45 54 45 20 6f  ex in a DELETE o
20df0 70 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63 68  p */../*. * Each
20e00 20 74 72 69 67 67 65 72 20 70 72 65 73 65 6e 74   trigger present
20e10 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
20e20 20 73 63 68 65 6d 61 20 69 73 20 73 74 6f 72 65   schema is store
20e30 64 20 61 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  d as an instance
20e40 20 6f 66 0a 20 2a 20 73 74 72 75 63 74 20 54 72   of. * struct Tr
20e50 69 67 67 65 72 2e 0a 20 2a 0a 20 2a 20 50 6f 69  igger.. *. * Poi
20e60 6e 74 65 72 73 20 74 6f 20 69 6e 73 74 61 6e 63  nters to instanc
20e70 65 73 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  es of struct Tri
20e80 67 67 65 72 20 61 72 65 20 73 74 6f 72 65 64 20  gger are stored 
20e90 69 6e 20 74 77 6f 20 77 61 79 73 2e 0a 20 2a 20  in two ways.. * 
20ea0 31 2e 20 49 6e 20 74 68 65 20 22 74 72 69 67 48  1. In the "trigH
20eb0 61 73 68 22 20 68 61 73 68 20 74 61 62 6c 65 20  ash" hash table 
20ec0 28 70 61 72 74 20 6f 66 20 74 68 65 20 73 71 6c  (part of the sql
20ed0 69 74 65 33 2a 20 74 68 61 74 20 72 65 70 72 65  ite3* that repre
20ee0 73 65 6e 74 73 20 74 68 65 0a 20 2a 20 20 20 20  sents the. *    
20ef0 64 61 74 61 62 61 73 65 29 2e 20 54 68 69 73 20  database). This 
20f00 61 6c 6c 6f 77 73 20 54 72 69 67 67 65 72 20 73  allows Trigger s
20f10 74 72 75 63 74 75 72 65 73 20 74 6f 20 62 65 20  tructures to be 
20f20 72 65 74 72 69 65 76 65 64 20 62 79 20 6e 61 6d  retrieved by nam
20f30 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20 74 72 69  e.. * 2. All tri
20f40 67 67 65 72 73 20 61 73 73 6f 63 69 61 74 65 64  ggers associated
20f50 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20 74   with a single t
20f60 61 62 6c 65 20 66 6f 72 6d 20 61 20 6c 69 6e 6b  able form a link
20f70 65 64 20 6c 69 73 74 2c 20 75 73 69 6e 67 20 74  ed list, using t
20f80 68 65 0a 20 2a 20 20 20 20 70 4e 65 78 74 20 6d  he. *    pNext m
20f90 65 6d 62 65 72 20 6f 66 20 73 74 72 75 63 74 20  ember of struct 
20fa0 54 72 69 67 67 65 72 2e 20 41 20 70 6f 69 6e 74  Trigger. A point
20fb0 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  er to the first 
20fc0 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 0a 20  element of the. 
20fd0 2a 20 20 20 20 6c 69 6e 6b 65 64 20 6c 69 73 74  *    linked list
20fe0 20 69 73 20 73 74 6f 72 65 64 20 61 73 20 74 68   is stored as th
20ff0 65 20 22 70 54 72 69 67 67 65 72 22 20 6d 65 6d  e "pTrigger" mem
21000 62 65 72 20 6f 66 20 74 68 65 20 61 73 73 6f 63  ber of the assoc
21010 69 61 74 65 64 0a 20 2a 20 20 20 20 73 74 72 75  iated. *    stru
21020 63 74 20 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a 20  ct Table.. *. * 
21030 54 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20  The "step_list" 
21040 6d 65 6d 62 65 72 20 70 6f 69 6e 74 73 20 74 6f  member points to
21050 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65   the first eleme
21060 6e 74 20 6f 66 20 61 20 6c 69 6e 6b 65 64 20 6c  nt of a linked l
21070 69 73 74 0a 20 2a 20 63 6f 6e 74 61 69 6e 69 6e  ist. * containin
21080 67 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d  g the SQL statem
21090 65 6e 74 73 20 73 70 65 63 69 66 69 65 64 20 61  ents specified a
210a0 73 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72  s the trigger pr
210b0 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75 63  ogram.. */.struc
210c0 74 20 54 72 69 67 67 65 72 20 7b 0a 20 20 63 68  t Trigger {.  ch
210d0 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
210e0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 61 6d        /* The nam
210f0 65 20 6f 66 20 74 68 65 20 74 72 69 67 67 65 72  e of the trigger
21100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21110 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 63 68 61          */.  cha
21120 72 20 2a 74 61 62 6c 65 3b 20 20 20 20 20 20 20  r *table;       
21130 20 20 20 20 20 2f 2a 20 54 68 65 20 74 61 62 6c       /* The tabl
21140 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77 68 69  e or view to whi
21150 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20 61  ch the trigger a
21160 70 70 6c 69 65 73 20 2a 2f 0a 20 20 75 38 20 6f  pplies */.  u8 o
21170 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
21180 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b      /* One of TK
21190 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41  _DELETE, TK_UPDA
211a0 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 20 20  TE, TK_INSERT   
211b0 20 20 20 20 20 20 2a 2f 0a 20 20 75 38 20 74 72        */.  u8 tr
211c0 5f 74 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  _tm;            
211d0 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 52 49     /* One of TRI
211e0 47 47 45 52 5f 42 45 46 4f 52 45 2c 20 54 52 49  GGER_BEFORE, TRI
211f0 47 47 45 52 5f 41 46 54 45 52 20 2a 2f 0a 20 20  GGER_AFTER */.  
21200 45 78 70 72 20 2a 70 57 68 65 6e 3b 20 20 20 20  Expr *pWhen;    
21210 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57          /* The W
21220 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 68  HEN clause of th
21230 65 20 65 78 70 72 65 73 73 69 6f 6e 20 28 6d 61  e expression (ma
21240 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20  y be NULL) */.  
21250 49 64 4c 69 73 74 20 2a 70 43 6f 6c 75 6d 6e 73  IdList *pColumns
21260 3b 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68  ;       /* If th
21270 69 73 20 69 73 20 61 6e 20 55 50 44 41 54 45 20  is is an UPDATE 
21280 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e  OF <column-list>
21290 20 74 72 69 67 67 65 72 2c 0a 20 20 20 20 20 20   trigger,.      
212a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
212b0 20 20 20 20 20 20 20 74 68 65 20 3c 63 6f 6c 75         the <colu
212c0 6d 6e 2d 6c 69 73 74 3e 20 69 73 20 73 74 6f 72  mn-list> is stor
212d0 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 53 63 68  ed here */.  Sch
212e0 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
212f0 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63       /* Schema c
21300 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 72  ontaining the tr
21310 69 67 67 65 72 20 2a 2f 0a 20 20 53 63 68 65 6d  igger */.  Schem
21320 61 20 2a 70 54 61 62 53 63 68 65 6d 61 3b 20 20  a *pTabSchema;  
21330 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e     /* Schema con
21340 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61 62 6c  taining the tabl
21350 65 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74  e */.  TriggerSt
21360 65 70 20 2a 73 74 65 70 5f 6c 69 73 74 3b 20 2f  ep *step_list; /
21370 2a 20 4c 69 6e 6b 20 6c 69 73 74 20 6f 66 20 74  * Link list of t
21380 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20 73  rigger program s
21390 74 65 70 73 20 20 20 20 20 20 20 20 20 20 20 20  teps            
213a0 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70   */.  Trigger *p
213b0 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  Next;         /*
213c0 20 4e 65 78 74 20 74 72 69 67 67 65 72 20 61 73   Next trigger as
213d0 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
213e0 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f  e table */.};../
213f0 2a 0a 2a 2a 20 41 20 74 72 69 67 67 65 72 20 69  *.** A trigger i
21400 73 20 65 69 74 68 65 72 20 61 20 42 45 46 4f 52  s either a BEFOR
21410 45 20 6f 72 20 61 6e 20 41 46 54 45 52 20 74 72  E or an AFTER tr
21420 69 67 67 65 72 2e 20 20 54 68 65 20 66 6f 6c 6c  igger.  The foll
21430 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e 74 73 0a  owing constants.
21440 2a 2a 20 64 65 74 65 72 6d 69 6e 65 20 77 68 69  ** determine whi
21450 63 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ch..**.** If the
21460 72 65 20 61 72 65 20 6d 75 6c 74 69 70 6c 65 20  re are multiple 
21470 74 72 69 67 67 65 72 73 2c 20 79 6f 75 20 6d 69  triggers, you mi
21480 67 68 74 20 6f 66 20 73 6f 6d 65 20 42 45 46 4f  ght of some BEFO
21490 52 45 20 61 6e 64 20 73 6f 6d 65 20 41 46 54 45  RE and some AFTE
214a0 52 2e 0a 2a 2a 20 49 6e 20 74 68 61 74 20 63 61  R..** In that ca
214b0 73 65 73 2c 20 74 68 65 20 63 6f 6e 73 74 61 6e  ses, the constan
214c0 74 73 20 62 65 6c 6f 77 20 63 61 6e 20 62 65 20  ts below can be 
214d0 4f 52 65 64 20 74 6f 67 65 74 68 65 72 2e 0a 2a  ORed together..*
214e0 2f 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47 45  /.#define TRIGGE
214f0 52 5f 42 45 46 4f 52 45 20 20 31 0a 23 64 65 66  R_BEFORE  1.#def
21500 69 6e 65 20 54 52 49 47 47 45 52 5f 41 46 54 45  ine TRIGGER_AFTE
21510 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20 41 6e 20  R   2../*. * An 
21520 69 6e 73 74 61 6e 63 65 20 6f 66 20 73 74 72 75  instance of stru
21530 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20 69  ct TriggerStep i
21540 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  s used to store 
21550 61 20 73 69 6e 67 6c 65 20 53 51 4c 20 73 74 61  a single SQL sta
21560 74 65 6d 65 6e 74 0a 20 2a 20 74 68 61 74 20 69  tement. * that i
21570 73 20 61 20 70 61 72 74 20 6f 66 20 61 20 74 72  s a part of a tr
21580 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20  igger-program.. 
21590 2a 0a 20 2a 20 49 6e 73 74 61 6e 63 65 73 20 6f  *. * Instances o
215a0 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
215b0 53 74 65 70 20 61 72 65 20 73 74 6f 72 65 64 20  Step are stored 
215c0 69 6e 20 61 20 73 69 6e 67 6c 79 20 6c 69 6e 6b  in a singly link
215d0 65 64 20 6c 69 73 74 20 28 6c 69 6e 6b 65 64 0a  ed list (linked.
215e0 20 2a 20 75 73 69 6e 67 20 74 68 65 20 22 70 4e   * using the "pN
215f0 65 78 74 22 20 6d 65 6d 62 65 72 29 20 72 65 66  ext" member) ref
21600 65 72 65 6e 63 65 64 20 62 79 20 74 68 65 20 22  erenced by the "
21610 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65  step_list" membe
21620 72 20 6f 66 20 74 68 65 0a 20 2a 20 61 73 73 6f  r of the. * asso
21630 63 69 61 74 65 64 20 73 74 72 75 63 74 20 54 72  ciated struct Tr
21640 69 67 67 65 72 20 69 6e 73 74 61 6e 63 65 2e 20  igger instance. 
21650 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e  The first elemen
21660 74 20 6f 66 20 74 68 65 20 6c 69 6e 6b 65 64 20  t of the linked 
21670 6c 69 73 74 20 69 73 0a 20 2a 20 74 68 65 20 66  list is. * the f
21680 69 72 73 74 20 73 74 65 70 20 6f 66 20 74 68 65  irst step of the
21690 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d   trigger-program
216a0 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 6f 70 22  .. *. * The "op"
216b0 20 6d 65 6d 62 65 72 20 69 6e 64 69 63 61 74 65   member indicate
216c0 73 20 77 68 65 74 68 65 72 20 74 68 69 73 20 69  s whether this i
216d0 73 20 61 20 22 44 45 4c 45 54 45 22 2c 20 22 49  s a "DELETE", "I
216e0 4e 53 45 52 54 22 2c 20 22 55 50 44 41 54 45 22  NSERT", "UPDATE"
216f0 20 6f 72 0a 20 2a 20 22 53 45 4c 45 43 54 22 20   or. * "SELECT" 
21700 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 65 20 6d  statement. The m
21710 65 61 6e 69 6e 67 73 20 6f 66 20 74 68 65 20 6f  eanings of the o
21720 74 68 65 72 20 6d 65 6d 62 65 72 73 20 69 73 20  ther members is 
21730 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
21740 65 0a 20 2a 20 76 61 6c 75 65 20 6f 66 20 22 6f  e. * value of "o
21750 70 22 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20  p" as follows:. 
21760 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 49  *. * (op == TK_I
21770 4e 53 45 52 54 29 0a 20 2a 20 6f 72 63 6f 6e 66  NSERT). * orconf
21780 20 20 20 20 2d 3e 20 73 74 6f 72 65 73 20 74 68      -> stores th
21790 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c  e ON CONFLICT al
217a0 67 6f 72 69 74 68 6d 0a 20 2a 20 70 53 65 6c 65  gorithm. * pSele
217b0 63 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20  ct   -> If this 
217c0 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54  is an INSERT INT
217d0 4f 20 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e  O ... SELECT ...
217e0 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e   statement, then
217f0 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
21800 20 74 68 69 73 20 73 74 6f 72 65 73 20 61 20 70   this stores a p
21810 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 53 45  ointer to the SE
21820 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
21830 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a  Otherwise NULL..
21840 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20   * zTarget   -> 
21850 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66  Dequoted name of
21860 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 69 6e   the table to in
21870 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a 20 70 45  sert into.. * pE
21880 78 70 72 4c 69 73 74 20 2d 3e 20 49 66 20 74 68  xprList -> If th
21890 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20  is is an INSERT 
218a0 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55 45 53 20  INTO ... VALUES 
218b0 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74  ... statement, t
218c0 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  hen. *          
218d0 20 20 20 20 74 68 69 73 20 73 74 6f 72 65 73 20      this stores 
218e0 76 61 6c 75 65 73 20 74 6f 20 62 65 20 69 6e 73  values to be ins
218f0 65 72 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65  erted. Otherwise
21900 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69 73   NULL.. * pIdLis
21910 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69  t   -> If this i
21920 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f  s an INSERT INTO
21930 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e 61   ... (<column-na
21940 6d 65 73 3e 29 20 56 41 4c 55 45 53 20 2e 2e 2e  mes>) VALUES ...
21950 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
21960 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e   statement, then
21970 20 74 68 69 73 20 73 74 6f 72 65 73 20 74 68 65   this stores the
21980 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74 6f   column-names to
21990 20 62 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20   be. *          
219a0 20 20 20 20 69 6e 73 65 72 74 65 64 20 69 6e 74      inserted int
219b0 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20  o.. *. * (op == 
219c0 54 4b 5f 44 45 4c 45 54 45 29 0a 20 2a 20 7a 54  TK_DELETE). * zT
219d0 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f  arget   -> Dequo
219e0 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  ted name of the 
219f0 74 61 62 6c 65 20 74 6f 20 64 65 6c 65 74 65 20  table to delete 
21a00 66 72 6f 6d 2e 0a 20 2a 20 70 57 68 65 72 65 20  from.. * pWhere 
21a10 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20     -> The WHERE 
21a20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 44 45  clause of the DE
21a30 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69  LETE statement i
21a40 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69  f one is specifi
21a50 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  ed.. *          
21a60 20 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55      Otherwise NU
21a70 4c 4c 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d  LL.. *. * (op ==
21a80 20 54 4b 5f 55 50 44 41 54 45 29 0a 20 2a 20 7a   TK_UPDATE). * z
21a90 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75  Target   -> Dequ
21aa0 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65  oted name of the
21ab0 20 74 61 62 6c 65 20 74 6f 20 75 70 64 61 74 65   table to update
21ac0 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d  .. * pWhere    -
21ad0 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75  > The WHERE clau
21ae0 73 65 20 6f 66 20 74 68 65 20 55 50 44 41 54 45  se of the UPDATE
21af0 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e   statement if on
21b00 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a  e is specified..
21b10 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
21b20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a  Otherwise NULL..
21b30 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20   * pExprList -> 
21b40 41 20 6c 69 73 74 20 6f 66 20 74 68 65 20 63 6f  A list of the co
21b50 6c 75 6d 6e 73 20 74 6f 20 75 70 64 61 74 65 20  lumns to update 
21b60 61 6e 64 20 74 68 65 20 65 78 70 72 65 73 73 69  and the expressi
21b70 6f 6e 73 20 74 6f 20 75 70 64 61 74 65 0a 20 2a  ons to update. *
21b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
21b90 65 6d 20 74 6f 2e 20 53 65 65 20 73 71 6c 69 74  em to. See sqlit
21ba0 65 33 55 70 64 61 74 65 28 29 20 64 6f 63 75 6d  e3Update() docum
21bb0 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22 70 43 68  entation of "pCh
21bc0 61 6e 67 65 73 22 0a 20 2a 20 20 20 20 20 20 20  anges". *       
21bd0 20 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74 2e         argument.
21be0 0a 20 2a 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54  . *. */.struct T
21bf0 72 69 67 67 65 72 53 74 65 70 20 7b 0a 20 20 75  riggerStep {.  u
21c00 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  8 op;           
21c10 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b      /* One of TK
21c20 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41  _DELETE, TK_UPDA
21c30 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 2c 20 54  TE, TK_INSERT, T
21c40 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20 20 75 38  K_SELECT */.  u8
21c50 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20   orconf;        
21c60 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62 61 63     /* OE_Rollbac
21c70 6b 20 65 74 63 2e 20 2a 2f 0a 20 20 54 72 69 67  k etc. */.  Trig
21c80 67 65 72 20 2a 70 54 72 69 67 3b 20 20 20 20 20  ger *pTrig;     
21c90 20 2f 2a 20 54 68 65 20 74 72 69 67 67 65 72 20   /* The trigger 
21ca0 74 68 61 74 20 74 68 69 73 20 73 74 65 70 20 69  that this step i
21cb0 73 20 61 20 70 61 72 74 20 6f 66 20 2a 2f 0a 20  s a part of */. 
21cc0 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
21cd0 3b 20 20 20 20 20 2f 2a 20 53 45 4c 45 43 54 20  ;     /* SELECT 
21ce0 73 74 61 74 65 6d 65 6e 74 20 6f 72 20 52 48 53  statement or RHS
21cf0 20 6f 66 20 49 4e 53 45 52 54 20 49 4e 54 4f 20   of INSERT INTO 
21d00 53 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f 0a 20 20  SELECT ... */.  
21d10 63 68 61 72 20 2a 7a 54 61 72 67 65 74 3b 20 20  char *zTarget;  
21d20 20 20 20 20 20 2f 2a 20 54 61 72 67 65 74 20 74       /* Target t
21d30 61 62 6c 65 20 66 6f 72 20 44 45 4c 45 54 45 2c  able for DELETE,
21d40 20 55 50 44 41 54 45 2c 20 49 4e 53 45 52 54 20   UPDATE, INSERT 
21d50 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72  */.  Expr *pWher
21d60 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  e;        /* The
21d70 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f   WHERE clause fo
21d80 72 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41  r DELETE or UPDA
21d90 54 45 20 73 74 65 70 73 20 2a 2f 0a 20 20 45 78  TE steps */.  Ex
21da0 70 72 4c 69 73 74 20 2a 70 45 78 70 72 4c 69 73  prList *pExprLis
21db0 74 3b 20 2f 2a 20 53 45 54 20 63 6c 61 75 73 65  t; /* SET clause
21dc0 20 66 6f 72 20 55 50 44 41 54 45 2e 20 2a 2f 0a   for UPDATE. */.
21dd0 20 20 49 64 4c 69 73 74 20 2a 70 49 64 4c 69 73    IdList *pIdLis
21de0 74 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e  t;     /* Column
21df0 20 6e 61 6d 65 73 20 66 6f 72 20 49 4e 53 45 52   names for INSER
21e00 54 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74  T */.  TriggerSt
21e10 65 70 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e  ep *pNext;  /* N
21e20 65 78 74 20 69 6e 20 74 68 65 20 6c 69 6e 6b 2d  ext in the link-
21e30 6c 69 73 74 20 2a 2f 0a 20 20 54 72 69 67 67 65  list */.  Trigge
21e40 72 53 74 65 70 20 2a 70 4c 61 73 74 3b 20 20 2f  rStep *pLast;  /
21e50 2a 20 4c 61 73 74 20 65 6c 65 6d 65 6e 74 20 69  * Last element i
21e60 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20 56 61 6c  n link-list. Val
21e70 69 64 20 66 6f 72 20 31 73 74 20 65 6c 65 6d 20  id for 1st elem 
21e80 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  only */.};../*.*
21e90 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
21ea0 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  structure contai
21eb0 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 75  ns information u
21ec0 73 65 64 20 62 79 20 74 68 65 20 73 71 6c 69 74  sed by the sqlit
21ed0 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f 75 74 69  eFix....** routi
21ee0 6e 65 73 20 61 73 20 74 68 65 79 20 77 61 6c 6b  nes as they walk
21ef0 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20   the parse tree 
21f00 74 6f 20 6d 61 6b 65 20 64 61 74 61 62 61 73 65  to make database
21f10 20 72 65 66 65 72 65 6e 63 65 73 0a 2a 2a 20 65   references.** e
21f20 78 70 6c 69 63 69 74 2e 0a 2a 2f 0a 74 79 70 65  xplicit..*/.type
21f30 64 65 66 20 73 74 72 75 63 74 20 44 62 46 69 78  def struct DbFix
21f40 65 72 20 44 62 46 69 78 65 72 3b 0a 73 74 72 75  er DbFixer;.stru
21f50 63 74 20 44 62 46 69 78 65 72 20 7b 0a 20 20 50  ct DbFixer {.  P
21f60 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20  arse *pParse;   
21f70 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 69 6e     /* The parsin
21f80 67 20 63 6f 6e 74 65 78 74 2e 20 20 45 72 72 6f  g context.  Erro
21f90 72 20 6d 65 73 73 61 67 65 73 20 77 72 69 74 74  r messages writt
21fa0 65 6e 20 68 65 72 65 20 2a 2f 0a 20 20 53 63 68  en here */.  Sch
21fb0 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
21fc0 20 2f 2a 20 46 69 78 20 69 74 65 6d 73 20 74 6f   /* Fix items to
21fd0 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a 2f 0a   this schema */.
21fe0 20 20 69 6e 74 20 62 56 61 72 4f 6e 6c 79 3b 20    int bVarOnly; 
21ff0 20 20 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 66        /* Check f
22000 6f 72 20 76 61 72 69 61 62 6c 65 20 72 65 66 65  or variable refe
22010 72 65 6e 63 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20  rences only */. 
22020 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
22030 3b 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72  ;    /* Make sur
22040 65 20 61 6c 6c 20 6f 62 6a 65 63 74 73 20 61 72  e all objects ar
22050 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74  e contained in t
22060 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a  his database */.
22070 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54    const char *zT
22080 79 70 65 3b 20 20 2f 2a 20 54 79 70 65 20 6f 66  ype;  /* Type of
22090 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d   the container -
220a0 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20   used for error 
220b0 6d 65 73 73 61 67 65 73 20 2a 2f 0a 20 20 63 6f  messages */.  co
220c0 6e 73 74 20 54 6f 6b 65 6e 20 2a 70 4e 61 6d 65  nst Token *pName
220d0 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65  ; /* Name of the
220e0 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65   container - use
220f0 64 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73  d for error mess
22100 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ages */.};../*.*
22110 2a 20 41 6e 20 6f 62 6a 65 63 74 65 64 20 75 73  * An objected us
22120 65 64 20 74 6f 20 61 63 63 75 6d 75 6c 61 74 65  ed to accumulate
22130 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 20 73   the text of a s
22140 74 72 69 6e 67 20 77 68 65 72 65 20 77 65 0a 2a  tring where we.*
22150 2a 20 64 6f 20 6e 6f 74 20 6e 65 63 65 73 73 61  * do not necessa
22160 72 69 6c 79 20 6b 6e 6f 77 20 68 6f 77 20 62 69  rily know how bi
22170 67 20 74 68 65 20 73 74 72 69 6e 67 20 77 69 6c  g the string wil
22180 6c 20 62 65 20 69 6e 20 74 68 65 20 65 6e 64 2e  l be in the end.
22190 0a 2a 2f 0a 73 74 72 75 63 74 20 53 74 72 41 63  .*/.struct StrAc
221a0 63 75 6d 20 7b 0a 20 20 73 71 6c 69 74 65 33 20  cum {.  sqlite3 
221b0 2a 64 62 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  *db;         /* 
221c0 4f 70 74 69 6f 6e 61 6c 20 64 61 74 61 62 61 73  Optional databas
221d0 65 20 66 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 2e  e for lookaside.
221e0 20 20 43 61 6e 20 62 65 20 4e 55 4c 4c 20 2a 2f    Can be NULL */
221f0 0a 20 20 63 68 61 72 20 2a 7a 42 61 73 65 3b 20  .  char *zBase; 
22200 20 20 20 20 20 20 20 20 2f 2a 20 41 20 62 61 73          /* A bas
22210 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e  e allocation.  N
22220 6f 74 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 2e 20  ot from malloc. 
22230 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 65 78 74  */.  char *zText
22240 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
22250 20 73 74 72 69 6e 67 20 63 6f 6c 6c 65 63 74 65   string collecte
22260 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75 33  d so far */.  u3
22270 32 20 20 6e 43 68 61 72 3b 20 20 20 20 20 20 20  2  nChar;       
22280 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20     /* Length of 
22290 74 68 65 20 73 74 72 69 6e 67 20 73 6f 20 66 61  the string so fa
222a0 72 20 2a 2f 0a 20 20 75 33 32 20 20 6e 41 6c 6c  r */.  u32  nAll
222b0 6f 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  oc;         /* A
222c0 6d 6f 75 6e 74 20 6f 66 20 73 70 61 63 65 20 61  mount of space a
222d0 6c 6c 6f 63 61 74 65 64 20 69 6e 20 7a 54 65 78  llocated in zTex
222e0 74 20 2a 2f 0a 20 20 75 33 32 20 20 6d 78 41 6c  t */.  u32  mxAl
222f0 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d  loc;        /* M
22300 61 78 69 6d 75 6d 20 61 6c 6c 6f 77 65 64 20 61  aximum allowed a
22310 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 30 20 66 6f  llocation.  0 fo
22320 72 20 6e 6f 20 6d 61 6c 6c 6f 63 20 75 73 61 67  r no malloc usag
22330 65 20 2a 2f 0a 20 20 75 38 20 20 20 61 63 63 45  e */.  u8   accE
22340 72 72 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 53  rror;       /* S
22350 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20 6f 72  TRACCUM_NOMEM or
22360 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42 49 47   STRACCUM_TOOBIG
22370 20 2a 2f 0a 20 20 75 38 20 20 20 70 72 69 6e 74   */.  u8   print
22380 66 46 6c 61 67 73 3b 20 20 20 20 2f 2a 20 53 51  fFlags;    /* SQ
22390 4c 49 54 45 5f 50 52 49 4e 54 46 20 66 6c 61 67  LITE_PRINTF flag
223a0 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 23 64  s below */.};.#d
223b0 65 66 69 6e 65 20 53 54 52 41 43 43 55 4d 5f 4e  efine STRACCUM_N
223c0 4f 4d 45 4d 20 20 20 31 0a 23 64 65 66 69 6e 65  OMEM   1.#define
223d0 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42 49 47   STRACCUM_TOOBIG
223e0 20 20 32 0a 23 64 65 66 69 6e 65 20 53 51 4c 49    2.#define SQLI
223f0 54 45 5f 50 52 49 4e 54 46 5f 49 4e 54 45 52 4e  TE_PRINTF_INTERN
22400 41 4c 20 30 78 30 31 20 20 2f 2a 20 49 6e 74 65  AL 0x01  /* Inte
22410 72 6e 61 6c 2d 75 73 65 2d 6f 6e 6c 79 20 63 6f  rnal-use-only co
22420 6e 76 65 72 74 65 72 73 20 61 6c 6c 6f 77 65 64  nverters allowed
22430 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
22440 54 45 5f 50 52 49 4e 54 46 5f 53 51 4c 46 55 4e  TE_PRINTF_SQLFUN
22450 43 20 20 30 78 30 32 20 20 2f 2a 20 53 51 4c 20  C  0x02  /* SQL 
22460 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e  function argumen
22470 74 73 20 74 6f 20 56 58 50 72 69 6e 74 66 20 2a  ts to VXPrintf *
22480 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
22490 5f 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43 45 44  _PRINTF_MALLOCED
224a0 20 30 78 30 34 20 20 2f 2a 20 54 72 75 65 20 69   0x04  /* True i
224b0 66 20 78 54 65 78 74 20 69 73 20 61 6c 6c 6f 63  f xText is alloc
224c0 61 74 65 64 20 73 70 61 63 65 20 2a 2f 0a 0a 23  ated space */..#
224d0 64 65 66 69 6e 65 20 69 73 4d 61 6c 6c 6f 63 65  define isMalloce
224e0 64 28 58 29 20 20 28 28 28 58 29 2d 3e 70 72 69  d(X)  (((X)->pri
224f0 6e 74 66 46 6c 61 67 73 20 26 20 53 51 4c 49 54  ntfFlags & SQLIT
22500 45 5f 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43 45  E_PRINTF_MALLOCE
22510 44 29 21 3d 30 29 0a 0a 0a 2f 2a 0a 2a 2a 20 41  D)!=0).../*.** A
22520 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73   pointer to this
22530 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73   structure is us
22540 65 64 20 74 6f 20 63 6f 6d 6d 75 6e 69 63 61 74  ed to communicat
22550 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a  e information.**
22560 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 49 6e 69   from sqlite3Ini
22570 74 20 61 6e 64 20 4f 50 5f 50 61 72 73 65 53 63  t and OP_ParseSc
22580 68 65 6d 61 20 69 6e 74 6f 20 74 68 65 20 73 71  hema into the sq
22590 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63  lite3InitCallbac
225a0 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74  k..*/.typedef st
225b0 72 75 63 74 20 7b 0a 20 20 73 71 6c 69 74 65 33  ruct {.  sqlite3
225c0 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20   *db;        /* 
225d0 54 68 65 20 64 61 74 61 62 61 73 65 20 62 65 69  The database bei
225e0 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  ng initialized *
225f0 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72 72  /.  char **pzErr
22600 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72 72 6f 72  Msg;    /* Error
22610 20 6d 65 73 73 61 67 65 20 73 74 6f 72 65 64 20   message stored 
22620 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20 69 44  here */.  int iD
22630 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  b;            /*
22640 20 30 20 66 6f 72 20 6d 61 69 6e 20 64 61 74 61   0 for main data
22650 62 61 73 65 2e 20 20 31 20 66 6f 72 20 54 45 4d  base.  1 for TEM
22660 50 2c 20 32 2e 2e 20 66 6f 72 20 41 54 54 41 43  P, 2.. for ATTAC
22670 48 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b  Hed */.  int rc;
22680 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
22690 52 65 73 75 6c 74 20 63 6f 64 65 20 73 74 6f 72  Result code stor
226a0 65 64 20 68 65 72 65 20 2a 2f 0a 7d 20 49 6e 69  ed here */.} Ini
226b0 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20 53 74  tData;../*.** St
226c0 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 69  ructure containi
226d0 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e 66 69 67  ng global config
226e0 75 72 61 74 69 6f 6e 20 64 61 74 61 20 66 6f 72  uration data for
226f0 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72   the SQLite libr
22700 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ary..**.** This 
22710 73 74 72 75 63 74 75 72 65 20 61 6c 73 6f 20 63  structure also c
22720 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20 73 74 61  ontains some sta
22730 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  te information..
22740 2a 2f 0a 73 74 72 75 63 74 20 53 71 6c 69 74 65  */.struct Sqlite
22750 33 43 6f 6e 66 69 67 20 7b 0a 20 20 69 6e 74 20  3Config {.  int 
22760 62 4d 65 6d 73 74 61 74 3b 20 20 20 20 20 20 20  bMemstat;       
22770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
22780 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20   True to enable 
22790 6d 65 6d 6f 72 79 20 73 74 61 74 75 73 20 2a 2f  memory status */
227a0 0a 20 20 69 6e 74 20 62 43 6f 72 65 4d 75 74 65  .  int bCoreMute
227b0 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  x;              
227c0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
227d0 65 6e 61 62 6c 65 20 63 6f 72 65 20 6d 75 74 65  enable core mute
227e0 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62 46  xing */.  int bF
227f0 75 6c 6c 4d 75 74 65 78 3b 20 20 20 20 20 20 20  ullMutex;       
22800 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
22810 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 66 75  rue to enable fu
22820 6c 6c 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20  ll mutexing */. 
22830 20 69 6e 74 20 62 4f 70 65 6e 55 72 69 3b 20 20   int bOpenUri;  
22840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22850 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 69 6e     /* True to in
22860 74 65 72 70 72 65 74 20 66 69 6c 65 6e 61 6d 65  terpret filename
22870 73 20 61 73 20 55 52 49 73 20 2a 2f 0a 20 20 69  s as URIs */.  i
22880 6e 74 20 62 55 73 65 43 69 73 3b 20 20 20 20 20  nt bUseCis;     
22890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
228a0 20 2f 2a 20 55 73 65 20 63 6f 76 65 72 69 6e 67   /* Use covering
228b0 20 69 6e 64 69 63 65 73 20 66 6f 72 20 66 75 6c   indices for ful
228c0 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20 20 69 6e 74  l-scans */.  int
228d0 20 6d 78 53 74 72 6c 65 6e 3b 20 20 20 20 20 20   mxStrlen;      
228e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
228f0 2a 20 4d 61 78 69 6d 75 6d 20 73 74 72 69 6e 67  * Maximum string
22900 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 69 6e 74   length */.  int
22910 20 6e 65 76 65 72 43 6f 72 72 75 70 74 3b 20 20   neverCorrupt;  
22920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22930 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 61 6c  * Database is al
22940 77 61 79 73 20 77 65 6c 6c 2d 66 6f 72 6d 65 64  ways well-formed
22950 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4c 6f 6f 6b   */.  int szLook
22960 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20  aside;          
22970 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
22980 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66  lt lookaside buf
22990 66 65 72 20 73 69 7a 65 20 2a 2f 0a 20 20 69 6e  fer size */.  in
229a0 74 20 6e 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20  t nLookaside;   
229b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
229c0 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61  /* Default looka
229d0 73 69 64 65 20 62 75 66 66 65 72 20 63 6f 75 6e  side buffer coun
229e0 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 6d 74  t */.  int nStmt
229f0 53 70 69 6c 6c 3b 20 20 20 20 20 20 20 20 20 20  Spill;          
22a00 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 6d 74           /* Stmt
22a10 2d 6a 6f 75 72 6e 61 6c 20 73 70 69 6c 6c 2d 74  -journal spill-t
22a20 6f 2d 64 69 73 6b 20 74 68 72 65 73 68 6f 6c 64  o-disk threshold
22a30 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 65   */.  sqlite3_me
22a40 6d 5f 6d 65 74 68 6f 64 73 20 6d 3b 20 20 20 20  m_methods m;    
22a50 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c          /* Low-l
22a60 65 76 65 6c 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  evel memory allo
22a70 63 61 74 69 6f 6e 20 69 6e 74 65 72 66 61 63 65  cation interface
22a80 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75   */.  sqlite3_mu
22a90 74 65 78 5f 6d 65 74 68 6f 64 73 20 6d 75 74 65  tex_methods mute
22aa0 78 3b 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c  x;      /* Low-l
22ab0 65 76 65 6c 20 6d 75 74 65 78 20 69 6e 74 65 72  evel mutex inter
22ac0 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65  face */.  sqlite
22ad0 33 5f 70 63 61 63 68 65 5f 6d 65 74 68 6f 64 73  3_pcache_methods
22ae0 32 20 70 63 61 63 68 65 32 3b 20 20 2f 2a 20 4c  2 pcache2;  /* L
22af0 6f 77 2d 6c 65 76 65 6c 20 70 61 67 65 2d 63 61  ow-level page-ca
22b00 63 68 65 20 69 6e 74 65 72 66 61 63 65 20 2a 2f  che interface */
22b10 0a 20 20 76 6f 69 64 20 2a 70 48 65 61 70 3b 20  .  void *pHeap; 
22b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b30 20 20 20 20 20 2f 2a 20 48 65 61 70 20 73 74 6f       /* Heap sto
22b40 72 61 67 65 20 73 70 61 63 65 20 2a 2f 0a 20 20  rage space */.  
22b50 69 6e 74 20 6e 48 65 61 70 3b 20 20 20 20 20 20  int nHeap;      
22b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b70 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 70 48 65    /* Size of pHe
22b80 61 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e  ap[] */.  int mn
22b90 52 65 71 2c 20 6d 78 52 65 71 3b 20 20 20 20 20  Req, mxReq;     
22ba0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
22bb0 69 6e 20 61 6e 64 20 6d 61 78 20 68 65 61 70 20  in and max heap 
22bc0 72 65 71 75 65 73 74 73 20 73 69 7a 65 73 20 2a  requests sizes *
22bd0 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36  /.  sqlite3_int6
22be0 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20  4 szMmap;       
22bf0 20 20 20 20 20 20 2f 2a 20 6d 6d 61 70 28 29 20        /* mmap() 
22c00 73 70 61 63 65 20 70 65 72 20 6f 70 65 6e 20 66  space per open f
22c10 69 6c 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ile */.  sqlite3
22c20 5f 69 6e 74 36 34 20 6d 78 4d 6d 61 70 3b 20 20  _int64 mxMmap;  
22c30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
22c40 78 69 6d 75 6d 20 76 61 6c 75 65 20 66 6f 72 20  ximum value for 
22c50 73 7a 4d 6d 61 70 20 2a 2f 0a 20 20 76 6f 69 64  szMmap */.  void
22c60 20 2a 70 53 63 72 61 74 63 68 3b 20 20 20 20 20   *pScratch;     
22c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
22c80 20 53 63 72 61 74 63 68 20 6d 65 6d 6f 72 79 20   Scratch memory 
22c90 2a 2f 0a 20 20 69 6e 74 20 73 7a 53 63 72 61 74  */.  int szScrat
22ca0 63 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ch;             
22cb0 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
22cc0 66 20 65 61 63 68 20 73 63 72 61 74 63 68 20 62  f each scratch b
22cd0 75 66 66 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  uffer */.  int n
22ce0 53 63 72 61 74 63 68 3b 20 20 20 20 20 20 20 20  Scratch;        
22cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
22d00 4e 75 6d 62 65 72 20 6f 66 20 73 63 72 61 74 63  Number of scratc
22d10 68 20 62 75 66 66 65 72 73 20 2a 2f 0a 20 20 76  h buffers */.  v
22d20 6f 69 64 20 2a 70 50 61 67 65 3b 20 20 20 20 20  oid *pPage;     
22d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d40 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20 6d   /* Page cache m
22d50 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73  emory */.  int s
22d60 7a 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20  zPage;          
22d70 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
22d80 53 69 7a 65 20 6f 66 20 65 61 63 68 20 70 61 67  Size of each pag
22d90 65 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a  e in pPage[] */.
22da0 20 20 69 6e 74 20 6e 50 61 67 65 3b 20 20 20 20    int nPage;    
22db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22dc0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
22dd0 20 70 61 67 65 73 20 69 6e 20 70 50 61 67 65 5b   pages in pPage[
22de0 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 50 61 72  ] */.  int mxPar
22df0 73 65 72 53 74 61 63 6b 3b 20 20 20 20 20 20 20  serStack;       
22e00 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 61 78 69           /* maxi
22e10 6d 75 6d 20 64 65 70 74 68 20 6f 66 20 74 68 65  mum depth of the
22e20 20 70 61 72 73 65 72 20 73 74 61 63 6b 20 2a 2f   parser stack */
22e30 0a 20 20 69 6e 74 20 73 68 61 72 65 64 43 61 63  .  int sharedCac
22e40 68 65 45 6e 61 62 6c 65 64 3b 20 20 20 20 20 20  heEnabled;      
22e50 20 20 20 20 20 2f 2a 20 74 72 75 65 20 69 66 20       /* true if 
22e60 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64  shared-cache mod
22e70 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20 20 75  e enabled */.  u
22e80 33 32 20 73 7a 50 6d 61 3b 20 20 20 20 20 20 20  32 szPma;       
22e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ea0 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 53 6f 72 74   /* Maximum Sort
22eb0 65 72 20 50 4d 41 20 73 69 7a 65 20 2a 2f 0a 20  er PMA size */. 
22ec0 20 2f 2a 20 54 68 65 20 61 62 6f 76 65 20 6d 69   /* The above mi
22ed0 67 68 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a  ght be initializ
22ee0 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 20  ed to non-zero. 
22ef0 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e   The following n
22f00 65 65 64 20 74 6f 20 61 6c 77 61 79 73 0a 20 20  eed to always.  
22f10 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 62 65 20  ** initially be 
22f20 7a 65 72 6f 2c 20 68 6f 77 65 76 65 72 2e 20 2a  zero, however. *
22f30 2f 0a 20 20 69 6e 74 20 69 73 49 6e 69 74 3b 20  /.  int isInit; 
22f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f50 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66        /* True af
22f60 74 65 72 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ter initializati
22f70 6f 6e 20 68 61 73 20 66 69 6e 69 73 68 65 64 20  on has finished 
22f80 2a 2f 0a 20 20 69 6e 74 20 69 6e 50 72 6f 67 72  */.  int inProgr
22f90 65 73 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ess;            
22fa0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 77         /* True w
22fb0 68 69 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74  hile initializat
22fc0 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20  ion in progress 
22fd0 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 75 74 65 78  */.  int isMutex
22fe0 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  Init;           
22ff0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61         /* True a
23000 66 74 65 72 20 6d 75 74 65 78 65 73 20 61 72 65  fter mutexes are
23010 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
23020 20 20 69 6e 74 20 69 73 4d 61 6c 6c 6f 63 49 6e    int isMallocIn
23030 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
23040 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65      /* True afte
23050 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74  r malloc is init
23060 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74  ialized */.  int
23070 20 69 73 50 43 61 63 68 65 49 6e 69 74 3b 20 20   isPCacheInit;  
23080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
23090 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c  * True after mal
230a0 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a  loc is initializ
230b0 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66  ed */.  int nRef
230c0 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20  InitMutex;      
230d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
230e0 62 65 72 20 6f 66 20 75 73 65 72 73 20 6f 66 20  ber of users of 
230f0 70 49 6e 69 74 4d 75 74 65 78 20 2a 2f 0a 20 20  pInitMutex */.  
23100 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 70  sqlite3_mutex *p
23110 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20  InitMutex;      
23120 20 20 2f 2a 20 4d 75 74 65 78 20 75 73 65 64 20    /* Mutex used 
23130 62 79 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69  by sqlite3_initi
23140 61 6c 69 7a 65 28 29 20 2a 2f 0a 20 20 76 6f 69  alize() */.  voi
23150 64 20 28 2a 78 4c 6f 67 29 28 76 6f 69 64 2a 2c  d (*xLog)(void*,
23160 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
23170 3b 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 66 6f  ; /* Function fo
23180 72 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20 20 76  r logging */.  v
23190 6f 69 64 20 2a 70 4c 6f 67 41 72 67 3b 20 20 20  oid *pLogArg;   
231a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
231b0 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67      /* First arg
231c0 75 6d 65 6e 74 20 74 6f 20 78 4c 6f 67 28 29 20  ument to xLog() 
231d0 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
231e0 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a 20  _ENABLE_SQLLOG. 
231f0 20 76 6f 69 64 28 2a 78 53 71 6c 6c 6f 67 29 28   void(*xSqllog)(
23200 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63  void*,sqlite3*,c
23210 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29  onst char*, int)
23220 3b 0a 20 20 76 6f 69 64 20 2a 70 53 71 6c 6c 6f  ;.  void *pSqllo
23230 67 41 72 67 3b 0a 23 65 6e 64 69 66 0a 23 69 66  gArg;.#endif.#if
23240 64 65 66 20 53 51 4c 49 54 45 5f 56 44 42 45 5f  def SQLITE_VDBE_
23250 43 4f 56 45 52 41 47 45 0a 20 20 2f 2a 20 54 68  COVERAGE.  /* Th
23260 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c  e following call
23270 62 61 63 6b 20 28 69 66 20 6e 6f 74 20 4e 55 4c  back (if not NUL
23280 4c 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 6f 6e  L) is invoked on
23290 20 65 76 65 72 79 20 56 44 42 45 20 62 72 61 6e   every VDBE bran
232a0 63 68 0a 20 20 2a 2a 20 6f 70 65 72 61 74 69 6f  ch.  ** operatio
232b0 6e 2e 20 20 53 65 74 20 74 68 65 20 63 61 6c 6c  n.  Set the call
232c0 62 61 63 6b 20 75 73 69 6e 67 20 53 51 4c 49 54  back using SQLIT
232d0 45 5f 54 45 53 54 43 54 52 4c 5f 56 44 42 45 5f  E_TESTCTRL_VDBE_
232e0 43 4f 56 45 52 41 47 45 2e 0a 20 20 2a 2f 0a 20  COVERAGE..  */. 
232f0 20 76 6f 69 64 20 28 2a 78 56 64 62 65 42 72 61   void (*xVdbeBra
23300 6e 63 68 29 28 76 6f 69 64 2a 2c 69 6e 74 20 69  nch)(void*,int i
23310 53 72 63 4c 69 6e 65 2c 75 38 20 65 54 68 69 73  SrcLine,u8 eThis
23320 2c 75 38 20 65 4d 78 29 3b 20 20 2f 2a 20 43 61  ,u8 eMx);  /* Ca
23330 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64  llback */.  void
23340 20 2a 70 56 64 62 65 42 72 61 6e 63 68 41 72 67   *pVdbeBranchArg
23350 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
23360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23370 20 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67        /* 1st arg
23380 75 6d 65 6e 74 20 2a 2f 0a 23 65 6e 64 69 66 0a  ument */.#endif.
23390 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55  #ifndef SQLITE_U
233a0 4e 54 45 53 54 41 42 4c 45 0a 20 20 69 6e 74 20  NTESTABLE.  int 
233b0 28 2a 78 54 65 73 74 43 61 6c 6c 62 61 63 6b 29  (*xTestCallback)
233c0 28 69 6e 74 29 3b 20 20 20 20 20 20 20 20 2f 2a  (int);        /*
233d0 20 49 6e 76 6f 6b 65 64 20 62 79 20 73 71 6c 69   Invoked by sqli
233e0 74 65 33 46 61 75 6c 74 53 69 6d 28 29 20 2a 2f  te3FaultSim() */
233f0 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 62 4c  .#endif.  int bL
23400 6f 63 61 6c 74 69 6d 65 46 61 75 6c 74 3b 20 20  ocaltimeFault;  
23410 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
23420 72 75 65 20 74 6f 20 66 61 69 6c 20 6c 6f 63 61  rue to fail loca
23430 6c 74 69 6d 65 28 29 20 63 61 6c 6c 73 20 2a 2f  ltime() calls */
23440 0a 20 20 69 6e 74 20 69 4f 6e 63 65 52 65 73 65  .  int iOnceRese
23450 74 54 68 72 65 73 68 6f 6c 64 3b 20 20 20 20 20  tThreshold;     
23460 20 20 20 20 20 2f 2a 20 57 68 65 6e 20 74 6f 20       /* When to 
23470 72 65 73 65 74 20 4f 50 5f 4f 6e 63 65 20 63 6f  reset OP_Once co
23480 75 6e 74 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  unters */.};../*
23490 0a 2a 2a 20 54 68 69 73 20 6d 61 63 72 6f 20 69  .** This macro i
234a0 73 20 75 73 65 64 20 69 6e 73 69 64 65 20 6f 66  s used inside of
234b0 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
234c0 65 6e 74 73 20 74 6f 20 69 6e 64 69 63 61 74 65  ents to indicate
234d0 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 61 73 73   that.** the ass
234e0 65 72 74 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69  ert is only vali
234f0 64 20 6f 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d  d on a well-form
23500 65 64 20 64 61 74 61 62 61 73 65 2e 20 20 49 6e  ed database.  In
23510 73 74 65 61 64 20 6f 66 3a 0a 2a 2a 0a 2a 2a 20  stead of:.**.** 
23520 20 20 20 20 61 73 73 65 72 74 28 20 58 20 29 3b      assert( X );
23530 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20 77 72 69 74 65  .**.** One write
23540 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73  s:.**.**     ass
23550 65 72 74 28 20 58 20 7c 7c 20 43 4f 52 52 55 50  ert( X || CORRUP
23560 54 5f 44 42 20 29 3b 0a 2a 2a 0a 2a 2a 20 43 4f  T_DB );.**.** CO
23570 52 52 55 50 54 5f 44 42 20 69 73 20 74 72 75 65  RRUPT_DB is true
23580 20 64 75 72 69 6e 67 20 6e 6f 72 6d 61 6c 20 6f   during normal o
23590 70 65 72 61 74 69 6f 6e 2e 20 20 43 4f 52 52 55  peration.  CORRU
235a0 50 54 5f 44 42 20 64 6f 65 73 20 6e 6f 74 20 69  PT_DB does not i
235b0 6e 64 69 63 61 74 65 0a 2a 2a 20 74 68 61 74 20  ndicate.** that 
235c0 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20  the database is 
235d0 64 65 66 69 6e 69 74 65 6c 79 20 63 6f 72 72 75  definitely corru
235e0 70 74 2c 20 6f 6e 6c 79 20 74 68 61 74 20 69 74  pt, only that it
235f0 20 6d 69 67 68 74 20 62 65 20 63 6f 72 72 75 70   might be corrup
23600 74 2e 0a 2a 2a 20 46 6f 72 20 6d 6f 73 74 20 74  t..** For most t
23610 65 73 74 20 63 61 73 65 73 2c 20 43 4f 52 52 55  est cases, CORRU
23620 50 54 5f 44 42 20 69 73 20 73 65 74 20 74 6f 20  PT_DB is set to 
23630 66 61 6c 73 65 20 75 73 69 6e 67 20 61 20 73 70  false using a sp
23640 65 63 69 61 6c 0a 2a 2a 20 73 71 6c 69 74 65 33  ecial.** sqlite3
23650 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 29 2e  _test_control().
23660 20 20 54 68 69 73 20 65 6e 61 62 6c 65 73 20 61    This enables a
23670 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
23680 74 73 20 74 6f 20 70 72 6f 76 65 0a 2a 2a 20 74  ts to prove.** t
23690 68 69 6e 67 73 20 74 68 61 74 20 61 72 65 20 61  hings that are a
236a0 6c 77 61 79 73 20 74 72 75 65 20 66 6f 72 20 77  lways true for w
236b0 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62  ell-formed datab
236c0 61 73 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ases..*/.#define
236d0 20 43 4f 52 52 55 50 54 5f 44 42 20 20 28 73 71   CORRUPT_DB  (sq
236e0 6c 69 74 65 33 43 6f 6e 66 69 67 2e 6e 65 76 65  lite3Config.neve
236f0 72 43 6f 72 72 75 70 74 3d 3d 30 29 0a 0a 2f 2a  rCorrupt==0)../*
23700 0a 2a 2a 20 43 6f 6e 74 65 78 74 20 70 6f 69 6e  .** Context poin
23710 74 65 72 20 70 61 73 73 65 64 20 64 6f 77 6e 20  ter passed down 
23720 74 68 72 6f 75 67 68 20 74 68 65 20 74 72 65 65  through the tree
23730 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74  -walk..*/.struct
23740 20 57 61 6c 6b 65 72 20 7b 0a 20 20 50 61 72 73   Walker {.  Pars
23750 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20  e *pParse;      
23760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23770 20 20 20 20 20 20 2f 2a 20 50 61 72 73 65 72 20        /* Parser 
23780 63 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a 20 20 69  context.  */.  i
23790 6e 74 20 28 2a 78 45 78 70 72 43 61 6c 6c 62 61  nt (*xExprCallba
237a0 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70  ck)(Walker*, Exp
237b0 72 2a 29 3b 20 20 20 20 20 2f 2a 20 43 61 6c 6c  r*);     /* Call
237c0 62 61 63 6b 20 66 6f 72 20 65 78 70 72 65 73 73  back for express
237d0 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 28 2a  ions */.  int (*
237e0 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b 29  xSelectCallback)
237f0 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a  (Walker*,Select*
23800 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20  );  /* Callback 
23810 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20  for SELECTs */. 
23820 20 76 6f 69 64 20 28 2a 78 53 65 6c 65 63 74 43   void (*xSelectC
23830 61 6c 6c 62 61 63 6b 32 29 28 57 61 6c 6b 65 72  allback2)(Walker
23840 2a 2c 53 65 6c 65 63 74 2a 29 3b 2f 2a 20 53 65  *,Select*);/* Se
23850 63 6f 6e 64 20 63 61 6c 6c 62 61 63 6b 20 66 6f  cond callback fo
23860 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20 69  r SELECTs */.  i
23870 6e 74 20 77 61 6c 6b 65 72 44 65 70 74 68 3b 20  nt walkerDepth; 
23880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23890 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
238a0 65 72 20 6f 66 20 73 75 62 71 75 65 72 69 65 73  er of subqueries
238b0 20 2a 2f 0a 20 20 75 38 20 65 43 6f 64 65 3b 20   */.  u8 eCode; 
238c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
238d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
238e0 2f 2a 20 41 20 73 6d 61 6c 6c 20 70 72 6f 63 65  /* A small proce
238f0 73 73 69 6e 67 20 63 6f 64 65 20 2a 2f 0a 20 20  ssing code */.  
23900 75 6e 69 6f 6e 20 7b 20 20 20 20 20 20 20 20 20  union {         
23910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23920 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 74            /* Ext
23930 72 61 20 64 61 74 61 20 66 6f 72 20 63 61 6c 6c  ra data for call
23940 62 61 63 6b 20 2a 2f 0a 20 20 20 20 4e 61 6d 65  back */.    Name
23950 43 6f 6e 74 65 78 74 20 2a 70 4e 43 3b 20 20 20  Context *pNC;   
23960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23970 20 20 20 20 20 20 2f 2a 20 4e 61 6d 69 6e 67 20        /* Naming 
23980 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20 69  context */.    i
23990 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20  nt n;           
239a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
239b0 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 63 6f           /* A co
239c0 75 6e 74 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74  unter */.    int
239d0 20 69 43 75 72 3b 20 20 20 20 20 20 20 20 20 20   iCur;          
239e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
239f0 20 20 20 20 20 20 20 2f 2a 20 41 20 63 75 72 73         /* A curs
23a00 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20  or number */.   
23a10 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69   SrcList *pSrcLi
23a20 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  st;             
23a30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 52             /* FR
23a40 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20  OM clause */.   
23a50 20 73 74 72 75 63 74 20 53 72 63 43 6f 75 6e 74   struct SrcCount
23a60 20 2a 70 53 72 63 43 6f 75 6e 74 3b 20 20 20 20   *pSrcCount;    
23a70 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
23a80 75 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e 20 72 65  unting column re
23a90 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 20 20  ferences */.    
23aa0 73 74 72 75 63 74 20 43 43 75 72 48 69 6e 74 20  struct CCurHint 
23ab0 2a 70 43 43 75 72 48 69 6e 74 3b 20 20 20 20 20  *pCCurHint;     
23ac0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65            /* Use
23ad0 64 20 62 79 20 63 6f 64 65 43 75 72 73 6f 72 48  d by codeCursorH
23ae0 69 6e 74 28 29 20 2a 2f 0a 20 20 20 20 69 6e 74  int() */.    int
23af0 20 2a 61 69 43 6f 6c 3b 20 20 20 20 20 20 20 20   *aiCol;        
23b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b10 20 20 20 20 20 20 20 2f 2a 20 61 72 72 61 79 20         /* array 
23b20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 65  of column indexe
23b30 73 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20  s */.    struct 
23b40 49 64 78 43 6f 76 65 72 20 2a 70 49 64 78 43 6f  IdxCover *pIdxCo
23b50 76 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  ver;            
23b60 20 20 20 2f 2a 20 43 68 65 63 6b 20 66 6f 72 20     /* Check for 
23b70 69 6e 64 65 78 20 63 6f 76 65 72 61 67 65 20 2a  index coverage *
23b80 2f 0a 20 20 20 20 73 74 72 75 63 74 20 49 64 78  /.    struct Idx
23b90 45 78 70 72 54 72 61 6e 73 20 2a 70 49 64 78 54  ExprTrans *pIdxT
23ba0 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20  rans;           
23bb0 2f 2a 20 43 6f 6e 76 65 72 74 20 69 6e 64 65 78  /* Convert index
23bc0 65 64 20 65 78 70 72 20 74 6f 20 63 6f 6c 75 6d  ed expr to colum
23bd0 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69 73  n */.    ExprLis
23be0 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20  t *pGroupBy;    
23bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23c00 20 20 20 2f 2a 20 47 52 4f 55 50 20 42 59 20 63     /* GROUP BY c
23c10 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 73 74 72  lause */.    str
23c20 75 63 74 20 48 61 76 69 6e 67 54 6f 57 68 65 72  uct HavingToWher
23c30 65 43 74 78 20 2a 70 48 61 76 69 6e 67 43 74 78  eCtx *pHavingCtx
23c40 3b 20 20 20 20 20 20 2f 2a 20 48 41 56 49 4e 47  ;      /* HAVING
23c50 20 74 6f 20 57 48 45 52 45 20 63 6c 61 75 73 65   to WHERE clause
23c60 20 63 74 78 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d   ctx */.  } u;.}
23c70 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72 64 20 64 65  ;../* Forward de
23c80 63 6c 61 72 61 74 69 6f 6e 73 20 2a 2f 0a 69 6e  clarations */.in
23c90 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70  t sqlite3WalkExp
23ca0 72 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a  r(Walker*, Expr*
23cb0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  );.int sqlite3Wa
23cc0 6c 6b 45 78 70 72 4c 69 73 74 28 57 61 6c 6b 65  lkExprList(Walke
23cd0 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  r*, ExprList*);.
23ce0 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53  int sqlite3WalkS
23cf0 65 6c 65 63 74 28 57 61 6c 6b 65 72 2a 2c 20 53  elect(Walker*, S
23d00 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
23d10 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 45 78  ite3WalkSelectEx
23d20 70 72 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65  pr(Walker*, Sele
23d30 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
23d40 33 57 61 6c 6b 53 65 6c 65 63 74 46 72 6f 6d 28  3WalkSelectFrom(
23d50 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a  Walker*, Select*
23d60 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
23d70 70 72 57 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65  prWalkNoop(Walke
23d80 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 0a 2f 2a 0a  r*, Expr*);../*.
23d90 2a 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66  ** Return code f
23da0 72 6f 6d 20 74 68 65 20 70 61 72 73 65 2d 74 72  rom the parse-tr
23db0 65 65 20 77 61 6c 6b 69 6e 67 20 70 72 69 6d 69  ee walking primi
23dc0 74 69 76 65 73 20 61 6e 64 20 74 68 65 69 72 0a  tives and their.
23dd0 2a 2a 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f  ** callbacks..*/
23de0 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 43 6f 6e  .#define WRC_Con
23df0 74 69 6e 75 65 20 20 20 20 30 20 20 20 2f 2a 20  tinue    0   /* 
23e00 43 6f 6e 74 69 6e 75 65 20 64 6f 77 6e 20 69 6e  Continue down in
23e10 74 6f 20 63 68 69 6c 64 72 65 6e 20 2a 2f 0a 23  to children */.#
23e20 64 65 66 69 6e 65 20 57 52 43 5f 50 72 75 6e 65  define WRC_Prune
23e30 20 20 20 20 20 20 20 31 20 20 20 2f 2a 20 4f 6d         1   /* Om
23e40 69 74 20 63 68 69 6c 64 72 65 6e 20 62 75 74 20  it children but 
23e50 63 6f 6e 74 69 6e 75 65 20 77 61 6c 6b 69 6e 67  continue walking
23e60 20 73 69 62 6c 69 6e 67 73 20 2a 2f 0a 23 64 65   siblings */.#de
23e70 66 69 6e 65 20 57 52 43 5f 41 62 6f 72 74 20 20  fine WRC_Abort  
23e80 20 20 20 20 20 32 20 20 20 2f 2a 20 41 62 61 6e       2   /* Aban
23e90 64 6f 6e 20 74 68 65 20 74 72 65 65 20 77 61 6c  don the tree wal
23ea0 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  k */../*.** An i
23eb0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
23ec0 73 74 72 75 63 74 75 72 65 20 72 65 70 72 65 73  structure repres
23ed0 65 6e 74 73 20 61 20 73 65 74 20 6f 66 20 6f 6e  ents a set of on
23ee0 65 20 6f 72 20 6d 6f 72 65 20 43 54 45 73 0a 2a  e or more CTEs.*
23ef0 2a 20 28 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20  * (common table 
23f00 65 78 70 72 65 73 73 69 6f 6e 73 29 20 63 72 65  expressions) cre
23f10 61 74 65 64 20 62 79 20 61 20 73 69 6e 67 6c 65  ated by a single
23f20 20 57 49 54 48 20 63 6c 61 75 73 65 2e 0a 2a 2f   WITH clause..*/
23f30 0a 73 74 72 75 63 74 20 57 69 74 68 20 7b 0a 20  .struct With {. 
23f40 20 69 6e 74 20 6e 43 74 65 3b 20 20 20 20 20 20   int nCte;      
23f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f60 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 43 54   /* Number of CT
23f70 45 73 20 69 6e 20 74 68 65 20 57 49 54 48 20 63  Es in the WITH c
23f80 6c 61 75 73 65 20 2a 2f 0a 20 20 57 69 74 68 20  lause */.  With 
23f90 2a 70 4f 75 74 65 72 3b 20 20 20 20 20 20 20 20  *pOuter;        
23fa0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
23fb0 6e 74 61 69 6e 69 6e 67 20 57 49 54 48 20 63 6c  ntaining WITH cl
23fc0 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f  ause, or NULL */
23fd0 0a 20 20 73 74 72 75 63 74 20 43 74 65 20 7b 20  .  struct Cte { 
23fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ff0 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 43     /* For each C
24000 54 45 20 69 6e 20 74 68 65 20 57 49 54 48 20 63  TE in the WITH c
24010 6c 61 75 73 65 2e 2e 2e 2e 20 2a 2f 0a 20 20 20  lause.... */.   
24020 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
24030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24040 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73   /* Name of this
24050 20 43 54 45 20 2a 2f 0a 20 20 20 20 45 78 70 72   CTE */.    Expr
24060 4c 69 73 74 20 2a 70 43 6f 6c 73 3b 20 20 20 20  List *pCols;    
24070 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
24080 69 73 74 20 6f 66 20 65 78 70 6c 69 63 69 74 20  ist of explicit 
24090 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20 6f 72  column names, or
240a0 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 53 65 6c   NULL */.    Sel
240b0 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20  ect *pSelect;   
240c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
240d0 54 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f  The definition o
240e0 66 20 74 68 69 73 20 43 54 45 20 2a 2f 0a 20 20  f this CTE */.  
240f0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43    const char *zC
24100 74 65 45 72 72 3b 20 20 20 20 20 20 20 20 20 20  teErr;          
24110 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61    /* Error messa
24120 67 65 20 66 6f 72 20 63 69 72 63 75 6c 61 72 20  ge for circular 
24130 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20  references */.  
24140 7d 20 61 5b 31 5d 3b 0a 7d 3b 0a 0a 23 69 66 64  } a[1];.};..#ifd
24150 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
24160 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
24170 65 20 6f 66 20 74 68 65 20 54 72 65 65 56 69 65  e of the TreeVie
24180 77 20 6f 62 6a 65 63 74 20 69 73 20 75 73 65 64  w object is used
24190 20 66 6f 72 20 70 72 69 6e 74 69 6e 67 20 74 68   for printing th
241a0 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20  e content of.** 
241b0 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20  data structures 
241c0 6f 6e 20 73 71 6c 69 74 65 33 44 65 62 75 67 50  on sqlite3DebugP
241d0 72 69 6e 74 66 28 29 20 75 73 69 6e 67 20 61 20  rintf() using a 
241e0 74 72 65 65 2d 6c 69 6b 65 20 76 69 65 77 2e 0a  tree-like view..
241f0 2a 2f 0a 73 74 72 75 63 74 20 54 72 65 65 56 69  */.struct TreeVi
24200 65 77 20 7b 0a 20 20 69 6e 74 20 69 4c 65 76 65  ew {.  int iLeve
24210 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  l;             /
24220 2a 20 57 68 69 63 68 20 6c 65 76 65 6c 20 6f 66  * Which level of
24230 20 74 68 65 20 74 72 65 65 20 77 65 20 61 72 65   the tree we are
24240 20 6f 6e 20 2a 2f 0a 20 20 75 38 20 20 62 4c 69   on */.  u8  bLi
24250 6e 65 5b 31 30 30 5d 3b 20 20 20 20 20 20 20 20  ne[100];        
24260 20 2f 2a 20 44 72 61 77 20 76 65 72 74 69 63 61   /* Draw vertica
24270 6c 20 69 6e 20 63 6f 6c 75 6d 6e 20 69 20 69 66  l in column i if
24280 20 62 4c 69 6e 65 5b 69 5d 20 69 73 20 74 72 75   bLine[i] is tru
24290 65 20 2a 2f 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f  e */.};.#endif /
242a0 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a  * SQLITE_DEBUG *
242b0 2f 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e  /../*.** Assumin
242c0 67 20 7a 49 6e 20 70 6f 69 6e 74 73 20 74 6f 20  g zIn points to 
242d0 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f  the first byte o
242e0 66 20 61 20 55 54 46 2d 38 20 63 68 61 72 61 63  f a UTF-8 charac
242f0 74 65 72 2c 0a 2a 2a 20 61 64 76 61 6e 63 65 20  ter,.** advance 
24300 7a 49 6e 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20  zIn to point to 
24310 74 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f  the first byte o
24320 66 20 74 68 65 20 6e 65 78 74 20 55 54 46 2d 38  f the next UTF-8
24330 20 63 68 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 23   character..*/.#
24340 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4b  define SQLITE_SK
24350 49 50 5f 55 54 46 38 28 7a 49 6e 29 20 7b 20 20  IP_UTF8(zIn) {  
24360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24370 20 20 20 20 20 20 5c 0a 20 20 69 66 28 20 28 2a        \.  if( (*
24380 28 7a 49 6e 2b 2b 29 29 3e 3d 30 78 63 30 20 29  (zIn++))>=0xc0 )
24390 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
243a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c                 \
243b0 0a 20 20 20 20 77 68 69 6c 65 28 20 28 2a 7a 49  .    while( (*zI
243c0 6e 20 26 20 30 78 63 30 29 3d 3d 30 78 38 30 20  n & 0xc0)==0x80 
243d0 29 7b 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20 20  ){ zIn++; }     
243e0 20 20 20 20 20 20 20 20 5c 0a 20 20 7d 20 20 20          \.  }   
243f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24420 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20   \.}../*.** The 
24430 53 51 4c 49 54 45 5f 2a 5f 42 4b 50 54 20 6d 61  SQLITE_*_BKPT ma
24440 63 72 6f 73 20 61 72 65 20 73 75 62 73 74 69 74  cros are substit
24450 75 74 65 73 20 66 6f 72 20 74 68 65 20 65 72 72  utes for the err
24460 6f 72 20 63 6f 64 65 73 20 77 69 74 68 0a 2a 2a  or codes with.**
24470 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 62   the same name b
24480 75 74 20 77 69 74 68 6f 75 74 20 74 68 65 20 5f  ut without the _
24490 42 4b 50 54 20 73 75 66 66 69 78 2e 20 20 54 68  BKPT suffix.  Th
244a0 65 73 65 20 6d 61 63 72 6f 73 20 69 6e 76 6f 6b  ese macros invok
244b0 65 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 74 68  e.** routines th
244c0 61 74 20 72 65 70 6f 72 74 20 74 68 65 20 6c 69  at report the li
244d0 6e 65 2d 6e 75 6d 62 65 72 20 6f 6e 20 77 68 69  ne-number on whi
244e0 63 68 20 74 68 65 20 65 72 72 6f 72 20 6f 72 69  ch the error ori
244f0 67 69 6e 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67  ginated.** using
24500 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29 2e 20   sqlite3_log(). 
24510 20 54 68 65 20 72 6f 75 74 69 6e 65 73 20 61 6c   The routines al
24520 73 6f 20 70 72 6f 76 69 64 65 20 61 20 63 6f 6e  so provide a con
24530 76 65 6e 69 65 6e 74 20 70 6c 61 63 65 0a 2a 2a  venient place.**
24540 20 74 6f 20 73 65 74 20 61 20 64 65 62 75 67 67   to set a debugg
24550 65 72 20 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a  er breakpoint..*
24560 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72  /.int sqlite3Cor
24570 72 75 70 74 45 72 72 6f 72 28 69 6e 74 29 3b 0a  ruptError(int);.
24580 69 6e 74 20 73 71 6c 69 74 65 33 4d 69 73 75 73  int sqlite3Misus
24590 65 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74  eError(int);.int
245a0 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e   sqlite3Cantopen
245b0 45 72 72 6f 72 28 69 6e 74 29 3b 0a 23 64 65 66  Error(int);.#def
245c0 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  ine SQLITE_CORRU
245d0 50 54 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43  PT_BKPT sqlite3C
245e0 6f 72 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49  orruptError(__LI
245f0 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51  NE__).#define SQ
24600 4c 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54  LITE_MISUSE_BKPT
24610 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72   sqlite3MisuseEr
24620 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64  ror(__LINE__).#d
24630 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 41 4e  efine SQLITE_CAN
24640 54 4f 50 45 4e 5f 42 4b 50 54 20 73 71 6c 69 74  TOPEN_BKPT sqlit
24650 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28  e3CantopenError(
24660 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 69 66 64 65 66  __LINE__).#ifdef
24670 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
24680 69 6e 74 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d  int sqlite3Nomem
24690 45 72 72 6f 72 28 69 6e 74 29 3b 0a 20 20 69 6e  Error(int);.  in
246a0 74 20 73 71 6c 69 74 65 33 49 6f 65 72 72 6e 6f  t sqlite3Ioerrno
246b0 6d 65 6d 45 72 72 6f 72 28 69 6e 74 29 3b 0a 23  memError(int);.#
246c0 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e   define SQLITE_N
246d0 4f 4d 45 4d 5f 42 4b 50 54 20 73 71 6c 69 74 65  OMEM_BKPT sqlite
246e0 33 4e 6f 6d 65 6d 45 72 72 6f 72 28 5f 5f 4c 49  3NomemError(__LI
246f0 4e 45 5f 5f 29 0a 23 20 64 65 66 69 6e 65 20 53  NE__).# define S
24700 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45  QLITE_IOERR_NOME
24710 4d 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 49 6f  M_BKPT sqlite3Io
24720 65 72 72 6e 6f 6d 65 6d 45 72 72 6f 72 28 5f 5f  errnomemError(__
24730 4c 49 4e 45 5f 5f 29 0a 23 65 6c 73 65 0a 23 20  LINE__).#else.# 
24740 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f  define SQLITE_NO
24750 4d 45 4d 5f 42 4b 50 54 20 53 51 4c 49 54 45 5f  MEM_BKPT SQLITE_
24760 4e 4f 4d 45 4d 0a 23 20 64 65 66 69 6e 65 20 53  NOMEM.# define S
24770 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45  QLITE_IOERR_NOME
24780 4d 5f 42 4b 50 54 20 53 51 4c 49 54 45 5f 49 4f  M_BKPT SQLITE_IO
24790 45 52 52 5f 4e 4f 4d 45 4d 0a 23 65 6e 64 69 66  ERR_NOMEM.#endif
247a0 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 33 20 61 6e 64  ../*.** FTS3 and
247b0 20 46 54 53 34 20 62 6f 74 68 20 72 65 71 75 69   FTS4 both requi
247c0 72 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  re virtual table
247d0 20 73 75 70 70 6f 72 74 0a 2a 2f 0a 23 69 66 20   support.*/.#if 
247e0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
247f0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
24800 29 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  ).# undef SQLITE
24810 5f 45 4e 41 42 4c 45 5f 46 54 53 33 0a 23 20 75  _ENABLE_FTS3.# u
24820 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  ndef SQLITE_ENAB
24830 4c 45 5f 46 54 53 34 0a 23 65 6e 64 69 66 0a 0a  LE_FTS4.#endif..
24840 2f 2a 0a 2a 2a 20 46 54 53 34 20 69 73 20 72 65  /*.** FTS4 is re
24850 61 6c 6c 79 20 61 6e 20 65 78 74 65 6e 73 69 6f  ally an extensio
24860 6e 20 66 6f 72 20 46 54 53 33 2e 20 20 49 74 20  n for FTS3.  It 
24870 69 73 20 65 6e 61 62 6c 65 64 20 75 73 69 6e 67  is enabled using
24880 20 74 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 45   the.** SQLITE_E
24890 4e 41 42 4c 45 5f 46 54 53 33 20 6d 61 63 72 6f  NABLE_FTS3 macro
248a0 2e 20 20 42 75 74 20 74 6f 20 61 76 6f 69 64 20  .  But to avoid 
248b0 63 6f 6e 66 75 73 69 6f 6e 20 77 65 20 61 6c 73  confusion we als
248c0 6f 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 53 51  o call.** the SQ
248d0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34  LITE_ENABLE_FTS4
248e0 20 6d 61 63 72 6f 20 74 6f 20 73 65 72 76 65 20   macro to serve 
248f0 61 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20  as an alias for 
24900 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
24910 53 33 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  S3..*/.#if defin
24920 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
24930 5f 46 54 53 34 29 20 26 26 20 21 64 65 66 69 6e  _FTS4) && !defin
24940 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
24950 5f 46 54 53 33 29 0a 23 20 64 65 66 69 6e 65 20  _FTS3).# define 
24960 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
24970 53 33 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  S3 1.#endif../*.
24980 2a 2a 20 54 68 65 20 63 74 79 70 65 2e 68 20 68  ** The ctype.h h
24990 65 61 64 65 72 20 69 73 20 6e 65 65 64 65 64 20  eader is needed 
249a0 66 6f 72 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79  for non-ASCII sy
249b0 73 74 65 6d 73 2e 20 20 49 74 20 69 73 20 61 6c  stems.  It is al
249c0 73 6f 0a 2a 2a 20 6e 65 65 64 65 64 20 62 79 20  so.** needed by 
249d0 46 54 53 33 20 77 68 65 6e 20 46 54 53 33 20 69  FTS3 when FTS3 i
249e0 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68  s included in th
249f0 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a  e amalgamation..
24a00 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
24a10 53 51 4c 49 54 45 5f 41 53 43 49 49 29 20 7c 7c  SQLITE_ASCII) ||
24a20 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28   \.    (defined(
24a30 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
24a40 53 33 29 20 26 26 20 64 65 66 69 6e 65 64 28 53  S3) && defined(S
24a50 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49  QLITE_AMALGAMATI
24a60 4f 4e 29 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c  ON)).# include <
24a70 63 74 79 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a  ctype.h>.#endif.
24a80 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
24a90 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69  wing macros mimi
24aa0 63 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 6c  c the standard l
24ab0 69 62 72 61 72 79 20 66 75 6e 63 74 69 6f 6e 73  ibrary functions
24ac0 20 74 6f 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69   toupper(),.** i
24ad0 73 73 70 61 63 65 28 29 2c 20 69 73 61 6c 6e 75  sspace(), isalnu
24ae0 6d 28 29 2c 20 69 73 64 69 67 69 74 28 29 20 61  m(), isdigit() a
24af0 6e 64 20 69 73 78 64 69 67 69 74 28 29 2c 20 72  nd isxdigit(), r
24b00 65 73 70 65 63 74 69 76 65 6c 79 2e 20 54 68 65  espectively. The
24b10 0a 2a 2a 20 73 71 6c 69 74 65 20 76 65 72 73 69  .** sqlite versi
24b20 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f  ons only work fo
24b30 72 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65  r ASCII characte
24b40 72 73 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f  rs, regardless o
24b50 66 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66  f locale..*/.#if
24b60 64 65 66 20 53 51 4c 49 54 45 5f 41 53 43 49 49  def SQLITE_ASCII
24b70 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
24b80 33 54 6f 75 70 70 65 72 28 78 29 20 20 28 28 78  3Toupper(x)  ((x
24b90 29 26 7e 28 73 71 6c 69 74 65 33 43 74 79 70 65  )&~(sqlite3Ctype
24ba0 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
24bb0 61 72 29 28 78 29 5d 26 30 78 32 30 29 29 0a 23  ar)(x)]&0x20)).#
24bc0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
24bd0 73 73 70 61 63 65 28 78 29 20 20 20 28 73 71 6c  sspace(x)   (sql
24be0 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
24bf0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
24c00 26 30 78 30 31 29 0a 23 20 64 65 66 69 6e 65 20  &0x01).# define 
24c10 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78  sqlite3Isalnum(x
24c20 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
24c30 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
24c40 68 61 72 29 28 78 29 5d 26 30 78 30 36 29 0a 23  har)(x)]&0x06).#
24c50 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
24c60 73 61 6c 70 68 61 28 78 29 20 20 20 28 73 71 6c  salpha(x)   (sql
24c70 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
24c80 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
24c90 26 30 78 30 32 29 0a 23 20 64 65 66 69 6e 65 20  &0x02).# define 
24ca0 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 78  sqlite3Isdigit(x
24cb0 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
24cc0 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
24cd0 68 61 72 29 28 78 29 5d 26 30 78 30 34 29 0a 23  har)(x)]&0x04).#
24ce0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
24cf0 73 78 64 69 67 69 74 28 78 29 20 20 28 73 71 6c  sxdigit(x)  (sql
24d00 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
24d10 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
24d20 26 30 78 30 38 29 0a 23 20 64 65 66 69 6e 65 20  &0x08).# define 
24d30 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78  sqlite3Tolower(x
24d40 29 20 20 20 28 73 71 6c 69 74 65 33 55 70 70 65  )   (sqlite3Uppe
24d50 72 54 6f 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e  rToLower[(unsign
24d60 65 64 20 63 68 61 72 29 28 78 29 5d 29 0a 23 20  ed char)(x)]).# 
24d70 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
24d80 71 75 6f 74 65 28 78 29 20 20 20 28 73 71 6c 69  quote(x)   (sqli
24d90 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
24da0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
24db0 30 78 38 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  0x80).#else.# de
24dc0 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70  fine sqlite3Toup
24dd0 70 65 72 28 78 29 20 20 20 74 6f 75 70 70 65 72  per(x)   toupper
24de0 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
24df0 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
24e00 6c 69 74 65 33 49 73 73 70 61 63 65 28 78 29 20  lite3Isspace(x) 
24e10 20 20 69 73 73 70 61 63 65 28 28 75 6e 73 69 67    isspace((unsig
24e20 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
24e30 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
24e40 61 6c 6e 75 6d 28 78 29 20 20 20 69 73 61 6c 6e  alnum(x)   isaln
24e50 75 6d 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  um((unsigned cha
24e60 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
24e70 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78  sqlite3Isalpha(x
24e80 29 20 20 20 69 73 61 6c 70 68 61 28 28 75 6e 73  )   isalpha((uns
24e90 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
24ea0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
24eb0 49 73 64 69 67 69 74 28 78 29 20 20 20 69 73 64  Isdigit(x)   isd
24ec0 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63  igit((unsigned c
24ed0 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
24ee0 65 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69  e sqlite3Isxdigi
24ef0 74 28 78 29 20 20 69 73 78 64 69 67 69 74 28 28  t(x)  isxdigit((
24f00 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
24f10 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
24f20 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20  te3Tolower(x)   
24f30 74 6f 6c 6f 77 65 72 28 28 75 6e 73 69 67 6e 65  tolower((unsigne
24f40 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
24f50 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 71 75  fine sqlite3Isqu
24f60 6f 74 65 28 78 29 20 20 20 28 28 78 29 3d 3d 27  ote(x)   ((x)=='
24f70 22 27 7c 7c 28 78 29 3d 3d 27 5c 27 27 7c 7c 28  "'||(x)=='\''||(
24f80 78 29 3d 3d 27 5b 27 7c 7c 28 78 29 3d 3d 27 60  x)=='['||(x)=='`
24f90 27 29 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  ').#endif.#ifnde
24fa0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f  f SQLITE_OMIT_CO
24fb0 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47  MPILEOPTION_DIAG
24fc0 53 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 49  S.int sqlite3IsI
24fd0 64 43 68 61 72 28 75 38 29 3b 0a 23 65 6e 64 69  dChar(u8);.#endi
24fe0 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61  f../*.** Interna
24ff0 6c 20 66 75 6e 63 74 69 6f 6e 20 70 72 6f 74 6f  l function proto
25000 74 79 70 65 73 0a 2a 2f 0a 69 6e 74 20 73 71 6c  types.*/.int sql
25010 69 74 65 33 53 74 72 49 43 6d 70 28 63 6f 6e 73  ite3StrICmp(cons
25020 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
25030 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
25040 33 53 74 72 6c 65 6e 33 30 28 63 6f 6e 73 74 20  3Strlen30(const 
25050 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71  char*);.char *sq
25060 6c 69 74 65 33 43 6f 6c 75 6d 6e 54 79 70 65 28  lite3ColumnType(
25070 43 6f 6c 75 6d 6e 2a 2c 63 68 61 72 2a 29 3b 0a  Column*,char*);.
25080 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53  #define sqlite3S
25090 74 72 4e 49 43 6d 70 20 73 71 6c 69 74 65 33 5f  trNICmp sqlite3_
250a0 73 74 72 6e 69 63 6d 70 0a 0a 69 6e 74 20 73 71  strnicmp..int sq
250b0 6c 69 74 65 33 4d 61 6c 6c 6f 63 49 6e 69 74 28  lite3MallocInit(
250c0 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69  void);.void sqli
250d0 74 65 33 4d 61 6c 6c 6f 63 45 6e 64 28 76 6f 69  te3MallocEnd(voi
250e0 64 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  d);.void *sqlite
250f0 33 4d 61 6c 6c 6f 63 28 75 36 34 29 3b 0a 76 6f  3Malloc(u64);.vo
25100 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  id *sqlite3Mallo
25110 63 5a 65 72 6f 28 75 36 34 29 3b 0a 76 6f 69 64  cZero(u64);.void
25120 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f   *sqlite3DbMallo
25130 63 5a 65 72 6f 28 73 71 6c 69 74 65 33 2a 2c 20  cZero(sqlite3*, 
25140 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  u64);.void *sqli
25150 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 73  te3DbMallocRaw(s
25160 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 76  qlite3*, u64);.v
25170 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61  oid *sqlite3DbMa
25180 6c 6c 6f 63 52 61 77 4e 4e 28 73 71 6c 69 74 65  llocRawNN(sqlite
25190 33 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72 20 2a  3*, u64);.char *
251a0 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70 28  sqlite3DbStrDup(
251b0 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
251c0 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c  har*);.char *sql
251d0 69 74 65 33 44 62 53 74 72 4e 44 75 70 28 73 71  ite3DbStrNDup(sq
251e0 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
251f0 72 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a  r*, u64);.void *
25200 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28 76  sqlite3Realloc(v
25210 6f 69 64 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64  oid*, u64);.void
25220 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c   *sqlite3DbReall
25230 6f 63 4f 72 46 72 65 65 28 73 71 6c 69 74 65 33  ocOrFree(sqlite3
25240 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36 34 29   *, void *, u64)
25250 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44  ;.void *sqlite3D
25260 62 52 65 61 6c 6c 6f 63 28 73 71 6c 69 74 65 33  bRealloc(sqlite3
25270 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36 34 29   *, void *, u64)
25280 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62  ;.void sqlite3Db
25290 46 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 20 76  Free(sqlite3*, v
252a0 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  oid*);.void sqli
252b0 74 65 33 44 62 46 72 65 65 4e 4e 28 73 71 6c 69  te3DbFreeNN(sqli
252c0 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 69 6e  te3*, void*);.in
252d0 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53  t sqlite3MallocS
252e0 69 7a 65 28 76 6f 69 64 2a 29 3b 0a 69 6e 74 20  ize(void*);.int 
252f0 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 53  sqlite3DbMallocS
25300 69 7a 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f  ize(sqlite3*, vo
25310 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  id*);.void *sqli
25320 74 65 33 53 63 72 61 74 63 68 4d 61 6c 6c 6f 63  te3ScratchMalloc
25330 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  (int);.void sqli
25340 74 65 33 53 63 72 61 74 63 68 46 72 65 65 28 76  te3ScratchFree(v
25350 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  oid*);.void *sql
25360 69 74 65 33 50 61 67 65 4d 61 6c 6c 6f 63 28 69  ite3PageMalloc(i
25370 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
25380 33 50 61 67 65 46 72 65 65 28 76 6f 69 64 2a 29  3PageFree(void*)
25390 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65  ;.void sqlite3Me
253a0 6d 53 65 74 44 65 66 61 75 6c 74 28 76 6f 69 64  mSetDefault(void
253b0 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
253c0 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 76 6f 69  E_UNTESTABLE.voi
253d0 64 20 73 71 6c 69 74 65 33 42 65 6e 69 67 6e 4d  d sqlite3BenignM
253e0 61 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69 64 20  allocHooks(void 
253f0 28 2a 29 28 76 6f 69 64 29 2c 20 76 6f 69 64 20  (*)(void), void 
25400 28 2a 29 28 76 6f 69 64 29 29 3b 0a 23 65 6e 64  (*)(void));.#end
25410 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 48 65  if.int sqlite3He
25420 61 70 4e 65 61 72 6c 79 46 75 6c 6c 28 76 6f 69  apNearlyFull(voi
25430 64 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73 79  d);../*.** On sy
25440 73 74 65 6d 73 20 77 69 74 68 20 61 6d 70 6c 65  stems with ample
25450 20 73 74 61 63 6b 20 73 70 61 63 65 20 61 6e 64   stack space and
25460 20 74 68 61 74 20 73 75 70 70 6f 72 74 20 61 6c   that support al
25470 6c 6f 63 61 28 29 2c 20 6d 61 6b 65 0a 2a 2a 20  loca(), make.** 
25480 75 73 65 20 6f 66 20 61 6c 6c 6f 63 61 28 29 20  use of alloca() 
25490 74 6f 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20  to obtain space 
254a0 66 6f 72 20 6c 61 72 67 65 20 61 75 74 6f 6d 61  for large automa
254b0 74 69 63 20 6f 62 6a 65 63 74 73 2e 20 20 42 79  tic objects.  By
254c0 20 64 65 66 61 75 6c 74 2c 0a 2a 2a 20 6f 62 74   default,.** obt
254d0 61 69 6e 20 73 70 61 63 65 20 66 72 6f 6d 20 6d  ain space from m
254e0 61 6c 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a 2a 20 54  alloc()..**.** T
254f0 68 65 20 61 6c 6c 6f 63 61 28 29 20 72 6f 75 74  he alloca() rout
25500 69 6e 65 20 6e 65 76 65 72 20 72 65 74 75 72 6e  ine never return
25510 73 20 4e 55 4c 4c 2e 20 20 54 68 69 73 20 77 69  s NULL.  This wi
25520 6c 6c 20 63 61 75 73 65 20 63 6f 64 65 20 70 61  ll cause code pa
25530 74 68 73 0a 2a 2a 20 74 68 61 74 20 64 65 61 6c  ths.** that deal
25540 20 77 69 74 68 20 73 71 6c 69 74 65 33 53 74 61   with sqlite3Sta
25550 63 6b 41 6c 6c 6f 63 28 29 20 66 61 69 6c 75 72  ckAlloc() failur
25560 65 73 20 74 6f 20 62 65 20 75 6e 72 65 61 63 68  es to be unreach
25570 61 62 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  able..*/.#ifdef 
25580 53 51 4c 49 54 45 5f 55 53 45 5f 41 4c 4c 4f 43  SQLITE_USE_ALLOC
25590 41 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  A.# define sqlit
255a0 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28  e3StackAllocRaw(
255b0 44 2c 4e 29 20 20 20 61 6c 6c 6f 63 61 28 4e 29  D,N)   alloca(N)
255c0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
255d0 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28  3StackAllocZero(
255e0 44 2c 4e 29 20 20 6d 65 6d 73 65 74 28 61 6c 6c  D,N)  memset(all
255f0 6f 63 61 28 4e 29 2c 20 30 2c 20 4e 29 0a 23 20  oca(N), 0, N).# 
25600 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
25610 61 63 6b 46 72 65 65 28 44 2c 50 29 0a 23 65 6c  ackFree(D,P).#el
25620 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
25630 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77  te3StackAllocRaw
25640 28 44 2c 4e 29 20 20 20 73 71 6c 69 74 65 33 44  (D,N)   sqlite3D
25650 62 4d 61 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 0a  bMallocRaw(D,N).
25660 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
25670 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44  StackAllocZero(D
25680 2c 4e 29 20 20 73 71 6c 69 74 65 33 44 62 4d 61  ,N)  sqlite3DbMa
25690 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a 23 20  llocZero(D,N).# 
256a0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
256b0 61 63 6b 46 72 65 65 28 44 2c 50 29 20 20 20 20  ackFree(D,P)    
256c0 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
256d0 28 44 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  (D,P).#endif../*
256e0 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 62 6f   Do not allow bo
256f0 74 68 20 4d 45 4d 53 59 53 35 20 61 6e 64 20 4d  th MEMSYS5 and M
25700 45 4d 53 59 53 33 20 74 6f 20 62 65 20 64 65 66  EMSYS3 to be def
25710 69 6e 65 64 20 74 6f 67 65 74 68 65 72 2e 20 20  ined together.  
25720 49 66 20 74 68 65 79 0a 2a 2a 20 61 72 65 2c 20  If they.** are, 
25730 64 69 73 61 62 6c 65 20 4d 45 4d 53 59 53 33 0a  disable MEMSYS3.
25740 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
25750 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 35 0a  _ENABLE_MEMSYS5.
25760 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65  const sqlite3_me
25770 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74  m_methods *sqlit
25780 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 35 28  e3MemGetMemsys5(
25790 76 6f 69 64 29 3b 0a 23 75 6e 64 65 66 20 53 51  void);.#undef SQ
257a0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53  LITE_ENABLE_MEMS
257b0 59 53 33 0a 23 65 6e 64 69 66 0a 23 69 66 64 65  YS3.#endif.#ifde
257c0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
257d0 4d 45 4d 53 59 53 33 0a 63 6f 6e 73 74 20 73 71  MEMSYS3.const sq
257e0 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64  lite3_mem_method
257f0 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74  s *sqlite3MemGet
25800 4d 65 6d 73 79 73 33 28 76 6f 69 64 29 3b 0a 23  Memsys3(void);.#
25810 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20  endif...#ifndef 
25820 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49  SQLITE_MUTEX_OMI
25830 54 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  T.  sqlite3_mute
25840 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20  x_methods const 
25850 2a 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74 4d  *sqlite3DefaultM
25860 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71  utex(void);.  sq
25870 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68  lite3_mutex_meth
25880 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74  ods const *sqlit
25890 65 33 4e 6f 6f 70 4d 75 74 65 78 28 76 6f 69 64  e3NoopMutex(void
258a0 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  );.  sqlite3_mut
258b0 65 78 20 2a 73 71 6c 69 74 65 33 4d 75 74 65 78  ex *sqlite3Mutex
258c0 41 6c 6c 6f 63 28 69 6e 74 29 3b 0a 20 20 69 6e  Alloc(int);.  in
258d0 74 20 73 71 6c 69 74 65 33 4d 75 74 65 78 49 6e  t sqlite3MutexIn
258e0 69 74 28 76 6f 69 64 29 3b 0a 20 20 69 6e 74 20  it(void);.  int 
258f0 73 71 6c 69 74 65 33 4d 75 74 65 78 45 6e 64 28  sqlite3MutexEnd(
25900 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 23 69  void);.#endif.#i
25910 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
25920 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 29 20 26 26  E_MUTEX_OMIT) &&
25930 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
25940 5f 4d 55 54 45 58 5f 4e 4f 4f 50 29 0a 20 20 76  _MUTEX_NOOP).  v
25950 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 6f 72  oid sqlite3Memor
25960 79 42 61 72 72 69 65 72 28 76 6f 69 64 29 3b 0a  yBarrier(void);.
25970 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
25980 71 6c 69 74 65 33 4d 65 6d 6f 72 79 42 61 72 72  qlite3MemoryBarr
25990 69 65 72 28 29 0a 23 65 6e 64 69 66 0a 0a 73 71  ier().#endif..sq
259a0 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 71 6c 69  lite3_int64 sqli
259b0 74 65 33 53 74 61 74 75 73 56 61 6c 75 65 28 69  te3StatusValue(i
259c0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
259d0 33 53 74 61 74 75 73 55 70 28 69 6e 74 2c 20 69  3StatusUp(int, i
259e0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
259f0 33 53 74 61 74 75 73 44 6f 77 6e 28 69 6e 74 2c  3StatusDown(int,
25a00 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
25a10 74 65 33 53 74 61 74 75 73 48 69 67 68 77 61 74  te3StatusHighwat
25a20 65 72 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 2f  er(int, int);../
25a30 2a 20 41 63 63 65 73 73 20 74 6f 20 6d 75 74 65  * Access to mute
25a40 78 65 73 20 75 73 65 64 20 62 79 20 73 71 6c 69  xes used by sqli
25a50 74 65 33 5f 73 74 61 74 75 73 28 29 20 2a 2f 0a  te3_status() */.
25a60 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73  sqlite3_mutex *s
25a70 71 6c 69 74 65 33 50 63 61 63 68 65 31 4d 75 74  qlite3Pcache1Mut
25a80 65 78 28 76 6f 69 64 29 3b 0a 73 71 6c 69 74 65  ex(void);.sqlite
25a90 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33  3_mutex *sqlite3
25aa0 4d 61 6c 6c 6f 63 4d 75 74 65 78 28 76 6f 69 64  MallocMutex(void
25ab0 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  );..#ifndef SQLI
25ac0 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
25ad0 5f 50 4f 49 4e 54 0a 20 20 69 6e 74 20 73 71 6c  _POINT.  int sql
25ae0 69 74 65 33 49 73 4e 61 4e 28 64 6f 75 62 6c 65  ite3IsNaN(double
25af0 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
25b00 65 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 58  e sqlite3IsNaN(X
25b10 29 20 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  )  0.#endif../*.
25b20 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
25b30 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
25b40 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20  structure holds 
25b50 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
25b60 74 20 53 51 4c 0a 2a 2a 20 66 75 6e 63 74 69 6f  t SQL.** functio
25b70 6e 73 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61  ns arguments tha
25b80 74 20 61 72 65 20 74 68 65 20 70 61 72 61 6d 65  t are the parame
25b90 74 65 72 73 20 74 6f 20 74 68 65 20 70 72 69 6e  ters to the prin
25ba0 74 66 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a  tf() function..*
25bb0 2f 0a 73 74 72 75 63 74 20 50 72 69 6e 74 66 41  /.struct PrintfA
25bc0 72 67 75 6d 65 6e 74 73 20 7b 0a 20 20 69 6e 74  rguments {.  int
25bd0 20 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20 20   nArg;          
25be0 20 20 20 20 20 20 2f 2a 20 54 6f 74 61 6c 20 6e        /* Total n
25bf0 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
25c00 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 55 73 65  ts */.  int nUse
25c10 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
25c20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
25c30 67 75 6d 65 6e 74 73 20 75 73 65 64 20 73 6f 20  guments used so 
25c40 66 61 72 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  far */.  sqlite3
25c50 5f 76 61 6c 75 65 20 2a 2a 61 70 41 72 67 3b 20  _value **apArg; 
25c60 20 20 2f 2a 20 54 68 65 20 61 72 67 75 6d 65 6e    /* The argumen
25c70 74 20 76 61 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a  t values */.};..
25c80 76 6f 69 64 20 73 71 6c 69 74 65 33 56 58 50 72  void sqlite3VXPr
25c90 69 6e 74 66 28 53 74 72 41 63 63 75 6d 2a 2c 20  intf(StrAccum*, 
25ca0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76 61 5f  const char*, va_
25cb0 6c 69 73 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  list);.void sqli
25cc0 74 65 33 58 50 72 69 6e 74 66 28 53 74 72 41 63  te3XPrintf(StrAc
25cd0 63 75 6d 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  cum*, const char
25ce0 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73  *, ...);.char *s
25cf0 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 73 71  qlite3MPrintf(sq
25d00 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
25d10 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a  r*, ...);.char *
25d20 73 71 6c 69 74 65 33 56 4d 50 72 69 6e 74 66 28  sqlite3VMPrintf(
25d30 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
25d40 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a  har*, va_list);.
25d50 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
25d60 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66  TE_DEBUG) || def
25d70 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41 56 45  ined(SQLITE_HAVE
25d80 5f 4f 53 5f 54 52 41 43 45 29 0a 20 20 76 6f 69  _OS_TRACE).  voi
25d90 64 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72  d sqlite3DebugPr
25da0 69 6e 74 66 28 63 6f 6e 73 74 20 63 68 61 72 2a  intf(const char*
25db0 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a 23  , ...);.#endif.#
25dc0 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
25dd0 45 5f 54 45 53 54 29 0a 20 20 76 6f 69 64 20 2a  E_TEST).  void *
25de0 73 71 6c 69 74 65 33 54 65 73 74 54 65 78 74 54  sqlite3TestTextT
25df0 6f 50 74 72 28 63 6f 6e 73 74 20 63 68 61 72 2a  oPtr(const char*
25e00 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64  );.#endif..#if d
25e10 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
25e20 42 55 47 29 0a 20 20 76 6f 69 64 20 73 71 6c 69  BUG).  void sqli
25e30 74 65 33 54 72 65 65 56 69 65 77 45 78 70 72 28  te3TreeViewExpr(
25e40 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74  TreeView*, const
25e50 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20 76   Expr*, u8);.  v
25e60 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56  oid sqlite3TreeV
25e70 69 65 77 42 61 72 65 45 78 70 72 4c 69 73 74 28  iewBareExprList(
25e80 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74  TreeView*, const
25e90 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73   ExprList*, cons
25ea0 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64  t char*);.  void
25eb0 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77   sqlite3TreeView
25ec0 45 78 70 72 4c 69 73 74 28 54 72 65 65 56 69 65  ExprList(TreeVie
25ed0 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 4c 69  w*, const ExprLi
25ee0 73 74 2a 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63  st*, u8, const c
25ef0 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  har*);.  void sq
25f00 6c 69 74 65 33 54 72 65 65 56 69 65 77 53 65 6c  lite3TreeViewSel
25f10 65 63 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63  ect(TreeView*, c
25f20 6f 6e 73 74 20 53 65 6c 65 63 74 2a 2c 20 75 38  onst Select*, u8
25f30 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
25f40 33 54 72 65 65 56 69 65 77 57 69 74 68 28 54 72  3TreeViewWith(Tr
25f50 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 57  eeView*, const W
25f60 69 74 68 2a 2c 20 75 38 29 3b 0a 23 65 6e 64 69  ith*, u8);.#endi
25f70 66 0a 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  f...void sqlite3
25f80 53 65 74 53 74 72 69 6e 67 28 63 68 61 72 20 2a  SetString(char *
25f90 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e  *, sqlite3*, con
25fa0 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
25fb0 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28  sqlite3ErrorMsg(
25fc0 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
25fd0 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20  ar*, ...);.void 
25fe0 73 71 6c 69 74 65 33 44 65 71 75 6f 74 65 28 63  sqlite3Dequote(c
25ff0 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
26000 74 65 33 54 6f 6b 65 6e 49 6e 69 74 28 54 6f 6b  te3TokenInit(Tok
26010 65 6e 2a 2c 63 68 61 72 2a 29 3b 0a 69 6e 74 20  en*,char*);.int 
26020 73 71 6c 69 74 65 33 4b 65 79 77 6f 72 64 43 6f  sqlite3KeywordCo
26030 64 65 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  de(const unsigne
26040 64 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69  d char*, int);.i
26050 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 50 61 72  nt sqlite3RunPar
26060 73 65 72 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73  ser(Parse*, cons
26070 74 20 63 68 61 72 2a 2c 20 63 68 61 72 20 2a 2a  t char*, char **
26080 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46  );.void sqlite3F
26090 69 6e 69 73 68 43 6f 64 69 6e 67 28 50 61 72 73  inishCoding(Pars
260a0 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  e*);.int sqlite3
260b0 47 65 74 54 65 6d 70 52 65 67 28 50 61 72 73 65  GetTempReg(Parse
260c0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
260d0 52 65 6c 65 61 73 65 54 65 6d 70 52 65 67 28 50  ReleaseTempReg(P
260e0 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20  arse*,int);.int 
260f0 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52 61  sqlite3GetTempRa
26100 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b  nge(Parse*,int);
26110 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c  .void sqlite3Rel
26120 65 61 73 65 54 65 6d 70 52 61 6e 67 65 28 50 61  easeTempRange(Pa
26130 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76  rse*,int,int);.v
26140 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 65 61 72  oid sqlite3Clear
26150 54 65 6d 70 52 65 67 43 61 63 68 65 28 50 61 72  TempRegCache(Par
26160 73 65 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  se*);.#ifdef SQL
26170 49 54 45 5f 44 45 42 55 47 0a 69 6e 74 20 73 71  ITE_DEBUG.int sq
26180 6c 69 74 65 33 4e 6f 54 65 6d 70 73 49 6e 52 61  lite3NoTempsInRa
26190 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69  nge(Parse*,int,i
261a0 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 45 78 70 72  nt);.#endif.Expr
261b0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6c 6c   *sqlite3ExprAll
261c0 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  oc(sqlite3*,int,
261d0 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 69 6e 74  const Token*,int
261e0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
261f0 45 78 70 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e  Expr(sqlite3*,in
26200 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  t,const char*);.
26210 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
26220 41 74 74 61 63 68 53 75 62 74 72 65 65 73 28 73  AttachSubtrees(s
26230 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 45 78  qlite3*,Expr*,Ex
26240 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72  pr*,Expr*);.Expr
26250 20 2a 73 71 6c 69 74 65 33 50 45 78 70 72 28 50   *sqlite3PExpr(P
26260 61 72 73 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72  arse*, int, Expr
26270 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
26280 73 71 6c 69 74 65 33 50 45 78 70 72 41 64 64 53  sqlite3PExprAddS
26290 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 45 78  elect(Parse*, Ex
262a0 70 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 45  pr*, Select*);.E
262b0 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
262c0 41 6e 64 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  And(sqlite3*,Exp
262d0 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72  r*, Expr*);.Expr
262e0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 46 75 6e   *sqlite3ExprFun
262f0 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78 70  ction(Parse*,Exp
26300 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  rList*, Token*);
26310 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
26320 72 41 73 73 69 67 6e 56 61 72 4e 75 6d 62 65 72  rAssignVarNumber
26330 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
26340 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  u32);.void sqlit
26350 65 33 45 78 70 72 44 65 6c 65 74 65 28 73 71 6c  e3ExprDelete(sql
26360 69 74 65 33 2a 2c 20 45 78 70 72 2a 29 3b 0a 45  ite3*, Expr*);.E
26370 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  xprList *sqlite3
26380 45 78 70 72 4c 69 73 74 41 70 70 65 6e 64 28 50  ExprListAppend(P
26390 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
263a0 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74  Expr*);.ExprList
263b0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73   *sqlite3ExprLis
263c0 74 41 70 70 65 6e 64 56 65 63 74 6f 72 28 50 61  tAppendVector(Pa
263d0 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 49  rse*,ExprList*,I
263e0 64 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 76  dList*,Expr*);.v
263f0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c  oid sqlite3ExprL
26400 69 73 74 53 65 74 53 6f 72 74 4f 72 64 65 72 28  istSetSortOrder(
26410 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a  ExprList*,int);.
26420 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
26430 4c 69 73 74 53 65 74 4e 61 6d 65 28 50 61 72 73  ListSetName(Pars
26440 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 54 6f 6b  e*,ExprList*,Tok
26450 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  en*,int);.void s
26460 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53 65  qlite3ExprListSe
26470 74 53 70 61 6e 28 50 61 72 73 65 2a 2c 45 78 70  tSpan(Parse*,Exp
26480 72 4c 69 73 74 2a 2c 45 78 70 72 53 70 61 6e 2a  rList*,ExprSpan*
26490 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
264a0 78 70 72 4c 69 73 74 44 65 6c 65 74 65 28 73 71  xprListDelete(sq
264b0 6c 69 74 65 33 2a 2c 20 45 78 70 72 4c 69 73 74  lite3*, ExprList
264c0 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 45  *);.u32 sqlite3E
264d0 78 70 72 4c 69 73 74 46 6c 61 67 73 28 63 6f 6e  xprListFlags(con
264e0 73 74 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69  st ExprList*);.i
264f0 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74 28 73  nt sqlite3Init(s
26500 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a 2a 29  qlite3*, char**)
26510 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69  ;.int sqlite3Ini
26520 74 43 61 6c 6c 62 61 63 6b 28 76 6f 69 64 2a 2c  tCallback(void*,
26530 20 69 6e 74 2c 20 63 68 61 72 2a 2a 2c 20 63 68   int, char**, ch
26540 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ar**);.void sqli
26550 74 65 33 50 72 61 67 6d 61 28 50 61 72 73 65 2a  te3Pragma(Parse*
26560 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54  ,Token*,Token*,T
26570 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 23 69 66 6e  oken*,int);.#ifn
26580 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
26590 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 4d 6f 64  VIRTUALTABLE.Mod
265a0 75 6c 65 20 2a 73 71 6c 69 74 65 33 50 72 61 67  ule *sqlite3Prag
265b0 6d 61 56 74 61 62 52 65 67 69 73 74 65 72 28 73  maVtabRegister(s
265c0 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
265d0 61 72 20 2a 7a 4e 61 6d 65 29 3b 0a 23 65 6e 64  ar *zName);.#end
265e0 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  if.void sqlite3R
265f0 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66  esetAllSchemasOf
26600 43 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c 69 74  Connection(sqlit
26610 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e3*);.void sqlit
26620 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61  e3ResetOneSchema
26630 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a  (sqlite3*,int);.
26640 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 6c  void sqlite3Coll
26650 61 70 73 65 44 61 74 61 62 61 73 65 41 72 72 61  apseDatabaseArra
26660 79 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  y(sqlite3*);.voi
26670 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 49  d sqlite3CommitI
26680 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65 73 28 73  nternalChanges(s
26690 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73  qlite3*);.void s
266a0 71 6c 69 74 65 33 44 65 6c 65 74 65 43 6f 6c 75  qlite3DeleteColu
266b0 6d 6e 4e 61 6d 65 73 28 73 71 6c 69 74 65 33 2a  mnNames(sqlite3*
266c0 2c 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71  ,Table*);.int sq
266d0 6c 69 74 65 33 43 6f 6c 75 6d 6e 73 46 72 6f 6d  lite3ColumnsFrom
266e0 45 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c  ExprList(Parse*,
266f0 45 78 70 72 4c 69 73 74 2a 2c 69 31 36 2a 2c 43  ExprList*,i16*,C
26700 6f 6c 75 6d 6e 2a 2a 29 3b 0a 76 6f 69 64 20 73  olumn**);.void s
26710 71 6c 69 74 65 33 53 65 6c 65 63 74 41 64 64 43  qlite3SelectAddC
26720 6f 6c 75 6d 6e 54 79 70 65 41 6e 64 43 6f 6c 6c  olumnTypeAndColl
26730 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62  ation(Parse*,Tab
26740 6c 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 54 61  le*,Select*);.Ta
26750 62 6c 65 20 2a 73 71 6c 69 74 65 33 52 65 73 75  ble *sqlite3Resu
26760 6c 74 53 65 74 4f 66 53 65 6c 65 63 74 28 50 61  ltSetOfSelect(Pa
26770 72 73 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 76  rse*,Select*);.v
26780 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 4d  oid sqlite3OpenM
26790 61 73 74 65 72 54 61 62 6c 65 28 50 61 72 73 65  asterTable(Parse
267a0 20 2a 2c 20 69 6e 74 29 3b 0a 49 6e 64 65 78 20   *, int);.Index 
267b0 2a 73 71 6c 69 74 65 33 50 72 69 6d 61 72 79 4b  *sqlite3PrimaryK
267c0 65 79 49 6e 64 65 78 28 54 61 62 6c 65 2a 29 3b  eyIndex(Table*);
267d0 0a 69 31 36 20 73 71 6c 69 74 65 33 43 6f 6c 75  .i16 sqlite3Colu
267e0 6d 6e 4f 66 49 6e 64 65 78 28 49 6e 64 65 78 2a  mnOfIndex(Index*
267f0 2c 20 69 31 36 29 3b 0a 76 6f 69 64 20 73 71 6c  , i16);.void sql
26800 69 74 65 33 53 74 61 72 74 54 61 62 6c 65 28 50  ite3StartTable(P
26810 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
26820 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  en*,int,int,int,
26830 69 6e 74 29 3b 0a 23 69 66 20 53 51 4c 49 54 45  int);.#if SQLITE
26840 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43  _ENABLE_HIDDEN_C
26850 4f 4c 55 4d 4e 53 0a 20 20 76 6f 69 64 20 73 71  OLUMNS.  void sq
26860 6c 69 74 65 33 43 6f 6c 75 6d 6e 50 72 6f 70 65  lite3ColumnPrope
26870 72 74 69 65 73 46 72 6f 6d 4e 61 6d 65 28 54 61  rtiesFromName(Ta
26880 62 6c 65 2a 2c 20 43 6f 6c 75 6d 6e 2a 29 3b 0a  ble*, Column*);.
26890 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
268a0 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 50 72 6f 70  qlite3ColumnProp
268b0 65 72 74 69 65 73 46 72 6f 6d 4e 61 6d 65 28 54  ertiesFromName(T
268c0 2c 43 29 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a  ,C) /* no-op */.
268d0 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
268e0 74 65 33 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72  te3AddColumn(Par
268f0 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  se*,Token*,Token
26900 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
26910 41 64 64 4e 6f 74 4e 75 6c 6c 28 50 61 72 73 65  AddNotNull(Parse
26920 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
26930 6c 69 74 65 33 41 64 64 50 72 69 6d 61 72 79 4b  lite3AddPrimaryK
26940 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c  ey(Parse*, ExprL
26950 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ist*, int, int, 
26960 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
26970 65 33 41 64 64 43 68 65 63 6b 43 6f 6e 73 74 72  e3AddCheckConstr
26980 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 45 78 70  aint(Parse*, Exp
26990 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
269a0 33 41 64 64 44 65 66 61 75 6c 74 56 61 6c 75 65  3AddDefaultValue
269b0 28 50 61 72 73 65 2a 2c 45 78 70 72 53 70 61 6e  (Parse*,ExprSpan
269c0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
269d0 41 64 64 43 6f 6c 6c 61 74 65 54 79 70 65 28 50  AddCollateType(P
269e0 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  arse*, Token*);.
269f0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64 54  void sqlite3EndT
26a00 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65  able(Parse*,Toke
26a10 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75 38 2c 53 65 6c  n*,Token*,u8,Sel
26a20 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
26a30 65 33 50 61 72 73 65 55 72 69 28 63 6f 6e 73 74  e3ParseUri(const
26a40 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
26a50 72 2a 2c 75 6e 73 69 67 6e 65 64 20 69 6e 74 2a  r*,unsigned int*
26a60 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
26a70 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 76 66        sqlite3_vf
26a80 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68 61 72 20  s**,char**,char 
26a90 2a 2a 29 3b 0a 42 74 72 65 65 20 2a 73 71 6c 69  **);.Btree *sqli
26aa0 74 65 33 44 62 4e 61 6d 65 54 6f 42 74 72 65 65  te3DbNameToBtree
26ab0 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
26ac0 63 68 61 72 2a 29 3b 0a 0a 23 69 66 64 65 66 20  char*);..#ifdef 
26ad0 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c  SQLITE_UNTESTABL
26ae0 45 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  E.# define sqlit
26af0 65 33 46 61 75 6c 74 53 69 6d 28 58 29 20 53 51  e3FaultSim(X) SQ
26b00 4c 49 54 45 5f 4f 4b 0a 23 65 6c 73 65 0a 20 20  LITE_OK.#else.  
26b10 69 6e 74 20 73 71 6c 69 74 65 33 46 61 75 6c 74  int sqlite3Fault
26b20 53 69 6d 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66  Sim(int);.#endif
26b30 0a 0a 42 69 74 76 65 63 20 2a 73 71 6c 69 74 65  ..Bitvec *sqlite
26b40 33 42 69 74 76 65 63 43 72 65 61 74 65 28 75 33  3BitvecCreate(u3
26b50 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42  2);.int sqlite3B
26b60 69 74 76 65 63 54 65 73 74 28 42 69 74 76 65 63  itvecTest(Bitvec
26b70 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c  *, u32);.int sql
26b80 69 74 65 33 42 69 74 76 65 63 54 65 73 74 4e 6f  ite3BitvecTestNo
26b90 74 4e 75 6c 6c 28 42 69 74 76 65 63 2a 2c 20 75  tNull(Bitvec*, u
26ba0 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  32);.int sqlite3
26bb0 42 69 74 76 65 63 53 65 74 28 42 69 74 76 65 63  BitvecSet(Bitvec
26bc0 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20 73 71  *, u32);.void sq
26bd0 6c 69 74 65 33 42 69 74 76 65 63 43 6c 65 61 72  lite3BitvecClear
26be0 28 42 69 74 76 65 63 2a 2c 20 75 33 32 2c 20 76  (Bitvec*, u32, v
26bf0 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  oid*);.void sqli
26c00 74 65 33 42 69 74 76 65 63 44 65 73 74 72 6f 79  te3BitvecDestroy
26c10 28 42 69 74 76 65 63 2a 29 3b 0a 75 33 32 20 73  (Bitvec*);.u32 s
26c20 71 6c 69 74 65 33 42 69 74 76 65 63 53 69 7a 65  qlite3BitvecSize
26c30 28 42 69 74 76 65 63 2a 29 3b 0a 23 69 66 6e 64  (Bitvec*);.#ifnd
26c40 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54  ef SQLITE_UNTEST
26c50 41 42 4c 45 0a 69 6e 74 20 73 71 6c 69 74 65 33  ABLE.int sqlite3
26c60 42 69 74 76 65 63 42 75 69 6c 74 69 6e 54 65 73  BitvecBuiltinTes
26c70 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a 23 65 6e  t(int,int*);.#en
26c80 64 69 66 0a 0a 52 6f 77 53 65 74 20 2a 73 71 6c  dif..RowSet *sql
26c90 69 74 65 33 52 6f 77 53 65 74 49 6e 69 74 28 73  ite3RowSetInit(s
26ca0 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 2c 20  qlite3*, void*, 
26cb0 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 3b 0a 76  unsigned int);.v
26cc0 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65  oid sqlite3RowSe
26cd0 74 43 6c 65 61 72 28 52 6f 77 53 65 74 2a 29 3b  tClear(RowSet*);
26ce0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77  .void sqlite3Row
26cf0 53 65 74 49 6e 73 65 72 74 28 52 6f 77 53 65 74  SetInsert(RowSet
26d00 2a 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c  *, i64);.int sql
26d10 69 74 65 33 52 6f 77 53 65 74 54 65 73 74 28 52  ite3RowSetTest(R
26d20 6f 77 53 65 74 2a 2c 20 69 6e 74 20 69 42 61 74  owSet*, int iBat
26d30 63 68 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71  ch, i64);.int sq
26d40 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74 28  lite3RowSetNext(
26d50 52 6f 77 53 65 74 2a 2c 20 69 36 34 2a 29 3b 0a  RowSet*, i64*);.
26d60 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65  .void sqlite3Cre
26d70 61 74 65 56 69 65 77 28 50 61 72 73 65 2a 2c 54  ateView(Parse*,T
26d80 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  oken*,Token*,Tok
26d90 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 65  en*,ExprList*,Se
26da0 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  lect*,int,int);.
26db0 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
26dc0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20  LITE_OMIT_VIEW) 
26dd0 7c 7c 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  || !defined(SQLI
26de0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
26df0 41 42 4c 45 29 0a 20 20 69 6e 74 20 73 71 6c 69  ABLE).  int sqli
26e00 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e  te3ViewGetColumn
26e10 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 54 61 62  Names(Parse*,Tab
26e20 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  le*);.#else.# de
26e30 66 69 6e 65 20 73 71 6c 69 74 65 33 56 69 65 77  fine sqlite3View
26e40 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 41  GetColumnNames(A
26e50 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a 23 69  ,B) 0.#endif..#i
26e60 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54  f SQLITE_MAX_ATT
26e70 41 43 48 45 44 3e 33 30 0a 20 20 69 6e 74 20 73  ACHED>30.  int s
26e80 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a  qlite3DbMaskAllZ
26e90 65 72 6f 28 79 44 62 4d 61 73 6b 29 3b 0a 23 65  ero(yDbMask);.#e
26ea0 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
26eb0 33 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65  3DropTable(Parse
26ec0 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74  *, SrcList*, int
26ed0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
26ee0 69 74 65 33 43 6f 64 65 44 72 6f 70 54 61 62 6c  ite3CodeDropTabl
26ef0 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  e(Parse*, Table*
26f00 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
26f10 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54  d sqlite3DeleteT
26f20 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54  able(sqlite3*, T
26f30 61 62 6c 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20  able*);.#ifndef 
26f40 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
26f50 49 4e 43 52 45 4d 45 4e 54 0a 20 20 76 6f 69 64  INCREMENT.  void
26f60 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72   sqlite3Autoincr
26f70 65 6d 65 6e 74 42 65 67 69 6e 28 50 61 72 73 65  ementBegin(Parse
26f80 20 2a 70 50 61 72 73 65 29 3b 0a 20 20 76 6f 69   *pParse);.  voi
26f90 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63  d sqlite3Autoinc
26fa0 72 65 6d 65 6e 74 45 6e 64 28 50 61 72 73 65 20  rementEnd(Parse 
26fb0 2a 70 50 61 72 73 65 29 3b 0a 23 65 6c 73 65 0a  *pParse);.#else.
26fc0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
26fd0 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67  AutoincrementBeg
26fe0 69 6e 28 58 29 0a 23 20 64 65 66 69 6e 65 20 73  in(X).# define s
26ff0 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d  qlite3Autoincrem
27000 65 6e 74 45 6e 64 28 58 29 0a 23 65 6e 64 69 66  entEnd(X).#endif
27010 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 73  .void sqlite3Ins
27020 65 72 74 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ert(Parse*, SrcL
27030 69 73 74 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 49  ist*, Select*, I
27040 64 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f  dList*, int);.vo
27050 69 64 20 2a 73 71 6c 69 74 65 33 41 72 72 61 79  id *sqlite3Array
27060 41 6c 6c 6f 63 61 74 65 28 73 71 6c 69 74 65 33  Allocate(sqlite3
27070 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c 69 6e 74 2a  *,void*,int,int*
27080 2c 69 6e 74 2a 29 3b 0a 49 64 4c 69 73 74 20 2a  ,int*);.IdList *
27090 73 71 6c 69 74 65 33 49 64 4c 69 73 74 41 70 70  sqlite3IdListApp
270a0 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20 49 64  end(sqlite3*, Id
270b0 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  List*, Token*);.
270c0 69 6e 74 20 73 71 6c 69 74 65 33 49 64 4c 69 73  int sqlite3IdLis
270d0 74 49 6e 64 65 78 28 49 64 4c 69 73 74 2a 2c 63  tIndex(IdList*,c
270e0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 53 72 63  onst char*);.Src
270f0 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63  List *sqlite3Src
27100 4c 69 73 74 45 6e 6c 61 72 67 65 28 73 71 6c 69  ListEnlarge(sqli
27110 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  te3*, SrcList*, 
27120 69 6e 74 2c 20 69 6e 74 29 3b 0a 53 72 63 4c 69  int, int);.SrcLi
27130 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  st *sqlite3SrcLi
27140 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65 33  stAppend(sqlite3
27150 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b  *, SrcList*, Tok
27160 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72  en*, Token*);.Sr
27170 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72  cList *sqlite3Sr
27180 63 4c 69 73 74 41 70 70 65 6e 64 46 72 6f 6d 54  cListAppendFromT
27190 65 72 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  erm(Parse*, SrcL
271a0 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  ist*, Token*, To
271b0 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ken*,.          
271c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
271d0 20 20 20 20 20 20 20 20 20 20 20 20 54 6f 6b 65              Toke
271e0 6e 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70  n*, Select*, Exp
271f0 72 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f  r*, IdList*);.vo
27200 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  id sqlite3SrcLis
27210 74 49 6e 64 65 78 65 64 42 79 28 50 61 72 73 65  tIndexedBy(Parse
27220 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54   *, SrcList *, T
27230 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71  oken *);.void sq
27240 6c 69 74 65 33 53 72 63 4c 69 73 74 46 75 6e 63  lite3SrcListFunc
27250 41 72 67 73 28 50 61 72 73 65 2a 2c 20 53 72 63  Args(Parse*, Src
27260 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a  List*, ExprList*
27270 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
27280 64 65 78 65 64 42 79 4c 6f 6f 6b 75 70 28 50 61  dexedByLookup(Pa
27290 72 73 65 20 2a 2c 20 73 74 72 75 63 74 20 53 72  rse *, struct Sr
272a0 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 76  cList_item *);.v
272b0 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
272c0 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28  stShiftJoinType(
272d0 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20  SrcList*);.void 
272e0 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 73  sqlite3SrcListAs
272f0 73 69 67 6e 43 75 72 73 6f 72 73 28 50 61 72 73  signCursors(Pars
27300 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 76  e*, SrcList*);.v
27310 6f 69 64 20 73 71 6c 69 74 65 33 49 64 4c 69 73  oid sqlite3IdLis
27320 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  tDelete(sqlite3*
27330 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64  , IdList*);.void
27340 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44   sqlite3SrcListD
27350 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
27360 53 72 63 4c 69 73 74 2a 29 3b 0a 49 6e 64 65 78  SrcList*);.Index
27370 20 2a 73 71 6c 69 74 65 33 41 6c 6c 6f 63 61 74   *sqlite3Allocat
27380 65 49 6e 64 65 78 4f 62 6a 65 63 74 28 73 71 6c  eIndexObject(sql
27390 69 74 65 33 2a 2c 69 31 36 2c 69 6e 74 2c 63 68  ite3*,i16,int,ch
273a0 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ar**);.void sqli
273b0 74 65 33 43 72 65 61 74 65 49 6e 64 65 78 28 50  te3CreateIndex(P
273c0 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
273d0 65 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70  en*,SrcList*,Exp
273e0 72 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e  rList*,int,Token
273f0 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
27400 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70               Exp
27410 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38  r*, int, int, u8
27420 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
27430 72 6f 70 49 6e 64 65 78 28 50 61 72 73 65 2a 2c  ropIndex(Parse*,
27440 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b   SrcList*, int);
27450 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65  .int sqlite3Sele
27460 63 74 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63  ct(Parse*, Selec
27470 74 2a 2c 20 53 65 6c 65 63 74 44 65 73 74 2a 29  t*, SelectDest*)
27480 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65  ;.Select *sqlite
27490 33 53 65 6c 65 63 74 4e 65 77 28 50 61 72 73 65  3SelectNew(Parse
274a0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 72 63 4c  *,ExprList*,SrcL
274b0 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c  ist*,Expr*,ExprL
274c0 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ist*,.          
274d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45                 E
274e0 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75  xpr*,ExprList*,u
274f0 33 32 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b  32,Expr*,Expr*);
27500 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c  .void sqlite3Sel
27510 65 63 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65  ectDelete(sqlite
27520 33 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 54 61  3*, Select*);.Ta
27530 62 6c 65 20 2a 73 71 6c 69 74 65 33 53 72 63 4c  ble *sqlite3SrcL
27540 69 73 74 4c 6f 6f 6b 75 70 28 50 61 72 73 65 2a  istLookup(Parse*
27550 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74  , SrcList*);.int
27560 20 73 71 6c 69 74 65 33 49 73 52 65 61 64 4f 6e   sqlite3IsReadOn
27570 6c 79 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  ly(Parse*, Table
27580 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
27590 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 28 50  lite3OpenTable(P
275a0 61 72 73 65 2a 2c 20 69 6e 74 20 69 43 75 72 2c  arse*, int iCur,
275b0 20 69 6e 74 20 69 44 62 2c 20 54 61 62 6c 65 2a   int iDb, Table*
275c0 2c 20 69 6e 74 29 3b 0a 23 69 66 20 64 65 66 69  , int);.#if defi
275d0 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
275e0 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54 45 5f  E_UPDATE_DELETE_
275f0 4c 49 4d 49 54 29 20 26 26 20 21 64 65 66 69 6e  LIMIT) && !defin
27600 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  ed(SQLITE_OMIT_S
27610 55 42 51 55 45 52 59 29 0a 45 78 70 72 20 2a 73  UBQUERY).Expr *s
27620 71 6c 69 74 65 33 4c 69 6d 69 74 57 68 65 72 65  qlite3LimitWhere
27630 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a  (Parse*,SrcList*
27640 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a  ,Expr*,ExprList*
27650 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c 63 68 61  ,Expr*,Expr*,cha
27660 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64  r*);.#endif.void
27670 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 46 72   sqlite3DeleteFr
27680 6f 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  om(Parse*, SrcLi
27690 73 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  st*, Expr*);.voi
276a0 64 20 73 71 6c 69 74 65 33 55 70 64 61 74 65 28  d sqlite3Update(
276b0 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
276c0 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70  , ExprList*, Exp
276d0 72 2a 2c 20 69 6e 74 29 3b 0a 57 68 65 72 65 49  r*, int);.WhereI
276e0 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57 68 65 72  nfo *sqlite3Wher
276f0 65 42 65 67 69 6e 28 50 61 72 73 65 2a 2c 53 72  eBegin(Parse*,Sr
27700 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70  cList*,Expr*,Exp
27710 72 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a  rList*,ExprList*
27720 2c 75 31 36 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ,u16,int);.void 
27730 73 71 6c 69 74 65 33 57 68 65 72 65 45 6e 64 28  sqlite3WhereEnd(
27740 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 4c 6f 67  WhereInfo*);.Log
27750 45 73 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  Est sqlite3Where
27760 4f 75 74 70 75 74 52 6f 77 43 6f 75 6e 74 28 57  OutputRowCount(W
27770 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
27780 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 44 69  sqlite3WhereIsDi
27790 73 74 69 6e 63 74 28 57 68 65 72 65 49 6e 66 6f  stinct(WhereInfo
277a0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
277b0 68 65 72 65 49 73 4f 72 64 65 72 65 64 28 57 68  hereIsOrdered(Wh
277c0 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
277d0 71 6c 69 74 65 33 57 68 65 72 65 4f 72 64 65 72  qlite3WhereOrder
277e0 65 64 49 6e 6e 65 72 4c 6f 6f 70 28 57 68 65 72  edInnerLoop(Wher
277f0 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
27800 69 74 65 33 57 68 65 72 65 49 73 53 6f 72 74 65  ite3WhereIsSorte
27810 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  d(WhereInfo*);.i
27820 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 43  nt sqlite3WhereC
27830 6f 6e 74 69 6e 75 65 4c 61 62 65 6c 28 57 68 65  ontinueLabel(Whe
27840 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
27850 6c 69 74 65 33 57 68 65 72 65 42 72 65 61 6b 4c  lite3WhereBreakL
27860 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29  abel(WhereInfo*)
27870 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
27880 72 65 4f 6b 4f 6e 65 50 61 73 73 28 57 68 65 72  reOkOnePass(Wher
27890 65 49 6e 66 6f 2a 2c 20 69 6e 74 2a 29 3b 0a 23  eInfo*, int*);.#
278a0 64 65 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f 4f  define ONEPASS_O
278b0 46 46 20 20 20 20 20 20 30 20 20 20 20 20 20 20  FF      0       
278c0 20 2f 2a 20 55 73 65 20 6f 66 20 4f 4e 45 50 41   /* Use of ONEPA
278d0 53 53 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 2a  SS not allowed *
278e0 2f 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53  /.#define ONEPAS
278f0 53 5f 53 49 4e 47 4c 45 20 20 20 31 20 20 20 20  S_SINGLE   1    
27900 20 20 20 20 2f 2a 20 4f 4e 45 50 41 53 53 20 76      /* ONEPASS v
27910 61 6c 69 64 20 66 6f 72 20 61 20 73 69 6e 67 6c  alid for a singl
27920 65 20 72 6f 77 20 75 70 64 61 74 65 20 2a 2f 0a  e row update */.
27930 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f  #define ONEPASS_
27940 4d 55 4c 54 49 20 20 20 20 32 20 20 20 20 20 20  MULTI    2      
27950 20 20 2f 2a 20 4f 4e 45 50 41 53 53 20 69 73 20    /* ONEPASS is 
27960 76 61 6c 69 64 20 66 6f 72 20 6d 75 6c 74 69 70  valid for multip
27970 6c 65 20 72 6f 77 73 20 2a 2f 0a 76 6f 69 64 20  le rows */.void 
27980 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 4c  sqlite3ExprCodeL
27990 6f 61 64 49 6e 64 65 78 43 6f 6c 75 6d 6e 28 50  oadIndexColumn(P
279a0 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69  arse*, Index*, i
279b0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69  nt, int, int);.i
279c0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
279d0 64 65 47 65 74 43 6f 6c 75 6d 6e 28 50 61 72 73  deGetColumn(Pars
279e0 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
279f0 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a   int, int, u8);.
27a00 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
27a10 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 54 6f 52  CodeGetColumnToR
27a20 65 67 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  eg(Parse*, Table
27a30 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
27a40 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
27a50 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e  xprCodeGetColumn
27a60 4f 66 54 61 62 6c 65 28 56 64 62 65 2a 2c 20 54  OfTable(Vdbe*, T
27a70 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  able*, int, int,
27a80 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
27a90 74 65 33 45 78 70 72 43 6f 64 65 4d 6f 76 65 28  te3ExprCodeMove(
27aa0 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
27ab0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
27ac0 69 74 65 33 45 78 70 72 43 61 63 68 65 53 74 6f  ite3ExprCacheSto
27ad0 72 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  re(Parse*, int, 
27ae0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
27af0 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65  sqlite3ExprCache
27b00 50 75 73 68 28 50 61 72 73 65 2a 29 3b 0a 76 6f  Push(Parse*);.vo
27b10 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  id sqlite3ExprCa
27b20 63 68 65 50 6f 70 28 50 61 72 73 65 2a 29 3b 0a  chePop(Parse*);.
27b30 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
27b40 43 61 63 68 65 52 65 6d 6f 76 65 28 50 61 72 73  CacheRemove(Pars
27b50 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  e*, int, int);.v
27b60 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
27b70 61 63 68 65 43 6c 65 61 72 28 50 61 72 73 65 2a  acheClear(Parse*
27b80 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
27b90 78 70 72 43 61 63 68 65 41 66 66 69 6e 69 74 79  xprCacheAffinity
27ba0 43 68 61 6e 67 65 28 50 61 72 73 65 2a 2c 20 69  Change(Parse*, i
27bb0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
27bc0 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 28 50  qlite3ExprCode(P
27bd0 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
27be0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
27bf0 45 78 70 72 43 6f 64 65 43 6f 70 79 28 50 61 72  ExprCodeCopy(Par
27c00 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
27c10 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
27c20 70 72 43 6f 64 65 46 61 63 74 6f 72 61 62 6c 65  prCodeFactorable
27c30 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
27c40 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
27c50 33 45 78 70 72 43 6f 64 65 41 74 49 6e 69 74 28  3ExprCodeAtInit(
27c60 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
27c70 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
27c80 45 78 70 72 43 6f 64 65 54 65 6d 70 28 50 61 72  ExprCodeTemp(Par
27c90 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a  se*, Expr*, int*
27ca0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
27cb0 70 72 43 6f 64 65 54 61 72 67 65 74 28 50 61 72  prCodeTarget(Par
27cc0 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
27cd0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
27ce0 70 72 43 6f 64 65 41 6e 64 43 61 63 68 65 28 50  prCodeAndCache(P
27cf0 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
27d00 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
27d10 78 70 72 43 6f 64 65 45 78 70 72 4c 69 73 74 28  xprCodeExprList(
27d20 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74  Parse*, ExprList
27d30 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29  *, int, int, u8)
27d40 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ;.#define SQLITE
27d50 5f 45 43 45 4c 5f 44 55 50 20 20 20 20 20 20 30  _ECEL_DUP      0
27d60 78 30 31 20 20 2f 2a 20 44 65 65 70 2c 20 6e 6f  x01  /* Deep, no
27d70 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70 69 65 73  t shallow copies
27d80 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
27d90 54 45 5f 45 43 45 4c 5f 46 41 43 54 4f 52 20 20  TE_ECEL_FACTOR  
27da0 20 30 78 30 32 20 20 2f 2a 20 46 61 63 74 6f 72   0x02  /* Factor
27db0 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74 20 74 65   out constant te
27dc0 72 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  rms */.#define S
27dd0 51 4c 49 54 45 5f 45 43 45 4c 5f 52 45 46 20 20  QLITE_ECEL_REF  
27de0 20 20 20 20 30 78 30 34 20 20 2f 2a 20 55 73 65      0x04  /* Use
27df0 20 45 78 70 72 4c 69 73 74 2e 75 2e 78 2e 69 4f   ExprList.u.x.iO
27e00 72 64 65 72 42 79 43 6f 6c 20 2a 2f 0a 23 64 65  rderByCol */.#de
27e10 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c  fine SQLITE_ECEL
27e20 5f 4f 4d 49 54 52 45 46 20 20 30 78 30 38 20 20  _OMITREF  0x08  
27e30 2f 2a 20 4f 6d 69 74 20 69 66 20 45 78 70 72 4c  /* Omit if ExprL
27e40 69 73 74 2e 75 2e 78 2e 69 4f 72 64 65 72 42 79  ist.u.x.iOrderBy
27e50 43 6f 6c 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  Col */.void sqli
27e60 74 65 33 45 78 70 72 49 66 54 72 75 65 28 50 61  te3ExprIfTrue(Pa
27e70 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
27e80 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
27e90 69 74 65 33 45 78 70 72 49 66 46 61 6c 73 65 28  ite3ExprIfFalse(
27ea0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
27eb0 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
27ec0 71 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c 73  qlite3ExprIfFals
27ed0 65 44 75 70 28 50 61 72 73 65 2a 2c 20 45 78 70  eDup(Parse*, Exp
27ee0 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54  r*, int, int);.T
27ef0 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 46 69 6e  able *sqlite3Fin
27f00 64 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c  dTable(sqlite3*,
27f10 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
27f20 73 74 20 63 68 61 72 2a 29 3b 0a 23 64 65 66 69  st char*);.#defi
27f30 6e 65 20 4c 4f 43 41 54 45 5f 56 49 45 57 20 20  ne LOCATE_VIEW  
27f40 20 20 30 78 30 31 0a 23 64 65 66 69 6e 65 20 4c    0x01.#define L
27f50 4f 43 41 54 45 5f 4e 4f 45 52 52 20 20 20 30 78  OCATE_NOERR   0x
27f60 30 32 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65  02.Table *sqlite
27f70 33 4c 6f 63 61 74 65 54 61 62 6c 65 28 50 61 72  3LocateTable(Par
27f80 73 65 2a 2c 75 33 32 20 66 6c 61 67 73 2c 63 6f  se*,u32 flags,co
27f90 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
27fa0 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a   char*);.Table *
27fb0 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62  sqlite3LocateTab
27fc0 6c 65 49 74 65 6d 28 50 61 72 73 65 2a 2c 75 33  leItem(Parse*,u3
27fd0 32 20 66 6c 61 67 73 2c 73 74 72 75 63 74 20 53  2 flags,struct S
27fe0 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a  rcList_item *);.
27ff0 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 46 69  Index *sqlite3Fi
28000 6e 64 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a  ndIndex(sqlite3*
28010 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f  ,const char*, co
28020 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
28030 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
28040 64 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c  dDeleteTable(sql
28050 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  ite3*,int,const 
28060 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
28070 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
28080 65 74 65 49 6e 64 65 78 28 73 71 6c 69 74 65 33  eteIndex(sqlite3
28090 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
280a0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
280b0 56 61 63 75 75 6d 28 50 61 72 73 65 2a 2c 54 6f  Vacuum(Parse*,To
280c0 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ken*);.int sqlit
280d0 65 33 52 75 6e 56 61 63 75 75 6d 28 63 68 61 72  e3RunVacuum(char
280e0 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 69 6e  **, sqlite3*, in
280f0 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  t);.char *sqlite
28100 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 73  3NameFromToken(s
28110 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29  qlite3*, Token*)
28120 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
28130 72 43 6f 6d 70 61 72 65 28 45 78 70 72 2a 2c 20  rCompare(Expr*, 
28140 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  Expr*, int);.int
28150 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6d 70   sqlite3ExprComp
28160 61 72 65 53 6b 69 70 28 45 78 70 72 2a 2c 20 45  areSkip(Expr*, E
28170 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  xpr*, int);.int 
28180 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43  sqlite3ExprListC
28190 6f 6d 70 61 72 65 28 45 78 70 72 4c 69 73 74 2a  ompare(ExprList*
281a0 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
281b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
281c0 70 72 49 6d 70 6c 69 65 73 45 78 70 72 28 45 78  prImpliesExpr(Ex
281d0 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  pr*, Expr*, int)
281e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
281f0 70 72 41 6e 61 6c 79 7a 65 41 67 67 72 65 67 61  prAnalyzeAggrega
28200 74 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  tes(NameContext*
28210 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
28220 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a  qlite3ExprAnalyz
28230 65 41 67 67 4c 69 73 74 28 4e 61 6d 65 43 6f 6e  eAggList(NameCon
28240 74 65 78 74 2a 2c 45 78 70 72 4c 69 73 74 2a 29  text*,ExprList*)
28250 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
28260 72 43 6f 76 65 72 65 64 42 79 49 6e 64 65 78 28  rCoveredByIndex(
28270 45 78 70 72 2a 2c 20 69 6e 74 20 69 43 75 72 2c  Expr*, int iCur,
28280 20 49 6e 64 65 78 20 2a 70 49 64 78 29 3b 0a 69   Index *pIdx);.i
28290 6e 74 20 73 71 6c 69 74 65 33 46 75 6e 63 74 69  nt sqlite3Functi
282a0 6f 6e 55 73 65 73 54 68 69 73 53 72 63 28 45 78  onUsesThisSrc(Ex
282b0 70 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a  pr*, SrcList*);.
282c0 56 64 62 65 20 2a 73 71 6c 69 74 65 33 47 65 74  Vdbe *sqlite3Get
282d0 56 64 62 65 28 50 61 72 73 65 2a 29 3b 0a 23 69  Vdbe(Parse*);.#i
282e0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54  fndef SQLITE_UNT
282f0 45 53 54 41 42 4c 45 0a 76 6f 69 64 20 73 71 6c  ESTABLE.void sql
28300 69 74 65 33 50 72 6e 67 53 61 76 65 53 74 61 74  ite3PrngSaveStat
28310 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  e(void);.void sq
28320 6c 69 74 65 33 50 72 6e 67 52 65 73 74 6f 72 65  lite3PrngRestore
28330 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 23 65 6e  State(void);.#en
28340 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
28350 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69  RollbackAll(sqli
28360 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  te3*,int);.void 
28370 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66  sqlite3CodeVerif
28380 79 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20  ySchema(Parse*, 
28390 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
283a0 65 33 43 6f 64 65 56 65 72 69 66 79 4e 61 6d 65  e3CodeVerifyName
283b0 64 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20  dSchema(Parse*, 
283c0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 29  const char *zDb)
283d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65  ;.void sqlite3Be
283e0 67 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28 50  ginTransaction(P
283f0 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  arse*, int);.voi
28400 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 54  d sqlite3CommitT
28410 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65  ransaction(Parse
28420 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
28430 52 6f 6c 6c 62 61 63 6b 54 72 61 6e 73 61 63 74  RollbackTransact
28440 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  ion(Parse*);.voi
28450 64 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69  d sqlite3Savepoi
28460 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  nt(Parse*, int, 
28470 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
28480 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f  lite3CloseSavepo
28490 69 6e 74 73 28 73 71 6c 69 74 65 33 20 2a 29 3b  ints(sqlite3 *);
284a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4c 65 61  .void sqlite3Lea
284b0 76 65 4d 75 74 65 78 41 6e 64 43 6c 6f 73 65 5a  veMutexAndCloseZ
284c0 6f 6d 62 69 65 28 73 71 6c 69 74 65 33 2a 29 3b  ombie(sqlite3*);
284d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
284e0 49 73 43 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a  IsConstant(Expr*
284f0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
28500 70 72 49 73 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a  prIsConstantNotJ
28510 6f 69 6e 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20  oin(Expr*);.int 
28520 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e  sqlite3ExprIsCon
28530 73 74 61 6e 74 4f 72 46 75 6e 63 74 69 6f 6e 28  stantOrFunction(
28540 45 78 70 72 2a 2c 20 75 38 29 3b 0a 69 6e 74 20  Expr*, u8);.int 
28550 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e  sqlite3ExprIsCon
28560 73 74 61 6e 74 4f 72 47 72 6f 75 70 42 79 28 50  stantOrGroupBy(P
28570 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78  arse*, Expr*, Ex
28580 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
28590 6c 69 74 65 33 45 78 70 72 49 73 54 61 62 6c 65  lite3ExprIsTable
285a0 43 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 2c 69  Constant(Expr*,i
285b0 6e 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  nt);.#ifdef SQLI
285c0 54 45 5f 45 4e 41 42 4c 45 5f 43 55 52 53 4f 52  TE_ENABLE_CURSOR
285d0 5f 48 49 4e 54 53 0a 69 6e 74 20 73 71 6c 69 74  _HINTS.int sqlit
285e0 65 33 45 78 70 72 43 6f 6e 74 61 69 6e 73 53 75  e3ExprContainsSu
285f0 62 71 75 65 72 79 28 45 78 70 72 2a 29 3b 0a 23  bquery(Expr*);.#
28600 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65  endif.int sqlite
28610 33 45 78 70 72 49 73 49 6e 74 65 67 65 72 28 45  3ExprIsInteger(E
28620 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74  xpr*, int*);.int
28630 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 6e 42   sqlite3ExprCanB
28640 65 4e 75 6c 6c 28 63 6f 6e 73 74 20 45 78 70 72  eNull(const Expr
28650 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
28660 78 70 72 4e 65 65 64 73 4e 6f 41 66 66 69 6e 69  xprNeedsNoAffini
28670 74 79 43 68 61 6e 67 65 28 63 6f 6e 73 74 20 45  tyChange(const E
28680 78 70 72 2a 2c 20 63 68 61 72 29 3b 0a 69 6e 74  xpr*, char);.int
28690 20 73 71 6c 69 74 65 33 49 73 52 6f 77 69 64 28   sqlite3IsRowid(
286a0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
286b0 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61  id sqlite3Genera
286c0 74 65 52 6f 77 44 65 6c 65 74 65 28 0a 20 20 20  teRowDelete(.   
286d0 20 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 54   Parse*,Table*,T
286e0 72 69 67 67 65 72 2a 2c 69 6e 74 2c 69 6e 74 2c  rigger*,int,int,
286f0 69 6e 74 2c 69 31 36 2c 75 38 2c 75 38 2c 75 38  int,i16,u8,u8,u8
28700 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
28710 74 65 33 47 65 6e 65 72 61 74 65 52 6f 77 49 6e  te3GenerateRowIn
28720 64 65 78 44 65 6c 65 74 65 28 50 61 72 73 65 2a  dexDelete(Parse*
28730 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
28740 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a  nt, int*, int);.
28750 69 6e 74 20 73 71 6c 69 74 65 33 47 65 6e 65 72  int sqlite3Gener
28760 61 74 65 49 6e 64 65 78 4b 65 79 28 50 61 72 73  ateIndexKey(Pars
28770 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c  e*, Index*, int,
28780 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c   int, int, int*,
28790 49 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Index*,int);.voi
287a0 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  d sqlite3Resolve
287b0 50 61 72 74 49 64 78 4c 61 62 65 6c 28 50 61 72  PartIdxLabel(Par
287c0 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  se*,int);.void s
287d0 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 43 6f  qlite3GenerateCo
287e0 6e 73 74 72 61 69 6e 74 43 68 65 63 6b 73 28 50  nstraintChecks(P
287f0 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74  arse*,Table*,int
28800 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e  *,int,int,int,in
28810 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t,.             
28820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28830 20 20 20 20 20 20 20 20 75 38 2c 75 38 2c 69 6e          u8,u8,in
28840 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 23 69  t,int*,int*);.#i
28850 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
28860 4c 45 5f 4e 55 4c 4c 5f 54 52 49 4d 0a 20 20 76  LE_NULL_TRIM.  v
28870 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74 4d 61  oid sqlite3SetMa
28880 6b 65 52 65 63 6f 72 64 50 35 28 56 64 62 65 2a  keRecordP5(Vdbe*
28890 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a  ,Table*);.#else.
288a0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
288b0 53 65 74 4d 61 6b 65 52 65 63 6f 72 64 50 35 28  SetMakeRecordP5(
288c0 41 2c 42 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64  A,B).#endif.void
288d0 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74 65   sqlite3Complete
288e0 49 6e 73 65 72 74 69 6f 6e 28 50 61 72 73 65 2a  Insertion(Parse*
288f0 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c  ,Table*,int,int,
28900 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74  int,int*,int,int
28910 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,int);.int sqlit
28920 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49 6e  e3OpenTableAndIn
28930 64 69 63 65 73 28 50 61 72 73 65 2a 2c 20 54 61  dices(Parse*, Ta
28940 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 2c 20 69  ble*, int, u8, i
28950 6e 74 2c 20 75 38 2a 2c 20 69 6e 74 2a 2c 20 69  nt, u8*, int*, i
28960 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  nt*);.void sqlit
28970 65 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72  e3BeginWriteOper
28980 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e  ation(Parse*, in
28990 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
289a0 6c 69 74 65 33 4d 75 6c 74 69 57 72 69 74 65 28  lite3MultiWrite(
289b0 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
289c0 6c 69 74 65 33 4d 61 79 41 62 6f 72 74 28 50 61  lite3MayAbort(Pa
289d0 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
289e0 74 65 33 48 61 6c 74 43 6f 6e 73 74 72 61 69 6e  te3HaltConstrain
289f0 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  t(Parse*, int, i
28a00 6e 74 2c 20 63 68 61 72 2a 2c 20 69 38 2c 20 75  nt, char*, i8, u
28a10 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  8);.void sqlite3
28a20 55 6e 69 71 75 65 43 6f 6e 73 74 72 61 69 6e 74  UniqueConstraint
28a30 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 49 6e  (Parse*, int, In
28a40 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dex*);.void sqli
28a50 74 65 33 52 6f 77 69 64 43 6f 6e 73 74 72 61 69  te3RowidConstrai
28a60 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  nt(Parse*, int, 
28a70 54 61 62 6c 65 2a 29 3b 0a 45 78 70 72 20 2a 73  Table*);.Expr *s
28a80 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 73 71  qlite3ExprDup(sq
28a90 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74  lite3*,Expr*,int
28aa0 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c  );.ExprList *sql
28ab0 69 74 65 33 45 78 70 72 4c 69 73 74 44 75 70 28  ite3ExprListDup(
28ac0 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69 73  sqlite3*,ExprLis
28ad0 74 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74  t*,int);.SrcList
28ae0 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74   *sqlite3SrcList
28af0 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 72 63  Dup(sqlite3*,Src
28b00 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69  List*,int);.IdLi
28b10 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73  st *sqlite3IdLis
28b20 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 49 64  tDup(sqlite3*,Id
28b30 4c 69 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a  List*);.Select *
28b40 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 75 70  sqlite3SelectDup
28b50 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74  (sqlite3*,Select
28b60 2a 2c 69 6e 74 29 3b 0a 23 69 66 20 53 45 4c 45  *,int);.#if SELE
28b70 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a  CTTRACE_ENABLED.
28b80 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65  void sqlite3Sele
28b90 63 74 53 65 74 4e 61 6d 65 28 53 65 6c 65 63 74  ctSetName(Select
28ba0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
28bb0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
28bc0 71 6c 69 74 65 33 53 65 6c 65 63 74 53 65 74 4e  qlite3SelectSetN
28bd0 61 6d 65 28 41 2c 42 29 0a 23 65 6e 64 69 66 0a  ame(A,B).#endif.
28be0 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 73 65  void sqlite3Inse
28bf0 72 74 42 75 69 6c 74 69 6e 46 75 6e 63 73 28 46  rtBuiltinFuncs(F
28c00 75 6e 63 44 65 66 2a 2c 69 6e 74 29 3b 0a 46 75  uncDef*,int);.Fu
28c10 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33 46 69  ncDef *sqlite3Fi
28c20 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74  ndFunction(sqlit
28c30 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
28c40 69 6e 74 2c 75 38 2c 75 38 29 3b 0a 76 6f 69 64  int,u8,u8);.void
28c50 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72   sqlite3Register
28c60 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73  BuiltinFunctions
28c70 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
28c80 69 74 65 33 52 65 67 69 73 74 65 72 44 61 74 65  ite3RegisterDate
28c90 54 69 6d 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f  TimeFunctions(vo
28ca0 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  id);.void sqlite
28cb0 33 52 65 67 69 73 74 65 72 50 65 72 43 6f 6e 6e  3RegisterPerConn
28cc0 65 63 74 69 6f 6e 42 75 69 6c 74 69 6e 46 75 6e  ectionBuiltinFun
28cd0 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29  ctions(sqlite3*)
28ce0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66  ;.int sqlite3Saf
28cf0 65 74 79 43 68 65 63 6b 4f 6b 28 73 71 6c 69 74  etyCheckOk(sqlit
28d00 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  e3*);.int sqlite
28d10 33 53 61 66 65 74 79 43 68 65 63 6b 53 69 63 6b  3SafetyCheckSick
28d20 4f 72 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a  OrOk(sqlite3*);.
28d30 76 6f 69 64 20 73 71 6c 69 74 65 33 43 68 61 6e  void sqlite3Chan
28d40 67 65 43 6f 6f 6b 69 65 28 50 61 72 73 65 2a 2c  geCookie(Parse*,
28d50 20 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66   int);..#if !def
28d60 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
28d70 5f 56 49 45 57 29 20 26 26 20 21 64 65 66 69 6e  _VIEW) && !defin
28d80 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ed(SQLITE_OMIT_T
28d90 52 49 47 47 45 52 29 0a 76 6f 69 64 20 73 71 6c  RIGGER).void sql
28da0 69 74 65 33 4d 61 74 65 72 69 61 6c 69 7a 65 56  ite3MaterializeV
28db0 69 65 77 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  iew(Parse*, Tabl
28dc0 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
28dd0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
28de0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49   SQLITE_OMIT_TRI
28df0 47 47 45 52 0a 20 20 76 6f 69 64 20 73 71 6c 69  GGER.  void sqli
28e00 74 65 33 42 65 67 69 6e 54 72 69 67 67 65 72 28  te3BeginTrigger(
28e10 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 54  Parse*, Token*,T
28e20 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 49 64  oken*,int,int,Id
28e30 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 0a  List*,SrcList*,.
28e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28e50 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a             Expr*
28e60 2c 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f  ,int, int);.  vo
28e70 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68  id sqlite3Finish
28e80 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20  Trigger(Parse*, 
28e90 54 72 69 67 67 65 72 53 74 65 70 2a 2c 20 54 6f  TriggerStep*, To
28ea0 6b 65 6e 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ken*);.  void sq
28eb0 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72  lite3DropTrigger
28ec0 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
28ed0 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  *, int);.  void 
28ee0 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67  sqlite3DropTrigg
28ef0 65 72 50 74 72 28 50 61 72 73 65 2a 2c 20 54 72  erPtr(Parse*, Tr
28f00 69 67 67 65 72 2a 29 3b 0a 20 20 54 72 69 67 67  igger*);.  Trigg
28f10 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  er *sqlite3Trigg
28f20 65 72 73 45 78 69 73 74 28 50 61 72 73 65 20 2a  ersExist(Parse *
28f30 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 45  , Table*, int, E
28f40 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 20 2a 70  xprList*, int *p
28f50 4d 61 73 6b 29 3b 0a 20 20 54 72 69 67 67 65 72  Mask);.  Trigger
28f60 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
28f70 4c 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61  List(Parse *, Ta
28f80 62 6c 65 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73  ble *);.  void s
28f90 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69  qlite3CodeRowTri
28fa0 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69  gger(Parse*, Tri
28fb0 67 67 65 72 20 2a 2c 20 69 6e 74 2c 20 45 78 70  gger *, int, Exp
28fc0 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 54 61 62  rList*, int, Tab
28fd0 6c 65 20 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  le *,.          
28fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28ff0 20 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29    int, int, int)
29000 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
29010 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44 69  CodeRowTriggerDi
29020 72 65 63 74 28 50 61 72 73 65 20 2a 2c 20 54 72  rect(Parse *, Tr
29030 69 67 67 65 72 20 2a 2c 20 54 61 62 6c 65 20 2a  igger *, Table *
29040 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
29050 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 56  ;.  void sqliteV
29060 69 65 77 54 72 69 67 67 65 72 73 28 50 61 72 73  iewTriggers(Pars
29070 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72  e*, Table*, Expr
29080 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74  *, int, ExprList
29090 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
290a0 65 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 53  e3DeleteTriggerS
290b0 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 20 54 72  tep(sqlite3*, Tr
290c0 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 20 20 54  iggerStep*);.  T
290d0 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69  riggerStep *sqli
290e0 74 65 33 54 72 69 67 67 65 72 53 65 6c 65 63 74  te3TriggerSelect
290f0 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 53 65  Step(sqlite3*,Se
29100 6c 65 63 74 2a 29 3b 0a 20 20 54 72 69 67 67 65  lect*);.  Trigge
29110 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72  rStep *sqlite3Tr
29120 69 67 67 65 72 49 6e 73 65 72 74 53 74 65 70 28  iggerInsertStep(
29130 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c  sqlite3*,Token*,
29140 20 49 64 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20   IdList*,.      
29150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29170 20 20 53 65 6c 65 63 74 2a 2c 75 38 29 3b 0a 20    Select*,u8);. 
29180 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71   TriggerStep *sq
29190 6c 69 74 65 33 54 72 69 67 67 65 72 55 70 64 61  lite3TriggerUpda
291a0 74 65 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c  teStep(sqlite3*,
291b0 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a  Token*,ExprList*
291c0 2c 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20  , Expr*, u8);.  
291d0 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c  TriggerStep *sql
291e0 69 74 65 33 54 72 69 67 67 65 72 44 65 6c 65 74  ite3TriggerDelet
291f0 65 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54  eStep(sqlite3*,T
29200 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a 29 3b 0a 20  oken*, Expr*);. 
29210 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c   void sqlite3Del
29220 65 74 65 54 72 69 67 67 65 72 28 73 71 6c 69 74  eteTrigger(sqlit
29230 65 33 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a  e3*, Trigger*);.
29240 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e    void sqlite3Un
29250 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69  linkAndDeleteTri
29260 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e  gger(sqlite3*,in
29270 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  t,const char*);.
29280 20 20 75 33 32 20 73 71 6c 69 74 65 33 54 72 69    u32 sqlite3Tri
29290 67 67 65 72 43 6f 6c 6d 61 73 6b 28 50 61 72 73  ggerColmask(Pars
292a0 65 2a 2c 54 72 69 67 67 65 72 2a 2c 45 78 70 72  e*,Trigger*,Expr
292b0 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61  List*,int,int,Ta
292c0 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20 64 65 66  ble*,int);.# def
292d0 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73 65  ine sqlite3Parse
292e0 54 6f 70 6c 65 76 65 6c 28 70 29 20 28 28 70 29  Toplevel(p) ((p)
292f0 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3f 20 28 70  ->pToplevel ? (p
29300 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3a 20 28  )->pToplevel : (
29310 70 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  p)).# define sql
29320 69 74 65 33 49 73 54 6f 70 6c 65 76 65 6c 28 70  ite3IsToplevel(p
29330 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65  ) ((p)->pTopleve
29340 6c 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65  l==0).#else.# de
29350 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67  fine sqlite3Trig
29360 67 65 72 73 45 78 69 73 74 28 42 2c 43 2c 44 2c  gersExist(B,C,D,
29370 45 2c 46 29 20 30 0a 23 20 64 65 66 69 6e 65 20  E,F) 0.# define 
29380 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69  sqlite3DeleteTri
29390 67 67 65 72 28 41 2c 42 29 0a 23 20 64 65 66 69  gger(A,B).# defi
293a0 6e 65 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72  ne sqlite3DropTr
293b0 69 67 67 65 72 50 74 72 28 41 2c 42 29 0a 23 20  iggerPtr(A,B).# 
293c0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55 6e  define sqlite3Un
293d0 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69  linkAndDeleteTri
293e0 67 67 65 72 28 41 2c 42 2c 43 29 0a 23 20 64 65  gger(A,B,C).# de
293f0 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65  fine sqlite3Code
29400 52 6f 77 54 72 69 67 67 65 72 28 41 2c 42 2c 43  RowTrigger(A,B,C
29410 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23 20  ,D,E,F,G,H,I).# 
29420 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
29430 64 65 52 6f 77 54 72 69 67 67 65 72 44 69 72 65  deRowTriggerDire
29440 63 74 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a  ct(A,B,C,D,E,F).
29450 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
29460 54 72 69 67 67 65 72 4c 69 73 74 28 58 2c 20 59  TriggerList(X, Y
29470 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ) 0.# define sql
29480 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65  ite3ParseTopleve
29490 6c 28 70 29 20 70 0a 23 20 64 65 66 69 6e 65 20  l(p) p.# define 
294a0 73 71 6c 69 74 65 33 49 73 54 6f 70 6c 65 76 65  sqlite3IsTopleve
294b0 6c 28 70 29 20 31 0a 23 20 64 65 66 69 6e 65 20  l(p) 1.# define 
294c0 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f  sqlite3TriggerCo
294d0 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c  lmask(A,B,C,D,E,
294e0 46 2c 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a 69  F,G) 0.#endif..i
294f0 6e 74 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54 79  nt sqlite3JoinTy
29500 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  pe(Parse*, Token
29510 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
29520 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
29530 43 72 65 61 74 65 46 6f 72 65 69 67 6e 4b 65 79  CreateForeignKey
29540 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
29550 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70 72  t*, Token*, Expr
29560 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  List*, int);.voi
29570 64 20 73 71 6c 69 74 65 33 44 65 66 65 72 46 6f  d sqlite3DeferFo
29580 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c  reignKey(Parse*,
29590 20 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53   int);.#ifndef S
295a0 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f  QLITE_OMIT_AUTHO
295b0 52 49 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20  RIZATION.  void 
295c0 73 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 28  sqlite3AuthRead(
295d0 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63 68  Parse*,Expr*,Sch
295e0 65 6d 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b 0a  ema*,SrcList*);.
295f0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74    int sqlite3Aut
29600 68 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 69 6e  hCheck(Parse*,in
29610 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  t, const char*, 
29620 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
29630 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
29640 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e  d sqlite3AuthCon
29650 74 65 78 74 50 75 73 68 28 50 61 72 73 65 2a 2c  textPush(Parse*,
29660 20 41 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20 63   AuthContext*, c
29670 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76  onst char*);.  v
29680 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 43  oid sqlite3AuthC
29690 6f 6e 74 65 78 74 50 6f 70 28 41 75 74 68 43 6f  ontextPop(AuthCo
296a0 6e 74 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20 73  ntext*);.  int s
296b0 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 43 6f  qlite3AuthReadCo
296c0 6c 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  l(Parse*, const 
296d0 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63 68  char *, const ch
296e0 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73  ar *, int);.#els
296f0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
29700 65 33 41 75 74 68 52 65 61 64 28 61 2c 62 2c 63  e3AuthRead(a,b,c
29710 2c 64 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,d).# define sql
29720 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 61 2c  ite3AuthCheck(a,
29730 62 2c 63 2c 64 2c 65 29 20 20 20 20 53 51 4c 49  b,c,d,e)    SQLI
29740 54 45 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20 73  TE_OK.# define s
29750 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78  qlite3AuthContex
29760 74 50 75 73 68 28 61 2c 62 2c 63 29 0a 23 20 64  tPush(a,b,c).# d
29770 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
29780 68 43 6f 6e 74 65 78 74 50 6f 70 28 61 29 20 20  hContextPop(a)  
29790 28 28 76 6f 69 64 29 28 61 29 29 0a 23 65 6e 64  ((void)(a)).#end
297a0 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  if.void sqlite3A
297b0 74 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78  ttach(Parse*, Ex
297c0 70 72 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72  pr*, Expr*, Expr
297d0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
297e0 44 65 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45  Detach(Parse*, E
297f0 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
29800 74 65 33 46 69 78 49 6e 69 74 28 44 62 46 69 78  te3FixInit(DbFix
29810 65 72 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e 74  er*, Parse*, int
29820 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
29830 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  onst Token*);.in
29840 74 20 73 71 6c 69 74 65 33 46 69 78 53 72 63 4c  t sqlite3FixSrcL
29850 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20 53 72  ist(DbFixer*, Sr
29860 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  cList*);.int sql
29870 69 74 65 33 46 69 78 53 65 6c 65 63 74 28 44 62  ite3FixSelect(Db
29880 46 69 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29  Fixer*, Select*)
29890 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
298a0 45 78 70 72 28 44 62 46 69 78 65 72 2a 2c 20 45  Expr(DbFixer*, E
298b0 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
298c0 65 33 46 69 78 45 78 70 72 4c 69 73 74 28 44 62  e3FixExprList(Db
298d0 46 69 78 65 72 2a 2c 20 45 78 70 72 4c 69 73 74  Fixer*, ExprList
298e0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
298f0 69 78 54 72 69 67 67 65 72 53 74 65 70 28 44 62  ixTriggerStep(Db
29900 46 69 78 65 72 2a 2c 20 54 72 69 67 67 65 72 53  Fixer*, TriggerS
29910 74 65 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  tep*);.int sqlit
29920 65 33 41 74 6f 46 28 63 6f 6e 73 74 20 63 68 61  e3AtoF(const cha
29930 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20 69  r *z, double*, i
29940 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c  nt, u8);.int sql
29950 69 74 65 33 47 65 74 49 6e 74 33 32 28 63 6f 6e  ite3GetInt32(con
29960 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a 29  st char *, int*)
29970 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f  ;.int sqlite3Ato
29980 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  i(const char*);.
29990 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 31 36  int sqlite3Utf16
299a0 42 79 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76 6f  ByteLen(const vo
299b0 69 64 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e  id *pData, int n
299c0 43 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74  Char);.int sqlit
299d0 65 33 55 74 66 38 43 68 61 72 4c 65 6e 28 63 6f  e3Utf8CharLen(co
299e0 6e 73 74 20 63 68 61 72 20 2a 70 44 61 74 61 2c  nst char *pData,
299f0 20 69 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33 32   int nByte);.u32
29a00 20 73 71 6c 69 74 65 33 55 74 66 38 52 65 61 64   sqlite3Utf8Read
29a10 28 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 4c 6f  (const u8**);.Lo
29a20 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45  gEst sqlite3LogE
29a30 73 74 28 75 36 34 29 3b 0a 4c 6f 67 45 73 74 20  st(u64);.LogEst 
29a40 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 41 64 64  sqlite3LogEstAdd
29a50 28 4c 6f 67 45 73 74 2c 4c 6f 67 45 73 74 29 3b  (LogEst,LogEst);
29a60 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
29a70 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
29a80 45 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33  E.LogEst sqlite3
29a90 4c 6f 67 45 73 74 46 72 6f 6d 44 6f 75 62 6c 65  LogEstFromDouble
29aa0 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6e 64 69 66  (double);.#endif
29ab0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
29ac0 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f  ITE_ENABLE_STMT_
29ad0 53 43 41 4e 53 54 41 54 55 53 29 20 7c 7c 20 5c  SCANSTATUS) || \
29ae0 0a 20 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c  .    defined(SQL
29af0 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
29b00 5f 4f 52 5f 53 54 41 54 34 29 20 7c 7c 20 5c 0a  _OR_STAT4) || \.
29b10 20 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c 49      defined(SQLI
29b20 54 45 5f 45 58 50 4c 41 49 4e 5f 45 53 54 49 4d  TE_EXPLAIN_ESTIM
29b30 41 54 45 44 5f 52 4f 57 53 29 0a 75 36 34 20 73  ATED_ROWS).u64 s
29b40 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e  qlite3LogEstToIn
29b50 74 28 4c 6f 67 45 73 74 29 3b 0a 23 65 6e 64 69  t(LogEst);.#endi
29b60 66 0a 56 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  f.VList *sqlite3
29b70 56 4c 69 73 74 41 64 64 28 73 71 6c 69 74 65 33  VListAdd(sqlite3
29b80 2a 2c 56 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63  *,VList*,const c
29b90 68 61 72 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 63  har*,int,int);.c
29ba0 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
29bb0 65 33 56 4c 69 73 74 4e 75 6d 54 6f 4e 61 6d 65  e3VListNumToName
29bc0 28 56 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 69 6e  (VList*,int);.in
29bd0 74 20 73 71 6c 69 74 65 33 56 4c 69 73 74 4e 61  t sqlite3VListNa
29be0 6d 65 54 6f 4e 75 6d 28 56 4c 69 73 74 2a 2c 63  meToNum(VList*,c
29bf0 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b  onst char*,int);
29c00 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73  ../*.** Routines
29c10 20 74 6f 20 72 65 61 64 20 61 6e 64 20 77 72 69   to read and wri
29c20 74 65 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67  te variable-leng
29c30 74 68 20 69 6e 74 65 67 65 72 73 2e 20 20 54 68  th integers.  Th
29c40 65 73 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62  ese used to.** b
29c50 65 20 64 65 66 69 6e 65 64 20 6c 6f 63 61 6c 6c  e defined locall
29c60 79 2c 20 62 75 74 20 6e 6f 77 20 77 65 20 75 73  y, but now we us
29c70 65 20 74 68 65 20 76 61 72 69 6e 74 20 72 6f 75  e the varint rou
29c80 74 69 6e 65 73 20 69 6e 20 74 68 65 20 75 74 69  tines in the uti
29c90 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2f 0a  l.c.** file..*/.
29ca0 69 6e 74 20 73 71 6c 69 74 65 33 50 75 74 56 61  int sqlite3PutVa
29cb0 72 69 6e 74 28 75 6e 73 69 67 6e 65 64 20 63 68  rint(unsigned ch
29cc0 61 72 2a 2c 20 75 36 34 29 3b 0a 75 38 20 73 71  ar*, u64);.u8 sq
29cd0 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 28 63  lite3GetVarint(c
29ce0 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
29cf0 61 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a 75 38  ar *, u64 *);.u8
29d00 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e   sqlite3GetVarin
29d10 74 33 32 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e  t32(const unsign
29d20 65 64 20 63 68 61 72 20 2a 2c 20 75 33 32 20 2a  ed char *, u32 *
29d30 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61  );.int sqlite3Va
29d40 72 69 6e 74 4c 65 6e 28 75 36 34 20 76 29 3b 0a  rintLen(u64 v);.
29d50 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 6d 6f  ./*.** The commo
29d60 6e 20 63 61 73 65 20 69 73 20 66 6f 72 20 61 20  n case is for a 
29d70 76 61 72 69 6e 74 20 74 6f 20 62 65 20 61 20 73  varint to be a s
29d80 69 6e 67 6c 65 20 62 79 74 65 2e 20 20 54 68 65  ingle byte.  The
29d90 79 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 6d  y following.** m
29da0 61 63 72 6f 73 20 68 61 6e 64 6c 65 20 74 68 65  acros handle the
29db0 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 69 74   common case wit
29dc0 68 6f 75 74 20 61 20 70 72 6f 63 65 64 75 72 65  hout a procedure
29dd0 20 63 61 6c 6c 2c 20 62 75 74 20 74 68 65 6e 20   call, but then 
29de0 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 70 72 6f 63  call.** the proc
29df0 65 64 75 72 65 20 66 6f 72 20 6c 61 72 67 65 72  edure for larger
29e00 20 76 61 72 69 6e 74 73 2e 0a 2a 2f 0a 23 64 65   varints..*/.#de
29e10 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74 33 32  fine getVarint32
29e20 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28  (A,B)  \.  (u8)(
29e30 28 2a 28 41 29 3c 28 75 38 29 30 78 38 30 29 3f  (*(A)<(u8)0x80)?
29e40 28 28 42 29 3d 28 75 33 32 29 2a 28 41 29 29 2c  ((B)=(u32)*(A)),
29e50 31 3a 73 71 6c 69 74 65 33 47 65 74 56 61 72 69  1:sqlite3GetVari
29e60 6e 74 33 32 28 28 41 29 2c 28 75 33 32 20 2a 29  nt32((A),(u32 *)
29e70 26 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20 70  &(B))).#define p
29e80 75 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20  utVarint32(A,B) 
29e90 20 5c 0a 20 20 28 75 38 29 28 28 28 75 33 32 29   \.  (u8)(((u32)
29ea0 28 42 29 3c 28 75 33 32 29 30 78 38 30 29 3f 28  (B)<(u32)0x80)?(
29eb0 2a 28 41 29 3d 28 75 6e 73 69 67 6e 65 64 20 63  *(A)=(unsigned c
29ec0 68 61 72 29 28 42 29 29 2c 31 3a 5c 0a 20 20 73  har)(B)),1:\.  s
29ed0 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 28  qlite3PutVarint(
29ee0 28 41 29 2c 28 42 29 29 29 0a 23 64 65 66 69 6e  (A),(B))).#defin
29ef0 65 20 67 65 74 56 61 72 69 6e 74 20 20 20 20 73  e getVarint    s
29f00 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 0a  qlite3GetVarint.
29f10 23 64 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e  #define putVarin
29f20 74 20 20 20 20 73 71 6c 69 74 65 33 50 75 74 56  t    sqlite3PutV
29f30 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63 68  arint...const ch
29f40 61 72 20 2a 73 71 6c 69 74 65 33 49 6e 64 65 78  ar *sqlite3Index
29f50 41 66 66 69 6e 69 74 79 53 74 72 28 73 71 6c 69  AffinityStr(sqli
29f60 74 65 33 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 76  te3*, Index*);.v
29f70 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65  oid sqlite3Table
29f80 41 66 66 69 6e 69 74 79 28 56 64 62 65 2a 2c 20  Affinity(Vdbe*, 
29f90 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 63 68  Table*, int);.ch
29fa0 61 72 20 73 71 6c 69 74 65 33 43 6f 6d 70 61 72  ar sqlite3Compar
29fb0 65 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a  eAffinity(Expr *
29fc0 70 45 78 70 72 2c 20 63 68 61 72 20 61 66 66 32  pExpr, char aff2
29fd0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
29fe0 64 65 78 41 66 66 69 6e 69 74 79 4f 6b 28 45 78  dexAffinityOk(Ex
29ff0 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20  pr *pExpr, char 
2a000 69 64 78 5f 61 66 66 69 6e 69 74 79 29 3b 0a 63  idx_affinity);.c
2a010 68 61 72 20 73 71 6c 69 74 65 33 54 61 62 6c 65  har sqlite3Table
2a020 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 54  ColumnAffinity(T
2a030 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 63 68 61 72  able*,int);.char
2a040 20 73 71 6c 69 74 65 33 45 78 70 72 41 66 66 69   sqlite3ExprAffi
2a050 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78 70 72  nity(Expr *pExpr
2a060 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74  );.int sqlite3At
2a070 6f 69 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a  oi64(const char*
2a080 2c 20 69 36 34 2a 2c 20 69 6e 74 2c 20 75 38 29  , i64*, int, u8)
2a090 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 65 63  ;.int sqlite3Dec
2a0a0 4f 72 48 65 78 54 6f 49 36 34 28 63 6f 6e 73 74  OrHexToI64(const
2a0b0 20 63 68 61 72 2a 2c 20 69 36 34 2a 29 3b 0a 76   char*, i64*);.v
2a0c0 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72  oid sqlite3Error
2a0d0 57 69 74 68 4d 73 67 28 73 71 6c 69 74 65 33 2a  WithMsg(sqlite3*
2a0e0 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  , int, const cha
2a0f0 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71  r*,...);.void sq
2a100 6c 69 74 65 33 45 72 72 6f 72 28 73 71 6c 69 74  lite3Error(sqlit
2a110 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e3*,int);.void s
2a120 71 6c 69 74 65 33 53 79 73 74 65 6d 45 72 72 6f  qlite3SystemErro
2a130 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b  r(sqlite3*,int);
2a140 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 48 65  .void *sqlite3He
2a150 78 54 6f 42 6c 6f 62 28 73 71 6c 69 74 65 33 2a  xToBlob(sqlite3*
2a160 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c  , const char *z,
2a170 20 69 6e 74 20 6e 29 3b 0a 75 38 20 73 71 6c 69   int n);.u8 sqli
2a180 74 65 33 48 65 78 54 6f 49 6e 74 28 69 6e 74 20  te3HexToInt(int 
2a190 68 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  h);.int sqlite3T
2a1a0 77 6f 50 61 72 74 4e 61 6d 65 28 50 61 72 73 65  woPartName(Parse
2a1b0 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b   *, Token *, Tok
2a1c0 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b  en *, Token **);
2a1d0 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ..#if defined(SQ
2a1e0 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41  LITE_NEED_ERR_NA
2a1f0 4d 45 29 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  ME).const char *
2a200 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 69  sqlite3ErrName(i
2a210 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 63 6f 6e  nt);.#endif..con
2a220 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
2a230 45 72 72 53 74 72 28 69 6e 74 29 3b 0a 69 6e 74  ErrStr(int);.int
2a240 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68 65   sqlite3ReadSche
2a250 6d 61 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  ma(Parse *pParse
2a260 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
2a270 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28 73  te3FindCollSeq(s
2a280 71 6c 69 74 65 33 2a 2c 75 38 20 65 6e 63 2c 20  qlite3*,u8 enc, 
2a290 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29  const char*,int)
2a2a0 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
2a2b0 65 33 4c 6f 63 61 74 65 43 6f 6c 6c 53 65 71 28  e3LocateCollSeq(
2a2c0 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 63  Parse *pParse, c
2a2d0 6f 6e 73 74 20 63 68 61 72 2a 7a 4e 61 6d 65 29  onst char*zName)
2a2e0 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
2a2f0 65 33 45 78 70 72 43 6f 6c 6c 53 65 71 28 50 61  e3ExprCollSeq(Pa
2a300 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70  rse *pParse, Exp
2a310 72 20 2a 70 45 78 70 72 29 3b 0a 45 78 70 72 20  r *pExpr);.Expr 
2a320 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64 64 43  *sqlite3ExprAddC
2a330 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28 50 61 72 73  ollateToken(Pars
2a340 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 2a  e *pParse, Expr*
2a350 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 20  , const Token*, 
2a360 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  int);.Expr *sqli
2a370 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c 61 74  te3ExprAddCollat
2a380 65 53 74 72 69 6e 67 28 50 61 72 73 65 2a 2c 45  eString(Parse*,E
2a390 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  xpr*,const char*
2a3a0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
2a3b0 45 78 70 72 53 6b 69 70 43 6f 6c 6c 61 74 65 28  ExprSkipCollate(
2a3c0 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
2a3d0 74 65 33 43 68 65 63 6b 43 6f 6c 6c 53 65 71 28  te3CheckCollSeq(
2a3e0 50 61 72 73 65 20 2a 2c 20 43 6f 6c 6c 53 65 71  Parse *, CollSeq
2a3f0 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
2a400 43 68 65 63 6b 4f 62 6a 65 63 74 4e 61 6d 65 28  CheckObjectName(
2a410 50 61 72 73 65 20 2a 2c 20 63 6f 6e 73 74 20 63  Parse *, const c
2a420 68 61 72 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  har *);.void sql
2a430 69 74 65 33 56 64 62 65 53 65 74 43 68 61 6e 67  ite3VdbeSetChang
2a440 65 73 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e  es(sqlite3 *, in
2a450 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  t);.int sqlite3A
2a460 64 64 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34  ddInt64(i64*,i64
2a470 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 75  );.int sqlite3Su
2a480 62 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29  bInt64(i64*,i64)
2a490 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 6c  ;.int sqlite3Mul
2a4a0 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b  Int64(i64*,i64);
2a4b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 62 73 49  .int sqlite3AbsI
2a4c0 6e 74 33 32 28 69 6e 74 29 3b 0a 23 69 66 64 65  nt32(int);.#ifde
2a4d0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
2a4e0 38 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69 64 20 73  8_3_NAMES.void s
2a4f0 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69 78  qlite3FileSuffix
2a500 33 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  3(const char*, c
2a510 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  har*);.#else.# d
2a520 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 69 6c  efine sqlite3Fil
2a530 65 53 75 66 66 69 78 33 28 58 2c 59 29 0a 23 65  eSuffix3(X,Y).#e
2a540 6e 64 69 66 0a 75 38 20 73 71 6c 69 74 65 33 47  ndif.u8 sqlite3G
2a550 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74 20  etBoolean(const 
2a560 63 68 61 72 20 2a 7a 2c 75 38 29 3b 0a 0a 63 6f  char *z,u8);..co
2a570 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65  nst void *sqlite
2a580 33 56 61 6c 75 65 54 65 78 74 28 73 71 6c 69 74  3ValueText(sqlit
2a590 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a  e3_value*, u8);.
2a5a0 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65  int sqlite3Value
2a5b0 42 79 74 65 73 28 73 71 6c 69 74 65 33 5f 76 61  Bytes(sqlite3_va
2a5c0 6c 75 65 2a 2c 20 75 38 29 3b 0a 76 6f 69 64 20  lue*, u8);.void 
2a5d0 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53  sqlite3ValueSetS
2a5e0 74 72 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  tr(sqlite3_value
2a5f0 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f  *, int, const vo
2a600 69 64 20 2a 2c 75 38 2c 0a 20 20 20 20 20 20 20  id *,u8,.       
2a610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a620 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29   void(*)(void*))
2a630 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  ;.void sqlite3Va
2a640 6c 75 65 53 65 74 4e 75 6c 6c 28 73 71 6c 69 74  lueSetNull(sqlit
2a650 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 76 6f 69 64  e3_value*);.void
2a660 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65   sqlite3ValueFre
2a670 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  e(sqlite3_value*
2a680 29 3b 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  );.sqlite3_value
2a690 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65   *sqlite3ValueNe
2a6a0 77 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 63 68  w(sqlite3 *);.ch
2a6b0 61 72 20 2a 73 71 6c 69 74 65 33 55 74 66 31 36  ar *sqlite3Utf16
2a6c0 74 6f 38 28 73 71 6c 69 74 65 33 20 2a 2c 20 63  to8(sqlite3 *, c
2a6d0 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c  onst void*, int,
2a6e0 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   u8);.int sqlite
2a6f0 33 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 73  3ValueFromExpr(s
2a700 71 6c 69 74 65 33 20 2a 2c 20 45 78 70 72 20 2a  qlite3 *, Expr *
2a710 2c 20 75 38 2c 20 75 38 2c 20 73 71 6c 69 74 65  , u8, u8, sqlite
2a720 33 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69  3_value **);.voi
2a730 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70  d sqlite3ValueAp
2a740 70 6c 79 41 66 66 69 6e 69 74 79 28 73 71 6c 69  plyAffinity(sqli
2a750 74 65 33 5f 76 61 6c 75 65 20 2a 2c 20 75 38 2c  te3_value *, u8,
2a760 20 75 38 29 3b 0a 23 69 66 6e 64 65 66 20 53 51   u8);.#ifndef SQ
2a770 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f  LITE_AMALGAMATIO
2a780 4e 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75  N.extern const u
2a790 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c  nsigned char sql
2a7a0 69 74 65 33 4f 70 63 6f 64 65 50 72 6f 70 65 72  ite3OpcodeProper
2a7b0 74 79 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e  ty[];.extern con
2a7c0 73 74 20 63 68 61 72 20 73 71 6c 69 74 65 33 53  st char sqlite3S
2a7d0 74 72 42 49 4e 41 52 59 5b 5d 3b 0a 65 78 74 65  trBINARY[];.exte
2a7e0 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  rn const unsigne
2a7f0 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 55 70  d char sqlite3Up
2a800 70 65 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78  perToLower[];.ex
2a810 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67  tern const unsig
2a820 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33  ned char sqlite3
2a830 43 74 79 70 65 4d 61 70 5b 5d 3b 0a 65 78 74 65  CtypeMap[];.exte
2a840 72 6e 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 73  rn const Token s
2a850 71 6c 69 74 65 33 49 6e 74 54 6f 6b 65 6e 73 5b  qlite3IntTokens[
2a860 5d 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49 54 45  ];.extern SQLITE
2a870 5f 57 53 44 20 73 74 72 75 63 74 20 53 71 6c 69  _WSD struct Sqli
2a880 74 65 33 43 6f 6e 66 69 67 20 73 71 6c 69 74 65  te3Config sqlite
2a890 33 43 6f 6e 66 69 67 3b 0a 65 78 74 65 72 6e 20  3Config;.extern 
2a8a0 46 75 6e 63 44 65 66 48 61 73 68 20 73 71 6c 69  FuncDefHash sqli
2a8b0 74 65 33 42 75 69 6c 74 69 6e 46 75 6e 63 74 69  te3BuiltinFuncti
2a8c0 6f 6e 73 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  ons;.#ifndef SQL
2a8d0 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 65 78 74  ITE_OMIT_WSD.ext
2a8e0 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 50  ern int sqlite3P
2a8f0 65 6e 64 69 6e 67 42 79 74 65 3b 0a 23 65 6e 64  endingByte;.#end
2a900 69 66 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  if.#endif.void s
2a910 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f  qlite3RootPageMo
2a920 76 65 64 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  ved(sqlite3*, in
2a930 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
2a940 69 64 20 73 71 6c 69 74 65 33 52 65 69 6e 64 65  id sqlite3Reinde
2a950 78 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  x(Parse*, Token*
2a960 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
2a970 73 71 6c 69 74 65 33 41 6c 74 65 72 46 75 6e 63  sqlite3AlterFunc
2a980 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69  tions(void);.voi
2a990 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 52 65  d sqlite3AlterRe
2a9a0 6e 61 6d 65 54 61 62 6c 65 28 50 61 72 73 65 2a  nameTable(Parse*
2a9b0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65  , SrcList*, Toke
2a9c0 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
2a9d0 47 65 74 54 6f 6b 65 6e 28 63 6f 6e 73 74 20 75  GetToken(const u
2a9e0 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20  nsigned char *, 
2a9f0 69 6e 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  int *);.void sql
2aa00 69 74 65 33 4e 65 73 74 65 64 50 61 72 73 65 28  ite3NestedParse(
2aa10 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
2aa20 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20  ar*, ...);.void 
2aa30 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65  sqlite3ExpirePre
2aa40 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28  paredStatements(
2aa50 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73  sqlite3*);.int s
2aa60 71 6c 69 74 65 33 43 6f 64 65 53 75 62 73 65 6c  qlite3CodeSubsel
2aa70 65 63 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ect(Parse*, Expr
2aa80 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76   *, int, int);.v
2aa90 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63  oid sqlite3Selec
2aaa0 74 50 72 65 70 28 50 61 72 73 65 2a 2c 20 53 65  tPrep(Parse*, Se
2aab0 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65  lect*, NameConte
2aac0 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  xt*);.void sqlit
2aad0 65 33 53 65 6c 65 63 74 57 72 6f 6e 67 4e 75 6d  e3SelectWrongNum
2aae0 54 65 72 6d 73 45 72 72 6f 72 28 50 61 72 73 65  TermsError(Parse
2aaf0 20 2a 70 50 61 72 73 65 2c 20 53 65 6c 65 63 74   *pParse, Select
2ab00 20 2a 70 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   *p);.int sqlite
2ab10 33 4d 61 74 63 68 53 70 61 6e 4e 61 6d 65 28 63  3MatchSpanName(c
2ab20 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
2ab30 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
2ab40 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
2ab50 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
2ab60 65 73 6f 6c 76 65 45 78 70 72 4e 61 6d 65 73 28  esolveExprNames(
2ab70 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78  NameContext*, Ex
2ab80 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
2ab90 33 52 65 73 6f 6c 76 65 45 78 70 72 4c 69 73 74  3ResolveExprList
2aba0 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78  Names(NameContex
2abb0 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  t*, ExprList*);.
2abc0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f  void sqlite3Reso
2abd0 6c 76 65 53 65 6c 65 63 74 4e 61 6d 65 73 28 50  lveSelectNames(P
2abe0 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  arse*, Select*, 
2abf0 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76  NameContext*);.v
2ac00 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  oid sqlite3Resol
2ac10 76 65 53 65 6c 66 52 65 66 65 72 65 6e 63 65 28  veSelfReference(
2ac20 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e  Parse*,Table*,in
2ac30 74 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74  t,Expr*,ExprList
2ac40 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
2ac50 65 73 6f 6c 76 65 4f 72 64 65 72 47 72 6f 75 70  esolveOrderGroup
2ac60 42 79 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63  By(Parse*, Selec
2ac70 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63  t*, ExprList*, c
2ac80 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
2ac90 64 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44  d sqlite3ColumnD
2aca0 65 66 61 75 6c 74 28 56 64 62 65 20 2a 2c 20 54  efault(Vdbe *, T
2acb0 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  able *, int, int
2acc0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
2acd0 6c 74 65 72 46 69 6e 69 73 68 41 64 64 43 6f 6c  lterFinishAddCol
2ace0 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b  umn(Parse *, Tok
2acf0 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  en *);.void sqli
2ad00 74 65 33 41 6c 74 65 72 42 65 67 69 6e 41 64 64  te3AlterBeginAdd
2ad10 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20  Column(Parse *, 
2ad20 53 72 63 4c 69 73 74 20 2a 29 3b 0a 43 6f 6c 6c  SrcList *);.Coll
2ad30 53 65 71 20 2a 73 71 6c 69 74 65 33 47 65 74 43  Seq *sqlite3GetC
2ad40 6f 6c 6c 53 65 71 28 50 61 72 73 65 2a 2c 20 75  ollSeq(Parse*, u
2ad50 38 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f  8, CollSeq *, co
2ad60 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72  nst char*);.char
2ad70 20 73 71 6c 69 74 65 33 41 66 66 69 6e 69 74 79   sqlite3Affinity
2ad80 54 79 70 65 28 63 6f 6e 73 74 20 63 68 61 72 2a  Type(const char*
2ad90 2c 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  , u8*);.void sql
2ada0 69 74 65 33 41 6e 61 6c 79 7a 65 28 50 61 72 73  ite3Analyze(Pars
2adb0 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  e*, Token*, Toke
2adc0 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
2add0 49 6e 76 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65  InvokeBusyHandle
2ade0 72 28 42 75 73 79 48 61 6e 64 6c 65 72 2a 29 3b  r(BusyHandler*);
2adf0 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64  .int sqlite3Find
2ae00 44 62 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b  Db(sqlite3*, Tok
2ae10 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
2ae20 33 46 69 6e 64 44 62 4e 61 6d 65 28 73 71 6c 69  3FindDbName(sqli
2ae30 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  te3 *, const cha
2ae40 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  r *);.int sqlite
2ae50 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 73 71  3AnalysisLoad(sq
2ae60 6c 69 74 65 33 2a 2c 69 6e 74 20 69 44 42 29 3b  lite3*,int iDB);
2ae70 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c  .void sqlite3Del
2ae80 65 74 65 49 6e 64 65 78 53 61 6d 70 6c 65 73 28  eteIndexSamples(
2ae90 73 71 6c 69 74 65 33 2a 2c 49 6e 64 65 78 2a 29  sqlite3*,Index*)
2aea0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
2aeb0 66 61 75 6c 74 52 6f 77 45 73 74 28 49 6e 64 65  faultRowEst(Inde
2aec0 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  x*);.void sqlite
2aed0 33 52 65 67 69 73 74 65 72 4c 69 6b 65 46 75 6e  3RegisterLikeFun
2aee0 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 2c  ctions(sqlite3*,
2aef0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
2af00 65 33 49 73 4c 69 6b 65 46 75 6e 63 74 69 6f 6e  e3IsLikeFunction
2af10 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c  (sqlite3*,Expr*,
2af20 69 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f 69  int*,char*);.voi
2af30 64 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 43  d sqlite3SchemaC
2af40 6c 65 61 72 28 76 6f 69 64 20 2a 29 3b 0a 53 63  lear(void *);.Sc
2af50 68 65 6d 61 20 2a 73 71 6c 69 74 65 33 53 63 68  hema *sqlite3Sch
2af60 65 6d 61 47 65 74 28 73 71 6c 69 74 65 33 20 2a  emaGet(sqlite3 *
2af70 2c 20 42 74 72 65 65 20 2a 29 3b 0a 69 6e 74 20  , Btree *);.int 
2af80 73 71 6c 69 74 65 33 53 63 68 65 6d 61 54 6f 49  sqlite3SchemaToI
2af90 6e 64 65 78 28 73 71 6c 69 74 65 33 20 2a 64 62  ndex(sqlite3 *db
2afa0 2c 20 53 63 68 65 6d 61 20 2a 29 3b 0a 4b 65 79  , Schema *);.Key
2afb0 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79  Info *sqlite3Key
2afc0 49 6e 66 6f 41 6c 6c 6f 63 28 73 71 6c 69 74 65  InfoAlloc(sqlite
2afd0 33 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69  3*,int,int);.voi
2afe0 64 20 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f  d sqlite3KeyInfo
2aff0 55 6e 72 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b  Unref(KeyInfo*);
2b000 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65  .KeyInfo *sqlite
2b010 33 4b 65 79 49 6e 66 6f 52 65 66 28 4b 65 79 49  3KeyInfoRef(KeyI
2b020 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a  nfo*);.KeyInfo *
2b030 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 4f 66  sqlite3KeyInfoOf
2b040 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 49 6e  Index(Parse*, In
2b050 64 65 78 2a 29 3b 0a 23 69 66 64 65 66 20 53 51  dex*);.#ifdef SQ
2b060 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e 74 20 73  LITE_DEBUG.int s
2b070 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 49 73 57  qlite3KeyInfoIsW
2b080 72 69 74 65 61 62 6c 65 28 4b 65 79 49 6e 66 6f  riteable(KeyInfo
2b090 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73  *);.#endif.int s
2b0a0 71 6c 69 74 65 33 43 72 65 61 74 65 46 75 6e 63  qlite3CreateFunc
2b0b0 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73  (sqlite3 *, cons
2b0c0 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69  t char *, int, i
2b0d0 6e 74 2c 20 76 6f 69 64 20 2a 2c 0a 20 20 76 6f  nt, void *,.  vo
2b0e0 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63  id (*)(sqlite3_c
2b0f0 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
2b100 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20  te3_value **),. 
2b110 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65   void (*)(sqlite
2b120 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
2b130 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29  qlite3_value **)
2b140 2c 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74  , void (*)(sqlit
2b150 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20  e3_context*),.  
2b160 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a  FuncDestructor *
2b170 70 44 65 73 74 72 75 63 74 6f 72 0a 29 3b 0a 76  pDestructor.);.v
2b180 6f 69 64 20 73 71 6c 69 74 65 33 4f 6f 6d 46 61  oid sqlite3OomFa
2b190 75 6c 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  ult(sqlite3*);.v
2b1a0 6f 69 64 20 73 71 6c 69 74 65 33 4f 6f 6d 43 6c  oid sqlite3OomCl
2b1b0 65 61 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69  ear(sqlite3*);.i
2b1c0 6e 74 20 73 71 6c 69 74 65 33 41 70 69 45 78 69  nt sqlite3ApiExi
2b1d0 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69  t(sqlite3 *db, i
2b1e0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2b1f0 4f 70 65 6e 54 65 6d 70 44 61 74 61 62 61 73 65  OpenTempDatabase
2b200 28 50 61 72 73 65 20 2a 29 3b 0a 0a 76 6f 69 64  (Parse *);..void
2b210 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
2b220 49 6e 69 74 28 53 74 72 41 63 63 75 6d 2a 2c 20  Init(StrAccum*, 
2b230 73 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a 2c  sqlite3*, char*,
2b240 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
2b250 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
2b260 41 70 70 65 6e 64 28 53 74 72 41 63 63 75 6d 2a  Append(StrAccum*
2b270 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74  ,const char*,int
2b280 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
2b290 74 72 41 63 63 75 6d 41 70 70 65 6e 64 41 6c 6c  trAccumAppendAll
2b2a0 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74  (StrAccum*,const
2b2b0 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
2b2c0 6c 69 74 65 33 41 70 70 65 6e 64 43 68 61 72 28  lite3AppendChar(
2b2d0 53 74 72 41 63 63 75 6d 2a 2c 69 6e 74 2c 63 68  StrAccum*,int,ch
2b2e0 61 72 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  ar);.char *sqlit
2b2f0 65 33 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68  e3StrAccumFinish
2b300 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69  (StrAccum*);.voi
2b310 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75  d sqlite3StrAccu
2b320 6d 52 65 73 65 74 28 53 74 72 41 63 63 75 6d 2a  mReset(StrAccum*
2b330 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
2b340 65 6c 65 63 74 44 65 73 74 49 6e 69 74 28 53 65  electDestInit(Se
2b350 6c 65 63 74 44 65 73 74 2a 2c 69 6e 74 2c 69 6e  lectDest*,int,in
2b360 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  t);.Expr *sqlite
2b370 33 43 72 65 61 74 65 43 6f 6c 75 6d 6e 45 78 70  3CreateColumnExp
2b380 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 53 72 63  r(sqlite3 *, Src
2b390 4c 69 73 74 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  List *, int, int
2b3a0 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  );..void sqlite3
2b3b0 42 61 63 6b 75 70 52 65 73 74 61 72 74 28 73 71  BackupRestart(sq
2b3c0 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 29 3b  lite3_backup *);
2b3d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63  .void sqlite3Bac
2b3e0 6b 75 70 55 70 64 61 74 65 28 73 71 6c 69 74 65  kupUpdate(sqlite
2b3f0 33 5f 62 61 63 6b 75 70 20 2a 2c 20 50 67 6e 6f  3_backup *, Pgno
2b400 2c 20 63 6f 6e 73 74 20 75 38 20 2a 29 3b 0a 0a  , const u8 *);..
2b410 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2b420 4d 49 54 5f 53 55 42 51 55 45 52 59 0a 69 6e 74  MIT_SUBQUERY.int
2b430 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63   sqlite3ExprChec
2b440 6b 49 4e 28 50 61 72 73 65 2a 2c 20 45 78 70 72  kIN(Parse*, Expr
2b450 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
2b460 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72 43 68  ne sqlite3ExprCh
2b470 65 63 6b 49 4e 28 78 2c 79 29 20 53 51 4c 49 54  eckIN(x,y) SQLIT
2b480 45 5f 4f 4b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  E_OK.#endif..#if
2b490 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
2b4a0 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34  E_STAT3_OR_STAT4
2b4b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e 61  .void sqlite3Ana
2b4c0 6c 79 7a 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f  lyzeFunctions(vo
2b4d0 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  id);.int sqlite3
2b4e0 53 74 61 74 34 50 72 6f 62 65 53 65 74 56 61 6c  Stat4ProbeSetVal
2b4f0 75 65 28 0a 20 20 20 20 50 61 72 73 65 2a 2c 49  ue(.    Parse*,I
2b500 6e 64 65 78 2a 2c 55 6e 70 61 63 6b 65 64 52 65  ndex*,UnpackedRe
2b510 63 6f 72 64 2a 2a 2c 45 78 70 72 2a 2c 69 6e 74  cord**,Expr*,int
2b520 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 69 6e 74 20  ,int,int*);.int 
2b530 73 71 6c 69 74 65 33 53 74 61 74 34 56 61 6c 75  sqlite3Stat4Valu
2b540 65 46 72 6f 6d 45 78 70 72 28 50 61 72 73 65 2a  eFromExpr(Parse*
2b550 2c 20 45 78 70 72 2a 2c 20 75 38 2c 20 73 71 6c  , Expr*, u8, sql
2b560 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 76  ite3_value**);.v
2b570 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 34  oid sqlite3Stat4
2b580 50 72 6f 62 65 46 72 65 65 28 55 6e 70 61 63 6b  ProbeFree(Unpack
2b590 65 64 52 65 63 6f 72 64 2a 29 3b 0a 69 6e 74 20  edRecord*);.int 
2b5a0 73 71 6c 69 74 65 33 53 74 61 74 34 43 6f 6c 75  sqlite3Stat4Colu
2b5b0 6d 6e 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e  mn(sqlite3*, con
2b5c0 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 69  st void*, int, i
2b5d0 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  nt, sqlite3_valu
2b5e0 65 2a 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74  e**);.char sqlit
2b5f0 65 33 49 6e 64 65 78 43 6f 6c 75 6d 6e 41 66 66  e3IndexColumnAff
2b600 69 6e 69 74 79 28 73 71 6c 69 74 65 33 2a 2c 20  inity(sqlite3*, 
2b610 49 6e 64 65 78 2a 2c 20 69 6e 74 29 3b 0a 23 65  Index*, int);.#e
2b620 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
2b630 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68 65  interface to the
2b640 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61 74 65 64   LEMON-generated
2b650 20 70 61 72 73 65 72 0a 2a 2f 0a 23 69 66 6e 64   parser.*/.#ifnd
2b660 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41  ef SQLITE_AMALGA
2b670 4d 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20 2a 73  MATION.  void *s
2b680 71 6c 69 74 65 33 50 61 72 73 65 72 41 6c 6c 6f  qlite3ParserAllo
2b690 63 28 76 6f 69 64 2a 28 2a 29 28 75 36 34 29 29  c(void*(*)(u64))
2b6a0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2b6b0 50 61 72 73 65 72 46 72 65 65 28 76 6f 69 64 2a  ParserFree(void*
2b6c0 2c 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29  , void(*)(void*)
2b6d0 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  );.#endif.void s
2b6e0 71 6c 69 74 65 33 50 61 72 73 65 72 28 76 6f 69  qlite3Parser(voi
2b6f0 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2c 20  d*, int, Token, 
2b700 50 61 72 73 65 2a 29 3b 0a 23 69 66 64 65 66 20  Parse*);.#ifdef 
2b710 59 59 54 52 41 43 4b 4d 41 58 53 54 41 43 4b 44  YYTRACKMAXSTACKD
2b720 45 50 54 48 0a 20 20 69 6e 74 20 73 71 6c 69 74  EPTH.  int sqlit
2b730 65 33 50 61 72 73 65 72 53 74 61 63 6b 50 65 61  e3ParserStackPea
2b740 6b 28 76 6f 69 64 2a 29 3b 0a 23 65 6e 64 69 66  k(void*);.#endif
2b750 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75  ..void sqlite3Au
2b760 74 6f 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 73  toLoadExtensions
2b770 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 69 66 6e  (sqlite3*);.#ifn
2b780 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2b790 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20  LOAD_EXTENSION. 
2b7a0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f   void sqlite3Clo
2b7b0 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c  seExtensions(sql
2b7c0 69 74 65 33 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  ite3*);.#else.# 
2b7d0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6c  define sqlite3Cl
2b7e0 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 58 29  oseExtensions(X)
2b7f0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
2b800 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41   SQLITE_OMIT_SHA
2b810 52 45 44 5f 43 41 43 48 45 0a 20 20 76 6f 69 64  RED_CACHE.  void
2b820 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63   sqlite3TableLoc
2b830 6b 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 2c 20  k(Parse *, int, 
2b840 69 6e 74 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63  int, u8, const c
2b850 68 61 72 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20  har *);.#else.  
2b860 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54  #define sqlite3T
2b870 61 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c 79  ableLock(v,w,x,y
2b880 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  ,z).#endif..#ifd
2b890 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
2b8a0 20 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38   int sqlite3Utf8
2b8b0 54 6f 38 28 75 6e 73 69 67 6e 65 64 20 63 68 61  To8(unsigned cha
2b8c0 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  r*);.#endif..#if
2b8d0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2b8e0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20  VIRTUALTABLE.#  
2b8f0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
2b900 61 62 43 6c 65 61 72 28 59 29 0a 23 20 20 64 65  abClear(Y).#  de
2b910 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
2b920 53 79 6e 63 28 58 2c 59 29 20 53 51 4c 49 54 45  Sync(X,Y) SQLITE
2b930 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73 71  _OK.#  define sq
2b940 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63  lite3VtabRollbac
2b950 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73  k(X).#  define s
2b960 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74  qlite3VtabCommit
2b970 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (X).#  define sq
2b980 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28  lite3VtabInSync(
2b990 64 62 29 20 30 0a 23 20 20 64 65 66 69 6e 65 20  db) 0.#  define 
2b9a0 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28  sqlite3VtabLock(
2b9b0 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  X).#  define sql
2b9c0 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 58  ite3VtabUnlock(X
2b9d0 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
2b9e0 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73  te3VtabUnlockLis
2b9f0 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73  t(X).#  define s
2ba00 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f  qlite3VtabSavepo
2ba10 69 6e 74 28 58 2c 20 59 2c 20 5a 29 20 53 51 4c  int(X, Y, Z) SQL
2ba20 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65  ITE_OK.#  define
2ba30 20 73 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c   sqlite3GetVTabl
2ba40 65 28 58 2c 59 29 20 20 28 28 56 54 61 62 6c 65  e(X,Y)  ((VTable
2ba50 2a 29 30 29 0a 23 65 6c 73 65 0a 20 20 20 76 6f  *)0).#else.   vo
2ba60 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c  id sqlite3VtabCl
2ba70 65 61 72 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  ear(sqlite3 *db,
2ba80 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20 76 6f 69   Table*);.   voi
2ba90 64 20 73 71 6c 69 74 65 33 56 74 61 62 44 69 73  d sqlite3VtabDis
2baa0 63 6f 6e 6e 65 63 74 28 73 71 6c 69 74 65 33 20  connect(sqlite3 
2bab0 2a 64 62 2c 20 54 61 62 6c 65 20 2a 70 29 3b 0a  *db, Table *p);.
2bac0 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74     int sqlite3Vt
2bad0 61 62 53 79 6e 63 28 73 71 6c 69 74 65 33 20 2a  abSync(sqlite3 *
2bae0 64 62 2c 20 56 64 62 65 2a 29 3b 0a 20 20 20 69  db, Vdbe*);.   i
2baf0 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f  nt sqlite3VtabRo
2bb00 6c 6c 62 61 63 6b 28 73 71 6c 69 74 65 33 20 2a  llback(sqlite3 *
2bb10 64 62 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69  db);.   int sqli
2bb20 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 73 71  te3VtabCommit(sq
2bb30 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 76  lite3 *db);.   v
2bb40 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 4c  oid sqlite3VtabL
2bb50 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20  ock(VTable *);. 
2bb60 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
2bb70 61 62 55 6e 6c 6f 63 6b 28 56 54 61 62 6c 65 20  abUnlock(VTable 
2bb80 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  *);.   void sqli
2bb90 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73  te3VtabUnlockLis
2bba0 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20 20  t(sqlite3*);.   
2bbb0 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 53  int sqlite3VtabS
2bbc0 61 76 65 70 6f 69 6e 74 28 73 71 6c 69 74 65 33  avepoint(sqlite3
2bbd0 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20   *, int, int);. 
2bbe0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
2bbf0 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 56  abImportErrmsg(V
2bc00 64 62 65 2a 2c 20 73 71 6c 69 74 65 33 5f 76 74  dbe*, sqlite3_vt
2bc10 61 62 2a 29 3b 0a 20 20 20 56 54 61 62 6c 65 20  ab*);.   VTable 
2bc20 2a 73 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c  *sqlite3GetVTabl
2bc30 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c  e(sqlite3*, Tabl
2bc40 65 2a 29 3b 0a 20 20 20 4d 6f 64 75 6c 65 20 2a  e*);.   Module *
2bc50 73 71 6c 69 74 65 33 56 74 61 62 43 72 65 61 74  sqlite3VtabCreat
2bc60 65 4d 6f 64 75 6c 65 28 0a 20 20 20 20 20 73 71  eModule(.     sq
2bc70 6c 69 74 65 33 2a 2c 0a 20 20 20 20 20 63 6f 6e  lite3*,.     con
2bc80 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 63  st char*,.     c
2bc90 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64  onst sqlite3_mod
2bca0 75 6c 65 2a 2c 0a 20 20 20 20 20 76 6f 69 64 2a  ule*,.     void*
2bcb0 2c 0a 20 20 20 20 20 76 6f 69 64 28 2a 29 28 76  ,.     void(*)(v
2bcc0 6f 69 64 2a 29 0a 20 20 20 29 3b 0a 23 20 20 64  oid*).   );.#  d
2bcd0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
2bce0 62 49 6e 53 79 6e 63 28 64 62 29 20 28 28 64 62  bInSync(db) ((db
2bcf0 29 2d 3e 6e 56 54 72 61 6e 73 3e 30 20 26 26 20  )->nVTrans>0 && 
2bd00 28 64 62 29 2d 3e 61 56 54 72 61 6e 73 3d 3d 30  (db)->aVTrans==0
2bd10 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c  ).#endif.int sql
2bd20 69 74 65 33 56 74 61 62 45 70 6f 6e 79 6d 6f 75  ite3VtabEponymou
2bd30 73 54 61 62 6c 65 49 6e 69 74 28 50 61 72 73 65  sTableInit(Parse
2bd40 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69 64  *,Module*);.void
2bd50 20 73 71 6c 69 74 65 33 56 74 61 62 45 70 6f 6e   sqlite3VtabEpon
2bd60 79 6d 6f 75 73 54 61 62 6c 65 43 6c 65 61 72 28  ymousTableClear(
2bd70 73 71 6c 69 74 65 33 2a 2c 4d 6f 64 75 6c 65 2a  sqlite3*,Module*
2bd80 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
2bd90 74 61 62 4d 61 6b 65 57 72 69 74 61 62 6c 65 28  tabMakeWritable(
2bda0 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a  Parse*,Table*);.
2bdb0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
2bdc0 42 65 67 69 6e 50 61 72 73 65 28 50 61 72 73 65  BeginParse(Parse
2bdd0 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
2bde0 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b  *, Token*, int);
2bdf0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
2be00 62 46 69 6e 69 73 68 50 61 72 73 65 28 50 61 72  bFinishParse(Par
2be10 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  se*, Token*);.vo
2be20 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 41 72  id sqlite3VtabAr
2be30 67 49 6e 69 74 28 50 61 72 73 65 2a 29 3b 0a 76  gInit(Parse*);.v
2be40 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 41  oid sqlite3VtabA
2be50 72 67 45 78 74 65 6e 64 28 50 61 72 73 65 2a 2c  rgExtend(Parse*,
2be60 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
2be70 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65  lite3VtabCallCre
2be80 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  ate(sqlite3*, in
2be90 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  t, const char *,
2bea0 20 63 68 61 72 20 2a 2a 29 3b 0a 69 6e 74 20 73   char **);.int s
2beb0 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 6f  qlite3VtabCallCo
2bec0 6e 6e 65 63 74 28 50 61 72 73 65 2a 2c 20 54 61  nnect(Parse*, Ta
2bed0 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ble*);.int sqlit
2bee0 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72 6f  e3VtabCallDestro
2bef0 79 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  y(sqlite3*, int,
2bf00 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a   const char *);.
2bf10 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 42  int sqlite3VtabB
2bf20 65 67 69 6e 28 73 71 6c 69 74 65 33 20 2a 2c 20  egin(sqlite3 *, 
2bf30 56 54 61 62 6c 65 20 2a 29 3b 0a 46 75 6e 63 44  VTable *);.FuncD
2bf40 65 66 20 2a 73 71 6c 69 74 65 33 56 74 61 62 4f  ef *sqlite3VtabO
2bf50 76 65 72 6c 6f 61 64 46 75 6e 63 74 69 6f 6e 28  verloadFunction(
2bf60 73 71 6c 69 74 65 33 20 2a 2c 46 75 6e 63 44 65  sqlite3 *,FuncDe
2bf70 66 2a 2c 20 69 6e 74 20 6e 41 72 67 2c 20 45 78  f*, int nArg, Ex
2bf80 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
2bf90 65 33 49 6e 76 61 6c 69 64 46 75 6e 63 74 69 6f  e3InvalidFunctio
2bfa0 6e 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  n(sqlite3_contex
2bfb0 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
2bfc0 61 6c 75 65 2a 2a 29 3b 0a 73 71 6c 69 74 65 33  alue**);.sqlite3
2bfd0 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74  _int64 sqlite3St
2bfe0 6d 74 43 75 72 72 65 6e 74 54 69 6d 65 28 73 71  mtCurrentTime(sq
2bff0 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b  lite3_context*);
2c000 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65  .int sqlite3Vdbe
2c010 50 61 72 61 6d 65 74 65 72 49 6e 64 65 78 28 56  ParameterIndex(V
2c020 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  dbe*, const char
2c030 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
2c040 69 74 65 33 54 72 61 6e 73 66 65 72 42 69 6e 64  ite3TransferBind
2c050 69 6e 67 73 28 73 71 6c 69 74 65 33 5f 73 74 6d  ings(sqlite3_stm
2c060 74 20 2a 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d  t *, sqlite3_stm
2c070 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  t *);.void sqlit
2c080 65 33 50 61 72 73 65 72 52 65 73 65 74 28 50 61  e3ParserReset(Pa
2c090 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  rse*);.int sqlit
2c0a0 65 33 52 65 70 72 65 70 61 72 65 28 56 64 62 65  e3Reprepare(Vdbe
2c0b0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2c0c0 45 78 70 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e  ExprListCheckLen
2c0d0 67 74 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72  gth(Parse*, Expr
2c0e0 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61  List*, const cha
2c0f0 72 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  r*);.CollSeq *sq
2c100 6c 69 74 65 33 42 69 6e 61 72 79 43 6f 6d 70 61  lite3BinaryCompa
2c110 72 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20  reCollSeq(Parse 
2c120 2a 2c 20 45 78 70 72 20 2a 2c 20 45 78 70 72 20  *, Expr *, Expr 
2c130 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  *);.int sqlite3T
2c140 65 6d 70 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73  empInMemory(cons
2c150 74 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e  t sqlite3*);.con
2c160 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
2c170 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28  JournalModename(
2c180 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  int);.#ifndef SQ
2c190 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
2c1a0 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b  int sqlite3Check
2c1b0 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20  point(sqlite3*, 
2c1c0 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20  int, int, int*, 
2c1d0 69 6e 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  int*);.  int sql
2c1e0 69 74 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f  ite3WalDefaultHo
2c1f0 6f 6b 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33  ok(void*,sqlite3
2c200 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  *,const char*,in
2c210 74 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  t);.#endif.#ifnd
2c220 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ef SQLITE_OMIT_C
2c230 54 45 0a 20 20 57 69 74 68 20 2a 73 71 6c 69 74  TE.  With *sqlit
2c240 65 33 57 69 74 68 41 64 64 28 50 61 72 73 65 2a  e3WithAdd(Parse*
2c250 2c 57 69 74 68 2a 2c 54 6f 6b 65 6e 2a 2c 45 78  ,With*,Token*,Ex
2c260 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 29  prList*,Select*)
2c270 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2c280 57 69 74 68 44 65 6c 65 74 65 28 73 71 6c 69 74  WithDelete(sqlit
2c290 65 33 2a 2c 57 69 74 68 2a 29 3b 0a 20 20 76 6f  e3*,With*);.  vo
2c2a0 69 64 20 73 71 6c 69 74 65 33 57 69 74 68 50 75  id sqlite3WithPu
2c2b0 73 68 28 50 61 72 73 65 2a 2c 20 57 69 74 68 2a  sh(Parse*, With*
2c2c0 2c 20 75 38 29 3b 0a 23 65 6c 73 65 0a 23 64 65  , u8);.#else.#de
2c2d0 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68  fine sqlite3With
2c2e0 50 75 73 68 28 78 2c 79 2c 7a 29 0a 23 64 65 66  Push(x,y,z).#def
2c2f0 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68 44  ine sqlite3WithD
2c300 65 6c 65 74 65 28 78 2c 79 29 0a 23 65 6e 64 69  elete(x,y).#endi
2c310 66 0a 0a 2f 2a 20 44 65 63 6c 61 72 61 74 69 6f  f../* Declaratio
2c320 6e 73 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73  ns for functions
2c330 20 69 6e 20 66 6b 65 79 2e 63 2e 20 41 6c 6c 20   in fkey.c. All 
2c340 6f 66 20 74 68 65 73 65 20 61 72 65 20 72 65 70  of these are rep
2c350 6c 61 63 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d 6f  laced by.** no-o
2c360 70 20 6d 61 63 72 6f 73 20 69 66 20 4f 4d 49 54  p macros if OMIT
2c370 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73 20  _FOREIGN_KEY is 
2c380 64 65 66 69 6e 65 64 2e 20 49 6e 20 74 68 69 73  defined. In this
2c390 20 63 61 73 65 20 6e 6f 20 66 6f 72 65 69 67 6e   case no foreign
2c3a0 0a 2a 2a 20 6b 65 79 20 66 75 6e 63 74 69 6f 6e  .** key function
2c3b0 61 6c 69 74 79 20 69 73 20 61 76 61 69 6c 61 62  ality is availab
2c3c0 6c 65 2e 20 49 66 20 4f 4d 49 54 5f 54 52 49 47  le. If OMIT_TRIG
2c3d0 47 45 52 20 69 73 20 64 65 66 69 6e 65 64 20 62  GER is defined b
2c3e0 75 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45 49  ut.** OMIT_FOREI
2c3f0 47 4e 5f 4b 45 59 20 69 73 20 6e 6f 74 2c 20 6f  GN_KEY is not, o
2c400 6e 6c 79 20 73 6f 6d 65 20 6f 66 20 74 68 65 20  nly some of the 
2c410 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 6e 6f  functions are no
2c420 2d 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20 74 68 69  -oped. In.** thi
2c430 73 20 63 61 73 65 20 66 6f 72 65 69 67 6e 20 6b  s case foreign k
2c440 65 79 73 20 61 72 65 20 70 61 72 73 65 64 2c 20  eys are parsed, 
2c450 62 75 74 20 6e 6f 20 6f 74 68 65 72 20 66 75 6e  but no other fun
2c460 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 0a 2a 2a  ctionality is.**
2c470 20 70 72 6f 76 69 64 65 64 20 28 65 6e 66 6f 72   provided (enfor
2c480 63 65 6d 65 6e 74 20 6f 66 20 46 4b 20 63 6f 6e  cement of FK con
2c490 73 74 72 61 69 6e 74 73 20 72 65 71 75 69 72 65  straints require
2c4a0 73 20 74 68 65 20 74 72 69 67 67 65 72 73 20 73  s the triggers s
2c4b0 75 62 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a 23  ub-system)..*/.#
2c4c0 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2c4d0 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
2c4e0 4b 45 59 29 20 26 26 20 21 64 65 66 69 6e 65 64  KEY) && !defined
2c4f0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49  (SQLITE_OMIT_TRI
2c500 47 47 45 52 29 0a 20 20 76 6f 69 64 20 73 71 6c  GGER).  void sql
2c510 69 74 65 33 46 6b 43 68 65 63 6b 28 50 61 72 73  ite3FkCheck(Pars
2c520 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
2c530 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29   int, int*, int)
2c540 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2c550 46 6b 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73  FkDropTable(Pars
2c560 65 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54  e*, SrcList *, T
2c570 61 62 6c 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73  able*);.  void s
2c580 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28  qlite3FkActions(
2c590 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
2c5a0 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20  ExprList*, int, 
2c5b0 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 69 6e  int*, int);.  in
2c5c0 74 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69  t sqlite3FkRequi
2c5d0 72 65 64 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  red(Parse*, Tabl
2c5e0 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a  e*, int*, int);.
2c5f0 20 20 75 33 32 20 73 71 6c 69 74 65 33 46 6b 4f    u32 sqlite3FkO
2c600 6c 64 6d 61 73 6b 28 50 61 72 73 65 2a 2c 20 54  ldmask(Parse*, T
2c610 61 62 6c 65 2a 29 3b 0a 20 20 46 4b 65 79 20 2a  able*);.  FKey *
2c620 73 71 6c 69 74 65 33 46 6b 52 65 66 65 72 65 6e  sqlite3FkReferen
2c630 63 65 73 28 54 61 62 6c 65 20 2a 29 3b 0a 23 65  ces(Table *);.#e
2c640 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
2c650 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 61  lite3FkActions(a
2c660 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64  ,b,c,d,e,f).  #d
2c670 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 43  efine sqlite3FkC
2c680 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 2c 66  heck(a,b,c,d,e,f
2c690 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
2c6a0 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 61  te3FkDropTable(a
2c6b0 2c 62 2c 63 29 0a 20 20 23 64 65 66 69 6e 65 20  ,b,c).  #define 
2c6c0 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b  sqlite3FkOldmask
2c6d0 28 61 2c 62 29 20 20 20 20 20 20 20 20 20 30 0a  (a,b)         0.
2c6e0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
2c6f0 33 46 6b 52 65 71 75 69 72 65 64 28 61 2c 62 2c  3FkRequired(a,b,
2c700 63 2c 64 29 20 20 20 20 30 0a 20 20 23 64 65 66  c,d)    0.  #def
2c710 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65 66  ine sqlite3FkRef
2c720 65 72 65 6e 63 65 73 28 61 29 20 20 20 20 20 20  erences(a)      
2c730 20 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64    0.#endif.#ifnd
2c740 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
2c750 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20 76 6f 69  OREIGN_KEY.  voi
2c760 64 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74  d sqlite3FkDelet
2c770 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 54 61 62  e(sqlite3 *, Tab
2c780 6c 65 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  le*);.  int sqli
2c790 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78  te3FkLocateIndex
2c7a0 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 46  (Parse*,Table*,F
2c7b0 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69 6e 74  Key*,Index**,int
2c7c0 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65  **);.#else.  #de
2c7d0 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 65  fine sqlite3FkDe
2c7e0 6c 65 74 65 28 61 2c 62 29 0a 20 20 23 64 65 66  lete(a,b).  #def
2c7f0 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63  ine sqlite3FkLoc
2c800 61 74 65 49 6e 64 65 78 28 61 2c 62 2c 63 2c 64  ateIndex(a,b,c,d
2c810 2c 65 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a  ,e).#endif.../*.
2c820 2a 2a 20 41 76 61 69 6c 61 62 6c 65 20 66 61 75  ** Available fau
2c830 6c 74 20 69 6e 6a 65 63 74 6f 72 73 2e 20 20 53  lt injectors.  S
2c840 68 6f 75 6c 64 20 62 65 20 6e 75 6d 62 65 72 65  hould be numbere
2c850 64 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  d beginning with
2c860 20 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53   0..*/.#define S
2c870 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43  QLITE_FAULTINJEC
2c880 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 30  TOR_MALLOC     0
2c890 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
2c8a0 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 43 4f  FAULTINJECTOR_CO
2c8b0 55 4e 54 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a  UNT      1../*.*
2c8c0 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20  * The interface 
2c8d0 74 6f 20 74 68 65 20 63 6f 64 65 20 69 6e 20 66  to the code in f
2c8e0 61 75 6c 74 2e 63 20 75 73 65 64 20 66 6f 72 20  ault.c used for 
2c8f0 69 64 65 6e 74 69 66 79 69 6e 67 20 22 62 65 6e  identifying "ben
2c900 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20 66  ign".** malloc f
2c910 61 69 6c 75 72 65 73 2e 20 54 68 69 73 20 69 73  ailures. This is
2c920 20 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20 69 66   only present if
2c930 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42   SQLITE_UNTESTAB
2c940 4c 45 0a 2a 2a 20 69 73 20 6e 6f 74 20 64 65 66  LE.** is not def
2c950 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  ined..*/.#ifndef
2c960 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42   SQLITE_UNTESTAB
2c970 4c 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  LE.  void sqlite
2c980 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c  3BeginBenignMall
2c990 6f 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f 69 64  oc(void);.  void
2c9a0 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67   sqlite3EndBenig
2c9b0 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 23  nMalloc(void);.#
2c9c0 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
2c9d0 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67  qlite3BeginBenig
2c9e0 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64 65 66  nMalloc().  #def
2c9f0 69 6e 65 20 73 71 6c 69 74 65 33 45 6e 64 42 65  ine sqlite3EndBe
2ca00 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65 6e  nignMalloc().#en
2ca10 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  dif../*.** Allow
2ca20 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65 73  ed return values
2ca30 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 46 69 6e   from sqlite3Fin
2ca40 64 49 6e 49 6e 64 65 78 28 29 0a 2a 2f 0a 23 64  dInIndex().*/.#d
2ca50 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 52  efine IN_INDEX_R
2ca60 4f 57 49 44 20 20 20 20 20 20 20 20 31 20 20 20  OWID        1   
2ca70 2f 2a 20 53 65 61 72 63 68 20 74 68 65 20 72 6f  /* Search the ro
2ca80 77 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c 65  wid of the table
2ca90 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
2caa0 4e 44 45 58 5f 45 50 48 20 20 20 20 20 20 20 20  NDEX_EPH        
2cab0 20 20 32 20 20 20 2f 2a 20 53 65 61 72 63 68 20    2   /* Search 
2cac0 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 62 2d 74  an ephemeral b-t
2cad0 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  ree */.#define I
2cae0 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 41 53  N_INDEX_INDEX_AS
2caf0 43 20 20 20 20 33 20 20 20 2f 2a 20 45 78 69 73  C    3   /* Exis
2cb00 74 69 6e 67 20 69 6e 64 65 78 20 41 53 43 45 4e  ting index ASCEN
2cb10 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65 20  DING */.#define 
2cb20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 44  IN_INDEX_INDEX_D
2cb30 45 53 43 20 20 20 34 20 20 20 2f 2a 20 45 78 69  ESC   4   /* Exi
2cb40 73 74 69 6e 67 20 69 6e 64 65 78 20 44 45 53 43  sting index DESC
2cb50 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e  ENDING */.#defin
2cb60 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20  e IN_INDEX_NOOP 
2cb70 20 20 20 20 20 20 20 20 35 20 20 20 2f 2a 20 4e          5   /* N
2cb80 6f 20 74 61 62 6c 65 20 61 76 61 69 6c 61 62 6c  o table availabl
2cb90 65 2e 20 55 73 65 20 63 6f 6d 70 61 72 69 73 6f  e. Use compariso
2cba0 6e 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  ns */./*.** Allo
2cbb0 77 65 64 20 66 6c 61 67 73 20 66 6f 72 20 74 68  wed flags for th
2cbc0 65 20 33 72 64 20 70 61 72 61 6d 65 74 65 72 20  e 3rd parameter 
2cbd0 74 6f 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e  to sqlite3FindIn
2cbe0 49 6e 64 65 78 28 29 2e 0a 2a 2f 0a 23 64 65 66  Index()..*/.#def
2cbf0 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f  ine IN_INDEX_NOO
2cc00 50 5f 4f 4b 20 20 20 20 20 30 78 30 30 30 31 20  P_OK     0x0001 
2cc10 20 2f 2a 20 4f 4b 20 74 6f 20 72 65 74 75 72 6e   /* OK to return
2cc20 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 2a   IN_INDEX_NOOP *
2cc30 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
2cc40 45 58 5f 4d 45 4d 42 45 52 53 48 49 50 20 20 30  EX_MEMBERSHIP  0
2cc50 78 30 30 30 32 20 20 2f 2a 20 49 4e 20 6f 70 65  x0002  /* IN ope
2cc60 72 61 74 6f 72 20 75 73 65 64 20 66 6f 72 20 6d  rator used for m
2cc70 65 6d 62 65 72 73 68 69 70 20 74 65 73 74 20 2a  embership test *
2cc80 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
2cc90 45 58 5f 4c 4f 4f 50 20 20 20 20 20 20 20 20 30  EX_LOOP        0
2cca0 78 30 30 30 34 20 20 2f 2a 20 49 4e 20 6f 70 65  x0004  /* IN ope
2ccb0 72 61 74 6f 72 20 75 73 65 64 20 61 73 20 61 20  rator used as a 
2ccc0 6c 6f 6f 70 20 2a 2f 0a 69 6e 74 20 73 71 6c 69  loop */.int sqli
2ccd0 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 50  te3FindInIndex(P
2cce0 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20  arse *, Expr *, 
2ccf0 75 33 32 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29  u32, int*, int*)
2cd00 3b 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  ;..int sqlite3Jo
2cd10 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65  urnalOpen(sqlite
2cd20 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20 63  3_vfs *, const c
2cd30 68 61 72 20 2a 2c 20 73 71 6c 69 74 65 33 5f 66  har *, sqlite3_f
2cd40 69 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  ile *, int, int)
2cd50 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75  ;.int sqlite3Jou
2cd60 72 6e 61 6c 53 69 7a 65 28 73 71 6c 69 74 65 33  rnalSize(sqlite3
2cd70 5f 76 66 73 20 2a 29 3b 0a 23 69 66 64 65 66 20  _vfs *);.#ifdef 
2cd80 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 54  SQLITE_ENABLE_AT
2cd90 4f 4d 49 43 5f 57 52 49 54 45 0a 20 20 69 6e 74  OMIC_WRITE.  int
2cda0 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43   sqlite3JournalC
2cdb0 72 65 61 74 65 28 73 71 6c 69 74 65 33 5f 66 69  reate(sqlite3_fi
2cdc0 6c 65 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 69  le *);.#endif..i
2cdd0 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  nt sqlite3Journa
2cde0 6c 49 73 49 6e 4d 65 6d 6f 72 79 28 73 71 6c 69  lIsInMemory(sqli
2cdf0 74 65 33 5f 66 69 6c 65 20 2a 70 29 3b 0a 76 6f  te3_file *p);.vo
2ce00 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75  id sqlite3MemJou
2ce10 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33  rnalOpen(sqlite3
2ce20 5f 66 69 6c 65 20 2a 29 3b 0a 0a 76 6f 69 64 20  _file *);..void 
2ce30 73 71 6c 69 74 65 33 45 78 70 72 53 65 74 48 65  sqlite3ExprSetHe
2ce40 69 67 68 74 41 6e 64 46 6c 61 67 73 28 50 61 72  ightAndFlags(Par
2ce50 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72  se *pParse, Expr
2ce60 20 2a 70 29 3b 0a 23 69 66 20 53 51 4c 49 54 45   *p);.#if SQLITE
2ce70 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e  _MAX_EXPR_DEPTH>
2ce80 30 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 53  0.  int sqlite3S
2ce90 65 6c 65 63 74 45 78 70 72 48 65 69 67 68 74 28  electExprHeight(
2cea0 53 65 6c 65 63 74 20 2a 29 3b 0a 20 20 69 6e 74  Select *);.  int
2ceb0 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63   sqlite3ExprChec
2cec0 6b 48 65 69 67 68 74 28 50 61 72 73 65 2a 2c 20  kHeight(Parse*, 
2ced0 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  int);.#else.  #d
2cee0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65 6c  efine sqlite3Sel
2cef0 65 63 74 45 78 70 72 48 65 69 67 68 74 28 78 29  ectExprHeight(x)
2cf00 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c   0.  #define sql
2cf10 69 74 65 33 45 78 70 72 43 68 65 63 6b 48 65 69  ite3ExprCheckHei
2cf20 67 68 74 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a  ght(x,y).#endif.
2cf30 0a 75 33 32 20 73 71 6c 69 74 65 33 47 65 74 34  .u32 sqlite3Get4
2cf40 62 79 74 65 28 63 6f 6e 73 74 20 75 38 2a 29 3b  byte(const u8*);
2cf50 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 75 74  .void sqlite3Put
2cf60 34 62 79 74 65 28 75 38 2a 2c 20 75 33 32 29 3b  4byte(u8*, u32);
2cf70 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
2cf80 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f  ENABLE_UNLOCK_NO
2cf90 54 49 46 59 0a 20 20 76 6f 69 64 20 73 71 6c 69  TIFY.  void sqli
2cfa0 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f  te3ConnectionBlo
2cfb0 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 2c 20  cked(sqlite3 *, 
2cfc0 73 71 6c 69 74 65 33 20 2a 29 3b 0a 20 20 76 6f  sqlite3 *);.  vo
2cfd0 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  id sqlite3Connec
2cfe0 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 73 71 6c  tionUnlocked(sql
2cff0 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 76 6f 69  ite3 *db);.  voi
2d000 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  d sqlite3Connect
2d010 69 6f 6e 43 6c 6f 73 65 64 28 73 71 6c 69 74 65  ionClosed(sqlite
2d020 33 20 2a 64 62 29 3b 0a 23 65 6c 73 65 0a 20 20  3 *db);.#else.  
2d030 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43  #define sqlite3C
2d040 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64  onnectionBlocked
2d050 28 78 2c 79 29 0a 20 20 23 64 65 66 69 6e 65 20  (x,y).  #define 
2d060 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
2d070 6e 55 6e 6c 6f 63 6b 65 64 28 78 29 0a 20 20 23  nUnlocked(x).  #
2d080 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
2d090 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 78  nnectionClosed(x
2d0a0 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ).#endif..#ifdef
2d0b0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
2d0c0 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73  void sqlite3Pars
2d0d0 65 72 54 72 61 63 65 28 46 49 4c 45 2a 2c 20 63  erTrace(FILE*, c
2d0e0 68 61 72 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  har *);.#endif..
2d0f0 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c  /*.** If the SQL
2d100 49 54 45 5f 45 4e 41 42 4c 45 20 49 4f 54 52 41  ITE_ENABLE IOTRA
2d110 43 45 20 65 78 69 73 74 73 20 74 68 65 6e 20 74  CE exists then t
2d120 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  he global variab
2d130 6c 65 0a 2a 2a 20 73 71 6c 69 74 65 33 49 6f 54  le.** sqlite3IoT
2d140 72 61 63 65 20 69 73 20 61 20 70 6f 69 6e 74 65  race is a pointe
2d150 72 20 74 6f 20 61 20 70 72 69 6e 74 66 2d 6c 69  r to a printf-li
2d160 6b 65 20 72 6f 75 74 69 6e 65 20 75 73 65 64 20  ke routine used 
2d170 74 6f 0a 2a 2a 20 70 72 69 6e 74 20 49 2f 4f 20  to.** print I/O 
2d180 74 72 61 63 69 6e 67 20 6d 65 73 73 61 67 65 73  tracing messages
2d190 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
2d1a0 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43  TE_ENABLE_IOTRAC
2d1b0 45 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41  E.# define IOTRA
2d1c0 43 45 28 41 29 20 20 69 66 28 20 73 71 6c 69 74  CE(A)  if( sqlit
2d1d0 65 33 49 6f 54 72 61 63 65 20 29 7b 20 73 71 6c  e3IoTrace ){ sql
2d1e0 69 74 65 33 49 6f 54 72 61 63 65 20 41 3b 20 7d  ite3IoTrace A; }
2d1f0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56  .  void sqlite3V
2d200 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 56 64  dbeIOTraceSql(Vd
2d210 62 65 2a 29 3b 0a 53 51 4c 49 54 45 5f 41 50 49  be*);.SQLITE_API
2d220 20 53 51 4c 49 54 45 5f 45 58 54 45 52 4e 20 76   SQLITE_EXTERN v
2d230 6f 69 64 20 28 53 51 4c 49 54 45 5f 43 44 45 43  oid (SQLITE_CDEC
2d240 4c 20 2a 73 71 6c 69 74 65 33 49 6f 54 72 61 63  L *sqlite3IoTrac
2d250 65 29 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e  e)(const char*,.
2d260 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  ..);.#else.# def
2d270 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29 0a 23  ine IOTRACE(A).#
2d280 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2d290 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 58 29  dbeIOTraceSql(X)
2d2a0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
2d2b0 68 65 73 65 20 72 6f 75 74 69 6e 65 73 20 61 72  hese routines ar
2d2c0 65 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20  e available for 
2d2d0 74 68 65 20 6d 65 6d 32 2e 63 20 64 65 62 75 67  the mem2.c debug
2d2e0 67 69 6e 67 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  ging memory allo
2d2f0 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20  cator.** only.  
2d300 54 68 65 79 20 61 72 65 20 75 73 65 64 20 74 6f  They are used to
2d310 20 76 65 72 69 66 79 20 74 68 61 74 20 64 69 66   verify that dif
2d320 66 65 72 65 6e 74 20 22 74 79 70 65 73 22 20 6f  ferent "types" o
2d330 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f  f memory.** allo
2d340 63 61 74 69 6f 6e 73 20 61 72 65 20 70 72 6f 70  cations are prop
2d350 65 72 6c 79 20 74 72 61 63 6b 65 64 20 62 79 20  erly tracked by 
2d360 74 68 65 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a  the system..**.*
2d370 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  * sqlite3Memdebu
2d380 67 53 65 74 54 79 70 65 28 29 20 73 65 74 73 20  gSetType() sets 
2d390 74 68 65 20 22 74 79 70 65 22 20 6f 66 20 61 6e  the "type" of an
2d3a0 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f 20 6f   allocation to o
2d3b0 6e 65 20 6f 66 0a 2a 2a 20 74 68 65 20 4d 45 4d  ne of.** the MEM
2d3c0 54 59 50 45 5f 2a 20 6d 61 63 72 6f 73 20 64 65  TYPE_* macros de
2d3d0 66 69 6e 65 64 20 62 65 6c 6f 77 2e 20 20 54 68  fined below.  Th
2d3e0 65 20 74 79 70 65 20 6d 75 73 74 20 62 65 20 61  e type must be a
2d3f0 20 62 69 74 6d 61 73 6b 20 77 69 74 68 0a 2a 2a   bitmask with.**
2d400 20 61 20 73 69 6e 67 6c 65 20 62 69 74 20 73 65   a single bit se
2d410 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33  t..**.** sqlite3
2d420 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28  MemdebugHasType(
2d430 29 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69  ) returns true i
2d440 66 20 61 6e 79 20 6f 66 20 74 68 65 20 62 69 74  f any of the bit
2d450 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a  s in its second.
2d460 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63  ** argument matc
2d470 68 20 74 68 65 20 74 79 70 65 20 73 65 74 20 62  h the type set b
2d480 79 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 73  y the previous s
2d490 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65  qlite3MemdebugSe
2d4a0 74 54 79 70 65 28 29 2e 0a 2a 2a 20 73 71 6c 69  tType()..** sqli
2d4b0 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79  te3MemdebugHasTy
2d4c0 70 65 28 29 20 69 73 20 69 6e 74 65 6e 64 65 64  pe() is intended
2d4d0 20 66 6f 72 20 75 73 65 20 69 6e 73 69 64 65 20   for use inside 
2d4e0 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
2d4f0 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74  nts..**.** sqlit
2d500 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65  e3MemdebugNoType
2d510 28 29 20 72 65 74 75 72 6e 73 20 74 72 75 65 20  () returns true 
2d520 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 62  if none of the b
2d530 69 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e  its in its secon
2d540 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61  d.** argument ma
2d550 74 63 68 20 74 68 65 20 74 79 70 65 20 73 65 74  tch the type set
2d560 20 62 79 20 74 68 65 20 70 72 65 76 69 6f 75 73   by the previous
2d570 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
2d580 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a  SetType()..**.**
2d590 20 50 65 72 68 61 70 73 20 74 68 65 20 6d 6f 73   Perhaps the mos
2d5a0 74 20 69 6d 70 6f 72 74 61 6e 74 20 70 6f 69 6e  t important poin
2d5b0 74 20 69 73 20 74 68 65 20 64 69 66 66 65 72 65  t is the differe
2d5c0 6e 63 65 20 62 65 74 77 65 65 6e 20 4d 45 4d 54  nce between MEMT
2d5d0 59 50 45 5f 48 45 41 50 0a 2a 2a 20 61 6e 64 20  YPE_HEAP.** and 
2d5e0 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44  MEMTYPE_LOOKASID
2d5f0 45 2e 20 20 49 66 20 61 6e 20 61 6c 6c 6f 63 61  E.  If an alloca
2d600 74 69 6f 6e 20 69 73 20 4d 45 4d 54 59 50 45 5f  tion is MEMTYPE_
2d610 4c 4f 4f 4b 41 53 49 44 45 2c 20 74 68 61 74 20  LOOKASIDE, that 
2d620 6d 65 61 6e 73 0a 2a 2a 20 69 74 20 6d 69 67 68  means.** it migh
2d630 74 20 68 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f  t have been allo
2d640 63 61 74 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69  cated by lookasi
2d650 64 65 2c 20 65 78 63 65 70 74 20 74 68 65 20 61  de, except the a
2d660 6c 6c 6f 63 61 74 69 6f 6e 20 77 61 73 0a 2a 2a  llocation was.**
2d670 20 74 6f 6f 20 6c 61 72 67 65 20 6f 72 20 6c 6f   too large or lo
2d680 6f 6b 61 73 69 64 65 20 77 61 73 20 61 6c 72 65  okaside was alre
2d690 61 64 79 20 66 75 6c 6c 2e 20 20 49 74 20 69 73  ady full.  It is
2d6a0 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 76 65   important to ve
2d6b0 72 69 66 79 0a 2a 2a 20 74 68 61 74 20 61 6c 6c  rify.** that all
2d6c0 6f 63 61 74 69 6f 6e 73 20 74 68 61 74 20 6d 69  ocations that mi
2d6d0 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 73 61  ght have been sa
2d6e0 74 69 73 66 69 65 64 20 62 79 20 6c 6f 6f 6b 61  tisfied by looka
2d6f0 73 69 64 65 20 61 72 65 20 6e 6f 74 0a 2a 2a 20  side are not.** 
2d700 70 61 73 73 65 64 20 62 61 63 6b 20 74 6f 20 6e  passed back to n
2d710 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65  on-lookaside fre
2d720 65 28 29 20 72 6f 75 74 69 6e 65 73 2e 20 20 41  e() routines.  A
2d730 73 73 65 72 74 73 20 73 75 63 68 20 61 73 20 74  sserts such as t
2d740 68 65 0a 2a 2a 20 65 78 61 6d 70 6c 65 20 61 62  he.** example ab
2d750 6f 76 65 20 61 72 65 20 70 6c 61 63 65 64 20 6f  ove are placed o
2d760 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73  n the non-lookas
2d770 69 64 65 20 66 72 65 65 28 29 20 72 6f 75 74 69  ide free() routi
2d780 6e 65 73 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a  nes to verify.**
2d790 20 74 68 69 73 20 63 6f 6e 73 74 72 61 69 6e 74   this constraint
2d7a0 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74  ..**.** All of t
2d7b0 68 69 73 20 69 73 20 6e 6f 2d 6f 70 20 66 6f 72  his is no-op for
2d7c0 20 61 20 70 72 6f 64 75 63 74 69 6f 6e 20 62 75   a production bu
2d7d0 69 6c 64 2e 20 20 49 74 20 6f 6e 6c 79 20 63 6f  ild.  It only co
2d7e0 6d 65 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79  mes into.** play
2d7f0 20 77 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45   when the SQLITE
2d800 5f 4d 45 4d 44 45 42 55 47 20 63 6f 6d 70 69 6c  _MEMDEBUG compil
2d810 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73  e-time option is
2d820 20 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66   used..*/.#ifdef
2d830 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47   SQLITE_MEMDEBUG
2d840 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  .  void sqlite3M
2d850 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 76  emdebugSetType(v
2d860 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20  oid*,u8);.  int 
2d870 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48  sqlite3MemdebugH
2d880 61 73 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29  asType(void*,u8)
2d890 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
2d8a0 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 76 6f  emdebugNoType(vo
2d8b0 69 64 2a 2c 75 38 29 3b 0a 23 65 6c 73 65 0a 23  id*,u8);.#else.#
2d8c0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d   define sqlite3M
2d8d0 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 58  emdebugSetType(X
2d8e0 2c 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f  ,Y)  /* no-op */
2d8f0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2d900 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
2d910 28 58 2c 59 29 20 20 31 0a 23 20 64 65 66 69 6e  (X,Y)  1.# defin
2d920 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  e sqlite3Memdebu
2d930 67 4e 6f 54 79 70 65 28 58 2c 59 29 20 20 20 31  gNoType(X,Y)   1
2d940 0a 23 65 6e 64 69 66 0a 23 64 65 66 69 6e 65 20  .#endif.#define 
2d950 4d 45 4d 54 59 50 45 5f 48 45 41 50 20 20 20 20  MEMTYPE_HEAP    
2d960 20 20 20 30 78 30 31 20 20 2f 2a 20 47 65 6e 65     0x01  /* Gene
2d970 72 61 6c 20 68 65 61 70 20 61 6c 6c 6f 63 61 74  ral heap allocat
2d980 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
2d990 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44  MEMTYPE_LOOKASID
2d9a0 45 20 20 30 78 30 32 20 20 2f 2a 20 48 65 61 70  E  0x02  /* Heap
2d9b0 20 74 68 61 74 20 6d 69 67 68 74 20 68 61 76 65   that might have
2d9c0 20 62 65 65 6e 20 6c 6f 6f 6b 61 73 69 64 65 20   been lookaside 
2d9d0 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59  */.#define MEMTY
2d9e0 50 45 5f 53 43 52 41 54 43 48 20 20 20 20 30 78  PE_SCRATCH    0x
2d9f0 30 34 20 20 2f 2a 20 53 63 72 61 74 63 68 20 61  04  /* Scratch a
2da00 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64  llocations */.#d
2da10 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 50 43  efine MEMTYPE_PC
2da20 41 43 48 45 20 20 20 20 20 30 78 30 38 20 20 2f  ACHE     0x08  /
2da30 2a 20 50 61 67 65 20 63 61 63 68 65 20 61 6c 6c  * Page cache all
2da40 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a  ocations */../*.
2da50 2a 2a 20 54 68 72 65 61 64 69 6e 67 20 69 6e 74  ** Threading int
2da60 65 72 66 61 63 65 0a 2a 2f 0a 23 69 66 20 53 51  erface.*/.#if SQ
2da70 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f  LITE_MAX_WORKER_
2da80 54 48 52 45 41 44 53 3e 30 0a 69 6e 74 20 73 71  THREADS>0.int sq
2da90 6c 69 74 65 33 54 68 72 65 61 64 43 72 65 61 74  lite3ThreadCreat
2daa0 65 28 53 51 4c 69 74 65 54 68 72 65 61 64 2a 2a  e(SQLiteThread**
2dab0 2c 76 6f 69 64 2a 28 2a 29 28 76 6f 69 64 2a 29  ,void*(*)(void*)
2dac0 2c 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c  ,void*);.int sql
2dad0 69 74 65 33 54 68 72 65 61 64 4a 6f 69 6e 28 53  ite3ThreadJoin(S
2dae0 51 4c 69 74 65 54 68 72 65 61 64 2a 2c 20 76 6f  QLiteThread*, vo
2daf0 69 64 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  id**);.#endif..#
2db00 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
2db10 45 5f 45 4e 41 42 4c 45 5f 44 42 53 54 41 54 5f  E_ENABLE_DBSTAT_
2db20 56 54 41 42 29 20 7c 7c 20 64 65 66 69 6e 65 64  VTAB) || defined
2db30 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 69 6e  (SQLITE_TEST).in
2db40 74 20 73 71 6c 69 74 65 33 44 62 73 74 61 74 52  t sqlite3DbstatR
2db50 65 67 69 73 74 65 72 28 73 71 6c 69 74 65 33 2a  egister(sqlite3*
2db60 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73  );.#endif..int s
2db70 71 6c 69 74 65 33 45 78 70 72 56 65 63 74 6f 72  qlite3ExprVector
2db80 53 69 7a 65 28 45 78 70 72 20 2a 70 45 78 70 72  Size(Expr *pExpr
2db90 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2dba0 70 72 49 73 56 65 63 74 6f 72 28 45 78 70 72 20  prIsVector(Expr 
2dbb0 2a 70 45 78 70 72 29 3b 0a 45 78 70 72 20 2a 73  *pExpr);.Expr *s
2dbc0 71 6c 69 74 65 33 56 65 63 74 6f 72 46 69 65 6c  qlite3VectorFiel
2dbd0 64 53 75 62 65 78 70 72 28 45 78 70 72 2a 2c 20  dSubexpr(Expr*, 
2dbe0 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  int);.Expr *sqli
2dbf0 74 65 33 45 78 70 72 46 6f 72 56 65 63 74 6f 72  te3ExprForVector
2dc00 46 69 65 6c 64 28 50 61 72 73 65 2a 2c 45 78 70  Field(Parse*,Exp
2dc10 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  r*,int);.void sq
2dc20 6c 69 74 65 33 56 65 63 74 6f 72 45 72 72 6f 72  lite3VectorError
2dc30 4d 73 67 28 50 61 72 73 65 2a 2c 20 45 78 70 72  Msg(Parse*, Expr
2dc40 2a 29 3b 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53  *);..#endif /* S
2dc50 51 4c 49 54 45 49 4e 54 5f 48 20 2a 2f 0a        QLITEINT_H */.