/ Hex Artifact Content
Login

Artifact 96197a18f041b9ab99e6cee0db39dbf771ac7762d9f0f63d9e719285f0478664:


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 20 20 54 68 65 20 69 41  e query.  The iA
f7d0: 72 67 20 69 73 20 69 67 6e 6f 72 65 64 2e 20 20  rg is ignored.  
f7e0: 54 68 65 20 75 73 65 72 2d 64 61 74 61 20 69 73  The user-data is
f7f0: 20 61 6c 77 61 79 73 20 73 65 74 0a 2a 2a 20 20   always set.**  
f800: 20 20 20 74 6f 20 61 20 4e 55 4c 4c 20 70 6f 69     to a NULL poi
f810: 6e 74 65 72 2e 20 20 54 68 65 20 62 4e 43 20 70  nter.  The bNC p
f820: 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20  arameter is not 
f830: 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 55  used..**.**   PU
f840: 52 45 5f 44 41 54 45 28 7a 4e 61 6d 65 2c 20 6e  RE_DATE(zName, n
f850: 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
f860: 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73  xFunc).**     Us
f870: 65 64 20 66 6f 72 20 22 70 75 72 65 22 20 64 61  ed for "pure" da
f880: 74 65 2f 74 69 6d 65 20 66 75 6e 63 74 69 6f 6e  te/time function
f890: 73 2c 20 74 68 69 73 20 6d 61 63 72 6f 20 69 73  s, this macro is
f8a0: 20 6c 69 6b 65 20 44 46 55 4e 43 54 49 4f 4e 0a   like DFUNCTION.
f8b0: 2a 2a 20 20 20 20 20 65 78 63 65 70 74 20 74 68  **     except th
f8c0: 61 74 20 69 74 20 64 6f 65 73 20 73 65 74 20 74  at it does set t
f8d0: 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  he SQLITE_FUNC_C
f8e0: 4f 4e 53 54 41 4e 54 20 66 6c 61 67 73 2e 20 20  ONSTANT flags.  
f8f0: 69 41 72 67 20 69 73 0a 2a 2a 20 20 20 20 20 69  iArg is.**     i
f900: 67 6e 6f 72 65 64 20 61 6e 64 20 74 68 65 20 75  gnored and the u
f910: 73 65 72 2d 64 61 74 61 20 66 6f 72 20 74 68 65  ser-data for the
f920: 73 65 20 66 75 6e 63 74 69 6f 6e 73 20 69 73 20  se functions is 
f930: 73 65 74 20 74 6f 20 61 6e 20 0a 2a 2a 20 20 20  set to an .**   
f940: 20 20 61 72 62 69 74 72 61 72 79 20 6e 6f 6e 2d    arbitrary non-
f950: 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 2e 20 20 54  NULL pointer.  T
f960: 68 65 20 62 4e 43 20 70 61 72 61 6d 65 74 65 72  he bNC parameter
f970: 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a   is not used..**
f980: 0a 2a 2a 20 20 20 41 47 47 52 45 47 41 54 45 28  .**   AGGREGATE(
f990: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
f9a0: 67 2c 20 62 4e 43 2c 20 78 53 74 65 70 2c 20 78  g, bNC, xStep, x
f9b0: 46 69 6e 61 6c 29 0a 2a 2a 20 20 20 20 20 55 73  Final).**     Us
f9c0: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20  ed to create an 
f9d0: 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
f9e0: 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d  on definition im
f9f0: 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20  plemented by.** 
fa00: 20 20 20 20 74 68 65 20 43 20 66 75 6e 63 74 69      the C functi
fa10: 6f 6e 73 20 78 53 74 65 70 20 61 6e 64 20 78 46  ons xStep and xF
fa20: 69 6e 61 6c 2e 20 54 68 65 20 66 69 72 73 74 20  inal. The first 
fa30: 66 6f 75 72 20 70 61 72 61 6d 65 74 65 72 73 0a  four parameters.
fa40: 2a 2a 20 20 20 20 20 61 72 65 20 69 6e 74 65 72  **     are inter
fa50: 70 72 65 74 65 64 20 69 6e 20 74 68 65 20 73 61  preted in the sa
fa60: 6d 65 20 77 61 79 20 61 73 20 74 68 65 20 66 69  me way as the fi
fa70: 72 73 74 20 34 20 70 61 72 61 6d 65 74 65 72 73  rst 4 parameters
fa80: 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54   to.**     FUNCT
fa90: 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c  ION()..**.**   L
faa0: 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e  IKEFUNC(zName, n
fab0: 41 72 67 2c 20 70 41 72 67 2c 20 66 6c 61 67 73  Arg, pArg, flags
fac0: 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f  ).**     Used to
fad0: 20 63 72 65 61 74 65 20 61 20 73 63 61 6c 61 72   create a scalar
fae0: 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69   function defini
faf0: 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69  tion of a functi
fb00: 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20 20  on zName.**     
fb10: 74 68 61 74 20 61 63 63 65 70 74 73 20 6e 41 72  that accepts nAr
fb20: 67 20 61 72 67 75 6d 65 6e 74 73 20 61 6e 64 20  g arguments and 
fb30: 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62  is implemented b
fb40: 79 20 61 20 63 61 6c 6c 20 74 6f 20 43 0a 2a 2a  y a call to C.**
fb50: 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69       function li
fb60: 6b 65 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74  keFunc. Argument
fb70: 20 70 41 72 67 20 69 73 20 63 61 73 74 20 74 6f   pArg is cast to
fb80: 20 61 20 28 76 6f 69 64 20 2a 29 20 61 6e 64 20   a (void *) and 
fb90: 6d 61 64 65 0a 2a 2a 20 20 20 20 20 61 76 61 69  made.**     avai
fba0: 6c 61 62 6c 65 20 61 73 20 74 68 65 20 66 75 6e  lable as the fun
fbb0: 63 74 69 6f 6e 20 75 73 65 72 2d 64 61 74 61 20  ction user-data 
fbc0: 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61  (sqlite3_user_da
fbd0: 74 61 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20  ta()). The.**   
fbe0: 20 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 20    FuncDef.flags 
fbf0: 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20  variable is set 
fc00: 74 6f 20 74 68 65 20 76 61 6c 75 65 20 70 61 73  to the value pas
fc10: 73 65 64 20 61 73 20 74 68 65 20 66 6c 61 67 73  sed as the flags
fc20: 0a 2a 2a 20 20 20 20 20 70 61 72 61 6d 65 74 65  .**     paramete
fc30: 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55  r..*/.#define FU
fc40: 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
fc50: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
fc60: 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  Func) \.  {nArg,
fc70: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
fc80: 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46  STANT|SQLITE_UTF
fc90: 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55  8|(bNC*SQLITE_FU
fca0: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a  NC_NEEDCOLL), \.
fcb0: 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
fcc0: 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78  _PTR(iArg), 0, x
fcd0: 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  Func, 0, #zName,
fce0: 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 56   {0} }.#define V
fcf0: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
fd00: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
fd10: 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72   xFunc) \.  {nAr
fd20: 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  g, SQLITE_UTF8|(
fd30: 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  bNC*SQLITE_FUNC_
fd40: 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20  NEEDCOLL), \.   
fd50: 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
fd60: 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e  R(iArg), 0, xFun
fd70: 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30  c, 0, #zName, {0
fd80: 7d 20 7d 0a 23 64 65 66 69 6e 65 20 44 46 55 4e  } }.#define DFUN
fd90: 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
fda0: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
fdb0: 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  unc) \.  {nArg, 
fdc0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43  SQLITE_FUNC_SLOC
fdd0: 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46 38 2c  HNG|SQLITE_UTF8,
fde0: 20 5c 0a 20 20 20 30 2c 20 30 2c 20 78 46 75 6e   \.   0, 0, xFun
fdf0: 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30  c, 0, #zName, {0
fe00: 7d 20 7d 0a 23 64 65 66 69 6e 65 20 50 55 52 45  } }.#define PURE
fe10: 5f 44 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72  _DATE(zName, nAr
fe20: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
fe30: 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  unc) \.  {nArg, 
fe40: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43  SQLITE_FUNC_SLOC
fe50: 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c  HNG|SQLITE_UTF8|
fe60: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
fe70: 54 41 4e 54 2c 20 5c 0a 20 20 20 28 76 6f 69 64  TANT, \.   (void
fe80: 2a 29 78 46 75 6e 63 2c 20 30 2c 20 78 46 75 6e  *)xFunc, 0, xFun
fe90: 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30  c, 0, #zName, {0
fea0: 7d 20 7d 0a 23 64 65 66 69 6e 65 20 46 55 4e 43  } }.#define FUNC
feb0: 54 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41 72  TION2(zName, nAr
fec0: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
fed0: 75 6e 63 2c 20 65 78 74 72 61 46 6c 61 67 73 29  unc, extraFlags)
fee0: 20 5c 0a 20 20 7b 6e 41 72 67 2c 53 51 4c 49 54   \.  {nArg,SQLIT
fef0: 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c  E_FUNC_CONSTANT|
ff00: 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43  SQLITE_UTF8|(bNC
ff10: 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
ff20: 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67  DCOLL)|extraFlag
ff30: 73 2c 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e  s,\.   SQLITE_IN
ff40: 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20  T_TO_PTR(iArg), 
ff50: 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e  0, xFunc, 0, #zN
ff60: 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69  ame, {0} }.#defi
ff70: 6e 65 20 53 54 52 5f 46 55 4e 43 54 49 4f 4e 28  ne STR_FUNCTION(
ff80: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72  zName, nArg, pAr
ff90: 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c  g, bNC, xFunc) \
ffa0: 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
ffb0: 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51  _FUNC_SLOCHNG|SQ
ffc0: 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53  LITE_UTF8|(bNC*S
ffd0: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
ffe0: 4f 4c 4c 29 2c 20 5c 0a 20 20 20 70 41 72 67 2c  OLL), \.   pArg,
fff0: 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23 7a   0, xFunc, 0, #z
10000 4e 61 6d 65 2c 20 7d 0a 23 64 65 66 69 6e 65 20  Name, }.#define 
10010 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20  LIKEFUNC(zName, 
10020 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c 61 67 73  nArg, arg, flags
10030 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
10040 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
10050 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 66 6c  T|SQLITE_UTF8|fl
10060 61 67 73 2c 20 5c 0a 20 20 20 28 76 6f 69 64 20  ags, \.   (void 
10070 2a 29 61 72 67 2c 20 30 2c 20 6c 69 6b 65 46 75  *)arg, 0, likeFu
10080 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b  nc, 0, #zName, {
10090 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 41 47 47  0} }.#define AGG
100a0 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41  REGATE(zName, nA
100b0 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74  rg, arg, nc, xSt
100c0 65 70 2c 20 78 46 69 6e 61 6c 29 20 5c 0a 20 20  ep, xFinal) \.  
100d0 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54  {nArg, SQLITE_UT
100e0 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55  F8|(nc*SQLITE_FU
100f0 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a  NC_NEEDCOLL), \.
10100 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
10110 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20 78 53  _PTR(arg), 0, xS
10120 74 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d  tep,xFinal,#zNam
10130 65 2c 20 7b 30 7d 7d 0a 23 64 65 66 69 6e 65 20  e, {0}}.#define 
10140 41 47 47 52 45 47 41 54 45 32 28 7a 4e 61 6d 65  AGGREGATE2(zName
10150 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c  , nArg, arg, nc,
10160 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20   xStep, xFinal, 
10170 65 78 74 72 61 46 6c 61 67 73 29 20 5c 0a 20 20  extraFlags) \.  
10180 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54  {nArg, SQLITE_UT
10190 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55  F8|(nc*SQLITE_FU
101a0 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74  NC_NEEDCOLL)|ext
101b0 72 61 46 6c 61 67 73 2c 20 5c 0a 20 20 20 53 51  raFlags, \.   SQ
101c0 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28  LITE_INT_TO_PTR(
101d0 61 72 67 29 2c 20 30 2c 20 78 53 74 65 70 2c 78  arg), 0, xStep,x
101e0 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 20 7b 30  Final,#zName, {0
101f0 7d 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20 63 75  }}../*.** All cu
10200 72 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 73  rrent savepoints
10210 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61   are stored in a
10220 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61   linked list sta
10230 72 74 69 6e 67 20 61 74 0a 2a 2a 20 73 71 6c 69  rting at.** sqli
10240 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 20  te3.pSavepoint. 
10250 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e  The first elemen
10260 74 20 69 6e 20 74 68 65 20 6c 69 73 74 20 69 73  t in the list is
10270 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
10280 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64 20 73 61 76  ly.** opened sav
10290 65 70 6f 69 6e 74 2e 20 53 61 76 65 70 6f 69 6e  epoint. Savepoin
102a0 74 73 20 61 72 65 20 61 64 64 65 64 20 74 6f 20  ts are added to 
102b0 74 68 65 20 6c 69 73 74 20 62 79 20 74 68 65 20  the list by the 
102c0 76 64 62 65 0a 2a 2a 20 4f 50 5f 53 61 76 65 70  vdbe.** OP_Savep
102d0 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  oint instruction
102e0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 61 76 65  ..*/.struct Save
102f0 70 6f 69 6e 74 20 7b 0a 20 20 63 68 61 72 20 2a  point {.  char *
10300 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
10310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
10320 20 53 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65 20   Savepoint name 
10330 28 6e 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64 29  (nul-terminated)
10340 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72   */.  i64 nDefer
10350 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20  redCons;        
10360 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
10370 62 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20  ber of deferred 
10380 66 6b 20 76 69 6f 6c 61 74 69 6f 6e 73 20 2a 2f  fk violations */
10390 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64  .  i64 nDeferred
103a0 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20 20  ImmCons;        
103b0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
103c0 20 6f 66 20 64 65 66 65 72 72 65 64 20 69 6d 6d   of deferred imm
103d0 20 66 6b 2e 20 2a 2f 0a 20 20 53 61 76 65 70 6f   fk. */.  Savepo
103e0 69 6e 74 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  int *pNext;     
103f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
10400 20 50 61 72 65 6e 74 20 73 61 76 65 70 6f 69 6e   Parent savepoin
10410 74 20 28 69 66 20 61 6e 79 29 20 2a 2f 0a 7d 3b  t (if any) */.};
10420 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
10430 6f 77 69 6e 67 20 61 72 65 20 75 73 65 64 20 61  owing are used a
10440 73 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61 72  s the second par
10450 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65  ameter to sqlite
10460 33 53 61 76 65 70 6f 69 6e 74 28 29 2c 0a 2a 2a  3Savepoint(),.**
10470 20 61 6e 64 20 61 73 20 74 68 65 20 50 31 20 61   and as the P1 a
10480 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 4f  rgument to the O
10490 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73 74  P_Savepoint inst
104a0 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66  ruction..*/.#def
104b0 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 42 45  ine SAVEPOINT_BE
104c0 47 49 4e 20 20 20 20 20 20 30 0a 23 64 65 66 69  GIN      0.#defi
104d0 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  ne SAVEPOINT_REL
104e0 45 41 53 45 20 20 20 20 31 0a 23 64 65 66 69 6e  EASE    1.#defin
104f0 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c  e SAVEPOINT_ROLL
10500 42 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a  BACK   2.../*.**
10510 20 45 61 63 68 20 53 51 4c 69 74 65 20 6d 6f 64   Each SQLite mod
10520 75 6c 65 20 28 76 69 72 74 75 61 6c 20 74 61 62  ule (virtual tab
10530 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 29 20 69  le definition) i
10540 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e 0a  s defined by an.
10550 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  ** instance of t
10560 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
10570 75 63 74 75 72 65 2c 20 73 74 6f 72 65 64 20 69  ucture, stored i
10580 6e 20 74 68 65 20 73 71 6c 69 74 65 33 2e 61 4d  n the sqlite3.aM
10590 6f 64 75 6c 65 0a 2a 2a 20 68 61 73 68 20 74 61  odule.** hash ta
105a0 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4d  ble..*/.struct M
105b0 6f 64 75 6c 65 20 7b 0a 20 20 63 6f 6e 73 74 20  odule {.  const 
105c0 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
105d0 70 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20 2f  pModule;       /
105e0 2a 20 43 61 6c 6c 62 61 63 6b 20 70 6f 69 6e 74  * Callback point
105f0 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ers */.  const c
10600 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
10610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
10620 20 4e 61 6d 65 20 70 61 73 73 65 64 20 74 6f 20   Name passed to 
10630 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20  create_module() 
10640 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 78 3b  */.  void *pAux;
10650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10660 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 41 75            /* pAu
10670 78 20 70 61 73 73 65 64 20 74 6f 20 63 72 65 61  x passed to crea
10680 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20  te_module() */. 
10690 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79   void (*xDestroy
106a0 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20 20  )(void *);      
106b0 20 20 20 20 20 20 2f 2a 20 4d 6f 64 75 6c 65 20        /* Module 
106c0 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74  destructor funct
106d0 69 6f 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ion */.  Table *
106e0 70 45 70 6f 54 61 62 3b 20 20 20 20 20 20 20 20  pEpoTab;        
106f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
10700 20 45 70 6f 6e 79 6d 6f 75 73 20 74 61 62 6c 65   Eponymous table
10710 20 66 6f 72 20 74 68 69 73 20 6d 6f 64 75 6c 65   for this module
10720 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e   */.};../*.** in
10730 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
10740 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 61  each column of a
10750 6e 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20 68  n SQL table is h
10760 65 6c 64 20 69 6e 20 61 6e 20 69 6e 73 74 61 6e  eld in an instan
10770 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74  ce.** of this st
10780 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75  ructure..*/.stru
10790 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20 63 68  ct Column {.  ch
107a0 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 2f  ar *zName;     /
107b0 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 63  * Name of this c
107c0 6f 6c 75 6d 6e 2c 20 5c 30 30 30 2c 20 74 68 65  olumn, \000, the
107d0 6e 20 74 68 65 20 74 79 70 65 20 2a 2f 0a 20 20  n the type */.  
107e0 45 78 70 72 20 2a 70 44 66 6c 74 3b 20 20 20 20  Expr *pDflt;    
107f0 20 2f 2a 20 44 65 66 61 75 6c 74 20 76 61 6c 75   /* Default valu
10800 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e  e of this column
10810 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c   */.  char *zCol
10820 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74  l;     /* Collat
10830 69 6e 67 20 73 65 71 75 65 6e 63 65 2e 20 20 49  ing sequence.  I
10840 66 20 4e 55 4c 4c 2c 20 75 73 65 20 74 68 65 20  f NULL, use the 
10850 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20  default */.  u8 
10860 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20 20 20 2f 2a  notNull;      /*
10870 20 41 6e 20 4f 45 5f 20 63 6f 64 65 20 66 6f 72   An OE_ code for
10880 20 68 61 6e 64 6c 69 6e 67 20 61 20 4e 4f 54 20   handling a NOT 
10890 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20  NULL constraint 
108a0 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69  */.  char affini
108b0 74 79 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20  ty;   /* One of 
108c0 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 2e  the SQLITE_AFF_.
108d0 2e 2e 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75  .. values */.  u
108e0 38 20 73 7a 45 73 74 3b 20 20 20 20 20 20 20 20  8 szEst;        
108f0 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69 7a  /* Estimated siz
10900 65 20 6f 66 20 76 61 6c 75 65 20 69 6e 20 74 68  e of value in th
10910 69 73 20 63 6f 6c 75 6d 6e 2e 20 73 69 7a 65 6f  is column. sizeo
10920 66 28 49 4e 54 29 3d 3d 31 20 2a 2f 0a 20 20 75  f(INT)==1 */.  u
10930 38 20 63 6f 6c 46 6c 61 67 73 3b 20 20 20 20 20  8 colFlags;     
10940 2f 2a 20 42 6f 6f 6c 65 61 6e 20 70 72 6f 70 65  /* Boolean prope
10950 72 74 69 65 73 2e 20 20 53 65 65 20 43 4f 4c 46  rties.  See COLF
10960 4c 41 47 5f 20 64 65 66 69 6e 65 73 20 62 65 6c  LAG_ defines bel
10970 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c  ow */.};../* All
10980 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
10990 43 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61 67 73 3a  Column.colFlags:
109a0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46  .*/.#define COLF
109b0 4c 41 47 5f 50 52 49 4d 4b 45 59 20 20 30 78 30  LAG_PRIMKEY  0x0
109c0 30 30 31 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e  001    /* Column
109d0 20 69 73 20 70 61 72 74 20 6f 66 20 74 68 65 20   is part of the 
109e0 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23  primary key */.#
109f0 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48  define COLFLAG_H
10a00 49 44 44 45 4e 20 20 20 30 78 30 30 30 32 20 20  IDDEN   0x0002  
10a10 20 20 2f 2a 20 41 20 68 69 64 64 65 6e 20 63 6f    /* A hidden co
10a20 6c 75 6d 6e 20 69 6e 20 61 20 76 69 72 74 75 61  lumn in a virtua
10a30 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  l table */.#defi
10a40 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 41 53 54 59  ne COLFLAG_HASTY
10a50 50 45 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a  PE  0x0004    /*
10a60 20 54 79 70 65 20 6e 61 6d 65 20 66 6f 6c 6c 6f   Type name follo
10a70 77 73 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 2a  ws column name *
10a80 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c 6c  /../*.** A "Coll
10a90 61 74 69 6e 67 20 53 65 71 75 65 6e 63 65 22 20  ating Sequence" 
10aa0 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e  is defined by an
10ab0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
10ac0 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74   following.** st
10ad0 72 75 63 74 75 72 65 2e 20 43 6f 6e 63 65 70 74  ructure. Concept
10ae0 75 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61 74 69  ually, a collati
10af0 6e 67 20 73 65 71 75 65 6e 63 65 20 63 6f 6e 73  ng sequence cons
10b00 69 73 74 73 20 6f 66 20 61 20 6e 61 6d 65 20 61  ists of a name a
10b10 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70 61 72 69 73  nd.** a comparis
10b20 6f 6e 20 72 6f 75 74 69 6e 65 20 74 68 61 74 20  on routine that 
10b30 64 65 66 69 6e 65 73 20 74 68 65 20 6f 72 64 65  defines the orde
10b40 72 20 6f 66 20 74 68 61 74 20 73 65 71 75 65 6e  r of that sequen
10b50 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43 6f 6c  ce..**.** If Col
10b60 6c 53 65 71 2e 78 43 6d 70 20 69 73 20 4e 55 4c  lSeq.xCmp is NUL
10b70 4c 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74  L, it means that
10b80 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e   the.** collatin
10b90 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 75 6e  g sequence is un
10ba0 64 65 66 69 6e 65 64 2e 20 20 49 6e 64 69 63 65  defined.  Indice
10bb0 73 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20 75 6e  s built on an un
10bc0 64 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c 61  defined.** colla
10bd0 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 6d 61  ting sequence ma
10be0 79 20 6e 6f 74 20 62 65 20 72 65 61 64 20 6f 72  y not be read or
10bf0 20 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74 72   written..*/.str
10c00 75 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a 20 20  uct CollSeq {.  
10c10 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
10c20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
10c30 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73   the collating s
10c40 65 71 75 65 6e 63 65 2c 20 55 54 46 2d 38 20 65  equence, UTF-8 e
10c50 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38 20 65  ncoded */.  u8 e
10c60 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nc;             
10c70 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69    /* Text encodi
10c80 6e 67 20 68 61 6e 64 6c 65 64 20 62 79 20 78 43  ng handled by xC
10c90 6d 70 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  mp() */.  void *
10ca0 70 55 73 65 72 3b 20 20 20 20 20 20 20 20 20 20  pUser;          
10cb0 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e  /* First argumen
10cc0 74 20 74 6f 20 78 43 6d 70 28 29 20 2a 2f 0a 20  t to xCmp() */. 
10cd0 20 69 6e 74 20 28 2a 78 43 6d 70 29 28 76 6f 69   int (*xCmp)(voi
10ce0 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f  d*,int, const vo
10cf0 69 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  id*, int, const 
10d00 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 28  void*);.  void (
10d10 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 3b 20 20  *xDel)(void*);  
10d20 2f 2a 20 44 65 73 74 72 75 63 74 6f 72 20 66 6f  /* Destructor fo
10d30 72 20 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f  r pUser */.};../
10d40 2a 0a 2a 2a 20 41 20 73 6f 72 74 20 6f 72 64 65  *.** A sort orde
10d50 72 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 20  r can be either 
10d60 41 53 43 20 6f 72 20 44 45 53 43 2e 0a 2a 2f 0a  ASC or DESC..*/.
10d70 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
10d80 4f 5f 41 53 43 20 20 20 20 20 20 20 30 20 20 2f  O_ASC       0  /
10d90 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64  * Sort in ascend
10da0 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65  ing order */.#de
10db0 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 44  fine SQLITE_SO_D
10dc0 45 53 43 20 20 20 20 20 20 31 20 20 2f 2a 20 53  ESC      1  /* S
10dd0 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67  ort in ascending
10de0 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e   order */.#defin
10df0 65 20 53 51 4c 49 54 45 5f 53 4f 5f 55 4e 44 45  e SQLITE_SO_UNDE
10e00 46 49 4e 45 44 20 2d 31 20 2f 2a 20 4e 6f 20 73  FINED -1 /* No s
10e10 6f 72 74 20 6f 72 64 65 72 20 73 70 65 63 69 66  ort order specif
10e20 69 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f  ied */../*.** Co
10e30 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 79  lumn affinity ty
10e40 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73 65  pes..**.** These
10e50 20 75 73 65 64 20 74 6f 20 68 61 76 65 20 6d 6e   used to have mn
10e60 65 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c 69 6b 65  emonic name like
10e70 20 27 69 27 20 66 6f 72 20 53 51 4c 49 54 45 5f   'i' for SQLITE_
10e80 41 46 46 5f 49 4e 54 45 47 45 52 20 61 6e 64 0a  AFF_INTEGER and.
10e90 2a 2a 20 27 74 27 20 66 6f 72 20 53 51 4c 49 54  ** 't' for SQLIT
10ea0 45 5f 41 46 46 5f 54 45 58 54 2e 20 20 42 75 74  E_AFF_TEXT.  But
10eb0 20 77 65 20 63 61 6e 20 73 61 76 65 20 61 20 6c   we can save a l
10ec0 69 74 74 6c 65 20 73 70 61 63 65 20 61 6e 64 20  ittle space and 
10ed0 69 6d 70 72 6f 76 65 0a 2a 2a 20 74 68 65 20 73  improve.** the s
10ee0 70 65 65 64 20 61 20 6c 69 74 74 6c 65 20 62 79  peed a little by
10ef0 20 6e 75 6d 62 65 72 69 6e 67 20 74 68 65 20 76   numbering the v
10f00 61 6c 75 65 73 20 63 6f 6e 73 65 63 75 74 69 76  alues consecutiv
10f10 65 6c 79 2e 0a 2a 2a 0a 2a 2a 20 42 75 74 20 72  ely..**.** But r
10f20 61 74 68 65 72 20 74 68 61 6e 20 73 74 61 72 74  ather than start
10f30 20 77 69 74 68 20 30 20 6f 72 20 31 2c 20 77 65   with 0 or 1, we
10f40 20 62 65 67 69 6e 20 77 69 74 68 20 27 41 27 2e   begin with 'A'.
10f50 20 20 54 68 61 74 20 77 61 79 2c 0a 2a 2a 20 77    That way,.** w
10f60 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 61 66 66  hen multiple aff
10f70 69 6e 69 74 79 20 74 79 70 65 73 20 61 72 65 20  inity types are 
10f80 63 6f 6e 63 61 74 65 6e 61 74 65 64 20 69 6e 74  concatenated int
10f90 6f 20 61 20 73 74 72 69 6e 67 20 61 6e 64 0a 2a  o a string and.*
10fa0 2a 20 75 73 65 64 20 61 73 20 74 68 65 20 50 34  * used as the P4
10fb0 20 6f 70 65 72 61 6e 64 2c 20 74 68 65 79 20 77   operand, they w
10fc0 69 6c 6c 20 62 65 20 6d 6f 72 65 20 72 65 61 64  ill be more read
10fd0 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65  able..**.** Note
10fe0 20 61 6c 73 6f 20 74 68 61 74 20 74 68 65 20 6e   also that the n
10ff0 75 6d 65 72 69 63 20 74 79 70 65 73 20 61 72 65  umeric types are
11000 20 67 72 6f 75 70 65 64 20 74 6f 67 65 74 68 65   grouped togethe
11010 72 20 73 6f 20 74 68 61 74 20 74 65 73 74 69 6e  r so that testin
11020 67 0a 2a 2a 20 66 6f 72 20 61 20 6e 75 6d 65 72  g.** for a numer
11030 69 63 20 74 79 70 65 20 69 73 20 61 20 73 69 6e  ic type is a sin
11040 67 6c 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  gle comparison. 
11050 20 41 6e 64 20 74 68 65 20 42 4c 4f 42 20 74 79   And the BLOB ty
11060 70 65 20 69 73 20 66 69 72 73 74 2e 0a 2a 2f 0a  pe is first..*/.
11070 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
11080 46 46 5f 42 4c 4f 42 20 20 20 20 20 27 41 27 0a  FF_BLOB     'A'.
11090 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
110a0 46 46 5f 54 45 58 54 20 20 20 20 20 27 42 27 0a  FF_TEXT     'B'.
110b0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
110c0 46 46 5f 4e 55 4d 45 52 49 43 20 20 27 43 27 0a  FF_NUMERIC  'C'.
110d0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
110e0 46 46 5f 49 4e 54 45 47 45 52 20 20 27 44 27 0a  FF_INTEGER  'D'.
110f0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
11100 46 46 5f 52 45 41 4c 20 20 20 20 20 27 45 27 0a  FF_REAL     'E'.
11110 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  .#define sqlite3
11120 49 73 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  IsNumericAffinit
11130 79 28 58 29 20 20 28 28 58 29 3e 3d 53 51 4c 49  y(X)  ((X)>=SQLI
11140 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 29 0a  TE_AFF_NUMERIC).
11150 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54  ./*.** The SQLIT
11160 45 5f 41 46 46 5f 4d 41 53 4b 20 76 61 6c 75 65  E_AFF_MASK value
11170 73 20 6d 61 73 6b 73 20 6f 66 66 20 74 68 65 20  s masks off the 
11180 73 69 67 6e 69 66 69 63 61 6e 74 20 62 69 74 73  significant bits
11190 20 6f 66 20 61 6e 0a 2a 2a 20 61 66 66 69 6e 69   of an.** affini
111a0 74 79 20 76 61 6c 75 65 2e 0a 2a 2f 0a 23 64 65  ty value..*/.#de
111b0 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
111c0 4d 41 53 4b 20 20 20 20 20 30 78 34 37 0a 0a 2f  MASK     0x47../
111d0 2a 0a 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20  *.** Additional 
111e0 62 69 74 20 76 61 6c 75 65 73 20 74 68 61 74 20  bit values that 
111f0 63 61 6e 20 62 65 20 4f 52 65 64 20 77 69 74 68  can be ORed with
11200 20 61 6e 20 61 66 66 69 6e 69 74 79 20 77 69 74   an affinity wit
11210 68 6f 75 74 0a 2a 2a 20 63 68 61 6e 67 69 6e 67  hout.** changing
11220 20 74 68 65 20 61 66 66 69 6e 69 74 79 2e 0a 2a   the affinity..*
11230 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  *.** The SQLITE_
11240 4e 4f 54 4e 55 4c 4c 20 66 6c 61 67 20 69 73 20  NOTNULL flag is 
11250 61 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66  a combination of
11260 20 4e 55 4c 4c 45 51 20 61 6e 64 20 4a 55 4d 50   NULLEQ and JUMP
11270 49 46 4e 55 4c 4c 2e 0a 2a 2a 20 49 74 20 63 61  IFNULL..** It ca
11280 75 73 65 73 20 61 6e 20 61 73 73 65 72 74 28 29  uses an assert()
11290 20 74 6f 20 66 69 72 65 20 69 66 20 65 69 74 68   to fire if eith
112a0 65 72 20 6f 70 65 72 61 6e 64 20 74 6f 20 61 20  er operand to a 
112b0 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a 2a 20 6f 70  comparison.** op
112c0 65 72 61 74 6f 72 20 69 73 20 4e 55 4c 4c 2e 20  erator is NULL. 
112d0 20 49 74 20 69 73 20 61 64 64 65 64 20 74 6f 20   It is added to 
112e0 63 65 72 74 61 69 6e 20 63 6f 6d 70 61 72 69 73  certain comparis
112f0 6f 6e 20 6f 70 65 72 61 74 6f 72 73 20 74 6f 0a  on operators to.
11300 2a 2a 20 70 72 6f 76 65 20 74 68 61 74 20 74 68  ** prove that th
11310 65 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 61  e operands are a
11320 6c 77 61 79 73 20 4e 4f 54 20 4e 55 4c 4c 2e 0a  lways NOT NULL..
11330 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
11340 45 5f 4b 45 45 50 4e 55 4c 4c 20 20 20 20 20 30  E_KEEPNULL     0
11350 78 30 38 20 20 2f 2a 20 55 73 65 64 20 62 79 20  x08  /* Used by 
11360 76 65 63 74 6f 72 20 3d 3d 20 6f 72 20 3c 3e 20  vector == or <> 
11370 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
11380 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 20 20 30  E_JUMPIFNULL   0
11390 78 31 30 20 20 2f 2a 20 6a 75 6d 70 73 20 69 66  x10  /* jumps if
113a0 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
113b0 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69  is NULL */.#defi
113c0 6e 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50  ne SQLITE_STOREP
113d0 32 20 20 20 20 20 20 30 78 32 30 20 20 2f 2a 20  2      0x20  /* 
113e0 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20  Store result in 
113f0 72 65 67 5b 50 32 5d 20 72 61 74 68 65 72 20 74  reg[P2] rather t
11400 68 61 6e 20 6a 75 6d 70 20 2a 2f 0a 23 64 65 66  han jump */.#def
11410 69 6e 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45  ine SQLITE_NULLE
11420 51 20 20 20 20 20 20 20 30 78 38 30 20 20 2f 2a  Q       0x80  /*
11430 20 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 23 64   NULL=NULL */.#d
11440 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 54  efine SQLITE_NOT
11450 4e 55 4c 4c 20 20 20 20 20 20 30 78 39 30 20 20  NULL      0x90  
11460 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 6f  /* Assert that o
11470 70 65 72 61 6e 64 73 20 61 72 65 20 6e 65 76 65  perands are neve
11480 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  r NULL */../*.**
11490 20 41 6e 20 6f 62 6a 65 63 74 20 6f 66 20 74 68   An object of th
114a0 69 73 20 74 79 70 65 20 69 73 20 63 72 65 61 74  is type is creat
114b0 65 64 20 66 6f 72 20 65 61 63 68 20 76 69 72 74  ed for each virt
114c0 75 61 6c 20 74 61 62 6c 65 20 70 72 65 73 65 6e  ual table presen
114d0 74 20 69 6e 0a 2a 2a 20 74 68 65 20 64 61 74 61  t in.** the data
114e0 62 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a  base schema..**.
114f0 2a 2a 20 49 66 20 74 68 65 20 64 61 74 61 62 61  ** If the databa
11500 73 65 20 73 63 68 65 6d 61 20 69 73 20 73 68 61  se schema is sha
11510 72 65 64 2c 20 74 68 65 6e 20 74 68 65 72 65 20  red, then there 
11520 69 73 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20  is one instance 
11530 6f 66 20 74 68 69 73 0a 2a 2a 20 73 74 72 75 63  of this.** struc
11540 74 75 72 65 20 66 6f 72 20 65 61 63 68 20 64 61  ture for each da
11550 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
11560 6e 20 28 73 71 6c 69 74 65 33 2a 29 20 74 68 61  n (sqlite3*) tha
11570 74 20 75 73 65 73 20 74 68 65 20 73 68 61 72 65  t uses the share
11580 64 0a 2a 2a 20 73 63 68 65 6d 61 2e 20 54 68 69  d.** schema. Thi
11590 73 20 69 73 20 62 65 63 61 75 73 65 20 65 61 63  s is because eac
115a0 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  h database conne
115b0 63 74 69 6f 6e 20 72 65 71 75 69 72 65 73 20 69  ction requires i
115c0 74 73 20 6f 77 6e 20 75 6e 69 71 75 65 0a 2a 2a  ts own unique.**
115d0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
115e0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68   sqlite3_vtab* h
115f0 61 6e 64 6c 65 20 75 73 65 64 20 74 6f 20 61 63  andle used to ac
11600 63 65 73 73 20 74 68 65 20 76 69 72 74 75 61 6c  cess the virtual
11610 20 74 61 62 6c 65 0a 2a 2a 20 69 6d 70 6c 65 6d   table.** implem
11620 65 6e 74 61 74 69 6f 6e 2e 20 73 71 6c 69 74 65  entation. sqlite
11630 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20  3_vtab* handles 
11640 63 61 6e 20 6e 6f 74 20 62 65 20 73 68 61 72 65  can not be share
11650 64 20 62 65 74 77 65 65 6e 0a 2a 2a 20 64 61 74  d between.** dat
11660 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
11670 73 2c 20 65 76 65 6e 20 77 68 65 6e 20 74 68 65  s, even when the
11680 20 72 65 73 74 20 6f 66 20 74 68 65 20 69 6e 2d   rest of the in-
11690 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65 0a  memory database.
116a0 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 73 68 61  ** schema is sha
116b0 72 65 64 2c 20 61 73 20 74 68 65 20 69 6d 70 6c  red, as the impl
116c0 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 74 65 6e  ementation often
116d0 20 73 74 6f 72 65 73 20 74 68 65 20 64 61 74 61   stores the data
116e0 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69  base.** connecti
116f0 6f 6e 20 68 61 6e 64 6c 65 20 70 61 73 73 65 64  on handle passed
11700 20 74 6f 20 69 74 20 76 69 61 20 74 68 65 20 78   to it via the x
11710 43 6f 6e 6e 65 63 74 28 29 20 6f 72 20 78 43 72  Connect() or xCr
11720 65 61 74 65 28 29 20 6d 65 74 68 6f 64 0a 2a 2a  eate() method.**
11730 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69   during initiali
11740 7a 61 74 69 6f 6e 20 69 6e 74 65 72 6e 61 6c 6c  zation internall
11750 79 2e 20 54 68 69 73 20 64 61 74 61 62 61 73 65  y. This database
11760 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
11770 6c 65 20 6d 61 79 0a 2a 2a 20 74 68 65 6e 20 62  le may.** then b
11780 65 20 75 73 65 64 20 62 79 20 74 68 65 20 76 69  e used by the vi
11790 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c  rtual table impl
117a0 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 61 63  ementation to ac
117b0 63 65 73 73 20 72 65 61 6c 20 74 61 62 6c 65 73  cess real tables
117c0 0a 2a 2a 20 77 69 74 68 69 6e 20 74 68 65 20 64  .** within the d
117d0 61 74 61 62 61 73 65 2e 20 53 6f 20 74 68 61 74  atabase. So that
117e0 20 74 68 65 79 20 61 70 70 65 61 72 20 61 73 20   they appear as 
117f0 70 61 72 74 20 6f 66 20 74 68 65 20 63 61 6c 6c  part of the call
11800 65 72 73 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69  ers.** transacti
11810 6f 6e 2c 20 74 68 65 73 65 20 61 63 63 65 73 73  on, these access
11820 65 73 20 6e 65 65 64 20 74 6f 20 62 65 20 6d 61  es need to be ma
11830 64 65 20 76 69 61 20 74 68 65 20 73 61 6d 65 20  de via the same 
11840 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e  database.** conn
11850 65 63 74 69 6f 6e 20 61 73 20 74 68 61 74 20 75  ection as that u
11860 73 65 64 20 74 6f 20 65 78 65 63 75 74 65 20 53  sed to execute S
11870 51 4c 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 6e  QL operations on
11880 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
11890 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54  le..**.** All VT
118a0 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 68 61  able objects tha
118b0 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20  t correspond to 
118c0 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 69  a single table i
118d0 6e 20 61 20 73 68 61 72 65 64 0a 2a 2a 20 64 61  n a shared.** da
118e0 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 61 72  tabase schema ar
118f0 65 20 69 6e 69 74 69 61 6c 6c 79 20 73 74 6f 72  e initially stor
11900 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c  ed in a linked-l
11910 69 73 74 20 70 6f 69 6e 74 65 64 20 74 6f 20 62  ist pointed to b
11920 79 0a 2a 2a 20 74 68 65 20 54 61 62 6c 65 2e 70  y.** the Table.p
11930 56 54 61 62 6c 65 20 6d 65 6d 62 65 72 20 76 61  VTable member va
11940 72 69 61 62 6c 65 20 6f 66 20 74 68 65 20 63 6f  riable of the co
11950 72 72 65 73 70 6f 6e 64 69 6e 67 20 54 61 62 6c  rresponding Tabl
11960 65 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 57 68 65  e object..** Whe
11970 6e 20 61 6e 20 73 71 6c 69 74 65 33 5f 70 72 65  n an sqlite3_pre
11980 70 61 72 65 28 29 20 6f 70 65 72 61 74 69 6f 6e  pare() operation
11990 20 69 73 20 72 65 71 75 69 72 65 64 20 74 6f 20   is required to 
119a0 61 63 63 65 73 73 20 74 68 65 20 76 69 72 74 75  access the virtu
119b0 61 6c 0a 2a 2a 20 74 61 62 6c 65 2c 20 69 74 20  al.** table, it 
119c0 73 65 61 72 63 68 65 73 20 74 68 65 20 6c 69 73  searches the lis
119d0 74 20 66 6f 72 20 74 68 65 20 56 54 61 62 6c 65  t for the VTable
119e0 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64   that correspond
119f0 73 20 74 6f 20 74 68 65 0a 2a 2a 20 64 61 74 61  s to the.** data
11a00 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
11a10 64 6f 69 6e 67 20 74 68 65 20 70 72 65 70 61 72  doing the prepar
11a20 69 6e 67 20 73 6f 20 61 73 20 74 6f 20 75 73 65  ing so as to use
11a30 20 74 68 65 20 63 6f 72 72 65 63 74 0a 2a 2a 20   the correct.** 
11a40 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61  sqlite3_vtab* ha
11a50 6e 64 6c 65 20 69 6e 20 74 68 65 20 63 6f 6d 70  ndle in the comp
11a60 69 6c 65 64 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a  iled query..**.*
11a70 2a 20 57 68 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d  * When an in-mem
11a80 6f 72 79 20 54 61 62 6c 65 20 6f 62 6a 65 63 74  ory Table object
11a90 20 69 73 20 64 65 6c 65 74 65 64 20 28 66 6f 72   is deleted (for
11aa0 20 65 78 61 6d 70 6c 65 20 77 68 65 6e 20 74 68   example when th
11ab0 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 62  e.** schema is b
11ac0 65 69 6e 67 20 72 65 6c 6f 61 64 65 64 20 66 6f  eing reloaded fo
11ad0 72 20 73 6f 6d 65 20 72 65 61 73 6f 6e 29 2c 20  r some reason), 
11ae0 74 68 65 20 56 54 61 62 6c 65 20 6f 62 6a 65 63  the VTable objec
11af0 74 73 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 64 65  ts are not.** de
11b00 6c 65 74 65 64 20 61 6e 64 20 74 68 65 20 73 71  leted and the sq
11b10 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64  lite3_vtab* hand
11b20 6c 65 73 20 61 72 65 20 6e 6f 74 20 78 44 69 73  les are not xDis
11b30 63 6f 6e 6e 65 63 74 28 29 65 64 0a 2a 2a 20 69  connect()ed.** i
11b40 6d 6d 65 64 69 61 74 65 6c 79 2e 20 49 6e 73 74  mmediately. Inst
11b50 65 61 64 2c 20 74 68 65 79 20 61 72 65 20 6d 6f  ead, they are mo
11b60 76 65 64 20 66 72 6f 6d 20 74 68 65 20 54 61 62  ved from the Tab
11b70 6c 65 2e 70 56 54 61 62 6c 65 20 6c 69 73 74 20  le.pVTable list 
11b80 74 6f 0a 2a 2a 20 61 6e 6f 74 68 65 72 20 6c 69  to.** another li
11b90 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65 64  nked list headed
11ba0 20 62 79 20 74 68 65 20 73 71 6c 69 74 65 33 2e   by the sqlite3.
11bb0 70 44 69 73 63 6f 6e 6e 65 63 74 20 6d 65 6d 62  pDisconnect memb
11bc0 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 63 6f 72  er of the.** cor
11bd0 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74  responding sqlit
11be0 65 33 20 73 74 72 75 63 74 75 72 65 2e 20 54 68  e3 structure. Th
11bf0 65 79 20 61 72 65 20 74 68 65 6e 20 64 65 6c 65  ey are then dele
11c00 74 65 64 2f 78 44 69 73 63 6f 6e 6e 65 63 74 65  ted/xDisconnecte
11c10 64 0a 2a 2a 20 6e 65 78 74 20 74 69 6d 65 20 61  d.** next time a
11c20 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 70 72   statement is pr
11c30 65 70 61 72 65 64 20 75 73 69 6e 67 20 73 61 69  epared using sai
11c40 64 20 73 71 6c 69 74 65 33 2a 2e 20 54 68 69 73  d sqlite3*. This
11c50 20 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61   is done.** to a
11c60 76 6f 69 64 20 64 65 61 64 6c 6f 63 6b 20 69 73  void deadlock is
11c70 73 75 65 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d  sues involving m
11c80 75 6c 74 69 70 6c 65 20 73 71 6c 69 74 65 33 2e  ultiple sqlite3.
11c90 6d 75 74 65 78 20 6d 75 74 65 78 65 73 2e 0a 2a  mutex mutexes..*
11ca0 2a 20 52 65 66 65 72 20 74 6f 20 63 6f 6d 6d 65  * Refer to comme
11cb0 6e 74 73 20 61 62 6f 76 65 20 66 75 6e 63 74 69  nts above functi
11cc0 6f 6e 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e  on sqlite3VtabUn
11cd0 6c 6f 63 6b 4c 69 73 74 28 29 20 66 6f 72 20 61  lockList() for a
11ce0 6e 0a 2a 2a 20 65 78 70 6c 61 6e 61 74 69 6f 6e  n.** explanation
11cf0 20 61 73 20 74 6f 20 77 68 79 20 69 74 20 69 73   as to why it is
11d00 20 73 61 66 65 20 74 6f 20 61 64 64 20 61 6e 20   safe to add an 
11d10 65 6e 74 72 79 20 74 6f 20 61 6e 20 73 71 6c 69  entry to an sqli
11d20 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74 0a  te3.pDisconnect.
11d30 2a 2a 20 6c 69 73 74 20 77 69 74 68 6f 75 74 20  ** list without 
11d40 68 6f 6c 64 69 6e 67 20 74 68 65 20 63 6f 72 72  holding the corr
11d50 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65  esponding sqlite
11d60 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 2e 0a 2a  3.mutex mutex..*
11d70 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20  *.** The memory 
11d80 66 6f 72 20 6f 62 6a 65 63 74 73 20 6f 66 20 74  for objects of t
11d90 68 69 73 20 74 79 70 65 20 69 73 20 61 6c 77 61  his type is alwa
11da0 79 73 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 0a  ys allocated by.
11db0 2a 2a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  ** sqlite3DbMall
11dc0 6f 63 28 29 2c 20 75 73 69 6e 67 20 74 68 65 20  oc(), using the 
11dd0 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c  connection handl
11de0 65 20 73 74 6f 72 65 64 20 69 6e 20 56 54 61 62  e stored in VTab
11df0 6c 65 2e 64 62 20 61 73 0a 2a 2a 20 74 68 65 20  le.db as.** the 
11e00 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a  first argument..
11e10 2a 2f 0a 73 74 72 75 63 74 20 56 54 61 62 6c 65  */.struct VTable
11e20 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62   {.  sqlite3 *db
11e30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
11e40 2a 20 44 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  * Database conne
11e50 63 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64  ction associated
11e60 20 77 69 74 68 20 74 68 69 73 20 74 61 62 6c 65   with this table
11e70 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70 4d   */.  Module *pM
11e80 6f 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  od;             
11e90 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 6d 6f  /* Pointer to mo
11ea0 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  dule implementat
11eb0 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ion */.  sqlite3
11ec0 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 20 20 20  _vtab *pVtab;   
11ed0 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
11ee0 20 76 74 61 62 20 69 6e 73 74 61 6e 63 65 20 2a   vtab instance *
11ef0 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20  /.  int nRef;   
11f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
11f10 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74   Number of point
11f20 65 72 73 20 74 6f 20 74 68 69 73 20 73 74 72 75  ers to this stru
11f30 63 74 75 72 65 20 2a 2f 0a 20 20 75 38 20 62 43  cture */.  u8 bC
11f40 6f 6e 73 74 72 61 69 6e 74 3b 20 20 20 20 20 20  onstraint;      
11f50 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
11f60 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65 20  constraints are 
11f70 73 75 70 70 6f 72 74 65 64 20 2a 2f 0a 20 20 69  supported */.  i
11f80 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 20 20  nt iSavepoint;  
11f90 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 70 74           /* Dept
11fa0 68 20 6f 66 20 74 68 65 20 53 41 56 45 50 4f 49  h of the SAVEPOI
11fb0 4e 54 20 73 74 61 63 6b 20 2a 2f 0a 20 20 56 54  NT stack */.  VT
11fc0 61 62 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20 20  able *pNext;    
11fd0 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20          /* Next 
11fe0 69 6e 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28  in linked list (
11ff0 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b  see above) */.};
12000 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73 63 68 65  ../*.** The sche
12010 6d 61 20 66 6f 72 20 65 61 63 68 20 53 51 4c 20  ma for each SQL 
12020 74 61 62 6c 65 20 61 6e 64 20 76 69 65 77 20 69  table and view i
12030 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e  s represented in
12040 20 6d 65 6d 6f 72 79 0a 2a 2a 20 62 79 20 61 6e   memory.** by an
12050 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
12060 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
12070 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ture..*/.struct 
12080 54 61 62 6c 65 20 7b 0a 20 20 63 68 61 72 20 2a  Table {.  char *
12090 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 2f  zName;         /
120a0 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  * Name of the ta
120b0 62 6c 65 20 6f 72 20 76 69 65 77 20 2a 2f 0a 20  ble or view */. 
120c0 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20 20   Column *aCol;  
120d0 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61        /* Informa
120e0 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20  tion about each 
120f0 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65  column */.  Inde
12100 78 20 2a 70 49 6e 64 65 78 3b 20 20 20 20 20 20  x *pIndex;      
12110 20 2f 2a 20 4c 69 73 74 20 6f 66 20 53 51 4c 20   /* List of SQL 
12120 69 6e 64 65 78 65 73 20 6f 6e 20 74 68 69 73 20  indexes on this 
12130 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 53 65 6c 65  table. */.  Sele
12140 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20  ct *pSelect;    
12150 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20 74 61 62   /* NULL for tab
12160 6c 65 73 2e 20 20 50 6f 69 6e 74 73 20 74 6f 20  les.  Points to 
12170 64 65 66 69 6e 69 74 69 6f 6e 20 69 66 20 61 20  definition if a 
12180 76 69 65 77 2e 20 2a 2f 0a 20 20 46 4b 65 79 20  view. */.  FKey 
12190 2a 70 46 4b 65 79 3b 20 20 20 20 20 20 20 20 20  *pFKey;         
121a0 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f  /* Linked list o
121b0 66 20 61 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65  f all foreign ke
121c0 79 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65  ys in this table
121d0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c   */.  char *zCol
121e0 41 66 66 3b 20 20 20 20 20 20 20 2f 2a 20 53 74  Aff;       /* St
121f0 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68  ring defining th
12200 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61  e affinity of ea
12210 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45  ch column */.  E
12220 78 70 72 4c 69 73 74 20 2a 70 43 68 65 63 6b 3b  xprList *pCheck;
12230 20 20 20 20 2f 2a 20 41 6c 6c 20 43 48 45 43 4b      /* All CHECK
12240 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
12250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12260 20 20 20 20 20 20 20 2f 2a 20 20 20 2e 2e 2e 20         /*   ... 
12270 61 6c 73 6f 20 75 73 65 64 20 61 73 20 63 6f 6c  also used as col
12280 75 6d 6e 20 6e 61 6d 65 20 6c 69 73 74 20 69 6e  umn name list in
12290 20 61 20 56 49 45 57 20 2a 2f 0a 20 20 69 6e 74   a VIEW */.  int
122a0 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20 20   tnum;          
122b0 20 20 2f 2a 20 52 6f 6f 74 20 42 54 72 65 65 20    /* Root BTree 
122c0 70 61 67 65 20 66 6f 72 20 74 68 69 73 20 74 61  page for this ta
122d0 62 6c 65 20 2a 2f 0a 20 20 75 33 32 20 6e 54 61  ble */.  u32 nTa
122e0 62 52 65 66 3b 20 20 20 20 20 20 20 20 20 2f 2a  bRef;         /*
122f0 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74   Number of point
12300 65 72 73 20 74 6f 20 74 68 69 73 20 54 61 62 6c  ers to this Tabl
12310 65 20 2a 2f 0a 20 20 75 33 32 20 74 61 62 46 6c  e */.  u32 tabFl
12320 61 67 73 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d  ags;        /* M
12330 61 73 6b 20 6f 66 20 54 46 5f 2a 20 76 61 6c 75  ask of TF_* valu
12340 65 73 20 2a 2f 0a 20 20 69 31 36 20 69 50 4b 65  es */.  i16 iPKe
12350 79 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  y;           /* 
12360 49 66 20 6e 6f 74 20 6e 65 67 61 74 69 76 65 2c  If not negative,
12370 20 75 73 65 20 61 43 6f 6c 5b 69 50 4b 65 79 5d   use aCol[iPKey]
12380 20 61 73 20 74 68 65 20 72 6f 77 69 64 20 2a 2f   as the rowid */
12390 0a 20 20 69 31 36 20 6e 43 6f 6c 3b 20 20 20 20  .  i16 nCol;    
123a0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
123b0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
123c0 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20  this table */.  
123d0 4c 6f 67 45 73 74 20 6e 52 6f 77 4c 6f 67 45 73  LogEst nRowLogEs
123e0 74 3b 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65  t;   /* Estimate
123f0 64 20 72 6f 77 73 20 69 6e 20 74 61 62 6c 65 20  d rows in table 
12400 2d 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74  - from sqlite_st
12410 61 74 31 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4c  at1 table */.  L
12420 6f 67 45 73 74 20 73 7a 54 61 62 52 6f 77 3b 20  ogEst szTabRow; 
12430 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64      /* Estimated
12440 20 73 69 7a 65 20 6f 66 20 65 61 63 68 20 74 61   size of each ta
12450 62 6c 65 20 72 6f 77 20 69 6e 20 62 79 74 65 73  ble row in bytes
12460 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
12470 45 5f 45 4e 41 42 4c 45 5f 43 4f 53 54 4d 55 4c  E_ENABLE_COSTMUL
12480 54 0a 20 20 4c 6f 67 45 73 74 20 63 6f 73 74 4d  T.  LogEst costM
12490 75 6c 74 3b 20 20 20 20 20 2f 2a 20 43 6f 73 74  ult;     /* Cost
124a0 20 6d 75 6c 74 69 70 6c 69 65 72 20 66 6f 72 20   multiplier for 
124b0 75 73 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65  using this table
124c0 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 75 38 20   */.#endif.  u8 
124d0 6b 65 79 43 6f 6e 66 3b 20 20 20 20 20 20 20 20  keyConf;        
124e0 20 20 2f 2a 20 57 68 61 74 20 74 6f 20 64 6f 20    /* What to do 
124f0 69 6e 20 63 61 73 65 20 6f 66 20 75 6e 69 71 75  in case of uniqu
12500 65 6e 65 73 73 20 63 6f 6e 66 6c 69 63 74 20 6f  eness conflict o
12510 6e 20 69 50 4b 65 79 20 2a 2f 0a 23 69 66 6e 64  n iPKey */.#ifnd
12520 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
12530 4c 54 45 52 54 41 42 4c 45 0a 20 20 69 6e 74 20  LTERTABLE.  int 
12540 61 64 64 43 6f 6c 4f 66 66 73 65 74 3b 20 20 20  addColOffset;   
12550 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 20 43 52   /* Offset in CR
12560 45 41 54 45 20 54 41 42 4c 45 20 73 74 6d 74 20  EATE TABLE stmt 
12570 74 6f 20 61 64 64 20 61 20 6e 65 77 20 63 6f 6c  to add a new col
12580 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  umn */.#endif.#i
12590 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
125a0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
125b0 20 69 6e 74 20 6e 4d 6f 64 75 6c 65 41 72 67 3b   int nModuleArg;
125c0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
125d0 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20  of arguments to 
125e0 74 68 65 20 6d 6f 64 75 6c 65 20 2a 2f 0a 20 20  the module */.  
125f0 63 68 61 72 20 2a 2a 61 7a 4d 6f 64 75 6c 65 41  char **azModuleA
12600 72 67 3b 20 20 2f 2a 20 30 3a 20 6d 6f 64 75 6c  rg;  /* 0: modul
12610 65 20 31 3a 20 73 63 68 65 6d 61 20 32 3a 20 76  e 1: schema 2: v
12620 74 61 62 20 6e 61 6d 65 20 33 2e 2e 2e 3a 20 61  tab name 3...: a
12630 72 67 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20  rgs */.  VTable 
12640 2a 70 56 54 61 62 6c 65 3b 20 20 20 20 20 2f 2a  *pVTable;     /*
12650 20 4c 69 73 74 20 6f 66 20 56 54 61 62 6c 65 20   List of VTable 
12660 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a 23 65 6e 64  objects. */.#end
12670 69 66 0a 20 20 54 72 69 67 67 65 72 20 2a 70 54  if.  Trigger *pT
12680 72 69 67 67 65 72 3b 20 20 20 2f 2a 20 4c 69 73  rigger;   /* Lis
12690 74 20 6f 66 20 74 72 69 67 67 65 72 73 20 73 74  t of triggers st
126a0 6f 72 65 64 20 69 6e 20 70 53 63 68 65 6d 61 20  ored in pSchema 
126b0 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63  */.  Schema *pSc
126c0 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68  hema;     /* Sch
126d0 65 6d 61 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ema that contain
126e0 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  s this table */.
126f0 20 20 54 61 62 6c 65 20 2a 70 4e 65 78 74 5a 6f    Table *pNextZo
12700 6d 62 69 65 3b 20 20 2f 2a 20 4e 65 78 74 20 6f  mbie;  /* Next o
12710 6e 20 74 68 65 20 50 61 72 73 65 2e 70 5a 6f 6d  n the Parse.pZom
12720 62 69 65 54 61 62 20 6c 69 73 74 20 2a 2f 0a 7d  bieTab list */.}
12730 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  ;../*.** Allowed
12740 20 76 61 6c 75 65 73 20 66 6f 72 20 54 61 62 6c   values for Tabl
12750 65 2e 74 61 62 46 6c 61 67 73 2e 0a 2a 2a 0a 2a  e.tabFlags..**.*
12760 2a 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 61  * TF_OOOHidden a
12770 70 70 6c 69 65 73 20 74 6f 20 74 61 62 6c 65 73  pplies to tables
12780 20 6f 72 20 76 69 65 77 20 74 68 61 74 20 68 61   or view that ha
12790 76 65 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e  ve hidden column
127a0 73 20 74 68 61 74 20 61 72 65 0a 2a 2a 20 66 6f  s that are.** fo
127b0 6c 6c 6f 77 65 64 20 62 79 20 6e 6f 6e 2d 68 69  llowed by non-hi
127c0 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 2e 20 20 45  dden columns.  E
127d0 78 61 6d 70 6c 65 3a 20 20 22 43 52 45 41 54 45  xample:  "CREATE
127e0 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 78   VIRTUAL TABLE x
127f0 20 55 53 49 4e 47 0a 2a 2a 20 76 74 61 62 31 28   USING.** vtab1(
12800 61 20 48 49 44 44 45 4e 2c 20 62 29 3b 22 2e 20  a HIDDEN, b);". 
12810 20 53 69 6e 63 65 20 22 62 22 20 69 73 20 61 20   Since "b" is a 
12820 6e 6f 6e 2d 68 69 64 64 65 6e 20 63 6f 6c 75 6d  non-hidden colum
12830 6e 20 62 75 74 20 22 61 22 20 69 73 20 68 69 64  n but "a" is hid
12840 64 65 6e 2c 0a 2a 2a 20 74 68 65 20 54 46 5f 4f  den,.** the TF_O
12850 4f 4f 48 69 64 64 65 6e 20 61 74 74 72 69 62 75  OOHidden attribu
12860 74 65 20 77 6f 75 6c 64 20 61 70 70 6c 79 20 69  te would apply i
12870 6e 20 74 68 69 73 20 63 61 73 65 2e 20 20 53 75  n this case.  Su
12880 63 68 20 74 61 62 6c 65 73 20 72 65 71 75 69 72  ch tables requir
12890 65 0a 2a 2a 20 73 70 65 63 69 61 6c 20 68 61 6e  e.** special han
128a0 64 6c 69 6e 67 20 64 75 72 69 6e 67 20 49 4e 53  dling during INS
128b0 45 52 54 20 70 72 6f 63 65 73 73 69 6e 67 2e 0a  ERT processing..
128c0 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 52 65  */.#define TF_Re
128d0 61 64 6f 6e 6c 79 20 20 20 20 20 20 20 20 30 78  adonly        0x
128e0 30 30 30 31 20 20 20 20 2f 2a 20 52 65 61 64 2d  0001    /* Read-
128f0 6f 6e 6c 79 20 73 79 73 74 65 6d 20 74 61 62 6c  only system tabl
12900 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f  e */.#define TF_
12910 45 70 68 65 6d 65 72 61 6c 20 20 20 20 20 20 20  Ephemeral       
12920 30 78 30 30 30 32 20 20 20 20 2f 2a 20 41 6e 20  0x0002    /* An 
12930 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20  ephemeral table 
12940 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61  */.#define TF_Ha
12950 73 50 72 69 6d 61 72 79 4b 65 79 20 20 20 30 78  sPrimaryKey   0x
12960 30 30 30 34 20 20 20 20 2f 2a 20 54 61 62 6c 65  0004    /* Table
12970 20 68 61 73 20 61 20 70 72 69 6d 61 72 79 20 6b   has a primary k
12980 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  ey */.#define TF
12990 5f 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 20  _Autoincrement  
129a0 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20 49 6e   0x0008    /* In
129b0 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65  teger primary ke
129c0 79 20 69 73 20 61 75 74 6f 69 6e 63 72 65 6d 65  y is autoincreme
129d0 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  nt */.#define TF
129e0 5f 48 61 73 53 74 61 74 31 20 20 20 20 20 20 20  _HasStat1       
129f0 20 30 78 30 30 31 30 20 20 20 20 2f 2a 20 6e 52   0x0010    /* nR
12a00 6f 77 4c 6f 67 45 73 74 20 73 65 74 20 66 72 6f  owLogEst set fro
12a10 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 2a  m sqlite_stat1 *
12a20 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 57 69 74  /.#define TF_Wit
12a30 68 6f 75 74 52 6f 77 69 64 20 20 20 20 30 78 30  houtRowid    0x0
12a40 30 32 30 20 20 20 20 2f 2a 20 4e 6f 20 72 6f 77  020    /* No row
12a50 69 64 2e 20 20 50 52 49 4d 41 52 59 20 4b 45 59  id.  PRIMARY KEY
12a60 20 69 73 20 74 68 65 20 6b 65 79 20 2a 2f 0a 23   is the key */.#
12a70 64 65 66 69 6e 65 20 54 46 5f 4e 6f 56 69 73 69  define TF_NoVisi
12a80 62 6c 65 52 6f 77 69 64 20 20 30 78 30 30 34 30  bleRowid  0x0040
12a90 20 20 20 20 2f 2a 20 4e 6f 20 75 73 65 72 2d 76      /* No user-v
12aa0 69 73 69 62 6c 65 20 22 72 6f 77 69 64 22 20 63  isible "rowid" c
12ab0 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  olumn */.#define
12ac0 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 20 20   TF_OOOHidden   
12ad0 20 20 20 20 30 78 30 30 38 30 20 20 20 20 2f 2a      0x0080    /*
12ae0 20 4f 75 74 2d 6f 66 2d 4f 72 64 65 72 20 68 69   Out-of-Order hi
12af0 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a  dden columns */.
12b00 23 64 65 66 69 6e 65 20 54 46 5f 53 74 61 74 73  #define TF_Stats
12b10 55 73 65 64 20 20 20 20 20 20 20 30 78 30 31 30  Used       0x010
12b20 30 20 20 20 20 2f 2a 20 51 75 65 72 79 20 70 6c  0    /* Query pl
12b30 61 6e 6e 65 72 20 64 65 63 69 73 69 6f 6e 73 20  anner decisions 
12b40 61 66 66 65 63 74 65 64 20 62 79 0a 20 20 20 20  affected by.    
12b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b70 20 2a 2a 20 49 6e 64 65 78 2e 61 69 52 6f 77 4c   ** Index.aiRowL
12b80 6f 67 45 73 74 5b 5d 20 76 61 6c 75 65 73 20 2a  ogEst[] values *
12b90 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73  /.#define TF_Has
12ba0 4e 6f 74 4e 75 6c 6c 20 20 20 20 20 20 30 78 30  NotNull      0x0
12bb0 32 30 30 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69  200    /* Contai
12bc0 6e 73 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73  ns NOT NULL cons
12bd0 74 72 61 69 6e 74 73 20 2a 2f 0a 0a 2f 2a 0a 2a  traints */../*.*
12be0 2a 20 54 65 73 74 20 74 6f 20 73 65 65 20 77 68  * Test to see wh
12bf0 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 74  ether or not a t
12c00 61 62 6c 65 20 69 73 20 61 20 76 69 72 74 75 61  able is a virtua
12c10 6c 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20 69  l table.  This i
12c20 73 0a 2a 2a 20 64 6f 6e 65 20 61 73 20 61 20 6d  s.** done as a m
12c30 61 63 72 6f 20 73 6f 20 74 68 61 74 20 69 74 20  acro so that it 
12c40 77 69 6c 6c 20 62 65 20 6f 70 74 69 6d 69 7a 65  will be optimize
12c50 64 20 6f 75 74 20 77 68 65 6e 20 76 69 72 74 75  d out when virtu
12c60 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 73 75 70 70  al.** table supp
12c70 6f 72 74 20 69 73 20 6f 6d 69 74 74 65 64 20 66  ort is omitted f
12c80 72 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a  rom the build..*
12c90 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
12ca0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
12cb0 4c 45 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56  LE.#  define IsV
12cc0 69 72 74 75 61 6c 28 58 29 20 20 20 20 20 20 28  irtual(X)      (
12cd0 28 58 29 2d 3e 6e 4d 6f 64 75 6c 65 41 72 67 29  (X)->nModuleArg)
12ce0 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  .#else.#  define
12cf0 20 49 73 56 69 72 74 75 61 6c 28 58 29 20 20 20   IsVirtual(X)   
12d00 20 20 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a     0.#endif../*.
12d10 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74  ** Macros to det
12d20 65 72 6d 69 6e 65 20 69 66 20 61 20 63 6f 6c 75  ermine if a colu
12d30 6d 6e 20 69 73 20 68 69 64 64 65 6e 2e 20 20 49  mn is hidden.  I
12d40 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43  sOrdinaryHiddenC
12d50 6f 6c 75 6d 6e 28 29 0a 2a 2a 20 6f 6e 6c 79 20  olumn().** only 
12d60 77 6f 72 6b 73 20 66 6f 72 20 6e 6f 6e 2d 76 69  works for non-vi
12d70 72 74 75 61 6c 20 74 61 62 6c 65 73 20 28 6f 72  rtual tables (or
12d80 64 69 6e 61 72 79 20 74 61 62 6c 65 73 20 61 6e  dinary tables an
12d90 64 20 76 69 65 77 73 29 20 61 6e 64 20 69 73 0a  d views) and is.
12da0 2a 2a 20 61 6c 77 61 79 73 20 66 61 6c 73 65 20  ** always false 
12db0 75 6e 6c 65 73 73 20 53 51 4c 49 54 45 5f 45 4e  unless SQLITE_EN
12dc0 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55  ABLE_HIDDEN_COLU
12dd0 4d 4e 53 20 69 73 20 64 65 66 69 6e 65 64 2e 20  MNS is defined. 
12de0 20 54 68 65 0a 2a 2a 20 49 73 48 69 64 64 65 6e   The.** IsHidden
12df0 43 6f 6c 75 6d 6e 28 29 20 6d 61 63 72 6f 20 69  Column() macro i
12e00 73 20 67 65 6e 65 72 61 6c 20 70 75 72 70 6f 73  s general purpos
12e10 65 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  e..*/.#if define
12e20 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
12e30 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 29 0a  HIDDEN_COLUMNS).
12e40 23 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64  #  define IsHidd
12e50 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20  enColumn(X)     
12e60 20 20 20 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c      (((X)->colFl
12e70 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49  ags & COLFLAG_HI
12e80 44 44 45 4e 29 21 3d 30 29 0a 23 20 20 64 65 66  DDEN)!=0).#  def
12e90 69 6e 65 20 49 73 4f 72 64 69 6e 61 72 79 48 69  ine IsOrdinaryHi
12ea0 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28  ddenColumn(X) ((
12eb0 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20  (X)->colFlags & 
12ec0 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21  COLFLAG_HIDDEN)!
12ed0 3d 30 29 0a 23 65 6c 69 66 20 21 64 65 66 69 6e  =0).#elif !defin
12ee0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
12ef0 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 23 20 20  IRTUALTABLE).#  
12f00 64 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43  define IsHiddenC
12f10 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20  olumn(X)        
12f20 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73   (((X)->colFlags
12f30 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45   & COLFLAG_HIDDE
12f40 4e 29 21 3d 30 29 0a 23 20 20 64 65 66 69 6e 65  N)!=0).#  define
12f50 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65   IsOrdinaryHidde
12f60 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6c  nColumn(X) 0.#el
12f70 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 73 48  se.#  define IsH
12f80 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20  iddenColumn(X)  
12f90 20 20 20 20 20 20 20 30 0a 23 20 20 64 65 66 69         0.#  defi
12fa0 6e 65 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64  ne IsOrdinaryHid
12fb0 64 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23  denColumn(X) 0.#
12fc0 65 6e 64 69 66 0a 0a 0a 2f 2a 20 44 6f 65 73 20  endif.../* Does 
12fd0 74 68 65 20 74 61 62 6c 65 20 68 61 76 65 20 61  the table have a
12fe0 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e   rowid */.#defin
12ff0 65 20 48 61 73 52 6f 77 69 64 28 58 29 20 20 20  e HasRowid(X)   
13000 20 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67    (((X)->tabFlag
13010 73 20 26 20 54 46 5f 57 69 74 68 6f 75 74 52 6f  s & TF_WithoutRo
13020 77 69 64 29 3d 3d 30 29 0a 23 64 65 66 69 6e 65  wid)==0).#define
13030 20 56 69 73 69 62 6c 65 52 6f 77 69 64 28 58 29   VisibleRowid(X)
13040 20 28 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73   (((X)->tabFlags
13050 20 26 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52   & TF_NoVisibleR
13060 6f 77 69 64 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a  owid)==0)../*.**
13070 20 45 61 63 68 20 66 6f 72 65 69 67 6e 20 6b 65   Each foreign ke
13080 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 69 73 20  y constraint is 
13090 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  an instance of t
130a0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
130b0 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20  ucture..**.** A 
130c0 66 6f 72 65 69 67 6e 20 6b 65 79 20 69 73 20 61  foreign key is a
130d0 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
130e0 77 6f 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20  wo tables.  The 
130f0 22 66 72 6f 6d 22 20 74 61 62 6c 65 20 69 73 0a  "from" table is.
13100 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 74 68 61  ** the table tha
13110 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 52  t contains the R
13120 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65  EFERENCES clause
13130 20 74 68 61 74 20 63 72 65 61 74 65 73 20 74 68   that creates th
13140 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79  e foreign.** key
13150 2e 20 20 54 68 65 20 22 74 6f 22 20 74 61 62 6c  .  The "to" tabl
13160 65 20 69 73 20 74 68 65 20 74 61 62 6c 65 20 74  e is the table t
13170 68 61 74 20 69 73 20 6e 61 6d 65 64 20 69 6e 20  hat is named in 
13180 74 68 65 20 52 45 46 45 52 45 4e 43 45 53 20 63  the REFERENCES c
13190 6c 61 75 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64  lause..** Consid
131a0 65 72 20 74 68 69 73 20 65 78 61 6d 70 6c 65 3a  er this example:
131b0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54  .**.**     CREAT
131c0 45 20 54 41 42 4c 45 20 65 78 31 28 0a 2a 2a 20  E TABLE ex1(.** 
131d0 20 20 20 20 20 20 61 20 49 4e 54 45 47 45 52 20        a INTEGER 
131e0 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a 20  PRIMARY KEY,.** 
131f0 20 20 20 20 20 20 62 20 49 4e 54 45 47 45 52 20        b INTEGER 
13200 43 4f 4e 53 54 52 41 49 4e 54 20 66 6b 31 20 52  CONSTRAINT fk1 R
13210 45 46 45 52 45 4e 43 45 53 20 65 78 32 28 78 29  EFERENCES ex2(x)
13220 0a 2a 2a 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a  .**     );.**.**
13230 20 46 6f 72 20 66 6f 72 65 69 67 6e 20 6b 65 79   For foreign key
13240 20 22 66 6b 31 22 2c 20 74 68 65 20 66 72 6f 6d   "fk1", the from
13250 2d 74 61 62 6c 65 20 69 73 20 22 65 78 31 22 20  -table is "ex1" 
13260 61 6e 64 20 74 68 65 20 74 6f 2d 74 61 62 6c 65  and the to-table
13270 20 69 73 20 22 65 78 32 22 2e 0a 2a 2a 20 45 71   is "ex2"..** Eq
13280 75 69 76 61 6c 65 6e 74 20 6e 61 6d 65 73 3a 0a  uivalent names:.
13290 2a 2a 0a 2a 2a 20 20 20 20 20 66 72 6f 6d 2d 74  **.**     from-t
132a0 61 62 6c 65 20 3d 3d 20 63 68 69 6c 64 2d 74 61  able == child-ta
132b0 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20 74 6f 2d  ble.**       to-
132c0 74 61 62 6c 65 20 3d 3d 20 70 61 72 65 6e 74 2d  table == parent-
132d0 74 61 62 6c 65 0a 2a 2a 0a 2a 2a 20 45 61 63 68  table.**.** Each
132e0 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
132f0 73 65 20 67 65 6e 65 72 61 74 65 73 20 61 6e 20  se generates an 
13300 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
13310 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
13320 75 72 65 0a 2a 2a 20 77 68 69 63 68 20 69 73 20  ure.** which is 
13330 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 20  attached to the 
13340 66 72 6f 6d 2d 74 61 62 6c 65 2e 20 20 54 68 65  from-table.  The
13350 20 74 6f 2d 74 61 62 6c 65 20 6e 65 65 64 20 6e   to-table need n
13360 6f 74 20 65 78 69 73 74 20 77 68 65 6e 0a 2a 2a  ot exist when.**
13370 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20   the from-table 
13380 69 73 20 63 72 65 61 74 65 64 2e 20 20 54 68 65  is created.  The
13390 20 65 78 69 73 74 65 6e 63 65 20 6f 66 20 74 68   existence of th
133a0 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 6e 6f  e to-table is no
133b0 74 20 63 68 65 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a  t checked..**.**
133c0 20 54 68 65 20 6c 69 73 74 20 6f 66 20 61 6c 6c   The list of all
133d0 20 70 61 72 65 6e 74 73 20 66 6f 72 20 63 68 69   parents for chi
133e0 6c 64 20 54 61 62 6c 65 20 58 20 69 73 20 68 65  ld Table X is he
133f0 6c 64 20 61 74 20 58 2e 70 46 4b 65 79 2e 0a 2a  ld at X.pFKey..*
13400 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 61  *.** A list of a
13410 6c 6c 20 63 68 69 6c 64 72 65 6e 20 66 6f 72 20  ll children for 
13420 61 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 5a 20  a table named Z 
13430 28 77 68 69 63 68 20 6d 69 67 68 74 20 6e 6f 74  (which might not
13440 20 65 76 65 6e 20 65 78 69 73 74 29 0a 2a 2a 20   even exist).** 
13450 69 73 20 68 65 6c 64 20 69 6e 20 53 63 68 65 6d  is held in Schem
13460 61 2e 66 6b 65 79 48 61 73 68 20 77 69 74 68 20  a.fkeyHash with 
13470 61 20 68 61 73 68 20 6b 65 79 20 6f 66 20 5a 2e  a hash key of Z.
13480 0a 2a 2f 0a 73 74 72 75 63 74 20 46 4b 65 79 20  .*/.struct FKey 
13490 7b 0a 20 20 54 61 62 6c 65 20 2a 70 46 72 6f 6d  {.  Table *pFrom
134a0 3b 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63  ;     /* Table c
134b0 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 52 45  ontaining the RE
134c0 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20  FERENCES clause 
134d0 28 61 6b 61 3a 20 43 68 69 6c 64 29 20 2a 2f 0a  (aka: Child) */.
134e0 20 20 46 4b 65 79 20 2a 70 4e 65 78 74 46 72 6f    FKey *pNextFro
134f0 6d 3b 20 20 2f 2a 20 4e 65 78 74 20 46 4b 65 79  m;  /* Next FKey
13500 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 69   with the same i
13510 6e 20 70 46 72 6f 6d 2e 20 4e 65 78 74 20 70 61  n pFrom. Next pa
13520 72 65 6e 74 20 6f 66 20 70 46 72 6f 6d 20 2a 2f  rent of pFrom */
13530 0a 20 20 63 68 61 72 20 2a 7a 54 6f 3b 20 20 20  .  char *zTo;   
13540 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
13550 74 61 62 6c 65 20 74 68 61 74 20 74 68 65 20 6b  table that the k
13560 65 79 20 70 6f 69 6e 74 73 20 74 6f 20 28 61 6b  ey points to (ak
13570 61 3a 20 50 61 72 65 6e 74 29 20 2a 2f 0a 20 20  a: Parent) */.  
13580 46 4b 65 79 20 2a 70 4e 65 78 74 54 6f 3b 20 20  FKey *pNextTo;  
13590 20 20 2f 2a 20 4e 65 78 74 20 77 69 74 68 20 74    /* Next with t
135a0 68 65 20 73 61 6d 65 20 7a 54 6f 2e 20 4e 65 78  he same zTo. Nex
135b0 74 20 63 68 69 6c 64 20 6f 66 20 7a 54 6f 2e 20  t child of zTo. 
135c0 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 50 72 65 76  */.  FKey *pPrev
135d0 54 6f 3b 20 20 20 20 2f 2a 20 50 72 65 76 69 6f  To;    /* Previo
135e0 75 73 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  us with the same
135f0 20 7a 54 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 43   zTo */.  int nC
13600 6f 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ol;         /* N
13610 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
13620 20 69 6e 20 74 68 69 73 20 6b 65 79 20 2a 2f 0a   in this key */.
13630 20 20 2f 2a 20 45 56 3a 20 52 2d 33 30 33 32 33    /* EV: R-30323
13640 2d 32 31 39 31 37 20 2a 2f 0a 20 20 75 38 20 69  -21917 */.  u8 i
13650 73 44 65 66 65 72 72 65 64 3b 20 20 20 20 20 20  sDeferred;      
13660 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73   /* True if cons
13670 74 72 61 69 6e 74 20 63 68 65 63 6b 69 6e 67 20  traint checking 
13680 69 73 20 64 65 66 65 72 72 65 64 20 74 69 6c 6c  is deferred till
13690 20 43 4f 4d 4d 49 54 20 2a 2f 0a 20 20 75 38 20   COMMIT */.  u8 
136a0 61 41 63 74 69 6f 6e 5b 32 5d 3b 20 20 20 20 20  aAction[2];     
136b0 20 20 20 2f 2a 20 4f 4e 20 44 45 4c 45 54 45 20     /* ON DELETE 
136c0 61 6e 64 20 4f 4e 20 55 50 44 41 54 45 20 61 63  and ON UPDATE ac
136d0 74 69 6f 6e 73 2c 20 72 65 73 70 65 63 74 69 76  tions, respectiv
136e0 65 6c 79 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  ely */.  Trigger
136f0 20 2a 61 70 54 72 69 67 67 65 72 5b 32 5d 3b 2f   *apTrigger[2];/
13700 2a 20 54 72 69 67 67 65 72 73 20 66 6f 72 20 61  * Triggers for a
13710 41 63 74 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73  Action[] actions
13720 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 43 6f   */.  struct sCo
13730 6c 4d 61 70 20 7b 20 20 20 20 20 20 2f 2a 20 4d  lMap {      /* M
13740 61 70 70 69 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e  apping of column
13750 73 20 69 6e 20 70 46 72 6f 6d 20 74 6f 20 63 6f  s in pFrom to co
13760 6c 75 6d 6e 73 20 69 6e 20 7a 54 6f 20 2a 2f 0a  lumns in zTo */.
13770 20 20 20 20 69 6e 74 20 69 46 72 6f 6d 3b 20 20      int iFrom;  
13780 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
13790 65 78 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20  ex of column in 
137a0 70 46 72 6f 6d 20 2a 2f 0a 20 20 20 20 63 68 61  pFrom */.    cha
137b0 72 20 2a 7a 43 6f 6c 3b 20 20 20 20 20 20 20 20  r *zCol;        
137c0 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 63 6f     /* Name of co
137d0 6c 75 6d 6e 20 69 6e 20 7a 54 6f 2e 20 20 49 66  lumn in zTo.  If
137e0 20 4e 55 4c 4c 20 75 73 65 20 50 52 49 4d 41 52   NULL use PRIMAR
137f0 59 20 4b 45 59 20 2a 2f 0a 20 20 7d 20 61 43 6f  Y KEY */.  } aCo
13800 6c 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20  l[1];           
13810 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f   /* One entry fo
13820 72 20 65 61 63 68 20 6f 66 20 6e 43 6f 6c 20 63  r each of nCol c
13830 6f 6c 75 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  olumns */.};../*
13840 0a 2a 2a 20 53 51 4c 69 74 65 20 73 75 70 70 6f  .** SQLite suppo
13850 72 74 73 20 6d 61 6e 79 20 64 69 66 66 65 72 65  rts many differe
13860 6e 74 20 77 61 79 73 20 74 6f 20 72 65 73 6f 6c  nt ways to resol
13870 76 65 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a  ve a constraint.
13880 2a 2a 20 65 72 72 6f 72 2e 20 20 52 4f 4c 4c 42  ** error.  ROLLB
13890 41 43 4b 20 70 72 6f 63 65 73 73 69 6e 67 20 6d  ACK processing m
138a0 65 61 6e 73 20 74 68 61 74 20 61 20 63 6f 6e 73  eans that a cons
138b0 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
138c0 0a 2a 2a 20 63 61 75 73 65 73 20 74 68 65 20 6f  .** causes the o
138d0 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63  peration in proc
138e0 65 73 73 20 74 6f 20 66 61 69 6c 20 61 6e 64 20  ess to fail and 
138f0 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20  for the current 
13900 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 74  transaction.** t
13910 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b  o be rolled back
13920 2e 20 20 41 42 4f 52 54 20 70 72 6f 63 65 73 73  .  ABORT process
13930 69 6e 67 20 6d 65 61 6e 73 20 74 68 65 20 6f 70  ing means the op
13940 65 72 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65  eration in proce
13950 73 73 0a 2a 2a 20 66 61 69 6c 73 20 61 6e 64 20  ss.** fails and 
13960 61 6e 79 20 70 72 69 6f 72 20 63 68 61 6e 67 65  any prior change
13970 73 20 66 72 6f 6d 20 74 68 61 74 20 6f 6e 65 20  s from that one 
13980 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20 62 61  operation are ba
13990 63 6b 65 64 20 6f 75 74 2c 0a 2a 2a 20 62 75 74  cked out,.** but
139a0 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
139b0 20 69 73 20 6e 6f 74 20 72 6f 6c 6c 65 64 20 62   is not rolled b
139c0 61 63 6b 2e 20 20 46 41 49 4c 20 70 72 6f 63 65  ack.  FAIL proce
139d0 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68 61 74  ssing means that
139e0 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 74 69 6f  .** the operatio
139f0 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20 73 74  n in progress st
13a00 6f 70 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20  ops and returns 
13a10 61 6e 20 65 72 72 6f 72 20 63 6f 64 65 2e 20 20  an error code.  
13a20 42 75 74 20 70 72 69 6f 72 0a 2a 2a 20 63 68 61  But prior.** cha
13a30 6e 67 65 73 20 64 75 65 20 74 6f 20 74 68 65 20  nges due to the 
13a40 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 61  same operation a
13a50 72 65 20 6e 6f 74 20 62 61 63 6b 65 64 20 6f 75  re not backed ou
13a60 74 20 61 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61 63  t and no rollbac
13a70 6b 0a 2a 2a 20 6f 63 63 75 72 73 2e 20 20 49 47  k.** occurs.  IG
13a80 4e 4f 52 45 20 6d 65 61 6e 73 20 74 68 61 74 20  NORE means that 
13a90 74 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 72  the particular r
13aa0 6f 77 20 74 68 61 74 20 63 61 75 73 65 64 20 74  ow that caused t
13ab0 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a  he constraint.**
13ac0 20 65 72 72 6f 72 20 69 73 20 6e 6f 74 20 69 6e   error is not in
13ad0 73 65 72 74 65 64 20 6f 72 20 75 70 64 61 74 65  serted or update
13ae0 64 2e 20 20 50 72 6f 63 65 73 73 69 6e 67 20 63  d.  Processing c
13af0 6f 6e 74 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20  ontinues and no 
13b00 65 72 72 6f 72 0a 2a 2a 20 69 73 20 72 65 74 75  error.** is retu
13b10 72 6e 65 64 2e 20 20 52 45 50 4c 41 43 45 20 6d  rned.  REPLACE m
13b20 65 61 6e 73 20 74 68 61 74 20 70 72 65 65 78 69  eans that preexi
13b30 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 72  sting database r
13b40 6f 77 73 20 74 68 61 74 20 63 61 75 73 65 64 0a  ows that caused.
13b50 2a 2a 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73  ** a UNIQUE cons
13b60 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
13b70 20 61 72 65 20 72 65 6d 6f 76 65 64 20 73 6f 20   are removed so 
13b80 74 68 61 74 20 74 68 65 20 6e 65 77 20 69 6e 73  that the new ins
13b90 65 72 74 20 6f 72 0a 2a 2a 20 75 70 64 61 74 65  ert or.** update
13ba0 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 20 20 50   can proceed.  P
13bb0 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e  rocessing contin
13bc0 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72  ues and no error
13bd0 20 69 73 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a   is reported..**
13be0 0a 2a 2a 20 52 45 53 54 52 49 43 54 2c 20 53 45  .** RESTRICT, SE
13bf0 54 4e 55 4c 4c 2c 20 61 6e 64 20 43 41 53 43 41  TNULL, and CASCA
13c00 44 45 20 61 63 74 69 6f 6e 73 20 61 70 70 6c 79  DE actions apply
13c10 20 6f 6e 6c 79 20 74 6f 20 66 6f 72 65 69 67 6e   only to foreign
13c20 20 6b 65 79 73 2e 0a 2a 2a 20 52 45 53 54 52 49   keys..** RESTRI
13c30 43 54 20 69 73 20 74 68 65 20 73 61 6d 65 20 61  CT is the same a
13c40 73 20 41 42 4f 52 54 20 66 6f 72 20 49 4d 4d 45  s ABORT for IMME
13c50 44 49 41 54 45 20 66 6f 72 65 69 67 6e 20 6b 65  DIATE foreign ke
13c60 79 73 20 61 6e 64 20 74 68 65 0a 2a 2a 20 73 61  ys and the.** sa
13c70 6d 65 20 61 73 20 52 4f 4c 4c 42 41 43 4b 20 66  me as ROLLBACK f
13c80 6f 72 20 44 45 46 45 52 52 45 44 20 6b 65 79 73  or DEFERRED keys
13c90 2e 20 20 53 45 54 4e 55 4c 4c 20 6d 65 61 6e 73  .  SETNULL means
13ca0 20 74 68 61 74 20 74 68 65 20 66 6f 72 65 69 67   that the foreig
13cb0 6e 0a 2a 2a 20 6b 65 79 20 69 73 20 73 65 74 20  n.** key is set 
13cc0 74 6f 20 4e 55 4c 4c 2e 20 20 43 41 53 43 41 44  to NULL.  CASCAD
13cd0 45 20 6d 65 61 6e 73 20 74 68 61 74 20 61 20 44  E means that a D
13ce0 45 4c 45 54 45 20 6f 72 20 55 50 44 41 54 45 20  ELETE or UPDATE 
13cf0 6f 66 20 74 68 65 0a 2a 2a 20 72 65 66 65 72 65  of the.** refere
13d00 6e 63 65 64 20 74 61 62 6c 65 20 72 6f 77 20 69  nced table row i
13d10 73 20 70 72 6f 70 61 67 61 74 65 64 20 69 6e 74  s propagated int
13d20 6f 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 68  o the row that h
13d30 6f 6c 64 73 20 74 68 65 0a 2a 2a 20 66 6f 72 65  olds the.** fore
13d40 69 67 6e 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54  ign key..**.** T
13d50 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d  he following sym
13d60 62 6f 6c 69 63 20 76 61 6c 75 65 73 20 61 72 65  bolic values are
13d70 20 75 73 65 64 20 74 6f 20 72 65 63 6f 72 64 20   used to record 
13d80 77 68 69 63 68 20 74 79 70 65 0a 2a 2a 20 6f 66  which type.** of
13d90 20 61 63 74 69 6f 6e 20 74 6f 20 74 61 6b 65 2e   action to take.
13da0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 4e  .*/.#define OE_N
13db0 6f 6e 65 20 20 20 20 20 30 20 20 20 2f 2a 20 54  one     0   /* T
13dc0 68 65 72 65 20 69 73 20 6e 6f 20 63 6f 6e 73 74  here is no const
13dd0 72 61 69 6e 74 20 74 6f 20 63 68 65 63 6b 20 2a  raint to check *
13de0 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 6f 6c  /.#define OE_Rol
13df0 6c 62 61 63 6b 20 31 20 20 20 2f 2a 20 46 61 69  lback 1   /* Fai
13e00 6c 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  l the operation 
13e10 61 6e 64 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65  and rollback the
13e20 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a   transaction */.
13e30 23 64 65 66 69 6e 65 20 4f 45 5f 41 62 6f 72 74  #define OE_Abort
13e40 20 20 20 20 32 20 20 20 2f 2a 20 42 61 63 6b 20      2   /* Back 
13e50 6f 75 74 20 63 68 61 6e 67 65 73 20 62 75 74 20  out changes but 
13e60 64 6f 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20 74  do no rollback t
13e70 72 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64  ransaction */.#d
13e80 65 66 69 6e 65 20 4f 45 5f 46 61 69 6c 20 20 20  efine OE_Fail   
13e90 20 20 33 20 20 20 2f 2a 20 53 74 6f 70 20 74 68    3   /* Stop th
13ea0 65 20 6f 70 65 72 61 74 69 6f 6e 20 62 75 74 20  e operation but 
13eb0 6c 65 61 76 65 20 61 6c 6c 20 70 72 69 6f 72 20  leave all prior 
13ec0 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69  changes */.#defi
13ed0 6e 65 20 4f 45 5f 49 67 6e 6f 72 65 20 20 20 34  ne OE_Ignore   4
13ee0 20 20 20 2f 2a 20 49 67 6e 6f 72 65 20 74 68 65     /* Ignore the
13ef0 20 65 72 72 6f 72 2e 20 44 6f 20 6e 6f 74 20 64   error. Do not d
13f00 6f 20 74 68 65 20 49 4e 53 45 52 54 20 6f 72 20  o the INSERT or 
13f10 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e  UPDATE */.#defin
13f20 65 20 4f 45 5f 52 65 70 6c 61 63 65 20 20 35 20  e OE_Replace  5 
13f30 20 20 2f 2a 20 44 65 6c 65 74 65 20 65 78 69 73    /* Delete exis
13f40 74 69 6e 67 20 72 65 63 6f 72 64 2c 20 74 68 65  ting record, the
13f50 6e 20 64 6f 20 49 4e 53 45 52 54 20 6f 72 20 55  n do INSERT or U
13f60 50 44 41 54 45 20 2a 2f 0a 0a 23 64 65 66 69 6e  PDATE */..#defin
13f70 65 20 4f 45 5f 52 65 73 74 72 69 63 74 20 36 20  e OE_Restrict 6 
13f80 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 20 66 6f    /* OE_Abort fo
13f90 72 20 49 4d 4d 45 44 49 41 54 45 2c 20 4f 45 5f  r IMMEDIATE, OE_
13fa0 52 6f 6c 6c 62 61 63 6b 20 66 6f 72 20 44 45 46  Rollback for DEF
13fb0 45 52 52 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65  ERRED */.#define
13fc0 20 4f 45 5f 53 65 74 4e 75 6c 6c 20 20 37 20 20   OE_SetNull  7  
13fd0 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65   /* Set the fore
13fe0 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f  ign key value to
13ff0 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65   NULL */.#define
14000 20 4f 45 5f 53 65 74 44 66 6c 74 20 20 38 20 20   OE_SetDflt  8  
14010 20 2f 2a 20 53 65 74 20 74 68 65 20 66 6f 72 65   /* Set the fore
14020 69 67 6e 20 6b 65 79 20 76 61 6c 75 65 20 74 6f  ign key value to
14030 20 69 74 73 20 64 65 66 61 75 6c 74 20 2a 2f 0a   its default */.
14040 23 64 65 66 69 6e 65 20 4f 45 5f 43 61 73 63 61  #define OE_Casca
14050 64 65 20 20 39 20 20 20 2f 2a 20 43 61 73 63 61  de  9   /* Casca
14060 64 65 20 74 68 65 20 63 68 61 6e 67 65 73 20 2a  de the changes *
14070 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f 44 65  /..#define OE_De
14080 66 61 75 6c 74 20 20 31 30 20 20 2f 2a 20 44 6f  fault  10  /* Do
14090 20 77 68 61 74 65 76 65 72 20 74 68 65 20 64 65   whatever the de
140a0 66 61 75 6c 74 20 61 63 74 69 6f 6e 20 69 73 20  fault action is 
140b0 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  */.../*.** An in
140c0 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
140d0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
140e0 65 20 69 73 20 70 61 73 73 65 64 20 61 73 20 74  e is passed as t
140f0 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75  he first.** argu
14100 6d 65 6e 74 20 74 6f 20 73 71 6c 69 74 65 33 56  ment to sqlite3V
14110 64 62 65 4b 65 79 43 6f 6d 70 61 72 65 20 61 6e  dbeKeyCompare an
14120 64 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6e  d is used to con
14130 74 72 6f 6c 20 74 68 65 0a 2a 2a 20 63 6f 6d 70  trol the.** comp
14140 61 72 69 73 6f 6e 20 6f 66 20 74 68 65 20 74 77  arison of the tw
14150 6f 20 69 6e 64 65 78 20 6b 65 79 73 2e 0a 2a 2a  o index keys..**
14160 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 61 53  .** Note that aS
14170 6f 72 74 4f 72 64 65 72 5b 5d 20 61 6e 64 20 61  ortOrder[] and a
14180 43 6f 6c 6c 5b 5d 20 68 61 76 65 20 6e 46 69 65  Coll[] have nFie
14190 6c 64 2b 31 20 73 6c 6f 74 73 2e 20 20 54 68 65  ld+1 slots.  The
141a0 72 65 0a 2a 2a 20 61 72 65 20 6e 46 69 65 6c 64  re.** are nField
141b0 20 73 6c 6f 74 73 20 66 6f 72 20 74 68 65 20 63   slots for the c
141c0 6f 6c 75 6d 6e 73 20 6f 66 20 61 6e 20 69 6e 64  olumns of an ind
141d0 65 78 20 74 68 65 6e 20 6f 6e 65 20 65 78 74 72  ex then one extr
141e0 61 20 73 6c 6f 74 0a 2a 2a 20 66 6f 72 20 74 68  a slot.** for th
141f0 65 20 72 6f 77 69 64 20 61 74 20 74 68 65 20 65  e rowid at the e
14200 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4b 65  nd..*/.struct Ke
14210 79 49 6e 66 6f 20 7b 0a 20 20 75 33 32 20 6e 52  yInfo {.  u32 nR
14220 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ef;           /*
14230 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 66 65 72   Number of refer
14240 65 6e 63 65 73 20 74 6f 20 74 68 69 73 20 4b 65  ences to this Ke
14250 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20 2a 2f 0a  yInfo object */.
14260 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20    u8 enc;       
14270 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e        /* Text en
14280 63 6f 64 69 6e 67 20 2d 20 6f 6e 65 20 6f 66 20  coding - one of 
14290 74 68 65 20 53 51 4c 49 54 45 5f 55 54 46 2a 20  the SQLITE_UTF* 
142a0 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 31 36 20  values */.  u16 
142b0 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20  nField;         
142c0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6b 65 79  /* Number of key
142d0 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
142e0 69 6e 64 65 78 20 2a 2f 0a 20 20 75 31 36 20 6e  index */.  u16 n
142f0 58 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 2f  XField;        /
14300 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  * Number of colu
14310 6d 6e 73 20 62 65 79 6f 6e 64 20 74 68 65 20 6b  mns beyond the k
14320 65 79 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20  ey columns */.  
14330 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
14340 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62      /* The datab
14350 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a  ase connection *
14360 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72 64  /.  u8 *aSortOrd
14370 65 72 3b 20 20 20 20 20 2f 2a 20 53 6f 72 74 20  er;     /* Sort 
14380 6f 72 64 65 72 20 66 6f 72 20 65 61 63 68 20 63  order for each c
14390 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 43 6f 6c 6c  olumn. */.  Coll
143a0 53 65 71 20 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20  Seq *aColl[1];  
143b0 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71  /* Collating seq
143c0 75 65 6e 63 65 20 66 6f 72 20 65 61 63 68 20 74  uence for each t
143d0 65 72 6d 20 6f 66 20 74 68 65 20 6b 65 79 20 2a  erm of the key *
143e0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73  /.};../*.** This
143f0 20 6f 62 6a 65 63 74 20 68 6f 6c 64 73 20 61 20   object holds a 
14400 72 65 63 6f 72 64 20 77 68 69 63 68 20 68 61 73  record which has
14410 20 62 65 65 6e 20 70 61 72 73 65 64 20 6f 75 74   been parsed out
14420 20 69 6e 74 6f 20 69 6e 64 69 76 69 64 75 61 6c   into individual
14430 0a 2a 2a 20 66 69 65 6c 64 73 2c 20 66 6f 72 20  .** fields, for 
14440 74 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20  the purposes of 
14450 64 6f 69 6e 67 20 61 20 63 6f 6d 70 61 72 69 73  doing a comparis
14460 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f  on..**.** A reco
14470 72 64 20 69 73 20 61 6e 20 6f 62 6a 65 63 74 20  rd is an object 
14480 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e  that contains on
14490 65 20 6f 72 20 6d 6f 72 65 20 66 69 65 6c 64 73  e or more fields
144a0 20 6f 66 20 64 61 74 61 2e 0a 2a 2a 20 52 65 63   of data..** Rec
144b0 6f 72 64 73 20 61 72 65 20 75 73 65 64 20 74 6f  ords are used to
144c0 20 73 74 6f 72 65 20 74 68 65 20 63 6f 6e 74 65   store the conte
144d0 6e 74 20 6f 66 20 61 20 74 61 62 6c 65 20 72 6f  nt of a table ro
144e0 77 20 61 6e 64 20 74 6f 20 73 74 6f 72 65 0a 2a  w and to store.*
144f0 2a 20 74 68 65 20 6b 65 79 20 6f 66 20 61 6e 20  * the key of an 
14500 69 6e 64 65 78 2e 20 20 41 20 62 6c 6f 62 20 65  index.  A blob e
14510 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20 72 65 63  ncoding of a rec
14520 6f 72 64 20 69 73 20 63 72 65 61 74 65 64 20 62  ord is created b
14530 79 0a 2a 2a 20 74 68 65 20 4f 50 5f 4d 61 6b 65  y.** the OP_Make
14540 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 6f 66  Record opcode of
14550 20 74 68 65 20 56 44 42 45 20 61 6e 64 20 69 73   the VDBE and is
14560 20 64 69 73 61 73 73 65 6d 62 6c 65 64 20 62 79   disassembled by
14570 20 74 68 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d   the.** OP_Colum
14580 6e 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  n opcode..**.** 
14590 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
145a0 68 69 73 20 6f 62 6a 65 63 74 20 73 65 72 76 65  his object serve
145b0 73 20 61 73 20 61 20 22 6b 65 79 22 20 66 6f 72  s as a "key" for
145c0 20 64 6f 69 6e 67 20 61 20 73 65 61 72 63 68 20   doing a search 
145d0 6f 6e 0a 2a 2a 20 61 6e 20 69 6e 64 65 78 20 62  on.** an index b
145e0 2b 74 72 65 65 2e 20 54 68 65 20 67 6f 61 6c 20  +tree. The goal 
145f0 6f 66 20 74 68 65 20 73 65 61 72 63 68 20 69 73  of the search is
14600 20 74 6f 20 66 69 6e 64 20 74 68 65 20 65 6e 74   to find the ent
14610 72 79 20 74 68 61 74 0a 2a 2a 20 69 73 20 63 6c  ry that.** is cl
14620 6f 73 65 64 20 74 6f 20 74 68 65 20 6b 65 79 20  osed to the key 
14630 64 65 73 63 72 69 62 65 64 20 62 79 20 74 68 69  described by thi
14640 73 20 6f 62 6a 65 63 74 2e 20 20 54 68 69 73 20  s object.  This 
14650 6f 62 6a 65 63 74 20 6d 69 67 68 74 20 68 6f 6c  object might hol
14660 64 0a 2a 2a 20 6a 75 73 74 20 61 20 70 72 65 66  d.** just a pref
14670 69 78 20 6f 66 20 74 68 65 20 6b 65 79 2e 20 20  ix of the key.  
14680 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 69  The number of fi
14690 65 6c 64 73 20 69 73 20 67 69 76 65 6e 20 62 79  elds is given by
146a0 0a 2a 2a 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46  .** pKeyInfo->nF
146b0 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ield..**.** The 
146c0 72 31 20 61 6e 64 20 72 32 20 66 69 65 6c 64 73  r1 and r2 fields
146d0 20 61 72 65 20 74 68 65 20 76 61 6c 75 65 73 20   are the values 
146e0 74 6f 20 72 65 74 75 72 6e 20 69 66 20 74 68 69  to return if thi
146f0 73 20 6b 65 79 20 69 73 20 6c 65 73 73 20 74 68  s key is less th
14700 61 6e 0a 2a 2a 20 6f 72 20 67 72 65 61 74 65 72  an.** or greater
14710 20 74 68 61 6e 20 61 20 6b 65 79 20 69 6e 20 74   than a key in t
14720 68 65 20 62 74 72 65 65 2c 20 72 65 73 70 65 63  he btree, respec
14730 74 69 76 65 6c 79 2e 20 20 54 68 65 73 65 20 61  tively.  These a
14740 72 65 20 6e 6f 72 6d 61 6c 6c 79 0a 2a 2a 20 2d  re normally.** -
14750 31 20 61 6e 64 20 2b 31 20 72 65 73 70 65 63 74  1 and +1 respect
14760 69 76 65 6c 79 2c 20 62 75 74 20 6d 69 67 68 74  ively, but might
14770 20 62 65 20 69 6e 76 65 72 74 65 64 20 74 6f 20   be inverted to 
14780 2b 31 20 61 6e 64 20 2d 31 20 69 66 20 74 68 65  +1 and -1 if the
14790 20 62 2d 74 72 65 65 0a 2a 2a 20 69 73 20 69 6e   b-tree.** is in
147a0 20 44 45 53 43 20 6f 72 64 65 72 2e 0a 2a 2a 0a   DESC order..**.
147b0 2a 2a 20 54 68 65 20 6b 65 79 20 63 6f 6d 70 61  ** The key compa
147c0 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20  rison functions 
147d0 61 63 74 75 61 6c 6c 79 20 72 65 74 75 72 6e 20  actually return 
147e0 64 65 66 61 75 6c 74 5f 72 63 20 77 68 65 6e 20  default_rc when 
147f0 74 68 65 79 20 66 69 6e 64 0a 2a 2a 20 61 6e 20  they find.** an 
14800 65 71 75 61 6c 73 20 63 6f 6d 70 61 72 69 73 6f  equals compariso
14810 6e 2e 20 20 64 65 66 61 75 6c 74 5f 72 63 20 63  n.  default_rc c
14820 61 6e 20 62 65 20 2d 31 2c 20 30 2c 20 6f 72 20  an be -1, 0, or 
14830 2b 31 2e 20 20 49 66 20 74 68 65 72 65 20 61 72  +1.  If there ar
14840 65 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 65 6e  e.** multiple en
14850 74 72 69 65 73 20 69 6e 20 74 68 65 20 62 2d 74  tries in the b-t
14860 72 65 65 20 77 69 74 68 20 74 68 65 20 73 61 6d  ree with the sam
14870 65 20 6b 65 79 20 28 77 68 65 6e 20 6f 6e 6c 79  e key (when only
14880 20 6c 6f 6f 6b 69 6e 67 0a 2a 2a 20 61 74 20 74   looking.** at t
14890 68 65 20 66 69 72 73 74 20 70 4b 65 79 49 6e 66  he first pKeyInf
148a0 6f 2d 3e 6e 46 69 65 6c 64 73 2c 29 20 74 68 65  o->nFields,) the
148b0 6e 20 64 65 66 61 75 6c 74 5f 72 63 20 63 61 6e  n default_rc can
148c0 20 62 65 20 73 65 74 20 74 6f 20 2d 31 20 74 6f   be set to -1 to
148d0 0a 2a 2a 20 63 61 75 73 65 20 74 68 65 20 73 65  .** cause the se
148e0 61 72 63 68 20 74 6f 20 66 69 6e 64 20 74 68 65  arch to find the
148f0 20 6c 61 73 74 20 6d 61 74 63 68 2c 20 6f 72 20   last match, or 
14900 2b 31 20 74 6f 20 63 61 75 73 65 20 74 68 65 20  +1 to cause the 
14910 73 65 61 72 63 68 20 74 6f 0a 2a 2a 20 66 69 6e  search to.** fin
14920 64 20 74 68 65 20 66 69 72 73 74 20 6d 61 74 63  d the first matc
14930 68 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6b 65 79  h..**.** The key
14940 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66 75 6e 63   comparison func
14950 74 69 6f 6e 73 20 77 69 6c 6c 20 73 65 74 20 65  tions will set e
14960 71 53 65 65 6e 20 74 6f 20 74 72 75 65 20 69 66  qSeen to true if
14970 20 74 68 65 79 20 65 76 65 72 0a 2a 2a 20 67 65   they ever.** ge
14980 74 20 61 6e 64 20 65 71 75 61 6c 20 72 65 73 75  t and equal resu
14990 6c 74 73 20 77 68 65 6e 20 63 6f 6d 70 61 72 69  lts when compari
149a0 6e 67 20 74 68 69 73 20 73 74 72 75 63 74 75 72  ng this structur
149b0 65 20 74 6f 20 61 20 62 2d 74 72 65 65 20 72 65  e to a b-tree re
149c0 63 6f 72 64 2e 0a 2a 2a 20 57 68 65 6e 20 64 65  cord..** When de
149d0 66 61 75 6c 74 5f 72 63 21 3d 30 2c 20 74 68 65  fault_rc!=0, the
149e0 20 73 65 61 72 63 68 20 6d 69 67 68 74 20 65 6e   search might en
149f0 64 20 75 70 20 6f 6e 20 74 68 65 20 72 65 63 6f  d up on the reco
14a00 72 64 20 69 6d 6d 65 64 69 61 74 65 6c 79 0a 2a  rd immediately.*
14a10 2a 20 62 65 66 6f 72 65 20 74 68 65 20 66 69 72  * before the fir
14a20 73 74 20 6d 61 74 63 68 20 6f 72 20 69 6d 6d 65  st match or imme
14a30 64 69 61 74 65 6c 79 20 61 66 74 65 72 20 74 68  diately after th
14a40 65 20 6c 61 73 74 20 6d 61 74 63 68 2e 20 20 54  e last match.  T
14a50 68 65 0a 2a 2a 20 65 71 53 65 65 6e 20 66 69 65  he.** eqSeen fie
14a60 6c 64 20 77 69 6c 6c 20 69 6e 64 69 63 61 74 65  ld will indicate
14a70 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
14a80 61 6e 20 65 78 61 63 74 20 6d 61 74 63 68 20 65  an exact match e
14a90 78 69 73 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20  xists in the.** 
14aa0 62 2d 74 72 65 65 2e 0a 2a 2f 0a 73 74 72 75 63  b-tree..*/.struc
14ab0 74 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  t UnpackedRecord
14ac0 20 7b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b   {.  KeyInfo *pK
14ad0 65 79 49 6e 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c  eyInfo;  /* Coll
14ae0 61 74 69 6f 6e 20 61 6e 64 20 73 6f 72 74 2d 6f  ation and sort-o
14af0 72 64 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  rder information
14b00 20 2a 2f 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b   */.  Mem *aMem;
14b10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
14b20 75 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69  ues */.  u16 nFi
14b30 65 6c 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  eld;         /* 
14b40 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65  Number of entrie
14b50 73 20 69 6e 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a  s in apMem[] */.
14b60 20 20 69 38 20 64 65 66 61 75 6c 74 5f 72 63 3b    i8 default_rc;
14b70 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 61 72 69        /* Compari
14b80 73 6f 6e 20 72 65 73 75 6c 74 20 69 66 20 6b 65  son result if ke
14b90 79 73 20 61 72 65 20 65 71 75 61 6c 20 2a 2f 0a  ys are equal */.
14ba0 20 20 75 38 20 65 72 72 43 6f 64 65 3b 20 20 20    u8 errCode;   
14bb0 20 20 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 64        /* Error d
14bc0 65 74 65 63 74 65 64 20 62 79 20 78 52 65 63 6f  etected by xReco
14bd0 72 64 43 6f 6d 70 61 72 65 20 28 43 4f 52 52 55  rdCompare (CORRU
14be0 50 54 20 6f 72 20 4e 4f 4d 45 4d 29 20 2a 2f 0a  PT or NOMEM) */.
14bf0 20 20 69 38 20 72 31 3b 20 20 20 20 20 20 20 20    i8 r1;        
14c00 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74        /* Value t
14c10 6f 20 72 65 74 75 72 6e 20 69 66 20 28 6c 68 73  o return if (lhs
14c20 20 3e 20 72 68 73 29 20 2a 2f 0a 20 20 69 38 20   > rhs) */.  i8 
14c30 72 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  r2;             
14c40 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74   /* Value to ret
14c50 75 72 6e 20 69 66 20 28 72 68 73 20 3c 20 6c 68  urn if (rhs < lh
14c60 73 29 20 2a 2f 0a 20 20 75 38 20 65 71 53 65 65  s) */.  u8 eqSee
14c70 6e 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  n;          /* T
14c80 72 75 65 20 69 66 20 61 6e 20 65 71 75 61 6c 69  rue if an equali
14c90 74 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20 68 61  ty comparison ha
14ca0 73 20 62 65 65 6e 20 73 65 65 6e 20 2a 2f 0a 7d  s been seen */.}
14cb0 3b 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53  ;.../*.** Each S
14cc0 51 4c 20 69 6e 64 65 78 20 69 73 20 72 65 70 72  QL index is repr
14cd0 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72  esented in memor
14ce0 79 20 62 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61  y by an.** insta
14cf0 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
14d00 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e 0a  wing structure..
14d10 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6c 75 6d 6e  **.** The column
14d20 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  s of the table t
14d30 68 61 74 20 61 72 65 20 74 6f 20 62 65 20 69 6e  hat are to be in
14d40 64 65 78 65 64 20 61 72 65 20 64 65 73 63 72 69  dexed are descri
14d50 62 65 64 0a 2a 2a 20 62 79 20 74 68 65 20 61 69  bed.** by the ai
14d60 43 6f 6c 75 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f  Column[] field o
14d70 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
14d80 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20  .  For example, 
14d90 73 75 70 70 6f 73 65 0a 2a 2a 20 77 65 20 68 61  suppose.** we ha
14da0 76 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ve the following
14db0 20 74 61 62 6c 65 20 61 6e 64 20 69 6e 64 65 78   table and index
14dc0 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41  :.**.**     CREA
14dd0 54 45 20 54 41 42 4c 45 20 45 78 31 28 63 31 20  TE TABLE Ex1(c1 
14de0 69 6e 74 2c 20 63 32 20 69 6e 74 2c 20 63 33 20  int, c2 int, c3 
14df0 74 65 78 74 29 3b 0a 2a 2a 20 20 20 20 20 43 52  text);.**     CR
14e00 45 41 54 45 20 49 4e 44 45 58 20 45 78 32 20 4f  EATE INDEX Ex2 O
14e10 4e 20 45 78 31 28 63 33 2c 63 31 29 3b 0a 2a 2a  N Ex1(c3,c1);.**
14e20 0a 2a 2a 20 49 6e 20 74 68 65 20 54 61 62 6c 65  .** In the Table
14e30 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72   structure descr
14e40 69 62 69 6e 67 20 45 78 31 2c 20 6e 43 6f 6c 3d  ibing Ex1, nCol=
14e50 3d 33 20 62 65 63 61 75 73 65 20 74 68 65 72 65  =3 because there
14e60 20 61 72 65 0a 2a 2a 20 74 68 72 65 65 20 63 6f   are.** three co
14e70 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62  lumns in the tab
14e80 6c 65 2e 20 20 49 6e 20 74 68 65 20 49 6e 64 65  le.  In the Inde
14e90 78 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63  x structure desc
14ea0 72 69 62 69 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e  ribing.** Ex2, n
14eb0 43 6f 6c 75 6d 6e 3d 3d 32 20 73 69 6e 63 65 20  Column==2 since 
14ec0 32 20 6f 66 20 74 68 65 20 33 20 63 6f 6c 75 6d  2 of the 3 colum
14ed0 6e 73 20 6f 66 20 45 78 31 20 61 72 65 20 69 6e  ns of Ex1 are in
14ee0 64 65 78 65 64 2e 0a 2a 2a 20 54 68 65 20 76 61  dexed..** The va
14ef0 6c 75 65 20 6f 66 20 61 69 43 6f 6c 75 6d 6e 20  lue of aiColumn 
14f00 69 73 20 7b 32 2c 20 30 7d 2e 20 20 61 69 43 6f  is {2, 0}.  aiCo
14f10 6c 75 6d 6e 5b 30 5d 3d 3d 32 20 62 65 63 61 75  lumn[0]==2 becau
14f20 73 65 20 74 68 65 0a 2a 2a 20 66 69 72 73 74 20  se the.** first 
14f30 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64  column to be ind
14f40 65 78 65 64 20 28 63 33 29 20 68 61 73 20 61 6e  exed (c3) has an
14f50 20 69 6e 64 65 78 20 6f 66 20 32 20 69 6e 20 45   index of 2 in E
14f60 78 31 2e 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68  x1.aCol[]..** Th
14f70 65 20 73 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20  e second column 
14f80 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28 63  to be indexed (c
14f90 31 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20  1) has an index 
14fa0 6f 66 20 30 20 69 6e 0a 2a 2a 20 45 78 31 2e 61  of 0 in.** Ex1.a
14fb0 43 6f 6c 5b 5d 2c 20 68 65 6e 63 65 20 45 78 32  Col[], hence Ex2
14fc0 2e 61 69 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e  .aiColumn[1]==0.
14fd0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 6e 64 65 78  .**.** The Index
14fe0 2e 6f 6e 45 72 72 6f 72 20 66 69 65 6c 64 20 64  .onError field d
14ff0 65 74 65 72 6d 69 6e 65 73 20 77 68 65 74 68 65  etermines whethe
15000 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 69 6e 64  r or not the ind
15010 65 78 65 64 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20  exed columns.** 
15020 6d 75 73 74 20 62 65 20 75 6e 69 71 75 65 20 61  must be unique a
15030 6e 64 20 77 68 61 74 20 74 6f 20 64 6f 20 69 66  nd what to do if
15040 20 74 68 65 79 20 61 72 65 20 6e 6f 74 2e 20 20   they are not.  
15050 57 68 65 6e 20 49 6e 64 65 78 2e 6f 6e 45 72 72  When Index.onErr
15060 6f 72 3d 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69  or=OE_None,.** i
15070 74 20 6d 65 61 6e 73 20 74 68 69 73 20 69 73 20  t means this is 
15080 6e 6f 74 20 61 20 75 6e 69 71 75 65 20 69 6e 64  not a unique ind
15090 65 78 2e 20 20 4f 74 68 65 72 77 69 73 65 20 69  ex.  Otherwise i
150a0 74 20 69 73 20 61 20 75 6e 69 71 75 65 20 69 6e  t is a unique in
150b0 64 65 78 0a 2a 2a 20 61 6e 64 20 74 68 65 20 76  dex.** and the v
150c0 61 6c 75 65 20 6f 66 20 49 6e 64 65 78 2e 6f 6e  alue of Index.on
150d0 45 72 72 6f 72 20 69 6e 64 69 63 61 74 65 20 74  Error indicate t
150e0 68 65 20 77 68 69 63 68 20 63 6f 6e 66 6c 69 63  he which conflic
150f0 74 20 72 65 73 6f 6c 75 74 69 6f 6e 0a 2a 2a 20  t resolution.** 
15100 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 65 6d 70  algorithm to emp
15110 6c 6f 79 20 77 68 65 6e 65 76 65 72 20 61 6e 20  loy whenever an 
15120 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20  attempt is made 
15130 74 6f 20 69 6e 73 65 72 74 20 61 20 6e 6f 6e 2d  to insert a non-
15140 75 6e 69 71 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e  unique.** elemen
15150 74 2e 0a 2a 2a 0a 2a 2a 20 57 68 69 6c 65 20 70  t..**.** While p
15160 61 72 73 69 6e 67 20 61 20 43 52 45 41 54 45 20  arsing a CREATE 
15170 54 41 42 4c 45 20 6f 72 20 43 52 45 41 54 45 20  TABLE or CREATE 
15180 49 4e 44 45 58 20 73 74 61 74 65 6d 65 6e 74 20  INDEX statement 
15190 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67  in order to.** g
151a0 65 6e 65 72 61 74 65 20 56 44 42 45 20 63 6f 64  enerate VDBE cod
151b0 65 20 28 61 73 20 6f 70 70 6f 73 65 64 20 74 6f  e (as opposed to
151c0 20 70 61 72 73 69 6e 67 20 6f 6e 65 20 72 65 61   parsing one rea
151d0 64 20 66 72 6f 6d 20 61 6e 20 73 71 6c 69 74 65  d from an sqlite
151e0 5f 6d 61 73 74 65 72 0a 2a 2a 20 74 61 62 6c 65  _master.** table
151f0 20 61 73 20 70 61 72 74 20 6f 66 20 70 61 72 73   as part of pars
15200 69 6e 67 20 61 6e 20 65 78 69 73 74 69 6e 67 20  ing an existing 
15210 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 29  database schema)
15220 2c 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 73 74  , transient inst
15230 61 6e 63 65 73 0a 2a 2a 20 6f 66 20 74 68 69 73  ances.** of this
15240 20 73 74 72 75 63 74 75 72 65 20 6d 61 79 20 62   structure may b
15250 65 20 63 72 65 61 74 65 64 2e 20 49 6e 20 74 68  e created. In th
15260 69 73 20 63 61 73 65 20 74 68 65 20 49 6e 64 65  is case the Inde
15270 78 2e 74 6e 75 6d 20 76 61 72 69 61 62 6c 65 20  x.tnum variable 
15280 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73 74  is.** used to st
15290 6f 72 65 20 74 68 65 20 61 64 64 72 65 73 73 20  ore the address 
152a0 6f 66 20 61 20 56 44 42 45 20 69 6e 73 74 72 75  of a VDBE instru
152b0 63 74 69 6f 6e 2c 20 6e 6f 74 20 61 20 64 61 74  ction, not a dat
152c0 61 62 61 73 65 20 70 61 67 65 0a 2a 2a 20 6e 75  abase page.** nu
152d0 6d 62 65 72 20 28 69 74 20 63 61 6e 6e 6f 74 20  mber (it cannot 
152e0 2d 20 74 68 65 20 64 61 74 61 62 61 73 65 20 70  - the database p
152f0 61 67 65 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 63  age is not alloc
15300 61 74 65 64 20 75 6e 74 69 6c 20 74 68 65 20 56  ated until the V
15310 44 42 45 0a 2a 2a 20 70 72 6f 67 72 61 6d 20 69  DBE.** program i
15320 73 20 65 78 65 63 75 74 65 64 29 2e 20 53 65 65  s executed). See
15330 20 63 6f 6e 76 65 72 74 54 6f 57 69 74 68 6f 75   convertToWithou
15340 74 52 6f 77 69 64 54 61 62 6c 65 28 29 20 66 6f  tRowidTable() fo
15350 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 73 74  r details..*/.st
15360 72 75 63 74 20 49 6e 64 65 78 20 7b 0a 20 20 63  ruct Index {.  c
15370 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
15380 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
15390 6f 66 20 74 68 69 73 20 69 6e 64 65 78 20 2a 2f  of this index */
153a0 0a 20 20 69 31 36 20 2a 61 69 43 6f 6c 75 6d 6e  .  i16 *aiColumn
153b0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57  ;           /* W
153c0 68 69 63 68 20 63 6f 6c 75 6d 6e 73 20 61 72 65  hich columns are
153d0 20 75 73 65 64 20 62 79 20 74 68 69 73 20 69 6e   used by this in
153e0 64 65 78 2e 20 20 31 73 74 20 69 73 20 30 20 2a  dex.  1st is 0 *
153f0 2f 0a 20 20 4c 6f 67 45 73 74 20 2a 61 69 52 6f  /.  LogEst *aiRo
15400 77 4c 6f 67 45 73 74 3b 20 20 20 20 20 2f 2a 20  wLogEst;     /* 
15410 46 72 6f 6d 20 41 4e 41 4c 59 5a 45 3a 20 45 73  From ANALYZE: Es
15420 74 2e 20 72 6f 77 73 20 73 65 6c 65 63 74 65 64  t. rows selected
15430 20 62 79 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20   by each column 
15440 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62  */.  Table *pTab
15450 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  le;           /*
15460 20 54 68 65 20 53 51 4c 20 74 61 62 6c 65 20 62   The SQL table b
15470 65 69 6e 67 20 69 6e 64 65 78 65 64 20 2a 2f 0a  eing indexed */.
15480 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b    char *zColAff;
15490 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74             /* St
154a0 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74 68  ring defining th
154b0 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65 61  e affinity of ea
154c0 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49  ch column */.  I
154d0 6e 64 65 78 20 2a 70 4e 65 78 74 3b 20 20 20 20  ndex *pNext;    
154e0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e          /* The n
154f0 65 78 74 20 69 6e 64 65 78 20 61 73 73 6f 63 69  ext index associ
15500 61 74 65 64 20 77 69 74 68 20 74 68 65 20 73 61  ated with the sa
15510 6d 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 53 63  me table */.  Sc
15520 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
15530 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61         /* Schema
15540 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69 73   containing this
15550 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 2a   index */.  u8 *
15560 61 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20  aSortOrder;     
15570 20 20 20 20 20 2f 2a 20 66 6f 72 20 65 61 63 68       /* for each
15580 20 63 6f 6c 75 6d 6e 3a 20 54 72 75 65 3d 3d 44   column: True==D
15590 45 53 43 2c 20 46 61 6c 73 65 3d 3d 41 53 43 20  ESC, False==ASC 
155a0 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
155b0 2a 2a 61 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a  **azColl;     /*
155c0 20 41 72 72 61 79 20 6f 66 20 63 6f 6c 6c 61 74   Array of collat
155d0 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 6e 61 6d  ion sequence nam
155e0 65 73 20 66 6f 72 20 69 6e 64 65 78 20 2a 2f 0a  es for index */.
155f0 20 20 45 78 70 72 20 2a 70 50 61 72 74 49 64 78    Expr *pPartIdx
15600 57 68 65 72 65 3b 20 20 20 20 20 2f 2a 20 57 48  Where;     /* WH
15610 45 52 45 20 63 6c 61 75 73 65 20 66 6f 72 20 70  ERE clause for p
15620 61 72 74 69 61 6c 20 69 6e 64 69 63 65 73 20 2a  artial indices *
15630 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 61 43  /.  ExprList *aC
15640 6f 6c 45 78 70 72 3b 20 20 20 20 20 20 2f 2a 20  olExpr;      /* 
15650 43 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f  Column expressio
15660 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d  ns */.  int tnum
15670 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
15680 20 2f 2a 20 44 42 20 50 61 67 65 20 63 6f 6e 74   /* DB Page cont
15690 61 69 6e 69 6e 67 20 72 6f 6f 74 20 6f 66 20 74  aining root of t
156a0 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 4c  his index */.  L
156b0 6f 67 45 73 74 20 73 7a 49 64 78 52 6f 77 3b 20  ogEst szIdxRow; 
156c0 20 20 20 20 20 20 20 20 2f 2a 20 45 73 74 69 6d          /* Estim
156d0 61 74 65 64 20 61 76 65 72 61 67 65 20 72 6f 77  ated average row
156e0 20 73 69 7a 65 20 69 6e 20 62 79 74 65 73 20 2a   size in bytes *
156f0 2f 0a 20 20 75 31 36 20 6e 4b 65 79 43 6f 6c 3b  /.  u16 nKeyCol;
15700 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
15710 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
15720 73 20 66 6f 72 6d 69 6e 67 20 74 68 65 20 6b 65  s forming the ke
15730 79 20 2a 2f 0a 20 20 75 31 36 20 6e 43 6f 6c 75  y */.  u16 nColu
15740 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  mn;             
15750 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
15760 75 6d 6e 73 20 73 74 6f 72 65 64 20 69 6e 20 74  umns stored in t
15770 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38  he index */.  u8
15780 20 6f 6e 45 72 72 6f 72 3b 20 20 20 20 20 20 20   onError;       
15790 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 41 62 6f         /* OE_Abo
157a0 72 74 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f  rt, OE_Ignore, O
157b0 45 5f 52 65 70 6c 61 63 65 2c 20 6f 72 20 4f 45  E_Replace, or OE
157c0 5f 4e 6f 6e 65 20 2a 2f 0a 20 20 75 6e 73 69 67  _None */.  unsig
157d0 6e 65 64 20 69 64 78 54 79 70 65 3a 32 3b 20 20  ned idxType:2;  
157e0 20 20 20 20 2f 2a 20 31 3d 3d 55 4e 49 51 55 45      /* 1==UNIQUE
157f0 2c 20 32 3d 3d 50 52 49 4d 41 52 59 20 4b 45 59  , 2==PRIMARY KEY
15800 2c 20 30 3d 3d 43 52 45 41 54 45 20 49 4e 44 45  , 0==CREATE INDE
15810 58 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  X */.  unsigned 
15820 62 55 6e 6f 72 64 65 72 65 64 3a 31 3b 20 20 20  bUnordered:1;   
15830 2f 2a 20 55 73 65 20 74 68 69 73 20 69 6e 64 65  /* Use this inde
15840 78 20 66 6f 72 20 3d 3d 20 6f 72 20 49 4e 20 71  x for == or IN q
15850 75 65 72 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20  ueries only */. 
15860 20 75 6e 73 69 67 6e 65 64 20 75 6e 69 71 4e 6f   unsigned uniqNo
15870 74 4e 75 6c 6c 3a 31 3b 20 20 2f 2a 20 54 72 75  tNull:1;  /* Tru
15880 65 20 69 66 20 55 4e 49 51 55 45 20 61 6e 64 20  e if UNIQUE and 
15890 4e 4f 54 20 4e 55 4c 4c 20 66 6f 72 20 61 6c 6c  NOT NULL for all
158a0 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 75 6e   columns */.  un
158b0 73 69 67 6e 65 64 20 69 73 52 65 73 69 7a 65 64  signed isResized
158c0 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69  :1;    /* True i
158d0 66 20 72 65 73 69 7a 65 49 6e 64 65 78 4f 62 6a  f resizeIndexObj
158e0 65 63 74 28 29 20 68 61 73 20 62 65 65 6e 20 63  ect() has been c
158f0 61 6c 6c 65 64 20 2a 2f 0a 20 20 75 6e 73 69 67  alled */.  unsig
15900 6e 65 64 20 69 73 43 6f 76 65 72 69 6e 67 3a 31  ned isCovering:1
15910 3b 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74  ;   /* True if t
15920 68 69 73 20 69 73 20 61 20 63 6f 76 65 72 69 6e  his is a coverin
15930 67 20 69 6e 64 65 78 20 2a 2f 0a 20 20 75 6e 73  g index */.  uns
15940 69 67 6e 65 64 20 6e 6f 53 6b 69 70 53 63 61 6e  igned noSkipScan
15950 3a 31 3b 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20  :1;   /* Do not 
15960 74 72 79 20 74 6f 20 75 73 65 20 73 6b 69 70 2d  try to use skip-
15970 73 63 61 6e 20 69 66 20 74 72 75 65 20 2a 2f 0a  scan if true */.
15980 20 20 75 6e 73 69 67 6e 65 64 20 68 61 73 53 74    unsigned hasSt
15990 61 74 31 3a 31 3b 20 20 20 20 20 2f 2a 20 61 69  at1:1;     /* ai
159a0 52 6f 77 4c 6f 67 45 73 74 20 76 61 6c 75 65 73  RowLogEst values
159b0 20 63 6f 6d 65 20 66 72 6f 6d 20 73 71 6c 69 74   come from sqlit
159c0 65 5f 73 74 61 74 31 20 2a 2f 0a 23 69 66 64 65  e_stat1 */.#ifde
159d0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
159e0 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 20  STAT3_OR_STAT4. 
159f0 20 69 6e 74 20 6e 53 61 6d 70 6c 65 3b 20 20 20   int nSample;   
15a00 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
15a10 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20  ber of elements 
15a20 69 6e 20 61 53 61 6d 70 6c 65 5b 5d 20 2a 2f 0a  in aSample[] */.
15a30 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 43 6f 6c    int nSampleCol
15a40 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69  ;          /* Si
15a50 7a 65 20 6f 66 20 49 6e 64 65 78 53 61 6d 70 6c  ze of IndexSampl
15a60 65 2e 61 6e 45 71 5b 5d 20 61 6e 64 20 73 6f 20  e.anEq[] and so 
15a70 6f 6e 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20  on */.  tRowcnt 
15a80 2a 61 41 76 67 45 71 3b 20 20 20 20 20 20 20 20  *aAvgEq;        
15a90 20 2f 2a 20 41 76 65 72 61 67 65 20 6e 45 71 20   /* Average nEq 
15aa0 76 61 6c 75 65 73 20 66 6f 72 20 6b 65 79 73 20  values for keys 
15ab0 6e 6f 74 20 69 6e 20 61 53 61 6d 70 6c 65 20 2a  not in aSample *
15ac0 2f 0a 20 20 49 6e 64 65 78 53 61 6d 70 6c 65 20  /.  IndexSample 
15ad0 2a 61 53 61 6d 70 6c 65 3b 20 20 20 20 2f 2a 20  *aSample;    /* 
15ae0 53 61 6d 70 6c 65 73 20 6f 66 20 74 68 65 20 6c  Samples of the l
15af0 65 66 74 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f 0a  eft-most key */.
15b00 20 20 74 52 6f 77 63 6e 74 20 2a 61 69 52 6f 77    tRowcnt *aiRow
15b10 45 73 74 3b 20 20 20 20 20 20 20 2f 2a 20 4e 6f  Est;       /* No
15b20 6e 2d 6c 6f 67 61 72 69 74 68 6d 69 63 20 73 74  n-logarithmic st
15b30 61 74 31 20 64 61 74 61 20 66 6f 72 20 74 68 69  at1 data for thi
15b40 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 74 52 6f  s index */.  tRo
15b50 77 63 6e 74 20 6e 52 6f 77 45 73 74 30 3b 20 20  wcnt nRowEst0;  
15b60 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67        /* Non-log
15b70 61 72 69 74 68 6d 69 63 20 6e 75 6d 62 65 72 20  arithmic number 
15b80 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 69  of rows in the i
15b90 6e 64 65 78 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d  ndex */.#endif.}
15ba0 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  ;../*.** Allowed
15bb0 20 76 61 6c 75 65 73 20 66 6f 72 20 49 6e 64 65   values for Inde
15bc0 78 2e 69 64 78 54 79 70 65 0a 2a 2f 0a 23 64 65  x.idxType.*/.#de
15bd0 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54  fine SQLITE_IDXT
15be0 59 50 45 5f 41 50 50 44 45 46 20 20 20 20 20 20  YPE_APPDEF      
15bf0 30 20 20 20 2f 2a 20 43 72 65 61 74 65 64 20 75  0   /* Created u
15c00 73 69 6e 67 20 43 52 45 41 54 45 20 49 4e 44 45  sing CREATE INDE
15c10 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  X */.#define SQL
15c20 49 54 45 5f 49 44 58 54 59 50 45 5f 55 4e 49 51  ITE_IDXTYPE_UNIQ
15c30 55 45 20 20 20 20 20 20 31 20 20 20 2f 2a 20 49  UE      1   /* I
15c40 6d 70 6c 65 6d 65 6e 74 73 20 61 20 55 4e 49 51  mplements a UNIQ
15c50 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f  UE constraint */
15c60 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
15c70 49 44 58 54 59 50 45 5f 50 52 49 4d 41 52 59 4b  IDXTYPE_PRIMARYK
15c80 45 59 20 20 32 20 20 20 2f 2a 20 49 73 20 74 68  EY  2   /* Is th
15c90 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 66 6f  e PRIMARY KEY fo
15ca0 72 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 0a  r the table */..
15cb0 2f 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69  /* Return true i
15cc0 66 20 69 6e 64 65 78 20 58 20 69 73 20 61 20 50  f index X is a P
15cd0 52 49 4d 41 52 59 20 4b 45 59 20 69 6e 64 65 78  RIMARY KEY index
15ce0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 72   */.#define IsPr
15cf0 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 58 29  imaryKeyIndex(X)
15d00 20 20 28 28 58 29 2d 3e 69 64 78 54 79 70 65 3d    ((X)->idxType=
15d10 3d 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f  =SQLITE_IDXTYPE_
15d20 50 52 49 4d 41 52 59 4b 45 59 29 0a 0a 2f 2a 20  PRIMARYKEY)../* 
15d30 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69  Return true if i
15d40 6e 64 65 78 20 58 20 69 73 20 61 20 55 4e 49 51  ndex X is a UNIQ
15d50 55 45 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  UE index */.#def
15d60 69 6e 65 20 49 73 55 6e 69 71 75 65 49 6e 64 65  ine IsUniqueInde
15d70 78 28 58 29 20 20 20 20 20 20 28 28 58 29 2d 3e  x(X)      ((X)->
15d80 6f 6e 45 72 72 6f 72 21 3d 4f 45 5f 4e 6f 6e 65  onError!=OE_None
15d90 29 0a 0a 2f 2a 20 54 68 65 20 49 6e 64 65 78 2e  )../* The Index.
15da0 61 69 43 6f 6c 75 6d 6e 5b 5d 20 76 61 6c 75 65  aiColumn[] value
15db0 73 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 70  s are normally p
15dc0 6f 73 69 74 69 76 65 20 69 6e 74 65 67 65 72 2e  ositive integer.
15dd0 20 20 42 75 74 0a 2a 2a 20 74 68 65 72 65 20 61    But.** there a
15de0 72 65 20 73 6f 6d 65 20 6e 65 67 61 74 69 76 65  re some negative
15df0 20 76 61 6c 75 65 73 20 74 68 61 74 20 68 61 76   values that hav
15e00 65 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  e special meanin
15e10 67 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 58 4e  g:.*/.#define XN
15e20 5f 52 4f 57 49 44 20 20 20 20 20 28 2d 31 29 20  _ROWID     (-1) 
15e30 20 20 20 20 2f 2a 20 49 6e 64 65 78 65 64 20 63      /* Indexed c
15e40 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20 72 6f 77  olumn is the row
15e50 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 58 4e  id */.#define XN
15e60 5f 45 58 50 52 20 20 20 20 20 20 28 2d 32 29 20  _EXPR      (-2) 
15e70 20 20 20 20 2f 2a 20 49 6e 64 65 78 65 64 20 63      /* Indexed c
15e80 6f 6c 75 6d 6e 20 69 73 20 61 6e 20 65 78 70 72  olumn is an expr
15e90 65 73 73 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  ession */../*.**
15ea0 20 45 61 63 68 20 73 61 6d 70 6c 65 20 73 74 6f   Each sample sto
15eb0 72 65 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74  red in the sqlit
15ec0 65 5f 73 74 61 74 33 20 74 61 62 6c 65 20 69 73  e_stat3 table is
15ed0 20 72 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20   represented in 
15ee0 6d 65 6d 6f 72 79 0a 2a 2a 20 75 73 69 6e 67 20  memory.** using 
15ef0 61 20 73 74 72 75 63 74 75 72 65 20 6f 66 20 74  a structure of t
15f00 68 69 73 20 74 79 70 65 2e 20 20 53 65 65 20 64  his type.  See d
15f10 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 74 20  ocumentation at 
15f20 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65 0a 2a  the top of the.*
15f30 2a 20 61 6e 61 6c 79 7a 65 2e 63 20 73 6f 75 72  * analyze.c sour
15f40 63 65 20 66 69 6c 65 20 66 6f 72 20 61 64 64 69  ce file for addi
15f50 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
15f60 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e  on..*/.struct In
15f70 64 65 78 53 61 6d 70 6c 65 20 7b 0a 20 20 76 6f  dexSample {.  vo
15f80 69 64 20 2a 70 3b 20 20 20 20 20 20 20 20 20 20  id *p;          
15f90 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 73 61  /* Pointer to sa
15fa0 6d 70 6c 65 64 20 72 65 63 6f 72 64 20 2a 2f 0a  mpled record */.
15fb0 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20    int n;        
15fc0 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 72      /* Size of r
15fd0 65 63 6f 72 64 20 69 6e 20 62 79 74 65 73 20 2a  ecord in bytes *
15fe0 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 45  /.  tRowcnt *anE
15ff0 71 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75  q;    /* Est. nu
16000 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65  mber of rows whe
16010 72 65 20 74 68 65 20 6b 65 79 20 65 71 75 61 6c  re the key equal
16020 73 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f  s this sample */
16030 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 4c 74  .  tRowcnt *anLt
16040 3b 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d  ;    /* Est. num
16050 62 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72  ber of rows wher
16060 65 20 6b 65 79 20 69 73 20 6c 65 73 73 20 74 68  e key is less th
16070 61 6e 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a  an this sample *
16080 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 44  /.  tRowcnt *anD
16090 4c 74 3b 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75  Lt;   /* Est. nu
160a0 6d 62 65 72 20 6f 66 20 64 69 73 74 69 6e 63 74  mber of distinct
160b0 20 6b 65 79 73 20 6c 65 73 73 20 74 68 61 6e 20   keys less than 
160c0 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d  this sample */.}
160d0 3b 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 74 6f  ;../*.** Each to
160e0 6b 65 6e 20 63 6f 6d 69 6e 67 20 6f 75 74 20 6f  ken coming out o
160f0 66 20 74 68 65 20 6c 65 78 65 72 20 69 73 20 61  f the lexer is a
16100 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a  n instance of.**
16110 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e   this structure.
16120 20 20 54 6f 6b 65 6e 73 20 61 72 65 20 61 6c 73    Tokens are als
16130 6f 20 75 73 65 64 20 61 73 20 70 61 72 74 20 6f  o used as part o
16140 66 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e  f an expression.
16150 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 69 66 20 54  .**.** Note if T
16160 6f 6b 65 6e 2e 7a 3d 3d 30 20 74 68 65 6e 20 54  oken.z==0 then T
16170 6f 6b 65 6e 2e 64 79 6e 20 61 6e 64 20 54 6f 6b  oken.dyn and Tok
16180 65 6e 2e 6e 20 61 72 65 20 75 6e 64 65 66 69 6e  en.n are undefin
16190 65 64 20 61 6e 64 0a 2a 2a 20 6d 61 79 20 63 6f  ed and.** may co
161a0 6e 74 61 69 6e 20 72 61 6e 64 6f 6d 20 76 61 6c  ntain random val
161b0 75 65 73 2e 20 20 44 6f 20 6e 6f 74 20 6d 61 6b  ues.  Do not mak
161c0 65 20 61 6e 79 20 61 73 73 75 6d 70 74 69 6f 6e  e any assumption
161d0 73 20 61 62 6f 75 74 20 54 6f 6b 65 6e 2e 64 79  s about Token.dy
161e0 6e 0a 2a 2a 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e  n.** and Token.n
161f0 20 77 68 65 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d 30   when Token.z==0
16200 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 6f 6b 65  ..*/.struct Toke
16210 6e 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  n {.  const char
16220 20 2a 7a 3b 20 20 20 20 20 2f 2a 20 54 65 78 74   *z;     /* Text
16230 20 6f 66 20 74 68 65 20 74 6f 6b 65 6e 2e 20 20   of the token.  
16240 4e 6f 74 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61  Not NULL-termina
16250 74 65 64 21 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  ted! */.  unsign
16260 65 64 20 69 6e 74 20 6e 3b 20 20 20 20 2f 2a 20  ed int n;    /* 
16270 4e 75 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63  Number of charac
16280 74 65 72 73 20 69 6e 20 74 68 69 73 20 74 6f 6b  ters in this tok
16290 65 6e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  en */.};../*.** 
162a0 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
162b0 68 69 73 20 73 74 72 75 63 74 75 72 65 20 63 6f  his structure co
162c0 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69  ntains informati
162d0 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e  on needed to gen
162e0 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f  erate.** code fo
162f0 72 20 61 20 53 45 4c 45 43 54 20 74 68 61 74 20  r a SELECT that 
16300 63 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61  contains aggrega
16310 74 65 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a  te functions..**
16320 0a 2a 2a 20 49 66 20 45 78 70 72 2e 6f 70 3d 3d  .** If Expr.op==
16330 54 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72  TK_AGG_COLUMN or
16340 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e   TK_AGG_FUNCTION
16350 20 74 68 65 6e 20 45 78 70 72 2e 70 41 67 67 49   then Expr.pAggI
16360 6e 66 6f 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e  nfo is a.** poin
16370 74 65 72 20 74 6f 20 74 68 69 73 20 73 74 72 75  ter to this stru
16380 63 74 75 72 65 2e 20 20 54 68 65 20 45 78 70 72  cture.  The Expr
16390 2e 69 43 6f 6c 75 6d 6e 20 66 69 65 6c 64 20 69  .iColumn field i
163a0 73 20 74 68 65 20 69 6e 64 65 78 20 69 6e 0a 2a  s the index in.*
163b0 2a 20 41 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d  * AggInfo.aCol[]
163c0 20 6f 72 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e   or AggInfo.aFun
163d0 63 5b 5d 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69  c[] of informati
163e0 6f 6e 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e  on needed to gen
163f0 65 72 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f  erate.** code fo
16400 72 20 74 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a  r that node..**.
16410 2a 2a 20 41 67 67 49 6e 66 6f 2e 70 47 72 6f 75  ** AggInfo.pGrou
16420 70 42 79 20 61 6e 64 20 41 67 67 49 6e 66 6f 2e  pBy and AggInfo.
16430 61 46 75 6e 63 2e 70 45 78 70 72 20 70 6f 69 6e  aFunc.pExpr poin
16440 74 20 74 6f 20 66 69 65 6c 64 73 20 77 69 74 68  t to fields with
16450 69 6e 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e  in the.** origin
16460 61 6c 20 53 65 6c 65 63 74 20 73 74 72 75 63 74  al Select struct
16470 75 72 65 20 74 68 61 74 20 64 65 73 63 72 69 62  ure that describ
16480 65 73 20 74 68 65 20 53 45 4c 45 43 54 20 73 74  es the SELECT st
16490 61 74 65 6d 65 6e 74 2e 20 20 54 68 65 73 65 0a  atement.  These.
164a0 2a 2a 20 66 69 65 6c 64 73 20 64 6f 20 6e 6f 74  ** fields do not
164b0 20 6e 65 65 64 20 74 6f 20 62 65 20 66 72 65 65   need to be free
164c0 64 20 77 68 65 6e 20 64 65 61 6c 6c 6f 63 61 74  d when deallocat
164d0 69 6e 67 20 74 68 65 20 41 67 67 49 6e 66 6f 20  ing the AggInfo 
164e0 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74  structure..*/.st
164f0 72 75 63 74 20 41 67 67 49 6e 66 6f 20 7b 0a 20  ruct AggInfo {. 
16500 20 75 38 20 64 69 72 65 63 74 4d 6f 64 65 3b 20   u8 directMode; 
16510 20 20 20 20 20 20 20 20 20 2f 2a 20 44 69 72 65           /* Dire
16520 63 74 20 72 65 6e 64 65 72 69 6e 67 20 6d 6f 64  ct rendering mod
16530 65 20 6d 65 61 6e 73 20 74 61 6b 65 20 64 61 74  e means take dat
16540 61 20 64 69 72 65 63 74 6c 79 0a 20 20 20 20 20  a directly.     
16550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16560 20 20 20 20 20 2a 2a 20 66 72 6f 6d 20 73 6f 75       ** from sou
16570 72 63 65 20 74 61 62 6c 65 73 20 72 61 74 68 65  rce tables rathe
16580 72 20 74 68 61 6e 20 66 72 6f 6d 20 61 63 63 75  r than from accu
16590 6d 75 6c 61 74 6f 72 73 20 2a 2f 0a 20 20 75 38  mulators */.  u8
165a0 20 75 73 65 53 6f 72 74 69 6e 67 49 64 78 3b 20   useSortingIdx; 
165b0 20 20 20 20 20 20 2f 2a 20 49 6e 20 64 69 72 65        /* In dire
165c0 63 74 20 6d 6f 64 65 2c 20 72 65 66 65 72 65 6e  ct mode, referen
165d0 63 65 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69  ce the sorting i
165e0 6e 64 65 78 20 72 61 74 68 65 72 0a 20 20 20 20  ndex rather.    
165f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16600 20 20 20 20 20 20 2a 2a 20 74 68 61 6e 20 74 68        ** than th
16610 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a  e source table *
16620 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49  /.  int sortingI
16630 64 78 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43  dx;         /* C
16640 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
16650 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  the sorting inde
16660 78 20 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69  x */.  int sorti
16670 6e 67 49 64 78 50 54 61 62 3b 20 20 20 20 20 2f  ngIdxPTab;     /
16680 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  * Cursor number 
16690 6f 66 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20  of pseudo-table 
166a0 2a 2f 0a 20 20 69 6e 74 20 6e 53 6f 72 74 69 6e  */.  int nSortin
166b0 67 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a 20  gColumn;     /* 
166c0 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
166d0 73 20 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67  s in the sorting
166e0 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20   index */.  int 
166f0 6d 6e 52 65 67 2c 20 6d 78 52 65 67 3b 20 20 20  mnReg, mxReg;   
16700 20 20 20 20 2f 2a 20 52 61 6e 67 65 20 6f 66 20      /* Range of 
16710 72 65 67 69 73 74 65 72 73 20 61 6c 6c 6f 63 61  registers alloca
16720 74 65 64 20 66 6f 72 20 61 43 6f 6c 20 61 6e 64  ted for aCol and
16730 20 61 46 75 6e 63 20 2a 2f 0a 20 20 45 78 70 72   aFunc */.  Expr
16740 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20  List *pGroupBy; 
16750 20 20 20 20 2f 2a 20 54 68 65 20 67 72 6f 75 70      /* The group
16760 20 62 79 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20   by clause */.  
16770 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 63  struct AggInfo_c
16780 6f 6c 20 7b 20 20 20 20 2f 2a 20 46 6f 72 20 65  ol {    /* For e
16790 61 63 68 20 63 6f 6c 75 6d 6e 20 75 73 65 64 20  ach column used 
167a0 69 6e 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73  in source tables
167b0 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70   */.    Table *p
167c0 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  Tab;            
167d0 20 2f 2a 20 53 6f 75 72 63 65 20 74 61 62 6c 65   /* Source table
167e0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 54 61 62   */.    int iTab
167f0 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  le;             
16800 20 2f 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65   /* Cursor numbe
16810 72 20 6f 66 20 74 68 65 20 73 6f 75 72 63 65 20  r of the source 
16820 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74  table */.    int
16830 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20   iColumn;       
16840 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20        /* Column 
16850 6e 75 6d 62 65 72 20 77 69 74 68 69 6e 20 74 68  number within th
16860 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a  e source table *
16870 2f 0a 20 20 20 20 69 6e 74 20 69 53 6f 72 74 65  /.    int iSorte
16880 72 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 2f  rColumn;       /
16890 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  * Column number 
168a0 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69  in the sorting i
168b0 6e 64 65 78 20 2a 2f 0a 20 20 20 20 69 6e 74 20  ndex */.    int 
168c0 69 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20  iMem;           
168d0 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c       /* Memory l
168e0 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74  ocation that act
168f0 73 20 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72  s as accumulator
16900 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45   */.    Expr *pE
16910 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  xpr;            
16920 20 2f 2a 20 54 68 65 20 6f 72 69 67 69 6e 61 6c   /* The original
16930 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20   expression */. 
16940 20 7d 20 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74 20   } *aCol;.  int 
16950 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  nColumn;        
16960 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
16970 20 75 73 65 64 20 65 6e 74 72 69 65 73 20 69 6e   used entries in
16980 20 61 43 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74   aCol[] */.  int
16990 20 6e 41 63 63 75 6d 75 6c 61 74 6f 72 3b 20 20   nAccumulator;  
169a0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
169b0 66 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 73  f columns that s
169c0 68 6f 77 20 74 68 72 6f 75 67 68 20 74 6f 20 74  how through to t
169d0 68 65 20 6f 75 74 70 75 74 2e 0a 20 20 20 20 20  he output..     
169e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169f0 20 20 20 20 20 2a 2a 20 41 64 64 69 74 69 6f 6e       ** Addition
16a00 61 6c 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75  al columns are u
16a10 73 65 64 20 6f 6e 6c 79 20 61 73 20 70 61 72 61  sed only as para
16a20 6d 65 74 65 72 73 20 74 6f 0a 20 20 20 20 20 20  meters to.      
16a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a40 20 20 20 20 2a 2a 20 61 67 67 72 65 67 61 74 65      ** aggregate
16a50 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20   functions */.  
16a60 73 74 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 66  struct AggInfo_f
16a70 75 6e 63 20 7b 20 20 20 2f 2a 20 46 6f 72 20 65  unc {   /* For e
16a80 61 63 68 20 61 67 67 72 65 67 61 74 65 20 66 75  ach aggregate fu
16a90 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 45 78  nction */.    Ex
16aa0 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20  pr *pExpr;      
16ab0 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73         /* Expres
16ac0 73 69 6f 6e 20 65 6e 63 6f 64 69 6e 67 20 74 68  sion encoding th
16ad0 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  e function */.  
16ae0 20 20 46 75 6e 63 44 65 66 20 2a 70 46 75 6e 63    FuncDef *pFunc
16af0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
16b00 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  e aggregate func
16b10 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74  tion implementat
16b20 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ion */.    int i
16b30 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
16b40 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f      /* Memory lo
16b50 63 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73  cation that acts
16b60 20 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20   as accumulator 
16b70 2a 2f 0a 20 20 20 20 69 6e 74 20 69 44 69 73 74  */.    int iDist
16b80 69 6e 63 74 3b 20 20 20 20 20 20 20 20 20 20 20  inct;           
16b90 2f 2a 20 45 70 68 65 6d 65 72 61 6c 20 74 61 62  /* Ephemeral tab
16ba0 6c 65 20 75 73 65 64 20 74 6f 20 65 6e 66 6f 72  le used to enfor
16bb0 63 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 20  ce DISTINCT */. 
16bc0 20 7d 20 2a 61 46 75 6e 63 3b 0a 20 20 69 6e 74   } *aFunc;.  int
16bd0 20 6e 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20   nFunc;         
16be0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
16bf0 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 46 75  f entries in aFu
16c00 6e 63 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  nc[] */.};../*.*
16c10 2a 20 54 68 65 20 64 61 74 61 74 79 70 65 20 79  * The datatype y
16c20 6e 56 61 72 20 69 73 20 61 20 73 69 67 6e 65 64  nVar is a signed
16c30 20 69 6e 74 65 67 65 72 2c 20 65 69 74 68 65 72   integer, either
16c40 20 31 36 2d 62 69 74 20 6f 72 20 33 32 2d 62 69   16-bit or 32-bi
16c50 74 2e 0a 2a 2a 20 55 73 75 61 6c 6c 79 20 69 74  t..** Usually it
16c60 20 69 73 20 31 36 2d 62 69 74 73 2e 20 20 42 75   is 16-bits.  Bu
16c70 74 20 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  t if SQLITE_MAX_
16c80 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 20  VARIABLE_NUMBER 
16c90 69 73 20 67 72 65 61 74 65 72 0a 2a 2a 20 74 68  is greater.** th
16ca0 61 6e 20 33 32 37 36 37 20 77 65 20 68 61 76 65  an 32767 we have
16cb0 20 74 6f 20 6d 61 6b 65 20 69 74 20 33 32 2d 62   to make it 32-b
16cc0 69 74 2e 20 20 31 36 2d 62 69 74 20 69 73 20 70  it.  16-bit is p
16cd0 72 65 66 65 72 72 65 64 20 62 65 63 61 75 73 65  referred because
16ce0 0a 2a 2a 20 69 74 20 75 73 65 73 20 6c 65 73 73  .** it uses less
16cf0 20 6d 65 6d 6f 72 79 20 69 6e 20 74 68 65 20 45   memory in the E
16d00 78 70 72 20 6f 62 6a 65 63 74 2c 20 77 68 69 63  xpr object, whic
16d10 68 20 69 73 20 61 20 62 69 67 20 6d 65 6d 6f 72  h is a big memor
16d20 79 20 75 73 65 72 0a 2a 2a 20 69 6e 20 73 79 73  y user.** in sys
16d30 74 65 6d 73 20 77 69 74 68 20 6c 6f 74 73 20 6f  tems with lots o
16d40 66 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  f prepared state
16d50 6d 65 6e 74 73 2e 20 20 41 6e 64 20 66 65 77 20  ments.  And few 
16d60 61 70 70 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a 20  applications.** 
16d70 6e 65 65 64 20 6d 6f 72 65 20 74 68 61 6e 20 61  need more than a
16d80 62 6f 75 74 20 31 30 20 6f 72 20 32 30 20 76 61  bout 10 or 20 va
16d90 72 69 61 62 6c 65 73 2e 20 20 42 75 74 20 73 6f  riables.  But so
16da0 6d 65 20 65 78 74 72 65 6d 65 20 75 73 65 72 73  me extreme users
16db0 20 77 61 6e 74 0a 2a 2a 20 74 6f 20 68 61 76 65   want.** to have
16dc0 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
16dd0 65 6e 74 73 20 77 69 74 68 20 6f 76 65 72 20 33  ents with over 3
16de0 32 37 36 37 20 76 61 72 69 61 62 6c 65 73 2c 20  2767 variables, 
16df0 61 6e 64 20 66 6f 72 20 74 68 65 6d 0a 2a 2a 20  and for them.** 
16e00 74 68 65 20 6f 70 74 69 6f 6e 20 69 73 20 61 76  the option is av
16e10 61 69 6c 61 62 6c 65 20 28 61 74 20 63 6f 6d 70  ailable (at comp
16e20 69 6c 65 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69  ile-time)..*/.#i
16e30 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52  f SQLITE_MAX_VAR
16e40 49 41 42 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33 32  IABLE_NUMBER<=32
16e50 37 36 37 0a 74 79 70 65 64 65 66 20 69 31 36 20  767.typedef i16 
16e60 79 6e 56 61 72 3b 0a 23 65 6c 73 65 0a 74 79 70  ynVar;.#else.typ
16e70 65 64 65 66 20 69 6e 74 20 79 6e 56 61 72 3b 0a  edef int ynVar;.
16e80 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61  #endif../*.** Ea
16e90 63 68 20 6e 6f 64 65 20 6f 66 20 61 6e 20 65 78  ch node of an ex
16ea0 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20  pression in the 
16eb0 70 61 72 73 65 20 74 72 65 65 20 69 73 20 61 6e  parse tree is an
16ec0 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20   instance.** of 
16ed0 74 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a  this structure..
16ee0 2a 2a 0a 2a 2a 20 45 78 70 72 2e 6f 70 20 69 73  **.** Expr.op is
16ef0 20 74 68 65 20 6f 70 63 6f 64 65 2e 20 54 68 65   the opcode. The
16f00 20 69 6e 74 65 67 65 72 20 70 61 72 73 65 72 20   integer parser 
16f10 74 6f 6b 65 6e 20 63 6f 64 65 73 20 61 72 65 20  token codes are 
16f20 72 65 75 73 65 64 0a 2a 2a 20 61 73 20 6f 70 63  reused.** as opc
16f30 6f 64 65 73 20 68 65 72 65 2e 20 46 6f 72 20 65  odes here. For e
16f40 78 61 6d 70 6c 65 2c 20 74 68 65 20 70 61 72 73  xample, the pars
16f50 65 72 20 64 65 66 69 6e 65 73 20 54 4b 5f 47 45  er defines TK_GE
16f60 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65   to be an intege
16f70 72 0a 2a 2a 20 63 6f 64 65 20 72 65 70 72 65 73  r.** code repres
16f80 65 6e 74 69 6e 67 20 74 68 65 20 22 3e 3d 22 20  enting the ">=" 
16f90 6f 70 65 72 61 74 6f 72 2e 20 54 68 69 73 20 73  operator. This s
16fa0 61 6d 65 20 69 6e 74 65 67 65 72 20 63 6f 64 65  ame integer code
16fb0 20 69 73 20 72 65 75 73 65 64 0a 2a 2a 20 74 6f   is reused.** to
16fc0 20 72 65 70 72 65 73 65 6e 74 20 74 68 65 20 67   represent the g
16fd0 72 65 61 74 65 72 2d 74 68 61 6e 2d 6f 72 2d 65  reater-than-or-e
16fe0 71 75 61 6c 2d 74 6f 20 6f 70 65 72 61 74 6f 72  qual-to operator
16ff0 20 69 6e 20 74 68 65 20 65 78 70 72 65 73 73 69   in the expressi
17000 6f 6e 0a 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a  on.** tree..**.*
17010 2a 20 49 66 20 74 68 65 20 65 78 70 72 65 73 73  * If the express
17020 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 6c 69  ion is an SQL li
17030 74 65 72 61 6c 20 28 54 4b 5f 49 4e 54 45 47 45  teral (TK_INTEGE
17040 52 2c 20 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f  R, TK_FLOAT, TK_
17050 42 4c 4f 42 2c 0a 2a 2a 20 6f 72 20 54 4b 5f 53  BLOB,.** or TK_S
17060 54 52 49 4e 47 29 2c 20 74 68 65 6e 20 45 78 70  TRING), then Exp
17070 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73  r.token contains
17080 20 74 68 65 20 74 65 78 74 20 6f 66 20 74 68 65   the text of the
17090 20 53 51 4c 20 6c 69 74 65 72 61 6c 2e 20 49 66   SQL literal. If
170a0 0a 2a 2a 20 74 68 65 20 65 78 70 72 65 73 73 69  .** the expressi
170b0 6f 6e 20 69 73 20 61 20 76 61 72 69 61 62 6c 65  on is a variable
170c0 20 28 54 4b 5f 56 41 52 49 41 42 4c 45 29 2c 20   (TK_VARIABLE), 
170d0 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20  then Expr.token 
170e0 63 6f 6e 74 61 69 6e 73 20 74 68 65 0a 2a 2a 20  contains the.** 
170f0 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 2e 20 46  variable name. F
17100 69 6e 61 6c 6c 79 2c 20 69 66 20 74 68 65 20 65  inally, if the e
17110 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20  xpression is an 
17120 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 28 54 4b  SQL function (TK
17130 5f 46 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74  _FUNCTION),.** t
17140 68 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63  hen Expr.token c
17150 6f 6e 74 61 69 6e 73 20 74 68 65 20 6e 61 6d 65  ontains the name
17160 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
17170 2e 0a 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70 52 69  ..**.** Expr.pRi
17180 67 68 74 20 61 6e 64 20 45 78 70 72 2e 70 4c 65  ght and Expr.pLe
17190 66 74 20 61 72 65 20 74 68 65 20 6c 65 66 74 20  ft are the left 
171a0 61 6e 64 20 72 69 67 68 74 20 73 75 62 65 78 70  and right subexp
171b0 72 65 73 73 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a  ressions of a.**
171c0 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72   binary operator
171d0 2e 20 45 69 74 68 65 72 20 6f 72 20 62 6f 74 68  . Either or both
171e0 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a   may be NULL..**
171f0 0a 2a 2a 20 45 78 70 72 2e 78 2e 70 4c 69 73 74  .** Expr.x.pList
17200 20 69 73 20 61 20 6c 69 73 74 20 6f 66 20 61 72   is a list of ar
17210 67 75 6d 65 6e 74 73 20 69 66 20 74 68 65 20 65  guments if the e
17220 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20  xpression is an 
17230 53 51 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a  SQL function,.**
17240 20 61 20 43 41 53 45 20 65 78 70 72 65 73 73 69   a CASE expressi
17250 6f 6e 20 6f 72 20 61 6e 20 49 4e 20 65 78 70 72  on or an IN expr
17260 65 73 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f  ession of the fo
17270 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 3c 79  rm "<lhs> IN (<y
17280 3e 2c 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20  >, <z>...)"..** 
17290 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69  Expr.x.pSelect i
172a0 73 20 75 73 65 64 20 69 66 20 74 68 65 20 65 78  s used if the ex
172b0 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75  pression is a su
172c0 62 2d 73 65 6c 65 63 74 20 6f 72 20 61 6e 20 65  b-select or an e
172d0 78 70 72 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20  xpression of.** 
172e0 74 68 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20  the form "<lhs> 
172f0 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22  IN (SELECT ...)"
17300 2e 20 49 66 20 74 68 65 20 45 50 5f 78 49 73 53  . If the EP_xIsS
17310 65 6c 65 63 74 20 62 69 74 20 69 73 20 73 65 74  elect bit is set
17320 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e   in the.** Expr.
17330 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e  flags mask, then
17340 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20   Expr.x.pSelect 
17350 69 73 20 76 61 6c 69 64 2e 20 4f 74 68 65 72 77  is valid. Otherw
17360 69 73 65 2c 20 45 78 70 72 2e 78 2e 70 4c 69 73  ise, Expr.x.pLis
17370 74 20 69 73 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a  t is.** valid..*
17380 2a 0a 2a 2a 20 41 6e 20 65 78 70 72 65 73 73 69  *.** An expressi
17390 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 49  on of the form I
173a0 44 20 6f 72 20 49 44 2e 49 44 20 72 65 66 65 72  D or ID.ID refer
173b0 73 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e  s to a column in
173c0 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72   a table..** For
173d0 20 73 75 63 68 20 65 78 70 72 65 73 73 69 6f 6e   such expression
173e0 73 2c 20 45 78 70 72 2e 6f 70 20 69 73 20 73 65  s, Expr.op is se
173f0 74 20 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61  t to TK_COLUMN a
17400 6e 64 20 45 78 70 72 2e 69 54 61 62 6c 65 20 69  nd Expr.iTable i
17410 73 0a 2a 2a 20 74 68 65 20 69 6e 74 65 67 65 72  s.** the integer
17420 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   cursor number o
17430 66 20 61 20 56 44 42 45 20 63 75 72 73 6f 72 20  f a VDBE cursor 
17440 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 61 74  pointing to that
17450 20 74 61 62 6c 65 20 61 6e 64 0a 2a 2a 20 45 78   table and.** Ex
17460 70 72 2e 69 43 6f 6c 75 6d 6e 20 69 73 20 74 68  pr.iColumn is th
17470 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  e column number 
17480 66 6f 72 20 74 68 65 20 73 70 65 63 69 66 69 63  for the specific
17490 20 63 6f 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65   column.  If the
174a0 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 20 69  .** expression i
174b0 73 20 75 73 65 64 20 61 73 20 61 20 72 65 73 75  s used as a resu
174c0 6c 74 20 69 6e 20 61 6e 20 61 67 67 72 65 67 61  lt in an aggrega
174d0 74 65 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 20  te SELECT, then 
174e0 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20  the.** value is 
174f0 61 6c 73 6f 20 73 74 6f 72 65 64 20 69 6e 20 74  also stored in t
17500 68 65 20 45 78 70 72 2e 69 41 67 67 20 63 6f 6c  he Expr.iAgg col
17510 75 6d 6e 20 69 6e 20 74 68 65 20 61 67 67 72 65  umn in the aggre
17520 67 61 74 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20  gate so that.** 
17530 69 74 20 63 61 6e 20 62 65 20 61 63 63 65 73 73  it can be access
17540 65 64 20 61 66 74 65 72 20 61 6c 6c 20 61 67 67  ed after all agg
17550 72 65 67 61 74 65 73 20 61 72 65 20 63 6f 6d 70  regates are comp
17560 75 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  uted..**.** If t
17570 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
17580 20 61 6e 20 75 6e 62 6f 75 6e 64 20 76 61 72 69   an unbound vari
17590 61 62 6c 65 20 6d 61 72 6b 65 72 20 28 61 20 71  able marker (a q
175a0 75 65 73 74 69 6f 6e 20 6d 61 72 6b 0a 2a 2a 20  uestion mark.** 
175b0 63 68 61 72 61 63 74 65 72 20 27 3f 27 20 69 6e  character '?' in
175c0 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 53 51   the original SQ
175d0 4c 29 20 74 68 65 6e 20 74 68 65 20 45 78 70 72  L) then the Expr
175e0 2e 69 54 61 62 6c 65 20 68 6f 6c 64 73 20 74 68  .iTable holds th
175f0 65 20 69 6e 64 65 78 0a 2a 2a 20 6e 75 6d 62 65  e index.** numbe
17600 72 20 66 6f 72 20 74 68 61 74 20 76 61 72 69 61  r for that varia
17610 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ble..**.** If th
17620 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  e expression is 
17630 61 20 73 75 62 71 75 65 72 79 20 74 68 65 6e 20  a subquery then 
17640 45 78 70 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f 6c  Expr.iColumn hol
17650 64 73 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a  ds an integer.**
17660 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72   register number
17670 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
17680 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 73 75  result of the su
17690 62 71 75 65 72 79 2e 20 20 49 66 20 74 68 65 0a  bquery.  If the.
176a0 2a 2a 20 73 75 62 71 75 65 72 79 20 67 69 76 65  ** subquery give
176b0 73 20 61 20 63 6f 6e 73 74 61 6e 74 20 72 65 73  s a constant res
176c0 75 6c 74 2c 20 74 68 65 6e 20 69 54 61 62 6c 65  ult, then iTable
176d0 20 69 73 20 2d 31 2e 20 20 49 66 20 74 68 65 20   is -1.  If the 
176e0 73 75 62 71 75 65 72 79 0a 2a 2a 20 67 69 76 65  subquery.** give
176f0 73 20 61 20 64 69 66 66 65 72 65 6e 74 20 61 6e  s a different an
17700 73 77 65 72 20 61 74 20 64 69 66 66 65 72 65 6e  swer at differen
17710 74 20 74 69 6d 65 73 20 64 75 72 69 6e 67 20 73  t times during s
17720 74 61 74 65 6d 65 6e 74 20 70 72 6f 63 65 73 73  tatement process
17730 69 6e 67 0a 2a 2a 20 74 68 65 6e 20 69 54 61 62  ing.** then iTab
17740 6c 65 20 69 73 20 74 68 65 20 61 64 64 72 65 73  le is the addres
17750 73 20 6f 66 20 61 20 73 75 62 72 6f 75 74 69 6e  s of a subroutin
17760 65 20 74 68 61 74 20 63 6f 6d 70 75 74 65 73 20  e that computes 
17770 74 68 65 20 73 75 62 71 75 65 72 79 2e 0a 2a 2a  the subquery..**
17780 0a 2a 2a 20 49 66 20 74 68 65 20 45 78 70 72 20  .** If the Expr 
17790 69 73 20 6f 66 20 74 79 70 65 20 4f 50 5f 43 6f  is of type OP_Co
177a0 6c 75 6d 6e 2c 20 61 6e 64 20 74 68 65 20 74 61  lumn, and the ta
177b0 62 6c 65 20 69 74 20 69 73 20 73 65 6c 65 63 74  ble it is select
177c0 69 6e 67 20 66 72 6f 6d 0a 2a 2a 20 69 73 20 61  ing from.** is a
177d0 20 64 69 73 6b 20 74 61 62 6c 65 20 6f 72 20 74   disk table or t
177e0 68 65 20 22 6f 6c 64 2e 2a 22 20 70 73 65 75 64  he "old.*" pseud
177f0 6f 2d 74 61 62 6c 65 2c 20 74 68 65 6e 20 70 54  o-table, then pT
17800 61 62 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  ab points to the
17810 0a 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  .** correspondin
17820 67 20 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69  g table definiti
17830 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43 41  on..**.** ALLOCA
17840 54 49 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a  TION NOTES:.**.*
17850 2a 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 63  * Expr objects c
17860 61 6e 20 75 73 65 20 61 20 6c 6f 74 20 6f 66 20  an use a lot of 
17870 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 69 6e 20  memory space in 
17880 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e  database schema.
17890 20 20 54 6f 0a 2a 2a 20 68 65 6c 70 20 72 65 64    To.** help red
178a0 75 63 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69  uce memory requi
178b0 72 65 6d 65 6e 74 73 2c 20 73 6f 6d 65 74 69 6d  rements, sometim
178c0 65 73 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63  es an Expr objec
178d0 74 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 74 72 75  t will be.** tru
178e0 6e 63 61 74 65 64 2e 20 20 41 6e 64 20 74 6f 20  ncated.  And to 
178f0 72 65 64 75 63 65 20 74 68 65 20 6e 75 6d 62 65  reduce the numbe
17900 72 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  r of memory allo
17910 63 61 74 69 6f 6e 73 2c 20 73 6f 6d 65 74 69 6d  cations, sometim
17920 65 73 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f 72  es.** two or mor
17930 65 20 45 78 70 72 20 6f 62 6a 65 63 74 73 20 77  e Expr objects w
17940 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 69 6e  ill be stored in
17950 20 61 20 73 69 6e 67 6c 65 20 6d 65 6d 6f 72 79   a single memory
17960 20 61 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a 20   allocation,.** 
17970 74 6f 67 65 74 68 65 72 20 77 69 74 68 20 45 78  together with Ex
17980 70 72 2e 7a 54 6f 6b 65 6e 20 73 74 72 69 6e 67  pr.zToken string
17990 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  s..**.** If the 
179a0 45 50 5f 52 65 64 75 63 65 64 20 61 6e 64 20 45  EP_Reduced and E
179b0 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67  P_TokenOnly flag
179c0 73 20 61 72 65 20 73 65 74 20 77 68 65 6e 0a 2a  s are set when.*
179d0 2a 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74  * an Expr object
179e0 20 69 73 20 74 72 75 6e 63 61 74 65 64 2e 20 20   is truncated.  
179f0 57 68 65 6e 20 45 50 5f 52 65 64 75 63 65 64 20  When EP_Reduced 
17a00 69 73 20 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c  is set, then all
17a10 0a 2a 2a 20 74 68 65 20 63 68 69 6c 64 20 45 78  .** the child Ex
17a20 70 72 20 6f 62 6a 65 63 74 73 20 69 6e 20 74 68  pr objects in th
17a30 65 20 45 78 70 72 2e 70 4c 65 66 74 20 61 6e 64  e Expr.pLeft and
17a40 20 45 78 70 72 2e 70 52 69 67 68 74 20 73 75 62   Expr.pRight sub
17a50 74 72 65 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e  trees.** are con
17a60 74 61 69 6e 65 64 20 77 69 74 68 69 6e 20 74 68  tained within th
17a70 65 20 73 61 6d 65 20 6d 65 6d 6f 72 79 20 61 6c  e same memory al
17a80 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 65 2c  location.  Note,
17a90 20 68 6f 77 65 76 65 72 2c 20 74 68 61 74 0a 2a   however, that.*
17aa0 2a 20 74 68 65 20 73 75 62 74 72 65 65 73 20 69  * the subtrees i
17ab0 6e 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 6f  n Expr.x.pList o
17ac0 72 20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74  r Expr.x.pSelect
17ad0 20 61 72 65 20 61 6c 77 61 79 73 20 73 65 70 61   are always sepa
17ae0 72 61 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61  rately.** alloca
17af0 74 65 64 2c 20 72 65 67 61 72 64 6c 65 73 73 20  ted, regardless 
17b00 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  of whether or no
17b10 74 20 45 50 5f 52 65 64 75 63 65 64 20 69 73 20  t EP_Reduced is 
17b20 73 65 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45  set..*/.struct E
17b30 78 70 72 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20  xpr {.  u8 op;  
17b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
17b50 2a 20 4f 70 65 72 61 74 69 6f 6e 20 70 65 72 66  * Operation perf
17b60 6f 72 6d 65 64 20 62 79 20 74 68 69 73 20 6e 6f  ormed by this no
17b70 64 65 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66  de */.  char aff
17b80 69 6e 69 74 79 3b 20 20 20 20 20 20 20 20 20 2f  inity;         /
17b90 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 6f  * The affinity o
17ba0 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 72 20  f the column or 
17bb0 30 20 69 66 20 6e 6f 74 20 61 20 63 6f 6c 75 6d  0 if not a colum
17bc0 6e 20 2a 2f 0a 20 20 75 33 32 20 66 6c 61 67 73  n */.  u32 flags
17bd0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
17be0 20 56 61 72 69 6f 75 73 20 66 6c 61 67 73 2e 20   Various flags. 
17bf0 20 45 50 5f 2a 20 53 65 65 20 62 65 6c 6f 77 20   EP_* See below 
17c00 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  */.  union {.   
17c10 20 63 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20   char *zToken;  
17c20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e          /* Token
17c30 20 76 61 6c 75 65 2e 20 5a 65 72 6f 20 74 65 72   value. Zero ter
17c40 6d 69 6e 61 74 65 64 20 61 6e 64 20 64 65 71 75  minated and dequ
17c50 6f 74 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20  oted */.    int 
17c60 69 56 61 6c 75 65 3b 20 20 20 20 20 20 20 20 20  iValue;         
17c70 20 20 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74 69     /* Non-negati
17c80 76 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  ve integer value
17c90 20 69 66 20 45 50 5f 49 6e 74 56 61 6c 75 65 20   if EP_IntValue 
17ca0 2a 2f 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20  */.  } u;..  /* 
17cb0 49 66 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f  If the EP_TokenO
17cc0 6e 6c 79 20 66 6c 61 67 20 69 73 20 73 65 74 20  nly flag is set 
17cd0 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67  in the Expr.flag
17ce0 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a  s mask, then no.
17cf0 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c    ** space is al
17d00 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65 20  located for the 
17d10 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69  fields below thi
17d20 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65  s point. An atte
17d30 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65  mpt to.  ** acce
17d40 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73  ss them will res
17d50 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c  ult in a segfaul
17d60 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e  t or malfunction
17d70 2e 0a 20 20 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 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17db0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45 78  *********/..  Ex
17dc0 70 72 20 2a 70 4c 65 66 74 3b 20 20 20 20 20 20  pr *pLeft;      
17dd0 20 20 20 20 20 2f 2a 20 4c 65 66 74 20 73 75 62       /* Left sub
17de0 6e 6f 64 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a  node */.  Expr *
17df0 70 52 69 67 68 74 3b 20 20 20 20 20 20 20 20 20  pRight;         
17e00 20 2f 2a 20 52 69 67 68 74 20 73 75 62 6e 6f 64   /* Right subnod
17e10 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20  e */.  union {. 
17e20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4c 69     ExprList *pLi
17e30 73 74 3b 20 20 20 20 20 2f 2a 20 6f 70 20 3d 20  st;     /* op = 
17e40 49 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45  IN, EXISTS, SELE
17e50 43 54 2c 20 43 41 53 45 2c 20 46 55 4e 43 54 49  CT, CASE, FUNCTI
17e60 4f 4e 2c 20 42 45 54 57 45 45 4e 20 2a 2f 0a 20  ON, BETWEEN */. 
17e70 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65     Select *pSele
17e80 63 74 3b 20 20 20 20 20 2f 2a 20 45 50 5f 78 49  ct;     /* EP_xI
17e90 73 53 65 6c 65 63 74 20 61 6e 64 20 6f 70 20 3d  sSelect and op =
17ea0 20 49 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c   IN, EXISTS, SEL
17eb0 45 43 54 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a 20  ECT */.  } x;.. 
17ec0 20 2f 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65   /* If the EP_Re
17ed0 64 75 63 65 64 20 66 6c 61 67 20 69 73 20 73 65  duced flag is se
17ee0 74 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c  t in the Expr.fl
17ef0 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e  ags mask, then n
17f00 6f 0a 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20  o.  ** space is 
17f10 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68  allocated for th
17f20 65 20 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74  e fields below t
17f30 68 69 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74  his point. An at
17f40 74 65 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63  tempt to.  ** ac
17f50 63 65 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72  cess them will r
17f60 65 73 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61  esult in a segfa
17f70 75 6c 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69  ult or malfuncti
17f80 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  on..  **********
17f90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17fa0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17fb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17fc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69  ***********/..#i
17fd0 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50  f SQLITE_MAX_EXP
17fe0 52 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20  R_DEPTH>0.  int 
17ff0 6e 48 65 69 67 68 74 3b 20 20 20 20 20 20 20 20  nHeight;        
18000 20 20 20 2f 2a 20 48 65 69 67 68 74 20 6f 66 20     /* Height of 
18010 74 68 65 20 74 72 65 65 20 68 65 61 64 65 64 20  the tree headed 
18020 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a  by this node */.
18030 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 69 54 61  #endif.  int iTa
18040 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ble;            
18050 2f 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 75  /* TK_COLUMN: cu
18060 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74  rsor number of t
18070 61 62 6c 65 20 68 6f 6c 64 69 6e 67 20 63 6f 6c  able holding col
18080 75 6d 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20  umn.            
18090 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
180a0 54 4b 5f 52 45 47 49 53 54 45 52 3a 20 72 65 67  TK_REGISTER: reg
180b0 69 73 74 65 72 20 6e 75 6d 62 65 72 0a 20 20 20  ister number.   
180c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180d0 20 20 20 20 20 20 2a 2a 20 54 4b 5f 54 52 49 47        ** TK_TRIG
180e0 47 45 52 3a 20 31 20 2d 3e 20 6e 65 77 2c 20 30  GER: 1 -> new, 0
180f0 20 2d 3e 20 6f 6c 64 0a 20 20 20 20 20 20 20 20   -> old.        
18100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18110 20 2a 2a 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 3a   ** EP_Unlikely:
18120 20 20 31 33 34 32 31 37 37 32 38 20 74 69 6d 65    134217728 time
18130 73 20 6c 69 6b 65 6c 69 68 6f 6f 64 0a 20 20 20  s likelihood.   
18140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18150 20 20 20 20 20 20 2a 2a 20 54 4b 5f 53 45 4c 45        ** TK_SELE
18160 43 54 3a 20 31 73 74 20 72 65 67 69 73 74 65 72  CT: 1st register
18170 20 6f 66 20 72 65 73 75 6c 74 20 76 65 63 74 6f   of result vecto
18180 72 20 2a 2f 0a 20 20 79 6e 56 61 72 20 69 43 6f  r */.  ynVar iCo
18190 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a  lumn;         /*
181a0 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75   TK_COLUMN: colu
181b0 6d 6e 20 69 6e 64 65 78 2e 20 20 2d 31 20 66 6f  mn index.  -1 fo
181c0 72 20 72 6f 77 69 64 2e 0a 20 20 20 20 20 20 20  r rowid..       
181d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
181e0 20 20 2a 2a 20 54 4b 5f 56 41 52 49 41 42 4c 45    ** TK_VARIABLE
181f0 3a 20 76 61 72 69 61 62 6c 65 20 6e 75 6d 62 65  : variable numbe
18200 72 20 28 61 6c 77 61 79 73 20 3e 3d 20 31 29 2e  r (always >= 1).
18210 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18220 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
18230 53 45 4c 45 43 54 5f 43 4f 4c 55 4d 4e 3a 20 63  SELECT_COLUMN: c
18240 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 72 65 73  olumn of the res
18250 75 6c 74 20 76 65 63 74 6f 72 20 2a 2f 0a 20 20  ult vector */.  
18260 69 31 36 20 69 41 67 67 3b 20 20 20 20 20 20 20  i16 iAgg;       
18270 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20         /* Which 
18280 65 6e 74 72 79 20 69 6e 20 70 41 67 67 49 6e 66  entry in pAggInf
18290 6f 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e 61  o->aCol[] or ->a
182a0 46 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69 31 36 20  Func[] */.  i16 
182b0 69 52 69 67 68 74 4a 6f 69 6e 54 61 62 6c 65 3b  iRightJoinTable;
182c0 20 20 20 2f 2a 20 49 66 20 45 50 5f 46 72 6f 6d     /* If EP_From
182d0 4a 6f 69 6e 2c 20 74 68 65 20 72 69 67 68 74 20  Join, the right 
182e0 74 61 62 6c 65 20 6f 66 20 74 68 65 20 6a 6f 69  table of the joi
182f0 6e 20 2a 2f 0a 20 20 75 38 20 6f 70 32 3b 20 20  n */.  u8 op2;  
18300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
18310 20 54 4b 5f 52 45 47 49 53 54 45 52 3a 20 6f 72   TK_REGISTER: or
18320 69 67 69 6e 61 6c 20 76 61 6c 75 65 20 6f 66 20  iginal value of 
18330 45 78 70 72 2e 6f 70 0a 20 20 20 20 20 20 20 20  Expr.op.        
18340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18350 20 2a 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 74   ** TK_COLUMN: t
18360 68 65 20 76 61 6c 75 65 20 6f 66 20 70 35 20 66  he value of p5 f
18370 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e 0a 20 20 20  or OP_Column.   
18380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18390 20 20 20 20 20 20 2a 2a 20 54 4b 5f 41 47 47 5f        ** TK_AGG_
183a0 46 55 4e 43 54 49 4f 4e 3a 20 6e 65 73 74 69 6e  FUNCTION: nestin
183b0 67 20 64 65 70 74 68 20 2a 2f 0a 20 20 41 67 67  g depth */.  Agg
183c0 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20  Info *pAggInfo; 
183d0 20 20 20 20 2f 2a 20 55 73 65 64 20 62 79 20 54      /* Used by T
183e0 4b 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e 64  K_AGG_COLUMN and
183f0 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e   TK_AGG_FUNCTION
18400 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61   */.  Table *pTa
18410 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  b;           /* 
18420 54 61 62 6c 65 20 66 6f 72 20 54 4b 5f 43 4f 4c  Table for TK_COL
18430 55 4d 4e 20 65 78 70 72 65 73 73 69 6f 6e 73 2e  UMN expressions.
18440 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
18450 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20  e following are 
18460 74 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20  the meanings of 
18470 62 69 74 73 20 69 6e 20 74 68 65 20 45 78 70 72  bits in the Expr
18480 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f  .flags field..*/
18490 0a 23 64 65 66 69 6e 65 20 45 50 5f 46 72 6f 6d  .#define EP_From
184a0 4a 6f 69 6e 20 20 30 78 30 30 30 30 30 31 20 2f  Join  0x000001 /
184b0 2a 20 4f 72 69 67 69 6e 61 74 65 73 20 69 6e 20  * Originates in 
184c0 4f 4e 2f 55 53 49 4e 47 20 63 6c 61 75 73 65 20  ON/USING clause 
184d0 6f 66 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f  of outer join */
184e0 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 67 67 20  .#define EP_Agg 
184f0 20 20 20 20 20 20 30 78 30 30 30 30 30 32 20 2f        0x000002 /
18500 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f  * Contains one o
18510 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65  r more aggregate
18520 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20   functions */.  
18530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18540 2f 2a 20 30 78 30 30 30 30 30 34 20 2f 2f 20 61  /* 0x000004 // a
18550 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 75 73 65  vailable for use
18560 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
18570 20 20 20 20 20 20 2f 2a 20 30 78 30 30 30 30 30        /* 0x00000
18580 38 20 2f 2f 20 61 76 61 69 6c 61 62 6c 65 20 66  8 // available f
18590 6f 72 20 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e  or use */.#defin
185a0 65 20 45 50 5f 44 69 73 74 69 6e 63 74 20 20 30  e EP_Distinct  0
185b0 78 30 30 30 30 31 30 20 2f 2a 20 41 67 67 72 65  x000010 /* Aggre
185c0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 77 69  gate function wi
185d0 74 68 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77  th DISTINCT keyw
185e0 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ord */.#define E
185f0 50 5f 56 61 72 53 65 6c 65 63 74 20 30 78 30 30  P_VarSelect 0x00
18600 30 30 32 30 20 2f 2a 20 70 53 65 6c 65 63 74 20  0020 /* pSelect 
18610 69 73 20 63 6f 72 72 65 6c 61 74 65 64 2c 20 6e  is correlated, n
18620 6f 74 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23  ot constant */.#
18630 64 65 66 69 6e 65 20 45 50 5f 44 62 6c 51 75 6f  define EP_DblQuo
18640 74 65 64 20 30 78 30 30 30 30 34 30 20 2f 2a 20  ted 0x000040 /* 
18650 74 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f 72 69 67  token.z was orig
18660 69 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e 22 20  inally in "..." 
18670 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e  */.#define EP_In
18680 66 69 78 46 75 6e 63 20 30 78 30 30 30 30 38 30  fixFunc 0x000080
18690 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 6e 20   /* True for an 
186a0 69 6e 66 69 78 20 66 75 6e 63 74 69 6f 6e 3a 20  infix function: 
186b0 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20 65 74 63 20  LIKE, GLOB, etc 
186c0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 6f  */.#define EP_Co
186d0 6c 6c 61 74 65 20 20 20 30 78 30 30 30 31 30 30  llate   0x000100
186e0 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61 69 6e   /* Tree contain
186f0 73 20 61 20 54 4b 5f 43 4f 4c 4c 41 54 45 20 6f  s a TK_COLLATE o
18700 70 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69  perator */.#defi
18710 6e 65 20 45 50 5f 47 65 6e 65 72 69 63 20 20 20  ne EP_Generic   
18720 30 78 30 30 30 32 30 30 20 2f 2a 20 49 67 6e 6f  0x000200 /* Igno
18730 72 65 20 43 4f 4c 4c 41 54 45 20 6f 72 20 61 66  re COLLATE or af
18740 66 69 6e 69 74 79 20 6f 6e 20 74 68 69 73 20 74  finity on this t
18750 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ree */.#define E
18760 50 5f 49 6e 74 56 61 6c 75 65 20 20 30 78 30 30  P_IntValue  0x00
18770 30 34 30 30 20 2f 2a 20 49 6e 74 65 67 65 72 20  0400 /* Integer 
18780 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64 20  value contained 
18790 69 6e 20 75 2e 69 56 61 6c 75 65 20 2a 2f 0a 23  in u.iValue */.#
187a0 64 65 66 69 6e 65 20 45 50 5f 78 49 73 53 65 6c  define EP_xIsSel
187b0 65 63 74 20 30 78 30 30 30 38 30 30 20 2f 2a 20  ect 0x000800 /* 
187c0 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c  x.pSelect is val
187d0 69 64 20 28 6f 74 68 65 72 77 69 73 65 20 78 2e  id (otherwise x.
187e0 70 4c 69 73 74 20 69 73 29 20 2a 2f 0a 23 64 65  pList is) */.#de
187f0 66 69 6e 65 20 45 50 5f 53 6b 69 70 20 20 20 20  fine EP_Skip    
18800 20 20 30 78 30 30 31 30 30 30 20 2f 2a 20 43 4f    0x001000 /* CO
18810 4c 4c 41 54 45 2c 20 41 53 2c 20 6f 72 20 55 4e  LLATE, AS, or UN
18820 4c 49 4b 45 4c 59 20 2a 2f 0a 23 64 65 66 69 6e  LIKELY */.#defin
18830 65 20 45 50 5f 52 65 64 75 63 65 64 20 20 20 30  e EP_Reduced   0
18840 78 30 30 32 30 30 30 20 2f 2a 20 45 78 70 72 20  x002000 /* Expr 
18850 73 74 72 75 63 74 20 45 58 50 52 5f 52 45 44 55  struct EXPR_REDU
18860 43 45 44 53 49 5a 45 20 62 79 74 65 73 20 6f 6e  CEDSIZE bytes on
18870 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ly */.#define EP
18880 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 30 78 30 30 34  _TokenOnly 0x004
18890 30 30 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75  000 /* Expr stru
188a0 63 74 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c  ct EXPR_TOKENONL
188b0 59 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79  YSIZE bytes only
188c0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53   */.#define EP_S
188d0 74 61 74 69 63 20 20 20 20 30 78 30 30 38 30 30  tatic    0x00800
188e0 30 20 2f 2a 20 48 65 6c 64 20 69 6e 20 6d 65 6d  0 /* Held in mem
188f0 6f 72 79 20 6e 6f 74 20 6f 62 74 61 69 6e 65 64  ory not obtained
18900 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a   from malloc() *
18910 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4d 65 6d  /.#define EP_Mem
18920 54 6f 6b 65 6e 20 20 30 78 30 31 30 30 30 30 20  Token  0x010000 
18930 2f 2a 20 4e 65 65 64 20 74 6f 20 73 71 6c 69 74  /* Need to sqlit
18940 65 33 44 62 46 72 65 65 28 29 20 45 78 70 72 2e  e3DbFree() Expr.
18950 7a 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  zToken */.#defin
18960 65 20 45 50 5f 4e 6f 52 65 64 75 63 65 20 20 30  e EP_NoReduce  0
18970 78 30 32 30 30 30 30 20 2f 2a 20 43 61 6e 6e 6f  x020000 /* Canno
18980 74 20 45 58 50 52 44 55 50 5f 52 45 44 55 43 45  t EXPRDUP_REDUCE
18990 20 74 68 69 73 20 45 78 70 72 20 2a 2f 0a 23 64   this Expr */.#d
189a0 65 66 69 6e 65 20 45 50 5f 55 6e 6c 69 6b 65 6c  efine EP_Unlikel
189b0 79 20 20 30 78 30 34 30 30 30 30 20 2f 2a 20 75  y  0x040000 /* u
189c0 6e 6c 69 6b 65 6c 79 28 29 20 6f 72 20 6c 69 6b  nlikely() or lik
189d0 65 6c 69 68 6f 6f 64 28 29 20 66 75 6e 63 74 69  elihood() functi
189e0 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  on */.#define EP
189f0 5f 43 6f 6e 73 74 46 75 6e 63 20 30 78 30 38 30  _ConstFunc 0x080
18a00 30 30 30 20 2f 2a 20 41 20 53 51 4c 49 54 45 5f  000 /* A SQLITE_
18a10 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 6f 72  FUNC_CONSTANT or
18a20 20 5f 53 4c 4f 43 48 4e 47 20 66 75 6e 63 74 69   _SLOCHNG functi
18a30 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  on */.#define EP
18a40 5f 43 61 6e 42 65 4e 75 6c 6c 20 30 78 31 30 30  _CanBeNull 0x100
18a50 30 30 30 20 2f 2a 20 43 61 6e 20 62 65 20 6e 75  000 /* Can be nu
18a60 6c 6c 20 64 65 73 70 69 74 65 20 4e 4f 54 20 4e  ll despite NOT N
18a70 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a  ULL constraint *
18a80 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 75 62  /.#define EP_Sub
18a90 71 75 65 72 79 20 20 30 78 32 30 30 30 30 30 20  query  0x200000 
18aa0 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61 69 6e 73  /* Tree contains
18ab0 20 61 20 54 4b 5f 53 45 4c 45 43 54 20 6f 70 65   a TK_SELECT ope
18ac0 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65  rator */.#define
18ad0 20 45 50 5f 41 6c 69 61 73 20 20 20 20 20 30 78   EP_Alias     0x
18ae0 34 30 30 30 30 30 20 2f 2a 20 49 73 20 61 6e 20  400000 /* Is an 
18af0 61 6c 69 61 73 20 66 6f 72 20 61 20 72 65 73 75  alias for a resu
18b00 6c 74 20 73 65 74 20 63 6f 6c 75 6d 6e 20 2a 2f  lt set column */
18b10 0a 23 64 65 66 69 6e 65 20 45 50 5f 4c 65 61 66  .#define EP_Leaf
18b20 20 20 20 20 20 20 30 78 38 30 30 30 30 30 20 2f        0x800000 /
18b30 2a 20 45 78 70 72 2e 70 4c 65 66 74 2c 20 2e 70  * Expr.pLeft, .p
18b40 52 69 67 68 74 2c 20 2e 75 2e 70 53 65 6c 65 63  Right, .u.pSelec
18b50 74 20 61 6c 6c 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f  t all NULL */../
18b60 2a 0a 2a 2a 20 43 6f 6d 62 69 6e 61 74 69 6f 6e  *.** Combination
18b70 73 20 6f 66 20 74 77 6f 20 6f 72 20 6d 6f 72 65  s of two or more
18b80 20 45 50 5f 2a 20 66 6c 61 67 73 0a 2a 2f 0a 23   EP_* flags.*/.#
18b90 64 65 66 69 6e 65 20 45 50 5f 50 72 6f 70 61 67  define EP_Propag
18ba0 61 74 65 20 28 45 50 5f 43 6f 6c 6c 61 74 65 7c  ate (EP_Collate|
18bb0 45 50 5f 53 75 62 71 75 65 72 79 29 20 2f 2a 20  EP_Subquery) /* 
18bc0 50 72 6f 70 61 67 61 74 65 20 74 68 65 73 65 20  Propagate these 
18bd0 62 69 74 73 20 75 70 20 74 72 65 65 20 2a 2f 0a  bits up tree */.
18be0 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63  ./*.** These mac
18bf0 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64 20  ros can be used 
18c00 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72  to test, set, or
18c10 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74   clear bits in t
18c20 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73  he.** Expr.flags
18c30 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69   field..*/.#defi
18c40 6e 65 20 45 78 70 72 48 61 73 50 72 6f 70 65 72  ne ExprHasProper
18c50 74 79 28 45 2c 50 29 20 20 20 20 20 28 28 28 45  ty(E,P)     (((E
18c60 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 21 3d 30  )->flags&(P))!=0
18c70 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48 61  ).#define ExprHa
18c80 73 41 6c 6c 50 72 6f 70 65 72 74 79 28 45 2c 50  sAllProperty(E,P
18c90 29 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26  )  (((E)->flags&
18ca0 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69  (P))==(P)).#defi
18cb0 6e 65 20 45 78 70 72 53 65 74 50 72 6f 70 65 72  ne ExprSetProper
18cc0 74 79 28 45 2c 50 29 20 20 20 20 20 28 45 29 2d  ty(E,P)     (E)-
18cd0 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66  >flags|=(P).#def
18ce0 69 6e 65 20 45 78 70 72 43 6c 65 61 72 50 72 6f  ine ExprClearPro
18cf0 70 65 72 74 79 28 45 2c 50 29 20 20 20 28 45 29  perty(E,P)   (E)
18d00 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f  ->flags&=~(P)../
18d10 2a 20 54 68 65 20 45 78 70 72 53 65 74 56 56 41  * The ExprSetVVA
18d20 50 72 6f 70 65 72 74 79 28 29 20 6d 61 63 72 6f  Property() macro
18d30 20 69 73 20 75 73 65 64 20 66 6f 72 20 56 65 72   is used for Ver
18d40 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64  ification, Valid
18d50 61 74 69 6f 6e 2c 0a 2a 2a 20 61 6e 64 20 41 63  ation,.** and Ac
18d60 63 72 65 64 69 74 61 74 69 6f 6e 20 6f 6e 6c 79  creditation only
18d70 2e 20 20 49 74 20 77 6f 72 6b 73 20 6c 69 6b 65  .  It works like
18d80 20 45 78 70 72 53 65 74 50 72 6f 70 65 72 74 79   ExprSetProperty
18d90 28 29 20 64 75 72 69 6e 67 20 56 56 41 0a 2a 2a  () during VVA.**
18da0 20 70 72 6f 63 65 73 73 65 73 20 62 75 74 20 69   processes but i
18db0 73 20 61 20 6e 6f 2d 6f 70 20 66 6f 72 20 64 65  s a no-op for de
18dc0 6c 69 76 65 72 79 2e 0a 2a 2f 0a 23 69 66 64 65  livery..*/.#ifde
18dd0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23  f SQLITE_DEBUG.#
18de0 20 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 56   define ExprSetV
18df0 56 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20  VAProperty(E,P) 
18e00 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29   (E)->flags|=(P)
18e10 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
18e20 45 78 70 72 53 65 74 56 56 41 50 72 6f 70 65 72  ExprSetVVAProper
18e30 74 79 28 45 2c 50 29 0a 23 65 6e 64 69 66 0a 0a  ty(E,P).#endif..
18e40 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20  /*.** Macros to 
18e50 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 75  determine the nu
18e60 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 72 65  mber of bytes re
18e70 71 75 69 72 65 64 20 62 79 20 61 20 6e 6f 72 6d  quired by a norm
18e80 61 6c 20 45 78 70 72 0a 2a 2a 20 73 74 72 75 63  al Expr.** struc
18e90 74 2c 20 61 6e 20 45 78 70 72 20 73 74 72 75 63  t, an Expr struc
18ea0 74 20 77 69 74 68 20 74 68 65 20 45 50 5f 52 65  t with the EP_Re
18eb0 64 75 63 65 64 20 66 6c 61 67 20 73 65 74 20 69  duced flag set i
18ec0 6e 20 45 78 70 72 2e 66 6c 61 67 73 0a 2a 2a 20  n Expr.flags.** 
18ed0 61 6e 64 20 61 6e 20 45 78 70 72 20 73 74 72 75  and an Expr stru
18ee0 63 74 20 77 69 74 68 20 74 68 65 20 45 50 5f 54  ct with the EP_T
18ef0 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 73 65  okenOnly flag se
18f00 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58  t..*/.#define EX
18f10 50 52 5f 46 55 4c 4c 53 49 5a 45 20 20 20 20 20  PR_FULLSIZE     
18f20 20 20 20 20 20 20 73 69 7a 65 6f 66 28 45 78 70        sizeof(Exp
18f30 72 29 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  r)           /* 
18f40 46 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23 64 65  Full size */.#de
18f50 66 69 6e 65 20 45 58 50 52 5f 52 45 44 55 43 45  fine EXPR_REDUCE
18f60 44 53 49 5a 45 20 20 20 20 20 20 20 20 6f 66 66  DSIZE        off
18f70 73 65 74 6f 66 28 45 78 70 72 2c 69 54 61 62 6c  setof(Expr,iTabl
18f80 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65  e)  /* Common fe
18f90 61 74 75 72 65 73 20 2a 2f 0a 23 64 65 66 69 6e  atures */.#defin
18fa0 65 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59  e EXPR_TOKENONLY
18fb0 53 49 5a 45 20 20 20 20 20 20 6f 66 66 73 65 74  SIZE      offset
18fc0 6f 66 28 45 78 70 72 2c 70 4c 65 66 74 29 20 20  of(Expr,pLeft)  
18fd0 20 2f 2a 20 46 65 77 65 72 20 66 65 61 74 75 72   /* Fewer featur
18fe0 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61  es */../*.** Fla
18ff0 67 73 20 70 61 73 73 65 64 20 74 6f 20 74 68 65  gs passed to the
19000 20 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28   sqlite3ExprDup(
19010 29 20 66 75 6e 63 74 69 6f 6e 2e 20 53 65 65 20  ) function. See 
19020 74 68 65 20 68 65 61 64 65 72 20 63 6f 6d 6d 65  the header comme
19030 6e 74 0a 2a 2a 20 61 62 6f 76 65 20 73 71 6c 69  nt.** above sqli
19040 74 65 33 45 78 70 72 44 75 70 28 29 20 66 6f 72  te3ExprDup() for
19050 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65   details..*/.#de
19060 66 69 6e 65 20 45 58 50 52 44 55 50 5f 52 45 44  fine EXPRDUP_RED
19070 55 43 45 20 20 20 20 20 20 20 20 20 30 78 30 30  UCE         0x00
19080 30 31 20 20 2f 2a 20 55 73 65 64 20 72 65 64 75  01  /* Used redu
19090 63 65 64 2d 73 69 7a 65 20 45 78 70 72 20 6e 6f  ced-size Expr no
190a0 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20  des */../*.** A 
190b0 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69  list of expressi
190c0 6f 6e 73 2e 20 20 45 61 63 68 20 65 78 70 72 65  ons.  Each expre
190d0 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74 69 6f 6e  ssion may option
190e0 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a 2a 20 6e  ally have a.** n
190f0 61 6d 65 2e 20 20 41 6e 20 65 78 70 72 2f 6e 61  ame.  An expr/na
19100 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 63  me combination c
19110 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20 73 65  an be used in se
19120 76 65 72 61 6c 20 77 61 79 73 2c 20 73 75 63 68  veral ways, such
19130 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69 73 74 20  .** as the list 
19140 6f 66 20 22 65 78 70 72 20 41 53 20 49 44 22 20  of "expr AS ID" 
19150 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e 67  fields following
19160 20 61 20 22 53 45 4c 45 43 54 22 20 6f 72 20 69   a "SELECT" or i
19170 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74 20 6f 66  n the.** list of
19180 20 22 49 44 20 3d 20 65 78 70 72 22 20 69 74 65   "ID = expr" ite
19190 6d 73 20 69 6e 20 61 6e 20 55 50 44 41 54 45 2e  ms in an UPDATE.
191a0 20 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72    A list of expr
191b0 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61  essions can.** a
191c0 6c 73 6f 20 62 65 20 75 73 65 64 20 61 73 20 74  lso be used as t
191d0 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 61  he argument to a
191e0 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e 20 77 68   function, in wh
191f0 69 63 68 20 63 61 73 65 20 74 68 65 20 61 2e 7a  ich case the a.z
19200 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64 20 69 73  Name.** field is
19210 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a   not used..**.**
19220 20 42 79 20 64 65 66 61 75 6c 74 20 74 68 65 20   By default the 
19230 45 78 70 72 2e 7a 53 70 61 6e 20 66 69 65 6c 64  Expr.zSpan field
19240 20 68 6f 6c 64 73 20 61 20 68 75 6d 61 6e 2d 72   holds a human-r
19250 65 61 64 61 62 6c 65 20 64 65 73 63 72 69 70 74  eadable descript
19260 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 65 78  ion of.** the ex
19270 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73  pression that is
19280 20 75 73 65 64 20 69 6e 20 74 68 65 20 67 65 6e   used in the gen
19290 65 72 61 74 69 6f 6e 20 6f 66 20 65 72 72 6f 72  eration of error
192a0 20 6d 65 73 73 61 67 65 73 20 61 6e 64 0a 2a 2a   messages and.**
192b0 20 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e 20   column labels. 
192c0 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 45   In this case, E
192d0 78 70 72 2e 7a 53 70 61 6e 20 69 73 20 74 79 70  xpr.zSpan is typ
192e0 69 63 61 6c 6c 79 20 74 68 65 20 74 65 78 74 20  ically the text 
192f0 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65  of a.** column e
19300 78 70 72 65 73 73 69 6f 6e 20 61 73 20 69 74 20  xpression as it 
19310 65 78 69 73 74 73 20 69 6e 20 61 20 53 45 4c 45  exists in a SELE
19320 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 48  CT statement.  H
19330 6f 77 65 76 65 72 2c 20 69 66 0a 2a 2a 20 74 68  owever, if.** th
19340 65 20 62 53 70 61 6e 49 73 54 61 62 20 66 6c 61  e bSpanIsTab fla
19350 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 7a  g is set, then z
19360 53 70 61 6e 20 69 73 20 6f 76 65 72 6c 6f 61 64  Span is overload
19370 65 64 20 74 6f 20 6d 65 61 6e 20 74 68 65 20 6e  ed to mean the n
19380 61 6d 65 0a 2a 2a 20 6f 66 20 74 68 65 20 72 65  ame.** of the re
19390 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 74  sult column in t
193a0 68 65 20 66 6f 72 6d 3a 20 44 41 54 41 42 41 53  he form: DATABAS
193b0 45 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20  E.TABLE.COLUMN. 
193c0 20 54 68 69 73 20 6c 61 74 65 72 0a 2a 2a 20 66   This later.** f
193d0 6f 72 6d 20 69 73 20 75 73 65 64 20 66 6f 72 20  orm is used for 
193e0 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20  name resolution 
193f0 77 69 74 68 20 6e 65 73 74 65 64 20 46 52 4f 4d  with nested FROM
19400 20 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73 74 72   clauses..*/.str
19410 75 63 74 20 45 78 70 72 4c 69 73 74 20 7b 0a 20  uct ExprList {. 
19420 20 69 6e 74 20 6e 45 78 70 72 3b 20 20 20 20 20   int nExpr;     
19430 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
19440 72 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  r of expressions
19450 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   on the list */.
19460 20 20 69 6e 74 20 6e 41 6c 6c 6f 63 3b 20 20 20    int nAlloc;   
19470 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
19480 65 72 20 6f 66 20 61 5b 5d 20 73 6c 6f 74 73 20  er of a[] slots 
19490 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 73  allocated */.  s
194a0 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 5f 69  truct ExprList_i
194b0 74 65 6d 20 7b 20 2f 2a 20 46 6f 72 20 65 61 63  tem { /* For eac
194c0 68 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20  h expression in 
194d0 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 20 20  the list */.    
194e0 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20  Expr *pExpr;    
194f0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70          /* The p
19500 61 72 73 65 20 74 72 65 65 20 66 6f 72 20 74 68  arse tree for th
19510 69 73 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  is expression */
19520 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65  .    char *zName
19530 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
19540 54 6f 6b 65 6e 20 61 73 73 6f 63 69 61 74 65 64  Token associated
19550 20 77 69 74 68 20 74 68 69 73 20 65 78 70 72 65   with this expre
19560 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61  ssion */.    cha
19570 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20 20  r *zSpan;       
19580 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c       /* Original
19590 20 74 65 78 74 20 6f 66 20 74 68 65 20 65 78 70   text of the exp
195a0 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 75  ression */.    u
195b0 38 20 73 6f 72 74 4f 72 64 65 72 3b 20 20 20 20  8 sortOrder;    
195c0 20 20 20 20 20 20 20 2f 2a 20 31 20 66 6f 72 20         /* 1 for 
195d0 44 45 53 43 20 6f 72 20 30 20 66 6f 72 20 41 53  DESC or 0 for AS
195e0 43 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  C */.    unsigne
195f0 64 20 64 6f 6e 65 20 3a 31 3b 20 20 20 20 20 20  d done :1;      
19600 20 2f 2a 20 41 20 66 6c 61 67 20 74 6f 20 69 6e   /* A flag to in
19610 64 69 63 61 74 65 20 77 68 65 6e 20 70 72 6f 63  dicate when proc
19620 65 73 73 69 6e 67 20 69 73 20 66 69 6e 69 73 68  essing is finish
19630 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e  ed */.    unsign
19640 65 64 20 62 53 70 61 6e 49 73 54 61 62 20 3a 31  ed bSpanIsTab :1
19650 3b 20 2f 2a 20 7a 53 70 61 6e 20 68 6f 6c 64 73  ; /* zSpan holds
19660 20 44 42 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e   DB.TABLE.COLUMN
19670 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
19680 20 72 65 75 73 61 62 6c 65 20 3a 31 3b 20 20 20   reusable :1;   
19690 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72  /* Constant expr
196a0 65 73 73 69 6f 6e 20 69 73 20 72 65 75 73 61 62  ession is reusab
196b0 6c 65 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20  le */.    union 
196c0 7b 0a 20 20 20 20 20 20 73 74 72 75 63 74 20 7b  {.      struct {
196d0 0a 20 20 20 20 20 20 20 20 75 31 36 20 69 4f 72  .        u16 iOr
196e0 64 65 72 42 79 43 6f 6c 3b 20 20 20 20 20 20 2f  derByCol;      /
196f0 2a 20 46 6f 72 20 4f 52 44 45 52 20 42 59 2c 20  * For ORDER BY, 
19700 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e  column number in
19710 20 72 65 73 75 6c 74 20 73 65 74 20 2a 2f 0a 20   result set */. 
19720 20 20 20 20 20 20 20 75 31 36 20 69 41 6c 69 61         u16 iAlia
19730 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  s;           /* 
19740 49 6e 64 65 78 20 69 6e 74 6f 20 50 61 72 73 65  Index into Parse
19750 2e 61 41 6c 69 61 73 5b 5d 20 66 6f 72 20 7a 4e  .aAlias[] for zN
19760 61 6d 65 20 2a 2f 0a 20 20 20 20 20 20 7d 20 78  ame */.      } x
19770 3b 0a 20 20 20 20 20 20 69 6e 74 20 69 43 6f 6e  ;.      int iCon
19780 73 74 45 78 70 72 52 65 67 3b 20 20 20 20 20 20  stExprReg;      
19790 2f 2a 20 52 65 67 69 73 74 65 72 20 69 6e 20 77  /* Register in w
197a0 68 69 63 68 20 45 78 70 72 20 76 61 6c 75 65 20  hich Expr value 
197b0 69 73 20 63 61 63 68 65 64 20 2a 2f 0a 20 20 20  is cached */.   
197c0 20 7d 20 75 3b 0a 20 20 7d 20 61 5b 31 5d 3b 20   } u;.  } a[1]; 
197d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197e0 20 2f 2a 20 4f 6e 65 20 73 6c 6f 74 20 66 6f 72   /* One slot for
197f0 20 65 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e   each expression
19800 20 69 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   in the list */.
19810 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
19820 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
19830 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20  ructure is used 
19840 62 79 20 74 68 65 20 70 61 72 73 65 72 20 74 6f  by the parser to
19850 20 72 65 63 6f 72 64 20 62 6f 74 68 0a 2a 2a 20   record both.** 
19860 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20 66  the parse tree f
19870 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  or an expression
19880 20 61 6e 64 20 74 68 65 20 73 70 61 6e 20 6f 66   and the span of
19890 20 69 6e 70 75 74 20 74 65 78 74 20 66 6f 72 20   input text for 
198a0 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e  an.** expression
198b0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72  ..*/.struct Expr
198c0 53 70 61 6e 20 7b 0a 20 20 45 78 70 72 20 2a 70  Span {.  Expr *p
198d0 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 2f  Expr;          /
198e0 2a 20 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e  * The expression
198f0 20 70 61 72 73 65 20 74 72 65 65 20 2a 2f 0a 20   parse tree */. 
19900 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74   const char *zSt
19910 61 72 74 3b 20 20 20 2f 2a 20 46 69 72 73 74 20  art;   /* First 
19920 63 68 61 72 61 63 74 65 72 20 6f 66 20 69 6e 70  character of inp
19930 75 74 20 74 65 78 74 20 2a 2f 0a 20 20 63 6f 6e  ut text */.  con
19940 73 74 20 63 68 61 72 20 2a 7a 45 6e 64 3b 20 20  st char *zEnd;  
19950 20 20 20 2f 2a 20 4f 6e 65 20 63 68 61 72 61 63     /* One charac
19960 74 65 72 20 70 61 73 74 20 74 68 65 20 65 6e 64  ter past the end
19970 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a   of input text *
19980 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  /.};../*.** An i
19990 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
199a0 73 74 72 75 63 74 75 72 65 20 63 61 6e 20 68 6f  structure can ho
199b0 6c 64 20 61 20 73 69 6d 70 6c 65 20 6c 69 73 74  ld a simple list
199c0 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73 2c   of identifiers,
199d0 0a 2a 2a 20 73 75 63 68 20 61 73 20 74 68 65 20  .** such as the 
199e0 6c 69 73 74 20 22 61 2c 62 2c 63 22 20 69 6e 20  list "a,b,c" in 
199f0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
19a00 61 74 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20  atements:.**.** 
19a10 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
19a20 20 74 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53   t(a,b,c) VALUES
19a30 20 2e 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20 43 52   ...;.**      CR
19a40 45 41 54 45 20 49 4e 44 45 58 20 69 64 78 20 4f  EATE INDEX idx O
19a50 4e 20 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20  N t(a,b,c);.**  
19a60 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47      CREATE TRIGG
19a70 45 52 20 74 72 69 67 20 42 45 46 4f 52 45 20 55  ER trig BEFORE U
19a80 50 44 41 54 45 20 4f 4e 20 74 28 61 2c 62 2c 63  PDATE ON t(a,b,c
19a90 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65  ) ...;.**.** The
19aa0 20 49 64 4c 69 73 74 2e 61 2e 69 64 78 20 66 69   IdList.a.idx fi
19ab0 65 6c 64 20 69 73 20 75 73 65 64 20 77 68 65 6e  eld is used when
19ac0 20 74 68 65 20 49 64 4c 69 73 74 20 72 65 70 72   the IdList repr
19ad0 65 73 65 6e 74 73 20 74 68 65 20 6c 69 73 74 20  esents the list 
19ae0 6f 66 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d  of.** column nam
19af0 65 73 20 61 66 74 65 72 20 61 20 74 61 62 6c 65  es after a table
19b00 20 6e 61 6d 65 20 69 6e 20 61 6e 20 49 4e 53 45   name in an INSE
19b10 52 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49  RT statement.  I
19b20 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a  n the statement.
19b30 2a 2a 0a 2a 2a 20 20 20 20 20 49 4e 53 45 52 54  **.**     INSERT
19b40 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 2e   INTO t(a,b,c) .
19b50 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61 22 20  ...**.** If "a" 
19b60 69 73 20 74 68 65 20 6b 2d 74 68 20 63 6f 6c 75  is the k-th colu
19b70 6d 6e 20 6f 66 20 74 61 62 6c 65 20 22 74 22 2c  mn of table "t",
19b80 20 74 68 65 6e 20 49 64 4c 69 73 74 2e 61 5b 30   then IdList.a[0
19b90 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72  ].idx==k..*/.str
19ba0 75 63 74 20 49 64 4c 69 73 74 20 7b 0a 20 20 73  uct IdList {.  s
19bb0 74 72 75 63 74 20 49 64 4c 69 73 74 5f 69 74 65  truct IdList_ite
19bc0 6d 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e  m {.    char *zN
19bd0 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d  ame;      /* Nam
19be0 65 20 6f 66 20 74 68 65 20 69 64 65 6e 74 69 66  e of the identif
19bf0 69 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ier */.    int i
19c00 64 78 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  dx;          /* 
19c10 49 6e 64 65 78 20 69 6e 20 73 6f 6d 65 20 54 61  Index in some Ta
19c20 62 6c 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61 20  ble.aCol[] of a 
19c30 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61  column named zNa
19c40 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20  me */.  } *a;.  
19c50 69 6e 74 20 6e 49 64 3b 20 20 20 20 20 20 20 20  int nId;        
19c60 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 69 64   /* Number of id
19c70 65 6e 74 69 66 69 65 72 73 20 6f 6e 20 74 68 65  entifiers on the
19c80 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   list */.};../*.
19c90 2a 2a 20 54 68 65 20 62 69 74 6d 61 73 6b 20 64  ** The bitmask d
19ca0 61 74 61 74 79 70 65 20 64 65 66 69 6e 65 64 20  atatype defined 
19cb0 62 65 6c 6f 77 20 69 73 20 75 73 65 64 20 66 6f  below is used fo
19cc0 72 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69  r various optimi
19cd0 7a 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43  zations..**.** C
19ce0 68 61 6e 67 69 6e 67 20 74 68 69 73 20 66 72 6f  hanging this fro
19cf0 6d 20 61 20 36 34 2d 62 69 74 20 74 6f 20 61 20  m a 64-bit to a 
19d00 33 32 2d 62 69 74 20 74 79 70 65 20 6c 69 6d 69  32-bit type limi
19d10 74 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ts the number of
19d20 0a 2a 2a 20 74 61 62 6c 65 73 20 69 6e 20 61 20  .** tables in a 
19d30 6a 6f 69 6e 20 74 6f 20 33 32 20 69 6e 73 74 65  join to 32 inste
19d40 61 64 20 6f 66 20 36 34 2e 20 20 42 75 74 20 69  ad of 64.  But i
19d50 74 20 61 6c 73 6f 20 72 65 64 75 63 65 73 20 74  t also reduces t
19d60 68 65 20 73 69 7a 65 0a 2a 2a 20 6f 66 20 74 68  he size.** of th
19d70 65 20 6c 69 62 72 61 72 79 20 62 79 20 37 33 38  e library by 738
19d80 20 62 79 74 65 73 20 6f 6e 20 69 78 38 36 2e 0a   bytes on ix86..
19d90 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
19da0 5f 42 49 54 4d 41 53 4b 5f 54 59 50 45 0a 20 20  _BITMASK_TYPE.  
19db0 74 79 70 65 64 65 66 20 53 51 4c 49 54 45 5f 42  typedef SQLITE_B
19dc0 49 54 4d 41 53 4b 5f 54 59 50 45 20 42 69 74 6d  ITMASK_TYPE Bitm
19dd0 61 73 6b 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70  ask;.#else.  typ
19de0 65 64 65 66 20 75 36 34 20 42 69 74 6d 61 73 6b  edef u64 Bitmask
19df0 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
19e00 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 69  The number of bi
19e10 74 73 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 2e  ts in a Bitmask.
19e20 20 20 22 42 4d 53 22 20 6d 65 61 6e 73 20 22 42    "BMS" means "B
19e30 69 74 4d 61 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f  itMask Size"..*/
19e40 0a 23 64 65 66 69 6e 65 20 42 4d 53 20 20 28 28  .#define BMS  ((
19e50 69 6e 74 29 28 73 69 7a 65 6f 66 28 42 69 74 6d  int)(sizeof(Bitm
19e60 61 73 6b 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20  ask)*8))../*.** 
19e70 41 20 62 69 74 20 69 6e 20 61 20 42 69 74 6d 61  A bit in a Bitma
19e80 73 6b 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41  sk.*/.#define MA
19e90 53 4b 42 49 54 28 6e 29 20 20 20 28 28 28 42 69  SKBIT(n)   (((Bi
19ea0 74 6d 61 73 6b 29 31 29 3c 3c 28 6e 29 29 0a 23  tmask)1)<<(n)).#
19eb0 64 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 33 32  define MASKBIT32
19ec0 28 6e 29 20 28 28 28 75 6e 73 69 67 6e 65 64 20  (n) (((unsigned 
19ed0 69 6e 74 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65  int)1)<<(n)).#de
19ee0 66 69 6e 65 20 41 4c 4c 42 49 54 53 20 20 20 20  fine ALLBITS    
19ef0 20 20 28 28 42 69 74 6d 61 73 6b 29 2d 31 29 0a    ((Bitmask)-1).
19f00 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
19f10 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 64  wing structure d
19f20 65 73 63 72 69 62 65 73 20 74 68 65 20 46 52 4f  escribes the FRO
19f30 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45  M clause of a SE
19f40 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
19f50 2a 2a 20 45 61 63 68 20 74 61 62 6c 65 20 6f 72  ** Each table or
19f60 20 73 75 62 71 75 65 72 79 20 69 6e 20 74 68 65   subquery in the
19f70 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 69 73 20   FROM clause is 
19f80 61 20 73 65 70 61 72 61 74 65 20 65 6c 65 6d 65  a separate eleme
19f90 6e 74 20 6f 66 0a 2a 2a 20 74 68 65 20 53 72 63  nt of.** the Src
19fa0 4c 69 73 74 2e 61 5b 5d 20 61 72 72 61 79 2e 0a  List.a[] array..
19fb0 2a 2a 0a 2a 2a 20 57 69 74 68 20 74 68 65 20 61  **.** With the a
19fc0 64 64 69 74 69 6f 6e 20 6f 66 20 6d 75 6c 74 69  ddition of multi
19fd0 70 6c 65 20 64 61 74 61 62 61 73 65 20 73 75 70  ple database sup
19fe0 70 6f 72 74 2c 20 74 68 65 20 66 6f 6c 6c 6f 77  port, the follow
19ff0 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a  ing structure.**
1a000 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 75 73 65   can also be use
1a010 64 20 74 6f 20 64 65 73 63 72 69 62 65 20 61 20  d to describe a 
1a020 70 61 72 74 69 63 75 6c 61 72 20 74 61 62 6c 65  particular table
1a030 20 73 75 63 68 20 61 73 20 74 68 65 20 74 61 62   such as the tab
1a040 6c 65 20 74 68 61 74 0a 2a 2a 20 69 73 20 6d 6f  le that.** is mo
1a050 64 69 66 69 65 64 20 62 79 20 61 6e 20 49 4e 53  dified by an INS
1a060 45 52 54 2c 20 44 45 4c 45 54 45 2c 20 6f 72 20  ERT, DELETE, or 
1a070 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
1a080 2e 20 20 49 6e 20 73 74 61 6e 64 61 72 64 20 53  .  In standard S
1a090 51 4c 2c 0a 2a 2a 20 73 75 63 68 20 61 20 74 61  QL,.** such a ta
1a0a0 62 6c 65 20 6d 75 73 74 20 62 65 20 61 20 73 69  ble must be a si
1a0b0 6d 70 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 20 20  mple name: ID.  
1a0c0 42 75 74 20 69 6e 20 53 51 4c 69 74 65 2c 20 74  But in SQLite, t
1a0d0 68 65 20 74 61 62 6c 65 20 63 61 6e 0a 2a 2a 20  he table can.** 
1a0e0 6e 6f 77 20 62 65 20 69 64 65 6e 74 69 66 69 65  now be identifie
1a0f0 64 20 62 79 20 61 20 64 61 74 61 62 61 73 65 20  d by a database 
1a100 6e 61 6d 65 2c 20 61 20 64 6f 74 2c 20 74 68 65  name, a dot, the
1a110 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65  n the table name
1a120 3a 20 49 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54  : ID.ID..**.** T
1a130 68 65 20 6a 6f 69 6e 74 79 70 65 20 73 74 61 72  he jointype star
1a140 74 73 20 6f 75 74 20 73 68 6f 77 69 6e 67 20 74  ts out showing t
1a150 68 65 20 6a 6f 69 6e 20 74 79 70 65 20 62 65 74  he join type bet
1a160 77 65 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74  ween the current
1a170 20 74 61 62 6c 65 0a 2a 2a 20 61 6e 64 20 74 68   table.** and th
1a180 65 20 6e 65 78 74 20 74 61 62 6c 65 20 6f 6e 20  e next table on 
1a190 74 68 65 20 6c 69 73 74 2e 20 20 54 68 65 20 70  the list.  The p
1a1a0 61 72 73 65 72 20 62 75 69 6c 64 73 20 74 68 65  arser builds the
1a1b0 20 6c 69 73 74 20 74 68 69 73 20 77 61 79 2e 0a   list this way..
1a1c0 2a 2a 20 42 75 74 20 73 71 6c 69 74 65 33 53 72  ** But sqlite3Sr
1a1d0 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79  cListShiftJoinTy
1a1e0 70 65 28 29 20 6c 61 74 65 72 20 73 68 69 66 74  pe() later shift
1a1f0 73 20 74 68 65 20 6a 6f 69 6e 74 79 70 65 73 20  s the jointypes 
1a200 73 6f 20 74 68 61 74 20 65 61 63 68 0a 2a 2a 20  so that each.** 
1a210 6a 6f 69 6e 74 79 70 65 20 65 78 70 72 65 73 73  jointype express
1a220 65 73 20 74 68 65 20 6a 6f 69 6e 20 62 65 74 77  es the join betw
1a230 65 65 6e 20 74 68 65 20 74 61 62 6c 65 20 61 6e  een the table an
1a240 64 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 74  d the previous t
1a250 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74  able..**.** In t
1a260 68 65 20 63 6f 6c 55 73 65 64 20 66 69 65 6c 64  he colUsed field
1a270 2c 20 74 68 65 20 68 69 67 68 2d 6f 72 64 65 72  , the high-order
1a280 20 62 69 74 20 28 62 69 74 20 36 33 29 20 69 73   bit (bit 63) is
1a290 20 73 65 74 20 69 66 20 74 68 65 20 74 61 62 6c   set if the tabl
1a2a0 65 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 6d 6f  e.** contains mo
1a2b0 72 65 20 74 68 61 6e 20 36 33 20 63 6f 6c 75 6d  re than 63 colum
1a2c0 6e 73 20 61 6e 64 20 74 68 65 20 36 34 2d 74 68  ns and the 64-th
1a2d0 20 6f 72 20 6c 61 74 65 72 20 63 6f 6c 75 6d 6e   or later column
1a2e0 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 73 74 72   is used..*/.str
1a2f0 75 63 74 20 53 72 63 4c 69 73 74 20 7b 0a 20 20  uct SrcList {.  
1a300 69 6e 74 20 6e 53 72 63 3b 20 20 20 20 20 20 20  int nSrc;       
1a310 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61   /* Number of ta
1a320 62 6c 65 73 20 6f 72 20 73 75 62 71 75 65 72 69  bles or subqueri
1a330 65 73 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63  es in the FROM c
1a340 6c 61 75 73 65 20 2a 2f 0a 20 20 75 33 32 20 6e  lause */.  u32 n
1a350 41 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20 4e  Alloc;      /* N
1a360 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
1a370 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 61 5b   allocated in a[
1a380 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 73 74 72  ] below */.  str
1a390 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d  uct SrcList_item
1a3a0 20 7b 0a 20 20 20 20 53 63 68 65 6d 61 20 2a 70   {.    Schema *p
1a3b0 53 63 68 65 6d 61 3b 20 20 2f 2a 20 53 63 68 65  Schema;  /* Sche
1a3c0 6d 61 20 74 6f 20 77 68 69 63 68 20 74 68 69 73  ma to which this
1a3d0 20 69 74 65 6d 20 69 73 20 66 69 78 65 64 20 2a   item is fixed *
1a3e0 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 44 61 74  /.    char *zDat
1a3f0 61 62 61 73 65 3b 20 20 2f 2a 20 4e 61 6d 65 20  abase;  /* Name 
1a400 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64  of database hold
1a410 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20 2a  ing this table *
1a420 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d  /.    char *zNam
1a430 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20  e;      /* Name 
1a440 6f 66 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a  of the table */.
1a450 20 20 20 20 63 68 61 72 20 2a 7a 41 6c 69 61 73      char *zAlias
1a460 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 22 42 22  ;     /* The "B"
1a470 20 70 61 72 74 20 6f 66 20 61 20 22 41 20 41 53   part of a "A AS
1a480 20 42 22 20 70 68 72 61 73 65 2e 20 20 7a 4e 61   B" phrase.  zNa
1a490 6d 65 20 69 73 20 74 68 65 20 22 41 22 20 2a 2f  me is the "A" */
1a4a0 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62  .    Table *pTab
1a4b0 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 53 51 4c  ;      /* An SQL
1a4c0 20 74 61 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e   table correspon
1a4d0 64 69 6e 67 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f  ding to zName */
1a4e0 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65  .    Select *pSe
1a4f0 6c 65 63 74 3b 20 20 2f 2a 20 41 20 53 45 4c 45  lect;  /* A SELE
1a500 43 54 20 73 74 61 74 65 6d 65 6e 74 20 75 73 65  CT statement use
1a510 64 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 61 20  d in place of a 
1a520 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20  table name */.  
1a530 20 20 69 6e 74 20 61 64 64 72 46 69 6c 6c 53 75    int addrFillSu
1a540 62 3b 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f  b;  /* Address o
1a550 66 20 73 75 62 72 6f 75 74 69 6e 65 20 74 6f 20  f subroutine to 
1a560 6d 61 6e 69 66 65 73 74 20 61 20 73 75 62 71 75  manifest a subqu
1a570 65 72 79 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72  ery */.    int r
1a580 65 67 52 65 74 75 72 6e 3b 20 20 20 20 2f 2a 20  egReturn;    /* 
1a590 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  Register holding
1a5a0 20 72 65 74 75 72 6e 20 61 64 64 72 65 73 73 20   return address 
1a5b0 6f 66 20 61 64 64 72 46 69 6c 6c 53 75 62 20 2a  of addrFillSub *
1a5c0 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65 73  /.    int regRes
1a5d0 75 6c 74 3b 20 20 20 20 2f 2a 20 52 65 67 69 73  ult;    /* Regis
1a5e0 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 72 65 73  ters holding res
1a5f0 75 6c 74 73 20 6f 66 20 61 20 63 6f 2d 72 6f 75  ults of a co-rou
1a600 74 69 6e 65 20 2a 2f 0a 20 20 20 20 73 74 72 75  tine */.    stru
1a610 63 74 20 7b 0a 20 20 20 20 20 20 75 38 20 6a 6f  ct {.      u8 jo
1a620 69 6e 74 79 70 65 3b 20 20 20 20 20 20 2f 2a 20  intype;      /* 
1a630 54 79 70 65 20 6f 66 20 6a 6f 69 6e 20 62 65 74  Type of join bet
1a640 77 65 65 6e 20 74 68 69 73 20 74 61 62 6c 65 20  ween this table 
1a650 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75 73  and the previous
1a660 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e   */.      unsign
1a670 65 64 20 6e 6f 74 49 6e 64 65 78 65 64 20 3a 31  ed notIndexed :1
1a680 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  ;    /* True if 
1a690 74 68 65 72 65 20 69 73 20 61 20 4e 4f 54 20 49  there is a NOT I
1a6a0 4e 44 45 58 45 44 20 63 6c 61 75 73 65 20 2a 2f  NDEXED clause */
1a6b0 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20  .      unsigned 
1a6c0 69 73 49 6e 64 65 78 65 64 42 79 20 3a 31 3b 20  isIndexedBy :1; 
1a6d0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65    /* True if the
1a6e0 72 65 20 69 73 20 61 6e 20 49 4e 44 45 58 45 44  re is an INDEXED
1a6f0 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20   BY clause */.  
1a700 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 54      unsigned isT
1a710 61 62 46 75 6e 63 20 3a 31 3b 20 20 20 20 20 2f  abFunc :1;     /
1a720 2a 20 54 72 75 65 20 69 66 20 74 61 62 6c 65 2d  * True if table-
1a730 76 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f 6e 20  valued-function 
1a740 73 79 6e 74 61 78 20 2a 2f 0a 20 20 20 20 20 20  syntax */.      
1a750 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 72 72 65  unsigned isCorre
1a760 6c 61 74 65 64 20 3a 31 3b 20 20 2f 2a 20 54 72  lated :1;  /* Tr
1a770 75 65 20 69 66 20 73 75 62 2d 71 75 65 72 79 20  ue if sub-query 
1a780 69 73 20 63 6f 72 72 65 6c 61 74 65 64 20 2a 2f  is correlated */
1a790 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20  .      unsigned 
1a7a0 76 69 61 43 6f 72 6f 75 74 69 6e 65 20 3a 31 3b  viaCoroutine :1;
1a7b0 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 65 64    /* Implemented
1a7c0 20 61 73 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65   as a co-routine
1a7d0 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e   */.      unsign
1a7e0 65 64 20 69 73 52 65 63 75 72 73 69 76 65 20 3a  ed isRecursive :
1a7f0 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72  1;   /* True for
1a800 20 72 65 63 75 72 73 69 76 65 20 72 65 66 65 72   recursive refer
1a810 65 6e 63 65 20 69 6e 20 57 49 54 48 20 2a 2f 0a  ence in WITH */.
1a820 20 20 20 20 7d 20 66 67 3b 0a 23 69 66 6e 64 65      } fg;.#ifnde
1a830 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58  f SQLITE_OMIT_EX
1a840 50 4c 41 49 4e 0a 20 20 20 20 75 38 20 69 53 65  PLAIN.    u8 iSe
1a850 6c 65 63 74 49 64 3b 20 20 20 20 20 2f 2a 20 49  lectId;     /* I
1a860 66 20 70 53 65 6c 65 63 74 21 3d 30 2c 20 74 68  f pSelect!=0, th
1a870 65 20 69 64 20 6f 66 20 74 68 65 20 73 75 62 2d  e id of the sub-
1a880 73 65 6c 65 63 74 20 69 6e 20 45 51 50 20 2a 2f  select in EQP */
1a890 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 6e 74 20  .#endif.    int 
1a8a0 69 43 75 72 73 6f 72 3b 20 20 20 20 20 20 2f 2a  iCursor;      /*
1a8b0 20 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72   The VDBE cursor
1a8c0 20 6e 75 6d 62 65 72 20 75 73 65 64 20 74 6f 20   number used to 
1a8d0 61 63 63 65 73 73 20 74 68 69 73 20 74 61 62 6c  access this tabl
1a8e0 65 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70  e */.    Expr *p
1a8f0 4f 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  On;        /* Th
1a900 65 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66 20 61  e ON clause of a
1a910 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49 64 4c   join */.    IdL
1a920 69 73 74 20 2a 70 55 73 69 6e 67 3b 20 20 20 2f  ist *pUsing;   /
1a930 2a 20 54 68 65 20 55 53 49 4e 47 20 63 6c 61 75  * The USING clau
1a940 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a  se of a join */.
1a950 20 20 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c 55      Bitmask colU
1a960 73 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e 20 28  sed;  /* Bit N (
1a970 31 3c 3c 4e 29 20 73 65 74 20 69 66 20 63 6f 6c  1<<N) set if col
1a980 75 6d 6e 20 4e 20 6f 66 20 70 54 61 62 20 69 73  umn N of pTab is
1a990 20 75 73 65 64 20 2a 2f 0a 20 20 20 20 75 6e 69   used */.    uni
1a9a0 6f 6e 20 7b 0a 20 20 20 20 20 20 63 68 61 72 20  on {.      char 
1a9b0 2a 7a 49 6e 64 65 78 65 64 42 79 3b 20 20 20 20  *zIndexedBy;    
1a9c0 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 20 66 72  /* Identifier fr
1a9d0 6f 6d 20 22 49 4e 44 45 58 45 44 20 42 59 20 3c  om "INDEXED BY <
1a9e0 7a 49 6e 64 65 78 3e 22 20 63 6c 61 75 73 65 20  zIndex>" clause 
1a9f0 2a 2f 0a 20 20 20 20 20 20 45 78 70 72 4c 69 73  */.      ExprLis
1aa00 74 20 2a 70 46 75 6e 63 41 72 67 3b 20 20 2f 2a  t *pFuncArg;  /*
1aa10 20 41 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 61   Arguments to ta
1aa20 62 6c 65 2d 76 61 6c 75 65 64 2d 66 75 6e 63 74  ble-valued-funct
1aa30 69 6f 6e 20 2a 2f 0a 20 20 20 20 7d 20 75 31 3b  ion */.    } u1;
1aa40 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 42 49  .    Index *pIBI
1aa50 6e 64 65 78 3b 20 20 2f 2a 20 49 6e 64 65 78 20  ndex;  /* Index 
1aa60 73 74 72 75 63 74 75 72 65 20 63 6f 72 72 65 73  structure corres
1aa70 70 6f 6e 64 69 6e 67 20 74 6f 20 75 31 2e 7a 49  ponding to u1.zI
1aa80 6e 64 65 78 65 64 42 79 20 2a 2f 0a 20 20 7d 20  ndexedBy */.  } 
1aa90 61 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20  a[1];           
1aaa0 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66    /* One entry f
1aab0 6f 72 20 65 61 63 68 20 69 64 65 6e 74 69 66 69  or each identifi
1aac0 65 72 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a  er on the list *
1aad0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72 6d  /.};../*.** Perm
1aae0 69 74 74 65 64 20 76 61 6c 75 65 73 20 6f 66 20  itted values of 
1aaf0 74 68 65 20 53 72 63 4c 69 73 74 2e 61 2e 6a 6f  the SrcList.a.jo
1ab00 69 6e 74 79 70 65 20 66 69 65 6c 64 0a 2a 2f 0a  intype field.*/.
1ab10 23 64 65 66 69 6e 65 20 4a 54 5f 49 4e 4e 45 52  #define JT_INNER
1ab20 20 20 20 20 20 30 78 30 30 30 31 20 20 20 20 2f       0x0001    /
1ab30 2a 20 41 6e 79 20 6b 69 6e 64 20 6f 66 20 69 6e  * Any kind of in
1ab40 6e 65 72 20 6f 72 20 63 72 6f 73 73 20 6a 6f 69  ner or cross joi
1ab50 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  n */.#define JT_
1ab60 43 52 4f 53 53 20 20 20 20 20 30 78 30 30 30 32  CROSS     0x0002
1ab70 20 20 20 20 2f 2a 20 45 78 70 6c 69 63 69 74 20      /* Explicit 
1ab80 75 73 65 20 6f 66 20 74 68 65 20 43 52 4f 53 53  use of the CROSS
1ab90 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66   keyword */.#def
1aba0 69 6e 65 20 4a 54 5f 4e 41 54 55 52 41 4c 20 20  ine JT_NATURAL  
1abb0 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54 72   0x0004    /* Tr
1abc0 75 65 20 66 6f 72 20 61 20 22 6e 61 74 75 72 61  ue for a "natura
1abd0 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  l" join */.#defi
1abe0 6e 65 20 4a 54 5f 4c 45 46 54 20 20 20 20 20 20  ne JT_LEFT      
1abf0 30 78 30 30 30 38 20 20 20 20 2f 2a 20 4c 65 66  0x0008    /* Lef
1ac00 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a  t outer join */.
1ac10 23 64 65 66 69 6e 65 20 4a 54 5f 52 49 47 48 54  #define JT_RIGHT
1ac20 20 20 20 20 20 30 78 30 30 31 30 20 20 20 20 2f       0x0010    /
1ac30 2a 20 52 69 67 68 74 20 6f 75 74 65 72 20 6a 6f  * Right outer jo
1ac40 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  in */.#define JT
1ac50 5f 4f 55 54 45 52 20 20 20 20 20 30 78 30 30 32  _OUTER     0x002
1ac60 30 20 20 20 20 2f 2a 20 54 68 65 20 22 4f 55 54  0    /* The "OUT
1ac70 45 52 22 20 6b 65 79 77 6f 72 64 20 69 73 20 70  ER" keyword is p
1ac80 72 65 73 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  resent */.#defin
1ac90 65 20 4a 54 5f 45 52 52 4f 52 20 20 20 20 20 30  e JT_ERROR     0
1aca0 78 30 30 34 30 20 20 20 20 2f 2a 20 75 6e 6b 6e  x0040    /* unkn
1acb0 6f 77 6e 20 6f 72 20 75 6e 73 75 70 70 6f 72 74  own or unsupport
1acc0 65 64 20 6a 6f 69 6e 20 74 79 70 65 20 2a 2f 0a  ed join type */.
1acd0 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 61 70  ../*.** Flags ap
1ace0 70 72 6f 70 72 69 61 74 65 20 66 6f 72 20 74 68  propriate for th
1acf0 65 20 77 63 74 72 6c 46 6c 61 67 73 20 70 61 72  e wctrlFlags par
1ad00 61 6d 65 74 65 72 20 6f 66 20 73 71 6c 69 74 65  ameter of sqlite
1ad10 33 57 68 65 72 65 42 65 67 69 6e 28 29 0a 2a 2a  3WhereBegin().**
1ad20 20 61 6e 64 20 74 68 65 20 57 68 65 72 65 49 6e   and the WhereIn
1ad30 66 6f 2e 77 63 74 72 6c 46 6c 61 67 73 20 6d 65  fo.wctrlFlags me
1ad40 6d 62 65 72 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75  mber..**.** Valu
1ad50 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65  e constraints (e
1ad60 6e 66 6f 72 63 65 64 20 76 69 61 20 61 73 73 65  nforced via asse
1ad70 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20 57 48  rt()):.**     WH
1ad80 45 52 45 5f 55 53 45 5f 4c 49 4d 49 54 20 20 3d  ERE_USE_LIMIT  =
1ad90 3d 20 53 46 5f 46 69 78 65 64 4c 69 6d 69 74 0a  = SF_FixedLimit.
1ada0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1adb0 5f 4f 52 44 45 52 42 59 5f 4e 4f 52 4d 41 4c 20  _ORDERBY_NORMAL 
1adc0 20 20 30 78 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f    0x0000 /* No-o
1add0 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  p */.#define WHE
1ade0 52 45 5f 4f 52 44 45 52 42 59 5f 4d 49 4e 20 20  RE_ORDERBY_MIN  
1adf0 20 20 20 20 30 78 30 30 30 31 20 2f 2a 20 4f 52      0x0001 /* OR
1ae00 44 45 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e  DER BY processin
1ae10 67 20 66 6f 72 20 6d 69 6e 28 29 20 66 75 6e 63  g for min() func
1ae20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1ae30 45 5f 4f 52 44 45 52 42 59 5f 4d 41 58 20 20 20  E_ORDERBY_MAX   
1ae40 20 20 20 30 78 30 30 30 32 20 2f 2a 20 4f 52 44     0x0002 /* ORD
1ae50 45 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67  ER BY processing
1ae60 20 66 6f 72 20 6d 61 78 28 29 20 66 75 6e 63 20   for max() func 
1ae70 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1ae80 5f 4f 4e 45 50 41 53 53 5f 44 45 53 49 52 45 44  _ONEPASS_DESIRED
1ae90 20 20 30 78 30 30 30 34 20 2f 2a 20 57 61 6e 74    0x0004 /* Want
1aea0 20 74 6f 20 64 6f 20 6f 6e 65 2d 70 61 73 73 20   to do one-pass 
1aeb0 55 50 44 41 54 45 2f 44 45 4c 45 54 45 20 2a 2f  UPDATE/DELETE */
1aec0 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
1aed0 4e 45 50 41 53 53 5f 4d 55 4c 54 49 52 4f 57 20  NEPASS_MULTIROW 
1aee0 30 78 30 30 30 38 20 2f 2a 20 4f 4e 45 50 41 53  0x0008 /* ONEPAS
1aef0 53 20 69 73 20 6f 6b 20 77 69 74 68 20 6d 75 6c  S is ok with mul
1af00 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 23 64  tiple rows */.#d
1af10 65 66 69 6e 65 20 57 48 45 52 45 5f 44 55 50 4c  efine WHERE_DUPL
1af20 49 43 41 54 45 53 5f 4f 4b 20 20 20 20 30 78 30  ICATES_OK    0x0
1af30 30 31 30 20 2f 2a 20 4f 6b 20 74 6f 20 72 65 74  010 /* Ok to ret
1af40 75 72 6e 20 61 20 72 6f 77 20 6d 6f 72 65 20 74  urn a row more t
1af50 68 61 6e 20 6f 6e 63 65 20 2a 2f 0a 23 64 65 66  han once */.#def
1af60 69 6e 65 20 57 48 45 52 45 5f 4f 52 5f 53 55 42  ine WHERE_OR_SUB
1af70 43 4c 41 55 53 45 20 20 20 20 20 30 78 30 30 32  CLAUSE     0x002
1af80 30 20 2f 2a 20 50 72 6f 63 65 73 73 69 6e 67 20  0 /* Processing 
1af90 61 20 73 75 62 2d 57 48 45 52 45 20 61 73 20 70  a sub-WHERE as p
1afa0 61 72 74 20 6f 66 0a 20 20 20 20 20 20 20 20 20  art of.         
1afb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1afc0 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
1afd0 74 68 65 20 4f 52 20 6f 70 74 69 6d 69 7a 61 74  the OR optimizat
1afe0 69 6f 6e 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ion  */.#define 
1aff0 57 48 45 52 45 5f 47 52 4f 55 50 42 59 20 20 20  WHERE_GROUPBY   
1b000 20 20 20 20 20 20 20 30 78 30 30 34 30 20 2f 2a         0x0040 /*
1b010 20 70 4f 72 64 65 72 42 79 20 69 73 20 72 65 61   pOrderBy is rea
1b020 6c 6c 79 20 61 20 47 52 4f 55 50 20 42 59 20 2a  lly a GROUP BY *
1b030 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1b040 44 49 53 54 49 4e 43 54 42 59 20 20 20 20 20 20  DISTINCTBY      
1b050 20 30 78 30 30 38 30 20 2f 2a 20 70 4f 72 64 65   0x0080 /* pOrde
1b060 72 62 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20  rby is really a 
1b070 44 49 53 54 49 4e 43 54 20 63 6c 61 75 73 65 20  DISTINCT clause 
1b080 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1b090 5f 57 41 4e 54 5f 44 49 53 54 49 4e 43 54 20 20  _WANT_DISTINCT  
1b0a0 20 20 30 78 30 31 30 30 20 2f 2a 20 41 6c 6c 20    0x0100 /* All 
1b0b0 6f 75 74 70 75 74 20 6e 65 65 64 73 20 74 6f 20  output needs to 
1b0c0 62 65 20 64 69 73 74 69 6e 63 74 20 2a 2f 0a 23  be distinct */.#
1b0d0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 53 4f 52  define WHERE_SOR
1b0e0 54 42 59 47 52 4f 55 50 20 20 20 20 20 20 30 78  TBYGROUP      0x
1b0f0 30 32 30 30 20 2f 2a 20 53 75 70 70 6f 72 74 20  0200 /* Support 
1b100 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f  sqlite3WhereIsSo
1b110 72 74 65 64 28 29 20 2a 2f 0a 23 64 65 66 69 6e  rted() */.#defin
1b120 65 20 57 48 45 52 45 5f 53 45 45 4b 5f 54 41 42  e WHERE_SEEK_TAB
1b130 4c 45 20 20 20 20 20 20 20 30 78 30 34 30 30 20  LE       0x0400 
1b140 2f 2a 20 44 6f 20 6e 6f 74 20 64 65 66 65 72 20  /* Do not defer 
1b150 73 65 65 6b 73 20 6f 6e 20 6d 61 69 6e 20 74 61  seeks on main ta
1b160 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ble */.#define W
1b170 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4c 49 4d  HERE_ORDERBY_LIM
1b180 49 54 20 20 20 20 30 78 30 38 30 30 20 2f 2a 20  IT    0x0800 /* 
1b190 4f 52 44 45 52 42 59 2b 4c 49 4d 49 54 20 6f 6e  ORDERBY+LIMIT on
1b1a0 20 74 68 65 20 69 6e 6e 65 72 20 6c 6f 6f 70 20   the inner loop 
1b1b0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1b1c0 5f 53 45 45 4b 5f 55 4e 49 51 5f 54 41 42 4c 45  _SEEK_UNIQ_TABLE
1b1d0 20 20 30 78 31 30 30 30 20 2f 2a 20 44 6f 20 6e    0x1000 /* Do n
1b1e0 6f 74 20 64 65 66 65 72 20 73 65 65 6b 73 20 69  ot defer seeks i
1b1f0 66 20 75 6e 69 71 75 65 20 2a 2f 0a 20 20 20 20  f unique */.    
1b200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b210 20 20 20 20 2f 2a 20 20 20 20 20 30 78 32 30 30      /*     0x200
1b220 30 20 20 20 20 6e 6f 74 20 63 75 72 72 65 6e 74  0    not current
1b230 6c 79 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69  ly used */.#defi
1b240 6e 65 20 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d  ne WHERE_USE_LIM
1b250 49 54 20 20 20 20 20 20 20 20 30 78 34 30 30 30  IT        0x4000
1b260 20 2f 2a 20 55 73 65 20 74 68 65 20 4c 49 4d 49   /* Use the LIMI
1b270 54 20 69 6e 20 63 6f 73 74 20 65 73 74 69 6d 61  T in cost estima
1b280 74 65 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  tes */.         
1b290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b2a0 2a 20 20 20 20 20 30 78 38 30 30 30 20 20 20 20  *     0x8000    
1b2b0 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 75 73  not currently us
1b2c0 65 64 20 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65  ed */../* Allowe
1b2d0 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20  d return values 
1b2e0 66 72 6f 6d 20 73 71 6c 69 74 65 33 57 68 65 72  from sqlite3Wher
1b2f0 65 49 73 44 69 73 74 69 6e 63 74 28 29 0a 2a 2f  eIsDistinct().*/
1b300 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
1b310 49 53 54 49 4e 43 54 5f 4e 4f 4f 50 20 20 20 20  ISTINCT_NOOP    
1b320 20 20 30 20 20 2f 2a 20 44 49 53 54 49 4e 43 54    0  /* DISTINCT
1b330 20 6b 65 79 77 6f 72 64 20 6e 6f 74 20 75 73 65   keyword not use
1b340 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  d */.#define WHE
1b350 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 49 51  RE_DISTINCT_UNIQ
1b360 55 45 20 20 20 20 31 20 20 2f 2a 20 4e 6f 20 64  UE    1  /* No d
1b370 75 70 6c 69 63 61 74 65 73 20 2a 2f 0a 23 64 65  uplicates */.#de
1b380 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49  fine WHERE_DISTI
1b390 4e 43 54 5f 4f 52 44 45 52 45 44 20 20 20 32 20  NCT_ORDERED   2 
1b3a0 20 2f 2a 20 41 6c 6c 20 64 75 70 6c 69 63 61 74   /* All duplicat
1b3b0 65 73 20 61 72 65 20 61 64 6a 61 63 65 6e 74 20  es are adjacent 
1b3c0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1b3d0 5f 44 49 53 54 49 4e 43 54 5f 55 4e 4f 52 44 45  _DISTINCT_UNORDE
1b3e0 52 45 44 20 33 20 20 2f 2a 20 44 75 70 6c 69 63  RED 3  /* Duplic
1b3f0 61 74 65 73 20 61 72 65 20 73 63 61 74 74 65 72  ates are scatter
1b400 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e  ed */../*.** A N
1b410 61 6d 65 43 6f 6e 74 65 78 74 20 64 65 66 69 6e  ameContext defin
1b420 65 73 20 61 20 63 6f 6e 74 65 78 74 20 69 6e 20  es a context in 
1b430 77 68 69 63 68 20 74 6f 20 72 65 73 6f 6c 76 65  which to resolve
1b440 20 74 61 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d   table and colum
1b450 6e 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20 54 68 65  n.** names.  The
1b460 20 63 6f 6e 74 65 78 74 20 63 6f 6e 73 69 73 74   context consist
1b470 73 20 6f 66 20 61 20 6c 69 73 74 20 6f 66 20 74  s of a list of t
1b480 61 62 6c 65 73 20 28 74 68 65 20 70 53 72 63 4c  ables (the pSrcL
1b490 69 73 74 29 20 66 69 65 6c 64 20 61 6e 64 0a 2a  ist) field and.*
1b4a0 2a 20 61 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65  * a list of name
1b4b0 64 20 65 78 70 72 65 73 73 69 6f 6e 20 28 70 45  d expression (pE
1b4c0 4c 69 73 74 29 2e 20 20 54 68 65 20 6e 61 6d 65  List).  The name
1b4d0 64 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73  d expression lis
1b4e0 74 20 6d 61 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c  t may.** be NULL
1b4f0 2e 20 20 54 68 65 20 70 53 72 63 20 63 6f 72 72  .  The pSrc corr
1b500 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 46  esponds to the F
1b510 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20  ROM clause of a 
1b520 53 45 4c 45 43 54 20 6f 72 0a 2a 2a 20 74 6f 20  SELECT or.** to 
1b530 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  the table being 
1b540 6f 70 65 72 61 74 65 64 20 6f 6e 20 62 79 20 49  operated on by I
1b550 4e 53 45 52 54 2c 20 55 50 44 41 54 45 2c 20 6f  NSERT, UPDATE, o
1b560 72 20 44 45 4c 45 54 45 2e 20 20 54 68 65 0a 2a  r DELETE.  The.*
1b570 2a 20 70 45 4c 69 73 74 20 63 6f 72 72 65 73 70  * pEList corresp
1b580 6f 6e 64 73 20 74 6f 20 74 68 65 20 72 65 73 75  onds to the resu
1b590 6c 74 20 73 65 74 20 6f 66 20 61 20 53 45 4c 45  lt set of a SELE
1b5a0 43 54 20 61 6e 64 20 69 73 20 4e 55 4c 4c 20 66  CT and is NULL f
1b5b0 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 73 74 61 74  or.** other stat
1b5c0 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61  ements..**.** Na
1b5d0 6d 65 43 6f 6e 74 65 78 74 73 20 63 61 6e 20 62  meContexts can b
1b5e0 65 20 6e 65 73 74 65 64 2e 20 20 57 68 65 6e 20  e nested.  When 
1b5f0 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 2c  resolving names,
1b600 20 74 68 65 20 69 6e 6e 65 72 2d 6d 6f 73 74 0a   the inner-most.
1b610 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 73 65  ** context is se
1b620 61 72 63 68 65 64 20 66 69 72 73 74 2e 20 20 49  arched first.  I
1b630 66 20 6e 6f 20 6d 61 74 63 68 20 69 73 20 66 6f  f no match is fo
1b640 75 6e 64 2c 20 74 68 65 20 6e 65 78 74 20 6f 75  und, the next ou
1b650 74 65 72 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69  ter.** context i
1b660 73 20 63 68 65 63 6b 65 64 2e 20 20 49 66 20 74  s checked.  If t
1b670 68 65 72 65 20 69 73 20 73 74 69 6c 6c 20 6e 6f  here is still no
1b680 20 6d 61 74 63 68 2c 20 74 68 65 20 6e 65 78 74   match, the next
1b690 20 63 6f 6e 74 65 78 74 0a 2a 2a 20 69 73 20 63   context.** is c
1b6a0 68 65 63 6b 65 64 2e 20 20 54 68 69 73 20 70 72  hecked.  This pr
1b6b0 6f 63 65 73 73 20 63 6f 6e 74 69 6e 75 65 73 20  ocess continues 
1b6c0 75 6e 74 69 6c 20 65 69 74 68 65 72 20 61 20 6d  until either a m
1b6d0 61 74 63 68 20 69 73 20 66 6f 75 6e 64 0a 2a 2a  atch is found.**
1b6e0 20 6f 72 20 61 6c 6c 20 63 6f 6e 74 65 78 74 73   or all contexts
1b6f0 20 61 72 65 20 63 68 65 63 6b 2e 20 20 57 68 65   are check.  Whe
1b700 6e 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75  n a match is fou
1b710 6e 64 2c 20 74 68 65 20 6e 52 65 66 20 6d 65 6d  nd, the nRef mem
1b720 62 65 72 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f  ber of.** the co
1b730 6e 74 65 78 74 20 63 6f 6e 74 61 69 6e 69 6e 67  ntext containing
1b740 20 74 68 65 20 6d 61 74 63 68 20 69 73 20 69 6e   the match is in
1b750 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a  cremented..**.**
1b760 20 45 61 63 68 20 73 75 62 71 75 65 72 79 20 67   Each subquery g
1b770 65 74 73 20 61 20 6e 65 77 20 4e 61 6d 65 43 6f  ets a new NameCo
1b780 6e 74 65 78 74 2e 20 20 54 68 65 20 70 4e 65 78  ntext.  The pNex
1b790 74 20 66 69 65 6c 64 20 70 6f 69 6e 74 73 20 74  t field points t
1b7a0 6f 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e  o the.** NameCon
1b7b0 74 65 78 74 20 69 6e 20 74 68 65 20 70 61 72 65  text in the pare
1b7c0 6e 74 20 71 75 65 72 79 2e 20 20 54 68 75 73 20  nt query.  Thus 
1b7d0 74 68 65 20 70 72 6f 63 65 73 73 20 6f 66 20 73  the process of s
1b7e0 63 61 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a 20 4e  canning the.** N
1b7f0 61 6d 65 43 6f 6e 74 65 78 74 20 6c 69 73 74 20  ameContext list 
1b800 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 73  corresponds to s
1b810 65 61 72 63 68 69 6e 67 20 74 68 72 6f 75 67 68  earching through
1b820 20 73 75 63 63 65 73 73 69 76 65 6c 79 20 6f 75   successively ou
1b830 74 65 72 0a 2a 2a 20 73 75 62 71 75 65 72 69 65  ter.** subquerie
1b840 73 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20  s looking for a 
1b850 6d 61 74 63 68 2e 0a 2a 2f 0a 73 74 72 75 63 74  match..*/.struct
1b860 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 7b 0a 20   NameContext {. 
1b870 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20   Parse *pParse; 
1b880 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72        /* The par
1b890 73 65 72 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74  ser */.  SrcList
1b8a0 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 2f 2a   *pSrcList;   /*
1b8b0 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61 62   One or more tab
1b8c0 6c 65 73 20 75 73 65 64 20 74 6f 20 72 65 73 6f  les used to reso
1b8d0 6c 76 65 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 45  lve names */.  E
1b8e0 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b  xprList *pEList;
1b8f0 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20      /* Optional 
1b900 6c 69 73 74 20 6f 66 20 72 65 73 75 6c 74 2d 73  list of result-s
1b910 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20  et columns */.  
1b920 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66  AggInfo *pAggInf
1b930 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74  o;   /* Informat
1b940 69 6f 6e 20 61 62 6f 75 74 20 61 67 67 72 65 67  ion about aggreg
1b950 61 74 65 73 20 61 74 20 74 68 69 73 20 6c 65 76  ates at this lev
1b960 65 6c 20 2a 2f 0a 20 20 4e 61 6d 65 43 6f 6e 74  el */.  NameCont
1b970 65 78 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20  ext *pNext;  /* 
1b980 4e 65 78 74 20 6f 75 74 65 72 20 6e 61 6d 65 20  Next outer name 
1b990 63 6f 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66  context.  NULL f
1b9a0 6f 72 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a  or outermost */.
1b9b0 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20    int nRef;     
1b9c0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1b9d0 20 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76   of names resolv
1b9e0 65 64 20 62 79 20 74 68 69 73 20 63 6f 6e 74 65  ed by this conte
1b9f0 78 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72  xt */.  int nErr
1ba00 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1ba10 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73  Number of errors
1ba20 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 77 68 69   encountered whi
1ba30 6c 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d  le resolving nam
1ba40 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 63 46 6c  es */.  u16 ncFl
1ba50 61 67 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ags;         /* 
1ba60 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f  Zero or more NC_
1ba70 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64 20  * flags defined 
1ba80 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  below */.};../*.
1ba90 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  ** Allowed value
1baa0 73 20 66 6f 72 20 74 68 65 20 4e 61 6d 65 43 6f  s for the NameCo
1bab0 6e 74 65 78 74 2c 20 6e 63 46 6c 61 67 73 20 66  ntext, ncFlags f
1bac0 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75  ield..**.** Valu
1bad0 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 61  e constraints (a
1bae0 6c 6c 20 63 68 65 63 6b 65 64 20 76 69 61 20 61  ll checked via a
1baf0 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20  ssert()):.**    
1bb00 4e 43 5f 48 61 73 41 67 67 20 20 20 20 3d 3d 20  NC_HasAgg    == 
1bb10 53 46 5f 48 61 73 41 67 67 0a 2a 2a 20 20 20 20  SF_HasAgg.**    
1bb20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 3d 3d 20  NC_MinMaxAgg == 
1bb30 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 3d 3d 20  SF_MinMaxAgg == 
1bb40 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d  SQLITE_FUNC_MINM
1bb50 41 58 0a 2a 2a 0a 2a 2f 0a 23 64 65 66 69 6e 65  AX.**.*/.#define
1bb60 20 4e 43 5f 41 6c 6c 6f 77 41 67 67 20 20 30 78   NC_AllowAgg  0x
1bb70 30 30 30 31 20 20 2f 2a 20 41 67 67 72 65 67 61  0001  /* Aggrega
1bb80 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65  te functions are
1bb90 20 61 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f   allowed here */
1bba0 0a 23 64 65 66 69 6e 65 20 4e 43 5f 50 61 72 74  .#define NC_Part
1bbb0 49 64 78 20 20 20 30 78 30 30 30 32 20 20 2f 2a  Idx   0x0002  /*
1bbc0 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69   True if resolvi
1bbd0 6e 67 20 61 20 70 61 72 74 69 61 6c 20 69 6e 64  ng a partial ind
1bbe0 65 78 20 57 48 45 52 45 20 2a 2f 0a 23 64 65 66  ex WHERE */.#def
1bbf0 69 6e 65 20 4e 43 5f 49 73 43 68 65 63 6b 20 20  ine NC_IsCheck  
1bc00 20 30 78 30 30 30 34 20 20 2f 2a 20 54 72 75 65   0x0004  /* True
1bc10 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61   if resolving na
1bc20 6d 65 73 20 69 6e 20 61 20 43 48 45 43 4b 20 63  mes in a CHECK c
1bc30 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65  onstraint */.#de
1bc40 66 69 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e  fine NC_InAggFun
1bc50 63 20 30 78 30 30 30 38 20 20 2f 2a 20 54 72 75  c 0x0008  /* Tru
1bc60 65 20 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61  e if analyzing a
1bc70 72 67 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61  rguments to an a
1bc80 67 67 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69  gg func */.#defi
1bc90 6e 65 20 4e 43 5f 48 61 73 41 67 67 20 20 20 20  ne NC_HasAgg    
1bca0 30 78 30 30 31 30 20 20 2f 2a 20 4f 6e 65 20 6f  0x0010  /* One o
1bcb0 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65  r more aggregate
1bcc0 20 66 75 6e 63 74 69 6f 6e 73 20 73 65 65 6e 20   functions seen 
1bcd0 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 64  */.#define NC_Id
1bce0 78 45 78 70 72 20 20 20 30 78 30 30 32 30 20 20  xExpr   0x0020  
1bcf0 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c  /* True if resol
1bd00 76 69 6e 67 20 63 6f 6c 75 6d 6e 73 20 6f 66 20  ving columns of 
1bd10 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a  CREATE INDEX */.
1bd20 23 64 65 66 69 6e 65 20 4e 43 5f 56 61 72 53 65  #define NC_VarSe
1bd30 6c 65 63 74 20 30 78 30 30 34 30 20 20 2f 2a 20  lect 0x0040  /* 
1bd40 41 20 63 6f 72 72 65 6c 61 74 65 64 20 73 75 62  A correlated sub
1bd50 71 75 65 72 79 20 68 61 73 20 62 65 65 6e 20 73  query has been s
1bd60 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  een */.#define N
1bd70 43 5f 4d 69 6e 4d 61 78 41 67 67 20 30 78 31 30  C_MinMaxAgg 0x10
1bd80 30 30 20 20 2f 2a 20 6d 69 6e 2f 6d 61 78 20 61  00  /* min/max a
1bd90 67 67 72 65 67 61 74 65 73 20 73 65 65 6e 2e 20  ggregates seen. 
1bda0 20 53 65 65 20 6e 6f 74 65 20 61 62 6f 76 65 20   See note above 
1bdb0 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  */../*.** An ins
1bdc0 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
1bdd0 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
1bde0 20 63 6f 6e 74 61 69 6e 73 20 61 6c 6c 20 69 6e   contains all in
1bdf0 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65  formation.** nee
1be00 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20  ded to generate 
1be10 63 6f 64 65 20 66 6f 72 20 61 20 73 69 6e 67 6c  code for a singl
1be20 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
1be30 6e 74 2e 0a 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69 74  nt..**.** nLimit
1be40 20 69 73 20 73 65 74 20 74 6f 20 2d 31 20 69 66   is set to -1 if
1be50 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4c 49 4d   there is no LIM
1be60 49 54 20 63 6c 61 75 73 65 2e 20 20 6e 4f 66 66  IT clause.  nOff
1be70 73 65 74 20 69 73 20 73 65 74 20 74 6f 20 30 2e  set is set to 0.
1be80 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 69 73 20  .** If there is 
1be90 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20  a LIMIT clause, 
1bea0 74 68 65 20 70 61 72 73 65 72 20 73 65 74 73 20  the parser sets 
1beb0 6e 4c 69 6d 69 74 20 74 6f 20 74 68 65 20 76 61  nLimit to the va
1bec0 6c 75 65 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69  lue of the.** li
1bed0 6d 69 74 20 61 6e 64 20 6e 4f 66 66 73 65 74 20  mit and nOffset 
1bee0 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  to the value of 
1bef0 74 68 65 20 6f 66 66 73 65 74 20 28 6f 72 20 30  the offset (or 0
1bf00 20 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 74   if there is not
1bf10 0a 2a 2a 20 6f 66 66 73 65 74 29 2e 20 20 42 75  .** offset).  Bu
1bf20 74 20 6c 61 74 65 72 20 6f 6e 2c 20 6e 4c 69 6d  t later on, nLim
1bf30 69 74 20 61 6e 64 20 6e 4f 66 66 73 65 74 20 62  it and nOffset b
1bf40 65 63 6f 6d 65 20 74 68 65 20 6d 65 6d 6f 72 79  ecome the memory
1bf50 20 6c 6f 63 61 74 69 6f 6e 73 0a 2a 2a 20 69 6e   locations.** in
1bf60 20 74 68 65 20 56 44 42 45 20 74 68 61 74 20 72   the VDBE that r
1bf70 65 63 6f 72 64 20 74 68 65 20 6c 69 6d 69 74 20  ecord the limit 
1bf80 61 6e 64 20 6f 66 66 73 65 74 20 63 6f 75 6e 74  and offset count
1bf90 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f  ers..**.** addrO
1bfa0 70 65 6e 45 70 68 6d 5b 5d 20 65 6e 74 72 69 65  penEphm[] entrie
1bfb0 73 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 61 64  s contain the ad
1bfc0 64 72 65 73 73 20 6f 66 20 4f 50 5f 4f 70 65 6e  dress of OP_Open
1bfd0 45 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65  Ephemeral opcode
1bfe0 73 2e 0a 2a 2a 20 54 68 65 73 65 20 61 64 64 72  s..** These addr
1bff0 65 73 73 65 73 20 6d 75 73 74 20 62 65 20 73 74  esses must be st
1c000 6f 72 65 64 20 73 6f 20 74 68 61 74 20 77 65 20  ored so that we 
1c010 63 61 6e 20 67 6f 20 62 61 63 6b 20 61 6e 64 20  can go back and 
1c020 66 69 6c 6c 20 69 6e 0a 2a 2a 20 74 68 65 20 50  fill in.** the P
1c030 34 5f 4b 45 59 49 4e 46 4f 20 61 6e 64 20 50 32  4_KEYINFO and P2
1c040 20 70 61 72 61 6d 65 74 65 72 73 20 6c 61 74 65   parameters late
1c050 72 2e 20 20 4e 65 69 74 68 65 72 20 74 68 65 20  r.  Neither the 
1c060 4b 65 79 49 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74  KeyInfo nor.** t
1c070 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
1c080 75 6d 6e 73 20 69 6e 20 50 32 20 63 61 6e 20 62  umns in P2 can b
1c090 65 20 63 6f 6d 70 75 74 65 64 20 61 74 20 74 68  e computed at th
1c0a0 65 20 73 61 6d 65 20 74 69 6d 65 0a 2a 2a 20 61  e same time.** a
1c0b0 73 20 74 68 65 20 4f 50 5f 4f 70 65 6e 45 70 68  s the OP_OpenEph
1c0c0 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  m instruction is
1c0d0 20 63 6f 64 65 64 20 62 65 63 61 75 73 65 20 6e   coded because n
1c0e0 6f 74 0a 2a 2a 20 65 6e 6f 75 67 68 20 69 6e 66  ot.** enough inf
1c0f0 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74  ormation about t
1c100 68 65 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72  he compound quer
1c110 79 20 69 73 20 6b 6e 6f 77 6e 20 61 74 20 74 68  y is known at th
1c120 61 74 20 70 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65  at point..** The
1c130 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64   KeyInfo for add
1c140 72 4f 70 65 6e 54 72 61 6e 5b 30 5d 20 61 6e 64  rOpenTran[0] and
1c150 20 5b 31 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f   [1] contains co
1c160 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
1c170 73 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 65 73  s.** for the res
1c180 75 6c 74 20 73 65 74 2e 20 20 54 68 65 20 4b 65  ult set.  The Ke
1c190 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70  yInfo for addrOp
1c1a0 65 6e 45 70 68 6d 5b 32 5d 20 63 6f 6e 74 61 69  enEphm[2] contai
1c1b0 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20  ns collating.** 
1c1c0 73 65 71 75 65 6e 63 65 73 20 66 6f 72 20 74 68  sequences for th
1c1d0 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
1c1e0 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c  e..*/.struct Sel
1c1f0 65 63 74 20 7b 0a 20 20 45 78 70 72 4c 69 73 74  ect {.  ExprList
1c200 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 20 20 2f   *pEList;      /
1c210 2a 20 54 68 65 20 66 69 65 6c 64 73 20 6f 66 20  * The fields of 
1c220 74 68 65 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20  the result */.  
1c230 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20  u8 op;          
1c240 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66         /* One of
1c250 3a 20 54 4b 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c  : TK_UNION TK_AL
1c260 4c 20 54 4b 5f 49 4e 54 45 52 53 45 43 54 20 54  L TK_INTERSECT T
1c270 4b 5f 45 58 43 45 50 54 20 2a 2f 0a 20 20 4c 6f  K_EXCEPT */.  Lo
1c280 67 45 73 74 20 6e 53 65 6c 65 63 74 52 6f 77 3b  gEst nSelectRow;
1c290 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65       /* Estimate
1c2a0 64 20 6e 75 6d 62 65 72 20 6f 66 20 72 65 73 75  d number of resu
1c2b0 6c 74 20 72 6f 77 73 20 2a 2f 0a 20 20 75 33 32  lt rows */.  u32
1c2c0 20 73 65 6c 46 6c 61 67 73 3b 20 20 20 20 20 20   selFlags;      
1c2d0 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 53      /* Various S
1c2e0 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20  F_* values */.  
1c2f0 69 6e 74 20 69 4c 69 6d 69 74 2c 20 69 4f 66 66  int iLimit, iOff
1c300 73 65 74 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72 79  set;   /* Memory
1c310 20 72 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69   registers holdi
1c320 6e 67 20 4c 49 4d 49 54 20 26 20 4f 46 46 53 45  ng LIMIT & OFFSE
1c330 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 23 69  T counters */.#i
1c340 66 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e  f SELECTTRACE_EN
1c350 41 42 4c 45 44 0a 20 20 63 68 61 72 20 7a 53 65  ABLED.  char zSe
1c360 6c 4e 61 6d 65 5b 31 32 5d 3b 20 20 20 20 20 2f  lName[12];     /
1c370 2a 20 53 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20  * Symbolic name 
1c380 6f 66 20 74 68 69 73 20 53 45 4c 45 43 54 20 75  of this SELECT u
1c390 73 65 20 66 6f 72 20 64 65 62 75 67 67 69 6e 67  se for debugging
1c3a0 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74   */.#endif.  int
1c3b0 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d   addrOpenEphm[2]
1c3c0 3b 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70  ;   /* OP_OpenEp
1c3d0 68 65 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c 61  hem opcodes rela
1c3e0 74 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65  ted to this sele
1c3f0 63 74 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20  ct */.  SrcList 
1c400 2a 70 53 72 63 3b 20 20 20 20 20 20 20 20 20 2f  *pSrc;         /
1c410 2a 20 54 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  * The FROM claus
1c420 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68  e */.  Expr *pWh
1c430 65 72 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ere;          /*
1c440 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   The WHERE claus
1c450 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  e */.  ExprList 
1c460 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a  *pGroupBy;    /*
1c470 20 54 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c   The GROUP BY cl
1c480 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a  ause */.  Expr *
1c490 70 48 61 76 69 6e 67 3b 20 20 20 20 20 20 20 20  pHaving;        
1c4a0 20 2f 2a 20 54 68 65 20 48 41 56 49 4e 47 20 63   /* The HAVING c
1c4b0 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c  lause */.  ExprL
1c4c0 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20  ist *pOrderBy;  
1c4d0 20 20 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42    /* The ORDER B
1c4e0 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65  Y clause */.  Se
1c4f0 6c 65 63 74 20 2a 70 50 72 69 6f 72 3b 20 20 20  lect *pPrior;   
1c500 20 20 20 20 20 2f 2a 20 50 72 69 6f 72 20 73 65       /* Prior se
1c510 6c 65 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75  lect in a compou
1c520 6e 64 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d  nd select statem
1c530 65 6e 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20  ent */.  Select 
1c540 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
1c550 2f 2a 20 4e 65 78 74 20 73 65 6c 65 63 74 20 74  /* Next select t
1c560 6f 20 74 68 65 20 6c 65 66 74 20 69 6e 20 61 20  o the left in a 
1c570 63 6f 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20 45 78  compound */.  Ex
1c580 70 72 20 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20  pr *pLimit;     
1c590 20 20 20 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78       /* LIMIT ex
1c5a0 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d  pression. NULL m
1c5b0 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a  eans not used. *
1c5c0 2f 0a 20 20 45 78 70 72 20 2a 70 4f 66 66 73 65  /.  Expr *pOffse
1c5d0 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 46  t;         /* OF
1c5e0 46 53 45 54 20 65 78 70 72 65 73 73 69 6f 6e 2e  FSET expression.
1c5f0 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20   NULL means not 
1c600 75 73 65 64 2e 20 2a 2f 0a 20 20 57 69 74 68 20  used. */.  With 
1c610 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20 20 20  *pWith;         
1c620 20 20 2f 2a 20 57 49 54 48 20 63 6c 61 75 73 65    /* WITH clause
1c630 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 69   attached to thi
1c640 73 20 73 65 6c 65 63 74 2e 20 4f 72 20 4e 55 4c  s select. Or NUL
1c650 4c 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  L. */.};../*.** 
1c660 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
1c670 6f 72 20 53 65 6c 65 63 74 2e 73 65 6c 46 6c 61  or Select.selFla
1c680 67 73 2e 20 20 54 68 65 20 22 53 46 22 20 70 72  gs.  The "SF" pr
1c690 65 66 69 78 20 73 74 61 6e 64 73 20 66 6f 72 0a  efix stands for.
1c6a0 2a 2a 20 22 53 65 6c 65 63 74 20 46 6c 61 67 22  ** "Select Flag"
1c6b0 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f  ..**.** Value co
1c6c0 6e 73 74 72 61 69 6e 74 73 20 28 61 6c 6c 20 63  nstraints (all c
1c6d0 68 65 63 6b 65 64 20 76 69 61 20 61 73 73 65 72  hecked via asser
1c6e0 74 28 29 29 0a 2a 2a 20 20 20 20 20 53 46 5f 48  t()).**     SF_H
1c6f0 61 73 41 67 67 20 20 20 20 20 3d 3d 20 4e 43 5f  asAgg     == NC_
1c700 48 61 73 41 67 67 0a 2a 2a 20 20 20 20 20 53 46  HasAgg.**     SF
1c710 5f 4d 69 6e 4d 61 78 41 67 67 20 20 3d 3d 20 4e  _MinMaxAgg  == N
1c720 43 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20 20 20  C_MinMaxAgg     
1c730 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d  == SQLITE_FUNC_M
1c740 49 4e 4d 41 58 0a 2a 2a 20 20 20 20 20 53 46 5f  INMAX.**     SF_
1c750 46 69 78 65 64 4c 69 6d 69 74 20 3d 3d 20 57 48  FixedLimit == WH
1c760 45 52 45 5f 55 53 45 5f 4c 49 4d 49 54 0a 2a 2f  ERE_USE_LIMIT.*/
1c770 0a 23 64 65 66 69 6e 65 20 53 46 5f 44 69 73 74  .#define SF_Dist
1c780 69 6e 63 74 20 20 20 20 20 20 20 30 78 30 30 30  inct       0x000
1c790 30 31 20 20 2f 2a 20 4f 75 74 70 75 74 20 73 68  01  /* Output sh
1c7a0 6f 75 6c 64 20 62 65 20 44 49 53 54 49 4e 43 54  ould be DISTINCT
1c7b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41   */.#define SF_A
1c7c0 6c 6c 20 20 20 20 20 20 20 20 20 20 20 20 30 78  ll            0x
1c7d0 30 30 30 30 32 20 20 2f 2a 20 49 6e 63 6c 75 64  00002  /* Includ
1c7e0 65 73 20 74 68 65 20 41 4c 4c 20 6b 65 79 77 6f  es the ALL keywo
1c7f0 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  rd */.#define SF
1c800 5f 52 65 73 6f 6c 76 65 64 20 20 20 20 20 20 20  _Resolved       
1c810 30 78 30 30 30 30 34 20 20 2f 2a 20 49 64 65 6e  0x00004  /* Iden
1c820 74 69 66 69 65 72 73 20 68 61 76 65 20 62 65 65  tifiers have bee
1c830 6e 20 72 65 73 6f 6c 76 65 64 20 2a 2f 0a 23 64  n resolved */.#d
1c840 65 66 69 6e 65 20 53 46 5f 41 67 67 72 65 67 61  efine SF_Aggrega
1c850 74 65 20 20 20 20 20 20 30 78 30 30 30 30 38 20  te      0x00008 
1c860 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67 67   /* Contains agg
1c870 20 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20 61 20   functions or a 
1c880 47 52 4f 55 50 20 42 59 20 2a 2f 0a 23 64 65 66  GROUP BY */.#def
1c890 69 6e 65 20 53 46 5f 48 61 73 41 67 67 20 20 20  ine SF_HasAgg   
1c8a0 20 20 20 20 20 20 30 78 30 30 30 31 30 20 20 2f        0x00010  /
1c8b0 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67 67 72 65  * Contains aggre
1c8c0 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a  gate functions *
1c8d0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 55 73 65  /.#define SF_Use
1c8e0 73 45 70 68 65 6d 65 72 61 6c 20 20 30 78 30 30  sEphemeral  0x00
1c8f0 30 32 30 20 20 2f 2a 20 55 73 65 73 20 74 68 65  020  /* Uses the
1c900 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f   OpenEphemeral o
1c910 70 63 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65  pcode */.#define
1c920 20 53 46 5f 45 78 70 61 6e 64 65 64 20 20 20 20   SF_Expanded    
1c930 20 20 20 30 78 30 30 30 34 30 20 20 2f 2a 20 73     0x00040  /* s
1c940 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 61  qlite3SelectExpa
1c950 6e 64 28 29 20 63 61 6c 6c 65 64 20 6f 6e 20 74  nd() called on t
1c960 68 69 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  his */.#define S
1c970 46 5f 48 61 73 54 79 70 65 49 6e 66 6f 20 20 20  F_HasTypeInfo   
1c980 20 30 78 30 30 30 38 30 20 20 2f 2a 20 46 52 4f   0x00080  /* FRO
1c990 4d 20 73 75 62 71 75 65 72 69 65 73 20 68 61 76  M subqueries hav
1c9a0 65 20 54 61 62 6c 65 20 6d 65 74 61 64 61 74 61  e Table metadata
1c9b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 43   */.#define SF_C
1c9c0 6f 6d 70 6f 75 6e 64 20 20 20 20 20 20 20 30 78  ompound       0x
1c9d0 30 30 31 30 30 20 20 2f 2a 20 50 61 72 74 20 6f  00100  /* Part o
1c9e0 66 20 61 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65  f a compound que
1c9f0 72 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ry */.#define SF
1ca00 5f 56 61 6c 75 65 73 20 20 20 20 20 20 20 20 20  _Values         
1ca10 30 78 30 30 32 30 30 20 20 2f 2a 20 53 79 6e 74  0x00200  /* Synt
1ca20 68 65 73 69 7a 65 64 20 66 72 6f 6d 20 56 41 4c  hesized from VAL
1ca30 55 45 53 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64  UES clause */.#d
1ca40 65 66 69 6e 65 20 53 46 5f 4d 75 6c 74 69 56 61  efine SF_MultiVa
1ca50 6c 75 65 20 20 20 20 20 30 78 30 30 34 30 30 20  lue     0x00400 
1ca60 20 2f 2a 20 53 69 6e 67 6c 65 20 56 41 4c 55 45   /* Single VALUE
1ca70 53 20 74 65 72 6d 20 77 69 74 68 20 6d 75 6c 74  S term with mult
1ca80 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 23 64 65  iple rows */.#de
1ca90 66 69 6e 65 20 53 46 5f 4e 65 73 74 65 64 46 72  fine SF_NestedFr
1caa0 6f 6d 20 20 20 20 20 30 78 30 30 38 30 30 20 20  om     0x00800  
1cab0 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 70 61 72  /* Part of a par
1cac0 65 6e 74 68 65 73 69 7a 65 64 20 46 52 4f 4d 20  enthesized FROM 
1cad0 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e  clause */.#defin
1cae0 65 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 20  e SF_MinMaxAgg  
1caf0 20 20 20 20 30 78 30 31 30 30 30 20 20 2f 2a 20      0x01000  /* 
1cb00 41 67 67 72 65 67 61 74 65 20 63 6f 6e 74 61 69  Aggregate contai
1cb10 6e 69 6e 67 20 6d 69 6e 28 29 20 6f 72 20 6d 61  ning min() or ma
1cb20 78 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  x() */.#define S
1cb30 46 5f 52 65 63 75 72 73 69 76 65 20 20 20 20 20  F_Recursive     
1cb40 20 30 78 30 32 30 30 30 20 20 2f 2a 20 54 68 65   0x02000  /* The
1cb50 20 72 65 63 75 72 73 69 76 65 20 70 61 72 74 20   recursive part 
1cb60 6f 66 20 61 20 72 65 63 75 72 73 69 76 65 20 43  of a recursive C
1cb70 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  TE */.#define SF
1cb80 5f 46 69 78 65 64 4c 69 6d 69 74 20 20 20 20 20  _FixedLimit     
1cb90 30 78 30 34 30 30 30 20 20 2f 2a 20 6e 53 65 6c  0x04000  /* nSel
1cba0 65 63 74 52 6f 77 20 73 65 74 20 62 79 20 61 20  ectRow set by a 
1cbb0 63 6f 6e 73 74 61 6e 74 20 4c 49 4d 49 54 20 2a  constant LIMIT *
1cbc0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 61 79  /.#define SF_May
1cbd0 62 65 43 6f 6e 76 65 72 74 20 20 20 30 78 30 38  beConvert   0x08
1cbe0 30 30 30 20 20 2f 2a 20 4e 65 65 64 20 63 6f 6e  000  /* Need con
1cbf0 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65  vertCompoundSele
1cc00 63 74 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a  ctToSubquery() *
1cc10 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6e  /.#define SF_Con
1cc20 76 65 72 74 65 64 20 20 20 20 20 20 30 78 31 30  verted      0x10
1cc30 30 30 30 20 20 2f 2a 20 42 79 20 63 6f 6e 76 65  000  /* By conve
1cc40 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74  rtCompoundSelect
1cc50 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a  ToSubquery() */.
1cc60 23 64 65 66 69 6e 65 20 53 46 5f 49 6e 63 6c 75  #define SF_Inclu
1cc70 64 65 48 69 64 64 65 6e 20 20 30 78 32 30 30 30  deHidden  0x2000
1cc80 30 20 20 2f 2a 20 49 6e 63 6c 75 64 65 20 68 69  0  /* Include hi
1cc90 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  dden columns in 
1cca0 6f 75 74 70 75 74 20 2a 2f 0a 0a 0a 2f 2a 0a 2a  output */.../*.*
1ccb0 2a 20 54 68 65 20 72 65 73 75 6c 74 73 20 6f 66  * The results of
1ccc0 20 61 20 53 45 4c 45 43 54 20 63 61 6e 20 62 65   a SELECT can be
1ccd0 20 64 69 73 74 72 69 62 75 74 65 64 20 69 6e 20   distributed in 
1cce0 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20 61 73  several ways, as
1ccf0 20 64 65 66 69 6e 65 64 0a 2a 2a 20 62 79 20 6f   defined.** by o
1cd00 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ne of the follow
1cd10 69 6e 67 20 6d 61 63 72 6f 73 2e 20 20 54 68 65  ing macros.  The
1cd20 20 22 53 52 54 22 20 70 72 65 66 69 78 20 6d 65   "SRT" prefix me
1cd30 61 6e 73 20 22 53 45 4c 45 43 54 20 52 65 73 75  ans "SELECT Resu
1cd40 6c 74 0a 2a 2a 20 54 79 70 65 22 2e 0a 2a 2a 0a  lt.** Type"..**.
1cd50 2a 2a 20 20 20 20 20 53 52 54 5f 55 6e 69 6f 6e  **     SRT_Union
1cd60 20 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73         Store res
1cd70 75 6c 74 73 20 61 73 20 61 20 6b 65 79 20 69 6e  ults as a key in
1cd80 20 61 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64   a temporary ind
1cd90 65 78 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ex.**           
1cda0 20 20 20 20 20 20 20 20 20 20 69 64 65 6e 74 69            identi
1cdb0 66 69 65 64 20 62 79 20 70 44 65 73 74 2d 3e 69  fied by pDest->i
1cdc0 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20  SDParm..**.**   
1cdd0 20 20 53 52 54 5f 45 78 63 65 70 74 20 20 20 20    SRT_Except    
1cde0 20 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 73    Remove results
1cdf0 20 66 72 6f 6d 20 74 68 65 20 74 65 6d 70 6f 72   from the tempor
1ce00 61 72 79 20 69 6e 64 65 78 20 70 44 65 73 74 2d  ary index pDest-
1ce10 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20  >iSDParm..**.** 
1ce20 20 20 20 20 53 52 54 5f 45 78 69 73 74 73 20 20      SRT_Exists  
1ce30 20 20 20 20 53 74 6f 72 65 20 61 20 31 20 69 6e      Store a 1 in
1ce40 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 70 44 65   memory cell pDe
1ce50 73 74 2d 3e 69 53 44 50 61 72 6d 20 69 66 20 74  st->iSDParm if t
1ce60 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 20 20 20  he result.**    
1ce70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce80 20 73 65 74 20 69 73 20 6e 6f 74 20 65 6d 70 74   set is not empt
1ce90 79 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  y..**.**     SRT
1cea0 5f 44 69 73 63 61 72 64 20 20 20 20 20 54 68 72  _Discard     Thr
1ceb0 6f 77 20 74 68 65 20 72 65 73 75 6c 74 73 20 61  ow the results a
1cec0 77 61 79 2e 20 20 54 68 69 73 20 69 73 20 75 73  way.  This is us
1ced0 65 64 20 62 79 20 53 45 4c 45 43 54 0a 2a 2a 20  ed by SELECT.** 
1cee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cef0 20 20 20 20 73 74 61 74 65 6d 65 6e 74 73 20 77      statements w
1cf00 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 20 77  ithin triggers w
1cf10 68 6f 73 65 20 6f 6e 6c 79 20 70 75 72 70 6f 73  hose only purpos
1cf20 65 20 69 73 0a 2a 2a 20 20 20 20 20 20 20 20 20  e is.**         
1cf30 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
1cf40 73 69 64 65 2d 65 66 66 65 63 74 73 20 6f 66 20  side-effects of 
1cf50 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  functions..**.**
1cf60 20 41 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76   All of the abov
1cf70 65 20 61 72 65 20 66 72 65 65 20 74 6f 20 69 67  e are free to ig
1cf80 6e 6f 72 65 20 74 68 65 69 72 20 4f 52 44 45 52  nore their ORDER
1cf90 20 42 59 20 63 6c 61 75 73 65 2e 20 54 68 6f 73   BY clause. Thos
1cfa0 65 20 74 68 61 74 0a 2a 2a 20 66 6f 6c 6c 6f 77  e that.** follow
1cfb0 20 6d 75 73 74 20 68 6f 6e 6f 72 20 74 68 65 20   must honor the 
1cfc0 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e  ORDER BY clause.
1cfd0 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4f  .**.**     SRT_O
1cfe0 75 74 70 75 74 20 20 20 20 20 20 47 65 6e 65 72  utput      Gener
1cff0 61 74 65 20 61 20 72 6f 77 20 6f 66 20 6f 75 74  ate a row of out
1d000 70 75 74 20 28 75 73 69 6e 67 20 74 68 65 20 4f  put (using the O
1d010 50 5f 52 65 73 75 6c 74 52 6f 77 0a 2a 2a 20 20  P_ResultRow.**  
1d020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d030 20 20 20 6f 70 63 6f 64 65 29 20 66 6f 72 20 65     opcode) for e
1d040 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20 72  ach row in the r
1d050 65 73 75 6c 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a  esult set..**.**
1d060 20 20 20 20 20 53 52 54 5f 4d 65 6d 20 20 20 20       SRT_Mem    
1d070 20 20 20 20 20 4f 6e 6c 79 20 76 61 6c 69 64 20       Only valid 
1d080 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  if the result is
1d090 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e   a single column
1d0a0 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  ..**            
1d0b0 20 20 20 20 20 20 20 20 20 53 74 6f 72 65 20 74           Store t
1d0c0 68 65 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20  he first column 
1d0d0 6f 66 20 74 68 65 20 66 69 72 73 74 20 72 65 73  of the first res
1d0e0 75 6c 74 20 72 6f 77 0a 2a 2a 20 20 20 20 20 20  ult row.**      
1d0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1d100 6e 20 72 65 67 69 73 74 65 72 20 70 44 65 73 74  n register pDest
1d110 2d 3e 69 53 44 50 61 72 6d 20 74 68 65 6e 20 61  ->iSDParm then a
1d120 62 61 6e 64 6f 6e 20 74 68 65 20 72 65 73 74 0a  bandon the rest.
1d130 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1d140 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 71 75         of the qu
1d150 65 72 79 2e 20 20 54 68 69 73 20 64 65 73 74 69  ery.  This desti
1d160 6e 61 74 69 6f 6e 20 69 6d 70 6c 69 65 73 20 22  nation implies "
1d170 4c 49 4d 49 54 20 31 22 2e 0a 2a 2a 0a 2a 2a 20  LIMIT 1"..**.** 
1d180 20 20 20 20 53 52 54 5f 53 65 74 20 20 20 20 20      SRT_Set     
1d190 20 20 20 20 54 68 65 20 72 65 73 75 6c 74 20 6d      The result m
1d1a0 75 73 74 20 62 65 20 61 20 73 69 6e 67 6c 65 20  ust be a single 
1d1b0 63 6f 6c 75 6d 6e 2e 20 20 53 74 6f 72 65 20 65  column.  Store e
1d1c0 61 63 68 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ach.**          
1d1d0 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 20 6f             row o
1d1e0 66 20 72 65 73 75 6c 74 20 61 73 20 74 68 65 20  f result as the 
1d1f0 6b 65 79 20 69 6e 20 74 61 62 6c 65 20 70 44 65  key in table pDe
1d200 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20  st->iSDParm..** 
1d210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d220 20 20 20 20 41 70 70 6c 79 20 74 68 65 20 61 66      Apply the af
1d230 66 69 6e 69 74 79 20 70 44 65 73 74 2d 3e 61 66  finity pDest->af
1d240 66 53 64 73 74 20 62 65 66 6f 72 65 20 73 74 6f  fSdst before sto
1d250 72 69 6e 67 0a 2a 2a 20 20 20 20 20 20 20 20 20  ring.**         
1d260 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
1d270 6c 74 73 2e 20 20 55 73 65 64 20 74 6f 20 69 6d  lts.  Used to im
1d280 70 6c 65 6d 65 6e 74 20 22 49 4e 20 28 53 45 4c  plement "IN (SEL
1d290 45 43 54 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a  ECT ...)"..**.**
1d2a0 20 20 20 20 20 53 52 54 5f 45 70 68 65 6d 54 61       SRT_EphemTa
1d2b0 62 20 20 20 20 43 72 65 61 74 65 20 61 6e 20 74  b    Create an t
1d2c0 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70  emporary table p
1d2d0 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 61 6e  Dest->iSDParm an
1d2e0 64 20 73 74 6f 72 65 0a 2a 2a 20 20 20 20 20 20  d store.**      
1d2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1d300 68 65 20 72 65 73 75 6c 74 20 74 68 65 72 65 2e  he result there.
1d310 20 54 68 65 20 63 75 72 73 6f 72 20 69 73 20 6c   The cursor is l
1d320 65 66 74 20 6f 70 65 6e 20 61 66 74 65 72 0a 2a  eft open after.*
1d330 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1d340 20 20 20 20 20 20 72 65 74 75 72 6e 69 6e 67 2e        returning.
1d350 20 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53    This is like S
1d360 52 54 5f 54 61 62 6c 65 20 65 78 63 65 70 74 20  RT_Table except 
1d370 74 68 61 74 0a 2a 2a 20 20 20 20 20 20 20 20 20  that.**         
1d380 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
1d390 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 75 73 65   destination use
1d3a0 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  s OP_OpenEphemer
1d3b0 61 6c 20 74 6f 20 63 72 65 61 74 65 0a 2a 2a 20  al to create.** 
1d3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d3d0 20 20 20 20 74 68 65 20 74 61 62 6c 65 20 66 69      the table fi
1d3e0 72 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  rst..**.**     S
1d3f0 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 47  RT_Coroutine   G
1d400 65 6e 65 72 61 74 65 20 61 20 63 6f 2d 72 6f 75  enerate a co-rou
1d410 74 69 6e 65 20 74 68 61 74 20 72 65 74 75 72 6e  tine that return
1d420 73 20 61 20 6e 65 77 20 72 6f 77 20 6f 66 0a 2a  s a new row of.*
1d430 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1d440 20 20 20 20 20 20 72 65 73 75 6c 74 73 20 65 61        results ea
1d450 63 68 20 74 69 6d 65 20 69 74 20 69 73 20 69 6e  ch time it is in
1d460 76 6f 6b 65 64 2e 20 20 54 68 65 20 65 6e 74 72  voked.  The entr
1d470 79 20 70 6f 69 6e 74 0a 2a 2a 20 20 20 20 20 20  y point.**      
1d480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
1d490 66 20 74 68 65 20 63 6f 2d 72 6f 75 74 69 6e 65  f the co-routine
1d4a0 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
1d4b0 67 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53  gister pDest->iS
1d4c0 44 50 61 72 6d 0a 2a 2a 20 20 20 20 20 20 20 20  DParm.**        
1d4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 61 6e 64               and
1d4e0 20 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77 20   the result row 
1d4f0 69 73 20 73 74 6f 72 65 64 20 69 6e 20 70 44 65  is stored in pDe
1d500 73 74 2d 3e 6e 44 65 73 74 20 72 65 67 69 73 74  st->nDest regist
1d510 65 72 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ers.**          
1d520 20 20 20 20 20 20 20 20 20 20 20 73 74 61 72 74             start
1d530 69 6e 67 20 77 69 74 68 20 70 44 65 73 74 2d 3e  ing with pDest->
1d540 69 53 64 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  iSdst..**.**    
1d550 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20   SRT_Table      
1d560 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69   Store results i
1d570 6e 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  n temporary tabl
1d580 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
1d590 2e 0a 2a 2a 20 20 20 20 20 53 52 54 5f 46 69 66  ..**     SRT_Fif
1d5a0 6f 20 20 20 20 20 20 20 20 54 68 69 73 20 69 73  o        This is
1d5b0 20 6c 69 6b 65 20 53 52 54 5f 45 70 68 65 6d 54   like SRT_EphemT
1d5c0 61 62 20 65 78 63 65 70 74 20 74 68 61 74 20 74  ab except that t
1d5d0 68 65 20 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20  he table.**     
1d5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d5f0 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20 61 6c  is assumed to al
1d600 72 65 61 64 79 20 62 65 20 6f 70 65 6e 2e 20 20  ready be open.  
1d610 53 52 54 5f 46 69 66 6f 20 68 61 73 0a 2a 2a 20  SRT_Fifo has.** 
1d620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d630 20 20 20 20 74 68 65 20 61 64 64 69 74 69 6f 6e      the addition
1d640 61 6c 20 70 72 6f 70 65 72 74 79 20 6f 66 20 62  al property of b
1d650 65 69 6e 67 20 61 62 6c 65 20 74 6f 20 69 67 6e  eing able to ign
1d660 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ore.**          
1d670 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 4f             the O
1d680 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a  RDER BY clause..
1d690 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69  **.**     SRT_Di
1d6a0 73 74 46 69 66 6f 20 20 20 20 53 74 6f 72 65 20  stFifo    Store 
1d6b0 72 65 73 75 6c 74 73 20 69 6e 20 61 20 74 65 6d  results in a tem
1d6c0 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65  porary table pDe
1d6d0 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20  st->iSDParm..** 
1d6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d6f0 20 20 20 20 42 75 74 20 61 6c 73 6f 20 75 73 65      But also use
1d700 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
1d710 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b   pDest->iSDParm+
1d720 31 20 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20  1 as.**         
1d730 20 20 20 20 20 20 20 20 20 20 20 20 61 20 72 65              a re
1d740 63 6f 72 64 20 6f 66 20 61 6c 6c 20 70 72 69 6f  cord of all prio
1d750 72 20 72 65 73 75 6c 74 73 20 61 6e 64 20 69 67  r results and ig
1d760 6e 6f 72 65 20 61 6e 79 20 64 75 70 6c 69 63 61  nore any duplica
1d770 74 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  te.**           
1d780 20 20 20 20 20 20 20 20 20 20 72 6f 77 73 2e 20            rows. 
1d790 20 4e 61 6d 65 20 6d 65 61 6e 73 3a 20 20 22 44   Name means:  "D
1d7a0 69 73 74 69 6e 63 74 20 46 69 66 6f 22 2e 0a 2a  istinct Fifo"..*
1d7b0 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 51 75 65  *.**     SRT_Que
1d7c0 75 65 20 20 20 20 20 20 20 53 74 6f 72 65 20 72  ue       Store r
1d7d0 65 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69  esults in priori
1d7e0 74 79 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e  ty queue pDest->
1d7f0 69 53 44 50 61 72 6d 20 28 72 65 61 6c 6c 79 0a  iSDParm (really.
1d800 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1d810 20 20 20 20 20 20 20 61 6e 20 69 6e 64 65 78 29         an index)
1d820 2e 20 20 41 70 70 65 6e 64 20 61 20 73 65 71 75  .  Append a sequ
1d830 65 6e 63 65 20 6e 75 6d 62 65 72 20 73 6f 20 74  ence number so t
1d840 68 61 74 20 61 6c 6c 20 65 6e 74 72 69 65 73 0a  hat all entries.
1d850 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1d860 20 20 20 20 20 20 20 61 72 65 20 64 69 73 74 69         are disti
1d870 6e 63 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  nct..**.**     S
1d880 52 54 5f 44 69 73 74 51 75 65 75 65 20 20 20 53  RT_DistQueue   S
1d890 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20  tore results in 
1d8a0 70 72 69 6f 72 69 74 79 20 71 75 65 75 65 20 70  priority queue p
1d8b0 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 6f 6e  Dest->iSDParm on
1d8c0 6c 79 20 69 66 0a 2a 2a 20 20 20 20 20 20 20 20  ly if.**        
1d8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
1d8e0 20 73 61 6d 65 20 72 65 63 6f 72 64 20 68 61 73   same record has
1d8f0 20 6e 65 76 65 72 20 62 65 65 6e 20 73 74 6f 72   never been stor
1d900 65 64 20 62 65 66 6f 72 65 2e 20 20 54 68 65 0a  ed before.  The.
1d910 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1d920 20 20 20 20 20 20 20 69 6e 64 65 78 20 61 74 20         index at 
1d930 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31  pDest->iSDParm+1
1d940 20 68 6f 6c 64 20 61 6c 6c 20 70 72 69 6f 72 20   hold all prior 
1d950 73 74 6f 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69  stores..*/.#defi
1d960 6e 65 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20  ne SRT_Union    
1d970 20 20 20 20 31 20 20 2f 2a 20 53 74 6f 72 65 20      1  /* Store 
1d980 72 65 73 75 6c 74 20 61 73 20 6b 65 79 73 20 69  result as keys i
1d990 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64  n an index */.#d
1d9a0 65 66 69 6e 65 20 53 52 54 5f 45 78 63 65 70 74  efine SRT_Except
1d9b0 20 20 20 20 20 20 20 32 20 20 2f 2a 20 52 65 6d         2  /* Rem
1d9c0 6f 76 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20  ove result from 
1d9d0 61 20 55 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f  a UNION index */
1d9e0 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78 69  .#define SRT_Exi
1d9f0 73 74 73 20 20 20 20 20 20 20 33 20 20 2f 2a 20  sts       3  /* 
1da00 53 74 6f 72 65 20 31 20 69 66 20 74 68 65 20 72  Store 1 if the r
1da10 65 73 75 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70  esult is not emp
1da20 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ty */.#define SR
1da30 54 5f 44 69 73 63 61 72 64 20 20 20 20 20 20 34  T_Discard      4
1da40 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65    /* Do not save
1da50 20 74 68 65 20 72 65 73 75 6c 74 73 20 61 6e 79   the results any
1da60 77 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65  where */.#define
1da70 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20   SRT_Fifo       
1da80 20 20 35 20 20 2f 2a 20 53 74 6f 72 65 20 72 65    5  /* Store re
1da90 73 75 6c 74 20 61 73 20 64 61 74 61 20 77 69 74  sult as data wit
1daa0 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72  h an automatic r
1dab0 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owid */.#define 
1dac0 53 52 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20  SRT_DistFifo    
1dad0 20 36 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f   6  /* Like SRT_
1dae0 46 69 66 6f 2c 20 62 75 74 20 75 6e 69 71 75 65  Fifo, but unique
1daf0 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f   results only */
1db00 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 51 75 65  .#define SRT_Que
1db10 75 65 20 20 20 20 20 20 20 20 37 20 20 2f 2a 20  ue        7  /* 
1db20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20  Store result in 
1db30 61 6e 20 71 75 65 75 65 20 2a 2f 0a 23 64 65 66  an queue */.#def
1db40 69 6e 65 20 53 52 54 5f 44 69 73 74 51 75 65 75  ine SRT_DistQueu
1db50 65 20 20 20 20 38 20 20 2f 2a 20 4c 69 6b 65 20  e    8  /* Like 
1db60 53 52 54 5f 51 75 65 75 65 2c 20 62 75 74 20 75  SRT_Queue, but u
1db70 6e 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e  nique results on
1db80 6c 79 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52  ly */../* The OR
1db90 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 69 73  DER BY clause is
1dba0 20 69 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c   ignored for all
1dbb0 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 2a 2f   of the above */
1dbc0 0a 23 64 65 66 69 6e 65 20 49 67 6e 6f 72 61 62  .#define Ignorab
1dbd0 6c 65 4f 72 64 65 72 62 79 28 58 29 20 28 28 58  leOrderby(X) ((X
1dbe0 2d 3e 65 44 65 73 74 29 3c 3d 53 52 54 5f 44 69  ->eDest)<=SRT_Di
1dbf0 73 74 51 75 65 75 65 29 0a 0a 23 64 65 66 69 6e  stQueue)..#defin
1dc00 65 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20  e SRT_Output    
1dc10 20 20 20 39 20 20 2f 2a 20 4f 75 74 70 75 74 20     9  /* Output 
1dc20 65 61 63 68 20 72 6f 77 20 6f 66 20 72 65 73 75  each row of resu
1dc30 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  lt */.#define SR
1dc40 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 31 30  T_Mem         10
1dc50 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
1dc60 74 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65  t in a memory ce
1dc70 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ll */.#define SR
1dc80 54 5f 53 65 74 20 20 20 20 20 20 20 20 20 31 31  T_Set         11
1dc90 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
1dca0 74 73 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e  ts as keys in an
1dcb0 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
1dcc0 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20  e SRT_EphemTab  
1dcd0 20 20 31 32 20 20 2f 2a 20 43 72 65 61 74 65 20    12  /* Create 
1dce0 74 72 61 6e 73 69 65 6e 74 20 74 61 62 20 61 6e  transient tab an
1dcf0 64 20 73 74 6f 72 65 20 6c 69 6b 65 20 53 52 54  d store like SRT
1dd00 5f 54 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e  _Table */.#defin
1dd10 65 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20  e SRT_Coroutine 
1dd20 20 20 31 33 20 20 2f 2a 20 47 65 6e 65 72 61 74    13  /* Generat
1dd30 65 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f  e a single row o
1dd40 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66  f result */.#def
1dd50 69 6e 65 20 53 52 54 5f 54 61 62 6c 65 20 20 20  ine SRT_Table   
1dd60 20 20 20 20 31 34 20 20 2f 2a 20 53 74 6f 72 65      14  /* Store
1dd70 20 72 65 73 75 6c 74 20 61 73 20 64 61 74 61 20   result as data 
1dd80 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69  with an automati
1dd90 63 20 72 6f 77 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a  c rowid */../*.*
1dda0 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
1ddb0 20 74 68 69 73 20 6f 62 6a 65 63 74 20 64 65 73   this object des
1ddc0 63 72 69 62 65 73 20 77 68 65 72 65 20 74 6f 20  cribes where to 
1ddd0 70 75 74 20 6f 66 20 74 68 65 20 72 65 73 75 6c  put of the resul
1dde0 74 73 20 6f 66 0a 2a 2a 20 61 20 53 45 4c 45 43  ts of.** a SELEC
1ddf0 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a  T statement..*/.
1de00 73 74 72 75 63 74 20 53 65 6c 65 63 74 44 65 73  struct SelectDes
1de10 74 20 7b 0a 20 20 75 38 20 65 44 65 73 74 3b 20  t {.  u8 eDest; 
1de20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 6f             /* Ho
1de30 77 20 74 6f 20 64 69 73 70 6f 73 65 20 6f 66 20  w to dispose of 
1de40 74 68 65 20 72 65 73 75 6c 74 73 2e 20 20 4f 6e  the results.  On
1de50 20 6f 66 20 53 52 54 5f 2a 20 61 62 6f 76 65 2e   of SRT_* above.
1de60 20 2a 2f 0a 20 20 69 6e 74 20 69 53 44 50 61 72   */.  int iSDPar
1de70 6d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20  m;         /* A 
1de80 70 61 72 61 6d 65 74 65 72 20 75 73 65 64 20 62  parameter used b
1de90 79 20 74 68 65 20 65 44 65 73 74 20 64 69 73 70  y the eDest disp
1dea0 6f 73 61 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a 20  osal method */. 
1deb0 20 69 6e 74 20 69 53 64 73 74 3b 20 20 20 20 20   int iSdst;     
1dec0 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65        /* Base re
1ded0 67 69 73 74 65 72 20 77 68 65 72 65 20 72 65 73  gister where res
1dee0 75 6c 74 73 20 61 72 65 20 77 72 69 74 74 65 6e  ults are written
1def0 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 64 73 74 3b   */.  int nSdst;
1df00 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1df10 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74 65 72  mber of register
1df20 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20  s allocated */. 
1df30 20 63 68 61 72 20 2a 7a 41 66 66 53 64 73 74 3b   char *zAffSdst;
1df40 20 20 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74        /* Affinit
1df50 79 20 75 73 65 64 20 77 68 65 6e 20 65 44 65 73  y used when eDes
1df60 74 3d 3d 53 52 54 5f 53 65 74 20 2a 2f 0a 20 20  t==SRT_Set */.  
1df70 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72  ExprList *pOrder
1df80 42 79 3b 20 20 2f 2a 20 4b 65 79 20 63 6f 6c 75  By;  /* Key colu
1df90 6d 6e 73 20 66 6f 72 20 53 52 54 5f 51 75 65 75  mns for SRT_Queu
1dfa0 65 20 61 6e 64 20 53 52 54 5f 44 69 73 74 51 75  e and SRT_DistQu
1dfb0 65 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  eue */.};../*.**
1dfc0 20 44 75 72 69 6e 67 20 63 6f 64 65 20 67 65 6e   During code gen
1dfd0 65 72 61 74 69 6f 6e 20 6f 66 20 73 74 61 74 65  eration of state
1dfe0 6d 65 6e 74 73 20 74 68 61 74 20 64 6f 20 69 6e  ments that do in
1dff0 73 65 72 74 73 20 69 6e 74 6f 20 41 55 54 4f 49  serts into AUTOI
1e000 4e 43 52 45 4d 45 4e 54 0a 2a 2a 20 74 61 62 6c  NCREMENT.** tabl
1e010 65 73 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  es, the followin
1e020 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73  g information is
1e030 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65   attached to the
1e040 20 54 61 62 6c 65 2e 75 2e 61 75 74 6f 49 6e 63   Table.u.autoInc
1e050 2e 70 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 6f 66  .p.** pointer of
1e060 20 65 61 63 68 20 61 75 74 6f 69 6e 63 72 65 6d   each autoincrem
1e070 65 6e 74 20 74 61 62 6c 65 20 74 6f 20 72 65 63  ent table to rec
1e080 6f 72 64 20 73 6f 6d 65 20 73 69 64 65 20 69 6e  ord some side in
1e090 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 0a 2a  formation that.*
1e0a0 2a 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72  * the code gener
1e0b0 61 74 6f 72 20 6e 65 65 64 73 2e 20 20 57 65 20  ator needs.  We 
1e0c0 68 61 76 65 20 74 6f 20 6b 65 65 70 20 70 65 72  have to keep per
1e0d0 2d 74 61 62 6c 65 20 61 75 74 6f 69 6e 63 72 65  -table autoincre
1e0e0 6d 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74  ment.** informat
1e0f0 69 6f 6e 20 69 6e 20 63 61 73 65 20 69 6e 73 65  ion in case inse
1e100 72 74 73 20 61 72 65 20 64 6f 6e 65 20 77 69 74  rts are done wit
1e110 68 69 6e 20 74 72 69 67 67 65 72 73 2e 20 20 54  hin triggers.  T
1e120 72 69 67 67 65 72 73 20 64 6f 20 6e 6f 74 0a 2a  riggers do not.*
1e130 2a 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72 64  * normally coord
1e140 69 6e 61 74 65 20 74 68 65 69 72 20 61 63 74 69  inate their acti
1e150 76 69 74 69 65 73 2c 20 62 75 74 20 77 65 20 64  vities, but we d
1e160 6f 20 6e 65 65 64 20 74 6f 20 63 6f 6f 72 64 69  o need to coordi
1e170 6e 61 74 65 20 74 68 65 0a 2a 2a 20 6c 6f 61 64  nate the.** load
1e180 69 6e 67 20 61 6e 64 20 73 61 76 69 6e 67 20 6f  ing and saving o
1e190 66 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20  f autoincrement 
1e1a0 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
1e1b0 73 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e  struct AutoincIn
1e1c0 66 6f 20 7b 0a 20 20 41 75 74 6f 69 6e 63 49 6e  fo {.  AutoincIn
1e1d0 66 6f 20 2a 70 4e 65 78 74 3b 20 20 20 2f 2a 20  fo *pNext;   /* 
1e1e0 4e 65 78 74 20 69 6e 66 6f 20 62 6c 6f 63 6b 20  Next info block 
1e1f0 69 6e 20 61 20 6c 69 73 74 20 6f 66 20 74 68 65  in a list of the
1e200 6d 20 61 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c 65  m all */.  Table
1e210 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20   *pTab;         
1e220 20 2f 2a 20 54 61 62 6c 65 20 74 68 69 73 20 69   /* Table this i
1e230 6e 66 6f 20 62 6c 6f 63 6b 20 72 65 66 65 72 73  nfo block refers
1e240 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62   to */.  int iDb
1e250 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
1e260 2a 20 49 6e 64 65 78 20 69 6e 20 73 71 6c 69 74  * Index in sqlit
1e270 65 33 2e 61 44 62 5b 5d 20 6f 66 20 64 61 74 61  e3.aDb[] of data
1e280 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 70 54 61  base holding pTa
1e290 62 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 43 74  b */.  int regCt
1e2a0 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  r;           /* 
1e2b0 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 20  Memory register 
1e2c0 68 6f 6c 64 69 6e 67 20 74 68 65 20 72 6f 77 69  holding the rowi
1e2d0 64 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b 0a  d counter */.};.
1e2e0 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 20 6f 66 20 74  ./*.** Size of t
1e2f0 68 65 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 0a  he column cache.
1e300 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
1e310 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 0a 23 20 64  E_N_COLCACHE.# d
1e320 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 43  efine SQLITE_N_C
1e330 4f 4c 43 41 43 48 45 20 31 30 0a 23 65 6e 64 69  OLCACHE 10.#endi
1e340 66 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61 73  f../*.** At leas
1e350 74 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f  t one instance o
1e360 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
1e370 73 74 72 75 63 74 75 72 65 20 69 73 20 63 72 65  structure is cre
1e380 61 74 65 64 20 66 6f 72 20 65 61 63 68 0a 2a 2a  ated for each.**
1e390 20 74 72 69 67 67 65 72 20 74 68 61 74 20 6d 61   trigger that ma
1e3a0 79 20 62 65 20 66 69 72 65 64 20 77 68 69 6c 65  y be fired while
1e3b0 20 70 61 72 73 69 6e 67 20 61 6e 20 49 4e 53 45   parsing an INSE
1e3c0 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44 45  RT, UPDATE or DE
1e3d0 4c 45 54 45 0a 2a 2a 20 73 74 61 74 65 6d 65 6e  LETE.** statemen
1e3e0 74 2e 20 41 6c 6c 20 73 75 63 68 20 6f 62 6a 65  t. All such obje
1e3f0 63 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69  cts are stored i
1e400 6e 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73  n the linked lis
1e410 74 20 68 65 61 64 65 64 20 61 74 0a 2a 2a 20 50  t headed at.** P
1e420 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67  arse.pTriggerPrg
1e430 20 61 6e 64 20 64 65 6c 65 74 65 64 20 6f 6e 63   and deleted onc
1e440 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d 70  e statement comp
1e450 69 6c 61 74 69 6f 6e 20 68 61 73 20 62 65 65 6e  ilation has been
1e460 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a  .** completed..*
1e470 2a 0a 2a 2a 20 41 20 56 64 62 65 20 73 75 62 2d  *.** A Vdbe sub-
1e480 70 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6d 70  program that imp
1e490 6c 65 6d 65 6e 74 73 20 74 68 65 20 62 6f 64 79  lements the body
1e4a0 20 61 6e 64 20 57 48 45 4e 20 63 6c 61 75 73 65   and WHEN clause
1e4b0 20 6f 66 20 74 72 69 67 67 65 72 0a 2a 2a 20 54   of trigger.** T
1e4c0 72 69 67 67 65 72 50 72 67 2e 70 54 72 69 67 67  riggerPrg.pTrigg
1e4d0 65 72 2c 20 61 73 73 75 6d 69 6e 67 20 61 20 64  er, assuming a d
1e4e0 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49  efault ON CONFLI
1e4f0 43 54 20 63 6c 61 75 73 65 20 6f 66 0a 2a 2a 20  CT clause of.** 
1e500 54 72 69 67 67 65 72 50 72 67 2e 6f 72 63 6f 6e  TriggerPrg.orcon
1e510 66 2c 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  f, is stored in 
1e520 74 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 70  the TriggerPrg.p
1e530 50 72 6f 67 72 61 6d 20 76 61 72 69 61 62 6c 65  Program variable
1e540 2e 0a 2a 2a 20 54 68 65 20 50 61 72 73 65 2e 70  ..** The Parse.p
1e550 54 72 69 67 67 65 72 50 72 67 20 6c 69 73 74 20  TriggerPrg list 
1e560 6e 65 76 65 72 20 63 6f 6e 74 61 69 6e 73 20 74  never contains t
1e570 77 6f 20 65 6e 74 72 69 65 73 20 77 69 74 68 20  wo entries with 
1e580 74 68 65 20 73 61 6d 65 0a 2a 2a 20 76 61 6c 75  the same.** valu
1e590 65 73 20 66 6f 72 20 62 6f 74 68 20 70 54 72 69  es for both pTri
1e5a0 67 67 65 72 20 61 6e 64 20 6f 72 63 6f 6e 66 2e  gger and orconf.
1e5b0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 54 72 69 67 67  .**.** The Trigg
1e5c0 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30  erPrg.aColmask[0
1e5d0 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65  ] variable is se
1e5e0 74 20 74 6f 20 61 20 6d 61 73 6b 20 6f 66 20 6f  t to a mask of o
1e5f0 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20  ld.* columns.** 
1e600 61 63 63 65 73 73 65 64 20 28 6f 72 20 73 65 74  accessed (or set
1e610 20 74 6f 20 30 20 66 6f 72 20 74 72 69 67 67 65   to 0 for trigge
1e620 72 73 20 66 69 72 65 64 20 61 73 20 61 20 72 65  rs fired as a re
1e630 73 75 6c 74 20 6f 66 20 49 4e 53 45 52 54 0a 2a  sult of INSERT.*
1e640 2a 20 73 74 61 74 65 6d 65 6e 74 73 29 2e 20 53  * statements). S
1e650 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20 54 72  imilarly, the Tr
1e660 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73  iggerPrg.aColmas
1e670 6b 5b 31 5d 20 76 61 72 69 61 62 6c 65 20 69 73  k[1] variable is
1e680 20 73 65 74 20 74 6f 0a 2a 2a 20 61 20 6d 61 73   set to.** a mas
1e690 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d  k of new.* colum
1e6a0 6e 73 20 75 73 65 64 20 62 79 20 74 68 65 20 70  ns used by the p
1e6b0 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72 75 63  rogram..*/.struc
1e6c0 74 20 54 72 69 67 67 65 72 50 72 67 20 7b 0a 20  t TriggerPrg {. 
1e6d0 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 67   Trigger *pTrigg
1e6e0 65 72 3b 20 20 20 20 20 20 2f 2a 20 54 72 69 67  er;      /* Trig
1e6f0 67 65 72 20 74 68 69 73 20 70 72 6f 67 72 61 6d  ger this program
1e700 20 77 61 73 20 63 6f 64 65 64 20 66 72 6f 6d 20   was coded from 
1e710 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67 20  */.  TriggerPrg 
1e720 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20  *pNext;      /* 
1e730 4e 65 78 74 20 65 6e 74 72 79 20 69 6e 20 50 61  Next entry in Pa
1e740 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20  rse.pTriggerPrg 
1e750 6c 69 73 74 20 2a 2f 0a 20 20 53 75 62 50 72 6f  list */.  SubPro
1e760 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20  gram *pProgram; 
1e770 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20 69 6d 70    /* Program imp
1e780 6c 65 6d 65 6e 74 69 6e 67 20 70 54 72 69 67 67  lementing pTrigg
1e790 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a 20 20 69  er/orconf */.  i
1e7a0 6e 74 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20  nt orconf;      
1e7b0 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
1e7c0 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f  t ON CONFLICT po
1e7d0 6c 69 63 79 20 2a 2f 0a 20 20 75 33 32 20 61 43  licy */.  u32 aC
1e7e0 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20 20 20 20  olmask[2];      
1e7f0 20 20 2f 2a 20 4d 61 73 6b 73 20 6f 66 20 6f 6c    /* Masks of ol
1e800 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d  d.*, new.* colum
1e810 6e 73 20 61 63 63 65 73 73 65 64 20 2a 2f 0a 7d  ns accessed */.}
1e820 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79 44 62  ;../*.** The yDb
1e830 4d 61 73 6b 20 64 61 74 61 74 79 70 65 20 66 6f  Mask datatype fo
1e840 72 20 74 68 65 20 62 69 74 6d 61 73 6b 20 6f 66  r the bitmask of
1e850 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61   all attached da
1e860 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 69 66 20  tabases..*/.#if 
1e870 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43  SQLITE_MAX_ATTAC
1e880 48 45 44 3e 33 30 0a 20 20 74 79 70 65 64 65 66  HED>30.  typedef
1e890 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 79   unsigned char y
1e8a0 44 62 4d 61 73 6b 5b 28 53 51 4c 49 54 45 5f 4d  DbMask[(SQLITE_M
1e8b0 41 58 5f 41 54 54 41 43 48 45 44 2b 39 29 2f 38  AX_ATTACHED+9)/8
1e8c0 5d 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  ];.# define DbMa
1e8d0 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20 28  skTest(M,I)    (
1e8e0 28 28 4d 29 5b 28 49 29 2f 38 5d 26 28 31 3c 3c  ((M)[(I)/8]&(1<<
1e8f0 28 28 49 29 26 37 29 29 29 21 3d 30 29 0a 23 20  ((I)&7)))!=0).# 
1e900 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72  define DbMaskZer
1e910 6f 28 4d 29 20 20 20 20 20 20 6d 65 6d 73 65 74  o(M)      memset
1e920 28 28 4d 29 2c 30 2c 73 69 7a 65 6f 66 28 4d 29  ((M),0,sizeof(M)
1e930 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ).# define DbMas
1e940 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28 4d  kSet(M,I)     (M
1e950 29 5b 28 49 29 2f 38 5d 7c 3d 28 31 3c 3c 28 28  )[(I)/8]|=(1<<((
1e960 49 29 26 37 29 29 0a 23 20 64 65 66 69 6e 65 20  I)&7)).# define 
1e970 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29  DbMaskAllZero(M)
1e980 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b     sqlite3DbMask
1e990 41 6c 6c 5a 65 72 6f 28 4d 29 0a 23 20 64 65 66  AllZero(M).# def
1e9a0 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72  ine DbMaskNonZer
1e9b0 6f 28 4d 29 20 20 20 28 73 71 6c 69 74 65 33 44  o(M)   (sqlite3D
1e9c0 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 3d  bMaskAllZero(M)=
1e9d0 3d 30 29 0a 23 65 6c 73 65 0a 20 20 74 79 70 65  =0).#else.  type
1e9e0 64 65 66 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  def unsigned int
1e9f0 20 79 44 62 4d 61 73 6b 3b 0a 23 20 64 65 66 69   yDbMask;.# defi
1ea00 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c  ne DbMaskTest(M,
1ea10 49 29 20 20 20 20 28 28 28 4d 29 26 28 28 28 79  I)    (((M)&(((y
1ea20 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29 29  DbMask)1)<<(I)))
1ea30 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62  !=0).# define Db
1ea40 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20  MaskZero(M)     
1ea50 20 28 4d 29 3d 30 0a 23 20 64 65 66 69 6e 65 20   (M)=0.# define 
1ea60 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20 20  DbMaskSet(M,I)  
1ea70 20 20 20 28 4d 29 7c 3d 28 28 28 79 44 62 4d 61     (M)|=(((yDbMa
1ea80 73 6b 29 31 29 3c 3c 28 49 29 29 0a 23 20 64 65  sk)1)<<(I)).# de
1ea90 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65  fine DbMaskAllZe
1eaa0 72 6f 28 4d 29 20 20 20 28 4d 29 3d 3d 30 0a 23  ro(M)   (M)==0.#
1eab0 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f   define DbMaskNo
1eac0 6e 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 21 3d  nZero(M)   (M)!=
1ead0 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
1eae0 41 6e 20 53 51 4c 20 70 61 72 73 65 72 20 63 6f  An SQL parser co
1eaf0 6e 74 65 78 74 2e 20 20 41 20 63 6f 70 79 20 6f  ntext.  A copy o
1eb00 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
1eb10 20 69 73 20 70 61 73 73 65 64 20 74 68 72 6f 75   is passed throu
1eb20 67 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 72  gh.** the parser
1eb30 20 61 6e 64 20 64 6f 77 6e 20 69 6e 74 6f 20 61   and down into a
1eb40 6c 6c 20 74 68 65 20 70 61 72 73 65 72 20 61 63  ll the parser ac
1eb50 74 69 6f 6e 20 72 6f 75 74 69 6e 65 20 69 6e 20  tion routine in 
1eb60 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63 61 72 72  order to.** carr
1eb70 79 20 61 72 6f 75 6e 64 20 69 6e 66 6f 72 6d 61  y around informa
1eb80 74 69 6f 6e 20 74 68 61 74 20 69 73 20 67 6c 6f  tion that is glo
1eb90 62 61 6c 20 74 6f 20 74 68 65 20 65 6e 74 69 72  bal to the entir
1eba0 65 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20 54  e parse..**.** T
1ebb0 68 65 20 73 74 72 75 63 74 75 72 65 20 69 73 20  he structure is 
1ebc0 64 69 76 69 64 65 64 20 69 6e 74 6f 20 74 77 6f  divided into two
1ebd0 20 70 61 72 74 73 2e 20 20 57 68 65 6e 20 74 68   parts.  When th
1ebe0 65 20 70 61 72 73 65 72 20 61 6e 64 20 63 6f 64  e parser and cod
1ebf0 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 63 61  e.** generate ca
1ec00 6c 6c 20 74 68 65 6d 73 65 6c 76 65 73 20 72 65  ll themselves re
1ec10 63 75 72 73 69 76 65 6c 79 2c 20 74 68 65 20 66  cursively, the f
1ec20 69 72 73 74 20 70 61 72 74 20 6f 66 20 74 68 65  irst part of the
1ec30 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 69 73   structure.** is
1ec40 20 63 6f 6e 73 74 61 6e 74 20 62 75 74 20 74 68   constant but th
1ec50 65 20 73 65 63 6f 6e 64 20 70 61 72 74 20 69 73  e second part is
1ec60 20 72 65 73 65 74 20 61 74 20 74 68 65 20 62 65   reset at the be
1ec70 67 69 6e 6e 69 6e 67 20 61 6e 64 20 65 6e 64 20  ginning and end 
1ec80 6f 66 0a 2a 2a 20 65 61 63 68 20 72 65 63 75 72  of.** each recur
1ec90 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  sion..**.** The 
1eca0 6e 54 61 62 6c 65 4c 6f 63 6b 20 61 6e 64 20 61  nTableLock and a
1ecb0 54 61 62 6c 65 4c 6f 63 6b 20 76 61 72 69 61 62  TableLock variab
1ecc0 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73 65  les are only use
1ecd0 64 20 69 66 20 74 68 65 20 73 68 61 72 65 64 2d  d if the shared-
1ece0 63 61 63 68 65 0a 2a 2a 20 66 65 61 74 75 72 65  cache.** feature
1ecf0 20 69 73 20 65 6e 61 62 6c 65 64 20 28 69 66 20   is enabled (if 
1ed00 73 71 6c 69 74 65 33 54 73 64 28 29 2d 3e 75 73  sqlite3Tsd()->us
1ed10 65 53 68 61 72 65 64 44 61 74 61 20 69 73 20 74  eSharedData is t
1ed20 72 75 65 29 2e 20 54 68 65 79 20 61 72 65 0a 2a  rue). They are.*
1ed30 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  * used to store 
1ed40 74 68 65 20 73 65 74 20 6f 66 20 74 61 62 6c 65  the set of table
1ed50 2d 6c 6f 63 6b 73 20 72 65 71 75 69 72 65 64 20  -locks required 
1ed60 62 79 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  by the statement
1ed70 20 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70 69 6c   being.** compil
1ed80 65 64 2e 20 46 75 6e 63 74 69 6f 6e 20 73 71 6c  ed. Function sql
1ed90 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 29 20  ite3TableLock() 
1eda0 69 73 20 75 73 65 64 20 74 6f 20 61 64 64 20 65  is used to add e
1edb0 6e 74 72 69 65 73 20 74 6f 20 74 68 65 0a 2a 2a  ntries to the.**
1edc0 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72 75 63 74   list..*/.struct
1edd0 20 50 61 72 73 65 20 7b 0a 20 20 73 71 6c 69 74   Parse {.  sqlit
1ede0 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20  e3 *db;         
1edf0 2f 2a 20 54 68 65 20 6d 61 69 6e 20 64 61 74 61  /* The main data
1ee00 62 61 73 65 20 73 74 72 75 63 74 75 72 65 20 2a  base structure *
1ee10 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73  /.  char *zErrMs
1ee20 67 3b 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65  g;       /* An e
1ee30 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a  rror message */.
1ee40 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20 20    Vdbe *pVdbe;  
1ee50 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 6e 67         /* An eng
1ee60 69 6e 65 20 66 6f 72 20 65 78 65 63 75 74 69 6e  ine for executin
1ee70 67 20 64 61 74 61 62 61 73 65 20 62 79 74 65 63  g database bytec
1ee80 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b  ode */.  int rc;
1ee90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1eea0 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f   Return code fro
1eeb0 6d 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 20  m execution */. 
1eec0 20 75 38 20 63 6f 6c 4e 61 6d 65 73 53 65 74 3b   u8 colNamesSet;
1eed0 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20 61 66        /* TRUE af
1eee0 74 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d  ter OP_ColumnNam
1eef0 65 20 68 61 73 20 62 65 65 6e 20 69 73 73 75 65  e has been issue
1ef00 64 20 74 6f 20 70 56 64 62 65 20 2a 2f 0a 20 20  d to pVdbe */.  
1ef10 75 38 20 63 68 65 63 6b 53 63 68 65 6d 61 3b 20  u8 checkSchema; 
1ef20 20 20 20 20 20 2f 2a 20 43 61 75 73 65 73 20 73       /* Causes s
1ef30 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68 65  chema cookie che
1ef40 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f  ck after an erro
1ef50 72 20 2a 2f 0a 20 20 75 38 20 6e 65 73 74 65 64  r */.  u8 nested
1ef60 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
1ef70 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20  umber of nested 
1ef80 63 61 6c 6c 73 20 74 6f 20 74 68 65 20 70 61 72  calls to the par
1ef90 73 65 72 2f 63 6f 64 65 20 67 65 6e 65 72 61 74  ser/code generat
1efa0 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d 70  or */.  u8 nTemp
1efb0 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Reg;         /* 
1efc0 4e 75 6d 62 65 72 20 6f 66 20 74 65 6d 70 6f 72  Number of tempor
1efd0 61 72 79 20 72 65 67 69 73 74 65 72 73 20 69 6e  ary registers in
1efe0 20 61 54 65 6d 70 52 65 67 5b 5d 20 2a 2f 0a 20   aTempReg[] */. 
1eff0 20 75 38 20 69 73 4d 75 6c 74 69 57 72 69 74 65   u8 isMultiWrite
1f000 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  ;     /* True if
1f010 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 6d   statement may m
1f020 6f 64 69 66 79 2f 69 6e 73 65 72 74 20 6d 75 6c  odify/insert mul
1f030 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 20 20  tiple rows */.  
1f040 75 38 20 6d 61 79 41 62 6f 72 74 3b 20 20 20 20  u8 mayAbort;    
1f050 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
1f060 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 74 68  statement may th
1f070 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78 63  row an ABORT exc
1f080 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 68  eption */.  u8 h
1f090 61 73 43 6f 6d 70 6f 75 6e 64 3b 20 20 20 20 20  asCompound;     
1f0a0 20 2f 2a 20 4e 65 65 64 20 74 6f 20 69 6e 76 6f   /* Need to invo
1f0b0 6b 65 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75  ke convertCompou
1f0c0 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65  ndSelectToSubque
1f0d0 72 79 28 29 20 2a 2f 0a 20 20 75 38 20 6f 6b 43  ry() */.  u8 okC
1f0e0 6f 6e 73 74 46 61 63 74 6f 72 3b 20 20 20 20 2f  onstFactor;    /
1f0f0 2a 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 6f  * OK to factor o
1f100 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a  ut constants */.
1f110 20 20 75 38 20 64 69 73 61 62 6c 65 4c 6f 6f 6b    u8 disableLook
1f120 61 73 69 64 65 3b 20 2f 2a 20 4e 75 6d 62 65 72  aside; /* Number
1f130 20 6f 66 20 74 69 6d 65 73 20 6c 6f 6f 6b 61 73   of times lookas
1f140 69 64 65 20 68 61 73 20 62 65 65 6e 20 64 69 73  ide has been dis
1f150 61 62 6c 65 64 20 2a 2f 0a 20 20 75 38 20 6e 43  abled */.  u8 nC
1f160 6f 6c 43 61 63 68 65 3b 20 20 20 20 20 20 20 20  olCache;        
1f170 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74  /* Number of ent
1f180 72 69 65 73 20 69 6e 20 61 43 6f 6c 43 61 63 68  ries in aColCach
1f190 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 61  e[] */.  int nRa
1f1a0 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a  ngeReg;       /*
1f1b0 20 53 69 7a 65 20 6f 66 20 74 68 65 20 74 65 6d   Size of the tem
1f1c0 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 20  porary register 
1f1d0 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 69  block */.  int i
1f1e0 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20  RangeReg;       
1f1f0 2f 2a 20 46 69 72 73 74 20 72 65 67 69 73 74 65  /* First registe
1f200 72 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 72  r in temporary r
1f210 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f  egister block */
1f220 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20  .  int nErr;    
1f230 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1f240 72 20 6f 66 20 65 72 72 6f 72 73 20 73 65 65 6e  r of errors seen
1f250 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 61 62 3b 20   */.  int nTab; 
1f260 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1f270 6d 62 65 72 20 6f 66 20 70 72 65 76 69 6f 75 73  mber of previous
1f280 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 56 44 42  ly allocated VDB
1f290 45 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20 20 69  E cursors */.  i
1f2a0 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20  nt nMem;        
1f2b0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1f2c0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73   memory cells us
1f2d0 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  ed so far */.  i
1f2e0 6e 74 20 6e 4f 70 41 6c 6c 6f 63 3b 20 20 20 20  nt nOpAlloc;    
1f2f0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1f300 20 73 6c 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64   slots allocated
1f310 20 66 6f 72 20 56 64 62 65 2e 61 4f 70 5b 5d 20   for Vdbe.aOp[] 
1f320 2a 2f 0a 20 20 69 6e 74 20 73 7a 4f 70 41 6c 6c  */.  int szOpAll
1f330 6f 63 3b 20 20 20 20 20 20 20 2f 2a 20 42 79 74  oc;       /* Byt
1f340 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61  es of memory spa
1f350 63 65 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72  ce allocated for
1f360 20 56 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20   Vdbe.aOp[] */. 
1f370 20 69 6e 74 20 69 53 65 6c 66 54 61 62 3b 20 20   int iSelfTab;  
1f380 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 66        /* Table f
1f390 6f 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  or associated wi
1f3a0 74 68 20 61 6e 20 69 6e 64 65 78 20 6f 6e 20 65  th an index on e
1f3b0 78 70 72 2c 20 6f 72 20 6e 65 67 61 74 69 76 65  xpr, or negative
1f3c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f3d0 20 20 20 20 20 20 20 20 2a 2a 20 6f 66 20 74 68          ** of th
1f3e0 65 20 62 61 73 65 20 72 65 67 69 73 74 65 72 20  e base register 
1f3f0 64 75 72 69 6e 67 20 63 68 65 63 6b 2d 63 6f 6e  during check-con
1f400 73 74 72 61 69 6e 74 20 65 76 61 6c 20 2a 2f 0a  straint eval */.
1f410 20 20 69 6e 74 20 69 43 61 63 68 65 4c 65 76 65    int iCacheLeve
1f420 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 43 61 63  l;     /* ColCac
1f430 68 65 20 76 61 6c 69 64 20 77 68 65 6e 20 61 43  he valid when aC
1f440 6f 6c 43 61 63 68 65 5b 5d 2e 69 4c 65 76 65 6c  olCache[].iLevel
1f450 3c 3d 69 43 61 63 68 65 4c 65 76 65 6c 20 2a 2f  <=iCacheLevel */
1f460 0a 20 20 69 6e 74 20 69 43 61 63 68 65 43 6e 74  .  int iCacheCnt
1f470 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74  ;       /* Count
1f480 65 72 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72  er used to gener
1f490 61 74 65 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e  ate aColCache[].
1f4a0 6c 72 75 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20  lru values */.  
1f4b0 69 6e 74 20 6e 4c 61 62 65 6c 3b 20 20 20 20 20  int nLabel;     
1f4c0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1f4d0 66 20 6c 61 62 65 6c 73 20 75 73 65 64 20 2a 2f  f labels used */
1f4e0 0a 20 20 69 6e 74 20 2a 61 4c 61 62 65 6c 3b 20  .  int *aLabel; 
1f4f0 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65          /* Space
1f500 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 6c 61 62   to hold the lab
1f510 65 6c 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  els */.  ExprLis
1f520 74 20 2a 70 43 6f 6e 73 74 45 78 70 72 3b 2f 2a  t *pConstExpr;/*
1f530 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73   Constant expres
1f540 73 69 6f 6e 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e  sions */.  Token
1f550 20 63 6f 6e 73 74 72 61 69 6e 74 4e 61 6d 65 3b   constraintName;
1f560 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63  /* Name of the c
1f570 6f 6e 73 74 72 61 69 6e 74 20 63 75 72 72 65 6e  onstraint curren
1f580 74 6c 79 20 62 65 69 6e 67 20 70 61 72 73 65 64  tly being parsed
1f590 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 77 72   */.  yDbMask wr
1f5a0 69 74 65 4d 61 73 6b 3b 20 20 20 2f 2a 20 53 74  iteMask;   /* St
1f5b0 61 72 74 20 61 20 77 72 69 74 65 20 74 72 61 6e  art a write tran
1f5c0 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 73 65  saction on these
1f5d0 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20   databases */.  
1f5e0 79 44 62 4d 61 73 6b 20 63 6f 6f 6b 69 65 4d 61  yDbMask cookieMa
1f5f0 73 6b 3b 20 20 2f 2a 20 42 69 74 6d 61 73 6b 20  sk;  /* Bitmask 
1f600 6f 66 20 73 63 68 65 6d 61 20 76 65 72 69 66 69  of schema verifi
1f610 65 64 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a  ed databases */.
1f620 20 20 69 6e 74 20 72 65 67 52 6f 77 69 64 3b 20    int regRowid; 
1f630 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
1f640 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69 64  er holding rowid
1f650 20 6f 66 20 43 52 45 41 54 45 20 54 41 42 4c 45   of CREATE TABLE
1f660 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74 20   entry */.  int 
1f670 72 65 67 52 6f 6f 74 3b 20 20 20 20 20 20 20 20  regRoot;        
1f680 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c   /* Register hol
1f690 64 69 6e 67 20 72 6f 6f 74 20 70 61 67 65 20 6e  ding root page n
1f6a0 75 6d 62 65 72 20 66 6f 72 20 6e 65 77 20 6f 62  umber for new ob
1f6b0 6a 65 63 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  jects */.  int n
1f6c0 4d 61 78 41 72 67 3b 20 20 20 20 20 20 20 20 20  MaxArg;         
1f6d0 2f 2a 20 4d 61 78 20 61 72 67 73 20 70 61 73 73  /* Max args pass
1f6e0 65 64 20 74 6f 20 75 73 65 72 20 66 75 6e 63 74  ed to user funct
1f6f0 69 6f 6e 20 62 79 20 73 75 62 2d 70 72 6f 67 72  ion by sub-progr
1f700 61 6d 20 2a 2f 0a 23 69 66 20 53 45 4c 45 43 54  am */.#if SELECT
1f710 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a 20 20  TRACE_ENABLED.  
1f720 69 6e 74 20 6e 53 65 6c 65 63 74 3b 20 20 20 20  int nSelect;    
1f730 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1f740 66 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  f SELECT stateme
1f750 6e 74 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e  nts seen */.  in
1f760 74 20 6e 53 65 6c 65 63 74 49 6e 64 65 6e 74 3b  t nSelectIndent;
1f770 20 20 20 2f 2a 20 48 6f 77 20 66 61 72 20 74 6f     /* How far to
1f780 20 69 6e 64 65 6e 74 20 53 45 4c 45 43 54 54 52   indent SELECTTR
1f790 41 43 45 28 29 20 6f 75 74 70 75 74 20 2a 2f 0a  ACE() output */.
1f7a0 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
1f7b0 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45  QLITE_OMIT_SHARE
1f7c0 44 5f 43 41 43 48 45 0a 20 20 69 6e 74 20 6e 54  D_CACHE.  int nT
1f7d0 61 62 6c 65 4c 6f 63 6b 3b 20 20 20 20 20 20 20  ableLock;       
1f7e0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f   /* Number of lo
1f7f0 63 6b 73 20 69 6e 20 61 54 61 62 6c 65 4c 6f 63  cks in aTableLoc
1f800 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f 63 6b  k */.  TableLock
1f810 20 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f 2a   *aTableLock; /*
1f820 20 52 65 71 75 69 72 65 64 20 74 61 62 6c 65 20   Required table 
1f830 6c 6f 63 6b 73 20 66 6f 72 20 73 68 61 72 65 64  locks for shared
1f840 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23  -cache mode */.#
1f850 65 6e 64 69 66 0a 20 20 41 75 74 6f 69 6e 63 49  endif.  AutoincI
1f860 6e 66 6f 20 2a 70 41 69 6e 63 3b 20 20 2f 2a 20  nfo *pAinc;  /* 
1f870 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  Information abou
1f880 74 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  t AUTOINCREMENT 
1f890 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20 50 61  counters */.  Pa
1f8a0 72 73 65 20 2a 70 54 6f 70 6c 65 76 65 6c 3b 20  rse *pToplevel; 
1f8b0 20 20 20 2f 2a 20 50 61 72 73 65 20 73 74 72 75     /* Parse stru
1f8c0 63 74 75 72 65 20 66 6f 72 20 6d 61 69 6e 20 70  cture for main p
1f8d0 72 6f 67 72 61 6d 20 28 6f 72 20 4e 55 4c 4c 29  rogram (or NULL)
1f8e0 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 72   */.  Table *pTr
1f8f0 69 67 67 65 72 54 61 62 3b 20 20 2f 2a 20 54 61  iggerTab;  /* Ta
1f900 62 6c 65 20 74 72 69 67 67 65 72 73 20 61 72 65  ble triggers are
1f910 20 62 65 69 6e 67 20 63 6f 64 65 64 20 66 6f 72   being coded for
1f920 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 43 72   */.  int addrCr
1f930 54 61 62 3b 20 20 20 20 20 20 20 2f 2a 20 41 64  Tab;       /* Ad
1f940 64 72 65 73 73 20 6f 66 20 4f 50 5f 43 72 65 61  dress of OP_Crea
1f950 74 65 54 61 62 6c 65 20 6f 70 63 6f 64 65 20 6f  teTable opcode o
1f960 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a  n CREATE TABLE *
1f970 2f 0a 20 20 75 33 32 20 6e 51 75 65 72 79 4c 6f  /.  u32 nQueryLo
1f980 6f 70 3b 20 20 20 20 20 20 2f 2a 20 45 73 74 20  op;      /* Est 
1f990 6e 75 6d 62 65 72 20 6f 66 20 69 74 65 72 61 74  number of iterat
1f9a0 69 6f 6e 73 20 6f 66 20 61 20 71 75 65 72 79 20  ions of a query 
1f9b0 28 31 30 2a 6c 6f 67 32 28 4e 29 29 20 2a 2f 0a  (10*log2(N)) */.
1f9c0 20 20 75 33 32 20 6f 6c 64 6d 61 73 6b 3b 20 20    u32 oldmask;  
1f9d0 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f         /* Mask o
1f9e0 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20  f old.* columns 
1f9f0 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20  referenced */.  
1fa00 75 33 32 20 6e 65 77 6d 61 73 6b 3b 20 20 20 20  u32 newmask;    
1fa10 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20       /* Mask of 
1fa20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65  new.* columns re
1fa30 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 38  ferenced */.  u8
1fa40 20 65 54 72 69 67 67 65 72 4f 70 3b 20 20 20 20   eTriggerOp;    
1fa50 20 20 20 2f 2a 20 54 4b 5f 55 50 44 41 54 45 2c     /* TK_UPDATE,
1fa60 20 54 4b 5f 49 4e 53 45 52 54 20 6f 72 20 54 4b   TK_INSERT or TK
1fa70 5f 44 45 4c 45 54 45 20 2a 2f 0a 20 20 75 38 20  _DELETE */.  u8 
1fa80 65 4f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20  eOrconf;        
1fa90 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20    /* Default ON 
1faa0 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20  CONFLICT policy 
1fab0 66 6f 72 20 74 72 69 67 67 65 72 20 73 74 65 70  for trigger step
1fac0 73 20 2a 2f 0a 20 20 75 38 20 64 69 73 61 62 6c  s */.  u8 disabl
1fad0 65 54 72 69 67 67 65 72 73 3b 20 20 2f 2a 20 54  eTriggers;  /* T
1fae0 72 75 65 20 74 6f 20 64 69 73 61 62 6c 65 20 74  rue to disable t
1faf0 72 69 67 67 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a  riggers */..  /*
1fb00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fb10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fb20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fb30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fb40 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 46  *********.  ** F
1fb50 69 65 6c 64 73 20 61 62 6f 76 65 20 6d 75 73 74  ields above must
1fb60 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   be initialized 
1fb70 74 6f 20 7a 65 72 6f 2e 20 20 54 68 65 20 66 69  to zero.  The fi
1fb80 65 6c 64 73 20 74 68 61 74 20 66 6f 6c 6c 6f 77  elds that follow
1fb90 2c 0a 20 20 2a 2a 20 64 6f 77 6e 20 74 6f 20 74  ,.  ** down to t
1fba0 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20  he beginning of 
1fbb0 74 68 65 20 72 65 63 75 72 73 69 76 65 20 73 65  the recursive se
1fbc0 63 74 69 6f 6e 2c 20 64 6f 20 6e 6f 74 20 6e 65  ction, do not ne
1fbd0 65 64 20 74 6f 20 62 65 0a 20 20 2a 2a 20 69 6e  ed to be.  ** in
1fbe0 69 74 69 61 6c 69 7a 65 64 20 61 73 20 74 68 65  itialized as the
1fbf0 79 20 77 69 6c 6c 20 62 65 20 73 65 74 20 62 65  y will be set be
1fc00 66 6f 72 65 20 62 65 69 6e 67 20 75 73 65 64 2e  fore being used.
1fc10 20 20 54 68 65 20 62 6f 75 6e 64 61 72 79 20 69    The boundary i
1fc20 73 0a 20 20 2a 2a 20 64 65 74 65 72 6d 69 6e 65  s.  ** determine
1fc30 64 20 62 79 20 6f 66 66 73 65 74 6f 66 28 50 61  d by offsetof(Pa
1fc40 72 73 65 2c 61 43 6f 6c 43 61 63 68 65 29 2e 0a  rse,aColCache)..
1fc50 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    **************
1fc60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fc70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fc80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fc90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20  ************/.. 
1fca0 20 73 74 72 75 63 74 20 79 43 6f 6c 43 61 63 68   struct yColCach
1fcb0 65 20 7b 0a 20 20 20 20 69 6e 74 20 69 54 61 62  e {.    int iTab
1fcc0 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  le;           /*
1fcd0 20 54 61 62 6c 65 20 63 75 72 73 6f 72 20 6e 75   Table cursor nu
1fce0 6d 62 65 72 20 2a 2f 0a 20 20 20 20 69 31 36 20  mber */.    i16 
1fcf0 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  iColumn;        
1fd00 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6c 75 6d    /* Table colum
1fd10 6e 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20  n number */.    
1fd20 75 38 20 74 65 6d 70 52 65 67 3b 20 20 20 20 20  u8 tempReg;     
1fd30 20 20 20 20 20 20 2f 2a 20 69 52 65 67 20 69 73        /* iReg is
1fd40 20 61 20 74 65 6d 70 20 72 65 67 69 73 74 65 72   a temp register
1fd50 20 74 68 61 74 20 6e 65 65 64 73 20 74 6f 20 62   that needs to b
1fd60 65 20 66 72 65 65 64 20 2a 2f 0a 20 20 20 20 69  e freed */.    i
1fd70 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20 20 20 20  nt iLevel;      
1fd80 20 20 20 20 20 2f 2a 20 4e 65 73 74 69 6e 67 20       /* Nesting 
1fd90 6c 65 76 65 6c 20 2a 2f 0a 20 20 20 20 69 6e 74  level */.    int
1fda0 20 69 52 65 67 3b 20 20 20 20 20 20 20 20 20 20   iReg;          
1fdb0 20 20 20 2f 2a 20 52 65 67 20 77 69 74 68 20 76     /* Reg with v
1fdc0 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c  alue of this col
1fdd0 75 6d 6e 2e 20 30 20 6d 65 61 6e 73 20 6e 6f 6e  umn. 0 means non
1fde0 65 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6c 72  e. */.    int lr
1fdf0 75 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  u;              
1fe00 2f 2a 20 4c 65 61 73 74 20 72 65 63 65 6e 74 6c  /* Least recentl
1fe10 79 20 75 73 65 64 20 65 6e 74 72 79 20 68 61 73  y used entry has
1fe20 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 76 61   the smallest va
1fe30 6c 75 65 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 43  lue */.  } aColC
1fe40 61 63 68 65 5b 53 51 4c 49 54 45 5f 4e 5f 43 4f  ache[SQLITE_N_CO
1fe50 4c 43 41 43 48 45 5d 3b 20 20 2f 2a 20 4f 6e 65  LCACHE];  /* One
1fe60 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
1fe70 20 63 61 63 68 65 20 65 6e 74 72 79 20 2a 2f 0a   cache entry */.
1fe80 20 20 69 6e 74 20 61 54 65 6d 70 52 65 67 5b 38    int aTempReg[8
1fe90 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 6c  ];        /* Hol
1fea0 64 69 6e 67 20 61 72 65 61 20 66 6f 72 20 74 65  ding area for te
1feb0 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72  mporary register
1fec0 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e 61  s */.  Token sNa
1fed0 6d 65 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 2f  meToken;       /
1fee0 2a 20 54 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71  * Token with unq
1fef0 75 61 6c 69 66 69 65 64 20 73 63 68 65 6d 61 20  ualified schema 
1ff00 6f 62 6a 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 0a  object name */..
1ff10 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    /*************
1ff20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ff30 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ff40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ff50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a  ***********.  **
1ff60 20 41 62 6f 76 65 20 69 73 20 63 6f 6e 73 74 61   Above is consta
1ff70 6e 74 20 62 65 74 77 65 65 6e 20 72 65 63 75 72  nt between recur
1ff80 73 69 6f 6e 73 2e 20 20 42 65 6c 6f 77 20 69 73  sions.  Below is
1ff90 20 72 65 73 65 74 20 62 65 66 6f 72 65 20 61 6e   reset before an
1ffa0 64 20 61 66 74 65 72 0a 20 20 2a 2a 20 65 61 63  d after.  ** eac
1ffb0 68 20 72 65 63 75 72 73 69 6f 6e 2e 20 20 54 68  h recursion.  Th
1ffc0 65 20 62 6f 75 6e 64 61 72 79 20 62 65 74 77 65  e boundary betwe
1ffd0 65 6e 20 74 68 65 73 65 20 74 77 6f 20 72 65 67  en these two reg
1ffe0 69 6f 6e 73 20 69 73 20 64 65 74 65 72 6d 69 6e  ions is determin
1fff0 65 64 0a 20 20 2a 2a 20 75 73 69 6e 67 20 6f 66  ed.  ** using of
20000 66 73 65 74 6f 66 28 50 61 72 73 65 2c 73 4c 61  fsetof(Parse,sLa
20010 73 74 54 6f 6b 65 6e 29 20 73 6f 20 74 68 65 20  stToken) so the 
20020 73 4c 61 73 74 54 6f 6b 65 6e 20 66 69 65 6c 64  sLastToken field
20030 20 6d 75 73 74 20 62 65 20 74 68 65 0a 20 20 2a   must be the.  *
20040 2a 20 66 69 72 73 74 20 66 69 65 6c 64 20 69 6e  * first field in
20050 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20 72   the recursive r
20060 65 67 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a  egion..  *******
20070 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20080 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20090 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
200a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
200b0 2a 2f 0a 0a 20 20 54 6f 6b 65 6e 20 73 4c 61 73  */..  Token sLas
200c0 74 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 2f 2a  tToken;       /*
200d0 20 54 68 65 20 6c 61 73 74 20 74 6f 6b 65 6e 20   The last token 
200e0 70 61 72 73 65 64 20 2a 2f 0a 20 20 79 6e 56 61  parsed */.  ynVa
200f0 72 20 6e 56 61 72 3b 20 20 20 20 20 20 20 20 20  r nVar;         
20100 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
20110 6f 66 20 27 3f 27 20 76 61 72 69 61 62 6c 65 73  of '?' variables
20120 20 73 65 65 6e 20 69 6e 20 74 68 65 20 53 51 4c   seen in the SQL
20130 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75 38 20   so far */.  u8 
20140 69 50 6b 53 6f 72 74 4f 72 64 65 72 3b 20 20 20  iPkSortOrder;   
20150 20 20 20 20 20 20 20 2f 2a 20 41 53 43 20 6f 72         /* ASC or
20160 20 44 45 53 43 20 66 6f 72 20 49 4e 54 45 47 45   DESC for INTEGE
20170 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f  R PRIMARY KEY */
20180 0a 20 20 75 38 20 65 78 70 6c 61 69 6e 3b 20 20  .  u8 explain;  
20190 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
201a0 54 72 75 65 20 69 66 20 74 68 65 20 45 58 50 4c  True if the EXPL
201b0 41 49 4e 20 66 6c 61 67 20 69 73 20 66 6f 75 6e  AIN flag is foun
201c0 64 20 6f 6e 20 74 68 65 20 71 75 65 72 79 20 2a  d on the query *
201d0 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
201e0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
201f0 4c 45 0a 20 20 75 38 20 64 65 63 6c 61 72 65 56  LE.  u8 declareV
20200 74 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f  tab;           /
20210 2a 20 54 72 75 65 20 69 66 20 69 6e 73 69 64 65  * True if inside
20220 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65   sqlite3_declare
20230 5f 76 74 61 62 28 29 20 2a 2f 0a 20 20 69 6e 74  _vtab() */.  int
20240 20 6e 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20   nVtabLock;     
20250 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
20260 20 6f 66 20 76 69 72 74 75 61 6c 20 74 61 62 6c   of virtual tabl
20270 65 73 20 74 6f 20 6c 6f 63 6b 20 2a 2f 0a 23 65  es to lock */.#e
20280 6e 64 69 66 0a 20 20 69 6e 74 20 6e 48 65 69 67  ndif.  int nHeig
20290 68 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ht;             
202a0 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 74   /* Expression t
202b0 72 65 65 20 68 65 69 67 68 74 20 6f 66 20 63 75  ree height of cu
202c0 72 72 65 6e 74 20 73 75 62 2d 73 65 6c 65 63 74  rrent sub-select
202d0 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
202e0 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a  TE_OMIT_EXPLAIN.
202f0 20 20 69 6e 74 20 69 53 65 6c 65 63 74 49 64 3b    int iSelectId;
20300 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
20310 44 20 6f 66 20 63 75 72 72 65 6e 74 20 73 65 6c  D of current sel
20320 65 63 74 20 66 6f 72 20 45 58 50 4c 41 49 4e 20  ect for EXPLAIN 
20330 6f 75 74 70 75 74 20 2a 2f 0a 20 20 69 6e 74 20  output */.  int 
20340 69 4e 65 78 74 53 65 6c 65 63 74 49 64 3b 20 20  iNextSelectId;  
20350 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 61 76        /* Next av
20360 61 69 6c 61 62 6c 65 20 73 65 6c 65 63 74 20 49  ailable select I
20370 44 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75  D for EXPLAIN ou
20380 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  tput */.#endif. 
20390 20 56 4c 69 73 74 20 2a 70 56 4c 69 73 74 3b 20   VList *pVList; 
203a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
203b0 70 70 69 6e 67 20 62 65 74 77 65 65 6e 20 76 61  pping between va
203c0 72 69 61 62 6c 65 20 6e 61 6d 65 73 20 61 6e 64  riable names and
203d0 20 6e 75 6d 62 65 72 73 20 2a 2f 0a 20 20 56 64   numbers */.  Vd
203e0 62 65 20 2a 70 52 65 70 72 65 70 61 72 65 3b 20  be *pReprepare; 
203f0 20 20 20 20 20 20 20 20 2f 2a 20 56 4d 20 62 65          /* VM be
20400 69 6e 67 20 72 65 70 72 65 70 61 72 65 64 20 28  ing reprepared (
20410 73 71 6c 69 74 65 33 52 65 70 72 65 70 61 72 65  sqlite3Reprepare
20420 28 29 29 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ()) */.  const c
20430 68 61 72 20 2a 7a 54 61 69 6c 3b 20 20 20 20 20  har *zTail;     
20440 20 20 20 2f 2a 20 41 6c 6c 20 53 51 4c 20 74 65     /* All SQL te
20450 78 74 20 70 61 73 74 20 74 68 65 20 6c 61 73 74  xt past the last
20460 20 73 65 6d 69 63 6f 6c 6f 6e 20 70 61 72 73 65   semicolon parse
20470 64 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e  d */.  Table *pN
20480 65 77 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20  ewTable;        
20490 20 2f 2a 20 41 20 74 61 62 6c 65 20 62 65 69 6e   /* A table bein
204a0 67 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79  g constructed by
204b0 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f   CREATE TABLE */
204c0 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65 77  .  Trigger *pNew
204d0 54 72 69 67 67 65 72 3b 20 20 20 20 20 2f 2a 20  Trigger;     /* 
204e0 54 72 69 67 67 65 72 20 75 6e 64 65 72 20 63 6f  Trigger under co
204f0 6e 73 74 72 75 63 74 20 62 79 20 61 20 43 52 45  nstruct by a CRE
20500 41 54 45 20 54 52 49 47 47 45 52 20 2a 2f 0a 20  ATE TRIGGER */. 
20510 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75   const char *zAu
20520 74 68 43 6f 6e 74 65 78 74 3b 20 2f 2a 20 54 68  thContext; /* Th
20530 65 20 36 74 68 20 70 61 72 61 6d 65 74 65 72 20  e 6th parameter 
20540 74 6f 20 64 62 2d 3e 78 41 75 74 68 20 63 61 6c  to db->xAuth cal
20550 6c 62 61 63 6b 73 20 2a 2f 0a 23 69 66 6e 64 65  lbacks */.#ifnde
20560 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
20570 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 54 6f 6b  RTUALTABLE.  Tok
20580 65 6e 20 73 41 72 67 3b 20 20 20 20 20 20 20 20  en sArg;        
20590 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 6c 65         /* Comple
205a0 74 65 20 74 65 78 74 20 6f 66 20 61 20 6d 6f 64  te text of a mod
205b0 75 6c 65 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a  ule argument */.
205c0 20 20 54 61 62 6c 65 20 2a 2a 61 70 56 74 61 62    Table **apVtab
205d0 4c 6f 63 6b 3b 20 20 20 20 20 20 20 2f 2a 20 50  Lock;       /* P
205e0 6f 69 6e 74 65 72 20 74 6f 20 76 69 72 74 75 61  ointer to virtua
205f0 6c 20 74 61 62 6c 65 73 20 6e 65 65 64 69 6e 67  l tables needing
20600 20 6c 6f 63 6b 69 6e 67 20 2a 2f 0a 23 65 6e 64   locking */.#end
20610 69 66 0a 20 20 54 61 62 6c 65 20 2a 70 5a 6f 6d  if.  Table *pZom
20620 62 69 65 54 61 62 3b 20 20 20 20 20 20 20 20 2f  bieTab;        /
20630 2a 20 4c 69 73 74 20 6f 66 20 54 61 62 6c 65 20  * List of Table 
20640 6f 62 6a 65 63 74 73 20 74 6f 20 64 65 6c 65 74  objects to delet
20650 65 20 61 66 74 65 72 20 63 6f 64 65 20 67 65 6e  e after code gen
20660 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67   */.  TriggerPrg
20670 20 2a 70 54 72 69 67 67 65 72 50 72 67 3b 20 20   *pTriggerPrg;  
20680 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f  /* Linked list o
20690 66 20 63 6f 64 65 64 20 74 72 69 67 67 65 72 73  f coded triggers
206a0 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74   */.  With *pWit
206b0 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  h;              
206c0 2f 2a 20 43 75 72 72 65 6e 74 20 57 49 54 48 20  /* Current WITH 
206d0 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20  clause, or NULL 
206e0 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68  */.  With *pWith
206f0 54 6f 46 72 65 65 3b 20 20 20 20 20 20 20 20 2f  ToFree;        /
20700 2a 20 46 72 65 65 20 74 68 69 73 20 57 49 54 48  * Free this WITH
20710 20 6f 62 6a 65 63 74 20 61 74 20 74 68 65 20 65   object at the e
20720 6e 64 20 6f 66 20 74 68 65 20 70 61 72 73 65 20  nd of the parse 
20730 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a  */.};../*.** Siz
20740 65 73 20 61 6e 64 20 70 6f 69 6e 74 65 72 73 20  es and pointers 
20750 6f 66 20 76 61 72 69 6f 75 73 20 70 61 72 74 73  of various parts
20760 20 6f 66 20 74 68 65 20 50 61 72 73 65 20 6f 62   of the Parse ob
20770 6a 65 63 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ject..*/.#define
20780 20 50 41 52 53 45 5f 48 44 52 5f 53 5a 20 6f 66   PARSE_HDR_SZ of
20790 66 73 65 74 6f 66 28 50 61 72 73 65 2c 61 43 6f  fsetof(Parse,aCo
207a0 6c 43 61 63 68 65 29 20 2f 2a 20 52 65 63 75 72  lCache) /* Recur
207b0 73 69 76 65 20 70 61 72 74 20 77 2f 6f 20 61 43  sive part w/o aC
207c0 6f 6c 43 61 63 68 65 2a 2f 0a 23 64 65 66 69 6e  olCache*/.#defin
207d0 65 20 50 41 52 53 45 5f 52 45 43 55 52 53 45 5f  e PARSE_RECURSE_
207e0 53 5a 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73  SZ offsetof(Pars
207f0 65 2c 73 4c 61 73 74 54 6f 6b 65 6e 29 20 20 20  e,sLastToken)   
20800 20 2f 2a 20 52 65 63 75 72 73 69 76 65 20 70 61   /* Recursive pa
20810 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41  rt */.#define PA
20820 52 53 45 5f 54 41 49 4c 5f 53 5a 20 28 73 69 7a  RSE_TAIL_SZ (siz
20830 65 6f 66 28 50 61 72 73 65 29 2d 50 41 52 53 45  eof(Parse)-PARSE
20840 5f 52 45 43 55 52 53 45 5f 53 5a 29 20 2f 2a 20  _RECURSE_SZ) /* 
20850 4e 6f 6e 2d 72 65 63 75 72 73 69 76 65 20 70 61  Non-recursive pa
20860 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41  rt */.#define PA
20870 52 53 45 5f 54 41 49 4c 28 58 29 20 28 28 28 63  RSE_TAIL(X) (((c
20880 68 61 72 2a 29 28 58 29 29 2b 50 41 52 53 45 5f  har*)(X))+PARSE_
20890 52 45 43 55 52 53 45 5f 53 5a 29 20 20 2f 2a 20  RECURSE_SZ)  /* 
208a0 50 6f 69 6e 74 65 72 20 74 6f 20 74 61 69 6c 20  Pointer to tail 
208b0 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  */../*.** Return
208c0 20 74 72 75 65 20 69 66 20 63 75 72 72 65 6e 74   true if current
208d0 6c 79 20 69 6e 73 69 64 65 20 61 6e 20 73 71 6c  ly inside an sql
208e0 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61  ite3_declare_vta
208f0 62 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66  b() call..*/.#if
20900 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
20910 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 23  VIRTUALTABLE.  #
20920 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52  define IN_DECLAR
20930 45 5f 56 54 41 42 20 30 0a 23 65 6c 73 65 0a 20  E_VTAB 0.#else. 
20940 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c   #define IN_DECL
20950 41 52 45 5f 56 54 41 42 20 28 70 50 61 72 73 65  ARE_VTAB (pParse
20960 2d 3e 64 65 63 6c 61 72 65 56 74 61 62 29 0a 23  ->declareVtab).#
20970 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  endif../*.** An 
20980 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
20990 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
209a0 75 72 65 20 63 61 6e 20 62 65 20 64 65 63 6c 61  ure can be decla
209b0 72 65 64 20 6f 6e 20 61 20 73 74 61 63 6b 20 61  red on a stack a
209c0 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61  nd used.** to sa
209d0 76 65 20 74 68 65 20 50 61 72 73 65 2e 7a 41 75  ve the Parse.zAu
209e0 74 68 43 6f 6e 74 65 78 74 20 76 61 6c 75 65 20  thContext value 
209f0 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 62  so that it can b
20a00 65 20 72 65 73 74 6f 72 65 64 20 6c 61 74 65 72  e restored later
20a10 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 68  ..*/.struct Auth
20a20 43 6f 6e 74 65 78 74 20 7b 0a 20 20 63 6f 6e 73  Context {.  cons
20a30 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e  t char *zAuthCon
20a40 74 65 78 74 3b 20 20 20 2f 2a 20 50 75 74 20 73  text;   /* Put s
20a50 61 76 65 64 20 50 61 72 73 65 2e 7a 41 75 74 68  aved Parse.zAuth
20a60 43 6f 6e 74 65 78 74 20 68 65 72 65 20 2a 2f 0a  Context here */.
20a70 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
20a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
20a90 20 54 68 65 20 50 61 72 73 65 20 73 74 72 75 63   The Parse struc
20aa0 74 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ture */.};../*.*
20ab0 2a 20 42 69 74 66 69 65 6c 64 20 66 6c 61 67 73  * Bitfield flags
20ac0 20 66 6f 72 20 50 35 20 76 61 6c 75 65 20 69 6e   for P5 value in
20ad0 20 76 61 72 69 6f 75 73 20 6f 70 63 6f 64 65 73   various opcodes
20ae0 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f  ..**.** Value co
20af0 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72  nstraints (enfor
20b00 63 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29  ced via assert()
20b10 29 3a 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f  ):.**    OPFLAG_
20b20 4c 45 4e 47 54 48 41 52 47 20 20 20 20 3d 3d 20  LENGTHARG    == 
20b30 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47  SQLITE_FUNC_LENG
20b40 54 48 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f  TH.**    OPFLAG_
20b50 54 59 50 45 4f 46 41 52 47 20 20 20 20 3d 3d 20  TYPEOFARG    == 
20b60 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50 45  SQLITE_FUNC_TYPE
20b70 4f 46 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f  OF.**    OPFLAG_
20b80 42 55 4c 4b 43 53 52 20 20 20 20 20 20 3d 3d 20  BULKCSR      == 
20b90 42 54 52 45 45 5f 42 55 4c 4b 4c 4f 41 44 0a 2a  BTREE_BULKLOAD.*
20ba0 2a 20 20 20 20 4f 50 46 4c 41 47 5f 53 45 45 4b  *    OPFLAG_SEEK
20bb0 45 51 20 20 20 20 20 20 20 3d 3d 20 42 54 52 45  EQ       == BTRE
20bc0 45 5f 53 45 45 4b 5f 45 51 0a 2a 2a 20 20 20 20  E_SEEK_EQ.**    
20bd0 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45  OPFLAG_FORDELETE
20be0 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 46 4f 52      == BTREE_FOR
20bf0 44 45 4c 45 54 45 0a 2a 2a 20 20 20 20 4f 50 46  DELETE.**    OPF
20c00 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e  LAG_SAVEPOSITION
20c10 20 3d 3d 20 42 54 52 45 45 5f 53 41 56 45 50 4f   == BTREE_SAVEPO
20c20 53 49 54 49 4f 4e 0a 2a 2a 20 20 20 20 4f 50 46  SITION.**    OPF
20c30 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 20 20 20  LAG_AUXDELETE   
20c40 20 3d 3d 20 42 54 52 45 45 5f 41 55 58 44 45 4c   == BTREE_AUXDEL
20c50 45 54 45 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ETE.*/.#define O
20c60 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 20 20  PFLAG_NCHANGE   
20c70 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f      0x01    /* O
20c80 50 5f 49 6e 73 65 72 74 3a 20 53 65 74 20 74 6f  P_Insert: Set to
20c90 20 75 70 64 61 74 65 20 64 62 2d 3e 6e 43 68 61   update db->nCha
20ca0 6e 67 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  nge */.         
20cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20cc0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
20cd0 6c 73 6f 20 75 73 65 64 20 69 6e 20 50 32 20 28  lso used in P2 (
20ce0 6e 6f 74 20 50 35 29 20 6f 66 20 4f 50 5f 44 65  not P5) of OP_De
20cf0 6c 65 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  lete */.#define 
20d00 4f 50 46 4c 41 47 5f 45 50 48 45 4d 20 20 20 20  OPFLAG_EPHEM    
20d10 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20       0x01    /* 
20d20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 45 70 68 65 6d  OP_Column: Ephem
20d30 65 72 61 6c 20 6f 75 74 70 75 74 20 69 73 20 6f  eral output is o
20d40 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  k */.#define OPF
20d50 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 20 20  LAG_LASTROWID   
20d60 20 20 30 78 32 30 20 20 20 20 2f 2a 20 53 65 74    0x20    /* Set
20d70 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6c   to update db->l
20d80 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23 64 65 66  astRowid */.#def
20d90 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44  ine OPFLAG_ISUPD
20da0 41 54 45 20 20 20 20 20 20 30 78 30 34 20 20 20  ATE      0x04   
20db0 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49 6e 73 65   /* This OP_Inse
20dc0 72 74 20 69 73 20 61 6e 20 73 71 6c 20 55 50 44  rt is an sql UPD
20dd0 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ATE */.#define O
20de0 50 46 4c 41 47 5f 41 50 50 45 4e 44 20 20 20 20  PFLAG_APPEND    
20df0 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20 54      0x08    /* T
20e00 68 69 73 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f  his is likely to
20e10 20 62 65 20 61 6e 20 61 70 70 65 6e 64 20 2a 2f   be an append */
20e20 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
20e30 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 30 78  USESEEKRESULT 0x
20e40 31 30 20 20 20 20 2f 2a 20 54 72 79 20 74 6f 20  10    /* Try to 
20e50 61 76 6f 69 64 20 61 20 73 65 65 6b 20 69 6e 20  avoid a seek in 
20e60 42 74 72 65 65 49 6e 73 65 72 74 28 29 20 2a 2f  BtreeInsert() */
20e70 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
20e80 49 53 4e 4f 4f 50 20 20 20 20 20 20 20 20 30 78  ISNOOP        0x
20e90 34 30 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65  40    /* OP_Dele
20ea0 74 65 20 64 6f 65 73 20 70 72 65 2d 75 70 64 61  te does pre-upda
20eb0 74 65 2d 68 6f 6f 6b 20 6f 6e 6c 79 20 2a 2f 0a  te-hook only */.
20ec0 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c  #define OPFLAG_L
20ed0 45 4e 47 54 48 41 52 47 20 20 20 20 20 30 78 34  ENGTHARG     0x4
20ee0 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d  0    /* OP_Colum
20ef0 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20  n only used for 
20f00 6c 65 6e 67 74 68 28 29 20 2a 2f 0a 23 64 65 66  length() */.#def
20f10 69 6e 65 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f  ine OPFLAG_TYPEO
20f20 46 41 52 47 20 20 20 20 20 30 78 38 30 20 20 20  FARG     0x80   
20f30 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e   /* OP_Column on
20f40 6c 79 20 75 73 65 64 20 66 6f 72 20 74 79 70 65  ly used for type
20f50 6f 66 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  of() */.#define 
20f60 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20  OPFLAG_BULKCSR  
20f70 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20       0x01    /* 
20f80 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73 65 64 20 74  OP_Open** used t
20f90 6f 20 6f 70 65 6e 20 62 75 6c 6b 20 63 75 72 73  o open bulk curs
20fa0 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  or */.#define OP
20fb0 46 4c 41 47 5f 53 45 45 4b 45 51 20 20 20 20 20  FLAG_SEEKEQ     
20fc0 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 4f 50     0x02    /* OP
20fd0 5f 4f 70 65 6e 2a 2a 20 63 75 72 73 6f 72 20 75  _Open** cursor u
20fe0 73 65 73 20 45 51 20 73 65 65 6b 20 6f 6e 6c 79  ses EQ seek only
20ff0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
21000 41 47 5f 46 4f 52 44 45 4c 45 54 45 20 20 20 20  AG_FORDELETE    
21010 20 30 78 30 38 20 20 20 20 2f 2a 20 4f 50 5f 4f   0x08    /* OP_O
21020 70 65 6e 20 73 68 6f 75 6c 64 20 75 73 65 20 42  pen should use B
21030 54 52 45 45 5f 46 4f 52 44 45 4c 45 54 45 20 2a  TREE_FORDELETE *
21040 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
21050 5f 50 32 49 53 52 45 47 20 20 20 20 20 20 20 30  _P2ISREG       0
21060 78 31 30 20 20 20 20 2f 2a 20 50 32 20 74 6f 20  x10    /* P2 to 
21070 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73 20 61 20 72  OP_Open** is a r
21080 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20 2a  egister number *
21090 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
210a0 5f 50 45 52 4d 55 54 45 20 20 20 20 20 20 20 30  _PERMUTE       0
210b0 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6d  x01    /* OP_Com
210c0 70 61 72 65 3a 20 75 73 65 20 74 68 65 20 70 65  pare: use the pe
210d0 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 23 64 65  rmutation */.#de
210e0 66 69 6e 65 20 4f 50 46 4c 41 47 5f 53 41 56 45  fine OPFLAG_SAVE
210f0 50 4f 53 49 54 49 4f 4e 20 20 30 78 30 32 20 20  POSITION  0x02  
21100 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 2f 49    /* OP_Delete/I
21110 6e 73 65 72 74 3a 20 73 61 76 65 20 63 75 72 73  nsert: save curs
21120 6f 72 20 70 6f 73 20 2a 2f 0a 23 64 65 66 69 6e  or pos */.#defin
21130 65 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45  e OPFLAG_AUXDELE
21140 54 45 20 20 20 20 20 30 78 30 34 20 20 20 20 2f  TE     0x04    /
21150 2a 20 4f 50 5f 44 65 6c 65 74 65 3a 20 69 6e 64  * OP_Delete: ind
21160 65 78 20 69 6e 20 61 20 44 45 4c 45 54 45 20 6f  ex in a DELETE o
21170 70 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63 68  p */../*. * Each
21180 20 74 72 69 67 67 65 72 20 70 72 65 73 65 6e 74   trigger present
21190 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
211a0 20 73 63 68 65 6d 61 20 69 73 20 73 74 6f 72 65   schema is store
211b0 64 20 61 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  d as an instance
211c0 20 6f 66 0a 20 2a 20 73 74 72 75 63 74 20 54 72   of. * struct Tr
211d0 69 67 67 65 72 2e 0a 20 2a 0a 20 2a 20 50 6f 69  igger.. *. * Poi
211e0 6e 74 65 72 73 20 74 6f 20 69 6e 73 74 61 6e 63  nters to instanc
211f0 65 73 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  es of struct Tri
21200 67 67 65 72 20 61 72 65 20 73 74 6f 72 65 64 20  gger are stored 
21210 69 6e 20 74 77 6f 20 77 61 79 73 2e 0a 20 2a 20  in two ways.. * 
21220 31 2e 20 49 6e 20 74 68 65 20 22 74 72 69 67 48  1. In the "trigH
21230 61 73 68 22 20 68 61 73 68 20 74 61 62 6c 65 20  ash" hash table 
21240 28 70 61 72 74 20 6f 66 20 74 68 65 20 73 71 6c  (part of the sql
21250 69 74 65 33 2a 20 74 68 61 74 20 72 65 70 72 65  ite3* that repre
21260 73 65 6e 74 73 20 74 68 65 0a 20 2a 20 20 20 20  sents the. *    
21270 64 61 74 61 62 61 73 65 29 2e 20 54 68 69 73 20  database). This 
21280 61 6c 6c 6f 77 73 20 54 72 69 67 67 65 72 20 73  allows Trigger s
21290 74 72 75 63 74 75 72 65 73 20 74 6f 20 62 65 20  tructures to be 
212a0 72 65 74 72 69 65 76 65 64 20 62 79 20 6e 61 6d  retrieved by nam
212b0 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20 74 72 69  e.. * 2. All tri
212c0 67 67 65 72 73 20 61 73 73 6f 63 69 61 74 65 64  ggers associated
212d0 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20 74   with a single t
212e0 61 62 6c 65 20 66 6f 72 6d 20 61 20 6c 69 6e 6b  able form a link
212f0 65 64 20 6c 69 73 74 2c 20 75 73 69 6e 67 20 74  ed list, using t
21300 68 65 0a 20 2a 20 20 20 20 70 4e 65 78 74 20 6d  he. *    pNext m
21310 65 6d 62 65 72 20 6f 66 20 73 74 72 75 63 74 20  ember of struct 
21320 54 72 69 67 67 65 72 2e 20 41 20 70 6f 69 6e 74  Trigger. A point
21330 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  er to the first 
21340 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 0a 20  element of the. 
21350 2a 20 20 20 20 6c 69 6e 6b 65 64 20 6c 69 73 74  *    linked list
21360 20 69 73 20 73 74 6f 72 65 64 20 61 73 20 74 68   is stored as th
21370 65 20 22 70 54 72 69 67 67 65 72 22 20 6d 65 6d  e "pTrigger" mem
21380 62 65 72 20 6f 66 20 74 68 65 20 61 73 73 6f 63  ber of the assoc
21390 69 61 74 65 64 0a 20 2a 20 20 20 20 73 74 72 75  iated. *    stru
213a0 63 74 20 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a 20  ct Table.. *. * 
213b0 54 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20  The "step_list" 
213c0 6d 65 6d 62 65 72 20 70 6f 69 6e 74 73 20 74 6f  member points to
213d0 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65   the first eleme
213e0 6e 74 20 6f 66 20 61 20 6c 69 6e 6b 65 64 20 6c  nt of a linked l
213f0 69 73 74 0a 20 2a 20 63 6f 6e 74 61 69 6e 69 6e  ist. * containin
21400 67 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d  g the SQL statem
21410 65 6e 74 73 20 73 70 65 63 69 66 69 65 64 20 61  ents specified a
21420 73 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72  s the trigger pr
21430 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75 63  ogram.. */.struc
21440 74 20 54 72 69 67 67 65 72 20 7b 0a 20 20 63 68  t Trigger {.  ch
21450 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
21460 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 61 6d        /* The nam
21470 65 20 6f 66 20 74 68 65 20 74 72 69 67 67 65 72  e of the trigger
21480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21490 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 63 68 61          */.  cha
214a0 72 20 2a 74 61 62 6c 65 3b 20 20 20 20 20 20 20  r *table;       
214b0 20 20 20 20 20 2f 2a 20 54 68 65 20 74 61 62 6c       /* The tabl
214c0 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77 68 69  e or view to whi
214d0 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20 61  ch the trigger a
214e0 70 70 6c 69 65 73 20 2a 2f 0a 20 20 75 38 20 6f  pplies */.  u8 o
214f0 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
21500 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b      /* One of TK
21510 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41  _DELETE, TK_UPDA
21520 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 20 20  TE, TK_INSERT   
21530 20 20 20 20 20 20 2a 2f 0a 20 20 75 38 20 74 72        */.  u8 tr
21540 5f 74 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  _tm;            
21550 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 52 49     /* One of TRI
21560 47 47 45 52 5f 42 45 46 4f 52 45 2c 20 54 52 49  GGER_BEFORE, TRI
21570 47 47 45 52 5f 41 46 54 45 52 20 2a 2f 0a 20 20  GGER_AFTER */.  
21580 45 78 70 72 20 2a 70 57 68 65 6e 3b 20 20 20 20  Expr *pWhen;    
21590 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57          /* The W
215a0 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 68  HEN clause of th
215b0 65 20 65 78 70 72 65 73 73 69 6f 6e 20 28 6d 61  e expression (ma
215c0 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20  y be NULL) */.  
215d0 49 64 4c 69 73 74 20 2a 70 43 6f 6c 75 6d 6e 73  IdList *pColumns
215e0 3b 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68  ;       /* If th
215f0 69 73 20 69 73 20 61 6e 20 55 50 44 41 54 45 20  is is an UPDATE 
21600 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e  OF <column-list>
21610 20 74 72 69 67 67 65 72 2c 0a 20 20 20 20 20 20   trigger,.      
21620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21630 20 20 20 20 20 20 20 74 68 65 20 3c 63 6f 6c 75         the <colu
21640 6d 6e 2d 6c 69 73 74 3e 20 69 73 20 73 74 6f 72  mn-list> is stor
21650 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 53 63 68  ed here */.  Sch
21660 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
21670 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63       /* Schema c
21680 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 72  ontaining the tr
21690 69 67 67 65 72 20 2a 2f 0a 20 20 53 63 68 65 6d  igger */.  Schem
216a0 61 20 2a 70 54 61 62 53 63 68 65 6d 61 3b 20 20  a *pTabSchema;  
216b0 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e     /* Schema con
216c0 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61 62 6c  taining the tabl
216d0 65 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74  e */.  TriggerSt
216e0 65 70 20 2a 73 74 65 70 5f 6c 69 73 74 3b 20 2f  ep *step_list; /
216f0 2a 20 4c 69 6e 6b 20 6c 69 73 74 20 6f 66 20 74  * Link list of t
21700 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20 73  rigger program s
21710 74 65 70 73 20 20 20 20 20 20 20 20 20 20 20 20  teps            
21720 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70   */.  Trigger *p
21730 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  Next;         /*
21740 20 4e 65 78 74 20 74 72 69 67 67 65 72 20 61 73   Next trigger as
21750 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
21760 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f  e table */.};../
21770 2a 0a 2a 2a 20 41 20 74 72 69 67 67 65 72 20 69  *.** A trigger i
21780 73 20 65 69 74 68 65 72 20 61 20 42 45 46 4f 52  s either a BEFOR
21790 45 20 6f 72 20 61 6e 20 41 46 54 45 52 20 74 72  E or an AFTER tr
217a0 69 67 67 65 72 2e 20 20 54 68 65 20 66 6f 6c 6c  igger.  The foll
217b0 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e 74 73 0a  owing constants.
217c0 2a 2a 20 64 65 74 65 72 6d 69 6e 65 20 77 68 69  ** determine whi
217d0 63 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ch..**.** If the
217e0 72 65 20 61 72 65 20 6d 75 6c 74 69 70 6c 65 20  re are multiple 
217f0 74 72 69 67 67 65 72 73 2c 20 79 6f 75 20 6d 69  triggers, you mi
21800 67 68 74 20 6f 66 20 73 6f 6d 65 20 42 45 46 4f  ght of some BEFO
21810 52 45 20 61 6e 64 20 73 6f 6d 65 20 41 46 54 45  RE and some AFTE
21820 52 2e 0a 2a 2a 20 49 6e 20 74 68 61 74 20 63 61  R..** In that ca
21830 73 65 73 2c 20 74 68 65 20 63 6f 6e 73 74 61 6e  ses, the constan
21840 74 73 20 62 65 6c 6f 77 20 63 61 6e 20 62 65 20  ts below can be 
21850 4f 52 65 64 20 74 6f 67 65 74 68 65 72 2e 0a 2a  ORed together..*
21860 2f 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47 45  /.#define TRIGGE
21870 52 5f 42 45 46 4f 52 45 20 20 31 0a 23 64 65 66  R_BEFORE  1.#def
21880 69 6e 65 20 54 52 49 47 47 45 52 5f 41 46 54 45  ine TRIGGER_AFTE
21890 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20 41 6e 20  R   2../*. * An 
218a0 69 6e 73 74 61 6e 63 65 20 6f 66 20 73 74 72 75  instance of stru
218b0 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20 69  ct TriggerStep i
218c0 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  s used to store 
218d0 61 20 73 69 6e 67 6c 65 20 53 51 4c 20 73 74 61  a single SQL sta
218e0 74 65 6d 65 6e 74 0a 20 2a 20 74 68 61 74 20 69  tement. * that i
218f0 73 20 61 20 70 61 72 74 20 6f 66 20 61 20 74 72  s a part of a tr
21900 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20  igger-program.. 
21910 2a 0a 20 2a 20 49 6e 73 74 61 6e 63 65 73 20 6f  *. * Instances o
21920 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
21930 53 74 65 70 20 61 72 65 20 73 74 6f 72 65 64 20  Step are stored 
21940 69 6e 20 61 20 73 69 6e 67 6c 79 20 6c 69 6e 6b  in a singly link
21950 65 64 20 6c 69 73 74 20 28 6c 69 6e 6b 65 64 0a  ed list (linked.
21960 20 2a 20 75 73 69 6e 67 20 74 68 65 20 22 70 4e   * using the "pN
21970 65 78 74 22 20 6d 65 6d 62 65 72 29 20 72 65 66  ext" member) ref
21980 65 72 65 6e 63 65 64 20 62 79 20 74 68 65 20 22  erenced by the "
21990 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65  step_list" membe
219a0 72 20 6f 66 20 74 68 65 0a 20 2a 20 61 73 73 6f  r of the. * asso
219b0 63 69 61 74 65 64 20 73 74 72 75 63 74 20 54 72  ciated struct Tr
219c0 69 67 67 65 72 20 69 6e 73 74 61 6e 63 65 2e 20  igger instance. 
219d0 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e  The first elemen
219e0 74 20 6f 66 20 74 68 65 20 6c 69 6e 6b 65 64 20  t of the linked 
219f0 6c 69 73 74 20 69 73 0a 20 2a 20 74 68 65 20 66  list is. * the f
21a00 69 72 73 74 20 73 74 65 70 20 6f 66 20 74 68 65  irst step of the
21a10 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d   trigger-program
21a20 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 6f 70 22  .. *. * The "op"
21a30 20 6d 65 6d 62 65 72 20 69 6e 64 69 63 61 74 65   member indicate
21a40 73 20 77 68 65 74 68 65 72 20 74 68 69 73 20 69  s whether this i
21a50 73 20 61 20 22 44 45 4c 45 54 45 22 2c 20 22 49  s a "DELETE", "I
21a60 4e 53 45 52 54 22 2c 20 22 55 50 44 41 54 45 22  NSERT", "UPDATE"
21a70 20 6f 72 0a 20 2a 20 22 53 45 4c 45 43 54 22 20   or. * "SELECT" 
21a80 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 65 20 6d  statement. The m
21a90 65 61 6e 69 6e 67 73 20 6f 66 20 74 68 65 20 6f  eanings of the o
21aa0 74 68 65 72 20 6d 65 6d 62 65 72 73 20 69 73 20  ther members is 
21ab0 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
21ac0 65 0a 20 2a 20 76 61 6c 75 65 20 6f 66 20 22 6f  e. * value of "o
21ad0 70 22 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20  p" as follows:. 
21ae0 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 49  *. * (op == TK_I
21af0 4e 53 45 52 54 29 0a 20 2a 20 6f 72 63 6f 6e 66  NSERT). * orconf
21b00 20 20 20 20 2d 3e 20 73 74 6f 72 65 73 20 74 68      -> stores th
21b10 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c  e ON CONFLICT al
21b20 67 6f 72 69 74 68 6d 0a 20 2a 20 70 53 65 6c 65  gorithm. * pSele
21b30 63 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20  ct   -> If this 
21b40 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54  is an INSERT INT
21b50 4f 20 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e  O ... SELECT ...
21b60 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e   statement, then
21b70 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
21b80 20 74 68 69 73 20 73 74 6f 72 65 73 20 61 20 70   this stores a p
21b90 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 53 45  ointer to the SE
21ba0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
21bb0 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a  Otherwise NULL..
21bc0 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20   * zTarget   -> 
21bd0 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66  Dequoted name of
21be0 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 69 6e   the table to in
21bf0 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a 20 70 45  sert into.. * pE
21c00 78 70 72 4c 69 73 74 20 2d 3e 20 49 66 20 74 68  xprList -> If th
21c10 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20  is is an INSERT 
21c20 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55 45 53 20  INTO ... VALUES 
21c30 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74  ... statement, t
21c40 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  hen. *          
21c50 20 20 20 20 74 68 69 73 20 73 74 6f 72 65 73 20      this stores 
21c60 76 61 6c 75 65 73 20 74 6f 20 62 65 20 69 6e 73  values to be ins
21c70 65 72 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65  erted. Otherwise
21c80 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69 73   NULL.. * pIdLis
21c90 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69  t   -> If this i
21ca0 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f  s an INSERT INTO
21cb0 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e 61   ... (<column-na
21cc0 6d 65 73 3e 29 20 56 41 4c 55 45 53 20 2e 2e 2e  mes>) VALUES ...
21cd0 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
21ce0 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e   statement, then
21cf0 20 74 68 69 73 20 73 74 6f 72 65 73 20 74 68 65   this stores the
21d00 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74 6f   column-names to
21d10 20 62 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20   be. *          
21d20 20 20 20 20 69 6e 73 65 72 74 65 64 20 69 6e 74      inserted int
21d30 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20  o.. *. * (op == 
21d40 54 4b 5f 44 45 4c 45 54 45 29 0a 20 2a 20 7a 54  TK_DELETE). * zT
21d50 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f  arget   -> Dequo
21d60 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  ted name of the 
21d70 74 61 62 6c 65 20 74 6f 20 64 65 6c 65 74 65 20  table to delete 
21d80 66 72 6f 6d 2e 0a 20 2a 20 70 57 68 65 72 65 20  from.. * pWhere 
21d90 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20     -> The WHERE 
21da0 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 44 45  clause of the DE
21db0 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69  LETE statement i
21dc0 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69  f one is specifi
21dd0 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  ed.. *          
21de0 20 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55      Otherwise NU
21df0 4c 4c 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d  LL.. *. * (op ==
21e00 20 54 4b 5f 55 50 44 41 54 45 29 0a 20 2a 20 7a   TK_UPDATE). * z
21e10 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75  Target   -> Dequ
21e20 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65  oted name of the
21e30 20 74 61 62 6c 65 20 74 6f 20 75 70 64 61 74 65   table to update
21e40 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d  .. * pWhere    -
21e50 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75  > The WHERE clau
21e60 73 65 20 6f 66 20 74 68 65 20 55 50 44 41 54 45  se of the UPDATE
21e70 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e   statement if on
21e80 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a  e is specified..
21e90 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
21ea0 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a  Otherwise NULL..
21eb0 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20   * pExprList -> 
21ec0 41 20 6c 69 73 74 20 6f 66 20 74 68 65 20 63 6f  A list of the co
21ed0 6c 75 6d 6e 73 20 74 6f 20 75 70 64 61 74 65 20  lumns to update 
21ee0 61 6e 64 20 74 68 65 20 65 78 70 72 65 73 73 69  and the expressi
21ef0 6f 6e 73 20 74 6f 20 75 70 64 61 74 65 0a 20 2a  ons to update. *
21f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
21f10 65 6d 20 74 6f 2e 20 53 65 65 20 73 71 6c 69 74  em to. See sqlit
21f20 65 33 55 70 64 61 74 65 28 29 20 64 6f 63 75 6d  e3Update() docum
21f30 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22 70 43 68  entation of "pCh
21f40 61 6e 67 65 73 22 0a 20 2a 20 20 20 20 20 20 20  anges". *       
21f50 20 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74 2e         argument.
21f60 0a 20 2a 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54  . *. */.struct T
21f70 72 69 67 67 65 72 53 74 65 70 20 7b 0a 20 20 75  riggerStep {.  u
21f80 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  8 op;           
21f90 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b      /* One of TK
21fa0 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41  _DELETE, TK_UPDA
21fb0 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 2c 20 54  TE, TK_INSERT, T
21fc0 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20 20 75 38  K_SELECT */.  u8
21fd0 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20   orconf;        
21fe0 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62 61 63     /* OE_Rollbac
21ff0 6b 20 65 74 63 2e 20 2a 2f 0a 20 20 54 72 69 67  k etc. */.  Trig
22000 67 65 72 20 2a 70 54 72 69 67 3b 20 20 20 20 20  ger *pTrig;     
22010 20 2f 2a 20 54 68 65 20 74 72 69 67 67 65 72 20   /* The trigger 
22020 74 68 61 74 20 74 68 69 73 20 73 74 65 70 20 69  that this step i
22030 73 20 61 20 70 61 72 74 20 6f 66 20 2a 2f 0a 20  s a part of */. 
22040 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
22050 3b 20 20 20 20 20 2f 2a 20 53 45 4c 45 43 54 20  ;     /* SELECT 
22060 73 74 61 74 65 6d 65 6e 74 20 6f 72 20 52 48 53  statement or RHS
22070 20 6f 66 20 49 4e 53 45 52 54 20 49 4e 54 4f 20   of INSERT INTO 
22080 53 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f 0a 20 20  SELECT ... */.  
22090 63 68 61 72 20 2a 7a 54 61 72 67 65 74 3b 20 20  char *zTarget;  
220a0 20 20 20 20 20 2f 2a 20 54 61 72 67 65 74 20 74       /* Target t
220b0 61 62 6c 65 20 66 6f 72 20 44 45 4c 45 54 45 2c  able for DELETE,
220c0 20 55 50 44 41 54 45 2c 20 49 4e 53 45 52 54 20   UPDATE, INSERT 
220d0 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72  */.  Expr *pWher
220e0 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  e;        /* The
220f0 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f   WHERE clause fo
22100 72 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41  r DELETE or UPDA
22110 54 45 20 73 74 65 70 73 20 2a 2f 0a 20 20 45 78  TE steps */.  Ex
22120 70 72 4c 69 73 74 20 2a 70 45 78 70 72 4c 69 73  prList *pExprLis
22130 74 3b 20 2f 2a 20 53 45 54 20 63 6c 61 75 73 65  t; /* SET clause
22140 20 66 6f 72 20 55 50 44 41 54 45 2e 20 2a 2f 0a   for UPDATE. */.
22150 20 20 49 64 4c 69 73 74 20 2a 70 49 64 4c 69 73    IdList *pIdLis
22160 74 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e  t;     /* Column
22170 20 6e 61 6d 65 73 20 66 6f 72 20 49 4e 53 45 52   names for INSER
22180 54 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74  T */.  TriggerSt
22190 65 70 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e  ep *pNext;  /* N
221a0 65 78 74 20 69 6e 20 74 68 65 20 6c 69 6e 6b 2d  ext in the link-
221b0 6c 69 73 74 20 2a 2f 0a 20 20 54 72 69 67 67 65  list */.  Trigge
221c0 72 53 74 65 70 20 2a 70 4c 61 73 74 3b 20 20 2f  rStep *pLast;  /
221d0 2a 20 4c 61 73 74 20 65 6c 65 6d 65 6e 74 20 69  * Last element i
221e0 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20 56 61 6c  n link-list. Val
221f0 69 64 20 66 6f 72 20 31 73 74 20 65 6c 65 6d 20  id for 1st elem 
22200 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  only */.};../*.*
22210 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
22220 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  structure contai
22230 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 75  ns information u
22240 73 65 64 20 62 79 20 74 68 65 20 73 71 6c 69 74  sed by the sqlit
22250 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f 75 74 69  eFix....** routi
22260 6e 65 73 20 61 73 20 74 68 65 79 20 77 61 6c 6b  nes as they walk
22270 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20   the parse tree 
22280 74 6f 20 6d 61 6b 65 20 64 61 74 61 62 61 73 65  to make database
22290 20 72 65 66 65 72 65 6e 63 65 73 0a 2a 2a 20 65   references.** e
222a0 78 70 6c 69 63 69 74 2e 0a 2a 2f 0a 74 79 70 65  xplicit..*/.type
222b0 64 65 66 20 73 74 72 75 63 74 20 44 62 46 69 78  def struct DbFix
222c0 65 72 20 44 62 46 69 78 65 72 3b 0a 73 74 72 75  er DbFixer;.stru
222d0 63 74 20 44 62 46 69 78 65 72 20 7b 0a 20 20 50  ct DbFixer {.  P
222e0 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20  arse *pParse;   
222f0 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 69 6e     /* The parsin
22300 67 20 63 6f 6e 74 65 78 74 2e 20 20 45 72 72 6f  g context.  Erro
22310 72 20 6d 65 73 73 61 67 65 73 20 77 72 69 74 74  r messages writt
22320 65 6e 20 68 65 72 65 20 2a 2f 0a 20 20 53 63 68  en here */.  Sch
22330 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
22340 20 2f 2a 20 46 69 78 20 69 74 65 6d 73 20 74 6f   /* Fix items to
22350 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a 2f 0a   this schema */.
22360 20 20 69 6e 74 20 62 56 61 72 4f 6e 6c 79 3b 20    int bVarOnly; 
22370 20 20 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 66        /* Check f
22380 6f 72 20 76 61 72 69 61 62 6c 65 20 72 65 66 65  or variable refe
22390 72 65 6e 63 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20  rences only */. 
223a0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
223b0 3b 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72  ;    /* Make sur
223c0 65 20 61 6c 6c 20 6f 62 6a 65 63 74 73 20 61 72  e all objects ar
223d0 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74  e contained in t
223e0 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a  his database */.
223f0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54    const char *zT
22400 79 70 65 3b 20 20 2f 2a 20 54 79 70 65 20 6f 66  ype;  /* Type of
22410 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d   the container -
22420 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20   used for error 
22430 6d 65 73 73 61 67 65 73 20 2a 2f 0a 20 20 63 6f  messages */.  co
22440 6e 73 74 20 54 6f 6b 65 6e 20 2a 70 4e 61 6d 65  nst Token *pName
22450 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65  ; /* Name of the
22460 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65   container - use
22470 64 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73  d for error mess
22480 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ages */.};../*.*
22490 2a 20 41 6e 20 6f 62 6a 65 63 74 65 64 20 75 73  * An objected us
224a0 65 64 20 74 6f 20 61 63 63 75 6d 75 6c 61 74 65  ed to accumulate
224b0 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 20 73   the text of a s
224c0 74 72 69 6e 67 20 77 68 65 72 65 20 77 65 0a 2a  tring where we.*
224d0 2a 20 64 6f 20 6e 6f 74 20 6e 65 63 65 73 73 61  * do not necessa
224e0 72 69 6c 79 20 6b 6e 6f 77 20 68 6f 77 20 62 69  rily know how bi
224f0 67 20 74 68 65 20 73 74 72 69 6e 67 20 77 69 6c  g the string wil
22500 6c 20 62 65 20 69 6e 20 74 68 65 20 65 6e 64 2e  l be in the end.
22510 0a 2a 2f 0a 73 74 72 75 63 74 20 53 74 72 41 63  .*/.struct StrAc
22520 63 75 6d 20 7b 0a 20 20 73 71 6c 69 74 65 33 20  cum {.  sqlite3 
22530 2a 64 62 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  *db;         /* 
22540 4f 70 74 69 6f 6e 61 6c 20 64 61 74 61 62 61 73  Optional databas
22550 65 20 66 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 2e  e for lookaside.
22560 20 20 43 61 6e 20 62 65 20 4e 55 4c 4c 20 2a 2f    Can be NULL */
22570 0a 20 20 63 68 61 72 20 2a 7a 42 61 73 65 3b 20  .  char *zBase; 
22580 20 20 20 20 20 20 20 20 2f 2a 20 41 20 62 61 73          /* A bas
22590 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 4e  e allocation.  N
225a0 6f 74 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 2e 20  ot from malloc. 
225b0 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 65 78 74  */.  char *zText
225c0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
225d0 20 73 74 72 69 6e 67 20 63 6f 6c 6c 65 63 74 65   string collecte
225e0 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75 33  d so far */.  u3
225f0 32 20 20 6e 43 68 61 72 3b 20 20 20 20 20 20 20  2  nChar;       
22600 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20     /* Length of 
22610 74 68 65 20 73 74 72 69 6e 67 20 73 6f 20 66 61  the string so fa
22620 72 20 2a 2f 0a 20 20 75 33 32 20 20 6e 41 6c 6c  r */.  u32  nAll
22630 6f 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  oc;         /* A
22640 6d 6f 75 6e 74 20 6f 66 20 73 70 61 63 65 20 61  mount of space a
22650 6c 6c 6f 63 61 74 65 64 20 69 6e 20 7a 54 65 78  llocated in zTex
22660 74 20 2a 2f 0a 20 20 75 33 32 20 20 6d 78 41 6c  t */.  u32  mxAl
22670 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d  loc;        /* M
22680 61 78 69 6d 75 6d 20 61 6c 6c 6f 77 65 64 20 61  aximum allowed a
22690 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 30 20 66 6f  llocation.  0 fo
226a0 72 20 6e 6f 20 6d 61 6c 6c 6f 63 20 75 73 61 67  r no malloc usag
226b0 65 20 2a 2f 0a 20 20 75 38 20 20 20 61 63 63 45  e */.  u8   accE
226c0 72 72 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 53  rror;       /* S
226d0 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20 6f 72  TRACCUM_NOMEM or
226e0 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42 49 47   STRACCUM_TOOBIG
226f0 20 2a 2f 0a 20 20 75 38 20 20 20 70 72 69 6e 74   */.  u8   print
22700 66 46 6c 61 67 73 3b 20 20 20 20 2f 2a 20 53 51  fFlags;    /* SQ
22710 4c 49 54 45 5f 50 52 49 4e 54 46 20 66 6c 61 67  LITE_PRINTF flag
22720 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 23 64  s below */.};.#d
22730 65 66 69 6e 65 20 53 54 52 41 43 43 55 4d 5f 4e  efine STRACCUM_N
22740 4f 4d 45 4d 20 20 20 31 0a 23 64 65 66 69 6e 65  OMEM   1.#define
22750 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42 49 47   STRACCUM_TOOBIG
22760 20 20 32 0a 23 64 65 66 69 6e 65 20 53 51 4c 49    2.#define SQLI
22770 54 45 5f 50 52 49 4e 54 46 5f 49 4e 54 45 52 4e  TE_PRINTF_INTERN
22780 41 4c 20 30 78 30 31 20 20 2f 2a 20 49 6e 74 65  AL 0x01  /* Inte
22790 72 6e 61 6c 2d 75 73 65 2d 6f 6e 6c 79 20 63 6f  rnal-use-only co
227a0 6e 76 65 72 74 65 72 73 20 61 6c 6c 6f 77 65 64  nverters allowed
227b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
227c0 54 45 5f 50 52 49 4e 54 46 5f 53 51 4c 46 55 4e  TE_PRINTF_SQLFUN
227d0 43 20 20 30 78 30 32 20 20 2f 2a 20 53 51 4c 20  C  0x02  /* SQL 
227e0 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e  function argumen
227f0 74 73 20 74 6f 20 56 58 50 72 69 6e 74 66 20 2a  ts to VXPrintf *
22800 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
22810 5f 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43 45 44  _PRINTF_MALLOCED
22820 20 30 78 30 34 20 20 2f 2a 20 54 72 75 65 20 69   0x04  /* True i
22830 66 20 78 54 65 78 74 20 69 73 20 61 6c 6c 6f 63  f xText is alloc
22840 61 74 65 64 20 73 70 61 63 65 20 2a 2f 0a 0a 23  ated space */..#
22850 64 65 66 69 6e 65 20 69 73 4d 61 6c 6c 6f 63 65  define isMalloce
22860 64 28 58 29 20 20 28 28 28 58 29 2d 3e 70 72 69  d(X)  (((X)->pri
22870 6e 74 66 46 6c 61 67 73 20 26 20 53 51 4c 49 54  ntfFlags & SQLIT
22880 45 5f 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43 45  E_PRINTF_MALLOCE
22890 44 29 21 3d 30 29 0a 0a 0a 2f 2a 0a 2a 2a 20 41  D)!=0).../*.** A
228a0 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73   pointer to this
228b0 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73   structure is us
228c0 65 64 20 74 6f 20 63 6f 6d 6d 75 6e 69 63 61 74  ed to communicat
228d0 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a  e information.**
228e0 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 49 6e 69   from sqlite3Ini
228f0 74 20 61 6e 64 20 4f 50 5f 50 61 72 73 65 53 63  t and OP_ParseSc
22900 68 65 6d 61 20 69 6e 74 6f 20 74 68 65 20 73 71  hema into the sq
22910 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63  lite3InitCallbac
22920 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74  k..*/.typedef st
22930 72 75 63 74 20 7b 0a 20 20 73 71 6c 69 74 65 33  ruct {.  sqlite3
22940 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20   *db;        /* 
22950 54 68 65 20 64 61 74 61 62 61 73 65 20 62 65 69  The database bei
22960 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  ng initialized *
22970 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72 72  /.  char **pzErr
22980 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72 72 6f 72  Msg;    /* Error
22990 20 6d 65 73 73 61 67 65 20 73 74 6f 72 65 64 20   message stored 
229a0 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20 69 44  here */.  int iD
229b0 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  b;            /*
229c0 20 30 20 66 6f 72 20 6d 61 69 6e 20 64 61 74 61   0 for main data
229d0 62 61 73 65 2e 20 20 31 20 66 6f 72 20 54 45 4d  base.  1 for TEM
229e0 50 2c 20 32 2e 2e 20 66 6f 72 20 41 54 54 41 43  P, 2.. for ATTAC
229f0 48 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b  Hed */.  int rc;
22a00 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
22a10 52 65 73 75 6c 74 20 63 6f 64 65 20 73 74 6f 72  Result code stor
22a20 65 64 20 68 65 72 65 20 2a 2f 0a 7d 20 49 6e 69  ed here */.} Ini
22a30 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20 53 74  tData;../*.** St
22a40 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 69  ructure containi
22a50 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e 66 69 67  ng global config
22a60 75 72 61 74 69 6f 6e 20 64 61 74 61 20 66 6f 72  uration data for
22a70 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72   the SQLite libr
22a80 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ary..**.** This 
22a90 73 74 72 75 63 74 75 72 65 20 61 6c 73 6f 20 63  structure also c
22aa0 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20 73 74 61  ontains some sta
22ab0 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  te information..
22ac0 2a 2f 0a 73 74 72 75 63 74 20 53 71 6c 69 74 65  */.struct Sqlite
22ad0 33 43 6f 6e 66 69 67 20 7b 0a 20 20 69 6e 74 20  3Config {.  int 
22ae0 62 4d 65 6d 73 74 61 74 3b 20 20 20 20 20 20 20  bMemstat;       
22af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
22b00 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20   True to enable 
22b10 6d 65 6d 6f 72 79 20 73 74 61 74 75 73 20 2a 2f  memory status */
22b20 0a 20 20 69 6e 74 20 62 43 6f 72 65 4d 75 74 65  .  int bCoreMute
22b30 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  x;              
22b40 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20       /* True to 
22b50 65 6e 61 62 6c 65 20 63 6f 72 65 20 6d 75 74 65  enable core mute
22b60 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62 46  xing */.  int bF
22b70 75 6c 6c 4d 75 74 65 78 3b 20 20 20 20 20 20 20  ullMutex;       
22b80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
22b90 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 66 75  rue to enable fu
22ba0 6c 6c 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20  ll mutexing */. 
22bb0 20 69 6e 74 20 62 4f 70 65 6e 55 72 69 3b 20 20   int bOpenUri;  
22bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22bd0 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 69 6e     /* True to in
22be0 74 65 72 70 72 65 74 20 66 69 6c 65 6e 61 6d 65  terpret filename
22bf0 73 20 61 73 20 55 52 49 73 20 2a 2f 0a 20 20 69  s as URIs */.  i
22c00 6e 74 20 62 55 73 65 43 69 73 3b 20 20 20 20 20  nt bUseCis;     
22c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c20 20 2f 2a 20 55 73 65 20 63 6f 76 65 72 69 6e 67   /* Use covering
22c30 20 69 6e 64 69 63 65 73 20 66 6f 72 20 66 75 6c   indices for ful
22c40 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20 20 69 6e 74  l-scans */.  int
22c50 20 6d 78 53 74 72 6c 65 6e 3b 20 20 20 20 20 20   mxStrlen;      
22c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22c70 2a 20 4d 61 78 69 6d 75 6d 20 73 74 72 69 6e 67  * Maximum string
22c80 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 69 6e 74   length */.  int
22c90 20 6e 65 76 65 72 43 6f 72 72 75 70 74 3b 20 20   neverCorrupt;  
22ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22cb0 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 61 6c  * Database is al
22cc0 77 61 79 73 20 77 65 6c 6c 2d 66 6f 72 6d 65 64  ways well-formed
22cd0 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4c 6f 6f 6b   */.  int szLook
22ce0 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20  aside;          
22cf0 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
22d00 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66  lt lookaside buf
22d10 66 65 72 20 73 69 7a 65 20 2a 2f 0a 20 20 69 6e  fer size */.  in
22d20 74 20 6e 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20  t nLookaside;   
22d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d40 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61  /* Default looka
22d50 73 69 64 65 20 62 75 66 66 65 72 20 63 6f 75 6e  side buffer coun
22d60 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 6d 74  t */.  int nStmt
22d70 53 70 69 6c 6c 3b 20 20 20 20 20 20 20 20 20 20  Spill;          
22d80 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 6d 74           /* Stmt
22d90 2d 6a 6f 75 72 6e 61 6c 20 73 70 69 6c 6c 2d 74  -journal spill-t
22da0 6f 2d 64 69 73 6b 20 74 68 72 65 73 68 6f 6c 64  o-disk threshold
22db0 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 65   */.  sqlite3_me
22dc0 6d 5f 6d 65 74 68 6f 64 73 20 6d 3b 20 20 20 20  m_methods m;    
22dd0 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c          /* Low-l
22de0 65 76 65 6c 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  evel memory allo
22df0 63 61 74 69 6f 6e 20 69 6e 74 65 72 66 61 63 65  cation interface
22e00 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75   */.  sqlite3_mu
22e10 74 65 78 5f 6d 65 74 68 6f 64 73 20 6d 75 74 65  tex_methods mute
22e20 78 3b 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c  x;      /* Low-l
22e30 65 76 65 6c 20 6d 75 74 65 78 20 69 6e 74 65 72  evel mutex inter
22e40 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65  face */.  sqlite
22e50 33 5f 70 63 61 63 68 65 5f 6d 65 74 68 6f 64 73  3_pcache_methods
22e60 32 20 70 63 61 63 68 65 32 3b 20 20 2f 2a 20 4c  2 pcache2;  /* L
22e70 6f 77 2d 6c 65 76 65 6c 20 70 61 67 65 2d 63 61  ow-level page-ca
22e80 63 68 65 20 69 6e 74 65 72 66 61 63 65 20 2a 2f  che interface */
22e90 0a 20 20 76 6f 69 64 20 2a 70 48 65 61 70 3b 20  .  void *pHeap; 
22ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22eb0 20 20 20 20 20 2f 2a 20 48 65 61 70 20 73 74 6f       /* Heap sto
22ec0 72 61 67 65 20 73 70 61 63 65 20 2a 2f 0a 20 20  rage space */.  
22ed0 69 6e 74 20 6e 48 65 61 70 3b 20 20 20 20 20 20  int nHeap;      
22ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ef0 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 70 48 65    /* Size of pHe
22f00 61 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e  ap[] */.  int mn
22f10 52 65 71 2c 20 6d 78 52 65 71 3b 20 20 20 20 20  Req, mxReq;     
22f20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
22f30 69 6e 20 61 6e 64 20 6d 61 78 20 68 65 61 70 20  in and max heap 
22f40 72 65 71 75 65 73 74 73 20 73 69 7a 65 73 20 2a  requests sizes *
22f50 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36  /.  sqlite3_int6
22f60 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20  4 szMmap;       
22f70 20 20 20 20 20 20 2f 2a 20 6d 6d 61 70 28 29 20        /* mmap() 
22f80 73 70 61 63 65 20 70 65 72 20 6f 70 65 6e 20 66  space per open f
22f90 69 6c 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ile */.  sqlite3
22fa0 5f 69 6e 74 36 34 20 6d 78 4d 6d 61 70 3b 20 20  _int64 mxMmap;  
22fb0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
22fc0 78 69 6d 75 6d 20 76 61 6c 75 65 20 66 6f 72 20  ximum value for 
22fd0 73 7a 4d 6d 61 70 20 2a 2f 0a 20 20 76 6f 69 64  szMmap */.  void
22fe0 20 2a 70 53 63 72 61 74 63 68 3b 20 20 20 20 20   *pScratch;     
22ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
23000 20 53 63 72 61 74 63 68 20 6d 65 6d 6f 72 79 20   Scratch memory 
23010 2a 2f 0a 20 20 69 6e 74 20 73 7a 53 63 72 61 74  */.  int szScrat
23020 63 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ch;             
23030 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
23040 66 20 65 61 63 68 20 73 63 72 61 74 63 68 20 62  f each scratch b
23050 75 66 66 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  uffer */.  int n
23060 53 63 72 61 74 63 68 3b 20 20 20 20 20 20 20 20  Scratch;        
23070 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
23080 4e 75 6d 62 65 72 20 6f 66 20 73 63 72 61 74 63  Number of scratc
23090 68 20 62 75 66 66 65 72 73 20 2a 2f 0a 20 20 76  h buffers */.  v
230a0 6f 69 64 20 2a 70 50 61 67 65 3b 20 20 20 20 20  oid *pPage;     
230b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
230c0 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20 6d   /* Page cache m
230d0 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73  emory */.  int s
230e0 7a 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20  zPage;          
230f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
23100 53 69 7a 65 20 6f 66 20 65 61 63 68 20 70 61 67  Size of each pag
23110 65 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a  e in pPage[] */.
23120 20 20 69 6e 74 20 6e 50 61 67 65 3b 20 20 20 20    int nPage;    
23130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23140 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
23150 20 70 61 67 65 73 20 69 6e 20 70 50 61 67 65 5b   pages in pPage[
23160 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 50 61 72  ] */.  int mxPar
23170 73 65 72 53 74 61 63 6b 3b 20 20 20 20 20 20 20  serStack;       
23180 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 61 78 69           /* maxi
23190 6d 75 6d 20 64 65 70 74 68 20 6f 66 20 74 68 65  mum depth of the
231a0 20 70 61 72 73 65 72 20 73 74 61 63 6b 20 2a 2f   parser stack */
231b0 0a 20 20 69 6e 74 20 73 68 61 72 65 64 43 61 63  .  int sharedCac
231c0 68 65 45 6e 61 62 6c 65 64 3b 20 20 20 20 20 20  heEnabled;      
231d0 20 20 20 20 20 2f 2a 20 74 72 75 65 20 69 66 20       /* true if 
231e0 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64  shared-cache mod
231f0 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20 20 75  e enabled */.  u
23200 33 32 20 73 7a 50 6d 61 3b 20 20 20 20 20 20 20  32 szPma;       
23210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23220 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 53 6f 72 74   /* Maximum Sort
23230 65 72 20 50 4d 41 20 73 69 7a 65 20 2a 2f 0a 20  er PMA size */. 
23240 20 2f 2a 20 54 68 65 20 61 62 6f 76 65 20 6d 69   /* The above mi
23250 67 68 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a  ght be initializ
23260 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 20  ed to non-zero. 
23270 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e   The following n
23280 65 65 64 20 74 6f 20 61 6c 77 61 79 73 0a 20 20  eed to always.  
23290 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 62 65 20  ** initially be 
232a0 7a 65 72 6f 2c 20 68 6f 77 65 76 65 72 2e 20 2a  zero, however. *
232b0 2f 0a 20 20 69 6e 74 20 69 73 49 6e 69 74 3b 20  /.  int isInit; 
232c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
232d0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66        /* True af
232e0 74 65 72 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  ter initializati
232f0 6f 6e 20 68 61 73 20 66 69 6e 69 73 68 65 64 20  on has finished 
23300 2a 2f 0a 20 20 69 6e 74 20 69 6e 50 72 6f 67 72  */.  int inProgr
23310 65 73 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ess;            
23320 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 77         /* True w
23330 68 69 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61 74  hile initializat
23340 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73 20  ion in progress 
23350 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 75 74 65 78  */.  int isMutex
23360 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  Init;           
23370 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61         /* True a
23380 66 74 65 72 20 6d 75 74 65 78 65 73 20 61 72 65  fter mutexes are
23390 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
233a0 20 20 69 6e 74 20 69 73 4d 61 6c 6c 6f 63 49 6e    int isMallocIn
233b0 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  it;             
233c0 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65      /* True afte
233d0 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74  r malloc is init
233e0 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74  ialized */.  int
233f0 20 69 73 50 43 61 63 68 65 49 6e 69 74 3b 20 20   isPCacheInit;  
23400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
23410 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c  * True after mal
23420 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a  loc is initializ
23430 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66  ed */.  int nRef
23440 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20  InitMutex;      
23450 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
23460 62 65 72 20 6f 66 20 75 73 65 72 73 20 6f 66 20  ber of users of 
23470 70 49 6e 69 74 4d 75 74 65 78 20 2a 2f 0a 20 20  pInitMutex */.  
23480 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 70  sqlite3_mutex *p
23490 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20 20  InitMutex;      
234a0 20 20 2f 2a 20 4d 75 74 65 78 20 75 73 65 64 20    /* Mutex used 
234b0 62 79 20 73 71 6c 69 74 65 33 5f 69 6e 69 74 69  by sqlite3_initi
234c0 61 6c 69 7a 65 28 29 20 2a 2f 0a 20 20 76 6f 69  alize() */.  voi
234d0 64 20 28 2a 78 4c 6f 67 29 28 76 6f 69 64 2a 2c  d (*xLog)(void*,
234e0 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
234f0 3b 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 66 6f  ; /* Function fo
23500 72 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20 20 76  r logging */.  v
23510 6f 69 64 20 2a 70 4c 6f 67 41 72 67 3b 20 20 20  oid *pLogArg;   
23520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23530 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67      /* First arg
23540 75 6d 65 6e 74 20 74 6f 20 78 4c 6f 67 28 29 20  ument to xLog() 
23550 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
23560 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a 20  _ENABLE_SQLLOG. 
23570 20 76 6f 69 64 28 2a 78 53 71 6c 6c 6f 67 29 28   void(*xSqllog)(
23580 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63  void*,sqlite3*,c
23590 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29  onst char*, int)
235a0 3b 0a 20 20 76 6f 69 64 20 2a 70 53 71 6c 6c 6f  ;.  void *pSqllo
235b0 67 41 72 67 3b 0a 23 65 6e 64 69 66 0a 23 69 66  gArg;.#endif.#if
235c0 64 65 66 20 53 51 4c 49 54 45 5f 56 44 42 45 5f  def SQLITE_VDBE_
235d0 43 4f 56 45 52 41 47 45 0a 20 20 2f 2a 20 54 68  COVERAGE.  /* Th
235e0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c  e following call
235f0 62 61 63 6b 20 28 69 66 20 6e 6f 74 20 4e 55 4c  back (if not NUL
23600 4c 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 6f 6e  L) is invoked on
23610 20 65 76 65 72 79 20 56 44 42 45 20 62 72 61 6e   every VDBE bran
23620 63 68 0a 20 20 2a 2a 20 6f 70 65 72 61 74 69 6f  ch.  ** operatio
23630 6e 2e 20 20 53 65 74 20 74 68 65 20 63 61 6c 6c  n.  Set the call
23640 62 61 63 6b 20 75 73 69 6e 67 20 53 51 4c 49 54  back using SQLIT
23650 45 5f 54 45 53 54 43 54 52 4c 5f 56 44 42 45 5f  E_TESTCTRL_VDBE_
23660 43 4f 56 45 52 41 47 45 2e 0a 20 20 2a 2f 0a 20  COVERAGE..  */. 
23670 20 76 6f 69 64 20 28 2a 78 56 64 62 65 42 72 61   void (*xVdbeBra
23680 6e 63 68 29 28 76 6f 69 64 2a 2c 69 6e 74 20 69  nch)(void*,int i
23690 53 72 63 4c 69 6e 65 2c 75 38 20 65 54 68 69 73  SrcLine,u8 eThis
236a0 2c 75 38 20 65 4d 78 29 3b 20 20 2f 2a 20 43 61  ,u8 eMx);  /* Ca
236b0 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64  llback */.  void
236c0 20 2a 70 56 64 62 65 42 72 61 6e 63 68 41 72 67   *pVdbeBranchArg
236d0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
236e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
236f0 20 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67        /* 1st arg
23700 75 6d 65 6e 74 20 2a 2f 0a 23 65 6e 64 69 66 0a  ument */.#endif.
23710 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55  #ifndef SQLITE_U
23720 4e 54 45 53 54 41 42 4c 45 0a 20 20 69 6e 74 20  NTESTABLE.  int 
23730 28 2a 78 54 65 73 74 43 61 6c 6c 62 61 63 6b 29  (*xTestCallback)
23740 28 69 6e 74 29 3b 20 20 20 20 20 20 20 20 2f 2a  (int);        /*
23750 20 49 6e 76 6f 6b 65 64 20 62 79 20 73 71 6c 69   Invoked by sqli
23760 74 65 33 46 61 75 6c 74 53 69 6d 28 29 20 2a 2f  te3FaultSim() */
23770 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 62 4c  .#endif.  int bL
23780 6f 63 61 6c 74 69 6d 65 46 61 75 6c 74 3b 20 20  ocaltimeFault;  
23790 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
237a0 72 75 65 20 74 6f 20 66 61 69 6c 20 6c 6f 63 61  rue to fail loca
237b0 6c 74 69 6d 65 28 29 20 63 61 6c 6c 73 20 2a 2f  ltime() calls */
237c0 0a 20 20 69 6e 74 20 69 4f 6e 63 65 52 65 73 65  .  int iOnceRese
237d0 74 54 68 72 65 73 68 6f 6c 64 3b 20 20 20 20 20  tThreshold;     
237e0 20 20 20 20 20 2f 2a 20 57 68 65 6e 20 74 6f 20       /* When to 
237f0 72 65 73 65 74 20 4f 50 5f 4f 6e 63 65 20 63 6f  reset OP_Once co
23800 75 6e 74 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  unters */.};../*
23810 0a 2a 2a 20 54 68 69 73 20 6d 61 63 72 6f 20 69  .** This macro i
23820 73 20 75 73 65 64 20 69 6e 73 69 64 65 20 6f 66  s used inside of
23830 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
23840 65 6e 74 73 20 74 6f 20 69 6e 64 69 63 61 74 65  ents to indicate
23850 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 61 73 73   that.** the ass
23860 65 72 74 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69  ert is only vali
23870 64 20 6f 6e 20 61 20 77 65 6c 6c 2d 66 6f 72 6d  d on a well-form
23880 65 64 20 64 61 74 61 62 61 73 65 2e 20 20 49 6e  ed database.  In
23890 73 74 65 61 64 20 6f 66 3a 0a 2a 2a 0a 2a 2a 20  stead of:.**.** 
238a0 20 20 20 20 61 73 73 65 72 74 28 20 58 20 29 3b      assert( X );
238b0 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20 77 72 69 74 65  .**.** One write
238c0 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73  s:.**.**     ass
238d0 65 72 74 28 20 58 20 7c 7c 20 43 4f 52 52 55 50  ert( X || CORRUP
238e0 54 5f 44 42 20 29 3b 0a 2a 2a 0a 2a 2a 20 43 4f  T_DB );.**.** CO
238f0 52 52 55 50 54 5f 44 42 20 69 73 20 74 72 75 65  RRUPT_DB is true
23900 20 64 75 72 69 6e 67 20 6e 6f 72 6d 61 6c 20 6f   during normal o
23910 70 65 72 61 74 69 6f 6e 2e 20 20 43 4f 52 52 55  peration.  CORRU
23920 50 54 5f 44 42 20 64 6f 65 73 20 6e 6f 74 20 69  PT_DB does not i
23930 6e 64 69 63 61 74 65 0a 2a 2a 20 74 68 61 74 20  ndicate.** that 
23940 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20  the database is 
23950 64 65 66 69 6e 69 74 65 6c 79 20 63 6f 72 72 75  definitely corru
23960 70 74 2c 20 6f 6e 6c 79 20 74 68 61 74 20 69 74  pt, only that it
23970 20 6d 69 67 68 74 20 62 65 20 63 6f 72 72 75 70   might be corrup
23980 74 2e 0a 2a 2a 20 46 6f 72 20 6d 6f 73 74 20 74  t..** For most t
23990 65 73 74 20 63 61 73 65 73 2c 20 43 4f 52 52 55  est cases, CORRU
239a0 50 54 5f 44 42 20 69 73 20 73 65 74 20 74 6f 20  PT_DB is set to 
239b0 66 61 6c 73 65 20 75 73 69 6e 67 20 61 20 73 70  false using a sp
239c0 65 63 69 61 6c 0a 2a 2a 20 73 71 6c 69 74 65 33  ecial.** sqlite3
239d0 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 29 2e  _test_control().
239e0 20 20 54 68 69 73 20 65 6e 61 62 6c 65 73 20 61    This enables a
239f0 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
23a00 74 73 20 74 6f 20 70 72 6f 76 65 0a 2a 2a 20 74  ts to prove.** t
23a10 68 69 6e 67 73 20 74 68 61 74 20 61 72 65 20 61  hings that are a
23a20 6c 77 61 79 73 20 74 72 75 65 20 66 6f 72 20 77  lways true for w
23a30 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62  ell-formed datab
23a40 61 73 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ases..*/.#define
23a50 20 43 4f 52 52 55 50 54 5f 44 42 20 20 28 73 71   CORRUPT_DB  (sq
23a60 6c 69 74 65 33 43 6f 6e 66 69 67 2e 6e 65 76 65  lite3Config.neve
23a70 72 43 6f 72 72 75 70 74 3d 3d 30 29 0a 0a 2f 2a  rCorrupt==0)../*
23a80 0a 2a 2a 20 43 6f 6e 74 65 78 74 20 70 6f 69 6e  .** Context poin
23a90 74 65 72 20 70 61 73 73 65 64 20 64 6f 77 6e 20  ter passed down 
23aa0 74 68 72 6f 75 67 68 20 74 68 65 20 74 72 65 65  through the tree
23ab0 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74  -walk..*/.struct
23ac0 20 57 61 6c 6b 65 72 20 7b 0a 20 20 50 61 72 73   Walker {.  Pars
23ad0 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20  e *pParse;      
23ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23af0 20 20 20 20 20 20 2f 2a 20 50 61 72 73 65 72 20        /* Parser 
23b00 63 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a 20 20 69  context.  */.  i
23b10 6e 74 20 28 2a 78 45 78 70 72 43 61 6c 6c 62 61  nt (*xExprCallba
23b20 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70  ck)(Walker*, Exp
23b30 72 2a 29 3b 20 20 20 20 20 2f 2a 20 43 61 6c 6c  r*);     /* Call
23b40 62 61 63 6b 20 66 6f 72 20 65 78 70 72 65 73 73  back for express
23b50 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 28 2a  ions */.  int (*
23b60 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b 29  xSelectCallback)
23b70 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a  (Walker*,Select*
23b80 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20  );  /* Callback 
23b90 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20  for SELECTs */. 
23ba0 20 76 6f 69 64 20 28 2a 78 53 65 6c 65 63 74 43   void (*xSelectC
23bb0 61 6c 6c 62 61 63 6b 32 29 28 57 61 6c 6b 65 72  allback2)(Walker
23bc0 2a 2c 53 65 6c 65 63 74 2a 29 3b 2f 2a 20 53 65  *,Select*);/* Se
23bd0 63 6f 6e 64 20 63 61 6c 6c 62 61 63 6b 20 66 6f  cond callback fo
23be0 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20 69  r SELECTs */.  i
23bf0 6e 74 20 77 61 6c 6b 65 72 44 65 70 74 68 3b 20  nt walkerDepth; 
23c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23c10 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
23c20 65 72 20 6f 66 20 73 75 62 71 75 65 72 69 65 73  er of subqueries
23c30 20 2a 2f 0a 20 20 75 38 20 65 43 6f 64 65 3b 20   */.  u8 eCode; 
23c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23c60 2f 2a 20 41 20 73 6d 61 6c 6c 20 70 72 6f 63 65  /* A small proce
23c70 73 73 69 6e 67 20 63 6f 64 65 20 2a 2f 0a 20 20  ssing code */.  
23c80 75 6e 69 6f 6e 20 7b 20 20 20 20 20 20 20 20 20  union {         
23c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ca0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 74            /* Ext
23cb0 72 61 20 64 61 74 61 20 66 6f 72 20 63 61 6c 6c  ra data for call
23cc0 62 61 63 6b 20 2a 2f 0a 20 20 20 20 4e 61 6d 65  back */.    Name
23cd0 43 6f 6e 74 65 78 74 20 2a 70 4e 43 3b 20 20 20  Context *pNC;   
23ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23cf0 20 20 20 20 20 20 2f 2a 20 4e 61 6d 69 6e 67 20        /* Naming 
23d00 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20 69  context */.    i
23d10 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20  nt n;           
23d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d30 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 63 6f           /* A co
23d40 75 6e 74 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74  unter */.    int
23d50 20 69 43 75 72 3b 20 20 20 20 20 20 20 20 20 20   iCur;          
23d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d70 20 20 20 20 20 20 20 2f 2a 20 41 20 63 75 72 73         /* A curs
23d80 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20  or number */.   
23d90 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c 69   SrcList *pSrcLi
23da0 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  st;             
23db0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 52             /* FR
23dc0 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20  OM clause */.   
23dd0 20 73 74 72 75 63 74 20 53 72 63 43 6f 75 6e 74   struct SrcCount
23de0 20 2a 70 53 72 63 43 6f 75 6e 74 3b 20 20 20 20   *pSrcCount;    
23df0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
23e00 75 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e 20 72 65  unting column re
23e10 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 20 20  ferences */.    
23e20 73 74 72 75 63 74 20 43 43 75 72 48 69 6e 74 20  struct CCurHint 
23e30 2a 70 43 43 75 72 48 69 6e 74 3b 20 20 20 20 20  *pCCurHint;     
23e40 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65            /* Use
23e50 64 20 62 79 20 63 6f 64 65 43 75 72 73 6f 72 48  d by codeCursorH
23e60 69 6e 74 28 29 20 2a 2f 0a 20 20 20 20 69 6e 74  int() */.    int
23e70 20 2a 61 69 43 6f 6c 3b 20 20 20 20 20 20 20 20   *aiCol;        
23e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e90 20 20 20 20 20 20 20 2f 2a 20 61 72 72 61 79 20         /* array 
23ea0 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 65  of column indexe
23eb0 73 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20  s */.    struct 
23ec0 49 64 78 43 6f 76 65 72 20 2a 70 49 64 78 43 6f  IdxCover *pIdxCo
23ed0 76 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  ver;            
23ee0 20 20 20 2f 2a 20 43 68 65 63 6b 20 66 6f 72 20     /* Check for 
23ef0 69 6e 64 65 78 20 63 6f 76 65 72 61 67 65 20 2a  index coverage *
23f00 2f 0a 20 20 20 20 73 74 72 75 63 74 20 49 64 78  /.    struct Idx
23f10 45 78 70 72 54 72 61 6e 73 20 2a 70 49 64 78 54  ExprTrans *pIdxT
23f20 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20  rans;           
23f30 2f 2a 20 43 6f 6e 76 65 72 74 20 69 6e 64 65 78  /* Convert index
23f40 65 64 20 65 78 70 72 20 74 6f 20 63 6f 6c 75 6d  ed expr to colum
23f50 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69 73  n */.    ExprLis
23f60 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20  t *pGroupBy;    
23f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f80 20 20 20 2f 2a 20 47 52 4f 55 50 20 42 59 20 63     /* GROUP BY c
23f90 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 73 74 72  lause */.    str
23fa0 75 63 74 20 48 61 76 69 6e 67 54 6f 57 68 65 72  uct HavingToWher
23fb0 65 43 74 78 20 2a 70 48 61 76 69 6e 67 43 74 78  eCtx *pHavingCtx
23fc0 3b 20 20 20 20 20 20 2f 2a 20 48 41 56 49 4e 47  ;      /* HAVING
23fd0 20 74 6f 20 57 48 45 52 45 20 63 6c 61 75 73 65   to WHERE clause
23fe0 20 63 74 78 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d   ctx */.  } u;.}
23ff0 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72 64 20 64 65  ;../* Forward de
24000 63 6c 61 72 61 74 69 6f 6e 73 20 2a 2f 0a 69 6e  clarations */.in
24010 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70  t sqlite3WalkExp
24020 72 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a  r(Walker*, Expr*
24030 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  );.int sqlite3Wa
24040 6c 6b 45 78 70 72 4c 69 73 74 28 57 61 6c 6b 65  lkExprList(Walke
24050 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  r*, ExprList*);.
24060 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53  int sqlite3WalkS
24070 65 6c 65 63 74 28 57 61 6c 6b 65 72 2a 2c 20 53  elect(Walker*, S
24080 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
24090 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 45 78  ite3WalkSelectEx
240a0 70 72 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65  pr(Walker*, Sele
240b0 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
240c0 33 57 61 6c 6b 53 65 6c 65 63 74 46 72 6f 6d 28  3WalkSelectFrom(
240d0 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a  Walker*, Select*
240e0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
240f0 70 72 57 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65  prWalkNoop(Walke
24100 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20  r*, Expr*);.int 
24110 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57 61 6c  sqlite3SelectWal
24120 6b 4e 6f 6f 70 28 57 61 6c 6b 65 72 2a 2c 20 53  kNoop(Walker*, S
24130 65 6c 65 63 74 2a 29 3b 0a 23 69 66 64 65 66 20  elect*);.#ifdef 
24140 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 76 6f 69  SQLITE_DEBUG.voi
24150 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57  d sqlite3SelectW
24160 61 6c 6b 41 73 73 65 72 74 32 28 57 61 6c 6b 65  alkAssert2(Walke
24170 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 23 65  r*, Select*);.#e
24180 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  ndif../*.** Retu
24190 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65  rn code from the
241a0 20 70 61 72 73 65 2d 74 72 65 65 20 77 61 6c 6b   parse-tree walk
241b0 69 6e 67 20 70 72 69 6d 69 74 69 76 65 73 20 61  ing primitives a
241c0 6e 64 20 74 68 65 69 72 0a 2a 2a 20 63 61 6c 6c  nd their.** call
241d0 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  backs..*/.#defin
241e0 65 20 57 52 43 5f 43 6f 6e 74 69 6e 75 65 20 20  e WRC_Continue  
241f0 20 20 30 20 20 20 2f 2a 20 43 6f 6e 74 69 6e 75    0   /* Continu
24200 65 20 64 6f 77 6e 20 69 6e 74 6f 20 63 68 69 6c  e down into chil
24210 64 72 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  dren */.#define 
24220 57 52 43 5f 50 72 75 6e 65 20 20 20 20 20 20 20  WRC_Prune       
24230 31 20 20 20 2f 2a 20 4f 6d 69 74 20 63 68 69 6c  1   /* Omit chil
24240 64 72 65 6e 20 62 75 74 20 63 6f 6e 74 69 6e 75  dren but continu
24250 65 20 77 61 6c 6b 69 6e 67 20 73 69 62 6c 69 6e  e walking siblin
24260 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52  gs */.#define WR
24270 43 5f 41 62 6f 72 74 20 20 20 20 20 20 20 32 20  C_Abort       2 
24280 20 20 2f 2a 20 41 62 61 6e 64 6f 6e 20 74 68 65    /* Abandon the
24290 20 74 72 65 65 20 77 61 6c 6b 20 2a 2f 0a 0a 2f   tree walk */../
242a0 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
242b0 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
242c0 72 65 20 72 65 70 72 65 73 65 6e 74 73 20 61 20  re represents a 
242d0 73 65 74 20 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f  set of one or mo
242e0 72 65 20 43 54 45 73 0a 2a 2a 20 28 63 6f 6d 6d  re CTEs.** (comm
242f0 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73  on table express
24300 69 6f 6e 73 29 20 63 72 65 61 74 65 64 20 62 79  ions) created by
24310 20 61 20 73 69 6e 67 6c 65 20 57 49 54 48 20 63   a single WITH c
24320 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  lause..*/.struct
24330 20 57 69 74 68 20 7b 0a 20 20 69 6e 74 20 6e 43   With {.  int nC
24340 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  te;             
24350 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
24360 62 65 72 20 6f 66 20 43 54 45 73 20 69 6e 20 74  ber of CTEs in t
24370 68 65 20 57 49 54 48 20 63 6c 61 75 73 65 20 2a  he WITH clause *
24380 2f 0a 20 20 57 69 74 68 20 2a 70 4f 75 74 65 72  /.  With *pOuter
24390 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
243a0 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 69 6e      /* Containin
243b0 67 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f  g WITH clause, o
243c0 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74 72 75  r NULL */.  stru
243d0 63 74 20 43 74 65 20 7b 20 20 20 20 20 20 20 20  ct Cte {        
243e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
243f0 6f 72 20 65 61 63 68 20 43 54 45 20 69 6e 20 74  or each CTE in t
24400 68 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e 2e  he WITH clause..
24410 2e 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  .. */.    char *
24420 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
24430 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
24440 65 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a 2f  e of this CTE */
24450 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70  .    ExprList *p
24460 43 6f 6c 73 3b 20 20 20 20 20 20 20 20 20 20 20  Cols;           
24470 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
24480 65 78 70 6c 69 63 69 74 20 63 6f 6c 75 6d 6e 20  explicit column 
24490 6e 61 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c 20 2a  names, or NULL *
244a0 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53  /.    Select *pS
244b0 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20 20  elect;          
244c0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66        /* The def
244d0 69 6e 69 74 69 6f 6e 20 6f 66 20 74 68 69 73 20  inition of this 
244e0 43 54 45 20 2a 2f 0a 20 20 20 20 63 6f 6e 73 74  CTE */.    const
244f0 20 63 68 61 72 20 2a 7a 43 74 65 45 72 72 3b 20   char *zCteErr; 
24500 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72             /* Er
24510 72 6f 72 20 6d 65 73 73 61 67 65 20 66 6f 72 20  ror message for 
24520 63 69 72 63 75 6c 61 72 20 72 65 66 65 72 65 6e  circular referen
24530 63 65 73 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b  ces */.  } a[1];
24540 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  .};..#ifdef SQLI
24550 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 41  TE_DEBUG./*.** A
24560 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
24570 65 20 54 72 65 65 56 69 65 77 20 6f 62 6a 65 63  e TreeView objec
24580 74 20 69 73 20 75 73 65 64 20 66 6f 72 20 70 72  t is used for pr
24590 69 6e 74 69 6e 67 20 74 68 65 20 63 6f 6e 74 65  inting the conte
245a0 6e 74 20 6f 66 0a 2a 2a 20 64 61 74 61 20 73 74  nt of.** data st
245b0 72 75 63 74 75 72 65 73 20 6f 6e 20 73 71 6c 69  ructures on sqli
245c0 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 29  te3DebugPrintf()
245d0 20 75 73 69 6e 67 20 61 20 74 72 65 65 2d 6c 69   using a tree-li
245e0 6b 65 20 76 69 65 77 2e 0a 2a 2f 0a 73 74 72 75  ke view..*/.stru
245f0 63 74 20 54 72 65 65 56 69 65 77 20 7b 0a 20 20  ct TreeView {.  
24600 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20 20 20  int iLevel;     
24610 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68          /* Which
24620 20 6c 65 76 65 6c 20 6f 66 20 74 68 65 20 74 72   level of the tr
24630 65 65 20 77 65 20 61 72 65 20 6f 6e 20 2a 2f 0a  ee we are on */.
24640 20 20 75 38 20 20 62 4c 69 6e 65 5b 31 30 30 5d    u8  bLine[100]
24650 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44 72 61  ;         /* Dra
24660 77 20 76 65 72 74 69 63 61 6c 20 69 6e 20 63 6f  w vertical in co
24670 6c 75 6d 6e 20 69 20 69 66 20 62 4c 69 6e 65 5b  lumn i if bLine[
24680 69 5d 20 69 73 20 74 72 75 65 20 2a 2f 0a 7d 3b  i] is true */.};
24690 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
246a0 45 5f 44 45 42 55 47 20 2a 2f 0a 0a 2f 2a 0a 2a  E_DEBUG */../*.*
246b0 2a 20 41 73 73 75 6d 69 6e 67 20 7a 49 6e 20 70  * Assuming zIn p
246c0 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72  oints to the fir
246d0 73 74 20 62 79 74 65 20 6f 66 20 61 20 55 54 46  st byte of a UTF
246e0 2d 38 20 63 68 61 72 61 63 74 65 72 2c 0a 2a 2a  -8 character,.**
246f0 20 61 64 76 61 6e 63 65 20 7a 49 6e 20 74 6f 20   advance zIn to 
24700 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 66 69 72  point to the fir
24710 73 74 20 62 79 74 65 20 6f 66 20 74 68 65 20 6e  st byte of the n
24720 65 78 74 20 55 54 46 2d 38 20 63 68 61 72 61 63  ext UTF-8 charac
24730 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ter..*/.#define 
24740 53 51 4c 49 54 45 5f 53 4b 49 50 5f 55 54 46 38  SQLITE_SKIP_UTF8
24750 28 7a 49 6e 29 20 7b 20 20 20 20 20 20 20 20 20  (zIn) {         
24760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c                 \
24770 0a 20 20 69 66 28 20 28 2a 28 7a 49 6e 2b 2b 29  .  if( (*(zIn++)
24780 29 3e 3d 30 78 63 30 20 29 7b 20 20 20 20 20 20  )>=0xc0 ){      
24790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
247a0 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20 77 68          \.    wh
247b0 69 6c 65 28 20 28 2a 7a 49 6e 20 26 20 30 78 63  ile( (*zIn & 0xc
247c0 30 29 3d 3d 30 78 38 30 20 29 7b 20 7a 49 6e 2b  0)==0x80 ){ zIn+
247d0 2b 3b 20 7d 20 20 20 20 20 20 20 20 20 20 20 20  +; }            
247e0 20 5c 0a 20 20 7d 20 20 20 20 20 20 20 20 20 20   \.  }          
247f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24810 20 20 20 20 20 20 20 20 20 20 5c 0a 7d 0a 0a 2f            \.}../
24820 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  *.** The SQLITE_
24830 2a 5f 42 4b 50 54 20 6d 61 63 72 6f 73 20 61 72  *_BKPT macros ar
24840 65 20 73 75 62 73 74 69 74 75 74 65 73 20 66 6f  e substitutes fo
24850 72 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65  r the error code
24860 73 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 73 61  s with.** the sa
24870 6d 65 20 6e 61 6d 65 20 62 75 74 20 77 69 74 68  me name but with
24880 6f 75 74 20 74 68 65 20 5f 42 4b 50 54 20 73 75  out the _BKPT su
24890 66 66 69 78 2e 20 20 54 68 65 73 65 20 6d 61 63  ffix.  These mac
248a0 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f  ros invoke.** ro
248b0 75 74 69 6e 65 73 20 74 68 61 74 20 72 65 70 6f  utines that repo
248c0 72 74 20 74 68 65 20 6c 69 6e 65 2d 6e 75 6d 62  rt the line-numb
248d0 65 72 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20  er on which the 
248e0 65 72 72 6f 72 20 6f 72 69 67 69 6e 61 74 65 64  error originated
248f0 0a 2a 2a 20 75 73 69 6e 67 20 73 71 6c 69 74 65  .** using sqlite
24900 33 5f 6c 6f 67 28 29 2e 20 20 54 68 65 20 72 6f  3_log().  The ro
24910 75 74 69 6e 65 73 20 61 6c 73 6f 20 70 72 6f 76  utines also prov
24920 69 64 65 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74  ide a convenient
24930 20 70 6c 61 63 65 0a 2a 2a 20 74 6f 20 73 65 74   place.** to set
24940 20 61 20 64 65 62 75 67 67 65 72 20 62 72 65 61   a debugger brea
24950 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73  kpoint..*/.int s
24960 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72 72  qlite3CorruptErr
24970 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  or(int);.int sql
24980 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28  ite3MisuseError(
24990 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
249a0 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 69  3CantopenError(i
249b0 6e 74 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c  nt);.#define SQL
249c0 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54  ITE_CORRUPT_BKPT
249d0 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45   sqlite3CorruptE
249e0 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23  rror(__LINE__).#
249f0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 49  define SQLITE_MI
24a00 53 55 53 45 5f 42 4b 50 54 20 73 71 6c 69 74 65  SUSE_BKPT sqlite
24a10 33 4d 69 73 75 73 65 45 72 72 6f 72 28 5f 5f 4c  3MisuseError(__L
24a20 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53  INE__).#define S
24a30 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 5f 42  QLITE_CANTOPEN_B
24a40 4b 50 54 20 73 71 6c 69 74 65 33 43 61 6e 74 6f  KPT sqlite3Canto
24a50 70 65 6e 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f  penError(__LINE_
24a60 5f 29 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  _).#ifdef SQLITE
24a70 5f 44 45 42 55 47 0a 20 20 69 6e 74 20 73 71 6c  _DEBUG.  int sql
24a80 69 74 65 33 4e 6f 6d 65 6d 45 72 72 6f 72 28 69  ite3NomemError(i
24a90 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  nt);.  int sqlit
24aa0 65 33 49 6f 65 72 72 6e 6f 6d 65 6d 45 72 72 6f  e3IoerrnomemErro
24ab0 72 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71  r(int);.  int sq
24ac0 6c 69 74 65 33 43 6f 72 72 75 70 74 50 67 6e 6f  lite3CorruptPgno
24ad0 45 72 72 6f 72 28 69 6e 74 2c 50 67 6e 6f 29 3b  Error(int,Pgno);
24ae0 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
24af0 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 73 71 6c 69  _NOMEM_BKPT sqli
24b00 74 65 33 4e 6f 6d 65 6d 45 72 72 6f 72 28 5f 5f  te3NomemError(__
24b10 4c 49 4e 45 5f 5f 29 0a 23 20 64 65 66 69 6e 65  LINE__).# define
24b20 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f   SQLITE_IOERR_NO
24b30 4d 45 4d 5f 42 4b 50 54 20 73 71 6c 69 74 65 33  MEM_BKPT sqlite3
24b40 49 6f 65 72 72 6e 6f 6d 65 6d 45 72 72 6f 72 28  IoerrnomemError(
24b50 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 20 64 65 66 69  __LINE__).# defi
24b60 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50  ne SQLITE_CORRUP
24b70 54 5f 50 47 4e 4f 28 50 29 20 73 71 6c 69 74 65  T_PGNO(P) sqlite
24b80 33 43 6f 72 72 75 70 74 50 67 6e 6f 45 72 72 6f  3CorruptPgnoErro
24b90 72 28 5f 5f 4c 49 4e 45 5f 5f 2c 28 50 29 29 0a  r(__LINE__,(P)).
24ba0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53  #else.# define S
24bb0 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54  QLITE_NOMEM_BKPT
24bc0 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 0a 23 20   SQLITE_NOMEM.# 
24bd0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4f  define SQLITE_IO
24be0 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 53  ERR_NOMEM_BKPT S
24bf0 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45  QLITE_IOERR_NOME
24c00 4d 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  M.# define SQLIT
24c10 45 5f 43 4f 52 52 55 50 54 5f 50 47 4e 4f 28 50  E_CORRUPT_PGNO(P
24c20 29 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74  ) sqlite3Corrupt
24c30 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a  Error(__LINE__).
24c40 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 54  #endif../*.** FT
24c50 53 33 20 61 6e 64 20 46 54 53 34 20 62 6f 74 68  S3 and FTS4 both
24c60 20 72 65 71 75 69 72 65 20 76 69 72 74 75 61 6c   require virtual
24c70 20 74 61 62 6c 65 20 73 75 70 70 6f 72 74 0a 2a   table support.*
24c80 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  /.#if defined(SQ
24c90 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
24ca0 4c 54 41 42 4c 45 29 0a 23 20 75 6e 64 65 66 20  LTABLE).# undef 
24cb0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
24cc0 53 33 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54  S3.# undef SQLIT
24cd0 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 0a 23 65  E_ENABLE_FTS4.#e
24ce0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 34  ndif../*.** FTS4
24cf0 20 69 73 20 72 65 61 6c 6c 79 20 61 6e 20 65 78   is really an ex
24d00 74 65 6e 73 69 6f 6e 20 66 6f 72 20 46 54 53 33  tension for FTS3
24d10 2e 20 20 49 74 20 69 73 20 65 6e 61 62 6c 65 64  .  It is enabled
24d20 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 53 51   using the.** SQ
24d30 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
24d40 20 6d 61 63 72 6f 2e 20 20 42 75 74 20 74 6f 20   macro.  But to 
24d50 61 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f 6e 20  avoid confusion 
24d60 77 65 20 61 6c 73 6f 20 63 61 6c 6c 0a 2a 2a 20  we also call.** 
24d70 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  the SQLITE_ENABL
24d80 45 5f 46 54 53 34 20 6d 61 63 72 6f 20 74 6f 20  E_FTS4 macro to 
24d90 73 65 72 76 65 20 61 73 20 61 6e 20 61 6c 69 61  serve as an alia
24da0 73 20 66 6f 72 20 53 51 4c 49 54 45 5f 45 4e 41  s for SQLITE_ENA
24db0 42 4c 45 5f 46 54 53 33 2e 0a 2a 2f 0a 23 69 66  BLE_FTS3..*/.#if
24dc0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
24dd0 45 4e 41 42 4c 45 5f 46 54 53 34 29 20 26 26 20  ENABLE_FTS4) && 
24de0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
24df0 45 4e 41 42 4c 45 5f 46 54 53 33 29 0a 23 20 64  ENABLE_FTS3).# d
24e00 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41  efine SQLITE_ENA
24e10 42 4c 45 5f 46 54 53 33 20 31 0a 23 65 6e 64 69  BLE_FTS3 1.#endi
24e20 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 74 79  f../*.** The cty
24e30 70 65 2e 68 20 68 65 61 64 65 72 20 69 73 20 6e  pe.h header is n
24e40 65 65 64 65 64 20 66 6f 72 20 6e 6f 6e 2d 41 53  eeded for non-AS
24e50 43 49 49 20 73 79 73 74 65 6d 73 2e 20 20 49 74  CII systems.  It
24e60 20 69 73 20 61 6c 73 6f 0a 2a 2a 20 6e 65 65 64   is also.** need
24e70 65 64 20 62 79 20 46 54 53 33 20 77 68 65 6e 20  ed by FTS3 when 
24e80 46 54 53 33 20 69 73 20 69 6e 63 6c 75 64 65 64  FTS3 is included
24e90 20 69 6e 20 74 68 65 20 61 6d 61 6c 67 61 6d 61   in the amalgama
24ea0 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  tion..*/.#if !de
24eb0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 53 43  fined(SQLITE_ASC
24ec0 49 49 29 20 7c 7c 20 5c 0a 20 20 20 20 28 64 65  II) || \.    (de
24ed0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
24ee0 42 4c 45 5f 46 54 53 33 29 20 26 26 20 64 65 66  BLE_FTS3) && def
24ef0 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 4d 41 4c  ined(SQLITE_AMAL
24f00 47 41 4d 41 54 49 4f 4e 29 29 0a 23 20 69 6e 63  GAMATION)).# inc
24f10 6c 75 64 65 20 3c 63 74 79 70 65 2e 68 3e 0a 23  lude <ctype.h>.#
24f20 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
24f30 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
24f40 73 20 6d 69 6d 69 63 20 74 68 65 20 73 74 61 6e  s mimic the stan
24f50 64 61 72 64 20 6c 69 62 72 61 72 79 20 66 75 6e  dard library fun
24f60 63 74 69 6f 6e 73 20 74 6f 75 70 70 65 72 28 29  ctions toupper()
24f70 2c 0a 2a 2a 20 69 73 73 70 61 63 65 28 29 2c 20  ,.** isspace(), 
24f80 69 73 61 6c 6e 75 6d 28 29 2c 20 69 73 64 69 67  isalnum(), isdig
24f90 69 74 28 29 20 61 6e 64 20 69 73 78 64 69 67 69  it() and isxdigi
24fa0 74 28 29 2c 20 72 65 73 70 65 63 74 69 76 65 6c  t(), respectivel
24fb0 79 2e 20 54 68 65 0a 2a 2a 20 73 71 6c 69 74 65  y. The.** sqlite
24fc0 20 76 65 72 73 69 6f 6e 73 20 6f 6e 6c 79 20 77   versions only w
24fd0 6f 72 6b 20 66 6f 72 20 41 53 43 49 49 20 63 68  ork for ASCII ch
24fe0 61 72 61 63 74 65 72 73 2c 20 72 65 67 61 72 64  aracters, regard
24ff0 6c 65 73 73 20 6f 66 20 6c 6f 63 61 6c 65 2e 0a  less of locale..
25000 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
25010 5f 41 53 43 49 49 0a 23 20 64 65 66 69 6e 65 20  _ASCII.# define 
25020 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78  sqlite3Toupper(x
25030 29 20 20 28 28 78 29 26 7e 28 73 71 6c 69 74 65  )  ((x)&~(sqlite
25040 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67  3CtypeMap[(unsig
25050 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78  ned char)(x)]&0x
25060 32 30 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  20)).# define sq
25070 6c 69 74 65 33 49 73 73 70 61 63 65 28 78 29 20  lite3Isspace(x) 
25080 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
25090 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
250a0 72 29 28 78 29 5d 26 30 78 30 31 29 0a 23 20 64  r)(x)]&0x01).# d
250b0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61  efine sqlite3Isa
250c0 6c 6e 75 6d 28 78 29 20 20 20 28 73 71 6c 69 74  lnum(x)   (sqlit
250d0 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
250e0 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
250f0 78 30 36 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x06).# define sq
25100 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78 29 20  lite3Isalpha(x) 
25110 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
25120 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
25130 72 29 28 78 29 5d 26 30 78 30 32 29 0a 23 20 64  r)(x)]&0x02).# d
25140 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 64  efine sqlite3Isd
25150 69 67 69 74 28 78 29 20 20 20 28 73 71 6c 69 74  igit(x)   (sqlit
25160 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
25170 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
25180 78 30 34 29 0a 23 20 64 65 66 69 6e 65 20 73 71  x04).# define sq
25190 6c 69 74 65 33 49 73 78 64 69 67 69 74 28 78 29  lite3Isxdigit(x)
251a0 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d    (sqlite3CtypeM
251b0 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
251c0 72 29 28 78 29 5d 26 30 78 30 38 29 0a 23 20 64  r)(x)]&0x08).# d
251d0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c  efine sqlite3Tol
251e0 6f 77 65 72 28 78 29 20 20 20 28 73 71 6c 69 74  ower(x)   (sqlit
251f0 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 28  e3UpperToLower[(
25200 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
25210 29 5d 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  )]).# define sql
25220 69 74 65 33 49 73 71 75 6f 74 65 28 78 29 20 20  ite3Isquote(x)  
25230 20 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61   (sqlite3CtypeMa
25240 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  p[(unsigned char
25250 29 28 78 29 5d 26 30 78 38 30 29 0a 23 65 6c 73  )(x)]&0x80).#els
25260 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
25270 65 33 54 6f 75 70 70 65 72 28 78 29 20 20 20 74  e3Toupper(x)   t
25280 6f 75 70 70 65 72 28 28 75 6e 73 69 67 6e 65 64  oupper((unsigned
25290 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
252a0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70 61  ine sqlite3Isspa
252b0 63 65 28 78 29 20 20 20 69 73 73 70 61 63 65 28  ce(x)   isspace(
252c0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
252d0 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
252e0 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20  ite3Isalnum(x)  
252f0 20 69 73 61 6c 6e 75 6d 28 28 75 6e 73 69 67 6e   isalnum((unsign
25300 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
25310 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61  efine sqlite3Isa
25320 6c 70 68 61 28 78 29 20 20 20 69 73 61 6c 70 68  lpha(x)   isalph
25330 61 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  a((unsigned char
25340 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
25350 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 78 29  qlite3Isdigit(x)
25360 20 20 20 69 73 64 69 67 69 74 28 28 75 6e 73 69     isdigit((unsi
25370 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
25380 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
25390 73 78 64 69 67 69 74 28 78 29 20 20 69 73 78 64  sxdigit(x)  isxd
253a0 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63  igit((unsigned c
253b0 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
253c0 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72  e sqlite3Tolower
253d0 28 78 29 20 20 20 74 6f 6c 6f 77 65 72 28 28 75  (x)   tolower((u
253e0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
253f0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
25400 65 33 49 73 71 75 6f 74 65 28 78 29 20 20 20 28  e3Isquote(x)   (
25410 28 78 29 3d 3d 27 22 27 7c 7c 28 78 29 3d 3d 27  (x)=='"'||(x)=='
25420 5c 27 27 7c 7c 28 78 29 3d 3d 27 5b 27 7c 7c 28  \''||(x)=='['||(
25430 78 29 3d 3d 27 60 27 29 0a 23 65 6e 64 69 66 0a  x)=='`').#endif.
25440 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
25450 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f  MIT_COMPILEOPTIO
25460 4e 5f 44 49 41 47 53 0a 69 6e 74 20 73 71 6c 69  N_DIAGS.int sqli
25470 74 65 33 49 73 49 64 43 68 61 72 28 75 38 29 3b  te3IsIdChar(u8);
25480 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49  .#endif../*.** I
25490 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74 69 6f 6e  nternal function
254a0 20 70 72 6f 74 6f 74 79 70 65 73 0a 2a 2f 0a 69   prototypes.*/.i
254b0 6e 74 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  nt sqlite3StrICm
254c0 70 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  p(const char*,co
254d0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20  nst char*);.int 
254e0 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
254f0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68  const char*);.ch
25500 61 72 20 2a 73 71 6c 69 74 65 33 43 6f 6c 75 6d  ar *sqlite3Colum
25510 6e 54 79 70 65 28 43 6f 6c 75 6d 6e 2a 2c 63 68  nType(Column*,ch
25520 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20 73 71  ar*);.#define sq
25530 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 20 73 71  lite3StrNICmp sq
25540 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d 70 0a 0a  lite3_strnicmp..
25550 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  int sqlite3Mallo
25560 63 49 6e 69 74 28 76 6f 69 64 29 3b 0a 76 6f 69  cInit(void);.voi
25570 64 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 45  d sqlite3MallocE
25580 6e 64 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 2a  nd(void);.void *
25590 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 75 36  sqlite3Malloc(u6
255a0 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  4);.void *sqlite
255b0 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28 75 36 34 29  3MallocZero(u64)
255c0 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44  ;.void *sqlite3D
255d0 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 73 71 6c 69  bMallocZero(sqli
255e0 74 65 33 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64  te3*, u64);.void
255f0 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f   *sqlite3DbMallo
25600 63 52 61 77 28 73 71 6c 69 74 65 33 2a 2c 20 75  cRaw(sqlite3*, u
25610 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  64);.void *sqlit
25620 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28  e3DbMallocRawNN(
25630 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a  sqlite3*, u64);.
25640 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53  char *sqlite3DbS
25650 74 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63  trDup(sqlite3*,c
25660 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61  onst char*);.cha
25670 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72 4e  r *sqlite3DbStrN
25680 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  Dup(sqlite3*,con
25690 73 74 20 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a  st char*, u64);.
256a0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 52 65 61  void *sqlite3Rea
256b0 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20 75 36 34 29  lloc(void*, u64)
256c0 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44  ;.void *sqlite3D
256d0 62 52 65 61 6c 6c 6f 63 4f 72 46 72 65 65 28 73  bReallocOrFree(s
256e0 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a  qlite3 *, void *
256f0 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  , u64);.void *sq
25700 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 28 73  lite3DbRealloc(s
25710 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64 20 2a  qlite3 *, void *
25720 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 73 71 6c  , u64);.void sql
25730 69 74 65 33 44 62 46 72 65 65 28 73 71 6c 69 74  ite3DbFree(sqlit
25740 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69  e3*, void*);.voi
25750 64 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 4e  d sqlite3DbFreeN
25760 4e 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64  N(sqlite3*, void
25770 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  *);.int sqlite3M
25780 61 6c 6c 6f 63 53 69 7a 65 28 76 6f 69 64 2a 29  allocSize(void*)
25790 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62 4d  ;.int sqlite3DbM
257a0 61 6c 6c 6f 63 53 69 7a 65 28 73 71 6c 69 74 65  allocSize(sqlite
257b0 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64  3*, void*);.void
257c0 20 2a 73 71 6c 69 74 65 33 53 63 72 61 74 63 68   *sqlite3Scratch
257d0 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69  Malloc(int);.voi
257e0 64 20 73 71 6c 69 74 65 33 53 63 72 61 74 63 68  d sqlite3Scratch
257f0 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69  Free(void*);.voi
25800 64 20 2a 73 71 6c 69 74 65 33 50 61 67 65 4d 61  d *sqlite3PageMa
25810 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20  lloc(int);.void 
25820 73 71 6c 69 74 65 33 50 61 67 65 46 72 65 65 28  sqlite3PageFree(
25830 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  void*);.void sql
25840 69 74 65 33 4d 65 6d 53 65 74 44 65 66 61 75 6c  ite3MemSetDefaul
25850 74 28 76 6f 69 64 29 3b 0a 23 69 66 6e 64 65 66  t(void);.#ifndef
25860 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42   SQLITE_UNTESTAB
25870 4c 45 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  LE.void sqlite3B
25880 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f 6f 6b 73  enignMallocHooks
25890 28 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 2c  (void (*)(void),
258a0 20 76 6f 69 64 20 28 2a 29 28 76 6f 69 64 29 29   void (*)(void))
258b0 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c  ;.#endif.int sql
258c0 69 74 65 33 48 65 61 70 4e 65 61 72 6c 79 46 75  ite3HeapNearlyFu
258d0 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a  ll(void);../*.**
258e0 20 4f 6e 20 73 79 73 74 65 6d 73 20 77 69 74 68   On systems with
258f0 20 61 6d 70 6c 65 20 73 74 61 63 6b 20 73 70 61   ample stack spa
25900 63 65 20 61 6e 64 20 74 68 61 74 20 73 75 70 70  ce and that supp
25910 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c 20 6d 61  ort alloca(), ma
25920 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20 61 6c 6c  ke.** use of all
25930 6f 63 61 28 29 20 74 6f 20 6f 62 74 61 69 6e 20  oca() to obtain 
25940 73 70 61 63 65 20 66 6f 72 20 6c 61 72 67 65 20  space for large 
25950 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a 65 63 74  automatic object
25960 73 2e 20 20 42 79 20 64 65 66 61 75 6c 74 2c 0a  s.  By default,.
25970 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20  ** obtain space 
25980 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e 0a 2a  from malloc()..*
25990 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f 63 61 28  *.** The alloca(
259a0 29 20 72 6f 75 74 69 6e 65 20 6e 65 76 65 72 20  ) routine never 
259b0 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e 20 20 54  returns NULL.  T
259c0 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65 20 63  his will cause c
259d0 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20 74 68 61  ode paths.** tha
259e0 74 20 64 65 61 6c 20 77 69 74 68 20 73 71 6c 69  t deal with sqli
259f0 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 28 29 20  te3StackAlloc() 
25a00 66 61 69 6c 75 72 65 73 20 74 6f 20 62 65 20 75  failures to be u
25a10 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a 2f 0a 23  nreachable..*/.#
25a20 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45  ifdef SQLITE_USE
25a30 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66 69 6e 65  _ALLOCA.# define
25a40 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c   sqlite3StackAll
25a50 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 61 6c 6c  ocRaw(D,N)   all
25a60 6f 63 61 28 4e 29 0a 23 20 64 65 66 69 6e 65 20  oca(N).# define 
25a70 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f  sqlite3StackAllo
25a80 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d 65 6d 73  cZero(D,N)  mems
25a90 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c 20 30 2c  et(alloca(N), 0,
25aa0 20 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c   N).# define sql
25ab0 69 74 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c  ite3StackFree(D,
25ac0 50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  P).#else.# defin
25ad0 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  e sqlite3StackAl
25ae0 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20 73 71  locRaw(D,N)   sq
25af0 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
25b00 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73  (D,N).# define s
25b10 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
25b20 5a 65 72 6f 28 44 2c 4e 29 20 20 73 71 6c 69 74  Zero(D,N)  sqlit
25b30 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 44  e3DbMallocZero(D
25b40 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,N).# define sql
25b50 69 74 65 33 53 74 61 63 6b 46 72 65 65 28 44 2c  ite3StackFree(D,
25b60 50 29 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  P)       sqlite3
25b70 44 62 46 72 65 65 28 44 2c 50 29 0a 23 65 6e 64  DbFree(D,P).#end
25b80 69 66 0a 0a 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c  if../* Do not al
25b90 6c 6f 77 20 62 6f 74 68 20 4d 45 4d 53 59 53 35  low both MEMSYS5
25ba0 20 61 6e 64 20 4d 45 4d 53 59 53 33 20 74 6f 20   and MEMSYS3 to 
25bb0 62 65 20 64 65 66 69 6e 65 64 20 74 6f 67 65 74  be defined toget
25bc0 68 65 72 2e 20 20 49 66 20 74 68 65 79 0a 2a 2a  her.  If they.**
25bd0 20 61 72 65 2c 20 64 69 73 61 62 6c 65 20 4d 45   are, disable ME
25be0 4d 53 59 53 33 0a 2a 2f 0a 23 69 66 64 65 66 20  MSYS3.*/.#ifdef 
25bf0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45  SQLITE_ENABLE_ME
25c00 4d 53 59 53 35 0a 63 6f 6e 73 74 20 73 71 6c 69  MSYS5.const sqli
25c10 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20  te3_mem_methods 
25c20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65  *sqlite3MemGetMe
25c30 6d 73 79 73 35 28 76 6f 69 64 29 3b 0a 23 75 6e  msys5(void);.#un
25c40 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
25c50 45 5f 4d 45 4d 53 59 53 33 0a 23 65 6e 64 69 66  E_MEMSYS3.#endif
25c60 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
25c70 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 63 6f  NABLE_MEMSYS3.co
25c80 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f  nst sqlite3_mem_
25c90 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33  methods *sqlite3
25ca0 4d 65 6d 47 65 74 4d 65 6d 73 79 73 33 28 76 6f  MemGetMemsys3(vo
25cb0 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 23 69  id);.#endif...#i
25cc0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 55 54  fndef SQLITE_MUT
25cd0 45 58 5f 4f 4d 49 54 0a 20 20 73 71 6c 69 74 65  EX_OMIT.  sqlite
25ce0 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20  3_mutex_methods 
25cf0 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 44 65  const *sqlite3De
25d00 66 61 75 6c 74 4d 75 74 65 78 28 76 6f 69 64 29  faultMutex(void)
25d10 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  ;.  sqlite3_mute
25d20 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20  x_methods const 
25d30 2a 73 71 6c 69 74 65 33 4e 6f 6f 70 4d 75 74 65  *sqlite3NoopMute
25d40 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74  x(void);.  sqlit
25d50 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65  e3_mutex *sqlite
25d60 33 4d 75 74 65 78 41 6c 6c 6f 63 28 69 6e 74 29  3MutexAlloc(int)
25d70 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d  ;.  int sqlite3M
25d80 75 74 65 78 49 6e 69 74 28 76 6f 69 64 29 3b 0a  utexInit(void);.
25d90 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 74    int sqlite3Mut
25da0 65 78 45 6e 64 28 76 6f 69 64 29 3b 0a 23 65 6e  exEnd(void);.#en
25db0 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64  dif.#if !defined
25dc0 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d  (SQLITE_MUTEX_OM
25dd0 49 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  IT) && !defined(
25de0 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4e 4f 4f  SQLITE_MUTEX_NOO
25df0 50 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  P).  void sqlite
25e00 33 4d 65 6d 6f 72 79 42 61 72 72 69 65 72 28 76  3MemoryBarrier(v
25e10 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  oid);.#else.# de
25e20 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 6f  fine sqlite3Memo
25e30 72 79 42 61 72 72 69 65 72 28 29 0a 23 65 6e 64  ryBarrier().#end
25e40 69 66 0a 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36  if..sqlite3_int6
25e50 34 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 56  4 sqlite3StatusV
25e60 61 6c 75 65 28 69 6e 74 29 3b 0a 76 6f 69 64 20  alue(int);.void 
25e70 73 71 6c 69 74 65 33 53 74 61 74 75 73 55 70 28  sqlite3StatusUp(
25e80 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
25e90 73 71 6c 69 74 65 33 53 74 61 74 75 73 44 6f 77  sqlite3StatusDow
25ea0 6e 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  n(int, int);.voi
25eb0 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73 48  d sqlite3StatusH
25ec0 69 67 68 77 61 74 65 72 28 69 6e 74 2c 20 69 6e  ighwater(int, in
25ed0 74 29 3b 0a 0a 2f 2a 20 41 63 63 65 73 73 20 74  t);../* Access t
25ee0 6f 20 6d 75 74 65 78 65 73 20 75 73 65 64 20 62  o mutexes used b
25ef0 79 20 73 71 6c 69 74 65 33 5f 73 74 61 74 75 73  y sqlite3_status
25f00 28 29 20 2a 2f 0a 73 71 6c 69 74 65 33 5f 6d 75  () */.sqlite3_mu
25f10 74 65 78 20 2a 73 71 6c 69 74 65 33 50 63 61 63  tex *sqlite3Pcac
25f20 68 65 31 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a  he1Mutex(void);.
25f30 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73  sqlite3_mutex *s
25f40 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 4d 75 74 65  qlite3MallocMute
25f50 78 28 76 6f 69 64 29 3b 0a 0a 23 69 66 6e 64 65  x(void);..#ifnde
25f60 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
25f70 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 69  OATING_POINT.  i
25f80 6e 74 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28  nt sqlite3IsNaN(
25f90 64 6f 75 62 6c 65 29 3b 0a 23 65 6c 73 65 0a 23  double);.#else.#
25fa0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
25fb0 73 4e 61 4e 28 58 29 20 20 30 0a 23 65 6e 64 69  sNaN(X)  0.#endi
25fc0 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  f../*.** An inst
25fd0 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
25fe0 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
25ff0 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f  holds informatio
26000 6e 20 61 62 6f 75 74 20 53 51 4c 0a 2a 2a 20 66  n about SQL.** f
26010 75 6e 63 74 69 6f 6e 73 20 61 72 67 75 6d 65 6e  unctions argumen
26020 74 73 20 74 68 61 74 20 61 72 65 20 74 68 65 20  ts that are the 
26030 70 61 72 61 6d 65 74 65 72 73 20 74 6f 20 74 68  parameters to th
26040 65 20 70 72 69 6e 74 66 28 29 20 66 75 6e 63 74  e printf() funct
26050 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50  ion..*/.struct P
26060 72 69 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 7b  rintfArguments {
26070 0a 20 20 69 6e 74 20 6e 41 72 67 3b 20 20 20 20  .  int nArg;    
26080 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
26090 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 61  otal number of a
260a0 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20 20 69 6e  rguments */.  in
260b0 74 20 6e 55 73 65 64 3b 20 20 20 20 20 20 20 20  t nUsed;        
260c0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
260d0 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 75 73   of arguments us
260e0 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 73  ed so far */.  s
260f0 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61  qlite3_value **a
26100 70 41 72 67 3b 20 20 20 2f 2a 20 54 68 65 20 61  pArg;   /* The a
26110 72 67 75 6d 65 6e 74 20 76 61 6c 75 65 73 20 2a  rgument values *
26120 2f 0a 7d 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74  /.};..void sqlit
26130 65 33 56 58 50 72 69 6e 74 66 28 53 74 72 41 63  e3VXPrintf(StrAc
26140 63 75 6d 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  cum*, const char
26150 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 76 6f 69  *, va_list);.voi
26160 64 20 73 71 6c 69 74 65 33 58 50 72 69 6e 74 66  d sqlite3XPrintf
26170 28 53 74 72 41 63 63 75 6d 2a 2c 20 63 6f 6e 73  (StrAccum*, cons
26180 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63  t char*, ...);.c
26190 68 61 72 20 2a 73 71 6c 69 74 65 33 4d 50 72 69  har *sqlite3MPri
261a0 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  ntf(sqlite3*,con
261b0 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a  st char*, ...);.
261c0 63 68 61 72 20 2a 73 71 6c 69 74 65 33 56 4d 50  char *sqlite3VMP
261d0 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c 63  rintf(sqlite3*,c
261e0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c  onst char*, va_l
261f0 69 73 74 29 3b 0a 23 69 66 20 64 65 66 69 6e 65  ist);.#if define
26200 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
26210 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
26220 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41 43 45 29  E_HAVE_OS_TRACE)
26230 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
26240 65 62 75 67 50 72 69 6e 74 66 28 63 6f 6e 73 74  ebugPrintf(const
26250 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 23 65   char*, ...);.#e
26260 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64  ndif.#if defined
26270 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 20 20  (SQLITE_TEST).  
26280 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 54 65 73  void *sqlite3Tes
26290 74 54 65 78 74 54 6f 50 74 72 28 63 6f 6e 73 74  tTextToPtr(const
262a0 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a   char*);.#endif.
262b0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
262c0 49 54 45 5f 44 45 42 55 47 29 0a 20 20 76 6f 69  ITE_DEBUG).  voi
262d0 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65  d sqlite3TreeVie
262e0 77 45 78 70 72 28 54 72 65 65 56 69 65 77 2a 2c  wExpr(TreeView*,
262f0 20 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 75 38   const Expr*, u8
26300 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
26310 33 54 72 65 65 56 69 65 77 42 61 72 65 45 78 70  3TreeViewBareExp
26320 72 4c 69 73 74 28 54 72 65 65 56 69 65 77 2a 2c  rList(TreeView*,
26330 20 63 6f 6e 73 74 20 45 78 70 72 4c 69 73 74 2a   const ExprList*
26340 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
26350 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72    void sqlite3Tr
26360 65 65 56 69 65 77 45 78 70 72 4c 69 73 74 28 54  eeViewExprList(T
26370 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20  reeView*, const 
26380 45 78 70 72 4c 69 73 74 2a 2c 20 75 38 2c 20 63  ExprList*, u8, c
26390 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76  onst char*);.  v
263a0 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56  oid sqlite3TreeV
263b0 69 65 77 53 65 6c 65 63 74 28 54 72 65 65 56 69  iewSelect(TreeVi
263c0 65 77 2a 2c 20 63 6f 6e 73 74 20 53 65 6c 65 63  ew*, const Selec
263d0 74 2a 2c 20 75 38 29 3b 0a 20 20 76 6f 69 64 20  t*, u8);.  void 
263e0 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 57  sqlite3TreeViewW
263f0 69 74 68 28 54 72 65 65 56 69 65 77 2a 2c 20 63  ith(TreeView*, c
26400 6f 6e 73 74 20 57 69 74 68 2a 2c 20 75 38 29 3b  onst With*, u8);
26410 0a 23 65 6e 64 69 66 0a 0a 0a 76 6f 69 64 20 73  .#endif...void s
26420 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
26430 63 68 61 72 20 2a 2a 2c 20 73 71 6c 69 74 65 33  char **, sqlite3
26440 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
26450 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72  .void sqlite3Err
26460 6f 72 4d 73 67 28 50 61 72 73 65 2a 2c 20 63 6f  orMsg(Parse*, co
26470 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
26480 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 71  .void sqlite3Deq
26490 75 6f 74 65 28 63 68 61 72 2a 29 3b 0a 76 6f 69  uote(char*);.voi
264a0 64 20 73 71 6c 69 74 65 33 54 6f 6b 65 6e 49 6e  d sqlite3TokenIn
264b0 69 74 28 54 6f 6b 65 6e 2a 2c 63 68 61 72 2a 29  it(Token*,char*)
264c0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b 65 79  ;.int sqlite3Key
264d0 77 6f 72 64 43 6f 64 65 28 63 6f 6e 73 74 20 75  wordCode(const u
264e0 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 69  nsigned char*, i
264f0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
26500 52 75 6e 50 61 72 73 65 72 28 50 61 72 73 65 2a  RunParser(Parse*
26510 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
26520 68 61 72 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71  har **);.void sq
26530 6c 69 74 65 33 46 69 6e 69 73 68 43 6f 64 69 6e  lite3FinishCodin
26540 67 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73  g(Parse*);.int s
26550 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52 65 67  qlite3GetTempReg
26560 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
26570 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d  qlite3ReleaseTem
26580 70 52 65 67 28 50 61 72 73 65 2a 2c 69 6e 74 29  pReg(Parse*,int)
26590 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74  ;.int sqlite3Get
265a0 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a  TempRange(Parse*
265b0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
265c0 74 65 33 52 65 6c 65 61 73 65 54 65 6d 70 52 61  te3ReleaseTempRa
265d0 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69  nge(Parse*,int,i
265e0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
265f0 33 43 6c 65 61 72 54 65 6d 70 52 65 67 43 61 63  3ClearTempRegCac
26600 68 65 28 50 61 72 73 65 2a 29 3b 0a 23 69 66 64  he(Parse*);.#ifd
26610 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
26620 69 6e 74 20 73 71 6c 69 74 65 33 4e 6f 54 65 6d  int sqlite3NoTem
26630 70 73 49 6e 52 61 6e 67 65 28 50 61 72 73 65 2a  psInRange(Parse*
26640 2c 69 6e 74 2c 69 6e 74 29 3b 0a 23 65 6e 64 69  ,int,int);.#endi
26650 66 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  f.Expr *sqlite3E
26660 78 70 72 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33  xprAlloc(sqlite3
26670 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 54 6f 6b 65  *,int,const Toke
26680 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73  n*,int);.Expr *s
26690 71 6c 69 74 65 33 45 78 70 72 28 73 71 6c 69 74  qlite3Expr(sqlit
266a0 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  e3*,int,const ch
266b0 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
266c0 65 33 45 78 70 72 41 74 74 61 63 68 53 75 62 74  e3ExprAttachSubt
266d0 72 65 65 73 28 73 71 6c 69 74 65 33 2a 2c 45 78  rees(sqlite3*,Ex
266e0 70 72 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29  pr*,Expr*,Expr*)
266f0 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 50  ;.Expr *sqlite3P
26700 45 78 70 72 28 50 61 72 73 65 2a 2c 20 69 6e 74  Expr(Parse*, int
26710 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b  , Expr*, Expr*);
26720 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 45 78  .void sqlite3PEx
26730 70 72 41 64 64 53 65 6c 65 63 74 28 50 61 72 73  prAddSelect(Pars
26740 65 2a 2c 20 45 78 70 72 2a 2c 20 53 65 6c 65 63  e*, Expr*, Selec
26750 74 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  t*);.Expr *sqlit
26760 65 33 45 78 70 72 41 6e 64 28 73 71 6c 69 74 65  e3ExprAnd(sqlite
26770 33 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a 29  3*,Expr*, Expr*)
26780 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
26790 78 70 72 46 75 6e 63 74 69 6f 6e 28 50 61 72 73  xprFunction(Pars
267a0 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f  e*,ExprList*, To
267b0 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
267c0 74 65 33 45 78 70 72 41 73 73 69 67 6e 56 61 72  te3ExprAssignVar
267d0 4e 75 6d 62 65 72 28 50 61 72 73 65 2a 2c 20 45  Number(Parse*, E
267e0 78 70 72 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64  xpr*, u32);.void
267f0 20 73 71 6c 69 74 65 33 45 78 70 72 44 65 6c 65   sqlite3ExprDele
26800 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70  te(sqlite3*, Exp
26810 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73  r*);.ExprList *s
26820 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 41 70  qlite3ExprListAp
26830 70 65 6e 64 28 50 61 72 73 65 2a 2c 45 78 70 72  pend(Parse*,Expr
26840 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 45 78  List*,Expr*);.Ex
26850 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45  prList *sqlite3E
26860 78 70 72 4c 69 73 74 41 70 70 65 6e 64 56 65 63  xprListAppendVec
26870 74 6f 72 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  tor(Parse*,ExprL
26880 69 73 74 2a 2c 49 64 4c 69 73 74 2a 2c 45 78 70  ist*,IdList*,Exp
26890 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
268a0 33 45 78 70 72 4c 69 73 74 53 65 74 53 6f 72 74  3ExprListSetSort
268b0 4f 72 64 65 72 28 45 78 70 72 4c 69 73 74 2a 2c  Order(ExprList*,
268c0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
268d0 65 33 45 78 70 72 4c 69 73 74 53 65 74 4e 61 6d  e3ExprListSetNam
268e0 65 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73  e(Parse*,ExprLis
268f0 74 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a  t*,Token*,int);.
26900 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
26910 4c 69 73 74 53 65 74 53 70 61 6e 28 50 61 72 73  ListSetSpan(Pars
26920 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70  e*,ExprList*,Exp
26930 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  rSpan*);.void sq
26940 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44 65 6c  lite3ExprListDel
26950 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78  ete(sqlite3*, Ex
26960 70 72 4c 69 73 74 2a 29 3b 0a 75 33 32 20 73 71  prList*);.u32 sq
26970 6c 69 74 65 33 45 78 70 72 4c 69 73 74 46 6c 61  lite3ExprListFla
26980 67 73 28 63 6f 6e 73 74 20 45 78 70 72 4c 69 73  gs(const ExprLis
26990 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
269a0 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 63  Init(sqlite3*, c
269b0 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  har**);.int sqli
269c0 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28  te3InitCallback(
269d0 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 68 61 72  void*, int, char
269e0 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 76 6f 69  **, char**);.voi
269f0 64 20 73 71 6c 69 74 65 33 50 72 61 67 6d 61 28  d sqlite3Pragma(
26a00 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
26a10 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29  ken*,Token*,int)
26a20 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
26a30 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
26a40 4c 45 0a 4d 6f 64 75 6c 65 20 2a 73 71 6c 69 74  LE.Module *sqlit
26a50 65 33 50 72 61 67 6d 61 56 74 61 62 52 65 67 69  e3PragmaVtabRegi
26a60 73 74 65 72 28 73 71 6c 69 74 65 33 2a 2c 63 6f  ster(sqlite3*,co
26a70 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 29  nst char *zName)
26a80 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ;.#endif.void sq
26a90 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68  lite3ResetAllSch
26aa0 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e  emasOfConnection
26ab0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
26ac0 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65   sqlite3ResetOne
26ad0 53 63 68 65 6d 61 28 73 71 6c 69 74 65 33 2a 2c  Schema(sqlite3*,
26ae0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
26af0 65 33 43 6f 6c 6c 61 70 73 65 44 61 74 61 62 61  e3CollapseDataba
26b00 73 65 41 72 72 61 79 28 73 71 6c 69 74 65 33 2a  seArray(sqlite3*
26b10 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
26b20 6f 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68 61  ommitInternalCha
26b30 6e 67 65 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a  nges(sqlite3*);.
26b40 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
26b50 74 65 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 73 71  teColumnNames(sq
26b60 6c 69 74 65 33 2a 2c 54 61 62 6c 65 2a 29 3b 0a  lite3*,Table*);.
26b70 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d  int sqlite3Colum
26b80 6e 73 46 72 6f 6d 45 78 70 72 4c 69 73 74 28 50  nsFromExprList(P
26b90 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
26ba0 69 31 36 2a 2c 43 6f 6c 75 6d 6e 2a 2a 29 3b 0a  i16*,Column**);.
26bb0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65  void sqlite3Sele
26bc0 63 74 41 64 64 43 6f 6c 75 6d 6e 54 79 70 65 41  ctAddColumnTypeA
26bd0 6e 64 43 6f 6c 6c 61 74 69 6f 6e 28 50 61 72 73  ndCollation(Pars
26be0 65 2a 2c 54 61 62 6c 65 2a 2c 53 65 6c 65 63 74  e*,Table*,Select
26bf0 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74  *);.Table *sqlit
26c00 65 33 52 65 73 75 6c 74 53 65 74 4f 66 53 65 6c  e3ResultSetOfSel
26c10 65 63 74 28 50 61 72 73 65 2a 2c 53 65 6c 65 63  ect(Parse*,Selec
26c20 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
26c30 33 4f 70 65 6e 4d 61 73 74 65 72 54 61 62 6c 65  3OpenMasterTable
26c40 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 29 3b 0a  (Parse *, int);.
26c50 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 50 72  Index *sqlite3Pr
26c60 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 54 61  imaryKeyIndex(Ta
26c70 62 6c 65 2a 29 3b 0a 69 31 36 20 73 71 6c 69 74  ble*);.i16 sqlit
26c80 65 33 43 6f 6c 75 6d 6e 4f 66 49 6e 64 65 78 28  e3ColumnOfIndex(
26c90 49 6e 64 65 78 2a 2c 20 69 31 36 29 3b 0a 76 6f  Index*, i16);.vo
26ca0 69 64 20 73 71 6c 69 74 65 33 53 74 61 72 74 54  id sqlite3StartT
26cb0 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65  able(Parse*,Toke
26cc0 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e  n*,Token*,int,in
26cd0 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 23 69 66 20  t,int,int);.#if 
26ce0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49  SQLITE_ENABLE_HI
26cf0 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 0a 20 20 76  DDEN_COLUMNS.  v
26d00 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d  oid sqlite3Colum
26d10 6e 50 72 6f 70 65 72 74 69 65 73 46 72 6f 6d 4e  nPropertiesFromN
26d20 61 6d 65 28 54 61 62 6c 65 2a 2c 20 43 6f 6c 75  ame(Table*, Colu
26d30 6d 6e 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  mn*);.#else.# de
26d40 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6c 75  fine sqlite3Colu
26d50 6d 6e 50 72 6f 70 65 72 74 69 65 73 46 72 6f 6d  mnPropertiesFrom
26d60 4e 61 6d 65 28 54 2c 43 29 20 2f 2a 20 6e 6f 2d  Name(T,C) /* no-
26d70 6f 70 20 2a 2f 0a 23 65 6e 64 69 66 0a 76 6f 69  op */.#endif.voi
26d80 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75  d sqlite3AddColu
26d90 6d 6e 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  mn(Parse*,Token*
26da0 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73  ,Token*);.void s
26db0 71 6c 69 74 65 33 41 64 64 4e 6f 74 4e 75 6c 6c  qlite3AddNotNull
26dc0 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76  (Parse*, int);.v
26dd0 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 50 72  oid sqlite3AddPr
26de0 69 6d 61 72 79 4b 65 79 28 50 61 72 73 65 2a 2c  imaryKey(Parse*,
26df0 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c   ExprList*, int,
26e00 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
26e10 20 73 71 6c 69 74 65 33 41 64 64 43 68 65 63 6b   sqlite3AddCheck
26e20 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65  Constraint(Parse
26e30 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
26e40 73 71 6c 69 74 65 33 41 64 64 44 65 66 61 75 6c  sqlite3AddDefaul
26e50 74 56 61 6c 75 65 28 50 61 72 73 65 2a 2c 45 78  tValue(Parse*,Ex
26e60 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73  prSpan*);.void s
26e70 71 6c 69 74 65 33 41 64 64 43 6f 6c 6c 61 74 65  qlite3AddCollate
26e80 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  Type(Parse*, Tok
26e90 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  en*);.void sqlit
26ea0 65 33 45 6e 64 54 61 62 6c 65 28 50 61 72 73 65  e3EndTable(Parse
26eb0 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
26ec0 75 38 2c 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  u8,Select*);.int
26ed0 20 73 71 6c 69 74 65 33 50 61 72 73 65 55 72 69   sqlite3ParseUri
26ee0 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  (const char*,con
26ef0 73 74 20 63 68 61 72 2a 2c 75 6e 73 69 67 6e 65  st char*,unsigne
26f00 64 20 69 6e 74 2a 2c 0a 20 20 20 20 20 20 20 20  d int*,.        
26f10 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
26f20 74 65 33 5f 76 66 73 2a 2a 2c 63 68 61 72 2a 2a  te3_vfs**,char**
26f30 2c 63 68 61 72 20 2a 2a 29 3b 0a 42 74 72 65 65  ,char **);.Btree
26f40 20 2a 73 71 6c 69 74 65 33 44 62 4e 61 6d 65 54   *sqlite3DbNameT
26f50 6f 42 74 72 65 65 28 73 71 6c 69 74 65 33 2a 2c  oBtree(sqlite3*,
26f60 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 0a 23  const char*);..#
26f70 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54  ifdef SQLITE_UNT
26f80 45 53 54 41 42 4c 45 0a 23 20 64 65 66 69 6e 65  ESTABLE.# define
26f90 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d   sqlite3FaultSim
26fa0 28 58 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 65  (X) SQLITE_OK.#e
26fb0 6c 73 65 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  lse.  int sqlite
26fc0 33 46 61 75 6c 74 53 69 6d 28 69 6e 74 29 3b 0a  3FaultSim(int);.
26fd0 23 65 6e 64 69 66 0a 0a 42 69 74 76 65 63 20 2a  #endif..Bitvec *
26fe0 73 71 6c 69 74 65 33 42 69 74 76 65 63 43 72 65  sqlite3BitvecCre
26ff0 61 74 65 28 75 33 32 29 3b 0a 69 6e 74 20 73 71  ate(u32);.int sq
27000 6c 69 74 65 33 42 69 74 76 65 63 54 65 73 74 28  lite3BitvecTest(
27010 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69  Bitvec*, u32);.i
27020 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  nt sqlite3Bitvec
27030 54 65 73 74 4e 6f 74 4e 75 6c 6c 28 42 69 74 76  TestNotNull(Bitv
27040 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73  ec*, u32);.int s
27050 71 6c 69 74 65 33 42 69 74 76 65 63 53 65 74 28  qlite3BitvecSet(
27060 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 76  Bitvec*, u32);.v
27070 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74 76 65  oid sqlite3Bitve
27080 63 43 6c 65 61 72 28 42 69 74 76 65 63 2a 2c 20  cClear(Bitvec*, 
27090 75 33 32 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69  u32, void*);.voi
270a0 64 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 44  d sqlite3BitvecD
270b0 65 73 74 72 6f 79 28 42 69 74 76 65 63 2a 29 3b  estroy(Bitvec*);
270c0 0a 75 33 32 20 73 71 6c 69 74 65 33 42 69 74 76  .u32 sqlite3Bitv
270d0 65 63 53 69 7a 65 28 42 69 74 76 65 63 2a 29 3b  ecSize(Bitvec*);
270e0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
270f0 55 4e 54 45 53 54 41 42 4c 45 0a 69 6e 74 20 73  UNTESTABLE.int s
27100 71 6c 69 74 65 33 42 69 74 76 65 63 42 75 69 6c  qlite3BitvecBuil
27110 74 69 6e 54 65 73 74 28 69 6e 74 2c 69 6e 74 2a  tinTest(int,int*
27120 29 3b 0a 23 65 6e 64 69 66 0a 0a 52 6f 77 53 65  );.#endif..RowSe
27130 74 20 2a 73 71 6c 69 74 65 33 52 6f 77 53 65 74  t *sqlite3RowSet
27140 49 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 76  Init(sqlite3*, v
27150 6f 69 64 2a 2c 20 75 6e 73 69 67 6e 65 64 20 69  oid*, unsigned i
27160 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
27170 33 52 6f 77 53 65 74 43 6c 65 61 72 28 52 6f 77  3RowSetClear(Row
27180 53 65 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  Set*);.void sqli
27190 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28  te3RowSetInsert(
271a0 52 6f 77 53 65 74 2a 2c 20 69 36 34 29 3b 0a 69  RowSet*, i64);.i
271b0 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74  nt sqlite3RowSet
271c0 54 65 73 74 28 52 6f 77 53 65 74 2a 2c 20 69 6e  Test(RowSet*, in
271d0 74 20 69 42 61 74 63 68 2c 20 69 36 34 29 3b 0a  t iBatch, i64);.
271e0 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77 53 65  int sqlite3RowSe
271f0 74 4e 65 78 74 28 52 6f 77 53 65 74 2a 2c 20 69  tNext(RowSet*, i
27200 36 34 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69  64*);..void sqli
27210 74 65 33 43 72 65 61 74 65 56 69 65 77 28 50 61  te3CreateView(Pa
27220 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
27230 6e 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69  n*,Token*,ExprLi
27240 73 74 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 2c  st*,Select*,int,
27250 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69  int);..#if !defi
27260 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
27270 56 49 45 57 29 20 7c 7c 20 21 64 65 66 69 6e 65  VIEW) || !define
27280 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  d(SQLITE_OMIT_VI
27290 52 54 55 41 4c 54 41 42 4c 45 29 0a 20 20 69 6e  RTUALTABLE).  in
272a0 74 20 73 71 6c 69 74 65 33 56 69 65 77 47 65 74  t sqlite3ViewGet
272b0 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50 61 72 73  ColumnNames(Pars
272c0 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73  e*,Table*);.#els
272d0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
272e0 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e  e3ViewGetColumnN
272f0 61 6d 65 73 28 41 2c 42 29 20 30 0a 23 65 6e 64  ames(A,B) 0.#end
27300 69 66 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  if..#if SQLITE_M
27310 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a 20  AX_ATTACHED>30. 
27320 20 69 6e 74 20 73 71 6c 69 74 65 33 44 62 4d 61   int sqlite3DbMa
27330 73 6b 41 6c 6c 5a 65 72 6f 28 79 44 62 4d 61 73  skAllZero(yDbMas
27340 6b 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  k);.#endif.void 
27350 73 71 6c 69 74 65 33 44 72 6f 70 54 61 62 6c 65  sqlite3DropTable
27360 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
27370 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
27380 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 44 72  id sqlite3CodeDr
27390 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  opTable(Parse*, 
273a0 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
273b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
273c0 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74  eleteTable(sqlit
273d0 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 69  e3*, Table*);.#i
273e0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
273f0 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a  T_AUTOINCREMENT.
27400 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75    void sqlite3Au
27410 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e  toincrementBegin
27420 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b  (Parse *pParse);
27430 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41  .  void sqlite3A
27440 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28  utoincrementEnd(
27450 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a  Parse *pParse);.
27460 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
27470 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d  qlite3Autoincrem
27480 65 6e 74 42 65 67 69 6e 28 58 29 0a 23 20 64 65  entBegin(X).# de
27490 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f  fine sqlite3Auto
274a0 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28 58 29 0a  incrementEnd(X).
274b0 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
274c0 74 65 33 49 6e 73 65 72 74 28 50 61 72 73 65 2a  te3Insert(Parse*
274d0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 53 65 6c 65  , SrcList*, Sele
274e0 63 74 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 69 6e  ct*, IdList*, in
274f0 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  t);.void *sqlite
27500 33 41 72 72 61 79 41 6c 6c 6f 63 61 74 65 28 73  3ArrayAllocate(s
27510 71 6c 69 74 65 33 2a 2c 76 6f 69 64 2a 2c 69 6e  qlite3*,void*,in
27520 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 49 64  t,int*,int*);.Id
27530 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64 4c  List *sqlite3IdL
27540 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65  istAppend(sqlite
27550 33 2a 2c 20 49 64 4c 69 73 74 2a 2c 20 54 6f 6b  3*, IdList*, Tok
27560 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
27570 33 49 64 4c 69 73 74 49 6e 64 65 78 28 49 64 4c  3IdListIndex(IdL
27580 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ist*,const char*
27590 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69  );.SrcList *sqli
275a0 74 65 33 53 72 63 4c 69 73 74 45 6e 6c 61 72 67  te3SrcListEnlarg
275b0 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c  e(sqlite3*, SrcL
275c0 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  ist*, int, int);
275d0 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65  .SrcList *sqlite
275e0 33 53 72 63 4c 69 73 74 41 70 70 65 6e 64 28 73  3SrcListAppend(s
275f0 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74  qlite3*, SrcList
27600 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
27610 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c  *);.SrcList *sql
27620 69 74 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e  ite3SrcListAppen
27630 64 46 72 6f 6d 54 65 72 6d 28 50 61 72 73 65 2a  dFromTerm(Parse*
27640 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65  , SrcList*, Toke
27650 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20  n*, Token*,.    
27660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27680 20 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c 65 63 74    Token*, Select
27690 2a 2c 20 45 78 70 72 2a 2c 20 49 64 4c 69 73 74  *, Expr*, IdList
276a0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
276b0 53 72 63 4c 69 73 74 49 6e 64 65 78 65 64 42 79  SrcListIndexedBy
276c0 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73  (Parse *, SrcLis
276d0 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76  t *, Token *);.v
276e0 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
276f0 73 74 46 75 6e 63 41 72 67 73 28 50 61 72 73 65  stFuncArgs(Parse
27700 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70  *, SrcList*, Exp
27710 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
27720 69 74 65 33 49 6e 64 65 78 65 64 42 79 4c 6f 6f  ite3IndexedByLoo
27730 6b 75 70 28 50 61 72 73 65 20 2a 2c 20 73 74 72  kup(Parse *, str
27740 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d  uct SrcList_item
27750 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
27760 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69  3SrcListShiftJoi
27770 6e 54 79 70 65 28 53 72 63 4c 69 73 74 2a 29 3b  nType(SrcList*);
27780 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63  .void sqlite3Src
27790 4c 69 73 74 41 73 73 69 67 6e 43 75 72 73 6f 72  ListAssignCursor
277a0 73 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  s(Parse*, SrcLis
277b0 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
277c0 33 49 64 4c 69 73 74 44 65 6c 65 74 65 28 73 71  3IdListDelete(sq
277d0 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 29  lite3*, IdList*)
277e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72  ;.void sqlite3Sr
277f0 63 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69  cListDelete(sqli
27800 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  te3*, SrcList*);
27810 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 41  .Index *sqlite3A
27820 6c 6c 6f 63 61 74 65 49 6e 64 65 78 4f 62 6a 65  llocateIndexObje
27830 63 74 28 73 71 6c 69 74 65 33 2a 2c 69 31 36 2c  ct(sqlite3*,i16,
27840 69 6e 74 2c 63 68 61 72 2a 2a 29 3b 0a 76 6f 69  int,char**);.voi
27850 64 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 49  d sqlite3CreateI
27860 6e 64 65 78 28 50 61 72 73 65 2a 2c 54 6f 6b 65  ndex(Parse*,Toke
27870 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63 4c 69 73  n*,Token*,SrcLis
27880 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74  t*,ExprList*,int
27890 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20  ,Token*,.       
278a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
278b0 20 20 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69     Expr*, int, i
278c0 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71  nt, u8);.void sq
278d0 6c 69 74 65 33 44 72 6f 70 49 6e 64 65 78 28 50  lite3DropIndex(P
278e0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
278f0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
27900 65 33 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c  e3Select(Parse*,
27910 20 53 65 6c 65 63 74 2a 2c 20 53 65 6c 65 63 74   Select*, Select
27920 44 65 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a  Dest*);.Select *
27930 73 71 6c 69 74 65 33 53 65 6c 65 63 74 4e 65 77  sqlite3SelectNew
27940 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
27950 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a  *,SrcList*,Expr*
27960 2c 45 78 70 72 4c 69 73 74 2a 2c 0a 20 20 20 20  ,ExprList*,.    
27970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27980 20 20 20 20 20 45 78 70 72 2a 2c 45 78 70 72 4c       Expr*,ExprL
27990 69 73 74 2a 2c 75 33 32 2c 45 78 70 72 2a 2c 45  ist*,u32,Expr*,E
279a0 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
279b0 74 65 33 53 65 6c 65 63 74 44 65 6c 65 74 65 28  te3SelectDelete(
279c0 73 71 6c 69 74 65 33 2a 2c 20 53 65 6c 65 63 74  sqlite3*, Select
279d0 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74  *);.Table *sqlit
279e0 65 33 53 72 63 4c 69 73 74 4c 6f 6f 6b 75 70 28  e3SrcListLookup(
279f0 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
27a00 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73  );.int sqlite3Is
27a10 52 65 61 64 4f 6e 6c 79 28 50 61 72 73 65 2a 2c  ReadOnly(Parse*,
27a20 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 76   Table*, int);.v
27a30 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 54  oid sqlite3OpenT
27a40 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  able(Parse*, int
27a50 20 69 43 75 72 2c 20 69 6e 74 20 69 44 62 2c 20   iCur, int iDb, 
27a60 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 23 69  Table*, int);.#i
27a70 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
27a80 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54 45 5f 44  _ENABLE_UPDATE_D
27a90 45 4c 45 54 45 5f 4c 49 4d 49 54 29 20 26 26 20  ELETE_LIMIT) && 
27aa0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
27ab0 4f 4d 49 54 5f 53 55 42 51 55 45 52 59 29 0a 45  OMIT_SUBQUERY).E
27ac0 78 70 72 20 2a 73 71 6c 69 74 65 33 4c 69 6d 69  xpr *sqlite3Limi
27ad0 74 57 68 65 72 65 28 50 61 72 73 65 2a 2c 53 72  tWhere(Parse*,Sr
27ae0 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70  cList*,Expr*,Exp
27af0 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70  rList*,Expr*,Exp
27b00 72 2a 2c 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69  r*,char*);.#endi
27b10 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  f.void sqlite3De
27b20 6c 65 74 65 46 72 6f 6d 28 50 61 72 73 65 2a 2c  leteFrom(Parse*,
27b30 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 2a   SrcList*, Expr*
27b40 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
27b50 70 64 61 74 65 28 50 61 72 73 65 2a 2c 20 53 72  pdate(Parse*, Sr
27b60 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74  cList*, ExprList
27b70 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
27b80 57 68 65 72 65 49 6e 66 6f 20 2a 73 71 6c 69 74  WhereInfo *sqlit
27b90 65 33 57 68 65 72 65 42 65 67 69 6e 28 50 61 72  e3WhereBegin(Par
27ba0 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70  se*,SrcList*,Exp
27bb0 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70  r*,ExprList*,Exp
27bc0 72 4c 69 73 74 2a 2c 75 31 36 2c 69 6e 74 29 3b  rList*,u16,int);
27bd0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 57 68 65  .void sqlite3Whe
27be0 72 65 45 6e 64 28 57 68 65 72 65 49 6e 66 6f 2a  reEnd(WhereInfo*
27bf0 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65  );.LogEst sqlite
27c00 33 57 68 65 72 65 4f 75 74 70 75 74 52 6f 77 43  3WhereOutputRowC
27c10 6f 75 6e 74 28 57 68 65 72 65 49 6e 66 6f 2a 29  ount(WhereInfo*)
27c20 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
27c30 72 65 49 73 44 69 73 74 69 6e 63 74 28 57 68 65  reIsDistinct(Whe
27c40 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
27c50 6c 69 74 65 33 57 68 65 72 65 49 73 4f 72 64 65  lite3WhereIsOrde
27c60 72 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  red(WhereInfo*);
27c70 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
27c80 65 4f 72 64 65 72 65 64 49 6e 6e 65 72 4c 6f 6f  eOrderedInnerLoo
27c90 70 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69  p(WhereInfo*);.i
27ca0 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  nt sqlite3WhereI
27cb0 73 53 6f 72 74 65 64 28 57 68 65 72 65 49 6e 66  sSorted(WhereInf
27cc0 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
27cd0 57 68 65 72 65 43 6f 6e 74 69 6e 75 65 4c 61 62  WhereContinueLab
27ce0 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  el(WhereInfo*);.
27cf0 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
27d00 42 72 65 61 6b 4c 61 62 65 6c 28 57 68 65 72 65  BreakLabel(Where
27d10 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Info*);.int sqli
27d20 74 65 33 57 68 65 72 65 4f 6b 4f 6e 65 50 61 73  te3WhereOkOnePas
27d30 73 28 57 68 65 72 65 49 6e 66 6f 2a 2c 20 69 6e  s(WhereInfo*, in
27d40 74 2a 29 3b 0a 23 64 65 66 69 6e 65 20 4f 4e 45  t*);.#define ONE
27d50 50 41 53 53 5f 4f 46 46 20 20 20 20 20 20 30 20  PASS_OFF      0 
27d60 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 6f 66         /* Use of
27d70 20 4f 4e 45 50 41 53 53 20 6e 6f 74 20 61 6c 6c   ONEPASS not all
27d80 6f 77 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owed */.#define 
27d90 4f 4e 45 50 41 53 53 5f 53 49 4e 47 4c 45 20 20  ONEPASS_SINGLE  
27da0 20 31 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 45   1        /* ONE
27db0 50 41 53 53 20 76 61 6c 69 64 20 66 6f 72 20 61  PASS valid for a
27dc0 20 73 69 6e 67 6c 65 20 72 6f 77 20 75 70 64 61   single row upda
27dd0 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 4e  te */.#define ON
27de0 45 50 41 53 53 5f 4d 55 4c 54 49 20 20 20 20 32  EPASS_MULTI    2
27df0 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e 45 50 41          /* ONEPA
27e00 53 53 20 69 73 20 76 61 6c 69 64 20 66 6f 72 20  SS is valid for 
27e10 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f  multiple rows */
27e20 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
27e30 72 43 6f 64 65 4c 6f 61 64 49 6e 64 65 78 43 6f  rCodeLoadIndexCo
27e40 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 49 6e 64  lumn(Parse*, Ind
27e50 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  ex*, int, int, i
27e60 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
27e70 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d  ExprCodeGetColum
27e80 6e 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  n(Parse*, Table*
27e90 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c  , int, int, int,
27ea0 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   u8);.void sqlit
27eb0 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c  e3ExprCodeGetCol
27ec0 75 6d 6e 54 6f 52 65 67 28 50 61 72 73 65 2a 2c  umnToReg(Parse*,
27ed0 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
27ee0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
27ef0 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74  lite3ExprCodeGet
27f00 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 56 64  ColumnOfTable(Vd
27f10 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  be*, Table*, int
27f20 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
27f30 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
27f40 65 4d 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e  eMove(Parse*, in
27f50 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
27f60 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  id sqlite3ExprCa
27f70 63 68 65 53 74 6f 72 65 28 50 61 72 73 65 2a 2c  cheStore(Parse*,
27f80 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
27f90 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
27fa0 72 43 61 63 68 65 50 75 73 68 28 50 61 72 73 65  rCachePush(Parse
27fb0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
27fc0 45 78 70 72 43 61 63 68 65 50 6f 70 28 50 61 72  ExprCachePop(Par
27fd0 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
27fe0 65 33 45 78 70 72 43 61 63 68 65 52 65 6d 6f 76  e3ExprCacheRemov
27ff0 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  e(Parse*, int, i
28000 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
28010 33 45 78 70 72 43 61 63 68 65 43 6c 65 61 72 28  3ExprCacheClear(
28020 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
28030 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 41 66  lite3ExprCacheAf
28040 66 69 6e 69 74 79 43 68 61 6e 67 65 28 50 61 72  finityChange(Par
28050 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  se*, int, int);.
28060 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
28070 43 6f 64 65 28 50 61 72 73 65 2a 2c 20 45 78 70  Code(Parse*, Exp
28080 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  r*, int);.void s
28090 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 43 6f  qlite3ExprCodeCo
280a0 70 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  py(Parse*, Expr*
280b0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
280c0 69 74 65 33 45 78 70 72 43 6f 64 65 46 61 63 74  ite3ExprCodeFact
280d0 6f 72 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 45  orable(Parse*, E
280e0 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  xpr*, int);.int 
280f0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 41  sqlite3ExprCodeA
28100 74 49 6e 69 74 28 50 61 72 73 65 2a 2c 20 45 78  tInit(Parse*, Ex
28110 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  pr*, int);.int s
28120 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54 65  qlite3ExprCodeTe
28130 6d 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  mp(Parse*, Expr*
28140 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  , int*);.int sql
28150 69 74 65 33 45 78 70 72 43 6f 64 65 54 61 72 67  ite3ExprCodeTarg
28160 65 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  et(Parse*, Expr*
28170 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
28180 69 74 65 33 45 78 70 72 43 6f 64 65 41 6e 64 43  ite3ExprCodeAndC
28190 61 63 68 65 28 50 61 72 73 65 2a 2c 20 45 78 70  ache(Parse*, Exp
281a0 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  r*, int);.int sq
281b0 6c 69 74 65 33 45 78 70 72 43 6f 64 65 45 78 70  lite3ExprCodeExp
281c0 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 20 45 78  rList(Parse*, Ex
281d0 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e  prList*, int, in
281e0 74 2c 20 75 38 29 3b 0a 23 64 65 66 69 6e 65 20  t, u8);.#define 
281f0 53 51 4c 49 54 45 5f 45 43 45 4c 5f 44 55 50 20  SQLITE_ECEL_DUP 
28200 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20 44 65       0x01  /* De
28210 65 70 2c 20 6e 6f 74 20 73 68 61 6c 6c 6f 77 20  ep, not shallow 
28220 63 6f 70 69 65 73 20 2a 2f 0a 23 64 65 66 69 6e  copies */.#defin
28230 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 46 41  e SQLITE_ECEL_FA
28240 43 54 4f 52 20 20 20 30 78 30 32 20 20 2f 2a 20  CTOR   0x02  /* 
28250 46 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74  Factor out const
28260 61 6e 74 20 74 65 72 6d 73 20 2a 2f 0a 23 64 65  ant terms */.#de
28270 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c  fine SQLITE_ECEL
28280 5f 52 45 46 20 20 20 20 20 20 30 78 30 34 20 20  _REF      0x04  
28290 2f 2a 20 55 73 65 20 45 78 70 72 4c 69 73 74 2e  /* Use ExprList.
282a0 75 2e 78 2e 69 4f 72 64 65 72 42 79 43 6f 6c 20  u.x.iOrderByCol 
282b0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
282c0 45 5f 45 43 45 4c 5f 4f 4d 49 54 52 45 46 20 20  E_ECEL_OMITREF  
282d0 30 78 30 38 20 20 2f 2a 20 4f 6d 69 74 20 69 66  0x08  /* Omit if
282e0 20 45 78 70 72 4c 69 73 74 2e 75 2e 78 2e 69 4f   ExprList.u.x.iO
282f0 72 64 65 72 42 79 43 6f 6c 20 2a 2f 0a 76 6f 69  rderByCol */.voi
28300 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66 54  d sqlite3ExprIfT
28310 72 75 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72  rue(Parse*, Expr
28320 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
28330 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66  id sqlite3ExprIf
28340 46 61 6c 73 65 28 50 61 72 73 65 2a 2c 20 45 78  False(Parse*, Ex
28350 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  pr*, int, int);.
28360 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
28370 49 66 46 61 6c 73 65 44 75 70 28 50 61 72 73 65  IfFalseDup(Parse
28380 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69  *, Expr*, int, i
28390 6e 74 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69  nt);.Table *sqli
283a0 74 65 33 46 69 6e 64 54 61 62 6c 65 28 73 71 6c  te3FindTable(sql
283b0 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
283c0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
283d0 0a 23 64 65 66 69 6e 65 20 4c 4f 43 41 54 45 5f  .#define LOCATE_
283e0 56 49 45 57 20 20 20 20 30 78 30 31 0a 23 64 65  VIEW    0x01.#de
283f0 66 69 6e 65 20 4c 4f 43 41 54 45 5f 4e 4f 45 52  fine LOCATE_NOER
28400 52 20 20 20 30 78 30 32 0a 54 61 62 6c 65 20 2a  R   0x02.Table *
28410 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62  sqlite3LocateTab
28420 6c 65 28 50 61 72 73 65 2a 2c 75 33 32 20 66 6c  le(Parse*,u32 fl
28430 61 67 73 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ags,const char*,
28440 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 54   const char*);.T
28450 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63  able *sqlite3Loc
28460 61 74 65 54 61 62 6c 65 49 74 65 6d 28 50 61 72  ateTableItem(Par
28470 73 65 2a 2c 75 33 32 20 66 6c 61 67 73 2c 73 74  se*,u32 flags,st
28480 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65  ruct SrcList_ite
28490 6d 20 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c  m *);.Index *sql
284a0 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28 73 71  ite3FindIndex(sq
284b0 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
284c0 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
284d0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e  ;.void sqlite3Un
284e0 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62  linkAndDeleteTab
284f0 6c 65 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  le(sqlite3*,int,
28500 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
28510 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  id sqlite3Unlink
28520 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28 73  AndDeleteIndex(s
28530 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
28540 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
28550 71 6c 69 74 65 33 56 61 63 75 75 6d 28 50 61 72  qlite3Vacuum(Par
28560 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  se*,Token*);.int
28570 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75   sqlite3RunVacuu
28580 6d 28 63 68 61 72 2a 2a 2c 20 73 71 6c 69 74 65  m(char**, sqlite
28590 33 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20 2a  3*, int);.char *
285a0 73 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d 54  sqlite3NameFromT
285b0 6f 6b 65 6e 28 73 71 6c 69 74 65 33 2a 2c 20 54  oken(sqlite3*, T
285c0 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
285d0 74 65 33 45 78 70 72 43 6f 6d 70 61 72 65 28 50  te3ExprCompare(P
285e0 61 72 73 65 2a 2c 45 78 70 72 2a 2c 20 45 78 70  arse*,Expr*, Exp
285f0 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  r*, int);.int sq
28600 6c 69 74 65 33 45 78 70 72 43 6f 6d 70 61 72 65  lite3ExprCompare
28610 53 6b 69 70 28 45 78 70 72 2a 2c 20 45 78 70 72  Skip(Expr*, Expr
28620 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
28630 69 74 65 33 45 78 70 72 4c 69 73 74 43 6f 6d 70  ite3ExprListComp
28640 61 72 65 28 45 78 70 72 4c 69 73 74 2a 2c 20 45  are(ExprList*, E
28650 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a  xprList*, int);.
28660 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
28670 6d 70 6c 69 65 73 45 78 70 72 28 50 61 72 73 65  mpliesExpr(Parse
28680 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20  *,Expr*, Expr*, 
28690 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
286a0 65 33 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67  e3ExprAnalyzeAgg
286b0 72 65 67 61 74 65 73 28 4e 61 6d 65 43 6f 6e 74  regates(NameCont
286c0 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  ext*, Expr*);.vo
286d0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e  id sqlite3ExprAn
286e0 61 6c 79 7a 65 41 67 67 4c 69 73 74 28 4e 61 6d  alyzeAggList(Nam
286f0 65 43 6f 6e 74 65 78 74 2a 2c 45 78 70 72 4c 69  eContext*,ExprLi
28700 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
28710 33 45 78 70 72 43 6f 76 65 72 65 64 42 79 49 6e  3ExprCoveredByIn
28720 64 65 78 28 45 78 70 72 2a 2c 20 69 6e 74 20 69  dex(Expr*, int i
28730 43 75 72 2c 20 49 6e 64 65 78 20 2a 70 49 64 78  Cur, Index *pIdx
28740 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 75  );.int sqlite3Fu
28750 6e 63 74 69 6f 6e 55 73 65 73 54 68 69 73 53 72  nctionUsesThisSr
28760 63 28 45 78 70 72 2a 2c 20 53 72 63 4c 69 73 74  c(Expr*, SrcList
28770 2a 29 3b 0a 56 64 62 65 20 2a 73 71 6c 69 74 65  *);.Vdbe *sqlite
28780 33 47 65 74 56 64 62 65 28 50 61 72 73 65 2a 29  3GetVdbe(Parse*)
28790 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
287a0 5f 55 4e 54 45 53 54 41 42 4c 45 0a 76 6f 69 64  _UNTESTABLE.void
287b0 20 73 71 6c 69 74 65 33 50 72 6e 67 53 61 76 65   sqlite3PrngSave
287c0 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69  State(void);.voi
287d0 64 20 73 71 6c 69 74 65 33 50 72 6e 67 52 65 73  d sqlite3PrngRes
287e0 74 6f 72 65 53 74 61 74 65 28 76 6f 69 64 29 3b  toreState(void);
287f0 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
28800 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28  ite3RollbackAll(
28810 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76  sqlite3*,int);.v
28820 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56  oid sqlite3CodeV
28830 65 72 69 66 79 53 63 68 65 6d 61 28 50 61 72 73  erifySchema(Pars
28840 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
28850 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79  qlite3CodeVerify
28860 4e 61 6d 65 64 53 63 68 65 6d 61 28 50 61 72 73  NamedSchema(Pars
28870 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  e*, const char *
28880 7a 44 62 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  zDb);.void sqlit
28890 65 33 42 65 67 69 6e 54 72 61 6e 73 61 63 74 69  e3BeginTransacti
288a0 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  on(Parse*, int);
288b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64  .void sqlite3End
288c0 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73  Transaction(Pars
288d0 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  e*,int);.void sq
288e0 6c 69 74 65 33 53 61 76 65 70 6f 69 6e 74 28 50  lite3Savepoint(P
288f0 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65  arse*, int, Toke
28900 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
28910 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73  3CloseSavepoints
28920 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 76 6f 69  (sqlite3 *);.voi
28930 64 20 73 71 6c 69 74 65 33 4c 65 61 76 65 4d 75  d sqlite3LeaveMu
28940 74 65 78 41 6e 64 43 6c 6f 73 65 5a 6f 6d 62 69  texAndCloseZombi
28950 65 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74  e(sqlite3*);.int
28960 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f   sqlite3ExprIsCo
28970 6e 73 74 61 6e 74 28 45 78 70 72 2a 29 3b 0a 69  nstant(Expr*);.i
28980 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49 73  nt sqlite3ExprIs
28990 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a 6f 69 6e 28  ConstantNotJoin(
289a0 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
289b0 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e  te3ExprIsConstan
289c0 74 4f 72 46 75 6e 63 74 69 6f 6e 28 45 78 70 72  tOrFunction(Expr
289d0 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69  *, u8);.int sqli
289e0 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e  te3ExprIsConstan
289f0 74 4f 72 47 72 6f 75 70 42 79 28 50 61 72 73 65  tOrGroupBy(Parse
28a00 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 4c 69  *, Expr*, ExprLi
28a10 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
28a20 33 45 78 70 72 49 73 54 61 62 6c 65 43 6f 6e 73  3ExprIsTableCons
28a30 74 61 6e 74 28 45 78 70 72 2a 2c 69 6e 74 29 3b  tant(Expr*,int);
28a40 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
28a50 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f 48 49 4e  NABLE_CURSOR_HIN
28a60 54 53 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  TS.int sqlite3Ex
28a70 70 72 43 6f 6e 74 61 69 6e 73 53 75 62 71 75 65  prContainsSubque
28a80 72 79 28 45 78 70 72 2a 29 3b 0a 23 65 6e 64 69  ry(Expr*);.#endi
28a90 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  f.int sqlite3Exp
28aa0 72 49 73 49 6e 74 65 67 65 72 28 45 78 70 72 2a  rIsInteger(Expr*
28ab0 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  , int*);.int sql
28ac0 69 74 65 33 45 78 70 72 43 61 6e 42 65 4e 75 6c  ite3ExprCanBeNul
28ad0 6c 28 63 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a  l(const Expr*);.
28ae0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 4e  int sqlite3ExprN
28af0 65 65 64 73 4e 6f 41 66 66 69 6e 69 74 79 43 68  eedsNoAffinityCh
28b00 61 6e 67 65 28 63 6f 6e 73 74 20 45 78 70 72 2a  ange(const Expr*
28b10 2c 20 63 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c  , char);.int sql
28b20 69 74 65 33 49 73 52 6f 77 69 64 28 63 6f 6e 73  ite3IsRowid(cons
28b30 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
28b40 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52 6f  qlite3GenerateRo
28b50 77 44 65 6c 65 74 65 28 0a 20 20 20 20 50 61 72  wDelete(.    Par
28b60 73 65 2a 2c 54 61 62 6c 65 2a 2c 54 72 69 67 67  se*,Table*,Trigg
28b70 65 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  er*,int,int,int,
28b80 69 31 36 2c 75 38 2c 75 38 2c 75 38 2c 69 6e 74  i16,u8,u8,u8,int
28b90 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47  );.void sqlite3G
28ba0 65 6e 65 72 61 74 65 52 6f 77 49 6e 64 65 78 44  enerateRowIndexD
28bb0 65 6c 65 74 65 28 50 61 72 73 65 2a 2c 20 54 61  elete(Parse*, Ta
28bc0 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
28bd0 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  int*, int);.int 
28be0 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 49  sqlite3GenerateI
28bf0 6e 64 65 78 4b 65 79 28 50 61 72 73 65 2a 2c 20  ndexKey(Parse*, 
28c00 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74  Index*, int, int
28c10 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 49 6e 64 65  , int, int*,Inde
28c20 78 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  x*,int);.void sq
28c30 6c 69 74 65 33 52 65 73 6f 6c 76 65 50 61 72 74  lite3ResolvePart
28c40 49 64 78 4c 61 62 65 6c 28 50 61 72 73 65 2a 2c  IdxLabel(Parse*,
28c50 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
28c60 65 33 47 65 6e 65 72 61 74 65 43 6f 6e 73 74 72  e3GenerateConstr
28c70 61 69 6e 74 43 68 65 63 6b 73 28 50 61 72 73 65  aintChecks(Parse
28c80 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2a 2c 69 6e  *,Table*,int*,in
28c90 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 0a 20  t,int,int,int,. 
28ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28cc0 20 20 20 20 75 38 2c 75 38 2c 69 6e 74 2c 69 6e      u8,u8,int,in
28cd0 74 2a 2c 69 6e 74 2a 29 3b 0a 23 69 66 64 65 66  t*,int*);.#ifdef
28ce0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4e   SQLITE_ENABLE_N
28cf0 55 4c 4c 5f 54 52 49 4d 0a 20 20 76 6f 69 64 20  ULL_TRIM.  void 
28d00 73 71 6c 69 74 65 33 53 65 74 4d 61 6b 65 52 65  sqlite3SetMakeRe
28d10 63 6f 72 64 50 35 28 56 64 62 65 2a 2c 54 61 62  cordP5(Vdbe*,Tab
28d20 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  le*);.#else.# de
28d30 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65 74 4d  fine sqlite3SetM
28d40 61 6b 65 52 65 63 6f 72 64 50 35 28 41 2c 42 29  akeRecordP5(A,B)
28d50 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
28d60 69 74 65 33 43 6f 6d 70 6c 65 74 65 49 6e 73 65  ite3CompleteInse
28d70 72 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62  rtion(Parse*,Tab
28d80 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  le*,int,int,int,
28d90 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  int*,int,int,int
28da0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70  );.int sqlite3Op
28db0 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69 63 65  enTableAndIndice
28dc0 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  s(Parse*, Table*
28dd0 2c 20 69 6e 74 2c 20 75 38 2c 20 69 6e 74 2c 20  , int, u8, int, 
28de0 75 38 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29  u8*, int*, int*)
28df0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65  ;.void sqlite3Be
28e00 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f  ginWriteOperatio
28e10 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  n(Parse*, int, i
28e20 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
28e30 33 4d 75 6c 74 69 57 72 69 74 65 28 50 61 72 73  3MultiWrite(Pars
28e40 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
28e50 33 4d 61 79 41 62 6f 72 74 28 50 61 72 73 65 2a  3MayAbort(Parse*
28e60 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 48  );.void sqlite3H
28e70 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28 50 61  altConstraint(Pa
28e80 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  rse*, int, int, 
28e90 63 68 61 72 2a 2c 20 69 38 2c 20 75 38 29 3b 0a  char*, i8, u8);.
28ea0 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 69 71  void sqlite3Uniq
28eb0 75 65 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72  ueConstraint(Par
28ec0 73 65 2a 2c 20 69 6e 74 2c 20 49 6e 64 65 78 2a  se*, int, Index*
28ed0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
28ee0 6f 77 69 64 43 6f 6e 73 74 72 61 69 6e 74 28 50  owidConstraint(P
28ef0 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 61 62 6c  arse*, int, Tabl
28f00 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  e*);.Expr *sqlit
28f10 65 33 45 78 70 72 44 75 70 28 73 71 6c 69 74 65  e3ExprDup(sqlite
28f20 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 45  3*,Expr*,int);.E
28f30 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  xprList *sqlite3
28f40 45 78 70 72 4c 69 73 74 44 75 70 28 73 71 6c 69  ExprListDup(sqli
28f50 74 65 33 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69  te3*,ExprList*,i
28f60 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71  nt);.SrcList *sq
28f70 6c 69 74 65 33 53 72 63 4c 69 73 74 44 75 70 28  lite3SrcListDup(
28f80 73 71 6c 69 74 65 33 2a 2c 53 72 63 4c 69 73 74  sqlite3*,SrcList
28f90 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69 73 74 20 2a  *,int);.IdList *
28fa0 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44 75 70  sqlite3IdListDup
28fb0 28 73 71 6c 69 74 65 33 2a 2c 49 64 4c 69 73 74  (sqlite3*,IdList
28fc0 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69  *);.Select *sqli
28fd0 74 65 33 53 65 6c 65 63 74 44 75 70 28 73 71 6c  te3SelectDup(sql
28fe0 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e  ite3*,Select*,in
28ff0 74 29 3b 0a 23 69 66 20 53 45 4c 45 43 54 54 52  t);.#if SELECTTR
29000 41 43 45 5f 45 4e 41 42 4c 45 44 0a 76 6f 69 64  ACE_ENABLED.void
29010 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 53 65   sqlite3SelectSe
29020 74 4e 61 6d 65 28 53 65 6c 65 63 74 2a 2c 63 6f  tName(Select*,co
29030 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73  nst char*);.#els
29040 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
29050 65 33 53 65 6c 65 63 74 53 65 74 4e 61 6d 65 28  e3SelectSetName(
29060 41 2c 42 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64  A,B).#endif.void
29070 20 73 71 6c 69 74 65 33 49 6e 73 65 72 74 42 75   sqlite3InsertBu
29080 69 6c 74 69 6e 46 75 6e 63 73 28 46 75 6e 63 44  iltinFuncs(FuncD
29090 65 66 2a 2c 69 6e 74 29 3b 0a 46 75 6e 63 44 65  ef*,int);.FuncDe
290a0 66 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 46 75  f *sqlite3FindFu
290b0 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c  nction(sqlite3*,
290c0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 2c  const char*,int,
290d0 75 38 2c 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c  u8,u8);.void sql
290e0 69 74 65 33 52 65 67 69 73 74 65 72 42 75 69 6c  ite3RegisterBuil
290f0 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69  tinFunctions(voi
29100 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
29110 52 65 67 69 73 74 65 72 44 61 74 65 54 69 6d 65  RegisterDateTime
29120 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b  Functions(void);
29130 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
29140 69 73 74 65 72 50 65 72 43 6f 6e 6e 65 63 74 69  isterPerConnecti
29150 6f 6e 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f  onBuiltinFunctio
29160 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e  ns(sqlite3*);.in
29170 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43  t sqlite3SafetyC
29180 68 65 63 6b 4f 6b 28 73 71 6c 69 74 65 33 2a 29  heckOk(sqlite3*)
29190 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66  ;.int sqlite3Saf
291a0 65 74 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b  etyCheckSickOrOk
291b0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
291c0 20 73 71 6c 69 74 65 33 43 68 61 6e 67 65 43 6f   sqlite3ChangeCo
291d0 6f 6b 69 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  okie(Parse*, int
291e0 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64  );..#if !defined
291f0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45  (SQLITE_OMIT_VIE
29200 57 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  W) && !defined(S
29210 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
29220 45 52 29 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  ER).void sqlite3
29230 4d 61 74 65 72 69 61 6c 69 7a 65 56 69 65 77 28  MaterializeView(
29240 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
29250 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e  Expr*, int);.#en
29260 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
29270 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
29280 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42  .  void sqlite3B
29290 65 67 69 6e 54 72 69 67 67 65 72 28 50 61 72 73  eginTrigger(Pars
292a0 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  e*, Token*,Token
292b0 2a 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c 69 73 74  *,int,int,IdList
292c0 2a 2c 53 72 63 4c 69 73 74 2a 2c 0a 20 20 20 20  *,SrcList*,.    
292d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
292e0 20 20 20 20 20 20 20 45 78 70 72 2a 2c 69 6e 74         Expr*,int
292f0 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73  , int);.  void s
29300 71 6c 69 74 65 33 46 69 6e 69 73 68 54 72 69 67  qlite3FinishTrig
29310 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67  ger(Parse*, Trig
29320 67 65 72 53 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a  gerStep*, Token*
29330 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
29340 33 44 72 6f 70 54 72 69 67 67 65 72 28 50 61 72  3DropTrigger(Par
29350 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69  se*, SrcList*, i
29360 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
29370 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 50 74  te3DropTriggerPt
29380 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65  r(Parse*, Trigge
29390 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a  r*);.  Trigger *
293a0 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 73 45  sqlite3TriggersE
293b0 78 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61  xist(Parse *, Ta
293c0 62 6c 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c  ble*, int, ExprL
293d0 69 73 74 2a 2c 20 69 6e 74 20 2a 70 4d 61 73 6b  ist*, int *pMask
293e0 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71  );.  Trigger *sq
293f0 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69 73 74  lite3TriggerList
29400 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 20  (Parse *, Table 
29410 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
29420 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72  e3CodeRowTrigger
29430 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72  (Parse*, Trigger
29440 20 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73   *, int, ExprLis
29450 74 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 20 2a  t*, int, Table *
29460 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
29470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
29480 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20  t, int, int);.  
29490 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65  void sqlite3Code
294a0 52 6f 77 54 72 69 67 67 65 72 44 69 72 65 63 74  RowTriggerDirect
294b0 28 50 61 72 73 65 20 2a 2c 20 54 72 69 67 67 65  (Parse *, Trigge
294c0 72 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e  r *, Table *, in
294d0 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20  t, int, int);.  
294e0 76 6f 69 64 20 73 71 6c 69 74 65 56 69 65 77 54  void sqliteViewT
294f0 72 69 67 67 65 72 73 28 50 61 72 73 65 2a 2c 20  riggers(Parse*, 
29500 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Table*, Expr*, i
29510 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  nt, ExprList*);.
29520 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65    void sqlite3De
29530 6c 65 74 65 54 72 69 67 67 65 72 53 74 65 70 28  leteTriggerStep(
29540 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65  sqlite3*, Trigge
29550 72 53 74 65 70 2a 29 3b 0a 20 20 54 72 69 67 67  rStep*);.  Trigg
29560 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54  erStep *sqlite3T
29570 72 69 67 67 65 72 53 65 6c 65 63 74 53 74 65 70  riggerSelectStep
29580 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74  (sqlite3*,Select
29590 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65  *);.  TriggerSte
295a0 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  p *sqlite3Trigge
295b0 72 49 6e 73 65 72 74 53 74 65 70 28 73 71 6c 69  rInsertStep(sqli
295c0 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c  te3*,Token*, IdL
295d0 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ist*,.          
295e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
295f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 65                Se
29600 6c 65 63 74 2a 2c 75 38 29 3b 0a 20 20 54 72 69  lect*,u8);.  Tri
29610 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65  ggerStep *sqlite
29620 33 54 72 69 67 67 65 72 55 70 64 61 74 65 53 74  3TriggerUpdateSt
29630 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65  ep(sqlite3*,Toke
29640 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 45 78  n*,ExprList*, Ex
29650 70 72 2a 2c 20 75 38 29 3b 0a 20 20 54 72 69 67  pr*, u8);.  Trig
29660 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33  gerStep *sqlite3
29670 54 72 69 67 67 65 72 44 65 6c 65 74 65 53 74 65  TriggerDeleteSte
29680 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e  p(sqlite3*,Token
29690 2a 2c 20 45 78 70 72 2a 29 3b 0a 20 20 76 6f 69  *, Expr*);.  voi
296a0 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54  d sqlite3DeleteT
296b0 72 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c  rigger(sqlite3*,
296c0 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 76 6f   Trigger*);.  vo
296d0 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  id sqlite3Unlink
296e0 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72  AndDeleteTrigger
296f0 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f  (sqlite3*,int,co
29700 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 75 33  nst char*);.  u3
29710 32 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72  2 sqlite3Trigger
29720 43 6f 6c 6d 61 73 6b 28 50 61 72 73 65 2a 2c 54  Colmask(Parse*,T
29730 72 69 67 67 65 72 2a 2c 45 78 70 72 4c 69 73 74  rigger*,ExprList
29740 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61 62 6c 65 2a  *,int,int,Table*
29750 2c 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20  ,int);.# define 
29760 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c  sqlite3ParseTopl
29770 65 76 65 6c 28 70 29 20 28 28 70 29 2d 3e 70 54  evel(p) ((p)->pT
29780 6f 70 6c 65 76 65 6c 20 3f 20 28 70 29 2d 3e 70  oplevel ? (p)->p
29790 54 6f 70 6c 65 76 65 6c 20 3a 20 28 70 29 29 0a  Toplevel : (p)).
297a0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
297b0 49 73 54 6f 70 6c 65 76 65 6c 28 70 29 20 28 28  IsToplevel(p) ((
297c0 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 3d 3d 30  p)->pToplevel==0
297d0 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
297e0 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 73   sqlite3Triggers
297f0 45 78 69 73 74 28 42 2c 43 2c 44 2c 45 2c 46 29  Exist(B,C,D,E,F)
29800 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69   0.# define sqli
29810 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65 72  te3DeleteTrigger
29820 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73  (A,B).# define s
29830 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65  qlite3DropTrigge
29840 72 50 74 72 28 41 2c 42 29 0a 23 20 64 65 66 69  rPtr(A,B).# defi
29850 6e 65 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  ne sqlite3Unlink
29860 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72  AndDeleteTrigger
29870 28 41 2c 42 2c 43 29 0a 23 20 64 65 66 69 6e 65  (A,B,C).# define
29880 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54   sqlite3CodeRowT
29890 72 69 67 67 65 72 28 41 2c 42 2c 43 2c 44 2c 45  rigger(A,B,C,D,E
298a0 2c 46 2c 47 2c 48 2c 49 29 0a 23 20 64 65 66 69  ,F,G,H,I).# defi
298b0 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f  ne sqlite3CodeRo
298c0 77 54 72 69 67 67 65 72 44 69 72 65 63 74 28 41  wTriggerDirect(A
298d0 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a 23 20 64 65  ,B,C,D,E,F).# de
298e0 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67  fine sqlite3Trig
298f0 67 65 72 4c 69 73 74 28 58 2c 20 59 29 20 30 0a  gerList(X, Y) 0.
29900 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
29910 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29  ParseToplevel(p)
29920 20 70 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69   p.# define sqli
29930 74 65 33 49 73 54 6f 70 6c 65 76 65 6c 28 70 29  te3IsToplevel(p)
29940 20 31 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69   1.# define sqli
29950 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73  te3TriggerColmas
29960 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 29  k(A,B,C,D,E,F,G)
29970 20 30 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73   0.#endif..int s
29980 71 6c 69 74 65 33 4a 6f 69 6e 54 79 70 65 28 50  qlite3JoinType(P
29990 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  arse*, Token*, T
299a0 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  oken*, Token*);.
299b0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65 61  void sqlite3Crea
299c0 74 65 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72  teForeignKey(Par
299d0 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
299e0 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c 69 73 74  Token*, ExprList
299f0 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
29a00 6c 69 74 65 33 44 65 66 65 72 46 6f 72 65 69 67  lite3DeferForeig
29a10 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 69 6e 74  nKey(Parse*, int
29a20 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
29a30 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41  E_OMIT_AUTHORIZA
29a40 54 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69  TION.  void sqli
29a50 74 65 33 41 75 74 68 52 65 61 64 28 50 61 72 73  te3AuthRead(Pars
29a60 65 2a 2c 45 78 70 72 2a 2c 53 63 68 65 6d 61 2a  e*,Expr*,Schema*
29a70 2c 53 72 63 4c 69 73 74 2a 29 3b 0a 20 20 69 6e  ,SrcList*);.  in
29a80 74 20 73 71 6c 69 74 65 33 41 75 74 68 43 68 65  t sqlite3AuthChe
29a90 63 6b 28 50 61 72 73 65 2a 2c 69 6e 74 2c 20 63  ck(Parse*,int, c
29aa0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
29ab0 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
29ac0 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  har*);.  void sq
29ad0 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74  lite3AuthContext
29ae0 50 75 73 68 28 50 61 72 73 65 2a 2c 20 41 75 74  Push(Parse*, Aut
29af0 68 43 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e 73 74  hContext*, const
29b00 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20   char*);.  void 
29b10 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65  sqlite3AuthConte
29b20 78 74 50 6f 70 28 41 75 74 68 43 6f 6e 74 65 78  xtPop(AuthContex
29b30 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  t*);.  int sqlit
29b40 65 33 41 75 74 68 52 65 61 64 43 6f 6c 28 50 61  e3AuthReadCol(Pa
29b50 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
29b60 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
29b70 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 23 20  , int);.#else.# 
29b80 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
29b90 74 68 52 65 61 64 28 61 2c 62 2c 63 2c 64 29 0a  thRead(a,b,c,d).
29ba0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
29bb0 41 75 74 68 43 68 65 63 6b 28 61 2c 62 2c 63 2c  AuthCheck(a,b,c,
29bc0 64 2c 65 29 20 20 20 20 53 51 4c 49 54 45 5f 4f  d,e)    SQLITE_O
29bd0 4b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  K.# define sqlit
29be0 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73  e3AuthContextPus
29bf0 68 28 61 2c 62 2c 63 29 0a 23 20 64 65 66 69 6e  h(a,b,c).# defin
29c00 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e  e sqlite3AuthCon
29c10 74 65 78 74 50 6f 70 28 61 29 20 20 28 28 76 6f  textPop(a)  ((vo
29c20 69 64 29 28 61 29 29 0a 23 65 6e 64 69 66 0a 76  id)(a)).#endif.v
29c30 6f 69 64 20 73 71 6c 69 74 65 33 41 74 74 61 63  oid sqlite3Attac
29c40 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  h(Parse*, Expr*,
29c50 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a   Expr*, Expr*);.
29c60 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 74 61  void sqlite3Deta
29c70 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  ch(Parse*, Expr*
29c80 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46  );.void sqlite3F
29c90 69 78 49 6e 69 74 28 44 62 46 69 78 65 72 2a 2c  ixInit(DbFixer*,
29ca0 20 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 63 6f   Parse*, int, co
29cb0 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
29cc0 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
29cd0 6c 69 74 65 33 46 69 78 53 72 63 4c 69 73 74 28  lite3FixSrcList(
29ce0 44 62 46 69 78 65 72 2a 2c 20 53 72 63 4c 69 73  DbFixer*, SrcLis
29cf0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
29d00 46 69 78 53 65 6c 65 63 74 28 44 62 46 69 78 65  FixSelect(DbFixe
29d10 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  r*, Select*);.in
29d20 74 20 73 71 6c 69 74 65 33 46 69 78 45 78 70 72  t sqlite3FixExpr
29d30 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72 2a  (DbFixer*, Expr*
29d40 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
29d50 78 45 78 70 72 4c 69 73 74 28 44 62 46 69 78 65  xExprList(DbFixe
29d60 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  r*, ExprList*);.
29d70 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 54 72  int sqlite3FixTr
29d80 69 67 67 65 72 53 74 65 70 28 44 62 46 69 78 65  iggerStep(DbFixe
29d90 72 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a  r*, TriggerStep*
29da0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74  );.int sqlite3At
29db0 6f 46 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  oF(const char *z
29dc0 2c 20 64 6f 75 62 6c 65 2a 2c 20 69 6e 74 2c 20  , double*, int, 
29dd0 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  u8);.int sqlite3
29de0 47 65 74 49 6e 74 33 32 28 63 6f 6e 73 74 20 63  GetInt32(const c
29df0 68 61 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e  har *, int*);.in
29e00 74 20 73 71 6c 69 74 65 33 41 74 6f 69 28 63 6f  t sqlite3Atoi(co
29e10 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 69 66 6e  nst char*);.#ifn
29e20 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
29e30 55 54 46 31 36 0a 69 6e 74 20 73 71 6c 69 74 65  UTF16.int sqlite
29e40 33 55 74 66 31 36 42 79 74 65 4c 65 6e 28 63 6f  3Utf16ByteLen(co
29e50 6e 73 74 20 76 6f 69 64 20 2a 70 44 61 74 61 2c  nst void *pData,
29e60 20 69 6e 74 20 6e 43 68 61 72 29 3b 0a 23 65 6e   int nChar);.#en
29e70 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 55  dif.int sqlite3U
29e80 74 66 38 43 68 61 72 4c 65 6e 28 63 6f 6e 73 74  tf8CharLen(const
29e90 20 63 68 61 72 20 2a 70 44 61 74 61 2c 20 69 6e   char *pData, in
29ea0 74 20 6e 42 79 74 65 29 3b 0a 75 33 32 20 73 71  t nByte);.u32 sq
29eb0 6c 69 74 65 33 55 74 66 38 52 65 61 64 28 63 6f  lite3Utf8Read(co
29ec0 6e 73 74 20 75 38 2a 2a 29 3b 0a 4c 6f 67 45 73  nst u8**);.LogEs
29ed0 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 28  t sqlite3LogEst(
29ee0 75 36 34 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c  u64);.LogEst sql
29ef0 69 74 65 33 4c 6f 67 45 73 74 41 64 64 28 4c 6f  ite3LogEstAdd(Lo
29f00 67 45 73 74 2c 4c 6f 67 45 73 74 29 3b 0a 23 69  gEst,LogEst);.#i
29f10 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
29f20 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 4c  T_VIRTUALTABLE.L
29f30 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67  ogEst sqlite3Log
29f40 45 73 74 46 72 6f 6d 44 6f 75 62 6c 65 28 64 6f  EstFromDouble(do
29f50 75 62 6c 65 29 3b 0a 23 65 6e 64 69 66 0a 23 69  uble);.#endif.#i
29f60 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
29f70 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41  _ENABLE_STMT_SCA
29f80 4e 53 54 41 54 55 53 29 20 7c 7c 20 5c 0a 20 20  NSTATUS) || \.  
29f90 20 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45    defined(SQLITE
29fa0 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
29fb0 5f 53 54 41 54 34 29 20 7c 7c 20 5c 0a 20 20 20  _STAT4) || \.   
29fc0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
29fd0 45 58 50 4c 41 49 4e 5f 45 53 54 49 4d 41 54 45  EXPLAIN_ESTIMATE
29fe0 44 5f 52 4f 57 53 29 0a 75 36 34 20 73 71 6c 69  D_ROWS).u64 sqli
29ff0 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28 4c  te3LogEstToInt(L
2a000 6f 67 45 73 74 29 3b 0a 23 65 6e 64 69 66 0a 56  ogEst);.#endif.V
2a010 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 56 4c 69  List *sqlite3VLi
2a020 73 74 41 64 64 28 73 71 6c 69 74 65 33 2a 2c 56  stAdd(sqlite3*,V
2a030 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72  List*,const char
2a040 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 63 6f 6e 73  *,int,int);.cons
2a050 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 56  t char *sqlite3V
2a060 4c 69 73 74 4e 75 6d 54 6f 4e 61 6d 65 28 56 4c  ListNumToName(VL
2a070 69 73 74 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73  ist*,int);.int s
2a080 71 6c 69 74 65 33 56 4c 69 73 74 4e 61 6d 65 54  qlite3VListNameT
2a090 6f 4e 75 6d 28 56 4c 69 73 74 2a 2c 63 6f 6e 73  oNum(VList*,cons
2a0a0 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 0a 2f  t char*,int);../
2a0b0 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20 74 6f  *.** Routines to
2a0c0 20 72 65 61 64 20 61 6e 64 20 77 72 69 74 65 20   read and write 
2a0d0 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20  variable-length 
2a0e0 69 6e 74 65 67 65 72 73 2e 20 20 54 68 65 73 65  integers.  These
2a0f0 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 64   used to.** be d
2a100 65 66 69 6e 65 64 20 6c 6f 63 61 6c 6c 79 2c 20  efined locally, 
2a110 62 75 74 20 6e 6f 77 20 77 65 20 75 73 65 20 74  but now we use t
2a120 68 65 20 76 61 72 69 6e 74 20 72 6f 75 74 69 6e  he varint routin
2a130 65 73 20 69 6e 20 74 68 65 20 75 74 69 6c 2e 63  es in the util.c
2a140 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2f 0a 69 6e 74  .** file..*/.int
2a150 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e   sqlite3PutVarin
2a160 74 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a  t(unsigned char*
2a170 2c 20 75 36 34 29 3b 0a 75 38 20 73 71 6c 69 74  , u64);.u8 sqlit
2a180 65 33 47 65 74 56 61 72 69 6e 74 28 63 6f 6e 73  e3GetVarint(cons
2a190 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
2a1a0 2a 2c 20 75 36 34 20 2a 29 3b 0a 75 38 20 73 71  *, u64 *);.u8 sq
2a1b0 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32  lite3GetVarint32
2a1c0 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
2a1d0 63 68 61 72 20 2a 2c 20 75 33 32 20 2a 29 3b 0a  char *, u32 *);.
2a1e0 69 6e 74 20 73 71 6c 69 74 65 33 56 61 72 69 6e  int sqlite3Varin
2a1f0 74 4c 65 6e 28 75 36 34 20 76 29 3b 0a 0a 2f 2a  tLen(u64 v);../*
2a200 0a 2a 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e 20 63  .** The common c
2a210 61 73 65 20 69 73 20 66 6f 72 20 61 20 76 61 72  ase is for a var
2a220 69 6e 74 20 74 6f 20 62 65 20 61 20 73 69 6e 67  int to be a sing
2a230 6c 65 20 62 79 74 65 2e 20 20 54 68 65 79 20 66  le byte.  They f
2a240 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 6d 61 63 72  ollowing.** macr
2a250 6f 73 20 68 61 6e 64 6c 65 20 74 68 65 20 63 6f  os handle the co
2a260 6d 6d 6f 6e 20 63 61 73 65 20 77 69 74 68 6f 75  mmon case withou
2a270 74 20 61 20 70 72 6f 63 65 64 75 72 65 20 63 61  t a procedure ca
2a280 6c 6c 2c 20 62 75 74 20 74 68 65 6e 20 63 61 6c  ll, but then cal
2a290 6c 0a 2a 2a 20 74 68 65 20 70 72 6f 63 65 64 75  l.** the procedu
2a2a0 72 65 20 66 6f 72 20 6c 61 72 67 65 72 20 76 61  re for larger va
2a2b0 72 69 6e 74 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  rints..*/.#defin
2a2c0 65 20 67 65 74 56 61 72 69 6e 74 33 32 28 41 2c  e getVarint32(A,
2a2d0 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28 2a 28  B)  \.  (u8)((*(
2a2e0 41 29 3c 28 75 38 29 30 78 38 30 29 3f 28 28 42  A)<(u8)0x80)?((B
2a2f0 29 3d 28 75 33 32 29 2a 28 41 29 29 2c 31 3a 73  )=(u32)*(A)),1:s
2a300 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33  qlite3GetVarint3
2a310 32 28 28 41 29 2c 28 75 33 32 20 2a 29 26 28 42  2((A),(u32 *)&(B
2a320 29 29 29 0a 23 64 65 66 69 6e 65 20 70 75 74 56  ))).#define putV
2a330 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a  arint32(A,B)  \.
2a340 20 20 28 75 38 29 28 28 28 75 33 32 29 28 42 29    (u8)(((u32)(B)
2a350 3c 28 75 33 32 29 30 78 38 30 29 3f 28 2a 28 41  <(u32)0x80)?(*(A
2a360 29 3d 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  )=(unsigned char
2a370 29 28 42 29 29 2c 31 3a 5c 0a 20 20 73 71 6c 69  )(B)),1:\.  sqli
2a380 74 65 33 50 75 74 56 61 72 69 6e 74 28 28 41 29  te3PutVarint((A)
2a390 2c 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20 67  ,(B))).#define g
2a3a0 65 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69  etVarint    sqli
2a3b0 74 65 33 47 65 74 56 61 72 69 6e 74 0a 23 64 65  te3GetVarint.#de
2a3c0 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74 20 20  fine putVarint  
2a3d0 20 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69    sqlite3PutVari
2a3e0 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20  nt...const char 
2a3f0 2a 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66  *sqlite3IndexAff
2a400 69 6e 69 74 79 53 74 72 28 73 71 6c 69 74 65 33  inityStr(sqlite3
2a410 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64  *, Index*);.void
2a420 20 73 71 6c 69 74 65 33 54 61 62 6c 65 41 66 66   sqlite3TableAff
2a430 69 6e 69 74 79 28 56 64 62 65 2a 2c 20 54 61 62  inity(Vdbe*, Tab
2a440 6c 65 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20  le*, int);.char 
2a450 73 71 6c 69 74 65 33 43 6f 6d 70 61 72 65 41 66  sqlite3CompareAf
2a460 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78  finity(Expr *pEx
2a470 70 72 2c 20 63 68 61 72 20 61 66 66 32 29 3b 0a  pr, char aff2);.
2a480 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78  int sqlite3Index
2a490 41 66 66 69 6e 69 74 79 4f 6b 28 45 78 70 72 20  AffinityOk(Expr 
2a4a0 2a 70 45 78 70 72 2c 20 63 68 61 72 20 69 64 78  *pExpr, char idx
2a4b0 5f 61 66 66 69 6e 69 74 79 29 3b 0a 63 68 61 72  _affinity);.char
2a4c0 20 73 71 6c 69 74 65 33 54 61 62 6c 65 43 6f 6c   sqlite3TableCol
2a4d0 75 6d 6e 41 66 66 69 6e 69 74 79 28 54 61 62 6c  umnAffinity(Tabl
2a4e0 65 2a 2c 69 6e 74 29 3b 0a 63 68 61 72 20 73 71  e*,int);.char sq
2a4f0 6c 69 74 65 33 45 78 70 72 41 66 66 69 6e 69 74  lite3ExprAffinit
2a500 79 28 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a  y(Expr *pExpr);.
2a510 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69 36  int sqlite3Atoi6
2a520 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69  4(const char*, i
2a530 36 34 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69  64*, int, u8);.i
2a540 6e 74 20 73 71 6c 69 74 65 33 44 65 63 4f 72 48  nt sqlite3DecOrH
2a550 65 78 54 6f 49 36 34 28 63 6f 6e 73 74 20 63 68  exToI64(const ch
2a560 61 72 2a 2c 20 69 36 34 2a 29 3b 0a 76 6f 69 64  ar*, i64*);.void
2a570 20 73 71 6c 69 74 65 33 45 72 72 6f 72 57 69 74   sqlite3ErrorWit
2a580 68 4d 73 67 28 73 71 6c 69 74 65 33 2a 2c 20 69  hMsg(sqlite3*, i
2a590 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nt, const char*,
2a5a0 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ...);.void sqlit
2a5b0 65 33 45 72 72 6f 72 28 73 71 6c 69 74 65 33 2a  e3Error(sqlite3*
2a5c0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
2a5d0 74 65 33 53 79 73 74 65 6d 45 72 72 6f 72 28 73  te3SystemError(s
2a5e0 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f  qlite3*,int);.vo
2a5f0 69 64 20 2a 73 71 6c 69 74 65 33 48 65 78 54 6f  id *sqlite3HexTo
2a600 42 6c 6f 62 28 73 71 6c 69 74 65 33 2a 2c 20 63  Blob(sqlite3*, c
2a610 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e  onst char *z, in
2a620 74 20 6e 29 3b 0a 75 38 20 73 71 6c 69 74 65 33  t n);.u8 sqlite3
2a630 48 65 78 54 6f 49 6e 74 28 69 6e 74 20 68 29 3b  HexToInt(int h);
2a640 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 77 6f 50  .int sqlite3TwoP
2a650 61 72 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c  artName(Parse *,
2a660 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20   Token *, Token 
2a670 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a 23  *, Token **);..#
2a680 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
2a690 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d 45 29  E_NEED_ERR_NAME)
2a6a0 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
2a6b0 69 74 65 33 45 72 72 4e 61 6d 65 28 69 6e 74 29  ite3ErrName(int)
2a6c0 3b 0a 23 65 6e 64 69 66 0a 0a 63 6f 6e 73 74 20  ;.#endif..const 
2a6d0 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72  char *sqlite3Err
2a6e0 53 74 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71  Str(int);.int sq
2a6f0 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61 28  lite3ReadSchema(
2a700 50 61 72 73 65 20 2a 70 50 61 72 73 65 29 3b 0a  Parse *pParse);.
2a710 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33  CollSeq *sqlite3
2a720 46 69 6e 64 43 6f 6c 6c 53 65 71 28 73 71 6c 69  FindCollSeq(sqli
2a730 74 65 33 2a 2c 75 38 20 65 6e 63 2c 20 63 6f 6e  te3*,u8 enc, con
2a740 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 43  st char*,int);.C
2a750 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 4c  ollSeq *sqlite3L
2a760 6f 63 61 74 65 43 6f 6c 6c 53 65 71 28 50 61 72  ocateCollSeq(Par
2a770 73 65 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73  se *pParse, cons
2a780 74 20 63 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a 43  t char*zName);.C
2a790 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 45  ollSeq *sqlite3E
2a7a0 78 70 72 43 6f 6c 6c 53 65 71 28 50 61 72 73 65  xprCollSeq(Parse
2a7b0 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a   *pParse, Expr *
2a7c0 70 45 78 70 72 29 3b 0a 45 78 70 72 20 2a 73 71  pExpr);.Expr *sq
2a7d0 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c  lite3ExprAddColl
2a7e0 61 74 65 54 6f 6b 65 6e 28 50 61 72 73 65 20 2a  ateToken(Parse *
2a7f0 70 50 61 72 73 65 2c 20 45 78 70 72 2a 2c 20 63  pParse, Expr*, c
2a800 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74  onst Token*, int
2a810 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
2a820 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65 53 74  ExprAddCollateSt
2a830 72 69 6e 67 28 50 61 72 73 65 2a 2c 45 78 70 72  ring(Parse*,Expr
2a840 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
2a850 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
2a860 72 53 6b 69 70 43 6f 6c 6c 61 74 65 28 45 78 70  rSkipCollate(Exp
2a870 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
2a880 43 68 65 63 6b 43 6f 6c 6c 53 65 71 28 50 61 72  CheckCollSeq(Par
2a890 73 65 20 2a 2c 20 43 6f 6c 6c 53 65 71 20 2a 29  se *, CollSeq *)
2a8a0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65  ;.int sqlite3Che
2a8b0 63 6b 4f 62 6a 65 63 74 4e 61 6d 65 28 50 61 72  ckObjectName(Par
2a8c0 73 65 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  se *, const char
2a8d0 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
2a8e0 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73 28  3VdbeSetChanges(
2a8f0 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74 29 3b  sqlite3 *, int);
2a900 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 64 64 49  .int sqlite3AddI
2a910 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a  nt64(i64*,i64);.
2a920 69 6e 74 20 73 71 6c 69 74 65 33 53 75 62 49 6e  int sqlite3SubIn
2a930 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69  t64(i64*,i64);.i
2a940 6e 74 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74  nt sqlite3MulInt
2a950 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e  64(i64*,i64);.in
2a960 74 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74 33  t sqlite3AbsInt3
2a970 32 28 69 6e 74 29 3b 0a 23 69 66 64 65 66 20 53  2(int);.#ifdef S
2a980 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 38 5f 33  QLITE_ENABLE_8_3
2a990 5f 4e 41 4d 45 53 0a 76 6f 69 64 20 73 71 6c 69  _NAMES.void sqli
2a9a0 74 65 33 46 69 6c 65 53 75 66 66 69 78 33 28 63  te3FileSuffix3(c
2a9b0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72  onst char*, char
2a9c0 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
2a9d0 6e 65 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75  ne sqlite3FileSu
2a9e0 66 66 69 78 33 28 58 2c 59 29 0a 23 65 6e 64 69  ffix3(X,Y).#endi
2a9f0 66 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 42  f.u8 sqlite3GetB
2aa00 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74 20 63 68 61  oolean(const cha
2aa10 72 20 2a 7a 2c 75 38 29 3b 0a 0a 63 6f 6e 73 74  r *z,u8);..const
2aa20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 56 61   void *sqlite3Va
2aa30 6c 75 65 54 65 78 74 28 73 71 6c 69 74 65 33 5f  lueText(sqlite3_
2aa40 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 69 6e 74  value*, u8);.int
2aa50 20 73 71 6c 69 74 65 33 56 61 6c 75 65 42 79 74   sqlite3ValueByt
2aa60 65 73 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  es(sqlite3_value
2aa70 2a 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c  *, u8);.void sql
2aa80 69 74 65 33 56 61 6c 75 65 53 65 74 53 74 72 28  ite3ValueSetStr(
2aa90 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20  sqlite3_value*, 
2aaa0 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20  int, const void 
2aab0 2a 2c 75 38 2c 0a 20 20 20 20 20 20 20 20 20 20  *,u8,.          
2aac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 6f                vo
2aad0 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76  id(*)(void*));.v
2aae0 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
2aaf0 53 65 74 4e 75 6c 6c 28 73 71 6c 69 74 65 33 5f  SetNull(sqlite3_
2ab00 76 61 6c 75 65 2a 29 3b 0a 76 6f 69 64 20 73 71  value*);.void sq
2ab10 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65 28 73  lite3ValueFree(s
2ab20 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a  qlite3_value*);.
2ab30 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 73  sqlite3_value *s
2ab40 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77 28 73  qlite3ValueNew(s
2ab50 71 6c 69 74 65 33 20 2a 29 3b 0a 23 69 66 6e 64  qlite3 *);.#ifnd
2ab60 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
2ab70 54 46 31 36 0a 63 68 61 72 20 2a 73 71 6c 69 74  TF16.char *sqlit
2ab80 65 33 55 74 66 31 36 74 6f 38 28 73 71 6c 69 74  e3Utf16to8(sqlit
2ab90 65 33 20 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64  e3 *, const void
2aba0 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 23 65 6e  *, int, u8);.#en
2abb0 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  dif.int sqlite3V
2abc0 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 73 71 6c  alueFromExpr(sql
2abd0 69 74 65 33 20 2a 2c 20 45 78 70 72 20 2a 2c 20  ite3 *, Expr *, 
2abe0 75 38 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f  u8, u8, sqlite3_
2abf0 76 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69 64 20  value **);.void 
2ac00 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c  sqlite3ValueAppl
2ac10 79 41 66 66 69 6e 69 74 79 28 73 71 6c 69 74 65  yAffinity(sqlite
2ac20 33 5f 76 61 6c 75 65 20 2a 2c 20 75 38 2c 20 75  3_value *, u8, u
2ac30 38 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  8);.#ifndef SQLI
2ac40 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a  TE_AMALGAMATION.
2ac50 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73  extern const uns
2ac60 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74  igned char sqlit
2ac70 65 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74 79  e3OpcodeProperty
2ac80 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74  [];.extern const
2ac90 20 63 68 61 72 20 73 71 6c 69 74 65 33 53 74 72   char sqlite3Str
2aca0 42 49 4e 41 52 59 5b 5d 3b 0a 65 78 74 65 72 6e  BINARY[];.extern
2acb0 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
2acc0 63 68 61 72 20 73 71 6c 69 74 65 33 55 70 70 65  char sqlite3Uppe
2acd0 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74 65  rToLower[];.exte
2ace0 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  rn const unsigne
2acf0 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 43 74  d char sqlite3Ct
2ad00 79 70 65 4d 61 70 5b 5d 3b 0a 65 78 74 65 72 6e  ypeMap[];.extern
2ad10 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 73 71 6c   const Token sql
2ad20 69 74 65 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b  ite3IntTokens[];
2ad30 0a 65 78 74 65 72 6e 20 53 51 4c 49 54 45 5f 57  .extern SQLITE_W
2ad40 53 44 20 73 74 72 75 63 74 20 53 71 6c 69 74 65  SD struct Sqlite
2ad50 33 43 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43  3Config sqlite3C
2ad60 6f 6e 66 69 67 3b 0a 65 78 74 65 72 6e 20 46 75  onfig;.extern Fu
2ad70 6e 63 44 65 66 48 61 73 68 20 73 71 6c 69 74 65  ncDefHash sqlite
2ad80 33 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e  3BuiltinFunction
2ad90 73 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  s;.#ifndef SQLIT
2ada0 45 5f 4f 4d 49 54 5f 57 53 44 0a 65 78 74 65 72  E_OMIT_WSD.exter
2adb0 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 50 65 6e  n int sqlite3Pen
2adc0 64 69 6e 67 42 79 74 65 3b 0a 23 65 6e 64 69 66  dingByte;.#endif
2add0 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
2ade0 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65  ite3RootPageMove
2adf0 64 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  d(sqlite3*, int,
2ae00 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
2ae10 20 73 71 6c 69 74 65 33 52 65 69 6e 64 65 78 28   sqlite3Reindex(
2ae20 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Parse*, Token*, 
2ae30 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
2ae40 6c 69 74 65 33 41 6c 74 65 72 46 75 6e 63 74 69  lite3AlterFuncti
2ae50 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  ons(void);.void 
2ae60 73 71 6c 69 74 65 33 41 6c 74 65 72 52 65 6e 61  sqlite3AlterRena
2ae70 6d 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  meTable(Parse*, 
2ae80 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a  SrcList*, Token*
2ae90 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
2aea0 74 54 6f 6b 65 6e 28 63 6f 6e 73 74 20 75 6e 73  tToken(const uns
2aeb0 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 69 6e  igned char *, in
2aec0 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  t *);.void sqlit
2aed0 65 33 4e 65 73 74 65 64 50 61 72 73 65 28 50 61  e3NestedParse(Pa
2aee0 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
2aef0 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71  *, ...);.void sq
2af00 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61  lite3ExpirePrepa
2af10 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 73 71  redStatements(sq
2af20 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c  lite3*);.int sql
2af30 69 74 65 33 43 6f 64 65 53 75 62 73 65 6c 65 63  ite3CodeSubselec
2af40 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 20 2a  t(Parse*, Expr *
2af50 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
2af60 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 50  d sqlite3SelectP
2af70 72 65 70 28 50 61 72 73 65 2a 2c 20 53 65 6c 65  rep(Parse*, Sele
2af80 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74  ct*, NameContext
2af90 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2afa0 53 65 6c 65 63 74 57 72 6f 6e 67 4e 75 6d 54 65  SelectWrongNumTe
2afb0 72 6d 73 45 72 72 6f 72 28 50 61 72 73 65 20 2a  rmsError(Parse *
2afc0 70 50 61 72 73 65 2c 20 53 65 6c 65 63 74 20 2a  pParse, Select *
2afd0 70 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  p);.int sqlite3M
2afe0 61 74 63 68 53 70 61 6e 4e 61 6d 65 28 63 6f 6e  atchSpanName(con
2aff0 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
2b000 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
2b010 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
2b020 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73  ;.int sqlite3Res
2b030 6f 6c 76 65 45 78 70 72 4e 61 6d 65 73 28 4e 61  olveExprNames(Na
2b040 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72  meContext*, Expr
2b050 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
2b060 65 73 6f 6c 76 65 45 78 70 72 4c 69 73 74 4e 61  esolveExprListNa
2b070 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  mes(NameContext*
2b080 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 76 6f  , ExprList*);.vo
2b090 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76  id sqlite3Resolv
2b0a0 65 53 65 6c 65 63 74 4e 61 6d 65 73 28 50 61 72  eSelectNames(Par
2b0b0 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61  se*, Select*, Na
2b0c0 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69  meContext*);.voi
2b0d0 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  d sqlite3Resolve
2b0e0 53 65 6c 66 52 65 66 65 72 65 6e 63 65 28 50 61  SelfReference(Pa
2b0f0 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c  rse*,Table*,int,
2b100 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 29  Expr*,ExprList*)
2b110 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73  ;.int sqlite3Res
2b120 6f 6c 76 65 4f 72 64 65 72 47 72 6f 75 70 42 79  olveOrderGroupBy
2b130 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a  (Parse*, Select*
2b140 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e  , ExprList*, con
2b150 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
2b160 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66  sqlite3ColumnDef
2b170 61 75 6c 74 28 56 64 62 65 20 2a 2c 20 54 61 62  ault(Vdbe *, Tab
2b180 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  le *, int, int);
2b190 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74  .void sqlite3Alt
2b1a0 65 72 46 69 6e 69 73 68 41 64 64 43 6f 6c 75 6d  erFinishAddColum
2b1b0 6e 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e  n(Parse *, Token
2b1c0 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
2b1d0 33 41 6c 74 65 72 42 65 67 69 6e 41 64 64 43 6f  3AlterBeginAddCo
2b1e0 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 53 72  lumn(Parse *, Sr
2b1f0 63 4c 69 73 74 20 2a 29 3b 0a 43 6f 6c 6c 53 65  cList *);.CollSe
2b200 71 20 2a 73 71 6c 69 74 65 33 47 65 74 43 6f 6c  q *sqlite3GetCol
2b210 6c 53 65 71 28 50 61 72 73 65 2a 2c 20 75 38 2c  lSeq(Parse*, u8,
2b220 20 43 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e 73   CollSeq *, cons
2b230 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 73  t char*);.char s
2b240 71 6c 69 74 65 33 41 66 66 69 6e 69 74 79 54 79  qlite3AffinityTy
2b250 70 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  pe(const char*, 
2b260 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  u8*);.void sqlit
2b270 65 33 41 6e 61 6c 79 7a 65 28 50 61 72 73 65 2a  e3Analyze(Parse*
2b280 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
2b290 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
2b2a0 76 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65 72 28  vokeBusyHandler(
2b2b0 42 75 73 79 48 61 6e 64 6c 65 72 2a 29 3b 0a 69  BusyHandler*);.i
2b2c0 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62  nt sqlite3FindDb
2b2d0 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e  (sqlite3*, Token
2b2e0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
2b2f0 69 6e 64 44 62 4e 61 6d 65 28 73 71 6c 69 74 65  indDbName(sqlite
2b300 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  3 *, const char 
2b310 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  *);.int sqlite3A
2b320 6e 61 6c 79 73 69 73 4c 6f 61 64 28 73 71 6c 69  nalysisLoad(sqli
2b330 74 65 33 2a 2c 69 6e 74 20 69 44 42 29 3b 0a 76  te3*,int iDB);.v
2b340 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
2b350 65 49 6e 64 65 78 53 61 6d 70 6c 65 73 28 73 71  eIndexSamples(sq
2b360 6c 69 74 65 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a  lite3*,Index*);.
2b370 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66 61  void sqlite3Defa
2b380 75 6c 74 52 6f 77 45 73 74 28 49 6e 64 65 78 2a  ultRowEst(Index*
2b390 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
2b3a0 65 67 69 73 74 65 72 4c 69 6b 65 46 75 6e 63 74  egisterLikeFunct
2b3b0 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 2c 20 69  ions(sqlite3*, i
2b3c0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2b3d0 49 73 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 28 73  IsLikeFunction(s
2b3e0 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e  qlite3*,Expr*,in
2b3f0 74 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  t*,char*);.void 
2b400 73 71 6c 69 74 65 33 53 63 68 65 6d 61 43 6c 65  sqlite3SchemaCle
2b410 61 72 28 76 6f 69 64 20 2a 29 3b 0a 53 63 68 65  ar(void *);.Sche
2b420 6d 61 20 2a 73 71 6c 69 74 65 33 53 63 68 65 6d  ma *sqlite3Schem
2b430 61 47 65 74 28 73 71 6c 69 74 65 33 20 2a 2c 20  aGet(sqlite3 *, 
2b440 42 74 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73 71  Btree *);.int sq
2b450 6c 69 74 65 33 53 63 68 65 6d 61 54 6f 49 6e 64  lite3SchemaToInd
2b460 65 78 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  ex(sqlite3 *db, 
2b470 53 63 68 65 6d 61 20 2a 29 3b 0a 4b 65 79 49 6e  Schema *);.KeyIn
2b480 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e  fo *sqlite3KeyIn
2b490 66 6f 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33 2a  foAlloc(sqlite3*
2b4a0 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ,int,int);.void 
2b4b0 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 55 6e  sqlite3KeyInfoUn
2b4c0 72 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b  ref(KeyInfo*);.K
2b4d0 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b  eyInfo *sqlite3K
2b4e0 65 79 49 6e 66 6f 52 65 66 28 4b 65 79 49 6e 66  eyInfoRef(KeyInf
2b4f0 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71  o*);.KeyInfo *sq
2b500 6c 69 74 65 33 4b 65 79 49 6e 66 6f 4f 66 49 6e  lite3KeyInfoOfIn
2b510 64 65 78 28 50 61 72 73 65 2a 2c 20 49 6e 64 65  dex(Parse*, Inde
2b520 78 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  x*);.#ifdef SQLI
2b530 54 45 5f 44 45 42 55 47 0a 69 6e 74 20 73 71 6c  TE_DEBUG.int sql
2b540 69 74 65 33 4b 65 79 49 6e 66 6f 49 73 57 72 69  ite3KeyInfoIsWri
2b550 74 65 61 62 6c 65 28 4b 65 79 49 6e 66 6f 2a 29  teable(KeyInfo*)
2b560 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c  ;.#endif.int sql
2b570 69 74 65 33 43 72 65 61 74 65 46 75 6e 63 28 73  ite3CreateFunc(s
2b580 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20  qlite3 *, const 
2b590 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  char *, int, int
2b5a0 2c 20 76 6f 69 64 20 2a 2c 0a 20 20 76 6f 69 64  , void *,.  void
2b5b0 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e   (*)(sqlite3_con
2b5c0 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
2b5d0 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20 76  3_value **),.  v
2b5e0 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f  oid (*)(sqlite3_
2b5f0 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
2b600 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 20  ite3_value **), 
2b610 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33  void (*)(sqlite3
2b620 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 46 75  _context*),.  Fu
2b630 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44  ncDestructor *pD
2b640 65 73 74 72 75 63 74 6f 72 0a 29 3b 0a 76 6f 69  estructor.);.voi
2b650 64 20 73 71 6c 69 74 65 33 4f 6f 6d 46 61 75 6c  d sqlite3OomFaul
2b660 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69  t(sqlite3*);.voi
2b670 64 20 73 71 6c 69 74 65 33 4f 6f 6d 43 6c 65 61  d sqlite3OomClea
2b680 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74  r(sqlite3*);.int
2b690 20 73 71 6c 69 74 65 33 41 70 69 45 78 69 74 28   sqlite3ApiExit(
2b6a0 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e 74  sqlite3 *db, int
2b6b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70  );.int sqlite3Op
2b6c0 65 6e 54 65 6d 70 44 61 74 61 62 61 73 65 28 50  enTempDatabase(P
2b6d0 61 72 73 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73  arse *);..void s
2b6e0 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 49 6e  qlite3StrAccumIn
2b6f0 69 74 28 53 74 72 41 63 63 75 6d 2a 2c 20 73 71  it(StrAccum*, sq
2b700 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a 2c 20 69  lite3*, char*, i
2b710 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
2b720 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41 70  qlite3StrAccumAp
2b730 70 65 6e 64 28 53 74 72 41 63 63 75 6d 2a 2c 63  pend(StrAccum*,c
2b740 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b  onst char*,int);
2b750 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72  .void sqlite3Str
2b760 41 63 63 75 6d 41 70 70 65 6e 64 41 6c 6c 28 53  AccumAppendAll(S
2b770 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20 63  trAccum*,const c
2b780 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
2b790 74 65 33 41 70 70 65 6e 64 43 68 61 72 28 53 74  te3AppendChar(St
2b7a0 72 41 63 63 75 6d 2a 2c 69 6e 74 2c 63 68 61 72  rAccum*,int,char
2b7b0 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
2b7c0 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68 28 53  StrAccumFinish(S
2b7d0 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64 20  trAccum*);.void 
2b7e0 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 52  sqlite3StrAccumR
2b7f0 65 73 65 74 28 53 74 72 41 63 63 75 6d 2a 29 3b  eset(StrAccum*);
2b800 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c  .void sqlite3Sel
2b810 65 63 74 44 65 73 74 49 6e 69 74 28 53 65 6c 65  ectDestInit(Sele
2b820 63 74 44 65 73 74 2a 2c 69 6e 74 2c 69 6e 74 29  ctDest*,int,int)
2b830 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 43  ;.Expr *sqlite3C
2b840 72 65 61 74 65 43 6f 6c 75 6d 6e 45 78 70 72 28  reateColumnExpr(
2b850 73 71 6c 69 74 65 33 20 2a 2c 20 53 72 63 4c 69  sqlite3 *, SrcLi
2b860 73 74 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  st *, int, int);
2b870 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61  ..void sqlite3Ba
2b880 63 6b 75 70 52 65 73 74 61 72 74 28 73 71 6c 69  ckupRestart(sqli
2b890 74 65 33 5f 62 61 63 6b 75 70 20 2a 29 3b 0a 76  te3_backup *);.v
2b8a0 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75  oid sqlite3Backu
2b8b0 70 55 70 64 61 74 65 28 73 71 6c 69 74 65 33 5f  pUpdate(sqlite3_
2b8c0 62 61 63 6b 75 70 20 2a 2c 20 50 67 6e 6f 2c 20  backup *, Pgno, 
2b8d0 63 6f 6e 73 74 20 75 38 20 2a 29 3b 0a 0a 23 69  const u8 *);..#i
2b8e0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2b8f0 54 5f 53 55 42 51 55 45 52 59 0a 69 6e 74 20 73  T_SUBQUERY.int s
2b900 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b 49  qlite3ExprCheckI
2b910 4e 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29  N(Parse*, Expr*)
2b920 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
2b930 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63   sqlite3ExprChec
2b940 6b 49 4e 28 78 2c 79 29 20 53 51 4c 49 54 45 5f  kIN(x,y) SQLITE_
2b950 4f 4b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  OK.#endif..#ifde
2b960 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
2b970 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 76  STAT3_OR_STAT4.v
2b980 6f 69 64 20 73 71 6c 69 74 65 33 41 6e 61 6c 79  oid sqlite3Analy
2b990 7a 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64  zeFunctions(void
2b9a0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74  );.int sqlite3St
2b9b0 61 74 34 50 72 6f 62 65 53 65 74 56 61 6c 75 65  at4ProbeSetValue
2b9c0 28 0a 20 20 20 20 50 61 72 73 65 2a 2c 49 6e 64  (.    Parse*,Ind
2b9d0 65 78 2a 2c 55 6e 70 61 63 6b 65 64 52 65 63 6f  ex*,UnpackedReco
2b9e0 72 64 2a 2a 2c 45 78 70 72 2a 2c 69 6e 74 2c 69  rd**,Expr*,int,i
2b9f0 6e 74 2c 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71  nt,int*);.int sq
2ba00 6c 69 74 65 33 53 74 61 74 34 56 61 6c 75 65 46  lite3Stat4ValueF
2ba10 72 6f 6d 45 78 70 72 28 50 61 72 73 65 2a 2c 20  romExpr(Parse*, 
2ba20 45 78 70 72 2a 2c 20 75 38 2c 20 73 71 6c 69 74  Expr*, u8, sqlit
2ba30 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 76 6f 69  e3_value**);.voi
2ba40 64 20 73 71 6c 69 74 65 33 53 74 61 74 34 50 72  d sqlite3Stat4Pr
2ba50 6f 62 65 46 72 65 65 28 55 6e 70 61 63 6b 65 64  obeFree(Unpacked
2ba60 52 65 63 6f 72 64 2a 29 3b 0a 69 6e 74 20 73 71  Record*);.int sq
2ba70 6c 69 74 65 33 53 74 61 74 34 43 6f 6c 75 6d 6e  lite3Stat4Column
2ba80 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74  (sqlite3*, const
2ba90 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 69 6e 74   void*, int, int
2baa0 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  , sqlite3_value*
2bab0 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33  *);.char sqlite3
2bac0 49 6e 64 65 78 43 6f 6c 75 6d 6e 41 66 66 69 6e  IndexColumnAffin
2bad0 69 74 79 28 73 71 6c 69 74 65 33 2a 2c 20 49 6e  ity(sqlite3*, In
2bae0 64 65 78 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e 64  dex*, int);.#end
2baf0 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e  if../*.** The in
2bb00 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20 4c  terface to the L
2bb10 45 4d 4f 4e 2d 67 65 6e 65 72 61 74 65 64 20 70  EMON-generated p
2bb20 61 72 73 65 72 0a 2a 2f 0a 23 69 66 6e 64 65 66  arser.*/.#ifndef
2bb30 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41   SQLITE_AMALGAMA
2bb40 54 49 4f 4e 0a 20 20 76 6f 69 64 20 2a 73 71 6c  TION.  void *sql
2bb50 69 74 65 33 50 61 72 73 65 72 41 6c 6c 6f 63 28  ite3ParserAlloc(
2bb60 76 6f 69 64 2a 28 2a 29 28 75 36 34 29 29 3b 0a  void*(*)(u64));.
2bb70 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61    void sqlite3Pa
2bb80 72 73 65 72 46 72 65 65 28 76 6f 69 64 2a 2c 20  rserFree(void*, 
2bb90 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b  void(*)(void*));
2bba0 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
2bbb0 69 74 65 33 50 61 72 73 65 72 28 76 6f 69 64 2a  ite3Parser(void*
2bbc0 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2c 20 50 61  , int, Token, Pa
2bbd0 72 73 65 2a 29 3b 0a 23 69 66 64 65 66 20 59 59  rse*);.#ifdef YY
2bbe0 54 52 41 43 4b 4d 41 58 53 54 41 43 4b 44 45 50  TRACKMAXSTACKDEP
2bbf0 54 48 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  TH.  int sqlite3
2bc00 50 61 72 73 65 72 53 74 61 63 6b 50 65 61 6b 28  ParserStackPeak(
2bc10 76 6f 69 64 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  void*);.#endif..
2bc20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f  void sqlite3Auto
2bc30 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 73 28 73  LoadExtensions(s
2bc40 71 6c 69 74 65 33 2a 29 3b 0a 23 69 66 6e 64 65  qlite3*);.#ifnde
2bc50 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f  f SQLITE_OMIT_LO
2bc60 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 76  AD_EXTENSION.  v
2bc70 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65  oid sqlite3Close
2bc80 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74  Extensions(sqlit
2bc90 65 33 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  e3*);.#else.# de
2bca0 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6c 6f 73  fine sqlite3Clos
2bcb0 65 45 78 74 65 6e 73 69 6f 6e 73 28 58 29 0a 23  eExtensions(X).#
2bcc0 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
2bcd0 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45  QLITE_OMIT_SHARE
2bce0 44 5f 43 41 43 48 45 0a 20 20 76 6f 69 64 20 73  D_CACHE.  void s
2bcf0 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28  qlite3TableLock(
2bd00 50 61 72 73 65 20 2a 2c 20 69 6e 74 2c 20 69 6e  Parse *, int, in
2bd10 74 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63 68 61  t, u8, const cha
2bd20 72 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  r *);.#else.  #d
2bd30 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 61 62  efine sqlite3Tab
2bd40 6c 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a  leLock(v,w,x,y,z
2bd50 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ).#endif..#ifdef
2bd60 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 69   SQLITE_TEST.  i
2bd70 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38 54 6f  nt sqlite3Utf8To
2bd80 38 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a  8(unsigned char*
2bd90 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  );.#endif..#ifde
2bda0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
2bdb0 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65  RTUALTABLE.#  de
2bdc0 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
2bdd0 43 6c 65 61 72 28 59 29 0a 23 20 20 64 65 66 69  Clear(Y).#  defi
2bde0 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 53 79  ne sqlite3VtabSy
2bdf0 6e 63 28 58 2c 59 29 20 53 51 4c 49 54 45 5f 4f  nc(X,Y) SQLITE_O
2be00 4b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  K.#  define sqli
2be10 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28  te3VtabRollback(
2be20 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  X).#  define sql
2be30 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 58  ite3VtabCommit(X
2be40 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
2be50 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62  te3VtabInSync(db
2be60 29 20 30 0a 23 20 20 64 65 66 69 6e 65 20 73 71  ) 0.#  define sq
2be70 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 58 29  lite3VtabLock(X)
2be80 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
2be90 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 58 29 0a  e3VtabUnlock(X).
2bea0 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
2beb0 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28  3VtabUnlockList(
2bec0 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  X).#  define sql
2bed0 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
2bee0 74 28 58 2c 20 59 2c 20 5a 29 20 53 51 4c 49 54  t(X, Y, Z) SQLIT
2bef0 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73  E_OK.#  define s
2bf00 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65 28  qlite3GetVTable(
2bf10 58 2c 59 29 20 20 28 28 56 54 61 62 6c 65 2a 29  X,Y)  ((VTable*)
2bf20 30 29 0a 23 65 6c 73 65 0a 20 20 20 76 6f 69 64  0).#else.   void
2bf30 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61   sqlite3VtabClea
2bf40 72 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54  r(sqlite3 *db, T
2bf50 61 62 6c 65 2a 29 3b 0a 20 20 20 76 6f 69 64 20  able*);.   void 
2bf60 73 71 6c 69 74 65 33 56 74 61 62 44 69 73 63 6f  sqlite3VtabDisco
2bf70 6e 6e 65 63 74 28 73 71 6c 69 74 65 33 20 2a 64  nnect(sqlite3 *d
2bf80 62 2c 20 54 61 62 6c 65 20 2a 70 29 3b 0a 20 20  b, Table *p);.  
2bf90 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62   int sqlite3Vtab
2bfa0 53 79 6e 63 28 73 71 6c 69 74 65 33 20 2a 64 62  Sync(sqlite3 *db
2bfb0 2c 20 56 64 62 65 2a 29 3b 0a 20 20 20 69 6e 74  , Vdbe*);.   int
2bfc0 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c   sqlite3VtabRoll
2bfd0 62 61 63 6b 28 73 71 6c 69 74 65 33 20 2a 64 62  back(sqlite3 *db
2bfe0 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65  );.   int sqlite
2bff0 33 56 74 61 62 43 6f 6d 6d 69 74 28 73 71 6c 69  3VtabCommit(sqli
2c000 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 76 6f 69  te3 *db);.   voi
2c010 64 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63  d sqlite3VtabLoc
2c020 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20  k(VTable *);.   
2c030 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
2c040 55 6e 6c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29  Unlock(VTable *)
2c050 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ;.   void sqlite
2c060 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28  3VtabUnlockList(
2c070 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20 20 69 6e  sqlite3*);.   in
2c080 74 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76  t sqlite3VtabSav
2c090 65 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 20 2a  epoint(sqlite3 *
2c0a0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 20  , int, int);.   
2c0b0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
2c0c0 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 56 64 62  ImportErrmsg(Vdb
2c0d0 65 2a 2c 20 73 71 6c 69 74 65 33 5f 76 74 61 62  e*, sqlite3_vtab
2c0e0 2a 29 3b 0a 20 20 20 56 54 61 62 6c 65 20 2a 73  *);.   VTable *s
2c0f0 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65 28  qlite3GetVTable(
2c100 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a  sqlite3*, Table*
2c110 29 3b 0a 20 20 20 4d 6f 64 75 6c 65 20 2a 73 71  );.   Module *sq
2c120 6c 69 74 65 33 56 74 61 62 43 72 65 61 74 65 4d  lite3VtabCreateM
2c130 6f 64 75 6c 65 28 0a 20 20 20 20 20 73 71 6c 69  odule(.     sqli
2c140 74 65 33 2a 2c 0a 20 20 20 20 20 63 6f 6e 73 74  te3*,.     const
2c150 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 63 6f 6e   char*,.     con
2c160 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  st sqlite3_modul
2c170 65 2a 2c 0a 20 20 20 20 20 76 6f 69 64 2a 2c 0a  e*,.     void*,.
2c180 20 20 20 20 20 76 6f 69 64 28 2a 29 28 76 6f 69       void(*)(voi
2c190 64 2a 29 0a 20 20 20 29 3b 0a 23 20 20 64 65 66  d*).   );.#  def
2c1a0 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 49  ine sqlite3VtabI
2c1b0 6e 53 79 6e 63 28 64 62 29 20 28 28 64 62 29 2d  nSync(db) ((db)-
2c1c0 3e 6e 56 54 72 61 6e 73 3e 30 20 26 26 20 28 64  >nVTrans>0 && (d
2c1d0 62 29 2d 3e 61 56 54 72 61 6e 73 3d 3d 30 29 0a  b)->aVTrans==0).
2c1e0 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74  #endif.int sqlit
2c1f0 65 33 56 74 61 62 45 70 6f 6e 79 6d 6f 75 73 54  e3VtabEponymousT
2c200 61 62 6c 65 49 6e 69 74 28 50 61 72 73 65 2a 2c  ableInit(Parse*,
2c210 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69 64 20 73  Module*);.void s
2c220 71 6c 69 74 65 33 56 74 61 62 45 70 6f 6e 79 6d  qlite3VtabEponym
2c230 6f 75 73 54 61 62 6c 65 43 6c 65 61 72 28 73 71  ousTableClear(sq
2c240 6c 69 74 65 33 2a 2c 4d 6f 64 75 6c 65 2a 29 3b  lite3*,Module*);
2c250 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
2c260 62 4d 61 6b 65 57 72 69 74 61 62 6c 65 28 50 61  bMakeWritable(Pa
2c270 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f  rse*,Table*);.vo
2c280 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 42 65  id sqlite3VtabBe
2c290 67 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a 2c  ginParse(Parse*,
2c2a0 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c   Token*, Token*,
2c2b0 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76   Token*, int);.v
2c2c0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 46  oid sqlite3VtabF
2c2d0 69 6e 69 73 68 50 61 72 73 65 28 50 61 72 73 65  inishParse(Parse
2c2e0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64  *, Token*);.void
2c2f0 20 73 71 6c 69 74 65 33 56 74 61 62 41 72 67 49   sqlite3VtabArgI
2c300 6e 69 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  nit(Parse*);.voi
2c310 64 20 73 71 6c 69 74 65 33 56 74 61 62 41 72 67  d sqlite3VtabArg
2c320 45 78 74 65 6e 64 28 50 61 72 73 65 2a 2c 20 54  Extend(Parse*, T
2c330 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
2c340 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74  te3VtabCallCreat
2c350 65 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  e(sqlite3*, int,
2c360 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63   const char *, c
2c370 68 61 72 20 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c  har **);.int sql
2c380 69 74 65 33 56 74 61 62 43 61 6c 6c 43 6f 6e 6e  ite3VtabCallConn
2c390 65 63 74 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ect(Parse*, Tabl
2c3a0 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  e*);.int sqlite3
2c3b0 56 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28  VtabCallDestroy(
2c3c0 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63  sqlite3*, int, c
2c3d0 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69 6e  onst char *);.in
2c3e0 74 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67  t sqlite3VtabBeg
2c3f0 69 6e 28 73 71 6c 69 74 65 33 20 2a 2c 20 56 54  in(sqlite3 *, VT
2c400 61 62 6c 65 20 2a 29 3b 0a 46 75 6e 63 44 65 66  able *);.FuncDef
2c410 20 2a 73 71 6c 69 74 65 33 56 74 61 62 4f 76 65   *sqlite3VtabOve
2c420 72 6c 6f 61 64 46 75 6e 63 74 69 6f 6e 28 73 71  rloadFunction(sq
2c430 6c 69 74 65 33 20 2a 2c 46 75 6e 63 44 65 66 2a  lite3 *,FuncDef*
2c440 2c 20 69 6e 74 20 6e 41 72 67 2c 20 45 78 70 72  , int nArg, Expr
2c450 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2c460 49 6e 76 61 6c 69 64 46 75 6e 63 74 69 6f 6e 28  InvalidFunction(
2c470 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
2c480 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
2c490 75 65 2a 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 69  ue**);.sqlite3_i
2c4a0 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74 6d 74  nt64 sqlite3Stmt
2c4b0 43 75 72 72 65 6e 74 54 69 6d 65 28 73 71 6c 69  CurrentTime(sqli
2c4c0 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 0a 69  te3_context*);.i
2c4d0 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 50 61  nt sqlite3VdbePa
2c4e0 72 61 6d 65 74 65 72 49 6e 64 65 78 28 56 64 62  rameterIndex(Vdb
2c4f0 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e*, const char*,
2c500 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
2c510 65 33 54 72 61 6e 73 66 65 72 42 69 6e 64 69 6e  e3TransferBindin
2c520 67 73 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  gs(sqlite3_stmt 
2c530 2a 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 20  *, sqlite3_stmt 
2c540 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2c550 50 61 72 73 65 72 52 65 73 65 74 28 50 61 72 73  ParserReset(Pars
2c560 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  e*);.int sqlite3
2c570 52 65 70 72 65 70 61 72 65 28 56 64 62 65 2a 29  Reprepare(Vdbe*)
2c580 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
2c590 70 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e 67 74  prListCheckLengt
2c5a0 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  h(Parse*, ExprLi
2c5b0 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  st*, const char*
2c5c0 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
2c5d0 74 65 33 42 69 6e 61 72 79 43 6f 6d 70 61 72 65  te3BinaryCompare
2c5e0 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c  CollSeq(Parse *,
2c5f0 20 45 78 70 72 20 2a 2c 20 45 78 70 72 20 2a 29   Expr *, Expr *)
2c600 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 65 6d  ;.int sqlite3Tem
2c610 70 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73 74 20  pInMemory(const 
2c620 73 71 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e 73 74  sqlite3*);.const
2c630 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4a 6f   char *sqlite3Jo
2c640 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e  urnalModename(in
2c650 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  t);.#ifndef SQLI
2c660 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e  TE_OMIT_WAL.  in
2c670 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f  t sqlite3Checkpo
2c680 69 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  int(sqlite3*, in
2c690 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e  t, int, int*, in
2c6a0 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  t*);.  int sqlit
2c6b0 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b  e3WalDefaultHook
2c6c0 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
2c6d0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29  const char*,int)
2c6e0 3b 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  ;.#endif.#ifndef
2c6f0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 54 45   SQLITE_OMIT_CTE
2c700 0a 20 20 57 69 74 68 20 2a 73 71 6c 69 74 65 33  .  With *sqlite3
2c710 57 69 74 68 41 64 64 28 50 61 72 73 65 2a 2c 57  WithAdd(Parse*,W
2c720 69 74 68 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72  ith*,Token*,Expr
2c730 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a  List*,Select*);.
2c740 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69    void sqlite3Wi
2c750 74 68 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  thDelete(sqlite3
2c760 2a 2c 57 69 74 68 2a 29 3b 0a 20 20 76 6f 69 64  *,With*);.  void
2c770 20 73 71 6c 69 74 65 33 57 69 74 68 50 75 73 68   sqlite3WithPush
2c780 28 50 61 72 73 65 2a 2c 20 57 69 74 68 2a 2c 20  (Parse*, With*, 
2c790 75 38 29 3b 0a 23 65 6c 73 65 0a 23 64 65 66 69  u8);.#else.#defi
2c7a0 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68 50 75  ne sqlite3WithPu
2c7b0 73 68 28 78 2c 79 2c 7a 29 0a 23 64 65 66 69 6e  sh(x,y,z).#defin
2c7c0 65 20 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c  e sqlite3WithDel
2c7d0 65 74 65 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a  ete(x,y).#endif.
2c7e0 0a 2f 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e 73  ./* Declarations
2c7f0 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 69   for functions i
2c800 6e 20 66 6b 65 79 2e 63 2e 20 41 6c 6c 20 6f 66  n fkey.c. All of
2c810 20 74 68 65 73 65 20 61 72 65 20 72 65 70 6c 61   these are repla
2c820 63 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d 6f 70 20  ced by.** no-op 
2c830 6d 61 63 72 6f 73 20 69 66 20 4f 4d 49 54 5f 46  macros if OMIT_F
2c840 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 64 65  OREIGN_KEY is de
2c850 66 69 6e 65 64 2e 20 49 6e 20 74 68 69 73 20 63  fined. In this c
2c860 61 73 65 20 6e 6f 20 66 6f 72 65 69 67 6e 0a 2a  ase no foreign.*
2c870 2a 20 6b 65 79 20 66 75 6e 63 74 69 6f 6e 61 6c  * key functional
2c880 69 74 79 20 69 73 20 61 76 61 69 6c 61 62 6c 65  ity is available
2c890 2e 20 49 66 20 4f 4d 49 54 5f 54 52 49 47 47 45  . If OMIT_TRIGGE
2c8a0 52 20 69 73 20 64 65 66 69 6e 65 64 20 62 75 74  R is defined but
2c8b0 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  .** OMIT_FOREIGN
2c8c0 5f 4b 45 59 20 69 73 20 6e 6f 74 2c 20 6f 6e 6c  _KEY is not, onl
2c8d0 79 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 66 75  y some of the fu
2c8e0 6e 63 74 69 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f  nctions are no-o
2c8f0 70 65 64 2e 20 49 6e 0a 2a 2a 20 74 68 69 73 20  ped. In.** this 
2c900 63 61 73 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  case foreign key
2c910 73 20 61 72 65 20 70 61 72 73 65 64 2c 20 62 75  s are parsed, bu
2c920 74 20 6e 6f 20 6f 74 68 65 72 20 66 75 6e 63 74  t no other funct
2c930 69 6f 6e 61 6c 69 74 79 20 69 73 0a 2a 2a 20 70  ionality is.** p
2c940 72 6f 76 69 64 65 64 20 28 65 6e 66 6f 72 63 65  rovided (enforce
2c950 6d 65 6e 74 20 6f 66 20 46 4b 20 63 6f 6e 73 74  ment of FK const
2c960 72 61 69 6e 74 73 20 72 65 71 75 69 72 65 73 20  raints requires 
2c970 74 68 65 20 74 72 69 67 67 65 72 73 20 73 75 62  the triggers sub
2c980 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a 23 69 66  -system)..*/.#if
2c990 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
2c9a0 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
2c9b0 59 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  Y) && !defined(S
2c9c0 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
2c9d0 45 52 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ER).  void sqlit
2c9e0 65 33 46 6b 43 68 65 63 6b 28 50 61 72 73 65 2a  e3FkCheck(Parse*
2c9f0 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69  , Table*, int, i
2ca00 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a  nt, int*, int);.
2ca10 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b    void sqlite3Fk
2ca20 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a  DropTable(Parse*
2ca30 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 61 62  , SrcList *, Tab
2ca40 6c 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  le*);.  void sql
2ca50 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 50 61  ite3FkActions(Pa
2ca60 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78  rse*, Table*, Ex
2ca70 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e  prList*, int, in
2ca80 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74 20  t*, int);.  int 
2ca90 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65  sqlite3FkRequire
2caa0 64 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  d(Parse*, Table*
2cab0 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20  , int*, int);.  
2cac0 75 33 32 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64  u32 sqlite3FkOld
2cad0 6d 61 73 6b 28 50 61 72 73 65 2a 2c 20 54 61 62  mask(Parse*, Tab
2cae0 6c 65 2a 29 3b 0a 20 20 46 4b 65 79 20 2a 73 71  le*);.  FKey *sq
2caf0 6c 69 74 65 33 46 6b 52 65 66 65 72 65 6e 63 65  lite3FkReference
2cb00 73 28 54 61 62 6c 65 20 2a 29 3b 0a 23 65 6c 73  s(Table *);.#els
2cb10 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
2cb20 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 61 2c 62  te3FkActions(a,b
2cb30 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65 66  ,c,d,e,f).  #def
2cb40 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 43 68 65  ine sqlite3FkChe
2cb50 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a  ck(a,b,c,d,e,f).
2cb60 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
2cb70 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 61 2c 62  3FkDropTable(a,b
2cb80 2c 63 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,c).  #define sq
2cb90 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 61  lite3FkOldmask(a
2cba0 2c 62 29 20 20 20 20 20 20 20 20 20 30 0a 20 20  ,b)         0.  
2cbb0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
2cbc0 6b 52 65 71 75 69 72 65 64 28 61 2c 62 2c 63 2c  kRequired(a,b,c,
2cbd0 64 29 20 20 20 20 30 0a 20 20 23 64 65 66 69 6e  d)    0.  #defin
2cbe0 65 20 73 71 6c 69 74 65 33 46 6b 52 65 66 65 72  e sqlite3FkRefer
2cbf0 65 6e 63 65 73 28 61 29 20 20 20 20 20 20 20 20  ences(a)        
2cc00 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  0.#endif.#ifndef
2cc10 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52   SQLITE_OMIT_FOR
2cc20 45 49 47 4e 5f 4b 45 59 0a 20 20 76 6f 69 64 20  EIGN_KEY.  void 
2cc30 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28  sqlite3FkDelete(
2cc40 73 71 6c 69 74 65 33 20 2a 2c 20 54 61 62 6c 65  sqlite3 *, Table
2cc50 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  *);.  int sqlite
2cc60 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 50  3FkLocateIndex(P
2cc70 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 46 4b 65  arse*,Table*,FKe
2cc80 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69 6e 74 2a 2a  y*,Index**,int**
2cc90 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
2cca0 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65  ne sqlite3FkDele
2ccb0 74 65 28 61 2c 62 29 0a 20 20 23 64 65 66 69 6e  te(a,b).  #defin
2ccc0 65 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74  e sqlite3FkLocat
2ccd0 65 49 6e 64 65 78 28 61 2c 62 2c 63 2c 64 2c 65  eIndex(a,b,c,d,e
2cce0 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a  ).#endif.../*.**
2ccf0 20 41 76 61 69 6c 61 62 6c 65 20 66 61 75 6c 74   Available fault
2cd00 20 69 6e 6a 65 63 74 6f 72 73 2e 20 20 53 68 6f   injectors.  Sho
2cd10 75 6c 64 20 62 65 20 6e 75 6d 62 65 72 65 64 20  uld be numbered 
2cd20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 30  beginning with 0
2cd30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
2cd40 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f  ITE_FAULTINJECTO
2cd50 52 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 30 0a 23  R_MALLOC     0.#
2cd60 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 41  define SQLITE_FA
2cd70 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 43 4f 55 4e  ULTINJECTOR_COUN
2cd80 54 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20  T      1../*.** 
2cd90 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f  The interface to
2cda0 20 74 68 65 20 63 6f 64 65 20 69 6e 20 66 61 75   the code in fau
2cdb0 6c 74 2e 63 20 75 73 65 64 20 66 6f 72 20 69 64  lt.c used for id
2cdc0 65 6e 74 69 66 79 69 6e 67 20 22 62 65 6e 69 67  entifying "benig
2cdd0 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20 66 61 69  n".** malloc fai
2cde0 6c 75 72 65 73 2e 20 54 68 69 73 20 69 73 20 6f  lures. This is o
2cdf0 6e 6c 79 20 70 72 65 73 65 6e 74 20 69 66 20 53  nly present if S
2ce00 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45  QLITE_UNTESTABLE
2ce10 0a 2a 2a 20 69 73 20 6e 6f 74 20 64 65 66 69 6e  .** is not defin
2ce20 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ed..*/.#ifndef S
2ce30 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45  QLITE_UNTESTABLE
2ce40 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42  .  void sqlite3B
2ce50 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  eginBenignMalloc
2ce60 28 76 6f 69 64 29 3b 0a 20 20 76 6f 69 64 20 73  (void);.  void s
2ce70 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d  qlite3EndBenignM
2ce80 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 23 65 6c  alloc(void);.#el
2ce90 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
2cea0 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d  ite3BeginBenignM
2ceb0 61 6c 6c 6f 63 28 29 0a 20 20 23 64 65 66 69 6e  alloc().  #defin
2cec0 65 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69  e sqlite3EndBeni
2ced0 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65 6e 64 69  gnMalloc().#endi
2cee0 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  f../*.** Allowed
2cef0 20 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66   return values f
2cf00 72 6f 6d 20 73 71 6c 69 74 65 33 46 69 6e 64 49  rom sqlite3FindI
2cf10 6e 49 6e 64 65 78 28 29 0a 2a 2f 0a 23 64 65 66  nIndex().*/.#def
2cf20 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 52 4f 57  ine IN_INDEX_ROW
2cf30 49 44 20 20 20 20 20 20 20 20 31 20 20 20 2f 2a  ID        1   /*
2cf40 20 53 65 61 72 63 68 20 74 68 65 20 72 6f 77 69   Search the rowi
2cf50 64 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 2a  d of the table *
2cf60 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
2cf70 45 58 5f 45 50 48 20 20 20 20 20 20 20 20 20 20  EX_EPH          
2cf80 32 20 20 20 2f 2a 20 53 65 61 72 63 68 20 61 6e  2   /* Search an
2cf90 20 65 70 68 65 6d 65 72 61 6c 20 62 2d 74 72 65   ephemeral b-tre
2cfa0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  e */.#define IN_
2cfb0 49 4e 44 45 58 5f 49 4e 44 45 58 5f 41 53 43 20  INDEX_INDEX_ASC 
2cfc0 20 20 20 33 20 20 20 2f 2a 20 45 78 69 73 74 69     3   /* Existi
2cfd0 6e 67 20 69 6e 64 65 78 20 41 53 43 45 4e 44 49  ng index ASCENDI
2cfe0 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  NG */.#define IN
2cff0 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 44 45 53  _INDEX_INDEX_DES
2d000 43 20 20 20 34 20 20 20 2f 2a 20 45 78 69 73 74  C   4   /* Exist
2d010 69 6e 67 20 69 6e 64 65 78 20 44 45 53 43 45 4e  ing index DESCEN
2d020 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65 20  DING */.#define 
2d030 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 20 20  IN_INDEX_NOOP   
2d040 20 20 20 20 20 20 35 20 20 20 2f 2a 20 4e 6f 20        5   /* No 
2d050 74 61 62 6c 65 20 61 76 61 69 6c 61 62 6c 65 2e  table available.
2d060 20 55 73 65 20 63 6f 6d 70 61 72 69 73 6f 6e 73   Use comparisons
2d070 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65   */./*.** Allowe
2d080 64 20 66 6c 61 67 73 20 66 6f 72 20 74 68 65 20  d flags for the 
2d090 33 72 64 20 70 61 72 61 6d 65 74 65 72 20 74 6f  3rd parameter to
2d0a0 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e   sqlite3FindInIn
2d0b0 64 65 78 28 29 2e 0a 2a 2f 0a 23 64 65 66 69 6e  dex()..*/.#defin
2d0c0 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 5f  e IN_INDEX_NOOP_
2d0d0 4f 4b 20 20 20 20 20 30 78 30 30 30 31 20 20 2f  OK     0x0001  /
2d0e0 2a 20 4f 4b 20 74 6f 20 72 65 74 75 72 6e 20 49  * OK to return I
2d0f0 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 2a 2f 0a  N_INDEX_NOOP */.
2d100 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
2d110 5f 4d 45 4d 42 45 52 53 48 49 50 20 20 30 78 30  _MEMBERSHIP  0x0
2d120 30 30 32 20 20 2f 2a 20 49 4e 20 6f 70 65 72 61  002  /* IN opera
2d130 74 6f 72 20 75 73 65 64 20 66 6f 72 20 6d 65 6d  tor used for mem
2d140 62 65 72 73 68 69 70 20 74 65 73 74 20 2a 2f 0a  bership test */.
2d150 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
2d160 5f 4c 4f 4f 50 20 20 20 20 20 20 20 20 30 78 30  _LOOP        0x0
2d170 30 30 34 20 20 2f 2a 20 49 4e 20 6f 70 65 72 61  004  /* IN opera
2d180 74 6f 72 20 75 73 65 64 20 61 73 20 61 20 6c 6f  tor used as a lo
2d190 6f 70 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  op */.int sqlite
2d1a0 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 50 61 72  3FindInIndex(Par
2d1b0 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75 33  se *, Expr *, u3
2d1c0 32 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a  2, int*, int*);.
2d1d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72  .int sqlite3Jour
2d1e0 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f  nalOpen(sqlite3_
2d1f0 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  vfs *, const cha
2d200 72 20 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69 6c  r *, sqlite3_fil
2d210 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  e *, int, int);.
2d220 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e  int sqlite3Journ
2d230 61 6c 53 69 7a 65 28 73 71 6c 69 74 65 33 5f 76  alSize(sqlite3_v
2d240 66 73 20 2a 29 3b 0a 23 69 66 64 65 66 20 53 51  fs *);.#ifdef SQ
2d250 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d  LITE_ENABLE_ATOM
2d260 49 43 5f 57 52 49 54 45 0a 20 20 69 6e 74 20 73  IC_WRITE.  int s
2d270 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43 72 65  qlite3JournalCre
2d280 61 74 65 28 73 71 6c 69 74 65 33 5f 66 69 6c 65  ate(sqlite3_file
2d290 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74   *);.#endif..int
2d2a0 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 49   sqlite3JournalI
2d2b0 73 49 6e 4d 65 6d 6f 72 79 28 73 71 6c 69 74 65  sInMemory(sqlite
2d2c0 33 5f 66 69 6c 65 20 2a 70 29 3b 0a 76 6f 69 64  3_file *p);.void
2d2d0 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72 6e   sqlite3MemJourn
2d2e0 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 66  alOpen(sqlite3_f
2d2f0 69 6c 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71  ile *);..void sq
2d300 6c 69 74 65 33 45 78 70 72 53 65 74 48 65 69 67  lite3ExprSetHeig
2d310 68 74 41 6e 64 46 6c 61 67 73 28 50 61 72 73 65  htAndFlags(Parse
2d320 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20 2a   *pParse, Expr *
2d330 70 29 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  p);.#if SQLITE_M
2d340 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30 0a  AX_EXPR_DEPTH>0.
2d350 20 20 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c    int sqlite3Sel
2d360 65 63 74 45 78 70 72 48 65 69 67 68 74 28 53 65  ectExprHeight(Se
2d370 6c 65 63 74 20 2a 29 3b 0a 20 20 69 6e 74 20 73  lect *);.  int s
2d380 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b 48  qlite3ExprCheckH
2d390 65 69 67 68 74 28 50 61 72 73 65 2a 2c 20 69 6e  eight(Parse*, in
2d3a0 74 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  t);.#else.  #def
2d3b0 69 6e 65 20 73 71 6c 69 74 65 33 53 65 6c 65 63  ine sqlite3Selec
2d3c0 74 45 78 70 72 48 65 69 67 68 74 28 78 29 20 30  tExprHeight(x) 0
2d3d0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
2d3e0 65 33 45 78 70 72 43 68 65 63 6b 48 65 69 67 68  e3ExprCheckHeigh
2d3f0 74 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 75  t(x,y).#endif..u
2d400 33 32 20 73 71 6c 69 74 65 33 47 65 74 34 62 79  32 sqlite3Get4by
2d410 74 65 28 63 6f 6e 73 74 20 75 38 2a 29 3b 0a 76  te(const u8*);.v
2d420 6f 69 64 20 73 71 6c 69 74 65 33 50 75 74 34 62  oid sqlite3Put4b
2d430 79 74 65 28 75 38 2a 2c 20 75 33 32 29 3b 0a 0a  yte(u8*, u32);..
2d440 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
2d450 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49  ABLE_UNLOCK_NOTI
2d460 46 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  FY.  void sqlite
2d470 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b  3ConnectionBlock
2d480 65 64 28 73 71 6c 69 74 65 33 20 2a 2c 20 73 71  ed(sqlite3 *, sq
2d490 6c 69 74 65 33 20 2a 29 3b 0a 20 20 76 6f 69 64  lite3 *);.  void
2d4a0 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
2d4b0 6f 6e 55 6e 6c 6f 63 6b 65 64 28 73 71 6c 69 74  onUnlocked(sqlit
2d4c0 65 33 20 2a 64 62 29 3b 0a 20 20 76 6f 69 64 20  e3 *db);.  void 
2d4d0 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f  sqlite3Connectio
2d4e0 6e 43 6c 6f 73 65 64 28 73 71 6c 69 74 65 33 20  nClosed(sqlite3 
2d4f0 2a 64 62 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  *db);.#else.  #d
2d500 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e  efine sqlite3Con
2d510 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 78  nectionBlocked(x
2d520 2c 79 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,y).  #define sq
2d530 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55  lite3ConnectionU
2d540 6e 6c 6f 63 6b 65 64 28 78 29 0a 20 20 23 64 65  nlocked(x).  #de
2d550 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e  fine sqlite3Conn
2d560 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 78 29 0a  ectionClosed(x).
2d570 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
2d580 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 76 6f  QLITE_DEBUG.  vo
2d590 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  id sqlite3Parser
2d5a0 54 72 61 63 65 28 46 49 4c 45 2a 2c 20 63 68 61  Trace(FILE*, cha
2d5b0 72 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  r *);.#endif../*
2d5c0 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54  .** If the SQLIT
2d5d0 45 5f 45 4e 41 42 4c 45 20 49 4f 54 52 41 43 45  E_ENABLE IOTRACE
2d5e0 20 65 78 69 73 74 73 20 74 68 65 6e 20 74 68 65   exists then the
2d5f0 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
2d600 0a 2a 2a 20 73 71 6c 69 74 65 33 49 6f 54 72 61  .** sqlite3IoTra
2d610 63 65 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  ce is a pointer 
2d620 74 6f 20 61 20 70 72 69 6e 74 66 2d 6c 69 6b 65  to a printf-like
2d630 20 72 6f 75 74 69 6e 65 20 75 73 65 64 20 74 6f   routine used to
2d640 0a 2a 2a 20 70 72 69 6e 74 20 49 2f 4f 20 74 72  .** print I/O tr
2d650 61 63 69 6e 67 20 6d 65 73 73 61 67 65 73 2e 0a  acing messages..
2d660 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
2d670 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45 0a  _ENABLE_IOTRACE.
2d680 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45  # define IOTRACE
2d690 28 41 29 20 20 69 66 28 20 73 71 6c 69 74 65 33  (A)  if( sqlite3
2d6a0 49 6f 54 72 61 63 65 20 29 7b 20 73 71 6c 69 74  IoTrace ){ sqlit
2d6b0 65 33 49 6f 54 72 61 63 65 20 41 3b 20 7d 0a 20  e3IoTrace A; }. 
2d6c0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62   void sqlite3Vdb
2d6d0 65 49 4f 54 72 61 63 65 53 71 6c 28 56 64 62 65  eIOTraceSql(Vdbe
2d6e0 2a 29 3b 0a 53 51 4c 49 54 45 5f 41 50 49 20 53  *);.SQLITE_API S
2d6f0 51 4c 49 54 45 5f 45 58 54 45 52 4e 20 76 6f 69  QLITE_EXTERN voi
2d700 64 20 28 53 51 4c 49 54 45 5f 43 44 45 43 4c 20  d (SQLITE_CDECL 
2d710 2a 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 29  *sqlite3IoTrace)
2d720 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e  (const char*,...
2d730 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
2d740 65 20 49 4f 54 52 41 43 45 28 41 29 0a 23 20 64  e IOTRACE(A).# d
2d750 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 64 62  efine sqlite3Vdb
2d760 65 49 4f 54 72 61 63 65 53 71 6c 28 58 29 0a 23  eIOTraceSql(X).#
2d770 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
2d780 73 65 20 72 6f 75 74 69 6e 65 73 20 61 72 65 20  se routines are 
2d790 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 74 68  available for th
2d7a0 65 20 6d 65 6d 32 2e 63 20 64 65 62 75 67 67 69  e mem2.c debuggi
2d7b0 6e 67 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  ng memory alloca
2d7c0 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68  tor.** only.  Th
2d7d0 65 79 20 61 72 65 20 75 73 65 64 20 74 6f 20 76  ey are used to v
2d7e0 65 72 69 66 79 20 74 68 61 74 20 64 69 66 66 65  erify that diffe
2d7f0 72 65 6e 74 20 22 74 79 70 65 73 22 20 6f 66 20  rent "types" of 
2d800 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f 63 61  memory.** alloca
2d810 74 69 6f 6e 73 20 61 72 65 20 70 72 6f 70 65 72  tions are proper
2d820 6c 79 20 74 72 61 63 6b 65 64 20 62 79 20 74 68  ly tracked by th
2d830 65 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20  e system..**.** 
2d840 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
2d850 65 74 54 79 70 65 28 29 20 73 65 74 73 20 74 68  etType() sets th
2d860 65 20 22 74 79 70 65 22 20 6f 66 20 61 6e 20 61  e "type" of an a
2d870 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f 20 6f 6e 65  llocation to one
2d880 20 6f 66 0a 2a 2a 20 74 68 65 20 4d 45 4d 54 59   of.** the MEMTY
2d890 50 45 5f 2a 20 6d 61 63 72 6f 73 20 64 65 66 69  PE_* macros defi
2d8a0 6e 65 64 20 62 65 6c 6f 77 2e 20 20 54 68 65 20  ned below.  The 
2d8b0 74 79 70 65 20 6d 75 73 74 20 62 65 20 61 20 62  type must be a b
2d8c0 69 74 6d 61 73 6b 20 77 69 74 68 0a 2a 2a 20 61  itmask with.** a
2d8d0 20 73 69 6e 67 6c 65 20 62 69 74 20 73 65 74 2e   single bit set.
2d8e0 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65  .**.** sqlite3Me
2d8f0 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 29 20  mdebugHasType() 
2d900 72 65 74 75 72 6e 73 20 74 72 75 65 20 69 66 20  returns true if 
2d910 61 6e 79 20 6f 66 20 74 68 65 20 62 69 74 73 20  any of the bits 
2d920 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a  in its second.**
2d930 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20   argument match 
2d940 74 68 65 20 74 79 70 65 20 73 65 74 20 62 79 20  the type set by 
2d950 74 68 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c  the previous sql
2d960 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54  ite3MemdebugSetT
2d970 79 70 65 28 29 2e 0a 2a 2a 20 73 71 6c 69 74 65  ype()..** sqlite
2d980 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
2d990 28 29 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66  () is intended f
2d9a0 6f 72 20 75 73 65 20 69 6e 73 69 64 65 20 61 73  or use inside as
2d9b0 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74  sert() statement
2d9c0 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33  s..**.** sqlite3
2d9d0 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 29  MemdebugNoType()
2d9e0 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69 66   returns true if
2d9f0 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 62 69 74   none of the bit
2da00 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a  s in its second.
2da10 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63  ** argument matc
2da20 68 20 74 68 65 20 74 79 70 65 20 73 65 74 20 62  h the type set b
2da30 79 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 73  y the previous s
2da40 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65  qlite3MemdebugSe
2da50 74 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 50  tType()..**.** P
2da60 65 72 68 61 70 73 20 74 68 65 20 6d 6f 73 74 20  erhaps the most 
2da70 69 6d 70 6f 72 74 61 6e 74 20 70 6f 69 6e 74 20  important point 
2da80 69 73 20 74 68 65 20 64 69 66 66 65 72 65 6e 63  is the differenc
2da90 65 20 62 65 74 77 65 65 6e 20 4d 45 4d 54 59 50  e between MEMTYP
2daa0 45 5f 48 45 41 50 0a 2a 2a 20 61 6e 64 20 4d 45  E_HEAP.** and ME
2dab0 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2e  MTYPE_LOOKASIDE.
2dac0 20 20 49 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69    If an allocati
2dad0 6f 6e 20 69 73 20 4d 45 4d 54 59 50 45 5f 4c 4f  on is MEMTYPE_LO
2dae0 4f 4b 41 53 49 44 45 2c 20 74 68 61 74 20 6d 65  OKASIDE, that me
2daf0 61 6e 73 0a 2a 2a 20 69 74 20 6d 69 67 68 74 20  ans.** it might 
2db00 68 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f 63 61  have been alloca
2db10 74 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65  ted by lookaside
2db20 2c 20 65 78 63 65 70 74 20 74 68 65 20 61 6c 6c  , except the all
2db30 6f 63 61 74 69 6f 6e 20 77 61 73 0a 2a 2a 20 74  ocation was.** t
2db40 6f 6f 20 6c 61 72 67 65 20 6f 72 20 6c 6f 6f 6b  oo large or look
2db50 61 73 69 64 65 20 77 61 73 20 61 6c 72 65 61 64  aside was alread
2db60 79 20 66 75 6c 6c 2e 20 20 49 74 20 69 73 20 69  y full.  It is i
2db70 6d 70 6f 72 74 61 6e 74 20 74 6f 20 76 65 72 69  mportant to veri
2db80 66 79 0a 2a 2a 20 74 68 61 74 20 61 6c 6c 6f 63  fy.** that alloc
2db90 61 74 69 6f 6e 73 20 74 68 61 74 20 6d 69 67 68  ations that migh
2dba0 74 20 68 61 76 65 20 62 65 65 6e 20 73 61 74 69  t have been sati
2dbb0 73 66 69 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69  sfied by lookasi
2dbc0 64 65 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 70 61  de are not.** pa
2dbd0 73 73 65 64 20 62 61 63 6b 20 74 6f 20 6e 6f 6e  ssed back to non
2dbe0 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28  -lookaside free(
2dbf0 29 20 72 6f 75 74 69 6e 65 73 2e 20 20 41 73 73  ) routines.  Ass
2dc00 65 72 74 73 20 73 75 63 68 20 61 73 20 74 68 65  erts such as the
2dc10 0a 2a 2a 20 65 78 61 6d 70 6c 65 20 61 62 6f 76  .** example abov
2dc20 65 20 61 72 65 20 70 6c 61 63 65 64 20 6f 6e 20  e are placed on 
2dc30 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64  the non-lookasid
2dc40 65 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65  e free() routine
2dc50 73 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74  s to verify.** t
2dc60 68 69 73 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0a  his constraint..
2dc70 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 69  **.** All of thi
2dc80 73 20 69 73 20 6e 6f 2d 6f 70 20 66 6f 72 20 61  s is no-op for a
2dc90 20 70 72 6f 64 75 63 74 69 6f 6e 20 62 75 69 6c   production buil
2dca0 64 2e 20 20 49 74 20 6f 6e 6c 79 20 63 6f 6d 65  d.  It only come
2dcb0 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79 20 77  s into.** play w
2dcc0 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f 4d  hen the SQLITE_M
2dcd0 45 4d 44 45 42 55 47 20 63 6f 6d 70 69 6c 65 2d  EMDEBUG compile-
2dce0 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 75  time option is u
2dcf0 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  sed..*/.#ifdef S
2dd00 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a 20  QLITE_MEMDEBUG. 
2dd10 20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d   void sqlite3Mem
2dd20 64 65 62 75 67 53 65 74 54 79 70 65 28 76 6f 69  debugSetType(voi
2dd30 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71  d*,u8);.  int sq
2dd40 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73  lite3MemdebugHas
2dd50 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a  Type(void*,u8);.
2dd60 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d    int sqlite3Mem
2dd70 64 65 62 75 67 4e 6f 54 79 70 65 28 76 6f 69 64  debugNoType(void
2dd80 2a 2c 75 38 29 3b 0a 23 65 6c 73 65 0a 23 20 64  *,u8);.#else.# d
2dd90 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d  efine sqlite3Mem
2dda0 64 65 62 75 67 53 65 74 54 79 70 65 28 58 2c 59  debugSetType(X,Y
2ddb0 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23  )  /* no-op */.#
2ddc0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d   define sqlite3M
2ddd0 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 58  emdebugHasType(X
2dde0 2c 59 29 20 20 31 0a 23 20 64 65 66 69 6e 65 20  ,Y)  1.# define 
2ddf0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e  sqlite3MemdebugN
2de00 6f 54 79 70 65 28 58 2c 59 29 20 20 20 31 0a 23  oType(X,Y)   1.#
2de10 65 6e 64 69 66 0a 23 64 65 66 69 6e 65 20 4d 45  endif.#define ME
2de20 4d 54 59 50 45 5f 48 45 41 50 20 20 20 20 20 20  MTYPE_HEAP      
2de30 20 30 78 30 31 20 20 2f 2a 20 47 65 6e 65 72 61   0x01  /* Genera
2de40 6c 20 68 65 61 70 20 61 6c 6c 6f 63 61 74 69 6f  l heap allocatio
2de50 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45  ns */.#define ME
2de60 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 20  MTYPE_LOOKASIDE 
2de70 20 30 78 30 32 20 20 2f 2a 20 48 65 61 70 20 74   0x02  /* Heap t
2de80 68 61 74 20 6d 69 67 68 74 20 68 61 76 65 20 62  hat might have b
2de90 65 65 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 2a 2f  een lookaside */
2dea0 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45  .#define MEMTYPE
2deb0 5f 53 43 52 41 54 43 48 20 20 20 20 30 78 30 34  _SCRATCH    0x04
2dec0 20 20 2f 2a 20 53 63 72 61 74 63 68 20 61 6c 6c    /* Scratch all
2ded0 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66  ocations */.#def
2dee0 69 6e 65 20 4d 45 4d 54 59 50 45 5f 50 43 41 43  ine MEMTYPE_PCAC
2def0 48 45 20 20 20 20 20 30 78 30 38 20 20 2f 2a 20  HE     0x08  /* 
2df00 50 61 67 65 20 63 61 63 68 65 20 61 6c 6c 6f 63  Page cache alloc
2df10 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  ations */../*.**
2df20 20 54 68 72 65 61 64 69 6e 67 20 69 6e 74 65 72   Threading inter
2df30 66 61 63 65 0a 2a 2f 0a 23 69 66 20 53 51 4c 49  face.*/.#if SQLI
2df40 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48  TE_MAX_WORKER_TH
2df50 52 45 41 44 53 3e 30 0a 69 6e 74 20 73 71 6c 69  READS>0.int sqli
2df60 74 65 33 54 68 72 65 61 64 43 72 65 61 74 65 28  te3ThreadCreate(
2df70 53 51 4c 69 74 65 54 68 72 65 61 64 2a 2a 2c 76  SQLiteThread**,v
2df80 6f 69 64 2a 28 2a 29 28 76 6f 69 64 2a 29 2c 76  oid*(*)(void*),v
2df90 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  oid*);.int sqlit
2dfa0 65 33 54 68 72 65 61 64 4a 6f 69 6e 28 53 51 4c  e3ThreadJoin(SQL
2dfb0 69 74 65 54 68 72 65 61 64 2a 2c 20 76 6f 69 64  iteThread*, void
2dfc0 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  **);.#endif..#if
2dfd0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2dfe0 45 4e 41 42 4c 45 5f 44 42 53 54 41 54 5f 56 54  ENABLE_DBSTAT_VT
2dff0 41 42 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53  AB) || defined(S
2e000 51 4c 49 54 45 5f 54 45 53 54 29 0a 69 6e 74 20  QLITE_TEST).int 
2e010 73 71 6c 69 74 65 33 44 62 73 74 61 74 52 65 67  sqlite3DbstatReg
2e020 69 73 74 65 72 28 73 71 6c 69 74 65 33 2a 29 3b  ister(sqlite3*);
2e030 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c  .#endif..int sql
2e040 69 74 65 33 45 78 70 72 56 65 63 74 6f 72 53 69  ite3ExprVectorSi
2e050 7a 65 28 45 78 70 72 20 2a 70 45 78 70 72 29 3b  ze(Expr *pExpr);
2e060 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2e070 49 73 56 65 63 74 6f 72 28 45 78 70 72 20 2a 70  IsVector(Expr *p
2e080 45 78 70 72 29 3b 0a 45 78 70 72 20 2a 73 71 6c  Expr);.Expr *sql
2e090 69 74 65 33 56 65 63 74 6f 72 46 69 65 6c 64 53  ite3VectorFieldS
2e0a0 75 62 65 78 70 72 28 45 78 70 72 2a 2c 20 69 6e  ubexpr(Expr*, in
2e0b0 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  t);.Expr *sqlite
2e0c0 33 45 78 70 72 46 6f 72 56 65 63 74 6f 72 46 69  3ExprForVectorFi
2e0d0 65 6c 64 28 50 61 72 73 65 2a 2c 45 78 70 72 2a  eld(Parse*,Expr*
2e0e0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
2e0f0 74 65 33 56 65 63 74 6f 72 45 72 72 6f 72 4d 73  te3VectorErrorMs
2e100 67 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29  g(Parse*, Expr*)
2e110 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ;..#ifndef SQLIT
2e120 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50  E_OMIT_COMPILEOP
2e130 54 49 4f 4e 5f 44 49 41 47 53 0a 63 6f 6e 73 74  TION_DIAGS.const
2e140 20 63 68 61 72 20 2a 2a 73 71 6c 69 74 65 33 43   char **sqlite3C
2e150 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 28 69 6e  ompileOptions(in
2e160 74 20 2a 70 6e 4f 70 74 29 3b 0a 23 65 6e 64 69  t *pnOpt);.#endi
2e170 66 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  f..#endif /* SQL
2e180 49 54 45 49 4e 54 5f 48 20 2a 2f 0a              ITEINT_H */.