/ Hex Artifact Content
Login

Artifact 23e96647425bcda6afeeed945d1c706a8424098ba1c1d37976228ede0a60af53:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 53 51 4c 49 54 45 49 4e 54 5f 48 0a 23  ef SQLITEINT_H.#
01c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 49 4e 54  define SQLITEINT
01d0: 5f 48 0a 0a 2f 2a 20 53 70 65 63 69 61 6c 20 43  _H../* Special C
01e0: 6f 6d 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 53  omments:.**.** S
01f0: 6f 6d 65 20 63 6f 6d 6d 65 6e 74 73 20 68 61 76  ome comments hav
0200: 65 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  e special meanin
0210: 67 20 74 6f 20 74 68 65 20 74 6f 6f 6c 73 20 74  g to the tools t
0220: 68 61 74 20 6d 65 61 73 75 72 65 20 74 65 73 74  hat measure test
0230: 0a 2a 2a 20 63 6f 76 65 72 61 67 65 3a 0a 2a 2a  .** coverage:.**
0240: 0a 2a 2a 20 20 20 20 4e 4f 5f 54 45 53 54 20 20  .**    NO_TEST  
0250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0260: 20 20 20 2d 20 54 68 65 20 62 72 61 6e 63 68 65     - The branche
0270: 73 20 6f 6e 20 74 68 69 73 20 6c 69 6e 65 20 61  s on this line a
0280: 72 65 20 6e 6f 74 0a 2a 2a 20 20 20 20 20 20 20  re not.**       
0290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02a0: 20 20 20 20 20 20 20 20 20 20 20 6d 65 61 73 75             measu
02b0: 72 65 64 20 62 79 20 62 72 61 6e 63 68 20 63 6f  red by branch co
02c0: 76 65 72 61 67 65 2e 20 20 54 68 69 73 20 69 73  verage.  This is
02d0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
02e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02f0: 20 20 20 20 20 75 73 65 64 20 6f 6e 20 6c 69 6e       used on lin
0300: 65 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  es of code that 
0310: 61 63 74 75 61 6c 6c 79 0a 2a 2a 20 20 20 20 20  actually.**     
0320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0330: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6d 70               imp
0340: 6c 65 6d 65 6e 74 20 70 61 72 74 73 20 6f 66 20  lement parts of 
0350: 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67  coverage testing
0360: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d  ..**.**    OPTIM
0370: 49 5a 41 54 49 4f 4e 2d 49 46 2d 54 52 55 45 20  IZATION-IF-TRUE 
0380: 20 20 20 20 20 20 20 2d 20 54 68 69 73 20 62 72         - This br
0390: 61 6e 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20  anch is allowed 
03a0: 74 6f 20 61 6c 77 61 79 20 62 65 20 66 61 6c 73  to alway be fals
03b0: 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
03c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03d0: 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 63 6f        and the co
03e0: 72 72 65 63 74 20 61 6e 73 77 65 72 20 69 73 20  rrect answer is 
03f0: 73 74 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a  still obtained,.
0400: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
0410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0420: 20 20 20 20 74 68 6f 75 67 68 20 70 65 72 68 61      though perha
0430: 70 73 20 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a  ps more slowly..
0440: 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d 49 5a  **.**    OPTIMIZ
0450: 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 20 20  ATION-IF-FALSE  
0460: 20 20 20 20 20 2d 20 54 68 69 73 20 62 72 61 6e       - This bran
0470: 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f  ch is allowed to
0480: 20 61 6c 77 61 79 20 62 65 20 74 72 75 65 0a 2a   alway be true.*
0490: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
04a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04b0: 20 20 20 61 6e 64 20 74 68 65 20 63 6f 72 72 65     and the corre
04c0: 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74 69  ct answer is sti
04d0: 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a 2a 2a 20  ll obtained,.** 
04e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0500: 20 74 68 6f 75 67 68 20 70 65 72 68 61 70 73 20   though perhaps 
0510: 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a 2a 2a 0a  more slowly..**.
0520: 2a 2a 20 20 20 20 50 52 45 56 45 4e 54 53 2d 48  **    PREVENTS-H
0530: 41 52 4d 4c 45 53 53 2d 4f 56 45 52 52 45 41 44  ARMLESS-OVERREAD
0540: 20 20 2d 20 54 68 69 73 20 62 72 61 6e 63 68 20    - This branch 
0550: 70 72 65 76 65 6e 74 73 20 61 20 62 75 66 66 65  prevents a buffe
0560: 72 20 6f 76 65 72 72 65 61 64 0a 2a 2a 20 20 20  r overread.**   
0570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
0590: 68 61 74 20 77 6f 75 6c 64 20 62 65 20 68 61 72  hat would be har
05a0: 6d 6c 65 73 73 20 61 6e 64 20 75 6e 64 65 74 65  mless and undete
05b0: 63 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20  ctable.**       
05c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
05d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 69 74             if it
05e0: 20 64 69 64 20 6f 63 63 75 72 2e 20 20 0a 2a 2a   did occur.  .**
05f0: 0a 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65 73  .** In all cases
0600: 2c 20 74 68 65 20 73 70 65 63 69 61 6c 20 63 6f  , the special co
0610: 6d 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 65 6e  mment must be en
0620: 63 6c 6f 73 65 64 20 69 6e 20 74 68 65 20 75 73  closed in the us
0630: 75 61 6c 0a 2a 2a 20 73 6c 61 73 68 2d 61 73 74  ual.** slash-ast
0640: 65 72 69 73 6b 2e 2e 2e 61 73 74 65 72 69 73 6b  erisk...asterisk
0650: 2d 73 6c 61 73 68 20 63 6f 6d 6d 65 6e 74 20 6d  -slash comment m
0660: 61 72 6b 73 2c 20 77 69 74 68 20 6e 6f 20 73 70  arks, with no sp
0670: 61 63 65 73 20 62 65 74 77 65 65 6e 20 74 68 65  aces between the
0680: 20 0a 2a 2a 20 61 73 74 65 72 69 73 6b 73 20 61   .** asterisks a
0690: 6e 64 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74  nd the comment t
06a0: 65 78 74 2e 0a 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d  ext..*/../*.** M
06b0: 61 6b 65 20 73 75 72 65 20 74 68 65 20 54 63 6c  ake sure the Tcl
06c0: 20 63 61 6c 6c 69 6e 67 20 63 6f 6e 76 65 6e 74   calling convent
06d0: 69 6f 6e 20 6d 61 63 72 6f 20 69 73 20 64 65 66  ion macro is def
06e0: 69 6e 65 64 2e 20 20 54 68 69 73 20 6d 61 63 72  ined.  This macr
06f0: 6f 20 69 73 0a 2a 2a 20 6f 6e 6c 79 20 75 73 65  o is.** only use
0700: 64 20 62 79 20 74 65 73 74 20 63 6f 64 65 20 61  d by test code a
0710: 6e 64 20 54 63 6c 20 69 6e 74 65 67 72 61 74 69  nd Tcl integrati
0720: 6f 6e 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 6e  on code..*/.#ifn
0730: 64 65 66 20 53 51 4c 49 54 45 5f 54 43 4c 41 50  def SQLITE_TCLAP
0740: 49 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49  I.#  define SQLI
0750: 54 45 5f 54 43 4c 41 50 49 0a 23 65 6e 64 69 66  TE_TCLAPI.#endif
0760: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20 73 75 72  ../*.** Make sur
0770: 65 20 74 68 61 74 20 72 61 6e 64 5f 73 28 29 20  e that rand_s() 
0780: 69 73 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e 20  is available on 
0790: 57 69 6e 64 6f 77 73 20 73 79 73 74 65 6d 73 20  Windows systems 
07a0: 77 69 74 68 20 4d 53 56 43 20 32 30 30 35 0a 2a  with MSVC 2005.*
07b0: 2a 20 6f 72 20 68 69 67 68 65 72 2e 0a 2a 2f 0a  * or higher..*/.
07c0: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 4d 53 43  #if defined(_MSC
07d0: 5f 56 45 52 29 20 26 26 20 5f 4d 53 43 5f 56 45  _VER) && _MSC_VE
07e0: 52 3e 3d 31 34 30 30 0a 23 20 20 64 65 66 69 6e  R>=1400.#  defin
07f0: 65 20 5f 43 52 54 5f 52 41 4e 44 5f 53 0a 23 65  e _CRT_RAND_S.#e
0800: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  ndif../*.** Incl
0810: 75 64 65 20 74 68 65 20 68 65 61 64 65 72 20 66  ude the header f
0820: 69 6c 65 20 75 73 65 64 20 74 6f 20 63 75 73 74  ile used to cust
0830: 6f 6d 69 7a 65 20 74 68 65 20 63 6f 6d 70 69 6c  omize the compil
0840: 65 72 20 6f 70 74 69 6f 6e 73 20 66 6f 72 20 4d  er options for M
0850: 53 56 43 2e 0a 2a 2a 20 54 68 69 73 20 73 68 6f  SVC..** This sho
0860: 75 6c 64 20 62 65 20 64 6f 6e 65 20 66 69 72 73  uld be done firs
0870: 74 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e  t so that it can
0880: 20 73 75 63 63 65 73 73 66 75 6c 6c 79 20 70 72   successfully pr
0890: 65 76 65 6e 74 20 73 70 75 72 69 6f 75 73 0a 2a  event spurious.*
08a0: 2a 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69  * compiler warni
08b0: 6e 67 73 20 64 75 65 20 74 6f 20 73 75 62 73 65  ngs due to subse
08c0: 71 75 65 6e 74 20 63 6f 6e 74 65 6e 74 20 69 6e  quent content in
08d0: 20 74 68 69 73 20 66 69 6c 65 20 61 6e 64 20 6f   this file and o
08e0: 74 68 65 72 20 66 69 6c 65 73 0a 2a 2a 20 74 68  ther files.** th
08f0: 61 74 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20  at are included 
0900: 62 79 20 74 68 69 73 20 66 69 6c 65 2e 0a 2a 2f  by this file..*/
0910: 0a 23 69 6e 63 6c 75 64 65 20 22 6d 73 76 63 2e  .#include "msvc.
0920: 68 22 0a 0a 2f 2a 0a 2a 2a 20 53 70 65 63 69 61  h"../*.** Specia
0930: 6c 20 73 65 74 75 70 20 66 6f 72 20 56 78 57 6f  l setup for VxWo
0940: 72 6b 73 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20  rks.*/.#include 
0950: 22 76 78 77 6f 72 6b 73 2e 68 22 0a 0a 2f 2a 0a  "vxworks.h"../*.
0960: 2a 2a 20 54 68 65 73 65 20 23 64 65 66 69 6e 65  ** These #define
0970: 73 20 73 68 6f 75 6c 64 20 65 6e 61 62 6c 65 20  s should enable 
0980: 3e 32 47 42 20 66 69 6c 65 20 73 75 70 70 6f 72  >2GB file suppor
0990: 74 20 6f 6e 20 50 4f 53 49 58 20 69 66 20 74 68  t on POSIX if th
09a0: 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20  e.** underlying 
09b0: 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d  operating system
09c0: 20 73 75 70 70 6f 72 74 73 20 69 74 2e 20 20 49   supports it.  I
09d0: 66 20 74 68 65 20 4f 53 20 6c 61 63 6b 73 0a 2a  f the OS lacks.*
09e0: 2a 20 6c 61 72 67 65 20 66 69 6c 65 20 73 75 70  * large file sup
09f0: 70 6f 72 74 2c 20 6f 72 20 69 66 20 74 68 65 20  port, or if the 
0a00: 4f 53 20 69 73 20 77 69 6e 64 6f 77 73 2c 20 74  OS is windows, t
0a10: 68 65 73 65 20 73 68 6f 75 6c 64 20 62 65 20 6e  hese should be n
0a20: 6f 2d 6f 70 73 2e 0a 2a 2a 0a 2a 2a 20 54 69 63  o-ops..**.** Tic
0a30: 6b 65 74 20 23 32 37 33 39 3a 20 20 54 68 65 20  ket #2739:  The 
0a40: 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55 52 43  _LARGEFILE_SOURC
0a50: 45 20 6d 61 63 72 6f 20 6d 75 73 74 20 61 70 70  E macro must app
0a60: 65 61 72 20 62 65 66 6f 72 65 20 61 6e 79 0a 2a  ear before any.*
0a70: 2a 20 73 79 73 74 65 6d 20 23 69 6e 63 6c 75 64  * system #includ
0a80: 65 73 2e 20 20 48 65 6e 63 65 2c 20 74 68 69 73  es.  Hence, this
0a90: 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 20 6d   block of code m
0aa0: 75 73 74 20 62 65 20 74 68 65 20 76 65 72 79 20  ust be the very 
0ab0: 66 69 72 73 74 0a 2a 2a 20 63 6f 64 65 20 69 6e  first.** code in
0ac0: 20 61 6c 6c 20 73 6f 75 72 63 65 20 66 69 6c 65   all source file
0ad0: 73 2e 0a 2a 2a 0a 2a 2a 20 4c 61 72 67 65 20 66  s..**.** Large f
0ae0: 69 6c 65 20 73 75 70 70 6f 72 74 20 63 61 6e 20  ile support can 
0af0: 62 65 20 64 69 73 61 62 6c 65 64 20 75 73 69 6e  be disabled usin
0b00: 67 20 74 68 65 20 2d 44 53 51 4c 49 54 45 5f 44  g the -DSQLITE_D
0b10: 49 53 41 42 4c 45 5f 4c 46 53 20 73 77 69 74 63  ISABLE_LFS switc
0b20: 68 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f 6d 70  h.** on the comp
0b30: 69 6c 65 72 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e  iler command lin
0b40: 65 2e 20 20 54 68 69 73 20 69 73 20 6e 65 63 65  e.  This is nece
0b50: 73 73 61 72 79 20 69 66 20 79 6f 75 20 61 72 65  ssary if you are
0b60: 20 63 6f 6d 70 69 6c 69 6e 67 0a 2a 2a 20 6f 6e   compiling.** on
0b70: 20 61 20 72 65 63 65 6e 74 20 6d 61 63 68 69 6e   a recent machin
0b80: 65 20 28 65 78 3a 20 52 65 64 20 48 61 74 20 37  e (ex: Red Hat 7
0b90: 2e 32 29 20 62 75 74 20 79 6f 75 20 77 61 6e 74  .2) but you want
0ba0: 20 79 6f 75 72 20 63 6f 64 65 20 74 6f 20 77 6f   your code to wo
0bb0: 72 6b 0a 2a 2a 20 6f 6e 20 61 6e 20 6f 6c 64 65  rk.** on an olde
0bc0: 72 20 6d 61 63 68 69 6e 65 20 28 65 78 3a 20 52  r machine (ex: R
0bd0: 65 64 20 48 61 74 20 36 2e 30 29 2e 20 20 49 66  ed Hat 6.0).  If
0be0: 20 79 6f 75 20 63 6f 6d 70 69 6c 65 20 6f 6e 20   you compile on 
0bf0: 52 65 64 20 48 61 74 20 37 2e 32 0a 2a 2a 20 77  Red Hat 7.2.** w
0c00: 69 74 68 6f 75 74 20 74 68 69 73 20 6f 70 74 69  ithout this opti
0c10: 6f 6e 2c 20 4c 46 53 20 69 73 20 65 6e 61 62 6c  on, LFS is enabl
0c20: 65 2e 20 20 42 75 74 20 4c 46 53 20 64 6f 65 73  e.  But LFS does
0c30: 20 6e 6f 74 20 65 78 69 73 74 20 69 6e 20 74 68   not exist in th
0c40: 65 20 6b 65 72 6e 65 6c 0a 2a 2a 20 69 6e 20 52  e kernel.** in R
0c50: 65 64 20 48 61 74 20 36 2e 30 2c 20 73 6f 20 74  ed Hat 6.0, so t
0c60: 68 65 20 63 6f 64 65 20 77 6f 6e 27 74 20 77 6f  he code won't wo
0c70: 72 6b 2e 20 20 48 65 6e 63 65 2c 20 66 6f 72 20  rk.  Hence, for 
0c80: 6d 61 78 69 6d 75 6d 20 62 69 6e 61 72 79 0a 2a  maximum binary.*
0c90: 2a 20 70 6f 72 74 61 62 69 6c 69 74 79 20 79 6f  * portability yo
0ca0: 75 20 73 68 6f 75 6c 64 20 6f 6d 69 74 20 4c 46  u should omit LF
0cb0: 53 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 72 65  S..**.** The pre
0cc0: 76 69 6f 75 73 20 70 61 72 61 67 72 61 70 68 20  vious paragraph 
0cd0: 77 61 73 20 77 72 69 74 74 65 6e 20 69 6e 20 32  was written in 2
0ce0: 30 30 35 2e 20 20 28 54 68 69 73 20 70 61 72 61  005.  (This para
0cf0: 67 72 61 70 68 20 69 73 20 77 72 69 74 74 65 6e  graph is written
0d00: 0a 2a 2a 20 6f 6e 20 32 30 30 38 2d 31 31 2d 32  .** on 2008-11-2
0d10: 38 2e 29 20 54 68 65 73 65 20 64 61 79 73 2c 20  8.) These days, 
0d20: 61 6c 6c 20 4c 69 6e 75 78 20 6b 65 72 6e 65 6c  all Linux kernel
0d30: 73 20 73 75 70 70 6f 72 74 20 6c 61 72 67 65 20  s support large 
0d40: 66 69 6c 65 73 2c 20 73 6f 0a 2a 2a 20 79 6f 75  files, so.** you
0d50: 20 73 68 6f 75 6c 64 20 70 72 6f 62 61 62 6c 79   should probably
0d60: 20 6c 65 61 76 65 20 4c 46 53 20 65 6e 61 62 6c   leave LFS enabl
0d70: 65 64 2e 20 20 42 75 74 20 73 6f 6d 65 20 65 6d  ed.  But some em
0d80: 62 65 64 64 65 64 20 70 6c 61 74 66 6f 72 6d 73  bedded platforms
0d90: 20 6d 69 67 68 74 0a 2a 2a 20 6c 61 63 6b 20 4c   might.** lack L
0da0: 46 53 20 69 6e 20 77 68 69 63 68 20 63 61 73 65  FS in which case
0db0: 20 74 68 65 20 53 51 4c 49 54 45 5f 44 49 53 41   the SQLITE_DISA
0dc0: 42 4c 45 5f 4c 46 53 20 6d 61 63 72 6f 20 6d 69  BLE_LFS macro mi
0dd0: 67 68 74 20 73 74 69 6c 6c 20 62 65 20 75 73 65  ght still be use
0de0: 66 75 6c 2e 0a 2a 2a 0a 2a 2a 20 53 69 6d 69 6c  ful..**.** Simil
0df0: 61 72 20 69 73 20 74 72 75 65 20 66 6f 72 20 4d  ar is true for M
0e00: 61 63 20 4f 53 20 58 2e 20 20 4c 46 53 20 69 73  ac OS X.  LFS is
0e10: 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74 65 64 20   only supported 
0e20: 6f 6e 20 4d 61 63 20 4f 53 20 58 20 39 20 61 6e  on Mac OS X 9 an
0e30: 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 23 69 66 6e  d later..*/.#ifn
0e40: 64 65 66 20 53 51 4c 49 54 45 5f 44 49 53 41 42  def SQLITE_DISAB
0e50: 4c 45 5f 4c 46 53 0a 23 20 64 65 66 69 6e 65 20  LE_LFS.# define 
0e60: 5f 4c 41 52 47 45 5f 46 49 4c 45 20 20 20 20 20  _LARGE_FILE     
0e70: 20 20 31 0a 23 20 69 66 6e 64 65 66 20 5f 46 49    1.# ifndef _FI
0e80: 4c 45 5f 4f 46 46 53 45 54 5f 42 49 54 53 0a 23  LE_OFFSET_BITS.#
0e90: 20 20 20 64 65 66 69 6e 65 20 5f 46 49 4c 45 5f     define _FILE_
0ea0: 4f 46 46 53 45 54 5f 42 49 54 53 20 36 34 0a 23  OFFSET_BITS 64.#
0eb0: 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20   endif.# define 
0ec0: 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55 52 43  _LARGEFILE_SOURC
0ed0: 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 54  E 1.#endif../* T
0ee0: 68 65 20 47 43 43 5f 56 45 52 53 49 4f 4e 20 61  he GCC_VERSION a
0ef0: 6e 64 20 4d 53 56 43 5f 56 45 52 53 49 4f 4e 20  nd MSVC_VERSION 
0f00: 6d 61 63 72 6f 73 20 61 72 65 20 75 73 65 64 20  macros are used 
0f10: 74 6f 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 61  to.** conditiona
0f20: 6c 6c 79 20 69 6e 63 6c 75 64 65 20 6f 70 74 69  lly include opti
0f30: 6d 69 7a 61 74 69 6f 6e 73 20 66 6f 72 20 65 61  mizations for ea
0f40: 63 68 20 6f 66 20 74 68 65 73 65 20 63 6f 6d 70  ch of these comp
0f50: 69 6c 65 72 73 2e 20 20 41 0a 2a 2a 20 76 61 6c  ilers.  A.** val
0f60: 75 65 20 6f 66 20 30 20 6d 65 61 6e 73 20 74 68  ue of 0 means th
0f70: 61 74 20 63 6f 6d 70 69 6c 65 72 20 69 73 20 6e  at compiler is n
0f80: 6f 74 20 62 65 69 6e 67 20 75 73 65 64 2e 20 20  ot being used.  
0f90: 54 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 44 49  The.** SQLITE_DI
0fa0: 53 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 20  SABLE_INTRINSIC 
0fb0: 6d 61 63 72 6f 20 6d 65 61 6e 73 20 64 6f 20 6e  macro means do n
0fc0: 6f 74 20 75 73 65 20 61 6e 79 20 63 6f 6d 70 69  ot use any compi
0fd0: 6c 65 72 2d 73 70 65 63 69 66 69 63 0a 2a 2a 20  ler-specific.** 
0fe0: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2c 20 61  optimizations, a
0ff0: 6e 64 20 68 65 6e 63 65 20 73 65 74 20 61 6c 6c  nd hence set all
1000: 20 63 6f 6d 70 69 6c 65 72 20 6d 61 63 72 6f 73   compiler macros
1010: 20 74 6f 20 30 0a 2a 2a 0a 2a 2a 20 54 68 65 72   to 0.**.** Ther
1020: 65 20 77 61 73 20 6f 6e 63 65 20 61 6c 73 6f 20  e was once also 
1030: 61 20 43 4c 41 4e 47 5f 56 45 52 53 49 4f 4e 20  a CLANG_VERSION 
1040: 6d 61 63 72 6f 2e 20 20 48 6f 77 65 76 65 72 2c  macro.  However,
1050: 20 77 65 20 6c 65 61 72 6e 20 74 68 61 74 20 74   we learn that t
1060: 68 65 0a 2a 2a 20 76 65 72 73 69 6f 6e 20 6e 75  he.** version nu
1070: 6d 62 65 72 73 20 69 6e 20 63 6c 61 6e 67 20 61  mbers in clang a
1080: 72 65 20 66 6f 72 20 22 6d 61 72 6b 65 74 69 6e  re for "marketin
1090: 67 22 20 6f 6e 6c 79 20 61 6e 64 20 61 72 65 20  g" only and are 
10a0: 69 6e 63 6f 6e 73 69 73 74 65 6e 74 0a 2a 2a 20  inconsistent.** 
10b0: 61 6e 64 20 75 6e 72 65 6c 69 61 62 6c 65 2e 20  and unreliable. 
10c0: 20 46 6f 72 74 75 6e 61 74 65 6c 79 2c 20 61 6c   Fortunately, al
10d0: 6c 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 63 6c  l versions of cl
10e0: 61 6e 67 20 61 6c 73 6f 20 72 65 63 6f 67 6e 69  ang also recogni
10f0: 7a 65 20 74 68 65 0a 2a 2a 20 67 63 63 20 76 65  ze the.** gcc ve
1100: 72 73 69 6f 6e 20 6e 75 6d 62 65 72 73 20 61 6e  rsion numbers an
1110: 64 20 68 61 76 65 20 72 65 61 73 6f 6e 61 62 6c  d have reasonabl
1120: 65 20 73 65 74 74 69 6e 67 73 20 66 6f 72 20 67  e settings for g
1130: 63 63 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65  cc version numbe
1140: 72 73 2c 0a 2a 2a 20 73 6f 20 74 68 65 20 47 43  rs,.** so the GC
1150: 43 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72 6f 20  C_VERSION macro 
1160: 77 69 6c 6c 20 62 65 20 73 65 74 20 74 6f 20 61  will be set to a
1170: 20 63 6f 72 72 65 63 74 20 6e 6f 6e 2d 7a 65 72   correct non-zer
1180: 6f 20 76 61 6c 75 65 20 65 76 65 6e 0a 2a 2a 20  o value even.** 
1190: 77 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 77  when compiling w
11a0: 69 74 68 20 63 6c 61 6e 67 2e 0a 2a 2f 0a 23 69  ith clang..*/.#i
11b0: 66 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43  f defined(__GNUC
11c0: 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  __) && !defined(
11d0: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 49  SQLITE_DISABLE_I
11e0: 4e 54 52 49 4e 53 49 43 29 0a 23 20 64 65 66 69  NTRINSIC).# defi
11f0: 6e 65 20 47 43 43 5f 56 45 52 53 49 4f 4e 20 28  ne GCC_VERSION (
1200: 5f 5f 47 4e 55 43 5f 5f 2a 31 30 30 30 30 30 30  __GNUC__*1000000
1210: 2b 5f 5f 47 4e 55 43 5f 4d 49 4e 4f 52 5f 5f 2a  +__GNUC_MINOR__*
1220: 31 30 30 30 2b 5f 5f 47 4e 55 43 5f 50 41 54 43  1000+__GNUC_PATC
1230: 48 4c 45 56 45 4c 5f 5f 29 0a 23 65 6c 73 65 0a  HLEVEL__).#else.
1240: 23 20 64 65 66 69 6e 65 20 47 43 43 5f 56 45 52  # define GCC_VER
1250: 53 49 4f 4e 20 30 0a 23 65 6e 64 69 66 0a 23 69  SION 0.#endif.#i
1260: 66 20 64 65 66 69 6e 65 64 28 5f 4d 53 43 5f 56  f defined(_MSC_V
1270: 45 52 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  ER) && !defined(
1280: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 49  SQLITE_DISABLE_I
1290: 4e 54 52 49 4e 53 49 43 29 0a 23 20 64 65 66 69  NTRINSIC).# defi
12a0: 6e 65 20 4d 53 56 43 5f 56 45 52 53 49 4f 4e 20  ne MSVC_VERSION 
12b0: 5f 4d 53 43 5f 56 45 52 0a 23 65 6c 73 65 0a 23  _MSC_VER.#else.#
12c0: 20 64 65 66 69 6e 65 20 4d 53 56 43 5f 56 45 52   define MSVC_VER
12d0: 53 49 4f 4e 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  SION 0.#endif../
12e0: 2a 20 4e 65 65 64 65 64 20 66 6f 72 20 76 61 72  * Needed for var
12f0: 69 6f 75 73 20 64 65 66 69 6e 69 74 69 6f 6e 73  ious definitions
1300: 2e 2e 2e 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e  ... */.#if defin
1310: 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 26 26 20  ed(__GNUC__) && 
1320: 21 64 65 66 69 6e 65 64 28 5f 47 4e 55 5f 53 4f  !defined(_GNU_SO
1330: 55 52 43 45 29 0a 23 20 64 65 66 69 6e 65 20 5f  URCE).# define _
1340: 47 4e 55 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69  GNU_SOURCE.#endi
1350: 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  f..#if defined(_
1360: 5f 4f 70 65 6e 42 53 44 5f 5f 29 20 26 26 20 21  _OpenBSD__) && !
1370: 64 65 66 69 6e 65 64 28 5f 42 53 44 5f 53 4f 55  defined(_BSD_SOU
1380: 52 43 45 29 0a 23 20 64 65 66 69 6e 65 20 5f 42  RCE).# define _B
1390: 53 44 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69 66  SD_SOURCE.#endif
13a0: 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47  ../*.** For MinG
13b0: 57 2c 20 63 68 65 63 6b 20 74 6f 20 73 65 65 20  W, check to see 
13c0: 69 66 20 77 65 20 63 61 6e 20 69 6e 63 6c 75 64  if we can includ
13d0: 65 20 74 68 65 20 68 65 61 64 65 72 20 66 69 6c  e the header fil
13e0: 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 69 74 73  e containing its
13f0: 0a 2a 2a 20 76 65 72 73 69 6f 6e 20 69 6e 66 6f  .** version info
1400: 72 6d 61 74 69 6f 6e 2c 20 61 6d 6f 6e 67 20 6f  rmation, among o
1410: 74 68 65 72 20 74 68 69 6e 67 73 2e 20 20 4e 6f  ther things.  No
1420: 72 6d 61 6c 6c 79 2c 20 74 68 69 73 20 69 6e 74  rmally, this int
1430: 65 72 6e 61 6c 20 4d 69 6e 47 57 0a 2a 2a 20 68  ernal MinGW.** h
1440: 65 61 64 65 72 20 66 69 6c 65 20 77 6f 75 6c 64  eader file would
1450: 20 5b 6f 6e 6c 79 5d 20 62 65 20 69 6e 63 6c 75   [only] be inclu
1460: 64 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ded automaticall
1470: 79 20 62 79 20 6f 74 68 65 72 20 4d 69 6e 47 57  y by other MinGW
1480: 20 68 65 61 64 65 72 0a 2a 2a 20 66 69 6c 65 73   header.** files
1490: 3b 20 68 6f 77 65 76 65 72 2c 20 74 68 65 20 63  ; however, the c
14a0: 6f 6e 74 61 69 6e 65 64 20 76 65 72 73 69 6f 6e  ontained version
14b0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20   information is 
14c0: 6e 6f 77 20 72 65 71 75 69 72 65 64 20 62 79 20  now required by 
14d0: 74 68 69 73 0a 2a 2a 20 68 65 61 64 65 72 20 66  this.** header f
14e0: 69 6c 65 20 74 6f 20 77 6f 72 6b 20 61 72 6f 75  ile to work arou
14f0: 6e 64 20 62 69 6e 61 72 79 20 63 6f 6d 70 61 74  nd binary compat
1500: 69 62 69 6c 69 74 79 20 69 73 73 75 65 73 20 28  ibility issues (
1510: 73 65 65 20 62 65 6c 6f 77 29 20 61 6e 64 0a 2a  see below) and.*
1520: 2a 20 74 68 69 73 20 69 73 20 74 68 65 20 6f 6e  * this is the on
1530: 6c 79 20 6b 6e 6f 77 6e 20 77 61 79 20 74 6f 20  ly known way to 
1540: 72 65 6c 69 61 62 6c 79 20 6f 62 74 61 69 6e 20  reliably obtain 
1550: 69 74 2e 20 20 54 68 69 73 20 65 6e 74 69 72 65  it.  This entire
1560: 20 23 69 66 20 62 6c 6f 63 6b 0a 2a 2a 20 77 6f   #if block.** wo
1570: 75 6c 64 20 62 65 20 63 6f 6d 70 6c 65 74 65 6c  uld be completel
1580: 79 20 75 6e 6e 65 63 65 73 73 61 72 79 20 69 66  y unnecessary if
1590: 20 74 68 65 72 65 20 77 61 73 20 61 6e 79 20 6f   there was any o
15a0: 74 68 65 72 20 77 61 79 20 6f 66 20 64 65 74 65  ther way of dete
15b0: 63 74 69 6e 67 0a 2a 2a 20 4d 69 6e 47 57 20 76  cting.** MinGW v
15c0: 69 61 20 74 68 65 69 72 20 70 72 65 70 72 6f 63  ia their preproc
15d0: 65 73 73 6f 72 20 28 65 2e 67 2e 20 69 66 20 74  essor (e.g. if t
15e0: 68 65 79 20 63 75 73 74 6f 6d 69 7a 65 64 20 74  hey customized t
15f0: 68 65 69 72 20 47 43 43 20 74 6f 20 64 65 66 69  heir GCC to defi
1600: 6e 65 0a 2a 2a 20 73 6f 6d 65 20 4d 69 6e 47 57  ne.** some MinGW
1610: 2d 73 70 65 63 69 66 69 63 20 6d 61 63 72 6f 73  -specific macros
1620: 29 2e 20 20 57 68 65 6e 20 63 6f 6d 70 69 6c 69  ).  When compili
1630: 6e 67 20 66 6f 72 20 4d 69 6e 47 57 2c 20 65 69  ng for MinGW, ei
1640: 74 68 65 72 20 74 68 65 0a 2a 2a 20 5f 48 41 56  ther the.** _HAV
1650: 45 5f 4d 49 4e 47 57 5f 48 20 6f 72 20 5f 48 41  E_MINGW_H or _HA
1660: 56 45 5f 5f 4d 49 4e 47 57 5f 48 20 28 6e 6f 74  VE__MINGW_H (not
1670: 65 20 74 68 65 20 65 78 74 72 61 20 75 6e 64 65  e the extra unde
1680: 72 73 63 6f 72 65 29 20 6d 61 63 72 6f 20 6d 75  rscore) macro mu
1690: 73 74 20 62 65 0a 2a 2a 20 64 65 66 69 6e 65 64  st be.** defined
16a0: 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 64 65 74  ; otherwise, det
16b0: 65 63 74 69 6f 6e 20 6f 66 20 63 6f 6e 64 69 74  ection of condit
16c0: 69 6f 6e 73 20 73 70 65 63 69 66 69 63 20 74 6f  ions specific to
16d0: 20 4d 69 6e 47 57 20 77 69 6c 6c 20 62 65 0a 2a   MinGW will be.*
16e0: 2a 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23  * disabled..*/.#
16f0: 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41 56 45  if defined(_HAVE
1700: 5f 4d 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63 6c  _MINGW_H).# incl
1710: 75 64 65 20 22 6d 69 6e 67 77 2e 68 22 0a 23 65  ude "mingw.h".#e
1720: 6c 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41 56  lif defined(_HAV
1730: 45 5f 5f 4d 49 4e 47 57 5f 48 29 0a 23 20 69 6e  E__MINGW_H).# in
1740: 63 6c 75 64 65 20 22 5f 6d 69 6e 67 77 2e 68 22  clude "_mingw.h"
1750: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46  .#endif../*.** F
1760: 6f 72 20 4d 69 6e 47 57 20 76 65 72 73 69 6f 6e  or MinGW version
1770: 20 34 2e 78 20 28 61 6e 64 20 68 69 67 68 65 72   4.x (and higher
1780: 29 2c 20 63 68 65 63 6b 20 74 6f 20 73 65 65 20  ), check to see 
1790: 69 66 20 74 68 65 20 5f 55 53 45 5f 33 32 42 49  if the _USE_32BI
17a0: 54 5f 54 49 4d 45 5f 54 0a 2a 2a 20 64 65 66 69  T_TIME_T.** defi
17b0: 6e 65 20 69 73 20 72 65 71 75 69 72 65 64 20 74  ne is required t
17c0: 6f 20 6d 61 69 6e 74 61 69 6e 20 62 69 6e 61 72  o maintain binar
17d0: 79 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20  y compatibility 
17e0: 77 69 74 68 20 74 68 65 20 4d 53 56 43 20 72 75  with the MSVC ru
17f0: 6e 74 69 6d 65 0a 2a 2a 20 6c 69 62 72 61 72 79  ntime.** library
1800: 20 69 6e 20 75 73 65 20 28 65 2e 67 2e 20 66 6f   in use (e.g. fo
1810: 72 20 57 69 6e 64 6f 77 73 20 58 50 29 2e 0a 2a  r Windows XP)..*
1820: 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f  /.#if !defined(_
1830: 55 53 45 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54  USE_32BIT_TIME_T
1840: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 55  ) && !defined(_U
1850: 53 45 5f 36 34 42 49 54 5f 54 49 4d 45 5f 54 29  SE_64BIT_TIME_T)
1860: 20 26 26 20 5c 0a 20 20 20 20 64 65 66 69 6e 65   && \.    define
1870: 64 28 5f 57 49 4e 33 32 29 20 26 26 20 21 64 65  d(_WIN32) && !de
1880: 66 69 6e 65 64 28 5f 57 49 4e 36 34 29 20 26 26  fined(_WIN64) &&
1890: 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f   \.    defined(_
18a0: 5f 4d 49 4e 47 57 5f 4d 41 4a 4f 52 5f 56 45 52  _MINGW_MAJOR_VER
18b0: 53 49 4f 4e 29 20 26 26 20 5f 5f 4d 49 4e 47 57  SION) && __MINGW
18c0: 5f 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e 20 3e  _MAJOR_VERSION >
18d0: 3d 20 34 20 26 26 20 5c 0a 20 20 20 20 64 65 66  = 4 && \.    def
18e0: 69 6e 65 64 28 5f 5f 4d 53 56 43 52 54 5f 5f 29  ined(__MSVCRT__)
18f0: 0a 23 20 64 65 66 69 6e 65 20 5f 55 53 45 5f 33  .# define _USE_3
1900: 32 42 49 54 5f 54 49 4d 45 5f 54 0a 23 65 6e 64  2BIT_TIME_T.#end
1910: 69 66 0a 0a 2f 2a 20 54 68 65 20 70 75 62 6c 69  if../* The publi
1920: 63 20 53 51 4c 69 74 65 20 69 6e 74 65 72 66 61  c SQLite interfa
1930: 63 65 2e 20 20 54 68 65 20 5f 46 49 4c 45 5f 4f  ce.  The _FILE_O
1940: 46 46 53 45 54 5f 42 49 54 53 20 6d 61 63 72 6f  FFSET_BITS macro
1950: 20 6d 75 73 74 20 61 70 70 65 61 72 0a 2a 2a 20   must appear.** 
1960: 66 69 72 73 74 20 69 6e 20 51 4e 58 2e 20 20 41  first in QNX.  A
1970: 6c 73 6f 2c 20 74 68 65 20 5f 55 53 45 5f 33 32  lso, the _USE_32
1980: 42 49 54 5f 54 49 4d 45 5f 54 20 6d 61 63 72 6f  BIT_TIME_T macro
1990: 20 6d 75 73 74 20 61 70 70 65 61 72 20 66 69 72   must appear fir
19a0: 73 74 20 66 6f 72 0a 2a 2a 20 4d 69 6e 47 57 2e  st for.** MinGW.
19b0: 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73 71  .*/.#include "sq
19c0: 6c 69 74 65 33 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20  lite3.h"../*.** 
19d0: 49 6e 63 6c 75 64 65 20 74 68 65 20 63 6f 6e 66  Include the conf
19e0: 69 67 75 72 61 74 69 6f 6e 20 68 65 61 64 65 72  iguration header
19f0: 20 6f 75 74 70 75 74 20 62 79 20 27 63 6f 6e 66   output by 'conf
1a00: 69 67 75 72 65 27 20 69 66 20 77 65 27 72 65 20  igure' if we're 
1a10: 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 61 75 74  using the.** aut
1a20: 6f 63 6f 6e 66 2d 62 61 73 65 64 20 62 75 69 6c  oconf-based buil
1a30: 64 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  d.*/.#if defined
1a40: 28 5f 48 41 56 45 5f 53 51 4c 49 54 45 5f 43 4f  (_HAVE_SQLITE_CO
1a50: 4e 46 49 47 5f 48 29 20 26 26 20 21 64 65 66 69  NFIG_H) && !defi
1a60: 6e 65 64 28 53 51 4c 49 54 45 43 4f 4e 46 49 47  ned(SQLITECONFIG
1a70: 5f 48 29 0a 23 69 6e 63 6c 75 64 65 20 22 63 6f  _H).#include "co
1a80: 6e 66 69 67 2e 68 22 0a 23 64 65 66 69 6e 65 20  nfig.h".#define 
1a90: 53 51 4c 49 54 45 43 4f 4e 46 49 47 5f 48 20 31  SQLITECONFIG_H 1
1aa0: 0a 23 65 6e 64 69 66 0a 0a 23 69 6e 63 6c 75 64  .#endif..#includ
1ab0: 65 20 22 73 71 6c 69 74 65 4c 69 6d 69 74 2e 68  e "sqliteLimit.h
1ac0: 22 0a 0a 2f 2a 20 44 69 73 61 62 6c 65 20 6e 75  "../* Disable nu
1ad0: 69 73 61 6e 63 65 20 77 61 72 6e 69 6e 67 73 20  isance warnings 
1ae0: 6f 6e 20 42 6f 72 6c 61 6e 64 20 63 6f 6d 70 69  on Borland compi
1af0: 6c 65 72 73 20 2a 2f 0a 23 69 66 20 64 65 66 69  lers */.#if defi
1b00: 6e 65 64 28 5f 5f 42 4f 52 4c 41 4e 44 43 5f 5f  ned(__BORLANDC__
1b10: 29 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d  ).#pragma warn -
1b20: 72 63 68 20 2f 2a 20 75 6e 72 65 61 63 68 61 62  rch /* unreachab
1b30: 6c 65 20 63 6f 64 65 20 2a 2f 0a 23 70 72 61 67  le code */.#prag
1b40: 6d 61 20 77 61 72 6e 20 2d 63 63 63 20 2f 2a 20  ma warn -ccc /* 
1b50: 43 6f 6e 64 69 74 69 6f 6e 20 69 73 20 61 6c 77  Condition is alw
1b60: 61 79 73 20 74 72 75 65 20 6f 72 20 66 61 6c 73  ays true or fals
1b70: 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72  e */.#pragma war
1b80: 6e 20 2d 61 75 73 20 2f 2a 20 41 73 73 69 67 6e  n -aus /* Assign
1b90: 65 64 20 76 61 6c 75 65 20 69 73 20 6e 65 76 65  ed value is neve
1ba0: 72 20 75 73 65 64 20 2a 2f 0a 23 70 72 61 67 6d  r used */.#pragm
1bb0: 61 20 77 61 72 6e 20 2d 63 73 75 20 2f 2a 20 43  a warn -csu /* C
1bc0: 6f 6d 70 61 72 69 6e 67 20 73 69 67 6e 65 64 20  omparing signed 
1bd0: 61 6e 64 20 75 6e 73 69 67 6e 65 64 20 2a 2f 0a  and unsigned */.
1be0: 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 73 70  #pragma warn -sp
1bf0: 61 20 2f 2a 20 53 75 73 70 69 63 69 6f 75 73 20  a /* Suspicious 
1c00: 70 6f 69 6e 74 65 72 20 61 72 69 74 68 6d 65 74  pointer arithmet
1c10: 69 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ic */.#endif../*
1c20: 0a 2a 2a 20 49 6e 63 6c 75 64 65 20 73 74 61 6e  .** Include stan
1c30: 64 61 72 64 20 68 65 61 64 65 72 20 66 69 6c 65  dard header file
1c40: 73 20 61 73 20 6e 65 63 65 73 73 61 72 79 0a 2a  s as necessary.*
1c50: 2f 0a 23 69 66 64 65 66 20 48 41 56 45 5f 53 54  /.#ifdef HAVE_ST
1c60: 44 49 4e 54 5f 48 0a 23 69 6e 63 6c 75 64 65 20  DINT_H.#include 
1c70: 3c 73 74 64 69 6e 74 2e 68 3e 0a 23 65 6e 64 69  <stdint.h>.#endi
1c80: 66 0a 23 69 66 64 65 66 20 48 41 56 45 5f 49 4e  f.#ifdef HAVE_IN
1c90: 54 54 59 50 45 53 5f 48 0a 23 69 6e 63 6c 75 64  TTYPES_H.#includ
1ca0: 65 20 3c 69 6e 74 74 79 70 65 73 2e 68 3e 0a 23  e <inttypes.h>.#
1cb0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
1cc0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
1cd0: 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 63 61  s are used to ca
1ce0: 73 74 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 69  st pointers to i
1cf0: 6e 74 65 67 65 72 73 20 61 6e 64 0a 2a 2a 20 69  ntegers and.** i
1d00: 6e 74 65 67 65 72 73 20 74 6f 20 70 6f 69 6e 74  ntegers to point
1d10: 65 72 73 2e 20 20 54 68 65 20 77 61 79 20 79 6f  ers.  The way yo
1d20: 75 20 64 6f 20 74 68 69 73 20 76 61 72 69 65 73  u do this varies
1d30: 20 66 72 6f 6d 20 6f 6e 65 20 63 6f 6d 70 69 6c   from one compil
1d40: 65 72 0a 2a 2a 20 74 6f 20 74 68 65 20 6e 65 78  er.** to the nex
1d50: 74 2c 20 73 6f 20 77 65 20 68 61 76 65 20 64 65  t, so we have de
1d60: 76 65 6c 6f 70 65 64 20 74 68 65 20 66 6f 6c 6c  veloped the foll
1d70: 6f 77 69 6e 67 20 73 65 74 20 6f 66 20 23 69 66  owing set of #if
1d80: 20 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a 20 74   statements.** t
1d90: 6f 20 67 65 6e 65 72 61 74 65 20 61 70 70 72 6f  o generate appro
1da0: 70 72 69 61 74 65 20 6d 61 63 72 6f 73 20 66 6f  priate macros fo
1db0: 72 20 61 20 77 69 64 65 20 72 61 6e 67 65 20 6f  r a wide range o
1dc0: 66 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2a 0a  f compilers..**.
1dd0: 2a 2a 20 54 68 65 20 63 6f 72 72 65 63 74 20 22  ** The correct "
1de0: 41 4e 53 49 22 20 77 61 79 20 74 6f 20 64 6f 20  ANSI" way to do 
1df0: 74 68 69 73 20 69 73 20 74 6f 20 75 73 65 20 74  this is to use t
1e00: 68 65 20 69 6e 74 70 74 72 5f 74 20 74 79 70 65  he intptr_t type
1e10: 2e 0a 2a 2a 20 55 6e 66 6f 72 74 75 6e 61 74 65  ..** Unfortunate
1e20: 6c 79 2c 20 74 68 61 74 20 74 79 70 65 64 65 66  ly, that typedef
1e30: 20 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c   is not availabl
1e40: 65 20 6f 6e 20 61 6c 6c 20 63 6f 6d 70 69 6c 65  e on all compile
1e50: 72 73 2c 20 6f 72 0a 2a 2a 20 69 66 20 69 74 20  rs, or.** if it 
1e60: 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 20 69 74  is available, it
1e70: 20 72 65 71 75 69 72 65 73 20 61 6e 20 23 69 6e   requires an #in
1e80: 63 6c 75 64 65 20 6f 66 20 73 70 65 63 69 66 69  clude of specifi
1e90: 63 20 68 65 61 64 65 72 73 0a 2a 2a 20 74 68 61  c headers.** tha
1ea0: 74 20 76 61 72 79 20 66 72 6f 6d 20 6f 6e 65 20  t vary from one 
1eb0: 6d 61 63 68 69 6e 65 20 74 6f 20 74 68 65 20 6e  machine to the n
1ec0: 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65  ext..**.** Ticke
1ed0: 74 20 23 33 38 36 30 3a 20 20 54 68 65 20 6c 6c  t #3860:  The ll
1ee0: 76 6d 2d 67 63 63 2d 34 2e 32 20 63 6f 6d 70 69  vm-gcc-4.2 compi
1ef0: 6c 65 72 20 66 72 6f 6d 20 41 70 70 6c 65 20 63  ler from Apple c
1f00: 68 6f 6b 65 73 20 6f 6e 0a 2a 2a 20 74 68 65 20  hokes on.** the 
1f10: 28 28 76 6f 69 64 2a 29 26 28 28 63 68 61 72 2a  ((void*)&((char*
1f20: 29 30 29 5b 58 5d 29 20 63 6f 6e 73 74 72 75 63  )0)[X]) construc
1f30: 74 2e 20 20 42 75 74 20 4d 53 56 43 20 63 68 6f  t.  But MSVC cho
1f40: 6b 65 73 20 6f 6e 20 28 28 76 6f 69 64 2a 29 28  kes on ((void*)(
1f50: 58 29 29 2e 0a 2a 2a 20 53 6f 20 77 65 20 68 61  X))..** So we ha
1f60: 76 65 20 74 6f 20 64 65 66 69 6e 65 20 74 68 65  ve to define the
1f70: 20 6d 61 63 72 6f 73 20 69 6e 20 64 69 66 66 65   macros in diffe
1f80: 72 65 6e 74 20 77 61 79 73 20 64 65 70 65 6e 64  rent ways depend
1f90: 69 6e 67 20 6f 6e 20 74 68 65 0a 2a 2a 20 63 6f  ing on the.** co
1fa0: 6d 70 69 6c 65 72 2e 0a 2a 2f 0a 23 69 66 20 64  mpiler..*/.#if d
1fb0: 65 66 69 6e 65 64 28 5f 5f 50 54 52 44 49 46 46  efined(__PTRDIFF
1fc0: 5f 54 59 50 45 5f 5f 29 20 20 2f 2a 20 54 68 69  _TYPE__)  /* Thi
1fd0: 73 20 63 61 73 65 20 73 68 6f 75 6c 64 20 77 6f  s case should wo
1fe0: 72 6b 20 66 6f 72 20 47 43 43 20 2a 2f 0a 23 20  rk for GCC */.# 
1ff0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e  define SQLITE_IN
2000: 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76  T_TO_PTR(X)  ((v
2010: 6f 69 64 2a 29 28 5f 5f 50 54 52 44 49 46 46 5f  oid*)(__PTRDIFF_
2020: 54 59 50 45 5f 5f 29 28 58 29 29 0a 23 20 64 65  TYPE__)(X)).# de
2030: 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f  fine SQLITE_PTR_
2040: 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74  TO_INT(X)  ((int
2050: 29 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45  )(__PTRDIFF_TYPE
2060: 5f 5f 29 28 58 29 29 0a 23 65 6c 69 66 20 21 64  __)(X)).#elif !d
2070: 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29  efined(__GNUC__)
2080: 20 20 20 20 20 20 20 2f 2a 20 57 6f 72 6b 73 20         /* Works 
2090: 66 6f 72 20 63 6f 6d 70 69 6c 65 72 73 20 6f 74  for compilers ot
20a0: 68 65 72 20 74 68 61 6e 20 4c 4c 56 4d 20 2a 2f  her than LLVM */
20b0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
20c0: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20  _INT_TO_PTR(X)  
20d0: 28 28 76 6f 69 64 2a 29 26 28 28 63 68 61 72 2a  ((void*)&((char*
20e0: 29 30 29 5b 58 5d 29 0a 23 20 64 65 66 69 6e 65  )0)[X]).# define
20f0: 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49   SQLITE_PTR_TO_I
2100: 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 28 28  NT(X)  ((int)(((
2110: 63 68 61 72 2a 29 58 29 2d 28 63 68 61 72 2a 29  char*)X)-(char*)
2120: 30 29 29 0a 23 65 6c 69 66 20 64 65 66 69 6e 65  0)).#elif define
2130: 64 28 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 29  d(HAVE_STDINT_H)
2140: 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20 63     /* Use this c
2150: 61 73 65 20 69 66 20 77 65 20 68 61 76 65 20 41  ase if we have A
2160: 4e 53 49 20 68 65 61 64 65 72 73 20 2a 2f 0a 23  NSI headers */.#
2170: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49   define SQLITE_I
2180: 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28  NT_TO_PTR(X)  ((
2190: 76 6f 69 64 2a 29 28 69 6e 74 70 74 72 5f 74 29  void*)(intptr_t)
21a0: 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20 53 51  (X)).# define SQ
21b0: 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28  LITE_PTR_TO_INT(
21c0: 58 29 20 20 28 28 69 6e 74 29 28 69 6e 74 70 74  X)  ((int)(intpt
21d0: 72 5f 74 29 28 58 29 29 0a 23 65 6c 73 65 20 20  r_t)(X)).#else  
21e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f0: 20 20 20 20 20 20 20 20 2f 2a 20 47 65 6e 65 72          /* Gener
2200: 61 74 65 73 20 61 20 77 61 72 6e 69 6e 67 20 2d  ates a warning -
2210: 20 62 75 74 20 69 74 20 61 6c 77 61 79 73 20 77   but it always w
2220: 6f 72 6b 73 20 2a 2f 0a 23 20 64 65 66 69 6e 65  orks */.# define
2230: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
2240: 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a 29 28  TR(X)  ((void*)(
2250: 58 29 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  X)).# define SQL
2260: 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58  ITE_PTR_TO_INT(X
2270: 29 20 20 28 28 69 6e 74 29 28 58 29 29 0a 23 65  )  ((int)(X)).#e
2280: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61  ndif../*.** A ma
2290: 63 72 6f 20 74 6f 20 68 69 6e 74 20 74 6f 20 74  cro to hint to t
22a0: 68 65 20 63 6f 6d 70 69 6c 65 72 20 74 68 61 74  he compiler that
22b0: 20 61 20 66 75 6e 63 74 69 6f 6e 20 73 68 6f 75   a function shou
22c0: 6c 64 20 6e 6f 74 20 62 65 0a 2a 2a 20 69 6e 6c  ld not be.** inl
22d0: 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  ined..*/.#if def
22e0: 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 0a 23  ined(__GNUC__).#
22f0: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
2300: 4e 4f 49 4e 4c 49 4e 45 20 20 5f 5f 61 74 74 72  NOINLINE  __attr
2310: 69 62 75 74 65 5f 5f 28 28 6e 6f 69 6e 6c 69 6e  ibute__((noinlin
2320: 65 29 29 0a 23 65 6c 69 66 20 64 65 66 69 6e 65  e)).#elif define
2330: 64 28 5f 4d 53 43 5f 56 45 52 29 20 26 26 20 5f  d(_MSC_VER) && _
2340: 4d 53 43 5f 56 45 52 3e 3d 31 33 31 30 0a 23 20  MSC_VER>=1310.# 
2350: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e   define SQLITE_N
2360: 4f 49 4e 4c 49 4e 45 20 20 5f 5f 64 65 63 6c 73  OINLINE  __decls
2370: 70 65 63 28 6e 6f 69 6e 6c 69 6e 65 29 0a 23 65  pec(noinline).#e
2380: 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 53 51  lse.#  define SQ
2390: 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 0a 23 65  LITE_NOINLINE.#e
23a0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65  ndif../*.** Make
23b0: 20 73 75 72 65 20 74 68 61 74 20 74 68 65 20 63   sure that the c
23c0: 6f 6d 70 69 6c 65 72 20 69 6e 74 72 69 6e 73 69  ompiler intrinsi
23d0: 63 73 20 77 65 20 64 65 73 69 72 65 20 61 72 65  cs we desire are
23e0: 20 65 6e 61 62 6c 65 64 20 77 68 65 6e 0a 2a 2a   enabled when.**
23f0: 20 63 6f 6d 70 69 6c 69 6e 67 20 77 69 74 68 20   compiling with 
2400: 61 6e 20 61 70 70 72 6f 70 72 69 61 74 65 20 76  an appropriate v
2410: 65 72 73 69 6f 6e 20 6f 66 20 4d 53 56 43 20 75  ersion of MSVC u
2420: 6e 6c 65 73 73 20 70 72 65 76 65 6e 74 65 64 20  nless prevented 
2430: 62 79 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45  by.** the SQLITE
2440: 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49 4e 53  _DISABLE_INTRINS
2450: 49 43 20 64 65 66 69 6e 65 2e 0a 2a 2f 0a 23 69  IC define..*/.#i
2460: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
2470: 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49 4e  E_DISABLE_INTRIN
2480: 53 49 43 29 0a 23 20 20 69 66 20 64 65 66 69 6e  SIC).#  if defin
2490: 65 64 28 5f 4d 53 43 5f 56 45 52 29 20 26 26 20  ed(_MSC_VER) && 
24a0: 5f 4d 53 43 5f 56 45 52 3e 3d 31 34 30 30 0a 23  _MSC_VER>=1400.#
24b0: 20 20 20 20 69 66 20 21 64 65 66 69 6e 65 64 28      if !defined(
24c0: 5f 57 49 4e 33 32 5f 57 43 45 29 0a 23 20 20 20  _WIN32_WCE).#   
24d0: 20 20 20 69 6e 63 6c 75 64 65 20 3c 69 6e 74 72     include <intr
24e0: 69 6e 2e 68 3e 0a 23 20 20 20 20 20 20 70 72 61  in.h>.#      pra
24f0: 67 6d 61 20 69 6e 74 72 69 6e 73 69 63 28 5f 62  gma intrinsic(_b
2500: 79 74 65 73 77 61 70 5f 75 73 68 6f 72 74 29 0a  yteswap_ushort).
2510: 23 20 20 20 20 20 20 70 72 61 67 6d 61 20 69 6e  #      pragma in
2520: 74 72 69 6e 73 69 63 28 5f 62 79 74 65 73 77 61  trinsic(_byteswa
2530: 70 5f 75 6c 6f 6e 67 29 0a 23 20 20 20 20 20 20  p_ulong).#      
2540: 70 72 61 67 6d 61 20 69 6e 74 72 69 6e 73 69 63  pragma intrinsic
2550: 28 5f 62 79 74 65 73 77 61 70 5f 75 69 6e 74 36  (_byteswap_uint6
2560: 34 29 0a 23 20 20 20 20 20 20 70 72 61 67 6d 61  4).#      pragma
2570: 20 69 6e 74 72 69 6e 73 69 63 28 5f 52 65 61 64   intrinsic(_Read
2580: 57 72 69 74 65 42 61 72 72 69 65 72 29 0a 23 20  WriteBarrier).# 
2590: 20 20 20 65 6c 73 65 0a 23 20 20 20 20 20 20 69     else.#      i
25a0: 6e 63 6c 75 64 65 20 3c 63 6d 6e 69 6e 74 72 69  nclude <cmnintri
25b0: 6e 2e 68 3e 0a 23 20 20 20 20 65 6e 64 69 66 0a  n.h>.#    endif.
25c0: 23 20 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  #  endif.#endif.
25d0: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54  ./*.** The SQLIT
25e0: 45 5f 54 48 52 45 41 44 53 41 46 45 20 6d 61 63  E_THREADSAFE mac
25f0: 72 6f 20 6d 75 73 74 20 62 65 20 64 65 66 69 6e  ro must be defin
2600: 65 64 20 61 73 20 30 2c 20 31 2c 20 6f 72 20 32  ed as 0, 1, or 2
2610: 2e 0a 2a 2a 20 30 20 6d 65 61 6e 73 20 6d 75 74  ..** 0 means mut
2620: 65 78 65 73 20 61 72 65 20 70 65 72 6d 61 6e 65  exes are permane
2630: 6e 74 6c 79 20 64 69 73 61 62 6c 65 20 61 6e 64  ntly disable and
2640: 20 74 68 65 20 6c 69 62 72 61 72 79 20 69 73 20   the library is 
2650: 6e 65 76 65 72 0a 2a 2a 20 74 68 72 65 61 64 73  never.** threads
2660: 61 66 65 2e 20 20 31 20 6d 65 61 6e 73 20 74 68  afe.  1 means th
2670: 65 20 6c 69 62 72 61 72 79 20 69 73 20 73 65 72  e library is ser
2680: 69 61 6c 69 7a 65 64 20 77 68 69 63 68 20 69 73  ialized which is
2690: 20 74 68 65 20 68 69 67 68 65 73 74 0a 2a 2a 20   the highest.** 
26a0: 6c 65 76 65 6c 20 6f 66 20 74 68 72 65 61 64 73  level of threads
26b0: 61 66 65 74 79 2e 20 20 32 20 6d 65 61 6e 73 20  afety.  2 means 
26c0: 74 68 65 20 6c 69 62 72 61 72 79 20 69 73 20 6d  the library is m
26d0: 75 6c 74 69 74 68 72 65 61 64 65 64 20 2d 20 6d  ultithreaded - m
26e0: 75 6c 74 69 70 6c 65 0a 2a 2a 20 74 68 72 65 61  ultiple.** threa
26f0: 64 73 20 63 61 6e 20 75 73 65 20 53 51 4c 69 74  ds can use SQLit
2700: 65 20 61 73 20 6c 6f 6e 67 20 61 73 20 6e 6f 20  e as long as no 
2710: 74 77 6f 20 74 68 72 65 61 64 73 20 74 72 79 20  two threads try 
2720: 74 6f 20 75 73 65 20 74 68 65 20 73 61 6d 65 0a  to use the same.
2730: 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ** database conn
2740: 65 63 74 69 6f 6e 20 61 74 20 74 68 65 20 73 61  ection at the sa
2750: 6d 65 20 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f  me time..**.** O
2760: 6c 64 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66  lder versions of
2770: 20 53 51 4c 69 74 65 20 75 73 65 64 20 61 6e 20   SQLite used an 
2780: 6f 70 74 69 6f 6e 61 6c 20 54 48 52 45 41 44 53  optional THREADS
2790: 41 46 45 20 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65  AFE macro..** We
27a0: 20 73 75 70 70 6f 72 74 20 74 68 61 74 20 66 6f   support that fo
27b0: 72 20 6c 65 67 61 63 79 2e 0a 2a 2a 0a 2a 2a 20  r legacy..**.** 
27c0: 54 6f 20 65 6e 73 75 72 65 20 74 68 61 74 20 74  To ensure that t
27d0: 68 65 20 63 6f 72 72 65 63 74 20 76 61 6c 75 65  he correct value
27e0: 20 6f 66 20 22 54 48 52 45 41 44 53 41 46 45 22   of "THREADSAFE"
27f0: 20 69 73 20 72 65 70 6f 72 74 65 64 20 77 68 65   is reported whe
2800: 6e 20 71 75 65 72 79 69 6e 67 0a 2a 2a 20 66 6f  n querying.** fo
2810: 72 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  r compile-time o
2820: 70 74 69 6f 6e 73 20 61 74 20 72 75 6e 74 69 6d  ptions at runtim
2830: 65 20 28 65 2e 67 2e 20 22 50 52 41 47 4d 41 20  e (e.g. "PRAGMA 
2840: 63 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e 73 22  compile_options"
2850: 29 2c 20 74 68 69 73 0a 2a 2a 20 6c 6f 67 69 63  ), this.** logic
2860: 20 69 73 20 70 61 72 74 69 61 6c 6c 79 20 72 65   is partially re
2870: 70 6c 69 63 61 74 65 64 20 69 6e 20 63 74 69 6d  plicated in ctim
2880: 65 2e 63 2e 20 49 66 20 69 74 20 69 73 20 75 70  e.c. If it is up
2890: 64 61 74 65 64 20 68 65 72 65 2c 20 69 74 20 73  dated here, it s
28a0: 68 6f 75 6c 64 0a 2a 2a 20 61 6c 73 6f 20 62 65  hould.** also be
28b0: 20 75 70 64 61 74 65 64 20 74 68 65 72 65 2e 0a   updated there..
28c0: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
28d0: 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46  SQLITE_THREADSAF
28e0: 45 29 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28  E).# if defined(
28f0: 54 48 52 45 41 44 53 41 46 45 29 0a 23 20 20 20  THREADSAFE).#   
2900: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 48  define SQLITE_TH
2910: 52 45 41 44 53 41 46 45 20 54 48 52 45 41 44 53  READSAFE THREADS
2920: 41 46 45 0a 23 20 65 6c 73 65 0a 23 20 20 20 64  AFE.# else.#   d
2930: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 48 52  efine SQLITE_THR
2940: 45 41 44 53 41 46 45 20 31 20 2f 2a 20 49 4d 50  EADSAFE 1 /* IMP
2950: 3a 20 52 2d 30 37 32 37 32 2d 32 32 33 30 39 20  : R-07272-22309 
2960: 2a 2f 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69  */.# endif.#endi
2970: 66 0a 0a 2f 2a 0a 2a 2a 20 50 6f 77 65 72 73 61  f../*.** Powersa
2980: 66 65 20 6f 76 65 72 77 72 69 74 65 20 69 73 20  fe overwrite is 
2990: 6f 6e 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20  on by default.  
29a0: 42 75 74 20 63 61 6e 20 62 65 20 74 75 72 6e 65  But can be turne
29b0: 64 20 6f 66 66 20 75 73 69 6e 67 0a 2a 2a 20 74  d off using.** t
29c0: 68 65 20 2d 44 53 51 4c 49 54 45 5f 50 4f 57 45  he -DSQLITE_POWE
29d0: 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45 3d  RSAFE_OVERWRITE=
29e0: 30 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f  0 command-line o
29f0: 70 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65  ption..*/.#ifnde
2a00: 66 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41  f SQLITE_POWERSA
2a10: 46 45 5f 4f 56 45 52 57 52 49 54 45 0a 23 20 64  FE_OVERWRITE.# d
2a20: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 4f 57  efine SQLITE_POW
2a30: 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45  ERSAFE_OVERWRITE
2a40: 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   1.#endif../*.**
2a50: 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
2a60: 32 35 37 31 35 2d 33 37 30 37 32 20 4d 65 6d 6f  25715-37072 Memo
2a70: 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 74  ry allocation st
2a80: 61 74 69 73 74 69 63 73 20 61 72 65 20 65 6e 61  atistics are ena
2a90: 62 6c 65 64 20 62 79 0a 2a 2a 20 64 65 66 61 75  bled by.** defau
2aa0: 6c 74 20 75 6e 6c 65 73 73 20 53 51 4c 69 74 65  lt unless SQLite
2ab0: 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74   is compiled wit
2ac0: 68 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  h SQLITE_DEFAULT
2ad0: 5f 4d 45 4d 53 54 41 54 55 53 3d 30 20 69 6e 0a  _MEMSTATUS=0 in.
2ae0: 2a 2a 20 77 68 69 63 68 20 63 61 73 65 20 6d 65  ** which case me
2af0: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
2b00: 73 74 61 74 69 73 74 69 63 73 20 61 72 65 20 64  statistics are d
2b10: 69 73 61 62 6c 65 64 20 62 79 20 64 65 66 61 75  isabled by defau
2b20: 6c 74 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  lt..*/.#if !defi
2b30: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 46 41 55  ned(SQLITE_DEFAU
2b40: 4c 54 5f 4d 45 4d 53 54 41 54 55 53 29 0a 23 20  LT_MEMSTATUS).# 
2b50: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
2b60: 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 20  FAULT_MEMSTATUS 
2b70: 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
2b80: 45 78 61 63 74 6c 79 20 6f 6e 65 20 6f 66 20 74  Exactly one of t
2b90: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
2ba0: 72 6f 73 20 6d 75 73 74 20 62 65 20 64 65 66 69  ros must be defi
2bb0: 6e 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a  ned in order to.
2bc0: 2a 2a 20 73 70 65 63 69 66 79 20 77 68 69 63 68  ** specify which
2bd0: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
2be0: 6f 6e 20 73 75 62 73 79 73 74 65 6d 20 74 6f 20  on subsystem to 
2bf0: 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  use..**.**     S
2c00: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
2c10: 4c 4f 43 20 20 20 20 20 20 20 20 20 20 2f 2f 20  LOC          // 
2c20: 55 73 65 20 6e 6f 72 6d 61 6c 20 73 79 73 74 65  Use normal syste
2c30: 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20  m malloc().**   
2c40: 20 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d    SQLITE_WIN32_M
2c50: 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20 20  ALLOC           
2c60: 2f 2f 20 55 73 65 20 57 69 6e 33 32 20 6e 61 74  // Use Win32 nat
2c70: 69 76 65 20 68 65 61 70 20 41 50 49 0a 2a 2a 20  ive heap API.** 
2c80: 20 20 20 20 53 51 4c 49 54 45 5f 5a 45 52 4f 5f      SQLITE_ZERO_
2c90: 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20  MALLOC          
2ca0: 20 20 2f 2f 20 55 73 65 20 61 20 73 74 75 62 20    // Use a stub 
2cb0: 61 6c 6c 6f 63 61 74 6f 72 20 74 68 61 74 20 61  allocator that a
2cc0: 6c 77 61 79 73 20 66 61 69 6c 73 0a 2a 2a 20 20  lways fails.**  
2cd0: 20 20 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42     SQLITE_MEMDEB
2ce0: 55 47 20 20 20 20 20 20 20 20 20 20 20 20 20 20  UG              
2cf0: 20 2f 2f 20 44 65 62 75 67 67 69 6e 67 20 76 65   // Debugging ve
2d00: 72 73 69 6f 6e 20 6f 66 20 73 79 73 74 65 6d 20  rsion of system 
2d10: 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 0a 2a 2a 20 4f  malloc().**.** O
2d20: 6e 20 57 69 6e 64 6f 77 73 2c 20 69 66 20 74 68  n Windows, if th
2d30: 65 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d  e SQLITE_WIN32_M
2d40: 41 4c 4c 4f 43 5f 56 41 4c 49 44 41 54 45 20 6d  ALLOC_VALIDATE m
2d50: 61 63 72 6f 20 69 73 20 64 65 66 69 6e 65 64 20  acro is defined 
2d60: 61 6e 64 20 74 68 65 0a 2a 2a 20 61 73 73 65 72  and the.** asser
2d70: 74 28 29 20 6d 61 63 72 6f 20 69 73 20 65 6e 61  t() macro is ena
2d80: 62 6c 65 64 2c 20 65 61 63 68 20 63 61 6c 6c 20  bled, each call 
2d90: 69 6e 74 6f 20 74 68 65 20 57 69 6e 33 32 20 6e  into the Win32 n
2da0: 61 74 69 76 65 20 68 65 61 70 20 73 75 62 73 79  ative heap subsy
2db0: 73 74 65 6d 0a 2a 2a 20 77 69 6c 6c 20 63 61 75  stem.** will cau
2dc0: 73 65 20 48 65 61 70 56 61 6c 69 64 61 74 65 20  se HeapValidate 
2dd0: 74 6f 20 62 65 20 63 61 6c 6c 65 64 2e 20 20 49  to be called.  I
2de0: 66 20 68 65 61 70 20 76 61 6c 69 64 61 74 69 6f  f heap validatio
2df0: 6e 20 73 68 6f 75 6c 64 20 66 61 69 6c 2c 20 61  n should fail, a
2e00: 6e 0a 2a 2a 20 61 73 73 65 72 74 69 6f 6e 20 77  n.** assertion w
2e10: 69 6c 6c 20 62 65 20 74 72 69 67 67 65 72 65 64  ill be triggered
2e20: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20  ..**.** If none 
2e30: 6f 66 20 74 68 65 20 61 62 6f 76 65 20 61 72 65  of the above are
2e40: 20 64 65 66 69 6e 65 64 2c 20 74 68 65 6e 20 73   defined, then s
2e50: 65 74 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d  et SQLITE_SYSTEM
2e60: 5f 4d 41 4c 4c 4f 43 20 61 73 0a 2a 2a 20 74 68  _MALLOC as.** th
2e70: 65 20 64 65 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69  e default..*/.#i
2e80: 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
2e90: 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20  _SYSTEM_MALLOC) 
2ea0: 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51  \.  + defined(SQ
2eb0: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2ec0: 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64  C) \.  + defined
2ed0: 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c  (SQLITE_ZERO_MAL
2ee0: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
2ef0: 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  ed(SQLITE_MEMDEB
2f00: 55 47 29 3e 31 0a 23 20 65 72 72 6f 72 20 22 54  UG)>1.# error "T
2f10: 77 6f 20 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68  wo or more of th
2f20: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70  e following comp
2f30: 69 6c 65 2d 74 69 6d 65 20 63 6f 6e 66 69 67 75  ile-time configu
2f40: 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a  ration options\.
2f50: 20 61 72 65 20 64 65 66 69 6e 65 64 20 62 75 74   are defined but
2f60: 20 61 74 20 6d 6f 73 74 20 6f 6e 65 20 69 73 20   at most one is 
2f70: 61 6c 6c 6f 77 65 64 3a 5c 0a 20 53 51 4c 49 54  allowed:\. SQLIT
2f80: 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c  E_SYSTEM_MALLOC,
2f90: 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41   SQLITE_WIN32_MA
2fa0: 4c 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 4d 45 4d  LLOC, SQLITE_MEM
2fb0: 44 45 42 55 47 2c 5c 0a 20 53 51 4c 49 54 45 5f  DEBUG,\. SQLITE_
2fc0: 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e  ZERO_MALLOC".#en
2fd0: 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
2fe0: 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41  SQLITE_SYSTEM_MA
2ff0: 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69  LLOC) \.  + defi
3000: 6e 65 64 28 53 51 4c 49 54 45 5f 57 49 4e 33 32  ned(SQLITE_WIN32
3010: 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64  _MALLOC) \.  + d
3020: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 5a 45  efined(SQLITE_ZE
3030: 52 4f 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b  RO_MALLOC) \.  +
3040: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
3050: 4d 45 4d 44 45 42 55 47 29 3d 3d 30 0a 23 20 64  MEMDEBUG)==0.# d
3060: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 59 53  efine SQLITE_SYS
3070: 54 45 4d 5f 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e  TEM_MALLOC 1.#en
3080: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51  dif../*.** If SQ
3090: 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54  LITE_MALLOC_SOFT
30a0: 5f 4c 49 4d 49 54 20 69 73 20 6e 6f 74 20 7a 65  _LIMIT is not ze
30b0: 72 6f 2c 20 74 68 65 6e 20 74 72 79 20 74 6f 20  ro, then try to 
30c0: 6b 65 65 70 20 74 68 65 0a 2a 2a 20 73 69 7a 65  keep the.** size
30d0: 73 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  s of memory allo
30e0: 63 61 74 69 6f 6e 73 20 62 65 6c 6f 77 20 74 68  cations below th
30f0: 69 73 20 76 61 6c 75 65 20 77 68 65 72 65 20 70  is value where p
3100: 6f 73 73 69 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20  ossible..*/.#if 
3110: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
3120: 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49  MALLOC_SOFT_LIMI
3130: 54 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  T).# define SQLI
3140: 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c  TE_MALLOC_SOFT_L
3150: 49 4d 49 54 20 31 30 32 34 0a 23 65 6e 64 69 66  IMIT 1024.#endif
3160: 0a 0a 2f 2a 0a 2a 2a 20 57 65 20 6e 65 65 64 20  ../*.** We need 
3170: 74 6f 20 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e  to define _XOPEN
3180: 5f 53 4f 55 52 43 45 20 61 73 20 66 6f 6c 6c 6f  _SOURCE as follo
3190: 77 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 65  ws in order to e
31a0: 6e 61 62 6c 65 0a 2a 2a 20 72 65 63 75 72 73 69  nable.** recursi
31b0: 76 65 20 6d 75 74 65 78 65 73 20 6f 6e 20 6d 6f  ve mutexes on mo
31c0: 73 74 20 55 6e 69 78 20 73 79 73 74 65 6d 73 20  st Unix systems 
31d0: 61 6e 64 20 66 63 68 6d 6f 64 28 29 20 6f 6e 20  and fchmod() on 
31e0: 4f 70 65 6e 42 53 44 2e 0a 2a 2a 20 42 75 74 20  OpenBSD..** But 
31f0: 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 64 65  _XOPEN_SOURCE de
3200: 66 69 6e 65 20 63 61 75 73 65 73 20 70 72 6f 62  fine causes prob
3210: 6c 65 6d 73 20 66 6f 72 20 4d 61 63 20 4f 53 20  lems for Mac OS 
3220: 58 2c 20 73 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74  X, so omit.** it
3230: 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  ..*/.#if !define
3240: 64 28 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 29  d(_XOPEN_SOURCE)
3250: 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 5f 44   && !defined(__D
3260: 41 52 57 49 4e 5f 5f 29 20 26 26 20 21 64 65 66  ARWIN__) && !def
3270: 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a  ined(__APPLE__).
3280: 23 20 20 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e  #  define _XOPEN
3290: 5f 53 4f 55 52 43 45 20 36 30 30 0a 23 65 6e 64  _SOURCE 600.#end
32a0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 4e 44 45 42 55 47  if../*.** NDEBUG
32b0: 20 61 6e 64 20 53 51 4c 49 54 45 5f 44 45 42 55   and SQLITE_DEBU
32c0: 47 20 61 72 65 20 6f 70 70 6f 73 69 74 65 73 2e  G are opposites.
32d0: 20 20 49 74 20 73 68 6f 75 6c 64 20 61 6c 77 61    It should alwa
32e0: 79 73 20 62 65 20 74 72 75 65 20 74 68 61 74 0a  ys be true that.
32f0: 2a 2a 20 64 65 66 69 6e 65 64 28 4e 44 45 42 55  ** defined(NDEBU
3300: 47 29 3d 3d 21 64 65 66 69 6e 65 64 28 53 51 4c  G)==!defined(SQL
3310: 49 54 45 5f 44 45 42 55 47 29 2e 20 20 49 66 20  ITE_DEBUG).  If 
3320: 74 68 69 73 20 69 73 20 6e 6f 74 20 63 75 72 72  this is not curr
3330: 65 6e 74 6c 79 20 74 72 75 65 2c 0a 2a 2a 20 6d  ently true,.** m
3340: 61 6b 65 20 69 74 20 74 72 75 65 20 62 79 20 64  ake it true by d
3350: 65 66 69 6e 69 6e 67 20 6f 72 20 75 6e 64 65 66  efining or undef
3360: 69 6e 69 6e 67 20 4e 44 45 42 55 47 2e 0a 2a 2a  ining NDEBUG..**
3370: 0a 2a 2a 20 53 65 74 74 69 6e 67 20 4e 44 45 42  .** Setting NDEB
3380: 55 47 20 6d 61 6b 65 73 20 74 68 65 20 63 6f 64  UG makes the cod
3390: 65 20 73 6d 61 6c 6c 65 72 20 61 6e 64 20 66 61  e smaller and fa
33a0: 73 74 65 72 20 62 79 20 64 69 73 61 62 6c 69 6e  ster by disablin
33b0: 67 20 74 68 65 0a 2a 2a 20 61 73 73 65 72 74 28  g the.** assert(
33c0: 29 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  ) statements in 
33d0: 74 68 65 20 63 6f 64 65 2e 20 20 53 6f 20 77 65  the code.  So we
33e0: 20 77 61 6e 74 20 74 68 65 20 64 65 66 61 75 6c   want the defaul
33f0: 74 20 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62  t action.** to b
3400: 65 20 66 6f 72 20 4e 44 45 42 55 47 20 74 6f 20  e for NDEBUG to 
3410: 62 65 20 73 65 74 20 61 6e 64 20 4e 44 45 42 55  be set and NDEBU
3420: 47 20 74 6f 20 62 65 20 75 6e 64 65 66 69 6e 65  G to be undefine
3430: 64 20 6f 6e 6c 79 20 69 66 20 53 51 4c 49 54 45  d only if SQLITE
3440: 5f 44 45 42 55 47 0a 2a 2a 20 69 73 20 73 65 74  _DEBUG.** is set
3450: 2e 20 20 54 68 75 73 20 4e 44 45 42 55 47 20 62  .  Thus NDEBUG b
3460: 65 63 6f 6d 65 73 20 61 6e 20 6f 70 74 2d 69 6e  ecomes an opt-in
3470: 20 72 61 74 68 65 72 20 74 68 61 6e 20 61 6e 20   rather than an 
3480: 6f 70 74 2d 6f 75 74 0a 2a 2a 20 66 65 61 74 75  opt-out.** featu
3490: 72 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  re..*/.#if !defi
34a0: 6e 65 64 28 4e 44 45 42 55 47 29 20 26 26 20 21  ned(NDEBUG) && !
34b0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
34c0: 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 4e  EBUG).# define N
34d0: 44 45 42 55 47 20 31 0a 23 65 6e 64 69 66 0a 23  DEBUG 1.#endif.#
34e0: 69 66 20 64 65 66 69 6e 65 64 28 4e 44 45 42 55  if defined(NDEBU
34f0: 47 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51  G) && defined(SQ
3500: 4c 49 54 45 5f 44 45 42 55 47 29 0a 23 20 75 6e  LITE_DEBUG).# un
3510: 64 65 66 20 4e 44 45 42 55 47 0a 23 65 6e 64 69  def NDEBUG.#endi
3520: 66 0a 0a 2f 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20  f../*.** Enable 
3530: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58  SQLITE_ENABLE_EX
3540: 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69  PLAIN_COMMENTS i
3550: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 69  f SQLITE_DEBUG i
3560: 73 20 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a  s turned on..*/.
3570: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
3580: 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41  ITE_ENABLE_EXPLA
3590: 49 4e 5f 43 4f 4d 4d 45 4e 54 53 29 20 26 26 20  IN_COMMENTS) && 
35a0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
35b0: 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 53  EBUG).# define S
35c0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50  QLITE_ENABLE_EXP
35d0: 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 31 0a  LAIN_COMMENTS 1.
35e0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
35f0: 65 20 74 65 73 74 63 61 73 65 28 29 20 6d 61 63  e testcase() mac
3600: 72 6f 20 69 73 20 75 73 65 64 20 74 6f 20 61 69  ro is used to ai
3610: 64 20 69 6e 20 63 6f 76 65 72 61 67 65 20 74 65  d in coverage te
3620: 73 74 69 6e 67 2e 20 20 57 68 65 6e 0a 2a 2a 20  sting.  When.** 
3630: 64 6f 69 6e 67 20 63 6f 76 65 72 61 67 65 20 74  doing coverage t
3640: 65 73 74 69 6e 67 2c 20 74 68 65 20 63 6f 6e 64  esting, the cond
3650: 69 74 69 6f 6e 20 69 6e 73 69 64 65 20 74 68 65  ition inside the
3660: 20 61 72 67 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20   argument to.** 
3670: 74 65 73 74 63 61 73 65 28 29 20 6d 75 73 74 20  testcase() must 
3680: 62 65 20 65 76 61 6c 75 61 74 65 64 20 62 6f 74  be evaluated bot
3690: 68 20 74 72 75 65 20 61 6e 64 20 66 61 6c 73 65  h true and false
36a0: 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20   in order to.** 
36b0: 67 65 74 20 66 75 6c 6c 20 62 72 61 6e 63 68 20  get full branch 
36c0: 63 6f 76 65 72 61 67 65 2e 20 20 54 68 65 20 74  coverage.  The t
36d0: 65 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f 20  estcase() macro 
36e0: 69 73 20 69 6e 73 65 72 74 65 64 0a 2a 2a 20 74  is inserted.** t
36f0: 6f 20 68 65 6c 70 20 65 6e 73 75 72 65 20 61 64  o help ensure ad
3700: 65 71 75 61 74 65 20 74 65 73 74 20 63 6f 76 65  equate test cove
3710: 72 61 67 65 20 69 6e 20 70 6c 61 63 65 73 20 77  rage in places w
3720: 68 65 72 65 20 73 69 6d 70 6c 65 0a 2a 2a 20 63  here simple.** c
3730: 6f 6e 64 69 74 69 6f 6e 2f 64 65 63 69 73 69 6f  ondition/decisio
3740: 6e 20 63 6f 76 65 72 61 67 65 20 69 73 20 69 6e  n coverage is in
3750: 61 64 65 71 75 61 74 65 2e 20 20 46 6f 72 20 65  adequate.  For e
3760: 78 61 6d 70 6c 65 2c 20 74 65 73 74 63 61 73 65  xample, testcase
3770: 28 29 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73 65  ().** can be use
3780: 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 62  d to make sure b
3790: 6f 75 6e 64 61 72 79 20 76 61 6c 75 65 73 20 61  oundary values a
37a0: 72 65 20 74 65 73 74 65 64 2e 20 20 46 6f 72 0a  re tested.  For.
37b0: 2a 2a 20 62 69 74 6d 61 73 6b 20 74 65 73 74 73  ** bitmask tests
37c0: 2c 20 74 65 73 74 63 61 73 65 28 29 20 63 61 6e  , testcase() can
37d0: 20 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b 65   be used to make
37e0: 20 73 75 72 65 20 65 61 63 68 20 62 69 74 0a 2a   sure each bit.*
37f0: 2a 20 69 73 20 73 69 67 6e 69 66 69 63 61 6e 74  * is significant
3800: 20 61 6e 64 20 75 73 65 64 20 61 74 20 6c 65 61   and used at lea
3810: 73 74 20 6f 6e 63 65 2e 20 20 4f 6e 20 73 77 69  st once.  On swi
3820: 74 63 68 20 73 74 61 74 65 6d 65 6e 74 73 0a 2a  tch statements.*
3830: 2a 20 77 68 65 72 65 20 6d 75 6c 74 69 70 6c 65  * where multiple
3840: 20 63 61 73 65 73 20 67 6f 20 74 6f 20 74 68 65   cases go to the
3850: 20 73 61 6d 65 20 62 6c 6f 63 6b 20 6f 66 20 63   same block of c
3860: 6f 64 65 2c 20 74 65 73 74 63 61 73 65 28 29 0a  ode, testcase().
3870: 2a 2a 20 63 61 6e 20 69 6e 73 75 72 65 20 74 68  ** can insure th
3880: 61 74 20 61 6c 6c 20 63 61 73 65 73 20 61 72 65  at all cases are
3890: 20 65 76 61 6c 75 61 74 65 64 2e 0a 2a 2a 0a 2a   evaluated..**.*
38a0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
38b0: 43 4f 56 45 52 41 47 45 5f 54 45 53 54 0a 20 20  COVERAGE_TEST.  
38c0: 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 76 65  void sqlite3Cove
38d0: 72 61 67 65 28 69 6e 74 29 3b 0a 23 20 64 65 66  rage(int);.# def
38e0: 69 6e 65 20 74 65 73 74 63 61 73 65 28 58 29 20  ine testcase(X) 
38f0: 20 69 66 28 20 58 20 29 7b 20 73 71 6c 69 74 65   if( X ){ sqlite
3900: 33 43 6f 76 65 72 61 67 65 28 5f 5f 4c 49 4e 45  3Coverage(__LINE
3910: 5f 5f 29 3b 20 7d 0a 23 65 6c 73 65 0a 23 20 64  __); }.#else.# d
3920: 65 66 69 6e 65 20 74 65 73 74 63 61 73 65 28 58  efine testcase(X
3930: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
3940: 54 68 65 20 54 45 53 54 4f 4e 4c 59 20 6d 61 63  The TESTONLY mac
3950: 72 6f 20 69 73 20 75 73 65 64 20 74 6f 20 65 6e  ro is used to en
3960: 63 6c 6f 73 65 20 76 61 72 69 61 62 6c 65 20 64  close variable d
3970: 65 63 6c 61 72 61 74 69 6f 6e 73 20 6f 72 0a 2a  eclarations or.*
3980: 2a 20 6f 74 68 65 72 20 62 69 74 73 20 6f 66 20  * other bits of 
3990: 63 6f 64 65 20 74 68 61 74 20 61 72 65 20 6e 65  code that are ne
39a0: 65 64 65 64 20 74 6f 20 73 75 70 70 6f 72 74 20  eded to support 
39b0: 74 68 65 20 61 72 67 75 6d 65 6e 74 73 0a 2a 2a  the arguments.**
39c0: 20 77 69 74 68 69 6e 20 74 65 73 74 63 61 73 65   within testcase
39d0: 28 29 20 61 6e 64 20 61 73 73 65 72 74 28 29 20  () and assert() 
39e0: 6d 61 63 72 6f 73 2e 0a 2a 2f 0a 23 69 66 20 21  macros..*/.#if !
39f0: 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20  defined(NDEBUG) 
3a00: 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
3a10: 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54 29  E_COVERAGE_TEST)
3a20: 0a 23 20 64 65 66 69 6e 65 20 54 45 53 54 4f 4e  .# define TESTON
3a30: 4c 59 28 58 29 20 20 58 0a 23 65 6c 73 65 0a 23  LY(X)  X.#else.#
3a40: 20 64 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59   define TESTONLY
3a50: 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (X).#endif../*.*
3a60: 2a 20 53 6f 6d 65 74 69 6d 65 73 20 77 65 20 6e  * Sometimes we n
3a70: 65 65 64 20 61 20 73 6d 61 6c 6c 20 61 6d 6f 75  eed a small amou
3a80: 6e 74 20 6f 66 20 63 6f 64 65 20 73 75 63 68 20  nt of code such 
3a90: 61 73 20 61 20 76 61 72 69 61 62 6c 65 20 69 6e  as a variable in
3aa0: 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20  itialization.** 
3ab0: 74 6f 20 73 65 74 75 70 20 66 6f 72 20 61 20 6c  to setup for a l
3ac0: 61 74 65 72 20 61 73 73 65 72 74 28 29 20 73 74  ater assert() st
3ad0: 61 74 65 6d 65 6e 74 2e 20 20 57 65 20 64 6f 20  atement.  We do 
3ae0: 6e 6f 74 20 77 61 6e 74 20 74 68 69 73 20 63 6f  not want this co
3af0: 64 65 20 74 6f 0a 2a 2a 20 61 70 70 65 61 72 20  de to.** appear 
3b00: 77 68 65 6e 20 61 73 73 65 72 74 28 29 20 69 73  when assert() is
3b10: 20 64 69 73 61 62 6c 65 64 2e 20 20 54 68 65 20   disabled.  The 
3b20: 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20  following macro 
3b30: 69 73 20 74 68 65 72 65 66 6f 72 65 0a 2a 2a 20  is therefore.** 
3b40: 75 73 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20  used to contain 
3b50: 74 68 61 74 20 73 65 74 75 70 20 63 6f 64 65 2e  that setup code.
3b60: 20 20 54 68 65 20 22 56 56 41 22 20 61 63 72 6f    The "VVA" acro
3b70: 6e 79 6d 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a  nym stands for.*
3b80: 2a 20 22 56 65 72 69 66 69 63 61 74 69 6f 6e 2c  * "Verification,
3b90: 20 56 61 6c 69 64 61 74 69 6f 6e 2c 20 61 6e 64   Validation, and
3ba0: 20 41 63 63 72 65 64 69 74 61 74 69 6f 6e 22 2e   Accreditation".
3bb0: 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
3bc0: 2c 20 74 68 65 0a 2a 2a 20 63 6f 64 65 20 77 69  , the.** code wi
3bd0: 74 68 69 6e 20 56 56 41 5f 4f 4e 4c 59 28 29 20  thin VVA_ONLY() 
3be0: 77 69 6c 6c 20 6f 6e 6c 79 20 72 75 6e 20 64 75  will only run du
3bf0: 72 69 6e 67 20 76 65 72 69 66 69 63 61 74 69 6f  ring verificatio
3c00: 6e 20 70 72 6f 63 65 73 73 65 73 2e 0a 2a 2f 0a  n processes..*/.
3c10: 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 23  #ifndef NDEBUG.#
3c20: 20 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59   define VVA_ONLY
3c30: 28 58 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64  (X)  X.#else.# d
3c40: 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58  efine VVA_ONLY(X
3c50: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
3c60: 54 68 65 20 41 4c 57 41 59 53 20 61 6e 64 20 4e  The ALWAYS and N
3c70: 45 56 45 52 20 6d 61 63 72 6f 73 20 73 75 72 72  EVER macros surr
3c80: 6f 75 6e 64 20 62 6f 6f 6c 65 61 6e 20 65 78 70  ound boolean exp
3c90: 72 65 73 73 69 6f 6e 73 20 77 68 69 63 68 0a 2a  ressions which.*
3ca0: 2a 20 61 72 65 20 69 6e 74 65 6e 64 65 64 20 74  * are intended t
3cb0: 6f 20 61 6c 77 61 79 73 20 62 65 20 74 72 75 65  o always be true
3cc0: 20 6f 72 20 66 61 6c 73 65 2c 20 72 65 73 70 65   or false, respe
3cd0: 63 74 69 76 65 6c 79 2e 20 20 53 75 63 68 0a 2a  ctively.  Such.*
3ce0: 2a 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63 6f  * expressions co
3cf0: 75 6c 64 20 62 65 20 6f 6d 69 74 74 65 64 20 66  uld be omitted f
3d00: 72 6f 6d 20 74 68 65 20 63 6f 64 65 20 63 6f 6d  rom the code com
3d10: 70 6c 65 74 65 6c 79 2e 20 20 42 75 74 20 74 68  pletely.  But th
3d20: 65 79 0a 2a 2a 20 61 72 65 20 69 6e 63 6c 75 64  ey.** are includ
3d30: 65 64 20 69 6e 20 61 20 66 65 77 20 63 61 73 65  ed in a few case
3d40: 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e  s in order to en
3d50: 68 61 6e 63 65 20 74 68 65 20 72 65 73 69 6c 69  hance the resili
3d60: 65 6e 63 65 0a 2a 2a 20 6f 66 20 53 51 4c 69 74  ence.** of SQLit
3d70: 65 20 74 6f 20 75 6e 65 78 70 65 63 74 65 64 20  e to unexpected 
3d80: 62 65 68 61 76 69 6f 72 20 2d 20 74 6f 20 6d 61  behavior - to ma
3d90: 6b 65 20 74 68 65 20 63 6f 64 65 20 22 73 65 6c  ke the code "sel
3da0: 66 2d 68 65 61 6c 69 6e 67 22 0a 2a 2a 20 6f 72  f-healing".** or
3db0: 20 22 64 75 63 74 69 6c 65 22 20 72 61 74 68 65   "ductile" rathe
3dc0: 72 20 74 68 61 6e 20 62 65 69 6e 67 20 22 62 72  r than being "br
3dd0: 69 74 74 6c 65 22 20 61 6e 64 20 63 72 61 73 68  ittle" and crash
3de0: 69 6e 67 20 61 74 20 74 68 65 20 66 69 72 73 74  ing at the first
3df0: 0a 2a 2a 20 68 69 6e 74 20 6f 66 20 75 6e 70 6c  .** hint of unpl
3e00: 61 6e 6e 65 64 20 62 65 68 61 76 69 6f 72 2e 0a  anned behavior..
3e10: 2a 2a 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77  **.** In other w
3e20: 6f 72 64 73 2c 20 41 4c 57 41 59 53 20 61 6e 64  ords, ALWAYS and
3e30: 20 4e 45 56 45 52 20 61 72 65 20 61 64 64 65 64   NEVER are added
3e40: 20 66 6f 72 20 64 65 66 65 6e 73 69 76 65 20 63   for defensive c
3e50: 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20  ode..**.** When 
3e60: 64 6f 69 6e 67 20 63 6f 76 65 72 61 67 65 20 74  doing coverage t
3e70: 65 73 74 69 6e 67 20 41 4c 57 41 59 53 20 61 6e  esting ALWAYS an
3e80: 64 20 4e 45 56 45 52 20 61 72 65 20 68 61 72 64  d NEVER are hard
3e90: 2d 63 6f 64 65 64 20 74 6f 0a 2a 2a 20 62 65 20  -coded to.** be 
3ea0: 74 72 75 65 20 61 6e 64 20 66 61 6c 73 65 20 73  true and false s
3eb0: 6f 20 74 68 61 74 20 74 68 65 20 75 6e 72 65 61  o that the unrea
3ec0: 63 68 61 62 6c 65 20 63 6f 64 65 20 74 68 65 79  chable code they
3ed0: 20 73 70 65 63 69 66 79 20 77 69 6c 6c 0a 2a 2a   specify will.**
3ee0: 20 6e 6f 74 20 62 65 20 63 6f 75 6e 74 65 64 20   not be counted 
3ef0: 61 73 20 75 6e 74 65 73 74 65 64 20 63 6f 64 65  as untested code
3f00: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
3f10: 28 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45  (SQLITE_COVERAGE
3f20: 5f 54 45 53 54 29 20 7c 7c 20 64 65 66 69 6e 65  _TEST) || define
3f30: 64 28 53 51 4c 49 54 45 5f 4d 55 54 41 54 49 4f  d(SQLITE_MUTATIO
3f40: 4e 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65  N_TEST).# define
3f50: 20 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20   ALWAYS(X)      
3f60: 28 31 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56  (1).# define NEV
3f70: 45 52 28 58 29 20 20 20 20 20 20 20 28 30 29 0a  ER(X)       (0).
3f80: 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28 4e  #elif !defined(N
3f90: 44 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20  DEBUG).# define 
3fa0: 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20 28  ALWAYS(X)      (
3fb0: 28 58 29 3f 31 3a 28 61 73 73 65 72 74 28 30 29  (X)?1:(assert(0)
3fc0: 2c 30 29 29 0a 23 20 64 65 66 69 6e 65 20 4e 45  ,0)).# define NE
3fd0: 56 45 52 28 58 29 20 20 20 20 20 20 20 28 28 58  VER(X)       ((X
3fe0: 29 3f 28 61 73 73 65 72 74 28 30 29 2c 31 29 3a  )?(assert(0),1):
3ff0: 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  0).#else.# defin
4000: 65 20 41 4c 57 41 59 53 28 58 29 20 20 20 20 20  e ALWAYS(X)     
4010: 20 28 58 29 0a 23 20 64 65 66 69 6e 65 20 4e 45   (X).# define NE
4020: 56 45 52 28 58 29 20 20 20 20 20 20 20 28 58 29  VER(X)       (X)
4030: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53  .#endif../*.** S
4040: 6f 6d 65 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75  ome malloc failu
4050: 72 65 73 20 61 72 65 20 6f 6e 6c 79 20 70 6f 73  res are only pos
4060: 73 69 62 6c 65 20 69 66 20 53 51 4c 49 54 45 5f  sible if SQLITE_
4070: 54 45 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52  TEST_REALLOC_STR
4080: 45 53 53 20 69 73 0a 2a 2a 20 64 65 66 69 6e 65  ESS is.** define
4090: 64 2e 20 20 57 65 20 6e 65 65 64 20 74 6f 20 64  d.  We need to d
40a0: 65 66 65 6e 64 20 61 67 61 69 6e 73 74 20 74 68  efend against th
40b0: 6f 73 65 20 66 61 69 6c 75 72 65 73 20 77 68 65  ose failures whe
40c0: 6e 20 74 65 73 74 69 6e 67 20 77 69 74 68 0a 2a  n testing with.*
40d0: 2a 20 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45  * SQLITE_TEST_RE
40e0: 41 4c 4c 4f 43 5f 53 54 52 45 53 53 2c 20 62 75  ALLOC_STRESS, bu
40f0: 74 20 77 65 20 64 6f 6e 27 74 20 77 61 6e 74 20  t we don't want 
4100: 74 68 65 20 75 6e 72 65 61 63 68 61 62 6c 65 20  the unreachable 
4110: 62 72 61 6e 63 68 65 73 0a 2a 2a 20 64 75 72 69  branches.** duri
4120: 6e 67 20 61 20 6e 6f 72 6d 61 6c 20 62 75 69 6c  ng a normal buil
4130: 64 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  d.  The followin
4140: 67 20 6d 61 63 72 6f 20 63 61 6e 20 62 65 20 75  g macro can be u
4150: 73 65 64 20 74 6f 20 64 69 73 61 62 6c 65 20 74  sed to disable t
4160: 65 73 74 73 0a 2a 2a 20 74 68 61 74 20 61 72 65  ests.** that are
4170: 20 61 6c 77 61 79 73 20 66 61 6c 73 65 20 65 78   always false ex
4180: 63 65 70 74 20 77 68 65 6e 20 53 51 4c 49 54 45  cept when SQLITE
4190: 5f 54 45 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54  _TEST_REALLOC_ST
41a0: 52 45 53 53 20 69 73 20 73 65 74 2e 0a 2a 2f 0a  RESS is set..*/.
41b0: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
41c0: 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c 4f 43 5f  TE_TEST_REALLOC_
41d0: 53 54 52 45 53 53 29 0a 23 20 64 65 66 69 6e 65  STRESS).# define
41e0: 20 4f 4e 4c 59 5f 49 46 5f 52 45 41 4c 4c 4f 43   ONLY_IF_REALLOC
41f0: 5f 53 54 52 45 53 53 28 58 29 20 20 28 58 29 0a  _STRESS(X)  (X).
4200: 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28 4e  #elif !defined(N
4210: 44 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20  DEBUG).# define 
4220: 4f 4e 4c 59 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f  ONLY_IF_REALLOC_
4230: 53 54 52 45 53 53 28 58 29 20 20 28 28 58 29 3f  STRESS(X)  ((X)?
4240: 28 61 73 73 65 72 74 28 30 29 2c 31 29 3a 30 29  (assert(0),1):0)
4250: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
4260: 4f 4e 4c 59 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f  ONLY_IF_REALLOC_
4270: 53 54 52 45 53 53 28 58 29 20 20 28 30 29 0a 23  STRESS(X)  (0).#
4280: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 63  endif../*.** Dec
4290: 6c 61 72 61 74 69 6f 6e 73 20 75 73 65 64 20 66  larations used f
42a0: 6f 72 20 74 72 61 63 69 6e 67 20 74 68 65 20 6f  or tracing the o
42b0: 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d 20  perating system 
42c0: 69 6e 74 65 72 66 61 63 65 73 2e 0a 2a 2f 0a 23  interfaces..*/.#
42d0: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
42e0: 45 5f 46 4f 52 43 45 5f 4f 53 5f 54 52 41 43 45  E_FORCE_OS_TRACE
42f0: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  ) || defined(SQL
4300: 49 54 45 5f 54 45 53 54 29 20 7c 7c 20 5c 0a 20  ITE_TEST) || \. 
4310: 20 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49     (defined(SQLI
4320: 54 45 5f 44 45 42 55 47 29 20 26 26 20 53 51 4c  TE_DEBUG) && SQL
4330: 49 54 45 5f 4f 53 5f 57 49 4e 29 0a 20 20 65 78  ITE_OS_WIN).  ex
4340: 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33  tern int sqlite3
4350: 4f 53 54 72 61 63 65 3b 0a 23 20 64 65 66 69 6e  OSTrace;.# defin
4360: 65 20 4f 53 54 52 41 43 45 28 58 29 20 20 20 20  e OSTRACE(X)    
4370: 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
4380: 33 4f 53 54 72 61 63 65 20 29 20 73 71 6c 69 74  3OSTrace ) sqlit
4390: 65 33 44 65 62 75 67 50 72 69 6e 74 66 20 58 0a  e3DebugPrintf X.
43a0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
43b0: 48 41 56 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65  HAVE_OS_TRACE.#e
43c0: 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 4f 53 54  lse.# define OST
43d0: 52 41 43 45 28 58 29 0a 23 20 75 6e 64 65 66 20  RACE(X).# undef 
43e0: 20 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f   SQLITE_HAVE_OS_
43f0: 54 52 41 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a  TRACE.#endif../*
4400: 0a 2a 2a 20 49 73 20 74 68 65 20 73 71 6c 69 74  .** Is the sqlit
4410: 65 33 45 72 72 4e 61 6d 65 28 29 20 66 75 6e 63  e3ErrName() func
4420: 74 69 6f 6e 20 6e 65 65 64 65 64 20 69 6e 20 74  tion needed in t
4430: 68 65 20 62 75 69 6c 64 3f 20 20 43 75 72 72 65  he build?  Curre
4440: 6e 74 6c 79 2c 0a 2a 2a 20 69 74 20 69 73 20 6e  ntly,.** it is n
4450: 65 65 64 65 64 20 62 79 20 22 6d 75 74 65 78 5f  eeded by "mutex_
4460: 77 33 32 2e 63 22 20 28 77 68 65 6e 20 64 65 62  w32.c" (when deb
4470: 75 67 67 69 6e 67 29 2c 20 22 6f 73 5f 77 69 6e  ugging), "os_win
4480: 2e 63 22 20 28 77 68 65 6e 0a 2a 2a 20 4f 53 54  .c" (when.** OST
4490: 52 41 43 45 20 69 73 20 65 6e 61 62 6c 65 64 29  RACE is enabled)
44a0: 2c 20 61 6e 64 20 62 79 20 73 65 76 65 72 61 6c  , and by several
44b0: 20 22 74 65 73 74 2a 2e 63 22 20 66 69 6c 65 73   "test*.c" files
44c0: 20 28 77 68 69 63 68 20 61 72 65 0a 2a 2a 20 63   (which are.** c
44d0: 6f 6d 70 69 6c 65 64 20 75 73 69 6e 67 20 53 51  ompiled using SQ
44e0: 4c 49 54 45 5f 54 45 53 54 29 2e 0a 2a 2f 0a 23  LITE_TEST)..*/.#
44f0: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
4500: 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41 43 45 29  E_HAVE_OS_TRACE)
4510: 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
4520: 54 45 5f 54 45 53 54 29 20 7c 7c 20 5c 0a 20 20  TE_TEST) || \.  
4530: 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54    (defined(SQLIT
4540: 45 5f 44 45 42 55 47 29 20 26 26 20 53 51 4c 49  E_DEBUG) && SQLI
4550: 54 45 5f 4f 53 5f 57 49 4e 29 0a 23 20 64 65 66  TE_OS_WIN).# def
4560: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 45 45 44 5f  ine SQLITE_NEED_
4570: 45 52 52 5f 4e 41 4d 45 0a 23 65 6c 73 65 0a 23  ERR_NAME.#else.#
4580: 20 75 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 4e   undef  SQLITE_N
4590: 45 45 44 5f 45 52 52 5f 4e 41 4d 45 0a 23 65 6e  EED_ERR_NAME.#en
45a0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54  dif../*.** SQLIT
45b0: 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e  E_ENABLE_EXPLAIN
45c0: 5f 43 4f 4d 4d 45 4e 54 53 20 69 73 20 69 6e 63  _COMMENTS is inc
45d0: 6f 6d 70 61 74 69 62 6c 65 20 77 69 74 68 20 53  ompatible with S
45e0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41  QLITE_OMIT_EXPLA
45f0: 49 4e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  IN.*/.#ifdef SQL
4600: 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e  ITE_OMIT_EXPLAIN
4610: 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f  .# undef SQLITE_
4620: 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43  ENABLE_EXPLAIN_C
4630: 4f 4d 4d 45 4e 54 53 0a 23 65 6e 64 69 66 0a 0a  OMMENTS.#endif..
4640: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75  /*.** Return tru
4650: 65 20 28 6e 6f 6e 2d 7a 65 72 6f 29 20 69 66 20  e (non-zero) if 
4660: 74 68 65 20 69 6e 70 75 74 20 69 73 20 61 6e 20  the input is an 
4670: 69 6e 74 65 67 65 72 20 74 68 61 74 20 69 73 20  integer that is 
4680: 74 6f 6f 20 6c 61 72 67 65 0a 2a 2a 20 74 6f 20  too large.** to 
4690: 66 69 74 20 69 6e 20 33 32 2d 62 69 74 73 2e 20  fit in 32-bits. 
46a0: 20 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75   This macro is u
46b0: 73 65 64 20 69 6e 73 69 64 65 20 6f 66 20 76 61  sed inside of va
46c0: 72 69 6f 75 73 20 74 65 73 74 63 61 73 65 28 29  rious testcase()
46d0: 0a 2a 2a 20 6d 61 63 72 6f 73 20 74 6f 20 76 65  .** macros to ve
46e0: 72 69 66 79 20 74 68 61 74 20 77 65 20 68 61 76  rify that we hav
46f0: 65 20 74 65 73 74 65 64 20 53 51 4c 69 74 65 20  e tested SQLite 
4700: 66 6f 72 20 6c 61 72 67 65 2d 66 69 6c 65 20 73  for large-file s
4710: 75 70 70 6f 72 74 2e 0a 2a 2f 0a 23 64 65 66 69  upport..*/.#defi
4720: 6e 65 20 49 53 5f 42 49 47 5f 49 4e 54 28 58 29  ne IS_BIG_INT(X)
4730: 20 20 28 28 28 58 29 26 7e 28 69 36 34 29 30 78    (((X)&~(i64)0x
4740: 66 66 66 66 66 66 66 66 29 21 3d 30 29 0a 0a 2f  ffffffff)!=0)../
4750: 2a 0a 2a 2a 20 54 68 65 20 6d 61 63 72 6f 20 75  *.** The macro u
4760: 6e 6c 69 6b 65 6c 79 28 29 20 69 73 20 61 20 68  nlikely() is a h
4770: 69 6e 74 20 74 68 61 74 20 73 75 72 72 6f 75 6e  int that surroun
4780: 64 73 20 61 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20  ds a boolean.** 
4790: 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20  expression that 
47a0: 69 73 20 75 73 75 61 6c 6c 79 20 66 61 6c 73 65  is usually false
47b0: 2e 20 20 4d 61 63 72 6f 20 6c 69 6b 65 6c 79 28  .  Macro likely(
47c0: 29 20 73 75 72 72 6f 75 6e 64 73 0a 2a 2a 20 61  ) surrounds.** a
47d0: 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73   boolean express
47e0: 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75 61  ion that is usua
47f0: 6c 6c 79 20 74 72 75 65 2e 20 20 54 68 65 73 65  lly true.  These
4800: 20 68 69 6e 74 73 20 63 6f 75 6c 64 2c 0a 2a 2a   hints could,.**
4810: 20 69 6e 20 74 68 65 6f 72 79 2c 20 62 65 20 75   in theory, be u
4820: 73 65 64 20 62 79 20 74 68 65 20 63 6f 6d 70 69  sed by the compi
4830: 6c 65 72 20 74 6f 20 67 65 6e 65 72 61 74 65 20  ler to generate 
4840: 62 65 74 74 65 72 20 63 6f 64 65 2c 20 62 75 74  better code, but
4850: 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 74 68  .** currently th
4860: 65 79 20 61 72 65 20 6a 75 73 74 20 63 6f 6d 6d  ey are just comm
4870: 65 6e 74 73 20 66 6f 72 20 68 75 6d 61 6e 20 72  ents for human r
4880: 65 61 64 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69  eaders..*/.#defi
4890: 6e 65 20 6c 69 6b 65 6c 79 28 58 29 20 20 20 20  ne likely(X)    
48a0: 28 58 29 0a 23 64 65 66 69 6e 65 20 75 6e 6c 69  (X).#define unli
48b0: 6b 65 6c 79 28 58 29 20 20 28 58 29 0a 0a 23 69  kely(X)  (X)..#i
48c0: 6e 63 6c 75 64 65 20 22 68 61 73 68 2e 68 22 0a  nclude "hash.h".
48d0: 23 69 6e 63 6c 75 64 65 20 22 70 61 72 73 65 2e  #include "parse.
48e0: 68 22 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64  h".#include <std
48f0: 69 6f 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  io.h>.#include <
4900: 73 74 64 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c 75  stdlib.h>.#inclu
4910: 64 65 20 3c 73 74 72 69 6e 67 2e 68 3e 0a 23 69  de <string.h>.#i
4920: 6e 63 6c 75 64 65 20 3c 61 73 73 65 72 74 2e 68  nclude <assert.h
4930: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 64  >.#include <stdd
4940: 65 66 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 55 73 65  ef.h>../*.** Use
4950: 20 61 20 6d 61 63 72 6f 20 74 6f 20 72 65 70 6c   a macro to repl
4960: 61 63 65 20 6d 65 6d 63 70 79 28 29 20 69 66 20  ace memcpy() if 
4970: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 53 51  compiled with SQ
4980: 4c 49 54 45 5f 49 4e 4c 49 4e 45 5f 4d 45 4d 43  LITE_INLINE_MEMC
4990: 50 59 2e 0a 2a 2a 20 54 68 69 73 20 61 6c 6c 6f  PY..** This allo
49a0: 77 73 20 62 65 74 74 65 72 20 6d 65 61 73 75 72  ws better measur
49b0: 65 6d 65 6e 74 73 20 6f 66 20 77 68 65 72 65 20  ements of where 
49c0: 6d 65 6d 63 70 79 28 29 20 69 73 20 75 73 65 64  memcpy() is used
49d0: 20 77 68 65 6e 20 72 75 6e 6e 69 6e 67 0a 2a 2a   when running.**
49e0: 20 63 61 63 68 65 67 72 69 6e 64 2e 20 20 42 75   cachegrind.  Bu
49f0: 74 20 74 68 69 73 20 6d 61 63 72 6f 20 76 65 72  t this macro ver
4a00: 73 69 6f 6e 20 6f 66 20 6d 65 6d 63 70 79 28 29  sion of memcpy()
4a10: 20 69 73 20 76 65 72 79 20 73 6c 6f 77 20 73 6f   is very slow so
4a20: 20 69 74 0a 2a 2a 20 73 68 6f 75 6c 64 20 6e 6f   it.** should no
4a30: 74 20 62 65 20 75 73 65 64 20 69 6e 20 70 72 6f  t be used in pro
4a40: 64 75 63 74 69 6f 6e 2e 20 20 54 68 69 73 20 69  duction.  This i
4a50: 73 20 61 20 70 65 72 66 6f 72 6d 61 6e 63 65 20  s a performance 
4a60: 6d 65 61 73 75 72 65 6d 65 6e 74 0a 2a 2a 20 68  measurement.** h
4a70: 61 63 6b 20 6f 6e 6c 79 2e 0a 2a 2f 0a 23 69 66  ack only..*/.#if
4a80: 64 65 66 20 53 51 4c 49 54 45 5f 49 4e 4c 49 4e  def SQLITE_INLIN
4a90: 45 5f 4d 45 4d 43 50 59 0a 23 20 64 65 66 69 6e  E_MEMCPY.# defin
4aa0: 65 20 6d 65 6d 63 70 79 28 44 2c 53 2c 4e 29 20  e memcpy(D,S,N) 
4ab0: 7b 63 68 61 72 2a 78 78 64 3d 28 63 68 61 72 2a  {char*xxd=(char*
4ac0: 29 28 44 29 3b 63 6f 6e 73 74 20 63 68 61 72 2a  )(D);const char*
4ad0: 78 78 73 3d 28 63 6f 6e 73 74 20 63 68 61 72 2a  xxs=(const char*
4ae0: 29 28 53 29 3b 5c 0a 20 20 20 20 20 20 20 20 20  )(S);\.         
4af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
4b00: 6e 74 20 78 78 6e 3d 28 4e 29 3b 77 68 69 6c 65  nt xxn=(N);while
4b10: 28 78 78 6e 2d 2d 3e 30 29 2a 28 78 78 64 2b 2b  (xxn-->0)*(xxd++
4b20: 29 3d 2a 28 78 78 73 2b 2b 29 3b 7d 0a 23 65 6e  )=*(xxs++);}.#en
4b30: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 63 6f  dif../*.** If co
4b40: 6d 70 69 6c 69 6e 67 20 66 6f 72 20 61 20 70 72  mpiling for a pr
4b50: 6f 63 65 73 73 6f 72 20 74 68 61 74 20 6c 61 63  ocessor that lac
4b60: 6b 73 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e  ks floating poin
4b70: 74 20 73 75 70 70 6f 72 74 2c 0a 2a 2a 20 73 75  t support,.** su
4b80: 62 73 74 69 74 75 74 65 20 69 6e 74 65 67 65 72  bstitute integer
4b90: 20 66 6f 72 20 66 6c 6f 61 74 69 6e 67 2d 70 6f   for floating-po
4ba0: 69 6e 74 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  int.*/.#ifdef SQ
4bb0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
4bc0: 4e 47 5f 50 4f 49 4e 54 0a 23 20 64 65 66 69 6e  NG_POINT.# defin
4bd0: 65 20 64 6f 75 62 6c 65 20 73 71 6c 69 74 65 5f  e double sqlite_
4be0: 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20 66  int64.# define f
4bf0: 6c 6f 61 74 20 73 71 6c 69 74 65 5f 69 6e 74 36  loat sqlite_int6
4c00: 34 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44  4.# define LONGD
4c10: 4f 55 42 4c 45 5f 54 59 50 45 20 73 71 6c 69 74  OUBLE_TYPE sqlit
4c20: 65 5f 69 6e 74 36 34 0a 23 20 69 66 6e 64 65 66  e_int64.# ifndef
4c30: 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a   SQLITE_BIG_DBL.
4c40: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
4c50: 45 5f 42 49 47 5f 44 42 4c 20 28 28 28 73 71 6c  E_BIG_DBL (((sql
4c60: 69 74 65 33 5f 69 6e 74 36 34 29 31 29 3c 3c 35  ite3_int64)1)<<5
4c70: 30 29 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66  0).# endif.# def
4c80: 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ine SQLITE_OMIT_
4c90: 44 41 54 45 54 49 4d 45 5f 46 55 4e 43 53 20 31  DATETIME_FUNCS 1
4ca0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
4cb0: 5f 4f 4d 49 54 5f 54 52 41 43 45 20 31 0a 23 20  _OMIT_TRACE 1.# 
4cc0: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 49 58  undef SQLITE_MIX
4cd0: 45 44 5f 45 4e 44 49 41 4e 5f 36 34 42 49 54 5f  ED_ENDIAN_64BIT_
4ce0: 46 4c 4f 41 54 0a 23 20 75 6e 64 65 66 20 53 51  FLOAT.# undef SQ
4cf0: 4c 49 54 45 5f 48 41 56 45 5f 49 53 4e 41 4e 0a  LITE_HAVE_ISNAN.
4d00: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
4d10: 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20  QLITE_BIG_DBL.# 
4d20: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
4d30: 47 5f 44 42 4c 20 28 31 65 39 39 29 0a 23 65 6e  G_DBL (1e99).#en
4d40: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54 5f  dif../*.** OMIT_
4d50: 54 45 4d 50 44 42 20 69 73 20 73 65 74 20 74 6f  TEMPDB is set to
4d60: 20 31 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49   1 if SQLITE_OMI
4d70: 54 5f 54 45 4d 50 44 42 20 69 73 20 64 65 66 69  T_TEMPDB is defi
4d80: 6e 65 64 2c 20 6f 72 20 30 0a 2a 2a 20 61 66 74  ned, or 0.** aft
4d90: 65 72 77 61 72 64 2e 20 48 61 76 69 6e 67 20 74  erward. Having t
4da0: 68 69 73 20 6d 61 63 72 6f 20 61 6c 6c 6f 77 73  his macro allows
4db0: 20 75 73 20 74 6f 20 63 61 75 73 65 20 74 68 65   us to cause the
4dc0: 20 43 20 63 6f 6d 70 69 6c 65 72 0a 2a 2a 20 74   C compiler.** t
4dd0: 6f 20 6f 6d 69 74 20 63 6f 64 65 20 75 73 65 64  o omit code used
4de0: 20 62 79 20 54 45 4d 50 20 74 61 62 6c 65 73 20   by TEMP tables 
4df0: 77 69 74 68 6f 75 74 20 6d 65 73 73 79 20 23 69  without messy #i
4e00: 66 6e 64 65 66 20 73 74 61 74 65 6d 65 6e 74 73  fndef statements
4e10: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
4e20: 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 0a 23  TE_OMIT_TEMPDB.#
4e30: 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50  define OMIT_TEMP
4e40: 44 42 20 31 0a 23 65 6c 73 65 0a 23 64 65 66 69  DB 1.#else.#defi
4e50: 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 30  ne OMIT_TEMPDB 0
4e60: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
4e70: 68 65 20 22 66 69 6c 65 20 66 6f 72 6d 61 74 22  he "file format"
4e80: 20 6e 75 6d 62 65 72 20 69 73 20 61 6e 20 69 6e   number is an in
4e90: 74 65 67 65 72 20 74 68 61 74 20 69 73 20 69 6e  teger that is in
4ea0: 63 72 65 6d 65 6e 74 65 64 20 77 68 65 6e 65 76  cremented whenev
4eb0: 65 72 0a 2a 2a 20 74 68 65 20 56 44 42 45 2d 6c  er.** the VDBE-l
4ec0: 65 76 65 6c 20 66 69 6c 65 20 66 6f 72 6d 61 74  evel file format
4ed0: 20 63 68 61 6e 67 65 73 2e 20 20 54 68 65 20 66   changes.  The f
4ee0: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
4ef0: 64 65 66 69 6e 65 20 74 68 65 0a 2a 2a 20 74 68  define the.** th
4f00: 65 20 64 65 66 61 75 6c 74 20 66 69 6c 65 20 66  e default file f
4f10: 6f 72 6d 61 74 20 66 6f 72 20 6e 65 77 20 64 61  ormat for new da
4f20: 74 61 62 61 73 65 73 20 61 6e 64 20 74 68 65 20  tabases and the 
4f30: 6d 61 78 69 6d 75 6d 20 66 69 6c 65 20 66 6f 72  maximum file for
4f40: 6d 61 74 0a 2a 2a 20 74 68 61 74 20 74 68 65 20  mat.** that the 
4f50: 6c 69 62 72 61 72 79 20 63 61 6e 20 72 65 61 64  library can read
4f60: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
4f70: 49 54 45 5f 4d 41 58 5f 46 49 4c 45 5f 46 4f 52  ITE_MAX_FILE_FOR
4f80: 4d 41 54 20 34 0a 23 69 66 6e 64 65 66 20 53 51  MAT 4.#ifndef SQ
4f90: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c  LITE_DEFAULT_FIL
4fa0: 45 5f 46 4f 52 4d 41 54 0a 23 20 64 65 66 69 6e  E_FORMAT.# defin
4fb0: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
4fc0: 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 34 0a 23  _FILE_FORMAT 4.#
4fd0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 74  endif../*.** Det
4fe0: 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74  ermine whether t
4ff0: 72 69 67 67 65 72 73 20 61 72 65 20 72 65 63 75  riggers are recu
5000: 72 73 69 76 65 20 62 79 20 64 65 66 61 75 6c 74  rsive by default
5010: 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65 0a 2a  .  This can be.*
5020: 2a 20 63 68 61 6e 67 65 64 20 61 74 20 72 75 6e  * changed at run
5030: 2d 74 69 6d 65 20 75 73 69 6e 67 20 61 20 70 72  -time using a pr
5040: 61 67 6d 61 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  agma..*/.#ifndef
5050: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
5060: 52 45 43 55 52 53 49 56 45 5f 54 52 49 47 47 45  RECURSIVE_TRIGGE
5070: 52 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  RS.# define SQLI
5080: 54 45 5f 44 45 46 41 55 4c 54 5f 52 45 43 55 52  TE_DEFAULT_RECUR
5090: 53 49 56 45 5f 54 52 49 47 47 45 52 53 20 30 0a  SIVE_TRIGGERS 0.
50a0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 72  #endif../*.** Pr
50b0: 6f 76 69 64 65 20 61 20 64 65 66 61 75 6c 74 20  ovide a default 
50c0: 76 61 6c 75 65 20 66 6f 72 20 53 51 4c 49 54 45  value for SQLITE
50d0: 5f 54 45 4d 50 5f 53 54 4f 52 45 20 69 6e 20 63  _TEMP_STORE in c
50e0: 61 73 65 20 69 74 20 69 73 20 6e 6f 74 20 73 70  ase it is not sp
50f0: 65 63 69 66 69 65 64 0a 2a 2a 20 6f 6e 20 74 68  ecified.** on th
5100: 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 0a 2a  e command-line.*
5110: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
5120: 5f 54 45 4d 50 5f 53 54 4f 52 45 0a 23 20 64 65  _TEMP_STORE.# de
5130: 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d 50  fine SQLITE_TEMP
5140: 5f 53 54 4f 52 45 20 31 0a 23 65 6e 64 69 66 0a  _STORE 1.#endif.
5150: 0a 2f 2a 0a 2a 2a 20 49 66 20 6e 6f 20 76 61 6c  ./*.** If no val
5160: 75 65 20 68 61 73 20 62 65 65 6e 20 70 72 6f 76  ue has been prov
5170: 69 64 65 64 20 66 6f 72 20 53 51 4c 49 54 45 5f  ided for SQLITE_
5180: 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  MAX_WORKER_THREA
5190: 44 53 2c 20 6f 72 20 69 66 0a 2a 2a 20 53 51 4c  DS, or if.** SQL
51a0: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20 69  ITE_TEMP_STORE i
51b0: 73 20 73 65 74 20 74 6f 20 33 20 28 6e 65 76 65  s set to 3 (neve
51c0: 72 20 75 73 65 20 74 65 6d 70 6f 72 61 72 79 20  r use temporary 
51d0: 66 69 6c 65 73 29 2c 20 73 65 74 20 69 74 0a 2a  files), set it.*
51e0: 2a 20 74 6f 20 7a 65 72 6f 2e 0a 2a 2f 0a 23 69  * to zero..*/.#i
51f0: 66 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  f SQLITE_TEMP_ST
5200: 4f 52 45 3d 3d 33 20 7c 7c 20 53 51 4c 49 54 45  ORE==3 || SQLITE
5210: 5f 54 48 52 45 41 44 53 41 46 45 3d 3d 30 0a 23  _THREADSAFE==0.#
5220: 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41   undef SQLITE_MA
5230: 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  X_WORKER_THREADS
5240: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5250: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
5260: 41 44 53 20 30 0a 23 65 6e 64 69 66 0a 23 69 66  ADS 0.#endif.#if
5270: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  ndef SQLITE_MAX_
5280: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23  WORKER_THREADS.#
5290: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
52a0: 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
52b0: 53 20 38 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  S 8.#endif.#ifnd
52c0: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
52d0: 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  T_WORKER_THREADS
52e0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
52f0: 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f  _DEFAULT_WORKER_
5300: 54 48 52 45 41 44 53 20 30 0a 23 65 6e 64 69 66  THREADS 0.#endif
5310: 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41  .#if SQLITE_DEFA
5320: 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  ULT_WORKER_THREA
5330: 44 53 3e 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f  DS>SQLITE_MAX_WO
5340: 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 75  RKER_THREADS.# u
5350: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  ndef SQLITE_MAX_
5360: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23  WORKER_THREADS.#
5370: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
5380: 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
5390: 53 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  S SQLITE_DEFAULT
53a0: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a  _WORKER_THREADS.
53b0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
53c0: 65 20 64 65 66 61 75 6c 74 20 69 6e 69 74 69 61  e default initia
53d0: 6c 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 66 6f 72  l allocation for
53e0: 20 74 68 65 20 70 61 67 65 63 61 63 68 65 20 77   the pagecache w
53f0: 68 65 6e 20 75 73 69 6e 67 20 73 65 70 61 72 61  hen using separa
5400: 74 65 0a 2a 2a 20 70 61 67 65 63 61 63 68 65 73  te.** pagecaches
5410: 20 66 6f 72 20 65 61 63 68 20 64 61 74 61 62 61   for each databa
5420: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20  se connection.  
5430: 41 20 70 6f 73 69 74 69 76 65 20 6e 75 6d 62 65  A positive numbe
5440: 72 20 69 73 20 74 68 65 0a 2a 2a 20 6e 75 6d 62  r is the.** numb
5450: 65 72 20 6f 66 20 70 61 67 65 73 2e 20 20 41 20  er of pages.  A 
5460: 6e 65 67 61 74 69 76 65 20 6e 75 6d 62 65 72 20  negative number 
5470: 4e 20 74 72 61 6e 73 6c 61 74 69 6f 6e 73 20 6d  N translations m
5480: 65 61 6e 73 20 74 68 61 74 20 61 20 62 75 66 66  eans that a buff
5490: 65 72 0a 2a 2a 20 6f 66 20 2d 31 30 32 34 2a 4e  er.** of -1024*N
54a0: 20 62 79 74 65 73 20 69 73 20 61 6c 6c 6f 63 61   bytes is alloca
54b0: 74 65 64 20 61 6e 64 20 75 73 65 64 20 66 6f 72  ted and used for
54c0: 20 61 73 20 6d 61 6e 79 20 70 61 67 65 73 20 61   as many pages a
54d0: 73 20 69 74 20 77 69 6c 6c 20 68 6f 6c 64 2e 0a  s it will hold..
54e0: 2a 2a 0a 2a 2a 20 54 68 65 20 64 65 66 61 75 6c  **.** The defaul
54f0: 74 20 76 61 6c 75 65 20 6f 66 20 22 32 30 22 20  t value of "20" 
5500: 77 61 73 20 63 68 6f 6f 73 65 6e 20 74 6f 20 6d  was choosen to m
5510: 69 6e 69 6d 69 7a 65 20 74 68 65 20 72 75 6e 2d  inimize the run-
5520: 74 69 6d 65 20 6f 66 20 74 68 65 0a 2a 2a 20 73  time of the.** s
5530: 70 65 65 64 74 65 73 74 31 20 74 65 73 74 20 70  peedtest1 test p
5540: 72 6f 67 72 61 6d 20 77 69 74 68 20 6f 70 74 69  rogram with opti
5550: 6f 6e 73 3a 20 2d 2d 73 68 72 69 6e 6b 2d 6d 65  ons: --shrink-me
5560: 6d 6f 72 79 20 2d 2d 72 65 70 72 65 70 61 72 65  mory --reprepare
5570: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
5580: 54 45 5f 44 45 46 41 55 4c 54 5f 50 43 41 43 48  TE_DEFAULT_PCACH
5590: 45 5f 49 4e 49 54 53 5a 0a 23 20 64 65 66 69 6e  E_INITSZ.# defin
55a0: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
55b0: 5f 50 43 41 43 48 45 5f 49 4e 49 54 53 5a 20 32  _PCACHE_INITSZ 2
55c0: 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
55d0: 47 43 43 20 64 6f 65 73 20 6e 6f 74 20 64 65 66  GCC does not def
55e0: 69 6e 65 20 74 68 65 20 6f 66 66 73 65 74 6f 66  ine the offsetof
55f0: 28 29 20 6d 61 63 72 6f 20 73 6f 20 77 65 27 6c  () macro so we'l
5600: 6c 20 68 61 76 65 20 74 6f 20 64 6f 20 69 74 0a  l have to do it.
5610: 2a 2a 20 6f 75 72 73 65 6c 76 65 73 2e 0a 2a 2f  ** ourselves..*/
5620: 0a 23 69 66 6e 64 65 66 20 6f 66 66 73 65 74 6f  .#ifndef offseto
5630: 66 0a 23 64 65 66 69 6e 65 20 6f 66 66 73 65 74  f.#define offset
5640: 6f 66 28 53 54 52 55 43 54 55 52 45 2c 46 49 45  of(STRUCTURE,FIE
5650: 4c 44 29 20 28 28 69 6e 74 29 28 28 63 68 61 72  LD) ((int)((char
5660: 2a 29 26 28 28 53 54 52 55 43 54 55 52 45 2a 29  *)&((STRUCTURE*)
5670: 30 29 2d 3e 46 49 45 4c 44 29 29 0a 23 65 6e 64  0)->FIELD)).#end
5680: 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  if../*.** Macros
5690: 20 74 6f 20 63 6f 6d 70 75 74 65 20 6d 69 6e 69   to compute mini
56a0: 6d 75 6d 20 61 6e 64 20 6d 61 78 69 6d 75 6d 20  mum and maximum 
56b0: 6f 66 20 74 77 6f 20 6e 75 6d 62 65 72 73 2e 0a  of two numbers..
56c0: 2a 2f 0a 23 69 66 6e 64 65 66 20 4d 49 4e 0a 23  */.#ifndef MIN.#
56d0: 20 64 65 66 69 6e 65 20 4d 49 4e 28 41 2c 42 29   define MIN(A,B)
56e0: 20 28 28 41 29 3c 28 42 29 3f 28 41 29 3a 28 42   ((A)<(B)?(A):(B
56f0: 29 29 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  )).#endif.#ifnde
5700: 66 20 4d 41 58 0a 23 20 64 65 66 69 6e 65 20 4d  f MAX.# define M
5710: 41 58 28 41 2c 42 29 20 28 28 41 29 3e 28 42 29  AX(A,B) ((A)>(B)
5720: 3f 28 41 29 3a 28 42 29 29 0a 23 65 6e 64 69 66  ?(A):(B)).#endif
5730: 0a 0a 2f 2a 0a 2a 2a 20 53 77 61 70 20 74 77 6f  ../*.** Swap two
5740: 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 79 70 65   objects of type
5750: 20 54 59 50 45 2e 0a 2a 2f 0a 23 64 65 66 69 6e   TYPE..*/.#defin
5760: 65 20 53 57 41 50 28 54 59 50 45 2c 41 2c 42 29  e SWAP(TYPE,A,B)
5770: 20 7b 54 59 50 45 20 74 3d 41 3b 20 41 3d 42 3b   {TYPE t=A; A=B;
5780: 20 42 3d 74 3b 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68   B=t;}../*.** Ch
5790: 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74 68  eck to see if th
57a0: 69 73 20 6d 61 63 68 69 6e 65 20 75 73 65 73 20  is machine uses 
57b0: 45 42 43 44 49 43 2e 20 20 28 59 65 73 2c 20 62  EBCDIC.  (Yes, b
57c0: 65 6c 69 65 76 65 20 69 74 20 6f 72 0a 2a 2a 20  elieve it or.** 
57d0: 6e 6f 74 2c 20 74 68 65 72 65 20 61 72 65 20 73  not, there are s
57e0: 74 69 6c 6c 20 6d 61 63 68 69 6e 65 73 20 6f 75  till machines ou
57f0: 74 20 74 68 65 72 65 20 74 68 61 74 20 75 73 65  t there that use
5800: 20 45 42 43 44 49 43 2e 29 0a 2a 2f 0a 23 69 66   EBCDIC.).*/.#if
5810: 20 27 41 27 20 3d 3d 20 27 5c 33 30 31 27 0a 23   'A' == '\301'.#
5820: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45   define SQLITE_E
5830: 42 43 44 49 43 20 31 0a 23 65 6c 73 65 0a 23 20  BCDIC 1.#else.# 
5840: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 53  define SQLITE_AS
5850: 43 49 49 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  CII 1.#endif../*
5860: 0a 2a 2a 20 49 6e 74 65 67 65 72 73 20 6f 66 20  .** Integers of 
5870: 6b 6e 6f 77 6e 20 73 69 7a 65 73 2e 20 20 54 68  known sizes.  Th
5880: 65 73 65 20 74 79 70 65 64 65 66 73 20 6d 69 67  ese typedefs mig
5890: 68 74 20 63 68 61 6e 67 65 20 66 6f 72 20 61 72  ht change for ar
58a0: 63 68 69 74 65 63 74 75 72 65 73 0a 2a 2a 20 77  chitectures.** w
58b0: 68 65 72 65 20 74 68 65 20 73 69 7a 65 73 20 76  here the sizes v
58c0: 65 72 79 2e 20 20 50 72 65 70 72 6f 63 65 73 73  ery.  Preprocess
58d0: 6f 72 20 6d 61 63 72 6f 73 20 61 72 65 20 61 76  or macros are av
58e0: 61 69 6c 61 62 6c 65 20 73 6f 20 74 68 61 74 20  ailable so that 
58f0: 74 68 65 0a 2a 2a 20 74 79 70 65 73 20 63 61 6e  the.** types can
5900: 20 62 65 20 63 6f 6e 76 65 6e 69 65 6e 74 6c 79   be conveniently
5910: 20 72 65 64 65 66 69 6e 65 64 20 61 74 20 63 6f   redefined at co
5920: 6d 70 69 6c 65 2d 74 79 70 65 2e 20 20 4c 69 6b  mpile-type.  Lik
5930: 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a 2a 20 20 20  e this:.**.**   
5940: 20 20 20 20 20 20 63 63 20 27 2d 44 55 49 4e 54        cc '-DUINT
5950: 50 54 52 5f 54 59 50 45 3d 6c 6f 6e 67 20 6c 6f  PTR_TYPE=long lo
5960: 6e 67 20 69 6e 74 27 20 2e 2e 2e 0a 2a 2f 0a 23  ng int' ....*/.#
5970: 69 66 6e 64 65 66 20 55 49 4e 54 33 32 5f 54 59  ifndef UINT32_TY
5980: 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f  PE.# ifdef HAVE_
5990: 55 49 4e 54 33 32 5f 54 0a 23 20 20 64 65 66 69  UINT32_T.#  defi
59a0: 6e 65 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75  ne UINT32_TYPE u
59b0: 69 6e 74 33 32 5f 74 0a 23 20 65 6c 73 65 0a 23  int32_t.# else.#
59c0: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f    define UINT32_
59d0: 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20 69 6e  TYPE unsigned in
59e0: 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  t.# endif.#endif
59f0: 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 31 36 5f  .#ifndef UINT16_
5a00: 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56  TYPE.# ifdef HAV
5a10: 45 5f 55 49 4e 54 31 36 5f 54 0a 23 20 20 64 65  E_UINT16_T.#  de
5a20: 66 69 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45  fine UINT16_TYPE
5a30: 20 75 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65   uint16_t.# else
5a40: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31  .#  define UINT1
5a50: 36 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20  6_TYPE unsigned 
5a60: 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69  short int.# endi
5a70: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
5a80: 20 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69 66   INT16_TYPE.# if
5a90: 64 65 66 20 48 41 56 45 5f 49 4e 54 31 36 5f 54  def HAVE_INT16_T
5aa0: 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 31 36  .#  define INT16
5ab0: 5f 54 59 50 45 20 69 6e 74 31 36 5f 74 0a 23 20  _TYPE int16_t.# 
5ac0: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49  else.#  define I
5ad0: 4e 54 31 36 5f 54 59 50 45 20 73 68 6f 72 74 20  NT16_TYPE short 
5ae0: 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  int.# endif.#end
5af0: 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 38  if.#ifndef UINT8
5b00: 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41  _TYPE.# ifdef HA
5b10: 56 45 5f 55 49 4e 54 38 5f 54 0a 23 20 20 64 65  VE_UINT8_T.#  de
5b20: 66 69 6e 65 20 55 49 4e 54 38 5f 54 59 50 45 20  fine UINT8_TYPE 
5b30: 75 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23  uint8_t.# else.#
5b40: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f 54    define UINT8_T
5b50: 59 50 45 20 75 6e 73 69 67 6e 65 64 20 63 68 61  YPE unsigned cha
5b60: 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  r.# endif.#endif
5b70: 0a 23 69 66 6e 64 65 66 20 49 4e 54 38 5f 54 59  .#ifndef INT8_TY
5b80: 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f  PE.# ifdef HAVE_
5b90: 49 4e 54 38 5f 54 0a 23 20 20 64 65 66 69 6e 65  INT8_T.#  define
5ba0: 20 49 4e 54 38 5f 54 59 50 45 20 69 6e 74 38 5f   INT8_TYPE int8_
5bb0: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
5bc0: 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 73 69 67  ne INT8_TYPE sig
5bd0: 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69 66  ned char.# endif
5be0: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
5bf0: 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 0a  LONGDOUBLE_TYPE.
5c00: 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55  # define LONGDOU
5c10: 42 4c 45 5f 54 59 50 45 20 6c 6f 6e 67 20 64 6f  BLE_TYPE long do
5c20: 75 62 6c 65 0a 23 65 6e 64 69 66 0a 74 79 70 65  uble.#endif.type
5c30: 64 65 66 20 73 71 6c 69 74 65 5f 69 6e 74 36 34  def sqlite_int64
5c40: 20 69 36 34 3b 20 20 20 20 20 20 20 20 20 20 2f   i64;          /
5c50: 2a 20 38 2d 62 79 74 65 20 73 69 67 6e 65 64 20  * 8-byte signed 
5c60: 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64  integer */.typed
5c70: 65 66 20 73 71 6c 69 74 65 5f 75 69 6e 74 36 34  ef sqlite_uint64
5c80: 20 75 36 34 3b 20 20 20 20 20 20 20 20 20 2f 2a   u64;         /*
5c90: 20 38 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64   8-byte unsigned
5ca0: 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65   integer */.type
5cb0: 64 65 66 20 55 49 4e 54 33 32 5f 54 59 50 45 20  def UINT32_TYPE 
5cc0: 75 33 32 3b 20 20 20 20 20 20 20 20 20 20 20 2f  u32;           /
5cd0: 2a 20 34 2d 62 79 74 65 20 75 6e 73 69 67 6e 65  * 4-byte unsigne
5ce0: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70  d integer */.typ
5cf0: 65 64 65 66 20 55 49 4e 54 31 36 5f 54 59 50 45  edef UINT16_TYPE
5d00: 20 75 31 36 3b 20 20 20 20 20 20 20 20 20 20 20   u16;           
5d10: 2f 2a 20 32 2d 62 79 74 65 20 75 6e 73 69 67 6e  /* 2-byte unsign
5d20: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
5d30: 70 65 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45  pedef INT16_TYPE
5d40: 20 69 31 36 3b 20 20 20 20 20 20 20 20 20 20 20   i16;           
5d50: 20 2f 2a 20 32 2d 62 79 74 65 20 73 69 67 6e 65   /* 2-byte signe
5d60: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70  d integer */.typ
5d70: 65 64 65 66 20 55 49 4e 54 38 5f 54 59 50 45 20  edef UINT8_TYPE 
5d80: 75 38 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  u8;             
5d90: 2f 2a 20 31 2d 62 79 74 65 20 75 6e 73 69 67 6e  /* 1-byte unsign
5da0: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
5db0: 70 65 64 65 66 20 49 4e 54 38 5f 54 59 50 45 20  pedef INT8_TYPE 
5dc0: 69 38 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  i8;             
5dd0: 20 2f 2a 20 31 2d 62 79 74 65 20 73 69 67 6e 65   /* 1-byte signe
5de0: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 0a 2f 2a  d integer */../*
5df0: 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55  .** SQLITE_MAX_U
5e00: 33 32 20 69 73 20 61 20 75 36 34 20 63 6f 6e 73  32 is a u64 cons
5e10: 74 61 6e 74 20 74 68 61 74 20 69 73 20 74 68 65  tant that is the
5e20: 20 6d 61 78 69 6d 75 6d 20 75 36 34 20 76 61 6c   maximum u64 val
5e30: 75 65 0a 2a 2a 20 74 68 61 74 20 63 61 6e 20 62  ue.** that can b
5e40: 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 75 33  e stored in a u3
5e50: 32 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f  2 without loss o
5e60: 66 20 64 61 74 61 2e 20 20 54 68 65 20 76 61 6c  f data.  The val
5e70: 75 65 0a 2a 2a 20 69 73 20 30 78 30 30 30 30 30  ue.** is 0x00000
5e80: 30 30 30 66 66 66 66 66 66 66 66 2e 20 20 42 75  000ffffffff.  Bu
5e90: 74 20 62 65 63 61 75 73 65 20 6f 66 20 71 75 69  t because of qui
5ea0: 72 6b 73 20 6f 66 20 73 6f 6d 65 20 63 6f 6d 70  rks of some comp
5eb0: 69 6c 65 72 73 2c 20 77 65 0a 2a 2a 20 68 61 76  ilers, we.** hav
5ec0: 65 20 74 6f 20 73 70 65 63 69 66 79 20 74 68 65  e to specify the
5ed0: 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20 6c 65   value in the le
5ee0: 73 73 20 69 6e 74 75 69 74 69 76 65 20 6d 61 6e  ss intuitive man
5ef0: 6e 65 72 20 73 68 6f 77 6e 3a 0a 2a 2f 0a 23 64  ner shown:.*/.#d
5f00: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
5f10: 5f 55 33 32 20 20 28 28 28 28 75 36 34 29 31 29  _U32  ((((u64)1)
5f20: 3c 3c 33 32 29 2d 31 29 0a 0a 2f 2a 0a 2a 2a 20  <<32)-1)../*.** 
5f30: 54 68 65 20 64 61 74 61 74 79 70 65 20 75 73 65  The datatype use
5f40: 64 20 74 6f 20 73 74 6f 72 65 20 65 73 74 69 6d  d to store estim
5f50: 61 74 65 73 20 6f 66 20 74 68 65 20 6e 75 6d 62  ates of the numb
5f60: 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 61 0a  er of rows in a.
5f70: 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  ** table or inde
5f80: 78 2e 20 20 54 68 69 73 20 69 73 20 61 6e 20 75  x.  This is an u
5f90: 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20  nsigned integer 
5fa0: 74 79 70 65 2e 20 20 46 6f 72 20 39 39 2e 39 25  type.  For 99.9%
5fb0: 20 6f 66 0a 2a 2a 20 74 68 65 20 77 6f 72 6c 64   of.** the world
5fc0: 2c 20 61 20 33 32 2d 62 69 74 20 69 6e 74 65 67  , a 32-bit integ
5fd0: 65 72 20 69 73 20 73 75 66 66 69 63 69 65 6e 74  er is sufficient
5fe0: 2e 20 20 42 75 74 20 61 20 36 34 2d 62 69 74 20  .  But a 64-bit 
5ff0: 69 6e 74 65 67 65 72 0a 2a 2a 20 63 61 6e 20 62  integer.** can b
6000: 65 20 75 73 65 64 20 61 74 20 63 6f 6d 70 69 6c  e used at compil
6010: 65 2d 74 69 6d 65 20 69 66 20 64 65 73 69 72 65  e-time if desire
6020: 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  d..*/.#ifdef SQL
6030: 49 54 45 5f 36 34 42 49 54 5f 53 54 41 54 53 0a  ITE_64BIT_STATS.
6040: 20 74 79 70 65 64 65 66 20 75 36 34 20 74 52 6f   typedef u64 tRo
6050: 77 63 6e 74 3b 20 20 20 20 2f 2a 20 36 34 2d 62  wcnt;    /* 64-b
6060: 69 74 20 6f 6e 6c 79 20 69 66 20 72 65 71 75 65  it only if reque
6070: 73 74 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d  sted at compile-
6080: 74 69 6d 65 20 2a 2f 0a 23 65 6c 73 65 0a 20 74  time */.#else. t
6090: 79 70 65 64 65 66 20 75 33 32 20 74 52 6f 77 63  ypedef u32 tRowc
60a0: 6e 74 3b 20 20 20 20 2f 2a 20 33 32 2d 62 69 74  nt;    /* 32-bit
60b0: 20 69 73 20 74 68 65 20 64 65 66 61 75 6c 74 20   is the default 
60c0: 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  */.#endif../*.**
60d0: 20 45 73 74 69 6d 61 74 65 64 20 71 75 61 6e 74   Estimated quant
60e0: 69 74 69 65 73 20 75 73 65 64 20 66 6f 72 20 71  ities used for q
60f0: 75 65 72 79 20 70 6c 61 6e 6e 69 6e 67 20 61 72  uery planning ar
6100: 65 20 73 74 6f 72 65 64 20 61 73 20 31 36 2d 62  e stored as 16-b
6110: 69 74 0a 2a 2a 20 6c 6f 67 61 72 69 74 68 6d 73  it.** logarithms
6120: 2e 20 20 46 6f 72 20 71 75 61 6e 74 69 74 79 20  .  For quantity 
6130: 58 2c 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f  X, the value sto
6140: 72 65 64 20 69 73 20 31 30 2a 6c 6f 67 32 28 58  red is 10*log2(X
6150: 29 2e 20 20 54 68 69 73 0a 2a 2a 20 67 69 76 65  ).  This.** give
6160: 73 20 61 20 70 6f 73 73 69 62 6c 65 20 72 61 6e  s a possible ran
6170: 67 65 20 6f 66 20 76 61 6c 75 65 73 20 6f 66 20  ge of values of 
6180: 61 70 70 72 6f 78 69 6d 61 74 65 6c 79 20 31 2e  approximately 1.
6190: 30 65 39 38 36 20 74 6f 20 31 65 2d 39 38 36 2e  0e986 to 1e-986.
61a0: 0a 2a 2a 20 42 75 74 20 74 68 65 20 61 6c 6c 6f  .** But the allo
61b0: 77 65 64 20 76 61 6c 75 65 73 20 61 72 65 20 22  wed values are "
61c0: 67 72 61 69 6e 79 22 2e 20 20 4e 6f 74 20 65 76  grainy".  Not ev
61d0: 65 72 79 20 76 61 6c 75 65 20 69 73 20 72 65 70  ery value is rep
61e0: 72 65 73 65 6e 74 61 62 6c 65 2e 0a 2a 2a 20 46  resentable..** F
61f0: 6f 72 20 65 78 61 6d 70 6c 65 2c 20 71 75 61 6e  or example, quan
6200: 74 69 74 69 65 73 20 31 36 20 61 6e 64 20 31 37  tities 16 and 17
6210: 20 61 72 65 20 62 6f 74 68 20 72 65 70 72 65 73   are both repres
6220: 65 6e 74 65 64 20 62 79 20 61 20 4c 6f 67 45 73  ented by a LogEs
6230: 74 0a 2a 2a 20 6f 66 20 34 30 2e 20 20 48 6f 77  t.** of 40.  How
6240: 65 76 65 72 2c 20 73 69 6e 63 65 20 4c 6f 67 45  ever, since LogE
6250: 73 74 20 71 75 61 6e 74 69 74 69 65 73 20 61 72  st quantities ar
6260: 65 20 73 75 70 70 6f 73 65 20 74 6f 20 62 65 20  e suppose to be 
6270: 65 73 74 69 6d 61 74 65 73 2c 0a 2a 2a 20 6e 6f  estimates,.** no
6280: 74 20 65 78 61 63 74 20 76 61 6c 75 65 73 2c 20  t exact values, 
6290: 74 68 69 73 20 69 6d 70 72 65 63 69 73 69 6f 6e  this imprecision
62a0: 20 69 73 20 6e 6f 74 20 61 20 70 72 6f 62 6c 65   is not a proble
62b0: 6d 2e 0a 2a 2a 0a 2a 2a 20 22 4c 6f 67 45 73 74  m..**.** "LogEst
62c0: 22 20 69 73 20 73 68 6f 72 74 20 66 6f 72 20 22  " is short for "
62d0: 4c 6f 67 61 72 69 74 68 6d 69 63 20 45 73 74 69  Logarithmic Esti
62e0: 6d 61 74 65 22 2e 0a 2a 2a 0a 2a 2a 20 45 78 61  mate"..**.** Exa
62f0: 6d 70 6c 65 73 3a 0a 2a 2a 20 20 20 20 20 20 31  mples:.**      1
6300: 20 2d 3e 20 30 20 20 20 20 20 20 20 20 20 20 20   -> 0           
6310: 20 20 20 32 30 20 2d 3e 20 34 33 20 20 20 20 20     20 -> 43     
6320: 20 20 20 20 20 31 30 30 30 30 20 2d 3e 20 31 33       10000 -> 13
6330: 32 0a 2a 2a 20 20 20 20 20 20 32 20 2d 3e 20 31  2.**      2 -> 1
6340: 30 20 20 20 20 20 20 20 20 20 20 20 20 20 32 35  0             25
6350: 20 2d 3e 20 34 36 20 20 20 20 20 20 20 20 20 20   -> 46          
6360: 32 35 30 30 30 20 2d 3e 20 31 34 36 0a 2a 2a 20  25000 -> 146.** 
6370: 20 20 20 20 20 33 20 2d 3e 20 31 36 20 20 20 20       3 -> 16    
6380: 20 20 20 20 20 20 20 20 31 30 30 20 2d 3e 20 36          100 -> 6
6390: 36 20 20 20 20 20 20 20 20 31 30 30 30 30 30 30  6        1000000
63a0: 20 2d 3e 20 31 39 39 0a 2a 2a 20 20 20 20 20 20   -> 199.**      
63b0: 34 20 2d 3e 20 32 30 20 20 20 20 20 20 20 20 20  4 -> 20         
63c0: 20 20 31 30 30 30 20 2d 3e 20 39 39 20 20 20 20    1000 -> 99    
63d0: 20 20 20 20 31 30 34 38 35 37 36 20 2d 3e 20 32      1048576 -> 2
63e0: 30 30 0a 2a 2a 20 20 20 20 20 31 30 20 2d 3e 20  00.**     10 -> 
63f0: 33 33 20 20 20 20 20 20 20 20 20 20 20 31 30 32  33           102
6400: 34 20 2d 3e 20 31 30 30 20 20 20 20 34 32 39 34  4 -> 100    4294
6410: 39 36 37 32 39 36 20 2d 3e 20 33 32 30 0a 2a 2a  967296 -> 320.**
6420: 0a 2a 2a 20 54 68 65 20 4c 6f 67 45 73 74 20 63  .** The LogEst c
6430: 61 6e 20 62 65 20 6e 65 67 61 74 69 76 65 20 74  an be negative t
6440: 6f 20 69 6e 64 69 63 61 74 65 20 66 72 61 63 74  o indicate fract
6450: 69 6f 6e 61 6c 20 76 61 6c 75 65 73 2e 0a 2a 2a  ional values..**
6460: 20 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 0a 2a 2a   Examples:.**.**
6470: 20 20 20 20 30 2e 35 20 2d 3e 20 2d 31 30 20 20      0.5 -> -10  
6480: 20 20 20 20 20 20 20 20 20 30 2e 31 20 2d 3e 20           0.1 -> 
6490: 2d 33 33 20 20 20 20 20 20 20 20 30 2e 30 36 32  -33        0.062
64a0: 35 20 2d 3e 20 2d 34 30 0a 2a 2f 0a 74 79 70 65  5 -> -40.*/.type
64b0: 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45 20 4c  def INT16_TYPE L
64c0: 6f 67 45 73 74 3b 0a 0a 2f 2a 0a 2a 2a 20 53 65  ogEst;../*.** Se
64d0: 74 20 74 68 65 20 53 51 4c 49 54 45 5f 50 54 52  t the SQLITE_PTR
64e0: 53 49 5a 45 20 6d 61 63 72 6f 20 74 6f 20 74 68  SIZE macro to th
64f0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  e number of byte
6500: 73 20 69 6e 20 61 20 70 6f 69 6e 74 65 72 0a 2a  s in a pointer.*
6510: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
6520: 5f 50 54 52 53 49 5a 45 0a 23 20 69 66 20 64 65  _PTRSIZE.# if de
6530: 66 69 6e 65 64 28 5f 5f 53 49 5a 45 4f 46 5f 50  fined(__SIZEOF_P
6540: 4f 49 4e 54 45 52 5f 5f 29 0a 23 20 20 20 64 65  OINTER__).#   de
6550: 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 53  fine SQLITE_PTRS
6560: 49 5a 45 20 5f 5f 53 49 5a 45 4f 46 5f 50 4f 49  IZE __SIZEOF_POI
6570: 4e 54 45 52 5f 5f 0a 23 20 65 6c 69 66 20 64 65  NTER__.# elif de
6580: 66 69 6e 65 64 28 69 33 38 36 29 20 20 20 20 20  fined(i386)     
6590: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69 33 38  || defined(__i38
65a0: 36 5f 5f 29 20 20 20 7c 7c 20 64 65 66 69 6e 65  6__)   || define
65b0: 64 28 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20 20  d(_M_IX86) ||   
65c0: 20 5c 0a 20 20 20 20 20 20 20 64 65 66 69 6e 65   \.       define
65d0: 64 28 5f 4d 5f 41 52 4d 29 20 20 20 7c 7c 20 64  d(_M_ARM)   || d
65e0: 65 66 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f 29 20  efined(__arm__) 
65f0: 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f     || defined(__
6600: 78 38 36 29 0a 23 20 20 20 64 65 66 69 6e 65 20  x86).#   define 
6610: 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 34  SQLITE_PTRSIZE 4
6620: 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69  .# else.#   defi
6630: 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a  ne SQLITE_PTRSIZ
6640: 45 20 38 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  E 8.# endif.#end
6650: 69 66 0a 0a 2f 2a 20 54 68 65 20 75 70 74 72 20  if../* The uptr 
6660: 74 79 70 65 20 69 73 20 61 6e 20 75 6e 73 69 67  type is an unsig
6670: 6e 65 64 20 69 6e 74 65 67 65 72 20 6c 61 72 67  ned integer larg
6680: 65 20 65 6e 6f 75 67 68 20 74 6f 20 68 6f 6c 64  e enough to hold
6690: 20 61 20 70 6f 69 6e 74 65 72 0a 2a 2f 0a 23 69   a pointer.*/.#i
66a0: 66 20 64 65 66 69 6e 65 64 28 48 41 56 45 5f 53  f defined(HAVE_S
66b0: 54 44 49 4e 54 5f 48 29 0a 20 20 74 79 70 65 64  TDINT_H).  typed
66c0: 65 66 20 75 69 6e 74 70 74 72 5f 74 20 75 70 74  ef uintptr_t upt
66d0: 72 3b 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f  r;.#elif SQLITE_
66e0: 50 54 52 53 49 5a 45 3d 3d 34 0a 20 20 74 79 70  PTRSIZE==4.  typ
66f0: 65 64 65 66 20 75 33 32 20 75 70 74 72 3b 0a 23  edef u32 uptr;.#
6700: 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20 75  else.  typedef u
6710: 36 34 20 75 70 74 72 3b 0a 23 65 6e 64 69 66 0a  64 uptr;.#endif.
6720: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54  ./*.** The SQLIT
6730: 45 5f 57 49 54 48 49 4e 28 50 2c 53 2c 45 29 20  E_WITHIN(P,S,E) 
6740: 6d 61 63 72 6f 20 63 68 65 63 6b 73 20 74 6f 20  macro checks to 
6750: 73 65 65 20 69 66 20 70 6f 69 6e 74 65 72 20 50  see if pointer P
6760: 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 6f   points to.** so
6770: 6d 65 74 68 69 6e 67 20 62 65 74 77 65 65 6e 20  mething between 
6780: 53 20 28 69 6e 63 6c 75 73 69 76 65 29 20 61 6e  S (inclusive) an
6790: 64 20 45 20 28 65 78 63 6c 75 73 69 76 65 29 2e  d E (exclusive).
67a0: 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20  .**.** In other 
67b0: 77 6f 72 64 73 2c 20 53 20 69 73 20 61 20 62 75  words, S is a bu
67c0: 66 66 65 72 20 61 6e 64 20 45 20 69 73 20 61 20  ffer and E is a 
67d0: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66  pointer to the f
67e0: 69 72 73 74 20 62 79 74 65 20 61 66 74 65 72 0a  irst byte after.
67f0: 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 62 75  ** the end of bu
6800: 66 66 65 72 20 53 2e 20 20 54 68 69 73 20 6d 61  ffer S.  This ma
6810: 63 72 6f 20 72 65 74 75 72 6e 73 20 74 72 75 65  cro returns true
6820: 20 69 66 20 50 20 70 6f 69 6e 74 73 20 74 6f 20   if P points to 
6830: 73 6f 6d 65 74 68 69 6e 67 0a 2a 2a 20 63 6f 6e  something.** con
6840: 74 61 69 6e 65 64 20 77 69 74 68 69 6e 20 74 68  tained within th
6850: 65 20 62 75 66 66 65 72 20 53 2e 0a 2a 2f 0a 23  e buffer S..*/.#
6860: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 49  define SQLITE_WI
6870: 54 48 49 4e 28 50 2c 53 2c 45 29 20 28 28 28 75  THIN(P,S,E) (((u
6880: 70 74 72 29 28 50 29 3e 3d 28 75 70 74 72 29 28  ptr)(P)>=(uptr)(
6890: 53 29 29 26 26 28 28 75 70 74 72 29 28 50 29 3c  S))&&((uptr)(P)<
68a0: 28 75 70 74 72 29 28 45 29 29 29 0a 0a 0a 2f 2a  (uptr)(E))).../*
68b0: 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65  .** Macros to de
68c0: 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20  termine whether 
68d0: 74 68 65 20 6d 61 63 68 69 6e 65 20 69 73 20 62  the machine is b
68e0: 69 67 20 6f 72 20 6c 69 74 74 6c 65 20 65 6e 64  ig or little end
68f0: 69 61 6e 2c 0a 2a 2a 20 61 6e 64 20 77 68 65 74  ian,.** and whet
6900: 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 61 74 20  her or not that 
6910: 64 65 74 65 72 6d 69 6e 61 74 69 6f 6e 20 69 73  determination is
6920: 20 72 75 6e 2d 74 69 6d 65 20 6f 72 20 63 6f 6d   run-time or com
6930: 70 69 6c 65 2d 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a  pile-time..**.**
6940: 20 46 6f 72 20 62 65 73 74 20 70 65 72 66 6f 72   For best perfor
6950: 6d 61 6e 63 65 2c 20 61 6e 20 61 74 74 65 6d 70  mance, an attemp
6960: 74 20 69 73 20 6d 61 64 65 20 74 6f 20 67 75 65  t is made to gue
6970: 73 73 20 61 74 20 74 68 65 20 62 79 74 65 2d 6f  ss at the byte-o
6980: 72 64 65 72 0a 2a 2a 20 75 73 69 6e 67 20 43 2d  rder.** using C-
6990: 70 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63  preprocessor mac
69a0: 72 6f 73 2e 20 20 49 66 20 74 68 61 74 20 69 73  ros.  If that is
69b0: 20 75 6e 73 75 63 63 65 73 73 66 75 6c 2c 20 6f   unsuccessful, o
69c0: 72 20 69 66 0a 2a 2a 20 2d 44 53 51 4c 49 54 45  r if.** -DSQLITE
69d0: 5f 42 59 54 45 4f 52 44 45 52 3d 30 20 69 73 20  _BYTEORDER=0 is 
69e0: 73 65 74 2c 20 74 68 65 6e 20 62 79 74 65 2d 6f  set, then byte-o
69f0: 72 64 65 72 20 69 73 20 64 65 74 65 72 6d 69 6e  rder is determin
6a00: 65 64 0a 2a 2a 20 61 74 20 72 75 6e 2d 74 69 6d  ed.** at run-tim
6a10: 65 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  e..*/.#ifndef SQ
6a20: 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 0a 23  LITE_BYTEORDER.#
6a30: 20 69 66 20 64 65 66 69 6e 65 64 28 69 33 38 36   if defined(i386
6a40: 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64  )     || defined
6a50: 28 5f 5f 69 33 38 36 5f 5f 29 20 20 20 7c 7c 20  (__i386__)   || 
6a60: 64 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38 36 29  defined(_M_IX86)
6a70: 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65   ||    \.     de
6a80: 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 29 20  fined(__x86_64) 
6a90: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36  || defined(__x86
6aa0: 5f 36 34 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65  _64__) || define
6ab0: 64 28 5f 4d 5f 58 36 34 29 20 20 7c 7c 20 20 20  d(_M_X64)  ||   
6ac0: 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28   \.     defined(
6ad0: 5f 4d 5f 41 4d 44 36 34 29 20 7c 7c 20 64 65 66  _M_AMD64) || def
6ae0: 69 6e 65 64 28 5f 4d 5f 41 52 4d 29 20 20 20 20  ined(_M_ARM)    
6af0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38   || defined(__x8
6b00: 36 29 20 20 20 7c 7c 20 20 20 20 5c 0a 20 20 20  6)   ||    \.   
6b10: 20 20 64 65 66 69 6e 65 64 28 5f 5f 61 72 6d 5f    defined(__arm_
6b20: 5f 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  _).#   define SQ
6b30: 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 20 20  LITE_BYTEORDER  
6b40: 20 20 31 32 33 34 0a 23 20 65 6c 69 66 20 64 65    1234.# elif de
6b50: 66 69 6e 65 64 28 73 70 61 72 63 29 20 20 20 20  fined(sparc)    
6b60: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 70 70 63  || defined(__ppc
6b70: 5f 5f 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53  __).#   define S
6b80: 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 20  QLITE_BYTEORDER 
6b90: 20 20 20 34 33 32 31 0a 23 20 65 6c 73 65 0a 23     4321.# else.#
6ba0: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
6bb0: 5f 42 59 54 45 4f 52 44 45 52 20 30 0a 23 20 65  _BYTEORDER 0.# e
6bc0: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 20  ndif.#endif.#if 
6bd0: 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52  SQLITE_BYTEORDER
6be0: 3d 3d 34 33 32 31 0a 23 20 64 65 66 69 6e 65 20  ==4321.# define 
6bf0: 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e  SQLITE_BIGENDIAN
6c00: 20 20 20 20 31 0a 23 20 64 65 66 69 6e 65 20 53      1.# define S
6c10: 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49  QLITE_LITTLEENDI
6c20: 41 4e 20 30 0a 23 20 64 65 66 69 6e 65 20 53 51  AN 0.# define SQ
6c30: 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
6c40: 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45    SQLITE_UTF16BE
6c50: 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 42 59  .#elif SQLITE_BY
6c60: 54 45 4f 52 44 45 52 3d 3d 31 32 33 34 0a 23 20  TEORDER==1234.# 
6c70: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
6c80: 47 45 4e 44 49 41 4e 20 20 20 20 30 0a 23 20 64  GENDIAN    0.# d
6c90: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54  efine SQLITE_LIT
6ca0: 54 4c 45 45 4e 44 49 41 4e 20 31 0a 23 20 64 65  TLEENDIAN 1.# de
6cb0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31  fine SQLITE_UTF1
6cc0: 36 4e 41 54 49 56 45 20 20 53 51 4c 49 54 45 5f  6NATIVE  SQLITE_
6cd0: 55 54 46 31 36 4c 45 0a 23 65 6c 73 65 0a 23 20  UTF16LE.#else.# 
6ce0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41  ifdef SQLITE_AMA
6cf0: 4c 47 41 4d 41 54 49 4f 4e 0a 20 20 63 6f 6e 73  LGAMATION.  cons
6d00: 74 20 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65  t int sqlite3one
6d10: 20 3d 20 31 3b 0a 23 20 65 6c 73 65 0a 20 20 65   = 1;.# else.  e
6d20: 78 74 65 72 6e 20 63 6f 6e 73 74 20 69 6e 74 20  xtern const int 
6d30: 73 71 6c 69 74 65 33 6f 6e 65 3b 0a 23 20 65 6e  sqlite3one;.# en
6d40: 64 69 66 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  dif.# define SQL
6d50: 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20  ITE_BIGENDIAN   
6d60: 20 28 2a 28 63 68 61 72 20 2a 29 28 26 73 71 6c   (*(char *)(&sql
6d70: 69 74 65 33 6f 6e 65 29 3d 3d 30 29 0a 23 20 64  ite3one)==0).# d
6d80: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54  efine SQLITE_LIT
6d90: 54 4c 45 45 4e 44 49 41 4e 20 28 2a 28 63 68 61  TLEENDIAN (*(cha
6da0: 72 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e 65  r *)(&sqlite3one
6db0: 29 3d 3d 31 29 0a 23 20 64 65 66 69 6e 65 20 53  )==1).# define S
6dc0: 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56  QLITE_UTF16NATIV
6dd0: 45 20 20 28 53 51 4c 49 54 45 5f 42 49 47 45 4e  E  (SQLITE_BIGEN
6de0: 44 49 41 4e 3f 53 51 4c 49 54 45 5f 55 54 46 31  DIAN?SQLITE_UTF1
6df0: 36 42 45 3a 53 51 4c 49 54 45 5f 55 54 46 31 36  6BE:SQLITE_UTF16
6e00: 4c 45 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  LE).#endif../*.*
6e10: 2a 20 43 6f 6e 73 74 61 6e 74 73 20 66 6f 72 20  * Constants for 
6e20: 74 68 65 20 6c 61 72 67 65 73 74 20 61 6e 64 20  the largest and 
6e30: 73 6d 61 6c 6c 65 73 74 20 70 6f 73 73 69 62 6c  smallest possibl
6e40: 65 20 36 34 2d 62 69 74 20 73 69 67 6e 65 64 20  e 64-bit signed 
6e50: 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 54 68 65  integers..** The
6e60: 73 65 20 6d 61 63 72 6f 73 20 61 72 65 20 64 65  se macros are de
6e70: 73 69 67 6e 65 64 20 74 6f 20 77 6f 72 6b 20 63  signed to work c
6e80: 6f 72 72 65 63 74 6c 79 20 6f 6e 20 62 6f 74 68  orrectly on both
6e90: 20 33 32 2d 62 69 74 20 61 6e 64 20 36 34 2d 62   32-bit and 64-b
6ea0: 69 74 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 73 2e  it.** compilers.
6eb0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4c 41 52 47  .*/.#define LARG
6ec0: 45 53 54 5f 49 4e 54 36 34 20 20 28 30 78 66 66  EST_INT64  (0xff
6ed0: 66 66 66 66 66 66 7c 28 28 28 69 36 34 29 30 78  ffffff|(((i64)0x
6ee0: 37 66 66 66 66 66 66 66 29 3c 3c 33 32 29 29 0a  7fffffff)<<32)).
6ef0: 23 64 65 66 69 6e 65 20 53 4d 41 4c 4c 45 53 54  #define SMALLEST
6f00: 5f 49 4e 54 36 34 20 28 28 28 69 36 34 29 2d 31  _INT64 (((i64)-1
6f10: 29 20 2d 20 4c 41 52 47 45 53 54 5f 49 4e 54 36  ) - LARGEST_INT6
6f20: 34 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20  4)../*.** Round 
6f30: 75 70 20 61 20 6e 75 6d 62 65 72 20 74 6f 20 74  up a number to t
6f40: 68 65 20 6e 65 78 74 20 6c 61 72 67 65 72 20 6d  he next larger m
6f50: 75 6c 74 69 70 6c 65 20 6f 66 20 38 2e 20 20 54  ultiple of 8.  T
6f60: 68 69 73 20 69 73 20 75 73 65 64 0a 2a 2a 20 74  his is used.** t
6f70: 6f 20 66 6f 72 63 65 20 38 2d 62 79 74 65 20 61  o force 8-byte a
6f80: 6c 69 67 6e 6d 65 6e 74 20 6f 6e 20 36 34 2d 62  lignment on 64-b
6f90: 69 74 20 61 72 63 68 69 74 65 63 74 75 72 65 73  it architectures
6fa0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55  ..*/.#define ROU
6fb0: 4e 44 38 28 78 29 20 20 20 20 20 28 28 28 78 29  ND8(x)     (((x)
6fc0: 2b 37 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 52  +7)&~7)../*.** R
6fd0: 6f 75 6e 64 20 64 6f 77 6e 20 74 6f 20 74 68 65  ound down to the
6fe0: 20 6e 65 61 72 65 73 74 20 6d 75 6c 74 69 70 6c   nearest multipl
6ff0: 65 20 6f 66 20 38 0a 2a 2f 0a 23 64 65 66 69 6e  e of 8.*/.#defin
7000: 65 20 52 4f 55 4e 44 44 4f 57 4e 38 28 78 29 20  e ROUNDDOWN8(x) 
7010: 28 28 78 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20  ((x)&~7)../*.** 
7020: 41 73 73 65 72 74 20 74 68 61 74 20 74 68 65 20  Assert that the 
7030: 70 6f 69 6e 74 65 72 20 58 20 69 73 20 61 6c 69  pointer X is ali
7040: 67 6e 65 64 20 74 6f 20 61 6e 20 38 2d 62 79 74  gned to an 8-byt
7050: 65 20 62 6f 75 6e 64 61 72 79 2e 20 20 54 68 69  e boundary.  Thi
7060: 73 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75 73  s.** macro is us
7070: 65 64 20 6f 6e 6c 79 20 77 69 74 68 69 6e 20 61  ed only within a
7080: 73 73 65 72 74 28 29 20 74 6f 20 76 65 72 69 66  ssert() to verif
7090: 79 20 74 68 61 74 20 74 68 65 20 63 6f 64 65 20  y that the code 
70a0: 67 65 74 73 0a 2a 2a 20 61 6c 6c 20 61 6c 69 67  gets.** all alig
70b0: 6e 6d 65 6e 74 20 72 65 73 74 72 69 63 74 69 6f  nment restrictio
70c0: 6e 73 20 63 6f 72 72 65 63 74 2e 0a 2a 2a 0a 2a  ns correct..**.*
70d0: 2a 20 45 78 63 65 70 74 2c 20 69 66 20 53 51 4c  * Except, if SQL
70e0: 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e  ITE_4_BYTE_ALIGN
70f0: 45 44 5f 4d 41 4c 4c 4f 43 20 69 73 20 64 65 66  ED_MALLOC is def
7100: 69 6e 65 64 2c 20 74 68 65 6e 20 74 68 65 0a 2a  ined, then the.*
7110: 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20 6d 61 6c  * underlying mal
7120: 6c 6f 63 28 29 20 69 6d 70 6c 65 6d 65 6e 74 61  loc() implementa
7130: 74 69 6f 6e 20 6d 69 67 68 74 20 72 65 74 75 72  tion might retur
7140: 6e 20 75 73 20 34 2d 62 79 74 65 20 61 6c 69 67  n us 4-byte alig
7150: 6e 65 64 0a 2a 2a 20 70 6f 69 6e 74 65 72 73 2e  ned.** pointers.
7160: 20 20 49 6e 20 74 68 61 74 20 63 61 73 65 2c 20    In that case, 
7170: 6f 6e 6c 79 20 76 65 72 69 66 79 20 34 2d 62 79  only verify 4-by
7180: 74 65 20 61 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f  te alignment..*/
7190: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 34  .#ifdef SQLITE_4
71a0: 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41  _BYTE_ALIGNED_MA
71b0: 4c 4c 4f 43 0a 23 20 64 65 66 69 6e 65 20 45 49  LLOC.# define EI
71c0: 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45  GHT_BYTE_ALIGNME
71d0: 4e 54 28 58 29 20 20 20 28 28 28 28 63 68 61 72  NT(X)   ((((char
71e0: 2a 29 28 58 29 20 2d 20 28 63 68 61 72 2a 29 30  *)(X) - (char*)0
71f0: 29 26 33 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23  )&3)==0).#else.#
7200: 20 64 65 66 69 6e 65 20 45 49 47 48 54 5f 42 59   define EIGHT_BY
7210: 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20  TE_ALIGNMENT(X) 
7220: 20 20 28 28 28 28 63 68 61 72 2a 29 28 58 29 20    ((((char*)(X) 
7230: 2d 20 28 63 68 61 72 2a 29 30 29 26 37 29 3d 3d  - (char*)0)&7)==
7240: 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  0).#endif../*.**
7250: 20 44 69 73 61 62 6c 65 20 4d 4d 41 50 20 6f 6e   Disable MMAP on
7260: 20 70 6c 61 74 66 6f 72 6d 73 20 77 68 65 72 65   platforms where
7270: 20 69 74 20 69 73 20 6b 6e 6f 77 6e 20 74 6f 20   it is known to 
7280: 6e 6f 74 20 77 6f 72 6b 0a 2a 2f 0a 23 69 66 20  not work.*/.#if 
7290: 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65 6e 42 53  defined(__OpenBS
72a0: 44 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  D__) || defined(
72b0: 5f 5f 51 4e 58 4e 54 4f 5f 5f 29 0a 23 20 75 6e  __QNXNTO__).# un
72c0: 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  def SQLITE_MAX_M
72d0: 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e  MAP_SIZE.# defin
72e0: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41  e SQLITE_MAX_MMA
72f0: 50 5f 53 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a  P_SIZE 0.#endif.
7300: 0a 2f 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 6d  ./*.** Default m
7310: 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20 6d  aximum size of m
7320: 65 6d 6f 72 79 20 75 73 65 64 20 62 79 20 6d 65  emory used by me
7330: 6d 6f 72 79 2d 6d 61 70 70 65 64 20 49 2f 4f 20  mory-mapped I/O 
7340: 69 6e 20 74 68 65 20 56 46 53 0a 2a 2f 0a 23 69  in the VFS.*/.#i
7350: 66 64 65 66 20 5f 5f 41 50 50 4c 45 5f 5f 0a 23  fdef __APPLE__.#
7360: 20 69 6e 63 6c 75 64 65 20 3c 54 61 72 67 65 74   include <Target
7370: 43 6f 6e 64 69 74 69 6f 6e 61 6c 73 2e 68 3e 0a  Conditionals.h>.
7380: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
7390: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
73a0: 49 5a 45 0a 23 20 69 66 20 64 65 66 69 6e 65 64  IZE.# if defined
73b0: 28 5f 5f 6c 69 6e 75 78 5f 5f 29 20 5c 0a 20 20  (__linux__) \.  
73c0: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 57 49 4e 33  || defined(_WIN3
73d0: 32 29 20 5c 0a 20 20 7c 7c 20 28 64 65 66 69 6e  2) \.  || (defin
73e0: 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 20 26 26  ed(__APPLE__) &&
73f0: 20 64 65 66 69 6e 65 64 28 5f 5f 4d 41 43 48 5f   defined(__MACH_
7400: 5f 29 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e  _)) \.  || defin
7410: 65 64 28 5f 5f 73 75 6e 29 20 5c 0a 20 20 7c 7c  ed(__sun) \.  ||
7420: 20 64 65 66 69 6e 65 64 28 5f 5f 46 72 65 65 42   defined(__FreeB
7430: 53 44 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66  SD__) \.  || def
7440: 69 6e 65 64 28 5f 5f 44 72 61 67 6f 6e 46 6c 79  ined(__DragonFly
7450: 5f 5f 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53  __).#   define S
7460: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
7470: 49 5a 45 20 30 78 37 66 66 66 30 30 30 30 20 20  IZE 0x7fff0000  
7480: 2f 2a 20 32 31 34 37 34 31 38 31 31 32 20 2a 2f  /* 2147418112 */
7490: 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69  .# else.#   defi
74a0: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  ne SQLITE_MAX_MM
74b0: 41 50 5f 53 49 5a 45 20 30 0a 23 20 65 6e 64 69  AP_SIZE 0.# endi
74c0: 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  f.#endif../*.** 
74d0: 54 68 65 20 64 65 66 61 75 6c 74 20 4d 4d 41 50  The default MMAP
74e0: 5f 53 49 5a 45 20 69 73 20 7a 65 72 6f 20 6f 6e  _SIZE is zero on
74f0: 20 61 6c 6c 20 70 6c 61 74 66 6f 72 6d 73 2e 20   all platforms. 
7500: 20 4f 72 2c 20 65 76 65 6e 20 69 66 20 61 20 6c   Or, even if a l
7510: 61 72 67 65 72 0a 2a 2a 20 64 65 66 61 75 6c 74  arger.** default
7520: 20 4d 4d 41 50 5f 53 49 5a 45 20 69 73 20 73 70   MMAP_SIZE is sp
7530: 65 63 69 66 69 65 64 20 61 74 20 63 6f 6d 70 69  ecified at compi
7540: 6c 65 2d 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75  le-time, make su
7550: 72 65 20 74 68 61 74 20 69 74 20 64 6f 65 73 0a  re that it does.
7560: 2a 2a 20 6e 6f 74 20 65 78 63 65 65 64 20 74 68  ** not exceed th
7570: 65 20 6d 61 78 69 6d 75 6d 20 6d 6d 61 70 20 73  e maximum mmap s
7580: 69 7a 65 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ize..*/.#ifndef 
7590: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
75a0: 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e  MAP_SIZE.# defin
75b0: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
75c0: 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 65 6e  _MMAP_SIZE 0.#en
75d0: 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45 5f 44  dif.#if SQLITE_D
75e0: 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45  EFAULT_MMAP_SIZE
75f0: 3e 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50  >SQLITE_MAX_MMAP
7600: 5f 53 49 5a 45 0a 23 20 75 6e 64 65 66 20 53 51  _SIZE.# undef SQ
7610: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41  LITE_DEFAULT_MMA
7620: 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20  P_SIZE.# define 
7630: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
7640: 4d 41 50 5f 53 49 5a 45 20 53 51 4c 49 54 45 5f  MAP_SIZE SQLITE_
7650: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 65  MAX_MMAP_SIZE.#e
7660: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 6c 79  ndif../*.** Only
7670: 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 45   one of SQLITE_E
7680: 4e 41 42 4c 45 5f 53 54 41 54 33 20 6f 72 20 53  NABLE_STAT3 or S
7690: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
76a0: 54 34 20 63 61 6e 20 62 65 20 64 65 66 69 6e 65  T4 can be define
76b0: 64 2e 0a 2a 2a 20 50 72 69 6f 72 69 74 79 20 69  d..** Priority i
76c0: 73 20 67 69 76 65 6e 20 74 6f 20 53 51 4c 49 54  s given to SQLIT
76d0: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 2e 20  E_ENABLE_STAT4. 
76e0: 20 49 66 20 65 69 74 68 65 72 20 61 72 65 20 64   If either are d
76f0: 65 66 69 6e 65 64 2c 20 61 6c 73 6f 0a 2a 2a 20  efined, also.** 
7700: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e  define SQLITE_EN
7710: 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54  ABLE_STAT3_OR_ST
7720: 41 54 34 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  AT4.*/.#ifdef SQ
7730: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
7740: 34 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  4.# undef SQLITE
7750: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23 20  _ENABLE_STAT3.# 
7760: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e  define SQLITE_EN
7770: 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54  ABLE_STAT3_OR_ST
7780: 41 54 34 20 31 0a 23 65 6c 69 66 20 53 51 4c 49  AT4 1.#elif SQLI
7790: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a  TE_ENABLE_STAT3.
77a0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
77b0: 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f  ENABLE_STAT3_OR_
77c0: 53 54 41 54 34 20 31 0a 23 65 6c 69 66 20 53 51  STAT4 1.#elif SQ
77d0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
77e0: 33 5f 4f 52 5f 53 54 41 54 34 0a 23 20 75 6e 64  3_OR_STAT4.# und
77f0: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
7800: 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a  _STAT3_OR_STAT4.
7810: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 45  #endif../*.** SE
7820: 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45  LECTTRACE_ENABLE
7830: 44 20 77 69 6c 6c 20 62 65 20 65 69 74 68 65 72  D will be either
7840: 20 31 20 6f 72 20 30 20 64 65 70 65 6e 64 69 6e   1 or 0 dependin
7850: 67 20 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20  g on whether or 
7860: 6e 6f 74 0a 2a 2a 20 74 68 65 20 53 65 6c 65 63  not.** the Selec
7870: 74 20 71 75 65 72 79 20 67 65 6e 65 72 61 74 6f  t query generato
7880: 72 20 74 72 61 63 69 6e 67 20 6c 6f 67 69 63 20  r tracing logic 
7890: 69 73 20 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f  is turned on..*/
78a0: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
78b0: 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65  ITE_DEBUG) || de
78c0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
78d0: 42 4c 45 5f 53 45 4c 45 43 54 54 52 41 43 45 29  BLE_SELECTTRACE)
78e0: 0a 23 20 64 65 66 69 6e 65 20 53 45 4c 45 43 54  .# define SELECT
78f0: 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 31 0a  TRACE_ENABLED 1.
7900: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53  #else.# define S
7910: 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c  ELECTTRACE_ENABL
7920: 45 44 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ED 0.#endif../*.
7930: 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
7940: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
7950: 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65  structure is use
7960: 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62  d to store the b
7970: 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63  usy-handler.** c
7980: 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61 20 67 69  allback for a gi
7990: 76 65 6e 20 73 71 6c 69 74 65 20 68 61 6e 64 6c  ven sqlite handl
79a0: 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71 6c  e..**.** The sql
79b0: 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72 20  ite.busyHandler 
79c0: 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 73 71  member of the sq
79d0: 6c 69 74 65 20 73 74 72 75 63 74 20 63 6f 6e 74  lite struct cont
79e0: 61 69 6e 73 20 74 68 65 20 62 75 73 79 0a 2a 2a  ains the busy.**
79f0: 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 74 68   callback for th
7a00: 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
7a10: 65 2e 20 45 61 63 68 20 70 61 67 65 72 20 6f 70  e. Each pager op
7a20: 65 6e 65 64 20 76 69 61 20 74 68 65 20 73 71 6c  ened via the sql
7a30: 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20 69 73  ite.** handle is
7a40: 20 70 61 73 73 65 64 20 61 20 70 6f 69 6e 74 65   passed a pointe
7a50: 72 20 74 6f 20 73 71 6c 69 74 65 2e 62 75 73 79  r to sqlite.busy
7a60: 48 61 6e 64 6c 65 72 2e 20 54 68 65 20 62 75 73  Handler. The bus
7a70: 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c  y-handler.** cal
7a80: 6c 62 61 63 6b 20 69 73 20 63 75 72 72 65 6e 74  lback is current
7a90: 6c 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79 20  ly invoked only 
7aa0: 66 72 6f 6d 20 77 69 74 68 69 6e 20 70 61 67 65  from within page
7ab0: 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  r.c..*/.typedef 
7ac0: 73 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c  struct BusyHandl
7ad0: 65 72 20 42 75 73 79 48 61 6e 64 6c 65 72 3b 0a  er BusyHandler;.
7ae0: 73 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c  struct BusyHandl
7af0: 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 46 75  er {.  int (*xFu
7b00: 6e 63 29 28 76 6f 69 64 20 2a 2c 69 6e 74 29 3b  nc)(void *,int);
7b10: 20 20 2f 2a 20 54 68 65 20 62 75 73 79 20 63 61    /* The busy ca
7b20: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64  llback */.  void
7b30: 20 2a 70 41 72 67 3b 20 20 20 20 20 20 20 20 20   *pArg;         
7b40: 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
7b50: 61 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c 6c  arg to busy call
7b60: 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42  back */.  int nB
7b70: 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20  usy;            
7b80: 20 20 20 20 20 2f 2a 20 49 6e 63 72 65 6d 65 6e       /* Incremen
7b90: 74 65 64 20 77 69 74 68 20 65 61 63 68 20 62 75  ted with each bu
7ba0: 73 79 20 63 61 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f  sy call */.};../
7bb0: 2a 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65  *.** Name of the
7bc0: 20 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65   master database
7bd0: 20 74 61 62 6c 65 2e 20 20 54 68 65 20 6d 61 73   table.  The mas
7be0: 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62  ter database tab
7bf0: 6c 65 0a 2a 2a 20 69 73 20 61 20 73 70 65 63 69  le.** is a speci
7c00: 61 6c 20 74 61 62 6c 65 20 74 68 61 74 20 68 6f  al table that ho
7c10: 6c 64 73 20 74 68 65 20 6e 61 6d 65 73 20 61 6e  lds the names an
7c20: 64 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 20  d attributes of 
7c30: 61 6c 6c 0a 2a 2a 20 75 73 65 72 20 74 61 62 6c  all.** user tabl
7c40: 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e 0a  es and indices..
7c50: 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45  */.#define MASTE
7c60: 52 5f 4e 41 4d 45 20 20 20 20 20 20 20 22 73 71  R_NAME       "sq
7c70: 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a 23 64 65  lite_master".#de
7c80: 66 69 6e 65 20 54 45 4d 50 5f 4d 41 53 54 45 52  fine TEMP_MASTER
7c90: 5f 4e 41 4d 45 20 20 22 73 71 6c 69 74 65 5f 74  _NAME  "sqlite_t
7ca0: 65 6d 70 5f 6d 61 73 74 65 72 22 0a 0a 2f 2a 0a  emp_master"../*.
7cb0: 2a 2a 20 54 68 65 20 72 6f 6f 74 2d 70 61 67 65  ** The root-page
7cc0: 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64   of the master d
7cd0: 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e 0a 2a  atabase table..*
7ce0: 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52  /.#define MASTER
7cf0: 5f 52 4f 4f 54 20 20 20 20 20 20 20 31 0a 0a 2f  _ROOT       1../
7d00: 2a 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66  *.** The name of
7d10: 20 74 68 65 20 73 63 68 65 6d 61 20 74 61 62 6c   the schema tabl
7d20: 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43  e..*/.#define SC
7d30: 48 45 4d 41 5f 54 41 42 4c 45 28 78 29 20 20 28  HEMA_TABLE(x)  (
7d40: 28 21 4f 4d 49 54 5f 54 45 4d 50 44 42 29 26 26  (!OMIT_TEMPDB)&&
7d50: 28 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d 41 53 54  (x==1)?TEMP_MAST
7d60: 45 52 5f 4e 41 4d 45 3a 4d 41 53 54 45 52 5f 4e  ER_NAME:MASTER_N
7d70: 41 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 6f  AME)../*.** A co
7d80: 6e 76 65 6e 69 65 6e 63 65 20 6d 61 63 72 6f 20  nvenience macro 
7d90: 74 68 61 74 20 72 65 74 75 72 6e 73 20 74 68 65  that returns the
7da0: 20 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65   number of eleme
7db0: 6e 74 73 20 69 6e 0a 2a 2a 20 61 6e 20 61 72 72  nts in.** an arr
7dc0: 61 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 41  ay..*/.#define A
7dd0: 72 72 61 79 53 69 7a 65 28 58 29 20 20 20 20 28  rraySize(X)    (
7de0: 28 69 6e 74 29 28 73 69 7a 65 6f 66 28 58 29 2f  (int)(sizeof(X)/
7df0: 73 69 7a 65 6f 66 28 58 5b 30 5d 29 29 29 0a 0a  sizeof(X[0])))..
7e00: 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20  /*.** Determine 
7e10: 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  if the argument 
7e20: 69 73 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77  is a power of tw
7e30: 6f 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50  o.*/.#define IsP
7e40: 6f 77 65 72 4f 66 54 77 6f 28 58 29 20 28 28 28  owerOfTwo(X) (((
7e50: 58 29 26 28 28 58 29 2d 31 29 29 3d 3d 30 29 0a  X)&((X)-1))==0).
7e60: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
7e70: 77 69 6e 67 20 76 61 6c 75 65 20 61 73 20 61 20  wing value as a 
7e80: 64 65 73 74 72 75 63 74 6f 72 20 6d 65 61 6e 73  destructor means
7e90: 20 74 6f 20 75 73 65 20 73 71 6c 69 74 65 33 44   to use sqlite3D
7ea0: 62 46 72 65 65 28 29 2e 0a 2a 2a 20 54 68 65 20  bFree()..** The 
7eb0: 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20  sqlite3DbFree() 
7ec0: 72 6f 75 74 69 6e 65 20 72 65 71 75 69 72 65 73  routine requires
7ed0: 20 74 77 6f 20 70 61 72 61 6d 65 74 65 72 73 20   two parameters 
7ee0: 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65 0a 2a  instead of the.*
7ef0: 2a 20 6f 6e 65 20 70 61 72 61 6d 65 74 65 72 20  * one parameter 
7f00: 74 68 61 74 20 64 65 73 74 72 75 63 74 6f 72 73  that destructors
7f10: 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 2e 20   normally want. 
7f20: 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20 69   So we have to i
7f30: 6e 74 72 6f 64 75 63 65 0a 2a 2a 20 74 68 69 73  ntroduce.** this
7f40: 20 6d 61 67 69 63 20 76 61 6c 75 65 20 74 68 61   magic value tha
7f50: 74 20 74 68 65 20 63 6f 64 65 20 6b 6e 6f 77 73  t the code knows
7f60: 20 74 6f 20 68 61 6e 64 6c 65 20 64 69 66 66 65   to handle diffe
7f70: 72 65 6e 74 6c 79 2e 20 20 41 6e 79 0a 2a 2a 20  rently.  Any.** 
7f80: 70 6f 69 6e 74 65 72 20 77 69 6c 6c 20 77 6f 72  pointer will wor
7f90: 6b 20 68 65 72 65 20 61 73 20 6c 6f 6e 67 20 61  k here as long a
7fa0: 73 20 69 74 20 69 73 20 64 69 73 74 69 6e 63 74  s it is distinct
7fb0: 20 66 72 6f 6d 20 53 51 4c 49 54 45 5f 53 54 41   from SQLITE_STA
7fc0: 54 49 43 0a 2a 2a 20 61 6e 64 20 53 51 4c 49 54  TIC.** and SQLIT
7fd0: 45 5f 54 52 41 4e 53 49 45 4e 54 2e 0a 2a 2f 0a  E_TRANSIENT..*/.
7fe0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44  #define SQLITE_D
7ff0: 59 4e 41 4d 49 43 20 20 20 28 28 73 71 6c 69 74  YNAMIC   ((sqlit
8000: 65 33 5f 64 65 73 74 72 75 63 74 6f 72 5f 74 79  e3_destructor_ty
8010: 70 65 29 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  pe)sqlite3Malloc
8020: 53 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a 20 57 68 65  Size)../*.** Whe
8030: 6e 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53  n SQLITE_OMIT_WS
8040: 44 20 69 73 20 64 65 66 69 6e 65 64 2c 20 69 74  D is defined, it
8050: 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20   means that the 
8060: 74 61 72 67 65 74 20 70 6c 61 74 66 6f 72 6d 20  target platform 
8070: 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 73 75 70 70  does.** not supp
8080: 6f 72 74 20 57 72 69 74 61 62 6c 65 20 53 74 61  ort Writable Sta
8090: 74 69 63 20 44 61 74 61 20 28 57 53 44 29 20 73  tic Data (WSD) s
80a0: 75 63 68 20 61 73 20 67 6c 6f 62 61 6c 20 61 6e  uch as global an
80b0: 64 20 73 74 61 74 69 63 20 76 61 72 69 61 62 6c  d static variabl
80c0: 65 73 2e 0a 2a 2a 20 41 6c 6c 20 76 61 72 69 61  es..** All varia
80d0: 62 6c 65 73 20 6d 75 73 74 20 65 69 74 68 65 72  bles must either
80e0: 20 62 65 20 6f 6e 20 74 68 65 20 73 74 61 63 6b   be on the stack
80f0: 20 6f 72 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20   or dynamically 
8100: 61 6c 6c 6f 63 61 74 65 64 20 66 72 6f 6d 0a 2a  allocated from.*
8110: 2a 20 74 68 65 20 68 65 61 70 2e 20 20 57 68 65  * the heap.  Whe
8120: 6e 20 57 53 44 20 69 73 20 75 6e 73 75 70 70 6f  n WSD is unsuppo
8130: 72 74 65 64 2c 20 74 68 65 20 76 61 72 69 61 62  rted, the variab
8140: 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20  le declarations 
8150: 73 63 61 74 74 65 72 65 64 0a 2a 2a 20 74 68 72  scattered.** thr
8160: 6f 75 67 68 6f 75 74 20 74 68 65 20 53 51 4c 69  oughout the SQLi
8170: 74 65 20 63 6f 64 65 20 6d 75 73 74 20 62 65 63  te code must bec
8180: 6f 6d 65 20 63 6f 6e 73 74 61 6e 74 73 20 69 6e  ome constants in
8190: 73 74 65 61 64 2e 20 20 54 68 65 20 53 51 4c 49  stead.  The SQLI
81a0: 54 45 5f 57 53 44 0a 2a 2a 20 6d 61 63 72 6f 20  TE_WSD.** macro 
81b0: 69 73 20 75 73 65 64 20 66 6f 72 20 74 68 69 73  is used for this
81c0: 20 70 75 72 70 6f 73 65 2e 20 20 41 6e 64 20 69   purpose.  And i
81d0: 6e 73 74 65 61 64 20 6f 66 20 72 65 66 65 72 65  nstead of refere
81e0: 6e 63 69 6e 67 20 74 68 65 20 76 61 72 69 61 62  ncing the variab
81f0: 6c 65 0a 2a 2a 20 64 69 72 65 63 74 6c 79 2c 20  le.** directly, 
8200: 77 65 20 75 73 65 20 69 74 73 20 63 6f 6e 73 74  we use its const
8210: 61 6e 74 20 61 73 20 61 20 6b 65 79 20 74 6f 20  ant as a key to 
8220: 6c 6f 6f 6b 75 70 20 74 68 65 20 72 75 6e 2d 74  lookup the run-t
8230: 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a  ime allocated.**
8240: 20 62 75 66 66 65 72 20 74 68 61 74 20 68 6f 6c   buffer that hol
8250: 64 73 20 72 65 61 6c 20 76 61 72 69 61 62 6c 65  ds real variable
8260: 2e 20 20 54 68 65 20 63 6f 6e 73 74 61 6e 74 20  .  The constant 
8270: 69 73 20 61 6c 73 6f 20 74 68 65 20 69 6e 69 74  is also the init
8280: 69 61 6c 69 7a 65 72 0a 2a 2a 20 66 6f 72 20 74  ializer.** for t
8290: 68 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f  he run-time allo
82a0: 63 61 74 65 64 20 62 75 66 66 65 72 2e 0a 2a 2a  cated buffer..**
82b0: 0a 2a 2a 20 49 6e 20 74 68 65 20 75 73 75 61 6c  .** In the usual
82c0: 20 63 61 73 65 20 77 68 65 72 65 20 57 53 44 20   case where WSD 
82d0: 69 73 20 73 75 70 70 6f 72 74 65 64 2c 20 74 68  is supported, th
82e0: 65 20 53 51 4c 49 54 45 5f 57 53 44 20 61 6e 64  e SQLITE_WSD and
82f0: 20 47 4c 4f 42 41 4c 0a 2a 2a 20 6d 61 63 72 6f   GLOBAL.** macro
8300: 73 20 62 65 63 6f 6d 65 20 6e 6f 2d 6f 70 73 20  s become no-ops 
8310: 61 6e 64 20 68 61 76 65 20 7a 65 72 6f 20 70 65  and have zero pe
8320: 72 66 6f 72 6d 61 6e 63 65 20 69 6d 70 61 63 74  rformance impact
8330: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
8340: 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20 23 64  TE_OMIT_WSD.  #d
8350: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 53 44  efine SQLITE_WSD
8360: 20 63 6f 6e 73 74 0a 20 20 23 64 65 66 69 6e 65   const.  #define
8370: 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 28 2a 28   GLOBAL(t,v) (*(
8380: 74 2a 29 73 71 6c 69 74 65 33 5f 77 73 64 5f 66  t*)sqlite3_wsd_f
8390: 69 6e 64 28 28 76 6f 69 64 2a 29 26 28 76 29 2c  ind((void*)&(v),
83a0: 20 73 69 7a 65 6f 66 28 76 29 29 29 0a 20 20 23   sizeof(v))).  #
83b0: 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 6c  define sqlite3Gl
83c0: 6f 62 61 6c 43 6f 6e 66 69 67 20 47 4c 4f 42 41  obalConfig GLOBA
83d0: 4c 28 73 74 72 75 63 74 20 53 71 6c 69 74 65 33  L(struct Sqlite3
83e0: 43 6f 6e 66 69 67 2c 20 73 71 6c 69 74 65 33 43  Config, sqlite3C
83f0: 6f 6e 66 69 67 29 0a 20 20 69 6e 74 20 73 71 6c  onfig).  int sql
8400: 69 74 65 33 5f 77 73 64 5f 69 6e 69 74 28 69 6e  ite3_wsd_init(in
8410: 74 20 4e 2c 20 69 6e 74 20 4a 29 3b 0a 20 20 76  t N, int J);.  v
8420: 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 77 73 64  oid *sqlite3_wsd
8430: 5f 66 69 6e 64 28 76 6f 69 64 20 2a 4b 2c 20 69  _find(void *K, i
8440: 6e 74 20 4c 29 3b 0a 23 65 6c 73 65 0a 20 20 23  nt L);.#else.  #
8450: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 53  define SQLITE_WS
8460: 44 0a 20 20 23 64 65 66 69 6e 65 20 47 4c 4f 42  D.  #define GLOB
8470: 41 4c 28 74 2c 76 29 20 76 0a 20 20 23 64 65 66  AL(t,v) v.  #def
8480: 69 6e 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61  ine sqlite3Globa
8490: 6c 43 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43  lConfig sqlite3C
84a0: 6f 6e 66 69 67 0a 23 65 6e 64 69 66 0a 0a 2f 2a  onfig.#endif../*
84b0: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
84c0: 67 20 6d 61 63 72 6f 73 20 61 72 65 20 75 73 65  g macros are use
84d0: 64 20 74 6f 20 73 75 70 70 72 65 73 73 20 63 6f  d to suppress co
84e0: 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 73 20  mpiler warnings 
84f0: 61 6e 64 20 74 6f 0a 2a 2a 20 6d 61 6b 65 20 69  and to.** make i
8500: 74 20 63 6c 65 61 72 20 74 6f 20 68 75 6d 61 6e  t clear to human
8510: 20 72 65 61 64 65 72 73 20 77 68 65 6e 20 61 20   readers when a 
8520: 66 75 6e 63 74 69 6f 6e 20 70 61 72 61 6d 65 74  function paramet
8530: 65 72 20 69 73 20 64 65 6c 69 62 65 72 61 74 65  er is deliberate
8540: 6c 79 0a 2a 2a 20 6c 65 66 74 20 75 6e 75 73 65  ly.** left unuse
8550: 64 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64  d within the bod
8560: 79 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2e  y of a function.
8570: 20 54 68 69 73 20 75 73 75 61 6c 6c 79 20 68 61   This usually ha
8580: 70 70 65 6e 73 20 77 68 65 6e 0a 2a 2a 20 61 20  ppens when.** a 
8590: 66 75 6e 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c  function is call
85a0: 65 64 20 76 69 61 20 61 20 66 75 6e 63 74 69 6f  ed via a functio
85b0: 6e 20 70 6f 69 6e 74 65 72 2e 20 46 6f 72 20 65  n pointer. For e
85c0: 78 61 6d 70 6c 65 20 74 68 65 0a 2a 2a 20 69 6d  xample the.** im
85d0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  plementation of 
85e0: 61 6e 20 53 51 4c 20 61 67 67 72 65 67 61 74 65  an SQL aggregate
85f0: 20 73 74 65 70 20 63 61 6c 6c 62 61 63 6b 20 6d   step callback m
8600: 61 79 20 6e 6f 74 20 75 73 65 20 74 68 65 0a 2a  ay not use the.*
8610: 2a 20 70 61 72 61 6d 65 74 65 72 20 69 6e 64 69  * parameter indi
8620: 63 61 74 69 6e 67 20 74 68 65 20 6e 75 6d 62 65  cating the numbe
8630: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 70  r of arguments p
8640: 61 73 73 65 64 20 74 6f 20 74 68 65 20 61 67 67  assed to the agg
8650: 72 65 67 61 74 65 2c 0a 2a 2a 20 69 66 20 69 74  regate,.** if it
8660: 20 6b 6e 6f 77 73 20 74 68 61 74 20 74 68 69 73   knows that this
8670: 20 69 73 20 65 6e 66 6f 72 63 65 64 20 65 6c 73   is enforced els
8680: 65 77 68 65 72 65 2e 0a 2a 2a 0a 2a 2a 20 57 68  ewhere..**.** Wh
8690: 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61  en a function pa
86a0: 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 75  rameter is not u
86b0: 73 65 64 20 61 74 20 61 6c 6c 20 77 69 74 68 69  sed at all withi
86c0: 6e 20 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20  n the body of a 
86d0: 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 69 74 20  function,.** it 
86e0: 69 73 20 67 65 6e 65 72 61 6c 6c 79 20 6e 61 6d  is generally nam
86f0: 65 64 20 22 4e 6f 74 55 73 65 64 22 20 6f 72 20  ed "NotUsed" or 
8700: 22 4e 6f 74 55 73 65 64 32 22 20 74 6f 20 6d 61  "NotUsed2" to ma
8710: 6b 65 20 74 68 69 6e 67 73 20 65 76 65 6e 20 63  ke things even c
8720: 6c 65 61 72 65 72 2e 0a 2a 2a 20 48 6f 77 65 76  learer..** Howev
8730: 65 72 2c 20 74 68 65 73 65 20 6d 61 63 72 6f 73  er, these macros
8740: 20 6d 61 79 20 61 6c 73 6f 20 62 65 20 75 73 65   may also be use
8750: 64 20 74 6f 20 73 75 70 70 72 65 73 73 20 77 61  d to suppress wa
8760: 72 6e 69 6e 67 73 20 72 65 6c 61 74 65 64 20 74  rnings related t
8770: 6f 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 73 20  o.** parameters 
8780: 74 68 61 74 20 6d 61 79 20 6f 72 20 6d 61 79 20  that may or may 
8790: 6e 6f 74 20 62 65 20 75 73 65 64 20 64 65 70 65  not be used depe
87a0: 6e 64 69 6e 67 20 6f 6e 20 63 6f 6d 70 69 6c 61  nding on compila
87b0: 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e 0a 2a 2a  tion options..**
87c0: 20 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 6f   For example tho
87d0: 73 65 20 70 61 72 61 6d 65 74 65 72 73 20 6f 6e  se parameters on
87e0: 6c 79 20 75 73 65 64 20 69 6e 20 61 73 73 65 72  ly used in asser
87f0: 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 20  t() statements. 
8800: 49 6e 20 74 68 65 73 65 0a 2a 2a 20 63 61 73 65  In these.** case
8810: 73 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73  s the parameters
8820: 20 61 72 65 20 6e 61 6d 65 64 20 61 73 20 70 65   are named as pe
8830: 72 20 74 68 65 20 75 73 75 61 6c 20 63 6f 6e 76  r the usual conv
8840: 65 6e 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66  entions..*/.#def
8850: 69 6e 65 20 55 4e 55 53 45 44 5f 50 41 52 41 4d  ine UNUSED_PARAM
8860: 45 54 45 52 28 78 29 20 28 76 6f 69 64 29 28 78  ETER(x) (void)(x
8870: 29 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44  ).#define UNUSED
8880: 5f 50 41 52 41 4d 45 54 45 52 32 28 78 2c 79 29  _PARAMETER2(x,y)
8890: 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45   UNUSED_PARAMETE
88a0: 52 28 78 29 2c 55 4e 55 53 45 44 5f 50 41 52 41  R(x),UNUSED_PARA
88b0: 4d 45 54 45 52 28 79 29 0a 0a 2f 2a 0a 2a 2a 20  METER(y)../*.** 
88c0: 46 6f 72 77 61 72 64 20 72 65 66 65 72 65 6e 63  Forward referenc
88d0: 65 73 20 74 6f 20 73 74 72 75 63 74 75 72 65 73  es to structures
88e0: 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75  .*/.typedef stru
88f0: 63 74 20 41 67 67 49 6e 66 6f 20 41 67 67 49 6e  ct AggInfo AggIn
8900: 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  fo;.typedef stru
8910: 63 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20 41  ct AuthContext A
8920: 75 74 68 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65  uthContext;.type
8930: 64 65 66 20 73 74 72 75 63 74 20 41 75 74 6f 69  def struct Autoi
8940: 6e 63 49 6e 66 6f 20 41 75 74 6f 69 6e 63 49 6e  ncInfo AutoincIn
8950: 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  fo;.typedef stru
8960: 63 74 20 42 69 74 76 65 63 20 42 69 74 76 65 63  ct Bitvec Bitvec
8970: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8980: 20 43 6f 6c 6c 53 65 71 20 43 6f 6c 6c 53 65 71   CollSeq CollSeq
8990: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
89a0: 20 43 6f 6c 75 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a   Column Column;.
89b0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44  typedef struct D
89c0: 62 20 44 62 3b 0a 74 79 70 65 64 65 66 20 73 74  b Db;.typedef st
89d0: 72 75 63 74 20 53 63 68 65 6d 61 20 53 63 68 65  ruct Schema Sche
89e0: 6d 61 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ma;.typedef stru
89f0: 63 74 20 45 78 70 72 20 45 78 70 72 3b 0a 74 79  ct Expr Expr;.ty
8a00: 70 65 64 65 66 20 73 74 72 75 63 74 20 45 78 70  pedef struct Exp
8a10: 72 4c 69 73 74 20 45 78 70 72 4c 69 73 74 3b 0a  rList ExprList;.
8a20: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 45  typedef struct E
8a30: 78 70 72 53 70 61 6e 20 45 78 70 72 53 70 61 6e  xprSpan ExprSpan
8a40: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8a50: 20 46 4b 65 79 20 46 4b 65 79 3b 0a 74 79 70 65   FKey FKey;.type
8a60: 64 65 66 20 73 74 72 75 63 74 20 46 75 6e 63 44  def struct FuncD
8a70: 65 73 74 72 75 63 74 6f 72 20 46 75 6e 63 44 65  estructor FuncDe
8a80: 73 74 72 75 63 74 6f 72 3b 0a 74 79 70 65 64 65  structor;.typede
8a90: 66 20 73 74 72 75 63 74 20 46 75 6e 63 44 65 66  f struct FuncDef
8aa0: 20 46 75 6e 63 44 65 66 3b 0a 74 79 70 65 64 65   FuncDef;.typede
8ab0: 66 20 73 74 72 75 63 74 20 46 75 6e 63 44 65 66  f struct FuncDef
8ac0: 48 61 73 68 20 46 75 6e 63 44 65 66 48 61 73 68  Hash FuncDefHash
8ad0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8ae0: 20 49 64 4c 69 73 74 20 49 64 4c 69 73 74 3b 0a   IdList IdList;.
8af0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49  typedef struct I
8b00: 6e 64 65 78 20 49 6e 64 65 78 3b 0a 74 79 70 65  ndex Index;.type
8b10: 64 65 66 20 73 74 72 75 63 74 20 49 6e 64 65 78  def struct Index
8b20: 53 61 6d 70 6c 65 20 49 6e 64 65 78 53 61 6d 70  Sample IndexSamp
8b30: 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  le;.typedef stru
8b40: 63 74 20 4b 65 79 43 6c 61 73 73 20 4b 65 79 43  ct KeyClass KeyC
8b50: 6c 61 73 73 3b 0a 74 79 70 65 64 65 66 20 73 74  lass;.typedef st
8b60: 72 75 63 74 20 4b 65 79 49 6e 66 6f 20 4b 65 79  ruct KeyInfo Key
8b70: 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74  Info;.typedef st
8b80: 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 4c  ruct Lookaside L
8b90: 6f 6f 6b 61 73 69 64 65 3b 0a 74 79 70 65 64 65  ookaside;.typede
8ba0: 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69  f struct Lookasi
8bb0: 64 65 53 6c 6f 74 20 4c 6f 6f 6b 61 73 69 64 65  deSlot Lookaside
8bc0: 53 6c 6f 74 3b 0a 74 79 70 65 64 65 66 20 73 74  Slot;.typedef st
8bd0: 72 75 63 74 20 4d 6f 64 75 6c 65 20 4d 6f 64 75  ruct Module Modu
8be0: 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  le;.typedef stru
8bf0: 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 4e  ct NameContext N
8c00: 61 6d 65 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65  ameContext;.type
8c10: 64 65 66 20 73 74 72 75 63 74 20 50 61 72 73 65  def struct Parse
8c20: 20 50 61 72 73 65 3b 0a 74 79 70 65 64 65 66 20   Parse;.typedef 
8c30: 73 74 72 75 63 74 20 50 72 65 55 70 64 61 74 65  struct PreUpdate
8c40: 20 50 72 65 55 70 64 61 74 65 3b 0a 74 79 70 65   PreUpdate;.type
8c50: 64 65 66 20 73 74 72 75 63 74 20 50 72 69 6e 74  def struct Print
8c60: 66 41 72 67 75 6d 65 6e 74 73 20 50 72 69 6e 74  fArguments Print
8c70: 66 41 72 67 75 6d 65 6e 74 73 3b 0a 74 79 70 65  fArguments;.type
8c80: 64 65 66 20 73 74 72 75 63 74 20 52 6f 77 53 65  def struct RowSe
8c90: 74 20 52 6f 77 53 65 74 3b 0a 74 79 70 65 64 65  t RowSet;.typede
8ca0: 66 20 73 74 72 75 63 74 20 53 61 76 65 70 6f 69  f struct Savepoi
8cb0: 6e 74 20 53 61 76 65 70 6f 69 6e 74 3b 0a 74 79  nt Savepoint;.ty
8cc0: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 65 6c  pedef struct Sel
8cd0: 65 63 74 20 53 65 6c 65 63 74 3b 0a 74 79 70 65  ect Select;.type
8ce0: 64 65 66 20 73 74 72 75 63 74 20 53 51 4c 69 74  def struct SQLit
8cf0: 65 54 68 72 65 61 64 20 53 51 4c 69 74 65 54 68  eThread SQLiteTh
8d00: 72 65 61 64 3b 0a 74 79 70 65 64 65 66 20 73 74  read;.typedef st
8d10: 72 75 63 74 20 53 65 6c 65 63 74 44 65 73 74 20  ruct SelectDest 
8d20: 53 65 6c 65 63 74 44 65 73 74 3b 0a 74 79 70 65  SelectDest;.type
8d30: 64 65 66 20 73 74 72 75 63 74 20 53 72 63 4c 69  def struct SrcLi
8d40: 73 74 20 53 72 63 4c 69 73 74 3b 0a 74 79 70 65  st SrcList;.type
8d50: 64 65 66 20 73 74 72 75 63 74 20 53 74 72 41 63  def struct StrAc
8d60: 63 75 6d 20 53 74 72 41 63 63 75 6d 3b 0a 74 79  cum StrAccum;.ty
8d70: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 61 62  pedef struct Tab
8d80: 6c 65 20 54 61 62 6c 65 3b 0a 74 79 70 65 64 65  le Table;.typede
8d90: 66 20 73 74 72 75 63 74 20 54 61 62 6c 65 4c 6f  f struct TableLo
8da0: 63 6b 20 54 61 62 6c 65 4c 6f 63 6b 3b 0a 74 79  ck TableLock;.ty
8db0: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 6f 6b  pedef struct Tok
8dc0: 65 6e 20 54 6f 6b 65 6e 3b 0a 74 79 70 65 64 65  en Token;.typede
8dd0: 66 20 73 74 72 75 63 74 20 54 72 65 65 56 69 65  f struct TreeVie
8de0: 77 20 54 72 65 65 56 69 65 77 3b 0a 74 79 70 65  w TreeView;.type
8df0: 64 65 66 20 73 74 72 75 63 74 20 54 72 69 67 67  def struct Trigg
8e00: 65 72 20 54 72 69 67 67 65 72 3b 0a 74 79 70 65  er Trigger;.type
8e10: 64 65 66 20 73 74 72 75 63 74 20 54 72 69 67 67  def struct Trigg
8e20: 65 72 50 72 67 20 54 72 69 67 67 65 72 50 72 67  erPrg TriggerPrg
8e30: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8e40: 20 54 72 69 67 67 65 72 53 74 65 70 20 54 72 69   TriggerStep Tri
8e50: 67 67 65 72 53 74 65 70 3b 0a 74 79 70 65 64 65  ggerStep;.typede
8e60: 66 20 73 74 72 75 63 74 20 55 6e 70 61 63 6b 65  f struct Unpacke
8e70: 64 52 65 63 6f 72 64 20 55 6e 70 61 63 6b 65 64  dRecord Unpacked
8e80: 52 65 63 6f 72 64 3b 0a 74 79 70 65 64 65 66 20  Record;.typedef 
8e90: 73 74 72 75 63 74 20 56 54 61 62 6c 65 20 56 54  struct VTable VT
8ea0: 61 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74  able;.typedef st
8eb0: 72 75 63 74 20 56 74 61 62 43 74 78 20 56 74 61  ruct VtabCtx Vta
8ec0: 62 43 74 78 3b 0a 74 79 70 65 64 65 66 20 73 74  bCtx;.typedef st
8ed0: 72 75 63 74 20 57 61 6c 6b 65 72 20 57 61 6c 6b  ruct Walker Walk
8ee0: 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  er;.typedef stru
8ef0: 63 74 20 57 68 65 72 65 49 6e 66 6f 20 57 68 65  ct WhereInfo Whe
8f00: 72 65 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20  reInfo;.typedef 
8f10: 73 74 72 75 63 74 20 57 69 74 68 20 57 69 74 68  struct With With
8f20: 3b 0a 0a 2f 2a 20 41 20 56 4c 69 73 74 20 6f 62  ;../* A VList ob
8f30: 6a 65 63 74 20 72 65 63 6f 72 64 73 20 61 20 6d  ject records a m
8f40: 61 70 70 69 6e 67 20 62 65 74 77 65 65 6e 20 70  apping between p
8f50: 61 72 61 6d 65 74 65 72 73 2f 76 61 72 69 61 62  arameters/variab
8f60: 6c 65 73 2f 77 69 6c 64 63 61 72 64 73 0a 2a 2a  les/wildcards.**
8f70: 20 69 6e 20 74 68 65 20 53 51 4c 20 73 74 61 74   in the SQL stat
8f80: 65 6d 65 6e 74 20 28 73 75 63 68 20 61 73 20 24  ement (such as $
8f90: 61 62 63 2c 20 40 70 71 72 2c 20 6f 72 20 3a 78  abc, @pqr, or :x
8fa0: 79 7a 29 20 61 6e 64 20 74 68 65 20 69 6e 74 65  yz) and the inte
8fb0: 67 65 72 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20  ger.** variable 
8fc0: 6e 75 6d 62 65 72 20 61 73 73 6f 63 69 61 74 65  number associate
8fd0: 64 20 77 69 74 68 20 74 68 61 74 20 70 61 72 61  d with that para
8fe0: 6d 65 74 65 72 2e 20 20 53 65 65 20 74 68 65 20  meter.  See the 
8ff0: 66 6f 72 6d 61 74 20 64 65 73 63 72 69 70 74 69  format descripti
9000: 6f 6e 0a 2a 2a 20 6f 6e 20 74 68 65 20 73 71 6c  on.** on the sql
9010: 69 74 65 33 56 4c 69 73 74 41 64 64 28 29 20 72  ite3VListAdd() r
9020: 6f 75 74 69 6e 65 20 66 6f 72 20 6d 6f 72 65 20  outine for more 
9030: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 20 41 20  information.  A 
9040: 56 4c 69 73 74 20 69 73 20 72 65 61 6c 6c 79 0a  VList is really.
9050: 2a 2a 20 6a 75 73 74 20 61 6e 20 61 72 72 61 79  ** just an array
9060: 20 6f 66 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2f   of integers..*/
9070: 0a 74 79 70 65 64 65 66 20 69 6e 74 20 56 4c 69  .typedef int VLi
9080: 73 74 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 65 72  st;../*.** Defer
9090: 20 73 6f 75 72 63 69 6e 67 20 76 64 62 65 2e 68   sourcing vdbe.h
90a0: 20 61 6e 64 20 62 74 72 65 65 2e 68 20 75 6e 74   and btree.h unt
90b0: 69 6c 20 61 66 74 65 72 20 74 68 65 20 22 75 38  il after the "u8
90c0: 22 20 61 6e 64 0a 2a 2a 20 22 42 75 73 79 48 61  " and.** "BusyHa
90d0: 6e 64 6c 65 72 22 20 74 79 70 65 64 65 66 73 2e  ndler" typedefs.
90e0: 20 76 64 62 65 2e 68 20 61 6c 73 6f 20 72 65 71   vdbe.h also req
90f0: 75 69 72 65 73 20 61 20 66 65 77 20 6f 66 20 74  uires a few of t
9100: 68 65 20 6f 70 61 71 75 65 0a 2a 2a 20 70 6f 69  he opaque.** poi
9110: 6e 74 65 72 20 74 79 70 65 73 20 28 69 2e 65 2e  nter types (i.e.
9120: 20 46 75 6e 63 44 65 66 29 20 64 65 66 69 6e 65   FuncDef) define
9130: 64 20 61 62 6f 76 65 2e 0a 2a 2f 0a 23 69 6e 63  d above..*/.#inc
9140: 6c 75 64 65 20 22 62 74 72 65 65 2e 68 22 0a 23  lude "btree.h".#
9150: 69 6e 63 6c 75 64 65 20 22 76 64 62 65 2e 68 22  include "vdbe.h"
9160: 0a 23 69 6e 63 6c 75 64 65 20 22 70 61 67 65 72  .#include "pager
9170: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 63  .h".#include "pc
9180: 61 63 68 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65  ache.h".#include
9190: 20 22 6f 73 2e 68 22 0a 23 69 6e 63 6c 75 64 65   "os.h".#include
91a0: 20 22 6d 75 74 65 78 2e 68 22 0a 0a 2f 2a 20 54   "mutex.h"../* T
91b0: 68 65 20 53 51 4c 49 54 45 5f 45 58 54 52 41 5f  he SQLITE_EXTRA_
91c0: 44 55 52 41 42 4c 45 20 63 6f 6d 70 69 6c 65 2d  DURABLE compile-
91d0: 74 69 6d 65 20 6f 70 74 69 6f 6e 20 75 73 65 64  time option used
91e0: 20 74 6f 20 73 65 74 20 74 68 65 20 64 65 66 61   to set the defa
91f0: 75 6c 74 0a 2a 2a 20 73 79 6e 63 68 72 6f 6e 6f  ult.** synchrono
9200: 75 73 20 73 65 74 74 69 6e 67 20 74 6f 20 45 58  us setting to EX
9210: 54 52 41 2e 20 20 49 74 20 69 73 20 6e 6f 20 6c  TRA.  It is no l
9220: 6f 6e 67 65 72 20 73 75 70 70 6f 72 74 65 64 2e  onger supported.
9230: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
9240: 45 5f 45 58 54 52 41 5f 44 55 52 41 42 4c 45 0a  E_EXTRA_DURABLE.
9250: 23 20 77 61 72 6e 69 6e 67 20 55 73 65 20 53 51  # warning Use SQ
9260: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e  LITE_DEFAULT_SYN
9270: 43 48 52 4f 4e 4f 55 53 3d 33 20 69 6e 73 74 65  CHRONOUS=3 inste
9280: 61 64 20 6f 66 20 53 51 4c 49 54 45 5f 45 58 54  ad of SQLITE_EXT
9290: 52 41 5f 44 55 52 41 42 4c 45 0a 23 20 64 65 66  RA_DURABLE.# def
92a0: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
92b0: 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 33  LT_SYNCHRONOUS 3
92c0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44  .#endif../*.** D
92d0: 65 66 61 75 6c 74 20 73 79 6e 63 68 72 6f 6e 6f  efault synchrono
92e0: 75 73 20 6c 65 76 65 6c 73 2e 0a 2a 2a 0a 2a 2a  us levels..**.**
92f0: 20 4e 6f 74 65 20 74 68 61 74 20 28 66 6f 72 20   Note that (for 
9300: 68 69 73 74 6f 72 63 61 6c 20 72 65 61 73 6f 6e  historcal reason
9310: 73 29 20 74 68 65 20 50 41 47 45 52 5f 53 59 4e  s) the PAGER_SYN
9320: 43 48 52 4f 4e 4f 55 53 5f 2a 20 6d 61 63 72 6f  CHRONOUS_* macro
9330: 73 20 64 69 66 66 65 72 0a 2a 2a 20 66 72 6f 6d  s differ.** from
9340: 20 74 68 65 20 53 51 4c 49 54 45 5f 44 45 46 41   the SQLITE_DEFA
9350: 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20  ULT_SYNCHRONOUS 
9360: 76 61 6c 75 65 20 62 79 20 31 2e 0a 2a 2a 0a 2a  value by 1..**.*
9370: 2a 20 20 20 20 20 20 20 20 20 20 20 50 41 47 45  *           PAGE
9380: 52 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 20 20  R_SYNCHRONOUS   
9390: 20 20 20 20 44 45 46 41 55 4c 54 5f 53 59 4e 43      DEFAULT_SYNC
93a0: 48 52 4f 4e 4f 55 53 0a 2a 2a 20 20 20 4f 46 46  HRONOUS.**   OFF
93b0: 20 20 20 20 20 20 20 20 20 20 20 31 20 20 20 20             1    
93c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
93d0: 20 20 20 20 20 30 0a 2a 2a 20 20 20 4e 4f 52 4d       0.**   NORM
93e0: 41 4c 20 20 20 20 20 20 20 20 32 20 20 20 20 20  AL        2     
93f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9400: 20 20 20 20 31 0a 2a 2a 20 20 20 46 55 4c 4c 20      1.**   FULL 
9410: 20 20 20 20 20 20 20 20 20 33 20 20 20 20 20 20           3      
9420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9430: 20 20 20 32 0a 2a 2a 20 20 20 45 58 54 52 41 20     2.**   EXTRA 
9440: 20 20 20 20 20 20 20 20 34 20 20 20 20 20 20 20          4       
9450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9460: 20 20 33 0a 2a 2a 0a 2a 2a 20 54 68 65 20 22 50    3.**.** The "P
9470: 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75  RAGMA synchronou
9480: 73 22 20 73 74 61 74 65 6d 65 6e 74 20 61 6c 73  s" statement als
9490: 6f 20 75 73 65 73 20 74 68 65 20 7a 65 72 6f 2d  o uses the zero-
94a0: 62 61 73 65 64 20 6e 75 6d 62 65 72 73 2e 0a 2a  based numbers..*
94b0: 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  * In other words
94c0: 2c 20 74 68 65 20 7a 65 72 6f 2d 62 61 73 65 64  , the zero-based
94d0: 20 6e 75 6d 62 65 72 73 20 61 72 65 20 75 73 65   numbers are use
94e0: 64 20 66 6f 72 20 61 6c 6c 20 65 78 74 65 72 6e  d for all extern
94f0: 61 6c 20 69 6e 74 65 72 66 61 63 65 73 0a 2a 2a  al interfaces.**
9500: 20 61 6e 64 20 74 68 65 20 6f 6e 65 2d 62 61 73   and the one-bas
9510: 65 64 20 76 61 6c 75 65 73 20 61 72 65 20 75 73  ed values are us
9520: 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 0a 2a  ed internally..*
9530: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
9540: 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f  _DEFAULT_SYNCHRO
9550: 4e 4f 55 53 0a 23 20 64 65 66 69 6e 65 20 53 51  NOUS.# define SQ
9560: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e  LITE_DEFAULT_SYN
9570: 43 48 52 4f 4e 4f 55 53 20 32 0a 23 65 6e 64 69  CHRONOUS 2.#endi
9580: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
9590: 5f 44 45 46 41 55 4c 54 5f 57 41 4c 5f 53 59 4e  _DEFAULT_WAL_SYN
95a0: 43 48 52 4f 4e 4f 55 53 0a 23 20 64 65 66 69 6e  CHRONOUS.# defin
95b0: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
95c0: 5f 57 41 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55 53  _WAL_SYNCHRONOUS
95d0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
95e0: 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 23 65 6e 64  SYNCHRONOUS.#end
95f0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64  if../*.** Each d
9600: 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20  atabase file to 
9610: 62 65 20 61 63 63 65 73 73 65 64 20 62 79 20 74  be accessed by t
9620: 68 65 20 73 79 73 74 65 6d 20 69 73 20 61 6e 20  he system is an 
9630: 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74  instance.** of t
9640: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
9650: 75 63 74 75 72 65 2e 20 20 54 68 65 72 65 20 61  ucture.  There a
9660: 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20  re normally two 
9670: 6f 66 20 74 68 65 73 65 20 73 74 72 75 63 74 75  of these structu
9680: 72 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71  res.** in the sq
9690: 6c 69 74 65 2e 61 44 62 5b 5d 20 61 72 72 61 79  lite.aDb[] array
96a0: 2e 20 20 61 44 62 5b 30 5d 20 69 73 20 74 68 65  .  aDb[0] is the
96b0: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
96c0: 69 6c 65 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31  ile and.** aDb[1
96d0: 5d 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73  ] is the databas
96e0: 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 68  e file used to h
96f0: 6f 6c 64 20 74 65 6d 70 6f 72 61 72 79 20 74 61  old temporary ta
9700: 62 6c 65 73 2e 20 20 41 64 64 69 74 69 6f 6e 61  bles.  Additiona
9710: 6c 0a 2a 2a 20 64 61 74 61 62 61 73 65 73 20 6d  l.** databases m
9720: 61 79 20 62 65 20 61 74 74 61 63 68 65 64 2e 0a  ay be attached..
9730: 2a 2f 0a 73 74 72 75 63 74 20 44 62 20 7b 0a 20  */.struct Db {. 
9740: 20 63 68 61 72 20 2a 7a 44 62 53 4e 61 6d 65 3b   char *zDbSName;
9750: 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
9760: 20 74 68 69 73 20 64 61 74 61 62 61 73 65 2e 20   this database. 
9770: 28 73 63 68 65 6d 61 20 6e 61 6d 65 2c 20 6e 6f  (schema name, no
9780: 74 20 66 69 6c 65 6e 61 6d 65 29 20 2a 2f 0a 20  t filename) */. 
9790: 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20   Btree *pBt;    
97a0: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 42 2a 54        /* The B*T
97b0: 72 65 65 20 73 74 72 75 63 74 75 72 65 20 66 6f  ree structure fo
97c0: 72 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20  r this database 
97d0: 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 73 61 66  file */.  u8 saf
97e0: 65 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20 2f  ety_level;     /
97f0: 2a 20 48 6f 77 20 61 67 67 72 65 73 73 69 76 65  * How aggressive
9800: 20 61 74 20 73 79 6e 63 69 6e 67 20 64 61 74 61   at syncing data
9810: 20 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 75 38   to disk */.  u8
9820: 20 62 53 79 6e 63 53 65 74 3b 20 20 20 20 20 20   bSyncSet;      
9830: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 22 50     /* True if "P
9840: 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75  RAGMA synchronou
9850: 73 3d 4e 22 20 68 61 73 20 62 65 65 6e 20 72 75  s=N" has been ru
9860: 6e 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  n */.  Schema *p
9870: 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 50  Schema;     /* P
9880: 6f 69 6e 74 65 72 20 74 6f 20 64 61 74 61 62 61  ointer to databa
9890: 73 65 20 73 63 68 65 6d 61 20 28 70 6f 73 73 69  se schema (possi
98a0: 62 6c 79 20 73 68 61 72 65 64 29 20 2a 2f 0a 7d  bly shared) */.}
98b0: 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  ;../*.** An inst
98c0: 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
98d0: 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
98e0: 73 74 6f 72 65 73 20 61 20 64 61 74 61 62 61 73  stores a databas
98f0: 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20  e schema..**.** 
9900: 4d 6f 73 74 20 53 63 68 65 6d 61 20 6f 62 6a 65  Most Schema obje
9910: 63 74 73 20 61 72 65 20 61 73 73 6f 63 69 61 74  cts are associat
9920: 65 64 20 77 69 74 68 20 61 20 42 74 72 65 65 2e  ed with a Btree.
9930: 20 20 54 68 65 20 65 78 63 65 70 74 69 6f 6e 20    The exception 
9940: 69 73 0a 2a 2a 20 74 68 65 20 53 63 68 65 6d 61  is.** the Schema
9950: 20 66 6f 72 20 74 68 65 20 54 45 4d 50 20 64 61   for the TEMP da
9960: 74 61 62 61 65 73 20 28 73 71 6c 69 74 65 33 2e  tabaes (sqlite3.
9970: 61 44 62 5b 31 5d 29 20 77 68 69 63 68 20 69 73  aDb[1]) which is
9980: 20 66 72 65 65 2d 73 74 61 6e 64 69 6e 67 2e 0a   free-standing..
9990: 2a 2a 20 49 6e 20 73 68 61 72 65 64 20 63 61 63  ** In shared cac
99a0: 68 65 20 6d 6f 64 65 2c 20 61 20 73 69 6e 67 6c  he mode, a singl
99b0: 65 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 20  e Schema object 
99c0: 63 61 6e 20 62 65 20 73 68 61 72 65 64 20 62 79  can be shared by
99d0: 20 6d 75 6c 74 69 70 6c 65 0a 2a 2a 20 42 74 72   multiple.** Btr
99e0: 65 65 73 20 74 68 61 74 20 72 65 66 65 72 20 74  ees that refer t
99f0: 6f 20 74 68 65 20 73 61 6d 65 20 75 6e 64 65 72  o the same under
9a00: 6c 79 69 6e 67 20 42 74 53 68 61 72 65 64 20 6f  lying BtShared o
9a10: 62 6a 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 53 63 68  bject..**.** Sch
9a20: 65 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20  ema objects are 
9a30: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65  automatically de
9a40: 61 6c 6c 6f 63 61 74 65 64 20 77 68 65 6e 20 74  allocated when t
9a50: 68 65 20 6c 61 73 74 20 42 74 72 65 65 20 74 68  he last Btree th
9a60: 61 74 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 73  at.** references
9a70: 20 74 68 65 6d 20 69 73 20 64 65 73 74 72 6f 79   them is destroy
9a80: 65 64 2e 20 20 20 54 68 65 20 54 45 4d 50 20 53  ed.   The TEMP S
9a90: 63 68 65 6d 61 20 69 73 20 6d 61 6e 75 61 6c 6c  chema is manuall
9aa0: 79 20 66 72 65 65 64 20 62 79 0a 2a 2a 20 73 71  y freed by.** sq
9ab0: 6c 69 74 65 33 5f 63 6c 6f 73 65 28 29 2e 0a 2a  lite3_close()..*
9ac0: 0a 2a 2a 20 41 20 74 68 72 65 61 64 20 6d 75 73  .** A thread mus
9ad0: 74 20 62 65 20 68 6f 6c 64 69 6e 67 20 61 20 6d  t be holding a m
9ae0: 75 74 65 78 20 6f 6e 20 74 68 65 20 63 6f 72 72  utex on the corr
9af0: 65 73 70 6f 6e 64 69 6e 67 20 42 74 72 65 65 20  esponding Btree 
9b00: 69 6e 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 61  in order.** to a
9b10: 63 63 65 73 73 20 53 63 68 65 6d 61 20 63 6f 6e  ccess Schema con
9b20: 74 65 6e 74 2e 20 20 54 68 69 73 20 69 6d 70 6c  tent.  This impl
9b30: 69 65 73 20 74 68 61 74 20 74 68 65 20 74 68 72  ies that the thr
9b40: 65 61 64 20 6d 75 73 74 20 61 6c 73 6f 20 62 65  ead must also be
9b50: 0a 2a 2a 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75  .** holding a mu
9b60: 74 65 78 20 6f 6e 20 74 68 65 20 73 71 6c 69 74  tex on the sqlit
9b70: 65 33 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f  e3 connection po
9b80: 69 6e 74 65 72 20 74 68 61 74 20 6f 77 6e 73 20  inter that owns 
9b90: 74 68 65 20 42 74 72 65 65 2e 0a 2a 2a 20 46 6f  the Btree..** Fo
9ba0: 72 20 61 20 54 45 4d 50 20 53 63 68 65 6d 61 2c  r a TEMP Schema,
9bb0: 20 6f 6e 6c 79 20 74 68 65 20 63 6f 6e 6e 65 63   only the connec
9bc0: 74 69 6f 6e 20 6d 75 74 65 78 20 69 73 20 72 65  tion mutex is re
9bd0: 71 75 69 72 65 64 2e 0a 2a 2f 0a 73 74 72 75 63  quired..*/.struc
9be0: 74 20 53 63 68 65 6d 61 20 7b 0a 20 20 69 6e 74  t Schema {.  int
9bf0: 20 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20   schema_cookie; 
9c00: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 73 63    /* Database sc
9c10: 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d  hema version num
9c20: 62 65 72 20 66 6f 72 20 74 68 69 73 20 66 69 6c  ber for this fil
9c30: 65 20 2a 2f 0a 20 20 69 6e 74 20 69 47 65 6e 65  e */.  int iGene
9c40: 72 61 74 69 6f 6e 3b 20 20 20 20 20 2f 2a 20 47  ration;     /* G
9c50: 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65  eneration counte
9c60: 72 2e 20 20 49 6e 63 72 65 6d 65 6e 74 65 64 20  r.  Incremented 
9c70: 77 69 74 68 20 65 61 63 68 20 63 68 61 6e 67 65  with each change
9c80: 20 2a 2f 0a 20 20 48 61 73 68 20 74 62 6c 48 61   */.  Hash tblHa
9c90: 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c  sh;        /* Al
9ca0: 6c 20 74 61 62 6c 65 73 20 69 6e 64 65 78 65 64  l tables indexed
9cb0: 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61   by name */.  Ha
9cc0: 73 68 20 69 64 78 48 61 73 68 3b 20 20 20 20 20  sh idxHash;     
9cd0: 20 20 20 2f 2a 20 41 6c 6c 20 28 6e 61 6d 65 64     /* All (named
9ce0: 29 20 69 6e 64 69 63 65 73 20 69 6e 64 65 78 65  ) indices indexe
9cf0: 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48  d by name */.  H
9d00: 61 73 68 20 74 72 69 67 48 61 73 68 3b 20 20 20  ash trigHash;   
9d10: 20 20 20 20 2f 2a 20 41 6c 6c 20 74 72 69 67 67      /* All trigg
9d20: 65 72 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e  ers indexed by n
9d30: 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 66 6b  ame */.  Hash fk
9d40: 65 79 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a  eyHash;       /*
9d50: 20 41 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79   All foreign key
9d60: 73 20 62 79 20 72 65 66 65 72 65 6e 63 65 64 20  s by referenced 
9d70: 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20  table name */.  
9d80: 54 61 62 6c 65 20 2a 70 53 65 71 54 61 62 3b 20  Table *pSeqTab; 
9d90: 20 20 20 20 20 2f 2a 20 54 68 65 20 73 71 6c 69       /* The sqli
9da0: 74 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c  te_sequence tabl
9db0: 65 20 75 73 65 64 20 62 79 20 41 55 54 4f 49 4e  e used by AUTOIN
9dc0: 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 75 38 20  CREMENT */.  u8 
9dd0: 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20  file_format;    
9de0: 20 20 2f 2a 20 53 63 68 65 6d 61 20 66 6f 72 6d    /* Schema form
9df0: 61 74 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 74  at version for t
9e00: 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38  his file */.  u8
9e10: 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20   enc;           
9e20: 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64     /* Text encod
9e30: 69 6e 67 20 75 73 65 64 20 62 79 20 74 68 69 73  ing used by this
9e40: 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75   database */.  u
9e50: 31 36 20 73 63 68 65 6d 61 46 6c 61 67 73 3b 20  16 schemaFlags; 
9e60: 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 61 73 73      /* Flags ass
9e70: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69  ociated with thi
9e80: 73 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e  s schema */.  in
9e90: 74 20 63 61 63 68 65 5f 73 69 7a 65 3b 20 20 20  t cache_size;   
9ea0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
9eb0: 70 61 67 65 73 20 74 6f 20 75 73 65 20 69 6e 20  pages to use in 
9ec0: 74 68 65 20 63 61 63 68 65 20 2a 2f 0a 7d 3b 0a  the cache */.};.
9ed0: 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63  ./*.** These mac
9ee0: 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64 20  ros can be used 
9ef0: 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72  to test, set, or
9f00: 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74   clear bits in t
9f10: 68 65 0a 2a 2a 20 44 62 2e 70 53 63 68 65 6d 61  he.** Db.pSchema
9f20: 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  ->flags field..*
9f30: 2f 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73 50  /.#define DbHasP
9f40: 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20  roperty(D,I,P)  
9f50: 20 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d     (((D)->aDb[I]
9f60: 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61  .pSchema->schema
9f70: 46 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29  Flags&(P))==(P))
9f80: 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73 41 6e  .#define DbHasAn
9f90: 79 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29  yProperty(D,I,P)
9fa0: 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e    (((D)->aDb[I].
9fb0: 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46  pSchema->schemaF
9fc0: 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64  lags&(P))!=0).#d
9fd0: 65 66 69 6e 65 20 44 62 53 65 74 50 72 6f 70 65  efine DbSetPrope
9fe0: 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28  rty(D,I,P)     (
9ff0: 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65  D)->aDb[I].pSche
a000: 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 7c  ma->schemaFlags|
a010: 3d 28 50 29 0a 23 64 65 66 69 6e 65 20 44 62 43  =(P).#define DbC
a020: 6c 65 61 72 50 72 6f 70 65 72 74 79 28 44 2c 49  learProperty(D,I
a030: 2c 50 29 20 20 20 28 44 29 2d 3e 61 44 62 5b 49  ,P)   (D)->aDb[I
a040: 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d  ].pSchema->schem
a050: 61 46 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a  aFlags&=~(P)../*
a060: 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
a070: 65 73 20 66 6f 72 20 74 68 65 20 44 42 2e 70 53  es for the DB.pS
a080: 63 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65  chema->flags fie
a090: 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 44 42  ld..**.** The DB
a0a0: 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 66 6c  _SchemaLoaded fl
a0b0: 61 67 20 69 73 20 73 65 74 20 61 66 74 65 72 20  ag is set after 
a0c0: 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
a0d0: 65 6d 61 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20  ema has been.** 
a0e0: 72 65 61 64 20 69 6e 74 6f 20 69 6e 74 65 72 6e  read into intern
a0f0: 61 6c 20 68 61 73 68 20 74 61 62 6c 65 73 2e 0a  al hash tables..
a100: 2a 2a 0a 2a 2a 20 44 42 5f 55 6e 72 65 73 65 74  **.** DB_Unreset
a110: 56 69 65 77 73 20 6d 65 61 6e 73 20 74 68 61 74  Views means that
a120: 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 76 69 65   one or more vie
a130: 77 73 20 68 61 76 65 20 63 6f 6c 75 6d 6e 20 6e  ws have column n
a140: 61 6d 65 73 20 74 68 61 74 0a 2a 2a 20 68 61 76  ames that.** hav
a150: 65 20 62 65 65 6e 20 66 69 6c 6c 65 64 20 6f 75  e been filled ou
a160: 74 2e 20 20 49 66 20 74 68 65 20 73 63 68 65 6d  t.  If the schem
a170: 61 20 63 68 61 6e 67 65 73 2c 20 74 68 65 73 65  a changes, these
a180: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6d 69   column names mi
a190: 67 68 74 0a 2a 2a 20 63 68 61 6e 67 65 73 20 61  ght.** changes a
a1a0: 6e 64 20 73 6f 20 74 68 65 20 76 69 65 77 20 77  nd so the view w
a1b0: 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62 65 20 72  ill need to be r
a1c0: 65 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  eset..*/.#define
a1d0: 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64   DB_SchemaLoaded
a1e0: 20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 54      0x0001  /* T
a1f0: 68 65 20 73 63 68 65 6d 61 20 68 61 73 20 62 65  he schema has be
a200: 65 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a 23 64 65  en loaded */.#de
a210: 66 69 6e 65 20 44 42 5f 55 6e 72 65 73 65 74 56  fine DB_UnresetV
a220: 69 65 77 73 20 20 20 20 30 78 30 30 30 32 20 20  iews    0x0002  
a230: 2f 2a 20 53 6f 6d 65 20 76 69 65 77 73 20 68 61  /* Some views ha
a240: 76 65 20 64 65 66 69 6e 65 64 20 63 6f 6c 75 6d  ve defined colum
a250: 6e 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69  n names */.#defi
a260: 6e 65 20 44 42 5f 45 6d 70 74 79 20 20 20 20 20  ne DB_Empty     
a270: 20 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a        0x0004  /*
a280: 20 54 68 65 20 66 69 6c 65 20 69 73 20 65 6d 70   The file is emp
a290: 74 79 20 28 6c 65 6e 67 74 68 20 30 20 62 79 74  ty (length 0 byt
a2a0: 65 73 29 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68  es) */../*.** Th
a2b0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 66 66  e number of diff
a2c0: 65 72 65 6e 74 20 6b 69 6e 64 73 20 6f 66 20 74  erent kinds of t
a2d0: 68 69 6e 67 73 20 74 68 61 74 20 63 61 6e 20 62  hings that can b
a2e0: 65 20 6c 69 6d 69 74 65 64 0a 2a 2a 20 75 73 69  e limited.** usi
a2f0: 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f 6c  ng the sqlite3_l
a300: 69 6d 69 74 28 29 20 69 6e 74 65 72 66 61 63 65  imit() interface
a310: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
a320: 49 54 45 5f 4e 5f 4c 49 4d 49 54 20 28 53 51 4c  ITE_N_LIMIT (SQL
a330: 49 54 45 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45 52  ITE_LIMIT_WORKER
a340: 5f 54 48 52 45 41 44 53 2b 31 29 0a 0a 2f 2a 0a  _THREADS+1)../*.
a350: 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c  ** Lookaside mal
a360: 6c 6f 63 20 69 73 20 61 20 73 65 74 20 6f 66 20  loc is a set of 
a370: 66 69 78 65 64 2d 73 69 7a 65 20 62 75 66 66 65  fixed-size buffe
a380: 72 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 75  rs that can be u
a390: 73 65 64 0a 2a 2a 20 74 6f 20 73 61 74 69 73 66  sed.** to satisf
a3a0: 79 20 73 6d 61 6c 6c 20 74 72 61 6e 73 69 65 6e  y small transien
a3b0: 74 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  t memory allocat
a3c0: 69 6f 6e 20 72 65 71 75 65 73 74 73 20 66 6f 72  ion requests for
a3d0: 20 6f 62 6a 65 63 74 73 0a 2a 2a 20 61 73 73 6f   objects.** asso
a3e0: 63 69 61 74 65 64 20 77 69 74 68 20 61 20 70 61  ciated with a pa
a3f0: 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61 73  rticular databas
a400: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54  e connection.  T
a410: 68 65 20 75 73 65 20 6f 66 0a 2a 2a 20 6c 6f 6f  he use of.** loo
a420: 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 70 72  kaside malloc pr
a430: 6f 76 69 64 65 73 20 61 20 73 69 67 6e 69 66 69  ovides a signifi
a440: 63 61 6e 74 20 70 65 72 66 6f 72 6d 61 6e 63 65  cant performance
a450: 20 65 6e 68 61 6e 63 65 6d 65 6e 74 0a 2a 2a 20   enhancement.** 
a460: 28 61 70 70 72 6f 78 20 31 30 25 29 20 62 79 20  (approx 10%) by 
a470: 61 76 6f 69 64 69 6e 67 20 6e 75 6d 65 72 6f 75  avoiding numerou
a480: 73 20 6d 61 6c 6c 6f 63 2f 66 72 65 65 20 72 65  s malloc/free re
a490: 71 75 65 73 74 73 20 77 68 69 6c 65 20 70 61 72  quests while par
a4a0: 73 69 6e 67 0a 2a 2a 20 53 51 4c 20 73 74 61 74  sing.** SQL stat
a4b0: 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  ements..**.** Th
a4c0: 65 20 4c 6f 6f 6b 61 73 69 64 65 20 73 74 72 75  e Lookaside stru
a4d0: 63 74 75 72 65 20 68 6f 6c 64 73 20 63 6f 6e 66  cture holds conf
a4e0: 69 67 75 72 61 74 69 6f 6e 20 69 6e 66 6f 72 6d  iguration inform
a4f0: 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 0a  ation about the.
a500: 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c  ** lookaside mal
a510: 6c 6f 63 20 73 75 62 73 79 73 74 65 6d 2e 20 20  loc subsystem.  
a520: 45 61 63 68 20 61 76 61 69 6c 61 62 6c 65 20 6d  Each available m
a530: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
a540: 20 69 6e 0a 2a 2a 20 74 68 65 20 6c 6f 6f 6b 61   in.** the looka
a550: 73 69 64 65 20 73 75 62 73 79 73 74 65 6d 20 69  side subsystem i
a560: 73 20 73 74 6f 72 65 64 20 6f 6e 20 61 20 6c 69  s stored on a li
a570: 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 4c 6f 6f  nked list of Loo
a580: 6b 61 73 69 64 65 53 6c 6f 74 0a 2a 2a 20 6f 62  kasideSlot.** ob
a590: 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f  jects..**.** Loo
a5a0: 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f  kaside allocatio
a5b0: 6e 73 20 61 72 65 20 6f 6e 6c 79 20 61 6c 6c 6f  ns are only allo
a5c0: 77 65 64 20 66 6f 72 20 6f 62 6a 65 63 74 73 20  wed for objects 
a5d0: 74 68 61 74 20 61 72 65 20 61 73 73 6f 63 69 61  that are associa
a5e0: 74 65 64 0a 2a 2a 20 77 69 74 68 20 61 20 70 61  ted.** with a pa
a5f0: 72 74 69 63 75 6c 61 72 20 64 61 74 61 62 61 73  rticular databas
a600: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 48  e connection.  H
a610: 65 6e 63 65 2c 20 73 63 68 65 6d 61 20 69 6e 66  ence, schema inf
a620: 6f 72 6d 61 74 69 6f 6e 20 63 61 6e 6e 6f 74 0a  ormation cannot.
a630: 2a 2a 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20  ** be stored in 
a640: 6c 6f 6f 6b 61 73 69 64 65 20 62 65 63 61 75 73  lookaside becaus
a650: 65 20 69 6e 20 73 68 61 72 65 64 20 63 61 63 68  e in shared cach
a660: 65 20 6d 6f 64 65 20 74 68 65 20 73 63 68 65 6d  e mode the schem
a670: 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a  a information.**
a680: 20 69 73 20 73 68 61 72 65 64 20 62 79 20 6d 75   is shared by mu
a690: 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73 65 20  ltiple database 
a6a0: 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 20 20 54 68  connections.  Th
a6b0: 65 72 65 66 6f 72 65 2c 20 77 68 69 6c 65 20 70  erefore, while p
a6c0: 61 72 73 69 6e 67 0a 2a 2a 20 73 63 68 65 6d 61  arsing.** schema
a6d0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68   information, th
a6e0: 65 20 4c 6f 6f 6b 61 73 69 64 65 2e 62 45 6e 61  e Lookaside.bEna
a6f0: 62 6c 65 64 20 66 6c 61 67 20 69 73 20 63 6c 65  bled flag is cle
a700: 61 72 65 64 20 73 6f 20 74 68 61 74 0a 2a 2a 20  ared so that.** 
a710: 6c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61  lookaside alloca
a720: 74 69 6f 6e 73 20 61 72 65 20 6e 6f 74 20 75 73  tions are not us
a730: 65 64 20 74 6f 20 63 6f 6e 73 74 72 75 63 74 20  ed to construct 
a740: 74 68 65 20 73 63 68 65 6d 61 20 6f 62 6a 65 63  the schema objec
a750: 74 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4c 6f  ts..*/.struct Lo
a760: 6f 6b 61 73 69 64 65 20 7b 0a 20 20 75 33 32 20  okaside {.  u32 
a770: 62 44 69 73 61 62 6c 65 3b 20 20 20 20 20 20 20  bDisable;       
a780: 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 6f 70 65 72      /* Only oper
a790: 61 74 65 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64  ate the lookasid
a7a0: 65 20 77 68 65 6e 20 7a 65 72 6f 20 2a 2f 0a 20  e when zero */. 
a7b0: 20 75 31 36 20 73 7a 3b 20 20 20 20 20 20 20 20   u16 sz;        
a7c0: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
a7d0: 20 6f 66 20 65 61 63 68 20 62 75 66 66 65 72 20   of each buffer 
a7e0: 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75 38  in bytes */.  u8
a7f0: 20 62 4d 61 6c 6c 6f 63 65 64 3b 20 20 20 20 20   bMalloced;     
a800: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
a810: 20 70 53 74 61 72 74 20 6f 62 74 61 69 6e 65 64   pStart obtained
a820: 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61   from sqlite3_ma
a830: 6c 6c 6f 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20  lloc() */.  int 
a840: 6e 4f 75 74 3b 20 20 20 20 20 20 20 20 20 20 20  nOut;           
a850: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
a860: 20 62 75 66 66 65 72 73 20 63 75 72 72 65 6e 74   buffers current
a870: 6c 79 20 63 68 65 63 6b 65 64 20 6f 75 74 20 2a  ly checked out *
a880: 2f 0a 20 20 69 6e 74 20 6d 78 4f 75 74 3b 20 20  /.  int mxOut;  
a890: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48              /* H
a8a0: 69 67 68 77 61 74 65 72 20 6d 61 72 6b 20 66 6f  ighwater mark fo
a8b0: 72 20 6e 4f 75 74 20 2a 2f 0a 20 20 69 6e 74 20  r nOut */.  int 
a8c0: 61 6e 53 74 61 74 5b 33 5d 3b 20 20 20 20 20 20  anStat[3];      
a8d0: 20 20 20 20 2f 2a 20 30 3a 20 68 69 74 73 2e 20      /* 0: hits. 
a8e0: 20 31 3a 20 73 69 7a 65 20 6d 69 73 73 65 73 2e   1: size misses.
a8f0: 20 20 32 3a 20 66 75 6c 6c 20 6d 69 73 73 65 73    2: full misses
a900: 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53   */.  LookasideS
a910: 6c 6f 74 20 2a 70 46 72 65 65 3b 20 20 20 2f 2a  lot *pFree;   /*
a920: 20 4c 69 73 74 20 6f 66 20 61 76 61 69 6c 61 62   List of availab
a930: 6c 65 20 62 75 66 66 65 72 73 20 2a 2f 0a 20 20  le buffers */.  
a940: 76 6f 69 64 20 2a 70 53 74 61 72 74 3b 20 20 20  void *pStart;   
a950: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
a960: 20 62 79 74 65 20 6f 66 20 61 76 61 69 6c 61 62   byte of availab
a970: 6c 65 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20  le memory space 
a980: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 45 6e 64 3b  */.  void *pEnd;
a990: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a9a0: 46 69 72 73 74 20 62 79 74 65 20 70 61 73 74 20  First byte past 
a9b0: 65 6e 64 20 6f 66 20 61 76 61 69 6c 61 62 6c 65  end of available
a9c0: 20 73 70 61 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72   space */.};.str
a9d0: 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f  uct LookasideSlo
a9e0: 74 20 7b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53  t {.  LookasideS
a9f0: 6c 6f 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 2f  lot *pNext;    /
aa00: 2a 20 4e 65 78 74 20 62 75 66 66 65 72 20 69 6e  * Next buffer in
aa10: 20 74 68 65 20 6c 69 73 74 20 6f 66 20 66 72 65   the list of fre
aa20: 65 20 62 75 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a  e buffers */.};.
aa30: 0a 2f 2a 0a 2a 2a 20 41 20 68 61 73 68 20 74 61  ./*.** A hash ta
aa40: 62 6c 65 20 66 6f 72 20 62 75 69 6c 74 2d 69 6e  ble for built-in
aa50: 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69   function defini
aa60: 74 69 6f 6e 73 2e 20 20 28 41 70 70 6c 69 63 61  tions.  (Applica
aa70: 74 69 6f 6e 2d 64 65 66 69 6e 65 64 0a 2a 2a 20  tion-defined.** 
aa80: 66 75 6e 63 74 69 6f 6e 73 20 75 73 65 20 61 20  functions use a 
aa90: 72 65 67 75 6c 61 72 20 74 61 62 6c 65 20 74 61  regular table ta
aaa0: 62 6c 65 20 66 72 6f 6d 20 68 61 73 68 2e 68 2e  ble from hash.h.
aab0: 29 0a 2a 2a 0a 2a 2a 20 48 61 73 68 20 65 61 63  ).**.** Hash eac
aac0: 68 20 46 75 6e 63 44 65 66 20 73 74 72 75 63 74  h FuncDef struct
aad0: 75 72 65 20 69 6e 74 6f 20 6f 6e 65 20 6f 66 20  ure into one of 
aae0: 74 68 65 20 46 75 6e 63 44 65 66 48 61 73 68 2e  the FuncDefHash.
aaf0: 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a 2a 20 43 6f  a[] slots..** Co
ab00: 6c 6c 69 73 69 6f 6e 73 20 61 72 65 20 6f 6e 20  llisions are on 
ab10: 74 68 65 20 46 75 6e 63 44 65 66 2e 75 2e 70 48  the FuncDef.u.pH
ab20: 61 73 68 20 63 68 61 69 6e 2e 0a 2a 2f 0a 23 64  ash chain..*/.#d
ab30: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
ab40: 43 5f 48 41 53 48 5f 53 5a 20 32 33 0a 73 74 72  C_HASH_SZ 23.str
ab50: 75 63 74 20 46 75 6e 63 44 65 66 48 61 73 68 20  uct FuncDefHash 
ab60: 7b 0a 20 20 46 75 6e 63 44 65 66 20 2a 61 5b 53  {.  FuncDef *a[S
ab70: 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 5f  QLITE_FUNC_HASH_
ab80: 53 5a 5d 3b 20 20 20 20 20 20 20 2f 2a 20 48 61  SZ];       /* Ha
ab90: 73 68 20 74 61 62 6c 65 20 66 6f 72 20 66 75 6e  sh table for fun
aba0: 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 23 69  ctions */.};..#i
abb0: 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45 52  fdef SQLITE_USER
abc0: 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a  _AUTHENTICATION.
abd0: 2f 2a 0a 2a 2a 20 49 6e 66 6f 72 6d 61 74 69 6f  /*.** Informatio
abe0: 6e 20 68 65 6c 64 20 69 6e 20 74 68 65 20 22 73  n held in the "s
abf0: 71 6c 69 74 65 33 22 20 64 61 74 61 62 61 73 65  qlite3" database
ac00: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65   connection obje
ac10: 63 74 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74  ct and used.** t
ac20: 6f 20 6d 61 6e 61 67 65 20 75 73 65 72 20 61 75  o manage user au
ac30: 74 68 65 6e 74 69 63 61 74 69 6f 6e 2e 0a 2a 2f  thentication..*/
ac40: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
ac50: 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68  sqlite3_userauth
ac60: 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74   sqlite3_useraut
ac70: 68 3b 0a 73 74 72 75 63 74 20 73 71 6c 69 74 65  h;.struct sqlite
ac80: 33 5f 75 73 65 72 61 75 74 68 20 7b 0a 20 20 75  3_userauth {.  u
ac90: 38 20 61 75 74 68 4c 65 76 65 6c 3b 20 20 20 20  8 authLevel;    
aca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
acb0: 43 75 72 72 65 6e 74 20 61 75 74 68 65 6e 74 69  Current authenti
acc0: 63 61 74 69 6f 6e 20 6c 65 76 65 6c 20 2a 2f 0a  cation level */.
acd0: 20 20 69 6e 74 20 6e 41 75 74 68 50 57 3b 20 20    int nAuthPW;  
ace0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
acf0: 2f 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 7a  /* Size of the z
ad00: 41 75 74 68 50 57 20 69 6e 20 62 79 74 65 73 20  AuthPW in bytes 
ad10: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75 74 68  */.  char *zAuth
ad20: 50 57 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  PW;             
ad30: 20 20 20 2f 2a 20 50 61 73 73 77 6f 72 64 20 75     /* Password u
ad40: 73 65 64 20 74 6f 20 61 75 74 68 65 6e 74 69 63  sed to authentic
ad50: 61 74 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ate */.  char *z
ad60: 41 75 74 68 55 73 65 72 3b 20 20 20 20 20 20 20  AuthUser;       
ad70: 20 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20 6e         /* User n
ad80: 61 6d 65 20 75 73 65 64 20 74 6f 20 61 75 74 68  ame used to auth
ad90: 65 6e 74 69 63 61 74 65 20 2a 2f 0a 7d 3b 0a 0a  enticate */.};..
ada0: 2f 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  /* Allowed value
adb0: 73 20 66 6f 72 20 73 71 6c 69 74 65 33 5f 75 73  s for sqlite3_us
adc0: 65 72 61 75 74 68 2e 61 75 74 68 4c 65 76 65 6c  erauth.authLevel
add0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54   */.#define UAUT
ade0: 48 5f 55 6e 6b 6e 6f 77 6e 20 20 20 20 20 30 20  H_Unknown     0 
adf0: 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63      /* Authentic
ae00: 61 74 69 6f 6e 20 6e 6f 74 20 79 65 74 20 63 68  ation not yet ch
ae10: 65 63 6b 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  ecked */.#define
ae20: 20 55 41 55 54 48 5f 46 61 69 6c 20 20 20 20 20   UAUTH_Fail     
ae30: 20 20 20 31 20 20 20 20 20 2f 2a 20 55 73 65 72     1     /* User
ae40: 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20   authentication 
ae50: 66 61 69 6c 65 64 20 2a 2f 0a 23 64 65 66 69 6e  failed */.#defin
ae60: 65 20 55 41 55 54 48 5f 55 73 65 72 20 20 20 20  e UAUTH_User    
ae70: 20 20 20 20 32 20 20 20 20 20 2f 2a 20 41 75 74      2     /* Aut
ae80: 68 65 6e 74 69 63 61 74 65 64 20 61 73 20 61 20  henticated as a 
ae90: 6e 6f 72 6d 61 6c 20 75 73 65 72 20 2a 2f 0a 23  normal user */.#
aea0: 64 65 66 69 6e 65 20 55 41 55 54 48 5f 41 64 6d  define UAUTH_Adm
aeb0: 69 6e 20 20 20 20 20 20 20 33 20 20 20 20 20 2f  in       3     /
aec0: 2a 20 41 75 74 68 65 6e 74 69 63 61 74 65 64 20  * Authenticated 
aed0: 61 73 20 61 6e 20 61 64 6d 69 6e 69 73 74 72 61  as an administra
aee0: 74 6f 72 20 2a 2f 0a 0a 2f 2a 20 46 75 6e 63 74  tor */../* Funct
aef0: 69 6f 6e 73 20 75 73 65 64 20 6f 6e 6c 79 20 62  ions used only b
af00: 79 20 75 73 65 72 20 61 75 74 68 6f 72 69 7a 61  y user authoriza
af10: 74 69 6f 6e 20 6c 6f 67 69 63 20 2a 2f 0a 69 6e  tion logic */.in
af20: 74 20 73 71 6c 69 74 65 33 55 73 65 72 41 75 74  t sqlite3UserAut
af30: 68 54 61 62 6c 65 28 63 6f 6e 73 74 20 63 68 61  hTable(const cha
af40: 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
af50: 55 73 65 72 41 75 74 68 43 68 65 63 6b 4c 6f 67  UserAuthCheckLog
af60: 69 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  in(sqlite3*,cons
af70: 74 20 63 68 61 72 2a 2c 75 38 2a 29 3b 0a 76 6f  t char*,u8*);.vo
af80: 69 64 20 73 71 6c 69 74 65 33 55 73 65 72 41 75  id sqlite3UserAu
af90: 74 68 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 29  thInit(sqlite3*)
afa0: 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72  ;.void sqlite3Cr
afb0: 79 70 74 46 75 6e 63 28 73 71 6c 69 74 65 33 5f  yptFunc(sqlite3_
afc0: 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
afd0: 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 0a  ite3_value**);..
afe0: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
aff0: 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41  _USER_AUTHENTICA
b000: 54 49 4f 4e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 74  TION */../*.** t
b010: 79 70 65 64 65 66 20 66 6f 72 20 74 68 65 20 61  ypedef for the a
b020: 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 63 61 6c  uthorization cal
b030: 6c 62 61 63 6b 20 66 75 6e 63 74 69 6f 6e 2e 0a  lback function..
b040: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
b050: 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41  _USER_AUTHENTICA
b060: 54 49 4f 4e 0a 20 20 74 79 70 65 64 65 66 20 69  TION.  typedef i
b070: 6e 74 20 28 2a 73 71 6c 69 74 65 33 5f 78 61 75  nt (*sqlite3_xau
b080: 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f  th)(void*,int,co
b090: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
b0a0: 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
b0b0: 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
b0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b0d0: 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63    const char*, c
b0e0: 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6c  onst char*);.#el
b0f0: 73 65 0a 20 20 74 79 70 65 64 65 66 20 69 6e 74  se.  typedef int
b100: 20 28 2a 73 71 6c 69 74 65 33 5f 78 61 75 74 68   (*sqlite3_xauth
b110: 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73  )(void*,int,cons
b120: 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
b130: 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ar*,const char*,
b140: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b160: 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65  const char*);.#e
b170: 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
b180: 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43  LITE_OMIT_DEPREC
b190: 41 54 45 44 0a 2f 2a 20 54 68 69 73 20 69 73 20  ATED./* This is 
b1a0: 61 6e 20 65 78 74 72 61 20 53 51 4c 49 54 45 5f  an extra SQLITE_
b1b0: 54 52 41 43 45 20 6d 61 63 72 6f 20 74 68 61 74  TRACE macro that
b1c0: 20 69 6e 64 69 63 61 74 65 73 20 22 6c 65 67 61   indicates "lega
b1d0: 63 79 22 20 74 72 61 63 69 6e 67 0a 2a 2a 20 69  cy" tracing.** i
b1e0: 6e 20 74 68 65 20 73 74 79 6c 65 20 6f 66 20 73  n the style of s
b1f0: 71 6c 69 74 65 33 5f 74 72 61 63 65 28 29 0a 2a  qlite3_trace().*
b200: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
b210: 5f 54 52 41 43 45 5f 4c 45 47 41 43 59 20 20 30  _TRACE_LEGACY  0
b220: 78 38 30 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e  x80.#else.#defin
b230: 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 4c  e SQLITE_TRACE_L
b240: 45 47 41 43 59 20 20 30 0a 23 65 6e 64 69 66 20  EGACY  0.#endif 
b250: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44  /* SQLITE_OMIT_D
b260: 45 50 52 45 43 41 54 45 44 20 2a 2f 0a 0a 0a 2f  EPRECATED */.../
b270: 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61  *.** Each databa
b280: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73  se connection is
b290: 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   an instance of 
b2a0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
b2b0: 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75  ructure..*/.stru
b2c0: 63 74 20 73 71 6c 69 74 65 33 20 7b 0a 20 20 73  ct sqlite3 {.  s
b2d0: 71 6c 69 74 65 33 5f 76 66 73 20 2a 70 56 66 73  qlite3_vfs *pVfs
b2e0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
b2f0: 4f 53 20 49 6e 74 65 72 66 61 63 65 20 2a 2f 0a  OS Interface */.
b300: 20 20 73 74 72 75 63 74 20 56 64 62 65 20 2a 70    struct Vdbe *p
b310: 56 64 62 65 3b 20 20 20 20 20 20 20 20 20 20 20  Vdbe;           
b320: 2f 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76  /* List of activ
b330: 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  e virtual machin
b340: 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20  es */.  CollSeq 
b350: 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20 20 20 20 20  *pDfltColl;     
b360: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66        /* The def
b370: 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6e 67 20 73  ault collating s
b380: 65 71 75 65 6e 63 65 20 28 42 49 4e 41 52 59 29  equence (BINARY)
b390: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75   */.  sqlite3_mu
b3a0: 74 65 78 20 2a 6d 75 74 65 78 3b 20 20 20 20 20  tex *mutex;     
b3b0: 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f      /* Connectio
b3c0: 6e 20 6d 75 74 65 78 20 2a 2f 0a 20 20 44 62 20  n mutex */.  Db 
b3d0: 2a 61 44 62 3b 20 20 20 20 20 20 20 20 20 20 20  *aDb;           
b3e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
b3f0: 6c 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20  l backends */.  
b400: 69 6e 74 20 6e 44 62 3b 20 20 20 20 20 20 20 20  int nDb;        
b410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b420: 20 4e 75 6d 62 65 72 20 6f 66 20 62 61 63 6b 65   Number of backe
b430: 6e 64 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  nds currently in
b440: 20 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 66 6c   use */.  int fl
b450: 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
b460: 20 20 20 20 20 20 20 20 2f 2a 20 4d 69 73 63 65          /* Misce
b470: 6c 6c 61 6e 65 6f 75 73 20 66 6c 61 67 73 2e 20  llaneous flags. 
b480: 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 69  See below */.  i
b490: 36 34 20 6c 61 73 74 52 6f 77 69 64 3b 20 20 20  64 lastRowid;   
b4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b4b0: 52 4f 57 49 44 20 6f 66 20 6d 6f 73 74 20 72 65  ROWID of most re
b4c0: 63 65 6e 74 20 69 6e 73 65 72 74 20 28 73 65 65  cent insert (see
b4d0: 20 61 62 6f 76 65 29 20 2a 2f 0a 20 20 69 36 34   above) */.  i64
b4e0: 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20   szMmap;        
b4f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
b500: 66 61 75 6c 74 20 6d 6d 61 70 5f 73 69 7a 65 20  fault mmap_size 
b510: 73 65 74 74 69 6e 67 20 2a 2f 0a 20 20 75 6e 73  setting */.  uns
b520: 69 67 6e 65 64 20 69 6e 74 20 6f 70 65 6e 46 6c  igned int openFl
b530: 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 46 6c  ags;       /* Fl
b540: 61 67 73 20 70 61 73 73 65 64 20 74 6f 20 73 71  ags passed to sq
b550: 6c 69 74 65 33 5f 76 66 73 2e 78 4f 70 65 6e 28  lite3_vfs.xOpen(
b560: 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 43 6f  ) */.  int errCo
b570: 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  de;             
b580: 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65 63       /* Most rec
b590: 65 6e 74 20 65 72 72 6f 72 20 63 6f 64 65 20 28  ent error code (
b5a0: 53 51 4c 49 54 45 5f 2a 29 20 2a 2f 0a 20 20 69  SQLITE_*) */.  i
b5b0: 6e 74 20 65 72 72 4d 61 73 6b 3b 20 20 20 20 20  nt errMask;     
b5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b5d0: 26 20 72 65 73 75 6c 74 20 63 6f 64 65 73 20 77  & result codes w
b5e0: 69 74 68 20 74 68 69 73 20 62 65 66 6f 72 65 20  ith this before 
b5f0: 72 65 74 75 72 6e 69 6e 67 20 2a 2f 0a 20 20 69  returning */.  i
b600: 6e 74 20 69 53 79 73 45 72 72 6e 6f 3b 20 20 20  nt iSysErrno;   
b610: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b620: 45 72 72 6e 6f 20 76 61 6c 75 65 20 66 72 6f 6d  Errno value from
b630: 20 6c 61 73 74 20 73 79 73 74 65 6d 20 65 72 72   last system err
b640: 6f 72 20 2a 2f 0a 20 20 75 31 36 20 64 62 4f 70  or */.  u16 dbOp
b650: 74 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20  tFlags;         
b660: 20 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 74        /* Flags t
b670: 6f 20 65 6e 61 62 6c 65 2f 64 69 73 61 62 6c 65  o enable/disable
b680: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a   optimizations *
b690: 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20  /.  u8 enc;     
b6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b6b0: 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69    /* Text encodi
b6c0: 6e 67 20 2a 2f 0a 20 20 75 38 20 61 75 74 6f 43  ng */.  u8 autoC
b6d0: 6f 6d 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20  ommit;          
b6e0: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 75 74        /* The aut
b6f0: 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 2e 20 2a  o-commit flag. *
b700: 2f 0a 20 20 75 38 20 74 65 6d 70 5f 73 74 6f 72  /.  u8 temp_stor
b710: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
b720: 20 20 2f 2a 20 31 3a 20 66 69 6c 65 20 32 3a 20    /* 1: file 2: 
b730: 6d 65 6d 6f 72 79 20 30 3a 20 64 65 66 61 75 6c  memory 0: defaul
b740: 74 20 2a 2f 0a 20 20 75 38 20 6d 61 6c 6c 6f 63  t */.  u8 malloc
b750: 46 61 69 6c 65 64 3b 20 20 20 20 20 20 20 20 20  Failed;         
b760: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
b770: 77 65 20 68 61 76 65 20 73 65 65 6e 20 61 20 6d  we have seen a m
b780: 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 20 2a 2f  alloc failure */
b790: 0a 20 20 75 38 20 62 42 65 6e 69 67 6e 4d 61 6c  .  u8 bBenignMal
b7a0: 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  loc;            
b7b0: 20 2f 2a 20 44 6f 20 6e 6f 74 20 72 65 71 75 69   /* Do not requi
b7c0: 72 65 20 4f 4f 4d 73 20 69 66 20 74 72 75 65 20  re OOMs if true 
b7d0: 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c 6f 63 6b  */.  u8 dfltLock
b7e0: 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  Mode;           
b7f0: 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f     /* Default lo
b800: 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f 72 20 61  cking-mode for a
b810: 74 74 61 63 68 65 64 20 64 62 73 20 2a 2f 0a 20  ttached dbs */. 
b820: 20 73 69 67 6e 65 64 20 63 68 61 72 20 6e 65 78   signed char nex
b830: 74 41 75 74 6f 76 61 63 3b 20 20 20 20 20 20 2f  tAutovac;      /
b840: 2a 20 41 75 74 6f 76 61 63 20 73 65 74 74 69 6e  * Autovac settin
b850: 67 20 61 66 74 65 72 20 56 41 43 55 55 4d 20 69  g after VACUUM i
b860: 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38 20 73 75  f >=0 */.  u8 su
b870: 70 70 72 65 73 73 45 72 72 3b 20 20 20 20 20 20  ppressErr;      
b880: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e           /* Do n
b890: 6f 74 20 69 73 73 75 65 20 65 72 72 6f 72 20 6d  ot issue error m
b8a0: 65 73 73 61 67 65 73 20 69 66 20 74 72 75 65 20  essages if true 
b8b0: 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f 6e 43 6f  */.  u8 vtabOnCo
b8c0: 6e 66 6c 69 63 74 3b 20 20 20 20 20 20 20 20 20  nflict;         
b8d0: 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72     /* Value to r
b8e0: 65 74 75 72 6e 20 66 6f 72 20 73 33 5f 76 74 61  eturn for s3_vta
b8f0: 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28 29 20  b_on_conflict() 
b900: 2a 2f 0a 20 20 75 38 20 69 73 54 72 61 6e 73 61  */.  u8 isTransa
b910: 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 20  ctionSavepoint; 
b920: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
b930: 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61 76 65  e outermost save
b940: 70 6f 69 6e 74 20 69 73 20 61 20 54 53 20 2a 2f  point is a TS */
b950: 0a 20 20 75 38 20 6d 54 72 61 63 65 3b 20 20 20  .  u8 mTrace;   
b960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b970: 20 2f 2a 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65   /* zero or more
b980: 20 53 51 4c 49 54 45 5f 54 52 41 43 45 20 66 6c   SQLITE_TRACE fl
b990: 61 67 73 20 2a 2f 0a 20 20 75 38 20 73 6b 69 70  ags */.  u8 skip
b9a0: 42 74 72 65 65 4d 75 74 65 78 3b 20 20 20 20 20  BtreeMutex;     
b9b0: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
b9c0: 66 20 6e 6f 20 73 68 61 72 65 64 2d 63 61 63 68  f no shared-cach
b9d0: 65 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20  e backends */.  
b9e0: 75 38 20 6e 53 71 6c 45 78 65 63 3b 20 20 20 20  u8 nSqlExec;    
b9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ba00: 20 4e 75 6d 62 65 72 20 6f 66 20 70 65 6e 64 69   Number of pendi
ba10: 6e 67 20 4f 50 5f 53 71 6c 45 78 65 63 20 6f 70  ng OP_SqlExec op
ba20: 63 6f 64 65 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  codes */.  int n
ba30: 65 78 74 50 61 67 65 73 69 7a 65 3b 20 20 20 20  extPagesize;    
ba40: 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65           /* Page
ba50: 73 69 7a 65 20 61 66 74 65 72 20 56 41 43 55 55  size after VACUU
ba60: 4d 20 69 66 20 3e 30 20 2a 2f 0a 20 20 75 33 32  M if >0 */.  u32
ba70: 20 6d 61 67 69 63 3b 20 20 20 20 20 20 20 20 20   magic;         
ba80: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
ba90: 67 69 63 20 6e 75 6d 62 65 72 20 66 6f 72 20 64  gic number for d
baa0: 65 74 65 63 74 20 6c 69 62 72 61 72 79 20 6d 69  etect library mi
bab0: 73 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 43  suse */.  int nC
bac0: 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20  hange;          
bad0: 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
bae0: 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c   returned by sql
baf0: 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 20 2a  ite3_changes() *
bb00: 2f 0a 20 20 69 6e 74 20 6e 54 6f 74 61 6c 43 68  /.  int nTotalCh
bb10: 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20 20  ange;           
bb20: 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72    /* Value retur
bb30: 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 74  ned by sqlite3_t
bb40: 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 20 2a  otal_changes() *
bb50: 2f 0a 20 20 69 6e 74 20 61 4c 69 6d 69 74 5b 53  /.  int aLimit[S
bb60: 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20  QLITE_N_LIMIT]; 
bb70: 20 20 2f 2a 20 4c 69 6d 69 74 73 20 2a 2f 0a 20    /* Limits */. 
bb80: 20 69 6e 74 20 6e 4d 61 78 53 6f 72 74 65 72 4d   int nMaxSorterM
bb90: 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f  map;           /
bba0: 2a 20 4d 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f  * Maximum size o
bbb0: 66 20 72 65 67 69 6f 6e 73 20 6d 61 70 70 65 64  f regions mapped
bbc0: 20 62 79 20 73 6f 72 74 65 72 20 2a 2f 0a 20 20   by sorter */.  
bbd0: 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 49 6e  struct sqlite3In
bbe0: 69 74 49 6e 66 6f 20 7b 20 20 20 20 20 20 2f 2a  itInfo {      /*
bbf0: 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65   Information use
bc00: 64 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c  d during initial
bc10: 69 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69  ization */.    i
bc20: 6e 74 20 6e 65 77 54 6e 75 6d 3b 20 20 20 20 20  nt newTnum;     
bc30: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f             /* Ro
bc40: 6f 74 70 61 67 65 20 6f 66 20 74 61 62 6c 65 20  otpage of table 
bc50: 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65  being initialize
bc60: 64 20 2a 2f 0a 20 20 20 20 75 38 20 69 44 62 3b  d */.    u8 iDb;
bc70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc80: 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 64 62       /* Which db
bc90: 20 66 69 6c 65 20 69 73 20 62 65 69 6e 67 20 69   file is being i
bca0: 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
bcb0: 20 20 75 38 20 62 75 73 79 3b 20 20 20 20 20 20    u8 busy;      
bcc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
bcd0: 20 54 52 55 45 20 69 66 20 63 75 72 72 65 6e 74   TRUE if current
bce0: 6c 79 20 69 6e 69 74 69 61 6c 69 7a 69 6e 67 20  ly initializing 
bcf0: 2a 2f 0a 20 20 20 20 75 38 20 6f 72 70 68 61 6e  */.    u8 orphan
bd00: 54 72 69 67 67 65 72 3b 20 20 20 20 20 20 20 20  Trigger;        
bd10: 20 20 20 2f 2a 20 4c 61 73 74 20 73 74 61 74 65     /* Last state
bd20: 6d 65 6e 74 20 69 73 20 6f 72 70 68 61 6e 65 64  ment is orphaned
bd30: 20 54 45 4d 50 20 74 72 69 67 67 65 72 20 2a 2f   TEMP trigger */
bd40: 0a 20 20 20 20 75 38 20 69 6d 70 6f 73 74 65 72  .    u8 imposter
bd50: 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  Table;          
bd60: 20 2f 2a 20 42 75 69 6c 64 69 6e 67 20 61 6e 20   /* Building an 
bd70: 69 6d 70 6f 73 74 65 72 20 74 61 62 6c 65 20 2a  imposter table *
bd80: 2f 0a 20 20 7d 20 69 6e 69 74 3b 0a 20 20 69 6e  /.  } init;.  in
bd90: 74 20 6e 56 64 62 65 41 63 74 69 76 65 3b 20 20  t nVdbeActive;  
bda0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
bdb0: 75 6d 62 65 72 20 6f 66 20 56 44 42 45 73 20 63  umber of VDBEs c
bdc0: 75 72 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67  urrently running
bdd0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 52   */.  int nVdbeR
bde0: 65 61 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  ead;            
bdf0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
be00: 20 61 63 74 69 76 65 20 56 44 42 45 73 20 74 68   active VDBEs th
be10: 61 74 20 72 65 61 64 20 6f 72 20 77 72 69 74 65  at read or write
be20: 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 57   */.  int nVdbeW
be30: 72 69 74 65 3b 20 20 20 20 20 20 20 20 20 20 20  rite;           
be40: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
be50: 20 61 63 74 69 76 65 20 56 44 42 45 73 20 74 68   active VDBEs th
be60: 61 74 20 72 65 61 64 20 61 6e 64 20 77 72 69 74  at read and writ
be70: 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65  e */.  int nVdbe
be80: 45 78 65 63 3b 20 20 20 20 20 20 20 20 20 20 20  Exec;           
be90: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
bea0: 66 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74  f nested calls t
beb0: 6f 20 56 64 62 65 45 78 65 63 28 29 20 2a 2f 0a  o VdbeExec() */.
bec0: 20 20 69 6e 74 20 6e 56 44 65 73 74 72 6f 79 3b    int nVDestroy;
bed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bee0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74  /* Number of act
bef0: 69 76 65 20 4f 50 5f 56 44 65 73 74 72 6f 79 20  ive OP_VDestroy 
bf00: 6f 70 65 72 61 74 69 6f 6e 73 20 2a 2f 0a 20 20  operations */.  
bf10: 69 6e 74 20 6e 45 78 74 65 6e 73 69 6f 6e 3b 20  int nExtension; 
bf20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
bf30: 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 61 64 65   Number of loade
bf40: 64 20 65 78 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a  d extensions */.
bf50: 20 20 76 6f 69 64 20 2a 2a 61 45 78 74 65 6e 73    void **aExtens
bf60: 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  ion;            
bf70: 2f 2a 20 41 72 72 61 79 20 6f 66 20 73 68 61 72  /* Array of shar
bf80: 65 64 20 6c 69 62 72 61 72 79 20 68 61 6e 64 6c  ed library handl
bf90: 65 73 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 54  es */.  int (*xT
bfa0: 72 61 63 65 29 28 75 33 32 2c 76 6f 69 64 2a 2c  race)(u32,void*,
bfb0: 76 6f 69 64 2a 2c 76 6f 69 64 2a 29 3b 20 20 20  void*,void*);   
bfc0: 20 20 2f 2a 20 54 72 61 63 65 20 66 75 6e 63 74    /* Trace funct
bfd0: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ion */.  void *p
bfe0: 54 72 61 63 65 41 72 67 3b 20 20 20 20 20 20 20  TraceArg;       
bff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c000: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
c010: 6f 20 74 68 65 20 74 72 61 63 65 20 66 75 6e 63  o the trace func
c020: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28  tion */.  void (
c030: 2a 78 50 72 6f 66 69 6c 65 29 28 76 6f 69 64 2a  *xProfile)(void*
c040: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 36 34  ,const char*,u64
c050: 29 3b 20 20 2f 2a 20 50 72 6f 66 69 6c 69 6e 67  );  /* Profiling
c060: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
c070: 6f 69 64 20 2a 70 50 72 6f 66 69 6c 65 41 72 67  oid *pProfileArg
c080: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
c090: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
c0a0: 6d 65 6e 74 20 74 6f 20 70 72 6f 66 69 6c 65 20  ment to profile 
c0b0: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f  function */.  vo
c0c0: 69 64 20 2a 70 43 6f 6d 6d 69 74 41 72 67 3b 20  id *pCommitArg; 
c0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c0e0: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78  /* Argument to x
c0f0: 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 28 29  CommitCallback()
c100: 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d   */.  int (*xCom
c110: 6d 69 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  mitCallback)(voi
c120: 64 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b  d*);    /* Invok
c130: 65 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d  ed at every comm
c140: 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  it. */.  void *p
c150: 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20 20  RollbackArg;    
c160: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72             /* Ar
c170: 67 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62  gument to xRollb
c180: 61 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f  ackCallback() */
c190: 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c 6c 62  .  void (*xRollb
c1a0: 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69  ackCallback)(voi
c1b0: 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65 64 20  d*); /* Invoked 
c1c0: 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e  at every commit.
c1d0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 70 64   */.  void *pUpd
c1e0: 61 74 65 41 72 67 3b 0a 20 20 76 6f 69 64 20 28  ateArg;.  void (
c1f0: 2a 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  *xUpdateCallback
c200: 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e  )(void*,int, con
c210: 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63  st char*,const c
c220: 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e 74 36  har*,sqlite_int6
c230: 34 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  4);.#ifdef SQLIT
c240: 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41  E_ENABLE_PREUPDA
c250: 54 45 5f 48 4f 4f 4b 0a 20 20 76 6f 69 64 20 2a  TE_HOOK.  void *
c260: 70 50 72 65 55 70 64 61 74 65 41 72 67 3b 20 20  pPreUpdateArg;  
c270: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
c280: 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 50 72   argument to xPr
c290: 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20  eUpdateCallback 
c2a0: 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72 65  */.  void (*xPre
c2b0: 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 28  UpdateCallback)(
c2c0: 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 65 64     /* Registered
c2d0: 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 70   using sqlite3_p
c2e0: 72 65 75 70 64 61 74 65 5f 68 6f 6f 6b 28 29 20  reupdate_hook() 
c2f0: 2a 2f 0a 20 20 20 20 76 6f 69 64 2a 2c 73 71 6c  */.    void*,sql
c300: 69 74 65 33 2a 2c 69 6e 74 2c 63 68 61 72 20 63  ite3*,int,char c
c310: 6f 6e 73 74 2a 2c 63 68 61 72 20 63 6f 6e 73 74  onst*,char const
c320: 2a 2c 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 2c  *,sqlite3_int64,
c330: 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 0a 20 20  sqlite3_int64.  
c340: 29 3b 0a 20 20 50 72 65 55 70 64 61 74 65 20 2a  );.  PreUpdate *
c350: 70 50 72 65 55 70 64 61 74 65 3b 20 20 20 20 20  pPreUpdate;     
c360: 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f     /* Context fo
c370: 72 20 61 63 74 69 76 65 20 70 72 65 2d 75 70 64  r active pre-upd
c380: 61 74 65 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  ate callback */.
c390: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
c3a0: 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41 54  _ENABLE_PREUPDAT
c3b0: 45 5f 48 4f 4f 4b 20 2a 2f 0a 23 69 66 6e 64 65  E_HOOK */.#ifnde
c3c0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41  f SQLITE_OMIT_WA
c3d0: 4c 0a 20 20 69 6e 74 20 28 2a 78 57 61 6c 43 61  L.  int (*xWalCa
c3e0: 6c 6c 62 61 63 6b 29 28 76 6f 69 64 20 2a 2c 20  llback)(void *, 
c3f0: 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74  sqlite3 *, const
c400: 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 20   char *, int);. 
c410: 20 76 6f 69 64 20 2a 70 57 61 6c 41 72 67 3b 0a   void *pWalArg;.
c420: 23 65 6e 64 69 66 0a 20 20 76 6f 69 64 28 2a 78  #endif.  void(*x
c430: 43 6f 6c 6c 4e 65 65 64 65 64 29 28 76 6f 69 64  CollNeeded)(void
c440: 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65  *,sqlite3*,int e
c450: 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 63 68  TextRep,const ch
c460: 61 72 2a 29 3b 0a 20 20 76 6f 69 64 28 2a 78 43  ar*);.  void(*xC
c470: 6f 6c 6c 4e 65 65 64 65 64 31 36 29 28 76 6f 69  ollNeeded16)(voi
c480: 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20  d*,sqlite3*,int 
c490: 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 76  eTextRep,const v
c4a0: 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70  oid*);.  void *p
c4b0: 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67 3b 0a 20  CollNeededArg;. 
c4c0: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
c4d0: 70 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 2f  pErr;          /
c4e0: 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72  * Most recent er
c4f0: 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20  ror message */. 
c500: 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c   union {.    vol
c510: 61 74 69 6c 65 20 69 6e 74 20 69 73 49 6e 74 65  atile int isInte
c520: 72 72 75 70 74 65 64 3b 20 2f 2a 20 54 72 75 65  rrupted; /* True
c530: 20 69 66 20 73 71 6c 69 74 65 33 5f 69 6e 74 65   if sqlite3_inte
c540: 72 72 75 70 74 20 68 61 73 20 62 65 65 6e 20 63  rrupt has been c
c550: 61 6c 6c 65 64 20 2a 2f 0a 20 20 20 20 64 6f 75  alled */.    dou
c560: 62 6c 65 20 6e 6f 74 55 73 65 64 31 3b 20 20 20  ble notUsed1;   
c570: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63           /* Spac
c580: 65 72 20 2a 2f 0a 20 20 7d 20 75 31 3b 0a 20 20  er */.  } u1;.  
c590: 4c 6f 6f 6b 61 73 69 64 65 20 6c 6f 6f 6b 61 73  Lookaside lookas
c5a0: 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ide;          /*
c5b0: 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f   Lookaside mallo
c5c0: 63 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  c configuration 
c5d0: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
c5e0: 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41  E_OMIT_AUTHORIZA
c5f0: 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f 78  TION.  sqlite3_x
c600: 61 75 74 68 20 78 41 75 74 68 3b 20 20 20 20 20  auth xAuth;     
c610: 20 20 20 20 20 2f 2a 20 41 63 63 65 73 73 20 61       /* Access a
c620: 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 66 75 6e  uthorization fun
c630: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
c640: 2a 70 41 75 74 68 41 72 67 3b 20 20 20 20 20 20  *pAuthArg;      
c650: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20           /* 1st 
c660: 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
c670: 61 63 63 65 73 73 20 61 75 74 68 20 66 75 6e 63  access auth func
c680: 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  tion */.#endif.#
c690: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
c6a0: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
c6b0: 42 41 43 4b 0a 20 20 69 6e 74 20 28 2a 78 50 72  BACK.  int (*xPr
c6c0: 6f 67 72 65 73 73 29 28 76 6f 69 64 20 2a 29 3b  ogress)(void *);
c6d0: 20 20 20 20 20 2f 2a 20 54 68 65 20 70 72 6f 67       /* The prog
c6e0: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  ress callback */
c6f0: 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f 67 72 65  .  void *pProgre
c700: 73 73 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  ssArg;          
c710: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
c720: 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  the progress cal
c730: 6c 62 61 63 6b 20 2a 2f 0a 20 20 75 6e 73 69 67  lback */.  unsig
c740: 6e 65 64 20 6e 50 72 6f 67 72 65 73 73 4f 70 73  ned nProgressOps
c750: 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
c760: 65 72 20 6f 66 20 6f 70 63 6f 64 65 73 20 66 6f  er of opcodes fo
c770: 72 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  r progress callb
c780: 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  ack */.#endif.#i
c790: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
c7a0: 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
c7b0: 20 69 6e 74 20 6e 56 54 72 61 6e 73 3b 20 20 20   int nVTrans;   
c7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c7d0: 2a 20 41 6c 6c 6f 63 61 74 65 64 20 73 69 7a 65  * Allocated size
c7e0: 20 6f 66 20 61 56 54 72 61 6e 73 20 2a 2f 0a 20   of aVTrans */. 
c7f0: 20 48 61 73 68 20 61 4d 6f 64 75 6c 65 3b 20 20   Hash aModule;  
c800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c810: 2a 20 70 6f 70 75 6c 61 74 65 64 20 62 79 20 73  * populated by s
c820: 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f  qlite3_create_mo
c830: 64 75 6c 65 28 29 20 2a 2f 0a 20 20 56 74 61 62  dule() */.  Vtab
c840: 43 74 78 20 2a 70 56 74 61 62 43 74 78 3b 20 20  Ctx *pVtabCtx;  
c850: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e            /* Con
c860: 74 65 78 74 20 66 6f 72 20 61 63 74 69 76 65 20  text for active 
c870: 76 74 61 62 20 63 6f 6e 6e 65 63 74 2f 63 72 65  vtab connect/cre
c880: 61 74 65 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20  ate */.  VTable 
c890: 2a 2a 61 56 54 72 61 6e 73 3b 20 20 20 20 20 20  **aVTrans;      
c8a0: 20 20 20 20 20 20 20 2f 2a 20 56 69 72 74 75 61         /* Virtua
c8b0: 6c 20 74 61 62 6c 65 73 20 77 69 74 68 20 6f 70  l tables with op
c8c0: 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  en transactions 
c8d0: 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 44 69  */.  VTable *pDi
c8e0: 73 63 6f 6e 6e 65 63 74 3b 20 20 20 20 2f 2a 20  sconnect;    /* 
c8f0: 44 69 73 63 6f 6e 6e 65 63 74 20 74 68 65 73 65  Disconnect these
c900: 20 69 6e 20 6e 65 78 74 20 73 71 6c 69 74 65 33   in next sqlite3
c910: 5f 70 72 65 70 61 72 65 28 29 20 2a 2f 0a 23 65  _prepare() */.#e
c920: 6e 64 69 66 0a 20 20 48 61 73 68 20 61 46 75 6e  ndif.  Hash aFun
c930: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
c940: 20 20 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62       /* Hash tab
c950: 6c 65 20 6f 66 20 63 6f 6e 6e 65 63 74 69 6f 6e  le of connection
c960: 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20   functions */.  
c970: 48 61 73 68 20 61 43 6f 6c 6c 53 65 71 3b 20 20  Hash aCollSeq;  
c980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c990: 20 41 6c 6c 20 63 6f 6c 6c 61 74 69 6e 67 20 73   All collating s
c9a0: 65 71 75 65 6e 63 65 73 20 2a 2f 0a 20 20 42 75  equences */.  Bu
c9b0: 73 79 48 61 6e 64 6c 65 72 20 62 75 73 79 48 61  syHandler busyHa
c9c0: 6e 64 6c 65 72 3b 20 20 20 20 20 20 2f 2a 20 42  ndler;      /* B
c9d0: 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  usy callback */.
c9e0: 20 20 44 62 20 61 44 62 53 74 61 74 69 63 5b 32    Db aDbStatic[2
c9f0: 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ];              
ca00: 2f 2a 20 53 74 61 74 69 63 20 73 70 61 63 65 20  /* Static space 
ca10: 66 6f 72 20 74 68 65 20 32 20 64 65 66 61 75 6c  for the 2 defaul
ca20: 74 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20  t backends */.  
ca30: 53 61 76 65 70 6f 69 6e 74 20 2a 70 53 61 76 65  Savepoint *pSave
ca40: 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 2f 2a  point;        /*
ca50: 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76 65 20   List of active 
ca60: 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20  savepoints */.  
ca70: 69 6e 74 20 62 75 73 79 54 69 6d 65 6f 75 74 3b  int busyTimeout;
ca80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ca90: 20 42 75 73 79 20 68 61 6e 64 6c 65 72 20 74 69   Busy handler ti
caa0: 6d 65 6f 75 74 2c 20 69 6e 20 6d 73 65 63 20 2a  meout, in msec *
cab0: 2f 0a 20 20 69 6e 74 20 6e 53 61 76 65 70 6f 69  /.  int nSavepoi
cac0: 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nt;             
cad0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
cae0: 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  on-transaction s
caf0: 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69  avepoints */.  i
cb00: 6e 74 20 6e 53 74 61 74 65 6d 65 6e 74 3b 20 20  nt nStatement;  
cb10: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
cb20: 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64  Number of nested
cb30: 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73   statement-trans
cb40: 61 63 74 69 6f 6e 73 20 20 2a 2f 0a 20 20 69 36  actions  */.  i6
cb50: 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b  4 nDeferredCons;
cb60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
cb70: 65 74 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73  et deferred cons
cb80: 74 72 61 69 6e 74 73 20 74 68 69 73 20 74 72 61  traints this tra
cb90: 6e 73 61 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 69  nsaction. */.  i
cba0: 36 34 20 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  64 nDeferredImmC
cbb0: 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ons;         /* 
cbc0: 4e 65 74 20 64 65 66 65 72 72 65 64 20 69 6d 6d  Net deferred imm
cbd0: 65 64 69 61 74 65 20 63 6f 6e 73 74 72 61 69 6e  ediate constrain
cbe0: 74 73 20 2a 2f 0a 20 20 69 6e 74 20 2a 70 6e 42  ts */.  int *pnB
cbf0: 79 74 65 73 46 72 65 65 64 3b 20 20 20 20 20 20  ytesFreed;      
cc00: 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20        /* If not 
cc10: 4e 55 4c 4c 2c 20 69 6e 63 72 65 6d 65 6e 74 20  NULL, increment 
cc20: 74 68 69 73 20 69 6e 20 44 62 46 72 65 65 28 29  this in DbFree()
cc30: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
cc40: 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f  E_ENABLE_UNLOCK_
cc50: 4e 4f 54 49 46 59 0a 20 20 2f 2a 20 54 68 65 20  NOTIFY.  /* The 
cc60: 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 72 69 61 62  following variab
cc70: 6c 65 73 20 61 72 65 20 61 6c 6c 20 70 72 6f 74  les are all prot
cc80: 65 63 74 65 64 20 62 79 20 74 68 65 20 53 54 41  ected by the STA
cc90: 54 49 43 5f 4d 41 53 54 45 52 0a 20 20 2a 2a 20  TIC_MASTER.  ** 
cca0: 6d 75 74 65 78 2c 20 6e 6f 74 20 62 79 20 73 71  mutex, not by sq
ccb0: 6c 69 74 65 33 2e 6d 75 74 65 78 2e 20 54 68 65  lite3.mutex. The
ccc0: 79 20 61 72 65 20 75 73 65 64 20 62 79 20 63 6f  y are used by co
ccd0: 64 65 20 69 6e 20 6e 6f 74 69 66 79 2e 63 2e 0a  de in notify.c..
cce0: 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58    **.  ** When X
ccf0: 2e 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69  .pUnlockConnecti
cd00: 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e  on==Y, that mean
cd10: 73 20 74 68 61 74 20 58 20 69 73 20 77 61 69 74  s that X is wait
cd20: 69 6e 67 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a  ing for Y to.  *
cd30: 2a 20 75 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74  * unlock so that
cd40: 20 69 74 20 63 61 6e 20 70 72 6f 63 65 65 64 2e   it can proceed.
cd50: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20  .  **.  ** When 
cd60: 58 2e 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65  X.pBlockingConne
cd70: 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d  ction==Y, that m
cd80: 65 61 6e 73 20 74 68 61 74 20 73 6f 6d 65 74 68  eans that someth
cd90: 69 6e 67 20 74 68 61 74 20 58 20 74 72 69 65 64  ing that X tried
cda0: 0a 20 20 2a 2a 20 74 72 69 65 64 20 74 6f 20 64  .  ** tried to d
cdb0: 6f 20 72 65 63 65 6e 74 6c 79 20 66 61 69 6c 65  o recently faile
cdc0: 64 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45  d with an SQLITE
cdd0: 5f 4c 4f 43 4b 45 44 20 65 72 72 6f 72 20 64 75  _LOCKED error du
cde0: 65 20 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20  e to locks.  ** 
cdf0: 68 65 6c 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a  held by Y..  */.
ce00: 20 20 73 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63    sqlite3 *pBloc
ce10: 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20  kingConnection; 
ce20: 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68  /* Connection th
ce30: 61 74 20 63 61 75 73 65 64 20 53 51 4c 49 54 45  at caused SQLITE
ce40: 5f 4c 4f 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c  _LOCKED */.  sql
ce50: 69 74 65 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e  ite3 *pUnlockCon
ce60: 6e 65 63 74 69 6f 6e 3b 20 20 20 20 20 20 20 20  nection;        
ce70: 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e     /* Connection
ce80: 20 74 6f 20 77 61 74 63 68 20 66 6f 72 20 75 6e   to watch for un
ce90: 6c 6f 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  lock */.  void *
cea0: 70 55 6e 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20  pUnlockArg;     
ceb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cec0: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78  /* Argument to x
ced0: 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a  UnlockNotify */.
cee0: 20 20 76 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b    void (*xUnlock
cef0: 4e 6f 74 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c  Notify)(void **,
cf00: 20 69 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63   int);  /* Unloc
cf10: 6b 20 6e 6f 74 69 66 79 20 63 61 6c 6c 62 61 63  k notify callbac
cf20: 6b 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a  k */.  sqlite3 *
cf30: 70 4e 65 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20  pNextBlocked;   
cf40: 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20       /* Next in 
cf50: 6c 69 73 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63  list of all bloc
cf60: 6b 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20  ked connections 
cf70: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  */.#endif.#ifdef
cf80: 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54   SQLITE_USER_AUT
cf90: 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 73 71  HENTICATION.  sq
cfa0: 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 20 61  lite3_userauth a
cfb0: 75 74 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 55  uth;        /* U
cfc0: 73 65 72 20 61 75 74 68 65 6e 74 69 63 61 74 69  ser authenticati
cfd0: 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a  on information *
cfe0: 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a  /.#endif.};../*.
cff0: 2a 2a 20 41 20 6d 61 63 72 6f 20 74 6f 20 64 69  ** A macro to di
d000: 73 63 6f 76 65 72 20 74 68 65 20 65 6e 63 6f 64  scover the encod
d010: 69 6e 67 20 6f 66 20 61 20 64 61 74 61 62 61 73  ing of a databas
d020: 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43  e..*/.#define SC
d030: 48 45 4d 41 5f 45 4e 43 28 64 62 29 20 28 28 64  HEMA_ENC(db) ((d
d040: 62 29 2d 3e 61 44 62 5b 30 5d 2e 70 53 63 68 65  b)->aDb[0].pSche
d050: 6d 61 2d 3e 65 6e 63 29 0a 23 64 65 66 69 6e 65  ma->enc).#define
d060: 20 45 4e 43 28 64 62 29 20 20 20 20 20 20 20 20   ENC(db)        
d070: 28 28 64 62 29 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a  ((db)->enc)../*.
d080: 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75  ** Possible valu
d090: 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74  es for the sqlit
d0a0: 65 33 2e 66 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20  e3.flags..**.** 
d0b0: 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74  Value constraint
d0c0: 73 20 28 65 6e 66 6f 72 63 65 64 20 76 69 61 20  s (enforced via 
d0d0: 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20  assert()):.**   
d0e0: 20 20 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53     SQLITE_FullFS
d0f0: 79 6e 63 20 20 20 20 20 3d 3d 20 50 41 47 45 52  ync     == PAGER
d100: 5f 46 55 4c 4c 46 53 59 4e 43 0a 2a 2a 20 20 20  _FULLFSYNC.**   
d110: 20 20 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75     SQLITE_CkptFu
d120: 6c 6c 46 53 79 6e 63 20 3d 3d 20 50 41 47 45 52  llFSync == PAGER
d130: 5f 43 4b 50 54 5f 46 55 4c 4c 46 53 59 4e 43 0a  _CKPT_FULLFSYNC.
d140: 2a 2a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 43  **      SQLITE_C
d150: 61 63 68 65 53 70 69 6c 6c 20 20 20 20 3d 3d 20  acheSpill    == 
d160: 50 41 47 45 52 5f 43 41 43 48 45 5f 53 50 49 4c  PAGER_CACHE_SPIL
d170: 4c 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  L.*/.#define SQL
d180: 49 54 45 5f 57 72 69 74 65 53 63 68 65 6d 61 20  ITE_WriteSchema 
d190: 20 20 20 30 78 30 30 30 30 30 30 30 31 20 20 2f     0x00000001  /
d1a0: 2a 20 4f 4b 20 74 6f 20 75 70 64 61 74 65 20 53  * OK to update S
d1b0: 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 2a 2f 0a  QLITE_MASTER */.
d1c0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c  #define SQLITE_L
d1d0: 65 67 61 63 79 46 69 6c 65 46 6d 74 20 20 30 78  egacyFileFmt  0x
d1e0: 30 30 30 30 30 30 30 32 20 20 2f 2a 20 43 72 65  00000002  /* Cre
d1f0: 61 74 65 20 6e 65 77 20 64 61 74 61 62 61 73 65  ate new database
d200: 73 20 69 6e 20 66 6f 72 6d 61 74 20 31 20 2a 2f  s in format 1 */
d210: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d220: 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20 20 30  FullColNames   0
d230: 78 30 30 30 30 30 30 30 34 20 20 2f 2a 20 53 68  x00000004  /* Sh
d240: 6f 77 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e  ow full column n
d250: 61 6d 65 73 20 6f 6e 20 53 45 4c 45 43 54 20 2a  ames on SELECT *
d260: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d270: 5f 46 75 6c 6c 46 53 79 6e 63 20 20 20 20 20 20  _FullFSync      
d280: 30 78 30 30 30 30 30 30 30 38 20 20 2f 2a 20 55  0x00000008  /* U
d290: 73 65 20 66 75 6c 6c 20 66 73 79 6e 63 20 6f 6e  se full fsync on
d2a0: 20 74 68 65 20 62 61 63 6b 65 6e 64 20 2a 2f 0a   the backend */.
d2b0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
d2c0: 6b 70 74 46 75 6c 6c 46 53 79 6e 63 20 20 30 78  kptFullFSync  0x
d2d0: 30 30 30 30 30 30 31 30 20 20 2f 2a 20 55 73 65  00000010  /* Use
d2e0: 20 66 75 6c 6c 20 66 73 79 6e 63 20 66 6f 72 20   full fsync for 
d2f0: 63 68 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64  checkpoint */.#d
d300: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 61 63  efine SQLITE_Cac
d310: 68 65 53 70 69 6c 6c 20 20 20 20 20 30 78 30 30  heSpill     0x00
d320: 30 30 30 30 32 30 20 20 2f 2a 20 4f 4b 20 74 6f  000020  /* OK to
d330: 20 73 70 69 6c 6c 20 70 61 67 65 72 20 63 61 63   spill pager cac
d340: 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  he */.#define SQ
d350: 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d  LITE_ShortColNam
d360: 65 73 20 20 30 78 30 30 30 30 30 30 34 30 20 20  es  0x00000040  
d370: 2f 2a 20 53 68 6f 77 20 73 68 6f 72 74 20 63 6f  /* Show short co
d380: 6c 75 6d 6e 73 20 6e 61 6d 65 73 20 2a 2f 0a 23  lumns names */.#
d390: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f  define SQLITE_Co
d3a0: 75 6e 74 52 6f 77 73 20 20 20 20 20 20 30 78 30  untRows      0x0
d3b0: 30 30 30 30 30 38 30 20 20 2f 2a 20 43 6f 75 6e  0000080  /* Coun
d3c0: 74 20 72 6f 77 73 20 63 68 61 6e 67 65 64 20 62  t rows changed b
d3d0: 79 20 49 4e 53 45 52 54 2c 20 2a 2f 0a 20 20 20  y INSERT, */.   
d3e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d400: 20 20 20 20 20 20 20 2f 2a 20 20 20 44 45 4c 45         /*   DELE
d410: 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20 61 6e  TE, or UPDATE an
d420: 64 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 20 20  d return */.    
d430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d450: 20 20 20 20 20 20 2f 2a 20 20 20 74 68 65 20 63        /*   the c
d460: 6f 75 6e 74 20 75 73 69 6e 67 20 61 20 63 61 6c  ount using a cal
d470: 6c 62 61 63 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e  lback. */.#defin
d480: 65 20 53 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c  e SQLITE_NullCal
d490: 6c 62 61 63 6b 20 20 20 30 78 30 30 30 30 30 31  lback   0x000001
d4a0: 30 30 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68  00  /* Invoke th
d4b0: 65 20 63 61 6c 6c 62 61 63 6b 20 6f 6e 63 65 20  e callback once 
d4c0: 69 66 20 74 68 65 20 2a 2f 0a 20 20 20 20 20 20  if the */.      
d4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d4f0: 20 20 20 20 2f 2a 20 20 20 72 65 73 75 6c 74 20      /*   result 
d500: 73 65 74 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a  set is empty */.
d510: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
d520: 67 6e 6f 72 65 43 68 65 63 6b 73 20 20 20 30 78  gnoreChecks   0x
d530: 30 30 30 30 30 32 30 30 20 20 2f 2a 20 44 6f 20  00000200  /* Do 
d540: 6e 6f 74 20 65 6e 66 6f 72 63 65 20 63 68 65 63  not enforce chec
d550: 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  k constraints */
d560: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d570: 52 65 61 64 55 6e 63 6f 6d 6d 69 74 20 20 20 30  ReadUncommit   0
d580: 78 30 30 30 30 30 34 30 30 20 20 2f 2a 20 52 45  x00000400  /* RE
d590: 41 44 20 55 4e 43 4f 4d 4d 49 54 54 45 44 20 69  AD UNCOMMITTED i
d5a0: 6e 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 2a  n shared-cache *
d5b0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d5c0: 5f 4e 6f 43 6b 70 74 4f 6e 43 6c 6f 73 65 20 20  _NoCkptOnClose  
d5d0: 30 78 30 30 30 30 30 38 30 30 20 20 2f 2a 20 4e  0x00000800  /* N
d5e0: 6f 20 63 68 65 63 6b 70 6f 69 6e 74 20 6f 6e 20  o checkpoint on 
d5f0: 63 6c 6f 73 65 28 29 2f 44 45 54 41 43 48 20 2a  close()/DETACH *
d600: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d610: 5f 52 65 76 65 72 73 65 4f 72 64 65 72 20 20 20  _ReverseOrder   
d620: 30 78 30 30 30 30 31 30 30 30 20 20 2f 2a 20 52  0x00001000  /* R
d630: 65 76 65 72 73 65 20 75 6e 6f 72 64 65 72 65 64  everse unordered
d640: 20 53 45 4c 45 43 54 73 20 2a 2f 0a 23 64 65 66   SELECTs */.#def
d650: 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 63 54 72  ine SQLITE_RecTr
d660: 69 67 67 65 72 73 20 20 20 20 30 78 30 30 30 30  iggers    0x0000
d670: 32 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20  2000  /* Enable 
d680: 72 65 63 75 72 73 69 76 65 20 74 72 69 67 67 65  recursive trigge
d690: 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  rs */.#define SQ
d6a0: 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73  LITE_ForeignKeys
d6b0: 20 20 20 20 30 78 30 30 30 30 34 30 30 30 20 20      0x00004000  
d6c0: 2f 2a 20 45 6e 66 6f 72 63 65 20 66 6f 72 65 69  /* Enforce forei
d6d0: 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
d6e0: 74 73 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ts  */.#define S
d6f0: 51 4c 49 54 45 5f 41 75 74 6f 49 6e 64 65 78 20  QLITE_AutoIndex 
d700: 20 20 20 20 20 30 78 30 30 30 30 38 30 30 30 20       0x00008000 
d710: 20 2f 2a 20 45 6e 61 62 6c 65 20 61 75 74 6f 6d   /* Enable autom
d720: 61 74 69 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a  atic indexes */.
d730: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c  #define SQLITE_L
d740: 6f 61 64 45 78 74 65 6e 73 69 6f 6e 20 20 30 78  oadExtension  0x
d750: 30 30 30 31 30 30 30 30 20 20 2f 2a 20 45 6e 61  00010000  /* Ena
d760: 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69  ble load_extensi
d770: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
d780: 4c 49 54 45 5f 45 6e 61 62 6c 65 54 72 69 67 67  LITE_EnableTrigg
d790: 65 72 20 20 30 78 30 30 30 32 30 30 30 30 20 20  er  0x00020000  
d7a0: 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c  /* True to enabl
d7b0: 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64  e triggers */.#d
d7c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 65 66  efine SQLITE_Def
d7d0: 65 72 46 4b 73 20 20 20 20 20 20 20 30 78 30 30  erFKs       0x00
d7e0: 30 34 30 30 30 30 20 20 2f 2a 20 44 65 66 65 72  040000  /* Defer
d7f0: 20 61 6c 6c 20 46 4b 20 63 6f 6e 73 74 72 61 69   all FK constrai
d800: 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  nts */.#define S
d810: 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79 20  QLITE_QueryOnly 
d820: 20 20 20 20 20 30 78 30 30 30 38 30 30 30 30 20       0x00080000 
d830: 20 2f 2a 20 44 69 73 61 62 6c 65 20 64 61 74 61   /* Disable data
d840: 62 61 73 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a  base changes */.
d850: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
d860: 65 6c 6c 53 69 7a 65 43 6b 20 20 20 20 20 30 78  ellSizeCk     0x
d870: 30 30 31 30 30 30 30 30 20 20 2f 2a 20 43 68 65  00100000  /* Che
d880: 63 6b 20 62 74 72 65 65 20 63 65 6c 6c 20 73 69  ck btree cell si
d890: 7a 65 73 20 6f 6e 20 6c 6f 61 64 20 2a 2f 0a 23  zes on load */.#
d8a0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 74  define SQLITE_Ft
d8b0: 73 33 54 6f 6b 65 6e 69 7a 65 72 20 20 30 78 30  s3Tokenizer  0x0
d8c0: 30 32 30 30 30 30 30 20 20 2f 2a 20 45 6e 61 62  0200000  /* Enab
d8d0: 6c 65 20 66 74 73 33 5f 74 6f 6b 65 6e 69 7a 65  le fts3_tokenize
d8e0: 72 28 32 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  r(2) */.#define 
d8f0: 53 51 4c 49 54 45 5f 45 6e 61 62 6c 65 51 50 53  SQLITE_EnableQPS
d900: 47 20 20 20 20 20 30 78 30 30 34 30 30 30 30 30  G     0x00400000
d910: 20 20 2f 2a 20 51 75 65 72 79 20 50 6c 61 6e 6e    /* Query Plann
d920: 65 72 20 53 74 61 62 69 6c 69 74 79 20 47 75 61  er Stability Gua
d930: 72 61 6e 74 65 65 20 2a 2f 0a 2f 2a 20 54 68 65  rantee */./* The
d940: 20 6e 65 78 74 20 66 6f 75 72 20 76 61 6c 75 65   next four value
d950: 73 20 61 72 65 20 6e 6f 74 20 75 73 65 64 20 62  s are not used b
d960: 79 20 50 52 41 47 4d 41 73 20 6f 72 20 62 79 20  y PRAGMAs or by 
d970: 73 71 6c 69 74 65 33 5f 64 62 63 6f 6e 66 69 67  sqlite3_dbconfig
d980: 28 29 20 61 6e 64 0a 2a 2a 20 63 6f 75 6c 64 20  () and.** could 
d990: 62 65 20 66 61 63 74 6f 72 65 64 20 6f 75 74 20  be factored out 
d9a0: 69 6e 74 6f 20 61 20 73 65 70 61 72 61 74 65 20  into a separate 
d9b0: 62 69 74 20 76 65 63 74 6f 72 20 6f 66 20 74 68  bit vector of th
d9c0: 65 20 73 71 6c 69 74 65 33 20 6f 62 6a 65 63 74  e sqlite3 object
d9d0: 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  . */.#define SQL
d9e0: 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65  ITE_InternChange
d9f0: 73 20 20 30 78 30 30 38 30 30 30 30 30 20 20 2f  s  0x00800000  /
da00: 2a 20 55 6e 63 6f 6d 6d 69 74 74 65 64 20 48 61  * Uncommitted Ha
da10: 73 68 20 74 61 62 6c 65 20 63 68 61 6e 67 65 73  sh table changes
da20: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
da30: 54 45 5f 4c 6f 61 64 45 78 74 46 75 6e 63 20 20  TE_LoadExtFunc  
da40: 20 20 30 78 30 31 30 30 30 30 30 30 20 20 2f 2a    0x01000000  /*
da50: 20 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74   Enable load_ext
da60: 65 6e 73 69 6f 6e 28 29 20 53 51 4c 20 66 75 6e  ension() SQL fun
da70: 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  c */.#define SQL
da80: 49 54 45 5f 50 72 65 66 65 72 42 75 69 6c 74 69  ITE_PreferBuilti
da90: 6e 20 20 30 78 30 32 30 30 30 30 30 30 20 20 2f  n  0x02000000  /
daa0: 2a 20 50 72 65 66 65 72 65 6e 63 65 20 74 6f 20  * Preference to 
dab0: 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 73 20 2a  built-in funcs *
dac0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
dad0: 5f 56 61 63 75 75 6d 20 20 20 20 20 20 20 20 20  _Vacuum         
dae0: 30 78 30 34 30 30 30 30 30 30 20 20 2f 2a 20 43  0x04000000  /* C
daf0: 75 72 72 65 6e 74 6c 79 20 69 6e 20 61 20 56 41  urrently in a VA
db00: 43 55 55 4d 20 2a 2f 0a 2f 2a 20 46 6c 61 67 73  CUUM */./* Flags
db10: 20 75 73 65 64 20 6f 6e 6c 79 20 69 66 20 64 65   used only if de
db20: 62 75 67 67 69 6e 67 20 2a 2f 0a 23 69 66 64 65  bugging */.#ifde
db30: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23  f SQLITE_DEBUG.#
db40: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 71  define SQLITE_Sq
db50: 6c 54 72 61 63 65 20 20 20 20 20 20 20 30 78 30  lTrace       0x0
db60: 38 30 30 30 30 30 30 20 20 2f 2a 20 44 65 62 75  8000000  /* Debu
db70: 67 20 70 72 69 6e 74 20 53 51 4c 20 61 73 20 69  g print SQL as i
db80: 74 20 65 78 65 63 75 74 65 73 20 2a 2f 0a 23 64  t executes */.#d
db90: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62  efine SQLITE_Vdb
dba0: 65 4c 69 73 74 69 6e 67 20 20 20 20 30 78 31 30  eListing    0x10
dbb0: 30 30 30 30 30 30 20 20 2f 2a 20 44 65 62 75 67  000000  /* Debug
dbc0: 20 6c 69 73 74 69 6e 67 73 20 6f 66 20 56 44 42   listings of VDB
dbd0: 45 20 70 72 6f 67 72 61 6d 73 20 2a 2f 0a 23 64  E programs */.#d
dbe0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62  efine SQLITE_Vdb
dbf0: 65 54 72 61 63 65 20 20 20 20 20 20 30 78 32 30  eTrace      0x20
dc00: 30 30 30 30 30 30 20 20 2f 2a 20 54 72 75 65 20  000000  /* True 
dc10: 74 6f 20 74 72 61 63 65 20 56 44 42 45 20 65 78  to trace VDBE ex
dc20: 65 63 75 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  ecution */.#defi
dc30: 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 41 64  ne SQLITE_VdbeAd
dc40: 64 6f 70 54 72 61 63 65 20 30 78 34 30 30 30 30  dopTrace 0x40000
dc50: 30 30 30 20 20 2f 2a 20 54 72 61 63 65 20 73 71  000  /* Trace sq
dc60: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 28 29  lite3VdbeAddOp()
dc70: 20 63 61 6c 6c 73 20 2a 2f 0a 23 64 65 66 69 6e   calls */.#defin
dc80: 65 20 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50  e SQLITE_VdbeEQP
dc90: 20 20 20 20 20 20 20 20 30 78 38 30 30 30 30 30          0x800000
dca0: 30 30 20 20 2f 2a 20 44 65 62 75 67 20 45 58 50  00  /* Debug EXP
dcb0: 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20  LAIN QUERY PLAN 
dcc0: 2a 2f 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a  */.#endif.../*.*
dcd0: 2a 20 42 69 74 73 20 6f 66 20 74 68 65 20 73 71  * Bits of the sq
dce0: 6c 69 74 65 33 2e 64 62 4f 70 74 46 6c 61 67 73  lite3.dbOptFlags
dcf0: 20 66 69 65 6c 64 20 74 68 61 74 20 61 72 65 20   field that are 
dd00: 75 73 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 73  used by the.** s
dd10: 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74  qlite3_test_cont
dd20: 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53 54 43  rol(SQLITE_TESTC
dd30: 54 52 4c 5f 4f 50 54 49 4d 49 5a 41 54 49 4f 4e  TRL_OPTIMIZATION
dd40: 53 2c 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63 65  S,...) interface
dd50: 20 74 6f 0a 2a 2a 20 73 65 6c 65 63 74 69 76 65   to.** selective
dd60: 6c 79 20 64 69 73 61 62 6c 65 20 76 61 72 69 6f  ly disable vario
dd70: 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  us optimizations
dd80: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
dd90: 49 54 45 5f 51 75 65 72 79 46 6c 61 74 74 65 6e  ITE_QueryFlatten
dda0: 65 72 20 30 78 30 30 30 31 20 20 20 2f 2a 20 51  er 0x0001   /* Q
ddb0: 75 65 72 79 20 66 6c 61 74 74 65 6e 69 6e 67 20  uery flattening 
ddc0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
ddd0: 45 5f 43 6f 6c 75 6d 6e 43 61 63 68 65 20 20 20  E_ColumnCache   
dde0: 20 30 78 30 30 30 32 20 20 20 2f 2a 20 43 6f 6c   0x0002   /* Col
ddf0: 75 6d 6e 20 63 61 63 68 65 20 2a 2f 0a 23 64 65  umn cache */.#de
de00: 66 69 6e 65 20 53 51 4c 49 54 45 5f 47 72 6f 75  fine SQLITE_Grou
de10: 70 42 79 4f 72 64 65 72 20 20 20 30 78 30 30 30  pByOrder   0x000
de20: 34 20 20 20 2f 2a 20 47 52 4f 55 50 42 59 20 63  4   /* GROUPBY c
de30: 6f 76 65 72 20 6f 66 20 4f 52 44 45 52 42 59 20  over of ORDERBY 
de40: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
de50: 45 5f 46 61 63 74 6f 72 4f 75 74 43 6f 6e 73 74  E_FactorOutConst
de60: 20 30 78 30 30 30 38 20 20 20 2f 2a 20 43 6f 6e   0x0008   /* Con
de70: 73 74 61 6e 74 20 66 61 63 74 6f 72 69 6e 67 20  stant factoring 
de80: 2a 2f 0a 2f 2a 20 20 20 20 20 20 20 20 20 20 20  */./*           
de90: 20 20 20 20 20 6e 6f 74 20 75 73 65 64 20 20 20       not used   
dea0: 20 30 78 30 30 31 30 20 20 20 2f 2f 20 57 61 73   0x0010   // Was
deb0: 3a 20 53 51 4c 49 54 45 5f 49 64 78 52 65 61 6c  : SQLITE_IdxReal
dec0: 41 73 49 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  AsInt */.#define
ded0: 20 53 51 4c 49 54 45 5f 44 69 73 74 69 6e 63 74   SQLITE_Distinct
dee0: 4f 70 74 20 20 20 20 30 78 30 30 32 30 20 20 20  Opt    0x0020   
def0: 2f 2a 20 44 49 53 54 49 4e 43 54 20 75 73 69 6e  /* DISTINCT usin
df00: 67 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65  g indexes */.#de
df10: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 76 65  fine SQLITE_Cove
df20: 72 49 64 78 53 63 61 6e 20 20 20 30 78 30 30 34  rIdxScan   0x004
df30: 30 20 20 20 2f 2a 20 43 6f 76 65 72 69 6e 67 20  0   /* Covering 
df40: 69 6e 64 65 78 20 73 63 61 6e 73 20 2a 2f 0a 23  index scans */.#
df50: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 72  define SQLITE_Or
df60: 64 65 72 42 79 49 64 78 4a 6f 69 6e 20 30 78 30  derByIdxJoin 0x0
df70: 30 38 30 20 20 20 2f 2a 20 4f 52 44 45 52 20 42  080   /* ORDER B
df80: 59 20 6f 66 20 6a 6f 69 6e 73 20 76 69 61 20 69  Y of joins via i
df90: 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
dfa0: 53 51 4c 49 54 45 5f 53 75 62 71 43 6f 72 6f 75  SQLITE_SubqCorou
dfb0: 74 69 6e 65 20 20 30 78 30 31 30 30 20 20 20 2f  tine  0x0100   /
dfc0: 2a 20 45 76 61 6c 75 61 74 65 20 73 75 62 71 75  * Evaluate subqu
dfd0: 65 72 69 65 73 20 61 73 20 63 6f 72 6f 75 74 69  eries as corouti
dfe0: 6e 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  nes */.#define S
dff0: 51 4c 49 54 45 5f 54 72 61 6e 73 69 74 69 76 65  QLITE_Transitive
e000: 20 20 20 20 20 30 78 30 32 30 30 20 20 20 2f 2a       0x0200   /*
e010: 20 54 72 61 6e 73 69 74 69 76 65 20 63 6f 6e 73   Transitive cons
e020: 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69  traints */.#defi
e030: 6e 65 20 53 51 4c 49 54 45 5f 4f 6d 69 74 4e 6f  ne SQLITE_OmitNo
e040: 6f 70 4a 6f 69 6e 20 20 20 30 78 30 34 30 30 20  opJoin   0x0400 
e050: 20 20 2f 2a 20 4f 6d 69 74 20 75 6e 75 73 65 64    /* Omit unused
e060: 20 74 61 62 6c 65 73 20 69 6e 20 6a 6f 69 6e 73   tables in joins
e070: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e080: 54 45 5f 53 74 61 74 33 34 20 20 20 20 20 20 20  TE_Stat34       
e090: 20 20 30 78 30 38 30 30 20 20 20 2f 2a 20 55 73    0x0800   /* Us
e0a0: 65 20 53 54 41 54 33 20 6f 72 20 53 54 41 54 34  e STAT3 or STAT4
e0b0: 20 64 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e 65   data */.#define
e0c0: 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 4f 66 56   SQLITE_CountOfV
e0d0: 69 65 77 20 20 20 20 30 78 31 30 30 30 20 20 20  iew    0x1000   
e0e0: 2f 2a 20 54 68 65 20 63 6f 75 6e 74 2d 6f 66 2d  /* The count-of-
e0f0: 76 69 65 77 20 6f 70 74 69 6d 69 7a 61 74 69 6f  view optimizatio
e100: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
e110: 49 54 45 5f 43 75 72 73 6f 72 48 69 6e 74 73 20  ITE_CursorHints 
e120: 20 20 20 30 78 32 30 30 30 20 20 20 2f 2a 20 41     0x2000   /* A
e130: 64 64 20 4f 50 5f 43 75 72 73 6f 72 48 69 6e 74  dd OP_CursorHint
e140: 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 23 64 65 66   opcodes */.#def
e150: 69 6e 65 20 53 51 4c 49 54 45 5f 41 6c 6c 4f 70  ine SQLITE_AllOp
e160: 74 73 20 20 20 20 20 20 20 20 30 78 66 66 66 66  ts        0xffff
e170: 20 20 20 2f 2a 20 41 6c 6c 20 6f 70 74 69 6d 69     /* All optimi
e180: 7a 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a  zations */../*.*
e190: 2a 20 4d 61 63 72 6f 73 20 66 6f 72 20 74 65 73  * Macros for tes
e1a0: 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20  ting whether or 
e1b0: 6e 6f 74 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  not optimization
e1c0: 73 20 61 72 65 20 65 6e 61 62 6c 65 64 20 6f 72  s are enabled or
e1d0: 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 64   disabled..*/.#d
e1e0: 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69  efine Optimizati
e1f0: 6f 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d  onDisabled(db, m
e200: 61 73 6b 29 20 20 28 28 28 64 62 29 2d 3e 64 62  ask)  (((db)->db
e210: 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29  OptFlags&(mask))
e220: 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 4f 70 74  !=0).#define Opt
e230: 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64  imizationEnabled
e240: 28 64 62 2c 20 6d 61 73 6b 29 20 20 20 28 28 28  (db, mask)   (((
e250: 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26  db)->dbOptFlags&
e260: 28 6d 61 73 6b 29 29 3d 3d 30 29 0a 0a 2f 2a 0a  (mask))==0)../*.
e270: 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69  ** Return true i
e280: 66 20 69 74 20 4f 4b 20 74 6f 20 66 61 63 74 6f  f it OK to facto
e290: 72 20 63 6f 6e 73 74 61 6e 74 20 65 78 70 72 65  r constant expre
e2a0: 73 73 69 6f 6e 73 20 69 6e 74 6f 20 74 68 65 20  ssions into the 
e2b0: 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a  initialization.*
e2c0: 2a 20 63 6f 64 65 2e 20 54 68 65 20 61 72 67 75  * code. The argu
e2d0: 6d 65 6e 74 20 69 73 20 61 20 50 61 72 73 65 20  ment is a Parse 
e2e0: 6f 62 6a 65 63 74 20 66 6f 72 20 74 68 65 20 63  object for the c
e2f0: 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 2e 0a 2a  ode generator..*
e300: 2f 0a 23 64 65 66 69 6e 65 20 43 6f 6e 73 74 46  /.#define ConstF
e310: 61 63 74 6f 72 4f 6b 28 50 29 20 28 28 50 29 2d  actorOk(P) ((P)-
e320: 3e 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72 29 0a  >okConstFactor).
e330: 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20  ./*.** Possible 
e340: 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 73  values for the s
e350: 71 6c 69 74 65 2e 6d 61 67 69 63 20 66 69 65 6c  qlite.magic fiel
e360: 64 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72  d..** The number
e370: 73 20 61 72 65 20 6f 62 74 61 69 6e 65 64 20 61  s are obtained a
e380: 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 68 61 76  t random and hav
e390: 65 20 6e 6f 20 73 70 65 63 69 61 6c 20 6d 65 61  e no special mea
e3a0: 6e 69 6e 67 2c 20 6f 74 68 65 72 0a 2a 2a 20 74  ning, other.** t
e3b0: 68 61 6e 20 62 65 69 6e 67 20 64 69 73 74 69 6e  han being distin
e3c0: 63 74 20 66 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74  ct from one anot
e3d0: 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  her..*/.#define 
e3e0: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45  SQLITE_MAGIC_OPE
e3f0: 4e 20 20 20 20 20 30 78 61 30 32 39 61 36 39 37  N     0xa029a697
e400: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73    /* Database is
e410: 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   open */.#define
e420: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c   SQLITE_MAGIC_CL
e430: 4f 53 45 44 20 20 20 30 78 39 66 33 63 32 64 33  OSED   0x9f3c2d3
e440: 33 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69  3  /* Database i
e450: 73 20 63 6c 6f 73 65 64 20 2a 2f 0a 23 64 65 66  s closed */.#def
e460: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
e470: 5f 53 49 43 4b 20 20 20 20 20 30 78 34 62 37 37  _SICK     0x4b77
e480: 31 32 39 30 20 20 2f 2a 20 45 72 72 6f 72 20 61  1290  /* Error a
e490: 6e 64 20 61 77 61 69 74 69 6e 67 20 63 6c 6f 73  nd awaiting clos
e4a0: 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  e */.#define SQL
e4b0: 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 20 20  ITE_MAGIC_BUSY  
e4c0: 20 20 20 30 78 66 30 33 62 37 39 30 36 20 20 2f     0xf03b7906  /
e4d0: 2a 20 44 61 74 61 62 61 73 65 20 63 75 72 72 65  * Database curre
e4e0: 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a 23  ntly in use */.#
e4f0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
e500: 47 49 43 5f 45 52 52 4f 52 20 20 20 20 30 78 62  GIC_ERROR    0xb
e510: 35 33 35 37 39 33 30 20 20 2f 2a 20 41 6e 20 53  5357930  /* An S
e520: 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 65 72 72  QLITE_MISUSE err
e530: 6f 72 20 6f 63 63 75 72 72 65 64 20 2a 2f 0a 23  or occurred */.#
e540: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
e550: 47 49 43 5f 5a 4f 4d 42 49 45 20 20 20 30 78 36  GIC_ZOMBIE   0x6
e560: 34 63 66 66 63 37 66 20 20 2f 2a 20 43 6c 6f 73  4cffc7f  /* Clos
e570: 65 20 77 69 74 68 20 6c 61 73 74 20 73 74 61 74  e with last stat
e580: 65 6d 65 6e 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a  ement close */..
e590: 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 66  /*.** Each SQL f
e5a0: 75 6e 63 74 69 6f 6e 20 69 73 20 64 65 66 69 6e  unction is defin
e5b0: 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63  ed by an instanc
e5c0: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
e5d0: 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e  ng.** structure.
e5e0: 20 20 46 6f 72 20 67 6c 6f 62 61 6c 20 62 75 69    For global bui
e5f0: 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 73 20  lt-in functions 
e600: 28 65 78 3a 20 73 75 62 73 74 72 28 29 2c 20 6d  (ex: substr(), m
e610: 61 78 28 29 2c 20 63 6f 75 6e 74 28 29 29 0a 2a  ax(), count()).*
e620: 2a 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  * a pointer to t
e630: 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73  his structure is
e640: 20 68 65 6c 64 20 69 6e 20 74 68 65 20 73 71 6c   held in the sql
e650: 69 74 65 33 42 75 69 6c 74 69 6e 46 75 6e 63 74  ite3BuiltinFunct
e660: 69 6f 6e 73 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20  ions object..** 
e670: 46 6f 72 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69  For per-connecti
e680: 6f 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64  on application-d
e690: 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73  efined functions
e6a0: 2c 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  , a pointer to t
e6b0: 68 69 73 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  his.** structure
e6c0: 20 69 73 20 68 65 6c 64 20 69 6e 20 74 68 65 20   is held in the 
e6d0: 64 62 2d 3e 61 48 61 73 68 20 68 61 73 68 20 74  db->aHash hash t
e6e0: 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  able..**.** The 
e6f0: 75 2e 70 48 61 73 68 20 66 69 65 6c 64 20 69 73  u.pHash field is
e700: 20 75 73 65 64 20 62 79 20 74 68 65 20 67 6c 6f   used by the glo
e710: 62 61 6c 20 62 75 69 6c 74 2d 69 6e 73 2e 20 20  bal built-ins.  
e720: 54 68 65 20 75 2e 70 44 65 73 74 72 75 63 74 6f  The u.pDestructo
e730: 72 0a 2a 2a 20 66 69 65 6c 64 20 69 73 20 75 73  r.** field is us
e740: 65 64 20 62 79 20 70 65 72 2d 63 6f 6e 6e 65 63  ed by per-connec
e750: 74 69 6f 6e 20 61 70 70 2d 64 65 66 20 66 75 6e  tion app-def fun
e760: 63 74 69 6f 6e 73 2e 0a 2a 2f 0a 73 74 72 75 63  ctions..*/.struc
e770: 74 20 46 75 6e 63 44 65 66 20 7b 0a 20 20 69 38  t FuncDef {.  i8
e780: 20 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20 20   nArg;          
e790: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
e7a0: 61 72 67 75 6d 65 6e 74 73 2e 20 20 2d 31 20 6d  arguments.  -1 m
e7b0: 65 61 6e 73 20 75 6e 6c 69 6d 69 74 65 64 20 2a  eans unlimited *
e7c0: 2f 0a 20 20 75 31 36 20 66 75 6e 63 46 6c 61 67  /.  u16 funcFlag
e7d0: 73 3b 20 20 20 20 20 20 20 2f 2a 20 53 6f 6d 65  s;       /* Some
e7e0: 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20   combination of 
e7f0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f  SQLITE_FUNC_* */
e800: 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61  .  void *pUserDa
e810: 74 61 3b 20 20 20 20 20 2f 2a 20 55 73 65 72 20  ta;     /* User 
e820: 64 61 74 61 20 70 61 72 61 6d 65 74 65 72 20 2a  data parameter *
e830: 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 4e 65  /.  FuncDef *pNe
e840: 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74  xt;      /* Next
e850: 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 73   function with s
e860: 61 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f  ame name */.  vo
e870: 69 64 20 28 2a 78 53 46 75 6e 63 29 28 73 71 6c  id (*xSFunc)(sql
e880: 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
e890: 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  t,sqlite3_value*
e8a0: 2a 29 3b 20 2f 2a 20 66 75 6e 63 20 6f 72 20 61  *); /* func or a
e8b0: 67 67 2d 73 74 65 70 20 2a 2f 0a 20 20 76 6f 69  gg-step */.  voi
e8c0: 64 20 28 2a 78 46 69 6e 61 6c 69 7a 65 29 28 73  d (*xFinalize)(s
e8d0: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29  qlite3_context*)
e8e0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
e8f0: 20 20 20 2f 2a 20 41 67 67 20 66 69 6e 61 6c 69     /* Agg finali
e900: 7a 65 72 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  zer */.  const c
e910: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 2f 2a  har *zName;   /*
e920: 20 53 51 4c 20 6e 61 6d 65 20 6f 66 20 74 68 65   SQL name of the
e930: 20 66 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20   function. */.  
e940: 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 46 75 6e 63  union {.    Func
e950: 44 65 66 20 2a 70 48 61 73 68 3b 20 20 20 20 20  Def *pHash;     
e960: 20 2f 2a 20 4e 65 78 74 20 77 69 74 68 20 61 20   /* Next with a 
e970: 64 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 62  different name b
e980: 75 74 20 74 68 65 20 73 61 6d 65 20 68 61 73 68  ut the same hash
e990: 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65 73 74   */.    FuncDest
e9a0: 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75 63  ructor *pDestruc
e9b0: 74 6f 72 3b 20 20 20 2f 2a 20 52 65 66 65 72 65  tor;   /* Refere
e9c0: 6e 63 65 20 63 6f 75 6e 74 65 64 20 64 65 73 74  nce counted dest
e9d0: 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20  ructor function 
e9e0: 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a  */.  } u;.};../*
e9f0: 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74 75  .** This structu
ea00: 72 65 20 65 6e 63 61 70 73 75 6c 61 74 65 73 20  re encapsulates 
ea10: 61 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20  a user-function 
ea20: 64 65 73 74 72 75 63 74 6f 72 20 63 61 6c 6c 62  destructor callb
ea30: 61 63 6b 20 28 61 73 0a 2a 2a 20 63 6f 6e 66 69  ack (as.** confi
ea40: 67 75 72 65 64 20 75 73 69 6e 67 20 63 72 65 61  gured using crea
ea50: 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29  te_function_v2()
ea60: 29 20 61 6e 64 20 61 20 72 65 66 65 72 65 6e 63  ) and a referenc
ea70: 65 20 63 6f 75 6e 74 65 72 2e 20 57 68 65 6e 0a  e counter. When.
ea80: 2a 2a 20 63 72 65 61 74 65 5f 66 75 6e 63 74 69  ** create_functi
ea90: 6f 6e 5f 76 32 28 29 20 69 73 20 63 61 6c 6c 65  on_v2() is calle
eaa0: 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 66 75  d to create a fu
eab0: 6e 63 74 69 6f 6e 20 77 69 74 68 20 61 20 64 65  nction with a de
eac0: 73 74 72 75 63 74 6f 72 2c 0a 2a 2a 20 61 20 73  structor,.** a s
ead0: 69 6e 67 6c 65 20 6f 62 6a 65 63 74 20 6f 66 20  ingle object of 
eae0: 74 68 69 73 20 74 79 70 65 20 69 73 20 61 6c 6c  this type is all
eaf0: 6f 63 61 74 65 64 2e 20 46 75 6e 63 44 65 73 74  ocated. FuncDest
eb00: 72 75 63 74 6f 72 2e 6e 52 65 66 20 69 73 20 73  ructor.nRef is s
eb10: 65 74 20 74 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d  et to.** the num
eb20: 62 65 72 20 6f 66 20 46 75 6e 63 44 65 66 20 6f  ber of FuncDef o
eb30: 62 6a 65 63 74 73 20 63 72 65 61 74 65 64 20 28  bjects created (
eb40: 65 69 74 68 65 72 20 31 20 6f 72 20 33 2c 20 64  either 1 or 3, d
eb50: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74  epending on whet
eb60: 68 65 72 0a 2a 2a 20 6f 72 20 6e 6f 74 20 74 68  her.** or not th
eb70: 65 20 73 70 65 63 69 66 69 65 64 20 65 6e 63 6f  e specified enco
eb80: 64 69 6e 67 20 69 73 20 53 51 4c 49 54 45 5f 41  ding is SQLITE_A
eb90: 4e 59 29 2e 20 54 68 65 20 46 75 6e 63 44 65 66  NY). The FuncDef
eba0: 2e 70 44 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20  .pDestructor.** 
ebb0: 6d 65 6d 62 65 72 20 6f 66 20 65 61 63 68 20 6f  member of each o
ebc0: 66 20 74 68 65 20 6e 65 77 20 46 75 6e 63 44 65  f the new FuncDe
ebd0: 66 20 6f 62 6a 65 63 74 73 20 69 73 20 73 65 74  f objects is set
ebe0: 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65   to point to the
ebf0: 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 46 75   allocated.** Fu
ec00: 6e 63 44 65 73 74 72 75 63 74 6f 72 2e 0a 2a 2a  ncDestructor..**
ec10: 0a 2a 2a 20 54 68 65 72 65 61 66 74 65 72 2c 20  .** Thereafter, 
ec20: 77 68 65 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20  when one of the 
ec30: 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20  FuncDef objects 
ec40: 69 73 20 64 65 6c 65 74 65 64 2c 20 74 68 65 20  is deleted, the 
ec50: 72 65 66 65 72 65 6e 63 65 0a 2a 2a 20 63 6f 75  reference.** cou
ec60: 6e 74 20 6f 6e 20 74 68 69 73 20 6f 62 6a 65 63  nt on this objec
ec70: 74 20 69 73 20 64 65 63 72 65 6d 65 6e 74 65 64  t is decremented
ec80: 2e 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65  . When it reache
ec90: 73 20 30 2c 20 74 68 65 20 64 65 73 74 72 75 63  s 0, the destruc
eca0: 74 6f 72 0a 2a 2a 20 69 73 20 69 6e 76 6f 6b 65  tor.** is invoke
ecb0: 64 20 61 6e 64 20 74 68 65 20 46 75 6e 63 44 65  d and the FuncDe
ecc0: 73 74 72 75 63 74 6f 72 20 73 74 72 75 63 74 75  structor structu
ecd0: 72 65 20 66 72 65 65 64 2e 0a 2a 2f 0a 73 74 72  re freed..*/.str
ece0: 75 63 74 20 46 75 6e 63 44 65 73 74 72 75 63 74  uct FuncDestruct
ecf0: 6f 72 20 7b 0a 20 20 69 6e 74 20 6e 52 65 66 3b  or {.  int nRef;
ed00: 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72  .  void (*xDestr
ed10: 6f 79 29 28 76 6f 69 64 20 2a 29 3b 0a 20 20 76  oy)(void *);.  v
ed20: 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b 0a  oid *pUserData;.
ed30: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62  };../*.** Possib
ed40: 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 46 75  le values for Fu
ed50: 6e 63 44 65 66 2e 66 6c 61 67 73 2e 20 20 4e 6f  ncDef.flags.  No
ed60: 74 65 20 74 68 61 74 20 74 68 65 20 5f 4c 45 4e  te that the _LEN
ed70: 47 54 48 20 61 6e 64 20 5f 54 59 50 45 4f 46 0a  GTH and _TYPEOF.
ed80: 2a 2a 20 76 61 6c 75 65 73 20 6d 75 73 74 20 63  ** values must c
ed90: 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 4f 50 46  orrespond to OPF
eda0: 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e  LAG_LENGTHARG an
edb0: 64 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41  d OPFLAG_TYPEOFA
edc0: 52 47 2e 20 20 41 6e 64 0a 2a 2a 20 53 51 4c 49  RG.  And.** SQLI
edd0: 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
ede0: 20 6d 75 73 74 20 62 65 20 74 68 65 20 73 61 6d   must be the sam
edf0: 65 20 61 73 20 53 51 4c 49 54 45 5f 44 45 54 45  e as SQLITE_DETE
ee00: 52 4d 49 4e 49 53 54 49 43 2e 20 20 54 68 65 72  RMINISTIC.  Ther
ee10: 65 0a 2a 2a 20 61 72 65 20 61 73 73 65 72 74 28  e.** are assert(
ee20: 29 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  ) statements in 
ee30: 74 68 65 20 63 6f 64 65 20 74 6f 20 76 65 72 69  the code to veri
ee40: 66 79 20 74 68 69 73 2e 0a 2a 2a 0a 2a 2a 20 56  fy this..**.** V
ee50: 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73  alue constraints
ee60: 20 28 65 6e 66 6f 72 63 65 64 20 76 69 61 20 61   (enforced via a
ee70: 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20  ssert()):.**    
ee80: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e   SQLITE_FUNC_MIN
ee90: 4d 41 58 20 20 20 20 3d 3d 20 20 4e 43 5f 4d 69  MAX    ==  NC_Mi
eea0: 6e 4d 61 78 41 67 67 20 20 20 20 20 20 3d 3d 20  nMaxAgg      == 
eeb0: 53 46 5f 4d 69 6e 4d 61 78 41 67 67 0a 2a 2a 20  SF_MinMaxAgg.** 
eec0: 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f      SQLITE_FUNC_
eed0: 4c 45 4e 47 54 48 20 20 20 20 3d 3d 20 20 4f 50  LENGTH    ==  OP
eee0: 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 0a 2a  FLAG_LENGTHARG.*
eef0: 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e  *     SQLITE_FUN
ef00: 43 5f 54 59 50 45 4f 46 20 20 20 20 3d 3d 20 20  C_TYPEOF    ==  
ef10: 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47  OPFLAG_TYPEOFARG
ef20: 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46  .**     SQLITE_F
ef30: 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 20 3d 3d  UNC_CONSTANT  ==
ef40: 20 20 53 51 4c 49 54 45 5f 44 45 54 45 52 4d 49    SQLITE_DETERMI
ef50: 4e 49 53 54 49 43 20 66 72 6f 6d 20 74 68 65 20  NISTIC from the 
ef60: 41 50 49 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54  API.**     SQLIT
ef70: 45 5f 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20  E_FUNC_ENCMASK  
ef80: 20 64 65 70 65 6e 64 73 20 6f 6e 20 53 51 4c 49   depends on SQLI
ef90: 54 45 5f 55 54 46 2a 20 6d 61 63 72 6f 73 20 69  TE_UTF* macros i
efa0: 6e 20 74 68 65 20 41 50 49 0a 2a 2f 0a 23 64 65  n the API.*/.#de
efb0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
efc0: 5f 45 4e 43 4d 41 53 4b 20 20 30 78 30 30 30 33  _ENCMASK  0x0003
efd0: 20 2f 2a 20 53 51 4c 49 54 45 5f 55 54 46 38 2c   /* SQLITE_UTF8,
efe0: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20   SQLITE_UTF16BE 
eff0: 6f 72 20 55 54 46 31 36 4c 45 20 2a 2f 0a 23 64  or UTF16LE */.#d
f000: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
f010: 43 5f 4c 49 4b 45 20 20 20 20 20 30 78 30 30 30  C_LIKE     0x000
f020: 34 20 2f 2a 20 43 61 6e 64 69 64 61 74 65 20 66  4 /* Candidate f
f030: 6f 72 20 74 68 65 20 4c 49 4b 45 20 6f 70 74 69  or the LIKE opti
f040: 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  mization */.#def
f050: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
f060: 43 41 53 45 20 20 20 20 20 30 78 30 30 30 38 20  CASE     0x0008 
f070: 2f 2a 20 43 61 73 65 2d 73 65 6e 73 69 74 69 76  /* Case-sensitiv
f080: 65 20 4c 49 4b 45 2d 74 79 70 65 20 66 75 6e 63  e LIKE-type func
f090: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
f0a0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 50 48 45  SQLITE_FUNC_EPHE
f0b0: 4d 20 20 20 20 30 78 30 30 31 30 20 2f 2a 20 45  M    0x0010 /* E
f0c0: 70 68 65 6d 65 72 61 6c 2e 20 20 44 65 6c 65 74  phemeral.  Delet
f0d0: 65 20 77 69 74 68 20 56 44 42 45 20 2a 2f 0a 23  e with VDBE */.#
f0e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
f0f0: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 30 78 30 30  NC_NEEDCOLL 0x00
f100: 32 30 20 2f 2a 20 73 71 6c 69 74 65 33 47 65 74  20 /* sqlite3Get
f110: 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 20 6d 69  FuncCollSeq() mi
f120: 67 68 74 20 62 65 20 63 61 6c 6c 65 64 2a 2f 0a  ght be called*/.
f130: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
f140: 55 4e 43 5f 4c 45 4e 47 54 48 20 20 20 30 78 30  UNC_LENGTH   0x0
f150: 30 34 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20  040 /* Built-in 
f160: 6c 65 6e 67 74 68 28 29 20 66 75 6e 63 74 69 6f  length() functio
f170: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
f180: 49 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20  ITE_FUNC_TYPEOF 
f190: 20 20 30 78 30 30 38 30 20 2f 2a 20 42 75 69 6c    0x0080 /* Buil
f1a0: 74 2d 69 6e 20 74 79 70 65 6f 66 28 29 20 66 75  t-in typeof() fu
f1b0: 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
f1c0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f  e SQLITE_FUNC_CO
f1d0: 55 4e 54 20 20 20 20 30 78 30 31 30 30 20 2f 2a  UNT    0x0100 /*
f1e0: 20 42 75 69 6c 74 2d 69 6e 20 63 6f 75 6e 74 28   Built-in count(
f1f0: 2a 29 20 61 67 67 72 65 67 61 74 65 20 2a 2f 0a  *) aggregate */.
f200: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
f210: 55 4e 43 5f 43 4f 41 4c 45 53 43 45 20 30 78 30  UNC_COALESCE 0x0
f220: 32 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20  200 /* Built-in 
f230: 63 6f 61 6c 65 73 63 65 28 29 20 6f 72 20 69 66  coalesce() or if
f240: 6e 75 6c 6c 28 29 20 2a 2f 0a 23 64 65 66 69 6e  null() */.#defin
f250: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 55 4e  e SQLITE_FUNC_UN
f260: 4c 49 4b 45 4c 59 20 30 78 30 34 30 30 20 2f 2a  LIKELY 0x0400 /*
f270: 20 42 75 69 6c 74 2d 69 6e 20 75 6e 6c 69 6b 65   Built-in unlike
f280: 6c 79 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  ly() function */
f290: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
f2a0: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 30 78  FUNC_CONSTANT 0x
f2b0: 30 38 30 30 20 2f 2a 20 43 6f 6e 73 74 61 6e 74  0800 /* Constant
f2c0: 20 69 6e 70 75 74 73 20 67 69 76 65 20 61 20 63   inputs give a c
f2d0: 6f 6e 73 74 61 6e 74 20 6f 75 74 70 75 74 20 2a  onstant output *
f2e0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
f2f0: 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 20 20 20 30  _FUNC_MINMAX   0
f300: 78 31 30 30 30 20 2f 2a 20 54 72 75 65 20 66 6f  x1000 /* True fo
f310: 72 20 6d 69 6e 28 29 20 61 6e 64 20 6d 61 78 28  r min() and max(
f320: 29 20 61 67 67 72 65 67 61 74 65 73 20 2a 2f 0a  ) aggregates */.
f330: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
f340: 55 4e 43 5f 53 4c 4f 43 48 4e 47 20 20 30 78 32  UNC_SLOCHNG  0x2
f350: 30 30 30 20 2f 2a 20 22 53 6c 6f 77 20 43 68 61  000 /* "Slow Cha
f360: 6e 67 65 22 2e 20 56 61 6c 75 65 20 63 6f 6e 73  nge". Value cons
f370: 74 61 6e 74 20 64 75 72 69 6e 67 20 61 0a 20 20  tant during a.  
f380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f3a0: 20 20 2a 2a 20 73 69 6e 67 6c 65 20 71 75 65 72    ** single quer
f3b0: 79 20 2d 20 6d 69 67 68 74 20 63 68 61 6e 67 65  y - might change
f3c0: 20 6f 76 65 72 20 74 69 6d 65 20 2a 2f 0a 23 64   over time */.#d
f3d0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
f3e0: 43 5f 41 46 46 49 4e 49 54 59 20 30 78 34 30 30  C_AFFINITY 0x400
f3f0: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 61 66  0 /* Built-in af
f400: 66 69 6e 69 74 79 28 29 20 66 75 6e 63 74 69 6f  finity() functio
f410: 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  n */../*.** The 
f420: 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 72 65 65 20  following three 
f430: 6d 61 63 72 6f 73 2c 20 46 55 4e 43 54 49 4f 4e  macros, FUNCTION
f440: 28 29 2c 20 4c 49 4b 45 46 55 4e 43 28 29 20 61  (), LIKEFUNC() a
f450: 6e 64 20 41 47 47 52 45 47 41 54 45 28 29 20 61  nd AGGREGATE() a
f460: 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 72  re.** used to cr
f470: 65 61 74 65 20 74 68 65 20 69 6e 69 74 69 61 6c  eate the initial
f480: 69 7a 65 72 73 20 66 6f 72 20 74 68 65 20 46 75  izers for the Fu
f490: 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65 73  ncDef structures
f4a0: 2e 0a 2a 2a 0a 2a 2a 20 20 20 46 55 4e 43 54 49  ..**.**   FUNCTI
f4b0: 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  ON(zName, nArg, 
f4c0: 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
f4d0: 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f  ).**     Used to
f4e0: 20 63 72 65 61 74 65 20 61 20 73 63 61 6c 61 72   create a scalar
f4f0: 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69   function defini
f500: 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69  tion of a functi
f510: 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20 20  on zName.**     
f520: 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 43  implemented by C
f530: 20 66 75 6e 63 74 69 6f 6e 20 78 46 75 6e 63 20   function xFunc 
f540: 74 68 61 74 20 61 63 63 65 70 74 73 20 6e 41 72  that accepts nAr
f550: 67 20 61 72 67 75 6d 65 6e 74 73 2e 20 54 68 65  g arguments. The
f560: 0a 2a 2a 20 20 20 20 20 76 61 6c 75 65 20 70 61  .**     value pa
f570: 73 73 65 64 20 61 73 20 69 41 72 67 20 69 73 20  ssed as iArg is 
f580: 63 61 73 74 20 74 6f 20 61 20 28 76 6f 69 64 2a  cast to a (void*
f590: 29 20 61 6e 64 20 6d 61 64 65 20 61 76 61 69 6c  ) and made avail
f5a0: 61 62 6c 65 0a 2a 2a 20 20 20 20 20 61 73 20 74  able.**     as t
f5b0: 68 65 20 75 73 65 72 2d 64 61 74 61 20 28 73 71  he user-data (sq
f5c0: 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28  lite3_user_data(
f5d0: 29 29 20 66 6f 72 20 74 68 65 20 66 75 6e 63 74  )) for the funct
f5e0: 69 6f 6e 2e 20 49 66 0a 2a 2a 20 20 20 20 20 61  ion. If.**     a
f5f0: 72 67 75 6d 65 6e 74 20 62 4e 43 20 69 73 20 74  rgument bNC is t
f600: 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20 53 51  rue, then the SQ
f610: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
f620: 4c 4c 20 66 6c 61 67 20 69 73 20 73 65 74 2e 0a  LL flag is set..
f630: 2a 2a 0a 2a 2a 20 20 20 56 46 55 4e 43 54 49 4f  **.**   VFUNCTIO
f640: 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  N(zName, nArg, i
f650: 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
f660: 0a 2a 2a 20 20 20 20 20 4c 69 6b 65 20 46 55 4e  .**     Like FUN
f670: 43 54 49 4f 4e 20 65 78 63 65 70 74 20 69 74 20  CTION except it 
f680: 6f 6d 69 74 73 20 74 68 65 20 53 51 4c 49 54 45  omits the SQLITE
f690: 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66  _FUNC_CONSTANT f
f6a0: 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 44 46 55  lag..**.**   DFU
f6b0: 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
f6c0: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
f6d0: 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b  Func).**     Lik
f6e0: 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63 65 70  e FUNCTION excep
f6f0: 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65 20 53  t it omits the S
f700: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
f710: 41 4e 54 20 66 6c 61 67 20 61 6e 64 0a 2a 2a 20  ANT flag and.** 
f720: 20 20 20 20 61 64 64 73 20 74 68 65 20 53 51 4c      adds the SQL
f730: 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47  ITE_FUNC_SLOCHNG
f740: 20 66 6c 61 67 2e 20 20 55 73 65 64 20 66 6f 72   flag.  Used for
f750: 20 64 61 74 65 20 26 20 74 69 6d 65 20 66 75 6e   date & time fun
f760: 63 74 69 6f 6e 73 0a 2a 2a 20 20 20 20 20 61 6e  ctions.**     an
f770: 64 20 66 75 6e 63 74 69 6f 6e 73 20 6c 69 6b 65  d functions like
f780: 20 73 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28   sqlite_version(
f790: 29 20 74 68 61 74 20 63 61 6e 20 63 68 61 6e 67  ) that can chang
f7a0: 65 2c 20 62 75 74 20 6e 6f 74 20 64 75 72 69 6e  e, but not durin
f7b0: 67 0a 2a 2a 20 20 20 20 20 61 20 73 69 6e 67 6c  g.**     a singl
f7c0: 65 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 20  e query..**.**  
f7d0: 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65   AGGREGATE(zName
f7e0: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
f7f0: 43 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c  C, xStep, xFinal
f800: 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f  ).**     Used to
f810: 20 63 72 65 61 74 65 20 61 6e 20 61 67 67 72 65   create an aggre
f820: 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 64 65  gate function de
f830: 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c 65 6d 65  finition impleme
f840: 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20 20 20 74  nted by.**     t
f850: 68 65 20 43 20 66 75 6e 63 74 69 6f 6e 73 20 78  he C functions x
f860: 53 74 65 70 20 61 6e 64 20 78 46 69 6e 61 6c 2e  Step and xFinal.
f870: 20 54 68 65 20 66 69 72 73 74 20 66 6f 75 72 20   The first four 
f880: 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a 20 20 20  parameters.**   
f890: 20 20 61 72 65 20 69 6e 74 65 72 70 72 65 74 65    are interprete
f8a0: 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61  d in the same wa
f8b0: 79 20 61 73 20 74 68 65 20 66 69 72 73 74 20 34  y as the first 4
f8c0: 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 2a   parameters to.*
f8d0: 2a 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 28 29  *     FUNCTION()
f8e0: 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45 46 55  ..**.**   LIKEFU
f8f0: 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  NC(zName, nArg, 
f900: 70 41 72 67 2c 20 66 6c 61 67 73 29 0a 2a 2a 20  pArg, flags).** 
f910: 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61      Used to crea
f920: 74 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63  te a scalar func
f930: 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20  tion definition 
f940: 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e  of a function zN
f950: 61 6d 65 0a 2a 2a 20 20 20 20 20 74 68 61 74 20  ame.**     that 
f960: 61 63 63 65 70 74 73 20 6e 41 72 67 20 61 72 67  accepts nArg arg
f970: 75 6d 65 6e 74 73 20 61 6e 64 20 69 73 20 69 6d  uments and is im
f980: 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 61 20 63  plemented by a c
f990: 61 6c 6c 20 74 6f 20 43 0a 2a 2a 20 20 20 20 20  all to C.**     
f9a0: 66 75 6e 63 74 69 6f 6e 20 6c 69 6b 65 46 75 6e  function likeFun
f9b0: 63 2e 20 41 72 67 75 6d 65 6e 74 20 70 41 72 67  c. Argument pArg
f9c0: 20 69 73 20 63 61 73 74 20 74 6f 20 61 20 28 76   is cast to a (v
f9d0: 6f 69 64 20 2a 29 20 61 6e 64 20 6d 61 64 65 0a  oid *) and made.
f9e0: 2a 2a 20 20 20 20 20 61 76 61 69 6c 61 62 6c 65  **     available
f9f0: 20 61 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   as the function
fa00: 20 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69   user-data (sqli
fa10: 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29  te3_user_data())
fa20: 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 46 75 6e  . The.**     Fun
fa30: 63 44 65 66 2e 66 6c 61 67 73 20 76 61 72 69 61  cDef.flags varia
fa40: 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20 74 68  ble is set to th
fa50: 65 20 76 61 6c 75 65 20 70 61 73 73 65 64 20 61  e value passed a
fa60: 73 20 74 68 65 20 66 6c 61 67 73 0a 2a 2a 20 20  s the flags.**  
fa70: 20 20 20 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2f     parameter..*/
fa80: 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49 4f  .#define FUNCTIO
fa90: 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  N(zName, nArg, i
faa0: 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
fab0: 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
fac0: 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
fad0: 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e  |SQLITE_UTF8|(bN
fae0: 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  C*SQLITE_FUNC_NE
faf0: 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51  EDCOLL), \.   SQ
fb00: 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28  LITE_INT_TO_PTR(
fb10: 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c  iArg), 0, xFunc,
fb20: 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20   0, #zName, {0} 
fb30: 7d 0a 23 64 65 66 69 6e 65 20 56 46 55 4e 43 54  }.#define VFUNCT
fb40: 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ION(zName, nArg,
fb50: 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   iArg, bNC, xFun
fb60: 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  c) \.  {nArg, SQ
fb70: 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53  LITE_UTF8|(bNC*S
fb80: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
fb90: 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54  OLL), \.   SQLIT
fba0: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72  E_INT_TO_PTR(iAr
fbb0: 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c  g), 0, xFunc, 0,
fbc0: 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23   #zName, {0} }.#
fbd0: 64 65 66 69 6e 65 20 44 46 55 4e 43 54 49 4f 4e  define DFUNCTION
fbe0: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
fbf0: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20  rg, bNC, xFunc) 
fc00: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
fc10: 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53  E_FUNC_SLOCHNG|S
fc20: 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a  QLITE_UTF8|(bNC*
fc30: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
fc40: 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49  COLL), \.   SQLI
fc50: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41  TE_INT_TO_PTR(iA
fc60: 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30  rg), 0, xFunc, 0
fc70: 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a  , #zName, {0} }.
fc80: 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e  #define FUNCTION
fc90: 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  2(zName, nArg, i
fca0: 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 2c  Arg, bNC, xFunc,
fcb0: 20 65 78 74 72 61 46 6c 61 67 73 29 20 5c 0a 20   extraFlags) \. 
fcc0: 20 7b 6e 41 72 67 2c 53 51 4c 49 54 45 5f 46 55   {nArg,SQLITE_FU
fcd0: 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49  NC_CONSTANT|SQLI
fce0: 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c  TE_UTF8|(bNC*SQL
fcf0: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
fd00: 4c 29 7c 65 78 74 72 61 46 6c 61 67 73 2c 5c 0a  L)|extraFlags,\.
fd10: 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
fd20: 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78  _PTR(iArg), 0, x
fd30: 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  Func, 0, #zName,
fd40: 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 53   {0} }.#define S
fd50: 54 52 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d  TR_FUNCTION(zNam
fd60: 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 62  e, nArg, pArg, b
fd70: 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b  NC, xFunc) \.  {
fd80: 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e  nArg, SQLITE_FUN
fd90: 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49 54 45  C_SLOCHNG|SQLITE
fda0: 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54  _UTF8|(bNC*SQLIT
fdb0: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
fdc0: 2c 20 5c 0a 20 20 20 70 41 72 67 2c 20 30 2c 20  , \.   pArg, 0, 
fdd0: 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65  xFunc, 0, #zName
fde0: 2c 20 7d 0a 23 64 65 66 69 6e 65 20 4c 49 4b 45  , }.#define LIKE
fdf0: 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  FUNC(zName, nArg
fe00: 2c 20 61 72 67 2c 20 66 6c 61 67 73 29 20 5c 0a  , arg, flags) \.
fe10: 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f    {nArg, SQLITE_
fe20: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51  FUNC_CONSTANT|SQ
fe30: 4c 49 54 45 5f 55 54 46 38 7c 66 6c 61 67 73 2c  LITE_UTF8|flags,
fe40: 20 5c 0a 20 20 20 28 76 6f 69 64 20 2a 29 61 72   \.   (void *)ar
fe50: 67 2c 20 30 2c 20 6c 69 6b 65 46 75 6e 63 2c 20  g, 0, likeFunc, 
fe60: 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d  0, #zName, {0} }
fe70: 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45 47 41  .#define AGGREGA
fe80: 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  TE(zName, nArg, 
fe90: 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20  arg, nc, xStep, 
fea0: 78 46 69 6e 61 6c 29 20 5c 0a 20 20 7b 6e 41 72  xFinal) \.  {nAr
feb0: 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  g, SQLITE_UTF8|(
fec0: 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  nc*SQLITE_FUNC_N
fed0: 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53  EEDCOLL), \.   S
fee0: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
fef0: 28 61 72 67 29 2c 20 30 2c 20 78 53 74 65 70 2c  (arg), 0, xStep,
ff00: 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 20 7b  xFinal,#zName, {
ff10: 30 7d 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52  0}}.#define AGGR
ff20: 45 47 41 54 45 32 28 7a 4e 61 6d 65 2c 20 6e 41  EGATE2(zName, nA
ff30: 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74  rg, arg, nc, xSt
ff40: 65 70 2c 20 78 46 69 6e 61 6c 2c 20 65 78 74 72  ep, xFinal, extr
ff50: 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72  aFlags) \.  {nAr
ff60: 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  g, SQLITE_UTF8|(
ff70: 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  nc*SQLITE_FUNC_N
ff80: 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c  EEDCOLL)|extraFl
ff90: 61 67 73 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45  ags, \.   SQLITE
ffa0: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29  _INT_TO_PTR(arg)
ffb0: 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61  , 0, xStep,xFina
ffc0: 6c 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 0a  l,#zName, {0}}..
ffd0: 2f 2a 0a 2a 2a 20 41 6c 6c 20 63 75 72 72 65 6e  /*.** All curren
ffe0: 74 20 73 61 76 65 70 6f 69 6e 74 73 20 61 72 65  t savepoints are
fff0: 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e   stored in a lin
10000 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74 69 6e  ked list startin
10010 67 20 61 74 0a 2a 2a 20 73 71 6c 69 74 65 33 2e  g at.** sqlite3.
10020 70 53 61 76 65 70 6f 69 6e 74 2e 20 54 68 65 20  pSavepoint. The 
10030 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e  first element in
10040 20 74 68 65 20 6c 69 73 74 20 69 73 20 74 68 65   the list is the
10050 20 6d 6f 73 74 20 72 65 63 65 6e 74 6c 79 0a 2a   most recently.*
10060 2a 20 6f 70 65 6e 65 64 20 73 61 76 65 70 6f 69  * opened savepoi
10070 6e 74 2e 20 53 61 76 65 70 6f 69 6e 74 73 20 61  nt. Savepoints a
10080 72 65 20 61 64 64 65 64 20 74 6f 20 74 68 65 20  re added to the 
10090 6c 69 73 74 20 62 79 20 74 68 65 20 76 64 62 65  list by the vdbe
100a0 0a 2a 2a 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74  .** OP_Savepoint
100b0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
100c0 0a 73 74 72 75 63 74 20 53 61 76 65 70 6f 69 6e  .struct Savepoin
100d0 74 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  t {.  char *zNam
100e0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
100f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 61 76            /* Sav
10100 65 70 6f 69 6e 74 20 6e 61 6d 65 20 28 6e 75 6c  epoint name (nul
10110 2d 74 65 72 6d 69 6e 61 74 65 64 29 20 2a 2f 0a  -terminated) */.
10120 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 43    i64 nDeferredC
10130 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ons;            
10140 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
10150 6f 66 20 64 65 66 65 72 72 65 64 20 66 6b 20 76  of deferred fk v
10160 69 6f 6c 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69  iolations */.  i
10170 36 34 20 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  64 nDeferredImmC
10180 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ons;            
10190 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
101a0 64 65 66 65 72 72 65 64 20 69 6d 6d 20 66 6b 2e  deferred imm fk.
101b0 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20   */.  Savepoint 
101c0 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
101d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72            /* Par
101e0 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 20 28 69  ent savepoint (i
101f0 66 20 61 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  f any) */.};../*
10200 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
10210 67 20 61 72 65 20 75 73 65 64 20 61 73 20 74 68  g are used as th
10220 65 20 73 65 63 6f 6e 64 20 70 61 72 61 6d 65 74  e second paramet
10230 65 72 20 74 6f 20 73 71 6c 69 74 65 33 53 61 76  er to sqlite3Sav
10240 65 70 6f 69 6e 74 28 29 2c 0a 2a 2a 20 61 6e 64  epoint(),.** and
10250 20 61 73 20 74 68 65 20 50 31 20 61 72 67 75 6d   as the P1 argum
10260 65 6e 74 20 74 6f 20 74 68 65 20 4f 50 5f 53 61  ent to the OP_Sa
10270 76 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74  vepoint instruct
10280 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ion..*/.#define 
10290 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20  SAVEPOINT_BEGIN 
102a0 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53       0.#define S
102b0 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45  AVEPOINT_RELEASE
102c0 20 20 20 20 31 0a 23 64 65 66 69 6e 65 20 53 41      1.#define SA
102d0 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b  VEPOINT_ROLLBACK
102e0 20 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63     2.../*.** Eac
102f0 68 20 53 51 4c 69 74 65 20 6d 6f 64 75 6c 65 20  h SQLite module 
10300 28 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 64  (virtual table d
10310 65 66 69 6e 69 74 69 6f 6e 29 20 69 73 20 64 65  efinition) is de
10320 66 69 6e 65 64 20 62 79 20 61 6e 0a 2a 2a 20 69  fined by an.** i
10330 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
10340 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
10350 72 65 2c 20 73 74 6f 72 65 64 20 69 6e 20 74 68  re, stored in th
10360 65 20 73 71 6c 69 74 65 33 2e 61 4d 6f 64 75 6c  e sqlite3.aModul
10370 65 0a 2a 2a 20 68 61 73 68 20 74 61 62 6c 65 2e  e.** hash table.
10380 0a 2a 2f 0a 73 74 72 75 63 74 20 4d 6f 64 75 6c  .*/.struct Modul
10390 65 20 7b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69  e {.  const sqli
103a0 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
103b0 75 6c 65 3b 20 20 20 20 20 20 20 2f 2a 20 43 61  ule;       /* Ca
103c0 6c 6c 62 61 63 6b 20 70 6f 69 6e 74 65 72 73 20  llback pointers 
103d0 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
103e0 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
103f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
10400 65 20 70 61 73 73 65 64 20 74 6f 20 63 72 65 61  e passed to crea
10410 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20  te_module() */. 
10420 20 76 6f 69 64 20 2a 70 41 75 78 3b 20 20 20 20   void *pAux;    
10430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10440 20 20 20 20 20 20 2f 2a 20 70 41 75 78 20 70 61        /* pAux pa
10450 73 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d  ssed to create_m
10460 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69  odule() */.  voi
10470 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f  d (*xDestroy)(vo
10480 69 64 20 2a 29 3b 20 20 20 20 20 20 20 20 20 20  id *);          
10490 20 20 2f 2a 20 4d 6f 64 75 6c 65 20 64 65 73 74    /* Module dest
104a0 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20  ructor function 
104b0 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 45 70 6f  */.  Table *pEpo
104c0 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  Tab;            
104d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 70 6f            /* Epo
104e0 6e 79 6d 6f 75 73 20 74 61 62 6c 65 20 66 6f 72  nymous table for
104f0 20 74 68 69 73 20 6d 6f 64 75 6c 65 20 2a 2f 0a   this module */.
10500 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f 72 6d  };../*.** inform
10510 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68  ation about each
10520 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20 53 51   column of an SQ
10530 4c 20 74 61 62 6c 65 20 69 73 20 68 65 6c 64 20  L table is held 
10540 69 6e 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a  in an instance.*
10550 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  * of this struct
10560 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43  ure..*/.struct C
10570 6f 6c 75 6d 6e 20 7b 0a 20 20 63 68 61 72 20 2a  olumn {.  char *
10580 7a 4e 61 6d 65 3b 20 20 20 20 20 2f 2a 20 4e 61  zName;     /* Na
10590 6d 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d  me of this colum
105a0 6e 2c 20 5c 30 30 30 2c 20 74 68 65 6e 20 74 68  n, \000, then th
105b0 65 20 74 79 70 65 20 2a 2f 0a 20 20 45 78 70 72  e type */.  Expr
105c0 20 2a 70 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20   *pDflt;     /* 
105d0 44 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66  Default value of
105e0 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   this column */.
105f0 20 20 63 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20    char *zColl;  
10600 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20     /* Collating 
10610 73 65 71 75 65 6e 63 65 2e 20 20 49 66 20 4e 55  sequence.  If NU
10620 4c 4c 2c 20 75 73 65 20 74 68 65 20 64 65 66 61  LL, use the defa
10630 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e  ult */.  u8 notN
10640 75 6c 6c 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20  ull;      /* An 
10650 4f 45 5f 20 63 6f 64 65 20 66 6f 72 20 68 61 6e  OE_ code for han
10660 64 6c 69 6e 67 20 61 20 4e 4f 54 20 4e 55 4c 4c  dling a NOT NULL
10670 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 20   constraint */. 
10680 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20   char affinity; 
10690 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20    /* One of the 
106a0 53 51 4c 49 54 45 5f 41 46 46 5f 2e 2e 2e 20 76  SQLITE_AFF_... v
106b0 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20 73 7a  alues */.  u8 sz
106c0 45 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 45  Est;        /* E
106d0 73 74 69 6d 61 74 65 64 20 73 69 7a 65 20 6f 66  stimated size of
106e0 20 76 61 6c 75 65 20 69 6e 20 74 68 69 73 20 63   value in this c
106f0 6f 6c 75 6d 6e 2e 20 73 69 7a 65 6f 66 28 49 4e  olumn. sizeof(IN
10700 54 29 3d 3d 31 20 2a 2f 0a 20 20 75 38 20 63 6f  T)==1 */.  u8 co
10710 6c 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 42  lFlags;     /* B
10720 6f 6f 6c 65 61 6e 20 70 72 6f 70 65 72 74 69 65  oolean propertie
10730 73 2e 20 20 53 65 65 20 43 4f 4c 46 4c 41 47 5f  s.  See COLFLAG_
10740 20 64 65 66 69 6e 65 73 20 62 65 6c 6f 77 20 2a   defines below *
10750 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64  /.};../* Allowed
10760 20 76 61 6c 75 65 73 20 66 6f 72 20 43 6f 6c 75   values for Colu
10770 6d 6e 2e 63 6f 6c 46 6c 61 67 73 3a 0a 2a 2f 0a  mn.colFlags:.*/.
10780 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f  #define COLFLAG_
10790 50 52 49 4d 4b 45 59 20 20 30 78 30 30 30 31 20  PRIMKEY  0x0001 
107a0 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 69 73 20     /* Column is 
107b0 70 61 72 74 20 6f 66 20 74 68 65 20 70 72 69 6d  part of the prim
107c0 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69  ary key */.#defi
107d0 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45  ne COLFLAG_HIDDE
107e0 4e 20 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a  N   0x0002    /*
107f0 20 41 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e   A hidden column
10800 20 69 6e 20 61 20 76 69 72 74 75 61 6c 20 74 61   in a virtual ta
10810 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43  ble */.#define C
10820 4f 4c 46 4c 41 47 5f 48 41 53 54 59 50 45 20 20  OLFLAG_HASTYPE  
10830 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54 79 70  0x0004    /* Typ
10840 65 20 6e 61 6d 65 20 66 6f 6c 6c 6f 77 73 20 63  e name follows c
10850 6f 6c 75 6d 6e 20 6e 61 6d 65 20 2a 2f 0a 0a 2f  olumn name */../
10860 2a 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61 74 69 6e  *.** A "Collatin
10870 67 20 53 65 71 75 65 6e 63 65 22 20 69 73 20 64  g Sequence" is d
10880 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73  efined by an ins
10890 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
108a0 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74  lowing.** struct
108b0 75 72 65 2e 20 43 6f 6e 63 65 70 74 75 61 6c 6c  ure. Conceptuall
108c0 79 2c 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 73  y, a collating s
108d0 65 71 75 65 6e 63 65 20 63 6f 6e 73 69 73 74 73  equence consists
108e0 20 6f 66 20 61 20 6e 61 6d 65 20 61 6e 64 0a 2a   of a name and.*
108f0 2a 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 20 72  * a comparison r
10900 6f 75 74 69 6e 65 20 74 68 61 74 20 64 65 66 69  outine that defi
10910 6e 65 73 20 74 68 65 20 6f 72 64 65 72 20 6f 66  nes the order of
10920 20 74 68 61 74 20 73 65 71 75 65 6e 63 65 2e 0a   that sequence..
10930 2a 2a 0a 2a 2a 20 49 66 20 43 6f 6c 6c 53 65 71  **.** If CollSeq
10940 2e 78 43 6d 70 20 69 73 20 4e 55 4c 4c 2c 20 69  .xCmp is NULL, i
10950 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  t means that the
10960 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  .** collating se
10970 71 75 65 6e 63 65 20 69 73 20 75 6e 64 65 66 69  quence is undefi
10980 6e 65 64 2e 20 20 49 6e 64 69 63 65 73 20 62 75  ned.  Indices bu
10990 69 6c 74 20 6f 6e 20 61 6e 20 75 6e 64 65 66 69  ilt on an undefi
109a0 6e 65 64 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67  ned.** collating
109b0 20 73 65 71 75 65 6e 63 65 20 6d 61 79 20 6e 6f   sequence may no
109c0 74 20 62 65 20 72 65 61 64 20 6f 72 20 77 72 69  t be read or wri
109d0 74 74 65 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tten..*/.struct 
109e0 43 6f 6c 6c 53 65 71 20 7b 0a 20 20 63 68 61 72  CollSeq {.  char
109f0 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
10a00 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
10a10 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
10a20 6e 63 65 2c 20 55 54 46 2d 38 20 65 6e 63 6f 64  nce, UTF-8 encod
10a30 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20  ed */.  u8 enc; 
10a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
10a50 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 68   Text encoding h
10a60 61 6e 64 6c 65 64 20 62 79 20 78 43 6d 70 28 29  andled by xCmp()
10a70 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65   */.  void *pUse
10a80 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  r;          /* F
10a90 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f  irst argument to
10aa0 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20 69 6e 74   xCmp() */.  int
10ab0 20 28 2a 78 43 6d 70 29 28 76 6f 69 64 2a 2c 69   (*xCmp)(void*,i
10ac0 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c  nt, const void*,
10ad0 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64   int, const void
10ae0 2a 29 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65  *);.  void (*xDe
10af0 6c 29 28 76 6f 69 64 2a 29 3b 20 20 2f 2a 20 44  l)(void*);  /* D
10b00 65 73 74 72 75 63 74 6f 72 20 66 6f 72 20 70 55  estructor for pU
10b10 73 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  ser */.};../*.**
10b20 20 41 20 73 6f 72 74 20 6f 72 64 65 72 20 63 61   A sort order ca
10b30 6e 20 62 65 20 65 69 74 68 65 72 20 41 53 43 20  n be either ASC 
10b40 6f 72 20 44 45 53 43 2e 0a 2a 2f 0a 23 64 65 66  or DESC..*/.#def
10b50 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 41 53  ine SQLITE_SO_AS
10b60 43 20 20 20 20 20 20 20 30 20 20 2f 2a 20 53 6f  C       0  /* So
10b70 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20  rt in ascending 
10b80 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65  order */.#define
10b90 20 53 51 4c 49 54 45 5f 53 4f 5f 44 45 53 43 20   SQLITE_SO_DESC 
10ba0 20 20 20 20 20 31 20 20 2f 2a 20 53 6f 72 74 20       1  /* Sort 
10bb0 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64  in ascending ord
10bc0 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  er */.#define SQ
10bd0 4c 49 54 45 5f 53 4f 5f 55 4e 44 45 46 49 4e 45  LITE_SO_UNDEFINE
10be0 44 20 2d 31 20 2f 2a 20 4e 6f 20 73 6f 72 74 20  D -1 /* No sort 
10bf0 6f 72 64 65 72 20 73 70 65 63 69 66 69 65 64 20  order specified 
10c00 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e  */../*.** Column
10c10 20 61 66 66 69 6e 69 74 79 20 74 79 70 65 73 2e   affinity types.
10c20 0a 2a 2a 0a 2a 2a 20 54 68 65 73 65 20 75 73 65  .**.** These use
10c30 64 20 74 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e  d to have mnemon
10c40 69 63 20 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27  ic name like 'i'
10c50 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f   for SQLITE_AFF_
10c60 49 4e 54 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27  INTEGER and.** '
10c70 74 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46  t' for SQLITE_AF
10c80 46 5f 54 45 58 54 2e 20 20 42 75 74 20 77 65 20  F_TEXT.  But we 
10c90 63 61 6e 20 73 61 76 65 20 61 20 6c 69 74 74 6c  can save a littl
10ca0 65 20 73 70 61 63 65 20 61 6e 64 20 69 6d 70 72  e space and impr
10cb0 6f 76 65 0a 2a 2a 20 74 68 65 20 73 70 65 65 64  ove.** the speed
10cc0 20 61 20 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d   a little by num
10cd0 62 65 72 69 6e 67 20 74 68 65 20 76 61 6c 75 65  bering the value
10ce0 73 20 63 6f 6e 73 65 63 75 74 69 76 65 6c 79 2e  s consecutively.
10cf0 0a 2a 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68 65  .**.** But rathe
10d00 72 20 74 68 61 6e 20 73 74 61 72 74 20 77 69 74  r than start wit
10d10 68 20 30 20 6f 72 20 31 2c 20 77 65 20 62 65 67  h 0 or 1, we beg
10d20 69 6e 20 77 69 74 68 20 27 41 27 2e 20 20 54 68  in with 'A'.  Th
10d30 61 74 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e 20  at way,.** when 
10d40 6d 75 6c 74 69 70 6c 65 20 61 66 66 69 6e 69 74  multiple affinit
10d50 79 20 74 79 70 65 73 20 61 72 65 20 63 6f 6e 63  y types are conc
10d60 61 74 65 6e 61 74 65 64 20 69 6e 74 6f 20 61 20  atenated into a 
10d70 73 74 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75 73  string and.** us
10d80 65 64 20 61 73 20 74 68 65 20 50 34 20 6f 70 65  ed as the P4 ope
10d90 72 61 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c 20  rand, they will 
10da0 62 65 20 6d 6f 72 65 20 72 65 61 64 61 62 6c 65  be more readable
10db0 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73  ..**.** Note als
10dc0 6f 20 74 68 61 74 20 74 68 65 20 6e 75 6d 65 72  o that the numer
10dd0 69 63 20 74 79 70 65 73 20 61 72 65 20 67 72 6f  ic types are gro
10de0 75 70 65 64 20 74 6f 67 65 74 68 65 72 20 73 6f  uped together so
10df0 20 74 68 61 74 20 74 65 73 74 69 6e 67 0a 2a 2a   that testing.**
10e00 20 66 6f 72 20 61 20 6e 75 6d 65 72 69 63 20 74   for a numeric t
10e10 79 70 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20  ype is a single 
10e20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 41 6e 64  comparison.  And
10e30 20 74 68 65 20 42 4c 4f 42 20 74 79 70 65 20 69   the BLOB type i
10e40 73 20 66 69 72 73 74 2e 0a 2a 2f 0a 23 64 65 66  s first..*/.#def
10e50 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 42  ine SQLITE_AFF_B
10e60 4c 4f 42 20 20 20 20 20 27 41 27 0a 23 64 65 66  LOB     'A'.#def
10e70 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 54  ine SQLITE_AFF_T
10e80 45 58 54 20 20 20 20 20 27 42 27 0a 23 64 65 66  EXT     'B'.#def
10e90 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e  ine SQLITE_AFF_N
10ea0 55 4d 45 52 49 43 20 20 27 43 27 0a 23 64 65 66  UMERIC  'C'.#def
10eb0 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 49  ine SQLITE_AFF_I
10ec0 4e 54 45 47 45 52 20 20 27 44 27 0a 23 64 65 66  NTEGER  'D'.#def
10ed0 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 52  ine SQLITE_AFF_R
10ee0 45 41 4c 20 20 20 20 20 27 45 27 0a 0a 23 64 65  EAL     'E'..#de
10ef0 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 75  fine sqlite3IsNu
10f00 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 58 29  mericAffinity(X)
10f10 20 20 28 28 58 29 3e 3d 53 51 4c 49 54 45 5f 41    ((X)>=SQLITE_A
10f20 46 46 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a  FF_NUMERIC)../*.
10f30 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46  ** The SQLITE_AF
10f40 46 5f 4d 41 53 4b 20 76 61 6c 75 65 73 20 6d 61  F_MASK values ma
10f50 73 6b 73 20 6f 66 66 20 74 68 65 20 73 69 67 6e  sks off the sign
10f60 69 66 69 63 61 6e 74 20 62 69 74 73 20 6f 66 20  ificant bits of 
10f70 61 6e 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 76  an.** affinity v
10f80 61 6c 75 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  alue..*/.#define
10f90 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b   SQLITE_AFF_MASK
10fa0 20 20 20 20 20 30 78 34 37 0a 0a 2f 2a 0a 2a 2a       0x47../*.**
10fb0 20 41 64 64 69 74 69 6f 6e 61 6c 20 62 69 74 20   Additional bit 
10fc0 76 61 6c 75 65 73 20 74 68 61 74 20 63 61 6e 20  values that can 
10fd0 62 65 20 4f 52 65 64 20 77 69 74 68 20 61 6e 20  be ORed with an 
10fe0 61 66 66 69 6e 69 74 79 20 77 69 74 68 6f 75 74  affinity without
10ff0 0a 2a 2a 20 63 68 61 6e 67 69 6e 67 20 74 68 65  .** changing the
11000 20 61 66 66 69 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a   affinity..**.**
11010 20 54 68 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e   The SQLITE_NOTN
11020 55 4c 4c 20 66 6c 61 67 20 69 73 20 61 20 63 6f  ULL flag is a co
11030 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 4e 55 4c  mbination of NUL
11040 4c 45 51 20 61 6e 64 20 4a 55 4d 50 49 46 4e 55  LEQ and JUMPIFNU
11050 4c 4c 2e 0a 2a 2a 20 49 74 20 63 61 75 73 65 73  LL..** It causes
11060 20 61 6e 20 61 73 73 65 72 74 28 29 20 74 6f 20   an assert() to 
11070 66 69 72 65 20 69 66 20 65 69 74 68 65 72 20 6f  fire if either o
11080 70 65 72 61 6e 64 20 74 6f 20 61 20 63 6f 6d 70  perand to a comp
11090 61 72 69 73 6f 6e 0a 2a 2a 20 6f 70 65 72 61 74  arison.** operat
110a0 6f 72 20 69 73 20 4e 55 4c 4c 2e 20 20 49 74 20  or is NULL.  It 
110b0 69 73 20 61 64 64 65 64 20 74 6f 20 63 65 72 74  is added to cert
110c0 61 69 6e 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f  ain comparison o
110d0 70 65 72 61 74 6f 72 73 20 74 6f 0a 2a 2a 20 70  perators to.** p
110e0 72 6f 76 65 20 74 68 61 74 20 74 68 65 20 6f 70  rove that the op
110f0 65 72 61 6e 64 73 20 61 72 65 20 61 6c 77 61 79  erands are alway
11100 73 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23  s NOT NULL..*/.#
11110 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4b 45  define SQLITE_KE
11120 45 50 4e 55 4c 4c 20 20 20 20 20 30 78 30 38 20  EPNULL     0x08 
11130 20 2f 2a 20 55 73 65 64 20 62 79 20 76 65 63 74   /* Used by vect
11140 6f 72 20 3d 3d 20 6f 72 20 3c 3e 20 2a 2f 0a 23  or == or <> */.#
11150 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4a 55  define SQLITE_JU
11160 4d 50 49 46 4e 55 4c 4c 20 20 20 30 78 31 30 20  MPIFNULL   0x10 
11170 20 2f 2a 20 6a 75 6d 70 73 20 69 66 20 65 69 74   /* jumps if eit
11180 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
11190 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ULL */.#define S
111a0 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 20 20  QLITE_STOREP2   
111b0 20 20 20 30 78 32 30 20 20 2f 2a 20 53 74 6f 72     0x20  /* Stor
111c0 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 5b  e result in reg[
111d0 50 32 5d 20 72 61 74 68 65 72 20 74 68 61 6e 20  P2] rather than 
111e0 6a 75 6d 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20  jump */.#define 
111f0 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 20 20  SQLITE_NULLEQ   
11200 20 20 20 20 30 78 38 30 20 20 2f 2a 20 4e 55 4c      0x80  /* NUL
11210 4c 3d 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e  L=NULL */.#defin
11220 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c  e SQLITE_NOTNULL
11230 20 20 20 20 20 20 30 78 39 30 20 20 2f 2a 20 41        0x90  /* A
11240 73 73 65 72 74 20 74 68 61 74 20 6f 70 65 72 61  ssert that opera
11250 6e 64 73 20 61 72 65 20 6e 65 76 65 72 20 4e 55  nds are never NU
11260 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  LL */../*.** An 
11270 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74  object of this t
11280 79 70 65 20 69 73 20 63 72 65 61 74 65 64 20 66  ype is created f
11290 6f 72 20 65 61 63 68 20 76 69 72 74 75 61 6c 20  or each virtual 
112a0 74 61 62 6c 65 20 70 72 65 73 65 6e 74 20 69 6e  table present in
112b0 0a 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73 65  .** the database
112c0 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 49   schema..**.** I
112d0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  f the database s
112e0 63 68 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c  chema is shared,
112f0 20 74 68 65 6e 20 74 68 65 72 65 20 69 73 20 6f   then there is o
11300 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  ne instance of t
11310 68 69 73 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  his.** structure
11320 20 66 6f 72 20 65 61 63 68 20 64 61 74 61 62 61   for each databa
11330 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 28 73  se connection (s
11340 71 6c 69 74 65 33 2a 29 20 74 68 61 74 20 75 73  qlite3*) that us
11350 65 73 20 74 68 65 20 73 68 61 72 65 64 0a 2a 2a  es the shared.**
11360 20 73 63 68 65 6d 61 2e 20 54 68 69 73 20 69 73   schema. This is
11370 20 62 65 63 61 75 73 65 20 65 61 63 68 20 64 61   because each da
11380 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
11390 6e 20 72 65 71 75 69 72 65 73 20 69 74 73 20 6f  n requires its o
113a0 77 6e 20 75 6e 69 71 75 65 0a 2a 2a 20 69 6e 73  wn unique.** ins
113b0 74 61 6e 63 65 20 6f 66 20 74 68 65 20 73 71 6c  tance of the sql
113c0 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c  ite3_vtab* handl
113d0 65 20 75 73 65 64 20 74 6f 20 61 63 63 65 73 73  e used to access
113e0 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
113f0 6c 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61  le.** implementa
11400 74 69 6f 6e 2e 20 73 71 6c 69 74 65 33 5f 76 74  tion. sqlite3_vt
11410 61 62 2a 20 68 61 6e 64 6c 65 73 20 63 61 6e 20  ab* handles can 
11420 6e 6f 74 20 62 65 20 73 68 61 72 65 64 20 62 65  not be shared be
11430 74 77 65 65 6e 0a 2a 2a 20 64 61 74 61 62 61 73  tween.** databas
11440 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20 65  e connections, e
11450 76 65 6e 20 77 68 65 6e 20 74 68 65 20 72 65 73  ven when the res
11460 74 20 6f 66 20 74 68 65 20 69 6e 2d 6d 65 6d 6f  t of the in-memo
11470 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 73  ry database.** s
11480 63 68 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c  chema is shared,
11490 20 61 73 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e   as the implemen
114a0 74 61 74 69 6f 6e 20 6f 66 74 65 6e 20 73 74 6f  tation often sto
114b0 72 65 73 20 74 68 65 20 64 61 74 61 62 61 73 65  res the database
114c0 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  .** connection h
114d0 61 6e 64 6c 65 20 70 61 73 73 65 64 20 74 6f 20  andle passed to 
114e0 69 74 20 76 69 61 20 74 68 65 20 78 43 6f 6e 6e  it via the xConn
114f0 65 63 74 28 29 20 6f 72 20 78 43 72 65 61 74 65  ect() or xCreate
11500 28 29 20 6d 65 74 68 6f 64 0a 2a 2a 20 64 75 72  () method.** dur
11510 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ing initializati
11520 6f 6e 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 20 54  on internally. T
11530 68 69 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e  his database con
11540 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 6d  nection handle m
11550 61 79 0a 2a 2a 20 74 68 65 6e 20 62 65 20 75 73  ay.** then be us
11560 65 64 20 62 79 20 74 68 65 20 76 69 72 74 75 61  ed by the virtua
11570 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e  l table implemen
11580 74 61 74 69 6f 6e 20 74 6f 20 61 63 63 65 73 73  tation to access
11590 20 72 65 61 6c 20 74 61 62 6c 65 73 0a 2a 2a 20   real tables.** 
115a0 77 69 74 68 69 6e 20 74 68 65 20 64 61 74 61 62  within the datab
115b0 61 73 65 2e 20 53 6f 20 74 68 61 74 20 74 68 65  ase. So that the
115c0 79 20 61 70 70 65 61 72 20 61 73 20 70 61 72 74  y appear as part
115d0 20 6f 66 20 74 68 65 20 63 61 6c 6c 65 72 73 0a   of the callers.
115e0 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20  ** transaction, 
115f0 74 68 65 73 65 20 61 63 63 65 73 73 65 73 20 6e  these accesses n
11600 65 65 64 20 74 6f 20 62 65 20 6d 61 64 65 20 76  eed to be made v
11610 69 61 20 74 68 65 20 73 61 6d 65 20 64 61 74 61  ia the same data
11620 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69  base.** connecti
11630 6f 6e 20 61 73 20 74 68 61 74 20 75 73 65 64 20  on as that used 
11640 74 6f 20 65 78 65 63 75 74 65 20 53 51 4c 20 6f  to execute SQL o
11650 70 65 72 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65  perations on the
11660 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a   virtual table..
11670 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65  **.** All VTable
11680 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20 63 6f   objects that co
11690 72 72 65 73 70 6f 6e 64 20 74 6f 20 61 20 73 69  rrespond to a si
116a0 6e 67 6c 65 20 74 61 62 6c 65 20 69 6e 20 61 20  ngle table in a 
116b0 73 68 61 72 65 64 0a 2a 2a 20 64 61 74 61 62 61  shared.** databa
116c0 73 65 20 73 63 68 65 6d 61 20 61 72 65 20 69 6e  se schema are in
116d0 69 74 69 61 6c 6c 79 20 73 74 6f 72 65 64 20 69  itially stored i
116e0 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20  n a linked-list 
116f0 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a  pointed to by.**
11700 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62   the Table.pVTab
11710 6c 65 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62  le member variab
11720 6c 65 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73  le of the corres
11730 70 6f 6e 64 69 6e 67 20 54 61 62 6c 65 20 6f 62  ponding Table ob
11740 6a 65 63 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e  ject..** When an
11750 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
11760 28 29 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20  () operation is 
11770 72 65 71 75 69 72 65 64 20 74 6f 20 61 63 63 65  required to acce
11780 73 73 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a  ss the virtual.*
11790 2a 20 74 61 62 6c 65 2c 20 69 74 20 73 65 61 72  * table, it sear
117a0 63 68 65 73 20 74 68 65 20 6c 69 73 74 20 66 6f  ches the list fo
117b0 72 20 74 68 65 20 56 54 61 62 6c 65 20 74 68 61  r the VTable tha
117c0 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
117d0 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65   the.** database
117e0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e   connection doin
117f0 67 20 74 68 65 20 70 72 65 70 61 72 69 6e 67 20  g the preparing 
11800 73 6f 20 61 73 20 74 6f 20 75 73 65 20 74 68 65  so as to use the
11810 20 63 6f 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69   correct.** sqli
11820 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65  te3_vtab* handle
11830 20 69 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 64   in the compiled
11840 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68   query..**.** Wh
11850 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20  en an in-memory 
11860 54 61 62 6c 65 20 6f 62 6a 65 63 74 20 69 73 20  Table object is 
11870 64 65 6c 65 74 65 64 20 28 66 6f 72 20 65 78 61  deleted (for exa
11880 6d 70 6c 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a  mple when the.**
11890 20 73 63 68 65 6d 61 20 69 73 20 62 65 69 6e 67   schema is being
118a0 20 72 65 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f   reloaded for so
118b0 6d 65 20 72 65 61 73 6f 6e 29 2c 20 74 68 65 20  me reason), the 
118c0 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 61  VTable objects a
118d0 72 65 20 6e 6f 74 0a 2a 2a 20 64 65 6c 65 74 65  re not.** delete
118e0 64 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74 65  d and the sqlite
118f0 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20  3_vtab* handles 
11900 61 72 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e  are not xDisconn
11910 65 63 74 28 29 65 64 0a 2a 2a 20 69 6d 6d 65 64  ect()ed.** immed
11920 69 61 74 65 6c 79 2e 20 49 6e 73 74 65 61 64 2c  iately. Instead,
11930 20 74 68 65 79 20 61 72 65 20 6d 6f 76 65 64 20   they are moved 
11940 66 72 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e 70  from the Table.p
11950 56 54 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a 2a  VTable list to.*
11960 2a 20 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65 64  * another linked
11970 20 6c 69 73 74 20 68 65 61 64 65 64 20 62 79 20   list headed by 
11980 74 68 65 20 73 71 6c 69 74 65 33 2e 70 44 69 73  the sqlite3.pDis
11990 63 6f 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20 6f  connect member o
119a0 66 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70  f the.** corresp
119b0 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 20 73  onding sqlite3 s
119c0 74 72 75 63 74 75 72 65 2e 20 54 68 65 79 20 61  tructure. They a
119d0 72 65 20 74 68 65 6e 20 64 65 6c 65 74 65 64 2f  re then deleted/
119e0 78 44 69 73 63 6f 6e 6e 65 63 74 65 64 0a 2a 2a  xDisconnected.**
119f0 20 6e 65 78 74 20 74 69 6d 65 20 61 20 73 74 61   next time a sta
11a00 74 65 6d 65 6e 74 20 69 73 20 70 72 65 70 61 72  tement is prepar
11a10 65 64 20 75 73 69 6e 67 20 73 61 69 64 20 73 71  ed using said sq
11a20 6c 69 74 65 33 2a 2e 20 54 68 69 73 20 69 73 20  lite3*. This is 
11a30 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64  done.** to avoid
11a40 20 64 65 61 64 6c 6f 63 6b 20 69 73 73 75 65 73   deadlock issues
11a50 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69   involving multi
11a60 70 6c 65 20 73 71 6c 69 74 65 33 2e 6d 75 74 65  ple sqlite3.mute
11a70 78 20 6d 75 74 65 78 65 73 2e 0a 2a 2a 20 52 65  x mutexes..** Re
11a80 66 65 72 20 74 6f 20 63 6f 6d 6d 65 6e 74 73 20  fer to comments 
11a90 61 62 6f 76 65 20 66 75 6e 63 74 69 6f 6e 20 73  above function s
11aa0 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
11ab0 4c 69 73 74 28 29 20 66 6f 72 20 61 6e 0a 2a 2a  List() for an.**
11ac0 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 61 73 20   explanation as 
11ad0 74 6f 20 77 68 79 20 69 74 20 69 73 20 73 61 66  to why it is saf
11ae0 65 20 74 6f 20 61 64 64 20 61 6e 20 65 6e 74 72  e to add an entr
11af0 79 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 2e  y to an sqlite3.
11b00 70 44 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c  pDisconnect.** l
11b10 69 73 74 20 77 69 74 68 6f 75 74 20 68 6f 6c 64  ist without hold
11b20 69 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70 6f  ing the correspo
11b30 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 2e 6d 75  nding sqlite3.mu
11b40 74 65 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a  tex mutex..**.**
11b50 20 54 68 65 20 6d 65 6d 6f 72 79 20 66 6f 72 20   The memory for 
11b60 6f 62 6a 65 63 74 73 20 6f 66 20 74 68 69 73 20  objects of this 
11b70 74 79 70 65 20 69 73 20 61 6c 77 61 79 73 20 61  type is always a
11b80 6c 6c 6f 63 61 74 65 64 20 62 79 0a 2a 2a 20 73  llocated by.** s
11b90 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 28 29  qlite3DbMalloc()
11ba0 2c 20 75 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e  , using the conn
11bb0 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 73 74  ection handle st
11bc0 6f 72 65 64 20 69 6e 20 56 54 61 62 6c 65 2e 64  ored in VTable.d
11bd0 62 20 61 73 0a 2a 2a 20 74 68 65 20 66 69 72 73  b as.** the firs
11be0 74 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73  t argument..*/.s
11bf0 74 72 75 63 74 20 56 54 61 62 6c 65 20 7b 0a 20  truct VTable {. 
11c00 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20   sqlite3 *db;   
11c10 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61             /* Da
11c20 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
11c30 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  n associated wit
11c40 68 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  h this table */.
11c50 20 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64 3b 20    Module *pMod; 
11c60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
11c70 6f 69 6e 74 65 72 20 74 6f 20 6d 6f 64 75 6c 65  ointer to module
11c80 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
11c90 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  */.  sqlite3_vta
11ca0 62 20 2a 70 56 74 61 62 3b 20 20 20 20 20 20 2f  b *pVtab;      /
11cb0 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 74 61  * Pointer to vta
11cc0 62 20 69 6e 73 74 61 6e 63 65 20 2a 2f 0a 20 20  b instance */.  
11cd0 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20  int nRef;       
11ce0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
11cf0 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20  ber of pointers 
11d00 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72  to this structur
11d10 65 20 2a 2f 0a 20 20 75 38 20 62 43 6f 6e 73 74  e */.  u8 bConst
11d20 72 61 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20  raint;          
11d30 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73   /* True if cons
11d40 74 72 61 69 6e 74 73 20 61 72 65 20 73 75 70 70  traints are supp
11d50 6f 72 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69  orted */.  int i
11d60 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20  Savepoint;      
11d70 20 20 20 20 20 2f 2a 20 44 65 70 74 68 20 6f 66       /* Depth of
11d80 20 74 68 65 20 53 41 56 45 50 4f 49 4e 54 20 73   the SAVEPOINT s
11d90 74 61 63 6b 20 2a 2f 0a 20 20 56 54 61 62 6c 65  tack */.  VTable
11da0 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20   *pNext;        
11db0 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c      /* Next in l
11dc0 69 6e 6b 65 64 20 6c 69 73 74 20 28 73 65 65 20  inked list (see 
11dd0 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  above) */.};../*
11de0 0a 2a 2a 20 54 68 65 20 73 63 68 65 6d 61 20 66  .** The schema f
11df0 6f 72 20 65 61 63 68 20 53 51 4c 20 74 61 62 6c  or each SQL tabl
11e00 65 20 61 6e 64 20 76 69 65 77 20 69 73 20 72 65  e and view is re
11e10 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d  presented in mem
11e20 6f 72 79 0a 2a 2a 20 62 79 20 61 6e 20 69 6e 73  ory.** by an ins
11e30 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
11e40 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
11e50 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 61 62 6c  ..*/.struct Tabl
11e60 65 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d  e {.  char *zNam
11e70 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61  e;         /* Na
11e80 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
11e90 6f 72 20 76 69 65 77 20 2a 2f 0a 20 20 43 6f 6c  or view */.  Col
11ea0 75 6d 6e 20 2a 61 43 6f 6c 3b 20 20 20 20 20 20  umn *aCol;      
11eb0 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e    /* Information
11ec0 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75   about each colu
11ed0 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70  mn */.  Index *p
11ee0 49 6e 64 65 78 3b 20 20 20 20 20 20 20 2f 2a 20  Index;       /* 
11ef0 4c 69 73 74 20 6f 66 20 53 51 4c 20 69 6e 64 65  List of SQL inde
11f00 78 65 73 20 6f 6e 20 74 68 69 73 20 74 61 62 6c  xes on this tabl
11f10 65 2e 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a  e. */.  Select *
11f20 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20  pSelect;     /* 
11f30 4e 55 4c 4c 20 66 6f 72 20 74 61 62 6c 65 73 2e  NULL for tables.
11f40 20 20 50 6f 69 6e 74 73 20 74 6f 20 64 65 66 69    Points to defi
11f50 6e 69 74 69 6f 6e 20 69 66 20 61 20 76 69 65 77  nition if a view
11f60 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 46 4b  . */.  FKey *pFK
11f70 65 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  ey;         /* L
11f80 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 61 6c  inked list of al
11f90 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 69  l foreign keys i
11fa0 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  n this table */.
11fb0 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b    char *zColAff;
11fc0 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67         /* String
11fd0 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66   defining the af
11fe0 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63  finity of each c
11ff0 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78 70 72 4c  olumn */.  ExprL
12000 69 73 74 20 2a 70 43 68 65 63 6b 3b 20 20 20 20  ist *pCheck;    
12010 2f 2a 20 41 6c 6c 20 43 48 45 43 4b 20 63 6f 6e  /* All CHECK con
12020 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 20 20  straints */.    
12030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12040 20 20 20 2f 2a 20 20 20 2e 2e 2e 20 61 6c 73 6f     /*   ... also
12050 20 75 73 65 64 20 61 73 20 63 6f 6c 75 6d 6e 20   used as column 
12060 6e 61 6d 65 20 6c 69 73 74 20 69 6e 20 61 20 56  name list in a V
12070 49 45 57 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75  IEW */.  int tnu
12080 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  m;            /*
12090 20 52 6f 6f 74 20 42 54 72 65 65 20 70 61 67 65   Root BTree page
120a0 20 66 6f 72 20 74 68 69 73 20 74 61 62 6c 65 20   for this table 
120b0 2a 2f 0a 20 20 75 33 32 20 6e 54 61 62 52 65 66  */.  u32 nTabRef
120c0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
120d0 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20  ber of pointers 
120e0 74 6f 20 74 68 69 73 20 54 61 62 6c 65 20 2a 2f  to this Table */
120f0 0a 20 20 75 33 32 20 74 61 62 46 6c 61 67 73 3b  .  u32 tabFlags;
12100 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20          /* Mask 
12110 6f 66 20 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a  of TF_* values *
12120 2f 0a 20 20 69 31 36 20 69 50 4b 65 79 3b 20 20  /.  i16 iPKey;  
12130 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e           /* If n
12140 6f 74 20 6e 65 67 61 74 69 76 65 2c 20 75 73 65  ot negative, use
12150 20 61 43 6f 6c 5b 69 50 4b 65 79 5d 20 61 73 20   aCol[iPKey] as 
12160 74 68 65 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69  the rowid */.  i
12170 31 36 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20  16 nCol;        
12180 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
12190 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73   columns in this
121a0 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45   table */.  LogE
121b0 73 74 20 6e 52 6f 77 4c 6f 67 45 73 74 3b 20 20  st nRowLogEst;  
121c0 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 72 6f   /* Estimated ro
121d0 77 73 20 69 6e 20 74 61 62 6c 65 20 2d 20 66 72  ws in table - fr
121e0 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20  om sqlite_stat1 
121f0 74 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73  table */.  LogEs
12200 74 20 73 7a 54 61 62 52 6f 77 3b 20 20 20 20 20  t szTabRow;     
12210 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69 7a  /* Estimated siz
12220 65 20 6f 66 20 65 61 63 68 20 74 61 62 6c 65 20  e of each table 
12230 72 6f 77 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a  row in bytes */.
12240 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
12250 41 42 4c 45 5f 43 4f 53 54 4d 55 4c 54 0a 20 20  ABLE_COSTMULT.  
12260 4c 6f 67 45 73 74 20 63 6f 73 74 4d 75 6c 74 3b  LogEst costMult;
12270 20 20 20 20 20 2f 2a 20 43 6f 73 74 20 6d 75 6c       /* Cost mul
12280 74 69 70 6c 69 65 72 20 66 6f 72 20 75 73 69 6e  tiplier for usin
12290 67 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  g this table */.
122a0 23 65 6e 64 69 66 0a 20 20 75 38 20 6b 65 79 43  #endif.  u8 keyC
122b0 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  onf;          /*
122c0 20 57 68 61 74 20 74 6f 20 64 6f 20 69 6e 20 63   What to do in c
122d0 61 73 65 20 6f 66 20 75 6e 69 71 75 65 6e 65 73  ase of uniquenes
122e0 73 20 63 6f 6e 66 6c 69 63 74 20 6f 6e 20 69 50  s conflict on iP
122f0 4b 65 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  Key */.#ifndef S
12300 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52  QLITE_OMIT_ALTER
12310 54 41 42 4c 45 0a 20 20 69 6e 74 20 61 64 64 43  TABLE.  int addC
12320 6f 6c 4f 66 66 73 65 74 3b 20 20 20 20 2f 2a 20  olOffset;    /* 
12330 4f 66 66 73 65 74 20 69 6e 20 43 52 45 41 54 45  Offset in CREATE
12340 20 54 41 42 4c 45 20 73 74 6d 74 20 74 6f 20 61   TABLE stmt to a
12350 64 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20  dd a new column 
12360 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
12370 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
12380 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74  RTUALTABLE.  int
12390 20 6e 4d 6f 64 75 6c 65 41 72 67 3b 20 20 20 20   nModuleArg;    
123a0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
123b0 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20  rguments to the 
123c0 6d 6f 64 75 6c 65 20 2a 2f 0a 20 20 63 68 61 72  module */.  char
123d0 20 2a 2a 61 7a 4d 6f 64 75 6c 65 41 72 67 3b 20   **azModuleArg; 
123e0 20 2f 2a 20 30 3a 20 6d 6f 64 75 6c 65 20 31 3a   /* 0: module 1:
123f0 20 73 63 68 65 6d 61 20 32 3a 20 76 74 61 62 20   schema 2: vtab 
12400 6e 61 6d 65 20 33 2e 2e 2e 3a 20 61 72 67 73 20  name 3...: args 
12410 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 56 54  */.  VTable *pVT
12420 61 62 6c 65 3b 20 20 20 20 20 2f 2a 20 4c 69 73  able;     /* Lis
12430 74 20 6f 66 20 56 54 61 62 6c 65 20 6f 62 6a 65  t of VTable obje
12440 63 74 73 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  cts. */.#endif. 
12450 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 67   Trigger *pTrigg
12460 65 72 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66  er;   /* List of
12470 20 74 72 69 67 67 65 72 73 20 73 74 6f 72 65 64   triggers stored
12480 20 69 6e 20 70 53 63 68 65 6d 61 20 2a 2f 0a 20   in pSchema */. 
12490 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61   Schema *pSchema
124a0 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20  ;     /* Schema 
124b0 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
124c0 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 61  is table */.  Ta
124d0 62 6c 65 20 2a 70 4e 65 78 74 5a 6f 6d 62 69 65  ble *pNextZombie
124e0 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 6e 20 74 68  ;  /* Next on th
124f0 65 20 50 61 72 73 65 2e 70 5a 6f 6d 62 69 65 54  e Parse.pZombieT
12500 61 62 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f  ab list */.};../
12510 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
12520 75 65 73 20 66 6f 72 20 54 61 62 6c 65 2e 74 61  ues for Table.ta
12530 62 46 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 54 46  bFlags..**.** TF
12540 5f 4f 4f 4f 48 69 64 64 65 6e 20 61 70 70 6c 69  _OOOHidden appli
12550 65 73 20 74 6f 20 74 61 62 6c 65 73 20 6f 72 20  es to tables or 
12560 76 69 65 77 20 74 68 61 74 20 68 61 76 65 20 68  view that have h
12570 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 74 68  idden columns th
12580 61 74 20 61 72 65 0a 2a 2a 20 66 6f 6c 6c 6f 77  at are.** follow
12590 65 64 20 62 79 20 6e 6f 6e 2d 68 69 64 64 65 6e  ed by non-hidden
125a0 20 63 6f 6c 75 6d 6e 73 2e 20 20 45 78 61 6d 70   columns.  Examp
125b0 6c 65 3a 20 20 22 43 52 45 41 54 45 20 56 49 52  le:  "CREATE VIR
125c0 54 55 41 4c 20 54 41 42 4c 45 20 78 20 55 53 49  TUAL TABLE x USI
125d0 4e 47 0a 2a 2a 20 76 74 61 62 31 28 61 20 48 49  NG.** vtab1(a HI
125e0 44 44 45 4e 2c 20 62 29 3b 22 2e 20 20 53 69 6e  DDEN, b);".  Sin
125f0 63 65 20 22 62 22 20 69 73 20 61 20 6e 6f 6e 2d  ce "b" is a non-
12600 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 62 75  hidden column bu
12610 74 20 22 61 22 20 69 73 20 68 69 64 64 65 6e 2c  t "a" is hidden,
12620 0a 2a 2a 20 74 68 65 20 54 46 5f 4f 4f 4f 48 69  .** the TF_OOOHi
12630 64 64 65 6e 20 61 74 74 72 69 62 75 74 65 20 77  dden attribute w
12640 6f 75 6c 64 20 61 70 70 6c 79 20 69 6e 20 74 68  ould apply in th
12650 69 73 20 63 61 73 65 2e 20 20 53 75 63 68 20 74  is case.  Such t
12660 61 62 6c 65 73 20 72 65 71 75 69 72 65 0a 2a 2a  ables require.**
12670 20 73 70 65 63 69 61 6c 20 68 61 6e 64 6c 69 6e   special handlin
12680 67 20 64 75 72 69 6e 67 20 49 4e 53 45 52 54 20  g during INSERT 
12690 70 72 6f 63 65 73 73 69 6e 67 2e 0a 2a 2f 0a 23  processing..*/.#
126a0 64 65 66 69 6e 65 20 54 46 5f 52 65 61 64 6f 6e  define TF_Readon
126b0 6c 79 20 20 20 20 20 20 20 20 30 78 30 30 30 31  ly        0x0001
126c0 20 20 20 20 2f 2a 20 52 65 61 64 2d 6f 6e 6c 79      /* Read-only
126d0 20 73 79 73 74 65 6d 20 74 61 62 6c 65 20 2a 2f   system table */
126e0 0a 23 64 65 66 69 6e 65 20 54 46 5f 45 70 68 65  .#define TF_Ephe
126f0 6d 65 72 61 6c 20 20 20 20 20 20 20 30 78 30 30  meral       0x00
12700 30 32 20 20 20 20 2f 2a 20 41 6e 20 65 70 68 65  02    /* An ephe
12710 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23  meral table */.#
12720 64 65 66 69 6e 65 20 54 46 5f 48 61 73 50 72 69  define TF_HasPri
12730 6d 61 72 79 4b 65 79 20 20 20 30 78 30 30 30 34  maryKey   0x0004
12740 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 68 61 73      /* Table has
12750 20 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a   a primary key *
12760 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 41 75 74  /.#define TF_Aut
12770 6f 69 6e 63 72 65 6d 65 6e 74 20 20 20 30 78 30  oincrement   0x0
12780 30 30 38 20 20 20 20 2f 2a 20 49 6e 74 65 67 65  008    /* Intege
12790 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 69 73  r primary key is
127a0 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a   autoincrement *
127b0 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73  /.#define TF_Has
127c0 53 74 61 74 31 20 20 20 20 20 20 20 20 30 78 30  Stat1        0x0
127d0 30 31 30 20 20 20 20 2f 2a 20 6e 52 6f 77 4c 6f  010    /* nRowLo
127e0 67 45 73 74 20 73 65 74 20 66 72 6f 6d 20 73 71  gEst set from sq
127f0 6c 69 74 65 5f 73 74 61 74 31 20 2a 2f 0a 23 64  lite_stat1 */.#d
12800 65 66 69 6e 65 20 54 46 5f 57 69 74 68 6f 75 74  efine TF_Without
12810 52 6f 77 69 64 20 20 20 20 30 78 30 30 32 30 20  Rowid    0x0020 
12820 20 20 20 2f 2a 20 4e 6f 20 72 6f 77 69 64 2e 20     /* No rowid. 
12830 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20   PRIMARY KEY is 
12840 74 68 65 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69  the key */.#defi
12850 6e 65 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52  ne TF_NoVisibleR
12860 6f 77 69 64 20 20 30 78 30 30 34 30 20 20 20 20  owid  0x0040    
12870 2f 2a 20 4e 6f 20 75 73 65 72 2d 76 69 73 69 62  /* No user-visib
12880 6c 65 20 22 72 6f 77 69 64 22 20 63 6f 6c 75 6d  le "rowid" colum
12890 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  n */.#define TF_
128a0 4f 4f 4f 48 69 64 64 65 6e 20 20 20 20 20 20 20  OOOHidden       
128b0 30 78 30 30 38 30 20 20 20 20 2f 2a 20 4f 75 74  0x0080    /* Out
128c0 2d 6f 66 2d 4f 72 64 65 72 20 68 69 64 64 65 6e  -of-Order hidden
128d0 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 23 64 65 66   columns */.#def
128e0 69 6e 65 20 54 46 5f 53 74 61 74 73 55 73 65 64  ine TF_StatsUsed
128f0 20 20 20 20 20 20 20 30 78 30 31 30 30 20 20 20         0x0100   
12900 20 2f 2a 20 51 75 65 72 79 20 70 6c 61 6e 6e 65   /* Query planne
12910 72 20 64 65 63 69 73 69 6f 6e 73 20 61 66 66 65  r decisions affe
12920 63 74 65 64 20 62 79 0a 20 20 20 20 20 20 20 20  cted by.        
12930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12940 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
12950 49 6e 64 65 78 2e 61 69 52 6f 77 4c 6f 67 45 73  Index.aiRowLogEs
12960 74 5b 5d 20 76 61 6c 75 65 73 20 2a 2f 0a 23 64  t[] values */.#d
12970 65 66 69 6e 65 20 54 46 5f 48 61 73 4e 6f 74 4e  efine TF_HasNotN
12980 75 6c 6c 20 20 20 20 20 20 30 78 30 32 30 30 20  ull      0x0200 
12990 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 4e     /* Contains N
129a0 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69  OT NULL constrai
129b0 6e 74 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 65  nts */../*.** Te
129c0 73 74 20 74 6f 20 73 65 65 20 77 68 65 74 68 65  st to see whethe
129d0 72 20 6f 72 20 6e 6f 74 20 61 20 74 61 62 6c 65  r or not a table
129e0 20 69 73 20 61 20 76 69 72 74 75 61 6c 20 74 61   is a virtual ta
129f0 62 6c 65 2e 20 20 54 68 69 73 20 69 73 0a 2a 2a  ble.  This is.**
12a00 20 64 6f 6e 65 20 61 73 20 61 20 6d 61 63 72 6f   done as a macro
12a10 20 73 6f 20 74 68 61 74 20 69 74 20 77 69 6c 6c   so that it will
12a20 20 62 65 20 6f 70 74 69 6d 69 7a 65 64 20 6f 75   be optimized ou
12a30 74 20 77 68 65 6e 20 76 69 72 74 75 61 6c 0a 2a  t when virtual.*
12a40 2a 20 74 61 62 6c 65 20 73 75 70 70 6f 72 74 20  * table support 
12a50 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  is omitted from 
12a60 74 68 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69  the build..*/.#i
12a70 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
12a80 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23  T_VIRTUALTABLE.#
12a90 20 20 64 65 66 69 6e 65 20 49 73 56 69 72 74 75    define IsVirtu
12aa0 61 6c 28 58 29 20 20 20 20 20 20 28 28 58 29 2d  al(X)      ((X)-
12ab0 3e 6e 4d 6f 64 75 6c 65 41 72 67 29 0a 23 65 6c  >nModuleArg).#el
12ac0 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56  se.#  define IsV
12ad0 69 72 74 75 61 6c 28 58 29 20 20 20 20 20 20 30  irtual(X)      0
12ae0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d  .#endif../*.** M
12af0 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69  acros to determi
12b00 6e 65 20 69 66 20 61 20 63 6f 6c 75 6d 6e 20 69  ne if a column i
12b10 73 20 68 69 64 64 65 6e 2e 20 20 49 73 4f 72 64  s hidden.  IsOrd
12b20 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d  inaryHiddenColum
12b30 6e 28 29 0a 2a 2a 20 6f 6e 6c 79 20 77 6f 72 6b  n().** only work
12b40 73 20 66 6f 72 20 6e 6f 6e 2d 76 69 72 74 75 61  s for non-virtua
12b50 6c 20 74 61 62 6c 65 73 20 28 6f 72 64 69 6e 61  l tables (ordina
12b60 72 79 20 74 61 62 6c 65 73 20 61 6e 64 20 76 69  ry tables and vi
12b70 65 77 73 29 20 61 6e 64 20 69 73 0a 2a 2a 20 61  ews) and is.** a
12b80 6c 77 61 79 73 20 66 61 6c 73 65 20 75 6e 6c 65  lways false unle
12b90 73 73 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ss SQLITE_ENABLE
12ba0 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 20  _HIDDEN_COLUMNS 
12bb0 69 73 20 64 65 66 69 6e 65 64 2e 20 20 54 68 65  is defined.  The
12bc0 0a 2a 2a 20 49 73 48 69 64 64 65 6e 43 6f 6c 75  .** IsHiddenColu
12bd0 6d 6e 28 29 20 6d 61 63 72 6f 20 69 73 20 67 65  mn() macro is ge
12be0 6e 65 72 61 6c 20 70 75 72 70 6f 73 65 2e 0a 2a  neral purpose..*
12bf0 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
12c00 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44  LITE_ENABLE_HIDD
12c10 45 4e 5f 43 4f 4c 55 4d 4e 53 29 0a 23 20 20 64  EN_COLUMNS).#  d
12c20 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f  efine IsHiddenCo
12c30 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20  lumn(X)         
12c40 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20  (((X)->colFlags 
12c50 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e  & COLFLAG_HIDDEN
12c60 29 21 3d 30 29 0a 23 20 20 64 65 66 69 6e 65 20  )!=0).#  define 
12c70 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e  IsOrdinaryHidden
12c80 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28 58 29 2d  Column(X) (((X)-
12c90 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46  >colFlags & COLF
12ca0 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a  LAG_HIDDEN)!=0).
12cb0 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28 53  #elif !defined(S
12cc0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
12cd0 41 4c 54 41 42 4c 45 29 0a 23 20 20 64 65 66 69  ALTABLE).#  defi
12ce0 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d  ne IsHiddenColum
12cf0 6e 28 58 29 20 20 20 20 20 20 20 20 20 28 28 28  n(X)         (((
12d00 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43  X)->colFlags & C
12d10 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d  OLFLAG_HIDDEN)!=
12d20 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f  0).#  define IsO
12d30 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c  rdinaryHiddenCol
12d40 75 6d 6e 28 58 29 20 30 0a 23 65 6c 73 65 0a 23  umn(X) 0.#else.#
12d50 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65    define IsHidde
12d60 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20  nColumn(X)      
12d70 20 20 20 30 0a 23 20 20 64 65 66 69 6e 65 20 49     0.#  define I
12d80 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43  sOrdinaryHiddenC
12d90 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6e 64 69  olumn(X) 0.#endi
12da0 66 0a 0a 0a 2f 2a 20 44 6f 65 73 20 74 68 65 20  f.../* Does the 
12db0 74 61 62 6c 65 20 68 61 76 65 20 61 20 72 6f 77  table have a row
12dc0 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 48 61  id */.#define Ha
12dd0 73 52 6f 77 69 64 28 58 29 20 20 20 20 20 28 28  sRowid(X)     ((
12de0 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20  (X)->tabFlags & 
12df0 54 46 5f 57 69 74 68 6f 75 74 52 6f 77 69 64 29  TF_WithoutRowid)
12e00 3d 3d 30 29 0a 23 64 65 66 69 6e 65 20 56 69 73  ==0).#define Vis
12e10 69 62 6c 65 52 6f 77 69 64 28 58 29 20 28 28 28  ibleRowid(X) (((
12e20 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54  X)->tabFlags & T
12e30 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69 64  F_NoVisibleRowid
12e40 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  )==0)../*.** Eac
12e50 68 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  h foreign key co
12e60 6e 73 74 72 61 69 6e 74 20 69 73 20 61 6e 20 69  nstraint is an i
12e70 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
12e80 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
12e90 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66 6f 72 65  re..**.** A fore
12ea0 69 67 6e 20 6b 65 79 20 69 73 20 61 73 73 6f 63  ign key is assoc
12eb0 69 61 74 65 64 20 77 69 74 68 20 74 77 6f 20 74  iated with two t
12ec0 61 62 6c 65 73 2e 20 20 54 68 65 20 22 66 72 6f  ables.  The "fro
12ed0 6d 22 20 74 61 62 6c 65 20 69 73 0a 2a 2a 20 74  m" table is.** t
12ee0 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f  he table that co
12ef0 6e 74 61 69 6e 73 20 74 68 65 20 52 45 46 45 52  ntains the REFER
12f00 45 4e 43 45 53 20 63 6c 61 75 73 65 20 74 68 61  ENCES clause tha
12f10 74 20 63 72 65 61 74 65 73 20 74 68 65 20 66 6f  t creates the fo
12f20 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e 20 20 54  reign.** key.  T
12f30 68 65 20 22 74 6f 22 20 74 61 62 6c 65 20 69 73  he "to" table is
12f40 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
12f50 69 73 20 6e 61 6d 65 64 20 69 6e 20 74 68 65 20  is named in the 
12f60 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73  REFERENCES claus
12f70 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65 72 20 74  e..** Consider t
12f80 68 69 73 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a 0a  his example:.**.
12f90 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 54 41  **     CREATE TA
12fa0 42 4c 45 20 65 78 31 28 0a 2a 2a 20 20 20 20 20  BLE ex1(.**     
12fb0 20 20 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d    a INTEGER PRIM
12fc0 41 52 59 20 4b 45 59 2c 0a 2a 2a 20 20 20 20 20  ARY KEY,.**     
12fd0 20 20 62 20 49 4e 54 45 47 45 52 20 43 4f 4e 53    b INTEGER CONS
12fe0 54 52 41 49 4e 54 20 66 6b 31 20 52 45 46 45 52  TRAINT fk1 REFER
12ff0 45 4e 43 45 53 20 65 78 32 28 78 29 0a 2a 2a 20  ENCES ex2(x).** 
13000 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72      );.**.** For
13010 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 22 66 6b   foreign key "fk
13020 31 22 2c 20 74 68 65 20 66 72 6f 6d 2d 74 61 62  1", the from-tab
13030 6c 65 20 69 73 20 22 65 78 31 22 20 61 6e 64 20  le is "ex1" and 
13040 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20  the to-table is 
13050 22 65 78 32 22 2e 0a 2a 2a 20 45 71 75 69 76 61  "ex2"..** Equiva
13060 6c 65 6e 74 20 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a  lent names:.**.*
13070 2a 20 20 20 20 20 66 72 6f 6d 2d 74 61 62 6c 65  *     from-table
13080 20 3d 3d 20 63 68 69 6c 64 2d 74 61 62 6c 65 0a   == child-table.
13090 2a 2a 20 20 20 20 20 20 20 74 6f 2d 74 61 62 6c  **       to-tabl
130a0 65 20 3d 3d 20 70 61 72 65 6e 74 2d 74 61 62 6c  e == parent-tabl
130b0 65 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 52 45 46  e.**.** Each REF
130c0 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 67  ERENCES clause g
130d0 65 6e 65 72 61 74 65 73 20 61 6e 20 69 6e 73 74  enerates an inst
130e0 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
130f0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a  owing structure.
13100 2a 2a 20 77 68 69 63 68 20 69 73 20 61 74 74 61  ** which is atta
13110 63 68 65 64 20 74 6f 20 74 68 65 20 66 72 6f 6d  ched to the from
13120 2d 74 61 62 6c 65 2e 20 20 54 68 65 20 74 6f 2d  -table.  The to-
13130 74 61 62 6c 65 20 6e 65 65 64 20 6e 6f 74 20 65  table need not e
13140 78 69 73 74 20 77 68 65 6e 0a 2a 2a 20 74 68 65  xist when.** the
13150 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 63   from-table is c
13160 72 65 61 74 65 64 2e 20 20 54 68 65 20 65 78 69  reated.  The exi
13170 73 74 65 6e 63 65 20 6f 66 20 74 68 65 20 74 6f  stence of the to
13180 2d 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 63 68  -table is not ch
13190 65 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ecked..**.** The
131a0 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 70 61 72   list of all par
131b0 65 6e 74 73 20 66 6f 72 20 63 68 69 6c 64 20 54  ents for child T
131c0 61 62 6c 65 20 58 20 69 73 20 68 65 6c 64 20 61  able X is held a
131d0 74 20 58 2e 70 46 4b 65 79 2e 0a 2a 2a 0a 2a 2a  t X.pFKey..**.**
131e0 20 41 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 63   A list of all c
131f0 68 69 6c 64 72 65 6e 20 66 6f 72 20 61 20 74 61  hildren for a ta
13200 62 6c 65 20 6e 61 6d 65 64 20 5a 20 28 77 68 69  ble named Z (whi
13210 63 68 20 6d 69 67 68 74 20 6e 6f 74 20 65 76 65  ch might not eve
13220 6e 20 65 78 69 73 74 29 0a 2a 2a 20 69 73 20 68  n exist).** is h
13230 65 6c 64 20 69 6e 20 53 63 68 65 6d 61 2e 66 6b  eld in Schema.fk
13240 65 79 48 61 73 68 20 77 69 74 68 20 61 20 68 61  eyHash with a ha
13250 73 68 20 6b 65 79 20 6f 66 20 5a 2e 0a 2a 2f 0a  sh key of Z..*/.
13260 73 74 72 75 63 74 20 46 4b 65 79 20 7b 0a 20 20  struct FKey {.  
13270 54 61 62 6c 65 20 2a 70 46 72 6f 6d 3b 20 20 20  Table *pFrom;   
13280 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6e 74 61    /* Table conta
13290 69 6e 69 6e 67 20 74 68 65 20 52 45 46 45 52 45  ining the REFERE
132a0 4e 43 45 53 20 63 6c 61 75 73 65 20 28 61 6b 61  NCES clause (aka
132b0 3a 20 43 68 69 6c 64 29 20 2a 2f 0a 20 20 46 4b  : Child) */.  FK
132c0 65 79 20 2a 70 4e 65 78 74 46 72 6f 6d 3b 20 20  ey *pNextFrom;  
132d0 2f 2a 20 4e 65 78 74 20 46 4b 65 79 20 77 69 74  /* Next FKey wit
132e0 68 20 74 68 65 20 73 61 6d 65 20 69 6e 20 70 46  h the same in pF
132f0 72 6f 6d 2e 20 4e 65 78 74 20 70 61 72 65 6e 74  rom. Next parent
13300 20 6f 66 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 63   of pFrom */.  c
13310 68 61 72 20 2a 7a 54 6f 3b 20 20 20 20 20 20 20  har *zTo;       
13320 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 61 62 6c   /* Name of tabl
13330 65 20 74 68 61 74 20 74 68 65 20 6b 65 79 20 70  e that the key p
13340 6f 69 6e 74 73 20 74 6f 20 28 61 6b 61 3a 20 50  oints to (aka: P
13350 61 72 65 6e 74 29 20 2a 2f 0a 20 20 46 4b 65 79  arent) */.  FKey
13360 20 2a 70 4e 65 78 74 54 6f 3b 20 20 20 20 2f 2a   *pNextTo;    /*
13370 20 4e 65 78 74 20 77 69 74 68 20 74 68 65 20 73   Next with the s
13380 61 6d 65 20 7a 54 6f 2e 20 4e 65 78 74 20 63 68  ame zTo. Next ch
13390 69 6c 64 20 6f 66 20 7a 54 6f 2e 20 2a 2f 0a 20  ild of zTo. */. 
133a0 20 46 4b 65 79 20 2a 70 50 72 65 76 54 6f 3b 20   FKey *pPrevTo; 
133b0 20 20 20 2f 2a 20 50 72 65 76 69 6f 75 73 20 77     /* Previous w
133c0 69 74 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f  ith the same zTo
133d0 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b 20   */.  int nCol; 
133e0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
133f0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
13400 74 68 69 73 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a  this key */.  /*
13410 20 45 56 3a 20 52 2d 33 30 33 32 33 2d 32 31 39   EV: R-30323-219
13420 31 37 20 2a 2f 0a 20 20 75 38 20 69 73 44 65 66  17 */.  u8 isDef
13430 65 72 72 65 64 3b 20 20 20 20 20 20 20 2f 2a 20  erred;       /* 
13440 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69  True if constrai
13450 6e 74 20 63 68 65 63 6b 69 6e 67 20 69 73 20 64  nt checking is d
13460 65 66 65 72 72 65 64 20 74 69 6c 6c 20 43 4f 4d  eferred till COM
13470 4d 49 54 20 2a 2f 0a 20 20 75 38 20 61 41 63 74  MIT */.  u8 aAct
13480 69 6f 6e 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f  ion[2];        /
13490 2a 20 4f 4e 20 44 45 4c 45 54 45 20 61 6e 64 20  * ON DELETE and 
134a0 4f 4e 20 55 50 44 41 54 45 20 61 63 74 69 6f 6e  ON UPDATE action
134b0 73 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 20  s, respectively 
134c0 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 61 70  */.  Trigger *ap
134d0 54 72 69 67 67 65 72 5b 32 5d 3b 2f 2a 20 54 72  Trigger[2];/* Tr
134e0 69 67 67 65 72 73 20 66 6f 72 20 61 41 63 74 69  iggers for aActi
134f0 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73 20 2a 2f 0a  on[] actions */.
13500 20 20 73 74 72 75 63 74 20 73 43 6f 6c 4d 61 70    struct sColMap
13510 20 7b 20 20 20 20 20 20 2f 2a 20 4d 61 70 70 69   {      /* Mappi
13520 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  ng of columns in
13530 20 70 46 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e   pFrom to column
13540 73 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20 20  s in zTo */.    
13550 69 6e 74 20 69 46 72 6f 6d 3b 20 20 20 20 20 20  int iFrom;      
13560 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f        /* Index o
13570 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 70 46 72 6f  f column in pFro
13580 6d 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  m */.    char *z
13590 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Col;           /
135a0 2a 20 4e 61 6d 65 20 6f 66 20 63 6f 6c 75 6d 6e  * Name of column
135b0 20 69 6e 20 7a 54 6f 2e 20 20 49 66 20 4e 55 4c   in zTo.  If NUL
135c0 4c 20 75 73 65 20 50 52 49 4d 41 52 59 20 4b 45  L use PRIMARY KE
135d0 59 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31 5d  Y */.  } aCol[1]
135e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
135f0 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61  One entry for ea
13600 63 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d  ch of nCol colum
13610 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ns */.};../*.** 
13620 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20  SQLite supports 
13630 6d 61 6e 79 20 64 69 66 66 65 72 65 6e 74 20 77  many different w
13640 61 79 73 20 74 6f 20 72 65 73 6f 6c 76 65 20 61  ays to resolve a
13650 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65   constraint.** e
13660 72 72 6f 72 2e 20 20 52 4f 4c 4c 42 41 43 4b 20  rror.  ROLLBACK 
13670 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73  processing means
13680 20 74 68 61 74 20 61 20 63 6f 6e 73 74 72 61 69   that a constrai
13690 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20  nt violation.** 
136a0 63 61 75 73 65 73 20 74 68 65 20 6f 70 65 72 61  causes the opera
136b0 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 20  tion in process 
136c0 74 6f 20 66 61 69 6c 20 61 6e 64 20 66 6f 72 20  to fail and for 
136d0 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e  the current tran
136e0 73 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65  saction.** to be
136f0 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 41   rolled back.  A
13700 42 4f 52 54 20 70 72 6f 63 65 73 73 69 6e 67 20  BORT processing 
13710 6d 65 61 6e 73 20 74 68 65 20 6f 70 65 72 61 74  means the operat
13720 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 0a 2a  ion in process.*
13730 2a 20 66 61 69 6c 73 20 61 6e 64 20 61 6e 79 20  * fails and any 
13740 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 66 72  prior changes fr
13750 6f 6d 20 74 68 61 74 20 6f 6e 65 20 6f 70 65 72  om that one oper
13760 61 74 69 6f 6e 20 61 72 65 20 62 61 63 6b 65 64  ation are backed
13770 20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20 74 68 65   out,.** but the
13780 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
13790 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e  not rolled back.
137a0 20 20 46 41 49 4c 20 70 72 6f 63 65 73 73 69 6e    FAIL processin
137b0 67 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a 2a 20  g means that.** 
137c0 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e  the operation in
137d0 20 70 72 6f 67 72 65 73 73 20 73 74 6f 70 73 20   progress stops 
137e0 61 6e 64 20 72 65 74 75 72 6e 73 20 61 6e 20 65  and returns an e
137f0 72 72 6f 72 20 63 6f 64 65 2e 20 20 42 75 74 20  rror code.  But 
13800 70 72 69 6f 72 0a 2a 2a 20 63 68 61 6e 67 65 73  prior.** changes
13810 20 64 75 65 20 74 6f 20 74 68 65 20 73 61 6d 65   due to the same
13820 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20 6e   operation are n
13830 6f 74 20 62 61 63 6b 65 64 20 6f 75 74 20 61 6e  ot backed out an
13840 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a  d no rollback.**
13850 20 6f 63 63 75 72 73 2e 20 20 49 47 4e 4f 52 45   occurs.  IGNORE
13860 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20   means that the 
13870 70 61 72 74 69 63 75 6c 61 72 20 72 6f 77 20 74  particular row t
13880 68 61 74 20 63 61 75 73 65 64 20 74 68 65 20 63  hat caused the c
13890 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72  onstraint.** err
138a0 6f 72 20 69 73 20 6e 6f 74 20 69 6e 73 65 72 74  or is not insert
138b0 65 64 20 6f 72 20 75 70 64 61 74 65 64 2e 20 20  ed or updated.  
138c0 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69  Processing conti
138d0 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f  nues and no erro
138e0 72 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65 64  r.** is returned
138f0 2e 20 20 52 45 50 4c 41 43 45 20 6d 65 61 6e 73  .  REPLACE means
13900 20 74 68 61 74 20 70 72 65 65 78 69 73 74 69 6e   that preexistin
13910 67 20 64 61 74 61 62 61 73 65 20 72 6f 77 73 20  g database rows 
13920 74 68 61 74 20 63 61 75 73 65 64 0a 2a 2a 20 61  that caused.** a
13930 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
13940 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65  nt violation are
13950 20 72 65 6d 6f 76 65 64 20 73 6f 20 74 68 61 74   removed so that
13960 20 74 68 65 20 6e 65 77 20 69 6e 73 65 72 74 20   the new insert 
13970 6f 72 0a 2a 2a 20 75 70 64 61 74 65 20 63 61 6e  or.** update can
13980 20 70 72 6f 63 65 65 64 2e 20 20 50 72 6f 63 65   proceed.  Proce
13990 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20  ssing continues 
139a0 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20 69 73 20  and no error is 
139b0 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  reported..**.** 
139c0 52 45 53 54 52 49 43 54 2c 20 53 45 54 4e 55 4c  RESTRICT, SETNUL
139d0 4c 2c 20 61 6e 64 20 43 41 53 43 41 44 45 20 61  L, and CASCADE a
139e0 63 74 69 6f 6e 73 20 61 70 70 6c 79 20 6f 6e 6c  ctions apply onl
139f0 79 20 74 6f 20 66 6f 72 65 69 67 6e 20 6b 65 79  y to foreign key
13a00 73 2e 0a 2a 2a 20 52 45 53 54 52 49 43 54 20 69  s..** RESTRICT i
13a10 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 41 42  s the same as AB
13a20 4f 52 54 20 66 6f 72 20 49 4d 4d 45 44 49 41 54  ORT for IMMEDIAT
13a30 45 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61  E foreign keys a
13a40 6e 64 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20 61  nd the.** same a
13a50 73 20 52 4f 4c 4c 42 41 43 4b 20 66 6f 72 20 44  s ROLLBACK for D
13a60 45 46 45 52 52 45 44 20 6b 65 79 73 2e 20 20 53  EFERRED keys.  S
13a70 45 54 4e 55 4c 4c 20 6d 65 61 6e 73 20 74 68 61  ETNULL means tha
13a80 74 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a  t the foreign.**
13a90 20 6b 65 79 20 69 73 20 73 65 74 20 74 6f 20 4e   key is set to N
13aa0 55 4c 4c 2e 20 20 43 41 53 43 41 44 45 20 6d 65  ULL.  CASCADE me
13ab0 61 6e 73 20 74 68 61 74 20 61 20 44 45 4c 45 54  ans that a DELET
13ac0 45 20 6f 72 20 55 50 44 41 54 45 20 6f 66 20 74  E or UPDATE of t
13ad0 68 65 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 64  he.** referenced
13ae0 20 74 61 62 6c 65 20 72 6f 77 20 69 73 20 70 72   table row is pr
13af0 6f 70 61 67 61 74 65 64 20 69 6e 74 6f 20 74 68  opagated into th
13b00 65 20 72 6f 77 20 74 68 61 74 20 68 6f 6c 64 73  e row that holds
13b10 20 74 68 65 0a 2a 2a 20 66 6f 72 65 69 67 6e 20   the.** foreign 
13b20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66  key..**.** The f
13b30 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d 62 6f 6c 69  ollowing symboli
13b40 63 20 76 61 6c 75 65 73 20 61 72 65 20 75 73 65  c values are use
13b50 64 20 74 6f 20 72 65 63 6f 72 64 20 77 68 69 63  d to record whic
13b60 68 20 74 79 70 65 0a 2a 2a 20 6f 66 20 61 63 74  h type.** of act
13b70 69 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a  ion to take..*/.
13b80 23 64 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20  #define OE_None 
13b90 20 20 20 20 30 20 20 20 2f 2a 20 54 68 65 72 65      0   /* There
13ba0 20 69 73 20 6e 6f 20 63 6f 6e 73 74 72 61 69 6e   is no constrain
13bb0 74 20 74 6f 20 63 68 65 63 6b 20 2a 2f 0a 23 64  t to check */.#d
13bc0 65 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61 63  efine OE_Rollbac
13bd0 6b 20 31 20 20 20 2f 2a 20 46 61 69 6c 20 74 68  k 1   /* Fail th
13be0 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64 20  e operation and 
13bf0 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61  rollback the tra
13c00 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  nsaction */.#def
13c10 69 6e 65 20 4f 45 5f 41 62 6f 72 74 20 20 20 20  ine OE_Abort    
13c20 32 20 20 20 2f 2a 20 42 61 63 6b 20 6f 75 74 20  2   /* Back out 
13c30 63 68 61 6e 67 65 73 20 62 75 74 20 64 6f 20 6e  changes but do n
13c40 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73  o rollback trans
13c50 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  action */.#defin
13c60 65 20 4f 45 5f 46 61 69 6c 20 20 20 20 20 33 20  e OE_Fail     3 
13c70 20 20 2f 2a 20 53 74 6f 70 20 74 68 65 20 6f 70    /* Stop the op
13c80 65 72 61 74 69 6f 6e 20 62 75 74 20 6c 65 61 76  eration but leav
13c90 65 20 61 6c 6c 20 70 72 69 6f 72 20 63 68 61 6e  e all prior chan
13ca0 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ges */.#define O
13cb0 45 5f 49 67 6e 6f 72 65 20 20 20 34 20 20 20 2f  E_Ignore   4   /
13cc0 2a 20 49 67 6e 6f 72 65 20 74 68 65 20 65 72 72  * Ignore the err
13cd0 6f 72 2e 20 44 6f 20 6e 6f 74 20 64 6f 20 74 68  or. Do not do th
13ce0 65 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41  e INSERT or UPDA
13cf0 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  TE */.#define OE
13d00 5f 52 65 70 6c 61 63 65 20 20 35 20 20 20 2f 2a  _Replace  5   /*
13d10 20 44 65 6c 65 74 65 20 65 78 69 73 74 69 6e 67   Delete existing
13d20 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 20 64 6f   record, then do
13d30 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54   INSERT or UPDAT
13d40 45 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45  E */..#define OE
13d50 5f 52 65 73 74 72 69 63 74 20 36 20 20 20 2f 2a  _Restrict 6   /*
13d60 20 4f 45 5f 41 62 6f 72 74 20 66 6f 72 20 49 4d   OE_Abort for IM
13d70 4d 45 44 49 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c  MEDIATE, OE_Roll
13d80 62 61 63 6b 20 66 6f 72 20 44 45 46 45 52 52 45  back for DEFERRE
13d90 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  D */.#define OE_
13da0 53 65 74 4e 75 6c 6c 20 20 37 20 20 20 2f 2a 20  SetNull  7   /* 
13db0 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20  Set the foreign 
13dc0 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c  key value to NUL
13dd0 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  L */.#define OE_
13de0 53 65 74 44 66 6c 74 20 20 38 20 20 20 2f 2a 20  SetDflt  8   /* 
13df0 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20  Set the foreign 
13e00 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 69 74 73  key value to its
13e10 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 64 65 66   default */.#def
13e20 69 6e 65 20 4f 45 5f 43 61 73 63 61 64 65 20 20  ine OE_Cascade  
13e30 39 20 20 20 2f 2a 20 43 61 73 63 61 64 65 20 74  9   /* Cascade t
13e40 68 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 0a 23  he changes */..#
13e50 64 65 66 69 6e 65 20 4f 45 5f 44 65 66 61 75 6c  define OE_Defaul
13e60 74 20 20 31 30 20 20 2f 2a 20 44 6f 20 77 68 61  t  10  /* Do wha
13e70 74 65 76 65 72 20 74 68 65 20 64 65 66 61 75 6c  tever the defaul
13e80 74 20 61 63 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a  t action is */..
13e90 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
13ea0 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
13eb0 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73  ing structure is
13ec0 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20 66   passed as the f
13ed0 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  irst.** argument
13ee0 20 74 6f 20 73 71 6c 69 74 65 33 56 64 62 65 4b   to sqlite3VdbeK
13ef0 65 79 43 6f 6d 70 61 72 65 20 61 6e 64 20 69 73  eyCompare and is
13f00 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c   used to control
13f10 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73   the.** comparis
13f20 6f 6e 20 6f 66 20 74 68 65 20 74 77 6f 20 69 6e  on of the two in
13f30 64 65 78 20 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a 20  dex keys..**.** 
13f40 4e 6f 74 65 20 74 68 61 74 20 61 53 6f 72 74 4f  Note that aSortO
13f50 72 64 65 72 5b 5d 20 61 6e 64 20 61 43 6f 6c 6c  rder[] and aColl
13f60 5b 5d 20 68 61 76 65 20 6e 46 69 65 6c 64 2b 31  [] have nField+1
13f70 20 73 6c 6f 74 73 2e 20 20 54 68 65 72 65 0a 2a   slots.  There.*
13f80 2a 20 61 72 65 20 6e 46 69 65 6c 64 20 73 6c 6f  * are nField slo
13f90 74 73 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d  ts for the colum
13fa0 6e 73 20 6f 66 20 61 6e 20 69 6e 64 65 78 20 74  ns of an index t
13fb0 68 65 6e 20 6f 6e 65 20 65 78 74 72 61 20 73 6c  hen one extra sl
13fc0 6f 74 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 6f  ot.** for the ro
13fd0 77 69 64 20 61 74 20 74 68 65 20 65 6e 64 2e 0a  wid at the end..
13fe0 2a 2f 0a 73 74 72 75 63 74 20 4b 65 79 49 6e 66  */.struct KeyInf
13ff0 6f 20 7b 0a 20 20 75 33 32 20 6e 52 65 66 3b 20  o {.  u32 nRef; 
14000 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
14010 62 65 72 20 6f 66 20 72 65 66 65 72 65 6e 63 65  ber of reference
14020 73 20 74 6f 20 74 68 69 73 20 4b 65 79 49 6e 66  s to this KeyInf
14030 6f 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 75 38  o object */.  u8
14040 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20   enc;           
14050 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69    /* Text encodi
14060 6e 67 20 2d 20 6f 6e 65 20 6f 66 20 74 68 65 20  ng - one of the 
14070 53 51 4c 49 54 45 5f 55 54 46 2a 20 76 61 6c 75  SQLITE_UTF* valu
14080 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65  es */.  u16 nFie
14090 6c 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ld;         /* N
140a0 75 6d 62 65 72 20 6f 66 20 6b 65 79 20 63 6f 6c  umber of key col
140b0 75 6d 6e 73 20 69 6e 20 74 68 65 20 69 6e 64 65  umns in the inde
140c0 78 20 2a 2f 0a 20 20 75 31 36 20 6e 58 46 69 65  x */.  u16 nXFie
140d0 6c 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  ld;        /* Nu
140e0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
140f0 62 65 79 6f 6e 64 20 74 68 65 20 6b 65 79 20 63  beyond the key c
14100 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 73 71 6c 69  olumns */.  sqli
14110 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
14120 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  /* The database 
14130 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20  connection */.  
14140 75 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20  u8 *aSortOrder; 
14150 20 20 20 20 2f 2a 20 53 6f 72 74 20 6f 72 64 65      /* Sort orde
14160 72 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  r for each colum
14170 6e 2e 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20  n. */.  CollSeq 
14180 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20 43  *aColl[1];  /* C
14190 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
141a0 65 20 66 6f 72 20 65 61 63 68 20 74 65 72 6d 20  e for each term 
141b0 6f 66 20 74 68 65 20 6b 65 79 20 2a 2f 0a 7d 3b  of the key */.};
141c0 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6f 62 6a  ../*.** This obj
141d0 65 63 74 20 68 6f 6c 64 73 20 61 20 72 65 63 6f  ect holds a reco
141e0 72 64 20 77 68 69 63 68 20 68 61 73 20 62 65 65  rd which has bee
141f0 6e 20 70 61 72 73 65 64 20 6f 75 74 20 69 6e 74  n parsed out int
14200 6f 20 69 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20  o individual.** 
14210 66 69 65 6c 64 73 2c 20 66 6f 72 20 74 68 65 20  fields, for the 
14220 70 75 72 70 6f 73 65 73 20 6f 66 20 64 6f 69 6e  purposes of doin
14230 67 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a  g a comparison..
14240 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64 20 69  **.** A record i
14250 73 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61 74  s an object that
14260 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72   contains one or
14270 20 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f 66 20   more fields of 
14280 64 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72 64 73  data..** Records
14290 20 61 72 65 20 75 73 65 64 20 74 6f 20 73 74 6f   are used to sto
142a0 72 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  re the content o
142b0 66 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61 6e  f a table row an
142c0 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 68  d to store.** th
142d0 65 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e 64 65  e key of an inde
142e0 78 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63 6f 64  x.  A blob encod
142f0 69 6e 67 20 6f 66 20 61 20 72 65 63 6f 72 64 20  ing of a record 
14300 69 73 20 63 72 65 61 74 65 64 20 62 79 0a 2a 2a  is created by.**
14310 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f   the OP_MakeReco
14320 72 64 20 6f 70 63 6f 64 65 20 6f 66 20 74 68 65  rd opcode of the
14330 20 56 44 42 45 20 61 6e 64 20 69 73 20 64 69 73   VDBE and is dis
14340 61 73 73 65 6d 62 6c 65 64 20 62 79 20 74 68 65  assembled by the
14350 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70  .** OP_Column op
14360 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 69  code..**.** An i
14370 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
14380 6f 62 6a 65 63 74 20 73 65 72 76 65 73 20 61 73  object serves as
14390 20 61 20 22 6b 65 79 22 20 66 6f 72 20 64 6f 69   a "key" for doi
143a0 6e 67 20 61 20 73 65 61 72 63 68 20 6f 6e 0a 2a  ng a search on.*
143b0 2a 20 61 6e 20 69 6e 64 65 78 20 62 2b 74 72 65  * an index b+tre
143c0 65 2e 20 54 68 65 20 67 6f 61 6c 20 6f 66 20 74  e. The goal of t
143d0 68 65 20 73 65 61 72 63 68 20 69 73 20 74 6f 20  he search is to 
143e0 66 69 6e 64 20 74 68 65 20 65 6e 74 72 79 20 74  find the entry t
143f0 68 61 74 0a 2a 2a 20 69 73 20 63 6c 6f 73 65 64  hat.** is closed
14400 20 74 6f 20 74 68 65 20 6b 65 79 20 64 65 73 63   to the key desc
14410 72 69 62 65 64 20 62 79 20 74 68 69 73 20 6f 62  ribed by this ob
14420 6a 65 63 74 2e 20 20 54 68 69 73 20 6f 62 6a 65  ject.  This obje
14430 63 74 20 6d 69 67 68 74 20 68 6f 6c 64 0a 2a 2a  ct might hold.**
14440 20 6a 75 73 74 20 61 20 70 72 65 66 69 78 20 6f   just a prefix o
14450 66 20 74 68 65 20 6b 65 79 2e 20 20 54 68 65 20  f the key.  The 
14460 6e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73  number of fields
14470 20 69 73 20 67 69 76 65 6e 20 62 79 0a 2a 2a 20   is given by.** 
14480 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64  pKeyInfo->nField
14490 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 31 20 61  ..**.** The r1 a
144a0 6e 64 20 72 32 20 66 69 65 6c 64 73 20 61 72 65  nd r2 fields are
144b0 20 74 68 65 20 76 61 6c 75 65 73 20 74 6f 20 72   the values to r
144c0 65 74 75 72 6e 20 69 66 20 74 68 69 73 20 6b 65  eturn if this ke
144d0 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a  y is less than.*
144e0 2a 20 6f 72 20 67 72 65 61 74 65 72 20 74 68 61  * or greater tha
144f0 6e 20 61 20 6b 65 79 20 69 6e 20 74 68 65 20 62  n a key in the b
14500 74 72 65 65 2c 20 72 65 73 70 65 63 74 69 76 65  tree, respective
14510 6c 79 2e 20 20 54 68 65 73 65 20 61 72 65 20 6e  ly.  These are n
14520 6f 72 6d 61 6c 6c 79 0a 2a 2a 20 2d 31 20 61 6e  ormally.** -1 an
14530 64 20 2b 31 20 72 65 73 70 65 63 74 69 76 65 6c  d +1 respectivel
14540 79 2c 20 62 75 74 20 6d 69 67 68 74 20 62 65 20  y, but might be 
14550 69 6e 76 65 72 74 65 64 20 74 6f 20 2b 31 20 61  inverted to +1 a
14560 6e 64 20 2d 31 20 69 66 20 74 68 65 20 62 2d 74  nd -1 if the b-t
14570 72 65 65 0a 2a 2a 20 69 73 20 69 6e 20 44 45 53  ree.** is in DES
14580 43 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 54  C order..**.** T
14590 68 65 20 6b 65 79 20 63 6f 6d 70 61 72 69 73 6f  he key compariso
145a0 6e 20 66 75 6e 63 74 69 6f 6e 73 20 61 63 74 75  n functions actu
145b0 61 6c 6c 79 20 72 65 74 75 72 6e 20 64 65 66 61  ally return defa
145c0 75 6c 74 5f 72 63 20 77 68 65 6e 20 74 68 65 79  ult_rc when they
145d0 20 66 69 6e 64 0a 2a 2a 20 61 6e 20 65 71 75 61   find.** an equa
145e0 6c 73 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20  ls comparison.  
145f0 64 65 66 61 75 6c 74 5f 72 63 20 63 61 6e 20 62  default_rc can b
14600 65 20 2d 31 2c 20 30 2c 20 6f 72 20 2b 31 2e 20  e -1, 0, or +1. 
14610 20 49 66 20 74 68 65 72 65 20 61 72 65 0a 2a 2a   If there are.**
14620 20 6d 75 6c 74 69 70 6c 65 20 65 6e 74 72 69 65   multiple entrie
14630 73 20 69 6e 20 74 68 65 20 62 2d 74 72 65 65 20  s in the b-tree 
14640 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 6b 65  with the same ke
14650 79 20 28 77 68 65 6e 20 6f 6e 6c 79 20 6c 6f 6f  y (when only loo
14660 6b 69 6e 67 0a 2a 2a 20 61 74 20 74 68 65 20 66  king.** at the f
14670 69 72 73 74 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e  irst pKeyInfo->n
14680 46 69 65 6c 64 73 2c 29 20 74 68 65 6e 20 64 65  Fields,) then de
14690 66 61 75 6c 74 5f 72 63 20 63 61 6e 20 62 65 20  fault_rc can be 
146a0 73 65 74 20 74 6f 20 2d 31 20 74 6f 0a 2a 2a 20  set to -1 to.** 
146b0 63 61 75 73 65 20 74 68 65 20 73 65 61 72 63 68  cause the search
146c0 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61 73   to find the las
146d0 74 20 6d 61 74 63 68 2c 20 6f 72 20 2b 31 20 74  t match, or +1 t
146e0 6f 20 63 61 75 73 65 20 74 68 65 20 73 65 61 72  o cause the sear
146f0 63 68 20 74 6f 0a 2a 2a 20 66 69 6e 64 20 74 68  ch to.** find th
14700 65 20 66 69 72 73 74 20 6d 61 74 63 68 2e 0a 2a  e first match..*
14710 2a 0a 2a 2a 20 54 68 65 20 6b 65 79 20 63 6f 6d  *.** The key com
14720 70 61 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e  parison function
14730 73 20 77 69 6c 6c 20 73 65 74 20 65 71 53 65 65  s will set eqSee
14740 6e 20 74 6f 20 74 72 75 65 20 69 66 20 74 68 65  n to true if the
14750 79 20 65 76 65 72 0a 2a 2a 20 67 65 74 20 61 6e  y ever.** get an
14760 64 20 65 71 75 61 6c 20 72 65 73 75 6c 74 73 20  d equal results 
14770 77 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 74  when comparing t
14780 68 69 73 20 73 74 72 75 63 74 75 72 65 20 74 6f  his structure to
14790 20 61 20 62 2d 74 72 65 65 20 72 65 63 6f 72 64   a b-tree record
147a0 2e 0a 2a 2a 20 57 68 65 6e 20 64 65 66 61 75 6c  ..** When defaul
147b0 74 5f 72 63 21 3d 30 2c 20 74 68 65 20 73 65 61  t_rc!=0, the sea
147c0 72 63 68 20 6d 69 67 68 74 20 65 6e 64 20 75 70  rch might end up
147d0 20 6f 6e 20 74 68 65 20 72 65 63 6f 72 64 20 69   on the record i
147e0 6d 6d 65 64 69 61 74 65 6c 79 0a 2a 2a 20 62 65  mmediately.** be
147f0 66 6f 72 65 20 74 68 65 20 66 69 72 73 74 20 6d  fore the first m
14800 61 74 63 68 20 6f 72 20 69 6d 6d 65 64 69 61 74  atch or immediat
14810 65 6c 79 20 61 66 74 65 72 20 74 68 65 20 6c 61  ely after the la
14820 73 74 20 6d 61 74 63 68 2e 20 20 54 68 65 0a 2a  st match.  The.*
14830 2a 20 65 71 53 65 65 6e 20 66 69 65 6c 64 20 77  * eqSeen field w
14840 69 6c 6c 20 69 6e 64 69 63 61 74 65 20 77 68 65  ill indicate whe
14850 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20 65  ther or not an e
14860 78 61 63 74 20 6d 61 74 63 68 20 65 78 69 73 74  xact match exist
14870 73 20 69 6e 20 74 68 65 0a 2a 2a 20 62 2d 74 72  s in the.** b-tr
14880 65 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e  ee..*/.struct Un
14890 70 61 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20  packedRecord {. 
148a0 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e   KeyInfo *pKeyIn
148b0 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f  fo;  /* Collatio
148c0 6e 20 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72  n and sort-order
148d0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a   information */.
148e0 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20    Mem *aMem;    
148f0 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 73 20        /* Values 
14900 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b  */.  u16 nField;
14910 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
14920 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e  er of entries in
14930 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69 38   apMem[] */.  i8
14940 20 64 65 66 61 75 6c 74 5f 72 63 3b 20 20 20 20   default_rc;    
14950 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20    /* Comparison 
14960 72 65 73 75 6c 74 20 69 66 20 6b 65 79 73 20 61  result if keys a
14970 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20 75 38  re equal */.  u8
14980 20 65 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20   errCode;       
14990 20 20 2f 2a 20 45 72 72 6f 72 20 64 65 74 65 63    /* Error detec
149a0 74 65 64 20 62 79 20 78 52 65 63 6f 72 64 43 6f  ted by xRecordCo
149b0 6d 70 61 72 65 20 28 43 4f 52 52 55 50 54 20 6f  mpare (CORRUPT o
149c0 72 20 4e 4f 4d 45 4d 29 20 2a 2f 0a 20 20 69 38  r NOMEM) */.  i8
149d0 20 72 31 3b 20 20 20 20 20 20 20 20 20 20 20 20   r1;            
149e0 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65    /* Value to re
149f0 74 75 72 6e 20 69 66 20 28 6c 68 73 20 3e 20 72  turn if (lhs > r
14a00 68 73 29 20 2a 2f 0a 20 20 69 38 20 72 32 3b 20  hs) */.  i8 r2; 
14a10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
14a20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20  Value to return 
14a30 69 66 20 28 72 68 73 20 3c 20 6c 68 73 29 20 2a  if (rhs < lhs) *
14a40 2f 0a 20 20 75 38 20 65 71 53 65 65 6e 3b 20 20  /.  u8 eqSeen;  
14a50 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
14a60 69 66 20 61 6e 20 65 71 75 61 6c 69 74 79 20 63  if an equality c
14a70 6f 6d 70 61 72 69 73 6f 6e 20 68 61 73 20 62 65  omparison has be
14a80 65 6e 20 73 65 65 6e 20 2a 2f 0a 7d 3b 0a 0a 0a  en seen */.};...
14a90 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 69  /*.** Each SQL i
14aa0 6e 64 65 78 20 69 73 20 72 65 70 72 65 73 65 6e  ndex is represen
14ab0 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79  ted in memory by
14ac0 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20   an.** instance 
14ad0 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
14ae0 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a   structure..**.*
14af0 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66  * The columns of
14b00 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
14b10 61 72 65 20 74 6f 20 62 65 20 69 6e 64 65 78 65  are to be indexe
14b20 64 20 61 72 65 20 64 65 73 63 72 69 62 65 64 0a  d are described.
14b30 2a 2a 20 62 79 20 74 68 65 20 61 69 43 6f 6c 75  ** by the aiColu
14b40 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20 74 68  mn[] field of th
14b50 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 46  is structure.  F
14b60 6f 72 20 65 78 61 6d 70 6c 65 2c 20 73 75 70 70  or example, supp
14b70 6f 73 65 0a 2a 2a 20 77 65 20 68 61 76 65 20 74  ose.** we have t
14b80 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62  he following tab
14b90 6c 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a 2a 2a  le and index:.**
14ba0 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 54  .**     CREATE T
14bb0 41 42 4c 45 20 45 78 31 28 63 31 20 69 6e 74 2c  ABLE Ex1(c1 int,
14bc0 20 63 32 20 69 6e 74 2c 20 63 33 20 74 65 78 74   c2 int, c3 text
14bd0 29 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45  );.**     CREATE
14be0 20 49 4e 44 45 58 20 45 78 32 20 4f 4e 20 45 78   INDEX Ex2 ON Ex
14bf0 31 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a 20  1(c3,c1);.**.** 
14c00 49 6e 20 74 68 65 20 54 61 62 6c 65 20 73 74 72  In the Table str
14c10 75 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e  ucture describin
14c20 67 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20 62  g Ex1, nCol==3 b
14c30 65 63 61 75 73 65 20 74 68 65 72 65 20 61 72 65  ecause there are
14c40 0a 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75 6d 6e  .** three column
14c50 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20  s in the table. 
14c60 20 49 6e 20 74 68 65 20 49 6e 64 65 78 20 73 74   In the Index st
14c70 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62 69  ructure describi
14c80 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c 75  ng.** Ex2, nColu
14c90 6d 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20 6f 66  mn==2 since 2 of
14ca0 20 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73 20 6f   the 3 columns o
14cb0 66 20 45 78 31 20 61 72 65 20 69 6e 64 65 78 65  f Ex1 are indexe
14cc0 64 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20  d..** The value 
14cd0 6f 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73 20 7b  of aiColumn is {
14ce0 32 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75 6d 6e  2, 0}.  aiColumn
14cf0 5b 30 5d 3d 3d 32 20 62 65 63 61 75 73 65 20 74  [0]==2 because t
14d00 68 65 0a 2a 2a 20 66 69 72 73 74 20 63 6f 6c 75  he.** first colu
14d10 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64  mn to be indexed
14d20 20 28 63 33 29 20 68 61 73 20 61 6e 20 69 6e 64   (c3) has an ind
14d30 65 78 20 6f 66 20 32 20 69 6e 20 45 78 31 2e 61  ex of 2 in Ex1.a
14d40 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73 65  Col[]..** The se
14d50 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 62  cond column to b
14d60 65 20 69 6e 64 65 78 65 64 20 28 63 31 29 20 68  e indexed (c1) h
14d70 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 30  as an index of 0
14d80 20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b   in.** Ex1.aCol[
14d90 5d 2c 20 68 65 6e 63 65 20 45 78 32 2e 61 69 43  ], hence Ex2.aiC
14da0 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a  olumn[1]==0..**.
14db0 2a 2a 20 54 68 65 20 49 6e 64 65 78 2e 6f 6e 45  ** The Index.onE
14dc0 72 72 6f 72 20 66 69 65 6c 64 20 64 65 74 65 72  rror field deter
14dd0 6d 69 6e 65 73 20 77 68 65 74 68 65 72 20 6f 72  mines whether or
14de0 20 6e 6f 74 20 74 68 65 20 69 6e 64 65 78 65 64   not the indexed
14df0 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74   columns.** must
14e00 20 62 65 20 75 6e 69 71 75 65 20 61 6e 64 20 77   be unique and w
14e10 68 61 74 20 74 6f 20 64 6f 20 69 66 20 74 68 65  hat to do if the
14e20 79 20 61 72 65 20 6e 6f 74 2e 20 20 57 68 65 6e  y are not.  When
14e30 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f   Index.onError=O
14e40 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65  E_None,.** it me
14e50 61 6e 73 20 74 68 69 73 20 69 73 20 6e 6f 74 20  ans this is not 
14e60 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 2e 20  a unique index. 
14e70 20 4f 74 68 65 72 77 69 73 65 20 69 74 20 69 73   Otherwise it is
14e80 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 0a   a unique index.
14e90 2a 2a 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65  ** and the value
14ea0 20 6f 66 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f   of Index.onErro
14eb0 72 20 69 6e 64 69 63 61 74 65 20 74 68 65 20 77  r indicate the w
14ec0 68 69 63 68 20 63 6f 6e 66 6c 69 63 74 20 72 65  hich conflict re
14ed0 73 6f 6c 75 74 69 6f 6e 0a 2a 2a 20 61 6c 67 6f  solution.** algo
14ee0 72 69 74 68 6d 20 74 6f 20 65 6d 70 6c 6f 79 20  rithm to employ 
14ef0 77 68 65 6e 65 76 65 72 20 61 6e 20 61 74 74 65  whenever an atte
14f00 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20 69  mpt is made to i
14f10 6e 73 65 72 74 20 61 20 6e 6f 6e 2d 75 6e 69 71  nsert a non-uniq
14f20 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a  ue.** element..*
14f30 2a 0a 2a 2a 20 57 68 69 6c 65 20 70 61 72 73 69  *.** While parsi
14f40 6e 67 20 61 20 43 52 45 41 54 45 20 54 41 42 4c  ng a CREATE TABL
14f50 45 20 6f 72 20 43 52 45 41 54 45 20 49 4e 44 45  E or CREATE INDE
14f60 58 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 20 6f  X statement in o
14f70 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65 6e 65 72  rder to.** gener
14f80 61 74 65 20 56 44 42 45 20 63 6f 64 65 20 28 61  ate VDBE code (a
14f90 73 20 6f 70 70 6f 73 65 64 20 74 6f 20 70 61 72  s opposed to par
14fa0 73 69 6e 67 20 6f 6e 65 20 72 65 61 64 20 66 72  sing one read fr
14fb0 6f 6d 20 61 6e 20 73 71 6c 69 74 65 5f 6d 61 73  om an sqlite_mas
14fc0 74 65 72 0a 2a 2a 20 74 61 62 6c 65 20 61 73 20  ter.** table as 
14fd0 70 61 72 74 20 6f 66 20 70 61 72 73 69 6e 67 20  part of parsing 
14fe0 61 6e 20 65 78 69 73 74 69 6e 67 20 64 61 74 61  an existing data
14ff0 62 61 73 65 20 73 63 68 65 6d 61 29 2c 20 74 72  base schema), tr
15000 61 6e 73 69 65 6e 74 20 69 6e 73 74 61 6e 63 65  ansient instance
15010 73 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72  s.** of this str
15020 75 63 74 75 72 65 20 6d 61 79 20 62 65 20 63 72  ucture may be cr
15030 65 61 74 65 64 2e 20 49 6e 20 74 68 69 73 20 63  eated. In this c
15040 61 73 65 20 74 68 65 20 49 6e 64 65 78 2e 74 6e  ase the Index.tn
15050 75 6d 20 76 61 72 69 61 62 6c 65 20 69 73 0a 2a  um variable is.*
15060 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  * used to store 
15070 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 61  the address of a
15080 20 56 44 42 45 20 69 6e 73 74 72 75 63 74 69 6f   VDBE instructio
15090 6e 2c 20 6e 6f 74 20 61 20 64 61 74 61 62 61 73  n, not a databas
150a0 65 20 70 61 67 65 0a 2a 2a 20 6e 75 6d 62 65 72  e page.** number
150b0 20 28 69 74 20 63 61 6e 6e 6f 74 20 2d 20 74 68   (it cannot - th
150c0 65 20 64 61 74 61 62 61 73 65 20 70 61 67 65 20  e database page 
150d0 69 73 20 6e 6f 74 20 61 6c 6c 6f 63 61 74 65 64  is not allocated
150e0 20 75 6e 74 69 6c 20 74 68 65 20 56 44 42 45 0a   until the VDBE.
150f0 2a 2a 20 70 72 6f 67 72 61 6d 20 69 73 20 65 78  ** program is ex
15100 65 63 75 74 65 64 29 2e 20 53 65 65 20 63 6f 6e  ecuted). See con
15110 76 65 72 74 54 6f 57 69 74 68 6f 75 74 52 6f 77  vertToWithoutRow
15120 69 64 54 61 62 6c 65 28 29 20 66 6f 72 20 64 65  idTable() for de
15130 74 61 69 6c 73 2e 0a 2a 2f 0a 73 74 72 75 63 74  tails..*/.struct
15140 20 49 6e 64 65 78 20 7b 0a 20 20 63 68 61 72 20   Index {.  char 
15150 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
15160 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
15170 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69  his index */.  i
15180 31 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20 20  16 *aiColumn;   
15190 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68          /* Which
151a0 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65   columns are use
151b0 64 20 62 79 20 74 68 69 73 20 69 6e 64 65 78 2e  d by this index.
151c0 20 20 31 73 74 20 69 73 20 30 20 2a 2f 0a 20 20    1st is 0 */.  
151d0 4c 6f 67 45 73 74 20 2a 61 69 52 6f 77 4c 6f 67  LogEst *aiRowLog
151e0 45 73 74 3b 20 20 20 20 20 2f 2a 20 46 72 6f 6d  Est;     /* From
151f0 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74 2e 20 72   ANALYZE: Est. r
15200 6f 77 73 20 73 65 6c 65 63 74 65 64 20 62 79 20  ows selected by 
15210 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  each column */. 
15220 20 54 61 62 6c 65 20 2a 70 54 61 62 6c 65 3b 20   Table *pTable; 
15230 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
15240 20 53 51 4c 20 74 61 62 6c 65 20 62 65 69 6e 67   SQL table being
15250 20 69 6e 64 65 78 65 64 20 2a 2f 0a 20 20 63 68   indexed */.  ch
15260 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20  ar *zColAff;    
15270 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67         /* String
15280 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66   defining the af
15290 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63  finity of each c
152a0 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78  olumn */.  Index
152b0 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20   *pNext;        
152c0 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20      /* The next 
152d0 69 6e 64 65 78 20 61 73 73 6f 63 69 61 74 65 64  index associated
152e0 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 74   with the same t
152f0 61 62 6c 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61  able */.  Schema
15300 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20   *pSchema;      
15310 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e     /* Schema con
15320 74 61 69 6e 69 6e 67 20 74 68 69 73 20 69 6e 64  taining this ind
15330 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72  ex */.  u8 *aSor
15340 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20  tOrder;         
15350 20 2f 2a 20 66 6f 72 20 65 61 63 68 20 63 6f 6c   /* for each col
15360 75 6d 6e 3a 20 54 72 75 65 3d 3d 44 45 53 43 2c  umn: True==DESC,
15370 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a 20   False==ASC */. 
15380 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a 61 7a   const char **az
15390 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 41 72 72  Coll;     /* Arr
153a0 61 79 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20  ay of collation 
153b0 73 65 71 75 65 6e 63 65 20 6e 61 6d 65 73 20 66  sequence names f
153c0 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78  or index */.  Ex
153d0 70 72 20 2a 70 50 61 72 74 49 64 78 57 68 65 72  pr *pPartIdxWher
153e0 65 3b 20 20 20 20 20 2f 2a 20 57 48 45 52 45 20  e;     /* WHERE 
153f0 63 6c 61 75 73 65 20 66 6f 72 20 70 61 72 74 69  clause for parti
15400 61 6c 20 69 6e 64 69 63 65 73 20 2a 2f 0a 20 20  al indices */.  
15410 45 78 70 72 4c 69 73 74 20 2a 61 43 6f 6c 45 78  ExprList *aColEx
15420 70 72 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75  pr;      /* Colu
15430 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a  mn expressions *
15440 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20  /.  int tnum;   
15450 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
15460 44 42 20 50 61 67 65 20 63 6f 6e 74 61 69 6e 69  DB Page containi
15470 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68 69 73 20  ng root of this 
15480 69 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f 67 45 73  index */.  LogEs
15490 74 20 73 7a 49 64 78 52 6f 77 3b 20 20 20 20 20  t szIdxRow;     
154a0 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64      /* Estimated
154b0 20 61 76 65 72 61 67 65 20 72 6f 77 20 73 69 7a   average row siz
154c0 65 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20  e in bytes */.  
154d0 75 31 36 20 6e 4b 65 79 43 6f 6c 3b 20 20 20 20  u16 nKeyCol;    
154e0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
154f0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f  er of columns fo
15500 72 6d 69 6e 67 20 74 68 65 20 6b 65 79 20 2a 2f  rming the key */
15510 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20  .  u16 nColumn; 
15520 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
15530 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
15540 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 69   stored in the i
15550 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 6f 6e 45  ndex */.  u8 onE
15560 72 72 6f 72 3b 20 20 20 20 20 20 20 20 20 20 20  rror;           
15570 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c 20     /* OE_Abort, 
15580 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f 52 65  OE_Ignore, OE_Re
15590 70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e  place, or OE_Non
155a0 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  e */.  unsigned 
155b0 69 64 78 54 79 70 65 3a 32 3b 20 20 20 20 20 20  idxType:2;      
155c0 2f 2a 20 31 3d 3d 55 4e 49 51 55 45 2c 20 32 3d  /* 1==UNIQUE, 2=
155d0 3d 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 30 3d  =PRIMARY KEY, 0=
155e0 3d 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f  =CREATE INDEX */
155f0 0a 20 20 75 6e 73 69 67 6e 65 64 20 62 55 6e 6f  .  unsigned bUno
15600 72 64 65 72 65 64 3a 31 3b 20 20 20 2f 2a 20 55  rdered:1;   /* U
15610 73 65 20 74 68 69 73 20 69 6e 64 65 78 20 66 6f  se this index fo
15620 72 20 3d 3d 20 6f 72 20 49 4e 20 71 75 65 72 69  r == or IN queri
15630 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e 73  es only */.  uns
15640 69 67 6e 65 64 20 75 6e 69 71 4e 6f 74 4e 75 6c  igned uniqNotNul
15650 6c 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66  l:1;  /* True if
15660 20 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54 20   UNIQUE and NOT 
15670 4e 55 4c 4c 20 66 6f 72 20 61 6c 6c 20 63 6f 6c  NULL for all col
15680 75 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  umns */.  unsign
15690 65 64 20 69 73 52 65 73 69 7a 65 64 3a 31 3b 20  ed isResized:1; 
156a0 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65     /* True if re
156b0 73 69 7a 65 49 6e 64 65 78 4f 62 6a 65 63 74 28  sizeIndexObject(
156c0 29 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65  ) has been calle
156d0 64 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  d */.  unsigned 
156e0 69 73 43 6f 76 65 72 69 6e 67 3a 31 3b 20 20 20  isCovering:1;   
156f0 2f 2a 20 54 72 75 65 20 69 66 20 74 68 69 73 20  /* True if this 
15700 69 73 20 61 20 63 6f 76 65 72 69 6e 67 20 69 6e  is a covering in
15710 64 65 78 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  dex */.  unsigne
15720 64 20 6e 6f 53 6b 69 70 53 63 61 6e 3a 31 3b 20  d noSkipScan:1; 
15730 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 74 72 79 20    /* Do not try 
15740 74 6f 20 75 73 65 20 73 6b 69 70 2d 73 63 61 6e  to use skip-scan
15750 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 6e   if true */.  un
15760 73 69 67 6e 65 64 20 68 61 73 53 74 61 74 31 3a  signed hasStat1:
15770 31 3b 20 20 20 20 20 2f 2a 20 61 69 52 6f 77 4c  1;     /* aiRowL
15780 6f 67 45 73 74 20 76 61 6c 75 65 73 20 63 6f 6d  ogEst values com
15790 65 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74  e from sqlite_st
157a0 61 74 31 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  at1 */.#ifdef SQ
157b0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
157c0 33 5f 4f 52 5f 53 54 41 54 34 0a 20 20 69 6e 74  3_OR_STAT4.  int
157d0 20 6e 53 61 6d 70 6c 65 3b 20 20 20 20 20 20 20   nSample;       
157e0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
157f0 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 61  of elements in a
15800 53 61 6d 70 6c 65 5b 5d 20 2a 2f 0a 20 20 69 6e  Sample[] */.  in
15810 74 20 6e 53 61 6d 70 6c 65 43 6f 6c 3b 20 20 20  t nSampleCol;   
15820 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
15830 66 20 49 6e 64 65 78 53 61 6d 70 6c 65 2e 61 6e  f IndexSample.an
15840 45 71 5b 5d 20 61 6e 64 20 73 6f 20 6f 6e 20 2a  Eq[] and so on *
15850 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 41 76  /.  tRowcnt *aAv
15860 67 45 71 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  gEq;         /* 
15870 41 76 65 72 61 67 65 20 6e 45 71 20 76 61 6c 75  Average nEq valu
15880 65 73 20 66 6f 72 20 6b 65 79 73 20 6e 6f 74 20  es for keys not 
15890 69 6e 20 61 53 61 6d 70 6c 65 20 2a 2f 0a 20 20  in aSample */.  
158a0 49 6e 64 65 78 53 61 6d 70 6c 65 20 2a 61 53 61  IndexSample *aSa
158b0 6d 70 6c 65 3b 20 20 20 20 2f 2a 20 53 61 6d 70  mple;    /* Samp
158c0 6c 65 73 20 6f 66 20 74 68 65 20 6c 65 66 74 2d  les of the left-
158d0 6d 6f 73 74 20 6b 65 79 20 2a 2f 0a 20 20 74 52  most key */.  tR
158e0 6f 77 63 6e 74 20 2a 61 69 52 6f 77 45 73 74 3b  owcnt *aiRowEst;
158f0 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f         /* Non-lo
15900 67 61 72 69 74 68 6d 69 63 20 73 74 61 74 31 20  garithmic stat1 
15910 64 61 74 61 20 66 6f 72 20 74 68 69 73 20 69 6e  data for this in
15920 64 65 78 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74  dex */.  tRowcnt
15930 20 6e 52 6f 77 45 73 74 30 3b 20 20 20 20 20 20   nRowEst0;      
15940 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74    /* Non-logarit
15950 68 6d 69 63 20 6e 75 6d 62 65 72 20 6f 66 20 72  hmic number of r
15960 6f 77 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78  ows in the index
15970 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f   */.#endif.};../
15980 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
15990 75 65 73 20 66 6f 72 20 49 6e 64 65 78 2e 69 64  ues for Index.id
159a0 78 54 79 70 65 0a 2a 2f 0a 23 64 65 66 69 6e 65  xType.*/.#define
159b0 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f   SQLITE_IDXTYPE_
159c0 41 50 50 44 45 46 20 20 20 20 20 20 30 20 20 20  APPDEF      0   
159d0 2f 2a 20 43 72 65 61 74 65 64 20 75 73 69 6e 67  /* Created using
159e0 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f   CREATE INDEX */
159f0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
15a00 49 44 58 54 59 50 45 5f 55 4e 49 51 55 45 20 20  IDXTYPE_UNIQUE  
15a10 20 20 20 20 31 20 20 20 2f 2a 20 49 6d 70 6c 65      1   /* Imple
15a20 6d 65 6e 74 73 20 61 20 55 4e 49 51 55 45 20 63  ments a UNIQUE c
15a30 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65  onstraint */.#de
15a40 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54  fine SQLITE_IDXT
15a50 59 50 45 5f 50 52 49 4d 41 52 59 4b 45 59 20 20  YPE_PRIMARYKEY  
15a60 32 20 20 20 2f 2a 20 49 73 20 74 68 65 20 50 52  2   /* Is the PR
15a70 49 4d 41 52 59 20 4b 45 59 20 66 6f 72 20 74 68  IMARY KEY for th
15a80 65 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 20 52  e table */../* R
15a90 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e  eturn true if in
15aa0 64 65 78 20 58 20 69 73 20 61 20 50 52 49 4d 41  dex X is a PRIMA
15ab0 52 59 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f 0a  RY KEY index */.
15ac0 23 64 65 66 69 6e 65 20 49 73 50 72 69 6d 61 72  #define IsPrimar
15ad0 79 4b 65 79 49 6e 64 65 78 28 58 29 20 20 28 28  yKeyIndex(X)  ((
15ae0 58 29 2d 3e 69 64 78 54 79 70 65 3d 3d 53 51 4c  X)->idxType==SQL
15af0 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d  ITE_IDXTYPE_PRIM
15b00 41 52 59 4b 45 59 29 0a 0a 2f 2a 20 52 65 74 75  ARYKEY)../* Retu
15b10 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64 65 78  rn true if index
15b20 20 58 20 69 73 20 61 20 55 4e 49 51 55 45 20 69   X is a UNIQUE i
15b30 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ndex */.#define 
15b40 49 73 55 6e 69 71 75 65 49 6e 64 65 78 28 58 29  IsUniqueIndex(X)
15b50 20 20 20 20 20 20 28 28 58 29 2d 3e 6f 6e 45 72        ((X)->onEr
15b60 72 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f  ror!=OE_None)../
15b70 2a 20 54 68 65 20 49 6e 64 65 78 2e 61 69 43 6f  * The Index.aiCo
15b80 6c 75 6d 6e 5b 5d 20 76 61 6c 75 65 73 20 61 72  lumn[] values ar
15b90 65 20 6e 6f 72 6d 61 6c 6c 79 20 70 6f 73 69 74  e normally posit
15ba0 69 76 65 20 69 6e 74 65 67 65 72 2e 20 20 42 75  ive integer.  Bu
15bb0 74 0a 2a 2a 20 74 68 65 72 65 20 61 72 65 20 73  t.** there are s
15bc0 6f 6d 65 20 6e 65 67 61 74 69 76 65 20 76 61 6c  ome negative val
15bd0 75 65 73 20 74 68 61 74 20 68 61 76 65 20 73 70  ues that have sp
15be0 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 3a 0a 2a  ecial meaning:.*
15bf0 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f 52 4f 57  /.#define XN_ROW
15c00 49 44 20 20 20 20 20 28 2d 31 29 20 20 20 20 20  ID     (-1)     
15c10 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c 75 6d  /* Indexed colum
15c20 6e 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 2a  n is the rowid *
15c30 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f 45 58 50  /.#define XN_EXP
15c40 52 20 20 20 20 20 20 28 2d 32 29 20 20 20 20 20  R      (-2)     
15c50 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c 75 6d  /* Indexed colum
15c60 6e 20 69 73 20 61 6e 20 65 78 70 72 65 73 73 69  n is an expressi
15c70 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63  on */../*.** Eac
15c80 68 20 73 61 6d 70 6c 65 20 73 74 6f 72 65 64 20  h sample stored 
15c90 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  in the sqlite_st
15ca0 61 74 33 20 74 61 62 6c 65 20 69 73 20 72 65 70  at3 table is rep
15cb0 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f  resented in memo
15cc0 72 79 0a 2a 2a 20 75 73 69 6e 67 20 61 20 73 74  ry.** using a st
15cd0 72 75 63 74 75 72 65 20 6f 66 20 74 68 69 73 20  ructure of this 
15ce0 74 79 70 65 2e 20 20 53 65 65 20 64 6f 63 75 6d  type.  See docum
15cf0 65 6e 74 61 74 69 6f 6e 20 61 74 20 74 68 65 20  entation at the 
15d00 74 6f 70 20 6f 66 20 74 68 65 0a 2a 2a 20 61 6e  top of the.** an
15d10 61 6c 79 7a 65 2e 63 20 73 6f 75 72 63 65 20 66  alyze.c source f
15d20 69 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ile for addition
15d30 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
15d40 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78 53  */.struct IndexS
15d50 61 6d 70 6c 65 20 7b 0a 20 20 76 6f 69 64 20 2a  ample {.  void *
15d60 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50  p;          /* P
15d70 6f 69 6e 74 65 72 20 74 6f 20 73 61 6d 70 6c 65  ointer to sample
15d80 64 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  d record */.  in
15d90 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  t n;            
15da0 2f 2a 20 53 69 7a 65 20 6f 66 20 72 65 63 6f 72  /* Size of recor
15db0 64 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20  d in bytes */.  
15dc0 74 52 6f 77 63 6e 74 20 2a 61 6e 45 71 3b 20 20  tRowcnt *anEq;  
15dd0 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72    /* Est. number
15de0 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 74   of rows where t
15df0 68 65 20 6b 65 79 20 65 71 75 61 6c 73 20 74 68  he key equals th
15e00 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74  is sample */.  t
15e10 52 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b 20 20 20  Rowcnt *anLt;   
15e20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20   /* Est. number 
15e30 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 6b 65  of rows where ke
15e40 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74  y is less than t
15e50 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20  his sample */.  
15e60 74 52 6f 77 63 6e 74 20 2a 61 6e 44 4c 74 3b 20  tRowcnt *anDLt; 
15e70 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72    /* Est. number
15e80 20 6f 66 20 64 69 73 74 69 6e 63 74 20 6b 65 79   of distinct key
15e90 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73  s less than this
15ea0 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f   sample */.};../
15eb0 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65 6e 20  *.** Each token 
15ec0 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20 74 68  coming out of th
15ed0 65 20 6c 65 78 65 72 20 69 73 20 61 6e 20 69 6e  e lexer is an in
15ee0 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68 69  stance of.** thi
15ef0 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 6f  s structure.  To
15f00 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f 20 75 73  kens are also us
15f10 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 61 6e  ed as part of an
15f20 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a 0a   expression..**.
15f30 2a 2a 20 4e 6f 74 65 20 69 66 20 54 6f 6b 65 6e  ** Note if Token
15f40 2e 7a 3d 3d 30 20 74 68 65 6e 20 54 6f 6b 65 6e  .z==0 then Token
15f50 2e 64 79 6e 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e  .dyn and Token.n
15f60 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64 20 61   are undefined a
15f70 6e 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e 74 61 69  nd.** may contai
15f80 6e 20 72 61 6e 64 6f 6d 20 76 61 6c 75 65 73 2e  n random values.
15f90 20 20 44 6f 20 6e 6f 74 20 6d 61 6b 65 20 61 6e    Do not make an
15fa0 79 20 61 73 73 75 6d 70 74 69 6f 6e 73 20 61 62  y assumptions ab
15fb0 6f 75 74 20 54 6f 6b 65 6e 2e 64 79 6e 0a 2a 2a  out Token.dyn.**
15fc0 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 77 68 65   and Token.n whe
15fd0 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a 2f  n Token.z==0..*/
15fe0 0a 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 7b 0a  .struct Token {.
15ff0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b    const char *z;
16000 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20       /* Text of 
16010 74 68 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74 20  the token.  Not 
16020 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61 74 65 64 21  NULL-terminated!
16030 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
16040 6e 74 20 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d 62  nt n;    /* Numb
16050 65 72 20 6f 66 20 63 68 61 72 61 63 74 65 72 73  er of characters
16060 20 69 6e 20 74 68 69 73 20 74 6f 6b 65 6e 20 2a   in this token *
16070 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  /.};../*.** An i
16080 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
16090 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  structure contai
160a0 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e  ns information n
160b0 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74  eeded to generat
160c0 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 61 20  e.** code for a 
160d0 53 45 4c 45 43 54 20 74 68 61 74 20 63 6f 6e 74  SELECT that cont
160e0 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20 66  ains aggregate f
160f0 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20  unctions..**.** 
16100 49 66 20 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f 41  If Expr.op==TK_A
16110 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b 5f  GG_COLUMN or TK_
16120 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 74 68 65  AGG_FUNCTION the
16130 6e 20 45 78 70 72 2e 70 41 67 67 49 6e 66 6f 20  n Expr.pAggInfo 
16140 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20  is a.** pointer 
16150 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72  to this structur
16160 65 2e 20 20 54 68 65 20 45 78 70 72 2e 69 43 6f  e.  The Expr.iCo
16170 6c 75 6d 6e 20 66 69 65 6c 64 20 69 73 20 74 68  lumn field is th
16180 65 20 69 6e 64 65 78 20 69 6e 0a 2a 2a 20 41 67  e index in.** Ag
16190 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72 20  gInfo.aCol[] or 
161a0 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d 20  AggInfo.aFunc[] 
161b0 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e  of information n
161c0 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74  eeded to generat
161d0 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 74 68  e.** code for th
161e0 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41  at node..**.** A
161f0 67 67 49 6e 66 6f 2e 70 47 72 6f 75 70 42 79 20  ggInfo.pGroupBy 
16200 61 6e 64 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e  and AggInfo.aFun
16210 63 2e 70 45 78 70 72 20 70 6f 69 6e 74 20 74 6f  c.pExpr point to
16220 20 66 69 65 6c 64 73 20 77 69 74 68 69 6e 20 74   fields within t
16230 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 53  he.** original S
16240 65 6c 65 63 74 20 73 74 72 75 63 74 75 72 65 20  elect structure 
16250 74 68 61 74 20 64 65 73 63 72 69 62 65 73 20 74  that describes t
16260 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  he SELECT statem
16270 65 6e 74 2e 20 20 54 68 65 73 65 0a 2a 2a 20 66  ent.  These.** f
16280 69 65 6c 64 73 20 64 6f 20 6e 6f 74 20 6e 65 65  ields do not nee
16290 64 20 74 6f 20 62 65 20 66 72 65 65 64 20 77 68  d to be freed wh
162a0 65 6e 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20  en deallocating 
162b0 74 68 65 20 41 67 67 49 6e 66 6f 20 73 74 72 75  the AggInfo stru
162c0 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  cture..*/.struct
162d0 20 41 67 67 49 6e 66 6f 20 7b 0a 20 20 75 38 20   AggInfo {.  u8 
162e0 64 69 72 65 63 74 4d 6f 64 65 3b 20 20 20 20 20  directMode;     
162f0 20 20 20 20 20 2f 2a 20 44 69 72 65 63 74 20 72       /* Direct r
16300 65 6e 64 65 72 69 6e 67 20 6d 6f 64 65 20 6d 65  endering mode me
16310 61 6e 73 20 74 61 6b 65 20 64 61 74 61 20 64 69  ans take data di
16320 72 65 63 74 6c 79 0a 20 20 20 20 20 20 20 20 20  rectly.         
16330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16340 20 2a 2a 20 66 72 6f 6d 20 73 6f 75 72 63 65 20   ** from source 
16350 74 61 62 6c 65 73 20 72 61 74 68 65 72 20 74 68  tables rather th
16360 61 6e 20 66 72 6f 6d 20 61 63 63 75 6d 75 6c 61  an from accumula
16370 74 6f 72 73 20 2a 2f 0a 20 20 75 38 20 75 73 65  tors */.  u8 use
16380 53 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20  SortingIdx;     
16390 20 20 2f 2a 20 49 6e 20 64 69 72 65 63 74 20 6d    /* In direct m
163a0 6f 64 65 2c 20 72 65 66 65 72 65 6e 63 65 20 74  ode, reference t
163b0 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78  he sorting index
163c0 20 72 61 74 68 65 72 0a 20 20 20 20 20 20 20 20   rather.        
163d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
163e0 20 20 2a 2a 20 74 68 61 6e 20 74 68 65 20 73 6f    ** than the so
163f0 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20  urce table */.  
16400 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 3b 20  int sortingIdx; 
16410 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f          /* Curso
16420 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  r number of the 
16430 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f  sorting index */
16440 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64  .  int sortingId
16450 78 50 54 61 62 3b 20 20 20 20 20 2f 2a 20 43 75  xPTab;     /* Cu
16460 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 70  rsor number of p
16470 73 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20  seudo-table */. 
16480 20 69 6e 74 20 6e 53 6f 72 74 69 6e 67 43 6f 6c   int nSortingCol
16490 75 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75 6d 62  umn;     /* Numb
164a0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
164b0 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64   the sorting ind
164c0 65 78 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65  ex */.  int mnRe
164d0 67 2c 20 6d 78 52 65 67 3b 20 20 20 20 20 20 20  g, mxReg;       
164e0 2f 2a 20 52 61 6e 67 65 20 6f 66 20 72 65 67 69  /* Range of regi
164f0 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20  sters allocated 
16500 66 6f 72 20 61 43 6f 6c 20 61 6e 64 20 61 46 75  for aCol and aFu
16510 6e 63 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  nc */.  ExprList
16520 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20 20   *pGroupBy;     
16530 2f 2a 20 54 68 65 20 67 72 6f 75 70 20 62 79 20  /* The group by 
16540 63 6c 61 75 73 65 20 2a 2f 0a 20 20 73 74 72 75  clause */.  stru
16550 63 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c 20 7b  ct AggInfo_col {
16560 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20      /* For each 
16570 63 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e 20 73  column used in s
16580 6f 75 72 63 65 20 74 61 62 6c 65 73 20 2a 2f 0a  ource tables */.
16590 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b      Table *pTab;
165a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
165b0 53 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a  Source table */.
165c0 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20      int iTable; 
165d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
165e0 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66  Cursor number of
165f0 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c   the source tabl
16600 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 6f  e */.    int iCo
16610 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20  lumn;           
16620 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62    /* Column numb
16630 65 72 20 77 69 74 68 69 6e 20 74 68 65 20 73 6f  er within the so
16640 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20  urce table */.  
16650 20 20 69 6e 74 20 69 53 6f 72 74 65 72 43 6f 6c    int iSorterCol
16660 75 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f  umn;       /* Co
16670 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 74  lumn number in t
16680 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78  he sorting index
16690 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d   */.    int iMem
166a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
166b0 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74   /* Memory locat
166c0 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61 73  ion that acts as
166d0 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a   accumulator */.
166e0 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b      Expr *pExpr;
166f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
16700 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 65 78 70  The original exp
16710 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20 2a  ression */.  } *
16720 61 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c  aCol;.  int nCol
16730 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  umn;            
16740 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65  /* Number of use
16750 64 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f  d entries in aCo
16760 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 63  l[] */.  int nAc
16770 63 75 6d 75 6c 61 74 6f 72 3b 20 20 20 20 20 20  cumulator;      
16780 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
16790 6c 75 6d 6e 73 20 74 68 61 74 20 73 68 6f 77 20  lumns that show 
167a0 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6f  through to the o
167b0 75 74 70 75 74 2e 0a 20 20 20 20 20 20 20 20 20  utput..         
167c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
167d0 20 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 63   ** Additional c
167e0 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20  olumns are used 
167f0 6f 6e 6c 79 20 61 73 20 70 61 72 61 6d 65 74 65  only as paramete
16800 72 73 20 74 6f 0a 20 20 20 20 20 20 20 20 20 20  rs to.          
16810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16820 2a 2a 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  ** aggregate fun
16830 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75  ctions */.  stru
16840 63 74 20 41 67 67 49 6e 66 6f 5f 66 75 6e 63 20  ct AggInfo_func 
16850 7b 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20  {   /* For each 
16860 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
16870 6f 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a  on */.    Expr *
16880 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20  pExpr;          
16890 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e     /* Expression
168a0 20 65 6e 63 6f 64 69 6e 67 20 74 68 65 20 66 75   encoding the fu
168b0 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 46 75  nction */.    Fu
168c0 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b 20 20 20  ncDef *pFunc;   
168d0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 67         /* The ag
168e0 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
168f0 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
16900 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b  */.    int iMem;
16910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16920 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69  /* Memory locati
16930 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61 73 20  on that acts as 
16940 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20  accumulator */. 
16950 20 20 20 69 6e 74 20 69 44 69 73 74 69 6e 63 74     int iDistinct
16960 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45  ;           /* E
16970 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 75  phemeral table u
16980 73 65 64 20 74 6f 20 65 6e 66 6f 72 63 65 20 44  sed to enforce D
16990 49 53 54 49 4e 43 54 20 2a 2f 0a 20 20 7d 20 2a  ISTINCT */.  } *
169a0 61 46 75 6e 63 3b 0a 20 20 69 6e 74 20 6e 46 75  aFunc;.  int nFu
169b0 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nc;             
169c0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e   /* Number of en
169d0 74 72 69 65 73 20 69 6e 20 61 46 75 6e 63 5b 5d  tries in aFunc[]
169e0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
169f0 65 20 64 61 74 61 74 79 70 65 20 79 6e 56 61 72  e datatype ynVar
16a00 20 69 73 20 61 20 73 69 67 6e 65 64 20 69 6e 74   is a signed int
16a10 65 67 65 72 2c 20 65 69 74 68 65 72 20 31 36 2d  eger, either 16-
16a20 62 69 74 20 6f 72 20 33 32 2d 62 69 74 2e 0a 2a  bit or 32-bit..*
16a30 2a 20 55 73 75 61 6c 6c 79 20 69 74 20 69 73 20  * Usually it is 
16a40 31 36 2d 62 69 74 73 2e 20 20 42 75 74 20 69 66  16-bits.  But if
16a50 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49   SQLITE_MAX_VARI
16a60 41 42 4c 45 5f 4e 55 4d 42 45 52 20 69 73 20 67  ABLE_NUMBER is g
16a70 72 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20 33  reater.** than 3
16a80 32 37 36 37 20 77 65 20 68 61 76 65 20 74 6f 20  2767 we have to 
16a90 6d 61 6b 65 20 69 74 20 33 32 2d 62 69 74 2e 20  make it 32-bit. 
16aa0 20 31 36 2d 62 69 74 20 69 73 20 70 72 65 66 65   16-bit is prefe
16ab0 72 72 65 64 20 62 65 63 61 75 73 65 0a 2a 2a 20  rred because.** 
16ac0 69 74 20 75 73 65 73 20 6c 65 73 73 20 6d 65 6d  it uses less mem
16ad0 6f 72 79 20 69 6e 20 74 68 65 20 45 78 70 72 20  ory in the Expr 
16ae0 6f 62 6a 65 63 74 2c 20 77 68 69 63 68 20 69 73  object, which is
16af0 20 61 20 62 69 67 20 6d 65 6d 6f 72 79 20 75 73   a big memory us
16b00 65 72 0a 2a 2a 20 69 6e 20 73 79 73 74 65 6d 73  er.** in systems
16b10 20 77 69 74 68 20 6c 6f 74 73 20 6f 66 20 70 72   with lots of pr
16b20 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
16b30 73 2e 20 20 41 6e 64 20 66 65 77 20 61 70 70 6c  s.  And few appl
16b40 69 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65 64  ications.** need
16b50 20 6d 6f 72 65 20 74 68 61 6e 20 61 62 6f 75 74   more than about
16b60 20 31 30 20 6f 72 20 32 30 20 76 61 72 69 61 62   10 or 20 variab
16b70 6c 65 73 2e 20 20 42 75 74 20 73 6f 6d 65 20 65  les.  But some e
16b80 78 74 72 65 6d 65 20 75 73 65 72 73 20 77 61 6e  xtreme users wan
16b90 74 0a 2a 2a 20 74 6f 20 68 61 76 65 20 70 72 65  t.** to have pre
16ba0 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73  pared statements
16bb0 20 77 69 74 68 20 6f 76 65 72 20 33 32 37 36 37   with over 32767
16bc0 20 76 61 72 69 61 62 6c 65 73 2c 20 61 6e 64 20   variables, and 
16bd0 66 6f 72 20 74 68 65 6d 0a 2a 2a 20 74 68 65 20  for them.** the 
16be0 6f 70 74 69 6f 6e 20 69 73 20 61 76 61 69 6c 61  option is availa
16bf0 62 6c 65 20 28 61 74 20 63 6f 6d 70 69 6c 65 2d  ble (at compile-
16c00 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20 53 51  time)..*/.#if SQ
16c10 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c  LITE_MAX_VARIABL
16c20 45 5f 4e 55 4d 42 45 52 3c 3d 33 32 37 36 37 0a  E_NUMBER<=32767.
16c30 74 79 70 65 64 65 66 20 69 31 36 20 79 6e 56 61  typedef i16 ynVa
16c40 72 3b 0a 23 65 6c 73 65 0a 74 79 70 65 64 65 66  r;.#else.typedef
16c50 20 69 6e 74 20 79 6e 56 61 72 3b 0a 23 65 6e 64   int ynVar;.#end
16c60 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 6e  if../*.** Each n
16c70 6f 64 65 20 6f 66 20 61 6e 20 65 78 70 72 65 73  ode of an expres
16c80 73 69 6f 6e 20 69 6e 20 74 68 65 20 70 61 72 73  sion in the pars
16c90 65 20 74 72 65 65 20 69 73 20 61 6e 20 69 6e 73  e tree is an ins
16ca0 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73  tance.** of this
16cb0 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a   structure..**.*
16cc0 2a 20 45 78 70 72 2e 6f 70 20 69 73 20 74 68 65  * Expr.op is the
16cd0 20 6f 70 63 6f 64 65 2e 20 54 68 65 20 69 6e 74   opcode. The int
16ce0 65 67 65 72 20 70 61 72 73 65 72 20 74 6f 6b 65  eger parser toke
16cf0 6e 20 63 6f 64 65 73 20 61 72 65 20 72 65 75 73  n codes are reus
16d00 65 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64 65 73  ed.** as opcodes
16d10 20 68 65 72 65 2e 20 46 6f 72 20 65 78 61 6d 70   here. For examp
16d20 6c 65 2c 20 74 68 65 20 70 61 72 73 65 72 20 64  le, the parser d
16d30 65 66 69 6e 65 73 20 54 4b 5f 47 45 20 74 6f 20  efines TK_GE to 
16d40 62 65 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a  be an integer.**
16d50 20 63 6f 64 65 20 72 65 70 72 65 73 65 6e 74 69   code representi
16d60 6e 67 20 74 68 65 20 22 3e 3d 22 20 6f 70 65 72  ng the ">=" oper
16d70 61 74 6f 72 2e 20 54 68 69 73 20 73 61 6d 65 20  ator. This same 
16d80 69 6e 74 65 67 65 72 20 63 6f 64 65 20 69 73 20  integer code is 
16d90 72 65 75 73 65 64 0a 2a 2a 20 74 6f 20 72 65 70  reused.** to rep
16da0 72 65 73 65 6e 74 20 74 68 65 20 67 72 65 61 74  resent the great
16db0 65 72 2d 74 68 61 6e 2d 6f 72 2d 65 71 75 61 6c  er-than-or-equal
16dc0 2d 74 6f 20 6f 70 65 72 61 74 6f 72 20 69 6e 20  -to operator in 
16dd0 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 2a  the expression.*
16de0 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  * tree..**.** If
16df0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
16e00 69 73 20 61 6e 20 53 51 4c 20 6c 69 74 65 72 61  is an SQL litera
16e10 6c 20 28 54 4b 5f 49 4e 54 45 47 45 52 2c 20 54  l (TK_INTEGER, T
16e20 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f 42  K_FLOAT, TK_BLOB
16e30 2c 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52 49 4e  ,.** or TK_STRIN
16e40 47 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f  G), then Expr.to
16e50 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  ken contains the
16e60 20 74 65 78 74 20 6f 66 20 74 68 65 20 53 51 4c   text of the SQL
16e70 20 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a 2a 20   literal. 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 20 76 61 72 69 61 62 6c 65 20 28 54 4b  s a variable (TK
16ea0 5f 56 41 52 49 41 42 4c 45 29 2c 20 74 68 65 6e  _VARIABLE), then
16eb0 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74   Expr.token cont
16ec0 61 69 6e 73 20 74 68 65 0a 2a 2a 20 76 61 72 69  ains the.** vari
16ed0 61 62 6c 65 20 6e 61 6d 65 2e 20 46 69 6e 61 6c  able name. Final
16ee0 6c 79 2c 20 69 66 20 74 68 65 20 65 78 70 72 65  ly, if the expre
16ef0 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20  ssion is an SQL 
16f00 66 75 6e 63 74 69 6f 6e 20 28 54 4b 5f 46 55 4e  function (TK_FUN
16f10 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65 6e 20  CTION),.** then 
16f20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61  Expr.token conta
16f30 69 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  ins the name of 
16f40 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a  the function..**
16f50 0a 2a 2a 20 45 78 70 72 2e 70 52 69 67 68 74 20  .** Expr.pRight 
16f60 61 6e 64 20 45 78 70 72 2e 70 4c 65 66 74 20 61  and Expr.pLeft a
16f70 72 65 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20  re the left and 
16f80 72 69 67 68 74 20 73 75 62 65 78 70 72 65 73 73  right subexpress
16f90 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20 62 69 6e  ions of a.** bin
16fa0 61 72 79 20 6f 70 65 72 61 74 6f 72 2e 20 45 69  ary operator. Ei
16fb0 74 68 65 72 20 6f 72 20 62 6f 74 68 20 6d 61 79  ther or both may
16fc0 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20   be NULL..**.** 
16fd0 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73 20  Expr.x.pList is 
16fe0 61 20 6c 69 73 74 20 6f 66 20 61 72 67 75 6d 65  a list of argume
16ff0 6e 74 73 20 69 66 20 74 68 65 20 65 78 70 72 65  nts if the expre
17000 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20  ssion is an SQL 
17010 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61 20 43  function,.** a C
17020 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 6f  ASE expression o
17030 72 20 61 6e 20 49 4e 20 65 78 70 72 65 73 73 69  r an IN expressi
17040 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22  on of the form "
17050 3c 6c 68 73 3e 20 49 4e 20 28 3c 79 3e 2c 20 3c  <lhs> IN (<y>, <
17060 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78 70 72  z>...)"..** Expr
17070 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20 75 73  .x.pSelect is us
17080 65 64 20 69 66 20 74 68 65 20 65 78 70 72 65 73  ed if the expres
17090 73 69 6f 6e 20 69 73 20 61 20 73 75 62 2d 73 65  sion is a sub-se
170a0 6c 65 63 74 20 6f 72 20 61 6e 20 65 78 70 72 65  lect or an expre
170b0 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20  ssion of.** the 
170c0 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28  form "<lhs> IN (
170d0 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 20 49 66  SELECT ...)". If
170e0 20 74 68 65 20 45 50 5f 78 49 73 53 65 6c 65 63   the EP_xIsSelec
170f0 74 20 62 69 74 20 69 73 20 73 65 74 20 69 6e 20  t bit is set in 
17100 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67  the.** Expr.flag
17110 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 45 78 70  s mask, then Exp
17120 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76  r.x.pSelect is v
17130 61 6c 69 64 2e 20 4f 74 68 65 72 77 69 73 65 2c  alid. Otherwise,
17140 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73   Expr.x.pList is
17150 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a  .** valid..**.**
17160 20 41 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f   An expression o
17170 66 20 74 68 65 20 66 6f 72 6d 20 49 44 20 6f 72  f the form ID or
17180 20 49 44 2e 49 44 20 72 65 66 65 72 73 20 74 6f   ID.ID refers to
17190 20 61 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 74   a column in a t
171a0 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73 75 63  able..** For suc
171b0 68 20 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 45  h expressions, E
171c0 78 70 72 2e 6f 70 20 69 73 20 73 65 74 20 74 6f  xpr.op is set to
171d0 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 45   TK_COLUMN and E
171e0 78 70 72 2e 69 54 61 62 6c 65 20 69 73 0a 2a 2a  xpr.iTable is.**
171f0 20 74 68 65 20 69 6e 74 65 67 65 72 20 63 75 72   the integer cur
17200 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 61 20  sor number of a 
17210 56 44 42 45 20 63 75 72 73 6f 72 20 70 6f 69 6e  VDBE cursor poin
17220 74 69 6e 67 20 74 6f 20 74 68 61 74 20 74 61 62  ting to that tab
17230 6c 65 20 61 6e 64 0a 2a 2a 20 45 78 70 72 2e 69  le and.** Expr.i
17240 43 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20 63 6f  Column is the co
17250 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20  lumn number for 
17260 74 68 65 20 73 70 65 63 69 66 69 63 20 63 6f 6c  the specific col
17270 75 6d 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20  umn.  If the.** 
17280 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 75 73  expression is us
17290 65 64 20 61 73 20 61 20 72 65 73 75 6c 74 20 69  ed as a result i
172a0 6e 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 53  n an aggregate S
172b0 45 4c 45 43 54 2c 20 74 68 65 6e 20 74 68 65 0a  ELECT, then the.
172c0 2a 2a 20 76 61 6c 75 65 20 69 73 20 61 6c 73 6f  ** value is also
172d0 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 45   stored in the E
172e0 78 70 72 2e 69 41 67 67 20 63 6f 6c 75 6d 6e 20  xpr.iAgg column 
172f0 69 6e 20 74 68 65 20 61 67 67 72 65 67 61 74 65  in the aggregate
17300 20 73 6f 20 74 68 61 74 0a 2a 2a 20 69 74 20 63   so that.** it c
17310 61 6e 20 62 65 20 61 63 63 65 73 73 65 64 20 61  an be accessed a
17320 66 74 65 72 20 61 6c 6c 20 61 67 67 72 65 67 61  fter all aggrega
17330 74 65 73 20 61 72 65 20 63 6f 6d 70 75 74 65 64  tes are computed
17340 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65  ..**.** If the e
17350 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20  xpression is an 
17360 75 6e 62 6f 75 6e 64 20 76 61 72 69 61 62 6c 65  unbound variable
17370 20 6d 61 72 6b 65 72 20 28 61 20 71 75 65 73 74   marker (a quest
17380 69 6f 6e 20 6d 61 72 6b 0a 2a 2a 20 63 68 61 72  ion mark.** char
17390 61 63 74 65 72 20 27 3f 27 20 69 6e 20 74 68 65  acter '?' in the
173a0 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c 29 20 74   original SQL) t
173b0 68 65 6e 20 74 68 65 20 45 78 70 72 2e 69 54 61  hen the Expr.iTa
173c0 62 6c 65 20 68 6f 6c 64 73 20 74 68 65 20 69 6e  ble holds the in
173d0 64 65 78 0a 2a 2a 20 6e 75 6d 62 65 72 20 66 6f  dex.** number fo
173e0 72 20 74 68 61 74 20 76 61 72 69 61 62 6c 65 2e  r that variable.
173f0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78  .**.** If the ex
17400 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75  pression is a su
17410 62 71 75 65 72 79 20 74 68 65 6e 20 45 78 70 72  bquery then Expr
17420 2e 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61  .iColumn holds a
17430 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 72 65 67  n integer.** reg
17440 69 73 74 65 72 20 6e 75 6d 62 65 72 20 63 6f 6e  ister number con
17450 74 61 69 6e 69 6e 67 20 74 68 65 20 72 65 73 75  taining the resu
17460 6c 74 20 6f 66 20 74 68 65 20 73 75 62 71 75 65  lt of the subque
17470 72 79 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 73  ry.  If the.** s
17480 75 62 71 75 65 72 79 20 67 69 76 65 73 20 61 20  ubquery gives a 
17490 63 6f 6e 73 74 61 6e 74 20 72 65 73 75 6c 74 2c  constant result,
174a0 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20   then iTable is 
174b0 2d 31 2e 20 20 49 66 20 74 68 65 20 73 75 62 71  -1.  If the subq
174c0 75 65 72 79 0a 2a 2a 20 67 69 76 65 73 20 61 20  uery.** gives a 
174d0 64 69 66 66 65 72 65 6e 74 20 61 6e 73 77 65 72  different answer
174e0 20 61 74 20 64 69 66 66 65 72 65 6e 74 20 74 69   at different ti
174f0 6d 65 73 20 64 75 72 69 6e 67 20 73 74 61 74 65  mes during state
17500 6d 65 6e 74 20 70 72 6f 63 65 73 73 69 6e 67 0a  ment processing.
17510 2a 2a 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69  ** then iTable i
17520 73 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66  s the address of
17530 20 61 20 73 75 62 72 6f 75 74 69 6e 65 20 74 68   a subroutine th
17540 61 74 20 63 6f 6d 70 75 74 65 73 20 74 68 65 20  at computes the 
17550 73 75 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20  subquery..**.** 
17560 49 66 20 74 68 65 20 45 78 70 72 20 69 73 20 6f  If the Expr is o
17570 66 20 74 79 70 65 20 4f 50 5f 43 6f 6c 75 6d 6e  f type OP_Column
17580 2c 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65 20  , and the table 
17590 69 74 20 69 73 20 73 65 6c 65 63 74 69 6e 67 20  it is selecting 
175a0 66 72 6f 6d 0a 2a 2a 20 69 73 20 61 20 64 69 73  from.** is a dis
175b0 6b 20 74 61 62 6c 65 20 6f 72 20 74 68 65 20 22  k table or the "
175c0 6f 6c 64 2e 2a 22 20 70 73 65 75 64 6f 2d 74 61  old.*" pseudo-ta
175d0 62 6c 65 2c 20 74 68 65 6e 20 70 54 61 62 20 70  ble, then pTab p
175e0 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20  oints to the.** 
175f0 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 61  corresponding ta
17600 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0a  ble definition..
17610 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54 49 4f 4e  **.** ALLOCATION
17620 20 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a 20 45 78   NOTES:.**.** Ex
17630 70 72 20 6f 62 6a 65 63 74 73 20 63 61 6e 20 75  pr objects can u
17640 73 65 20 61 20 6c 6f 74 20 6f 66 20 6d 65 6d 6f  se a lot of memo
17650 72 79 20 73 70 61 63 65 20 69 6e 20 64 61 74 61  ry space in data
17660 62 61 73 65 20 73 63 68 65 6d 61 2e 20 20 54 6f  base schema.  To
17670 0a 2a 2a 20 68 65 6c 70 20 72 65 64 75 63 65 20  .** help reduce 
17680 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 6d 65  memory requireme
17690 6e 74 73 2c 20 73 6f 6d 65 74 69 6d 65 73 20 61  nts, sometimes a
176a0 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20 77 69  n Expr object wi
176b0 6c 6c 20 62 65 0a 2a 2a 20 74 72 75 6e 63 61 74  ll be.** truncat
176c0 65 64 2e 20 20 41 6e 64 20 74 6f 20 72 65 64 75  ed.  And to redu
176d0 63 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ce the number of
176e0 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
176f0 6f 6e 73 2c 20 73 6f 6d 65 74 69 6d 65 73 0a 2a  ons, sometimes.*
17700 2a 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 45 78  * two or more Ex
17710 70 72 20 6f 62 6a 65 63 74 73 20 77 69 6c 6c 20  pr objects will 
17720 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73  be stored in a s
17730 69 6e 67 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  ingle memory all
17740 6f 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74 6f 67 65  ocation,.** toge
17750 74 68 65 72 20 77 69 74 68 20 45 78 70 72 2e 7a  ther with Expr.z
17760 54 6f 6b 65 6e 20 73 74 72 69 6e 67 73 2e 0a 2a  Token strings..*
17770 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 50 5f 52  *.** If the EP_R
17780 65 64 75 63 65 64 20 61 6e 64 20 45 50 5f 54 6f  educed and EP_To
17790 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 73 20 61 72  kenOnly flags ar
177a0 65 20 73 65 74 20 77 68 65 6e 0a 2a 2a 20 61 6e  e set when.** an
177b0 20 45 78 70 72 20 6f 62 6a 65 63 74 20 69 73 20   Expr object is 
177c0 74 72 75 6e 63 61 74 65 64 2e 20 20 57 68 65 6e  truncated.  When
177d0 20 45 50 5f 52 65 64 75 63 65 64 20 69 73 20 73   EP_Reduced is s
177e0 65 74 2c 20 74 68 65 6e 20 61 6c 6c 0a 2a 2a 20  et, then all.** 
177f0 74 68 65 20 63 68 69 6c 64 20 45 78 70 72 20 6f  the child Expr o
17800 62 6a 65 63 74 73 20 69 6e 20 74 68 65 20 45 78  bjects in the Ex
17810 70 72 2e 70 4c 65 66 74 20 61 6e 64 20 45 78 70  pr.pLeft and Exp
17820 72 2e 70 52 69 67 68 74 20 73 75 62 74 72 65 65  r.pRight subtree
17830 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 61 69 6e  s.** are contain
17840 65 64 20 77 69 74 68 69 6e 20 74 68 65 20 73 61  ed within the sa
17850 6d 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  me memory alloca
17860 74 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20 68 6f 77  tion.  Note, how
17870 65 76 65 72 2c 20 74 68 61 74 0a 2a 2a 20 74 68  ever, that.** th
17880 65 20 73 75 62 74 72 65 65 73 20 69 6e 20 45 78  e subtrees in Ex
17890 70 72 2e 78 2e 70 4c 69 73 74 20 6f 72 20 45 78  pr.x.pList or Ex
178a0 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 61 72 65  pr.x.pSelect are
178b0 20 61 6c 77 61 79 73 20 73 65 70 61 72 61 74 65   always separate
178c0 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c  ly.** allocated,
178d0 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77   regardless of w
178e0 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 45 50  hether or not EP
178f0 5f 52 65 64 75 63 65 64 20 69 73 20 73 65 74 2e  _Reduced is set.
17900 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 20  .*/.struct Expr 
17910 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20  {.  u8 op;      
17920 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70             /* Op
17930 65 72 61 74 69 6f 6e 20 70 65 72 66 6f 72 6d 65  eration performe
17940 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a  d by this node *
17950 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74  /.  char affinit
17960 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  y;         /* Th
17970 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 74 68  e affinity of th
17980 65 20 63 6f 6c 75 6d 6e 20 6f 72 20 30 20 69 66  e column or 0 if
17990 20 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e 20 2a 2f   not a column */
179a0 0a 20 20 75 33 32 20 66 6c 61 67 73 3b 20 20 20  .  u32 flags;   
179b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72            /* Var
179c0 69 6f 75 73 20 66 6c 61 67 73 2e 20 20 45 50 5f  ious flags.  EP_
179d0 2a 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20  * See below */. 
179e0 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63 68 61   union {.    cha
179f0 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20 20 20  r *zToken;      
17a00 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 76 61 6c      /* Token val
17a10 75 65 2e 20 5a 65 72 6f 20 74 65 72 6d 69 6e 61  ue. Zero termina
17a20 74 65 64 20 61 6e 64 20 64 65 71 75 6f 74 65 64  ted and dequoted
17a30 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 56 61 6c   */.    int iVal
17a40 75 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ue;            /
17a50 2a 20 4e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 69  * Non-negative i
17a60 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 66 20  nteger value if 
17a70 45 50 5f 49 6e 74 56 61 6c 75 65 20 2a 2f 0a 20  EP_IntValue */. 
17a80 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49 66 20 74   } u;..  /* If t
17a90 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20  he EP_TokenOnly 
17aa0 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 74  flag is set in t
17ab0 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61  he Expr.flags ma
17ac0 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a  sk, then no.  **
17ad0 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61   space is alloca
17ae0 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c  ted for the fiel
17af0 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f  ds below this po
17b00 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20  int. An attempt 
17b10 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74  to.  ** access t
17b20 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20  hem will result 
17b30 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72  in a segfault or
17b40 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20 20   malfunction..  
17b50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17b60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17b70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17b80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17b90 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72 20 2a  *****/..  Expr *
17ba0 70 4c 65 66 74 3b 20 20 20 20 20 20 20 20 20 20  pLeft;          
17bb0 20 2f 2a 20 4c 65 66 74 20 73 75 62 6e 6f 64 65   /* Left subnode
17bc0 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 52 69 67   */.  Expr *pRig
17bd0 68 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ht;          /* 
17be0 52 69 67 68 74 20 73 75 62 6e 6f 64 65 20 2a 2f  Right subnode */
17bf0 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 45  .  union {.    E
17c00 78 70 72 4c 69 73 74 20 2a 70 4c 69 73 74 3b 20  xprList *pList; 
17c10 20 20 20 20 2f 2a 20 6f 70 20 3d 20 49 4e 2c 20      /* op = IN, 
17c20 45 58 49 53 54 53 2c 20 53 45 4c 45 43 54 2c 20  EXISTS, SELECT, 
17c30 43 41 53 45 2c 20 46 55 4e 43 54 49 4f 4e 2c 20  CASE, FUNCTION, 
17c40 42 45 54 57 45 45 4e 20 2a 2f 0a 20 20 20 20 53  BETWEEN */.    S
17c50 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20  elect *pSelect; 
17c60 20 20 20 20 2f 2a 20 45 50 5f 78 49 73 53 65 6c      /* EP_xIsSel
17c70 65 63 74 20 61 6e 64 20 6f 70 20 3d 20 49 4e 2c  ect and op = IN,
17c80 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43 54 20   EXISTS, SELECT 
17c90 2a 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f 2a 20  */.  } x;..  /* 
17ca0 49 66 20 74 68 65 20 45 50 5f 52 65 64 75 63 65  If the EP_Reduce
17cb0 64 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e  d flag is set in
17cc0 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20   the Expr.flags 
17cd0 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20  mask, then no.  
17ce0 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f  ** space is allo
17cf0 63 61 74 65 64 20 66 6f 72 20 74 68 65 20 66 69  cated for the fi
17d00 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20  elds below this 
17d10 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70  point. An attemp
17d20 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73  t to.  ** access
17d30 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c   them will resul
17d40 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20  t in a segfault 
17d50 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a  or malfunction..
17d60 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    **************
17d70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17d80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17d90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17da0 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20 53 51  *******/..#if SQ
17db0 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45  LITE_MAX_EXPR_DE
17dc0 50 54 48 3e 30 0a 20 20 69 6e 74 20 6e 48 65 69  PTH>0.  int nHei
17dd0 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ght;           /
17de0 2a 20 48 65 69 67 68 74 20 6f 66 20 74 68 65 20  * Height of the 
17df0 74 72 65 65 20 68 65 61 64 65 64 20 62 79 20 74  tree headed by t
17e00 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 23 65 6e 64  his node */.#end
17e10 69 66 0a 20 20 69 6e 74 20 69 54 61 62 6c 65 3b  if.  int iTable;
17e20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
17e30 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72 73 6f 72  K_COLUMN: cursor
17e40 20 6e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65   number of table
17e50 20 68 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d 6e 0a   holding column.
17e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e70 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 52           ** TK_R
17e80 45 47 49 53 54 45 52 3a 20 72 65 67 69 73 74 65  EGISTER: registe
17e90 72 20 6e 75 6d 62 65 72 0a 20 20 20 20 20 20 20  r number.       
17ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17eb0 20 20 2a 2a 20 54 4b 5f 54 52 49 47 47 45 52 3a    ** TK_TRIGGER:
17ec0 20 31 20 2d 3e 20 6e 65 77 2c 20 30 20 2d 3e 20   1 -> new, 0 -> 
17ed0 6f 6c 64 0a 20 20 20 20 20 20 20 20 20 20 20 20  old.            
17ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
17ef0 45 50 5f 55 6e 6c 69 6b 65 6c 79 3a 20 20 31 33  EP_Unlikely:  13
17f00 34 32 31 37 37 32 38 20 74 69 6d 65 73 20 6c 69  4217728 times li
17f10 6b 65 6c 69 68 6f 6f 64 0a 20 20 20 20 20 20 20  kelihood.       
17f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f30 20 20 2a 2a 20 54 4b 5f 53 45 4c 45 43 54 3a 20    ** TK_SELECT: 
17f40 31 73 74 20 72 65 67 69 73 74 65 72 20 6f 66 20  1st register of 
17f50 72 65 73 75 6c 74 20 76 65 63 74 6f 72 20 2a 2f  result vector */
17f60 0a 20 20 79 6e 56 61 72 20 69 43 6f 6c 75 6d 6e  .  ynVar iColumn
17f70 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f  ;         /* TK_
17f80 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 69  COLUMN: column i
17f90 6e 64 65 78 2e 20 20 2d 31 20 66 6f 72 20 72 6f  ndex.  -1 for ro
17fa0 77 69 64 2e 0a 20 20 20 20 20 20 20 20 20 20 20  wid..           
17fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
17fc0 20 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20 76 61   TK_VARIABLE: va
17fd0 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 28 61  riable number (a
17fe0 6c 77 61 79 73 20 3e 3d 20 31 29 2e 0a 20 20 20  lways >= 1)..   
17ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18000 20 20 20 20 20 20 2a 2a 20 54 4b 5f 53 45 4c 45        ** TK_SELE
18010 43 54 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d  CT_COLUMN: colum
18020 6e 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20  n of the result 
18030 76 65 63 74 6f 72 20 2a 2f 0a 20 20 69 31 36 20  vector */.  i16 
18040 69 41 67 67 3b 20 20 20 20 20 20 20 20 20 20 20  iAgg;           
18050 20 20 20 2f 2a 20 57 68 69 63 68 20 65 6e 74 72     /* Which entr
18060 79 20 69 6e 20 70 41 67 67 49 6e 66 6f 2d 3e 61  y in pAggInfo->a
18070 43 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46 75 6e 63  Col[] or ->aFunc
18080 5b 5d 20 2a 2f 0a 20 20 69 31 36 20 69 52 69 67  [] */.  i16 iRig
18090 68 74 4a 6f 69 6e 54 61 62 6c 65 3b 20 20 20 2f  htJoinTable;   /
180a0 2a 20 49 66 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e  * If EP_FromJoin
180b0 2c 20 74 68 65 20 72 69 67 68 74 20 74 61 62 6c  , the right tabl
180c0 65 20 6f 66 20 74 68 65 20 6a 6f 69 6e 20 2a 2f  e of the join */
180d0 0a 20 20 75 38 20 6f 70 32 3b 20 20 20 20 20 20  .  u8 op2;      
180e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f            /* TK_
180f0 52 45 47 49 53 54 45 52 3a 20 6f 72 69 67 69 6e  REGISTER: origin
18100 61 6c 20 76 61 6c 75 65 20 6f 66 20 45 78 70 72  al value of Expr
18110 2e 6f 70 0a 20 20 20 20 20 20 20 20 20 20 20 20  .op.            
18120 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
18130 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68 65 20 76  TK_COLUMN: the v
18140 61 6c 75 65 20 6f 66 20 70 35 20 66 6f 72 20 4f  alue of p5 for O
18150 50 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20  P_Column.       
18160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18170 20 20 2a 2a 20 54 4b 5f 41 47 47 5f 46 55 4e 43    ** TK_AGG_FUNC
18180 54 49 4f 4e 3a 20 6e 65 73 74 69 6e 67 20 64 65  TION: nesting de
18190 70 74 68 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f  pth */.  AggInfo
181a0 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 20 20   *pAggInfo;     
181b0 2f 2a 20 55 73 65 64 20 62 79 20 54 4b 5f 41 47  /* Used by TK_AG
181c0 47 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 54 4b 5f  G_COLUMN and TK_
181d0 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 2a 2f 0a  AGG_FUNCTION */.
181e0 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20    Table *pTab;  
181f0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c           /* Tabl
18200 65 20 66 6f 72 20 54 4b 5f 43 4f 4c 55 4d 4e 20  e for TK_COLUMN 
18210 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 2a 2f 0a  expressions. */.
18220 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  };../*.** The fo
18230 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 68 65 20  llowing are the 
18240 6d 65 61 6e 69 6e 67 73 20 6f 66 20 62 69 74 73  meanings of bits
18250 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61   in the Expr.fla
18260 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65  gs field..*/.#de
18270 66 69 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e  fine EP_FromJoin
18280 20 20 30 78 30 30 30 30 30 31 20 2f 2a 20 4f 72    0x000001 /* Or
18290 69 67 69 6e 61 74 65 73 20 69 6e 20 4f 4e 2f 55  iginates in ON/U
182a0 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 6f  SING clause of o
182b0 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  uter join */.#de
182c0 66 69 6e 65 20 45 50 5f 41 67 67 20 20 20 20 20  fine EP_Agg     
182d0 20 20 30 78 30 30 30 30 30 32 20 2f 2a 20 43 6f    0x000002 /* Co
182e0 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f  ntains one or mo
182f0 72 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  re aggregate fun
18300 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e  ctions */.#defin
18310 65 20 45 50 5f 52 65 73 6f 6c 76 65 64 20 20 30  e EP_Resolved  0
18320 78 30 30 30 30 30 34 20 2f 2a 20 49 44 73 20 68  x000004 /* IDs h
18330 61 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65  ave been resolve
18340 64 20 74 6f 20 43 4f 4c 55 4d 4e 73 20 2a 2f 0a  d to COLUMNs */.
18350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18360 20 20 2f 2a 20 30 78 30 30 30 30 30 38 20 2f 2f    /* 0x000008 //
18370 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 75   available for u
18380 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  se */.#define EP
18390 5f 44 69 73 74 69 6e 63 74 20 20 30 78 30 30 30  _Distinct  0x000
183a0 30 31 30 20 2f 2a 20 41 67 67 72 65 67 61 74 65  010 /* Aggregate
183b0 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 44   function with D
183c0 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20  ISTINCT keyword 
183d0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 56 61  */.#define EP_Va
183e0 72 53 65 6c 65 63 74 20 30 78 30 30 30 30 32 30  rSelect 0x000020
183f0 20 2f 2a 20 70 53 65 6c 65 63 74 20 69 73 20 63   /* pSelect is c
18400 6f 72 72 65 6c 61 74 65 64 2c 20 6e 6f 74 20 63  orrelated, not c
18410 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23 64 65 66 69  onstant */.#defi
18420 6e 65 20 45 50 5f 44 62 6c 51 75 6f 74 65 64 20  ne EP_DblQuoted 
18430 30 78 30 30 30 30 34 30 20 2f 2a 20 74 6f 6b 65  0x000040 /* toke
18440 6e 2e 7a 20 77 61 73 20 6f 72 69 67 69 6e 61 6c  n.z was original
18450 6c 79 20 69 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23  ly in "..." */.#
18460 64 65 66 69 6e 65 20 45 50 5f 49 6e 66 69 78 46  define EP_InfixF
18470 75 6e 63 20 30 78 30 30 30 30 38 30 20 2f 2a 20  unc 0x000080 /* 
18480 54 72 75 65 20 66 6f 72 20 61 6e 20 69 6e 66 69  True for an infi
18490 78 20 66 75 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45  x function: LIKE
184a0 2c 20 47 4c 4f 42 2c 20 65 74 63 20 2a 2f 0a 23  , GLOB, etc */.#
184b0 64 65 66 69 6e 65 20 45 50 5f 43 6f 6c 6c 61 74  define EP_Collat
184c0 65 20 20 20 30 78 30 30 30 31 30 30 20 2f 2a 20  e   0x000100 /* 
184d0 54 72 65 65 20 63 6f 6e 74 61 69 6e 73 20 61 20  Tree contains a 
184e0 54 4b 5f 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61  TK_COLLATE opera
184f0 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  tor */.#define E
18500 50 5f 47 65 6e 65 72 69 63 20 20 20 30 78 30 30  P_Generic   0x00
18510 30 32 30 30 20 2f 2a 20 49 67 6e 6f 72 65 20 43  0200 /* Ignore C
18520 4f 4c 4c 41 54 45 20 6f 72 20 61 66 66 69 6e 69  OLLATE or affini
18530 74 79 20 6f 6e 20 74 68 69 73 20 74 72 65 65 20  ty on this tree 
18540 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e  */.#define EP_In
18550 74 56 61 6c 75 65 20 20 30 78 30 30 30 34 30 30  tValue  0x000400
18560 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75   /* Integer valu
18570 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 75  e contained in u
18580 2e 69 56 61 6c 75 65 20 2a 2f 0a 23 64 65 66 69  .iValue */.#defi
18590 6e 65 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20  ne EP_xIsSelect 
185a0 30 78 30 30 30 38 30 30 20 2f 2a 20 78 2e 70 53  0x000800 /* x.pS
185b0 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64 20 28  elect is valid (
185c0 6f 74 68 65 72 77 69 73 65 20 78 2e 70 4c 69 73  otherwise x.pLis
185d0 74 20 69 73 29 20 2a 2f 0a 23 64 65 66 69 6e 65  t is) */.#define
185e0 20 45 50 5f 53 6b 69 70 20 20 20 20 20 20 30 78   EP_Skip      0x
185f0 30 30 31 30 30 30 20 2f 2a 20 43 4f 4c 4c 41 54  001000 /* COLLAT
18600 45 2c 20 41 53 2c 20 6f 72 20 55 4e 4c 49 4b 45  E, AS, or UNLIKE
18610 4c 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  LY */.#define EP
18620 5f 52 65 64 75 63 65 64 20 20 20 30 78 30 30 32  _Reduced   0x002
18630 30 30 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75  000 /* Expr stru
18640 63 74 20 45 58 50 52 5f 52 45 44 55 43 45 44 53  ct EXPR_REDUCEDS
18650 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a  IZE bytes only *
18660 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 54 6f 6b  /.#define EP_Tok
18670 65 6e 4f 6e 6c 79 20 30 78 30 30 34 30 30 30 20  enOnly 0x004000 
18680 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74 20 45  /* Expr struct E
18690 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a  XPR_TOKENONLYSIZ
186a0 45 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a  E bytes only */.
186b0 23 64 65 66 69 6e 65 20 45 50 5f 53 74 61 74 69  #define EP_Stati
186c0 63 20 20 20 20 30 78 30 30 38 30 30 30 20 2f 2a  c    0x008000 /*
186d0 20 48 65 6c 64 20 69 6e 20 6d 65 6d 6f 72 79 20   Held in memory 
186e0 6e 6f 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f  not obtained fro
186f0 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 23 64  m malloc() */.#d
18700 65 66 69 6e 65 20 45 50 5f 4d 65 6d 54 6f 6b 65  efine EP_MemToke
18710 6e 20 20 30 78 30 31 30 30 30 30 20 2f 2a 20 4e  n  0x010000 /* N
18720 65 65 64 20 74 6f 20 73 71 6c 69 74 65 33 44 62  eed to sqlite3Db
18730 46 72 65 65 28 29 20 45 78 70 72 2e 7a 54 6f 6b  Free() Expr.zTok
18740 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  en */.#define EP
18750 5f 4e 6f 52 65 64 75 63 65 20 20 30 78 30 32 30  _NoReduce  0x020
18760 30 30 30 20 2f 2a 20 43 61 6e 6e 6f 74 20 45 58  000 /* Cannot EX
18770 50 52 44 55 50 5f 52 45 44 55 43 45 20 74 68 69  PRDUP_REDUCE thi
18780 73 20 45 78 70 72 20 2a 2f 0a 23 64 65 66 69 6e  s Expr */.#defin
18790 65 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 20 20 30  e EP_Unlikely  0
187a0 78 30 34 30 30 30 30 20 2f 2a 20 75 6e 6c 69 6b  x040000 /* unlik
187b0 65 6c 79 28 29 20 6f 72 20 6c 69 6b 65 6c 69 68  ely() or likelih
187c0 6f 6f 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a  ood() function *
187d0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 6f 6e  /.#define EP_Con
187e0 73 74 46 75 6e 63 20 30 78 30 38 30 30 30 30 20  stFunc 0x080000 
187f0 2f 2a 20 41 20 53 51 4c 49 54 45 5f 46 55 4e 43  /* A SQLITE_FUNC
18800 5f 43 4f 4e 53 54 41 4e 54 20 6f 72 20 5f 53 4c  _CONSTANT or _SL
18810 4f 43 48 4e 47 20 66 75 6e 63 74 69 6f 6e 20 2a  OCHNG function *
18820 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 61 6e  /.#define EP_Can
18830 42 65 4e 75 6c 6c 20 30 78 31 30 30 30 30 30 20  BeNull 0x100000 
18840 2f 2a 20 43 61 6e 20 62 65 20 6e 75 6c 6c 20 64  /* Can be null d
18850 65 73 70 69 74 65 20 4e 4f 54 20 4e 55 4c 4c 20  espite NOT NULL 
18860 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64  constraint */.#d
18870 65 66 69 6e 65 20 45 50 5f 53 75 62 71 75 65 72  efine EP_Subquer
18880 79 20 20 30 78 32 30 30 30 30 30 20 2f 2a 20 54  y  0x200000 /* T
18890 72 65 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54  ree contains a T
188a0 4b 5f 53 45 4c 45 43 54 20 6f 70 65 72 61 74 6f  K_SELECT operato
188b0 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  r */.#define EP_
188c0 41 6c 69 61 73 20 20 20 20 20 30 78 34 30 30 30  Alias     0x4000
188d0 30 30 20 2f 2a 20 49 73 20 61 6e 20 61 6c 69 61  00 /* Is an alia
188e0 73 20 66 6f 72 20 61 20 72 65 73 75 6c 74 20 73  s for a result s
188f0 65 74 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65  et column */.#de
18900 66 69 6e 65 20 45 50 5f 4c 65 61 66 20 20 20 20  fine EP_Leaf    
18910 20 20 30 78 38 30 30 30 30 30 20 2f 2a 20 45 78    0x800000 /* Ex
18920 70 72 2e 70 4c 65 66 74 2c 20 2e 70 52 69 67 68  pr.pLeft, .pRigh
18930 74 2c 20 2e 75 2e 70 53 65 6c 65 63 74 20 61 6c  t, .u.pSelect al
18940 6c 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  l NULL */../*.**
18950 20 43 6f 6d 62 69 6e 61 74 69 6f 6e 73 20 6f 66   Combinations of
18960 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 45 50 5f   two or more EP_
18970 2a 20 66 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69  * flags.*/.#defi
18980 6e 65 20 45 50 5f 50 72 6f 70 61 67 61 74 65 20  ne EP_Propagate 
18990 28 45 50 5f 43 6f 6c 6c 61 74 65 7c 45 50 5f 53  (EP_Collate|EP_S
189a0 75 62 71 75 65 72 79 29 20 2f 2a 20 50 72 6f 70  ubquery) /* Prop
189b0 61 67 61 74 65 20 74 68 65 73 65 20 62 69 74 73  agate these bits
189c0 20 75 70 20 74 72 65 65 20 2a 2f 0a 0a 2f 2a 0a   up tree */../*.
189d0 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20  ** These macros 
189e0 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74  can be used to t
189f0 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65  est, set, or cle
18a00 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 0a 2a  ar bits in the.*
18a10 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65  * Expr.flags fie
18a20 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ld..*/.#define E
18a30 78 70 72 48 61 73 50 72 6f 70 65 72 74 79 28 45  xprHasProperty(E
18a40 2c 50 29 20 20 20 20 20 28 28 28 45 29 2d 3e 66  ,P)     (((E)->f
18a50 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64  lags&(P))!=0).#d
18a60 65 66 69 6e 65 20 45 78 70 72 48 61 73 41 6c 6c  efine ExprHasAll
18a70 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28  Property(E,P)  (
18a80 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29  ((E)->flags&(P))
18a90 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20 45  ==(P)).#define E
18aa0 78 70 72 53 65 74 50 72 6f 70 65 72 74 79 28 45  xprSetProperty(E
18ab0 2c 50 29 20 20 20 20 20 28 45 29 2d 3e 66 6c 61  ,P)     (E)->fla
18ac0 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65 20  gs|=(P).#define 
18ad0 45 78 70 72 43 6c 65 61 72 50 72 6f 70 65 72 74  ExprClearPropert
18ae0 79 28 45 2c 50 29 20 20 20 28 45 29 2d 3e 66 6c  y(E,P)   (E)->fl
18af0 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 20 54 68  ags&=~(P)../* Th
18b00 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f 70  e ExprSetVVAProp
18b10 65 72 74 79 28 29 20 6d 61 63 72 6f 20 69 73 20  erty() macro is 
18b20 75 73 65 64 20 66 6f 72 20 56 65 72 69 66 69 63  used for Verific
18b30 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f  ation, Validatio
18b40 6e 2c 0a 2a 2a 20 61 6e 64 20 41 63 63 72 65 64  n,.** and Accred
18b50 69 74 61 74 69 6f 6e 20 6f 6e 6c 79 2e 20 20 49  itation only.  I
18b60 74 20 77 6f 72 6b 73 20 6c 69 6b 65 20 45 78 70  t works like Exp
18b70 72 53 65 74 50 72 6f 70 65 72 74 79 28 29 20 64  rSetProperty() d
18b80 75 72 69 6e 67 20 56 56 41 0a 2a 2a 20 70 72 6f  uring VVA.** pro
18b90 63 65 73 73 65 73 20 62 75 74 20 69 73 20 61 20  cesses but is a 
18ba0 6e 6f 2d 6f 70 20 66 6f 72 20 64 65 6c 69 76 65  no-op for delive
18bb0 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ry..*/.#ifdef SQ
18bc0 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 64 65 66  LITE_DEBUG.# def
18bd0 69 6e 65 20 45 78 70 72 53 65 74 56 56 41 50 72  ine ExprSetVVAPr
18be0 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28 45 29  operty(E,P)  (E)
18bf0 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 65 6c  ->flags|=(P).#el
18c00 73 65 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72  se.# define Expr
18c10 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28 45  SetVVAProperty(E
18c20 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ,P).#endif../*.*
18c30 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65  * Macros to dete
18c40 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d 62 65 72  rmine the number
18c50 20 6f 66 20 62 79 74 65 73 20 72 65 71 75 69 72   of bytes requir
18c60 65 64 20 62 79 20 61 20 6e 6f 72 6d 61 6c 20 45  ed by a normal E
18c70 78 70 72 0a 2a 2a 20 73 74 72 75 63 74 2c 20 61  xpr.** struct, a
18c80 6e 20 45 78 70 72 20 73 74 72 75 63 74 20 77 69  n Expr struct wi
18c90 74 68 20 74 68 65 20 45 50 5f 52 65 64 75 63 65  th the EP_Reduce
18ca0 64 20 66 6c 61 67 20 73 65 74 20 69 6e 20 45 78  d flag set in Ex
18cb0 70 72 2e 66 6c 61 67 73 0a 2a 2a 20 61 6e 64 20  pr.flags.** and 
18cc0 61 6e 20 45 78 70 72 20 73 74 72 75 63 74 20 77  an Expr struct w
18cd0 69 74 68 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e  ith the EP_Token
18ce0 4f 6e 6c 79 20 66 6c 61 67 20 73 65 74 2e 0a 2a  Only flag set..*
18cf0 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 46  /.#define EXPR_F
18d00 55 4c 4c 53 49 5a 45 20 20 20 20 20 20 20 20 20  ULLSIZE         
18d10 20 20 73 69 7a 65 6f 66 28 45 78 70 72 29 20 20    sizeof(Expr)  
18d20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 75 6c 6c           /* Full
18d30 20 73 69 7a 65 20 2a 2f 0a 23 64 65 66 69 6e 65   size */.#define
18d40 20 45 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a   EXPR_REDUCEDSIZ
18d50 45 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 6f  E        offseto
18d60 66 28 45 78 70 72 2c 69 54 61 62 6c 65 29 20 20  f(Expr,iTable)  
18d70 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65 61 74 75 72  /* Common featur
18d80 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58  es */.#define EX
18d90 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45  PR_TOKENONLYSIZE
18da0 20 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45        offsetof(E
18db0 78 70 72 2c 70 4c 65 66 74 29 20 20 20 2f 2a 20  xpr,pLeft)   /* 
18dc0 46 65 77 65 72 20 66 65 61 74 75 72 65 73 20 2a  Fewer features *
18dd0 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 70  /../*.** Flags p
18de0 61 73 73 65 64 20 74 6f 20 74 68 65 20 73 71 6c  assed to the sql
18df0 69 74 65 33 45 78 70 72 44 75 70 28 29 20 66 75  ite3ExprDup() fu
18e00 6e 63 74 69 6f 6e 2e 20 53 65 65 20 74 68 65 20  nction. See the 
18e10 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e 74 0a 2a  header comment.*
18e20 2a 20 61 62 6f 76 65 20 73 71 6c 69 74 65 33 45  * above sqlite3E
18e30 78 70 72 44 75 70 28 29 20 66 6f 72 20 64 65 74  xprDup() for det
18e40 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ails..*/.#define
18e50 20 45 58 50 52 44 55 50 5f 52 45 44 55 43 45 20   EXPRDUP_REDUCE 
18e60 20 20 20 20 20 20 20 20 30 78 30 30 30 31 20 20          0x0001  
18e70 2f 2a 20 55 73 65 64 20 72 65 64 75 63 65 64 2d  /* Used reduced-
18e80 73 69 7a 65 20 45 78 70 72 20 6e 6f 64 65 73 20  size Expr nodes 
18e90 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c 69 73 74  */../*.** A list
18ea0 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 2e   of expressions.
18eb0 20 20 45 61 63 68 20 65 78 70 72 65 73 73 69 6f    Each expressio
18ec0 6e 20 6d 61 79 20 6f 70 74 69 6f 6e 61 6c 6c 79  n may optionally
18ed0 20 68 61 76 65 20 61 0a 2a 2a 20 6e 61 6d 65 2e   have a.** name.
18ee0 20 20 41 6e 20 65 78 70 72 2f 6e 61 6d 65 20 63    An expr/name c
18ef0 6f 6d 62 69 6e 61 74 69 6f 6e 20 63 61 6e 20 62  ombination can b
18f00 65 20 75 73 65 64 20 69 6e 20 73 65 76 65 72 61  e used in severa
18f10 6c 20 77 61 79 73 2c 20 73 75 63 68 0a 2a 2a 20  l ways, such.** 
18f20 61 73 20 74 68 65 20 6c 69 73 74 20 6f 66 20 22  as the list of "
18f30 65 78 70 72 20 41 53 20 49 44 22 20 66 69 65 6c  expr AS ID" fiel
18f40 64 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 22  ds following a "
18f50 53 45 4c 45 43 54 22 20 6f 72 20 69 6e 20 74 68  SELECT" or in th
18f60 65 0a 2a 2a 20 6c 69 73 74 20 6f 66 20 22 49 44  e.** list of "ID
18f70 20 3d 20 65 78 70 72 22 20 69 74 65 6d 73 20 69   = expr" items i
18f80 6e 20 61 6e 20 55 50 44 41 54 45 2e 20 20 41 20  n an UPDATE.  A 
18f90 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69  list of expressi
18fa0 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61 6c 73 6f 20  ons can.** also 
18fb0 62 65 20 75 73 65 64 20 61 73 20 74 68 65 20 61  be used as the a
18fc0 72 67 75 6d 65 6e 74 20 74 6f 20 61 20 66 75 6e  rgument to a fun
18fd0 63 74 69 6f 6e 2c 20 69 6e 20 77 68 69 63 68 20  ction, in which 
18fe0 63 61 73 65 20 74 68 65 20 61 2e 7a 4e 61 6d 65  case the a.zName
18ff0 0a 2a 2a 20 66 69 65 6c 64 20 69 73 20 6e 6f 74  .** field is not
19000 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 79 20   used..**.** By 
19010 64 65 66 61 75 6c 74 20 74 68 65 20 45 78 70 72  default the Expr
19020 2e 7a 53 70 61 6e 20 66 69 65 6c 64 20 68 6f 6c  .zSpan field hol
19030 64 73 20 61 20 68 75 6d 61 6e 2d 72 65 61 64 61  ds a human-reada
19040 62 6c 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20  ble description 
19050 6f 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65 73  of.** the expres
19060 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73 65  sion that is use
19070 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61 74  d in the generat
19080 69 6f 6e 20 6f 66 20 65 72 72 6f 72 20 6d 65 73  ion of error mes
19090 73 61 67 65 73 20 61 6e 64 0a 2a 2a 20 63 6f 6c  sages and.** col
190a0 75 6d 6e 20 6c 61 62 65 6c 73 2e 20 20 49 6e 20  umn labels.  In 
190b0 74 68 69 73 20 63 61 73 65 2c 20 45 78 70 72 2e  this case, Expr.
190c0 7a 53 70 61 6e 20 69 73 20 74 79 70 69 63 61 6c  zSpan is typical
190d0 6c 79 20 74 68 65 20 74 65 78 74 20 6f 66 20 61  ly the text of a
190e0 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65 78 70 72 65  .** column expre
190f0 73 73 69 6f 6e 20 61 73 20 69 74 20 65 78 69 73  ssion as it exis
19100 74 73 20 69 6e 20 61 20 53 45 4c 45 43 54 20 73  ts in a SELECT s
19110 74 61 74 65 6d 65 6e 74 2e 20 20 48 6f 77 65 76  tatement.  Howev
19120 65 72 2c 20 69 66 0a 2a 2a 20 74 68 65 20 62 53  er, if.** the bS
19130 70 61 6e 49 73 54 61 62 20 66 6c 61 67 20 69 73  panIsTab flag is
19140 20 73 65 74 2c 20 74 68 65 6e 20 7a 53 70 61 6e   set, then zSpan
19150 20 69 73 20 6f 76 65 72 6c 6f 61 64 65 64 20 74   is overloaded t
19160 6f 20 6d 65 61 6e 20 74 68 65 20 6e 61 6d 65 0a  o mean the name.
19170 2a 2a 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ** of the result
19180 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 66   column in the f
19190 6f 72 6d 3a 20 44 41 54 41 42 41 53 45 2e 54 41  orm: DATABASE.TA
191a0 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20 20 54 68 69  BLE.COLUMN.  Thi
191b0 73 20 6c 61 74 65 72 0a 2a 2a 20 66 6f 72 6d 20  s later.** form 
191c0 69 73 20 75 73 65 64 20 66 6f 72 20 6e 61 6d 65  is used for name
191d0 20 72 65 73 6f 6c 75 74 69 6f 6e 20 77 69 74 68   resolution with
191e0 20 6e 65 73 74 65 64 20 46 52 4f 4d 20 63 6c 61   nested FROM cla
191f0 75 73 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  uses..*/.struct 
19200 45 78 70 72 4c 69 73 74 20 7b 0a 20 20 69 6e 74  ExprList {.  int
19210 20 6e 45 78 70 72 3b 20 20 20 20 20 20 20 20 20   nExpr;         
19220 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
19230 20 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 6e 20   expressions on 
19240 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 69 6e  the list */.  in
19250 74 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20  t nAlloc;       
19260 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
19270 66 20 61 5b 5d 20 73 6c 6f 74 73 20 61 6c 6c 6f  f a[] slots allo
19280 63 61 74 65 64 20 2a 2f 0a 20 20 73 74 72 75 63  cated */.  struc
19290 74 20 45 78 70 72 4c 69 73 74 5f 69 74 65 6d 20  t ExprList_item 
192a0 7b 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 65 78  { /* For each ex
192b0 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20  pression in the 
192c0 6c 69 73 74 20 2a 2f 0a 20 20 20 20 45 78 70 72  list */.    Expr
192d0 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20   *pExpr;        
192e0 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 65      /* The parse
192f0 20 74 72 65 65 20 66 6f 72 20 74 68 69 73 20 65   tree for this e
19300 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20  xpression */.   
19310 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
19320 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65           /* Toke
19330 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  n associated wit
19340 68 20 74 68 69 73 20 65 78 70 72 65 73 73 69 6f  h this expressio
19350 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  n */.    char *z
19360 53 70 61 6e 3b 20 20 20 20 20 20 20 20 20 20 20  Span;           
19370 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78   /* Original tex
19380 74 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73  t of the express
19390 69 6f 6e 20 2a 2f 0a 20 20 20 20 75 38 20 73 6f  ion */.    u8 so
193a0 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20  rtOrder;        
193b0 20 20 20 2f 2a 20 31 20 66 6f 72 20 44 45 53 43     /* 1 for DESC
193c0 20 6f 72 20 30 20 66 6f 72 20 41 53 43 20 2a 2f   or 0 for ASC */
193d0 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 64 6f  .    unsigned do
193e0 6e 65 20 3a 31 3b 20 20 20 20 20 20 20 2f 2a 20  ne :1;       /* 
193f0 41 20 66 6c 61 67 20 74 6f 20 69 6e 64 69 63 61  A flag to indica
19400 74 65 20 77 68 65 6e 20 70 72 6f 63 65 73 73 69  te when processi
19410 6e 67 20 69 73 20 66 69 6e 69 73 68 65 64 20 2a  ng is finished *
19420 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 62  /.    unsigned b
19430 53 70 61 6e 49 73 54 61 62 20 3a 31 3b 20 2f 2a  SpanIsTab :1; /*
19440 20 7a 53 70 61 6e 20 68 6f 6c 64 73 20 44 42 2e   zSpan holds DB.
19450 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a  TABLE.COLUMN */.
19460 20 20 20 20 75 6e 73 69 67 6e 65 64 20 72 65 75      unsigned reu
19470 73 61 62 6c 65 20 3a 31 3b 20 20 20 2f 2a 20 43  sable :1;   /* C
19480 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69  onstant expressi
19490 6f 6e 20 69 73 20 72 65 75 73 61 62 6c 65 20 2a  on is reusable *
194a0 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20  /.    union {.  
194b0 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20      struct {.   
194c0 20 20 20 20 20 75 31 36 20 69 4f 72 64 65 72 42       u16 iOrderB
194d0 79 43 6f 6c 3b 20 20 20 20 20 20 2f 2a 20 46 6f  yCol;      /* Fo
194e0 72 20 4f 52 44 45 52 20 42 59 2c 20 63 6f 6c 75  r ORDER BY, colu
194f0 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 72 65 73  mn number in res
19500 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20 20 20 20  ult set */.     
19510 20 20 20 75 31 36 20 69 41 6c 69 61 73 3b 20 20     u16 iAlias;  
19520 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
19530 78 20 69 6e 74 6f 20 50 61 72 73 65 2e 61 41 6c  x into Parse.aAl
19540 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65 20  ias[] for zName 
19550 2a 2f 0a 20 20 20 20 20 20 7d 20 78 3b 0a 20 20  */.      } x;.  
19560 20 20 20 20 69 6e 74 20 69 43 6f 6e 73 74 45 78      int iConstEx
19570 70 72 52 65 67 3b 20 20 20 20 20 20 2f 2a 20 52  prReg;      /* R
19580 65 67 69 73 74 65 72 20 69 6e 20 77 68 69 63 68  egister in which
19590 20 45 78 70 72 20 76 61 6c 75 65 20 69 73 20 63   Expr value is c
195a0 61 63 68 65 64 20 2a 2f 0a 20 20 20 20 7d 20 75  ached */.    } u
195b0 3b 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20  ;.  } a[1];     
195c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
195d0 4f 6e 65 20 73 6c 6f 74 20 66 6f 72 20 65 61 63  One slot for eac
195e0 68 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20  h expression in 
195f0 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a  the list */.};..
19600 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
19610 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  e of this struct
19620 75 72 65 20 69 73 20 75 73 65 64 20 62 79 20 74  ure is used by t
19630 68 65 20 70 61 72 73 65 72 20 74 6f 20 72 65 63  he parser to rec
19640 6f 72 64 20 62 6f 74 68 0a 2a 2a 20 74 68 65 20  ord both.** the 
19650 70 61 72 73 65 20 74 72 65 65 20 66 6f 72 20 61  parse tree for a
19660 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64  n expression and
19670 20 74 68 65 20 73 70 61 6e 20 6f 66 20 69 6e 70   the span of inp
19680 75 74 20 74 65 78 74 20 66 6f 72 20 61 6e 0a 2a  ut text for an.*
19690 2a 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2f  * expression..*/
196a0 0a 73 74 72 75 63 74 20 45 78 70 72 53 70 61 6e  .struct ExprSpan
196b0 20 7b 0a 20 20 45 78 70 72 20 2a 70 45 78 70 72   {.  Expr *pExpr
196c0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
196d0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 70 61 72  e expression par
196e0 73 65 20 74 72 65 65 20 2a 2f 0a 20 20 63 6f 6e  se tree */.  con
196f0 73 74 20 63 68 61 72 20 2a 7a 53 74 61 72 74 3b  st char *zStart;
19700 20 20 20 2f 2a 20 46 69 72 73 74 20 63 68 61 72     /* First char
19710 61 63 74 65 72 20 6f 66 20 69 6e 70 75 74 20 74  acter of input t
19720 65 78 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ext */.  const c
19730 68 61 72 20 2a 7a 45 6e 64 3b 20 20 20 20 20 2f  har *zEnd;     /
19740 2a 20 4f 6e 65 20 63 68 61 72 61 63 74 65 72 20  * One character 
19750 70 61 73 74 20 74 68 65 20 65 6e 64 20 6f 66 20  past the end of 
19760 69 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a 7d 3b  input text */.};
19770 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
19780 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75  nce of this stru
19790 63 74 75 72 65 20 63 61 6e 20 68 6f 6c 64 20 61  cture can hold a
197a0 20 73 69 6d 70 6c 65 20 6c 69 73 74 20 6f 66 20   simple list of 
197b0 69 64 65 6e 74 69 66 69 65 72 73 2c 0a 2a 2a 20  identifiers,.** 
197c0 73 75 63 68 20 61 73 20 74 68 65 20 6c 69 73 74  such as the list
197d0 20 22 61 2c 62 2c 63 22 20 69 6e 20 74 68 65 20   "a,b,c" in the 
197e0 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d  following statem
197f0 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ents:.**.**     
19800 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61   INSERT INTO t(a
19810 2c 62 2c 63 29 20 56 41 4c 55 45 53 20 2e 2e 2e  ,b,c) VALUES ...
19820 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45  ;.**      CREATE
19830 20 49 4e 44 45 58 20 69 64 78 20 4f 4e 20 74 28   INDEX idx ON t(
19840 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20 20 20 20  a,b,c);.**      
19850 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74  CREATE TRIGGER t
19860 72 69 67 20 42 45 46 4f 52 45 20 55 50 44 41 54  rig BEFORE UPDAT
19870 45 20 4f 4e 20 74 28 61 2c 62 2c 63 29 20 2e 2e  E ON t(a,b,c) ..
19880 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 64 4c  .;.**.** The IdL
19890 69 73 74 2e 61 2e 69 64 78 20 66 69 65 6c 64 20  ist.a.idx field 
198a0 69 73 20 75 73 65 64 20 77 68 65 6e 20 74 68 65  is used when the
198b0 20 49 64 4c 69 73 74 20 72 65 70 72 65 73 65 6e   IdList represen
198c0 74 73 20 74 68 65 20 6c 69 73 74 20 6f 66 0a 2a  ts the list of.*
198d0 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61  * column names a
198e0 66 74 65 72 20 61 20 74 61 62 6c 65 20 6e 61 6d  fter a table nam
198f0 65 20 69 6e 20 61 6e 20 49 4e 53 45 52 54 20 73  e in an INSERT s
19900 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 74 68  tatement.  In th
19910 65 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a  e statement.**.*
19920 2a 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  *     INSERT INT
19930 4f 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a  O t(a,b,c) ....*
19940 2a 0a 2a 2a 20 49 66 20 22 61 22 20 69 73 20 74  *.** If "a" is t
19950 68 65 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f  he k-th column o
19960 66 20 74 61 62 6c 65 20 22 74 22 2c 20 74 68 65  f table "t", the
19970 6e 20 49 64 4c 69 73 74 2e 61 5b 30 5d 2e 69 64  n IdList.a[0].id
19980 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  x==k..*/.struct 
19990 49 64 4c 69 73 74 20 7b 0a 20 20 73 74 72 75 63  IdList {.  struc
199a0 74 20 49 64 4c 69 73 74 5f 69 74 65 6d 20 7b 0a  t IdList_item {.
199b0 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b      char *zName;
199c0 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
199d0 20 74 68 65 20 69 64 65 6e 74 69 66 69 65 72 20   the identifier 
199e0 2a 2f 0a 20 20 20 20 69 6e 74 20 69 64 78 3b 20  */.    int idx; 
199f0 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
19a00 78 20 69 6e 20 73 6f 6d 65 20 54 61 62 6c 65 2e  x in some Table.
19a10 61 43 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c 75  aCol[] of a colu
19a20 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d 65 20 2a  mn named zName *
19a30 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20 69 6e 74 20  /.  } *a;.  int 
19a40 6e 49 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  nId;         /* 
19a50 4e 75 6d 62 65 72 20 6f 66 20 69 64 65 6e 74 69  Number of identi
19a60 66 69 65 72 73 20 6f 6e 20 74 68 65 20 6c 69 73  fiers on the lis
19a70 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  t */.};../*.** T
19a80 68 65 20 62 69 74 6d 61 73 6b 20 64 61 74 61 74  he bitmask datat
19a90 79 70 65 20 64 65 66 69 6e 65 64 20 62 65 6c 6f  ype defined belo
19aa0 77 20 69 73 20 75 73 65 64 20 66 6f 72 20 76 61  w is used for va
19ab0 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74 69  rious optimizati
19ac0 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67  ons..**.** Chang
19ad0 69 6e 67 20 74 68 69 73 20 66 72 6f 6d 20 61 20  ing this from a 
19ae0 36 34 2d 62 69 74 20 74 6f 20 61 20 33 32 2d 62  64-bit to a 32-b
19af0 69 74 20 74 79 70 65 20 6c 69 6d 69 74 73 20 74  it type limits t
19b00 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a 20  he number of.** 
19b10 74 61 62 6c 65 73 20 69 6e 20 61 20 6a 6f 69 6e  tables in a join
19b20 20 74 6f 20 33 32 20 69 6e 73 74 65 61 64 20 6f   to 32 instead o
19b30 66 20 36 34 2e 20 20 42 75 74 20 69 74 20 61 6c  f 64.  But it al
19b40 73 6f 20 72 65 64 75 63 65 73 20 74 68 65 20 73  so reduces the s
19b50 69 7a 65 0a 2a 2a 20 6f 66 20 74 68 65 20 6c 69  ize.** of the li
19b60 62 72 61 72 79 20 62 79 20 37 33 38 20 62 79 74  brary by 738 byt
19b70 65 73 20 6f 6e 20 69 78 38 36 2e 0a 2a 2f 0a 23  es on ix86..*/.#
19b80 69 66 64 65 66 20 53 51 4c 49 54 45 5f 42 49 54  ifdef SQLITE_BIT
19b90 4d 41 53 4b 5f 54 59 50 45 0a 20 20 74 79 70 65  MASK_TYPE.  type
19ba0 64 65 66 20 53 51 4c 49 54 45 5f 42 49 54 4d 41  def SQLITE_BITMA
19bb0 53 4b 5f 54 59 50 45 20 42 69 74 6d 61 73 6b 3b  SK_TYPE Bitmask;
19bc0 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66  .#else.  typedef
19bd0 20 75 36 34 20 42 69 74 6d 61 73 6b 3b 0a 23 65   u64 Bitmask;.#e
19be0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
19bf0 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20 69  number of bits i
19c00 6e 20 61 20 42 69 74 6d 61 73 6b 2e 20 20 22 42  n a Bitmask.  "B
19c10 4d 53 22 20 6d 65 61 6e 73 20 22 42 69 74 4d 61  MS" means "BitMa
19c20 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f 0a 23 64 65  sk Size"..*/.#de
19c30 66 69 6e 65 20 42 4d 53 20 20 28 28 69 6e 74 29  fine BMS  ((int)
19c40 28 73 69 7a 65 6f 66 28 42 69 74 6d 61 73 6b 29  (sizeof(Bitmask)
19c50 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 62 69  *8))../*.** A bi
19c60 74 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 0a 2a  t in a Bitmask.*
19c70 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b 42 49  /.#define MASKBI
19c80 54 28 6e 29 20 20 20 28 28 28 42 69 74 6d 61 73  T(n)   (((Bitmas
19c90 6b 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65 66 69  k)1)<<(n)).#defi
19ca0 6e 65 20 4d 41 53 4b 42 49 54 33 32 28 6e 29 20  ne MASKBIT32(n) 
19cb0 28 28 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 29  (((unsigned int)
19cc0 31 29 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65  1)<<(n)).#define
19cd0 20 41 4c 4c 42 49 54 53 20 20 20 20 20 20 28 28   ALLBITS      ((
19ce0 42 69 74 6d 61 73 6b 29 2d 31 29 0a 0a 2f 2a 0a  Bitmask)-1)../*.
19cf0 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
19d00 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72   structure descr
19d10 69 62 65 73 20 74 68 65 20 46 52 4f 4d 20 63 6c  ibes the FROM cl
19d20 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54  ause of a SELECT
19d30 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45   statement..** E
19d40 61 63 68 20 74 61 62 6c 65 20 6f 72 20 73 75 62  ach table or sub
19d50 71 75 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f  query in the FRO
19d60 4d 20 63 6c 61 75 73 65 20 69 73 20 61 20 73 65  M clause is a se
19d70 70 61 72 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f  parate element o
19d80 66 0a 2a 2a 20 74 68 65 20 53 72 63 4c 69 73 74  f.** the SrcList
19d90 2e 61 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a  .a[] array..**.*
19da0 2a 20 57 69 74 68 20 74 68 65 20 61 64 64 69 74  * With the addit
19db0 69 6f 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20  ion of multiple 
19dc0 64 61 74 61 62 61 73 65 20 73 75 70 70 6f 72 74  database support
19dd0 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  , the following 
19de0 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e  structure.** can
19df0 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f   also be used to
19e00 20 64 65 73 63 72 69 62 65 20 61 20 70 61 72 74   describe a part
19e10 69 63 75 6c 61 72 20 74 61 62 6c 65 20 73 75 63  icular table suc
19e20 68 20 61 73 20 74 68 65 20 74 61 62 6c 65 20 74  h as the table t
19e30 68 61 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69  hat.** is modifi
19e40 65 64 20 62 79 20 61 6e 20 49 4e 53 45 52 54 2c  ed by an INSERT,
19e50 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41   DELETE, or UPDA
19e60 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49  TE statement.  I
19e70 6e 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a  n standard SQL,.
19e80 2a 2a 20 73 75 63 68 20 61 20 74 61 62 6c 65 20  ** such a table 
19e90 6d 75 73 74 20 62 65 20 61 20 73 69 6d 70 6c 65  must be a simple
19ea0 20 6e 61 6d 65 3a 20 49 44 2e 20 20 42 75 74 20   name: ID.  But 
19eb0 69 6e 20 53 51 4c 69 74 65 2c 20 74 68 65 20 74  in SQLite, the t
19ec0 61 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20  able can.** now 
19ed0 62 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  be identified by
19ee0 20 61 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65   a database name
19ef0 2c 20 61 20 64 6f 74 2c 20 74 68 65 6e 20 74 68  , a dot, then th
19f00 65 20 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44  e table name: ID
19f10 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a  .ID..**.** The j
19f20 6f 69 6e 74 79 70 65 20 73 74 61 72 74 73 20 6f  ointype starts o
19f30 75 74 20 73 68 6f 77 69 6e 67 20 74 68 65 20 6a  ut showing the j
19f40 6f 69 6e 20 74 79 70 65 20 62 65 74 77 65 65 6e  oin type between
19f50 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 61 62   the current tab
19f60 6c 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e 65  le.** and the ne
19f70 78 74 20 74 61 62 6c 65 20 6f 6e 20 74 68 65 20  xt table on the 
19f80 6c 69 73 74 2e 20 20 54 68 65 20 70 61 72 73 65  list.  The parse
19f90 72 20 62 75 69 6c 64 73 20 74 68 65 20 6c 69 73  r builds the lis
19fa0 74 20 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20 42  t this way..** B
19fb0 75 74 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  ut sqlite3SrcLis
19fc0 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 29  tShiftJoinType()
19fd0 20 6c 61 74 65 72 20 73 68 69 66 74 73 20 74 68   later shifts th
19fe0 65 20 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20 74  e jointypes so t
19ff0 68 61 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e  hat each.** join
1a000 74 79 70 65 20 65 78 70 72 65 73 73 65 73 20 74  type expresses t
1a010 68 65 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20  he join between 
1a020 74 68 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68  the table and th
1a030 65 20 70 72 65 76 69 6f 75 73 20 74 61 62 6c 65  e previous table
1a040 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 63  ..**.** In the c
1a050 6f 6c 55 73 65 64 20 66 69 65 6c 64 2c 20 74 68  olUsed field, th
1a060 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74  e high-order bit
1a070 20 28 62 69 74 20 36 33 29 20 69 73 20 73 65 74   (bit 63) is set
1a080 20 69 66 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a   if the table.**
1a090 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74   contains more t
1a0a0 68 61 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20 61  han 63 columns a
1a0b0 6e 64 20 74 68 65 20 36 34 2d 74 68 20 6f 72 20  nd the 64-th or 
1a0c0 6c 61 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73 20  later column is 
1a0d0 75 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  used..*/.struct 
1a0e0 53 72 63 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20  SrcList {.  int 
1a0f0 6e 53 72 63 3b 20 20 20 20 20 20 20 20 2f 2a 20  nSrc;        /* 
1a100 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73  Number of tables
1a110 20 6f 72 20 73 75 62 71 75 65 72 69 65 73 20 69   or subqueries i
1a120 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  n the FROM claus
1a130 65 20 2a 2f 0a 20 20 75 33 32 20 6e 41 6c 6c 6f  e */.  u32 nAllo
1a140 63 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  c;      /* Numbe
1a150 72 20 6f 66 20 65 6e 74 72 69 65 73 20 61 6c 6c  r of entries all
1a160 6f 63 61 74 65 64 20 69 6e 20 61 5b 5d 20 62 65  ocated in a[] be
1a170 6c 6f 77 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  low */.  struct 
1a180 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20  SrcList_item {. 
1a190 20 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65     Schema *pSche
1a1a0 6d 61 3b 20 20 2f 2a 20 53 63 68 65 6d 61 20 74  ma;  /* Schema t
1a1b0 6f 20 77 68 69 63 68 20 74 68 69 73 20 69 74 65  o which this ite
1a1c0 6d 20 69 73 20 66 69 78 65 64 20 2a 2f 0a 20 20  m is fixed */.  
1a1d0 20 20 63 68 61 72 20 2a 7a 44 61 74 61 62 61 73    char *zDatabas
1a1e0 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64  e;  /* Name of d
1a1f0 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20  atabase holding 
1a200 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
1a210 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
1a220 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74      /* Name of t
1a230 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  he table */.    
1a240 63 68 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20 20  char *zAlias;   
1a250 20 20 2f 2a 20 54 68 65 20 22 42 22 20 70 61 72    /* The "B" par
1a260 74 20 6f 66 20 61 20 22 41 20 41 53 20 42 22 20  t of a "A AS B" 
1a270 70 68 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20 69  phrase.  zName i
1a280 73 20 74 68 65 20 22 41 22 20 2a 2f 0a 20 20 20  s the "A" */.   
1a290 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20   Table *pTab;   
1a2a0 20 20 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61 62     /* An SQL tab
1a2b0 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  le corresponding
1a2c0 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20   to zName */.   
1a2d0 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
1a2e0 3b 20 20 2f 2a 20 41 20 53 45 4c 45 43 54 20 73  ;  /* A SELECT s
1a2f0 74 61 74 65 6d 65 6e 74 20 75 73 65 64 20 69 6e  tatement used in
1a300 20 70 6c 61 63 65 20 6f 66 20 61 20 74 61 62 6c   place of a tabl
1a310 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e  e name */.    in
1a320 74 20 61 64 64 72 46 69 6c 6c 53 75 62 3b 20 20  t addrFillSub;  
1a330 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 73 75  /* Address of su
1a340 62 72 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6e 69  broutine to mani
1a350 66 65 73 74 20 61 20 73 75 62 71 75 65 72 79 20  fest a subquery 
1a360 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65  */.    int regRe
1a370 74 75 72 6e 3b 20 20 20 20 2f 2a 20 52 65 67 69  turn;    /* Regi
1a380 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 65 74  ster holding ret
1a390 75 72 6e 20 61 64 64 72 65 73 73 20 6f 66 20 61  urn address of a
1a3a0 64 64 72 46 69 6c 6c 53 75 62 20 2a 2f 0a 20 20  ddrFillSub */.  
1a3b0 20 20 69 6e 74 20 72 65 67 52 65 73 75 6c 74 3b    int regResult;
1a3c0 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 73      /* Registers
1a3d0 20 68 6f 6c 64 69 6e 67 20 72 65 73 75 6c 74 73   holding results
1a3e0 20 6f 66 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65   of a co-routine
1a3f0 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 7b   */.    struct {
1a400 0a 20 20 20 20 20 20 75 38 20 6a 6f 69 6e 74 79  .      u8 jointy
1a410 70 65 3b 20 20 20 20 20 20 2f 2a 20 54 79 70 65  pe;      /* Type
1a420 20 6f 66 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e   of join between
1a430 20 74 68 69 73 20 74 61 62 6c 65 20 61 6e 64 20   this table and 
1a440 74 68 65 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a  the previous */.
1a450 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 6e        unsigned n
1a460 6f 74 49 6e 64 65 78 65 64 20 3a 31 3b 20 20 20  otIndexed :1;   
1a470 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 72   /* True if ther
1a480 65 20 69 73 20 61 20 4e 4f 54 20 49 4e 44 45 58  e is a NOT INDEX
1a490 45 44 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20  ED clause */.   
1a4a0 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 49 6e     unsigned isIn
1a4b0 64 65 78 65 64 42 79 20 3a 31 3b 20 20 20 2f 2a  dexedBy :1;   /*
1a4c0 20 54 72 75 65 20 69 66 20 74 68 65 72 65 20 69   True if there i
1a4d0 73 20 61 6e 20 49 4e 44 45 58 45 44 20 42 59 20  s an INDEXED BY 
1a4e0 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20  clause */.      
1a4f0 75 6e 73 69 67 6e 65 64 20 69 73 54 61 62 46 75  unsigned isTabFu
1a500 6e 63 20 3a 31 3b 20 20 20 20 20 2f 2a 20 54 72  nc :1;     /* Tr
1a510 75 65 20 69 66 20 74 61 62 6c 65 2d 76 61 6c 75  ue if table-valu
1a520 65 64 2d 66 75 6e 63 74 69 6f 6e 20 73 79 6e 74  ed-function synt
1a530 61 78 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69  ax */.      unsi
1a540 67 6e 65 64 20 69 73 43 6f 72 72 65 6c 61 74 65  gned isCorrelate
1a550 64 20 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69  d :1;  /* True i
1a560 66 20 73 75 62 2d 71 75 65 72 79 20 69 73 20 63  f sub-query is c
1a570 6f 72 72 65 6c 61 74 65 64 20 2a 2f 0a 20 20 20  orrelated */.   
1a580 20 20 20 75 6e 73 69 67 6e 65 64 20 76 69 61 43     unsigned viaC
1a590 6f 72 6f 75 74 69 6e 65 20 3a 31 3b 20 20 2f 2a  oroutine :1;  /*
1a5a0 20 49 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20   Implemented as 
1a5b0 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a  a co-routine */.
1a5c0 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69        unsigned i
1a5d0 73 52 65 63 75 72 73 69 76 65 20 3a 31 3b 20 20  sRecursive :1;  
1a5e0 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 72 65 63   /* True for rec
1a5f0 75 72 73 69 76 65 20 72 65 66 65 72 65 6e 63 65  ursive reference
1a600 20 69 6e 20 57 49 54 48 20 2a 2f 0a 20 20 20 20   in WITH */.    
1a610 7d 20 66 67 3b 0a 23 69 66 6e 64 65 66 20 53 51  } fg;.#ifndef SQ
1a620 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49  LITE_OMIT_EXPLAI
1a630 4e 0a 20 20 20 20 75 38 20 69 53 65 6c 65 63 74  N.    u8 iSelect
1a640 49 64 3b 20 20 20 20 20 2f 2a 20 49 66 20 70 53  Id;     /* If pS
1a650 65 6c 65 63 74 21 3d 30 2c 20 74 68 65 20 69 64  elect!=0, the id
1a660 20 6f 66 20 74 68 65 20 73 75 62 2d 73 65 6c 65   of the sub-sele
1a670 63 74 20 69 6e 20 45 51 50 20 2a 2f 0a 23 65 6e  ct in EQP */.#en
1a680 64 69 66 0a 20 20 20 20 69 6e 74 20 69 43 75 72  dif.    int iCur
1a690 73 6f 72 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  sor;      /* The
1a6a0 20 56 44 42 45 20 63 75 72 73 6f 72 20 6e 75 6d   VDBE cursor num
1a6b0 62 65 72 20 75 73 65 64 20 74 6f 20 61 63 63 65  ber used to acce
1a6c0 73 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  ss this table */
1a6d0 0a 20 20 20 20 45 78 70 72 20 2a 70 4f 6e 3b 20  .    Expr *pOn; 
1a6e0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 4f 4e         /* The ON
1a6f0 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69   clause of a joi
1a700 6e 20 2a 2f 0a 20 20 20 20 49 64 4c 69 73 74 20  n */.    IdList 
1a710 2a 70 55 73 69 6e 67 3b 20 20 20 2f 2a 20 54 68  *pUsing;   /* Th
1a720 65 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f  e USING clause o
1a730 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20  f a join */.    
1a740 42 69 74 6d 61 73 6b 20 63 6f 6c 55 73 65 64 3b  Bitmask colUsed;
1a750 20 20 2f 2a 20 42 69 74 20 4e 20 28 31 3c 3c 4e    /* Bit N (1<<N
1a760 29 20 73 65 74 20 69 66 20 63 6f 6c 75 6d 6e 20  ) set if column 
1a770 4e 20 6f 66 20 70 54 61 62 20 69 73 20 75 73 65  N of pTab is use
1a780 64 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b  d */.    union {
1a790 0a 20 20 20 20 20 20 63 68 61 72 20 2a 7a 49 6e  .      char *zIn
1a7a0 64 65 78 65 64 42 79 3b 20 20 20 20 2f 2a 20 49  dexedBy;    /* I
1a7b0 64 65 6e 74 69 66 69 65 72 20 66 72 6f 6d 20 22  dentifier from "
1a7c0 49 4e 44 45 58 45 44 20 42 59 20 3c 7a 49 6e 64  INDEXED BY <zInd
1a7d0 65 78 3e 22 20 63 6c 61 75 73 65 20 2a 2f 0a 20  ex>" clause */. 
1a7e0 20 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70       ExprList *p
1a7f0 46 75 6e 63 41 72 67 3b 20 20 2f 2a 20 41 72 67  FuncArg;  /* Arg
1a800 75 6d 65 6e 74 73 20 74 6f 20 74 61 62 6c 65 2d  uments to table-
1a810 76 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f 6e 20  valued-function 
1a820 2a 2f 0a 20 20 20 20 7d 20 75 31 3b 0a 20 20 20  */.    } u1;.   
1a830 20 49 6e 64 65 78 20 2a 70 49 42 49 6e 64 65 78   Index *pIBIndex
1a840 3b 20 20 2f 2a 20 49 6e 64 65 78 20 73 74 72 75  ;  /* Index stru
1a850 63 74 75 72 65 20 63 6f 72 72 65 73 70 6f 6e 64  cture correspond
1a860 69 6e 67 20 74 6f 20 75 31 2e 7a 49 6e 64 65 78  ing to u1.zIndex
1a870 65 64 42 79 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d  edBy */.  } a[1]
1a880 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
1a890 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65   One entry for e
1a8a0 61 63 68 20 69 64 65 6e 74 69 66 69 65 72 20 6f  ach identifier o
1a8b0 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b  n the list */.};
1a8c0 0a 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69 74 74 65  ../*.** Permitte
1a8d0 64 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20  d values of the 
1a8e0 53 72 63 4c 69 73 74 2e 61 2e 6a 6f 69 6e 74 79  SrcList.a.jointy
1a8f0 70 65 20 66 69 65 6c 64 0a 2a 2f 0a 23 64 65 66  pe field.*/.#def
1a900 69 6e 65 20 4a 54 5f 49 4e 4e 45 52 20 20 20 20  ine JT_INNER    
1a910 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20 41 6e   0x0001    /* An
1a920 79 20 6b 69 6e 64 20 6f 66 20 69 6e 6e 65 72 20  y kind of inner 
1a930 6f 72 20 63 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f  or cross join */
1a940 0a 23 64 65 66 69 6e 65 20 4a 54 5f 43 52 4f 53  .#define JT_CROS
1a950 53 20 20 20 20 20 30 78 30 30 30 32 20 20 20 20  S     0x0002    
1a960 2f 2a 20 45 78 70 6c 69 63 69 74 20 75 73 65 20  /* Explicit use 
1a970 6f 66 20 74 68 65 20 43 52 4f 53 53 20 6b 65 79  of the CROSS key
1a980 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  word */.#define 
1a990 4a 54 5f 4e 41 54 55 52 41 4c 20 20 20 30 78 30  JT_NATURAL   0x0
1a9a0 30 30 34 20 20 20 20 2f 2a 20 54 72 75 65 20 66  004    /* True f
1a9b0 6f 72 20 61 20 22 6e 61 74 75 72 61 6c 22 20 6a  or a "natural" j
1a9c0 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  oin */.#define J
1a9d0 54 5f 4c 45 46 54 20 20 20 20 20 20 30 78 30 30  T_LEFT      0x00
1a9e0 30 38 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 75  08    /* Left ou
1a9f0 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66  ter join */.#def
1aa00 69 6e 65 20 4a 54 5f 52 49 47 48 54 20 20 20 20  ine JT_RIGHT    
1aa10 20 30 78 30 30 31 30 20 20 20 20 2f 2a 20 52 69   0x0010    /* Ri
1aa20 67 68 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a  ght outer join *
1aa30 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4f 55 54  /.#define JT_OUT
1aa40 45 52 20 20 20 20 20 30 78 30 30 32 30 20 20 20  ER     0x0020   
1aa50 20 2f 2a 20 54 68 65 20 22 4f 55 54 45 52 22 20   /* The "OUTER" 
1aa60 6b 65 79 77 6f 72 64 20 69 73 20 70 72 65 73 65  keyword is prese
1aa70 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  nt */.#define JT
1aa80 5f 45 52 52 4f 52 20 20 20 20 20 30 78 30 30 34  _ERROR     0x004
1aa90 30 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20  0    /* unknown 
1aaa0 6f 72 20 75 6e 73 75 70 70 6f 72 74 65 64 20 6a  or unsupported j
1aab0 6f 69 6e 20 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a  oin type */.../*
1aac0 0a 2a 2a 20 46 6c 61 67 73 20 61 70 70 72 6f 70  .** Flags approp
1aad0 72 69 61 74 65 20 66 6f 72 20 74 68 65 20 77 63  riate for the wc
1aae0 74 72 6c 46 6c 61 67 73 20 70 61 72 61 6d 65 74  trlFlags paramet
1aaf0 65 72 20 6f 66 20 73 71 6c 69 74 65 33 57 68 65  er of sqlite3Whe
1ab00 72 65 42 65 67 69 6e 28 29 0a 2a 2a 20 61 6e 64  reBegin().** and
1ab10 20 74 68 65 20 57 68 65 72 65 49 6e 66 6f 2e 77   the WhereInfo.w
1ab20 63 74 72 6c 46 6c 61 67 73 20 6d 65 6d 62 65 72  ctrlFlags member
1ab30 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f  ..**.** Value co
1ab40 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72  nstraints (enfor
1ab50 63 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29  ced via assert()
1ab60 29 3a 0a 2a 2a 20 20 20 20 20 57 48 45 52 45 5f  ):.**     WHERE_
1ab70 55 53 45 5f 4c 49 4d 49 54 20 20 3d 3d 20 53 46  USE_LIMIT  == SF
1ab80 5f 46 69 78 65 64 4c 69 6d 69 74 0a 2a 2f 0a 23  _FixedLimit.*/.#
1ab90 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44  define WHERE_ORD
1aba0 45 52 42 59 5f 4e 4f 52 4d 41 4c 20 20 20 30 78  ERBY_NORMAL   0x
1abb0 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f  0000 /* No-op */
1abc0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
1abd0 52 44 45 52 42 59 5f 4d 49 4e 20 20 20 20 20 20  RDERBY_MIN      
1abe0 30 78 30 30 30 31 20 2f 2a 20 4f 52 44 45 52 20  0x0001 /* ORDER 
1abf0 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f  BY processing fo
1ac00 72 20 6d 69 6e 28 29 20 66 75 6e 63 20 2a 2f 0a  r min() func */.
1ac10 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52  #define WHERE_OR
1ac20 44 45 52 42 59 5f 4d 41 58 20 20 20 20 20 20 30  DERBY_MAX      0
1ac30 78 30 30 30 32 20 2f 2a 20 4f 52 44 45 52 20 42  x0002 /* ORDER B
1ac40 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72  Y processing for
1ac50 20 6d 61 78 28 29 20 66 75 6e 63 20 2a 2f 0a 23   max() func */.#
1ac60 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45  define WHERE_ONE
1ac70 50 41 53 53 5f 44 45 53 49 52 45 44 20 20 30 78  PASS_DESIRED  0x
1ac80 30 30 30 34 20 2f 2a 20 57 61 6e 74 20 74 6f 20  0004 /* Want to 
1ac90 64 6f 20 6f 6e 65 2d 70 61 73 73 20 55 50 44 41  do one-pass UPDA
1aca0 54 45 2f 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65  TE/DELETE */.#de
1acb0 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50 41  fine WHERE_ONEPA
1acc0 53 53 5f 4d 55 4c 54 49 52 4f 57 20 30 78 30 30  SS_MULTIROW 0x00
1acd0 30 38 20 2f 2a 20 4f 4e 45 50 41 53 53 20 69 73  08 /* ONEPASS is
1ace0 20 6f 6b 20 77 69 74 68 20 6d 75 6c 74 69 70 6c   ok with multipl
1acf0 65 20 72 6f 77 73 20 2a 2f 0a 23 64 65 66 69 6e  e rows */.#defin
1ad00 65 20 57 48 45 52 45 5f 44 55 50 4c 49 43 41 54  e WHERE_DUPLICAT
1ad10 45 53 5f 4f 4b 20 20 20 20 30 78 30 30 31 30 20  ES_OK    0x0010 
1ad20 2f 2a 20 4f 6b 20 74 6f 20 72 65 74 75 72 6e 20  /* Ok to return 
1ad30 61 20 72 6f 77 20 6d 6f 72 65 20 74 68 61 6e 20  a row more than 
1ad40 6f 6e 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  once */.#define 
1ad50 57 48 45 52 45 5f 4f 52 5f 53 55 42 43 4c 41 55  WHERE_OR_SUBCLAU
1ad60 53 45 20 20 20 20 20 30 78 30 30 32 30 20 2f 2a  SE     0x0020 /*
1ad70 20 50 72 6f 63 65 73 73 69 6e 67 20 61 20 73 75   Processing a su
1ad80 62 2d 57 48 45 52 45 20 61 73 20 70 61 72 74 20  b-WHERE as part 
1ad90 6f 66 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  of.             
1ada0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1adb0 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 20           ** the 
1adc0 4f 52 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20  OR optimization 
1add0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1ade0 45 5f 47 52 4f 55 50 42 59 20 20 20 20 20 20 20  E_GROUPBY       
1adf0 20 20 20 30 78 30 30 34 30 20 2f 2a 20 70 4f 72     0x0040 /* pOr
1ae00 64 65 72 42 79 20 69 73 20 72 65 61 6c 6c 79 20  derBy is really 
1ae10 61 20 47 52 4f 55 50 20 42 59 20 2a 2f 0a 23 64  a GROUP BY */.#d
1ae20 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54  efine WHERE_DIST
1ae30 49 4e 43 54 42 59 20 20 20 20 20 20 20 30 78 30  INCTBY       0x0
1ae40 30 38 30 20 2f 2a 20 70 4f 72 64 65 72 62 79 20  080 /* pOrderby 
1ae50 69 73 20 72 65 61 6c 6c 79 20 61 20 44 49 53 54  is really a DIST
1ae60 49 4e 43 54 20 63 6c 61 75 73 65 20 2a 2f 0a 23  INCT clause */.#
1ae70 64 65 66 69 6e 65 20 57 48 45 52 45 5f 57 41 4e  define WHERE_WAN
1ae80 54 5f 44 49 53 54 49 4e 43 54 20 20 20 20 30 78  T_DISTINCT    0x
1ae90 30 31 30 30 20 2f 2a 20 41 6c 6c 20 6f 75 74 70  0100 /* All outp
1aea0 75 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 64  ut needs to be d
1aeb0 69 73 74 69 6e 63 74 20 2a 2f 0a 23 64 65 66 69  istinct */.#defi
1aec0 6e 65 20 57 48 45 52 45 5f 53 4f 52 54 42 59 47  ne WHERE_SORTBYG
1aed0 52 4f 55 50 20 20 20 20 20 20 30 78 30 32 30 30  ROUP      0x0200
1aee0 20 2f 2a 20 53 75 70 70 6f 72 74 20 73 71 6c 69   /* Support sqli
1aef0 74 65 33 57 68 65 72 65 49 73 53 6f 72 74 65 64  te3WhereIsSorted
1af00 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  () */.#define WH
1af10 45 52 45 5f 53 45 45 4b 5f 54 41 42 4c 45 20 20  ERE_SEEK_TABLE  
1af20 20 20 20 20 20 30 78 30 34 30 30 20 2f 2a 20 44       0x0400 /* D
1af30 6f 20 6e 6f 74 20 64 65 66 65 72 20 73 65 65 6b  o not defer seek
1af40 73 20 6f 6e 20 6d 61 69 6e 20 74 61 62 6c 65 20  s on main table 
1af50 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1af60 5f 4f 52 44 45 52 42 59 5f 4c 49 4d 49 54 20 20  _ORDERBY_LIMIT  
1af70 20 20 30 78 30 38 30 30 20 2f 2a 20 4f 52 44 45    0x0800 /* ORDE
1af80 52 42 59 2b 4c 49 4d 49 54 20 6f 6e 20 74 68 65  RBY+LIMIT on the
1af90 20 69 6e 6e 65 72 20 6c 6f 6f 70 20 2a 2f 0a 23   inner loop */.#
1afa0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 53 45 45  define WHERE_SEE
1afb0 4b 5f 55 4e 49 51 5f 54 41 42 4c 45 20 20 30 78  K_UNIQ_TABLE  0x
1afc0 31 30 30 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 64  1000 /* Do not d
1afd0 65 66 65 72 20 73 65 65 6b 73 20 69 66 20 75 6e  efer seeks if un
1afe0 69 71 75 65 20 2a 2f 0a 20 20 20 20 20 20 20 20  ique */.        
1aff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b000 2f 2a 20 20 20 20 20 30 78 32 30 30 30 20 20 20  /*     0x2000   
1b010 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 75   not currently u
1b020 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  sed */.#define W
1b030 48 45 52 45 5f 55 53 45 5f 4c 49 4d 49 54 20 20  HERE_USE_LIMIT  
1b040 20 20 20 20 20 20 30 78 34 30 30 30 20 2f 2a 20        0x4000 /* 
1b050 55 73 65 20 74 68 65 20 4c 49 4d 49 54 20 69 6e  Use the LIMIT in
1b060 20 63 6f 73 74 20 65 73 74 69 6d 61 74 65 73 20   cost estimates 
1b070 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
1b080 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20             /*   
1b090 20 20 30 78 38 30 30 30 20 20 20 20 6e 6f 74 20    0x8000    not 
1b0a0 63 75 72 72 65 6e 74 6c 79 20 75 73 65 64 20 2a  currently used *
1b0b0 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 72 65  /../* Allowed re
1b0c0 74 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d  turn values from
1b0d0 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 44   sqlite3WhereIsD
1b0e0 69 73 74 69 6e 63 74 28 29 0a 2a 2f 0a 23 64 65  istinct().*/.#de
1b0f0 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49  fine WHERE_DISTI
1b100 4e 43 54 5f 4e 4f 4f 50 20 20 20 20 20 20 30 20  NCT_NOOP      0 
1b110 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 6b 65 79   /* DISTINCT key
1b120 77 6f 72 64 20 6e 6f 74 20 75 73 65 64 20 2a 2f  word not used */
1b130 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
1b140 49 53 54 49 4e 43 54 5f 55 4e 49 51 55 45 20 20  ISTINCT_UNIQUE  
1b150 20 20 31 20 20 2f 2a 20 4e 6f 20 64 75 70 6c 69    1  /* No dupli
1b160 63 61 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  cates */.#define
1b170 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f   WHERE_DISTINCT_
1b180 4f 52 44 45 52 45 44 20 20 20 32 20 20 2f 2a 20  ORDERED   2  /* 
1b190 41 6c 6c 20 64 75 70 6c 69 63 61 74 65 73 20 61  All duplicates a
1b1a0 72 65 20 61 64 6a 61 63 65 6e 74 20 2a 2f 0a 23  re adjacent */.#
1b1b0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
1b1c0 54 49 4e 43 54 5f 55 4e 4f 52 44 45 52 45 44 20  TINCT_UNORDERED 
1b1d0 33 20 20 2f 2a 20 44 75 70 6c 69 63 61 74 65 73  3  /* Duplicates
1b1e0 20 61 72 65 20 73 63 61 74 74 65 72 65 64 20 2a   are scattered *
1b1f0 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43  /../*.** A NameC
1b200 6f 6e 74 65 78 74 20 64 65 66 69 6e 65 73 20 61  ontext defines a
1b210 20 63 6f 6e 74 65 78 74 20 69 6e 20 77 68 69 63   context in whic
1b220 68 20 74 6f 20 72 65 73 6f 6c 76 65 20 74 61 62  h to resolve tab
1b230 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a  le and column.**
1b240 20 6e 61 6d 65 73 2e 20 20 54 68 65 20 63 6f 6e   names.  The con
1b250 74 65 78 74 20 63 6f 6e 73 69 73 74 73 20 6f 66  text consists of
1b260 20 61 20 6c 69 73 74 20 6f 66 20 74 61 62 6c 65   a list of table
1b270 73 20 28 74 68 65 20 70 53 72 63 4c 69 73 74 29  s (the pSrcList)
1b280 20 66 69 65 6c 64 20 61 6e 64 0a 2a 2a 20 61 20   field and.** a 
1b290 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64 20 65 78  list of named ex
1b2a0 70 72 65 73 73 69 6f 6e 20 28 70 45 4c 69 73 74  pression (pEList
1b2b0 29 2e 20 20 54 68 65 20 6e 61 6d 65 64 20 65 78  ).  The named ex
1b2c0 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 6d 61  pression list ma
1b2d0 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20 20 54  y.** be NULL.  T
1b2e0 68 65 20 70 53 72 63 20 63 6f 72 72 65 73 70 6f  he pSrc correspo
1b2f0 6e 64 73 20 74 6f 20 74 68 65 20 46 52 4f 4d 20  nds to the FROM 
1b300 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45  clause of a SELE
1b310 43 54 20 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20  CT or.** to the 
1b320 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65 72  table being oper
1b330 61 74 65 64 20 6f 6e 20 62 79 20 49 4e 53 45 52  ated on by INSER
1b340 54 2c 20 55 50 44 41 54 45 2c 20 6f 72 20 44 45  T, UPDATE, or DE
1b350 4c 45 54 45 2e 20 20 54 68 65 0a 2a 2a 20 70 45  LETE.  The.** pE
1b360 4c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  List corresponds
1b370 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74 20 73   to the result s
1b380 65 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20 61  et of a SELECT a
1b390 6e 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a  nd is NULL for.*
1b3a0 2a 20 6f 74 68 65 72 20 73 74 61 74 65 6d 65 6e  * other statemen
1b3b0 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f  ts..**.** NameCo
1b3c0 6e 74 65 78 74 73 20 63 61 6e 20 62 65 20 6e 65  ntexts can be ne
1b3d0 73 74 65 64 2e 20 20 57 68 65 6e 20 72 65 73 6f  sted.  When reso
1b3e0 6c 76 69 6e 67 20 6e 61 6d 65 73 2c 20 74 68 65  lving names, the
1b3f0 20 69 6e 6e 65 72 2d 6d 6f 73 74 0a 2a 2a 20 63   inner-most.** c
1b400 6f 6e 74 65 78 74 20 69 73 20 73 65 61 72 63 68  ontext is search
1b410 65 64 20 66 69 72 73 74 2e 20 20 49 66 20 6e 6f  ed first.  If no
1b420 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c   match is found,
1b430 20 74 68 65 20 6e 65 78 74 20 6f 75 74 65 72 0a   the next outer.
1b440 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 63 68  ** context is ch
1b450 65 63 6b 65 64 2e 20 20 49 66 20 74 68 65 72 65  ecked.  If there
1b460 20 69 73 20 73 74 69 6c 6c 20 6e 6f 20 6d 61 74   is still no mat
1b470 63 68 2c 20 74 68 65 20 6e 65 78 74 20 63 6f 6e  ch, the next con
1b480 74 65 78 74 0a 2a 2a 20 69 73 20 63 68 65 63 6b  text.** is check
1b490 65 64 2e 20 20 54 68 69 73 20 70 72 6f 63 65 73  ed.  This proces
1b4a0 73 20 63 6f 6e 74 69 6e 75 65 73 20 75 6e 74 69  s continues unti
1b4b0 6c 20 65 69 74 68 65 72 20 61 20 6d 61 74 63 68  l either a match
1b4c0 20 69 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20   is found.** or 
1b4d0 61 6c 6c 20 63 6f 6e 74 65 78 74 73 20 61 72 65  all contexts are
1b4e0 20 63 68 65 63 6b 2e 20 20 57 68 65 6e 20 61 20   check.  When a 
1b4f0 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20  match is found, 
1b500 74 68 65 20 6e 52 65 66 20 6d 65 6d 62 65 72 20  the nRef member 
1b510 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 78  of.** the contex
1b520 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  t containing the
1b530 20 6d 61 74 63 68 20 69 73 20 69 6e 63 72 65 6d   match is increm
1b540 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 45 61 63  ented..**.** Eac
1b550 68 20 73 75 62 71 75 65 72 79 20 67 65 74 73 20  h subquery gets 
1b560 61 20 6e 65 77 20 4e 61 6d 65 43 6f 6e 74 65 78  a new NameContex
1b570 74 2e 20 20 54 68 65 20 70 4e 65 78 74 20 66 69  t.  The pNext fi
1b580 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 74 68  eld points to th
1b590 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74  e.** NameContext
1b5a0 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 71   in the parent q
1b5b0 75 65 72 79 2e 20 20 54 68 75 73 20 74 68 65 20  uery.  Thus the 
1b5c0 70 72 6f 63 65 73 73 20 6f 66 20 73 63 61 6e 6e  process of scann
1b5d0 69 6e 67 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43  ing the.** NameC
1b5e0 6f 6e 74 65 78 74 20 6c 69 73 74 20 63 6f 72 72  ontext list corr
1b5f0 65 73 70 6f 6e 64 73 20 74 6f 20 73 65 61 72 63  esponds to searc
1b600 68 69 6e 67 20 74 68 72 6f 75 67 68 20 73 75 63  hing through suc
1b610 63 65 73 73 69 76 65 6c 79 20 6f 75 74 65 72 0a  cessively outer.
1b620 2a 2a 20 73 75 62 71 75 65 72 69 65 73 20 6c 6f  ** subqueries lo
1b630 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6d 61 74 63  oking for a matc
1b640 68 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4e 61 6d  h..*/.struct Nam
1b650 65 43 6f 6e 74 65 78 74 20 7b 0a 20 20 50 61 72  eContext {.  Par
1b660 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20  se *pParse;     
1b670 20 20 2f 2a 20 54 68 65 20 70 61 72 73 65 72 20    /* The parser 
1b680 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53  */.  SrcList *pS
1b690 72 63 4c 69 73 74 3b 20 20 20 2f 2a 20 4f 6e 65  rcList;   /* One
1b6a0 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73 20   or more tables 
1b6b0 75 73 65 64 20 74 6f 20 72 65 73 6f 6c 76 65 20  used to resolve 
1b6c0 6e 61 6d 65 73 20 2a 2f 0a 20 20 45 78 70 72 4c  names */.  ExprL
1b6d0 69 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20  ist *pEList;    
1b6e0 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c 69 73 74  /* Optional list
1b6f0 20 6f 66 20 72 65 73 75 6c 74 2d 73 65 74 20 63   of result-set c
1b700 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 41 67 67 49  olumns */.  AggI
1b710 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20  nfo *pAggInfo;  
1b720 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
1b730 61 62 6f 75 74 20 61 67 67 72 65 67 61 74 65 73  about aggregates
1b740 20 61 74 20 74 68 69 73 20 6c 65 76 65 6c 20 2a   at this level *
1b750 2f 0a 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  /.  NameContext 
1b760 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74  *pNext;  /* Next
1b770 20 6f 75 74 65 72 20 6e 61 6d 65 20 63 6f 6e 74   outer name cont
1b780 65 78 74 2e 20 20 4e 55 4c 4c 20 66 6f 72 20 6f  ext.  NULL for o
1b790 75 74 65 72 6d 6f 73 74 20 2a 2f 0a 20 20 69 6e  utermost */.  in
1b7a0 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20  t nRef;         
1b7b0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1b7c0 6e 61 6d 65 73 20 72 65 73 6f 6c 76 65 64 20 62  names resolved b
1b7d0 79 20 74 68 69 73 20 63 6f 6e 74 65 78 74 20 2a  y this context *
1b7e0 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20  /.  int nErr;   
1b7f0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1b800 65 72 20 6f 66 20 65 72 72 6f 72 73 20 65 6e 63  er of errors enc
1b810 6f 75 6e 74 65 72 65 64 20 77 68 69 6c 65 20 72  ountered while r
1b820 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 2a  esolving names *
1b830 2f 0a 20 20 75 31 36 20 6e 63 46 6c 61 67 73 3b  /.  u16 ncFlags;
1b840 20 20 20 20 20 20 20 20 20 2f 2a 20 5a 65 72 6f           /* Zero
1b850 20 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a 20 66 6c   or more NC_* fl
1b860 61 67 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f  ags defined belo
1b870 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  w */.};../*.** A
1b880 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
1b890 72 20 74 68 65 20 4e 61 6d 65 43 6f 6e 74 65 78  r the NameContex
1b8a0 74 2c 20 6e 63 46 6c 61 67 73 20 66 69 65 6c 64  t, ncFlags field
1b8b0 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f  ..**.** Value co
1b8c0 6e 73 74 72 61 69 6e 74 73 20 28 61 6c 6c 20 63  nstraints (all c
1b8d0 68 65 63 6b 65 64 20 76 69 61 20 61 73 73 65 72  hecked via asser
1b8e0 74 28 29 29 3a 0a 2a 2a 20 20 20 20 4e 43 5f 48  t()):.**    NC_H
1b8f0 61 73 41 67 67 20 20 20 20 3d 3d 20 53 46 5f 48  asAgg    == SF_H
1b900 61 73 41 67 67 0a 2a 2a 20 20 20 20 4e 43 5f 4d  asAgg.**    NC_M
1b910 69 6e 4d 61 78 41 67 67 20 3d 3d 20 53 46 5f 4d  inMaxAgg == SF_M
1b920 69 6e 4d 61 78 41 67 67 20 3d 3d 20 53 51 4c 49  inMaxAgg == SQLI
1b930 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 0a 2a  TE_FUNC_MINMAX.*
1b940 2a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  *.*/.#define NC_
1b950 41 6c 6c 6f 77 41 67 67 20 20 30 78 30 30 30 31  AllowAgg  0x0001
1b960 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66    /* Aggregate f
1b970 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 6c  unctions are all
1b980 6f 77 65 64 20 68 65 72 65 20 2a 2f 0a 23 64 65  owed here */.#de
1b990 66 69 6e 65 20 4e 43 5f 50 61 72 74 49 64 78 20  fine NC_PartIdx 
1b9a0 20 20 30 78 30 30 30 32 20 20 2f 2a 20 54 72 75    0x0002  /* Tru
1b9b0 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 61  e if resolving a
1b9c0 20 70 61 72 74 69 61 6c 20 69 6e 64 65 78 20 57   partial index W
1b9d0 48 45 52 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  HERE */.#define 
1b9e0 4e 43 5f 49 73 43 68 65 63 6b 20 20 20 30 78 30  NC_IsCheck   0x0
1b9f0 30 30 34 20 20 2f 2a 20 54 72 75 65 20 69 66 20  004  /* True if 
1ba00 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20  resolving names 
1ba10 69 6e 20 61 20 43 48 45 43 4b 20 63 6f 6e 73 74  in a CHECK const
1ba20 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  raint */.#define
1ba30 20 4e 43 5f 49 6e 41 67 67 46 75 6e 63 20 30 78   NC_InAggFunc 0x
1ba40 30 30 30 38 20 20 2f 2a 20 54 72 75 65 20 69 66  0008  /* True if
1ba50 20 61 6e 61 6c 79 7a 69 6e 67 20 61 72 67 75 6d   analyzing argum
1ba60 65 6e 74 73 20 74 6f 20 61 6e 20 61 67 67 20 66  ents to an agg f
1ba70 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  unc */.#define N
1ba80 43 5f 48 61 73 41 67 67 20 20 20 20 30 78 30 30  C_HasAgg    0x00
1ba90 31 30 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f  10  /* One or mo
1baa0 72 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e  re aggregate fun
1bab0 63 74 69 6f 6e 73 20 73 65 65 6e 20 2a 2f 0a 23  ctions seen */.#
1bac0 64 65 66 69 6e 65 20 4e 43 5f 49 64 78 45 78 70  define NC_IdxExp
1bad0 72 20 20 20 30 78 30 30 32 30 20 20 2f 2a 20 54  r   0x0020  /* T
1bae0 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67  rue if resolving
1baf0 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 43 52 45 41   columns of CREA
1bb00 54 45 20 49 4e 44 45 58 20 2a 2f 0a 23 64 65 66  TE INDEX */.#def
1bb10 69 6e 65 20 4e 43 5f 56 61 72 53 65 6c 65 63 74  ine NC_VarSelect
1bb20 20 30 78 30 30 34 30 20 20 2f 2a 20 41 20 63 6f   0x0040  /* A co
1bb30 72 72 65 6c 61 74 65 64 20 73 75 62 71 75 65 72  rrelated subquer
1bb40 79 20 68 61 73 20 62 65 65 6e 20 73 65 65 6e 20  y has been seen 
1bb50 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 4d 69  */.#define NC_Mi
1bb60 6e 4d 61 78 41 67 67 20 30 78 31 30 30 30 20 20  nMaxAgg 0x1000  
1bb70 2f 2a 20 6d 69 6e 2f 6d 61 78 20 61 67 67 72 65  /* min/max aggre
1bb80 67 61 74 65 73 20 73 65 65 6e 2e 20 20 53 65 65  gates seen.  See
1bb90 20 6e 6f 74 65 20 61 62 6f 76 65 20 2a 2f 0a 0a   note above */..
1bba0 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
1bbb0 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
1bbc0 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e  ng structure con
1bbd0 74 61 69 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d  tains all inform
1bbe0 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20  ation.** needed 
1bbf0 74 6f 20 67 65 6e 65 72 61 74 65 20 63 6f 64 65  to generate code
1bc00 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 53 45   for a single SE
1bc10 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
1bc20 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69 73 20  **.** nLimit is 
1bc30 73 65 74 20 74 6f 20 2d 31 20 69 66 20 74 68 65  set to -1 if the
1bc40 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54 20 63  re is no LIMIT c
1bc50 6c 61 75 73 65 2e 20 20 6e 4f 66 66 73 65 74 20  lause.  nOffset 
1bc60 69 73 20 73 65 74 20 74 6f 20 30 2e 0a 2a 2a 20  is set to 0..** 
1bc70 49 66 20 74 68 65 72 65 20 69 73 20 61 20 4c 49  If there is a LI
1bc80 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20  MIT clause, the 
1bc90 70 61 72 73 65 72 20 73 65 74 73 20 6e 4c 69 6d  parser sets nLim
1bca0 69 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  it to the value 
1bcb0 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 6d 69 74 20  of the.** limit 
1bcc0 61 6e 64 20 6e 4f 66 66 73 65 74 20 74 6f 20 74  and nOffset to t
1bcd0 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
1bce0 6f 66 66 73 65 74 20 28 6f 72 20 30 20 69 66 20  offset (or 0 if 
1bcf0 74 68 65 72 65 20 69 73 20 6e 6f 74 0a 2a 2a 20  there is not.** 
1bd00 6f 66 66 73 65 74 29 2e 20 20 42 75 74 20 6c 61  offset).  But la
1bd10 74 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61  ter on, nLimit a
1bd20 6e 64 20 6e 4f 66 66 73 65 74 20 62 65 63 6f 6d  nd nOffset becom
1bd30 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63  e the memory loc
1bd40 61 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68 65  ations.** in the
1bd50 20 56 44 42 45 20 74 68 61 74 20 72 65 63 6f 72   VDBE that recor
1bd60 64 20 74 68 65 20 6c 69 6d 69 74 20 61 6e 64 20  d the limit and 
1bd70 6f 66 66 73 65 74 20 63 6f 75 6e 74 65 72 73 2e  offset counters.
1bd80 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45  .**.** addrOpenE
1bd90 70 68 6d 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f  phm[] entries co
1bda0 6e 74 61 69 6e 20 74 68 65 20 61 64 64 72 65 73  ntain the addres
1bdb0 73 20 6f 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65  s of OP_OpenEphe
1bdc0 6d 65 72 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a  meral opcodes..*
1bdd0 2a 20 54 68 65 73 65 20 61 64 64 72 65 73 73 65  * These addresse
1bde0 73 20 6d 75 73 74 20 62 65 20 73 74 6f 72 65 64  s must be stored
1bdf0 20 73 6f 20 74 68 61 74 20 77 65 20 63 61 6e 20   so that we can 
1be00 67 6f 20 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c  go back and fill
1be10 20 69 6e 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45   in.** the P4_KE
1be20 59 49 4e 46 4f 20 61 6e 64 20 50 32 20 70 61 72  YINFO and P2 par
1be30 61 6d 65 74 65 72 73 20 6c 61 74 65 72 2e 20 20  ameters later.  
1be40 4e 65 69 74 68 65 72 20 74 68 65 20 4b 65 79 49  Neither the KeyI
1be50 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e  nfo nor.** the n
1be60 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
1be70 20 69 6e 20 50 32 20 63 61 6e 20 62 65 20 63 6f   in P2 can be co
1be80 6d 70 75 74 65 64 20 61 74 20 74 68 65 20 73 61  mputed at the sa
1be90 6d 65 20 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68  me time.** as th
1bea0 65 20 4f 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e  e OP_OpenEphm in
1beb0 73 74 72 75 63 74 69 6f 6e 20 69 73 20 63 6f 64  struction is cod
1bec0 65 64 20 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a  ed because not.*
1bed0 2a 20 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61  * enough informa
1bee0 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 63  tion about the c
1bef0 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 69 73  ompound query is
1bf00 20 6b 6e 6f 77 6e 20 61 74 20 74 68 61 74 20 70   known at that p
1bf10 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79  oint..** The Key
1bf20 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65  Info for addrOpe
1bf30 6e 54 72 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d  nTran[0] and [1]
1bf40 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74   contains collat
1bf50 69 6e 67 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a  ing sequences.**
1bf60 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20   for the result 
1bf70 73 65 74 2e 20 20 54 68 65 20 4b 65 79 49 6e 66  set.  The KeyInf
1bf80 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 45 70  o for addrOpenEp
1bf90 68 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63  hm[2] contains c
1bfa0 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75  ollating.** sequ
1bfb0 65 6e 63 65 73 20 66 6f 72 20 74 68 65 20 4f 52  ences for the OR
1bfc0 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a  DER BY clause..*
1bfd0 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74 20  /.struct Select 
1bfe0 7b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45  {.  ExprList *pE
1bff0 4c 69 73 74 3b 20 20 20 20 20 20 2f 2a 20 54 68  List;      /* Th
1c000 65 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20  e fields of the 
1c010 72 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f  result */.  u8 o
1c020 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
1c030 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b     /* One of: TK
1c040 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b  _UNION TK_ALL TK
1c050 5f 49 4e 54 45 52 53 45 43 54 20 54 4b 5f 45 58  _INTERSECT TK_EX
1c060 43 45 50 54 20 2a 2f 0a 20 20 4c 6f 67 45 73 74  CEPT */.  LogEst
1c070 20 6e 53 65 6c 65 63 74 52 6f 77 3b 20 20 20 20   nSelectRow;    
1c080 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 6e 75   /* Estimated nu
1c090 6d 62 65 72 20 6f 66 20 72 65 73 75 6c 74 20 72  mber of result r
1c0a0 6f 77 73 20 2a 2f 0a 20 20 75 33 32 20 73 65 6c  ows */.  u32 sel
1c0b0 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  Flags;          
1c0c0 2f 2a 20 56 61 72 69 6f 75 73 20 53 46 5f 2a 20  /* Various SF_* 
1c0d0 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20  values */.  int 
1c0e0 69 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65 74 3b  iLimit, iOffset;
1c0f0 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67     /* Memory reg
1c100 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 4c  isters holding L
1c110 49 4d 49 54 20 26 20 4f 46 46 53 45 54 20 63 6f  IMIT & OFFSET co
1c120 75 6e 74 65 72 73 20 2a 2f 0a 23 69 66 20 53 45  unters */.#if SE
1c130 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45  LECTTRACE_ENABLE
1c140 44 0a 20 20 63 68 61 72 20 7a 53 65 6c 4e 61 6d  D.  char zSelNam
1c150 65 5b 31 32 5d 3b 20 20 20 20 20 2f 2a 20 53 79  e[12];     /* Sy
1c160 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 6f 66 20 74  mbolic name of t
1c170 68 69 73 20 53 45 4c 45 43 54 20 75 73 65 20 66  his SELECT use f
1c180 6f 72 20 64 65 62 75 67 67 69 6e 67 20 2a 2f 0a  or debugging */.
1c190 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 61 64 64  #endif.  int add
1c1a0 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b 20 20 20  rOpenEphm[2];   
1c1b0 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 20  /* OP_OpenEphem 
1c1c0 6f 70 63 6f 64 65 73 20 72 65 6c 61 74 65 64 20  opcodes related 
1c1d0 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74 20 2a  to this select *
1c1e0 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72  /.  SrcList *pSr
1c1f0 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  c;         /* Th
1c200 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f  e FROM clause */
1c210 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b  .  Expr *pWhere;
1c220 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
1c230 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 2a 2f   WHERE clause */
1c240 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72  .  ExprList *pGr
1c250 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20 54 68 65  oupBy;    /* The
1c260 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65   GROUP BY clause
1c270 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48 61 76   */.  Expr *pHav
1c280 69 6e 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ing;         /* 
1c290 54 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73  The HAVING claus
1c2a0 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  e */.  ExprList 
1c2b0 2a 70 4f 72 64 65 72 42 79 3b 20 20 20 20 2f 2a  *pOrderBy;    /*
1c2c0 20 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   The ORDER BY cl
1c2d0 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74  ause */.  Select
1c2e0 20 2a 70 50 72 69 6f 72 3b 20 20 20 20 20 20 20   *pPrior;       
1c2f0 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65 63 74   /* Prior select
1c300 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73   in a compound s
1c310 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e 74 20  elect statement 
1c320 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 4e 65  */.  Select *pNe
1c330 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  xt;         /* N
1c340 65 78 74 20 73 65 6c 65 63 74 20 74 6f 20 74 68  ext select to th
1c350 65 20 6c 65 66 74 20 69 6e 20 61 20 63 6f 6d 70  e left in a comp
1c360 6f 75 6e 64 20 2a 2f 0a 20 20 45 78 70 72 20 2a  ound */.  Expr *
1c370 70 4c 69 6d 69 74 3b 20 20 20 20 20 20 20 20 20  pLimit;         
1c380 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72 65 73   /* LIMIT expres
1c390 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73  sion. NULL means
1c3a0 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20   not used. */.  
1c3b0 45 78 70 72 20 2a 70 4f 66 66 73 65 74 3b 20 20  Expr *pOffset;  
1c3c0 20 20 20 20 20 20 20 2f 2a 20 4f 46 46 53 45 54         /* OFFSET
1c3d0 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c   expression. NUL
1c3e0 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64  L means not used
1c3f0 2e 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69  . */.  With *pWi
1c400 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  th;           /*
1c410 20 57 49 54 48 20 63 6c 61 75 73 65 20 61 74 74   WITH clause att
1c420 61 63 68 65 64 20 74 6f 20 74 68 69 73 20 73 65  ached to this se
1c430 6c 65 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e 20 2a  lect. Or NULL. *
1c440 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  /.};../*.** Allo
1c450 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 53  wed values for S
1c460 65 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e 20  elect.selFlags. 
1c470 20 54 68 65 20 22 53 46 22 20 70 72 65 66 69 78   The "SF" prefix
1c480 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22   stands for.** "
1c490 53 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a 2a  Select Flag"..**
1c4a0 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72  .** Value constr
1c4b0 61 69 6e 74 73 20 28 61 6c 6c 20 63 68 65 63 6b  aints (all check
1c4c0 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29  ed via assert())
1c4d0 0a 2a 2a 20 20 20 20 20 53 46 5f 48 61 73 41 67  .**     SF_HasAg
1c4e0 67 20 20 20 20 20 3d 3d 20 4e 43 5f 48 61 73 41  g     == NC_HasA
1c4f0 67 67 0a 2a 2a 20 20 20 20 20 53 46 5f 4d 69 6e  gg.**     SF_Min
1c500 4d 61 78 41 67 67 20 20 3d 3d 20 4e 43 5f 4d 69  MaxAgg  == NC_Mi
1c510 6e 4d 61 78 41 67 67 20 20 20 20 20 3d 3d 20 53  nMaxAgg     == S
1c520 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41  QLITE_FUNC_MINMA
1c530 58 0a 2a 2a 20 20 20 20 20 53 46 5f 46 69 78 65  X.**     SF_Fixe
1c540 64 4c 69 6d 69 74 20 3d 3d 20 57 48 45 52 45 5f  dLimit == WHERE_
1c550 55 53 45 5f 4c 49 4d 49 54 0a 2a 2f 0a 23 64 65  USE_LIMIT.*/.#de
1c560 66 69 6e 65 20 53 46 5f 44 69 73 74 69 6e 63 74  fine SF_Distinct
1c570 20 20 20 20 20 20 20 30 78 30 30 30 30 31 20 20         0x00001  
1c580 2f 2a 20 4f 75 74 70 75 74 20 73 68 6f 75 6c 64  /* Output should
1c590 20 62 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a   be DISTINCT */.
1c5a0 23 64 65 66 69 6e 65 20 53 46 5f 41 6c 6c 20 20  #define SF_All  
1c5b0 20 20 20 20 20 20 20 20 20 20 30 78 30 30 30 30            0x0000
1c5c0 32 20 20 2f 2a 20 49 6e 63 6c 75 64 65 73 20 74  2  /* Includes t
1c5d0 68 65 20 41 4c 4c 20 6b 65 79 77 6f 72 64 20 2a  he ALL keyword *
1c5e0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65 73  /.#define SF_Res
1c5f0 6f 6c 76 65 64 20 20 20 20 20 20 20 30 78 30 30  olved       0x00
1c600 30 30 34 20 20 2f 2a 20 49 64 65 6e 74 69 66 69  004  /* Identifi
1c610 65 72 73 20 68 61 76 65 20 62 65 65 6e 20 72 65  ers have been re
1c620 73 6f 6c 76 65 64 20 2a 2f 0a 23 64 65 66 69 6e  solved */.#defin
1c630 65 20 53 46 5f 41 67 67 72 65 67 61 74 65 20 20  e SF_Aggregate  
1c640 20 20 20 20 30 78 30 30 30 30 38 20 20 2f 2a 20      0x00008  /* 
1c650 43 6f 6e 74 61 69 6e 73 20 61 67 67 20 66 75 6e  Contains agg fun
1c660 63 74 69 6f 6e 73 20 6f 72 20 61 20 47 52 4f 55  ctions or a GROU
1c670 50 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20  P BY */.#define 
1c680 53 46 5f 48 61 73 41 67 67 20 20 20 20 20 20 20  SF_HasAgg       
1c690 20 20 30 78 30 30 30 31 30 20 20 2f 2a 20 43 6f    0x00010  /* Co
1c6a0 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61 74 65  ntains aggregate
1c6b0 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64   functions */.#d
1c6c0 65 66 69 6e 65 20 53 46 5f 55 73 65 73 45 70 68  efine SF_UsesEph
1c6d0 65 6d 65 72 61 6c 20 20 30 78 30 30 30 32 30 20  emeral  0x00020 
1c6e0 20 2f 2a 20 55 73 65 73 20 74 68 65 20 4f 70 65   /* Uses the Ope
1c6f0 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64  nEphemeral opcod
1c700 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  e */.#define SF_
1c710 45 78 70 61 6e 64 65 64 20 20 20 20 20 20 20 30  Expanded       0
1c720 78 30 30 30 34 30 20 20 2f 2a 20 73 71 6c 69 74  x00040  /* sqlit
1c730 65 33 53 65 6c 65 63 74 45 78 70 61 6e 64 28 29  e3SelectExpand()
1c740 20 63 61 6c 6c 65 64 20 6f 6e 20 74 68 69 73 20   called on this 
1c750 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 48 61  */.#define SF_Ha
1c760 73 54 79 70 65 49 6e 66 6f 20 20 20 20 30 78 30  sTypeInfo    0x0
1c770 30 30 38 30 20 20 2f 2a 20 46 52 4f 4d 20 73 75  0080  /* FROM su
1c780 62 71 75 65 72 69 65 73 20 68 61 76 65 20 54 61  bqueries have Ta
1c790 62 6c 65 20 6d 65 74 61 64 61 74 61 20 2a 2f 0a  ble metadata */.
1c7a0 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6d 70 6f  #define SF_Compo
1c7b0 75 6e 64 20 20 20 20 20 20 20 30 78 30 30 31 30  und       0x0010
1c7c0 30 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 61 20  0  /* Part of a 
1c7d0 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 2a  compound query *
1c7e0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 56 61 6c  /.#define SF_Val
1c7f0 75 65 73 20 20 20 20 20 20 20 20 20 30 78 30 30  ues         0x00
1c800 32 30 30 20 20 2f 2a 20 53 79 6e 74 68 65 73 69  200  /* Synthesi
1c810 7a 65 64 20 66 72 6f 6d 20 56 41 4c 55 45 53 20  zed from VALUES 
1c820 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e  clause */.#defin
1c830 65 20 53 46 5f 4d 75 6c 74 69 56 61 6c 75 65 20  e SF_MultiValue 
1c840 20 20 20 20 30 78 30 30 34 30 30 20 20 2f 2a 20      0x00400  /* 
1c850 53 69 6e 67 6c 65 20 56 41 4c 55 45 53 20 74 65  Single VALUES te
1c860 72 6d 20 77 69 74 68 20 6d 75 6c 74 69 70 6c 65  rm with multiple
1c870 20 72 6f 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65   rows */.#define
1c880 20 53 46 5f 4e 65 73 74 65 64 46 72 6f 6d 20 20   SF_NestedFrom  
1c890 20 20 20 30 78 30 30 38 30 30 20 20 2f 2a 20 50     0x00800  /* P
1c8a0 61 72 74 20 6f 66 20 61 20 70 61 72 65 6e 74 68  art of a parenth
1c8b0 65 73 69 7a 65 64 20 46 52 4f 4d 20 63 6c 61 75  esized FROM clau
1c8c0 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  se */.#define SF
1c8d0 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20 20 20 20  _MinMaxAgg      
1c8e0 30 78 30 31 30 30 30 20 20 2f 2a 20 41 67 67 72  0x01000  /* Aggr
1c8f0 65 67 61 74 65 20 63 6f 6e 74 61 69 6e 69 6e 67  egate containing
1c900 20 6d 69 6e 28 29 20 6f 72 20 6d 61 78 28 29 20   min() or max() 
1c910 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65  */.#define SF_Re
1c920 63 75 72 73 69 76 65 20 20 20 20 20 20 30 78 30  cursive      0x0
1c930 32 30 30 30 20 20 2f 2a 20 54 68 65 20 72 65 63  2000  /* The rec
1c940 75 72 73 69 76 65 20 70 61 72 74 20 6f 66 20 61  ursive part of a
1c950 20 72 65 63 75 72 73 69 76 65 20 43 54 45 20 2a   recursive CTE *
1c960 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 46 69 78  /.#define SF_Fix
1c970 65 64 4c 69 6d 69 74 20 20 20 20 20 30 78 30 34  edLimit     0x04
1c980 30 30 30 20 20 2f 2a 20 6e 53 65 6c 65 63 74 52  000  /* nSelectR
1c990 6f 77 20 73 65 74 20 62 79 20 61 20 63 6f 6e 73  ow set by a cons
1c9a0 74 61 6e 74 20 4c 49 4d 49 54 20 2a 2f 0a 23 64  tant LIMIT */.#d
1c9b0 65 66 69 6e 65 20 53 46 5f 4d 61 79 62 65 43 6f  efine SF_MaybeCo
1c9c0 6e 76 65 72 74 20 20 20 30 78 30 38 30 30 30 20  nvert   0x08000 
1c9d0 20 2f 2a 20 4e 65 65 64 20 63 6f 6e 76 65 72 74   /* Need convert
1c9e0 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f  CompoundSelectTo
1c9f0 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 23 64  Subquery() */.#d
1ca00 65 66 69 6e 65 20 53 46 5f 43 6f 6e 76 65 72 74  efine SF_Convert
1ca10 65 64 20 20 20 20 20 20 30 78 31 30 30 30 30 20  ed      0x10000 
1ca20 20 2f 2a 20 42 79 20 63 6f 6e 76 65 72 74 43 6f   /* By convertCo
1ca30 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75  mpoundSelectToSu
1ca40 62 71 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66  bquery() */.#def
1ca50 69 6e 65 20 53 46 5f 49 6e 63 6c 75 64 65 48 69  ine SF_IncludeHi
1ca60 64 64 65 6e 20 20 30 78 32 30 30 30 30 20 20 2f  dden  0x20000  /
1ca70 2a 20 49 6e 63 6c 75 64 65 20 68 69 64 64 65 6e  * Include hidden
1ca80 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 6f 75 74 70   columns in outp
1ca90 75 74 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68  ut */.../*.** Th
1caa0 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20 53  e results of a S
1cab0 45 4c 45 43 54 20 63 61 6e 20 62 65 20 64 69 73  ELECT can be dis
1cac0 74 72 69 62 75 74 65 64 20 69 6e 20 73 65 76 65  tributed in seve
1cad0 72 61 6c 20 77 61 79 73 2c 20 61 73 20 64 65 66  ral ways, as def
1cae0 69 6e 65 64 0a 2a 2a 20 62 79 20 6f 6e 65 20 6f  ined.** by one o
1caf0 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
1cb00 6d 61 63 72 6f 73 2e 20 20 54 68 65 20 22 53 52  macros.  The "SR
1cb10 54 22 20 70 72 65 66 69 78 20 6d 65 61 6e 73 20  T" prefix means 
1cb20 22 53 45 4c 45 43 54 20 52 65 73 75 6c 74 0a 2a  "SELECT Result.*
1cb30 2a 20 54 79 70 65 22 2e 0a 2a 2a 0a 2a 2a 20 20  * Type"..**.**  
1cb40 20 20 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20     SRT_Union    
1cb50 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73     Store results
1cb60 20 61 73 20 61 20 6b 65 79 20 69 6e 20 61 20 74   as a key in a t
1cb70 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78 0a 2a  emporary index.*
1cb80 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1cb90 20 20 20 20 20 20 69 64 65 6e 74 69 66 69 65 64        identified
1cba0 20 62 79 20 70 44 65 73 74 2d 3e 69 53 44 50 61   by pDest->iSDPa
1cbb0 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  rm..**.**     SR
1cbc0 54 5f 45 78 63 65 70 74 20 20 20 20 20 20 52 65  T_Except      Re
1cbd0 6d 6f 76 65 20 72 65 73 75 6c 74 73 20 66 72 6f  move results fro
1cbe0 6d 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20  m the temporary 
1cbf0 69 6e 64 65 78 20 70 44 65 73 74 2d 3e 69 53 44  index pDest->iSD
1cc00 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  Parm..**.**     
1cc10 53 52 54 5f 45 78 69 73 74 73 20 20 20 20 20 20  SRT_Exists      
1cc20 53 74 6f 72 65 20 61 20 31 20 69 6e 20 6d 65 6d  Store a 1 in mem
1cc30 6f 72 79 20 63 65 6c 6c 20 70 44 65 73 74 2d 3e  ory cell pDest->
1cc40 69 53 44 50 61 72 6d 20 69 66 20 74 68 65 20 72  iSDParm if the r
1cc50 65 73 75 6c 74 0a 2a 2a 20 20 20 20 20 20 20 20  esult.**        
1cc60 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
1cc70 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2e 0a 2a   is not empty..*
1cc80 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73  *.**     SRT_Dis
1cc90 63 61 72 64 20 20 20 20 20 54 68 72 6f 77 20 74  card     Throw t
1cca0 68 65 20 72 65 73 75 6c 74 73 20 61 77 61 79 2e  he results away.
1ccb0 20 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62    This is used b
1ccc0 79 20 53 45 4c 45 43 54 0a 2a 2a 20 20 20 20 20  y SELECT.**     
1ccd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cce0 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69  statements withi
1ccf0 6e 20 74 72 69 67 67 65 72 73 20 77 68 6f 73 65  n triggers whose
1cd00 20 6f 6e 6c 79 20 70 75 72 70 6f 73 65 20 69 73   only purpose is
1cd10 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1cd20 20 20 20 20 20 20 20 20 74 68 65 20 73 69 64 65          the side
1cd30 2d 65 66 66 65 63 74 73 20 6f 66 20 66 75 6e 63  -effects of func
1cd40 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c  tions..**.** All
1cd50 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 61 72   of the above ar
1cd60 65 20 66 72 65 65 20 74 6f 20 69 67 6e 6f 72 65  e free to ignore
1cd70 20 74 68 65 69 72 20 4f 52 44 45 52 20 42 59 20   their ORDER BY 
1cd80 63 6c 61 75 73 65 2e 20 54 68 6f 73 65 20 74 68  clause. Those th
1cd90 61 74 0a 2a 2a 20 66 6f 6c 6c 6f 77 20 6d 75 73  at.** follow mus
1cda0 74 20 68 6f 6e 6f 72 20 74 68 65 20 4f 52 44 45  t honor the ORDE
1cdb0 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a  R BY clause..**.
1cdc0 2a 2a 20 20 20 20 20 53 52 54 5f 4f 75 74 70 75  **     SRT_Outpu
1cdd0 74 20 20 20 20 20 20 47 65 6e 65 72 61 74 65 20  t      Generate 
1cde0 61 20 72 6f 77 20 6f 66 20 6f 75 74 70 75 74 20  a row of output 
1cdf0 28 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 52 65  (using the OP_Re
1ce00 73 75 6c 74 52 6f 77 0a 2a 2a 20 20 20 20 20 20  sultRow.**      
1ce10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
1ce20 70 63 6f 64 65 29 20 66 6f 72 20 65 61 63 68 20  pcode) for each 
1ce30 72 6f 77 20 69 6e 20 74 68 65 20 72 65 73 75 6c  row in the resul
1ce40 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  t set..**.**    
1ce50 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20   SRT_Mem        
1ce60 20 4f 6e 6c 79 20 76 61 6c 69 64 20 69 66 20 74   Only valid if t
1ce70 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 20 73  he result is a s
1ce80 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a  ingle column..**
1ce90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cea0 20 20 20 20 20 53 74 6f 72 65 20 74 68 65 20 66       Store the f
1ceb0 69 72 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 74  irst column of t
1cec0 68 65 20 66 69 72 73 74 20 72 65 73 75 6c 74 20  he first result 
1ced0 72 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  row.**          
1cee0 20 20 20 20 20 20 20 20 20 20 20 69 6e 20 72 65             in re
1cef0 67 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53  gister pDest->iS
1cf00 44 50 61 72 6d 20 74 68 65 6e 20 61 62 61 6e 64  DParm then aband
1cf10 6f 6e 20 74 68 65 20 72 65 73 74 0a 2a 2a 20 20  on the rest.**  
1cf20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf30 20 20 20 6f 66 20 74 68 65 20 71 75 65 72 79 2e     of the query.
1cf40 20 20 54 68 69 73 20 64 65 73 74 69 6e 61 74 69    This destinati
1cf50 6f 6e 20 69 6d 70 6c 69 65 73 20 22 4c 49 4d 49  on implies "LIMI
1cf60 54 20 31 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  T 1"..**.**     
1cf70 53 52 54 5f 53 65 74 20 20 20 20 20 20 20 20 20  SRT_Set         
1cf80 54 68 65 20 72 65 73 75 6c 74 20 6d 75 73 74 20  The result must 
1cf90 62 65 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75  be a single colu
1cfa0 6d 6e 2e 20 20 53 74 6f 72 65 20 65 61 63 68 0a  mn.  Store each.
1cfb0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1cfc0 20 20 20 20 20 20 20 72 6f 77 20 6f 66 20 72 65         row of re
1cfd0 73 75 6c 74 20 61 73 20 74 68 65 20 6b 65 79 20  sult as the key 
1cfe0 69 6e 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e  in table pDest->
1cff0 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20  iSDParm..**     
1d000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d010 41 70 70 6c 79 20 74 68 65 20 61 66 66 69 6e 69  Apply the affini
1d020 74 79 20 70 44 65 73 74 2d 3e 61 66 66 53 64 73  ty pDest->affSds
1d030 74 20 62 65 66 6f 72 65 20 73 74 6f 72 69 6e 67  t before storing
1d040 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1d050 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 73 2e          results.
1d060 20 20 55 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d    Used to implem
1d070 65 6e 74 20 22 49 4e 20 28 53 45 4c 45 43 54 20  ent "IN (SELECT 
1d080 2e 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  ...)"..**.**    
1d090 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20   SRT_EphemTab   
1d0a0 20 43 72 65 61 74 65 20 61 6e 20 74 65 6d 70 6f   Create an tempo
1d0b0 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74  rary table pDest
1d0c0 2d 3e 69 53 44 50 61 72 6d 20 61 6e 64 20 73 74  ->iSDParm and st
1d0d0 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ore.**          
1d0e0 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 72             the r
1d0f0 65 73 75 6c 74 20 74 68 65 72 65 2e 20 54 68 65  esult there. The
1d100 20 63 75 72 73 6f 72 20 69 73 20 6c 65 66 74 20   cursor is left 
1d110 6f 70 65 6e 20 61 66 74 65 72 0a 2a 2a 20 20 20  open after.**   
1d120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d130 20 20 72 65 74 75 72 6e 69 6e 67 2e 20 20 54 68    returning.  Th
1d140 69 73 20 69 73 20 6c 69 6b 65 20 53 52 54 5f 54  is is like SRT_T
1d150 61 62 6c 65 20 65 78 63 65 70 74 20 74 68 61 74  able except that
1d160 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1d170 20 20 20 20 20 20 20 20 74 68 69 73 20 64 65 73          this des
1d180 74 69 6e 61 74 69 6f 6e 20 75 73 65 73 20 4f 50  tination uses OP
1d190 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 74  _OpenEphemeral t
1d1a0 6f 20 63 72 65 61 74 65 0a 2a 2a 20 20 20 20 20  o create.**     
1d1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d1c0 74 68 65 20 74 61 62 6c 65 20 66 69 72 73 74 2e  the table first.
1d1d0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 43  .**.**     SRT_C
1d1e0 6f 72 6f 75 74 69 6e 65 20 20 20 47 65 6e 65 72  oroutine   Gener
1d1f0 61 74 65 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65  ate a co-routine
1d200 20 74 68 61 74 20 72 65 74 75 72 6e 73 20 61 20   that returns a 
1d210 6e 65 77 20 72 6f 77 20 6f 66 0a 2a 2a 20 20 20  new row of.**   
1d220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d230 20 20 72 65 73 75 6c 74 73 20 65 61 63 68 20 74    results each t
1d240 69 6d 65 20 69 74 20 69 73 20 69 6e 76 6f 6b 65  ime it is invoke
1d250 64 2e 20 20 54 68 65 20 65 6e 74 72 79 20 70 6f  d.  The entry po
1d260 69 6e 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  int.**          
1d270 20 20 20 20 20 20 20 20 20 20 20 6f 66 20 74 68             of th
1d280 65 20 63 6f 2d 72 6f 75 74 69 6e 65 20 69 73 20  e co-routine is 
1d290 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
1d2a0 65 72 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  er pDest->iSDPar
1d2b0 6d 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  m.**            
1d2c0 20 20 20 20 20 20 20 20 20 61 6e 64 20 74 68 65           and the
1d2d0 20 72 65 73 75 6c 74 20 72 6f 77 20 69 73 20 73   result row is s
1d2e0 74 6f 72 65 64 20 69 6e 20 70 44 65 73 74 2d 3e  tored in pDest->
1d2f0 6e 44 65 73 74 20 72 65 67 69 73 74 65 72 73 0a  nDest registers.
1d300 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1d310 20 20 20 20 20 20 20 73 74 61 72 74 69 6e 67 20         starting 
1d320 77 69 74 68 20 70 44 65 73 74 2d 3e 69 53 64 73  with pDest->iSds
1d330 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  t..**.**     SRT
1d340 5f 54 61 62 6c 65 20 20 20 20 20 20 20 53 74 6f  _Table       Sto
1d350 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 74 65  re results in te
1d360 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44  mporary table pD
1d370 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a  est->iSDParm..**
1d380 20 20 20 20 20 53 52 54 5f 46 69 66 6f 20 20 20       SRT_Fifo   
1d390 20 20 20 20 20 54 68 69 73 20 69 73 20 6c 69 6b       This is lik
1d3a0 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 65  e SRT_EphemTab e
1d3b0 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 74  xcept that the t
1d3c0 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20 20  able.**         
1d3d0 20 20 20 20 20 20 20 20 20 20 20 20 69 73 20 61              is a
1d3e0 73 73 75 6d 65 64 20 74 6f 20 61 6c 72 65 61 64  ssumed to alread
1d3f0 79 20 62 65 20 6f 70 65 6e 2e 20 20 53 52 54 5f  y be open.  SRT_
1d400 46 69 66 6f 20 68 61 73 0a 2a 2a 20 20 20 20 20  Fifo has.**     
1d410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d420 74 68 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 70  the additional p
1d430 72 6f 70 65 72 74 79 20 6f 66 20 62 65 69 6e 67  roperty of being
1d440 20 61 62 6c 65 20 74 6f 20 69 67 6e 6f 72 65 0a   able to ignore.
1d450 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1d460 20 20 20 20 20 20 20 74 68 65 20 4f 52 44 45 52         the ORDER
1d470 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a   BY clause..**.*
1d480 2a 20 20 20 20 20 53 52 54 5f 44 69 73 74 46 69  *     SRT_DistFi
1d490 66 6f 20 20 20 20 53 74 6f 72 65 20 72 65 73 75  fo    Store resu
1d4a0 6c 74 73 20 69 6e 20 61 20 74 65 6d 70 6f 72 61  lts in a tempora
1d4b0 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e  ry table pDest->
1d4c0 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20  iSDParm..**     
1d4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d4e0 42 75 74 20 61 6c 73 6f 20 75 73 65 20 74 65 6d  But also use tem
1d4f0 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65  porary table pDe
1d500 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20 61 73  st->iSDParm+1 as
1d510 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1d520 20 20 20 20 20 20 20 20 61 20 72 65 63 6f 72 64          a record
1d530 20 6f 66 20 61 6c 6c 20 70 72 69 6f 72 20 72 65   of all prior re
1d540 73 75 6c 74 73 20 61 6e 64 20 69 67 6e 6f 72 65  sults and ignore
1d550 20 61 6e 79 20 64 75 70 6c 69 63 61 74 65 0a 2a   any duplicate.*
1d560 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1d570 20 20 20 20 20 20 72 6f 77 73 2e 20 20 4e 61 6d        rows.  Nam
1d580 65 20 6d 65 61 6e 73 3a 20 20 22 44 69 73 74 69  e means:  "Disti
1d590 6e 63 74 20 46 69 66 6f 22 2e 0a 2a 2a 0a 2a 2a  nct Fifo"..**.**
1d5a0 20 20 20 20 20 53 52 54 5f 51 75 65 75 65 20 20       SRT_Queue  
1d5b0 20 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c       Store resul
1d5c0 74 73 20 69 6e 20 70 72 69 6f 72 69 74 79 20 71  ts in priority q
1d5d0 75 65 75 65 20 70 44 65 73 74 2d 3e 69 53 44 50  ueue pDest->iSDP
1d5e0 61 72 6d 20 28 72 65 61 6c 6c 79 0a 2a 2a 20 20  arm (really.**  
1d5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d600 20 20 20 61 6e 20 69 6e 64 65 78 29 2e 20 20 41     an index).  A
1d610 70 70 65 6e 64 20 61 20 73 65 71 75 65 6e 63 65  ppend a sequence
1d620 20 6e 75 6d 62 65 72 20 73 6f 20 74 68 61 74 20   number so that 
1d630 61 6c 6c 20 65 6e 74 72 69 65 73 0a 2a 2a 20 20  all entries.**  
1d640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d650 20 20 20 61 72 65 20 64 69 73 74 69 6e 63 74 2e     are distinct.
1d660 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44  .**.**     SRT_D
1d670 69 73 74 51 75 65 75 65 20 20 20 53 74 6f 72 65  istQueue   Store
1d680 20 72 65 73 75 6c 74 73 20 69 6e 20 70 72 69 6f   results in prio
1d690 72 69 74 79 20 71 75 65 75 65 20 70 44 65 73 74  rity queue pDest
1d6a0 2d 3e 69 53 44 50 61 72 6d 20 6f 6e 6c 79 20 69  ->iSDParm only i
1d6b0 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  f.**            
1d6c0 20 20 20 20 20 20 20 20 20 74 68 65 20 73 61 6d           the sam
1d6d0 65 20 72 65 63 6f 72 64 20 68 61 73 20 6e 65 76  e record has nev
1d6e0 65 72 20 62 65 65 6e 20 73 74 6f 72 65 64 20 62  er been stored b
1d6f0 65 66 6f 72 65 2e 20 20 54 68 65 0a 2a 2a 20 20  efore.  The.**  
1d700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d710 20 20 20 69 6e 64 65 78 20 61 74 20 70 44 65 73     index at pDes
1d720 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20 68 6f 6c  t->iSDParm+1 hol
1d730 64 20 61 6c 6c 20 70 72 69 6f 72 20 73 74 6f 72  d all prior stor
1d740 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  es..*/.#define S
1d750 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 20  RT_Union        
1d760 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  1  /* Store resu
1d770 6c 74 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e  lt as keys in an
1d780 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
1d790 65 20 53 52 54 5f 45 78 63 65 70 74 20 20 20 20  e SRT_Except    
1d7a0 20 20 20 32 20 20 2f 2a 20 52 65 6d 6f 76 65 20     2  /* Remove 
1d7b0 72 65 73 75 6c 74 20 66 72 6f 6d 20 61 20 55 4e  result from a UN
1d7c0 49 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65  ION index */.#de
1d7d0 66 69 6e 65 20 53 52 54 5f 45 78 69 73 74 73 20  fine SRT_Exists 
1d7e0 20 20 20 20 20 20 33 20 20 2f 2a 20 53 74 6f 72        3  /* Stor
1d7f0 65 20 31 20 69 66 20 74 68 65 20 72 65 73 75 6c  e 1 if the resul
1d800 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 20 2a  t is not empty *
1d810 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69  /.#define SRT_Di
1d820 73 63 61 72 64 20 20 20 20 20 20 34 20 20 2f 2a  scard      4  /*
1d830 20 44 6f 20 6e 6f 74 20 73 61 76 65 20 74 68 65   Do not save the
1d840 20 72 65 73 75 6c 74 73 20 61 6e 79 77 68 65 72   results anywher
1d850 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  e */.#define SRT
1d860 5f 46 69 66 6f 20 20 20 20 20 20 20 20 20 35 20  _Fifo         5 
1d870 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
1d880 20 61 73 20 64 61 74 61 20 77 69 74 68 20 61 6e   as data with an
1d890 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69 64   automatic rowid
1d8a0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1d8b0 44 69 73 74 46 69 66 6f 20 20 20 20 20 36 20 20  DistFifo     6  
1d8c0 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 46 69 66 6f  /* Like SRT_Fifo
1d8d0 2c 20 62 75 74 20 75 6e 69 71 75 65 20 72 65 73  , but unique res
1d8e0 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65  ults only */.#de
1d8f0 66 69 6e 65 20 53 52 54 5f 51 75 65 75 65 20 20  fine SRT_Queue  
1d900 20 20 20 20 20 20 37 20 20 2f 2a 20 53 74 6f 72        7  /* Stor
1d910 65 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 71  e result in an q
1d920 75 65 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ueue */.#define 
1d930 53 52 54 5f 44 69 73 74 51 75 65 75 65 20 20 20  SRT_DistQueue   
1d940 20 38 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f   8  /* Like SRT_
1d950 51 75 65 75 65 2c 20 62 75 74 20 75 6e 69 71 75  Queue, but uniqu
1d960 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a  e results only *
1d970 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52 44 45 52 20  /../* The ORDER 
1d980 42 59 20 63 6c 61 75 73 65 20 69 73 20 69 67 6e  BY clause is ign
1d990 6f 72 65 64 20 66 6f 72 20 61 6c 6c 20 6f 66 20  ored for all of 
1d9a0 74 68 65 20 61 62 6f 76 65 20 2a 2f 0a 23 64 65  the above */.#de
1d9b0 66 69 6e 65 20 49 67 6e 6f 72 61 62 6c 65 4f 72  fine IgnorableOr
1d9c0 64 65 72 62 79 28 58 29 20 28 28 58 2d 3e 65 44  derby(X) ((X->eD
1d9d0 65 73 74 29 3c 3d 53 52 54 5f 44 69 73 74 51 75  est)<=SRT_DistQu
1d9e0 65 75 65 29 0a 0a 23 64 65 66 69 6e 65 20 53 52  eue)..#define SR
1d9f0 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20 20 39  T_Output       9
1da00 20 20 2f 2a 20 4f 75 74 70 75 74 20 65 61 63 68    /* Output each
1da10 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a   row of result *
1da20 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4d 65  /.#define SRT_Me
1da30 6d 20 20 20 20 20 20 20 20 20 31 30 20 20 2f 2a  m         10  /*
1da40 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e   Store result in
1da50 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 2a   a memory cell *
1da60 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 53 65  /.#define SRT_Se
1da70 74 20 20 20 20 20 20 20 20 20 31 31 20 20 2f 2a  t         11  /*
1da80 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61   Store results a
1da90 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64  s keys in an ind
1daa0 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ex */.#define SR
1dab0 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20 31 32  T_EphemTab    12
1dac0 20 20 2f 2a 20 43 72 65 61 74 65 20 74 72 61 6e    /* Create tran
1dad0 73 69 65 6e 74 20 74 61 62 20 61 6e 64 20 73 74  sient tab and st
1dae0 6f 72 65 20 6c 69 6b 65 20 53 52 54 5f 54 61 62  ore like SRT_Tab
1daf0 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  le */.#define SR
1db00 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 31 33  T_Coroutine   13
1db10 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 20 61 20    /* Generate a 
1db20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 72 65  single row of re
1db30 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  sult */.#define 
1db40 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20  SRT_Table       
1db50 31 34 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73  14  /* Store res
1db60 75 6c 74 20 61 73 20 64 61 74 61 20 77 69 74 68  ult as data with
1db70 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f   an automatic ro
1db80 77 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e  wid */../*.** An
1db90 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
1dba0 73 20 6f 62 6a 65 63 74 20 64 65 73 63 72 69 62  s object describ
1dbb0 65 73 20 77 68 65 72 65 20 74 6f 20 70 75 74 20  es where to put 
1dbc0 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  of the results o
1dbd0 66 0a 2a 2a 20 61 20 53 45 4c 45 43 54 20 73 74  f.** a SELECT st
1dbe0 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75  atement..*/.stru
1dbf0 63 74 20 53 65 6c 65 63 74 44 65 73 74 20 7b 0a  ct SelectDest {.
1dc00 20 20 75 38 20 65 44 65 73 74 3b 20 20 20 20 20    u8 eDest;     
1dc10 20 20 20 20 20 20 20 2f 2a 20 48 6f 77 20 74 6f         /* How to
1dc20 20 64 69 73 70 6f 73 65 20 6f 66 20 74 68 65 20   dispose of the 
1dc30 72 65 73 75 6c 74 73 2e 20 20 4f 6e 20 6f 66 20  results.  On of 
1dc40 53 52 54 5f 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a  SRT_* above. */.
1dc50 20 20 69 6e 74 20 69 53 44 50 61 72 6d 3b 20 20    int iSDParm;  
1dc60 20 20 20 20 20 20 20 2f 2a 20 41 20 70 61 72 61         /* A para
1dc70 6d 65 74 65 72 20 75 73 65 64 20 62 79 20 74 68  meter used by th
1dc80 65 20 65 44 65 73 74 20 64 69 73 70 6f 73 61 6c  e eDest disposal
1dc90 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 69 6e 74   method */.  int
1dca0 20 69 53 64 73 74 3b 20 20 20 20 20 20 20 20 20   iSdst;         
1dcb0 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69 73 74    /* Base regist
1dcc0 65 72 20 77 68 65 72 65 20 72 65 73 75 6c 74 73  er where results
1dcd0 20 61 72 65 20 77 72 69 74 74 65 6e 20 2a 2f 0a   are written */.
1dce0 20 20 69 6e 74 20 6e 53 64 73 74 3b 20 20 20 20    int nSdst;    
1dcf0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1dd00 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 61 6c   of registers al
1dd10 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 63 68 61  located */.  cha
1dd20 72 20 2a 7a 41 66 66 53 64 73 74 3b 20 20 20 20  r *zAffSdst;    
1dd30 20 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 75 73    /* Affinity us
1dd40 65 64 20 77 68 65 6e 20 65 44 65 73 74 3d 3d 53  ed when eDest==S
1dd50 52 54 5f 53 65 74 20 2a 2f 0a 20 20 45 78 70 72  RT_Set */.  Expr
1dd60 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20  List *pOrderBy; 
1dd70 20 2f 2a 20 4b 65 79 20 63 6f 6c 75 6d 6e 73 20   /* Key columns 
1dd80 66 6f 72 20 53 52 54 5f 51 75 65 75 65 20 61 6e  for SRT_Queue an
1dd90 64 20 53 52 54 5f 44 69 73 74 51 75 65 75 65 20  d SRT_DistQueue 
1dda0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 72  */.};../*.** Dur
1ddb0 69 6e 67 20 63 6f 64 65 20 67 65 6e 65 72 61 74  ing code generat
1ddc0 69 6f 6e 20 6f 66 20 73 74 61 74 65 6d 65 6e 74  ion of statement
1ddd0 73 20 74 68 61 74 20 64 6f 20 69 6e 73 65 72 74  s that do insert
1dde0 73 20 69 6e 74 6f 20 41 55 54 4f 49 4e 43 52 45  s into AUTOINCRE
1ddf0 4d 45 4e 54 0a 2a 2a 20 74 61 62 6c 65 73 2c 20  MENT.** tables, 
1de00 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e  the following in
1de10 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 61 74 74  formation is att
1de20 61 63 68 65 64 20 74 6f 20 74 68 65 20 54 61 62  ached to the Tab
1de30 6c 65 2e 75 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a  le.u.autoInc.p.*
1de40 2a 20 70 6f 69 6e 74 65 72 20 6f 66 20 65 61 63  * pointer of eac
1de50 68 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20  h autoincrement 
1de60 74 61 62 6c 65 20 74 6f 20 72 65 63 6f 72 64 20  table to record 
1de70 73 6f 6d 65 20 73 69 64 65 20 69 6e 66 6f 72 6d  some side inform
1de80 61 74 69 6f 6e 20 74 68 61 74 0a 2a 2a 20 74 68  ation that.** th
1de90 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72  e code generator
1dea0 20 6e 65 65 64 73 2e 20 20 57 65 20 68 61 76 65   needs.  We have
1deb0 20 74 6f 20 6b 65 65 70 20 70 65 72 2d 74 61 62   to keep per-tab
1dec0 6c 65 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74  le autoincrement
1ded0 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  .** information 
1dee0 69 6e 20 63 61 73 65 20 69 6e 73 65 72 74 73 20  in case inserts 
1def0 61 72 65 20 64 6f 6e 65 20 77 69 74 68 69 6e 20  are done within 
1df00 74 72 69 67 67 65 72 73 2e 20 20 54 72 69 67 67  triggers.  Trigg
1df10 65 72 73 20 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f  ers do not.** no
1df20 72 6d 61 6c 6c 79 20 63 6f 6f 72 64 69 6e 61 74  rmally coordinat
1df30 65 20 74 68 65 69 72 20 61 63 74 69 76 69 74 69  e their activiti
1df40 65 73 2c 20 62 75 74 20 77 65 20 64 6f 20 6e 65  es, but we do ne
1df50 65 64 20 74 6f 20 63 6f 6f 72 64 69 6e 61 74 65  ed to coordinate
1df60 20 74 68 65 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20   the.** loading 
1df70 61 6e 64 20 73 61 76 69 6e 67 20 6f 66 20 61 75  and saving of au
1df80 74 6f 69 6e 63 72 65 6d 65 6e 74 20 69 6e 66 6f  toincrement info
1df90 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  rmation..*/.stru
1dfa0 63 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 7b  ct AutoincInfo {
1dfb0 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a  .  AutoincInfo *
1dfc0 70 4e 65 78 74 3b 20 20 20 2f 2a 20 4e 65 78 74  pNext;   /* Next
1dfd0 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 69 6e 20 61   info block in a
1dfe0 20 6c 69 73 74 20 6f 66 20 74 68 65 6d 20 61 6c   list of them al
1dff0 6c 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54  l */.  Table *pT
1e000 61 62 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ab;          /* 
1e010 54 61 62 6c 65 20 74 68 69 73 20 69 6e 66 6f 20  Table this info 
1e020 62 6c 6f 63 6b 20 72 65 66 65 72 73 20 74 6f 20  block refers to 
1e030 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20  */.  int iDb;   
1e040 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
1e050 64 65 78 20 69 6e 20 73 71 6c 69 74 65 33 2e 61  dex in sqlite3.a
1e060 44 62 5b 5d 20 6f 66 20 64 61 74 61 62 61 73 65  Db[] of database
1e070 20 68 6f 6c 64 69 6e 67 20 70 54 61 62 20 2a 2f   holding pTab */
1e080 0a 20 20 69 6e 74 20 72 65 67 43 74 72 3b 20 20  .  int regCtr;  
1e090 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f           /* Memo
1e0a0 72 79 20 72 65 67 69 73 74 65 72 20 68 6f 6c 64  ry register hold
1e0b0 69 6e 67 20 74 68 65 20 72 6f 77 69 64 20 63 6f  ing the rowid co
1e0c0 75 6e 74 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  unter */.};../*.
1e0d0 2a 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 63  ** Size of the c
1e0e0 6f 6c 75 6d 6e 20 63 61 63 68 65 0a 2a 2f 0a 23  olumn cache.*/.#
1e0f0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4e 5f  ifndef SQLITE_N_
1e100 43 4f 4c 43 41 43 48 45 0a 23 20 64 65 66 69 6e  COLCACHE.# defin
1e110 65 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41  e SQLITE_N_COLCA
1e120 43 48 45 20 31 30 0a 23 65 6e 64 69 66 0a 0a 2f  CHE 10.#endif../
1e130 2a 0a 2a 2a 20 41 74 20 6c 65 61 73 74 20 6f 6e  *.** At least on
1e140 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  e instance of th
1e150 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
1e160 63 74 75 72 65 20 69 73 20 63 72 65 61 74 65 64  cture is created
1e170 20 66 6f 72 20 65 61 63 68 0a 2a 2a 20 74 72 69   for each.** tri
1e180 67 67 65 72 20 74 68 61 74 20 6d 61 79 20 62 65  gger that may be
1e190 20 66 69 72 65 64 20 77 68 69 6c 65 20 70 61 72   fired while par
1e1a0 73 69 6e 67 20 61 6e 20 49 4e 53 45 52 54 2c 20  sing an INSERT, 
1e1b0 55 50 44 41 54 45 20 6f 72 20 44 45 4c 45 54 45  UPDATE or DELETE
1e1c0 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 2e 20 41  .** statement. A
1e1d0 6c 6c 20 73 75 63 68 20 6f 62 6a 65 63 74 73 20  ll such objects 
1e1e0 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68  are stored in th
1e1f0 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65  e linked list he
1e200 61 64 65 64 20 61 74 0a 2a 2a 20 50 61 72 73 65  aded at.** Parse
1e210 2e 70 54 72 69 67 67 65 72 50 72 67 20 61 6e 64  .pTriggerPrg and
1e220 20 64 65 6c 65 74 65 64 20 6f 6e 63 65 20 73 74   deleted once st
1e230 61 74 65 6d 65 6e 74 20 63 6f 6d 70 69 6c 61 74  atement compilat
1e240 69 6f 6e 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20  ion has been.** 
1e250 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a  completed..**.**
1e260 20 41 20 56 64 62 65 20 73 75 62 2d 70 72 6f 67   A Vdbe sub-prog
1e270 72 61 6d 20 74 68 61 74 20 69 6d 70 6c 65 6d 65  ram that impleme
1e280 6e 74 73 20 74 68 65 20 62 6f 64 79 20 61 6e 64  nts the body and
1e290 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20   WHEN clause of 
1e2a0 74 72 69 67 67 65 72 0a 2a 2a 20 54 72 69 67 67  trigger.** Trigg
1e2b0 65 72 50 72 67 2e 70 54 72 69 67 67 65 72 2c 20  erPrg.pTrigger, 
1e2c0 61 73 73 75 6d 69 6e 67 20 61 20 64 65 66 61 75  assuming a defau
1e2d0 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63  lt ON CONFLICT c
1e2e0 6c 61 75 73 65 20 6f 66 0a 2a 2a 20 54 72 69 67  lause of.** Trig
1e2f0 67 65 72 50 72 67 2e 6f 72 63 6f 6e 66 2c 20 69  gerPrg.orconf, i
1e300 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  s stored in the 
1e310 54 72 69 67 67 65 72 50 72 67 2e 70 50 72 6f 67  TriggerPrg.pProg
1e320 72 61 6d 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a  ram variable..**
1e330 20 54 68 65 20 50 61 72 73 65 2e 70 54 72 69 67   The Parse.pTrig
1e340 67 65 72 50 72 67 20 6c 69 73 74 20 6e 65 76 65  gerPrg list neve
1e350 72 20 63 6f 6e 74 61 69 6e 73 20 74 77 6f 20 65  r contains two e
1e360 6e 74 72 69 65 73 20 77 69 74 68 20 74 68 65 20  ntries with the 
1e370 73 61 6d 65 0a 2a 2a 20 76 61 6c 75 65 73 20 66  same.** values f
1e380 6f 72 20 62 6f 74 68 20 70 54 72 69 67 67 65 72  or both pTrigger
1e390 20 61 6e 64 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a   and orconf..**.
1e3a0 2a 2a 20 54 68 65 20 54 72 69 67 67 65 72 50 72  ** The TriggerPr
1e3b0 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61  g.aColmask[0] va
1e3c0 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f  riable is set to
1e3d0 20 61 20 6d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a   a mask of old.*
1e3e0 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 61 63 63 65   columns.** acce
1e3f0 73 73 65 64 20 28 6f 72 20 73 65 74 20 74 6f 20  ssed (or set to 
1e400 30 20 66 6f 72 20 74 72 69 67 67 65 72 73 20 66  0 for triggers f
1e410 69 72 65 64 20 61 73 20 61 20 72 65 73 75 6c 74  ired as a result
1e420 20 6f 66 20 49 4e 53 45 52 54 0a 2a 2a 20 73 74   of INSERT.** st
1e430 61 74 65 6d 65 6e 74 73 29 2e 20 53 69 6d 69 6c  atements). Simil
1e440 61 72 6c 79 2c 20 74 68 65 20 54 72 69 67 67 65  arly, the Trigge
1e450 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d  rPrg.aColmask[1]
1e460 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74   variable is set
1e470 20 74 6f 0a 2a 2a 20 61 20 6d 61 73 6b 20 6f 66   to.** a mask of
1e480 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75   new.* columns u
1e490 73 65 64 20 62 79 20 74 68 65 20 70 72 6f 67 72  sed by the progr
1e4a0 61 6d 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72  am..*/.struct Tr
1e4b0 69 67 67 65 72 50 72 67 20 7b 0a 20 20 54 72 69  iggerPrg {.  Tri
1e4c0 67 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20  gger *pTrigger; 
1e4d0 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20       /* Trigger 
1e4e0 74 68 69 73 20 70 72 6f 67 72 61 6d 20 77 61 73  this program was
1e4f0 20 63 6f 64 65 64 20 66 72 6f 6d 20 2a 2f 0a 20   coded from */. 
1e500 20 54 72 69 67 67 65 72 50 72 67 20 2a 70 4e 65   TriggerPrg *pNe
1e510 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74  xt;      /* Next
1e520 20 65 6e 74 72 79 20 69 6e 20 50 61 72 73 65 2e   entry in Parse.
1e530 70 54 72 69 67 67 65 72 50 72 67 20 6c 69 73 74  pTriggerPrg list
1e540 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d   */.  SubProgram
1e550 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a   *pProgram;   /*
1e560 20 50 72 6f 67 72 61 6d 20 69 6d 70 6c 65 6d 65   Program impleme
1e570 6e 74 69 6e 67 20 70 54 72 69 67 67 65 72 2f 6f  nting pTrigger/o
1e580 72 63 6f 6e 66 20 2a 2f 0a 20 20 69 6e 74 20 6f  rconf */.  int o
1e590 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20  rconf;          
1e5a0 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e     /* Default ON
1e5b0 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79   CONFLICT policy
1e5c0 20 2a 2f 0a 20 20 75 33 32 20 61 43 6f 6c 6d 61   */.  u32 aColma
1e5d0 73 6b 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a  sk[2];        /*
1e5e0 20 4d 61 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c   Masks of old.*,
1e5f0 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61   new.* columns a
1e600 63 63 65 73 73 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f  ccessed */.};../
1e610 2a 0a 2a 2a 20 54 68 65 20 79 44 62 4d 61 73 6b  *.** The yDbMask
1e620 20 64 61 74 61 74 79 70 65 20 66 6f 72 20 74 68   datatype for th
1e630 65 20 62 69 74 6d 61 73 6b 20 6f 66 20 61 6c 6c  e bitmask of all
1e640 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
1e650 73 65 73 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49  ses..*/.#if SQLI
1e660 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e  TE_MAX_ATTACHED>
1e670 33 30 0a 20 20 74 79 70 65 64 65 66 20 75 6e 73  30.  typedef uns
1e680 69 67 6e 65 64 20 63 68 61 72 20 79 44 62 4d 61  igned char yDbMa
1e690 73 6b 5b 28 53 51 4c 49 54 45 5f 4d 41 58 5f 41  sk[(SQLITE_MAX_A
1e6a0 54 54 41 43 48 45 44 2b 39 29 2f 38 5d 3b 0a 23  TTACHED+9)/8];.#
1e6b0 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 54 65   define DbMaskTe
1e6c0 73 74 28 4d 2c 49 29 20 20 20 20 28 28 28 4d 29  st(M,I)    (((M)
1e6d0 5b 28 49 29 2f 38 5d 26 28 31 3c 3c 28 28 49 29  [(I)/8]&(1<<((I)
1e6e0 26 37 29 29 29 21 3d 30 29 0a 23 20 64 65 66 69  &7)))!=0).# defi
1e6f0 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29  ne DbMaskZero(M)
1e700 20 20 20 20 20 20 6d 65 6d 73 65 74 28 28 4d 29        memset((M)
1e710 2c 30 2c 73 69 7a 65 6f 66 28 4d 29 29 0a 23 20  ,0,sizeof(M)).# 
1e720 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 53 65 74  define DbMaskSet
1e730 28 4d 2c 49 29 20 20 20 20 20 28 4d 29 5b 28 49  (M,I)     (M)[(I
1e740 29 2f 38 5d 7c 3d 28 31 3c 3c 28 28 49 29 26 37  )/8]|=(1<<((I)&7
1e750 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  )).# define DbMa
1e760 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 73  skAllZero(M)   s
1e770 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a  qlite3DbMaskAllZ
1e780 65 72 6f 28 4d 29 0a 23 20 64 65 66 69 6e 65 20  ero(M).# define 
1e790 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29  DbMaskNonZero(M)
1e7a0 20 20 20 28 73 71 6c 69 74 65 33 44 62 4d 61 73     (sqlite3DbMas
1e7b0 6b 41 6c 6c 5a 65 72 6f 28 4d 29 3d 3d 30 29 0a  kAllZero(M)==0).
1e7c0 23 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20  #else.  typedef 
1e7d0 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 79 44 62  unsigned int yDb
1e7e0 4d 61 73 6b 3b 0a 23 20 64 65 66 69 6e 65 20 44  Mask;.# define D
1e7f0 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29 20 20  bMaskTest(M,I)  
1e800 20 20 28 28 28 4d 29 26 28 28 28 79 44 62 4d 61    (((M)&(((yDbMa
1e810 73 6b 29 31 29 3c 3c 28 49 29 29 29 21 3d 30 29  sk)1)<<(I)))!=0)
1e820 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1e830 5a 65 72 6f 28 4d 29 20 20 20 20 20 20 28 4d 29  Zero(M)      (M)
1e840 3d 30 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  =0.# define DbMa
1e850 73 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28  skSet(M,I)     (
1e860 4d 29 7c 3d 28 28 28 79 44 62 4d 61 73 6b 29 31  M)|=(((yDbMask)1
1e870 29 3c 3c 28 49 29 29 0a 23 20 64 65 66 69 6e 65  )<<(I)).# define
1e880 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d   DbMaskAllZero(M
1e890 29 20 20 20 28 4d 29 3d 3d 30 0a 23 20 64 65 66  )   (M)==0.# def
1e8a0 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72  ine DbMaskNonZer
1e8b0 6f 28 4d 29 20 20 20 28 4d 29 21 3d 30 0a 23 65  o(M)   (M)!=0.#e
1e8c0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 53  ndif../*.** An S
1e8d0 51 4c 20 70 61 72 73 65 72 20 63 6f 6e 74 65 78  QL parser contex
1e8e0 74 2e 20 20 41 20 63 6f 70 79 20 6f 66 20 74 68  t.  A copy of th
1e8f0 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20  is structure is 
1e900 70 61 73 73 65 64 20 74 68 72 6f 75 67 68 0a 2a  passed through.*
1e910 2a 20 74 68 65 20 70 61 72 73 65 72 20 61 6e 64  * the parser and
1e920 20 64 6f 77 6e 20 69 6e 74 6f 20 61 6c 6c 20 74   down into all t
1e930 68 65 20 70 61 72 73 65 72 20 61 63 74 69 6f 6e  he parser action
1e940 20 72 6f 75 74 69 6e 65 20 69 6e 20 6f 72 64 65   routine in orde
1e950 72 20 74 6f 0a 2a 2a 20 63 61 72 72 79 20 61 72  r to.** carry ar
1e960 6f 75 6e 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ound information
1e970 20 74 68 61 74 20 69 73 20 67 6c 6f 62 61 6c 20   that is global 
1e980 74 6f 20 74 68 65 20 65 6e 74 69 72 65 20 70 61  to the entire pa
1e990 72 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73  rse..**.** The s
1e9a0 74 72 75 63 74 75 72 65 20 69 73 20 64 69 76 69  tructure is divi
1e9b0 64 65 64 20 69 6e 74 6f 20 74 77 6f 20 70 61 72  ded into two par
1e9c0 74 73 2e 20 20 57 68 65 6e 20 74 68 65 20 70 61  ts.  When the pa
1e9d0 72 73 65 72 20 61 6e 64 20 63 6f 64 65 0a 2a 2a  rser and code.**
1e9e0 20 67 65 6e 65 72 61 74 65 20 63 61 6c 6c 20 74   generate call t
1e9f0 68 65 6d 73 65 6c 76 65 73 20 72 65 63 75 72 73  hemselves recurs
1ea00 69 76 65 6c 79 2c 20 74 68 65 20 66 69 72 73 74  ively, the first
1ea10 20 70 61 72 74 20 6f 66 20 74 68 65 20 73 74 72   part of the str
1ea20 75 63 74 75 72 65 0a 2a 2a 20 69 73 20 63 6f 6e  ucture.** is con
1ea30 73 74 61 6e 74 20 62 75 74 20 74 68 65 20 73 65  stant but the se
1ea40 63 6f 6e 64 20 70 61 72 74 20 69 73 20 72 65 73  cond part is res
1ea50 65 74 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e  et at the beginn
1ea60 69 6e 67 20 61 6e 64 20 65 6e 64 20 6f 66 0a 2a  ing and end of.*
1ea70 2a 20 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e  * each recursion
1ea80 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 54 61 62  ..**.** The nTab
1ea90 6c 65 4c 6f 63 6b 20 61 6e 64 20 61 54 61 62 6c  leLock and aTabl
1eaa0 65 4c 6f 63 6b 20 76 61 72 69 61 62 6c 65 73 20  eLock variables 
1eab0 61 72 65 20 6f 6e 6c 79 20 75 73 65 64 20 69 66  are only used if
1eac0 20 74 68 65 20 73 68 61 72 65 64 2d 63 61 63 68   the shared-cach
1ead0 65 0a 2a 2a 20 66 65 61 74 75 72 65 20 69 73 20  e.** feature is 
1eae0 65 6e 61 62 6c 65 64 20 28 69 66 20 73 71 6c 69  enabled (if sqli
1eaf0 74 65 33 54 73 64 28 29 2d 3e 75 73 65 53 68 61  te3Tsd()->useSha
1eb00 72 65 64 44 61 74 61 20 69 73 20 74 72 75 65 29  redData is true)
1eb10 2e 20 54 68 65 79 20 61 72 65 0a 2a 2a 20 75 73  . They are.** us
1eb20 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ed to store the 
1eb30 73 65 74 20 6f 66 20 74 61 62 6c 65 2d 6c 6f 63  set of table-loc
1eb40 6b 73 20 72 65 71 75 69 72 65 64 20 62 79 20 74  ks required by t
1eb50 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69  he statement bei
1eb60 6e 67 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 2e 20  ng.** compiled. 
1eb70 46 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33  Function sqlite3
1eb80 54 61 62 6c 65 4c 6f 63 6b 28 29 20 69 73 20 75  TableLock() is u
1eb90 73 65 64 20 74 6f 20 61 64 64 20 65 6e 74 72 69  sed to add entri
1eba0 65 73 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 69 73  es to the.** lis
1ebb0 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50 61 72  t..*/.struct Par
1ebc0 73 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  se {.  sqlite3 *
1ebd0 64 62 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  db;         /* T
1ebe0 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
1ebf0 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20   structure */.  
1ec00 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 3b 20 20  char *zErrMsg;  
1ec10 20 20 20 20 20 2f 2a 20 41 6e 20 65 72 72 6f 72       /* An error
1ec20 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 56 64   message */.  Vd
1ec30 62 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20  be *pVdbe;      
1ec40 20 20 20 2f 2a 20 41 6e 20 65 6e 67 69 6e 65 20     /* An engine 
1ec50 66 6f 72 20 65 78 65 63 75 74 69 6e 67 20 64 61  for executing da
1ec60 74 61 62 61 73 65 20 62 79 74 65 63 6f 64 65 20  tabase bytecode 
1ec70 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20  */.  int rc;    
1ec80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 74            /* Ret
1ec90 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 65 78  urn code from ex
1eca0 65 63 75 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20  ecution */.  u8 
1ecb0 63 6f 6c 4e 61 6d 65 73 53 65 74 3b 20 20 20 20  colNamesSet;    
1ecc0 20 20 2f 2a 20 54 52 55 45 20 61 66 74 65 72 20    /* TRUE after 
1ecd0 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61  OP_ColumnName ha
1ece0 73 20 62 65 65 6e 20 69 73 73 75 65 64 20 74 6f  s been issued to
1ecf0 20 70 56 64 62 65 20 2a 2f 0a 20 20 75 38 20 63   pVdbe */.  u8 c
1ed00 68 65 63 6b 53 63 68 65 6d 61 3b 20 20 20 20 20  heckSchema;     
1ed10 20 2f 2a 20 43 61 75 73 65 73 20 73 63 68 65 6d   /* Causes schem
1ed20 61 20 63 6f 6f 6b 69 65 20 63 68 65 63 6b 20 61  a cookie check a
1ed30 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20 2a 2f  fter an error */
1ed40 0a 20 20 75 38 20 6e 65 73 74 65 64 3b 20 20 20  .  u8 nested;   
1ed50 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1ed60 72 20 6f 66 20 6e 65 73 74 65 64 20 63 61 6c 6c  r of nested call
1ed70 73 20 74 6f 20 74 68 65 20 70 61 72 73 65 72 2f  s to the parser/
1ed80 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 2a  code generator *
1ed90 2f 0a 20 20 75 38 20 6e 54 65 6d 70 52 65 67 3b  /.  u8 nTempReg;
1eda0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1edb0 65 72 20 6f 66 20 74 65 6d 70 6f 72 61 72 79 20  er of temporary 
1edc0 72 65 67 69 73 74 65 72 73 20 69 6e 20 61 54 65  registers in aTe
1edd0 6d 70 52 65 67 5b 5d 20 2a 2f 0a 20 20 75 38 20  mpReg[] */.  u8 
1ede0 69 73 4d 75 6c 74 69 57 72 69 74 65 3b 20 20 20  isMultiWrite;   
1edf0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61    /* True if sta
1ee00 74 65 6d 65 6e 74 20 6d 61 79 20 6d 6f 64 69 66  tement may modif
1ee10 79 2f 69 6e 73 65 72 74 20 6d 75 6c 74 69 70 6c  y/insert multipl
1ee20 65 20 72 6f 77 73 20 2a 2f 0a 20 20 75 38 20 6d  e rows */.  u8 m
1ee30 61 79 41 62 6f 72 74 3b 20 20 20 20 20 20 20 20  ayAbort;        
1ee40 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61 74   /* True if stat
1ee50 65 6d 65 6e 74 20 6d 61 79 20 74 68 72 6f 77 20  ement may throw 
1ee60 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70 74 69  an ABORT excepti
1ee70 6f 6e 20 2a 2f 0a 20 20 75 38 20 68 61 73 43 6f  on */.  u8 hasCo
1ee80 6d 70 6f 75 6e 64 3b 20 20 20 20 20 20 2f 2a 20  mpound;      /* 
1ee90 4e 65 65 64 20 74 6f 20 69 6e 76 6f 6b 65 20 63  Need to invoke c
1eea0 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65  onvertCompoundSe
1eeb0 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79 28 29  lectToSubquery()
1eec0 20 2a 2f 0a 20 20 75 38 20 6f 6b 43 6f 6e 73 74   */.  u8 okConst
1eed0 46 61 63 74 6f 72 3b 20 20 20 20 2f 2a 20 4f 4b  Factor;    /* OK
1eee0 20 74 6f 20 66 61 63 74 6f 72 20 6f 75 74 20 63   to factor out c
1eef0 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a 20 20 75 38  onstants */.  u8
1ef00 20 64 69 73 61 62 6c 65 4c 6f 6f 6b 61 73 69 64   disableLookasid
1ef10 65 3b 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20  e; /* Number of 
1ef20 74 69 6d 65 73 20 6c 6f 6f 6b 61 73 69 64 65 20  times lookaside 
1ef30 68 61 73 20 62 65 65 6e 20 64 69 73 61 62 6c 65  has been disable
1ef40 64 20 2a 2f 0a 20 20 75 38 20 6e 43 6f 6c 43 61  d */.  u8 nColCa
1ef50 63 68 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  che;        /* N
1ef60 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
1ef70 20 69 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d 20   in aColCache[] 
1ef80 2a 2f 0a 20 20 69 6e 74 20 6e 52 61 6e 67 65 52  */.  int nRangeR
1ef90 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 53 69 7a  eg;       /* Siz
1efa0 65 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61  e of the tempora
1efb0 72 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63  ry register bloc
1efc0 6b 20 2a 2f 0a 20 20 69 6e 74 20 69 52 61 6e 67  k */.  int iRang
1efd0 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 46  eReg;       /* F
1efe0 69 72 73 74 20 72 65 67 69 73 74 65 72 20 69 6e  irst register in
1eff0 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73   temporary regis
1f000 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69  ter block */.  i
1f010 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20  nt nErr;        
1f020 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1f030 20 65 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a   errors seen */.
1f040 20 20 69 6e 74 20 6e 54 61 62 3b 20 20 20 20 20    int nTab;     
1f050 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1f060 20 6f 66 20 70 72 65 76 69 6f 75 73 6c 79 20 61   of previously a
1f070 6c 6c 6f 63 61 74 65 64 20 56 44 42 45 20 63 75  llocated VDBE cu
1f080 72 73 6f 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  rsors */.  int n
1f090 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
1f0a0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d  /* Number of mem
1f0b0 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20 73  ory cells used s
1f0c0 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  o far */.  int n
1f0d0 4f 70 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20  OpAlloc;        
1f0e0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 6c 6f  /* Number of slo
1f0f0 74 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72  ts allocated for
1f100 20 56 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20   Vdbe.aOp[] */. 
1f110 20 69 6e 74 20 73 7a 4f 70 41 6c 6c 6f 63 3b 20   int szOpAlloc; 
1f120 20 20 20 20 20 20 2f 2a 20 42 79 74 65 73 20 6f        /* Bytes o
1f130 66 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 61  f memory space a
1f140 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 56 64 62  llocated for Vdb
1f150 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74  e.aOp[] */.  int
1f160 20 63 6b 42 61 73 65 3b 20 20 20 20 20 20 20 20   ckBase;        
1f170 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69 73 74    /* Base regist
1f180 65 72 20 6f 66 20 64 61 74 61 20 64 75 72 69 6e  er of data durin
1f190 67 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69  g check constrai
1f1a0 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65  nts */.  int iSe
1f1b0 6c 66 54 61 62 3b 20 20 20 20 20 20 20 20 2f 2a  lfTab;        /*
1f1c0 20 54 61 62 6c 65 20 6f 66 20 61 6e 20 69 6e 64   Table of an ind
1f1d0 65 78 20 77 68 6f 73 65 20 65 78 70 72 73 20 61  ex whose exprs a
1f1e0 72 65 20 62 65 69 6e 67 20 63 6f 64 65 64 20 2a  re being coded *
1f1f0 2f 0a 20 20 69 6e 74 20 69 43 61 63 68 65 4c 65  /.  int iCacheLe
1f200 76 65 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 43  vel;     /* ColC
1f210 61 63 68 65 20 76 61 6c 69 64 20 77 68 65 6e 20  ache valid when 
1f220 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 69 4c 65 76  aColCache[].iLev
1f230 65 6c 3c 3d 69 43 61 63 68 65 4c 65 76 65 6c 20  el<=iCacheLevel 
1f240 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68 65 43  */.  int iCacheC
1f250 6e 74 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 75  nt;       /* Cou
1f260 6e 74 65 72 20 75 73 65 64 20 74 6f 20 67 65 6e  nter used to gen
1f270 65 72 61 74 65 20 61 43 6f 6c 43 61 63 68 65 5b  erate aColCache[
1f280 5d 2e 6c 72 75 20 76 61 6c 75 65 73 20 2a 2f 0a  ].lru values */.
1f290 20 20 69 6e 74 20 6e 4c 61 62 65 6c 3b 20 20 20    int nLabel;   
1f2a0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1f2b0 20 6f 66 20 6c 61 62 65 6c 73 20 75 73 65 64 20   of labels used 
1f2c0 2a 2f 0a 20 20 69 6e 74 20 2a 61 4c 61 62 65 6c  */.  int *aLabel
1f2d0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61  ;         /* Spa
1f2e0 63 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 6c  ce to hold the l
1f2f0 61 62 65 6c 73 20 2a 2f 0a 20 20 45 78 70 72 4c  abels */.  ExprL
1f300 69 73 74 20 2a 70 43 6f 6e 73 74 45 78 70 72 3b  ist *pConstExpr;
1f310 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72  /* Constant expr
1f320 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 54 6f 6b  essions */.  Tok
1f330 65 6e 20 63 6f 6e 73 74 72 61 69 6e 74 4e 61 6d  en constraintNam
1f340 65 3b 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65  e;/* Name of the
1f350 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 75 72 72   constraint curr
1f360 65 6e 74 6c 79 20 62 65 69 6e 67 20 70 61 72 73  ently being pars
1f370 65 64 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20  ed */.  yDbMask 
1f380 77 72 69 74 65 4d 61 73 6b 3b 20 20 20 2f 2a 20  writeMask;   /* 
1f390 53 74 61 72 74 20 61 20 77 72 69 74 65 20 74 72  Start a write tr
1f3a0 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65  ansaction on the
1f3b0 73 65 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a  se databases */.
1f3c0 20 20 79 44 62 4d 61 73 6b 20 63 6f 6f 6b 69 65    yDbMask cookie
1f3d0 4d 61 73 6b 3b 20 20 2f 2a 20 42 69 74 6d 61 73  Mask;  /* Bitmas
1f3e0 6b 20 6f 66 20 73 63 68 65 6d 61 20 76 65 72 69  k of schema veri
1f3f0 66 69 65 64 20 64 61 74 61 62 61 73 65 73 20 2a  fied databases *
1f400 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 77 69 64  /.  int regRowid
1f410 3b 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69  ;        /* Regi
1f420 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77  ster holding row
1f430 69 64 20 6f 66 20 43 52 45 41 54 45 20 54 41 42  id of CREATE TAB
1f440 4c 45 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e  LE entry */.  in
1f450 74 20 72 65 67 52 6f 6f 74 3b 20 20 20 20 20 20  t regRoot;      
1f460 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68     /* Register h
1f470 6f 6c 64 69 6e 67 20 72 6f 6f 74 20 70 61 67 65  olding root page
1f480 20 6e 75 6d 62 65 72 20 66 6f 72 20 6e 65 77 20   number for new 
1f490 6f 62 6a 65 63 74 73 20 2a 2f 0a 20 20 69 6e 74  objects */.  int
1f4a0 20 6e 4d 61 78 41 72 67 3b 20 20 20 20 20 20 20   nMaxArg;       
1f4b0 20 20 2f 2a 20 4d 61 78 20 61 72 67 73 20 70 61    /* Max args pa
1f4c0 73 73 65 64 20 74 6f 20 75 73 65 72 20 66 75 6e  ssed to user fun
1f4d0 63 74 69 6f 6e 20 62 79 20 73 75 62 2d 70 72 6f  ction by sub-pro
1f4e0 67 72 61 6d 20 2a 2f 0a 23 69 66 20 53 45 4c 45  gram */.#if SELE
1f4f0 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a  CTTRACE_ENABLED.
1f500 20 20 69 6e 74 20 6e 53 65 6c 65 63 74 3b 20 20    int nSelect;  
1f510 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1f520 20 6f 66 20 53 45 4c 45 43 54 20 73 74 61 74 65   of SELECT state
1f530 6d 65 6e 74 73 20 73 65 65 6e 20 2a 2f 0a 20 20  ments seen */.  
1f540 69 6e 74 20 6e 53 65 6c 65 63 74 49 6e 64 65 6e  int nSelectInden
1f550 74 3b 20 20 20 2f 2a 20 48 6f 77 20 66 61 72 20  t;   /* How far 
1f560 74 6f 20 69 6e 64 65 6e 74 20 53 45 4c 45 43 54  to indent SELECT
1f570 54 52 41 43 45 28 29 20 6f 75 74 70 75 74 20 2a  TRACE() output *
1f580 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
1f590 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41   SQLITE_OMIT_SHA
1f5a0 52 45 44 5f 43 41 43 48 45 0a 20 20 69 6e 74 20  RED_CACHE.  int 
1f5b0 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20 20 20 20 20  nTableLock;     
1f5c0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1f5d0 6c 6f 63 6b 73 20 69 6e 20 61 54 61 62 6c 65 4c  locks in aTableL
1f5e0 6f 63 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f  ock */.  TableLo
1f5f0 63 6b 20 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b 20  ck *aTableLock; 
1f600 2f 2a 20 52 65 71 75 69 72 65 64 20 74 61 62 6c  /* Required tabl
1f610 65 20 6c 6f 63 6b 73 20 66 6f 72 20 73 68 61 72  e locks for shar
1f620 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f  ed-cache mode */
1f630 0a 23 65 6e 64 69 66 0a 20 20 41 75 74 6f 69 6e  .#endif.  Autoin
1f640 63 49 6e 66 6f 20 2a 70 41 69 6e 63 3b 20 20 2f  cInfo *pAinc;  /
1f650 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * Information ab
1f660 6f 75 74 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  out AUTOINCREMEN
1f670 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20  T counters */.  
1f680 50 61 72 73 65 20 2a 70 54 6f 70 6c 65 76 65 6c  Parse *pToplevel
1f690 3b 20 20 20 20 2f 2a 20 50 61 72 73 65 20 73 74  ;    /* Parse st
1f6a0 72 75 63 74 75 72 65 20 66 6f 72 20 6d 61 69 6e  ructure for main
1f6b0 20 70 72 6f 67 72 61 6d 20 28 6f 72 20 4e 55 4c   program (or NUL
1f6c0 4c 29 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  L) */.  Table *p
1f6d0 54 72 69 67 67 65 72 54 61 62 3b 20 20 2f 2a 20  TriggerTab;  /* 
1f6e0 54 61 62 6c 65 20 74 72 69 67 67 65 72 73 20 61  Table triggers a
1f6f0 72 65 20 62 65 69 6e 67 20 63 6f 64 65 64 20 66  re being coded f
1f700 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72  or */.  int addr
1f710 43 72 54 61 62 3b 20 20 20 20 20 20 20 2f 2a 20  CrTab;       /* 
1f720 41 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 43 72  Address of OP_Cr
1f730 65 61 74 65 54 61 62 6c 65 20 6f 70 63 6f 64 65  eateTable opcode
1f740 20 6f 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45   on CREATE TABLE
1f750 20 2a 2f 0a 20 20 75 33 32 20 6e 51 75 65 72 79   */.  u32 nQuery
1f760 4c 6f 6f 70 3b 20 20 20 20 20 20 2f 2a 20 45 73  Loop;      /* Es
1f770 74 20 6e 75 6d 62 65 72 20 6f 66 20 69 74 65 72  t number of iter
1f780 61 74 69 6f 6e 73 20 6f 66 20 61 20 71 75 65 72  ations of a quer
1f790 79 20 28 31 30 2a 6c 6f 67 32 28 4e 29 29 20 2a  y (10*log2(N)) *
1f7a0 2f 0a 20 20 75 33 32 20 6f 6c 64 6d 61 73 6b 3b  /.  u32 oldmask;
1f7b0 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b           /* Mask
1f7c0 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e   of old.* column
1f7d0 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a  s referenced */.
1f7e0 20 20 75 33 32 20 6e 65 77 6d 61 73 6b 3b 20 20    u32 newmask;  
1f7f0 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f         /* Mask o
1f800 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20  f new.* columns 
1f810 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20  referenced */.  
1f820 75 38 20 65 54 72 69 67 67 65 72 4f 70 3b 20 20  u8 eTriggerOp;  
1f830 20 20 20 20 20 2f 2a 20 54 4b 5f 55 50 44 41 54       /* TK_UPDAT
1f840 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 6f 72 20  E, TK_INSERT or 
1f850 54 4b 5f 44 45 4c 45 54 45 20 2a 2f 0a 20 20 75  TK_DELETE */.  u
1f860 38 20 65 4f 72 63 6f 6e 66 3b 20 20 20 20 20 20  8 eOrconf;      
1f870 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f      /* Default O
1f880 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63  N CONFLICT polic
1f890 79 20 66 6f 72 20 74 72 69 67 67 65 72 20 73 74  y for trigger st
1f8a0 65 70 73 20 2a 2f 0a 20 20 75 38 20 64 69 73 61  eps */.  u8 disa
1f8b0 62 6c 65 54 72 69 67 67 65 72 73 3b 20 20 2f 2a  bleTriggers;  /*
1f8c0 20 54 72 75 65 20 74 6f 20 64 69 73 61 62 6c 65   True to disable
1f8d0 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 0a 20 20   triggers */..  
1f8e0 2f 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 2a 2a 2a 2a  ****************
1f920 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a  ***********.  **
1f930 20 46 69 65 6c 64 73 20 61 62 6f 76 65 20 6d 75   Fields above mu
1f940 73 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65  st be initialize
1f950 64 20 74 6f 20 7a 65 72 6f 2e 20 20 54 68 65 20  d to zero.  The 
1f960 66 69 65 6c 64 73 20 74 68 61 74 20 66 6f 6c 6c  fields that foll
1f970 6f 77 2c 0a 20 20 2a 2a 20 64 6f 77 6e 20 74 6f  ow,.  ** down to
1f980 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f   the beginning o
1f990 66 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20  f the recursive 
1f9a0 73 65 63 74 69 6f 6e 2c 20 64 6f 20 6e 6f 74 20  section, do not 
1f9b0 6e 65 65 64 20 74 6f 20 62 65 0a 20 20 2a 2a 20  need to be.  ** 
1f9c0 69 6e 69 74 69 61 6c 69 7a 65 64 20 61 73 20 74  initialized as t
1f9d0 68 65 79 20 77 69 6c 6c 20 62 65 20 73 65 74 20  hey will be set 
1f9e0 62 65 66 6f 72 65 20 62 65 69 6e 67 20 75 73 65  before being use
1f9f0 64 2e 20 20 54 68 65 20 62 6f 75 6e 64 61 72 79  d.  The boundary
1fa00 20 69 73 0a 20 20 2a 2a 20 64 65 74 65 72 6d 69   is.  ** determi
1fa10 6e 65 64 20 62 79 20 6f 66 66 73 65 74 6f 66 28  ned by offsetof(
1fa20 50 61 72 73 65 2c 61 43 6f 6c 43 61 63 68 65 29  Parse,aColCache)
1fa30 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..  ************
1fa40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fa50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fa60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fa70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
1fa80 0a 20 20 73 74 72 75 63 74 20 79 43 6f 6c 43 61  .  struct yColCa
1fa90 63 68 65 20 7b 0a 20 20 20 20 69 6e 74 20 69 54  che {.    int iT
1faa0 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
1fab0 2f 2a 20 54 61 62 6c 65 20 63 75 72 73 6f 72 20  /* Table cursor 
1fac0 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 69 31  number */.    i1
1fad0 36 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  6 iColumn;      
1fae0 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6c      /* Table col
1faf0 75 6d 6e 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20  umn number */.  
1fb00 20 20 75 38 20 74 65 6d 70 52 65 67 3b 20 20 20    u8 tempReg;   
1fb10 20 20 20 20 20 20 20 20 2f 2a 20 69 52 65 67 20          /* iReg 
1fb20 69 73 20 61 20 74 65 6d 70 20 72 65 67 69 73 74  is a temp regist
1fb30 65 72 20 74 68 61 74 20 6e 65 65 64 73 20 74 6f  er that needs to
1fb40 20 62 65 20 66 72 65 65 64 20 2a 2f 0a 20 20 20   be freed */.   
1fb50 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20 20   int iLevel;    
1fb60 20 20 20 20 20 20 20 2f 2a 20 4e 65 73 74 69 6e         /* Nestin
1fb70 67 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 20 20 69  g level */.    i
1fb80 6e 74 20 69 52 65 67 3b 20 20 20 20 20 20 20 20  nt iReg;        
1fb90 20 20 20 20 20 2f 2a 20 52 65 67 20 77 69 74 68       /* Reg with
1fba0 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63   value of this c
1fbb0 6f 6c 75 6d 6e 2e 20 30 20 6d 65 61 6e 73 20 6e  olumn. 0 means n
1fbc0 6f 6e 65 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20  one. */.    int 
1fbd0 6c 72 75 3b 20 20 20 20 20 20 20 20 20 20 20 20  lru;            
1fbe0 20 20 2f 2a 20 4c 65 61 73 74 20 72 65 63 65 6e    /* Least recen
1fbf0 74 6c 79 20 75 73 65 64 20 65 6e 74 72 79 20 68  tly used entry h
1fc00 61 73 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20  as the smallest 
1fc10 76 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 61 43 6f  value */.  } aCo
1fc20 6c 43 61 63 68 65 5b 53 51 4c 49 54 45 5f 4e 5f  lCache[SQLITE_N_
1fc30 43 4f 4c 43 41 43 48 45 5d 3b 20 20 2f 2a 20 4f  COLCACHE];  /* O
1fc40 6e 65 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  ne for each colu
1fc50 6d 6e 20 63 61 63 68 65 20 65 6e 74 72 79 20 2a  mn cache entry *
1fc60 2f 0a 20 20 69 6e 74 20 61 54 65 6d 70 52 65 67  /.  int aTempReg
1fc70 5b 38 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 48  [8];        /* H
1fc80 6f 6c 64 69 6e 67 20 61 72 65 61 20 66 6f 72 20  olding area for 
1fc90 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74  temporary regist
1fca0 65 72 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73  ers */.  Token s
1fcb0 4e 61 6d 65 54 6f 6b 65 6e 3b 20 20 20 20 20 20  NameToken;      
1fcc0 20 2f 2a 20 54 6f 6b 65 6e 20 77 69 74 68 20 75   /* Token with u
1fcd0 6e 71 75 61 6c 69 66 69 65 64 20 73 63 68 65 6d  nqualified schem
1fce0 61 20 6f 62 6a 65 63 74 20 6e 61 6d 65 20 2a 2f  a object name */
1fcf0 0a 0a 20 20 2f 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 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20  *************.  
1fd40 2a 2a 20 41 62 6f 76 65 20 69 73 20 63 6f 6e 73  ** Above is cons
1fd50 74 61 6e 74 20 62 65 74 77 65 65 6e 20 72 65 63  tant between rec
1fd60 75 72 73 69 6f 6e 73 2e 20 20 42 65 6c 6f 77 20  ursions.  Below 
1fd70 69 73 20 72 65 73 65 74 20 62 65 66 6f 72 65 20  is reset before 
1fd80 61 6e 64 20 61 66 74 65 72 0a 20 20 2a 2a 20 65  and after.  ** e
1fd90 61 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 20 20  ach recursion.  
1fda0 54 68 65 20 62 6f 75 6e 64 61 72 79 20 62 65 74  The boundary bet
1fdb0 77 65 65 6e 20 74 68 65 73 65 20 74 77 6f 20 72  ween these two r
1fdc0 65 67 69 6f 6e 73 20 69 73 20 64 65 74 65 72 6d  egions is determ
1fdd0 69 6e 65 64 0a 20 20 2a 2a 20 75 73 69 6e 67 20  ined.  ** using 
1fde0 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c 73  offsetof(Parse,s
1fdf0 4c 61 73 74 54 6f 6b 65 6e 29 20 73 6f 20 74 68  LastToken) so th
1fe00 65 20 73 4c 61 73 74 54 6f 6b 65 6e 20 66 69 65  e sLastToken fie
1fe10 6c 64 20 6d 75 73 74 20 62 65 20 74 68 65 0a 20  ld must be the. 
1fe20 20 2a 2a 20 66 69 72 73 74 20 66 69 65 6c 64 20   ** first field 
1fe30 69 6e 20 74 68 65 20 72 65 63 75 72 73 69 76 65  in the recursive
1fe40 20 72 65 67 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a   region..  *****
1fe50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fe60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fe70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fe80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fe90 2a 2a 2a 2f 0a 0a 20 20 54 6f 6b 65 6e 20 73 4c  ***/..  Token sL
1fea0 61 73 74 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20  astToken;       
1feb0 2f 2a 20 54 68 65 20 6c 61 73 74 20 74 6f 6b 65  /* The last toke
1fec0 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 79 6e  n parsed */.  yn
1fed0 56 61 72 20 6e 56 61 72 3b 20 20 20 20 20 20 20  Var nVar;       
1fee0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1fef0 72 20 6f 66 20 27 3f 27 20 76 61 72 69 61 62 6c  r of '?' variabl
1ff00 65 73 20 73 65 65 6e 20 69 6e 20 74 68 65 20 53  es seen in the S
1ff10 51 4c 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75  QL so far */.  u
1ff20 38 20 69 50 6b 53 6f 72 74 4f 72 64 65 72 3b 20  8 iPkSortOrder; 
1ff30 20 20 20 20 20 20 20 20 20 2f 2a 20 41 53 43 20           /* ASC 
1ff40 6f 72 20 44 45 53 43 20 66 6f 72 20 49 4e 54 45  or DESC for INTE
1ff50 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20  GER PRIMARY KEY 
1ff60 2a 2f 0a 20 20 75 38 20 65 78 70 6c 61 69 6e 3b  */.  u8 explain;
1ff70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1ff80 2a 20 54 72 75 65 20 69 66 20 74 68 65 20 45 58  * True if the EX
1ff90 50 4c 41 49 4e 20 66 6c 61 67 20 69 73 20 66 6f  PLAIN flag is fo
1ffa0 75 6e 64 20 6f 6e 20 74 68 65 20 71 75 65 72 79  und on the query
1ffb0 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
1ffc0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
1ffd0 41 42 4c 45 0a 20 20 75 38 20 64 65 63 6c 61 72  ABLE.  u8 declar
1ffe0 65 56 74 61 62 3b 20 20 20 20 20 20 20 20 20 20  eVtab;          
1fff0 20 2f 2a 20 54 72 75 65 20 69 66 20 69 6e 73 69   /* True if insi
20000 64 65 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61  de sqlite3_decla
20010 72 65 5f 76 74 61 62 28 29 20 2a 2f 0a 20 20 69  re_vtab() */.  i
20020 6e 74 20 6e 56 74 61 62 4c 6f 63 6b 3b 20 20 20  nt nVtabLock;   
20030 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
20040 65 72 20 6f 66 20 76 69 72 74 75 61 6c 20 74 61  er of virtual ta
20050 62 6c 65 73 20 74 6f 20 6c 6f 63 6b 20 2a 2f 0a  bles to lock */.
20060 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 6e 48 65  #endif.  int nHe
20070 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 20  ight;           
20080 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e     /* Expression
20090 20 74 72 65 65 20 68 65 69 67 68 74 20 6f 66 20   tree height of 
200a0 63 75 72 72 65 6e 74 20 73 75 62 2d 73 65 6c 65  current sub-sele
200b0 63 74 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  ct */.#ifndef SQ
200c0 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49  LITE_OMIT_EXPLAI
200d0 4e 0a 20 20 69 6e 74 20 69 53 65 6c 65 63 74 49  N.  int iSelectI
200e0 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  d;            /*
200f0 20 49 44 20 6f 66 20 63 75 72 72 65 6e 74 20 73   ID of current s
20100 65 6c 65 63 74 20 66 6f 72 20 45 58 50 4c 41 49  elect for EXPLAI
20110 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 20 20 69 6e  N output */.  in
20120 74 20 69 4e 65 78 74 53 65 6c 65 63 74 49 64 3b  t iNextSelectId;
20130 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20          /* Next 
20140 61 76 61 69 6c 61 62 6c 65 20 73 65 6c 65 63 74  available select
20150 20 49 44 20 66 6f 72 20 45 58 50 4c 41 49 4e 20   ID for EXPLAIN 
20160 6f 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69 66  output */.#endif
20170 0a 20 20 56 4c 69 73 74 20 2a 70 56 4c 69 73 74  .  VList *pVList
20180 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
20190 4d 61 70 70 69 6e 67 20 62 65 74 77 65 65 6e 20  Mapping between 
201a0 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 73 20 61  variable names a
201b0 6e 64 20 6e 75 6d 62 65 72 73 20 2a 2f 0a 20 20  nd numbers */.  
201c0 56 64 62 65 20 2a 70 52 65 70 72 65 70 61 72 65  Vdbe *pReprepare
201d0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 56 4d 20  ;         /* VM 
201e0 62 65 69 6e 67 20 72 65 70 72 65 70 61 72 65 64  being reprepared
201f0 20 28 73 71 6c 69 74 65 33 52 65 70 72 65 70 61   (sqlite3Reprepa
20200 72 65 28 29 29 20 2a 2f 0a 20 20 63 6f 6e 73 74  re()) */.  const
20210 20 63 68 61 72 20 2a 7a 54 61 69 6c 3b 20 20 20   char *zTail;   
20220 20 20 20 20 20 2f 2a 20 41 6c 6c 20 53 51 4c 20       /* All SQL 
20230 74 65 78 74 20 70 61 73 74 20 74 68 65 20 6c 61  text past the la
20240 73 74 20 73 65 6d 69 63 6f 6c 6f 6e 20 70 61 72  st semicolon par
20250 73 65 64 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  sed */.  Table *
20260 70 4e 65 77 54 61 62 6c 65 3b 20 20 20 20 20 20  pNewTable;      
20270 20 20 20 2f 2a 20 41 20 74 61 62 6c 65 20 62 65     /* A table be
20280 69 6e 67 20 63 6f 6e 73 74 72 75 63 74 65 64 20  ing constructed 
20290 62 79 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  by CREATE TABLE 
202a0 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e  */.  Trigger *pN
202b0 65 77 54 72 69 67 67 65 72 3b 20 20 20 20 20 2f  ewTrigger;     /
202c0 2a 20 54 72 69 67 67 65 72 20 75 6e 64 65 72 20  * Trigger under 
202d0 63 6f 6e 73 74 72 75 63 74 20 62 79 20 61 20 43  construct by a C
202e0 52 45 41 54 45 20 54 52 49 47 47 45 52 20 2a 2f  REATE TRIGGER */
202f0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
20300 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 2f 2a 20  AuthContext; /* 
20310 54 68 65 20 36 74 68 20 70 61 72 61 6d 65 74 65  The 6th paramete
20320 72 20 74 6f 20 64 62 2d 3e 78 41 75 74 68 20 63  r to db->xAuth c
20330 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a 23 69 66 6e  allbacks */.#ifn
20340 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
20350 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 54  VIRTUALTABLE.  T
20360 6f 6b 65 6e 20 73 41 72 67 3b 20 20 20 20 20 20  oken sArg;      
20370 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70           /* Comp
20380 6c 65 74 65 20 74 65 78 74 20 6f 66 20 61 20 6d  lete text of a m
20390 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e 74 20 2a  odule argument *
203a0 2f 0a 20 20 54 61 62 6c 65 20 2a 2a 61 70 56 74  /.  Table **apVt
203b0 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 2f 2a  abLock;       /*
203c0 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 69 72 74   Pointer to virt
203d0 75 61 6c 20 74 61 62 6c 65 73 20 6e 65 65 64 69  ual tables needi
203e0 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a 2f 0a 23 65  ng locking */.#e
203f0 6e 64 69 66 0a 20 20 54 61 62 6c 65 20 2a 70 5a  ndif.  Table *pZ
20400 6f 6d 62 69 65 54 61 62 3b 20 20 20 20 20 20 20  ombieTab;       
20410 20 2f 2a 20 4c 69 73 74 20 6f 66 20 54 61 62 6c   /* List of Tabl
20420 65 20 6f 62 6a 65 63 74 73 20 74 6f 20 64 65 6c  e objects to del
20430 65 74 65 20 61 66 74 65 72 20 63 6f 64 65 20 67  ete after code g
20440 65 6e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50  en */.  TriggerP
20450 72 67 20 2a 70 54 72 69 67 67 65 72 50 72 67 3b  rg *pTriggerPrg;
20460 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74    /* Linked list
20470 20 6f 66 20 63 6f 64 65 64 20 74 72 69 67 67 65   of coded trigge
20480 72 73 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57  rs */.  With *pW
20490 69 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 20  ith;            
204a0 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 57 49 54    /* Current WIT
204b0 48 20 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c  H clause, or NUL
204c0 4c 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69  L */.  With *pWi
204d0 74 68 54 6f 46 72 65 65 3b 20 20 20 20 20 20 20  thToFree;       
204e0 20 2f 2a 20 46 72 65 65 20 74 68 69 73 20 57 49   /* Free this WI
204f0 54 48 20 6f 62 6a 65 63 74 20 61 74 20 74 68 65  TH object at the
20500 20 65 6e 64 20 6f 66 20 74 68 65 20 70 61 72 73   end of the pars
20510 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53  e */.};../*.** S
20520 69 7a 65 73 20 61 6e 64 20 70 6f 69 6e 74 65 72  izes and pointer
20530 73 20 6f 66 20 76 61 72 69 6f 75 73 20 70 61 72  s of various par
20540 74 73 20 6f 66 20 74 68 65 20 50 61 72 73 65 20  ts of the Parse 
20550 6f 62 6a 65 63 74 2e 0a 2a 2f 0a 23 64 65 66 69  object..*/.#defi
20560 6e 65 20 50 41 52 53 45 5f 48 44 52 5f 53 5a 20  ne PARSE_HDR_SZ 
20570 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c 61  offsetof(Parse,a
20580 43 6f 6c 43 61 63 68 65 29 20 2f 2a 20 52 65 63  ColCache) /* Rec
20590 75 72 73 69 76 65 20 70 61 72 74 20 77 2f 6f 20  ursive part w/o 
205a0 61 43 6f 6c 43 61 63 68 65 2a 2f 0a 23 64 65 66  aColCache*/.#def
205b0 69 6e 65 20 50 41 52 53 45 5f 52 45 43 55 52 53  ine PARSE_RECURS
205c0 45 5f 53 5a 20 6f 66 66 73 65 74 6f 66 28 50 61  E_SZ offsetof(Pa
205d0 72 73 65 2c 73 4c 61 73 74 54 6f 6b 65 6e 29 20  rse,sLastToken) 
205e0 20 20 20 2f 2a 20 52 65 63 75 72 73 69 76 65 20     /* Recursive 
205f0 70 61 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  part */.#define 
20600 50 41 52 53 45 5f 54 41 49 4c 5f 53 5a 20 28 73  PARSE_TAIL_SZ (s
20610 69 7a 65 6f 66 28 50 61 72 73 65 29 2d 50 41 52  izeof(Parse)-PAR
20620 53 45 5f 52 45 43 55 52 53 45 5f 53 5a 29 20 2f  SE_RECURSE_SZ) /
20630 2a 20 4e 6f 6e 2d 72 65 63 75 72 73 69 76 65 20  * Non-recursive 
20640 70 61 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  part */.#define 
20650 50 41 52 53 45 5f 54 41 49 4c 28 58 29 20 28 28  PARSE_TAIL(X) ((
20660 28 63 68 61 72 2a 29 28 58 29 29 2b 50 41 52 53  (char*)(X))+PARS
20670 45 5f 52 45 43 55 52 53 45 5f 53 5a 29 20 20 2f  E_RECURSE_SZ)  /
20680 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 74 61 69  * Pointer to tai
20690 6c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  l */../*.** Retu
206a0 72 6e 20 74 72 75 65 20 69 66 20 63 75 72 72 65  rn true if curre
206b0 6e 74 6c 79 20 69 6e 73 69 64 65 20 61 6e 20 73  ntly inside an s
206c0 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76  qlite3_declare_v
206d0 74 61 62 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23  tab() call..*/.#
206e0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
206f0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
20700 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c   #define IN_DECL
20710 41 52 45 5f 56 54 41 42 20 30 0a 23 65 6c 73 65  ARE_VTAB 0.#else
20720 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45  .  #define IN_DE
20730 43 4c 41 52 45 5f 56 54 41 42 20 28 70 50 61 72  CLARE_VTAB (pPar
20740 73 65 2d 3e 64 65 63 6c 61 72 65 56 74 61 62 29  se->declareVtab)
20750 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
20760 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
20770 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
20780 63 74 75 72 65 20 63 61 6e 20 62 65 20 64 65 63  cture can be dec
20790 6c 61 72 65 64 20 6f 6e 20 61 20 73 74 61 63 6b  lared on a stack
207a0 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20   and used.** to 
207b0 73 61 76 65 20 74 68 65 20 50 61 72 73 65 2e 7a  save the Parse.z
207c0 41 75 74 68 43 6f 6e 74 65 78 74 20 76 61 6c 75  AuthContext valu
207d0 65 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e  e so that it can
207e0 20 62 65 20 72 65 73 74 6f 72 65 64 20 6c 61 74   be restored lat
207f0 65 72 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75  er..*/.struct Au
20800 74 68 43 6f 6e 74 65 78 74 20 7b 0a 20 20 63 6f  thContext {.  co
20810 6e 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43  nst char *zAuthC
20820 6f 6e 74 65 78 74 3b 20 20 20 2f 2a 20 50 75 74  ontext;   /* Put
20830 20 73 61 76 65 64 20 50 61 72 73 65 2e 7a 41 75   saved Parse.zAu
20840 74 68 43 6f 6e 74 65 78 74 20 68 65 72 65 20 2a  thContext here *
20850 2f 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73  /.  Parse *pPars
20860 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
20870 2f 2a 20 54 68 65 20 50 61 72 73 65 20 73 74 72  /* The Parse str
20880 75 63 74 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  ucture */.};../*
20890 0a 2a 2a 20 42 69 74 66 69 65 6c 64 20 66 6c 61  .** Bitfield fla
208a0 67 73 20 66 6f 72 20 50 35 20 76 61 6c 75 65 20  gs for P5 value 
208b0 69 6e 20 76 61 72 69 6f 75 73 20 6f 70 63 6f 64  in various opcod
208c0 65 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20  es..**.** Value 
208d0 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66  constraints (enf
208e0 6f 72 63 65 64 20 76 69 61 20 61 73 73 65 72 74  orced via assert
208f0 28 29 29 3a 0a 2a 2a 20 20 20 20 4f 50 46 4c 41  ()):.**    OPFLA
20900 47 5f 4c 45 4e 47 54 48 41 52 47 20 20 20 20 3d  G_LENGTHARG    =
20910 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45  = SQLITE_FUNC_LE
20920 4e 47 54 48 0a 2a 2a 20 20 20 20 4f 50 46 4c 41  NGTH.**    OPFLA
20930 47 5f 54 59 50 45 4f 46 41 52 47 20 20 20 20 3d  G_TYPEOFARG    =
20940 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59  = SQLITE_FUNC_TY
20950 50 45 4f 46 0a 2a 2a 20 20 20 20 4f 50 46 4c 41  PEOF.**    OPFLA
20960 47 5f 42 55 4c 4b 43 53 52 20 20 20 20 20 20 3d  G_BULKCSR      =
20970 3d 20 42 54 52 45 45 5f 42 55 4c 4b 4c 4f 41 44  = BTREE_BULKLOAD
20980 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 53 45  .**    OPFLAG_SE
20990 45 4b 45 51 20 20 20 20 20 20 20 3d 3d 20 42 54  EKEQ       == BT
209a0 52 45 45 5f 53 45 45 4b 5f 45 51 0a 2a 2a 20 20  REE_SEEK_EQ.**  
209b0 20 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45    OPFLAG_FORDELE
209c0 54 45 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 46  TE    == BTREE_F
209d0 4f 52 44 45 4c 45 54 45 0a 2a 2a 20 20 20 20 4f  ORDELETE.**    O
209e0 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49  PFLAG_SAVEPOSITI
209f0 4f 4e 20 3d 3d 20 42 54 52 45 45 5f 53 41 56 45  ON == BTREE_SAVE
20a00 50 4f 53 49 54 49 4f 4e 0a 2a 2a 20 20 20 20 4f  POSITION.**    O
20a10 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 20  PFLAG_AUXDELETE 
20a20 20 20 20 3d 3d 20 42 54 52 45 45 5f 41 55 58 44     == BTREE_AUXD
20a30 45 4c 45 54 45 0a 2a 2f 0a 23 64 65 66 69 6e 65  ELETE.*/.#define
20a40 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
20a50 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a        0x01    /*
20a60 20 4f 50 5f 49 6e 73 65 72 74 3a 20 53 65 74 20   OP_Insert: Set 
20a70 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6e 43  to update db->nC
20a80 68 61 6e 67 65 20 2a 2f 0a 20 20 20 20 20 20 20  hange */.       
20a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
20ab0 20 41 6c 73 6f 20 75 73 65 64 20 69 6e 20 50 32   Also used in P2
20ac0 20 28 6e 6f 74 20 50 35 29 20 6f 66 20 4f 50 5f   (not P5) of OP_
20ad0 44 65 6c 65 74 65 20 2a 2f 0a 23 64 65 66 69 6e  Delete */.#defin
20ae0 65 20 4f 50 46 4c 41 47 5f 45 50 48 45 4d 20 20  e OPFLAG_EPHEM  
20af0 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f         0x01    /
20b00 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 45 70 68  * OP_Column: Eph
20b10 65 6d 65 72 61 6c 20 6f 75 74 70 75 74 20 69 73  emeral output is
20b20 20 6f 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f   ok */.#define O
20b30 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20  PFLAG_LASTROWID 
20b40 20 20 20 20 30 78 32 30 20 20 20 20 2f 2a 20 53      0x20    /* S
20b50 65 74 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d  et to update db-
20b60 3e 6c 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23 64  >lastRowid */.#d
20b70 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 55  efine OPFLAG_ISU
20b80 50 44 41 54 45 20 20 20 20 20 20 30 78 30 34 20  PDATE      0x04 
20b90 20 20 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49 6e     /* This OP_In
20ba0 73 65 72 74 20 69 73 20 61 6e 20 73 71 6c 20 55  sert is an sql U
20bb0 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65  PDATE */.#define
20bc0 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 20 20   OPFLAG_APPEND  
20bd0 20 20 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a        0x08    /*
20be0 20 54 68 69 73 20 69 73 20 6c 69 6b 65 6c 79 20   This is likely 
20bf0 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64 20  to be an append 
20c00 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
20c10 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20  G_USESEEKRESULT 
20c20 30 78 31 30 20 20 20 20 2f 2a 20 54 72 79 20 74  0x10    /* Try t
20c30 6f 20 61 76 6f 69 64 20 61 20 73 65 65 6b 20 69  o avoid a seek i
20c40 6e 20 42 74 72 65 65 49 6e 73 65 72 74 28 29 20  n BtreeInsert() 
20c50 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
20c60 47 5f 49 53 4e 4f 4f 50 20 20 20 20 20 20 20 20  G_ISNOOP        
20c70 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 44 65  0x40    /* OP_De
20c80 6c 65 74 65 20 64 6f 65 73 20 70 72 65 2d 75 70  lete does pre-up
20c90 64 61 74 65 2d 68 6f 6f 6b 20 6f 6e 6c 79 20 2a  date-hook only *
20ca0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
20cb0 5f 4c 45 4e 47 54 48 41 52 47 20 20 20 20 20 30  _LENGTHARG     0
20cc0 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c  x40    /* OP_Col
20cd0 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f  umn only used fo
20ce0 72 20 6c 65 6e 67 74 68 28 29 20 2a 2f 0a 23 64  r length() */.#d
20cf0 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 54 59 50  efine OPFLAG_TYP
20d00 45 4f 46 41 52 47 20 20 20 20 20 30 78 38 30 20  EOFARG     0x80 
20d10 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20     /* OP_Column 
20d20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 74 79  only used for ty
20d30 70 65 6f 66 28 29 20 2a 2f 0a 23 64 65 66 69 6e  peof() */.#defin
20d40 65 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52  e OPFLAG_BULKCSR
20d50 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f         0x01    /
20d60 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73 65 64  * OP_Open** used
20d70 20 74 6f 20 6f 70 65 6e 20 62 75 6c 6b 20 63 75   to open bulk cu
20d80 72 73 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rsor */.#define 
20d90 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 20 20  OPFLAG_SEEKEQ   
20da0 20 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20       0x02    /* 
20db0 4f 50 5f 4f 70 65 6e 2a 2a 20 63 75 72 73 6f 72  OP_Open** cursor
20dc0 20 75 73 65 73 20 45 51 20 73 65 65 6b 20 6f 6e   uses EQ seek on
20dd0 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  ly */.#define OP
20de0 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 20 20  FLAG_FORDELETE  
20df0 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20 4f 50     0x08    /* OP
20e00 5f 4f 70 65 6e 20 73 68 6f 75 6c 64 20 75 73 65  _Open should use
20e10 20 42 54 52 45 45 5f 46 4f 52 44 45 4c 45 54 45   BTREE_FORDELETE
20e20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
20e30 41 47 5f 50 32 49 53 52 45 47 20 20 20 20 20 20  AG_P2ISREG      
20e40 20 30 78 31 30 20 20 20 20 2f 2a 20 50 32 20 74   0x10    /* P2 t
20e50 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73 20 61  o OP_Open** is a
20e60 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72   register number
20e70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
20e80 41 47 5f 50 45 52 4d 55 54 45 20 20 20 20 20 20  AG_PERMUTE      
20e90 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43   0x01    /* OP_C
20ea0 6f 6d 70 61 72 65 3a 20 75 73 65 20 74 68 65 20  ompare: use the 
20eb0 70 65 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 23  permutation */.#
20ec0 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 53 41  define OPFLAG_SA
20ed0 56 45 50 4f 53 49 54 49 4f 4e 20 20 30 78 30 32  VEPOSITION  0x02
20ee0 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65      /* OP_Delete
20ef0 2f 49 6e 73 65 72 74 3a 20 73 61 76 65 20 63 75  /Insert: save cu
20f00 72 73 6f 72 20 70 6f 73 20 2a 2f 0a 23 64 65 66  rsor pos */.#def
20f10 69 6e 65 20 4f 50 46 4c 41 47 5f 41 55 58 44 45  ine OPFLAG_AUXDE
20f20 4c 45 54 45 20 20 20 20 20 30 78 30 34 20 20 20  LETE     0x04   
20f30 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 3a 20 69   /* OP_Delete: i
20f40 6e 64 65 78 20 69 6e 20 61 20 44 45 4c 45 54 45  ndex in a DELETE
20f50 20 6f 70 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61   op */../*. * Ea
20f60 63 68 20 74 72 69 67 67 65 72 20 70 72 65 73 65  ch trigger prese
20f70 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  nt in the databa
20f80 73 65 20 73 63 68 65 6d 61 20 69 73 20 73 74 6f  se schema is sto
20f90 72 65 64 20 61 73 20 61 6e 20 69 6e 73 74 61 6e  red as an instan
20fa0 63 65 20 6f 66 0a 20 2a 20 73 74 72 75 63 74 20  ce of. * struct 
20fb0 54 72 69 67 67 65 72 2e 0a 20 2a 0a 20 2a 20 50  Trigger.. *. * P
20fc0 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 73 74 61  ointers to insta
20fd0 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74 20 54  nces of struct T
20fe0 72 69 67 67 65 72 20 61 72 65 20 73 74 6f 72 65  rigger are store
20ff0 64 20 69 6e 20 74 77 6f 20 77 61 79 73 2e 0a 20  d in two ways.. 
21000 2a 20 31 2e 20 49 6e 20 74 68 65 20 22 74 72 69  * 1. In the "tri
21010 67 48 61 73 68 22 20 68 61 73 68 20 74 61 62 6c  gHash" hash tabl
21020 65 20 28 70 61 72 74 20 6f 66 20 74 68 65 20 73  e (part of the s
21030 71 6c 69 74 65 33 2a 20 74 68 61 74 20 72 65 70  qlite3* that rep
21040 72 65 73 65 6e 74 73 20 74 68 65 0a 20 2a 20 20  resents the. *  
21050 20 20 64 61 74 61 62 61 73 65 29 2e 20 54 68 69    database). Thi
21060 73 20 61 6c 6c 6f 77 73 20 54 72 69 67 67 65 72  s allows Trigger
21070 20 73 74 72 75 63 74 75 72 65 73 20 74 6f 20 62   structures to b
21080 65 20 72 65 74 72 69 65 76 65 64 20 62 79 20 6e  e retrieved by n
21090 61 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20 74  ame.. * 2. All t
210a0 72 69 67 67 65 72 73 20 61 73 73 6f 63 69 61 74  riggers associat
210b0 65 64 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65  ed with a single
210c0 20 74 61 62 6c 65 20 66 6f 72 6d 20 61 20 6c 69   table form a li
210d0 6e 6b 65 64 20 6c 69 73 74 2c 20 75 73 69 6e 67  nked list, using
210e0 20 74 68 65 0a 20 2a 20 20 20 20 70 4e 65 78 74   the. *    pNext
210f0 20 6d 65 6d 62 65 72 20 6f 66 20 73 74 72 75 63   member of struc
21100 74 20 54 72 69 67 67 65 72 2e 20 41 20 70 6f 69  t Trigger. A poi
21110 6e 74 65 72 20 74 6f 20 74 68 65 20 66 69 72 73  nter to the firs
21120 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65  t element of the
21130 0a 20 2a 20 20 20 20 6c 69 6e 6b 65 64 20 6c 69  . *    linked li
21140 73 74 20 69 73 20 73 74 6f 72 65 64 20 61 73 20  st is stored as 
21150 74 68 65 20 22 70 54 72 69 67 67 65 72 22 20 6d  the "pTrigger" m
21160 65 6d 62 65 72 20 6f 66 20 74 68 65 20 61 73 73  ember of the ass
21170 6f 63 69 61 74 65 64 0a 20 2a 20 20 20 20 73 74  ociated. *    st
21180 72 75 63 74 20 54 61 62 6c 65 2e 0a 20 2a 0a 20  ruct Table.. *. 
21190 2a 20 54 68 65 20 22 73 74 65 70 5f 6c 69 73 74  * The "step_list
211a0 22 20 6d 65 6d 62 65 72 20 70 6f 69 6e 74 73 20  " member points 
211b0 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c 65  to the first ele
211c0 6d 65 6e 74 20 6f 66 20 61 20 6c 69 6e 6b 65 64  ment of a linked
211d0 20 6c 69 73 74 0a 20 2a 20 63 6f 6e 74 61 69 6e   list. * contain
211e0 69 6e 67 20 74 68 65 20 53 51 4c 20 73 74 61 74  ing the SQL stat
211f0 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65 64  ements specified
21200 20 61 73 20 74 68 65 20 74 72 69 67 67 65 72 20   as the trigger 
21210 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74 72  program.. */.str
21220 75 63 74 20 54 72 69 67 67 65 72 20 7b 0a 20 20  uct Trigger {.  
21230 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
21240 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e          /* The n
21250 61 6d 65 20 6f 66 20 74 68 65 20 74 72 69 67 67  ame of the trigg
21260 65 72 20 20 20 20 20 20 20 20 20 20 20 20 20 20  er              
21270 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 63            */.  c
21280 68 61 72 20 2a 74 61 62 6c 65 3b 20 20 20 20 20  har *table;     
21290 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74 61         /* The ta
212a0 62 6c 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77  ble or view to w
212b0 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72  hich the trigger
212c0 20 61 70 70 6c 69 65 73 20 2a 2f 0a 20 20 75 38   applies */.  u8
212d0 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20   op;            
212e0 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20        /* One of 
212f0 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50  TK_DELETE, TK_UP
21300 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20  DATE, TK_INSERT 
21310 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 75 38 20          */.  u8 
21320 74 72 5f 74 6d 3b 20 20 20 20 20 20 20 20 20 20  tr_tm;          
21330 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54       /* One of T
21340 52 49 47 47 45 52 5f 42 45 46 4f 52 45 2c 20 54  RIGGER_BEFORE, T
21350 52 49 47 47 45 52 5f 41 46 54 45 52 20 2a 2f 0a  RIGGER_AFTER */.
21360 20 20 45 78 70 72 20 2a 70 57 68 65 6e 3b 20 20    Expr *pWhen;  
21370 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
21380 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20   WHEN clause of 
21390 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 28  the expression (
213a0 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a  may be NULL) */.
213b0 20 20 49 64 4c 69 73 74 20 2a 70 43 6f 6c 75 6d    IdList *pColum
213c0 6e 73 3b 20 20 20 20 20 20 20 2f 2a 20 49 66 20  ns;       /* If 
213d0 74 68 69 73 20 69 73 20 61 6e 20 55 50 44 41 54  this is an UPDAT
213e0 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73  E OF <column-lis
213f0 74 3e 20 74 72 69 67 67 65 72 2c 0a 20 20 20 20  t> trigger,.    
21400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21410 20 20 20 20 20 20 20 20 20 74 68 65 20 3c 63 6f           the <co
21420 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69 73 20 73 74  lumn-list> is st
21430 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 53  ored here */.  S
21440 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
21450 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61         /* Schema
21460 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
21470 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 53 63 68  trigger */.  Sch
21480 65 6d 61 20 2a 70 54 61 62 53 63 68 65 6d 61 3b  ema *pTabSchema;
21490 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63       /* Schema c
214a0 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61  ontaining the ta
214b0 62 6c 65 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  ble */.  Trigger
214c0 53 74 65 70 20 2a 73 74 65 70 5f 6c 69 73 74 3b  Step *step_list;
214d0 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74 20 6f 66   /* Link list of
214e0 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
214f0 20 73 74 65 70 73 20 20 20 20 20 20 20 20 20 20   steps          
21500 20 20 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20     */.  Trigger 
21510 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
21520 2f 2a 20 4e 65 78 74 20 74 72 69 67 67 65 72 20  /* Next trigger 
21530 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
21540 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a  the table */.};.
21550 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69 67 67 65 72  ./*.** A trigger
21560 20 69 73 20 65 69 74 68 65 72 20 61 20 42 45 46   is either a BEF
21570 4f 52 45 20 6f 72 20 61 6e 20 41 46 54 45 52 20  ORE or an AFTER 
21580 74 72 69 67 67 65 72 2e 20 20 54 68 65 20 66 6f  trigger.  The fo
21590 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e 74  llowing constant
215a0 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 20 77  s.** determine w
215b0 68 69 63 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  hich..**.** If t
215c0 68 65 72 65 20 61 72 65 20 6d 75 6c 74 69 70 6c  here are multipl
215d0 65 20 74 72 69 67 67 65 72 73 2c 20 79 6f 75 20  e triggers, you 
215e0 6d 69 67 68 74 20 6f 66 20 73 6f 6d 65 20 42 45  might of some BE
215f0 46 4f 52 45 20 61 6e 64 20 73 6f 6d 65 20 41 46  FORE and some AF
21600 54 45 52 2e 0a 2a 2a 20 49 6e 20 74 68 61 74 20  TER..** In that 
21610 63 61 73 65 73 2c 20 74 68 65 20 63 6f 6e 73 74  cases, the const
21620 61 6e 74 73 20 62 65 6c 6f 77 20 63 61 6e 20 62  ants below can b
21630 65 20 4f 52 65 64 20 74 6f 67 65 74 68 65 72 2e  e ORed together.
21640 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 52 49 47  .*/.#define TRIG
21650 47 45 52 5f 42 45 46 4f 52 45 20 20 31 0a 23 64  GER_BEFORE  1.#d
21660 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f 41 46  efine TRIGGER_AF
21670 54 45 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20 41  TER   2../*. * A
21680 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 73 74  n instance of st
21690 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70  ruct TriggerStep
216a0 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72   is used to stor
216b0 65 20 61 20 73 69 6e 67 6c 65 20 53 51 4c 20 73  e a single SQL s
216c0 74 61 74 65 6d 65 6e 74 0a 20 2a 20 74 68 61 74  tatement. * that
216d0 20 69 73 20 61 20 70 61 72 74 20 6f 66 20 61 20   is a part of a 
216e0 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e  trigger-program.
216f0 0a 20 2a 0a 20 2a 20 49 6e 73 74 61 6e 63 65 73  . *. * Instances
21700 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67   of struct Trigg
21710 65 72 53 74 65 70 20 61 72 65 20 73 74 6f 72 65  erStep are store
21720 64 20 69 6e 20 61 20 73 69 6e 67 6c 79 20 6c 69  d in a singly li
21730 6e 6b 65 64 20 6c 69 73 74 20 28 6c 69 6e 6b 65  nked list (linke
21740 64 0a 20 2a 20 75 73 69 6e 67 20 74 68 65 20 22  d. * using the "
21750 70 4e 65 78 74 22 20 6d 65 6d 62 65 72 29 20 72  pNext" member) r
21760 65 66 65 72 65 6e 63 65 64 20 62 79 20 74 68 65  eferenced by the
21770 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d   "step_list" mem
21780 62 65 72 20 6f 66 20 74 68 65 0a 20 2a 20 61 73  ber of the. * as
21790 73 6f 63 69 61 74 65 64 20 73 74 72 75 63 74 20  sociated struct 
217a0 54 72 69 67 67 65 72 20 69 6e 73 74 61 6e 63 65  Trigger instance
217b0 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d  . The first elem
217c0 65 6e 74 20 6f 66 20 74 68 65 20 6c 69 6e 6b 65  ent of the linke
217d0 64 20 6c 69 73 74 20 69 73 0a 20 2a 20 74 68 65  d list is. * the
217e0 20 66 69 72 73 74 20 73 74 65 70 20 6f 66 20 74   first step of t
217f0 68 65 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72  he trigger-progr
21800 61 6d 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 6f  am.. *. * The "o
21810 70 22 20 6d 65 6d 62 65 72 20 69 6e 64 69 63 61  p" member indica
21820 74 65 73 20 77 68 65 74 68 65 72 20 74 68 69 73  tes whether this
21830 20 69 73 20 61 20 22 44 45 4c 45 54 45 22 2c 20   is a "DELETE", 
21840 22 49 4e 53 45 52 54 22 2c 20 22 55 50 44 41 54  "INSERT", "UPDAT
21850 45 22 20 6f 72 0a 20 2a 20 22 53 45 4c 45 43 54  E" or. * "SELECT
21860 22 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 65  " statement. The
21870 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 74 68 65   meanings of the
21880 20 6f 74 68 65 72 20 6d 65 6d 62 65 72 73 20 69   other members i
21890 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  s determined by 
218a0 74 68 65 0a 20 2a 20 76 61 6c 75 65 20 6f 66 20  the. * value of 
218b0 22 6f 70 22 20 61 73 20 66 6f 6c 6c 6f 77 73 3a  "op" as follows:
218c0 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b  . *. * (op == TK
218d0 5f 49 4e 53 45 52 54 29 0a 20 2a 20 6f 72 63 6f  _INSERT). * orco
218e0 6e 66 20 20 20 20 2d 3e 20 73 74 6f 72 65 73 20  nf    -> stores 
218f0 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  the ON CONFLICT 
21900 61 6c 67 6f 72 69 74 68 6d 0a 20 2a 20 70 53 65  algorithm. * pSe
21910 6c 65 63 74 20 20 20 2d 3e 20 49 66 20 74 68 69  lect   -> If thi
21920 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49  s is an INSERT I
21930 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45 43 54 20 2e  NTO ... SELECT .
21940 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68  .. statement, th
21950 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  en. *           
21960 20 20 20 74 68 69 73 20 73 74 6f 72 65 73 20 61     this stores a
21970 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
21980 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
21990 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c  . Otherwise NULL
219a0 2e 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d  .. * zTarget   -
219b0 3e 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20  > Dequoted name 
219c0 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  of the table to 
219d0 69 6e 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a 20  insert into.. * 
219e0 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 49 66 20  pExprList -> If 
219f0 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52  this is an INSER
21a00 54 20 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55 45  T INTO ... VALUE
21a10 53 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c  S ... statement,
21a20 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20   then. *        
21a30 20 20 20 20 20 20 74 68 69 73 20 73 74 6f 72 65        this store
21a40 73 20 76 61 6c 75 65 73 20 74 6f 20 62 65 20 69  s values to be i
21a50 6e 73 65 72 74 65 64 2e 20 4f 74 68 65 72 77 69  nserted. Otherwi
21a60 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c  se NULL.. * pIdL
21a70 69 73 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73  ist   -> If this
21a80 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e   is an INSERT IN
21a90 54 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d  TO ... (<column-
21aa0 6e 61 6d 65 73 3e 29 20 56 41 4c 55 45 53 20 2e  names>) VALUES .
21ab0 2e 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  ... *           
21ac0 20 20 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68     statement, th
21ad0 65 6e 20 74 68 69 73 20 73 74 6f 72 65 73 20 74  en this stores t
21ae0 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20  he column-names 
21af0 74 6f 20 62 65 0a 20 2a 20 20 20 20 20 20 20 20  to be. *        
21b00 20 20 20 20 20 20 69 6e 73 65 72 74 65 64 20 69        inserted i
21b10 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d  nto.. *. * (op =
21b20 3d 20 54 4b 5f 44 45 4c 45 54 45 29 0a 20 2a 20  = TK_DELETE). * 
21b30 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71  zTarget   -> Deq
21b40 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68  uoted name of th
21b50 65 20 74 61 62 6c 65 20 74 6f 20 64 65 6c 65 74  e table to delet
21b60 65 20 66 72 6f 6d 2e 0a 20 2a 20 70 57 68 65 72  e from.. * pWher
21b70 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52  e    -> The WHER
21b80 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20  E clause of the 
21b90 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74  DELETE statement
21ba0 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69   if one is speci
21bb0 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20  fied.. *        
21bc0 20 20 20 20 20 20 4f 74 68 65 72 77 69 73 65 20        Otherwise 
21bd0 4e 55 4c 4c 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20  NULL.. *. * (op 
21be0 3d 3d 20 54 4b 5f 55 50 44 41 54 45 29 0a 20 2a  == TK_UPDATE). *
21bf0 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65   zTarget   -> De
21c00 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74  quoted name of t
21c10 68 65 20 74 61 62 6c 65 20 74 6f 20 75 70 64 61  he table to upda
21c20 74 65 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20  te.. * pWhere   
21c30 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c   -> The WHERE cl
21c40 61 75 73 65 20 6f 66 20 74 68 65 20 55 50 44 41  ause of the UPDA
21c50 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20  TE statement if 
21c60 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69 65 64  one is specified
21c70 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  .. *            
21c80 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c    Otherwise NULL
21c90 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d  .. * pExprList -
21ca0 3e 20 41 20 6c 69 73 74 20 6f 66 20 74 68 65 20  > A list of the 
21cb0 63 6f 6c 75 6d 6e 73 20 74 6f 20 75 70 64 61 74  columns to updat
21cc0 65 20 61 6e 64 20 74 68 65 20 65 78 70 72 65 73  e and the expres
21cd0 73 69 6f 6e 73 20 74 6f 20 75 70 64 61 74 65 0a  sions to update.
21ce0 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
21cf0 74 68 65 6d 20 74 6f 2e 20 53 65 65 20 73 71 6c  them to. See sql
21d00 69 74 65 33 55 70 64 61 74 65 28 29 20 64 6f 63  ite3Update() doc
21d10 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22 70  umentation of "p
21d20 43 68 61 6e 67 65 73 22 0a 20 2a 20 20 20 20 20  Changes". *     
21d30 20 20 20 20 20 20 20 20 20 61 72 67 75 6d 65 6e           argumen
21d40 74 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 72 75 63 74  t.. *. */.struct
21d50 20 54 72 69 67 67 65 72 53 74 65 70 20 7b 0a 20   TriggerStep {. 
21d60 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20   u8 op;         
21d70 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20        /* One of 
21d80 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50  TK_DELETE, TK_UP
21d90 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 2c  DATE, TK_INSERT,
21da0 20 54 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20 20   TK_SELECT */.  
21db0 75 38 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20  u8 orconf;      
21dc0 20 20 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62       /* OE_Rollb
21dd0 61 63 6b 20 65 74 63 2e 20 2a 2f 0a 20 20 54 72  ack etc. */.  Tr
21de0 69 67 67 65 72 20 2a 70 54 72 69 67 3b 20 20 20  igger *pTrig;   
21df0 20 20 20 2f 2a 20 54 68 65 20 74 72 69 67 67 65     /* The trigge
21e00 72 20 74 68 61 74 20 74 68 69 73 20 73 74 65 70  r that this step
21e10 20 69 73 20 61 20 70 61 72 74 20 6f 66 20 2a 2f   is a part of */
21e20 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65  .  Select *pSele
21e30 63 74 3b 20 20 20 20 20 2f 2a 20 53 45 4c 45 43  ct;     /* SELEC
21e40 54 20 73 74 61 74 65 6d 65 6e 74 20 6f 72 20 52  T statement or R
21e50 48 53 20 6f 66 20 49 4e 53 45 52 54 20 49 4e 54  HS of INSERT INT
21e60 4f 20 53 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f 0a  O SELECT ... */.
21e70 20 20 63 68 61 72 20 2a 7a 54 61 72 67 65 74 3b    char *zTarget;
21e80 20 20 20 20 20 20 20 2f 2a 20 54 61 72 67 65 74         /* Target
21e90 20 74 61 62 6c 65 20 66 6f 72 20 44 45 4c 45 54   table for DELET
21ea0 45 2c 20 55 50 44 41 54 45 2c 20 49 4e 53 45 52  E, UPDATE, INSER
21eb0 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68  T */.  Expr *pWh
21ec0 65 72 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  ere;        /* T
21ed0 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20  he WHERE clause 
21ee0 66 6f 72 20 44 45 4c 45 54 45 20 6f 72 20 55 50  for DELETE or UP
21ef0 44 41 54 45 20 73 74 65 70 73 20 2a 2f 0a 20 20  DATE steps */.  
21f00 45 78 70 72 4c 69 73 74 20 2a 70 45 78 70 72 4c  ExprList *pExprL
21f10 69 73 74 3b 20 2f 2a 20 53 45 54 20 63 6c 61 75  ist; /* SET clau
21f20 73 65 20 66 6f 72 20 55 50 44 41 54 45 2e 20 2a  se for UPDATE. *
21f30 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 49 64 4c  /.  IdList *pIdL
21f40 69 73 74 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 75  ist;     /* Colu
21f50 6d 6e 20 6e 61 6d 65 73 20 66 6f 72 20 49 4e 53  mn names for INS
21f60 45 52 54 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  ERT */.  Trigger
21f70 53 74 65 70 20 2a 70 4e 65 78 74 3b 20 20 2f 2a  Step *pNext;  /*
21f80 20 4e 65 78 74 20 69 6e 20 74 68 65 20 6c 69 6e   Next in the lin
21f90 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20 54 72 69 67  k-list */.  Trig
21fa0 67 65 72 53 74 65 70 20 2a 70 4c 61 73 74 3b 20  gerStep *pLast; 
21fb0 20 2f 2a 20 4c 61 73 74 20 65 6c 65 6d 65 6e 74   /* Last element
21fc0 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20 56   in link-list. V
21fd0 61 6c 69 64 20 66 6f 72 20 31 73 74 20 65 6c 65  alid for 1st ele
21fe0 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  m only */.};../*
21ff0 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
22000 67 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74  g structure cont
22010 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ains information
22020 20 75 73 65 64 20 62 79 20 74 68 65 20 73 71 6c   used by the sql
22030 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f 75  iteFix....** rou
22040 74 69 6e 65 73 20 61 73 20 74 68 65 79 20 77 61  tines as they wa
22050 6c 6b 20 74 68 65 20 70 61 72 73 65 20 74 72 65  lk the parse tre
22060 65 20 74 6f 20 6d 61 6b 65 20 64 61 74 61 62 61  e to make databa
22070 73 65 20 72 65 66 65 72 65 6e 63 65 73 0a 2a 2a  se references.**
22080 20 65 78 70 6c 69 63 69 74 2e 0a 2a 2f 0a 74 79   explicit..*/.ty
22090 70 65 64 65 66 20 73 74 72 75 63 74 20 44 62 46  pedef struct DbF
220a0 69 78 65 72 20 44 62 46 69 78 65 72 3b 0a 73 74  ixer DbFixer;.st
220b0 72 75 63 74 20 44 62 46 69 78 65 72 20 7b 0a 20  ruct DbFixer {. 
220c0 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20   Parse *pParse; 
220d0 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73       /* The pars
220e0 69 6e 67 20 63 6f 6e 74 65 78 74 2e 20 20 45 72  ing context.  Er
220f0 72 6f 72 20 6d 65 73 73 61 67 65 73 20 77 72 69  ror messages wri
22100 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a 20 20 53  tten here */.  S
22110 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20  chema *pSchema; 
22120 20 20 20 2f 2a 20 46 69 78 20 69 74 65 6d 73 20     /* Fix items 
22130 74 6f 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a  to this schema *
22140 2f 0a 20 20 69 6e 74 20 62 56 61 72 4f 6e 6c 79  /.  int bVarOnly
22150 3b 20 20 20 20 20 20 20 2f 2a 20 43 68 65 63 6b  ;       /* Check
22160 20 66 6f 72 20 76 61 72 69 61 62 6c 65 20 72 65   for variable re
22170 66 65 72 65 6e 63 65 73 20 6f 6e 6c 79 20 2a 2f  ferences only */
22180 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
22190 44 62 3b 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73  Db;    /* Make s
221a0 75 72 65 20 61 6c 6c 20 6f 62 6a 65 63 74 73 20  ure all objects 
221b0 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e  are contained in
221c0 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a   this database *
221d0 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
221e0 7a 54 79 70 65 3b 20 20 2f 2a 20 54 79 70 65 20  zType;  /* Type 
221f0 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72  of the container
22200 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f   - used for erro
22210 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 20 20  r messages */.  
22220 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a 70 4e 61  const Token *pNa
22230 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74  me; /* Name of t
22240 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75  he container - u
22250 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20 6d 65  sed for error me
22260 73 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  ssages */.};../*
22270 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 65 64 20  .** An objected 
22280 75 73 65 64 20 74 6f 20 61 63 63 75 6d 75 6c 61  used to accumula
22290 74 65 20 74 68 65 20 74 65 78 74 20 6f 66 20 61  te the text of a
222a0 20 73 74 72 69 6e 67 20 77 68 65 72 65 20 77 65   string where we
222b0 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65 63 65 73  .** do not neces
222c0 73 61 72 69 6c 79 20 6b 6e 6f 77 20 68 6f 77 20  sarily know how 
222d0 62 69 67 20 74 68 65 20 73 74 72 69 6e 67 20 77  big the string w
222e0 69 6c 6c 20 62 65 20 69 6e 20 74 68 65 20 65 6e  ill be in the en
222f0 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 74 72  d..*/.struct Str
22300 41 63 63 75 6d 20 7b 0a 20 20 73 71 6c 69 74 65  Accum {.  sqlite
22310 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 2f  3 *db;         /
22320 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 61 74 61 62  * Optional datab
22330 61 73 65 20 66 6f 72 20 6c 6f 6f 6b 61 73 69 64  ase for lookasid
22340 65 2e 20 20 43 61 6e 20 62 65 20 4e 55 4c 4c 20  e.  Can be NULL 
22350 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 42 61 73 65  */.  char *zBase
22360 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 62  ;         /* A b
22370 61 73 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20  ase allocation. 
22380 20 4e 6f 74 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63   Not from malloc
22390 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 65  . */.  char *zTe
223a0 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  xt;         /* T
223b0 68 65 20 73 74 72 69 6e 67 20 63 6f 6c 6c 65 63  he string collec
223c0 74 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  ted so far */.  
223d0 75 33 32 20 20 6e 43 68 61 72 3b 20 20 20 20 20  u32  nChar;     
223e0 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f       /* Length o
223f0 66 20 74 68 65 20 73 74 72 69 6e 67 20 73 6f 20  f the string so 
22400 66 61 72 20 2a 2f 0a 20 20 75 33 32 20 20 6e 41  far */.  u32  nA
22410 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 2f 2a  lloc;         /*
22420 20 41 6d 6f 75 6e 74 20 6f 66 20 73 70 61 63 65   Amount of space
22430 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 7a 54   allocated in zT
22440 65 78 74 20 2a 2f 0a 20 20 75 33 32 20 20 6d 78  ext */.  u32  mx
22450 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a  Alloc;        /*
22460 20 4d 61 78 69 6d 75 6d 20 61 6c 6c 6f 77 65 64   Maximum allowed
22470 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 30 20   allocation.  0 
22480 66 6f 72 20 6e 6f 20 6d 61 6c 6c 6f 63 20 75 73  for no malloc us
22490 61 67 65 20 2a 2f 0a 20 20 75 38 20 20 20 61 63  age */.  u8   ac
224a0 63 45 72 72 6f 72 3b 20 20 20 20 20 20 20 2f 2a  cError;       /*
224b0 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20   STRACCUM_NOMEM 
224c0 6f 72 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42  or STRACCUM_TOOB
224d0 49 47 20 2a 2f 0a 20 20 75 38 20 20 20 70 72 69  IG */.  u8   pri
224e0 6e 74 66 46 6c 61 67 73 3b 20 20 20 20 2f 2a 20  ntfFlags;    /* 
224f0 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 20 66 6c  SQLITE_PRINTF fl
22500 61 67 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a  ags below */.};.
22510 23 64 65 66 69 6e 65 20 53 54 52 41 43 43 55 4d  #define STRACCUM
22520 5f 4e 4f 4d 45 4d 20 20 20 31 0a 23 64 65 66 69  _NOMEM   1.#defi
22530 6e 65 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42  ne STRACCUM_TOOB
22540 49 47 20 20 32 0a 23 64 65 66 69 6e 65 20 53 51  IG  2.#define SQ
22550 4c 49 54 45 5f 50 52 49 4e 54 46 5f 49 4e 54 45  LITE_PRINTF_INTE
22560 52 4e 41 4c 20 30 78 30 31 20 20 2f 2a 20 49 6e  RNAL 0x01  /* In
22570 74 65 72 6e 61 6c 2d 75 73 65 2d 6f 6e 6c 79 20  ternal-use-only 
22580 63 6f 6e 76 65 72 74 65 72 73 20 61 6c 6c 6f 77  converters allow
22590 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ed */.#define SQ
225a0 4c 49 54 45 5f 50 52 49 4e 54 46 5f 53 51 4c 46  LITE_PRINTF_SQLF
225b0 55 4e 43 20 20 30 78 30 32 20 20 2f 2a 20 53 51  UNC  0x02  /* SQ
225c0 4c 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d  L function argum
225d0 65 6e 74 73 20 74 6f 20 56 58 50 72 69 6e 74 66  ents to VXPrintf
225e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
225f0 54 45 5f 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43  TE_PRINTF_MALLOC
22600 45 44 20 30 78 30 34 20 20 2f 2a 20 54 72 75 65  ED 0x04  /* True
22610 20 69 66 20 78 54 65 78 74 20 69 73 20 61 6c 6c   if xText is all
22620 6f 63 61 74 65 64 20 73 70 61 63 65 20 2a 2f 0a  ocated space */.
22630 0a 23 64 65 66 69 6e 65 20 69 73 4d 61 6c 6c 6f  .#define isMallo
22640 63 65 64 28 58 29 20 20 28 28 28 58 29 2d 3e 70  ced(X)  (((X)->p
22650 72 69 6e 74 66 46 6c 61 67 73 20 26 20 53 51 4c  rintfFlags & SQL
22660 49 54 45 5f 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f  ITE_PRINTF_MALLO
22670 43 45 44 29 21 3d 30 29 0a 0a 0a 2f 2a 0a 2a 2a  CED)!=0).../*.**
22680 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   A pointer to th
22690 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20  is structure is 
226a0 75 73 65 64 20 74 6f 20 63 6f 6d 6d 75 6e 69 63  used to communic
226b0 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a  ate information.
226c0 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 49  ** from sqlite3I
226d0 6e 69 74 20 61 6e 64 20 4f 50 5f 50 61 72 73 65  nit and OP_Parse
226e0 53 63 68 65 6d 61 20 69 6e 74 6f 20 74 68 65 20  Schema into the 
226f0 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62  sqlite3InitCallb
22700 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  ack..*/.typedef 
22710 73 74 72 75 63 74 20 7b 0a 20 20 73 71 6c 69 74  struct {.  sqlit
22720 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f  e3 *db;        /
22730 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20 62  * The database b
22740 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64  eing initialized
22750 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45   */.  char **pzE
22760 72 72 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72 72  rrMsg;    /* Err
22770 6f 72 20 6d 65 73 73 61 67 65 20 73 74 6f 72 65  or message store
22780 64 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20  d here */.  int 
22790 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  iDb;            
227a0 2f 2a 20 30 20 66 6f 72 20 6d 61 69 6e 20 64 61  /* 0 for main da
227b0 74 61 62 61 73 65 2e 20 20 31 20 66 6f 72 20 54  tabase.  1 for T
227c0 45 4d 50 2c 20 32 2e 2e 20 66 6f 72 20 41 54 54  EMP, 2.. for ATT
227d0 41 43 48 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72  ACHed */.  int r
227e0 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  c;             /
227f0 2a 20 52 65 73 75 6c 74 20 63 6f 64 65 20 73 74  * Result code st
22800 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 7d 20 49  ored here */.} I
22810 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20  nitData;../*.** 
22820 53 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  Structure contai
22830 6e 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e 66  ning global conf
22840 69 67 75 72 61 74 69 6f 6e 20 64 61 74 61 20 66  iguration data f
22850 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69  or the SQLite li
22860 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  brary..**.** Thi
22870 73 20 73 74 72 75 63 74 75 72 65 20 61 6c 73 6f  s structure also
22880 20 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20 73   contains some s
22890 74 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  tate information
228a0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 71 6c 69  ..*/.struct Sqli
228b0 74 65 33 43 6f 6e 66 69 67 20 7b 0a 20 20 69 6e  te3Config {.  in
228c0 74 20 62 4d 65 6d 73 74 61 74 3b 20 20 20 20 20  t bMemstat;     
228d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
228e0 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c  /* True to enabl
228f0 65 20 6d 65 6d 6f 72 79 20 73 74 61 74 75 73 20  e memory status 
22900 2a 2f 0a 20 20 69 6e 74 20 62 43 6f 72 65 4d 75  */.  int bCoreMu
22910 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  tex;            
22920 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74         /* True t
22930 6f 20 65 6e 61 62 6c 65 20 63 6f 72 65 20 6d 75  o enable core mu
22940 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  texing */.  int 
22950 62 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20 20 20  bFullMutex;     
22960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
22970 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20   True to enable 
22980 66 75 6c 6c 20 6d 75 74 65 78 69 6e 67 20 2a 2f  full mutexing */
22990 0a 20 20 69 6e 74 20 62 4f 70 65 6e 55 72 69 3b  .  int bOpenUri;
229a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
229b0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
229c0 69 6e 74 65 72 70 72 65 74 20 66 69 6c 65 6e 61  interpret filena
229d0 6d 65 73 20 61 73 20 55 52 49 73 20 2a 2f 0a 20  mes as URIs */. 
229e0 20 69 6e 74 20 62 55 73 65 43 69 73 3b 20 20 20   int bUseCis;   
229f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a00 20 20 20 2f 2a 20 55 73 65 20 63 6f 76 65 72 69     /* Use coveri
22a10 6e 67 20 69 6e 64 69 63 65 73 20 66 6f 72 20 66  ng indices for f
22a20 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20 20 69  ull-scans */.  i
22a30 6e 74 20 6d 78 53 74 72 6c 65 6e 3b 20 20 20 20  nt mxStrlen;    
22a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a50 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 74 72 69   /* Maximum stri
22a60 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 69  ng length */.  i
22a70 6e 74 20 6e 65 76 65 72 43 6f 72 72 75 70 74 3b  nt neverCorrupt;
22a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a90 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20   /* Database is 
22aa0 61 6c 77 61 79 73 20 77 65 6c 6c 2d 66 6f 72 6d  always well-form
22ab0 65 64 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4c 6f  ed */.  int szLo
22ac0 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20  okaside;        
22ad0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
22ae0 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62  ault lookaside b
22af0 75 66 66 65 72 20 73 69 7a 65 20 2a 2f 0a 20 20  uffer size */.  
22b00 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64 65 3b 20  int nLookaside; 
22b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f    /* Default loo
22b30 6b 61 73 69 64 65 20 62 75 66 66 65 72 20 63 6f  kaside buffer co
22b40 75 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74  unt */.  int nSt
22b50 6d 74 53 70 69 6c 6c 3b 20 20 20 20 20 20 20 20  mtSpill;        
22b60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74             /* St
22b70 6d 74 2d 6a 6f 75 72 6e 61 6c 20 73 70 69 6c 6c  mt-journal spill
22b80 2d 74 6f 2d 64 69 73 6b 20 74 68 72 65 73 68 6f  -to-disk thresho
22b90 6c 64 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  ld */.  sqlite3_
22ba0 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 6d 3b 20 20  mem_methods m;  
22bb0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 77            /* Low
22bc0 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72 79 20 61 6c  -level memory al
22bd0 6c 6f 63 61 74 69 6f 6e 20 69 6e 74 65 72 66 61  location interfa
22be0 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  ce */.  sqlite3_
22bf0 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 6d 75  mutex_methods mu
22c00 74 65 78 3b 20 20 20 20 20 20 2f 2a 20 4c 6f 77  tex;      /* Low
22c10 2d 6c 65 76 65 6c 20 6d 75 74 65 78 20 69 6e 74  -level mutex int
22c20 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69  erface */.  sqli
22c30 74 65 33 5f 70 63 61 63 68 65 5f 6d 65 74 68 6f  te3_pcache_metho
22c40 64 73 32 20 70 63 61 63 68 65 32 3b 20 20 2f 2a  ds2 pcache2;  /*
22c50 20 4c 6f 77 2d 6c 65 76 65 6c 20 70 61 67 65 2d   Low-level page-
22c60 63 61 63 68 65 20 69 6e 74 65 72 66 61 63 65 20  cache interface 
22c70 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 48 65 61 70  */.  void *pHeap
22c80 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
22c90 20 20 20 20 20 20 20 2f 2a 20 48 65 61 70 20 73         /* Heap s
22ca0 74 6f 72 61 67 65 20 73 70 61 63 65 20 2a 2f 0a  torage space */.
22cb0 20 20 69 6e 74 20 6e 48 65 61 70 3b 20 20 20 20    int nHeap;    
22cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22cd0 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 70      /* Size of p
22ce0 48 65 61 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  Heap[] */.  int 
22cf0 6d 6e 52 65 71 2c 20 6d 78 52 65 71 3b 20 20 20  mnReq, mxReq;   
22d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
22d10 20 4d 69 6e 20 61 6e 64 20 6d 61 78 20 68 65 61   Min and max hea
22d20 70 20 72 65 71 75 65 73 74 73 20 73 69 7a 65 73  p requests sizes
22d30 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e   */.  sqlite3_in
22d40 74 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20  t64 szMmap;     
22d50 20 20 20 20 20 20 20 20 2f 2a 20 6d 6d 61 70 28          /* mmap(
22d60 29 20 73 70 61 63 65 20 70 65 72 20 6f 70 65 6e  ) space per open
22d70 20 66 69 6c 65 20 2a 2f 0a 20 20 73 71 6c 69 74   file */.  sqlit
22d80 65 33 5f 69 6e 74 36 34 20 6d 78 4d 6d 61 70 3b  e3_int64 mxMmap;
22d90 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
22da0 4d 61 78 69 6d 75 6d 20 76 61 6c 75 65 20 66 6f  Maximum value fo
22db0 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a 20 20 76 6f  r szMmap */.  vo
22dc0 69 64 20 2a 70 53 63 72 61 74 63 68 3b 20 20 20  id *pScratch;   
22dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22de0 2f 2a 20 53 63 72 61 74 63 68 20 6d 65 6d 6f 72  /* Scratch memor
22df0 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 53 63 72  y */.  int szScr
22e00 61 74 63 68 3b 20 20 20 20 20 20 20 20 20 20 20  atch;           
22e10 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
22e20 20 6f 66 20 65 61 63 68 20 73 63 72 61 74 63 68   of each scratch
22e30 20 62 75 66 66 65 72 20 2a 2f 0a 20 20 69 6e 74   buffer */.  int
22e40 20 6e 53 63 72 61 74 63 68 3b 20 20 20 20 20 20   nScratch;      
22e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22e60 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 63 72 61  * Number of scra
22e70 74 63 68 20 62 75 66 66 65 72 73 20 2a 2f 0a 20  tch buffers */. 
22e80 20 76 6f 69 64 20 2a 70 50 61 67 65 3b 20 20 20   void *pPage;   
22e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ea0 20 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65     /* Page cache
22eb0 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74   memory */.  int
22ec0 20 73 7a 50 61 67 65 3b 20 20 20 20 20 20 20 20   szPage;        
22ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22ee0 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 70  * Size of each p
22ef0 61 67 65 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a  age in pPage[] *
22f00 2f 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b 20 20  /.  int nPage;  
22f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
22f30 6f 66 20 70 61 67 65 73 20 69 6e 20 70 50 61 67  of pages in pPag
22f40 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 50  e[] */.  int mxP
22f50 61 72 73 65 72 53 74 61 63 6b 3b 20 20 20 20 20  arserStack;     
22f60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 61             /* ma
22f70 78 69 6d 75 6d 20 64 65 70 74 68 20 6f 66 20 74  ximum depth of t
22f80 68 65 20 70 61 72 73 65 72 20 73 74 61 63 6b 20  he parser stack 
22f90 2a 2f 0a 20 20 69 6e 74 20 73 68 61 72 65 64 43  */.  int sharedC
22fa0 61 63 68 65 45 6e 61 62 6c 65 64 3b 20 20 20 20  acheEnabled;    
22fb0 20 20 20 20 20 20 20 2f 2a 20 74 72 75 65 20 69         /* true i
22fc0 66 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d  f shared-cache m
22fd0 6f 64 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20  ode enabled */. 
22fe0 20 75 33 32 20 73 7a 50 6d 61 3b 20 20 20 20 20   u32 szPma;     
22ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23000 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 53 6f     /* Maximum So
23010 72 74 65 72 20 50 4d 41 20 73 69 7a 65 20 2a 2f  rter PMA size */
23020 0a 20 20 2f 2a 20 54 68 65 20 61 62 6f 76 65 20  .  /* The above 
23030 6d 69 67 68 74 20 62 65 20 69 6e 69 74 69 61 6c  might be initial
23040 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f  ized to non-zero
23050 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
23060 20 6e 65 65 64 20 74 6f 20 61 6c 77 61 79 73 0a   need to always.
23070 20 20 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 62    ** initially b
23080 65 20 7a 65 72 6f 2c 20 68 6f 77 65 76 65 72 2e  e zero, however.
23090 20 2a 2f 0a 20 20 69 6e 74 20 69 73 49 6e 69 74   */.  int isInit
230a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
230b0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
230c0 61 66 74 65 72 20 69 6e 69 74 69 61 6c 69 7a 61  after initializa
230d0 74 69 6f 6e 20 68 61 73 20 66 69 6e 69 73 68 65  tion has finishe
230e0 64 20 2a 2f 0a 20 20 69 6e 74 20 69 6e 50 72 6f  d */.  int inPro
230f0 67 72 65 73 73 3b 20 20 20 20 20 20 20 20 20 20  gress;          
23100 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
23110 20 77 68 69 6c 65 20 69 6e 69 74 69 61 6c 69 7a   while initializ
23120 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73  ation in progres
23130 73 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 75 74  s */.  int isMut
23140 65 78 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20  exInit;         
23150 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
23160 20 61 66 74 65 72 20 6d 75 74 65 78 65 73 20 61   after mutexes a
23170 72 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  re initialized *
23180 2f 0a 20 20 69 6e 74 20 69 73 4d 61 6c 6c 6f 63  /.  int isMalloc
23190 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  Init;           
231a0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66        /* True af
231b0 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e  ter malloc is in
231c0 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69  itialized */.  i
231d0 6e 74 20 69 73 50 43 61 63 68 65 49 6e 69 74 3b  nt isPCacheInit;
231e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
231f0 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d   /* True after m
23200 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c  alloc is initial
23210 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 52  ized */.  int nR
23220 65 66 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20  efInitMutex;    
23230 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
23240 75 6d 62 65 72 20 6f 66 20 75 73 65 72 73 20 6f  umber of users o
23250 66 20 70 49 6e 69 74 4d 75 74 65 78 20 2a 2f 0a  f pInitMutex */.
23260 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20    sqlite3_mutex 
23270 2a 70 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20  *pInitMutex;    
23280 20 20 20 20 2f 2a 20 4d 75 74 65 78 20 75 73 65      /* Mutex use
23290 64 20 62 79 20 73 71 6c 69 74 65 33 5f 69 6e 69  d by sqlite3_ini
232a0 74 69 61 6c 69 7a 65 28 29 20 2a 2f 0a 20 20 76  tialize() */.  v
232b0 6f 69 64 20 28 2a 78 4c 6f 67 29 28 76 6f 69 64  oid (*xLog)(void
232c0 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
232d0 2a 29 3b 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20  *); /* Function 
232e0 66 6f 72 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20  for logging */. 
232f0 20 76 6f 69 64 20 2a 70 4c 6f 67 41 72 67 3b 20   void *pLogArg; 
23300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23310 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61        /* First a
23320 72 67 75 6d 65 6e 74 20 74 6f 20 78 4c 6f 67 28  rgument to xLog(
23330 29 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ) */.#ifdef SQLI
23340 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47  TE_ENABLE_SQLLOG
23350 0a 20 20 76 6f 69 64 28 2a 78 53 71 6c 6c 6f 67  .  void(*xSqllog
23360 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a  )(void*,sqlite3*
23370 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e  ,const char*, in
23380 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 53 71 6c  t);.  void *pSql
23390 6c 6f 67 41 72 67 3b 0a 23 65 6e 64 69 66 0a 23  logArg;.#endif.#
233a0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 56 44 42  ifdef SQLITE_VDB
233b0 45 5f 43 4f 56 45 52 41 47 45 0a 20 20 2f 2a 20  E_COVERAGE.  /* 
233c0 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61  The following ca
233d0 6c 6c 62 61 63 6b 20 28 69 66 20 6e 6f 74 20 4e  llback (if not N
233e0 55 4c 4c 29 20 69 73 20 69 6e 76 6f 6b 65 64 20  ULL) is invoked 
233f0 6f 6e 20 65 76 65 72 79 20 56 44 42 45 20 62 72  on every VDBE br
23400 61 6e 63 68 0a 20 20 2a 2a 20 6f 70 65 72 61 74  anch.  ** operat
23410 69 6f 6e 2e 20 20 53 65 74 20 74 68 65 20 63 61  ion.  Set the ca
23420 6c 6c 62 61 63 6b 20 75 73 69 6e 67 20 53 51 4c  llback using SQL
23430 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 56 44 42  ITE_TESTCTRL_VDB
23440 45 5f 43 4f 56 45 52 41 47 45 2e 0a 20 20 2a 2f  E_COVERAGE..  */
23450 0a 20 20 76 6f 69 64 20 28 2a 78 56 64 62 65 42  .  void (*xVdbeB
23460 72 61 6e 63 68 29 28 76 6f 69 64 2a 2c 69 6e 74  ranch)(void*,int
23470 20 69 53 72 63 4c 69 6e 65 2c 75 38 20 65 54 68   iSrcLine,u8 eTh
23480 69 73 2c 75 38 20 65 4d 78 29 3b 20 20 2f 2a 20  is,u8 eMx);  /* 
23490 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f  Callback */.  vo
234a0 69 64 20 2a 70 56 64 62 65 42 72 61 6e 63 68 41  id *pVdbeBranchA
234b0 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
234c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
234d0 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20 61          /* 1st a
234e0 72 67 75 6d 65 6e 74 20 2a 2f 0a 23 65 6e 64 69  rgument */.#endi
234f0 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
23500 5f 55 4e 54 45 53 54 41 42 4c 45 0a 20 20 69 6e  _UNTESTABLE.  in
23510 74 20 28 2a 78 54 65 73 74 43 61 6c 6c 62 61 63  t (*xTestCallbac
23520 6b 29 28 69 6e 74 29 3b 20 20 20 20 20 20 20 20  k)(int);        
23530 2f 2a 20 49 6e 76 6f 6b 65 64 20 62 79 20 73 71  /* Invoked by sq
23540 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28 29 20  lite3FaultSim() 
23550 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20  */.#endif.  int 
23560 62 4c 6f 63 61 6c 74 69 6d 65 46 61 75 6c 74 3b  bLocaltimeFault;
23570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
23580 20 54 72 75 65 20 74 6f 20 66 61 69 6c 20 6c 6f   True to fail lo
23590 63 61 6c 74 69 6d 65 28 29 20 63 61 6c 6c 73 20  caltime() calls 
235a0 2a 2f 0a 20 20 69 6e 74 20 69 4f 6e 63 65 52 65  */.  int iOnceRe
235b0 73 65 74 54 68 72 65 73 68 6f 6c 64 3b 20 20 20  setThreshold;   
235c0 20 20 20 20 20 20 20 2f 2a 20 57 68 65 6e 20 74         /* When t
235d0 6f 20 72 65 73 65 74 20 4f 50 5f 4f 6e 63 65 20  o reset OP_Once 
235e0 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 7d 3b 0a 0a  counters */.};..
235f0 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d 61 63 72 6f  /*.** This macro
23600 20 69 73 20 75 73 65 64 20 69 6e 73 69 64 65 20   is used inside 
23610 6f 66 20 61 73 73 65 72 74 28 29 20 73 74 61 74  of assert() stat
23620 65 6d 65 6e 74 73 20 74 6f 20 69 6e 64 69 63 61  ements to indica
23630 74 65 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 61  te that.** the a
23640 73 73 65 72 74 20 69 73 20 6f 6e 6c 79 20 76 61  ssert is only va
23650 6c 69 64 20 6f 6e 20 61 20 77 65 6c 6c 2d 66 6f  lid on a well-fo
23660 72 6d 65 64 20 64 61 74 61 62 61 73 65 2e 20 20  rmed database.  
23670 49 6e 73 74 65 61 64 20 6f 66 3a 0a 2a 2a 0a 2a  Instead of:.**.*
23680 2a 20 20 20 20 20 61 73 73 65 72 74 28 20 58 20  *     assert( X 
23690 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20 77 72 69  );.**.** One wri
236a0 74 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61  tes:.**.**     a
236b0 73 73 65 72 74 28 20 58 20 7c 7c 20 43 4f 52 52  ssert( X || CORR
236c0 55 50 54 5f 44 42 20 29 3b 0a 2a 2a 0a 2a 2a 20  UPT_DB );.**.** 
236d0 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20 74 72  CORRUPT_DB is tr
236e0 75 65 20 64 75 72 69 6e 67 20 6e 6f 72 6d 61 6c  ue during normal
236f0 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 43 4f 52   operation.  COR
23700 52 55 50 54 5f 44 42 20 64 6f 65 73 20 6e 6f 74  RUPT_DB does not
23710 20 69 6e 64 69 63 61 74 65 0a 2a 2a 20 74 68 61   indicate.** tha
23720 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  t the database i
23730 73 20 64 65 66 69 6e 69 74 65 6c 79 20 63 6f 72  s definitely cor
23740 72 75 70 74 2c 20 6f 6e 6c 79 20 74 68 61 74 20  rupt, only that 
23750 69 74 20 6d 69 67 68 74 20 62 65 20 63 6f 72 72  it might be corr
23760 75 70 74 2e 0a 2a 2a 20 46 6f 72 20 6d 6f 73 74  upt..** For most
23770 20 74 65 73 74 20 63 61 73 65 73 2c 20 43 4f 52   test cases, COR
23780 52 55 50 54 5f 44 42 20 69 73 20 73 65 74 20 74  RUPT_DB is set t
23790 6f 20 66 61 6c 73 65 20 75 73 69 6e 67 20 61 20  o false using a 
237a0 73 70 65 63 69 61 6c 0a 2a 2a 20 73 71 6c 69 74  special.** sqlit
237b0 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28  e3_test_control(
237c0 29 2e 20 20 54 68 69 73 20 65 6e 61 62 6c 65 73  ).  This enables
237d0 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
237e0 65 6e 74 73 20 74 6f 20 70 72 6f 76 65 0a 2a 2a  ents to prove.**
237f0 20 74 68 69 6e 67 73 20 74 68 61 74 20 61 72 65   things that are
23800 20 61 6c 77 61 79 73 20 74 72 75 65 20 66 6f 72   always true for
23810 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74   well-formed dat
23820 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 64 65 66 69  abases..*/.#defi
23830 6e 65 20 43 4f 52 52 55 50 54 5f 44 42 20 20 28  ne CORRUPT_DB  (
23840 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 2e 6e 65  sqlite3Config.ne
23850 76 65 72 43 6f 72 72 75 70 74 3d 3d 30 29 0a 0a  verCorrupt==0)..
23860 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74 20 70 6f  /*.** Context po
23870 69 6e 74 65 72 20 70 61 73 73 65 64 20 64 6f 77  inter passed dow
23880 6e 20 74 68 72 6f 75 67 68 20 74 68 65 20 74 72  n through the tr
23890 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73 74 72 75  ee-walk..*/.stru
238a0 63 74 20 57 61 6c 6b 65 72 20 7b 0a 20 20 50 61  ct Walker {.  Pa
238b0 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20  rse *pParse;    
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 2f 2a 20 50 61 72 73 65          /* Parse
238e0 72 20 63 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a 20  r context.  */. 
238f0 20 69 6e 74 20 28 2a 78 45 78 70 72 43 61 6c 6c   int (*xExprCall
23900 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 20 45  back)(Walker*, E
23910 78 70 72 2a 29 3b 20 20 20 20 20 2f 2a 20 43 61  xpr*);     /* Ca
23920 6c 6c 62 61 63 6b 20 66 6f 72 20 65 78 70 72 65  llback for expre
23930 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20  ssions */.  int 
23940 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63  (*xSelectCallbac
23950 6b 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63  k)(Walker*,Selec
23960 74 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63  t*);  /* Callbac
23970 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f  k for SELECTs */
23980 0a 20 20 76 6f 69 64 20 28 2a 78 53 65 6c 65 63  .  void (*xSelec
23990 74 43 61 6c 6c 62 61 63 6b 32 29 28 57 61 6c 6b  tCallback2)(Walk
239a0 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 2f 2a 20  er*,Select*);/* 
239b0 53 65 63 6f 6e 64 20 63 61 6c 6c 62 61 63 6b 20  Second callback 
239c0 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20  for SELECTs */. 
239d0 20 69 6e 74 20 77 61 6c 6b 65 72 44 65 70 74 68   int walkerDepth
239e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
239f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
23a00 6d 62 65 72 20 6f 66 20 73 75 62 71 75 65 72 69  mber of subqueri
23a10 65 73 20 2a 2f 0a 20 20 75 38 20 65 43 6f 64 65  es */.  u8 eCode
23a20 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
23a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a40 20 20 2f 2a 20 41 20 73 6d 61 6c 6c 20 70 72 6f    /* A small pro
23a50 63 65 73 73 69 6e 67 20 63 6f 64 65 20 2a 2f 0a  cessing code */.
23a60 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20 20 20 20    union {       
23a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
23a90 78 74 72 61 20 64 61 74 61 20 66 6f 72 20 63 61  xtra data for ca
23aa0 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 20 20 4e 61  llback */.    Na
23ab0 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 43 3b 20  meContext *pNC; 
23ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ad0 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 69 6e          /* Namin
23ae0 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20  g context */.   
23af0 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20   int n;         
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 20 20 20 20 2f 2a 20 41 20             /* A 
23b20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 20 20 69  counter */.    i
23b30 6e 74 20 69 43 75 72 3b 20 20 20 20 20 20 20 20  nt iCur;        
23b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b50 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 63 75           /* A cu
23b60 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20  rsor number */. 
23b70 20 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63     SrcList *pSrc
23b80 4c 69 73 74 3b 20 20 20 20 20 20 20 20 20 20 20  List;           
23b90 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
23ba0 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20  FROM clause */. 
23bb0 20 20 20 73 74 72 75 63 74 20 53 72 63 43 6f 75     struct SrcCou
23bc0 6e 74 20 2a 70 53 72 63 43 6f 75 6e 74 3b 20 20  nt *pSrcCount;  
23bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
23be0 43 6f 75 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e 20  Counting column 
23bf0 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20  references */.  
23c00 20 20 73 74 72 75 63 74 20 43 43 75 72 48 69 6e    struct CCurHin
23c10 74 20 2a 70 43 43 75 72 48 69 6e 74 3b 20 20 20  t *pCCurHint;   
23c20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55              /* U
23c30 73 65 64 20 62 79 20 63 6f 64 65 43 75 72 73 6f  sed by codeCurso
23c40 72 48 69 6e 74 28 29 20 2a 2f 0a 20 20 20 20 69  rHint() */.    i
23c50 6e 74 20 2a 61 69 43 6f 6c 3b 20 20 20 20 20 20  nt *aiCol;      
23c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23c70 20 20 20 20 20 20 20 20 20 2f 2a 20 61 72 72 61           /* arra
23c80 79 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 64 65  y of column inde
23c90 78 65 73 20 2a 2f 0a 20 20 20 20 73 74 72 75 63  xes */.    struc
23ca0 74 20 49 64 78 43 6f 76 65 72 20 2a 70 49 64 78  t IdxCover *pIdx
23cb0 43 6f 76 65 72 3b 20 20 20 20 20 20 20 20 20 20  Cover;          
23cc0 20 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 66 6f       /* Check fo
23cd0 72 20 69 6e 64 65 78 20 63 6f 76 65 72 61 67 65  r index coverage
23ce0 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 49   */.    struct I
23cf0 64 78 45 78 70 72 54 72 61 6e 73 20 2a 70 49 64  dxExprTrans *pId
23d00 78 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20  xTrans;         
23d10 20 20 2f 2a 20 43 6f 6e 76 65 72 74 20 69 6e 64    /* Convert ind
23d20 65 78 65 64 20 65 78 70 72 20 74 6f 20 63 6f 6c  exed expr to col
23d30 75 6d 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c  umn */.    ExprL
23d40 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20  ist *pGroupBy;  
23d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d60 20 20 20 20 20 2f 2a 20 47 52 4f 55 50 20 42 59       /* GROUP BY
23d70 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 73   clause */.    s
23d80 74 72 75 63 74 20 48 61 76 69 6e 67 54 6f 57 68  truct HavingToWh
23d90 65 72 65 43 74 78 20 2a 70 48 61 76 69 6e 67 43  ereCtx *pHavingC
23da0 74 78 3b 20 20 20 20 20 20 2f 2a 20 48 41 56 49  tx;      /* HAVI
23db0 4e 47 20 74 6f 20 57 48 45 52 45 20 63 6c 61 75  NG to WHERE clau
23dc0 73 65 20 63 74 78 20 2a 2f 0a 20 20 7d 20 75 3b  se ctx */.  } u;
23dd0 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72 64 20  .};../* Forward 
23de0 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 2a 2f 0a  declarations */.
23df0 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45  int sqlite3WalkE
23e00 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70  xpr(Walker*, Exp
23e10 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
23e20 57 61 6c 6b 45 78 70 72 4c 69 73 74 28 57 61 6c  WalkExprList(Wal
23e30 6b 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  ker*, ExprList*)
23e40 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  ;.int sqlite3Wal
23e50 6b 53 65 6c 65 63 74 28 57 61 6c 6b 65 72 2a 2c  kSelect(Walker*,
23e60 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73   Select*);.int s
23e70 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74  qlite3WalkSelect
23e80 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 53 65  Expr(Walker*, Se
23e90 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lect*);.int sqli
23ea0 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 46 72 6f  te3WalkSelectFro
23eb0 6d 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63  m(Walker*, Selec
23ec0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
23ed0 45 78 70 72 57 61 6c 6b 4e 6f 6f 70 28 57 61 6c  ExprWalkNoop(Wal
23ee0 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e  ker*, Expr*);.in
23ef0 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57  t sqlite3SelectW
23f00 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65 72 2a 2c  alkNoop(Walker*,
23f10 20 53 65 6c 65 63 74 2a 29 3b 0a 23 69 66 64 65   Select*);.#ifde
23f20 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 76  f SQLITE_DEBUG.v
23f30 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63  oid sqlite3Selec
23f40 74 57 61 6c 6b 41 73 73 65 72 74 32 28 57 61 6c  tWalkAssert2(Wal
23f50 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  ker*, Select*);.
23f60 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65  #endif../*.** Re
23f70 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 74  turn code from t
23f80 68 65 20 70 61 72 73 65 2d 74 72 65 65 20 77 61  he parse-tree wa
23f90 6c 6b 69 6e 67 20 70 72 69 6d 69 74 69 76 65 73  lking primitives
23fa0 20 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20 63 61   and their.** ca
23fb0 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66  llbacks..*/.#def
23fc0 69 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e 75 65  ine WRC_Continue
23fd0 20 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e 74 69      0   /* Conti
23fe0 6e 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20 63 68  nue down into ch
23ff0 69 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  ildren */.#defin
24000 65 20 57 52 43 5f 50 72 75 6e 65 20 20 20 20 20  e WRC_Prune     
24010 20 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20 63 68    1   /* Omit ch
24020 69 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e 74 69  ildren but conti
24030 6e 75 65 20 77 61 6c 6b 69 6e 67 20 73 69 62 6c  nue walking sibl
24040 69 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ings */.#define 
24050 57 52 43 5f 41 62 6f 72 74 20 20 20 20 20 20 20  WRC_Abort       
24060 32 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e 20 74  2   /* Abandon t
24070 68 65 20 74 72 65 65 20 77 61 6c 6b 20 2a 2f 0a  he tree walk */.
24080 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
24090 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ce of this struc
240a0 74 75 72 65 20 72 65 70 72 65 73 65 6e 74 73 20  ture represents 
240b0 61 20 73 65 74 20 6f 66 20 6f 6e 65 20 6f 72 20  a set of one or 
240c0 6d 6f 72 65 20 43 54 45 73 0a 2a 2a 20 28 63 6f  more CTEs.** (co
240d0 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65  mmon table expre
240e0 73 73 69 6f 6e 73 29 20 63 72 65 61 74 65 64 20  ssions) created 
240f0 62 79 20 61 20 73 69 6e 67 6c 65 20 57 49 54 48  by a single WITH
24100 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75   clause..*/.stru
24110 63 74 20 57 69 74 68 20 7b 0a 20 20 69 6e 74 20  ct With {.  int 
24120 6e 43 74 65 3b 20 20 20 20 20 20 20 20 20 20 20  nCte;           
24130 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
24140 75 6d 62 65 72 20 6f 66 20 43 54 45 73 20 69 6e  umber of CTEs in
24150 20 74 68 65 20 57 49 54 48 20 63 6c 61 75 73 65   the WITH clause
24160 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 4f 75 74   */.  With *pOut
24170 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  er;             
24180 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e        /* Contain
24190 69 6e 67 20 57 49 54 48 20 63 6c 61 75 73 65 2c  ing WITH clause,
241a0 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74   or NULL */.  st
241b0 72 75 63 74 20 43 74 65 20 7b 20 20 20 20 20 20  ruct Cte {      
241c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
241d0 20 46 6f 72 20 65 61 63 68 20 43 54 45 20 69 6e   For each CTE in
241e0 20 74 68 65 20 57 49 54 48 20 63 6c 61 75 73 65   the WITH clause
241f0 2e 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72  .... */.    char
24200 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
24210 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
24220 61 6d 65 20 6f 66 20 74 68 69 73 20 43 54 45 20  ame of this CTE 
24230 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20  */.    ExprList 
24240 2a 70 43 6f 6c 73 3b 20 20 20 20 20 20 20 20 20  *pCols;         
24250 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f         /* List o
24260 66 20 65 78 70 6c 69 63 69 74 20 63 6f 6c 75 6d  f explicit colum
24270 6e 20 6e 61 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c  n names, or NULL
24280 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a   */.    Select *
24290 70 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20  pSelect;        
242a0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64          /* The d
242b0 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74 68 69  efinition of thi
242c0 73 20 43 54 45 20 2a 2f 0a 20 20 20 20 63 6f 6e  s CTE */.    con
242d0 73 74 20 63 68 61 72 20 2a 7a 43 74 65 45 72 72  st char *zCteErr
242e0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
242f0 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20 66 6f  Error message fo
24300 72 20 63 69 72 63 75 6c 61 72 20 72 65 66 65 72  r circular refer
24310 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 61 5b 31  ences */.  } a[1
24320 5d 3b 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51  ];.};..#ifdef SQ
24330 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a  LITE_DEBUG./*.**
24340 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
24350 74 68 65 20 54 72 65 65 56 69 65 77 20 6f 62 6a  the TreeView obj
24360 65 63 74 20 69 73 20 75 73 65 64 20 66 6f 72 20  ect is used for 
24370 70 72 69 6e 74 69 6e 67 20 74 68 65 20 63 6f 6e  printing the con
24380 74 65 6e 74 20 6f 66 0a 2a 2a 20 64 61 74 61 20  tent of.** data 
24390 73 74 72 75 63 74 75 72 65 73 20 6f 6e 20 73 71  structures on sq
243a0 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66  lite3DebugPrintf
243b0 28 29 20 75 73 69 6e 67 20 61 20 74 72 65 65 2d  () using a tree-
243c0 6c 69 6b 65 20 76 69 65 77 2e 0a 2a 2f 0a 73 74  like view..*/.st
243d0 72 75 63 74 20 54 72 65 65 56 69 65 77 20 7b 0a  ruct TreeView {.
243e0 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20    int iLevel;   
243f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69            /* Whi
24400 63 68 20 6c 65 76 65 6c 20 6f 66 20 74 68 65 20  ch level of the 
24410 74 72 65 65 20 77 65 20 61 72 65 20 6f 6e 20 2a  tree we are on *
24420 2f 0a 20 20 75 38 20 20 62 4c 69 6e 65 5b 31 30  /.  u8  bLine[10
24430 30 5d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44  0];         /* D
24440 72 61 77 20 76 65 72 74 69 63 61 6c 20 69 6e 20  raw vertical in 
24450 63 6f 6c 75 6d 6e 20 69 20 69 66 20 62 4c 69 6e  column i if bLin
24460 65 5b 69 5d 20 69 73 20 74 72 75 65 20 2a 2f 0a  e[i] is true */.
24470 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  };.#endif /* SQL
24480 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 0a 2f 2a  ITE_DEBUG */../*
24490 0a 2a 2a 20 41 73 73 75 6d 69 6e 67 20 7a 49 6e  .** Assuming zIn
244a0 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66   points to the f
244b0 69 72 73 74 20 62 79 74 65 20 6f 66 20 61 20 55  irst byte of a U
244c0 54 46 2d 38 20 63 68 61 72 61 63 74 65 72 2c 0a  TF-8 character,.
244d0 2a 2a 20 61 64 76 61 6e 63 65 20 7a 49 6e 20 74  ** advance zIn t
244e0 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 66  o point to the f
244f0 69 72 73 74 20 62 79 74 65 20 6f 66 20 74 68 65  irst byte of the
24500 20 6e 65 78 74 20 55 54 46 2d 38 20 63 68 61 72   next UTF-8 char
24510 61 63 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  acter..*/.#defin
24520 65 20 53 51 4c 49 54 45 5f 53 4b 49 50 5f 55 54  e SQLITE_SKIP_UT
24530 46 38 28 7a 49 6e 29 20 7b 20 20 20 20 20 20 20  F8(zIn) {       
24540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24550 20 5c 0a 20 20 69 66 28 20 28 2a 28 7a 49 6e 2b   \.  if( (*(zIn+
24560 2b 29 29 3e 3d 30 78 63 30 20 29 7b 20 20 20 20  +))>=0xc0 ){    
24570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24580 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20            \.    
24590 77 68 69 6c 65 28 20 28 2a 7a 49 6e 20 26 20 30  while( (*zIn & 0
245a0 78 63 30 29 3d 3d 30 78 38 30 20 29 7b 20 7a 49  xc0)==0x80 ){ zI
245b0 6e 2b 2b 3b 20 7d 20 20 20 20 20 20 20 20 20 20  n++; }          
245c0 20 20 20 5c 0a 20 20 7d 20 20 20 20 20 20 20 20     \.  }        
245d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
245e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
245f0 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 7d 0a              \.}.
24600 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54  ./*.** The SQLIT
24610 45 5f 2a 5f 42 4b 50 54 20 6d 61 63 72 6f 73 20  E_*_BKPT macros 
24620 61 72 65 20 73 75 62 73 74 69 74 75 74 65 73 20  are substitutes 
24630 66 6f 72 20 74 68 65 20 65 72 72 6f 72 20 63 6f  for the error co
24640 64 65 73 20 77 69 74 68 0a 2a 2a 20 74 68 65 20  des with.** the 
24650 73 61 6d 65 20 6e 61 6d 65 20 62 75 74 20 77 69  same name but wi
24660 74 68 6f 75 74 20 74 68 65 20 5f 42 4b 50 54 20  thout the _BKPT 
24670 73 75 66 66 69 78 2e 20 20 54 68 65 73 65 20 6d  suffix.  These m
24680 61 63 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a 2a 20  acros invoke.** 
24690 72 6f 75 74 69 6e 65 73 20 74 68 61 74 20 72 65  routines that re
246a0 70 6f 72 74 20 74 68 65 20 6c 69 6e 65 2d 6e 75  port the line-nu
246b0 6d 62 65 72 20 6f 6e 20 77 68 69 63 68 20 74 68  mber on which th
246c0 65 20 65 72 72 6f 72 20 6f 72 69 67 69 6e 61 74  e error originat
246d0 65 64 0a 2a 2a 20 75 73 69 6e 67 20 73 71 6c 69  ed.** using sqli
246e0 74 65 33 5f 6c 6f 67 28 29 2e 20 20 54 68 65 20  te3_log().  The 
246f0 72 6f 75 74 69 6e 65 73 20 61 6c 73 6f 20 70 72  routines also pr
24700 6f 76 69 64 65 20 61 20 63 6f 6e 76 65 6e 69 65  ovide a convenie
24710 6e 74 20 70 6c 61 63 65 0a 2a 2a 20 74 6f 20 73  nt place.** to s
24720 65 74 20 61 20 64 65 62 75 67 67 65 72 20 62 72  et a debugger br
24730 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e 74  eakpoint..*/.int
24740 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45   sqlite3CorruptE
24750 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73  rror(int);.int s
24760 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f  qlite3MisuseErro
24770 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  r(int);.int sqli
24780 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72  te3CantopenError
24790 28 69 6e 74 29 3b 0a 23 64 65 66 69 6e 65 20 53  (int);.#define S
247a0 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b  QLITE_CORRUPT_BK
247b0 50 54 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70  PT sqlite3Corrup
247c0 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29  tError(__LINE__)
247d0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
247e0 4d 49 53 55 53 45 5f 42 4b 50 54 20 73 71 6c 69  MISUSE_BKPT sqli
247f0 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28 5f  te3MisuseError(_
24800 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65  _LINE__).#define
24810 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e   SQLITE_CANTOPEN
24820 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43 61 6e  _BKPT sqlite3Can
24830 74 6f 70 65 6e 45 72 72 6f 72 28 5f 5f 4c 49 4e  topenError(__LIN
24840 45 5f 5f 29 0a 23 69 66 64 65 66 20 53 51 4c 49  E__).#ifdef SQLI
24850 54 45 5f 44 45 42 55 47 0a 20 20 69 6e 74 20 73  TE_DEBUG.  int s
24860 71 6c 69 74 65 33 4e 6f 6d 65 6d 45 72 72 6f 72  qlite3NomemError
24870 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c  (int);.  int sql
24880 69 74 65 33 49 6f 65 72 72 6e 6f 6d 65 6d 45 72  ite3IoerrnomemEr
24890 72 6f 72 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20  ror(int);.  int 
248a0 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 50 67  sqlite3CorruptPg
248b0 6e 6f 45 72 72 6f 72 28 69 6e 74 2c 50 67 6e 6f  noError(int,Pgno
248c0 29 3b 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  );.# define SQLI
248d0 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 73 71  TE_NOMEM_BKPT sq
248e0 6c 69 74 65 33 4e 6f 6d 65 6d 45 72 72 6f 72 28  lite3NomemError(
248f0 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 20 64 65 66 69  __LINE__).# defi
24900 6e 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f  ne SQLITE_IOERR_
24910 4e 4f 4d 45 4d 5f 42 4b 50 54 20 73 71 6c 69 74  NOMEM_BKPT sqlit
24920 65 33 49 6f 65 72 72 6e 6f 6d 65 6d 45 72 72 6f  e3IoerrnomemErro
24930 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 20 64 65  r(__LINE__).# de
24940 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52  fine SQLITE_CORR
24950 55 50 54 5f 50 47 4e 4f 28 50 29 20 73 71 6c 69  UPT_PGNO(P) sqli
24960 74 65 33 43 6f 72 72 75 70 74 50 67 6e 6f 45 72  te3CorruptPgnoEr
24970 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 2c 28 50 29  ror(__LINE__,(P)
24980 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
24990 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b   SQLITE_NOMEM_BK
249a0 50 54 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 0a  PT SQLITE_NOMEM.
249b0 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
249c0 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54  IOERR_NOMEM_BKPT
249d0 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f   SQLITE_IOERR_NO
249e0 4d 45 4d 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  MEM.# define SQL
249f0 49 54 45 5f 43 4f 52 52 55 50 54 5f 50 47 4e 4f  ITE_CORRUPT_PGNO
24a00 28 50 29 20 73 71 6c 69 74 65 33 43 6f 72 72 75  (P) sqlite3Corru
24a10 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f  ptError(__LINE__
24a20 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
24a30 46 54 53 33 20 61 6e 64 20 46 54 53 34 20 62 6f  FTS3 and FTS4 bo
24a40 74 68 20 72 65 71 75 69 72 65 20 76 69 72 74 75  th require virtu
24a50 61 6c 20 74 61 62 6c 65 20 73 75 70 70 6f 72 74  al table support
24a60 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
24a70 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
24a80 55 41 4c 54 41 42 4c 45 29 0a 23 20 75 6e 64 65  UALTABLE).# unde
24a90 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
24aa0 46 54 53 33 0a 23 20 75 6e 64 65 66 20 53 51 4c  FTS3.# undef SQL
24ab0 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 0a  ITE_ENABLE_FTS4.
24ac0 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 54  #endif../*.** FT
24ad0 53 34 20 69 73 20 72 65 61 6c 6c 79 20 61 6e 20  S4 is really an 
24ae0 65 78 74 65 6e 73 69 6f 6e 20 66 6f 72 20 46 54  extension for FT
24af0 53 33 2e 20 20 49 74 20 69 73 20 65 6e 61 62 6c  S3.  It is enabl
24b00 65 64 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20  ed using the.** 
24b10 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
24b20 53 33 20 6d 61 63 72 6f 2e 20 20 42 75 74 20 74  S3 macro.  But t
24b30 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f  o avoid confusio
24b40 6e 20 77 65 20 61 6c 73 6f 20 63 61 6c 6c 0a 2a  n we also call.*
24b50 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41  * the SQLITE_ENA
24b60 42 4c 45 5f 46 54 53 34 20 6d 61 63 72 6f 20 74  BLE_FTS4 macro t
24b70 6f 20 73 65 72 76 65 20 61 73 20 61 6e 20 61 6c  o serve as an al
24b80 69 61 73 20 66 6f 72 20 53 51 4c 49 54 45 5f 45  ias for SQLITE_E
24b90 4e 41 42 4c 45 5f 46 54 53 33 2e 0a 2a 2f 0a 23  NABLE_FTS3..*/.#
24ba0 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
24bb0 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 29 20 26  E_ENABLE_FTS4) &
24bc0 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
24bd0 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 0a 23  E_ENABLE_FTS3).#
24be0 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45   define SQLITE_E
24bf0 4e 41 42 4c 45 5f 46 54 53 33 20 31 0a 23 65 6e  NABLE_FTS3 1.#en
24c00 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63  dif../*.** The c
24c10 74 79 70 65 2e 68 20 68 65 61 64 65 72 20 69 73  type.h header is
24c20 20 6e 65 65 64 65 64 20 66 6f 72 20 6e 6f 6e 2d   needed for non-
24c30 41 53 43 49 49 20 73 79 73 74 65 6d 73 2e 20 20  ASCII systems.  
24c40 49 74 20 69 73 20 61 6c 73 6f 0a 2a 2a 20 6e 65  It is also.** ne
24c50 65 64 65 64 20 62 79 20 46 54 53 33 20 77 68 65  eded by FTS3 whe
24c60 6e 20 46 54 53 33 20 69 73 20 69 6e 63 6c 75 64  n FTS3 is includ
24c70 65 64 20 69 6e 20 74 68 65 20 61 6d 61 6c 67 61  ed in the amalga
24c80 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 21  mation..*/.#if !
24c90 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41  defined(SQLITE_A
24ca0 53 43 49 49 29 20 7c 7c 20 5c 0a 20 20 20 20 28  SCII) || \.    (
24cb0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
24cc0 4e 41 42 4c 45 5f 46 54 53 33 29 20 26 26 20 64  NABLE_FTS3) && d
24cd0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 4d  efined(SQLITE_AM
24ce0 41 4c 47 41 4d 41 54 49 4f 4e 29 29 0a 23 20 69  ALGAMATION)).# i
24cf0 6e 63 6c 75 64 65 20 3c 63 74 79 70 65 2e 68 3e  nclude <ctype.h>
24d00 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
24d10 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
24d20 72 6f 73 20 6d 69 6d 69 63 20 74 68 65 20 73 74  ros mimic the st
24d30 61 6e 64 61 72 64 20 6c 69 62 72 61 72 79 20 66  andard library f
24d40 75 6e 63 74 69 6f 6e 73 20 74 6f 75 70 70 65 72  unctions toupper
24d50 28 29 2c 0a 2a 2a 20 69 73 73 70 61 63 65 28 29  (),.** isspace()
24d60 2c 20 69 73 61 6c 6e 75 6d 28 29 2c 20 69 73 64  , isalnum(), isd
24d70 69 67 69 74 28 29 20 61 6e 64 20 69 73 78 64 69  igit() and isxdi
24d80 67 69 74 28 29 2c 20 72 65 73 70 65 63 74 69 76  git(), respectiv
24d90 65 6c 79 2e 20 54 68 65 0a 2a 2a 20 73 71 6c 69  ely. The.** sqli
24da0 74 65 20 76 65 72 73 69 6f 6e 73 20 6f 6e 6c 79  te versions only
24db0 20 77 6f 72 6b 20 66 6f 72 20 41 53 43 49 49 20   work for ASCII 
24dc0 63 68 61 72 61 63 74 65 72 73 2c 20 72 65 67 61  characters, rega
24dd0 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63 61 6c 65  rdless of locale
24de0 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
24df0 54 45 5f 41 53 43 49 49 0a 23 20 64 65 66 69 6e  TE_ASCII.# defin
24e00 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72  e sqlite3Toupper
24e10 28 78 29 20 20 28 28 78 29 26 7e 28 73 71 6c 69  (x)  ((x)&~(sqli
24e20 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
24e30 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
24e40 30 78 32 30 29 29 0a 23 20 64 65 66 69 6e 65 20  0x20)).# define 
24e50 73 71 6c 69 74 65 33 49 73 73 70 61 63 65 28 78  sqlite3Isspace(x
24e60 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
24e70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
24e80 68 61 72 29 28 78 29 5d 26 30 78 30 31 29 0a 23  har)(x)]&0x01).#
24e90 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
24ea0 73 61 6c 6e 75 6d 28 78 29 20 20 20 28 73 71 6c  salnum(x)   (sql
24eb0 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
24ec0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
24ed0 26 30 78 30 36 29 0a 23 20 64 65 66 69 6e 65 20  &0x06).# define 
24ee0 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78  sqlite3Isalpha(x
24ef0 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
24f00 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
24f10 68 61 72 29 28 78 29 5d 26 30 78 30 32 29 0a 23  har)(x)]&0x02).#
24f20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
24f30 73 64 69 67 69 74 28 78 29 20 20 20 28 73 71 6c  sdigit(x)   (sql
24f40 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
24f50 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
24f60 26 30 78 30 34 29 0a 23 20 64 65 66 69 6e 65 20  &0x04).# define 
24f70 73 71 6c 69 74 65 33 49 73 78 64 69 67 69 74 28  sqlite3Isxdigit(
24f80 78 29 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  x)  (sqlite3Ctyp
24f90 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
24fa0 68 61 72 29 28 78 29 5d 26 30 78 30 38 29 0a 23  har)(x)]&0x08).#
24fb0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
24fc0 6f 6c 6f 77 65 72 28 78 29 20 20 20 28 73 71 6c  olower(x)   (sql
24fd0 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72  ite3UpperToLower
24fe0 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
24ff0 28 78 29 5d 29 0a 23 20 64 65 66 69 6e 65 20 73  (x)]).# define s
25000 71 6c 69 74 65 33 49 73 71 75 6f 74 65 28 78 29  qlite3Isquote(x)
25010 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65     (sqlite3Ctype
25020 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
25030 61 72 29 28 78 29 5d 26 30 78 38 30 29 0a 23 65  ar)(x)]&0x80).#e
25040 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
25050 69 74 65 33 54 6f 75 70 70 65 72 28 78 29 20 20  ite3Toupper(x)  
25060 20 74 6f 75 70 70 65 72 28 28 75 6e 73 69 67 6e   toupper((unsign
25070 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
25080 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73  efine sqlite3Iss
25090 70 61 63 65 28 78 29 20 20 20 69 73 73 70 61 63  pace(x)   isspac
250a0 65 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  e((unsigned char
250b0 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
250c0 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29  qlite3Isalnum(x)
250d0 20 20 20 69 73 61 6c 6e 75 6d 28 28 75 6e 73 69     isalnum((unsi
250e0 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
250f0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
25100 73 61 6c 70 68 61 28 78 29 20 20 20 69 73 61 6c  salpha(x)   isal
25110 70 68 61 28 28 75 6e 73 69 67 6e 65 64 20 63 68  pha((unsigned ch
25120 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
25130 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28   sqlite3Isdigit(
25140 78 29 20 20 20 69 73 64 69 67 69 74 28 28 75 6e  x)   isdigit((un
25150 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
25160 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
25170 33 49 73 78 64 69 67 69 74 28 78 29 20 20 69 73  3Isxdigit(x)  is
25180 78 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64  xdigit((unsigned
25190 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
251a0 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77  ine sqlite3Tolow
251b0 65 72 28 78 29 20 20 20 74 6f 6c 6f 77 65 72 28  er(x)   tolower(
251c0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
251d0 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
251e0 69 74 65 33 49 73 71 75 6f 74 65 28 78 29 20 20  ite3Isquote(x)  
251f0 20 28 28 78 29 3d 3d 27 22 27 7c 7c 28 78 29 3d   ((x)=='"'||(x)=
25200 3d 27 5c 27 27 7c 7c 28 78 29 3d 3d 27 5b 27 7c  ='\''||(x)=='['|
25210 7c 28 78 29 3d 3d 27 60 27 29 0a 23 65 6e 64 69  |(x)=='`').#endi
25220 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
25230 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54  _OMIT_COMPILEOPT
25240 49 4f 4e 5f 44 49 41 47 53 0a 69 6e 74 20 73 71  ION_DIAGS.int sq
25250 6c 69 74 65 33 49 73 49 64 43 68 61 72 28 75 38  lite3IsIdChar(u8
25260 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  );.#endif../*.**
25270 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74 69   Internal functi
25280 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a 2a 2f  on prototypes.*/
25290 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72 49  .int sqlite3StrI
252a0 43 6d 70 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  Cmp(const char*,
252b0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e  const char*);.in
252c0 74 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  t sqlite3Strlen3
252d0 30 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  0(const char*);.
252e0 63 68 61 72 20 2a 73 71 6c 69 74 65 33 43 6f 6c  char *sqlite3Col
252f0 75 6d 6e 54 79 70 65 28 43 6f 6c 75 6d 6e 2a 2c  umnType(Column*,
25300 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20  char*);.#define 
25310 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 20  sqlite3StrNICmp 
25320 73 71 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d 70  sqlite3_strnicmp
25330 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c  ..int sqlite3Mal
25340 6c 6f 63 49 6e 69 74 28 76 6f 69 64 29 3b 0a 76  locInit(void);.v
25350 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  oid sqlite3Mallo
25360 63 45 6e 64 28 76 6f 69 64 29 3b 0a 76 6f 69 64  cEnd(void);.void
25370 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28   *sqlite3Malloc(
25380 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  u64);.void *sqli
25390 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28 75 36  te3MallocZero(u6
253a0 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  4);.void *sqlite
253b0 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 73 71  3DbMallocZero(sq
253c0 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 76 6f  lite3*, u64);.vo
253d0 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c  id *sqlite3DbMal
253e0 6c 6f 63 52 61 77 28 73 71 6c 69 74 65 33 2a 2c  locRaw(sqlite3*,
253f0 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c   u64);.void *sql
25400 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e  ite3DbMallocRawN
25410 4e 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29  N(sqlite3*, u64)
25420 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44  ;.char *sqlite3D
25430 62 53 74 72 44 75 70 28 73 71 6c 69 74 65 33 2a  bStrDup(sqlite3*
25440 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63  ,const char*);.c
25450 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74  har *sqlite3DbSt
25460 72 4e 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63  rNDup(sqlite3*,c
25470 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75 36 34 29  onst char*, u64)
25480 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 52  ;.void *sqlite3R
25490 65 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20 75 36  ealloc(void*, u6
254a0 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  4);.void *sqlite
254b0 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46 72 65 65  3DbReallocOrFree
254c0 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64  (sqlite3 *, void
254d0 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a   *, u64);.void *
254e0 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63  sqlite3DbRealloc
254f0 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64  (sqlite3 *, void
25500 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 73   *, u64);.void s
25510 71 6c 69 74 65 33 44 62 46 72 65 65 28 73 71 6c  qlite3DbFree(sql
25520 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76  ite3*, void*);.v
25530 6f 69 64 20 73 71 6c 69 74 65 33 44 62 46 72 65  oid sqlite3DbFre
25540 65 4e 4e 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f  eNN(sqlite3*, vo
25550 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  id*);.int sqlite
25560 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f 69 64  3MallocSize(void
25570 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44  *);.int sqlite3D
25580 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71 6c 69  bMallocSize(sqli
25590 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f  te3*, void*);.vo
255a0 69 64 20 2a 73 71 6c 69 74 65 33 53 63 72 61 74  id *sqlite3Scrat
255b0 63 68 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76  chMalloc(int);.v
255c0 6f 69 64 20 73 71 6c 69 74 65 33 53 63 72 61 74  oid sqlite3Scrat
255d0 63 68 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76  chFree(void*);.v
255e0 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61 67 65  oid *sqlite3Page
255f0 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69  Malloc(int);.voi
25600 64 20 73 71 6c 69 74 65 33 50 61 67 65 46 72 65  d sqlite3PageFre
25610 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73  e(void*);.void s
25620 71 6c 69 74 65 33 4d 65 6d 53 65 74 44 65 66 61  qlite3MemSetDefa
25630 75 6c 74 28 76 6f 69 64 29 3b 0a 23 69 66 6e 64  ult(void);.#ifnd
25640 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54  ef SQLITE_UNTEST
25650 41 42 4c 45 0a 76 6f 69 64 20 73 71 6c 69 74 65  ABLE.void sqlite
25660 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f 6f  3BenignMallocHoo
25670 6b 73 28 76 6f 69 64 20 28 2a 29 28 76 6f 69 64  ks(void (*)(void
25680 29 2c 20 76 6f 69 64 20 28 2a 29 28 76 6f 69 64  ), void (*)(void
25690 29 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73  ));.#endif.int s
256a0 71 6c 69 74 65 33 48 65 61 70 4e 65 61 72 6c 79  qlite3HeapNearly
256b0 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a 0a  Full(void);../*.
256c0 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20 77 69  ** On systems wi
256d0 74 68 20 61 6d 70 6c 65 20 73 74 61 63 6b 20 73  th ample stack s
256e0 70 61 63 65 20 61 6e 64 20 74 68 61 74 20 73 75  pace and that su
256f0 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c 20  pport alloca(), 
25700 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20 61  make.** use of a
25710 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74 61 69  lloca() to obtai
25720 6e 20 73 70 61 63 65 20 66 6f 72 20 6c 61 72 67  n space for larg
25730 65 20 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a 65  e automatic obje
25740 63 74 73 2e 20 20 42 79 20 64 65 66 61 75 6c 74  cts.  By default
25750 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61 63  ,.** obtain spac
25760 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e  e from malloc().
25770 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f 63  .**.** The alloc
25780 61 28 29 20 72 6f 75 74 69 6e 65 20 6e 65 76 65  a() routine neve
25790 72 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e 20  r returns NULL. 
257a0 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65   This will cause
257b0 20 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20 74   code paths.** t
257c0 68 61 74 20 64 65 61 6c 20 77 69 74 68 20 73 71  hat deal with sq
257d0 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 28  lite3StackAlloc(
257e0 29 20 66 61 69 6c 75 72 65 73 20 74 6f 20 62 65  ) failures to be
257f0 20 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a 2f   unreachable..*/
25800 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55  .#ifdef SQLITE_U
25810 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66 69  SE_ALLOCA.# defi
25820 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
25830 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 61  llocRaw(D,N)   a
25840 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66 69 6e  lloca(N).# defin
25850 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  e sqlite3StackAl
25860 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d 65  locZero(D,N)  me
25870 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c 20  mset(alloca(N), 
25880 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65 20 73  0, N).# define s
25890 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65 28  qlite3StackFree(
258a0 44 2c 50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  D,P).#else.# def
258b0 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
258c0 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20  AllocRaw(D,N)   
258d0 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52  sqlite3DbMallocR
258e0 61 77 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65  aw(D,N).# define
258f0 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
25900 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 73 71 6c  ocZero(D,N)  sql
25910 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f  ite3DbMallocZero
25920 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73  (D,N).# define s
25930 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65 28  qlite3StackFree(
25940 44 2c 50 29 20 20 20 20 20 20 20 73 71 6c 69 74  D,P)       sqlit
25950 65 33 44 62 46 72 65 65 28 44 2c 50 29 0a 23 65  e3DbFree(D,P).#e
25960 6e 64 69 66 0a 0a 2f 2a 20 44 6f 20 6e 6f 74 20  ndif../* Do not 
25970 61 6c 6c 6f 77 20 62 6f 74 68 20 4d 45 4d 53 59  allow both MEMSY
25980 53 35 20 61 6e 64 20 4d 45 4d 53 59 53 33 20 74  S5 and MEMSYS3 t
25990 6f 20 62 65 20 64 65 66 69 6e 65 64 20 74 6f 67  o be defined tog
259a0 65 74 68 65 72 2e 20 20 49 66 20 74 68 65 79 0a  ether.  If they.
259b0 2a 2a 20 61 72 65 2c 20 64 69 73 61 62 6c 65 20  ** are, disable 
259c0 4d 45 4d 53 59 53 33 0a 2a 2f 0a 23 69 66 64 65  MEMSYS3.*/.#ifde
259d0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
259e0 4d 45 4d 53 59 53 35 0a 63 6f 6e 73 74 20 73 71  MEMSYS5.const sq
259f0 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64  lite3_mem_method
25a00 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74  s *sqlite3MemGet
25a10 4d 65 6d 73 79 73 35 28 76 6f 69 64 29 3b 0a 23  Memsys5(void);.#
25a20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  undef SQLITE_ENA
25a30 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 23 65 6e 64  BLE_MEMSYS3.#end
25a40 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  if.#ifdef SQLITE
25a50 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a  _ENABLE_MEMSYS3.
25a60 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65  const sqlite3_me
25a70 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74  m_methods *sqlit
25a80 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 33 28  e3MemGetMemsys3(
25a90 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a  void);.#endif...
25aa0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d  #ifndef SQLITE_M
25ab0 55 54 45 58 5f 4f 4d 49 54 0a 20 20 73 71 6c 69  UTEX_OMIT.  sqli
25ac0 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64  te3_mutex_method
25ad0 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33  s const *sqlite3
25ae0 44 65 66 61 75 6c 74 4d 75 74 65 78 28 76 6f 69  DefaultMutex(voi
25af0 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75  d);.  sqlite3_mu
25b00 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73  tex_methods cons
25b10 74 20 2a 73 71 6c 69 74 65 33 4e 6f 6f 70 4d 75  t *sqlite3NoopMu
25b20 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c  tex(void);.  sql
25b30 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69  ite3_mutex *sqli
25b40 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28 69 6e  te3MutexAlloc(in
25b50 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  t);.  int sqlite
25b60 33 4d 75 74 65 78 49 6e 69 74 28 76 6f 69 64 29  3MutexInit(void)
25b70 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
25b80 75 74 65 78 45 6e 64 28 76 6f 69 64 29 3b 0a 23  utexEnd(void);.#
25b90 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e  endif.#if !defin
25ba0 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f  ed(SQLITE_MUTEX_
25bb0 4f 4d 49 54 29 20 26 26 20 21 64 65 66 69 6e 65  OMIT) && !define
25bc0 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4e  d(SQLITE_MUTEX_N
25bd0 4f 4f 50 29 0a 20 20 76 6f 69 64 20 73 71 6c 69  OOP).  void sqli
25be0 74 65 33 4d 65 6d 6f 72 79 42 61 72 72 69 65 72  te3MemoryBarrier
25bf0 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 23 20  (void);.#else.# 
25c00 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65  define sqlite3Me
25c10 6d 6f 72 79 42 61 72 72 69 65 72 28 29 0a 23 65  moryBarrier().#e
25c20 6e 64 69 66 0a 0a 73 71 6c 69 74 65 33 5f 69 6e  ndif..sqlite3_in
25c30 74 36 34 20 73 71 6c 69 74 65 33 53 74 61 74 75  t64 sqlite3Statu
25c40 73 56 61 6c 75 65 28 69 6e 74 29 3b 0a 76 6f 69  sValue(int);.voi
25c50 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 55  d sqlite3StatusU
25c60 70 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  p(int, int);.voi
25c70 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 44  d sqlite3StatusD
25c80 6f 77 6e 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  own(int, int);.v
25c90 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75  oid sqlite3Statu
25ca0 73 48 69 67 68 77 61 74 65 72 28 69 6e 74 2c 20  sHighwater(int, 
25cb0 69 6e 74 29 3b 0a 0a 2f 2a 20 41 63 63 65 73 73  int);../* Access
25cc0 20 74 6f 20 6d 75 74 65 78 65 73 20 75 73 65 64   to mutexes used
25cd0 20 62 79 20 73 71 6c 69 74 65 33 5f 73 74 61 74   by sqlite3_stat
25ce0 75 73 28 29 20 2a 2f 0a 73 71 6c 69 74 65 33 5f  us() */.sqlite3_
25cf0 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33 50 63  mutex *sqlite3Pc
25d00 61 63 68 65 31 4d 75 74 65 78 28 76 6f 69 64 29  ache1Mutex(void)
25d10 3b 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20  ;.sqlite3_mutex 
25d20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 4d 75  *sqlite3MallocMu
25d30 74 65 78 28 76 6f 69 64 29 3b 0a 0a 23 69 66 6e  tex(void);..#ifn
25d40 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
25d50 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20  FLOATING_POINT. 
25d60 20 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4e 61   int sqlite3IsNa
25d70 4e 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6c 73 65  N(double);.#else
25d80 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
25d90 33 49 73 4e 61 4e 28 58 29 20 20 30 0a 23 65 6e  3IsNaN(X)  0.#en
25da0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  dif../*.** An in
25db0 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
25dc0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
25dd0 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74  e holds informat
25de0 69 6f 6e 20 61 62 6f 75 74 20 53 51 4c 0a 2a 2a  ion about SQL.**
25df0 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 67 75 6d   functions argum
25e00 65 6e 74 73 20 74 68 61 74 20 61 72 65 20 74 68  ents that are th
25e10 65 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 20  e parameters to 
25e20 74 68 65 20 70 72 69 6e 74 66 28 29 20 66 75 6e  the printf() fun
25e30 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  ction..*/.struct
25e40 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73   PrintfArguments
25e50 20 7b 0a 20 20 69 6e 74 20 6e 41 72 67 3b 20 20   {.  int nArg;  
25e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
25e70 20 54 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   Total number of
25e80 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20   arguments */.  
25e90 69 6e 74 20 6e 55 73 65 64 3b 20 20 20 20 20 20  int nUsed;      
25ea0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
25eb0 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
25ec0 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20  used so far */. 
25ed0 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
25ee0 2a 61 70 41 72 67 3b 20 20 20 2f 2a 20 54 68 65  *apArg;   /* The
25ef0 20 61 72 67 75 6d 65 6e 74 20 76 61 6c 75 65 73   argument values
25f00 20 2a 2f 0a 7d 3b 0a 0a 76 6f 69 64 20 73 71 6c   */.};..void sql
25f10 69 74 65 33 56 58 50 72 69 6e 74 66 28 53 74 72  ite3VXPrintf(Str
25f20 41 63 63 75 6d 2a 2c 20 63 6f 6e 73 74 20 63 68  Accum*, const ch
25f30 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 76  ar*, va_list);.v
25f40 6f 69 64 20 73 71 6c 69 74 65 33 58 50 72 69 6e  oid sqlite3XPrin
25f50 74 66 28 53 74 72 41 63 63 75 6d 2a 2c 20 63 6f  tf(StrAccum*, co
25f60 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
25f70 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4d 50  .char *sqlite3MP
25f80 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63  rintf(sqlite3*,c
25f90 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
25fa0 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 56  ;.char *sqlite3V
25fb0 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a  MPrintf(sqlite3*
25fc0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76 61  ,const char*, va
25fd0 5f 6c 69 73 74 29 3b 0a 23 69 66 20 64 65 66 69  _list);.#if defi
25fe0 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
25ff0 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  ) || defined(SQL
26000 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41 43  ITE_HAVE_OS_TRAC
26010 45 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  E).  void sqlite
26020 33 44 65 62 75 67 50 72 69 6e 74 66 28 63 6f 6e  3DebugPrintf(con
26030 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
26040 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e  #endif.#if defin
26050 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a  ed(SQLITE_TEST).
26060 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 54    void *sqlite3T
26070 65 73 74 54 65 78 74 54 6f 50 74 72 28 63 6f 6e  estTextToPtr(con
26080 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69  st char*);.#endi
26090 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  f..#if defined(S
260a0 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 20 20 76  QLITE_DEBUG).  v
260b0 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56  oid sqlite3TreeV
260c0 69 65 77 45 78 70 72 28 54 72 65 65 56 69 65 77  iewExpr(TreeView
260d0 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20  *, const Expr*, 
260e0 75 38 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  u8);.  void sqli
260f0 74 65 33 54 72 65 65 56 69 65 77 42 61 72 65 45  te3TreeViewBareE
26100 78 70 72 4c 69 73 74 28 54 72 65 65 56 69 65 77  xprList(TreeView
26110 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 4c 69 73  *, const ExprLis
26120 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  t*, const char*)
26130 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
26140 54 72 65 65 56 69 65 77 45 78 70 72 4c 69 73 74  TreeViewExprList
26150 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73  (TreeView*, cons
26160 74 20 45 78 70 72 4c 69 73 74 2a 2c 20 75 38 2c  t ExprList*, u8,
26170 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20   const char*);. 
26180 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65   void sqlite3Tre
26190 65 56 69 65 77 53 65 6c 65 63 74 28 54 72 65 65  eViewSelect(Tree
261a0 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 53 65 6c  View*, const Sel
261b0 65 63 74 2a 2c 20 75 38 29 3b 0a 20 20 76 6f 69  ect*, u8);.  voi
261c0 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65  d sqlite3TreeVie
261d0 77 57 69 74 68 28 54 72 65 65 56 69 65 77 2a 2c  wWith(TreeView*,
261e0 20 63 6f 6e 73 74 20 57 69 74 68 2a 2c 20 75 38   const With*, u8
261f0 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 76 6f 69 64  );.#endif...void
26200 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
26210 67 28 63 68 61 72 20 2a 2a 2c 20 73 71 6c 69 74  g(char **, sqlit
26220 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  e3*, const char*
26230 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
26240 72 72 6f 72 4d 73 67 28 50 61 72 73 65 2a 2c 20  rrorMsg(Parse*, 
26250 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
26260 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
26270 65 71 75 6f 74 65 28 63 68 61 72 2a 29 3b 0a 76  equote(char*);.v
26280 6f 69 64 20 73 71 6c 69 74 65 33 54 6f 6b 65 6e  oid sqlite3Token
26290 49 6e 69 74 28 54 6f 6b 65 6e 2a 2c 63 68 61 72  Init(Token*,char
262a0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b  *);.int sqlite3K
262b0 65 79 77 6f 72 64 43 6f 64 65 28 63 6f 6e 73 74  eywordCode(const
262c0 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c   unsigned char*,
262d0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
262e0 65 33 52 75 6e 50 61 72 73 65 72 28 50 61 72 73  e3RunParser(Pars
262f0 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e*, const char*,
26300 20 63 68 61 72 20 2a 2a 29 3b 0a 76 6f 69 64 20   char **);.void 
26310 73 71 6c 69 74 65 33 46 69 6e 69 73 68 43 6f 64  sqlite3FinishCod
26320 69 6e 67 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74  ing(Parse*);.int
26330 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52   sqlite3GetTempR
26340 65 67 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  eg(Parse*);.void
26350 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54   sqlite3ReleaseT
26360 65 6d 70 52 65 67 28 50 61 72 73 65 2a 2c 69 6e  empReg(Parse*,in
26370 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  t);.int sqlite3G
26380 65 74 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73  etTempRange(Pars
26390 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  e*,int);.void sq
263a0 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70  lite3ReleaseTemp
263b0 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74  Range(Parse*,int
263c0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
263d0 74 65 33 43 6c 65 61 72 54 65 6d 70 52 65 67 43  te3ClearTempRegC
263e0 61 63 68 65 28 50 61 72 73 65 2a 29 3b 0a 23 69  ache(Parse*);.#i
263f0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
26400 47 0a 69 6e 74 20 73 71 6c 69 74 65 33 4e 6f 54  G.int sqlite3NoT
26410 65 6d 70 73 49 6e 52 61 6e 67 65 28 50 61 72 73  empsInRange(Pars
26420 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 23 65 6e  e*,int,int);.#en
26430 64 69 66 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  dif.Expr *sqlite
26440 33 45 78 70 72 41 6c 6c 6f 63 28 73 71 6c 69 74  3ExprAlloc(sqlit
26450 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 54 6f  e3*,int,const To
26460 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 20  ken*,int);.Expr 
26470 2a 73 71 6c 69 74 65 33 45 78 70 72 28 73 71 6c  *sqlite3Expr(sql
26480 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  ite3*,int,const 
26490 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
264a0 69 74 65 33 45 78 70 72 41 74 74 61 63 68 53 75  ite3ExprAttachSu
264b0 62 74 72 65 65 73 28 73 71 6c 69 74 65 33 2a 2c  btrees(sqlite3*,
264c0 45 78 70 72 2a 2c 45 78 70 72 2a 2c 45 78 70 72  Expr*,Expr*,Expr
264d0 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
264e0 33 50 45 78 70 72 28 50 61 72 73 65 2a 2c 20 69  3PExpr(Parse*, i
264f0 6e 74 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a  nt, Expr*, Expr*
26500 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
26510 45 78 70 72 41 64 64 53 65 6c 65 63 74 28 50 61  ExprAddSelect(Pa
26520 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 53 65 6c  rse*, Expr*, Sel
26530 65 63 74 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ect*);.Expr *sql
26540 69 74 65 33 45 78 70 72 41 6e 64 28 73 71 6c 69  ite3ExprAnd(sqli
26550 74 65 33 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72  te3*,Expr*, Expr
26560 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
26570 33 45 78 70 72 46 75 6e 63 74 69 6f 6e 28 50 61  3ExprFunction(Pa
26580 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20  rse*,ExprList*, 
26590 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
265a0 6c 69 74 65 33 45 78 70 72 41 73 73 69 67 6e 56  lite3ExprAssignV
265b0 61 72 4e 75 6d 62 65 72 28 50 61 72 73 65 2a 2c  arNumber(Parse*,
265c0 20 45 78 70 72 2a 2c 20 75 33 32 29 3b 0a 76 6f   Expr*, u32);.vo
265d0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 44 65  id sqlite3ExprDe
265e0 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45  lete(sqlite3*, E
265f0 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20  xpr*);.ExprList 
26600 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74  *sqlite3ExprList
26610 41 70 70 65 6e 64 28 50 61 72 73 65 2a 2c 45 78  Append(Parse*,Ex
26620 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a  prList*,Expr*);.
26630 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65  ExprList *sqlite
26640 33 45 78 70 72 4c 69 73 74 41 70 70 65 6e 64 56  3ExprListAppendV
26650 65 63 74 6f 72 28 50 61 72 73 65 2a 2c 45 78 70  ector(Parse*,Exp
26660 72 4c 69 73 74 2a 2c 49 64 4c 69 73 74 2a 2c 45  rList*,IdList*,E
26670 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
26680 74 65 33 45 78 70 72 4c 69 73 74 53 65 74 53 6f  te3ExprListSetSo
26690 72 74 4f 72 64 65 72 28 45 78 70 72 4c 69 73 74  rtOrder(ExprList
266a0 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
266b0 69 74 65 33 45 78 70 72 4c 69 73 74 53 65 74 4e  ite3ExprListSetN
266c0 61 6d 65 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  ame(Parse*,ExprL
266d0 69 73 74 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29  ist*,Token*,int)
266e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
266f0 70 72 4c 69 73 74 53 65 74 53 70 61 6e 28 50 61  prListSetSpan(Pa
26700 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45  rse*,ExprList*,E
26710 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20  xprSpan*);.void 
26720 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44  sqlite3ExprListD
26730 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
26740 45 78 70 72 4c 69 73 74 2a 29 3b 0a 75 33 32 20  ExprList*);.u32 
26750 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 46  sqlite3ExprListF
26760 6c 61 67 73 28 63 6f 6e 73 74 20 45 78 70 72 4c  lags(const ExprL
26770 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
26780 65 33 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c  e3Init(sqlite3*,
26790 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73 71   char**);.int sq
267a0 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63  lite3InitCallbac
267b0 6b 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 68  k(void*, int, ch
267c0 61 72 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 76  ar**, char**);.v
267d0 6f 69 64 20 73 71 6c 69 74 65 33 50 72 61 67 6d  oid sqlite3Pragm
267e0 61 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  a(Parse*,Token*,
267f0 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e  Token*,Token*,in
26800 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  t);.#ifndef SQLI
26810 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
26820 41 42 4c 45 0a 4d 6f 64 75 6c 65 20 2a 73 71 6c  ABLE.Module *sql
26830 69 74 65 33 50 72 61 67 6d 61 56 74 61 62 52 65  ite3PragmaVtabRe
26840 67 69 73 74 65 72 28 73 71 6c 69 74 65 33 2a 2c  gister(sqlite3*,
26850 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d  const char *zNam
26860 65 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  e);.#endif.void 
26870 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53  sqlite3ResetAllS
26880 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69  chemasOfConnecti
26890 6f 6e 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  on(sqlite3*);.vo
268a0 69 64 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f  id sqlite3ResetO
268b0 6e 65 53 63 68 65 6d 61 28 73 71 6c 69 74 65 33  neSchema(sqlite3
268c0 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
268d0 69 74 65 33 43 6f 6c 6c 61 70 73 65 44 61 74 61  ite3CollapseData
268e0 62 61 73 65 41 72 72 61 79 28 73 71 6c 69 74 65  baseArray(sqlite
268f0 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
26900 33 43 6f 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43  3CommitInternalC
26910 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33 2a 29  hanges(sqlite3*)
26920 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
26930 6c 65 74 65 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28  leteColumnNames(
26940 73 71 6c 69 74 65 33 2a 2c 54 61 62 6c 65 2a 29  sqlite3*,Table*)
26950 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 6c  ;.int sqlite3Col
26960 75 6d 6e 73 46 72 6f 6d 45 78 70 72 4c 69 73 74  umnsFromExprList
26970 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
26980 2a 2c 69 31 36 2a 2c 43 6f 6c 75 6d 6e 2a 2a 29  *,i16*,Column**)
26990 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
269a0 6c 65 63 74 41 64 64 43 6f 6c 75 6d 6e 54 79 70  lectAddColumnTyp
269b0 65 41 6e 64 43 6f 6c 6c 61 74 69 6f 6e 28 50 61  eAndCollation(Pa
269c0 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 53 65 6c 65  rse*,Table*,Sele
269d0 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c  ct*);.Table *sql
269e0 69 74 65 33 52 65 73 75 6c 74 53 65 74 4f 66 53  ite3ResultSetOfS
269f0 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 53 65 6c  elect(Parse*,Sel
26a00 65 63 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ect*);.void sqli
26a10 74 65 33 4f 70 65 6e 4d 61 73 74 65 72 54 61 62  te3OpenMasterTab
26a20 6c 65 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 29  le(Parse *, int)
26a30 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33  ;.Index *sqlite3
26a40 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28  PrimaryKeyIndex(
26a50 54 61 62 6c 65 2a 29 3b 0a 69 31 36 20 73 71 6c  Table*);.i16 sql
26a60 69 74 65 33 43 6f 6c 75 6d 6e 4f 66 49 6e 64 65  ite3ColumnOfInde
26a70 78 28 49 6e 64 65 78 2a 2c 20 69 31 36 29 3b 0a  x(Index*, i16);.
26a80 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 72  void sqlite3Star
26a90 74 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f  tTable(Parse*,To
26aa0 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c  ken*,Token*,int,
26ab0 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 23 69  int,int,int);.#i
26ac0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
26ad0 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 0a 20  HIDDEN_COLUMNS. 
26ae0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c   void sqlite3Col
26af0 75 6d 6e 50 72 6f 70 65 72 74 69 65 73 46 72 6f  umnPropertiesFro
26b00 6d 4e 61 6d 65 28 54 61 62 6c 65 2a 2c 20 43 6f  mName(Table*, Co
26b10 6c 75 6d 6e 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  lumn*);.#else.# 
26b20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
26b30 6c 75 6d 6e 50 72 6f 70 65 72 74 69 65 73 46 72  lumnPropertiesFr
26b40 6f 6d 4e 61 6d 65 28 54 2c 43 29 20 2f 2a 20 6e  omName(T,C) /* n
26b50 6f 2d 6f 70 20 2a 2f 0a 23 65 6e 64 69 66 0a 76  o-op */.#endif.v
26b60 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f  oid sqlite3AddCo
26b70 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 54 6f 6b 65  lumn(Parse*,Toke
26b80 6e 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  n*,Token*);.void
26b90 20 73 71 6c 69 74 65 33 41 64 64 4e 6f 74 4e 75   sqlite3AddNotNu
26ba0 6c 6c 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  ll(Parse*, int);
26bb0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
26bc0 50 72 69 6d 61 72 79 4b 65 79 28 50 61 72 73 65  PrimaryKey(Parse
26bd0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  *, ExprList*, in
26be0 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
26bf0 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 68 65  id sqlite3AddChe
26c00 63 6b 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72  ckConstraint(Par
26c10 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69  se*, Expr*);.voi
26c20 64 20 73 71 6c 69 74 65 33 41 64 64 44 65 66 61  d sqlite3AddDefa
26c30 75 6c 74 56 61 6c 75 65 28 50 61 72 73 65 2a 2c  ultValue(Parse*,
26c40 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64  ExprSpan*);.void
26c50 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 6c 61   sqlite3AddColla
26c60 74 65 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54  teType(Parse*, T
26c70 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
26c80 69 74 65 33 45 6e 64 54 61 62 6c 65 28 50 61 72  ite3EndTable(Par
26c90 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  se*,Token*,Token
26ca0 2a 2c 75 38 2c 53 65 6c 65 63 74 2a 29 3b 0a 69  *,u8,Select*);.i
26cb0 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65 55  nt sqlite3ParseU
26cc0 72 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  ri(const char*,c
26cd0 6f 6e 73 74 20 63 68 61 72 2a 2c 75 6e 73 69 67  onst char*,unsig
26ce0 6e 65 64 20 69 6e 74 2a 2c 0a 20 20 20 20 20 20  ned int*,.      
26cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71                sq
26d00 6c 69 74 65 33 5f 76 66 73 2a 2a 2c 63 68 61 72  lite3_vfs**,char
26d10 2a 2a 2c 63 68 61 72 20 2a 2a 29 3b 0a 42 74 72  **,char **);.Btr
26d20 65 65 20 2a 73 71 6c 69 74 65 33 44 62 4e 61 6d  ee *sqlite3DbNam
26d30 65 54 6f 42 74 72 65 65 28 73 71 6c 69 74 65 33  eToBtree(sqlite3
26d40 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
26d50 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55  .#ifdef SQLITE_U
26d60 4e 54 45 53 54 41 42 4c 45 0a 23 20 64 65 66 69  NTESTABLE.# defi
26d70 6e 65 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53  ne sqlite3FaultS
26d80 69 6d 28 58 29 20 53 51 4c 49 54 45 5f 4f 4b 0a  im(X) SQLITE_OK.
26d90 23 65 6c 73 65 0a 20 20 69 6e 74 20 73 71 6c 69  #else.  int sqli
26da0 74 65 33 46 61 75 6c 74 53 69 6d 28 69 6e 74 29  te3FaultSim(int)
26db0 3b 0a 23 65 6e 64 69 66 0a 0a 42 69 74 76 65 63  ;.#endif..Bitvec
26dc0 20 2a 73 71 6c 69 74 65 33 42 69 74 76 65 63 43   *sqlite3BitvecC
26dd0 72 65 61 74 65 28 75 33 32 29 3b 0a 69 6e 74 20  reate(u32);.int 
26de0 73 71 6c 69 74 65 33 42 69 74 76 65 63 54 65 73  sqlite3BitvecTes
26df0 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b  t(Bitvec*, u32);
26e00 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76  .int sqlite3Bitv
26e10 65 63 54 65 73 74 4e 6f 74 4e 75 6c 6c 28 42 69  ecTestNotNull(Bi
26e20 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74  tvec*, u32);.int
26e30 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 53 65   sqlite3BitvecSe
26e40 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b  t(Bitvec*, u32);
26e50 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74  .void sqlite3Bit
26e60 76 65 63 43 6c 65 61 72 28 42 69 74 76 65 63 2a  vecClear(Bitvec*
26e70 2c 20 75 33 32 2c 20 76 6f 69 64 2a 29 3b 0a 76  , u32, void*);.v
26e80 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74 76 65  oid sqlite3Bitve
26e90 63 44 65 73 74 72 6f 79 28 42 69 74 76 65 63 2a  cDestroy(Bitvec*
26ea0 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 42 69  );.u32 sqlite3Bi
26eb0 74 76 65 63 53 69 7a 65 28 42 69 74 76 65 63 2a  tvecSize(Bitvec*
26ec0 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
26ed0 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 69 6e 74  E_UNTESTABLE.int
26ee0 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 42 75   sqlite3BitvecBu
26ef0 69 6c 74 69 6e 54 65 73 74 28 69 6e 74 2c 69 6e  iltinTest(int,in
26f00 74 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 52 6f 77  t*);.#endif..Row
26f10 53 65 74 20 2a 73 71 6c 69 74 65 33 52 6f 77 53  Set *sqlite3RowS
26f20 65 74 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c  etInit(sqlite3*,
26f30 20 76 6f 69 64 2a 2c 20 75 6e 73 69 67 6e 65 64   void*, unsigned
26f40 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
26f50 74 65 33 52 6f 77 53 65 74 43 6c 65 61 72 28 52  te3RowSetClear(R
26f60 6f 77 53 65 74 2a 29 3b 0a 76 6f 69 64 20 73 71  owSet*);.void sq
26f70 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72  lite3RowSetInser
26f80 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 29 3b  t(RowSet*, i64);
26f90 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53  .int sqlite3RowS
26fa0 65 74 54 65 73 74 28 52 6f 77 53 65 74 2a 2c 20  etTest(RowSet*, 
26fb0 69 6e 74 20 69 42 61 74 63 68 2c 20 69 36 34 29  int iBatch, i64)
26fc0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77  ;.int sqlite3Row
26fd0 53 65 74 4e 65 78 74 28 52 6f 77 53 65 74 2a 2c  SetNext(RowSet*,
26fe0 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64 20 73 71   i64*);..void sq
26ff0 6c 69 74 65 33 43 72 65 61 74 65 56 69 65 77 28  lite3CreateView(
27000 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
27010 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72  ken*,Token*,Expr
27020 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e  List*,Select*,in
27030 74 2c 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65  t,int);..#if !de
27040 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
27050 54 5f 56 49 45 57 29 20 7c 7c 20 21 64 65 66 69  T_VIEW) || !defi
27060 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
27070 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 20 20  VIRTUALTABLE).  
27080 69 6e 74 20 73 71 6c 69 74 65 33 56 69 65 77 47  int sqlite3ViewG
27090 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50 61  etColumnNames(Pa
270a0 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65  rse*,Table*);.#e
270b0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
270c0 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d  ite3ViewGetColum
270d0 6e 4e 61 6d 65 73 28 41 2c 42 29 20 30 0a 23 65  nNames(A,B) 0.#e
270e0 6e 64 69 66 0a 0a 23 69 66 20 53 51 4c 49 54 45  ndif..#if SQLITE
270f0 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30  _MAX_ATTACHED>30
27100 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 44 62  .  int sqlite3Db
27110 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 79 44 62 4d  MaskAllZero(yDbM
27120 61 73 6b 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69  ask);.#endif.voi
27130 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 61 62  d sqlite3DropTab
27140 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  le(Parse*, SrcLi
27150 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  st*, int, int);.
27160 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65  void sqlite3Code
27170 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a  DropTable(Parse*
27180 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
27190 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
271a0 33 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c  3DeleteTable(sql
271b0 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  ite3*, Table*);.
271c0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
271d0 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e  MIT_AUTOINCREMEN
271e0 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  T.  void sqlite3
271f0 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67  AutoincrementBeg
27200 69 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  in(Parse *pParse
27210 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
27220 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e  3AutoincrementEn
27230 64 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29  d(Parse *pParse)
27240 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
27250 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72   sqlite3Autoincr
27260 65 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a 23 20  ementBegin(X).# 
27270 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
27280 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 58  toincrementEnd(X
27290 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ).#endif.void sq
272a0 6c 69 74 65 33 49 6e 73 65 72 74 28 50 61 72 73  lite3Insert(Pars
272b0 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 53 65  e*, SrcList*, Se
272c0 6c 65 63 74 2a 2c 20 49 64 4c 69 73 74 2a 2c 20  lect*, IdList*, 
272d0 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  int);.void *sqli
272e0 74 65 33 41 72 72 61 79 41 6c 6c 6f 63 61 74 65  te3ArrayAllocate
272f0 28 73 71 6c 69 74 65 33 2a 2c 76 6f 69 64 2a 2c  (sqlite3*,void*,
27300 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a  int,int*,int*);.
27310 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49  IdList *sqlite3I
27320 64 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69  dListAppend(sqli
27330 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 54  te3*, IdList*, T
27340 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
27350 74 65 33 49 64 4c 69 73 74 49 6e 64 65 78 28 49  te3IdListIndex(I
27360 64 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61  dList*,const cha
27370 72 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71  r*);.SrcList *sq
27380 6c 69 74 65 33 53 72 63 4c 69 73 74 45 6e 6c 61  lite3SrcListEnla
27390 72 67 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72  rge(sqlite3*, Sr
273a0 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74  cList*, int, int
273b0 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69  );.SrcList *sqli
273c0 74 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64  te3SrcListAppend
273d0 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69  (sqlite3*, SrcLi
273e0 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  st*, Token*, Tok
273f0 65 6e 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73  en*);.SrcList *s
27400 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70 70  qlite3SrcListApp
27410 65 6e 64 46 72 6f 6d 54 65 72 6d 28 50 61 72 73  endFromTerm(Pars
27420 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f  e*, SrcList*, To
27430 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20  ken*, Token*,.  
27440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27460 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65      Token*, Sele
27470 63 74 2a 2c 20 45 78 70 72 2a 2c 20 49 64 4c 69  ct*, Expr*, IdLi
27480 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
27490 65 33 53 72 63 4c 69 73 74 49 6e 64 65 78 65 64  e3SrcListIndexed
274a0 42 79 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c  By(Parse *, SrcL
274b0 69 73 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b  ist *, Token *);
274c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63  .void sqlite3Src
274d0 4c 69 73 74 46 75 6e 63 41 72 67 73 28 50 61 72  ListFuncArgs(Par
274e0 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45  se*, SrcList*, E
274f0 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
27500 71 6c 69 74 65 33 49 6e 64 65 78 65 64 42 79 4c  qlite3IndexedByL
27510 6f 6f 6b 75 70 28 50 61 72 73 65 20 2a 2c 20 73  ookup(Parse *, s
27520 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74  truct SrcList_it
27530 65 6d 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  em *);.void sqli
27540 74 65 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a  te3SrcListShiftJ
27550 6f 69 6e 54 79 70 65 28 53 72 63 4c 69 73 74 2a  oinType(SrcList*
27560 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
27570 72 63 4c 69 73 74 41 73 73 69 67 6e 43 75 72 73  rcListAssignCurs
27580 6f 72 73 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ors(Parse*, SrcL
27590 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
275a0 74 65 33 49 64 4c 69 73 74 44 65 6c 65 74 65 28  te3IdListDelete(
275b0 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73 74  sqlite3*, IdList
275c0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
275d0 53 72 63 4c 69 73 74 44 65 6c 65 74 65 28 73 71  SrcListDelete(sq
275e0 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a  lite3*, SrcList*
275f0 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65  );.Index *sqlite
27600 33 41 6c 6c 6f 63 61 74 65 49 6e 64 65 78 4f 62  3AllocateIndexOb
27610 6a 65 63 74 28 73 71 6c 69 74 65 33 2a 2c 69 31  ject(sqlite3*,i1
27620 36 2c 69 6e 74 2c 63 68 61 72 2a 2a 29 3b 0a 76  6,int,char**);.v
27630 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65 61 74  oid sqlite3Creat
27640 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 6f  eIndex(Parse*,To
27650 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63 4c  ken*,Token*,SrcL
27660 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69  ist*,ExprList*,i
27670 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20  nt,Token*,.     
27680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27690 20 20 20 20 20 45 78 70 72 2a 2c 20 69 6e 74 2c       Expr*, int,
276a0 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20   int, u8);.void 
276b0 73 71 6c 69 74 65 33 44 72 6f 70 49 6e 64 65 78  sqlite3DropIndex
276c0 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
276d0 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
276e0 69 74 65 33 53 65 6c 65 63 74 28 50 61 72 73 65  ite3Select(Parse
276f0 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53 65 6c 65  *, Select*, Sele
27700 63 74 44 65 73 74 2a 29 3b 0a 53 65 6c 65 63 74  ctDest*);.Select
27710 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74 4e   *sqlite3SelectN
27720 65 77 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  ew(Parse*,ExprLi
27730 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70  st*,SrcList*,Exp
27740 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 0a 20 20  r*,ExprList*,.  
27750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27760 20 20 20 20 20 20 20 45 78 70 72 2a 2c 45 78 70         Expr*,Exp
27770 72 4c 69 73 74 2a 2c 75 33 32 2c 45 78 70 72 2a  rList*,u32,Expr*
27780 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71  ,Expr*);.void sq
27790 6c 69 74 65 33 53 65 6c 65 63 74 44 65 6c 65 74  lite3SelectDelet
277a0 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 65 6c 65  e(sqlite3*, Sele
277b0 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c  ct*);.Table *sql
277c0 69 74 65 33 53 72 63 4c 69 73 74 4c 6f 6f 6b 75  ite3SrcListLooku
277d0 70 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  p(Parse*, SrcLis
277e0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
277f0 49 73 52 65 61 64 4f 6e 6c 79 28 50 61 72 73 65  IsReadOnly(Parse
27800 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b  *, Table*, int);
27810 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65  .void sqlite3Ope
27820 6e 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 69  nTable(Parse*, i
27830 6e 74 20 69 43 75 72 2c 20 69 6e 74 20 69 44 62  nt iCur, int iDb
27840 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a  , Table*, int);.
27850 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
27860 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45  TE_ENABLE_UPDATE
27870 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 29 20 26  _DELETE_LIMIT) &
27880 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
27890 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52 59 29  E_OMIT_SUBQUERY)
278a0 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 4c 69  .Expr *sqlite3Li
278b0 6d 69 74 57 68 65 72 65 28 50 61 72 73 65 2a 2c  mitWhere(Parse*,
278c0 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45  SrcList*,Expr*,E
278d0 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45  xprList*,Expr*,E
278e0 78 70 72 2a 2c 63 68 61 72 2a 29 3b 0a 23 65 6e  xpr*,char*);.#en
278f0 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
27900 44 65 6c 65 74 65 46 72 6f 6d 28 50 61 72 73 65  DeleteFrom(Parse
27910 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70  *, SrcList*, Exp
27920 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
27930 33 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c 20  3Update(Parse*, 
27940 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69  SrcList*, ExprLi
27950 73 74 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  st*, Expr*, int)
27960 3b 0a 57 68 65 72 65 49 6e 66 6f 20 2a 73 71 6c  ;.WhereInfo *sql
27970 69 74 65 33 57 68 65 72 65 42 65 67 69 6e 28 50  ite3WhereBegin(P
27980 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45  arse*,SrcList*,E
27990 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45  xpr*,ExprList*,E
279a0 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 69 6e 74  xprList*,u16,int
279b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57  );.void sqlite3W
279c0 68 65 72 65 45 6e 64 28 57 68 65 72 65 49 6e 66  hereEnd(WhereInf
279d0 6f 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69  o*);.LogEst sqli
279e0 74 65 33 57 68 65 72 65 4f 75 74 70 75 74 52 6f  te3WhereOutputRo
279f0 77 43 6f 75 6e 74 28 57 68 65 72 65 49 6e 66 6f  wCount(WhereInfo
27a00 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
27a10 68 65 72 65 49 73 44 69 73 74 69 6e 63 74 28 57  hereIsDistinct(W
27a20 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
27a30 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 4f 72  sqlite3WhereIsOr
27a40 64 65 72 65 64 28 57 68 65 72 65 49 6e 66 6f 2a  dered(WhereInfo*
27a50 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
27a60 65 72 65 4f 72 64 65 72 65 64 49 6e 6e 65 72 4c  ereOrderedInnerL
27a70 6f 6f 70 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  oop(WhereInfo*);
27a80 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
27a90 65 49 73 53 6f 72 74 65 64 28 57 68 65 72 65 49  eIsSorted(WhereI
27aa0 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
27ab0 65 33 57 68 65 72 65 43 6f 6e 74 69 6e 75 65 4c  e3WhereContinueL
27ac0 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29  abel(WhereInfo*)
27ad0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
27ae0 72 65 42 72 65 61 6b 4c 61 62 65 6c 28 57 68 65  reBreakLabel(Whe
27af0 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
27b00 6c 69 74 65 33 57 68 65 72 65 4f 6b 4f 6e 65 50  lite3WhereOkOneP
27b10 61 73 73 28 57 68 65 72 65 49 6e 66 6f 2a 2c 20  ass(WhereInfo*, 
27b20 69 6e 74 2a 29 3b 0a 23 64 65 66 69 6e 65 20 4f  int*);.#define O
27b30 4e 45 50 41 53 53 5f 4f 46 46 20 20 20 20 20 20  NEPASS_OFF      
27b40 30 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20  0        /* Use 
27b50 6f 66 20 4f 4e 45 50 41 53 53 20 6e 6f 74 20 61  of ONEPASS not a
27b60 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64 65 66 69 6e  llowed */.#defin
27b70 65 20 4f 4e 45 50 41 53 53 5f 53 49 4e 47 4c 45  e ONEPASS_SINGLE
27b80 20 20 20 31 20 20 20 20 20 20 20 20 2f 2a 20 4f     1        /* O
27b90 4e 45 50 41 53 53 20 76 61 6c 69 64 20 66 6f 72  NEPASS valid for
27ba0 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 75 70   a single row up
27bb0 64 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  date */.#define 
27bc0 4f 4e 45 50 41 53 53 5f 4d 55 4c 54 49 20 20 20  ONEPASS_MULTI   
27bd0 20 32 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 45   2        /* ONE
27be0 50 41 53 53 20 69 73 20 76 61 6c 69 64 20 66 6f  PASS is valid fo
27bf0 72 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20  r multiple rows 
27c00 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  */.void sqlite3E
27c10 78 70 72 43 6f 64 65 4c 6f 61 64 49 6e 64 65 78  xprCodeLoadIndex
27c20 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 49  Column(Parse*, I
27c30 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  ndex*, int, int,
27c40 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
27c50 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c  e3ExprCodeGetCol
27c60 75 6d 6e 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  umn(Parse*, Tabl
27c70 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
27c80 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c  t, u8);.void sql
27c90 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43  ite3ExprCodeGetC
27ca0 6f 6c 75 6d 6e 54 6f 52 65 67 28 50 61 72 73 65  olumnToReg(Parse
27cb0 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
27cc0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
27cd0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47  sqlite3ExprCodeG
27ce0 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28  etColumnOfTable(
27cf0 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  Vdbe*, Table*, i
27d00 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
27d10 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
27d20 6f 64 65 4d 6f 76 65 28 50 61 72 73 65 2a 2c 20  odeMove(Parse*, 
27d30 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
27d40 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
27d50 43 61 63 68 65 53 74 6f 72 65 28 50 61 72 73 65  CacheStore(Parse
27d60 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
27d70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
27d80 78 70 72 43 61 63 68 65 50 75 73 68 28 50 61 72  xprCachePush(Par
27d90 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
27da0 65 33 45 78 70 72 43 61 63 68 65 50 6f 70 28 50  e3ExprCachePop(P
27db0 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
27dc0 69 74 65 33 45 78 70 72 43 61 63 68 65 52 65 6d  ite3ExprCacheRem
27dd0 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  ove(Parse*, int,
27de0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
27df0 74 65 33 45 78 70 72 43 61 63 68 65 43 6c 65 61  te3ExprCacheClea
27e00 72 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20  r(Parse*);.void 
27e10 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65  sqlite3ExprCache
27e20 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28 50  AffinityChange(P
27e30 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  arse*, int, int)
27e40 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
27e50 70 72 43 6f 64 65 28 50 61 72 73 65 2a 2c 20 45  prCode(Parse*, E
27e60 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  xpr*, int);.void
27e70 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
27e80 43 6f 70 79 28 50 61 72 73 65 2a 2c 20 45 78 70  Copy(Parse*, Exp
27e90 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  r*, int);.void s
27ea0 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 46 61  qlite3ExprCodeFa
27eb0 63 74 6f 72 61 62 6c 65 28 50 61 72 73 65 2a 2c  ctorable(Parse*,
27ec0 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   Expr*, int);.in
27ed0 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  t sqlite3ExprCod
27ee0 65 41 74 49 6e 69 74 28 50 61 72 73 65 2a 2c 20  eAtInit(Parse*, 
27ef0 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  Expr*, int);.int
27f00 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
27f10 54 65 6d 70 28 50 61 72 73 65 2a 2c 20 45 78 70  Temp(Parse*, Exp
27f20 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73  r*, int*);.int s
27f30 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54 61  qlite3ExprCodeTa
27f40 72 67 65 74 28 50 61 72 73 65 2a 2c 20 45 78 70  rget(Parse*, Exp
27f50 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  r*, int);.void s
27f60 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 41 6e  qlite3ExprCodeAn
27f70 64 43 61 63 68 65 28 50 61 72 73 65 2a 2c 20 45  dCache(Parse*, E
27f80 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  xpr*, int);.int 
27f90 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 45  sqlite3ExprCodeE
27fa0 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 20  xprList(Parse*, 
27fb0 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20  ExprList*, int, 
27fc0 69 6e 74 2c 20 75 38 29 3b 0a 23 64 65 66 69 6e  int, u8);.#defin
27fd0 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 44 55  e SQLITE_ECEL_DU
27fe0 50 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20  P      0x01  /* 
27ff0 44 65 65 70 2c 20 6e 6f 74 20 73 68 61 6c 6c 6f  Deep, not shallo
28000 77 20 63 6f 70 69 65 73 20 2a 2f 0a 23 64 65 66  w copies */.#def
28010 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f  ine SQLITE_ECEL_
28020 46 41 43 54 4f 52 20 20 20 30 78 30 32 20 20 2f  FACTOR   0x02  /
28030 2a 20 46 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e  * Factor out con
28040 73 74 61 6e 74 20 74 65 72 6d 73 20 2a 2f 0a 23  stant terms */.#
28050 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43  define SQLITE_EC
28060 45 4c 5f 52 45 46 20 20 20 20 20 20 30 78 30 34  EL_REF      0x04
28070 20 20 2f 2a 20 55 73 65 20 45 78 70 72 4c 69 73    /* Use ExprLis
28080 74 2e 75 2e 78 2e 69 4f 72 64 65 72 42 79 43 6f  t.u.x.iOrderByCo
28090 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  l */.#define SQL
280a0 49 54 45 5f 45 43 45 4c 5f 4f 4d 49 54 52 45 46  ITE_ECEL_OMITREF
280b0 20 20 30 78 30 38 20 20 2f 2a 20 4f 6d 69 74 20    0x08  /* Omit 
280c0 69 66 20 45 78 70 72 4c 69 73 74 2e 75 2e 78 2e  if ExprList.u.x.
280d0 69 4f 72 64 65 72 42 79 43 6f 6c 20 2a 2f 0a 76  iOrderByCol */.v
280e0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 49  oid sqlite3ExprI
280f0 66 54 72 75 65 28 50 61 72 73 65 2a 2c 20 45 78  fTrue(Parse*, Ex
28100 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  pr*, int, int);.
28110 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
28120 49 66 46 61 6c 73 65 28 50 61 72 73 65 2a 2c 20  IfFalse(Parse*, 
28130 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  Expr*, int, int)
28140 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
28150 70 72 49 66 46 61 6c 73 65 44 75 70 28 50 61 72  prIfFalseDup(Par
28160 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c  se*, Expr*, int,
28170 20 69 6e 74 29 3b 0a 54 61 62 6c 65 20 2a 73 71   int);.Table *sq
28180 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 73  lite3FindTable(s
28190 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
281a0 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
281b0 29 3b 0a 23 64 65 66 69 6e 65 20 4c 4f 43 41 54  );.#define LOCAT
281c0 45 5f 56 49 45 57 20 20 20 20 30 78 30 31 0a 23  E_VIEW    0x01.#
281d0 64 65 66 69 6e 65 20 4c 4f 43 41 54 45 5f 4e 4f  define LOCATE_NO
281e0 45 52 52 20 20 20 30 78 30 32 0a 54 61 62 6c 65  ERR   0x02.Table
281f0 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54   *sqlite3LocateT
28200 61 62 6c 65 28 50 61 72 73 65 2a 2c 75 33 32 20  able(Parse*,u32 
28210 66 6c 61 67 73 2c 63 6f 6e 73 74 20 63 68 61 72  flags,const char
28220 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
28230 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c  .Table *sqlite3L
28240 6f 63 61 74 65 54 61 62 6c 65 49 74 65 6d 28 50  ocateTableItem(P
28250 61 72 73 65 2a 2c 75 33 32 20 66 6c 61 67 73 2c  arse*,u32 flags,
28260 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69  struct SrcList_i
28270 74 65 6d 20 2a 29 3b 0a 49 6e 64 65 78 20 2a 73  tem *);.Index *s
28280 71 6c 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28  qlite3FindIndex(
28290 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
282a0 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
282b0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
282c0 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54  UnlinkAndDeleteT
282d0 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 69 6e  able(sqlite3*,in
282e0 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  t,const char*);.
282f0 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69  void sqlite3Unli
28300 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78  nkAndDeleteIndex
28310 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f  (sqlite3*,int,co
28320 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
28330 20 73 71 6c 69 74 65 33 56 61 63 75 75 6d 28 50   sqlite3Vacuum(P
28340 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 69  arse*,Token*);.i
28350 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63  nt sqlite3RunVac
28360 75 75 6d 28 63 68 61 72 2a 2a 2c 20 73 71 6c 69  uum(char**, sqli
28370 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72  te3*, int);.char
28380 20 2a 73 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f   *sqlite3NameFro
28390 6d 54 6f 6b 65 6e 28 73 71 6c 69 74 65 33 2a 2c  mToken(sqlite3*,
283a0 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
283b0 6c 69 74 65 33 45 78 70 72 43 6f 6d 70 61 72 65  lite3ExprCompare
283c0 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 20 45  (Parse*,Expr*, E
283d0 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  xpr*, int);.int 
283e0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6d 70 61  sqlite3ExprCompa
283f0 72 65 53 6b 69 70 28 45 78 70 72 2a 2c 20 45 78  reSkip(Expr*, Ex
28400 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  pr*, int);.int s
28410 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43 6f  qlite3ExprListCo
28420 6d 70 61 72 65 28 45 78 70 72 4c 69 73 74 2a 2c  mpare(ExprList*,
28430 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29   ExprList*, int)
28440 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
28450 72 49 6d 70 6c 69 65 73 45 78 70 72 28 50 61 72  rImpliesExpr(Par
28460 73 65 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a  se*,Expr*, Expr*
28470 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
28480 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41  ite3ExprAnalyzeA
28490 67 67 72 65 67 61 74 65 73 28 4e 61 6d 65 43 6f  ggregates(NameCo
284a0 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a  ntext*, Expr*);.
284b0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
284c0 41 6e 61 6c 79 7a 65 41 67 67 4c 69 73 74 28 4e  AnalyzeAggList(N
284d0 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 45 78 70 72  ameContext*,Expr
284e0 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
284f0 74 65 33 45 78 70 72 43 6f 76 65 72 65 64 42 79  te3ExprCoveredBy
28500 49 6e 64 65 78 28 45 78 70 72 2a 2c 20 69 6e 74  Index(Expr*, int
28510 20 69 43 75 72 2c 20 49 6e 64 65 78 20 2a 70 49   iCur, Index *pI
28520 64 78 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  dx);.int sqlite3
28530 46 75 6e 63 74 69 6f 6e 55 73 65 73 54 68 69 73  FunctionUsesThis
28540 53 72 63 28 45 78 70 72 2a 2c 20 53 72 63 4c 69  Src(Expr*, SrcLi
28550 73 74 2a 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69  st*);.Vdbe *sqli
28560 74 65 33 47 65 74 56 64 62 65 28 50 61 72 73 65  te3GetVdbe(Parse
28570 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  *);.#ifndef SQLI
28580 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 76 6f  TE_UNTESTABLE.vo
28590 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67 53 61  id sqlite3PrngSa
285a0 76 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 76  veState(void);.v
285b0 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67 52  oid sqlite3PrngR
285c0 65 73 74 6f 72 65 53 74 61 74 65 28 76 6f 69 64  estoreState(void
285d0 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  );.#endif.void s
285e0 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c  qlite3RollbackAl
285f0 6c 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b  l(sqlite3*,int);
28600 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64  .void sqlite3Cod
28610 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 50 61  eVerifySchema(Pa
28620 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  rse*, int);.void
28630 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69   sqlite3CodeVeri
28640 66 79 4e 61 6d 65 64 53 63 68 65 6d 61 28 50 61  fyNamedSchema(Pa
28650 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
28660 20 2a 7a 44 62 29 3b 0a 76 6f 69 64 20 73 71 6c   *zDb);.void sql
28670 69 74 65 33 42 65 67 69 6e 54 72 61 6e 73 61 63  ite3BeginTransac
28680 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74  tion(Parse*, int
28690 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
286a0 6e 64 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61  ndTransaction(Pa
286b0 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  rse*,int);.void 
286c0 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74  sqlite3Savepoint
286d0 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 6f  (Parse*, int, To
286e0 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
286f0 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e  te3CloseSavepoin
28700 74 73 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 76  ts(sqlite3 *);.v
28710 6f 69 64 20 73 71 6c 69 74 65 33 4c 65 61 76 65  oid sqlite3Leave
28720 4d 75 74 65 78 41 6e 64 43 6c 6f 73 65 5a 6f 6d  MutexAndCloseZom
28730 62 69 65 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69  bie(sqlite3*);.i
28740 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
28750 43 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 29 3b  Constant(Expr*);
28760 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
28770 49 73 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a 6f 69  IsConstantNotJoi
28780 6e 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  n(Expr*);.int sq
28790 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74  lite3ExprIsConst
287a0 61 6e 74 4f 72 46 75 6e 63 74 69 6f 6e 28 45 78  antOrFunction(Ex
287b0 70 72 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  pr*, u8);.int sq
287c0 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74  lite3ExprIsConst
287d0 61 6e 74 4f 72 47 72 6f 75 70 42 79 28 50 61 72  antOrGroupBy(Par
287e0 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72  se*, Expr*, Expr
287f0 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
28800 74 65 33 45 78 70 72 49 73 54 61 62 6c 65 43 6f  te3ExprIsTableCo
28810 6e 73 74 61 6e 74 28 45 78 70 72 2a 2c 69 6e 74  nstant(Expr*,int
28820 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
28830 5f 45 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f 48  _ENABLE_CURSOR_H
28840 49 4e 54 53 0a 69 6e 74 20 73 71 6c 69 74 65 33  INTS.int sqlite3
28850 45 78 70 72 43 6f 6e 74 61 69 6e 73 53 75 62 71  ExprContainsSubq
28860 75 65 72 79 28 45 78 70 72 2a 29 3b 0a 23 65 6e  uery(Expr*);.#en
28870 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  dif.int sqlite3E
28880 78 70 72 49 73 49 6e 74 65 67 65 72 28 45 78 70  xprIsInteger(Exp
28890 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73  r*, int*);.int s
288a0 71 6c 69 74 65 33 45 78 70 72 43 61 6e 42 65 4e  qlite3ExprCanBeN
288b0 75 6c 6c 28 63 6f 6e 73 74 20 45 78 70 72 2a 29  ull(const Expr*)
288c0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
288d0 72 4e 65 65 64 73 4e 6f 41 66 66 69 6e 69 74 79  rNeedsNoAffinity
288e0 43 68 61 6e 67 65 28 63 6f 6e 73 74 20 45 78 70  Change(const Exp
288f0 72 2a 2c 20 63 68 61 72 29 3b 0a 69 6e 74 20 73  r*, char);.int s
28900 71 6c 69 74 65 33 49 73 52 6f 77 69 64 28 63 6f  qlite3IsRowid(co
28910 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
28920 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65   sqlite3Generate
28930 52 6f 77 44 65 6c 65 74 65 28 0a 20 20 20 20 50  RowDelete(.    P
28940 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 54 72 69  arse*,Table*,Tri
28950 67 67 65 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  gger*,int,int,in
28960 74 2c 69 31 36 2c 75 38 2c 75 38 2c 75 38 2c 69  t,i16,u8,u8,u8,i
28970 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
28980 33 47 65 6e 65 72 61 74 65 52 6f 77 49 6e 64 65  3GenerateRowInde
28990 78 44 65 6c 65 74 65 28 50 61 72 73 65 2a 2c 20  xDelete(Parse*, 
289a0 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
289b0 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e  , int*, int);.in
289c0 74 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  t sqlite3Generat
289d0 65 49 6e 64 65 78 4b 65 79 28 50 61 72 73 65 2a  eIndexKey(Parse*
289e0 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69  , Index*, int, i
289f0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 49 6e  nt, int, int*,In
28a00 64 65 78 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  dex*,int);.void 
28a10 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 50 61  sqlite3ResolvePa
28a20 72 74 49 64 78 4c 61 62 65 6c 28 50 61 72 73 65  rtIdxLabel(Parse
28a30 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
28a40 69 74 65 33 47 65 6e 65 72 61 74 65 43 6f 6e 73  ite3GenerateCons
28a50 74 72 61 69 6e 74 43 68 65 63 6b 73 28 50 61 72  traintChecks(Par
28a60 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2a 2c  se*,Table*,int*,
28a70 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  int,int,int,int,
28a80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28aa0 20 20 20 20 20 20 75 38 2c 75 38 2c 69 6e 74 2c        u8,u8,int,
28ab0 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 23 69 66 64  int*,int*);.#ifd
28ac0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
28ad0 5f 4e 55 4c 4c 5f 54 52 49 4d 0a 20 20 76 6f 69  _NULL_TRIM.  voi
28ae0 64 20 73 71 6c 69 74 65 33 53 65 74 4d 61 6b 65  d sqlite3SetMake
28af0 52 65 63 6f 72 64 50 35 28 56 64 62 65 2a 2c 54  RecordP5(Vdbe*,T
28b00 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  able*);.#else.# 
28b10 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65  define sqlite3Se
28b20 74 4d 61 6b 65 52 65 63 6f 72 64 50 35 28 41 2c  tMakeRecordP5(A,
28b30 42 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  B).#endif.void s
28b40 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74 65 49 6e  qlite3CompleteIn
28b50 73 65 72 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54  sertion(Parse*,T
28b60 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  able*,int,int,in
28b70 74 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69  t,int*,int,int,i
28b80 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
28b90 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69  OpenTableAndIndi
28ba0 63 65 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ces(Parse*, Tabl
28bb0 65 2a 2c 20 69 6e 74 2c 20 75 38 2c 20 69 6e 74  e*, int, u8, int
28bc0 2c 20 75 38 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74  , u8*, int*, int
28bd0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
28be0 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74  BeginWriteOperat
28bf0 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  ion(Parse*, int,
28c00 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
28c10 74 65 33 4d 75 6c 74 69 57 72 69 74 65 28 50 61  te3MultiWrite(Pa
28c20 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
28c30 74 65 33 4d 61 79 41 62 6f 72 74 28 50 61 72 73  te3MayAbort(Pars
28c40 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
28c50 33 48 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28  3HaltConstraint(
28c60 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
28c70 2c 20 63 68 61 72 2a 2c 20 69 38 2c 20 75 38 29  , char*, i8, u8)
28c80 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e  ;.void sqlite3Un
28c90 69 71 75 65 43 6f 6e 73 74 72 61 69 6e 74 28 50  iqueConstraint(P
28ca0 61 72 73 65 2a 2c 20 69 6e 74 2c 20 49 6e 64 65  arse*, int, Inde
28cb0 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  x*);.void sqlite
28cc0 33 52 6f 77 69 64 43 6f 6e 73 74 72 61 69 6e 74  3RowidConstraint
28cd0 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 61  (Parse*, int, Ta
28ce0 62 6c 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ble*);.Expr *sql
28cf0 69 74 65 33 45 78 70 72 44 75 70 28 73 71 6c 69  ite3ExprDup(sqli
28d00 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b  te3*,Expr*,int);
28d10 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74  .ExprList *sqlit
28d20 65 33 45 78 70 72 4c 69 73 74 44 75 70 28 73 71  e3ExprListDup(sq
28d30 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69 73 74 2a  lite3*,ExprList*
28d40 2c 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a  ,int);.SrcList *
28d50 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44 75  sqlite3SrcListDu
28d60 70 28 73 71 6c 69 74 65 33 2a 2c 53 72 63 4c 69  p(sqlite3*,SrcLi
28d70 73 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69 73 74  st*,int);.IdList
28d80 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44   *sqlite3IdListD
28d90 75 70 28 73 71 6c 69 74 65 33 2a 2c 49 64 4c 69  up(sqlite3*,IdLi
28da0 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71  st*);.Select *sq
28db0 6c 69 74 65 33 53 65 6c 65 63 74 44 75 70 28 73  lite3SelectDup(s
28dc0 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c  qlite3*,Select*,
28dd0 69 6e 74 29 3b 0a 23 69 66 20 53 45 4c 45 43 54  int);.#if SELECT
28de0 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a 76 6f  TRACE_ENABLED.vo
28df0 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
28e00 53 65 74 4e 61 6d 65 28 53 65 6c 65 63 74 2a 2c  SetName(Select*,
28e10 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65  const char*);.#e
28e20 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
28e30 69 74 65 33 53 65 6c 65 63 74 53 65 74 4e 61 6d  ite3SelectSetNam
28e40 65 28 41 2c 42 29 0a 23 65 6e 64 69 66 0a 76 6f  e(A,B).#endif.vo
28e50 69 64 20 73 71 6c 69 74 65 33 49 6e 73 65 72 74  id sqlite3Insert
28e60 42 75 69 6c 74 69 6e 46 75 6e 63 73 28 46 75 6e  BuiltinFuncs(Fun
28e70 63 44 65 66 2a 2c 69 6e 74 29 3b 0a 46 75 6e 63  cDef*,int);.Func
28e80 44 65 66 20 2a 73 71 6c 69 74 65 33 46 69 6e 64  Def *sqlite3Find
28e90 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  Function(sqlite3
28ea0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  *,const char*,in
28eb0 74 2c 75 38 2c 75 38 29 3b 0a 76 6f 69 64 20 73  t,u8,u8);.void s
28ec0 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 42 75  qlite3RegisterBu
28ed0 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28 76  iltinFunctions(v
28ee0 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
28ef0 65 33 52 65 67 69 73 74 65 72 44 61 74 65 54 69  e3RegisterDateTi
28f00 6d 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64  meFunctions(void
28f10 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
28f20 65 67 69 73 74 65 72 50 65 72 43 6f 6e 6e 65 63  egisterPerConnec
28f30 74 69 6f 6e 42 75 69 6c 74 69 6e 46 75 6e 63 74  tionBuiltinFunct
28f40 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ions(sqlite3*);.
28f50 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74  int sqlite3Safet
28f60 79 43 68 65 63 6b 4f 6b 28 73 71 6c 69 74 65 33  yCheckOk(sqlite3
28f70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  *);.int sqlite3S
28f80 61 66 65 74 79 43 68 65 63 6b 53 69 63 6b 4f 72  afetyCheckSickOr
28f90 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  Ok(sqlite3*);.vo
28fa0 69 64 20 73 71 6c 69 74 65 33 43 68 61 6e 67 65  id sqlite3Change
28fb0 43 6f 6f 6b 69 65 28 50 61 72 73 65 2a 2c 20 69  Cookie(Parse*, i
28fc0 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e  nt);..#if !defin
28fd0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
28fe0 49 45 57 29 20 26 26 20 21 64 65 66 69 6e 65 64  IEW) && !defined
28ff0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49  (SQLITE_OMIT_TRI
29000 47 47 45 52 29 0a 76 6f 69 64 20 73 71 6c 69 74  GGER).void sqlit
29010 65 33 4d 61 74 65 72 69 61 6c 69 7a 65 56 69 65  e3MaterializeVie
29020 77 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  w(Parse*, Table*
29030 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 23  , Expr*, int);.#
29040 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
29050 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
29060 45 52 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ER.  void sqlite
29070 33 42 65 67 69 6e 54 72 69 67 67 65 72 28 50 61  3BeginTrigger(Pa
29080 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b  rse*, Token*,Tok
29090 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c 69  en*,int,int,IdLi
290a0 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 0a 20 20  st*,SrcList*,.  
290b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
290c0 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 69           Expr*,i
290d0 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64  nt, int);.  void
290e0 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68 54 72   sqlite3FinishTr
290f0 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72  igger(Parse*, Tr
29100 69 67 67 65 72 53 74 65 70 2a 2c 20 54 6f 6b 65  iggerStep*, Toke
29110 6e 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  n*);.  void sqli
29120 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 28 50  te3DropTrigger(P
29130 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
29140 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71   int);.  void sq
29150 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72  lite3DropTrigger
29160 50 74 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67  Ptr(Parse*, Trig
29170 67 65 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72  ger*);.  Trigger
29180 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72   *sqlite3Trigger
29190 73 45 78 69 73 74 28 50 61 72 73 65 20 2a 2c 20  sExist(Parse *, 
291a0 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 45 78 70  Table*, int, Exp
291b0 72 4c 69 73 74 2a 2c 20 69 6e 74 20 2a 70 4d 61  rList*, int *pMa
291c0 73 6b 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a  sk);.  Trigger *
291d0 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69  sqlite3TriggerLi
291e0 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c  st(Parse *, Tabl
291f0 65 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  e *);.  void sql
29200 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67  ite3CodeRowTrigg
29210 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67  er(Parse*, Trigg
29220 65 72 20 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c  er *, int, ExprL
29230 69 73 74 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65  ist*, int, Table
29240 20 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20   *,.            
29250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29260 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
29270 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
29280 64 65 52 6f 77 54 72 69 67 67 65 72 44 69 72 65  deRowTriggerDire
29290 63 74 28 50 61 72 73 65 20 2a 2c 20 54 72 69 67  ct(Parse *, Trig
292a0 67 65 72 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20  ger *, Table *, 
292b0 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
292c0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 56 69 65    void sqliteVie
292d0 77 54 72 69 67 67 65 72 73 28 50 61 72 73 65 2a  wTriggers(Parse*
292e0 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c  , Table*, Expr*,
292f0 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 29   int, ExprList*)
29300 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
29310 44 65 6c 65 74 65 54 72 69 67 67 65 72 53 74 65  DeleteTriggerSte
29320 70 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67  p(sqlite3*, Trig
29330 67 65 72 53 74 65 70 2a 29 3b 0a 20 20 54 72 69  gerStep*);.  Tri
29340 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65  ggerStep *sqlite
29350 33 54 72 69 67 67 65 72 53 65 6c 65 63 74 53 74  3TriggerSelectSt
29360 65 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65  ep(sqlite3*,Sele
29370 63 74 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53  ct*);.  TriggerS
29380 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
29390 67 65 72 49 6e 73 65 72 74 53 74 65 70 28 73 71  gerInsertStep(sq
293a0 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 49  lite3*,Token*, I
293b0 64 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20  dList*,.        
293c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
293d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
293e0 53 65 6c 65 63 74 2a 2c 75 38 29 3b 0a 20 20 54  Select*,u8);.  T
293f0 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69  riggerStep *sqli
29400 74 65 33 54 72 69 67 67 65 72 55 70 64 61 74 65  te3TriggerUpdate
29410 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f  Step(sqlite3*,To
29420 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20  ken*,ExprList*, 
29430 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20 54 72  Expr*, u8);.  Tr
29440 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74  iggerStep *sqlit
29450 65 33 54 72 69 67 67 65 72 44 65 6c 65 74 65 53  e3TriggerDeleteS
29460 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b  tep(sqlite3*,Tok
29470 65 6e 2a 2c 20 45 78 70 72 2a 29 3b 0a 20 20 76  en*, Expr*);.  v
29480 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
29490 65 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33  eTrigger(sqlite3
294a0 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20  *, Trigger*);.  
294b0 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69  void sqlite3Unli
294c0 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67  nkAndDeleteTrigg
294d0 65 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  er(sqlite3*,int,
294e0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
294f0 75 33 32 20 73 71 6c 69 74 65 33 54 72 69 67 67  u32 sqlite3Trigg
29500 65 72 43 6f 6c 6d 61 73 6b 28 50 61 72 73 65 2a  erColmask(Parse*
29510 2c 54 72 69 67 67 65 72 2a 2c 45 78 70 72 4c 69  ,Trigger*,ExprLi
29520 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61 62 6c  st*,int,int,Tabl
29530 65 2a 2c 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e  e*,int);.# defin
29540 65 20 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f  e sqlite3ParseTo
29550 70 6c 65 76 65 6c 28 70 29 20 28 28 70 29 2d 3e  plevel(p) ((p)->
29560 70 54 6f 70 6c 65 76 65 6c 20 3f 20 28 70 29 2d  pToplevel ? (p)-
29570 3e 70 54 6f 70 6c 65 76 65 6c 20 3a 20 28 70 29  >pToplevel : (p)
29580 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
29590 65 33 49 73 54 6f 70 6c 65 76 65 6c 28 70 29 20  e3IsToplevel(p) 
295a0 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 3d  ((p)->pToplevel=
295b0 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  =0).#else.# defi
295c0 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65  ne sqlite3Trigge
295d0 72 73 45 78 69 73 74 28 42 2c 43 2c 44 2c 45 2c  rsExist(B,C,D,E,
295e0 46 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71  F) 0.# define sq
295f0 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67  lite3DeleteTrigg
29600 65 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65  er(A,B).# define
29610 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67   sqlite3DropTrig
29620 67 65 72 50 74 72 28 41 2c 42 29 0a 23 20 64 65  gerPtr(A,B).# de
29630 66 69 6e 65 20 73 71 6c 69 74 65 33 55 6e 6c 69  fine sqlite3Unli
29640 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67  nkAndDeleteTrigg
29650 65 72 28 41 2c 42 2c 43 29 0a 23 20 64 65 66 69  er(A,B,C).# defi
29660 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f  ne sqlite3CodeRo
29670 77 54 72 69 67 67 65 72 28 41 2c 42 2c 43 2c 44  wTrigger(A,B,C,D
29680 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23 20 64 65  ,E,F,G,H,I).# de
29690 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65  fine sqlite3Code
296a0 52 6f 77 54 72 69 67 67 65 72 44 69 72 65 63 74  RowTriggerDirect
296b0 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a 23 20  (A,B,C,D,E,F).# 
296c0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72  define sqlite3Tr
296d0 69 67 67 65 72 4c 69 73 74 28 58 2c 20 59 29 20  iggerList(X, Y) 
296e0 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  0.# define sqlit
296f0 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28  e3ParseToplevel(
29700 70 29 20 70 0a 23 20 64 65 66 69 6e 65 20 73 71  p) p.# define sq
29710 6c 69 74 65 33 49 73 54 6f 70 6c 65 76 65 6c 28  lite3IsToplevel(
29720 70 29 20 31 0a 23 20 64 65 66 69 6e 65 20 73 71  p) 1.# define sq
29730 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d  lite3TriggerColm
29740 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c  ask(A,B,C,D,E,F,
29750 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a 69 6e 74  G) 0.#endif..int
29760 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54 79 70 65   sqlite3JoinType
29770 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c  (Parse*, Token*,
29780 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29   Token*, Token*)
29790 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72  ;.void sqlite3Cr
297a0 65 61 74 65 46 6f 72 65 69 67 6e 4b 65 79 28 50  eateForeignKey(P
297b0 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  arse*, ExprList*
297c0 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c 69  , Token*, ExprLi
297d0 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  st*, int);.void 
297e0 73 71 6c 69 74 65 33 44 65 66 65 72 46 6f 72 65  sqlite3DeferFore
297f0 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 69  ignKey(Parse*, i
29800 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  nt);.#ifndef SQL
29810 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49  ITE_OMIT_AUTHORI
29820 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71  ZATION.  void sq
29830 6c 69 74 65 33 41 75 74 68 52 65 61 64 28 50 61  lite3AuthRead(Pa
29840 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63 68 65 6d  rse*,Expr*,Schem
29850 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b 0a 20 20  a*,SrcList*);.  
29860 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68 43  int sqlite3AuthC
29870 68 65 63 6b 28 50 61 72 73 65 2a 2c 69 6e 74 2c  heck(Parse*,int,
29880 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
29890 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
298a0 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20   char*);.  void 
298b0 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65  sqlite3AuthConte
298c0 78 74 50 75 73 68 28 50 61 72 73 65 2a 2c 20 41  xtPush(Parse*, A
298d0 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e  uthContext*, con
298e0 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
298f0 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e  d sqlite3AuthCon
29900 74 65 78 74 50 6f 70 28 41 75 74 68 43 6f 6e 74  textPop(AuthCont
29910 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  ext*);.  int sql
29920 69 74 65 33 41 75 74 68 52 65 61 64 43 6f 6c 28  ite3AuthReadCol(
29930 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
29940 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  ar *, const char
29950 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a   *, int);.#else.
29960 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
29970 41 75 74 68 52 65 61 64 28 61 2c 62 2c 63 2c 64  AuthRead(a,b,c,d
29980 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
29990 65 33 41 75 74 68 43 68 65 63 6b 28 61 2c 62 2c  e3AuthCheck(a,b,
299a0 63 2c 64 2c 65 29 20 20 20 20 53 51 4c 49 54 45  c,d,e)    SQLITE
299b0 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  _OK.# define sql
299c0 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50  ite3AuthContextP
299d0 75 73 68 28 61 2c 62 2c 63 29 0a 23 20 64 65 66  ush(a,b,c).# def
299e0 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43  ine sqlite3AuthC
299f0 6f 6e 74 65 78 74 50 6f 70 28 61 29 20 20 28 28  ontextPop(a)  ((
29a00 76 6f 69 64 29 28 61 29 29 0a 23 65 6e 64 69 66  void)(a)).#endif
29a10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 74 74  .void sqlite3Att
29a20 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ach(Parse*, Expr
29a30 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 29  *, Expr*, Expr*)
29a40 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
29a50 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70  tach(Parse*, Exp
29a60 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
29a70 33 46 69 78 49 6e 69 74 28 44 62 46 69 78 65 72  3FixInit(DbFixer
29a80 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  *, Parse*, int, 
29a90 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
29aa0 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  st Token*);.int 
29ab0 73 71 6c 69 74 65 33 46 69 78 53 72 63 4c 69 73  sqlite3FixSrcLis
29ac0 74 28 44 62 46 69 78 65 72 2a 2c 20 53 72 63 4c  t(DbFixer*, SrcL
29ad0 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
29ae0 65 33 46 69 78 53 65 6c 65 63 74 28 44 62 46 69  e3FixSelect(DbFi
29af0 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  xer*, Select*);.
29b00 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45 78  int sqlite3FixEx
29b10 70 72 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70  pr(DbFixer*, Exp
29b20 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
29b30 46 69 78 45 78 70 72 4c 69 73 74 28 44 62 46 69  FixExprList(DbFi
29b40 78 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  xer*, ExprList*)
29b50 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78  ;.int sqlite3Fix
29b60 54 72 69 67 67 65 72 53 74 65 70 28 44 62 46 69  TriggerStep(DbFi
29b70 78 65 72 2a 2c 20 54 72 69 67 67 65 72 53 74 65  xer*, TriggerSte
29b80 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  p*);.int sqlite3
29b90 41 74 6f 46 28 63 6f 6e 73 74 20 63 68 61 72 20  AtoF(const char 
29ba0 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20 69 6e 74  *z, double*, int
29bb0 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74  , u8);.int sqlit
29bc0 65 33 47 65 74 49 6e 74 33 32 28 63 6f 6e 73 74  e3GetInt32(const
29bd0 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a   char *, int*);.
29be0 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69 28  int sqlite3Atoi(
29bf0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 69  const char*);.#i
29c00 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
29c10 54 5f 55 54 46 31 36 0a 69 6e 74 20 73 71 6c 69  T_UTF16.int sqli
29c20 74 65 33 55 74 66 31 36 42 79 74 65 4c 65 6e 28  te3Utf16ByteLen(
29c30 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 44 61 74  const void *pDat
29c40 61 2c 20 69 6e 74 20 6e 43 68 61 72 29 3b 0a 23  a, int nChar);.#
29c50 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65  endif.int sqlite
29c60 33 55 74 66 38 43 68 61 72 4c 65 6e 28 63 6f 6e  3Utf8CharLen(con
29c70 73 74 20 63 68 61 72 20 2a 70 44 61 74 61 2c 20  st char *pData, 
29c80 69 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33 32 20  int nByte);.u32 
29c90 73 71 6c 69 74 65 33 55 74 66 38 52 65 61 64 28  sqlite3Utf8Read(
29ca0 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 4c 6f 67  const u8**);.Log
29cb0 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73  Est sqlite3LogEs
29cc0 74 28 75 36 34 29 3b 0a 4c 6f 67 45 73 74 20 73  t(u64);.LogEst s
29cd0 71 6c 69 74 65 33 4c 6f 67 45 73 74 41 64 64 28  qlite3LogEstAdd(
29ce0 4c 6f 67 45 73 74 2c 4c 6f 67 45 73 74 29 3b 0a  LogEst,LogEst);.
29cf0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
29d00 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
29d10 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c  .LogEst sqlite3L
29d20 6f 67 45 73 74 46 72 6f 6d 44 6f 75 62 6c 65 28  ogEstFromDouble(
29d30 64 6f 75 62 6c 65 29 3b 0a 23 65 6e 64 69 66 0a  double);.#endif.
29d40 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
29d50 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53  TE_ENABLE_STMT_S
29d60 43 41 4e 53 54 41 54 55 53 29 20 7c 7c 20 5c 0a  CANSTATUS) || \.
29d70 20 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c 49      defined(SQLI
29d80 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
29d90 4f 52 5f 53 54 41 54 34 29 20 7c 7c 20 5c 0a 20  OR_STAT4) || \. 
29da0 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54     defined(SQLIT
29db0 45 5f 45 58 50 4c 41 49 4e 5f 45 53 54 49 4d 41  E_EXPLAIN_ESTIMA
29dc0 54 45 44 5f 52 4f 57 53 29 0a 75 36 34 20 73 71  TED_ROWS).u64 sq
29dd0 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74  lite3LogEstToInt
29de0 28 4c 6f 67 45 73 74 29 3b 0a 23 65 6e 64 69 66  (LogEst);.#endif
29df0 0a 56 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 56  .VList *sqlite3V
29e00 4c 69 73 74 41 64 64 28 73 71 6c 69 74 65 33 2a  ListAdd(sqlite3*
29e10 2c 56 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68  ,VList*,const ch
29e20 61 72 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 63 6f  ar*,int,int);.co
29e30 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
29e40 33 56 4c 69 73 74 4e 75 6d 54 6f 4e 61 6d 65 28  3VListNumToName(
29e50 56 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 69 6e 74  VList*,int);.int
29e60 20 73 71 6c 69 74 65 33 56 4c 69 73 74 4e 61 6d   sqlite3VListNam
29e70 65 54 6f 4e 75 6d 28 56 4c 69 73 74 2a 2c 63 6f  eToNum(VList*,co
29e80 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a  nst char*,int);.
29e90 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20  ./*.** Routines 
29ea0 74 6f 20 72 65 61 64 20 61 6e 64 20 77 72 69 74  to read and writ
29eb0 65 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74  e variable-lengt
29ec0 68 20 69 6e 74 65 67 65 72 73 2e 20 20 54 68 65  h integers.  The
29ed0 73 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65  se used to.** be
29ee0 20 64 65 66 69 6e 65 64 20 6c 6f 63 61 6c 6c 79   defined locally
29ef0 2c 20 62 75 74 20 6e 6f 77 20 77 65 20 75 73 65  , but now we use
29f00 20 74 68 65 20 76 61 72 69 6e 74 20 72 6f 75 74   the varint rout
29f10 69 6e 65 73 20 69 6e 20 74 68 65 20 75 74 69 6c  ines in the util
29f20 2e 63 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2f 0a 69  .c.** file..*/.i
29f30 6e 74 20 73 71 6c 69 74 65 33 50 75 74 56 61 72  nt sqlite3PutVar
29f40 69 6e 74 28 75 6e 73 69 67 6e 65 64 20 63 68 61  int(unsigned cha
29f50 72 2a 2c 20 75 36 34 29 3b 0a 75 38 20 73 71 6c  r*, u64);.u8 sql
29f60 69 74 65 33 47 65 74 56 61 72 69 6e 74 28 63 6f  ite3GetVarint(co
29f70 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
29f80 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a 75 38 20  r *, u64 *);.u8 
29f90 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
29fa0 33 32 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  32(const unsigne
29fb0 64 20 63 68 61 72 20 2a 2c 20 75 33 32 20 2a 29  d char *, u32 *)
29fc0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 72  ;.int sqlite3Var
29fd0 69 6e 74 4c 65 6e 28 75 36 34 20 76 29 3b 0a 0a  intLen(u64 v);..
29fe0 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e  /*.** The common
29ff0 20 63 61 73 65 20 69 73 20 66 6f 72 20 61 20 76   case is for a v
2a000 61 72 69 6e 74 20 74 6f 20 62 65 20 61 20 73 69  arint to be a si
2a010 6e 67 6c 65 20 62 79 74 65 2e 20 20 54 68 65 79  ngle byte.  They
2a020 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 6d 61   following.** ma
2a030 63 72 6f 73 20 68 61 6e 64 6c 65 20 74 68 65 20  cros handle the 
2a040 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 69 74 68  common case with
2a050 6f 75 74 20 61 20 70 72 6f 63 65 64 75 72 65 20  out a procedure 
2a060 63 61 6c 6c 2c 20 62 75 74 20 74 68 65 6e 20 63  call, but then c
2a070 61 6c 6c 0a 2a 2a 20 74 68 65 20 70 72 6f 63 65  all.** the proce
2a080 64 75 72 65 20 66 6f 72 20 6c 61 72 67 65 72 20  dure for larger 
2a090 76 61 72 69 6e 74 73 2e 0a 2a 2f 0a 23 64 65 66  varints..*/.#def
2a0a0 69 6e 65 20 67 65 74 56 61 72 69 6e 74 33 32 28  ine getVarint32(
2a0b0 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28  A,B)  \.  (u8)((
2a0c0 2a 28 41 29 3c 28 75 38 29 30 78 38 30 29 3f 28  *(A)<(u8)0x80)?(
2a0d0 28 42 29 3d 28 75 33 32 29 2a 28 41 29 29 2c 31  (B)=(u32)*(A)),1
2a0e0 3a 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e  :sqlite3GetVarin
2a0f0 74 33 32 28 28 41 29 2c 28 75 33 32 20 2a 29 26  t32((A),(u32 *)&
2a100 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20 70 75  (B))).#define pu
2a110 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20  tVarint32(A,B)  
2a120 5c 0a 20 20 28 75 38 29 28 28 28 75 33 32 29 28  \.  (u8)(((u32)(
2a130 42 29 3c 28 75 33 32 29 30 78 38 30 29 3f 28 2a  B)<(u32)0x80)?(*
2a140 28 41 29 3d 28 75 6e 73 69 67 6e 65 64 20 63 68  (A)=(unsigned ch
2a150 61 72 29 28 42 29 29 2c 31 3a 5c 0a 20 20 73 71  ar)(B)),1:\.  sq
2a160 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 28 28  lite3PutVarint((
2a170 41 29 2c 28 42 29 29 29 0a 23 64 65 66 69 6e 65  A),(B))).#define
2a180 20 67 65 74 56 61 72 69 6e 74 20 20 20 20 73 71   getVarint    sq
2a190 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 0a 23  lite3GetVarint.#
2a1a0 64 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74  define putVarint
2a1b0 20 20 20 20 73 71 6c 69 74 65 33 50 75 74 56 61      sqlite3PutVa
2a1c0 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63 68 61  rint...const cha
2a1d0 72 20 2a 73 71 6c 69 74 65 33 49 6e 64 65 78 41  r *sqlite3IndexA
2a1e0 66 66 69 6e 69 74 79 53 74 72 28 73 71 6c 69 74  ffinityStr(sqlit
2a1f0 65 33 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f  e3*, Index*);.vo
2a200 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65 41  id sqlite3TableA
2a210 66 66 69 6e 69 74 79 28 56 64 62 65 2a 2c 20 54  ffinity(Vdbe*, T
2a220 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 63 68 61  able*, int);.cha
2a230 72 20 73 71 6c 69 74 65 33 43 6f 6d 70 61 72 65  r sqlite3Compare
2a240 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70  Affinity(Expr *p
2a250 45 78 70 72 2c 20 63 68 61 72 20 61 66 66 32 29  Expr, char aff2)
2a260 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64  ;.int sqlite3Ind
2a270 65 78 41 66 66 69 6e 69 74 79 4f 6b 28 45 78 70  exAffinityOk(Exp
2a280 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20 69  r *pExpr, char i
2a290 64 78 5f 61 66 66 69 6e 69 74 79 29 3b 0a 63 68  dx_affinity);.ch
2a2a0 61 72 20 73 71 6c 69 74 65 33 54 61 62 6c 65 43  ar sqlite3TableC
2a2b0 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 54 61  olumnAffinity(Ta
2a2c0 62 6c 65 2a 2c 69 6e 74 29 3b 0a 63 68 61 72 20  ble*,int);.char 
2a2d0 73 71 6c 69 74 65 33 45 78 70 72 41 66 66 69 6e  sqlite3ExprAffin
2a2e0 69 74 79 28 45 78 70 72 20 2a 70 45 78 70 72 29  ity(Expr *pExpr)
2a2f0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f  ;.int sqlite3Ato
2a300 69 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  i64(const char*,
2a310 20 69 36 34 2a 2c 20 69 6e 74 2c 20 75 38 29 3b   i64*, int, u8);
2a320 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 65 63 4f  .int sqlite3DecO
2a330 72 48 65 78 54 6f 49 36 34 28 63 6f 6e 73 74 20  rHexToI64(const 
2a340 63 68 61 72 2a 2c 20 69 36 34 2a 29 3b 0a 76 6f  char*, i64*);.vo
2a350 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 57  id sqlite3ErrorW
2a360 69 74 68 4d 73 67 28 73 71 6c 69 74 65 33 2a 2c  ithMsg(sqlite3*,
2a370 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
2a380 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c  *,...);.void sql
2a390 69 74 65 33 45 72 72 6f 72 28 73 71 6c 69 74 65  ite3Error(sqlite
2a3a0 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  3*,int);.void sq
2a3b0 6c 69 74 65 33 53 79 73 74 65 6d 45 72 72 6f 72  lite3SystemError
2a3c0 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a  (sqlite3*,int);.
2a3d0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 48 65 78  void *sqlite3Hex
2a3e0 54 6f 42 6c 6f 62 28 73 71 6c 69 74 65 33 2a 2c  ToBlob(sqlite3*,
2a3f0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20   const char *z, 
2a400 69 6e 74 20 6e 29 3b 0a 75 38 20 73 71 6c 69 74  int n);.u8 sqlit
2a410 65 33 48 65 78 54 6f 49 6e 74 28 69 6e 74 20 68  e3HexToInt(int h
2a420 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 77  );.int sqlite3Tw
2a430 6f 50 61 72 74 4e 61 6d 65 28 50 61 72 73 65 20  oPartName(Parse 
2a440 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65  *, Token *, Toke
2a450 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a  n *, Token **);.
2a460 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
2a470 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d  ITE_NEED_ERR_NAM
2a480 45 29 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  E).const char *s
2a490 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 69 6e  qlite3ErrName(in
2a4a0 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 63 6f 6e 73  t);.#endif..cons
2a4b0 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45  t char *sqlite3E
2a4c0 72 72 53 74 72 28 69 6e 74 29 3b 0a 69 6e 74 20  rrStr(int);.int 
2a4d0 73 71 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d  sqlite3ReadSchem
2a4e0 61 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29  a(Parse *pParse)
2a4f0 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
2a500 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28 73 71  e3FindCollSeq(sq
2a510 6c 69 74 65 33 2a 2c 75 38 20 65 6e 63 2c 20 63  lite3*,u8 enc, c
2a520 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b  onst char*,int);
2a530 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
2a540 33 4c 6f 63 61 74 65 43 6f 6c 6c 53 65 71 28 50  3LocateCollSeq(P
2a550 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 63 6f  arse *pParse, co
2a560 6e 73 74 20 63 68 61 72 2a 7a 4e 61 6d 65 29 3b  nst char*zName);
2a570 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
2a580 33 45 78 70 72 43 6f 6c 6c 53 65 71 28 50 61 72  3ExprCollSeq(Par
2a590 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72  se *pParse, Expr
2a5a0 20 2a 70 45 78 70 72 29 3b 0a 45 78 70 72 20 2a   *pExpr);.Expr *
2a5b0 73 71 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f  sqlite3ExprAddCo
2a5c0 6c 6c 61 74 65 54 6f 6b 65 6e 28 50 61 72 73 65  llateToken(Parse
2a5d0 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 2a 2c   *pParse, Expr*,
2a5e0 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 20 69   const Token*, i
2a5f0 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  nt);.Expr *sqlit
2a600 65 33 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65  e3ExprAddCollate
2a610 53 74 72 69 6e 67 28 50 61 72 73 65 2a 2c 45 78  String(Parse*,Ex
2a620 70 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  pr*,const char*)
2a630 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
2a640 78 70 72 53 6b 69 70 43 6f 6c 6c 61 74 65 28 45  xprSkipCollate(E
2a650 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
2a660 65 33 43 68 65 63 6b 43 6f 6c 6c 53 65 71 28 50  e3CheckCollSeq(P
2a670 61 72 73 65 20 2a 2c 20 43 6f 6c 6c 53 65 71 20  arse *, CollSeq 
2a680 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  *);.int sqlite3C
2a690 68 65 63 6b 4f 62 6a 65 63 74 4e 61 6d 65 28 50  heckObjectName(P
2a6a0 61 72 73 65 20 2a 2c 20 63 6f 6e 73 74 20 63 68  arse *, const ch
2a6b0 61 72 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ar *);.void sqli
2a6c0 74 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65  te3VdbeSetChange
2a6d0 73 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74  s(sqlite3 *, int
2a6e0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 64  );.int sqlite3Ad
2a6f0 64 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29  dInt64(i64*,i64)
2a700 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 75 62  ;.int sqlite3Sub
2a710 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b  Int64(i64*,i64);
2a720 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 6c 49  .int sqlite3MulI
2a730 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a  nt64(i64*,i64);.
2a740 69 6e 74 20 73 71 6c 69 74 65 33 41 62 73 49 6e  int sqlite3AbsIn
2a750 74 33 32 28 69 6e 74 29 3b 0a 23 69 66 64 65 66  t32(int);.#ifdef
2a760 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 38   SQLITE_ENABLE_8
2a770 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69 64 20 73 71  _3_NAMES.void sq
2a780 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69 78 33  lite3FileSuffix3
2a790 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68  (const char*, ch
2a7a0 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  ar*);.#else.# de
2a7b0 66 69 6e 65 20 73 71 6c 69 74 65 33 46 69 6c 65  fine sqlite3File
2a7c0 53 75 66 66 69 78 33 28 58 2c 59 29 0a 23 65 6e  Suffix3(X,Y).#en
2a7d0 64 69 66 0a 75 38 20 73 71 6c 69 74 65 33 47 65  dif.u8 sqlite3Ge
2a7e0 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74 20 63  tBoolean(const c
2a7f0 68 61 72 20 2a 7a 2c 75 38 29 3b 0a 0a 63 6f 6e  har *z,u8);..con
2a800 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  st void *sqlite3
2a810 56 61 6c 75 65 54 65 78 74 28 73 71 6c 69 74 65  ValueText(sqlite
2a820 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 69  3_value*, u8);.i
2a830 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65 42  nt sqlite3ValueB
2a840 79 74 65 73 28 73 71 6c 69 74 65 33 5f 76 61 6c  ytes(sqlite3_val
2a850 75 65 2a 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73  ue*, u8);.void s
2a860 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53 74  qlite3ValueSetSt
2a870 72 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  r(sqlite3_value*
2a880 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69  , int, const voi
2a890 64 20 2a 2c 75 38 2c 0a 20 20 20 20 20 20 20 20  d *,u8,.        
2a8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a8b0 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b  void(*)(void*));
2a8c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c  .void sqlite3Val
2a8d0 75 65 53 65 74 4e 75 6c 6c 28 73 71 6c 69 74 65  ueSetNull(sqlite
2a8e0 33 5f 76 61 6c 75 65 2a 29 3b 0a 76 6f 69 64 20  3_value*);.void 
2a8f0 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65  sqlite3ValueFree
2a900 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29  (sqlite3_value*)
2a910 3b 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  ;.sqlite3_value 
2a920 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77  *sqlite3ValueNew
2a930 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 23 69 66  (sqlite3 *);.#if
2a940 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2a950 5f 55 54 46 31 36 0a 63 68 61 72 20 2a 73 71 6c  _UTF16.char *sql
2a960 69 74 65 33 55 74 66 31 36 74 6f 38 28 73 71 6c  ite3Utf16to8(sql
2a970 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 76 6f  ite3 *, const vo
2a980 69 64 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 23  id*, int, u8);.#
2a990 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65  endif.int sqlite
2a9a0 33 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 73  3ValueFromExpr(s
2a9b0 71 6c 69 74 65 33 20 2a 2c 20 45 78 70 72 20 2a  qlite3 *, Expr *
2a9c0 2c 20 75 38 2c 20 75 38 2c 20 73 71 6c 69 74 65  , u8, u8, sqlite
2a9d0 33 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69  3_value **);.voi
2a9e0 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70  d sqlite3ValueAp
2a9f0 70 6c 79 41 66 66 69 6e 69 74 79 28 73 71 6c 69  plyAffinity(sqli
2aa00 74 65 33 5f 76 61 6c 75 65 20 2a 2c 20 75 38 2c  te3_value *, u8,
2aa10 20 75 38 29 3b 0a 23 69 66 6e 64 65 66 20 53 51   u8);.#ifndef SQ
2aa20 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f  LITE_AMALGAMATIO
2aa30 4e 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75  N.extern const u
2aa40 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c  nsigned char sql
2aa50 69 74 65 33 4f 70 63 6f 64 65 50 72 6f 70 65 72  ite3OpcodeProper
2aa60 74 79 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e  ty[];.extern con
2aa70 73 74 20 63 68 61 72 20 73 71 6c 69 74 65 33 53  st char sqlite3S
2aa80 74 72 42 49 4e 41 52 59 5b 5d 3b 0a 65 78 74 65  trBINARY[];.exte
2aa90 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  rn const unsigne
2aaa0 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 55 70  d char sqlite3Up
2aab0 70 65 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78  perToLower[];.ex
2aac0 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67  tern const unsig
2aad0 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33  ned char sqlite3
2aae0 43 74 79 70 65 4d 61 70 5b 5d 3b 0a 65 78 74 65  CtypeMap[];.exte
2aaf0 72 6e 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 73  rn const Token s
2ab00 71 6c 69 74 65 33 49 6e 74 54 6f 6b 65 6e 73 5b  qlite3IntTokens[
2ab10 5d 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49 54 45  ];.extern SQLITE
2ab20 5f 57 53 44 20 73 74 72 75 63 74 20 53 71 6c 69  _WSD struct Sqli
2ab30 74 65 33 43 6f 6e 66 69 67 20 73 71 6c 69 74 65  te3Config sqlite
2ab40 33 43 6f 6e 66 69 67 3b 0a 65 78 74 65 72 6e 20  3Config;.extern 
2ab50 46 75 6e 63 44 65 66 48 61 73 68 20 73 71 6c 69  FuncDefHash sqli
2ab60 74 65 33 42 75 69 6c 74 69 6e 46 75 6e 63 74 69  te3BuiltinFuncti
2ab70 6f 6e 73 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  ons;.#ifndef SQL
2ab80 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 65 78 74  ITE_OMIT_WSD.ext
2ab90 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 50  ern int sqlite3P
2aba0 65 6e 64 69 6e 67 42 79 74 65 3b 0a 23 65 6e 64  endingByte;.#end
2abb0 69 66 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  if.#endif.void s
2abc0 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f  qlite3RootPageMo
2abd0 76 65 64 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  ved(sqlite3*, in
2abe0 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
2abf0 69 64 20 73 71 6c 69 74 65 33 52 65 69 6e 64 65  id sqlite3Reinde
2ac00 78 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  x(Parse*, Token*
2ac10 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
2ac20 73 71 6c 69 74 65 33 41 6c 74 65 72 46 75 6e 63  sqlite3AlterFunc
2ac30 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69  tions(void);.voi
2ac40 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 52 65  d sqlite3AlterRe
2ac50 6e 61 6d 65 54 61 62 6c 65 28 50 61 72 73 65 2a  nameTable(Parse*
2ac60 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65  , SrcList*, Toke
2ac70 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
2ac80 47 65 74 54 6f 6b 65 6e 28 63 6f 6e 73 74 20 75  GetToken(const u
2ac90 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20  nsigned char *, 
2aca0 69 6e 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  int *);.void sql
2acb0 69 74 65 33 4e 65 73 74 65 64 50 61 72 73 65 28  ite3NestedParse(
2acc0 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
2acd0 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20  ar*, ...);.void 
2ace0 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65  sqlite3ExpirePre
2acf0 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28  paredStatements(
2ad00 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73  sqlite3*);.int s
2ad10 71 6c 69 74 65 33 43 6f 64 65 53 75 62 73 65 6c  qlite3CodeSubsel
2ad20 65 63 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ect(Parse*, Expr
2ad30 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76   *, int, int);.v
2ad40 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63  oid sqlite3Selec
2ad50 74 50 72 65 70 28 50 61 72 73 65 2a 2c 20 53 65  tPrep(Parse*, Se
2ad60 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65  lect*, NameConte
2ad70 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  xt*);.void sqlit
2ad80 65 33 53 65 6c 65 63 74 57 72 6f 6e 67 4e 75 6d  e3SelectWrongNum
2ad90 54 65 72 6d 73 45 72 72 6f 72 28 50 61 72 73 65  TermsError(Parse
2ada0 20 2a 70 50 61 72 73 65 2c 20 53 65 6c 65 63 74   *pParse, Select
2adb0 20 2a 70 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   *p);.int sqlite
2adc0 33 4d 61 74 63 68 53 70 61 6e 4e 61 6d 65 28 63  3MatchSpanName(c
2add0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
2ade0 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
2adf0 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
2ae00 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
2ae10 65 73 6f 6c 76 65 45 78 70 72 4e 61 6d 65 73 28  esolveExprNames(
2ae20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78  NameContext*, Ex
2ae30 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
2ae40 33 52 65 73 6f 6c 76 65 45 78 70 72 4c 69 73 74  3ResolveExprList
2ae50 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78  Names(NameContex
2ae60 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  t*, ExprList*);.
2ae70 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f  void sqlite3Reso
2ae80 6c 76 65 53 65 6c 65 63 74 4e 61 6d 65 73 28 50  lveSelectNames(P
2ae90 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  arse*, Select*, 
2aea0 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76  NameContext*);.v
2aeb0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  oid sqlite3Resol
2aec0 76 65 53 65 6c 66 52 65 66 65 72 65 6e 63 65 28  veSelfReference(
2aed0 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e  Parse*,Table*,in
2aee0 74 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74  t,Expr*,ExprList
2aef0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
2af00 65 73 6f 6c 76 65 4f 72 64 65 72 47 72 6f 75 70  esolveOrderGroup
2af10 42 79 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63  By(Parse*, Selec
2af20 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63  t*, ExprList*, c
2af30 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
2af40 64 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44  d sqlite3ColumnD
2af50 65 66 61 75 6c 74 28 56 64 62 65 20 2a 2c 20 54  efault(Vdbe *, T
2af60 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  able *, int, int
2af70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
2af80 6c 74 65 72 46 69 6e 69 73 68 41 64 64 43 6f 6c  lterFinishAddCol
2af90 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b  umn(Parse *, Tok
2afa0 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  en *);.void sqli
2afb0 74 65 33 41 6c 74 65 72 42 65 67 69 6e 41 64 64  te3AlterBeginAdd
2afc0 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20  Column(Parse *, 
2afd0 53 72 63 4c 69 73 74 20 2a 29 3b 0a 43 6f 6c 6c  SrcList *);.Coll
2afe0 53 65 71 20 2a 73 71 6c 69 74 65 33 47 65 74 43  Seq *sqlite3GetC
2aff0 6f 6c 6c 53 65 71 28 50 61 72 73 65 2a 2c 20 75  ollSeq(Parse*, u
2b000 38 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f  8, CollSeq *, co
2b010 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72  nst char*);.char
2b020 20 73 71 6c 69 74 65 33 41 66 66 69 6e 69 74 79   sqlite3Affinity
2b030 54 79 70 65 28 63 6f 6e 73 74 20 63 68 61 72 2a  Type(const char*
2b040 2c 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  , u8*);.void sql
2b050 69 74 65 33 41 6e 61 6c 79 7a 65 28 50 61 72 73  ite3Analyze(Pars
2b060 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  e*, Token*, Toke
2b070 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
2b080 49 6e 76 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65  InvokeBusyHandle
2b090 72 28 42 75 73 79 48 61 6e 64 6c 65 72 2a 29 3b  r(BusyHandler*);
2b0a0 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64  .int sqlite3Find
2b0b0 44 62 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b  Db(sqlite3*, Tok
2b0c0 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
2b0d0 33 46 69 6e 64 44 62 4e 61 6d 65 28 73 71 6c 69  3FindDbName(sqli
2b0e0 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  te3 *, const cha
2b0f0 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  r *);.int sqlite
2b100 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 73 71  3AnalysisLoad(sq
2b110 6c 69 74 65 33 2a 2c 69 6e 74 20 69 44 42 29 3b  lite3*,int iDB);
2b120 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c  .void sqlite3Del
2b130 65 74 65 49 6e 64 65 78 53 61 6d 70 6c 65 73 28  eteIndexSamples(
2b140 73 71 6c 69 74 65 33 2a 2c 49 6e 64 65 78 2a 29  sqlite3*,Index*)
2b150 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
2b160 66 61 75 6c 74 52 6f 77 45 73 74 28 49 6e 64 65  faultRowEst(Inde
2b170 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  x*);.void sqlite
2b180 33 52 65 67 69 73 74 65 72 4c 69 6b 65 46 75 6e  3RegisterLikeFun
2b190 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 2c  ctions(sqlite3*,
2b1a0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
2b1b0 65 33 49 73 4c 69 6b 65 46 75 6e 63 74 69 6f 6e  e3IsLikeFunction
2b1c0 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c  (sqlite3*,Expr*,
2b1d0 69 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f 69  int*,char*);.voi
2b1e0 64 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 43  d sqlite3SchemaC
2b1f0 6c 65 61 72 28 76 6f 69 64 20 2a 29 3b 0a 53 63  lear(void *);.Sc
2b200 68 65 6d 61 20 2a 73 71 6c 69 74 65 33 53 63 68  hema *sqlite3Sch
2b210 65 6d 61 47 65 74 28 73 71 6c 69 74 65 33 20 2a  emaGet(sqlite3 *
2b220 2c 20 42 74 72 65 65 20 2a 29 3b 0a 69 6e 74 20  , Btree *);.int 
2b230 73 71 6c 69 74 65 33 53 63 68 65 6d 61 54 6f 49  sqlite3SchemaToI
2b240 6e 64 65 78 28 73 71 6c 69 74 65 33 20 2a 64 62  ndex(sqlite3 *db
2b250 2c 20 53 63 68 65 6d 61 20 2a 29 3b 0a 4b 65 79  , Schema *);.Key
2b260 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79  Info *sqlite3Key
2b270 49 6e 66 6f 41 6c 6c 6f 63 28 73 71 6c 69 74 65  InfoAlloc(sqlite
2b280 33 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69  3*,int,int);.voi
2b290 64 20 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f  d sqlite3KeyInfo
2b2a0 55 6e 72 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b  Unref(KeyInfo*);
2b2b0 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65  .KeyInfo *sqlite
2b2c0 33 4b 65 79 49 6e 66 6f 52 65 66 28 4b 65 79 49  3KeyInfoRef(KeyI
2b2d0 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a  nfo*);.KeyInfo *
2b2e0 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 4f 66  sqlite3KeyInfoOf
2b2f0 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 49 6e  Index(Parse*, In
2b300 64 65 78 2a 29 3b 0a 23 69 66 64 65 66 20 53 51  dex*);.#ifdef SQ
2b310 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e 74 20 73  LITE_DEBUG.int s
2b320 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 49 73 57  qlite3KeyInfoIsW
2b330 72 69 74 65 61 62 6c 65 28 4b 65 79 49 6e 66 6f  riteable(KeyInfo
2b340 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73  *);.#endif.int s
2b350 71 6c 69 74 65 33 43 72 65 61 74 65 46 75 6e 63  qlite3CreateFunc
2b360 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73  (sqlite3 *, cons
2b370 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69  t char *, int, i
2b380 6e 74 2c 20 76 6f 69 64 20 2a 2c 0a 20 20 76 6f  nt, void *,.  vo
2b390 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63  id (*)(sqlite3_c
2b3a0 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
2b3b0 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20  te3_value **),. 
2b3c0 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65   void (*)(sqlite
2b3d0 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
2b3e0 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29  qlite3_value **)
2b3f0 2c 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74  , void (*)(sqlit
2b400 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20  e3_context*),.  
2b410 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a  FuncDestructor *
2b420 70 44 65 73 74 72 75 63 74 6f 72 0a 29 3b 0a 76  pDestructor.);.v
2b430 6f 69 64 20 73 71 6c 69 74 65 33 4f 6f 6d 46 61  oid sqlite3OomFa
2b440 75 6c 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  ult(sqlite3*);.v
2b450 6f 69 64 20 73 71 6c 69 74 65 33 4f 6f 6d 43 6c  oid sqlite3OomCl
2b460 65 61 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69  ear(sqlite3*);.i
2b470 6e 74 20 73 71 6c 69 74 65 33 41 70 69 45 78 69  nt sqlite3ApiExi
2b480 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69  t(sqlite3 *db, i
2b490 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2b4a0 4f 70 65 6e 54 65 6d 70 44 61 74 61 62 61 73 65  OpenTempDatabase
2b4b0 28 50 61 72 73 65 20 2a 29 3b 0a 0a 76 6f 69 64  (Parse *);..void
2b4c0 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
2b4d0 49 6e 69 74 28 53 74 72 41 63 63 75 6d 2a 2c 20  Init(StrAccum*, 
2b4e0 73 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a 2c  sqlite3*, char*,
2b4f0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
2b500 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
2b510 41 70 70 65 6e 64 28 53 74 72 41 63 63 75 6d 2a  Append(StrAccum*
2b520 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74  ,const char*,int
2b530 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
2b540 74 72 41 63 63 75 6d 41 70 70 65 6e 64 41 6c 6c  trAccumAppendAll
2b550 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74  (StrAccum*,const
2b560 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
2b570 6c 69 74 65 33 41 70 70 65 6e 64 43 68 61 72 28  lite3AppendChar(
2b580 53 74 72 41 63 63 75 6d 2a 2c 69 6e 74 2c 63 68  StrAccum*,int,ch
2b590 61 72 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  ar);.char *sqlit
2b5a0 65 33 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68  e3StrAccumFinish
2b5b0 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69  (StrAccum*);.voi
2b5c0 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75  d sqlite3StrAccu
2b5d0 6d 52 65 73 65 74 28 53 74 72 41 63 63 75 6d 2a  mReset(StrAccum*
2b5e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
2b5f0 65 6c 65 63 74 44 65 73 74 49 6e 69 74 28 53 65  electDestInit(Se
2b600 6c 65 63 74 44 65 73 74 2a 2c 69 6e 74 2c 69 6e  lectDest*,int,in
2b610 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  t);.Expr *sqlite
2b620 33 43 72 65 61 74 65 43 6f 6c 75 6d 6e 45 78 70  3CreateColumnExp
2b630 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 53 72 63  r(sqlite3 *, Src
2b640 4c 69 73 74 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  List *, int, int
2b650 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  );..void sqlite3
2b660 42 61 63 6b 75 70 52 65 73 74 61 72 74 28 73 71  BackupRestart(sq
2b670 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 29 3b  lite3_backup *);
2b680 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63  .void sqlite3Bac
2b690 6b 75 70 55 70 64 61 74 65 28 73 71 6c 69 74 65  kupUpdate(sqlite
2b6a0 33 5f 62 61 63 6b 75 70 20 2a 2c 20 50 67 6e 6f  3_backup *, Pgno
2b6b0 2c 20 63 6f 6e 73 74 20 75 38 20 2a 29 3b 0a 0a  , const u8 *);..
2b6c0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2b6d0 4d 49 54 5f 53 55 42 51 55 45 52 59 0a 69 6e 74  MIT_SUBQUERY.int
2b6e0 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63   sqlite3ExprChec
2b6f0 6b 49 4e 28 50 61 72 73 65 2a 2c 20 45 78 70 72  kIN(Parse*, Expr
2b700 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
2b710 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72 43 68  ne sqlite3ExprCh
2b720 65 63 6b 49 4e 28 78 2c 79 29 20 53 51 4c 49 54  eckIN(x,y) SQLIT
2b730 45 5f 4f 4b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  E_OK.#endif..#if
2b740 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
2b750 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34  E_STAT3_OR_STAT4
2b760 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e 61  .void sqlite3Ana
2b770 6c 79 7a 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f  lyzeFunctions(vo
2b780 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  id);.int sqlite3
2b790 53 74 61 74 34 50 72 6f 62 65 53 65 74 56 61 6c  Stat4ProbeSetVal
2b7a0 75 65 28 0a 20 20 20 20 50 61 72 73 65 2a 2c 49  ue(.    Parse*,I
2b7b0 6e 64 65 78 2a 2c 55 6e 70 61 63 6b 65 64 52 65  ndex*,UnpackedRe
2b7c0 63 6f 72 64 2a 2a 2c 45 78 70 72 2a 2c 69 6e 74  cord**,Expr*,int
2b7d0 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 69 6e 74 20  ,int,int*);.int 
2b7e0 73 71 6c 69 74 65 33 53 74 61 74 34 56 61 6c 75  sqlite3Stat4Valu
2b7f0 65 46 72 6f 6d 45 78 70 72 28 50 61 72 73 65 2a  eFromExpr(Parse*
2b800 2c 20 45 78 70 72 2a 2c 20 75 38 2c 20 73 71 6c  , Expr*, u8, sql
2b810 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 76  ite3_value**);.v
2b820 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 34  oid sqlite3Stat4
2b830 50 72 6f 62 65 46 72 65 65 28 55 6e 70 61 63 6b  ProbeFree(Unpack
2b840 65 64 52 65 63 6f 72 64 2a 29 3b 0a 69 6e 74 20  edRecord*);.int 
2b850 73 71 6c 69 74 65 33 53 74 61 74 34 43 6f 6c 75  sqlite3Stat4Colu
2b860 6d 6e 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e  mn(sqlite3*, con
2b870 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 69  st void*, int, i
2b880 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  nt, sqlite3_valu
2b890 65 2a 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74  e**);.char sqlit
2b8a0 65 33 49 6e 64 65 78 43 6f 6c 75 6d 6e 41 66 66  e3IndexColumnAff
2b8b0 69 6e 69 74 79 28 73 71 6c 69 74 65 33 2a 2c 20  inity(sqlite3*, 
2b8c0 49 6e 64 65 78 2a 2c 20 69 6e 74 29 3b 0a 23 65  Index*, int);.#e
2b8d0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
2b8e0 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68 65  interface to the
2b8f0 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61 74 65 64   LEMON-generated
2b900 20 70 61 72 73 65 72 0a 2a 2f 0a 23 69 66 6e 64   parser.*/.#ifnd
2b910 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41  ef SQLITE_AMALGA
2b920 4d 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20 2a 73  MATION.  void *s
2b930 71 6c 69 74 65 33 50 61 72 73 65 72 41 6c 6c 6f  qlite3ParserAllo
2b940 63 28 76 6f 69 64 2a 28 2a 29 28 75 36 34 29 29  c(void*(*)(u64))
2b950 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2b960 50 61 72 73 65 72 46 72 65 65 28 76 6f 69 64 2a  ParserFree(void*
2b970 2c 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29  , void(*)(void*)
2b980 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  );.#endif.void s
2b990 71 6c 69 74 65 33 50 61 72 73 65 72 28 76 6f 69  qlite3Parser(voi
2b9a0 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2c 20  d*, int, Token, 
2b9b0 50 61 72 73 65 2a 29 3b 0a 23 69 66 64 65 66 20  Parse*);.#ifdef 
2b9c0 59 59 54 52 41 43 4b 4d 41 58 53 54 41 43 4b 44  YYTRACKMAXSTACKD
2b9d0 45 50 54 48 0a 20 20 69 6e 74 20 73 71 6c 69 74  EPTH.  int sqlit
2b9e0 65 33 50 61 72 73 65 72 53 74 61 63 6b 50 65 61  e3ParserStackPea
2b9f0 6b 28 76 6f 69 64 2a 29 3b 0a 23 65 6e 64 69 66  k(void*);.#endif
2ba00 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75  ..void sqlite3Au
2ba10 74 6f 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 73  toLoadExtensions
2ba20 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 69 66 6e  (sqlite3*);.#ifn
2ba30 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2ba40 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20  LOAD_EXTENSION. 
2ba50 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f   void sqlite3Clo
2ba60 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c  seExtensions(sql
2ba70 69 74 65 33 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  ite3*);.#else.# 
2ba80 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6c  define sqlite3Cl
2ba90 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 58 29  oseExtensions(X)
2baa0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
2bab0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41   SQLITE_OMIT_SHA
2bac0 52 45 44 5f 43 41 43 48 45 0a 20 20 76 6f 69 64  RED_CACHE.  void
2bad0 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63   sqlite3TableLoc
2bae0 6b 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 2c 20  k(Parse *, int, 
2baf0 69 6e 74 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63  int, u8, const c
2bb00 68 61 72 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20  har *);.#else.  
2bb10 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54  #define sqlite3T
2bb20 61 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c 79  ableLock(v,w,x,y
2bb30 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  ,z).#endif..#ifd
2bb40 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
2bb50 20 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38   int sqlite3Utf8
2bb60 54 6f 38 28 75 6e 73 69 67 6e 65 64 20 63 68 61  To8(unsigned cha
2bb70 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  r*);.#endif..#if
2bb80 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2bb90 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20  VIRTUALTABLE.#  
2bba0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
2bbb0 61 62 43 6c 65 61 72 28 59 29 0a 23 20 20 64 65  abClear(Y).#  de
2bbc0 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
2bbd0 53 79 6e 63 28 58 2c 59 29 20 53 51 4c 49 54 45  Sync(X,Y) SQLITE
2bbe0 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73 71  _OK.#  define sq
2bbf0 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63  lite3VtabRollbac
2bc00 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73  k(X).#  define s
2bc10 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74  qlite3VtabCommit
2bc20 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (X).#  define sq
2bc30 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28  lite3VtabInSync(
2bc40 64 62 29 20 30 0a 23 20 20 64 65 66 69 6e 65 20  db) 0.#  define 
2bc50 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28  sqlite3VtabLock(
2bc60 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  X).#  define sql
2bc70 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 58  ite3VtabUnlock(X
2bc80 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
2bc90 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73  te3VtabUnlockLis
2bca0 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73  t(X).#  define s
2bcb0 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f  qlite3VtabSavepo
2bcc0 69 6e 74 28 58 2c 20 59 2c 20 5a 29 20 53 51 4c  int(X, Y, Z) SQL
2bcd0 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65  ITE_OK.#  define
2bce0 20 73 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c   sqlite3GetVTabl
2bcf0 65 28 58 2c 59 29 20 20 28 28 56 54 61 62 6c 65  e(X,Y)  ((VTable
2bd00 2a 29 30 29 0a 23 65 6c 73 65 0a 20 20 20 76 6f  *)0).#else.   vo
2bd10 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c  id sqlite3VtabCl
2bd20 65 61 72 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  ear(sqlite3 *db,
2bd30 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20 76 6f 69   Table*);.   voi
2bd40 64 20 73 71 6c 69 74 65 33 56 74 61 62 44 69 73  d sqlite3VtabDis
2bd50 63 6f 6e 6e 65 63 74 28 73 71 6c 69 74 65 33 20  connect(sqlite3 
2bd60 2a 64 62 2c 20 54 61 62 6c 65 20 2a 70 29 3b 0a  *db, Table *p);.
2bd70 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74     int sqlite3Vt
2bd80 61 62 53 79 6e 63 28 73 71 6c 69 74 65 33 20 2a  abSync(sqlite3 *
2bd90 64 62 2c 20 56 64 62 65 2a 29 3b 0a 20 20 20 69  db, Vdbe*);.   i
2bda0 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f  nt sqlite3VtabRo
2bdb0 6c 6c 62 61 63 6b 28 73 71 6c 69 74 65 33 20 2a  llback(sqlite3 *
2bdc0 64 62 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69  db);.   int sqli
2bdd0 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 73 71  te3VtabCommit(sq
2bde0 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 76  lite3 *db);.   v
2bdf0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 4c  oid sqlite3VtabL
2be00 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20  ock(VTable *);. 
2be10 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
2be20 61 62 55 6e 6c 6f 63 6b 28 56 54 61 62 6c 65 20  abUnlock(VTable 
2be30 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  *);.   void sqli
2be40 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73  te3VtabUnlockLis
2be50 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20 20  t(sqlite3*);.   
2be60 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 53  int sqlite3VtabS
2be70 61 76 65 70 6f 69 6e 74 28 73 71 6c 69 74 65 33  avepoint(sqlite3
2be80 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20   *, int, int);. 
2be90 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
2bea0 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 56  abImportErrmsg(V
2beb0 64 62 65 2a 2c 20 73 71 6c 69 74 65 33 5f 76 74  dbe*, sqlite3_vt
2bec0 61 62 2a 29 3b 0a 20 20 20 56 54 61 62 6c 65 20  ab*);.   VTable 
2bed0 2a 73 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c  *sqlite3GetVTabl
2bee0 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c  e(sqlite3*, Tabl
2bef0 65 2a 29 3b 0a 20 20 20 4d 6f 64 75 6c 65 20 2a  e*);.   Module *
2bf00 73 71 6c 69 74 65 33 56 74 61 62 43 72 65 61 74  sqlite3VtabCreat
2bf10 65 4d 6f 64 75 6c 65 28 0a 20 20 20 20 20 73 71  eModule(.     sq
2bf20 6c 69 74 65 33 2a 2c 0a 20 20 20 20 20 63 6f 6e  lite3*,.     con
2bf30 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 63  st char*,.     c
2bf40 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64  onst sqlite3_mod
2bf50 75 6c 65 2a 2c 0a 20 20 20 20 20 76 6f 69 64 2a  ule*,.     void*
2bf60 2c 0a 20 20 20 20 20 76 6f 69 64 28 2a 29 28 76  ,.     void(*)(v
2bf70 6f 69 64 2a 29 0a 20 20 20 29 3b 0a 23 20 20 64  oid*).   );.#  d
2bf80 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
2bf90 62 49 6e 53 79 6e 63 28 64 62 29 20 28 28 64 62  bInSync(db) ((db
2bfa0 29 2d 3e 6e 56 54 72 61 6e 73 3e 30 20 26 26 20  )->nVTrans>0 && 
2bfb0 28 64 62 29 2d 3e 61 56 54 72 61 6e 73 3d 3d 30  (db)->aVTrans==0
2bfc0 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c  ).#endif.int sql
2bfd0 69 74 65 33 56 74 61 62 45 70 6f 6e 79 6d 6f 75  ite3VtabEponymou
2bfe0 73 54 61 62 6c 65 49 6e 69 74 28 50 61 72 73 65  sTableInit(Parse
2bff0 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69 64  *,Module*);.void
2c000 20 73 71 6c 69 74 65 33 56 74 61 62 45 70 6f 6e   sqlite3VtabEpon
2c010 79 6d 6f 75 73 54 61 62 6c 65 43 6c 65 61 72 28  ymousTableClear(
2c020 73 71 6c 69 74 65 33 2a 2c 4d 6f 64 75 6c 65 2a  sqlite3*,Module*
2c030 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
2c040 74 61 62 4d 61 6b 65 57 72 69 74 61 62 6c 65 28  tabMakeWritable(
2c050 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a  Parse*,Table*);.
2c060 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
2c070 42 65 67 69 6e 50 61 72 73 65 28 50 61 72 73 65  BeginParse(Parse
2c080 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
2c090 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b  *, Token*, int);
2c0a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
2c0b0 62 46 69 6e 69 73 68 50 61 72 73 65 28 50 61 72  bFinishParse(Par
2c0c0 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  se*, Token*);.vo
2c0d0 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 41 72  id sqlite3VtabAr
2c0e0 67 49 6e 69 74 28 50 61 72 73 65 2a 29 3b 0a 76  gInit(Parse*);.v
2c0f0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 41  oid sqlite3VtabA
2c100 72 67 45 78 74 65 6e 64 28 50 61 72 73 65 2a 2c  rgExtend(Parse*,
2c110 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
2c120 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65  lite3VtabCallCre
2c130 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  ate(sqlite3*, in
2c140 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  t, const char *,
2c150 20 63 68 61 72 20 2a 2a 29 3b 0a 69 6e 74 20 73   char **);.int s
2c160 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 6f  qlite3VtabCallCo
2c170 6e 6e 65 63 74 28 50 61 72 73 65 2a 2c 20 54 61  nnect(Parse*, Ta
2c180 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ble*);.int sqlit
2c190 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72 6f  e3VtabCallDestro
2c1a0 79 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  y(sqlite3*, int,
2c1b0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a   const char *);.
2c1c0 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 42  int sqlite3VtabB
2c1d0 65 67 69 6e 28 73 71 6c 69 74 65 33 20 2a 2c 20  egin(sqlite3 *, 
2c1e0 56 54 61 62 6c 65 20 2a 29 3b 0a 46 75 6e 63 44  VTable *);.FuncD
2c1f0 65 66 20 2a 73 71 6c 69 74 65 33 56 74 61 62 4f  ef *sqlite3VtabO
2c200 76 65 72 6c 6f 61 64 46 75 6e 63 74 69 6f 6e 28  verloadFunction(
2c210 73 71 6c 69 74 65 33 20 2a 2c 46 75 6e 63 44 65  sqlite3 *,FuncDe
2c220 66 2a 2c 20 69 6e 74 20 6e 41 72 67 2c 20 45 78  f*, int nArg, Ex
2c230 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
2c240 65 33 49 6e 76 61 6c 69 64 46 75 6e 63 74 69 6f  e3InvalidFunctio
2c250 6e 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  n(sqlite3_contex
2c260 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76  t*,int,sqlite3_v
2c270 61 6c 75 65 2a 2a 29 3b 0a 73 71 6c 69 74 65 33  alue**);.sqlite3
2c280 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74  _int64 sqlite3St
2c290 6d 74 43 75 72 72 65 6e 74 54 69 6d 65 28 73 71  mtCurrentTime(sq
2c2a0 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b  lite3_context*);
2c2b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65  .int sqlite3Vdbe
2c2c0 50 61 72 61 6d 65 74 65 72 49 6e 64 65 78 28 56  ParameterIndex(V
2c2d0 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  dbe*, const char
2c2e0 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
2c2f0 69 74 65 33 54 72 61 6e 73 66 65 72 42 69 6e 64  ite3TransferBind
2c300 69 6e 67 73 28 73 71 6c 69 74 65 33 5f 73 74 6d  ings(sqlite3_stm
2c310 74 20 2a 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d  t *, sqlite3_stm
2c320 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  t *);.void sqlit
2c330 65 33 50 61 72 73 65 72 52 65 73 65 74 28 50 61  e3ParserReset(Pa
2c340 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  rse*);.int sqlit
2c350 65 33 52 65 70 72 65 70 61 72 65 28 56 64 62 65  e3Reprepare(Vdbe
2c360 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2c370 45 78 70 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e  ExprListCheckLen
2c380 67 74 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72  gth(Parse*, Expr
2c390 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61  List*, const cha
2c3a0 72 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  r*);.CollSeq *sq
2c3b0 6c 69 74 65 33 42 69 6e 61 72 79 43 6f 6d 70 61  lite3BinaryCompa
2c3c0 72 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20  reCollSeq(Parse 
2c3d0 2a 2c 20 45 78 70 72 20 2a 2c 20 45 78 70 72 20  *, Expr *, Expr 
2c3e0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  *);.int sqlite3T
2c3f0 65 6d 70 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73  empInMemory(cons
2c400 74 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e  t sqlite3*);.con
2c410 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
2c420 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28  JournalModename(
2c430 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  int);.#ifndef SQ
2c440 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
2c450 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b  int sqlite3Check
2c460 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20  point(sqlite3*, 
2c470 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20  int, int, int*, 
2c480 69 6e 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  int*);.  int sql
2c490 69 74 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f  ite3WalDefaultHo
2c4a0 6f 6b 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33  ok(void*,sqlite3
2c4b0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  *,const char*,in
2c4c0 74 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  t);.#endif.#ifnd
2c4d0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ef SQLITE_OMIT_C
2c4e0 54 45 0a 20 20 57 69 74 68 20 2a 73 71 6c 69 74  TE.  With *sqlit
2c4f0 65 33 57 69 74 68 41 64 64 28 50 61 72 73 65 2a  e3WithAdd(Parse*
2c500 2c 57 69 74 68 2a 2c 54 6f 6b 65 6e 2a 2c 45 78  ,With*,Token*,Ex
2c510 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 29  prList*,Select*)
2c520 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2c530 57 69 74 68 44 65 6c 65 74 65 28 73 71 6c 69 74  WithDelete(sqlit
2c540 65 33 2a 2c 57 69 74 68 2a 29 3b 0a 20 20 76 6f  e3*,With*);.  vo
2c550 69 64 20 73 71 6c 69 74 65 33 57 69 74 68 50 75  id sqlite3WithPu
2c560 73 68 28 50 61 72 73 65 2a 2c 20 57 69 74 68 2a  sh(Parse*, With*
2c570 2c 20 75 38 29 3b 0a 23 65 6c 73 65 0a 23 64 65  , u8);.#else.#de
2c580 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68  fine sqlite3With
2c590 50 75 73 68 28 78 2c 79 2c 7a 29 0a 23 64 65 66  Push(x,y,z).#def
2c5a0 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68 44  ine sqlite3WithD
2c5b0 65 6c 65 74 65 28 78 2c 79 29 0a 23 65 6e 64 69  elete(x,y).#endi
2c5c0 66 0a 0a 2f 2a 20 44 65 63 6c 61 72 61 74 69 6f  f../* Declaratio
2c5d0 6e 73 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73  ns for functions
2c5e0 20 69 6e 20 66 6b 65 79 2e 63 2e 20 41 6c 6c 20   in fkey.c. All 
2c5f0 6f 66 20 74 68 65 73 65 20 61 72 65 20 72 65 70  of these are rep
2c600 6c 61 63 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d 6f  laced by.** no-o
2c610 70 20 6d 61 63 72 6f 73 20 69 66 20 4f 4d 49 54  p macros if OMIT
2c620 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73 20  _FOREIGN_KEY is 
2c630 64 65 66 69 6e 65 64 2e 20 49 6e 20 74 68 69 73  defined. In this
2c640 20 63 61 73 65 20 6e 6f 20 66 6f 72 65 69 67 6e   case no foreign
2c650 0a 2a 2a 20 6b 65 79 20 66 75 6e 63 74 69 6f 6e  .** key function
2c660 61 6c 69 74 79 20 69 73 20 61 76 61 69 6c 61 62  ality is availab
2c670 6c 65 2e 20 49 66 20 4f 4d 49 54 5f 54 52 49 47  le. If OMIT_TRIG
2c680 47 45 52 20 69 73 20 64 65 66 69 6e 65 64 20 62  GER is defined b
2c690 75 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45 49  ut.** OMIT_FOREI
2c6a0 47 4e 5f 4b 45 59 20 69 73 20 6e 6f 74 2c 20 6f  GN_KEY is not, o
2c6b0 6e 6c 79 20 73 6f 6d 65 20 6f 66 20 74 68 65 20  nly some of the 
2c6c0 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 6e 6f  functions are no
2c6d0 2d 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20 74 68 69  -oped. In.** thi
2c6e0 73 20 63 61 73 65 20 66 6f 72 65 69 67 6e 20 6b  s case foreign k
2c6f0 65 79 73 20 61 72 65 20 70 61 72 73 65 64 2c 20  eys are parsed, 
2c700 62 75 74 20 6e 6f 20 6f 74 68 65 72 20 66 75 6e  but no other fun
2c710 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 0a 2a 2a  ctionality is.**
2c720 20 70 72 6f 76 69 64 65 64 20 28 65 6e 66 6f 72   provided (enfor
2c730 63 65 6d 65 6e 74 20 6f 66 20 46 4b 20 63 6f 6e  cement of FK con
2c740 73 74 72 61 69 6e 74 73 20 72 65 71 75 69 72 65  straints require
2c750 73 20 74 68 65 20 74 72 69 67 67 65 72 73 20 73  s the triggers s
2c760 75 62 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a 23  ub-system)..*/.#
2c770 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2c780 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
2c790 4b 45 59 29 20 26 26 20 21 64 65 66 69 6e 65 64  KEY) && !defined
2c7a0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49  (SQLITE_OMIT_TRI
2c7b0 47 47 45 52 29 0a 20 20 76 6f 69 64 20 73 71 6c  GGER).  void sql
2c7c0 69 74 65 33 46 6b 43 68 65 63 6b 28 50 61 72 73  ite3FkCheck(Pars
2c7d0 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
2c7e0 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29   int, int*, int)
2c7f0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2c800 46 6b 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73  FkDropTable(Pars
2c810 65 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54  e*, SrcList *, T
2c820 61 62 6c 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73  able*);.  void s
2c830 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28  qlite3FkActions(
2c840 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
2c850 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20  ExprList*, int, 
2c860 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 69 6e  int*, int);.  in
2c870 74 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69  t sqlite3FkRequi
2c880 72 65 64 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  red(Parse*, Tabl
2c890 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a  e*, int*, int);.
2c8a0 20 20 75 33 32 20 73 71 6c 69 74 65 33 46 6b 4f    u32 sqlite3FkO
2c8b0 6c 64 6d 61 73 6b 28 50 61 72 73 65 2a 2c 20 54  ldmask(Parse*, T
2c8c0 61 62 6c 65 2a 29 3b 0a 20 20 46 4b 65 79 20 2a  able*);.  FKey *
2c8d0 73 71 6c 69 74 65 33 46 6b 52 65 66 65 72 65 6e  sqlite3FkReferen
2c8e0 63 65 73 28 54 61 62 6c 65 20 2a 29 3b 0a 23 65  ces(Table *);.#e
2c8f0 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
2c900 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 61  lite3FkActions(a
2c910 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64  ,b,c,d,e,f).  #d
2c920 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 43  efine sqlite3FkC
2c930 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 2c 66  heck(a,b,c,d,e,f
2c940 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
2c950 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 61  te3FkDropTable(a
2c960 2c 62 2c 63 29 0a 20 20 23 64 65 66 69 6e 65 20  ,b,c).  #define 
2c970 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b  sqlite3FkOldmask
2c980 28 61 2c 62 29 20 20 20 20 20 20 20 20 20 30 0a  (a,b)         0.
2c990 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
2c9a0 33 46 6b 52 65 71 75 69 72 65 64 28 61 2c 62 2c  3FkRequired(a,b,
2c9b0 63 2c 64 29 20 20 20 20 30 0a 20 20 23 64 65 66  c,d)    0.  #def
2c9c0 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65 66  ine sqlite3FkRef
2c9d0 65 72 65 6e 63 65 73 28 61 29 20 20 20 20 20 20  erences(a)      
2c9e0 20 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64    0.#endif.#ifnd
2c9f0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
2ca00 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20 76 6f 69  OREIGN_KEY.  voi
2ca10 64 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74  d sqlite3FkDelet
2ca20 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 54 61 62  e(sqlite3 *, Tab
2ca30 6c 65 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  le*);.  int sqli
2ca40 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78  te3FkLocateIndex
2ca50 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 46  (Parse*,Table*,F
2ca60 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69 6e 74  Key*,Index**,int
2ca70 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65  **);.#else.  #de
2ca80 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 65  fine sqlite3FkDe
2ca90 6c 65 74 65 28 61 2c 62 29 0a 20 20 23 64 65 66  lete(a,b).  #def
2caa0 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63  ine sqlite3FkLoc
2cab0 61 74 65 49 6e 64 65 78 28 61 2c 62 2c 63 2c 64  ateIndex(a,b,c,d
2cac0 2c 65 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a  ,e).#endif.../*.
2cad0 2a 2a 20 41 76 61 69 6c 61 62 6c 65 20 66 61 75  ** Available fau
2cae0 6c 74 20 69 6e 6a 65 63 74 6f 72 73 2e 20 20 53  lt injectors.  S
2caf0 68 6f 75 6c 64 20 62 65 20 6e 75 6d 62 65 72 65  hould be numbere
2cb00 64 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  d beginning with
2cb10 20 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53   0..*/.#define S
2cb20 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43  QLITE_FAULTINJEC
2cb30 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 30  TOR_MALLOC     0
2cb40 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
2cb50 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 43 4f  FAULTINJECTOR_CO
2cb60 55 4e 54 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a  UNT      1../*.*
2cb70 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20  * The interface 
2cb80 74 6f 20 74 68 65 20 63 6f 64 65 20 69 6e 20 66  to the code in f
2cb90 61 75 6c 74 2e 63 20 75 73 65 64 20 66 6f 72 20  ault.c used for 
2cba0 69 64 65 6e 74 69 66 79 69 6e 67 20 22 62 65 6e  identifying "ben
2cbb0 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20 66  ign".** malloc f
2cbc0 61 69 6c 75 72 65 73 2e 20 54 68 69 73 20 69 73  ailures. This is
2cbd0 20 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20 69 66   only present if
2cbe0 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42   SQLITE_UNTESTAB
2cbf0 4c 45 0a 2a 2a 20 69 73 20 6e 6f 74 20 64 65 66  LE.** is not def
2cc00 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  ined..*/.#ifndef
2cc10 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42   SQLITE_UNTESTAB
2cc20 4c 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  LE.  void sqlite
2cc30 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c  3BeginBenignMall
2cc40 6f 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f 69 64  oc(void);.  void
2cc50 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67   sqlite3EndBenig
2cc60 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 23  nMalloc(void);.#
2cc70 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
2cc80 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67  qlite3BeginBenig
2cc90 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64 65 66  nMalloc().  #def
2cca0 69 6e 65 20 73 71 6c 69 74 65 33 45 6e 64 42 65  ine sqlite3EndBe
2ccb0 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65 6e  nignMalloc().#en
2ccc0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  dif../*.** Allow
2ccd0 65 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65 73  ed return values
2cce0 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 46 69 6e   from sqlite3Fin
2ccf0 64 49 6e 49 6e 64 65 78 28 29 0a 2a 2f 0a 23 64  dInIndex().*/.#d
2cd00 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 52  efine IN_INDEX_R
2cd10 4f 57 49 44 20 20 20 20 20 20 20 20 31 20 20 20  OWID        1   
2cd20 2f 2a 20 53 65 61 72 63 68 20 74 68 65 20 72 6f  /* Search the ro
2cd30 77 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c 65  wid of the table
2cd40 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
2cd50 4e 44 45 58 5f 45 50 48 20 20 20 20 20 20 20 20  NDEX_EPH        
2cd60 20 20 32 20 20 20 2f 2a 20 53 65 61 72 63 68 20    2   /* Search 
2cd70 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 62 2d 74  an ephemeral b-t
2cd80 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  ree */.#define I
2cd90 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 41 53  N_INDEX_INDEX_AS
2cda0 43 20 20 20 20 33 20 20 20 2f 2a 20 45 78 69 73  C    3   /* Exis
2cdb0 74 69 6e 67 20 69 6e 64 65 78 20 41 53 43 45 4e  ting index ASCEN
2cdc0 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65 20  DING */.#define 
2cdd0 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 44  IN_INDEX_INDEX_D
2cde0 45 53 43 20 20 20 34 20 20 20 2f 2a 20 45 78 69  ESC   4   /* Exi
2cdf0 73 74 69 6e 67 20 69 6e 64 65 78 20 44 45 53 43  sting index DESC
2ce00 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e  ENDING */.#defin
2ce10 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20  e IN_INDEX_NOOP 
2ce20 20 20 20 20 20 20 20 20 35 20 20 20 2f 2a 20 4e          5   /* N
2ce30 6f 20 74 61 62 6c 65 20 61 76 61 69 6c 61 62 6c  o table availabl
2ce40 65 2e 20 55 73 65 20 63 6f 6d 70 61 72 69 73 6f  e. Use compariso
2ce50 6e 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  ns */./*.** Allo
2ce60 77 65 64 20 66 6c 61 67 73 20 66 6f 72 20 74 68  wed flags for th
2ce70 65 20 33 72 64 20 70 61 72 61 6d 65 74 65 72 20  e 3rd parameter 
2ce80 74 6f 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e  to sqlite3FindIn
2ce90 49 6e 64 65 78 28 29 2e 0a 2a 2f 0a 23 64 65 66  Index()..*/.#def
2cea0 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f  ine IN_INDEX_NOO
2ceb0 50 5f 4f 4b 20 20 20 20 20 30 78 30 30 30 31 20  P_OK     0x0001 
2cec0 20 2f 2a 20 4f 4b 20 74 6f 20 72 65 74 75 72 6e   /* OK to return
2ced0 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 2a   IN_INDEX_NOOP *
2cee0 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
2cef0 45 58 5f 4d 45 4d 42 45 52 53 48 49 50 20 20 30  EX_MEMBERSHIP  0
2cf00 78 30 30 30 32 20 20 2f 2a 20 49 4e 20 6f 70 65  x0002  /* IN ope
2cf10 72 61 74 6f 72 20 75 73 65 64 20 66 6f 72 20 6d  rator used for m
2cf20 65 6d 62 65 72 73 68 69 70 20 74 65 73 74 20 2a  embership test *
2cf30 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
2cf40 45 58 5f 4c 4f 4f 50 20 20 20 20 20 20 20 20 30  EX_LOOP        0
2cf50 78 30 30 30 34 20 20 2f 2a 20 49 4e 20 6f 70 65  x0004  /* IN ope
2cf60 72 61 74 6f 72 20 75 73 65 64 20 61 73 20 61 20  rator used as a 
2cf70 6c 6f 6f 70 20 2a 2f 0a 69 6e 74 20 73 71 6c 69  loop */.int sqli
2cf80 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 50  te3FindInIndex(P
2cf90 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20  arse *, Expr *, 
2cfa0 75 33 32 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29  u32, int*, int*)
2cfb0 3b 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  ;..int sqlite3Jo
2cfc0 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65  urnalOpen(sqlite
2cfd0 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20 63  3_vfs *, const c
2cfe0 68 61 72 20 2a 2c 20 73 71 6c 69 74 65 33 5f 66  har *, sqlite3_f
2cff0 69 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  ile *, int, int)
2d000 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75  ;.int sqlite3Jou
2d010 72 6e 61 6c 53 69 7a 65 28 73 71 6c 69 74 65 33  rnalSize(sqlite3
2d020 5f 76 66 73 20 2a 29 3b 0a 23 69 66 64 65 66 20  _vfs *);.#ifdef 
2d030 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 54  SQLITE_ENABLE_AT
2d040 4f 4d 49 43 5f 57 52 49 54 45 0a 20 20 69 6e 74  OMIC_WRITE.  int
2d050 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43   sqlite3JournalC
2d060 72 65 61 74 65 28 73 71 6c 69 74 65 33 5f 66 69  reate(sqlite3_fi
2d070 6c 65 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 69  le *);.#endif..i
2d080 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  nt sqlite3Journa
2d090 6c 49 73 49 6e 4d 65 6d 6f 72 79 28 73 71 6c 69  lIsInMemory(sqli
2d0a0 74 65 33 5f 66 69 6c 65 20 2a 70 29 3b 0a 76 6f  te3_file *p);.vo
2d0b0 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75  id sqlite3MemJou
2d0c0 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33  rnalOpen(sqlite3
2d0d0 5f 66 69 6c 65 20 2a 29 3b 0a 0a 76 6f 69 64 20  _file *);..void 
2d0e0 73 71 6c 69 74 65 33 45 78 70 72 53 65 74 48 65  sqlite3ExprSetHe
2d0f0 69 67 68 74 41 6e 64 46 6c 61 67 73 28 50 61 72  ightAndFlags(Par
2d100 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72  se *pParse, Expr
2d110 20 2a 70 29 3b 0a 23 69 66 20 53 51 4c 49 54 45   *p);.#if SQLITE
2d120 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e  _MAX_EXPR_DEPTH>
2d130 30 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 53  0.  int sqlite3S
2d140 65 6c 65 63 74 45 78 70 72 48 65 69 67 68 74 28  electExprHeight(
2d150 53 65 6c 65 63 74 20 2a 29 3b 0a 20 20 69 6e 74  Select *);.  int
2d160 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63   sqlite3ExprChec
2d170 6b 48 65 69 67 68 74 28 50 61 72 73 65 2a 2c 20  kHeight(Parse*, 
2d180 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  int);.#else.  #d
2d190 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65 6c  efine sqlite3Sel
2d1a0 65 63 74 45 78 70 72 48 65 69 67 68 74 28 78 29  ectExprHeight(x)
2d1b0 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c   0.  #define sql
2d1c0 69 74 65 33 45 78 70 72 43 68 65 63 6b 48 65 69  ite3ExprCheckHei
2d1d0 67 68 74 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a  ght(x,y).#endif.
2d1e0 0a 75 33 32 20 73 71 6c 69 74 65 33 47 65 74 34  .u32 sqlite3Get4
2d1f0 62 79 74 65 28 63 6f 6e 73 74 20 75 38 2a 29 3b  byte(const u8*);
2d200 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 75 74  .void sqlite3Put
2d210 34 62 79 74 65 28 75 38 2a 2c 20 75 33 32 29 3b  4byte(u8*, u32);
2d220 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
2d230 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f  ENABLE_UNLOCK_NO
2d240 54 49 46 59 0a 20 20 76 6f 69 64 20 73 71 6c 69  TIFY.  void sqli
2d250 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f  te3ConnectionBlo
2d260 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 2c 20  cked(sqlite3 *, 
2d270 73 71 6c 69 74 65 33 20 2a 29 3b 0a 20 20 76 6f  sqlite3 *);.  vo
2d280 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  id sqlite3Connec
2d290 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 73 71 6c  tionUnlocked(sql
2d2a0 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 76 6f 69  ite3 *db);.  voi
2d2b0 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  d sqlite3Connect
2d2c0 69 6f 6e 43 6c 6f 73 65 64 28 73 71 6c 69 74 65  ionClosed(sqlite
2d2d0 33 20 2a 64 62 29 3b 0a 23 65 6c 73 65 0a 20 20  3 *db);.#else.  
2d2e0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43  #define sqlite3C
2d2f0 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64  onnectionBlocked
2d300 28 78 2c 79 29 0a 20 20 23 64 65 66 69 6e 65 20  (x,y).  #define 
2d310 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
2d320 6e 55 6e 6c 6f 63 6b 65 64 28 78 29 0a 20 20 23  nUnlocked(x).  #
2d330 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
2d340 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 78  nnectionClosed(x
2d350 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ).#endif..#ifdef
2d360 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
2d370 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73  void sqlite3Pars
2d380 65 72 54 72 61 63 65 28 46 49 4c 45 2a 2c 20 63  erTrace(FILE*, c
2d390 68 61 72 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  har *);.#endif..
2d3a0 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c  /*.** If the SQL
2d3b0 49 54 45 5f 45 4e 41 42 4c 45 20 49 4f 54 52 41  ITE_ENABLE IOTRA
2d3c0 43 45 20 65 78 69 73 74 73 20 74 68 65 6e 20 74  CE exists then t
2d3d0 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  he global variab
2d3e0 6c 65 0a 2a 2a 20 73 71 6c 69 74 65 33 49 6f 54  le.** sqlite3IoT
2d3f0 72 61 63 65 20 69 73 20 61 20 70 6f 69 6e 74 65  race is a pointe
2d400 72 20 74 6f 20 61 20 70 72 69 6e 74 66 2d 6c 69  r to a printf-li
2d410 6b 65 20 72 6f 75 74 69 6e 65 20 75 73 65 64 20  ke routine used 
2d420 74 6f 0a 2a 2a 20 70 72 69 6e 74 20 49 2f 4f 20  to.** print I/O 
2d430 74 72 61 63 69 6e 67 20 6d 65 73 73 61 67 65 73  tracing messages
2d440 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
2d450 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43  TE_ENABLE_IOTRAC
2d460 45 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41  E.# define IOTRA
2d470 43 45 28 41 29 20 20 69 66 28 20 73 71 6c 69 74  CE(A)  if( sqlit
2d480 65 33 49 6f 54 72 61 63 65 20 29 7b 20 73 71 6c  e3IoTrace ){ sql
2d490 69 74 65 33 49 6f 54 72 61 63 65 20 41 3b 20 7d  ite3IoTrace A; }
2d4a0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56  .  void sqlite3V
2d4b0 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 56 64  dbeIOTraceSql(Vd
2d4c0 62 65 2a 29 3b 0a 53 51 4c 49 54 45 5f 41 50 49  be*);.SQLITE_API
2d4d0 20 53 51 4c 49 54 45 5f 45 58 54 45 52 4e 20 76   SQLITE_EXTERN v
2d4e0 6f 69 64 20 28 53 51 4c 49 54 45 5f 43 44 45 43  oid (SQLITE_CDEC
2d4f0 4c 20 2a 73 71 6c 69 74 65 33 49 6f 54 72 61 63  L *sqlite3IoTrac
2d500 65 29 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e  e)(const char*,.
2d510 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  ..);.#else.# def
2d520 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29 0a 23  ine IOTRACE(A).#
2d530 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2d540 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 58 29  dbeIOTraceSql(X)
2d550 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
2d560 68 65 73 65 20 72 6f 75 74 69 6e 65 73 20 61 72  hese routines ar
2d570 65 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20  e available for 
2d580 74 68 65 20 6d 65 6d 32 2e 63 20 64 65 62 75 67  the mem2.c debug
2d590 67 69 6e 67 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  ging memory allo
2d5a0 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20  cator.** only.  
2d5b0 54 68 65 79 20 61 72 65 20 75 73 65 64 20 74 6f  They are used to
2d5c0 20 76 65 72 69 66 79 20 74 68 61 74 20 64 69 66   verify that dif
2d5d0 66 65 72 65 6e 74 20 22 74 79 70 65 73 22 20 6f  ferent "types" o
2d5e0 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f  f memory.** allo
2d5f0 63 61 74 69 6f 6e 73 20 61 72 65 20 70 72 6f 70  cations are prop
2d600 65 72 6c 79 20 74 72 61 63 6b 65 64 20 62 79 20  erly tracked by 
2d610 74 68 65 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a  the system..**.*
2d620 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  * sqlite3Memdebu
2d630 67 53 65 74 54 79 70 65 28 29 20 73 65 74 73 20  gSetType() sets 
2d640 74 68 65 20 22 74 79 70 65 22 20 6f 66 20 61 6e  the "type" of an
2d650 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f 20 6f   allocation to o
2d660 6e 65 20 6f 66 0a 2a 2a 20 74 68 65 20 4d 45 4d  ne of.** the MEM
2d670 54 59 50 45 5f 2a 20 6d 61 63 72 6f 73 20 64 65  TYPE_* macros de
2d680 66 69 6e 65 64 20 62 65 6c 6f 77 2e 20 20 54 68  fined below.  Th
2d690 65 20 74 79 70 65 20 6d 75 73 74 20 62 65 20 61  e type must be a
2d6a0 20 62 69 74 6d 61 73 6b 20 77 69 74 68 0a 2a 2a   bitmask with.**
2d6b0 20 61 20 73 69 6e 67 6c 65 20 62 69 74 20 73 65   a single bit se
2d6c0 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33  t..**.** sqlite3
2d6d0 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28  MemdebugHasType(
2d6e0 29 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69  ) returns true i
2d6f0 66 20 61 6e 79 20 6f 66 20 74 68 65 20 62 69 74  f any of the bit
2d700 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a  s in its second.
2d710 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63  ** argument matc
2d720 68 20 74 68 65 20 74 79 70 65 20 73 65 74 20 62  h the type set b
2d730 79 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 73  y the previous s
2d740 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65  qlite3MemdebugSe
2d750 74 54 79 70 65 28 29 2e 0a 2a 2a 20 73 71 6c 69  tType()..** sqli
2d760 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79  te3MemdebugHasTy
2d770 70 65 28 29 20 69 73 20 69 6e 74 65 6e 64 65 64  pe() is intended
2d780 20 66 6f 72 20 75 73 65 20 69 6e 73 69 64 65 20   for use inside 
2d790 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
2d7a0 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74  nts..**.** sqlit
2d7b0 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65  e3MemdebugNoType
2d7c0 28 29 20 72 65 74 75 72 6e 73 20 74 72 75 65 20  () returns true 
2d7d0 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 62  if none of the b
2d7e0 69 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e  its in its secon
2d7f0 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61  d.** argument ma
2d800 74 63 68 20 74 68 65 20 74 79 70 65 20 73 65 74  tch the type set
2d810 20 62 79 20 74 68 65 20 70 72 65 76 69 6f 75 73   by the previous
2d820 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
2d830 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a  SetType()..**.**
2d840 20 50 65 72 68 61 70 73 20 74 68 65 20 6d 6f 73   Perhaps the mos
2d850 74 20 69 6d 70 6f 72 74 61 6e 74 20 70 6f 69 6e  t important poin
2d860 74 20 69 73 20 74 68 65 20 64 69 66 66 65 72 65  t is the differe
2d870 6e 63 65 20 62 65 74 77 65 65 6e 20 4d 45 4d 54  nce between MEMT
2d880 59 50 45 5f 48 45 41 50 0a 2a 2a 20 61 6e 64 20  YPE_HEAP.** and 
2d890 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44  MEMTYPE_LOOKASID
2d8a0 45 2e 20 20 49 66 20 61 6e 20 61 6c 6c 6f 63 61  E.  If an alloca
2d8b0 74 69 6f 6e 20 69 73 20 4d 45 4d 54 59 50 45 5f  tion is MEMTYPE_
2d8c0 4c 4f 4f 4b 41 53 49 44 45 2c 20 74 68 61 74 20  LOOKASIDE, that 
2d8d0 6d 65 61 6e 73 0a 2a 2a 20 69 74 20 6d 69 67 68  means.** it migh
2d8e0 74 20 68 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f  t have been allo
2d8f0 63 61 74 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69  cated by lookasi
2d900 64 65 2c 20 65 78 63 65 70 74 20 74 68 65 20 61  de, except the a
2d910 6c 6c 6f 63 61 74 69 6f 6e 20 77 61 73 0a 2a 2a  llocation was.**
2d920 20 74 6f 6f 20 6c 61 72 67 65 20 6f 72 20 6c 6f   too large or lo
2d930 6f 6b 61 73 69 64 65 20 77 61 73 20 61 6c 72 65  okaside was alre
2d940 61 64 79 20 66 75 6c 6c 2e 20 20 49 74 20 69 73  ady full.  It is
2d950 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 76 65   important to ve
2d960 72 69 66 79 0a 2a 2a 20 74 68 61 74 20 61 6c 6c  rify.** that all
2d970 6f 63 61 74 69 6f 6e 73 20 74 68 61 74 20 6d 69  ocations that mi
2d980 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 73 61  ght have been sa
2d990 74 69 73 66 69 65 64 20 62 79 20 6c 6f 6f 6b 61  tisfied by looka
2d9a0 73 69 64 65 20 61 72 65 20 6e 6f 74 0a 2a 2a 20  side are not.** 
2d9b0 70 61 73 73 65 64 20 62 61 63 6b 20 74 6f 20 6e  passed back to n
2d9c0 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65  on-lookaside fre
2d9d0 65 28 29 20 72 6f 75 74 69 6e 65 73 2e 20 20 41  e() routines.  A
2d9e0 73 73 65 72 74 73 20 73 75 63 68 20 61 73 20 74  sserts such as t
2d9f0 68 65 0a 2a 2a 20 65 78 61 6d 70 6c 65 20 61 62  he.** example ab
2da00 6f 76 65 20 61 72 65 20 70 6c 61 63 65 64 20 6f  ove are placed o
2da10 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73  n the non-lookas
2da20 69 64 65 20 66 72 65 65 28 29 20 72 6f 75 74 69  ide free() routi
2da30 6e 65 73 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a  nes to verify.**
2da40 20 74 68 69 73 20 63 6f 6e 73 74 72 61 69 6e 74   this constraint
2da50 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74  ..**.** All of t
2da60 68 69 73 20 69 73 20 6e 6f 2d 6f 70 20 66 6f 72  his is no-op for
2da70 20 61 20 70 72 6f 64 75 63 74 69 6f 6e 20 62 75   a production bu
2da80 69 6c 64 2e 20 20 49 74 20 6f 6e 6c 79 20 63 6f  ild.  It only co
2da90 6d 65 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79  mes into.** play
2daa0 20 77 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45   when the SQLITE
2dab0 5f 4d 45 4d 44 45 42 55 47 20 63 6f 6d 70 69 6c  _MEMDEBUG compil
2dac0 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73  e-time option is
2dad0 20 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66   used..*/.#ifdef
2dae0 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47   SQLITE_MEMDEBUG
2daf0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  .  void sqlite3M
2db00 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 76  emdebugSetType(v
2db10 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20  oid*,u8);.  int 
2db20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48  sqlite3MemdebugH
2db30 61 73 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29  asType(void*,u8)
2db40 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
2db50 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 76 6f  emdebugNoType(vo
2db60 69 64 2a 2c 75 38 29 3b 0a 23 65 6c 73 65 0a 23  id*,u8);.#else.#
2db70 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d   define sqlite3M
2db80 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 58  emdebugSetType(X
2db90 2c 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f  ,Y)  /* no-op */
2dba0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2dbb0 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
2dbc0 28 58 2c 59 29 20 20 31 0a 23 20 64 65 66 69 6e  (X,Y)  1.# defin
2dbd0 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  e sqlite3Memdebu
2dbe0 67 4e 6f 54 79 70 65 28 58 2c 59 29 20 20 20 31  gNoType(X,Y)   1
2dbf0 0a 23 65 6e 64 69 66 0a 23 64 65 66 69 6e 65 20  .#endif.#define 
2dc00 4d 45 4d 54 59 50 45 5f 48 45 41 50 20 20 20 20  MEMTYPE_HEAP    
2dc10 20 20 20 30 78 30 31 20 20 2f 2a 20 47 65 6e 65     0x01  /* Gene
2dc20 72 61 6c 20 68 65 61 70 20 61 6c 6c 6f 63 61 74  ral heap allocat
2dc30 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
2dc40 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44  MEMTYPE_LOOKASID
2dc50 45 20 20 30 78 30 32 20 20 2f 2a 20 48 65 61 70  E  0x02  /* Heap
2dc60 20 74 68 61 74 20 6d 69 67 68 74 20 68 61 76 65   that might have
2dc70 20 62 65 65 6e 20 6c 6f 6f 6b 61 73 69 64 65 20   been lookaside 
2dc80 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59  */.#define MEMTY
2dc90 50 45 5f 53 43 52 41 54 43 48 20 20 20 20 30 78  PE_SCRATCH    0x
2dca0 30 34 20 20 2f 2a 20 53 63 72 61 74 63 68 20 61  04  /* Scratch a
2dcb0 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64  llocations */.#d
2dcc0 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 50 43  efine MEMTYPE_PC
2dcd0 41 43 48 45 20 20 20 20 20 30 78 30 38 20 20 2f  ACHE     0x08  /
2dce0 2a 20 50 61 67 65 20 63 61 63 68 65 20 61 6c 6c  * Page cache all
2dcf0 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a  ocations */../*.
2dd00 2a 2a 20 54 68 72 65 61 64 69 6e 67 20 69 6e 74  ** Threading int
2dd10 65 72 66 61 63 65 0a 2a 2f 0a 23 69 66 20 53 51  erface.*/.#if SQ
2dd20 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f  LITE_MAX_WORKER_
2dd30 54 48 52 45 41 44 53 3e 30 0a 69 6e 74 20 73 71  THREADS>0.int sq
2dd40 6c 69 74 65 33 54 68 72 65 61 64 43 72 65 61 74  lite3ThreadCreat
2dd50 65 28 53 51 4c 69 74 65 54 68 72 65 61 64 2a 2a  e(SQLiteThread**
2dd60 2c 76 6f 69 64 2a 28 2a 29 28 76 6f 69 64 2a 29  ,void*(*)(void*)
2dd70 2c 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c  ,void*);.int sql
2dd80 69 74 65 33 54 68 72 65 61 64 4a 6f 69 6e 28 53  ite3ThreadJoin(S
2dd90 51 4c 69 74 65 54 68 72 65 61 64 2a 2c 20 76 6f  QLiteThread*, vo
2dda0 69 64 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  id**);.#endif..#
2ddb0 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
2ddc0 45 5f 45 4e 41 42 4c 45 5f 44 42 53 54 41 54 5f  E_ENABLE_DBSTAT_
2ddd0 56 54 41 42 29 20 7c 7c 20 64 65 66 69 6e 65 64  VTAB) || defined
2dde0 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 69 6e  (SQLITE_TEST).in
2ddf0 74 20 73 71 6c 69 74 65 33 44 62 73 74 61 74 52  t sqlite3DbstatR
2de00 65 67 69 73 74 65 72 28 73 71 6c 69 74 65 33 2a  egister(sqlite3*
2de10 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73  );.#endif..int s
2de20 71 6c 69 74 65 33 45 78 70 72 56 65 63 74 6f 72  qlite3ExprVector
2de30 53 69 7a 65 28 45 78 70 72 20 2a 70 45 78 70 72  Size(Expr *pExpr
2de40 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
2de50 70 72 49 73 56 65 63 74 6f 72 28 45 78 70 72 20  prIsVector(Expr 
2de60 2a 70 45 78 70 72 29 3b 0a 45 78 70 72 20 2a 73  *pExpr);.Expr *s
2de70 71 6c 69 74 65 33 56 65 63 74 6f 72 46 69 65 6c  qlite3VectorFiel
2de80 64 53 75 62 65 78 70 72 28 45 78 70 72 2a 2c 20  dSubexpr(Expr*, 
2de90 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  int);.Expr *sqli
2dea0 74 65 33 45 78 70 72 46 6f 72 56 65 63 74 6f 72  te3ExprForVector
2deb0 46 69 65 6c 64 28 50 61 72 73 65 2a 2c 45 78 70  Field(Parse*,Exp
2dec0 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  r*,int);.void sq
2ded0 6c 69 74 65 33 56 65 63 74 6f 72 45 72 72 6f 72  lite3VectorError
2dee0 4d 73 67 28 50 61 72 73 65 2a 2c 20 45 78 70 72  Msg(Parse*, Expr
2def0 2a 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  *);..#ifndef SQL
2df00 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45  ITE_OMIT_COMPILE
2df10 4f 50 54 49 4f 4e 5f 44 49 41 47 53 0a 63 6f 6e  OPTION_DIAGS.con
2df20 73 74 20 63 68 61 72 20 2a 2a 73 71 6c 69 74 65  st char **sqlite
2df30 33 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 28  3CompileOptions(
2df40 69 6e 74 20 2a 70 6e 4f 70 74 29 3b 0a 23 65 6e  int *pnOpt);.#en
2df50 64 69 66 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53  dif..#endif /* S
2df60 51 4c 49 54 45 49 4e 54 5f 48 20 2a 2f 0a        QLITEINT_H */.